Przeglądaj źródła

Merge branch 'master' into review-zjh

# Conflicts:
#	mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java
#	mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
周箭河 5 lat temu
rodzic
commit
d2b4818e26
29 zmienionych plików z 797 dodań i 197 usunięć
  1. 2 2
      cms/src/main/java/com/ym/mec/cms/service/impl/SysNewsInformationServiceImpl.java
  2. 7 1
      cms/src/main/resources/application.yml
  3. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/DegreeRegistrationDao.java
  4. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentCalenderDetailDao.java
  5. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupStudentFeeDao.java
  6. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java
  7. 53 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PageInfoDegree.java
  8. 15 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/DegreeRegistration.java
  9. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/PaymentStatusEnum.java
  10. 258 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/DegreeQueryInfo.java
  11. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/DegreeRegistrationService.java
  12. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderService.java
  13. 57 19
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java
  14. 5 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderDetailServiceImpl.java
  15. 37 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  16. 26 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  17. 180 116
      mec-biz/src/main/resources/config/mybatis/DegreeRegistrationMapper.xml
  18. 8 1
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderDetailMapper.xml
  19. 7 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupStudentFeeMapper.xml
  20. 3 3
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  21. 7 0
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  22. 1 1
      mec-im/src/main/java/com/ym/mec/im/IMHelper.java
  23. 1 0
      mec-im/src/main/java/com/ym/mec/im/message/MetronomeMessageMessage.java
  24. 10 0
      mec-im/src/main/java/com/ym/pojo/CustomMessage.java
  25. 11 4
      mec-web/src/main/java/com/ym/mec/web/config/ResourceServerConfig.java
  26. 0 27
      mec-web/src/main/java/com/ym/mec/web/config/WebMvcConfig.java
  27. 2 2
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderController.java
  28. 0 3
      mec-web/src/main/java/com/ym/mec/web/controller/UploadFileController.java
  29. 62 0
      mec-web/src/main/java/com/ym/mec/web/controller/education/EduDegreeController.java

+ 2 - 2
cms/src/main/java/com/ym/mec/cms/service/impl/SysNewsInformationServiceImpl.java

@@ -33,7 +33,7 @@ public class SysNewsInformationServiceImpl extends BaseServiceImpl<Long, SysNews
 	
 	@Autowired
 	private WebFeignService webFeignService;
-	
+
 	@Value("${cms.server.context.path}")
 	private String serverContextPath;
 	
@@ -167,4 +167,4 @@ public class SysNewsInformationServiceImpl extends BaseServiceImpl<Long, SysNews
 		return pageInfo;
 	}
 
-}
+}

+ 7 - 1
cms/src/main/resources/application.yml

@@ -76,4 +76,10 @@ management:
 
 ribbon:  
     ReadTimeout: 60000  
-    ConnectTimeout: 60000
+    ConnectTimeout: 60000
+
+
+cms:
+  server:
+    context:
+      path: http://admin.dayaedu.com/

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

@@ -4,10 +4,14 @@ import com.ym.mec.biz.dal.entity.DegreeRegistration;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+import java.util.Map;
+
 public interface DegreeRegistrationDao extends BaseDAO<Integer, DegreeRegistration> {
 
     DegreeRegistration findByMobileAndSporadicId(@Param("mobile") String mobile, @Param("sporadicId") Integer sporadicId);
 
     DegreeRegistration getLock(@Param("id") Integer id);
 
+    DegreeRegistration getTotalAmount(Map<String, Object> params);
 }

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

@@ -8,6 +8,7 @@ import org.apache.ibatis.annotations.Param;
 import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 public interface MusicGroupPaymentCalenderDetailDao extends BaseDAO<Long, MusicGroupPaymentCalenderDetail> {
 
@@ -113,4 +114,17 @@ public interface MusicGroupPaymentCalenderDetailDao extends BaseDAO<Long, MusicG
 	 * @param musicGroupId
 	 */
 	void deleteByUserIdAndMusicGroupId(@Param("userId") Integer userId, @Param("musicGroupId") String musicGroupId);
+
+	/**
+	 * 根据缴费记录删除缴费详情
+	 * @param id
+	 */
+    void deleteByCalenderId(@Param("id") Long id);
+
+	/**
+	 * 获取缴费详情学员列表
+	 * @param calenderId
+	 * @return
+	 */
+	Set<Integer> queryStudentIds(Long calenderId);
 }

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupStudentFeeDao.java

@@ -202,4 +202,11 @@ public interface MusicGroupStudentFeeDao extends BaseDAO<Long, MusicGroupStudent
 	 * @return
 	 */
     List<FeeStudentDto> queryFeeStudents(@Param("musicGroupId") String musicGroupId, @Param("search") String search, @Param("subjectId") Integer subjectId);
+
+	/**
+	 * 根据缴费项目修改缴费状态
+	 * @param calenderId
+	 * @param paymentStatus
+	 */
+	void updatePaymentStatus(@Param("calenderId") Long calenderId, @Param("paymentStatus") String paymentStatus);
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java

@@ -280,4 +280,15 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
      * @return
      */
     BigDecimal sumAccountAmount(@Param("merNo") String merNo, @Param("firstDate") Date firstDate);
+
+    /**
+     * @describe 统计课程组非失败订单数量
+     * @author Joburgess
+     * @date 2020.06.22
+     * @param groupId:
+     * @param groupType:
+     * @return int
+     */
+    int countGroupOrderWithoutFailed(@Param("groupId") String groupId,
+                                       @Param("groupType") GroupType groupType);
 }

+ 53 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PageInfoDegree.java

@@ -0,0 +1,53 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.common.page.PageInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+
+public class PageInfoDegree<T> extends PageInfo<T> {
+
+    @ApiModelProperty(value = "考级费用总额", required = true)
+    private BigDecimal subjectLevelAmount =BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "乐理考级总额", required = true)
+    private BigDecimal theoryLevelAmount =BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "考级总金额", required = true)
+    private BigDecimal totalAmount = BigDecimal.ZERO;
+
+    public PageInfoDegree() {
+    }
+
+    public PageInfoDegree(Integer pageNo) {
+        super(pageNo);
+    }
+
+    public PageInfoDegree(Integer pageNo, int pageSize) {
+        super(pageNo, pageSize);
+    }
+
+    public BigDecimal getSubjectLevelAmount() {
+        return subjectLevelAmount;
+    }
+
+    public void setSubjectLevelAmount(BigDecimal subjectLevelAmount) {
+        this.subjectLevelAmount = subjectLevelAmount;
+    }
+
+    public BigDecimal getTheoryLevelAmount() {
+        return theoryLevelAmount;
+    }
+
+    public void setTheoryLevelAmount(BigDecimal theoryLevelAmount) {
+        this.theoryLevelAmount = theoryLevelAmount;
+    }
+
+    public BigDecimal getTotalAmount() {
+        return totalAmount;
+    }
+
+    public void setTotalAmount(BigDecimal totalAmount) {
+        this.totalAmount = totalAmount;
+    }
+}

+ 15 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/DegreeRegistration.java

@@ -62,6 +62,13 @@ public class DegreeRegistration {
     @ApiModelProperty(value = "乐理级别",required = true)
     private String theoryLevel;
 
+
+    /**
+     * 乐理级别证书
+     */
+    @ApiModelProperty(value = "乐理级别证书",required = true)
+    private String theoryCert;
+
     /**
      * 家长联系电话
      */
@@ -250,4 +257,12 @@ public class DegreeRegistration {
     public void setTheoryMoney(BigDecimal theoryMoney) {
         this.theoryMoney = theoryMoney;
     }
+
+    public String getTheoryCert() {
+        return theoryCert;
+    }
+
+    public void setTheoryCert(String theoryCert) {
+        this.theoryCert = theoryCert;
+    }
 }

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

@@ -11,7 +11,7 @@ public enum PaymentStatusEnum implements BaseEnum<Integer, PaymentStatusEnum> {
 
 	private String desc;
 
-	private PaymentStatusEnum(Integer code, String desc) {
+	PaymentStatusEnum(Integer code, String desc) {
 		this.code = code;
 		this.desc = desc;
 	}

+ 258 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/DegreeQueryInfo.java

@@ -0,0 +1,258 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.biz.dal.enums.SporadicChargeTypeEnum;
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+public class DegreeQueryInfo extends QueryInfo {
+
+    private Integer id;
+
+    /**
+     * 零星支付id
+     */
+    @ApiModelProperty(value = "零星支付id", required = true)
+    private Integer sporadicId;
+
+    /**
+     * 姓名
+     */
+    @ApiModelProperty(value = "名字", required = true)
+    private String name;
+
+    /**
+     * 性别
+     */
+    @ApiModelProperty(value = "性别", required = true)
+    private String gender;
+
+    /**
+     * 身份证号
+     */
+    @ApiModelProperty(value = "身份证号", required = true)
+    private String idcard;
+
+    /**
+     * 城市
+     */
+    @ApiModelProperty(value = "城市", required = true)
+    private String city;
+
+    /**
+     * 学校
+     */
+    @ApiModelProperty(value = "学校", required = true)
+    private String school;
+
+    /**
+     * 乐器
+     */
+    @ApiModelProperty(value = "乐器", required = true)
+    private String subject;
+
+    /**
+     * 考试级别
+     */
+    @ApiModelProperty(value = "考试级别", required = true)
+    private String level;
+
+    /**
+     * 乐理级别
+     */
+    @ApiModelProperty(value = "乐理级别", required = true)
+    private String theoryLevel;
+
+
+    /**
+     * 乐理级别证书
+     */
+    @ApiModelProperty(value = "乐理级别证书", required = true)
+    private String theoryCert;
+
+    /**
+     * 家长联系电话
+     */
+    @ApiModelProperty(value = "家长联系电话", required = true)
+    private String mobile;
+
+    /**
+     * 考级费用
+     */
+    @ApiModelProperty(value = "收费标准", required = false)
+    private BigDecimal money;
+
+    /**
+     * 备注
+     */
+    @ApiModelProperty(value = "备注", required = false)
+    private String memo;
+
+    /**
+     * 乐理费用
+     */
+    @ApiModelProperty(value = "乐理费用", required = true)
+    private BigDecimal theoryMoney;
+
+    /**
+     * 报名时间
+     */
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
+    /**
+     * 0-未支付 1-支付中 2-支付中
+     */
+    private Integer status;
+
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getSporadicId() {
+        return sporadicId;
+    }
+
+    public void setSporadicId(Integer sporadicId) {
+        this.sporadicId = sporadicId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getGender() {
+        return gender;
+    }
+
+    public void setGender(String gender) {
+        this.gender = gender;
+    }
+
+    public String getIdcard() {
+        return idcard;
+    }
+
+    public void setIdcard(String idcard) {
+        this.idcard = idcard;
+    }
+
+    public String getCity() {
+        return city;
+    }
+
+    public void setCity(String city) {
+        this.city = city;
+    }
+
+    public String getSchool() {
+        return school;
+    }
+
+    public void setSchool(String school) {
+        this.school = school;
+    }
+
+    public String getSubject() {
+        return subject;
+    }
+
+    public void setSubject(String subject) {
+        this.subject = subject;
+    }
+
+    public String getTheoryLevel() {
+        return theoryLevel;
+    }
+
+    public void setTheoryLevel(String theoryLevel) {
+        this.theoryLevel = theoryLevel;
+    }
+
+    public String getMobile() {
+        return mobile;
+    }
+
+    public void setMobile(String mobile) {
+        this.mobile = mobile;
+    }
+
+    public BigDecimal getMoney() {
+        return money;
+    }
+
+    public void setMoney(BigDecimal money) {
+        this.money = money;
+    }
+
+    public String getMemo() {
+        return memo;
+    }
+
+    public void setMemo(String memo) {
+        this.memo = memo;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public String getLevel() {
+        return level;
+    }
+
+    public void setLevel(String level) {
+        this.level = level;
+    }
+
+    public BigDecimal getTheoryMoney() {
+        return theoryMoney;
+    }
+
+    public void setTheoryMoney(BigDecimal theoryMoney) {
+        this.theoryMoney = theoryMoney;
+    }
+
+    public String getTheoryCert() {
+        return theoryCert;
+    }
+
+    public void setTheoryCert(String theoryCert) {
+        this.theoryCert = theoryCert;
+    }
+}

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

@@ -1,6 +1,10 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dto.PageInfoDegree;
+import com.ym.mec.biz.dal.dto.PageInfoOrder;
 import com.ym.mec.biz.dal.entity.DegreeRegistration;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.page.DegreeQueryInfo;
 import com.ym.mec.common.service.BaseService;
 
 import java.util.Map;
@@ -10,4 +14,6 @@ public interface DegreeRegistrationService extends BaseService<Integer, DegreeRe
     Map pay(DegreeRegistration degreeRegistration) throws Exception;
 
     Boolean updateStatus(Integer id , Integer status);
+
+    PageInfoDegree<DegreeRegistration> getPageList(DegreeQueryInfo queryInfo);
 }

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

@@ -40,9 +40,10 @@ public interface MusicGroupPaymentCalenderService extends BaseService<Long, Musi
 	/**
 	 * 修改缴费日期
 	 * @param startTime
+	 * @param endTime
 	 * @param id
 	 */
-    void updateStartTime(Date startTime, Long id);
+    void updateStartTime(Date startTime,Date endTime,Long id);
 
 	/**
 	 * 删除

+ 57 - 19
mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java

@@ -3,18 +3,22 @@ package com.ym.mec.biz.service.impl;
 import com.ym.mec.biz.dal.dao.DegreeRegistrationDao;
 import com.ym.mec.biz.dal.dao.SporadicChargeInfoDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dto.PageInfoDegree;
+import com.ym.mec.biz.dal.dto.PageInfoOrder;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.OrderTypeEnum;
+import com.ym.mec.biz.dal.enums.SporadicChargeTypeEnum;
+import com.ym.mec.biz.dal.page.DegreeQueryInfo;
 import com.ym.mec.biz.service.DegreeRegistrationService;
 import com.ym.mec.biz.service.PayService;
 import com.ym.mec.biz.service.StudentPaymentOrderService;
-import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.util.collection.MapUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -58,20 +62,28 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
         if (chargeInfo == null) {
             throw new BizException("你选的考试级别不存在");
         }
+        if (chargeInfo.getTitle().equals("二级") && StringUtils.isBlank(degreeRegistration.getTheoryCert())) {
+            throw new BizException(chargeInfo.getTitle() + "考试必须上传证书");
+        }
         degreeRegistration.setLevel(chargeInfo.getTitle());
         BigDecimal theoryMoney = BigDecimal.ZERO;
-        if(degreeRegistration.getTheoryLevel().equals("一级")){
-            theoryMoney = new BigDecimal(200);
-        }else if(degreeRegistration.getTheoryLevel().equals("二级")){
-            theoryMoney = new BigDecimal(240);
-        }else if(degreeRegistration.getTheoryLevel().equals("三级")){
-            theoryMoney = new BigDecimal(280);
-        }else if(degreeRegistration.getTheoryLevel().equals("四级")){
-            theoryMoney = new BigDecimal(320);
-        }else if(degreeRegistration.getTheoryLevel().equals("免考")){
-
-        }else {
-            throw new BizException("您选择的乐理级别不存在,请核对");
+        switch (degreeRegistration.getTheoryLevel()) {
+            case "一级":
+                theoryMoney = new BigDecimal(200);
+                break;
+            case "二级":
+                theoryMoney = new BigDecimal(240);
+                break;
+            case "三级":
+                theoryMoney = new BigDecimal(280);
+                break;
+            case "四级":
+                theoryMoney = new BigDecimal(320);
+                break;
+            case "免考":
+                break;
+            default:
+                throw new BizException("您选择的乐理级别不存在,请核对");
         }
         degreeRegistration.setTheoryMoney(theoryMoney);
         DegreeRegistration degree = degreeRegistrationDao.findByMobileAndSporadicId(degreeRegistration.getMobile(), degreeRegistration.getSporadicId());
@@ -81,18 +93,18 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
             degreeRegistration.setCreateTime(nowDate);
             degreeRegistration.setUpdateTime(nowDate);
             degreeRegistrationDao.insert(degreeRegistration);
-        }else if (degree.getStatus().equals(2)){
-           throw  new BizException("您本次已报名,请勿重复报名");
-        }else {
+        } else if (degree.getStatus().equals(2)) {
+            throw new BizException("您本次已报名,请勿重复报名");
+        } else {
             degreeRegistration.setId(degree.getId());
             degreeRegistration.setStatus(1);
+            degreeRegistration.setCreateTime(nowDate);
             degreeRegistration.setUpdateTime(nowDate);
             degreeRegistrationDao.update(degreeRegistration);
         }
         degreeRegistrationDao.getLock(degreeRegistration.getId());
 
 
-
         BigDecimal amount = chargeInfo.getAmount();
         amount = amount.add(theoryMoney);
 
@@ -112,8 +124,8 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
         studentPaymentOrder.setMusicGroupId(degreeRegistration.getSporadicId().toString());
         studentPaymentOrder.setOrganId(chargeInfo.getOrganId());
         studentPaymentOrder.setRoutingOrganId(chargeInfo.getOrganId());
-        if(theoryMoney.compareTo(BigDecimal.ZERO) >0){
-            studentPaymentOrder.setMemo("乐理"+degreeRegistration.getTheoryLevel()+",费用:"+theoryMoney);
+        if (theoryMoney.compareTo(BigDecimal.ZERO) > 0) {
+            studentPaymentOrder.setMemo("乐理" + degreeRegistration.getTheoryLevel() + ",费用:" + theoryMoney);
         }
         studentPaymentOrderService.insert(studentPaymentOrder);
         studentPaymentOrder.setVersion(0);
@@ -175,4 +187,30 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
         }
         return true;
     }
+
+    @Override
+    public PageInfoDegree<DegreeRegistration> getPageList(DegreeQueryInfo queryInfo) {
+        PageInfoDegree<DegreeRegistration> pageInfo = new PageInfoDegree<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<DegreeRegistration> dataList = new ArrayList<>();
+        int count = this.findCount(params);
+
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = degreeRegistrationDao.queryPage(params);
+            DegreeRegistration degree = degreeRegistrationDao.getTotalAmount(params);
+            BigDecimal subjectLevelAmount = degree.getMoney() == null ? BigDecimal.ZERO : degree.getMoney();
+            BigDecimal theoryLevelAmount = degree.getTheoryMoney() == null ? BigDecimal.ZERO : degree.getTheoryMoney();
+            BigDecimal totalAmount = subjectLevelAmount.add(theoryLevelAmount);
+
+            pageInfo.setSubjectLevelAmount(subjectLevelAmount);
+            pageInfo.setTheoryLevelAmount(theoryLevelAmount);
+            pageInfo.setTotalAmount(totalAmount);
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
 }

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

@@ -121,13 +121,17 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 		if(calenderDetails.size() == 0){
 			return "操作失败,没有可以开启缴费的学员";
 		}
+		Long musicGroupPaymentCalenderId = calenderDetails.get(0).getMusicGroupPaymentCalenderId();
+		MusicGroupPaymentCalender calender = musicGroupPaymentCalenderDao.get(musicGroupPaymentCalenderId);
+		Date startPaymentDate = calender.getStartPaymentDate();
+		Date deadlinePaymentDate = calender.getDeadlinePaymentDate();
 		int length = ids.split(",").length;
 		Date date = new Date();
 		Iterator<MusicGroupPaymentCalenderDetail> iterator = calenderDetails.iterator();
 		MusicGroupPaymentCalenderDetail next;
 		while(iterator.hasNext()){
 			next = iterator.next();
-			int count1 = musicGroupPaymentCalenderDao.queryIntersectionByPaymentDate(next.getMusicGroupId(),date,date);
+			int count1 = musicGroupPaymentCalenderDao.queryIntersectionByPaymentDate(next.getMusicGroupId(),startPaymentDate,deadlinePaymentDate);
 			int count = musicGroupPaymentCalenderDetailDao.queryIntersectionByPaymentDate(next.getMusicGroupId(),next.getUserId());
 			if(count > 0 || count1 > 0){
 				iterator.remove();

+ 37 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -182,8 +182,8 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 		List<MusicGroupPaymentCalenderDetail> updateMusicGroupPaymentCalenderDetailList = new ArrayList<MusicGroupPaymentCalenderDetail>();
 
 		for (MusicGroupPaymentCalender mgpc : musicGroupPaymentCalenderList) {
-
-			List<MusicGroupStudentFee> musicGroupStudentFeeList = musicGroupStudentFeeDao.queryByMusicGroupId(mgpc.getMusicGroupId(),null);
+			Set<Integer> studentIds = musicGroupPaymentCalenderDetailDao.queryStudentIds(mgpc.getId());
+			List<MusicGroupStudentFee> musicGroupStudentFeeList = musicGroupStudentFeeDao.queryByMusicGroupId(mgpc.getMusicGroupId(),StringUtils.join(studentIds,","));
 			Map<Integer, MusicGroupStudentFee> feeMap = musicGroupStudentFeeList.stream()
 					.collect(Collectors.toMap(MusicGroupStudentFee::getUserId, fee -> fee));
 
@@ -220,7 +220,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 				updateMusicGroupPaymentCalenderList.add(mgpc);
 
 				// 学生状态更新进行中
-				Set<Integer> studentIds = new HashSet<Integer>();
+//				Set<Integer> studentIds = new HashSet<Integer>();
 				// 创建缴费明细
 				/*for (MusicGroupStudentFee mgsf : musicGroupStudentFeeList) {
 					if (mgsf.getPaymentStatus() != PaymentStatus.PAID_COMPLETED) {
@@ -338,8 +338,8 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public void updateStartTime(Date startTime, Long id) {
-		if (startTime == null || id == null) {
+	public void updateStartTime(Date startTime,Date endTime,Long id) {
+		if (startTime == null || id == null || endTime == null) {
 			throw new BizException("参数校验失败");
 		}
 		MusicGroupPaymentCalender calender = musicGroupPaymentCalenderDao.get(id);
@@ -349,9 +349,38 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 		if (calender.getPaymentStatus() == null || calender.getPaymentStatus() != NO) {
 			throw new BizException("修改失败,缴费状态不匹配");
 		}
+		Date date = new Date();
+		// 判断缴费开始时间、结束时间是否被其他缴费记录占用
+		int count = musicGroupPaymentCalenderDao.queryIntersectionByPaymentDate(calender.getMusicGroupId(), startTime,endTime);
+		if (count > 1) {
+			throw new BizException("缴费时间存在冲突,请修改缴费开始日期");
+		}
 		calender.setStartPaymentDate(startTime);
-		calender.setDeadlinePaymentDate(DateUtil.addDays(startTime, 3));
-		calender.setUpdateTime(new Date());
+		calender.setDeadlinePaymentDate(endTime);
+		calender.setUpdateTime(date);
+		if (date.after(endTime)) {
+			calender.setPaymentStatus(PaymentStatusEnum.YES);
+		} else if (date.after(startTime)) {
+			calender.setPaymentStatus(PaymentStatusEnum.OPEN);
+			//修改Fee缴费状态为未缴费
+			musicGroupStudentFeeDao.updatePaymentStatus(calender.getId(),"NON_PAYMENT");
+			List<MusicGroupPaymentCalenderDetail> details = musicGroupPaymentCalenderDetailDao.queryByCalenderId(calender.getId());
+			Set<Integer> studentIds = details.stream().map(e -> e.getUserId()).collect(Collectors.toSet());
+			if (studentIds.size() > 0) {
+				Map<Integer, String> push = new HashMap<>();
+				for (Integer userId : studentIds) {
+					push.put(userId, userId + "");
+				}
+				MusicGroup musicGroup = musicGroupDao.get(calender.getMusicGroupId());
+				String configValue = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
+				String memo = "4?" + configValue + "/#/renew?musicGroupId=" + musicGroup.getId();
+				// 发送续费通知
+				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_WAIT_RENEW_MESSAGE, push,
+						null, 0, memo, "STUDENT", musicGroup.getName());
+			}
+		} else {
+			calender.setPaymentStatus(PaymentStatusEnum.NO);
+		}
 		musicGroupPaymentCalenderDao.update(calender);
 	}
 
@@ -369,6 +398,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 			throw new BizException("删除失败,缴费状态不匹配");
 		}
 		musicGroupPaymentCalenderDao.delete(id);
+		musicGroupPaymentCalenderDetailDao.deleteByCalenderId(id);
 	}
 
 	@Override

+ 26 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -1058,6 +1058,16 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				throw new BizException("您无法购买此课程");
 			}
 		}
+
+		ClassGroup classGroup = classGroupDao.findByVipGroup(vipGroupId.longValue(), null);
+
+		if(classGroup.getStudentNum()>0&&(VipGroupStatusEnum.APPLYING.equals(vipGroup.getStatus()))){
+			int i = studentPaymentOrderDao.countGroupOrderWithoutFailed(vipGroupId.toString(), GroupType.VIP);
+			if(i<=0){
+				throw new BizException("该课程已经无法通过购买加入,请联系教务老师!");
+			}
+		}
+
 		List<CourseSchedule> courseSchedules = JSON.parseArray(vipGroup.getCourseSchedulesJson(),CourseSchedule.class);
 		courseScheduleService.checkNewCourseSchedules(courseSchedules,false);
 	}
@@ -1170,6 +1180,14 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
         VipGroup vipGroup = vipGroupDao.get(vipGroupBuyParams.getVipGroupId());
 
+
+		if(classGroup.getStudentNum()>0&&(VipGroupStatusEnum.APPLYING.equals(vipGroup.getStatus()))){
+			int i = studentPaymentOrderDao.countGroupOrderWithoutFailed(vipGroupBuyParams.getVipGroupId().toString(), GroupType.VIP);
+			if(i<=0){
+				throw new BizException("该课程已经无法通过购买加入,请联系教务老师!");
+			}
+		}
+
 		if(vipGroup.getPaymentExpireDate().before(date)){
 			throw new BizException("该课程已结束报名!");
 		}
@@ -2476,16 +2494,16 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		ClassGroup classGroup = classGroupDao.findByVipGroup(vipGroupId, null);
 
-		if(classGroup.getExpectStudentNum()>1
-				&&(VipGroupStatusEnum.APPLYING.equals(vipGroup.getStatus())
-				||VipGroupStatusEnum.APPLYING_END.equals(vipGroup.getStatus())
-				||VipGroupStatusEnum.NOT_START.equals(vipGroup.getStatus())
-				||VipGroupStatusEnum.FINISHED.equals(vipGroup.getStatus())
-				||VipGroupStatusEnum.CANCEL.equals(vipGroup.getStatus()))){
-			throw new BizException("VIP课程组尚未成立,无法添加学员,请走学员购买流程!");
+		if(classGroup.getStudentNum()>0&&(VipGroupStatusEnum.APPLYING.equals(vipGroup.getStatus()))){
+			int i = studentPaymentOrderDao.countGroupOrderWithoutFailed(vipGroupId.toString(), GroupType.VIP);
+			if(i>0){
+				throw new BizException("该课程组学员为购买加入,无法添加学员加入,请走学员走购买流程!");
+			}
 		}
 
-		if(VipGroupStatusEnum.PAUSE.equals(vipGroup.getStatus())){
+		if(VipGroupStatusEnum.PAUSE.equals(vipGroup.getStatus())
+				||VipGroupStatusEnum.FINISHED.equals(vipGroup.getStatus())
+				||VipGroupStatusEnum.CANCEL.equals(vipGroup.getStatus())){
 			throw new BizException("当前课程组已经停止,无法进行添加学员操作。");
 		}
 

+ 180 - 116
mec-biz/src/main/resources/config/mybatis/DegreeRegistrationMapper.xml

@@ -1,126 +1,190 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ym.mec.biz.dal.dao.DegreeRegistrationDao">
-  <resultMap id="DegreeRegistration" type="com.ym.mec.biz.dal.entity.DegreeRegistration">
-    <!--@mbg.generated-->
-    <!--@Table degree_registration-->
-    <id column="id_" jdbcType="INTEGER" property="id" />
-    <result column="sporadic_id_" jdbcType="INTEGER" property="sporadicId" />
-    <result column="name_" jdbcType="VARCHAR" property="name" />
-    <result column="gender_" jdbcType="VARCHAR" property="gender" />
-    <result column="idcard_" jdbcType="VARCHAR" property="idcard" />
-    <result column="city_" jdbcType="VARCHAR" property="city" />
-    <result column="school_" jdbcType="VARCHAR" property="school" />
-    <result column="subject_" jdbcType="VARCHAR" property="subject" />
-    <result column="level_" jdbcType="VARCHAR" property="level" />
-    <result column="theory_level_" jdbcType="VARCHAR" property="theoryLevel" />
-    <result column="theory_money_" jdbcType="DECIMAL" property="theoryMoney" />
-    <result column="mobile_" jdbcType="VARCHAR" property="mobile" />
-    <result column="money_" jdbcType="DECIMAL" property="money" />
-    <result column="memo_" jdbcType="VARCHAR" property="memo" />
-    <result column="create_time_" jdbcType="TIMESTAMP" property="createTime" />
-    <result column="update_time_" jdbcType="TIMESTAMP" property="updateTime" />
-    <result column="status_" jdbcType="TINYINT" property="status" />
-  </resultMap>
+    <resultMap id="DegreeRegistration" type="com.ym.mec.biz.dal.entity.DegreeRegistration">
+        <!--@mbg.generated-->
+        <!--@Table degree_registration-->
+        <id column="id_" jdbcType="INTEGER" property="id"/>
+        <result column="sporadic_id_" jdbcType="INTEGER" property="sporadicId"/>
+        <result column="name_" jdbcType="VARCHAR" property="name"/>
+        <result column="gender_" jdbcType="VARCHAR" property="gender"/>
+        <result column="idcard_" jdbcType="VARCHAR" property="idcard"/>
+        <result column="city_" jdbcType="VARCHAR" property="city"/>
+        <result column="school_" jdbcType="VARCHAR" property="school"/>
+        <result column="subject_" jdbcType="VARCHAR" property="subject"/>
+        <result column="level_" jdbcType="VARCHAR" property="level"/>
+        <result column="theory_level_" jdbcType="VARCHAR" property="theoryLevel"/>
+        <result column="theory_money_" jdbcType="DECIMAL" property="theoryMoney"/>
+        <result column="theory_cert_" jdbcType="VARCHAR" property="theoryCert"/>
+        <result column="mobile_" jdbcType="VARCHAR" property="mobile"/>
+        <result column="money_" jdbcType="DECIMAL" property="money"/>
+        <result column="memo_" jdbcType="VARCHAR" property="memo"/>
+        <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
+        <result column="update_time_" jdbcType="TIMESTAMP" property="updateTime"/>
+        <result column="status_" jdbcType="TINYINT" property="status"/>
+    </resultMap>
 
-  <select id="get" parameterType="java.lang.Integer" resultMap="DegreeRegistration">
-    select * from degree_registration where id_ = #{id,jdbcType=INTEGER}
-  </select>
+    <select id="get" parameterType="java.lang.Integer" resultMap="DegreeRegistration">
+        select *
+        from degree_registration
+        where id_ = #{id,jdbcType=INTEGER}
+    </select>
 
-  <!-- 全查询 -->
-  <select id="findAll" resultMap="DegreeRegistration">
-    SELECT *
-    FROM degree_registration
-    ORDER BY id_
-  </select>
+    <!-- 全查询 -->
+    <select id="findAll" resultMap="DegreeRegistration">
+        SELECT *
+        FROM degree_registration
+        ORDER BY id_
+    </select>
 
-  <!-- 分页查询 -->
-  <select id="queryPage" resultMap="DegreeRegistration" parameterType="map">
-    SELECT * FROM degree_registration ORDER BY id_ <include refid="global.limit"/>
-  </select>
+    <sql id="queryPageSql">
+        <where>
+            <if test="status != null">
+                AND status_= #{status}
+            </if>
+            <if test="id != null">
+                AND id_ = #{id}
+            </if>
+            <if test="search != null and search != ''">
+                AND (id_ = #{search} OR name_ LIKE CONCAT('%',#{search},'%') )
+            </if>
+            <if test="name != null">
+                AND name_ = #{name}
+            </if>
+            <if test="idcard != null">
+                AND idcard_ = #{idcard}
+            </if>
+            <if test="school != null">
+                AND school_ LIKE CONCAT('%', #{school},'%')
+            </if>
+            <if test="city != null">
+                AND city_ LIKE CONCAT('%', #{city},'%')
+            </if>
+            <if test="subject != null">
+                AND subject_= #{subject}
+            </if>
+            <if test="subject != null">
+                AND subject_= #{subject}
+            </if>
+            <if test="mobile != null">
+                AND mobile_= #{mobile}
+            </if>
+            <if test="level != null">
+                AND level_= #{level}
+            </if>
+        </where>
+    </sql>
 
-  <!-- 查询当前表的总记录数 -->
-  <select id="queryCount" resultType="int">
-    SELECT COUNT(*) FROM degree_registration
-  </select>
+    <!-- 分页查询 -->
+    <select id="queryPage" resultMap="DegreeRegistration" parameterType="map">
+        SELECT * FROM degree_registration
+        <include refid="queryPageSql"/>
+        <include refid="global.orderby"/>
+        <include refid="global.limit"/>
+    </select>
 
-  <delete id="delete" parameterType="java.lang.Integer">
-    delete from degree_registration
-    where id_ = #{id,jdbcType=INTEGER}
-  </delete>
-  <insert id="insert" keyColumn="id_" keyProperty="id" parameterType="com.ym.mec.biz.dal.entity.DegreeRegistration" useGeneratedKeys="true">
-    <!--@mbg.generated-->
-    insert into degree_registration (sporadic_id_, name_, gender_, 
-      idcard_, city_, school_, 
-      subject_,level_, theory_level_,theory_money_, mobile_,
-      money_, memo_, create_time_, 
-      update_time_, status_)
-    values (#{sporadicId,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{gender,jdbcType=VARCHAR}, 
-      #{idcard,jdbcType=VARCHAR}, #{city,jdbcType=VARCHAR}, #{school,jdbcType=VARCHAR}, 
-      #{subject,jdbcType=VARCHAR},#{level,jdbcType=VARCHAR}, #{theoryLevel,jdbcType=VARCHAR},#{theoryMoney,jdbcType=DECIMAL}, #{mobile,jdbcType=VARCHAR},
-      #{money,jdbcType=DECIMAL}, #{memo,jdbcType=VARCHAR}, #{createTime},
-      #{updateTime}, #{status,jdbcType=TINYINT})
-  </insert>
-  <update id="update" parameterType="com.ym.mec.biz.dal.entity.DegreeRegistration">
-    <!--@mbg.generated-->
-    update degree_registration
-    <set>
-      <if test="sporadicId != null">
-        sporadic_id_ = #{sporadicId,jdbcType=INTEGER},
-      </if>
-      <if test="name != null">
-        name_ = #{name,jdbcType=VARCHAR},
-      </if>
-      <if test="gender != null">
-        gender_ = #{gender,jdbcType=VARCHAR},
-      </if>
-      <if test="idcard != null">
-        idcard_ = #{idcard,jdbcType=VARCHAR},
-      </if>
-      <if test="city != null">
-        city_ = #{city,jdbcType=VARCHAR},
-      </if>
-      <if test="school != null">
-        school_ = #{school,jdbcType=VARCHAR},
-      </if>
-      <if test="subject != null">
-        subject_ = #{subject,jdbcType=VARCHAR},
-      </if>
-      <if test="level != null">
-        level_ = #{level,jdbcType=VARCHAR},
-      </if>
-      <if test="theoryLevel != null">
-        theory_level_ = #{theoryLevel,jdbcType=VARCHAR},
-      </if>
-      <if test="theoryLevel != null">
-        theory_money_ = #{theoryMoney,jdbcType=DECIMAL},
-      </if>
-      <if test="mobile != null">
-        mobile_ = #{mobile,jdbcType=VARCHAR},
-      </if>
-      <if test="money != null">
-        money_ = #{money,jdbcType=DECIMAL},
-      </if>
-      <if test="memo != null">
-        memo_ = #{memo,jdbcType=VARCHAR},
-      </if>
-      <if test="createTime != null">
-        create_time_ = #{createTime},
-      </if>
-      <if test="updateTime != null">
-        update_time_ = #{updateTime},
-      </if>
-      <if test="status != null">
-        status_ = #{status,jdbcType=INTEGER},
-      </if>
-    </set>
-    where id_ = #{id,jdbcType=INTEGER}
-  </update>
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount" resultType="int">
+        SELECT COUNT(*)
+        FROM degree_registration
+        <include refid="queryPageSql"/>
+    </select>
 
-  <select id="findByMobileAndSporadicId" resultMap="DegreeRegistration">
-    SELECT * FROM degree_registration WHERE mobile_ = #{mobile} AND sporadic_id_ = #{sporadicId} FOR UPDATE
-  </select>
-  <select id="getLock" resultMap="DegreeRegistration">
-    SELECT * FROM degree_registration WHERE id_ = #{id} FOR UPDATE
-  </select>
+    <select id="getTotalAmount" parameterType="map" resultMap="DegreeRegistration">
+        SELECT SUM(money_) money_ ,SUM(theory_money_) theory_money_ FROM degree_registration
+        <include refid="queryPageSql"/>
+    </select>
+
+    <delete id="delete" parameterType="java.lang.Integer">
+        delete
+        from degree_registration
+        where id_ = #{id,jdbcType=INTEGER}
+    </delete>
+    <insert id="insert" keyColumn="id_" keyProperty="id" parameterType="com.ym.mec.biz.dal.entity.DegreeRegistration"
+            useGeneratedKeys="true">
+        <!--@mbg.generated-->
+        insert into degree_registration (sporadic_id_, name_, gender_,
+        idcard_, city_, school_,
+        subject_,level_, theory_level_,theory_money_, theory_cert_,mobile_,
+        money_, memo_, create_time_,
+        update_time_, status_)
+        values (#{sporadicId,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{gender,jdbcType=VARCHAR},
+        #{idcard,jdbcType=VARCHAR}, #{city,jdbcType=VARCHAR}, #{school,jdbcType=VARCHAR},
+        #{subject,jdbcType=VARCHAR},#{level,jdbcType=VARCHAR},
+        #{theoryLevel,jdbcType=VARCHAR},#{theoryMoney,jdbcType=DECIMAL},
+        #{theoryCert,jdbcType=VARCHAR},#{mobile,jdbcType=VARCHAR},#{money,jdbcType=DECIMAL}, #{memo,jdbcType=VARCHAR},
+        #{createTime}, #{updateTime}, #{status,jdbcType=TINYINT})
+    </insert>
+    <update id="update" parameterType="com.ym.mec.biz.dal.entity.DegreeRegistration">
+        <!--@mbg.generated-->
+        update degree_registration
+        <set>
+            <if test="sporadicId != null">
+                sporadic_id_ = #{sporadicId,jdbcType=INTEGER},
+            </if>
+            <if test="name != null">
+                name_ = #{name,jdbcType=VARCHAR},
+            </if>
+            <if test="gender != null">
+                gender_ = #{gender,jdbcType=VARCHAR},
+            </if>
+            <if test="idcard != null">
+                idcard_ = #{idcard,jdbcType=VARCHAR},
+            </if>
+            <if test="city != null">
+                city_ = #{city,jdbcType=VARCHAR},
+            </if>
+            <if test="school != null">
+                school_ = #{school,jdbcType=VARCHAR},
+            </if>
+            <if test="subject != null">
+                subject_ = #{subject,jdbcType=VARCHAR},
+            </if>
+            <if test="level != null">
+                level_ = #{level,jdbcType=VARCHAR},
+            </if>
+            <if test="theoryLevel != null">
+                theory_level_ = #{theoryLevel,jdbcType=VARCHAR},
+            </if>
+            <if test="theoryLevel != null">
+                theory_money_ = #{theoryMoney,jdbcType=DECIMAL},
+            </if>
+            <if test="theoryLevel != null">
+                theory_cert_ = #{theoryCert,jdbcType=VARCHAR},
+            </if>
+            <if test="mobile != null">
+                mobile_ = #{mobile,jdbcType=VARCHAR},
+            </if>
+            <if test="money != null">
+                money_ = #{money,jdbcType=DECIMAL},
+            </if>
+            <if test="memo != null">
+                memo_ = #{memo,jdbcType=VARCHAR},
+            </if>
+            <if test="createTime != null">
+                create_time_ = #{createTime},
+            </if>
+            <if test="updateTime != null">
+                update_time_ = #{updateTime},
+            </if>
+            <if test="status != null">
+                status_ = #{status,jdbcType=INTEGER},
+            </if>
+        </set>
+        where id_ = #{id,jdbcType=INTEGER}
+    </update>
+
+    <select id="findByMobileAndSporadicId" resultMap="DegreeRegistration">
+        SELECT *
+        FROM degree_registration
+        WHERE mobile_ = #{mobile}
+          AND sporadic_id_ = #{sporadicId} FOR
+        UPDATE
+    </select>
+    <select id="getLock" resultMap="DegreeRegistration">
+        SELECT *
+        FROM degree_registration
+        WHERE id_ = #{id} FOR
+        UPDATE
+    </select>
 </mapper>

+ 8 - 1
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderDetailMapper.xml

@@ -163,8 +163,12 @@
 		WHERE mgpc.music_group_id_ = #{musicGroupId} AND mgpc.payment_status_ != 2)
 		AND user_id_ = #{userId} AND payment_status_ = 'NON_PAYMENT'
 	</delete>
+    <delete id="deleteByCalenderId">
+		DELETE FROM music_group_payment_calender_detail
+		WHERE music_group_payment_calender_id_ = #{id} AND payment_status_ = 'NON_PAYMENT'
+	</delete>
 
-	<!-- 分页查询 -->
+    <!-- 分页查询 -->
 	<select id="queryPage" resultMap="MusicGroupPaymentCalenderDetail"
 		parameterType="map">
 		SELECT mgpcd.*,su.username_,su.phone_,st.name_ subject_names_,sr.music_group_status_
@@ -283,4 +287,7 @@
 		LEFT JOIN music_group_payment_calender_detail mgpcd ON mgpc.id_ = mgpcd.music_group_payment_calender_id_
 		WHERE DATE_FORMAT(mgpc.create_time_,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d') AND mgpc.payment_status_ = 1 AND mgpcd.payment_status_ = 'NON_PAYMENT'
 	</select>
+	<select id="queryStudentIds" resultType="java.lang.Integer">
+		SELECT user_id_ FROM music_group_payment_calender_detail WHERE music_group_payment_calender_id_ = #{calenderId}
+	</select>
 </mapper>

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

@@ -357,4 +357,11 @@
         SET mgsf.remain_network_class_times_ = mgsf.remain_network_class_times_ + 1
         WHERE mgpcd.music_group_payment_calender_id_ = mgpc.id_ AND FIND_IN_SET(mgpcd.id_,#{musicGroupPaymentCalenderDetailIds})
     </update>
+    <update id="updatePaymentStatus">
+        UPDATE music_group_student_fee_ mgsf
+        LEFT JOIN music_group_payment_calender_detail mgpcd ON mgpcd.user_id_ = mgsf.user_id_
+        LEFT JOIN music_group_payment_calender mgpc ON mgpc.music_group_id_ = mgsf.music_group_id_
+        SET mgsf.payment_status_ = #{paymentStatus},mgsf.update_time_ = NOW()
+        WHERE mgpcd.music_group_payment_calender_id_ = mgpc.id_ AND mgpc.id_ = #{calenderId}
+    </update>
 </mapper>

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

@@ -421,8 +421,8 @@
         <result property="currentGrade" column="current_grade_"/>
         <result property="currentClass" column="current_class_"/>
         <result property="subjectName" column="subject_name_"/>
-        <result property="studentStatus" column="music_group_status_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
-        <result property="paymentStatus" column="payment_status_"/>
+        <result property="studentStatus" column="student_status_"/>
+        <result property="paymentStatus" column="payment_status_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result property="musicGroupId" column="music_group_id_"/>
         <result property="isNewStudent" column="is_new_student_"/>
         <result property="courseFee" column="course_fee_"/>
@@ -433,7 +433,7 @@
     </resultMap>
     <select id="queryMusicGroupStudent" resultMap="MusicGroupStudentsDto">
         SELECT sr.user_id_,su.username_ real_name_,su.gender_,su.phone_ parents_phone_,sr.current_grade_,
-        sr.current_class_,sr.music_group_status_,sr.payment_status_,
+        sr.current_class_,sr.music_group_status_ student_status_,sr.payment_status_,
         s.name_ subject_name_,sr.music_group_id_,case when su.password_ is null then 0 else 1 end isActive_,
         IF(DATE_FORMAT(sr.create_time_,'%Y-%m-%d') > DATE_FORMAT(mg.payment_expire_date_,'%Y-%m-%d'),1,0) is_new_student_
         FROM student_registration sr

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

@@ -622,4 +622,11 @@
           AND create_time_ <= NOW()
           AND  mer_nos_ = #{merNo}
     ]]></select>
+    <select id="countGroupOrderWithoutFailed" resultType="int">
+        SELECT COUNT(*)
+        FROM student_payment_order spo
+        WHERE spo.music_group_id_ = #{groupId}
+        AND spo.status_ != 'FAILED'
+        AND spo.group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler }
+    </select>
 </mapper>

+ 1 - 1
mec-im/src/main/java/com/ym/mec/im/IMHelper.java

@@ -288,7 +288,7 @@ public class IMHelper {
         sb.append("&content=").append(URLEncoder.encode(msgStr, UTF8));
 
         if (pushContent != null) {
-            sb.append("&pushContent=").append(URLEncoder.encode(pushContent.toString(), UTF8));
+            sb.append("&pushContent=").append(URLEncoder.encode(pushContent, UTF8));
         }
 
         if (pushData != null) {

+ 1 - 0
mec-im/src/main/java/com/ym/mec/im/message/MetronomeMessageMessage.java

@@ -28,6 +28,7 @@ public class MetronomeMessageMessage extends BaseMessage {
         return "{\"enable\":" + content.getEnable() +
                 ", \"customType\":" + content.getCustomType() +
                 ", \"rate\":" + content.getRate() +
+                ", \"playVolume\":" + content.getPlayVolume() +
                 ", \"userId\":" + (StringUtils.isEmpty(content.getUserId())?"\"\"":"\"" + content.getUserId() + "\"") +
                 '}';
     }

+ 10 - 0
mec-im/src/main/java/com/ym/pojo/CustomMessage.java

@@ -7,8 +7,17 @@ public class CustomMessage extends BaseMessage {
     private Boolean enable;
     private int customType;
     private int rate;
+    private int playVolume;
     private String userId;
 
+    public int getPlayVolume() {
+        return playVolume;
+    }
+
+    public void setPlayVolume(int playVolume) {
+        this.playVolume = playVolume;
+    }
+
     public Boolean getEnable() {
         return enable;
     }
@@ -51,6 +60,7 @@ public class CustomMessage extends BaseMessage {
         return "{\"enable\":" + enable +
                 ", \"customType\":" + customType +
                 ", \"rate\":" + rate +
+                ", \"playVolume\":" + playVolume +
                 ", \"userId\":" + (StringUtils.isEmpty(userId)?"\"\"":"\"" + userId + "\"") +
                 '}';
     }

+ 11 - 4
mec-web/src/main/java/com/ym/mec/web/config/ResourceServerConfig.java

@@ -24,10 +24,17 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 
 	@Override
 	public void configure(HttpSecurity http) throws Exception {
-		http.csrf().disable().exceptionHandling().accessDeniedHandler(baseAccessDeniedHandler).authenticationEntryPoint(baseAuthenticationEntryPoint).and()
-				.authorizeRequests().antMatchers("/task/**").hasIpAddress("0.0.0.0/0")
-				.antMatchers("/v2/api-docs", "/classGroup/highClassGroups", "/code/*", "/api/*", "/appVersionInfo/queryByPlatform").permitAll().anyRequest()
-				.authenticated().and().httpBasic();
+		http.csrf()
+				.disable()
+				.exceptionHandling()
+				.accessDeniedHandler(baseAccessDeniedHandler)
+				.authenticationEntryPoint(baseAuthenticationEntryPoint)
+				.and()
+				.authorizeRequests()
+				.antMatchers("/task/**")
+				.hasIpAddress("0.0.0.0/0")
+				.antMatchers("/v2/api-docs", "/classGroup/highClassGroups", "/code/*", "/api/*", "/appVersionInfo/queryByPlatform", "/eduDegree/*",
+						"/uploadFile").permitAll().anyRequest().authenticated().and().httpBasic();
 	}
 
 	@Override

+ 0 - 27
mec-web/src/main/java/com/ym/mec/web/config/WebMvcConfig.java

@@ -1,44 +1,17 @@
 package com.ym.mec.web.config;
 
-import java.io.IOException;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.List;
 
 import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Primary;
 import org.springframework.format.FormatterRegistry;
 import org.springframework.http.MediaType;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.JsonSerializer;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.databind.SerializerProvider;
-import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
-import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
-import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
-import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
-import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
-import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
-import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
 import com.ym.mec.common.config.EnumConverterFactory;
 import com.ym.mec.common.config.LocalFastJsonHttpMessageConverter;
-import com.ym.mec.common.enums.BaseEnum;
 
 @Configuration
 public class WebMvcConfig implements WebMvcConfigurer {

+ 2 - 2
mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderController.java

@@ -53,8 +53,8 @@ public class MusicGroupPaymentCalenderController extends BaseController {
     @ApiOperation(value = "修改乐团缴费日历")
     @PostMapping("/updateStartTime")
     @PreAuthorize("@pcs.hasPermissions('musicGroupPaymentCalender/updateStartTime')")
-    public Object updateStartTime(Date startTime,Long id) {
-        musicGroupPaymentCalenderService.updateStartTime(startTime,id);
+    public Object updateStartTime(Date startTime,Date endTime,Long id) {
+        musicGroupPaymentCalenderService.updateStartTime(startTime,endTime,id);
         return succeed();
     }
 

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

@@ -7,8 +7,6 @@ import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.MediaType;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
@@ -32,7 +30,6 @@ public class UploadFileController extends BaseController {
 	private UploadFileService uploadFileService;
 
 	@PostMapping(value = "uploadFile")
-	@PreAuthorize("@pcs.hasPermissions('uploadFile','system')")
 	public Object uploadFile(@ApiParam(value = "上传的文件", required = true) @RequestParam("file") MultipartFile file) {
 		try {
 			if (file != null && StringUtils.isNotBlank(file.getOriginalFilename())) {

+ 62 - 0
mec-web/src/main/java/com/ym/mec/web/controller/education/EduDegreeController.java

@@ -0,0 +1,62 @@
+package com.ym.mec.web.controller.education;
+
+
+import com.ym.mec.biz.dal.dao.DegreeRegistrationDao;
+import com.ym.mec.biz.dal.dao.SporadicChargeInfoDao;
+import com.ym.mec.biz.dal.entity.DegreeRegistration;
+import com.ym.mec.biz.dal.entity.SporadicChargeInfo;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.SporadicChargeTypeEnum;
+import com.ym.mec.biz.dal.page.DegreeQueryInfo;
+import com.ym.mec.biz.dal.page.SporadicChargeInfoQueryInfo;
+import com.ym.mec.biz.service.DegreeRegistrationService;
+import com.ym.mec.biz.service.SporadicChargeInfoService;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.util.idcard.IdcardValidator;
+import com.ym.mec.util.validator.CommonValidator;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+@RequestMapping("eduDegree")
+@Api(tags = "级报名服务")
+@RestController
+public class EduDegreeController extends BaseController {
+
+    @Autowired
+    private StudentPaymentOrderService studentPaymentOrderService;
+
+    @Autowired
+    private DegreeRegistrationDao degreeRegistrationDao;
+
+    @Autowired
+    private DegreeRegistrationService degreeRegistrationService;
+
+    @Autowired
+    private SporadicChargeInfoDao sporadicChargeInfoDao;
+
+    @Autowired
+    private SporadicChargeInfoService sporadicChargeInfoService;
+
+
+    @ApiOperation(value = "查询收费列表")
+    @GetMapping("/queryPage")
+    public HttpResponseResult queryPage(DegreeQueryInfo queryInfo) {
+        queryInfo.setStatus(2);
+        queryInfo.setSort("create_time_");
+        queryInfo.setOrder("DESC");
+        return succeed(degreeRegistrationService.getPageList(queryInfo));
+    }
+
+}