rayson 6 місяців тому
батько
коміт
3712bc59e2
22 змінених файлів з 296 додано та 63 видалено
  1. 2 2
      citu-dependencies/pom.xml
  2. 1 2
      citu-module-mall/citu-module-promotion-api/src/main/java/com/citu/module/promotion/api/luck/LuckLotteryApi.java
  3. 0 2
      citu-module-mall/citu-module-promotion-api/src/main/java/com/citu/module/promotion/api/luck/LuckRaffleReqDTO.java
  4. 13 2
      citu-module-mall/citu-module-promotion-biz/src/main/java/com/citu/module/promotion/api/luck/LuckLotteryApiImpl.java
  5. 10 4
      citu-module-mall/citu-module-promotion-biz/src/main/java/com/citu/module/promotion/controller/app/luck/AppLuckLotteryController.java
  6. 29 0
      citu-module-mall/citu-module-promotion-biz/src/main/java/com/citu/module/promotion/controller/app/luck/vo/AppLuckUserTargetSaveReqVO.java
  7. 57 0
      citu-module-mall/citu-module-promotion-biz/src/main/java/com/citu/module/promotion/dal/dataobject/luck/LuckUserTargetDO.java
  8. 25 0
      citu-module-mall/citu-module-promotion-biz/src/main/java/com/citu/module/promotion/dal/mysql/luck/LuckUserTargetMapper.java
  9. 16 4
      citu-module-mall/citu-module-promotion-biz/src/main/java/com/citu/module/promotion/service/luck/LuckLotteryRecordServiceImpl.java
  10. 27 9
      citu-module-mall/citu-module-promotion-biz/src/main/java/com/citu/module/promotion/service/luck/LuckLotteryService.java
  11. 35 0
      citu-module-mall/citu-module-promotion-biz/src/main/java/com/citu/module/promotion/service/luck/LuckLotteryServiceImpl.java
  12. 2 2
      citu-module-mall/citu-module-promotion-biz/src/main/java/com/citu/module/promotion/service/luck/LuckPrizeService.java
  13. 6 4
      citu-module-mall/citu-module-promotion-biz/src/main/java/com/citu/module/promotion/service/luck/LuckPrizeServiceImpl.java
  14. 5 0
      citu-module-mall/citu-module-trade-biz/src/main/java/com/citu/module/trade/controller/app/aftersale/AppAfterSaleController.java
  15. 3 0
      citu-module-mall/citu-module-trade-biz/src/main/java/com/citu/module/trade/controller/app/brokerage/AppBrokerageRecordController.java
  16. 6 0
      citu-module-mall/citu-module-trade-biz/src/main/java/com/citu/module/trade/controller/app/brokerage/AppBrokerageUserController.java
  17. 3 0
      citu-module-mall/citu-module-trade-biz/src/main/java/com/citu/module/trade/controller/app/brokerage/AppBrokerageWithdrawController.java
  18. 8 0
      citu-module-mall/citu-module-trade-biz/src/main/java/com/citu/module/trade/controller/app/cart/AppCartController.java
  19. 13 1
      citu-module-mall/citu-module-trade-biz/src/main/java/com/citu/module/trade/controller/app/order/AppTradeOrderController.java
  20. 8 31
      citu-module-mall/citu-module-trade-biz/src/main/java/com/citu/module/trade/service/order/handler/TradeLotteryOrderHandler.java
  21. 4 0
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/TradeOrderTypeMq.java
  22. 23 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/order/AppTradeOrderController.java

+ 2 - 2
citu-dependencies/pom.xml

@@ -21,7 +21,7 @@
         <spring.security.version>5.8.14</spring.security.version>
         <spring.boot.version>2.7.18</spring.boot.version>
         <spring.cloud.version>2021.0.9</spring.cloud.version>
-        <spring.cloud.alibaba.version>2021.0.6.1</spring.cloud.alibaba.version>
+        <spring.cloud.alibaba.version>2021.0.6.2</spring.cloud.alibaba.version>
         <!-- Web 相关 -->
         <servlet.versoin>2.5</servlet.versoin>
         <springdoc.version>1.6.15</springdoc.version>
@@ -33,7 +33,7 @@
         <dynamic-datasource.version>4.3.1</dynamic-datasource.version>
         <mybatis-plus-join.version>1.4.13</mybatis-plus-join.version>
         <easy-trans.version>3.0.6</easy-trans.version>
-        <redisson.version>3.36.0</redisson.version>
+        <redisson.version>3.41.0</redisson.version>
         <dm8.jdbc.version>8.1.3.140</dm8.jdbc.version>
         <kingbase.jdbc.version>8.6.0</kingbase.jdbc.version>
         <opengauss.jdbc.version>5.1.0</opengauss.jdbc.version>

+ 1 - 2
citu-module-mall/citu-module-promotion-api/src/main/java/com/citu/module/promotion/api/luck/LuckLotteryApi.java

@@ -7,6 +7,7 @@ import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.Parameters;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -40,6 +41,4 @@ public interface LuckLotteryApi {
     @PutMapping(PREFIX + "/refund")
     @Operation(summary = "取消订单退还奖品")
     CommonResult<Boolean> refund(@RequestBody LuckRaffleReqDTO raffleReqDTO);
-
-
 }

+ 0 - 2
citu-module-mall/citu-module-promotion-api/src/main/java/com/citu/module/promotion/api/luck/LuckRaffleReqDTO.java

@@ -20,7 +20,5 @@ public class LuckRaffleReqDTO {
     private Long skuId;
     @Schema(description = "用户id")
     private Long userId;
-    @Schema(description = "城市")
-    private String cityName;
 
 }

+ 13 - 2
citu-module-mall/citu-module-promotion-biz/src/main/java/com/citu/module/promotion/api/luck/LuckLotteryApiImpl.java

@@ -1,14 +1,22 @@
 package com.citu.module.promotion.api.luck;
 
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.baomidou.lock.annotation.Lock4j;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.citu.framework.common.pojo.CommonResult;
+import com.citu.module.promotion.controller.app.luck.vo.AppLuckUserTargetSaveReqVO;
+import com.citu.module.promotion.dal.dataobject.luck.LuckUserTargetDO;
+import com.citu.module.promotion.dal.mysql.luck.LuckUserTargetMapper;
 import com.citu.module.promotion.service.luck.LuckLotteryRecordService;
 import com.citu.module.promotion.service.luck.LuckLotteryService;
-import com.citu.module.promotion.service.luck.LuckPrizeService;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 
+import java.util.HashSet;
+import java.util.Set;
+
 import static com.citu.framework.common.pojo.CommonResult.success;
 
 /**
@@ -16,7 +24,7 @@ import static com.citu.framework.common.pojo.CommonResult.success;
  *
  * @author HUIHUI
  */
-@RestController // 提供 RESTful API 接口,给 Feign 调用
+@RestController
 @Validated
 public class LuckLotteryApiImpl implements LuckLotteryApi {
 
@@ -26,6 +34,9 @@ public class LuckLotteryApiImpl implements LuckLotteryApi {
     @Resource
     private LuckLotteryRecordService luckLotteryRecordService;
 
+    @Resource
+    private LuckUserTargetMapper luckUserTargetMapper;
+
     @Override
     public CommonResult<Boolean> updateUserNumIncr(Long spuId, Long userId) {
         luckLotteryService.updateUserNumIncr(spuId, userId);

+ 10 - 4
citu-module-mall/citu-module-promotion-biz/src/main/java/com/citu/module/promotion/controller/app/luck/AppLuckLotteryController.java

@@ -6,15 +6,13 @@ import com.citu.framework.common.util.object.BeanUtils;
 import com.citu.framework.security.core.annotations.PreAuthenticated;
 import com.citu.module.promotion.controller.admin.luck.vo.LuckLotteryRespVO;
 import com.citu.module.promotion.controller.admin.luck.vo.prize.LuckPrizeDetailRespVO;
+import com.citu.module.promotion.controller.app.luck.vo.AppLuckUserTargetSaveReqVO;
 import com.citu.module.promotion.dal.dataobject.luck.LuckLotteryDO;
 import com.citu.module.promotion.service.luck.LuckLotteryService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
@@ -69,4 +67,12 @@ public class AppLuckLotteryController {
     public CommonResult<Integer> getUserNum(@RequestParam("lotteryId") Long lotteryId) {
         return success(luckLotteryService.getUserNum(lotteryId,getLoginUserId()));
     }
+
+    @PostMapping("/user-target/create")
+    @PreAuthenticated
+    @Operation(summary = "创建用户期望奖品记录")
+    public CommonResult<Boolean> createUserTarget(@RequestBody AppLuckUserTargetSaveReqVO reqVO) {
+        luckLotteryService.createUserTarget(reqVO, getLoginUserId());
+        return success(true);
+    }
 }

+ 29 - 0
citu-module-mall/citu-module-promotion-biz/src/main/java/com/citu/module/promotion/controller/app/luck/vo/AppLuckUserTargetSaveReqVO.java

@@ -0,0 +1,29 @@
+package com.citu.module.promotion.controller.app.luck.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Schema(description = "用户端 - 幸运抽奖-用户期望奖品 Request VO")
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class AppLuckUserTargetSaveReqVO {
+
+    @Schema(description = "订单Id", example = "1")
+    private Long orderId;
+
+    @Schema(description = "商品SPU id", example = "1")
+    private Long spuId;
+
+    @Schema(description = "商品SKU id", example = "1")
+    private Long skuId;
+
+    @Schema(description = "期望奖品")
+    private List<String> target;
+}

+ 57 - 0
citu-module-mall/citu-module-promotion-biz/src/main/java/com/citu/module/promotion/dal/dataobject/luck/LuckUserTargetDO.java

@@ -0,0 +1,57 @@
+package com.citu.module.promotion.dal.dataobject.luck;
+
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.citu.framework.mybatis.core.dataobject.BaseDO;
+import lombok.*;
+
+import java.util.List;
+
+/**
+ * 幸运抽奖-用户期望奖品 DO
+ *
+ * @author Rayson
+ */
+@TableName(value = "promotion_luck_user_target", autoResultMap = true)
+@KeySequence("promotion_luck_user_target_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class LuckUserTargetDO extends BaseDO {
+
+
+    /**
+     * id
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+    /**
+     * 订单id
+     */
+    private Long orderId;
+    /**
+     * 商品SPU id
+     */
+    private Long spuId;
+    /**
+     * 商品SKU id
+     */
+    private Long skuId;
+    /**
+     * 期望奖品
+     */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private List<String> target;
+
+}

+ 25 - 0
citu-module-mall/citu-module-promotion-biz/src/main/java/com/citu/module/promotion/dal/mysql/luck/LuckUserTargetMapper.java

@@ -0,0 +1,25 @@
+package com.citu.module.promotion.dal.mysql.luck;
+
+import com.citu.framework.mybatis.core.mapper.BaseMapperX;
+import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.citu.module.promotion.dal.dataobject.luck.LuckUserTargetDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 幸运抽奖-用户期望奖品 Mapper
+ *
+ * @author Rayson
+ */
+@Mapper
+public interface LuckUserTargetMapper extends BaseMapperX<LuckUserTargetDO> {
+
+
+    default LuckUserTargetDO get(Long userId,Long orderId,Long spuId,Long skuId) {
+        return selectOne(new LambdaQueryWrapperX<LuckUserTargetDO>()
+                .eq(LuckUserTargetDO::getUserId, userId)
+                .eq(LuckUserTargetDO::getOrderId, orderId)
+                .eq(LuckUserTargetDO::getSpuId, spuId)
+                .eq(LuckUserTargetDO::getSkuId, skuId)
+        );
+    }
+}

+ 16 - 4
citu-module-mall/citu-module-promotion-biz/src/main/java/com/citu/module/promotion/service/luck/LuckLotteryRecordServiceImpl.java

@@ -18,7 +18,9 @@ import com.citu.module.promotion.convert.luck.LuckLotteryRecordConvert;
 import com.citu.module.promotion.dal.dataobject.luck.LuckLotteryDO;
 import com.citu.module.promotion.dal.dataobject.luck.LuckLotteryRecordDO;
 import com.citu.module.promotion.dal.dataobject.luck.LuckPrizeDO;
+import com.citu.module.promotion.dal.dataobject.luck.LuckUserTargetDO;
 import com.citu.module.promotion.dal.mysql.luck.LuckLotteryRecordMapper;
+import com.citu.module.promotion.dal.mysql.luck.LuckUserTargetMapper;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
@@ -50,6 +52,9 @@ public class LuckLotteryRecordServiceImpl implements LuckLotteryRecordService {
     @Resource
     private LuckPrizeService luckPrizeService;
 
+    @Resource
+    private LuckUserTargetMapper luckUserTargetMapper;
+
     @Resource
     private MendunerUserApi mendunerUserApi;
 
@@ -151,7 +156,7 @@ public class LuckLotteryRecordServiceImpl implements LuckLotteryRecordService {
 
     @Override
     @DSTransactional
-    @Lock4j(keys = {"#raffleReqDTO.spuId", "#raffleReqDTO.userId", "#raffleReqDTO.cityName"}, acquireTimeout = 6000)
+    @Lock4j(keys = {"#raffleReqDTO.orderId","#raffleReqDTO.skuId", "#raffleReqDTO.userId"}, acquireTimeout = 6000)
     public LuckLotteryRecordRespVO raffle(LuckRaffleReqDTO raffleReqDTO) {
         LuckLotteryDO luckLottery = luckLotteryService.getLuckLotteryBySpuId(String.valueOf(raffleReqDTO.getSpuId()));
 
@@ -160,13 +165,20 @@ public class LuckLotteryRecordServiceImpl implements LuckLotteryRecordService {
             return null;
         }
 
-        // 获取奖品
+        // 获取奖品列表
         List<LuckPrizeDO> luckPrizeList = luckPrizeService.getListByLotteryId(luckLottery.getId());
         if (CollUtil.isEmpty(luckPrizeList)) {
             return null;
         }
-        // 筛选出 城市
-        luckPrizeList = luckPrizeService.filterCustomTypeAndCity(luckPrizeList, raffleReqDTO.getCityName());
+        // 获取意向奖品
+        LuckUserTargetDO luckUserTargetDO = luckUserTargetMapper
+                .get(raffleReqDTO.getUserId(), raffleReqDTO.getOrderId(), raffleReqDTO.getSpuId(), raffleReqDTO.getSkuId());
+        if(null == luckUserTargetDO) {
+            // 没有选期望奖品,不抽奖
+            return null;
+        }
+        // 筛选出意向奖品
+        luckPrizeList = luckPrizeService.filterCustomTypeAndCity(luckPrizeList, luckUserTargetDO.getTarget());
 
         // 计算总权重并随机选择奖品
         int totalWeight = luckPrizeList.stream().mapToInt(prize -> prize.getChance() * prize.getTotal()).sum();

+ 27 - 9
citu-module-mall/citu-module-promotion-biz/src/main/java/com/citu/module/promotion/service/luck/LuckLotteryService.java

@@ -4,6 +4,7 @@ import com.citu.framework.common.pojo.PageResult;
 import com.citu.module.promotion.controller.admin.luck.vo.LuckLotteryDetailRespVO;
 import com.citu.module.promotion.controller.admin.luck.vo.LuckLotteryPageReqVO;
 import com.citu.module.promotion.controller.admin.luck.vo.LuckLotterySaveReqVO;
+import com.citu.module.promotion.controller.app.luck.vo.AppLuckUserTargetSaveReqVO;
 import com.citu.module.promotion.dal.dataobject.luck.LuckLotteryDO;
 
 import javax.validation.Valid;
@@ -73,62 +74,79 @@ public interface LuckLotteryService {
 
     /**
      * 获得时间段内有效的抽奖活动
+     *
      * @param startTime 开始时间
-     * @param endTime 结束时间
+     * @param endTime   结束时间
      */
     List<LuckLotteryDO> getLuckLotteryListByTime(LocalDateTime startTime, LocalDateTime endTime);
 
     /**
      * 获得时间段内有效的抽奖活动
-     * @param spuId 商品id
+     *
+     * @param spuId     商品id
      * @param startTime 开始时间
-     * @param endTime 结束时间
+     * @param endTime   结束时间
      */
-    List<LuckLotteryDO> getLuckLotteryListByTime(Long spuId,LocalDateTime startTime, LocalDateTime endTime);
+    List<LuckLotteryDO> getLuckLotteryListByTime(Long spuId, LocalDateTime startTime, LocalDateTime endTime);
 
     /**
      * 获得抽奖活动
+     *
      * @param name 活动名称
      */
     LuckLotteryDO getByName(String name);
 
     /**
      * 根据spuId获得抽奖活动
+     *
      * @param spuId 商品id
      */
     LuckLotteryDO getLuckLotteryBySpuId(String spuId);
 
     /**
      * 根据spuId增加用户抽奖次数
-     * @param spuId 商品id
+     *
+     * @param spuId  商品id
      * @param userId 用户id
      **/
-    void updateUserNumIncr(Long spuId,Long userId);
+    void updateUserNumIncr(Long spuId, Long userId);
 
 
     /**
      * 根据抽奖活动id减少用户抽奖次数
+     *
      * @param lotteryId 活动id
-     * @param userId 用户id
+     * @param userId    用户id
      **/
-    void updateUserNumDecr(Long lotteryId,Long userId);
+    void updateUserNumDecr(Long lotteryId, Long userId);
 
     /**
      * 校验抽奖活动时间是否过期
+     *
      * @param luckLottery 抽奖活动
      **/
     void checkTimeExpired(LuckLotteryDO luckLottery);
 
     /**
      * 校验抽奖活动时间是否过期
+     *
      * @param luckLottery 抽奖活动
      **/
     boolean checkTimeExpiredRet(LuckLotteryDO luckLottery);
 
     /**
      * 获取用户抽奖次数
+     *
      * @param lotteryId 活动id
+     * @param userId    用户id
+     **/
+    Integer getUserNum(Long lotteryId, Long userId);
+
+    /**
+     * 创建用户期望奖品记录
+     *
+     * @param reqVO 请求参数
      * @param userId 用户id
      **/
-    Integer getUserNum(Long lotteryId,Long userId);
+    void createUserTarget(AppLuckUserTargetSaveReqVO reqVO, Long userId);
 }

+ 35 - 0
citu-module-mall/citu-module-promotion-biz/src/main/java/com/citu/module/promotion/service/luck/LuckLotteryServiceImpl.java

@@ -2,6 +2,7 @@ package com.citu.module.promotion.service.luck;
 
 
 import cn.hutool.core.collection.CollUtil;
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.lock.annotation.Lock4j;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.citu.framework.common.pojo.PageResult;
@@ -11,11 +12,14 @@ import com.citu.module.product.api.spu.dto.ProductSpuRespDTO;
 import com.citu.module.promotion.controller.admin.luck.vo.LuckLotteryDetailRespVO;
 import com.citu.module.promotion.controller.admin.luck.vo.LuckLotteryPageReqVO;
 import com.citu.module.promotion.controller.admin.luck.vo.LuckLotterySaveReqVO;
+import com.citu.module.promotion.controller.app.luck.vo.AppLuckUserTargetSaveReqVO;
 import com.citu.module.promotion.convert.luck.LuckLotteryConvert;
 import com.citu.module.promotion.dal.dataobject.luck.LuckLotteryDO;
 import com.citu.module.promotion.dal.dataobject.luck.LuckUserDO;
+import com.citu.module.promotion.dal.dataobject.luck.LuckUserTargetDO;
 import com.citu.module.promotion.dal.mysql.luck.LuckLotteryMapper;
 import com.citu.module.promotion.dal.mysql.luck.LuckUserMapper;
+import com.citu.module.promotion.dal.mysql.luck.LuckUserTargetMapper;
 import com.citu.module.promotion.enums.luck.LuckLotteryFactorEnum;
 import com.citu.module.promotion.enums.luck.LuckStatusEnum;
 import org.springframework.stereotype.Service;
@@ -23,8 +27,10 @@ import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -48,6 +54,9 @@ public class LuckLotteryServiceImpl implements LuckLotteryService {
     @Resource
     private LuckUserMapper luckUserMapper;
 
+    @Resource
+    private LuckUserTargetMapper luckUserTargetMapper;
+
     @Override
     public Long createLuckLottery(LuckLotterySaveReqVO createReqVO) {
         // 插入
@@ -264,4 +273,30 @@ public class LuckLotteryServiceImpl implements LuckLotteryService {
         }
         return luckUser.getNum();
     }
+
+    @Override
+    @DSTransactional
+    @Lock4j(keys = {"#reqVO.orderId"}, acquireTimeout = 6000)
+    public void createUserTarget(AppLuckUserTargetSaveReqVO reqVO,Long userId) {
+        LuckUserTargetDO luckUserTargetDO = luckUserTargetMapper
+                .get(userId, reqVO.getOrderId(), reqVO.getSpuId(), reqVO.getSkuId());
+        if(null == luckUserTargetDO) {
+            luckUserTargetMapper.insert(LuckUserTargetDO.builder()
+                    .userId(userId)
+                    .orderId(reqVO.getOrderId())
+                    .spuId(reqVO.getSpuId())
+                    .skuId(reqVO.getSkuId())
+                    .target(reqVO.getTarget())
+                    .build());
+        }else {
+            // 去重
+            Set<String> mergedSet = new HashSet<>(luckUserTargetDO.getTarget());
+            mergedSet.addAll(reqVO.getTarget());
+            // 修改
+            luckUserTargetMapper.update(luckUserTargetDO,new LambdaUpdateWrapper<LuckUserTargetDO>()
+                    .eq(LuckUserTargetDO::getId,luckUserTargetDO.getId())
+                    .set(LuckUserTargetDO::getTarget,mergedSet)
+            );
+        }
+    }
 }

+ 2 - 2
citu-module-mall/citu-module-promotion-biz/src/main/java/com/citu/module/promotion/service/luck/LuckPrizeService.java

@@ -158,8 +158,8 @@ public interface LuckPrizeService {
      * 过滤自定义奖品(所在城市名称)
      *
      * @param list 奖品列表
-     * @param cityName 城市名称
+     * @param cityNames 城市名称
      * @return 奖品列表
      */
-    List<LuckPrizeDO> filterCustomTypeAndCity(List<LuckPrizeDO> list, String cityName);
+    List<LuckPrizeDO> filterCustomTypeAndCity(List<LuckPrizeDO> list,  List<String> cityNames);
 }

+ 6 - 4
citu-module-mall/citu-module-promotion-biz/src/main/java/com/citu/module/promotion/service/luck/LuckPrizeServiceImpl.java

@@ -2,6 +2,7 @@ package com.citu.module.promotion.service.luck;
 
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.common.util.object.BeanUtils;
@@ -19,6 +20,7 @@ import com.citu.module.promotion.dal.dataobject.luck.LuckPrizeExtend;
 import com.citu.module.promotion.dal.dataobject.luck.LuckPrizeExtendDO;
 import com.citu.module.promotion.dal.mysql.luck.LuckPrizeExtendMapper;
 import com.citu.module.promotion.dal.mysql.luck.LuckPrizeMapper;
+import com.citu.module.promotion.dal.mysql.luck.LuckUserTargetMapper;
 import com.citu.module.promotion.enums.luck.LuckPrizeTypeEnum;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
@@ -414,13 +416,13 @@ public class LuckPrizeServiceImpl implements LuckPrizeService {
     }
 
     @Override
-    public List<LuckPrizeDO> filterCustomTypeAndCity(List<LuckPrizeDO> list, String cityName) {
+    public List<LuckPrizeDO> filterCustomTypeAndCity(List<LuckPrizeDO> list, List<String> cityNames) {
         List<LuckPrizeDO> customTypeAndCity = list.stream()
                 .filter(prize ->
                         prize.getType().equals(LuckPrizeTypeEnum.CUSTOM.getType())
-                                && null != prize.getExtend()
-                                && null != prize.getExtend().getCityName()
-                                && prize.getExtend().getCityName().equals(cityName)
+                                && prize.getExtend()!= null
+                                && prize.getExtend().getCityName()!= null
+                                && cityNames.stream().anyMatch(cityName -> StrUtil.equals(prize.getExtend().getCityName(), cityName))
                                 && prize.getTotal() > 0
                 ).collect(Collectors.toList());
         if (CollUtil.isEmpty(customTypeAndCity)) {

+ 5 - 0
citu-module-mall/citu-module-trade-biz/src/main/java/com/citu/module/trade/controller/app/aftersale/AppAfterSaleController.java

@@ -3,6 +3,7 @@ package com.citu.module.trade.controller.app.aftersale;
 import com.citu.framework.common.pojo.CommonResult;
 import com.citu.framework.common.pojo.PageParam;
 import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.security.core.annotations.PreAuthenticated;
 import com.citu.module.trade.controller.app.aftersale.vo.AppAfterSaleCreateReqVO;
 import com.citu.module.trade.controller.app.aftersale.vo.AppAfterSaleDeliveryReqVO;
 import com.citu.module.trade.controller.app.aftersale.vo.AppAfterSaleRespVO;
@@ -39,6 +40,7 @@ public class AppAfterSaleController {
 
     @GetMapping(value = "/get")
     @Operation(summary = "获得售后订单")
+    @PreAuthenticated
     @Parameter(name = "id", description = "售后编号", required = true, example = "1")
     public CommonResult<AppAfterSaleRespVO> getAfterSale(@RequestParam("id") Long id) {
         return success(AfterSaleConvert.INSTANCE.convert(afterSaleService.getAfterSale(getLoginUserId(), id)));
@@ -46,12 +48,14 @@ public class AppAfterSaleController {
 
     @PostMapping(value = "/create")
     @Operation(summary = "申请售后")
+    @PreAuthenticated
     public CommonResult<Long> createAfterSale(@RequestBody AppAfterSaleCreateReqVO createReqVO) {
         return success(afterSaleService.createAfterSale(getLoginUserId(), createReqVO));
     }
 
     @PutMapping(value = "/delivery")
     @Operation(summary = "退回货物")
+    @PreAuthenticated
     public CommonResult<Boolean> deliveryAfterSale(@RequestBody AppAfterSaleDeliveryReqVO deliveryReqVO) {
         afterSaleService.deliveryAfterSale(getLoginUserId(), deliveryReqVO);
         return success(true);
@@ -59,6 +63,7 @@ public class AppAfterSaleController {
 
     @DeleteMapping(value = "/cancel")
     @Operation(summary = "取消售后")
+    @PreAuthenticated
     @Parameter(name = "id", description = "售后编号", required = true, example = "1")
     public CommonResult<Boolean> cancelAfterSale(@RequestParam("id") Long id) {
         afterSaleService.cancelAfterSale(getLoginUserId(), id);

+ 3 - 0
citu-module-mall/citu-module-trade-biz/src/main/java/com/citu/module/trade/controller/app/brokerage/AppBrokerageRecordController.java

@@ -3,6 +3,7 @@ package com.citu.module.trade.controller.app.brokerage;
 import com.citu.framework.common.pojo.CommonResult;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.framework.security.core.annotations.PreAuthenticated;
 import com.citu.module.trade.controller.app.brokerage.vo.record.AppBrokerageProductPriceRespVO;
 import com.citu.module.trade.controller.app.brokerage.vo.record.AppBrokerageRecordPageReqVO;
 import com.citu.module.trade.controller.app.brokerage.vo.record.AppBrokerageRecordRespVO;
@@ -35,6 +36,7 @@ public class AppBrokerageRecordController {
     private BrokerageRecordService brokerageRecordService;
 
     @GetMapping("/page")
+    @PreAuthenticated
     @Operation(summary = "获得分销记录分页")
     public CommonResult<PageResult<AppBrokerageRecordRespVO>> getBrokerageRecordPage(@Valid AppBrokerageRecordPageReqVO pageReqVO) {
         PageResult<BrokerageRecordDO> pageResult = brokerageRecordService.getBrokerageRecordPage(
@@ -43,6 +45,7 @@ public class AppBrokerageRecordController {
     }
 
     @GetMapping("/get-product-brokerage-price")
+    @PreAuthenticated
     @Operation(summary = "获得商品的分销金额")
     public CommonResult<AppBrokerageProductPriceRespVO> getProductBrokeragePrice(@RequestParam("spuId") Long spuId) {
         return success(brokerageRecordService.calculateProductBrokeragePrice(getLoginUserId(), spuId));

+ 6 - 0
citu-module-mall/citu-module-trade-biz/src/main/java/com/citu/module/trade/controller/app/brokerage/AppBrokerageUserController.java

@@ -3,6 +3,7 @@ package com.citu.module.trade.controller.app.brokerage;
 import cn.hutool.core.date.LocalDateTimeUtil;
 import com.citu.framework.common.pojo.CommonResult;
 import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.security.core.annotations.PreAuthenticated;
 import com.citu.module.member.api.user.MemberUserApi;
 import com.citu.module.member.api.user.dto.MemberUserRespDTO;
 import com.citu.module.trade.controller.app.brokerage.vo.user.*;
@@ -53,6 +54,7 @@ public class AppBrokerageUserController {
     private MemberUserApi memberUserApi;
 
     @GetMapping("/get")
+    @PreAuthenticated
     @Operation(summary = "获得个人分销信息")
     public CommonResult<AppBrokerageUserRespVO> getBrokerageUser() {
         Optional<BrokerageUserDO> user = Optional.ofNullable(brokerageUserService.getOrCreateBrokerageUser(getLoginUserId()));
@@ -65,12 +67,14 @@ public class AppBrokerageUserController {
     }
 
     @PutMapping("/bind")
+    @PreAuthenticated
     @Operation(summary = "绑定推广员")
     public CommonResult<Boolean> bindBrokerageUser(@Valid @RequestBody AppBrokerageUserBindReqVO reqVO) {
         return success(brokerageUserService.bindBrokerageUser(getLoginUserId(), reqVO.getBindUserId()));
     }
 
     @GetMapping("/get-summary")
+    @PreAuthenticated
     @Operation(summary = "获得个人分销统计")
     public CommonResult<AppBrokerageUserMySummaryRespVO> getBrokerageUserSummary() {
         // 查询当前登录用户信息
@@ -116,6 +120,7 @@ public class AppBrokerageUserController {
     }
 
     @GetMapping("/child-summary-page")
+    @PreAuthenticated
     @Operation(summary = "获得下级分销统计分页")
     public CommonResult<PageResult<AppBrokerageUserChildSummaryRespVO>> getBrokerageUserChildSummaryPage(
             AppBrokerageUserChildSummaryPageReqVO pageReqVO) {
@@ -125,6 +130,7 @@ public class AppBrokerageUserController {
 
     @GetMapping("/get-rank-by-price")
     @Operation(summary = "获得分销用户排行(基于佣金)")
+    @PreAuthenticated
     @Parameter(name = "times", description = "时间段", required = true)
     public CommonResult<Integer> getRankByPrice(
             @RequestParam("times") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) LocalDateTime[] times) {

+ 3 - 0
citu-module-mall/citu-module-trade-biz/src/main/java/com/citu/module/trade/controller/app/brokerage/AppBrokerageWithdrawController.java

@@ -2,6 +2,7 @@ package com.citu.module.trade.controller.app.brokerage;
 
 import com.citu.framework.common.pojo.CommonResult;
 import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.security.core.annotations.PreAuthenticated;
 import com.citu.module.trade.controller.app.brokerage.vo.withdraw.AppBrokerageWithdrawCreateReqVO;
 import com.citu.module.trade.controller.app.brokerage.vo.withdraw.AppBrokerageWithdrawPageReqVO;
 import com.citu.module.trade.controller.app.brokerage.vo.withdraw.AppBrokerageWithdrawRespVO;
@@ -31,6 +32,7 @@ public class AppBrokerageWithdrawController {
     private BrokerageWithdrawService brokerageWithdrawService;
 
     @GetMapping("/page")
+    @PreAuthenticated
     @Operation(summary = "获得分销提现分页")
     public CommonResult<PageResult<AppBrokerageWithdrawRespVO>> getBrokerageWithdrawPage(AppBrokerageWithdrawPageReqVO pageReqVO) {
         PageResult<BrokerageWithdrawDO> pageResult = brokerageWithdrawService.getBrokerageWithdrawPage(
@@ -39,6 +41,7 @@ public class AppBrokerageWithdrawController {
     }
 
     @PostMapping("/create")
+    @PreAuthenticated
     @Operation(summary = "创建分销提现")
     public CommonResult<Long> createBrokerageWithdraw(@RequestBody @Valid AppBrokerageWithdrawCreateReqVO createReqVO) {
         return success(brokerageWithdrawService.createBrokerageWithdraw(getLoginUserId(), createReqVO));

+ 8 - 0
citu-module-mall/citu-module-trade-biz/src/main/java/com/citu/module/trade/controller/app/cart/AppCartController.java

@@ -1,6 +1,7 @@
 package com.citu.module.trade.controller.app.cart;
 
 import com.citu.framework.common.pojo.CommonResult;
+import com.citu.framework.security.core.annotations.PreAuthenticated;
 import com.citu.module.trade.controller.app.cart.vo.*;
 import com.citu.module.trade.service.cart.CartService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -30,12 +31,14 @@ public class AppCartController {
     private CartService cartService;
 
     @PostMapping("/add")
+    @PreAuthenticated
     @Operation(summary = "添加购物车商品")
     public CommonResult<Long> addCart(@Valid @RequestBody AppCartAddReqVO addCountReqVO) {
         return success(cartService.addCart(getLoginUserId(), addCountReqVO));
     }
 
     @PutMapping("/update-count")
+    @PreAuthenticated
     @Operation(summary = "更新购物车商品数量")
     public CommonResult<Boolean> updateCartCount(@Valid @RequestBody AppCartUpdateCountReqVO updateReqVO) {
         cartService.updateCartCount(getLoginUserId(), updateReqVO);
@@ -43,6 +46,7 @@ public class AppCartController {
     }
 
     @PutMapping("/update-selected")
+    @PreAuthenticated
     @Operation(summary = "更新购物车商品选中")
     public CommonResult<Boolean> updateCartSelected(@Valid @RequestBody AppCartUpdateSelectedReqVO updateReqVO) {
         cartService.updateCartSelected(getLoginUserId(), updateReqVO);
@@ -50,6 +54,7 @@ public class AppCartController {
     }
 
     @PutMapping("/reset")
+    @PreAuthenticated
     @Operation(summary = "重置购物车商品")
     public CommonResult<Boolean> resetCart(@Valid @RequestBody AppCartResetReqVO updateReqVO) {
         cartService.resetCart(getLoginUserId(), updateReqVO);
@@ -58,6 +63,7 @@ public class AppCartController {
 
     @DeleteMapping("/delete")
     @Operation(summary = "删除购物车商品")
+    @PreAuthenticated
     @Parameter(name = "ids", description = "购物车商品编号", required = true, example = "1024,2048")
     public CommonResult<Boolean> deleteCart(@RequestParam("ids") List<Long> ids) {
         cartService.deleteCart(getLoginUserId(), ids);
@@ -65,12 +71,14 @@ public class AppCartController {
     }
 
     @GetMapping("get-count")
+    @PreAuthenticated
     @Operation(summary = "查询用户在购物车中的商品数量")
     public CommonResult<Integer> getCartCount() {
         return success(cartService.getCartCount(getLoginUserId()));
     }
 
     @GetMapping("/list")
+    @PreAuthenticated
     @Operation(summary = "查询用户的购物车列表")
     public CommonResult<AppCartListRespVO> getCartList() {
         return success(cartService.getCartList(getLoginUserId()));

+ 13 - 1
citu-module-mall/citu-module-trade-biz/src/main/java/com/citu/module/trade/controller/app/order/AppTradeOrderController.java

@@ -2,6 +2,7 @@ package com.citu.module.trade.controller.app.order;
 
 import com.citu.framework.common.pojo.CommonResult;
 import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.security.core.annotations.PreAuthenticated;
 import com.citu.module.pay.api.notify.dto.PayOrderNotifyReqDTO;
 import com.citu.module.trade.controller.app.order.vo.*;
 import com.citu.module.trade.controller.app.order.vo.item.AppTradeOrderItemCommentCreateReqVO;
@@ -58,6 +59,7 @@ public class AppTradeOrderController {
     private TradeOrderProperties tradeOrderProperties;
 
     @GetMapping("/settlement")
+    @PreAuthenticated
     @Operation(summary = "获得订单结算信息")
     public CommonResult<AppTradeOrderSettlementRespVO> settlementOrder(@Valid AppTradeOrderSettlementReqVO settlementReqVO) {
         return success(tradeOrderUpdateService.settlementOrder(getLoginUserId(), settlementReqVO));
@@ -66,12 +68,13 @@ public class AppTradeOrderController {
     @GetMapping("/settlement-product")
     @Operation(summary = "获得商品结算信息", description = "用于商品列表、商品详情,获得参与活动后的价格信息")
     @Parameter(name = "spuIds", description = "商品 SPU 编号数组")
-    @PermitAll
+    @PreAuthenticated
     public CommonResult<List<AppTradeProductSettlementRespVO>> settlementProduct(@RequestParam("spuIds") List<Long> spuIds) {
         return success(priceService.calculateProductPrice(getLoginUserId(), spuIds));
     }
 
     @PostMapping("/create")
+    @PreAuthenticated
     @Operation(summary = "创建订单")
     public CommonResult<AppTradeOrderCreateRespVO> createOrder(@Valid @RequestBody AppTradeOrderCreateReqVO createReqVO) {
         TradeOrderDO order = tradeOrderUpdateService.createOrder(getLoginUserId(), createReqVO);
@@ -89,6 +92,7 @@ public class AppTradeOrderController {
 
     @GetMapping("/get-detail")
     @Operation(summary = "获得交易订单")
+    @PreAuthenticated
     @Parameters({
             @Parameter(name = "id", description = "交易订单编号"),
             @Parameter(name = "sync", description = "是否同步支付状态", example = "true")
@@ -119,6 +123,7 @@ public class AppTradeOrderController {
 
     @GetMapping("/get-express-track-list")
     @Operation(summary = "获得交易订单的物流轨迹")
+    @PreAuthenticated
     @Parameter(name = "id", description = "交易订单编号")
     public CommonResult<List<AppOrderExpressTrackRespDTO>> getOrderExpressTrackList(@RequestParam("id") Long id) {
         return success(TradeOrderConvert.INSTANCE.convertList02(
@@ -126,6 +131,7 @@ public class AppTradeOrderController {
     }
 
     @GetMapping("/page")
+    @PreAuthenticated
     @Operation(summary = "获得交易订单分页")
     public CommonResult<PageResult<AppTradeOrderPageItemRespVO>> getOrderPage(AppTradeOrderPageReqVO reqVO) {
         // 查询订单
@@ -138,6 +144,7 @@ public class AppTradeOrderController {
     }
 
     @GetMapping("/get-count")
+    @PreAuthenticated
     @Operation(summary = "获得交易订单数量")
     public CommonResult<Map<String, Long>> getOrderCount() {
         Map<String, Long> orderCount = Maps.newLinkedHashMapWithExpectedSize(5);
@@ -162,6 +169,7 @@ public class AppTradeOrderController {
 
     @PutMapping("/receive")
     @Operation(summary = "确认交易订单收货")
+    @PreAuthenticated
     @Parameter(name = "id", description = "交易订单编号")
     public CommonResult<Boolean> receiveOrder(@RequestParam("id") Long id) {
         tradeOrderUpdateService.receiveOrderByMember(getLoginUserId(), id);
@@ -170,6 +178,7 @@ public class AppTradeOrderController {
 
     @DeleteMapping("/cancel")
     @Operation(summary = "取消交易订单")
+    @PreAuthenticated
     @Parameter(name = "id", description = "交易订单编号")
     public CommonResult<Boolean> cancelOrder(@RequestParam("id") Long id) {
         tradeOrderUpdateService.cancelOrderByMember(getLoginUserId(), id);
@@ -178,6 +187,7 @@ public class AppTradeOrderController {
 
     @DeleteMapping("/delete")
     @Operation(summary = "删除交易订单")
+    @PreAuthenticated
     @Parameter(name = "id", description = "交易订单编号")
     public CommonResult<Boolean> deleteOrder(@RequestParam("id") Long id) {
         tradeOrderUpdateService.deleteOrder(getLoginUserId(), id);
@@ -188,6 +198,7 @@ public class AppTradeOrderController {
 
     @GetMapping("/item/get")
     @Operation(summary = "获得交易订单项")
+    @PreAuthenticated
     @Parameter(name = "id", description = "交易订单项编号")
     public CommonResult<AppTradeOrderItemRespVO> getOrderItem(@RequestParam("id") Long id) {
         TradeOrderItemDO item = tradeOrderQueryService.getOrderItem(getLoginUserId(), id);
@@ -195,6 +206,7 @@ public class AppTradeOrderController {
     }
 
     @PostMapping("/item/create-comment")
+    @PreAuthenticated
     @Operation(summary = "创建交易订单项的评价")
     public CommonResult<Long> createOrderItemComment(@RequestBody AppTradeOrderItemCommentCreateReqVO createReqVO) {
         return success(tradeOrderUpdateService.createOrderItemCommentByMember(getLoginUserId(), createReqVO));

+ 8 - 31
citu-module-mall/citu-module-trade-biz/src/main/java/com/citu/module/trade/service/order/handler/TradeLotteryOrderHandler.java

@@ -17,7 +17,6 @@ import java.util.List;
 @Component
 public class TradeLotteryOrderHandler implements TradeOrderHandler {
 
-    private static final String propertyName = "房劵";
     @Resource
     private LuckLotteryApi luckLotteryApi;
 
@@ -25,21 +24,15 @@ public class TradeLotteryOrderHandler implements TradeOrderHandler {
     public void afterPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
         // 支付成功后
         orderItems.forEach(item -> {
-            TradeOrderItemDO.Property property = item.getProperties().stream()
-                    .filter(c -> propertyName.equals(c.getPropertyName()))
-                    .findFirst().orElse(null);
-            if (null == property) {
-                return;
-            }
 
             int count = item.getCount();
             if (count > 1) {
                 // 购买一个sku*N的情况
                 for (int i = 0; i < count; i++) {
-                    performRaffle(order, item, property.getValueName());
+                    performRaffle(order, item);
                 }
             } else {
-                performRaffle(order, item, property.getValueName());
+                performRaffle(order, item);
             }
         });
     }
@@ -49,15 +42,13 @@ public class TradeLotteryOrderHandler implements TradeOrderHandler {
      *
      * @param order     订单
      * @param item      订单项
-     * @param cityName  城市名称
      */
-    private void performRaffle(TradeOrderDO order, TradeOrderItemDO item, String cityName) {
+    private void performRaffle(TradeOrderDO order, TradeOrderItemDO item) {
         LuckRaffleReqDTO reqDTO = LuckRaffleReqDTO.builder()
                 .orderId(order.getId())
                 .spuId(item.getSpuId())
                 .skuId(item.getSkuId())
                 .userId(order.getUserId())
-                .cityName(cityName)
                 .build();
         luckLotteryApi.raffle(reqDTO).getCheckedData();
     }
@@ -67,15 +58,13 @@ public class TradeLotteryOrderHandler implements TradeOrderHandler {
      *
      * @param order     订单
      * @param item      订单项
-     * @param cityName  城市名称
      */
-    private void performRefund(TradeOrderDO order, TradeOrderItemDO item, String cityName) {
+    private void performRefund(TradeOrderDO order, TradeOrderItemDO item) {
         LuckRaffleReqDTO reqDTO = LuckRaffleReqDTO.builder()
                 .orderId(order.getId())
                 .spuId(item.getSpuId())
                 .skuId(item.getSkuId())
                 .userId(order.getUserId())
-                .cityName(cityName)
                 .build();
         luckLotteryApi.refund(reqDTO).getCheckedData();
     }
@@ -85,20 +74,14 @@ public class TradeLotteryOrderHandler implements TradeOrderHandler {
     public void afterCancelOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
         // 订单取消后
         orderItems.forEach(item -> {
-            TradeOrderItemDO.Property property = item.getProperties().stream()
-                    .filter(c -> propertyName.equals(c.getPropertyName()))
-                    .findFirst().orElse(null);
-            if (null == property) {
-                return;
-            }
             int count = item.getCount();
             if (count > 1) {
                 // 购买一个sku*N的情况
                 for (int i = 0; i < count; i++) {
-                    performRefund(order, item, property.getValueName());
+                    performRefund(order, item);
                 }
             } else {
-                performRefund(order, item, property.getValueName());
+                performRefund(order, item);
             }
         });
     }
@@ -106,20 +89,14 @@ public class TradeLotteryOrderHandler implements TradeOrderHandler {
     @Override
     public void afterCancelOrderItem(TradeOrderDO order, TradeOrderItemDO orderItem) {
         // 订单项取消后
-        TradeOrderItemDO.Property property = orderItem.getProperties()
-                .stream().filter(c -> propertyName.equals(c.getPropertyName()))
-                .findFirst().orElse(null);
-        if (null == property) {
-            return;
-        }
         int count = orderItem.getCount();
         if (count > 1) {
             // 购买一个sku*N的情况
             for (int i = 0; i < count; i++) {
-                performRefund(order, orderItem, property.getValueName());
+                performRefund(order, orderItem);
             }
         } else {
-            performRefund(order, orderItem, property.getValueName());
+            performRefund(order, orderItem);
         }
     }
 

+ 4 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/TradeOrderTypeMq.java

@@ -14,6 +14,10 @@ public class TradeOrderTypeMq {
      * 用户支付
      */
     public static final String PAY_APP_USER_KEY = "user";
+    /**
+     * 用户微信小程序支付
+     **/
+    public static final String PAY_APP_USER_WX_PROGRAM_KEY = "wx-program";
 
 
     /** 平台订单 **/

+ 23 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/order/AppTradeOrderController.java

@@ -28,6 +28,7 @@ import static com.citu.framework.common.pojo.CommonResult.success;
 import static com.citu.module.menduner.system.enums.ErrorCodeConstants.ENTERPRISE_PACKAGE_NOT_EXISTS;
 import static com.citu.module.menduner.system.enums.ErrorCodeConstants.MDE_REQUEST_ILLEGAL;
 import static com.citu.module.menduner.system.enums.TradeOrderTypeMq.PAY_APP_USER_KEY;
+import static com.citu.module.menduner.system.enums.TradeOrderTypeMq.PAY_APP_USER_WX_PROGRAM_KEY;
 
 @Tag(name = "求职端 - 交易订单")
 @RestController
@@ -70,6 +71,28 @@ public class AppTradeOrderController {
         return success(tradeOrderService.createOrder(dto, PAY_APP_USER_KEY));
     }
 
+    @PostMapping("/wx-program/create")
+    @Operation(summary = "微信小程序创建订单")
+    @PreAuthenticated
+    @ApiSignature(timeout = 30)
+    public CommonResult<Long> create2(@RequestBody @Valid AppTradeOrderCreateReqVO reqVO) {
+        TradeOrderCreateReqVO dto = new TradeOrderCreateReqVO();
+        dto.setUserType(String.valueOf(MdeUserTypeEnum.USER.getType()));
+        dto.setUserId(LoginUserContext.getUserId());
+        dto.setType(reqVO.getType());
+        dto.setSpuId(reqVO.getSpuId());
+        dto.setSpuName(reqVO.getSpuName());
+        dto.setPrice(reqVO.getPrice());
+        UserPackageDO packageDO = userPackageService.getUserPackage(reqVO.getSpuId());
+        if (null == packageDO) {
+            throw exception(ENTERPRISE_PACKAGE_NOT_EXISTS);
+        }
+        if (null == reqVO.getPrice() || !reqVO.getPrice().equals(packageDO.getPrice())) {
+            throw exception(MDE_REQUEST_ILLEGAL);
+        }
+        return success(tradeOrderService.createOrder(dto, PAY_APP_USER_WX_PROGRAM_KEY));
+    }
+
     @GetMapping("/get/unpaid")
     @Operation(summary = "获取待支付的订单")
     @PreAuthenticated