CusWaybillServiceImpl.java 14 KB

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