diff --git a/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/remote/RemoteImgService.java b/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/remote/RemoteImgService.java index ee6c684..a91586f 100644 --- a/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/remote/RemoteImgService.java +++ b/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/remote/RemoteImgService.java @@ -23,7 +23,7 @@ import org.springframework.web.bind.annotation.*; * @author chengkun * @date 2022/7/8 11:03 */ -@FeignClient(contextId = "remoteImgOrderService", value = ServiceNameConstants.IMG_SERVICE, fallbackFactory = RemoteImgFallbackFactory.class) +@FeignClient(contextId = "remoteImgService", value = ServiceNameConstants.IMG_SERVICE, fallbackFactory = RemoteImgFallbackFactory.class) public interface RemoteImgService { /** diff --git a/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/remote/RemoteVipOrderService.java b/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/remote/RemoteVipOrderService.java index a3ff55b..2d1dd2c 100644 --- a/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/remote/RemoteVipOrderService.java +++ b/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/remote/RemoteVipOrderService.java @@ -6,9 +6,9 @@ import com.bnyer.img.api.dto.QueryVipOrderDto; import com.bnyer.img.api.factory.RemoteVipOrderFallbackFactory; import com.bnyer.img.api.vo.VipOrderVo; import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; -import javax.validation.Valid; import java.util.List; /** @@ -16,9 +16,14 @@ import java.util.List; * @Date :2023/04/03 * @description :订单服务:vip订单接口远程调用 */ -@FeignClient(contextId = "remoteImgService", value = ServiceNameConstants.ORDER_SERVICE, fallbackFactory = RemoteVipOrderFallbackFactory.class) +@FeignClient(contextId = "remoteVipOrderService", value = ServiceNameConstants.ORDER_SERVICE, fallbackFactory = RemoteVipOrderFallbackFactory.class) public interface RemoteVipOrderService { - @GetMapping("/getVipOrderList") - R> getVipOrderList(@Valid QueryVipOrderDto dto); + /** + * 获取会员订单信息 + * @param dto + * @return + */ + @PostMapping("/getVipOrderList") + R> getVipOrderList(@RequestBody QueryVipOrderDto dto); } diff --git a/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/remote/RemoteWxMiniService.java b/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/remote/RemoteWxMiniService.java index 1674f57..b3a41cc 100644 --- a/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/remote/RemoteWxMiniService.java +++ b/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/remote/RemoteWxMiniService.java @@ -6,7 +6,8 @@ import com.bnyer.img.api.dto.QueryUserVipDto; import com.bnyer.img.api.factory.RemoteWxMiniFallbackFactory; import com.bnyer.img.api.vo.UserVipVo; import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import java.util.List; @@ -18,9 +19,9 @@ import java.util.List; public interface RemoteWxMiniService { /** - * 获取会员vip列表 + * 获取会员列表 * @return */ - @GetMapping(value = "/queryUserVipList") - R> queryUserVipList(QueryUserVipDto dto); + @PostMapping(value = "/img/mini/fh/queryUserVipList") + R> queryUserVipList(@RequestBody QueryUserVipDto dto); } 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 30e8a37..428d86e 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 @@ -29,12 +29,6 @@ import lombok.ToString; @NoArgsConstructor @TableName(value = "pay_pay_info") public class PayInfo extends BaseDomain { - /** - * 主键 - */ - @TableId(value = "id", type = IdType.AUTO) - @ApiModelProperty(value="主键") - private Long id; /** * 支付单号(内部生成) @@ -83,7 +77,7 @@ public class PayInfo extends BaseDomain { * 支付渠道 */ @TableField(value = "pay_channel") - @ApiModelProperty(value="支付渠道") + @ApiModelProperty(value="支付渠道:wxpay/alipay") private String payChannel; /** diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/UserVip.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/UserVip.java index 7c7f7e2..b4cd7aa 100644 --- a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/UserVip.java +++ b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/UserVip.java @@ -18,15 +18,6 @@ import java.math.BigDecimal; @NoArgsConstructor @TableName(value = "img_user_vip") public class UserVip extends BaseDomain { -<<<<<<< HEAD - /** - * 主键Id - */ - @TableId(value = "id", type = IdType.ASSIGN_ID) - @ApiModelProperty(value="主键Id") - private Long id; -======= ->>>>>>> origin/feature-1.0-img /** * vip类型id @@ -99,4 +90,4 @@ public class UserVip extends BaseDomain { private Integer validTimeNum; private static final long serialVersionUID = 1L; -} \ No newline at end of file +} diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/UserVipRecord.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/UserVipRecord.java index 28d2140..c0fb19d 100644 --- a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/UserVipRecord.java +++ b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/UserVipRecord.java @@ -20,15 +20,6 @@ import java.util.Date; @NoArgsConstructor @TableName(value = "img_user_vip_record") public class UserVipRecord extends BaseDomain { -<<<<<<< HEAD - /** - * 主键id - */ - @TableId(value = "id", type = IdType.ASSIGN_ID) - @ApiModelProperty(value="主键id") - private Long id; -======= ->>>>>>> origin/feature-1.0-img /** * 订单id @@ -37,6 +28,13 @@ public class UserVipRecord extends BaseDomain { @ApiModelProperty(value="订单id") private String orderId; + /** + * 用户id + */ + @TableField(value = "user_id") + @ApiModelProperty(value="用户id") + private Long userId; + /** * 用户手机号 */ @@ -72,7 +70,7 @@ public class UserVipRecord extends BaseDomain { */ @TableField(value = "status") @ApiModelProperty(value="支付状态(0->待支付;1->已支付;2->支付失败;3->支付异常)") - private String status; + private Integer status; /** * vip名称 @@ -88,5 +86,12 @@ public class UserVipRecord extends BaseDomain { @ApiModelProperty(value = "vip类型名称") private String vipTypeName; + /** + * 用户客户端类型:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信 + */ + @TableField(value = "user_client_type") + @ApiModelProperty(value = "用户客户端类型:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信") + private Integer userClientType; + private static final long serialVersionUID = 1L; } diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/dto/AddUserVipRecordDto.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/dto/AddUserVipRecordDto.java new file mode 100644 index 0000000..cb6c5a5 --- /dev/null +++ b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/dto/AddUserVipRecordDto.java @@ -0,0 +1,44 @@ +package com.bnyer.common.core.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.*; + +import java.util.Date; + +@Getter +@Setter +@ToString +@AllArgsConstructor +@NoArgsConstructor +public class AddUserVipRecordDto { + + @ApiModelProperty(value="订单id") + private String orderId; + + @ApiModelProperty(value="用户id") + private Long userId; + + @ApiModelProperty(value="用户手机号") + private String phone; + + @ApiModelProperty(value="vip表id") + private Long vipId; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value="开始时间") + private Date startTime; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value="到期时间") + private Date endTime; + + @ApiModelProperty(value="vip名称") + private String vipName; + + @ApiModelProperty(value = "vip类型名称") + private String vipTypeName; + + @ApiModelProperty(value = "用户客户端类型:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信") + private Integer userClientType; +} diff --git a/bnyer-common/bnyer-common-rocketmq/src/main/java/com/bnyer/common/rocketmq/config/RocketMqConstant.java b/bnyer-common/bnyer-common-rocketmq/src/main/java/com/bnyer/common/rocketmq/config/RocketMqConstant.java index d76f757..03a3c9f 100644 --- a/bnyer-common/bnyer-common-rocketmq/src/main/java/com/bnyer/common/rocketmq/config/RocketMqConstant.java +++ b/bnyer-common/bnyer-common-rocketmq/src/main/java/com/bnyer/common/rocketmq/config/RocketMqConstant.java @@ -37,4 +37,9 @@ public class RocketMqConstant { */ public static final String VIP_ORDER_PAY_NOTIFY_TOPIC = "vip-order-pay-notify-topic"; + /** + * vip记录创建 + */ + public static final String VIP_RECORD_CREATE_TOPIC = "vip-record-create-topic"; + } diff --git a/bnyer-services/bnyer-img/pom.xml b/bnyer-services/bnyer-img/pom.xml index 63cd400..b475382 100644 --- a/bnyer-services/bnyer-img/pom.xml +++ b/bnyer-services/bnyer-img/pom.xml @@ -83,6 +83,12 @@ bnyer-common-swagger + + + com.dimensionalnode + bnyer-common-rocketmq + + com.dimensionalnode diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/FhMiniController.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/FhMiniController.java index 4a25cba..da5472c 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/FhMiniController.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/FhMiniController.java @@ -297,8 +297,8 @@ public class FhMiniController extends BaseController { } @ApiOperation(value="获取用户会员vip列表") - @GetMapping(value = "/queryUserVipList") - public R> queryUserVipList(QueryUserVipDto dto){ + @PostMapping(value = "/queryUserVipList") + public R> queryUserVipList(@RequestBody QueryUserVipDto dto){ return R.ok(userVipService.queryFront(dto)); } diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/enums/EnumUserVipRecordStatus.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/enums/EnumUserVipRecordStatus.java new file mode 100644 index 0000000..0cd1c0c --- /dev/null +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/enums/EnumUserVipRecordStatus.java @@ -0,0 +1,31 @@ +package com.bnyer.img.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author :WXC + * @description : + */ +@Getter +@AllArgsConstructor +public enum EnumUserVipRecordStatus { + + EXPIRE(0,"已到期"), + VALID(1,"已生效"), + ; + + private final int status; + + private final String name; + + public static String getStatusName(int status) { + for (EnumUserVipRecordStatus s : EnumUserVipRecordStatus.values()) { + if (status == s.status) { + return s.getName(); + } + } + return null; + } + +} diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/listener/VipRecordCreateConsumer.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/listener/VipRecordCreateConsumer.java new file mode 100644 index 0000000..b365133 --- /dev/null +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/listener/VipRecordCreateConsumer.java @@ -0,0 +1,36 @@ +package com.bnyer.img.listener; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.bnyer.common.core.domain.UserVipRecord; +import com.bnyer.common.core.dto.AddUserVipRecordDto; +import com.bnyer.common.rocketmq.config.RocketMqConstant; +import com.bnyer.img.service.UserVipRecordService; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; +import org.apache.rocketmq.spring.core.RocketMQListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * @author :WXC + * @Date :2023/03/24 + * @description :取消订单mq消费监听 + */ +@Slf4j +@Component +@RocketMQMessageListener(topic = RocketMqConstant.VIP_RECORD_CREATE_TOPIC,consumerGroup = RocketMqConstant.VIP_RECORD_CREATE_TOPIC) +public class VipRecordCreateConsumer implements RocketMQListener { + + @Autowired + private UserVipRecordService userVipRecordService; + + @Override + public void onMessage(String message) { + log.info("收到消息:{}", message); + JSONObject jsonObject = JSON.parseObject(message); + AddUserVipRecordDto addUserVipRecordDto = JSON.toJavaObject(jsonObject, AddUserVipRecordDto.class); + //添加用户会员记录 + userVipRecordService.addUserVipRecord(addUserVipRecordDto); + } +} diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/UserVipRecordService.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/UserVipRecordService.java index b778e2d..d6d4c08 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/UserVipRecordService.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/UserVipRecordService.java @@ -1,5 +1,6 @@ package com.bnyer.img.service; +import com.bnyer.common.core.dto.AddUserVipRecordDto; import com.bnyer.common.core.dto.PayUserVipDto; public interface UserVipRecordService { @@ -11,4 +12,12 @@ public interface UserVipRecordService { * @return - */ boolean payUserVip(PayUserVipDto param); + + + /** + * 添加用户会员记录 + * @param dto + */ + void addUserVipRecord(AddUserVipRecordDto dto); + } diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/UserVipServiceRecordImpl.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/UserVipServiceRecordImpl.java index 8f9b866..2e081cb 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/UserVipServiceRecordImpl.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/UserVipServiceRecordImpl.java @@ -3,10 +3,14 @@ package com.bnyer.img.service.impl; import cn.hutool.core.util.IdUtil; import com.bnyer.common.core.constant.RedisKeyConstant; import com.bnyer.common.core.domain.UserVipRecord; +import com.bnyer.common.core.domain.VipOrder; +import com.bnyer.common.core.dto.AddUserVipRecordDto; import com.bnyer.common.core.dto.PayUserVipDto; import com.bnyer.common.core.exception.ServiceException; +import com.bnyer.common.core.utils.bean.EntityConvertUtil; import com.bnyer.common.redis.service.RedissonService; import com.bnyer.img.constants.UserVipOrderStatusConstant; +import com.bnyer.img.enums.EnumUserVipRecordStatus; import com.bnyer.img.mapper.UserVipRecordMapper; import com.bnyer.img.service.UserVipRecordService; import lombok.extern.slf4j.Slf4j; @@ -80,4 +84,13 @@ public class UserVipServiceRecordImpl implements UserVipRecordService { // } return false; } + + @Override + public void addUserVipRecord(AddUserVipRecordDto dto) { + UserVipRecord userVipRecord = EntityConvertUtil.copy(dto, UserVipRecord.class); + userVipRecord.setStatus(EnumUserVipRecordStatus.VALID.getStatus()); + userVipRecord.setCreateTime(new Date()); + userVipRecord.setIsShow("1"); + userVipRecordMapper.insert(userVipRecord); + } } diff --git a/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/UserVipRecordMapper.xml b/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/UserVipRecordMapper.xml index 87ed589..99bdc1b 100644 --- a/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/UserVipRecordMapper.xml +++ b/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/UserVipRecordMapper.xml @@ -6,13 +6,15 @@ + - + + @@ -20,7 +22,7 @@ - id,order_id, phone,vip_name,vip_type_name,status, vip_id, start_time, end_time, is_show, create_time, update_time, + id,order_id,user_id , phone,vip_name,vip_type_name,user_client_type,status, vip_id, start_time, end_time, is_show, create_time, update_time, sort diff --git a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/config/RocketMqConfig.java b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/config/RocketMqConfig.java index 9629caa..ad5d314 100644 --- a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/config/RocketMqConfig.java +++ b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/config/RocketMqConfig.java @@ -26,4 +26,10 @@ public class RocketMqConfig { return rocketMqAdapter.getTemplateByTopicName(RocketMqConstant.VIP_ORDER_CANCEL_TOPIC); } + @Lazy + @Bean(destroyMethod = "destroy") + public RocketMQTemplate vipRecordMqTemplate() { + return rocketMqAdapter.getTemplateByTopicName(RocketMqConstant.VIP_RECORD_CREATE_TOPIC); + } + } diff --git a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/controller/VipOrderController.java b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/controller/VipOrderController.java index a25eed5..b47dcc5 100644 --- a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/controller/VipOrderController.java +++ b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/controller/VipOrderController.java @@ -44,9 +44,9 @@ public class VipOrderController extends BaseController { /** * 查询订单信息 */ - @GetMapping("/getVipOrderList") + @PostMapping("/getVipOrderList") @Operation(summary = "查询会员订单列表信息" , description = "查询会员订单列表信息") - public R> getVipOrderList(@Valid QueryVipOrderDto dto) { + public R> getVipOrderList(@Valid @RequestBody QueryVipOrderDto dto) { List vipOrderVoList = vipOrderService.getVipOrderList(dto); return R.ok(vipOrderVoList); } diff --git a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/dto/AddVipOrderDto.java b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/dto/AddVipOrderDto.java index edaf77e..5ece95d 100644 --- a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/dto/AddVipOrderDto.java +++ b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/dto/AddVipOrderDto.java @@ -29,8 +29,7 @@ public class AddVipOrderDto implements Serializable { @ApiModelProperty(value="vip表id") private Long vipId; - @NotBlank(message = "用户客户端类型不能为空!") - @CustomParamsValidation(range = "10|20|30|40",message = "用户客户端类型只能包含:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信") + @NotNull(message = "用户客户端类型不能为空!") @ApiModelProperty(value="用户客户端类型:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信") private Integer userClientType; diff --git a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/listener/vip/VipOrderPayNotifyConsumer.java b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/listener/vip/VipOrderPayNotifyConsumer.java index 325a29f..882e3de 100644 --- a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/listener/vip/VipOrderPayNotifyConsumer.java +++ b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/listener/vip/VipOrderPayNotifyConsumer.java @@ -4,19 +4,21 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.bnyer.common.core.domain.VipOrder; -import com.bnyer.common.core.enums.EnumPayStatus; +import com.bnyer.common.core.enums.ResponseEnum; +import com.bnyer.common.core.exception.ServiceException; import com.bnyer.common.core.utils.SpringUtils; import com.bnyer.common.rocketmq.config.RocketMqConstant; -import com.bnyer.order.enums.EnumVipOrderStatus; import com.bnyer.order.mapper.VipOrderMapper; import com.bnyer.order.service.VipOrderService; import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.client.producer.SendStatus; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; import org.apache.rocketmq.spring.core.RocketMQListener; +import org.apache.rocketmq.spring.core.RocketMQTemplate; +import org.springframework.messaging.support.GenericMessage; import org.springframework.stereotype.Component; import javax.annotation.Resource; -import java.util.Date; import java.util.Objects; /** @@ -32,24 +34,49 @@ public class VipOrderPayNotifyConsumer implements RocketMQListener { @Resource private VipOrderMapper vipOrderMapper; + @Resource + private RocketMQTemplate vipRecordMqTemplate; + @Override public void onMessage(String message) { log.info("收到消息:{}", message); - JSONObject jsonObject = JSON.parseObject(message); - //修改订单表状态为已支付 - String orderId = jsonObject.getString("orderId"); + //修改订单并添加会员记录 + VipOrderService vipOrderService = SpringUtils.getBean(VipOrderService.class); + JSONObject orderObj = JSON.parseObject(message); + String orderId = orderObj.getString("orderId"); VipOrder vipOrder = vipOrderMapper.selectOne(new LambdaQueryWrapper().eq(VipOrder::getOrderId, orderId)); if (Objects.isNull(vipOrder)){ log.error("订单不存在,订单id:{}",orderId); return; } - //修改订单并添加会员记录 - VipOrderService vipOrderService = SpringUtils.getBean(VipOrderService.class); - vipOrder.setPayStatus(EnumPayStatus.SUCCESS.getCode()); - vipOrder.setOrderStatus(EnumVipOrderStatus.SUCCESS.getStatus()); - vipOrder.setUpdateTime(new Date()); - vipOrder.setPayTime(new Date()); - vipOrderService.updateOrderAndAddVipRecord(vipOrder); + //修改订单表状态为已支付 + vipOrderService.updateByToPaySuccess(vipOrder); + //发消息,添加用户会员记录 + String msg = buildVipRecordMsg(vipOrder); + SendStatus sendStatus = vipRecordMqTemplate.syncSend(RocketMqConstant.VIP_RECORD_CREATE_TOPIC, new GenericMessage<>(msg)).getSendStatus(); + if (!Objects.equals(sendStatus, SendStatus.SEND_OK)) { + // 消息发不出去就抛异常 + throw new ServiceException(ResponseEnum.SERVER_ERROR); + } + } + + /** + * 构建vip记录消息体 + * @param vipOrder + * @return + */ + private String buildVipRecordMsg(VipOrder vipOrder) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("orderId",vipOrder.getOrderId()); + jsonObject.put("startTime",vipOrder.getStartTime()); + jsonObject.put("endTime",vipOrder.getEndTime()); + jsonObject.put("vipId",vipOrder.getVipId()); + jsonObject.put("vipName",vipOrder.getVipName()); + jsonObject.put("vipTypeName",vipOrder.getVipTypeName()); + jsonObject.put("userClientType",vipOrder.getUserClientType()); + jsonObject.put("phone",vipOrder.getPhone()); + jsonObject.put("userId",vipOrder.getUserId()); + return JSON.toJSONString(jsonObject); } } 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 75bddd7..80d0d19 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 @@ -38,8 +38,8 @@ public interface VipOrderService extends IService { List getVipOrderList(QueryVipOrderDto dto); /** - * 更新订单信息并添加用户会员记录 + * 更新订单信息 * @param vipOrder */ - void updateOrderAndAddVipRecord(VipOrder vipOrder); + void updateByToPaySuccess(VipOrder vipOrder); } 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 68d776b..96b7966 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 @@ -7,9 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bnyer.common.core.domain.R; import com.bnyer.common.core.domain.VipOrder; -import com.bnyer.common.core.enums.EnumUserClientType; -import com.bnyer.common.core.enums.EnumVipType; -import com.bnyer.common.core.enums.ResponseEnum; +import com.bnyer.common.core.enums.*; import com.bnyer.common.core.exception.ServiceException; import com.bnyer.common.core.utils.DateUtils; import com.bnyer.common.core.utils.OrderUtil; @@ -22,7 +20,6 @@ import com.bnyer.img.api.vo.UserVipVo; import com.bnyer.order.dto.AddVipOrderDto; import com.bnyer.order.dto.QueryVipOrderDto; import com.bnyer.order.enums.EnumVipOrderStatus; -import com.bnyer.common.core.enums.EnumTimeUnit; import com.bnyer.order.mapper.VipOrderMapper; import com.bnyer.order.service.VipOrderService; import com.bnyer.order.vo.VipOrderVo; @@ -182,15 +179,18 @@ public class VipOrderServiceImpl extends ServiceImpl i /** - * 更新订单信息并添加用户会员记录 + * 更新订单信息为已支付 * @param vipOrder */ @Transactional(rollbackFor = Exception.class) @Override - public void updateOrderAndAddVipRecord(VipOrder vipOrder) { + public void updateByToPaySuccess(VipOrder vipOrder) { + vipOrder.setPayStatus(EnumPayStatus.SUCCESS.getCode()); + vipOrder.setOrderStatus(EnumVipOrderStatus.SUCCESS.getStatus()); + vipOrder.setUpdateTime(new Date()); + vipOrder.setPayTime(new Date()); //更新订单 vipOrderMapper.updateById(vipOrder); - // TODO: 2023/04/23 远程调用添加会员记录 } } 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 096f9f2..d4205c5 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 @@ -25,6 +25,7 @@ import com.bnyer.pay.constant.AliPayConstant; import com.bnyer.pay.dto.EditPayInfoNotifyDto; import com.bnyer.pay.dto.PayNotifyCheckDto; import com.bnyer.pay.dto.UnifiedOrderDto; +import com.bnyer.pay.enums.EnumPayChannel; import com.bnyer.pay.enums.EnumPayConfigStatus; import com.bnyer.pay.mapper.AlipayConfigMapper; import com.bnyer.pay.service.PayInfoService; @@ -160,15 +161,14 @@ public class AliPayStrategy extends AbstractPayStrategy { editPayInfoNotifyDto.setPayAmount(totalAmount); editPayInfoNotifyDto.setAppId(appId); editPayInfoNotifyDto.setPayNo(tradeNo); + editPayInfoNotifyDto.setPayChannel(EnumPayChannel.getPayChannelName("alipay",EnumPayType.ALI_PAY)); payInfoService.editPayInfoNotify(editPayInfoNotifyDto); }else if(tradeStatus.equals("TRADE_CLOSED")){ log.info("支付宝支付回调:TRADE_CLOSED 状态不做处理"); - //交易关闭不作处理:退款或未支付超时关闭 -// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } }catch (Exception e){ log.info("支付宝支付回调:处理过程异常,error:{}",e.getMessage()); -// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return MsgConstants.FAIL; } return MsgConstants.SUCCESS; } 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 aeb3a6c..130732a 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 @@ -18,6 +18,7 @@ import com.bnyer.pay.constant.KSPayConstants; import com.bnyer.pay.dto.EditPayInfoNotifyDto; import com.bnyer.pay.dto.PayNotifyCheckDto; import com.bnyer.pay.dto.UnifiedOrderDto; +import com.bnyer.pay.enums.EnumPayChannel; import com.bnyer.pay.enums.EnumPayConfigStatus; import com.bnyer.pay.mapper.DypayConfigMapper; import com.bnyer.pay.mapper.KspayConfigMapper; @@ -127,7 +128,8 @@ public class DYPayStrategy extends AbstractPayStrategy{ payInOrderVo.setOrderToken(orderToken); return payInOrderVo; } else { - return null; + log.error("抖音支付:统一下单接口调用失败,payId:{},result:{},error{}", dto.getPayId(),JSON.toJSONString(data), "返回信息为空"); + throw new ServiceException(ResponseEnum.PAY_FAILS); } } else { log.error("抖音支付:统一下单接口调用失败,payId:{},error{}", dto.getPayId(), jsonObject.getString("error_msg")); @@ -200,7 +202,7 @@ public class DYPayStrategy extends AbstractPayStrategy{ editPayInfoNotifyDto.setPayId(outOrderNo); editPayInfoNotifyDto.setPayNo(dyOrderId); editPayInfoNotifyDto.setTradeNo(paymentOrderNo); - editPayInfoNotifyDto.setPayChannel(payChannel); + editPayInfoNotifyDto.setPayChannel(EnumPayChannel.getPayChannelName(payChannel,EnumPayType.DY_PAY)); payInfoService.editPayInfoNotify(editPayInfoNotifyDto); //正确处理后返回以下内容格式通知小程序平台不再持续回调 return super.buildNotifyCheckResultMsg(EnumPayType.DY_PAY,true,"success"); 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 c0ed602..497daf2 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 @@ -17,6 +17,7 @@ import com.bnyer.pay.constant.KSPayConstants; import com.bnyer.pay.dto.EditPayInfoNotifyDto; import com.bnyer.pay.dto.PayNotifyCheckDto; import com.bnyer.pay.dto.UnifiedOrderDto; +import com.bnyer.pay.enums.EnumPayChannel; import com.bnyer.pay.enums.EnumPayConfigStatus; import com.bnyer.pay.mapper.KspayConfigMapper; import com.bnyer.pay.service.PayInfoService; @@ -64,7 +65,7 @@ public class KSPayStrategy extends AbstractPayStrategy{ throw new ServiceException(ResponseEnum.PAY_CONFIG_ERROR); } KspayConfig kspayConfig = kspayConfigList.get(0); - String openId = SecurityContextHolder.get("ksCode"); + String openId = SecurityContextHolder.get("fhCode"); String appId = kspayConfig.getAppid(); String backurl = kspayConfig.getBackurl(); String secret = kspayConfig.getSecret(); @@ -126,7 +127,8 @@ public class KSPayStrategy extends AbstractPayStrategy{ payInOrderVo.setOrderToken(orderToken); return payInOrderVo; } else { - return null; + log.error("快手支付:统一下单接口调用失败,payId:{},result:{},error{}", dto.getPayId(),JSON.toJSONString(data), "返回信息为空"); + throw new ServiceException(ResponseEnum.PAY_FAILS); } } else { log.error("快手支付:统一下单接口调用失败,payId:{},error{}", dto.getPayId(), jsonObject.getString("error_msg")); @@ -196,7 +198,7 @@ public class KSPayStrategy extends AbstractPayStrategy{ editPayInfoNotifyDto.setPayId(outOrderNo); editPayInfoNotifyDto.setPayNo(ksOrderNo); editPayInfoNotifyDto.setTradeNo(tradeNo); - editPayInfoNotifyDto.setPayChannel(channel); + editPayInfoNotifyDto.setPayChannel(EnumPayChannel.getPayChannelName(channel,EnumPayType.KS_PAY)); payInfoService.editPayInfoNotify(editPayInfoNotifyDto); //正确处理后返回以下内容格式通知小程序平台不再持续回调 return super.buildNotifyCheckResultMsg(EnumPayType.KS_PAY,true,messageId); 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 21780c5..0538d04 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 @@ -17,6 +17,7 @@ import com.bnyer.common.core.utils.StringUtils; import com.bnyer.pay.dto.EditPayInfoNotifyDto; import com.bnyer.pay.dto.PayNotifyCheckDto; import com.bnyer.pay.dto.UnifiedOrderDto; +import com.bnyer.pay.enums.EnumPayChannel; import com.bnyer.pay.enums.EnumPayConfigStatus; import com.bnyer.pay.enums.EnumTradeType; import com.bnyer.pay.manager.WxPayManager; @@ -162,6 +163,7 @@ public class WxPayStrategy extends AbstractPayStrategy { editPayInfoNotifyDto.setAppId(appid); editPayInfoNotifyDto.setPayId(outTradeNo); editPayInfoNotifyDto.setPayNo(transactionId); + editPayInfoNotifyDto.setPayChannel(EnumPayChannel.getPayChannelName("wxpay",EnumPayType.WX_PAY)); 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/dto/EditPayInfoNotifyDto.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/EditPayInfoNotifyDto.java index 5d997b5..79af948 100644 --- a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/EditPayInfoNotifyDto.java +++ b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/EditPayInfoNotifyDto.java @@ -18,20 +18,20 @@ public class EditPayInfoNotifyDto { //appid private String appId; - //支付号 - private String payNo; //业务系统支付订单号 private String payId; - //交易状态:TRADE_FINISHED,TRADE_SUCCESS,TRADE_CLOSED - private String tradeStatus; + //支付号:第三方 + private String payNo; + //快手用户侧订单号/抖音支付宝微信侧单号:第三方 + private String tradeNo; //交易付款时间 private String payTime; //交易退款时间 private String refundTime; //订单金额(元) private String payAmount; - //支付类型 - private String payType; + //支付渠道:wxpay/alipay/dypay + private String payChannel; } diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/UnifiedOrderDto.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/UnifiedOrderDto.java index 82865fc..87c2f8b 100644 --- a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/UnifiedOrderDto.java +++ b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/UnifiedOrderDto.java @@ -41,7 +41,7 @@ public class UnifiedOrderDto { */ private String tradeType; /** - * 商品类型:快手、抖音支付需要 + * 商品类型:快手支付需要 */ private Integer goodsType; /** diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/enums/EnumPayChannel.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/enums/EnumPayChannel.java new file mode 100644 index 0000000..240c629 --- /dev/null +++ b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/enums/EnumPayChannel.java @@ -0,0 +1,69 @@ +package com.bnyer.pay.enums; + +import com.bnyer.common.core.enums.EnumPayType; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author :WXC + * @description : + */ +@Getter +@AllArgsConstructor +public enum EnumPayChannel { + + ALI_PAY("alipay","2","ALIPAY","alipay"), + WX_PAY("wxpay","1","WECHAT","wxpay"), + DY_PAY("10","","","dypay"), + ; + + private final String code1; + + private final String code2; + + private final String code3; + + private final String name; + + public static String getPayChannelName(String code, EnumPayType payType) { + List enumPayChannelByPayType = getEnumPayChannelByPayType(payType); + for (EnumPayChannel value : enumPayChannelByPayType) { + if (value.code1.equals(code)){ + return value.getName(); + } + if (value.code2.equals(code)){ + return value.getName(); + } + if (value.code3.equals(code)){ + return value.getName(); + } + } + return null; + } + + public static List getEnumPayChannelByPayType(EnumPayType payType){ + List enumPayChannelList = new ArrayList<>(); + switch (payType){ + case ALI_PAY: + enumPayChannelList.add(ALI_PAY); + break; + case WX_PAY: + enumPayChannelList.add(WX_PAY); + break; + case DY_PAY: + enumPayChannelList.add(ALI_PAY); + enumPayChannelList.add(WX_PAY); + enumPayChannelList.add(DY_PAY); + break; + case KS_PAY: + enumPayChannelList.add(ALI_PAY); + enumPayChannelList.add(WX_PAY); + break; + } + return enumPayChannelList; + } + +} 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 8ca763b..d3fc09d 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 @@ -98,8 +98,11 @@ public class PayInfoServiceImpl extends ServiceImpl impl //构建统一下单请求实体 UnifiedOrderDto unifiedOrderDto = buildUnifiedOrderDto(dto, goodsType,payAmount,payId, request); //下单,获取第三方返回信息 - IPayStrategy IPayStrategy = PayFactory.getInstance().getConcreteStrategy(dto.getPayType()); - PayInOrderVo payInOrderVo = IPayStrategy.unifiedOrder(unifiedOrderDto); + IPayStrategy payStrategy = PayFactory.getInstance().getConcreteStrategy(dto.getPayType()); + if (Objects.isNull(payStrategy)){ + throw new ServiceException("暂不支持该支付方式"); + } + PayInOrderVo payInOrderVo = payStrategy.unifiedOrder(unifiedOrderDto); //构建支付订单完成入库 PayInfo payInfo = buildPayInfo(payInOrderVo,unifiedOrderDto,dto); payInfoMapper.insert(payInfo); diff --git a/bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/AlipayConfigMapper.xml b/bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/AlipayConfigMapper.xml index b0c2c9d..f58b648 100644 --- a/bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/AlipayConfigMapper.xml +++ b/bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/AlipayConfigMapper.xml @@ -12,12 +12,14 @@ + + id, appid, app_private_key, alipay_public_key, `key_type`, backurl, `status`, remark, - create_time, update_time + create_time, update_time,sort,is_show diff --git a/bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/DypayConfigMapper.xml b/bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/DypayConfigMapper.xml index 82a431f..ceae969 100644 --- a/bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/DypayConfigMapper.xml +++ b/bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/DypayConfigMapper.xml @@ -11,11 +11,13 @@ + + - id, appid,salt, token, backurl, `status`, remark, create_time, update_time + id, appid,salt, token, backurl, `status`, remark, create_time, update_time,sort,is_show diff --git a/bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/KspayConfigMapper.xml b/bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/KspayConfigMapper.xml index d417df9..bfa03d1 100644 --- a/bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/KspayConfigMapper.xml +++ b/bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/KspayConfigMapper.xml @@ -10,11 +10,13 @@ + + - id, appid, secret, backurl, `status`, remark, create_time, update_time + id, appid, secret, backurl, `status`, remark, create_time, update_time,sort,is_show diff --git a/bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/WxpayConfigMapper.xml b/bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/WxpayConfigMapper.xml index 832c70b..ffd24f4 100644 --- a/bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/WxpayConfigMapper.xml +++ b/bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/WxpayConfigMapper.xml @@ -12,11 +12,13 @@ + + - id, trade_type, appid, mchid, backurl, `key`, `status`, remark, create_time, update_time + id, trade_type, appid, mchid, backurl, `key`, `status`, remark, create_time, update_time, sort, is_show