Browse Source

feat(app):
1.增加协议说明表及实体
2.订单生成逻辑

wzq 3 ngày trước cách đây
mục cha
commit
9d94bd7a13
17 tập tin đã thay đổi với 673 bổ sung70 xóa
  1. 11 0
      national-motion-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java
  2. 8 3
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/OrderController.java
  3. 21 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/dto/CertificationDTO.java
  4. 7 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/form/CreateOrderForm.java
  5. 27 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/form/GameCertificationForm.java
  6. 1 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/IOrderService.java
  7. 263 50
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/OrderServiceImpl.java
  8. 2 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/quartz/job/OrTeachingJobService.java
  9. 182 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/ProtocolController.java
  10. 8 2
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/AppOrder.java
  11. 3 3
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/AppOrderProInfo.java
  12. 85 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/Protocol.java
  13. 17 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/ProtocolMapper.java
  14. 2 9
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppTeachingTimeMapper.xml
  15. 5 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/ProtocolMapper.xml
  16. 14 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IProtocolService.java
  17. 17 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/ProtocolServiceImpl.java

+ 11 - 0
national-motion-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java

@@ -645,4 +645,15 @@ public interface CommonConstant {
    Integer ORDER_TYPE_1 = 1;
    Integer ORDER_TYPE_2 = 2;
 
+    /**
+     * 商品类型(1-学校 2-包场 3-无固定场 4-个人赛 5-团队赛 6-课程 7-保险)")
+     */
+    Integer ORDER_PRO_INFO_TYPE_1 = 1;
+    Integer ORDER_PRO_INFO_TYPE_2 = 2;
+    Integer ORDER_PRO_INFO_TYPE_3 = 3;
+    Integer ORDER_PRO_INFO_TYPE_4 = 4;
+    Integer ORDER_PRO_INFO_TYPE_5 = 5;
+    Integer ORDER_PRO_INFO_TYPE_6 = 6;
+    Integer ORDER_PRO_INFO_TYPE_7 = 7;
+
 }

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

@@ -107,9 +107,14 @@ public class OrderController {
         return Result.ok(appOrderService.previewOrderPlaceSchoolTime(placeId));
     }
 
-    @Operation(summary = "学校场地预约-创建")
+    /**
+     * 订单-创建
+     * @param createOrderForm
+     * @return
+     */
+    @Operation(summary = "订单-创建")
     @PostMapping("/createOrder")
-    public Result<UserPayForm> schoolPlaceOrder(@RequestBody CreateOrderForm createOrderForm) {
-        return Result.ok(appOrderService.schoolPlaceOrder(createOrderForm));
+    public Result<UserPayForm> createOrder(@RequestBody CreateOrderForm createOrderForm) {
+        return Result.ok(appOrderService.createOrder(createOrderForm));
     }
 }

+ 21 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/dto/CertificationDTO.java

@@ -0,0 +1,21 @@
+package org.jeecg.modules.app.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@Schema(description = "资质表单对象")
+public class CertificationDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    //资质名称
+    private  String name;
+    //图片(多个逗号分割)
+    private  String certificationImg;
+}

+ 7 - 1
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/form/CreateOrderForm.java

@@ -20,8 +20,11 @@ public class CreateOrderForm implements Serializable {
     @NotNull(message = "订单类型不能为空")
     public Integer type;
 
+    //场地类型;0-学校 1-包场 2-无固定场 3-个人赛 4-团队赛
+    public Integer orderType;
+
     //商品IDs
-    private String productId;
+    private String productIds;
 
     //数量
     private Integer amount;
@@ -32,4 +35,7 @@ public class CreateOrderForm implements Serializable {
     //保险表单
     private InsureOrderInfoForm insureOrderInfoForm;
 
+    //参赛资质
+    private String gameCertificationForm;
+
 }

+ 27 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/form/GameCertificationForm.java

@@ -0,0 +1,27 @@
+package org.jeecg.modules.app.form;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.modules.app.dto.CertificationDTO;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@Schema(description = "参赛资质表单对象")
+public class GameCertificationForm implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    //队名
+    private String teamName;
+
+    //队徽
+    private String teamEmblemImg;
+
+    //资质
+    private List<CertificationDTO> certificationDTOS;
+}

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

@@ -63,5 +63,5 @@ public interface IOrderService {
      **/
     List<OrderVO.PreviewOrderPlaceSchoolTime> previewOrderPlaceSchoolTime(String placeId);
 
-    UserPayForm schoolPlaceOrder(CreateOrderForm createOrderForm);
+    UserPayForm createOrder(CreateOrderForm createOrderForm);
 }

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

@@ -25,7 +25,10 @@ import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.ZoneId;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
 import java.util.concurrent.ThreadLocalRandom;
 import java.util.stream.Collectors;
 
@@ -57,7 +60,15 @@ public class OrderServiceImpl implements IOrderService {
     @Resource
     private AppInsureMapper appInsureMapper;
     @Resource
-    private AppOrderProInfoMapper  appOrderProInfoMapper;
+    private AppOrderProInfoMapper appOrderProInfoMapper;
+    @Resource
+    private AppContractInfoMapper appContractInfoMapper;
+    @Resource
+    private AppGamePriceRulesMapper appGamePriceRulesMapper;
+    @Resource
+    private AppGameMapper appGameMapper;
+    @Resource
+    private AppGameScheduleMapper appGameScheduleMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -199,7 +210,8 @@ public class OrderServiceImpl implements IOrderService {
      * @return 支付订单对象
      */
     @Override
-    public UserPayForm schoolPlaceOrder(CreateOrderForm createOrderForm) {
+    @Transactional(rollbackFor = Exception.class)
+    public UserPayForm createOrder(CreateOrderForm createOrderForm) {
         //获取登录用户
         LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
 
@@ -210,83 +222,259 @@ public class OrderServiceImpl implements IOrderService {
         appOrder
                 .setOrderCode(orderCode)
                 .setUserId(user.getId())
-                .setOrgCode(user.getOrgCode())
                 .setUserPhone(user.getPhone())
-                .setPayTime(new Date())
                 .setOrderStatus(0)
-                .setProductIds(createOrderForm.getProductId())
+                .setProductIds(createOrderForm.getProductIds())
                 .setAmount(createOrderForm.getAmount())
         ;
 
-        //合同编号
-
-
         List<AppOrderProInfo> proInfoList = new ArrayList<>();
 
         //订单内容
         switch (createOrderForm.getType()) {
-            //场地
+            //场地(学校,包场,无固定场)
             case 0:
-                AppSitePriceRules priceRule = appSitePriceRulesMapper.selectById(createOrderForm.getProductId());
-                //订单金额
-                BigDecimal totalPrice = priceRule.getSellingPrice().setScale(2, BigDecimal.ROUND_HALF_UP);
-
-                if (priceRule.getType() == 0) {
-                    if (totalPrice.compareTo(BigDecimal.ZERO) == 0) {
-                        appOrder.setPayType(3)
+                //学校
+                if (createOrderForm.getOrderType() == 0) {
+                    AppSitePriceRules priceRule = appSitePriceRulesMapper.selectById(createOrderForm.getProductIds());
+                    AppSitePlace appSitePlace = appSitePlaceMapper.selectById(priceRule.getSitePlaceId());
+                    AppSite appSite = appSiteMapper.selectById(appSitePlace.getSiteId());
+                    appOrder
+                            .setPayType(3)
+                            .setOrderStatus(2)
+                            .setOrgCode(appSite.getOrgCode())
+                            .setTenantId(appSite.getTenantId())
+                            .setType(CommonConstant.ORDER_TYPE_0)
+                            //使用人IDs
+                            .setFamilyIds(createOrderForm.getFamilyIds())
+                            .setOriginalPrice(priceRule.getSellingPrice())
+                            .setPrice(priceRule.getSellingPrice())
+                            .setCreateTime(new Date())
+                            .setUpdateTime(new Date())
+                            .setCreateBy(user.getId())
+                            .setUpdateBy(user.getId())
+                            .setStatus(CommonConstant.STATUS_NORMAL)
+                            .setDelFlag(CommonConstant.DEL_FLAG_0);
+                    //使用人
+                    List<String> ids = Arrays.stream(createOrderForm.getFamilyIds().split(",")).collect(Collectors.toList());
+                    for (String id : ids) {
+                        FamilyMembers familyMembers = familyMembersMapper.selectById(id);
+
+                        AppOrderProInfo appOrderProInfo = new AppOrderProInfo();
+                        appOrderProInfo
+                                .setProductId(priceRule.getId())
+                                .setProductName("学校场地预约")
+                                .setType(CommonConstant.ORDER_PRO_INFO_TYPE_1)
+                                .setUseDateStr(DateUtil.format(priceRule.getDateOfSale(), "yyyy-MM-dd"))
+                                .setFrameTimeStr(priceRule.getStartTime() + "-" + priceRule.getEndTime())
+                                .setPrice(priceRule.getSellingPrice())
                                 .setOrderStatus(2)
-                                .setPayTime(new Date());
-                    } else {
-                        appOrder.setPayType(2)
-                                .setOrderStatus(0);
+                                .setQuantity(1)
+                                .setFamilyUserId(id)
+                                .setUserName(familyMembers.getFullName())
+                                .setUserPhone(familyMembers.getPhone())
+                                .setStatus(CommonConstant.STATUS_0_INT)
+                                .setDelFlag(CommonConstant.DEL_FLAG_0);
+
+                        proInfoList.add(appOrderProInfo);
+                    }
+                }
+
+                //包场
+                if (createOrderForm.getOrderType() == 1) {
+
+                    List<String> list = Arrays.stream(createOrderForm.getProductIds().split(",")).collect(Collectors.toList());
+
+                    //订单总价(商品的售价总和)
+                    BigDecimal sumPrice = new BigDecimal(0);
+
+                    for (String id : list) {
+                        AppSitePriceRules priceRule = appSitePriceRulesMapper.selectById(list.get(0));
+                        AppSitePlace appSitePlace = appSitePlaceMapper.selectById(priceRule.getSitePlaceId());
+
+                        AppOrderProInfo appOrderProInfo = new AppOrderProInfo();
+                        appOrderProInfo.setProductId(id);
+                        appOrderProInfo.setProductName(priceRule.getDateOfSale()+" "+priceRule.getStartTime()+"-"+priceRule.getEndTime()+"|"+appSitePlace.getName());
+                        appOrderProInfo.setType(CommonConstant.ORDER_PRO_INFO_TYPE_2);
+                        appOrderProInfo.setPrice(priceRule.getSellingPrice());
+                        appOrderProInfo.setOrderStatus(0);
+                        appOrderProInfo.setQuantity(1);
+                        appOrderProInfo.setStatus(CommonConstant.STATUS_0_INT);
+                        appOrderProInfo.setDelFlag(CommonConstant.DEL_FLAG_0);
+
+                        proInfoList.add(appOrderProInfo);
+                        appOrder.setOrgCode(appSitePlace.getOrgCode())
+                                .setTenantId(appSitePlace.getTenantId());
+
+                        sumPrice = sumPrice.add(priceRule.getSellingPrice()).setScale(2, BigDecimal.ROUND_HALF_UP);
                     }
+
+                    appOrder
+                            .setType(CommonConstant.ORDER_TYPE_0)
+                            .setOriginalPrice(sumPrice)
+                            .setCreateTime(new Date())
+                            .setUpdateTime(new Date())
+                            .setCreateBy(user.getId())
+                            .setUpdateBy(user.getId())
+                            .setStatus(CommonConstant.STATUS_NORMAL)
+                            .setDelFlag(CommonConstant.DEL_FLAG_0);
+                }
+
+                //无固定场
+                if (createOrderForm.getOrderType() == 2) {
+                    AppSitePriceRules priceRule = appSitePriceRulesMapper.selectById(createOrderForm.getProductIds());
+                    AppSitePlace appSitePlace = appSitePlaceMapper.selectById(priceRule.getSitePlaceId());
+                    AppSite appSite = appSiteMapper.selectById(appSitePlace.getSiteId());
+
+                    //订单总价(商品的售价总和)
+                    BigDecimal sumPrice = new BigDecimal(0);
+                    //团购优惠
+                    BigDecimal tDiscounts = new BigDecimal(0);
+
+                    for (int i = 1; i <= createOrderForm.getAmount(); i++) {
+
+                        AppOrderProInfo appOrderProInfo = new AppOrderProInfo();
+                        appOrderProInfo.setProductId(createOrderForm.getProductIds());
+                        appOrderProInfo.setProductName(appSitePlace.getName());
+                        appOrderProInfo.setType(CommonConstant.ORDER_PRO_INFO_TYPE_3);
+                        appOrderProInfo.setFrameTimeStr(appSite.getStartTime() + "-" + appSite.getEndTime());
+                        appOrderProInfo.setPrice(priceRule.getSellingPrice());
+                        appOrderProInfo.setOrderStatus(0);
+                        appOrderProInfo.setQuantity(1);
+                        appOrderProInfo.setStatus(CommonConstant.STATUS_0_INT);
+                        appOrderProInfo.setDelFlag(CommonConstant.DEL_FLAG_0);
+
+                        proInfoList.add(appOrderProInfo);
+
+                        tDiscounts = tDiscounts.add(priceRule.getOriginalPrice().subtract(priceRule.getSellingPrice())).setScale(2, BigDecimal.ROUND_HALF_UP);
+                        sumPrice = sumPrice.add(priceRule.getSellingPrice()).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    }
+
+                    appOrder
+                            .setOrgCode(appSite.getOrgCode())
+                            .setTenantId(appSite.getTenantId())
+                            .setType(CommonConstant.ORDER_TYPE_0)
+                            .setTDiscounts(tDiscounts)
+                            .setOriginalPrice(sumPrice)
+                            .setCreateTime(new Date())
+                            .setUpdateTime(new Date())
+                            .setCreateBy(user.getId())
+                            .setUpdateBy(user.getId())
+                            .setStatus(CommonConstant.STATUS_NORMAL)
+                            .setDelFlag(CommonConstant.DEL_FLAG_0);
                 }
-                appOrder
-                        .setProductIds(priceRule.getSitePlaceId())
-                        .setType(0)
-                        .setOriginalPrice(totalPrice)
-                        .setPrice(totalPrice)
-                        .setCreateTime(new Date())
-                        .setUpdateTime(new Date())
-                        .setCreateBy(user.getId())
-                        .setUpdateBy(user.getId());
                 break;
             //赛事
             case 1:
+                //个人赛
+
+                    AppGamePriceRules appGamePriceRules = appGamePriceRulesMapper.selectById(createOrderForm.getProductIds());
+                    AppGame appGame = appGameMapper.selectById(appGamePriceRules.getGameId());
+
+                    appOrder.setOrgCode(appGamePriceRules.getOrgCode());
+                    appOrder.setTenantId(appGamePriceRules.getTenantId());
+
+                    //订单总价(商品的售价总和)
+                    BigDecimal sumPrice = new BigDecimal(0);
+
+                    for (int i = 1; i <= createOrderForm.getAmount(); i++) {
+
+                        String familyUserId = createOrderForm.getFamilyIds().split(",")[i - 1];
+                        FamilyMembers familyMembers = familyMembersMapper.selectById(familyUserId);
+                        AppOrderProInfo appOrderProInfo = new AppOrderProInfo();
+                        appOrderProInfo.setProductId(createOrderForm.getProductIds());
+                        appOrderProInfo.setProductName(appGame.getName());
+                        if (createOrderForm.getOrderType() == 3) {
+                            appOrderProInfo.setType(CommonConstant.ORDER_PRO_INFO_TYPE_4);
+                        }
+                        if (createOrderForm.getOrderType() == 4) {
+                            appOrderProInfo.setType(CommonConstant.ORDER_PRO_INFO_TYPE_5);
+                        }
+                        appOrderProInfo.setFrameTimeStr(appGame.getStartTime() + "-" + appGame.getEndTime());
+                        appOrderProInfo.setPrice(appGamePriceRules.getSellingPrice());
+                        appOrderProInfo.setOrderStatus(0);
+                        appOrderProInfo.setQuantity(1);
+                        appOrderProInfo.setFamilyUserId(familyUserId);
+                        appOrderProInfo.setUserName(familyMembers.getFullName());
+                        appOrderProInfo.setUserPhone(familyMembers.getPhone());
+                        appOrderProInfo.setStatus(CommonConstant.STATUS_0_INT);
+                        appOrderProInfo.setDelFlag(CommonConstant.DEL_FLAG_0);
+
+                        proInfoList.add(appOrderProInfo);
+
+                        sumPrice = sumPrice.add(appGamePriceRules.getSellingPrice()).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    }
 
+                    appOrder
+                            .setType(CommonConstant.ORDER_TYPE_1)
+                            .setOriginalPrice(sumPrice)
+                            .setCreateTime(new Date())
+                            .setUpdateTime(new Date())
+                            .setCreateBy(user.getId())
+                            .setUpdateBy(user.getId())
+                            .setStatus(CommonConstant.STATUS_NORMAL)
+                            .setDelFlag(CommonConstant.DEL_FLAG_0);
                 break;
             //课程
             case 2:
-                //如果当前课程商品类目是第一次购买,触发免费政策
-                //优惠金额
+                //课程
+                AppCourses appCourse = appCoursesMapper.selectById(appOrder.getProductIds());
+
+                appOrder.setType(CommonConstant.ORDER_TYPE_2);
+                appOrder.setOrgCode(appCourse.getOrgCode());
+                appOrder.setTenantId(appCourse.getTenantId());
+
+                //合同编号
+                AppContractInfo appContractInfo = appContractInfoMapper.selectOne(Wrappers.<AppContractInfo>lambdaQuery().eq(AppContractInfo::getOrgCode, appOrder.getOrgCode()));
+                appOrder.setContractNo(appContractInfo.getId());
+
+                //订单总价(商品的售价总和)
+                BigDecimal sumCoursePrice = new BigDecimal(0);
+
+                //优惠金额,如果当前课程商品类目是第一次购买,触发免费政策
                 BigDecimal sDiscounts = new BigDecimal(0);
                 BigDecimal tDiscounts = new BigDecimal(0);
+
                 for (int i = 1; i <= createOrderForm.getAmount(); i++) {
 
+                    String familyUserId = createOrderForm.getFamilyIds().split(",")[i - 1];
+                    FamilyMembers familyMembers = familyMembersMapper.selectById(familyUserId);
                     AppOrderProInfo appOrderProInfo = new AppOrderProInfo();
-
-                    AppCourses appCours = appCoursesMapper.selectById(appOrder.getProductIds());
-                    Boolean flag = checkOrderOrFree(user.getId(), appCours.getCategoryId());
-                    if (!flag && i==1){
+                    appOrderProInfo.setProductId(createOrderForm.getProductIds());
+                    appOrderProInfo.setProductName(appCourse.getName());
+                    appOrderProInfo.setType(CommonConstant.ORDER_PRO_INFO_TYPE_6);
+                    appOrderProInfo.setFrameTimeStr(DateUtil.format(appCourse.getStartTime(),"yyyy-MM-dd") + "-" + DateUtil.format(appCourse.getEndTime(),"yyyy-MM-dd"));
+                    appOrderProInfo.setPrice(appCourse.getSellingPrice());
+                    appOrderProInfo.setOrderStatus(0);
+                    appOrderProInfo.setQuantity(1);
+                    appOrderProInfo.setFamilyUserId(familyUserId);
+                    appOrderProInfo.setUserName(familyMembers.getFullName());
+                    appOrderProInfo.setUserPhone(familyMembers.getPhone());
+                    appOrderProInfo.setStatus(CommonConstant.STATUS_0_INT);
+                    appOrderProInfo.setDelFlag(CommonConstant.DEL_FLAG_0);
+
+                    Boolean flag = checkOrderOrFree(user.getId(), appCourse.getCategoryId());
+                    if (!flag && i == 1) {
                         //订单中的多个商品中的第一个商品触发免费,将金额设置为优惠金额
-                        sDiscounts = sDiscounts.add(appCours.getSellingPrice());
+                        sDiscounts = sDiscounts.add(appCourse.getSellingPrice());
                         appOrderProInfo.setOrFreePro(CommonConstant.STATUS_1_INT);
+                        appOrder.setContractNo(null);
+                        //试听优惠
+                        appOrder.setSDiscounts(sDiscounts);
                     }
                     proInfoList.add(appOrderProInfo);
-                    tDiscounts = tDiscounts.add(appCours.getOriginalPrice().subtract(appCours.getSellingPrice())).setScale(2, BigDecimal.ROUND_HALF_UP);
+
+                    tDiscounts = tDiscounts.add(appCourse.getOriginalPrice().subtract(appCourse.getSellingPrice())).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    sumCoursePrice = sumCoursePrice.add(appCourse.getSellingPrice()).setScale(2, BigDecimal.ROUND_HALF_UP);
                 }
-                appOrder.setSDiscounts(sDiscounts);
-                appOrder.setTDiscounts(tDiscounts);
 
+                //团购优惠
+                appOrder.setTDiscounts(tDiscounts);
+                //原订单总价
+                appOrder.setOriginalPrice(sumCoursePrice);
+                //使用人IDs
+                appOrder.setFamilyIds(createOrderForm.getFamilyIds());
                 break;
-
-        }
-        appOrderMapper.insert(appOrder);
-
-        //保存订单商品信息
-        for (AppOrderProInfo appOrderProInfo : proInfoList) {
-            appOrderProInfo.setOrderId(appOrder.getId());
-            appOrderProInfoMapper.insert(appOrderProInfo);
         }
 
         //构建保单内容
@@ -299,7 +487,7 @@ public class OrderServiceImpl implements IOrderService {
                 InsureOrderInfo insureOrderInfo = new InsureOrderInfo();
                 insureOrderInfo
                         .setOrderId(appOrder.getId())
-                        .setBdOrderNo("0000000000")
+                        .setBdOrderNo(generateOrderNumber(2))
                         .setInsureName(appInsure.getInsuranceType_dictText())
                         .setInsureCompany(appInsure.getInsuranceName_dictText())
                         .setInsureId(appInsure.getId())
@@ -310,7 +498,31 @@ public class OrderServiceImpl implements IOrderService {
                         .setIsEnterSystem(CommonConstant.STATUS_0_INT)
                 ;
                 insureOrderInfoMapper.insert(insureOrderInfo);
+
+                AppOrderProInfo appOrderProInfo = new AppOrderProInfo();
+                appOrderProInfo.setProductId(insureOrderInfo.getId());
+                appOrderProInfo.setProductName(insureOrderInfo.getInsureName());
+                appOrderProInfo.setType(CommonConstant.ORDER_PRO_INFO_TYPE_7);
+
+                appOrderProInfo.setPrice(insureOrderInfo.getMoney());
+                appOrderProInfo.setQuantity(1);
+                FamilyMembers familyMembers = familyMembersMapper.selectById(id);
+                appOrderProInfo.setFamilyUserId(id);
+                appOrderProInfo.setUserName(familyMembers.getFullName());
+                appOrderProInfo.setUserPhone(familyMembers.getPhone());
+                appOrderProInfo.setStatus(CommonConstant.STATUS_0_INT);
+                appOrderProInfo.setDelFlag(CommonConstant.DEL_FLAG_0);
             }
+            //计算总价 = 订单金额 + 保单金额
+            appOrder.setPrice(appOrder.getPrice().add(insureOrderInfoForm.getMoney()));
+        }
+
+        appOrderMapper.insert(appOrder);
+
+        //保存订单商品信息
+        for (AppOrderProInfo appOrderProInfo : proInfoList) {
+            appOrderProInfo.setOrderId(appOrder.getId());
+            appOrderProInfoMapper.insert(appOrderProInfo);
         }
 
         //构建支付表单返回给前端支撑支付调用
@@ -319,7 +531,6 @@ public class OrderServiceImpl implements IOrderService {
                 .setOrderCode(orderCode)
         ;
         return payForm;
-
     }
 
 
@@ -409,10 +620,12 @@ public class OrderServiceImpl implements IOrderService {
      * @Author SheepHy
      * @Description 订单编号生成逻辑
      * @Date 17:18 2025/7/15
+     * @params 类型:0-(D:订单) 1-(T:退单) 2-(B:保单)
      **/
     private String generateOrderNumber(int type) {
         String format = DateUtil.format(new Date(), "yyyyMMddHHmmss");
         int nextInt = ThreadLocalRandom.current().nextInt(1000, 10000);
+
         if (type == 0) {
             return "D" + format + nextInt;
         } else {

+ 2 - 1
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/quartz/job/OrTeachingJobService.java

@@ -20,6 +20,7 @@ import org.jeecg.modules.system.app.service.IAppSitePlaceService;
 import org.jeecg.modules.system.app.service.IAppSitePriceRulesService;
 import org.jeecg.modules.system.app.service.IAppSiteService;
 import org.jeecg.modules.system.app.service.IAppTeachingTimeService;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -48,7 +49,7 @@ public class OrTeachingJobService {
 
     private final IAppSiteService appSiteService;
 
-//    @Scheduled(cron = "0 23 15 ? * *")
+    @Scheduled(cron = "0 00 15 ? * *")
     @Transactional(rollbackFor = Exception.class)
     public void execute() throws ParseException {
         log.info("开始执行定时任务");

+ 182 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/ProtocolController.java

@@ -0,0 +1,182 @@
+package org.jeecg.modules.system.app.controller;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.query.QueryRuleEnum;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.demo.protocol.entity.Protocol;
+import org.jeecg.modules.demo.protocol.service.IProtocolService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+ /**
+ * @Description: 协议说明
+ * @Author: jeecg-boot
+ * @Date:   2025-07-31
+ * @Version: V1.0
+ */
+@Tag(name="协议说明")
+@RestController
+@RequestMapping("/protocol/protocol")
+@Slf4j
+public class ProtocolController extends JeecgController<Protocol, IProtocolService> {
+	@Autowired
+	private IProtocolService protocolService;
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param protocol
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "协议说明-分页列表查询")
+	@Operation(summary="协议说明-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<Protocol>> queryPageList(Protocol protocol,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+
+
+        QueryWrapper<Protocol> queryWrapper = QueryGenerator.initQueryWrapper(protocol, req.getParameterMap());
+		Page<Protocol> page = new Page<Protocol>(pageNo, pageSize);
+		IPage<Protocol> pageList = protocolService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param protocol
+	 * @return
+	 */
+	@AutoLog(value = "协议说明-添加")
+	@Operation(summary="协议说明-添加")
+	@RequiresPermissions("protocol:nm_protocol:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody Protocol protocol) {
+		protocolService.save(protocol);
+
+		return Result.OK("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param protocol
+	 * @return
+	 */
+	@AutoLog(value = "协议说明-编辑")
+	@Operation(summary="协议说明-编辑")
+	@RequiresPermissions("protocol:nm_protocol:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody Protocol protocol) {
+		protocolService.updateById(protocol);
+		return Result.OK("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "协议说明-通过id删除")
+	@Operation(summary="协议说明-通过id删除")
+	@RequiresPermissions("protocol:nm_protocol:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		protocolService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "协议说明-批量删除")
+	@Operation(summary="协议说明-批量删除")
+	@RequiresPermissions("protocol:nm_protocol:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.protocolService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "协议说明-通过id查询")
+	@Operation(summary="协议说明-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<Protocol> queryById(@RequestParam(name="id",required=true) String id) {
+		Protocol protocol = protocolService.getById(id);
+		if(protocol==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(protocol);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param protocol
+    */
+    @RequiresPermissions("protocol:nm_protocol:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, Protocol protocol) {
+        return super.exportXls(request, protocol, Protocol.class, "协议说明");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    @RequiresPermissions("protocol:nm_protocol:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, Protocol.class);
+    }
+
+}

+ 8 - 2
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/AppOrder.java

@@ -43,9 +43,15 @@ public class AppOrder implements Serializable {
     @Schema(description = "订单类型")
     private Integer type;
     /**部门id*/
-	@Excel(name = "部门id", width = 15)
-    @Schema(description = "部门id")
+    @Excel(name = "部门编码", width = 15)
+    @Schema(description = "部门编码")
     private String orgCode;
+    /**
+     * 部门id
+     */
+    @Excel(name = "部门id", width = 15)
+    @Schema(description = "部门id")
+    private String tenantId;
 	/**产品id列表;场地/赛事/课程*/
 	@Excel(name = "产品id列表;场地/赛事/课程", width = 15)
     @Schema(description = "产品id列表;场地/赛事/课程")

+ 3 - 3
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/AppOrderProInfo.java

@@ -44,10 +44,10 @@ public class AppOrderProInfo  implements Serializable {
     @Schema(description = "商品名称")
     private String productName;
 
-    @Schema(description = "商品类型(1-场地 2-赛事 3-课程 4-保险)")
+    @Schema(description = "商品类型(1-学校 2-包场 3-无固定场 4-个人赛 5-团队赛 6-课程 7-保险)")
     private Integer type;
     @Schema(description = "日期")
-    private Date useDate;
+    private String useDateStr;
     @Schema(description = "时间段")
     private String frameTimeStr;
     @Schema(description = "比赛日期")
@@ -66,7 +66,7 @@ public class AppOrderProInfo  implements Serializable {
     private String userName;
     @Schema(description = "手机号")
     private String userPhone;
-    @Schema(description = "是否试听课(0-否 1-是)")
+    @Schema(description = "是否免费试听课(0-否 1-是)")
     private Integer orFreePro;
 
     /**创建人;创建人*/

+ 85 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/Protocol.java

@@ -0,0 +1,85 @@
+package org.jeecg.modules.system.app.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: 协议说明
+ * @Author: jeecg-boot
+ * @Date:   2025-07-31
+ * @Version: V1.0
+ */
+@Data
+@TableName("nm_protocol")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@Schema(description="协议说明")
+public class Protocol implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @Schema(description = "主键id")
+    private String id;
+	/**协议类型*/
+	@Excel(name = "协议类型", width = 15)
+    @Schema(description = "协议类型")
+    private Integer protocol;
+	/**保险公司*/
+	@Excel(name = "保险公司", width = 15)
+    @Schema(description = "保险公司")
+    private Integer insuranceName;
+	/**协议名称*/
+	@Excel(name = "协议名称", width = 15)
+    @Schema(description = "协议名称")
+    private String protocolName;
+	/**协议内容*/
+	@Excel(name = "协议内容", width = 15)
+    @Schema(description = "协议内容")
+    private String protocolContent;
+	/**说明*/
+	@Excel(name = "说明", width = 15)
+    @Schema(description = "说明")
+    private String describe;
+	/**创建人;创建人*/
+    @Schema(description = "创建人;创建人")
+    private String createBy;
+	/**创建时间;创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Schema(description = "创建时间;创建时间")
+    private Date createTime;
+	/**更新人;更新人*/
+    @Schema(description = "更新人;更新人")
+    private String updateBy;
+	/**更新时间;更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Schema(description = "更新时间;更新时间")
+    private Date updateTime;
+	/**系统状态;状态(0-正常,1-冻结)*/
+	@Excel(name = "系统状态;状态(0-正常,1-冻结)", width = 15)
+    @Schema(description = "系统状态;状态(0-正常,1-冻结)")
+    private Integer status;
+	/**删除标志;删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除标志;删除状态(0-正常,1-已删除)", width = 15)
+    @Schema(description = "删除标志;删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+}

+ 17 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/ProtocolMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.system.app.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.system.app.entity.Protocol;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 协议说明
+ * @Author: jeecg-boot
+ * @Date:   2025-07-31
+ * @Version: V1.0
+ */
+public interface ProtocolMapper extends BaseMapper<Protocol> {
+
+}

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

@@ -50,20 +50,13 @@
     </select>
 
     <insert id="insertList">
-        INSERT INTO `nm_teaching_time` (tenant_id, day, is_teaching,org_code,revision,create_by,create_time,update_by,update_time,update_time,status,del_flag)
+        INSERT INTO `nm_teaching_time` (tenant_id, day, is_teaching,org_code)
         VALUES
         <foreach collection="list" item="item" separator=",">
             (#{item.tenantId},
              #{item.day},
              #{item.isTeaching},
-             #{item.orgCode},
-             #{item.revision},
-             #{item.createBy},
-             #{item.createTime},
-             #{item.updateBy},
-             #{item.updateTime},
-             #{item.status},
-             #{item.delFlag}
+             #{item.orgCode}
              )
         </foreach>
     </insert>

+ 5 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/ProtocolMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.system.app.protocol.mapper.ProtocolMapper">
+
+</mapper>

+ 14 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IProtocolService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.system.app.service;
+
+import org.jeecg.modules.demo.protocol.entity.Protocol;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 协议说明
+ * @Author: jeecg-boot
+ * @Date:   2025-07-31
+ * @Version: V1.0
+ */
+public interface IProtocolService extends IService<Protocol> {
+
+}

+ 17 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/ProtocolServiceImpl.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.system.app.service.impl;
+
+
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 协议说明
+ * @Author: jeecg-boot
+ * @Date:   2025-07-31
+ * @Version: V1.0
+ */
+@Service
+public class ProtocolServiceImpl extends ServiceImpl<ProtocolMapper, Protocol> implements IProtocolService {
+
+}