SalesOrderServiceImpl.java 103 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239
  1. package com.iamberry.rst.service.cm;
  2. import com.github.pagehelper.PageHelper;
  3. import com.iamberry.redis.RedisUtils;
  4. import com.iamberry.rst.core.cm.SalesOrder;
  5. import com.iamberry.rst.core.cm.SalesOrderItem;
  6. import com.iamberry.rst.core.cm.StoreInfo;
  7. import com.iamberry.rst.core.dm.SupplierProduct;
  8. import com.iamberry.rst.core.fm.ComplaintDetectInfo;
  9. import com.iamberry.rst.core.fm.InventoryInfo;
  10. import com.iamberry.rst.core.fm.InventoryLog;
  11. import com.iamberry.rst.core.order.*;
  12. import com.iamberry.rst.core.page.PagedResult;
  13. import com.iamberry.rst.core.sys.Admin;
  14. import com.iamberry.rst.core.sys.SysConfig;
  15. import com.iamberry.rst.core.tools.LogisticsInfo;
  16. import com.iamberry.rst.faces.address.AddressService;
  17. import com.iamberry.rst.faces.cm.InventoryService;
  18. import com.iamberry.rst.faces.cm.SalesOrderService;
  19. import com.iamberry.rst.faces.cm.StoreInfoService;
  20. import com.iamberry.rst.faces.order.EfastOrderService;
  21. import com.iamberry.rst.faces.order.OrderBatchService;
  22. import com.iamberry.rst.faces.order.OrderSyncLogService;
  23. import com.iamberry.rst.faces.order.OrderWarehouseService;
  24. import com.iamberry.rst.faces.product.ProductService;
  25. import com.iamberry.rst.service.cm.mapper.SalesOrderMapper;
  26. import com.iamberry.rst.service.dm.mapper.SupplierProductMapper;
  27. import com.iamberry.rst.service.fm.mapper.ComplaintDetectInfoMapper;
  28. import com.iamberry.rst.service.fm.mapper.InventoryLogMapper;
  29. import com.iamberry.rst.service.fm.mapper.InventoryMapper;
  30. import com.iamberry.rst.service.order.mapper.DeliveryStrategyMapper;
  31. import com.iamberry.rst.service.order.mapper.ProvincesLogisticsMapper;
  32. import com.iamberry.rst.service.product.mapper.ProductMapper;
  33. import com.iamberry.rst.service.sys.mapper.SysConfigMapper;
  34. import com.iamberry.rst.util.PageUtil;
  35. import com.iamberry.wechat.tools.DateTimeUtil;
  36. import net.sf.json.JSONArray;
  37. import net.sf.json.JSONObject;
  38. import org.slf4j.Logger;
  39. import org.slf4j.LoggerFactory;
  40. import org.springframework.beans.BeanUtils;
  41. import org.springframework.beans.factory.annotation.Autowired;
  42. import org.springframework.stereotype.Service;
  43. import org.springframework.transaction.annotation.Isolation;
  44. import org.springframework.transaction.annotation.Transactional;
  45. import java.sql.SQLException;
  46. import java.text.SimpleDateFormat;
  47. import java.util.*;
  48. /**
  49. * Created by liuzhiwei on 2017/10/31.
  50. */
  51. @Service
  52. public class SalesOrderServiceImpl implements SalesOrderService {
  53. private static Logger logger = LoggerFactory.getLogger(CustomerServiceImpl.class);
  54. @Autowired
  55. private SalesOrderMapper salesOrderMapper;
  56. @Autowired
  57. private ProductService productService;
  58. @Autowired
  59. private StoreInfoService storeInfoService;
  60. @Autowired
  61. private EfastOrderService efastOrderService;
  62. @Autowired
  63. private SalesOrderService salesOrderService;
  64. @Autowired
  65. private SysConfigMapper sysConfigMapper;
  66. @Autowired
  67. private AddressService addressService;
  68. @Autowired
  69. private ProvincesLogisticsMapper provincesLogisticsMapper;
  70. @Autowired
  71. private ProductMapper productMapper;
  72. @Autowired
  73. private InventoryMapper inventoryMapper;
  74. @Autowired
  75. private InventoryLogMapper inventoryLogMapper;
  76. @Autowired
  77. private ComplaintDetectInfoMapper complaintDetectInfoMapper;
  78. @Autowired
  79. private OrderWarehouseService orderWarehouseService;
  80. @Autowired
  81. private InventoryService inventoryService;
  82. @Autowired
  83. private SupplierProductMapper supplierProductMapper;
  84. @Autowired
  85. private OrderBatchService orderBatchService;
  86. @Autowired
  87. private DeliveryStrategyMapper deliveryStrategyMapper;
  88. @Autowired
  89. private OrderSyncLogService orderSyncLogService;
  90. /**
  91. * 缓存订单项的前缀
  92. */
  93. public static String CACHE_ORDER_ITEM_NAME = null;
  94. static {
  95. Map<String,String> map = System.getenv();
  96. if ("iZ94klno8qrZ".equalsIgnoreCase(map.get("COMPUTERNAME"))) {
  97. CACHE_ORDER_ITEM_NAME = "RST_ORDER_ITEM_";
  98. } else {
  99. CACHE_ORDER_ITEM_NAME = "adv_ORDER_ITEM_";
  100. }
  101. }
  102. @Override
  103. public Integer addSalesOrder(SalesOrder salesOrder) {
  104. return salesOrderMapper.addSalesOrder(salesOrder);
  105. }
  106. @Override
  107. @Transactional
  108. public Integer addSalesOrderManual(SalesOrder salesOrder) {
  109. salesOrderMapper.addSalesOrder(salesOrder);
  110. return null;
  111. }
  112. @Override
  113. public SalesOrder getSalesOrderById(Integer salesId) {
  114. return salesOrderMapper.getSalesOrderById(salesId);
  115. }
  116. @Override
  117. public SalesOrder getSalesOrderByIdConcise(Integer salesId) {
  118. return salesOrderMapper.getSalesOrderByIdConcise(salesId);
  119. }
  120. @Override
  121. public List<SalesOrder> getSalesOrderListConcise(SalesOrder salesOrder){
  122. return salesOrderMapper.getSalesOrderListConcise(salesOrder);
  123. }
  124. @Override
  125. public List<SalesOrderItem> getOrderItemListBySalesId(Integer itemOrderId) {
  126. return salesOrderMapper.getOrderItemListBySalesId(itemOrderId);
  127. }
  128. @Override
  129. public List<SalesOrder> getSalesOrderByIds(Integer[] salesIds){
  130. return salesOrderMapper.getSalesOrderByIds(salesIds);
  131. }
  132. @Override
  133. public List<SalesOrder> getSonSalesOrderBySaleId(Integer salesId) {
  134. return salesOrderMapper.getSonSalesOrderBySaleId(salesId);
  135. }
  136. @Override
  137. @Transactional(rollbackFor = {Exception.class}, isolation = Isolation.REPEATABLE_READ)
  138. public Integer updateSalesOrder(SalesOrder salesOrder) {
  139. Integer res = salesOrderMapper.updateSalesOrder(salesOrder);
  140. if (res == null || res <= 0) {
  141. return 0;
  142. }
  143. // 确认订单需要填入产品成本价格
  144. if(salesOrder.getSalesStatus() != null && salesOrder.getSalesStatus() == 1){
  145. SalesOrderItem salesOrderItem = new SalesOrderItem();
  146. salesOrderItem.setItemOrderId(salesOrder.getSalesId());
  147. List<SalesOrderItem> salesOrderItemList = salesOrderMapper.listSalesOrderItem(salesOrderItem);
  148. List<SalesOrderItem> newSalesOrderItem = new ArrayList<>();
  149. for (SalesOrderItem soi:salesOrderItemList) {
  150. SupplierProduct supplierProduct = supplierProductMapper.getSupplierProductByColorId(soi.getItemColorId());
  151. if(supplierProduct != null){
  152. SalesOrderItem newSalesOrder = new SalesOrderItem();
  153. newSalesOrder.setItemCost(supplierProduct.getSpCost());
  154. newSalesOrder.setItemCostTotal(supplierProduct.getSpCost() * soi.getItemNum());
  155. newSalesOrder.setItemId(soi.getItemId());
  156. newSalesOrderItem.add(newSalesOrder);
  157. }else{
  158. throw new RuntimeException("确认订单失败-未查询到该产品("+ soi.getItemProductName() +"-"+ soi.getItemProductColor() +")的成本价格");
  159. }
  160. }
  161. for (SalesOrderItem soi : newSalesOrderItem) {
  162. Integer flag = salesOrderMapper.updateOrderItemObj(soi);
  163. if(flag < 1){
  164. throw new RuntimeException("确认订单失败-修改产品项的成本价格失败");
  165. }
  166. }
  167. }
  168. // 作废订单时需要返还库存
  169. if(salesOrder.getSalesStatus() != null && salesOrder.getSalesStatus() == 3){
  170. // 如果已出库则返还库存
  171. SalesOrder so = salesOrderMapper.getSalesOrderById(salesOrder.getSalesId());
  172. if(so.getSalesDeliver() == 2){
  173. SalesOrderItem salesOrderItem = new SalesOrderItem();
  174. salesOrderItem.setItemOrderId(so.getSalesId());
  175. List<SalesOrderItem> listOrderitem = salesOrderService.listSalesOrderItem(salesOrderItem);
  176. for (SalesOrderItem soi:listOrderitem) {
  177. InventoryInfo inventoryInfo2 = new InventoryInfo();
  178. //良品数量
  179. inventoryInfo2.setInventoryGoodProductNum(soi.getItemNum());
  180. inventoryInfo2.setInventoryProductBar(soi.getItemColorBar());
  181. inventoryInfo2.setWarehouseId(so.getSalesWarehouseId());
  182. //类型1.采购 2.发货 3.次品
  183. inventoryInfo2.setLogType(1);
  184. inventoryInfo2.setInventoryRecentRecord("作废订单返还库存-作废订单号:"+ so.getSalesDealCode());
  185. inventoryService.addInventory(inventoryInfo2);
  186. }
  187. }
  188. }
  189. return 1;
  190. }
  191. @Override
  192. public Integer update(SalesOrder salesOrder) {
  193. return salesOrderMapper.updateSalesOrder(salesOrder);
  194. }
  195. @Override
  196. @Transactional(rollbackFor = {Exception.class}, isolation = Isolation.REPEATABLE_READ)
  197. public Integer updateOrderInfo(SalesOrder salesOrder) {
  198. int flag = 0;
  199. if(salesOrder.getSalesId()==null){
  200. throw new RuntimeException("订单ID不存在!");
  201. }
  202. // 处理订单项
  203. Date nowTime = new Date();
  204. for (SalesOrderItem addItem:salesOrder.getSalesOrderItemList()) {
  205. if(addItem.getItemNum() > 0 && addItem.getItemColorId() > 0){
  206. ProductColor productColor = productService.getProduceColor(addItem.getItemColorId());
  207. if(productColor == null){
  208. throw new RuntimeException("删除订单项失败-查询商品失败");
  209. }
  210. ////产品id
  211. addItem.setItemProductId(productColor.getColorProductId());
  212. addItem.setItemColorId(productColor.getColorId());
  213. addItem.setItemProductType(productColor.getProductType());
  214. addItem.setItemProductName(productColor.getProductName());
  215. addItem.setItemProductPic(productColor.getColorPicture());
  216. addItem.setItemProductColor(productColor.getColorName());
  217. addItem.setItemColorBar(productColor.getColorBar());
  218. addItem.setItemCreateTime(nowTime);
  219. addItem.setItemIsSource(1);
  220. addItem.setItemOrderId(salesOrder.getSalesId());
  221. //成本价
  222. SupplierProduct supplierProduct = supplierProductMapper.getSupplierProductByColorId(addItem.getItemColorId());
  223. if(supplierProduct != null){
  224. addItem.setItemCost(supplierProduct.getSpCost());
  225. addItem.setItemCostTotal(supplierProduct.getSpCost() * addItem.getItemNum());
  226. }else{
  227. throw new RuntimeException("确认订单失败-未查询到该产品("+ addItem.getItemProductName() +"-"+ addItem.getItemProductColor() +")的成本价格");
  228. }
  229. } else {
  230. throw new RuntimeException("添加订单项失败(订单产品不能为空)!");
  231. }
  232. }
  233. // 处理订单项,如果是新增的就新增,如果是原有的,则修改,否则删除
  234. SalesOrderItem soi = new SalesOrderItem();
  235. soi.setItemOrderId(salesOrder.getSalesId());
  236. List<SalesOrderItem> salesOrderItemList = salesOrderMapper.listSalesOrderItem(soi);
  237. List<SalesOrderItem> updateSalesOrderItemList = new ArrayList<>();
  238. List<SalesOrderItem> deleteSalesOrderItemList = new ArrayList<>();
  239. for (SalesOrderItem oldSoi:salesOrderItemList) {
  240. boolean isHave = false;
  241. int deleteId = 0;
  242. SalesOrderItem updateItem = null;
  243. for (int i = 0; i < salesOrder.getSalesOrderItemList().size(); i++) {
  244. SalesOrderItem temp = salesOrder.getSalesOrderItemList().get(i);
  245. if(Objects.equals(temp.getItemId(), oldSoi.getItemId())){
  246. isHave = true;
  247. deleteId = i;
  248. updateItem = temp;
  249. break;
  250. }
  251. }
  252. if(isHave){
  253. updateSalesOrderItemList.add(updateItem);
  254. salesOrder.getSalesOrderItemList().remove(deleteId);
  255. }else{
  256. deleteSalesOrderItemList.add(oldSoi);
  257. }
  258. }
  259. // 删除订单项
  260. for (SalesOrderItem deleteId:deleteSalesOrderItemList) {
  261. if (salesOrderMapper.delOrderItemByItemId(deleteId.getItemId()) <= 0) {
  262. throw new RuntimeException("修改订单失败!");
  263. }
  264. }
  265. // 批量修改订单项
  266. if(updateSalesOrderItemList.size() > 0) {
  267. for (SalesOrderItem salesOrderItem : updateSalesOrderItemList) {
  268. flag = salesOrderMapper.updateOrderItemObj(salesOrderItem);
  269. }
  270. }
  271. // 批量添加订单项数据
  272. if(salesOrder.getSalesOrderItemList() != null && salesOrder.getSalesOrderItemList().size() > 0){
  273. if (salesOrderMapper.addOrderItemList(salesOrder.getSalesOrderItemList()) <= 0) {
  274. throw new RuntimeException("增加订单项失败!");
  275. }
  276. }
  277. //计算价格
  278. List<SalesOrderItem> nowSalesOrderItemList = salesOrderMapper.listSalesOrderItem(soi);
  279. calculationTotal(salesOrder,nowSalesOrderItemList);
  280. //修改订单
  281. if (salesOrderMapper.updateSalesOrder(salesOrder) <= 0) {
  282. throw new RuntimeException("修改订单失败!");
  283. }
  284. // 更新Redis缓存
  285. cacheOrderItem(salesOrder.getSalesId());
  286. return flag;
  287. }
  288. @Override
  289. public Integer addSalesOrderList(List<SalesOrder> list) {
  290. return salesOrderMapper.addSalesOrderList(list);
  291. }
  292. @Override
  293. public List<SalesOrder> listSalesOrder(SalesOrder salesOrder) {
  294. return salesOrderMapper.listSalesOrder(salesOrder);
  295. }
  296. @Override
  297. public Integer listSalesOrderNum(SalesOrder salesOrder) {
  298. return salesOrderMapper.listSalesOrderNum(salesOrder);
  299. }
  300. /**
  301. * 获取订单的订单项,首先从REDIS中获取,如果没有获取到,尝试从数据库获取
  302. * @param salesId
  303. * @return
  304. */
  305. private List<SalesOrderItem> listOrderItem(Integer salesId) {
  306. String key = CACHE_ORDER_ITEM_NAME + salesId;
  307. List<SalesOrderItem> list = RedisUtils.list(key, SalesOrderItem.class);
  308. if (list == null) {
  309. cacheOrderItem(salesId);
  310. list = RedisUtils.list(key, SalesOrderItem.class);
  311. }
  312. return list;
  313. }
  314. /**
  315. * 更新缓存订单项(从数据库获取一次)
  316. * @param salesId
  317. */
  318. private void cacheOrderItem(Integer salesId) {
  319. // 查询数据库的数据
  320. SalesOrderItem salesOrderItem = new SalesOrderItem();
  321. salesOrderItem.setItemOrderId(salesId);
  322. List<SalesOrderItem> list = salesOrderMapper.listSalesOrderItem(salesOrderItem);
  323. // 缓存
  324. String key = CACHE_ORDER_ITEM_NAME + salesId;
  325. RedisUtils.put(key, list);
  326. RedisUtils.expire(key,DateTimeUtil.addDay(1));
  327. }
  328. @Override
  329. public PagedResult<SalesOrder> listSalesOrderPage(int pageNO, int pageSize, SalesOrder salesOrder, boolean isTotalNum) {
  330. // 初始化页面分页的数据
  331. salesOrder.setStartOrderNO((pageNO-1) * pageSize);
  332. salesOrder.setEndOrderNO(pageSize);
  333. //查询订单列表信息
  334. List<SalesOrder> orderList = salesOrderMapper.listSalesOrderNew(salesOrder);
  335. orderList.forEach((so) -> {
  336. List<SalesOrderItem> salesOrderItemList = listOrderItem(so.getSalesId());
  337. salesOrderItemList.forEach((item) -> {
  338. //判断是否包含净水机 1是 2否
  339. if(item.getColorIsMachine() != null){
  340. if(item.getColorIsMachine() == 1){
  341. so.setIsDevelop(1);
  342. }else{
  343. so.setIsDevelop(2);
  344. }
  345. }else{
  346. so.setIsDevelop(1);
  347. }
  348. });
  349. so.setSalesOrderItemList(salesOrderItemList);
  350. });
  351. PagedResult<SalesOrder> result = PageUtil.getPage(orderList);
  352. // 查询分页的数据
  353. int count = salesOrderMapper.listSalesOrderNum(salesOrder);
  354. result.setTotal(count);
  355. if(count%pageSize==0){
  356. count=count/pageSize;
  357. } else{
  358. count=count/pageSize+1;
  359. }
  360. result.setPages(count);
  361. result.setPageNo(pageNO);
  362. result.setPageSize(pageSize);
  363. return result;
  364. }
  365. @Override
  366. public List<PostInfo> listWaitPrintOrderNum(Integer salesWarehouseId) {
  367. return salesOrderMapper.listWaitPrintOrderNum(salesWarehouseId);
  368. }
  369. @Override
  370. public PagedResult<SalesOrder> listAwaitSendSalesOrderPage(int pageNO, int pageSize, SalesOrder salesOrder, boolean isTotalNum) {
  371. PageHelper.startPage(pageNO, pageSize, isTotalNum);
  372. //查询订单列表信息
  373. List<SalesOrder> orderList = salesOrderMapper.listAwaitSendSalesOrderPage(salesOrder);
  374. return PageUtil.getPage(orderList);
  375. }
  376. @Override
  377. @Transactional
  378. public boolean addOrderAndItem(SalesOrder salesOrder, List<SalesOrderItem> list) throws Exception {
  379. if (list == null || list.size() == 0) {
  380. throw new RuntimeException("获取订单信息出错!");
  381. }
  382. SalesOrder verifyOrder = new SalesOrder();
  383. verifyOrder.setSalesOrderId(salesOrder.getSalesOrderId());
  384. //查询该订单是否存在,如果存在,不需要再次添加到订单中
  385. int count = salesOrderMapper.getOrderInfoCount(verifyOrder);
  386. if (count > 0) {
  387. return true;
  388. }
  389. //添加订单数据
  390. calculationTotal(salesOrder,list);
  391. try {
  392. int orderNum = salesOrderMapper.addSalesOrder(salesOrder);
  393. if (orderNum <= 0) {
  394. throw new RuntimeException("获取订单信息出错!");
  395. }
  396. } catch (Exception e) {
  397. return true;
  398. }
  399. for (SalesOrderItem item : list) {
  400. item.setItemOrderId(salesOrder.getSalesId());
  401. }
  402. //批量添加订单项数据
  403. int itemNum = salesOrderMapper.addOrderItemList(list);
  404. if (itemNum <= 0) {
  405. throw new RuntimeException("获取订单信息出错!");
  406. }
  407. return true;
  408. }
  409. @Override
  410. @Transactional
  411. public SalesOrder addOrderAndIteminfo(SalesOrder salesOrder, List<SalesOrderItem> list) {
  412. calculationTotal(salesOrder,list);
  413. //添加订单数据
  414. int orderNum = salesOrderMapper.addSalesOrder(salesOrder);
  415. if (orderNum <= 0) {
  416. return salesOrder;
  417. }
  418. for (SalesOrderItem item : list) {
  419. item.setItemOrderId(salesOrder.getSalesId());
  420. }
  421. //批量添加订单项数据
  422. int itemNum = salesOrderMapper.addOrderItemList(list);
  423. if (itemNum <= 0) {
  424. return salesOrder;
  425. }
  426. this.cacheOrderItem(salesOrder.getSalesId());
  427. return salesOrder;
  428. }
  429. @Override
  430. public void parseOrder(SalesOrder oginerOrder, List<SalesOrder> listOrder) {
  431. // 订单项拆分完成,直接返回
  432. if (oginerOrder.getSalesOrderItemList().size() <= 0) {
  433. return;
  434. }
  435. List<DownsingleRuleInfo> listDownsingleRuleInfo = salesOrderService.listDownsingleRule();
  436. if(listDownsingleRuleInfo.size() < 1){
  437. listOrder.add(oginerOrder);
  438. return;
  439. }
  440. // 拆单,比较的是数量和产品
  441. Map<String, SalesOrderItem> itemMap = new HashMap<>(oginerOrder.getSalesOrderItemList().size());
  442. for (SalesOrderItem item : oginerOrder.getSalesOrderItemList()) {
  443. SalesOrderItem itemTwo = new SalesOrderItem();
  444. BeanUtils.copyProperties(item,itemTwo);
  445. itemMap.put(item.getItemColorBar(), itemTwo);
  446. }
  447. // 遍历拆单规则
  448. int ruleCount = 0;
  449. for (DownsingleRuleInfo rule : listDownsingleRuleInfo) {
  450. // 一个拆单规则
  451. int count = 0;
  452. for (DownsingleRuleItemInfo item : rule.getDownsingleRuleItemList()) {
  453. if (itemMap.get(item.getDownsingleItemBar()) != null) {
  454. if (item.getDownsingleItemNum() <= itemMap.get(item.getDownsingleItemBar()).getItemNum()) {
  455. count ++;
  456. }
  457. }
  458. }
  459. if (count == rule.getDownsingleRuleItemList().size()) {
  460. // 满足拆单条件
  461. SalesOrder newOrder = new SalesOrder();
  462. BeanUtils.copyProperties(oginerOrder,newOrder);
  463. newOrder.setSalesOrderItemList(new ArrayList<SalesOrderItem>(count));
  464. for (DownsingleRuleItemInfo item : rule.getDownsingleRuleItemList()) {
  465. SalesOrderItem temp = new SalesOrderItem();
  466. BeanUtils.copyProperties(itemMap.get(item.getDownsingleItemBar()),temp);
  467. temp.setItemNum(item.getDownsingleItemNum());
  468. newOrder.getSalesOrderItemList().add(temp);
  469. }
  470. listOrder.add(newOrder);
  471. // 继续递归
  472. for (DownsingleRuleItemInfo item : rule.getDownsingleRuleItemList()) {
  473. if (item.getDownsingleItemNum().equals(itemMap.get(item.getDownsingleItemBar()).getItemNum())) {
  474. // 数量和拆单规则相同,则删除原订单的订单项
  475. /*oginerOrder.getSalesOrderItemList().remove(itemMap.get(item.getDownsingleItemBar()));*/
  476. for(int i = 0;i<oginerOrder.getSalesOrderItemList().size();i++){
  477. if(oginerOrder.getSalesOrderItemList().get(i).getItemColorBar() .equals(item.getDownsingleItemBar())){
  478. oginerOrder.getSalesOrderItemList().remove(i);
  479. }
  480. }
  481. } else {
  482. // SalesOrderItem orderItem = itemMap.get(item.getDownsingleItemBar());
  483. SalesOrderItem orderItem = new SalesOrderItem();
  484. BeanUtils.copyProperties(itemMap.get(item.getDownsingleItemBar()),orderItem);
  485. int oldCount = orderItem.getItemNum();
  486. /*orderItem.setItemNum(oldCount - item.getDownsingleItemNum());*/
  487. for(int i = 0;i<oginerOrder.getSalesOrderItemList().size();i++){
  488. if(oginerOrder.getSalesOrderItemList().get(i).getItemColorBar() .equals(item.getDownsingleItemBar())){
  489. oginerOrder.getSalesOrderItemList().get(i).setItemNum(oldCount - item.getDownsingleItemNum());
  490. }
  491. }
  492. }
  493. }
  494. salesOrderService.parseOrder(oginerOrder, listOrder);
  495. break;
  496. } else {
  497. // 不满足, 继续下一个规则
  498. // 如果是最后一个拆单规则,则不拆单
  499. if ((ruleCount + 1) == listDownsingleRuleInfo.size()) {
  500. if (oginerOrder.getSalesOrderItemList().size() > 0) {
  501. listOrder.add(oginerOrder);
  502. }
  503. }
  504. }
  505. ruleCount++;
  506. }
  507. }
  508. @Override
  509. @Transactional(rollbackFor = {Exception.class, SQLException.class}, isolation = Isolation.REPEATABLE_READ)
  510. public boolean addRstOrderAndIteminfo(SalesOrder salesOrder){
  511. //总支付金额
  512. Integer salesPayMoney = 0;
  513. for (SalesOrderItem soi : salesOrder.getSalesOrderItemList()) {
  514. if(soi.getItemProductDiscount() != null){
  515. Integer differenceNumber = soi.getItemNum()*soi.getItemProductDiscount() - soi.getItemTotal();
  516. differenceNumber = Math.abs(differenceNumber); //绝对值
  517. if(soi.getItemProductDiscount() == 0 || soi.getItemProductDiscount() == 1 || differenceNumber > 1){
  518. Double dis = Double.valueOf(soi.getItemTotal())/soi.getItemNum();
  519. soi.setItemProductDiscount(dis.intValue());
  520. }
  521. }else{
  522. Double dis = Double.valueOf(soi.getItemTotal())/soi.getItemNum();
  523. soi.setItemProductDiscount(dis.intValue());
  524. }
  525. salesPayMoney += soi.getItemTotal();
  526. }
  527. //合并订单项-------------statr
  528. List<SalesOrderItem> listItem = salesOrder.getSalesOrderItemList();
  529. salesOrder.setSalesOrderItemList(null);
  530. List<SalesOrderItem> list = new ArrayList<>();
  531. for (int i = 0;i<listItem.size();i++){
  532. if(i < listItem.size() - 1 ){
  533. for(int j = 0;j<listItem.size();j++){
  534. if (i != j){
  535. if(listItem.get(i).getItemColorBar().equals(listItem.get(j).getItemColorBar())){
  536. listItem.get(i).setItemNum(listItem.get(i).getItemNum()+listItem.get(j).getItemNum());
  537. }
  538. }
  539. }
  540. }
  541. boolean bl = true;
  542. for (SalesOrderItem salesOrderItem : list){
  543. if(salesOrderItem.getItemColorBar().equals(listItem.get(i).getItemColorBar())){
  544. bl = false;
  545. }
  546. }
  547. if(bl){
  548. list.add(listItem.get(i));
  549. }
  550. }
  551. //合并订单项----------------------end
  552. //匹配拆单规则 分割订单-------------state
  553. List<SalesOrder> listSalesOrder = new ArrayList<>();
  554. salesOrder.setSalesOrderItemList(list);
  555. salesOrderService.parseOrder(salesOrder, listSalesOrder);
  556. //匹配拆单规则 分割订单-------------end
  557. boolean msg = false;
  558. /*根据省份来分配物流公司*/
  559. /*salesOrderService.setProvincesLogistics(listSalesOrder);*/
  560. /*根据快递策略来分配物流公司*/
  561. setStrategyLogistics(listSalesOrder);
  562. /*查询成本*/
  563. for (SalesOrder so:listSalesOrder) {
  564. for (SalesOrderItem soi:so.getSalesOrderItemList()) {
  565. SupplierProduct supplierProduct = supplierProductMapper.getSupplierProductByColorId(soi.getItemColorId());
  566. if(supplierProduct != null){
  567. soi.setItemCost(supplierProduct.getSpCost());
  568. soi.setItemCostTotal(supplierProduct.getSpCost() * soi.getItemNum());
  569. }else{
  570. throw new RuntimeException("确认订单失败-未查询到该产品("+ soi.getItemProductName() +"-"+ soi.getItemProductColor() +")的成本价格");
  571. }
  572. }
  573. }
  574. for (int i = 0; i < listSalesOrder.size() ; i++) {
  575. boolean isLastItem = false;
  576. if((i+1) >= listSalesOrder.size()){
  577. isLastItem = true;
  578. }
  579. SalesOrder so = listSalesOrder.get(i);
  580. for (int j = 0; j < so.getSalesOrderItemList().size(); j++) {
  581. SalesOrderItem soi = so.getSalesOrderItemList().get(j);
  582. if((j+1) >= so.getSalesOrderItemList().size() && isLastItem){
  583. soi.setItemTotal(salesPayMoney);
  584. if(salesPayMoney > 0){
  585. soi.setItemProductDiscount(salesPayMoney/soi.getItemNum());
  586. }
  587. }else{
  588. Integer total = soi.getItemNum()*soi.getItemProductDiscount();
  589. soi.setItemTotal(total);
  590. salesPayMoney -= total;
  591. }
  592. }
  593. }
  594. //判断主从订单--------------------state
  595. if (listSalesOrder.size() > 0){
  596. SalesOrder mainOrder = null;
  597. for (int s = 0;s < listSalesOrder.size();s++){
  598. if(mainOrder == null){
  599. for(int i = 0;i<listSalesOrder.get(s).getSalesOrderItemList().size();i++){
  600. int isMachine = salesOrderService.getIsMachine(listSalesOrder.get(s).getSalesOrderItemList().get(i).getItemColorBar());
  601. if( isMachine == 1){//1:水机 2:其它产品 0:未查到
  602. mainOrder = listSalesOrder.get(s);
  603. listSalesOrder.remove(s);
  604. break;
  605. }
  606. }
  607. }
  608. }
  609. if(mainOrder == null){//如果不存有水机的订单则默认第一个订单为主订单
  610. mainOrder = listSalesOrder.get(0);
  611. listSalesOrder.remove(0);
  612. }
  613. //判断主从订单--------------------end
  614. msg = salesOrderService.addRstOrderinfo(mainOrder,listSalesOrder,null);
  615. }
  616. return msg;
  617. }
  618. @Override
  619. @Transactional(rollbackFor = {Exception.class}, isolation = Isolation.REPEATABLE_READ)
  620. public boolean addRstOrderinfo(SalesOrder mainOrder,List<SalesOrder> listSalesOrder,String[] detectIds) {
  621. // 查询交易号的数量
  622. Integer flag = salesOrderMapper.getOrderBySalesDealCodeNum(mainOrder.getSalesDealCode());
  623. if(flag > 0){
  624. throw new RuntimeException("交易号("+ mainOrder.getSalesDealCode() +")重复,请重新生成交易号!");
  625. }
  626. if(mainOrder.getSalesAddressPostcode() == null){
  627. throw new RuntimeException("未获取到邮政编码信息,请检查地址信息!");
  628. }
  629. if(mainOrder.getSalesCreateTime() == null){
  630. /*保证时间与以前一样*/
  631. mainOrder.setSalesCreateTime(mainOrder.getSalesOrderItemList().get(0).getItemCreateTime());
  632. }
  633. // 计算金额
  634. calculationTotal(mainOrder,mainOrder.getSalesOrderItemList());
  635. // 2019年12月27日15:49:16新增快递策略 分配物流方式
  636. List<SalesOrder> listS = new ArrayList<>();
  637. listS.add(mainOrder);
  638. setStrategyLogistics(listS);
  639. // 子订单根据快递策略分配物流方式
  640. setStrategyLogistics(listSalesOrder);
  641. if(mainOrder.getSalesDeliver() == null){
  642. mainOrder.setSalesDeliver(1);
  643. }
  644. // 保存订单信息
  645. int res = salesOrderMapper.addSalesOrder(mainOrder);
  646. if (res <= 0) {
  647. throw new RuntimeException("添加订单出错,请核查内容");
  648. }
  649. for (SalesOrderItem item : mainOrder.getSalesOrderItemList()) {
  650. item.setItemOrderId(mainOrder.getSalesId());
  651. }
  652. // 批量添加订单项数据
  653. res = salesOrderMapper.addOrderItemList(mainOrder.getSalesOrderItemList());
  654. if (res <= 0) {
  655. throw new RuntimeException("添加订单出错,保存订单项失败");
  656. }
  657. // 保存子订单的内容
  658. if(listSalesOrder.size() > 0){
  659. for (int i = 0;i<listSalesOrder.size();i++){
  660. // 生产交易号
  661. listSalesOrder.get(i).setSalesDealCode(listSalesOrder.get(i).getSalesDealCode()+"-"+(i+1));
  662. if(listSalesOrder.get(i).getSalesOrderId() != null && !"".equals(listSalesOrder.get(i).getSalesOrderId())){
  663. listSalesOrder.get(i).setSalesOrderId(listSalesOrder.get(i).getSalesOrderId()+"-"+(i+1));
  664. }
  665. // 主订单id
  666. if(listSalesOrder.get(i).getSalesDeliver() == null){
  667. listSalesOrder.get(i).setSalesDeliver(1);
  668. }
  669. listSalesOrder.get(i).setSalesMainOrderId(mainOrder.getSalesId());
  670. listSalesOrder.get(i).setSalesId(null);
  671. calculationTotal(listSalesOrder.get(i),listSalesOrder.get(i).getSalesOrderItemList());
  672. res = salesOrderMapper.addSalesOrder(listSalesOrder.get(i));
  673. if (res <= 0) {
  674. throw new RuntimeException("添加子订单出错");
  675. }
  676. for (SalesOrderItem item : listSalesOrder.get(i).getSalesOrderItemList()) {
  677. item.setItemOrderId(listSalesOrder.get(i).getSalesId());
  678. }
  679. // 批量添加订单项数据
  680. res = salesOrderMapper.addOrderItemList(listSalesOrder.get(i).getSalesOrderItemList());
  681. if (res <= 0) {
  682. throw new RuntimeException("添加子订单出错,保存订单项失败");
  683. }
  684. }
  685. }
  686. // 修为维修记录为已下单
  687. if(detectIds != null && detectIds.length > 0){
  688. for(String detectId : detectIds){
  689. ComplaintDetectInfo detectInfo = new ComplaintDetectInfo();
  690. detectInfo.setDetectId(Integer.valueOf(detectId));
  691. detectInfo.setDetectPlaceorder(2);
  692. detectInfo.setSalesOrderId(mainOrder.getSalesOrderId());
  693. complaintDetectInfoMapper.updateDetectById(detectInfo);
  694. }
  695. }
  696. // 缓存订单项
  697. cacheOrderItem(mainOrder.getSalesId());
  698. return true;
  699. }
  700. /**
  701. * 根据省份来分配物流公司
  702. * @param listSalesOrder
  703. * @return
  704. */
  705. @Override
  706. public void setProvincesLogistics(List<SalesOrder> listSalesOrder){
  707. for (SalesOrder salesOrder:listSalesOrder) {
  708. boolean flag = false;
  709. for (SalesOrderItem salesOrderItem:salesOrder.getSalesOrderItemList()) {
  710. ProductColor productColor = productService.getColorByBar(salesOrderItem.getItemColorBar());
  711. if(productColor.getColorIsMachine() == 1){
  712. flag = true;
  713. }
  714. }
  715. if(flag){
  716. String addresses[] = salesOrder.getSalesAddressInfo().split("-");
  717. if(addresses == null || addresses.length < 3){
  718. addresses = salesOrder.getSalesAddressInfo().split(" ");
  719. }
  720. if(addresses == null || addresses.length < 3){
  721. addresses = salesOrder.getSalesAddressInfo().split("_");
  722. }
  723. if(addresses == null || addresses.length < 3){
  724. break;
  725. }
  726. String provincesStr = addresses[0];
  727. provincesStr = provincesStr.substring(0,2);
  728. ProvincesLogistics provincesLogistics = new ProvincesLogistics();
  729. provincesLogistics.setProvince(provincesStr);
  730. List<ProvincesLogistics> provincesLogisticsList = provincesLogisticsMapper.getProvincesLogisticsList(provincesLogistics);
  731. if(provincesLogisticsList == null || provincesLogisticsList.size() < 1){
  732. /*未查到地址*/
  733. break;
  734. }
  735. //设置快递公司
  736. provincesLogistics = provincesLogisticsList.get(0);
  737. if(provincesLogistics.getLogisticsRstCode() != null){
  738. salesOrder.setSalesPostFirm(provincesLogistics.getLogisticsRstCode());
  739. }
  740. }
  741. }
  742. }
  743. /**
  744. * 根据快递策略来分配物流公司
  745. * @param listSalesOrder
  746. * @return
  747. */
  748. public void setStrategyLogistics(List<SalesOrder> listSalesOrder){
  749. if(listSalesOrder.size() > 0){
  750. //查询所有快递策略
  751. DeliveryStrategy deliveryStrategy = new DeliveryStrategy();
  752. deliveryStrategy.setStrategyStatus(1);
  753. List<DeliveryStrategy> trategyList = deliveryStrategyMapper.getPriorityList(deliveryStrategy);
  754. for (SalesOrder salesOrder:listSalesOrder) {
  755. for(DeliveryStrategy strategy : trategyList){
  756. if(salesOrder.getSalesCompanyId().equals(strategy.getStrategyCompanyId())){
  757. //判断店铺
  758. boolean isMeet1 = false;
  759. if(strategy.getStrategyStoreId() == 0){
  760. isMeet1 = true;
  761. }else{
  762. for(StrategyStore strategyStore : strategy.getListStrategyStore()){
  763. if (salesOrder.getSalesStoreId() == null) {
  764. LoggerFactory.getLogger(SalesOrderServiceImpl.class).info("订单店铺为空");
  765. }
  766. if (strategyStore.getStoreId() == null) {
  767. LoggerFactory.getLogger(SalesOrderServiceImpl.class).info("策略店铺为空");
  768. }
  769. if(salesOrder.getSalesStoreId().equals(strategyStore.getStoreId())){
  770. isMeet1 = true;
  771. }
  772. }
  773. }
  774. //判断产品、颜色
  775. boolean isMeet3 = false;
  776. for(SalesOrderItem salesOrderItem : salesOrder.getSalesOrderItemList()){
  777. boolean isProduct = false;
  778. for(StrategyColor strategyColor : strategy.getListStrategyColor()){
  779. if(strategyColor.getProductId() == 0 || strategyColor.getProductId().equals(salesOrderItem.getItemProductId())){
  780. if(strategyColor.getColorId() == 0 ||salesOrderItem.getItemColorId().equals(strategyColor.getColorId())){
  781. isProduct = true;
  782. break;
  783. }
  784. }
  785. }
  786. if(!isProduct){
  787. isMeet3 = false;
  788. break;
  789. }else{
  790. isMeet3 = true;
  791. }
  792. }
  793. if(isMeet1 && isMeet3){
  794. salesOrder.setSalesPostFirm(strategy.getStrategyPostFirm());
  795. return;
  796. }
  797. }
  798. }
  799. }
  800. }
  801. }
  802. @Override
  803. public List<SalesOrderItem> listSalesOrderItem(SalesOrderItem salesOrderItem) {
  804. return salesOrderMapper.listSalesOrderItem(salesOrderItem);
  805. }
  806. @Override
  807. public Integer updateOrderList(JSONArray orderList, List<SalesOrder> list) {
  808. List<SalesOrder> salesOrders = new ArrayList<SalesOrder>();
  809. //订单号相同时,判断状态,发货状态,物流公司,物流单号等是否相同,如果有一个不同,则需添加到salesOrders中进行同步
  810. for (int i = 0;i < orderList.size();i++) {
  811. JSONObject orderInfo = orderList.getJSONObject(i);
  812. for (SalesOrder salesOrder : list) {
  813. if (orderInfo.get("order_sn").equals(salesOrder.getSalesOrderId())
  814. && !(orderInfo.getInt("order_status") == salesOrder.getSalesStatus()
  815. && orderInfo.getInt("shipping_status") == salesOrder.getSalesShippingStatus()
  816. && orderInfo.getInt("pay_status") == salesOrder.getSalesPayStatus()
  817. && orderInfo.getInt("process_status") == salesOrder.getSalesProcessStatus()
  818. && orderInfo.getInt("is_send") == salesOrder.getSalesIsSend()
  819. && orderInfo.getInt("is_locked") == salesOrder.getSalesIsLocked()
  820. && orderInfo.getInt("is_separate") == salesOrder.getSalesIsSeparate()
  821. && orderInfo.getString("shipping_name").equals(salesOrder.getSalesPostFirm())
  822. && orderInfo.getString("invoice_no").equals(salesOrder.getSalesPostNum())
  823. )) {
  824. SalesOrder order = new SalesOrder();
  825. order.setSalesId(salesOrder.getSalesId());
  826. order.setSalesStatus(orderInfo.getInt("order_status"));
  827. order.setSalesShippingStatus(orderInfo.getInt("shipping_status"));
  828. order.setSalesPayStatus(orderInfo.getInt("pay_status"));
  829. order.setSalesProcessStatus(orderInfo.getInt("process_status"));
  830. order.setSalesIsSend(orderInfo.getInt("is_send"));
  831. order.setSalesIsLocked(orderInfo.getInt("is_locked"));
  832. order.setSalesIsSeparate(orderInfo.getInt("is_separate"));
  833. order.setSalesPostFirm(orderInfo.getString("shipping_name"));
  834. order.setSalesPostNum(orderInfo.getString("invoice_no"));
  835. salesOrders.add(order);
  836. }
  837. }
  838. }
  839. if (salesOrders != null && salesOrders.size() > 0) {
  840. //批量修改订单状态等信息
  841. return salesOrderMapper.updateOrderList(salesOrders);
  842. } else {
  843. return 1;
  844. }
  845. }
  846. @Override
  847. public Integer updateReturnOrderList(JSONArray orderList, List<SalesOrder> list) {
  848. List<SalesOrder> salesOrders = new ArrayList<SalesOrder>();
  849. //订单号相同时,判断状态,发货状态,物流公司,物流单号等是否相同,如果有一个不同,则需添加到salesOrders中进行同步
  850. for (int i = 0;i < orderList.size();i++) {
  851. JSONObject orderInfo = orderList.getJSONObject(i);
  852. for (SalesOrder salesOrder : list) {
  853. if (orderInfo.get("relating_order_sn").equals(salesOrder.getSalesOrderId())) {
  854. SalesOrder order = new SalesOrder();
  855. switch (orderInfo.getInt("process_type")) {
  856. case 1://退货
  857. order.setSalesOrderStatus(3);
  858. break;
  859. case 4://换货
  860. order.setSalesOrderStatus(2);
  861. break;
  862. default:
  863. order.setSalesOrderStatus(3);
  864. break;
  865. }
  866. order.setSalesId(salesOrder.getSalesId());
  867. salesOrders.add(order);
  868. }
  869. }
  870. }
  871. //批量修改订单状态等信息
  872. return salesOrderMapper.updateOrderList(list);
  873. }
  874. @Override
  875. public void addSalesOrderList(JSONObject obj) throws Exception{
  876. if (obj == null) {
  877. return;
  878. }
  879. JSONArray orderList = obj.getJSONArray("list");
  880. if (orderList == null || orderList.size() == 0) {
  881. return;
  882. }
  883. String endTime = sysConfigMapper.getSysConfig(1);
  884. for (int i = 0;i < orderList.size();i++) {
  885. JSONObject order = orderList.getJSONObject(i);
  886. //获取订单详情
  887. JSONObject orderInfo = null;
  888. try{
  889. orderInfo = efastOrderService.getOrderFormEfast(order.getString("deal_code"));
  890. }catch (Exception e){
  891. logger.info("获取订单失败;异常编号:505;失败原因:"+ e.getMessage() +"--获取失败订单号:" + orderList.getJSONObject(i).getString("deal_code"));
  892. }
  893. if (orderInfo == null) {
  894. continue;
  895. }
  896. if (!orderInfo.has("orders")) {
  897. continue;
  898. }
  899. //获取订单项集合
  900. JSONArray itemArray = orderInfo.getJSONArray("orders");
  901. if (itemArray == null || itemArray.size() == 0) {
  902. continue;
  903. }
  904. SalesOrder salesOrder = new SalesOrder();
  905. salesOrder.setSalesOrderId(order.getString("order_sn"));//订单编号
  906. salesOrder.setSalesDealCode(order.getString("deal_code"));//交易号
  907. salesOrder.setSalesOrderStatus(1);//订单状态
  908. salesOrder.setSalesShippingStatus(order.getInt("shipping_status"));//发货状态 0:未发货,1:已发货,3:备货中
  909. salesOrder.setSalesPayStatus(order.getInt("pay_status"));//是否付款 0:未付款,2:已付款
  910. salesOrder.setSalesProcessStatus(order.getInt("process_status"));//单据状态
  911. salesOrder.setSalesIsSend(order.getInt("is_send"));//是否通知配货
  912. salesOrder.setSalesIsLocked(order.getInt("is_locked"));//是否锁定
  913. salesOrder.setSalesIsSeparate(order.getInt("is_separate"));//是否缺货
  914. salesOrder.setSalesStatus(order.getInt("order_status"));//订单状态 0:未确认,1:已确认,2:挂起,3:作废
  915. salesOrder.setSalesPostFirm(order.getString("shipping_name").trim());//快递方式代码
  916. salesOrder.setSalesPostNum(order.getString("invoice_no").trim());//快递单号
  917. salesOrder.setSalesOpenId(order.getString("mobile").trim());//唯一标识
  918. salesOrder.setSalesPayType(efastOrderService.getPayType(order.getString("pay_name").trim()));//支付方式
  919. salesOrder.setSalesPayTime(new Date(order.getLong("pay_time")*1000));//支付时间
  920. salesOrder.setSalesUserRemark(order.getString("postscript"));//买家留言
  921. salesOrder.setSalesAdminRemark(order.getString("to_buyer"));//商家留言
  922. salesOrder.setSalesAmount((int)(order.getDouble("order_amount")*100));//应付款
  923. salesOrder.setSalesPayMoney((int)(order.getDouble("money_paid")*100));//已付款
  924. salesOrder.setSalesAddressName(order.getString("consignee").trim());//收货人
  925. String mobile = order.getString("mobile").replaceAll("[\\u00A0]+", "").trim();
  926. salesOrder.setSalesAddressTel(mobile);//收货人电话
  927. salesOrder.setSalesAddressInfo(order.getString("address").replaceAll(" ","-"));//收货地址
  928. salesOrder.setSalesShippingFee((int)(order.getDouble("shipping_fee")*100));//邮费
  929. salesOrder.setSalesCreateTime(DateTimeUtil.parse(order.getString("create_time"),"yyyy-MM-dd HH:mm:ss"));//创建时间
  930. if (order.getInt("shipping_status") == 1) {
  931. if(order.has("delivery_time")){
  932. salesOrder.setSalesSendTime(DateTimeUtil.parse(order.getString("delivery_time"),"yyyy-MM-dd HH:mm:ss"));//发货时间
  933. }else{
  934. salesOrder.setSalesSendTime(new Date());//发货时间
  935. }
  936. }
  937. salesOrder.setSalesDiscountMoney(salesOrder.getSalesAmount() - salesOrder.getSalesPayMoney());//优惠金额
  938. salesOrder.setSalesPledgeMoney(0);//押金金额
  939. salesOrder.setSalesRemainDeposit(0);//待提取金额
  940. salesOrder.setSalesSendType(2);//发货方式,默认为物流发货
  941. salesOrder.setSalesSalesTime(salesOrder.getSalesCreateTime());//订购时间
  942. salesOrder.setSalesWaitMoney(0);//待付金额
  943. salesOrder.setSalesLastMoney(salesOrder.getSalesPayMoney());//本次支付金额
  944. salesOrder.setSalesPayNumber("0000");//支付尾号
  945. salesOrder.setSalesType(1);//订单类型
  946. endTime = order.getString("create_time"); //获取
  947. //查询店铺信息
  948. StoreInfo storeInfo = new StoreInfo();
  949. storeInfo.setStoreEfast(order.getString("sd_id"));
  950. List<StoreInfo> storeList = storeInfoService.listStore(storeInfo);
  951. int storeId = 0;
  952. int companyId = 0;
  953. if (storeList != null && storeList.size() > 0) {
  954. storeInfo = storeList.get(0);
  955. storeId = storeInfo.getStoreId();
  956. companyId = storeInfo.getCompanyId();
  957. }
  958. salesOrder.setSalesStoreId(storeId);//店铺id
  959. salesOrder.setSalesCompanyId(companyId);//销售公司id
  960. List<SalesOrderItem> itemList = new ArrayList<SalesOrderItem>();
  961. for (int j = 0;j < itemArray.size();j++) {
  962. ProductColor color = new ProductColor();
  963. JSONObject itemJson = itemArray.getJSONObject(j);
  964. SalesOrderItem item = new SalesOrderItem();
  965. color.setColorBar(itemJson.getString("goods_sn"));
  966. List<ProductColor> colorList = productService.listproductAndColor(color);
  967. if (colorList != null && colorList.size() > 0) {
  968. color = colorList.get(0);
  969. item.setItemColorBar(itemJson.getString("goods_sn"));//商品69码
  970. item.setItemNum(itemJson.getInt("goods_number"));//商品数量
  971. item.setItemCreateTime(salesOrder.getSalesCreateTime());
  972. item.setItemColorId(color.getColorId());
  973. item.setItemProductColor(color.getColorName());
  974. item.setItemProductDiscount(color.getColorDiscount());
  975. item.setItemProductId(color.getColorProductId());
  976. item.setItemProductName(color.getProductName());
  977. item.setItemProductPic(color.getColorPicture());
  978. item.setItemProductType(color.getProductType());
  979. item.setItemProductPrice(color.getColorPrice());
  980. item.setItemIsSource(1);
  981. itemList.add(item);
  982. }
  983. // else {
  984. // //获取配件信息
  985. // FittingsInfo fittingsInfo = new FittingsInfo();
  986. // fittingsInfo.setFittingsBar(itemJson.getString("goods_sn"));
  987. // List<FittingsInfo> Fittings = fittingsInfoMapper.listFittings(fittingsInfo);
  988. // if (Fittings == null || Fittings.size() == 0) {
  989. // continue;
  990. // }
  991. // fittingsInfo = Fittings.get(0);
  992. // item.setItemColorBar(itemJson.getString("goods_sn"));//商品69码
  993. // item.setItemNum(itemJson.getInt("goods_number"));//商品数量
  994. // item.setItemCreateTime(salesOrder.getSalesCreateTime());
  995. // item.setItemColorId(fittingsInfo.getFittingsId());
  996. // item.setItemProductColor(fittingsInfo.getFittingsName());
  997. // item.setItemProductDiscount(fittingsInfo.getFittingsDiscount());
  998. // item.setItemProductId(fittingsInfo.getProductId());
  999. // item.setItemProductName(fittingsInfo.getFittingsName());
  1000. // item.setItemProductPic("");
  1001. // item.setItemProductType(0);
  1002. // item.setItemProductPrice(fittingsInfo.getFittingsPrice());
  1003. // item.setItemIsSource(2);
  1004. // itemList.add(item);
  1005. // }
  1006. }
  1007. //添加订单和订单项
  1008. try{
  1009. salesOrderService.addOrderAndItem(salesOrder,itemList);
  1010. }catch (Exception e){
  1011. logger.info("添加订单失败,异常编号:505;失败原因:+"+ e.getMessage() +"Efast编号:"+ salesOrder.getSalesOrderId());
  1012. }
  1013. }
  1014. SysConfig sysConfig = new SysConfig(1,endTime);
  1015. sysConfigMapper.updateSysConfig(sysConfig);
  1016. }
  1017. @Override
  1018. @Transactional
  1019. public boolean syncEfastOrder(JSONObject orderInfo) throws Exception {
  1020. if (orderInfo == null) {
  1021. throw new RuntimeException("获取Efast订单信息出错!");
  1022. }
  1023. if (!orderInfo.has("orders")) {
  1024. throw new RuntimeException("获取Efast订单信息出错!");
  1025. }
  1026. //获取订单项集合
  1027. JSONArray itemArray = orderInfo.getJSONArray("orders");
  1028. if (itemArray == null || itemArray.size() == 0) {
  1029. throw new RuntimeException("获取Efast订单信息出错!");
  1030. }
  1031. SalesOrder salesOrder = new SalesOrder();
  1032. salesOrder.setSalesOrderId(orderInfo.getString("order_sn"));//订单编号
  1033. salesOrder.setSalesDealCode(orderInfo.getString("deal_code"));//交易号
  1034. salesOrder.setSalesOrderStatus(1);//订单状态
  1035. salesOrder.setSalesShippingStatus(orderInfo.getInt("shipping_status"));//发货状态 0:未发货,1:已发货,3:备货中
  1036. salesOrder.setSalesPayStatus(orderInfo.getInt("pay_status"));//是否付款 0:未付款,2:已付款
  1037. salesOrder.setSalesProcessStatus(orderInfo.getInt("process_status"));//单据状态
  1038. salesOrder.setSalesIsSend(orderInfo.getInt("is_send"));//是否通知配货
  1039. salesOrder.setSalesIsLocked(orderInfo.getInt("is_locked"));//是否锁定
  1040. salesOrder.setSalesIsSeparate(orderInfo.getInt("is_separate"));//是否缺货
  1041. salesOrder.setSalesStatus(orderInfo.getInt("order_status"));//订单状态 0:未确认,1:已确认,2:挂起,3:作废
  1042. salesOrder.setSalesPostFirm(new String(orderInfo.getString("shipping_name")).trim());//快递方式代码
  1043. salesOrder.setSalesPostNum(new String(orderInfo.getString("invoice_no")).trim());//快递单号
  1044. salesOrder.setSalesOpenId(orderInfo.getString("mobile").trim());//唯一标识
  1045. salesOrder.setSalesPayType(efastOrderService.getPayType(orderInfo.getString("pay_name").trim()));//支付方式
  1046. salesOrder.setSalesPayTime(new Date(orderInfo.getLong("pay_time")*1000));//支付时间
  1047. salesOrder.setSalesUserRemark(orderInfo.getString("postscript"));//买家留言
  1048. salesOrder.setSalesAdminRemark(orderInfo.getString("to_buyer"));//商家留言
  1049. salesOrder.setSalesAmount((int)(orderInfo.getDouble("order_amount")*100));//应付款
  1050. salesOrder.setSalesPayMoney((int)(orderInfo.getDouble("money_paid")*100));//已付款
  1051. salesOrder.setSalesAddressName(orderInfo.getString("consignee"));//收货人
  1052. String mobile = orderInfo.getString("mobile").replaceAll("[\\u00A0]+", "");
  1053. salesOrder.setSalesAddressTel(mobile.trim());//收货人电话
  1054. salesOrder.setSalesAddressInfo(orderInfo.getString("address").replaceAll(" ","-"));//收货地址
  1055. salesOrder.setSalesShippingFee((int)(orderInfo.getDouble("shipping_fee")*100));//邮费
  1056. salesOrder.setSalesCreateTime(new Date(orderInfo.getLong("pay_time")*1000));//创建时间
  1057. if (orderInfo.getInt("shipping_status") == 1) {
  1058. if(orderInfo.has("delivery_time")){
  1059. salesOrder.setSalesSendTime(DateTimeUtil.parse(orderInfo.getString("delivery_time"),"yyyy-MM-dd HH:mm:ss"));//发货时间
  1060. }else{
  1061. salesOrder.setSalesSendTime(new Date());//发货时间
  1062. }
  1063. }
  1064. salesOrder.setSalesDiscountMoney(salesOrder.getSalesAmount() - salesOrder.getSalesPayMoney());//优惠金额
  1065. salesOrder.setSalesPledgeMoney(0);//押金金额
  1066. salesOrder.setSalesRemainDeposit(0);//待提取金额
  1067. salesOrder.setSalesSendType(2);//发货方式,默认为物流发货
  1068. salesOrder.setSalesSalesTime(salesOrder.getSalesCreateTime());//订购时间
  1069. salesOrder.setSalesWaitMoney(0);//待付金额
  1070. salesOrder.setSalesLastMoney(salesOrder.getSalesPayMoney());//本次支付金额
  1071. salesOrder.setSalesPayNumber("0000");//支付尾号
  1072. salesOrder.setSalesType(1);//订单类型
  1073. //查询店铺信息
  1074. StoreInfo storeInfo = new StoreInfo();
  1075. if (orderInfo.has("sd_id")) {
  1076. storeInfo.setStoreEfast(orderInfo.getString("sd_id"));
  1077. } else {
  1078. storeInfo.setStoreEfast("1");
  1079. }
  1080. List<StoreInfo> storeList = storeInfoService.listStore(storeInfo);
  1081. int storeId = 0;
  1082. int companyId = 0;
  1083. if (storeList != null && storeList.size() > 0) {
  1084. storeInfo = storeList.get(0);
  1085. storeId = storeInfo.getStoreId();
  1086. companyId = storeInfo.getCompanyId();
  1087. }
  1088. salesOrder.setSalesStoreId(storeId);//店铺id
  1089. salesOrder.setSalesCompanyId(companyId);//销售公司id
  1090. List<SalesOrderItem> itemList = new ArrayList<SalesOrderItem>();
  1091. for (int j = 0;j < itemArray.size();j++) {
  1092. ProductColor color = new ProductColor();
  1093. JSONObject itemJson = itemArray.getJSONObject(j);
  1094. SalesOrderItem item = new SalesOrderItem();
  1095. color.setColorBar(itemJson.getString("goods_barcode"));
  1096. List<ProductColor> colorList = productService.listproductAndColor(color);
  1097. if (colorList != null && colorList.size() > 0) {
  1098. color = colorList.get(0);
  1099. item.setItemColorBar(itemJson.getString("goods_barcode"));//商品69码
  1100. item.setItemNum(itemJson.getInt("goods_number"));//商品数量
  1101. item.setItemCreateTime(salesOrder.getSalesCreateTime());
  1102. item.setItemColorId(color.getColorId());
  1103. item.setItemProductColor(color.getColorName());
  1104. item.setItemProductDiscount(color.getColorDiscount());
  1105. item.setItemProductId(color.getColorProductId());
  1106. item.setItemProductName(color.getProductName());
  1107. item.setItemProductPic(color.getColorPicture());
  1108. item.setItemProductType(color.getProductType());
  1109. item.setItemProductPrice(color.getColorPrice());
  1110. item.setItemIsSource(1);
  1111. itemList.add(item);
  1112. }
  1113. // else {
  1114. // //获取配件信息
  1115. // FittingsInfo fittingsInfo = new FittingsInfo();
  1116. // fittingsInfo.setFittingsBar(itemJson.getString("goods_barcode"));
  1117. // List<FittingsInfo> Fittings = fittingsInfoMapper.listFittings(fittingsInfo);
  1118. // if (Fittings == null || Fittings.size() == 0) {
  1119. // continue;
  1120. // }
  1121. // fittingsInfo = Fittings.get(0);
  1122. // item.setItemColorBar(itemJson.getString("goods_barcode"));//商品69码
  1123. // item.setItemNum(itemJson.getInt("goods_number"));//商品数量
  1124. // item.setItemCreateTime(salesOrder.getSalesCreateTime());
  1125. // item.setItemColorId(fittingsInfo.getFittingsId());
  1126. // item.setItemProductColor(fittingsInfo.getFittingsName());
  1127. // item.setItemProductDiscount(fittingsInfo.getFittingsDiscount());
  1128. // item.setItemProductId(fittingsInfo.getProductId());
  1129. // item.setItemProductName(fittingsInfo.getFittingsName());
  1130. // item.setItemProductPic("");
  1131. // item.setItemProductType(0);
  1132. // item.setItemProductPrice(fittingsInfo.getFittingsPrice());
  1133. // item.setItemIsSource(2);
  1134. // itemList.add(item);
  1135. // }
  1136. }
  1137. boolean flag = salesOrderService.addOrderAndItem(salesOrder,itemList);
  1138. if (flag) {
  1139. return true;
  1140. } else {
  1141. throw new RuntimeException("添加订单项出错!");
  1142. }
  1143. }
  1144. @Override
  1145. public Integer getOrderInfoCount(SalesOrder salesOrder) {
  1146. return salesOrderMapper.getOrderInfoCount(salesOrder);
  1147. }
  1148. @Override
  1149. public List<SalesOrder> listOrderExcel(SalesOrder salesOrder) {
  1150. return salesOrderMapper.listOrderExcel(salesOrder);
  1151. }
  1152. @Override
  1153. public Integer listOrderExcelNum(SalesOrder salesOrder) {
  1154. return salesOrderMapper.listOrderExcelNum(salesOrder);
  1155. }
  1156. @Override
  1157. public Integer delOrder(String orderId) {
  1158. return salesOrderMapper.delOrder(orderId);
  1159. }
  1160. @Override
  1161. @Transactional
  1162. public Integer delSalesOrder(Integer id) {
  1163. //查询出库状态判断是否需要返还库存
  1164. SalesOrder so = salesOrderMapper.getSalesOrderById(id);
  1165. if(so.getSalesDeliver() == 2){
  1166. SalesOrderItem salesOrderItem = new SalesOrderItem();
  1167. salesOrderItem.setItemOrderId(so.getSalesId());
  1168. List<SalesOrderItem> listOrderitem = salesOrderService.listSalesOrderItem(salesOrderItem);
  1169. for (SalesOrderItem soi:listOrderitem) {
  1170. InventoryInfo inventoryInfo2 = new InventoryInfo();
  1171. inventoryInfo2.setInventoryGoodProductNum(soi.getItemNum()); //良品数量
  1172. inventoryInfo2.setInventoryProductBar(soi.getItemColorBar());
  1173. inventoryInfo2.setWarehouseId(so.getSalesWarehouseId());
  1174. inventoryInfo2.setLogType(1); //类型1.采购 2.发货 3.次品
  1175. inventoryInfo2.setQualityType(1); //产品质量类型 1良品 2 不良品
  1176. inventoryInfo2.setInventoryRecentRecord("删除订单返还库存-删除订单号:"+ so.getSalesDealCode());
  1177. inventoryService.addInventory(inventoryInfo2);
  1178. }
  1179. }
  1180. //判断是否绑定维修信息,并解除绑定
  1181. if(so != null){
  1182. //查询封装售后维修编号
  1183. List<ComplaintDetectInfo> listDetect = complaintDetectInfoMapper.listComplaintDetectBySalesId(so.getSalesOrderId());
  1184. if(listDetect != null && listDetect.size() > 0){
  1185. for (ComplaintDetectInfo info: listDetect){
  1186. ComplaintDetectInfo detectInfo = new ComplaintDetectInfo();
  1187. detectInfo.setDetectId(info.getDetectId());
  1188. detectInfo.setDetectPlaceorder(1);
  1189. detectInfo.setSalesOrderId("");
  1190. complaintDetectInfoMapper.updateDetectById(detectInfo);
  1191. }
  1192. }
  1193. }
  1194. // 检查客诉是否使用订单,如果有使用订单,无法删除
  1195. salesOrderMapper.delOrderItem(id);
  1196. salesOrderMapper.delSalesOrder(id);
  1197. return 1;
  1198. }
  1199. @Override
  1200. public Integer updateOrderItem(SalesOrderItem salesOrderItem) {
  1201. return salesOrderMapper.updateOrderItem(salesOrderItem);
  1202. }
  1203. @Override
  1204. public SalesOrder getSalesOrderByLogistics(SalesOrder salesOrder) {
  1205. return salesOrderMapper.getSalesOrderByLogistics(salesOrder);
  1206. }
  1207. @Override
  1208. public Integer updateOrderListIsDownload(List<SalesOrder> list) {
  1209. return salesOrderMapper.updateOrderListIsDownload(list);
  1210. }
  1211. @Override
  1212. public Integer updateSalesOrderByDealCode(SalesOrder salesOrder) {
  1213. return salesOrderMapper.updateSalesOrderByDealCode(salesOrder);
  1214. }
  1215. @Override
  1216. public List<LogisticsInfo> getLogisticsInfo(LogisticsInfo logisticsInfo) {
  1217. return salesOrderMapper.getLogisticsInfo(logisticsInfo);
  1218. }
  1219. @Override
  1220. public List<DownsingleRuleInfo> listDownsingleRule() {
  1221. return salesOrderMapper.listDownsingleRule();
  1222. }
  1223. @Override
  1224. public Integer getIsMachine(String colorBar) {
  1225. return salesOrderMapper.getIsMachine(colorBar);
  1226. }
  1227. @Override
  1228. public Integer getOrderBySalesDealCodeNum(String code) {
  1229. return salesOrderMapper.getOrderBySalesDealCodeNum(code);
  1230. }
  1231. @Override
  1232. public Integer listSalesOrderAndItemNum(SalesOrder salesOrder) {
  1233. return salesOrderMapper.listSalesOrderAndItemNum(salesOrder);
  1234. }
  1235. @Override
  1236. public List<SalesOrder> listSalesOrderAndItem(SalesOrder salesOrder) {
  1237. return salesOrderMapper.listSalesOrderAndItem(salesOrder);
  1238. }
  1239. @Override
  1240. public Integer getSalesOrderNum(SalesOrder salesOrder) {
  1241. return salesOrderMapper.getSalesOrderNum(salesOrder);
  1242. }
  1243. @Transactional
  1244. @Override
  1245. public Integer listConfirmSalesOrderByBatch(String salesBatchId) {
  1246. Integer flag = 0;
  1247. SalesOrder salesOrder = new SalesOrder();
  1248. salesOrder.setSalesBatchId(salesBatchId);
  1249. List<SalesOrder> salesOrderList = salesOrderMapper.listSalesOrder(salesOrder);
  1250. if(salesOrderList == null || salesOrderList.size() < 1){
  1251. throw new RuntimeException("查询订单失败!");
  1252. }
  1253. for (SalesOrder so:salesOrderList){
  1254. flag = salesOrderService.confirmSalesOrder(so.getSalesId());
  1255. }
  1256. return flag;
  1257. }
  1258. @Override
  1259. public Integer noticeDistribution(SalesOrder salesOrder,Integer adminId) {
  1260. // 检查订单是否已经有了配送方式,如果没有不允许通知配货 -- 移到controller中自己添加
  1261. // SalesOrder temp = salesOrderMapper.getSalesOrderById(salesOrder.getSalesId());
  1262. // if (temp == null || temp.getSalesPostFirm() == null || temp.getSalesPostFirm().isEmpty()) {
  1263. // return 0;
  1264. // }
  1265. int msg = salesOrderMapper.noticeDistribution(salesOrder);
  1266. if(msg > 0){
  1267. //添加操作跟踪信息
  1268. OrderTracking orderTracking = new OrderTracking();
  1269. orderTracking.setAdminId(adminId);
  1270. orderTracking.setSalesDealCode(salesOrder.getSalesDealCode());
  1271. orderTracking.setTrackingDesc("通知配货");
  1272. salesOrderService.addTracking(orderTracking);
  1273. }
  1274. return msg;
  1275. }
  1276. @Transactional
  1277. @Override
  1278. public Integer confirmSalesOrder(Integer saleId) {
  1279. /*
  1280. * 查询订单
  1281. * 查询订单项
  1282. * 删除订单
  1283. * 修改查询的订单状态
  1284. * 添加订单
  1285. */
  1286. if(saleId == null ){
  1287. throw new RuntimeException("确认订单失败-订单id异常!");
  1288. }
  1289. SalesOrder salesOrder = salesOrderMapper.getSalesOrderById(saleId);
  1290. if(salesOrder == null){
  1291. throw new RuntimeException("确认订单失败-订单异常!");
  1292. }
  1293. Integer flag = 0;
  1294. SalesOrderItem salesOrderItem = new SalesOrderItem();
  1295. salesOrderItem.setItemOrderId(salesOrder.getSalesId());
  1296. List<SalesOrderItem> salesOrderItemList = salesOrderMapper.listSalesOrderItem(salesOrderItem);
  1297. if(salesOrderItemList == null || salesOrderItemList.size()<1){
  1298. throw new RuntimeException("确认订单失败-查询订单项失败!");
  1299. }
  1300. salesOrder.setSalesOrderItemList(salesOrderItemList);
  1301. flag = salesOrderMapper.delOrderById(salesOrder.getSalesId());
  1302. if(flag < 1){
  1303. throw new RuntimeException("确认订单失败-删除订单失败!");
  1304. }
  1305. flag = salesOrderMapper.delOrderItem(salesOrder.getSalesId());
  1306. if(flag < 1){
  1307. throw new RuntimeException("确认订单失败-删除订单项失败!");
  1308. }
  1309. //1:确认 状态
  1310. salesOrder.setSalesStatus(1);
  1311. boolean fl = salesOrderService.addRstOrderAndIteminfo(salesOrder);
  1312. if(!fl){
  1313. throw new RuntimeException("确认订单失败-添加订单失败!");
  1314. }
  1315. return flag;
  1316. }
  1317. @Override
  1318. public Integer distributionExpress(SalesOrder salesOrder) {
  1319. return salesOrderMapper.distributionExpress(salesOrder);
  1320. }
  1321. @Override
  1322. public Integer listSalesPostFirm(SalesOrder salesOrder,Integer adminId) {
  1323. int msg = salesOrderMapper.listSalesPostFirm(salesOrder);
  1324. if(msg > 0){
  1325. List<SalesOrder> listOrder = salesOrderMapper.listSalesOrderByBatchId(salesOrder.getSalesBatchId());
  1326. for(SalesOrder prder : listOrder){
  1327. //添加操作跟踪信息
  1328. OrderTracking orderTracking = new OrderTracking();
  1329. orderTracking.setAdminId(adminId);
  1330. orderTracking.setSalesDealCode(prder.getSalesDealCode());
  1331. orderTracking.setTrackingDesc("分配快递方式(批次-"+ salesOrder.getSalesPostFirm() +")");
  1332. salesOrderService.addTracking(orderTracking);
  1333. }
  1334. }
  1335. return msg;
  1336. }
  1337. @Override
  1338. public Integer listSalesPostFirmByIds(SalesOrder salesOrder,Integer adminId) {
  1339. int msg = salesOrderMapper.listSalesPostFirmByIds(salesOrder);
  1340. if(msg > 0){
  1341. List<SalesOrder> listOrder = salesOrderMapper.listSalesOrderBySalesIds(salesOrder);
  1342. for(SalesOrder prder : listOrder) {
  1343. //添加操作跟踪信息
  1344. OrderTracking orderTracking = new OrderTracking();
  1345. orderTracking.setAdminId(adminId);
  1346. orderTracking.setSalesDealCode(prder.getSalesDealCode());
  1347. orderTracking.setTrackingDesc("分配物流方式(单个-"+prder.getSalesPostFirm()+")");
  1348. salesOrderService.addTracking(orderTracking);
  1349. }
  1350. }
  1351. return msg;
  1352. }
  1353. @Override
  1354. @Transactional
  1355. public SalesOrder getSalesOrderByPostNum(String postNum) {
  1356. return salesOrderMapper.getSalesOrderByPostNum(postNum);
  1357. }
  1358. @Override
  1359. @Transactional(rollbackFor = {Exception.class}, isolation = Isolation.REPEATABLE_READ)
  1360. public synchronized Integer updateDeliver(SalesOrder salesOrder) {
  1361. //修改出库状态
  1362. int flag = salesOrderMapper.updateDeliver(salesOrder);
  1363. if(flag < 1){
  1364. throw new RuntimeException("操作失败,订单出/入库失败,请联系技术人员核查。");
  1365. }
  1366. SalesOrder temp = salesOrderMapper.getSalesOrderById(salesOrder.getSalesId());
  1367. if (temp.getSalesQuality() == 2) {
  1368. // 指定发良品
  1369. } else if (temp.getSalesQuality() == 3) {
  1370. // 指定发不良品
  1371. } else {
  1372. // 系统自动判断
  1373. }
  1374. // 是否原机退回
  1375. boolean isMachineRetuen = false;
  1376. if (temp.getSalesQuality() == 1) {
  1377. ComplaintDetectInfo complaintDetectInfo = new ComplaintDetectInfo();
  1378. complaintDetectInfo.setSalesOrderId(salesOrder.getSalesOrderId());
  1379. List<ComplaintDetectInfo> complaintDetectInfoList = complaintDetectInfoMapper.listComplaintDetectByOrderId(complaintDetectInfo);
  1380. if(complaintDetectInfoList != null && complaintDetectInfoList.size() > 0) {
  1381. ComplaintDetectInfo cdinfo = complaintDetectInfoList.get(0);
  1382. int state = cdinfo.getDetectState();
  1383. if (state == 33 || state == 39) {
  1384. isMachineRetuen = true;
  1385. }
  1386. }
  1387. if (isMachineRetuen) {
  1388. // 减去售后仓库不良品
  1389. ComplaintDetectInfo cdinfo = complaintDetectInfoList.get(0);
  1390. InventoryInfo inventoryInfo1 = new InventoryInfo();
  1391. inventoryInfo1.setInventoryDefectiveProductNum(1);
  1392. inventoryInfo1.setInventoryProductColorId(cdinfo.getProductColorId());
  1393. inventoryInfo1.setWarehouseId(salesOrder.getSalesWarehouseId());
  1394. // 产品质量类型 1良品 2 不良品
  1395. inventoryInfo1.setQualityType(2);
  1396. inventoryInfo1.setInventoryRecentRecord("维修机器-原机返回(维修ID:" + cdinfo.getDetectNumber() + ")");
  1397. flag = inventoryService.minusInventory(inventoryInfo1);
  1398. if (flag < 1) {
  1399. throw new RuntimeException("出库失败。维修库存调整失败");
  1400. }
  1401. return flag;
  1402. }
  1403. }
  1404. // 正常库存出库(包含正常销售与售后)
  1405. SalesOrder so = salesOrderMapper.getSalesOrderById(salesOrder.getSalesId());
  1406. SalesOrderItem salesOrderItem = new SalesOrderItem();
  1407. salesOrderItem.setItemOrderId(so.getSalesId());
  1408. List<SalesOrderItem> listOrderitem = salesOrderService.listSalesOrderItem(salesOrderItem);
  1409. // 查询维修编号,并根据维修编号对应的处理结果判断是否从不良品中出库
  1410. boolean isDefectiveProduct = false;
  1411. if (temp.getSalesQuality() == 1) {
  1412. // 凡是(付费维修-维修完成)、(免费维修-维修完成)、(机器无故障,原机退回)都走不良品
  1413. List<ComplaintDetectInfo> listDetect = complaintDetectInfoMapper.listComplaintDetectBySalesId(so.getSalesOrderId());
  1414. if (listDetect != null && !listDetect.isEmpty()) {
  1415. int result = listDetect.get(0).getDetectState();
  1416. if (result == 32 ||result == 33 || result == 36 || result == 37 || result == 39) {
  1417. isDefectiveProduct = true;
  1418. }
  1419. }
  1420. } else if (temp.getSalesQuality() == 2) {
  1421. // 良品
  1422. isDefectiveProduct = false;
  1423. } else if (temp.getSalesQuality() == 3) {
  1424. // 不良品
  1425. isDefectiveProduct = true;
  1426. }
  1427. if(salesOrder.getSalesDeliver() == 2){
  1428. // 标记出库,修改库存
  1429. // 如果已出库则返还库存
  1430. for (SalesOrderItem soi:listOrderitem) {
  1431. InventoryInfo inventoryInfo2 = new InventoryInfo();
  1432. inventoryInfo2.setInventoryProductBar(soi.getItemColorBar());
  1433. inventoryInfo2.setWarehouseId(so.getSalesWarehouseId());
  1434. //类型1.采购 2.发货 3.次品
  1435. inventoryInfo2.setLogType(2);
  1436. //产品质量类型 1良品 2 不良品
  1437. if (isDefectiveProduct) {
  1438. inventoryInfo2.setInventoryDefectiveProductNum(soi.getItemNum());
  1439. inventoryInfo2.setQualityType(2);
  1440. } else {
  1441. inventoryInfo2.setInventoryGoodProductNum(soi.getItemNum());
  1442. inventoryInfo2.setQualityType(1);
  1443. }
  1444. inventoryInfo2.setInventoryRecentRecord("出库-订单号:"+ so.getSalesDealCode());
  1445. inventoryService.minusInventory(inventoryInfo2);
  1446. }
  1447. }
  1448. return flag;
  1449. }
  1450. //减少库存
  1451. // @Transactional
  1452. // @Override
  1453. // public boolean updateInventory(Integer salesId,Integer salesWarehouseId){
  1454. // OrderWarehouse orderWarehouse = orderWarehouseService.getOrderWarehouseById(salesWarehouseId);
  1455. // if(orderWarehouse == null){
  1456. // throw new RuntimeException("【出库】更新库存失败,查询仓库信息失败。");
  1457. // }
  1458. // String warehouseName = orderWarehouse.getWarehouseName();
  1459. //
  1460. // SalesOrderItem salesOrderItem = new SalesOrderItem();
  1461. // salesOrderItem.setItemOrderId(salesId);
  1462. // List<SalesOrderItem> listOrderitem = salesOrderService.listSalesOrderItem(salesOrderItem);
  1463. //
  1464. // for(SalesOrderItem item : listOrderitem){
  1465. // List<ProductCombinatInfo> listproduct = productMapper.combinatList(item.getItemProductId());
  1466. // if(listproduct.size() > 0){
  1467. // for(ProductCombinatInfo combinatInfo : listproduct){
  1468. // invIne(item,orderWarehouse,combinatInfo);
  1469. // }
  1470. // }else{
  1471. // invIne(item,orderWarehouse,null);
  1472. // }
  1473. //
  1474. // }
  1475. // return true;
  1476. // }
  1477. // public void invIne(SalesOrderItem item,OrderWarehouse orderWarehouse,ProductCombinatInfo combinatInfo){
  1478. // SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1479. // Integer combinatItemNum;
  1480. // if(combinatInfo == null ){
  1481. // combinatItemNum = 1;
  1482. // }else{
  1483. // combinatItemNum = combinatInfo.getCombinatItemNum();
  1484. // item.setItemColorBar(productService.getProduceColor(combinatInfo.getCombinatItemColorId()).getColorBar());
  1485. // }
  1486. // InventoryInfo infos = inventoryMapper.getByInventoryByBar(item.getItemColorBar(),orderWarehouse.getWarehouseId());
  1487. // if(infos != null){
  1488. // if(infos.getInventoryGoodProductNum() >= (item.getItemNum() * combinatItemNum)){
  1489. // infos.setInventoryGoodProductNum(infos.getInventoryGoodProductNum() - (item.getItemNum() * combinatItemNum));
  1490. // infos.setInventoryRecentRecord(sdf.format(new Date())+"出库"+item.getItemNum()+"件,订单号:"+item.getSalesOrderId());
  1491. // Integer flag = inventoryMapper.updateById(infos);
  1492. // if(flag < 1){
  1493. // throw new RuntimeException("【出库】更新库存失败,库存修改失败。");
  1494. // }
  1495. // //添加日志
  1496. // InventoryLog inventoryLog = new InventoryLog();
  1497. // inventoryLog.setLogProductName(infos.getInventoryProductName());
  1498. // inventoryLog.setLogProductBar(infos.getInventoryProductBar());
  1499. // inventoryLog.setLogRemainingNum(item.getItemNum() * combinatItemNum);
  1500. // inventoryLog.setLogType(2);
  1501. // inventoryLog.setLogOperationType(2);
  1502. // inventoryLog.setLogDesc(sdf.format(new Date())+"待发货标记出库"+item.getItemNum()+"件,订单号:"+item.getSalesOrderId());
  1503. // inventoryLog.setLogQualityType(1);
  1504. // inventoryLog.setLogWarehouseId(orderWarehouse.getWarehouseId());
  1505. // flag = inventoryLogMapper.insert(inventoryLog);
  1506. // if(flag < 1){
  1507. // throw new RuntimeException("【出库】更新库存失败,增加库存记录失败。");
  1508. // }
  1509. // }else{
  1510. // throw new RuntimeException("【出库】更新库存失败,"+ orderWarehouse.getWarehouseName() +"["+ item.getItemProductName()+ "("+ item.getItemProductColor() +")" +"]库存不足。");
  1511. // }
  1512. // }else{
  1513. // throw new RuntimeException("【出库】更新库存失败,未查询到库存信息,请确认“"+ orderWarehouse.getWarehouseName() +"”是否有该产品["+ item.getItemProductName()+ "("+ item.getItemProductColor() +")" +"]库存信息。");
  1514. // }
  1515. // }
  1516. //标记未出库时返还库存
  1517. // @Transactional
  1518. // @Override
  1519. // public boolean returnInventory(Integer salesId,Integer salesWarehouseId){
  1520. // OrderWarehouse orderWarehouse = orderWarehouseService.getOrderWarehouseById(salesWarehouseId);
  1521. // if(orderWarehouse == null){
  1522. // throw new RuntimeException("【返还库存】更新库存失败,查询仓库信息失败。");
  1523. // }
  1524. // String warehouseName = orderWarehouse.getWarehouseName();
  1525. //
  1526. // SalesOrderItem salesOrderItem = new SalesOrderItem();
  1527. // salesOrderItem.setItemOrderId(salesId);
  1528. // List<SalesOrderItem> listOrderitem = salesOrderService.listSalesOrderItem(salesOrderItem);
  1529. // for(SalesOrderItem item : listOrderitem){
  1530. // List<ProductCombinatInfo> listproduct = productMapper.combinatList(item.getItemProductId());
  1531. // if(listOrderitem.size() > 0){
  1532. // for(ProductCombinatInfo combinatInfo : listproduct){
  1533. // invTwo(item,orderWarehouse,combinatInfo);
  1534. // }
  1535. // }else{
  1536. // invTwo(item,orderWarehouse,null);
  1537. // }
  1538. // }
  1539. // return true;
  1540. // }
  1541. // private void invTwo(SalesOrderItem item,OrderWarehouse orderWarehouse,ProductCombinatInfo combinatInfo){
  1542. // SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1543. // Integer combinatItemNum;
  1544. // if(combinatInfo == null ){
  1545. // combinatItemNum = 1;
  1546. // }else{
  1547. // combinatItemNum = combinatInfo.getCombinatItemNum();
  1548. // item.setItemColorBar(productService.getProduceColor(combinatInfo.getCombinatItemColorId()).getColorBar());
  1549. // }
  1550. // InventoryInfo info = inventoryMapper.getByInventoryByBar(item.getItemColorBar(),orderWarehouse.getWarehouseId());
  1551. // if(info != null){
  1552. // info.setInventoryGoodProductNum(info.getInventoryGoodProductNum() + (item.getItemNum() * combinatItemNum));
  1553. // info.setInventoryRecentRecord(sdf.format(new Date())+"删除/作废/标记未出库时订单返还库存"+(item.getItemNum() * combinatItemNum)+"件,订单号:"+item.getSalesOrderId());
  1554. // Integer flag = inventoryMapper.updateById(info);
  1555. // if(flag < 1){
  1556. // throw new RuntimeException("【返还库存】更新库存失败,库存修改失败。");
  1557. // }
  1558. // //添加日志
  1559. // InventoryLog inventoryLog = new InventoryLog();
  1560. // inventoryLog.setLogProductName(info.getInventoryProductName());
  1561. // inventoryLog.setLogProductBar(info.getInventoryProductBar());
  1562. // inventoryLog.setLogRemainingNum((item.getItemNum() * combinatItemNum));
  1563. // inventoryLog.setLogType(1);
  1564. // inventoryLog.setLogOperationType(1);
  1565. // inventoryLog.setLogDesc(sdf.format(new Date())+"删除/作废/标记未出库时订单返还库存"+(item.getItemNum() * combinatItemNum)+"件,订单号:"+item.getSalesOrderId());
  1566. // inventoryLog.setLogQualityType(1);
  1567. // inventoryLog.setLogWarehouseId(orderWarehouse.getWarehouseId());
  1568. // flag = inventoryLogMapper.insert(inventoryLog);
  1569. // if(flag < 1){
  1570. // throw new RuntimeException("【返还库存】更新库存失败,增加库存记录失败。");
  1571. // }
  1572. // }else{
  1573. // throw new RuntimeException("【返还库存】更新库存失败,未查询到库存信息,请确认“"+ orderWarehouse.getWarehouseName() +"”是否有该产品["+ item.getItemProductName()+ "("+ item.getItemProductColor() +")" +"]库存信息。");
  1574. // }
  1575. // }
  1576. @Override
  1577. public List<SalesOrderItem> getDeliverNum(SalesOrder salesOrder) {
  1578. return salesOrderMapper.getDeliverNum(salesOrder);
  1579. }
  1580. @Override
  1581. public List<Date> getNotSendDate() {
  1582. return salesOrderMapper.getNotSendDate();
  1583. }
  1584. @Override
  1585. public List<SalesOrder> salesOrderListAndItem(SalesOrder salesOrder) {
  1586. return salesOrderMapper.salesOrderListAndItem(salesOrder);
  1587. }
  1588. @Override
  1589. public PagedResult<SalesOrder> salesOrderListAndItemPage(int pageNO, int pageSize, SalesOrder salesOrder, boolean isTotalNum) {
  1590. PageHelper.startPage(pageNO, pageSize, isTotalNum);
  1591. List<SalesOrder> list = salesOrderMapper.salesOrderListAndItem(salesOrder);
  1592. return PageUtil.getPage(list);
  1593. }
  1594. @Override
  1595. public List<SalesOrderItem> selectSalesOrderItemList(Integer salesId) {
  1596. return salesOrderMapper.selectSalesOrderItemList(salesId);
  1597. }
  1598. @Transactional
  1599. @Override
  1600. public Boolean addCorrectInfo(OrderCorrectInfo orderCorrectInfo, String arrayItem, Admin admin) {
  1601. //添加更新信息
  1602. orderCorrectInfo.setAdminId(admin.getAdminId());
  1603. if(salesOrderMapper.addCorrectInfo(orderCorrectInfo) < 1){
  1604. throw new RuntimeException("更正订单-订单异常!");
  1605. }
  1606. //封装订单项数据
  1607. JSONArray jsonArray = JSONArray.fromObject(arrayItem);
  1608. List salesOrderItemList = ((List)JSONArray.toCollection(jsonArray, SalesOrderItem.class));
  1609. for(Object temp : salesOrderItemList){
  1610. SalesOrderItem salesOrderItem = (SalesOrderItem) temp;
  1611. //查询订单项原数量
  1612. SalesOrderItem orderItem = salesOrderMapper.getSalesOrderItem(salesOrderItem.getItemId());
  1613. OrderCorrectItem orderCorrectItem = new OrderCorrectItem();
  1614. orderCorrectItem.setCorrectId(orderCorrectInfo.getCorrectId());
  1615. orderCorrectItem.setOrderItemId(salesOrderItem.getItemId());
  1616. orderCorrectItem.setItemProductColor(salesOrderItem.getItemProductColor());
  1617. orderCorrectItem.setItemProductName(salesOrderItem.getItemProductName());
  1618. orderCorrectItem.setCorrectNum(salesOrderItem.getItemNum());
  1619. orderCorrectItem.setOldNum(orderItem.getItemNum());
  1620. if(orderItem.getItemNum().intValue() != salesOrderItem.getItemNum().intValue()){
  1621. //查询订单判断是否已出库
  1622. SalesOrder so = salesOrderMapper.getSalesOrderById(orderCorrectInfo.getItemOrderId());
  1623. if(so.getSalesDeliver() == 2){
  1624. //查询是否是组合产品
  1625. List<ProductCombinatInfo> listproduct = productMapper.combinatList(salesOrderItem.getItemProductId());
  1626. if(listproduct.size() > 0){
  1627. for(ProductCombinatInfo combinatInfo : listproduct){
  1628. correctInv(orderItem,salesOrderItem,so.getSalesWarehouseId(),combinatInfo);
  1629. }
  1630. }else{
  1631. correctInv(orderItem,salesOrderItem,so.getSalesWarehouseId(),null);
  1632. }
  1633. }
  1634. //修改订单项数量
  1635. orderItem.setItemNum(salesOrderItem.getItemNum());
  1636. if(salesOrderMapper.updateOrderItemById(orderItem) < 1){
  1637. throw new RuntimeException("更正订单-修改订单项数量失败!");
  1638. }
  1639. if(salesOrderMapper.addCorrectItem(orderCorrectItem) < 1){
  1640. throw new RuntimeException("更正订单-添加记录失败!");
  1641. }
  1642. }
  1643. }
  1644. return true;
  1645. }
  1646. private void correctInv(SalesOrderItem orderItem,SalesOrderItem salesOrderItem,Integer warehouseId,ProductCombinatInfo combinatInfo){
  1647. //返还库存
  1648. SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1649. Integer combinatItemNum;
  1650. if(combinatInfo == null ){
  1651. combinatItemNum = 0;
  1652. }else{
  1653. combinatItemNum = combinatInfo.getCombinatItemNum();
  1654. orderItem.setItemColorBar(productService.getProduceColor(combinatInfo.getCombinatItemColorId()).getColorBar());
  1655. }
  1656. InventoryInfo info = inventoryMapper.getByInventoryByBar(orderItem.getItemColorBar(),warehouseId);
  1657. //添加日志
  1658. InventoryLog inventoryLog = new InventoryLog();
  1659. inventoryLog.setLogProductName(info.getInventoryProductName());
  1660. inventoryLog.setLogProductBar(info.getInventoryProductBar());
  1661. inventoryLog.setLogOperationType(1);
  1662. inventoryLog.setLogQualityType(1);
  1663. inventoryLog.setLogWarehouseId(warehouseId);
  1664. if(orderItem.getItemNum() > salesOrderItem.getItemNum()){//原数量大于更正后数量
  1665. info.setInventoryGoodProductNum(info.getInventoryGoodProductNum() + ((orderItem.getItemNum() * combinatItemNum) - (salesOrderItem.getItemNum() * combinatItemNum)));
  1666. info.setInventoryRecentRecord(sdf.format(new Date())+"更正订单返还库存:"+(orderItem.getItemNum() - salesOrderItem.getItemNum())+"件");
  1667. inventoryLog.setLogRemainingNum((orderItem.getItemNum() * combinatItemNum) - (salesOrderItem.getItemNum() * combinatItemNum));
  1668. inventoryLog.setLogType(2);
  1669. inventoryLog.setLogDesc(sdf.format(new Date())+"更正订单返还库存:"+(orderItem.getItemNum() - salesOrderItem.getItemNum())+"件");
  1670. }else if(orderItem.getItemNum() < salesOrderItem.getItemNum()){
  1671. if(info.getInventoryGoodProductNum() > ((salesOrderItem.getItemNum() * combinatItemNum) - (orderItem.getItemNum() * combinatItemNum))){
  1672. info.setInventoryGoodProductNum(info.getInventoryGoodProductNum() - ((salesOrderItem.getItemNum() * combinatItemNum) - (orderItem.getItemNum() * combinatItemNum)));
  1673. info.setInventoryRecentRecord(sdf.format(new Date())+"更正订单减少库存:"+((salesOrderItem.getItemNum() * combinatItemNum) - (orderItem.getItemNum() * combinatItemNum))+"件");
  1674. inventoryLog.setLogRemainingNum(((salesOrderItem.getItemNum() * combinatItemNum) - (orderItem.getItemNum() * combinatItemNum)));
  1675. inventoryLog.setLogType(1);
  1676. inventoryLog.setLogDesc(sdf.format(new Date())+"更正订单减少库存:"+((salesOrderItem.getItemNum() * combinatItemNum) - (orderItem.getItemNum() * combinatItemNum))+"件");
  1677. }else{
  1678. throw new RuntimeException("更正订单-减少库存修改订单项数量失败!");
  1679. }
  1680. }
  1681. inventoryMapper.updateById(info);
  1682. inventoryLogMapper.insert(inventoryLog);
  1683. }
  1684. //更正订单时返还库存
  1685. public boolean returnInventoryByItemId(Integer itemId){
  1686. SalesOrderItem salesOrderItem = new SalesOrderItem();
  1687. salesOrderItem.setItemId(itemId);
  1688. List<SalesOrderItem> listOrderitem = salesOrderService.listSalesOrderItem(salesOrderItem);
  1689. SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1690. for(SalesOrderItem item : listOrderitem){
  1691. SalesOrder so = salesOrderMapper.getSalesOrderById(item.getItemOrderId());
  1692. InventoryInfo info = inventoryMapper.getByInventoryByBar(item.getItemColorBar(),so.getSalesWarehouseId());
  1693. if(info != null){
  1694. info.setInventoryGoodProductNum(info.getInventoryGoodProductNum() + item.getItemNum());
  1695. info.setInventoryRecentRecord(sdf.format(new Date())+"删除/作废订单返还库存:"+item.getItemNum()+"件");
  1696. inventoryMapper.updateById(info);
  1697. //添加日志
  1698. InventoryLog inventoryLog = new InventoryLog();
  1699. inventoryLog.setLogProductName(info.getInventoryProductName());
  1700. inventoryLog.setLogProductBar(info.getInventoryProductBar());
  1701. inventoryLog.setLogRemainingNum(item.getItemNum());
  1702. inventoryLog.setLogType(1);
  1703. inventoryLog.setLogOperationType(1);
  1704. inventoryLog.setLogDesc(sdf.format(new Date())+"删除/作废订单返还库存:"+item.getItemNum()+"件");
  1705. inventoryLog.setLogQualityType(1);
  1706. inventoryLog.setLogWarehouseId(1);
  1707. inventoryLogMapper.insert(inventoryLog);
  1708. }
  1709. }
  1710. return true;
  1711. }
  1712. @Override
  1713. public Integer addCorrectItem(OrderCorrectItem orderCorrectItem) {
  1714. return salesOrderMapper.addCorrectItem(orderCorrectItem);
  1715. }
  1716. @Override
  1717. public OrderCorrectInfo getOrderCorrectInfo(Integer correctId) {
  1718. return salesOrderMapper.getOrderCorrectInfo(correctId);
  1719. }
  1720. @Override
  1721. public List<OrderCorrectItem> listOrderCorrectItem(Integer correctId) {
  1722. return salesOrderMapper.listOrderCorrectItem(correctId);
  1723. }
  1724. @Override
  1725. public SalesOrderItem getSalesOrderItem(Integer itemId) {
  1726. return salesOrderMapper.getSalesOrderItem(itemId);
  1727. }
  1728. @Override
  1729. public Integer updateOrderItemById(SalesOrderItem salesOrderItem) {
  1730. return salesOrderMapper.updateOrderItemById(salesOrderItem);
  1731. }
  1732. @Override
  1733. public List<OrderCorrectInfo> listOrderCorrectInfo(Integer orderId) {
  1734. return salesOrderMapper.listOrderCorrectInfo(orderId);
  1735. }
  1736. @Override
  1737. public OrderWarehouse selectAdminWarehouse(Integer adminId) {
  1738. return salesOrderMapper.selectAdminWarehouse(adminId);
  1739. }
  1740. @Override
  1741. public List<OrderWarehouse> listOrderWarehouse() {
  1742. return salesOrderMapper.listOrderWarehouse();
  1743. }
  1744. @Transactional
  1745. @Override
  1746. public List<SalesOrder> salesOrderAndItemStat(SalesOrder salesOrder) {
  1747. return salesOrderMapper.salesOrderAndItemStat(salesOrder);
  1748. }
  1749. @Transactional
  1750. @Override
  1751. public Integer splitOrder(String mainOrderId, List<SalesOrder> salesOrderList,Integer adminId) {
  1752. /**
  1753. * 1.查询以前的所有订单
  1754. * 2.通过比对,余下删除的订单集合orderList
  1755. * 3.给订单项赋值,并且删除该订单的订单项,新增订单项
  1756. * 4.删除orderList
  1757. */
  1758. Integer flag = 0;
  1759. String salesCode = "";
  1760. SalesOrder mainOrder = new SalesOrder();
  1761. mainOrder.setSalesDealCode(mainOrderId);
  1762. List<SalesOrder> orderList = salesOrderService.salesOrderListAndItem(mainOrder);
  1763. salesCode = orderList.get(0).getSalesDealCode();
  1764. SalesOrder or = new SalesOrder();
  1765. or.setSalesMainOrderId(orderList.get(0).getSalesId());
  1766. //该订单为主订单
  1767. List<SalesOrder> sonSalesOrderList = salesOrderService.salesOrderListAndItem(or);
  1768. orderList.addAll(sonSalesOrderList);
  1769. for (SalesOrder salesOrder:salesOrderList) {
  1770. //orderList还有的订单,最后做删除
  1771. for (int j=0;j<orderList.size();j++){
  1772. if(salesOrder.getSalesDealCode().equals(orderList.get(j).getSalesDealCode())){
  1773. orderList.remove(j);
  1774. }
  1775. }
  1776. //以前的订单并且已发货之后无法做任何操作
  1777. if(salesOrder.getSalesId() != null && salesOrder.getSalesShippingStatus() > 0){
  1778. continue;
  1779. }
  1780. //订单项赋值
  1781. for (SalesOrderItem itemSaleItem:salesOrder.getSalesOrderItemList()) {
  1782. ProductColor productColor = productMapper.getProductBySku(itemSaleItem.getItemColorBar());
  1783. itemSaleItem.setItemProductId(productColor.getColorProductId());
  1784. itemSaleItem.setItemProductColor(productColor.getColorName());
  1785. itemSaleItem.setColorAbbreviation(productColor.getColorAbbreviation());
  1786. itemSaleItem.setProductAbbreviation(productColor.getColorAbbreviation());
  1787. itemSaleItem.setItemIsSource(1);
  1788. //itemSaleItem.setItemProductDiscount(productColor.getColorDiscount());
  1789. itemSaleItem.setItemProductPrice(itemSaleItem.getItemProductDiscount());
  1790. itemSaleItem.setItemProductPic(productColor.getColorPicture());
  1791. itemSaleItem.setItemProductName(productColor.getProductName());
  1792. itemSaleItem.setItemProductType(productColor.getProductType());
  1793. itemSaleItem.setItemColorId(productColor.getColorId());
  1794. /*查询成本*/
  1795. SupplierProduct supplierProduct = supplierProductMapper.getSupplierProductByColorId(itemSaleItem.getItemColorId());
  1796. if(supplierProduct != null){
  1797. itemSaleItem.setItemCost(supplierProduct.getSpCost());
  1798. itemSaleItem.setItemCostTotal(supplierProduct.getSpCost() * itemSaleItem.getItemNum());
  1799. }else{
  1800. throw new RuntimeException("确认订单失败-未查询到该产品("+ itemSaleItem.getItemProductName() +"-"+ itemSaleItem.getItemProductColor() +")的成本价格");
  1801. }
  1802. if(salesOrder.getSalesId() != null){
  1803. itemSaleItem.setItemOrderId(salesOrder.getSalesId());
  1804. }
  1805. }
  1806. Integer salesId = salesOrder.getSalesId();
  1807. if(salesId == null){
  1808. //添加订单和订单项
  1809. salesOrderService.addOrderAndIteminfo(salesOrder,salesOrder.getSalesOrderItemList());
  1810. //添加操作跟踪信息
  1811. OrderTracking orderTracking = new OrderTracking();
  1812. orderTracking.setAdminId(adminId);
  1813. orderTracking.setSalesDealCode(salesOrder.getSalesDealCode());
  1814. orderTracking.setTrackingDesc("拆分订单(由:"+salesCode+"拆分出来)");
  1815. salesOrderService.addTracking(orderTracking);
  1816. }else{
  1817. //其余全部做修改,删除订单项,添加新的订单项
  1818. flag = salesOrderMapper.delOrderItem(salesOrder.getSalesId());
  1819. if(flag < 1){
  1820. throw new RuntimeException("删除订单项失败,订单交易号:"+salesOrder.getSalesDealCode());
  1821. }
  1822. calculationTotal(null,salesOrder.getSalesOrderItemList());
  1823. flag = salesOrderMapper.addOrderItemList(salesOrder.getSalesOrderItemList());
  1824. if(flag < 1){
  1825. throw new RuntimeException("添加订单项失败,订单交易号:"+salesOrder.getSalesDealCode());
  1826. }
  1827. this.cacheOrderItem(salesOrder.getSalesId());
  1828. //添加操作跟踪信息
  1829. OrderTracking orderTracking = new OrderTracking();
  1830. orderTracking.setAdminId(adminId);
  1831. orderTracking.setSalesDealCode(salesOrder.getSalesDealCode());
  1832. orderTracking.setTrackingDesc("拆分订单");
  1833. salesOrderService.addTracking(orderTracking);
  1834. }
  1835. }
  1836. for (SalesOrder soDelete:orderList) {
  1837. flag = salesOrderService.delSalesOrder(soDelete.getSalesId());
  1838. if(flag < 1){
  1839. throw new RuntimeException("删除订单失败,删除订单交易号:"+soDelete.getSalesDealCode());
  1840. }
  1841. //添加操作跟踪信息 - 删除操作
  1842. OrderTracking orderTracking = new OrderTracking();
  1843. orderTracking.setAdminId(adminId);
  1844. orderTracking.setSalesDealCode(orderTracking.getSalesDealCode());
  1845. orderTracking.setTrackingDesc("拆分订单(删除处理");
  1846. salesOrderService.addTracking(orderTracking);
  1847. }
  1848. return flag;
  1849. }
  1850. @Override
  1851. public AfterrulesInfo getAfterrulesInfo(Integer storeId) {
  1852. return salesOrderMapper.getAfterrulesInfo(storeId);
  1853. }
  1854. @Override
  1855. public Integer updateOrderItemReturnNum(SalesOrderItem salesOrderItem) {
  1856. return salesOrderMapper.updateOrderItemReturnNum(salesOrderItem);
  1857. }
  1858. @Override
  1859. public List<SmsSignatureInfo> listSmsSignatureInfo(SmsSignatureInfo smsSignatureInfo) {
  1860. return salesOrderMapper.listSmsSignatureInfo(smsSignatureInfo);
  1861. }
  1862. @Override
  1863. public List<SmsTemplateInfo> listSmsTemplateInfo(SmsTemplateInfo smsTemplateInfo) {
  1864. return salesOrderMapper.listSmsTemplateInfo(smsTemplateInfo);
  1865. }
  1866. @Override
  1867. public SalesOrder getStatusNum(SalesOrder salesOrder) {
  1868. return salesOrderMapper.getStatusNum(salesOrder);
  1869. }
  1870. @Override
  1871. public SalesOrder getSalesOrderByOrderId(String salesOrderId) {
  1872. return salesOrderMapper.getSalesOrderByOrderId(salesOrderId);
  1873. }
  1874. @Override
  1875. public Integer updateOrderItemObj(SalesOrderItem salesOrderItem) {
  1876. return salesOrderMapper.updateOrderItemObj(salesOrderItem);
  1877. }
  1878. @Override
  1879. public Integer updateSalesOrderBySalesPostNum(SalesOrder salesOrder) {
  1880. return salesOrderMapper.updateSalesOrderBySalesPostNum(salesOrder);
  1881. }
  1882. @Override
  1883. public List<SalesOrder> listSalesOrderByAddr(SalesOrder salesOrder) {
  1884. return salesOrderMapper.listSalesOrderByAddr(salesOrder);
  1885. }
  1886. @Override
  1887. public List<SalesOrder> listSublistCount(Integer salesId) {
  1888. return salesOrderMapper.listSublistCount(salesId);
  1889. }
  1890. @Override
  1891. public List<LogisticsInfo> dayDeliveryNum(LogisticsInfo logisticsInfo) {
  1892. return salesOrderMapper.dayDeliveryNum(logisticsInfo);
  1893. }
  1894. @Override
  1895. public Integer addCargoInfo(CargoInfo cargoInfo) {
  1896. return salesOrderMapper.addCargoInfo(cargoInfo);
  1897. }
  1898. @Override
  1899. public CargoInfo getCargoInfo(CargoInfo cargoInfo) {
  1900. return salesOrderMapper.getCargoInfo(cargoInfo);
  1901. }
  1902. @Override
  1903. public Integer updateCargoInfo(CargoInfo cargoInfo) {
  1904. return salesOrderMapper.updateCargoInfo(cargoInfo);
  1905. }
  1906. @Override
  1907. public List<OrderStatisticsInfo> listDistributionNum(OrderStatisticsInfo orderStatisticsInfo) {
  1908. return salesOrderMapper.listDistributionNum(orderStatisticsInfo);
  1909. }
  1910. @Override
  1911. public List<OrderStatisticsInfo> listSendNum(OrderStatisticsInfo orderStatisticsInfo) {
  1912. return salesOrderMapper.listSendNum(orderStatisticsInfo);
  1913. }
  1914. @Override
  1915. public List<CargoInfo> listCargoInfo(CargoInfo cargoInfo) {
  1916. return salesOrderMapper.listCargoInfo(cargoInfo);
  1917. }
  1918. @Override
  1919. public List<OrderStatisticsInfo> listPlaySingleNum(OrderStatisticsInfo orderStatisticsInfo) {
  1920. return salesOrderMapper.listPlaySingleNum(orderStatisticsInfo);
  1921. }
  1922. @Override
  1923. public List<OrderStatisticsInfo> listOutboundNum(OrderStatisticsInfo orderStatisticsInfo) {
  1924. return salesOrderMapper.listOutboundNum(orderStatisticsInfo);
  1925. }
  1926. @Override
  1927. public List<OrderStatisticsInfo> listDistributionInvalidNum(OrderStatisticsInfo orderStatisticsInfo) {
  1928. return salesOrderMapper.listDistributionInvalidNum(orderStatisticsInfo);
  1929. }
  1930. @Override
  1931. public List<OrderStatisticsInfo> listSendInvalidNum(OrderStatisticsInfo orderStatisticsInfo) {
  1932. return salesOrderMapper.listSendInvalidNum(orderStatisticsInfo);
  1933. }
  1934. @Override
  1935. public List<OrderStatisticsInfo> listDeliveryLogisticsNum(OrderStatisticsInfo orderStatisticsInfo) {
  1936. return salesOrderMapper.listDeliveryLogisticsNum(orderStatisticsInfo);
  1937. }
  1938. @Override
  1939. public List<SalesOrder> orderAfterCaseDate() {
  1940. return salesOrderMapper.orderAfterCaseDate();
  1941. }
  1942. @Override
  1943. public List<OrderStatisticsInfo> getPickingOrders(OrderStatisticsInfo orderStatisticsInfo) {
  1944. return salesOrderMapper.getPickingOrders(orderStatisticsInfo);
  1945. }
  1946. @Override
  1947. public List<OrderStatisticsInfo> getCheckOrders(OrderStatisticsInfo orderStatisticsInfo) {
  1948. return salesOrderMapper.getCheckOrders(orderStatisticsInfo);
  1949. }
  1950. @Override
  1951. public Integer addTracking(OrderTracking orderTracking) {
  1952. return salesOrderMapper.addTracking(orderTracking);
  1953. }
  1954. @Override
  1955. public List<OrderTracking> listTracking(String salesDealCode) {
  1956. return salesOrderMapper.listTracking(salesDealCode);
  1957. }
  1958. @Override
  1959. public List<SalesOrder> listUpdateOrderShippingStatus() {
  1960. return salesOrderMapper.listUpdateOrderShippingStatus();
  1961. }
  1962. @Override
  1963. public Integer updateSalesOrderShippingStatus(SalesOrder salesOrder) {
  1964. return salesOrderMapper.updateSalesOrderShippingStatus(salesOrder);
  1965. }
  1966. @Override
  1967. public Integer addStrategyProduct(StrategyProduct strategyProduct) {
  1968. return salesOrderMapper.addStrategyProduct(strategyProduct);
  1969. }
  1970. @Override
  1971. public Integer addStrategyColor(StrategyColor strategyColor) {
  1972. return salesOrderMapper.addStrategyColor(strategyColor);
  1973. }
  1974. @Override
  1975. public Integer addStrategyStore(StrategyStore strategyStore) {
  1976. return salesOrderMapper.addStrategyStore(strategyStore);
  1977. }
  1978. @Override
  1979. public List<StrategyProduct> selectStrategyProduct(Integer strategyId) {
  1980. return salesOrderMapper.selectStrategyProduct(strategyId);
  1981. }
  1982. @Override
  1983. public List<StrategyColor> selectStrategyColor(Integer strategyId) {
  1984. return salesOrderMapper.selectStrategyColor(strategyId);
  1985. }
  1986. @Override
  1987. public List<StrategyStore> selectStrategyStore(Integer strategyId) {
  1988. return salesOrderMapper.selectStrategyStore(strategyId);
  1989. }
  1990. @Override
  1991. @Transactional(rollbackFor = {Exception.class}, isolation = Isolation.REPEATABLE_READ)
  1992. public int printOrder(List<SalesOrder> list, Integer currAdmin) {
  1993. // 修改订单状态
  1994. list.forEach(o -> {
  1995. o.setSalesShippingStatus(1);
  1996. o.setSalesSendTime(new Date());
  1997. o.setSalesOldOrderStatus(11);
  1998. // 修改订单状态
  1999. if (salesOrderMapper.updateSalesOrder(o) <= 0) {
  2000. throw new RuntimeException("订单" + o.getSalesId() + "发货失败,请查询订单状态");
  2001. }
  2002. // 小亚通订单,调用接口发货
  2003. if (!orderSyncLogService.syncXYTOrderShip(new Integer[]{o.getSalesId()})) {
  2004. throw new RuntimeException("订单" + o.getSalesId() + "向小亚通发货失败,请查询订单状态");
  2005. }
  2006. // 添加订单追踪信息
  2007. OrderTracking orderTracking = new OrderTracking();
  2008. orderTracking.setAdminId(currAdmin);
  2009. orderTracking.setSalesDealCode(o.getSalesDealCode());
  2010. orderTracking.setTrackingDesc("打印订单");
  2011. salesOrderService.addTracking(orderTracking);
  2012. });
  2013. return list.size();
  2014. }
  2015. @Override
  2016. public List<SalesOrder> testListSalesOrder() {
  2017. List<SalesOrder> orders = salesOrderMapper.testListSalesOrder();
  2018. /*for (SalesOrder order : orders) {
  2019. SalesOrderItem item = new SalesOrderItem();
  2020. item.setItemOrderId(order.getSalesId());
  2021. order.setSalesOrderItemList(salesOrderMapper.listSalesOrderItem(item));
  2022. }*/
  2023. return orders;
  2024. }
  2025. @Override
  2026. public List<SalesOrder> testListOther(SalesOrder data) {
  2027. List<SalesOrder> orders = salesOrderMapper.testListOther(data);
  2028. for (SalesOrder order : orders) {
  2029. SalesOrderItem item = new SalesOrderItem();
  2030. item.setItemOrderId(order.getSalesId());
  2031. order.setSalesOrderItemList(salesOrderMapper.listSalesOrderItem(item));
  2032. }
  2033. return orders;
  2034. }
  2035. /***
  2036. * 计算金额
  2037. * @param salesOrder
  2038. * @param salesOrderItemList
  2039. */
  2040. public void calculationTotal(SalesOrder salesOrder,List<SalesOrderItem> salesOrderItemList){
  2041. Integer salesAmount=0,salesPayMoney=0;
  2042. for (SalesOrderItem soi:salesOrderItemList) {
  2043. if(soi.getItemTotal() == null || soi.getItemTotal() == 0){
  2044. soi.setItemTotal(soi.getItemNum() * soi.getItemProductDiscount());
  2045. }
  2046. salesAmount += (soi.getItemNum() * soi.getItemProductPrice());
  2047. salesPayMoney += soi.getItemTotal();
  2048. }
  2049. if(salesOrder != null){
  2050. salesOrder.setSalesAmount(salesAmount);
  2051. salesOrder.setSalesPayMoney(salesPayMoney);
  2052. }
  2053. }
  2054. }