Browse Source

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

zouxuan 1 year ago
parent
commit
5a7abdceee
65 changed files with 1377 additions and 1542 deletions
  1. 1 1
      audio-analysis/src/main/java/com/yonge/audio/AudioAnalysisServerApplication.java
  2. 3 1
      audio-analysis/src/main/java/com/yonge/netty/dto/UserChannelContext.java
  3. 1 1
      audio-analysis/src/main/resources/bootstrap-test.properties
  4. 1 1
      cms/src/main/resources/bootstrap-test.properties
  5. 1 1
      mec-auth/mec-auth-server/src/main/resources/bootstrap-test.properties
  6. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherOrderDao.java
  7. 18 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/OperatingReportNewDao.java
  8. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java
  9. 16 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/HumanTypeDto.java
  10. 74 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/OASummaryExpensesDto.java
  11. 56 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/OperatingTotalIncomeDto.java
  12. 6 71
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PWorkOrderInfo.java
  13. 2 296
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentPaymentOrderExportDto.java
  14. 2 64
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentPaymentOrderRouteDto.java
  15. 5 241
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudTeacherOrder.java
  16. 16 265
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/FinancialExpenditure.java
  17. 24 94
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/HumanCost.java
  18. 6 208
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/OperatingReportNew.java
  19. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/DegreeTypeEnum.java
  20. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportEnum.java
  21. 4 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportTypeEnum.java
  22. 7 6
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/FeeProjectEnum.java
  23. 40 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/HumanCostTypeEnum.java
  24. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/TemplateTypeEnum.java
  25. 3 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/mapper/DegreeLevelFeeMapper.java
  26. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ExportService.java
  27. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/OperatingReportNewService.java
  28. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TempBuyFreeLiveTheoryCourseService.java
  29. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  30. 1 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java
  31. 343 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
  32. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesServiceImpl.java
  33. 154 105
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/FinancialExpenditureServiceImpl.java
  34. 0 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java
  35. 191 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OperatingReportNewServiceImpl.java
  36. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentLessonExaminationDetailServiceImpl.java
  37. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderDetailServiceImpl.java
  38. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  39. 122 42
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempBuyFreeLiveTheoryCourseServiceImpl.java
  40. 0 3
      mec-biz/src/main/resources/config/mybatis/ClassGroupStudentMapperMapper.xml
  41. 23 0
      mec-biz/src/main/resources/config/mybatis/CloudTeacherOrderMapper.xml
  42. 2 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  43. 3 2
      mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml
  44. 3 2
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesMapper.xml
  45. 14 4
      mec-biz/src/main/resources/config/mybatis/FinancialExpenditureMapper.xml
  46. 0 24
      mec-biz/src/main/resources/config/mybatis/HumanCostMapper.xml
  47. 85 3
      mec-biz/src/main/resources/config/mybatis/OperatingReportNewMapper.xml
  48. 21 0
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  49. 1 1
      mec-education/src/main/resources/bootstrap-test.properties
  50. 1 1
      mec-eureka/src/main/resources/bootstrap-test.properties
  51. 1 1
      mec-gateway/mec-gateway-web/src/main/resources/bootstrap-test.properties
  52. 1 1
      mec-im/src/main/resources/bootstrap-test.properties
  53. 1 1
      mec-mall/mall-admin/src/main/resources/bootstrap-test.properties
  54. 1 1
      mec-mall/mall-portal/src/main/resources/bootstrap-test.properties
  55. 1 1
      mec-monitor/src/main/resources/bootstrap-test.properties
  56. 1 1
      mec-student/src/main/resources/bootstrap-test.properties
  57. 1 1
      mec-task/src/main/resources/bootstrap-test.properties
  58. 8 1
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/ExtracurricularExercisesController.java
  59. 1 1
      mec-teacher/src/main/resources/bootstrap-test.properties
  60. 35 53
      mec-web/src/main/java/com/ym/mec/web/controller/ImportController.java
  61. 1 1
      mec-web/src/main/resources/bootstrap-test.properties
  62. 7 1
      mec-web/src/main/resources/columnMapper.ini
  63. BIN
      mec-web/src/main/resources/excelTemplate/经营报表外部数据导入模板.xls
  64. 14 2
      mec-web/src/main/resources/exportColumnMapper.ini
  65. 1 1
      mec-websocket/src/main/resources/bootstrap-test.properties

+ 1 - 1
audio-analysis/src/main/java/com/yonge/audio/AudioAnalysisServerApplication.java

@@ -22,7 +22,7 @@ import com.ym.mec.common.config.LocalFastJsonHttpMessageConverter;
 @SpringBootApplication
 @EnableDiscoveryClient
 @EnableFeignClients("com.ym.mec")
-@MapperScan("com.ym.mec.biz.dal.dao")
+@MapperScan({"com.ym.mec.biz.dal.dao","com.ym.mec.biz.dal.mapper"})
 @ComponentScan(basePackages = { "com.yonge.netty", "com.ym.mec", "com.yonge.log" })
 @Configuration
 @EnableSwagger2Doc

+ 3 - 1
audio-analysis/src/main/java/com/yonge/netty/dto/UserChannelContext.java

@@ -341,7 +341,7 @@ public class UserChannelContext {
 			amplitude = (int) Signals.norm(samples);
 		}else if(StringUtils.equalsIgnoreCase(evaluationCriteria, EvaluationCriteriaEnum.DECIBELS.getCode())){
 			amplitude = (int) Signals.decibels(samples);
-			amplitude = amplitude >= 50 ? amplitude : 0;
+			amplitude = amplitude >= 60 ? amplitude : 0;
 		}
 		//float rms = Signals.rms(samples);
 		
@@ -911,6 +911,7 @@ public class UserChannelContext {
 		boolean isContinue = true;
 		int firstPeakIndex = -1;
 		int peakSize = 0;
+		
 		for (int i = 1; i < chunkAmplitudeList.size(); i++) {
 			if (Math.abs(chunkAmplitudeList.get(i) - chunkAmplitudeList.get(i - 1)) < hardLevel.getAmplitudeThreshold()) {
 				continue;
@@ -939,6 +940,7 @@ public class UserChannelContext {
 			tempo = true;
 		}else{
 			tempo = false;
+			LOGGER.debug("有多个波峰");
 		}
 		
 		if (tempo) {

+ 1 - 1
audio-analysis/src/main/resources/bootstrap-test.properties

@@ -1,7 +1,7 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=43.137.4.92:8848
+spring.cloud.nacos.config.server-addr=10.206.0.17:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
 spring.cloud.nacos.config.namespace=414816a2-0087-48ac-b50b-375d61cf1cd5
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e

+ 1 - 1
cms/src/main/resources/bootstrap-test.properties

@@ -1,7 +1,7 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=43.137.4.92:8848
+spring.cloud.nacos.config.server-addr=10.206.0.17:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
 spring.cloud.nacos.config.namespace=414816a2-0087-48ac-b50b-375d61cf1cd5
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e

+ 1 - 1
mec-auth/mec-auth-server/src/main/resources/bootstrap-test.properties

@@ -1,7 +1,7 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=43.137.4.92:8848
+spring.cloud.nacos.config.server-addr=10.206.0.17:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
 spring.cloud.nacos.config.namespace=414816a2-0087-48ac-b50b-375d61cf1cd5
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e

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

@@ -108,4 +108,14 @@ public interface CloudTeacherOrderDao extends BaseDAO<Long, CloudTeacherOrder> {
 
     //获取待激活学员数
     List<Map<Integer, Long>> getWaitActivateMap(@Param("organIds") List<Integer> organIds);
+
+    List<Map<Integer, BigDecimal>> sumPersonIncome(@Param("month") String month);
+
+    List<Map<Integer,BigDecimal>> sumGroupCloudAmount(@Param("month") String month,
+                                                      @Param("firstDay") String firstDayOfMonth,
+                                                      @Param("lastDay") String lastDayOfMonth);
+
+    List<Map<Integer,BigDecimal>> sumPersonalCloudAmount(@Param("month") String month,
+                                                         @Param("firstDay") String firstDayOfMonth,
+                                                         @Param("lastDay") String lastDayOfMonth);
 }

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

@@ -1,6 +1,8 @@
 package com.ym.mec.biz.dal.dao;
 
-import com.ym.mec.biz.dal.dto.OperatingReportNewDto1;
+import com.ym.mec.biz.dal.dto.HumanTypeDto;
+import com.ym.mec.biz.dal.dto.OASummaryExpensesDto;
+import com.ym.mec.biz.dal.entity.FinancialExpenditure;
 import com.ym.mec.biz.dal.entity.OperatingReportNew;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
@@ -101,4 +103,19 @@ public interface OperatingReportNewDao extends BaseDAO<Integer, OperatingReportN
 
     //课程未开始团体云教练预收
     List<Map<Integer,BigDecimal>> sumNotStartCloudPreAmount();
+
+    //统计学员管理费
+    List<Map<Integer,BigDecimal>> sumStudentManagementFee();
+
+    //统计总部的销售收入,成本
+    OperatingReportNew sumTotalSellAmount(@Param("month") String currentMonth);
+
+    //oa费用汇总
+    List<OASummaryExpensesDto> queryOASummaryExpenses(String month);
+
+    //统计额外的经营报表的收入
+    List<HumanTypeDto> sumHumanCost(@Param("month") String currentMonth);
+
+    //oa费用明细
+    List<FinancialExpenditure> queryOASummaryExpensesDetail(@Param("month") String month);
 }

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

@@ -184,6 +184,7 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
      * @param params
      * @return
      */
+
     List<StudentPaymentOrderExportDto> ExportQueryPage(Map<String, Object> params);
 
     List<StudentPaymentOrderMallExportDto> exportMallQueryPage(Map<String, Object> params);
@@ -452,4 +453,9 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
 
     //用户户购买过的活动的次数
     int countByActivityIds(@Param("activityIds") List<String> activityIds, @Param("userId") Integer userId);
+
+
+    List<StudentPaymentOrderExportDto> ExportQueryPage1(Map<String, Object> params);
+
+    int queryCount1(Map<String, Object> params);
 }

+ 16 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/HumanTypeDto.java

@@ -0,0 +1,16 @@
+package com.ym.mec.biz.dal.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class HumanTypeDto {
+    private Integer organId;
+    private BigDecimal fixedCost = BigDecimal.ZERO; // 固定人力成本
+    private BigDecimal variableCost = BigDecimal.ZERO; // 变动人力成本
+    private BigDecimal networkClassroomCost = BigDecimal.ZERO; // 网络教室成本
+    private BigDecimal cloudCoachingCost = BigDecimal.ZERO; // 云教练成本
+    private BigDecimal internalSettlement = BigDecimal.ZERO; // 内部结算
+    private BigDecimal studentManagementFeeAdjustment = BigDecimal.ZERO; // 学员管理费调整
+}

+ 74 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/OASummaryExpensesDto.java

@@ -0,0 +1,74 @@
+package com.ym.mec.biz.dal.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class OASummaryExpensesDto {
+    // 组织id
+    private String organName;
+
+    // 房屋租金
+    private BigDecimal house;
+
+    // 办公用品
+    private BigDecimal office;
+
+    // 物业费
+    private BigDecimal mainsProperty;
+
+    // 差旅费
+    private BigDecimal travel;
+
+    // 服务费
+    private BigDecimal services;
+
+    // 福利费
+    private BigDecimal welfare;
+
+    // 活动费
+    private BigDecimal activities;
+
+    // 交通费
+    private BigDecimal traffic;
+
+    // 证书费
+    private BigDecimal certificates;
+
+    // 仪器设备
+    private BigDecimal instrument;
+
+    // 通信费
+    private BigDecimal communications;
+
+    // 邮政快递
+    private BigDecimal postalTransport;
+
+    // 招待费
+    private BigDecimal hospitality;
+
+    // 退款
+    private BigDecimal refund;
+
+    // 其他费用
+    private BigDecimal other;
+
+    // 固定人力成本
+    private BigDecimal fixedHumanCost;
+
+    // 变动人力成本
+    private BigDecimal variableHumanCost;
+
+    // 网络教室成本
+    private BigDecimal network;
+
+    // 云教练成本
+    private BigDecimal cloudCoachingCost;
+
+    // 内部结算
+    private BigDecimal internalSettlement;
+
+    // 学员管理费调整
+    private BigDecimal studentManagementFeeAdjustment;
+}

+ 56 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/OperatingTotalIncomeDto.java

@@ -0,0 +1,56 @@
+package com.ym.mec.biz.dal.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class OperatingTotalIncomeDto {
+    // 城市
+    private String organName;
+
+    // 学生指导费课耗收入
+    private BigDecimal studentGuidanceIncome = BigDecimal.ZERO;
+
+    // 云教练团课耗收入
+//    private BigDecimal cloudCoachGroupClassIncome;
+
+    // 学校课程采买课耗收入
+    private BigDecimal coursePurchaseIncome = BigDecimal.ZERO;
+
+    // 考级
+    private BigDecimal examIncome = BigDecimal.ZERO;
+
+    // 维修费用
+    private BigDecimal maintenanceCost = BigDecimal.ZERO;
+
+    // 乐保费用
+    private BigDecimal instrumentInsuranceCost = BigDecimal.ZERO;
+
+    // 其他服务收入
+    private BigDecimal otherServiceIncome = BigDecimal.ZERO;
+
+    // 云教练团云教练收入
+    private BigDecimal cloudCoachIncome = BigDecimal.ZERO;
+
+    // 个人云教练收入
+    private BigDecimal saleCloudCoachIncome = BigDecimal.ZERO;
+
+    // 团购乐器
+    private BigDecimal groupPurchaseInstruments = BigDecimal.ZERO;
+
+    // 团购教辅
+    private BigDecimal groupPurchaseTeachingAids = BigDecimal.ZERO;
+
+    // 其他(零售乐器、教辅)
+    private BigDecimal otherIncome = BigDecimal.ZERO;
+
+    // 大件乐器
+    private BigDecimal largeInstruments = BigDecimal.ZERO;
+
+    // 服务收入
+    private BigDecimal serviceIncome = BigDecimal.ZERO;
+
+    // 销售收入
+    private BigDecimal salesIncome = BigDecimal.ZERO;
+}

+ 6 - 71
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PWorkOrderInfo.java

@@ -1,5 +1,10 @@
 package com.ym.mec.biz.dal.dto;
 
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
 public class PWorkOrderInfo {
     private Integer id;
 
@@ -19,75 +24,5 @@ public class PWorkOrderInfo {
 
     private Integer deptId;
 
-    public Integer getDeptId() {
-        return deptId;
-    }
-
-    public void setDeptId(Integer deptId) {
-        this.deptId = deptId;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public Integer getId() {
-        return id;
-    }
-
-    public void setId(Integer id) {
-        this.id = id;
-    }
-
-    public Integer getProcess() {
-        return process;
-    }
-
-    public void setProcess(Integer process) {
-        this.process = process;
-    }
-
-    public Integer getClassify() {
-        return classify;
-    }
-
-    public void setClassify(Integer classify) {
-        this.classify = classify;
-    }
-
-    public Boolean getEnd() {
-        return isEnd;
-    }
-
-    public void setEnd(Boolean end) {
-        isEnd = end;
-    }
-
-    public Boolean getDenied() {
-        return isDenied;
-    }
-
-    public void setDenied(Boolean denied) {
-        isDenied = denied;
-    }
-
-    public Boolean getCancel() {
-        return isCancel;
-    }
-
-    public void setCancel(Boolean cancel) {
-        isCancel = cancel;
-    }
-
-    public Integer getCreator() {
-        return creator;
-    }
-
-    public void setCreator(Integer creator) {
-        this.creator = creator;
-    }
+    private Date updateTime;
 }

+ 2 - 296
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentPaymentOrderExportDto.java

@@ -4,10 +4,12 @@ import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
 import com.ym.mec.common.enums.BaseEnum;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.math.BigDecimal;
 import java.util.List;
 
+@Data
 public class StudentPaymentOrderExportDto extends StudentPaymentOrderRouteDto {
     @ApiModelProperty(value = "分部",required = true)
     private String organName;
@@ -195,300 +197,4 @@ public class StudentPaymentOrderExportDto extends StudentPaymentOrderRouteDto {
 
     @ApiModelProperty(value = "教学点",required = true)
     private String schoolName;
-
-    public String getOrganName() {
-        return organName;
-    }
-
-    public void setOrganName(String organName) {
-        this.organName = organName;
-    }
-
-    public String getUserOrganName() {
-        return userOrganName;
-    }
-
-    public void setUserOrganName(String userOrganName) {
-        this.userOrganName = userOrganName;
-    }
-
-    public BigDecimal getSporadicAmount() {
-        return sporadicAmount;
-    }
-
-    public void setSporadicAmount(BigDecimal sporadicAmount) {
-        this.sporadicAmount = sporadicAmount;
-    }
-
-    public String getSporadicType() {
-        return sporadicType;
-    }
-
-    public void setSporadicType(String sporadicType) {
-        this.sporadicType = sporadicType;
-    }
-
-    public BigDecimal getMusicalFee() {
-        return musicalFee;
-    }
-
-    public void setMusicalFee(BigDecimal musicalFee) {
-        this.musicalFee = musicalFee;
-    }
-
-    public BigDecimal getLeaseFee() {
-        return leaseFee;
-    }
-
-    public void setLeaseFee(BigDecimal leaseFee) {
-        this.leaseFee = leaseFee;
-    }
-
-    public BigDecimal getTeachingFee() {
-        return teachingFee;
-    }
-
-    public void setTeachingFee(BigDecimal teachingFee) {
-        this.teachingFee = teachingFee;
-    }
-
-    public BigDecimal getRepairFee() {
-        return repairFee;
-    }
-
-    public void setRepairFee(BigDecimal repairFee) {
-        this.repairFee = repairFee;
-    }
-
-    public BigDecimal getMusicGroupCourseFee() {
-        return musicGroupCourseFee;
-    }
-
-    public void setMusicGroupCourseFee(BigDecimal musicGroupCourseFee) {
-        this.musicGroupCourseFee = musicGroupCourseFee;
-    }
-
-    public BigDecimal getCourseSchoolBuyAmount() {
-        return courseSchoolBuyAmount;
-    }
-
-    public void setCourseSchoolBuyAmount(BigDecimal courseSchoolBuyAmount) {
-        this.courseSchoolBuyAmount = courseSchoolBuyAmount;
-    }
-
-    public BigDecimal getHighCourseFee() {
-        return highCourseFee;
-    }
-
-    public void setHighCourseFee(BigDecimal highCourseFee) {
-        this.highCourseFee = highCourseFee;
-    }
-
-    public BigDecimal getVipCourseFee() {
-        return vipCourseFee;
-    }
-
-    public void setVipCourseFee(BigDecimal vipCourseFee) {
-        this.vipCourseFee = vipCourseFee;
-    }
-
-    public BigDecimal getPracticeCourseFee() {
-        return practiceCourseFee;
-    }
-
-    public void setPracticeCourseFee(BigDecimal practiceCourseFee) {
-        this.practiceCourseFee = practiceCourseFee;
-    }
-
-    public BigDecimal getTheoryCourseFee() {
-        return theoryCourseFee;
-    }
-
-    public void setTheoryCourseFee(BigDecimal theoryCourseFee) {
-        this.theoryCourseFee = theoryCourseFee;
-    }
-
-    public BigDecimal getDegreeFee() {
-        return degreeFee;
-    }
-
-    public void setDegreeFee(BigDecimal degreeFee) {
-        this.degreeFee = degreeFee;
-    }
-
-    public BigDecimal getOtherFee() {
-        return otherFee;
-    }
-
-    public void setOtherFee(BigDecimal otherFee) {
-        this.otherFee = otherFee;
-    }
-
-    public BigDecimal getMaintenanceFee() {
-        return maintenanceFee;
-    }
-
-    public void setMaintenanceFee(BigDecimal maintenanceFee) {
-        this.maintenanceFee = maintenanceFee;
-    }
-
-    public BigDecimal getRetailGoodsFee() {
-        return retailGoodsFee;
-    }
-
-    public void setRetailGoodsFee(BigDecimal retailGoodsFee) {
-        this.retailGoodsFee = retailGoodsFee;
-    }
-
-    public BigDecimal getLargeMusicalFee() {
-        return largeMusicalFee;
-    }
-
-    public void setLargeMusicalFee(BigDecimal largeMusicalFee) {
-        this.largeMusicalFee = largeMusicalFee;
-    }
-
-    public BigDecimal getMaintenanceProductFee() {
-        return maintenanceProductFee;
-    }
-
-    public void setMaintenanceProductFee(BigDecimal maintenanceProductFee) {
-        this.maintenanceProductFee = maintenanceProductFee;
-    }
-
-    public BigDecimal getCloudTeacherFee() {
-        return cloudTeacherFee;
-    }
-
-    public void setCloudTeacherFee(BigDecimal cloudTeacherFee) {
-        this.cloudTeacherFee = cloudTeacherFee;
-    }
-
-    public BigDecimal getVisitFee() {
-        return visitFee;
-    }
-
-    public void setVisitFee(BigDecimal visitFee) {
-        this.visitFee = visitFee;
-    }
-
-    public BigDecimal getRechargeFee() {
-        return rechargeFee;
-    }
-
-    public void setRechargeFee(BigDecimal rechargeFee) {
-        this.rechargeFee = rechargeFee;
-    }
-
-    public String getSubjectName() {
-        return subjectName;
-    }
-
-    public void setSubjectName(String subjectName) {
-        this.subjectName = subjectName;
-    }
-
-    public String getCooperationOrganName() {
-        return cooperationOrganName;
-    }
-
-    public void setCooperationOrganName(String cooperationOrganName) {
-        this.cooperationOrganName = cooperationOrganName;
-    }
-
-    public String getEduTeacher() {
-        return eduTeacher;
-    }
-
-    public void setEduTeacher(String eduTeacher) {
-        this.eduTeacher = eduTeacher;
-    }
-
-    public Integer getChargeType() {
-        return chargeType;
-    }
-
-    public void setChargeType(Integer chargeType) {
-        this.chargeType = chargeType;
-    }
-
-    public List<StudentPaymentOrderDetail> getOrderDetailList() {
-        return orderDetailList;
-    }
-
-    public void setOrderDetailList(List<StudentPaymentOrderDetail> orderDetailList) {
-        this.orderDetailList = orderDetailList;
-    }
-
-    public List<Goods> getGoodsList() {
-        return goodsList;
-    }
-
-    public void setGoodsList(List<Goods> goodsList) {
-        this.goodsList = goodsList;
-    }
-
-    public String getFeeFlag() {
-        return feeFlag;
-    }
-
-    public void setFeeFlag(String feeFlag) {
-        this.feeFlag = feeFlag;
-    }
-
-    public Integer getPayingStatus() {
-        return payingStatus;
-    }
-
-    public void setPayingStatus(Integer payingStatus) {
-        this.payingStatus = payingStatus;
-    }
-
-    public BigDecimal getOrderAmount() {
-        return orderAmount;
-    }
-
-    public void setOrderAmount(BigDecimal orderAmount) {
-        this.orderAmount = orderAmount;
-    }
-
-    public BigDecimal getTranslatedIncome() {
-        return translatedIncome;
-    }
-
-    public void setTranslatedIncome(BigDecimal translatedIncome) {
-        this.translatedIncome = translatedIncome;
-    }
-
-    public String getTypeDesc() {
-        return typeDesc;
-    }
-
-    public void setTypeDesc(String typeDesc) {
-        this.typeDesc = typeDesc;
-    }
-
-    public String getFeeMusicGroupId() {
-        return feeMusicGroupId;
-    }
-
-    public void setFeeMusicGroupId(String feeMusicGroupId) {
-        this.feeMusicGroupId = feeMusicGroupId;
-    }
-
-    public String getFeeMusicGroupName() {
-        return feeMusicGroupName;
-    }
-
-    public void setFeeMusicGroupName(String feeMusicGroupName) {
-        this.feeMusicGroupName = feeMusicGroupName;
-    }
-
-    public String getSchoolName() {
-        return schoolName;
-    }
-
-    public void setSchoolName(String schoolName) {
-        this.schoolName = schoolName;
-    }
 }

+ 2 - 64
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentPaymentOrderRouteDto.java

@@ -2,9 +2,11 @@ package com.ym.mec.biz.dal.dto;
 
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.math.BigDecimal;
 
+@Data
 public class StudentPaymentOrderRouteDto extends StudentPaymentOrder {
     //汇付手续费
     @ApiModelProperty(value = "汇付手续费",required = true)
@@ -36,68 +38,4 @@ public class StudentPaymentOrderRouteDto extends StudentPaymentOrder {
 
     @ApiModelProperty(value = "服务费",required = true)
     private BigDecimal serviceFee = BigDecimal.ZERO;
-
-    public BigDecimal getTransferFee() {
-        return transferFee;
-    }
-
-    public void setTransferFee(BigDecimal transferFee) {
-        this.transferFee = transferFee;
-    }
-
-    public BigDecimal getPlatformFee() {
-        return platformFee;
-    }
-
-    public void setPlatformFee(BigDecimal platformFee) {
-        this.platformFee = platformFee;
-    }
-
-    public String getRouteMerNo() {
-        return routeMerNo;
-    }
-
-    public void setRouteMerNo(String routeMerNo) {
-        this.routeMerNo = routeMerNo;
-    }
-
-    public BigDecimal getRouteAmount() {
-        return routeAmount;
-    }
-
-    public void setRouteAmount(BigDecimal routeAmount) {
-        this.routeAmount = routeAmount;
-    }
-
-    public BigDecimal getRouteBalance() {
-        return routeBalance;
-    }
-
-    public void setRouteBalance(BigDecimal routeBalance) {
-        this.routeBalance = routeBalance;
-    }
-
-    public BigDecimal getSaleAmount() {
-        return saleAmount;
-    }
-
-    public void setSaleAmount(BigDecimal saleAmount) {
-        this.saleAmount = saleAmount;
-    }
-
-    public BigDecimal getServiceAmount() {
-        return serviceAmount;
-    }
-
-    public void setServiceAmount(BigDecimal serviceAmount) {
-        this.serviceAmount = serviceAmount;
-    }
-
-    public BigDecimal getServiceFee() {
-        return serviceFee;
-    }
-
-    public void setServiceFee(BigDecimal serviceFee) {
-        this.serviceFee = serviceFee;
-    }
 }

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

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.entity;
 
 import com.ym.mec.biz.dal.enums.PeriodEnum;
+import com.ym.mec.common.tenant.TenantContextHolder;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -8,114 +9,65 @@ import java.math.BigDecimal;
 import java.util.Date;
 
 import com.ym.mec.common.entity.BaseEntity;
+import lombok.Data;
 
 @ApiModel(value = "com-domain-CloudTeacherOrder")
-public class CloudTeacherOrder extends BaseEntity {
+@Data
+public class CloudTeacherOrder {
     @ApiModelProperty(value = "")
     private Long id;
 
-    /**
-     * 学生id
-     */
     @ApiModelProperty(value = "分部id")
     private Integer organId;
 
-    /**
-     * 学生id
-     */
     @ApiModelProperty(value = "学生id")
     private Integer studentId;
 
-    /**
-     * 时长类型 1-天 2-月 3-年
-     */
     @ApiModelProperty(value = "时长类型 1-天 2-月 3-年")
     private PeriodEnum type;
 
-    /**
-     * 时长类型 1-天 2-月 3-年
-     */
     @ApiModelProperty(value = "会员等级")
     private Integer level;
 
-    /**
-     * 购买时长
-     */
     @ApiModelProperty(value = "购买时长")
     private Integer time;
 
-    /**
-     * 购买价格
-     */
     @ApiModelProperty(value = "购买价格")
     private BigDecimal amount;
 
     @ApiModelProperty(value = "经营报表结算价")
     private BigDecimal operatingAmount = BigDecimal.ZERO;
 
-    /**
-     * 退回金额
-     */
     @ApiModelProperty(value = "退回金额")
     private BigDecimal refundAmount = BigDecimal.ZERO;
 
-    /**
-     * 1-生效中 2-已生效 3-已退
-     */
     @ApiModelProperty(value = "1-生效中 2-已生效 3-已退")
     private Integer status;
 
-    /**
-     * 服务开始时间
-     */
     @ApiModelProperty(value = "服务开始时间")
     private Date startTime;
 
-    /**
-     * 服务结束时间
-     */
     @ApiModelProperty(value = "服务结束时间")
     private Date endTime;
 
-    /**
-     * 订单id
-     */
     @ApiModelProperty(value = "订单id")
     private Long orderId;
 
-    /**
-     * 平台订单id
-     */
     @ApiModelProperty(value = "订单id")
     private Long platformOrderId;
 
-    /**
-     * 备注
-     */
     @ApiModelProperty(value = "备注")
     private String remark = "";
 
-    /**
-     * 活动备注
-     */
     @ApiModelProperty(value = "活动备注")
     private Integer activeRemark;
 
-    /**
-     * 备注
-     */
     @ApiModelProperty(value = "版本")
     private Integer version = 0;
 
-    /**
-     * 创建时间
-     */
     @ApiModelProperty(value = "创建时间")
     private Date createTime;
 
-    /**
-     * 更新时间
-     */
     @ApiModelProperty(value = "更新时间")
     private Date updateTime;
 
@@ -124,193 +76,5 @@ public class CloudTeacherOrder extends BaseEntity {
     
     private StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
 
-    public BigDecimal getOperatingAmount() {
-        return operatingAmount;
-    }
-
-    public void setOperatingAmount(BigDecimal operatingAmount) {
-        this.operatingAmount = operatingAmount;
-    }
-
-    public Integer getActiveRemark() {
-        return activeRemark;
-    }
-
-    public void setActiveRemark(Integer activeRemark) {
-        this.activeRemark = activeRemark;
-    }
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Integer getStudentId() {
-        return studentId;
-    }
-
-    public void setStudentId(Integer studentId) {
-        this.studentId = studentId;
-    }
-
-    public PeriodEnum getType() {
-        return type;
-    }
-
-    public void setType(PeriodEnum type) {
-        this.type = type;
-    }
-
-    public Integer getTime() {
-        return time;
-    }
-
-    public void setTime(Integer time) {
-        this.time = time;
-    }
-
-    public BigDecimal getAmount() {
-        return amount;
-    }
-
-    public void setAmount(BigDecimal amount) {
-        this.amount = amount;
-    }
-
-    public BigDecimal getRefundAmount() {
-        return refundAmount;
-    }
-
-    public void setRefundAmount(BigDecimal refundAmount) {
-        this.refundAmount = refundAmount;
-    }
-
-    public Integer getStatus() {
-        return status;
-    }
-
-    public void setStatus(Integer status) {
-        this.status = status;
-    }
-
-    public Long getOrderId() {
-        return orderId;
-    }
-
-    public void setOrderId(Long orderId) {
-        this.orderId = orderId;
-    }
-
-    public String getRemark() {
-        return remark;
-    }
-
-    public void setRemark(String remark) {
-        this.remark = remark;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public Date getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Date updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public Integer getLevel() {
-        return level;
-    }
-
-    public void setLevel(Integer level) {
-        this.level = level;
-    }
-
-    public Date getStartTime() {
-        return startTime;
-    }
-
-    public void setStartTime(Date startTime) {
-        this.startTime = startTime;
-    }
-
-    public Date getEndTime() {
-        return endTime;
-    }
-
-    public void setEndTime(Date endTime) {
-        this.endTime = endTime;
-    }
-
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-        sb.append(getClass().getSimpleName());
-        sb.append(" [");
-        sb.append("Hash = ").append(hashCode());
-        sb.append(", id=").append(id);
-        sb.append(", studentId=").append(studentId);
-        sb.append(", type=").append(type);
-        sb.append(", time=").append(time);
-        sb.append(", amount=").append(amount);
-        sb.append(", refundAmount=").append(refundAmount);
-        sb.append(", status=").append(status);
-        sb.append(", orderId=").append(orderId);
-        sb.append(", platformOrderId=").append(platformOrderId);
-        sb.append(", remark=").append(remark);
-        sb.append(", createTime=").append(createTime);
-        sb.append(", updateTime=").append(updateTime);
-        sb.append("]");
-        return sb.toString();
-    }
-
-    public Integer getOrganId() {
-        return organId;
-    }
-
-    public void setOrganId(Integer organId) {
-        this.organId = organId;
-    }
-
-    public String getMusicGroupId() {
-        return musicGroupId;
-    }
-
-    public void setMusicGroupId(String musicGroupId) {
-        this.musicGroupId = musicGroupId;
-    }
-
-	public StudentPaymentOrder getStudentPaymentOrder() {
-		return studentPaymentOrder;
-	}
-
-	public void setStudentPaymentOrder(StudentPaymentOrder studentPaymentOrder) {
-		this.studentPaymentOrder = studentPaymentOrder;
-	}
-
-    public Long getPlatformOrderId() {
-        return platformOrderId;
-    }
-
-    public void setPlatformOrderId(Long platformOrderId) {
-        this.platformOrderId = platformOrderId;
-    }
-
-    public Integer getVersion() {
-        return version;
-    }
-
-    public void setVersion(Integer version) {
-        this.version = version;
-    }
+    private Integer tenantId = TenantContextHolder.getTenantId();
 }

+ 16 - 265
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/FinancialExpenditure.java

@@ -3,8 +3,11 @@ package com.ym.mec.biz.dal.entity;
 import com.ym.mec.biz.dal.enums.ExpenditureTypeEnum;
 import com.ym.mec.biz.dal.enums.FeeProjectEnum;
 import com.ym.mec.common.entity.BaseEntity;
-
+import com.ym.mec.common.tenant.TenantContextHolder;
+import com.ym.mec.util.date.DateUtil;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.apache.commons.lang3.StringUtils;
 
 import java.math.BigDecimal;
 import java.util.Date;
@@ -15,7 +18,8 @@ import static com.ym.mec.biz.dal.enums.ExpenditureTypeEnum.REFUND;
 /**
  * 对应数据库表(financial_expenditure):
  */
-public class FinancialExpenditure extends BaseEntity {
+@Data
+public class FinancialExpenditure {
 
 	private Integer id;
 	/**  */
@@ -55,6 +59,15 @@ public class FinancialExpenditure extends BaseEntity {
 	@ApiModelProperty(value = "费用明细",required = false)
 	private String itemDetail;
 	/**  */
+	@ApiModelProperty(value = "费用分摊日期",required = false)
+	private String effectiveTime;
+	/**  */
+	@ApiModelProperty(value = "审批通过时间",required = false)
+	private Date aprovalTime;
+
+	@ApiModelProperty(value = "当月实际金额",required = false)
+	private BigDecimal currentAmount = BigDecimal.ZERO;;
+	/**  */
 	@ApiModelProperty(value = "支付时间",required = false)
 	private Date paymentTime;
 	/**  */
@@ -104,269 +117,7 @@ public class FinancialExpenditure extends BaseEntity {
 
 	private boolean maintenanceFeeFlag;
 
-	public Integer getProcessId() {
-		return processId;
-	}
-
-	public void setProcessId(Integer processId) {
-		this.processId = processId;
-	}
-
-	public Integer getApplyUserId() {
-		return applyUserId;
-	}
-
-	public void setApplyUserId(Integer applyUserId) {
-		this.applyUserId = applyUserId;
-	}
-
-	public String getMerNo() {
-		return merNo;
-	}
-
-	public void setMerNo(String merNo) {
-		this.merNo = merNo;
-	}
-
-	public String getBankAddress() {
-		return bankAddress;
-	}
-
-	public void setBankAddress(String bankAddress) {
-		this.bankAddress = bankAddress;
-	}
-
-	public String getMerNoName() {
-		return merNoName;
-	}
-
-	public void setMerNoName(String merNoName) {
-		this.merNoName = merNoName;
-	}
-
-	public boolean isRefundInstrumentFeeFlag() {
-		return refundInstrumentFeeFlag;
-	}
-
-	public void setRefundInstrumentFeeFlag(boolean refundInstrumentFeeFlag) {
-		this.refundInstrumentFeeFlag = refundInstrumentFeeFlag;
-	}
-
-	public boolean isRefundTeachingAssistantsFeeFlag() {
-		return refundTeachingAssistantsFeeFlag;
-	}
-
-	public void setRefundTeachingAssistantsFeeFlag(boolean refundTeachingAssistantsFeeFlag) {
-		this.refundTeachingAssistantsFeeFlag = refundTeachingAssistantsFeeFlag;
-	}
-
-	public boolean isMaintenanceFeeFlag() {
-		return maintenanceFeeFlag;
-	}
-
-	public void setMaintenanceFeeFlag(boolean maintenanceFeeFlag) {
-		this.maintenanceFeeFlag = maintenanceFeeFlag;
-	}
-
-	public String getGroupType() {
-		return groupType;
-	}
-
-	public void setGroupType(String groupType) {
-		this.groupType = groupType;
-	}
-
-	public String getMusicGroupId() {
-		return musicGroupId;
-	}
-
-	public void setMusicGroupId(String musicGroupId) {
-		this.musicGroupId = musicGroupId;
-	}
-
-	public String getReturnFeeType() {
-		return returnFeeType;
-	}
-
-	public void setReturnFeeType(String returnFeeType) {
-		this.returnFeeType = returnFeeType;
-	}
-
-	public Long getVipGroupId() {
-		return vipGroupId;
-	}
-
-	public void setVipGroupId(Long vipGroupId) {
-		this.vipGroupId = vipGroupId;
-	}
-
-	public Integer getStudentId() {
-		return studentId;
-	}
-
-	public void setStudentId(Integer studentId) {
-		this.studentId = studentId;
-	}
-
-	public String getApplyUser() {
-		return applyUser;
-	}
-
-	public void setApplyUser(String applyUser) {
-		this.applyUser = applyUser;
-	}
-
-	public FeeProjectEnum getFeeProject() {
-		return feeProject;
-	}
-
-	public void setFeeProject(FeeProjectEnum feeProject) {
-		this.feeProject = feeProject;
-	}
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getBatchNo() {
-		return batchNo;
-	}
-
-	public void setBatchNo(String batchNo) {
-		this.batchNo = batchNo;
-	}
-
-	public String getFinancialProcessNo() {
-		return financialProcessNo;
-	}
-
-	public void setFinancialProcessNo(String financialProcessNo) {
-		this.financialProcessNo = financialProcessNo;
-	}
-
-	public String getDingtalkProcessNo() {
-		return dingtalkProcessNo;
-	}
-
-	public void setDingtalkProcessNo(String dingtalkProcessNo) {
-		this.dingtalkProcessNo = dingtalkProcessNo;
-	}
-
-	public Integer getOrganId() {
-		return organId;
-	}
-
-	public void setOrganId(Integer organId) {
-		this.organId = organId;
-	}
-
-	public Integer getCooperationOrganId() {
-		return cooperationOrganId;
-	}
-
-	public void setCooperationOrganId(Integer cooperationOrganId) {
-		this.cooperationOrganId = cooperationOrganId;
-	}
-
-	public BigDecimal getAmount() {
-		return amount;
-	}
-
-	public void setAmount(BigDecimal amount) {
-		this.amount = amount;
-	}
-
-	public String getItemDetail() {
-		return itemDetail;
-	}
-
-	public void setItemDetail(String itemDetail) {
-		this.itemDetail = itemDetail;
-	}
-
-	public Date getPaymentTime() {
-		return paymentTime;
-	}
-
-	public void setPaymentTime(Date paymentTime) {
-		this.paymentTime = paymentTime;
-	}
-
-	public String getCause() {
-		return cause;
-	}
-
-	public void setCause(String cause) {
-		this.cause = cause;
-	}
-
-	public Date getCreateTime() {
-		return createTime;
-	}
-
-	public void setCreateTime(Date createTime) {
-		this.createTime = createTime;
-	}
-
-	public Date getUpdateTime() {
-		return updateTime;
-	}
-
-	public void setUpdateTime(Date updateTime) {
-		this.updateTime = updateTime;
-	}
-
-	public Integer getDelFlag() {
-		return delFlag;
-	}
-
-	public void setDelFlag(Integer delFlag) {
-		this.delFlag = delFlag;
-	}
-
-	public ExpenditureTypeEnum getType() {
-		return type;
-	}
-
-	public void setType(ExpenditureTypeEnum type) {
-		this.type = type;
-	}
-
-	public String getOrganName() {
-		return organName;
-	}
-
-	public void setOrganName(String organName) {
-		this.organName = organName;
-	}
-
-	public String getCooperationOrganName() {
-		return cooperationOrganName;
-	}
-
-	public void setCooperationOrganName(String cooperationOrganName) {
-		this.cooperationOrganName = cooperationOrganName;
-	}
-
-	public String getFeeType() {
-		return feeType;
-	}
-
-	public void setFeeType(String feeType) {
-		this.feeType = feeType;
-	}
-
-	public String getFeeProjectItem() {
-		return feeProjectItem;
-	}
-
-	public void setFeeProjectItem(String feeProjectItem) {
-		this.feeProjectItem = feeProjectItem;
-	}
+	private Integer tenantId = TenantContextHolder.getTenantId();
 
 	@Override
 	public boolean equals(Object o) {

+ 24 - 94
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/HumanCost.java

@@ -3,11 +3,12 @@ package com.ym.mec.biz.dal.entity;
 
 import java.math.BigDecimal;
 import java.util.Date;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.ym.mec.biz.dal.enums.HumanCostTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
 
 import java.io.Serializable;
 
@@ -18,103 +19,32 @@ import java.io.Serializable;
  * @since 2023-04-17 15:31:31
  */
 @ApiModel(value = "human_cost-人力资源成本")
-public class HumanCost implements Serializable {
-  @TableField("id_")
-     @ApiModelProperty(value = "${column.comment}")
+@Data
+@TableName("human_cost")
+public class HumanCost{
+    @TableId(value = "id_", type = IdType.AUTO)
     private Integer id;
-    
-  @TableField("organ_id_")
-     @ApiModelProperty(value = "分部")
-    private Integer organId;
-    
-  @TableField("organ_name_")
-     @ApiModelProperty(value = "分部")
-    private String organName;
-    
-  @TableField("fixed_cost_")
-     @ApiModelProperty(value = "固定成本")
-    private BigDecimal fixedCost;
-    
-  @TableField("change_cost_")
-     @ApiModelProperty(value = "变动成本")
-    private BigDecimal changeCost;
-    
-  @TableField("month_")
-     @ApiModelProperty(value = "月份")
-    private String month;
-    
-  @TableField("create_time_")
-     @ApiModelProperty(value = "${column.comment}")
-    private Date createTime;
-    
-  @TableField("update_time_")
-     @ApiModelProperty(value = "${column.comment}")
-    private Date updateTime;
-    
-    
-    public Integer getId() {
-        return id;
-    }
-
-    public void setId(Integer id) {
-        this.id = id;
-    }
-
-    public Integer getOrganId() {
-        return organId;
-    }
-
-    public void setOrganId(Integer organId) {
-        this.organId = organId;
-    }
-
-    public String getOrganName() {
-        return organName;
-    }
-
-    public void setOrganName(String organName) {
-        this.organName = organName;
-    }
 
-    public BigDecimal getFixedCost() {
-        return fixedCost;
-    }
-
-    public void setFixedCost(BigDecimal fixedCost) {
-        this.fixedCost = fixedCost;
-    }
-
-    public BigDecimal getChangeCost() {
-        return changeCost;
-    }
-
-    public void setChangeCost(BigDecimal changeCost) {
-        this.changeCost = changeCost;
-    }
-
-    public String getMonth() {
-        return month;
-    }
-
-    public void setMonth(String month) {
-        this.month = month;
-    }
+    @TableField("organ_id_")
+    @ApiModelProperty(value = "分部")
+    private Integer organId;
 
-    public Date getCreateTime() {
-        return createTime;
-    }
+    @TableField("human_cost_type_")
+    @ApiModelProperty(value = "费用类型")
+    private HumanCostTypeEnum humanCostType;
 
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
+    @TableField("amount_")
+    @ApiModelProperty(value = "费用")
+    private BigDecimal amount;
 
-    public Date getUpdateTime() {
-        return updateTime;
-    }
+    @TableField("month_")
+    @ApiModelProperty(value = "月份")
+    private String month;
 
-    public void setUpdateTime(Date updateTime) {
-        this.updateTime = updateTime;
-    }
+    @TableField("create_time_")
+    private Date createTime;
 
+    @TableField("update_time_")
+    private Date updateTime;
 }
 

+ 6 - 208
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/OperatingReportNew.java

@@ -1,9 +1,11 @@
 package com.ym.mec.biz.dal.entity;
 
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.math.BigDecimal;
 
+@Data
 public class OperatingReportNew {
 
     private Integer id;
@@ -46,6 +48,10 @@ public class OperatingReportNew {
     @ApiModelProperty(value="销售成本")
     private BigDecimal saleCost = BigDecimal.ZERO;
 
+    //学员管理费
+    @ApiModelProperty(value="学员管理费")
+    private BigDecimal studentManagementFee = BigDecimal.ZERO;
+
     //OA审批固定费用总和
     @ApiModelProperty(value="固定费用")
     private BigDecimal fixedCosts = BigDecimal.ZERO;
@@ -94,212 +100,4 @@ public class OperatingReportNew {
 
     @ApiModelProperty(value="月份")
     private String month;
-
-    public BigDecimal getMaintenanceAmount() {
-        return maintenanceAmount;
-    }
-
-    public void setMaintenanceAmount(BigDecimal maintenanceAmount) {
-        this.maintenanceAmount = maintenanceAmount;
-    }
-
-    public BigDecimal getCloudPrepaidFee() {
-        return cloudPrepaidFee;
-    }
-
-    public void setCloudPrepaidFee(BigDecimal cloudPrepaidFee) {
-        this.cloudPrepaidFee = cloudPrepaidFee;
-    }
-
-    public BigDecimal getCoursePrepaidFee() {
-        return coursePrepaidFee;
-    }
-
-    public void setCoursePrepaidFee(BigDecimal coursePrepaidFee) {
-        this.coursePrepaidFee = coursePrepaidFee;
-    }
-
-    public BigDecimal getSalePrepaidFee() {
-        return salePrepaidFee;
-    }
-
-    public void setSalePrepaidFee(BigDecimal salePrepaidFee) {
-        this.salePrepaidFee = salePrepaidFee;
-    }
-
-    public BigDecimal getOtherPrepaidFee() {
-        return otherPrepaidFee;
-    }
-
-    public void setOtherPrepaidFee(BigDecimal otherPrepaidFee) {
-        this.otherPrepaidFee = otherPrepaidFee;
-    }
-
-    public Integer getId() {
-        return id;
-    }
-
-    public void setId(Integer id) {
-        this.id = id;
-    }
-
-    public String getPrincipal() {
-        return principal;
-    }
-
-    public void setPrincipal(String principal) {
-        this.principal = principal;
-    }
-
-    public String getOrganName() {
-        return organName;
-    }
-
-    public void setOrganName(String organName) {
-        this.organName = organName;
-    }
-
-    public Integer getOrganId() {
-        return organId;
-    }
-
-    public void setOrganId(Integer organId) {
-        this.organId = organId;
-    }
-
-    public BigDecimal getSaleAmount() {
-        return saleAmount;
-    }
-
-    public void setSaleAmount(BigDecimal saleAmount) {
-        this.saleAmount = saleAmount;
-    }
-
-    public BigDecimal getServiceAmount() {
-        return serviceAmount;
-    }
-
-    public void setServiceAmount(BigDecimal serviceAmount) {
-        this.serviceAmount = serviceAmount;
-    }
-
-    public BigDecimal getCourseAmount() {
-        return courseAmount;
-    }
-
-    public void setCourseAmount(BigDecimal courseAmount) {
-        this.courseAmount = courseAmount;
-    }
-
-    public BigDecimal getCloudAmount() {
-        return cloudAmount;
-    }
-
-    public void setCloudAmount(BigDecimal cloudAmount) {
-        this.cloudAmount = cloudAmount;
-    }
-
-    public BigDecimal getBusinessRefund() {
-        return businessRefund;
-    }
-
-    public void setBusinessRefund(BigDecimal businessRefund) {
-        this.businessRefund = businessRefund;
-    }
-
-    public BigDecimal getTotalIncome() {
-        return totalIncome;
-    }
-
-    public void setTotalIncome(BigDecimal totalIncome) {
-        this.totalIncome = totalIncome;
-    }
-
-    public BigDecimal getSaleCost() {
-        return saleCost;
-    }
-
-    public void setSaleCost(BigDecimal saleCost) {
-        this.saleCost = saleCost;
-    }
-
-    public BigDecimal getFixedCosts() {
-        return fixedCosts;
-    }
-
-    public void setFixedCosts(BigDecimal fixedCosts) {
-        this.fixedCosts = fixedCosts;
-    }
-
-    public BigDecimal getVariableCosts() {
-        return variableCosts;
-    }
-
-    public void setVariableCosts(BigDecimal variableCosts) {
-        this.variableCosts = variableCosts;
-    }
-
-    public BigDecimal getInternalSettlement() {
-        return internalSettlement;
-    }
-
-    public void setInternalSettlement(BigDecimal internalSettlement) {
-        this.internalSettlement = internalSettlement;
-    }
-
-    public BigDecimal getTotalCost() {
-        return totalCost;
-    }
-
-    public void setTotalCost(BigDecimal totalCost) {
-        this.totalCost = totalCost;
-    }
-
-    public BigDecimal getQuasiDiscretionaryProfit() {
-        return quasiDiscretionaryProfit;
-    }
-
-    public void setQuasiDiscretionaryProfit(BigDecimal quasiDiscretionaryProfit) {
-        this.quasiDiscretionaryProfit = quasiDiscretionaryProfit;
-    }
-
-    public BigDecimal getPrepaidFee() {
-        return prepaidFee;
-    }
-
-    public void setPrepaidFee(BigDecimal prepaidFee) {
-        this.prepaidFee = prepaidFee;
-    }
-
-    public BigDecimal getPrepayments() {
-        return prepayments;
-    }
-
-    public void setPrepayments(BigDecimal prepayments) {
-        this.prepayments = prepayments;
-    }
-
-    public BigDecimal getReceivables() {
-        return receivables;
-    }
-
-    public void setReceivables(BigDecimal receivables) {
-        this.receivables = receivables;
-    }
-
-    public BigDecimal getPayable() {
-        return payable;
-    }
-
-    public void setPayable(BigDecimal payable) {
-        this.payable = payable;
-    }
-
-    public String getMonth() {
-        return month;
-    }
-
-    public void setMonth(String month) {
-        this.month = month;
-    }
 }

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

@@ -3,7 +3,7 @@ package com.ym.mec.biz.dal.enums;
 import com.baomidou.mybatisplus.annotation.EnumValue;
 import com.ym.mec.common.enums.BaseEnum;
 
-public enum DegreeTypeEnum implements BaseEnum<String, ComplaintsStatusEnum> {
+public enum DegreeTypeEnum implements BaseEnum<String, DegreeTypeEnum> {
     GRADE("GRADE", "专业考级"),
     THEORY("THEORY", "乐理考级");
 

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportEnum.java

@@ -88,6 +88,9 @@ public enum ExportEnum implements BaseEnum<String, ExportEnum> {
     EXPORT_CLOUD_TEACHER_SUM_DETAIL("EXPORT_CLOUD_TEACHER_SUM_DETAIL", "云教练统计详情导出"),
     EXPORT_INDEX_COOP("EXPORT_INDEX_COOP", "首页经营数据合作单位导出"),
     EXPORT_TEACHER_CLOUD_COURSE_REPORT("EXPORT_TEACHER_CLOUD_COURSE_REPORT","老师云教练使用数据"),
+    EXPORT_OA_SUMMARY_EXPENSES("EXPORT_OA_SUMMARY_EXPENSES","oa费用汇总"),
+    EXPORT_OA_SUMMARY_EXPENSES_DETAIL("EXPORT_OA_SUMMARY_EXPENSES_DETAIL","oa费用明细"),
+    EXPORT_OPERATING_SUMMARY_INCOME("EXPORT_OPERATING_SUMMARY_INCOME","经营报表收入汇总"),
     ;
 
     private String code;

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

@@ -26,7 +26,10 @@ public enum ExportTypeEnum implements BaseEnum<Integer, ExportTypeEnum> {
 	EXPORT_CLOUD_TEACHER_SUM(20, "云教练统计导出"),
 	CLASS_GROUP(21, "班级列表导出"),
 	EXPORT_CLOUD_TEACHER_SUM_DETAIL(22, "云教练统计详情导出"),
-	EXPORT_TEACHER_CLOUD_COURSE_REPORT(23, "老师云教练使用数据")
+	EXPORT_TEACHER_CLOUD_COURSE_REPORT(23, "老师云教练使用数据"),
+	EXPORT_OA_SUMMARY_EXPENSES(24,"oa费用汇总"),
+	EXPORT_OA_SUMMARY_EXPENSES_DETAIL(25,"oa费用明细"),
+	EXPORT_OPERATING_SUMMARY_INCOME(26,"经营报表收入汇总"),
 	;
 
 	private Integer code;

+ 7 - 6
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/FeeProjectEnum.java

@@ -7,28 +7,29 @@ public enum FeeProjectEnum implements BaseEnum<Integer, FeeProjectEnum> {
     SOCIAL_SECURITY_HOUSE_ALLOWANCE(2, "社保公积金"),
     HOUSE(3, "房租"),
     OFFICE(4, "办公"),
-    MAINS_PROPERTY(5, "水电物业供暖通讯"),
+    MAINS_PROPERTY(5, "水电物业"),
     TRAVEL(6, "差旅"),
-    SERVICES(7, "服务"),
+    SERVICES(7, "外部服务"),
     WELFARE(8, "福利"),
     ACTIVITIES(9, "活动"),
     TRAFFIC(10, "交通"),
     CERTIFICATES(11, "考级"),
-    INSTRUMENT(12, "琴行"),
+    INSTRUMENT(12, "临时场地租赁"),
     HANDLING(13, "手续费"),
     TAXES(14, "税金"),
-    COMMUNICATIONS(15, "通讯"),
+    COMMUNICATIONS(15, "通讯"),
     POSTAL_TRANSPORT(16, "邮递运输"),
     HOSPITALITY(17, "招待费"),
     NETWORK_CLASS(18, "网络教室成本"),
-    REFUND(19, "退费"),
+    REFUND(19, "业务退费"),
     TEACHING_POINT_RENTAL(20, "教学点租赁"),
     MUSICAL_INSTRUMENT_REPAIR(21, "乐器维修"),
     INTERNAL_SETTLEMENT(22, "内部结算"),
     MUSICAL(23, "乐器"),
     COST_PARTS(24, "配件费"),
     DEPOSIT(25, "押金"),
-    OTHER(26, "其他");
+    OTHER(26, "其他"),
+    ;
 
     private Integer code;
 

+ 40 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/HumanCostTypeEnum.java

@@ -0,0 +1,40 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.ym.mec.common.enums.BaseEnum;
+
+public enum HumanCostTypeEnum implements BaseEnum<String, HumanCostTypeEnum> {
+	FIXED("FIXED","固定人力成本"),
+	VARIABLE("VARIABLE","变动人力成本"),
+	NETWORK_CLASSROOM("NETWORK_CLASSROOM","网络教室成本"),
+	CLOUD_COACHING_COST("CLOUD_COACHING_COST","云教练成本"),
+	INTERNAL_SETTLEMENT("INTERNAL_SETTLEMENT","内部结算"),
+	STUDENT_MANAGEMENT_FEE_ADJUSTMENT("STUDENT_MANAGEMENT_FEE_ADJUSTMENT","学员管理费调整");
+
+	@EnumValue
+	private String code;
+
+	private String msg;
+
+	HumanCostTypeEnum(String code, String msg) {
+		this.code = code;
+		this.msg = msg;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getMsg() {
+		return msg;
+	}
+
+	public void setMsg(String msg) {
+		this.msg = msg;
+	}
+
+	@Override
+	public String getCode() {
+		return this.code;
+	}
+}

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

@@ -11,7 +11,9 @@ public enum TemplateTypeEnum implements BaseEnum<String, TemplateTypeEnum> {
     EXTERNAL_STUDENT_IMPORT_MUSIC_GROUP("EXTERNAL_STUDENT_IMPORT_MUSIC_GROUP", "外部学生入团导入模板"),
     BUY_FREE_LIVE_THEORY_COURSE("BUY_FREE_LIVE_THEORY_COURSE", "直播临时活动学员购买导入模板"),
     LIVE_TEACHER_CARD("LIVE_TEACHER_CARD","直播临时活动上课老师名片导入模板"),
-    LIVE_ROOM_PURVIEW_USER("LIVE_ROOM_PURVIEW_USER", "直播间用户观看权限表");
+    LIVE_ROOM_PURVIEW_USER("LIVE_ROOM_PURVIEW_USER", "直播间用户观看权限表"),
+    ADDITIONAL_IMPORT("ADDITIONAL_IMPORT", "经营报表额外的收支导入"),
+    ;
 
     private String code;
 

+ 3 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/mapper/DegreeLevelFeeMapper.java

@@ -1,15 +1,14 @@
 package com.ym.mec.biz.dal.mapper;
 
-import java.util.List;
-
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.ym.mec.biz.dal.entity.DegreeLevelFeeNew;
-import com.ym.mec.biz.dal.enums.DegreeTypeEnum;
 import com.ym.mec.biz.dal.vo.DegreeLevelFeeNewVo;
+import com.ym.mec.biz.dal.wrapper.DegreeLevelFeeWrapper;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
-import com.ym.mec.biz.dal.wrapper.DegreeLevelFeeWrapper;
+
+import java.util.List;
 
 /**
  * 考级等级费用配置

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

@@ -270,6 +270,8 @@ public interface ExportService {
 
     void orderList(Map<String, Object> params, ManagerDownload managerDownload);
 
+    void operatingSummaryIncome(Map<String, Object> params, ManagerDownload managerDownload);
+
     void orderListSum(Map<String, Object> params, ManagerDownload managerDownload);
 
     void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload);

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

@@ -1,14 +1,23 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dao.OperatingReportNewDao;
+import com.ym.mec.biz.dal.dto.OASummaryExpensesDto;
+import com.ym.mec.biz.dal.entity.FinancialExpenditure;
 import com.ym.mec.biz.dal.entity.OperatingReportNew;
 import com.ym.mec.common.service.BaseService;
 
 import java.util.Date;
+import java.util.List;
 
 public interface OperatingReportNewService extends BaseService<Integer, OperatingReportNew> {
 
     OperatingReportNewDao getDao();
 
     void operatingReportMonth(Date month);
+
+    //oa费用汇总
+    List<OASummaryExpensesDto> queryOASummaryExpenses(String month);
+
+    //oa费用明细
+    List<FinancialExpenditure> queryOASummaryExpensesDetail(String month);
 }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TempBuyFreeLiveTheoryCourseService.java

@@ -4,6 +4,7 @@ import com.ym.mec.biz.dal.entity.TempBuyFreeLiveTheoryCourse;
 import com.ym.mec.common.service.BaseService;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
 import java.util.List;
 
 public interface TempBuyFreeLiveTheoryCourseService extends BaseService<Integer, TempBuyFreeLiveTheoryCourse> {
@@ -11,4 +12,6 @@ public interface TempBuyFreeLiveTheoryCourseService extends BaseService<Integer,
     List<String> importBuyFreeLiveTheoryCourse(MultipartFile file, Integer id) throws Exception;
 
     List<String> importLiveTeacherCard(MultipartFile file, Integer id) throws Exception;
+
+    List<String> importHumanCost(MultipartFile file) throws Exception;
 }

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

@@ -1801,10 +1801,18 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     .filter(studentAttendanceViewDto -> studentAttendanceViewDto.getGroupType().equals("MUSIC"))
                     .collect(Collectors.toList());
 
+
             if (!CollectionUtils.isEmpty(tempIds) && schedule.getGroupType() == MUSIC) {
+                List<Map<Integer, String>> studentSubjectNameMaps = subjectDao.findStudentSubjectNameMaps(tempIds);
+                Map<Integer, String> studentSubjectNameMap = MapUtil.convertIntegerMap(studentSubjectNameMaps);
+                List<Map<Integer, Long>> studentSubjectIdMaps = subjectDao.findStudentSubjectIdMaps(tempIds);
+                Map<Integer, Long> studentSubjectIdMap = MapUtil.convertIntegerMap(studentSubjectIdMaps);
                 truantStudent.forEach(studentAttendanceViewDto -> {
                     if (Objects.nonNull(studentAttendanceViewDto.getBeMerged()) && studentAttendanceViewDto.getBeMerged()) {
                         studentAttendanceViewDto.setSubjectName("被合并学员");
+                    } else {
+                        studentAttendanceViewDto.setSubjectName(studentSubjectNameMap.get(studentAttendanceViewDto.getStudentId().intValue()));
+                        studentAttendanceViewDto.setSubjectId(studentSubjectIdMap.get(studentAttendanceViewDto.getStudentId().intValue()));
                     }
                 });
             } else if (schedule.getGroupType() != MUSIC) {

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

@@ -288,13 +288,8 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
         cloudTeacherOrder.setAmount(cloudTeacherFee);
         cloudTeacherOrder.setStudentId(order.getUserId());
         cloudTeacherOrder.setStatus(1);
+        cloudTeacherOrder.setMusicGroupId(order.getMusicGroupId());
         cloudTeacherOrder.setOperatingAmount(calenderMember.getIncome().compareTo(BigDecimal.ZERO) == 0?cloudTeacherFee:calenderMember.getIncome());
-        /*MusicGroupPaymentCalender calender = musicGroupPaymentCalenderDao.get(order.getCalenderId());
-        if(calender.getCloudTeacherPaymentFlag()){
-            cloudTeacherOrder.setOperatingAmount(BigDecimal.ZERO);
-        }else {
-            cloudTeacherOrder.setOperatingAmount(cloudTeacherFee);
-        }*/
         //保存云教练订单
         this.save(cloudTeacherOrder,calenderMember.getAutoActivationFlag());
     }

+ 343 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -190,6 +190,8 @@ public class ExportServiceImpl implements ExportService {
     private StudentTeacherMapperDao studentTeacherMapperDao;
     @Autowired
     private TeacherCloudCourseReportService teacherCloudCourseReportService;
+    @Autowired
+    private CloudTeacherOrderDao cloudTeacherOrderDao;
 
     private static final ExecutorService exportExecutorService = Executors.newFixedThreadPool(10);
     @Autowired
@@ -383,6 +385,43 @@ public class ExportServiceImpl implements ExportService {
         exportManageFuncMap.put(ExportEnum.EXPORT_CLOUD_TEACHER_SUM_DETAIL, (info) -> exportCloudTeacherSumDetail(info));
         exportManageFuncMap.put(ExportEnum.CLASS_GROUP, info -> exportClassGroup(info));
         exportManageFuncMap.put(ExportEnum.EXPORT_TEACHER_CLOUD_COURSE_REPORT, info -> exportTeacherCloudCourseReport(info));
+        exportManageFuncMap.put(ExportEnum.EXPORT_OA_SUMMARY_EXPENSES, info -> exportOaSummaryExpenses(info));
+        exportManageFuncMap.put(ExportEnum.EXPORT_OA_SUMMARY_EXPENSES_DETAIL, info -> exportOaSummaryExpensesDetail(info));
+        exportManageFuncMap.put(ExportEnum.EXPORT_OPERATING_SUMMARY_INCOME, info -> exportOperatingSummaryIncome(info));
+    }
+
+    private HttpResponseResult exportOaSummaryExpenses(Map<String, Object> info) {
+        String month = getParam(info, "month", String.class);
+        SysUser user = sysUserService.getUser();
+        ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.EXPORT_OA_SUMMARY_EXPENSES,user.getId());
+        return this.asyncExport(() -> this.initExportInfo(operatingReportNewService.queryOASummaryExpenses(month),
+                        managerDownload,ExportEnum.EXPORT_OA_SUMMARY_EXPENSES),
+                managerDownload.getName());
+    }
+
+    private HttpResponseResult exportOaSummaryExpensesDetail(Map<String, Object> info) {
+        String month = getParam(info, "month", String.class);
+        SysUser user = sysUserService.getUser();
+        ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.EXPORT_OA_SUMMARY_EXPENSES_DETAIL,user.getId());
+        return this.asyncExport(() -> this.initExportInfo(operatingReportNewService.queryOASummaryExpensesDetail(month),
+                        managerDownload,ExportEnum.EXPORT_OA_SUMMARY_EXPENSES_DETAIL),
+                managerDownload.getName());
+    }
+
+    private HttpResponseResult exportOperatingSummaryIncome(Map<String, Object> info) {
+        String month = getParam(info, "month", String.class);
+        Map<String, Object> params = new HashMap<>(1);
+        params.put("month",month);
+        int count = studentPaymentOrderDao.queryCount1(params);
+        if (count <= 0) {
+            return BaseController.failed("没有可导出的数据");
+        }
+        if (count > 50000) {
+            return BaseController.failed("数据集太大,不能导出.最大数据集不能超过50000");
+        }
+        ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.EXPORT_OPERATING_SUMMARY_INCOME, sysUserService.getUserId());
+        return this.asyncExport(() -> this.operatingSummaryIncome(params, managerDownload),
+                managerDownload.getName());
     }
 
     private List<StudentServeExportDto> exportStudentServeInfo(Map<String, Object> info) {
@@ -1329,7 +1368,9 @@ public class ExportServiceImpl implements ExportService {
                 }
             }
             for (MusicGroupBuildLog groupAuditSuccess : musicGroupAuditSuccess) {
-                if (!groupAuditSuccess.getMusicGroupId().equals(musicGroupRegister.getMusicGroupId())) continue;
+                if (!groupAuditSuccess.getMusicGroupId().equals(musicGroupRegister.getMusicGroupId())) {
+                    continue;
+                }
                 musicGroupRegisterMap.put("auditSuccessTime", groupAuditSuccess.getCreateTime());
             }
             musicGroupRegisterMap.put("groupBuyMusicalNum", musicGroupRegister.getGroupBuyMusicalNum());
@@ -2094,7 +2135,9 @@ public class ExportServiceImpl implements ExportService {
                 }
                 if (row.getChargeType() != null) {
                     for (SporadicChargeTypeEnum chargeType : SporadicChargeTypeEnum.values()) {
-                        if (!chargeType.getCode().equals(row.getChargeType())) continue;
+                        if (!chargeType.getCode().equals(row.getChargeType())) {
+                            continue;
+                        }
                         row.setSporadicType(chargeType.getMsg());
                     }
                 }
@@ -2135,8 +2178,6 @@ public class ExportServiceImpl implements ExportService {
                 if (!CollectionUtils.isEmpty(exportDtoList)) {
                     StudentPaymentOrderExportDto feeByType = exportDtoList.get(0);
                     BigDecimal childRepairFee = childRepairMap.get(row.getId()) == null ? BigDecimal.ZERO : childRepairMap.get(row.getId());
-//                    StudentPaymentOrderExportDto feeByType = sellOrderDao.getFeeByType(row.getId());
-//                    BigDecimal childRepairFee = sellOrderDao.getChildRepair(row.getId());
                     row.setMusicalFee(feeByType.getMusicalFee());
                     row.setTeachingFee(feeByType.getTeachingFee().subtract(childRepairFee));
                     row.setMaintenanceProductFee(feeByType.getRepairFee().add(childRepairFee));
@@ -2265,6 +2306,299 @@ public class ExportServiceImpl implements ExportService {
     }
 
     @Override
+    public void operatingSummaryIncome(Map<String, Object> params, ManagerDownload managerDownload) {
+        List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentOrderDao.ExportQueryPage1(params);
+        long i = 1;
+        //获取机构费率
+        List<Long> otherOrderIds = studentPaymentOrderExportDtos.stream().filter(e -> e.getGroupType() != GroupType.GOODS_SELL
+                && e.getGroupType() != GroupType.REPLACEMENT
+                && e.getGroupType() != GroupType.PRACTICE
+                && e.getGroupType() != GroupType.SPORADIC
+                && e.getGroupType() != GroupType.MEMBER
+                && e.getGroupType() != GroupType.ACTIVITY
+                && e.getGroupType() != GroupType.VIP).map(e -> e.getId()).collect(Collectors.toList());
+        Map<Long, List<StudentPaymentOrderExportDto>> feeByTypeMap = new HashMap<>();
+        Map<Long, BigDecimal> childRepairMap = new HashMap<>();
+        if (!CollectionUtils.isEmpty(otherOrderIds)) {
+            List<StudentPaymentOrderExportDto> feeByType = sellOrderDao.queryFeeByType(otherOrderIds);
+            feeByTypeMap = feeByType.stream().collect(Collectors.groupingBy(StudentPaymentOrderExportDto::getId));
+            childRepairMap = MapUtil.convertIntegerMap(sellOrderDao.queryChildRepair(otherOrderIds));
+        }
+        List<Integer> organIds = studentPaymentOrderExportDtos.stream().map(e -> e.getOrganId()).distinct().collect(Collectors.toList());
+        Map<Integer, String> userOrganNameMap = organizationService.getMap("organization","id_","name_",organIds,managerDownload.getTenantId(),Integer.class,String.class);
+        //按分部分组
+        Map<Integer, List<StudentPaymentOrderExportDto>> listMap = studentPaymentOrderExportDtos.stream().collect(Collectors.groupingBy(e -> e.getOrganId()));
+        List<OperatingTotalIncomeDto> incomeDtos = new ArrayList<>();
+        //承担课程的云教练收入
+        String month = params.get("month").toString();
+        String firstDayOfMonth = DateUtil.dateToString(DateUtil.getFirstDayOfMonth(DateUtil.stringToDate(month,DateUtil.ISO_YEAR_MONTH_FORMAT)),DateUtil.ISO_EXPANDED_DATE_FORMAT);
+        String lastDayOfMonth = DateUtil.dateToString(DateUtil.getLastDayOfMonth(DateUtil.stringToDate(month,DateUtil.ISO_YEAR_MONTH_FORMAT)),DateUtil.ISO_EXPANDED_DATE_FORMAT);
+        Map<Integer, BigDecimal> groupCloudAmount = MapUtil.convertIntegerMap(cloudTeacherOrderDao.sumGroupCloudAmount(month,firstDayOfMonth,lastDayOfMonth));
+        //不承担课程的云教练收入
+        Map<Integer, BigDecimal> personalCloudAmount = MapUtil.convertIntegerMap(cloudTeacherOrderDao.sumPersonalCloudAmount(month,firstDayOfMonth,lastDayOfMonth));
+
+//        List<Map<Integer, BigDecimal>> personIncomeMapList = cloudTeacherOrderDao.sumPersonIncome(params.get("month").toString());
+//        Map<Integer, BigDecimal> personIncomeMap = new HashMap<>();
+//        if(!CollectionUtils.isEmpty(personIncomeMapList)){
+//            personIncomeMap = MapUtil.convertIntegerMap(personIncomeMapList);
+//        }
+        for (Integer organId : listMap.keySet()) {
+            OperatingTotalIncomeDto incomeDto = new OperatingTotalIncomeDto();
+            incomeDto.setOrganName(userOrganNameMap.get(organId));
+            for (StudentPaymentOrderExportDto row : listMap.get(organId)) {
+                if (row.getActualAmount() == null) {
+                    row.setActualAmount(BigDecimal.ZERO);
+                }
+                if (row.getBalancePaymentAmount() == null) {
+                    row.setBalancePaymentAmount(BigDecimal.ZERO);
+                }
+                if (row.getOrderDetailList() != null) {
+                    for (StudentPaymentOrderDetail orderDetail : row.getOrderDetailList()) {
+                        switch (orderDetail.getType()) {
+                            case COURSE:
+                            case CLASSROOM:
+                            case SINGLE:
+                            case MIX:
+                            case COMPREHENSIVE:
+                            case ENLIGHTENMENT:
+                            case TRAINING_SINGLE:
+                            case TRAINING_MIX:
+                            case MUSIC_NETWORK:
+                            case HIGH:
+                            case HIGH_ONLINE:
+                            case HIGH_ONLINE_COURSE:
+                                row.setMusicGroupCourseFee(row.getMusicGroupCourseFee().add(orderDetail.getPrice()));
+                                break;
+                            case MUSICAL:
+                                if (row.getGroupType() != GroupType.GOODS_SELL) {
+                                    if (orderDetail.getKitGroupPurchaseType() != null && orderDetail.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)) {
+                                        row.setLeaseFee(getActualAmount(orderDetail.getPrice(), row));
+                                    } else {
+                                        row.setMusicalFee(orderDetail.getPrice());
+                                    }
+                                }
+                                break;
+                            case ACCESSORIES:
+                            case TEACHING:
+                                row.setTeachingFee(row.getTeachingFee().add(orderDetail.getPrice()));
+                                break;
+                            case OTHER:
+                                row.setOtherFee(row.getOtherFee().add(orderDetail.getPrice()));
+                                break;
+                            case MAINTENANCE:
+                                row.setMaintenanceFee(getActualAmount(orderDetail.getPrice(), row));
+                                break;
+                            case CLOUD_TEACHER:
+                            case CLOUD_TEACHER_PLUS:
+                                row.setCloudTeacherFee(getActualAmount(orderDetail.getPrice(), row));
+                                break;
+                            case DEGREE_REGISTRATION:
+                                row.setDegreeFee(getActualAmount(orderDetail.getPrice(), row));
+                                break;
+                            case PRACTICE:
+                                row.setPracticeCourseFee(getActualAmount(orderDetail.getPrice(), row));
+                                break;
+                            case VIP:
+                                row.setVipCourseFee(getActualAmount(orderDetail.getPrice(), row));
+                                break;
+                            case THEORY_COURSE:
+                                row.setTheoryCourseFee(getActualAmount(orderDetail.getPrice(), row));
+                                break;
+                            case REPAIR:
+                                row.setRepairFee(getActualAmount(orderDetail.getPrice(), row));
+                                break;
+                            default:
+                                break;
+                        }
+                    }
+                }
+                //专业
+                if (row.getGroupType().equals(GroupType.VIP)) {
+                    row.setVipCourseFee(row.getActualAmount());
+                } else if (row.getGroupType() == GroupType.ACTIVITY) {
+                    row.setVipCourseFee(row.getActualAmount());
+                } else if (row.getGroupType() == GroupType.MEMBER) {
+                    row.setCloudTeacherFee(row.getActualAmount());
+                } else if (row.getGroupType().equals(GroupType.SPORADIC)) {
+                    //考级报名
+                    if (row.getType().equals(OrderTypeEnum.DEGREE_REGISTRATION)) {
+                        if(StringUtils.isEmpty(row.getMemo())){
+                            row.setDegreeFee(row.getActualAmount());
+                        }else {
+                            String[] feeTypes = row.getMemo().split(";");
+                            List<String> feeTypeList = Arrays.asList(feeTypes);
+                            for (String feeTypeStr : feeTypeList) {
+                                int index = feeTypeStr.lastIndexOf(":");
+                                if (index < 0) {
+                                    continue;
+                                }
+                                BigDecimal typeFee = new BigDecimal(feeTypeStr.substring(index + 1));
+                                if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
+                                    typeFee = typeFee.multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
+                                }
+                                if (feeTypeStr.contains("VIP")) {
+                                    row.setVipCourseFee(typeFee);
+                                } else if (feeTypeStr.contains("网管课")) {
+                                    row.setPracticeCourseFee(typeFee);
+                                } else if (feeTypeStr.contains("乐理课")) {
+                                    row.setTheoryCourseFee(typeFee);
+                                }
+                            }
+                            row.setDegreeFee(row.getActualAmount().subtract(row.getVipCourseFee()).subtract(row.getPracticeCourseFee()).subtract(row.getTheoryCourseFee()));
+                        }
+                    } else {
+                        if (row.getChargeType() != null && SporadicChargeTypeEnum.LEVEL.getCode().equals(row.getChargeType())) {
+                            row.setDegreeFee(row.getActualAmount());
+                        } else if (row.getChargeType() != null && SporadicChargeTypeEnum.PRACTICE_GROUP_BUY.getCode().equals(row.getChargeType())) {
+                            row.setPracticeCourseFee(row.getActualAmount());
+                        } else if (row.getChargeType() != null && SporadicChargeTypeEnum.MUSIC_UPKEEP.getCode().equals(row.getChargeType())) {
+                            row.setMaintenanceFee(row.getActualAmount());
+                        } else if (row.getChargeType() != null && SporadicChargeTypeEnum.VISITING_FEE.getCode().equals(row.getChargeType())) {
+                            row.setVisitFee(row.getActualAmount());
+                        } else if (row.getChargeType() != null && (SporadicChargeTypeEnum.RECHARGE.getCode().equals(row.getChargeType()) ||
+                                SporadicChargeTypeEnum.HIGH_ONLINE_ACTIVITY.getCode().equals(row.getChargeType()))) {
+                            row.setRechargeFee(row.getActualAmount());
+                        } else if (row.getChargeType() != null && SporadicChargeTypeEnum.CLOUD_TEACHER_BUY.getCode().equals(row.getChargeType())) {
+                            row.setCloudTeacherFee(row.getActualAmount());
+                        } else {
+                            row.setOtherFee(row.getActualAmount());
+                        }
+                    }
+                } else if (row.getGroupType().equals(GroupType.PRACTICE)) {
+                    row.setPracticeCourseFee(row.getActualAmount());
+                } else if (row.getGroupType().equals(GroupType.REPLACEMENT)) {
+                    row.setMusicalFee(row.getActualAmount());
+                } else if (row.getGroupType().equals(GroupType.GOODS_SELL)) {
+                    row.setRetailGoodsFee(row.getActualAmount());
+                } else {
+                    List<StudentPaymentOrderExportDto> exportDtoList = feeByTypeMap.get(row.getId());
+                    if (!CollectionUtils.isEmpty(exportDtoList)) {
+                        StudentPaymentOrderExportDto feeByType = exportDtoList.get(0);
+                        BigDecimal childRepairFee = childRepairMap.get(row.getId()) == null ? BigDecimal.ZERO : childRepairMap.get(row.getId());
+                        row.setMusicalFee(feeByType.getMusicalFee());
+                        row.setTeachingFee(feeByType.getTeachingFee().subtract(childRepairFee));
+                        row.setMaintenanceProductFee(feeByType.getRepairFee().add(childRepairFee));
+                        row.setOtherFee(feeByType.getOtherFee());
+                        if (row.getGroupType().equals(GroupType.MUSIC)) {
+                            row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).
+                                    subtract(row.getTeachingFee()).subtract(row.getMaintenanceFee()).subtract(row.getMaintenanceProductFee()).
+                                    subtract(feeByType.getOtherFee()).subtract(row.getLeaseFee()).subtract(row.getCloudTeacherFee()).
+                                    subtract(row.getVipCourseFee()).subtract(row.getPracticeCourseFee()));
+                        } else if (row.getGroupType().equals(OrderTypeEnum.REPAIR)) {
+                            row.setRepairFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
+                        } else if (row.getGroupType() == GroupType.OUTORDER) {
+                            //销售收入
+                            BigDecimal add = feeByType.getMusicalFee().add(row.getTeachingFee()).add(row.getMaintenanceProductFee()).add(feeByType.getOtherFee());
+                            //服务收入
+                            BigDecimal subtract = feeByType.getActualAmount().subtract(add);
+                            //如果是淘器微信那么就是零售
+                            if (Objects.equals("淘器微信", row.getMerNos()) && add.compareTo(BigDecimal.ZERO) > 0) {
+                                //如果有服务收入那么是课程学校采买
+                                row.setMusicalFee(BigDecimal.ZERO);
+                                row.setTeachingFee(BigDecimal.ZERO);
+                                row.setMaintenanceProductFee(BigDecimal.ZERO);
+                                row.setOtherFee(subtract);
+                                row.setRetailGoodsFee(add);
+                            } else {
+                                //拆分导入订单
+                                if (row.getType() == OrderTypeEnum.OUTORDER || row.getType() == OrderTypeEnum.SCHOOL) {
+                                    if (row.getType() == OrderTypeEnum.SCHOOL) {
+                                        row.setMusicalFee(BigDecimal.ZERO);
+                                        row.setTeachingFee(BigDecimal.ZERO);
+                                        row.setMaintenanceProductFee(BigDecimal.ZERO);
+                                        row.setOtherFee(BigDecimal.ZERO);
+                                        row.setLargeMusicalFee(add);
+                                    }
+                                    row.setCourseSchoolBuyAmount(subtract);
+                                } else if (row.getType() == OrderTypeEnum.OTHER) {
+                                    row.setOtherFee(row.getOtherFee().add(subtract));
+                                } else {
+                                    row.setMusicalFee(BigDecimal.ZERO);
+                                    row.setTeachingFee(BigDecimal.ZERO);
+                                    row.setMaintenanceProductFee(BigDecimal.ZERO);
+                                    row.setOtherFee(BigDecimal.ZERO);
+                                    row.setRetailGoodsFee(add);
+                                    row.setMusicGroupCourseFee(subtract);
+                                }
+                            }
+                            row.setTransferFee(BigDecimal.ZERO);
+                            row.setPlatformFee(BigDecimal.ZERO);
+                        }
+                    }
+                }
+                row.setId(i);
+                row.setRepairFee(row.getRepairFee().add(row.getMaintenanceProductFee()));
+                row.setOrderAmount(row.getExpectAmount().add(row.getCouponRemitFee()));
+                i++;
+                //学员指导课费
+                incomeDto.setStudentGuidanceIncome(incomeDto.getStudentGuidanceIncome()
+                        .add(row.getMusicGroupCourseFee())
+                        .add(row.getVipCourseFee())
+                        .add(row.getPracticeCourseFee())
+                        .add(row.getTheoryCourseFee()));
+                //学校课程采买
+                incomeDto.setCoursePurchaseIncome(incomeDto.getCoursePurchaseIncome()
+                        .add(row.getCourseSchoolBuyAmount()));
+                //考级
+                incomeDto.setExamIncome(incomeDto.getExamIncome()
+                        .add(row.getDegreeFee()));
+                //维修费用
+                incomeDto.setMaintenanceCost(incomeDto.getMaintenanceCost()
+                        .add(row.getRepairFee()));
+                //月保费用
+                incomeDto.setInstrumentInsuranceCost(incomeDto.getInstrumentInsuranceCost()
+                        .add(row.getMaintenanceFee()));
+                //其他服务收入
+                incomeDto.setOtherServiceIncome(incomeDto.getOtherServiceIncome()
+                        .add(row.getLeaseFee())
+                        .add(row.getVisitFee())
+                        .add(row.getRechargeFee())
+                        .add(row.getOtherFee())
+                );
+                //团购乐器
+                incomeDto.setGroupPurchaseInstruments(incomeDto.getGroupPurchaseInstruments()
+                        .add(row.getMusicalFee()));
+                //零售乐器,计入其他
+                incomeDto.setOtherIncome(incomeDto.getOtherIncome()
+                        .add(row.getRetailGoodsFee()));
+                if(row.getGroupType() == GroupType.GOODS_SELL){
+                    //零售教辅,计入其他
+                    incomeDto.setOtherIncome(incomeDto.getOtherIncome()
+                            .add(row.getTeachingFee()));
+                }else {
+                    //团购教辅
+                    incomeDto.setGroupPurchaseTeachingAids(incomeDto.getGroupPurchaseTeachingAids()
+                            .add(row.getTeachingFee()));
+                }
+
+                //大件乐器
+                incomeDto.setLargeInstruments(incomeDto.getLargeInstruments()
+                        .add(row.getLargeMusicalFee()));
+            }
+            incomeDto.setCloudCoachIncome(incomeDto.getCloudCoachIncome().add(groupCloudAmount.getOrDefault(organId,BigDecimal.ZERO)));
+            incomeDto.setSaleCloudCoachIncome(incomeDto.getSaleCloudCoachIncome().add(personalCloudAmount.getOrDefault(organId,BigDecimal.ZERO)));
+            //服务收入
+            incomeDto.setServiceIncome(incomeDto.getLargeInstruments()
+                    .add(incomeDto.getStudentGuidanceIncome())
+                    .add(incomeDto.getCoursePurchaseIncome())
+                    .add(incomeDto.getExamIncome())
+                    .add(incomeDto.getMaintenanceCost())
+                    .add(incomeDto.getInstrumentInsuranceCost())
+                    .add(incomeDto.getOtherServiceIncome())
+            );
+            incomeDto.setSalesIncome(incomeDto.getSalesIncome()
+                    .add(incomeDto.getCloudCoachIncome())
+                    .add(incomeDto.getGroupPurchaseInstruments())
+                    .add(incomeDto.getGroupPurchaseTeachingAids())
+                    .add(incomeDto.getLargeInstruments())
+            );
+            incomeDtos.add(incomeDto);
+        }
+        HSSFWorkbook workbook = getHSSFWorkbook(incomeDtos, ExportEnum.EXPORT_OPERATING_SUMMARY_INCOME);
+        exportManagerDownload(workbook, managerDownload);
+    }
+
+    @Override
     public void orderListSum(Map<String, Object> params, ManagerDownload managerDownload) {
         List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentOrderService.ExportQueryPage(params);
         //获取机构费率
@@ -2538,6 +2872,7 @@ public class ExportServiceImpl implements ExportService {
         return subtract;
     }
 
+    @Override
     public void mallRouteOrderList(Map<String, Object> params, ManagerDownload managerDownload) {
         //获取分润订单(不包含订单详情)(纯余额支付不处理)
         List<StudentPaymentOrderMallExportDto> studentPaymentOrderExportDtos = studentPaymentRouteOrderDao.exportMallQueryPage(params);
@@ -2607,6 +2942,7 @@ public class ExportServiceImpl implements ExportService {
         exportManagerDownload(workbook, managerDownload);
     }
 
+    @Override
     public void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload) {
         //获取分润订单(不包含订单详情)(纯余额支付不处理)
         List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentRouteOrderDao.ExportQueryPage1(params);
@@ -3059,7 +3395,9 @@ public class ExportServiceImpl implements ExportService {
         groupTypeConsumerMap1.put(GroupType.SPORADIC, (basicOrder) -> {
             if (basicOrder.getType() != OrderTypeEnum.DEGREE_REGISTRATION && basicOrder.getChargeType() != null) {
                 for (SporadicChargeTypeEnum chargeType : SporadicChargeTypeEnum.values()) {
-                    if (!chargeType.getCode().equals(basicOrder.getChargeType())) continue;
+                    if (!chargeType.getCode().equals(basicOrder.getChargeType())) {
+                        continue;
+                    }
                     basicOrder.setSporadicType(chargeType.getMsg());
                 }
             }

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

@@ -140,7 +140,7 @@ public class ExtracurricularExercisesServiceImpl extends BaseServiceImpl<Long, E
                     extracurricularExercisesReplies.add(JSON.parseObject(JSON.toJSONString(studentExtraExercise),ExtracurricularExercisesReply.class));
                 }
                 if (CollectionUtils.isEmpty(musicScoreSubjectDto.getStudentLessonTrainingDetails())) {
-                    continue;
+                    throw new BizException("有部分声部未选择曲目");
                 }
                 for (StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail studentLessonTrainingDetail : musicScoreSubjectDto.getStudentLessonTrainingDetails()) {
                     studentLessonTrainingDetail.setSubjectId(musicScoreSubjectDto.getSubjectId());

+ 154 - 105
mec-biz/src/main/java/com/ym/mec/biz/service/impl/FinancialExpenditureServiceImpl.java

@@ -242,6 +242,7 @@ public class FinancialExpenditureServiceImpl extends BaseServiceImpl<Long, Finan
             if(hasFinancial != null){
                 return;
             }
+            Date endTime = pWorkOrderInfo.getUpdateTime();
             String realName = "";
             if(pWorkOrderInfo.getCreator() != null){
                 SimpleUserDto simpleUser = teacherDao.getSimpleUser(pWorkOrderInfo.getCreator());
@@ -257,110 +258,157 @@ public class FinancialExpenditureServiceImpl extends BaseServiceImpl<Long, Finan
             if(pWorkOrderInfo.getProcess().equals(33) ||
                     pWorkOrderInfo.getProcess().equals(22) ||
                     pWorkOrderInfo.getProcess().equals(19) ||
-                    pWorkOrderInfo.getProcess().equals(28)){
+                    pWorkOrderInfo.getProcess().equals(51) ||
+                    pWorkOrderInfo.getProcess().equals(28)
+            ){
                 List<FinancialExpenditure> financialExpenditureList = new ArrayList<>();
+                Integer organId = null;
+                String note = "";
+                ExpenditureTypeEnum expenditureTypeEnum = ExpenditureTypeEnum.REFUND;
+                FeeProjectEnum feeProjectEnum = FeeProjectEnum.REFUND;
+                BigDecimal totalAmount = BigDecimal.ZERO;
+
                 for (OaInputDto oaInputDto : oaInputDtos) {
-                    if(!"子表单".equals(oaInputDto.getName())){
+                    String submitForm = oaInputDto.getModel();
+                    Object submitValue = formData.get(submitForm);
+                    if (Objects.isNull(submitValue) || StringUtils.isEmpty(submitValue.toString())) {
                         continue;
                     }
+                    if (StringUtils.equals("分部", oaInputDto.getName())) {
+                        organId = Integer.parseInt(submitValue.toString());
+                    }
+                    if (StringUtils.equals("情况说明", oaInputDto.getName())) {
+                        note = submitValue.toString();
+                    }
+                    if (oaInputDto.getName().contains("金额")) {
+                        totalAmount = new BigDecimal(submitValue.toString());
+                    }
+                    if (StringUtils.equals("支出类型", oaInputDto.getName())) {
+                        expenditureTypeEnum = ExpenditureTypeEnum.valueOfDesc(submitValue.toString());
+                    }
+                    if (StringUtils.equals("费用类别", oaInputDto.getName()) || StringUtils.equals("费用类型", oaInputDto.getName())) {
+                        feeProjectEnum = FeeProjectEnum.valueOfDesc(submitValue.toString());
+                    }
+                }
+
+                for (OaInputDto oaInputDto : oaInputDtos) {
                     String submitForm = oaInputDto.getModel();
-                    if(Objects.isNull(formData.get(submitForm))){
+                    Object submitValue = formData.get(submitForm);
+                    if(Objects.isNull(submitValue)){
+                        continue;
+                    }
+                    if(!StringUtils.equals("子表单",oaInputDto.getName()) && !StringUtils.equals("分摊明细",oaInputDto.getName())){
                         continue;
                     }
                     List<HashMap> hashMaps = JSONObject.parseArray(formData.get(submitForm).toString(), HashMap.class);
-                    nullUser: for (HashMap hashMap : hashMaps) {
-                        FinancialExpenditure financialExpenditure = new FinancialExpenditure();
-                        financialExpenditure.setBatchNo(pWorkOrderInfo.getId().toString());
-                        financialExpenditure.setFinancialProcessNo(pWorkOrderInfo.getId().toString());
-                        financialExpenditure.setApplyUser(realName);
-                        financialExpenditure.setApplyUserId(pWorkOrderInfo.getCreator());
-                        financialExpenditure.setProcessId(pWorkOrderInfo.getProcess());
-                        List<OaColumnDto> columns = oaInputDto.getColumns();
-                        if(columns != null && columns.size() > 0){
-                            for (OaColumnDto column : columns) {
-                                List<OaInputDto> columnList = column.getList();
-                                if(columnList != null && columnList.size() > 0){
-                                    for (OaInputDto inputDto : columnList) {
-                                        String name = inputDto.getName();
-                                        if(name.contains("课程组编号")){
+                    if(StringUtils.equals("分摊明细",oaInputDto.getName())){
+                        //处理房租的分摊明细
+                        nullAmount:
+                        for (HashMap hashMap : hashMaps) {
+                            List<OaColumnDto> columns = oaInputDto.getColumns();
+                            if (columns != null && columns.size() > 0) {
+                                FinancialExpenditure financialExpenditure = new FinancialExpenditure();
+                                for (OaColumnDto column : columns) {
+                                    List<OaInputDto> columnList = column.getList();
+                                    if (columnList != null && columnList.size() > 0) {
+                                        for (OaInputDto inputDto : columnList) {
+                                            String name = inputDto.getName();
                                             Object o = hashMap.get(inputDto.getModel());
-                                            if(Objects.nonNull(o) && StringUtils.isNotEmpty(o.toString())){
-                                                financialExpenditure.setVipGroupId(Long.parseLong(o.toString()));
-                                                continue;
+                                            if (Objects.isNull(o) || StringUtils.isEmpty(o.toString())) {
+                                                continue nullAmount;
                                             }
-                                        }else if(name.contains("课程类型")){
-                                            Object o = hashMap.get(inputDto.getModel());
-                                            if(Objects.nonNull(o) && StringUtils.isNotEmpty(o.toString())){
-                                                financialExpenditure.setGroupType(o.toString());
-                                                continue;
+                                            if (StringUtils.equals(name,"金额")) {
+                                                financialExpenditure.setCurrentAmount(new BigDecimal(Double.parseDouble(o.toString())));
+                                            } else if (StringUtils.equals(name,"日期")) {
+                                                financialExpenditure.setEffectiveTime(o.toString());
                                             }
-                                        }else if(name.contains("乐团编号")){
+                                        }
+                                    }
+                                }
+                                financialExpenditure.setFeeProject(feeProjectEnum);
+                                financialExpenditure.setType(expenditureTypeEnum);
+                                financialExpenditure.setAprovalTime(endTime);
+                                financialExpenditure.setPaymentTime(endTime);
+                                financialExpenditure.setAmount(totalAmount);
+                                financialExpenditure.setCause(note);
+                                financialExpenditure.setBatchNo(pWorkOrderInfo.getId().toString());
+                                financialExpenditure.setFinancialProcessNo(pWorkOrderInfo.getId().toString());
+                                financialExpenditure.setApplyUser(realName);
+                                financialExpenditure.setApplyUserId(pWorkOrderInfo.getCreator());
+                                financialExpenditure.setProcessId(pWorkOrderInfo.getProcess());
+                                financialExpenditure.setOrganId(organId);
+                                financialExpenditureList.add(financialExpenditure);
+                            }
+                        }
+                    }else {
+                        nullUser:
+                        for (HashMap hashMap : hashMaps) {
+                            FinancialExpenditure financialExpenditure = new FinancialExpenditure();
+                            financialExpenditure.setAprovalTime(endTime);
+                            financialExpenditure.setBatchNo(pWorkOrderInfo.getId().toString());
+                            financialExpenditure.setFinancialProcessNo(pWorkOrderInfo.getId().toString());
+                            financialExpenditure.setApplyUser(realName);
+                            financialExpenditure.setApplyUserId(pWorkOrderInfo.getCreator());
+                            financialExpenditure.setProcessId(pWorkOrderInfo.getProcess());
+                            financialExpenditure.setEffectiveTime(DateUtil.format(endTime,DateUtil.ISO_YEAR_MONTH_FORMAT));
+                            financialExpenditure.setType(expenditureTypeEnum);
+                            List<OaColumnDto> columns = oaInputDto.getColumns();
+                            if (columns != null && columns.size() > 0) {
+                                for (OaColumnDto column : columns) {
+                                    List<OaInputDto> columnList = column.getList();
+                                    if (columnList != null && columnList.size() > 0) {
+                                        for (OaInputDto inputDto : columnList) {
+                                            String name = inputDto.getName();
                                             Object o = hashMap.get(inputDto.getModel());
-                                            if(Objects.nonNull(o) && StringUtils.isNotEmpty(o.toString())){
-                                                financialExpenditure.setMusicGroupId(o.toString());
+                                            if (Objects.isNull(o) || StringUtils.isEmpty(o.toString())) {
                                                 continue;
                                             }
-                                        }else if(name.contains("退费项目")){
-                                            Object o = hashMap.get(inputDto.getModel());
-                                            if(Objects.nonNull(o) && StringUtils.isNotEmpty(o.toString())){
+                                            if (StringUtils.equals(name,"课程组编号")) {
+                                                financialExpenditure.setVipGroupId(Long.parseLong(o.toString()));
+                                            } else if (StringUtils.equals(name,"课程类型")) {
+                                                financialExpenditure.setGroupType(o.toString());
+                                            } else if (StringUtils.equals(name,"乐团编号")) {
+                                                financialExpenditure.setMusicGroupId(o.toString());
+                                            } else if (StringUtils.equals(name,"退费项目")) {
                                                 financialExpenditure.setReturnFeeType(o.toString());
-                                                continue;
-                                            }
-                                        }else if(name.contains("学员编号")){
-                                            Object o = hashMap.get(inputDto.getModel());
-                                            if(Objects.nonNull(o) && StringUtils.isNotEmpty(o.toString())){
+                                            } else if (StringUtils.equals(name,"学员编号")) {
                                                 financialExpenditure.setStudentId(Integer.parseInt(o.toString()));
-                                                continue;
-                                            }else {
-                                                continue nullUser;
-                                            }
-                                        }else if(name.contains("分部")){
-                                            Object o = hashMap.get(inputDto.getModel());
-                                            if(Objects.nonNull(o) && StringUtils.isNotEmpty(o.toString())){
-                                                int organId = Integer.parseInt(o.toString());
-                                                Organization organization = organizationDao.get(organId);
-                                                if(organization != null){
+                                            } else if (StringUtils.equals(name,"分部")) {
+                                                Organization organization = organizationDao.get(Integer.parseInt(o.toString()));
+                                                if (organization != null) {
                                                     financialExpenditure.setOrganId(organization.getId());
                                                     financialExpenditure.setOrganName(organization.getName());
                                                 }
-                                                continue;
-                                            }
-                                        }else if(name.contains("金额") || name.contains("住宿费") || name.contains("出差补助") || name.contains("交通费")){
-                                            Object o = hashMap.get(inputDto.getModel());
-                                            if(Objects.nonNull(o) && StringUtils.isNotEmpty(o.toString())){
+                                            } else if (StringUtils.equals(name,"金额") || StringUtils.equals(name,"住宿费") || StringUtils.equals(name,"出差补助") || StringUtils.equals(name,"交通费")) {
                                                 financialExpenditure.setAmount(financialExpenditure.getAmount().add(new BigDecimal(Double.parseDouble(o.toString()))));
-                                                continue;
-                                            }
-                                        }else if(name.contains("情况说明") || name.contains("事由") ){
-                                            Object o = hashMap.get(inputDto.getModel());
-                                            if(Objects.nonNull(o) && StringUtils.isNotEmpty(o.toString())){
+                                                financialExpenditure.setCurrentAmount(financialExpenditure.getAmount());
+                                            } else if (StringUtils.equals(name,"情况说明") || StringUtils.equals(name,"事由")) {
                                                 financialExpenditure.setCause(o.toString());
-                                                continue;
-                                            }
-                                        }else if(name.contains("支出类型")){
-                                            Object o = hashMap.get(inputDto.getModel());
-                                            if(Objects.nonNull(o) && StringUtils.isNotEmpty(o.toString())){
+                                            } else if (StringUtils.equals(name,"支出类型")) {
                                                 financialExpenditure.setType(ExpenditureTypeEnum.valueOfDesc(o.toString()));
-                                                continue;
-                                            }
-                                        }else if(name.contains("费用类型")){
-                                            Object o = hashMap.get(inputDto.getModel());
-                                            if(Objects.nonNull(o) && StringUtils.isNotEmpty(o.toString())){
-                                                financialExpenditure.setFeeProject(FeeProjectEnum.valueOfDesc(o.toString()));
-                                                continue;
-                                            }
-                                        }else if(name.contains("住宿费")){
-                                            Object o = hashMap.get(inputDto.getModel());
-                                            if(Objects.nonNull(o) && StringUtils.isNotEmpty(o.toString())){
-                                                financialExpenditure.setFeeProject(FeeProjectEnum.valueOfDesc(o.toString()));
-                                                continue;
+                                            } else if (StringUtils.equals(name,"费用类型") || StringUtils.equals(name,"费用类别")) {
+                                                FeeProjectEnum projectEnum = FeeProjectEnum.valueOfDesc(o.toString());
+                                                if(projectEnum == null){
+                                                    projectEnum = feeProjectEnum;
+                                                }
+                                                financialExpenditure.setFeeProject(projectEnum);
+                                            }else if (StringUtils.equals(name,"日期") || StringUtils.equals(name,"费用发生日期")) {
+                                                financialExpenditure.setPaymentTime(DateUtil.stringToDate(o.toString(),DateUtil.DEFAULT_PATTERN));
+                                            } else if (StringUtils.equals(name,"费用分摊月份")) {
+                                                financialExpenditure.setEffectiveTime(o.toString());
                                             }
                                         }
                                     }
                                 }
                             }
+                            if(financialExpenditure.getPaymentTime() == null){
+                                financialExpenditure.setPaymentTime(endTime);
+                            }
+                            if(StringUtils.isEmpty(financialExpenditure.getEffectiveTime())){
+                                financialExpenditure.setEffectiveTime(DateUtil.format(financialExpenditure.getPaymentTime(),DateUtil.ISO_YEAR_MONTH_FORMAT));
+                            }
+                            financialExpenditureList.add(financialExpenditure);
                         }
-                        financialExpenditureList.add(financialExpenditure);
                     }
                 }
                 //课程退费
@@ -426,6 +474,10 @@ public class FinancialExpenditureServiceImpl extends BaseServiceImpl<Long, Finan
                     }
                     if(CollectionUtils.isNotEmpty(financialExpenditures)){
                         for (FinancialExpenditure financialExpenditure : financialExpenditures) {
+                            financialExpenditure.setAprovalTime(endTime);
+                            financialExpenditure.setPaymentTime(endTime);
+                            financialExpenditure.setType(expenditureTypeEnum);
+                            financialExpenditure.setEffectiveTime(DateUtil.format(endTime,DateUtil.ISO_YEAR_MONTH_FORMAT));
                             financialExpenditure.setApplyUser(realName);
                             financialExpenditure.setType(ExpenditureTypeEnum.REFUND);
                             financialExpenditure.setFeeProject(FeeProjectEnum.REFUND);
@@ -441,11 +493,14 @@ public class FinancialExpenditureServiceImpl extends BaseServiceImpl<Long, Finan
                 financialExpenditureDao.batchInsert(financialExpenditureList);
             }else {
                 FinancialExpenditure financialExpenditure = new FinancialExpenditure();
+                financialExpenditure.setAprovalTime(endTime);
+                financialExpenditure.setPaymentTime(endTime);
                 financialExpenditure.setBatchNo(workOrderId.toString());
                 financialExpenditure.setFinancialProcessNo(workOrderId.toString());
                 financialExpenditure.setApplyUser(realName);
                 financialExpenditure.setApplyUserId(pWorkOrderInfo.getCreator());
                 financialExpenditure.setProcessId(pWorkOrderInfo.getProcess());
+                financialExpenditure.setEffectiveTime(DateUtil.format(endTime,DateUtil.ISO_YEAR_MONTH_FORMAT));
                 Integer organId = financialExpenditureDao.getDeptId(pWorkOrderInfo.getDeptId());
                 Organization organization = organizationDao.get(organId);
                 if(organization != null){
@@ -454,30 +509,19 @@ public class FinancialExpenditureServiceImpl extends BaseServiceImpl<Long, Finan
                 }
                 for (OaInputDto oaInputDto : oaInputDtos) {
                     String name = oaInputDto.getName();
-                    if(name.contains("金额")){
-                        Object o = formData.get(oaInputDto.getModel());
-                        if(Objects.nonNull(o) && StringUtils.isNotEmpty(o.toString())){
-                            financialExpenditure.setAmount(new BigDecimal(Double.parseDouble(o.toString())));
-                            continue;
-                        }
-                    }else if(name.contains("情况说明")){
-                        Object o = formData.get(oaInputDto.getModel());
-                        if(Objects.nonNull(o) && StringUtils.isNotEmpty(o.toString())){
-                            financialExpenditure.setCause(o.toString());
-                            continue;
-                        }
-                    }else if(name.contains("支出类型")){
-                        Object o = formData.get(oaInputDto.getModel());
-                        if(Objects.nonNull(o) && StringUtils.isNotEmpty(o.toString())){
-                            financialExpenditure.setType(ExpenditureTypeEnum.valueOfDesc(o.toString()));
-                            continue;
-                        }
-                    }else if(name.contains("费用类型")){
-                        Object o = formData.get(oaInputDto.getModel());
-                        if(Objects.nonNull(o) && StringUtils.isNotEmpty(o.toString())){
-                            financialExpenditure.setFeeProject(FeeProjectEnum.valueOfDesc(o.toString()));
-                            continue;
-                        }
+                    Object o = formData.get(oaInputDto.getModel());
+                    if(Objects.isNull(o) || StringUtils.isEmpty(o.toString())){
+                        continue;
+                    }
+                    if(StringUtils.equals(name,"金额")){
+                        financialExpenditure.setAmount(new BigDecimal(Double.parseDouble(o.toString())));
+                        financialExpenditure.setCurrentAmount(financialExpenditure.getAmount());
+                    }else if(StringUtils.equals(name,"情况说明")){
+                        financialExpenditure.setCause(o.toString());
+                    }else if(StringUtils.equals(name,"支出类型")){
+                        financialExpenditure.setType(ExpenditureTypeEnum.valueOfDesc(o.toString()));
+                    }else if(StringUtils.equals(name,"费用类型") || StringUtils.equals(name,"费用类别")){
+                        financialExpenditure.setFeeProject(FeeProjectEnum.valueOfDesc(o.toString()));
                     }
                 }
                 financialExpenditureDao.insert(financialExpenditure);
@@ -498,6 +542,7 @@ public class FinancialExpenditureServiceImpl extends BaseServiceImpl<Long, Finan
             }
             JSONObject formData = JSONObject.parseObject(data);
             String formStructure = financialExpenditureDao.getTplInfo(tplInfoId);
+            Date now = new Date();
             OaFormStructureDto oaFormStructureDto = JSONObject.parseObject(formStructure, OaFormStructureDto.class);
             List<OaInputDto> oaInputDtos = oaFormStructureDto.getList();
             List<FinancialExpenditure> financialExpenditureList = new ArrayList<>();
@@ -512,6 +557,9 @@ public class FinancialExpenditureServiceImpl extends BaseServiceImpl<Long, Finan
                 List<HashMap> hashMaps = JSONObject.parseArray(formData.get(submitForm).toString(), HashMap.class);
                 nullUser: for (HashMap hashMap : hashMaps) {
                     FinancialExpenditure financialExpenditure = new FinancialExpenditure();
+                    financialExpenditure.setAprovalTime(now);
+                    financialExpenditure.setPaymentTime(now);
+                    financialExpenditure.setEffectiveTime(DateUtil.format(now,DateUtil.ISO_YEAR_MONTH_FORMAT));
                     List<OaColumnDto> columns = oaInputDto.getColumns();
                     if(columns != null && columns.size() > 0){
                         for (OaColumnDto column : columns) {
@@ -519,25 +567,25 @@ public class FinancialExpenditureServiceImpl extends BaseServiceImpl<Long, Finan
                             if(columnList != null && columnList.size() > 0){
                                 for (OaInputDto inputDto : columnList) {
                                     String name = inputDto.getName();
-                                    if(name.contains("课程组编号")){
+                                    if(StringUtils.equals(name,"课程组编号")){
                                         Object o = hashMap.get(inputDto.getModel());
                                         if(Objects.nonNull(o) && StringUtils.isNotEmpty(o.toString())){
                                             financialExpenditure.setVipGroupId(Long.parseLong(o.toString()));
                                             continue;
                                         }
-                                    }else if(name.contains("课程类型")){
+                                    }else if(StringUtils.equals(name,"课程类型")){
                                         Object o = hashMap.get(inputDto.getModel());
                                         if(Objects.nonNull(o) && StringUtils.isNotEmpty(o.toString())){
                                             financialExpenditure.setGroupType(o.toString());
                                             continue;
                                         }
-                                    }else if(name.contains("乐团编号")){
+                                    }else if(StringUtils.equals(name,"乐团编号")){
                                         Object o = hashMap.get(inputDto.getModel());
                                         if(Objects.nonNull(o) && StringUtils.isNotEmpty(o.toString())){
                                             financialExpenditure.setMusicGroupId(o.toString());
                                             continue;
                                         }
-                                    }else if(name.contains("学员编号")){
+                                    }else if(StringUtils.equals(name,"学员编号")){
                                         Object o = hashMap.get(inputDto.getModel());
                                         if(Objects.nonNull(o) && StringUtils.isNotEmpty(o.toString())){
                                             financialExpenditure.setStudentId(Integer.parseInt(o.toString()));
@@ -545,10 +593,11 @@ public class FinancialExpenditureServiceImpl extends BaseServiceImpl<Long, Finan
                                         }else {
                                             continue nullUser;
                                         }
-                                    }else if(name.contains("金额")){
+                                    }else if(StringUtils.equals(name,"金额")){
                                         Object o = hashMap.get(inputDto.getModel());
                                         if(Objects.nonNull(o) && StringUtils.isNotEmpty(o.toString())){
                                             financialExpenditure.setAmount(new BigDecimal(Double.parseDouble(o.toString())));
+                                            financialExpenditure.setCurrentAmount(financialExpenditure.getAmount());
                                             continue;
                                         }
                                     }

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

@@ -767,13 +767,6 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     public boolean orderCallback(StudentPaymentOrder studentPaymentOrder) {
         //查询原定的是否已处理
-        /*StudentPaymentOrder orignStudentPaymentOrder = studentPaymentOrderService.lockOrder(studentPaymentOrder.getId());
-        if (orignStudentPaymentOrder == null) {
-            return false;
-        }
-        if (orignStudentPaymentOrder.getStatus() != DealStatusEnum.ING) {
-            return false;
-        }*/
         Integer userId = studentPaymentOrder.getUserId();
         Date nowDate = new Date();
         // 更新订单信息

+ 191 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OperatingReportNewServiceImpl.java

@@ -4,6 +4,9 @@ import com.ym.mec.biz.dal.dao.CourseScheduleDao;
 import com.ym.mec.biz.dal.dao.OperatingReportCloudDao;
 import com.ym.mec.biz.dal.dao.OperatingReportNewDao;
 import com.ym.mec.biz.dal.dao.VipGroupCategoryDao;
+import com.ym.mec.biz.dal.dto.HumanTypeDto;
+import com.ym.mec.biz.dal.dto.OASummaryExpensesDto;
+import com.ym.mec.biz.dal.entity.FinancialExpenditure;
 import com.ym.mec.biz.dal.entity.OperatingReportNew;
 import com.ym.mec.biz.dal.entity.VipGroupCategory;
 import com.ym.mec.biz.service.OperatingReportNewService;
@@ -11,15 +14,13 @@ import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -44,9 +45,9 @@ public class OperatingReportNewServiceImpl extends BaseServiceImpl<Integer, Oper
         return operatingReportNewDao;
     }
 
-	@Override
+
 	@Transactional(rollbackFor = Exception.class)
-	public void operatingReportMonth(Date month) {
+	public void operatingReportMonth1(Date month) {
 		String firstDayOfMonth = DateUtil.dateToString(DateUtil.getFirstDayOfMonth(month),DateUtil.ISO_EXPANDED_DATE_FORMAT);
 		String lastDayOfMonth = DateUtil.dateToString(DateUtil.getLastDayOfMonth(month),DateUtil.ISO_EXPANDED_DATE_FORMAT);
 		String currentMonth = DateUtil.dateToString(DateUtil.getLastDayOfMonth(month),DateUtil.ISO_YEAR_MONTH_FORMAT);
@@ -59,7 +60,7 @@ public class OperatingReportNewServiceImpl extends BaseServiceImpl<Integer, Oper
 		operatingReportCloudDao.settlementCalender(currentMonth);
 		//标记当月结算的缴费项目(缴费项目结算后缴费、或者进行中加学员的都算当月结算)
 		operatingReportCloudDao.settlementCurrentCalender(currentMonth);
-		//销售收入、销售成本
+		//分部销售收入、销售成本
 		List<OperatingReportNew> sellList = operatingReportNewDao.sumSellAmount(currentMonth);
 		Map<Integer, OperatingReportNew> collect = sellList.stream().collect(Collectors.groupingBy(OperatingReportNew::getOrganId,Collectors.collectingAndThen(Collectors.toList(),value->value.get(0))));
 		//服务收入
@@ -83,6 +84,9 @@ public class OperatingReportNewServiceImpl extends BaseServiceImpl<Integer, Oper
 //		Map<Integer, BigDecimal> collect22 = MapUtil.convertIntegerMap(operatingReportNewDao.sumLossCloudAmount(currentMonth));
 		//付费课程实际收入
 		Map<Integer, BigDecimal> collect2 = MapUtil.convertIntegerMap(operatingReportNewDao.sumCourseAmount(firstDayOfMonth,lastDayOfMonth,currentYear));
+		//获取分部学员管理费(每个在读学员80块,算分部成本,总部收入)
+		Map<Integer, BigDecimal> studentManagementFeeMap = MapUtil.convertIntegerMap(operatingReportNewDao.sumStudentManagementFee());
+
 
 		//个人云教练当月收入
 		Map<Integer, BigDecimal> collect3 = MapUtil.convertIntegerMap(operatingReportNewDao.sumPersonalCloudAmount(currentMonth,firstDayOfMonth,lastDayOfMonth));
@@ -154,7 +158,7 @@ public class OperatingReportNewServiceImpl extends BaseServiceImpl<Integer, Oper
 				operatingReportNew.setSaleAmount(reportNew.getSaleAmount());
 				operatingReportNew.setSaleCost(reportNew.getSaleCost());
 			}
-
+			operatingReportNew.setStudentManagementFee(studentManagementFeeMap.get(organId));
 			operatingReportNew.setCourseAmount(getAmount(collect2.get(organId)));
 //			operatingReportNew.setCourseAmount(operatingReportNew.getCourseAmount().add(getAmount(collect2.get(organId))));
 			operatingReportNew.setCourseAmount(operatingReportNew.getCourseAmount().add(getAmount(collect24.get(organId))));
@@ -172,9 +176,13 @@ public class OperatingReportNewServiceImpl extends BaseServiceImpl<Integer, Oper
 
 			operatingReportNew.setInternalSettlement(getAmount(collect18.get(organId)));
 			operatingReportNew.setVariableCosts(getAmount(collect7.get(organId)));
+			//固定费用
 			operatingReportNew.setFixedCosts(getAmount(collect8.get(organId)));
+			//成本合计
 			operatingReportNew.setTotalCost(operatingReportNew.getInternalSettlement().
-					add(operatingReportNew.getFixedCosts()).add(operatingReportNew.getVariableCosts()));
+					add(operatingReportNew.getFixedCosts()).
+					add(operatingReportNew.getVariableCosts()).
+					add(operatingReportNew.getStudentManagementFee()));
 
 			operatingReportNew.setCloudPrepaidFee(getAmount(collect9.get(organId)).
 					add(getAmount(collect10.get(organId))).
@@ -196,10 +204,184 @@ public class OperatingReportNewServiceImpl extends BaseServiceImpl<Integer, Oper
 
 			operatingReportNew.setQuasiDiscretionaryProfit(operatingReportNew.getTotalIncome().subtract(operatingReportNew.getTotalCost()));
 		}
+		//计算总部经营报表
+		OperatingReportNew operatingReportNew = new OperatingReportNew();
+		operatingReportNew.setOrganName("总部");
+		operatingReportNew.setStudentManagementFee(operatingList.stream().map(e->e.getStudentManagementFee()).reduce(BigDecimal.ZERO,BigDecimal::add));
+		OperatingReportNew totalSellAmount = operatingReportNewDao.sumTotalSellAmount(currentMonth);
+		operatingReportNew.setSaleAmount(totalSellAmount.getSaleAmount());
+		operatingReportNew.setSaleCost(totalSellAmount.getSaleCost());
 		operatingReportNewDao.batchInsert(operatingList);
 		//将本月乐团课标记为已结算
 		courseScheduleDao.makeSettlementReport(currentMonth);
 	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void operatingReportMonth(Date month) {
+		String firstDayOfMonth = DateUtil.dateToString(DateUtil.getFirstDayOfMonth(month),DateUtil.ISO_EXPANDED_DATE_FORMAT);
+		String lastDayOfMonth = DateUtil.dateToString(DateUtil.getLastDayOfMonth(month),DateUtil.ISO_EXPANDED_DATE_FORMAT);
+		String currentMonth = DateUtil.dateToString(DateUtil.getLastDayOfMonth(month),DateUtil.ISO_YEAR_MONTH_FORMAT);
+		String currentYear = DateUtil.dateToString(DateUtil.getLastDayOfMonth(month),DateUtil.ISO_YEAR_FORMAT);
+		operatingReportNewDao.deleteByMonth(currentMonth);
+		List<OperatingReportNew> operatingList = operatingReportNewDao.initOperatingReport(currentMonth);
+		//更新团体云教练计费时间()
+		operatingReportNewDao.initCloudStartTime(lastDayOfMonth);
+		//标记缴费项目为已结算(已排课,并且在上个月有关联的课程)
+		operatingReportCloudDao.settlementCalender(currentMonth);
+		//标记当月结算的缴费项目(缴费项目结算后缴费、或者进行中加学员的都算当月结算)
+		operatingReportCloudDao.settlementCurrentCalender(currentMonth);
+		//分部销售收入、销售成本
+		List<OperatingReportNew> sellList = operatingReportNewDao.sumSellAmount(currentMonth);
+		Map<Integer, OperatingReportNew> collect = sellList.stream().collect(Collectors.groupingBy(OperatingReportNew::getOrganId,Collectors.collectingAndThen(Collectors.toList(),value->value.get(0))));
+		//服务收入
+		//导入的服务收入  (全部记录为课程收入)
+		Map<Integer, BigDecimal> collect24 = MapUtil.convertIntegerMap(operatingReportNewDao.sumImportServerOrderAmount(currentMonth));
+		//付费课程实际收入
+		Map<Integer, BigDecimal> collect2 = MapUtil.convertIntegerMap(operatingReportNewDao.sumCourseAmount(firstDayOfMonth,lastDayOfMonth,currentYear));
+		//个人云教练当月收入
+		Map<Integer, BigDecimal> collect3 = MapUtil.convertIntegerMap(operatingReportNewDao.sumPersonalCloudAmount(currentMonth,firstDayOfMonth,lastDayOfMonth));
+		//团体云教练费用
+		Map<Integer, BigDecimal> collect4 = MapUtil.convertIntegerMap(operatingReportNewDao.sumGroupCloudAmount(currentMonth,firstDayOfMonth,lastDayOfMonth));
+		//团体云教练当月一次性结转
+		Map<Integer, BigDecimal> collect5 = MapUtil.convertIntegerMap(operatingReportNewDao.sumGroupAmount(currentMonth));
+
+		//乐保实收
+		Map<Integer, BigDecimal> collect26 = MapUtil.convertIntegerMap(operatingReportNewDao.sumMaintenanceAmount(currentMonth));
+		//业务退费
+		Map<Integer, BigDecimal> collect6 = MapUtil.convertIntegerMap(operatingReportNewDao.sumRefundAmount(currentMonth));
+		//变动费用
+		Map<Integer, BigDecimal> collect7 = MapUtil.convertIntegerMap(operatingReportNewDao.sumVariableCosts(currentMonth));
+		//固定费用
+		Map<Integer, BigDecimal> collect8 = MapUtil.convertIntegerMap(operatingReportNewDao.sumFixedCosts(currentMonth));
+
+
+		//云教练预收款
+		//个人云教练预收款
+		Map<Integer, BigDecimal> collect9 = MapUtil.convertIntegerMap(operatingReportNewDao.sumCloudPreAmount(currentMonth,lastDayOfMonth));
+		//团体云教练预收款
+		Map<Integer, BigDecimal> collect10 = MapUtil.convertIntegerMap(operatingReportNewDao.sumGroupCloudPreAmount(currentMonth,lastDayOfMonth));
+		//未生效云教练预收款
+		Map<Integer, BigDecimal> collect25 = MapUtil.convertIntegerMap(operatingReportNewDao.sumWaitCloudPreAmount());
+		//已排课但是课程未开始的云教练预收
+		Map<Integer, BigDecimal> collect27 = MapUtil.convertIntegerMap(operatingReportNewDao.sumNotStartCloudPreAmount());
+		//获取categoryId
+		VipGroupCategory category = vipGroupCategoryDao.getTheory();
+		Map<Integer, BigDecimal> collect20 = MapUtil.convertIntegerMap(operatingReportNewDao.sumActivityUserMapperAmount(category.getId()));
+		//付费课程预收
+		Map<Integer, BigDecimal> collect12 = MapUtil.convertIntegerMap(operatingReportNewDao.sumCoursePreAmount(lastDayOfMonth));
+		//付费团未排乐团课程预收(学员缴费)
+		Map<Integer, BigDecimal> collect21 = MapUtil.convertIntegerMap(operatingReportNewDao.sumMusicCourseAmount());
+		//排课资格预收
+		Map<Integer, BigDecimal> collect23 = MapUtil.convertIntegerMap(operatingReportNewDao.sumSubActivityUserMapperAmount());
+
+		//销售预收
+		Map<Integer, BigDecimal> collect13 = MapUtil.convertIntegerMap(operatingReportNewDao.sumSalePreAmount());
+
+		//其他预收
+		Map<Integer, BigDecimal> collect14 = MapUtil.convertIntegerMap(operatingReportNewDao.sumOtherPreAmount());
+
+		//预付款
+		//房租
+		Map<Integer, BigDecimal> collect19 = MapUtil.convertIntegerMap(operatingReportNewDao.sumPrepayments(currentMonth));
+
+		//应收
+		//欠费学员总金额
+		Map<Integer, BigDecimal> collect15 = MapUtil.convertIntegerMap(operatingReportNewDao.sumArrearsAmount());
+		//学校缴费订单待收款金额
+		Map<Integer, BigDecimal> collect16 = MapUtil.convertIntegerMap(operatingReportNewDao.sumSchoolAmount());
+
+		//应付(乐器押金)
+		List<Map<Integer, BigDecimal>> maps = operatingReportNewDao.sumMusicMargin();
+		Map<Integer, BigDecimal> collect17 = MapUtil.convertIntegerMap(maps);
+		//统计额外的经营报表数据
+		List<HumanTypeDto> humanTypeDtos = operatingReportNewDao.sumHumanCost(currentMonth);
+		Map<Integer, HumanTypeDto> humanMap = new HashMap<>();
+		if(CollectionUtils.isNotEmpty(humanTypeDtos)){
+			humanMap = humanTypeDtos.stream().collect(Collectors.groupingBy(e -> e.getOrganId(),Collectors.collectingAndThen(Collectors.toList(),v->v.get(0))));
+		}
+
+		for (OperatingReportNew operatingReportNew : operatingList) {
+			Integer organId = operatingReportNew.getOrganId();
+			OperatingReportNew reportNew = collect.get(organId);
+			if(Objects.nonNull(reportNew)){
+				operatingReportNew.setSaleAmount(reportNew.getSaleAmount());
+				operatingReportNew.setSaleCost(reportNew.getSaleCost());
+			}
+			HumanTypeDto humanTypeDto = humanMap.get(organId);
+			if(Objects.isNull(humanTypeDto)){
+				humanTypeDto = new HumanTypeDto();
+			}
+			//业务退费
+			operatingReportNew.setBusinessRefund(getAmount(collect6.get(organId)));
+			//服务收入
+			operatingReportNew.setServiceAmount(
+					getAmount(collect3.get(organId))
+					.add(getAmount(collect2.get(organId)))
+					.add(getAmount(collect4.get(organId)))
+					.add(getAmount(collect5.get(organId)))
+					.add(getAmount(collect24.get(organId)))
+					.add(getAmount(collect26.get(organId)))
+					.add(operatingReportNew.getCourseAmount()));
+			//收入合计
+			operatingReportNew.setTotalIncome(operatingReportNew.getSaleAmount().add(operatingReportNew.getServiceAmount()).subtract(operatingReportNew.getBusinessRefund()));
+			//内部结算
+			operatingReportNew.setInternalSettlement(humanTypeDto.getInternalSettlement());
+			//变动费用
+			operatingReportNew.setVariableCosts(getAmount(collect7.get(organId))
+					.add(humanTypeDto.getVariableCost())
+					.add(humanTypeDto.getNetworkClassroomCost())
+					.add(humanTypeDto.getStudentManagementFeeAdjustment()));
+			//固定费用
+			operatingReportNew.setFixedCosts(getAmount(collect8.get(organId)).add(humanTypeDto.getFixedCost()));
+			//成本合计
+			operatingReportNew.setTotalCost(operatingReportNew.getInternalSettlement().
+					add(operatingReportNew.getFixedCosts()).
+					add(operatingReportNew.getVariableCosts()).
+					add(operatingReportNew.getStudentManagementFee()));
+
+			operatingReportNew.setCloudPrepaidFee(getAmount(collect9.get(organId)).
+					add(getAmount(collect10.get(organId))).
+					add(getAmount(collect27.get(organId))).
+					add(getAmount(collect25.get(organId))));
+			operatingReportNew.setCoursePrepaidFee(getAmount(collect12.get(organId)).
+					add(getAmount(collect20.get(organId))).add(getAmount(collect21.get(organId))).add(getAmount(collect23.get(organId))));
+			operatingReportNew.setSalePrepaidFee(getAmount(collect13.get(organId)));
+			operatingReportNew.setOtherPrepaidFee(getAmount(collect14.get(organId)));
+			operatingReportNew.setPrepaidFee(operatingReportNew.getCloudPrepaidFee().
+					add(operatingReportNew.getSalePrepaidFee()).
+					add(operatingReportNew.getOtherPrepaidFee()).
+					add(operatingReportNew.getCoursePrepaidFee()));
+
+			operatingReportNew.setReceivables(getAmount(collect15.get(organId)).add(getAmount(collect16.get(organId))));
+			operatingReportNew.setPayable(getAmount(collect17.get(organId)));
+
+			operatingReportNew.setPrepayments(getAmount(collect19.get(organId)));
+
+			operatingReportNew.setQuasiDiscretionaryProfit(operatingReportNew.getTotalIncome().subtract(operatingReportNew.getTotalCost()));
+		}
+		//计算总部经营报表
+		OperatingReportNew operatingReportNew = new OperatingReportNew();
+		operatingReportNew.setOrganName("总部");
+		operatingReportNew.setStudentManagementFee(operatingList.stream().map(e->e.getStudentManagementFee()).reduce(BigDecimal.ZERO,BigDecimal::add));
+		OperatingReportNew totalSellAmount = operatingReportNewDao.sumTotalSellAmount(currentMonth);
+		operatingReportNew.setSaleAmount(totalSellAmount.getSaleAmount());
+		operatingReportNew.setSaleCost(totalSellAmount.getSaleCost());
+		operatingReportNewDao.batchInsert(operatingList);
+		//将本月乐团课标记为已结算
+//		courseScheduleDao.makeSettlementReport(currentMonth);
+	}
+
+    @Override
+    public List<OASummaryExpensesDto> queryOASummaryExpenses(String month) {
+		return operatingReportNewDao.queryOASummaryExpenses(month);
+    }
+
+	@Override
+	public List<FinancialExpenditure> queryOASummaryExpensesDetail(String month) {
+		return operatingReportNewDao.queryOASummaryExpensesDetail(month);
+	}
+
 	private BigDecimal getAmount(BigDecimal amount){
 		if(amount == null){
 			amount = BigDecimal.ZERO;

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentLessonExaminationDetailServiceImpl.java

@@ -8,11 +8,13 @@ import com.ym.mec.biz.dal.dto.StudentLessonExaminationSaveDto;
 import com.ym.mec.biz.dal.entity.StudentLessonExaminationDetail;
 import com.ym.mec.biz.dal.page.StudentLessonExaminationQueryDto;
 import com.ym.mec.biz.service.StudentLessonExaminationDetailService;
+import com.ym.mec.common.exception.BizException;
 import org.springframework.stereotype.Service;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -40,6 +42,9 @@ public class StudentLessonExaminationDetailServiceImpl extends ServiceImpl<Stude
         for (StudentLessonExaminationSaveDto dto : studentLessonExaminationSaveDtos) {
             String[] studentIds = dto.getStudentIds().split(",");
             List<LessonExaminationDetailDto> detailDtos = dto.getExaminationDetailDtos();
+            if (CollectionUtils.isEmpty(detailDtos)) {
+                throw new BizException("有部分声部未选择曲目");
+            }
             for (String id : studentIds) {
                 Integer studentId = Integer.parseInt(id);
                 Integer score = 100/detailDtos.size();

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

@@ -626,6 +626,7 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
         return studentPaymentOrderDetailDao.findApplyOrderGoods(orderId);
     }
 
+    @Override
     public void addOrderDetailTo(StudentPaymentOrder studentPaymentOrder, MusicGroup musicGroup, StudentRegistration studentRegistration) {
         //SurplusCourseFee
         Integer userId = studentPaymentOrder.getUserId();

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

@@ -378,7 +378,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
                                              JSONObject.toJSONString(scoreSubjectDto.getMusicScoreHomeworkDtoList()),
                                              userIdList));
                             if (CollectionUtils.isEmpty(scoreSubjectDto.getStudentLessonTrainingDetails())) {
-                                continue;
+                                throw new BizException("有部分声部未选择曲目");
                             }
 
                             for (StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail studentLessonTrainingDetail : scoreSubjectDto.getStudentLessonTrainingDetails()) {

+ 122 - 42
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempBuyFreeLiveTheoryCourseServiceImpl.java

@@ -1,25 +1,26 @@
 package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.ym.mec.biz.dal.dao.TempBuyFreeLiveTheoryCourseDao;
 import com.ym.mec.biz.dal.dao.TempLiveTeacherCardDao;
-import com.ym.mec.biz.dal.entity.Goods;
+import com.ym.mec.biz.dal.entity.HumanCost;
+import com.ym.mec.biz.dal.entity.TempBuyFreeLiveTheoryCourse;
 import com.ym.mec.biz.dal.entity.TempLiveTeacherCard;
-import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.dal.enums.HumanCostTypeEnum;
+import com.ym.mec.biz.dal.enums.LevelEnum;
+import com.ym.mec.biz.dal.enums.TemplateTypeEnum;
+import com.ym.mec.biz.service.HumanCostService;
+import com.ym.mec.biz.service.TempBuyFreeLiveTheoryCourseService;
 import com.ym.mec.common.dal.BaseDAO;
-import com.ym.mec.common.entity.UploadReturnBean;
 import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.util.excel.POIUtil;
 import com.ym.mec.util.ini.IniFileUtil;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.poi.ss.usermodel.PictureData;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import com.ym.mec.common.service.impl.BaseServiceImpl;
-import com.ym.mec.biz.dal.entity.TempBuyFreeLiveTheoryCourse;
-import com.ym.mec.biz.service.TempBuyFreeLiveTheoryCourseService;
-import com.ym.mec.biz.dal.dao.TempBuyFreeLiveTheoryCourseDao;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
@@ -42,6 +43,9 @@ public class TempBuyFreeLiveTheoryCourseServiceImpl extends BaseServiceImpl<Inte
     @Resource
     private TempLiveTeacherCardDao tempLiveTeacherCardDao;
 
+    @Resource
+    private HumanCostService humanCostService;
+
     @Override
     public BaseDAO<Integer, TempBuyFreeLiveTheoryCourse> getDAO() {
         return tempBuyFreeLiveTheoryCourseDao;
@@ -56,46 +60,50 @@ public class TempBuyFreeLiveTheoryCourseServiceImpl extends BaseServiceImpl<Inte
         List<TempBuyFreeLiveTheoryCourse> tempList = new ArrayList<>();
 
         List<String> errMsg = new ArrayList();
-        List<Map<String, Object>> sheet = sheetsListMap.get("Sheet0");
-
-        for (int i = 0; i < sheet.size(); i++) {
-            Map<String, Object> row = sheet.get(i);
-            if (row.size() == 0) {
-                continue;
-            }
-            JSONObject objectMap = new JSONObject();
-            for (String s : row.keySet()) {
-                String columnValue = columns.get(s);
-                if (StringUtils.isEmpty(columnValue)) {
+        for (String sheetName : sheetsListMap.keySet()) {
+            List<Map<String, Object>> sheet = sheetsListMap.get(sheetName);
+            for (int i = 0; i < sheet.size(); i++) {
+                Map<String, Object> row = sheet.get(i);
+                if (row.size() == 0) {
                     continue;
                 }
-                if (null == row.get(s)) {
-                    continue;
+                JSONObject objectMap = new JSONObject();
+                for (String s : row.keySet()) {
+                    String columnValue = columns.get(s);
+                    if (StringUtils.isEmpty(columnValue)) {
+                        continue;
+                    }
+                    if (null == row.get(s)) {
+                        continue;
+                    }
+                    objectMap.put(columnValue, row.get(s));
+                }
+                String err = "";
+                //校验
+                Integer tempId = objectMap.getInteger("id");
+                if (null == tempId) {
+                    err += "ID不能为空/";
+                }
+                String recommendLevel = objectMap.getString("recommendLevel");
+                if (StringUtils.isNotEmpty(recommendLevel) && null == LevelEnum.getByName(recommendLevel.trim())) {
+                    err += "老师推荐级别列,数据异常(可选值:一级 二级 三级)/";
+                }
+                if (StringUtils.isNotEmpty(err)) {
+                    err = "第" + (i + 1) + "行数据异常:" + err.substring(0, err.length() - 1);
+                    errMsg.add(err);
                 }
-                objectMap.put(columnValue, row.get(s));
-            }
-            String err = "";
-            //校验
-            Integer tempId = objectMap.getInteger("id");
-            if (null == tempId) {
-                err += "ID不能为空/";
-            }
-            String recommendLevel = objectMap.getString("recommendLevel");
-            if (StringUtils.isNotEmpty(recommendLevel) && null == LevelEnum.getByName(recommendLevel.trim())) {
-                err += "老师推荐级别列,数据异常(可选值:一级 二级 三级)/";
-            }
-            if (StringUtils.isNotEmpty(err)) {
-                err = "第" + (i + 1) + "行数据异常:" + err.substring(0, err.length() - 1);
-                errMsg.add(err);
-            }
 
-            try {
-                TempBuyFreeLiveTheoryCourse course = JSONObject.parseObject(objectMap.toJSONString(), TempBuyFreeLiveTheoryCourse.class);
-                tempList.add(course);
-            } catch (Exception ex) {
-                throw new BizException("导入数据出错", ex);
+                try {
+                    TempBuyFreeLiveTheoryCourse course = JSONObject.parseObject(objectMap.toJSONString(), TempBuyFreeLiveTheoryCourse.class);
+                    tempList.add(course);
+                } catch (Exception ex) {
+                    throw new BizException("导入数据出错", ex);
+                }
             }
         }
+        List<Map<String, Object>> sheet = sheetsListMap.get("Sheet0");
+
+
         if (!CollectionUtils.isEmpty(errMsg)) {
             return errMsg;
         }
@@ -187,6 +195,78 @@ public class TempBuyFreeLiveTheoryCourseServiceImpl extends BaseServiceImpl<Inte
         return null;
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public List<String> importHumanCost(MultipartFile file) throws Exception {
+        Map<String, List<Map<String, Object>>> sheetsListMap = POIUtil.importExcel(new ByteArrayInputStream(file.getBytes()), 2, file.getOriginalFilename());
+        InputStream inputStream = new ClassPathResource("columnMapper.ini").getInputStream();
+        Map<String, String> columns = IniFileUtil.readIniFile(inputStream, TemplateTypeEnum.ADDITIONAL_IMPORT.getMsg());
+        Integer tenantId = TenantContextHolder.getTenantId();
+        Map<String, Integer> organMap = getMap("organization", "name_", "id_", true,tenantId, String.class, Integer.class);
+        List<HumanCost> humanCosts = new ArrayList<>();
+        List<String> errMsg = new ArrayList();
+        StringBuffer sb = new StringBuffer();
+        for (String sheetName : sheetsListMap.keySet()) {
+            List<Map<String, Object>> sheet = sheetsListMap.get(sheetName);
+            for (int i = 0; i < sheet.size(); i++) {
+                int rowNum = i + 2;
+                Map<String, Object> row = sheet.get(i);
+                if (row.size() == 0) {
+                    continue;
+                }
+                JSONObject objectMap = new JSONObject();
+                valueIsNull: for (String s : row.keySet()) {
+                    String columnValue = columns.get(s);
+                    if (StringUtils.isEmpty(columnValue)) {
+                        continue;
+                    }
+                    if (null == row.get(s)) {
+                        continue;
+                    }
+                    if (columnValue.equals("organName") && StringUtils.isNotEmpty(row.get(s).toString())) {
+                        Integer integer = organMap.get(row.get(s));
+                        if (integer == null) {
+                            sb.append("第" + rowNum).append("行数据导入失败:分部名称不存在;");
+                            continue valueIsNull;
+                        } else {
+                            objectMap.put("organId", integer);
+                        }
+                        continue;
+                    }
+                    if (columnValue.equals("humanCostType")) {
+                        if (StringUtils.isEmpty(row.get(s).toString())) {
+                            sb.append("第" + rowNum).append("行数据导入失败:收支类型不存在;");
+                            continue valueIsNull;
+                        } else {
+                            for (HumanCostTypeEnum costTypeEnum : HumanCostTypeEnum.values()) {
+                                if (costTypeEnum.getMsg().equals(row.get(s).toString())) {
+                                    objectMap.put(columnValue, costTypeEnum);
+                                    break;
+                                }
+                            }
+                            continue;
+                        }
+                    }
+                    objectMap.put(columnValue, row.get(s));
+                }
+                try {
+                    HumanCost cost = JSONObject.parseObject(objectMap.toJSONString(), HumanCost.class);
+                    humanCosts.add(cost);
+                } catch (Exception ex) {
+                    throw new BizException("导入数据出错", ex);
+                }
+            }
+        }
+
+        if (!CollectionUtils.isEmpty(errMsg)) {
+            return errMsg;
+        }
+        if(!CollectionUtils.isEmpty(humanCosts)){
+            humanCostService.saveBatch(humanCosts);
+        }
+        return null;
+    }
+
     private String getMusicContent(String musicContent) {
         if (StringUtils.isEmpty(musicContent)) {
             return null;

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

@@ -205,15 +205,12 @@
             cssp.be_merged_,
             st.current_grade_num_,
             st.current_class_,
-        s.id_ as subject_id_,
-        s.name_ as subject_name_,
             IF(sa.status_ IS NULL,'TRUANT',sa.status_) status_
         FROM
             course_schedule_student_payment cssp
             LEFT JOIN sys_user su ON cssp.user_id_ = su.id_
             LEFT JOIN student st ON st.user_id_ = su.id_
             LEFT JOIN student_attendance sa ON cssp.course_schedule_id_ = sa.course_schedule_id_ AND cssp.user_id_ = sa.user_id_
-        left join subject s on st.subject_id_list_ = s.id_
         WHERE
             cssp.course_schedule_id_ =#{courseScheduleId}
             AND su.id_ IS NOT NULL

+ 23 - 0
mec-biz/src/main/resources/config/mybatis/CloudTeacherOrderMapper.xml

@@ -497,4 +497,27 @@
         </if>
         group by cto.organ_id_
     </select>
+    <select id="sumPersonIncome" resultType="java.util.Map">
+        select organ_id_ 'key',SUM(amount_) 'value' from cloud_teacher_order cto
+        where cto.music_group_id_ IS NULL
+        AND DATE_FORMAT(create_time_, '%Y-%m') = #{month} AND cto.status_ IN (1,2) AND amount_ > 0 group by  organ_id_
+    </select>
+    <select id="sumPersonalCloudAmount" resultType="java.util.Map">
+        select cto.organ_id_ 'key',TRUNCATE(SUM(operating_amount_ / (TIMESTAMPDIFF(DAY,cto.start_time_,cto.end_time_) + 1) *
+        (TIMESTAMPDIFF(DAY,CASE WHEN start_time_ &lt; #{firstDay} THEN #{firstDay} ELSE DATE_FORMAT(start_time_,'%Y-%m-%d') END,
+        CASE WHEN DATE_FORMAT(end_time_,'%Y-%m') > #{month} THEN #{lastDay} ELSE DATE_FORMAT(end_time_,'%Y-%m-%d') END) + 1)),2) 'value'
+        from cloud_teacher_order cto
+        where operating_amount_ = 480 AND music_group_id_ IS NOT NULL AND #{month} BETWEEN DATE_FORMAT(start_time_,'%Y-%m') AND DATE_FORMAT(end_time_,'%Y-%m')
+        AND cto.settlement_report_flag_ = 0 AND cto.status_ = 2
+        group by cto.organ_id_;
+    </select>
+    <select id="sumGroupCloudAmount" resultType="java.util.Map">
+        select cto.organ_id_ 'key',TRUNCATE(SUM(operating_amount_ / (TIMESTAMPDIFF(DAY,cto.start_time_,cto.end_time_) + 1) *
+                                                (TIMESTAMPDIFF(DAY,CASE WHEN start_time_ &lt; #{firstDay} THEN #{firstDay} ELSE DATE_FORMAT(start_time_,'%Y-%m-%d') END,
+                                                                   CASE WHEN DATE_FORMAT(end_time_,'%Y-%m') > #{month} THEN #{lastDay} ELSE DATE_FORMAT(end_time_,'%Y-%m-%d') END) + 1)),2) 'value'
+        from cloud_teacher_order cto
+        where operating_amount_ > 0 AND operating_amount_ != 480 AND #{month} BETWEEN DATE_FORMAT(start_time_,'%Y-%m') AND DATE_FORMAT(end_time_,'%Y-%m')
+          AND cto.settlement_report_flag_ = 0 AND cto.status_ = 2
+        group by cto.organ_id_
+    </select>
 </mapper>

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

@@ -4045,7 +4045,8 @@
         SELECT su.avatar_,su.username_,sa.user_id_,sb.name_ subject_name_,sa.qualified_flag_,s.repair_flag_
         FROM student_attendance sa
         LEFT JOIN student s ON s.user_id_ = sa.user_id_
-        LEFT JOIN `subject` sb ON sb.id_ = s.subject_id_list_
+        left join student_registration sr on sr.user_id_ = sa.user_id_ and sr.music_group_id_ = sa.music_group_id_
+        LEFT JOIN `subject` sb ON sb.id_ = sr.actual_subject_id_
         LEFT JOIN sys_user su ON su.id_ = s.user_id_
         WHERE sa.id_ IS NOT NULL AND sa.course_schedule_id_ = #{courseScheduleId} AND sa.status_ IN ('NORMAL','LATE')
         <include refid="global.limit"/>

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

@@ -834,11 +834,12 @@
     <select id="getCourseStudents" resultType="com.ym.mec.biz.dal.dto.BasicUserDto">
 		SELECT cssp.user_id_ userId,st.member_rank_setting_id_ memberRankSettingId,
 		       s.name_ subjectName,su.avatar_ headUrl,su.username_ name,
-		       st.subject_id_list_ subjectIdList,st.repair_flag_ repairFlag
+                s.id_ subjectIdList,st.repair_flag_ repairFlag
 		FROM course_schedule_student_payment cssp
 		LEFT JOIN sys_user su ON su.id_ = cssp.user_id_
 		LEFT JOIN student st ON st.user_id_ = cssp.user_id_
-		LEFT JOIN `subject` s ON s.id_ = st.subject_id_list_
+        left join student_registration sr on sr.user_id_ = cssp.user_id_ and sr.music_group_id_ = cssp.music_group_id_
+        LEFT JOIN `subject` s ON s.id_ = sr.actual_subject_id_
 		WHERE cssp.course_schedule_id_ = #{courseScheduleId}
 	</select>
 	<select id="hasCourse" resultType="java.lang.Boolean">

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

@@ -218,7 +218,7 @@
 			su.avatar_ headUrl,
 			GROUP_CONCAT(sub.name_) subjectName,
 		    stu.member_rank_setting_id_ memberRankSettingId,
-			stu.subject_id_list_ subjectIdList,
+            sub.id_ subjectIdList,
 			sees.music_group_id_ musicGroupId
 		FROM
 			student_extracurricular_exercises_situation_ sees
@@ -226,8 +226,9 @@
 				LEFT JOIN class_group_student_mapper cgsm ON sees.student_id_ = cgsm.user_id_
 			</if>
 			LEFT JOIN student stu ON stu.user_id_ = sees.student_id_
+            left join student_registration sr on sees.student_id_ = sr.user_id_ and sr.music_group_id_ = sees.music_group_id_
 			LEFT JOIN sys_user su ON su.id_ = sees.student_id_
-			LEFT JOIN `subject` sub ON FIND_IN_SET( sub.id_, stu.subject_id_list_ )
+			LEFT JOIN `subject` sub ON sub.id_ = sr.actual_subject_id_
 		WHERE
 			sees.monday_ = #{startDate}
 			AND sees.teacher_id_ = #{teacherId}

+ 14 - 4
mec-biz/src/main/resources/config/mybatis/FinancialExpenditureMapper.xml

@@ -14,13 +14,17 @@
         <result column="organ_id_" property="organId"/>
         <result column="cooperation_organ_id_" property="cooperationOrganId"/>
         <result column="apply_user_" property="applyUser"/>
+        <result column="student_id_" property="studentId"/>
         <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="fee_project_" property="feeProject" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="amount_" property="amount"/>
         <result column="item_detail_" property="itemDetail"/>
         <result column="payment_time_" property="paymentTime"/>
+        <result column="effective_time_" property="effectiveTime"/>
+        <result column="current_amount_" property="currentAmount"/>
         <result column="del_flag_" property="delFlag"/>
         <result column="cause_" property="cause"/>
+        <result column="aproval_time_" property="aprovalTime"/>
         <result column="create_time_" property="createTime"/>
         <result column="update_time_" property="updateTime"/>
 		<result column="tenant_id_" property="tenantId" />
@@ -47,26 +51,31 @@
             keyProperty="id">
         INSERT INTO financial_expenditure (batch_no_, financial_process_no_, dingtalk_process_no_,
                                            process_id_,organ_id_, cooperation_organ_id_, apply_user_, apply_user_id_, amount_, item_detail_,
-                                           payment_time_, cause_, create_time_, update_time_, fee_project_, type_, tenant_id_)
+                                           payment_time_, cause_, create_time_, update_time_, fee_project_, type_,
+                                           tenant_id_,student_id_,effective_time_,aproval_time_,current_amount_)
         VALUES (#{batchNo}, #{financialProcessNo}, #{dingtalkProcessNo},#{processId}, #{organId}, #{cooperationOrganId},
                 #{applyUser}, #{applyUserId}, #{amount},
                 #{itemDetail}, #{paymentTime}, #{cause}, now(), now(),
                 #{feeProject,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-                #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{tenantId})
+                #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+                #{tenantId},#{studentId},#{effectiveTime},#{aprovalTime},#{currentAmount})
     </insert>
 
     <insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.FinancialExpenditure" useGeneratedKeys="true"
             keyColumn="id"
             keyProperty="id">
         INSERT INTO financial_expenditure (batch_no_,financial_process_no_,dingtalk_process_no_,
-        process_id_,organ_id_,cooperation_organ_id_,apply_user_,amount_,item_detail_,payment_time_,cause_,create_time_,update_time_,fee_project_,type_,tenant_id_)
+        process_id_,organ_id_,cooperation_organ_id_,apply_user_,amount_,item_detail_,payment_time_,
+                                           cause_,create_time_,update_time_,fee_project_,type_,tenant_id_,
+                                           student_id_,effective_time_,aproval_time_,current_amount_)
         VALUES
         <foreach collection="financialExpenditures" item="item" separator=",">
             (#{item.batchNo},#{item.financialProcessNo},#{item.dingtalkProcessNo},#{item.processId},#{item.organId},
             #{item.cooperationOrganId},#{item.applyUser},#{item.amount},
             #{item.itemDetail},#{item.paymentTime},#{item.cause},now(),now(),
             #{item.feeProject,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-            #{item.type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{item.tenantId})
+            #{item.type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{item.tenantId},
+             #{item.studentId},#{item.effectiveTime},#{item.aprovalTime},#{item.currentAmount})
         </foreach>
     </insert>
 
@@ -228,6 +237,7 @@
         <result property="process" column="process"/>
         <result property="title" column="title"/>
         <result property="deptId" column="dept_id"/>
+        <result property="updateTime" column="update_time"/>
     </resultMap>
     <select id="getWorkOrderInfo" resultMap="PWorkOrderInfo">
         SELECT woi.*,su.mec_user_id FROM oa_pro.p_work_order_info woi

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

@@ -1,28 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ym.mec.biz.dal.dao.HumanCostDao">
-  <resultMap id="BaseResultMap" type="com.ym.mec.biz.dal.entity.HumanCost">
-                         <result column="id_" jdbcType="INTEGER" property="id"/>
-                                  <result column="organ_id_" jdbcType="INTEGER" property="organId"/>
-                                  <result column="organ_name_" jdbcType="VARCHAR" property="organName"/>
-                                  <result column="fixed_cost_" jdbcType="VARCHAR" property="fixedCost"/>
-                                  <result column="change_cost_" jdbcType="VARCHAR" property="changeCost"/>
-                                  <result column="month_" jdbcType="VARCHAR" property="month"/>
-                                  <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
-                                  <result column="update_time_" jdbcType="TIMESTAMP" property="updateTime"/>
-                </resultMap>
-  
-  <sql id="Base_Column_List">    
-                                            id_, organ_id_, organ_name_, fixed_cost_, change_cost_, month_, create_time_, update_time_
-  </sql>
-  
-   <insert id="insertBatch" keyColumn="" keyProperty="" useGeneratedKeys="true"
-            parameterType="com.ym.mec.biz.dal.entity.HumanCost">
-       insert into human_cost(id_, organ_id_, organ_name_, fixed_cost_, change_cost_, month_, create_time_, update_time_)
-       values
-       <foreach collection="entities" item="entity" separator=",">
-       (#{entity.id}, #{entity.organId}, #{entity.organName}, #{entity.fixedCost}, #{entity.changeCost}, #{entity.month}, #{entity.createTime}, #{entity.updateTime})
-       </foreach>
-   </insert>
-
 </mapper>

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

@@ -180,7 +180,7 @@
 		select id_ organ_id_,name_ organ_name_,#{month} month_ from organization where del_flag_ = 0 and tenant_id_ = 1
 	</select>
 	<select id="sumSellAmount" resultMap="OperatingReportNew">
-		select so.organ_id_,SUM(so.actual_amount_) sale_amount_,SUM(CASE WHEN so.status_ = 1 THEN 0 ELSE so.sell_cost_ * so.num_ END) sale_cost_ from sell_order so
+		select so.organ_id_,SUM(so.expect_amount_) sale_amount_,SUM(CASE WHEN so.status_ = 1 THEN 0 ELSE so.organ_sell_cost_ * so.num_ END) sale_cost_ from sell_order so
 		left join student_payment_order spo ON spo.order_no_ = so.order_no_
 		left join music_group mg ON mg.id_ = spo.music_group_id_ AND spo.group_type_ = 'MUSIC'
 		where (mg.musical_instruments_provide_status_ = 1 AND mg.musical_instruments_provide_time_ = #{month}) OR
@@ -199,8 +199,9 @@
 		(TIMESTAMPDIFF(DAY,CASE WHEN start_time_ &lt; #{firstDay} THEN #{firstDay} ELSE DATE_FORMAT(start_time_,'%Y-%m-%d') END,
 		CASE WHEN DATE_FORMAT(end_time_,'%Y-%m') > #{month} THEN #{lastDay} ELSE DATE_FORMAT(end_time_,'%Y-%m-%d') END) + 1)),2) 'value'
 		from cloud_teacher_order cto
-		where operating_amount_ > 0 AND #{month} BETWEEN DATE_FORMAT(start_time_,'%Y-%m') AND cto.settlement_report_flag_ = 0 AND cto.status_ = 2
-		AND DATE_FORMAT(end_time_,'%Y-%m') group by cto.organ_id_;
+		where operating_amount_ > 0 AND #{month} BETWEEN DATE_FORMAT(start_time_,'%Y-%m') AND DATE_FORMAT(end_time_,'%Y-%m')
+		AND cto.settlement_report_flag_ = 0 AND cto.status_ = 2
+		group by cto.organ_id_;
 	</select>
 	<select id="sumGroupCloudAmount" resultType="java.util.Map">
 		select orc.organ_id_ 'key',TRUNCATE(SUM(orc.cloud_price_ / (TIMESTAMPDIFF(DAY,orc.start_date_,orc.end_date_) + 1) *
@@ -337,4 +338,85 @@
 		where orc.start_date_ IS NULL AND orc.course_price_ > 0
 		group by orc.organ_id_
 	</select>
+	<select id="sumStudentManagementFee" resultType="java.util.Map">
+		select mg.organ_id_ 'key',COUNT(DISTINCT sr.user_id_) * 80 'value' from student_registration sr
+		left join music_group mg ON mg.id_ = sr.music_group_id_
+		where sr.music_group_status_ = 'NORMAL' AND mg.status_ = 'PROGRESS'
+		group by mg.organ_id_
+	</select>
+	<select id="sumTotalSellAmount" resultMap="OperatingReportNew">
+		select SUM(so.organ_sell_cost_ * so.num_) sale_amount_,SUM(CASE WHEN so.status_ = 1 THEN 0 ELSE so.sell_cost_ * so.num_ END) sale_cost_ from sell_order so
+		left join student_payment_order spo ON spo.order_no_ = so.order_no_
+		left join music_group mg ON mg.id_ = spo.music_group_id_ AND spo.group_type_ = 'MUSIC'
+		where (mg.musical_instruments_provide_status_ = 1 AND mg.musical_instruments_provide_time_ = #{month}) OR
+			(DATE_FORMAT(spo.pay_time_,'%Y-%m') = #{month} AND (mg.musical_instruments_provide_status_ IS NULL OR mg.musical_instruments_provide_status_ = 1));
+
+	</select>
+    <select id="queryOASummaryExpenses" resultType="com.ym.mec.biz.dal.dto.OASummaryExpensesDto">
+		SELECT
+			o.name_ AS organName,
+			SUM(CASE WHEN fee_project_ = 3 THEN fe.amount_ ELSE 0 END) AS house,
+			SUM(CASE WHEN fee_project_ = 4 THEN fe.amount_ ELSE 0 END) AS office,
+			SUM(CASE WHEN fee_project_ = 5 THEN fe.amount_ ELSE 0 END) AS mainsProperty,
+			SUM(CASE WHEN fee_project_ = 6 THEN fe.amount_ ELSE 0 END) AS travel,
+			SUM(CASE WHEN fee_project_ = 7 THEN fe.amount_ ELSE 0 END) AS services,
+			SUM(CASE WHEN fee_project_ = 8 THEN fe.amount_ ELSE 0 END) AS welfare,
+			SUM(CASE WHEN fee_project_ = 9 THEN fe.amount_ ELSE 0 END) AS activities,
+			SUM(CASE WHEN fee_project_ = 10 THEN fe.amount_ ELSE 0 END) AS traffic,
+			SUM(CASE WHEN fee_project_ = 11 THEN fe.amount_ ELSE 0 END) AS certificates,
+			SUM(CASE WHEN fee_project_ IN (12,20) THEN fe.amount_ ELSE 0 END) AS instrument,
+			SUM(CASE WHEN fee_project_ = 15 THEN fe.amount_ ELSE 0 END) AS communications,
+			SUM(CASE WHEN fee_project_ = 16 THEN fe.amount_ ELSE 0 END) AS postalTransport,
+			SUM(CASE WHEN fee_project_ = 17 THEN fe.amount_ ELSE 0 END) AS hospitality,
+			SUM(CASE WHEN fee_project_ = 19 THEN fe.amount_ ELSE 0 END) AS refund,
+			SUM(CASE WHEN fee_project_ = 26 THEN fe.amount_ ELSE 0 END) AS other,
+			SUM(CASE WHEN hc.human_cost_type_ = 'FIXED' THEN hc.amount_ ELSE 0 END) AS fixedHumanCost,
+			SUM(CASE WHEN hc.human_cost_type_ = 'VARIABLE' THEN hc.amount_ ELSE 0 END) AS variableHumanCost,
+			SUM(CASE WHEN hc.human_cost_type_ = 'NETWORK_CLASSROOM' THEN hc.amount_ ELSE 0 END) AS network,
+			SUM(CASE WHEN hc.human_cost_type_ = 'CLOUD_COACHING_COST' THEN hc.amount_ ELSE 0 END) AS cloudCoachingCost,
+			SUM(CASE WHEN hc.human_cost_type_ = 'INTERNAL_SETTLEMENT' THEN hc.amount_ ELSE 0 END) AS internalSettlement,
+			SUM(CASE WHEN hc.human_cost_type_ = 'STUDENT_MANAGEMENT_FEE_ADJUSTMENT' THEN hc.amount_ ELSE 0 END) AS studentManagementFeeAdjustment
+		FROM
+			organization o
+				left join financial_expenditure fe ON o.id_ = fe.organ_id_ AND fe.process_id_ = 28 AND DATE_FORMAT(fe.aproval_time_, '%Y-%m') = #{month} AND fe.del_flag_ = 0
+				left join human_cost hc ON hc.organ_id_ = o.id_  AND hc.month_ = #{month}
+		WHERE
+			o.tenant_id_ = 1 AND o.del_flag_ = 0
+		GROUP BY
+			o.id_
+	</select>
+	<resultMap type="com.ym.mec.biz.dal.entity.FinancialExpenditure" id="FinancialExpenditure">
+		<result column="name_" property="organName"/>
+		<result column="batch_no_" property="batchNo"/>
+		<result column="cooperation_organ_name_" property="cooperationOrganName"/>
+		<result column="apply_user_" property="applyUser"/>
+		<result column="student_id_" property="studentId"/>
+		<result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+		<result column="fee_project_" property="feeProject" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+		<result column="amount_" property="amount"/>
+		<result column="payment_time_" property="paymentTime"/>
+		<result column="current_amount_" property="currentAmount"/>
+		<result column="cause_" property="cause"/>
+	</resultMap>
+	<select id="queryOASummaryExpensesDetail" resultMap="FinancialExpenditure">
+		select o.name_,fe.batch_no_,co.name_ cooperationName,fe.apply_user_,
+			   fe.fee_project_,fe.type_,fe.amount_,fe.payment_time_,fe.cause_,fe.current_amount_,fe.student_id_
+		from financial_expenditure fe
+				 left join organization o ON o.id_ = fe.organ_id_
+				 left join cooperation_organ co ON co.id_ = fe.cooperation_organ_id_
+		where fe.process_id_ IN (19,22,28,51) AND fe.del_flag_ = 0 AND DATE_FORMAT(fe.aproval_time_, '%Y-%m') = #{month}
+		order by fe.id_ DESC
+	</select>
+	<select id="sumHumanCost" resultType="com.ym.mec.biz.dal.dto.HumanTypeDto">
+		select
+			organ_id_,
+			SUM(CASE WHEN human_cost_type_ = 'FIXED' THEN amount_ ELSE 0 END) AS fixedCost,
+			SUM(CASE WHEN human_cost_type_ = 'VARIABLE' THEN amount_ ELSE 0 END) AS variableCost,
+			SUM(CASE WHEN human_cost_type_ = 'NETWORK_CLASSROOM' THEN amount_ ELSE 0 END) AS networkClassroomCost,
+			SUM(CASE WHEN human_cost_type_ = 'CLOUD_COACHING_COST' THEN amount_ ELSE 0 END) AS cloudCoachingCost,
+			SUM(CASE WHEN human_cost_type_ = 'INTERNAL_SETTLEMENT' THEN amount_ ELSE 0 END) AS internalSettlement,
+			SUM(CASE WHEN human_cost_type_ = 'STUDENT_MANAGEMENT_FEE_ADJUSTMENT' THEN amount_ ELSE 0 END) AS studentManagementFeeAdjustment
+		from human_cost
+		where month_ = #{month} group by organ_id_
+	</select>
 </mapper>

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

@@ -334,6 +334,13 @@
         <include refid="queryPaymentOrder"/>
     </select>
 
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount1" resultType="int" parameterType="map">
+        SELECT COUNT(spo.id_) FROM student_payment_order spo
+        WHERE spo.tenant_id_ = 1 AND DATE_FORMAT(spo.create_time_,'%Y-%m') = #{month} AND spo.status_ = 'SUCCESS'
+          AND spo.group_type_ != 'MALL_SELL'
+    </select>
+
     <sql id="queryPaymentMallOrder">
         <where>
         	spo.tenant_id_ = #{tenantId}
@@ -421,6 +428,9 @@
             <if test="orderEndDate != null">
                 AND DATE_FORMAT(spo.create_time_,'%Y-%m-%d') &lt;= #{orderEndDate}
             </if>
+            <if test="month != null and month != ''">
+                AND DATE_FORMAT(spo.create_time_,'%Y-%m') = #{month} AND spo.status_ = 'SUCCESS'
+            </if>
             <if test="notGroupType != null and notGroupType != ''">
                 AND spo.group_type_ != #{notGroupType}
             </if>
@@ -747,6 +757,17 @@
         <include refid="queryPaymentOrder"/>
         ORDER BY spo.id_ ASC
     </select>
+
+    <select id="ExportQueryPage1" resultMap="orderAndDetail" parameterType="map">
+        SELECT spo.*,spod.id_ detail_id_,spod.type_ detail_type_,spod.price_
+        detail_price_,spod.kit_group_purchase_type_ detail_kit_group_purchase_type_,
+        sci.charge_type_
+        FROM student_payment_order spo
+        LEFT JOIN student_payment_order_detail spod on spo.id_ = spod.payment_order_id_
+        LEFT JOIN sporadic_charge_info sci on spo.music_group_id_ = sci.id_
+        WHERE spo.tenant_id_ = 1 AND DATE_FORMAT(spo.create_time_,'%Y-%m') = #{month} AND spo.status_ = 'SUCCESS'
+        ORDER BY spo.id_ ASC
+    </select>
     <resultMap id="SporadicChargeInfoDtoMap" type="com.ym.mec.biz.dal.dto.SporadicChargeInfoDto">
         <result property="organName" column="organ_name_"/>
         <result property="title" column="title_"/>

+ 1 - 1
mec-education/src/main/resources/bootstrap-test.properties

@@ -1,7 +1,7 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=43.137.4.92:8848
+spring.cloud.nacos.config.server-addr=10.206.0.17:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
 spring.cloud.nacos.config.namespace=414816a2-0087-48ac-b50b-375d61cf1cd5
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e

+ 1 - 1
mec-eureka/src/main/resources/bootstrap-test.properties

@@ -1,7 +1,7 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=43.137.4.92:8848
+spring.cloud.nacos.config.server-addr=10.206.0.17:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
 spring.cloud.nacos.config.namespace=414816a2-0087-48ac-b50b-375d61cf1cd5
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e

+ 1 - 1
mec-gateway/mec-gateway-web/src/main/resources/bootstrap-test.properties

@@ -1,7 +1,7 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=43.137.4.92:8848
+spring.cloud.nacos.config.server-addr=10.206.0.17:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
 spring.cloud.nacos.config.namespace=414816a2-0087-48ac-b50b-375d61cf1cd5
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e

+ 1 - 1
mec-im/src/main/resources/bootstrap-test.properties

@@ -1,7 +1,7 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=43.137.4.92:8848
+spring.cloud.nacos.config.server-addr=10.206.0.17:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
 spring.cloud.nacos.config.namespace=414816a2-0087-48ac-b50b-375d61cf1cd5
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e

+ 1 - 1
mec-mall/mall-admin/src/main/resources/bootstrap-test.properties

@@ -1,7 +1,7 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=43.137.4.92:8848
+spring.cloud.nacos.config.server-addr=10.206.0.17:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
 spring.cloud.nacos.config.namespace=414816a2-0087-48ac-b50b-375d61cf1cd5
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e

+ 1 - 1
mec-mall/mall-portal/src/main/resources/bootstrap-test.properties

@@ -1,7 +1,7 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=43.137.4.92:8848
+spring.cloud.nacos.config.server-addr=10.206.0.17:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
 spring.cloud.nacos.config.namespace=414816a2-0087-48ac-b50b-375d61cf1cd5
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e

+ 1 - 1
mec-monitor/src/main/resources/bootstrap-test.properties

@@ -1,7 +1,7 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=43.137.4.92:8848
+spring.cloud.nacos.config.server-addr=10.206.0.17:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
 spring.cloud.nacos.config.namespace=414816a2-0087-48ac-b50b-375d61cf1cd5
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e

+ 1 - 1
mec-student/src/main/resources/bootstrap-test.properties

@@ -1,7 +1,7 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=43.137.4.92:8848
+spring.cloud.nacos.config.server-addr=10.206.0.17:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
 spring.cloud.nacos.config.namespace=414816a2-0087-48ac-b50b-375d61cf1cd5
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e

+ 1 - 1
mec-task/src/main/resources/bootstrap-test.properties

@@ -1,7 +1,7 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=43.137.4.92:8848
+spring.cloud.nacos.config.server-addr=10.206.0.17:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
 spring.cloud.nacos.config.namespace=414816a2-0087-48ac-b50b-375d61cf1cd5
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e

+ 8 - 1
mec-teacher/src/main/java/com/ym/mec/teacher/controller/ExtracurricularExercisesController.java

@@ -5,6 +5,7 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
 import com.ym.mec.biz.dal.dao.StudentDao;
 import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
+import com.ym.mec.biz.dal.dao.SubjectDao;
 import com.ym.mec.biz.dal.dto.BasicUserDto;
 import com.ym.mec.biz.dal.dto.CourseHomeworkWrapper;
 import com.ym.mec.biz.dal.dto.StudentExercisesSituationDto;
@@ -57,6 +58,9 @@ public class ExtracurricularExercisesController extends BaseController {
     @Autowired
     private StudentDao studentDao;
 
+    @Autowired
+    private SubjectDao subjectDao;
+
     @ApiOperation(value = "获取教师有服务指标的课程列表")
     @GetMapping("/queryTeacherServeHomeworkDetail")
     public HttpResponseResult queryTeacherServeHomeworkDetail(TeacherServeHomeworkQueryInfo queryInfo) {
@@ -221,7 +225,10 @@ public class ExtracurricularExercisesController extends BaseController {
         List<ClassGroup> classGroups = classGroupStudentMapperDao.getStudentClassGroupWithTeacher(studentIds, sysUser.getId(), musicGroupId);
         result.put("classGroups", classGroups);
 
-        List<Subject> studentSubjects = studentDao.getStudentSubjects(studentIds);
+//        List<Subject> studentSubjects = studentDao.getStudentSubjects(studentIds);
+//        result.put("subjects", studentSubjects);
+        List<Integer> subjectIds = dontServeStudents.stream().map(BasicUserDto::getSubjectId).collect(Collectors.toList());
+        List<Subject> studentSubjects = subjectDao.findBySubjectIds(subjectIds);
         result.put("subjects", studentSubjects);
         return succeed(result);
     }

+ 1 - 1
mec-teacher/src/main/resources/bootstrap-test.properties

@@ -1,7 +1,7 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=43.137.4.92:8848
+spring.cloud.nacos.config.server-addr=10.206.0.17:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
 spring.cloud.nacos.config.namespace=414816a2-0087-48ac-b50b-375d61cf1cd5
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e

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

@@ -1,25 +1,20 @@
 package com.ym.mec.web.controller;
 
-import com.ym.mec.biz.dal.entity.TempBuyFreeLiveTheoryCourse;
+import com.ym.mec.biz.dal.entity.FinancialExpenditure;
+import com.ym.mec.biz.dal.entity.Goods;
+import com.ym.mec.biz.dal.entity.StudentPaymentRouteOrder;
+import com.ym.mec.biz.dal.enums.TemplateTypeEnum;
 import com.ym.mec.biz.service.*;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.entity.UploadReturnBean;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.util.date.DateUtil;
+import com.ym.mec.util.excel.POIUtil;
+import com.ym.mec.util.upload.UploadUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import javax.servlet.http.HttpServletResponse;
-
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.tomcat.util.http.fileupload.IOUtils;
@@ -27,26 +22,17 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.util.CollectionUtils;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.entity.FinancialExpenditure;
-import com.ym.mec.biz.dal.entity.Goods;
-import com.ym.mec.biz.dal.entity.StudentPaymentRouteOrder;
-import com.ym.mec.biz.dal.enums.TemplateTypeEnum;
-import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.entity.HttpResponseResult;
-import com.ym.mec.common.entity.UploadReturnBean;
-import com.ym.mec.common.exception.BizException;
-import com.ym.mec.util.date.DateUtil;
-import com.ym.mec.util.excel.POIUtil;
-import com.ym.mec.util.upload.UploadUtil;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
 
 @RequestMapping("import")
 @Api(tags = "数据导入服务")
@@ -58,7 +44,7 @@ public class ImportController extends BaseController {
     @Autowired
     private FinancialExpenditureService financialExpenditureService;
     @Autowired
-    private SysUserFeignService sysUserFeignService;
+    private SysUserService sysUserService;
     @Autowired
     private StudentPaymentRouteOrderService studentPaymentRouteOrderService;
     @Autowired
@@ -74,11 +60,7 @@ public class ImportController extends BaseController {
     @PostMapping(value = "goods")
     @PreAuthorize("@pcs.hasPermissions('import/goods')")
     public HttpResponseResult<List<Goods>> importGoods(@RequestParam("file") MultipartFile file) throws Exception {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed("用户信息获取失败");
-        }
-        return succeed(goodsService.importGoods(file, sysUser.getId()));
+        return succeed(goodsService.importGoods(file, sysUserService.getUserId()));
     }
 
     @ApiOperation(value = "导入财务支出")
@@ -92,10 +74,6 @@ public class ImportController extends BaseController {
     @PostMapping(value = "importRedemptionCode")
     @PreAuthorize("@pcs.hasPermissions('import/importRedemptionCode')")
     public HttpResponseResult<String> importRedemptionCode(@RequestParam("file") MultipartFile file) throws Exception {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed("用户信息获取失败");
-        }
         String msg = appRedemptionCodeService.importRedemptionCode(file);
         HttpResponseResult response = succeed(null);
         response.setMsg(msg);
@@ -186,11 +164,7 @@ public class ImportController extends BaseController {
     @PostMapping(value = "importBuyFreeLiveTheoryCourse")
     @PreAuthorize("@pcs.hasPermissions('import/importBuyFreeLiveTheoryCourseList')")
     public HttpResponseResult<List<String>> importBuyFreeLiveTheoryCourse(@RequestParam("file") MultipartFile file) throws Exception {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed("用户信息获取失败");
-        }
-        List<String> errMsg = liveTheoryCourseService.importBuyFreeLiveTheoryCourse(file, sysUser.getId());
+        List<String> errMsg = liveTheoryCourseService.importBuyFreeLiveTheoryCourse(file, sysUserService.getUserId());
         if (CollectionUtils.isEmpty(errMsg)) {
             return succeed();
         } else {
@@ -202,11 +176,19 @@ public class ImportController extends BaseController {
     @PostMapping(value = "importLiveTeacherCard")
     @PreAuthorize("@pcs.hasPermissions('import/importLiveTeacherCard')")
     public HttpResponseResult<List<String>> importLiveTeacherCard(@RequestParam("file") MultipartFile file) throws Exception {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed("用户信息获取失败");
+        List<String> errMsg = liveTheoryCourseService.importLiveTeacherCard(file, sysUserService.getUserId());
+        if (CollectionUtils.isEmpty(errMsg)) {
+            return succeed();
+        } else {
+            return failed(StringUtils.join(errMsg, ","));
         }
-        List<String> errMsg = liveTheoryCourseService.importLiveTeacherCard(file, sysUser.getId());
+    }
+
+    @ApiOperation(value = "经营报表额外的数据录入")
+    @PostMapping(value = "importHumanCost")
+    @PreAuthorize("@pcs.hasPermissions('import/importHumanCost')")
+    public HttpResponseResult<List<String>> importHumanCost(@RequestParam("file") MultipartFile file) throws Exception {
+        List<String> errMsg = liveTheoryCourseService.importHumanCost(file);
         if (CollectionUtils.isEmpty(errMsg)) {
             return succeed();
         } else {

+ 1 - 1
mec-web/src/main/resources/bootstrap-test.properties

@@ -1,7 +1,7 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=43.137.4.92:8848
+spring.cloud.nacos.config.server-addr=10.206.0.17:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
 spring.cloud.nacos.config.namespace=414816a2-0087-48ac-b50b-375d61cf1cd5
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e

+ 7 - 1
mec-web/src/main/resources/columnMapper.ini

@@ -102,4 +102,10 @@ ID = id
 已提交数 = exercisesReplyNum
 点评数 = exercisesMessageNum
 出勤率 = signRate
-达标率 = passRate
+达标率 = passRate
+
+[经营报表额外的收支导入]
+分部 = organName
+收支类型 = humanCostType
+金额 = amount
+日期 = month

BIN
mec-web/src/main/resources/excelTemplate/经营报表外部数据导入模板.xls


+ 14 - 2
mec-web/src/main/resources/exportColumnMapper.ini

@@ -299,8 +299,8 @@ headColumns = ["分部", "预计回访人数", "实际回访人数", "覆盖率"
 fieldColumns = ["organName","expectVisitNum","visitNum","coverRate"]
 
 [经营报表导出]
-headColumns = ["月份","分部", "销售收入", "服务收入", "课程收入", "云教练收入","乐保收入", "业务退费", "收入合计", "销售成本", "固定费用", "变动费用", "内部结算", "成本费用合计", "准可自由支配利润", "预收账款", "云教练预收", "课程预收", "商品预收", "其他预收", "预付账款", "应收账款", "应付账款"]
-fieldColumns = ["month","organName","saleAmount","serviceAmount","courseAmount","cloudAmount","maintenanceAmount","businessRefund","totalIncome","saleCost","fixedCosts","variableCosts","internalSettlement","totalCost","quasiDiscretionaryProfit","prepaidFee","cloudPrepaidFee","coursePrepaidFee","salePrepaidFee","otherPrepaidFee","prepayments","receivables","payable"]
+headColumns = ["月份","分部", "销售收入", "服务收入""业务退费", "收入合计", "销售成本", "固定费用", "变动费用", "内部结算", "成本费用合计", "准可自由支配利润", "预收账款","预付账款", "应收账款", "应付账款"]
+fieldColumns = ["month","organName","saleAmount","serviceAmount","businessRefund","totalIncome","saleCost","fixedCosts","variableCosts","internalSettlement","totalCost","quasiDiscretionaryProfit","prepaidFee","prepayments","receivables","payable"]
 
 [实际课耗导出]
 headColumns = ["分部", "在读人数", "大于等于5节", "4节","3节","2节","1节","0节"]
@@ -341,3 +341,15 @@ fieldColumns = ["name", "amount"]
 [老师云教练使用数据]
 headColumns = ["分部", "老师姓名", "声部", "课程时长(分)", "课程云教练使用时长(分)", "云教练使用总时长(分)"]
 fieldColumns = ["organName", "teacherName", "subjectName", "courseTime", "playTime", "totalPlayTime"]
+
+[oa费用汇总]
+headColumns = ["城市","固定人力成本","房屋","办公","水电物业","变动人力成本","差旅","外部服务","福利","活动","交通","考级","临时场地租赁","通讯","邮递运输","招待费","其他","学员管理费","云教练成本","网络教室成本","业务退费","内部结算"]
+fieldColumns = ["organName", "fixedHumanCost", "house", "office", "mainsProperty","variableHumanCost", "travel","services", "welfare", "activities", "traffic", "certificates", "instrument","communications", "postalTransport", "hospitality", "other", "studentManagementFeeAdjustment","cloudCoachingCost", "network", "refund", "internalSettlement"]
+
+[oa费用明细]
+headColumns = ["城市","钉钉流程编号","费用归属学校","申请人","费用项目","费用类型","付款金额","付款时间","明细","学员编号","当期金额"]
+fieldColumns = ["organName","batchNo","cooperationOrganName","applyUser","feeProject.desc","type.desc","amount","paymentTime","cause","studentId","currentAmount"]
+
+[经营报表收入汇总]
+headColumns = ["城市","学生指导费课耗收入","承担课程云教练收入","学校课程采买课耗收入","考级","维修费用","乐保费用","其他服务收入","不承担课程云教练收入","团购乐器","团购教辅","大件乐器","其他","服务收入","销售收入"]
+fieldColumns = ["organName","studentGuidanceIncome","cloudCoachIncome","coursePurchaseIncome","examIncome","maintenanceCost","instrumentInsuranceCost","otherServiceIncome","saleCloudCoachIncome","groupPurchaseInstruments","groupPurchaseTeachingAids","largeInstruments","otherIncome","serviceIncome","salesIncome"]

+ 1 - 1
mec-websocket/src/main/resources/bootstrap-test.properties

@@ -1,7 +1,7 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=43.137.4.92:8848
+spring.cloud.nacos.config.server-addr=10.206.0.17:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
 spring.cloud.nacos.config.namespace=414816a2-0087-48ac-b50b-375d61cf1cd5
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e