123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- 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<WxOrder> insertWxOrderList = new ArrayList<>();
- //本地微信数据更新
- List<WxOrder> updateWxOrderList = new ArrayList<>();
- //微信订单数据
- List<WxOrderDate> wxOrderDateList = (List<WxOrderDate>) 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<String, Object> 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<String, Object> divi = (Map) v;
- // 省级
- wxOrder.setConsigneeProvinceCode(divi.get("diviCode").toString());
- ((Map) divi.get("item")).forEach((x,y) -> {
- Map<String, Object> 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<String, String> muniMap = new HashMap<>();
- muniMap.put("北京市", "北京市");
- muniMap.put("天津市", "天津市");
- muniMap.put("重庆市", "重庆市");
- muniMap.put("上海市", "上海市");
- if (muniMap.containsKey(cityName)) {
- return true;
- }
- return false;
- }
- @Override
- public List<WxOrder> getWxOrder(Map<String, Object> param) {
- return wxOrderMapper.getWxOrder(param);
- }
- @Override
- public int updateWxOrderStatusBatch(List<Map<String, Object>> wxOrderStatus) {
- return wxOrderMapper.updateWxOrderStatusBatch(wxOrderStatus);
- }
- @Override
- public WxOrder getWxOrderByWxOrderId(String orderSn) {
- return wxOrderMapper.getWxOrderByWxOrderId(orderSn);
- }
- @Override
- public int updateWxOrderStatus(Map<String, Object> wxMap) {
- return wxOrderMapper.updateWxOrderStatus(wxMap);
- }
- @Override
- public WxOrder getWxOrderByOrderSn(String merchOrderId) {
- return wxOrderMapper.getWxOrderByOrderSn(merchOrderId);
- }
- }
|