浏览代码

Merge branch 'zx_saas_director_0927' into test

刘俊驰 10 月之前
父节点
当前提交
224d7cc44a
共有 24 个文件被更改,包括 1618 次插入7 次删除
  1. 1 1
      mec-application/src/main/java/com/ym/mec/config/ResourceServerConfig.java
  2. 8 2
      mec-application/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  3. 60 0
      mec-application/src/main/java/com/ym/mec/student/controller/TempDirectorTrainingCampController.java
  4. 71 0
      mec-application/src/main/java/com/ym/mec/web/controller/TempDirectorTrainingCampController.java
  5. 152 0
      mec-application/src/main/java/com/ym/mec/web/controller/TempDirectorTrainingCampDetailController.java
  6. 5 0
      mec-biz/pom.xml
  7. 9 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java
  8. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TempDirectorTrainingCampDao.java
  9. 21 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TempDirectorTrainingCampDetailDao.java
  10. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PayParamBasicDto.java
  11. 67 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TempDirectorTrainingCamp.java
  12. 111 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TempDirectorTrainingCampDetail.java
  13. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderDetailTypeEnum.java
  14. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderTypeEnum.java
  15. 300 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/TempDirectorTrainingCampDetailWrapper.java
  16. 136 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/TempDirectorTrainingCampWrapper.java
  17. 27 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TempDirectorTrainingCampDetailService.java
  18. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TempDirectorTrainingCampService.java
  19. 41 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java
  20. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  21. 320 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempDirectorTrainingCampDetailServiceImpl.java
  22. 144 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempDirectorTrainingCampServiceImpl.java
  23. 64 0
      mec-biz/src/main/resources/config/mybatis/TempDirectorTrainingCampDetailMapper.xml
  24. 39 0
      mec-biz/src/main/resources/config/mybatis/TempDirectorTrainingCampMapper.xml

+ 1 - 1
mec-application/src/main/java/com/ym/mec/config/ResourceServerConfig.java

@@ -37,7 +37,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                         "/*/v2/api-docs", "/*/code/*",
 
                 //student
-                        "/api-student/wechat/*", "/api-student/student/registering", "/api-student/register/*", "/api-student/studentOrder/**", "/api-student/musicGroup/getSubjectGoodsAndInfo",
+                        "/api-student/wechat/*","/api-student/tempDirectorTrainingCamp/*", "/api-student/student/registering", "/api-student/register/*", "/api-student/studentOrder/**", "/api-student/musicGroup/getSubjectGoodsAndInfo",
                         "/api-student/musicGroup/getMusicGroupStatus", "/api-student/musicGroup/getOrderStatus","/api-student/sysCouponCode/queryPage",
                         "/api-student/musicGroup/pay", "/api-student/musicGroup/rePay", "/api-student/studentManage/queryStudentPer",
                         "/api-student/sporadicChargeInfo/get", "/api-student/sporadicChargeInfo/sporadicPay", "/api-student/repair/getRepairInfo", "/api-student/repair/payRepair",

+ 8 - 2
mec-application/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -112,6 +112,8 @@ public class StudentOrderController extends BaseController {
     private TempBuyDoubleElevenUserLogDao tempBuyDoubleElevenUserLogDao;
     @Autowired
     private HfMerchantConfigService hfMerchantConfigService;
+    @Autowired
+    private TempDirectorTrainingCampDetailService tempDirectorTrainingCampDetailService;
 
     @Value("${spring.profiles.active:dev}")
     private String profiles;
@@ -351,8 +353,12 @@ public class StudentOrderController extends BaseController {
             }
         } else if (orderByOrderNo.getGroupType().equals(GroupType.SPORADIC)) {
             if (Objects.nonNull(orderByOrderNo.getMusicGroupId())) {
-                List<SporadicChargeInfo> info = sporadicChargeInfoService.findByIds(orderByOrderNo.getMusicGroupId());
-                orderDetail.put("detail", info);
+                if(orderByOrderNo.getType().equals(OrderTypeEnum.DIRECTOR_TRAINING_CAMP)){
+                    orderDetail.put("detail", tempDirectorTrainingCampDetailService.getById(orderByOrderNo.getMusicGroupId()));
+                }else {
+                    List<SporadicChargeInfo> info = sporadicChargeInfoService.findByIds(orderByOrderNo.getMusicGroupId());
+                    orderDetail.put("detail", info);
+                }
             }
             if (orderByOrderNo.getType().equals(OrderTypeEnum.DOUBLE_ELEVEN2020)) {
                 LuckDrawCount luckDrawCount = luckDrawCountService.get(orderByOrderNo.getUserId().longValue());

+ 60 - 0
mec-application/src/main/java/com/ym/mec/student/controller/TempDirectorTrainingCampController.java

@@ -0,0 +1,60 @@
+package com.ym.mec.student.controller;
+
+import com.ym.mec.biz.dal.entity.TempDirectorTrainingCamp;
+import com.ym.mec.biz.dal.entity.TempDirectorTrainingCampDetail;
+import com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampDetailWrapper;
+import com.ym.mec.biz.service.TempDirectorTrainingCampDetailService;
+import com.ym.mec.biz.service.TempDirectorTrainingCampService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.exception.BizException;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+@Api(tags = "乐队指导训练营活动")
+@RestController
+@RequestMapping("${app-config.url.student:}/tempDirectorTrainingCamp")
+public class TempDirectorTrainingCampController extends BaseController {
+
+    @Resource
+    private TempDirectorTrainingCampService tempDirectorTrainingCampService;
+    @Resource
+    private TempDirectorTrainingCampDetailService tempDirectorTrainingCampDetailService;
+
+    @ApiOperation(value="获取训练营详情")
+    @GetMapping(value = "/getDetail")
+    public HttpResponseResult<TempDirectorTrainingCamp> getDetail(Integer campId){
+        return succeed(tempDirectorTrainingCampService.getById(campId));
+    }
+
+    @ApiOperation(value="根据身份证号、手机号获取用户基本信息")
+    @PostMapping(value = "/getUserDetail")
+    public HttpResponseResult<TempDirectorTrainingCampDetail> getUserDetail(@RequestBody TempDirectorTrainingCampDetailWrapper.UserDetail userDetail){
+        if(userDetail.getTempDirectorTrainingCampId() == null || (StringUtils.isEmpty(userDetail.getCardNo()) && StringUtils.isEmpty(userDetail.getMobile()))){
+            throw new BizException("参数校验失败");
+        }
+        TempDirectorTrainingCampDetail one = tempDirectorTrainingCampDetailService.lambdaQuery()
+                .eq(TempDirectorTrainingCampDetail::getTempDirectorTrainingCampId,userDetail.getTempDirectorTrainingCampId())
+                .eq(StringUtils.isNotEmpty(userDetail.getCardNo()), TempDirectorTrainingCampDetail::getCardNo, userDetail.getCardNo())
+                .eq(StringUtils.isNotEmpty(userDetail.getMobile()), TempDirectorTrainingCampDetail::getMobile, userDetail.getMobile()).last("LIMIT 1").one();
+        return succeed(one);
+    }
+
+    @ApiOperation(value="训练营报名")
+    @PostMapping(value = "/applyCamp")
+    public HttpResponseResult<Integer> applyCamp(@Valid @RequestBody TempDirectorTrainingCampDetailWrapper.ApplyCamp applyCamp){
+        return succeed(tempDirectorTrainingCampDetailService.applyCamp(applyCamp));
+    }
+
+    @ApiOperation(value = "训练营报名支付")
+    @PostMapping("/pay")
+    public HttpResponseResult pay(@RequestBody TempDirectorTrainingCampDetailWrapper.PayDto payDto) throws Exception {
+        return tempDirectorTrainingCampDetailService.pay(payDto);
+    }
+}
+

+ 71 - 0
mec-application/src/main/java/com/ym/mec/web/controller/TempDirectorTrainingCampController.java

@@ -0,0 +1,71 @@
+package com.ym.mec.web.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.microsvc.toolkit.common.response.paging.PageInfo;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampWrapper;
+import com.ym.mec.biz.service.TempDirectorTrainingCampService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+@Api(tags = "乐队指导训练营活动")
+@RestController
+@RequestMapping("${app-config.url.web:}/tempDirectorTrainingCamp")
+public class TempDirectorTrainingCampController extends BaseController {
+
+    @Resource
+    private TempDirectorTrainingCampService tempDirectorTrainingCampService;
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiOperation("创建训练营")
+    @PostMapping(value = "/add")
+    public HttpResponseResult<Object> add(@Valid @RequestBody TempDirectorTrainingCampWrapper.AddCamp dto) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        dto.setUpdateBy(sysUser.getId());
+        tempDirectorTrainingCampService.add(dto);
+        return succeed();
+    }
+
+    @ApiOperation("修改训练营")
+    @PostMapping(value = "/modify")
+    public HttpResponseResult<Object> modify(@Valid @RequestBody TempDirectorTrainingCampWrapper.AddCamp dto) {
+        if (dto.getId() == null) {
+            return failed("训练营id不能为空");
+        }
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        dto.setUpdateBy(sysUser.getId());
+        tempDirectorTrainingCampService.modify(dto);
+        return succeed();
+    }
+
+
+    @ApiOperation(value = "分页获取")
+    @PostMapping("/queryPage")
+    public HttpResponseResult<PageInfo<TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp>> queryPage(@RequestBody TempDirectorTrainingCampWrapper.TempDirectorTrainingCampQueryInfo queryInfo){
+        IPage<TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp> tempDirectorTrainingCampIPage = tempDirectorTrainingCampService.queryPage(QueryInfo.getPage(queryInfo), queryInfo);
+
+        return succeed(QueryInfo.pageInfo(tempDirectorTrainingCampIPage));
+    }
+}
+

+ 152 - 0
mec-application/src/main/java/com/ym/mec/web/controller/TempDirectorTrainingCampDetailController.java

@@ -0,0 +1,152 @@
+package com.ym.mec.web.controller;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.microsvc.toolkit.common.response.paging.PageInfo;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.microsvc.toolkit.common.response.template.R;
+import com.microsvc.toolkit.common.tools.DownloadManager;
+import com.microsvc.toolkit.middleware.oss.OssPluginContext;
+import com.microsvc.toolkit.middleware.oss.impl.TencentOssPlugin;
+import com.ym.mec.biz.dal.entity.TempDirectorTrainingCamp;
+import com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampDetailWrapper;
+import com.ym.mec.biz.service.TempDirectorTrainingCampDetailService;
+import com.ym.mec.biz.service.TempDirectorTrainingCampService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.util.date.DateUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.joda.time.DateTime;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.text.MessageFormat;
+import java.util.Date;
+import java.util.List;
+
+@Api(tags = "乐队指导训练营活动")
+@RestController
+@Slf4j
+@RequestMapping("${app-config.url.web:}/tempDirectorTrainingDetailCamp")
+public class TempDirectorTrainingCampDetailController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private TempDirectorTrainingCampDetailService tempDirectorTrainingCampDetailService;
+
+    @Autowired
+    private OssPluginContext ossPluginContext;
+
+
+    @Autowired
+    private TempDirectorTrainingCampService tempDirectorTrainingCampService;
+
+
+    @ApiOperation(value = "分页获取")
+    @PostMapping("/queryPage")
+    public HttpResponseResult<PageInfo<TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetail>> queryPage(@RequestBody TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailQuery queryInfo){
+        if (queryInfo.getTempDirectorTrainingCampId()==null) {
+            return failed("训练营编号不能为空");
+        }
+        IPage<TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetail> tempDirectorTrainingCampIPage = tempDirectorTrainingCampDetailService.queryPage(QueryInfo.getPage(queryInfo), queryInfo);
+
+        return succeed(QueryInfo.pageInfo(tempDirectorTrainingCampIPage));
+    }
+
+
+
+    @ApiOperation(value = "导出")
+    @PostMapping("/export")
+    public HttpResponseResult<TempDirectorTrainingCampDetailWrapper.DownloadInfo> export(@RequestBody TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailQuery queryInfo){
+        if (queryInfo.getTempDirectorTrainingCampId()==null) {
+            return failed("训练营编号不能为空");
+        }
+
+
+        IPage<TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetail> tempDirectorTrainingCampIPage = tempDirectorTrainingCampDetailService.queryPage(new Page<>(1,-1), queryInfo);
+        List<TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetail> records = tempDirectorTrainingCampIPage.getRecords();
+        if (records.size()==0) {
+            return failed("没有可导出数据");
+        }
+        TempDirectorTrainingCamp trainingCamp = tempDirectorTrainingCampService.getById(queryInfo.getTempDirectorTrainingCampId());
+
+        for (TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetail record : records) {
+            record.setCityInfo(record.getProvince()+record.getCity()+record.getRegion());
+            if (StringUtils.isNotBlank(record.getPaymentStatus())) {
+                if ("PAID".equals(record.getPaymentStatus())) {
+                    record.setPaymentStatusName("已缴费");
+                } else if ("NO".equals(record.getPaymentStatus())) {
+                    record.setPaymentStatusName("未缴费");
+                } else if ("REFUND".equals(record.getPaymentStatus())) {
+                    record.setPaymentStatusName("已退费");
+                }
+            }
+            if (record.getPaymentDate() !=null) {
+                record.setPaymentDateStr(DateUtil.format(record.getPaymentDate(),DateUtil.EXPANDED_DATE_TIME_FORMAT));
+            }
+        }
+        TempDirectorTrainingCampDetailWrapper.DownloadInfo downloadInfo = generateExportExcelFile(records, TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetail.class, trainingCamp.getName()+"导出", trainingCamp.getName()+"导出");
+        return succeed(downloadInfo);
+    }
+
+    @ApiOperation(value = "统计")
+    @PostMapping("/queryPageStat")
+    public HttpResponseResult<TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailStat> queryPageStat(@RequestBody TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailQuery queryInfo){
+        if (queryInfo.getTempDirectorTrainingCampId()==null) {
+            return failed("训练营编号不能为空");
+        }
+        return succeed(tempDirectorTrainingCampDetailService.queryPageStat(queryInfo));
+    }
+
+
+    private TempDirectorTrainingCampDetailWrapper.DownloadInfo generateExportExcelFile(List<?> orderExports, Class<?> clazz, String fileName, String sheetName) {
+
+        // OSS上传文件目录
+        String uploadOssPath = MessageFormat.format("excel-download/{0}", DateTime.now().toString("yyyy-MM"));
+
+        // 文件上传下载地址
+        String uploadPath = MessageFormat.format("{0}/{1}-{2}.xlsx", uploadOssPath, fileName, DateTime.now().toString("MMddHHmmss"));
+
+        // 本地文件地址
+        String localPath = DownloadManager.getInstance().path(uploadPath);
+//        log.debug("pageExport localPath={}", localPath);
+
+        // 模板文件保存在springboot项目的resources/static下
+        // Resource resource = new ClassPathResource("static/预报名模板导出.xlsx");
+
+        EasyExcel
+            .write(localPath, clazz)
+            .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
+            //.withTemplate(resource.getStream()) // 利用模板的输出流
+            .sheet(0, sheetName)
+            .doWrite(orderExports);
+
+        // 上传本地文件到OSS服务器
+        String downloadPath = ossPluginContext.getPluginService(TencentOssPlugin.PLUGIN_NAME)
+            .uploadFile(uploadOssPath, new File(localPath));
+        log.debug("pageExport downloadPath={}", downloadPath);
+
+        // 删除本地缓存文件
+        DownloadManager.getInstance().deleteOnExit(localPath);
+
+        // 学生统计下载
+        return TempDirectorTrainingCampDetailWrapper.DownloadInfo
+            .builder()
+            .fileName(MessageFormat.format("{0}.xlsx", fileName))
+            .downloadPath(downloadPath)
+            .build();
+    }
+
+}
+

+ 5 - 0
mec-biz/pom.xml

@@ -35,6 +35,11 @@
 			<artifactId>mec-thirdparty</artifactId>
 		</dependency>
 
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+            <version>2.2.6</version>
+        </dependency>
 		<dependency>
 			<groupId>com.ym</groupId>
 			<artifactId>snakerflowy</artifactId>

+ 9 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java

@@ -24,8 +24,11 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
 
     StudentPaymentOrder lockOrder(@Param("id") Long id);
 
-    List<StudentPaymentOrder> queryByCondition(@Param("groupType") GroupType groupType, @Param("musicGroupId") String musicGroupId,
-                                               @Param("userId") Integer userId, @Param("status") DealStatusEnum status, @Param("type") OrderTypeEnum type);
+    List<StudentPaymentOrder> queryByCondition(@Param("groupType") GroupType groupType,
+                                               @Param("musicGroupId") String musicGroupId,
+                                               @Param("userId") Integer userId,
+                                               @Param("status") DealStatusEnum status,
+                                               @Param("type") OrderTypeEnum type);
 
     /**
      * @Author: Joburgess
@@ -167,7 +170,10 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
      * @author qnc99
      * @date 2020/12/5 0005
      */
-    List<StudentPaymentOrder> findPaymentOrderByGroupType(@Param("userId") Integer userId, @Param("sporadicId") Integer sporadicId, @Param("groupType") String groupType, @Param("status") DealStatusEnum status);
+    List<StudentPaymentOrder> findPaymentOrderByGroupType(@Param("userId") Integer userId,
+                                                          @Param("sporadicId") Integer sporadicId,
+                                                          @Param("groupType") String groupType,
+                                                          @Param("status") DealStatusEnum status);
 
     List<StudentPaymentOrder> findOrderByGroup(@Param("groupId") String groupId,
                                                @Param("groupType") GroupType groupType,

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TempDirectorTrainingCampDao.java

@@ -0,0 +1,14 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ym.mec.biz.dal.entity.TempDirectorTrainingCamp;
+import com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampWrapper;
+import org.apache.ibatis.annotations.Param;
+
+public interface TempDirectorTrainingCampDao extends BaseMapper<TempDirectorTrainingCamp> {
+
+    IPage<TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp> queryPage(@Param("page") IPage<TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp> page,
+                                                                              @Param("param") TempDirectorTrainingCampWrapper.TempDirectorTrainingCampQueryInfo queryInfo);
+}
+

+ 21 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TempDirectorTrainingCampDetailDao.java

@@ -0,0 +1,21 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ym.mec.biz.dal.entity.TempDirectorTrainingCampDetail;
+import com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampDetailWrapper;
+import com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampWrapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface TempDirectorTrainingCampDetailDao extends BaseMapper<TempDirectorTrainingCampDetail> {
+
+    List<TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp> getStat(@Param("ids") List<Integer> tempDirectorTrainingCampIds);
+
+    IPage<TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetail> queryPage(@Param("page") IPage<Object> page,
+                                                                                          @Param("param") TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailQuery queryInfo);
+
+    TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailStat queryPageStat(@Param("param") TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailQuery queryInfo);
+}
+

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PayParamBasicDto.java

@@ -8,6 +8,7 @@ import java.util.List;
 
 import com.ym.mec.common.entity.BaseEntity;
 
+
 public class PayParamBasicDto extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "是否使用余额", required = false)
     private Boolean isUseBalancePayment = false;

+ 67 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TempDirectorTrainingCamp.java

@@ -0,0 +1,67 @@
+package com.ym.mec.biz.dal.entity;
+
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@ApiModel(value = "temp_director_training_camp-乐队指导训练营活动")
+@Data
+public class TempDirectorTrainingCamp implements Serializable {
+
+    @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @TableField("name_")
+    @ApiModelProperty(value = "活动名称")
+    private String name;
+
+    @TableField("apply_start_date_")
+    @ApiModelProperty(value = "报名开始日期")
+    private Date applyStartDate;
+
+    @TableField("apply_end_date_")
+    @ApiModelProperty(value = "报名结束日期")
+    private Date applyEndDate;
+
+    @TableField("bird_price_end_date_")
+    @ApiModelProperty(value = "早鸟价截止日期")
+    private Date birdPriceEndDate;
+
+    @TableField("bird_price_")
+    @ApiModelProperty(value = "早鸟价")
+    private BigDecimal birdPrice;
+
+    @TableField("current_price_")
+    @ApiModelProperty(value = "优惠价")
+    private BigDecimal currentPrice;
+
+    @TableField("original_price_")
+    @ApiModelProperty(value = "原价")
+    private BigDecimal originalPrice;
+
+    @TableField("status_")
+    @ApiModelProperty(value = "未开始 NOT_START,报名中 APPLY,已结束 END ,不用,直接使用时间判断")
+    private String status;
+
+    @TableField("update_by_")
+    @ApiModelProperty(value = "修改人")
+    private Integer updateBy;
+
+    @TableField("create_time_")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @TableField("update_time_")
+    @ApiModelProperty(value = "修改时间")
+    private Date updateTime;
+}
+

+ 111 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TempDirectorTrainingCampDetail.java

@@ -0,0 +1,111 @@
+package com.ym.mec.biz.dal.entity;
+
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@ApiModel(value = "temp_director_training_camp_detail-乐队指导训练营活动")
+@Data
+public class TempDirectorTrainingCampDetail implements Serializable {
+
+    @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @ApiModelProperty(value = "用户编号")
+    @TableField("user_id_")
+    private Integer userId;
+
+    @ApiModelProperty(value = "训练营编号")
+    @TableField("temp_director_training_camp_id_")
+    private Integer tempDirectorTrainingCampId;
+
+    @TableField("username_")
+    @ApiModelProperty(value = "姓名")
+    private String username;
+
+    @TableField("mobile_")
+    @ApiModelProperty(value = "手机号")
+    private String mobile;
+
+    @TableField("card_no_")
+    @ApiModelProperty(value = "身份证号")
+    private String cardNo;
+
+    @ApiModelProperty(value = "省份")
+    @TableField("province_")
+    private String province;
+
+    @ApiModelProperty(value = "省份")
+    @TableField("province_code_")
+    private String provinceCode;
+
+    @ApiModelProperty(value = "城市")
+    @TableField("city_code_")
+    private String cityCode;
+
+    @ApiModelProperty(value = "城市")
+    @TableField("city_")
+    private String city;
+
+    @ApiModelProperty(value = "区县")
+    @TableField("region_code_")
+    private String regionCode;
+
+    @ApiModelProperty(value = "区县")
+    @TableField("region_")
+    private String region;
+
+    @TableField("payment_status_")
+    @ApiModelProperty(value = "已缴费 PAID,未缴费 NO,已退费 REFUND")
+    private String paymentStatus = "NO";
+
+    @TableField("payment_amount_")
+    @ApiModelProperty(value = "缴费金额")
+    private BigDecimal paymentAmount;
+
+    @TableField("bird_flag_")
+    @ApiModelProperty(value = "是否早鸟报名")
+    private Boolean birdFlag = false;
+
+    @TableField("payment_date_")
+    @ApiModelProperty(value = "缴费时间")
+    private Date paymentDate;
+
+    @TableField("job_")
+    @ApiModelProperty(value = "职业")
+    private String job;
+
+    @TableField("subject_name_")
+    @ApiModelProperty(value = "声部")
+    private String subjectName;
+
+    @TableField("study_")
+    @ApiModelProperty(value = "之前乐队指导学习基础")
+    private String study;
+
+    @TableField("study_target_")
+    @ApiModelProperty(value = "目标效果")
+    private String studyTarget;
+
+    @TableField("suggestion_")
+    @ApiModelProperty(value = "需求或建议")
+    private String suggestion;
+
+    @TableField("create_time_")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @TableField("update_time_")
+    @ApiModelProperty(value = "修改时间")
+    private Date updateTime;
+}
+

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderDetailTypeEnum.java

@@ -32,6 +32,7 @@ public enum OrderDetailTypeEnum implements BaseEnum<String, OrderDetailTypeEnum>
     CLOUD_TEACHER_PLUS("CLOUD_TEACHER_PLUS","云教练"),
     THEORY_COURSE("THEORY_COURSE", "小组课"),
     REPAIR("REPAIR", "乐器维修"),
+    DIRECTOR_TRAINING_CAMP("DIRECTOR_TRAINING_CAMP", "乐队指导训练营报名"),
     ORGAN_SHARE_PROFIT("ORGAN_SHARE_PROFIT", "分部分润");
 
     private String code;

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderTypeEnum.java

@@ -39,7 +39,8 @@ public enum OrderTypeEnum implements BaseEnum<String, OrderTypeEnum> {
     MEMBER("MEMBER", "会员购买"),
     LIVE_BUY("LIVE_BUY", "直播购物"),
     SCHOOL_GOODS_PURCHASE("SCHOOL_GOODS_PURCHASE","学校商品采购"),
-    MALL_BUY("MALL_BUY", "商城购物");
+    MALL_BUY("MALL_BUY", "商城购物"),
+    DIRECTOR_TRAINING_CAMP("DIRECTOR_TRAINING_CAMP", "乐队指导训练营报名");
 
 
     private String code;

+ 300 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/TempDirectorTrainingCampDetailWrapper.java

@@ -0,0 +1,300 @@
+package com.ym.mec.biz.dal.wrapper;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.ym.mec.biz.dal.dto.PayParamBasicDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@ApiModel(value = "TempDirectorTrainingCampDetailWrapper对象")
+public class TempDirectorTrainingCampDetailWrapper {
+
+
+    @Data
+    @ApiModel("PayDto")
+    public static class PayDto extends PayParamBasicDto {
+
+        @ApiModelProperty(value = "训练营详情编号",required = false)
+        private Integer tempDirectorTrainingCampDetailId;
+    }
+
+    @Data
+    @ApiModel("UserDetail")
+    public static class UserDetail {
+
+        @ApiModelProperty(value = "身份证号")
+        private String cardNo;
+
+        @ApiModelProperty(value = "手机号")
+        private String mobile;
+
+        @ApiModelProperty(value = "训练营编号")
+        private Integer tempDirectorTrainingCampId;
+    }
+
+    @Data
+    @ApiModel("UserPayDetail")
+    public static class UserPayDetail {
+
+        @ApiModelProperty(value = "身份证号")
+        private String username;
+
+        @ApiModelProperty(value = "手机号")
+        private String mobile;
+
+        @ApiModelProperty(value = "训练营编号")
+        private Integer tempDirectorTrainingCampId;
+    }
+
+    @Data
+    @ApiModel(" applyCamp-新增/修改")
+    public static class ApplyCamp {
+
+        @ApiModelProperty(value = "训练营编号")
+        @NotNull(message = "训练营编号不能为空")
+        private Integer tempDirectorTrainingCampId;
+
+        @ApiModelProperty(value = "姓名")
+        @NotEmpty(message = "请输入您的真实姓名")
+        @Pattern(regexp = "^[\\u4e00-\\u9fa5]{2,10}$", message = "姓名必须是2到10个中文字符")
+        private String username;
+
+        @ApiModelProperty(value = "手机号")
+        @NotEmpty(message = "手机号不能为空")
+        @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
+        private String mobile;
+
+        @ApiModelProperty(value = "身份证号")
+        @NotEmpty(message = "身份证号不能为空")
+        @Pattern(regexp = "^(\\d{15}|\\d{17}[\\dXx])$", message = "身份证号格式不正确")
+        private String cardNo;
+
+        @ApiModelProperty(value = "省份")
+        @NotEmpty(message = "请选择您所在的城市")
+        @Pattern(regexp = "^[\\u4e00-\\u9fa5]{2,20}$", message = "省份名称必须是2到20个中文字符")
+        private String province;
+
+        @ApiModelProperty(value = "省份")
+        private String provinceCode;
+
+        @ApiModelProperty(value = "城市")
+        private String cityCode;
+
+        @ApiModelProperty(value = "城市")
+        private String city;
+
+        @ApiModelProperty(value = "区县")
+        private String regionCode;
+
+        @ApiModelProperty(value = "区县")
+        private String region;
+
+        @ApiModelProperty(value = "职业")
+        @NotEmpty(message = "请选择目前从事的职业")
+        private String job;
+
+        @ApiModelProperty(value = "声部")
+        @NotEmpty(message = "请选择您的专业")
+        private String subjectName;
+
+        @ApiModelProperty(value = "之前乐队指导学习基础")
+        @NotEmpty(message = "请选择学习基础")
+        private String study;
+
+        @ApiModelProperty(value = "目标效果")
+        @NotEmpty(message = "请填写目标效果")
+        private String studyTarget;
+
+        @ApiModelProperty(value = "需求或建议")
+        @NotEmpty(message = "请填写需求或建议")
+        private String suggestion;
+
+        @ApiModelProperty(value = "验证码")
+        private String authCode;
+    }
+
+    @Data
+    public static class TempDirectorTrainingCampDetailQuery implements QueryInfo {
+        /**
+         * 默认当前页码
+         */
+        private Integer page = 1;
+        /**
+         * 默认页码大小
+         */
+        private Integer rows = 20;
+
+        @ApiModelProperty(value = "用户姓名/手机号")
+        private String search;
+
+        @ApiModelProperty(value = "训练营编号")
+        private Integer tempDirectorTrainingCampId;
+
+        @ApiModelProperty(value = "省份")
+        private String provinceCode;
+
+        @ApiModelProperty(value = "城市")
+        private String cityCode;
+
+
+        @ApiModelProperty(value = "区县")
+        private String regionCode;
+
+
+        @ApiModelProperty(value = "已缴费 PAID,未缴费 NO,已退费 REFUND")
+        private String paymentStatus;
+    }
+
+    @Data
+    public static class TempDirectorTrainingCampDetail {
+
+
+        @ApiModelProperty(value = "主键")
+        @ExcelIgnore
+        private Integer id;
+
+        @ApiModelProperty(value = "训练营编号")
+        @ExcelIgnore
+        private Integer tempDirectorTrainingCampId;
+
+        @ApiModelProperty(value = "姓名")
+        @ExcelProperty(value = "姓名",order = 1)
+        private String username;
+
+        @ApiModelProperty(value = "手机号")
+        @ExcelProperty(value = "联系电话",order = 2)
+        private String mobile;
+
+        @ApiModelProperty(value = "身份证号")
+        @ExcelProperty(value = "身份证号",order = 3)
+        private String cardNo;
+
+        @ApiModelProperty(value = "省份")
+        @ExcelIgnore
+        private String province;
+
+        @ApiModelProperty(value = "省份")
+        @ExcelIgnore
+        private String provinceCode;
+
+        @ApiModelProperty(value = "城市")
+        @ExcelIgnore
+        private String cityCode;
+
+        @ApiModelProperty(value = "城市")
+        @ExcelIgnore
+        private String city;
+
+        @ApiModelProperty(value = "区县")
+        @ExcelIgnore
+        private String regionCode;
+
+        @ApiModelProperty(value = "区县")
+        @ExcelIgnore
+        private String region;
+
+        @ExcelProperty(value = "所在城市",order = 4)
+        private String cityInfo;
+
+        @ApiModelProperty(value = "已缴费 PAID,未缴费 NO,已退费 REFUND")
+        @ExcelIgnore
+        private String paymentStatus = "NO";
+
+        @ExcelProperty(value = "缴费状态",order = 10)
+        private String paymentStatusName;
+
+        @ApiModelProperty(value = "缴费金额")
+        @ExcelProperty(value = "缴费金额",order = 11)
+        private String paymentAmount;
+
+        @ApiModelProperty(value = "是否早鸟报名")
+        @ExcelIgnore
+        private Boolean birdFlag = false;
+
+        @ApiModelProperty(value = "缴费时间")
+        @ExcelIgnore
+        private Date paymentDate;
+
+        @ApiModelProperty(value = "缴费时间")
+        @ExcelProperty(value = "缴费时间",order = 12)
+        private String paymentDateStr;
+
+        @ApiModelProperty(value = "职业")
+        @ExcelProperty(value = "目前从事职业",order = 5)
+        private String job;
+
+        @ApiModelProperty(value = "声部")
+        @ExcelProperty(value = "第一主专业",order = 6)
+        private String subjectName;
+
+        @ApiModelProperty(value = "之前乐队指导学习基础")
+        @ExcelProperty(value = "之前乐队指导学习基础",order = 7)
+        private String study;
+
+        @ApiModelProperty(value = "目标效果")
+        @ExcelProperty(value = "目标效果",order = 8)
+        private String studyTarget;
+
+        @ApiModelProperty(value = "需求或建议")
+        @ExcelProperty(value = "需求或建议",order = 9)
+        private String suggestion;
+
+        @ApiModelProperty(value = "创建时间")
+        @ExcelIgnore
+        private Date createTime;
+
+        @ApiModelProperty(value = "修改时间")
+        @ExcelIgnore
+        private Date updateTime;
+    }
+
+
+    @Data
+    public static class TempDirectorTrainingCampDetailStat {
+
+
+
+        @ApiModelProperty("报名人数")
+        private Integer applyCount;
+
+        @ApiModelProperty("缴费人数")
+        private Integer payCount;
+
+        @ApiModelProperty("早鸟人数")
+        private Integer birdCount;
+
+
+        @ApiModelProperty("收款金额")
+        private BigDecimal payAmount;
+
+    }
+
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class DownloadInfo {
+
+        @ApiModelProperty("文件名称")
+        private String fileName;
+
+        @ApiModelProperty("下载地址")
+        private String downloadPath;
+
+    }
+}

+ 136 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/TempDirectorTrainingCampWrapper.java

@@ -0,0 +1,136 @@
+package com.ym.mec.biz.dal.wrapper;
+
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@ApiModel(value = "TempDirectorTrainingCampWrapper对象")
+public class TempDirectorTrainingCampWrapper {
+
+
+    @Data
+    @ApiModel(" AddCamp-新增/修改")
+    public static class AddCamp {
+
+        @ApiModelProperty(value = "主键")
+        private Integer id;
+
+        @ApiModelProperty(value = "特训营名称")
+        @NotNull(message = "特训营名称不能为空")
+        private String name;
+
+        @ApiModelProperty(value = "报名开始时间")
+        @NotNull(message = "报名开始时间不能为空")
+        private Date applyStartDate;
+
+        @ApiModelProperty(value = "报名截止时间")
+        @NotNull(message = "报名截止时间不能为空")
+        private Date applyEndDate;
+
+        @ApiModelProperty(value = "是否配置早鸟价")
+        @NotNull(message = "是否配置早鸟价不能为空")
+        private Boolean hasBirdPrice;
+
+        @ApiModelProperty(value = "早鸟价截止日期")
+        private Date birdPriceEndDate;
+
+        @ApiModelProperty(value = "早鸟价")
+        private BigDecimal birdPrice;
+
+        @ApiModelProperty(value = "优惠价")
+        @NotNull(message = "优惠价不能为空")
+        private BigDecimal currentPrice;
+
+        @ApiModelProperty(value = "原价")
+        @NotNull(message = "原价不能为空")
+        private BigDecimal originalPrice;
+
+        @ApiModelProperty(value = "修改人")
+        private Integer updateBy;
+    }
+
+
+    @Data
+    public static class TempDirectorTrainingCampQueryInfo implements QueryInfo {
+
+
+        /**
+         * 默认当前页码
+         */
+        private Integer page = 1;
+        /**
+         * 默认页码大小
+         */
+        private Integer rows = 20;
+
+        @ApiModelProperty(value = "特训营名称")
+        private String search;
+
+
+        @ApiModelProperty(value = "未开始 NOT_START,报名中 APPLY,已结束 END ")
+        private String status;
+
+    }
+
+    @Data
+    public static class TempDirectorTrainingCamp{
+
+        @ApiModelProperty(value = "主键")
+        private Integer id;
+
+        @ApiModelProperty(value = "活动名称")
+        private String name;
+
+        @ApiModelProperty(value = "报名开始日期")
+        private Date applyStartDate;
+
+        @ApiModelProperty(value = "报名结束日期")
+        private Date applyEndDate;
+
+
+        @ApiModelProperty(value = "是否配置早鸟价")
+        private Boolean hasBirdPrice;
+
+        @ApiModelProperty(value = "早鸟价截止日期")
+        private Date birdPriceEndDate;
+
+        @ApiModelProperty(value = "早鸟价")
+        private BigDecimal birdPrice;
+
+        @ApiModelProperty(value = "优惠价")
+        private BigDecimal currentPrice;
+
+        @ApiModelProperty(value = "原价")
+        private BigDecimal originalPrice;
+
+        @ApiModelProperty(value = "未开始 NOT_START,报名中 APPLY,已结束 END ")
+        private String status;
+
+        @ApiModelProperty("报名人数")
+        private Integer applyCount;
+
+        @ApiModelProperty("缴费人数")
+        private Integer payCount;
+
+        @ApiModelProperty("收款金额")
+        private BigDecimal payAmount;
+
+        @ApiModelProperty(value = "修改人")
+        private Integer updateBy;
+
+        @ApiModelProperty(value = "修改人名称")
+        private String updateByName;
+
+        @ApiModelProperty(value = "创建时间")
+        private Date createTime;
+
+        @ApiModelProperty(value = "修改时间")
+        private Date updateTime;
+
+    }
+}

+ 27 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TempDirectorTrainingCampDetailService.java

@@ -0,0 +1,27 @@
+package com.ym.mec.biz.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.microsvc.toolkit.common.response.paging.PageInfo;
+import com.ym.mec.biz.dal.dao.TempDirectorTrainingCampDetailDao;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.TempDirectorTrainingCampDetail;
+import com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampDetailWrapper;
+import com.ym.mec.common.entity.HttpResponseResult;
+
+public interface TempDirectorTrainingCampDetailService extends IService<TempDirectorTrainingCampDetail> {
+
+    TempDirectorTrainingCampDetailDao getDao();
+
+    Integer applyCamp(TempDirectorTrainingCampDetailWrapper.ApplyCamp applyCamp);
+
+    HttpResponseResult pay(TempDirectorTrainingCampDetailWrapper.PayDto payDto) throws Exception;
+
+    Boolean orderCallback(StudentPaymentOrder order);
+
+    IPage<TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetail> queryPage(IPage<Object> page, TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailQuery queryInfo);
+
+    TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailStat queryPageStat(TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailQuery queryInfo);
+}
+
+

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TempDirectorTrainingCampService.java

@@ -0,0 +1,20 @@
+package com.ym.mec.biz.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ym.mec.biz.dal.dao.TempDirectorTrainingCampDao;
+import com.ym.mec.biz.dal.entity.TempDirectorTrainingCamp;
+import com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampWrapper;
+
+public interface TempDirectorTrainingCampService extends IService<TempDirectorTrainingCamp> {
+
+    TempDirectorTrainingCampDao getDao();
+
+    void add(TempDirectorTrainingCampWrapper.AddCamp dto);
+
+    void modify(TempDirectorTrainingCampWrapper.AddCamp dto);
+
+    IPage<TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp> queryPage(IPage<TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp> page, TempDirectorTrainingCampWrapper.TempDirectorTrainingCampQueryInfo queryInfo);
+}
+
+

+ 41 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java

@@ -188,6 +188,47 @@ public class PayServiceImpl implements PayService {
 			}
 			
 		}
+		
+		//如果是乐队指导培训的订单,由武汉学校收款
+		if(studentPaymentOrder != null && studentPaymentOrder.getType() == OrderTypeEnum.DIRECTOR_TRAINING_CAMP) {
+			
+			Integer routeOrganId = 50;
+			HfMember receiverMember = hfMemberDao.getByOrganId(routeOrganId, paymentChannelStr);
+			
+			if(receiverMember == null) {
+        		throw new BizException("分部[{}]收款账户查询失败", routeOrganId);
+			}
+			
+			String merNo = receiverMember.getMemberId();
+        	if(StringUtils.isBlank(merNo)){
+        		throw new BizException("平台收款账户查询失败");
+        	}
+			
+			StudentPaymentRouteOrder studentPaymentRouteOrder = new StudentPaymentRouteOrder();
+            studentPaymentRouteOrder.setOrderNo(orderNo);
+            studentPaymentRouteOrder.setRouteOrganId(routeOrganId);
+            studentPaymentRouteOrder.setFeeFlag("Y");
+            studentPaymentRouteOrder.setRouteAmount(amount);
+            studentPaymentRouteOrder.setRouteBalanceAmount(balanceAmount);
+            studentPaymentRouteOrder.setMerNo(merNo);
+            studentPaymentRouteOrder.setSaleAmount(BigDecimal.ZERO);
+            studentPaymentRouteOrder.setServiceAmount(amount);
+            studentPaymentRouteOrder.setTenantId(tenantId);
+            studentPaymentRouteOrder.setCreateTime(date);
+            studentPaymentRouteOrder.setUpdateTime(date);
+            studentPaymentRouteOrderDao.insert(studentPaymentRouteOrder);
+            
+            Map<String, Object> unionPay = new HashMap<>();
+            Map<String, Object> payMap = null;
+
+        	payMap = Payment.getPayMap(hfMerchantConfig, amount, orderNo, returnUrl, orderSubject, orderBody);
+
+            unionPay.put("orderNo", orderNo);
+            unionPay.put("type", paymentChannel.getCode());
+            unionPay.put("payMap", payMap);
+            unionPay.put("routingMerNos", merNo);
+            return unionPay;
+		}
 
 		BigDecimal subBalance = BigDecimal.ZERO;
 		

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -145,6 +145,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     @Resource
     private StudentPaymentOrderService studentPaymentOrderService;
     @Resource
+    private TempDirectorTrainingCampDetailService tempDirectorTrainingCampDetailService;
+    @Resource
     private MusicGroupPaymentCalenderAddressService musicGroupPaymentCalenderAddressService;
 
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
@@ -644,6 +646,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             } else if (order.getType().equals(OrderTypeEnum.MALL_BUY)) {
                 // 商城购买订单回调
                 studentPaymentOrderService.mallBuyOrderCallback(order);
+            }else if (order.getType().equals(OrderTypeEnum.DIRECTOR_TRAINING_CAMP)) {
+                tempDirectorTrainingCampDetailService.orderCallback(order);
             }
         }
     }

+ 320 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempDirectorTrainingCampDetailServiceImpl.java

@@ -0,0 +1,320 @@
+package com.ym.mec.biz.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.auth.api.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDetailDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dao.TempDirectorTrainingCampDetailDao;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampDetailWrapper;
+import com.ym.mec.biz.service.*;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.service.IdGeneratorService;
+import com.ym.mec.common.tenant.TenantContextHolder;
+import com.ym.mec.util.date.DateUtil;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.redisson.api.RBucket;
+import org.redisson.api.RedissonClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpStatus;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.text.MessageFormat;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+
+@Service("tempDirectorTrainingCampDetailService")
+public class TempDirectorTrainingCampDetailServiceImpl extends ServiceImpl<TempDirectorTrainingCampDetailDao, TempDirectorTrainingCampDetail> implements TempDirectorTrainingCampDetailService {
+
+    private final static Logger log = LoggerFactory.getLogger(TempDirectorTrainingCampDetailServiceImpl.class);
+
+    @Resource
+    private SmsCodeService smsCodeService;
+    @Resource
+    private TempDirectorTrainingCampService tempDirectorTrainingCampService;
+    @Resource
+    private RedissonClient redissonClient;
+    @Resource
+    private StudentPaymentOrderService studentPaymentOrderService;
+    @Resource
+    private StudentPaymentOrderDetailDao studentPaymentOrderDetailDao;
+    @Resource
+    private IdGeneratorService idGeneratorService;
+    @Resource
+    private TeacherDao teacherDao;
+    @Resource
+    private SysUserFeignService sysUserFeignService;
+    @Resource
+    private SysConfigDao sysConfigDao;
+    @Resource
+    private PayService payService;
+    @Resource
+    private SysUserCashAccountService sysUserCashAccountService;
+
+    @Override
+    public TempDirectorTrainingCampDetailDao getDao() {
+        return this.baseMapper;
+    }
+
+    private void checkTraining(Date now,TempDirectorTrainingCamp trainingCamp){
+        if(Objects.isNull(trainingCamp)){
+            throw new BizException("训练营信息不存在");
+        }
+        //校验训练营时间
+        if(now.after(trainingCamp.getApplyEndDate())){
+            throw new BizException("报名已截止");
+        }
+        if(now.before(trainingCamp.getApplyStartDate())){
+            String dateToString = DateUtil.dateToString(trainingCamp.getApplyStartDate(), DateUtil.DATE_FORMAT_MIN);
+            throw new BizException(dateToString + "开启报名,感谢您的关注");
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Integer applyCamp(TempDirectorTrainingCampDetailWrapper.ApplyCamp applyCamp) {
+        Date now = new Date();
+        TempDirectorTrainingCamp trainingCamp = tempDirectorTrainingCampService.getById(applyCamp.getTempDirectorTrainingCampId());
+        this.checkTraining(now,trainingCamp);
+        if(!smsCodeService.verifyValidCode(applyCamp.getMobile(), applyCamp.getAuthCode())){
+            throw new BizException("验证码校验失败");
+        }
+        String lockKey = applyCamp.getTempDirectorTrainingCampId() + applyCamp.getMobile() + applyCamp.getCardNo();
+        String submitLockKey = MessageFormat.format("apply_director_camp_lock:{0}", lockKey);
+        // 数据重复提交校验
+        RBucket<Object> bucket = redissonClient.getBucket(submitLockKey);
+        if (!bucket.trySet(lockKey, 5L, TimeUnit.SECONDS)) {
+            throw new BizException("请勿重复提交");
+        }
+        //根据身份证号获取信息
+        TempDirectorTrainingCampDetail byCardNo = this.lambdaQuery().eq(TempDirectorTrainingCampDetail::getCardNo, applyCamp.getCardNo())
+                .eq(TempDirectorTrainingCampDetail::getTempDirectorTrainingCampId, applyCamp.getTempDirectorTrainingCampId())
+                .last("LIMIT 1").one();
+        if(Objects.nonNull(byCardNo) && !StringUtils.equals(byCardNo.getMobile(),applyCamp.getMobile())){
+            redissonClient.getBucket(submitLockKey).delete();
+            throw new BizException("该身份证已报名");
+        }
+        //根据手机号获取信息
+        TempDirectorTrainingCampDetail byMobile = this.lambdaQuery().eq(TempDirectorTrainingCampDetail::getMobile, applyCamp.getMobile())
+                .eq(TempDirectorTrainingCampDetail::getTempDirectorTrainingCampId, applyCamp.getTempDirectorTrainingCampId())
+                .last("LIMIT 1").one();
+        if(Objects.nonNull(byMobile) && !StringUtils.equals(byMobile.getCardNo(),applyCamp.getCardNo())){
+            // 删除缓存锁
+            redissonClient.getBucket(submitLockKey).delete();
+            throw new BizException("该手机号已报名");
+        }
+        TempDirectorTrainingCampDetail entity = JSONObject.parseObject(JSONObject.toJSONString(applyCamp),TempDirectorTrainingCampDetail.class);
+        if(Objects.nonNull(byCardNo)){
+            entity.setId(byCardNo.getId());
+        }else if (Objects.nonNull(byMobile)){
+            entity.setId(byMobile.getId());
+        }
+        //获取老师信息
+        SysUser sysUser = sysUserFeignService.queryUserByMobile(entity.getMobile());
+        if(Objects.isNull(sysUser) || sysUser.getId() == null){
+            //注册用户信息
+            sysUser = new SysUser();
+            sysUser.setUserType("TEACHER");
+            sysUser.setUsername(applyCamp.getUsername());
+            sysUser.setPhone(applyCamp.getMobile());
+            sysUser.setOrganId(43);
+            sysUser.setTenantId(1);
+            sysUser.setIdCardNo(applyCamp.getCardNo());
+            int phoneStrLen = sysUser.getPhone().length();
+            sysUser.setPassword(new BCryptPasswordEncoder().encode("gym" + sysUser.getPhone().substring(phoneStrLen - 4, phoneStrLen)));
+            teacherDao.addSysUser(sysUser);
+            //添加用户现金账户
+            sysUserCashAccountService.insert(new SysUserCashAccount(sysUser.getId(), "CNY"));
+            //注册老师信息
+            Teacher teacher = new Teacher();
+            teacher.setId(sysUser.getId());
+            teacher.setOrganId(43);
+            teacher.setTenantId(1);
+            teacher.setDelFlag(YesOrNoEnum.NO);
+            teacherDao.insert(teacher);
+        }else {
+            if (sysUser.getUserType().contains("SCHOOL")) {
+                throw new BizException("用户已存在学校账户");
+            }
+            Teacher teacher = teacherDao.get(sysUser.getId());
+            if(Objects.isNull(teacher)){
+                //注册老师信息
+                teacher = new Teacher();
+                teacher.setId(sysUser.getId());
+                teacher.setOrganId(43);
+                teacher.setTenantId(1);
+                teacher.setDelFlag(YesOrNoEnum.NO);
+                teacherDao.insert(teacher);
+            }
+            sysUser.setUserType(sysUser.getUserType() + ",TEACHER");
+        }
+        entity.setUserId(sysUser.getId());
+        this.saveOrUpdate(entity);
+        // 删除缓存锁
+        redissonClient.getBucket(submitLockKey).delete();
+        return entity.getId();
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResponseResult pay(TempDirectorTrainingCampDetailWrapper.PayDto payDto) throws Exception {
+        Integer tempDirectorTrainingCampDetailId = payDto.getTempDirectorTrainingCampDetailId();
+        TempDirectorTrainingCampDetail campDetail = this.lambdaQuery().eq(TempDirectorTrainingCampDetail::getId, tempDirectorTrainingCampDetailId)
+                .last("LIMIT 1 FOR UPDATE").one();
+        if(Objects.isNull(campDetail)){
+            throw new BizException("报名信息不存在");
+        }
+        if(StringUtils.equals(campDetail.getPaymentStatus(),"PAID")){
+            throw new BizException("您已缴费请勿重复支付");
+        }
+        Integer userId = campDetail.getUserId();
+        Teacher teacher = teacherDao.get(userId);
+        TenantContextHolder.setTenantId(teacher.getTenantId());
+        Date now = new Date();
+        TempDirectorTrainingCamp trainingCamp = tempDirectorTrainingCampService.getById(campDetail.getTempDirectorTrainingCampId());
+        this.checkTraining(now,trainingCamp);
+        List<StudentPaymentOrder> studentPaymentOrders = studentPaymentOrderService.queryByCondition(GroupType.SPORADIC,
+                tempDirectorTrainingCampDetailId.toString(),
+                campDetail.getUserId(),
+                DealStatusEnum.ING,
+                OrderTypeEnum.DIRECTOR_TRAINING_CAMP);
+        if(CollectionUtils.isNotEmpty(studentPaymentOrders)){
+            HttpResponseResult result = studentPaymentOrderService.checkRepeatPay(studentPaymentOrders.get(0), payDto.getRepeatPay());
+            if (result.getCode() != 200) {
+                return result;
+            }
+        }
+        Date nowDate = new Date();
+        String orderNo = idGeneratorService.generatorId("payment") + "";
+        //获取收费项价格
+        BigDecimal money;
+        if(trainingCamp.getBirdPrice() != null && trainingCamp.getBirdPriceEndDate() != null && trainingCamp.getBirdPriceEndDate().after(now)){
+            money = trainingCamp.getBirdPrice();
+        }else {
+            money = trainingCamp.getCurrentPrice();
+        }
+        if(money.compareTo(payDto.getAmount()) != 0){
+            throw new BizException("活动信息变更,请重新下单");
+        }
+        String channelType = "";
+        StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
+        studentPaymentOrder.setUserId(userId);
+        studentPaymentOrder.setGroupType(GroupType.SPORADIC);
+        studentPaymentOrder.setOrderNo(orderNo);
+        studentPaymentOrder.setType(OrderTypeEnum.DIRECTOR_TRAINING_CAMP);
+        studentPaymentOrder.setExpectAmount(money);
+        studentPaymentOrder.setActualAmount(money);
+        studentPaymentOrder.setBalancePaymentAmount(BigDecimal.ZERO);
+        studentPaymentOrder.setStatus(DealStatusEnum.ING);
+        studentPaymentOrder.setMusicGroupId(payDto.getTempDirectorTrainingCampDetailId().toString());
+        studentPaymentOrder.setOrganId(teacher.getOrganId());
+        studentPaymentOrder.setRoutingOrganId(teacher.getOrganId());
+        studentPaymentOrder.setVersion(0);
+        studentPaymentOrderService.insert(studentPaymentOrder);
+
+        StudentPaymentOrderDetail studentPaymentOrderDetail = new StudentPaymentOrderDetail();
+        studentPaymentOrderDetail.setType(OrderDetailTypeEnum.DIRECTOR_TRAINING_CAMP);
+        studentPaymentOrderDetail.setPrice(studentPaymentOrder.getExpectAmount());
+        studentPaymentOrderDetail.setRemitFee(BigDecimal.ZERO);
+        studentPaymentOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
+        studentPaymentOrderDetail.setCreateTime(nowDate);
+        studentPaymentOrderDetail.setUpdateTime(nowDate);
+        studentPaymentOrderDetailDao.insert(studentPaymentOrderDetail);
+
+        if (money.compareTo(BigDecimal.ZERO) == 0) {
+            Map<String, String> notifyMap = new HashMap<>();
+            notifyMap.put("tradeState", "1");
+            notifyMap.put("merOrderNo", studentPaymentOrder.getOrderNo());
+            notifyMap.put("channelType", channelType);
+            notifyMap.put("orderNo", "");
+            studentPaymentOrderService.updateOrder(notifyMap);
+            return BaseController.failed(HttpStatus.CREATED, notifyMap,"恭喜您,支付成功!");
+        }
+
+        String baseApiUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
+
+        Map payMap = payService.getPayMap(
+                money,
+                BigDecimal.ZERO,
+                orderNo,
+                baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
+                "乐队指导训练营报名",
+                "乐队指导训练营报名",
+                teacher.getOrganId(),
+                "directorTrainingCamp"
+        );
+
+        studentPaymentOrder.setOrganId(teacher.getOrganId());
+        studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
+        studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
+        studentPaymentOrder.setUpdateTime(nowDate);
+        studentPaymentOrderService.update(studentPaymentOrder);
+        TenantContextHolder.clearTenantId();
+        return BaseController.succeed(payMap);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean orderCallback(StudentPaymentOrder studentPaymentOrder) {
+        int updateCount = studentPaymentOrderService.update(studentPaymentOrder);
+        if (updateCount <= 0) {
+            throw new BizException("订单更新失败");
+        }
+        if(DealStatusEnum.SUCCESS.equals(studentPaymentOrder.getStatus())){
+            List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailDao.getOrderDetail(studentPaymentOrder.getId());
+            BigDecimal additionCoursePrice = BigDecimal.ZERO;
+            if(!org.springframework.util.CollectionUtils.isEmpty(orderDetails)){
+                additionCoursePrice = orderDetails.stream().map(StudentPaymentOrderDetail::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+            }
+            if(additionCoursePrice.compareTo(BigDecimal.ZERO)>0){
+                sysUserCashAccountService.appendCourseBalance(studentPaymentOrder.getUserId(), additionCoursePrice, PlatformCashAccountDetailTypeEnum.RECHARGE, "2020考级报名");
+            }
+        }
+
+        if (studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED) {
+            if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
+                sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "支付失败-退回");
+            }
+        }
+        TempDirectorTrainingCampDetail campDetail = this.getById(studentPaymentOrder.getMusicGroupId());
+        campDetail.setPaymentAmount(studentPaymentOrder.getActualAmount());
+        campDetail.setPaymentDate(studentPaymentOrder.getPayTime());
+        switch (studentPaymentOrder.getStatus()){
+            case SUCCESS:
+                campDetail.setPaymentStatus("PAID");
+                break;
+            case FAILED:
+            case CLOSE:
+                campDetail.setPaymentStatus("NO");
+                break;
+        }
+        return true;
+    }
+
+    @Override
+    public IPage<TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetail> queryPage(IPage<Object> page, TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailQuery queryInfo) {
+        return baseMapper.queryPage(page,queryInfo);
+    }
+
+    @Override
+    public TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailStat queryPageStat(TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailQuery queryInfo) {
+        return baseMapper.queryPageStat(queryInfo);
+    }
+
+
+}
+

+ 144 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempDirectorTrainingCampServiceImpl.java

@@ -0,0 +1,144 @@
+package com.ym.mec.biz.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.TempDirectorTrainingCampDao;
+import com.ym.mec.biz.dal.dao.TempDirectorTrainingCampDetailDao;
+import com.ym.mec.biz.dal.entity.TempDirectorTrainingCamp;
+import com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampWrapper;
+import com.ym.mec.biz.service.EmployeeService;
+import com.ym.mec.biz.service.SysUserService;
+import com.ym.mec.biz.service.TempDirectorTrainingCampDetailService;
+import com.ym.mec.biz.service.TempDirectorTrainingCampService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.math.RoundingMode;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Service("tempDirectorTrainingCampService")
+public class TempDirectorTrainingCampServiceImpl extends ServiceImpl<TempDirectorTrainingCampDao, TempDirectorTrainingCamp> implements TempDirectorTrainingCampService {
+
+    @Autowired
+    private SysUserService sysUserService;
+
+    @Autowired
+    private TempDirectorTrainingCampDetailDao tempDirectorTrainingCampDetailDao;
+
+    private final static Logger log = LoggerFactory.getLogger(TempDirectorTrainingCampServiceImpl.class);
+
+    @Override
+    public TempDirectorTrainingCampDao getDao() {
+        return this.baseMapper;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void add(TempDirectorTrainingCampWrapper.AddCamp dto) {
+        log.info("新增训练营:{}", dto);
+        if (!dto.getHasBirdPrice()) {
+            dto.setBirdPrice(null);
+            dto.setBirdPriceEndDate(null);
+        }
+        TempDirectorTrainingCamp tempDirectorTrainingCamp = JSON.parseObject(JSON.toJSONString(dto), TempDirectorTrainingCamp.class);
+
+        this.save(tempDirectorTrainingCamp);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void modify(TempDirectorTrainingCampWrapper.AddCamp dto) {
+        log.info("修改训练营:{}", dto);
+        TempDirectorTrainingCamp tempDirectorTrainingCamp = JSON.parseObject(JSON.toJSONString(dto), TempDirectorTrainingCamp.class);
+
+        this.updateById(tempDirectorTrainingCamp);
+
+        lambdaUpdate()
+            .set(TempDirectorTrainingCamp::getBirdPrice, dto.getHasBirdPrice()?dto.getBirdPrice():null)
+            .set(TempDirectorTrainingCamp::getBirdPriceEndDate, dto.getHasBirdPrice()?dto.getBirdPriceEndDate():null)
+            .eq(TempDirectorTrainingCamp::getId, dto.getId())
+            .update();
+    }
+
+    @Override
+    public IPage<TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp> queryPage(IPage<TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp> page, TempDirectorTrainingCampWrapper.TempDirectorTrainingCampQueryInfo queryInfo) {
+        IPage<TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp> tempDirectorTrainingCampIPage = baseMapper.queryPage(page, queryInfo);
+        List<TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp> records = tempDirectorTrainingCampIPage.getRecords();
+        if (CollectionUtils.isEmpty(records) ) {
+            return tempDirectorTrainingCampIPage;
+        }
+
+        // id 集合
+        List<Integer> ids = records.stream().map(o->o.getId()).collect(Collectors.toList());;
+
+        // 是否设置早鸟价
+
+        // 状态
+
+        // 更新人
+        List<Integer> updateIds = records.stream().map(o -> o.getUpdateBy()).filter(o -> o != null).distinct().collect(Collectors.toList());
+        Map<Long, SysUser> userMap = sysUserService.getMapByIds(updateIds);
+        records.forEach(o -> {
+            if (o.getUpdateBy() != null) {
+                SysUser sysUser = userMap.get(o.getUpdateBy().longValue());
+                if (sysUser != null) {
+                    o.setUpdateByName(sysUser.getRealName());
+                }
+            }
+            if (o.getBirdPrice() !=null && o.getBirdPriceEndDate() != null) {
+                o.setHasBirdPrice(true);
+            } else {
+                o.setHasBirdPrice(false);
+                o.setBirdPrice(null);
+            }
+            Date date = new Date();
+            if (o.getApplyStartDate().after(date)) {
+                o.setStatus("NOT_START");
+            } else if (o.getApplyEndDate().before(date)) {
+                o.setStatus("END");
+            } else {
+                o.setStatus("APPLY");
+            }
+
+            // 价格设置两位小数
+            if (o.getBirdPrice() !=null) {
+                o.setBirdPrice(o.getBirdPrice().setScale(2, RoundingMode.HALF_UP));
+            }
+            if (o.getCurrentPrice() !=null) {
+                o.setCurrentPrice(o.getCurrentPrice().setScale(2, RoundingMode.HALF_UP));
+            }
+            if (o.getOriginalPrice() !=null) {
+                o.setOriginalPrice(o.getOriginalPrice().setScale(2, RoundingMode.HALF_UP));
+            }
+            if (o.getPayAmount() !=null) {
+                o.setPayAmount(o.getPayAmount().setScale(2, RoundingMode.HALF_UP));
+            }
+        });
+
+        // 报名人数,缴费人数 搜款金额
+        List<TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp> stat = tempDirectorTrainingCampDetailDao.getStat(ids);
+        Map<Integer, TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp> statMap = stat.stream().collect(Collectors.toMap(TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp::getId, o -> o));
+
+        records.forEach(o -> {
+            TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp tempDirectorTrainingCamp = statMap.get(o.getId());
+            if (tempDirectorTrainingCamp != null) {
+                o.setApplyCount(tempDirectorTrainingCamp.getApplyCount());
+                o.setPayCount(tempDirectorTrainingCamp.getPayCount());
+                o.setPayAmount(tempDirectorTrainingCamp.getPayAmount().setScale(2, RoundingMode.HALF_UP));
+            }
+        });
+        return tempDirectorTrainingCampIPage;
+    }
+
+
+}
+

+ 64 - 0
mec-biz/src/main/resources/config/mybatis/TempDirectorTrainingCampDetailMapper.xml

@@ -0,0 +1,64 @@
+<?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.ym.mec.biz.dal.dao.TempDirectorTrainingCampDetailDao">
+
+    <select id="getStat"
+            resultType="com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampWrapper$TempDirectorTrainingCamp">
+
+        select
+        t.temp_director_training_camp_id_ as id,
+        count(t.id_) as applyCount,
+        sum(if(t.payment_status_ = 'PAID',1,0)) as payCount,
+        sum(if(t.payment_status_ = 'PAID',t.payment_amount_,0)) as payAmount
+        from temp_director_training_camp_detail t
+        where t.temp_director_training_camp_id_ in
+        <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+        group by t.temp_director_training_camp_id_
+    </select>
+
+    <sql id="SelectSql">
+        <if test="param.tempDirectorTrainingCampId != null">
+            and t.temp_director_training_camp_id_ = #{param.tempDirectorTrainingCampId}
+        </if>
+        <if test="param.search != null and param.search != ''">
+                and (t.username_ like concat('%', #{param.search}, '%') or t.mobile_ like concat('%', #{param.search}, '%'))
+            </if>
+            <if test="param.provinceCode != null and param.provinceCode != ''">
+                and t.province_code_ = #{param.provinceCode}
+            </if>
+            <if test="param.cityCode != null and param.cityCode != ''">
+                and t.city_code_ = #{param.cityCode}
+            </if>
+            <if test="param.regionCode != null and param.regionCode != ''">
+                and t.region_code_ = #{param.regionCode}
+            </if>
+            <if test="param.paymentStatus != null and param.paymentStatus != ''">
+                and t.payment_status_ = #{param.paymentStatus}
+            </if>
+    </sql>
+    <select id="queryPage"
+            resultType="com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampDetailWrapper$TempDirectorTrainingCampDetail">
+
+        select *
+        from temp_director_training_camp_detail t
+        <where>
+            <include refid="SelectSql"/>
+        </where>
+        order by t.id_ desc
+    </select>
+
+    <select id="queryPageStat"
+            resultType="com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampDetailWrapper$TempDirectorTrainingCampDetailStat">
+        select
+        count(t.id_) as applyCount,
+        sum(if(t.payment_status_ = 'PAID',1,0)) as payCount,
+        sum(if(t.bird_flag_ =1 and t.payment_status_ = 'PAID',1,0)) as birdCount,
+        sum(if(t.payment_status_ = 'PAID',t.payment_amount_,0)) as payAmount
+        from temp_director_training_camp_detail t
+        <where>
+            <include refid="SelectSql"/>
+        </where>
+    </select>
+</mapper>

+ 39 - 0
mec-biz/src/main/resources/config/mybatis/TempDirectorTrainingCampMapper.xml

@@ -0,0 +1,39 @@
+<?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.ym.mec.biz.dal.dao.TempDirectorTrainingCampDao">
+
+    <select id="queryPage"
+            resultType="com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampWrapper$TempDirectorTrainingCamp">
+        select id_,
+               name_,
+               apply_start_date_,
+               apply_end_date_,
+               bird_price_end_date_,
+               bird_price_,
+               current_price_,
+               original_price_,
+               update_by_,
+               create_time_,
+               update_time_
+        from temp_director_training_camp t
+        <where>
+            <if test="param.search != null and param.search != ''">
+                and (t.name_ like concat('%', #{param.search}, '%') )
+            </if>
+            <if test="param.status != null and param.status != ''">
+                <choose>
+                    <when test="param.status == 'NOT_START'">
+                        and now() &lt; t.apply_start_date_
+                    </when>
+                    <when test="param.status == 'APPLY'">
+                        and now() &gt;= t.apply_start_date_ and now() &lt;= t.apply_end_date_
+                    </when>
+                    <when test="param.status == 'END'">
+                        and now() &gt; t.apply_end_date_
+                    </when>
+                </choose>
+            </if>
+        </where>
+        order by t.id_ desc
+    </select>
+</mapper>