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.SysContants; import com.emato.ccnet.wx.dao.entity.ccnet.WxCuspayStatus; import com.emato.ccnet.wx.dao.entity.ccnet.WxOrder; import com.emato.ccnet.wx.dao.entity.ccnet.WxOrderGoods; import com.emato.ccnet.wx.dao.entity.ccnet.WxPayDoc; import com.emato.ccnet.wx.dao.mapper.ccnet.WxCuspayStatusMapper; import com.emato.ccnet.wx.dao.mapper.ccnet.WxOrderGoodsMapper; import com.emato.ccnet.wx.dao.mapper.ccnet.WxPayDocMapper; import com.emato.ccnet.wx.manager.snow.SnowflakeUtil; import com.emato.ccnet.wx.service.WxPayDocService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; @Service("wxPayDocService") public class WxPayDocServiceImpl implements WxPayDocService { @Autowired private WxPayDocMapper wxPayDocMapper; @Autowired private Merchant merchant; @Autowired private WxCuspayStatusMapper wxCuspayStatusMapper; @Autowired private WxOrderGoodsMapper wxOrderGoodsMapper; @Autowired private Cus cus; private static final Logger logger = LoggerFactory.getLogger(WxPayDocServiceImpl.class); @Override public WxPayDoc add(WxPayDoc record) { record.setCreateTime(new Date()); if(this.wxPayDocMapper.insertSelective(record)==1) { return record; } return null; } @Override public boolean delete(String wxCuspaySn) { return this.wxPayDocMapper.deleteByPrimaryKey(wxCuspaySn)==1; } @Override public WxPayDoc update(WxPayDoc record) { if(this.wxPayDocMapper.updateByPrimaryKeySelective(record)==1) { return record; } return null; } @Override public WxPayDoc get(String wxCuspaySn) { return this.wxPayDocMapper.selectByPrimaryKey(wxCuspaySn); } @Override public int addWxPayDoc(List list) { //支付单总表集合 List wxPayDocList = new ArrayList<>(); List upWxPayDocList = new ArrayList<>(); //支付单状态表集合 List wxCuspayStatusList = new ArrayList<>(); List upWxCuspayStatusList = new ArrayList<>(); //支付单数据 List wxOrderList = (List) list; for (WxOrder wxOrder : wxOrderList) { //支付单表 WxPayDoc wxPayDoc = wxPayDocMapper.findWxPayDocByOrderSn(wxOrder.getWxOrderSn()); if(wxPayDoc != null){ //组装wxPayDoc参数 WxPayDoc updateWxPayDoc = buildWxPayDoc(wxOrder, wxPayDoc); upWxPayDocList.add(updateWxPayDoc); WxCuspayStatus wxCuspayStatus = wxCuspayStatusMapper.findWxcuspayStatusByOrderSn(wxOrder.getWxOrderSn()); wxCuspayStatus.setSendStatus(CcnetContants.sendStatus.item_0.getItem()); wxCuspayStatus.setRespStatus(CcnetContants.sendStatus.item_0.getItem()); upWxCuspayStatusList.add(wxCuspayStatus); }else { wxPayDoc = new WxPayDoc(); String wxCuspaySn = SysContants.wx_pay_doc + SnowflakeUtil.getSnowNextId(); wxPayDoc.setWxCuspaySn(wxCuspaySn); //组装wxPayDoc参数 WxPayDoc buildWxPayDoc = buildWxPayDoc(wxOrder, wxPayDoc); wxPayDocList.add(buildWxPayDoc); //支付单发送状态表组装 WxCuspayStatus wxCuspayStatus = buildWxCuspayStatus(wxOrder, wxCuspaySn); wxCuspayStatusList.add(wxCuspayStatus); } } if(wxPayDocList != null && wxPayDocList.size() > 0){ try { wxPayDocMapper.insertWxpayDocItemBatch(wxPayDocList); }catch (Exception e){ logger.error("批量插入,支付单表记录全部失败"); return 0; } } if(wxCuspayStatusList != null && wxCuspayStatusList.size() > 0){ try { wxCuspayStatusMapper.insertCusOrderStatusItemBatch(wxCuspayStatusList); }catch (Exception e){ logger.error("批量插入,支付单状态表记录全部失败"); return 0; } } if(upWxPayDocList != null && upWxPayDocList.size() > 0) { try { wxPayDocMapper.updateWxPayDocItemBatch(upWxPayDocList); }catch (Exception e){ logger.error("批量更新,支付单表记录全部失败"); return 0; } } if(upWxCuspayStatusList != null && upWxCuspayStatusList.size() > 0) { try { wxCuspayStatusMapper.updateCusOrderStatusItemBatch(upWxCuspayStatusList); }catch (Exception e){ logger.error("批量更新,支付单表状态记录全部失败"); return 0; } } return 1; } /** * 组装wxPayDoc参数 * @param wxOrder * @param wxPayDoc * @return */ private WxPayDoc buildWxPayDoc(WxOrder wxOrder, WxPayDoc wxPayDoc) { //查询订单详情 List orderGoodsList = wxOrderGoodsMapper.getWxOrderGoodsByWxOrderId(wxOrder.getWxOrderId()); if (orderGoodsList == null || orderGoodsList.size() <= 0){ logger.error("订单详情为空!"); return null; } BigDecimal goodsValue = new BigDecimal(0); for (WxOrderGoods wxOrderGoods:orderGoodsList){ goodsValue = wxOrderGoods.getTotalPrice(); } BigDecimal duty = wxOrder.getActuralPaid().subtract(goodsValue).setScale(2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)); Map wxMap = (Map) cus.getPlay().get("wx"); wxPayDoc.setWxCuspaySn(wxPayDoc.getWxCuspaySn()); wxPayDoc.setOrderSn(wxOrder.getWxOrderSn()); wxPayDoc.setMerchSn(wxOrder.getMerchSn()); wxPayDoc.setMerchName(wxOrder.getMerchName()); wxPayDoc.setPlatSn(merchant.getPlatSn()); wxPayDoc.setPlatName(merchant.getPlatName()); wxPayDoc.setThirdPartyMerchCode(wxOrder.getThirdPartyMerchCode()); wxPayDoc.setAppid(wxMap.get("app-id").toString()); wxPayDoc.setMchId(wxMap.get("mch-id").toString()); wxPayDoc.setOutTradeNo(wxOrder.getMerchOrderId()); wxPayDoc.setTransactionId(wxOrder.getPayNo()); wxPayDoc.setCustoms(wxMap.get("customs").toString()); wxPayDoc.setMchCustomsNo(merchant.getMerchantCustomsCode()); wxPayDoc.setDuty(duty.intValue()); wxPayDoc.setActionType("ADD"); wxPayDoc.setSubOrderNo(wxOrder.getOrderSn()); wxPayDoc.setFeeType("CNY"); wxPayDoc.setOrderFee(wxOrder.getActuralPaid().multiply(new BigDecimal(100)).intValue()); wxPayDoc.setTransportFee(0); wxPayDoc.setProductFee(wxOrder.getActuralPaid().multiply(new BigDecimal(100)).intValue()); wxPayDoc.setCertType("IDCARD"); wxPayDoc.setCertId(wxOrder.getBuyerIdCode()); wxPayDoc.setName(wxOrder.getBuyerName()); wxPayDoc.setCreateTime(new Date()); return wxPayDoc; } @Override public List findAllWxPayDoc() { return wxPayDocMapper.findAllWxPayDoc(); } @Override public WxPayDoc getWxPayDocByOrderSn(String orderSn) { return wxPayDocMapper.findWxPayDocByOrderSn(orderSn); } private WxCuspayStatus buildWxCuspayStatus(WxOrder wxOrder, String wxCuspaySn) { WxCuspayStatus wxCuspayStatus = new WxCuspayStatus(); String cusOrderStatusSn = SysContants.wx_cuspay_status + SnowflakeUtil.getSnowNextId(); wxCuspayStatus.setCusOrderStatusSn(cusOrderStatusSn); wxCuspayStatus.setWxPaySn(wxCuspaySn); wxCuspayStatus.setOrderSn(wxOrder.getWxOrderSn()); wxCuspayStatus.setMerchOrderSn(wxOrder.getMerchOrderId()); wxCuspayStatus.setMerchSn(wxOrder.getMerchSn()); wxCuspayStatus.setMerchName(wxOrder.getMerchName()); wxCuspayStatus.setPlatSn(merchant.getPlatSn()); wxCuspayStatus.setPlatName(merchant.getPlatName()); wxCuspayStatus.setThirdPartyMerchCode(wxOrder.getThirdPartyMerchCode()); wxCuspayStatus.setSendStatus(CcnetContants.sendStatus.item_0.getItem()); wxCuspayStatus.setRespStatus(CcnetContants.sespStatus.item_0.getItem()); return wxCuspayStatus; } }