CusOrderServiceImpl.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. package com.emato.ccnet.wx.service.impl;
  2. import com.emato.ccnet.wx.config.Cus;
  3. import com.emato.ccnet.wx.config.Merchant;
  4. import com.emato.ccnet.wx.contants.Contants;
  5. import com.emato.ccnet.wx.dao.entity.ccnet.*;
  6. import com.emato.ccnet.wx.dao.entity.oms.MerchantPlatform;
  7. import com.emato.ccnet.wx.dao.mapper.ccnet.CusOrderGoodsMapper;
  8. import com.emato.ccnet.wx.dao.mapper.ccnet.CusOrderMapper;
  9. import com.emato.ccnet.wx.dao.mapper.ccnet.CusOrderStatusMapper;
  10. import com.emato.ccnet.wx.manager.snow.SnowflakeUtil;
  11. import com.emato.ccnet.wx.service.CusOrderService;
  12. import com.emato.ccnet.wx.service.OmsMerchantPlatformService;
  13. import com.emato.ccnet.wx.service.WxOrderGoodsService;
  14. import com.emato.ccnet.wx.util.DateUtil;
  15. import org.slf4j.Logger;
  16. import org.slf4j.LoggerFactory;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.stereotype.Service;
  19. import java.math.BigDecimal;
  20. import java.util.*;
  21. @Service("cusOrderService")
  22. public class CusOrderServiceImpl implements CusOrderService {
  23. @Autowired
  24. private CusOrderMapper cusOrderMapper;
  25. @Autowired
  26. private CusOrderGoodsMapper cusOrderGoodsMapper;
  27. @Autowired
  28. private CusOrderStatusMapper cusOrderStatusMapper;
  29. @Autowired
  30. private WxOrderGoodsService wxOrderGoodsService;
  31. @Autowired
  32. private Merchant merchant;
  33. @Autowired
  34. private Cus cus;
  35. @Autowired
  36. private OmsMerchantPlatformService omsMerchantPlatformService;
  37. private static final Logger logger = LoggerFactory.getLogger(CusOrderServiceImpl.class);
  38. @Override
  39. public CusOrder add(CusOrder record) {
  40. record.setCreateTime(new Date());
  41. if(this.cusOrderMapper.insertSelective(record)==1) {
  42. return record;
  43. }
  44. return null;
  45. }
  46. @Override
  47. public boolean delete(String cusOrderSn) {
  48. return this.cusOrderMapper.deleteByPrimaryKey(cusOrderSn)==1;
  49. }
  50. @Override
  51. public CusOrder update(CusOrder record) {
  52. if(this.cusOrderMapper.updateByPrimaryKeySelective(record)==1) {
  53. return record;
  54. }
  55. return null;
  56. }
  57. @Override
  58. public CusOrder get(String cusOrderSn) {
  59. return this.cusOrderMapper.selectByPrimaryKey(cusOrderSn);
  60. }
  61. /**
  62. * 生成报关流水号
  63. * @return
  64. */
  65. public static String getNormalOrderNo() {
  66. String orderNo = DateUtil.dateToString(new Date(),"yyyyMMddHHmmss");
  67. return orderNo;
  68. }
  69. /**
  70. * 电子订单初始化
  71. * @param list
  72. * @return
  73. */
  74. @Override
  75. public int addCusOrder(List list) {
  76. //电子订单总表集合
  77. List<CusOrder> CusOrders = new ArrayList<>();
  78. List<CusOrder> upCusOrders = new ArrayList<>();
  79. //电子订单状态表集合
  80. List<CusOrderStatus> CusOrderStatues = new ArrayList<>();
  81. List<CusOrderStatus> upCusOrderStatues = new ArrayList<>();
  82. //电子订单商品表
  83. List<CusOrderGoods> cusOrderGoodes = new ArrayList<>();
  84. List<WxOrder> orderBillList = (List<WxOrder>) list;
  85. for (WxOrder wxOrder : orderBillList) {
  86. CusOrder bill = cusOrderMapper.findCusOrderByOrderNo(wxOrder.getOrderSn());
  87. if (bill != null) {
  88. List<CusOrderGoods> cusOrderGoodsList = cusOrderGoodsMapper.findCusOrderGoodsByCusOrderSn(bill.getCusOrderSn());
  89. if (cusOrderGoodsList != null && cusOrderGoodsList.size() > 0) {
  90. if (cusOrderGoodsMapper.deteleByCusOrderSn(bill.getCusOrderSn()) < 0) {
  91. logger.error("批量删除电子订单商品表记录失败");
  92. return 0;
  93. }
  94. }
  95. //将订单商品表添加以及将商品价格提取
  96. List<WxOrderGoods> orderGoodsList = wxOrderGoodsService.getWxOrderGoodsByWxOrderId(wxOrder.getWxOrderId());
  97. if (orderGoodsList == null || orderGoodsList.size() <= 0){
  98. logger.error("订单详情为空!");
  99. return 0;
  100. }
  101. BigDecimal goodsValue = new BigDecimal(0);
  102. int i = 1;
  103. //电子订单商品表
  104. for (WxOrderGoods wxOrderGoods:orderGoodsList) {
  105. CusOrderGoods cusOrderGoods = buildCusOrderGoods(wxOrderGoods, bill.getCusOrderSn(), i);
  106. i++;
  107. goodsValue = goodsValue.add(cusOrderGoods.getTotalPrice());
  108. cusOrderGoodes.add(cusOrderGoods);
  109. }
  110. //电子订单表
  111. CusOrder cusOrder = buildCusOrder(wxOrder, bill.getCusOrderSn(), bill.getOrderSn(), goodsValue);
  112. if (cusOrder == null) {
  113. return 0;
  114. }
  115. upCusOrders.add(cusOrder);
  116. //电子订单发送状态
  117. CusOrderStatus cusOrderStatus = cusOrderStatusMapper.findCusOrderStatusByCusOrderSn(bill.getCusOrderSn());
  118. cusOrderStatus = buildCusOrderStatus(wxOrder, bill.getCusOrderSn(), bill.getOrderSn(), cusOrderStatus.getCusOrderStatusSn());
  119. upCusOrderStatues.add(cusOrderStatus);
  120. } else {
  121. String cusOrderSn = Contants.WMSH + SnowflakeUtil.getSnowNextId();
  122. String orderSn = Contants.WM + SnowflakeUtil.getSnowNextId();
  123. String cusOrderStatusSn = Contants.WMSH+ SnowflakeUtil.getSnowNextId();
  124. //将订单商品表添加以及将商品价格提取
  125. //将订单商品表添加以及将商品价格提取
  126. List<WxOrderGoods> orderGoodsList = wxOrderGoodsService.getWxOrderGoodsByWxOrderId(wxOrder.getWxOrderId());
  127. if (orderGoodsList == null || orderGoodsList.size() <= 0){
  128. logger.error("订单详情为空!");
  129. return 0;
  130. }
  131. BigDecimal goodsValue = new BigDecimal(0);
  132. int i = 1;
  133. //电子订单商品表
  134. for (WxOrderGoods wxOrderGoods:orderGoodsList) {
  135. CusOrderGoods cusOrderGoods = buildCusOrderGoods(wxOrderGoods, cusOrderSn, i);
  136. i++;
  137. goodsValue = goodsValue.add(cusOrderGoods.getTotalPrice());
  138. cusOrderGoodes.add(cusOrderGoods);
  139. }
  140. //电子订单表
  141. CusOrder cusOrder = buildCusOrder(wxOrder, cusOrderSn, orderSn, goodsValue);
  142. if (cusOrder == null) {
  143. return 0;
  144. }
  145. CusOrders.add(cusOrder);
  146. //电子订单发送状态
  147. CusOrderStatus cusOrderStatus = buildCusOrderStatus(wxOrder, cusOrderSn, orderSn, cusOrderStatusSn);
  148. if (cusOrderStatus == null) {
  149. return 0;
  150. }
  151. CusOrderStatues.add(cusOrderStatus);
  152. }
  153. }
  154. try {
  155. if (CusOrders.size() > 0 && cusOrderMapper.insertCusOrderItemBatch(CusOrders) <= 0) {
  156. logger.error("批量插入,电子订单表记录全部失败");
  157. return 0;
  158. }
  159. if (upCusOrders.size() > 0 && cusOrderMapper.updateCusOrderItemBatch(upCusOrders) <= 0) {
  160. logger.error("批量更新,电子订单表记录全部失败");
  161. return 0;
  162. }
  163. if(cusOrderGoodsMapper.insertCusOrderGoodsItemBatch(cusOrderGoodes) <= 0){
  164. logger.error("批量插入,电子订单商品表记录全部失败");
  165. return 0;
  166. }
  167. if(CusOrderStatues.size() > 0 && cusOrderStatusMapper.insertCusOrderStatusItemBatch(CusOrderStatues) <= 0){
  168. logger.error("批量插入,电子订单状态表记录全部失败");
  169. return 0;
  170. }
  171. if(upCusOrderStatues.size() > 0 && cusOrderStatusMapper.updateCusOrderStatusItemBatch(upCusOrderStatues) <= 0){
  172. logger.error("批量更新,电子订单状态表记录全部失败");
  173. return 0;
  174. }
  175. }catch (Exception e){
  176. e.printStackTrace();
  177. return 0;
  178. }
  179. return 1;
  180. }
  181. /**
  182. * 记录CusOrderStatus
  183. * @param wxOrder
  184. * @param cusOrderSn
  185. * @param orderSn
  186. * @return
  187. */
  188. private CusOrderStatus buildCusOrderStatus(WxOrder wxOrder, String cusOrderSn, String orderSn, String cusOrderStatusSn) {
  189. try {
  190. CusOrderStatus cusOrderStatus = new CusOrderStatus();
  191. cusOrderStatus.setCusOrderStatusSn(cusOrderStatusSn);
  192. cusOrderStatus.setCusOrderSn(cusOrderSn);
  193. cusOrderStatus.setOrderSn(orderSn);
  194. cusOrderStatus.setMerchOrderSn(wxOrder.getOrderSn());
  195. cusOrderStatus.setMerchSn(wxOrder.getMerchSn());
  196. cusOrderStatus.setMerchName(wxOrder.getMerchName());
  197. cusOrderStatus.setPlatSn(merchant.getPlatSn());
  198. cusOrderStatus.setPlatName(merchant.getPlatName());
  199. cusOrderStatus.setThirdPartyMerchCode(wxOrder.getThirdPartyMerchCode());
  200. // cusOrderStatus.setThirdPartyMerchName(orderBill.getSellerName());
  201. cusOrderStatus.setSendStatus(Contants.INIT_STATUS);
  202. cusOrderStatus.setPlatRespStatus(Contants.INIT_STATUS);
  203. cusOrderStatus.setCusRespStatus(Contants.INIT_STATUS);
  204. cusOrderStatus.setCipRespStatus(Contants.INIT_STATUS);
  205. return cusOrderStatus;
  206. } catch (Exception e) {
  207. logger.error("初始化电子订单状态表记录失败");
  208. }
  209. return null;
  210. }
  211. /**
  212. * 记录CusOrderGoods
  213. * @param wxOrderGoods
  214. * @param cusOrderSn
  215. * @return
  216. */
  217. private CusOrderGoods buildCusOrderGoods(WxOrderGoods wxOrderGoods, String cusOrderSn,int i) {
  218. CusOrderGoods cusOrderGoods = new CusOrderGoods();
  219. String cusOrderGoodsPaySn = Contants.WMSH+ SnowflakeUtil.getSnowNextId();
  220. cusOrderGoods.setCusOrderGoodsSn(cusOrderGoodsPaySn);
  221. cusOrderGoods.setCusOrderSn(cusOrderSn);
  222. cusOrderGoods.setGnum(i+"");
  223. cusOrderGoods.setItemNo(wxOrderGoods.getItemNo());
  224. cusOrderGoods.setItemName(wxOrderGoods.getItemName());
  225. // cusOrderGoods.setItemDescribe(wmOrderGoods.getContent());
  226. cusOrderGoods.setBarCode(wxOrderGoods.getBarCode());
  227. cusOrderGoods.setUnit(wxOrderGoods.getUnit());
  228. cusOrderGoods.setQty(wxOrderGoods.getQty());
  229. cusOrderGoods.setPrice(wxOrderGoods.getTaxPrice());
  230. cusOrderGoods.setTotalPrice(wxOrderGoods.getActuralPrice());
  231. cusOrderGoods.setCurrency(Contants.CURRENCY);
  232. cusOrderGoods.setCountry(wxOrderGoods.getCountry());
  233. cusOrderGoods.setCiqGno(wxOrderGoods.getCiqGno());
  234. cusOrderGoods.setGcode(wxOrderGoods.getGcode());
  235. cusOrderGoods.setGmodel(wxOrderGoods.getGmodel());
  236. cusOrderGoods.setCiqGmodel(wxOrderGoods.getCiqGmodel());
  237. cusOrderGoods.setBrand(wxOrderGoods.getBrand());
  238. cusOrderGoods.setCreaterSn(Contants.CREATER_NUMBER);
  239. cusOrderGoods.setCreateTime(new Date());
  240. return cusOrderGoods;
  241. }
  242. /**
  243. * 记录CusOrder
  244. * @param wxOrder
  245. * @param cusOrderSn
  246. * @param orderSn
  247. * @return
  248. */
  249. private CusOrder buildCusOrder(WxOrder wxOrder, String cusOrderSn, String orderSn,BigDecimal goodsValue) {
  250. try {
  251. CusOrder cusOrder = new CusOrder();
  252. cusOrder.setCusOrderSn(cusOrderSn);
  253. cusOrder.setOrderSn(orderSn);
  254. cusOrder.setMerchOrderSn(wxOrder.getOrderSn());
  255. cusOrder.setMerchSn(wxOrder.getMerchSn());
  256. cusOrder.setMerchName(wxOrder.getMerchName());
  257. cusOrder.setPlatSn(merchant.getPlatSn());
  258. cusOrder.setPlatName(merchant.getPlatName());
  259. cusOrder.setThirdPartyMerchCode(wxOrder.getThirdPartyMerchCode());
  260. cusOrder.setPlaceOrderlTime(wxOrder.getCreateTime());
  261. cusOrder.setAppType(Contants.APP_STATUS_DECLARE);
  262. cusOrder.setAppStatus(Contants.APP_STATUS_SEPARETE);
  263. cusOrder.setAppTime(getNormalOrderNo());
  264. cusOrder.setOrderNo(wxOrder.getOrderSn());
  265. cusOrder.setOrderType(Contants.ORDER_TYPE);
  266. cusOrder.setCurrency(Contants.CURRENCY);
  267. MerchantPlatform merchantPlatform = omsMerchantPlatformService.getPlatformByMerchSn(wxOrder.getMerchSn());
  268. if(merchantPlatform == null){
  269. logger.error("初始化电子订单表记录失败: 商户平台信息为空!");
  270. return null;
  271. }
  272. // cusOrder.setEbpCode(merchant.getMerchantCustomsCode());//电商平台代码
  273. // cusOrder.setEbpName(merchant.getMerchantCustomsName());//电商平台企业名称
  274. // cusOrder.setEbcCode(merchant.getMerchantCustomsCode());//电商商户代码
  275. // cusOrder.setEbcName(merchant.getMerchantCustomsName());//电商商户名称
  276. cusOrder.setEbpCode(merchantPlatform.getPlatCusCode());//电商平台代码
  277. cusOrder.setEbpName(merchantPlatform.getPlatCusName());//电商平台企业名称
  278. cusOrder.setEbcCode(merchantPlatform.getPlatCusCode());//电商商户代码
  279. cusOrder.setEbcName(merchantPlatform.getPlatCusName());//电商商户名称
  280. cusOrder.setGoodsValue(goodsValue);
  281. BigDecimal taxTotal = new BigDecimal(0);
  282. BigDecimal paid = wxOrder.getActuralPaid();//订单下单总价格
  283. if(paid != null){
  284. taxTotal = paid.subtract(goodsValue).setScale(2, BigDecimal.ROUND_HALF_UP);
  285. }
  286. cusOrder.setTaxTotal(taxTotal);//待扣税款
  287. cusOrder.setFreight(wxOrder.getFreight());
  288. cusOrder.setDiscount(wxOrder.getDiscount());
  289. cusOrder.setActuralPaid(paid);
  290. Map<String, Object> wxMap = (Map) cus.getPlay().get("wx");
  291. cusOrder.setBuyerName(wxOrder.getBuyerName());
  292. cusOrder.setBuyerIdType(Contants.ID_TYPE);
  293. cusOrder.setBuyerTelephone(wxOrder.getBuyerTel());
  294. cusOrder.setBuyeridNumber(wxOrder.getBuyerIdCode());
  295. cusOrder.setPayCode(wxMap.get("pay-code").toString());
  296. cusOrder.setPayName(wxMap.get("pay-name").toString());
  297. cusOrder.setPayTransactionId(wxOrder.getPayNo());
  298. cusOrder.setConsignee(wxOrder.getConsigneeName());
  299. cusOrder.setConsigneeTelephone(wxOrder.getConsigneeMob());
  300. cusOrder.setConsigneeAddress(wxOrder.getConsigneeAddress());
  301. cusOrder.setBuyerRegNo(wxOrder.getBuyerRegNo());
  302. cusOrder.setCreateTime(new Date());
  303. return cusOrder;
  304. } catch (Exception e) {
  305. logger.error("初始化电子订单表记录失败");
  306. }
  307. return null;
  308. }
  309. /**
  310. * 查找当前ccnet中的所有电子订单
  311. * @return
  312. */
  313. @Override
  314. public List<CusOrder> findAllCusOrder() {
  315. return cusOrderMapper.findAllCusOrder();
  316. }
  317. }