1
0

CusOrderImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. package com.emato.ccnet.service.ccent.impl;
  2. import com.emato.ccnet.config.Merchant;
  3. import com.emato.ccnet.contants.Contants;
  4. import com.emato.ccnet.domain.ccnet.CusOrder;
  5. import com.emato.ccnet.domain.ccnet.CusOrderGoods;
  6. import com.emato.ccnet.domain.ccnet.CusOrderStatus;
  7. import com.emato.ccnet.domain.kmall.OrderBill;
  8. import com.emato.ccnet.domain.kmall.OrderGoods;
  9. import com.emato.ccnet.mapper.ccnet.CusOrderGoodsMapper;
  10. import com.emato.ccnet.mapper.ccnet.CusOrderMapper;
  11. import com.emato.ccnet.mapper.ccnet.CusOrderStatusMapper;
  12. import com.emato.ccnet.mapper.kmall.KmallOrderMapper;
  13. import com.emato.ccnet.redis.jedis.cluster.mgt.JedisClusterManager;
  14. import com.emato.ccnet.service.ccent.CusOrderService;
  15. import com.emato.ccnet.snow.SnowflakeUtil;
  16. import com.emato.ccnet.util.DateUtil;
  17. import com.emato.ccnet.util.JacksonUtil;
  18. import org.slf4j.Logger;
  19. import org.slf4j.LoggerFactory;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.stereotype.Service;
  22. import org.springframework.util.StringUtils;
  23. import java.math.BigDecimal;
  24. import java.util.*;
  25. @Service
  26. public class CusOrderImpl implements CusOrderService{
  27. private static final Logger logger = LoggerFactory.getLogger(CusPaymentCollectImpl.class);
  28. @Autowired
  29. private Merchant merchant;
  30. @Autowired
  31. private CusOrderMapper cusOrderMapper;
  32. @Autowired
  33. private CusOrderGoodsMapper cusOrderGoodsMapper;
  34. @Autowired
  35. private CusOrderStatusMapper cusOrderStatusMapper;
  36. @Autowired
  37. private KmallOrderMapper kmallOrderMapper;
  38. /**
  39. * 生成报关流水号
  40. * @return
  41. */
  42. public static String getNormalOrderNo() {
  43. String orderNo = DateUtil.dateToString(new Date(),"yyyyMMddHHmmss");
  44. return orderNo;
  45. }
  46. /**
  47. * 电子订单初始化
  48. * @param list
  49. * @return
  50. */
  51. @Override
  52. public int addCusOrder(List list) {
  53. //电子订单总表集合
  54. List<CusOrder> CusOrders = new ArrayList<>();
  55. //电子订单状态表集合
  56. List<CusOrderStatus> CusOrderStatues = new ArrayList<>();
  57. //支付单数据
  58. List<OrderBill> orderBillList = (List<OrderBill>) list;
  59. List<String> orderList = new ArrayList<>();
  60. for (OrderBill orderBill : orderBillList) {
  61. CusOrder bill = cusOrderMapper.findCusOrderByOrderNo(orderBill.getOrderNo());
  62. String cusOrderSn = Contants.ZWSH + SnowflakeUtil.getSnowNextId();
  63. String orderSn = Contants.ZW +SnowflakeUtil.getSnowNextId();
  64. //电子订单表
  65. CusOrder cusOrder = buildCusOrder(orderBill,cusOrderSn,orderSn);
  66. CusOrders.add(cusOrder);
  67. //插入电子订单商品表
  68. buildCusOrderGoods(orderBill,cusOrderSn);
  69. //电子订单发送状态
  70. CusOrderStatus cusOrderStatus = buildCusOrderStatus(orderBill,cusOrderSn,orderSn);
  71. CusOrderStatues.add(cusOrderStatus);
  72. }
  73. if (cusOrderMapper.insertCusOrderItemBatch(CusOrders) <= 0) {
  74. logger.error("批量插入,电子订单表记录全部失败");
  75. return 0;
  76. }
  77. if(cusOrderStatusMapper.insertCusOrderStatusItemBatch(CusOrderStatues) <= 0){
  78. logger.error("批量插入,电子订单状态表记录全部失败");
  79. return 0;
  80. }
  81. return 1;
  82. }
  83. /**
  84. * 记录CusOrderStatus
  85. * @param orderBill
  86. * @param cusOrderSn
  87. * @param orderSn
  88. * @return
  89. */
  90. private CusOrderStatus buildCusOrderStatus(OrderBill orderBill, String cusOrderSn, String orderSn) {
  91. CusOrderStatus cusOrderStatus = new CusOrderStatus();
  92. String cusOrderStatusPaySn = Contants.ZWSH+ SnowflakeUtil.getSnowNextId();
  93. cusOrderStatus.setCusOrderStatusSn(cusOrderStatusPaySn);
  94. cusOrderStatus.setCusOrderSn(cusOrderSn);
  95. cusOrderStatus.setOrderSn(orderSn);
  96. cusOrderStatus.setMerchOrderSn(orderBill.getOrderNo());
  97. cusOrderStatus.setMerchSn(merchant.getMerchSn());
  98. cusOrderStatus.setMerchName(merchant.getMerchName());
  99. cusOrderStatus.setPlatSn(merchant.getPlatSn());
  100. cusOrderStatus.setPlatName(merchant.getPlatName());
  101. cusOrderStatus.setThirdPartyMerchCode(orderBill.getSellerId());
  102. cusOrderStatus.setThirdPartyMerchName(orderBill.getSellerName());
  103. cusOrderStatus.setSendStatus(Contants.INIT_STATUS);
  104. cusOrderStatus.setPlatRespStatus(Contants.INIT_STATUS);
  105. cusOrderStatus.setCusRespStatus(Contants.INIT_STATUS);
  106. cusOrderStatus.setCipRespStatus(Contants.INIT_STATUS);
  107. return cusOrderStatus;
  108. }
  109. /**
  110. * 记录CusOrderGoods
  111. * @param orderBill
  112. * @param cusOrderSn
  113. * @return
  114. */
  115. private void buildCusOrderGoods(OrderBill orderBill, String cusOrderSn) {
  116. Map<String, Object> resultMap = new HashMap<>();
  117. List<OrderGoods> orderGoodsList = kmallOrderMapper.getOrderGoods(orderBill.getOrderNo());
  118. if (orderGoodsList == null || orderGoodsList.size() <= 0){
  119. logger.error("电子订单为空!");
  120. return;
  121. }
  122. List<CusOrderGoods> CusOrderGoodes = new ArrayList<>();
  123. int i = 1;
  124. for (OrderGoods orderGoods:orderGoodsList){
  125. CusOrderGoods cusOrderGoods = new CusOrderGoods();
  126. try {
  127. //获取缓存中的产品备案数据
  128. final String resultJson = JedisClusterManager.jedisClusterInstance().get(Contants.PD_PRODUCT_RECORD);
  129. resultMap = JacksonUtil.fromStringJson(resultJson, resultMap.getClass());
  130. } catch (Exception e) {
  131. logger.error("获取系统模块中缓存的产品备案数据集异常!");
  132. return;
  133. }
  134. String sku = orderGoods.getGoodsNo();
  135. Map<String, Object> productRecordMap = (Map) resultMap.get(sku);
  136. if(productRecordMap == null){
  137. logger.error("sku不存在异常");
  138. }
  139. String cusOrderGoodsPaySn = Contants.ZWSH+ SnowflakeUtil.getSnowNextId();
  140. cusOrderGoods.setCusOrderGoodsSn(cusOrderGoodsPaySn);
  141. cusOrderGoods.setCusOrderSn(cusOrderSn);
  142. cusOrderGoods.setGnum(i+"");
  143. cusOrderGoods.setItemNo(orderGoods.getGoodsNo());
  144. cusOrderGoods.setItemName(orderGoods.getName());
  145. cusOrderGoods.setItemDescribe(orderGoods.getContent());
  146. cusOrderGoods.setBarCode((String)productRecordMap.get("prodBarcode"));
  147. cusOrderGoods.setUnit((String)productRecordMap.get("unitCode"));
  148. cusOrderGoods.setQty(orderGoods.getGoodsNums());
  149. cusOrderGoods.setPrice(orderGoods.getSellPrice());
  150. cusOrderGoods.setTotalPrice(orderGoods.getSellTotalPice());
  151. cusOrderGoods.setCurrency(Contants.CURRENCY);
  152. cusOrderGoods.setCountry((String)productRecordMap.get("oriCntCode"));
  153. cusOrderGoods.setCiqGno((String)productRecordMap.get("cusRecCode"));
  154. cusOrderGoods.setGcode((String) productRecordMap.get("cusGoodsCode"));
  155. cusOrderGoods.setGmodel((String) productRecordMap.get("cusDeclEle"));
  156. cusOrderGoods.setCiqGmodel((String)productRecordMap.get("ciqProdModel"));
  157. cusOrderGoods.setBrand((String)productRecordMap.get("prodBrand"));
  158. cusOrderGoods.setCreaterSn(Contants.CREATER_NUMBER);
  159. cusOrderGoods.setCreateTime(new Date());
  160. CusOrderGoodes.add(cusOrderGoods);
  161. ++ i;
  162. }
  163. if(cusOrderGoodsMapper.insertCusOrderGoodsItemBatch(CusOrderGoodes) <= 0){
  164. logger.error("批量插入,电子订单商品表记录全部失败");
  165. return;
  166. }
  167. }
  168. /**
  169. * 记录CusOrder
  170. * @param orderBill
  171. * @param cusOrderSn
  172. * @param orderSn
  173. * @return
  174. */
  175. private CusOrder buildCusOrder(OrderBill orderBill, String cusOrderSn, String orderSn) {
  176. CusOrder cusOrder = new CusOrder();
  177. cusOrder.setCusOrderSn(cusOrderSn);
  178. cusOrder.setOrderSn(orderSn);
  179. cusOrder.setMerchOrderSn(orderBill.getOrderNo());
  180. cusOrder.setMerchSn(merchant.getMerchSn());
  181. cusOrder.setMerchName(merchant.getMerchName());
  182. cusOrder.setPlatSn(merchant.getPlatSn());
  183. cusOrder.setPlatName(merchant.getPlatName());
  184. cusOrder.setThirdPartyMerchCode(orderBill.getSellerId());
  185. cusOrder.setThirdPartyMerchName(orderBill.getSellerName());
  186. cusOrder.setPlaceOrderlTime(orderBill.getCreateTime());
  187. cusOrder.setAppType(Contants.APP_STATUS_DECLARE);
  188. cusOrder.setAppStatus(Contants.APP_STATUS_SEPARETE);
  189. cusOrder.setAppTime(getNormalOrderNo());
  190. cusOrder.setOrderNo(orderBill.getOrderNo());
  191. cusOrder.setEbpCode(merchant.getMerchantCustomsCode());//电商平台代码
  192. cusOrder.setEbpName(merchant.getMerchantCustomsName());//电商平台企业名称
  193. cusOrder.setEbcCode(merchant.getMerchantCustomsCode());//电商商户代码
  194. cusOrder.setEbcName(merchant.getMerchantCustomsName());//电商商户名称
  195. BigDecimal goodsValue = orderBill.getCostPrice();
  196. cusOrder.setGoodsValue(goodsValue);//成本价格
  197. BigDecimal taxTotal = new BigDecimal(0);
  198. BigDecimal freight = new BigDecimal(0);
  199. BigDecimal discount = new BigDecimal(0);
  200. BigDecimal paid = orderBill.getRealAmount();//订单下单总价格
  201. if(paid != null){
  202. taxTotal = paid.subtract(goodsValue).setScale(2, BigDecimal.ROUND_HALF_UP);
  203. }
  204. //实际支付金额 = 成本价格+运杂费+代扣税款-非现金支付金额
  205. BigDecimal totalPaid =goodsValue.add(freight).add(taxTotal).subtract(discount).setScale(2, BigDecimal.ROUND_HALF_UP);
  206. cusOrder.setTaxTotal(taxTotal);//待扣税款
  207. cusOrder.setFreight(freight);
  208. cusOrder.setDiscount(discount);
  209. cusOrder.setActuralPaid(totalPaid);
  210. cusOrder.setbuyerIdNumber(orderBill.getUserId());
  211. cusOrder.setBuyerName(orderBill.getTrueName());
  212. cusOrder.setBuyerIdType(orderBill.getIdType());
  213. cusOrder.setbuyerIdNumber(orderBill.getIdCode());
  214. // cusOrder.setPayCode(merchant.getMerchantCustomsCode());
  215. // cusOrder.setPayName(merchant.getMerchantCustomsName());
  216. // cusOrder.setPayTransactionId(orderBill.getTradeNo());
  217. cusOrder.setConsignee(orderBill.getAcceptName());
  218. cusOrder.setConsigneeTelephone(orderBill.getMobile());
  219. cusOrder.setConsigneeAddress(orderBill.getAddress());
  220. cusOrder.setBuyerRegNo(orderBill.getUserId());
  221. return cusOrder;
  222. }
  223. /**
  224. * 查找当前ccnet中的所有电子订单
  225. * @return
  226. */
  227. @Override
  228. public List<CusOrder> findAllCusOrder() {
  229. return cusOrderMapper.findAllCusOrder();
  230. }
  231. /**
  232. * 通过订单号查找电子订单表
  233. * @param orderSn
  234. * @return
  235. */
  236. @Override
  237. public CusOrder findCusOrder(String orderSn) {
  238. return cusOrderMapper.findCusOrderByOrderNo(orderSn);
  239. }
  240. /**
  241. * 更新电子订单表
  242. * @param cusOrder
  243. * @return
  244. */
  245. @Override
  246. public int updateCusOrder(CusOrder cusOrder) {
  247. return cusOrderMapper.updateCusOrder(cusOrder);
  248. }
  249. }