瀏覽代碼

跨团合班

zouxuan 4 年之前
父節點
當前提交
d03e1da6fe

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java

@@ -414,4 +414,13 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
      * @return
      */
     List<Map<Integer, BigDecimal>> querySurplusCourseFeeByClassGroupId(@Param("classGroupId") Integer classGroupId, @Param("studentIds") String studentIds);
+
+    /**
+     * 根据学员编号列表和乐团编号获取学员注册列表
+     *
+     * @param studentIds
+     * @param oldMusicGroupId
+     * @return
+     */
+    List<StudentRegistration> queryByUserIdsAndMusicGroupId(@Param("studentIds") String studentIds, @Param("oldMusicGroupId") String oldMusicGroupId);
 }

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java

@@ -13,6 +13,7 @@ import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
 
 import java.lang.reflect.InvocationTargetException;
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -513,6 +514,13 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
     List<MusicGroupPaymentCalenderStudentDetail> queryStudentPaymentCalenders(MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto);
 
     /**
+     * 获取主班课程类型剩余价值
+     * @param masterClassGroupId
+     * @return
+     */
+    BigDecimal getMasterTotalPrice(Integer masterClassGroupId);
+
+    /**
      * 获取班级列表最大可排课时长
      * @param classGroupId
      * @return

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupSubjectPlanService.java

@@ -47,7 +47,7 @@ public interface MusicGroupSubjectPlanService extends BaseService<Integer, Music
      * @param musicGroupId
      * @param subjectId
      */
-    void addApplyStudentNum(String musicGroupId, Integer subjectId,int num) throws Exception;
+    void addApplyStudentNum(String musicGroupId, Integer subjectId,int num);
 
     /**
      * 批量修改声部规划费用

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

@@ -137,6 +137,16 @@ public interface StudentRegistrationService extends BaseService<Long, StudentReg
     Integer insertStudent(StudentAddDto studentAddDto) throws Exception;
 
     /**
+     * 跨团合班进行中加学员
+     * @param studentIds 学员列表
+     * @param oldMusicGroupId 原乐团
+     * @param newMusicGroupId 主乐团
+     * @param masterTotalPrice 主乐团剩余课程价值
+     * @return
+     */
+    void insertStudent(String studentIds,String oldMusicGroupId,String newMusicGroupId,BigDecimal masterTotalPrice);
+
+    /**
      * 获取班级学生
      *
      * @param musicGroupId

+ 32 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -3654,6 +3654,34 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         return musicGroupPaymentCalenderStudentDetails;
     }
 
+
+    @Override
+    public BigDecimal getMasterTotalPrice(Integer masterClassGroupId) {
+        //获取主班剩余时长
+        Map<String, Long> masterMap = MapUtil.convertIntegerMap(courseScheduleDao.querySubCourseNumMap(masterClassGroupId));
+        if(masterMap.size() <= 0){
+            throw new BizException("所选主班没有剩余课程,请重新选择");
+        }
+        //获取分布默认的课程类型单价
+        MusicGroup musicGroup = musicGroupDao.findByClassGroupId(masterClassGroupId);
+        Map<String, BigDecimal> unitPriceMap = MapUtil.convertIntegerMap(organizationCourseUnitPriceSettingsDao.queryMapByOrganIdAndChargeTypeId(musicGroup.getChargeTypeId(), musicGroup.getOrganId()));
+        Set<String> masterKeySet = masterMap.keySet();
+        //计算主班课程类型剩余价值
+        BigDecimal masterTotalPrice = BigDecimal.ZERO;
+        for (String s : masterKeySet) {
+            BigDecimal unitPrice = unitPriceMap.get(s);
+            if (unitPrice == null) {
+                throw new BizException("分部默认课程类型单价不存在,请设置");
+            }
+            Long courseTime = masterMap.get(s);
+            //获取主班剩余课程价值,按分部默认单价计算
+            //总价四舍五入取整
+            BigDecimal totalPrice = unitPrice.multiply(new BigDecimal(courseTime)).setScale(0, BigDecimal.ROUND_HALF_UP);
+            masterTotalPrice = masterTotalPrice.add(totalPrice);
+        }
+        return masterTotalPrice;
+    }
+
     @Override
     public Map<String, Long> querySubCourseTime(Integer classGroupId) {
         return MapUtil.convertIntegerMap(courseScheduleDao.querySubCourseNumMap(classGroupId));
@@ -3677,10 +3705,12 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         StringBuffer batchNos = new StringBuffer();
         List<String> batchNoList = new ArrayList<>();
         if (paymentCalenderDtos != null && paymentCalenderDtos.size() > 0) {
+            BigDecimal masterTotalPrice = getMasterTotalPrice(masterClassGroupId);
             //是否有需要审核的缴费项目
             for (MusicGroupPaymentCalenderDto calenderDto : paymentCalenderDtos) {
-                //扣除原乐团剩余课程余额,补充到现有乐团
-                //将学员加入新乐团
+                //将学员加入新乐团、扣除原乐团剩余课程余额、补充到现有乐团
+                studentRegistrationService.insertStudent(calenderDto.getStudentIds(),calenderDto.getMusicGroupId(),musicGroup.getId(),masterTotalPrice);
+                //添加班级关联、课程关联
 
                 calenderDto.setMusicGroupId(musicGroup.getId());
                 List<MusicGroupPaymentCalenderStudentDetail> calenderStudentDetails = calenderDto.getMusicGroupPaymentCalenderStudentDetails();

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

@@ -144,7 +144,7 @@ public class MusicGroupSubjectPlanServiceImpl extends BaseServiceImpl<Integer, M
     }
 
     @Override
-    public void addApplyStudentNum(String musicGroupId, Integer subjectId, int num) throws Exception {
+    public void addApplyStudentNum(String musicGroupId, Integer subjectId, int num){
         boolean flag = false;
         for (int i = 10; i >= 1; i--) {
             MusicGroupSubjectPlan musicOneSubjectClassPlan = musicGroupSubjectPlanDao.getMusicOneSubjectClassPlan(musicGroupId, subjectId);

+ 72 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -122,6 +122,10 @@ import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
 
+import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.NON_PAYMENT;
+import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED;
+import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.YES;
+
 @Service
 public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, StudentRegistration> implements StudentRegistrationService {
 
@@ -783,9 +787,9 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             BigDecimal reduce = studentPaymentOrderDetails.stream().map(StudentPaymentOrderDetail::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
             MusicGroupStudentFee.PaymentStatus paymentStatus = MusicGroupStudentFee.PaymentStatus.NON_PAYMENT;
             if (reduce.compareTo(BigDecimal.ZERO) == 0) {
-                paymentStatus = MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED;
+                paymentStatus = PAID_COMPLETED;
                 studentPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
-                studentRegistration.setPaymentStatus(PaymentStatusEnum.YES);
+                studentRegistration.setPaymentStatus(YES);
                 studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.NORMAL);
                 studentPaymentOrder.setActualAmount(reduce);
                 studentPaymentOrder.setPayTime(date);
@@ -831,6 +835,66 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         }
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void insertStudent(String studentIds,String oldMusicGroupId,String newMusicGroupId,BigDecimal masterTotalPrice){
+        SysUser sysUser1 = sysUserFeignService.queryUserInfo();
+        //获取旧乐团学员注册信息
+        List<StudentRegistration> studentRegistrations = studentRegistrationDao.queryByUserIdsAndMusicGroupId(studentIds,oldMusicGroupId);
+        List<StudentCourseFeeDetail> studentCourseFeeDetails = new ArrayList<>();
+        for (StudentRegistration studentRegistration : studentRegistrations) {
+            //用户是否在主乐团
+            StudentRegistration phoneAndMusicGroupId = studentRegistrationDao.getByPhoneAndMusicGroupId(newMusicGroupId, studentRegistration.getParentsPhone());
+            if (phoneAndMusicGroupId != null && phoneAndMusicGroupId.getMusicGroupStatus() != StudentMusicGroupStatusEnum.QUIT && phoneAndMusicGroupId.getMusicGroupStatus() != StudentMusicGroupStatusEnum.APPLY) {
+                //该学员已存在
+                continue;
+            }
+            SysUser sysUser = studentRegistrationDao.getSysUserByPhone(studentRegistration.getParentsPhone());
+            if (StringUtils.isNotEmpty(sysUser.getUsername())) {
+                if (!sysUser.getUsername().equals(studentRegistration.getName())) {
+                    //账户已被注册
+                    continue;
+                }
+            }
+            //当前学员是否以前存在过当前乐团
+            studentRegistration.setMusicGroupId(newMusicGroupId);
+            if (phoneAndMusicGroupId != null) {
+                studentRegistration.setId(phoneAndMusicGroupId.getId());
+                studentRegistrationDao.update(studentRegistration);
+            } else {
+                studentRegistrationDao.insertBasic(studentRegistration);
+            }
+            //记录课程余额消费日志
+            if(studentRegistration.getSurplusCourseFee().doubleValue() > 0d){
+                StudentCourseFeeDetail studentCourseFeeDetail = new StudentCourseFeeDetail();
+                if(studentRegistration.getSurplusCourseFee().doubleValue() > masterTotalPrice.doubleValue()){
+                    studentCourseFeeDetail.setAmount(masterTotalPrice);
+                    studentCourseFeeDetail.setSurplusCourseFee(studentRegistration.getSurplusCourseFee().subtract(masterTotalPrice));
+                }
+                studentCourseFeeDetail.setAmount(studentRegistration.getSurplusCourseFee());
+                studentCourseFeeDetail.setSurplusCourseFee(BigDecimal.ZERO);
+                studentCourseFeeDetail.setMemo("跨团合班消费");
+                studentCourseFeeDetail.setOperator(sysUser1.getId());
+                studentCourseFeeDetails.add(studentCourseFeeDetail);
+            }
+            MusicGroupStudentFee studentFeeDaoByUser = musicGroupStudentFeeDao.findByUser(studentRegistration.getUserId(), newMusicGroupId);
+            if (studentFeeDaoByUser != null) {
+                //该学员已存在
+                continue;
+            }
+            //增加报名学生数
+            musicGroupSubjectPlanService.addApplyStudentNum(newMusicGroupId, studentRegistration.getSubjectId(), 1);
+            //新增Fee表
+            MusicGroupStudentFee musicGroupStudentFee = new MusicGroupStudentFee(newMusicGroupId,
+                    studentRegistration.getUserId(), studentRegistration.getSubjectId(),BigDecimal.ZERO,
+                    null, studentRegistration.getTemporaryCourseFee(), studentRegistration.getPaymentStatus()==YES?PAID_COMPLETED:NON_PAYMENT);
+            musicGroupStudentFeeDao.insert(musicGroupStudentFee);
+        }
+        if(studentCourseFeeDetails.size() > 0){
+
+        }
+    }
+
     private List<CourseSchedule> addStudent(Integer classGroupId, Integer userId, Date date, List<CourseSchedule> courseScheduleList) {
         ClassGroup classGroup = classGroupDao.get(classGroupId);
         ClassGroupStudentMapper classGroupStudentMapper = classGroupStudentMapperDao.findClassStudentMapperByUserIdAndClassGroupId(userId, classGroupId, null);
@@ -931,7 +995,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             musicGroupStudentFee.setRemainNetworkClassTimes(musicGroupStudentFee.getRemainNetworkClassTimes() + 1);
         }
         //更新学生的缴费记录状态
-        calenderDetail.setPaymentStatus(MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED);
+        calenderDetail.setPaymentStatus(PAID_COMPLETED);
         calenderDetail.setActualAmount(calenderDetail.getExpectAmount());
         calenderDetail.setPayTime(date);
         calenderDetail.setUpdateTime(date);
@@ -957,7 +1021,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         //成功报名状态变更
         StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(studentPaymentOrder.getUserId(), studentPaymentOrder.getMusicGroupId());
 
-        if (studentRegistration.getPaymentStatus().equals(PaymentStatusEnum.YES)) {
+        if (studentRegistration.getPaymentStatus().equals(YES)) {
             return studentPaymentOrder;
         }
         MusicGroupSubjectPlan musicOneSubjectClassPlan = musicGroupSubjectPlanService.getMusicOneSubjectClassPlan(studentRegistration.getMusicGroupId(), studentRegistration.getActualSubjectId());
@@ -968,7 +1032,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             if (studentRegistration.getTemporaryCourseFee() != null) {
                 studentRegistration.setTemporaryCourseFee(new BigDecimal(0));
             }
-            studentRegistration.setPaymentStatus(PaymentStatusEnum.YES);
+            studentRegistration.setPaymentStatus(YES);
             studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.NORMAL);
 
             List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailService.getOrderDetail(studentPaymentOrder.getId());
@@ -998,7 +1062,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 waitPayOrder.setStatus(DealStatusEnum.CLOSE);
                 studentPaymentOrderService.update(waitPayOrder);
                 musicGroupStudentFee.setLatestPaidTime(nowDate);
-                musicGroupStudentFee.setPaymentStatus(MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED);
+                musicGroupStudentFee.setPaymentStatus(PAID_COMPLETED);
                 musicGroupStudentFee.setTemporaryCourseFee(BigDecimal.ZERO);
                 musicGroupStudentFee.setUpdateTime(nowDate);
             }
@@ -1109,7 +1173,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         Date nowDate = new Date();
         MusicGroupStudentFee musicGroupStudentFee = new MusicGroupStudentFee();
         musicGroupStudentFee.setLatestPaidTime(nowDate);
-        musicGroupStudentFee.setPaymentStatus(MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED);
+        musicGroupStudentFee.setPaymentStatus(PAID_COMPLETED);
         musicGroupStudentFee.setUpdateTime(nowDate);
         musicGroupStudentFee.setContinuousAbsenteeismTimes(0);
         musicGroupStudentFee.setSubjectId(studentRegistration.getActualSubjectId());
@@ -1177,7 +1241,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 } else {
                     musicGroupPaymentCalenderDetail.setActualAmount(courseTotalPrice);
                 }
-                musicGroupPaymentCalenderDetail.setPaymentStatus(MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED);
+                musicGroupPaymentCalenderDetail.setPaymentStatus(PAID_COMPLETED);
                 musicGroupPaymentCalenderDetail.setPayTime(nowDate);
                 musicGroupPaymentCalenderDetail.setPaymentOrderId(studentPaymentOrder.getId());
                 musicGroupPaymentCalenderDetail.setUseInCourse(0);

+ 4 - 4
mec-biz/src/main/resources/config/mybatis/EmployeeMapper.xml

@@ -208,10 +208,10 @@
             LEFT JOIN sys_user_role sur ON sur.user_id_ = e.user_id_
         </if>
         <where>
-            <if test="demissionflag != null and demissionflag == 'true'">
+            <if test="demissionflag != null and demissionflag == 1">
                 AND e.demission_date_ IS NOT NULL
             </if>
-            <if test="demissionflag != null and demissionflag == 'false'">
+            <if test="demissionflag != null and demissionflag == 0">
                 AND e.demission_date_ IS NULL
             </if>
             <if test="organId != null">
@@ -244,10 +244,10 @@
             <if test="organId != null">
                 AND INTE_ARRAY(e.organ_id_list_,#{organId})
             </if>
-            <if test="demissionflag != null and demissionflag == 'true'">
+            <if test="demissionflag != null and demissionflag == 1">
                 AND e.demission_date_ IS NOT NULL
             </if>
-            <if test="demissionflag != null and demissionflag == 'false'">
+            <if test="demissionflag != null and demissionflag == 0">
                 AND e.demission_date_ IS NULL
             </if>
             <if test="jobNature != null">

+ 6 - 0
mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml

@@ -736,4 +736,10 @@
         WHERE cg.id_ = #{classGroupId} AND FIND_IN_SET(sr.user_id_,#{studentIds})
         AND sr.music_group_status_ != 'QUIT'
     </select>
+
+    <select id="queryByUserIdsAndMusicGroupId" resultMap="StudentRegistration">
+        SELECT sr.*,su.id_card_no_,su.organ_id_ FROM student_registration sr
+        LEFT JOIN sys_user su ON su.id_ = sr.user_id_
+        WHERE sr.music_group_id_ = #{musicGroupId} AND FIND_IN_SET(sr.user_id_,#{studentIds}) AND sr.music_group_status_ != 'QUIT'
+    </select>
 </mapper>