Explorar el Código

fix(app):
1.订单逻辑修改

wzq hace 5 días
padre
commit
c00b52988a

+ 1 - 1
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/OrderController.java

@@ -126,7 +126,7 @@ public class OrderController {
 
     /**
      * 支付回调
-     * @param
+     * @param notifyRequestForm
      * @return
      */
     @Operation(summary = "支付回调")

+ 1 - 1
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/commercial/CommercialController.java

@@ -116,7 +116,7 @@ public class CommercialController {
                         .eq(ObjectUtil.isNotNull(form.getOrPostpone()), AppCoursesVerificationRecord::getOrPostpone, form.getOrPostpone())
                         .eq(ObjectUtil.isNotNull(form.getVerifyStatus()), AppCoursesVerificationRecord::getVerifyStatus, form.getVerifyStatus())
                 );
-        ArrayList<AppCoursesVerificationRecord> list = verificationRecords.stream()
+        List<AppCoursesVerificationRecord> list = verificationRecords.stream()
                 .collect(Collectors.collectingAndThen(
                         Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(AppCoursesVerificationRecord::getUseUserId))),
                         ArrayList::new

+ 3 - 2
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/my/AppFamilyMembersController.java

@@ -13,6 +13,7 @@ import org.jeecg.modules.app.dto.FindFamilyMembersDTO;
 import org.jeecg.modules.system.app.entity.FamilyMembers;
 import org.jeecg.modules.system.app.service.IFamilyMembersService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 /**
@@ -39,7 +40,7 @@ public class AppFamilyMembersController {
 
     @PostMapping("/addFamilyMembers")
     @Operation(summary = "添加家庭成员")
-    public Result<String> addFamilyMembers(@RequestBody AddFamilyMembersDTO addFamilyMembersDTO){
+    public Result<String> addFamilyMembers(@Validated @RequestBody AddFamilyMembersDTO addFamilyMembersDTO){
         LoginUser principal = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         addFamilyMembersDTO.setUserId(principal.getId());
         return iFamilyMembersService.addFamilyMembers(addFamilyMembersDTO);
@@ -53,7 +54,7 @@ public class AppFamilyMembersController {
 
     @PostMapping("/editFamilyMembers")
     @Operation(summary = "修改家庭成员")
-    public Result<String> editFamilyMembers(@RequestBody AddFamilyMembersDTO addFamilyMembersDTO){
+    public Result<String> editFamilyMembers(@Validated @RequestBody AddFamilyMembersDTO addFamilyMembersDTO){
         return iFamilyMembersService.editFamilyMembers(addFamilyMembersDTO);
     }
 

+ 7 - 8
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/dto/AddFamilyMembersDTO.java

@@ -5,7 +5,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
-import javax.validation.constraints.NotNull;
+import javax.validation.constraints.NotBlank;
 
 /**
  * 家庭成员
@@ -20,34 +20,33 @@ public class AddFamilyMembersDTO {
     @Schema(description = "id")
     private String id;
     /**姓名*/
-    @NotNull(message = "姓名不允许为空")
+    @NotBlank(message = "姓名不允许为空")
     @Schema(description = "姓名")
     private String fullName;
     /**用户编号*/
-    @NotNull(message = "用户编号不允许为空")
     @Schema(description = "用户编号")
     private String userId;
     /**身份证号*/
-    @NotNull(message = "身份证号不允许为空")
+    @NotBlank(message = "身份证号不允许为空")
     @Schema(description = "身份证号")
     private String identityCard;
     /**身份证正面照*/
-    @NotNull(message = "身份证正面照不允许为空")
+    @NotBlank(message = "身份证正面照不允许为空")
     @Schema(description = "身份证正面照")
     private String idCardFrontImg;
     /**身份证反面照*/
-    @NotNull(message = "身份证反面照不允许为空")
+    @NotBlank(message = "身份证反面照不允许为空")
     @Schema(description = "身份证反面照")
     private String idCardBackImg;
     /**手机号*/
-    @NotNull(message = "手机号不允许为空")
+    @NotBlank(message = "手机号不允许为空")
     @Schema(description = "手机号")
     private String phone;
     /**实名状态 0-未实名 ;1-已实名*/
     @Schema(description = "实名状态 0-未实名 ;1-已实名,默认未实名")
     private Integer realNameStatus;
     /**身份证反面照*/
-    @NotNull(message = "实名认证照片不允许为空")
+    @NotBlank(message = "实名认证照片不允许为空")
     @Schema(description = "实名认证照片")
     private String realNameImg;
 

+ 4 - 2
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/form/ClassPostponeForm.java

@@ -15,9 +15,11 @@ import java.util.List;
 @Schema(description = "课程延期表单对象")
 public class ClassPostponeForm implements Serializable {
     private static final long serialVersionUID = 1L;
+    //    @Schema(description = "订单ID")
+    //    private String orderId;
 
-    @Schema(description = "订单ID")
-    private String orderId;
+    @Schema(description = "原课时ID")
+    private String priceRulesId;
 
     @Schema(description = "所选补课课时ID")
     private String coursePriceRulesId;

+ 91 - 4
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/OrderServiceImpl.java

@@ -26,7 +26,6 @@ import org.jeecg.modules.app.service.IOrderService;
 import org.jeecg.modules.app.vo.AppGameScheduleVO;
 import org.jeecg.modules.app.vo.OrderVO;
 import org.jeecg.modules.app.vo.QueryOrderVerifyRecordsVO;
-import org.jeecg.modules.pay.V3LabsApi;
 import org.jeecg.modules.pay.vo.NotifyRequest;
 import org.jeecg.modules.pay.vo.NotifyResponse;
 import org.jeecg.modules.redission.RedissonDelayQueue;
@@ -44,6 +43,8 @@ import java.time.LocalTime;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.concurrent.ThreadLocalRandom;
 import java.util.stream.Collectors;
 
@@ -455,6 +456,8 @@ public class OrderServiceImpl implements IOrderService {
                         AppSitePlace appSitePlace = appSitePlaceMapper.selectById(priceRule.getSitePlaceId());
                         AppSite appSite = appSiteMapper.selectById(appSitePlace.getSiteId());
 
+                        appOrder.setOrgCode(appSite.getOrgCode());
+
                         String date = list.get(i).split("\\|")[1];
                         String startTime = DateUtil.format(priceRule.getStartTime(), "HH:mm:ss");
                         String endTime = DateUtil.format(priceRule.getEndTime(), "HH:mm:ss");
@@ -667,6 +670,9 @@ public class OrderServiceImpl implements IOrderService {
                             appCoursesVerificationRecord.setCoursesEndTime(appCoursesPriceRules.getEndTime());
                             appCoursesVerificationRecord.setUseUserId(familyUserId);
                             appCoursesVerificationRecord.setUseUserName(familyMembers.getFullName());
+                            appCoursesVerificationRecord.setUseUserPhone(familyMembers.getPhone());
+                            appCoursesVerificationRecord.setUseUserImage(familyMembers.getRealNameImg());
+                            appCoursesVerificationRecord.setUseUserName(familyMembers.getFullName());
                             appCoursesVerificationRecord.setVerifyStatus(0);
                             appCoursesVerificationRecord.setOrPostpone(0);
                             appCoursesVerificationRecord.setCoursesType(appCoursesPriceRules.getCoursesType());
@@ -770,6 +776,7 @@ public class OrderServiceImpl implements IOrderService {
             AppIsin appIsin = new AppIsin();
             appIsin
                     .setOrderId(appOrder.getId())
+                    .setOrgCode(appOrder.getOrgCode())
                     .setOrderCode(appOrder.getOrderCode())
                     .setOrderProInfoId(appOrderProInfo.getId())
                     .setFamilyId(appOrderProInfo.getFamilyUserId())
@@ -816,16 +823,96 @@ public class OrderServiceImpl implements IOrderService {
         Integer quantity = appOrder.getAmount();
 
         //拉卡拉预支付订单,返回构建小程序支付拉起参数
-        String res = V3LabsApi.transPreorder_wxpay_applet(out_trade_no, total_amount, request_ip, subject, notify_url, sub_appid, user_id, goods_id, goods_name, quantity);
-        payForm.setParams(res);
+//        String res = V3LabsApi.transPreorder_wxpay_applet(out_trade_no, total_amount, request_ip, subject, notify_url, sub_appid, user_id, goods_id, goods_name, quantity);
+//        payForm.setParams(res);
 
         //发布任务到redission延迟队列
         String task = CommonConstant.ORDER_TIME_OUT_TASK_PREFIX + appOrder.getId();
-        redissonDelayQueue.offerTask(task, 60 * 15);
+        redissonDelayQueue.offerTask(task, 60 * 3);
 
         return payForm;
     }
 
+    /**
+     * 异步走保存下单信息
+     * @param appOrder
+     * @param proInfoList
+     * @param insureOrderInfoList
+     * @param appCoursesVerificationRecordList
+     */
+    public void remoteSaveOrderInfo(final AppOrder appOrder,
+                                    final List<AppOrderProInfo> proInfoList,
+                                    final List<InsureOrderInfo> insureOrderInfoList,
+                                    final List<AppCoursesVerificationRecord> appCoursesVerificationRecordList) {
+
+        //开启线程池保存订单信息
+        remoteSaveOrderInfo(appOrder,proInfoList,insureOrderInfoList,appCoursesVerificationRecordList);
+
+        //创建一个可重用固定线程数的线程池
+        ExecutorService cachedThreadPool = Executors.newFixedThreadPool(20); //固定大小的线程池
+
+        cachedThreadPool.execute(new Runnable() {
+            @Override
+            public void run(){
+                log.info("======>[保存订单商品信息]  线程<======");
+                log.info("======>当前线程 NAME  ="+Thread.currentThread().getName());
+                log.info("======>当前线程 ID    ="+Thread.currentThread().getId());
+                log.info("======>当前线程 Count ="+Thread.activeCount());
+
+                try {
+                    Thread.sleep(500);//线程延迟0.5秒
+                    saveSignFlowRecord(appOrder);
+                    // 优化异步执行 -> 保存订单商品信息
+                    for (AppOrderProInfo appOrderProInfo : proInfoList) {
+                        appOrderProInfo
+                                .setOrderId(appOrder.getId())
+                                .setOrderCode(appOrder.getOrderCode())
+                                //生成10位随机券号
+                                .setTicketNo(RandomUtil.randomNumbers(10))
+                        ;
+                        appOrderProInfoMapper.insert(appOrderProInfo);
+                        //订单券号记录
+                        AppIsin appIsin = new AppIsin();
+                        appIsin
+                                .setOrderId(appOrder.getId())
+                                .setOrderCode(appOrder.getOrderCode())
+                                .setOrderProInfoId(appOrderProInfo.getId())
+                                .setFamilyId(appOrderProInfo.getFamilyUserId())
+                                .setFamilyUserName(appOrderProInfo.getUserName())
+                                .setUserPhone(appOrderProInfo.getUserPhone())
+                                .setUseAddress(StrUtil.isBlank(appOrderProInfo.getAddress()) ? null : appOrderProInfo.getAddress())
+                                //过期时间
+                                .setExpireTime(appOrderProInfo.getExpireTime())
+                                //生成10位随机券号
+                                .setTicketNo(appOrderProInfo.getTicketNo())
+                                .setIsinStatus(CommonConstant.ISIN_STATUS_1);
+                        appIsinMapper.insert(appIsin);
+                    }
+
+                    //保存保险
+                    for (InsureOrderInfo insureOrderInfo : insureOrderInfoList) {
+                        insureOrderInfo.setOrderId(appOrder.getId());
+                        insureOrderInfoMapper.insert(insureOrderInfo);
+                    }
+
+                    //保存核销记录
+                    for (AppCoursesVerificationRecord appCoursesVerificationRecord : appCoursesVerificationRecordList) {
+                        appCoursesVerificationRecord.setOrderId(appOrder.getId());
+                        appCoursesVerificationRecord.setOrderCode(appOrder.getOrderCode());
+                        appCoursesVerificationRecordMapper.insert(appCoursesVerificationRecord);
+                    }
+
+                } catch (NumberFormatException e) {
+                    e.printStackTrace();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        });
+        //关闭线程池
+        cachedThreadPool.shutdown();
+    }
+
     /**
      * 保存签署流程记录
      */

+ 6 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/vo/AppIsinVerifyVO.java

@@ -25,6 +25,12 @@ public class AppIsinVerifyVO implements Serializable {
     @Schema(description = "券号")
     private String ticketNo;
 
+    @Schema(description = "券状态 0-待使用 1-已使用 2-已失效")
+    private Integer isinStatus;
+
+    @Schema(description = "订单子类型(0-学校 1-包场 2-无固定场 3-个人赛 4-团队赛 5-课程)")
+    private Integer orderType;
+
     @Schema(description = "备注")
     private String remark;
 

+ 11 - 9
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppIsinMapper.xml

@@ -4,15 +4,17 @@
 
     <select id="pageAppIsinVerifyRecords" resultType="org.jeecg.modules.app.vo.AppIsinVerifyVO">
         SELECT
-            i.id,
-            i.use_time,
-            i.ticket_no,
-            i.remark,
-            opi.product_image,
-            opi.product_name,
-            opi.original_price,
-            opi.use_date_str,
-            opi.frame_time_str
+        i.id,
+        i.use_time,
+        i.ticket_no,
+        i.isin_status,
+        i.remark,
+        o.order_type,
+        opi.product_image,
+        opi.product_name,
+        opi.original_price,
+        opi.use_date_str,
+        opi.frame_time_str
         FROM
             nm_isin i
                 LEFT JOIN nm_order o ON i.order_id = o.id

+ 36 - 20
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/AppCoureseServiceImpl.java

@@ -372,45 +372,61 @@ public class AppCoureseServiceImpl extends ServiceImpl<AppCoursesMapper, AppCour
     @Override
     public List<FamilyUserVO> getClassPostponeUsers(String coursePriceRulesId) {
 
-        List<AppCoursesVerificationRecord> verificationRecordList = appCoursesVerificationRecordMapper.selectList(Wrappers.<AppCoursesVerificationRecord>lambdaQuery().eq(AppCoursesVerificationRecord::getCoursesId, coursePriceRulesId));
-
-        return verificationRecordList.stream().map(e -> {
+        List<AppCoursesVerificationRecord> verificationRecordList = appCoursesVerificationRecordMapper.selectList(Wrappers.<AppCoursesVerificationRecord>lambdaQuery().eq(AppCoursesVerificationRecord::getCoursesPriceRuleId, coursePriceRulesId));
+        List<FamilyUserVO> list = verificationRecordList.stream()
+                .collect(Collectors.collectingAndThen(
+                        Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(AppCoursesVerificationRecord::getUseUserId))),
+                        ArrayList::new
+                )).stream().map(e -> {
             FamilyUserVO familyUserVO = new FamilyUserVO();
-            familyUserVO.setFamilyUserId(e.getUseUserId()).setFamilyUserName(e.getCoursesName()).setFamilyUserImage(e.getUseUserImage());
+            familyUserVO.setFamilyUserId(e.getUseUserId()).setFamilyUserName(e.getUseUserName()).setFamilyUserImage(e.getUseUserImage());
             return familyUserVO;
         }).collect(Collectors.toList());
+
+        return list;
     }
 
     @Override
     public Boolean classPostpone(ClassPostponeForm form) {
 
-        AppOrder appOrder = appOrderMapper.selectById(form.getOrderId());
+//        AppOrder appOrder = appOrderMapper.selectById(form.getOrderId());
+        //原课时
+        AppCoursesPriceRules coursesPriceRules = priceRulesMapper.selectById(form.getPriceRulesId());
         //补课课时
         AppCoursesPriceRules appCoursesPriceRules = priceRulesMapper.selectById(form.getCoursePriceRulesId());
         //设置为延期状态
-        appCoursesPriceRules.setClassStatus(CommonConstant.STATUS_1_INT);
-        List<AppCoursesVerificationRecord> verificationRecordList = appCoursesVerificationRecordMapper.selectList(Wrappers.<AppCoursesVerificationRecord>lambdaQuery().eq(AppCoursesVerificationRecord::getCoursesPriceRuleId, form.getCoursePriceRulesId()));
-        //所有记录修改为延期
-        for (AppCoursesVerificationRecord appCoursesVerificationRecord : verificationRecordList) {
-            appCoursesVerificationRecord
-                    .setOrPostpone(CommonConstant.STATUS_1_INT)
-                    .setPostponeReason(form.getPostponeReason());
-            appCoursesVerificationRecordMapper.updateById(appCoursesVerificationRecord);
-        }
+        coursesPriceRules.setClassStatus(CommonConstant.STATUS_1_INT);
+        priceRulesMapper.updateById(appCoursesPriceRules);
 
         for (FamilyUserVO familyUserVO : form.getFamilyUserVOList()) {
+
+            FamilyMembers familyMembers = familyMembersMapper.selectById(familyUserVO.getFamilyUserId());
+
+            List<AppCoursesVerificationRecord> verificationRecordList = appCoursesVerificationRecordMapper.selectList(Wrappers.<AppCoursesVerificationRecord>lambdaQuery()
+                    .eq(AppCoursesVerificationRecord::getCoursesPriceRuleId, form.getPriceRulesId())
+                    .eq(AppCoursesVerificationRecord::getUseUserId,familyMembers.getId())
+            );
+            //所有记录修改为延期
+            for (AppCoursesVerificationRecord appCoursesVerificationRecord : verificationRecordList) {
+                appCoursesVerificationRecord
+                        .setOrPostpone(CommonConstant.STATUS_1_INT)
+                        .setPostponeReason(form.getPostponeReason());
+                appCoursesVerificationRecordMapper.updateById(appCoursesVerificationRecord);
+            }
+
             AppCoursesVerificationRecord verificationRecord = new AppCoursesVerificationRecord();
-            verificationRecord.setOrderId(appOrder.getId());
-            verificationRecord.setOrderCode(appOrder.getOrderCode());
-            verificationRecord.setCoursesId(appOrder.getProductIds());
+//            verificationRecord.setOrderId(appOrder.getId());
+//            verificationRecord.setOrderCode(appOrder.getOrderCode());
+            verificationRecord.setCoursesId(appCoursesPriceRules.getCoursesId());
             verificationRecord.setCoursesPriceRuleId(appCoursesPriceRules.getId());
             verificationRecord.setCoursesName(appCoursesPriceRules.getName());
             verificationRecord.setCoursesStartTime(appCoursesPriceRules.getStartTime());
             verificationRecord.setCoursesEndTime(appCoursesPriceRules.getEndTime());
             verificationRecord.setUseUserId(familyUserVO.getFamilyUserId());
-            verificationRecord.setUseUserName(familyUserVO.getFamilyUserName());
-            verificationRecord.setUseUserImage(familyUserVO.getFamilyUserImage());
-            verificationRecord.setVerifyStatus(CommonConstant.STATUS_1_INT);
+            verificationRecord.setUseUserName(familyMembers.getFullName());
+            verificationRecord.setUseUserImage(familyMembers.getRealNameImg());
+            verificationRecord.setUseUserPhone(familyMembers.getPhone());
+            verificationRecord.setVerifyStatus(CommonConstant.STATUS_0_INT);
             verificationRecord.setCoursesType(CommonConstant.STATUS_1_INT);
             appCoursesVerificationRecordMapper.insert(verificationRecord);
         }