Browse Source

平衡关系导出

zouxuan 10 months ago
parent
commit
ce8435c142
21 changed files with 525 additions and 88 deletions
  1. 9 0
      mec-application/src/main/java/com/ym/mec/web/controller/TaskController.java
  2. 19 7
      mec-application/src/main/resources/exportColumnMapper.ini
  3. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ExportDao.java
  4. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java
  5. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/OperatingReportNewDao.java
  6. 147 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExportWrapper.java
  7. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupPaymentStudentCourseDetailLog.java
  8. 6 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportEnum.java
  9. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportTypeEnum.java
  10. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java
  11. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/OperatingReportNewService.java
  12. 11 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java
  13. 41 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
  14. 157 73
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  15. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OperatingReportNewServiceImpl.java
  16. 24 0
      mec-biz/src/main/resources/config/mybatis/ExportMapper.xml
  17. 25 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  18. 13 0
      mec-biz/src/main/resources/config/mybatis/OperatingReportNewMapper.xml
  19. 4 0
      mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java
  20. 4 0
      mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java
  21. 20 0
      mec-task/src/main/java/com/ym/mec/task/jobs/BalancedRelationshipTask.java

+ 9 - 0
mec-application/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -155,6 +155,15 @@ public class TaskController extends BaseController {
 		studentTeacherMapperService.init();
 	}
 
+	//每月平衡关系
+	@GetMapping(value = "/balancedRelationship")
+	public void balancedRelationship(String month){
+		if(month == null){
+			month = DateUtil.dateToString(DateUtil.getFirstDayOfMonth(new Date()),DateUtil.ISO_YEAR_MONTH_FORMAT);
+		}
+		operatingReportNewService.balancedRelationship(month);
+	}
+
 	//每月经营报表
 	@GetMapping(value = "/operatingReportMonth")
 	public void operatingReportMonth(){

+ 19 - 7
mec-application/src/main/resources/exportColumnMapper.ini

@@ -26,10 +26,6 @@ fieldColumns = ["organName","userId", "username", "phone", "subjectName", "type.
 headColumns = ["分部", "学员编号", "姓名", "电话", "声部","交易类型", "交易金额", "交易时间", "备注","可用余额"]
 fieldColumns = ["organName", "userId", "username", "phone", "subjectName", "type.msg", "amount", "createTime", "comment","balance"]
 
-[班级列表导出]
-headColumns = ["课程组编号", "课程组名称", "分部名称", "班级名称","班级类型", "班级人数", "主教老师", "助教老师", "已上课时", "总课数"]
-fieldColumns = ["musicGroupId", "musicGroupName", "organName", "name", "type.msg", "studentNum == NUll?0:studentNum", "bishopTeacherName", "teachingTeacherName", "currentClassTimes", "totalClassTimes"]
-
 [商品列表导出]
 headColumns = ["商品编号", "货号", "品牌", "商品名称","是否组合商品", "商品类型", "商品分类", "具体型号", "内部库存", "税务库存", "库存类型", "市场价(元)","零售价(元)", "商品团购价(元)", "商品描述", "商品详情", "是否上下架"]
 fieldColumns = ["id", "sn", "brand", "name", "complementGoodsIdList == null || complementGoodsIdList == '' ? '否':'是'", "type.desc", "goodsCategoryName", "specification", "stockCount", "taxStockCount", "stockType.msg", "marketPrice", "discountPrice", "groupPurchasePrice", "brief", "desc", "status.msg"]
@@ -374,11 +370,15 @@ fieldColumns = ["organName","musicGroupName","musicGroupId","studentId","student
 headColumns = ["分部","学员编号","学员姓名","手机号","学员声部","云教练类型","数量","缴费金额(元)","状态","取消原因","操作人","操作时间","获得资格时间"]
 fieldColumns = ["organName","studentId","name","phone","subjectName","type.msg","time","amount","status == 1 ? '待激活':'已取消'","cancelReason","operatorName","operateTime","createTime"]
 
-[平衡关系-乐团课1]
+[平衡关系-乐团课]
 headColumns = ["分部","乐团名称","乐团编号","班级名称","班级类型","班级编号","课程类型","期初预收款","期初剩余课次","期初课酬","期初被合并课预收款","期初被合并课剩余课次","期初被合并课课酬","当月新增预收","当月新增课酬","当月新增课次","当月被合并新增预收","当月被合并新增课酬","当月被合并新增课次","当月课耗收入","当月消耗课酬","当月消耗课次","当月被合并课耗收入","当月被合并消耗课酬","当月被合并消耗课次","期末预收款","期末剩余课次","期末课酬","期末被合并课预收款","期末被合并课剩余课次","期末被合并课课酬"]
 fieldColumns = ["organName","musicGroupName","musicGroupId","className","classType","classId","courseType","firstMonthPreAmount","firstMonthSubCourseNum","firstMonthCourseSalary","firstMonthPreMergeAmount","firstMonthSubMergeCourseNum","firstMonthMergeCourseSalary","currentMonthAddCourseAmount","currentMonthAddReward","currentMonthAdd","currentMonthAddMergeCourseAmount","currentMonthMergedAddReward","currentMonthMergedAdd","currentMonthCourseAmount","currentMonthConsumeReward","currentMonthConsume","currentMonthMergeCourseAmount","currentMonthMergedConsumeReward","currentMonthMergedConsume","lastMonthPreAmount","lastMonthSubCourseNum","lastMonthCourseSalary","lastMonthPreMergeAmount","lastMonthSubMergeCourseNum","lastMonthMergeCourseSalary"]
 
-[平衡关系-乐团课]
+[平衡关系-乐团课汇总]
+headColumns = ["期初预收款","期初剩余课次","期初课酬","当月新增预收","当月新增课酬","当月新增课次","当月课耗收入","当月消耗课酬","当月消耗课次","期末预收款","期末剩余课次","期末课酬"]
+fieldColumns = ["firstMonthPreAmount","firstMonthSubCourseNum","firstMonthCourseSalary","currentMonthAddCourseAmount","currentMonthAddReward","currentMonthAdd","currentMonthCourseAmount","currentMonthConsumeReward","currentMonthConsume","lastMonthPreAmount","lastMonthSubCourseNum","lastMonthCourseSalary"]
+
+[平衡关系-乐团课1]
 headColumns = ["分部","乐团名称","乐团编号","班级名称","班级类型","班级编号","课程类型","剩余课次","剩余课次课酬","剩余被合并课次","剩余被合并课次课酬","已上课次","已上课次课酬","已上被合并课次","已上被合并课次课酬","当月新增","当月新增课酬","当月被合并新增","当月被合并新增课酬","当月消耗","当月消耗课酬","当月被合并消耗","当月被合并消耗课酬"]
 fieldColumns = ["organName","musicGroupName","musicGroupId","className","classType","classId","courseType","surplusCourse","surplusCourseReward","surplusMergedCourse","surplusMergedCourseReward","alreadyCourse","alreadyCourseReward","alreadyMergedCourse","alreadyMergedCourseReward","currentMonthAdd","currentMonthAddReward","currentMonthMergedAdd","currentMonthMergedAddReward","currentMonthConsume","currentMonthConsumeReward","currentMonthMergedConsume","currentMonthMergedConsumeReward"]
 
@@ -418,6 +418,18 @@ fieldColumns = ["teacherName","memberNum","noPlayNum","playTimeLess10","playTime
 headColumns = ["分部","乐团名称","乐团编号","班级名称","班级类型","班级编号","课程类型","剩余可排课时长","总预收","总课酬"]
 fieldColumns = ["organName","musicGroupName","musicGroupId","className","classType","classId","courseType","subCourseMinutes","totalCoursePrice","totalCourseSalary"]
 
+[平衡关系-已分班未排课汇总]
+headColumns = ["期初剩余可排课时长", "期初总预收", "期初总课酬", "期末剩余可排课时长", "期末总预收", "期末总课酬", "当月新增剩余可排课时长", "当月新增总预收", "当月新增总课酬", "当月消耗可排课时长", "当月消耗总预收", "当月消耗总课酬"]
+fieldColumns = ["firstSubCourseMinutes", "firstTotalCoursePrice", "firstTotalCourseSalary", "lastSubCourseMinutes", "lastTotalCoursePrice", "lastTotalCourseSalary", "currentSubCourseMinutes", "currentTotalCoursePrice", "currentTotalCourseSalary", "currentConsumeCourseMinutes", "currentConsumeCoursePrice", "currentConsumeCourseSalary"]
+
 [平衡关系-VIP剩余课时及金额明细]
 headColumns = ["分部","学校","学生编号","学生姓名","课程类型","期初预收款(已排)","期初预收款(未排)","期初剩余课次(已排)","期初剩余课次(未排)","期初课酬成本(已排)","期初课酬成本(未排)","当月现金收款","当月余额收款","当月新增课次","当月新增课酬(已排)","当月新增课酬(未排)","当月消耗课次","当月课酬","当月课耗总收入","期末预收款(已排)","期末预收款(未排)","期末余额(已排)","期末余额(未排)","期末课酬(已排)","期末课酬(未排)"]
-fieldColumns = ["organName","coopName","userId","username","courseType","firstMonthPreCourseAmount","firstMonthPreNoCourseAmount","firstMonthSubCourseNum","firstMonthSubNoCourseNum","firstMonthCourseSalary","firstMonthNoCourseSalary","currentMonthActualAmount","currentMonthBalanceAmount","currentMonthAddCourseNum","currentMonthAddCourseSalary","currentMonthAddNoCourseSalary","currentMonthConsumeCourseNum","currentMonthCourseSalary","currentMonthCourseAmount","lastMonthPreCourseAmount","lastMonthPreNoCourseAmount","lastMonthSubCourseNum","lastMonthSubNoCourseNum","lastMonthCourseSalary","lastMonthNoCourseSalary"]
+fieldColumns = ["organName","coopName","userId","username","courseType","firstMonthPreCourseAmount","firstMonthPreNoCourseAmount","firstMonthSubCourseNum","firstMonthSubNoCourseNum","firstMonthCourseSalary","firstMonthNoCourseSalary","currentMonthActualAmount","currentMonthBalanceAmount","currentMonthAddCourseNum","currentMonthAddCourseSalary","currentMonthAddNoCourseSalary","currentMonthConsumeCourseNum","currentMonthCourseSalary","currentMonthCourseAmount","lastMonthPreCourseAmount","lastMonthPreNoCourseAmount","lastMonthSubCourseNum","lastMonthSubNoCourseNum","lastMonthCourseSalary","lastMonthNoCourseSalary"]
+
+[平衡关系-VIP剩余课时及金额汇总]
+headColumns = ["期初预收款(已排)","期初预收款(未排)","期初剩余课次(已排)","期初剩余课次(未排)","期初课酬成本(已排)","期初课酬成本(未排)","当月现金收款","当月余额收款","当月新增课次","当月新增课酬(已排)","当月新增课酬(未排)","当月消耗课次","当月课酬","当月课耗总收入","期末预收款(已排)","期末预收款(未排)","期末余额(已排)","期末余额(未排)","期末课酬(已排)","期末课酬(未排)"]
+fieldColumns = ["firstMonthPreCourseAmount","firstMonthPreNoCourseAmount","firstMonthSubCourseNum","firstMonthSubNoCourseNum","firstMonthCourseSalary","firstMonthNoCourseSalary","currentMonthActualAmount","currentMonthBalanceAmount","currentMonthAddCourseNum","currentMonthAddCourseSalary","currentMonthAddNoCourseSalary","currentMonthConsumeCourseNum","currentMonthCourseSalary","currentMonthCourseAmount","lastMonthPreCourseAmount","lastMonthPreNoCourseAmount","lastMonthSubCourseNum","lastMonthSubNoCourseNum","lastMonthCourseSalary","lastMonthNoCourseSalary"]
+
+[平衡关系-云教练汇总]
+headColumns = ["期初预收款(已激活)", "期初预收款(待激活)", "期初激活人数", "期初待激活人数", "当月新增预收款(当月购买)", "当月新增人数(当月购买)", "当月续费预收款", "当月续费人数", "当月减少人数(到期)", "当月消耗的云教练金额", "当月退费人数", "当月退费金额", "当月激活人数", "期末预收款(已激活)", "期末预收款(待激活)", "期末激活人数", "期末待激活人数"]
+fieldColumns = ["firstMonthPreAmount", "firstMonthPreWaitAmount", "firstMonthActiveNum", "firstMonthWaitActiveNum", "currentMonthAddPreAmount", "currentMonthAddNum", "currentMonthRenewPreAmount", "currentMonthRenewNum", "currentMonthCutNum", "currentMonthAmount", "currentMonthReturnNum", "currentMonthReturnAmount", "currentMonthActiveNum", "lastMonthPreAmount", "lastMonthPreWaitAmount", "lastMonthActiveNum", "lastMonthWaitActiveNum"]

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

@@ -42,4 +42,6 @@ public interface ExportDao {
     List<ExportWrapper.ExportBalancedRelationshipVipSubCourseDetail> exportBalancedRelationshipVipSubCourseDetail(@Param("month") String month, @Param("organIds") String organIds);
 
     List<ExportWrapper.ExportBalancedRelationshipVipSubCourseDetail> exportBalancedRelationshipVipSubCourseSum(@Param("month") String month);
+
+    List<ExportWrapper.ExportBalancedRelationshipCloudSum> exportBalancedRelationshipCloudSum(@Param("month") String month);
 }

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

@@ -548,4 +548,9 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
     List<String> getDelImGroupId();
 
     List<ExportWrapper.ExportBalancedRelationshipMusicNoCourse> exportBalancedRelationshipMusicNoCourse(@Param("month") String month,@Param("organIds") String organIds);
+
+    BigDecimal exportBalancedRelationshipMusicNoClassNoCourseSum(@Param("month") String month);
+
+    //平衡关系-乐团课
+    ExportWrapper.ExportBalancedRelationshipMusicCourseSum exportBalancedRelationshipMusicCourseSum(@Param("month") String month);
 }

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

@@ -118,4 +118,8 @@ public interface OperatingReportNewDao extends BaseDAO<Integer, OperatingReportN
 
     //oa费用明细
     List<FinancialExpenditure> queryOASummaryExpensesDetail(@Param("month") String month);
+
+    void firstBalancedRelationship(@Param("month") String month);
+
+    void lastBalancedRelationship(@Param("lastMonth") String lastMonth);
 }

+ 147 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExportWrapper.java

@@ -352,6 +352,102 @@ public class ExportWrapper {
         @ApiModelProperty("期末被合并课课酬")
         private String lastMonthMergeCourseSalary;
     }
+    @Data
+    @ApiModel("平衡关系-乐团课汇总")
+    public static class ExportBalancedRelationshipMusicCourseSum {
+
+        @ApiModelProperty("期初预收款")
+        private BigDecimal firstMonthPreAmount;
+
+        @ApiModelProperty("期初剩余课次")
+        private Integer firstMonthSubCourseNum;
+
+        @ApiModelProperty("期初课酬")
+        private BigDecimal firstMonthCourseSalary;
+
+        @ApiModelProperty("当月新增")
+        private Integer currentMonthAdd;
+
+        @ApiModelProperty("当月新增预收")
+        private BigDecimal currentMonthAddCourseAmount;
+
+        @ApiModelProperty("当月新增课酬")
+        private BigDecimal currentMonthAddReward;
+
+        @ApiModelProperty("当月消耗")
+        private Integer currentMonthConsume;
+
+        @ApiModelProperty("当月课耗收入")
+        private BigDecimal currentMonthCourseAmount;
+
+        @ApiModelProperty("当月消耗课酬")
+        private BigDecimal currentMonthConsumeReward;
+
+        @ApiModelProperty("期末预收款")
+        private BigDecimal lastMonthPreAmount;
+
+        @ApiModelProperty("期末剩余课次")
+        private Integer lastMonthSubCourseNum;
+
+        @ApiModelProperty("期末课酬")
+        private BigDecimal lastMonthCourseSalary;
+    }
+
+    @Data
+    @ApiModel("平衡关系-云教练汇总")
+    public static class ExportBalancedRelationshipCloudSum {
+
+        @ApiModelProperty("期初预收款(已激活)")
+        private BigDecimal firstMonthPreAmount = BigDecimal.ZERO;
+
+        @ApiModelProperty("期初预收款(待激活)")
+        private BigDecimal firstMonthPreWaitAmount = BigDecimal.ZERO;
+
+        @ApiModelProperty("期初激活人数")
+        private Integer firstMonthActiveNum = 0;
+
+        @ApiModelProperty("期初待激活人数")
+        private Integer firstMonthWaitActiveNum = 0;
+
+        @ApiModelProperty("当月新增预收款(当月购买)")
+        private BigDecimal currentMonthAddPreAmount = BigDecimal.ZERO;
+
+        @ApiModelProperty("当月新增人数(当月购买)")
+        private Integer currentMonthAddNum = 0;
+
+        @ApiModelProperty("当月续费预收款")
+        private BigDecimal currentMonthRenewPreAmount = BigDecimal.ZERO;
+
+        @ApiModelProperty("当月续费人数")
+        private Integer currentMonthRenewNum = 0;
+
+        @ApiModelProperty("当月减少人数(到期)")
+        private Integer currentMonthCutNum = 0;
+
+        @ApiModelProperty("当月消耗的云教练金额")
+        private BigDecimal currentMonthAmount = BigDecimal.ZERO;
+
+        @ApiModelProperty("当月退费人数")
+        private Integer currentMonthReturnNum = 0;
+
+        @ApiModelProperty("当月退费金额")
+        private BigDecimal currentMonthReturnAmount = BigDecimal.ZERO;
+
+        @ApiModelProperty("当月激活人数")
+        private Integer currentMonthActiveNum = 0;
+
+        @ApiModelProperty("期末预收款(已激活)")
+        private BigDecimal lastMonthPreAmount = BigDecimal.ZERO;
+
+        @ApiModelProperty("期末预收款(待激活)")
+        private BigDecimal lastMonthPreWaitAmount = BigDecimal.ZERO;
+
+        @ApiModelProperty("期末激活人数")
+        private Integer lastMonthActiveNum = 0;
+
+        @ApiModelProperty("期末待激活人数")
+        private Integer lastMonthWaitActiveNum = 0;
+    }
 
     @Data
     @ApiModel("平衡关系-已分班未排课")
@@ -384,13 +480,63 @@ public class ExportWrapper {
         private Integer teacherId;
 
         @ApiModelProperty("剩余可排课时长")
-        private BigDecimal subCourseMinutes = BigDecimal.ZERO;
+        private Integer subCourseMinutes = 0;
 
         @ApiModelProperty("总预收")
         private BigDecimal totalCoursePrice = BigDecimal.ZERO;
 
         @ApiModelProperty("总课酬")
         private BigDecimal totalCourseSalary = BigDecimal.ZERO;
+
+        @ApiModelProperty("期初剩余可排课时长")
+        private Integer firstSubCourseMinutes = 0;
+
+        @ApiModelProperty("期初总预收")
+        private BigDecimal firstTotalCoursePrice = BigDecimal.ZERO;
+
+        @ApiModelProperty("期初总课酬")
+        private BigDecimal firstTotalCourseSalary = BigDecimal.ZERO;
+
+        @ApiModelProperty("期末剩余可排课时长")
+        private Integer lastSubCourseMinutes = 0;
+
+        @ApiModelProperty("期末总预收")
+        private BigDecimal lastTotalCoursePrice = BigDecimal.ZERO;
+
+        @ApiModelProperty("期末总课酬")
+        private BigDecimal lastTotalCourseSalary = BigDecimal.ZERO;
+
+        @ApiModelProperty("当月新增剩余可排课时长")
+        private Integer currentSubCourseMinutes = 0;
+
+        @ApiModelProperty("当月新增总预收")
+        private BigDecimal currentTotalCoursePrice = BigDecimal.ZERO;
+
+        @ApiModelProperty("当月新增总课酬")
+        private BigDecimal currentTotalCourseSalary = BigDecimal.ZERO;
+
+        @ApiModelProperty("当月消耗可排课时长")
+        private Integer currentConsumeCourseMinutes = 0;
+
+        @ApiModelProperty("当月消耗总预收")
+        private BigDecimal currentConsumeCoursePrice = BigDecimal.ZERO;
+
+        @ApiModelProperty("当月消耗总课酬")
+        private BigDecimal currentConsumeCourseSalary = BigDecimal.ZERO;
+    }
+
+    @Data
+    @ApiModel("平衡关系-未分班未排课")
+    public static class ExportBalancedRelationshipMusicNoClassNoCourse {
+
+        @ApiModelProperty("期初总预收")
+        private BigDecimal firstTotalCoursePrice = BigDecimal.ZERO;
+
+        @ApiModelProperty("期末总预收")
+        private BigDecimal lastTotalCoursePrice = BigDecimal.ZERO;
+
+        @ApiModelProperty("当月新增总预收")
+        private BigDecimal currentTotalCoursePrice = BigDecimal.ZERO;
     }
 
     @Data

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupPaymentStudentCourseDetailLog.java

@@ -15,6 +15,14 @@ public class MusicGroupPaymentStudentCourseDetailLog{
 	@TableId(value = "id_")
 	private Long id;
 
+	@ApiModelProperty(value = "班级编号")
+	@TableField(value = "class_group_id_")
+	private Integer classGroupId;
+
+	@ApiModelProperty(value = "课程类型")
+	@TableField(value = "course_type_")
+	private String courseType;
+
 	@ApiModelProperty(value = "排课时长编号")
 	@TableField(value = "music_group_payment_student_course_detail_id_")
 	private Long musicGroupPaymentStudentCourseDetailId;

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

@@ -96,7 +96,7 @@ public enum ExportEnum implements BaseEnum<String, ExportEnum> {
     EXPORT_MUSIC_GROUP_ECHELON_DATA("EXPORT_MUSIC_GROUP_ECHELON_DATA","乐团梯队数据导出"),
     EXPORT_CLOUD_TEACHER_ORDER_INACTIVE("EXPORT_CLOUD_TEACHER_ORDER_INACTIVE","云教练待激活明细"),
     EXPORT_MUSIC_GROUP_NO_COURSE("EXPORT_MUSIC_GROUP_NO_COURSE","乐团未排课时长"),
-    EXPORT_BALANCED_RELATIONSHIP_MUSIC_COURSE("EXPORT_MUSIC_GROUP_NO_COURSE","平衡关系-乐团课"),
+    EXPORT_BALANCED_RELATIONSHIP_MUSIC_COURSE("EXPORT_BALANCED_RELATIONSHIP_MUSIC_COURSE","平衡关系-乐团课"),
     EXPORT_BALANCED_RELATIONSHIP_VIP_COURSE("EXPORT_BALANCED_RELATIONSHIP_VIP_COURSE","平衡关系-VIP已排课"),
     EXPORT_BALANCED_RELATIONSHIP_VIP_NO_COURSE("EXPORT_BALANCED_RELATIONSHIP_VIP_NO_COURSE","平衡关系-VIP未排课"),
     EXPORT_BALANCED_RELATIONSHIP_MUSIC_SUB_COURSE("EXPORT_BALANCED_RELATIONSHIP_MUSIC_SUB_COURSE","平衡关系-缴费项目课时明细"),
@@ -106,8 +106,13 @@ public enum ExportEnum implements BaseEnum<String, ExportEnum> {
     VIDEO_PLAY_STAT("VIDEO_PLAY_STAT","云课堂统计导出"),
     VIDEO_PLAY_DETAIL_STAT("VIDEO_PLAY_DETAIL_STAT","云课堂统计详情导出"),
     EXPORT_BALANCED_RELATIONSHIP_MUSIC_NO_COURSE("EXPORT_BALANCED_RELATIONSHIP_MUSIC_NO_COURSE","平衡关系-已分班未排课"),
+    EXPORT_BALANCED_RELATIONSHIP_MUSIC_NO_COURSE_SUM("EXPORT_BALANCED_RELATIONSHIP_MUSIC_NO_COURSE_SUM","平衡关系-已分班未排课汇总"),
+
+    EXPORT_BALANCED_RELATIONSHIP_MUSIC_NO_CLASS_NO_COURSE_SUM("EXPORT_BALANCED_RELATIONSHIP_MUSIC_NO_CLASS_NO_COURSE_SUM","平衡关系-未分班未排课汇总"),
     EXPORT_BALANCED_RELATIONSHIP_VIP_SUB_COURSE_DETAIL("EXPORT_BALANCED_RELATIONSHIP_VIP_SUB_COURSE_DETAIL","平衡关系-VIP剩余课时及金额明细"),
     EXPORT_BALANCED_RELATIONSHIP_VIP_SUB_COURSE_SUM("EXPORT_BALANCED_RELATIONSHIP_VIP_SUB_COURSE_SUM","平衡关系-VIP剩余课时及金额汇总"),
+    EXPORT_BALANCED_RELATIONSHIP_MUSIC_COURSE_SUM("EXPORT_BALANCED_RELATIONSHIP_MUSIC_COURSE_SUM","平衡关系-乐团课汇总"),
+    EXPORT_BALANCED_RELATIONSHIP_CLOUD_SUM("EXPORT_BALANCED_RELATIONSHIP_CLOUD_SUM","平衡关系-云教练汇总"),
     ;
 
     private String code;

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportTypeEnum.java

@@ -45,6 +45,13 @@ public enum ExportTypeEnum implements BaseEnum<Integer, ExportTypeEnum> {
 	VIDEO_PLAY_DETAIL_STAT(38,"云课堂统计详情导出"),
 	EXPORT_BALANCED_RELATIONSHIP_MUSIC_NO_COURSE(39,"平衡关系-已分班未排课"),
 	EXPORT_BALANCED_RELATIONSHIP_VIP_SUB_COURSE_DETAIL(40,"平衡关系-VIP剩余课时及金额明细"),
+	EXPORT_BALANCED_RELATIONSHIP_VIP_SUB_COURSE_SUM(41,"平衡关系-VIP剩余课时及金额汇总"),
+
+	EXPORT_BALANCED_RELATIONSHIP_MUSIC_NO_COURSE_SUM(42,"平衡关系-已分班未排课汇总"),
+
+	EXPORT_BALANCED_RELATIONSHIP_MUSIC_NO_CLASS_NO_COURSE_SUM(43,"平衡关系-未分班未排课汇总"),
+	EXPORT_BALANCED_RELATIONSHIP_MUSIC_COURSE_SUM(44,"平衡关系-乐团课汇总"),
+	EXPORT_BALANCED_RELATIONSHIP_CLOUD_SUM(45,"平衡关系-云教练汇总")
 	;
 
 	private Integer code;

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

@@ -488,4 +488,10 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
     Map<String, List<ExportMusicGroupEchelonDataDto>> queryMusicGroupEchelonData(List<Integer> organIds);
 
     List<ExportWrapper.ExportBalancedRelationshipMusicNoCourse> exportBalancedRelationshipMusicNoCourse(String month, String organIds);
+
+    List<ExportWrapper.ExportBalancedRelationshipMusicNoCourse> exportBalancedRelationshipMusicNoCourseSum(String month);
+
+    List<ExportWrapper.ExportBalancedRelationshipMusicNoClassNoCourse> exportBalancedRelationshipMusicNoClassNoCourseSum(String month);
+
+    List<ExportWrapper.ExportBalancedRelationshipMusicCourseSum> exportBalancedRelationshipMusicCourseSum(String month);
 }

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

@@ -20,4 +20,6 @@ public interface OperatingReportNewService extends BaseService<Integer, Operatin
 
     //oa费用明细
     List<FinancialExpenditure> queryOASummaryExpensesDetail(String month);
+
+    void balancedRelationship(String month);
 }

+ 11 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java

@@ -379,6 +379,8 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 						detailLog = new MusicGroupPaymentStudentCourseDetailLog();
 						musicGroupPaymentStudentCourseDetailLogs.add(detailLog);
 						detailLog.setMusicGroupPaymentStudentCourseDetailId(musicGroupPaymentStudentCourseDetail.getId());
+						detailLog.setClassGroupId(courseSchedule.getClassGroupId());
+						detailLog.setCourseType(courseSchedule.getType().getCode());
 					}
 					detailLog.setCourseNum(detailLog.getCourseNum() + 1);
 					detailLog.setCoursePrice(detailLog.getCoursePrice().add(courseCurrentPrice));
@@ -479,7 +481,8 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 								//扣除可排课时长
 								//处理经营报表
 								this.calcCourseMinutes(musicGroupPaymentStudentCourseDetails,courseDuration,
-										cssp,musicGroupPaymentCalenders,courseCalenderMap,musicGroupPaymentStudentCourseDetailLogs,salaryMap.get(courseSchedule.getId()));
+										cssp,musicGroupPaymentCalenders,courseCalenderMap,musicGroupPaymentStudentCourseDetailLogs,
+										salaryMap.get(courseSchedule.getId()),courseSchedule);
 								typeCourseStudentPayments.add(cssp);
 							}
 							courseScheduleStudentPayments.addAll(typeCourseStudentPayments);
@@ -501,11 +504,11 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 	}
 
 	private void calcCourseMinutes(List<MusicGroupPaymentStudentCourseDetail> courseDetails,
-									  Integer courseDuration,
-									  CourseScheduleStudentPayment studentPayment,
-									  List<MusicGroupPaymentCalender> musicGroupPaymentCalenders,
-									  Map<Long,List<Long>> courseCalenderMap,
-								      List<MusicGroupPaymentStudentCourseDetailLog> musicGroupPaymentStudentCourseDetailLogs,BigDecimal salary){
+								   Integer courseDuration,
+								   CourseScheduleStudentPayment studentPayment,
+								   List<MusicGroupPaymentCalender> musicGroupPaymentCalenders,
+								   Map<Long,List<Long>> courseCalenderMap,
+								   List<MusicGroupPaymentStudentCourseDetailLog> musicGroupPaymentStudentCourseDetailLogs, BigDecimal salary, CourseSchedule courseSchedule){
 		Boolean result = true;
 		Integer courseMinutes = courseDuration;
 		Map<Long, List<MusicGroupPaymentCalender>> calenderMap = musicGroupPaymentCalenders.stream().collect(Collectors.groupingBy(MusicGroupPaymentCalender::getId));
@@ -521,6 +524,8 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 				if (detailLog == null){
 					detailLog = new MusicGroupPaymentStudentCourseDetailLog();
 					detailLog.setMusicGroupPaymentStudentCourseDetailId(detail.getId());
+					detailLog.setClassGroupId(courseSchedule.getClassGroupId());
+					detailLog.setCourseType(courseSchedule.getType().getCode());
 					musicGroupPaymentStudentCourseDetailLogs.add(detailLog);
 				}
 				if(courseMinutes >= detail.getSubCourseMinutes()){

+ 41 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -389,8 +389,12 @@ public class ExportServiceImpl implements ExportService {
         exportManageFuncMap.put(ExportEnum.VIDEO_PLAY_STAT, this::exportVideoPlayStat);
         exportManageFuncMap.put(ExportEnum.VIDEO_PLAY_DETAIL_STAT, this::exportVideoPlayDetailStat);
         exportManageFuncMap.put(ExportEnum.EXPORT_BALANCED_RELATIONSHIP_MUSIC_NO_COURSE, this::exportBalancedRelationshipMusicNoCourse);
+        exportManageFuncMap.put(ExportEnum.EXPORT_BALANCED_RELATIONSHIP_MUSIC_NO_COURSE_SUM, this::exportBalancedRelationshipMusicNoCourseSum);
+        exportManageFuncMap.put(ExportEnum.EXPORT_BALANCED_RELATIONSHIP_MUSIC_NO_CLASS_NO_COURSE_SUM, this::exportBalancedRelationshipMusicNoClassNoCourseSum);
         exportManageFuncMap.put(ExportEnum.EXPORT_BALANCED_RELATIONSHIP_VIP_SUB_COURSE_DETAIL, this::exportBalancedRelationshipVipSubCourseDetail);
         exportManageFuncMap.put(ExportEnum.EXPORT_BALANCED_RELATIONSHIP_VIP_SUB_COURSE_SUM, this::exportBalancedRelationshipVipSubCourseSum);
+        exportManageFuncMap.put(ExportEnum.EXPORT_BALANCED_RELATIONSHIP_MUSIC_COURSE_SUM, this::exportBalancedRelationshipMusicCourseSum);
+        exportManageFuncMap.put(ExportEnum.EXPORT_BALANCED_RELATIONSHIP_CLOUD_SUM, this::exportBalancedRelationshipCloudSum);
     }
 
     private HttpResponseResult<String> exportVideoPlayStat(Map<String, Object> info) {
@@ -466,6 +470,25 @@ public class ExportServiceImpl implements ExportService {
                         managerDownload,ExportEnum.EXPORT_BALANCED_RELATIONSHIP_MUSIC_COURSE),
                 managerDownload.getName());
     }
+
+    private HttpResponseResult<String> exportBalancedRelationshipMusicCourseSum(Map<String, Object> info){
+        String month = getParam(info, "month", String.class);
+        SysUser sysUser = sysUserService.getUser();
+        ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.EXPORT_BALANCED_RELATIONSHIP_MUSIC_COURSE_SUM,sysUser.getId());
+        return this.asyncExport(() -> this.initExportInfo(musicGroupService.exportBalancedRelationshipMusicCourseSum(month),
+                        managerDownload,ExportEnum.EXPORT_BALANCED_RELATIONSHIP_MUSIC_COURSE_SUM),
+                managerDownload.getName());
+    }
+
+    private HttpResponseResult<String> exportBalancedRelationshipCloudSum(Map<String, Object> info){
+        String month = getParam(info, "month", String.class);
+        SysUser sysUser = sysUserService.getUser();
+        ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.EXPORT_BALANCED_RELATIONSHIP_CLOUD_SUM,sysUser.getId());
+        return this.asyncExport(() -> this.initExportInfo(exportDao.exportBalancedRelationshipCloudSum(month),
+                        managerDownload,ExportEnum.EXPORT_BALANCED_RELATIONSHIP_CLOUD_SUM),
+                managerDownload.getName());
+    }
+
     private HttpResponseResult<String> exportBalancedRelationshipVipCourse(Map<String, Object> info){
         String month = getParam(info, "month", String.class);
         SysUser sysUser = sysUserService.getUser();
@@ -532,6 +555,24 @@ public class ExportServiceImpl implements ExportService {
                 managerDownload.getName());
     }
 
+    private HttpResponseResult<String> exportBalancedRelationshipMusicNoCourseSum(Map<String, Object> info){
+        String month = getParam(info, "month", String.class);
+        SysUser sysUser = sysUserService.getUser();
+        ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.EXPORT_BALANCED_RELATIONSHIP_MUSIC_NO_COURSE_SUM,sysUser.getId());
+        return this.asyncExport(() -> this.initExportInfo(musicGroupService.exportBalancedRelationshipMusicNoCourseSum(month),
+                        managerDownload,ExportEnum.EXPORT_BALANCED_RELATIONSHIP_MUSIC_NO_COURSE_SUM),
+                managerDownload.getName());
+    }
+
+    private HttpResponseResult<String> exportBalancedRelationshipMusicNoClassNoCourseSum(Map<String, Object> info){
+        String month = getParam(info, "month", String.class);
+        SysUser sysUser = sysUserService.getUser();
+        ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.EXPORT_BALANCED_RELATIONSHIP_MUSIC_NO_CLASS_NO_COURSE_SUM,sysUser.getId());
+        return this.asyncExport(() -> this.initExportInfo(musicGroupService.exportBalancedRelationshipMusicNoClassNoCourseSum(month),
+                        managerDownload,ExportEnum.EXPORT_BALANCED_RELATIONSHIP_MUSIC_NO_CLASS_NO_COURSE_SUM),
+                managerDownload.getName());
+    }
+
     private HttpResponseResult<String> exportBalancedRelationshipVipSubCourseDetail(Map<String, Object> info){
         String month = getParam(info, "month", String.class);
         SysUser sysUser = sysUserService.getUser();

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

@@ -56,10 +56,12 @@ import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.annotation.Resource;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.Map.Entry;
@@ -80,153 +82,156 @@ import static com.ym.mec.biz.dal.enums.SysUserRoleEnum.ORGAN_MANAGER;
 @Service
 public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> implements MusicGroupService {
 
-    @Autowired
+    @Resource
     private MusicGroupDao musicGroupDao;
-    @Autowired
+    @Resource
     private TeacherDao teacherDao;
-    @Autowired
+    @Resource
     private MusicGroupDeliveryRecordDao musicGroupDeliveryRecordDao;
-    @Autowired
+    @Resource
     private StudentService studentService;
-    @Autowired
+    @Resource
     private IdGeneratorService idGeneratorService;
-    @Autowired
+    @Resource
     private SchoolDao schoolDao;
-    @Autowired
+    @Resource
     private MusicGroupPaymentCalenderMemberDao musicGroupPaymentCalenderMemberDao;
-    @Autowired
+    @Resource
     private MusicGroupPaymentCalenderService musicGroupPaymentCalenderService;
-    @Autowired
+    @Resource
     private MusicGroupPaymentEntitiesDao musicGroupPaymentEntitiesDao;
-    @Autowired
+    @Resource
     private MusicGroupSubjectPlanDao musicGroupSubjectPlanDao;
-    @Autowired
+    @Resource
     private StudentTeacherMapperDao studentTeacherMapperDao;
-    @Autowired
+    @Resource
     private MusicGroupBuildLogDao musicGroupBuildLogDao;
-    @Autowired
+    @Resource
     private MusicGroupPurchaseListDao musicGroupPurchaseListDao;
-    @Autowired
+    @Resource
     private MusicGroupStudentFeeDao musicGroupStudentFeeDao;
-    @Autowired
+    @Resource
     private ClassGroupStudentMapperDao classGroupStudentMapperDao;
-    @Autowired
+    @Resource
     private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
-    @Autowired
+    @Resource
     private StudentPaymentOrderDao studentPaymentOrderDao;
-    @Autowired
+    @Resource
     private SysUserCashAccountService sysUserCashAccountService;
-    @Autowired
+    @Resource
     private SysUserCashAccountDetailService sysUserCashAccountDetailService;
-    @Autowired
+    @Resource
     private MusicGroupPaymentCalenderStudentDetailDao musicGroupPaymentCalenderStudentDetailDao;
-    @Autowired
+    @Resource
     private MusicGroupQuitDao musicGroupQuitDao;
-    @Autowired
+    @Resource
     private StudentRegistrationDao studentRegistrationDao;
-    @Autowired
+    @Resource
     private CourseScheduleDao courseScheduleDao;
-    @Autowired
+    @Resource
     private ClassGroupDao classGroupDao;
-    @Autowired
+    @Resource
     private OrganizationDao organizationDao;
-    @Autowired
+    @Resource
     private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
-    @Autowired
+    @Resource
     private CourseScheduleStudentPaymentService courseScheduleStudentPaymentService;
-    @Autowired
+    @Resource
     private CooperationOrganDao cooperationOrganDao;
-    @Autowired
+    @Resource
     private TeacherAttendanceDao teacherAttendanceDao;
-    @Autowired
+    @Resource
     private StudentPaymentOrderService studentPaymentOrderService;
-    @Autowired
+    @Resource
     private StudentPaymentOrderDetailService studentPaymentOrderDetailService;
-    @Autowired
+    @Resource
     private PayService payService;
-    @Autowired
+    @Resource
     private SysUserService sysUserService;
-    @Autowired
+    @Resource
     private SysMessageService sysMessageService;
-    @Autowired
+    @Resource
     private SysConfigDao sysConfigDao;
-    @Autowired
+    @Resource
     private SysTenantConfigService sysTenantConfigService;
-    @Autowired
+    @Resource
     private ClassGroupService classGroupService;
-    @Autowired
+    @Resource
     private StudentPaymentOrderDetailDao studentPaymentOrderDetailDao;
-    @Autowired
+    @Resource
     private StudentRegistrationService studentRegistrationService;
-    @Autowired
+    @Resource
     private SporadicChargeInfoDao sporadicChargeInfoDao;
-    @Autowired
+    @Resource
     private MusicGroupSubjectGoodsGroupService musicGroupSubjectGoodsGroupService;
-    @Autowired
+    @Resource
     private GoodsService goodsService;
-    @Autowired
+    @Resource
     private ClassGroupStudentMapperService classGroupStudentMapperService;
-    @Autowired
+    @Resource
     private MusicGroupPaymentCalenderDetailDao musicGroupPaymentCalenderDetailDao;
-    @Autowired
+    @Resource
     private ImGroupMemberService imGroupMemberService;
-    @Autowired
+    @Resource
     private ImUserFriendService imUserFriendService;
-    @Autowired
+    @Resource
     private ImGroupService imGroupService;
-    @Autowired
+    @Resource
     private StudentPaymentRouteOrderService studentPaymentRouteOrderService;
-    @Autowired
+    @Resource
     private MusicGroupPaymentCalenderCourseSettingsDao musicGroupPaymentCalenderCourseSettingsDao;
-    @Autowired
+    @Resource
     private MusicGroupPaymentStudentCourseDetailService musicGroupPaymentStudentCourseDetailService;
-    @Autowired
+    @Resource
     private SubjectChangeDao subjectChangeDao;
-    @Autowired
+    @Resource
     private StudentVisitDao studentVisitDao;
-    @Autowired
+    @Resource
     private SubjectDao subjectDao;
-    @Autowired
+    @Resource
     private GoodsDao goodsDao;
-    @Autowired
+    @Resource
     @Lazy
     private ContractService contractService;
-    @Autowired
+    @Resource
     private StudentPreRegistrationDao studentPreRegistrationDao;
-    @Autowired
+    @Resource
     private GroupEventSource groupEventSource;
-    @Autowired
+    @Resource
     private StudentInstrumentDao studentInstrumentDao;
-    @Autowired
+    @Resource
     private SysUserCashAccountLogDao sysUserCashAccountLogDao;
-    @Autowired
+    @Resource
     private MusicGroupSchoolTermCourseDetailDao musicGroupSchoolTermCourseDetailDao;
-    @Autowired
+    @Resource
     private MusicGroupSchoolTermStudentCourseDetailDao musicGroupSchoolTermStudentCourseDetailDao;
-    @Autowired
+    @Resource
     private SysCouponCodeService sysCouponCodeService;
-    @Autowired
+    @Resource
     private SendSeoMessageSource sendSeoMessageSource;
-    @Autowired
+    @Resource
     private SysEmployeePositionService employeePositionService;
-    @Autowired
+    @Resource
     private SysUserCashAccountDao sysUserCashAccountDao;
-    @Autowired
+    @Resource
     private StudentDao studentDao;
-    @Autowired
+    @Resource
     private MusicGroupPaymentCalenderRepairDao musicGroupPaymentCalenderRepairDao;
-    @Autowired
+    @Resource
     private MusicGroupPaymentCalenderActivityDao musicGroupPaymentCalenderActivityDao;
 
-    @Autowired
+    @Resource
     private SchoolStaffService schoolStaffService;
 
-    @Autowired
+    @Resource
     private SysMessageConfigDao sysMessageConfigDao;
 
-    @Autowired
+    @Resource
     private TeacherDefaultMusicGroupSalaryDao teacherDefaultMusicGroupSalaryDao;
 
+    @Resource
+    private MusicGroupPaymentStudentCourseDetailLogService musicGroupPaymentStudentCourseDetailLogService;
+
     private SimpleDateFormat sdf_ymd = new SimpleDateFormat("yyyy-MM-dd");
 
     private SimpleDateFormat sdf_hms = new SimpleDateFormat("HH:mm:ss");
@@ -4249,6 +4254,85 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 		return exportBalancedRelationshipMusicNoCourses;
 	}
 
+    @Override
+    public List<ExportWrapper.ExportBalancedRelationshipMusicNoCourse> exportBalancedRelationshipMusicNoCourseSum(String month) {
+		List<ExportWrapper.ExportBalancedRelationshipMusicNoCourse> result = new ArrayList<>();
+		ExportWrapper.ExportBalancedRelationshipMusicNoCourse sum = new ExportWrapper.ExportBalancedRelationshipMusicNoCourse();
+		//期初已分班未排课
+		List<ExportWrapper.ExportBalancedRelationshipMusicNoCourse> first =
+				musicGroupDao.exportBalancedRelationshipMusicNoCourse(month + "-01 00:00:00", null);
+		if(CollectionUtils.isNotEmpty(first)){
+			//计算课酬
+			this.createMusicGroupCourseTeacherSalaries(first);
+			//将列表所有字段汇总
+			sum.setFirstSubCourseMinutes(first.stream().map(ExportWrapper.ExportBalancedRelationshipMusicNoCourse::getSubCourseMinutes).reduce(0, Integer::sum));
+			sum.setFirstTotalCourseSalary(first.stream().map(ExportWrapper.ExportBalancedRelationshipMusicNoCourse::getTotalCourseSalary).reduce(BigDecimal.ZERO, BigDecimal::add));
+			sum.setFirstTotalCoursePrice(first.stream().map(ExportWrapper.ExportBalancedRelationshipMusicNoCourse::getTotalCoursePrice).reduce(BigDecimal.ZERO, BigDecimal::add));
+		}
+
+		//期末已分班未排课
+		List<ExportWrapper.ExportBalancedRelationshipMusicNoCourse> exportBalancedRelationshipMusicNoCourses =
+				musicGroupDao.exportBalancedRelationshipMusicNoCourse(month + "-31 23:59:59", null);
+		if(CollectionUtils.isNotEmpty(exportBalancedRelationshipMusicNoCourses)){
+			//计算课酬
+			this.createMusicGroupCourseTeacherSalaries(exportBalancedRelationshipMusicNoCourses);
+			//将列表所有字段汇总
+			sum.setLastSubCourseMinutes(exportBalancedRelationshipMusicNoCourses.stream().map(ExportWrapper.ExportBalancedRelationshipMusicNoCourse::getSubCourseMinutes).reduce(0, Integer::sum));
+			sum.setLastTotalCourseSalary(exportBalancedRelationshipMusicNoCourses.stream().map(ExportWrapper.ExportBalancedRelationshipMusicNoCourse::getTotalCourseSalary).reduce(BigDecimal.ZERO, BigDecimal::add));
+			sum.setLastTotalCoursePrice(exportBalancedRelationshipMusicNoCourses.stream().map(ExportWrapper.ExportBalancedRelationshipMusicNoCourse::getTotalCoursePrice).reduce(BigDecimal.ZERO, BigDecimal::add));
+		}
+
+		//当月新增已分班未排课(期末-期初)
+		sum.setCurrentSubCourseMinutes(sum.getLastSubCourseMinutes() - sum.getFirstSubCourseMinutes());
+		sum.setCurrentTotalCourseSalary(sum.getLastTotalCourseSalary().subtract(sum.getFirstTotalCourseSalary()));
+		sum.setCurrentTotalCoursePrice(sum.getLastTotalCoursePrice().subtract(sum.getFirstTotalCoursePrice()));
+
+		//当月消耗已分班未排课
+		musicGroupPaymentStudentCourseDetailLogService.lambdaQuery()
+				.gt(MusicGroupPaymentStudentCourseDetailLog::getCreateTime, month + "-01 00:00:00")
+				.lt(MusicGroupPaymentStudentCourseDetailLog::getCreateTime, month + "-31 23:59:59")
+				.list().forEach(e->{
+			sum.setCurrentConsumeCourseMinutes(sum.getCurrentConsumeCourseMinutes() + e.getUsedCourseMinutes());
+			sum.setCurrentConsumeCoursePrice(sum.getCurrentConsumeCoursePrice().add(e.getCoursePrice()));
+			sum.setTotalCourseSalary(sum.getTotalCourseSalary().add(e.getCourseSalary()));
+		});
+		result.add(sum);
+		return result;
+	}
+
+    @Override
+    public List<ExportWrapper.ExportBalancedRelationshipMusicNoClassNoCourse> exportBalancedRelationshipMusicNoClassNoCourseSum(String month) {
+		List<ExportWrapper.ExportBalancedRelationshipMusicNoClassNoCourse> result = new ArrayList<>();
+		ExportWrapper.ExportBalancedRelationshipMusicNoClassNoCourse sum = new ExportWrapper.ExportBalancedRelationshipMusicNoClassNoCourse();
+		//期初未分班未排课
+		BigDecimal first = musicGroupDao.exportBalancedRelationshipMusicNoClassNoCourseSum(month + "-01 00:00:00");
+		sum.setFirstTotalCoursePrice(first);
+		//期末未分班未排课
+		BigDecimal last = musicGroupDao.exportBalancedRelationshipMusicNoClassNoCourseSum(month + "-31 23:59:59");
+		sum.setLastTotalCoursePrice(last);
+		//当月新增未分班未排课(期末-期初)
+		sum.setCurrentTotalCoursePrice(last.subtract(first));
+		result.add(sum);
+		return result;
+	}
+
+	@Override
+	public List<ExportWrapper.ExportBalancedRelationshipMusicCourseSum> exportBalancedRelationshipMusicCourseSum(String month) {
+		List<ExportWrapper.ExportBalancedRelationshipMusicCourseSum> result = new ArrayList<>();
+		ExportWrapper.ExportBalancedRelationshipMusicCourseSum courseSum = musicGroupDao.exportBalancedRelationshipMusicCourseSum(month);
+		//获取排课日志
+		musicGroupPaymentStudentCourseDetailLogService.lambdaQuery()
+				.gt(MusicGroupPaymentStudentCourseDetailLog::getCreateTime, month + "-01 00:00:00")
+				.lt(MusicGroupPaymentStudentCourseDetailLog::getCreateTime, month + "-31 23:59:59")
+				.list().forEach(e->{
+			courseSum.setCurrentMonthAdd(courseSum.getCurrentMonthConsume() + e.getCourseNum());
+			courseSum.setCurrentMonthAddReward(courseSum.getCurrentMonthAddReward().add(e.getCourseSalary()));
+			courseSum.setCurrentMonthAddCourseAmount(courseSum.getCurrentMonthAddCourseAmount().add(e.getCoursePrice()));
+		});
+		result.add(courseSum);
+		return result;
+	}
+
 	private void createMusicGroupCourseTeacherSalaries(List<ExportWrapper.ExportBalancedRelationshipMusicNoCourse> noCours) {
 		List<Integer> teacherIds = noCours.stream().map(ExportWrapper.ExportBalancedRelationshipMusicNoCourse::getTeacherId).distinct().collect(Collectors.toList());
 
@@ -4275,13 +4359,13 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
 			//基准课酬
 			//课程时长与结算单位时长占比
-			BigDecimal classTimeDuty = noCour.getSubCourseMinutes().divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+			BigDecimal classTimeDuty = new BigDecimal(noCour.getSubCourseMinutes()).divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, RoundingMode.DOWN);
 			BigDecimal baseSalary = teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary();
 			if(Objects.isNull(baseSalary)){
 				continue;
 			}
 
-			salary = baseSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
+			salary = baseSalary.multiply(classTimeDuty).setScale(2, RoundingMode.HALF_UP);
 			//课堂课课酬
 			if (StringUtils.equals(noCour.getCourseType(),CourseSchedule.CourseScheduleType.CLASSROOM.getCode())) {
 				salary = teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary();

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OperatingReportNewServiceImpl.java

@@ -207,6 +207,17 @@ public class OperatingReportNewServiceImpl extends BaseServiceImpl<Integer, Oper
 		return operatingReportNewDao.queryOASummaryExpensesDetail(month);
 	}
 
+	@Override
+	public void balancedRelationship(String month) {
+		//月头的数据统计
+		operatingReportNewDao.firstBalancedRelationship(month);
+
+		//上月月末的数据统计
+		//获取上个月时间
+		String lastMonth = DateUtil.dateToString(DateUtil.addMonths(DateUtil.stringToDate(month,DateUtil.ISO_YEAR_MONTH_FORMAT),-1),DateUtil.ISO_YEAR_MONTH_FORMAT);
+		operatingReportNewDao.lastBalancedRelationship(lastMonth);
+	}
+
 	private BigDecimal getAmount(BigDecimal amount){
 		if(amount == null){
 			amount = BigDecimal.ZERO;

+ 24 - 0
mec-biz/src/main/resources/config/mybatis/ExportMapper.xml

@@ -335,6 +335,30 @@
         from month_vip_report_statis mv
         where mv.month_ = #{month}
     </select>
+    <select id="exportBalancedRelationshipCloudSum"
+            resultType="com.ym.mec.biz.dal.dto.ExportWrapper$ExportBalancedRelationshipCloudSum">
+        SELECT
+            first_month_pre_amount_ AS firstMonthPreAmount,
+            first_month_pre_wait_amount_ AS firstMonthPreWaitAmount,
+            first_month_active_num_ AS firstMonthActiveNum,
+            first_month_wait_active_num_ AS firstMonthWaitActiveNum,
+            current_month_add_pre_amount_ AS currentMonthAddPreAmount,
+            current_month_add_num_ AS currentMonthAddNum,
+            current_month_renew_pre_amount_ AS currentMonthRenewPreAmount,
+            current_month_renew_num_ AS currentMonthRenewNum,
+            current_month_cut_num_ AS currentMonthCutNum,
+            current_month_amount_ AS currentMonthAmount,
+            current_month_return_num_ AS currentMonthReturnNum,
+            current_month_return_amount_ AS currentMonthReturnAmount,
+            current_month_active_num_ AS currentMonthActiveNum,
+            last_month_pre_amount_ AS lastMonthPreAmount,
+            last_month_pre_wait_amount_ AS lastMonthPreWaitAmount,
+            last_month_active_num_ AS lastMonthActiveNum,
+            last_month_wait_active_num_ AS lastMonthWaitActiveNum
+        FROM
+            month_cloud_report_statis
+        where month_ = #{month}
+    </select>
     <sql id="hasStudentMusicTheoryCourseInfo">
         <where>
             cssp.`group_type_` = 'VIP' AND cs.`del_flag_` != 1 AND cs.`is_lock_` != 1

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

@@ -1349,6 +1349,9 @@
           AND (cg.type_ = mgpscd.course_type_ OR
                    (cg.type_ = 'NORMAL' AND mgpscd.course_type_ IN ('SINGLE','TRAINING_SINGLE')) OR
                    (cg.type_ = 'MIX' AND mgpscd.course_type_ IN ('MIX','TRAINING_MIX')) OR cg.type_ = 'SNAP')
+          <if test="month != null and month != ''">
+                AND mgpscd.create_time_ $lt; #{month}
+          </if>
         <if test="organIds != null and organIds.size > 0">
             AND mg.organ_id_ IN
             <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
@@ -1358,4 +1361,26 @@
         group by mg.organ_id_,cgsm.class_group_id_,mgpscd.course_type_
         order by mg.organ_id_,cgsm.class_group_id_,mgpscd.course_type_
     </select>
+    <select id="exportBalancedRelationshipMusicNoClassNoCourseSum" resultType="java.math.BigDecimal">
+        select SUM(mgpscd.sub_course_current_price_)
+        from music_group_payment_student_course_detail mgpscd
+        left join (select cgsm.user_id_,cg.type_,cg.music_group_id_,cgsm.class_group_id_  from class_group_student_mapper cgsm
+        left join class_group cg ON cg.id_ = cgsm.class_group_id_
+        where cg.group_type_ = 'MUSIC' AND cgsm.status_ = 'NORMAL') cgsm ON cgsm.music_group_id_ = mgpscd.music_group_id_ and cgsm.user_id_ = mgpscd.user_id_
+        AND (cgsm.type_ = mgpscd.course_type_ OR
+        (cgsm.type_ = 'NORMAL' AND mgpscd.course_type_ IN ('SINGLE','TRAINING_SINGLE')) OR
+        (cgsm.type_ = 'MIX' AND mgpscd.course_type_ IN ('MIX','TRAINING_MIX')) OR cgsm.type_ = 'SNAP')
+        where mgpscd.sub_course_current_price_ > 0 AND mgpscd.sub_course_minutes_ > 0
+        AND mgpscd.create_time_ $lt;= #{month} AND cgsm.class_group_id_ IS NULL;
+    </select>
+    <select id="exportBalancedRelationshipMusicCourseSum"
+            resultType="com.ym.mec.biz.dal.dto.ExportWrapper$ExportBalancedRelationshipMusicCourseSum">
+        select
+        first_month_pre_amount_ firstMonthPreAmount, first_month_sub_course_num_ firstMonthSubCourseNum,
+        first_month_course_salary_ firstMonthCourseSalary, current_month_consume_course_num_ currentMonthConsume, current_month_course_salary_ currentMonthConsumeReward,
+        current_month_course_amount_ currentMonthCourseAmount, last_month_pre_amount_ lastMonthPreAmount,
+        last_month_sub_course_num_ lastMonthSubCourseNum, last_month_course_salary_ lastMonthCourseSalary
+        from month_music_class_report_statis mm
+        where mm.month_ = #{month}
+    </select>
 </mapper>

+ 13 - 0
mec-biz/src/main/resources/config/mybatis/OperatingReportNewMapper.xml

@@ -428,4 +428,17 @@
 		from human_cost
 		where month_ = #{month} group by organ_id_
 	</select>
+	<select id="firstBalancedRelationship">
+		select firstMonthVipReportStatis(#{month});
+		select firstMonthMusicClassReportStatis(#{month});
+		select firstMonthCloudReportStatis(#{month});
+	</select>
+	<select id="lastBalancedRelationship">
+		select currentMonthVipReportStatis(#{month});
+		select lastMonthVipReportStatis(#{month});
+		select currentMonthMusicClassReportStatis(#{month});
+		select lastMonthMusicClassReportStatis(#{month});
+		select currentMonthCloudReportStatis(#{month});
+		select lastMonthCloudReportStatis(#{month});
+	</select>
 </mapper>

+ 4 - 0
mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java

@@ -12,6 +12,10 @@ import org.springframework.web.bind.annotation.GetMapping;
         configuration = {FeignConfiguration.class}, fallback = TaskRemoteServiceFallback.class)
 public interface TaskRemoteService {
 
+    @GetMapping(value = "task/balancedRelationshipTask")
+    // 每月一次平衡关系任务
+    public void balancedRelationshipTask();
+
     @GetMapping(value = "task/pushWaitSendMessageTask")
     // 每天9点推送前一天22点之后的推送消息
     public void pushWaitSendMessageTask();

+ 4 - 0
mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java

@@ -155,6 +155,10 @@ public class TaskRemoteServiceFallback implements TaskRemoteService {
     public void pushWaitSendMessageTask() {
         logger.info("延时推送执行失败");
     }
+    @Override
+    public void balancedRelationshipTask() {
+        logger.info("平衡关系执行失败");
+    }
 
     @Override
     public void pushTeacherExceptionAttendanceTask() {

+ 20 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/BalancedRelationshipTask.java

@@ -0,0 +1,20 @@
+package com.ym.mec.task.jobs;
+
+import com.ym.mec.task.TaskRemoteService;
+import com.ym.mec.task.core.BaseTask;
+import com.ym.mec.task.core.TaskException;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+@Service
+public class BalancedRelationshipTask extends BaseTask {
+
+	@Resource
+	private TaskRemoteService taskRemoteService;
+
+	@Override
+	public void execute() throws TaskException {
+		taskRemoteService.balancedRelationshipTask();
+	}
+}