SalesOrderServiceImpl.java 98 KB

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