WxPayDocServiceImpl.java 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. package com.emato.ccnet.wx.service.impl;
  2. import com.emato.ccnet.wx.config.Cus;
  3. import com.emato.ccnet.wx.config.Merchant;
  4. import com.emato.ccnet.wx.contants.CcnetContants;
  5. import com.emato.ccnet.wx.contants.SysContants;
  6. import com.emato.ccnet.wx.dao.entity.ccnet.WxCuspayStatus;
  7. import com.emato.ccnet.wx.dao.entity.ccnet.WxOrder;
  8. import com.emato.ccnet.wx.dao.entity.ccnet.WxOrderGoods;
  9. import com.emato.ccnet.wx.dao.entity.ccnet.WxPayDoc;
  10. import com.emato.ccnet.wx.dao.mapper.ccnet.WxCuspayStatusMapper;
  11. import com.emato.ccnet.wx.dao.mapper.ccnet.WxOrderGoodsMapper;
  12. import com.emato.ccnet.wx.dao.mapper.ccnet.WxPayDocMapper;
  13. import com.emato.ccnet.wx.manager.snow.SnowflakeUtil;
  14. import com.emato.ccnet.wx.service.WxPayDocService;
  15. import org.slf4j.Logger;
  16. import org.slf4j.LoggerFactory;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.stereotype.Service;
  19. import java.math.BigDecimal;
  20. import java.util.ArrayList;
  21. import java.util.Date;
  22. import java.util.List;
  23. import java.util.Map;
  24. @Service("wxPayDocService")
  25. public class WxPayDocServiceImpl implements WxPayDocService {
  26. @Autowired
  27. private WxPayDocMapper wxPayDocMapper;
  28. @Autowired
  29. private Merchant merchant;
  30. @Autowired
  31. private WxCuspayStatusMapper wxCuspayStatusMapper;
  32. @Autowired
  33. private WxOrderGoodsMapper wxOrderGoodsMapper;
  34. @Autowired
  35. private Cus cus;
  36. private static final Logger logger = LoggerFactory.getLogger(WxPayDocServiceImpl.class);
  37. @Override
  38. public WxPayDoc add(WxPayDoc record) {
  39. record.setCreateTime(new Date());
  40. if(this.wxPayDocMapper.insertSelective(record)==1) {
  41. return record;
  42. }
  43. return null;
  44. }
  45. @Override
  46. public boolean delete(String wxCuspaySn) {
  47. return this.wxPayDocMapper.deleteByPrimaryKey(wxCuspaySn)==1;
  48. }
  49. @Override
  50. public WxPayDoc update(WxPayDoc record) {
  51. if(this.wxPayDocMapper.updateByPrimaryKeySelective(record)==1) {
  52. return record;
  53. }
  54. return null;
  55. }
  56. @Override
  57. public WxPayDoc get(String wxCuspaySn) {
  58. return this.wxPayDocMapper.selectByPrimaryKey(wxCuspaySn);
  59. }
  60. @Override
  61. public int addWxPayDoc(List list) {
  62. //支付单总表集合
  63. List<WxPayDoc> wxPayDocList = new ArrayList<>();
  64. List<WxPayDoc> upWxPayDocList = new ArrayList<>();
  65. //支付单状态表集合
  66. List<WxCuspayStatus> wxCuspayStatusList = new ArrayList<>();
  67. List<WxCuspayStatus> upWxCuspayStatusList = new ArrayList<>();
  68. //支付单数据
  69. List<WxOrder> wxOrderList = (List<WxOrder>) list;
  70. for (WxOrder wxOrder : wxOrderList) {
  71. //支付单表
  72. WxPayDoc wxPayDoc = wxPayDocMapper.findWxPayDocByOrderSn(wxOrder.getWxOrderSn());
  73. if(wxPayDoc != null){
  74. //组装wxPayDoc参数
  75. WxPayDoc updateWxPayDoc = buildWxPayDoc(wxOrder, wxPayDoc);
  76. upWxPayDocList.add(updateWxPayDoc);
  77. WxCuspayStatus wxCuspayStatus = wxCuspayStatusMapper.findWxcuspayStatusByOrderSn(wxOrder.getWxOrderSn());
  78. wxCuspayStatus.setSendStatus(CcnetContants.sendStatus.item_0.getItem());
  79. wxCuspayStatus.setRespStatus(CcnetContants.sendStatus.item_0.getItem());
  80. upWxCuspayStatusList.add(wxCuspayStatus);
  81. }else {
  82. wxPayDoc = new WxPayDoc();
  83. String wxCuspaySn = SysContants.wx_pay_doc + SnowflakeUtil.getSnowNextId();
  84. wxPayDoc.setWxCuspaySn(wxCuspaySn);
  85. //组装wxPayDoc参数
  86. WxPayDoc buildWxPayDoc = buildWxPayDoc(wxOrder, wxPayDoc);
  87. wxPayDocList.add(buildWxPayDoc);
  88. //支付单发送状态表组装
  89. WxCuspayStatus wxCuspayStatus = buildWxCuspayStatus(wxOrder, wxCuspaySn);
  90. wxCuspayStatusList.add(wxCuspayStatus);
  91. }
  92. }
  93. if(wxPayDocList != null && wxPayDocList.size() > 0){
  94. try {
  95. wxPayDocMapper.insertWxpayDocItemBatch(wxPayDocList);
  96. }catch (Exception e){
  97. logger.error("批量插入,支付单表记录全部失败");
  98. return 0;
  99. }
  100. }
  101. if(wxCuspayStatusList != null && wxCuspayStatusList.size() > 0){
  102. try {
  103. wxCuspayStatusMapper.insertCusOrderStatusItemBatch(wxCuspayStatusList);
  104. }catch (Exception e){
  105. logger.error("批量插入,支付单状态表记录全部失败");
  106. return 0;
  107. }
  108. }
  109. if(upWxPayDocList != null && upWxPayDocList.size() > 0) {
  110. try {
  111. wxPayDocMapper.updateWxPayDocItemBatch(upWxPayDocList);
  112. }catch (Exception e){
  113. logger.error("批量更新,支付单表记录全部失败");
  114. return 0;
  115. }
  116. }
  117. if(upWxCuspayStatusList != null && upWxCuspayStatusList.size() > 0) {
  118. try {
  119. wxCuspayStatusMapper.updateCusOrderStatusItemBatch(upWxCuspayStatusList);
  120. }catch (Exception e){
  121. logger.error("批量更新,支付单表状态记录全部失败");
  122. return 0;
  123. }
  124. }
  125. return 1;
  126. }
  127. /**
  128. * 组装wxPayDoc参数
  129. * @param wxOrder
  130. * @param wxPayDoc
  131. * @return
  132. */
  133. private WxPayDoc buildWxPayDoc(WxOrder wxOrder, WxPayDoc wxPayDoc) {
  134. //查询订单详情
  135. List<WxOrderGoods> orderGoodsList = wxOrderGoodsMapper.getWxOrderGoodsByWxOrderId(wxOrder.getWxOrderId());
  136. if (orderGoodsList == null || orderGoodsList.size() <= 0){
  137. logger.error("订单详情为空!");
  138. return null;
  139. }
  140. BigDecimal goodsValue = new BigDecimal(0);
  141. for (WxOrderGoods wxOrderGoods:orderGoodsList){
  142. goodsValue = wxOrderGoods.getTotalPrice();
  143. }
  144. BigDecimal duty = wxOrder.getActuralPaid().subtract(goodsValue).setScale(2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100));
  145. Map<String, Object> wxMap = (Map) cus.getPlay().get("wx");
  146. wxPayDoc.setWxCuspaySn(wxPayDoc.getWxCuspaySn());
  147. wxPayDoc.setOrderSn(wxOrder.getWxOrderSn());
  148. wxPayDoc.setMerchSn(wxOrder.getMerchSn());
  149. wxPayDoc.setMerchName(wxOrder.getMerchName());
  150. wxPayDoc.setPlatSn(merchant.getPlatSn());
  151. wxPayDoc.setPlatName(merchant.getPlatName());
  152. wxPayDoc.setThirdPartyMerchCode(wxOrder.getThirdPartyMerchCode());
  153. wxPayDoc.setAppid(wxMap.get("app-id").toString());
  154. wxPayDoc.setMchId(wxMap.get("mch-id").toString());
  155. wxPayDoc.setOutTradeNo(wxOrder.getMerchOrderId());
  156. wxPayDoc.setTransactionId(wxOrder.getPayNo());
  157. wxPayDoc.setCustoms(wxMap.get("customs").toString());
  158. wxPayDoc.setMchCustomsNo(merchant.getMerchantCustomsCode());
  159. wxPayDoc.setDuty(duty.intValue());
  160. wxPayDoc.setActionType("ADD");
  161. wxPayDoc.setSubOrderNo(wxOrder.getOrderSn());
  162. wxPayDoc.setFeeType("CNY");
  163. wxPayDoc.setOrderFee(wxOrder.getActuralPaid().multiply(new BigDecimal(100)).intValue());
  164. wxPayDoc.setTransportFee(0);
  165. wxPayDoc.setProductFee(wxOrder.getActuralPaid().multiply(new BigDecimal(100)).intValue());
  166. wxPayDoc.setCertType("IDCARD");
  167. wxPayDoc.setCertId(wxOrder.getBuyerIdCode());
  168. wxPayDoc.setName(wxOrder.getBuyerName());
  169. wxPayDoc.setCreateTime(new Date());
  170. return wxPayDoc;
  171. }
  172. @Override
  173. public List<WxPayDoc> findAllWxPayDoc() {
  174. return wxPayDocMapper.findAllWxPayDoc();
  175. }
  176. @Override
  177. public WxPayDoc getWxPayDocByOrderSn(String orderSn) {
  178. return wxPayDocMapper.findWxPayDocByOrderSn(orderSn);
  179. }
  180. private WxCuspayStatus buildWxCuspayStatus(WxOrder wxOrder, String wxCuspaySn) {
  181. WxCuspayStatus wxCuspayStatus = new WxCuspayStatus();
  182. String cusOrderStatusSn = SysContants.wx_cuspay_status + SnowflakeUtil.getSnowNextId();
  183. wxCuspayStatus.setCusOrderStatusSn(cusOrderStatusSn);
  184. wxCuspayStatus.setWxPaySn(wxCuspaySn);
  185. wxCuspayStatus.setOrderSn(wxOrder.getWxOrderSn());
  186. wxCuspayStatus.setMerchOrderSn(wxOrder.getMerchOrderId());
  187. wxCuspayStatus.setMerchSn(wxOrder.getMerchSn());
  188. wxCuspayStatus.setMerchName(wxOrder.getMerchName());
  189. wxCuspayStatus.setPlatSn(merchant.getPlatSn());
  190. wxCuspayStatus.setPlatName(merchant.getPlatName());
  191. wxCuspayStatus.setThirdPartyMerchCode(wxOrder.getThirdPartyMerchCode());
  192. wxCuspayStatus.setSendStatus(CcnetContants.sendStatus.item_0.getItem());
  193. wxCuspayStatus.setRespStatus(CcnetContants.sespStatus.item_0.getItem());
  194. return wxCuspayStatus;
  195. }
  196. }