SalesOrderServiceImpl.java 66 KB

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