SalesOrderServiceImpl.java 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931
  1. package com.iamberry.rst.service.cm;
  2. import com.github.pagehelper.PageHelper;
  3. import com.iamberry.rst.core.cm.FittingsInfo;
  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.order.DownsingleRuleInfo;
  8. import com.iamberry.rst.core.order.DownsingleRuleItemInfo;
  9. import com.iamberry.rst.core.order.PostInfo;
  10. import com.iamberry.rst.core.order.ProductColor;
  11. import com.iamberry.rst.core.page.PagedResult;
  12. import com.iamberry.rst.core.sys.SysConfig;
  13. import com.iamberry.rst.core.tools.LogisticsInfo;
  14. import com.iamberry.rst.faces.cm.SalesOrderService;
  15. import com.iamberry.rst.faces.cm.StoreInfoService;
  16. import com.iamberry.rst.faces.order.EfastOrderService;
  17. import com.iamberry.rst.faces.product.ProductService;
  18. import com.iamberry.rst.service.cm.mapper.FittingsInfoMapper;
  19. import com.iamberry.rst.service.cm.mapper.SalesOrderMapper;
  20. import com.iamberry.rst.service.sys.mapper.SysConfigMapper;
  21. import com.iamberry.rst.util.PageUtil;
  22. import com.iamberry.wechat.tools.DateTimeUtil;
  23. import net.sf.json.JSONArray;
  24. import net.sf.json.JSONObject;
  25. import org.slf4j.Logger;
  26. import org.slf4j.LoggerFactory;
  27. import org.springframework.beans.BeanUtils;
  28. import org.springframework.beans.factory.annotation.Autowired;
  29. import org.springframework.stereotype.Service;
  30. import org.springframework.transaction.annotation.Transactional;
  31. import java.beans.Transient;
  32. import java.util.*;
  33. /**
  34. * Created by liuzhiwei on 2017/10/31.
  35. */
  36. @Service
  37. public class SalesOrderServiceImpl implements SalesOrderService {
  38. private static Logger logger = LoggerFactory.getLogger(CustomerServiceImpl.class);
  39. @Autowired
  40. private SalesOrderMapper salesOrderMapper;
  41. @Autowired
  42. private ProductService productService;
  43. @Autowired
  44. private StoreInfoService storeInfoService;
  45. @Autowired
  46. private EfastOrderService efastOrderService;
  47. @Autowired
  48. private SalesOrderService salesOrderService;
  49. @Autowired
  50. private FittingsInfoMapper fittingsInfoMapper;
  51. @Autowired
  52. private SysConfigMapper sysConfigMapper;
  53. @Override
  54. public Integer addSalesOrder(SalesOrder salesOrder) {
  55. return salesOrderMapper.addSalesOrder(salesOrder);
  56. }
  57. @Override
  58. @Transactional
  59. public Integer addSalesOrderManual(SalesOrder salesOrder) {
  60. salesOrderMapper.addSalesOrder(salesOrder);
  61. return null;
  62. }
  63. @Override
  64. public SalesOrder getSalesOrderById(Integer salesId) {
  65. return salesOrderMapper.getSalesOrderById(salesId);
  66. }
  67. @Override
  68. public Integer updateSalesOrder(SalesOrder salesOrder) {
  69. return salesOrderMapper.updateSalesOrder(salesOrder);
  70. }
  71. @Transactional
  72. @Override
  73. public Integer updateOrderInfo(SalesOrder salesOrder) {
  74. int flag = 0;
  75. //删除订单项
  76. flag = salesOrderMapper.delOrderItem(salesOrder.getSalesId());
  77. if (flag <= 0) {
  78. throw new RuntimeException("删除订单项失败!");
  79. }
  80. //修改订单
  81. salesOrderMapper.updateSalesOrder(salesOrder);
  82. if (flag <= 0) {
  83. throw new RuntimeException("修改订单失败!");
  84. }
  85. //批量添加订单项数据
  86. flag = salesOrderMapper.addOrderItemList(salesOrder.getSalesOrderItemList());
  87. if (flag <= 0) {
  88. throw new RuntimeException("增加订单项失败!");
  89. }
  90. return flag;
  91. }
  92. @Override
  93. public Integer addSalesOrderList(List<SalesOrder> list) {
  94. return salesOrderMapper.addSalesOrderList(list);
  95. }
  96. @Override
  97. public List<SalesOrder> listSalesOrder(SalesOrder salesOrder) {
  98. return salesOrderMapper.listSalesOrder(salesOrder);
  99. }
  100. @Override
  101. public Integer listSalesOrderNum(SalesOrder salesOrder) {
  102. return salesOrderMapper.listSalesOrderNum(salesOrder);
  103. }
  104. @Override
  105. public PagedResult<SalesOrder> listSalesOrderPage(int pageNO, int pageSize, SalesOrder salesOrder, boolean isTotalNum) {
  106. salesOrder.setStartOrderNO((pageNO-1) * pageSize);
  107. salesOrder.setEndOrderNO(pageSize);
  108. //查询订单列表信息
  109. List<SalesOrder> orderList = salesOrderMapper.listSalesOrderNew(salesOrder);
  110. for(SalesOrder so : orderList){
  111. SalesOrderItem salesOrderItem = new SalesOrderItem();
  112. salesOrderItem.setItemOrderId(so.getSalesId());
  113. List<SalesOrderItem> salesOrderItemList = salesOrderMapper.listSalesOrderItem(salesOrderItem);
  114. so.setSalesOrderItemList(salesOrderItemList);
  115. }
  116. PagedResult<SalesOrder> result = PageUtil.getPage(orderList);
  117. // 查询分页的数据
  118. int count = salesOrderMapper.listSalesOrderNum(salesOrder);
  119. result.setTotal(count);
  120. if(count%pageSize==0){
  121. count=count/pageSize;
  122. } else{
  123. count=count/pageSize+1;
  124. }
  125. result.setPages(count);
  126. result.setPageNo(pageNO);
  127. return result;
  128. }
  129. @Override
  130. public List<PostInfo> listWaitPrintOrderNum() {
  131. return salesOrderMapper.listWaitPrintOrderNum();
  132. }
  133. @Override
  134. public PagedResult<SalesOrder> listAwaitSendSalesOrderPage(int pageNO, int pageSize, SalesOrder salesOrder, boolean isTotalNum) {
  135. PageHelper.startPage(pageNO, pageSize, isTotalNum);
  136. //查询订单列表信息
  137. List<SalesOrder> orderList = salesOrderMapper.listAwaitSendSalesOrderPage(salesOrder);
  138. return PageUtil.getPage(orderList);
  139. }
  140. @Override
  141. @Transactional
  142. public boolean addOrderAndItem(SalesOrder salesOrder, List<SalesOrderItem> list) throws Exception {
  143. if (list == null || list.size() == 0) {
  144. throw new RuntimeException("获取订单信息出错!");
  145. }
  146. SalesOrder verifyOrder = new SalesOrder();
  147. verifyOrder.setSalesOrderId(salesOrder.getSalesOrderId());
  148. //查询该订单是否存在,如果存在,不需要再次添加到订单中
  149. int count = salesOrderMapper.getOrderInfoCount(verifyOrder);
  150. if (count > 0) {
  151. return true;
  152. }
  153. //添加订单数据
  154. try {
  155. int orderNum = salesOrderMapper.addSalesOrder(salesOrder);
  156. if (orderNum <= 0) {
  157. throw new RuntimeException("获取订单信息出错!");
  158. }
  159. } catch (Exception e) {
  160. return true;
  161. }
  162. for (SalesOrderItem item : list) {
  163. item.setItemOrderId(salesOrder.getSalesId());
  164. }
  165. //批量添加订单项数据
  166. int itemNum = salesOrderMapper.addOrderItemList(list);
  167. if (itemNum <= 0) {
  168. throw new RuntimeException("获取订单信息出错!");
  169. }
  170. return true;
  171. }
  172. @Override
  173. @Transactional
  174. public SalesOrder addOrderAndIteminfo(SalesOrder salesOrder, List<SalesOrderItem> list) {
  175. //添加订单数据
  176. int orderNum = salesOrderMapper.addSalesOrder(salesOrder);
  177. if (orderNum <= 0) {
  178. return salesOrder;
  179. }
  180. for (SalesOrderItem item : list) {
  181. item.setItemOrderId(salesOrder.getSalesId());
  182. }
  183. //批量添加订单项数据
  184. int itemNum = salesOrderMapper.addOrderItemList(list);
  185. if (itemNum <= 0) {
  186. return salesOrder;
  187. }
  188. return salesOrder;
  189. }
  190. public void parseOrder(SalesOrder oginerOrder, List<SalesOrder> listOrder) {
  191. // 订单项拆分完成,直接返回
  192. if (oginerOrder.getSalesOrderItemList().size() <= 0) {
  193. return;
  194. }
  195. List<DownsingleRuleInfo> listDownsingleRuleInfo = salesOrderService.listDownsingleRule();
  196. if(listDownsingleRuleInfo.size() < 1){
  197. listOrder.add(oginerOrder);
  198. return;
  199. }
  200. // 拆单,比较的是数量和产品
  201. Map<String, SalesOrderItem> itemMap = new HashMap<>(oginerOrder.getSalesOrderItemList().size());
  202. for (SalesOrderItem item : oginerOrder.getSalesOrderItemList()) {
  203. SalesOrderItem itemTwo = new SalesOrderItem();
  204. BeanUtils.copyProperties(item,itemTwo);
  205. itemMap.put(item.getItemColorBar(), itemTwo);
  206. }
  207. // 遍历拆单规则
  208. int ruleCount = 0;
  209. for (DownsingleRuleInfo rule : listDownsingleRuleInfo) {
  210. // 一个拆单规则
  211. int count = 0;
  212. for (DownsingleRuleItemInfo item : rule.getDownsingleRuleItemList()) {
  213. if (itemMap.get(item.getDownsingleItemBar()) != null) {
  214. if (item.getDownsingleItemNum() <= itemMap.get(item.getDownsingleItemBar()).getItemNum()) {
  215. count ++;
  216. }
  217. }
  218. }
  219. if (count == rule.getDownsingleRuleItemList().size()) {
  220. // 满足拆单条件
  221. SalesOrder newOrder = new SalesOrder();
  222. BeanUtils.copyProperties(oginerOrder,newOrder);
  223. newOrder.setSalesOrderItemList(new ArrayList<SalesOrderItem>(count));
  224. for (DownsingleRuleItemInfo item : rule.getDownsingleRuleItemList()) {
  225. SalesOrderItem temp = new SalesOrderItem();
  226. BeanUtils.copyProperties(itemMap.get(item.getDownsingleItemBar()),temp);
  227. temp.setItemNum(item.getDownsingleItemNum());
  228. newOrder.getSalesOrderItemList().add(temp);
  229. }
  230. listOrder.add(newOrder);
  231. // 继续递归
  232. for (DownsingleRuleItemInfo item : rule.getDownsingleRuleItemList()) {
  233. if (item.getDownsingleItemNum().equals(itemMap.get(item.getDownsingleItemBar()).getItemNum())) {
  234. // 数量和拆单规则相同,则删除原订单的订单项
  235. /*oginerOrder.getSalesOrderItemList().remove(itemMap.get(item.getDownsingleItemBar()));*/
  236. for(int i = 0;i<oginerOrder.getSalesOrderItemList().size();i++){
  237. if(oginerOrder.getSalesOrderItemList().get(i).getItemColorBar() .equals(item.getDownsingleItemBar())){
  238. oginerOrder.getSalesOrderItemList().remove(i);
  239. }
  240. }
  241. } else {
  242. // SalesOrderItem orderItem = itemMap.get(item.getDownsingleItemBar());
  243. SalesOrderItem orderItem = new SalesOrderItem();
  244. BeanUtils.copyProperties(itemMap.get(item.getDownsingleItemBar()),orderItem);
  245. int oldCount = orderItem.getItemNum();
  246. /*orderItem.setItemNum(oldCount - item.getDownsingleItemNum());*/
  247. for(int i = 0;i<oginerOrder.getSalesOrderItemList().size();i++){
  248. if(oginerOrder.getSalesOrderItemList().get(i).getItemColorBar() .equals(item.getDownsingleItemBar())){
  249. oginerOrder.getSalesOrderItemList().get(i).setItemNum(oldCount - item.getDownsingleItemNum());
  250. }
  251. }
  252. }
  253. }
  254. salesOrderService.parseOrder(oginerOrder, listOrder);
  255. break;
  256. } else {
  257. // 不满足, 继续下一个规则
  258. // 如果是最后一个拆单规则,则不拆单
  259. if ((ruleCount + 1) == listDownsingleRuleInfo.size()) {
  260. if (oginerOrder.getSalesOrderItemList().size() > 0) {
  261. listOrder.add(oginerOrder);
  262. }
  263. }
  264. }
  265. ruleCount++;
  266. }
  267. }
  268. @Override
  269. @Transactional
  270. public boolean addRstOrderAndIteminfo(SalesOrder salesOrder){
  271. //合并订单项-------------statr
  272. List<SalesOrderItem> listItem = salesOrder.getSalesOrderItemList();
  273. salesOrder.setSalesOrderItemList(null);
  274. List<SalesOrderItem> list = new ArrayList<>();
  275. for (int i = 0;i<listItem.size();i++){
  276. if(i < listItem.size() - 1 ){
  277. for(int j = 0;j<listItem.size();j++){
  278. if (i != j){
  279. if(listItem.get(i).getItemColorBar().equals(listItem.get(j).getItemColorBar())){
  280. listItem.get(i).setItemNum(listItem.get(i).getItemNum()+listItem.get(j).getItemNum());
  281. }
  282. }
  283. }
  284. }
  285. boolean bl = true;
  286. for (SalesOrderItem salesOrderItem : list){
  287. if(salesOrderItem.getItemColorBar().equals(listItem.get(i).getItemColorBar())){
  288. bl = false;
  289. }
  290. }
  291. if(bl){
  292. list.add(listItem.get(i));
  293. }
  294. }
  295. //合并订单项----------------------end
  296. //匹配拆单规则 分割订单-------------state
  297. List<SalesOrder> listSalesOrder = new ArrayList<>();
  298. salesOrder.setSalesOrderItemList(list);
  299. salesOrderService.parseOrder(salesOrder, listSalesOrder);
  300. //匹配拆单规则 分割订单-------------end
  301. boolean msg = false;
  302. //判断主从订单--------------------state
  303. if (listSalesOrder.size() > 0){
  304. SalesOrder mainOrder = null;
  305. for (int s = 0;s < listSalesOrder.size();s++){
  306. if(mainOrder == null){
  307. for(int i = 0;i<listSalesOrder.get(s).getSalesOrderItemList().size();i++){
  308. int isMachine = salesOrderService.getIsMachine(listSalesOrder.get(s).getSalesOrderItemList().get(i).getItemColorBar());
  309. if( isMachine == 1){//1:水机 2:其它产品 0:未查到
  310. mainOrder = listSalesOrder.get(s);
  311. listSalesOrder.remove(s);
  312. break;
  313. }
  314. }
  315. }
  316. }
  317. if(mainOrder == null){//如果不存有水机的订单则默认第一个订单为主订单
  318. mainOrder = listSalesOrder.get(0);
  319. listSalesOrder.remove(0);
  320. }
  321. //判断主从订单--------------------end
  322. msg = salesOrderService.addRstOrderinfo(mainOrder,listSalesOrder);
  323. }
  324. return msg;
  325. }
  326. @Override
  327. @Transactional
  328. public boolean addRstOrderinfo(SalesOrder mainOrder,List<SalesOrder> listSalesOrder) {
  329. Integer flag = salesOrderMapper.getOrderBySalesDealCodeNum(mainOrder.getSalesDealCode());
  330. if(flag > 0){
  331. throw new RuntimeException("交易号("+ mainOrder.getSalesDealCode() +")重复,请重新生成交易号!");
  332. }
  333. int orderNum = salesOrderMapper.addSalesOrder(mainOrder);
  334. if (orderNum <= 0) {
  335. throw new RuntimeException("添加订单出错--------!");
  336. }
  337. for (SalesOrderItem item : mainOrder.getSalesOrderItemList()) {
  338. item.setItemOrderId(mainOrder.getSalesId());
  339. }
  340. //批量添加订单项数据
  341. int itemNum = salesOrderMapper.addOrderItemList(mainOrder.getSalesOrderItemList());
  342. if (itemNum <= 0) {
  343. throw new RuntimeException("添加订单出错--------!");
  344. }else{
  345. if(listSalesOrder.size() > 0){
  346. for (int i = 0;i<listSalesOrder.size();i++){
  347. listSalesOrder.get(i).setSalesDealCode(listSalesOrder.get(i).getSalesDealCode()+"-"+(i+1));
  348. listSalesOrder.get(i).setSalesMainOrderId(mainOrder.getSalesId());
  349. listSalesOrder.get(i).setSalesId(null);
  350. orderNum = salesOrderMapper.addSalesOrder(listSalesOrder.get(i));
  351. if (orderNum <= 0) {
  352. throw new RuntimeException("添加订单出错--------!");
  353. }
  354. for (SalesOrderItem item : listSalesOrder.get(i).getSalesOrderItemList()) {
  355. item.setItemOrderId(listSalesOrder.get(i).getSalesId());
  356. }
  357. //批量添加订单项数据
  358. itemNum = salesOrderMapper.addOrderItemList(listSalesOrder.get(i).getSalesOrderItemList());
  359. if (itemNum <= 0) {
  360. throw new RuntimeException("添加订单出错--------!");
  361. }
  362. }
  363. }
  364. }
  365. return true;
  366. }
  367. @Override
  368. public List<SalesOrderItem> listSalesOrderItem(SalesOrderItem salesOrderItem) {
  369. return salesOrderMapper.listSalesOrderItem(salesOrderItem);
  370. }
  371. @Override
  372. public Integer updateOrderList(JSONArray orderList, List<SalesOrder> list) {
  373. List<SalesOrder> salesOrders = new ArrayList<SalesOrder>();
  374. //订单号相同时,判断状态,发货状态,物流公司,物流单号等是否相同,如果有一个不同,则需添加到salesOrders中进行同步
  375. for (int i = 0;i < orderList.size();i++) {
  376. JSONObject orderInfo = orderList.getJSONObject(i);
  377. for (SalesOrder salesOrder : list) {
  378. if (orderInfo.get("order_sn").equals(salesOrder.getSalesOrderId())
  379. && !(orderInfo.getInt("order_status") == salesOrder.getSalesStatus()
  380. && orderInfo.getInt("shipping_status") == salesOrder.getSalesShippingStatus()
  381. && orderInfo.getInt("pay_status") == salesOrder.getSalesPayStatus()
  382. && orderInfo.getInt("process_status") == salesOrder.getSalesProcessStatus()
  383. && orderInfo.getInt("is_send") == salesOrder.getSalesIsSend()
  384. && orderInfo.getInt("is_locked") == salesOrder.getSalesIsLocked()
  385. && orderInfo.getInt("is_separate") == salesOrder.getSalesIsSeparate()
  386. && orderInfo.getString("shipping_name").equals(salesOrder.getSalesPostFirm())
  387. && orderInfo.getString("invoice_no").equals(salesOrder.getSalesPostNum())
  388. )) {
  389. SalesOrder order = new SalesOrder();
  390. order.setSalesId(salesOrder.getSalesId());
  391. order.setSalesStatus(orderInfo.getInt("order_status"));
  392. order.setSalesShippingStatus(orderInfo.getInt("shipping_status"));
  393. order.setSalesPayStatus(orderInfo.getInt("pay_status"));
  394. order.setSalesProcessStatus(orderInfo.getInt("process_status"));
  395. order.setSalesIsSend(orderInfo.getInt("is_send"));
  396. order.setSalesIsLocked(orderInfo.getInt("is_locked"));
  397. order.setSalesIsSeparate(orderInfo.getInt("is_separate"));
  398. order.setSalesPostFirm(orderInfo.getString("shipping_name"));
  399. order.setSalesPostNum(orderInfo.getString("invoice_no"));
  400. salesOrders.add(order);
  401. }
  402. }
  403. }
  404. if (salesOrders != null && salesOrders.size() > 0) {
  405. //批量修改订单状态等信息
  406. return salesOrderMapper.updateOrderList(salesOrders);
  407. } else {
  408. return 1;
  409. }
  410. }
  411. @Override
  412. public Integer updateReturnOrderList(JSONArray orderList, List<SalesOrder> list) {
  413. List<SalesOrder> salesOrders = new ArrayList<SalesOrder>();
  414. //订单号相同时,判断状态,发货状态,物流公司,物流单号等是否相同,如果有一个不同,则需添加到salesOrders中进行同步
  415. for (int i = 0;i < orderList.size();i++) {
  416. JSONObject orderInfo = orderList.getJSONObject(i);
  417. for (SalesOrder salesOrder : list) {
  418. if (orderInfo.get("relating_order_sn").equals(salesOrder.getSalesOrderId())) {
  419. SalesOrder order = new SalesOrder();
  420. switch (orderInfo.getInt("process_type")) {
  421. case 1://退货
  422. order.setSalesOrderStatus(3);
  423. break;
  424. case 4://换货
  425. order.setSalesOrderStatus(2);
  426. break;
  427. default:
  428. order.setSalesOrderStatus(3);
  429. break;
  430. }
  431. order.setSalesId(salesOrder.getSalesId());
  432. salesOrders.add(order);
  433. }
  434. }
  435. }
  436. //批量修改订单状态等信息
  437. return salesOrderMapper.updateOrderList(list);
  438. }
  439. @Override
  440. public void addSalesOrderList(JSONObject obj) throws Exception{
  441. if (obj == null) {
  442. return;
  443. }
  444. JSONArray orderList = obj.getJSONArray("list");
  445. if (orderList == null || orderList.size() == 0) {
  446. return;
  447. }
  448. String endTime = sysConfigMapper.getSysConfig(1);
  449. for (int i = 0;i < orderList.size();i++) {
  450. JSONObject order = orderList.getJSONObject(i);
  451. //获取订单详情
  452. JSONObject orderInfo = null;
  453. try{
  454. orderInfo = efastOrderService.getOrderFormEfast(order.getString("deal_code"));
  455. }catch (Exception e){
  456. logger.info("获取订单失败;异常编号:505;失败原因:"+ e.getMessage() +"--获取失败订单号:" + orderList.getJSONObject(i).getString("deal_code"));
  457. }
  458. if (orderInfo == null) {
  459. continue;
  460. }
  461. if (!orderInfo.has("orders")) {
  462. continue;
  463. }
  464. //获取订单项集合
  465. JSONArray itemArray = orderInfo.getJSONArray("orders");
  466. if (itemArray == null || itemArray.size() == 0) {
  467. continue;
  468. }
  469. SalesOrder salesOrder = new SalesOrder();
  470. salesOrder.setSalesOrderId(order.getString("order_sn"));//订单编号
  471. salesOrder.setSalesDealCode(order.getString("deal_code"));//交易号
  472. salesOrder.setSalesOrderStatus(1);//订单状态
  473. salesOrder.setSalesShippingStatus(order.getInt("shipping_status"));//发货状态 0:未发货,1:已发货,3:备货中
  474. salesOrder.setSalesPayStatus(order.getInt("pay_status"));//是否付款 0:未付款,2:已付款
  475. salesOrder.setSalesProcessStatus(order.getInt("process_status"));//单据状态
  476. salesOrder.setSalesIsSend(order.getInt("is_send"));//是否通知配货
  477. salesOrder.setSalesIsLocked(order.getInt("is_locked"));//是否锁定
  478. salesOrder.setSalesIsSeparate(order.getInt("is_separate"));//是否缺货
  479. salesOrder.setSalesStatus(order.getInt("order_status"));//订单状态 0:未确认,1:已确认,2:挂起,3:作废
  480. salesOrder.setSalesPostFirm(order.getString("shipping_name").trim());//快递方式代码
  481. salesOrder.setSalesPostNum(order.getString("invoice_no").trim());//快递单号
  482. salesOrder.setSalesOpenId(order.getString("mobile").trim());//唯一标识
  483. salesOrder.setSalesPayType(efastOrderService.getPayType(order.getString("pay_name").trim()));//支付方式
  484. salesOrder.setSalesPayTime(new Date(order.getLong("pay_time")*1000));//支付时间
  485. salesOrder.setSalesUserRemark(order.getString("postscript"));//买家留言
  486. salesOrder.setSalesAdminRemark(order.getString("to_buyer"));//商家留言
  487. salesOrder.setSalesAmount((int)(order.getDouble("order_amount")*100));//应付款
  488. salesOrder.setSalesPayMoney((int)(order.getDouble("money_paid")*100));//已付款
  489. salesOrder.setSalesAddressName(order.getString("consignee").trim());//收货人
  490. String mobile = order.getString("mobile").replaceAll("[\\u00A0]+", "").trim();
  491. salesOrder.setSalesAddressTel(mobile);//收货人电话
  492. salesOrder.setSalesAddressInfo(order.getString("address").replaceAll(" ","-"));//收货地址
  493. salesOrder.setSalesShippingFee((int)(order.getDouble("shipping_fee")*100));//邮费
  494. salesOrder.setSalesCreateTime(DateTimeUtil.parse(order.getString("create_time"),"yyyy-MM-dd HH:mm:ss"));//创建时间
  495. if (order.getInt("shipping_status") == 1) {
  496. if(order.has("delivery_time")){
  497. salesOrder.setSalesSendTime(DateTimeUtil.parse(order.getString("delivery_time"),"yyyy-MM-dd HH:mm:ss"));//发货时间
  498. }else{
  499. salesOrder.setSalesSendTime(new Date());//发货时间
  500. }
  501. }
  502. salesOrder.setSalesDiscountMoney(salesOrder.getSalesAmount() - salesOrder.getSalesPayMoney());//优惠金额
  503. salesOrder.setSalesPledgeMoney(0);//押金金额
  504. salesOrder.setSalesRemainDeposit(0);//待提取金额
  505. salesOrder.setSalesSendType(2);//发货方式,默认为物流发货
  506. salesOrder.setSalesSalesTime(salesOrder.getSalesCreateTime());//订购时间
  507. salesOrder.setSalesWaitMoney(0);//待付金额
  508. salesOrder.setSalesLastMoney(salesOrder.getSalesPayMoney());//本次支付金额
  509. salesOrder.setSalesPayNumber("0000");//支付尾号
  510. salesOrder.setSalesType(1);//订单类型
  511. endTime = order.getString("create_time"); //获取
  512. //查询店铺信息
  513. StoreInfo storeInfo = new StoreInfo();
  514. storeInfo.setStoreEfast(order.getString("sd_id"));
  515. List<StoreInfo> storeList = storeInfoService.listStore(storeInfo);
  516. int storeId = 0;
  517. int companyId = 0;
  518. if (storeList != null && storeList.size() > 0) {
  519. storeInfo = storeList.get(0);
  520. storeId = storeInfo.getStoreId();
  521. companyId = storeInfo.getCompanyId();
  522. }
  523. salesOrder.setSalesStoreId(storeId);//店铺id
  524. salesOrder.setSalesCompanyId(companyId);//销售公司id
  525. List<SalesOrderItem> itemList = new ArrayList<SalesOrderItem>();
  526. for (int j = 0;j < itemArray.size();j++) {
  527. ProductColor color = new ProductColor();
  528. JSONObject itemJson = itemArray.getJSONObject(j);
  529. SalesOrderItem item = new SalesOrderItem();
  530. color.setColorBar(itemJson.getString("goods_sn"));
  531. List<ProductColor> colorList = productService.listproductAndColor(color);
  532. if (colorList != null && colorList.size() > 0) {
  533. color = colorList.get(0);
  534. item.setItemColorBar(itemJson.getString("goods_sn"));//商品69码
  535. item.setItemNum(itemJson.getInt("goods_number"));//商品数量
  536. item.setItemCreateTime(salesOrder.getSalesCreateTime());
  537. item.setItemColorId(color.getColorId());
  538. item.setItemProductColor(color.getColorName());
  539. item.setItemProductDiscount(color.getColorDiscount());
  540. item.setItemProductId(color.getColorProductId());
  541. item.setItemProductName(color.getProductName());
  542. item.setItemProductPic(color.getColorPicture());
  543. item.setItemProductType(color.getProductType());
  544. item.setItemProductPrice(color.getColorPrice());
  545. item.setItemIsSource(1);
  546. itemList.add(item);
  547. } else {
  548. //获取配件信息
  549. FittingsInfo fittingsInfo = new FittingsInfo();
  550. fittingsInfo.setFittingsBar(itemJson.getString("goods_sn"));
  551. List<FittingsInfo> Fittings = fittingsInfoMapper.listFittings(fittingsInfo);
  552. if (Fittings == null || Fittings.size() == 0) {
  553. continue;
  554. }
  555. fittingsInfo = Fittings.get(0);
  556. item.setItemColorBar(itemJson.getString("goods_sn"));//商品69码
  557. item.setItemNum(itemJson.getInt("goods_number"));//商品数量
  558. item.setItemCreateTime(salesOrder.getSalesCreateTime());
  559. item.setItemColorId(fittingsInfo.getFittingsId());
  560. item.setItemProductColor(fittingsInfo.getFittingsName());
  561. item.setItemProductDiscount(fittingsInfo.getFittingsDiscount());
  562. item.setItemProductId(fittingsInfo.getProductId());
  563. item.setItemProductName(fittingsInfo.getFittingsName());
  564. item.setItemProductPic("");
  565. item.setItemProductType(0);
  566. item.setItemProductPrice(fittingsInfo.getFittingsPrice());
  567. item.setItemIsSource(2);
  568. itemList.add(item);
  569. }
  570. }
  571. //添加订单和订单项
  572. try{
  573. salesOrderService.addOrderAndItem(salesOrder,itemList);
  574. }catch (Exception e){
  575. logger.info("添加订单失败,异常编号:505;失败原因:+"+ e.getMessage() +"Efast编号:"+ salesOrder.getSalesOrderId());
  576. }
  577. }
  578. SysConfig sysConfig = new SysConfig(1,endTime);
  579. sysConfigMapper.updateSysConfig(sysConfig);
  580. }
  581. @Override
  582. @Transactional
  583. public boolean syncEfastOrder(JSONObject orderInfo) throws Exception {
  584. if (orderInfo == null) {
  585. throw new RuntimeException("获取Efast订单信息出错!");
  586. }
  587. if (!orderInfo.has("orders")) {
  588. throw new RuntimeException("获取Efast订单信息出错!");
  589. }
  590. //获取订单项集合
  591. JSONArray itemArray = orderInfo.getJSONArray("orders");
  592. if (itemArray == null || itemArray.size() == 0) {
  593. throw new RuntimeException("获取Efast订单信息出错!");
  594. }
  595. SalesOrder salesOrder = new SalesOrder();
  596. salesOrder.setSalesOrderId(orderInfo.getString("order_sn"));//订单编号
  597. salesOrder.setSalesDealCode(orderInfo.getString("deal_code"));//交易号
  598. salesOrder.setSalesOrderStatus(1);//订单状态
  599. salesOrder.setSalesShippingStatus(orderInfo.getInt("shipping_status"));//发货状态 0:未发货,1:已发货,3:备货中
  600. salesOrder.setSalesPayStatus(orderInfo.getInt("pay_status"));//是否付款 0:未付款,2:已付款
  601. salesOrder.setSalesProcessStatus(orderInfo.getInt("process_status"));//单据状态
  602. salesOrder.setSalesIsSend(orderInfo.getInt("is_send"));//是否通知配货
  603. salesOrder.setSalesIsLocked(orderInfo.getInt("is_locked"));//是否锁定
  604. salesOrder.setSalesIsSeparate(orderInfo.getInt("is_separate"));//是否缺货
  605. salesOrder.setSalesStatus(orderInfo.getInt("order_status"));//订单状态 0:未确认,1:已确认,2:挂起,3:作废
  606. salesOrder.setSalesPostFirm(new String(orderInfo.getString("shipping_name")).trim());//快递方式代码
  607. salesOrder.setSalesPostNum(new String(orderInfo.getString("invoice_no")).trim());//快递单号
  608. salesOrder.setSalesOpenId(orderInfo.getString("mobile").trim());//唯一标识
  609. salesOrder.setSalesPayType(efastOrderService.getPayType(orderInfo.getString("pay_name").trim()));//支付方式
  610. salesOrder.setSalesPayTime(new Date(orderInfo.getLong("pay_time")*1000));//支付时间
  611. salesOrder.setSalesUserRemark(orderInfo.getString("postscript"));//买家留言
  612. salesOrder.setSalesAdminRemark(orderInfo.getString("to_buyer"));//商家留言
  613. salesOrder.setSalesAmount((int)(orderInfo.getDouble("order_amount")*100));//应付款
  614. salesOrder.setSalesPayMoney((int)(orderInfo.getDouble("money_paid")*100));//已付款
  615. salesOrder.setSalesAddressName(orderInfo.getString("consignee"));//收货人
  616. String mobile = orderInfo.getString("mobile").replaceAll("[\\u00A0]+", "");
  617. salesOrder.setSalesAddressTel(mobile.trim());//收货人电话
  618. salesOrder.setSalesAddressInfo(orderInfo.getString("address").replaceAll(" ","-"));//收货地址
  619. salesOrder.setSalesShippingFee((int)(orderInfo.getDouble("shipping_fee")*100));//邮费
  620. salesOrder.setSalesCreateTime(new Date(orderInfo.getLong("pay_time")*1000));//创建时间
  621. if (orderInfo.getInt("shipping_status") == 1) {
  622. if(orderInfo.has("delivery_time")){
  623. salesOrder.setSalesSendTime(DateTimeUtil.parse(orderInfo.getString("delivery_time"),"yyyy-MM-dd HH:mm:ss"));//发货时间
  624. }else{
  625. salesOrder.setSalesSendTime(new Date());//发货时间
  626. }
  627. }
  628. salesOrder.setSalesDiscountMoney(salesOrder.getSalesAmount() - salesOrder.getSalesPayMoney());//优惠金额
  629. salesOrder.setSalesPledgeMoney(0);//押金金额
  630. salesOrder.setSalesRemainDeposit(0);//待提取金额
  631. salesOrder.setSalesSendType(2);//发货方式,默认为物流发货
  632. salesOrder.setSalesSalesTime(salesOrder.getSalesCreateTime());//订购时间
  633. salesOrder.setSalesWaitMoney(0);//待付金额
  634. salesOrder.setSalesLastMoney(salesOrder.getSalesPayMoney());//本次支付金额
  635. salesOrder.setSalesPayNumber("0000");//支付尾号
  636. salesOrder.setSalesType(1);//订单类型
  637. //查询店铺信息
  638. StoreInfo storeInfo = new StoreInfo();
  639. if (orderInfo.has("sd_id")) {
  640. storeInfo.setStoreEfast(orderInfo.getString("sd_id"));
  641. } else {
  642. storeInfo.setStoreEfast("1");
  643. }
  644. List<StoreInfo> storeList = storeInfoService.listStore(storeInfo);
  645. int storeId = 0;
  646. int companyId = 0;
  647. if (storeList != null && storeList.size() > 0) {
  648. storeInfo = storeList.get(0);
  649. storeId = storeInfo.getStoreId();
  650. companyId = storeInfo.getCompanyId();
  651. }
  652. salesOrder.setSalesStoreId(storeId);//店铺id
  653. salesOrder.setSalesCompanyId(companyId);//销售公司id
  654. List<SalesOrderItem> itemList = new ArrayList<SalesOrderItem>();
  655. for (int j = 0;j < itemArray.size();j++) {
  656. ProductColor color = new ProductColor();
  657. JSONObject itemJson = itemArray.getJSONObject(j);
  658. SalesOrderItem item = new SalesOrderItem();
  659. color.setColorBar(itemJson.getString("goods_barcode"));
  660. List<ProductColor> colorList = productService.listproductAndColor(color);
  661. if (colorList != null && colorList.size() > 0) {
  662. color = colorList.get(0);
  663. item.setItemColorBar(itemJson.getString("goods_barcode"));//商品69码
  664. item.setItemNum(itemJson.getInt("goods_number"));//商品数量
  665. item.setItemCreateTime(salesOrder.getSalesCreateTime());
  666. item.setItemColorId(color.getColorId());
  667. item.setItemProductColor(color.getColorName());
  668. item.setItemProductDiscount(color.getColorDiscount());
  669. item.setItemProductId(color.getColorProductId());
  670. item.setItemProductName(color.getProductName());
  671. item.setItemProductPic(color.getColorPicture());
  672. item.setItemProductType(color.getProductType());
  673. item.setItemProductPrice(color.getColorPrice());
  674. item.setItemIsSource(1);
  675. itemList.add(item);
  676. } else {
  677. //获取配件信息
  678. FittingsInfo fittingsInfo = new FittingsInfo();
  679. fittingsInfo.setFittingsBar(itemJson.getString("goods_barcode"));
  680. List<FittingsInfo> Fittings = fittingsInfoMapper.listFittings(fittingsInfo);
  681. if (Fittings == null || Fittings.size() == 0) {
  682. continue;
  683. }
  684. fittingsInfo = Fittings.get(0);
  685. item.setItemColorBar(itemJson.getString("goods_barcode"));//商品69码
  686. item.setItemNum(itemJson.getInt("goods_number"));//商品数量
  687. item.setItemCreateTime(salesOrder.getSalesCreateTime());
  688. item.setItemColorId(fittingsInfo.getFittingsId());
  689. item.setItemProductColor(fittingsInfo.getFittingsName());
  690. item.setItemProductDiscount(fittingsInfo.getFittingsDiscount());
  691. item.setItemProductId(fittingsInfo.getProductId());
  692. item.setItemProductName(fittingsInfo.getFittingsName());
  693. item.setItemProductPic("");
  694. item.setItemProductType(0);
  695. item.setItemProductPrice(fittingsInfo.getFittingsPrice());
  696. item.setItemIsSource(2);
  697. itemList.add(item);
  698. }
  699. }
  700. boolean flag = salesOrderService.addOrderAndItem(salesOrder,itemList);
  701. if (flag) {
  702. return true;
  703. } else {
  704. throw new RuntimeException("添加订单项出错!");
  705. }
  706. }
  707. @Override
  708. public Integer getOrderInfoCount(SalesOrder salesOrder) {
  709. return salesOrderMapper.getOrderInfoCount(salesOrder);
  710. }
  711. @Override
  712. public List<SalesOrder> listOrderExcel(SalesOrder salesOrder) {
  713. return salesOrderMapper.listOrderExcel(salesOrder);
  714. }
  715. @Override
  716. public Integer listOrderExcelNum(SalesOrder salesOrder) {
  717. return salesOrderMapper.listOrderExcelNum(salesOrder);
  718. }
  719. @Override
  720. public Integer delOrder(String orderId) {
  721. return salesOrderMapper.delOrder(orderId);
  722. }
  723. @Override
  724. @Transactional
  725. public Integer delSalesOrder(Integer id) {
  726. // 检查客诉是否使用订单,如果有使用订单,无法删除
  727. salesOrderMapper.delOrderItem(id);
  728. salesOrderMapper.delSalesOrder(id);
  729. return 1;
  730. }
  731. @Override
  732. public Integer updateOrderItem(SalesOrderItem salesOrderItem) {
  733. return salesOrderMapper.updateOrderItem(salesOrderItem);
  734. }
  735. @Override
  736. public SalesOrder getSalesOrderByLogistics(SalesOrder salesOrder) {
  737. return salesOrderMapper.getSalesOrderByLogistics(salesOrder);
  738. }
  739. @Override
  740. public Integer updateOrderListIsDownload(List<SalesOrder> list) {
  741. return salesOrderMapper.updateOrderListIsDownload(list);
  742. }
  743. @Override
  744. public Integer updateSalesOrderByDealCode(SalesOrder salesOrder) {
  745. return salesOrderMapper.updateSalesOrderByDealCode(salesOrder);
  746. }
  747. @Override
  748. public List<LogisticsInfo> getLogisticsInfo(LogisticsInfo logisticsInfo) {
  749. return salesOrderMapper.getLogisticsInfo(logisticsInfo);
  750. }
  751. @Override
  752. public List<DownsingleRuleInfo> listDownsingleRule() {
  753. return salesOrderMapper.listDownsingleRule();
  754. }
  755. @Override
  756. public Integer getIsMachine(String colorBar) {
  757. return salesOrderMapper.getIsMachine(colorBar);
  758. }
  759. @Override
  760. public Integer getOrderBySalesDealCodeNum(String code) {
  761. return salesOrderMapper.getOrderBySalesDealCodeNum(code);
  762. }
  763. @Override
  764. public Integer listSalesOrderAndItemNum(SalesOrder salesOrder) {
  765. return salesOrderMapper.listSalesOrderAndItemNum(salesOrder);
  766. }
  767. @Override
  768. public List<SalesOrder> listSalesOrderAndItem(SalesOrder salesOrder) {
  769. return salesOrderMapper.listSalesOrderAndItem(salesOrder);
  770. }
  771. @Override
  772. public Integer getSalesOrderNum(SalesOrder salesOrder) {
  773. return salesOrderMapper.getSalesOrderNum(salesOrder);
  774. }
  775. @Transactional
  776. @Override
  777. public Integer listConfirmSalesOrderByBatch(String salesBatchId) {
  778. Integer flag = 0;
  779. SalesOrder salesOrder = new SalesOrder();
  780. salesOrder.setSalesBatchId(salesBatchId);
  781. List<SalesOrder> salesOrderList = salesOrderMapper.listSalesOrder(salesOrder);
  782. if(salesOrderList == null || salesOrderList.size() < 1){
  783. throw new RuntimeException("查询订单失败!");
  784. }
  785. for (SalesOrder so:salesOrderList){
  786. flag = salesOrderService.confirmSalesOrder(so.getSalesId());
  787. }
  788. return flag;
  789. }
  790. @Override
  791. public Integer noticeDistribution(SalesOrder salesOrder) {
  792. // 检查订单是否已经有了配送方式,如果没有不允许通知配货
  793. SalesOrder temp = salesOrderMapper.getSalesOrderById(salesOrder.getSalesId());
  794. if (temp == null || temp.getSalesPostFirm() == null || temp.getSalesPostFirm().isEmpty()) {
  795. return 0;
  796. }
  797. return salesOrderMapper.noticeDistribution(salesOrder);
  798. }
  799. @Transactional
  800. @Override
  801. public Integer confirmSalesOrder(Integer saleId) {
  802. /*
  803. * 查询订单
  804. * 查询订单项
  805. * 删除订单
  806. * 修改查询的订单状态
  807. * 添加订单
  808. */
  809. if(saleId == null ){
  810. throw new RuntimeException("确认订单-订单id异常!");
  811. }
  812. SalesOrder salesOrder = salesOrderMapper.getSalesOrderById(saleId);
  813. if(salesOrder == null){
  814. throw new RuntimeException("确认订单-订单异常!");
  815. }
  816. Integer flag = 0;
  817. SalesOrderItem salesOrderItem = new SalesOrderItem();
  818. salesOrderItem.setItemOrderId(salesOrder.getSalesId());
  819. List<SalesOrderItem> salesOrderItemList = salesOrderMapper.listSalesOrderItem(salesOrderItem);
  820. if(salesOrderItemList == null || salesOrderItemList.size()<1){
  821. throw new RuntimeException("确认订单-查询订单项失败!");
  822. }
  823. salesOrder.setSalesOrderItemList(salesOrderItemList);
  824. flag = salesOrderMapper.delOrderById(salesOrder.getSalesId());
  825. if(flag < 1){
  826. throw new RuntimeException("确认订单-删除订单失败!");
  827. }
  828. flag = salesOrderMapper.delOrderItem(salesOrder.getSalesId());
  829. if(flag < 1){
  830. throw new RuntimeException("确认订单-删除订单项失败!");
  831. }
  832. //1:确认 状态
  833. salesOrder.setSalesStatus(1);
  834. boolean fl = salesOrderService.addRstOrderAndIteminfo(salesOrder);
  835. if(!fl){
  836. throw new RuntimeException("确认订单-添加订单失败!");
  837. }
  838. return flag;
  839. }
  840. @Override
  841. public Integer distributionExpress(SalesOrder salesOrder) {
  842. return salesOrderMapper.distributionExpress(salesOrder);
  843. }
  844. @Override
  845. public Integer listSalesPostFirm(SalesOrder salesOrder) {
  846. return salesOrderMapper.listSalesPostFirm(salesOrder);
  847. }
  848. @Override
  849. public SalesOrder getSalesOrderByPostNum(String postNum) {
  850. return salesOrderMapper.getSalesOrderByPostNum(postNum);
  851. }
  852. @Override
  853. public Integer updateDeliver(SalesOrder salesOrder) {
  854. return salesOrderMapper.updateDeliver(salesOrder);
  855. }
  856. }