From cbca62b053eb3dc3cc7754aa0062aaf1e04e2cb4 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期四, 22 二月 2024 16:53:36 +0800
Subject: [PATCH] 新增加接口

---
 cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/impl/WorldCupServiceImpl.java                   |  328 ++++++++++++++++++
 cloud-server-communityWorldCup/src/main/resources/mapper/WorldCupPaymentMapper.xml                                             |    5 
 cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/CheckPaymentMethodVo.java                         |   18 +
 cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/impl/WorldCupPaymentServiceImpl.java            |   15 
 cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageOrderStudentController.java                           |   48 ++
 cloud-server-course/src/main/java/com/dsh/course/model/DeductionClassHour.java                                                 |   27 +
 cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/feignclient/course/model/CoursePackageOrderStudent.java |   77 ++++
 cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/DeductionClassHourList.java                       |   14 
 cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/IWorldCupPaymentService.java                    |   11 
 cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/feignclient/course/CoursePackageOrderStudentClient.java |   34 ++
 cloud-server-course/src/main/java/com/dsh/course/service/ICoursePackageOrderStudentService.java                                |   10 
 cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/DeductionClassHour.java                           |   27 +
 /dev/null                                                                                                                      |   26 -
 cloud-server-course/src/main/java/com/dsh/course/model/DeductionClassHourList.java                                             |   14 
 cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/mapper/WorldCupPaymentMapper.java                       |   11 
 cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/PaymentWorldCup.java                              |    4 
 cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/IWorldCupService.java                           |   25 +
 cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/controller/WorldCupController.java                      |  116 ++++++
 cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/CheckPaymentMethod.java                           |   19 +
 cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/util/PayMoneyUtil.java                                  |    2 
 cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/entity/WorldCupPayment.java                             |   89 +++++
 cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageOrderStudentServiceImpl.java                        |   59 +++
 22 files changed, 939 insertions(+), 40 deletions(-)

diff --git a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/controller/WorldCupController.java b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/controller/WorldCupController.java
index 1797812..8e48812 100644
--- a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/controller/WorldCupController.java
+++ b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/controller/WorldCupController.java
@@ -17,15 +17,22 @@
 import com.dsh.communityWorldCup.service.IWorldCupPaymentParticipantService;
 import com.dsh.communityWorldCup.service.IWorldCupService;
 import com.dsh.communityWorldCup.service.IWorldCupStoreService;
+import com.dsh.communityWorldCup.util.PayMoneyUtil;
 import com.dsh.communityWorldCup.util.ResultUtil;
 import com.dsh.communityWorldCup.util.TokenUtil;
+import groovy.util.logging.Log4j;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.PrintWriter;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.HashMap;
@@ -40,6 +47,8 @@
 @RestController
 @RequestMapping("")
 public class WorldCupController {
+
+    Logger log = LoggerFactory.getLogger(WorldCupController.class);
 
     @Autowired
     private TokenUtil tokenUtil;
@@ -67,6 +76,9 @@
 
     @Resource
     private StoreClient storeClient;
+
+    @Autowired
+    private PayMoneyUtil payMoneyUtil;
 
 
 
@@ -252,5 +264,107 @@
 
 
 
-    public ResultUtil paymentWorldCup()
+    @ResponseBody
+    @PostMapping("/api/worldCup/checkPaymentMethod")
+    @ApiOperation(value = "世界杯报名前校验支付方式【2.0】", tags = {"APP-社区世界杯"})
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public ResultUtil<CheckPaymentMethodVo> checkPaymentMethod(CheckPaymentMethod checkPaymentMethod){
+        try {
+            Integer uid = tokenUtil.getUserIdFormRedis();
+            if(null == uid){
+                return ResultUtil.success();
+            }
+            checkPaymentMethod.setUid(uid);
+            CheckPaymentMethodVo checkPaymentMethodVo = worldCupService.checkPaymentMethod(checkPaymentMethod);
+            return ResultUtil.success(checkPaymentMethodVo);
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResultUtil.runErr();
+        }
+    }
+
+
+
+
+    @ResponseBody
+    @PostMapping("/api/worldCup/paymentWorldCup")
+    @ApiOperation(value = "世界杯报名【2.0】", tags = {"APP-社区世界杯"})
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public ResultUtil paymentWorldCup(PaymentWorldCup paymentWorldCup){
+        try {
+            Integer uid = tokenUtil.getUserIdFormRedis();
+            if(null == uid){
+                return ResultUtil.success();
+            }
+            paymentWorldCup.setUid(uid);
+            return worldCupService.paymentWorldCup(paymentWorldCup);
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResultUtil.runErr();
+        }
+    }
+
+
+    /**
+     * 微信支付回调
+     */
+    @ResponseBody
+    @PostMapping("/base/worldCup/wxPayWorldCupCallback")
+    public void wxPayWorldCupCallback(HttpServletRequest request, HttpServletResponse response){
+        try {
+            Map<String, String> map = payMoneyUtil.weixinpayCallback(request);
+            if(null != map){
+                String code = map.get("out_trade_no");
+                String transaction_id = map.get("transaction_id");
+                String result = map.get("result");
+                ResultUtil resultUtil = worldCupService.paymentWorldCupCallback(code, transaction_id);
+                if(resultUtil.getCode() == 200){
+                    PrintWriter out = response.getWriter();
+                    out.println(result);
+                    out.flush();
+                    out.close();
+                }else{
+                    log.error("社区世界杯报名微信支付回业务处理异常:" + resultUtil.getMsg());
+                }
+            }else{
+                log.error("社区世界杯报名微信支付回调解析异常");
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+
+    /**
+     * 支付宝支付回调
+     */
+    @ResponseBody
+    @PostMapping("/base/worldCup/aliPayWorldCupCallback")
+    public void aliPayWorldCupCallback(HttpServletRequest request, HttpServletResponse response){
+        try {
+            Map<String, String> map = payMoneyUtil.alipayCallback(request);
+            if(null != map){
+                String code = map.get("out_trade_no");
+                String transaction_id = map.get("trade_no");
+                String result = map.get("result");
+                ResultUtil resultUtil = worldCupService.paymentWorldCupCallback(code, transaction_id);
+                if(resultUtil.getCode() == 200){
+                    PrintWriter out = response.getWriter();
+                    out.println(result);
+                    out.flush();
+                    out.close();
+                }else{
+                    log.error("社区世界杯报名支付宝支付回业务处理异常:" + resultUtil.getMsg());
+                }
+            }else{
+                log.error("社区世界杯报名付宝支支付回调解析异常");
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
 }
diff --git a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/entity/WorldCupPayment.java b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/entity/WorldCupPayment.java
new file mode 100644
index 0000000..da459cd
--- /dev/null
+++ b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/entity/WorldCupPayment.java
@@ -0,0 +1,89 @@
+package com.dsh.communityWorldCup.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/2/22 14:15
+ */
+@Data
+@TableName("t_world_cup_payment")
+public class WorldCupPayment {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.INPUT)
+    private Long id;
+    /**
+     * 支付流水号
+     */
+    @TableField("code")
+    private String code;
+    /**
+     * 世界杯id
+     */
+    @TableField("worldCupId")
+    private Integer worldCupId;
+    /**
+     * 用户id
+     */
+    @TableField("appUserId")
+    private Integer appUserId;
+    /**
+     * 支付方式(0=免费,1=微信,2=支付宝,3=玩湃币,4=课时)
+     */
+    @TableField("payType")
+    private Integer payType;
+    /**
+     * 支付金额
+     */
+    @TableField("amount")
+    private BigDecimal amount;
+    /**
+     * 支付状态(1=待支付,2=已支付,3=已退款)
+     */
+    @TableField("payStatus")
+    private Integer payStatus;
+    /**
+     * 支付时间
+     */
+    @TableField("payTime")
+    private Date payTime;
+    /**
+     * 第三方支付流水号
+     */
+    @TableField("payOrderNo")
+    private String payOrderNo;
+    /**
+     * 退款时间
+     */
+    @TableField("refundTime")
+    private Date refundTime;
+    /**
+     * 第三方退款流水号
+     */
+    @TableField("refundOrderNo")
+    private String refundOrderNo;
+    /**
+     * 状态(1=正常,2=冻结,3=删除)
+     */
+    @TableField("state")
+    private Integer state;
+    /**
+     * 添加时间
+     */
+    @TableField("createTime")
+    private Date createTime;
+    /**
+     * 参赛人数据
+     */
+    @TableField("entrant")
+    private String entrant;
+}
diff --git a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/feignclient/course/CoursePackageOrderStudentClient.java b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/feignclient/course/CoursePackageOrderStudentClient.java
new file mode 100644
index 0000000..ab995cd
--- /dev/null
+++ b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/feignclient/course/CoursePackageOrderStudentClient.java
@@ -0,0 +1,34 @@
+package com.dsh.communityWorldCup.feignclient.course;
+
+import com.dsh.communityWorldCup.feignclient.course.model.CoursePackageOrderStudent;
+import com.dsh.communityWorldCup.model.DeductionClassHour;
+import com.dsh.communityWorldCup.model.DeductionClassHourList;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/2/22 15:26
+ */
+@FeignClient("mb-cloud-course")
+public interface CoursePackageOrderStudentClient {
+
+
+    /**
+     * 根据学院id获取剩余有效课时数据
+     * @param studentId
+     * @return
+     */
+    @PostMapping("/getCoursePackageOrderStudent")
+    List<CoursePackageOrderStudent> getCoursePackageOrderStudent(Integer studentId);
+
+
+    /**
+     * 扣减学员课时
+     * @param deductionClassHourList
+     */
+    @PostMapping("/deductionClassHour")
+    boolean deductionClassHour(DeductionClassHourList deductionClassHourList);
+}
diff --git a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/feignclient/course/model/CoursePackageOrderStudent.java b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/feignclient/course/model/CoursePackageOrderStudent.java
new file mode 100644
index 0000000..8ab7a7b
--- /dev/null
+++ b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/feignclient/course/model/CoursePackageOrderStudent.java
@@ -0,0 +1,77 @@
+package com.dsh.communityWorldCup.feignclient.course.model;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author zhibing.pu
+ * @Date 2023/11/25 11:59
+ */
+@Data
+public class CoursePackageOrderStudent {
+    /**
+     * 主键
+     */
+    private Long id;
+    /**
+     * 用户id
+     */
+    private Integer appUserId;
+    /**
+     * 学员id
+     */
+    private Integer studentId;
+    /**
+     * 课包id
+     */
+    private Integer coursePackageId;
+    /**
+     * 总课时
+     */
+    private Integer totalClassHours;
+    /**
+     * 剩余课时
+     */
+    private Integer laveClassHours;
+    /**
+     * 缺课次数
+     */
+    private Integer absencesNumber;
+    /**
+     * 退课课时
+     */
+    private Integer dropoutsNumber;
+    /**
+     * 课程状态(1=正常,2=已退课)
+     */
+    private Integer status;
+    /**
+     * 退课时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date withdrawalTime;
+    /**
+     * 退课凭证
+     */
+    private String certificate;
+    /**
+     * 状态(1=正常,2=冻结,3=删除)
+     */
+    private Integer state;
+    /**
+     * 添加时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date insertTime;
+    /**
+     * 赠送课时
+     */
+    private Integer giftClassHours;
+    /**
+     * 课程有效期
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date useTime;
+}
diff --git a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/mapper/WorldCupPaymentMapper.java b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/mapper/WorldCupPaymentMapper.java
new file mode 100644
index 0000000..4beffa5
--- /dev/null
+++ b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/mapper/WorldCupPaymentMapper.java
@@ -0,0 +1,11 @@
+package com.dsh.communityWorldCup.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dsh.communityWorldCup.entity.WorldCupPayment;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/2/22 14:22
+ */
+public interface WorldCupPaymentMapper extends BaseMapper<WorldCupPayment> {
+}
diff --git a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/CheckPaymentMethod.java b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/CheckPaymentMethod.java
new file mode 100644
index 0000000..b3a1a11
--- /dev/null
+++ b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/CheckPaymentMethod.java
@@ -0,0 +1,19 @@
+package com.dsh.communityWorldCup.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/2/22 15:20
+ */
+@Data
+@ApiModel
+public class CheckPaymentMethod {
+    @ApiModelProperty(value = "世界杯id", required = true, dataType = "int")
+    private Integer id;
+    @ApiModelProperty(value = "参赛人员id[{\"id\":123,\"isStudent\":1},{\"id\":222,\"isStudent\":0}]", required = true, dataType = "String")
+    private String ids;
+    private Integer uid;
+}
diff --git a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/CheckPaymentMethodVo.java b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/CheckPaymentMethodVo.java
new file mode 100644
index 0000000..187fb83
--- /dev/null
+++ b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/CheckPaymentMethodVo.java
@@ -0,0 +1,18 @@
+package com.dsh.communityWorldCup.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/2/22 15:14
+ */
+@Data
+@ApiModel
+public class CheckPaymentMethodVo {
+    @ApiModelProperty("能否使用玩湃币支付(0=否,1=是)")
+    private Integer paiCoin;
+    @ApiModelProperty("能否使用课时支付(0=否,1=是)")
+    private Integer classHour;
+}
diff --git a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/DeductionClassHour.java b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/DeductionClassHour.java
new file mode 100644
index 0000000..2ddf410
--- /dev/null
+++ b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/DeductionClassHour.java
@@ -0,0 +1,27 @@
+package com.dsh.communityWorldCup.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/2/22 15:44
+ */
+@Data
+public class DeductionClassHour {
+    /**
+     * 课时记录id
+     */
+    private Long id;
+    /**
+     * 学员id
+     */
+    private Integer studentId;
+    /**
+     * 课时id
+     */
+    private Integer coursePackageId;
+    /**
+     * 扣减课时
+     */
+    private Integer classHour;
+}
diff --git a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/DeductionClassHourList.java b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/DeductionClassHourList.java
new file mode 100644
index 0000000..81fa63f
--- /dev/null
+++ b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/DeductionClassHourList.java
@@ -0,0 +1,14 @@
+package com.dsh.communityWorldCup.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/2/22 15:46
+ */
+@Data
+public class DeductionClassHourList {
+    List<DeductionClassHour> deductionClassHourList;
+}
diff --git a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/PaymentWorldCup.java b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/PaymentWorldCup.java
index 4b33323..543c326 100644
--- a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/PaymentWorldCup.java
+++ b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/PaymentWorldCup.java
@@ -15,5 +15,7 @@
     private Integer id;
     @ApiModelProperty(value = "支付方式(1=微信,2=支付宝,3=玩湃币,4=课时)")
     private Integer payType;
-    @ApiModelProperty(value = "参赛人员")
+    @ApiModelProperty(value = "参赛人员id[{\"id\":123,\"isStudent\":1},{\"id\":222,\"isStudent\":0}]", required = true, dataType = "String")
+    private String ids;
+    private Integer uid;
 }
diff --git a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/IWorldCupPaymentService.java b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/IWorldCupPaymentService.java
new file mode 100644
index 0000000..521ff8d
--- /dev/null
+++ b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/IWorldCupPaymentService.java
@@ -0,0 +1,11 @@
+package com.dsh.communityWorldCup.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.dsh.communityWorldCup.entity.WorldCupPayment;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/2/22 14:22
+ */
+public interface IWorldCupPaymentService extends IService<WorldCupPayment> {
+}
diff --git a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/IWorldCupService.java b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/IWorldCupService.java
index 80f73ef..9ecc9d3 100644
--- a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/IWorldCupService.java
+++ b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/IWorldCupService.java
@@ -51,4 +51,29 @@
      * @return
      */
     WorldCupInfo getWorldCupInfo(Integer id);
+
+
+    /**
+     * 报名前校验支付方式
+     * @param checkPaymentMethod
+     * @return
+     */
+    CheckPaymentMethodVo checkPaymentMethod(CheckPaymentMethod checkPaymentMethod);
+
+
+    /**
+     * 报名世界杯
+     * @param paymentWorldCup
+     * @return
+     */
+    ResultUtil paymentWorldCup(PaymentWorldCup paymentWorldCup);
+
+
+    /**
+     * 第三方支付完成后回调逻辑处理
+     * @param code
+     * @param outTradeNo
+     * @return
+     */
+    ResultUtil paymentWorldCupCallback(String code, String outTradeNo);
 }
diff --git a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/impl/WorldCupPaymentServiceImpl.java b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/impl/WorldCupPaymentServiceImpl.java
new file mode 100644
index 0000000..e3501fd
--- /dev/null
+++ b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/impl/WorldCupPaymentServiceImpl.java
@@ -0,0 +1,15 @@
+package com.dsh.communityWorldCup.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dsh.communityWorldCup.entity.WorldCupPayment;
+import com.dsh.communityWorldCup.mapper.WorldCupPaymentMapper;
+import com.dsh.communityWorldCup.service.IWorldCupPaymentService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/2/22 14:23
+ */
+@Service
+public class WorldCupPaymentServiceImpl extends ServiceImpl<WorldCupPaymentMapper, WorldCupPayment> implements IWorldCupPaymentService {
+}
diff --git a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/impl/WorldCupServiceImpl.java b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/impl/WorldCupServiceImpl.java
index eed0306..414218c 100644
--- a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/impl/WorldCupServiceImpl.java
+++ b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/impl/WorldCupServiceImpl.java
@@ -5,26 +5,32 @@
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.dsh.communityWorldCup.entity.WorldCup;
-import com.dsh.communityWorldCup.entity.WorldCupCompetitor;
-import com.dsh.communityWorldCup.entity.WorldCupPaymentParticipant;
-import com.dsh.communityWorldCup.entity.WorldCupStore;
+import com.dsh.communityWorldCup.entity.*;
+import com.dsh.communityWorldCup.feignclient.account.AppUserClient;
+import com.dsh.communityWorldCup.feignclient.account.StudentClient;
+import com.dsh.communityWorldCup.feignclient.account.model.AppUser;
+import com.dsh.communityWorldCup.feignclient.account.model.TStudent;
+import com.dsh.communityWorldCup.feignclient.competition.ParticipantClient;
+import com.dsh.communityWorldCup.feignclient.competition.model.Participant;
+import com.dsh.communityWorldCup.feignclient.course.CoursePackageOrderStudentClient;
+import com.dsh.communityWorldCup.feignclient.course.model.CoursePackageOrderStudent;
 import com.dsh.communityWorldCup.feignclient.other.StoreClient;
 import com.dsh.communityWorldCup.feignclient.other.model.Store;
 import com.dsh.communityWorldCup.mapper.WorldCupMapper;
 import com.dsh.communityWorldCup.model.*;
-import com.dsh.communityWorldCup.service.IWorldCupCompetitorService;
-import com.dsh.communityWorldCup.service.IWorldCupPaymentParticipantService;
-import com.dsh.communityWorldCup.service.IWorldCupService;
-import com.dsh.communityWorldCup.service.IWorldCupStoreService;
+import com.dsh.communityWorldCup.service.*;
 import com.dsh.communityWorldCup.util.GeodesyUtil;
+import com.dsh.communityWorldCup.util.PayMoneyUtil;
 import com.dsh.communityWorldCup.util.ResultUtil;
 import com.dsh.communityWorldCup.util.UUIDUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @author zhibing.pu
@@ -44,6 +50,24 @@
 
     @Autowired
     private IWorldCupStoreService worldCupStoreService;
+
+    @Resource
+    private StudentClient studentClient;
+
+    @Resource
+    private ParticipantClient participantClient;
+
+    @Autowired
+    private IWorldCupPaymentService worldCupPaymentService;
+
+    @Autowired
+    private PayMoneyUtil payMoneyUtil;
+
+    @Resource
+    private AppUserClient appUserClient;
+
+    @Resource
+    private CoursePackageOrderStudentClient coursePackageOrderStudentClient;
 
 
 
@@ -160,4 +184,292 @@
         worldCupInfo.setStores(jsonArray.toJSONString());
         return worldCupInfo;
     }
+
+
+    /**
+     * 报名前校验支付方式
+     * @param checkPaymentMethod
+     * @return
+     */
+    @Override
+    public CheckPaymentMethodVo checkPaymentMethod(CheckPaymentMethod checkPaymentMethod) {
+        WorldCup worldCup = this.getById(checkPaymentMethod.getId());
+        JSONArray jsonArray = JSON.parseArray(checkPaymentMethod.getIds());
+        CheckPaymentMethodVo checkPaymentMethodVo = new CheckPaymentMethodVo();
+        AppUser appUser = appUserClient.getAppUser(checkPaymentMethod.getUid());
+        BigDecimal multiply = new BigDecimal(jsonArray.size()).multiply(new BigDecimal(worldCup.getPaiCoin()));
+        if(appUser.getPlayPaiCoins() < multiply.intValue()){
+            checkPaymentMethodVo.setPaiCoin(0);
+        }else{
+            checkPaymentMethodVo.setPaiCoin(1);
+        }
+
+        int classHour = 1;
+        for (int i = 0; i < jsonArray.size(); i++) {
+            JSONObject jsonObject = jsonArray.getJSONObject(i);
+            Integer id = jsonObject.getInteger("id");
+            //是否是学员(0=否,1=是)
+            Integer isStudent = jsonObject.getInteger("isStudent");
+            if(0 == isStudent){
+                classHour = 0;
+                break;
+            }
+            List<CoursePackageOrderStudent> coursePackageOrderStudent = coursePackageOrderStudentClient.getCoursePackageOrderStudent(id);
+            int sum = coursePackageOrderStudent.stream().mapToInt(CoursePackageOrderStudent::getLaveClassHours).sum();
+            if(sum < worldCup.getClassHour()){
+                classHour = 0;
+                break;
+            }
+        }
+        checkPaymentMethodVo.setClassHour(classHour);
+        return checkPaymentMethodVo;
+    }
+
+
+
+
+
+    /**
+     * 报名世界杯
+     * @param paymentWorldCup
+     * @return
+     */
+    @Override
+    public ResultUtil paymentWorldCup(PaymentWorldCup paymentWorldCup) {
+        WorldCup worldCup = this.getById(paymentWorldCup.getId());
+        if(null == worldCup){
+            return ResultUtil.error("报名数据异常");
+        }
+        if(System.currentTimeMillis() > worldCup.getRegistrationClosingTime().getTime()){
+            return ResultUtil.error("报名时间已结束,无法完成报名");
+        }
+        if(System.currentTimeMillis() > worldCup.getEndTime().getTime()){
+            return ResultUtil.error("世界杯赛事已结束,无法完成报名");
+        }
+        String ids = paymentWorldCup.getIds();
+        JSONArray jsonArray = JSON.parseArray(ids);
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
+        for (int i = 0; i < jsonArray.size(); i++) {
+            JSONObject jsonObject = jsonArray.getJSONObject(i);
+            Integer id = jsonObject.getInteger("id");
+            //是否是学员(0=否,1=是)
+            Integer isStudent = jsonObject.getInteger("isStudent");
+            if(isStudent == 1){
+                TStudent tStudent = studentClient.queryById(id);
+                if(worldCup.getStartAge() > Integer.valueOf(sdf.format(tStudent.getBirthday()))){
+                    return ResultUtil.error("【" + tStudent.getName() + "】年龄不符合要求");
+                }
+                if(worldCup.getEndAge() < Integer.valueOf(sdf.format(tStudent.getBirthday()))){
+                    return ResultUtil.error("【" + tStudent.getName() + "】年龄不符合要求");
+                }
+            }else{
+                Participant participant = participantClient.getParticipant(id);
+                if(worldCup.getStartAge() > Integer.valueOf(sdf.format(participant.getBirthday()))){
+                    return ResultUtil.error("【" + participant.getName() + "】年龄不符合要求");
+                }
+                if(worldCup.getEndAge() < Integer.valueOf(sdf.format(participant.getBirthday()))){
+                    return ResultUtil.error("【" + participant.getName() + "】年龄不符合要求");
+                }
+            }
+        }
+
+        //开始支付操作
+        ResultUtil payment = null;
+        try {
+            payment = payment(worldCup, paymentWorldCup);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        return payment;
+    }
+
+
+    /**
+     * 支付逻辑
+     * @param worldCup
+     * @param paymentWorldCup
+     * @return
+     * @throws Exception
+     */
+    private ResultUtil payment(WorldCup worldCup, PaymentWorldCup paymentWorldCup) throws Exception {
+        WorldCupPayment worldCupPayment = new WorldCupPayment();
+        worldCupPayment.setCode(UUIDUtil.getTimeStr() + UUIDUtil.getNumberRandom(5));
+        worldCupPayment.setWorldCupId(paymentWorldCup.getId());
+        worldCupPayment.setAppUserId(paymentWorldCup.getUid());
+        worldCupPayment.setPayType(paymentWorldCup.getPayType());
+        worldCupPayment.setPayStatus(1);
+        worldCupPayment.setState(1);
+        worldCupPayment.setCreateTime(new Date());
+        worldCupPayment.setEntrant(paymentWorldCup.getIds());
+        int num = JSON.parseArray(paymentWorldCup.getIds()).size();
+        //不免费
+        if(worldCup.getPayType() != 0){
+            Integer payType = paymentWorldCup.getPayType();
+            //微信
+            if(payType == 1){
+                worldCupPayment.setAmount(new BigDecimal(num).multiply(worldCup.getCash()));
+                worldCupPaymentService.save(worldCupPayment);
+                return payMoneyUtil.weixinpay("社区世界杯报名", "", worldCupPayment.getCode(),
+                        worldCup.getCash().toString(), "/base/worldCup/wxPayWorldCupCallback", "APP", "");
+            }
+            //支付宝
+            if(payType == 2){
+                worldCupPayment.setAmount(new BigDecimal(num).multiply(worldCup.getCash()));
+                worldCupPaymentService.save(worldCupPayment);
+                return payMoneyUtil.alipay("2088330203191220", "社区世界杯报名", "世界杯报名", "", worldCupPayment.getCode(),
+                        worldCup.getCash().toString(), "/base/worldCup/aliPayWorldCupCallback");
+            }
+            //玩湃币
+            if(payType == 3){
+                AppUser appUser = appUserClient.getAppUser(paymentWorldCup.getUid());
+                BigDecimal multiply = new BigDecimal(num).multiply(new BigDecimal(worldCup.getPaiCoin()));
+                if(appUser.getPlayPaiCoins() < multiply.intValue()){
+                    return ResultUtil.error("报名失败,玩湃币不足,请充值!");
+                }
+                worldCupPayment.setAmount(multiply);
+                worldCupPayment.setPayStatus(2);
+                worldCupPayment.setPayTime(new Date());
+                worldCupPaymentService.save(worldCupPayment);
+
+                appUser.setPlayPaiCoins(appUser.getPlayPaiCoins() - multiply.intValue());
+                appUserClient.updateAppUser(appUser);
+
+                //添加报名明细
+                String ids = paymentWorldCup.getIds();
+                JSONArray jsonArray = JSON.parseArray(ids);
+                for (int i = 0; i < jsonArray.size(); i++) {
+                    JSONObject jsonObject = jsonArray.getJSONObject(i);
+                    Integer id = jsonObject.getInteger("id");
+                    //是否是学员(0=否,1=是)
+                    Integer isStudent = jsonObject.getInteger("isStudent");
+
+                    WorldCupPaymentParticipant worldCupPaymentParticipant = new WorldCupPaymentParticipant();
+                    worldCupPaymentParticipant.setWorldCupId(paymentWorldCup.getId());
+                    worldCupPaymentParticipant.setWorldCupPaymentId(worldCupPayment.getId());
+                    worldCupPaymentParticipant.setAppUserId(paymentWorldCup.getUid());
+                    worldCupPaymentParticipant.setParticipantType(isStudent == 0 ? 2 : 1);
+                    worldCupPaymentParticipant.setParticipantId(id);
+                    worldCupPaymentParticipantService.save(worldCupPaymentParticipant);
+                }
+                return ResultUtil.success();
+            }
+            //课时
+            if(payType == 4){
+                BigDecimal multiply = new BigDecimal(num).multiply(new BigDecimal(worldCup.getClassHour()));
+                String ids = paymentWorldCup.getIds();
+                JSONArray jsonArray = JSON.parseArray(ids);
+                List<DeductionClassHour> list = new ArrayList<>();
+                for (int i = 0; i < jsonArray.size(); i++) {
+                    JSONObject jsonObject = jsonArray.getJSONObject(i);
+                    Integer id = jsonObject.getInteger("id");
+                    //是否是学员(0=否,1=是)
+                    Integer isStudent = jsonObject.getInteger("isStudent");
+                    if(0 == isStudent){
+                        return ResultUtil.error("非学员无法使用课时报名");
+                    }
+                    List<CoursePackageOrderStudent> coursePackageOrderStudent = coursePackageOrderStudentClient.getCoursePackageOrderStudent(id);
+                    int sum = coursePackageOrderStudent.stream().mapToInt(CoursePackageOrderStudent::getLaveClassHours).sum();
+                    if(sum < worldCup.getClassHour()){
+                        return ResultUtil.error("报名失败,课时不足,请续课!");
+                    }
+
+                    //构建扣减课时数据
+                    Integer classHour = worldCup.getClassHour();
+                    for (CoursePackageOrderStudent packageOrderStudent : coursePackageOrderStudent) {
+                        Integer laveClassHours = packageOrderStudent.getLaveClassHours();
+
+                        DeductionClassHour deductionClassHour = new DeductionClassHour();
+                        if(classHour.compareTo(laveClassHours) > 0){
+                            //不够扣除,轮询直到扣除完
+                            classHour = classHour - laveClassHours;
+                            deductionClassHour.setId(packageOrderStudent.getId());
+                            deductionClassHour.setClassHour(laveClassHours);
+                            deductionClassHour.setStudentId(packageOrderStudent.getStudentId());
+                            deductionClassHour.setCoursePackageId(packageOrderStudent.getCoursePackageId());
+                            list.add(deductionClassHour);
+                        }else{
+                            //够扣除直接跳出进行下个学员
+                            deductionClassHour.setId(packageOrderStudent.getId());
+                            deductionClassHour.setClassHour(classHour);
+                            deductionClassHour.setStudentId(packageOrderStudent.getStudentId());
+                            deductionClassHour.setCoursePackageId(packageOrderStudent.getCoursePackageId());
+                            list.add(deductionClassHour);
+                            break;
+                        }
+                    }
+                }
+
+                //扣减课时操作
+                DeductionClassHourList deductionClassHourList = new DeductionClassHourList();
+                deductionClassHourList.setDeductionClassHourList(list);
+                coursePackageOrderStudentClient.deductionClassHour(deductionClassHourList);
+
+                worldCupPayment.setAmount(multiply);
+                worldCupPayment.setPayStatus(2);
+                worldCupPayment.setPayTime(new Date());
+                worldCupPaymentService.save(worldCupPayment);
+                return ResultUtil.success();
+            }
+        }else{
+            worldCupPayment.setPayType(0);
+            worldCupPayment.setAmount(BigDecimal.ZERO);
+            worldCupPayment.setPayStatus(2);
+            worldCupPayment.setPayTime(new Date());
+            worldCupPaymentService.save(worldCupPayment);
+
+            //添加报名明细
+            String ids = paymentWorldCup.getIds();
+            JSONArray jsonArray = JSON.parseArray(ids);
+            for (int i = 0; i < jsonArray.size(); i++) {
+                JSONObject jsonObject = jsonArray.getJSONObject(i);
+                Integer id = jsonObject.getInteger("id");
+                //是否是学员(0=否,1=是)
+                Integer isStudent = jsonObject.getInteger("isStudent");
+
+                WorldCupPaymentParticipant worldCupPaymentParticipant = new WorldCupPaymentParticipant();
+                worldCupPaymentParticipant.setWorldCupId(paymentWorldCup.getId());
+                worldCupPaymentParticipant.setWorldCupPaymentId(worldCupPayment.getId());
+                worldCupPaymentParticipant.setAppUserId(paymentWorldCup.getUid());
+                worldCupPaymentParticipant.setParticipantType(isStudent == 0 ? 2 : 1);
+                worldCupPaymentParticipant.setParticipantId(id);
+                worldCupPaymentParticipantService.save(worldCupPaymentParticipant);
+            }
+            return ResultUtil.success();
+        }
+        return ResultUtil.success();
+    }
+
+
+    /**
+     * 第三方支付完成后的处理逻辑
+     * @param code
+     * @param outTradeNo
+     * @return
+     */
+    @Override
+    public ResultUtil paymentWorldCupCallback(String code, String outTradeNo) {
+        WorldCupPayment worldCupPayment = worldCupPaymentService.getOne(new QueryWrapper<WorldCupPayment>().eq("code", code));
+        worldCupPayment.setPayStatus(2);
+        worldCupPayment.setPayTime(new Date());
+        worldCupPaymentService.updateById(worldCupPayment);
+
+        //添加报名明细
+        String ids = worldCupPayment.getEntrant();
+        JSONArray jsonArray = JSON.parseArray(ids);
+        for (int i = 0; i < jsonArray.size(); i++) {
+            JSONObject jsonObject = jsonArray.getJSONObject(i);
+            Integer id = jsonObject.getInteger("id");
+            //是否是学员(0=否,1=是)
+            Integer isStudent = jsonObject.getInteger("isStudent");
+
+            WorldCupPaymentParticipant worldCupPaymentParticipant = new WorldCupPaymentParticipant();
+            worldCupPaymentParticipant.setWorldCupId(worldCupPayment.getWorldCupId());
+            worldCupPaymentParticipant.setWorldCupPaymentId(worldCupPayment.getId());
+            worldCupPaymentParticipant.setAppUserId(worldCupPayment.getAppUserId());
+            worldCupPaymentParticipant.setParticipantType(isStudent == 0 ? 2 : 1);
+            worldCupPaymentParticipant.setParticipantId(id);
+            worldCupPaymentParticipantService.save(worldCupPaymentParticipant);
+        }
+        return ResultUtil.success();
+    }
 }
diff --git a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/util/PayMoneyUtil.java b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/util/PayMoneyUtil.java
index 39f8c17..2d90ee4 100644
--- a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/util/PayMoneyUtil.java
+++ b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/util/PayMoneyUtil.java
@@ -131,7 +131,7 @@
         //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
         AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
         model.setBody(body);//对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
-        model.setSubject("报名赛事");//商品的标题/交易标题/订单标题/订单关键字等。
+        model.setSubject(subject);//商品的标题/交易标题/订单标题/订单关键字等。
         model.setOutTradeNo(outTradeNo);//商户网站唯一订单号
         model.setTimeoutExpress("30m");
         model.setTotalAmount(amount);//付款金额
diff --git a/cloud-server-communityWorldCup/target/classes/mapper/UserCompetitionMapper.xml b/cloud-server-communityWorldCup/src/main/resources/mapper/WorldCupPaymentMapper.xml
similarity index 67%
rename from cloud-server-communityWorldCup/target/classes/mapper/UserCompetitionMapper.xml
rename to cloud-server-communityWorldCup/src/main/resources/mapper/WorldCupPaymentMapper.xml
index 9b31cc5..fd6ca8c 100644
--- a/cloud-server-communityWorldCup/target/classes/mapper/UserCompetitionMapper.xml
+++ b/cloud-server-communityWorldCup/src/main/resources/mapper/WorldCupPaymentMapper.xml
@@ -1,6 +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="com.dsh.competition.mapper.UserCompetitionMapper">
+<mapper namespace="com.dsh.communityWorldCup.mapper.WorldCupPaymentMapper">
 
-
-</mapper>
+</mapper>
\ No newline at end of file
diff --git a/cloud-server-communityWorldCup/target/classes/META-INF/spring-configuration-metadata.json b/cloud-server-communityWorldCup/target/classes/META-INF/spring-configuration-metadata.json
deleted file mode 100644
index e049548..0000000
--- a/cloud-server-communityWorldCup/target/classes/META-INF/spring-configuration-metadata.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
-  "groups": [
-    {
-      "name": "datasource.master0",
-      "type": "com.dsh.config.Sharding_jdbc.Master0DataSource",
-      "sourceType": "com.dsh.config.Sharding_jdbc.Master0DataSource"
-    }
-  ],
-  "properties": [
-    {
-      "name": "datasource.master0.driver-class-name",
-      "type": "java.lang.String",
-      "sourceType": "com.dsh.config.Sharding_jdbc.Master0DataSource"
-    },
-    {
-      "name": "datasource.master0.initial-size",
-      "type": "java.lang.Integer",
-      "sourceType": "com.dsh.config.Sharding_jdbc.Master0DataSource"
-    },
-    {
-      "name": "datasource.master0.max-active",
-      "type": "java.lang.Integer",
-      "sourceType": "com.dsh.config.Sharding_jdbc.Master0DataSource"
-    },
-    {
-      "name": "datasource.master0.max-wait",
-      "type": "java.lang.Long",
-      "sourceType": "com.dsh.config.Sharding_jdbc.Master0DataSource"
-    },
-    {
-      "name": "datasource.master0.min-idle",
-      "type": "java.lang.Integer",
-      "sourceType": "com.dsh.config.Sharding_jdbc.Master0DataSource"
-    },
-    {
-      "name": "datasource.master0.password",
-      "type": "java.lang.String",
-      "sourceType": "com.dsh.config.Sharding_jdbc.Master0DataSource"
-    },
-    {
-      "name": "datasource.master0.url",
-      "type": "java.lang.String",
-      "sourceType": "com.dsh.config.Sharding_jdbc.Master0DataSource"
-    },
-    {
-      "name": "datasource.master0.username",
-      "type": "java.lang.String",
-      "sourceType": "com.dsh.config.Sharding_jdbc.Master0DataSource"
-    }
-  ],
-  "hints": []
-}
\ No newline at end of file
diff --git a/cloud-server-communityWorldCup/target/classes/bootstrap.properties b/cloud-server-communityWorldCup/target/classes/bootstrap.properties
deleted file mode 100644
index 764d1a6..0000000
--- a/cloud-server-communityWorldCup/target/classes/bootstrap.properties
+++ /dev/null
@@ -1,25 +0,0 @@
-spring.profiles.active=dev
-spring.application.name=mb-cloud-competition
-spring.cloud.nacos.username=nacos
-spring.cloud.nacos.password=nacos
-spring.cloud.nacos.config.server-addr=127.0.0.1:18848
-spring.cloud.nacos.config.namespace=b786884e-d7e5-477d-a7d2-193e27528e55
-spring.cloud.nacos.config.group=dsh-cloud
-spring.cloud.nacos.config.file-extension=properties
-spring.cloud.nacos.config.extension-configs[0].data-id=${spring.application.name}.${spring.cloud.nacos.config.file-extension}
-spring.cloud.nacos.config.extension-configs[0].group=dsh-cloud
-spring.cloud.nacos.config.extension-configs[0].refresh=true
-spring.cloud.nacos.config.extension-configs[1].data-id=application.${spring.cloud.nacos.config.file-extension}
-spring.cloud.nacos.config.extension-configs[1].group=dsh-cloud
-spring.cloud.nacos.config.extension-configs[1].refresh=true
-spring.cloud.nacos.discovery.server-addr=127.0.0.1:18848
-spring.cloud.nacos.discovery.namespace=b786884e-d7e5-477d-a7d2-193e27528e55
-spring.cloud.nacos.discovery.register-enabled=true
-spring.cloud.nacos.discovery.group=dsh-cloud
-spring.main.allow-bean-definition-overriding=true
-spring.flyway.enabled=false
-# \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0479\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD
-feign.compression.request.mime-types=text/xml,application/xml,application/json
-feign.compression.request.min-request-size=4096
-feign.compression.request.enabled=true
-feign.compression.response.enabled=true
\ No newline at end of file
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/CompetitionApplication.class b/cloud-server-communityWorldCup/target/classes/com/dsh/CompetitionApplication.class
deleted file mode 100644
index 4273d30..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/CompetitionApplication.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/advice/ControllerException.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/advice/ControllerException.class
deleted file mode 100644
index 6f952bc..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/advice/ControllerException.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/controller/CompetitionController.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/controller/CompetitionController.class
deleted file mode 100644
index a6d09cc..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/controller/CompetitionController.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/controller/ParticipantController.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/controller/ParticipantController.class
deleted file mode 100644
index d2dbb24..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/controller/ParticipantController.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/controller/UserCompetitionController.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/controller/UserCompetitionController.class
deleted file mode 100644
index 4b3780d..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/controller/UserCompetitionController.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/Competition.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/Competition.class
deleted file mode 100644
index b65305a..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/Competition.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/OperatorUser.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/OperatorUser.class
deleted file mode 100644
index 62beddc..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/OperatorUser.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/Participant.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/Participant.class
deleted file mode 100644
index ac7adbe..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/Participant.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/PaymentCompetition.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/PaymentCompetition.class
deleted file mode 100644
index 4c95001..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/PaymentCompetition.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/UserCompetition.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/UserCompetition.class
deleted file mode 100644
index 79c9400..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/UserCompetition.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/DeductionCompetitionsClient.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/DeductionCompetitionsClient.class
deleted file mode 100644
index 9ea852d..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/DeductionCompetitionsClient.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/AppUserClient.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/AppUserClient.class
deleted file mode 100644
index 77b035c..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/AppUserClient.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/StudentClient.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/StudentClient.class
deleted file mode 100644
index 7b9b60f..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/StudentClient.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/model/AppUser.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/model/AppUser.class
deleted file mode 100644
index 30b75f6..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/model/AppUser.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/model/Student.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/model/Student.class
deleted file mode 100644
index c27a0f6..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/model/Student.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/model/TStudent.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/model/TStudent.class
deleted file mode 100644
index cc0314b..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/model/TStudent.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/course/CoursePackagePaymentClient.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/course/CoursePackagePaymentClient.class
deleted file mode 100644
index 504f17b..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/course/CoursePackagePaymentClient.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/course/model/PaymentDeductionClassHour.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/course/model/PaymentDeductionClassHour.class
deleted file mode 100644
index e2bb04d..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/course/model/PaymentDeductionClassHour.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/BillingDataRequestVo.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/BillingDataRequestVo.class
deleted file mode 100644
index ba4d72c..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/BillingDataRequestVo.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/BillingRequest.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/BillingRequest.class
deleted file mode 100644
index 5313216..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/BillingRequest.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/BillingRequestVo.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/BillingRequestVo.class
deleted file mode 100644
index 0f7ec37..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/BillingRequestVo.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/CompetitionUser.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/CompetitionUser.class
deleted file mode 100644
index 83ed3ec..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/CompetitionUser.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/GetPeopleQuery.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/GetPeopleQuery.class
deleted file mode 100644
index 776c076..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/GetPeopleQuery.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/GetStuSourseList.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/GetStuSourseList.class
deleted file mode 100644
index 876b1e0..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/GetStuSourseList.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/ListQuery.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/ListQuery.class
deleted file mode 100644
index 8879adb..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/ListQuery.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/PurchaseRecordVo.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/PurchaseRecordVo.class
deleted file mode 100644
index d385aaa..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/PurchaseRecordVo.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/other/StoreClient.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/other/StoreClient.class
deleted file mode 100644
index 6d7f0a2..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/other/StoreClient.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/other/model/Store.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/other/model/Store.class
deleted file mode 100644
index f97e512..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/other/model/Store.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/mapper/CompetitionMapper.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/mapper/CompetitionMapper.class
deleted file mode 100644
index c6bbbb9..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/mapper/CompetitionMapper.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/mapper/ParticipantMapper.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/mapper/ParticipantMapper.class
deleted file mode 100644
index 686990b..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/mapper/ParticipantMapper.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/mapper/PaymentCompetitionMapper.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/mapper/PaymentCompetitionMapper.class
deleted file mode 100644
index b1da5d5..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/mapper/PaymentCompetitionMapper.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/mapper/UserCompetitionMapper.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/mapper/UserCompetitionMapper.class
deleted file mode 100644
index 6f06ae7..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/mapper/UserCompetitionMapper.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/AddParticipant.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/AddParticipant.class
deleted file mode 100644
index 0515f37..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/AddParticipant.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/CompetionVO.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/CompetionVO.class
deleted file mode 100644
index 0230e5d..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/CompetionVO.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/CompetitionInfo.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/CompetitionInfo.class
deleted file mode 100644
index d4aa9f3..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/CompetitionInfo.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/CompetitionListVo.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/CompetitionListVo.class
deleted file mode 100644
index eccc40f..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/CompetitionListVo.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/CompetitionQuery.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/CompetitionQuery.class
deleted file mode 100644
index 986e313..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/CompetitionQuery.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/EditParticipant.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/EditParticipant.class
deleted file mode 100644
index a8c9bdc..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/EditParticipant.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/ParticipantVo.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/ParticipantVo.class
deleted file mode 100644
index ccfa0d3..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/ParticipantVo.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/PayCourseRes.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/PayCourseRes.class
deleted file mode 100644
index 259a7f1..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/PayCourseRes.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/PaymentCompetitionVo.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/PaymentCompetitionVo.class
deleted file mode 100644
index 338e7d7..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/PaymentCompetitionVo.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/QueryDataFee.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/QueryDataFee.class
deleted file mode 100644
index 448e035..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/QueryDataFee.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/SaveParticipant.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/SaveParticipant.class
deleted file mode 100644
index 1ff8e94..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/SaveParticipant.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/TCompetition.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/TCompetition.class
deleted file mode 100644
index 9307d0f..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/TCompetition.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/CompetitionService.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/CompetitionService.class
deleted file mode 100644
index b8cde5f..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/CompetitionService.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/IParticipantService.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/IParticipantService.class
deleted file mode 100644
index 60870d2..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/IParticipantService.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/IPaymentCompetitionService.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/IPaymentCompetitionService.class
deleted file mode 100644
index c0a1b87..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/IPaymentCompetitionService.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/UserCompetitionService.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/UserCompetitionService.class
deleted file mode 100644
index 8d67a83..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/UserCompetitionService.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/impl/CompetitionServiceImpl.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/impl/CompetitionServiceImpl.class
deleted file mode 100644
index 2c7e0e1..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/impl/CompetitionServiceImpl.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/impl/ParticipantServiceImpl.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/impl/ParticipantServiceImpl.class
deleted file mode 100644
index a550930..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/impl/ParticipantServiceImpl.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/impl/PaymentCompetitionServiceImpl.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/impl/PaymentCompetitionServiceImpl.class
deleted file mode 100644
index e2ce778..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/impl/PaymentCompetitionServiceImpl.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/impl/UserCompetitionServiceImpl.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/impl/UserCompetitionServiceImpl.class
deleted file mode 100644
index 3543f06..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/impl/UserCompetitionServiceImpl.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/CodeGenerateUtils.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/CodeGenerateUtils.class
deleted file mode 100644
index c09cd86..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/CodeGenerateUtils.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/DateTimeHelper.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/DateTimeHelper.class
deleted file mode 100644
index 96a328c..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/DateTimeHelper.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/DateUtil.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/DateUtil.class
deleted file mode 100644
index cdf45af..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/DateUtil.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/DoubleUtil.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/DoubleUtil.class
deleted file mode 100644
index e674246..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/DoubleUtil.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/EmojiUtil.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/EmojiUtil.class
deleted file mode 100644
index d80b5fe..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/EmojiUtil.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/GeodesyUtil.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/GeodesyUtil.class
deleted file mode 100644
index b50900c..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/GeodesyUtil.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/HeaderAuthUtil.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/HeaderAuthUtil.class
deleted file mode 100644
index 1d2d948..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/HeaderAuthUtil.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/JsonUtil.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/JsonUtil.class
deleted file mode 100644
index 29495e2..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/JsonUtil.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/JuHeUtil.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/JuHeUtil.class
deleted file mode 100644
index c2c0986..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/JuHeUtil.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/LocalDateTimeUtils.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/LocalDateTimeUtils.class
deleted file mode 100644
index a536be6..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/LocalDateTimeUtils.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/MD5AndKL.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/MD5AndKL.class
deleted file mode 100644
index 0683ad5..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/MD5AndKL.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/MessageUtils.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/MessageUtils.class
deleted file mode 100644
index 1e7ea74..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/MessageUtils.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/PayMoneyUtil.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/PayMoneyUtil.class
deleted file mode 100644
index f7acbd6..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/PayMoneyUtil.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/RedisUtil.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/RedisUtil.class
deleted file mode 100644
index b9fe6e2..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/RedisUtil.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/ResultUtil.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/ResultUtil.class
deleted file mode 100644
index 06f8832..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/ResultUtil.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/StrUtils.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/StrUtils.class
deleted file mode 100644
index b91e858..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/StrUtils.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/StringUtil.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/StringUtil.class
deleted file mode 100644
index d0ef8d8..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/StringUtil.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/StudyTimeUtil.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/StudyTimeUtil.class
deleted file mode 100644
index 4ff2b3e..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/StudyTimeUtil.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/TaskUtil.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/TaskUtil.class
deleted file mode 100644
index 478bc27..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/TaskUtil.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/TaskUtilCompetition.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/TaskUtilCompetition.class
deleted file mode 100644
index 7bf877a..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/TaskUtilCompetition.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/TokenUtil.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/TokenUtil.class
deleted file mode 100644
index cc976a0..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/TokenUtil.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/ToolUtil.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/ToolUtil.class
deleted file mode 100644
index 311499f..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/ToolUtil.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/UUIDUtil.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/UUIDUtil.class
deleted file mode 100644
index 3894d79..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/UUIDUtil.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/Base64Utils.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/Base64Utils.class
deleted file mode 100644
index 5a7837f..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/Base64Utils.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/BaseUtils.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/BaseUtils.class
deleted file mode 100644
index 13d1be1..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/BaseUtils.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/DES.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/DES.class
deleted file mode 100644
index 1ef3e13..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/DES.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/Md5Util.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/Md5Util.class
deleted file mode 100644
index d75c8d1..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/Md5Util.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/SignUtil.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/SignUtil.class
deleted file mode 100644
index b7eac82..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/SignUtil.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/httpClinet/HttpClientUtil.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/httpClinet/HttpClientUtil.class
deleted file mode 100644
index 25ef548..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/httpClinet/HttpClientUtil.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/httpClinet/HttpResult.class b/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/httpClinet/HttpResult.class
deleted file mode 100644
index bf2d969..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/httpClinet/HttpResult.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/config/JsonLongSerializer.class b/cloud-server-communityWorldCup/target/classes/com/dsh/config/JsonLongSerializer.class
deleted file mode 100644
index 2cb1379..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/config/JsonLongSerializer.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/config/MessageLocalConfig.class b/cloud-server-communityWorldCup/target/classes/com/dsh/config/MessageLocalConfig.class
deleted file mode 100644
index 46c93fd..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/config/MessageLocalConfig.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/config/MyLocaleResolver.class b/cloud-server-communityWorldCup/target/classes/com/dsh/config/MyLocaleResolver.class
deleted file mode 100644
index 45724d7..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/config/MyLocaleResolver.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/config/RedisConfig.class b/cloud-server-communityWorldCup/target/classes/com/dsh/config/RedisConfig.class
deleted file mode 100644
index 4838ebc..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/config/RedisConfig.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/config/Sharding_jdbc/DatasourceModel.class b/cloud-server-communityWorldCup/target/classes/com/dsh/config/Sharding_jdbc/DatasourceModel.class
deleted file mode 100644
index 86d6018..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/config/Sharding_jdbc/DatasourceModel.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/config/Sharding_jdbc/Master0DataSource.class b/cloud-server-communityWorldCup/target/classes/com/dsh/config/Sharding_jdbc/Master0DataSource.class
deleted file mode 100644
index 5ac728b..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/config/Sharding_jdbc/Master0DataSource.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/config/Sharding_jdbc/ShardingConfig.class b/cloud-server-communityWorldCup/target/classes/com/dsh/config/Sharding_jdbc/ShardingConfig.class
deleted file mode 100644
index 4205b6e..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/config/Sharding_jdbc/ShardingConfig.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/config/SwaggerConfig.class b/cloud-server-communityWorldCup/target/classes/com/dsh/config/SwaggerConfig.class
deleted file mode 100644
index 02917e2..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/config/SwaggerConfig.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/page/HttpKit.class b/cloud-server-communityWorldCup/target/classes/com/dsh/page/HttpKit.class
deleted file mode 100644
index b1a972b..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/page/HttpKit.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/page/Order.class b/cloud-server-communityWorldCup/target/classes/com/dsh/page/Order.class
deleted file mode 100644
index d1d43e2..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/page/Order.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/page/PageFactory.class b/cloud-server-communityWorldCup/target/classes/com/dsh/page/PageFactory.class
deleted file mode 100644
index be79adf..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/page/PageFactory.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/page/WafKit.class b/cloud-server-communityWorldCup/target/classes/com/dsh/page/WafKit.class
deleted file mode 100644
index 2b4f6fc..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/page/WafKit.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/page/WafRequestWrapper.class b/cloud-server-communityWorldCup/target/classes/com/dsh/page/WafRequestWrapper.class
deleted file mode 100644
index 6280832..0000000
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/page/WafRequestWrapper.class
+++ /dev/null
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/logback-spring.xml b/cloud-server-communityWorldCup/target/classes/logback-spring.xml
deleted file mode 100644
index 57330a6..0000000
--- a/cloud-server-communityWorldCup/target/classes/logback-spring.xml
+++ /dev/null
@@ -1,230 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,比如: 如果设置为WARN,则低于WARN的信息都不会输出 -->
-<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
-<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
-<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
-<configuration scan="true" scanPeriod="10 seconds">
-    <contextName>logback</contextName>
-
-    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 -->
-    <property name="log.path" value="/usr/playpai/server/logs"/>
-
-    <!--0. 日志格式和颜色渲染 -->
-    <!-- 彩色日志依赖的渲染类 -->
-    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
-    <conversionRule conversionWord="wex"
-                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
-    <conversionRule conversionWord="wEx"
-                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
-    <!-- 彩色日志格式 -->
-    <property name="CONSOLE_LOG_PATTERN"
-              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
-
-    <!--1. 输出到控制台-->
-    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
-        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
-        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-            <level>debug</level>
-        </filter>
-        <encoder>
-            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
-            <!-- 设置字符集 -->
-            <charset>UTF-8</charset>
-        </encoder>
-    </appender>
-
-    <!--2. 输出到文档-->
-    <!-- 2.1 level为 DEBUG 日志,时间滚动输出  -->
-    <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <!-- 正在记录的日志文档的路径及文档名 -->
-        <file>${log.path}/mb-cloud-competition/debug.log</file>
-        <!--日志文档输出格式  Output format of the log document.-->
-        <encoder>
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
-            <charset>UTF-8</charset> <!-- 设置字符集 -->
-        </encoder>
-        <!-- 日志记录器的滚动策略,按日期,按大小记录  Rolling strategy of the logger, recording by date or by size.-->
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <!-- 日志归档 -->
-            <fileNamePattern>${log.path}/mb-cloud-competition/%d{yyyy-MM-dd}/debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
-            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-                <maxFileSize>100MB</maxFileSize>
-            </timeBasedFileNamingAndTriggeringPolicy>
-            <!--日志文档保留天数-->
-            <maxHistory>15</maxHistory>
-        </rollingPolicy>
-        <!-- 此日志文档只记录debug级别的 -->
-        <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <level>debug</level>
-            <onMatch>ACCEPT</onMatch>
-            <onMismatch>DENY</onMismatch>
-        </filter>
-    </appender>
-
-    <!-- 2.2 level为 INFO 日志,时间滚动输出  -->
-    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <!-- 正在记录的日志文档的路径及文档名 -->
-        <file>${log.path}/mb-cloud-competition/info.log</file>
-        <!--日志文档输出格式  Output format of the log document.-->
-        <encoder>
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
-            <charset>UTF-8</charset>
-        </encoder>
-        <!-- 日志记录器的滚动策略,按日期,按大小记录  Rolling strategy of the logger, recording by date or by size.-->
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <!-- 每天日志归档路径以及格式 -->
-            <fileNamePattern>${log.path}/mb-cloud-competition/%d{yyyy-MM-dd}/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
-            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-                <maxFileSize>100MB</maxFileSize>
-            </timeBasedFileNamingAndTriggeringPolicy>
-            <!--日志文档保留天数-->
-            <maxHistory>15</maxHistory>
-        </rollingPolicy>
-        <!-- 此日志文档只记录info级别的 -->
-        <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <level>info</level>
-            <onMatch>ACCEPT</onMatch>
-            <onMismatch>DENY</onMismatch>
-        </filter>
-    </appender>
-
-    <!-- 2.3 level为 WARN 日志,时间滚动输出  -->
-    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <!-- 正在记录的日志文档的路径及文档名 -->
-        <file>${log.path}/mb-cloud-competition/warn.log</file>
-        <!--日志文档输出格式  Output format of the log document.-->
-        <encoder>
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
-            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
-        </encoder>
-        <!-- 日志记录器的滚动策略,按日期,按大小记录  Rolling strategy of the logger, recording by date or by size.-->
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${log.path}/mb-cloud-competition/%d{yyyy-MM-dd}/warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
-            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-                <maxFileSize>100MB</maxFileSize>
-            </timeBasedFileNamingAndTriggeringPolicy>
-            <!--日志文档保留天数-->
-            <maxHistory>15</maxHistory>
-        </rollingPolicy>
-        <!-- 此日志文档只记录warn级别的 -->
-        <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <level>warn</level>
-            <onMatch>ACCEPT</onMatch>
-            <onMismatch>DENY</onMismatch>
-        </filter>
-    </appender>
-
-    <!-- 2.4 level为 ERROR 日志,时间滚动输出  -->
-    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <!-- 正在记录的日志文档的路径及文档名 -->
-        <file>${log.path}/mb-cloud-competition/error.log</file>
-        <!--日志文档输出格式  Output format of the log document.-->
-        <encoder>
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
-            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
-        </encoder>
-        <!-- 日志记录器的滚动策略,按日期,按大小记录  Rolling strategy of the logger, recording by date or by size.-->
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${log.path}/mb-cloud-competition/%d{yyyy-MM-dd}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
-            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-                <maxFileSize>100MB</maxFileSize>
-            </timeBasedFileNamingAndTriggeringPolicy>
-            <!--日志文档保留天数-->
-            <maxHistory>15</maxHistory>
-        </rollingPolicy>
-        <!-- 此日志文档只记录ERROR级别的 -->
-        <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <level>ERROR</level>
-            <onMatch>ACCEPT</onMatch>
-            <onMismatch>DENY</onMismatch>
-        </filter>
-    </appender>
-
-    <!-- 2.5 所有 除了DEBUG级别的其它高于DEBUG的 日志,记录到一个文件  -->
-    <appender name="ALL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <!-- 正在记录的日志文档的路径及文档名 -->
-        <file>${log.path}/mb-cloud-competition/all.log</file>
-        <!--日志文档输出格式  Output format of the log document.-->
-        <encoder>
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
-            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
-        </encoder>
-        <!-- 日志记录器的滚动策略,按日期,按大小记录  Rolling strategy of the logger, recording by date or by size.-->
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${log.path}/mb-cloud-competition/%d{yyyy-MM-dd}/all-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
-            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-                <maxFileSize>100MB</maxFileSize>
-            </timeBasedFileNamingAndTriggeringPolicy>
-            <!--日志文档保留天数-->
-            <maxHistory>15</maxHistory>
-        </rollingPolicy>
-        <!-- 此日志文档记录除了DEBUG级别的其它高于DEBUG的 -->
-        <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <level>DEBUG</level>
-            <onMatch>DENY</onMatch>
-            <onMismatch>ACCEPT</onMismatch>
-        </filter>
-    </appender>
-
-    <!--
-        <logger>用来设置某一个包或者具体的某一个类的日志打印级别、
-        以及指定<appender>。<logger>仅有一个name属性,
-        一个可选的level和一个可选的addtivity属性。
-        name:用来指定受此logger约束的某一个包或者具体的某一个类。
-        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
-              还有一个特殊值INHERITED或者同义词NULL,代表强制执行上级的级别。
-              如果未设置此属性,那么当前logger将会继承上级的级别。
-        addtivity:是否向上级logger传递打印信息。默认是true。
-        <logger name="org.springframework.web" level="info"/>
-        <logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>
-    -->
-
-    <!--
-        root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
-        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
-        不能设置为INHERITED或者同义词NULL。默认是DEBUG
-        可以包含零个或多个元素,标识这个appender将会添加到这个logger。
-    -->
-
-    <!-- 4  最终的策略:
-                 基本策略(root级) + 根据profile在启动时, logger标签中定制化package日志级别(优先级高于上面的root级)-->
-    <springProfile name="dev">
-        <root level="info">
-            <appender-ref ref="CONSOLE"/>
-            <appender-ref ref="DEBUG_FILE"/>
-            <appender-ref ref="INFO_FILE"/>
-            <appender-ref ref="WARN_FILE"/>
-            <appender-ref ref="ERROR_FILE"/>
-            <appender-ref ref="ALL_FILE"/>
-        </root>
-        <logger name="com.dsh" level="debug"/>
-        <logger name="business-log" level="warn"/>
-    </springProfile>
-
-    <springProfile name="fat">
-        <root level="info">
-            <appender-ref ref="CONSOLE"/>
-            <appender-ref ref="DEBUG_FILE"/>
-            <appender-ref ref="INFO_FILE"/>
-            <appender-ref ref="WARN_FILE"/>
-            <appender-ref ref="ERROR_FILE"/>
-            <appender-ref ref="ALL_FILE"/>
-        </root>
-        <logger name="com.dsh.course.mapper" level="error"/>
-        <logger name="business-log" level="warn"/>
-    </springProfile>
-
-    <springProfile name="prod">
-        <root level="warn">
-            <!-- 生产环境最好不配置console写文件 -->
-            <appender-ref ref="DEBUG_FILE"/>
-            <appender-ref ref="INFO_FILE"/>
-            <appender-ref ref="WARN_FILE"/>
-            <appender-ref ref="ERROR_FILE"/>
-            <appender-ref ref="ALL_FILE"/>
-        </root>
-        <logger name="com.dsh.course.mapper" level="error"/>
-        <logger name="business-log" level="warn"/>
-    </springProfile>
-
-</configuration>
\ No newline at end of file
diff --git a/cloud-server-communityWorldCup/target/classes/mapper/CompetitionMapper.xml b/cloud-server-communityWorldCup/target/classes/mapper/CompetitionMapper.xml
deleted file mode 100644
index c380b07..0000000
--- a/cloud-server-communityWorldCup/target/classes/mapper/CompetitionMapper.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?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="com.dsh.competition.mapper.CompetitionMapper">
-
-    <delete id="deleteTenMinutes">
-        delete from t_user_competition
-
-        where paymentCompetitionId in
-        <foreach collection="pays" item="pay" separator="," open="(" close=")">
-            #{pay}
-        </foreach>
-    </delete>
-
-
-    <select id="queryCompetitionList" resultType="com.dsh.competition.model.CompetitionListVo">
-        select
-        aa.id,
-        aa.name,
-        aa.coverDrawing,
-        aa.cityName,
-        aa.registerCondition,
-        aa.introduction,
-        aa.registerEndTime,
-        aa.age,
-        aa.status,
-        aa.heat
-        from (
-        SELECT
-        a.id,
-        a.`name`,
-        a.coverDrawing,
-        a.city AS cityName,
-        a.registerCondition,
-        a.introduction,
-        a.baseNumber as heat,
-        DATE_FORMAT(a.registerEndTime, '%Y-%m-%d %H:%i') AS registerEndTime,
-        CONCAT(a.startAge, '-', a.endAge) AS age,
-        a.baseNumber,
-        CASE
-        WHEN NOW() &lt; a.startTime THEN 1 -- 未开始
-        WHEN now() between a.startTime and a.endTime THEN 2 -- 进行中
-        ELSE 3 -- 已结束
-        END AS status
-        FROM
-        t_competition a
-        WHERE
-        a.auditStatus = 2 and a.status != 4
-        AND a.state = 1
-        <if test="null != cityCode and '' != cityCode">
-            and a.cityCode = #{cityCode}
-        </if>
-        <if test="null != content and '' != content">
-            and a.name like CONCAT('%', #{content}, '%')
-        </if>
-        <if test="null != registerCondition">
-            and a.registerCondition = #{registerCondition}
-        </if>
-        GROUP BY a.id
-        order by a.insertTime desc
-        ) as aa
-        <if test="null != heat and '' != heat">
-            order by aa.heat ${heat}
-        </if>
-    </select>
-    <select id="counts" resultType="java.lang.Integer">
-            select  count(1)
-            from t_user_competition where competitionId = #{id}
-    </select>
-
-
-    <update id="taskSetStatusStart">
-        update t_competition set status = 2 where status = 1 and state = 1 and auditStatus = 2 and now() between startTime and endTime
-    </update>
-
-
-    <update id="taskSetStatusEnd">
-        update t_competition set status = 3 where status = 2 and state = 1 and auditStatus = 2 and now() >= endTime
-    </update>
-</mapper>
diff --git a/cloud-server-communityWorldCup/target/classes/mapper/ParticipantMapper.xml b/cloud-server-communityWorldCup/target/classes/mapper/ParticipantMapper.xml
deleted file mode 100644
index 5c000c2..0000000
--- a/cloud-server-communityWorldCup/target/classes/mapper/ParticipantMapper.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?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="com.dsh.competition.mapper.ParticipantMapper">
-    <select id="getPeopleFromId" resultType="com.dsh.competition.feignclient.model.CompetitionUser">
-        select t2.name,t2.gender sex,t2.phone ,t2.idcard idCard ,t3.payStatus state
-        from t_user_competition t1 left join t_participant t2 on t1.participantId = t2.id
-        left join t_payment_competition t3 on t1.paymentCompetitionId = t3.id
-        where t1.competitionId =#{id} and t2.id is not null and t3.id is not null
-        <if test="state !=null and state !='' and state ==1">
-            and t3.payStatus in (1,2)
-        </if>
-        <if test="state !=null and state !='' and state ==3">
-            and t3.payStatus =3
-        </if>
-    </select>
-
-    <select id="getPeopleFromId1" resultType="com.dsh.competition.entity.UserCompetition">
-        select * from (
-        select
-        a.*
-        from t_user_competition a
-        left join t_payment_competition b on (a.paymentCompetitionId = b.id)
-        where b.state = 1 and b.payStatus != 1 and a.competitionId = #{id}
-        <if test="null != state and state == 1">
-            and b.payStatus = 2
-        </if>
-        <if test="null != state and state == 3">
-            and b.payStatus = 3
-        </if>
-        group by a.id
-        ) as aa where aa.id is not null order by aa.insertTime desc limit #{offset}, #{limit}
-    </select>
-
-    <select id="getPeopleFromIdCount" resultType="java.lang.Integer">
-        select
-        count(*)
-        from (
-        select
-        a.id
-        from t_user_competition a
-        left join t_payment_competition b on (a.paymentCompetitionId = b.id)
-        where b.state = 1 and b.payStatus != 1 and a.competitionId = #{id}
-        <if test="null != state and state == 1">
-            and b.payStatus = 2
-        </if>
-        <if test="null != state and state == 3">
-            and b.payStatus = 3
-        </if>
-        group by a.id
-        ) as aa where aa.id is not null
-    </select>
-
-
-    <select id="getPeoples" resultType="com.dsh.competition.feignclient.model.CompetitionUser">
-        select t2.id, t2.name,t2.gender sex,t2.phone ,t2.idcard idCard ,t3.payStatus state
-        from t_user_competition t1 left join t_participant t2 on t1.participantId = t2.id
-        left join t_payment_competition t3 on t1.paymentCompetitionId = t3.id
-        where t1.competitionId =#{id} and t2.id is not null and t3.id is not null
-        <if test="state !=null and state !='' and state ==1">
-            and t3.payStatus in (1,2)
-        </if>
-        <if test="state !=null and state !='' and state ==3">
-            and t3.payStatus =3
-        </if>
-    </select>
-
-</mapper>
\ No newline at end of file
diff --git a/cloud-server-communityWorldCup/target/classes/mapper/PaymentCompetitionMapper.xml b/cloud-server-communityWorldCup/target/classes/mapper/PaymentCompetitionMapper.xml
deleted file mode 100644
index 78cf329..0000000
--- a/cloud-server-communityWorldCup/target/classes/mapper/PaymentCompetitionMapper.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?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="com.dsh.competition.mapper.PaymentCompetitionMapper">
-
-
-    <select id="queryMyCompetitionList" resultType="com.dsh.competition.model.CompetitionListVo">
-        select
-        a.id,
-        b.`name`,
-        b.coverDrawing,
-        b.city as cityName,
-        b.registerCondition,
-        b.introduction,
-        b.id as pId,
-        DATE_FORMAT(b.registerEndTime, '%Y-%m-%d %H:%i') as registerEndTime,
-        CONCAT(b.startAge, '-', b.endAge) as age,
-        b.baseNumber as heat,
-        if(a.payStatus = 3, 4, b.status) as status
-        from t_payment_competition a
-        left join t_competition b on (a.competitionId = b.id)
-        where a.state = 1 and a.appUserId = #{uid} and a.payStatus != 1
-        <!--1=未开始,2=进行中,3=已结束,4=已取消-->
-        <if test="null != type and 1 == type">
-            and b.status = 1 and a.payStatus = 2
-        </if>
-        <if test="null != type and 2 == type">
-            and b.status = 2 and a.payStatus = 2
-        </if>
-        <if test="null != type and 3 == type">
-            and b.status = 3 and a.payStatus = 2
-        </if>
-        <if test="null != type and 4 == type">
-            and a.payStatus = 3
-        </if>
-        order by a.insertTime desc limit #{pageNo}, #{pageSize}
-    </select>
-    <select id="queryDatas" resultType="com.dsh.competition.feignclient.model.BillingRequest">
-        SELECT DATE_FORMAT(insertTime, '%m-%d %H:%i')as `time`,
-        amount
-        from t_payment_competition
-        where payStatus in (2,3) and payType in (1,2)
-        <if test="null != monthStart and '' != monthStart and null != monthEnd and '' != monthEnd">
-            and DATE_FORMAT(payTime, '%Y-%m-%d %H:%i:%s') between #{monthStart} and #{monthEnd}
-        </if>
-        <if test="null != appUserId and '' != appUserId ">
-            and appUserId = #{appUserId}
-        </if>
-    </select>
-    <select id="queryCancelDatas" resultType="com.dsh.competition.feignclient.model.BillingRequest">
-        SELECT DATE_FORMAT(refundTime, '%m-%d %H:%i')as `time`,
-        amount
-        from t_payment_competition
-        where payStatus = 3 and payType in (1,2)
-        <if test="null != monthStart and '' != monthStart and null != monthEnd and '' != monthEnd">
-            and DATE_FORMAT(refundTime, '%Y-%m-%d %H:%i:%s') between #{monthStart} and #{monthEnd}
-        </if>
-        <if test="null != appUserId and '' != appUserId ">
-            and appUserId = #{appUserId}
-        </if>
-    </select>
-    <select id="listAll" resultType="com.dsh.competition.entity.PaymentCompetition">
-        select * from t_payment_competition t1
-        <where>
-            <if test="query.amount!=null and query.amount!= ''">
-                and t1.amount &lt;= #{query.amount}
-            </if>
-            <if test="query.userIds != null and query.userIds.size()>0">
-                AND t1.competitionId IN
-                <foreach collection="query.userIds" separator="," item="id" open="(" close=")">
-                    #{id}
-                </foreach>
-            </if>
-            <if test="sTime !=null and sTime!= '' and eTime !=null and eTime!= ''">
-                and t1.insertTime between #{sTime} and #{eTime}
-            </if>
-        </where>
-    </select>
-    <select id="queryBycode" resultType="java.lang.Integer">
-        SELECT cp.storeId
-        FROM t_course_package_payment py
-                 LEFT JOIN t_course_package cp ON py.coursePackageId = cp.id
-        WHERE py.code = #{code}
-    </select>
-    <select id="counts" resultType="java.lang.Integer">
-        select  count(1)
-        from t_user_competition where competitionId = #{id}
-    </select>
-</mapper>
\ No newline at end of file
diff --git a/cloud-server-communityWorldCup/target/classes/redis.properties b/cloud-server-communityWorldCup/target/classes/redis.properties
deleted file mode 100644
index 095a9fb..0000000
--- a/cloud-server-communityWorldCup/target/classes/redis.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-spring.redis.database=0
-spring.redis.host=127.0.0.1
-spring.redis.port=6379
-spring.redis.password=123456
-spring.redis.jedis.pool.max-active=1024
-spring.redis.jedis.pool.max-wait=10000
-spring.redis.jedis.pool.max-idle=200
-spring.redis.jedis.pool.min-idle=50
-spring.redis.timeout=10000
-spring.redis.block-when-exhausted=true
\ No newline at end of file
diff --git a/cloud-server-communityWorldCup/target/classes/sharding-jdbc.properties b/cloud-server-communityWorldCup/target/classes/sharding-jdbc.properties
deleted file mode 100644
index 2346d3e..0000000
--- a/cloud-server-communityWorldCup/target/classes/sharding-jdbc.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-datasource.names=master0
-datasource.master0.type=com.alibaba.druid.pool.DruidDataSource
-datasource.master0.driverClassName=com.mysql.cj.jdbc.Driver
-datasource.master0.url=jdbc:mysql://192.168.110.80:3306/playpai_competition?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
-datasource.master0.username=root
-datasource.master0.password=123456
-datasource.master0.maxActive=20
-datasource.master0.maxWait=60000
-datasource.master0.minIdle=5
-datasource.master0.initialSize=2
-
-
-
-#datasource.names=master0
-#datasource.master0.type=com.alibaba.druid.pool.DruidDataSource
-#datasource.master0.driverClassName=com.mysql.cj.jdbc.Driver
-#datasource.master0.url=jdbc:mysql://127.0.0.1:3306/playpai_competition?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
-#datasource.master0.username=root
-#datasource.master0.password=playpai2023!
-#datasource.master0.maxActive=20
-#datasource.master0.maxWait=60000
-#datasource.master0.minIdle=5
-#datasource.master0.initialSize=2
-
-
-
diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageOrderStudentController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageOrderStudentController.java
new file mode 100644
index 0000000..61dc217
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageOrderStudentController.java
@@ -0,0 +1,48 @@
+package com.dsh.course.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.dsh.course.entity.CoursePackageOrderStudent;
+import com.dsh.course.model.DeductionClassHourList;
+import com.dsh.course.service.ICoursePackageOrderStudentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/2/22 15:27
+ */
+@RestController
+@RequestMapping("/coursePackageOrderStudent")
+public class CoursePackageOrderStudentController {
+
+    @Autowired
+    private ICoursePackageOrderStudentService coursePackageOrderStudentService;
+
+
+    /**
+     * 根据学院id获取剩余有效课时数据
+     * @param studentId
+     * @return
+     */
+    @ResponseBody
+    @PostMapping("/getCoursePackageOrderStudent")
+    public List<CoursePackageOrderStudent> getCoursePackageOrderStudent(@RequestBody Integer studentId){
+        return coursePackageOrderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>()
+                .eq("studentId", studentId).eq("status", 1).eq("state", 1)
+                .gt("laveClassHours", 0).last(" and useTime > now()"));
+    }
+
+
+    /**
+     * 扣减学员课时
+     * @param deductionClassHourList
+     * @return
+     */
+    @ResponseBody
+    @PostMapping("/deductionClassHour")
+    public boolean deductionClassHour(@RequestBody DeductionClassHourList deductionClassHourList){
+        return coursePackageOrderStudentService.deductionClassHour(deductionClassHourList);
+    }
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/DeductionClassHour.java b/cloud-server-course/src/main/java/com/dsh/course/model/DeductionClassHour.java
new file mode 100644
index 0000000..78904ac
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/model/DeductionClassHour.java
@@ -0,0 +1,27 @@
+package com.dsh.course.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/2/22 15:44
+ */
+@Data
+public class DeductionClassHour {
+    /**
+     * 课时记录id
+     */
+    private Long id;
+    /**
+     * 学员id
+     */
+    private Integer studentId;
+    /**
+     * 课时id
+     */
+    private Integer coursePackageId;
+    /**
+     * 扣减课时
+     */
+    private Integer classHour;
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/DeductionClassHourList.java b/cloud-server-course/src/main/java/com/dsh/course/model/DeductionClassHourList.java
new file mode 100644
index 0000000..8c9c994
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/model/DeductionClassHourList.java
@@ -0,0 +1,14 @@
+package com.dsh.course.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/2/22 15:46
+ */
+@Data
+public class DeductionClassHourList {
+    List<DeductionClassHour> deductionClassHourList;
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/ICoursePackageOrderStudentService.java b/cloud-server-course/src/main/java/com/dsh/course/service/ICoursePackageOrderStudentService.java
index b8c867e..434c338 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/service/ICoursePackageOrderStudentService.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/service/ICoursePackageOrderStudentService.java
@@ -3,6 +3,8 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.dsh.course.entity.CoursePackageOrderStudent;
 import com.dsh.course.feignclient.model.RecordAppoint;
+import com.dsh.course.model.DeductionClassHourList;
+import org.springframework.web.bind.annotation.RequestBody;
 
 import java.util.List;
 
@@ -20,4 +22,12 @@
      * @return
      */
     List<RecordAppoint> obtainStuClassDetails(Integer stuId, Integer appUserId, Integer pageNum);
+
+
+    /**
+     * 扣除学员课时
+     * @param deductionClassHourList
+     * @return
+     */
+    boolean deductionClassHour(DeductionClassHourList deductionClassHourList);
 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageOrderStudentServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageOrderStudentServiceImpl.java
index 6acdef8..15fd639 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageOrderStudentServiceImpl.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageOrderStudentServiceImpl.java
@@ -13,8 +13,11 @@
 import com.dsh.course.feignclient.other.StoreClient;
 import com.dsh.course.feignclient.other.model.Store;
 import com.dsh.course.mapper.*;
+import com.dsh.course.model.DeductionClassHour;
+import com.dsh.course.model.DeductionClassHourList;
 import com.dsh.course.service.ICoursePackageOrderStudentService;
 import com.dsh.course.service.ICoursePackageSchedulingService;
+import com.dsh.course.service.TCoursePackageService;
 import com.dsh.course.util.DateTimeHelper;
 import com.dsh.course.util.DateUtil;
 import com.dsh.course.util.ToolUtil;
@@ -49,6 +52,9 @@
 
     @Resource
     private StoreClient stoClient;
+
+    @Autowired
+    private TCoursePackageService coursePackageService;
 
 
 
@@ -229,4 +235,57 @@
         return ids;
 
     }
+
+
+    /**
+     * 扣除学员课时
+     * @param deductionClassHourList
+     * @return
+     */
+    @Override
+    public boolean deductionClassHour(DeductionClassHourList deductionClassHourList) {
+        try {
+            List<DeductionClassHour> list = deductionClassHourList.getDeductionClassHourList();
+            for (DeductionClassHour deductionClassHour : list) {
+                CoursePackageOrderStudent coursePackageOrderStudent = this.getById(deductionClassHour.getId());
+                Integer laveClassHours = coursePackageOrderStudent.getLaveClassHours();
+                coursePackageOrderStudent.setLaveClassHours(coursePackageOrderStudent.getLaveClassHours() - deductionClassHour.getClassHour());
+
+                //计算需要删除几个排课记录
+                TCoursePackage coursePackage = coursePackageService.getById(coursePackageOrderStudent.getCoursePackageId());
+                Integer codeTime = coursePackage.getCodeTime();
+                //未上的排课数据
+                List<CoursePackageScheduling> packageSchedulings = coursePackageSchedulingService.list(new QueryWrapper<CoursePackageScheduling>().eq("studentId", coursePackageOrderStudent.getStudentId())
+                        .eq("coursePackageId", coursePackageOrderStudent.getCoursePackageId()).eq("status", 1).orderByDesc("classDate"));
+                //排课使用的总课时
+                int classHour = packageSchedulings.size() * codeTime;
+                //未排课的课时
+                int notClass = laveClassHours - classHour;
+
+                //判断是否需要删除排课数据
+                if(notClass < deductionClassHour.getClassHour()){
+                    int clss = deductionClassHour.getClassHour() - notClass;
+                    int n = clss % codeTime;
+                    int l = 0;
+                    //不整除的情况,需要多删除一节排课,回加差额课时。
+                    if(n != 0){
+                        n += 1;
+                        l = (codeTime * n) - clss;
+                        coursePackageOrderStudent.setLaveClassHours(l);
+                    }
+
+                    //删除已排的课程
+                    List<CoursePackageScheduling> coursePackageSchedulings = packageSchedulings.subList(0, n);
+                    List<Long> collect = coursePackageSchedulings.stream().map(CoursePackageScheduling::getId).collect(Collectors.toList());
+                    coursePackageSchedulingService.removeByIds(collect);
+                }
+
+                this.updateById(coursePackageOrderStudent);
+            }
+            return true;
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return false;
+    }
 }

--
Gitblit v1.7.1