فهرست منبع

Merge branch 'master' of http://git.dayaedu.com/yonge/mec

zouxuan 4 سال پیش
والد
کامیت
d61ebcfe44
24فایلهای تغییر یافته به همراه304 افزوده شده و 72 حذف شده
  1. 4 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/DegreeRegistrationDao.java
  2. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDetailDao.java
  3. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleComplaintsDto.java
  4. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Goods.java
  5. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/GoodsQueryInfo.java
  6. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  7. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java
  8. 27 14
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  9. 3 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java
  10. 53 11
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java
  11. 18 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/GoodsServiceImpl.java
  12. 5 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  13. 2 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleComplaintsMapper.xml
  14. 3 3
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  15. 3 2
      mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml
  16. 16 7
      mec-biz/src/main/resources/config/mybatis/DegreeRegistrationMapper.xml
  17. 26 3
      mec-biz/src/main/resources/config/mybatis/GoodsMapper.xml
  18. 8 0
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderDetailMapper.xml
  19. 52 23
      mec-student/src/main/java/com/ym/mec/student/controller/DegreeController.java
  20. 4 0
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  21. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/ImportController.java
  22. 2 0
      mec-web/src/main/resources/columnMapper.ini
  23. BIN
      mec-web/src/main/resources/excelTemplate/商品导入模板.xls
  24. 0 0
      mec-web/src/main/resources/excelTemplate/财务管理导入模板.xls

+ 4 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/DegreeRegistrationDao.java

@@ -17,5 +17,8 @@ public interface DegreeRegistrationDao extends BaseDAO<Integer, DegreeRegistrati
 
     DegreeRegistration getWithUserIdAndActivityTag(@Param("degree") DegreeRegistration degree);
 
-    DegreeRegistration getWithSubjectAndLevel(@Param("degree") DegreeRegistration degree);
+    DegreeRegistration getWithLevel(@Param("degree") DegreeRegistration degree);
+
+    List<DegreeRegistration> getUserLevelDegrees(@Param("userId") Integer userId,
+                                                 @Param("activityTag") String activityTag);
 }

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDetailDao.java

@@ -4,6 +4,7 @@ import com.ym.mec.biz.dal.dto.MusicalListDetailDto;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
 import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
@@ -120,6 +121,17 @@ public interface StudentPaymentOrderDetailDao extends BaseDAO<Long, StudentPayme
      */
     List<StudentPaymentOrderDetail> getOrderGoodies(@Param("orderIds") List<Long> orderIds);
 
+    /**
+     * @describe 获取用户指定类型的订单
+     * @author qnc99
+     * @date 2020/12/7 0007
+     * @param userId:
+     * @param orderType:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail>
+     */
+    List<StudentPaymentOrderDetail> getWithUserAndOrderType(@Param("userId") Integer userId,
+                                                            @Param("orderType")OrderTypeEnum orderType);
+
     List<StudentPaymentOrderDetail> getWithIds(@Param("paymentOrderIds") List<Long> paymentOrderIds);
 
 

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleComplaintsDto.java

@@ -9,6 +9,8 @@ public class CourseScheduleComplaintsDto{
     private Integer score;
 
     private String avatar;
+    
+    private Integer userId;
 
     public String getUsername() {
         return username;
@@ -41,4 +43,12 @@ public class CourseScheduleComplaintsDto{
     public void setAvatar(String avatar) {
         this.avatar = avatar;
     }
+
+	public Integer getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Integer userId) {
+		this.userId = userId;
+	}
 }

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Goods.java

@@ -130,6 +130,12 @@ public class Goods {
 
 	@ApiModelProperty(value = "客户端是否展示")
 	private YesOrNoEnum clientShow;
+	
+	@ApiModelProperty(value = "教务端是否展示")
+	private YesOrNoEnum educationalShow;
+	
+	@ApiModelProperty(value = "乐团是否展示")
+	private YesOrNoEnum musicGroupShow;
 
 	@ApiModelProperty(value = "库存类型")
 	private StockType stockType;
@@ -153,6 +159,22 @@ public class Goods {
 		this.clientShow = clientShow;
 	}
 
+	public YesOrNoEnum getEducationalShow() {
+		return educationalShow;
+	}
+
+	public void setEducationalShow(YesOrNoEnum educationalShow) {
+		this.educationalShow = educationalShow;
+	}
+
+	public YesOrNoEnum getMusicGroupShow() {
+		return musicGroupShow;
+	}
+
+	public void setMusicGroupShow(YesOrNoEnum musicGroupShow) {
+		this.musicGroupShow = musicGroupShow;
+	}
+
 	public StockType getStockType() {
 		return stockType;
 	}

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/GoodsQueryInfo.java

@@ -31,6 +31,12 @@ public class GoodsQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "客户端是否展示:0否,1是")
     private Integer clientShow;
 
+    @ApiModelProperty(value = "教务端是否展示:0否,1是")
+    private Integer educationalShow;
+
+    @ApiModelProperty(value = "乐团端是否展示:0否,1是")
+    private Integer musicGroupShow;
+
     public Integer getGroupGoods() {
         return groupGoods;
     }
@@ -86,4 +92,20 @@ public class GoodsQueryInfo extends QueryInfo {
     public void setClientShow(Integer clientShow) {
         this.clientShow = clientShow;
     }
+
+	public Integer getEducationalShow() {
+		return educationalShow;
+	}
+
+	public void setEducationalShow(Integer educationalShow) {
+		this.educationalShow = educationalShow;
+	}
+
+	public Integer getMusicGroupShow() {
+		return musicGroupShow;
+	}
+
+	public void setMusicGroupShow(Integer musicGroupShow) {
+		this.musicGroupShow = musicGroupShow;
+	}
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java

@@ -619,6 +619,15 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	void courseRepeatCheck();
 
 	/**
+	 * @describe 将被合并的课程替换为主课程
+	 * @author qnc99
+	 * @date 2020/12/7 0007
+	 * @param courseSchedules:
+	 * @return void
+	 */
+	void mergeCourseReplace(List<CourseSchedule> courseSchedules);
+
+	/**
 	 * @describe 课程合并
 	 * @author qnc99
 	 * @date 2020/11/27 0027

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java

@@ -459,6 +459,8 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
             return;
         }
 
+        courseScheduleService.mergeCourseReplace(classGroupNotStartCourse);
+
         if(ClassGroupTypeEnum.MUSIC_NETWORK.equals(classGroup.getType())){
             for (CourseSchedule courseSchedule : classGroupNotStartCourse) {
                 courseSchedule.setName(classGroup.getName());

+ 27 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -14,20 +14,7 @@ import java.math.BigInteger;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.TreeSet;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -5271,6 +5258,32 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	}
 
 	@Override
+	public void mergeCourseReplace(List<CourseSchedule> courseSchedules) {
+		Set<Long> newCourseIds = courseSchedules.stream().filter(c -> Objects.nonNull(c.getNewCourseId())).map(CourseSchedule::getNewCourseId).collect(Collectors.toSet());
+		if(CollectionUtils.isEmpty(newCourseIds)){
+			return;
+		}
+		List<CourseSchedule> mainCourses = courseScheduleDao.findByCourseScheduleIds(new ArrayList<>(newCourseIds));
+		Map<Long, CourseSchedule> idCourseMap = mainCourses.stream().collect(Collectors.toMap(CourseSchedule::getId, c -> c, (c1, c2) -> c1));
+		Iterator<CourseSchedule> iterator = courseSchedules.iterator();
+		while (iterator.hasNext()){
+			CourseSchedule next = iterator.next();
+			if(Objects.isNull(next.getNewCourseId())){
+				continue;
+			}
+			if(next.getClassGroupId().equals(idCourseMap.get(next.getNewCourseId()).getClassGroupId())){
+				iterator.remove();
+			}
+		}
+		for (CourseSchedule courseSchedule : courseSchedules) {
+			if(Objects.isNull(courseSchedule.getNewCourseId())){
+				continue;
+			}
+			courseSchedule = idCourseMap.get(courseSchedule.getId());
+		}
+	}
+
+	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public void courseMerge(CourseMergeDto courseMergeInfo) {
 		Date now = new Date();

+ 3 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java

@@ -32,6 +32,7 @@ import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 @Service
@@ -678,11 +679,11 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 
 		String key = "updateCourseActualPrice";
 
-		if(redisCache.exists(key)){
+		if(redisCache.getRedisTemplate().opsForValue().size(key)>0){
 			return;
 		}
 
-		redisCache.expire(key, 7200);
+		redisCache.getRedisTemplate().opsForValue().setIfAbsent(key, Thread.currentThread().getId(), 1, TimeUnit.HOURS);
 
 		try {
 			List<CourseScheduleStudentPaymentDto> courseScheduleStudentPayments = courseScheduleStudentPaymentDao.findNeedUpdateActualPriceStudentCourses();

+ 53 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java

@@ -76,8 +76,19 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
     public HttpResponseResult pay(DegreeRegistrationActivityDto degreeRegistration) throws Exception {
         Student student = studentDao.getLocked(degreeRegistration.getUserId());
 
+        List<DegreeRegistration> userLevelDegrees = degreeRegistrationDao.getUserLevelDegrees(degreeRegistration.getUserId(), ACTIVITY_TAG);
+        long levelNum = userLevelDegrees.stream().filter(d -> Objects.nonNull(d.getSporadicId())).count();
+        long theoryLevelNum = userLevelDegrees.stream().filter(d -> Objects.nonNull(d.getTheoryLevel())).count();
+
+        if(Objects.nonNull(degreeRegistration.getSporadicId())&&levelNum>0){
+            throw new BizException("您已报考过选择的考级项目");
+        }
+        if(Objects.nonNull(degreeRegistration.getTheoryLevel())&&theoryLevelNum>0){
+            throw new BizException("您已报考过选择的考级项目");
+        }
+
         degreeRegistration.setActivityTag(ACTIVITY_TAG);
-        DegreeRegistration degree = degreeRegistrationDao.getWithSubjectAndLevel(degreeRegistration);
+        DegreeRegistration degree = degreeRegistrationDao.getWithLevel(degreeRegistration);
 
         Date nowDate = new Date();
 
@@ -85,7 +96,7 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
 
         //获取收费项价格
         SporadicChargeInfo chargeInfo = null;
-        if(Objects.nonNull(degreeRegistration.getSporadicId())&&Objects.nonNull(degreeRegistration.getTheoryLevel())){
+        if(Objects.nonNull(degreeRegistration.getSporadicId())){
             chargeInfo = sporadicChargeInfoDao.get(degreeRegistration.getSporadicId());
             if (chargeInfo == null || chargeInfo.getDelFlag().equals(1) || chargeInfo.getOpenFlag().equals(1)) {
                 throw new BizException("你选的考试级别不存在");
@@ -95,9 +106,13 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
                     && StringUtils.isBlank(degreeRegistration.getTheoryCert())) {
                 throw new BizException("报考级别为“" + chargeInfo.getTitle() + "”且乐理级别是“免考”时,必须上传证书");
             }
-
-            degreeRegistration.setActivityTag(ACTIVITY_TAG);
             degreeRegistration.setLevel(chargeInfo.getTitle());
+            degreeRegistration.setMoney(chargeInfo.getAmount());
+        }else{
+            degreeRegistration.setMoney(BigDecimal.ZERO);
+        }
+
+        if(Objects.nonNull(degreeRegistration.getTheoryLevel())){
             degreeRegistration.setOrderNo(orderNo);
             BigDecimal theoryMoney = BigDecimal.ZERO;
             switch (degreeRegistration.getTheoryLevel()) {
@@ -119,8 +134,12 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
                     throw new BizException("您选择的乐理级别不存在,请核对");
             }
             degreeRegistration.setTheoryMoney(theoryMoney);
+        }else{
+            degreeRegistration.setTheoryMoney(BigDecimal.ZERO);
+        }
+
+        if(Objects.nonNull(degreeRegistration.getSporadicId())||Objects.nonNull(degreeRegistration.getTheoryLevel())){
             if (degree == null) {
-                degreeRegistration.setMoney(chargeInfo.getAmount());
                 degreeRegistration.setStatus(1);
                 degreeRegistration.setCreateTime(nowDate);
                 degreeRegistration.setUpdateTime(nowDate);
@@ -148,9 +167,6 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
                 degreeRegistration.setUpdateTime(nowDate);
                 degreeRegistrationDao.update(degreeRegistration);
             }
-        }else{
-            degreeRegistration.setMoney(BigDecimal.ZERO);
-            degreeRegistration.setTheoryMoney(BigDecimal.ZERO);
         }
 
         BigDecimal additionCoursePrice = new BigDecimal("0");
@@ -160,6 +176,29 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
             if(Objects.isNull(practiceGroupSellPrice)){
                 throw new BizException("该分部暂未参与此活动");
             }
+
+            List<StudentPaymentOrderDetail> historyOrderDetails = studentPaymentOrderDetailDao.getWithUserAndOrderType(degreeRegistration.getUserId(), OrderTypeEnum.DEGREE_REGISTRATION);
+            int historyVipNum = 0, historyPracticeNum = 0, historyHighNum = 0;
+            for (StudentPaymentOrderDetail historyOrderDetail : historyOrderDetails) {
+                if(StringUtils.isBlank(historyOrderDetail.getGoodsIdList())){
+                    continue;
+                }
+                Map<String, Integer> courseNumMap = JSON.parseObject(historyOrderDetail.getGoodsIdList(), Map.class);
+                for (Map.Entry<String, Integer> stringIntegerEntry : courseNumMap.entrySet()) {
+                    switch (stringIntegerEntry.getKey()){
+                        case "VIP":
+                            historyVipNum = historyVipNum + stringIntegerEntry.getValue();
+                            break;
+                        case "PRACTICE":
+                            historyPracticeNum = historyPracticeNum + stringIntegerEntry.getValue();
+                            break;
+                        case "HIGH":
+                            historyHighNum = historyHighNum + stringIntegerEntry.getValue();
+                            break;
+                    }
+                }
+            }
+
             BigDecimal practiceUnitPrice = practiceGroupSellPrice.getOnceOriginalPrice(),
                     vipUnitPrice = new BigDecimal("0"), highUnitPrice;
             if(student.getIsNewUser()){
@@ -168,7 +207,10 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
                 if(!additionCourseInfo.containsKey(CourseSchedule.CourseScheduleType.VIP)){
                     additionCourseInfo.remove(CourseSchedule.CourseScheduleType.PRACTICE);
                 }
-                boolean vipMoreThan2 = additionCourseInfo.containsKey(CourseSchedule.CourseScheduleType.VIP)&&additionCourseInfo.get(CourseSchedule.CourseScheduleType.VIP)>=2;
+                if(additionCourseInfo.containsKey(CourseSchedule.CourseScheduleType.VIP)){
+                    historyVipNum = historyVipNum + additionCourseInfo.get(CourseSchedule.CourseScheduleType.VIP);
+                }
+                boolean vipMoreThan2 = historyVipNum>=2;
                 if(vipMoreThan2){
                     if(FREE_PRICE_LEVEL.contains(degreeRegistration.getLevel())){
                         degreeRegistration.setMoney(BigDecimal.ZERO);
@@ -176,7 +218,6 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
                         degreeRegistration.setMoney(degreeRegistration.getMoney().divide(new BigDecimal(2), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN));
                     }
                     highUnitPrice = practiceGroupSellPrice.getHighOnlineTenCourseActivityPriceWithNewUser();
-
                 }
                 if(vipMoreThan2&&additionCourseInfo.containsKey(CourseSchedule.CourseScheduleType.HIGH)){
                     degreeRegistration.setTheoryMoney(BigDecimal.ZERO);
@@ -223,6 +264,7 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
         studentPaymentOrder.setExpectAmount(amount);
         studentPaymentOrder.setActualAmount(amount);
         studentPaymentOrder.setStatus(DealStatusEnum.ING);
+        studentPaymentOrder.setClassGroupId(degreeRegistration.getId());
         if(Objects.nonNull(degreeRegistration.getSporadicId())){
             studentPaymentOrder.setMusicGroupId(degreeRegistration.getSporadicId().toString());
         }
@@ -283,7 +325,7 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
 
     @Override
     public Boolean updateStatus(StudentPaymentOrder studentPaymentOrder) {
-        DegreeRegistration degree = degreeRegistrationDao.getLock(studentPaymentOrder.getUserId());
+        DegreeRegistration degree = degreeRegistrationDao.getLock(studentPaymentOrder.getClassGroupId());
 
         int updateCount = studentPaymentOrderService.update(studentPaymentOrder);
         if (updateCount <= 0) {

+ 18 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/GoodsServiceImpl.java

@@ -235,6 +235,24 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 						}
 						continue;
 					}
+					if (columnValue.equals("educationalShow")) {
+						for (YesOrNoEnum yesOrNoEnum : YesOrNoEnum.values()) {
+							if (yesOrNoEnum.getMsg().equals(row.get(s).toString())) {
+								objectMap.put(columnValue, yesOrNoEnum);
+								break;
+							}
+						}
+						continue;
+					}
+					if (columnValue.equals("musicGroupShow")) {
+						for (YesOrNoEnum yesOrNoEnum : YesOrNoEnum.values()) {
+							if (yesOrNoEnum.getMsg().equals(row.get(s).toString())) {
+								objectMap.put(columnValue, yesOrNoEnum);
+								break;
+							}
+						}
+						continue;
+					}
 					if (columnValue.equals("clientShow")) {
 						for (YesOrNoEnum yesOrNoEnum : YesOrNoEnum.values()) {
 							if (yesOrNoEnum.getMsg().equals(row.get(s).toString())) {

+ 5 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -1294,6 +1294,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         Map<CourseSchedule.CourseScheduleType, List<CourseSchedule>> typeCourseMap = new HashMap<>();
         if(Objects.nonNull(classGroupId)){
             List<CourseSchedule> classGroupNotStartCourse = courseScheduleDao.getClassGroupNotStartCourse(classGroupId);
+            courseScheduleService.mergeCourseReplace(classGroupNotStartCourse);
             typeCourseMap = classGroupNotStartCourse.stream().collect(Collectors.groupingBy(CourseSchedule::getType));
             for (Map.Entry<CourseSchedule.CourseScheduleType, List<CourseSchedule>> typeCoursesEntry : typeCourseMap.entrySet()) {
                 int totalCourseDuration = 0;
@@ -1439,16 +1440,16 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             throw new BizException("学员注册信息不存在");
         }
 
-        if(BigDecimal.ZERO.compareTo(amount)==0){
-            return BigDecimal.ZERO;
-        }
-
         if(BigDecimal.ZERO.compareTo(amount)>0&&amount.abs().compareTo(studentRegistration.getSurplusCourseFee())>0){
             amount = studentRegistration.getSurplusCourseFee().negate();
         }
 
         studentRegistration.setSurplusCourseFee(studentRegistration.getSurplusCourseFee().add(amount));
 
+        if(BigDecimal.ZERO.compareTo(amount)==0){
+            return BigDecimal.ZERO;
+        }
+
         StudentCourseFeeDetail studentCourseFeeDetail = new StudentCourseFeeDetail();
         studentCourseFeeDetail.setStudentRegistrationId(studentRegistration.getId());
         studentCourseFeeDetail.setAmount(amount);

+ 2 - 1
mec-biz/src/main/resources/config/mybatis/CourseScheduleComplaintsMapper.xml

@@ -120,9 +120,10 @@
 		<result property="reason" column="reason_"/>
 		<result property="score" column="score_"/>
 		<result property="avatar" column="avatar_"/>
+		<result property="userId" column="user_id_"/>
 	</resultMap>
 	<select id="findByCourseScheduleId" resultMap="CourseScheduleComplaintsDtoMap">
-		SELECT su.username_,csc.reason_,csc.score_,su.avatar_
+		SELECT su.username_,csc.reason_,csc.score_,su.avatar_,su.id_ user_id_
 		FROM course_schedule_complaints csc
 		LEFT JOIN sys_user su ON su.id_ = csc.user_id_
 		WHERE csc.course_schedule_id_ = #{courseScheduleId}

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

@@ -1224,7 +1224,7 @@
         <foreach collection="list" item="item" index="index" open="" close="" separator=";">
             UPDATE course_schedule
             <set>
-                <if test="item.newCourseId != null">
+                <if test="item.newCourseId != null and item.newCourseId > 0">
                     new_course_id_ = #{item.newCourseId},
                 </if>
                 <if test="item.classDate != null">
@@ -1560,7 +1560,7 @@
     <!-- 查找班级未开始的课程 -->
     <select id="findCoursesByClassGroupId" resultMap="CourseSchedule">
         SELECT * FROM course_schedule
-        WHERE class_group_id_ = #{classGroupId}
+        WHERE class_group_id_ = #{classGroupId} and (new_course_id_ is null or new_course_id_ = 0)
         <if test="status != null">
             and status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
         </if>
@@ -3338,7 +3338,7 @@
 		SELECT a.course_type_,SUM(remain_minutes_) remain_minutes_ FROM 
 		(SELECT cs.type_ course_type_,SUM(TIMESTAMPDIFF(MINUTE,STR_TO_DATE(concat(cs.class_date_,' ',cs.start_class_time_),'%Y-%m-%d %H:%i:%s'),
         STR_TO_DATE(concat(cs.class_date_,' ',cs.end_class_time_),'%Y-%m-%d %H:%i:%s'))) remain_minutes_
-		from course_schedule cs where FIND_IN_SET(cs.class_group_id_,#{classgroupId}) and cs.status_ = 'NOT_START' group by cs.type_
+		from course_schedule cs where FIND_IN_SET(cs.class_group_id_,#{classgroupId}) and cs.status_ = 'NOT_START' and (cs.new_course_id_ is null or cs.new_course_id_ = 0) group by cs.type_
 		UNION  
 		SELECT ncs.type_ course_type_,SUM(TIMESTAMPDIFF(MINUTE,STR_TO_DATE(concat(ncs.class_date_,' ',ncs.start_class_time_),'%Y-%m-%d %H:%i:%s'),
         STR_TO_DATE(concat(ncs.class_date_,' ',ncs.end_class_time_),'%Y-%m-%d %H:%i:%s'))) remain_minutes_ FROM course_schedule cs LEFT JOIN course_schedule ncs ON ncs.id_ = cs.new_course_id_ 

+ 3 - 2
mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml

@@ -631,8 +631,9 @@
 		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
 		WHERE
 			cssp.batch_no_ IS NOT NULL
-			AND ((cs.status_ = 'OVER' AND (cssp.actual_price_ IS NULL OR cssp.actual_price_ != cssp.expect_price_))
-			OR ( cs.status_ = 'NOT_START' AND (cssp.actual_price_ IS NOT NULL AND cssp.actual_price_ &gt; 0)))
+			AND cs.id_ IS NOT NULL
+			AND ((cs.status_ = 'OVER' AND (cssp.actual_price_ IS NULL OR cssp.actual_price_ &lt; cssp.expect_price_))
+			OR ( cs.status_ = 'NOT_START' AND cssp.actual_price_ IS NOT NULL AND cssp.actual_price_ &gt; 0))
 	</select>
 	<select id="queryCourseByIdsAndStudentId" resultMap="CourseScheduleStudentPayment">
 		SELECT cssp.* FROM course_schedule_student_payment cssp

+ 16 - 7
mec-biz/src/main/resources/config/mybatis/DegreeRegistrationMapper.xml

@@ -225,7 +225,7 @@
 
     <select id="getWithUserIdAndActivityTag" resultMap="DegreeRegistration">
         select *
-        from degree_registration
+            from degree_registration
         where
             user_id_ = #{degree.userId}
             AND activity_tag_=#{degree.activityTag}
@@ -240,13 +240,22 @@
             </if>
     </select>
 
-    <select id="getWithSubjectAndLevel" resultMap="DegreeRegistration">
+    <select id="getWithLevel" resultMap="DegreeRegistration">
         select *
-        from degree_registration
+            from degree_registration
+        where
+            user_id_ = #{degree.userId}
+            AND activity_tag_=#{degree.activityTag}
+            AND (sporadic_id_ = #{degree.sporadicId} OR theory_level_ = #{degree.theoryLevel})
+    </select>
+
+    <select id="getUserLevelDegrees" resultMap="DegreeRegistration">
+        select *
+            from degree_registration
         where
-        user_id_ = #{degree.userId}
-        AND activity_tag_=#{degree.activityTag}
-        AND subject_ = #{degree.subject}
-        AND (sporadic_id_ = #{degree.sporadicId} OR theory_level_ = #{degree.theoryLevel})
+            user_id_ = #{userId}
+            AND activity_tag_=#{activityTag}
+            AND (sporadic_id_ IS NOT NULL OR theory_level_ IS NOT NULL)
+            AND status_=2
     </select>
 </mapper>

+ 26 - 3
mec-biz/src/main/resources/config/mybatis/GoodsMapper.xml

@@ -36,6 +36,8 @@
         <result column="supply_channel_" property="supplyChannel" />
         <result column="stock_type_" property="stockType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="client_show_" property="clientShow" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="educational_show_" property="educationalShow" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="music_group_show_" property="musicGroupShow" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="stock_warning_" property="stockWarning" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
     </resultMap>
 
@@ -59,25 +61,28 @@
         INSERT INTO goods
         (goods_category_id_,sn_,name_,brand_,specification_,image_,stock_count_,tax_stock_count_,sell_count_,market_price_,
         discount_price_,group_purchase_price_,brief_,desc_,is_new_,is_top_,status_,memo_,publish_time_,
-        complement_goods_id_list_,update_time_,create_time_,type_,agree_cost_price_,client_show_,stock_warning_,stock_type_)
+        complement_goods_id_list_,update_time_,create_time_,type_,agree_cost_price_,client_show_,educational_show_,music_group_show_,stock_warning_,stock_type_)
         VALUES(#{goodsCategoryId},#{sn},#{name},#{brand},#{specification},#{image},#{stockCount},#{taxStockCount},#{sellCount},#{marketPrice},
         #{discountPrice},#{groupPurchasePrice},#{brief},#{desc},
         #{isNew,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{isTop,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
         #{memo},#{publishTime},#{complementGoodsIdList},now(),now(),#{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{agreeCostPrice},
-        #{clientShow,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{stockWarning,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+        #{clientShow,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{educationalShow,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+        #{musicGroupShow,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{stockWarning,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
         #{stockType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
     </insert>
     <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
         INSERT INTO goods
         (goods_category_id_,name_,brand_,specification_,image_,market_price_,
         discount_price_,group_purchase_price_,brief_,desc_,update_time_,create_time_,type_,agree_cost_price_,sn_,
-        stock_count_,tax_stock_count_,client_show_,stock_warning_,stock_type_)
+        stock_count_,tax_stock_count_,client_show_,educational_show_,music_group_show_,stock_warning_,stock_type_)
         VALUES
         <foreach collection="list" separator="," item="goods">
             (#{goods.goodsCategoryId},#{goods.name},#{goods.brand},#{goods.specification},#{goods.image},#{goods.marketPrice},
             #{goods.discountPrice},#{goods.groupPurchasePrice},#{goods.brief},#{goods.desc},now(),now(),
             #{goods.type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{goods.agreeCostPrice},#{goods.sn},
             #{goods.stockCount},#{goods.taxStockCount},#{goods.clientShow,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            #{goods.educationalShow,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+        	#{goods.musicGroupShow,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             #{goods.stockWarning,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             #{goods.stockType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
         </foreach>
@@ -155,6 +160,12 @@
             <if test="clientShow != null">
                 client_show_ = #{clientShow,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
+            <if test="educationalShow != null">
+                educational_show_ = #{educationalShow,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
+            <if test="musicGroupShow != null">
+                music_group_show_ = #{musicGroupShow,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
             <if test="stockWarning != null">
                 stock_warning_ = #{stockWarning,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
@@ -239,6 +250,12 @@
                 <if test="goods.clientShow != null">
                     client_show_ = #{goods.clientShow,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
                 </if>
+	            <if test="goods.educationalShow != null">
+	                educational_show_ = #{goods.educationalShow,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+	            </if>
+	            <if test="goods.musicGroupShow != null">
+	                music_group_show_ = #{goods.musicGroupShow,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+	            </if>
                 <if test="goods.stockWarning != null">
                     stock_warning_ = #{goods.stockWarning,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
                 </if>
@@ -296,6 +313,12 @@
             <if test="clientShow!=null">
                 AND g.client_show_=#{clientShow}
             </if>
+            <if test="educationalShow!=null">
+                AND g.educational_show_=#{educationalShow}
+            </if>
+            <if test="musicGroupShow!=null">
+                AND g.music_group_show_=#{musicGroupShow}
+            </if>
             <if test="search!=null and search!=''">
                 AND (g.sn_=#{search} OR g.id_=#{search} OR g.name_ LIKE CONCAT('%', #{search}, '%'))
             </if>

+ 8 - 0
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderDetailMapper.xml

@@ -273,4 +273,12 @@
             #{orderDetailType}
         </foreach>
     </select>
+
+    <select id="getWithUserAndOrderType" resultMap="StudentPaymentOrderDetail">
+        SELECT spod.* FROM student_payment_order_detail spod
+        LEFT JOIN student_payment_order spo ON spo.id_=spod.payment_order_id_
+        WHERE spo.user_id_= #{userId}
+        AND spod.type_ = #{orderType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+        AND spo.status_='SUCCESS'
+    </select>
 </mapper>

+ 52 - 23
mec-student/src/main/java/com/ym/mec/student/controller/DegreeController.java

@@ -1,19 +1,15 @@
 package com.ym.mec.student.controller;
 
 
+import com.alibaba.fastjson.JSON;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.DegreeRegistrationDao;
-import com.ym.mec.biz.dal.dao.OrganizationDao;
-import com.ym.mec.biz.dal.dao.SporadicChargeInfoDao;
-import com.ym.mec.biz.dal.dao.StudentDao;
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.DegreeRegistrationActivityDto;
 import com.ym.mec.biz.dal.dto.SporadicPayDto;
-import com.ym.mec.biz.dal.entity.DegreeRegistration;
-import com.ym.mec.biz.dal.entity.Employee;
-import com.ym.mec.biz.dal.entity.SporadicChargeInfo;
-import com.ym.mec.biz.dal.entity.Student;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.biz.dal.enums.SporadicChargeTypeEnum;
 import com.ym.mec.biz.dal.page.SporadicChargeInfoQueryInfo;
 import com.ym.mec.biz.service.DegreeRegistrationService;
@@ -42,9 +38,6 @@ import java.util.*;
 public class DegreeController extends BaseController {
 
     @Autowired
-    private StudentPaymentOrderService studentPaymentOrderService;
-
-    @Autowired
     private DegreeRegistrationDao degreeRegistrationDao;
 
     @Autowired
@@ -65,6 +58,9 @@ public class DegreeController extends BaseController {
     @Autowired
     private OrganizationDao organizationDao;
 
+    @Autowired
+    private StudentPaymentOrderDetailDao studentPaymentOrderDetailDao;
+
     @ApiOperation(value = "考级报名支付")
     @PostMapping("/pay")
     public HttpResponseResult pay(@RequestBody DegreeRegistrationActivityDto degreeRegistration) throws Exception {
@@ -106,9 +102,16 @@ public class DegreeController extends BaseController {
             return failed(HttpStatus.FORBIDDEN,"请登录");
         }
         degreeRegistration.setUserId(user.getId());
+        degreeRegistration.setActivityTag(DegreeRegistrationService.ACTIVITY_TAG);
         studentDao.getLocked(degreeRegistration.getUserId());
-        DegreeRegistration degree = degreeRegistrationDao.getWithSubjectAndLevel(degreeRegistration);
-        if(Objects.nonNull(degree) && degree.getStatus().equals(2)){
+        List<DegreeRegistration> userLevelDegrees = degreeRegistrationDao.getUserLevelDegrees(degreeRegistration.getUserId(), DegreeRegistrationService.ACTIVITY_TAG);
+        long levelNum = userLevelDegrees.stream().filter(d -> Objects.nonNull(d.getSporadicId())).count();
+        long theoryLevelNum = userLevelDegrees.stream().filter(d -> Objects.nonNull(d.getTheoryLevel())).count();
+
+        if(Objects.nonNull(degreeRegistration.getSporadicId())&&levelNum>0){
+            return failed(HttpStatus.CREATED, "您已报考过选择的考级项目");
+        }
+        if(Objects.nonNull(degreeRegistration.getTheoryLevel())&&theoryLevelNum>0){
             return failed(HttpStatus.CREATED, "您已报考过选择的考级项目");
         }
         return succeed();
@@ -130,7 +133,7 @@ public class DegreeController extends BaseController {
     @GetMapping("/getParams")
     public HttpResponseResult getParams(){
         SysUser user = sysUserFeignService.queryUserInfo();
-        if(Objects.isNull(user)){
+        if(Objects.isNull(user)||Objects.isNull(user.getId())){
             return failed(HttpStatus.FORBIDDEN,"请登录");
         }
 
@@ -144,20 +147,46 @@ public class DegreeController extends BaseController {
 
         Map<String, Object> result = new HashMap<>();
 
-//        DegreeRegistration degreeRegistration = degreeRegistrationDao.getWithUserIdAndActivityTag(user.getId(), DegreeRegistrationService.ACTIVITY_TAG);
-
         Student student = studentDao.get(user.getId());
         result.put("userInfo", user);
         result.put("isNewUser", student.getIsNewUser());
         result.put("organs", organizationDao.getActivityOrgans());
         result.put("sporadicChargeInfo", sporadicChargeInfoService.queryDetailPage(queryInfo));
-//        if(Objects.isNull(degreeRegistration)||degreeRegistration.getStatus()==0){
-//            result.put("isApplied", 0);
-//        }else if(degreeRegistration.getStatus()==1){
-//            result.put("isApplied", 1);
-//        }else if(degreeRegistration.getStatus()==2){
-//            result.put("isApplied", 2);
-//        }
+
+        List<DegreeRegistration> userLevelDegrees = degreeRegistrationDao.getUserLevelDegrees(user.getId(), DegreeRegistrationService.ACTIVITY_TAG);
+        long levelNum = userLevelDegrees.stream().filter(d -> Objects.nonNull(d.getSporadicId())).count();
+        long theoryLevelNum = userLevelDegrees.stream().filter(d -> Objects.nonNull(d.getTheoryLevel())).count();
+
+        result.put("levelApplied", levelNum>0?1:0);
+        result.put("theoryLevelApplied", theoryLevelNum>0?1:0);
+
+        List<StudentPaymentOrderDetail> historyOrderDetails = studentPaymentOrderDetailDao.getWithUserAndOrderType(user.getId(), OrderTypeEnum.DEGREE_REGISTRATION);
+        int historyVipNum = 0, historyPracticeNum = 0, historyHighNum = 0;
+        for (StudentPaymentOrderDetail historyOrderDetail : historyOrderDetails) {
+            if(StringUtils.isBlank(historyOrderDetail.getGoodsIdList())){
+                continue;
+            }
+            Map<String, Integer> courseNumMap = JSON.parseObject(historyOrderDetail.getGoodsIdList(), Map.class);
+            for (Map.Entry<String, Integer> stringIntegerEntry : courseNumMap.entrySet()) {
+                switch (stringIntegerEntry.getKey()){
+                    case "VIP":
+                        historyVipNum = historyVipNum + stringIntegerEntry.getValue();
+                        break;
+                    case "PRACTICE":
+                        historyPracticeNum = historyPracticeNum + stringIntegerEntry.getValue();
+                        break;
+                    case "HIGH":
+                        historyHighNum = historyHighNum + stringIntegerEntry.getValue();
+                        break;
+                }
+            }
+        }
+        Map<String, Integer> historyCourseInfo = new HashMap<>();
+        historyCourseInfo.put(CourseSchedule.CourseScheduleType.VIP.getCode(), historyVipNum);
+        historyCourseInfo.put(CourseSchedule.CourseScheduleType.PRACTICE.getCode(), historyPracticeNum);
+        historyCourseInfo.put(CourseSchedule.CourseScheduleType.HIGH.getCode(), historyHighNum);
+        result.put("historyCourseInfo", historyCourseInfo);
+
         return succeed(result);
     }
 }

+ 4 - 0
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -75,6 +75,8 @@ public class StudentOrderController extends BaseController {
     private StudentGoodsSellDao studentGoodsSellDao;
     @Autowired
     private LuckDrawCountService luckDrawCountService;
+    @Autowired
+    private DegreeRegistrationDao degreeRegistrationDao;
 
 
     @Value("${spring.profiles.active:dev}")
@@ -144,6 +146,8 @@ public class StudentOrderController extends BaseController {
                 LuckDrawCount luckDrawCount = luckDrawCountService.get(orderByOrderNo.getUserId().longValue());
                 orderDetail.put("drawTimes", luckDrawCount==null? 0: luckDrawCount.getAvailableCount());
             }else if(OrderTypeEnum.DEGREE_REGISTRATION.equals(orderByOrderNo.getType())){
+                DegreeRegistration degreeRegistration = degreeRegistrationDao.get(orderByOrderNo.getClassGroupId());
+                orderDetail.put("degree", degreeRegistration);
                 List<StudentPaymentOrderDetail> studentPaymentOrderDetails = studentPaymentOrderDetailService.getOrderDetail(orderByOrderNo.getId());
                 if(!CollectionUtils.isEmpty(studentPaymentOrderDetails)){
                     orderDetail.put("additionCourseInfo", studentPaymentOrderDetails.get(0).getGoodsIdList());

+ 1 - 1
mec-web/src/main/java/com/ym/mec/web/controller/ImportController.java

@@ -71,7 +71,7 @@ public class ImportController extends BaseController {
     @GetMapping(value = "downloadTemplate")
     @PreAuthorize("@pcs.hasPermissions('import/downloadTemplate')")
     public void getGoodsTemplate(HttpServletResponse response, TemplateTypeEnum templateType) throws IOException {
-        InputStream inputStream = new ClassPathResource("excelTemplate/" + templateType.getMsg() + ".xlsx").getInputStream();
+        InputStream inputStream = new ClassPathResource("excelTemplate/" + templateType.getMsg() + ".xls").getInputStream();
         OutputStream outputStream = response.getOutputStream();
         try {
             response.setContentType("application/octet-stream");

+ 2 - 0
mec-web/src/main/resources/columnMapper.ini

@@ -16,6 +16,8 @@
 税务库存 = taxStockCount
 备查货号 = supplyChannel
 是否App展示 = clientShow
+是否在教务端展示 = educationalShow
+是否在乐团展示 = musicGroupShow
 库存类型 = stockType
 商品详情 = desc
 库存预警 = stockWarning

BIN
mec-web/src/main/resources/excelTemplate/商品导入模板.xls


+ 0 - 0
mec-web/src/main/resources/excelTemplate/财务管理导入模板.xlsx → mec-web/src/main/resources/excelTemplate/财务管理导入模板.xls