diff --git a/propertyManagement-admin/src/main/java/com/propertyManagement/web/controller/business/api/ApiWxPayRecordController.java b/propertyManagement-admin/src/main/java/com/propertyManagement/web/controller/business/api/ApiWxPayRecordController.java index ffd660b8393ffdb74c9adbeffa8f60a9c91643ca..1bc5e6c13ec47f2eaa8660841f98f29d2f56c299 100644 --- a/propertyManagement-admin/src/main/java/com/propertyManagement/web/controller/business/api/ApiWxPayRecordController.java +++ b/propertyManagement-admin/src/main/java/com/propertyManagement/web/controller/business/api/ApiWxPayRecordController.java @@ -4,6 +4,7 @@ import com.propertyManagement.business.domain.bo.WxPayRecordBo; import com.propertyManagement.business.domain.vo.WxPayRecordVo; import com.propertyManagement.business.service.IWxPayRecordService; import com.propertyManagement.business.support.util.AuthUtil; +import com.propertyManagement.common.annotation.Anonymous; import com.propertyManagement.common.annotation.RepeatSubmit; import com.propertyManagement.common.core.controller.BaseController; import com.propertyManagement.common.core.domain.R; @@ -15,6 +16,8 @@ import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.NotNull; import java.util.List; @@ -53,4 +56,19 @@ public class ApiWxPayRecordController extends BaseController { return R.ok(iWxPayRecordService.pay(payReqModel)); } + /** + * 支付回调 + * + * @return 结果 + */ + @Anonymous + @PostMapping("/notify/{orderId}/{payChannelCode}/{payMchCode}/{payAppCode}") + public void callback(HttpServletRequest request, HttpServletResponse response, + @PathVariable String orderId, + @PathVariable String payChannelCode, + @PathVariable String payMchCode, + @PathVariable String payAppCode) { + iWxPayRecordService.payCallback(orderId, payChannelCode, payMchCode, payAppCode); + } + } diff --git a/propertyManagement-business/src/main/java/com/propertyManagement/business/enums/PayBizEnum.java b/propertyManagement-business/src/main/java/com/propertyManagement/business/enums/PayBizEnum.java index b4fa2b30bccb6545d3b520201a2a4955dd591b34..074fcf2e3f66df2538a81fa081829b945e3b61e9 100644 --- a/propertyManagement-business/src/main/java/com/propertyManagement/business/enums/PayBizEnum.java +++ b/propertyManagement-business/src/main/java/com/propertyManagement/business/enums/PayBizEnum.java @@ -5,8 +5,8 @@ import com.siashan.toolkit.core.enums.IBaseEnum; /** * 支付业务枚举 * - * @author siashan - * @date 2023-11-11 + * @author liushuai + * @date 2025-05-27 */ public enum PayBizEnum implements IBaseEnum { diff --git a/propertyManagement-business/src/main/java/com/propertyManagement/business/service/IWxPayRecordService.java b/propertyManagement-business/src/main/java/com/propertyManagement/business/service/IWxPayRecordService.java index 84081466deed8f2466a3071d3103b22e32de7a9b..aeac8d13052b47f4d88ac509c57af234f73a3138 100644 --- a/propertyManagement-business/src/main/java/com/propertyManagement/business/service/IWxPayRecordService.java +++ b/propertyManagement-business/src/main/java/com/propertyManagement/business/service/IWxPayRecordService.java @@ -35,10 +35,19 @@ public interface IWxPayRecordService { List queryList(WxPayRecordBo bo); /** - * 新增缴费记录 + * 支付订单 */ Result pay(PayReqModel payReqModel); + /** + * 支付回调 + * @param orderId + * @param payChannelCode + * @param payMchCode + * @param payAppCode + */ + void payCallback(String orderId, String payChannelCode, String payMchCode, String payAppCode); + /** * 新增缴费记录 */ diff --git a/propertyManagement-business/src/main/java/com/propertyManagement/business/service/impl/WxPayRecordServiceImpl.java b/propertyManagement-business/src/main/java/com/propertyManagement/business/service/impl/WxPayRecordServiceImpl.java index 97a58c2faf59202894a986a4044cad2a3f7b35c4..00efb2de1241ee666e960745faf2bb68a0614a4b 100644 --- a/propertyManagement-business/src/main/java/com/propertyManagement/business/service/impl/WxPayRecordServiceImpl.java +++ b/propertyManagement-business/src/main/java/com/propertyManagement/business/service/impl/WxPayRecordServiceImpl.java @@ -9,6 +9,7 @@ import com.propertyManagement.business.mapper.WxLiveBillMapper; import com.propertyManagement.business.mapper.WxRepairsMapper; import com.propertyManagement.business.support.util.AuthUtil; import com.propertyManagement.common.enums.LiveBillState; +import com.propertyManagement.common.enums.LiveBillType; import com.propertyManagement.common.enums.PayState; import com.propertyManagement.common.enums.RepairsState; import com.propertyManagement.common.utils.StringUtils; @@ -35,6 +36,7 @@ import com.propertyManagement.business.mapper.WxPayRecordMapper; import com.propertyManagement.business.service.IWxPayRecordService; import java.math.BigDecimal; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Collection; @@ -90,6 +92,7 @@ public class WxPayRecordServiceImpl implements IWxPayRecordService { PayBizEnum payBiz = EnumUtil.getEnum(PayBizEnum.class, reqModel.getPayBizCode()); Long orderId = null; BigDecimal payAmount = BigDecimal.ZERO; + Integer orderType = null; String outTradeNo = null; switch (payBiz) { case PRESTORE: @@ -105,6 +108,7 @@ public class WxPayRecordServiceImpl implements IWxPayRecordService { } orderId = wxLiveBill.getBillId(); payAmount = wxLiveBill.getMoney(); + orderType = wxLiveBill.getType(); break; case MAINTAIN: WxRepairs wxRepairs = repairsMapper.selectById(reqModel.getOrderId()); @@ -119,17 +123,49 @@ public class WxPayRecordServiceImpl implements IWxPayRecordService { } orderId = wxRepairs.getRepairsId(); payAmount = wxRepairs.getMoney(); + orderType = LiveBillType.maintain.getCode(); break; default: throw new RuntimeException("支付失败,类型错误"); } - WxPayRecord record = createPayRecord(orderId, payAmount); + WxPayRecord record = createPayRecord(orderId, payAmount, orderType); IPayment payment = CmsUnipayProvider.getPayment(orderId, reqModel.getPayChannelCode(), reqModel.getPayMchCode(), reqModel.getPayAppCode(), reqModel.getPayBizCode()); PayModel payModel = getPayModel(record); return payment.pay(payModel); } - private WxPayRecord createPayRecord(Long orderId, BigDecimal payAmount) { + /** + * @param orderId + * @param payChannelCode + * @param payMchCode + * @param payAppCode + */ + @Override + public void payCallback(String orderId, String payChannelCode, String payMchCode, String payAppCode) { + /** + * 更新支付记录状态 + */ + LambdaQueryWrapper recordLambdaQueryWrapper = Wrappers.lambdaQuery(); + recordLambdaQueryWrapper.eq(WxPayRecord::getOrderId, orderId); + WxPayRecord record = baseMapper.selectOne(recordLambdaQueryWrapper); + record.setPayState(PayState.YES.getCode()); + baseMapper.updateById(record); + /** + * 更新订单状态 + */ + if (record.getOrderType().equals(LiveBillType.maintain.getCode())) { + WxRepairs wxRepairs = repairsMapper.selectById(orderId); + wxRepairs.setState(RepairsState.THREE.getCode()); + wxRepairs.setCompleteTime(new Date()); + repairsMapper.updateById(wxRepairs); + }else { + WxLiveBill wxLiveBill = liveBillMapper.selectById(orderId); + wxLiveBill.setState(LiveBillState.YES.getCode()); + liveBillMapper.updateById(wxLiveBill); + } + } + + private WxPayRecord createPayRecord(Long orderId, BigDecimal payAmount, Integer orderType) { LoginWxUser wxUser = AuthUtil.getWxUser(); WxPayRecord record = new WxPayRecord(); record.setOrderId(orderId); @@ -142,6 +178,7 @@ public class WxPayRecordServiceImpl implements IWxPayRecordService { record.setRoom(wxUser.getRoom()); record.setCommunityId(wxUser.getCommunityId()); record.setCommunityName(wxUser.getCommunityName()); + record.setOrderType(orderType); baseMapper.insert(record); return record; } @@ -152,8 +189,8 @@ public class WxPayRecordServiceImpl implements IWxPayRecordService { payModel.setPrice(record.getPayAmount()); payModel.setOpenid(wxUser.getOpenId()); payModel.setOutTradeNo(record.getOutTradeNo()); - payModel.setBody("订单支付"); - payModel.setSubject("订单支付"); + payModel.setBody(record.getOrderType().equals(LiveBillType.maintain.getCode()) ? "维修费用支付" : "预存支付"); + payModel.setSubject(record.getOrderType().equals(LiveBillType.maintain.getCode()) ? "维修费用支付" : "预存支付"); payModel.setSpbillCreateIp(IpUtils.getIpAddr()); return payModel; } diff --git a/propertyManagement-common/src/main/java/com/propertyManagement/common/enums/LiveBillType.java b/propertyManagement-common/src/main/java/com/propertyManagement/common/enums/LiveBillType.java index e710e3ff513322c3fe2330ed977b17e728be7b15..fb259802c7ef9abfbe854a3aa0a0728800f3c9db 100644 --- a/propertyManagement-common/src/main/java/com/propertyManagement/common/enums/LiveBillType.java +++ b/propertyManagement-common/src/main/java/com/propertyManagement/common/enums/LiveBillType.java @@ -12,7 +12,8 @@ public enum LiveBillType { carport_manage(4, "车位管理费"), carport_lease(5, "车位出租费"), storeroom(6, "储藏室出租"), - other(7, "其他费用"); + other(7, "其他费用"), + maintain(8, "维修费用"); private final Integer code; diff --git a/propertyManagement-pay/src/main/java/com/propertyManagement/pay/domain/bo/CmsPayBizBo.java b/propertyManagement-pay/src/main/java/com/propertyManagement/pay/domain/bo/CmsPayBizBo.java index 3d252cd03267cd1654f2c78c322732f592e572d7..31ef4f96917bd703a0fb075e2891a90ac9aa84a4 100644 --- a/propertyManagement-pay/src/main/java/com/propertyManagement/pay/domain/bo/CmsPayBizBo.java +++ b/propertyManagement-pay/src/main/java/com/propertyManagement/pay/domain/bo/CmsPayBizBo.java @@ -42,7 +42,6 @@ public class CmsPayBizBo extends BaseEntity { /** * 业务简介 */ - @NotBlank(message = "业务简介不能为空", groups = { AddGroup.class, EditGroup.class }) private String bizIntro; /** @@ -54,7 +53,6 @@ public class CmsPayBizBo extends BaseEntity { /** * 是否锁定 0 否 1 是 */ - @NotNull(message = "是否锁定 0 否 1 是不能为空", groups = { AddGroup.class, EditGroup.class }) private Integer isLock; /** @@ -66,13 +64,11 @@ public class CmsPayBizBo extends BaseEntity { /** * 退款回调地址模板 */ - @NotBlank(message = "退款回调地址模板不能为空", groups = { AddGroup.class, EditGroup.class }) private String refundNotifyUrlTmpl; /** * 备注 */ - @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) private String remark;