浏览代码

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

# Conflicts:
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrderPayOpsServiceImpl.java
yonge 3 年之前
父节点
当前提交
4cf64c67e0
共有 44 个文件被更改,包括 1237 次插入451 次删除
  1. 1 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/PhoneAuthenticationProvider.java
  2. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudCoachPaymentProgramDao.java
  3. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherOrderDao.java
  4. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexErrDataRecordDao.java
  5. 16 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentCloudCoachPaymentDetailsDao.java
  6. 7 118
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MemberPayParamDto.java
  7. 204 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudCoachPaymentProgram.java
  8. 1 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroup.java
  9. 5 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Student.java
  10. 135 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCloudCoachPaymentDetails.java
  11. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPreRegistration.java
  12. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java
  13. 36 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/CloudCoachPaymentProgramQueryInfo.java
  14. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/CloudTeacherOrderQueryInfo.java
  15. 16 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentCloudCoachPaymentDetailsQueryInfo.java
  16. 16 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CloudCoachPaymentProgramService.java
  17. 18 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MemberFeeSettingService.java
  18. 4 14
      mec-biz/src/main/java/com/ym/mec/biz/service/MemberRankSettingService.java
  19. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentCloudCoachPaymentDetailsService.java
  20. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java
  21. 25 18
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  22. 107 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudCoachPaymentProgramServiceImpl.java
  23. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java
  24. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java
  25. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexErrDataRecordServiceImpl.java
  26. 52 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberFeeSettingServiceImpl.java
  27. 109 159
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java
  28. 10 59
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderMemberServiceImpl.java
  29. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  30. 46 22
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrderPayOpsServiceImpl.java
  31. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCloudCoachPaymentDetailsServiceImpl.java
  32. 23 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  33. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java
  34. 13 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java
  35. 121 0
      mec-biz/src/main/resources/config/mybatis/CloudCoachPaymentProgramMapper.xml
  36. 12 2
      mec-biz/src/main/resources/config/mybatis/CloudTeacherOrderMapper.xml
  37. 95 0
      mec-biz/src/main/resources/config/mybatis/StudentCloudCoachPaymentDetailsMapper.xml
  38. 2 2
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  39. 5 5
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  40. 1 8
      mec-student/src/main/java/com/ym/mec/student/controller/MemberRankController.java
  41. 41 0
      mec-web/src/main/java/com/ym/mec/web/controller/CloudCoachPaymentProgramController.java
  42. 7 4
      mec-web/src/main/java/com/ym/mec/web/controller/CloudTeacherOrderController.java
  43. 29 0
      mec-web/src/main/java/com/ym/mec/web/controller/StudentCloudCoachPaymentDetailsController.java
  44. 8 8
      mec-web/src/main/resources/bootstrap-dev.properties

+ 1 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/PhoneAuthenticationProvider.java

@@ -95,7 +95,7 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
 
 					// 添加userType以及附加信息
 					if (StringUtils.equals("STUDENT", clientId)) {
-						user.setOrganId(sysUserService.getLesseeOrganId());
+						user.setOrganId(Integer.parseInt(loginEntity.getOrganId()));
 						sysUserService.saveStudent(user.getId(),loginEntity.getTenantId());
 					} else if (StringUtils.equals("TEACHER", clientId)) {
 						sysUserService.saveTeacher(user.getId(),loginEntity.getTenantId());

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

@@ -0,0 +1,9 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.biz.dal.entity.CloudCoachPaymentProgram;
+
+public interface CloudCoachPaymentProgramDao extends BaseDAO<Long, CloudCoachPaymentProgram> {
+
+	
+}

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherOrderDao.java

@@ -108,4 +108,6 @@ public interface CloudTeacherOrderDao extends BaseDAO<Long, CloudTeacherOrder> {
     List<CloudTeacherOrder> queryByUserIdAndStatus(@Param("userId")Integer userId, @Param("status")Integer status);
 
     List<String> findUserNameByOrderId(@Param("platformOrderId")Integer platformOrderId);
+
+    void batchInsert(@Param("bean") CloudTeacherOrder cloudTeacherOrder, @Param("userIds") List<Integer> userIds);
 }

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

@@ -112,7 +112,7 @@ public interface IndexErrDataRecordDao extends BaseDAO<Long, IndexErrDataRecord>
 
     List<String> queryErrStrings(Map<String, Object> params);
     int queryErrStringsCount(Map<String, Object> params);
-    List<IndexErrDataRecord> getWithOrganMonthUserStr(@Param("omuStrings") List<String> omuStrings);
+    List<IndexErrDataRecord> getWithOrganMonthUserStr(@Param("omuStrings") List<String> omuStrings, @Param("tenantId") Integer tenantId);
     List<IndexErrDataRecord> getAllErrDatas(Map<String, Object> params);
 
     /**

+ 16 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentCloudCoachPaymentDetailsDao.java

@@ -0,0 +1,16 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.StudentCloudCoachPaymentDetails;
+import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface StudentCloudCoachPaymentDetailsDao extends BaseDAO<Long, StudentCloudCoachPaymentDetails> {
+
+
+    void batchInsert(@Param("cloudCoachPaymentProgramId") Long cloudCoachPaymentProgramId,
+                     @Param("paymentStatus") Integer paymentStatus,
+                     @Param("userIds") List<Integer> userIds,
+                     @Param("tenantId") Integer tenantId);
+}

+ 7 - 118
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MemberPayParamDto.java

@@ -1,108 +1,13 @@
 package com.ym.mec.biz.dal.dto;
 
-import com.ym.mec.biz.dal.enums.PeriodEnum;
-import io.swagger.annotations.ApiModelProperty;
-
 import java.math.BigDecimal;
-import java.util.List;
-
-public class MemberPayParamDto{
-    @ApiModelProperty(value = "购买次数", required = false)
-    private Integer buyNum;
-
-    private Integer giveNum;
-
-    private Integer activeRemark;
-
-    private String remark;
-
-    @ApiModelProperty(value = "优惠券列表", required = false)
-    private Integer memberRankId;
 
-    private PeriodEnum periodEnum;
+public class MemberPayParamDto extends PayParamBasicDto{
 
+    //前端录入实际缴费金额
     private BigDecimal amount;
 
-    private boolean isUseBalance = false;
-
-    private boolean repay = false;
-
-    private Integer userId;
-
-    @ApiModelProperty(value = "优惠券列表", required = false)
-    private List<Integer> couponIdList;
-
-    public boolean isRepay() {
-        return repay;
-    }
-
-    public void setRepay(boolean repay) {
-        this.repay = repay;
-    }
-
-    public List<Integer> getCouponIdList() {
-        return couponIdList;
-    }
-
-    public void setCouponIdList(List<Integer> couponIdList) {
-        this.couponIdList = couponIdList;
-    }
-
-    public Integer getBuyNum() {
-        return buyNum;
-    }
-
-    public void setBuyNum(Integer buyNum) {
-        this.buyNum = buyNum;
-    }
-
-    public Integer getGiveNum() {
-        return giveNum;
-    }
-
-    public void setGiveNum(Integer giveNum) {
-        this.giveNum = giveNum;
-    }
-
-    public Integer getActiveRemark() {
-        return activeRemark;
-    }
-
-    public void setActiveRemark(Integer activeRemark) {
-        this.activeRemark = activeRemark;
-    }
-
-    public String getRemark() {
-        return remark;
-    }
-
-    public void setRemark(String remark) {
-        this.remark = remark;
-    }
-
-    public Integer getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Integer userId) {
-        this.userId = userId;
-    }
-
-    public Integer getMemberRankId() {
-        return memberRankId;
-    }
-
-    public void setMemberRankId(Integer memberRankId) {
-        this.memberRankId = memberRankId;
-    }
-
-    public PeriodEnum getPeriodEnum() {
-        return periodEnum;
-    }
-
-    public void setPeriodEnum(PeriodEnum periodEnum) {
-        this.periodEnum = periodEnum;
-    }
+    private Long paymentId;
 
     public BigDecimal getAmount() {
         return amount;
@@ -112,27 +17,11 @@ public class MemberPayParamDto{
         this.amount = amount;
     }
 
-    public boolean isUseBalance() {
-        return isUseBalance;
-    }
-
-    public void setUseBalance(boolean useBalance) {
-        isUseBalance = useBalance;
+    public Long getPaymentId() {
+        return paymentId;
     }
 
-    @Override
-    public String toString() {
-        return "MemberPayParamDto{" +
-                "buyNum=" + buyNum +
-                ", giveNum=" + giveNum +
-                ", activeRemark=" + activeRemark +
-                ", remark='" + remark + '\'' +
-                ", memberRankId=" + memberRankId +
-                ", periodEnum=" + periodEnum +
-                ", amount=" + amount +
-                ", isUseBalance=" + isUseBalance +
-                ", userId=" + userId +
-                ", couponIdList=" + couponIdList +
-                '}';
+    public void setPaymentId(Long paymentId) {
+        this.paymentId = paymentId;
     }
 }

+ 204 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudCoachPaymentProgram.java

@@ -0,0 +1,204 @@
+package com.ym.mec.biz.dal.entity;
+
+import com.ym.mec.biz.dal.enums.PeriodEnum;
+import com.ym.mec.common.entity.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 对应数据库表(cloud_coach_payment_program):
+ */
+public class CloudCoachPaymentProgram extends BaseEntity {
+
+	/**  */
+	private Long id;
+	
+	/** 会员名称 */
+	private String name;
+	
+	/** 备注 */
+	private String remark;
+	
+	/** 会员数量 */
+	private BigDecimal memberNum = BigDecimal.ZERO;
+	
+	/** 缴费项目总人数 */
+	private Integer userNum = 0;
+	
+	/** 已缴费人数 */
+	private Integer paymentUserNum = 0;
+	
+	/** 单位(年月日) */
+	private PeriodEnum period = PeriodEnum.MONTH;
+	
+	/** 会员等级编号 */
+	private Integer memberRankSettingId;
+	
+	/** 现价 */
+	private java.math.BigDecimal actualAmount = BigDecimal.ZERO;
+	
+	/** 原价 */
+	private java.math.BigDecimal originalAmount = BigDecimal.ZERO;
+	
+	/** 创建人 */
+	private Integer operator;
+
+	private String operatorName;
+	
+	/**  */
+	private java.util.Date createTime;
+	
+	/**  */
+	private java.util.Date updateTime;
+	
+	/**  */
+	private Integer tenantId;
+
+	private Integer organId;
+
+	private List<Integer> userIds;
+
+	public String getOperatorName() {
+		return operatorName;
+	}
+
+	public void setOperatorName(String operatorName) {
+		this.operatorName = operatorName;
+	}
+
+	public Integer getOrganId() {
+		return organId;
+	}
+
+	public void setOrganId(Integer organId) {
+		this.organId = organId;
+	}
+
+	public List<Integer> getUserIds() {
+		return userIds;
+	}
+
+	public void setUserIds(List<Integer> userIds) {
+		this.userIds = userIds;
+	}
+
+	public void setId(Long id){
+		this.id = id;
+	}
+	
+	public Long getId(){
+		return this.id;
+	}
+			
+	public void setName(String name){
+		this.name = name;
+	}
+	
+	public String getName(){
+		return this.name;
+	}
+			
+	public void setRemark(String remark){
+		this.remark = remark;
+	}
+	
+	public String getRemark(){
+		return this.remark;
+	}
+
+	public BigDecimal getMemberNum() {
+		return memberNum;
+	}
+
+	public void setMemberNum(BigDecimal memberNum) {
+		this.memberNum = memberNum;
+	}
+
+	public PeriodEnum getPeriod() {
+		return period;
+	}
+
+	public void setPeriod(PeriodEnum period) {
+		this.period = period;
+	}
+
+	public void setUserNum(Integer userNum){
+		this.userNum = userNum;
+	}
+	
+	public Integer getUserNum(){
+		return this.userNum;
+	}
+			
+	public void setPaymentUserNum(Integer paymentUserNum){
+		this.paymentUserNum = paymentUserNum;
+	}
+	
+	public Integer getPaymentUserNum(){
+		return this.paymentUserNum;
+	}
+
+	public void setMemberRankSettingId(Integer memberRankSettingId){
+		this.memberRankSettingId = memberRankSettingId;
+	}
+	
+	public Integer getMemberRankSettingId(){
+		return this.memberRankSettingId;
+	}
+			
+	public void setActualAmount(java.math.BigDecimal actualAmount){
+		this.actualAmount = actualAmount;
+	}
+	
+	public java.math.BigDecimal getActualAmount(){
+		return this.actualAmount;
+	}
+			
+	public void setOriginalAmount(java.math.BigDecimal originalAmount){
+		this.originalAmount = originalAmount;
+	}
+	
+	public java.math.BigDecimal getOriginalAmount(){
+		return this.originalAmount;
+	}
+			
+	public void setOperator(Integer operator){
+		this.operator = operator;
+	}
+	
+	public Integer getOperator(){
+		return this.operator;
+	}
+			
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+			
+	public void setUpdateTime(java.util.Date updateTime){
+		this.updateTime = updateTime;
+	}
+	
+	public java.util.Date getUpdateTime(){
+		return this.updateTime;
+	}
+			
+	public void setTenantId(Integer tenantId){
+		this.tenantId = tenantId;
+	}
+	
+	public Integer getTenantId(){
+		return this.tenantId;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 1 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroup.java

@@ -189,7 +189,7 @@ public class MusicGroup extends BaseEntity {
 	
 	private Integer musicalInstrumentsProvideStatus;
 	
-	private Boolean memberCourseShowFlag;
+	private Boolean memberCourseShowFlag = false;
 
 	@ApiModelProperty(value = "作业是否发送消息",required = true)
 	private Integer homeworkPushFlag = 1;
@@ -197,8 +197,6 @@ public class MusicGroup extends BaseEntity {
 	@ApiModelProperty(value = "有乐保的人数",required = true)
 	private Integer hasInstrumentNum;
 
-	private Integer tenantId;
-
 	public Integer getHasInstrumentNum() {
 		return hasInstrumentNum;
 	}

+ 5 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Student.java

@@ -84,7 +84,7 @@ public class Student extends SysUser {
 	private String parentName;
 
 	@ApiModelProperty(value = "备注")
-	private String remake;
+	private String remark;
 
 	@ApiModelProperty(value = "单位名称")
 	private String unitName;
@@ -326,12 +326,12 @@ public class Student extends SysUser {
 		this.parentName = parentName;
 	}
 
-	public String getRemake() {
-		return remake;
+	public String getRemark() {
+		return remark;
 	}
 
-	public void setRemake(String remake) {
-		this.remake = remake;
+	public void setRemark(String remark) {
+		this.remark = remark;
 	}
 
 	public String getUnitName() {

+ 135 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCloudCoachPaymentDetails.java

@@ -0,0 +1,135 @@
+package com.ym.mec.biz.dal.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+import java.util.Date;
+
+/**
+ * 对应数据库表(student_cloud_coach_payment_details):
+ */
+public class StudentCloudCoachPaymentDetails {
+
+	/**  */
+	private Long id;
+
+	/**  */
+	private Long cloudCoachPaymentProgramId;
+	
+	/** 学员编号 */
+	private Integer userId;
+
+	private String username;
+
+	private String phone;
+
+	private Date payTime;
+	
+	/** 订单编号 */
+	private Long paymentOrderId;
+	
+	/** 缴费状态(0未缴费1已缴费) */
+	private Integer paymentStatus = 0;
+	
+	/**  */
+	private java.util.Date createTime;
+	
+	/**  */
+	private java.util.Date updateTime;
+	
+	/**  */
+	private Integer tenantId;
+
+	public Date getPayTime() {
+		return payTime;
+	}
+
+	public void setPayTime(Date payTime) {
+		this.payTime = payTime;
+	}
+
+	public String getUsername() {
+		return username;
+	}
+
+	public void setUsername(String username) {
+		this.username = username;
+	}
+
+	public String getPhone() {
+		return phone;
+	}
+
+	public void setPhone(String phone) {
+		this.phone = phone;
+	}
+
+	public Long getCloudCoachPaymentProgramId() {
+		return cloudCoachPaymentProgramId;
+	}
+
+	public void setCloudCoachPaymentProgramId(Long cloudCoachPaymentProgramId) {
+		this.cloudCoachPaymentProgramId = cloudCoachPaymentProgramId;
+	}
+
+	public void setId(Long id){
+		this.id = id;
+	}
+	
+	public Long getId(){
+		return this.id;
+	}
+			
+	public void setUserId(Integer userId){
+		this.userId = userId;
+	}
+	
+	public Integer getUserId(){
+		return this.userId;
+	}
+			
+	public void setPaymentOrderId(Long paymentOrderId){
+		this.paymentOrderId = paymentOrderId;
+	}
+	
+	public Long getPaymentOrderId(){
+		return this.paymentOrderId;
+	}
+			
+	public void setPaymentStatus(Integer paymentStatus){
+		this.paymentStatus = paymentStatus;
+	}
+	
+	public Integer getPaymentStatus(){
+		return this.paymentStatus;
+	}
+			
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+			
+	public void setUpdateTime(java.util.Date updateTime){
+		this.updateTime = updateTime;
+	}
+	
+	public java.util.Date getUpdateTime(){
+		return this.updateTime;
+	}
+			
+	public void setTenantId(Integer tenantId){
+		this.tenantId = tenantId;
+	}
+	
+	public Integer getTenantId(){
+		return this.tenantId;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 3 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPreRegistration.java

@@ -43,7 +43,7 @@ public class StudentPreRegistration extends BaseStudentDto {
 	private String parentName;
 
 	/** 备注 */
-	private String remake;
+	private String remark;
 
 	/** 单位名称 */
 	private String unitName;
@@ -158,11 +158,11 @@ public class StudentPreRegistration extends BaseStudentDto {
 	}
 
 	public String getRemake() {
-		return remake;
+		return remark;
 	}
 
 	public void setRemake(String remake) {
-		this.remake = remake;
+		this.remark = remark;
 	}
 
 	public String getUnitName() {

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java

@@ -210,6 +210,10 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     SMS_TENANT_EXPIRATION_REMINDERS("SMS_TENANT_EXPIRATION_REMINDERS",   "服务即将到期"),
     SMS_TENANT_RECHARGE("SMS_TENANT_RECHARGE",   "云教室充值"),
     SMS_TENANT_INSUFFICIENT_BALANCE("SMS_TENANT_INSUFFICIENT_BALANCE",  "余额不足"),
+
+
+    STUDENT_SMS_CLOUD_PAYMENT("STUDENT_SMS_CLOUD_PAYMENT",  "待缴费订单"),
+    STUDENT_PUSH_CLOUD_PAYMENT("STUDENT_PUSH_CLOUD_PAYMENT",  "待缴费订单"),
     ;
 
     MessageTypeEnum(String code, String msg) {

+ 36 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/CloudCoachPaymentProgramQueryInfo.java

@@ -0,0 +1,36 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+
+public class CloudCoachPaymentProgramQueryInfo extends QueryInfo {
+
+    private String period;
+
+    private String startTime;
+
+    private String endTime;
+
+    public String getPeriod() {
+        return period;
+    }
+
+    public void setPeriod(String period) {
+        this.period = period;
+    }
+
+    public String getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(String startTime) {
+        this.startTime = startTime;
+    }
+
+    public String getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime) {
+        this.endTime = endTime;
+    }
+}

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/CloudTeacherOrderQueryInfo.java

@@ -6,6 +6,7 @@ import com.ym.mec.common.page.QueryInfo;
 import org.joda.time.DateTime;
 
 import java.util.Date;
+import java.util.List;
 
 public class CloudTeacherOrderQueryInfo extends QueryInfo {
 
@@ -31,6 +32,9 @@ public class CloudTeacherOrderQueryInfo extends QueryInfo {
 	@ApiModelProperty(value = "开始时间")
 	private Date startTime;
 
+	@ApiModelProperty(value = "分部")
+	private String organIds;
+
 	public Date getStartTime() {
 		return startTime;
 	}
@@ -97,4 +101,12 @@ public class CloudTeacherOrderQueryInfo extends QueryInfo {
 	public void setMusicGroupId(String musicGroupId) {
 		this.musicGroupId = musicGroupId;
 	}
+
+	public String getOrganIds() {
+		return organIds;
+	}
+
+	public void setOrganIds(String organIds) {
+		this.organIds = organIds;
+	}
 }

+ 16 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentCloudCoachPaymentDetailsQueryInfo.java

@@ -0,0 +1,16 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+
+public class StudentCloudCoachPaymentDetailsQueryInfo extends QueryInfo {
+
+    private Long paymentId;
+
+    public Long getPaymentId() {
+        return paymentId;
+    }
+
+    public void setPaymentId(Long paymentId) {
+        this.paymentId = paymentId;
+    }
+}

+ 16 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CloudCoachPaymentProgramService.java

@@ -0,0 +1,16 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.CloudCoachPaymentProgram;
+import com.ym.mec.common.service.BaseService;
+
+public interface CloudCoachPaymentProgramService extends BaseService<Long, CloudCoachPaymentProgram> {
+
+    /**
+    * @description: 新增云教练缴费项目
+     * @param cloudCoachPaymentProgram
+    * @return void
+    * @author zx
+    * @date 2022/1/14 15:52
+    */
+    void add(CloudCoachPaymentProgram cloudCoachPaymentProgram);
+}

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

@@ -1,9 +1,27 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.entity.MemberFeeSetting;
+import com.ym.mec.biz.dal.enums.PeriodEnum;
 import com.ym.mec.common.service.BaseService;
 
+import java.math.BigDecimal;
+import java.util.function.BiFunction;
+
 public interface MemberFeeSettingService extends BaseService<Integer, MemberFeeSetting> {
 
     MemberFeeSetting findByRankIdAndOrganId(Integer organId, Integer rankId);
+
+    /**
+    * @description: 获取价格(原价或者现价)
+     * @param organId
+     * @param memberRankSettingId
+     * @param period
+     * @param num
+     * @param func
+    * @return java.math.BigDecimal
+    * @author zx
+    * @date 2022/1/14 16:11
+    */
+    BigDecimal getAmount(Integer organId, Integer memberRankSettingId, PeriodEnum period, BigDecimal num,
+                         BiFunction<PeriodEnum,MemberFeeSetting,BigDecimal> func);
 }

+ 4 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/MemberRankSettingService.java

@@ -1,9 +1,5 @@
 package com.ym.mec.biz.service;
 
-import java.math.BigDecimal;
-import java.util.List;
-import java.util.Map;
-
 import com.ym.mec.biz.dal.dto.MemberPayParamDto;
 import com.ym.mec.biz.dal.entity.MemberRankSetting;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
@@ -11,6 +7,9 @@ import com.ym.mec.biz.dal.enums.PeriodEnum;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.service.BaseService;
 
+import java.math.BigDecimal;
+import java.util.List;
+
 public interface MemberRankSettingService extends BaseService<Integer, MemberRankSetting> {
 
 	void add(MemberRankSetting memberRankSetting);
@@ -23,18 +22,9 @@ public interface MemberRankSettingService extends BaseService<Integer, MemberRan
 
 	/**
 	 * 会员购买
-	 * @param userId 会员编号
-	 * @param memberRankId 会员等级编号
-	 * @param periodEnum 会员周期
-	 * @param amount 金额
-	 * @param isUseBalance 是否使用余额
-	 * @param buyNum 购买数量
-	 * @param giveNum 赠送数量
-	 * @param activeRemark 活动标记
-	 * @param remark 备注
 	 * @return
 	 */
-	Map buy(MemberPayParamDto memberPayParamDto) throws Exception;
+	HttpResponseResult buy(MemberPayParamDto memberPayParamDto) throws Exception;
 	
 	/**
 	 * 订单回调

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

@@ -0,0 +1,8 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.StudentCloudCoachPaymentDetails;
+import com.ym.mec.common.service.BaseService;
+
+public interface StudentCloudCoachPaymentDetailsService extends BaseService<Long, StudentCloudCoachPaymentDetails> {
+
+}

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

@@ -199,4 +199,5 @@ public interface StudentPaymentOrderService extends BaseService<Long, StudentPay
 
     StudentPaymentOrderVo queryOrderDetail(String orderNo);
 
+    List<StudentPaymentOrder> queryByDealStatus(String musicGroupId, OrderTypeEnum orderType, DealStatusEnum status);
 }

+ 25 - 18
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -24,6 +24,7 @@ import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.redis.service.RedisCache;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateConvertor;
 import com.ym.mec.util.date.DateUtil;
@@ -540,9 +541,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 Set<String> holidayDays = new HashSet<>();
 
                 if (highClassGroup.getHoliday()) {
-                    SysConfig holidaySetting = sysConfigService.findByParamName(SysConfigService.HOLIDAY_SETTING);
-                    if (Objects.nonNull(holidaySetting) && StringUtils.isNotBlank(holidaySetting.getParanValue())) {
-                        holidayDays = new HashSet<>(JSON.parseArray(holidaySetting.getParanValue(), String.class));
+                    Integer tenantId = TenantContextHolder.getTenantId();
+                    String holidaySetting = sysTenantConfigService.getTenantConfigValue(SysConfigService.HOLIDAY_SETTING,tenantId);
+                    if(StringUtils.isNotBlank(holidaySetting)){
+                        holidayDays = new HashSet<>(JSON.parseArray(holidaySetting, String.class));
                     }
                 }
 
@@ -1992,9 +1994,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             Set<String> holidayDays = new HashSet<>();
 
             if (classGroup4MixDto.getHoliday()) {
-                SysConfig holidaySetting = sysConfigService.findByParamName(SysConfigService.HOLIDAY_SETTING);
-                if (Objects.nonNull(holidaySetting) && StringUtils.isNotBlank(holidaySetting.getParanValue())) {
-                    holidayDays = new HashSet<>(JSON.parseArray(holidaySetting.getParanValue(), String.class));
+                Integer tenantId = TenantContextHolder.getTenantId();
+                String holidaySetting = sysTenantConfigService.getTenantConfigValue(SysConfigService.HOLIDAY_SETTING,tenantId);
+                if(StringUtils.isNotBlank(holidaySetting)){
+                    holidayDays = new HashSet<>(JSON.parseArray(holidaySetting, String.class));
                 }
             }
 
@@ -2140,9 +2143,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
         Set<String> holidayDays = new HashSet<>();
         if (classGroup4MixDto.getHoliday()) {
-            SysConfig holidaySetting = sysConfigService.findByParamName(SysConfigService.HOLIDAY_SETTING);
-            if (Objects.nonNull(holidaySetting) && StringUtils.isNotBlank(holidaySetting.getParanValue())) {
-                holidayDays = new HashSet<>(JSON.parseArray(holidaySetting.getParanValue(), String.class));
+            Integer tenantId = TenantContextHolder.getTenantId();
+            String holidaySetting = sysTenantConfigService.getTenantConfigValue(SysConfigService.HOLIDAY_SETTING,tenantId);
+            if(StringUtils.isNotBlank(holidaySetting)){
+                holidayDays = new HashSet<>(JSON.parseArray(holidaySetting, String.class));
             }
         }
         ClassGroup classGroup = classGroup4MixDto.getClassGroup();
@@ -2466,9 +2470,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             }
 
             Set<String> holidayDays = new HashSet<>();
-            SysConfig holidaySetting = sysConfigService.findByParamName(SysConfigService.HOLIDAY_SETTING);
-            if (Objects.nonNull(holidaySetting) && StringUtils.isNotBlank(holidaySetting.getParanValue())) {
-                holidayDays = new HashSet<>(JSON.parseArray(holidaySetting.getParanValue(), String.class));
+            Integer tenantId = TenantContextHolder.getTenantId();
+            String holidaySetting = sysTenantConfigService.getTenantConfigValue(SysConfigService.HOLIDAY_SETTING,tenantId);
+            if(StringUtils.isNotBlank(holidaySetting)){
+                holidayDays = new HashSet<>(JSON.parseArray(holidaySetting, String.class));
             }
 
             Set<Integer> allTeacherIds = new HashSet<>();
@@ -2891,9 +2896,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             }
 
             Set<String> holidayDays = new HashSet<>();
-            SysConfig holidaySetting = sysConfigService.findByParamName(SysConfigService.HOLIDAY_SETTING);
-            if (Objects.nonNull(holidaySetting) && StringUtils.isNotBlank(holidaySetting.getParanValue())) {
-                holidayDays = new HashSet<>(JSON.parseArray(holidaySetting.getParanValue(), String.class));
+            Integer tenantId = TenantContextHolder.getTenantId();
+            String holidaySetting = sysTenantConfigService.getTenantConfigValue(SysConfigService.HOLIDAY_SETTING,tenantId);
+            if(StringUtils.isNotBlank(holidaySetting)){
+                holidayDays = new HashSet<>(JSON.parseArray(holidaySetting, String.class));
             }
 
             Set<Integer> allTeacherIds = new HashSet<>();
@@ -3196,9 +3202,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
             Set<String> holidayDays = new HashSet<>();
             if (classGroup4MixDto.getHoliday()) {
-                SysConfig holidaySetting = sysConfigService.findByParamName(SysConfigService.HOLIDAY_SETTING);
-                if (Objects.nonNull(holidaySetting) && StringUtils.isNotBlank(holidaySetting.getParanValue())) {
-                    holidayDays = new HashSet<>(JSON.parseArray(holidaySetting.getParanValue(), String.class));
+                Integer tenantId = TenantContextHolder.getTenantId();
+                String holidaySetting = sysTenantConfigService.getTenantConfigValue(SysConfigService.HOLIDAY_SETTING,tenantId);
+                if(StringUtils.isNotBlank(holidaySetting)){
+                    holidayDays = new HashSet<>(JSON.parseArray(holidaySetting, String.class));
                 }
             }
 

+ 107 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudCoachPaymentProgramServiceImpl.java

@@ -0,0 +1,107 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.entity.CloudCoachPaymentProgram;
+import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
+import com.ym.mec.biz.dal.entity.MemberRankSetting;
+import com.ym.mec.biz.dal.entity.TenantInfo;
+import com.ym.mec.biz.dal.enums.MessageTypeEnum;
+import com.ym.mec.biz.service.CloudCoachPaymentProgramService;
+import com.ym.mec.biz.service.MemberFeeSettingService;
+import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.common.tenant.TenantContextHolder;
+import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
+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;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class CloudCoachPaymentProgramServiceImpl extends BaseServiceImpl<Long, CloudCoachPaymentProgram>  implements CloudCoachPaymentProgramService {
+	
+	@Autowired
+	private CloudCoachPaymentProgramDao cloudCoachPaymentProgramDao;
+	@Autowired
+	private StudentCloudCoachPaymentDetailsDao studentCloudCoachPaymentDetailsDao;
+	@Autowired
+	private MemberFeeSettingService memberFeeSettingService;
+	@Autowired
+	private MemberRankSettingDao memberRankSettingDao;
+	@Autowired
+	private CloudTeacherOrderDao cloudTeacherOrderDao;
+	@Autowired
+	private TenantInfoDao tenantInfoDao;
+	@Autowired
+	private SysConfigDao sysConfigDao;
+	@Autowired
+	private SysMessageService sysMessageService;
+	@Autowired
+	private TeacherDao teacherDao;
+
+	@Override
+	public BaseDAO<Long, CloudCoachPaymentProgram> getDAO() {
+		return cloudCoachPaymentProgramDao;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void add(CloudCoachPaymentProgram cloudCoachPaymentProgram) {
+		List<Integer> userIds = cloudCoachPaymentProgram.getUserIds();
+		if(userIds == null || userIds.size() == 0){
+			throw new BizException("请选择学员");
+		}
+		Integer tenantId = TenantContextHolder.getTenantId();
+		//获取原价
+		BigDecimal originalFee = memberFeeSettingService.getAmount(cloudCoachPaymentProgram.getOrganId(),
+				cloudCoachPaymentProgram.getMemberRankSettingId(),
+				cloudCoachPaymentProgram.getPeriod(),
+				cloudCoachPaymentProgram.getMemberNum(),
+				MemberFeeSettingServiceImpl::getOriginalFee);
+		cloudCoachPaymentProgram.setOriginalAmount(originalFee);
+		//获取会员名称
+		MemberRankSetting memberRankSetting = memberRankSettingDao.get(cloudCoachPaymentProgram.getMemberRankSettingId());
+		cloudCoachPaymentProgram.setName(memberRankSetting.getName());
+		cloudCoachPaymentProgram.setUserNum(userIds.size());
+		cloudCoachPaymentProgram.setTenantId(tenantId);
+		//是否0元购买
+		Boolean isFree = cloudCoachPaymentProgram.getActualAmount().compareTo(BigDecimal.ZERO) == 0;
+		if(isFree){cloudCoachPaymentProgram.setPaymentUserNum(userIds.size());}
+		cloudCoachPaymentProgramDao.insert(cloudCoachPaymentProgram);
+
+		//批量插入学员缴费项目
+		studentCloudCoachPaymentDetailsDao.batchInsert(cloudCoachPaymentProgram.getId(),isFree?1:0,userIds,tenantId);
+		//如果是0元订单,保存为待激活的云教练订单
+		if(isFree){
+			CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
+			cloudTeacherOrder.setTime(cloudCoachPaymentProgram.getMemberNum().intValue());
+			cloudTeacherOrder.setOrganId(cloudCoachPaymentProgram.getOrganId());
+			cloudTeacherOrder.setType(cloudCoachPaymentProgram.getPeriod());
+			cloudTeacherOrder.setLevel(cloudCoachPaymentProgram.getMemberRankSettingId());
+			cloudTeacherOrder.setAmount(BigDecimal.ZERO);
+			cloudTeacherOrder.setStatus(1);
+			cloudTeacherOrder.setRemark(cloudCoachPaymentProgram.getRemark());
+			cloudTeacherOrderDao.batchInsert(cloudTeacherOrder,cloudCoachPaymentProgram.getUserIds());
+		}else {
+			//推送缴费消息
+			TenantInfo tenantInfo = tenantInfoDao.selectById(cloudCoachPaymentProgram.getTenantId());
+			Map<Integer, String> phoneMaps = MapUtil.convertMybatisMap(teacherDao.queryPhoneByIds(StringUtils.join(userIds)));
+			String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
+			String pushUrl = baseApiUrl + "/#/auditionActive/1?groupId=";
+			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_CLOUD_PAYMENT,phoneMaps,
+					null,0,"",null,tenantInfo.getName());
+			Map<Integer, String> userIdMaps = new HashMap<>(userIds.size());
+			userIds.forEach(e->userIdMaps.put(e,e.toString()));
+			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_CLOUD_PAYMENT,userIdMaps,
+					null,0,"","STUDENT",tenantInfo.getName());
+		}
+	}
+}

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

@@ -6,10 +6,7 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.EmployeeDto;
 import com.ym.mec.biz.dal.dto.EmployeeLevelDto;
-import com.ym.mec.biz.dal.entity.Employee;
-import com.ym.mec.biz.dal.entity.Organization;
-import com.ym.mec.biz.dal.entity.SysUserCashAccount;
-import com.ym.mec.biz.dal.entity.TenantInfo;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.EmployeeOperateEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.ParamEnum;
@@ -479,6 +476,9 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public void simpleUpdate(Employee employee) {
+		SysUser user = teacherDao.getUser(employee.getId());
+		//为了处理平台账户修改个人信息
+		employee.setTenantId(user.getTenantId());
 		employee.setUserId(employee.getId());
 		employee.setUpdateTime(new Date());
 		if(StringUtils.isNotEmpty(employee.getPhone())){

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

@@ -153,7 +153,7 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 
 		Map<IndexDataType, List<IndexBaseMonthData>> typeDateMap = indexBaseDatas.stream().filter(d->Objects.nonNull(d.getDataType())).collect(Collectors.groupingBy(IndexBaseMonthData::getDataType));
 
-		if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(FINANCE_PAY.getCode())||dataTypes.contains(FINANCE_BALANCE_AMOUNT.getCode())||dataTypes.contains(FINANCE_AMOUNT.getCode())){
+		if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(FINANCE_PAY.getCode())||dataTypes.contains(FINANCE_BALANCE_AMOUNT.getCode())||dataTypes.contains(FINANCE_AMOUNT.getCode()) && organIds != null){
 			List<IndexBaseMonthData> financePayDataWithTimely = indexBaseMonthDataDao.getFinancePayDataWithTimely(startDate.toString(), endDate.toString(), new ArrayList<>(organIds),queryInfo.getTenantId());
 			typeDateMap.put(IndexDataType.FINANCE_PAY,financePayDataWithTimely);
 			typeDateMap.put(IndexDataType.FINANCE_BALANCE_AMOUNT,indexBaseMonthDataDao.getFinanceBalanceDataWithTimely(startDate.toString(), endDate.toString(), new ArrayList<>(organIds),queryInfo.getTenantId()));

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

@@ -202,13 +202,14 @@ public class IndexErrDataRecordServiceImpl extends BaseServiceImpl<Long, IndexEr
 		}
 		params.put("queryOrganIds", queryOrganIds);
 
+		Integer tenantId = TenantContextHolder.getTenantId();
 		int count = indexErrDataRecordDao.queryErrStringsCount(params);
 		pageInfo.setTotal(count);
 		params.put("offset", pageInfo.getOffset());
 		List<IndexErrorDataExportDto> dataList = new ArrayList<>();
 		List<String> strings = indexErrDataRecordDao.queryErrStrings(params);
 		if (!CollectionUtils.isEmpty(strings)) {
-			List<IndexErrDataRecord> errRecords = indexErrDataRecordDao.getWithOrganMonthUserStr(strings);
+			List<IndexErrDataRecord> errRecords = indexErrDataRecordDao.getWithOrganMonthUserStr(strings,tenantId);
 			List<Integer> organIds = errRecords.stream().map(IndexErrDataRecord::getOrganId).collect(Collectors.toList());
 			List<Organization> organs = organizationDao.getOrgans(organIds,queryInfo.getTenantId());
 			Map<Integer, String> idOrganNameMap = organs.stream().collect(Collectors.toMap(Organization::getId, o -> o.getName()));

+ 52 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberFeeSettingServiceImpl.java

@@ -1,6 +1,8 @@
 package com.ym.mec.biz.service.impl;
 
+import com.ym.mec.biz.dal.enums.PeriodEnum;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
 import org.springframework.beans.factory.annotation.Autowired;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.biz.dal.entity.MemberFeeSetting;
@@ -8,6 +10,11 @@ import com.ym.mec.biz.service.MemberFeeSettingService;
 import com.ym.mec.biz.dal.dao.MemberFeeSettingDao;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.util.function.BiFunction;
+
+import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum.AUDITING;
+
 @Service
 public class MemberFeeSettingServiceImpl extends BaseServiceImpl<Integer, MemberFeeSetting>  implements MemberFeeSettingService {
 	
@@ -23,4 +30,49 @@ public class MemberFeeSettingServiceImpl extends BaseServiceImpl<Integer, Member
     public MemberFeeSetting findByRankIdAndOrganId(Integer organId, Integer rankId) {
 		return memberFeeSettingDao.findByRankIdAndOrganId(organId,rankId);
     }
+
+	@Override
+	public BigDecimal getAmount(Integer organId, Integer memberRankSettingId, PeriodEnum period, BigDecimal num,
+								BiFunction<PeriodEnum, MemberFeeSetting, BigDecimal> func) {
+		MemberFeeSetting memberFee = memberFeeSettingDao.findByRankIdAndOrganId(organId,memberRankSettingId);
+		if(memberFee == null){
+			throw new BizException("操作失败:请配置当前分部会员收费标准");
+		}
+		//获取总价(原价或者现价)
+		return func.apply(period,memberFee).multiply(num).setScale(0, BigDecimal.ROUND_HALF_UP);
+	}
+
+	public static BigDecimal getGroupPurchaseFee(PeriodEnum periodEnum,MemberFeeSetting memberFee){
+		switch (periodEnum){
+			case DAY :
+				return memberFee.getGroupPurchaseDayFee();
+			case MONTH :
+				return memberFee.getGroupPurchaseMonthFee();
+			case QUARTERLY :
+				return memberFee.getGroupPurchaseQuarterlyFee();
+			case YEAR_HALF :
+				return memberFee.getGroupPurchaseHalfYearFee();
+			case YEAR :
+				return memberFee.getGroupPurchaseYearFee();
+			default:
+				throw new BizException("请选择正确的会员有效期");
+		}
+	}
+
+	public static BigDecimal getOriginalFee(PeriodEnum periodEnum,MemberFeeSetting memberFee){
+		switch (periodEnum){
+			case DAY :
+				return memberFee.getOriginalDayFee();
+			case MONTH :
+				return memberFee.getOriginalMonthFee();
+			case QUARTERLY :
+				return memberFee.getOriginalQuarterlyFee();
+			case YEAR_HALF :
+				return memberFee.getOriginalHalfYearFee();
+			case YEAR :
+				return memberFee.getOriginalYearFee();
+			default:
+				throw new BizException("请选择正确的会员有效期");
+		}
+	}
 }

+ 109 - 159
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java

@@ -1,15 +1,20 @@
 package com.ym.mec.biz.service.impl;
 
-import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.MemberRankPrivilegesDao;
+import com.ym.mec.biz.dal.dao.MemberRankSettingDao;
 import com.ym.mec.biz.dal.dto.MemberPayParamDto;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.service.*;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.service.IdGeneratorService;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -20,23 +25,11 @@ import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.MemberRankPrivilegesDao;
-import com.ym.mec.biz.dal.dao.MemberRankSettingDao;
-import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
-import com.ym.mec.biz.dal.entity.MemberFeeSetting;
-import com.ym.mec.biz.dal.entity.MemberRankPrivileges;
-import com.ym.mec.biz.dal.entity.MemberRankSetting;
-import com.ym.mec.biz.dal.entity.Student;
-import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
-import com.ym.mec.biz.dal.entity.SysUserCashAccount;
-import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
-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.date.DateUtil;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 @Service
 public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, MemberRankSetting> implements MemberRankSettingService {
@@ -45,36 +38,28 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
 	private MemberRankSettingDao memberRankSettingDao;
 	@Autowired
 	private MemberRankPrivilegesDao memberRankPrivilegesDao;
-
-	@Autowired
-	private MemberFeeSettingService memberFeeSettingService;
-
 	@Autowired
 	private StudentService studentService;
-
 	@Autowired
 	private StudentPaymentOrderService studentPaymentOrderService;
-
 	@Autowired
 	private SysUserCashAccountService sysUserCashAccountService;
-
 	@Autowired
 	private SysUserCashAccountDetailService sysUserCashAccountDetailService;
-
 	@Autowired
 	private ContractService contractService;
-
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
-
 	@Autowired
 	private CloudTeacherOrderService cloudTeacherOrderService;
-
 	@Autowired
 	private IdGeneratorService idGeneratorService;
-
 	@Autowired
 	private SysCouponCodeService sysCouponCodeService;
+	@Autowired
+	private StudentCloudCoachPaymentDetailsService studentCloudCoachPaymentDetailsService;
+	@Autowired
+	private CloudCoachPaymentProgramService cloudCoachPaymentProgramService;
 
 	private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
@@ -144,76 +129,45 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
 	}
 
 	@Override
-	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
-	public Map buy(MemberPayParamDto memberPayParamDto) throws Exception {
-		logger.info("云教练活动购买:memberPayParamDto:{} ",memberPayParamDto);
-		Integer userId = memberPayParamDto.getUserId();
-		BigDecimal amount = memberPayParamDto.getAmount();
-		Integer memberRankId = memberPayParamDto.getMemberRankId();
+	@Transactional(rollbackFor = Exception.class)
+	public HttpResponseResult buy(MemberPayParamDto memberPayParamDto) throws Exception {
+		logger.info("云教练购买:memberPayParamDto:{} ",memberPayParamDto);
+		Long paymentId = memberPayParamDto.getPaymentId();
+		StudentCloudCoachPaymentDetails cloudCoachPaymentDetails = studentCloudCoachPaymentDetailsService.get(paymentId);
+		if(cloudCoachPaymentDetails == null){
+			throw new BizException("云教练订单不存在,请联系指导老师");
+		}
+		if(cloudCoachPaymentDetails.getPaymentStatus() == 1){
+			throw new BizException("当前云教练订单已支付,感谢您的支持");
+		}
+		//判断用户是否已存在订单
+		List<StudentPaymentOrder> applyOrderList = studentPaymentOrderService.queryByDealStatus(paymentId.toString(), OrderTypeEnum.MEMBER,DealStatusEnum.ING);
+		if (CollectionUtils.isNotEmpty(applyOrderList)) {
+			HttpResponseResult result = studentPaymentOrderService.checkRepeatPay(applyOrderList.get(0), memberPayParamDto.getRepeatPay());
+			if (result.getCode() != 200) {
+				return result;
+			}
+		}
+
+		Integer userId = cloudCoachPaymentDetails.getUserId();
 		Student student = studentService.getLocked(userId);
 		if (student == null) {
 			throw new BizException("非法访问");
 		}
-		//是否可以购买
-		buyCloudTeacherActive(userId,memberPayParamDto.getActiveRemark(),memberPayParamDto.getRemark());
 		SysUser user = sysUserFeignService.queryUserById(userId);
 
 		Integer organId = user.getOrganId();
 		if (organId == null) {
 			throw new BizException("学生没有分部编号");
 		}
+		CloudCoachPaymentProgram cloudCoachPaymentProgram = cloudCoachPaymentProgramService.get(cloudCoachPaymentDetails.getCloudCoachPaymentProgramId());
 
-		MemberRankSetting memberRankSetting = memberRankSettingDao.get(memberRankId);
-		if (memberRankSetting == null) {
-			throw new BizException("会员等级错误");
-		}
-
-		MemberFeeSetting memberFeeSetting = memberFeeSettingService.findByRankIdAndOrganId(organId, memberRankId);
-
-		if (memberFeeSetting == null) {
-			throw new BizException("分部会员价格出现异常");
-		}
-
-		CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
-
-		BigDecimal actualAmount = BigDecimal.ZERO;
-		cloudTeacherOrder.setType(memberPayParamDto.getPeriodEnum());
-		switch (memberPayParamDto.getPeriodEnum()) {
-			case DAY:
-				actualAmount = memberFeeSetting.getCurrentDayFee();
-				cloudTeacherOrder.setTime(1);
-				break;
-			case MONTH:
-				actualAmount = memberFeeSetting.getCurrentMonthFee().multiply(new BigDecimal(memberPayParamDto.getBuyNum()));
-				//购买月份加上赠送月份,目前只有按月购买的活动,其他的暂不处理
-				cloudTeacherOrder.setTime(memberPayParamDto.getBuyNum() + memberPayParamDto.getGiveNum());
-				break;
-			case QUARTERLY:
-				actualAmount = memberFeeSetting.getCurrentQuarterlyFee();
-				cloudTeacherOrder.setTime(3);
-				break;
-			case YEAR_HALF:
-				actualAmount = memberFeeSetting.getCurrentHalfYearFee();
-				cloudTeacherOrder.setTime(6);
-				break;
-			case YEAR:
-				actualAmount = memberFeeSetting.getCurrentYearFee();
-				cloudTeacherOrder.setTime(1);
-				break;
-
-			default:
-				break;
-		}
-
-		// 判断金额是否正确
-		if (actualAmount.compareTo(amount) != 0) {
-			throw new BizException("非法请求");
-		}
+		BigDecimal actualAmount = cloudCoachPaymentProgram.getActualAmount();
 
 		Date date = new Date();
 
-		StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(memberPayParamDto.getCouponIdList(),amount,true);
-		amount = studentPaymentOrder.getActualAmount();
+		StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(memberPayParamDto.getCouponIdList(),actualAmount,true);
+		actualAmount = studentPaymentOrder.getActualAmount();
 		studentPaymentOrder.setUserId(userId);
 		studentPaymentOrder.setOrganId(organId);
 		studentPaymentOrder.setRoutingOrganId(organId);
@@ -226,28 +180,16 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
 		studentPaymentOrder.setGroupType(GroupType.MEMBER);
 		studentPaymentOrder.setRemitFee(BigDecimal.ZERO);
 		studentPaymentOrder.setCourseRemitFee(BigDecimal.ZERO);
-		studentPaymentOrder.setMemo(memberRankSetting.getName());
+		studentPaymentOrder.setMemo(cloudCoachPaymentProgram.getRemark());
 		studentPaymentOrder.setPaymentChannel("BALANCE");
-		studentPaymentOrder.setMusicGroupId(memberRankId + "");
-
-		if (memberPayParamDto.isUseBalance()) {
-			SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(userId);
-			if (userCashAccount == null) {
-				throw new BizException("用户账户找不到");
-			}
-			studentPaymentOrder.setPaymentChannel("BALANCE");
-			if (userCashAccount.getBalance().subtract(amount).doubleValue() >= 0) {
-				studentPaymentOrder.setActualAmount(BigDecimal.ZERO);
-				studentPaymentOrder.setBalancePaymentAmount(amount);
-				sysUserCashAccountService.updateBalance(userId, amount.negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "购买会员");
-
-			} else {
-				if (userCashAccount.getBalance().doubleValue() > 0) {
-					sysUserCashAccountService.updateBalance(userId, userCashAccount.getBalance().negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "购买会员");
-					studentPaymentOrder.setBalancePaymentAmount(userCashAccount.getBalance());
-					studentPaymentOrder.setActualAmount(studentPaymentOrder.getExpectAmount().subtract(userCashAccount.getBalance()));
-				}
-			}
+		studentPaymentOrder.setMusicGroupId(paymentId.toString());
+		// 判断金额是否正确
+		if (actualAmount.compareTo(memberPayParamDto.getAmount()) != 0) {
+			throw new BizException("非法请求");
+		}
+		//使用余额支付
+		if (memberPayParamDto.getUseBalancePayment()) {
+			useBalanceAmount(studentPaymentOrder,"购买会员");
 		}
 		String orderNo = idGeneratorService.generatorId("payment") + "";
 		studentPaymentOrder.setOrderNo(orderNo);
@@ -255,27 +197,35 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
 		studentPaymentOrder.setUpdateTime(date);
 		studentPaymentOrder.setVersion(0);
 		studentPaymentOrderService.insert(studentPaymentOrder);
-
-		// 订单明细
-		cloudTeacherOrder.setOrganId(studentPaymentOrder.getOrganId());
-		cloudTeacherOrder.setStudentId(studentPaymentOrder.getUserId());
-		cloudTeacherOrder.setLevel(memberRankId);
-		cloudTeacherOrder.setAmount(amount);
-		cloudTeacherOrder.setStatus(0);
-		cloudTeacherOrder.setOrderId(studentPaymentOrder.getId());
-		cloudTeacherOrder.setCreateTime(date);
-		cloudTeacherOrder.setUpdateTime(date);
-		cloudTeacherOrder.setActiveRemark(memberPayParamDto.getActiveRemark());
-		cloudTeacherOrder.setRemark(memberPayParamDto.getRemark());
-		cloudTeacherOrderService.insert(cloudTeacherOrder);
-
 		Map result = studentPaymentOrderService.createOrder(studentPaymentOrder, null, "BUY_MEMBER");
+		return BaseController.succeed(result);
+	}
 
-		return result;
+	public StudentPaymentOrder useBalanceAmount(StudentPaymentOrder studentPaymentOrder,String memo){
+		Integer userId = studentPaymentOrder.getUserId();
+		SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(userId);
+		if (userCashAccount == null) {
+			throw new BizException("用户账户找不到");
+		}
+		BigDecimal actualAmount = studentPaymentOrder.getActualAmount();
+		studentPaymentOrder.setPaymentChannel("BALANCE");
+		if (userCashAccount.getBalance().subtract(actualAmount).doubleValue() >= 0) {
+			studentPaymentOrder.setActualAmount(BigDecimal.ZERO);
+			studentPaymentOrder.setBalancePaymentAmount(actualAmount);
+			sysUserCashAccountService.updateBalance(userId, actualAmount.negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, memo);
+
+		} else {
+			if (userCashAccount.getBalance().doubleValue() > 0) {
+				sysUserCashAccountService.updateBalance(userId, userCashAccount.getBalance().negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, memo);
+				studentPaymentOrder.setBalancePaymentAmount(userCashAccount.getBalance());
+				studentPaymentOrder.setActualAmount(studentPaymentOrder.getExpectAmount().subtract(userCashAccount.getBalance()));
+			}
+		}
+		return studentPaymentOrder;
 	}
 
 	@Override
-	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+	@Transactional(rollbackFor = Exception.class)
 	public boolean orderCallback(StudentPaymentOrder studentPaymentOrder) {
 
 		Integer userId = studentPaymentOrder.getUserId();
@@ -311,27 +261,28 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
 
 		// 支付成功
 		if (studentPaymentOrder.getStatus() == DealStatusEnum.SUCCESS) {
-			// 查询会员订单信息
-//			CloudTeacherOrder cloudTeacherOrder = cloudTeacherOrderService.queryByOrderId(studentPaymentOrder.getId());
-//			cloudTeacherOrder.setStatus(2);
-//			cloudTeacherOrder.setUpdateTime(nowDate);
-//
-//			PeriodEnum periodEnum = cloudTeacherOrder.getType();
-
-//			if (student.getMemberRankSettingId() == null || nowDate.after(student.getMembershipEndTime())) {
-//				cloudTeacherOrder.setStartTime(nowDate);
-//				cloudTeacherOrder.setEndTime(studentService.getMembershipEndTime(periodEnum,nowDate,cloudTeacherOrder.getTime()));
-//			} else {
-//				cloudTeacherOrder.setStartTime(DateUtil.addDays(student.getMembershipEndTime(), 1));
-//				cloudTeacherOrder.setEndTime(studentService.getMembershipEndTime(periodEnum,student.getMembershipEndTime(),cloudTeacherOrder.getTime()));
-//			}
-
-//			cloudTeacherOrderService.update(cloudTeacherOrder);
-			// 添加会员有效时长
-//			studentService.updateMemberRank(cloudTeacherOrder);
-			//云教练活动赠送优惠券
-//			cloudTeacherActiveGiveCoupon(cloudTeacherOrder);
-//			// 插入交易明细
+			StudentCloudCoachPaymentDetails coachPaymentDetails = studentCloudCoachPaymentDetailsService.get(Long.parseLong(studentPaymentOrder.getMusicGroupId()));
+			CloudCoachPaymentProgram cloudCoachPaymentProgram = cloudCoachPaymentProgramService.get(coachPaymentDetails.getCloudCoachPaymentProgramId());
+			//保存云教练数据
+			CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
+			cloudTeacherOrder.setOrderId(studentPaymentOrder.getId());
+			cloudTeacherOrder.setLevel(cloudCoachPaymentProgram.getMemberRankSettingId());
+			cloudTeacherOrder.setStatus(1);
+			cloudTeacherOrder.setType(cloudCoachPaymentProgram.getPeriod());
+			cloudTeacherOrder.setTime(cloudCoachPaymentProgram.getMemberNum().intValue());
+			cloudTeacherOrder.setStudentId(coachPaymentDetails.getUserId());
+			cloudTeacherOrder.setOrganId(studentPaymentOrder.getOrganId());
+			cloudTeacherOrder.setAmount(studentPaymentOrder.getActualAmount());
+			cloudTeacherOrderService.insert(cloudTeacherOrder);
+
+			//修改缴费状态
+			coachPaymentDetails.setPaymentStatus(1);
+			coachPaymentDetails.setPaymentOrderId(studentPaymentOrder.getId());
+			studentCloudCoachPaymentDetailsService.update(coachPaymentDetails);
+			//修改实际缴费人数
+			cloudCoachPaymentProgram.setPaymentUserNum(cloudCoachPaymentProgram.getPaymentUserNum() + 1);
+			cloudCoachPaymentProgramService.update(cloudCoachPaymentProgram);
+			// 插入交易明细
 			BigDecimal amount = studentPaymentOrder.getActualAmount();
 			if (amount.compareTo(BigDecimal.ZERO) > 0) {
 				SysUserCashAccount cashAccount = sysUserCashAccountService.get(userId);
@@ -407,17 +358,16 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
 		}
 		result.setCode(HttpStatus.OK.value());
 		MemberPayParamDto memberPayParamDto = new MemberPayParamDto();
-		memberPayParamDto.setMemberRankId(memberRankId);
-		memberPayParamDto.setUserId(userId);
-		memberPayParamDto.setPeriodEnum(month);
-		memberPayParamDto.setUseBalance(isUseBalance);
-		memberPayParamDto.setBuyNum(buyNum);
-		memberPayParamDto.setGiveNum(giveNum);
-		memberPayParamDto.setActiveRemark(activeRemark);
-		memberPayParamDto.setRemark(remark);
+//		memberPayParamDto.setMemberRankId(memberRankId);
+//		memberPayParamDto.setUserId(userId);
+//		memberPayParamDto.setPeriodEnum(month);
+//		memberPayParamDto.setUseBalance(isUseBalance);
+//		memberPayParamDto.setBuyNum(buyNum);
+//		memberPayParamDto.setGiveNum(giveNum);
+//		memberPayParamDto.setActiveRemark(activeRemark);
+//		memberPayParamDto.setRemark(remark);
 		memberPayParamDto.setAmount(amount);
-		result.setData(this.buy(memberPayParamDto));
-		return result;
+		return this.buy(memberPayParamDto);
 	}
 
 	//云教练活动赠送优惠券

+ 10 - 59
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderMemberServiceImpl.java

@@ -1,12 +1,12 @@
 package com.ym.mec.biz.service.impl;
 
-import com.ym.mec.biz.dal.dao.MemberFeeSettingDao;
 import com.ym.mec.biz.dal.dao.MemberRankSettingDao;
 import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderMemberDao;
-import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentBaseCalender;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.CalenderBaseServiceEnum;
 import com.ym.mec.biz.dal.enums.PeriodEnum;
+import com.ym.mec.biz.service.MemberFeeSettingService;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderBaseService;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderMemberService;
 import com.ym.mec.common.dal.BaseDAO;
@@ -16,7 +16,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.util.List;
 import java.util.function.BiFunction;
 
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum.AUDITING;
@@ -35,7 +34,7 @@ public class MusicGroupPaymentCalenderMemberServiceImpl extends BaseServiceImpl<
     }
 
     @Autowired
-    private MemberFeeSettingDao memberFeeSettingDao;
+    private MemberFeeSettingService memberFeeSettingService;
     @Autowired
     private MemberRankSettingDao memberRankSettingDao;
 
@@ -45,19 +44,9 @@ public class MusicGroupPaymentCalenderMemberServiceImpl extends BaseServiceImpl<
 
     @Override
     public MusicGroupPaymentCalender.PaymentCalenderStatusEnum checkComponentAmount(MusicGroupPaymentBaseCalender baseCalender) {
-        MusicGroupPaymentCalenderMember calenderMember = baseCalender.getCalenderMember();
-        if(calenderMember != null){
-            MusicGroup musicGroup = baseCalender.getMusicGroup();
-            //会员价格是否变动
-            MemberFeeSetting memberFee = memberFeeSettingDao.findByRankIdAndOrganId(musicGroup.getOrganId(), calenderMember.getMemberRankSettingId());
-            if(memberFee == null){
-                throw new BizException("操作失败:请配置当前分部会员收费标准");
-            }
-            //获取会员总价
-            BigDecimal memberPaymentAmount = getGroupPurchaseFee(calenderMember.getPeriod(),memberFee).multiply(calenderMember.getNum()).setScale(0, BigDecimal.ROUND_HALF_UP);
-            if(memberPaymentAmount.compareTo(calenderMember.getActualAmount()) != 0){
-                return AUDITING;
-            }
+        if(getAmount(baseCalender, MemberFeeSettingServiceImpl::getGroupPurchaseFee).
+                compareTo(baseCalender.getCalenderMember().getActualAmount()) != 0){
+            return AUDITING;
         }
         return NO;
     }
@@ -73,12 +62,12 @@ public class MusicGroupPaymentCalenderMemberServiceImpl extends BaseServiceImpl<
 
     @Override
     public BigDecimal getOriginalAmount(MusicGroupPaymentBaseCalender baseCalender) {
-        return getAmount(baseCalender, this::getOriginalFee);
+        return getAmount(baseCalender, MemberFeeSettingServiceImpl::getOriginalFee);
     }
 
     @Override
     public BigDecimal getCurrentAmount(MusicGroupPaymentBaseCalender calenderMember) {
-        return getAmount(calenderMember, this::getGroupPurchaseFee);
+        return getAmount(calenderMember, MemberFeeSettingServiceImpl::getGroupPurchaseFee);
     }
 
     @Override
@@ -94,51 +83,13 @@ public class MusicGroupPaymentCalenderMemberServiceImpl extends BaseServiceImpl<
         return bean;
     }
 
-    private BigDecimal getGroupPurchaseFee(PeriodEnum periodEnum,MemberFeeSetting memberFee){
-        switch (periodEnum){
-            case DAY :
-                return memberFee.getGroupPurchaseDayFee();
-            case MONTH :
-                return memberFee.getGroupPurchaseMonthFee();
-            case QUARTERLY :
-                return memberFee.getGroupPurchaseQuarterlyFee();
-            case YEAR_HALF :
-                return memberFee.getGroupPurchaseHalfYearFee();
-            case YEAR :
-                return memberFee.getGroupPurchaseYearFee();
-            default:
-                throw new BizException("请选择正确的会员有效期");
-        }
-    }
-
-    private BigDecimal getOriginalFee(PeriodEnum periodEnum,MemberFeeSetting memberFee){
-        switch (periodEnum){
-            case DAY :
-                return memberFee.getOriginalDayFee();
-            case MONTH :
-                return memberFee.getOriginalMonthFee();
-            case QUARTERLY :
-                return memberFee.getOriginalQuarterlyFee();
-            case YEAR_HALF :
-                return memberFee.getOriginalHalfYearFee();
-            case YEAR :
-                return memberFee.getOriginalYearFee();
-            default:
-                throw new BizException("请选择正确的会员有效期");
-        }
-    }
-
     private BigDecimal getAmount(MusicGroupPaymentBaseCalender baseCalender, BiFunction<PeriodEnum,MemberFeeSetting,BigDecimal> func){
         MusicGroupPaymentCalenderMember calenderMember = baseCalender.getCalenderMember();
         if(calenderMember != null){
             MusicGroup musicGroup = baseCalender.getMusicGroup();
             //会员价格是否变动
-            MemberFeeSetting memberFee = memberFeeSettingDao.findByRankIdAndOrganId(musicGroup.getOrganId(), calenderMember.getMemberRankSettingId());
-            if(memberFee == null){
-                throw new BizException("操作失败:请配置当前分部会员收费标准");
-            }
-            //获取会员总价
-            return func.apply(calenderMember.getPeriod(),memberFee).multiply(calenderMember.getNum()).setScale(0, BigDecimal.ROUND_HALF_UP);
+            return memberFeeSettingService.getAmount(musicGroup.getOrganId(),calenderMember.getMemberRankSettingId(),
+                    calenderMember.getPeriod(),calenderMember.getNum(),func);
         }
         return BigDecimal.ZERO;
     }

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

@@ -893,7 +893,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             userPhoneMap.put(endTeacher.getId(), endTeacher.getPhone());
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.NO_BUY_CLOUD_TEACHER_MSG,
                     userPhoneMap, null, 0, null, null, musicGroup.getName(), studentRegistration.getName());
-            if (!canPay) {
+            if (!canPay && studentRegistration.getMusicGroupStatus() == StudentMusicGroupStatusEnum.APPLY) {
                 Map<String, String> notifyMap = new HashMap<>();
                 notifyMap.put("hasPaidZero", "205");
                 notifyMap.put("orderNo", studentPaymentOrder.getOrderNo());

+ 46 - 22
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrderPayOpsServiceImpl.java

@@ -1,5 +1,31 @@
 package com.ym.mec.biz.service.impl;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
+import java.util.function.BiPredicate;
+import java.util.function.Consumer;
+import java.util.function.Function;
+
+import org.apache.commons.lang3.StringUtils;
+import org.redisson.api.RBucket;
+import org.redisson.api.RedissonClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.DigestUtils;
+
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
@@ -9,7 +35,14 @@ import com.ym.mec.biz.dal.entity.TenantConfig;
 import com.ym.mec.biz.dal.entity.TenantOrderRecord;
 import com.ym.mec.biz.dal.entity.TenantPaymentOrder;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
-import com.ym.mec.biz.service.*;
+import com.ym.mec.biz.service.CloudTeacherOrderService;
+import com.ym.mec.biz.service.OrderPayOpsService;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.biz.service.SysConfigService;
+import com.ym.mec.biz.service.SysPaymentConfigService;
+import com.ym.mec.biz.service.TenantConfigService;
+import com.ym.mec.biz.service.TenantOrderRecordService;
+import com.ym.mec.biz.service.TenantPaymentOrderService;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.WrapperUtil;
 import com.ym.mec.thirdparty.adapay.ConfigInit;
@@ -18,25 +51,6 @@ import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
 import com.ym.mec.util.json.JsonUtil;
 
-import org.apache.commons.lang3.StringUtils;
-import org.redisson.api.RBucket;
-import org.redisson.api.RedissonClient;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.util.DigestUtils;
-
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.TimeUnit;
-import java.util.function.BiPredicate;
-import java.util.function.Consumer;
-import java.util.function.Function;
-
 /**
  * @author hgw
  * Created by 2021-12-22
@@ -90,12 +104,15 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         checkSing(payParam);
 
         Map<String, Object> payment = new HashMap<>();
-        if (platform != null) {
+        if (StringUtils.isBlank(platform)) {
             //根据传入platform 来判断执行哪个操作
             Function<PaymentParam, Map<String, Object>> function = checkOrderType.get(platform);
             //如果以上操作都没有 则应该是这一个,因为老代码就是这样写的。
             if (Objects.isNull(function)) {
                 StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findOrderByOrderNo(payParam.getOrderNo());
+                if (Objects.isNull(studentPaymentOrder)) {
+                    throw new BizException("订单不存在");
+                }
                 payParam.setTenantId(studentPaymentOrder.getTenantId());
                 payment = checkOrderAndGetParam(payParam,
                         studentPaymentOrder,
@@ -115,6 +132,9 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
     private Map<String, Object> teacher(PaymentParam payParam) {
         Map<String, Object> payment;
         TenantPaymentOrder tenantPaymentOrder = tenantPaymentOrderService.queryByOrderNo(payParam.getOrderNo());
+        if (Objects.isNull(tenantPaymentOrder)) {
+            throw new BizException("订单不存在");
+        }
         payParam.setTenantId(1);
         try {
             payment = checkOrderAndGetParam(payParam,
@@ -161,8 +181,12 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
 
     //查询订单
     private TenantOrderRecord getTenantOrderRecord(String orderNo) {
-        return tenantOrderRecordService.getOne(new WrapperUtil<TenantOrderRecord>()
+        TenantOrderRecord orderRecord = tenantOrderRecordService.getOne(new WrapperUtil<TenantOrderRecord>()
                 .hasEq("order_no_", orderNo).queryWrapper());
+        if (Objects.isNull(orderRecord)) {
+            throw new BizException("订单不存在");
+        }
+        return orderRecord;
     }
 
     //获取支付数据

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCloudCoachPaymentDetailsServiceImpl.java

@@ -0,0 +1,22 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.biz.dal.dao.StudentCloudCoachPaymentDetailsDao;
+import com.ym.mec.biz.dal.entity.StudentCloudCoachPaymentDetails;
+import com.ym.mec.biz.service.StudentCloudCoachPaymentDetailsService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class StudentCloudCoachPaymentDetailsServiceImpl extends BaseServiceImpl<Long, StudentCloudCoachPaymentDetails>  implements StudentCloudCoachPaymentDetailsService {
+	
+	@Autowired
+	private StudentCloudCoachPaymentDetailsDao studentCloudCoachPaymentDetailsDao;
+
+	@Override
+	public BaseDAO<Long, StudentCloudCoachPaymentDetails> getDAO() {
+		return studentCloudCoachPaymentDetailsDao;
+	}
+	
+}

+ 23 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -804,15 +804,26 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     public void cutSubjectPlan(StudentPaymentOrder order){
         if(order.getType() == OrderTypeEnum.APPLY){
             //如果是报名订单,订单关闭时需要更改已缴费学员数
-            // 判断之前是否已有订单
             String musicGroupId = order.getMusicGroupId();
             Integer userId = order.getUserId();
-            List<StudentPaymentOrder> oldStudentPaymentOrderList = this.queryByCondition(GroupType.MUSIC,musicGroupId, userId, DealStatusEnum.SUCCESS, OrderTypeEnum.APPLY);
-            if(oldStudentPaymentOrderList == null || oldStudentPaymentOrderList.size() == 0){
-                StudentRegistration studentRegistration = studentRegistrationService.getStudentRegister(musicGroupId, userId);
-                MusicGroupSubjectPlan musicOneSubjectClassPlan = musicGroupSubjectPlanService.getMusicOneSubjectClassPlan(musicGroupId, studentRegistration.getActualSubjectId());
-                musicOneSubjectClassPlan.setPaidStudentNum(musicOneSubjectClassPlan.getPaidStudentNum() == null?0:musicOneSubjectClassPlan.getPaidStudentNum() - 1);
-                musicGroupSubjectPlanService.update(musicOneSubjectClassPlan);
+            StudentRegistration studentRegistration = studentRegistrationService.getStudentRegister(musicGroupId, userId);
+            //获取学员在乐团的状态,如果是在读,那么不处理人数
+            if(studentRegistration.getMusicGroupStatus() == StudentMusicGroupStatusEnum.APPLY){
+                List<StudentPaymentOrder> oldStudentPaymentOrderList = this.queryByCondition(GroupType.MUSIC,musicGroupId, userId, DealStatusEnum.SUCCESS, OrderTypeEnum.APPLY);
+                //判断是否有成功的订单,如果有,表示已经处理过人数
+                if(oldStudentPaymentOrderList == null || oldStudentPaymentOrderList.size() == 0){
+                    List<StudentPaymentOrderDetail> orderDetail = studentPaymentOrderDetailService.getOrderDetail(order.getId());
+                    if(orderDetail != null && orderDetail.size() > 0){
+                        long count = orderDetail.stream().filter(e -> e.getType() == OrderDetailTypeEnum.MUSICAL || e.getType() == OrderDetailTypeEnum.CLOUD_TEACHER).count();
+                        MusicGroup musicGroup = musicGroupService.get(musicGroupId);
+                        //如果购买了乐器或者云教练,或者不是会员团,那么关闭订单时人数减一
+                        if(count > 0 || musicGroup.getCourseViewType() != CourseViewTypeEnum.MEMBER_FEE){
+                            MusicGroupSubjectPlan musicOneSubjectClassPlan = musicGroupSubjectPlanService.getMusicOneSubjectClassPlan(musicGroupId, studentRegistration.getActualSubjectId());
+                            musicOneSubjectClassPlan.setPaidStudentNum(musicOneSubjectClassPlan.getPaidStudentNum() == null?0:musicOneSubjectClassPlan.getPaidStudentNum() - 1);
+                            musicGroupSubjectPlanService.update(musicOneSubjectClassPlan);
+                        }
+                    }
+                }
             }
         }
     }
@@ -861,5 +872,10 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         return voList;
     }
 
+    @Override
+    public List<StudentPaymentOrder> queryByDealStatus(String musicGroupId, OrderTypeEnum orderType, DealStatusEnum status) {
+        return studentPaymentOrderDao.queryByDealStatus(musicGroupId,orderType,status);
+    }
+
 
 }

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

@@ -234,6 +234,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         if (couponIdList != null && couponIdList.size() > 0) {
             studentGoodsSell.setCouponIds(StringUtils.join(couponIdList, ","));
         }
+        studentGoodsSell.setTenantId(student.getTenantId());
         studentGoodsSellDao.insert(studentGoodsSell);
 
         if (studentGoodsSell.getType() == 1) {
@@ -249,6 +250,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         studentPaymentOrder.setStatus(DealStatusEnum.ING);
         studentPaymentOrder.setOrganId(student.getOrganId());
         studentPaymentOrder.setRoutingOrganId(student.getOrganId());
+        studentPaymentOrder.setTenantId(student.getTenantId());
         studentPaymentOrderService.insert(studentPaymentOrder);
 
         studentPaymentOrder.setVersion(0);

+ 13 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java

@@ -147,14 +147,23 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         		throw new BizException("您已注册,请直接下载APP!");
         	}
         	userId = user.getId();
-        	user.setOrganId(studentPreRegistration.getOrganId());
+            if (studentPreRegistration.getOrganId() != null) {
+                user.setOrganId(studentPreRegistration.getOrganId());
+            }
+            if (studentPreRegistration.getParentName() != null) {
+                user.setRealName(studentPreRegistration.getParentName());
+            }
+            if (studentPreRegistration.getUserName() != null) {
+                user.setUsername(studentPreRegistration.getUserName());
+            }
             user.setUpdateTime(date);
             teacherDao.updateUser(user);
         }else{
         	user = new SysUser();
             user.setPhone(studentPreRegistration.getPhone());
-            user.setUsername(studentPreRegistration.getUserName());
             user.setOrganId(studentPreRegistration.getOrganId());
+            user.setRealName(studentPreRegistration.getParentName());
+            user.setUsername(studentPreRegistration.getUserName());
             user.setUserType("STUDENT");
             user.setCreateTime(date);
             user.setUpdateTime(date);
@@ -173,9 +182,7 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         student.setSchoolName(studentPreRegistration.getSchool());
         student.setCurrentGradeNum(studentPreRegistration.getCurrentGradeNum());
         student.setCurrentClass(studentPreRegistration.getCurrentClass());
-        student.setOrganId(studentPreRegistration.getOrganId());
-        student.setParentName(studentPreRegistration.getParentName());
-        student.setRemake(studentPreRegistration.getRemake());
+        student.setRemark(studentPreRegistration.getRemake());
         student.setUnitName(studentPreRegistration.getUnitName());
         studentDao.insert(student);
         TenantContextHolder.clearTenantId();
@@ -1213,6 +1220,7 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
             }
             baseStudent.setUserId(user.getId());
             if (!user.getUserType().contains("STUDENT")) {
+                user.setOrganId(baseStudent.getOrganId());
                 user.setUserType(user.getUserType() + ",STUDENT");
                 //添加student
                 this.insertStudent(baseStudent);

+ 121 - 0
mec-biz/src/main/resources/config/mybatis/CloudCoachPaymentProgramMapper.xml

@@ -0,0 +1,121 @@
+<?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.CloudCoachPaymentProgramDao">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.CloudCoachPaymentProgram" id="CloudCoachPaymentProgram">
+		<result column="id_" property="id" />
+		<result column="name_" property="name" />
+		<result column="remark_" property="remark" />
+		<result column="member_num_" property="memberNum" />
+		<result column="user_num_" property="userNum" />
+		<result column="payment_user_num_" property="paymentUserNum" />
+		<result column="period_" property="period" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+		<result column="member_rank_setting_id_" property="memberRankSettingId" />
+		<result column="actual_amount_" property="actualAmount" />
+		<result column="original_amount_" property="originalAmount" />
+		<result column="operator_" property="operator" />
+		<result column="operator_name_" property="operatorName" />
+		<result column="create_time_" property="createTime" />
+		<result column="update_time_" property="updateTime" />
+		<result column="tenant_id_" property="tenantId" />
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="CloudCoachPaymentProgram" >
+		SELECT * FROM cloud_coach_payment_program WHERE id_ = #{id} 
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="CloudCoachPaymentProgram">
+		SELECT * FROM cloud_coach_payment_program ORDER BY id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.CloudCoachPaymentProgram" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		INSERT INTO cloud_coach_payment_program (name_,remark_,member_num_,user_num_,
+		payment_user_num_,period_,member_rank_setting_id_,actual_amount_,original_amount_,
+		operator_,create_time_,update_time_,tenant_id_)
+		VALUES(#{name},#{remark},#{memberNum},#{userNum},#{paymentUserNum},#{period,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+		#{memberRankSettingId},#{actualAmount},#{originalAmount},#{operator},NOW(),NOW(),#{tenantId})
+	</insert>
+	
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.CloudCoachPaymentProgram">
+		UPDATE cloud_coach_payment_program <set>
+		<if test="operator != null">
+		operator_ = #{operator},
+		</if>
+		<if test="memberNum != null">
+		member_num_ = #{memberNum},
+		</if>
+		<if test="tenantId != null">
+		tenant_id_ = #{tenantId},
+		</if>
+		<if test="paymentUserNum != null">
+		payment_user_num_ = #{paymentUserNum},
+		</if>
+		<if test="originalAmount != null">
+		original_amount_ = #{originalAmount},
+		</if>
+		<if test="name != null">
+		name_ = #{name},
+		</if>
+		<if test="remark != null">
+		remark_ = #{remark},
+		</if>
+		<if test="period != null">
+		period_ = #{period,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+		</if>
+		<if test="userNum != null">
+		user_num_ = #{userNum},
+		</if>
+		<if test="updateTime != null">
+		update_time_ = #{updateTime},
+		</if>
+		<if test="memberRankSettingId != null">
+		member_rank_setting_id_ = #{memberRankSettingId},
+		</if>
+		<if test="actualAmount != null">
+		actual_amount_ = #{actualAmount},
+		</if>
+		</set> WHERE id_ = #{id}
+	</update>
+	
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM cloud_coach_payment_program WHERE id_ = #{id} 
+	</delete>
+
+	<sql id="queryPageSql">
+		<where>
+			<if test="period != null and period != ''">
+				AND ccpp.period_ = #{period}
+			</if>
+			<if test="startTime != null and startTime != ''">
+				AND DATE_FORMAT(ccpp.create_time_,"%Y-%m-%d") >= #{startTime}
+			</if>
+			<if test="endTime != null and endTime != ''">
+				AND DATE_FORMAT(ccpp.create_time_,"%Y-%m-%d") &lt;= #{endTime}
+			</if>
+		</where>
+	</sql>
+	
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="CloudCoachPaymentProgram" parameterType="map">
+		SELECT ccpp.*,su.real_name_ operator_name_ FROM cloud_coach_payment_program ccpp
+		LEFT JOIN sys_user su ON su.id_ = ccpp.operator_
+		<include refid="queryPageSql"/>
+		ORDER BY ccpp.id_ DESC
+		<include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(DISTINCT ccpp.id_) FROM cloud_coach_payment_program ccpp
+		<include refid="queryPageSql"/>
+	</select>
+</mapper>

+ 12 - 2
mec-biz/src/main/resources/config/mybatis/CloudTeacherOrderMapper.xml

@@ -340,9 +340,14 @@
         left join student s on cto.student_id_ = s.user_id_
         left join sys_user u on cto.student_id_ = u.id_
         left join subject sj on s.subject_id_list_ = sj.id_
-        left join student_registration sr ON cto.student_id_ = sr.user_id_
+        <if test="musicGroupId != null and musicGroupId != ''">
+            left join student_registration sr ON cto.student_id_ = sr.user_id_
+        </if>
         <where>
             cto.status_ = #{status} AND cto.tenant_id_ = #{tenantId}
+            <if test="organIds != null and organIds != ''">
+                AND FIND_IN_SET(u.organ_id_ , #{organIds})
+            </if>
             <if test="musicGroupId != null and musicGroupId != ''">
             	AND sr.music_group_id_ = #{musicGroupId}
             </if>
@@ -361,9 +366,14 @@
         left join student s on cto.student_id_ = s.user_id_
         left join sys_user u on cto.student_id_ = u.id_
         left join subject sj on s.subject_id_list_ = sj.id_
-        left join student_registration sr ON cto.student_id_ = sr.user_id_
+        <if test="musicGroupId != null and musicGroupId != ''">
+            left join student_registration sr ON cto.student_id_ = sr.user_id_
+        </if>
         <where>
             cto.status_ = #{status} AND cto.tenant_id_ = #{tenantId}
+            <if test="organIds != null and organIds != ''">
+                AND FIND_IN_SET(u.organ_id_ , #{organIds})
+            </if>
             <if test="musicGroupId != null and musicGroupId != ''">
             	AND sr.music_group_id_ = #{musicGroupId}
             </if>

+ 95 - 0
mec-biz/src/main/resources/config/mybatis/StudentCloudCoachPaymentDetailsMapper.xml

@@ -0,0 +1,95 @@
+<?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.StudentCloudCoachPaymentDetailsDao">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.StudentCloudCoachPaymentDetails" id="StudentCloudCoachPaymentDetails">
+		<result column="id_" property="id" />
+		<result column="cloud_coach_payment_program_id_" property="cloudCoachPaymentProgramId" />
+		<result column="user_id_" property="userId" />
+		<result column="username_" property="username" />
+		<result column="phone_" property="phone" />
+		<result column="payment_order_id_" property="paymentOrderId" />
+		<result column="payment_status_" property="paymentStatus" />
+		<result column="pay_time_" property="payTime" />
+		<result column="create_time_" property="createTime" />
+		<result column="update_time_" property="updateTime" />
+		<result column="tenant_id_" property="tenantId" />
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="StudentCloudCoachPaymentDetails" >
+		SELECT * FROM student_cloud_coach_payment_details WHERE id_ = #{id} 
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="StudentCloudCoachPaymentDetails">
+		SELECT * FROM student_cloud_coach_payment_details ORDER BY id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.StudentCloudCoachPaymentDetails" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		INSERT INTO student_cloud_coach_payment_details (user_id_,payment_order_id_,
+		payment_status_,create_time_,update_time_,tenant_id_,cloud_coach_payment_program_id_)
+		VALUES(#{userId},#{paymentOrderId},#{paymentStatus},NOW(),NOW(),#{tenantId},#{cloudCoachPaymentProgramId})
+	</insert>
+	<insert id="batchInsert">
+		INSERT INTO student_cloud_coach_payment_details (user_id_,payment_status_,create_time_,update_time_,tenant_id_,cloud_coach_payment_program_id_)VALUES
+		<foreach collection="userIds" separator="," item="userId">
+			(#{userId},#{paymentStatus},NOW(),NOW(),#{tenantId},#{cloudCoachPaymentProgramId})
+		</foreach>
+	</insert>
+
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.StudentCloudCoachPaymentDetails">
+		UPDATE student_cloud_coach_payment_details <set>
+		<if test="userId != null">
+		user_id_ = #{userId},
+		</if>
+		<if test="paymentStatus != null">
+		payment_status_ = #{paymentStatus},
+		</if>
+		<if test="tenantId != null">
+		tenant_id_ = #{tenantId},
+		</if>
+		<if test="updateTime != null">
+		update_time_ = #{updateTime},
+		</if>
+		<if test="paymentOrderId != null">
+		payment_order_id_ = #{paymentOrderId},
+		</if>
+		update_time_ = NOW()
+		</set> WHERE id_ = #{id}
+	</update>
+	
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM student_cloud_coach_payment_details WHERE id_ = #{id} 
+	</delete>
+
+	<sql id="queryPageSql">
+		<where>
+			<if test="paymentId != null">
+				AND sccpd.cloud_coach_payment_program_id_ = #{paymentId}
+			</if>
+		</where>
+	</sql>
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="StudentCloudCoachPaymentDetails" parameterType="map">
+		SELECT sccpd.*,su.username_,su.phone_,spo.pay_time_ FROM student_cloud_coach_payment_details sccpd
+		LEFT JOIN sys_user su ON  su.id_ = sccpd.user_id_
+		LEFT JOIN student_payment_order spo ON spo.music_group_id_ = sccpd.id_
+		<include refid="queryPageSql"/>
+		ORDER BY sccpd.id_
+		<include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(DISTINCT sccpd.id_) FROM student_cloud_coach_payment_details sccpd
+		<include refid="queryPageSql"/>
+	</select>
+</mapper>

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

@@ -87,7 +87,7 @@
             operating_tag_,
         </if>
         teacher_id_,create_time_,update_time_,service_tag_update_time_,cooperation_organ_id_,
-        care_package_,come_on_package_,member_rank_setting_id_,membership_start_time_,membership_end_time_,current_grade_num_,current_class_,tenant_id_)
+        care_package_,come_on_package_,member_rank_setting_id_,membership_start_time_,membership_end_time_,current_grade_num_,current_class_,tenant_id_,remark_,unit_name_)
         VALUES
         (#{userId},#{schoolName},#{subjectIdList},
         <if test="serviceTag != null">
@@ -97,7 +97,7 @@
             #{operatingTag},
         </if>
         #{teacherId},NOW(),NOW(),NOW(),#{cooperationOrganId},
-         #{carePackage},#{comeOnPackage},#{memberRankSettingId},#{membershipStartTime},#{membershipEndTime},#{currentGradeNum},#{currentClass},#{tenantId})
+         #{carePackage},#{comeOnPackage},#{memberRankSettingId},#{membershipStartTime},#{membershipEndTime},#{currentGradeNum},#{currentClass},#{tenantId},#{remark}, #{unitName})
     </insert>
 
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.Student">

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

@@ -446,12 +446,11 @@
     </select>
     <!-- 查询报名订单 -->
     <select id="findMusicGroupApplyOrderByStatus" resultMap="StudentPaymentOrder">
-        SELECT *
-        FROM student_payment_order
+        SELECT * FROM student_payment_order
         WHERE music_group_id_ = #{musicGroupId}
-          AND user_id_ = #{userId}
-          AND type_ = 'APPLY'
-          AND status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+        AND user_id_ = #{userId}
+        AND type_ = 'APPLY'
+        AND status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
         ORDER BY id_ DESC
     </select>
     
@@ -1017,6 +1016,7 @@
         <result column="createTime" property="createTime"/>
         <result column="payTime" property="payTime"/>
         <result column="transNo" property="transNo"/>
+        <result column="totalRemitFee" property="totalRemitFee"/>
         <collection property="list" ofType="com.ym.mec.biz.dal.vo.StudentPaymentOrderVo$StudentPaymentDetailVo">
             <result column="goodsName" property="goodsName"/>
             <result column="price" property="price"/>

+ 1 - 8
mec-student/src/main/java/com/ym/mec/student/controller/MemberRankController.java

@@ -65,14 +65,7 @@ public class MemberRankController extends BaseController {
 	@ApiOperation(value = "购买会员")
 	@PostMapping("/buy")
 	public Object buy(@RequestBody MemberPayParamDto memberPayParamDto) throws Exception {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
-		memberPayParamDto.setUserId(sysUser.getId());
-		memberPayParamDto.setBuyNum(1);
-		memberPayParamDto.setGiveNum(0);
-		return succeed(memberRankSettingService.buy(memberPayParamDto));
+		return memberRankSettingService.buy(memberPayParamDto);
 	}
 
 	@ApiOperation(value = "2021-09活动购买会员")

+ 41 - 0
mec-web/src/main/java/com/ym/mec/web/controller/CloudCoachPaymentProgramController.java

@@ -0,0 +1,41 @@
+package com.ym.mec.web.controller;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.CloudCoachPaymentProgram;
+import com.ym.mec.biz.dal.page.CloudCoachPaymentProgramQueryInfo;
+import com.ym.mec.biz.service.CloudCoachPaymentProgramService;
+import com.ym.mec.common.controller.BaseController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+@Api(tags = "云教练缴费项目")
+@RequestMapping("cloudCoachPaymentProgram")
+@RestController
+public class CloudCoachPaymentProgramController extends BaseController {
+
+    @Autowired
+    private CloudCoachPaymentProgramService cloudCoachPaymentProgramService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiOperation(value = "新增")
+    @PostMapping("/add")
+    @PreAuthorize("@pcs.hasPermissions('cloudCoachPaymentProgram/add')")
+    public Object add(@RequestBody CloudCoachPaymentProgram cloudCoachPaymentProgram){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        cloudCoachPaymentProgram.setOperator(sysUser.getId());
+        cloudCoachPaymentProgramService.add(cloudCoachPaymentProgram);
+        return succeed();
+    }
+
+    @ApiOperation(value = "分页查询")
+    @GetMapping("/queryPage")
+    @PreAuthorize("@pcs.hasPermissions('cloudCoachPaymentProgram/queryPage')")
+    public Object queryPage(CloudCoachPaymentProgramQueryInfo queryInfo){
+        return succeed(cloudCoachPaymentProgramService.queryPage(queryInfo));
+    }
+}

+ 7 - 4
mec-web/src/main/java/com/ym/mec/web/controller/CloudTeacherOrderController.java

@@ -7,6 +7,7 @@ import com.ym.mec.biz.dal.page.CloudTeacherAddQueryInfo;
 import com.ym.mec.biz.dal.page.CloudTeacherOrderQueryInfo;
 import com.ym.mec.biz.service.CloudTeacherOrderService;
 import com.ym.mec.biz.service.OrderPayOpsService;
+import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.biz.service.TenantOrderRecordService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -21,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 
@@ -41,6 +43,9 @@ public class CloudTeacherOrderController extends BaseController {
     @Autowired
     private TenantOrderRecordService tenantOrderRecordService;
 
+    @Autowired
+    private OrganizationService organizationService;
+
     @ApiOperation(value = "手动添加会员")
     @PostMapping("/addStudents")
     @PreAuthorize("@pcs.hasPermissions('cloudTeacherOrder/addStudents')")
@@ -52,11 +57,9 @@ public class CloudTeacherOrderController extends BaseController {
     @PostMapping("/queryInactive")
     @PreAuthorize("@pcs.hasPermissions('cloudTeacherOrder/queryInActive')")
     public HttpResponseResult<PageInfo<CloudTeacherStudent>> queryInactive(@RequestBody CloudTeacherOrderQueryInfo cloudTeacherOrderQueryInfo) throws Exception {
+        String organIds = organizationService.getEmployeeOrgan("");
         cloudTeacherOrderQueryInfo.setStatus(1);
-        // 去掉按乐团查询, 不同乐团学生有重复
-        // if (cloudTeacherOrderQueryInfo.getMusicGroupId() == null) {
-        //     throw new Exception("乐团Id必须填写");
-        // }
+        cloudTeacherOrderQueryInfo.setOrganIds(organIds); // 1,2,34,
         return succeed(cloudTeacherOrderService.queryInactive(cloudTeacherOrderQueryInfo));
     }
 

+ 29 - 0
mec-web/src/main/java/com/ym/mec/web/controller/StudentCloudCoachPaymentDetailsController.java

@@ -0,0 +1,29 @@
+package com.ym.mec.web.controller;
+
+import com.ym.mec.biz.dal.page.StudentCloudCoachPaymentDetailsQueryInfo;
+import com.ym.mec.biz.service.StudentCloudCoachPaymentDetailsService;
+import com.ym.mec.common.controller.BaseController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+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;
+
+@Api(tags = "学员云教练缴费明细")
+@RequestMapping("studentCloudCoachPaymentDetails")
+@RestController
+public class StudentCloudCoachPaymentDetailsController extends BaseController {
+
+    @Autowired
+    private StudentCloudCoachPaymentDetailsService studentCloudCoachPaymentDetailsService;
+
+    @ApiOperation(value = "分页查询")
+    @GetMapping("/queryPage")
+    @PreAuthorize("@pcs.hasPermissions('studentCloudCoachPaymentDetails/queryPage')")
+    public Object queryPage(StudentCloudCoachPaymentDetailsQueryInfo queryInfo){
+        return succeed(studentCloudCoachPaymentDetailsService.queryPage(queryInfo));
+    }
+}

+ 8 - 8
mec-web/src/main/resources/bootstrap-dev.properties

@@ -1,16 +1,16 @@
-#\u6307\u5b9a\u5f00\u53d1\u73af\u5883
+#\u6307\u5B9A\u5F00\u53D1\u73AF\u5883
 #spring.profiles.active=dev
-#\u670d\u52a1\u5668\u5730\u5740
+#\u670D\u52A1\u5668\u5730\u5740
 spring.cloud.nacos.config.server-addr=47.114.1.200:8848
-#\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
+#\u9ED8\u8BA4\u4E3APublic\u547D\u540D\u7A7A\u95F4,\u53EF\u4EE5\u7701\u7565\u4E0D\u5199
 spring.cloud.nacos.config.namespace=a5c10b43-0c4d-4e3b-a0ad-9af651cfe89c
-#\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e
+#\u6307\u5B9A\u914D\u7F6E\u7FA4\u7EC4 --\u5982\u679C\u662FPublic\u547D\u540D\u7A7A\u95F4 \u5219\u53EF\u4EE5\u7701\u7565\u7FA4\u7EC4\u914D\u7F6E
 spring.cloud.nacos.config.group=DEFAULT_GROUP
-#\u6587\u4ef6\u540d -- \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5219\u9ed8\u8ba4\u4e3a ${spring.appliction.name}
+#\u6587\u4EF6\u540D -- \u5982\u679C\u6CA1\u6709\u914D\u7F6E\u5219\u9ED8\u8BA4\u4E3A ${spring.appliction.name}
 spring.cloud.nacos.config.prefix=web
-#\u6307\u5b9a\u6587\u4ef6\u540e\u7f00
+#\u6307\u5B9A\u6587\u4EF6\u540E\u7F00
 spring.cloud.nacos.config.file-extension=yaml
-#\u662f\u5426\u52a8\u6001\u5237\u65b0
+#\u662F\u5426\u52A8\u6001\u5237\u65B0
 spring.cloud.nacos.config.refresh.enabled=true
-#\u662f\u5426\u542f\u7528nacos\u914d\u7f6e\u4e2d\u5fc3
+#\u662F\u5426\u542F\u7528nacos\u914D\u7F6E\u4E2D\u5FC3
 spring.cloud.nacos.config.enabled=true