package com.emato.ccnet.wx.service.impl; import com.emato.ccnet.wx.config.Cus; import com.emato.ccnet.wx.config.Merchant; import com.emato.ccnet.wx.contants.CcnetContants; import com.emato.ccnet.wx.contants.Contants; import com.emato.ccnet.wx.dao.entity.ccnet.WxOrder; import com.emato.ccnet.wx.dao.entity.oms.MerchantPlatform; import com.emato.ccnet.wx.dao.entity.wx.WxOrderDate; import com.emato.ccnet.wx.dao.mapper.ccnet.WxOrderMapper; import com.emato.ccnet.wx.manager.redis.jedis.cluster.mgt.JedisClusterManager; import com.emato.ccnet.wx.manager.snow.SnowflakeUtil; import com.emato.ccnet.wx.service.OmsMerchantPlatformService; import com.emato.ccnet.wx.service.WxOrderService; import com.emato.ccnet.wx.util.jackson.JacksonUtil; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.lang.reflect.InvocationTargetException; import java.math.BigDecimal; import java.util.*; @Service("wxOrderService") public class WxOrderServiceImpl implements WxOrderService { @Autowired private WxOrderMapper wxOrderMapper; @Autowired private Merchant merchant; @Autowired private Cus cus; @Autowired private OmsMerchantPlatformService omsMerchantPlatformService; private static final Logger logger = LoggerFactory.getLogger(WxOrderServiceImpl.class); @Override public WxOrder add(WxOrder record) { record.setCreateTime(new Date()); if(this.wxOrderMapper.insertSelective(record)==1) { return record; } return null; } @Override public boolean delete(String wxOrderSn) { return this.wxOrderMapper.deleteByPrimaryKey(wxOrderSn)==1; } @Override public WxOrder update(WxOrder record) { if(this.wxOrderMapper.updateByPrimaryKeySelective(record)==1) { return record; } return null; } @Override public WxOrder get(String wxOrderSn) { return this.wxOrderMapper.selectByPrimaryKey(wxOrderSn); } @Override public int addWxOrderList(List list) { //本地微信订单集合新增 List insertWxOrderList = new ArrayList<>(); //本地微信数据更新 List updateWxOrderList = new ArrayList<>(); //微信订单数据 List wxOrderDateList = (List) list; for(WxOrderDate wxOrderDate:wxOrderDateList){ WxOrder wxOrder = wxOrderMapper.getWxOrderByWxOrderId(wxOrderDate.getWxOrderId()); if (wxOrder != null) { wxOrder = assembleWxOrder(wxOrder,wxOrderDate); updateWxOrderList.add(wxOrder); } else { wxOrder = new WxOrder(); String wxOrderSn = Contants.WX + SnowflakeUtil.getSnowNextId();; wxOrder.setWxOrderSn(wxOrderSn); wxOrder = assembleWxOrder(wxOrder,wxOrderDate); insertWxOrderList.add(wxOrder); } } //批量微信订单数据 if(insertWxOrderList.size() > 0 && wxOrderMapper.insertWxOrderBatch(insertWxOrderList) <= 0){ logger.error("批量插入,海关运单记录全部失败"); return 0; } //批量更新订单数据 if(updateWxOrderList.size() > 0 && wxOrderMapper.updateWxOrderBatch(updateWxOrderList) <= 0){ logger.error("批量更新,海关运单记录全部失败"); return 0; } return 1; } /** * 组装wxOrder数据 * @param wxOrder * @return */ private WxOrder assembleWxOrder(WxOrder wxOrder, WxOrderDate wxOrderDate) { Map resultMap = new HashMap<>(); try { BeanUtils.copyProperties(wxOrder, wxOrderDate); //获取缓存中的产品备案数据 final String resultJson = JedisClusterManager.jedisClusterInstance().get(Contants.SYS_ADMIN_DIVI_GOV); resultMap = JacksonUtil.fromStringJson(resultJson, resultMap.getClass()); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); }catch (Exception e) { logger.error("获取系统模块中缓存的统一行政区数据集异常!"); e.printStackTrace(); return null; } wxOrder.setPlatSn(merchant.getPlatSn()); wxOrder.setPlatName(merchant.getPlatName()); wxOrder.setBuyerIdType(Contants.ID_TYPE); wxOrder.setConsigneeIdType(Contants.ID_TYPE); wxOrder.setConsigneeMob(wxOrderDate.getConsigneeMob()); wxOrder.setConsigneeTel(wxOrderDate.getConsigneeMob()); wxOrder.setConsigneeCountryCode(Contants.CURRENCY); // 获取省级名称 String provinceName = null; // 判断是否为直辖市 if (isMuniCipality(wxOrderDate.getConsigneeCity())) { provinceName = wxOrderDate.getConsigneeCity(); } else { provinceName = wxOrderDate.getConsigneeProvince(); } final String provinceKey = provinceName; resultMap.forEach((k,v) -> { if (k.equals(provinceKey)) { Map divi = (Map) v; // 省级 wxOrder.setConsigneeProvinceCode(divi.get("diviCode").toString()); ((Map) divi.get("item")).forEach((x,y) -> { Map itemDivi = (Map) y; if (x.equals(wxOrderDate.getConsigneeCity())) { // 市级 wxOrder.setConsigneeCityCode(itemDivi.get("diviCode").toString()); ((Map) itemDivi.get("item")).forEach((a,b) -> { if (a.equals(wxOrderDate.getConsigneeDistrict())) { // 区县 wxOrder.setConsigneeDistrictCode(((Map)b).get("diviCode").toString()); return; } }); // 如果缓存中不存在此区县,默认给定该市下的任一区县 if (!StringUtils.isNotBlank(wxOrder.getConsigneeDistrict()) || !StringUtils.isNotBlank(wxOrder.getConsigneeDistrictCode())) { ((Map) itemDivi.get("item")).forEach((a,b) -> { wxOrder.setConsigneeDistrict(((Map)b).get("diviName").toString()); wxOrder.setConsigneeDistrictCode(((Map)b).get("diviCode").toString()); return; }); } if(StringUtils.isEmpty(wxOrder.getConsigneeDistrictCode())){//如为空则设置为市区 wxOrder.setConsigneeDistrictCode(itemDivi.get("diviCode").toString()); } if(StringUtils.isEmpty(wxOrder.getConsigneeDistrict())){//如为空则设置为市区 wxOrder.setConsigneeAddress(wxOrder.getConsigneeDistrict()+wxOrder.getConsigneeAddress()); wxOrder.setConsigneeDistrict(wxOrder.getConsigneeCity()); } return; } }); return; } }); //wxOrder.setConsigneeCountryCode(); wxOrder.setConsigneeZipCode("888888"); wxOrder.setCurrencyCode(Contants.CURRENCY); wxOrder.setPayerIdType(Contants.ID_TYPE); MerchantPlatform merchantPlatform = omsMerchantPlatformService.getPlatformByMerchSn(wxOrder.getMerchSn()); if(merchantPlatform == null){ logger.error("初始化电子订单表记录失败: 商户平台信息为空!"); return null; } wxOrder.setPayEntCusCode(merchantPlatform.getPlatCusCode()); BigDecimal freight = new BigDecimal(0); BigDecimal discount = new BigDecimal(0); //优惠券优惠金额 if(wxOrderDate.getCouponPrice() != null && wxOrderDate.getCouponPrice().compareTo(new BigDecimal(0)) != 0) { discount = wxOrderDate.getCouponPrice(); } //满减优惠金额 if(wxOrderDate.getFullCutPrice() != null && wxOrderDate.getFullCutPrice().compareTo(new BigDecimal(0)) != 0) { discount = wxOrderDate.getFullCutPrice(); } wxOrder.setFreight(freight); wxOrder.setDiscount(discount); wxOrder.setActuralPaid(wxOrderDate.getActuralPaid()); wxOrder.setExprType(cus.getWaybill().get("exprType")); if (!CcnetContants.wsFlag.item_10.getItem().equals(wxOrderDate.getWsFlag())) { wxOrder.setExprCompId(cus.getWaybill().get("exprComrId")); } else { wxOrder.setExprCompId("emato"); } //wxOrder.setDeclExprFee(); //wxOrder.setBatchNumbers(); //wxOrder.setDeclPostTax(); //wxOrder.setExtraTag(); //wxOrder.setCurrencyCode(); wxOrder.setWxOrderDetail(CcnetContants.isscan.item_0.getItem()); wxOrder.setClecOrderStatus(CcnetContants.sendStatus.item_0.getItem()); wxOrder.setWayOrderStatus(CcnetContants.sendStatus.item_0.getItem()); wxOrder.setProjectCheckStatus(CcnetContants.sendStatus.item_0.getItem()); wxOrder.setPlayOrderStatus(CcnetContants.sendStatus.item_0.getItem()); wxOrder.setCreateTime(new Date()); wxOrder.setExprAgreementType(wxOrderDate.getExprAgreementType());//第三方商户快递协议类型 return wxOrder; } private boolean isMuniCipality(String cityName) { Map muniMap = new HashMap<>(); muniMap.put("北京市", "北京市"); muniMap.put("天津市", "天津市"); muniMap.put("重庆市", "重庆市"); muniMap.put("上海市", "上海市"); if (muniMap.containsKey(cityName)) { return true; } return false; } @Override public List getWxOrder(Map param) { return wxOrderMapper.getWxOrder(param); } @Override public int updateWxOrderStatusBatch(List> wxOrderStatus) { return wxOrderMapper.updateWxOrderStatusBatch(wxOrderStatus); } @Override public WxOrder getWxOrderByWxOrderId(String orderSn) { return wxOrderMapper.getWxOrderByWxOrderId(orderSn); } @Override public int updateWxOrderStatus(Map wxMap) { return wxOrderMapper.updateWxOrderStatus(wxMap); } @Override public WxOrder getWxOrderByOrderSn(String merchOrderId) { return wxOrderMapper.getWxOrderByOrderSn(merchOrderId); } }