package com.emato.ccnet.service.ccent.impl; import com.emato.ccnet.config.Merchant; import com.emato.ccnet.contants.Contants; import com.emato.ccnet.domain.ccnet.CusOrder; import com.emato.ccnet.domain.ccnet.CusOrderGoods; import com.emato.ccnet.domain.ccnet.CusOrderStatus; import com.emato.ccnet.domain.kmall.OrderBill; import com.emato.ccnet.domain.kmall.OrderGoods; import com.emato.ccnet.mapper.ccnet.CusOrderGoodsMapper; import com.emato.ccnet.mapper.ccnet.CusOrderMapper; import com.emato.ccnet.mapper.ccnet.CusOrderStatusMapper; import com.emato.ccnet.mapper.kmall.KmallOrderMapper; import com.emato.ccnet.redis.jedis.cluster.mgt.JedisClusterManager; import com.emato.ccnet.service.ccent.CusOrderService; import com.emato.ccnet.snow.SnowflakeUtil; import com.emato.ccnet.util.DateUtil; import com.emato.ccnet.util.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 public class CusOrderImpl implements CusOrderService{ private static final Logger logger = LoggerFactory.getLogger(CusPaymentCollectImpl.class); @Autowired private Merchant merchant; @Autowired private CusOrderMapper cusOrderMapper; @Autowired private CusOrderGoodsMapper cusOrderGoodsMapper; @Autowired private CusOrderStatusMapper cusOrderStatusMapper; @Autowired private KmallOrderMapper kmallOrderMapper; /** * 生成报关流水号 * @return */ public static String getNormalOrderNo() { String orderNo = DateUtil.dateToString(new Date(),"yyyyMMddHHmmss"); return orderNo; } /** * 电子订单初始化 * @param list * @return */ @Override public int addCusOrder(List list) { //电子订单总表集合 List CusOrders = new ArrayList<>(); //电子订单状态表集合 List CusOrderStatues = new ArrayList<>(); //支付单数据 List orderBillList = (List) list; List orderList = new ArrayList<>(); for (OrderBill orderBill : orderBillList) { CusOrder bill = cusOrderMapper.findCusOrderByOrderNo(orderBill.getOrderNo()); if(bill == null){ String cusOrderSn = Contants.ZWSH + SnowflakeUtil.getSnowNextId(); String orderSn = Contants.ZW +SnowflakeUtil.getSnowNextId(); //电子订单表 CusOrder cusOrder = buildCusOrder(orderBill,cusOrderSn,orderSn); CusOrders.add(cusOrder); //插入电子订单商品表 buildCusOrderGoods(orderBill,cusOrderSn); //电子订单发送状态 CusOrderStatus cusOrderStatus = buildCusOrderStatus(orderBill,cusOrderSn,orderSn); CusOrderStatues.add(cusOrderStatus); } } if (cusOrderMapper.insertCusOrderItemBatch(CusOrders) <= 0) { logger.error("批量插入,电子订单表记录全部失败"); return 0; } if(cusOrderStatusMapper.insertCusOrderStatusItemBatch(CusOrderStatues) <= 0){ logger.error("批量插入,电子订单状态表记录全部失败"); return 0; } return 1; } /** * 记录CusOrderStatus * @param orderBill * @param cusOrderSn * @param orderSn * @return */ private CusOrderStatus buildCusOrderStatus(OrderBill orderBill, String cusOrderSn, String orderSn) { CusOrderStatus cusOrderStatus = new CusOrderStatus(); String cusOrderStatusPaySn = Contants.ZWSH+ SnowflakeUtil.getSnowNextId(); cusOrderStatus.setCusOrderStatusSn(cusOrderStatusPaySn); cusOrderStatus.setCusOrderSn(cusOrderSn); cusOrderStatus.setOrderSn(orderSn); cusOrderStatus.setMerchOrderSn(orderBill.getOrderNo()); cusOrderStatus.setMerchSn(merchant.getMerchSn()); cusOrderStatus.setMerchName(merchant.getMerchName()); cusOrderStatus.setPlatSn(merchant.getPlatSn()); cusOrderStatus.setPlatName(merchant.getPlatName()); cusOrderStatus.setThirdPartyMerchCode(orderBill.getSellerId()); cusOrderStatus.setThirdPartyMerchName(orderBill.getSellerName()); cusOrderStatus.setSendStatus(Contants.INIT_STATUS); cusOrderStatus.setPlatRespStatus(Contants.INIT_STATUS); cusOrderStatus.setCusRespStatus(Contants.INIT_STATUS); cusOrderStatus.setCipRespStatus(Contants.INIT_STATUS); return cusOrderStatus; } /** * 记录CusOrderGoods * @param orderBill * @param cusOrderSn * @return */ private void buildCusOrderGoods(OrderBill orderBill, String cusOrderSn) { Map resultMap = new HashMap<>(); List orderGoodsList = kmallOrderMapper.getOrderGoods(orderBill.getOrderNo()); if (orderGoodsList == null || orderGoodsList.size() <= 0){ logger.error("电子订单为空!"); return; } List CusOrderGoodes = new ArrayList<>(); int i = 1; for (OrderGoods orderGoods:orderGoodsList){ CusOrderGoods cusOrderGoods = new CusOrderGoods(); try { //获取缓存中的产品备案数据 final String resultJson = JedisClusterManager.jedisClusterInstance().get(Contants.PD_PRODUCT_RECORD); resultMap = JacksonUtil.fromStringJson(resultJson, resultMap.getClass()); } catch (Exception e) { logger.error("获取系统模块中缓存的产品备案数据集异常!"); return; } String sku = orderGoods.getGoodsNo(); Map productRecordMap = (Map) resultMap.get(sku); if(productRecordMap == null){ logger.error("sku不存在异常"); } String cusOrderGoodsPaySn = Contants.ZWSH+ SnowflakeUtil.getSnowNextId(); cusOrderGoods.setCusOrderGoodsSn(cusOrderGoodsPaySn); cusOrderGoods.setCusOrderSn(cusOrderSn); cusOrderGoods.setGnum(i+""); cusOrderGoods.setItemNo(orderGoods.getGoodsNo()); cusOrderGoods.setItemName(orderGoods.getName()); cusOrderGoods.setItemDescribe(orderGoods.getContent()); cusOrderGoods.setBarCode((String)productRecordMap.get("prodBarcode")); cusOrderGoods.setUnit((String)productRecordMap.get("unitCode")); cusOrderGoods.setQty(orderGoods.getGoodsNums()); cusOrderGoods.setPrice(orderGoods.getSellPrice()); cusOrderGoods.setTotalPrice(orderGoods.getSellTotalPice()); cusOrderGoods.setCurrency(Contants.CURRENCY); cusOrderGoods.setCountry((String)productRecordMap.get("oriCntCode")); cusOrderGoods.setCiqGno((String)productRecordMap.get("cusRecCode")); cusOrderGoods.setGcode((String) productRecordMap.get("cusGoodsCode")); cusOrderGoods.setGmodel((String) productRecordMap.get("cusDeclEle")); cusOrderGoods.setCiqGmodel((String)productRecordMap.get("ciqProdModel")); cusOrderGoods.setBrand((String)productRecordMap.get("prodBrand")); cusOrderGoods.setCreaterSn(Contants.CREATER_NUMBER); cusOrderGoods.setCreateTime(new Date()); CusOrderGoodes.add(cusOrderGoods); ++ i; } if(cusOrderGoodsMapper.insertCusOrderGoodsItemBatch(CusOrderGoodes) <= 0){ logger.error("批量插入,电子订单商品表记录全部失败"); return; } } /** * 记录CusOrder * @param orderBill * @param cusOrderSn * @param orderSn * @return */ private CusOrder buildCusOrder(OrderBill orderBill, String cusOrderSn, String orderSn) { CusOrder cusOrder = new CusOrder(); cusOrder.setCusOrderSn(cusOrderSn); cusOrder.setOrderSn(orderSn); cusOrder.setMerchOrderSn(orderBill.getOrderNo()); cusOrder.setMerchSn(merchant.getMerchSn()); cusOrder.setMerchName(merchant.getMerchName()); cusOrder.setPlatSn(merchant.getPlatSn()); cusOrder.setPlatName(merchant.getPlatName()); cusOrder.setThirdPartyMerchCode(orderBill.getSellerId()); cusOrder.setThirdPartyMerchName(orderBill.getSellerName()); cusOrder.setPlaceOrderlTime(orderBill.getCreateTime()); cusOrder.setAppType(Contants.APP_STATUS_DECLARE); cusOrder.setAppStatus(Contants.APP_STATUS_SEPARETE); cusOrder.setAppTime(getNormalOrderNo()); cusOrder.setOrderNo(orderBill.getOrderNo()); cusOrder.setEbpCode(merchant.getPlatSn()); cusOrder.setEbpName(merchant.getPlatName()); cusOrder.setEbcCode(merchant.getMerchSn()); cusOrder.setEbcName(merchant.getMerchName()); cusOrder.setGoodsValue(orderBill.getRealAmount()); cusOrder.setbuyerIdNumber(orderBill.getUserId()); cusOrder.setBuyerName(orderBill.getTrueName()); cusOrder.setBuyerIdType(orderBill.getIdType()); cusOrder.setbuyerIdNumber(orderBill.getIdCode()); cusOrder.setPayCode(merchant.getMerchantCustomsCode()); cusOrder.setPayName(merchant.getMerchantCustomsName()); cusOrder.setPayTransactionId(orderBill.getTradeNo()); cusOrder.setConsignee(orderBill.getAcceptName()); cusOrder.setConsigneeTelephone(orderBill.getMobile()); cusOrder.setConsigneeAddress(orderBill.getAddress()); cusOrder.setActuralPaid(orderBill.getRealAmount()); cusOrder.setBuyerRegNo(orderBill.getUserId()); return cusOrder; } /** * 查找当前ccnet中的所有电子订单 * @return */ @Override public List findAllCusOrder() { return cusOrderMapper.findAllCusOrder(); } /** * 通过订单号查找电子订单表 * @param orderSn * @return */ @Override public CusOrder findCusOrder(String orderSn) { return cusOrderMapper.findCusOrderByOrderNo(orderSn); } /** * 更新电子订单表 * @param cusOrder * @return */ @Override public int updateCusOrder(CusOrder cusOrder) { return cusOrderMapper.updateCusOrder(cusOrder); } }