SalesOrderServiceImpl.java 77 KB

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