ApiPayService.java 4.9 KB

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