瀏覽代碼

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

# Conflicts:
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
yonge 5 年之前
父節點
當前提交
a405d044aa
共有 44 個文件被更改,包括 1308 次插入223 次删除
  1. 18 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java
  2. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java
  3. 44 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentManageDao.java
  4. 19 13
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java
  5. 7 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysAccountDao.java
  6. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/BasicUserDto.java
  7. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupStudentsDto.java
  8. 53 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentHasCourseDto.java
  9. 11 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java
  10. 30 6
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentOrder.java
  11. 26 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysAccount.java
  12. 24 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysUserCashAccountDetail.java
  13. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicGroupStudentQueryInfo.java
  14. 23 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentManageQueryInfo.java
  15. 8 1
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java
  16. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/service/PayService.java
  17. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentManageService.java
  18. 8 6
      mec-biz/src/main/java/com/ym/mec/biz/service/SysAccountService.java
  19. 58 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  20. 184 54
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  21. 147 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java
  22. 36 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  23. 6 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  24. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysAccountServiceImpl.java
  25. 12 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java
  26. 21 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  27. 36 4
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  28. 1 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  29. 8 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  30. 128 6
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  31. 21 3
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  32. 16 8
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  33. 25 8
      mec-biz/src/main/resources/config/mybatis/SysAccountMapper.xml
  34. 12 0
      mec-biz/src/main/resources/config/mybatis/SysUserCashAccountDetailMapper.xml
  35. 2 2
      mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  36. 64 9
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  37. 0 43
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/SysMessageController.java
  38. 36 2
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yqpay/YqPayUtil.java
  39. 8 1
      mec-web/src/main/java/com/ym/mec/web/controller/ClassGroupController.java
  40. 32 0
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  41. 97 16
      mec-web/src/main/java/com/ym/mec/web/controller/StudentPaymentOrderController.java
  42. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/SysPaymentConfigController.java
  43. 17 12
      mec-web/src/main/java/com/ym/mec/web/controller/SysUserCashAccountDetailController.java
  44. 1 0
      mec-web/src/main/java/com/ym/mec/web/controller/TeacherAttendanceController.java

+ 18 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java

@@ -298,7 +298,7 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
     List<Map<Integer, Integer>> countQuitNum(@Param("classGroupIds") String classGroupIds);
 
     /**
-     * 获取乐团详情---课表详情列表
+     * 获取乐团详情---课酬调整
      *
      * @param params
      * @return
@@ -306,7 +306,7 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
     List<MusicGroupCourseScheduleDto> queryMusicGroupCourseSchedule(Map<String, Object> params);
 
     /**
-     * COUNT乐团详情---课表详情列表
+     * COUNT乐团详情---课酬调整
      *
      * @param params
      * @return
@@ -314,6 +314,22 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
     int countMusicGroupCourseSchedule(Map<String, Object> params);
 
     /**
+     * 获取乐团详情---课表详情列表
+     *
+     * @param params
+     * @return
+     */
+    List<MusicGroupCourseScheduleDto> queryMusicGroupCourseScheduleDetail(Map<String, Object> params);
+
+    /**
+     * COUNT乐团详情---课表详情列表
+     *
+     * @param params
+     * @return
+     */
+    int countMusicGroupCourseScheduleDetail(Map<String, Object> params);
+
+    /**
      * 根据班级编号列表获取班级名称
      *
      * @param classGroupIds

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java

@@ -187,4 +187,10 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
      */
     MusicGroup findMusicGroup(List<Long> list);
 
+    /**
+     * 获取乐团名称
+     * @param musicGroupIds
+     * @return
+     */
+    List<Map<String, String>> queryMusicGroupNameMap(@Param("musicGroupIds") Set<String> musicGroupIds);
 }

+ 44 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentManageDao.java

@@ -168,4 +168,48 @@ public interface StudentManageDao {
      * @return
      */
     int countStudentVipGroupClass(Map<String, Object> params);
+
+    /**
+     * 查询有课的学员
+     * @return
+     */
+    List<Integer> queryHasCourse(Map<String, Object> params);
+
+    /**
+     * 查询没课的学员
+     * @return
+     */
+    List<Integer> queryNotCourse(Map<String, Object> params);
+
+    /**
+     * 查询有课的学员
+     * @return
+     */
+    Integer countHasCourse(Map<String, Object> params);
+
+    /**
+     * 查询没课的学员
+     * @return
+     */
+    Integer countNotCourse(Map<String, Object> params);
+
+    /**
+     * 获取用户是否有课
+     * @param userIds
+     * @return
+     */
+    List<Map<Integer, Boolean>> queryStudentHasCourse(@Param("userIds") List<Integer> userIds);
+
+    /**
+     * 获取未激活,有课的列表
+     * @return
+     */
+    List<StudentHasCourseDto> queryHasCourseStudent(@Param("organId") String organId);
+
+    /**
+     * 当前用户是否有课
+     * @param userId
+     * @return
+     */
+    Long getHasCourse(Integer userId);
 }

+ 19 - 13
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java

@@ -36,12 +36,12 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
                                               @Param("status") String status);
 
     /**
-     * @describe 统计学员剩余课时的课程费用
-     * @author Joburgess
-     * @date 2019/12/3
      * @param vipGroupId:
      * @param userId:
      * @return java.math.BigDecimal
+     * @describe 统计学员剩余课时的课程费用
+     * @author Joburgess
+     * @date 2019/12/3
      */
     BigDecimal sumSurplusCourseFee(@Param("vipGroupId") String vipGroupId,
                                    @Param("userId") Integer userId);
@@ -52,14 +52,14 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
      * 根据学生vip课获取非失败缴费订单
      */
     StudentPaymentOrder findNotFailedOrderByStudentVipGroup(@Param("vipGroupId") Long vipGroupId,
-                                              @Param("userId") Integer userId);
+                                                            @Param("userId") Integer userId);
 
     /**
+     * @param musicGroupId: 乐团编号/vip课编号
+     * @return java.lang.Integer
      * @describe 统计报名人数
      * @author Joburgess
      * @date 2019/11/13
-     * @param musicGroupId: 乐团编号/vip课编号
-     * @return java.lang.Integer
      */
     Integer countStudentPaymentNum(@Param("musicGroupId") String musicGroupId);
 
@@ -120,6 +120,7 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
 
     /**
      * 查询支付中超时的订单
+     *
      * @param orderNoList
      * @param status
      * @param beforeTime
@@ -128,30 +129,31 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
     List<StudentPaymentOrder> findOrdersOverTime(@Param("orderNoList") List<String> orderNoList, @Param("status") DealStatusEnum status, @Param("beforeTime") Date beforeTime);
 
     /**
+     * @param musicGroupId: 乐团编号
+     * @param userId:       用户编号
+     * @return int
      * @describe 根据乐团和用户编号统计剩余课时
      * @author Joburgess
      * @date 2019/12/4
-     * @param musicGroupId: 乐团编号
-     * @param userId: 用户编号
-     * @return int
      */
     int countSurplusCourseByMusicGroupAndUser(@Param("musicGroupId") String musicGroupId, @Param("userId") Integer userId);
 
     /**
-     * @describe 统计乐团或vip课的收入金额
-     * @author Joburgess
-     * @date 2019/12/4
      * @param musicGroupId: 乐团或小课金额
      * @param groupType:
      * @return java.math.BigDecimal
+     * @describe 统计乐团或vip课的收入金额
+     * @author Joburgess
+     * @date 2019/12/4
      */
     BigDecimal sumGroupIncomeFee(@Param("musicGroupId") String musicGroupId,
                                  @Param("groupType") String groupType);
 
-    List<StudentPaymentOrder> findStudentPaymentOrder(@Param("groupType") String groupType,@Param("musicGroupId") String musicGroupId);
+    List<StudentPaymentOrder> findStudentPaymentOrder(@Param("groupType") String groupType, @Param("musicGroupId") String musicGroupId);
 
     /**
      * 获取零星订单
+     *
      * @param userId
      * @param sporadicId
      * @param groupType
@@ -162,8 +164,12 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
 
     /**
      * 获取订单金额map
+     *
      * @param paymentOrderNo
      * @return
      */
     List<Map<Long, BigDecimal>> queryActualAmount(@Param("paymentOrderNo") List<Long> paymentOrderNo);
+
+
+    List<StudentPaymentOrder> findFixOrder(@Param("status") DealStatusEnum status, @Param("paymentChannel") String paymentChannel);
 }

+ 7 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysAccountDao.java

@@ -10,21 +10,23 @@ import java.util.List;
 public interface SysAccountDao extends BaseDAO<Integer, SysAccount> {
 
     /**
-     * 获取一个私
+     * 获取支付账
      *
+     * @param company
+     * @param channel
+     * @param type
      * @param amount
      * @return
      */
-    SysAccount getPerAccount(@Param("amount") BigDecimal amount);
+    List<SysAccount> getAccount(@Param("company") String company, @Param("channel") String channel, @Param("type") String type, @Param("amount") BigDecimal amount);
 
     /**
-     * 获取一个支付账户
+     * 获取一个支付
      * @param company
      * @param channel
      * @param type
      * @param amount
      * @return
      */
-    SysAccount getAccount(@Param("company") String company, @Param("channel") String channel, @Param("type") String type, @Param("amount") BigDecimal amount);
-
+    SysAccount getOneAccount(@Param("company") String company, @Param("channel") String channel, @Param("type") String type, @Param("amount") BigDecimal amount);
 }

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/BasicUserDto.java

@@ -12,6 +12,26 @@ public class BasicUserDto {
 
     private Integer gender;
 
+    private String musicGroupId;
+
+    private String musicGroupName;
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+
+    public String getMusicGroupName() {
+        return musicGroupName;
+    }
+
+    public void setMusicGroupName(String musicGroupName) {
+        this.musicGroupName = musicGroupName;
+    }
+
     public String getSubjectName() {
         return subjectName;
     }

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

@@ -46,6 +46,16 @@ public class MusicGroupStudentsDto{
     @ApiModelProperty(value = "是否新增学员(1是0否)",required = false)
     private Integer isNewStudent;
 
+    private Boolean isActive = false;
+
+    public Boolean getIsActive() {
+        return isActive;
+    }
+
+    public void setIsActive(Boolean active) {
+        isActive = active;
+    }
+
     public Date getNextPaymentDate() {
         return nextPaymentDate;
     }

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

@@ -0,0 +1,53 @@
+package com.ym.mec.biz.dal.dto;
+
+public class StudentHasCourseDto{
+    private String organName;
+
+    private String userName;
+
+    private String musicGroupName;
+
+    private String vipGroupName;
+
+    private Integer userId;
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getMusicGroupName() {
+        return musicGroupName;
+    }
+
+    public void setMusicGroupName(String musicGroupName) {
+        this.musicGroupName = musicGroupName;
+    }
+
+    public String getVipGroupName() {
+        return vipGroupName;
+    }
+
+    public void setVipGroupName(String vipGroupName) {
+        this.vipGroupName = vipGroupName;
+    }
+}

+ 11 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java

@@ -44,7 +44,17 @@ public class StudentManageListDto {
     @ApiModelProperty(value = "课程余额")
     private BigDecimal courseBalance;
     
-    private Boolean isActive = false;
+    private Boolean isActive;
+
+    private Long hasCourse;
+
+    public Long getHasCourse() {
+        return hasCourse;
+    }
+
+    public void setHasCourse(Long hasCourse) {
+        this.hasCourse = hasCourse;
+    }
 
     public String getNation() {
         return nation;

+ 30 - 6
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentOrder.java

@@ -42,6 +42,14 @@ public class StudentPaymentOrder {
 	/** 实际金额 */
 	@ApiModelProperty(value = "实际金额",required = true)
 	private BigDecimal actualAmount;
+
+	/** 公户金额 */
+	@ApiModelProperty(value = "公户金额",required = true)
+	private BigDecimal comAmount;
+
+	/** 私户金额 */
+	@ApiModelProperty(value = "私户金额",required = true)
+	private BigDecimal perAmount;
 	
 	@ApiModelProperty(value = "余额付款金额",required = true)
 	private BigDecimal balancePaymentAmount;
@@ -90,7 +98,8 @@ public class StudentPaymentOrder {
 
 	private Date payTime;
 
-	private Integer accountId;
+	//收款账户
+	private String merNos;
 
 	private PaymentChannelTypeEnum paymentChannelType;
 	
@@ -255,12 +264,12 @@ public class StudentPaymentOrder {
 	public void setPayTime(Date payTime) {
 		this.payTime = payTime;
 	}
-    public Integer getAccountId() {
-        return accountId;
+    public String getMerNos() {
+        return merNos;
     }
 
-    public void setAccountId(Integer accountId) {
-        this.accountId = accountId;
+    public void setMerNos(String merNos) {
+        this.merNos = merNos;
     }
 
     public PaymentChannelTypeEnum getPaymentChannelType() {
@@ -279,9 +288,24 @@ public class StudentPaymentOrder {
 		this.user = user;
 	}
 
+	public BigDecimal getComAmount() {
+		return comAmount;
+	}
+
+	public void setComAmount(BigDecimal comAmount) {
+		this.comAmount = comAmount;
+	}
+
+	public BigDecimal getPerAmount() {
+		return perAmount;
+	}
+
+	public void setPerAmount(BigDecimal perAmount) {
+		this.perAmount = perAmount;
+	}
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);
 	}
-
 }

+ 26 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysAccount.java

@@ -45,6 +45,16 @@ public class SysAccount {
     */
     private String type;
 
+    /**
+     * 状态 0-停用 1-使用
+     */
+    private Integer status;
+
+    /**
+    * 分佣金额
+    */
+    private BigDecimal routingFee;
+
 
     public Integer getId() {
         return id;
@@ -117,4 +127,20 @@ public class SysAccount {
     public void setRoutingMerNo(String routingMerNo) {
         this.routingMerNo = routingMerNo;
     }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public BigDecimal getRoutingFee() {
+        return routingFee;
+    }
+
+    public void setRoutingFee(BigDecimal routingFee) {
+        this.routingFee = routingFee;
+    }
 }

+ 24 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysUserCashAccountDetail.java

@@ -43,6 +43,14 @@ public class SysUserCashAccountDetail {
 	@ApiModelProperty(value = "交易金额",required = false)
 	private BigDecimal amount;
 
+	/** 公户金额 */
+	@ApiModelProperty(value = "公户金额",required = false)
+	private BigDecimal comAmount;
+
+	/** 私户金额 */
+	@ApiModelProperty(value = "私户金额",required = false)
+	private BigDecimal perAmount;
+
 	/** 账户可用余额 */
 	@ApiModelProperty(value = "账户可用余额",required = false)
 	private BigDecimal balance;
@@ -191,9 +199,24 @@ public class SysUserCashAccountDetail {
 		this.platformAccountNo = platformAccountNo;
 	}
 
+	public BigDecimal getComAmount() {
+		return comAmount;
+	}
+
+	public void setComAmount(BigDecimal comAmount) {
+		this.comAmount = comAmount;
+	}
+
+	public BigDecimal getPerAmount() {
+		return perAmount;
+	}
+
+	public void setPerAmount(BigDecimal perAmount) {
+		this.perAmount = perAmount;
+	}
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);
 	}
-
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicGroupStudentQueryInfo.java

@@ -14,12 +14,23 @@ public class MusicGroupStudentQueryInfo extends QueryInfo {
   @ApiModelProperty(value = "乐团编号")
   private String musicGroupId;
 
+  @ApiModelProperty(value = "是否激活")
+  private Boolean isActive;
+
   @ApiModelProperty(value = "学员状态 NORMAL(NORMAL, 在读), LEAVE(LEAVE, 请假), QUIT(QUIT, 退班)",required = false)
   private String studentStatus;
 
   @ApiModelProperty(value = "缴费状态  PAID_COMPLETED(完成缴费), NON_PAYMENT(未缴费), PROCESSING(缴费中)",required = false)
   private String paymentStatus;
 
+  public Boolean getIsActive() {
+    return isActive;
+  }
+
+  public void setIsActive(Boolean active) {
+    isActive = active;
+  }
+
   public String getStudentName() {
     return studentName;
   }

+ 23 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentManageQueryInfo.java

@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty;
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
 import com.ym.mec.common.page.QueryInfo;
 
+import java.util.List;
+
 /**
  * @Author Joburgess
  * @Date 2019/9/19
@@ -14,6 +16,9 @@ public class StudentManageQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "部门ID")
     private String organId;
 
+    @ApiModelProperty(value = "学员编号")
+    private List<Integer> userIds;
+
     @ApiModelProperty(value = "乐团ID")
     private String musicGroupId;
 
@@ -25,6 +30,24 @@ public class StudentManageQueryInfo extends QueryInfo {
     
     private Boolean isActive;
 
+    private Boolean hasCourse;
+
+    public List<Integer> getUserIds() {
+        return userIds;
+    }
+
+    public void setUserIds(List<Integer> userIds) {
+        this.userIds = userIds;
+    }
+
+    public Boolean getHasCourse() {
+        return hasCourse;
+    }
+
+    public void setHasCourse(Boolean hasCourse) {
+        this.hasCourse = hasCourse;
+    }
+
     public String getStudentName() {
         return studentName;
     }

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

@@ -271,11 +271,18 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
     PageInfo<MusicGroupClassGroupDto> queryMusicGroupClassGroup(QueryInfo queryInfo);
 
     /**
-     * 乐团详情-----课表详情
+     * 乐团详情-----课酬调整
      * @param queryInfo
      * @return
      */
     PageInfo<MusicGroupCourseScheduleDto> queryMusicGroupCourseSchedule(queryMusicGroupCourseScheduleQueryInfo queryInfo);
+
+    /**
+     * 乐团详情-----课表详情
+     * @param queryInfo
+     * @return
+     */
+    PageInfo<MusicGroupCourseScheduleDto> queryMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo);
     
     /**
      * 批量新增班级上的课次数

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

@@ -1,9 +1,16 @@
 package com.ym.mec.biz.service;
 
 
+import com.ym.mec.biz.dal.entity.CooperationOrgan;
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.entity.SysAccount;
+import com.ym.mec.biz.dal.enums.PaymentChannelTypeEnum;
+import com.ym.mec.thirdparty.adapay.Pay;
 import com.ym.mec.thirdparty.yqpay.Msg;
+import com.ym.mec.thirdparty.yqpay.YqPayUtil;
 
 import java.math.BigDecimal;
+import java.util.HashMap;
 import java.util.Map;
 
 /**
@@ -28,6 +35,9 @@ public interface PayService {
     Map<String, Object> getPayMap(BigDecimal amount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody, Integer userId) throws Exception;
 
 
+    Map<String, Object> getPayMap(BigDecimal amount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody, Integer userId,Map<String,BigDecimal> fee,Integer organId) throws Exception;
+
+
     Map query(String orderNo) throws Exception;
 
 }

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentManageService.java

@@ -130,4 +130,11 @@ public interface StudentManageService {
      * @return
      */
     List<StudentRegisterPerDto> queryStudentPer();
+
+    /**
+     * 获取有课没有激活的列表
+     * @return
+     */
+    List<StudentHasCourseDto> queryHasCourseStudent(String organId);
+
 }

+ 8 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/SysAccountService.java

@@ -10,21 +10,23 @@ import java.util.List;
 public interface SysAccountService extends BaseService<Integer, SysAccount> {
 
     /**
-     * 获取一个私户
-     *
+     * 获取收款账户
+     * @param company
+     * @param channel
+     * @param type
+     * @param amount
      * @return
      */
-    SysAccount getPerAccount(BigDecimal amount);
-
+    List<SysAccount> getAccount(String company, String channel, String type,  BigDecimal amount);
 
     /**
-     * 获取一个收款账户
+     * 获取一个支付账户
      * @param company
      * @param channel
      * @param type
      * @param amount
      * @return
      */
-    SysAccount getAccount(String company, String channel, String type,  BigDecimal amount);
+    SysAccount getOneAccount(String company, String channel, String type,  BigDecimal amount);
 
 }

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

@@ -1831,6 +1831,54 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             pageInfo.setTotal(count);
             params.put("offset", pageInfo.getOffset());
             dataList = classGroupDao.queryMusicGroupCourseSchedule(params);
+            //所有课程编号的列表
+            List<Integer> couseScheduleIds = dataList.stream().map(MusicGroupCourseScheduleDto::getCourseScheduleId).distinct().collect(Collectors.toList());
+
+            //主教老师
+            List<CourseScheduleTeacherSalary> bishopTeachers = courseScheduleTeacherSalaryDao.findByCourseScheduleIdsAndTeacherRole(couseScheduleIds, "BISHOP");
+            Map<Long, List<CourseScheduleTeacherSalary>> courseScheduleBishopTeacherMaps = bishopTeachers.stream().collect(Collectors.groupingBy(CourseScheduleTeacherSalary::getCourseScheduleId));
+
+            //助教老师
+            List<CourseScheduleTeacherSalary> teachingTeachers = courseScheduleTeacherSalaryDao.findByCourseScheduleIdsAndTeacherRole(couseScheduleIds, "TEACHING");
+            Map<Long, List<CourseScheduleTeacherSalary>> courseScheduleTeachingTeacherMaps = teachingTeachers.stream().collect(Collectors.groupingBy(CourseScheduleTeacherSalary::getCourseScheduleId));
+
+            dataList.forEach(e -> {
+                List<CourseScheduleTeacherSalary> currentBishopTeacher = courseScheduleBishopTeacherMaps.get(e.getCourseScheduleId().longValue());
+                List<CourseScheduleTeacherSalary> TeachingTeachers = new ArrayList<>();
+                if (!Objects.isNull(currentBishopTeacher) && !CollectionUtils.isEmpty(currentBishopTeacher)) {
+                    e.setMasterTeacherId(currentBishopTeacher.get(0).getUserId());
+                    e.setMasterTeacherName(currentBishopTeacher.get(0).getUserName());
+                } else {
+                    currentBishopTeacher = new ArrayList<>();
+                }
+                TeachingTeachers.addAll(currentBishopTeacher);
+                List<CourseScheduleTeacherSalary> currentCourseTeachingTeachers = courseScheduleTeachingTeacherMaps.get(e.getCourseScheduleId().longValue());
+                if (Objects.isNull(currentCourseTeachingTeachers) || CollectionUtils.isEmpty(currentCourseTeachingTeachers)) {
+                    currentCourseTeachingTeachers = new ArrayList<>();
+                }
+                TeachingTeachers.addAll(currentCourseTeachingTeachers);
+                e.setTeachingTeachers(TeachingTeachers);
+                e.setTeacherNum(TeachingTeachers.size());
+            });
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
+    public PageInfo<MusicGroupCourseScheduleDto> queryMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo) {
+        PageInfo<MusicGroupCourseScheduleDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+        List<MusicGroupCourseScheduleDto> dataList = null;
+        int count = classGroupDao.countMusicGroupCourseScheduleDetail(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = classGroupDao.queryMusicGroupCourseScheduleDetail(params);
             //获取当前合奏班班级编号列表
 //            Set<Integer> mixClassGroupIds = dataList.stream().map(e -> e.getMixClassGroupId()).collect(Collectors.toSet());
 //            String mixClassGroupIdsStr = StringUtils.join(mixClassGroupIds, ",");
@@ -1979,8 +2027,16 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             }
             classGroup.setClassGroupTeacherMapperList(classGroupTeacherMappers);
             classGroup.setStudentNum(studyNums.get(classGroup.getId()));
-            classGroup.setTotalClassTimes(totalNumMap.get(classGroup.getId()).intValue());
-            classGroup.setCurrentClassTimes(currentNumMap.get(classGroup.getId()).intValue());
+            int totalClassTimes = 0;
+            int currentClassTimes = 0;
+            if(totalNumMap.containsKey(classGroup.getId())){
+                totalClassTimes = totalNumMap.get(classGroup.getId()).intValue();
+            }
+            if(currentNumMap.containsKey(classGroup.getId())){
+                currentClassTimes = currentNumMap.get(classGroup.getId()).intValue();
+            }
+            classGroup.setTotalClassTimes(totalClassTimes);
+            classGroup.setCurrentClassTimes(currentClassTimes);
         }
         return classGroups;
     }

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

@@ -128,13 +128,13 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
     @Autowired
     private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
-    
+
     @Autowired
     private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
 
     @Autowired
     private CooperationOrganDao cooperationOrganDao;
-    
+
     @Autowired
     private TeacherAttendanceDao teacherAttendanceDao;
 
@@ -152,19 +152,19 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
     @Autowired
     private EmployeeDao employeeDao;
-	
+
 	@Autowired
 	private SysMessageService sysMessageService;
 
 	@Autowired
 	private SysConfigDao sysConfigDao;
-	
+
 	@Autowired
 	private ClassGroupService classGroupService;
-	
+
 	@Autowired
     private StudentPaymentOrderDetailDao studentPaymentOrderDetailDao;
-	
+
     @Autowired
     private MusicGroupSubjectPlanService musicGroupSubjectPlanService;
     @Autowired
@@ -175,12 +175,12 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     private MusicGroupSubjectGoodsGroupService musicGroupSubjectGoodsGroupService;
     @Autowired
     private GoodsService goodsService;
-    
+
     @Autowired
     private ImFeignService imFeignService;
-    
+
     private SimpleDateFormat sdf_ymd = new SimpleDateFormat("yyyy-MM-dd");
-    
+
     private SimpleDateFormat sdf_hms=new SimpleDateFormat("HH:mm:ss");
 
     @Override
@@ -358,6 +358,13 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         studentPaymentOrder.setVersion(studentPaymentOrder.getVersion()+1);
 
         String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
+
+        Map<String, BigDecimal> classFee = new HashMap<>();
+        classFee.put("course",BigDecimal.ZERO);
+        classFee.put("instrument",BigDecimal.ZERO);
+        classFee.put("accessories",BigDecimal.ZERO);
+        classFee.put("other",amount);
+
         Map payMap = payService.getPayMap(
                 amount,
                 orderNo,
@@ -365,8 +372,15 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 baseApiUrl+"/#/paymentresult?orderNo=" + orderNo,
                 chargeInfo.getTitle(),
                 chargeInfo.getTitle(),
-                userId);
-
+                userId,
+                classFee,
+                chargeInfo.getOrganId()
+        );
+
+        Map<String,BigDecimal> routingFee = (Map<String,BigDecimal>)payMap.get("routingFee");
+        studentPaymentOrder.setComAmount(routingFee.get("COM"));
+        studentPaymentOrder.setPerAmount(routingFee.get("PER"));
+        studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
         studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
         studentPaymentOrder.setUpdateTime(date);
         studentPaymentOrderService.update(studentPaymentOrder);
@@ -395,10 +409,12 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
         orderAmount = orderAmount.add(courseFee);
 
+        BigDecimal instrumentFee = BigDecimal.ZERO;
+        BigDecimal accessoriesFee = BigDecimal.ZERO;
+        BigDecimal otherFee = BigDecimal.ZERO;
 
         //乐器及打包辅件
         List<MusicGroupSubjectGoodsGroup> goodsGroups = new ArrayList<>();
-
         if (studentRegistration.getTemporaryCourseFee() != null) {
             List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailService.findUserApplyOrder(studentRegistration.getUserId(), DealStatusEnum.WAIT_PAY);
             for (StudentPaymentOrderDetail orderDetail : orderDetails) {
@@ -415,6 +431,13 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 musicGroupSubjectGoodsGroup.setPrice(orderDetail.getPrice());
 
                 goodsGroups.add(musicGroupSubjectGoodsGroup);
+                if(musicGroupSubjectGoodsGroup.getType().equals(GoodsType.INSTRUMENT)){
+                    instrumentFee = instrumentFee.add(orderDetail.getPrice());
+                }else if(musicGroupSubjectGoodsGroup.getType().equals(GoodsType.ACCESSORIES)) {
+                    accessoriesFee = accessoriesFee.add(orderDetail.getPrice());
+                }else {
+                    otherFee = otherFee.add(orderDetail.getPrice());
+                }
 
                 orderAmount = orderAmount.add(orderDetail.getPrice());
             }
@@ -422,18 +445,23 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             goodsGroups = musicGroupSubjectGoodsGroupService.findGoodsGroupByIds(registerPayDto.getGoodsGroupIds());
             for (MusicGroupSubjectGoodsGroup goodsGroup : goodsGroups) {
                 if (goodsGroup.getType().equals(GoodsType.INSTRUMENT) && musicOneSubjectClassPlan.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)) {
-                    orderAmount = orderAmount.add(musicOneSubjectClassPlan.getDepositFee());
                     goodsGroup.setPrice(musicOneSubjectClassPlan.getDepositFee());
-                    continue;
                 }
                 if (goodsGroup.getType().equals(GoodsType.INSTRUMENT) && musicOneSubjectClassPlan.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.FREE)) {
                 	goodsGroup.setPrice(new BigDecimal(0));
-                	continue;
                 }
                 orderAmount = orderAmount.add(goodsGroup.getPrice());
+                if(goodsGroup.getType().equals(GoodsType.INSTRUMENT)){
+                    instrumentFee = instrumentFee.add(goodsGroup.getPrice());
+                }else if(goodsGroup.getType().equals(GoodsType.ACCESSORIES)) {
+                    accessoriesFee = accessoriesFee.add(goodsGroup.getPrice());
+                }else {
+                    otherFee = otherFee.add(goodsGroup.getPrice());
+                }
                 //团购乐器减免课程费用
                 if (goodsGroup.getType().equals(GoodsType.INSTRUMENT) && goodsGroup.getRemissionCourseFee() != null && musicOneSubjectClassPlan.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.GROUP)) {//团购
                     orderAmount = orderAmount.subtract(goodsGroup.getRemissionCourseFee());
+                    courseFee.subtract(goodsGroup.getRemissionCourseFee());
                 }
             }
         }
@@ -444,6 +472,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             goodsList = goodsService.findGoodsByIds(registerPayDto.getGoodsIds());
             for (Goods goods : goodsList) {
                 orderAmount = orderAmount.add(goods.getGroupPurchasePrice());
+                accessoriesFee = accessoriesFee.add(goods.getGroupPurchasePrice());
             }
         }
 
@@ -453,14 +482,14 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             otherGoodsList = goodsService.findGoodsByIds(registerPayDto.getOtherGoodsIds());
             for (Goods goods : otherGoodsList) {
                 orderAmount = orderAmount.add(goods.getGroupPurchasePrice());
+                otherFee = otherFee.add(goods.getGroupPurchasePrice());
             }
         }
         if (amount.compareTo(orderAmount) != 0) {
             throw new BizException("商品价格不符");
         }
-
         String orderNo = idGeneratorService.generatorId("payment") + "";
-        
+
         String channelType = "";
 
         StudentPaymentOrder studentPaymentOrder = studentRegistrationService.addOrder(studentRegistration, amount, orderNo, channelType, courseFee, goodsGroups, goodsList, otherGoodsList);
@@ -504,6 +533,28 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         studentPaymentOrder.setVersion(studentPaymentOrder.getVersion()+1);
 
+        MusicGroup musicGroup = musicGroupDao.get(studentRegistration.getMusicGroupId());
+        //分类费用 course,instrument,accessories,other
+        Map<String, BigDecimal> classFee = new HashMap<>();
+        classFee.put("course",courseFee);
+        classFee.put("instrument",instrumentFee);
+        classFee.put("accessories",accessoriesFee);
+        classFee.put("other",otherFee);
+        BigDecimal classFeeAmount = courseFee.add(instrumentFee).add(accessoriesFee).add(otherFee);
+
+        if(amount.compareTo(classFeeAmount) < 0){
+            BigDecimal subAmount = classFeeAmount.subtract(amount);
+            for (Map.Entry<String, BigDecimal> feeEntry : classFee.entrySet()) {
+                if(subAmount.compareTo(feeEntry.getValue()) > 0){
+                    classFee.put(feeEntry.getKey(),BigDecimal.ZERO);
+                    subAmount = subAmount.subtract(feeEntry.getValue());
+                }else {
+                    classFee.put(feeEntry.getKey(),feeEntry.getValue().subtract(subAmount));
+                    break;
+                }
+            }
+        }
+
         String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
         Map payMap = payService.getPayMap(
                 amount,
@@ -512,8 +563,15 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 baseApiUrl+"/#/paymentresult?orderNo=" + orderNo,
                 "乐团报名缴费",
                 "乐团报名缴费",
-                userId);
-
+                userId,
+                classFee,
+                musicGroup.getOrganId()
+        );
+
+        Map<String,BigDecimal> routingFee = (Map<String,BigDecimal>)payMap.get("routingFee");
+        studentPaymentOrder.setComAmount(routingFee.get("COM"));
+        studentPaymentOrder.setPerAmount(routingFee.get("PER"));
+        studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
         studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
         studentPaymentOrder.setUpdateTime(date);
         studentPaymentOrderService.update(studentPaymentOrder);
@@ -529,7 +587,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
 
         Integer userId = studentRegistration.getUserId();
-        
+
         StudentPaymentOrder ApplyOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, studentRegistration.getMusicGroupId(), DealStatusEnum.ING);
         if (ApplyOrder == null) {
             throw new BizException("没有支付中的订单,请勿非法请求");
@@ -546,6 +604,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
         orderAmount = orderAmount.add(courseFee);
 
+        BigDecimal instrumentFee = BigDecimal.ZERO;
+        BigDecimal accessoriesFee = BigDecimal.ZERO;
+        BigDecimal otherFee = BigDecimal.ZERO;
+
 
         //乐器及打包辅件
         List<MusicGroupSubjectGoodsGroup> goodsGroups = new ArrayList<>();
@@ -564,23 +626,38 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 musicGroupSubjectGoodsGroup.setGoodsIdList(orderDetail.getGoodsIdList());
                 musicGroupSubjectGoodsGroup.setPrice(orderDetail.getPrice());
                 goodsGroups.add(musicGroupSubjectGoodsGroup);
+
+                if(musicGroupSubjectGoodsGroup.getType().equals(GoodsType.INSTRUMENT)){
+                    instrumentFee = instrumentFee.add(orderDetail.getPrice());
+                }else if(musicGroupSubjectGoodsGroup.getType().equals(GoodsType.ACCESSORIES)) {
+                    accessoriesFee = accessoriesFee.add(orderDetail.getPrice());
+                }else {
+                    otherFee = otherFee.add(orderDetail.getPrice());
+                }
                 orderAmount = orderAmount.add(orderDetail.getPrice());
             }
         } else if (studentRegistration.getTemporaryCourseFee() == null && !registerPayDto.getGoodsGroupIds().equals("")) {
             goodsGroups = musicGroupSubjectGoodsGroupService.findGoodsGroupByIds(registerPayDto.getGoodsGroupIds());
             for (MusicGroupSubjectGoodsGroup goodsGroup : goodsGroups) {
                 if (goodsGroup.getType().equals(GoodsType.INSTRUMENT) && musicOneSubjectClassPlan.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)) {
-                    orderAmount = orderAmount.add(musicOneSubjectClassPlan.getDepositFee());
-                    continue;
+                    goodsGroup.setPrice(musicOneSubjectClassPlan.getDepositFee());
                 }
                 if (goodsGroup.getType().equals(GoodsType.INSTRUMENT) && musicOneSubjectClassPlan.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.FREE)) {
-                    continue;
+                    goodsGroup.setPrice(new BigDecimal(0));
                 }
 
                 orderAmount = orderAmount.add(goodsGroup.getPrice());
+                if(goodsGroup.getType().equals(GoodsType.INSTRUMENT)){
+                    instrumentFee = instrumentFee.add(goodsGroup.getPrice());
+                }else if(goodsGroup.getType().equals(GoodsType.ACCESSORIES)) {
+                    accessoriesFee = accessoriesFee.add(goodsGroup.getPrice());
+                }else {
+                    otherFee = otherFee.add(goodsGroup.getPrice());
+                }
                 //团购乐器减免课程费用
                 if (goodsGroup.getType().equals(GoodsType.INSTRUMENT) && goodsGroup.getRemissionCourseFee() != null && musicOneSubjectClassPlan.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.GROUP)) {//团购
                     orderAmount = orderAmount.subtract(goodsGroup.getRemissionCourseFee());
+                    courseFee.subtract(goodsGroup.getRemissionCourseFee());
                 }
             }
         }
@@ -591,6 +668,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             goodsList = goodsService.findGoodsByIds(registerPayDto.getGoodsIds());
             for (Goods goods : goodsList) {
                 orderAmount = orderAmount.add(goods.getGroupPurchasePrice());
+                accessoriesFee = accessoriesFee.add(goods.getGroupPurchasePrice());
             }
         }
 
@@ -600,6 +678,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             otherGoodsList = goodsService.findGoodsByIds(registerPayDto.getOtherGoodsIds());
             for (Goods goods : otherGoodsList) {
                 orderAmount = orderAmount.add(goods.getGroupPurchasePrice());
+                otherFee = otherFee.add(goods.getGroupPurchasePrice());
             }
         }
         if (amount.compareTo(orderAmount) != 0) {
@@ -607,13 +686,13 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
 
         String orderNo = idGeneratorService.generatorId("payment") + "";
-        
+
         String channelType = "";
 
         StudentPaymentOrder studentPaymentOrder = studentRegistrationService.reAddOrder(userId, amount, orderNo, channelType, courseFee, goodsGroups, goodsList, otherGoodsList, studentRegistration.getMusicGroupId(), ApplyOrder);
         studentPaymentOrder.setVersion(0);
         Date date = new Date();
-        
+
         if(registerPayDto.getIsUseBalancePayment() || amount.doubleValue() == 0){
         	SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(userId);
         	if(userCashAccount == null){
@@ -648,6 +727,28 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
         studentPaymentOrder.setVersion(studentPaymentOrder.getVersion()+1);
 
+        MusicGroup musicGroup = musicGroupDao.get(studentRegistration.getMusicGroupId());
+        //分类费用 course,instrument,accessories,other
+        Map<String, BigDecimal> classFee = new HashMap<>();
+        classFee.put("course",courseFee);
+        classFee.put("instrument",instrumentFee);
+        classFee.put("accessories",accessoriesFee);
+        classFee.put("other",otherFee);
+        BigDecimal classFeeAmount = courseFee.add(instrumentFee).add(accessoriesFee).add(otherFee);
+
+        if(amount.compareTo(classFeeAmount) < 0){
+            BigDecimal subAmount = classFeeAmount.subtract(amount);
+            for (Map.Entry<String, BigDecimal> feeEntry : classFee.entrySet()) {
+                if(subAmount.compareTo(feeEntry.getValue()) > 0){
+                    classFee.put(feeEntry.getKey(),BigDecimal.ZERO);
+                    subAmount = subAmount.subtract(feeEntry.getValue());
+                }else {
+                    classFee.put(feeEntry.getKey(),feeEntry.getValue().subtract(subAmount));
+                    break;
+                }
+            }
+        }
+
         String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
         Map payMap = payService.getPayMap(
                 amount,
@@ -656,12 +757,18 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 baseApiUrl+"/#/paymentresult?orderNo=" + orderNo,
                 "乐团报名缴费",
                 "乐团报名缴费",
-                userId);
-        
+                userId,
+                classFee,
+                musicGroup.getOrganId()
+        );
+
+        Map<String,BigDecimal> routingFee = (Map<String,BigDecimal>)payMap.get("routingFee");
+        studentPaymentOrder.setComAmount(routingFee.get("COM"));
+        studentPaymentOrder.setPerAmount(routingFee.get("PER"));
+        studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
         studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
         studentPaymentOrder.setUpdateTime(date);
         studentPaymentOrderService.update(studentPaymentOrder);
-        
 		return payMap;
 	}
 
@@ -926,7 +1033,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (studentPaymentOrders != null && studentPaymentOrders.size() > 0) {
             throw new BizException("缴费存在交易中的数据,不能取消乐团");
         }
-        
+
         //删除续费记录
         musicGroupStudentFeeDao.deleteByMusicGroupId(musicGroupId);
 
@@ -935,7 +1042,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 		// 删除每节课的课酬
 		courseScheduleStudentPaymentDao.deleteByMusicGroupId(musicGroupId, GroupType.MUSIC);
 		courseScheduleTeacherSalaryDao.deleteByMusicGroupId(musicGroupId, GroupType.MUSIC);
-        
+
         //删除考勤
 		teacherAttendanceDao.deleteByMusicGroupId(musicGroupId, GroupType.MUSIC);
 
@@ -992,10 +1099,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         // 清除下次缴费时间
         musicGroupStudentFeeDao.updateNextPaymentDate(musicGroupId, null);
         musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId,"暂停乐团",sysUser.getId(),""));
-        
+
         //删除课表
         courseScheduleDao.logicDeleteCourseSchedulesByMusicGroupID(musicGroup.getId());
-        
+
         return true;
     }
 
@@ -1022,10 +1129,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         // 重新设置下次缴费时间
         musicGroupStudentFeeDao.updateNextPaymentDate(musicGroupId, musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId));
         musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId,"恢复乐团",sysUser.getId(),""));
-        
+
         //恢复课表
         courseScheduleDao.resumeCourseScheduleByMusicGroupId(musicGroup.getId());
-        
+
         return true;
     }
 
@@ -1121,7 +1228,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 			}
 			//更新学员在班级的状态
 			classGroupStudentMapperDao.deleteStudentByMusicGroupId(musicGroupId, userId);
-			
+
 			List<Integer> classGroupIdList = classGroupStudentMapperDao.queryClassGroupIdList(musicGroupId, userId, GroupType.MUSIC);
 			if (classGroupIdList != null && classGroupIdList.size() > 0) {
 				//更新班级人数
@@ -1134,21 +1241,21 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 }
                 imFeignService.groupBatchQuit(imGroupModels);
 			}
-			
+
 			List<CourseSchedule> musicGroupCourseSchedules = courseScheduleDao.findMusicGroupCourseSchedulesWithStudent(musicGroupId,GroupType.MUSIC.getCode(), CourseStatusEnum.NOT_START.getCode(),userId);
 			if(!CollectionUtils.isEmpty(musicGroupCourseSchedules)){
 				List<Long> courseScheduleIds = musicGroupCourseSchedules.stream().map(courseSchedule -> courseSchedule.getId()).collect(Collectors.toList());
 
 				// 删除未上课
 	            courseScheduleDao.deleteMusicGroupCourseSchedulesWithStudent(courseScheduleIds,userId);
-				
+
 				//删除学生缴费表
 				courseScheduleStudentPaymentDao.deleteStudentCourseSchedule(userId, musicGroupCourseSchedules);
 			}
-			
+
 			//删除续费周期
 			musicGroupStudentFeeDao.deleteByUserIdAndMusicGroupId(userId, musicGroupId);
-			
+
 			// 退团
 			studentRegistration.setMusicGroupStatus(ClassGroupStudentStatusEnum.QUIT);
 			studentRegistration.setUpdateTime(date);
@@ -1229,7 +1336,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 		}
 		//更新学员在班级的状态
 		classGroupStudentMapperDao.deleteStudentByMusicGroupId(musicGroupId, userId);
-		
+
 		List<Integer> classGroupIdList = classGroupStudentMapperDao.queryClassGroupIdList(musicGroupId, userId, GroupType.MUSIC);
 		if (classGroupIdList != null && classGroupIdList.size() > 0) {
 			//更新班级人数
@@ -1243,21 +1350,21 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 			}
             imFeignService.groupBatchQuit(imGroupModels);
 		}
-		
+
 		List<CourseSchedule> musicGroupCourseSchedules = courseScheduleDao.findMusicGroupCourseSchedulesWithStudent(musicGroupId,GroupType.MUSIC.getCode(), CourseStatusEnum.NOT_START.getCode(),userId);
 		if(!CollectionUtils.isEmpty(musicGroupCourseSchedules)){
 			List<Long> courseScheduleIds = musicGroupCourseSchedules.stream().map(courseSchedule -> courseSchedule.getId()).collect(Collectors.toList());
 
 			// 删除未上课
             courseScheduleDao.deleteMusicGroupCourseSchedulesWithStudent(courseScheduleIds,userId);
-			
+
 			// 删除学生缴费表
 			courseScheduleStudentPaymentDao.deleteStudentCourseSchedule(userId, musicGroupCourseSchedules);
 		}
-		
+
 		//删除续费周期
 		musicGroupStudentFeeDao.deleteByUserIdAndMusicGroupId(userId, musicGroupId);
-		
+
 		// 退团
 		studentRegistration.setMusicGroupStatus(ClassGroupStudentStatusEnum.QUIT);
 		studentRegistration.setUpdateTime(date);
@@ -1356,7 +1463,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         studentPaymentOrderDetailList.add(studentPaymentOrderDetail);
 
         studentPaymentOrderDetailService.batchAdd(studentPaymentOrderDetailList);
-        
+
         if(isUseBalancePayment || amount.doubleValue() == 0){
         	SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(userId);
         	if(userCashAccount == null){
@@ -1369,9 +1476,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 studentPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
                 studentPaymentOrder.setUpdateTime(date);
                 studentPaymentOrderService.update(studentPaymentOrder);
-                
+
         		sysUserCashAccountService.updateBalance(userId, amount.negate(),PlatformCashAccountDetailTypeEnum.PAY_FEE,"乐团续费");
-        		
+
         		//更新下次续费时间
         		musicGroupStudentFee.setUpdateTime(date);
                 musicGroupStudentFee.setLatestPaidTime(date);
@@ -1392,12 +1499,29 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
         String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
 
+        //分类费用 course,instrument,accessories,other
+        Map<String, BigDecimal> classFee = new HashMap<>();
+        classFee.put("course",amount);
+        classFee.put("instrument",BigDecimal.ZERO);
+        classFee.put("accessories",BigDecimal.ZERO);
+        classFee.put("other",BigDecimal.ZERO);
+
         try {
 
             Map<String, Object> payMap = payService.getPayMap(amount, studentPaymentOrder.getOrderNo(),
                     baseApiUrl+"/api-student/studentOrder/notify",
                     baseApiUrl+"/#/paymentresult?orderNo=" + studentPaymentOrder.getOrderNo(),
-                    "续费", "乐团续费",userId);
+                    "续费",
+                    "乐团续费",
+                    userId,
+                    classFee,
+                    musicGroup.getOrganId()
+            );
+
+            Map<String,BigDecimal> routingFee = (Map<String,BigDecimal>)payMap.get("routingFee");
+            studentPaymentOrder.setComAmount(routingFee.get("COM"));
+            studentPaymentOrder.setPerAmount(routingFee.get("PER"));
+            studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
             studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
             studentPaymentOrder.setUpdateTime(date);
             studentPaymentOrderService.update(studentPaymentOrder);
@@ -1412,7 +1536,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public boolean renewForCallback(StudentPaymentOrder studentPaymentOrder) throws IOException {
 
-        studentPaymentOrderDao.update(studentPaymentOrder);
+        studentPaymentOrderService.update(studentPaymentOrder);
 
         Integer userId = studentPaymentOrder.getUserId();
         String musicGroupId = studentPaymentOrder.getMusicGroupId();
@@ -1436,7 +1560,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             musicGroupStudentFee.setTemporaryCourseFee(new BigDecimal(0));
             musicGroupStudentFee.setNextPaymentDate(musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId));
             musicGroupStudentFeeDao.update(musicGroupStudentFee);
-            
+
             //插入交易明细
             SysUserCashAccount cashAccount = sysUserCashAccountService.get(userId);
             BigDecimal amount = studentPaymentOrder.getActualAmount();
@@ -1451,21 +1575,27 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             rechargeDetail.setType(PlatformCashAccountDetailTypeEnum.RECHARGE);
             rechargeDetail.setUpdateTime(date);
             rechargeDetail.setUserId(userId);
+            rechargeDetail.setChannel(studentPaymentOrder.getPaymentChannel());
+            rechargeDetail.setComAmount(studentPaymentOrder.getComAmount());
+            rechargeDetail.setPerAmount(studentPaymentOrder.getPerAmount());
             sysUserCashAccountDetailService.insert(rechargeDetail);
-            
+
             //缴费
             SysUserCashAccountDetail paymentDetail = new SysUserCashAccountDetail();
-            paymentDetail.setAmount(amount);
+            paymentDetail.setAmount(amount.negate());
             paymentDetail.setBalance(cashAccount.getBalance());
-            paymentDetail.setComment("费");
+            paymentDetail.setComment("费");
             paymentDetail.setCreateTime(date);
             paymentDetail.setStatus(DealStatusEnum.SUCCESS);
             paymentDetail.setTransNo(studentPaymentOrder.getTransNo());
             paymentDetail.setType(PlatformCashAccountDetailTypeEnum.PAY_FEE);
             paymentDetail.setUpdateTime(date);
             paymentDetail.setUserId(userId);
+            rechargeDetail.setChannel(studentPaymentOrder.getPaymentChannel());
+            rechargeDetail.setComAmount(studentPaymentOrder.getComAmount().negate());
+            rechargeDetail.setPerAmount(studentPaymentOrder.getPerAmount().negate());
             sysUserCashAccountDetailService.insert(paymentDetail);
-            
+
             // 发送续费结果通知
             sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_MUSIC_GROUP_RENEW_SUCCESS, push, null, 0, "1",
                     studentRegistration.getParentsName(),studentPaymentOrder.getActualAmount());

+ 147 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java

@@ -5,10 +5,12 @@ import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.entity.CooperationOrgan;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.SysAccount;
+import com.ym.mec.biz.dal.entity.SysPaymentConfig;
 import com.ym.mec.biz.dal.enums.PaymentChannelTypeEnum;
 import com.ym.mec.biz.service.PayService;
 import com.ym.mec.biz.service.StudentPaymentOrderService;
 import com.ym.mec.biz.service.SysAccountService;
+import com.ym.mec.biz.service.SysPaymentConfigService;
 import com.ym.mec.thirdparty.adapay.Pay;
 import com.ym.mec.thirdparty.union.UnionPay;
 import com.ym.mec.thirdparty.union.UnionPayFeignService;
@@ -17,8 +19,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 支付服务类
@@ -36,6 +41,8 @@ public class PayServiceImpl implements PayService {
     private MusicGroupDao musicGroupDao;
     @Autowired
     private SysConfigDao sysConfigDao;
+    @Autowired
+    private SysPaymentConfigService sysPaymentConfigService;
 
 
     /**
@@ -50,6 +57,7 @@ public class PayServiceImpl implements PayService {
      * @return
      * @throws Exception
      */
+    @Override
     public Map<String, Object> getPayMap(BigDecimal amount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody, Integer userId) throws Exception {
 
         String company = "daya";
@@ -85,6 +93,53 @@ public class PayServiceImpl implements PayService {
     }
 
     @Override
+    public Map<String, Object> getPayMap(BigDecimal amount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody, Integer userId, Map<String, BigDecimal> fee, Integer organId) throws Exception {
+        String company = "daya";
+        if (userId != null) {
+            MusicGroup musicGroup = musicGroupDao.findUserMusicGroup(userId);
+            if (musicGroup != null && musicGroup.getOwnershipType().equals(CooperationOrgan.OwnershipType.COOPERATION)) {
+                company = "yadie";
+            }
+        }
+
+        //支付通道决策
+        Map unionPay = new HashMap();
+        Map<String, BigDecimal> routingFee = getRoutingFee(company, amount, fee, organId);
+        List<SysAccount> accounts = getRoutingAccount(routingFee, company);
+        SysAccount routingAccount = accounts.get(0);
+
+        Map payMap = null;
+        String type = null;
+        if (routingAccount.getChannel().equals("YQPAY")) {
+            List<Map> tempRoutingList = new ArrayList();
+            for (SysAccount account : accounts) {
+                Map<String, Object> routingList = new HashMap<>();
+                routingList.put("routingMerNo", account.getRoutingMerNo());//分佣账户
+                routingList.put("routingFee", account.getRoutingFee().subtract((account.getRoutingFee().multiply(new BigDecimal(0.28)).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_UP))); //分佣金额
+                tempRoutingList.add(routingList);
+            }
+            if(accounts.size() ==1 && routingAccount.getMerNo().equals(routingAccount.getRoutingMerNo())){
+                tempRoutingList = null;
+            }
+
+            payMap = YqPayUtil.getPayMap(amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody, routingAccount.getMerNo(), tempRoutingList);
+            type = "YQPAY";
+        } else {
+            payMap = new Pay().getPayMap(amount, orderNo, notifyUrl, orderSubject, orderBody);
+            type = "ADAPAY";
+        }
+
+        String routingMerNos = accounts.stream().map(sysAccount -> sysAccount.getRoutingMerNo()).collect(Collectors.joining(","));
+
+        unionPay.put("orderNo", orderNo);
+        unionPay.put("type", type);
+        unionPay.put("payMap", payMap);
+        unionPay.put("routingFee",routingFee);
+        unionPay.put("routingMerNos",routingMerNos);
+        return unionPay;
+    }
+
+    @Override
     public Map<String, Object> query(String orderNo) throws Exception {
         return new UnionPay(unionPayFeignService).query(orderNo);
     }
@@ -115,9 +170,99 @@ public class PayServiceImpl implements PayService {
         if (company.equals("yadie")) {
             type = "PER";
         }
-        routingAccount = sysAccountService.getAccount(company, channel, type, null);
+        SysAccount account = sysAccountService.getOneAccount(company, channel, type, null);
 
-        return routingAccount;
+        return account;
     }
 
+    /**
+     * 获取收款账户
+     *
+     * @param routingFee
+     * @param company
+     * @return
+     */
+    private List<SysAccount> getRoutingAccount(Map<String, BigDecimal> routingFee, String company) {
+        String channel = "";
+        String type = "";
+
+        if (routingFee.get("COM").compareTo(BigDecimal.ZERO) > 0 && routingFee.get("PER").compareTo(BigDecimal.ZERO) > 0) {
+            channel = "YQPAY";
+            type = "COM,PER";
+        } else if (routingFee.get("COM").compareTo(BigDecimal.ZERO) > 0 && routingFee.get("PER").compareTo(BigDecimal.ZERO) == 0) {
+            channel = sysConfigDao.findConfigValue("com_account_channel");
+            type = "COM";
+        } else if (routingFee.get("COM").compareTo(BigDecimal.ZERO) == 0 && routingFee.get("PER").compareTo(BigDecimal.ZERO) > 0) {
+            channel = sysConfigDao.findConfigValue("per_account_channel");
+            type = "PER";
+        }
+        List<SysAccount> accounts = sysAccountService.getAccount(company, channel, type, null);
+
+        for (SysAccount account : accounts) {
+            if (account.getType().equals("COM")) {
+                account.setRoutingFee(routingFee.get("COM"));
+            } else {
+                account.setRoutingFee(routingFee.get("PER"));
+            }
+        }
+        return accounts;
+    }
+
+    /**
+     * 获取分佣金额
+     *
+     * @param fee
+     * @param organId
+     * @return
+     */
+    private Map<String, BigDecimal> getRoutingFee(String company, BigDecimal amount, Map<String, BigDecimal> fee, Integer organId) {
+        Map<String, BigDecimal> routingFee = new HashMap<>(2);
+        routingFee.put("COM", BigDecimal.ZERO);
+        routingFee.put("PER", BigDecimal.ZERO);
+        if (company.equals("yadie")) {
+            routingFee.put("PER", amount);
+            return routingFee;
+        }
+
+        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(organId);
+
+        int payOrderNums = studentPaymentOrderService.findPayOrderNum(); //获取支付中和成功的订单数
+        //前几笔收入私户
+        Integer nums = Integer.parseInt(sysConfigDao.findConfigValue("per_account_nums"));
+        if (paymentConfig != null && paymentConfig.getType().equals(1)) {
+            nums = paymentConfig.getPerScale();
+        }
+
+        String type = null;
+        int rem = (payOrderNums + 1) % 10;
+        if (rem > 0 && rem <= nums) { //私人账户
+            type = "PER";
+        } else {
+            type = "COM";
+        }
+        routingFee.put(type, amount);
+
+        if (paymentConfig == null || !paymentConfig.getType().equals(2)) {
+            return routingFee;
+        }
+        routingFee.put(type, BigDecimal.ZERO);
+        for (Map.Entry<String, BigDecimal> feeEntry : fee.entrySet()) {
+            if (feeEntry.getKey().equals("course")) {
+                BigDecimal RoutingFee = routingFee.get(paymentConfig.getCourseFee()).add(feeEntry.getValue());
+                routingFee.put(paymentConfig.getCourseFee(), RoutingFee);
+            } else if (feeEntry.getKey().equals("instrument")) {
+                BigDecimal RoutingFee = routingFee.get(paymentConfig.getInstrumentFee()).add(feeEntry.getValue());
+                routingFee.put(paymentConfig.getInstrumentFee(), RoutingFee);
+            } else if (feeEntry.getKey().equals("accessories")) {
+                BigDecimal RoutingFee = routingFee.get(paymentConfig.getAccessoriesFee()).add(feeEntry.getValue());
+                routingFee.put(paymentConfig.getAccessoriesFee(), RoutingFee);
+            } else if (feeEntry.getKey().equals("other")) {
+                BigDecimal RoutingFee = routingFee.get(paymentConfig.getOtherFee()).add(feeEntry.getValue());
+                routingFee.put(paymentConfig.getOtherFee(), RoutingFee);
+            }
+        }
+        return routingFee;
+    }
+
+
 }

+ 36 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java

@@ -5,6 +5,7 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.enums.SysUserType;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.entity.SysUserCashAccount;
@@ -58,23 +59,47 @@ public class StudentManageServiceImpl implements StudentManageService {
     @Override
     public PageInfo findStudentsByOrganId(StudentManageQueryInfo queryInfo) {
         PageInfo<StudentManageListDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Boolean hasCourse = queryInfo.getHasCourse();
         Map<String, Object> params = new HashMap<>();
         MapUtil.populateMap(params, queryInfo);
-
+        params.put("offset", pageInfo.getOffset());
+        int count = 0;
+        if(hasCourse != null){
+            List<Integer> userIds;
+            if(hasCourse){
+                userIds = studentManageDao.queryHasCourse(params);
+                count = studentManageDao.countHasCourse(params);
+            }else {
+                userIds = studentManageDao.queryNotCourse(params);
+                count = studentManageDao.countNotCourse(params);
+            }
+            params.remove("offset");
+            params.put("userIds",userIds);
+        }else {
+            count = studentManageDao.countStudentByOrganId(params);
+        }
         List<StudentManageListDto> dataList = null;
-        int count = studentManageDao.countStudentByOrganId(params);
         if (count > 0) {
             pageInfo.setTotal(count);
-            params.put("offset", pageInfo.getOffset());
             dataList = studentManageDao.findStudentsByOrganId(params);
             List<Integer> userIds = dataList.stream()
                     .map(StudentManageListDto::getUserId).collect(Collectors.toList());
             List<SysUserCashAccount> byUserIds = sysUserCashAccountDao.findByUserIds(userIds);
+//            Map<Integer,Long> hasCourseMap = MapUtil.convertIntegerMap(studentManageDao.queryStudentHasCourse(userIds));
             Map<Integer, SysUserCashAccount> collect = byUserIds.stream()
                     .collect(Collectors.toMap(SysUserCashAccount::getUserId, sysUserCashAccount -> sysUserCashAccount));
-            dataList.forEach(studentManageListDto -> {
-                if(collect.get(studentManageListDto.getUserId()) != null){
-                    studentManageListDto.setCourseBalance(collect.get(studentManageListDto.getUserId()).getCourseBalance());
+            dataList.forEach(e -> {
+                if(hasCourse == null){
+                    e.setHasCourse(studentManageDao.getHasCourse(e.getUserId()));
+                }else {
+                    if(hasCourse){
+                        e.setHasCourse(1L);
+                    }else {
+                        e.setHasCourse(0L);
+                    }
+                }
+                if(collect.get(e.getUserId()) != null){
+                    e.setCourseBalance(collect.get(e.getUserId()).getCourseBalance());
                 }
             });
         }
@@ -324,4 +349,9 @@ public class StudentManageServiceImpl implements StudentManageService {
     public List<StudentRegisterPerDto> queryStudentPer() {
         return studentRegistrationDao.queryStudentPer();
     }
+
+    @Override
+    public List<StudentHasCourseDto> queryHasCourseStudent(String organId) {
+        return studentManageDao.queryHasCourseStudent(organId);
+    }
 }

+ 6 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -752,11 +752,13 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             rechargeDetail.setUpdateTime(nowDate);
             rechargeDetail.setUserId(studentRegistration.getUserId());
             rechargeDetail.setChannel(studentPaymentOrder.getPaymentChannel());
+            rechargeDetail.setComAmount(studentPaymentOrder.getComAmount());
+            rechargeDetail.setPerAmount(studentPaymentOrder.getPerAmount());
             sysUserCashAccountDetailService.insert(rechargeDetail);
 
             //缴费
             SysUserCashAccountDetail paymentDetail = new SysUserCashAccountDetail();
-            paymentDetail.setAmount(amount);
+            paymentDetail.setAmount(amount.negate());
             paymentDetail.setBalance(cashAccount.getBalance());
             paymentDetail.setComment("报名缴费");
             paymentDetail.setCreateTime(nowDate);
@@ -766,6 +768,8 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             paymentDetail.setUpdateTime(nowDate);
             paymentDetail.setUserId(studentRegistration.getUserId());
             rechargeDetail.setChannel(studentPaymentOrder.getPaymentChannel());
+            rechargeDetail.setComAmount(studentPaymentOrder.getComAmount().negate());
+            rechargeDetail.setPerAmount(studentPaymentOrder.getPerAmount().negate());
             sysUserCashAccountDetailService.insert(paymentDetail);
 
             //发送缴费成功通知(短信 + push)
@@ -781,7 +785,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                     MessageTypeEnum.STUDENT_SMS_PAYMENT_SUCCESS, map1, null, 0, "1",
                     studentRegistration.getParentsName(), studentPaymentOrder.getActualAmount());
 
-            //生成课程协议
+//            //生成课程协议
             contractService.transferMusicGroupCoursesContract(studentRegistration.getUserId(),studentRegistration.getMusicGroupId());
             //商品协议(租赁时候有)
             if(musicOneSubjectClassPlan.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)){

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

@@ -25,13 +25,13 @@ public class SysAccountServiceImpl extends BaseServiceImpl<Integer, SysAccount>
     }
 
     @Override
-    public SysAccount getPerAccount(BigDecimal money) {
-        return sysAccountDao.getPerAccount(money);
+    public List<SysAccount> getAccount(String company, String channel, String type, BigDecimal amount) {
+        return sysAccountDao.getAccount(company, channel, type, amount);
     }
 
     @Override
-    public SysAccount getAccount(String company, String channel, String type, BigDecimal amount) {
-        return sysAccountDao.getAccount(company, channel, type, amount);
+    public SysAccount getOneAccount(String company, String channel, String type, BigDecimal amount) {
+        return sysAccountDao.getOneAccount(company,channel,type,amount);
     }
 
 }

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

@@ -189,7 +189,18 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 			}
 		}
 		List<BasicUserDto> userDtos = teacherDao.queryGroupStudents(teacherId, search);
-		teachers.addAll(userDtos);
+		if(userDtos != null && userDtos.size() > 0){
+			teachers.addAll(userDtos);
+			Set<String> musicGroupIds = userDtos.stream().map(e -> e.getMusicGroupId()).collect(Collectors.toSet());
+			if(musicGroupIds != null && musicGroupIds.size() > 0){
+				Map<String, String> musicGroupNameMap = MapUtil.convertIntegerMap(musicGroupDao.queryMusicGroupNameMap(musicGroupIds));
+				userDtos.forEach(e->{
+					if(StringUtils.isNotEmpty(musicGroupNameMap.get(e.getMusicGroupId()))){
+						e.setName(musicGroupNameMap.get(e.getMusicGroupId()) + " " + e.getName());
+					}
+				});
+			}
+		}
 		return teachers;
 	}
 

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

@@ -1079,6 +1079,12 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		}
 
 		String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
+		//分类费用 course,instrument,accessories,other
+		Map<String, BigDecimal> classFee = new HashMap<>();
+		classFee.put("course",amount);
+		classFee.put("instrument",BigDecimal.ZERO);
+		classFee.put("accessories",BigDecimal.ZERO);
+		classFee.put("other",BigDecimal.ZERO);
 		try {
 			Map<String,Object> payMap = payService.getPayMap(
 					amount,
@@ -1087,7 +1093,15 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 					baseApiUrl+"/#/paymentresult?orderNo=" + orderNo,
 					"vip课购买",
 					vipGroup.getName(),
-					user.getId());
+					user.getId(),
+					classFee,
+					vipGroup.getOrganId()
+			);
+
+			Map<String,BigDecimal> routingFee = (Map<String,BigDecimal>)payMap.get("routingFee");
+			studentPaymentOrder.setComAmount(routingFee.get("COM"));
+			studentPaymentOrder.setPerAmount(routingFee.get("PER"));
+			studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
 			studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
 			studentPaymentOrder.setUpdateTime(date);
 			studentPaymentOrderService.update(studentPaymentOrder);
@@ -1143,6 +1157,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		sysUserIncomeCashAccountDetail.setAmount(order.getActualAmount());
 		sysUserIncomeCashAccountDetail.setBalance(sysUserCashAccount.getBalance().add(order.getActualAmount()));
 		sysUserIncomeCashAccountDetail.setAttribute(order.getTransNo());
+		sysUserIncomeCashAccountDetail.setChannel(studentPaymentOrder.getPaymentChannel());
+		sysUserIncomeCashAccountDetail.setComAmount(studentPaymentOrder.getComAmount());
+		sysUserIncomeCashAccountDetail.setPerAmount(studentPaymentOrder.getPerAmount());
 
 		//支出
 		SysUserCashAccountDetail sysUserExpendCashAccountDetail = new SysUserCashAccountDetail();
@@ -1152,6 +1169,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		sysUserExpendCashAccountDetail.setAmount(order.getActualAmount().negate());
 		sysUserExpendCashAccountDetail.setBalance(sysUserCashAccount.getBalance());
 		sysUserExpendCashAccountDetail.setAttribute(order.getTransNo());
+		sysUserExpendCashAccountDetail.setChannel(studentPaymentOrder.getPaymentChannel());
+		sysUserExpendCashAccountDetail.setComAmount(studentPaymentOrder.getComAmount().negate());
+		sysUserExpendCashAccountDetail.setPerAmount(studentPaymentOrder.getPerAmount().negate());
 
 		sysUserCashAccountDetailService.insert(sysUserIncomeCashAccountDetail);
 		sysUserCashAccountDetailService.insert(sysUserExpendCashAccountDetail);

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

@@ -537,7 +537,22 @@
 
     <sql id="queryMusicGroupCourseScheduleSql">
         <where>
-            cg.del_flag_ = 0 AND (ta.teacher_id_ = cs.actual_teacher_id_ OR ta.id_ IS NULL) AND cg.group_type_ = 'MUSIC'
+            cg.del_flag_ = 0 AND cg.group_type_ = 'MUSIC'
+            <if test="startTime != null">
+                AND cs.class_date_ &gt;= #{startTime}
+            </if>
+            <if test="endTime != null">
+                AND cs.class_date_ &lt;= #{endTime}
+            </if>
+            <if test="musicGroupId != null">
+                AND cg.music_group_id_ = #{musicGroupId}
+            </if>
+        </where>
+    </sql>
+
+    <sql id="queryMusicGroupCourseScheduleDetailSql">
+        <where>
+            (ta.teacher_id_ = cs.actual_teacher_id_ OR ta.id_ IS NULL) AND cg.group_type_ = 'MUSIC'
             <if test="classScheduleType != null">
                 AND cs.type_ = #{classScheduleType}
             </if>
@@ -575,23 +590,40 @@
     </resultMap>
     <select id="queryMusicGroupCourseSchedule" resultMap="MusicGroupCourseScheduleDto">
         SELECT cs.id_ course_schedule_id_,cs.class_date_,cs.start_class_time_,cs.end_class_time_,cs.class_group_id_,
+        cs.type_ course_schedule_type_,cg.name_ course_schedule_name_
+        FROM course_schedule cs
+        LEFT JOIN class_group cg ON cg.id_ = cs.class_group_id_
+        <include refid="queryMusicGroupCourseScheduleSql"/>
+        ORDER BY cs.class_date_ ,cs.start_class_time_ ,cg.name_
+        <include refid="global.limit"/>
+    </select>
+
+    <select id="countMusicGroupCourseSchedule" resultType="java.lang.Integer">
+        SELECT COUNT(cs.id_)
+        FROM course_schedule cs
+        LEFT JOIN class_group cg ON cg.id_ = cs.class_group_id_
+        <include refid="queryMusicGroupCourseScheduleSql"/>
+    </select>
+
+    <select id="queryMusicGroupCourseScheduleDetail" resultMap="MusicGroupCourseScheduleDto">
+        SELECT cs.id_ course_schedule_id_,cs.class_date_,cs.start_class_time_,cs.end_class_time_,cs.class_group_id_,
         cs.type_ course_schedule_type_,cs.status_ course_schedule_status_,cg.name_ course_schedule_name_,
         IF(ta.sign_in_status_ IS NULL,3,ta.sign_in_status_) sign_in_status_,
         IF(ta.sign_out_status_ IS NULL,3,ta.sign_out_status_) sign_out_status_
         FROM course_schedule cs
         LEFT JOIN class_group cg ON cg.id_ = cs.class_group_id_
         LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = cs.id_
-        <include refid="queryMusicGroupCourseScheduleSql"/>
+        <include refid="queryMusicGroupCourseScheduleDetailSql"/>
         ORDER BY cs.class_date_ ,cs.start_class_time_ ,cg.name_
         <include refid="global.limit"/>
     </select>
 
-    <select id="countMusicGroupCourseSchedule" resultType="java.lang.Integer">
+    <select id="countMusicGroupCourseScheduleDetail" resultType="java.lang.Integer">
         SELECT COUNT(cs.id_)
         FROM course_schedule cs
         LEFT JOIN class_group cg ON cg.id_ = cs.class_group_id_
         LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = cs.id_
-        <include refid="queryMusicGroupCourseScheduleSql"/>
+        <include refid="queryMusicGroupCourseScheduleDetailSql"/>
     </select>
 
     <select id="findNameById" resultType="java.util.Map">

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

@@ -454,7 +454,7 @@
         FROM
           course_schedule_student_payment cssp
             LEFT JOIN course_schedule cs ON cssp.course_schedule_id_=cs.id_
-            LEFT JOIN sys_user su ON cs.teacher_id_=su.id_
+            LEFT JOIN sys_user su ON cs.actual_teacher_id_=su.id_
             LEFT JOIN course_schedule_complaints csc ON csc.course_schedule_id_=cssp.course_schedule_id_ AND csc.user_id_=#{studentId}
             LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_  AND sa.user_id_=#{studentId}
         WHERE

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

@@ -239,6 +239,7 @@
 		<result column="user_id_" property="userId" />
 		<result column="head_url_" property="headUrl" />
 		<result column="gender_" property="gender"/>
+		<result column="music_group_id_" property="musicGroupId"/>
 	</resultMap>
 
 	<select id="findTeachersByStuId" resultMap="BasicUserDto">
@@ -395,4 +396,11 @@
 		</foreach>
 		AND mg.id_ IS NOT NULL LIMIT 1
 	</select>
+	<select id="queryMusicGroupNameMap" resultType="java.util.Map">
+		SELECT id_ 'key',name_ 'value' FROM music_group WHERE id_ IN
+		<foreach collection="musicGroupIds" open="(" close=")" item="item" separator=",">
+			#{item}
+		</foreach>
+		AND name_ IS NOT NULL
+	</select>
 </mapper>

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

@@ -121,7 +121,8 @@
     </update>
 
     <select id="findStudentsByOrganId" resultMap="studentManageListDto">
-        SELECT su.id_ user_id_,su.username_,su.gender_,su.phone_ parents_phone_,su.real_name_,su.birthdate_,su.nation_, case when su.password_ is null then 0 else 1 end isActive_
+        SELECT su.id_ user_id_,su.username_,su.gender_,su.phone_ parents_phone_,su.real_name_,su.birthdate_,su.nation_,
+        CASE WHEN su.password_ IS NULL THEN 0 ELSE 1 END isActive_
         FROM sys_user su
         <include refid="findStudentsByOrganIdSql"/>
         ORDER BY su.create_time_ DESC
@@ -137,10 +138,16 @@
                 AND (su.phone_ LIKE CONCAT('%',#{search},'%') OR su.username_ LIKE CONCAT('%',#{search},'%') OR su.id_ LIKE CONCAT('%',#{search},'%'))
             </if>
             <if test="isActive != null and isActive == true">
-            	and su.password_ is not null
+                AND su.password_ is not null
             </if>
             <if test="isActive != null and isActive == false">
-            	and su.password_ is null
+                AND su.password_ is null
+            </if>
+            <if test="userIds != null">
+                AND su.id_ IN
+                <foreach collection="userIds" open="(" close=")" separator="," item="item">
+                    #{item}
+                </foreach>
             </if>
         </where>
     </sql>
@@ -149,7 +156,8 @@
         SELECT COUNT(DISTINCT su.id_)
         FROM sys_user su
         LEFT JOIN student_registration sr ON su.id_ = sr.user_id_
-        <include refid="findStudentsByOrganIdSql"/>
+        WHERE su.user_type_ = 'STUDENT'
+        <include refid="queryHasCourseSql"/>
     </select>
     <select id="findStudentBaseInfoByUserID" resultMap="studentManageListDto">
         SELECT su.username_,su.gender_,su.birthdate_,su.real_name_,su.id_ user_id_,
@@ -375,6 +383,12 @@
             <if test="musicGroupId != null and musicGroupId != ''">
                 AND sr.music_group_id_ = #{musicGroupId}
             </if>
+            <if test="isActive != null and isActive == true">
+                and su.password_ is not null
+            </if>
+            <if test="isActive != null and isActive == false">
+                and su.password_ is null
+            </if>
         </where>
     </sql>
     <resultMap id="MusicGroupStudentsDto" type="com.ym.mec.biz.dal.dto.MusicGroupStudentsDto">
@@ -391,11 +405,12 @@
         <result property="isNewStudent" column="is_new_student_"/>
         <result property="courseFee" column="course_fee_"/>
         <result property="nextPaymentDate" column="next_payment_date_"/>
+        <result property="isActive" column="isActive_"/>
     </resultMap>
     <select id="queryMusicGroupStudent" resultMap="MusicGroupStudentsDto">
-        SELECT sr.user_id_,su.username_ real_name_,su.gender_,sr.parents_phone_,sr.current_grade_,
+        SELECT sr.user_id_,su.username_ real_name_,su.gender_,su.phone_ parents_phone_,sr.current_grade_,
         sr.current_class_,sr.music_group_status_,mgsf.next_payment_date_,mgsf.course_fee_,
-        s.name_ subject_name_,sr.music_group_id_,
+        s.name_ subject_name_,sr.music_group_id_,case when su.password_ is null then 0 else 1 end isActive_,
         IF(DATE_FORMAT(sr.create_time_,'%Y-%m-%d') > DATE_FORMAT(mg.payment_expire_date_,'%Y-%m-%d'),1,0) is_new_student_
         FROM student_registration sr
         LEFT JOIN sys_user su ON sr.user_id_ = su.id_
@@ -521,5 +536,112 @@
             AND vg.status_ = #{vipGroupStatus}
         </if>
     </select>
+    <sql id="queryHasCourseSql">
+        <if test="organId != null">
+            AND FIND_IN_SET(su.organ_id_,#{organId})
+        </if>
+        <if test="search != null and search != ''">
+            AND (su.phone_ LIKE CONCAT('%',#{search},'%') OR su.username_ LIKE CONCAT('%',#{search},'%') OR su.id_ LIKE CONCAT('%',#{search},'%'))
+        </if>
+        <if test="isActive != null and isActive == true">
+            and su.password_ is not null
+        </if>
+        <if test="isActive != null and isActive == false">
+            and su.password_ is null
+        </if>
+    </sql>
+    <select id="queryHasCourse" resultType="java.lang.Integer">
+        SELECT su.id_ FROM sys_user su
+        LEFT JOIN course_schedule_student_payment cssp ON cssp.user_id_ = su.id_
+        LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
+        WHERE su.user_type_ = 'STUDENT' AND cs.status_ != 'OVER'
+        <include refid="queryHasCourseSql"/>
+        GROUP BY su.id_
+        ORDER BY su.create_time_ DESC
+        <include refid="global.limit"/>
+    </select>
+    <select id="countHasCourse" resultType="java.lang.Integer">
+        SELECT COUNT(DISTINCT su.id_) FROM sys_user su
+        LEFT JOIN course_schedule_student_payment cssp ON cssp.user_id_ = su.id_
+        LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
+        WHERE su.user_type_ = 'STUDENT' AND cs.status_ != 'OVER'
+        <include refid="queryHasCourseSql"/>
+    </select>
+    <select id="queryNotCourse" resultType="java.lang.Integer">
+        SELECT su.id_ FROM sys_user su
+        LEFT JOIN course_schedule_student_payment cssp ON cssp.user_id_ = su.id_
+        LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.status_ != 'OVER'
+        <include refid="queryNotCourseSql"/>
+        GROUP BY su.id_
+        HAVING COUNT(cs.id_) = 0
+        ORDER BY su.create_time_ DESC
+        <include refid="global.limit"/>
+    </select>
+    <select id="countNotCourse" resultType="java.lang.Integer">
+        SELECT COUNT(e.id_) FROM (SELECT su.id_ FROM sys_user su
+        LEFT JOIN course_schedule_student_payment cssp ON cssp.user_id_ = su.id_
+        LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.status_ != 'OVER'
+        <include refid="queryNotCourseSql"/>
+        GROUP BY su.id_
+        HAVING COUNT(cs.id_) = 0)e
+    </select>
+    <sql id="queryNotCourseSql">
+        <where>
+            su.user_type_ = 'STUDENT'
+            <if test="organId != null">
+                AND FIND_IN_SET(su.organ_id_,#{organId})
+            </if>
+            <if test="search != null and search != ''">
+                AND (su.phone_ LIKE CONCAT('%',#{search},'%') OR su.username_ LIKE CONCAT('%',#{search},'%') OR su.id_ LIKE CONCAT('%',#{search},'%'))
+            </if>
+            <if test="isActive != null and isActive == true">
+                and su.password_ is not null
+            </if>
+            <if test="isActive != null and isActive == false">
+                and su.password_ is null
+            </if>
+        </where>
+    </sql>
+    <select id="queryStudentHasCourse" resultType="java.util.Map">
+        SELECT cssp.user_id_ 'key',CASE WHEN COUNT(cssp.id_ AND cs.status_ != 'OVER') = 0 THEN 0 ELSE 1 END 'value'
+        FROM course_schedule_student_payment cssp
+        LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
+        <where>
+            <if test="userIds != null">
+                cssp.user_id_ IN
+                <foreach collection="userIds" open="(" close=")" separator="," item="item">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+        GROUP BY cssp.user_id_
+    </select>
+    <resultMap id="StudentHasCourseDtoMap" type="com.ym.mec.biz.dal.dto.StudentHasCourseDto">
+        <result property="userName" column="username_"/>
+        <result property="musicGroupName" column="music_group_name_"/>
+        <result property="vipGroupName" column="vip_group_name_"/>
+        <result property="organName" column="organ_name_"/>
+        <result property="userId" column="id_"/>
+    </resultMap>
+    <select id="queryHasCourseStudent" resultMap="StudentHasCourseDtoMap">
+        SELECT su.id_,GROUP_CONCAT(DISTINCT su.username_) username_,GROUP_CONCAT(DISTINCT mg.name_) music_group_name_,
+        GROUP_CONCAT(DISTINCT vg.name_) vip_group_name_,GROUP_CONCAT(DISTINCT o.name_) organ_name_ FROM sys_user su
+        LEFT JOIN course_schedule_student_payment cssp ON su.id_ = cssp.user_id_
+        LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
+        LEFT JOIN music_group mg ON cssp.music_group_id_ = mg.id_ AND cssp.group_type_ = 'MUSIC'
+        LEFT JOIN vip_group vg ON cssp.music_group_id_ = vg.id_ AND cssp.group_type_ = 'VIP'
+        LEFT JOIN organization o ON su.organ_id_ = o.id_
+        WHERE cs.status_ != 'OVER' AND su.password_ IS NULL AND su.user_type_ = 'STUDENT'
+        <if test="organId != null">
+            AND FIND_IN_SET(su.organ_id_,#{organId})
+        </if>
+        GROUP BY su.id_
+    </select>
+    <select id="getHasCourse" resultType="java.lang.Long">
+        SELECT COUNT(DISTINCT su.id_) FROM sys_user su
+        LEFT JOIN course_schedule_student_payment cssp ON cssp.user_id_ = su.id_
+        LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
+        WHERE cs.status_ != 'OVER' AND su.id_ = #{userId}
+    </select>
 
 </mapper>

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

@@ -13,6 +13,8 @@
         <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="expect_amount_" property="expectAmount"/>
         <result column="actual_amount_" property="actualAmount"/>
+        <result column="com_amount_" property="comAmount"/>
+        <result column="per_amount_" property="perAmount"/>
         <result column="balance_payment_amount_" property="balancePaymentAmount"/>
         <result column="trans_no_" property="transNo"/>
         <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
@@ -22,6 +24,7 @@
         <result column="payment_channel_" property="paymentChannel"/>
         <result column="payment_business_channel_" property="paymentBusinessChannel"/>
         <result column="payment_account_no_" property="paymentAccountNo"/>
+        <result column="mer_nos_" property="merNos"/>
         <result column="order_no_" property="orderNo"/>
         <result column="music_group_id_" property="musicGroupId"/>
         <result column="class_group_id_" property="classGroupId"/>
@@ -75,12 +78,12 @@
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.StudentPaymentOrder" useGeneratedKeys="true"
             keyColumn="id" keyProperty="id">
         INSERT INTO student_payment_order
-        (id_,group_type_,user_id_,type_,expect_amount_,actual_amount_,balance_payment_amount_,trans_no_,
+        (id_,group_type_,user_id_,type_,expect_amount_,actual_amount_,com_amount_,per_amount_,balance_payment_amount_,trans_no_,
         status_,memo_,create_time_,update_time_,payment_channel_,payment_business_channel_,
         payment_account_no_,order_no_,music_group_id_,class_group_id_)
         VALUES(#{id},#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
         #{userId},#{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-        #{expectAmount},#{actualAmount},#{balancePaymentAmount},#{transNo},
+        #{expectAmount},#{actualAmount},#{comAmount},#{perAmount},#{balancePaymentAmount},#{transNo},
         #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{memo},now(),now(),
         #{paymentChannel},#{paymentBusinessChannel},#{paymentAccountNo},#{orderNo},#{musicGroupId},#{classGroupId})
     </insert>
@@ -116,6 +119,9 @@
             <if test="paymentAccountNo != null">
                 payment_account_no_ = #{paymentAccountNo},
             </if>
+            <if test="merNos != null">
+                mer_nos_ = #{merNos},
+            </if>
             <if test="updateTime != null">
                 update_time_ = NOW(),
             </if>
@@ -128,6 +134,12 @@
             <if test="actualAmount != null">
                 actual_amount_ = #{actualAmount},
             </if>
+            <if test="comAmount != null">
+                com_amount_ = #{comAmount},
+            </if>
+            <if test="perAmount != null">
+                per_amount_ = #{perAmount},
+            </if>
             <if test="balancePaymentAmount != null">
                 balance_payment_amount_ = #{balancePaymentAmount},
             </if>
@@ -280,7 +292,7 @@
     <select id="findOrdersByStatus" resultMap="StudentPaymentOrder">
         SELECT * FROM student_payment_order
         WHERE status_=#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler} AND payment_channel_ =
-        #{paymentChannel}
+        #{paymentChannel} LIMIT 100
     </select>
 
     <!-- 查询支付中超时订单 -->
@@ -340,4 +352,10 @@
             #{item}
         </foreach>
     </select>
+
+    <select id="findFixOrder" resultMap="StudentPaymentOrder">
+        SELECT * FROM student_payment_order
+        WHERE status_=#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler} AND payment_channel_ =
+        #{paymentChannel} AND com_amount_ IS NULL LIMIT 100
+    </select>
 </mapper>

+ 16 - 8
mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml

@@ -268,7 +268,7 @@
     <select id="queryStudentDetailPage" resultMap="studentApplyDetail">
         SELECT sr.id_, sr.user_id_,su.username_ username_,sr.parents_name_,sr.current_class_,sr.current_grade_,
         su.gender_,sr.is_allow_adjust_, s.name_ subject_name_,ss.name_
-        actual_subject_name_,sr.parents_phone_,sr.payment_status_,sr.remark_,sr.actual_subject_id_
+        actual_subject_name_,su.phone_ parents_phone_,sr.payment_status_,sr.remark_,sr.actual_subject_id_
         FROM student_registration sr
         LEFT JOIN sys_user su ON sr.user_id_ = su.id_
         LEFT JOIN `subject` s ON sr.subject_id_ = s.id_
@@ -556,13 +556,21 @@
         <result property="perNum" column="per_num_"/>
     </resultMap>
     <select id="queryStudentPer" resultMap="StudentRegisterPerDtoMap">
-        SELECT o.`name_` organ_name_ ,a.n student_num_,ifnull(b.num,0) per_num_,ifnull(b.num,0)*100/a.n per_ FROM
-        (SELECT u.`organ_id_` ,count(u.id_) n from `sys_user` u WHERE u.`user_type_` = 'STUDENT' GROUP BY u.`organ_id_` ) a
-        left join
-        (select u.`organ_id_`,count(ifnull(u.id_,0)) num  from `sys_user` u WHERE u.`password_` IS NOT NULL and u.`user_type_` = 'STUDENT' GROUP BY u.`organ_id_` ) b
-        on a.organ_id_ = b.organ_id_ LEFT JOIN `organization` o on o.`id_` = a.organ_id_
-        WHERE o.del_flag_ != 1 AND o.id_ IS NOT NULL
-        ORDER BY per_num_ DESC
+        SELECT a.name_ organ_name_,a.num student_num_,b.num per_num_,ifnull(b.num,0)*100/a.num per_ FROM (
+        SELECT b.name_,COUNT(a.id_) num,b.id_ FROM sys_user a LEFT JOIN organization b on a.organ_id_=b.id_
+        WHERE a.id_ IN(
+        SELECT b.id_ FROM course_schedule_student_payment a LEFT JOIN sys_user b ON a.user_id_=b.id_ WHERE b.user_type_='STUDENT' GROUP BY a.user_id_,b.organ_id_ )
+        AND b.del_flag_ = 0
+        GROUP BY organ_id_) a
+        LEFT JOIN
+        (SELECT b.name_,COUNT(a.id_) num,b.id_ FROM sys_user a LEFT JOIN organization b on a.organ_id_=b.id_
+        WHERE a.id_ IN(
+        SELECT b.id_ FROM course_schedule_student_payment a LEFT JOIN sys_user b ON a.user_id_=b.id_ WHERE b.user_type_='STUDENT' AND password_ IS NOT NULL GROUP BY a.user_id_,b.organ_id_ )
+        AND b.del_flag_ = 0
+        GROUP BY organ_id_) b
+        ON a.id_=b.id_
+        WHERE a.name_ IS NOT NULL
+        ORDER BY per_ DESC
     </select>
 
     <update id="updateUser">

+ 25 - 8
mec-biz/src/main/resources/config/mybatis/SysAccountMapper.xml

@@ -11,6 +11,7 @@
         <result column="has_receipt_" jdbcType="DECIMAL" property="hasReceipt"/>
         <result column="channel_" jdbcType="VARCHAR" property="channel"/>
         <result column="type_" jdbcType="CHAR" property="type"/>
+        <result column="status_" jdbcType="TINYINT" property="status"/>
         <result column="version" jdbcType="INTEGER" property="version"/>
     </resultMap>
     <sql id="Base_Column_List">
@@ -22,6 +23,7 @@
             has_receipt_,
             channel_,
             type_,
+            status_,
             version
     </sql>
     <select id="get" parameterType="java.lang.Integer" resultMap="SysAccount">
@@ -62,6 +64,9 @@
             <if test="type != null">
                 type_,
             </if>
+            <if test="status != null">
+                status_,
+            </if>
             <if test="version != null">
                 version,
             </if>
@@ -88,6 +93,9 @@
             <if test="type != null">
                 #{type,jdbcType=CHAR},
             </if>
+            <if test="status != null">
+                #{status,jdbcType=TINYINT},
+            </if>
             <if test="version != null">
                 #{version,jdbcType=INTEGER},
             </if>
@@ -118,22 +126,31 @@
             <if test="type != null">
                 type_ = #{type,jdbcType=CHAR},
             </if>
+            <if test="status != null">
+                status_ = #{status,jdbcType=TINYINT},
+            </if>
             <if test="version != null">
                 version = version+1,
             </if>
         </set>
         where id_ = #{id,jdbcType=INTEGER} AND version =#{version}
     </update>
-    <!-- 获取一个私户账户 -->
-    <select id="getPerAccount" resultMap="SysAccount">
-        SELECT *
-        FROM sys_account
-        WHERE channel_ = 'YQPAY'
-          AND type_ = 'PER'
-    </select>
 
     <select id="getAccount" resultMap="SysAccount">
-        SELECT * FROM sys_account WHERE company_=#{company}
+        SELECT * FROM sys_account WHERE status_=1 AND company_=#{company}
+        <if test="channel != null">
+            AND channel_ = #{channel}
+        </if>
+        <if test="type != null">
+            AND FIND_IN_SET(type_,#{type})
+        </if>
+        <if test="amount != null">
+            <![CDATA[AND max_receipt_ < has_receipt_+ #{amount}]]>
+        </if>
+    </select>
+
+    <select id="getOneAccount" resultMap="SysAccount">
+        SELECT * FROM sys_account WHERE status_ =1 AND company_=#{company}
         <if test="channel != null">
             AND channel_ = #{channel}
         </if>

+ 12 - 0
mec-biz/src/main/resources/config/mybatis/SysUserCashAccountDetailMapper.xml

@@ -14,6 +14,8 @@
         <result column="trans_type_" property="transType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="amount_" property="amount"/>
+        <result column="com_amount_" property="comAmount"/>
+        <result column="per_amount_" property="perAmount"/>
         <result column="balance_" property="balance"/>
         <result column="description_" property="description"/>
         <result column="comment_" property="comment"/>
@@ -48,6 +50,8 @@
             <if test="transType!=null">trans_type_,</if>
             <if test="status!=null">status_,</if>
             <if test="amount!=null">amount_,</if>
+            <if test="comAmount!=null">com_amount_,</if>
+            <if test="perAmount!=null">per_amount_,</if>
             <if test="balance!=null">balance_,</if>
             <if test="description!=null">description_,</if>
             <if test="comment!=null">comment_,</if>
@@ -66,6 +70,8 @@
             <if test="transType!=null">#{transType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},</if>
             <if test="status!=null">#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},</if>
             <if test="amount!=null">#{amount},</if>
+            <if test="comAmount!=null">#{comAmount},</if>
+            <if test="perAmount!=null">#{perAmount},</if>
             <if test="balance!=null">#{balance},</if>
             <if test="description!=null">#{description},</if>
             <if test="comment!=null">#{comment},</if>
@@ -109,6 +115,12 @@
             <if test="amount != null">
                 amount_ = #{amount},
             </if>
+            <if test="comAmount != null">
+                com_amount_ = #{comAmount},
+            </if>
+            <if test="perAmount != null">
+                per_amount_ = #{perAmount},
+            </if>
             <if test="description != null">
                 description_ = #{description},
             </if>

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

@@ -250,7 +250,7 @@
         SELECT * FROM teacher WHERE certificate_num_ = #{certificateNum} LIMIT 1
     </select>
     <select id="queryGroupStudents" resultMap="com.ym.mec.biz.dal.dao.MusicGroupDao.BasicUserDto">
-        SELECT su.username_,su.id_ user_id_,su.avatar_ head_url_,su.gender_,s.name_ subject_name_
+        SELECT su.username_,su.id_ user_id_,su.avatar_ head_url_,su.gender_,s.name_ subject_name_,sr.music_group_id_
         FROM class_group_teacher_mapper cgtm
         LEFT JOIN class_group_student_mapper cgsm ON cgtm.class_group_id_ = cgsm.class_group_id_
         LEFT JOIN sys_user su ON cgsm.user_id_ = su.id_
@@ -260,7 +260,7 @@
         <if test="search != null">
             AND su.username_ LIKE CONCAT('%',#{search},'%')
         </if>
-        GROUP BY su.id_,s.id_
+        GROUP BY su.id_,s.id_,sr.id_
     </select>
     <select id="queryNameByIds" resultType="java.util.Map" parameterType="list">
         select id_ `key`,IF(real_name_ IS NUll,'',real_name_) `value` FROM sys_user s WHERE FIND_IN_SET(id_,#{userIds})

+ 64 - 9
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -3,6 +3,7 @@ package com.ym.mec.student.controller;
 import com.alibaba.fastjson.JSON;
 import com.huifu.adapay.model.payment.PayChannelEnum;
 import com.huifu.adapay.model.payment.Payment;
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
 import com.ym.mec.biz.dal.dto.VipBuyResultDto;
 import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.entity.MusicGroup;
@@ -51,6 +52,10 @@ public class StudentOrderController extends BaseController {
     private MusicGroupService musicGroupService;
     @Autowired
     private StudentPaymentOrderDetailService studentPaymentOrderDetailService;
+    @Autowired
+    private YqPayFeignService yqPayFeignService;
+    @Autowired
+    private StudentPaymentOrderDao studentPaymentOrderDao;
 
     @PostMapping("/notify")
     public Msg notify(@ModelAttribute Msg msg) throws Exception {
@@ -94,16 +99,16 @@ public class StudentOrderController extends BaseController {
             return failed("未找到指定订单");
         }
         HashMap<String, Object> orderDetail = new HashMap<>();
-        orderDetail.put("order",orderByOrderNo);
-        orderDetail.put("groupType",orderByOrderNo.getGroupType());
-        if(orderByOrderNo.getGroupType().equals(GroupType.MUSIC)){
+        orderDetail.put("order", orderByOrderNo);
+        orderDetail.put("groupType", orderByOrderNo.getGroupType());
+        if (orderByOrderNo.getGroupType().equals(GroupType.MUSIC)) {
             MusicGroup musicGroup = musicGroupService.get(orderByOrderNo.getMusicGroupId());
             List<Goods> goodsList = studentPaymentOrderDetailService.findApplyOrderGoods(orderByOrderNo.getId());
-            orderDetail.put("goods",goodsList);
-            orderDetail.put("course",musicGroup.getCourseForm());
-        }else if(orderByOrderNo.getGroupType().equals(GroupType.VIP)){
+            orderDetail.put("goods", goodsList);
+            orderDetail.put("course", musicGroup.getCourseForm());
+        } else if (orderByOrderNo.getGroupType().equals(GroupType.VIP)) {
             VipBuyResultDto vipBuyResultInfo = vipGroupService.findVipBuyResultInfo(Integer.valueOf(orderByOrderNo.getMusicGroupId()));
-            orderDetail.put("detail",vipBuyResultInfo);
+            orderDetail.put("detail", vipBuyResultInfo);
         }
 
         return succeed(orderDetail);
@@ -202,7 +207,7 @@ public class StudentOrderController extends BaseController {
 
     }
 
-//    @Scheduled(cron = "0/30 * * * * ?")
+    //    @Scheduled(cron = "0/30 * * * * ?")
     @GetMapping("/setSuccessStatus")
     public void setSuccessStatus() throws Exception {
         List<StudentPaymentOrder> payingOrders = studentPaymentOrderService.findOrdersByStatus(DealStatusEnum.ING, "YQPAY");
@@ -221,7 +226,7 @@ public class StudentOrderController extends BaseController {
             if (Arrays.asList(statusArr).contains(rpMap.get("tradeState"))) {
                 try {
                     studentPaymentOrderService.updateOrder(rpMap); //更新订单
-                }catch (Exception e){
+                } catch (Exception e) {
                     e.printStackTrace();
                     continue;
                 }
@@ -230,4 +235,54 @@ public class StudentOrderController extends BaseController {
 
     }
 
+    @GetMapping("/fixOrder")
+    private int fixOrder() throws Exception {
+        List<StudentPaymentOrder> payingOrders = studentPaymentOrderDao.findFixOrder(DealStatusEnum.SUCCESS, "YQPAY");
+
+        if (payingOrders.size() == 0) {
+            return 0;
+        }
+        String merOrderNos = payingOrders.stream().map(StudentPaymentOrder::getOrderNo).collect(Collectors.joining(","));
+
+        String notifyUrl = ""; //回调地址
+        Map<String, Object> resultMap = new LinkedHashMap<>();
+        resultMap.put("merOrderNoList", merOrderNos);
+        Map<String, Object> requestMap = YqPayUtil.getRequestMap(notifyUrl, resultMap);
+
+        RsqMsg rsqMsg = new RsqMsg(requestMap);
+
+        Msg queryRs = yqPayFeignService.orderQuery(rsqMsg);
+
+        if (queryRs.getCode().equals("88")) {
+            String responseParameters = queryRs.getResponseParameters();
+            List<Map<String, Object>> responseList = JSON.parseObject(responseParameters, List.class);
+            for (Map<String, Object> response : responseList) {
+                String type = "per";
+                String orderNo = (String) response.get("merOrderNo");
+                String tempRoutingResultList = response.get("tempRoutingResultList").toString();
+                System.out.println(tempRoutingResultList);
+
+                if (tempRoutingResultList.contains("武汉大雅乐盟教育咨询有限公司")) {
+                    type = "com";
+                }
+                fixUpdateOrder(orderNo,type);
+            }
+        }
+        return payingOrders.size();
+    }
+
+    void fixUpdateOrder(String orderNo,String type) {
+        StudentPaymentOrder order = studentPaymentOrderService.findOrderByOrderNo(orderNo);
+        if(type.equals("com")){
+            order.setComAmount(order.getActualAmount());
+            order.setPerAmount(BigDecimal.ZERO);
+            order.setMerNos("0023115");
+        }else {
+            order.setComAmount(BigDecimal.ZERO);
+            order.setPerAmount(order.getActualAmount());
+            order.setMerNos("0031215");
+        }
+        studentPaymentOrderService.update(order);
+    }
+
 }

+ 0 - 43
mec-teacher/src/main/java/com/ym/mec/teacher/controller/SysMessageController.java

@@ -86,49 +86,6 @@ public class SysMessageController extends BaseController {
 		}
 		return succeed(map);
 	}
-/*
-	@ApiOperation(value = "发送短信验证码")
-	@PostMapping("/sendSmsCode")
-	public Object sendSmsCode(String sendCodeType, String mobileNo) {
-
-		SysUser sysUser;
-
-		if (StringUtils.isBlank(mobileNo)) {
-			sysUser = sysUserFeignService.queryUserInfo();
-		} else {
-			sysUser = sysUserFeignService.queryUserByMobile(mobileNo);
-		}
-		if (sysUser == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
-		Integer userId = sysUser.getId();
-
-		mobileNo = sysUser.getPhone();
-
-		MessageType messageType = MessageType.getMessageType(sendCodeType);
-		if (messageType == null) {
-			throw new BizException("消息类型参数错误");
-		}
-		if (StringUtils.isBlank(mobileNo) || !CommonValidator.isMobileNo(mobileNo)) {
-			throw new BizException("请输入正确的手机号");
-		}
-		sysMessageService.sendSecurityCode(MessageSender.YIMEI, userId, MessageSendMode.SMS, messageType, mobileNo);
-		return succeed();
-	}
-
-	@ApiOperation(value = "发送短信验证码")
-	@PostMapping("/noAuth/sendSmsCode")
-	public Object noAuthSendSmsCode(String sendCodeType, String mobileNo) {
-		MessageType messageType = MessageType.getMessageType(sendCodeType);
-		if (messageType == null) {
-			throw new BizException("消息类型参数错误");
-		}
-		if (StringUtils.isBlank(mobileNo) || !CommonValidator.isMobileNo(mobileNo)) {
-			throw new BizException("请输入正确的手机号");
-		}
-//		sysMessageService.sendSecurityCode(MessageSender.YIMEI, userId, MessageSendMode.SMS, messageType, mobileNo);
-		return succeed();
-	}*/
 
 	@ApiOperation(value = "发送消息")
 	@PostMapping("/sendMessage")

+ 36 - 2
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yqpay/YqPayUtil.java

@@ -15,7 +15,7 @@ public class YqPayUtil {
 
     public static Map<String, Object> getRequestMap(String notifyUrl, Map<String, Object> resultMap) throws Exception {
         Map<String, Object> rqMap = new LinkedHashMap<>();
-        rqMap.put("merNo",merNo);
+        rqMap.put("merNo", merNo);
         rqMap.put("version", version);
         rqMap.put("notifyUrl", notifyUrl);
         rqMap.put("timestamp", DateUtils.getDateTime());
@@ -40,7 +40,7 @@ public class YqPayUtil {
      * @return
      * @throws Exception
      */
-    public static Map<String, Object> getPayMap(BigDecimal amount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody,String sellerNo, String routingMerNo) throws Exception {
+    public static Map<String, Object> getPayMap(BigDecimal amount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody, String sellerNo, String routingMerNo) throws Exception {
         List<Map> tempRoutingList = new ArrayList();
         Map<String, Object> routingList = new HashMap<>();
         routingList.put("routingMerNo", routingMerNo);//分佣账户
@@ -66,6 +66,40 @@ public class YqPayUtil {
     }
 
     /**
+     * 获取支付Map
+     *
+     * @param amount
+     * @param orderNo
+     * @param notifyUrl
+     * @param returnUrl
+     * @param orderSubject
+     * @param orderBody
+     * @param sellerNo
+     * @param tempRoutingList
+     * @return
+     * @throws Exception
+     */
+    public static Map<String, Object> getPayMap(BigDecimal amount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody, String sellerNo, List<Map> tempRoutingList) throws Exception {
+        Map<String, Object> contentMap = new LinkedHashMap<>();
+        contentMap.put("sellerNo", sellerNo); //收款商户号
+        contentMap.put("payChannels", payChannels); //支付方式
+        contentMap.put("orderBody", orderBody); //订单信息
+        contentMap.put("payAmount", amount); //支付金额
+        contentMap.put("apiPayType", "1"); //*API支付类型1-即时支付,2-担保支付,3-预授权支付*/
+        contentMap.put("tradeType", "0"); //*交易类型1—充值,0—收款*
+        contentMap.put("merMerOrderNo", orderNo); //商户订单号
+        contentMap.put("orderSubject", orderSubject); //订单标题
+        contentMap.put("returnUrl", returnUrl); //前台页面地址
+        if (tempRoutingList != null) {
+            contentMap.put("tempRoutingList", JSON.toJSONString(tempRoutingList));//分账设置
+        }
+        Map<String, Object> payMap = getRequestMap(notifyUrl, contentMap);
+        payMap.put("host", payUrl);
+        return payMap;
+    }
+
+
+    /**
      * 验签
      *
      * @param rsMap

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

@@ -140,13 +140,20 @@ public class ClassGroupController extends BaseController {
         return succeed(classGroupService.queryMusicGroupClassGroup(queryInfo));
     }
 
-    @ApiOperation(value = "乐团详情--课表详情列表(课酬调整共用)")
+    @ApiOperation(value = "乐团详情--课酬调整列表(课酬调整)")
     @GetMapping("/queryMusicGroupCourseSchedule")
     @PreAuthorize("@pcs.hasPermissions('classGroup/queryMusicGroupCourseSchedule')")
     public HttpResponseResult queryMusicGroupCourseSchedule(queryMusicGroupCourseScheduleQueryInfo queryInfo) {
         return succeed(classGroupService.queryMusicGroupCourseSchedule(queryInfo));
     }
 
+    @ApiOperation(value = "乐团详情--课表详情列表(课表详情)")
+    @GetMapping("/queryMusicGroupCourseScheduleDetail")
+    @PreAuthorize("@pcs.hasPermissions('classGroup/queryMusicGroupCourseScheduleDetail')")
+    public HttpResponseResult queryMusicGroupCourseScheduleDetail(queryMusicGroupCourseScheduleQueryInfo queryInfo) {
+        return succeed(classGroupService.queryMusicGroupCourseScheduleDetail(queryInfo));
+    }
+
     @ApiOperation(value = "乐团班级老师设置")
     @PostMapping("/addClassGroupTeacher")
     @ApiParam(value = "乐团班级老师json", required = true)

+ 32 - 0
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -1,12 +1,16 @@
 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.dto.StudentApplyDetailDto;
+import com.ym.mec.biz.dal.dto.StudentHasCourseDto;
 import com.ym.mec.biz.dal.dto.TeacherSalaryDto;
 import com.ym.mec.biz.dal.dto.musicalListDetailDto;
 import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.page.CourseScheduleTeacherSalaryQueryInfo;
 import com.ym.mec.biz.dal.page.StudentRegistrationQueryInfo;
 import com.ym.mec.biz.service.CourseScheduleTeacherSalaryService;
+import com.ym.mec.biz.service.StudentManageService;
 import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
 import com.ym.mec.biz.service.StudentRegistrationService;
 import com.ym.mec.common.controller.BaseController;
@@ -21,6 +25,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+
 import javax.servlet.http.HttpServletResponse;
 import java.util.Date;
 import java.util.List;
@@ -33,9 +38,36 @@ public class ExportController extends BaseController {
     @Autowired
     private StudentRegistrationService studentRegistrationService;
     @Autowired
+    private StudentManageService studentManageService;
+    @Autowired
     private StudentPaymentOrderDetailService studentPaymentOrderDetailService;
     @Autowired
     private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiOperation(value = "导出学员是否有课")
+    @PostMapping("export/studentHasCourse")
+    @PreAuthorize("@pcs.hasPermissions('export/studentHasCourse')")
+    public void studentHasCourse(HttpServletResponse response){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(sysUser == null){
+            throw new BizException("获取用户信息失败");
+        }
+        List<StudentHasCourseDto> hasCourseDtos =  studentManageService.queryHasCourseStudent(sysUser.getOrganId());
+        try {
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[] {"学员编号", "姓名","分部","所在乐团","所在vip课"}, new String[] {
+                    "userId","userName","organName","musicGroupName","vipGroupName"}, hasCourseDtos);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            workbook.write(response.getOutputStream());
+            workbook.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
 
     @ApiOperation(value = "导出乐器采购清单")
     @PostMapping("order/musicalListExport")

+ 97 - 16
mec-web/src/main/java/com/ym/mec/web/controller/StudentPaymentOrderController.java

@@ -3,11 +3,14 @@ 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.dao.EmployeeDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
 import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
 import com.ym.mec.biz.service.StudentPaymentOrderService;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.page.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -20,6 +23,7 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.math.BigDecimal;
 import java.util.Arrays;
 import java.util.List;
 
@@ -28,12 +32,6 @@ import java.util.List;
 @RestController
 public class StudentPaymentOrderController extends BaseController {
 
-    @Value("${payment.hiddenMode}")
-    private Boolean hiddenMode;
-
-    @Value("${payment.channel}")
-    private String channel;
-
     @Autowired
     private StudentPaymentOrderService studentPaymentOrderService;
     @Autowired
@@ -42,39 +40,122 @@ public class StudentPaymentOrderController extends BaseController {
     private SysUserFeignService sysUserFeignService;
     @Autowired
     private EmployeeDao employeeDao;
+    @Autowired
+    private SysConfigDao sysConfigDao;
 
     @ApiOperation(value = "获取订单列表")
     @GetMapping("/queryPage")
     @PreAuthorize("@pcs.hasPermissions('order/queryPage')")
-    public Object queryOrderPage(StudentPaymentOrderQueryInfo queryInfo){
+    public Object queryOrderPage(StudentPaymentOrderQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        if (!sysUser.getIsSuperAdmin()) {
+            Employee employee = employeeDao.get(sysUser.getId());
+            if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+                queryInfo.setOrganId(employee.getOrganIdList());
+            } else if (StringUtils.isEmpty(employee.getOrganIdList())) {
+                return failed("用户所在分部异常");
+            } else {
+                List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+                if (!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))) {
+                    return failed("非法请求");
+                }
+            }
+        }
+
+        PageInfo<StudentPaymentOrder> studentPaymentOrderPageInfo = studentPaymentOrderService.queryPage(queryInfo);
+
+        int openHideMode = Integer.parseInt(sysConfigDao.findConfigValue("open_hide_mode"));
+        if (openHideMode == 1) {
+            for (StudentPaymentOrder row : studentPaymentOrderPageInfo.getRows()) {
+                if (row.getComAmount() != null) {
+                    BigDecimal balancePaymentAmount = row.getBalancePaymentAmount() == null ? BigDecimal.ZERO : row.getBalancePaymentAmount();
+                    BigDecimal comAmount = row.getComAmount() == null ? BigDecimal.ZERO : row.getComAmount();
+                    row.setExpectAmount(comAmount.add(balancePaymentAmount));
+                    row.setActualAmount(comAmount.add(balancePaymentAmount));
+                }
+            }
+        }
+        return succeed(studentPaymentOrderPageInfo);
+    }
+
+    @ApiOperation(value = "获取订单列表1")
+    @GetMapping("/queryPage1")
+    @PreAuthorize("@pcs.hasPermissions('order/queryPage1')")
+    public Object queryOrderPage1(StudentPaymentOrderQueryInfo queryInfo) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             return failed("用户信息获取失败");
         }
-        if(!sysUser.getIsSuperAdmin()){
+        if (!sysUser.getIsSuperAdmin()) {
             Employee employee = employeeDao.get(sysUser.getId());
             if (StringUtils.isEmpty(queryInfo.getOrganId())) {
                 queryInfo.setOrganId(employee.getOrganIdList());
-            }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+            } else if (StringUtils.isEmpty(employee.getOrganIdList())) {
                 return failed("用户所在分部异常");
-            }else {
+            } else {
                 List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
-                if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
+                if (!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))) {
                     return failed("非法请求");
                 }
             }
         }
-        if(hiddenMode){
-            queryInfo.setPaymentChannel(channel);
+
+        PageInfo<StudentPaymentOrder> studentPaymentOrderPageInfo = studentPaymentOrderService.queryPage(queryInfo);
+
+        for (StudentPaymentOrder row : studentPaymentOrderPageInfo.getRows()) {
+            BigDecimal balancePaymentAmount = row.getBalancePaymentAmount() == null ? BigDecimal.ZERO : row.getBalancePaymentAmount();
+            BigDecimal comAmount = row.getComAmount() == null ? BigDecimal.ZERO : row.getComAmount();
+            if (row.getComAmount() != null) {
+                row.setExpectAmount(comAmount.add(balancePaymentAmount));
+                row.setActualAmount(comAmount.add(balancePaymentAmount));
+            }
+        }
+        return succeed(studentPaymentOrderPageInfo);
+    }
+
+    @ApiOperation(value = "获取订单列表2")
+    @GetMapping("/queryPage2")
+    @PreAuthorize("@pcs.hasPermissions('order/queryPage2')")
+    public Object queryOrderPage2(StudentPaymentOrderQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        if (!sysUser.getIsSuperAdmin()) {
+            Employee employee = employeeDao.get(sysUser.getId());
+            if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+                queryInfo.setOrganId(employee.getOrganIdList());
+            } else if (StringUtils.isEmpty(employee.getOrganIdList())) {
+                return failed("用户所在分部异常");
+            } else {
+                List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+                if (!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))) {
+                    return failed("非法请求");
+                }
+            }
+        }
+
+        PageInfo<StudentPaymentOrder> studentPaymentOrderPageInfo = studentPaymentOrderService.queryPage(queryInfo);
+
+        for (StudentPaymentOrder row : studentPaymentOrderPageInfo.getRows()) {
+            BigDecimal balancePaymentAmount = row.getBalancePaymentAmount() == null ? BigDecimal.ZERO : row.getBalancePaymentAmount();
+            BigDecimal perAmount = row.getPerAmount() == null ? BigDecimal.ZERO : row.getPerAmount();
+            if (row.getPerAmount() != null) {
+                row.setExpectAmount(perAmount.add(balancePaymentAmount));
+                row.setActualAmount(perAmount.add(balancePaymentAmount));
+            }
         }
-        return succeed(studentPaymentOrderService.queryPage(queryInfo));
+        return succeed(studentPaymentOrderPageInfo);
     }
 
     @ApiOperation(value = "获取乐器采购清单")
     @GetMapping("/getMusicalList")
     @PreAuthorize("@pcs.hasPermissions('order/getMusicalList')")
     @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团id", required = true, dataType = "String")})
-    public Object getMusicalList(String musicGroupId){
+    public Object getMusicalList(String musicGroupId) {
         return succeed(studentPaymentOrderDetailService.getMusicalList(musicGroupId));
     }
 
@@ -82,7 +163,7 @@ public class StudentPaymentOrderController extends BaseController {
     @GetMapping("/verifyMusicalList")
     @PreAuthorize("@pcs.hasPermissions('order/verifyMusicalList')")
     @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团id", required = true, dataType = "String")})
-    public Object verifyMusicalListMusicalList(String musicGroupId){
+    public Object verifyMusicalListMusicalList(String musicGroupId) {
         return succeed(studentPaymentOrderDetailService.verifyMusicalList(musicGroupId));
     }
 

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

@@ -33,7 +33,7 @@ public class SysPaymentConfigController extends BaseController {
         }
         Date nowDate = new Date();
         sysPaymentConfig.setCreateTime(nowDate);
-        sysPaymentConfig.setCreateTime(nowDate);
+        sysPaymentConfig.setUpdateTime(nowDate);
         return succeed(sysPaymentConfigService.insert(sysPaymentConfig));
     }
 

+ 17 - 12
mec-web/src/main/java/com/ym/mec/web/controller/SysUserCashAccountDetailController.java

@@ -2,11 +2,14 @@ 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.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.CashAccountDetail;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
 import com.ym.mec.biz.service.SysUserCashAccountDetailService;
 import com.ym.mec.common.controller.BaseController;
 
+import com.ym.mec.common.page.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 
@@ -18,22 +21,18 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.math.BigDecimal;
+
 @RequestMapping("userCashAccountDetail")
 @Api(tags = "用户交易明细服务")
 @RestController
 public class SysUserCashAccountDetailController extends BaseController {
-
-    @Value("${payment.hiddenMode}")
-    private Boolean hiddenMode;
-
-    @Value("${payment.channel}")
-    private String channel;
-
-
     @Autowired
     private SysUserCashAccountDetailService sysUserCashAccountDetailService;
     @Autowired
     private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private SysConfigDao sysConfigDao;
 
     @ApiOperation(value = "新增用户交易明细")
     @PostMapping("/add")
@@ -51,11 +50,17 @@ public class SysUserCashAccountDetailController extends BaseController {
         if (user == null && user.getId() != null) {
             return failed("请重新登录");
         }
-        if (hiddenMode){
-            queryInfo.setChannel(channel);
-        }
         queryInfo.setUserId(user.getId());
-        return succeed(sysUserCashAccountDetailService.queryPage(queryInfo));
+        PageInfo<SysUserCashAccountDetail> sysUserCashAccountDetailPageInfo = sysUserCashAccountDetailService.queryPage(queryInfo);
+
+        int openHideMode = Integer.parseInt(sysConfigDao.findConfigValue("open_hide_mode"));
+        if(openHideMode == 1){
+            for (SysUserCashAccountDetail row : sysUserCashAccountDetailPageInfo.getRows()) {
+                BigDecimal comAmount = row.getComAmount() == null ? BigDecimal.ZERO : row.getComAmount();
+                row.setAmount(comAmount.add(comAmount));
+            }
+        }
+        return succeed(sysUserCashAccountDetailPageInfo);
     }
 
 }

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

@@ -1,5 +1,6 @@
 package com.ym.mec.web.controller;
 
+import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.page.TeacherCloseQueryInfo;
 import com.ym.mec.biz.service.TeacherAttendanceService;
 import com.ym.mec.common.controller.BaseController;