WxOrderServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  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.WxOrder;
  7. import com.emato.ccnet.wx.dao.entity.oms.MerchantPlatform;
  8. import com.emato.ccnet.wx.dao.entity.wx.WxOrderDate;
  9. import com.emato.ccnet.wx.dao.mapper.ccnet.WxOrderMapper;
  10. import com.emato.ccnet.wx.manager.redis.jedis.cluster.mgt.JedisClusterManager;
  11. import com.emato.ccnet.wx.manager.snow.SnowflakeUtil;
  12. import com.emato.ccnet.wx.service.OmsMerchantPlatformService;
  13. import com.emato.ccnet.wx.service.WxOrderService;
  14. import com.emato.ccnet.wx.util.jackson.JacksonUtil;
  15. import org.apache.commons.beanutils.BeanUtils;
  16. import org.apache.commons.lang3.StringUtils;
  17. import org.slf4j.Logger;
  18. import org.slf4j.LoggerFactory;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.stereotype.Service;
  21. import java.lang.reflect.InvocationTargetException;
  22. import java.math.BigDecimal;
  23. import java.util.*;
  24. @Service("wxOrderService")
  25. public class WxOrderServiceImpl implements WxOrderService {
  26. @Autowired
  27. private WxOrderMapper wxOrderMapper;
  28. @Autowired
  29. private Merchant merchant;
  30. @Autowired
  31. private Cus cus;
  32. @Autowired
  33. private OmsMerchantPlatformService omsMerchantPlatformService;
  34. private static final Logger logger = LoggerFactory.getLogger(WxOrderServiceImpl.class);
  35. @Override
  36. public WxOrder add(WxOrder record) {
  37. record.setCreateTime(new Date());
  38. if(this.wxOrderMapper.insertSelective(record)==1) {
  39. return record;
  40. }
  41. return null;
  42. }
  43. @Override
  44. public boolean delete(String wxOrderSn) {
  45. return this.wxOrderMapper.deleteByPrimaryKey(wxOrderSn)==1;
  46. }
  47. @Override
  48. public WxOrder update(WxOrder record) {
  49. if(this.wxOrderMapper.updateByPrimaryKeySelective(record)==1) {
  50. return record;
  51. }
  52. return null;
  53. }
  54. @Override
  55. public WxOrder get(String wxOrderSn) {
  56. return this.wxOrderMapper.selectByPrimaryKey(wxOrderSn);
  57. }
  58. @Override
  59. public int addWxOrderList(List list) {
  60. //本地微信订单集合新增
  61. List<WxOrder> insertWxOrderList = new ArrayList<>();
  62. //本地微信数据更新
  63. List<WxOrder> updateWxOrderList = new ArrayList<>();
  64. //微信订单数据
  65. List<WxOrderDate> wxOrderDateList = (List<WxOrderDate>) list;
  66. for(WxOrderDate wxOrderDate:wxOrderDateList){
  67. WxOrder wxOrder = wxOrderMapper.getWxOrderByWxOrderId(wxOrderDate.getWxOrderId());
  68. if (wxOrder != null) {
  69. wxOrder = assembleWxOrder(wxOrder,wxOrderDate);
  70. updateWxOrderList.add(wxOrder);
  71. } else {
  72. wxOrder = new WxOrder();
  73. String wxOrderSn = Contants.WX + SnowflakeUtil.getSnowNextId();;
  74. wxOrder.setWxOrderSn(wxOrderSn);
  75. wxOrder = assembleWxOrder(wxOrder,wxOrderDate);
  76. insertWxOrderList.add(wxOrder);
  77. }
  78. }
  79. //批量微信订单数据
  80. if(insertWxOrderList.size() > 0 && wxOrderMapper.insertWxOrderBatch(insertWxOrderList) <= 0){
  81. logger.error("批量插入,海关运单记录全部失败");
  82. return 0;
  83. }
  84. //批量更新订单数据
  85. if(updateWxOrderList.size() > 0 && wxOrderMapper.updateWxOrderBatch(updateWxOrderList) <= 0){
  86. logger.error("批量更新,海关运单记录全部失败");
  87. return 0;
  88. }
  89. return 1;
  90. }
  91. /**
  92. * 组装wxOrder数据
  93. * @param wxOrder
  94. * @return
  95. */
  96. private WxOrder assembleWxOrder(WxOrder wxOrder, WxOrderDate wxOrderDate) {
  97. Map<String, Object> resultMap = new HashMap<>();
  98. try {
  99. BeanUtils.copyProperties(wxOrder, wxOrderDate);
  100. //获取缓存中的产品备案数据
  101. final String resultJson = JedisClusterManager.jedisClusterInstance().get(Contants.SYS_ADMIN_DIVI_GOV);
  102. resultMap = JacksonUtil.fromStringJson(resultJson, resultMap.getClass());
  103. } catch (IllegalAccessException e) {
  104. e.printStackTrace();
  105. } catch (InvocationTargetException e) {
  106. e.printStackTrace();
  107. }catch (Exception e) {
  108. logger.error("获取系统模块中缓存的统一行政区数据集异常!");
  109. e.printStackTrace();
  110. return null;
  111. }
  112. wxOrder.setPlatSn(merchant.getPlatSn());
  113. wxOrder.setPlatName(merchant.getPlatName());
  114. wxOrder.setBuyerIdType(Contants.ID_TYPE);
  115. wxOrder.setConsigneeIdType(Contants.ID_TYPE);
  116. wxOrder.setConsigneeMob(wxOrderDate.getConsigneeMob());
  117. wxOrder.setConsigneeTel(wxOrderDate.getConsigneeMob());
  118. wxOrder.setConsigneeCountryCode(Contants.CURRENCY);
  119. // 获取省级名称
  120. String provinceName = null;
  121. // 判断是否为直辖市
  122. if (isMuniCipality(wxOrderDate.getConsigneeCity())) {
  123. provinceName = wxOrderDate.getConsigneeCity();
  124. } else {
  125. provinceName = wxOrderDate.getConsigneeProvince();
  126. }
  127. final String provinceKey = provinceName;
  128. resultMap.forEach((k,v) -> {
  129. if (k.equals(provinceKey)) {
  130. Map<String, Object> divi = (Map) v;
  131. // 省级
  132. wxOrder.setConsigneeProvinceCode(divi.get("diviCode").toString());
  133. ((Map) divi.get("item")).forEach((x,y) -> {
  134. Map<String, Object> itemDivi = (Map) y;
  135. if (x.equals(wxOrderDate.getConsigneeCity())) {
  136. // 市级
  137. wxOrder.setConsigneeCityCode(itemDivi.get("diviCode").toString());
  138. ((Map) itemDivi.get("item")).forEach((a,b) -> {
  139. if (a.equals(wxOrderDate.getConsigneeDistrict())) {
  140. // 区县
  141. wxOrder.setConsigneeDistrictCode(((Map)b).get("diviCode").toString());
  142. return;
  143. }
  144. });
  145. // 如果缓存中不存在此区县,默认给定该市下的任一区县
  146. if (!StringUtils.isNotBlank(wxOrder.getConsigneeDistrict()) || !StringUtils.isNotBlank(wxOrder.getConsigneeDistrictCode())) {
  147. ((Map) itemDivi.get("item")).forEach((a,b) -> {
  148. wxOrder.setConsigneeDistrict(((Map)b).get("diviName").toString());
  149. wxOrder.setConsigneeDistrictCode(((Map)b).get("diviCode").toString());
  150. return;
  151. });
  152. }
  153. if(StringUtils.isEmpty(wxOrder.getConsigneeDistrictCode())){//如为空则设置为市区
  154. wxOrder.setConsigneeDistrictCode(itemDivi.get("diviCode").toString());
  155. }
  156. if(StringUtils.isEmpty(wxOrder.getConsigneeDistrict())){//如为空则设置为市区
  157. wxOrder.setConsigneeAddress(wxOrder.getConsigneeDistrict()+wxOrder.getConsigneeAddress());
  158. wxOrder.setConsigneeDistrict(wxOrder.getConsigneeCity());
  159. }
  160. return;
  161. }
  162. });
  163. return;
  164. }
  165. });
  166. //wxOrder.setConsigneeCountryCode();
  167. wxOrder.setConsigneeZipCode("888888");
  168. wxOrder.setCurrencyCode(Contants.CURRENCY);
  169. wxOrder.setPayerIdType(Contants.ID_TYPE);
  170. MerchantPlatform merchantPlatform = omsMerchantPlatformService.getPlatformByMerchSn(wxOrder.getMerchSn());
  171. if(merchantPlatform == null){
  172. logger.error("初始化电子订单表记录失败: 商户平台信息为空!");
  173. return null;
  174. }
  175. wxOrder.setPayEntCusCode(merchantPlatform.getPlatCusCode());
  176. BigDecimal freight = new BigDecimal(0);
  177. BigDecimal discount = new BigDecimal(0);
  178. //优惠券优惠金额
  179. if(wxOrderDate.getCouponPrice() != null && wxOrderDate.getCouponPrice().compareTo(new BigDecimal(0)) != 0) {
  180. discount = wxOrderDate.getCouponPrice();
  181. }
  182. //满减优惠金额
  183. if(wxOrderDate.getFullCutPrice() != null && wxOrderDate.getFullCutPrice().compareTo(new BigDecimal(0)) != 0) {
  184. discount = wxOrderDate.getFullCutPrice();
  185. }
  186. wxOrder.setFreight(freight);
  187. wxOrder.setDiscount(discount);
  188. wxOrder.setActuralPaid(wxOrderDate.getActuralPaid());
  189. wxOrder.setExprType(cus.getWaybill().get("exprType"));
  190. if (!CcnetContants.wsFlag.item_10.getItem().equals(wxOrderDate.getWsFlag())) {
  191. wxOrder.setExprCompId(cus.getWaybill().get("exprComrId"));
  192. } else {
  193. wxOrder.setExprCompId("emato");
  194. }
  195. //wxOrder.setDeclExprFee();
  196. //wxOrder.setBatchNumbers();
  197. //wxOrder.setDeclPostTax();
  198. //wxOrder.setExtraTag();
  199. //wxOrder.setCurrencyCode();
  200. wxOrder.setWxOrderDetail(CcnetContants.isscan.item_0.getItem());
  201. wxOrder.setClecOrderStatus(CcnetContants.sendStatus.item_0.getItem());
  202. wxOrder.setWayOrderStatus(CcnetContants.sendStatus.item_0.getItem());
  203. wxOrder.setProjectCheckStatus(CcnetContants.sendStatus.item_0.getItem());
  204. wxOrder.setPlayOrderStatus(CcnetContants.sendStatus.item_0.getItem());
  205. wxOrder.setCreateTime(new Date());
  206. wxOrder.setExprAgreementType(wxOrderDate.getExprAgreementType());//第三方商户快递协议类型
  207. return wxOrder;
  208. }
  209. private boolean isMuniCipality(String cityName) {
  210. Map<String, String> muniMap = new HashMap<>();
  211. muniMap.put("北京市", "北京市");
  212. muniMap.put("天津市", "天津市");
  213. muniMap.put("重庆市", "重庆市");
  214. muniMap.put("上海市", "上海市");
  215. if (muniMap.containsKey(cityName)) {
  216. return true;
  217. }
  218. return false;
  219. }
  220. @Override
  221. public List<WxOrder> getWxOrder(Map<String, Object> param) {
  222. return wxOrderMapper.getWxOrder(param);
  223. }
  224. @Override
  225. public int updateWxOrderStatusBatch(List<Map<String, Object>> wxOrderStatus) {
  226. return wxOrderMapper.updateWxOrderStatusBatch(wxOrderStatus);
  227. }
  228. @Override
  229. public WxOrder getWxOrderByWxOrderId(String orderSn) {
  230. return wxOrderMapper.getWxOrderByWxOrderId(orderSn);
  231. }
  232. @Override
  233. public int updateWxOrderStatus(Map<String, Object> wxMap) {
  234. return wxOrderMapper.updateWxOrderStatus(wxMap);
  235. }
  236. @Override
  237. public WxOrder getWxOrderByOrderSn(String merchOrderId) {
  238. return wxOrderMapper.getWxOrderByOrderSn(merchOrderId);
  239. }
  240. }