rk
4 天以前 e39dda2f25df9680e66c9e0dd3a606149e21bcc5
server/web/src/main/java/com/doumee/api/web/PaymentCallback.java
@@ -4,11 +4,17 @@
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;
@@ -49,6 +55,12 @@
    @Autowired
    private NoticeService noticeService;
    @Autowired
    private SmsrecordMapper smsrecordMapper;
    @Autowired
    private MemberMapper memberMapper;
    // ==================== V2 回调 ====================
@@ -171,12 +183,19 @@
                            .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());
@@ -197,6 +216,51 @@
                        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) {}
                                }
                            }
                        }
                    }
                }
            }