| | |
| | | import com.doumee.config.wx.WxPayV3Service; |
| | | import com.doumee.core.constants.Constants; |
| | | import com.doumee.core.utils.ID; |
| | | import com.doumee.core.utils.aliyun.AliSmsService; |
| | | import com.doumee.dao.business.MemberMapper; |
| | | import com.doumee.dao.business.OrdersRefundMapper; |
| | | import com.doumee.dao.business.OrdersMapper; |
| | | import com.doumee.dao.business.SmsrecordMapper; |
| | | import com.doumee.dao.business.model.Member; |
| | | import com.doumee.dao.business.model.Notice; |
| | | import com.doumee.dao.business.model.Orders; |
| | | import com.doumee.dao.business.model.OrdersRefund; |
| | | import com.doumee.dao.business.model.Smsrecord; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.doumee.service.business.NoticeService; |
| | | import com.doumee.service.business.OrdersService; |
| | | import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse; |
| | |
| | | |
| | | @Autowired |
| | | private NoticeService noticeService; |
| | | |
| | | @Autowired |
| | | private SmsrecordMapper smsrecordMapper; |
| | | |
| | | @Autowired |
| | | private MemberMapper memberMapper; |
| | | |
| | | |
| | | // ==================== V2 回调 ==================== |
| | |
| | | .last("limit 1")); |
| | | if (refundRecord != null) { |
| | | Status refundStatus = refundNotification.getRefundStatus(); |
| | | |
| | | // 幂等判断:已成功/已失败的不重复处理 |
| | | if (!Constants.equalsInteger(refundRecord.getStatus(), Constants.ZERO)) { |
| | | log.info("退款记录已处理, refundRecordId={}, status={}, 跳过", refundRecord.getId(), refundRecord.getStatus()); |
| | | } else { |
| | | if (Status.SUCCESS.equals(refundStatus)) { |
| | | refundRecord.setStatus(Constants.ONE); // 退款成功 |
| | | refundRecord.setRefundTime(new java.util.Date()); |
| | | } else if (Status.CLOSED.equals(refundStatus) || Status.ABNORMAL.equals(refundStatus)) { |
| | | refundRecord.setStatus(Constants.TWO); // 退款失败 |
| | | refundRecord.setRemark("微信退款失败: " + refundStatus.name()); |
| | | } |
| | | // PROCESSING 状态无变化,不更新 |
| | | ordersRefundMapper.updateById(refundRecord); |
| | | log.info("退款记录状态已更新, refundRecordId={}, status={}", refundRecord.getId(), refundRecord.getStatus()); |
| | | |
| | |
| | | notice.setIsdeleted(Constants.ZERO); |
| | | notice.setCreateDate(new java.util.Date()); |
| | | noticeService.create(notice); |
| | | |
| | | // 短信通知会员:退款已完成 |
| | | Member refundMember = memberMapper.selectById(refundOrder.getMemberId()); |
| | | if (refundMember != null && StringUtils.isNotBlank(refundMember.getTelephone())) { |
| | | String smsContent = Constants.SmsNotify.MEMBER_REFUNDED.format( |
| | | "orderNo", refundOrder.getCode(), |
| | | "money", String.valueOf(Constants.getFormatMoney( |
| | | refundOrder.getRefundAmount() != null ? refundOrder.getRefundAmount() : 0L))); |
| | | try { |
| | | JSONObject templateParam = new JSONObject(); |
| | | templateParam.put("orderNo", refundOrder.getCode()); |
| | | templateParam.put("money", String.valueOf(Constants.getFormatMoney( |
| | | refundOrder.getRefundAmount() != null ? refundOrder.getRefundAmount() : 0L))); |
| | | boolean smsResult = AliSmsService.sendSms(refundMember.getTelephone(), |
| | | Constants.SmsNotify.MEMBER_REFUNDED.getTemplateCode(), |
| | | templateParam.toJSONString()); |
| | | if (smsResult) { |
| | | log.info("退款短信发送成功: phone={}", refundMember.getTelephone()); |
| | | } else { |
| | | log.warn("退款短信发送失败: phone={}", refundMember.getTelephone()); |
| | | } |
| | | // 存储短信记录 |
| | | Smsrecord smsRecord = new Smsrecord(); |
| | | smsRecord.setPhone(refundMember.getTelephone()); |
| | | smsRecord.setContent(smsContent); |
| | | smsRecord.setType(Constants.ONE); |
| | | smsRecord.setStatus(smsResult ? Constants.ONE : Constants.ZERO); |
| | | smsRecord.setCreateTime(new java.util.Date()); |
| | | smsRecord.setDeleted(Constants.ZERO); |
| | | smsrecordMapper.insert(smsRecord); |
| | | } catch (Exception smsEx) { |
| | | log.error("退款短信发送异常: {}", smsEx.getMessage()); |
| | | try { |
| | | Smsrecord smsRecord = new Smsrecord(); |
| | | smsRecord.setPhone(refundMember.getTelephone()); |
| | | smsRecord.setContent(smsContent); |
| | | smsRecord.setType(Constants.ONE); |
| | | smsRecord.setStatus(Constants.ZERO); |
| | | smsRecord.setCreateTime(new java.util.Date()); |
| | | smsRecord.setDeleted(Constants.ZERO); |
| | | smsrecordMapper.insert(smsRecord); |
| | | } catch (Exception ignored) {} |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |