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.*; import com.emato.ccnet.wx.dao.mapper.ccnet.*; 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.CusWaybillService; import com.emato.ccnet.wx.util.jackson.JacksonUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; @Service("cusWaybillService") public class CusWaybillServiceImpl implements CusWaybillService { @Autowired private CusWaybillMapper cusWaybillMapper; @Autowired private CusWaybillGoodsMapper cusWaybillGoodsMapper; @Autowired private CusWaybillStatusMapper cusWaybillStatusMapper; @Autowired private Merchant merchant; @Autowired private Cus cus; @Autowired private WxOrderMapper wxOrderMapper; @Autowired private WxOrderGoodsMapper wxOrderGoodsMapper; private static final Logger logger = LoggerFactory.getLogger(CusWaybillServiceImpl.class); @Override public CusWaybill add(CusWaybill record) { record.setCreateTime(new Date()); if(this.cusWaybillMapper.insertSelective(record)==1) { return record; } return null; } @Override public boolean delete(String cusWaybillSn) { return this.cusWaybillMapper.deleteByPrimaryKey(cusWaybillSn)==1; } @Override public CusWaybill update(CusWaybill record) { if(this.cusWaybillMapper.updateByPrimaryKeySelective(record)==1) { return record; } return null; } @Override public CusWaybill get(String cusWaybillSn) { return this.cusWaybillMapper.selectByPrimaryKey(cusWaybillSn); } /** * 查询海关运单 * @return */ @Override public List findAllCusWaybill() { return cusWaybillMapper.findAllCusWaybill(); } @Override public CusWaybill getCusWaybillByMerchOrderSn(String merchOrderSn) { return cusWaybillMapper.getCusWaybillByMerchOrderSn(merchOrderSn); } /** * 运单初始化 * @param list * @return */ @Override public int addCusWaybill(List list) { //海关运单集合 List cusWaybills = new ArrayList<>(); List upCusWaybills = new ArrayList<>(); //海关运单状态表集合 List cusWaybillStatues = new ArrayList<>(); List upCusWaybillStatues = new ArrayList<>(); //运单数据 List wayBillList = (List) list; for(WxOrder wxOrder:wayBillList){ CusWaybill waybill = cusWaybillMapper.findCusWaybillByOrderSn(wxOrder.getOrderSn()); if (waybill != null) { List cusWaybillGoodsList = cusWaybillGoodsMapper.findCusWaybillGoodsByCusWaybillSn(waybill.getCusWaybillSn()); if (cusWaybillGoodsList != null && cusWaybillGoodsList.size() > 0) { if (cusWaybillGoodsMapper.deteleByCusWaybillSn(waybill.getCusWaybillSn()) < 0) { logger.error("批量删除电子订单商品表记录失败"); return 0; } } CusWaybill cusWaybill = buildCusWaybill(wxOrder, waybill.getCusWaybillSn()); if (cusWaybill == null) { return 0; } upCusWaybills.add(cusWaybill); //插入电子订单商品表 if (buildCusWaybillGoods(wxOrder, waybill.getCusWaybillSn()) == 0) { return 0; } CusWaybillStatus cusWaybillStatus = cusWaybillStatusMapper.findCusWaybillStatusByCusWaybillSn(waybill.getCusWaybillSn()); cusWaybillStatus = buildCusWaybillStatus(wxOrder, waybill.getCusWaybillSn(), cusWaybillStatus.getCusWaybillStatusSn()); upCusWaybillStatues.add(cusWaybillStatus); } else { String cusWaybillSn = Contants.WMSH + SnowflakeUtil.getSnowNextId(); String cusWaybillStatusSn = Contants.WMSH + SnowflakeUtil.getSnowNextId(); //海关运单 CusWaybill cusWaybill = buildCusWaybill(wxOrder,cusWaybillSn); if (cusWaybill == null) { return 0; } cusWaybills.add(cusWaybill); //海关运单商品 if (buildCusWaybillGoods(wxOrder, cusWaybillSn) == 0) { return 0; } //海关运单状态 CusWaybillStatus cusWaybillStatus = buildCusWaybillStatus(wxOrder, cusWaybillSn, cusWaybillStatusSn); if (cusWaybillStatus == null) { return 0; } cusWaybillStatues.add(cusWaybillStatus); } } //批量插入海关运单 if(cusWaybills.size() > 0 && cusWaybillMapper.insertCusWaybillItemBatch(cusWaybills) <= 0){ logger.error("批量插入,海关运单记录全部失败"); return 0; } if(upCusWaybills.size() > 0 && cusWaybillMapper.updateCusWaybillItemBatch(upCusWaybills) <= 0){ logger.error("批量更新,海关运单记录全部失败"); return 0; } //批量插入海关运单状态 if(cusWaybillStatues.size() > 0 && cusWaybillStatusMapper.insertCusWaybillStatusItemBatch(cusWaybillStatues) <= 0){ logger.error("批量插入,海关运单状态记录全部失败"); return 0; } if(upCusWaybillStatues.size() > 0 && cusWaybillStatusMapper.updateCusWaybillStatusItemBatch(upCusWaybillStatues) <= 0){ logger.error("批量更新,海关运单状态记录全部失败"); return 0; } return 1; } /** * 组装CusWaybillStatus * @param wxOrder * @param cusWaybillSn * @return */ private CusWaybillStatus buildCusWaybillStatus(WxOrder wxOrder, String cusWaybillSn, String cusWaybillStatusSn) { try { CusWaybillStatus cusWaybillStatus = new CusWaybillStatus(); cusWaybillStatus.setCusWaybillStatusSn(cusWaybillStatusSn); cusWaybillStatus.setCusWaybillSn(cusWaybillSn); cusWaybillStatus.setMerchOrderType(Contants.MERCH_WAY_TYPE); cusWaybillStatus.setMerchOrderSn(wxOrder.getOrderSn()); cusWaybillStatus.setMerchSn(wxOrder.getMerchSn()); cusWaybillStatus.setMerchName(wxOrder.getMerchName()); cusWaybillStatus.setPlatSn(merchant.getPlatSn()); cusWaybillStatus.setPlatName(merchant.getPlatName()); cusWaybillStatus.setThirdPartyMerchCode(wxOrder.getThirdPartyMerchCode()); cusWaybillStatus.setSendStatus(Contants.INIT_STATUS); cusWaybillStatus.setRespStatus(Contants.INIT_STATUS); cusWaybillStatus.setCreaterSn(Contants.CREATER_NUMBER); cusWaybillStatus.setCreateTime(new Date()); return cusWaybillStatus; } catch (Exception e) { logger.error("初始化海关运单状态记录失败"); e.printStackTrace(); } return null; } /** * 组装CusWaybillGoods * @param wxOrder * @param cusWaybillSn * @return */ private int buildCusWaybillGoods(WxOrder wxOrder, String cusWaybillSn) { List orderGoodsList = wxOrderGoodsMapper.getWxOrderGoodsByWxOrderId(wxOrder.getWxOrderId()); if (orderGoodsList == null || orderGoodsList.size() <= 0){ logger.error("订单详情为空!"); return 0; } //海关运单商品集合 List cusWaybillGoodes = new ArrayList<>(); for (WxOrderGoods wxOrderGoods:orderGoodsList) { CusWaybillGoods cusWaybillGoods = new CusWaybillGoods(); String cusWaybillGoodsSn = Contants.WMSH + SnowflakeUtil.getSnowNextId(); cusWaybillGoods.setCusWaybillGoodsSn(cusWaybillGoodsSn); cusWaybillGoods.setCusWaybillSn(cusWaybillSn); cusWaybillGoods.setMerchOrderSn(wxOrder.getOrderSn()); cusWaybillGoods.setSku(wxOrderGoods.getItemNo()); cusWaybillGoods.setBuyUnitPrice(wxOrderGoods.getTaxPrice()); cusWaybillGoods.setBuyQty(wxOrderGoods.getQty()); cusWaybillGoods.setCreaterSn(Contants.CREATER_NUMBER); cusWaybillGoods.setCreateTime(new Date()); cusWaybillGoodes.add(cusWaybillGoods); } //批量插入海关运单商品 if(cusWaybillGoodsMapper.insertCusWaybillGoodsItemBatch(cusWaybillGoodes) <= 0){ logger.error("批量插入,海关运单商品记录全部失败"); return 0; } return 1; } 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; } /** * 组装CusWaybill * @param wxOrder * @param cusWaybillSn * @return */ private CusWaybill buildCusWaybill(WxOrder wxOrder, String cusWaybillSn) { try { CusWaybill cusWaybill = new CusWaybill(); cusWaybill.setCusWaybillSn(cusWaybillSn); cusWaybill.setMerchOrderId(wxOrder.getOrderSn()); cusWaybill.setMerchSn(wxOrder.getMerchSn()); cusWaybill.setShopId(wxOrder.getShopId()); cusWaybill.setMerchName(wxOrder.getMerchName()); cusWaybill.setPlatSn(merchant.getPlatSn()); cusWaybill.setPlatName(merchant.getPlatName()); cusWaybill.setThirdPartyMerchCode(wxOrder.getThirdPartyMerchCode()); cusWaybill.setThirdPartyMerchName(wxOrder.getThirdPartyMerchName()); cusWaybill.setPlaceOrderlTime(wxOrder.getCreateTime()); // 订购人 cusWaybill.setBuyerName(wxOrder.getBuyerName()); cusWaybill.setBuyerTel(wxOrder.getBuyerTel()); cusWaybill.setBuyerIdType(Contants.ID_TYPE); cusWaybill.setBuyerIdCode(wxOrder.getBuyerIdCode()); // 支付人 cusWaybill.setPayerName(wxOrder.getPayerName()); cusWaybill.setPayerIdCode(wxOrder.getPayerIdCode()); cusWaybill.setPayerMob(wxOrder.getPayerMob()); cusWaybill.setPayerIdType(Contants.ID_TYPE); // 收货人 cusWaybill.setConsigneeIdType(Contants.ID_TYPE); cusWaybill.setConsigneeIdCode(wxOrder.getConsigneeIdCode()); cusWaybill.setConsigneeName(wxOrder.getConsigneeName()); cusWaybill.setConsigneeMob(wxOrder.getConsigneeMob()); // 快递 cusWaybill.setExprType(cus.getWaybill().get("exprType")); if (!CcnetContants.wsFlag.item_10.getItem().equals(wxOrder.getWsFlag())) { cusWaybill.setExprCompId(cus.getWaybill().get("exprComrId")); } else { cusWaybill.setExprCompId("emato"); } // 发送ws路径标识 cusWaybill.setWsFlag(wxOrder.getWsFlag()); // 地址 cusWaybill.setConsigneeCountryCode(wxOrder.getConsigneeCountryCode()); cusWaybill.setConsigneeProvince(wxOrder.getConsigneeProvince()); cusWaybill.setConsigneeProvinceCode(wxOrder.getConsigneeProvinceCode()); cusWaybill.setConsigneeCity(wxOrder.getConsigneeCity()); cusWaybill.setConsigneeCityCode(wxOrder.getConsigneeCityCode()); cusWaybill.setConsigneeDistrict(wxOrder.getConsigneeDistrict()); cusWaybill.setConsigneeDistrictCode(wxOrder.getConsigneeDistrictCode()); cusWaybill.setConsigneeAddress(wxOrder.getConsigneeAddress()); cusWaybill.setConsigneeZipCode(wxOrder.getConsigneeZipCode()); if (wxOrder.getConsigneeZipCode() == null || wxOrder.getConsigneeZipCode() == "") { cusWaybill.setConsigneeZipCode("888888"); } cusWaybill.setPayEntCusCode(merchant.getMerchantCustomsCode()); cusWaybill.setPayNo(wxOrder.getPayNo()); cusWaybill.setActuralPaid(wxOrder.getActuralPaid()); cusWaybill.setPayTime(wxOrder.getPayTime()); cusWaybill.setBuyerBillTime(wxOrder.getBuyerBillTime()); cusWaybill.setBuyerPayCheck(wxOrder.getBuyerPayCheck()); cusWaybill.setCreaterSn(Contants.CREATER_NUMBER); cusWaybill.setCreateTime(new Date()); cusWaybill.setExField(wxOrder.getExField()); return cusWaybill; } catch (Exception e) { logger.error("初始化海关运单记录失败"); e.printStackTrace(); } return null; } }