瀏覽代碼

Merge branch 'reg_progress_20210318'

# Conflicts:
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
周箭河 4 年之前
父節點
當前提交
3357f90ae5

+ 18 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -1788,6 +1788,7 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
 
     /**
      * 获取还有剩余课程的学员
+     *
      * @param userIds
      * @param groupType
      * @return
@@ -1795,5 +1796,22 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
     List<Integer> findHasCourseStudent(@Param("userIds") List<Integer> userIds, @Param("groupType") String groupType);
 
     List<CourseSchedule> queryByCourseScheduleIds(Map<String, Object> params);
+
     int countByCourseScheduleIds(Map<String, Object> params);
+
+    /**
+     * 获取乐团已开始的课程数
+     *
+     * @param musicGroupId
+     * @return
+     */
+    Integer getMusicGroupHasStartCourseNum(@Param("musicGroupId") String musicGroupId);
+
+    /**
+     * 获取多乐团已开始的课程数
+     *
+     * @param musicGroupId
+     * @return
+     */
+    List<CourseSchedule> getMusicGroupsHasStartCourseNum(@Param("ids") List<String> ids);
 }

+ 24 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentCalenderDao.java

@@ -309,8 +309,32 @@ public interface MusicGroupPaymentCalenderDao extends BaseDAO<Long, MusicGroupPa
 
     /**
      * 获取
+     *
      * @param calenderIds
      * @return
      */
     List<String> queryMusicGroupIds(@Param("calenderIds") List<Long> calenderIds);
+
+    /**
+     * 获取乐团缴费项的批次数
+     *
+     * @param musicGroupId
+     * @return
+     */
+    List<Integer> getMusicGroupCalenderBatchNoTimes(@Param("musicGroupId") String musicGroupId);
+
+    /**
+     * 获取多乐团的报名缴费项
+     *
+     * @return
+     */
+    List<MusicGroupPaymentCalender> getMusicGroupRegCalenderByIds(@Param("ids") List<String> ids);
+
+
+    /**
+     * 获取多乐团缴费项的批次数
+     *
+     * @return
+     */
+    List<MusicGroupPaymentCalender> getMusicGroupCalenderBatchNoByIds(@Param("ids") List<String> ids);
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroup.java

@@ -174,6 +174,9 @@ public class MusicGroup {
 
 	private Boolean hasVerifyMusicalList = false;
 
+	@ApiModelProperty(value = "进行中,缴费按钮控制",required = true)
+	private Boolean isRemedy = false;
+
 	public String getRepairUserName() {
 		return repairUserName;
 	}
@@ -580,4 +583,12 @@ public class MusicGroup {
 	public void setCourseViewType(CourseViewTypeEnum courseViewType) {
 		this.courseViewType = courseViewType;
 	}
+
+	public Boolean getIsRemedy() {
+		return isRemedy;
+	}
+
+	public void setIsRemedy(Boolean remedy) {
+		isRemedy = remedy;
+	}
 }

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentRegistrationService.java

@@ -355,4 +355,17 @@ public interface StudentRegistrationService extends BaseService<Long, StudentReg
      */
     List<StudentRegistration> getMusicGroupStuReBack(String musicGroupId);
 
+
+    /**
+     * 检查乐团是否能报名或缴费
+     * @return
+     */
+    String checkRegOrPayStatus(String musicGroupId);
+
+    /**
+     * 检查多乐团是否能报名或缴费
+     * @return
+     */
+    Map<String,Boolean> checkMusicGroupsRegOrPayStatus(List<String> ids);
+
 }

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -2387,6 +2387,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         List<MusicGroupPurchaseList> musicGroupPurchaseListCount = musicGroupPurchaseListDao.getCount(musicGroupIds);
         Map<String, Integer> purchaseListMap = musicGroupPurchaseListCount.stream().collect(Collectors.toMap(MusicGroupPurchaseList::getMusicGroupId, MusicGroupPurchaseList::getPurchaseNum));
 
+        Map<String, Boolean> viewRegButtonMap = studentRegistrationService.checkMusicGroupsRegOrPayStatus(new ArrayList<>(musicGroupIds));
         //获取分部名称map
         musicGroupList.forEach(e -> {
 //            e.setSchoolName(schoolNameMap.get(e.getSchoolId()));
@@ -2397,6 +2398,11 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             e.setPayNum(payNumMap.get(e.getId()) == null ? 0 : payNumMap.get(e.getId()));
             e.setChargeTypeName(chargeTypeNameMap.get(e.getChargeTypeId()));
             e.setHasVerifyMusicalList(purchaseListMap.get(e.getId()) != null);
+            if(e.getStatus().equals(MusicGroupStatusEnum.PREPARE) || e.getStatus().equals(MusicGroupStatusEnum.PROGRESS)){
+                if(viewRegButtonMap.containsKey(e.getId())){
+                    e.setIsRemedy(true);
+                }
+            }
         });
         return musicGroupPageInfo;
     }

+ 60 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -23,6 +23,7 @@ import javax.annotation.Resource;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.event.source.GroupEventSource;
 import com.ym.mec.biz.service.*;
 import org.apache.commons.lang3.ArrayUtils;
@@ -228,7 +229,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     public StudentFeeDetailDto queryFeeDetail(Integer studentId, String musicGroupId) {
         StudentFeeDetailDto studentFeeDetailDto = new StudentFeeDetailDto();
         List<MusicalListDetailDto> musicalList = studentPaymentOrderDetailService.getMusicalListDetail(musicGroupId, studentId);
-        if(musicalList.size() <=0){
+        if (musicalList.size() <= 0) {
             return studentFeeDetailDto;
         }
         MusicalListDetailDto detailDto = musicalList.get(0);
@@ -1611,4 +1612,62 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         courseScheduleStudentPaymentService.updateCourseActualPrice(Arrays.asList(musicGroupId), null, GroupType.MUSIC);
         return this.findMusicGroupStudent(musicGroupId, null);
     }
+
+    @Override
+    public String checkRegOrPayStatus(String musicGroupId) {
+        MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
+        if (musicGroup.getStatus() == MusicGroupStatusEnum.PAY &&
+                musicGroup.getStatus() == MusicGroupStatusEnum.PREPARE &&
+                musicGroup.getStatus() == MusicGroupStatusEnum.PROGRESS) {
+            Date now = new Date();
+            MusicGroupPaymentCalender regCalender = musicGroupPaymentCalenderDao.findByMusicGroupRegCalender(musicGroup.getId());
+            if (regCalender != null && regCalender.getDeadlinePaymentDate() != null) {
+                musicGroup.setPaymentExpireDate(regCalender.getDeadlinePaymentDate());
+            }
+            if (musicGroup.getPaymentExpireDate() != null && DateUtil.daysBetween(musicGroup.getPaymentExpireDate(), now) > 1) {
+                return "乐团缴费时间已截止";
+            }
+        }
+        //储备中、进行中,乐团没有报名缴费项、有多批次缴费项不能缴费、有已上的课程不能缴费
+        if (musicGroup.getStatus() == MusicGroupStatusEnum.PREPARE &&
+                musicGroup.getStatus() == MusicGroupStatusEnum.PROGRESS) {
+            MusicGroupPaymentCalender regCalender = musicGroupPaymentCalenderDao.findByMusicGroupRegCalender(musicGroup.getId());
+            if (regCalender == null) {
+                return "乐团没有报名缴费项";
+            }
+            List<Integer> musicGroupCalenderBatchNoTimes = musicGroupPaymentCalenderDao.getMusicGroupCalenderBatchNoTimes(musicGroup.getId());
+            if (musicGroupCalenderBatchNoTimes.size() > 1) {
+                return "乐团已建多批次缴费";
+            }
+
+            Integer hasStartCourseNum = courseScheduleDao.getMusicGroupHasStartCourseNum(musicGroup.getId());
+            if (hasStartCourseNum != null && hasStartCourseNum > 0) {
+                return "乐团已开课";
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public Map<String, Boolean> checkMusicGroupsRegOrPayStatus(List<String> ids) {
+        Map<String, Boolean> viewMap = new HashMap<>();
+        List<MusicGroupPaymentCalender> regCalenders = musicGroupPaymentCalenderDao.getMusicGroupRegCalenderByIds(ids);
+        for (MusicGroupPaymentCalender regCalender : regCalenders) {
+            viewMap.put(regCalender.getMusicGroupId(),true);
+        }
+
+        Map<String, List<MusicGroupPaymentCalender>> musicGroupBatchNoTimes = musicGroupPaymentCalenderDao.getMusicGroupCalenderBatchNoByIds(ids).stream().collect(Collectors.groupingBy(MusicGroupPaymentCalender::getMusicGroupId));
+        musicGroupBatchNoTimes.forEach((musicGroupId,calenders)->{
+            if(viewMap.containsKey(musicGroupId) && calenders.size() > 1){
+                viewMap.remove(musicGroupId);
+            }
+        });
+        List<CourseSchedule> musicGroupsHasStartCourseNums = courseScheduleDao.getMusicGroupsHasStartCourseNum(ids);
+        for (CourseSchedule musicGroupsHasStartCourseNum : musicGroupsHasStartCourseNums) {
+            if(viewMap.containsKey(musicGroupsHasStartCourseNum.getMusicGroupId())){
+                viewMap.remove(musicGroupsHasStartCourseNum.getMusicGroupId());
+            }
+        }
+        return viewMap;
+    }
 }

+ 18 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -3679,5 +3679,23 @@
         </foreach>
     </select>
 
+    <select id="getMusicGroupHasStartCourseNum" resultType="integer">
+        SELECT COUNT(*) FROM course_schedule
+        WHERE music_group_id_ = #{musicGroupId}
+        AND group_type_='MUSIC'
+        AND status_ IN ('UNDERWAY','OVER')
+    </select>
+
+    <select id="getMusicGroupsHasStartCourseNum" resultMap="CourseSchedule">
+        SELECT music_group_id_, COUNT(*) student_num_ FROM course_schedule
+        WHERE music_group_id_ IN
+        <foreach collection="ids" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+        AND group_type_='MUSIC'
+        AND status_ IN ('UNDERWAY','OVER')
+        GROUP BY music_group_id_
+    </select>
+
 
 </mapper>

+ 25 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderMapper.xml

@@ -576,4 +576,29 @@
             #{calenderId}
         </foreach>
     </select>
+
+    <select id="getMusicGroupCalenderBatchNoTimes" resultType="java.lang.Integer">
+        SELECT COUNT(*) FROM music_group_payment_calender
+        WHERE music_group_id_ = #{musicGroupId}
+        AND status_ IN ('AUDITING','NO', 'OPEN', 'OVER', 'PAID')
+        GROUP BY batch_no_
+    </select>
+
+    <select id="getMusicGroupRegCalenderByIds" resultMap="MusicGroupPaymentCalender">
+        SELECT * FROM music_group_payment_calender WHERE music_group_id_ IN
+        <foreach collection="ids" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+        AND payment_type_='MUSIC_APPLY'
+    </select>
+
+    <select id="getMusicGroupCalenderBatchNoByIds" resultMap="MusicGroupPaymentCalender">
+        SELECT music_group_id_, COUNT(*) expect_num_ FROM music_group_payment_calender
+        WHERE music_group_id_ IN
+        <foreach collection="ids" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+        AND status_ IN ('AUDITING','NO', 'OPEN', 'OVER', 'PAID')
+        GROUP BY batch_no_
+    </select>
 </mapper>

+ 43 - 35
mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java

@@ -1,5 +1,6 @@
 package com.ym.mec.student.controller;
 
+import com.ym.mec.biz.dal.dao.CourseScheduleDao;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -69,26 +70,28 @@ public class MusicGroupController extends BaseController {
     private MusicGroupPaymentCalenderDetailDao musicGroupPaymentCalenderDetailDao;
     @Autowired
     private MusicGroupPaymentCalenderDao musicGroupPaymentCalenderDao;
-    
+
     @Autowired
     private StudentPreRegistrationDao studentPreRegistrationDao;
-    
+    @Autowired
+    private CourseScheduleDao courseScheduleDao;
+
     @ApiOperation("预报名")
     @PostMapping(value = "/preRegister")
-	public Object preRegister(@RequestBody StudentPreRegistration studentPreRegistration) {
-		return musicGroupService.preRegister(studentPreRegistration) ? succeed() : failed();
-	}
-    
+    public Object preRegister(@RequestBody StudentPreRegistration studentPreRegistration) {
+        return musicGroupService.preRegister(studentPreRegistration) ? succeed() : failed();
+    }
+
     @ApiOperation("预报名信息查询")
     @GetMapping(value = "/queryPreRegister")
-	public Object queryPreRegister(String musicGroupId) {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
+    public Object queryPreRegister(String musicGroupId) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
 
-		return succeed(studentPreRegistrationDao.queryByMusicGroupIdAndUserId(sysUser.getId(), musicGroupId));
-	}
+        return succeed(studentPreRegistrationDao.queryByMusicGroupIdAndUserId(sysUser.getId(), musicGroupId));
+    }
 
     @ApiOperation("获取学生所在乐团列表")
     @GetMapping(value = "/queryUserMusicGroups")
@@ -99,7 +102,7 @@ public class MusicGroupController extends BaseController {
         }
         return succeed(musicGroupService.queryUserMusicGroups(sysUser.getId()));
     }
-    
+
     @ApiOperation("获取学生所在乐团列表")
     @GetMapping(value = "/queryStudentMusicGroupInfo")
     public Object queryStudentMusicGroupInfo() {
@@ -168,31 +171,26 @@ public class MusicGroupController extends BaseController {
             return failed(HttpStatus.CONTINUE, "乐团报名信息不存在");
         }
         if (studentRegistration.getPaymentStatus() != null && studentRegistration.getPaymentStatus() == PaymentStatusEnum.YES) {
-            return failed(HttpStatus.PROCESSING,"您已缴费,请等待乐团开启");
+            return failed(HttpStatus.PROCESSING, "您已缴费,请等待乐团开启");
         }
 
         if (studentRegistration.getPaymentStatus() != PaymentStatusEnum.OPEN) {
             return failed("乐团还未开启缴费,请等待通知");
         }
-        if (studentRegistration.getTemporaryCourseFee() == null) {
-            if (musicGroup.getStatus() != MusicGroupStatusEnum.APPLY && musicGroup.getStatus() != MusicGroupStatusEnum.PAY) {
-                return failed("乐团在" + musicGroup.getStatus().getMsg() + ",不能缴费");
-            }
-
-            if (musicGroup.getStatus() == MusicGroupStatusEnum.PAY) {
-                Date now = new Date();
-                MusicGroupPaymentCalender regCalender = musicGroupPaymentCalenderDao.findByMusicGroupRegCalender(musicGroupId);
-                if (regCalender != null && regCalender.getDeadlinePaymentDate() != null) {
-                    musicGroup.setPaymentExpireDate(regCalender.getDeadlinePaymentDate());
-                }
-                if (musicGroup.getPaymentExpireDate() != null && DateUtil.daysBetween(musicGroup.getPaymentExpireDate(), now) > 1) {
-                    return failed("乐团缴费时间已截止");
-                }
-            }
+        if (musicGroup.getStatus() != MusicGroupStatusEnum.APPLY &&
+                musicGroup.getStatus() != MusicGroupStatusEnum.PAY &&
+                musicGroup.getStatus() != MusicGroupStatusEnum.PREPARE &&
+                musicGroup.getStatus() != MusicGroupStatusEnum.PROGRESS
+        ) {
+            return failed("乐团在" + musicGroup.getStatus().getMsg() + ",不能缴费");
+        }
+        String err = studentRegistrationService.checkRegOrPayStatus(musicGroupId);
+        if(err != null){
+            return failed(err+"不能缴费");
         }
         studentRegistration.setOwnershipType(musicGroup.getOwnershipType());
         studentRegistration.setChargeTypeId(musicGroup.getChargeTypeId());
-        if(sysUser != null){
+        if (sysUser != null) {
             studentRegistration.setGender(sysUser.getGender());
         }
 
@@ -246,7 +244,7 @@ public class MusicGroupController extends BaseController {
     @ApiOperation(value = "申请退团")
     @PostMapping("/quitMusicGroup")
     @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团id", required = true, dataType = "String"),
-    	@ApiImplicitParam(name = "reason", value = "原因", required = true, dataType = "String")})
+            @ApiImplicitParam(name = "reason", value = "原因", required = true, dataType = "String")})
     public HttpResponseResult quitMusicGroup(String musicGroupId, String reason) throws Exception {
         return succeed(musicGroupService.applyQuitMusicGroup(musicGroupId, reason));
     }
@@ -254,11 +252,11 @@ public class MusicGroupController extends BaseController {
     @ApiOperation(value = "取消退团申请")
     @PostMapping("/cancelQuitMusicGroup")
     @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团id", required = true, dataType = "String"),
-    	@ApiImplicitParam(name = "reason", value = "取消原因", required = true, dataType = "String")})
+            @ApiImplicitParam(name = "reason", value = "取消原因", required = true, dataType = "String")})
     public HttpResponseResult cancelQuitMusicGroup(String musicGroupId, String reason) throws Exception {
-    	SysUser sysUser = sysUserFeignService.queryUserInfo();
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
         Integer userId = sysUser.getId();
-        
+
         return succeed(musicGroupService.cancelQuitMusicGroup(userId, musicGroupId, reason));
     }
 
@@ -288,6 +286,11 @@ public class MusicGroupController extends BaseController {
             return failed("报名信息有误,请核查");
         }
 
+        String err = studentRegistrationService.checkRegOrPayStatus(studentRegistration.getMusicGroupId());
+        if(err !=null){
+            return failed(err+"不能缴费");
+        }
+
         Integer userId = studentRegistration.getUserId();
 
         StudentPaymentOrder ApplyOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, studentRegistration.getMusicGroupId(), DealStatusEnum.SUCCESS);
@@ -315,6 +318,11 @@ public class MusicGroupController extends BaseController {
         if (studentRegistration == null) {
             return failed("报名信息有误,请核查");
         }
+
+        String err = studentRegistrationService.checkRegOrPayStatus(studentRegistration.getMusicGroupId());
+        if(err !=null){
+            return failed(err+"不能缴费");
+        }
         Integer userId = studentRegistration.getUserId();
         StudentPaymentOrder ApplyOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, studentRegistration.getMusicGroupId(), DealStatusEnum.SUCCESS);
         StudentPaymentOrder waitPay = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, studentRegistration.getMusicGroupId(), DealStatusEnum.WAIT_PAY);

+ 12 - 0
mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupRegisterController.java

@@ -2,7 +2,10 @@ package com.ym.mec.student.controller;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.CourseScheduleDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
 import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
 import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
@@ -26,6 +29,7 @@ import org.springframework.web.bind.annotation.*;
 
 import java.io.IOException;
 import java.util.Date;
+import java.util.List;
 
 @RequestMapping("register")
 @Api(tags = "乐团注册")
@@ -40,6 +44,10 @@ public class MusicGroupRegisterController extends BaseController {
     private MusicGroupService musicGroupService;
     @Autowired
     private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private MusicGroupPaymentCalenderDao musicGroupPaymentCalenderDao;
+    @Autowired
+    private CourseScheduleDao courseScheduleDao;
 
 
     @ApiOperation(value = "新增学生报名信息")
@@ -69,6 +77,10 @@ public class MusicGroupRegisterController extends BaseController {
         if (hasReg != null && hasReg.getMusicGroupStatus() != StudentMusicGroupStatusEnum.QUIT) {
             return succeed(hasReg);
         }
+        String err = studentRegistrationService.checkRegOrPayStatus(musicGroup.getId());
+        if(err != null){
+            return failed(err+",不能报名");
+        }
 
         if (musicGroup.getStatus().equals(MusicGroupStatusEnum.PAY)) {
             studentRegistration.setPaymentStatus(PaymentStatusEnum.OPEN);