puzhibing
2024-02-22 cbca62b053eb3dc3cc7754aa0062aaf1e04e2cb4
新增加接口
1 文件已重命名
7个文件已修改
103个文件已删除
13个文件已添加
1528 ■■■■■ 已修改文件
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/controller/WorldCupController.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/entity/WorldCupPayment.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/feignclient/course/CoursePackageOrderStudentClient.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/feignclient/course/model/CoursePackageOrderStudent.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/mapper/WorldCupPaymentMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/CheckPaymentMethod.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/CheckPaymentMethodVo.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/DeductionClassHour.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/DeductionClassHourList.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/PaymentWorldCup.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/IWorldCupPaymentService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/IWorldCupService.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/impl/WorldCupPaymentServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/impl/WorldCupServiceImpl.java 328 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/util/PayMoneyUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/src/main/resources/mapper/WorldCupPaymentMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/META-INF/spring-configuration-metadata.json 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/bootstrap.properties 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/CompetitionApplication.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/advice/ControllerException.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/controller/CompetitionController.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/controller/ParticipantController.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/controller/UserCompetitionController.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/Competition.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/OperatorUser.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/Participant.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/PaymentCompetition.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/UserCompetition.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/DeductionCompetitionsClient.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/AppUserClient.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/StudentClient.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/model/AppUser.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/model/Student.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/model/TStudent.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/course/CoursePackagePaymentClient.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/course/model/PaymentDeductionClassHour.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/BillingDataRequestVo.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/BillingRequest.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/BillingRequestVo.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/CompetitionUser.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/GetPeopleQuery.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/GetStuSourseList.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/ListQuery.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/PurchaseRecordVo.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/other/StoreClient.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/other/model/Store.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/mapper/CompetitionMapper.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/mapper/ParticipantMapper.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/mapper/PaymentCompetitionMapper.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/mapper/UserCompetitionMapper.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/AddParticipant.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/CompetionVO.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/CompetitionInfo.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/CompetitionListVo.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/CompetitionQuery.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/EditParticipant.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/ParticipantVo.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/PayCourseRes.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/PaymentCompetitionVo.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/QueryDataFee.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/SaveParticipant.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/TCompetition.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/CompetitionService.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/IParticipantService.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/IPaymentCompetitionService.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/UserCompetitionService.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/impl/CompetitionServiceImpl.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/impl/ParticipantServiceImpl.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/impl/PaymentCompetitionServiceImpl.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/impl/UserCompetitionServiceImpl.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/CodeGenerateUtils.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/DateTimeHelper.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/DateUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/DoubleUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/EmojiUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/GeodesyUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/HeaderAuthUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/JsonUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/JuHeUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/LocalDateTimeUtils.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/MD5AndKL.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/MessageUtils.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/PayMoneyUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/RedisUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/ResultUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/StrUtils.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/StringUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/StudyTimeUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/TaskUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/TaskUtilCompetition.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/TokenUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/ToolUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/UUIDUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/Base64Utils.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/BaseUtils.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/DES.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/Md5Util.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/SignUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/httpClinet/HttpClientUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/httpClinet/HttpResult.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/config/JsonLongSerializer.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/config/MessageLocalConfig.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/config/MyLocaleResolver.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/config/RedisConfig.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/config/Sharding_jdbc/DatasourceModel.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/config/Sharding_jdbc/Master0DataSource.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/config/Sharding_jdbc/ShardingConfig.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/config/SwaggerConfig.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/page/HttpKit.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/page/Order.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/page/PageFactory.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/page/WafKit.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/com/dsh/page/WafRequestWrapper.class 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/logback-spring.xml 230 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/mapper/CompetitionMapper.xml 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/mapper/ParticipantMapper.xml 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/mapper/PaymentCompetitionMapper.xml 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/redis.properties 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-communityWorldCup/target/classes/sharding-jdbc.properties 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageOrderStudentController.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/model/DeductionClassHour.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/model/DeductionClassHourList.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/ICoursePackageOrderStudentService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageOrderStudentServiceImpl.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();
        }
    }
}
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/entity/WorldCupPayment.java
New file
@@ -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;
}
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/feignclient/course/CoursePackageOrderStudentClient.java
New file
@@ -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);
}
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/feignclient/course/model/CoursePackageOrderStudent.java
New file
@@ -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;
}
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/mapper/WorldCupPaymentMapper.java
New file
@@ -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> {
}
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/CheckPaymentMethod.java
New file
@@ -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;
}
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/CheckPaymentMethodVo.java
New file
@@ -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;
}
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/DeductionClassHour.java
New file
@@ -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;
}
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/model/DeductionClassHourList.java
New file
@@ -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;
}
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;
}
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/IWorldCupPaymentService.java
New file
@@ -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> {
}
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);
}
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/impl/WorldCupPaymentServiceImpl.java
New file
@@ -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 {
}
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();
    }
}
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);//付款金额
cloud-server-communityWorldCup/src/main/resources/mapper/WorldCupPaymentMapper.xml
File was renamed from cloud-server-communityWorldCup/target/classes/mapper/UserCompetitionMapper.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>
cloud-server-communityWorldCup/target/classes/META-INF/spring-configuration-metadata.json
File was deleted
cloud-server-communityWorldCup/target/classes/bootstrap.properties
File was deleted
cloud-server-communityWorldCup/target/classes/com/dsh/CompetitionApplication.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/advice/ControllerException.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/controller/CompetitionController.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/controller/ParticipantController.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/controller/UserCompetitionController.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/Competition.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/OperatorUser.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/Participant.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/PaymentCompetition.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/entity/UserCompetition.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/DeductionCompetitionsClient.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/AppUserClient.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/StudentClient.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/model/AppUser.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/model/Student.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/account/model/TStudent.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/course/CoursePackagePaymentClient.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/course/model/PaymentDeductionClassHour.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/BillingDataRequestVo.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/BillingRequest.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/BillingRequestVo.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/CompetitionUser.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/GetPeopleQuery.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/GetStuSourseList.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/ListQuery.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/model/PurchaseRecordVo.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/other/StoreClient.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/feignclient/other/model/Store.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/mapper/CompetitionMapper.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/mapper/ParticipantMapper.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/mapper/PaymentCompetitionMapper.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/mapper/UserCompetitionMapper.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/AddParticipant.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/CompetionVO.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/CompetitionInfo.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/CompetitionListVo.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/CompetitionQuery.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/EditParticipant.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/ParticipantVo.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/PayCourseRes.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/PaymentCompetitionVo.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/QueryDataFee.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/SaveParticipant.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/model/TCompetition.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/CompetitionService.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/IParticipantService.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/IPaymentCompetitionService.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/UserCompetitionService.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/impl/CompetitionServiceImpl.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/impl/ParticipantServiceImpl.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/impl/PaymentCompetitionServiceImpl.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/service/impl/UserCompetitionServiceImpl.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/CodeGenerateUtils.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/DateTimeHelper.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/DateUtil.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/DoubleUtil.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/EmojiUtil.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/GeodesyUtil.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/HeaderAuthUtil.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/JsonUtil.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/JuHeUtil.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/LocalDateTimeUtils.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/MD5AndKL.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/MessageUtils.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/PayMoneyUtil.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/RedisUtil.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/ResultUtil.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/StrUtils.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/StringUtil.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/StudyTimeUtil.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/TaskUtil.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/TaskUtilCompetition.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/TokenUtil.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/ToolUtil.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/UUIDUtil.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/Base64Utils.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/BaseUtils.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/DES.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/Md5Util.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/akeylogin/SignUtil.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/httpClinet/HttpClientUtil.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/competition/util/httpClinet/HttpResult.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/config/JsonLongSerializer.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/config/MessageLocalConfig.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/config/MyLocaleResolver.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/config/RedisConfig.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/config/Sharding_jdbc/DatasourceModel.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/config/Sharding_jdbc/Master0DataSource.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/config/Sharding_jdbc/ShardingConfig.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/config/SwaggerConfig.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/page/HttpKit.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/page/Order.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/page/PageFactory.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/page/WafKit.class
Binary files differ
cloud-server-communityWorldCup/target/classes/com/dsh/page/WafRequestWrapper.class
Binary files differ
cloud-server-communityWorldCup/target/classes/logback-spring.xml
File was deleted
cloud-server-communityWorldCup/target/classes/mapper/CompetitionMapper.xml
File was deleted
cloud-server-communityWorldCup/target/classes/mapper/ParticipantMapper.xml
File was deleted
cloud-server-communityWorldCup/target/classes/mapper/PaymentCompetitionMapper.xml
File was deleted
cloud-server-communityWorldCup/target/classes/redis.properties
File was deleted
cloud-server-communityWorldCup/target/classes/sharding-jdbc.properties
File was deleted
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageOrderStudentController.java
New file
@@ -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);
    }
}
cloud-server-course/src/main/java/com/dsh/course/model/DeductionClassHour.java
New file
@@ -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;
}
cloud-server-course/src/main/java/com/dsh/course/model/DeductionClassHourList.java
New file
@@ -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;
}
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);
}
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;
    }
}