ApiPayService.java 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. package com.kmall.api.service;
  2. import com.kmall.api.entity.GoodsGroupOpenDetailVo;
  3. import com.kmall.api.entity.GoodsGroupOpenVo;
  4. import com.kmall.api.entity.OrderVo;
  5. import com.kmall.api.entity.PayerChildOrderRealEntity;
  6. import com.kmall.api.service.pay.wxpay.WxPayPropertiesBuilder;
  7. import com.kmall.common.service.FormIdsService;
  8. import com.kmall.common.utils.DateUtils;
  9. import com.kmall.common.utils.MapUtils;
  10. import com.kmall.common.utils.wechat.WechatUtil;
  11. import org.apache.log4j.Logger;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.stereotype.Service;
  14. import org.springframework.transaction.annotation.Transactional;
  15. import java.util.Date;
  16. import java.util.HashMap;
  17. import java.util.List;
  18. import java.util.Map;
  19. /**
  20. * 小程序form_id收集Service实现类
  21. *
  22. * @author Scott
  23. * @email
  24. * @date 2017-12-16 15:32:50
  25. */
  26. @Service
  27. public class ApiPayService {
  28. private static Logger logger = Logger.getLogger(ApiPayService.class);
  29. @Autowired
  30. private ApiOrderService orderService;
  31. @Autowired
  32. private FormIdsService formIdsService;
  33. @Autowired
  34. private ApiGoodsGroupOpenDetailService apiGoodsGroupOpenDetailService;
  35. @Autowired
  36. private ApiGoodsGroupOpenService apiGoodsGroupOpenService;
  37. @Autowired
  38. private PayerChildOrderRealService payerChildOrderRealService;
  39. @Transactional
  40. public void payPrepay(Map<Object, Object> resultObj, Map<String, Object> resultUn, String nonceStr, List<OrderVo> orderVoList) {
  41. String prepay_id = MapUtils.getString("prepay_id", resultUn);
  42. // 先生成paySign 参考https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5
  43. //resultObj.put("appId", ResourceUtil.getConfigByName("wx.appId"));
  44. resultObj.put("appId", WxPayPropertiesBuilder.instance().getAppId());
  45. resultObj.put("timeStamp", DateUtils.timeToStr(System.currentTimeMillis() / 1000, DateUtils.DATE_TIME_PATTERN));
  46. resultObj.put("nonceStr", nonceStr);
  47. resultObj.put("package", "prepay_id=" + prepay_id);
  48. resultObj.put("signType", "MD5");
  49. //String paySign = WechatUtil.arraySign(resultObj, ResourceUtil.getConfigByName("wx.paySignKey"));
  50. String paySign = WechatUtil.arraySign(resultObj, WxPayPropertiesBuilder.instance().getPaySignKey());
  51. resultObj.put("paySign", paySign);
  52. for (OrderVo orderInfo: orderVoList) {
  53. // 业务处理
  54. orderInfo.setPay_id(prepay_id);
  55. orderInfo.setPay_status(1); // 付款中
  56. orderService.update(orderInfo);
  57. PayerChildOrderRealEntity entity = new PayerChildOrderRealEntity();
  58. entity.setGoodsBizType(orderInfo.getOrderBizType());
  59. entity.setOrderSn(orderInfo.getOrder_sn());
  60. entity.setMerchSn(orderInfo.getMerchSn());
  61. entity.setMerchOrderSn(orderInfo.getMerchOrderSn());
  62. entity.setPayNo(orderInfo.getPay_id());
  63. entity.setPayPrice(Integer.parseInt(orderInfo.getActual_price()+""));
  64. entity.setCreateTime(new Date());
  65. entity.setModTime(new Date());
  66. entity.setUserId(Integer.parseInt(orderInfo.getUser_id()+""));
  67. payerChildOrderRealService.save(entity);//记录微信返回的支付单与子订单信息
  68. // 保存form_id
  69. formIdsService.save(orderInfo.getUser_id(), prepay_id, 1);
  70. }
  71. }
  72. @Transactional
  73. public void notify(String out_trade_no) {
  74. // 业务处理
  75. OrderVo orderInfo = orderService.queryObjectByOrderSn(out_trade_no);
  76. orderInfo.setPay_status(2);
  77. orderInfo.setPay_time(new Date());
  78. if (orderInfo.getOrder_status() == 0) {
  79. orderInfo.setOrder_status(201);
  80. }
  81. orderService.update(orderInfo);
  82. // 处理团购
  83. if (null != orderInfo.getOrder_type() && orderInfo.getOrder_type().equals("2")) {
  84. GoodsGroupOpenDetailVo openDetailVo = apiGoodsGroupOpenDetailService.queryObject(orderInfo.getActivity_id());
  85. if (null != openDetailVo) {
  86. openDetailVo.setAttend_status(1);
  87. apiGoodsGroupOpenDetailService.update(openDetailVo);
  88. }
  89. GoodsGroupOpenVo openVo = apiGoodsGroupOpenService.queryObject(openDetailVo.getOpen_id());
  90. openVo.setAttend_num(openVo.getAttend_num() + 1);
  91. if (openVo.getMin_open_group() <= openVo.getAttend_num()) { // 一人拼团,直接结束
  92. openVo.setAttend_status(2);
  93. Map param = new HashMap();
  94. param.put("open_id", openDetailVo.getOpen_id());
  95. apiGoodsGroupOpenDetailService.updateComplete(param);
  96. } else {
  97. openVo.setAttend_status(1);
  98. }
  99. apiGoodsGroupOpenService.update(openVo);
  100. }
  101. // 微信通知
  102. orderService.notifyPaySuccess(orderInfo);
  103. // 打印机打印
  104. try {
  105. orderService.printMsg(orderInfo.getId());
  106. } catch (Exception e) {
  107. logger.error("打印机打印异常【" + e.getMessage() + "】");
  108. }
  109. }
  110. @Transactional
  111. public void refund(OrderVo orderInfo) {
  112. if (orderInfo.getOrder_status() == 201) {
  113. orderInfo.setOrder_status(401);
  114. } else if (orderInfo.getOrder_status() == 300) {
  115. orderInfo.setOrder_status(402);
  116. }
  117. orderInfo.setPay_status(4);
  118. orderService.update(orderInfo);
  119. // 是否是团购订单
  120. if (null != orderInfo.getOrder_type() && orderInfo.getOrder_type().equals("2")) {
  121. GoodsGroupOpenDetailVo openVo = apiGoodsGroupOpenDetailService.queryObject(orderInfo.getActivity_id());
  122. if (null != openVo) {
  123. openVo.setAttend_status(3);
  124. apiGoodsGroupOpenDetailService.update(openVo);
  125. }
  126. }
  127. }
  128. }