zouxuan 4 лет назад
Родитель
Сommit
3354ae2267

+ 12 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dao;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -393,11 +394,21 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
      * @return
      */
     Integer getMusicGroupSubjectStudentNum(@Param("musicGroupId") String musicGroupId, @Param("subjectIds") String subjectIds);
-    
+
     /**
      * 查询用户所在乐团信息
+     *
      * @param userId
      * @return
      */
     List<StudentMusicGroupDto> queryStudentMusicGroupInfo(Integer userId);
+
+    /**
+     * 获取学员剩余课程费用
+     *
+     * @param classGroupId
+     * @param studentIds
+     * @return
+     */
+    List<Map<Integer, BigDecimal>> querySurplusCourseFeeByClassGroupId(@Param("classGroupId") Integer classGroupId, @Param("studentIds") String studentIds);
 }

+ 95 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentPaymentCalenderDto.java

@@ -0,0 +1,95 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import java.math.BigDecimal;
+
+public class StudentPaymentCalenderDto {
+
+    @ApiModelProperty(value = "学员编号",required = false)
+    private Integer userId;
+
+    @ApiModelProperty(value = "学员名称",required = false)
+    private String username;
+
+    @ApiModelProperty(value = "学员手机号",required = false)
+    private String phone;
+
+    @ApiModelProperty(value = "原价",required = false)
+    private BigDecimal courseOriginalPrice;
+
+    @ApiModelProperty(value = "现价",required = false)
+    private BigDecimal courseCurrentPrice;
+
+    @ApiModelProperty(value = "课程类型",required = false)
+    private String courseType;
+
+    @ApiModelProperty(value = "课程时长",required = false)
+    private Long courseTime;
+
+    @ApiModelProperty(value = "班级编号",required = false)
+    private Integer classGroupId;
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public BigDecimal getCourseOriginalPrice() {
+        return courseOriginalPrice;
+    }
+
+    public void setCourseOriginalPrice(BigDecimal courseOriginalPrice) {
+        this.courseOriginalPrice = courseOriginalPrice;
+    }
+
+    public BigDecimal getCourseCurrentPrice() {
+        return courseCurrentPrice;
+    }
+
+    public void setCourseCurrentPrice(BigDecimal courseCurrentPrice) {
+        this.courseCurrentPrice = courseCurrentPrice;
+    }
+
+    public String getCourseType() {
+        return courseType;
+    }
+
+    public void setCourseType(String courseType) {
+        this.courseType = courseType;
+    }
+
+    public Long getCourseTime() {
+        return courseTime;
+    }
+
+    public void setCourseTime(Long courseTime) {
+        this.courseTime = courseTime;
+    }
+
+    public Integer getClassGroupId() {
+        return classGroupId;
+    }
+
+    public void setClassGroupId(Integer classGroupId) {
+        this.classGroupId = classGroupId;
+    }
+}

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

@@ -506,12 +506,12 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
      * @param mergeClassSplitClassAffirmDto
      * @return
      */
-    Object queryStudentPaymentCalenders(MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto);
+    Map<Integer, List<StudentPaymentCalenderDto>> queryStudentPaymentCalenders(MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto);
 
     /**
      * 获取班级列表最大可排课时长
-     * @param classGroupIds
+     * @param classGroupId
      * @return
      */
-    Map<String,Long> querySubCourseTime(List<Integer> classGroupIds);
+    Map<String,Long> querySubCourseTime(Integer classGroupId);
 }

+ 62 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -3527,19 +3527,39 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     }
 
     @Override
-    public Object queryStudentPaymentCalenders(MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto) {
-        ArrayList masterClassGroupId = new ArrayList();
-        masterClassGroupId.add(mergeClassSplitClassAffirmDto.getMasterClassGroupId());
+    public Map<Integer, List<StudentPaymentCalenderDto>> queryStudentPaymentCalenders(MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto) {
         //获取主班剩余时长
-        Map<String, Long> masterMap = MapUtil.convertIntegerMap(courseScheduleDao.findClassMaxCourseNumMap(masterClassGroupId));
-        //获取其他班级剩余时长
-        Map<String, Long> subMap = MapUtil.convertIntegerMap(courseScheduleDao.findClassMaxCourseNumMap(mergeClassSplitClassAffirmDto.getClassGroupIds()));
+        Map<String, Long> masterMap = MapUtil.convertIntegerMap(courseScheduleDao.querySubCourseNumMap(mergeClassSplitClassAffirmDto.getMasterClassGroupId()));
+        if(masterMap.size() <= 0){
+            throw new BizException("所选主班没有剩余课程,请重新选择");
+        }
+        //获取学员列表
+        Map<Integer, String> userNames = MapUtil.convertMybatisMap(teacherDao.queryUsernameByIds(mergeClassSplitClassAffirmDto.getStudentIds()));
+        Map<Integer, String> phoneMaps = MapUtil.convertMybatisMap(teacherDao.queryPhoneByIds(StringUtils.join(mergeClassSplitClassAffirmDto.getStudentIds(),",")));
+
+        Map<Integer, Integer> studentCLassMap = new HashMap<>();
+        List<Map<Integer, BigDecimal>> surplusCourseFeeMapList = new ArrayList<>();
+        List<Map<Integer, String>> classGroupStudents = mergeClassSplitClassAffirmDto.getClassGroupStudents();
+        for (Map<Integer, String> classGroupStudent : classGroupStudents) {
+            for (Integer integer : classGroupStudent.keySet()) {
+                //获取学员剩余课程费用
+                surplusCourseFeeMapList.addAll(studentRegistrationDao.querySurplusCourseFeeByClassGroupId(integer,classGroupStudent.get(integer)));
+                String[] s = classGroupStudent.get(integer).split(",");
+                for (String s1 : s) {
+                    studentCLassMap.put(Integer.parseInt(s1),integer);
+                }
+            }
+        }
+        //学员剩余课程费用
+        Map<Integer, BigDecimal> surplusCourseFeeMap = MapUtil.convertIntegerMap(surplusCourseFeeMapList);
         //获取分布默认的课程类型单价
         MusicGroup musicGroup = musicGroupDao.findByClassGroupId(mergeClassSplitClassAffirmDto.getMasterClassGroupId());
         Map<String, BigDecimal> unitPriceMap = MapUtil.convertIntegerMap(organizationCourseUnitPriceSettingsDao.queryMapByOrganIdAndChargeTypeId(musicGroup.getChargeTypeId(), musicGroup.getOrganId()));
         Set<String> masterKeySet = masterMap.keySet();
         //计算主班课程类型剩余价值
         Map<String, BigDecimal> masterTotalPriceMap = new HashMap<>(masterKeySet.size());
+        //学员缴费项目列表
+        List<StudentPaymentCalenderDto> studentPaymentCalenderDtos = new ArrayList<>();
         for (String s : masterKeySet) {
             BigDecimal unitPrice = unitPriceMap.get(s);
             if (unitPrice == null) {
@@ -3551,13 +3571,45 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 masterTotalPriceMap.put(s,BigDecimal.ZERO);
             }
             //总价四舍五入取整
-            masterTotalPriceMap.put(s,unitPrice.multiply(new BigDecimal(courseTime)).setScale(0, BigDecimal.ROUND_HALF_UP));
+            BigDecimal totalPrice = unitPrice.multiply(new BigDecimal(courseTime)).setScale(0, BigDecimal.ROUND_HALF_UP);
+            masterTotalPriceMap.put(s,totalPrice);
+            //课程余额转移
+            for (Integer studentId : studentCLassMap.keySet()) {
+                //学员剩余课程余额
+                BigDecimal bigDecimal = surplusCourseFeeMap.get(studentId);
+                //创建学员缴费项目
+                StudentPaymentCalenderDto calenderDto = new StudentPaymentCalenderDto();
+                calenderDto.setClassGroupId(studentCLassMap.get(studentId));
+                //如果剩余课程余额小于等于0
+                if(bigDecimal.longValue() <= 0l){
+                    calenderDto.setCourseCurrentPrice(totalPrice);
+                    calenderDto.setCourseOriginalPrice(totalPrice);
+                }else {
+                    //如果剩余课程余额大于等于总价值,那么补交0元
+                    if(bigDecimal.longValue() >= totalPrice.longValue()){
+                        calenderDto.setCourseCurrentPrice(BigDecimal.ZERO);
+                        calenderDto.setCourseOriginalPrice(BigDecimal.ZERO);
+                    }else {
+                        calenderDto.setCourseCurrentPrice(totalPrice.subtract(bigDecimal));
+                        calenderDto.setCourseOriginalPrice(totalPrice.subtract(bigDecimal));
+                    }
+                    //剩余课程余额减去主班对应课程类型总的课程价值,负数就是需要补交的金额
+                    bigDecimal = bigDecimal.subtract(totalPrice);
+                }
+                calenderDto.setCourseTime(courseTime);
+                calenderDto.setCourseType(s);
+
+                calenderDto.setPhone(phoneMaps.get(studentId));
+                calenderDto.setUserId(studentId);
+                calenderDto.setUsername(userNames.get(studentId));
+                studentPaymentCalenderDtos.add(calenderDto);
+            }
         }
-        return null;
+        return studentPaymentCalenderDtos.stream().collect(Collectors.groupingBy(e -> e.getClassGroupId()));
     }
 
     @Override
-    public Map<String, Long> querySubCourseTime(List<Integer> classGroupIds) {
-        return MapUtil.convertIntegerMap(courseScheduleDao.findClassMaxCourseNumMap(classGroupIds));
+    public Map<String, Long> querySubCourseTime(Integer classGroupId) {
+        return MapUtil.convertIntegerMap(courseScheduleDao.querySubCourseNumMap(classGroupId));
     }
 }

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

@@ -728,4 +728,11 @@
     	where sr.user_id_ = #{userId} 
     	order by sr.id_ 
     </select>
+
+    <select id="querySurplusCourseFeeByClassGroupId" resultType="java.util.Map">
+        SELECT sr.user_id_ 'key',sr.surplus_course_fee_ 'value' FROM student_registration sr
+        LEFT JOIN class_group cg ON cg.music_group_id_ = sr.music_group_id_
+        WHERE cg.id_ = #{classGroupId} AND FIND_IN_SET(sr.user_id_,#{studentIds})
+        AND sr.music_group_status_ != 'QUIT'
+    </select>
 </mapper>

+ 3 - 3
mec-web/src/main/java/com/ym/mec/web/controller/ClassGroupController.java

@@ -343,12 +343,12 @@ public class ClassGroupController extends BaseController {
     @ApiOperation(value = "进行中乐团-修改-班级详情-学员班级调整-获取班级最大剩余可排课时长")
     @PostMapping("/querySubCourseTime")
     @PreAuthorize("@pcs.hasPermissions('classGroup/querySubCourseTime')")
-    public HttpResponseResult querySubCourseTime(@RequestBody List<Integer> classGroupIds) {
-        return succeed(classGroupService.querySubCourseTime(classGroupIds));
+    public HttpResponseResult querySubCourseTime(Integer classGroupId) {
+        return succeed(classGroupService.querySubCourseTime(classGroupId));
     }
 
     @ApiOperation(value = "进行中乐团-修改-班级详情-班级合并-获取学员需要补交的费用以及需要退还的课程余额")
-    @GetMapping("/queryStudentPaymentCalenders")
+    @PostMapping("/queryStudentPaymentCalenders")
     @PreAuthorize("@pcs.hasPermissions('classGroup/queryStudentPaymentCalenders')")
     public HttpResponseResult queryStudentPaymentCalenders(@RequestBody MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto) {
         return succeed(classGroupService.queryStudentPaymentCalenders(mergeClassSplitClassAffirmDto));