CusWaybillServiceImpl.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  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.CcnetContants;
  5. import com.emato.ccnet.wx.contants.Contants;
  6. import com.emato.ccnet.wx.dao.entity.ccnet.*;
  7. import com.emato.ccnet.wx.dao.mapper.ccnet.*;
  8. import com.emato.ccnet.wx.manager.redis.jedis.cluster.mgt.JedisClusterManager;
  9. import com.emato.ccnet.wx.manager.snow.SnowflakeUtil;
  10. import com.emato.ccnet.wx.service.CusWaybillService;
  11. import com.emato.ccnet.wx.util.jackson.JacksonUtil;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Service;
  16. import java.util.*;
  17. @Service("cusWaybillService")
  18. public class CusWaybillServiceImpl implements CusWaybillService {
  19. @Autowired
  20. private CusWaybillMapper cusWaybillMapper;
  21. @Autowired
  22. private CusWaybillGoodsMapper cusWaybillGoodsMapper;
  23. @Autowired
  24. private CusWaybillStatusMapper cusWaybillStatusMapper;
  25. @Autowired
  26. private Merchant merchant;
  27. @Autowired
  28. private Cus cus;
  29. @Autowired
  30. private WxOrderMapper wxOrderMapper;
  31. @Autowired
  32. private WxOrderGoodsMapper wxOrderGoodsMapper;
  33. private static final Logger logger = LoggerFactory.getLogger(CusWaybillServiceImpl.class);
  34. @Override
  35. public CusWaybill add(CusWaybill record) {
  36. record.setCreateTime(new Date());
  37. if(this.cusWaybillMapper.insertSelective(record)==1) {
  38. return record;
  39. }
  40. return null;
  41. }
  42. @Override
  43. public boolean delete(String cusWaybillSn) {
  44. return this.cusWaybillMapper.deleteByPrimaryKey(cusWaybillSn)==1;
  45. }
  46. @Override
  47. public CusWaybill update(CusWaybill record) {
  48. if(this.cusWaybillMapper.updateByPrimaryKeySelective(record)==1) {
  49. return record;
  50. }
  51. return null;
  52. }
  53. @Override
  54. public CusWaybill get(String cusWaybillSn) {
  55. return this.cusWaybillMapper.selectByPrimaryKey(cusWaybillSn);
  56. }
  57. /**
  58. * 查询海关运单
  59. * @return
  60. */
  61. @Override
  62. public List<CusWaybill> findAllCusWaybill() {
  63. return cusWaybillMapper.findAllCusWaybill();
  64. }
  65. @Override
  66. public CusWaybill getCusWaybillByMerchOrderSn(String merchOrderSn) {
  67. return cusWaybillMapper.getCusWaybillByMerchOrderSn(merchOrderSn);
  68. }
  69. /**
  70. * 运单初始化
  71. * @param list
  72. * @return
  73. */
  74. @Override
  75. public int addCusWaybill(List list) {
  76. //海关运单集合
  77. List<CusWaybill> cusWaybills = new ArrayList<>();
  78. List<CusWaybill> upCusWaybills = new ArrayList<>();
  79. //海关运单状态表集合
  80. List<CusWaybillStatus> cusWaybillStatues = new ArrayList<>();
  81. List<CusWaybillStatus> upCusWaybillStatues = new ArrayList<>();
  82. //运单数据
  83. List<WxOrder> wayBillList = (List<WxOrder>) list;
  84. for(WxOrder wxOrder:wayBillList){
  85. CusWaybill waybill = cusWaybillMapper.findCusWaybillByOrderSn(wxOrder.getOrderSn());
  86. if (waybill != null) {
  87. List<CusWaybillGoods> cusWaybillGoodsList = cusWaybillGoodsMapper.findCusWaybillGoodsByCusWaybillSn(waybill.getCusWaybillSn());
  88. if (cusWaybillGoodsList != null && cusWaybillGoodsList.size() > 0) {
  89. if (cusWaybillGoodsMapper.deteleByCusWaybillSn(waybill.getCusWaybillSn()) < 0) {
  90. logger.error("批量删除电子订单商品表记录失败");
  91. return 0;
  92. }
  93. }
  94. CusWaybill cusWaybill = buildCusWaybill(wxOrder, waybill.getCusWaybillSn());
  95. if (cusWaybill == null) {
  96. return 0;
  97. }
  98. upCusWaybills.add(cusWaybill);
  99. //插入电子订单商品表
  100. if (buildCusWaybillGoods(wxOrder, waybill.getCusWaybillSn()) == 0) {
  101. return 0;
  102. }
  103. CusWaybillStatus cusWaybillStatus = cusWaybillStatusMapper.findCusWaybillStatusByCusWaybillSn(waybill.getCusWaybillSn());
  104. cusWaybillStatus = buildCusWaybillStatus(wxOrder, waybill.getCusWaybillSn(), cusWaybillStatus.getCusWaybillStatusSn());
  105. upCusWaybillStatues.add(cusWaybillStatus);
  106. } else {
  107. String cusWaybillSn = Contants.WMSH + SnowflakeUtil.getSnowNextId();
  108. String cusWaybillStatusSn = Contants.WMSH + SnowflakeUtil.getSnowNextId();
  109. //海关运单
  110. CusWaybill cusWaybill = buildCusWaybill(wxOrder,cusWaybillSn);
  111. if (cusWaybill == null) {
  112. return 0;
  113. }
  114. cusWaybills.add(cusWaybill);
  115. //海关运单商品
  116. if (buildCusWaybillGoods(wxOrder, cusWaybillSn) == 0) {
  117. return 0;
  118. }
  119. //海关运单状态
  120. CusWaybillStatus cusWaybillStatus = buildCusWaybillStatus(wxOrder, cusWaybillSn, cusWaybillStatusSn);
  121. if (cusWaybillStatus == null) {
  122. return 0;
  123. }
  124. cusWaybillStatues.add(cusWaybillStatus);
  125. }
  126. }
  127. //批量插入海关运单
  128. if(cusWaybills.size() > 0 && cusWaybillMapper.insertCusWaybillItemBatch(cusWaybills) <= 0){
  129. logger.error("批量插入,海关运单记录全部失败");
  130. return 0;
  131. }
  132. if(upCusWaybills.size() > 0 && cusWaybillMapper.updateCusWaybillItemBatch(upCusWaybills) <= 0){
  133. logger.error("批量更新,海关运单记录全部失败");
  134. return 0;
  135. }
  136. //批量插入海关运单状态
  137. if(cusWaybillStatues.size() > 0 && cusWaybillStatusMapper.insertCusWaybillStatusItemBatch(cusWaybillStatues) <= 0){
  138. logger.error("批量插入,海关运单状态记录全部失败");
  139. return 0;
  140. }
  141. if(upCusWaybillStatues.size() > 0 && cusWaybillStatusMapper.updateCusWaybillStatusItemBatch(upCusWaybillStatues) <= 0){
  142. logger.error("批量更新,海关运单状态记录全部失败");
  143. return 0;
  144. }
  145. return 1;
  146. }
  147. /**
  148. * 组装CusWaybillStatus
  149. * @param wxOrder
  150. * @param cusWaybillSn
  151. * @return
  152. */
  153. private CusWaybillStatus buildCusWaybillStatus(WxOrder wxOrder, String cusWaybillSn, String cusWaybillStatusSn) {
  154. try {
  155. CusWaybillStatus cusWaybillStatus = new CusWaybillStatus();
  156. cusWaybillStatus.setCusWaybillStatusSn(cusWaybillStatusSn);
  157. cusWaybillStatus.setCusWaybillSn(cusWaybillSn);
  158. cusWaybillStatus.setMerchOrderType(Contants.MERCH_WAY_TYPE);
  159. cusWaybillStatus.setMerchOrderSn(wxOrder.getOrderSn());
  160. cusWaybillStatus.setMerchSn(wxOrder.getMerchSn());
  161. cusWaybillStatus.setMerchName(wxOrder.getMerchName());
  162. cusWaybillStatus.setPlatSn(merchant.getPlatSn());
  163. cusWaybillStatus.setPlatName(merchant.getPlatName());
  164. cusWaybillStatus.setThirdPartyMerchCode(wxOrder.getThirdPartyMerchCode());
  165. cusWaybillStatus.setSendStatus(Contants.INIT_STATUS);
  166. cusWaybillStatus.setRespStatus(Contants.INIT_STATUS);
  167. cusWaybillStatus.setCreaterSn(Contants.CREATER_NUMBER);
  168. cusWaybillStatus.setCreateTime(new Date());
  169. return cusWaybillStatus;
  170. } catch (Exception e) {
  171. logger.error("初始化海关运单状态记录失败");
  172. e.printStackTrace();
  173. }
  174. return null;
  175. }
  176. /**
  177. * 组装CusWaybillGoods
  178. * @param wxOrder
  179. * @param cusWaybillSn
  180. * @return
  181. */
  182. private int buildCusWaybillGoods(WxOrder wxOrder, String cusWaybillSn) {
  183. List<WxOrderGoods> orderGoodsList = wxOrderGoodsMapper.getWxOrderGoodsByWxOrderId(wxOrder.getWxOrderId());
  184. if (orderGoodsList == null || orderGoodsList.size() <= 0){
  185. logger.error("订单详情为空!");
  186. return 0;
  187. }
  188. //海关运单商品集合
  189. List<CusWaybillGoods> cusWaybillGoodes = new ArrayList<>();
  190. for (WxOrderGoods wxOrderGoods:orderGoodsList) {
  191. CusWaybillGoods cusWaybillGoods = new CusWaybillGoods();
  192. String cusWaybillGoodsSn = Contants.WMSH + SnowflakeUtil.getSnowNextId();
  193. cusWaybillGoods.setCusWaybillGoodsSn(cusWaybillGoodsSn);
  194. cusWaybillGoods.setCusWaybillSn(cusWaybillSn);
  195. cusWaybillGoods.setMerchOrderSn(wxOrder.getOrderSn());
  196. cusWaybillGoods.setSku(wxOrderGoods.getItemNo());
  197. cusWaybillGoods.setBuyUnitPrice(wxOrderGoods.getTaxPrice());
  198. cusWaybillGoods.setBuyQty(wxOrderGoods.getQty());
  199. cusWaybillGoods.setCreaterSn(Contants.CREATER_NUMBER);
  200. cusWaybillGoods.setCreateTime(new Date());
  201. cusWaybillGoodes.add(cusWaybillGoods);
  202. }
  203. //批量插入海关运单商品
  204. if(cusWaybillGoodsMapper.insertCusWaybillGoodsItemBatch(cusWaybillGoodes) <= 0){
  205. logger.error("批量插入,海关运单商品记录全部失败");
  206. return 0;
  207. }
  208. return 1;
  209. }
  210. private boolean isMuniCipality(String cityName) {
  211. Map<String, String> muniMap = new HashMap<>();
  212. muniMap.put("北京市", "北京市");
  213. muniMap.put("天津市", "天津市");
  214. muniMap.put("重庆市", "重庆市");
  215. muniMap.put("上海市", "上海市");
  216. if (muniMap.containsKey(cityName)) {
  217. return true;
  218. }
  219. return false;
  220. }
  221. /**
  222. * 组装CusWaybill
  223. * @param wxOrder
  224. * @param cusWaybillSn
  225. * @return
  226. */
  227. private CusWaybill buildCusWaybill(WxOrder wxOrder, String cusWaybillSn) {
  228. try {
  229. CusWaybill cusWaybill = new CusWaybill();
  230. cusWaybill.setCusWaybillSn(cusWaybillSn);
  231. cusWaybill.setMerchOrderId(wxOrder.getOrderSn());
  232. cusWaybill.setMerchSn(wxOrder.getMerchSn());
  233. cusWaybill.setShopId(wxOrder.getShopId());
  234. cusWaybill.setMerchName(wxOrder.getMerchName());
  235. cusWaybill.setPlatSn(merchant.getPlatSn());
  236. cusWaybill.setPlatName(merchant.getPlatName());
  237. cusWaybill.setThirdPartyMerchCode(wxOrder.getThirdPartyMerchCode());
  238. cusWaybill.setThirdPartyMerchName(wxOrder.getThirdPartyMerchName());
  239. cusWaybill.setPlaceOrderlTime(wxOrder.getCreateTime());
  240. // 订购人
  241. cusWaybill.setBuyerName(wxOrder.getBuyerName());
  242. cusWaybill.setBuyerTel(wxOrder.getBuyerTel());
  243. cusWaybill.setBuyerIdType(Contants.ID_TYPE);
  244. cusWaybill.setBuyerIdCode(wxOrder.getBuyerIdCode());
  245. // 支付人
  246. cusWaybill.setPayerName(wxOrder.getPayerName());
  247. cusWaybill.setPayerIdCode(wxOrder.getPayerIdCode());
  248. cusWaybill.setPayerMob(wxOrder.getPayerMob());
  249. cusWaybill.setPayerIdType(Contants.ID_TYPE);
  250. // 收货人
  251. cusWaybill.setConsigneeIdType(Contants.ID_TYPE);
  252. cusWaybill.setConsigneeIdCode(wxOrder.getConsigneeIdCode());
  253. cusWaybill.setConsigneeName(wxOrder.getConsigneeName());
  254. cusWaybill.setConsigneeMob(wxOrder.getConsigneeMob());
  255. // 快递
  256. cusWaybill.setExprType(cus.getWaybill().get("exprType"));
  257. if (!CcnetContants.wsFlag.item_10.getItem().equals(wxOrder.getWsFlag())) {
  258. cusWaybill.setExprCompId(cus.getWaybill().get("exprComrId"));
  259. } else {
  260. cusWaybill.setExprCompId("emato");
  261. }
  262. // 发送ws路径标识
  263. cusWaybill.setWsFlag(wxOrder.getWsFlag());
  264. // 地址
  265. cusWaybill.setConsigneeCountryCode(wxOrder.getConsigneeCountryCode());
  266. cusWaybill.setConsigneeProvince(wxOrder.getConsigneeProvince());
  267. cusWaybill.setConsigneeProvinceCode(wxOrder.getConsigneeProvinceCode());
  268. cusWaybill.setConsigneeCity(wxOrder.getConsigneeCity());
  269. cusWaybill.setConsigneeCityCode(wxOrder.getConsigneeCityCode());
  270. cusWaybill.setConsigneeDistrict(wxOrder.getConsigneeDistrict());
  271. cusWaybill.setConsigneeDistrictCode(wxOrder.getConsigneeDistrictCode());
  272. cusWaybill.setConsigneeAddress(wxOrder.getConsigneeAddress());
  273. cusWaybill.setConsigneeZipCode(wxOrder.getConsigneeZipCode());
  274. if (wxOrder.getConsigneeZipCode() == null || wxOrder.getConsigneeZipCode() == "") {
  275. cusWaybill.setConsigneeZipCode("888888");
  276. }
  277. cusWaybill.setPayEntCusCode(merchant.getMerchantCustomsCode());
  278. cusWaybill.setPayNo(wxOrder.getPayNo());
  279. cusWaybill.setActuralPaid(wxOrder.getActuralPaid());
  280. cusWaybill.setPayTime(wxOrder.getPayTime());
  281. cusWaybill.setBuyerBillTime(wxOrder.getBuyerBillTime());
  282. cusWaybill.setBuyerPayCheck(wxOrder.getBuyerPayCheck());
  283. cusWaybill.setCreaterSn(Contants.CREATER_NUMBER);
  284. cusWaybill.setCreateTime(new Date());
  285. cusWaybill.setExField(wxOrder.getExField());
  286. return cusWaybill;
  287. } catch (Exception e) {
  288. logger.error("初始化海关运单记录失败");
  289. e.printStackTrace();
  290. }
  291. return null;
  292. }
  293. }