SalesOrderServiceImpl.java 42 KB

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