SalesOrderServiceImpl.java 113 KB

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