diff --git a/bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/query/VipOrderExtQuery.java b/bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/bean/query/VipOrderExtQuery.java similarity index 91% rename from bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/query/VipOrderExtQuery.java rename to bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/bean/query/VipOrderExtQuery.java index 7d37f3f..58d671e 100644 --- a/bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/query/VipOrderExtQuery.java +++ b/bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/bean/query/VipOrderExtQuery.java @@ -1,4 +1,4 @@ -package com.bnyer.order.api.query; +package com.bnyer.order.api.bean.query; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; diff --git a/bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/query/VipOrderQuery.java b/bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/bean/query/VipOrderQuery.java similarity index 90% rename from bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/query/VipOrderQuery.java rename to bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/bean/query/VipOrderQuery.java index c772a84..55646b2 100644 --- a/bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/query/VipOrderQuery.java +++ b/bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/bean/query/VipOrderQuery.java @@ -1,4 +1,4 @@ -package com.bnyer.order.api.query; +package com.bnyer.order.api.bean.query; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; diff --git a/bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/vo/VipOrderVo.java b/bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/bean/vo/VipOrderVo.java similarity index 89% rename from bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/vo/VipOrderVo.java rename to bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/bean/vo/VipOrderVo.java index 9c1c480..19a207d 100644 --- a/bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/vo/VipOrderVo.java +++ b/bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/bean/vo/VipOrderVo.java @@ -1,4 +1,4 @@ -package com.bnyer.order.api.vo; +package com.bnyer.order.api.bean.vo; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; @@ -63,7 +63,7 @@ public class VipOrderVo { @ApiModelProperty(value = "vip类型名称") private String vipTypeName; - @ApiModelProperty(value="支付状态:1000未支付;1001支付成功 ;1002支付失败") - private Integer payStatus; + @ApiModelProperty(value="订单状态:0待付款;1已付款;2已退款;3支付超时取消;4买家取消") + private Integer orderStatus; } diff --git a/bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/factory/RemoteVipOrderFallbackFactory.java b/bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/factory/RemoteVipOrderFallbackFactory.java index dc47c56..47c3b58 100644 --- a/bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/factory/RemoteVipOrderFallbackFactory.java +++ b/bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/factory/RemoteVipOrderFallbackFactory.java @@ -1,10 +1,10 @@ package com.bnyer.order.api.factory; import com.bnyer.common.core.domain.R; -import com.bnyer.order.api.query.VipOrderQuery; -import com.bnyer.order.api.query.VipOrderExtQuery; +import com.bnyer.order.api.bean.query.VipOrderQuery; +import com.bnyer.order.api.bean.query.VipOrderExtQuery; import com.bnyer.order.api.remote.RemoteVipOrderService; -import com.bnyer.order.api.vo.VipOrderVo; +import com.bnyer.order.api.bean.vo.VipOrderVo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; diff --git a/bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/remote/RemoteVipOrderService.java b/bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/remote/RemoteVipOrderService.java index 3fd1e45..e17d4f0 100644 --- a/bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/remote/RemoteVipOrderService.java +++ b/bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/remote/RemoteVipOrderService.java @@ -3,9 +3,9 @@ package com.bnyer.order.api.remote; import com.bnyer.common.core.constant.ServiceNameConstants; import com.bnyer.common.core.domain.R; import com.bnyer.order.api.factory.RemoteVipOrderFallbackFactory; -import com.bnyer.order.api.query.VipOrderQuery; -import com.bnyer.order.api.query.VipOrderExtQuery; -import com.bnyer.order.api.vo.VipOrderVo; +import com.bnyer.order.api.bean.query.VipOrderQuery; +import com.bnyer.order.api.bean.query.VipOrderExtQuery; +import com.bnyer.order.api.bean.vo.VipOrderVo; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/PayInfo.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/PayInfo.java index c642fb1..4fbee11 100644 --- a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/PayInfo.java +++ b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/PayInfo.java @@ -171,6 +171,48 @@ public class PayInfo extends BaseDomain { @ApiModelProperty(value="调用第三方下单返回") private String thirdNo; + /** + * 退款状态 1000 未退款 1001退款失败 1002 退款成功 1003 退款中 + */ + @TableField(value = "refund_status") + @ApiModelProperty(value="退款状态 1000 未退款 1001退款失败 1002 退款成功 1003 退款中") + private Integer refundStatus; + + /** + * 退款时间 + */ + @TableField(value = "refund_time") + @ApiModelProperty(value="退款时间") + private Date refundTime; + + /** + * 退款金额 + */ + @TableField(value = "refund_amount") + @ApiModelProperty(value="退款金额") + private BigDecimal refundAmount; + + /** + * 退款流水号(第三方返回) + */ + @TableField(value = "refund_no") + @ApiModelProperty(value="退款流水号(第三方返回)") + private String refundNo; + + /** + * 退款接口调用code(第三方返回) + */ + @TableField(value = "refund_code") + @ApiModelProperty(value="退款接口调用code(第三方返回)") + private String refundCode; + + /** + * 退款接口调用msg(第三方返回) + */ + @TableField(value = "refund_msg") + @ApiModelProperty(value="退款接口调用msg(第三方返回)") + private String refundMsg; + /** * 备注 */ diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/VipOrder.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/VipOrder.java index 7f50451..17baabb 100644 --- a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/VipOrder.java +++ b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/VipOrder.java @@ -114,16 +114,9 @@ public class VipOrder extends BaseDomain { * 订单状态:0未处理;1成功;2失败 */ @TableField(value = "order_status") - @ApiModelProperty(value="订单状态:0未处理;1成功;2失败") + @ApiModelProperty(value="订单状态:0待付款;1已付款;2已退款;3支付超时取消;4买家取消") private Integer orderStatus; - /** - * 订单关闭原因:0超时未支付; 1买家取消 - */ - @TableField(value = "close_type") - @ApiModelProperty(value="订单关闭原因:0超时未支付; 1买家取消") - private Integer closeType; - /** * 支付时间 */ @@ -159,10 +152,4 @@ public class VipOrder extends BaseDomain { @ApiModelProperty(value="备注") private String remark; - /** - * 支付状态:1000未支付;1001支付成功 ;1002支付失败 - */ - @TableField(value = "pay_status") - @ApiModelProperty(value="支付状态:1000未支付;1001支付成功 ;1002支付失败") - private Integer payStatus; } diff --git a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/enums/EnumVipOrderStatus.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/EnumVipOrderStatus.java similarity index 69% rename from bnyer-services/bnyer-order/src/main/java/com/bnyer/order/enums/EnumVipOrderStatus.java rename to bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/EnumVipOrderStatus.java index 45fd1e5..cfd38fd 100644 --- a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/enums/EnumVipOrderStatus.java +++ b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/EnumVipOrderStatus.java @@ -1,4 +1,4 @@ -package com.bnyer.order.enums; +package com.bnyer.common.core.enums; import lombok.AllArgsConstructor; import lombok.Getter; @@ -11,9 +11,11 @@ import lombok.Getter; @AllArgsConstructor public enum EnumVipOrderStatus { - NOT_PROCESS(0,"未处理"), - SUCCESS(1,"成功"), - FAILS(2,"失败"), + WAIT_PAY(0,"待付款"), + SUCCESS(1,"已付款"), + REFUNDED(2,"已退款"), + PAY_TIMEOUT_CLOSE(3,"支付超时取消"), + CANCEL_CLOSE(4,"买家取消"), ; private final int status; diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/ResponseEnum.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/ResponseEnum.java index e0fd2ea..e018622 100644 --- a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/ResponseEnum.java +++ b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/ResponseEnum.java @@ -29,6 +29,9 @@ public enum ResponseEnum { */ REPEAT_ORDER(210002,"请勿重复提交订单"), + ORDER_CANCEL(210003, "该订单已取消,请重新下单!"), + ORDER_REPEAT_PAY(210004, "该订单已支付,请勿重复支付!"), + //======================第三方接口调用异常======================== diff --git a/bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/utils/SecurityUtils.java b/bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/utils/SecurityUtils.java index d5d701e..c0a9ac3 100644 --- a/bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/utils/SecurityUtils.java +++ b/bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/utils/SecurityUtils.java @@ -34,89 +34,83 @@ public class SecurityUtils * @return - */ public static UserInfoVo getUserInfo(){ - UserInfoVo userInfoVo = new UserInfoVo(); - userInfoVo.setId(1L); - userInfoVo.setOpenId("iHbleh46vtOeGeyl91XOkdTrgjAv5BL6Sf64txO21gE="); - userInfoVo.setUserClientType(EnumUserClientType.WU.getType()); - return userInfoVo; - // TODO: 2023/05/10 暂时屏蔽 -// String platform = ServletUtils.getRequest().getHeader("platform"); -// if(StringUtils.isBlank(platform)){ -// throw new ServiceException(ResponseEnum.NOT_AUTH); -// } -// EnumUserClientType userClientType = EnumUserClientType.getTypeByCode(platform); -// switch (userClientType){ -// case DU: -// UserInfoVo tiktokUserInfo = new UserInfoVo(); -// LoginTiktokUser loginTikTokUser = getLoginTikTokUser(); -// tiktokUserInfo.setId(loginTikTokUser.getTiktokUserId()); -// tiktokUserInfo.setOpenId(loginTikTokUser.getTiktokUserOpenId()); -// tiktokUserInfo.setUserName(loginTikTokUser.getTiktokUserName()); -// tiktokUserInfo.setIpaddr(loginTikTokUser.getIpaddr()); -// tiktokUserInfo.setLastLoginTime(loginTikTokUser.getLoginTime()); -// tiktokUserInfo.setImg(loginTikTokUser.getTiktokUser().getImg()); -// tiktokUserInfo.setIsVip(loginTikTokUser.getTiktokUser().getIsVip()); -// tiktokUserInfo.setCreateTime(loginTikTokUser.getTiktokUser().getCreateTime()); -// tiktokUserInfo.setUpdateTime(loginTikTokUser.getTiktokUser().getUpdateTime()); -// tiktokUserInfo.setSort(loginTikTokUser.getTiktokUser().getSort()); -// tiktokUserInfo.setUserClientType(userClientType.getType()); -// return tiktokUserInfo; -// case WU: -// UserInfoVo wechatUserInfo = new UserInfoVo(); -// LoginWechatUser loginWechatUser = getLoginWechatUser(); -// wechatUserInfo.setId(loginWechatUser.getWxUserId()); -// wechatUserInfo.setOpenId(loginWechatUser.getWxUserOpenId()); -// wechatUserInfo.setUserName(loginWechatUser.getWxUserName()); -// wechatUserInfo.setIpaddr(loginWechatUser.getIpaddr()); -// wechatUserInfo.setLastLoginTime(loginWechatUser.getLoginTime()); -// wechatUserInfo.setImg(loginWechatUser.getWxUser().getImg()); -// wechatUserInfo.setIsVip(loginWechatUser.getWxUser().getIsVip()); -// wechatUserInfo.setCreateTime(loginWechatUser.getWxUser().getCreateTime()); -// wechatUserInfo.setUpdateTime(loginWechatUser.getWxUser().getUpdateTime()); -// wechatUserInfo.setSort(loginWechatUser.getWxUser().getSort()); -// wechatUserInfo.setUserClientType(userClientType.getType()); -// return wechatUserInfo; -// case KU: -// UserInfoVo fhUserInfo = new UserInfoVo(); -// LoginFhUser loginFhUser = getLoginFhUser(); -// fhUserInfo.setId(loginFhUser.getFhUserId()); -// fhUserInfo.setOpenId(loginFhUser.getFhUserOpenId()); -// fhUserInfo.setUserName(loginFhUser.getFhUserName()); -// fhUserInfo.setIpaddr(loginFhUser.getIpaddr()); -// fhUserInfo.setLastLoginTime(loginFhUser.getLoginTime()); -// fhUserInfo.setImg(loginFhUser.getFhUser().getImg()); -// fhUserInfo.setIsVip(loginFhUser.getFhUser().getIsVip()); -// fhUserInfo.setCreateTime(loginFhUser.getFhUser().getCreateTime()); -// fhUserInfo.setUpdateTime(loginFhUser.getFhUser().getUpdateTime()); -// fhUserInfo.setSort(loginFhUser.getFhUser().getSort()); -// fhUserInfo.setUserClientType(userClientType.getType()); -// return fhUserInfo; -// case WY: -// UserInfoVo creatorInfo = new UserInfoVo(); -// LoginCreator loginCreator = getLoginCreator(); -// creatorInfo.setId(loginCreator.getCreatorId()); -// creatorInfo.setPhone(loginCreator.getCreatorPhone()); -// creatorInfo.setScanCode(loginCreator.getCreator().getScanCode()); -// creatorInfo.setAmt(loginCreator.getCreator().getAmt()); -// creatorInfo.setInviteCode(loginCreator.getCreator().getInviteCode()); -// creatorInfo.setStatus(loginCreator.getCreator().getStatus()); -// creatorInfo.setUrl(loginCreator.getCreator().getUrl()); -// creatorInfo.setIsHot(loginCreator.getCreator().getIsHot()); -// creatorInfo.setIsShow(loginCreator.getCreator().getIsShow()); -// creatorInfo.setIntro(loginCreator.getCreator().getIntro()); -// creatorInfo.setUserName(loginCreator.getCreator().getName()); -// creatorInfo.setIpaddr(loginCreator.getIpaddr()); -// creatorInfo.setLastLoginTime(loginCreator.getLoginTime()); -// creatorInfo.setImg(loginCreator.getCreator().getImg()); -// creatorInfo.setIsShow(loginCreator.getCreator().getIsShow()); -// creatorInfo.setCreateTime(loginCreator.getCreator().getCreateTime()); -// creatorInfo.setUpdateTime(loginCreator.getCreator().getUpdateTime()); -// creatorInfo.setSort(loginCreator.getCreator().getSort()); -// creatorInfo.setUserClientType(userClientType.getType()); -// return creatorInfo; -// default: -// throw new ServiceException("userClientType 未匹配上对应用户类型"); -// } + String platform = ServletUtils.getRequest().getHeader("platform"); + if(StringUtils.isBlank(platform)){ + throw new ServiceException(ResponseEnum.NOT_AUTH); + } + EnumUserClientType userClientType = EnumUserClientType.getTypeByCode(platform); + switch (userClientType){ + case DU: + UserInfoVo tiktokUserInfo = new UserInfoVo(); + LoginTiktokUser loginTikTokUser = getLoginTikTokUser(); + tiktokUserInfo.setId(loginTikTokUser.getTiktokUserId()); + tiktokUserInfo.setOpenId(loginTikTokUser.getTiktokUserOpenId()); + tiktokUserInfo.setUserName(loginTikTokUser.getTiktokUserName()); + tiktokUserInfo.setIpaddr(loginTikTokUser.getIpaddr()); + tiktokUserInfo.setLastLoginTime(loginTikTokUser.getLoginTime()); + tiktokUserInfo.setImg(loginTikTokUser.getTiktokUser().getImg()); + tiktokUserInfo.setIsVip(loginTikTokUser.getTiktokUser().getIsVip()); + tiktokUserInfo.setCreateTime(loginTikTokUser.getTiktokUser().getCreateTime()); + tiktokUserInfo.setUpdateTime(loginTikTokUser.getTiktokUser().getUpdateTime()); + tiktokUserInfo.setSort(loginTikTokUser.getTiktokUser().getSort()); + tiktokUserInfo.setUserClientType(userClientType.getType()); + return tiktokUserInfo; + case WU: + UserInfoVo wechatUserInfo = new UserInfoVo(); + LoginWechatUser loginWechatUser = getLoginWechatUser(); + wechatUserInfo.setId(loginWechatUser.getWxUserId()); + wechatUserInfo.setOpenId(loginWechatUser.getWxUserOpenId()); + wechatUserInfo.setUserName(loginWechatUser.getWxUserName()); + wechatUserInfo.setIpaddr(loginWechatUser.getIpaddr()); + wechatUserInfo.setLastLoginTime(loginWechatUser.getLoginTime()); + wechatUserInfo.setImg(loginWechatUser.getWxUser().getImg()); + wechatUserInfo.setIsVip(loginWechatUser.getWxUser().getIsVip()); + wechatUserInfo.setCreateTime(loginWechatUser.getWxUser().getCreateTime()); + wechatUserInfo.setUpdateTime(loginWechatUser.getWxUser().getUpdateTime()); + wechatUserInfo.setSort(loginWechatUser.getWxUser().getSort()); + wechatUserInfo.setUserClientType(userClientType.getType()); + return wechatUserInfo; + case KU: + UserInfoVo fhUserInfo = new UserInfoVo(); + LoginFhUser loginFhUser = getLoginFhUser(); + fhUserInfo.setId(loginFhUser.getFhUserId()); + fhUserInfo.setOpenId(loginFhUser.getFhUserOpenId()); + fhUserInfo.setUserName(loginFhUser.getFhUserName()); + fhUserInfo.setIpaddr(loginFhUser.getIpaddr()); + fhUserInfo.setLastLoginTime(loginFhUser.getLoginTime()); + fhUserInfo.setImg(loginFhUser.getFhUser().getImg()); + fhUserInfo.setIsVip(loginFhUser.getFhUser().getIsVip()); + fhUserInfo.setCreateTime(loginFhUser.getFhUser().getCreateTime()); + fhUserInfo.setUpdateTime(loginFhUser.getFhUser().getUpdateTime()); + fhUserInfo.setSort(loginFhUser.getFhUser().getSort()); + fhUserInfo.setUserClientType(userClientType.getType()); + return fhUserInfo; + case WY: + UserInfoVo creatorInfo = new UserInfoVo(); + LoginCreator loginCreator = getLoginCreator(); + creatorInfo.setId(loginCreator.getCreatorId()); + creatorInfo.setPhone(loginCreator.getCreatorPhone()); + creatorInfo.setScanCode(loginCreator.getCreator().getScanCode()); + creatorInfo.setAmt(loginCreator.getCreator().getAmt()); + creatorInfo.setInviteCode(loginCreator.getCreator().getInviteCode()); + creatorInfo.setStatus(loginCreator.getCreator().getStatus()); + creatorInfo.setUrl(loginCreator.getCreator().getUrl()); + creatorInfo.setIsHot(loginCreator.getCreator().getIsHot()); + creatorInfo.setIsShow(loginCreator.getCreator().getIsShow()); + creatorInfo.setIntro(loginCreator.getCreator().getIntro()); + creatorInfo.setUserName(loginCreator.getCreator().getName()); + creatorInfo.setIpaddr(loginCreator.getIpaddr()); + creatorInfo.setLastLoginTime(loginCreator.getLoginTime()); + creatorInfo.setImg(loginCreator.getCreator().getImg()); + creatorInfo.setIsShow(loginCreator.getCreator().getIsShow()); + creatorInfo.setCreateTime(loginCreator.getCreator().getCreateTime()); + creatorInfo.setUpdateTime(loginCreator.getCreator().getUpdateTime()); + creatorInfo.setSort(loginCreator.getCreator().getSort()); + creatorInfo.setUserClientType(userClientType.getType()); + return creatorInfo; + default: + throw new ServiceException("userClientType 未匹配上对应用户类型"); + } } //******************************通用获取信息结束********************************************* diff --git a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/bean/dto/CancelVipOrderDto.java b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/bean/dto/CancelVipOrderDto.java new file mode 100644 index 0000000..10bcab9 --- /dev/null +++ b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/bean/dto/CancelVipOrderDto.java @@ -0,0 +1,26 @@ +package com.bnyer.order.bean.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.hibernate.validator.constraints.Range; + +import java.util.List; + +/** + * @author :WXC + * @Date :2023/05/11 + * @description : + */ +@Getter +@Setter +@NoArgsConstructor +public class CancelVipOrderDto { + @ApiModelProperty(value = "订单号") + private List orderNos; + @ApiModelProperty(value = "订单状态:4支付超时取消;5买家取消") + @Range(min = 4,max = 5,message = "订单状态:4支付超时取消;5买家取消") + private Integer orderStatus; + +} diff --git a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/bean/vo/VipOrderVo.java b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/bean/vo/VipOrderVo.java index 47bc734..8ef8f5b 100644 --- a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/bean/vo/VipOrderVo.java +++ b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/bean/vo/VipOrderVo.java @@ -63,7 +63,7 @@ public class VipOrderVo { @ApiModelProperty(value = "vip类型名称") private String vipTypeName; - @ApiModelProperty(value="支付状态:1000未支付;1001支付成功 ;1002支付失败") - private Integer payStatus; + @ApiModelProperty(value="订单状态:0待付款;1已付款;2已退款;3支付超时取消;4买家取消") + private Integer orderStatus; } diff --git a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/listener/vip/VipOrderCancelConsumer.java b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/listener/vip/VipOrderCancelConsumer.java index 028cdf4..c9b7800 100644 --- a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/listener/vip/VipOrderCancelConsumer.java +++ b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/listener/vip/VipOrderCancelConsumer.java @@ -1,6 +1,7 @@ package com.bnyer.order.listener.vip; import com.bnyer.common.rocketmq.config.RocketMqConstant; +import com.bnyer.order.bean.dto.CancelVipOrderDto; import com.bnyer.order.service.VipOrderService; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; @@ -26,6 +27,9 @@ public class VipOrderCancelConsumer implements RocketMQListener { public void onMessage(String orderNo) { log.info("收到消息:{}", orderNo); // 如果订单未支付的话,将订单设为取消状态 - vipOrderService.cancelVipOrder(Lists.newArrayList(orderNo),0); + CancelVipOrderDto cancelVipOrderDto = new CancelVipOrderDto(); + cancelVipOrderDto.setOrderStatus(3); + cancelVipOrderDto.setOrderNos(Lists.newArrayList(orderNo)); + vipOrderService.cancelVipOrder(cancelVipOrderDto); } } diff --git a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/mapper/VipOrderMapper.java b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/mapper/VipOrderMapper.java index 6c09ce1..1ed18d5 100644 --- a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/mapper/VipOrderMapper.java +++ b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/mapper/VipOrderMapper.java @@ -26,7 +26,7 @@ public interface VipOrderMapper extends BaseMapper { * 取消订单 * @param orderNos */ - void cancelVipOrder(@Param("orderNos") List orderNos, @Param("closeType") Integer closeType); + void cancelVipOrder(@Param("orderNos") List orderNos, @Param("orderStatus") Integer orderStatus); /** * 修改订单表状态为已支付 diff --git a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/VipOrderService.java b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/VipOrderService.java index b28a394..74054e3 100644 --- a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/VipOrderService.java +++ b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/VipOrderService.java @@ -3,6 +3,7 @@ package com.bnyer.order.service; import com.baomidou.mybatisplus.extension.service.IService; import com.bnyer.common.core.domain.VipOrder; import com.bnyer.order.bean.dto.AddVipOrderDto; +import com.bnyer.order.bean.dto.CancelVipOrderDto; import com.bnyer.order.bean.query.VipOrderExtQuery; import com.bnyer.order.bean.query.VipOrderQuery; import com.bnyer.order.bean.vo.VipOrderVo; @@ -26,10 +27,8 @@ public interface VipOrderService extends IService { /** * 取消订单 - * @param orderNos 订单号 - * @param closeType 订单关闭原因类型 */ - void cancelVipOrder(List orderNos,Integer closeType); + void cancelVipOrder(CancelVipOrderDto cancelVipOrderDto); /** * 查询会员订单列表信息 diff --git a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/impl/VipOrderServiceImpl.java b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/impl/VipOrderServiceImpl.java index 042c469..faea940 100644 --- a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/impl/VipOrderServiceImpl.java +++ b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/impl/VipOrderServiceImpl.java @@ -19,10 +19,11 @@ import com.bnyer.common.security.utils.SecurityUtils; import com.bnyer.img.api.remote.RemoteUserVipService; import com.bnyer.img.api.vo.UserVipVo; import com.bnyer.order.bean.dto.AddVipOrderDto; +import com.bnyer.order.bean.dto.CancelVipOrderDto; import com.bnyer.order.bean.query.VipOrderQuery; import com.bnyer.order.bean.query.VipOrderExtQuery; import com.bnyer.order.bean.vo.VipOrderVo; -import com.bnyer.order.enums.EnumVipOrderStatus; +import com.bnyer.common.core.enums.EnumVipOrderStatus; import com.bnyer.order.mapper.VipOrderMapper; import com.bnyer.order.service.VipOrderService; import lombok.extern.slf4j.Slf4j; @@ -180,22 +181,22 @@ public class VipOrderServiceImpl extends ServiceImpl i /** * 取消订单 - * @param orderNos 订单id - * @param closeType 订单关闭原因类型 */ - @Transactional(rollbackFor = Exception.class) @Override - public void cancelVipOrder(List orderNos,Integer closeType) { + public void cancelVipOrder(CancelVipOrderDto cancelVipOrderDto) { + List orderNos = cancelVipOrderDto.getOrderNos(); + Integer orderStatus = cancelVipOrderDto.getOrderStatus(); List vipOrderList = vipOrderMapper.selectList(new LambdaQueryWrapper().in(VipOrder::getOrderNo, orderNos)); if (CollUtil.isEmpty(vipOrderList)){ return; } - List cancelOrderNos = vipOrderList.stream().filter(vipOrder -> Objects.nonNull(vipOrder.getOrderStatus()) && EnumVipOrderStatus.FAILS.getStatus() - != vipOrder.getOrderStatus()).map(VipOrder::getOrderNo).collect(Collectors.toList()); + List cancelOrderNos = vipOrderList.stream().filter(vipOrder -> Objects.nonNull(vipOrder.getOrderStatus()) + && EnumVipOrderStatus.CANCEL_CLOSE.getStatus() != vipOrder.getOrderStatus() + && EnumVipOrderStatus.PAY_TIMEOUT_CLOSE.getStatus() != vipOrder.getOrderStatus()).map(VipOrder::getOrderNo).collect(Collectors.toList()); if (CollUtil.isEmpty(cancelOrderNos)){ return; } - vipOrderMapper.cancelVipOrder(cancelOrderNos,closeType); + vipOrderMapper.cancelVipOrder(cancelOrderNos,orderStatus); } @@ -205,7 +206,6 @@ public class VipOrderServiceImpl extends ServiceImpl i */ @Override public void updateByToPaySuccess(VipOrder vipOrder) { - vipOrder.setPayStatus(EnumPayStatus.SUCCESS.getStatus()); vipOrder.setOrderStatus(EnumVipOrderStatus.SUCCESS.getStatus()); vipOrder.setUpdateTime(new Date()); vipOrder.setPayTime(new Date()); diff --git a/bnyer-services/bnyer-order/src/main/resources/com/bnyer/order/mapper/VipOrderMapper.xml b/bnyer-services/bnyer-order/src/main/resources/com/bnyer/order/mapper/VipOrderMapper.xml index 1a20417..acd6a80 100644 --- a/bnyer-services/bnyer-order/src/main/resources/com/bnyer/order/mapper/VipOrderMapper.xml +++ b/bnyer-services/bnyer-order/src/main/resources/com/bnyer/order/mapper/VipOrderMapper.xml @@ -18,12 +18,10 @@ - - @@ -45,12 +43,10 @@ o.start_time, o.end_time, o.order_status, - o.close_type, o.pay_time, o.cancel_time, o.user_client_type, o.remark, - o.pay_status, o.sort, o.is_show, o.create_time, @@ -73,20 +69,18 @@ update order_vip_order set - order_status = 2, - close_type = #{closeType,jdbcType=VARCHAR}, + order_status = #{orderStatus}, cancel_time = now(), update_time=now() - where pay_status = 1000 and order_no in - - #{orderNo} - + where order_no in + + #{orderNo} + update order_vip_order set order_status = 1, - pay_status = 1001, pay_time = now(), update_time = now() where order_no = #{orderNo} diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/AddPayInfoDto.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/AddPayInfoDto.java index 7ed3f77..50fa77f 100644 --- a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/AddPayInfoDto.java +++ b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/AddPayInfoDto.java @@ -50,9 +50,6 @@ public class AddPayInfoDto extends BaseDto { @ApiModelProperty(value="支付单号(第三方返回)") private String payNo; - @ApiModelProperty(value="用户侧订单号(第三方返回)") - private String tradeNo; - @ApiModelProperty(value="appid") private String appid; diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/UnifiedOrderDto.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/UnifiedOrderDto.java index aed3d82..2165961 100644 --- a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/UnifiedOrderDto.java +++ b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/UnifiedOrderDto.java @@ -35,6 +35,9 @@ public class UnifiedOrderDto { @CustomParamsValidation(range = "1",message = "交易类型暂时只支持JSAPI") private String tradeType; + @ApiModelProperty(value = "用户开放平台id,优先使用传入的,如果不传默认从登录信息中获取") + private String openId; + @ApiModelProperty(value="备注") private String remark; } diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/vo/ThirdUnifiedOrderVo.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/vo/ThirdUnifiedOrderVo.java index 7bc707f..61e60fc 100644 --- a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/vo/ThirdUnifiedOrderVo.java +++ b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/vo/ThirdUnifiedOrderVo.java @@ -1,5 +1,6 @@ package com.bnyer.pay.bean.vo; +import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModelProperty; import lombok.*; @@ -18,6 +19,15 @@ public class ThirdUnifiedOrderVo implements Serializable { @ApiModelProperty(value = "应用id") private String appId; + @ApiModelProperty(value="调用第三方下单返回") + private String thirdCode; + + @ApiModelProperty(value="调用第三方下单返回") + private String thirdMsg; + + @ApiModelProperty(value="调用第三方下单返回") + private String thirdNo; + @ApiModelProperty(value = "内部系统支付单号/开发者测单号") private String outOrderNo; diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AbstractPayStrategy.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AbstractPayStrategy.java index f066e7a..f5d5a59 100644 --- a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AbstractPayStrategy.java +++ b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AbstractPayStrategy.java @@ -46,7 +46,7 @@ public abstract class AbstractPayStrategy implements IPayStrategy { RLock rLock = redissonService.getRLock(RedisKeyConstant.PAY_NOTIFY_LOCK_KEY + checkDto.getPayId()); try{ if(rLock.tryLock(2L, 10L, TimeUnit.SECONDS)){ - PayInfoDetailsVo payInfoDetailsVo = payInfoService.queryPayInfo(checkDto.getPayId()); + PayInfoDetailsVo payInfoDetailsVo = payInfoService.queryPayInfoDetails(checkDto.getPayId()); log.info("查询到支付订单信息为:{}", JSON.toJSONString(payInfoDetailsVo)); //订单中的金额 String payInfoPayAmount = payInfoDetailsVo.getPayAmount().toString(); diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AliPayStrategy.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AliPayStrategy.java index 33e2c41..f088f4b 100644 --- a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AliPayStrategy.java +++ b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AliPayStrategy.java @@ -86,15 +86,19 @@ public class AliPayStrategy extends AbstractPayStrategy { model.setTotalAmount(bo.getPayAmount()); request.setBizModel(model); request.setNotifyUrl(backurl); + ThirdUnifiedOrderVo vo = new ThirdUnifiedOrderVo(); try { // 这里和普通的接口调用不同,使用的是sdkExecute AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request); if(response.isSuccess()){ - ThirdUnifiedOrderVo vo = new ThirdUnifiedOrderVo(); ThirdUnifiedOrderVo.AliThirdInOrderVo aliThirdInOrderVo = new ThirdUnifiedOrderVo.AliThirdInOrderVo(); aliThirdInOrderVo.setOutStr(response.getBody()); vo.setAliThirdInOrderVo(aliThirdInOrderVo); vo.setOutOrderNo(bo.getPayId()); + //第三方下单返回 + vo.setThirdCode(response.getCode()); + vo.setThirdMsg(response.getMsg()); + vo.setThirdNo(response.getTradeNo()); return vo; }else{ throw new ServiceException(response.getMsg()); @@ -155,7 +159,7 @@ public class AliPayStrategy extends AbstractPayStrategy { editPayInfoNotifyDto.setPayAmount(totalAmount); editPayInfoNotifyDto.setAppId(appId); editPayInfoNotifyDto.setPayNo(tradeNo); - editPayInfoNotifyDto.setPayChannel(EnumPayChannel.getPayChannelName("alipay",EnumPayType.ALI_PAY)); + editPayInfoNotifyDto.setPayChannel(EnumPayChannel.ALI_PAY.getName()); payInfoService.editPayInfoNotify(editPayInfoNotifyDto); }else if(tradeStatus.equals("TRADE_CLOSED")){ log.info("支付宝支付回调:TRADE_CLOSED 状态不做处理"); diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/DYPayStrategy.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/DYPayStrategy.java index eec946e..66914d1 100644 --- a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/DYPayStrategy.java +++ b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/DYPayStrategy.java @@ -54,6 +54,8 @@ public class DYPayStrategy extends AbstractPayStrategy{ private static DypayConfigMapper dypayConfigMapper; + private final static String failThirdCode = "-1"; + @Autowired public void setBean(DYPayUtil dyPayUtil, PayRestTemplateUtil payRestTemplateUtil, PayInfoService payInfoService,DypayConfigMapper dypayConfigMapper) { @@ -129,32 +131,45 @@ public class DYPayStrategy extends AbstractPayStrategy{ log.info("=================================="); log.info("抖音预下单result{}", result); log.info("=================================="); - if (StringUtils.isBlank(result)){ - log.error("抖音支付:统一下单接口调用失败,payId:{},error{}", bo.getPayId(), "请求结果返回为空"); - throw new ServiceException(ResponseEnum.PAY_FAILS); + ThirdUnifiedOrderVo thirdUnifiedOrderVo = new ThirdUnifiedOrderVo(); + thirdUnifiedOrderVo.setAppId(appId); + if (StringUtils.isBlank(result) || !result.startsWith("{")){ + log.error("抖音支付:统一下单接口调用失败,payId:{},error{}", bo.getPayId(), "第三方返回格式有误!"); + thirdUnifiedOrderVo.setThirdCode(failThirdCode); + thirdUnifiedOrderVo.setThirdMsg("第三方返回格式有误!"); + return thirdUnifiedOrderVo; } JSONObject jsonObject = JSONObject.parseObject(result); String errNo = jsonObject.getString("err_no"); + String errorMsg = jsonObject.getString("error_msg"); if (!"0".equals(errNo)) { - log.error("抖音支付:统一下单接口调用失败,payId:{},error{}", bo.getPayId(), jsonObject.getString("error_msg")); - throw new ServiceException(ResponseEnum.PAY_FAILS); + log.error("抖音支付:统一下单接口调用失败,payId:{},error{}", bo.getPayId(),errorMsg ); + thirdUnifiedOrderVo.setThirdCode(errNo); + thirdUnifiedOrderVo.setThirdMsg(errorMsg); + return thirdUnifiedOrderVo; } JSONObject data = jsonObject.getJSONObject("data"); String orderId = data.getString("order_id"); String orderToken = data.getString("order_token"); if (StringUtils.isBlank(orderId) || StringUtils.isBlank(orderToken)){ - log.error("抖音支付:统一下单接口调用失败,payId:{},result:{},error{}", bo.getPayId(),JSON.toJSONString(data), "返回信息为空"); - throw new ServiceException(ResponseEnum.PAY_FAILS); + String msg = "第三方返回数据有误!"; + log.error("抖音支付:统一下单接口调用失败,payId:{},result:{},error{}", bo.getPayId(),JSON.toJSONString(data), msg); + thirdUnifiedOrderVo.setThirdCode(errNo); + thirdUnifiedOrderVo.setThirdMsg(msg); + return thirdUnifiedOrderVo; } //保存预下单信息 - ThirdUnifiedOrderVo thirdUnifiedOrderVo = new ThirdUnifiedOrderVo(); - thirdUnifiedOrderVo.setAppId(appId); ThirdUnifiedOrderVo.DyThirdInOrderVo dyThirdInOrderVo = new ThirdUnifiedOrderVo.DyThirdInOrderVo(); thirdUnifiedOrderVo.setOutOrderNo(bo.getPayId()); //把order_no和order_info_token返回前端用于调起收银台 dyThirdInOrderVo.setOrderId(orderId); dyThirdInOrderVo.setOrderToken(orderToken); thirdUnifiedOrderVo.setDyThirdInOrderVo(dyThirdInOrderVo); + //第三方返回信息 + thirdUnifiedOrderVo.setThirdNo(orderId); + thirdUnifiedOrderVo.setThirdCode(errNo); + thirdUnifiedOrderVo.setThirdMsg(errorMsg); + return thirdUnifiedOrderVo; } diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/KSPayStrategy.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/KSPayStrategy.java index 679dd2d..d970c5d 100644 --- a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/KSPayStrategy.java +++ b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/KSPayStrategy.java @@ -55,6 +55,8 @@ public class KSPayStrategy extends AbstractPayStrategy{ private static KspayConfigMapper kspayConfigMapper; + private final static String failThirdCode = "-1"; + @Autowired public void setBean(KSPayUtil ksPayUtil, PayRestTemplateUtil payRestTemplateUtil, PayInfoService payInfoService, KspayConfigMapper kspayConfigMapper) { @@ -133,32 +135,47 @@ public class KSPayStrategy extends AbstractPayStrategy{ log.error("快手支付:支付异常,payId:{},error{}", bo.getPayId(), e.getMessage()); throw new ServiceException(ResponseEnum.PAY_FAILS); } - if (StringUtils.isBlank(result)){ - log.error("快手支付:统一下单接口调用失败,payId:{},error{}", bo.getPayId(), "请求结果返回为空"); - throw new ServiceException(ResponseEnum.PAY_FAILS); + ThirdUnifiedOrderVo thirdUnifiedOrderVo = new ThirdUnifiedOrderVo(); + thirdUnifiedOrderVo.setAppId(appId); + if (StringUtils.isBlank(result) || !result.startsWith("{")){ + log.error("快手支付:统一下单接口调用失败,payId:{},error{}", bo.getPayId(), "第三方返回格式有误!"); + thirdUnifiedOrderVo.setThirdCode(failThirdCode); + thirdUnifiedOrderVo.setThirdMsg("第三方返回格式有误!"); + return thirdUnifiedOrderVo; } + log.info("=================================="); + log.info("快手预下单result{}", result); + log.info("=================================="); JSONObject jsonObject = JSONObject.parseObject(result); String resultCode = jsonObject.getString("result"); + String errorMsg = jsonObject.getString("error_msg"); if (!"1".equals(resultCode)) { - log.error("快手支付:统一下单接口调用失败,payId:{},error{}", bo.getPayId(), jsonObject.getString("error_msg")); - throw new ServiceException(ResponseEnum.PAY_FAILS); + log.error("快手支付:统一下单接口调用失败,payId:{},error{}", bo.getPayId(),errorMsg); + thirdUnifiedOrderVo.setThirdCode(resultCode); + thirdUnifiedOrderVo.setThirdMsg(errorMsg); + return thirdUnifiedOrderVo; } JSONObject data = jsonObject.getJSONObject("order_info"); String orderNo = data.getString("order_no"); String orderToken = data.getString("order_info_token"); if (StringUtils.isBlank(orderNo) || StringUtils.isBlank(orderToken)) { - log.error("快手支付:统一下单接口调用失败,payId:{},result:{},error{}", bo.getPayId(),JSON.toJSONString(data), "返回信息为空"); - throw new ServiceException(ResponseEnum.PAY_FAILS); + String msg = "第三方返回数据有误!"; + log.error("快手支付:统一下单接口调用失败,payId:{},result:{},error{}", bo.getPayId(),JSON.toJSONString(data), msg); + thirdUnifiedOrderVo.setThirdCode(resultCode); + thirdUnifiedOrderVo.setThirdMsg(msg); + return thirdUnifiedOrderVo; } //保存预下单信息 - ThirdUnifiedOrderVo thirdUnifiedOrderVo = new ThirdUnifiedOrderVo(); - thirdUnifiedOrderVo.setAppId(appId); ThirdUnifiedOrderVo.KsThirdInOrderVo ksThirdInOrderVo = new ThirdUnifiedOrderVo.KsThirdInOrderVo(); thirdUnifiedOrderVo.setOutOrderNo(bo.getPayId()); //把order_no和order_info_token返回前端用于调起收银台 ksThirdInOrderVo.setOrderNo(orderNo); ksThirdInOrderVo.setOrderToken(orderToken); thirdUnifiedOrderVo.setKsThirdInOrderVo(ksThirdInOrderVo); + //第三方返回信息 + thirdUnifiedOrderVo.setThirdNo(orderNo); + thirdUnifiedOrderVo.setThirdCode(resultCode); + thirdUnifiedOrderVo.setThirdMsg(errorMsg); return thirdUnifiedOrderVo; } diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/WxPayStrategy.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/WxPayStrategy.java index 44d131b..f3a936c 100644 --- a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/WxPayStrategy.java +++ b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/WxPayStrategy.java @@ -1,10 +1,14 @@ package com.bnyer.pay.design.strategy; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSON; import com.bnyer.common.core.domain.WxpayConfig; import com.bnyer.common.core.enums.EnumPayType; +import com.bnyer.common.core.enums.EnumTimeUnit; import com.bnyer.common.core.enums.ResponseEnum; import com.bnyer.common.core.exception.ServiceException; +import com.bnyer.common.core.utils.DateUtils; import com.bnyer.common.core.utils.StringUtils; import com.bnyer.pay.bean.bo.QueryOrderBo; import com.bnyer.pay.bean.bo.RefundBo; @@ -35,6 +39,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.Date; import java.util.Map; /** @@ -82,6 +87,8 @@ public class WxPayStrategy extends AbstractPayStrategy { WxpayConfig wxPayConfig = wxPayManager.getWxPayConfigByTradeType(bo.getTradeType()); WxPayService wxPayService = wxPayManager.getWxPayService(wxPayConfig); String openId = bo.getOpenId(); + //返回数据 + ThirdUnifiedOrderVo thirdUnifiedOrderVo = new ThirdUnifiedOrderVo(); try { WxPayUnifiedOrderV3Request orderRequest = new WxPayUnifiedOrderV3Request(); WxPayUnifiedOrderV3Request.Payer payer = new WxPayUnifiedOrderV3Request.Payer(); @@ -89,14 +96,14 @@ public class WxPayStrategy extends AbstractPayStrategy { orderRequest.setPayer(payer); orderRequest.setDescription(bo.getGoodsDesc()); orderRequest.setOutTradeNo(bo.getPayId()); + //交易结束时间 + orderRequest.setTimeExpire(DateUtil.format(DateUtils.getDateByType(EnumTimeUnit.MINUTE, bo.getCurrDate(), 30), DatePattern.UTC_WITH_XXX_OFFSET_PATTERN)); WxPayUnifiedOrderV3Request.Amount amount = new WxPayUnifiedOrderV3Request.Amount(); amount.setTotal(BaseWxPayRequest.yuanToFen(bo.getPayAmount())); orderRequest.setAmount(amount); //调用微信支付接口 WxPayUnifiedOrderV3Result wxPayUnifiedOrderV3Result = wxPayService.createOrderV3(TradeTypeEnum.JSAPI, orderRequest); WxPayUnifiedOrderV3Result.JsapiResult jsapiResult = wxPayUnifiedOrderV3Result.getPayInfo(TradeTypeEnum.JSAPI, wxPayConfig.getAppid(), wxPayConfig.getMchid(), wxPayService.getConfig().getPrivateKey()); - //返回数据 - ThirdUnifiedOrderVo thirdUnifiedOrderVo = new ThirdUnifiedOrderVo(); thirdUnifiedOrderVo.setAppId(wxPayConfig.getAppid()); ThirdUnifiedOrderVo.WxThirdInOrderVo wxThirdInOrderVo = new ThirdUnifiedOrderVo.WxThirdInOrderVo(); wxThirdInOrderVo.setPackageValue(jsapiResult.getPackageValue()); @@ -105,10 +112,18 @@ public class WxPayStrategy extends AbstractPayStrategy { wxThirdInOrderVo.setPaySign(jsapiResult.getPaySign()); thirdUnifiedOrderVo.setOutOrderNo(bo.getPayId()); thirdUnifiedOrderVo.setAppId(jsapiResult.getAppId()); + + //第三方下单返回 + thirdUnifiedOrderVo.setThirdCode("0"); + thirdUnifiedOrderVo.setThirdMsg("ok"); + thirdUnifiedOrderVo.setThirdNo(wxPayUnifiedOrderV3Result.getPrepayId()); return thirdUnifiedOrderVo; } catch (WxPayException e) { log.error("微信支付:统一下单接口调用失败,payId:{},error{}", bo.getPayId(), e.getMessage()); - throw new ServiceException(ResponseEnum.PAY_FAILS); + thirdUnifiedOrderVo.setAppId(wxPayConfig.getAppid()); + thirdUnifiedOrderVo.setThirdCode(e.getResultCode()); + thirdUnifiedOrderVo.setThirdMsg(e.getMessage()); + return thirdUnifiedOrderVo; } } @@ -167,7 +182,7 @@ public class WxPayStrategy extends AbstractPayStrategy { editPayInfoNotifyDto.setAppId(appid); editPayInfoNotifyDto.setPayId(outTradeNo); editPayInfoNotifyDto.setPayNo(transactionId); - editPayInfoNotifyDto.setPayChannel(EnumPayChannel.getPayChannelName("wxpay",EnumPayType.WX_PAY)); + editPayInfoNotifyDto.setPayChannel(EnumPayChannel.WX_PAY.getName()); payInfoService.editPayInfoNotify(editPayInfoNotifyDto); return super.buildNotifyCheckResultMsg(EnumPayType.WX_PAY,true,"OK"); } catch (Exception e) { diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/enums/EnumAliPayStatus.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/enums/EnumAliPayStatus.java index b5e931d..d3e5dc9 100644 --- a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/enums/EnumAliPayStatus.java +++ b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/enums/EnumAliPayStatus.java @@ -19,7 +19,6 @@ public enum EnumAliPayStatus { WAIT_BUYER_PAY("WAIT_BUYER_PAY",EnumPayStatus.NO_PAY), TRADE_SUCCESS("TRADE_SUCCESS",EnumPayStatus.SUCCESS), TRADE_FINISHED("TRADE_FINISHED",EnumPayStatus.SUCCESS), - TRADE_CLOSED("TRADE_CLOSED",EnumPayStatus.FAILS), ; private final String status; diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/PayInfoService.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/PayInfoService.java index ebdcef9..1e0c074 100644 --- a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/PayInfoService.java +++ b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/PayInfoService.java @@ -29,5 +29,5 @@ public interface PayInfoService extends IService{ * @param payId * @return */ - PayInfoDetailsVo queryPayInfo(String payId); + PayInfoDetailsVo queryPayInfoDetails(String payId); } diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/impl/PayInfoServiceImpl.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/impl/PayInfoServiceImpl.java index 0df3bd6..eb6a4a2 100644 --- a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/impl/PayInfoServiceImpl.java +++ b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/impl/PayInfoServiceImpl.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bnyer.common.core.domain.PayInfo; +import com.bnyer.common.core.enums.EnumPayStatus; import com.bnyer.common.core.enums.EnumSceneCode; import com.bnyer.common.core.enums.ResponseEnum; import com.bnyer.common.core.exception.ServiceException; @@ -47,8 +48,22 @@ public class PayInfoServiceImpl extends ServiceImpl impl */ @Override public void addPayInfo(AddPayInfoDto dto) { - PayInfo payInfo = dto.toEntity(); - payInfoMapper.insert(payInfo); + PayInfo oldPayInfo = payInfoMapper.selectOne(new LambdaQueryWrapper().eq(PayInfo::getPayId, dto.getPayId())); + if (Objects.nonNull(oldPayInfo) && EnumPayStatus.SUCCESS.getStatus() == oldPayInfo.getPayStatus()){ + throw new ServiceException(ResponseEnum.ORDER_REPEAT_PAY); + } + PayInfo payInfo; + if (Objects.isNull(oldPayInfo)){ + payInfo = dto.toEntity(); + }else { + payInfo = dto.toEntity(); + payInfo.setId(oldPayInfo.getId()); + } + if (payInfo.getId() == null){ + payInfoMapper.insert(payInfo); + }else { + payInfoMapper.updateById(payInfo); + } } /** @@ -124,7 +139,7 @@ public class PayInfoServiceImpl extends ServiceImpl impl * @return */ @Override - public PayInfoDetailsVo queryPayInfo(String payId) { + public PayInfoDetailsVo queryPayInfoDetails(String payId) { PayInfo payInfo = payInfoMapper.selectOne(new LambdaQueryWrapper().eq(PayInfo::getPayId, payId)); if (Objects.isNull(payInfo)){ throw new ServiceException(ResponseEnum.NOT_EXIST,"支付订单"); diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/impl/UnifiedPayServiceImpl.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/impl/UnifiedPayServiceImpl.java index 3336c75..c0ade61 100644 --- a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/impl/UnifiedPayServiceImpl.java +++ b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/impl/UnifiedPayServiceImpl.java @@ -1,16 +1,20 @@ package com.bnyer.pay.service.impl; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.bnyer.common.core.domain.PayInfo; import com.bnyer.common.core.domain.R; import com.bnyer.common.core.enums.*; import com.bnyer.common.core.exception.ServiceException; import com.bnyer.common.core.utils.OrderUtil; +import com.bnyer.common.core.utils.StringUtils; import com.bnyer.common.core.utils.bean.EntityConvertUtil; import com.bnyer.common.core.utils.ip.IpUtils; import com.bnyer.common.core.vo.UserInfoVo; import com.bnyer.common.security.utils.SecurityUtils; -import com.bnyer.order.api.query.VipOrderExtQuery; +import com.bnyer.order.api.bean.query.VipOrderExtQuery; import com.bnyer.order.api.remote.RemoteVipOrderService; -import com.bnyer.order.api.vo.VipOrderVo; +import com.bnyer.order.api.bean.vo.VipOrderVo; import com.bnyer.pay.bean.bo.QueryOrderBo; import com.bnyer.pay.bean.bo.UnifiedOrderBo; import com.bnyer.pay.bean.dto.AddPayInfoDto; @@ -24,11 +28,14 @@ import com.bnyer.pay.enums.EnumAliPayStatus; import com.bnyer.pay.enums.EnumDyPayStatus; import com.bnyer.pay.enums.EnumKsPayStatus; import com.bnyer.pay.enums.EnumWxPayStatus; +import com.bnyer.pay.mapper.PayInfoMapper; import com.bnyer.pay.service.PayInfoService; import com.bnyer.pay.service.UnifiedPayService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; @@ -44,6 +51,9 @@ import java.util.Objects; @Service public class UnifiedPayServiceImpl implements UnifiedPayService { + @Autowired + private PayInfoMapper payInfoMapper; + @Autowired private PayInfoService payInfoService; @@ -58,6 +68,8 @@ public class UnifiedPayServiceImpl implements UnifiedPayService { */ @Override public UnifiedOrderVo unifiedOrder(UnifiedOrderDto dto, HttpServletRequest request) { + //下单前校验 + checkData(dto); //支付金额 String payAmount; //商品类型:快手支付需要 @@ -78,6 +90,11 @@ public class UnifiedPayServiceImpl implements UnifiedPayService { throw new ServiceException(vipOrderR.getMsg()); } VipOrderVo vipOrderVo = vipOrderR.getData(); + //判断订单是否已取消 + if (EnumVipOrderStatus.PAY_TIMEOUT_CLOSE.getStatus() == vipOrderVo.getOrderStatus() + || EnumVipOrderStatus.CANCEL_CLOSE.getStatus() == vipOrderVo.getOrderStatus()){ + throw new ServiceException(ResponseEnum.ORDER_CANCEL); + } payAmount = vipOrderVo.getPayAmount().toString(); goodsType = KSPayConstants.GOODS_TYPE_VIP; payId = OrderUtil.getOrderNo("RV",new Date(), EnumUserClientType.getCodeByType(vipOrderVo.getUserClientType()) @@ -102,6 +119,17 @@ public class UnifiedPayServiceImpl implements UnifiedPayService { return unifiedOrderVo; } + /** + * 下单前校验 + * @param dto + */ + private void checkData(UnifiedOrderDto dto) { + PayInfo payInfo = payInfoMapper.selectOne(new LambdaQueryWrapper().eq(PayInfo::getOrderNo,dto.getOrderNo())); + if (Objects.nonNull(payInfo) && EnumPayStatus.SUCCESS.getStatus() == payInfo.getPayStatus()){ + throw new ServiceException(ResponseEnum.ORDER_REPEAT_PAY); + } + } + /** * 构建支付订单 * @@ -119,11 +147,12 @@ public class UnifiedPayServiceImpl implements UnifiedPayService { addPayInfoDto.setPayType(dto.getPayType()); addPayInfoDto.setPayId(unifiedOrderBo.getPayId()); addPayInfoDto.setPayAmount(new BigDecimal(unifiedOrderBo.getPayAmount())); - addPayInfoDto.setAppid(thirdUnifiedOrderVo.getAppId()); addPayInfoDto.setGoodsSubject(unifiedOrderBo.getGoodsSubject()); addPayInfoDto.setGoodsDesc(unifiedOrderBo.getGoodsDesc()); addPayInfoDto.setTradeType(dto.getTradeType()); -// addPayInfoDto.setThirdNo(thirdInOrderVo.getPrepayid()); + addPayInfoDto.setThirdNo(thirdUnifiedOrderVo.getThirdNo()); + addPayInfoDto.setThirdMsg(thirdUnifiedOrderVo.getThirdMsg()); + addPayInfoDto.setThirdCode(thirdUnifiedOrderVo.getThirdCode()); addPayInfoDto.setIp(unifiedOrderBo.getIp()); return addPayInfoDto; } @@ -141,7 +170,10 @@ public class UnifiedPayServiceImpl implements UnifiedPayService { */ private UnifiedOrderBo buildUnifiedOrderDto(UnifiedOrderDto dto, String goodsDesc, int goodsType, String payAmount, String payId, HttpServletRequest request) { UserInfoVo userInfo = SecurityUtils.getUserInfo(); - String openId = userInfo.getOpenId(); + String openId = dto.getOpenId(); + if (StringUtils.isBlank(dto.getOpenId())){ + openId = userInfo.getOpenId(); + } //当前时间 Date currDate = new Date(); //ip地址 @@ -166,7 +198,7 @@ public class UnifiedPayServiceImpl implements UnifiedPayService { @Override public QueryOrderVo queryOrder(QueryOrderDto dto) { //先查询系统支付单是否已经完成支付,如果因为延迟导致没有及时同步,在调用第三方接口查询支付状态返回 - PayInfoDetailsVo payInfoDetailsVo = payInfoService.queryPayInfo(dto.getPayId()); + PayInfoDetailsVo payInfoDetailsVo = payInfoService.queryPayInfoDetails(dto.getPayId()); if (Objects.isNull(payInfoDetailsVo)){ throw new ServiceException(ResponseEnum.NOT_EXIST); } diff --git a/bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/PayInfoMapper.xml b/bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/PayInfoMapper.xml index 4e12b3d..7287695 100644 --- a/bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/PayInfoMapper.xml +++ b/bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/PayInfoMapper.xml @@ -24,6 +24,12 @@ + + + + + + @@ -33,7 +39,7 @@ id, pay_id, order_id, pay_status,single_status,single_time, pay_type, pay_channel, pay_no, trade_no, appid, goods_subject, goods_desc, - pay_amount, pay_time, scene_code, ip, third_code, third_msg, third_no, remark, create_time, + pay_amount, pay_time, scene_code, ip, third_code, third_msg, third_no,refund_status,refund_time,refund_amount,refund_no,refund_code,refund_msg, remark, create_time, update_time,sort,is_show