Browse Source

代码优化

feature-1.1
wuxicheng 3 years ago
parent
commit
5a75e93f03
  1. 2
      bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/bean/query/VipOrderExtQuery.java
  2. 2
      bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/bean/query/VipOrderQuery.java
  3. 6
      bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/bean/vo/VipOrderVo.java
  4. 6
      bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/factory/RemoteVipOrderFallbackFactory.java
  5. 6
      bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/remote/RemoteVipOrderService.java
  6. 42
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/PayInfo.java
  7. 15
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/VipOrder.java
  8. 10
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/EnumVipOrderStatus.java
  9. 3
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/ResponseEnum.java
  10. 160
      bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/utils/SecurityUtils.java
  11. 26
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/bean/dto/CancelVipOrderDto.java
  12. 4
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/bean/vo/VipOrderVo.java
  13. 6
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/listener/vip/VipOrderCancelConsumer.java
  14. 2
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/mapper/VipOrderMapper.java
  15. 5
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/VipOrderService.java
  16. 18
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/impl/VipOrderServiceImpl.java
  17. 10
      bnyer-services/bnyer-order/src/main/resources/com/bnyer/order/mapper/VipOrderMapper.xml
  18. 3
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/AddPayInfoDto.java
  19. 3
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/UnifiedOrderDto.java
  20. 10
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/vo/ThirdUnifiedOrderVo.java
  21. 2
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AbstractPayStrategy.java
  22. 8
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AliPayStrategy.java
  23. 33
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/DYPayStrategy.java
  24. 35
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/KSPayStrategy.java
  25. 23
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/WxPayStrategy.java
  26. 1
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/enums/EnumAliPayStatus.java
  27. 2
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/PayInfoService.java
  28. 19
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/impl/PayInfoServiceImpl.java
  29. 44
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/impl/UnifiedPayServiceImpl.java
  30. 8
      bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/PayInfoMapper.xml

2
bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/query/VipOrderExtQuery.java → 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;

2
bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/query/VipOrderQuery.java → 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;

6
bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/vo/VipOrderVo.java → 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;
}

6
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;

6
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;

42
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;
/**
* 备注
*/

15
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;
}

10
bnyer-services/bnyer-order/src/main/java/com/bnyer/order/enums/EnumVipOrderStatus.java → 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;

3
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, "该订单已支付,请勿重复支付!"),
//======================第三方接口调用异常========================

160
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 未匹配上对应用户类型");
}
}
//******************************通用获取信息结束*********************************************

26
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<String> orderNos;
@ApiModelProperty(value = "订单状态:4支付超时取消;5买家取消")
@Range(min = 4,max = 5,message = "订单状态:4支付超时取消;5买家取消")
private Integer orderStatus;
}

4
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;
}

6
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<String> {
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);
}
}

2
bnyer-services/bnyer-order/src/main/java/com/bnyer/order/mapper/VipOrderMapper.java

@ -26,7 +26,7 @@ public interface VipOrderMapper extends BaseMapper<VipOrder> {
* 取消订单
* @param orderNos
*/
void cancelVipOrder(@Param("orderNos") List<String> orderNos, @Param("closeType") Integer closeType);
void cancelVipOrder(@Param("orderNos") List<String> orderNos, @Param("orderStatus") Integer orderStatus);
/**
* 修改订单表状态为已支付

5
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<VipOrder> {
/**
* 取消订单
* @param orderNos 订单号
* @param closeType 订单关闭原因类型
*/
void cancelVipOrder(List<String> orderNos,Integer closeType);
void cancelVipOrder(CancelVipOrderDto cancelVipOrderDto);
/**
* 查询会员订单列表信息

18
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<VipOrderMapper, VipOrder> i
/**
* 取消订单
* @param orderNos 订单id
* @param closeType 订单关闭原因类型
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void cancelVipOrder(List<String> orderNos,Integer closeType) {
public void cancelVipOrder(CancelVipOrderDto cancelVipOrderDto) {
List<String> orderNos = cancelVipOrderDto.getOrderNos();
Integer orderStatus = cancelVipOrderDto.getOrderStatus();
List<VipOrder> vipOrderList = vipOrderMapper.selectList(new LambdaQueryWrapper<VipOrder>().in(VipOrder::getOrderNo, orderNos));
if (CollUtil.isEmpty(vipOrderList)){
return;
}
List<String> cancelOrderNos = vipOrderList.stream().filter(vipOrder -> Objects.nonNull(vipOrder.getOrderStatus()) && EnumVipOrderStatus.FAILS.getStatus()
!= vipOrder.getOrderStatus()).map(VipOrder::getOrderNo).collect(Collectors.toList());
List<String> 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<VipOrderMapper, VipOrder> 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());

10
bnyer-services/bnyer-order/src/main/resources/com/bnyer/order/mapper/VipOrderMapper.xml

@ -18,12 +18,10 @@
<result column="start_time" jdbcType="TIMESTAMP" property="startTime" />
<result column="end_time" jdbcType="TIMESTAMP" property="endTime" />
<result column="order_status" jdbcType="INTEGER" property="orderStatus" />
<result column="close_type" jdbcType="INTEGER" property="closeType" />
<result column="pay_time" jdbcType="TIMESTAMP" property="payTime" />
<result column="cancel_time" jdbcType="TIMESTAMP" property="cancelTime" />
<result column="user_client_type" jdbcType="INTEGER" property="userClientType" />
<result column="remark" jdbcType="VARCHAR" property="remark" />
<result column="pay_status" jdbcType="INTEGER" property="payStatus" />
<result column="is_show" jdbcType="CHAR" property="isShow" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
@ -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,11 +69,10 @@
<update id="cancelVipOrder">
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
where order_no in
<foreach collection="orderNos" item="orderNo" open="(" close=")" separator=",">
#{orderNo}
</foreach>
@ -86,7 +81,6 @@
update order_vip_order
set
order_status = 1,
pay_status = 1001,
pay_time = now(),
update_time = now()
where order_no = #{orderNo}

3
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/AddPayInfoDto.java

@ -50,9 +50,6 @@ public class AddPayInfoDto extends BaseDto<PayInfo> {
@ApiModelProperty(value="支付单号(第三方返回)")
private String payNo;
@ApiModelProperty(value="用户侧订单号(第三方返回)")
private String tradeNo;
@ApiModelProperty(value="appid")
private String appid;

3
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;
}

10
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;

2
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();

8
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 状态不做处理");

33
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;
}

35
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;
}

23
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) {

1
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;

2
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/PayInfoService.java

@ -29,5 +29,5 @@ public interface PayInfoService extends IService<PayInfo>{
* @param payId
* @return
*/
PayInfoDetailsVo queryPayInfo(String payId);
PayInfoDetailsVo queryPayInfoDetails(String payId);
}

19
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<PayInfoMapper, PayInfo> impl
*/
@Override
public void addPayInfo(AddPayInfoDto dto) {
PayInfo payInfo = dto.toEntity();
PayInfo oldPayInfo = payInfoMapper.selectOne(new LambdaQueryWrapper<PayInfo>().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<PayInfoMapper, PayInfo> impl
* @return
*/
@Override
public PayInfoDetailsVo queryPayInfo(String payId) {
public PayInfoDetailsVo queryPayInfoDetails(String payId) {
PayInfo payInfo = payInfoMapper.selectOne(new LambdaQueryWrapper<PayInfo>().eq(PayInfo::getPayId, payId));
if (Objects.isNull(payInfo)){
throw new ServiceException(ResponseEnum.NOT_EXIST,"支付订单");

44
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<PayInfo>().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);
}

8
bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/PayInfoMapper.xml

@ -24,6 +24,12 @@
<result column="third_code" jdbcType="VARCHAR" property="thirdCode" />
<result column="third_msg" jdbcType="VARCHAR" property="thirdMsg" />
<result column="third_no" jdbcType="VARCHAR" property="thirdNo" />
<result column="refund_status" jdbcType="INTEGER" property="refundStatus" />
<result column="refund_time" jdbcType="TIMESTAMP" property="refundTime" />
<result column="refund_amount" jdbcType="DECIMAL" property="refundAmount" />
<result column="refund_no" jdbcType="VARCHAR" property="refundNo" />
<result column="refund_code" jdbcType="VARCHAR" property="refundCode" />
<result column="refund_msg" jdbcType="VARCHAR" property="refundMsg" />
<result column="remark" jdbcType="VARCHAR" property="remark" />
<result column="is_show" jdbcType="CHAR" property="isShow" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
@ -33,7 +39,7 @@
<sql id="Base_Column_List">
<!--@mbg.generated-->
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
</sql>

Loading…
Cancel
Save