SalesOrderServiceImpl.java 93 KB

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