Browse Source

Merge remote-tracking branch 'origin/master'

Joburgess 4 năm trước cách đây
mục cha
commit
015155fea8
79 tập tin đã thay đổi với 3412 bổ sung240 xóa
  1. 2 2
      mec-auth/mec-auth-server/src/main/resources/logback-spring.xml
  2. 13 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CooperationOrganDao.java
  3. 17 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/FinancialExpenditureDao.java
  4. 9 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/GoodsDao.java
  5. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/OperatingReportDao.java
  6. 84 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SellOrderDao.java
  7. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDetailDao.java
  8. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentRouteOrderDao.java
  9. 2 13
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/FinancialExpenditureDto.java
  10. 38 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/GoodsSellDto.java
  11. 26 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/OrganFullJobResourceNumDto.java
  12. 53 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/OutOrderInfoDto.java
  13. 52 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/RepairGoodsDto.java
  14. 61 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentPaymentRouteOrderDto.java
  15. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CooperationOrgan.java
  16. 34 10
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/FinancialExpenditure.java
  17. 252 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/OperatingReport.java
  18. 0 11
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Organization.java
  19. 345 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SellOrder.java
  20. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentOrderDetail.java
  21. 28 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentRepair.java
  22. 26 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExpenditureTypeEnum.java
  23. 43 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/FeeProjectEnum.java
  24. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/GoodsType.java
  25. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/GroupType.java
  26. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderTypeEnum.java
  27. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/PlatformCashAccountDetailTypeEnum.java
  28. 30 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/SellTypeEnum.java
  29. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/CooperationOrganQueryInfo.java
  30. 32 21
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/FinancialExpenditureQueryInfo.java
  31. 13 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/GoodsQueryInfo.java
  32. 62 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/OperatingReportQueryInfo.java
  33. 76 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/SellOrderQueryInfo.java
  34. 5 5
      mec-biz/src/main/java/com/ym/mec/biz/service/NotifyCallback.java
  35. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/service/OperatingReportService.java
  36. 34 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SellOrderService.java
  37. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderDetailService.java
  38. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentRouteOrderService.java
  39. 23 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentRepairService.java
  40. 8 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ContractServiceImpl.java
  41. 36 12
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/FinancialExpenditureServiceImpl.java
  42. 0 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/GoodsServiceImpl.java
  43. 9 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  44. 308 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OperatingReportServiceImpl.java
  45. 215 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SellOrderServiceImpl.java
  46. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderDetailServiceImpl.java
  47. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  48. 82 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentRouteOrderServiceImpl.java
  49. 11 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  50. 220 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java
  51. 25 2
      mec-biz/src/main/resources/config/mybatis/CooperationOrganMapper.xml
  52. 47 26
      mec-biz/src/main/resources/config/mybatis/FinancialExpenditureMapper.xml
  53. 18 10
      mec-biz/src/main/resources/config/mybatis/GoodsMapper.xml
  54. 164 0
      mec-biz/src/main/resources/config/mybatis/OperatingReportMapper.xml
  55. 2 9
      mec-biz/src/main/resources/config/mybatis/OrganizationMapper.xml
  56. 302 0
      mec-biz/src/main/resources/config/mybatis/SellOrderMapper.xml
  57. 14 0
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderDetailMapper.xml
  58. 1 3
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  59. 5 0
      mec-biz/src/main/resources/config/mybatis/StudentPaymentRouteOrderMapper.xml
  60. 13 4
      mec-biz/src/main/resources/config/mybatis/StudentRepairMapper.xml
  61. 9 2
      mec-biz/src/main/resources/config/mybatis/SysUserCashAccountDetailMapper.xml
  62. 4 0
      mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java
  63. 5 0
      mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java
  64. 11 0
      mec-common/common-core/src/main/java/com/ym/mec/common/service/BaseService.java
  65. 48 0
      mec-common/common-core/src/main/java/com/ym/mec/common/service/impl/BaseServiceImpl.java
  66. 5 4
      mec-gateway/mec-gateway-web/src/main/resources/application.yml
  67. 4 7
      mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java
  68. 32 6
      mec-student/src/main/java/com/ym/mec/student/controller/RepairController.java
  69. 18 31
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  70. 20 0
      mec-task/src/main/java/com/ym/mec/task/jobs/OperatingReportTask.java
  71. 0 3
      mec-teacher/src/main/resources/application.yml
  72. 33 4
      mec-web/src/main/java/com/ym/mec/web/controller/FinancialExpenditureController.java
  73. 127 0
      mec-web/src/main/java/com/ym/mec/web/controller/OperatingReportController.java
  74. 82 0
      mec-web/src/main/java/com/ym/mec/web/controller/SellOrderController.java
  75. 32 5
      mec-web/src/main/java/com/ym/mec/web/controller/StudentPaymentRouteOrderController.java
  76. 9 0
      mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java
  77. 21 5
      mec-web/src/main/java/com/ym/mec/web/controller/education/EduRepairController.java
  78. 8 7
      mec-web/src/main/resources/columnMapper.ini
  79. BIN
      mec-web/src/main/resources/excelTemplate/财务支出导入模板.xls

+ 2 - 2
mec-auth/mec-auth-server/src/main/resources/logback-spring.xml

@@ -27,8 +27,8 @@
 		</encoder>
 	</appender>
 
-	<logger name="com.ym.mec" level="DEBUG" />
-	<root level="DEBUG">
+	<logger name="com.ym.mec" level="INFO" />
+	<root level="INFO">
 		<appender-ref ref="stdout" />
 		<appender-ref ref="file" />
 	</root>

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

@@ -4,6 +4,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import com.ym.mec.biz.dal.dto.OrganFullJobResourceNumDto;
 import org.apache.ibatis.annotations.Param;
 
 import com.ym.mec.biz.dal.entity.CooperationOrgan;
@@ -14,6 +15,7 @@ public interface CooperationOrganDao extends BaseDAO<Integer, CooperationOrgan>
 
     /**
      * 根据机构编号获取合作单位(教学点)列表
+     *
      * @param organId
      * @return
      */
@@ -21,8 +23,18 @@ public interface CooperationOrganDao extends BaseDAO<Integer, CooperationOrgan>
 
     /**
      * 根据合作机构编号列表获取合作机构名称
+     *
      * @param organIds
      * @return
      */
-    List<Map<Integer,String>> queryNameByIds(String organIds);
+    List<Map<Integer, String>> queryNameByIds(String organIds);
+
+
+    List<OrganFullJobResourceNumDto> getOrganFullJobResourceNum();
+
+    /**
+     * 获取全部使用中合作单位
+     * @return
+     */
+    List<CooperationOrgan> getAllCooperationOrgan();
 }

+ 17 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/FinancialExpenditureDao.java

@@ -17,4 +17,21 @@ public interface FinancialExpenditureDao extends BaseDAO<Long, FinancialExpendit
     List<FinancialExpenditureDto> queryFinancialExpenditurePage(Map<String, Object> params);
 
     void batchDel(String ids);
+
+    /**
+     * 统计合作单位各类型的支出
+     * @return
+     */
+    List<FinancialExpenditure> getCooperationExpenditure();
+
+    /**
+     * @describe
+     * @apiNote 时光荏苒,认真工作的时间总是过得很快,而我、享受这一刻!
+     * @author zouxuan
+     * @date 2020/9/16
+     * @time 11:38
+     * @param collect:
+     * @return java.lang.Integer
+     */
+    List<String> countBydingTalk(@Param("collect") List<Object> collect);
 }

+ 9 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/GoodsDao.java

@@ -36,13 +36,20 @@ public interface GoodsDao extends BaseDAO<Integer, Goods> {
     List<Goods> findTypeGoods(@Param("type") String type);
 
     /**
+     * @param goodsList:
+     * @return void
      * @describe 批量新增
      * @apiNote 时光荏苒,认真工作的时间总是过得很快,而我、享受这一刻!
      * @author zouxuan
      * @date 2020/9/4
      * @time 14:39
-     * @param goodsList:
-     * @return void
      */
     void batchInsert(@Param("goodsList") List<Goods> goodsList);
+
+    /**
+     * 获取商品列表
+     * @param goodsIds
+     * @return
+     */
+    List<Goods> getGoodies(@Param("goodsIds") List<Integer> goodsIds);
 }

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/OperatingReportDao.java

@@ -0,0 +1,13 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.OperatingReport;
+import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface OperatingReportDao extends BaseDAO<Integer, OperatingReport> {
+
+    OperatingReport getReport(Map<String, Object> params);
+}

+ 84 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SellOrderDao.java

@@ -0,0 +1,84 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.OperatingReport;
+import com.ym.mec.biz.dal.entity.SellOrder;
+import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+
+public interface SellOrderDao extends BaseDAO<Integer, SellOrder> {
+
+    int batchInsert(@Param("sellOrders") List<SellOrder> sellOrders);
+
+    /**
+     * 获取订单的销售列表
+     *
+     * @param orderId
+     * @return
+     */
+    List<SellOrder> getOrderSellOrder(@Param("orderId") Long orderId);
+
+
+    /**
+     * 获取分部学校的收入支出(乐团订单)
+     *
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    List<OperatingReport> getMusicGroupMonthReport(@Param("startTime") Date startTime, @Param("endTime") Date endTime);
+
+    /**
+     * 获取分部学校的收入支出(VIP 网管课订单)
+     *
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    List<OperatingReport> getMusicVipPracticeMonthReport(@Param("startTime") Date startTime, @Param("endTime") Date endTime);
+
+    /**
+     * 获取分部学校的收入支出(外部订单)
+     *
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    List<OperatingReport> getOutOrderMonthReport(@Param("startTime") Date startTime, @Param("endTime") Date endTime);
+
+    /**
+     * 获取分部学校的收入支出(充值)
+     *
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    List<OperatingReport> getRechargeMonthReport(@Param("startTime") Date startTime, @Param("endTime") Date endTime);
+
+    /**
+     * 获取分部学校的收入支出(零星支付)
+     *
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    List<OperatingReport> getSporadicMonthReport(@Param("startTime") Date startTime, @Param("endTime") Date endTime);
+
+    /**
+     * 维修单和商品销售
+     *
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    List<OperatingReport> getRepairGoodsSellGroupMonthReport(@Param("startTime") Date startTime, @Param("endTime") Date endTime);
+
+    /**
+     * 根据订单号删除
+     * @param orderId
+     * @return
+     */
+    int deleteByOrderId(@Param("orderId") Long orderId);
+}

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

@@ -80,6 +80,13 @@ public interface StudentPaymentOrderDetailDao extends BaseDAO<Long, StudentPayme
     StudentPaymentOrderDetail findApplyOrderMusical(@Param("orderId") Long orderId);
 
     /**
+     * 获取订单详细
+     * @param orderId
+     * @return
+     */
+    List<StudentPaymentOrderDetail> getOrderDetail(@Param("orderId") Long orderId);
+
+    /**
      *
      * @param orderId
      * @return

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentRouteOrderDao.java

@@ -44,4 +44,12 @@ public interface StudentPaymentRouteOrderDao extends BaseDAO<Long, StudentPaymen
     );
 
     List<StudentPaymentOrderExportDto> ExportQueryPage(Map<String, Object> params);
+
+    /**
+     * 根据订单号删除
+     *
+     * @param orderNo
+     * @return
+     */
+    Boolean deleteByOrderNo(@Param("orderNo") String orderNo);
 }

+ 2 - 13
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/FinancialExpenditureDto.java

@@ -5,15 +5,12 @@ import io.swagger.annotations.ApiModelProperty;
 
 public class FinancialExpenditureDto extends FinancialExpenditure {
 
-    @ApiModelProperty(value = "批次号",required = false)
+    @ApiModelProperty(value = "分部",required = false)
     private String organName;
 
-    @ApiModelProperty(value = "批次号",required = false)
+    @ApiModelProperty(value = "合作单位",required = false)
     private String cooperationName;
 
-    @ApiModelProperty(value = "批次号",required = false)
-    private String realName;
-
     public String getOrganName() {
         return organName;
     }
@@ -29,12 +26,4 @@ public class FinancialExpenditureDto extends FinancialExpenditure {
     public void setCooperationName(String cooperationName) {
         this.cooperationName = cooperationName;
     }
-
-    public String getRealName() {
-        return realName;
-    }
-
-    public void setRealName(String realName) {
-        this.realName = realName;
-    }
 }

+ 38 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/GoodsSellDto.java

@@ -0,0 +1,38 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+public class GoodsSellDto{
+	@ApiModelProperty(value = "使用余额", required = false)
+	private Boolean isUseBalancePayment;
+
+	@ApiModelProperty(value = "商品列表", required = false)
+	String goodsId;
+
+	@ApiModelProperty(value = "是否重复支付", required = false)
+	private boolean isRepeatPay;
+
+	public boolean getIsRepeatPay() {
+		return isRepeatPay;
+	}
+
+	public void setIsRepeatPay(boolean repeatPay) {
+		isRepeatPay = repeatPay;
+	}
+
+	public Boolean getIsUseBalancePayment() {
+		return isUseBalancePayment;
+	}
+
+	public void setIsUseBalancePayment(Boolean useBalancePayment) {
+		isUseBalancePayment = useBalancePayment;
+	}
+
+	public String getGoodsId() {
+		return goodsId;
+	}
+
+	public void setGoodsId(String goodsId) {
+		this.goodsId = goodsId;
+	}
+}

+ 26 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/OrganFullJobResourceNumDto.java

@@ -0,0 +1,26 @@
+package com.ym.mec.biz.dal.dto;
+
+/**
+ * 合作单位全职资源数
+ */
+public class OrganFullJobResourceNumDto {
+    private Integer organId;
+
+    private Integer num;
+
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+
+    public Integer getNum() {
+        return num;
+    }
+
+    public void setNum(Integer num) {
+        this.num = num;
+    }
+}

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

@@ -0,0 +1,53 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.SellOrder;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+public class OutOrderInfoDto {
+
+    private StudentPaymentOrder StudentPaymentOrder;
+
+    @ApiModelProperty(value = "服务收入",required = true)
+    private BigDecimal serviceAmount = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "销售收入",required = true)
+    private BigDecimal goodsAmount = BigDecimal.ZERO;
+
+    private List<SellOrder> sellOrders;
+
+    public List<SellOrder> getSellOrders() {
+        return sellOrders;
+    }
+
+    public void setSellOrders(List<SellOrder> sellOrders) {
+        this.sellOrders = sellOrders;
+    }
+
+    public BigDecimal getServiceAmount() {
+        return serviceAmount;
+    }
+
+    public void setServiceAmount(BigDecimal serviceAmount) {
+        this.serviceAmount = serviceAmount;
+    }
+
+    public BigDecimal getGoodsAmount() {
+        return goodsAmount;
+    }
+
+    public void setGoodsAmount(BigDecimal goodsAmount) {
+        this.goodsAmount = goodsAmount;
+    }
+
+    public com.ym.mec.biz.dal.entity.StudentPaymentOrder getStudentPaymentOrder() {
+        return StudentPaymentOrder;
+    }
+
+    public void setStudentPaymentOrder(com.ym.mec.biz.dal.entity.StudentPaymentOrder studentPaymentOrder) {
+        StudentPaymentOrder = studentPaymentOrder;
+    }
+}

+ 52 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/RepairGoodsDto.java

@@ -0,0 +1,52 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+
+public class RepairGoodsDto {
+
+    @ApiModelProperty(value = "商品单价", required = true)
+    private BigDecimal groupPurchasePrice;
+
+    @ApiModelProperty(value = "商品图片", required = true)
+    private String image;
+
+    @ApiModelProperty(value = "商品名称", required = true)
+    private String name;
+
+    @ApiModelProperty(value = "商品编号", required = true)
+    private Integer id;
+
+    public BigDecimal getGroupPurchasePrice() {
+        return groupPurchasePrice;
+    }
+
+    public void setGroupPurchasePrice(BigDecimal groupPurchasePrice) {
+        this.groupPurchasePrice = groupPurchasePrice;
+    }
+
+    public String getImage() {
+        return image;
+    }
+
+    public void setImage(String image) {
+        this.image = image;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+}

+ 61 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentPaymentRouteOrderDto.java

@@ -1,8 +1,10 @@
 package com.ym.mec.biz.dal.dto;
 
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import io.swagger.annotations.ApiModelProperty;
 
 import java.math.BigDecimal;
+import java.util.Map;
 
 public class StudentPaymentRouteOrderDto extends StudentPaymentOrder {
 
@@ -12,6 +14,12 @@ public class StudentPaymentRouteOrderDto extends StudentPaymentOrder {
     private Integer routeOrganId;
 
     /**
+     * 学校id
+     */
+    @ApiModelProperty(value = "学校id",required = true)
+    private Integer schoolId;
+
+    /**
      * 分润金额
      */
     private BigDecimal routeAmount;
@@ -26,11 +34,23 @@ public class StudentPaymentRouteOrderDto extends StudentPaymentOrder {
      */
     private String merNo;
 
+    @ApiModelProperty(value = "收入类型",required = true)
+    private Integer saleType;
+
     /**
-     * 备注
+     * 是否承担手续费
      */
     private String feeFlag;
 
+    @ApiModelProperty(value = "商品 id->数量",required = true)
+    private Map<Integer, Integer> goodies;
+
+    @ApiModelProperty(value = "服务收入",required = true)
+    private BigDecimal serviceAmount = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "销售收入",required = true)
+    private BigDecimal goodsAmount = BigDecimal.ZERO;
+
     public Integer getRouteOrganId() {
         return routeOrganId;
     }
@@ -70,4 +90,44 @@ public class StudentPaymentRouteOrderDto extends StudentPaymentOrder {
     public void setRouteBalanceAmount(BigDecimal routeBalanceAmount) {
         this.routeBalanceAmount = routeBalanceAmount;
     }
+
+    public Integer getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(Integer schoolId) {
+        this.schoolId = schoolId;
+    }
+
+    public Map<Integer, Integer> getGoodies() {
+        return goodies;
+    }
+
+    public void setGoodies(Map<Integer, Integer> goodies) {
+        this.goodies = goodies;
+    }
+
+    public Integer getSaleType() {
+        return saleType;
+    }
+
+    public void setSaleType(Integer saleType) {
+        this.saleType = saleType;
+    }
+
+    public BigDecimal getServiceAmount() {
+        return serviceAmount;
+    }
+
+    public void setServiceAmount(BigDecimal serviceAmount) {
+        this.serviceAmount = serviceAmount;
+    }
+
+    public BigDecimal getGoodsAmount() {
+        return goodsAmount;
+    }
+
+    public void setGoodsAmount(BigDecimal goodsAmount) {
+        this.goodsAmount = goodsAmount;
+    }
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CooperationOrgan.java

@@ -72,6 +72,17 @@ public class CooperationOrgan {
 	/**  */
 	private java.util.Date updateTime;
 
+	@ApiModelProperty(value = "是否全职资源",required = false)
+	private Integer fullJobResource;
+
+	public Integer getFullJobResource() {
+		return fullJobResource;
+	}
+
+	public void setFullJobResource(Integer fullJobResource) {
+		this.fullJobResource = fullJobResource;
+	}
+
 	public Integer getOrganId() {
 		return organId;
 	}

+ 34 - 10
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/FinancialExpenditure.java

@@ -1,5 +1,7 @@
 package com.ym.mec.biz.dal.entity;
 
+import com.ym.mec.biz.dal.enums.ExpenditureTypeEnum;
+import com.ym.mec.biz.dal.enums.FeeProjectEnum;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.math.BigDecimal;
@@ -27,8 +29,14 @@ public class FinancialExpenditure {
 	@ApiModelProperty(value = "学校/合作单位",required = false)
 	private Integer cooperationOrganId;
 	/**  */
-	@ApiModelProperty(value = "申请人编号",required = false)
-	private Integer applyUserId;
+	@ApiModelProperty(value = "申请人",required = false)
+	private String applyUser;
+
+	@ApiModelProperty(value = "支出类型(1:固定费用、2:变动费用:3:业务退费)",required = false)
+	private ExpenditureTypeEnum type;
+
+	@ApiModelProperty(value = "费用项目",required = false)
+	private FeeProjectEnum feeProject;
 	/**  */
 	@ApiModelProperty(value = "费用",required = false)
 	private BigDecimal amount;
@@ -48,6 +56,22 @@ public class FinancialExpenditure {
 	/**  */
 	private Integer delFlag;
 
+	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;
 	}
@@ -96,14 +120,6 @@ public class FinancialExpenditure {
 		this.cooperationOrganId = cooperationOrganId;
 	}
 
-	public Integer getApplyUserId() {
-		return applyUserId;
-	}
-
-	public void setApplyUserId(Integer applyUserId) {
-		this.applyUserId = applyUserId;
-	}
-
 	public BigDecimal getAmount() {
 		return amount;
 	}
@@ -159,4 +175,12 @@ public class FinancialExpenditure {
 	public void setDelFlag(Integer delFlag) {
 		this.delFlag = delFlag;
 	}
+
+	public ExpenditureTypeEnum getType() {
+		return type;
+	}
+
+	public void setType(ExpenditureTypeEnum type) {
+		this.type = type;
+	}
 }

+ 252 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/OperatingReport.java

@@ -0,0 +1,252 @@
+package com.ym.mec.biz.dal.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@ApiModel(value="com-ym-OperatingReport")
+public class OperatingReport {
+    @ApiModelProperty(value="")
+    private Integer id;
+
+    /**
+    * 分部id
+    */
+    @ApiModelProperty(value="分部id")
+    private Integer organId;
+
+    @ApiModelProperty(value="分部名称")
+    private String organName;
+
+    /**
+    * 学校id
+    */
+    @ApiModelProperty(value="合作单位id")
+    private Integer cooperationOrganId;
+
+    @ApiModelProperty(value="学校名称")
+    private String schoolName;
+
+    /**
+    * 销售收入
+    */
+    @ApiModelProperty(value="销售收入")
+    private BigDecimal sellAmount = BigDecimal.ZERO;
+
+    /**
+     * 不确定收入
+     */
+    @ApiModelProperty(value="不确定收入")
+    private BigDecimal otherIncome = BigDecimal.ZERO;
+
+    /**
+     * 服务收入
+     */
+    @ApiModelProperty(value="服务收入")
+    private BigDecimal serviceAmount = BigDecimal.ZERO;
+
+    /**
+    * 业务退费
+    */
+    @ApiModelProperty(value="业务退费")
+    private BigDecimal refundAmount = BigDecimal.ZERO;
+
+    /**
+    * 收入合计
+    */
+    @ApiModelProperty(value="收入合计")
+    private BigDecimal incomeTotal = BigDecimal.ZERO;
+
+    /**
+    * 销售成本
+    */
+    @ApiModelProperty(value="销售成本")
+    private BigDecimal sellCost = BigDecimal.ZERO;
+
+    /**
+    * 固定支出
+    */
+    @ApiModelProperty(value="固定支出")
+    private BigDecimal expensesAmount = BigDecimal.ZERO;
+
+    /**
+    * 变动支出
+    */
+    @ApiModelProperty(value="变动支出")
+    private BigDecimal variableCost = BigDecimal.ZERO;
+
+    /**
+    * 分摊费用
+    */
+    @ApiModelProperty(value="分摊费用")
+    private BigDecimal distributionAmount = BigDecimal.ZERO;
+
+    /**
+    * 成本费用合计
+    */
+    @ApiModelProperty(value="成本费用合计")
+    private BigDecimal costAmount = BigDecimal.ZERO;
+
+    /**
+    * 利润
+    */
+    @ApiModelProperty(value="利润")
+    private BigDecimal profit = BigDecimal.ZERO;
+
+    /**
+    * 月份
+    */
+    @ApiModelProperty(value="月份")
+    private Date month;
+
+    /**
+    * 生成时间
+    */
+    @ApiModelProperty(value="生成时间")
+    private Date createTime;
+
+    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 Integer getCooperationOrganId() {
+        return cooperationOrganId;
+    }
+
+    public void setCooperationOrganId(Integer cooperationOrganId) {
+        this.cooperationOrganId = cooperationOrganId;
+    }
+
+    public BigDecimal getSellAmount() {
+        return sellAmount;
+    }
+
+    public void setSellAmount(BigDecimal sellAmount) {
+        this.sellAmount = sellAmount;
+    }
+
+    public BigDecimal getServiceAmount() {
+        return serviceAmount;
+    }
+
+    public void setServiceAmount(BigDecimal serviceAmount) {
+        this.serviceAmount = serviceAmount;
+    }
+
+    public BigDecimal getRefundAmount() {
+        return refundAmount;
+    }
+
+    public void setRefundAmount(BigDecimal refundAmount) {
+        this.refundAmount = refundAmount;
+    }
+
+    public BigDecimal getIncomeTotal() {
+        return incomeTotal;
+    }
+
+    public void setIncomeTotal(BigDecimal incomeTotal) {
+        this.incomeTotal = incomeTotal;
+    }
+
+    public BigDecimal getSellCost() {
+        return sellCost;
+    }
+
+    public void setSellCost(BigDecimal sellCost) {
+        this.sellCost = sellCost;
+    }
+
+    public BigDecimal getExpensesAmount() {
+        return expensesAmount;
+    }
+
+    public void setExpensesAmount(BigDecimal expensesAmount) {
+        this.expensesAmount = expensesAmount;
+    }
+
+    public BigDecimal getVariableCost() {
+        return variableCost;
+    }
+
+    public void setVariableCost(BigDecimal variableCost) {
+        this.variableCost = variableCost;
+    }
+
+    public BigDecimal getDistributionAmount() {
+        return distributionAmount;
+    }
+
+    public void setDistributionAmount(BigDecimal distributionAmount) {
+        this.distributionAmount = distributionAmount;
+    }
+
+    public BigDecimal getCostAmount() {
+        return costAmount;
+    }
+
+    public void setCostAmount(BigDecimal costAmount) {
+        this.costAmount = costAmount;
+    }
+
+    public BigDecimal getProfit() {
+        return profit;
+    }
+
+    public void setProfit(BigDecimal profit) {
+        this.profit = profit;
+    }
+
+    public Date getMonth() {
+        return month;
+    }
+
+    public void setMonth(Date month) {
+        this.month = month;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
+    public String getSchoolName() {
+        return schoolName;
+    }
+
+    public void setSchoolName(String schoolName) {
+        this.schoolName = schoolName;
+    }
+
+    public BigDecimal getOtherIncome() {
+        return otherIncome;
+    }
+
+    public void setOtherIncome(BigDecimal otherIncome) {
+        this.otherIncome = otherIncome;
+    }
+}

+ 0 - 11
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Organization.java

@@ -51,20 +51,9 @@ public class Organization {
 	@ApiModelProperty(value = "地址",required = false)
 	private String address;
 
-	@ApiModelProperty(value = "是否全职资源",required = false)
-	private Integer fullJobResource;
-
 	@ApiModelProperty(value = "子节点列表",required = false)
 	private List<Organization> organizations;
 
-	public Integer getFullJobResource() {
-		return fullJobResource;
-	}
-
-	public void setFullJobResource(Integer fullJobResource) {
-		this.fullJobResource = fullJobResource;
-	}
-
 	public String getAreaName() {
 		return areaName;
 	}

+ 345 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SellOrder.java

@@ -0,0 +1,345 @@
+package com.ym.mec.biz.dal.entity;
+
+import com.ym.mec.biz.dal.enums.SellTypeEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@ApiModel(value="com-ym-SellOrder")
+public class SellOrder {
+    @ApiModelProperty(value="")
+    private Integer id;
+
+    /**
+    * 分部id
+    */
+    @ApiModelProperty(value="分部id")
+    private Integer organId;
+
+    /**
+     * 学校id
+     */
+    @ApiModelProperty(value="学校id")
+    private Integer cooperationOrganId;
+
+    /**
+     * 学校名称
+     */
+    @ApiModelProperty(value="学校名称")
+    private String schoolName;
+
+    /**
+    * 交易流水号
+    */
+    @ApiModelProperty(value="交易流水号")
+    private String transNo;
+
+    /**
+     * 交易流水号
+     */
+    @ApiModelProperty(value="订单id")
+    private Long orderId;
+
+    private String organName;
+
+    /**
+    * 订单号
+    */
+    @ApiModelProperty(value="订单号")
+    private String orderNo;
+
+    /**
+    * 应付金额
+    */
+    @ApiModelProperty(value="应付金额")
+    private BigDecimal expectAmount;
+
+    /**
+    * 现金支付金额
+    */
+    @ApiModelProperty(value="现金支付金额")
+    private BigDecimal actualAmount;
+
+    /**
+    * 余额支付金额
+    */
+    @ApiModelProperty(value="余额支付金额")
+    private BigDecimal balanceAmount;
+
+    /**
+    * 销售成本
+    */
+    @ApiModelProperty(value="销售成本")
+    private BigDecimal sellCost;
+
+    /**
+     * 销售成本2
+     */
+    @ApiModelProperty(value="销售成本2")
+    private String sellCost2;
+
+    /**
+    * 销售类型
+    */
+    @ApiModelProperty(value="销售类型")
+    private SellTypeEnum type;
+
+    /**
+    * 商品id
+    */
+    @ApiModelProperty(value="商品id")
+    private Integer goodsId;
+
+    /**
+     * 商品名称
+     */
+    @ApiModelProperty(value="商品名称")
+    private String goodsName;
+
+    /**
+    * 数量
+    */
+    @ApiModelProperty(value="数量")
+    private Integer num;
+
+    /**
+    * 用户id
+    */
+    @ApiModelProperty(value="用户id")
+    private Integer userId;
+
+    private String userName;
+
+    private String phone;
+
+    /**
+    * 交易方式
+    */
+    @ApiModelProperty(value="交易方式")
+    private String paymentChannel;
+
+    /**
+    * 收款账户
+    */
+    @ApiModelProperty(value="收款账户")
+    private String merNo;
+
+    /**
+    * 交易时间
+    */
+    @ApiModelProperty(value="交易时间")
+    private Date sellTime;
+
+    /**
+    * 创建时间
+    */
+    @ApiModelProperty(value="创建时间")
+    private Date createIme;
+
+    /**
+    * 更新时间
+    */
+    @ApiModelProperty(value="更新时间")
+    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 Integer getCooperationOrganId() {
+        return cooperationOrganId;
+    }
+
+    public void setCooperationOrganId(Integer cooperationOrganId) {
+        this.cooperationOrganId = cooperationOrganId;
+    }
+
+    public String getTransNo() {
+        return transNo;
+    }
+
+    public void setTransNo(String transNo) {
+        this.transNo = transNo;
+    }
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+
+    public BigDecimal getExpectAmount() {
+        return expectAmount;
+    }
+
+    public void setExpectAmount(BigDecimal expectAmount) {
+        this.expectAmount = expectAmount;
+    }
+
+    public BigDecimal getActualAmount() {
+        return actualAmount;
+    }
+
+    public void setActualAmount(BigDecimal actualAmount) {
+        this.actualAmount = actualAmount;
+    }
+
+    public BigDecimal getBalanceAmount() {
+        return balanceAmount;
+    }
+
+    public void setBalanceAmount(BigDecimal balanceAmount) {
+        this.balanceAmount = balanceAmount;
+    }
+
+    public BigDecimal getSellCost() {
+        return sellCost;
+    }
+
+    public void setSellCost(BigDecimal sellCost) {
+        this.sellCost = sellCost;
+    }
+
+    public SellTypeEnum getType() {
+        return type;
+    }
+
+    public void setType(SellTypeEnum type) {
+        this.type = type;
+    }
+
+    public Integer getGoodsId() {
+        return goodsId;
+    }
+
+    public void setGoodsId(Integer goodsId) {
+        this.goodsId = goodsId;
+    }
+
+    public Integer getNum() {
+        return num;
+    }
+
+    public void setNum(Integer num) {
+        this.num = num;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getPaymentChannel() {
+        return paymentChannel;
+    }
+
+    public void setPaymentChannel(String paymentChannel) {
+        this.paymentChannel = paymentChannel;
+    }
+
+    public String getMerNo() {
+        return merNo;
+    }
+
+    public void setMerNo(String merNo) {
+        this.merNo = merNo;
+    }
+
+    public Date getSellTime() {
+        return sellTime;
+    }
+
+    public void setSellTime(Date sellTime) {
+        this.sellTime = sellTime;
+    }
+
+    public Date getCreateIme() {
+        return createIme;
+    }
+
+    public void setCreateIme(Date createIme) {
+        this.createIme = createIme;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public String getGoodsName() {
+        return goodsName;
+    }
+
+    public void setGoodsName(String goodsName) {
+        this.goodsName = goodsName;
+    }
+
+    public String getSellCost2() {
+        return sellCost2;
+    }
+
+    public void setSellCost2(String sellCost2) {
+        this.sellCost2 = sellCost2;
+    }
+
+    public Long getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(Long orderId) {
+        this.orderId = orderId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
+    public String getSchoolName() {
+        return schoolName;
+    }
+
+    public void setSchoolName(String schoolName) {
+        this.schoolName = schoolName;
+    }
+}

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentOrderDetail.java

@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * 对应数据库表(student_payment_order_detail):
@@ -45,6 +46,8 @@ public class StudentPaymentOrderDetail {
 	//商品成本价
 	private String goodsPrices;
 
+	private List<Goods> goodsList;
+
 	//减免费用
 	private BigDecimal remitFee;
 
@@ -125,6 +128,14 @@ public class StudentPaymentOrderDetail {
 		this.goodsPrices = goodsPrices;
 	}
 
+	public List<Goods> getGoodsList() {
+		return goodsList;
+	}
+
+	public void setGoodsList(List<Goods> goodsList) {
+		this.goodsList = goodsList;
+	}
+
 	public BigDecimal getRemitFee() {
 		return remitFee;
 	}

+ 28 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentRepair.java

@@ -20,6 +20,12 @@ public class StudentRepair {
     @ApiModelProperty(value = "分部id", required = false)
     private Integer organId;
 
+    /**
+     * 分部id
+     */
+    @ApiModelProperty(value = "乐团id", required = false)
+    private String musicGroupId;
+
 
     /**
     * 分部名称
@@ -142,6 +148,12 @@ public class StudentRepair {
     private String address;
 
     /**
+    * 所选商品
+    */
+    @ApiModelProperty(value = "商品", required = false)
+    private String goodsJson;
+
+    /**
     * 支付状态 0-未支付 1-支付中 2-已支付
     */
     @ApiModelProperty(value = "支付状态 0-未支付 1-支付中 2-已支付", required = false)
@@ -171,6 +183,14 @@ public class StudentRepair {
     @ApiModelProperty(value = "更新时间", required = false)
     private Date updateTime;
 
+    public String getGoodsJson() {
+        return goodsJson;
+    }
+
+    public void setGoodsJson(String goodsJson) {
+        this.goodsJson = goodsJson;
+    }
+
     public String getOrganName() {
         return organName;
     }
@@ -399,4 +419,12 @@ public class StudentRepair {
     public String toString() {
         return ToStringBuilder.reflectionToString(this);
     }
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
 }

+ 26 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExpenditureTypeEnum.java

@@ -0,0 +1,26 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+public enum ExpenditureTypeEnum implements BaseEnum<Integer, ExpenditureTypeEnum> {
+    FIXED(1, "固定费用"),
+    VARIABLE(2, "变动费用"),
+    REFUND(3, "业务退费");
+    private Integer code;
+
+    private String desc;
+
+    private ExpenditureTypeEnum(Integer code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+    @Override
+    public Integer getCode() {
+        return code;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+}

+ 43 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/FeeProjectEnum.java

@@ -0,0 +1,43 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+public enum FeeProjectEnum implements BaseEnum<Integer, FeeProjectEnum> {
+    SALARY(1, "工资"),
+    SOCIAL_SECURITY_HOUSE_ALLOWANCE(2, "社保公积金"),
+    HOUSE(3, "房屋"),
+    OFFICE(4, "办公"),
+    MAINS_PROPERTY(5, "水电物业"),
+    TRAVEL(6, "差旅"),
+    SERVICES(7, "服务"),
+    WELFARE(8, "福利"),
+    ACTIVITIES(9, "活动"),
+    TRAFFIC(10, "交通"),
+    CERTIFICATES(11, "考级"),
+    INSTRUMENT(12, "琴行"),
+    HANDLING(13, "手续费"),
+    TAXES(14, "税金"),
+    COMMUNICATIONS(15, "通讯"),
+    POSTAL_TRANSPORT(16, "邮递运输"),
+    HOSPITALITY(17, "招待费"),
+    NETWORK_CLASS(18, "网络教室成本"),
+    REFUND(19, "退费");
+
+    private Integer code;
+
+    private String desc;
+
+    FeeProjectEnum(Integer code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+    @Override
+    public Integer getCode() {
+        return code;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+}

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

@@ -4,7 +4,8 @@ import com.ym.mec.common.enums.BaseEnum;
 
 public enum GoodsType implements BaseEnum<String, GoodsType> {
 
-	INSTRUMENT("INSTRUMENT", "乐器"), ACCESSORIES("ACCESSORIES", "辅件"),
+	INSTRUMENT("INSTRUMENT", "乐器"),
+	ACCESSORIES("ACCESSORIES", "辅件"),
 	TEACHING("TEACHING", "教材"),
 	STAFF("STAFF", "曲谱"),
 	OTHER("OTHER", "其他");

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

@@ -10,6 +10,7 @@ public enum GroupType implements BaseEnum<String, GroupType> {
 	PRACTICE("网管课"),
 	COMM("对外课程"),
 	REPAIR("乐器维修"),
+	GOODS_SELL("商品销售"),
 	OUTORDER("外部订单");
 
 	private String desc;

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

@@ -16,8 +16,11 @@ public enum OrderTypeEnum implements BaseEnum<String, OrderTypeEnum> {
 	COURSE_GROUP_BUY("COURSE_GROUP_BUY","对外课程购买"),
 	LUCK("LUCK", "福袋活动"),
 	TENANT_RECHARGE("TENANT_RECHARGE","租户充值"),
+	GOODS_SELL("GOODS_SELL","商品销售"),
+	OUTORDER("OUTORDER", "外部订单"),
 	REPAIR("REPAIR","乐器维修");
 
+
 	private String code;
 
 	private String msg;

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

@@ -13,6 +13,7 @@ public enum PlatformCashAccountDetailTypeEnum implements BaseEnum<String, Platfo
 	FILL_ACCOUNT("FILL_ACCOUNT", "人工补账"),
 	REFUNDS("REFUNDS", "退费"),
 	REWARDS("REWARDS", "奖励"),
+	GOODS_SELL("GOODS_SELL", "商品销售"),
 	WAGE("WAGE", "工资");
 
 	private String code;

+ 30 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/SellTypeEnum.java

@@ -0,0 +1,30 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+public enum SellTypeEnum implements BaseEnum<String, SellTypeEnum> {
+
+	INSTRUMENT("INSTRUMENT", "乐器销售"),
+	ACCESSORIES("ACCESSORIES", "配件销售"),
+	SCHOOL_BUY("SCHOOL_BUY", "学校采购"),
+	OTHER("OTHER", "书籍(其他)");
+
+	private String code;
+
+	private String desc;
+
+	private SellTypeEnum(String code, String desc) {
+		this.code = code;
+		this.desc = desc;
+	}
+
+	@Override
+	public String getCode() {
+		return code;
+	}
+
+	public String getDesc() {
+		return desc;
+	}
+
+}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/CooperationOrganQueryInfo.java

@@ -8,6 +8,16 @@ public class CooperationOrganQueryInfo extends QueryInfo {
     
     private Boolean isEnable;
 
+    private Integer fullJobResource;
+
+	public Integer getFullJobResource() {
+		return fullJobResource;
+	}
+
+	public void setFullJobResource(Integer fullJobResource) {
+		this.fullJobResource = fullJobResource;
+	}
+
 	public String getOrganId() {
 		return organId;
 	}

+ 32 - 21
mec-biz/src/main/java/com/ym/mec/biz/dal/page/FinancialExpenditureQueryInfo.java

@@ -14,20 +14,47 @@ public class FinancialExpenditureQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "钉钉流程编号",required = false)
     private String dingtalkProcessNo;
     /**  */
-    @ApiModelProperty(value = "分部",required = false)
-    private Integer organId;
-    /**  */
     @ApiModelProperty(value = "学校/合作单位",required = false)
     private Integer cooperationOrganId;
     /**  */
-    @ApiModelProperty(value = "申请人编号",required = false)
-    private Integer applyUserId;
+    @ApiModelProperty(value = "费用项目",required = false)
+    private Integer feeProject;
+    /**  */
+    @ApiModelProperty(value = "支出类型",required = false)
+    private Integer type;
     /**  */
     @ApiModelProperty(value = "开始时间",required = false)
     private String startTime;
     /**  */
     @ApiModelProperty(value = "结束时间",required = false)
     private String endTime;
+    /**  */
+    @ApiModelProperty(value = "分部编号",required = false)
+    private String organId;
+
+    public String getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(String organId) {
+        this.organId = organId;
+    }
+
+    public Integer getFeeProject() {
+        return feeProject;
+    }
+
+    public void setFeeProject(Integer feeProject) {
+        this.feeProject = feeProject;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
 
     public String getBatchNo() {
         return batchNo;
@@ -53,14 +80,6 @@ public class FinancialExpenditureQueryInfo extends QueryInfo {
         this.dingtalkProcessNo = dingtalkProcessNo;
     }
 
-    public Integer getOrganId() {
-        return organId;
-    }
-
-    public void setOrganId(Integer organId) {
-        this.organId = organId;
-    }
-
     public Integer getCooperationOrganId() {
         return cooperationOrganId;
     }
@@ -69,14 +88,6 @@ public class FinancialExpenditureQueryInfo extends QueryInfo {
         this.cooperationOrganId = cooperationOrganId;
     }
 
-    public Integer getApplyUserId() {
-        return applyUserId;
-    }
-
-    public void setApplyUserId(Integer applyUserId) {
-        this.applyUserId = applyUserId;
-    }
-
     public String getStartTime() {
         return startTime;
     }

+ 13 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/page/GoodsQueryInfo.java

@@ -1,9 +1,9 @@
 package com.ym.mec.biz.dal.page;
 
-import io.swagger.annotations.ApiModelProperty;
-
+import com.ym.mec.biz.dal.enums.GoodsType;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
 
 public class GoodsQueryInfo extends QueryInfo {
 
@@ -22,6 +22,17 @@ public class GoodsQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "状态(1,上架  0,下架)",required = false)
     private YesOrNoEnum status;
 
+    @ApiModelProperty(value = "商品类型", required = false)
+    private GoodsType type;
+
+    public GoodsType getType() {
+        return type;
+    }
+
+    public void setType(GoodsType type) {
+        this.type = type;
+    }
+
     public Integer getGoodsCategoryId() {
         return goodsCategoryId;
     }

+ 62 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/OperatingReportQueryInfo.java

@@ -0,0 +1,62 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+
+public class OperatingReportQueryInfo extends QueryInfo {
+
+    @ApiModelProperty(value = "分部id", required = false)
+    private String organIdList;
+
+    @ApiModelProperty(value = "合作机构", required = false)
+    private Integer cooperationOrganId;
+
+    @ApiModelProperty(value = "月份", required = false)
+    private Date month;
+
+    private Date startTime;
+
+    private Date endTime;
+
+    public String getOrganIdList() {
+        return organIdList;
+    }
+
+    public void setOrganIdList(String organIdList) {
+        this.organIdList = organIdList;
+    }
+
+    public Integer getCooperationOrganId() {
+        return cooperationOrganId;
+    }
+
+    public void setCooperationOrganId(Integer cooperationOrganId) {
+        this.cooperationOrganId = cooperationOrganId;
+    }
+
+    public Date getMonth() {
+        return month;
+    }
+
+    public void setMonth(Date month) {
+        this.month = month;
+    }
+
+    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;
+    }
+}

+ 76 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/SellOrderQueryInfo.java

@@ -0,0 +1,76 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.biz.dal.enums.SellTypeEnum;
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+
+public class SellOrderQueryInfo extends QueryInfo {
+
+    private String organIdList;
+
+    @ApiModelProperty(value = "商品名称",required = false)
+    private String goodsName;
+
+    @ApiModelProperty(value = "学校id",required = false)
+    private Integer schoolId;
+
+    @ApiModelProperty(value = "销售类型",required = false)
+    private SellTypeEnum type;
+
+    @ApiModelProperty(value = "开始时间",required = false)
+    private Date startTime;
+
+    @ApiModelProperty(value = "结束时间",required = false)
+    private Date endTime;
+
+
+    public String getOrganIdList() {
+        return organIdList;
+    }
+
+    public void setOrganIdList(String organIdList) {
+        this.organIdList = organIdList;
+    }
+
+    public String getGoodsName() {
+        return goodsName;
+    }
+
+    public void setGoodsName(String goodsName) {
+        this.goodsName = goodsName;
+    }
+
+    public Integer getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(Integer schoolId) {
+        this.schoolId = schoolId;
+    }
+
+    public SellTypeEnum getType() {
+        return type;
+    }
+
+    public void setType(SellTypeEnum type) {
+        this.type = type;
+    }
+
+    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;
+    }
+}

+ 5 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/NotifyCallback.java

@@ -42,11 +42,11 @@ public class NotifyCallback implements MQTTCallbackHandler {
     @PostConstruct
     public void init() {
         notifyCallback = this;
-        if (!profiles.equals("prod") && !appName.equals("student-server")) {
-            Adapay.debug = true;
-            // prodMode 模式,默认为生产模式,false可以使用mock模式
-            Adapay.prodMode = false;
-        }
+//        if (!profiles.equals("prod") && !appName.equals("student-server")) {
+//            Adapay.debug = true;
+//            // prodMode 模式,默认为生产模式,false可以使用mock模式
+//            Adapay.prodMode = false;
+//        }
         Adapay.setDeviceID(appName);
     }
 

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/OperatingReportService.java

@@ -0,0 +1,13 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.OperatingReport;
+import com.ym.mec.common.service.BaseService;
+
+import java.util.List;
+
+
+public interface OperatingReportService extends BaseService<Integer, OperatingReport> {
+
+    Boolean statistics();
+
+}

+ 34 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SellOrderService.java

@@ -0,0 +1,34 @@
+package com.ym.mec.biz.service;
+
+
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.entity.SellOrder;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
+import com.ym.mec.common.service.BaseService;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+
+public interface SellOrderService extends BaseService<Integer, SellOrder> {
+
+    /**
+     * 添加销售订单
+     *
+     * @param goodsIds
+     * @param totalAmount
+     * @param balance
+     * @return
+     */
+    List<SellOrder> addSellOrder(Long orderId, String musicGroupId, List<Integer> goodsIds, BigDecimal totalAmount, BigDecimal balance);
+
+    /**
+     * 将订单详情加入销售列表
+     * @param orderDetails
+     * @param studentPaymentOrder
+     * @return
+     */
+    List<SellOrder> addOrderDetail2SellOrder(List<StudentPaymentOrderDetail> orderDetails, StudentPaymentOrder studentPaymentOrder, MusicGroup musicGroup);
+
+}

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

@@ -71,6 +71,14 @@ public interface StudentPaymentOrderDetailService extends BaseService<Long, Stud
      */
     StudentPaymentOrderDetail findApplyOrderMusical(Long orderId);
 
+
+    /**
+     * 获取订单详细
+     * @param orderId
+     * @return
+     */
+    List<StudentPaymentOrderDetail> getOrderDetail(Long orderId);
+
     /**
      * 获取订单类型的详情
      * @param orderId

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

@@ -30,4 +30,11 @@ public interface StudentPaymentRouteOrderService extends BaseService<Long, Stude
 	 */
 	StudentPaymentRouteOrder addRouteOrder(String orderNo,Integer routeOrganId, BigDecimal routeAmount);
 
+	/**
+	 * 删除外部添加的订单
+	 * @param orderId
+	 * @return
+	 */
+	Boolean deleteRouteOrder(Long orderId);
+
 }

+ 23 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentRepairService.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.BasicUserDto;
+import com.ym.mec.biz.dal.dto.GoodsSellDto;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.entity.StudentRepair;
 import com.ym.mec.biz.dal.page.RepairStudentQueryInfo;
@@ -67,4 +68,26 @@ public interface StudentRepairService extends BaseService<Integer, StudentRepair
      * @param order
      */
     Boolean orderCallback(StudentPaymentOrder order);
+
+    /**
+     * @describe 添加商品销售订单
+     * @apiNote 时光荏苒,认真工作的时间总是过得很快,而我、享受这一刻!
+     * @author zouxuan
+     * @date 2020/9/16
+     * @time 13:47
+     * @param goodsSellDto:
+     * @return java.util.Map
+     */
+    Map addGoodsSellOrder(GoodsSellDto goodsSellDto) throws Exception;
+
+    /**
+     * @describe 商品销售订单回调
+     * @apiNote 时光荏苒,认真工作的时间总是过得很快,而我、享受这一刻!
+     * @author zouxuan
+     * @date 2020/9/16
+     * @time 16:58
+     * @param order:
+     * @return void
+     */
+    void goodsSellorderCallback(StudentPaymentOrder order);
 }

+ 8 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ContractServiceImpl.java

@@ -339,11 +339,12 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 		// 收费形式
 		List<MusicGroupPaymentCalender> calenders = musicGroupPaymentCalenderDao.findByMusicGroupId(musicGroupId);
 
-		if (calenders == null || calenders.size() == 0) {
-			params.put("paymentcalender", "一次性");
+		/*if (calenders == null || calenders.size() == 0) {
+			
 		} else {
 			params.put("paymentcalender", calenders.stream().map(cal -> cal.getPaymentMonth().toString()).collect(Collectors.joining("月,")) + "月");
-		}
+		}*/
+		params.put("paymentcalender", "一次性");
 
 		params.put("isShowVisualSeal", false);
 
@@ -443,11 +444,13 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 		// 收费形式
 		List<MusicGroupPaymentCalender> calenders = musicGroupPaymentCalenderDao.findByMusicGroupId(musicGroupId);
 
-		if (calenders == null || calenders.size() == 0) {
+		/*if (calenders == null || calenders.size() == 0) {
 			params.put("paymentcalender", "一次性");
 		} else {
 			params.put("paymentcalender", calenders.stream().map(cal -> cal.getPaymentMonth().toString()).collect(Collectors.joining("月,")) + "月");
-		}
+		}*/
+		
+		params.put("paymentcalender", "一次性");
 
 		params.put("isShowVisualSeal", true);
 

+ 36 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/impl/FinancialExpenditureServiceImpl.java

@@ -5,6 +5,9 @@ import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.biz.dal.dao.FinancialExpenditureDao;
 import com.ym.mec.biz.dal.dto.FinancialExpenditureDto;
 import com.ym.mec.biz.dal.entity.FinancialExpenditure;
+import com.ym.mec.biz.dal.enums.ExpenditureTypeEnum;
+import com.ym.mec.biz.dal.enums.FeeProjectEnum;
+import com.ym.mec.biz.dal.enums.GoodsType;
 import com.ym.mec.biz.dal.enums.TemplateTypeEnum;
 import com.ym.mec.biz.dal.page.FinancialExpenditureQueryInfo;
 import com.ym.mec.biz.service.FinancialExpenditureService;
@@ -31,6 +34,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 @Service
 public class FinancialExpenditureServiceImpl extends BaseServiceImpl<Long, FinancialExpenditure> implements FinancialExpenditureService {
@@ -57,7 +61,17 @@ public class FinancialExpenditureServiceImpl extends BaseServiceImpl<Long, Finan
 		Map<String, Integer> phoneMap = getMap("sys_user", "phone_", "id_", true, String.class, Integer.class);
 		for (String e : sheetsListMap.keySet()) {
 			List<Map<String, Object>> sheet = sheetsListMap.get(e);
+			List<Object> collect = sheet.stream().map(m -> m.get("钉钉流程编号")).collect(Collectors.toList());
+			if(collect == null || collect.size() == 0){
+				continue;
+			}
+			List<String> list = financialExpenditureDao.countBydingTalk(collect);
+			if(list != null && list.size() > 0){
+				throw new BizException("导入数据错误  重复的钉钉流程编号:{}",list.get(0));
+			}
+
 			valueIsNull: for (Map<String, Object> row : sheet) {
+
 				if (row.size() == 0){
 					continue;
 				}
@@ -67,23 +81,33 @@ public class FinancialExpenditureServiceImpl extends BaseServiceImpl<Long, Finan
 						continue;
 					}
 					String columnValue = columns.get(s);
-					if (columnValue.equals("phone")) {
+					if (columnValue.equals("type")) {
+						for (ExpenditureTypeEnum expenditureType : ExpenditureTypeEnum.values()) {
+							if (expenditureType.getDesc().equals(row.get(s).toString())) {
+								objectMap.put(columnValue, expenditureType);
+								break;
+							}
+						}
+						continue;
+					}
+					if (columnValue.equals("dingtalkProcessNo")) {
 						if(StringUtils.isEmpty(row.get(s).toString())){
-							LOGGER.error("商品导入异常:手机号不可为空 param:{}",objectMap);
+							LOGGER.error("支出记录导入异常:钉钉流程编号不可为空 param:{}",objectMap);
 							continue valueIsNull;
-						}else {
-							Integer integer = phoneMap.get(row.get(s));
-							if(integer == null){
-								LOGGER.error("商品导入异常:手机号校验失败 param:{}",objectMap);
-								continue valueIsNull;
-							}else {
-								objectMap.put("applyUserId", integer);
+						}
+					}
+					if (columnValue.equals("feeProject")) {
+						for (FeeProjectEnum feeProject : FeeProjectEnum.values()) {
+							if (feeProject.getDesc().equals(row.get(s).toString())) {
+								objectMap.put(columnValue, feeProject);
+								break;
 							}
 						}
+						continue;
 					}
 					if (columnValue.equals("amount")) {
 						if(StringUtils.isEmpty(row.get(s).toString())){
-							LOGGER.error("商品导入异常:费用不可为空 param:{}",objectMap);
+							LOGGER.error("支出记录导入异常:费用不可为空 param:{}",objectMap);
 							continue valueIsNull;
 						}else {
 							objectMap.put("amount", row.get(s));
@@ -92,7 +116,7 @@ public class FinancialExpenditureServiceImpl extends BaseServiceImpl<Long, Finan
 					if (columnValue.equals("organName") && StringUtils.isNotEmpty(row.get(s).toString())) {
 						Integer integer = organMap.get(row.get(s));
 						if(integer == null){
-							LOGGER.error("商品导入异常:分部校验失败 param:{}",objectMap);
+							LOGGER.error("支出记录导入异常:分部校验失败 param:{}",objectMap);
 						}else {
 							objectMap.put("organId", integer);
 						}
@@ -100,7 +124,7 @@ public class FinancialExpenditureServiceImpl extends BaseServiceImpl<Long, Finan
 					if (columnValue.equals("cooperationOrganName") && StringUtils.isNotEmpty(row.get(s).toString())) {
 						Integer integer = cooperationOrganMap.get(row.get(s));
 						if(integer == null){
-							LOGGER.error("商品导入异常:合作单位校验失败 param:{}",objectMap);
+							LOGGER.error("支出记录导入异常:合作单位校验失败 param:{}",objectMap);
 						}else {
 							objectMap.put("cooperationOrganId", integer);
 						}

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

@@ -1,7 +1,6 @@
 package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
-import com.ym.mec.biz.dal.dao.GoodsCategoryDao;
 import com.ym.mec.biz.dal.dao.GoodsDao;
 import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.enums.GoodsType;
@@ -38,8 +37,6 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 	private GoodsDao goodsDao;
 	@Autowired
 	private UploadFileService uploadFileService;
-	@Autowired
-	private GoodsCategoryDao goodsCategoryDao;
 
 	@Override
 	public BaseDAO<Integer, Goods> getDAO() {

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

@@ -69,12 +69,12 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 			musicGroupPaymentCalender.setDeadlinePaymentDate(DateUtil.addDays(musicGroupPaymentCalender.getStartPaymentDate(), 3));
 		}
 		// 判断缴费开始时间、结束时间是否被其他缴费记录占用
-//		int count = musicGroupPaymentCalenderDao.queryIntersectionByPaymentDate(musicGroupId, musicGroupPaymentCalender.getStartPaymentDate(),
-//				musicGroupPaymentCalender.getDeadlinePaymentDate());
+		int count = musicGroupPaymentCalenderDao.queryIntersectionByPaymentDate(musicGroupId, musicGroupPaymentCalender.getStartPaymentDate(),
+				musicGroupPaymentCalender.getDeadlinePaymentDate());
 
-		String format = DateUtil.format(musicGroupPaymentCalender.getStartPaymentDate(), DateUtil.DEFAULT_PATTERN);
-		String format1 = DateUtil.format(musicGroupPaymentCalender.getDeadlinePaymentDate(), DateUtil.DEFAULT_PATTERN);
-		int count = musicGroupPaymentCalenderDao.queryIntersectionByDate(musicGroupId, format,format1);
+//		String format = DateUtil.format(musicGroupPaymentCalender.getStartPaymentDate(), DateUtil.DEFAULT_PATTERN);
+//		String format1 = DateUtil.format(musicGroupPaymentCalender.getDeadlinePaymentDate(), DateUtil.DEFAULT_PATTERN);
+//		int count = musicGroupPaymentCalenderDao.queryIntersectionByDate(musicGroupId, format,format1);
 		if (count > 0) {
 			throw new BizException("缴费时间存在冲突,请修改缴费开始日期");
 		}
@@ -355,10 +355,10 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 		}
 		Date date = new Date();
 		// 判断缴费开始时间、结束时间是否被其他缴费记录占用
-//		int count = musicGroupPaymentCalenderDao.queryIntersectionByPaymentDate(calender.getMusicGroupId(), startTime,endTime);
-		String format = DateUtil.format(startTime, DateUtil.DEFAULT_PATTERN);
-		String format1 = DateUtil.format(endTime, DateUtil.DEFAULT_PATTERN);
-		int count = musicGroupPaymentCalenderDao.queryIntersectionByDate(calender.getMusicGroupId(), format,format1);
+		int count = musicGroupPaymentCalenderDao.queryIntersectionByPaymentDate(calender.getMusicGroupId(), startTime,endTime);
+//		String format = DateUtil.format(startTime, DateUtil.DEFAULT_PATTERN);
+//		String format1 = DateUtil.format(endTime, DateUtil.DEFAULT_PATTERN);
+//		int count = musicGroupPaymentCalenderDao.queryIntersectionByDate(calender.getMusicGroupId(), format,format1);
 		if (count > 0) {
 			throw new BizException("缴费时间存在冲突,请修改缴费开始日期");
 		}

+ 308 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OperatingReportServiceImpl.java

@@ -0,0 +1,308 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.dto.OrganFullJobResourceNumDto;
+import com.ym.mec.biz.dal.entity.CooperationOrgan;
+import com.ym.mec.biz.dal.entity.FinancialExpenditure;
+import com.ym.mec.biz.dal.entity.OperatingReport;
+import com.ym.mec.biz.dal.enums.ExpenditureTypeEnum;
+import com.ym.mec.biz.service.OperatingReportService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.util.date.DateUtil;
+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.*;
+
+@Service
+public class OperatingReportServiceImpl extends BaseServiceImpl<Integer, OperatingReport> implements OperatingReportService {
+
+    @Autowired
+    private OperatingReportDao operatingReportDao;
+    @Autowired
+    private SellOrderDao sellOrderDao;
+    @Autowired
+    private CooperationOrganDao cooperationOrganDao;
+    @Autowired
+    private FinancialExpenditureDao financialExpenditureDao;
+    @Autowired
+    private SysConfigDao sysConfigDao;
+
+
+    @Override
+    public BaseDAO<Integer, OperatingReport> getDAO() {
+        return operatingReportDao;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean statistics() {
+        Date nowDate = new Date();
+        Date startTime = DateUtil.getFirstDayOfMonth(DateUtil.addDays1(nowDate, -1));
+        Date endTime = DateUtil.getLastDayOfMonth(startTime);
+
+        Map<Integer, OperatingReport> cooperationOperating = new HashMap<>();
+        Map<Integer, OperatingReport> organOperating = new HashMap<>();
+
+        //1、获取分部的全职资源数的分摊费用
+        BigDecimal fullJobFee = new BigDecimal(sysConfigDao.findConfigValue("full_job_fee"));
+        List<OrganFullJobResourceNumDto> organFullJobResources = cooperationOrganDao.getOrganFullJobResourceNum();
+        for (OrganFullJobResourceNumDto organFullJobResource : organFullJobResources) {
+            OperatingReport operatingReport = new OperatingReport();
+            operatingReport.setOrganId(organFullJobResource.getOrganId());
+            operatingReport.setDistributionAmount(new BigDecimal(organFullJobResource.getNum()).multiply(fullJobFee).divide(new BigDecimal(12), 2, BigDecimal.ROUND_HALF_UP));
+            organOperating.put(organFullJobResource.getOrganId(), operatingReport);
+        }
+        //1、合作单位的全职资源分摊费用
+        List<CooperationOrgan> allCooperationOrgan = cooperationOrganDao.getAllCooperationOrgan();
+        for (CooperationOrgan cooperationOrgan : allCooperationOrgan) {
+            OperatingReport operatingReport = new OperatingReport();
+            operatingReport.setOrganId(cooperationOrgan.getOrganId());
+            operatingReport.setCooperationOrganId(cooperationOrgan.getId());
+            BigDecimal distributionAmount = cooperationOrgan.getFullJobResource().equals(1) ? fullJobFee.divide(new BigDecimal(12), 2, BigDecimal.ROUND_HALF_UP) : BigDecimal.ZERO;
+            operatingReport.setDistributionAmount(distributionAmount);
+            cooperationOperating.put(cooperationOrgan.getId(), operatingReport);
+        }
+
+        //2、获取支出费用
+        List<FinancialExpenditure> cooperationExpenditures = financialExpenditureDao.getCooperationExpenditure();
+        for (FinancialExpenditure cooperationExpenditure : cooperationExpenditures) {
+            OperatingReport organOperatingReport = new OperatingReport();
+            if (organOperating.containsKey(cooperationExpenditure.getOrganId())) {
+                organOperatingReport = organOperating.get(cooperationExpenditure.getOrganId());
+            }
+
+            OperatingReport cooperationOperatingReport = new OperatingReport();
+            if (cooperationExpenditure.getCooperationOrganId() != null && cooperationOperating.containsKey(cooperationExpenditure.getCooperationOrganId())) {
+                cooperationOperatingReport = cooperationOperating.get(cooperationExpenditure.getCooperationOrganId());
+            }
+
+            organOperatingReport.setOrganId(cooperationExpenditure.getOrganId());
+            cooperationOperatingReport.setOrganId(cooperationExpenditure.getOrganId());
+            cooperationOperatingReport.setCooperationOrganId(cooperationExpenditure.getCooperationOrganId());
+            if (cooperationExpenditure.getType().equals(ExpenditureTypeEnum.FIXED)) {
+                organOperatingReport.setExpensesAmount(organOperatingReport.getExpensesAmount().add(cooperationExpenditure.getAmount()));
+                cooperationOperatingReport.setExpensesAmount(cooperationExpenditure.getAmount());
+            } else if (cooperationExpenditure.getType().equals(ExpenditureTypeEnum.VARIABLE)) {
+                organOperatingReport.setVariableCost(organOperatingReport.getVariableCost().add(cooperationExpenditure.getAmount()));
+                cooperationOperatingReport.setVariableCost(cooperationExpenditure.getAmount());
+            } else if (cooperationExpenditure.getType().equals(ExpenditureTypeEnum.REFUND)) {
+                organOperatingReport.setRefundAmount(organOperatingReport.getRefundAmount().add(cooperationExpenditure.getAmount()));
+                cooperationOperatingReport.setRefundAmount(cooperationExpenditure.getAmount());
+            }
+            organOperating.put(cooperationExpenditure.getOrganId(), organOperatingReport);
+
+            if (cooperationExpenditure.getCooperationOrganId() != null) {
+                cooperationOperating.put(cooperationExpenditure.getCooperationOrganId(), cooperationOperatingReport);
+            }
+        }
+
+        //3.1、乐团订单的统计
+        List<OperatingReport> musicReports = sellOrderDao.getMusicGroupMonthReport(startTime, endTime);
+        for (OperatingReport musicReport : musicReports) {
+            OperatingReport organOperatingReport = new OperatingReport();
+            if (organOperating.containsKey(musicReport.getOrganId())) {
+                organOperatingReport = organOperating.get(musicReport.getOrganId());
+            }
+
+            OperatingReport cooperationOperatingReport = new OperatingReport();
+            if (cooperationOperating.containsKey(musicReport.getCooperationOrganId())) {
+                cooperationOperatingReport = cooperationOperating.get(musicReport.getCooperationOrganId());
+            }
+            organOperatingReport.setOrganId(musicReport.getOrganId());
+            cooperationOperatingReport.setOrganId(musicReport.getOrganId());
+            cooperationOperatingReport.setCooperationOrganId(musicReport.getCooperationOrganId());
+
+            if (musicReport.getSellAmount() == null) {
+                musicReport.setSellAmount(BigDecimal.ZERO);
+                musicReport.setSellCost(BigDecimal.ZERO);
+            }
+            BigDecimal serviceAmount = musicReport.getIncomeTotal().subtract(musicReport.getSellAmount());
+
+            organOperatingReport.setServiceAmount(organOperatingReport.getServiceAmount().add(serviceAmount));
+            organOperatingReport.setSellAmount(organOperatingReport.getSellAmount().add(musicReport.getSellAmount()));
+            organOperatingReport.setSellCost(organOperatingReport.getSellCost().add(musicReport.getSellCost()));
+            cooperationOperatingReport.setServiceAmount(cooperationOperatingReport.getServiceAmount().add(serviceAmount));
+            cooperationOperatingReport.setSellAmount(cooperationOperatingReport.getSellAmount().add(musicReport.getSellAmount()));
+            cooperationOperatingReport.setSellCost(cooperationOperatingReport.getSellCost().add(musicReport.getSellCost()));
+            organOperating.put(musicReport.getOrganId(), organOperatingReport);
+            cooperationOperating.put(musicReport.getCooperationOrganId(), cooperationOperatingReport);
+        }
+
+        //3.2、VIP、网管课订单的统计(关联学生注册取一条记录)
+        List<OperatingReport> VPReports = sellOrderDao.getMusicVipPracticeMonthReport(startTime, endTime);
+        for (OperatingReport vpReport : VPReports) {
+            OperatingReport organOperatingReport = new OperatingReport();
+            if (organOperating.containsKey(vpReport.getOrganId())) {
+                organOperatingReport = organOperating.get(vpReport.getOrganId());
+            }
+
+            OperatingReport cooperationOperatingReport = new OperatingReport();
+            if (vpReport.getCooperationOrganId() != null && cooperationOperating.containsKey(vpReport.getCooperationOrganId())) {
+                cooperationOperatingReport = cooperationOperating.get(vpReport.getCooperationOrganId());
+            }
+            organOperatingReport.setOrganId(vpReport.getOrganId());
+            cooperationOperatingReport.setOrganId(vpReport.getOrganId());
+            cooperationOperatingReport.setCooperationOrganId(vpReport.getCooperationOrganId());
+
+            organOperatingReport.setServiceAmount(organOperatingReport.getServiceAmount().add(vpReport.getIncomeTotal()));
+            cooperationOperatingReport.setServiceAmount(cooperationOperatingReport.getServiceAmount().add(vpReport.getIncomeTotal()));
+
+
+            organOperating.put(vpReport.getOrganId(), organOperatingReport);
+
+            if (vpReport.getCooperationOrganId() != null) {
+                cooperationOperating.put(vpReport.getCooperationOrganId(), cooperationOperatingReport);
+            }
+        }
+
+        //3.3、外部添加订单
+        List<OperatingReport> outOrderReports = sellOrderDao.getOutOrderMonthReport(startTime, endTime);
+        for (OperatingReport outOrderReport : outOrderReports) {
+            OperatingReport organOperatingReport = new OperatingReport();
+            if (organOperating.containsKey(outOrderReport.getOrganId())) {
+                organOperatingReport = organOperating.get(outOrderReport.getOrganId());
+            }
+
+            OperatingReport cooperationOperatingReport = new OperatingReport();
+            if (cooperationOperating.containsKey(outOrderReport.getCooperationOrganId())) {
+                cooperationOperatingReport = cooperationOperating.get(outOrderReport.getCooperationOrganId());
+            }
+
+            organOperatingReport.setOrganId(outOrderReport.getOrganId());
+            cooperationOperatingReport.setOrganId(outOrderReport.getOrganId());
+            cooperationOperatingReport.setCooperationOrganId(outOrderReport.getCooperationOrganId());
+
+            if (outOrderReport.getSellAmount() == null) {
+                outOrderReport.setSellAmount(BigDecimal.ZERO);
+                outOrderReport.setSellCost(BigDecimal.ZERO);
+            }
+            BigDecimal serviceAmount = outOrderReport.getIncomeTotal().subtract(outOrderReport.getSellAmount());
+
+            organOperatingReport.setServiceAmount(organOperatingReport.getServiceAmount().add(serviceAmount));
+            organOperatingReport.setSellAmount(organOperatingReport.getSellAmount().add(outOrderReport.getSellAmount()));
+            organOperatingReport.setSellCost(organOperatingReport.getSellCost().add(outOrderReport.getSellCost()));
+            cooperationOperatingReport.setServiceAmount(cooperationOperatingReport.getServiceAmount().add(serviceAmount));
+            cooperationOperatingReport.setSellAmount(cooperationOperatingReport.getSellAmount().add(outOrderReport.getSellAmount()));
+            cooperationOperatingReport.setSellCost(cooperationOperatingReport.getSellCost().add(outOrderReport.getSellCost()));
+            organOperating.put(cooperationOperatingReport.getOrganId(), organOperatingReport);
+            if (outOrderReport.getCooperationOrganId() != null) {
+                cooperationOperating.put(cooperationOperatingReport.getCooperationOrganId(), cooperationOperatingReport);
+            }
+        }
+
+        //3.4、乐器维修、商品销售
+        List<OperatingReport> repairGoodsSellReports = sellOrderDao.getRepairGoodsSellGroupMonthReport(startTime, endTime);
+        for (OperatingReport repairGoodsSellReport : repairGoodsSellReports) {
+            OperatingReport organOperatingReport = new OperatingReport();
+            if (organOperating.containsKey(repairGoodsSellReport.getOrganId())) {
+                organOperatingReport = organOperating.get(repairGoodsSellReport.getOrganId());
+            }
+
+            organOperatingReport.setOrganId(repairGoodsSellReport.getOrganId());
+
+            if (repairGoodsSellReport.getSellAmount() == null) {
+                repairGoodsSellReport.setSellAmount(BigDecimal.ZERO);
+                repairGoodsSellReport.setSellCost(BigDecimal.ZERO);
+            }
+            BigDecimal serviceAmount = repairGoodsSellReport.getIncomeTotal().subtract(repairGoodsSellReport.getSellAmount());
+
+            organOperatingReport.setServiceAmount(organOperatingReport.getServiceAmount().add(serviceAmount));
+            organOperatingReport.setSellAmount(organOperatingReport.getSellAmount().add(repairGoodsSellReport.getSellAmount()));
+            organOperatingReport.setSellCost(organOperatingReport.getSellCost().add(repairGoodsSellReport.getSellCost()));
+
+            organOperating.put(repairGoodsSellReport.getOrganId(), organOperatingReport);
+        }
+
+        //3.5、零星支付充值
+        List<OperatingReport> rechargeReports = sellOrderDao.getRechargeMonthReport(startTime, endTime);
+        for (OperatingReport rechargeReport : rechargeReports) {
+            OperatingReport organOperatingReport = new OperatingReport();
+            if (organOperating.containsKey(rechargeReport.getOrganId())) {
+                organOperatingReport = organOperating.get(rechargeReport.getOrganId());
+            }
+
+            OperatingReport cooperationOperatingReport = new OperatingReport();
+            if (rechargeReport.getCooperationOrganId() != null && cooperationOperating.containsKey(rechargeReport.getCooperationOrganId())) {
+                cooperationOperatingReport = cooperationOperating.get(rechargeReport.getCooperationOrganId());
+            }
+            organOperatingReport.setOrganId(rechargeReport.getOrganId());
+            cooperationOperatingReport.setOrganId(rechargeReport.getOrganId());
+            cooperationOperatingReport.setCooperationOrganId(rechargeReport.getCooperationOrganId());
+
+            organOperatingReport.setOtherIncome(organOperatingReport.getOtherIncome().add(rechargeReport.getIncomeTotal()));
+            cooperationOperatingReport.setOtherIncome(cooperationOperatingReport.getIncomeTotal().add(rechargeReport.getIncomeTotal()));
+
+            organOperating.put(rechargeReport.getOrganId(), organOperatingReport);
+
+            if (rechargeReport.getCooperationOrganId() != null) {
+                cooperationOperating.put(rechargeReport.getCooperationOrganId(), cooperationOperatingReport);
+            }
+        }
+
+        //3.6、零星收费(不是充值部分的)
+        List<OperatingReport> sporadicReports = sellOrderDao.getSporadicMonthReport(startTime, endTime);
+        for (OperatingReport sporadicReport : sporadicReports) {
+            OperatingReport organOperatingReport = new OperatingReport();
+            if (organOperating.containsKey(sporadicReport.getOrganId())) {
+                organOperatingReport = organOperating.get(sporadicReport.getOrganId());
+            }
+
+            OperatingReport cooperationOperatingReport = new OperatingReport();
+            if (sporadicReport.getCooperationOrganId() != null && cooperationOperating.containsKey(sporadicReport.getCooperationOrganId())) {
+                cooperationOperatingReport = cooperationOperating.get(sporadicReport.getCooperationOrganId());
+            }
+            organOperatingReport.setOrganId(sporadicReport.getOrganId());
+            cooperationOperatingReport.setOrganId(sporadicReport.getOrganId());
+            cooperationOperatingReport.setCooperationOrganId(sporadicReport.getCooperationOrganId());
+
+            organOperatingReport.setServiceAmount(organOperatingReport.getServiceAmount().add(sporadicReport.getIncomeTotal()));
+            cooperationOperatingReport.setServiceAmount(cooperationOperatingReport.getServiceAmount().add(sporadicReport.getIncomeTotal()));
+
+
+            organOperating.put(sporadicReport.getOrganId(), organOperatingReport);
+
+            if (sporadicReport.getCooperationOrganId() != null) {
+                cooperationOperating.put(sporadicReport.getCooperationOrganId(), cooperationOperatingReport);
+            }
+        }
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("startTime", startTime);
+        params.put("endTime", endTime);
+        organOperating.forEach((organId, operatingReport) -> {
+            operatingReport.setMonth(startTime);
+            operatingReport.setCreateTime(nowDate);
+            updateReport(operatingReport, params);
+        });
+        cooperationOperating.forEach((organId, operatingReport) -> {
+            operatingReport.setMonth(startTime);
+            operatingReport.setCreateTime(nowDate);
+            updateReport(operatingReport, params);
+        });
+        return true;
+    }
+
+    private void updateReport(OperatingReport operatingReport, Map<String, Object> params) {
+        //收入合计:销售收入+服务收入-业务退费
+        BigDecimal incomeTotal = operatingReport.getSellAmount().add(operatingReport.getServiceAmount()).add(operatingReport.getOtherIncome()).subtract(operatingReport.getRefundAmount());
+        operatingReport.setIncomeTotal(incomeTotal);
+        //成本费用合计:销售成本+固定支出+变动支出+分摊费用
+        BigDecimal costAmount = operatingReport.getSellCost().add(operatingReport.getExpensesAmount()).add(operatingReport.getVariableCost()).add(operatingReport.getDistributionAmount());
+        operatingReport.setCostAmount(costAmount);
+        //利润:收入合计-成本费用合计
+        operatingReport.setProfit(incomeTotal.subtract(costAmount));
+        params.put("organId", operatingReport.getOrganId());
+        params.put("cooperationOrganId", operatingReport.getCooperationOrganId());
+        OperatingReport hasReport = operatingReportDao.getReport(params);
+        if (hasReport == null) {
+            operatingReportDao.insert(operatingReport);
+        } else {
+            operatingReport.setId(hasReport.getId());
+            operatingReportDao.update(operatingReport);
+        }
+    }
+}

+ 215 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SellOrderServiceImpl.java

@@ -0,0 +1,215 @@
+package com.ym.mec.biz.service.impl;
+
+
+import com.alibaba.fastjson.JSON;
+import com.ym.mec.biz.dal.dao.GoodsDao;
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
+import com.ym.mec.biz.dal.dao.SellOrderDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.GoodsType;
+import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.SellTypeEnum;
+import com.ym.mec.biz.service.*;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+@Service
+public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> implements SellOrderService {
+    @Autowired
+    private SellOrderDao sellOrderDao;
+    @Autowired
+    private GoodsDao goodsDao;
+    @Autowired
+    private StudentPaymentOrderDao studentPaymentOrderDao;
+    @Autowired
+    private MusicGroupDao musicGroupDao;
+
+    @Override
+    public BaseDAO<Integer, SellOrder> getDAO() {
+        return sellOrderDao;
+    }
+
+
+    @Override
+    public List<SellOrder> addSellOrder(Long orderId, String musicGroupId, List<Integer> goodsIds, BigDecimal totalAmount, BigDecimal balance) {
+        if (goodsIds == null || goodsIds.size() <= 0) {
+            return null;
+        }
+        if (balance == null) {
+            balance = BigDecimal.ZERO;
+        }
+        StudentPaymentOrder order = studentPaymentOrderDao.get(orderId);
+        MusicGroup musicGroup = new MusicGroup();
+        if (StringUtils.isNotBlank(musicGroupId)) {
+            musicGroup = musicGroupDao.get(musicGroupId);
+        }
+        int goodsNum = goodsIds.size();
+        BigDecimal goodsTotalPrice = BigDecimal.ZERO;
+        List<Goods> goodies = goodsDao.getGoodies(goodsIds);
+        int i = 1;
+        for (Integer goodsId : goodsIds) {
+            for (Goods goods : goodies) {
+                if (goods.getId().equals(goodsId)) {
+                    goodsTotalPrice = goodsTotalPrice.add(goods.getGroupPurchasePrice());
+                    break;
+                }
+            }
+        }
+
+        BigDecimal hasRouteBalance = BigDecimal.ZERO;
+        BigDecimal goodsTotalBalance = goodsTotalPrice.multiply(balance).divide(totalAmount, 2, BigDecimal.ROUND_HALF_UP);
+        List<SellOrder> sellOrders = new ArrayList<>();
+        for (Integer goodsId : goodsIds) {
+            SellOrder sellOrder = new SellOrder();
+            BigDecimal goodsPrice = BigDecimal.ZERO;
+            Goods nowGoods = new Goods();
+            for (Goods goods : goodies) {
+                if (goods.getId().equals(goodsId)) {
+                    nowGoods = goods;
+                    break;
+                }
+            }
+            goodsPrice = nowGoods.getGroupPurchasePrice();
+
+            BigDecimal goodsBalance = goodsTotalBalance.multiply(goodsPrice).divide(totalAmount, 2, BigDecimal.ROUND_HALF_UP);
+            if (i == goodsNum) {
+                goodsBalance = goodsTotalBalance.subtract(hasRouteBalance);
+            }
+            hasRouteBalance = hasRouteBalance.add(goodsBalance);
+            sellOrder.setGoodsId(goodsId);
+            sellOrder.setGoodsName(nowGoods.getName());
+            sellOrder.setExpectAmount(goodsPrice);
+            sellOrder.setBalanceAmount(goodsBalance);
+            sellOrder.setActualAmount(goodsPrice.subtract(goodsBalance));
+            Map<String, BigDecimal> CostMap = new HashMap<>();
+            CostMap.put("sellCost", nowGoods.getDiscountPrice());
+            if (nowGoods.getAgreeCostPrice() != null) {
+                CostMap.put("SellCost2", nowGoods.getAgreeCostPrice());
+            }
+            sellOrder.setSellCost2(JSON.toJSONString(CostMap));
+
+            sellOrder.setOrganId(order.getOrganId());
+            sellOrder.setCooperationOrganId(musicGroup.getCooperationOrganId());
+            sellOrder.setTransNo(order.getTransNo());
+            sellOrder.setOrderId(order.getId());
+            sellOrder.setOrderNo(order.getOrderNo());
+            sellOrder.setSellCost(nowGoods.getDiscountPrice());
+            sellOrder.setNum(1);
+            sellOrder.setUserId(order.getUserId());
+            sellOrder.setPaymentChannel(order.getPaymentChannel());
+            sellOrder.setMerNo(order.getMerNos());
+            sellOrder.setSellTime(order.getCreateTime());
+            sellOrder.setCreateIme(new Date());
+            sellOrder.setUpdateTime(new Date());
+            if (nowGoods.getType().equals(GoodsType.INSTRUMENT)) {
+                sellOrder.setType(SellTypeEnum.INSTRUMENT);
+            } else if (nowGoods.getType().equals(GoodsType.ACCESSORIES)) {
+                sellOrder.setType(SellTypeEnum.ACCESSORIES);
+            } else {
+                sellOrder.setType(SellTypeEnum.OTHER);
+            }
+            sellOrders.add(sellOrder);
+            i++;
+        }
+        sellOrderDao.batchInsert(sellOrders);
+        return sellOrders;
+    }
+
+    @Override
+    public List<SellOrder> addOrderDetail2SellOrder(List<StudentPaymentOrderDetail> orderDetails, StudentPaymentOrder studentPaymentOrder, MusicGroup musicGroup) {
+        List<SellOrder> sellOrders = new ArrayList<>();
+        //总余额支付
+        BigDecimal totalBalance = studentPaymentOrder.getBalancePaymentAmount() != null ? studentPaymentOrder.getBalancePaymentAmount() : BigDecimal.ZERO;
+        //总价格
+        BigDecimal totalPrice = studentPaymentOrder.getExpectAmount();
+        //商品总付款
+        BigDecimal detailTotalPrice = orderDetails.stream().map(StudentPaymentOrderDetail::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+        //商品销售占的余额
+        BigDecimal detailTotalBalance = detailTotalPrice.compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO :
+                detailTotalPrice.multiply(totalBalance).divide(totalPrice, 2, BigDecimal.ROUND_HALF_UP);
+
+        int i = 1;
+        BigDecimal detailRouteBalance = BigDecimal.ZERO;
+        for (StudentPaymentOrderDetail orderDetail : orderDetails) {
+
+            BigDecimal detailBalance = orderDetail.getPrice().compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO :
+                    orderDetail.getPrice().multiply(detailTotalBalance).divide(detailTotalPrice, 2, BigDecimal.ROUND_HALF_UP);
+            if (i == orderDetails.size()) {
+                detailBalance = detailTotalBalance.subtract(detailRouteBalance);
+            }
+            detailRouteBalance = detailRouteBalance.add(detailBalance);
+            i++;
+
+            if (orderDetail.getType().equals(OrderDetailTypeEnum.MUSICAL) && orderDetail.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)) {
+                continue;
+            }
+
+            BigDecimal goodsTotalPrice = orderDetail.getGoodsList().stream().map(Goods::getGroupPurchasePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+            BigDecimal routePrice = BigDecimal.ZERO;
+            BigDecimal routeBalance = BigDecimal.ZERO;
+            int j = 1;
+            for (Goods goods : orderDetail.getGoodsList()) {
+                BigDecimal expectAmount = BigDecimal.ZERO;
+                BigDecimal balance = BigDecimal.ZERO;
+                if (goodsTotalPrice.compareTo(BigDecimal.ZERO) > 0) {
+                    expectAmount = goods.getGroupPurchasePrice().multiply(orderDetail.getPrice()).divide(goodsTotalPrice, 2, BigDecimal.ROUND_HALF_UP);
+                    balance = goods.getGroupPurchasePrice().multiply(detailBalance).divide(goodsTotalPrice, 2, BigDecimal.ROUND_HALF_UP);
+                }
+                if (j == orderDetail.getGoodsList().size()) {
+                    expectAmount = orderDetail.getPrice().subtract(routePrice);
+                    balance = detailBalance.subtract(routeBalance);
+                }
+                routePrice = routePrice.add(expectAmount);
+                routeBalance = routeBalance.add(balance);
+                j++;
+
+                SellOrder sellOrder = new SellOrder();
+                Map<String, BigDecimal> CostMap = new HashMap<>();
+                CostMap.put("sellCost", goods.getDiscountPrice());
+                if (goods.getAgreeCostPrice() != null) {
+                    CostMap.put("SellCost2", goods.getAgreeCostPrice());
+                }
+                sellOrder.setOrganId(studentPaymentOrder.getOrganId());
+                sellOrder.setTransNo(studentPaymentOrder.getTransNo());
+                sellOrder.setOrderId(studentPaymentOrder.getId());
+                if (musicGroup != null) {
+                    sellOrder.setCooperationOrganId(musicGroup.getCooperationOrganId());
+                }
+                sellOrder.setOrderNo(studentPaymentOrder.getOrderNo());
+                sellOrder.setActualAmount(expectAmount.subtract(balance));
+                sellOrder.setBalanceAmount(balance);
+                sellOrder.setExpectAmount(expectAmount);
+                sellOrder.setSellCost(goods.getDiscountPrice());
+                sellOrder.setSellCost2(JSON.toJSONString(CostMap));
+                sellOrder.setGoodsId(goods.getId());
+                sellOrder.setGoodsName(goods.getName());
+                sellOrder.setNum(1);
+                sellOrder.setUserId(studentPaymentOrder.getUserId());
+                sellOrder.setPaymentChannel(studentPaymentOrder.getPaymentChannel());
+                sellOrder.setMerNo(studentPaymentOrder.getMerNos());
+                sellOrder.setSellTime(studentPaymentOrder.getCreateTime());
+                sellOrder.setCreateIme(new Date());
+                sellOrder.setUpdateTime(new Date());
+                if (goods.getType().equals(GoodsType.INSTRUMENT)) {
+                    sellOrder.setType(SellTypeEnum.INSTRUMENT);
+                } else if (goods.getType().equals(GoodsType.ACCESSORIES)) {
+                    sellOrder.setType(SellTypeEnum.ACCESSORIES);
+                } else {
+                    sellOrder.setType(SellTypeEnum.OTHER);
+                }
+                sellOrders.add(sellOrder);
+            }
+        }
+        sellOrderDao.batchInsert(sellOrders);
+        return sellOrders;
+    }
+
+}

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

@@ -213,6 +213,11 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
     }
 
     @Override
+    public List<StudentPaymentOrderDetail> getOrderDetail(Long orderId) {
+        return studentPaymentOrderDetailDao.getOrderDetail(orderId);
+    }
+
+    @Override
     public List<String> getOrderDetailType(Long orderId) {
         return studentPaymentOrderDetailDao.getOrderDetailType(orderId);
     }

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

@@ -245,6 +245,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             practiceGroupService.orderCallback(order);
         } else if (order.getType().equals(OrderTypeEnum.REPAIR)) {
             studentRepairService.orderCallback(order);
+        } else if (order.getType().equals(OrderTypeEnum.GOODS_SELL)) {
+            studentRepairService.goodsSellorderCallback(order);
         }
     }
 
@@ -280,6 +282,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                     practiceGroupService.orderCallback(order);
                 } else if (order.getType().equals(OrderTypeEnum.REPAIR)) {
                     studentRepairService.orderCallback(order);
+                } else if (order.getType().equals(OrderTypeEnum.GOODS_SELL)) {
+                    studentRepairService.goodsSellorderCallback(order);
                 }
             } catch (Exception e) {
                 e.printStackTrace();

+ 82 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentRouteOrderServiceImpl.java

@@ -1,14 +1,14 @@
 package com.ym.mec.biz.service.impl;
 
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentRouteOrderDao;
-import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
+import com.alibaba.fastjson.JSON;
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.PageInfoOrder;
 import com.ym.mec.biz.dal.dto.StudentPaymentRouteOrderDto;
+import com.ym.mec.biz.dal.entity.Goods;
+import com.ym.mec.biz.dal.entity.SellOrder;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.entity.StudentPaymentRouteOrder;
-import com.ym.mec.biz.dal.enums.DealStatusEnum;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.SporadicChargeTypeEnum;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
 import com.ym.mec.biz.service.StudentPaymentRouteOrderService;
 import com.ym.mec.common.dal.BaseDAO;
@@ -34,6 +34,10 @@ public class StudentPaymentRouteOrderServiceImpl extends BaseServiceImpl<Long, S
     private StudentPaymentOrderDao studentPaymentOrderDao;
     @Autowired
     private IdGeneratorService idGeneratorService;
+    @Autowired
+    private SellOrderDao sellOrderDao;
+    @Autowired
+    private GoodsDao goodsDao;
 
     @Override
     public BaseDAO<Long, StudentPaymentRouteOrder> getDAO() {
@@ -78,21 +82,78 @@ public class StudentPaymentRouteOrderServiceImpl extends BaseServiceImpl<Long, S
     public StudentPaymentRouteOrderDto addOutOrder(StudentPaymentRouteOrderDto studentPaymentRouteOrderDto) {
         Date nowDate = new Date();
         String orderNo = idGeneratorService.generatorId("payment") + "";
-
+        studentPaymentRouteOrderDto.setType(OrderTypeEnum.OUTORDER);
+        studentPaymentRouteOrderDto.setMerNos(studentPaymentRouteOrderDto.getMerNo());
         studentPaymentRouteOrderDto.setOrderNo(orderNo);
         studentPaymentRouteOrderDto.setGroupType(GroupType.OUTORDER);
+        studentPaymentRouteOrderDto.setRouteOrganId(studentPaymentRouteOrderDto.getOrganId());
         studentPaymentRouteOrderDto.setExpectAmount(studentPaymentRouteOrderDto.getActualAmount());
         studentPaymentRouteOrderDto.setStatus(DealStatusEnum.SUCCESS);
-        studentPaymentRouteOrderDto.setCreateTime(nowDate);
         studentPaymentRouteOrderDto.setUpdateTime(nowDate);
+
         studentPaymentOrderDao.insert(studentPaymentRouteOrderDto);
         StudentPaymentRouteOrder studentPaymentRouteOrder = new StudentPaymentRouteOrder();
         studentPaymentRouteOrder.setOrderNo(orderNo);
+        studentPaymentRouteOrder.setMerNo(studentPaymentRouteOrderDto.getMerNo());
         studentPaymentRouteOrder.setRouteOrganId(studentPaymentRouteOrderDto.getOrganId());
         studentPaymentRouteOrder.setRouteAmount(studentPaymentRouteOrderDto.getActualAmount());
         studentPaymentRouteOrder.setRouteBalanceAmount(BigDecimal.ZERO);
         studentPaymentRouteOrder.setFeeFlag("N");
         studentPaymentRouteOrderDao.insert(studentPaymentRouteOrder);
+
+        if (studentPaymentRouteOrderDto.getGoodies() != null && studentPaymentRouteOrderDto.getGoodies().size() > 0) {
+            List<SellOrder> sellOrders = new ArrayList<>();
+            BigDecimal hasRouteAmount = BigDecimal.ZERO;
+            BigDecimal goodsTotalPrice = BigDecimal.ZERO;
+
+            for (Map.Entry<Integer, Integer> goodsMap : studentPaymentRouteOrderDto.getGoodies().entrySet()) {
+                Goods goods = goodsDao.get(goodsMap.getKey());
+                goodsTotalPrice = goodsTotalPrice.add(goods.getGroupPurchasePrice().multiply(new BigDecimal(goodsMap.getValue())));
+            }
+
+            int i = 1;
+            for (Map.Entry<Integer, Integer> goodsMap : studentPaymentRouteOrderDto.getGoodies().entrySet()) {
+                Goods goods = goodsDao.get(goodsMap.getKey());
+
+                BigDecimal actualAmount = studentPaymentRouteOrderDto.getGoodsAmount().multiply(goods.getGroupPurchasePrice().multiply(new BigDecimal(goodsMap.getValue()))).divide(goodsTotalPrice, 2, BigDecimal.ROUND_HALF_UP);
+                if (i == studentPaymentRouteOrderDto.getGoodies().size()) {
+                    actualAmount = studentPaymentRouteOrderDto.getGoodsAmount().subtract(hasRouteAmount);
+                }
+                hasRouteAmount = hasRouteAmount.add(actualAmount);
+                i++;
+
+                Map<String, BigDecimal> CostMap = new HashMap<>();
+                CostMap.put("sellCost", goods.getDiscountPrice());
+                if (goods.getAgreeCostPrice() != null) {
+                    CostMap.put("SellCost2", goods.getAgreeCostPrice());
+                }
+
+                SellOrder sellOrder = new SellOrder();
+                sellOrder.setSellTime(studentPaymentRouteOrderDto.getPayTime());
+                sellOrder.setOrganId(studentPaymentRouteOrderDto.getOrganId());
+                sellOrder.setCooperationOrganId(studentPaymentRouteOrderDto.getSchoolId());
+                sellOrder.setTransNo(studentPaymentRouteOrderDto.getTransNo());
+                sellOrder.setOrderId(studentPaymentRouteOrderDto.getId());
+                sellOrder.setOrderNo(orderNo);
+                sellOrder.setGoodsId(goods.getId());
+                sellOrder.setGoodsName(goods.getName());
+                sellOrder.setActualAmount(actualAmount);
+                sellOrder.setBalanceAmount(BigDecimal.ZERO);
+                sellOrder.setExpectAmount(actualAmount);
+                sellOrder.setSellCost(goods.getDiscountPrice().multiply(new BigDecimal(goodsMap.getValue())));
+                sellOrder.setSellCost2(JSON.toJSONString(CostMap));
+                sellOrder.setNum(goodsMap.getValue());
+                sellOrder.setUserId(studentPaymentRouteOrderDto.getUserId());
+                sellOrder.setPaymentChannel(studentPaymentRouteOrderDto.getPaymentChannel());
+                sellOrder.setMerNo(studentPaymentRouteOrderDto.getMerNos());
+                sellOrder.setSellTime(studentPaymentRouteOrderDto.getCreateTime());
+                sellOrder.setCreateIme(new Date());
+                sellOrder.setUpdateTime(new Date());
+                sellOrder.setType(SellTypeEnum.SCHOOL_BUY);
+                sellOrders.add(sellOrder);
+            }
+            sellOrderDao.batchInsert(sellOrders);
+        }
         return studentPaymentRouteOrderDto;
     }
 
@@ -110,4 +171,17 @@ public class StudentPaymentRouteOrderServiceImpl extends BaseServiceImpl<Long, S
         return studentPaymentRouteOrder;
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean deleteRouteOrder(Long orderId) {
+        StudentPaymentOrder studentPaymentOrder = studentPaymentOrderDao.get(orderId);
+        if (studentPaymentOrder == null) {
+            throw new BizException("订单不存在,请核查");
+        }
+        studentPaymentOrderDao.delete(orderId);
+        studentPaymentRouteOrderDao.deleteByOrderNo(studentPaymentOrder.getOrderNo());
+        sellOrderDao.deleteByOrderId(orderId);
+        return true;
+    }
+
 }

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

@@ -1,6 +1,5 @@
 package com.ym.mec.biz.service.impl;
 
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
@@ -92,6 +91,8 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     private SysUserFeignService sysUserFeignService;
     @Autowired
     private RedisCache<String, Object> redisCache;
+    @Autowired
+    private SellOrderService sellOrderService;
 
     @Override
     public BaseDAO<Long, StudentRegistration> getDAO() {
@@ -277,7 +278,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 
     @Override
     @Transactional
-    public StudentPaymentOrder addOrder(StudentRegistration studentRegistration, BigDecimal amount, String orderNo, String paymentChannel, BigDecimal courseFee, List<MusicGroupSubjectGoodsGroup> goodsGroups, List<Goods> goodsList, List<Goods> otherGoodsList, List<CourseFormDto> courseForms,BigDecimal remitFee,BigDecimal courseRemitFee) throws Exception {
+    public StudentPaymentOrder addOrder(StudentRegistration studentRegistration, BigDecimal amount, String orderNo, String paymentChannel, BigDecimal courseFee, List<MusicGroupSubjectGoodsGroup> goodsGroups, List<Goods> goodsList, List<Goods> otherGoodsList, List<CourseFormDto> courseForms, BigDecimal remitFee, BigDecimal courseRemitFee) throws Exception {
         Date date = new Date();
         StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
         studentPaymentOrder.setUserId(studentRegistration.getUserId());
@@ -409,7 +410,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 
     @Override
     @Transactional
-    public StudentPaymentOrder reAddOrder(Integer userId, BigDecimal amount, String orderNo, String paymentChannel, BigDecimal courseFee, List<MusicGroupSubjectGoodsGroup> goodsGroups, List<Goods> goodsList, List<Goods> otherGoodsList, String musicGroupId, StudentPaymentOrder oldOrder, List<CourseFormDto> courseForms,BigDecimal remitFee,BigDecimal courseRemitFee) {
+    public StudentPaymentOrder reAddOrder(Integer userId, BigDecimal amount, String orderNo, String paymentChannel, BigDecimal courseFee, List<MusicGroupSubjectGoodsGroup> goodsGroups, List<Goods> goodsList, List<Goods> otherGoodsList, String musicGroupId, StudentPaymentOrder oldOrder, List<CourseFormDto> courseForms, BigDecimal remitFee, BigDecimal courseRemitFee) {
         //关闭老订单
         oldOrder.setStatus(DealStatusEnum.CLOSE);
         studentPaymentOrderService.update(oldOrder);
@@ -892,8 +893,14 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 rechargeDetail.setComAmount(studentPaymentOrder.getComAmount().negate());
                 rechargeDetail.setPerAmount(studentPaymentOrder.getPerAmount().negate());
             }
-
             sysUserCashAccountDetailService.insert(paymentDetail);
+
+            //销售订单详情
+            List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailService.getOrderDetail(studentPaymentOrder.getId());
+            if (orderDetails.size() > 0) {
+                sellOrderService.addOrderDetail2SellOrder(orderDetails, studentPaymentOrder,musicGroup);
+            }
+
             //三方乐团不发送缴费通知
             if (musicGroup.getOwnershipType() != null && musicGroup.getOwnershipType() == CooperationOrgan.OwnershipType.OWN) {
                 //发送缴费成功通知(短信 + push)

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

@@ -1,11 +1,17 @@
 package com.ym.mec.biz.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.SellOrderDao;
 import com.ym.mec.biz.dal.dao.StudentDao;
 import com.ym.mec.biz.dal.dao.StudentRepairDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.BasicUserDto;
+import com.ym.mec.biz.dal.dto.GoodsSellDto;
+import com.ym.mec.biz.dal.dto.RepairGoodsDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.RepairStudentQueryInfo;
@@ -17,6 +23,7 @@ import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -44,6 +51,8 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
     @Autowired
     private StudentPaymentOrderService studentPaymentOrderService;
     @Autowired
+    private StudentPaymentOrderDetailService studentPaymentOrderDetailService;
+    @Autowired
     private SysUserCashAccountService sysUserCashAccountService;
     @Autowired
     private SysUserCashAccountDetailService sysUserCashAccountDetailService;
@@ -52,7 +61,13 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
     @Autowired
     private StudentDao studentDao;
     @Autowired
+    private GoodsService goodsService;
+    @Autowired
     private StudentPaymentRouteOrderService studentPaymentRouteOrderService;
+    @Autowired
+    private SellOrderService sellOrderService;
+    @Autowired
+    private SellOrderDao sellOrderDao;
 
     @Override
     public BaseDAO<Integer, StudentRepair> getDAO() {
@@ -88,6 +103,113 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
 
     @Override
     @Transactional(rollbackFor = Exception.class)
+    public Map addGoodsSellOrder(GoodsSellDto goodsSellDto) throws Exception {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        Integer studentId = sysUser.getId();
+        String goodsId = goodsSellDto.getGoodsId();
+        if (StringUtils.isEmpty(goodsId)) {
+            throw new BizException("请选择需要购买的商品");
+        }
+        if (studentId == null) {
+            throw new BizException("请指定学员");
+        }
+        studentDao.lockUser(studentId);
+        SysUser student = sysUserFeignService.queryUserById(studentId);
+        String orderNo = idGeneratorService.generatorId("payment") + "";
+
+        String[] goodsIds = goodsId.split(",");
+        Map<String, BigDecimal> map = getMap("goods", "id_", "group_purchase_price_", goodsId, String.class, BigDecimal.class);
+        BigDecimal amount = BigDecimal.ZERO;
+        for (String id : goodsIds) {
+            amount.add(map.get(id));
+        }
+        List<Goods> goods = goodsService.findGoodsByIds(goodsId);
+
+        StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
+        studentPaymentOrder.setUserId(studentId);
+        studentPaymentOrder.setGroupType(GroupType.GOODS_SELL);
+        studentPaymentOrder.setOrderNo(orderNo);
+        studentPaymentOrder.setType(OrderTypeEnum.GOODS_SELL);
+        studentPaymentOrder.setExpectAmount(amount);
+        studentPaymentOrder.setActualAmount(amount);
+        studentPaymentOrder.setStatus(DealStatusEnum.ING);
+        studentPaymentOrder.setOrganId(student.getOrganId());
+        studentPaymentOrder.setRoutingOrganId(student.getOrganId());
+        studentPaymentOrderService.insert(studentPaymentOrder);
+
+        Map<Integer, List<Goods>> collect = goods.stream().collect(Collectors.groupingBy(Goods::getId));
+        List<StudentPaymentOrderDetail> studentPaymentOrderDetailList = new ArrayList<>();
+        for (String id : goodsIds) {
+            Goods e = collect.get(id).get(0);
+            StudentPaymentOrderDetail studentPaymentOrderDetail = new StudentPaymentOrderDetail();
+            studentPaymentOrderDetail.setRemitFee(BigDecimal.ZERO);
+            OrderDetailTypeEnum type = null;
+            if (e.getType() == GoodsType.INSTRUMENT) {
+                type = OrderDetailTypeEnum.MUSICAL;
+            } else if (e.getType() == GoodsType.ACCESSORIES) {
+                type = OrderDetailTypeEnum.ACCESSORIES;
+            } else if (e.getType() == GoodsType.OTHER) {
+                type = OrderDetailTypeEnum.TEACHING;
+            }
+            studentPaymentOrderDetail.setType(type);
+            studentPaymentOrderDetail.setPrice(e.getGroupPurchasePrice());
+            studentPaymentOrderDetail.setGoodsIdList(id);
+            studentPaymentOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
+            studentPaymentOrderDetail.setKitGroupPurchaseType(KitGroupPurchaseTypeEnum.GROUP);
+            studentPaymentOrderDetailList.add(studentPaymentOrderDetail);
+        }
+        studentPaymentOrderDetailService.batchAdd(studentPaymentOrderDetailList);
+
+        studentPaymentOrder.setVersion(0);
+        BigDecimal balance = BigDecimal.ZERO;
+        if (goodsSellDto.getIsUseBalancePayment() && amount.compareTo(BigDecimal.ZERO) > 0) {
+            SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(studentId);
+            if (userCashAccount == null) {
+                throw new BizException("用户账户找不到");
+            }
+            if (userCashAccount.getBalance() != null && userCashAccount.getBalance().compareTo(BigDecimal.ZERO) > 0) {
+                balance = amount.compareTo(userCashAccount.getBalance()) >= 0 ? userCashAccount.getBalance() : amount;
+                amount = amount.subtract(balance);
+                studentPaymentOrder.setActualAmount(amount);
+                studentPaymentOrder.setBalancePaymentAmount(balance);
+                sysUserCashAccountService.updateBalance(studentId, balance.negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "商品销售");
+            }
+        }
+        studentPaymentOrderService.update(studentPaymentOrder);
+        studentPaymentOrder.setVersion(studentPaymentOrder.getVersion() + 1);
+
+        if (amount.compareTo(BigDecimal.ZERO) == 0) {
+            studentPaymentRouteOrderService.addRouteOrder(orderNo, student.getOrganId(), balance);
+            Map<String, String> notifyMap = new HashMap<>();
+            notifyMap.put("tradeState", "1");
+            notifyMap.put("merOrderNo", studentPaymentOrder.getOrderNo());
+            studentPaymentOrderService.updateOrder(notifyMap);
+            notifyMap.put("orderNo", orderNo);
+            return notifyMap;
+        }
+
+        String baseApiUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
+
+        Map payMap = payService.getPayMap(
+                amount,
+                balance,
+                orderNo,
+                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/paymentResult?type=edu&orderNo=" + orderNo,
+                "商品销售",
+                "商品销售",
+                student.getOrganId(),
+                "goodsSell"
+        );
+
+        studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
+        studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
+        studentPaymentOrderService.update(studentPaymentOrder);
+        return payMap;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
     public Map addRepair(StudentRepair repairInfo) throws Exception {
         studentDao.lockUser(repairInfo.getEmployeeId());
         if (repairInfo.getSendType() != null && repairInfo.getSendType().equals(1) &&
@@ -108,12 +230,34 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         repairInfo.setPayStatus(0);
         repairInfo.setCreateTime(date);
         repairInfo.setUpdateTime(date);
+        String goodsJson = repairInfo.getGoodsJson();
+        if (StringUtils.isNotEmpty(goodsJson)) {
+            List<RepairGoodsDto> repairGoodsDtos = JSONObject.parseArray(goodsJson, RepairGoodsDto.class);
+            List<Integer> goodsIds = repairGoodsDtos.stream().map(e -> e.getId()).collect(Collectors.toList());
+            Map<Integer, BigDecimal> map = getMap("goods", "id_", "group_purchase_price_", goodsIds, Integer.class, BigDecimal.class);
+            repairGoodsDtos.forEach(e -> {
+                e.setGroupPurchasePrice(map.get(e.getId()));
+            });
+            repairInfo.setGoodsJson(JSONObject.toJSONString(repairGoodsDtos));
+        }
         studentRepairDao.insert(repairInfo);
         if (repairInfo.getType() == 1) {
             Map<String, Object> repairInfoMap = new HashMap<>();
             MapUtil.populateMap(repairInfoMap, repairInfo);
             return repairInfoMap;
         }
+
+        if (StringUtils.isNoneBlank(repairInfo.getGoodsJson())) {
+            JSONArray goods = JSON.parseArray(repairInfo.getGoodsJson());
+            for (Object good : goods) {
+                JSONObject goodObject = (JSONObject) good;
+                BigDecimal groupPurchasePrice = goodObject.getBigDecimal("groupPurchasePrice");
+                if (Objects.nonNull(groupPurchasePrice)) {
+                    amount = amount.add(groupPurchasePrice);
+                }
+            }
+        }
+
         repairInfo.setPayStatus(1);
         String channelType = "";
 
@@ -257,6 +401,12 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         StudentRepair studentRepair = studentRepairDao.get(repairInfo.getId());
         studentDao.lockUser(studentRepair.getStudentId());
         BigDecimal amount = studentRepair.getAmount();
+        String goodsJson = studentRepair.getGoodsJson();
+        if (StringUtils.isNotEmpty(goodsJson)) {
+            List<RepairGoodsDto> repairGoodsDtos = JSONObject.parseArray(goodsJson, RepairGoodsDto.class);
+            BigDecimal reduce = repairGoodsDtos.stream().map(e -> e.getGroupPurchasePrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
+            amount = amount.add(reduce);
+        }
         String orderNo = idGeneratorService.generatorId("payment") + "";
         studentRepair.setIsUseBalancePayment(repairInfo.getIsUseBalancePayment());
         studentRepair.setTransNo(orderNo);
@@ -355,6 +505,66 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
 
     @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    public void goodsSellorderCallback(StudentPaymentOrder studentPaymentOrder) {
+        Date nowDate = new Date();
+        //更新订单信息
+        studentPaymentOrder.setUpdateTime(nowDate);
+        int updateCount = studentPaymentOrderService.update(studentPaymentOrder);
+        if (updateCount <= 0) {
+            throw new BizException("订单更新失败");
+        }
+
+        Integer userId = studentPaymentOrder.getUserId();
+
+        Map<Integer, String> map = new HashMap<>();
+        map.put(userId, userId.toString());
+
+        if (studentPaymentOrder.getStatus() == DealStatusEnum.SUCCESS) {
+            //插入交易明细
+            BigDecimal amount = studentPaymentOrder.getActualAmount();
+            SysUserCashAccount cashAccount = sysUserCashAccountService.get(userId);
+            //充值
+            SysUserCashAccountDetail rechargeDetail = new SysUserCashAccountDetail();
+            rechargeDetail.setAmount(amount);
+            rechargeDetail.setBalance(cashAccount.getBalance().add(amount));
+            rechargeDetail.setComment("缴费前充值");
+            rechargeDetail.setStatus(DealStatusEnum.SUCCESS);
+            rechargeDetail.setTransNo(studentPaymentOrder.getTransNo());
+            rechargeDetail.setType(PlatformCashAccountDetailTypeEnum.RECHARGE);
+            rechargeDetail.setUserId(userId);
+            rechargeDetail.setChannel(studentPaymentOrder.getPaymentChannel());
+            rechargeDetail.setComAmount(studentPaymentOrder.getComAmount());
+            rechargeDetail.setPerAmount(studentPaymentOrder.getPerAmount());
+            sysUserCashAccountDetailService.insert(rechargeDetail);
+            //缴费
+            SysUserCashAccountDetail paymentDetail = new SysUserCashAccountDetail();
+            paymentDetail.setAmount(amount.negate());
+            paymentDetail.setBalance(cashAccount.getBalance());
+            paymentDetail.setComment("商品销售");
+            paymentDetail.setStatus(DealStatusEnum.SUCCESS);
+            paymentDetail.setTransNo(studentPaymentOrder.getTransNo());
+            paymentDetail.setType(PlatformCashAccountDetailTypeEnum.GOODS_SELL);
+            paymentDetail.setUserId(userId);
+            rechargeDetail.setChannel(studentPaymentOrder.getPaymentChannel());
+            if (studentPaymentOrder.getComAmount() != null) {
+                rechargeDetail.setComAmount(studentPaymentOrder.getComAmount().negate());
+                rechargeDetail.setPerAmount(studentPaymentOrder.getPerAmount().negate());
+            }
+            sysUserCashAccountDetailService.insert(paymentDetail);
+            //销售订单详情
+            List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailService.getOrderDetail(studentPaymentOrder.getId());
+            if (orderDetails.size() > 0) {
+                sellOrderService.addOrderDetail2SellOrder(orderDetails, studentPaymentOrder, null);
+            }
+        } else if (studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED) {
+            if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
+                sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "乐器维修支付失败");
+            }
+        }
+    }
+
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public Boolean orderCallback(StudentPaymentOrder studentPaymentOrder) {
         Date nowDate = new Date();
         //更新订单信息
@@ -368,13 +578,13 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         if (repairInfo == null) {
             throw new BizException("维修单不存在");
         }
-        if(repairInfo.getPayStatus().equals(2)){
+        if (repairInfo.getPayStatus().equals(2)) {
             return true;
         }
 
         Integer userId = studentPaymentOrder.getUserId();
 
-        Map<Integer, String> map = new HashMap();
+        Map<Integer, String> map = new HashMap<>();
         map.put(userId, userId.toString());
 
         if (studentPaymentOrder.getStatus() == DealStatusEnum.SUCCESS) {
@@ -420,6 +630,14 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
                 rechargeDetail.setPerAmount(studentPaymentOrder.getPerAmount().negate());
             }
             sysUserCashAccountDetailService.insert(paymentDetail);
+            //生成销售订单
+            if (StringUtils.isNotBlank(repairInfo.getGoodsJson())) {
+                List<Goods> goods = JSONObject.parseArray(repairInfo.getGoodsJson(), Goods.class);
+                List<Integer> goodsIds = goods.stream().map(Goods::getId).collect(Collectors.toList());
+                if (goodsIds.size() > 0) {
+                    sellOrderService.addSellOrder(studentPaymentOrder.getId(), repairInfo.getMusicGroupId(), goodsIds, studentPaymentOrder.getExpectAmount(), studentPaymentOrder.getBalancePaymentAmount());
+                }
+            }
 
             String imContent = repairInfo.getStudentName() + "学员您好,您的乐器维修已受理,我们会尽快完成保养维修";
 

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

@@ -16,6 +16,7 @@
         <result column="ownership_type_" property="ownershipType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="create_time_" property="createTime"/>
         <result column="update_time_" property="updateTime"/>
+        <result column="full_job_resource_" property="fullJobResource"/>
     </resultMap>
     
     <resultMap type="com.ym.mec.biz.dal.entity.CooperationOrgan" id="ExtCooperationOrgan" extends="CooperationOrgan">
@@ -39,14 +40,18 @@
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.CooperationOrgan"
             useGeneratedKeys="true" keyColumn="id" keyProperty="id">
         INSERT INTO cooperation_organ
-        (id_,name_,linkman_,job_,mobile_no_,address_,organ_id_,create_time_,update_time_,ownership_type_,is_enable_)
-        VALUES(#{id},#{name},#{linkman},#{job},#{mobileNo},#{address},#{organId},now(),now(),#{ownershipType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{isEnable})
+        (id_,name_,linkman_,job_,mobile_no_,address_,organ_id_,create_time_,update_time_,ownership_type_,is_enable_,full_job_resource_)
+        VALUES(#{id},#{name},#{linkman},#{job},#{mobileNo},#{address},#{organId},now(),now(),
+        #{ownershipType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{isEnable},#{fullJobResource})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.CooperationOrgan">
         UPDATE cooperation_organ
         <set>
+            <if test="fullJobResource != null">
+                full_job_resource_ = #{fullJobResource},
+            </if>
             <if test="address != null">
                 address_ = #{address},
             </if>
@@ -98,6 +103,9 @@
 	        <if test="isEnable != null">
 	            AND co.is_enable_ = #{isEnable}
 	        </if>
+            <if test="fullJobResource != null">
+                AND co.full_job_resource_ = #{fullJobResource}
+            </if>
         </where>
         ORDER BY co.update_time_ DESC
         <include refid="global.limit"/>
@@ -117,6 +125,9 @@
 	        <if test="isEnable != null">
 	            AND is_enable_ = #{isEnable}
 	        </if>
+            <if test="fullJobResource != null">
+                AND full_job_resource_ = #{fullJobResource}
+            </if>
         </where>
 	</select>
 
@@ -128,4 +139,16 @@
         SELECT co.id_ 'key',co.name_ 'value' FROM cooperation_organ co
         WHERE FIND_IN_SET(co.id_,#{organIds}) AND co.del_flag_ != 1
     </select>
+
+    <select id="getOrganFullJobResourceNum" resultType="com.ym.mec.biz.dal.dto.OrganFullJobResourceNumDto">
+        SELECT organ_id_ organId,COUNT(*) num FROM cooperation_organ
+        WHERE full_job_resource_ =1 AND is_enable_=1 AND del_flag_ = 0
+        GROUP BY organ_id_
+    </select>
+
+    <!-- 获取全部使用中的合作单位 -->
+    <select id="getAllCooperationOrgan" resultMap="CooperationOrgan">
+        SELECT * FROM cooperation_organ
+        WHERE full_job_resource_ =1 AND is_enable_=1 AND del_flag_ = 0
+    </select>
 </mapper>

+ 47 - 26
mec-biz/src/main/resources/config/mybatis/FinancialExpenditureMapper.xml

@@ -13,7 +13,9 @@
         <result column="dingtalk_process_no_" property="dingtalkProcessNo"/>
         <result column="organ_id_" property="organId"/>
         <result column="cooperation_organ_id_" property="cooperationOrganId"/>
-        <result column="apply_user_id_" property="applyUserId"/>
+        <result column="apply_user_" property="applyUser"/>
+        <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"/>
@@ -37,17 +39,22 @@
     <insert id="insert" 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_,
-        organ_id_,cooperation_organ_id_,apply_user_id_,amount_,item_detail_,payment_time_,cause_,create_time_,update_time_)
-        VALUES(#{batchNo},#{financialProcessNo},#{dingtalkProcessNo},#{organId},#{cooperationOrganId},#{applyUserId},#{amount},
-        #{itemDetail},#{paymentTime},#{cause},now(),now())
+        organ_id_,cooperation_organ_id_,apply_user_,amount_,item_detail_,payment_time_,cause_,create_time_,update_time_,fee_project_,type_)
+        VALUES(#{batchNo},#{financialProcessNo},#{dingtalkProcessNo},#{organId},#{cooperationOrganId},#{applyUser},#{amount},
+        #{itemDetail},#{paymentTime},#{cause},now(),now(),#{feeProject,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+        #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
     </insert>
+
     <insert id="batchInsert">
         INSERT INTO financial_expenditure (batch_no_,financial_process_no_,dingtalk_process_no_,
-        organ_id_,cooperation_organ_id_,apply_user_id_,amount_,item_detail_,payment_time_,cause_,create_time_,update_time_)
+        organ_id_,cooperation_organ_id_,apply_user_,amount_,item_detail_,payment_time_,cause_,create_time_,update_time_,fee_project_,type_)
         VALUES
         <foreach collection="financialExpenditures" item="item" separator=",">
-            (#{item.batchNo},#{item.financialProcessNo},#{item.dingtalkProcessNo},#{item.organId},#{item.cooperationOrganId},#{item.applyUserId},#{item.amount},
-            #{item.itemDetail},#{item.paymentTime},#{item.cause},now(),now())
+            (#{item.batchNo},#{item.financialProcessNo},#{item.dingtalkProcessNo},#{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})
         </foreach>
     </insert>
 
@@ -55,8 +62,11 @@
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.FinancialExpenditure">
         UPDATE financial_expenditure
         <set>
-            <if test="delFlag != null">
-                del_flag_ = #{delFlag},
+            <if test="feeProject != null">
+                fee_project_ = #{feeProject,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
+            <if test="type != null">
+                type_ = #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
             <if test="batchNo != null">
                 batch_no_ = #{batchNo},
@@ -73,8 +83,8 @@
             <if test="cooperationOrganId != null">
                 cooperation_organ_id_ = #{cooperationOrganId},
             </if>
-            <if test="applyUserId != null">
-                apply_user_id_ = #{applyUserId},
+            <if test="applyUser != null">
+                apply_user_ = #{applyUser},
             </if>
             <if test="amount != null">
                 amount_ = #{amount},
@@ -107,6 +117,12 @@
             <if test="batchNo != null and batchNo != ''">
                 AND fe.batch_no_ = #{batchNo}
             </if>
+            <if test="feeProject != null">
+                AND fe.fee_project_ = #{feeProject}
+            </if>
+            <if test="type != null">
+                AND fe.type_ = #{type}
+            </if>
             <if test="financialProcessNo != null and financialProcessNo != ''">
                 AND fe.financial_process_no_ = #{financialProcessNo}
             </if>
@@ -114,23 +130,20 @@
                 AND fe.dingtalk_process_no_ = #{dingtalkProcessNo}
             </if>
             <if test="search != null and search != ''">
-                AND (fe.batch_no_ LIKE CONCAT('%',#{search},'%') OR fe.financial_process_no_ LIKE CONCAT('%',#{search},'%')
-                OR fe.dingtalk_process_no_ LIKE CONCAT('%',#{search},'%') OR su.real_name_ LIKE CONCAT('%',#{search},'%'))
+                AND (fe.id_ LIKE CONCAT('%',#{search},'%') OR fe.financial_process_no_ LIKE CONCAT('%',#{search},'%')
+                OR fe.dingtalk_process_no_ LIKE CONCAT('%',#{search},'%') OR fe.apply_user_ LIKE CONCAT('%',#{search},'%'))
             </if>
-            <if test="organId != null">
-                AND fe.organ_id_ = #{organId}
+            <if test="organId != null and organId != ''">
+                AND FIND_IN_SET(fe.organ_id_,#{organId})
             </if>
             <if test="cooperationOrganId != null">
                 AND fe.cooperation_organ_id_ = #{cooperationOrganId}
             </if>
-            <if test="applyUserId != null">
-                AND fe.apply_user_id_ = #{applyUserId}
-            </if>
             <if test="startTime != null and startTime != ''">
-                AND DATE_FORMAT(fe.payment_time_,'%Y%m%d') &gt;= #{startTime}
+                AND DATE_FORMAT(fe.payment_time_,'%Y-%m-%d') &gt;= #{startTime}
             </if>
             <if test="endTime != null and endTime != ''">
-                AND DATE_FORMAT(fe.payment_time_,'%Y%m%d') &lt;= #{endTime}
+                AND DATE_FORMAT(fe.payment_time_,'%Y-%m-%d') &lt;= #{endTime}
             </if>
         </where>
     </sql>
@@ -140,7 +153,6 @@
         SELECT fe.*,o.name_ organ_name_,co.name_ cooperation_name_,su.real_name_
         FROM financial_expenditure fe
         LEFT JOIN organization o ON o.id_ = fe.organ_id_
-        LEFT JOIN sys_user su ON su.id_ = fe.apply_user_id_
         LEFT JOIN cooperation_organ co ON co.id_ = fe.cooperation_organ_id_
         <include refid="queryPageSql"/>
         <include refid="global.limit"/>
@@ -149,28 +161,37 @@
     <!-- 查询当前表的总记录数 -->
     <select id="queryCount" resultType="int">
 		SELECT COUNT(DISTINCT fe.id_) FROM financial_expenditure fe
-        LEFT JOIN sys_user su ON su.id_ = fe.apply_user_id_
         <include refid="queryPageSql"/>
 	</select>
 
     <resultMap type="com.ym.mec.biz.dal.dto.FinancialExpenditureDto" id="FinancialExpenditureDto" extends="FinancialExpenditure">
         <result column="organ_name_" property="organName"/>
         <result column="cooperation_name_" property="cooperationName"/>
-        <result column="real_name_" property="realName"/>
     </resultMap>
 
     <select id="findFinancialExpenditureCount" resultType="java.lang.Integer">
         SELECT COUNT(DISTINCT fe.id_) FROM financial_expenditure fe
-        LEFT JOIN sys_user su ON su.id_ = fe.apply_user_id_
         <include refid="queryPageSql"/>
     </select>
     <select id="queryFinancialExpenditurePage" resultMap="FinancialExpenditureDto">
-        SELECT fe.*,o.name_ organ_name_,co.name_ cooperation_name_,su.real_name_
+        SELECT fe.*,o.name_ organ_name_,co.name_ cooperation_name_
         FROM financial_expenditure fe
         LEFT JOIN organization o ON o.id_ = fe.organ_id_
-        LEFT JOIN sys_user su ON su.id_ = fe.apply_user_id_
         LEFT JOIN cooperation_organ co ON co.id_ = fe.cooperation_organ_id_
         <include refid="queryPageSql"/>
         <include refid="global.limit"/>
     </select>
+
+    <!-- 统计合作单位的支出 -->
+    <select id="getCooperationExpenditure" resultMap="FinancialExpenditure">
+        SELECT organ_id_,cooperation_organ_id_, type_, SUM(amount_) amount_ FROM financial_expenditure WHERE del_flag_ =0
+        GROUP BY organ_id_,cooperation_organ_id_,type_
+    </select>
+    <select id="countBydingTalk" resultType="java.lang.String">
+        SELECT dingtalk_process_no_ FROM financial_expenditure WHERE del_flag_ = 0 AND dingtalk_process_no_ IN
+        <foreach collection="collect" separator="," open="(" close=")" item="item">
+            #{item}
+        </foreach>
+        GROUP BY dingtalk_process_no_
+    </select>
 </mapper>

+ 18 - 10
mec-biz/src/main/resources/config/mybatis/GoodsMapper.xml

@@ -154,30 +154,32 @@
         ORDER BY g.id_
         <include refid="global.limit"/>
     </select>
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount" resultType="int">
+        SELECT COUNT(*) FROM goods g
+        <include refid="queryGoodsPageSql"/>
+    </select>
 
     <sql id="queryGoodsPageSql">
         <where>
             <if test="goodsCategoryId != null">
-                g.goods_category_id_ = #{goodsCategoryId}
+                AND g.goods_category_id_ = #{goodsCategoryId}
+            </if>
+            <if test="type != null">
+                AND g.type_ = #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
             </if>
             <if test="isNew != null">
-                g.is_new_ = #{isNew,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+                AND g.is_new_ = #{isNew,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
             </if>
             <if test="isTop != null">
-                g.is_top_ = #{isTop,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+                AND g.is_top_ = #{isTop,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
             </if>
             <if test="status != null">
-                g.status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+                AND g.status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
             </if>
         </where>
     </sql>
 
-    <!-- 查询当前表的总记录数 -->
-    <select id="queryCount" resultType="int">
-		SELECT COUNT(*) FROM goods g
-        <include refid="queryGoodsPageSql"/>
-	</select>
-
     <select id="findGoodsBySubId" resultMap="Goods">
         SELECT g.* FROM subject_goods_mapper sgm
         LEFT JOIN goods g ON sgm.goods_category_id_ = g.goods_category_id_
@@ -194,4 +196,10 @@
     <select id="findTypeGoods" resultMap="Goods">
         SELECT * FROM goods WHERE type_ = #{type} AND status_ != 0
     </select>
+    <select id="getGoodies" resultMap="Goods">
+        SELECT * FROM goods WHERE id_ IN
+        <foreach collection="goodsIds" item="goodsId" open="(" close=")" separator=",">
+            #{goodsId}
+        </foreach>
+    </select>
 </mapper>

+ 164 - 0
mec-biz/src/main/resources/config/mybatis/OperatingReportMapper.xml

@@ -0,0 +1,164 @@
+<?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.OperatingReportDao">
+    <resultMap id="OperatingReport" type="com.ym.mec.biz.dal.entity.OperatingReport">
+        <!--@mbg.generated-->
+        <!--@Table operating_report-->
+        <id column="id_" property="id"/>
+        <result column="organ_id_" property="organId"/>
+        <result column="organ_name_" property="organName"/>
+        <result column="cooperation_organ_id_" property="cooperationOrganId"/>
+        <result column="school_name_" property="schoolName"/>
+        <result column="sell_amount_" property="sellAmount"/>
+        <result column="service_amount_" property="serviceAmount"/>
+        <result column="other_income_" property="otherIncome"/>
+        <result column="refund_amount_" property="refundAmount"/>
+        <result column="income_total_" property="incomeTotal"/>
+        <result column="sell_cost_" property="sellCost"/>
+        <result column="expenses_amount_" property="expensesAmount"/>
+        <result column="variable_cost_" property="variableCost"/>
+        <result column="distribution_amount_" property="distributionAmount"/>
+        <result column="cost_amount_" property="costAmount"/>
+        <result column="profit_" property="profit"/>
+        <result column="month_" property="month"/>
+        <result column="create_time_" property="createTime"/>
+    </resultMap>
+    <sql id="Base_Column_List">
+        <!--@mbg.generated-->
+        id_, organ_id_, cooperation_organ_id_, sell_amount_, service_amount_,other_income_, refund_amount_,
+        income_total_,
+        sell_cost_, expenses_amount_, variable_cost_, distribution_amount_, cost_amount_,
+        profit_, month_, create_time_
+    </sql>
+    <select id="get" parameterType="java.lang.Integer" resultMap="OperatingReport">
+        <!--@mbg.generated-->
+        select
+        <include refid="Base_Column_List"/>
+        from operating_report
+        where id_ = #{id}
+    </select>
+    <delete id="delete" parameterType="java.lang.Integer">
+        <!--@mbg.generated-->
+        delete from operating_report
+        where id_ = #{id}
+    </delete>
+    <insert id="insert" keyColumn="id_" keyProperty="id" parameterType="com.ym.mec.biz.dal.entity.OperatingReport"
+            useGeneratedKeys="true">
+        <!--@mbg.generated-->
+        insert into operating_report (organ_id_, cooperation_organ_id_, sell_amount_, service_amount_,other_income_,
+        refund_amount_,
+        income_total_, sell_cost_, expenses_amount_, variable_cost_, distribution_amount_,
+        cost_amount_, profit_, month_, create_time_)
+        values (#{organId}, #{cooperationOrganId}, #{sellAmount}, #{serviceAmount},#{otherIncome}, #{refundAmount},
+        #{incomeTotal}, #{sellCost}, #{expensesAmount}, #{variableCost}, #{distributionAmount},
+        #{costAmount}, #{profit}, #{month}, #{createTime})
+    </insert>
+
+    <update id="update" parameterType="com.ym.mec.biz.dal.entity.OperatingReport">
+        <!--@mbg.generated-->
+        update operating_report
+        <set>
+            <if test="organId != null">
+                organ_id_ = #{organId},
+            </if>
+            <if test="cooperationOrganId != null">
+                cooperation_organ_id_ = #{cooperationOrganId},
+            </if>
+            <if test="sellAmount != null">
+                sell_amount_ = #{sellAmount},
+            </if>
+            <if test="serviceAmount != null">
+                service_amount_ = #{serviceAmount},
+            </if>
+            <if test="otherIncome != null">
+                other_income_ = #{otherIncome},
+            </if>
+            <if test="refundAmount != null">
+                refund_amount_ = #{refundAmount},
+            </if>
+            <if test="incomeTotal != null">
+                income_total_ = #{incomeTotal},
+            </if>
+            <if test="sellCost != null">
+                sell_cost_ = #{sellCost},
+            </if>
+            <if test="expensesAmount != null">
+                expenses_amount_ = #{expensesAmount},
+            </if>
+            <if test="variableCost != null">
+                variable_cost_ = #{variableCost},
+            </if>
+            <if test="distributionAmount != null">
+                distribution_amount_ = #{distributionAmount},
+            </if>
+            <if test="costAmount != null">
+                cost_amount_ = #{costAmount},
+            </if>
+            <if test="profit != null">
+                profit_ = #{profit},
+            </if>
+            <if test="month != null">
+                month_ = #{month},
+            </if>
+            <if test="createTime != null">
+                create_time_ = #{createTime},
+            </if>
+        </set>
+        where id_ = #{id}
+    </update>
+
+
+    <!-- 分页查询 -->
+    <select id="queryPage" resultMap="OperatingReport" parameterType="map">
+        SELECT opr.*,o.name_ organ_name_,co.name_ school_name_ FROM operating_report opr
+        LEFT JOIN organization o ON o.id_ = opr.organ_id_
+        LEFT JOIN cooperation_organ co ON co.id_= opr.cooperation_organ_id_
+        <include refid="queryPageSql"/>
+        ORDER BY opr.month_ DESC,opr.organ_id_ ASC
+        <include refid="global.limit"/>
+    </select>
+
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount" resultType="int">
+        SELECT COUNT(*) FROM operating_report opr
+        <include refid="queryPageSql"/>
+    </select>
+
+    <sql id="queryPageSql">
+        <where>
+            <if test="organIdList != null and organIdList != ''">
+                AND FIND_IN_SET(opr.organ_id_,#{organIdList})
+            </if>
+            <if test="cooperationOrganId != null">
+                AND opr.cooperation_organ_id_ = #{cooperationOrganId}
+            </if>
+            <if test="startTime != null">
+                AND opr.month_ >= #{startTime}
+            </if>
+            <if test="endTime != null">
+                AND opr.month_ &lt;= #{endTime}
+            </if>
+        </where>
+    </sql>
+    <select id="getReport" resultMap="OperatingReport" parameterType="map">
+        SELECT * FROM operating_report opr
+        <where>
+            <if test="organId != null">
+                AND organ_id_ = #{organId}
+            </if>
+            <if test="cooperationOrganId != null">
+                AND cooperation_organ_id_ = #{cooperationOrganId}
+            </if>
+            <if test="cooperationOrganId == null">
+                AND cooperation_organ_id_ IS NULL
+            </if>
+            <if test="startTime != null">
+                AND month_ >= #{startTime}
+            </if>
+            <if test="endTime != null">
+                AND month_ &lt;= #{endTime}
+            </if>
+        </where>
+        LIMIT 1
+    </select>
+</mapper>

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

@@ -18,7 +18,6 @@
         <result column="linkman_" property="linkman"/>
         <result column="mobile_" property="mobile"/>
         <result column="address_" property="address"/>
-        <result column="full_job_resource_" property="fullJobResource"/>
     </resultMap>
 
     <!-- 根据主键查询一条记录 -->
@@ -34,8 +33,8 @@
     <!-- 向数据库增加一条记录 -->
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.Organization" useGeneratedKeys="true" keyColumn="id"
             keyProperty="id">
-        INSERT INTO organization (id_,name_,area_id_,create_time_,update_time_,register_date_,linkman_,mobile_,address_,full_job_resource_)
-        VALUES(#{id},#{name},#{areaId},now(),now(),#{registerDate},#{linkman},#{mobile},#{address},#{fullJobResource})
+        INSERT INTO organization (id_,name_,area_id_,create_time_,update_time_,register_date_,linkman_,mobile_,address_)
+        VALUES(#{id},#{name},#{areaId},now(),now(),#{registerDate},#{linkman},#{mobile},#{address})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -45,9 +44,6 @@
             <if test="delFlag != null">
                 del_flag_ = #{delFlag,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
-            <if test="fullJobResource != null">
-                full_job_resource_ = #{fullJobResource},
-            </if>
             <if test="areaId != null">
                 area_id_ = #{areaId},
             </if>
@@ -80,9 +76,6 @@
 
     <sql id="queryPageSql">
         <where>
-            <if test="fullJobResource != null">
-                and o.full_job_resource_ = #{fullJobResource}
-            </if>
             <if test="delFlag != null">
                 and o.del_flag_ = #{delFlag,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
             </if>

+ 302 - 0
mec-biz/src/main/resources/config/mybatis/SellOrderMapper.xml

@@ -0,0 +1,302 @@
+<?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.SellOrderDao">
+    <resultMap id="SellOrder" type="com.ym.mec.biz.dal.entity.SellOrder">
+        <!--@mbg.generated-->
+        <!--@Table sell_order-->
+        <id column="id_" property="id"/>
+        <result column="organ_id_" property="organId"/>
+        <result column="cooperation_organ_id_" property="cooperationOrganId"/>
+        <result column="school_name_" property="schoolName"/>
+        <result column="trans_no_" property="transNo"/>
+        <result column="order_no_" property="orderNo"/>
+        <result column="order_id_" property="orderId"/>
+        <result column="expect_amount_" property="expectAmount"/>
+        <result column="actual_amount_" property="actualAmount"/>
+        <result column="balance_amount_" property="balanceAmount"/>
+        <result column="type_" property="type"/>
+        <result column="goods_id_" property="goodsId"/>
+        <result column="goods_name_" property="goodsName"/>
+        <result column="sell_cost_" property="sellCost"/>
+        <result column="sell_cost2_" property="sellCost2"/>
+        <result column="num_" property="num"/>
+        <result column="user_id_" property="userId"/>
+        <result column="user_name_" property="userName"/>
+        <result column="phone_" property="phone"/>
+        <result column="organ_name_" property="organName"/>
+        <result column="user_id_" property="userId"/>
+        <result column="payment_channel_" property="paymentChannel"/>
+        <result column="mer_no_" property="merNo"/>
+        <result column="sell_time_" property="sellTime"/>
+        <result column="create_ime_" property="createIme"/>
+        <result column="update_time_" property="updateTime"/>
+    </resultMap>
+    <sql id="Base_Column_List">
+        <!--@mbg.generated-->
+        id_, organ_id_, cooperation_organ_id_, trans_no_,order_id_, order_no_, expect_amount_, actual_amount_,
+        balance_amount_, sell_cost_, sell_cost2_, type_, goods_id_,goods_name_, num_, user_id_, payment_channel_,
+        mer_no_, sell_time_, create_ime_, update_time_
+    </sql>
+    <select id="get" parameterType="java.lang.Integer" resultMap="SellOrder">
+        <!--@mbg.generated-->
+        select
+        <include refid="Base_Column_List"/>
+        from sell_order
+        where id_ = #{id}
+    </select>
+    <delete id="delete" parameterType="java.lang.Integer">
+        <!--@mbg.generated-->
+        delete from sell_order
+        where id_ = #{id}
+    </delete>
+    <insert id="insert" keyColumn="id_" keyProperty="id" parameterType="com.ym.mec.biz.dal.entity.SellOrder"
+            useGeneratedKeys="true">
+        <!--@mbg.generated-->
+        insert into sell_order (organ_id_, cooperation_organ_id_, trans_no_,order_id_, order_no_, expect_amount_, actual_amount_,
+        balance_amount_, type_, goods_id_,goods_name_, sell_cost_, sell_cost2_, num_, user_id_, payment_channel_,
+        mer_no_, sell_time_, create_ime_, update_time_)
+        values (#{organId}, #{cooperationOrganId}, #{transNo}, #{orderNo},#{orderId}, #{expectAmount}, #{actualAmount},
+        #{balanceAmount}, #{type}, #{goodsId}, #{goodsName}, #{sellCost}, #{sellCost2}, #{num}, #{userId},
+        #{paymentChannel},
+        #{merNo}, #{sellTime}, #{createIme}, #{updateTime})
+    </insert>
+    <update id="update" parameterType="com.ym.mec.biz.dal.entity.SellOrder">
+        <!--@mbg.generated-->
+        update sell_order
+        <set>
+            <if test="organId != null">
+                organ_id_ = #{organId},
+            </if>
+            <if test="cooperationOrganId != null">
+                cooperation_organ_id_ = #{cooperationOrganId},
+            </if>
+            <if test="transNo != null">
+                trans_no_ = #{transNo},
+            </if>
+            <if test="orderId != null">
+                order_id_ = #{orderId},
+            </if>
+            <if test="orderNo != null">
+                order_no_ = #{orderNo},
+            </if>
+            <if test="expectAmount != null">
+                expect_amount_ = #{expectAmount},
+            </if>
+            <if test="actualAmount != null">
+                actual_amount_ = #{actualAmount},
+            </if>
+            <if test="balanceAmount != null">
+                balance_amount_ = #{balanceAmount},
+            </if>
+            <if test="type != null">
+                type_ = #{type},
+            </if>
+            <if test="goodsId != null">
+                goods_id_ = #{goodsId},
+            </if>
+            <if test="goodsName != null">
+                goods_name_ = #{goodsName},
+            </if>
+            <if test="sellCost != null">
+                sell_cost_ = #{sellCost},
+            </if>
+            <if test="sellCost2 != null">
+                sell_cost2_ = #{sellCost2},
+            </if>
+            <if test="num != null">
+                num_ = #{num},
+            </if>
+            <if test="userId != null">
+                user_id_ = #{userId},
+            </if>
+            <if test="paymentChannel != null">
+                payment_channel_ = #{paymentChannel},
+            </if>
+            <if test="merNo != null">
+                mer_no_ = #{merNo},
+            </if>
+            <if test="sellTime != null">
+                sell_time_ = #{sellTime},
+            </if>
+            <if test="createIme != null">
+                create_ime_ = #{createIme},
+            </if>
+            <if test="updateTime != null">
+                update_time_ = #{updateTime},
+            </if>
+        </set>
+        where id_ = #{id}
+    </update>
+
+    <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id_">
+        insert into sell_order (organ_id_, cooperation_organ_id_, trans_no_,order_id_, order_no_, expect_amount_, actual_amount_,
+        balance_amount_, type_, goods_id_,goods_name_, sell_cost_, sell_cost2_, num_, user_id_, payment_channel_,
+        mer_no_, sell_time_, create_ime_, update_time_)
+        VALUE
+        <foreach collection="sellOrders" separator="," item="sellOrder">
+            (#{sellOrder.organId},#{sellOrder.cooperationOrganId},#{sellOrder.transNo},#{sellOrder.orderId},#{sellOrder.orderNo},
+            #{sellOrder.expectAmount},#{sellOrder.actualAmount},#{sellOrder.balanceAmount},#{sellOrder.type},#{sellOrder.goodsId},
+            #{sellOrder.goodsName},#{sellOrder.sellCost},#{sellOrder.sellCost2},#{sellOrder.num},#{sellOrder.userId},
+            #{sellOrder.paymentChannel},#{sellOrder.merNo},#{sellOrder.sellTime},#{sellOrder.createIme},#{sellOrder.updateTime})
+        </foreach>
+    </insert>
+
+
+    <!-- 分页查询 -->
+    <select id="queryPage" resultMap="SellOrder" parameterType="map">
+        SELECT so.*,su.username_ user_name_,su.phone_,o.name_ organ_name_,co.name_ school_name_ FROM sell_order so
+        LEFT JOIN sys_user su ON so.user_id_ = su.id_
+        LEFT JOIN organization o ON o.id_ = so.organ_id_
+        LEFT JOIN cooperation_organ co ON co.id_= so.cooperation_organ_id_
+        <include refid="queryPageSql"/>
+        ORDER BY so.sell_time_ DESC
+        <include refid="global.limit"/>
+    </select>
+
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount" resultType="int">
+        SELECT COUNT(*) FROM sell_order so
+        <include refid="queryPageSql"/>
+    </select>
+
+    <sql id="queryPageSql">
+        <where>
+            <if test="search != null and search != ''">
+                AND (so.order_no_ = #{search} OR so.trans_no_ = #{search})
+            </if>
+            <if test="organIdList != null and organIdList != ''">
+                AND FIND_IN_SET(so.organ_id_,#{organIdList})
+            </if>
+            <if test="goodsName != null and goodsName != ''">
+                AND so.goods_name_ = #{goodsName}
+            </if>
+            <if test="cooperationOrganId != null">
+                AND so.cooperation_organ_id_ = #{cooperationOrganId}
+            </if>
+            <if test="type != null">
+                AND so.type_ = #{type}
+            </if>
+            <if test="startTime != null">
+                AND so.sell_time_ >= #{startTime}
+            </if>
+            <if test="endTime != null">
+                AND so.sell_time_ &lt;= #{endTime}
+            </if>
+        </where>
+    </sql>
+
+    <!-- 获取分部学校的收入支出(乐团订单) -->
+    <select id="getMusicGroupMonthReport" resultMap="com.ym.mec.biz.dal.dao.OperatingReportDao.OperatingReport"><![CDATA[
+        SELECT spo.organ_id_,
+               co.id_                  cooperation_organ_id_,
+               SUM(spo.actual_amount_) income_total_,
+               SUM(so.actual_amount_)  sell_amount_,
+               SUM(so.sell_cost_)      sellCost
+        FROM student_payment_order spo
+                 LEFT JOIN sell_order so on so.order_id_ = spo.id_
+                 LEFT JOIN music_group mg ON mg.id_ = spo.music_group_id_
+                 LEFT JOIN cooperation_organ co ON co.id_ = mg.cooperation_organ_id_
+        WHERE spo.status_ = 'SUCCESS'
+          AND spo.group_type_ = 'MUSIC'
+          AND spo.create_time_ >= #{startTime}
+          AND spo.create_time_ <= #{endTime}
+        GROUP BY spo.organ_id_, co.id_
+        ]]></select>
+
+    <!-- 获取分部学校的收入支出(VIP,网管课) -->
+    <select id="getMusicVipPracticeMonthReport" resultMap="com.ym.mec.biz.dal.dao.OperatingReportDao.OperatingReport"><![CDATA[
+        SELECT spo.organ_id_,
+               co.id_                  cooperation_organ_id_,
+               SUM(spo.actual_amount_) income_total_
+        FROM student_payment_order spo
+                 LEFT JOIN
+             (SELECT MIN(music_group_id_) music_group_id_, user_id_
+              FROM student_registration
+              WHERE music_group_status_ = 'NORMAL'
+              GROUP BY user_id_) sr
+             ON sr.user_id_ = spo.user_id_
+                 LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_
+                 LEFT JOIN cooperation_organ co ON co.id_ = mg.cooperation_organ_id_
+        WHERE spo.status_ = 'SUCCESS'
+          AND spo.group_type_ IN ('VIP', 'PRACTICE')
+          AND spo.create_time_ >= #{startTime}
+          AND spo.create_time_ <= #{endTime}
+        GROUP BY spo.organ_id_, co.id_
+        ]]></select>
+
+
+    <!-- 获取分部学校的收入支出(外部添加订单) -->
+    <select id="getOutOrderMonthReport" resultMap="com.ym.mec.biz.dal.dao.OperatingReportDao.OperatingReport"><![CDATA[
+        SELECT spo.organ_id_,
+               co.id_                  cooperation_organ_id_,
+               SUM(spo.actual_amount_) income_total_,
+               SUM(so.actual_amount_)  sell_amount_,
+               SUM(so.sell_cost_)      sellCost
+        FROM student_payment_order spo
+                 LEFT JOIN sell_order so on so.order_id_ = spo.id_
+                 LEFT JOIN cooperation_organ co ON co.id_ = spo.music_group_id_
+        WHERE spo.status_ = 'SUCCESS'
+          AND spo.group_type_ = 'OUTORDER'
+          AND spo.create_time_ >= #{startTime}
+          AND spo.create_time_ <= #{endTime}
+        GROUP BY spo.organ_id_, co.id_
+        ]]></select>
+
+    <!-- 获取分部学校的收入(充值) -->
+    <select id="getRechargeMonthReport" resultMap="com.ym.mec.biz.dal.dao.OperatingReportDao.OperatingReport"><![CDATA[
+        SELECT spo.organ_id_,
+               co.id_                  cooperation_organ_id_,
+               SUM(spo.actual_amount_) income_total_
+        FROM student_payment_order spo
+                 LEFT JOIN sporadic_charge_info sci ON sci.id_ = spo.music_group_id_
+                 LEFT JOIN music_group mg ON mg.id_ = sci.music_group_id_
+                 LEFT JOIN cooperation_organ co ON co.id_ = mg.cooperation_organ_id_
+        WHERE spo.status_ = 'SUCCESS'
+          AND spo.group_type_ = 'SPORADIC'
+          AND sci.charge_type_ = '9'
+          AND spo.create_time_ >= #{startTime}
+          AND spo.create_time_ <= #{endTime}
+        GROUP BY spo.organ_id_, co.id_
+        ]]></select>
+
+    <!-- 获取分部学校的收入(零星支付) -->
+    <select id="getSporadicMonthReport" resultMap="com.ym.mec.biz.dal.dao.OperatingReportDao.OperatingReport"><![CDATA[
+        SELECT spo.organ_id_,
+               co.id_                  cooperation_organ_id_,
+               SUM(spo.actual_amount_) income_total_
+        FROM student_payment_order spo
+                 LEFT JOIN sporadic_charge_info sci ON sci.id_ = spo.music_group_id_
+                 LEFT JOIN music_group mg ON mg.id_ = sci.music_group_id_
+                 LEFT JOIN cooperation_organ co ON co.id_ = mg.cooperation_organ_id_
+        WHERE spo.status_ = 'SUCCESS'
+          AND spo.group_type_ = 'SPORADIC'
+          AND sci.charge_type_ != '9'
+          AND spo.create_time_ >= #{startTime}
+          AND spo.create_time_ <= #{endTime}
+        GROUP BY spo.organ_id_, co.id_
+        ]]></select>
+
+    <!-- 获取分部学校的收入支出(维修、商品销售订单) -->
+    <select id="getRepairGoodsSellGroupMonthReport" resultMap="com.ym.mec.biz.dal.dao.OperatingReportDao.OperatingReport"><![CDATA[
+        SELECT spo.organ_id_,
+               SUM(spo.actual_amount_) income_total_,
+               SUM(so.actual_amount_)  sell_amount_,
+               SUM(so.sell_cost_)      sellCost
+        FROM student_payment_order spo
+                 LEFT JOIN sell_order so on so.order_id_ = spo.id_
+        WHERE spo.status_ = 'SUCCESS'
+          AND spo.group_type_ IN ('REPAIR','GOODS_SELL')
+          AND spo.create_time_ >= #{startTime}
+          AND spo.create_time_ <= #{endTime}
+        GROUP BY spo.organ_id_
+        ]]></select>
+
+    <!-- 获取订单的销售列表 -->
+    <select id="getOrderSellOrder" resultMap="SellOrder">
+        SELECT * FROM sell_order WHERE order_id_ = #{orderId}
+    </select>
+
+    <delete id="deleteByOrderId">
+        DELETE FROM sell_order WHERE order_id_=#{orderId}
+    </delete>
+</mapper>

+ 14 - 0
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderDetailMapper.xml

@@ -15,6 +15,14 @@
         <result column="update_time_" property="updateTime"/>
         <result column="payment_order_id_" property="paymentOrderId"/>
         <result column="kit_group_purchase_type_" property="kitGroupPurchaseType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <collection property="goodsList" ofType="com.ym.mec.biz.dal.entity.Goods">
+            <result column="goods_id_" property="id"/>
+            <result column="goods_name_" property="name"/>
+            <result column="group_purchase_price_" property="groupPurchasePrice"/>
+            <result column="discount_price_" property="discountPrice"/>
+            <result column="agree_cost_price_" property="agreeCostPrice"/>
+            <result column="goods_type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        </collection>
     </resultMap>
 
     <!-- 根据主键查询一条记录 -->
@@ -164,6 +172,12 @@
         SELECT * FROM student_payment_order_detail WHERE payment_order_id_ = #{orderId} AND type_ = 'MUSICAL' LIMIT 1
     </select>
 
+    <select id="getOrderDetail" resultMap="StudentPaymentOrderDetail">
+        SELECT spod.*,g.id_ goods_id_,g.name_ goods_name_,g.group_purchase_price_,g.discount_price_,g.agree_cost_price_,g.type_ goods_type_ FROM student_payment_order_detail spod
+                          LEFT JOIN goods g ON FIND_IN_SET(g.id_,spod.goods_id_list_)
+        WHERE spod.payment_order_id_ = #{orderId} AND spod.goods_id_list_ IS NOT NULL
+    </select>
+
     <select id="getOrderDetailType" resultType="java.lang.String">
         SELECT DISTINCT type_ FROM student_payment_order_detail WHERE payment_order_id_ = #{orderId}
     </select>

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

@@ -134,9 +134,6 @@
             <if test="merNos != null">
                 mer_nos_ = #{merNos},
             </if>
-            <if test="updateTime != null">
-                update_time_ = NOW(),
-            </if>
             <if test="paymentBusinessChannel != null">
                 payment_business_channel_ = #{paymentBusinessChannel},
             </if>
@@ -179,6 +176,7 @@
             <if test="version != null">
                 version_ = version_+1,
             </if>
+            update_time_ = NOW()
         </set>
         WHERE id_ = #{id} AND version_ = #{version}
     </update>

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

@@ -209,4 +209,9 @@
         ORDER BY spo.id_ ASC
     </select>
 
+    <delete id="deleteByOrderNo">
+        DELETE FROM student_payment_route_order
+        where order_no_ = #{orderNo}
+    </delete>
+
 </mapper>

+ 13 - 4
mec-biz/src/main/resources/config/mybatis/StudentRepairMapper.xml

@@ -3,6 +3,8 @@
 <mapper namespace="com.ym.mec.biz.dal.dao.StudentRepairDao">
     <resultMap id="StudentRepair" type="com.ym.mec.biz.dal.entity.StudentRepair">
         <result column="id_" jdbcType="INTEGER" property="id"/>
+        <result column="music_group_id_" jdbcType="VARCHAR" property="musicGroupId"/>
+        <result column="trans_no_" jdbcType="VARCHAR" property="transNo"/>
         <result column="trans_no_" jdbcType="VARCHAR" property="transNo"/>
         <result column="organ_id_" jdbcType="INTEGER" property="organId"/>
         <result column="name_" jdbcType="INTEGER" property="organName"/>
@@ -30,6 +32,7 @@
         <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
         <result column="update_time_" jdbcType="TIMESTAMP" property="updateTime"/>
         <result column="username_" jdbcType="VARCHAR" property="studentName"/>
+        <result column="goods_json_" jdbcType="VARCHAR" property="goodsJson"/>
     </resultMap>
     <!-- 根据主键查询一条记录 -->
     <select id="get" resultMap="StudentRepair">
@@ -41,26 +44,32 @@
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.StudentRepair" useGeneratedKeys="true" keyColumn="id"
             keyProperty="id">
         <!--@mbg.generated-->
-        insert into student_repair (id_, trans_no_, organ_id_,
+        insert into student_repair (id_,music_group_id_, trans_no_, organ_id_,
         student_id_, student_name_, student_school_,
         employee_id_, employee_name_, subject_id_,
         subject_name_, type_, instrument_no_,fee_list_,
         description_, amount_, finish_time_,
         send_type_, contact_name_, contact_mobile_,
         address_, pay_status_, create_time_,
-        update_time_,repair_status_)
-        values (#{id,jdbcType=INTEGER}, #{transNo,jdbcType=VARCHAR}, #{organId,jdbcType=INTEGER},
+        update_time_,repair_status_,goods_json_)
+        values (#{id,jdbcType=INTEGER},#{musicGroupId}, #{transNo,jdbcType=VARCHAR}, #{organId,jdbcType=INTEGER},
         #{studentId,jdbcType=INTEGER}, #{studentName,jdbcType=VARCHAR}, #{studentSchool,jdbcType=VARCHAR},
         #{employeeId,jdbcType=INTEGER}, #{employeeName,jdbcType=VARCHAR}, #{subjectId,jdbcType=INTEGER},
         #{subjectName,jdbcType=VARCHAR}, #{type,jdbcType=INTEGER}, #{instrumentNo,jdbcType=VARCHAR},
         #{feeList,jdbcType=VARCHAR},#{description,jdbcType=VARCHAR}, #{amount,jdbcType=DECIMAL},
         #{finishTime,jdbcType=TIMESTAMP},#{sendType,jdbcType=INTEGER}, #{contactName,jdbcType=VARCHAR},
         #{contactMobile,jdbcType=VARCHAR},#{address,jdbcType=VARCHAR}, #{payStatus,jdbcType=INTEGER},
-        #{createTime,jdbcType=TIMESTAMP},#{updateTime,jdbcType=TIMESTAMP},#{repairStatus})
+        #{createTime,jdbcType=TIMESTAMP},#{updateTime,jdbcType=TIMESTAMP},#{repairStatus},#{goodsJson})
     </insert>
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.StudentRepair">
         UPDATE student_repair
         <set>
+            <if test="musicGroupId != null">
+                music_group_id_ = #{musicGroupId},
+            </if>
+            <if test="goodsJson != null">
+                goods_json_ = #{goodsJson},
+            </if>
             <if test="transNo != null">
                 trans_no_ = #{transNo},
             </if>

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

@@ -86,10 +86,17 @@
     <insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.SysUserCashAccountDetail" useGeneratedKeys="true"
             keyColumn="id" keyProperty="id">
         INSERT INTO sys_user_cash_account_detail
-        (user_id_,trans_no_,type_,trans_type_,status_,amount_,balance_,description_,comment_,create_time_,update_time_,attribute1_,channel_,platform_account_no_)
+        (user_id_,trans_no_,type_,trans_type_,status_,amount_,balance_,description_,comment_,
+        create_time_,update_time_,attribute1_,channel_,platform_account_no_)
         VALUE
         <foreach collection="sysUserCashAccountDetails" item="sysUserCashAccountDetail" separator=",">
-            (#{sysUserCashAccountDetail.userId},#{sysUserCashAccountDetail.transNo},#{sysUserCashAccountDetail.type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{sysUserCashAccountDetail.transType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{sysUserCashAccountDetail.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{sysUserCashAccountDetail.amount},#{sysUserCashAccountDetail.balance},#{sysUserCashAccountDetail.description},#{sysUserCashAccountDetail.comment},now(),now(),#{sysUserCashAccountDetail.attribute},#{sysUserCashAccountDetail.channel},#{sysUserCashAccountDetail.platformAccountNo})
+            (#{sysUserCashAccountDetail.userId},#{sysUserCashAccountDetail.transNo},
+            #{sysUserCashAccountDetail.type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            #{sysUserCashAccountDetail.transType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            #{sysUserCashAccountDetail.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            #{sysUserCashAccountDetail.amount},#{sysUserCashAccountDetail.balance},#{sysUserCashAccountDetail.description},
+            #{sysUserCashAccountDetail.comment},now(),now(),#{sysUserCashAccountDetail.attribute},#{sysUserCashAccountDetail.channel},
+            #{sysUserCashAccountDetail.platformAccountNo})
         </foreach>
     </insert>
 

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

@@ -129,4 +129,8 @@ public interface TaskRemoteService {
 	@GetMapping("task/studentServeRemind")
 	void studentServeRemind();
 
+	//经营报表
+	@GetMapping("task/operatingReport")
+	void operatingReport();
+
 }

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

@@ -160,4 +160,9 @@ public class TaskRemoteServiceFallback implements TaskRemoteService {
 	public void studentServeRemind() {
 		logger.info("本周应布置课外训练推送失败");
 	}
+
+	@Override
+	public void operatingReport() {
+		logger.info("经营报表生成失败");
+	}
 }

+ 11 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/service/BaseService.java

@@ -97,6 +97,17 @@ public interface BaseService<PK extends Serializable, T> {
 	 * @date 2020.06.23
 	 * @param columnKey: key所对应的列名
 	 * @param columnValue: value所对应的列名
+	 * @param ids: key条件
+	 * @return java.util.List<java.util.Map>
+	 */
+	<K extends List, Y, Z> Map<Y,Z> getMap(String tableName, String columnKey, String columnValue, String ids, Class<Y> keyType, Class<Z> valueType);
+
+	/**
+	 * @describe 获取columnKey-columnValue集合
+	 * @author Joburgess
+	 * @date 2020.06.23
+	 * @param columnKey: key所对应的列名
+	 * @param columnValue: value所对应的列名
 	 * @return java.util.List<java.util.Map>
 	 */
 	<K extends List, Y, Z> Map<Y,Z> getMap(String tableName, String columnKey, String columnValue,Boolean hasDelFlag, Class<Y> keyType, Class<Z> valueType);

+ 48 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/service/impl/BaseServiceImpl.java

@@ -165,6 +165,54 @@ public abstract class BaseServiceImpl<PK extends Serializable, T> implements Bas
 		return result;
 	}
 
+	@Override
+	public <K extends List, Y, Z> Map<Y,Z> getMap(String tableName, String columnKey, String columnValue, String ids, Class<Y> keyType, Class<Z> valueType){
+		if(StringUtils.isEmpty(ids)){
+			return Collections.emptyMap();
+		}
+		StringBuffer sql=new StringBuffer();
+		Map<Y,Z> result=new HashMap();
+		try {
+			SqlSession sqlSession = sqlSessionFactory.openSession();
+			Connection connection = sqlSession.getConnection();
+			sql.append("SELECT ").append(columnKey).append(",").append(columnValue).append(" FROM ").append(tableName).append(" WHERE ").append(columnKey).append(" IN (").append(ids).append(")");
+			PreparedStatement ps = connection.prepareStatement(sql.toString());
+			ResultSet resultSet = ps.executeQuery();
+			while (resultSet.next()){
+				Y key;
+				Z value;
+				if(keyType.isAssignableFrom(BigDecimal.class)){
+					key = (Y) BigDecimal.class.getDeclaredConstructor(String.class).newInstance(resultSet.getString(1));
+				}else if(keyType.isAssignableFrom(String.class)){
+					key = (Y) resultSet.getString(1);
+				}else{
+					key = (Y) keyType.getMethod("valueOf", String.class).invoke(null,resultSet.getString(1));
+				}
+				if(valueType.isAssignableFrom(BigDecimal.class)){
+					value = (Z) BigDecimal.class.getDeclaredConstructor(String.class).newInstance(resultSet.getString(2));
+				}else if(valueType.isAssignableFrom(String.class)){
+					value = (Z) resultSet.getString(2);
+				}else{
+					value = (Z) valueType.getMethod("valueOf", String.class).invoke(null,resultSet.getString(2));
+				}
+				result.put(key, value);
+			}
+			if(resultSet!=null){
+				resultSet.close();
+			}
+			if(ps!=null){
+				ps.close();
+			}
+			if(sqlSession!=null){
+				sqlSession.close();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		return result;
+	}
+
 
 	@Override
 	public <K extends List, Y, Z> Map<Y,Z> getMap(String tableName, String columnKey, String columnValue,Boolean hasDelFlag, Class<Y> keyType, Class<Z> valueType){

+ 5 - 4
mec-gateway/mec-gateway-web/src/main/resources/application.yml

@@ -100,10 +100,10 @@ zuul:
   ignored-services: eureka-server
   #重试
   retryable: false
-  #请求处理超时
-  ReadTimeout: 600000
-  #连接超时
-  ConnectTimeout: 100000
+  host: 
+    #连接超时
+    connectTimeoutMillis: 600000
+  ribbon-isolation-strategy: SEMAPHORE
   sensitiveHeaders:
 
 hystrix:
@@ -111,6 +111,7 @@ hystrix:
     default:
       execution:
         isolation:
+          strategy: SEMAPHORE
           thread:
             #发生熔断的超时时间
             timeoutInMilliseconds: 90000

+ 4 - 7
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -125,9 +125,9 @@ public class RoomServiceImpl implements RoomService {
         String userId = sysUser.getId().toString();
         Teacher teacher = teacherDao.get(Integer.parseInt(userId));
         CourseSchedule courseSchedule = courseScheduleDao.get(Long.parseLong(roomId));
-        /*if(courseSchedule.getTeachMode() == TeachModeEnum.OFFLINE){
+        if(courseSchedule.getTeachMode() == TeachModeEnum.OFFLINE){
             throw new ApiException(ErrorEnum.JOIN_ROOM_ERROR, "加入房间失败,请前往线下教室");
-        }*/
+        }
         if(teacher != null && userId.equals(courseSchedule.getActualTeacherId())){
             courseScheduleStudentPaymentDao.adjustPlayMidi(Long.parseLong(roomId),null,null);
             userName = sysUser.getRealName();
@@ -165,9 +165,6 @@ public class RoomServiceImpl implements RoomService {
                 log.error("joinRoom IM error: roomId={}, {}", roomId, resultInfo.getErrorMessage());
                 throw new ApiException(ErrorEnum.ERR_CREATE_ROOM_ERROR, resultInfo.getErrorMessage());
             }
-//            else {
-//                scheduleManager.addExpiredTask(this, roomId);
-//            }
         } else {
             display = roomList.get(0).getDisplay();
         }
@@ -280,7 +277,7 @@ public class RoomServiceImpl implements RoomService {
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.SERIALIZABLE)
     public void signIn(Long roomId) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         Integer userId = sysUser.getId();
@@ -394,7 +391,7 @@ public class RoomServiceImpl implements RoomService {
         roomMemberDao.save(roomMember);
     }
 
-    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.SERIALIZABLE)
     @Override
     public Boolean leaveRoom(String roomId) throws Exception {
         SysUser user = sysUserFeignService.queryUserInfo();

+ 32 - 6
mec-student/src/main/java/com/ym/mec/student/controller/RepairController.java

@@ -3,13 +3,18 @@ package com.ym.mec.student.controller;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.EmployeeDao;
-import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.dto.GoodsSellDto;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.entity.StudentRepair;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.biz.dal.page.RepairStudentQueryInfo;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
 import com.ym.mec.biz.service.StudentRepairService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.exception.BizException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -19,7 +24,8 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.Objects;
+import java.util.List;
+import java.util.Map;
 
 @RequestMapping("repair")
 @Api(tags = "学生维修服务")
@@ -28,9 +34,31 @@ public class RepairController extends BaseController {
 
     @Autowired
     private SysUserFeignService sysUserFeignService;
-
     @Autowired
     private StudentRepairService studentRepairService;
+    @Autowired
+    private StudentPaymentOrderService studentPaymentOrderService;
+
+    @ApiOperation("添加商品销售订单")
+    @PostMapping(value = "/addGoodsSellOrder")
+    public HttpResponseResult addGoodsSellOrder(GoodsSellDto goodsSellDto) throws Exception {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("请登录");
+        }
+        if (goodsSellDto.getIsRepeatPay() == false) {
+            List<StudentPaymentOrder> list = studentPaymentOrderService.queryByCondition(GroupType.GOODS_SELL, null, sysUser.getId(), DealStatusEnum.ING,
+                    OrderTypeEnum.RENEW);
+            if (list.size() > 0) {
+                return failed(HttpStatus.CONTINUE, "您有待支付的订单");
+            }
+        }
+        Map map = studentRepairService.addGoodsSellOrder(goodsSellDto);
+        if(map.containsKey("tradeState")){
+            return failed(HttpStatus.CREATED, "恭喜您,购买成功!");
+        }
+        return succeed(map);
+    }
 
     @ApiOperation("获取维修记录")
     @GetMapping(value = "/getStudentRepairList")
@@ -80,6 +108,4 @@ public class RepairController extends BaseController {
         }
         return succeed(studentRepairService.getStudentRepairer(sysUser.getId(),sysUser.getOrganId()));
     }
-
-
 }

+ 18 - 31
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -1,29 +1,28 @@
 package com.ym.mec.student.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.huifu.adapay.Adapay;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.biz.service.*;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.thirdparty.adapay.ConfigInit;
 import com.ym.mec.thirdparty.adapay.Payment;
+import com.ym.mec.thirdparty.yqpay.Msg;
+import com.ym.mec.thirdparty.yqpay.RsqMsg;
+import com.ym.mec.thirdparty.yqpay.YqPayFeignService;
+import com.ym.mec.thirdparty.yqpay.YqPayUtil;
 import com.ym.mec.util.date.DateUtil;
+import com.ym.mec.util.http.HttpUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
-
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.net.URLEncoder;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import javax.servlet.http.HttpServletResponse;
-
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -31,23 +30,15 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.util.DigestUtils;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.ModelAttribute;
-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 com.alibaba.fastjson.JSON;
-import com.ym.mec.biz.dal.enums.DealStatusEnum;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.entity.HttpResponseResult;
-import com.ym.mec.thirdparty.yqpay.Msg;
-import com.ym.mec.thirdparty.yqpay.RsqMsg;
-import com.ym.mec.thirdparty.yqpay.YqPayFeignService;
-import com.ym.mec.thirdparty.yqpay.YqPayUtil;
-import com.ym.mec.util.http.HttpUtil;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @RequestMapping("studentOrder")
 @Api(tags = "订单回调")
@@ -58,8 +49,6 @@ public class StudentOrderController extends BaseController {
     @Autowired
     private StudentPaymentOrderService studentPaymentOrderService;
     @Autowired
-    private StudentRegistrationService studentRegistrationService;
-    @Autowired
     private VipGroupService vipGroupService;
     @Autowired
     private MusicGroupService musicGroupService;
@@ -76,8 +65,6 @@ public class StudentOrderController extends BaseController {
     @Autowired
     private OrganizationDao organizationDao;
     @Autowired
-    private TeacherCourseStatisticsDao teacherCourseStatisticsDao;
-    @Autowired
     private CourseScheduleEvaluateDao courseScheduleEvaluateDao;
     @Autowired
     private TenantPaymentOrderService tenantPaymentOrderService;

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

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

+ 0 - 3
mec-teacher/src/main/resources/application.yml

@@ -103,6 +103,3 @@ push:
     masterSecret: d47430e2f4755ef5dc050ac5
     apns_production: false
 
-logging:
-  level:
-    com.ym.mec.auth.api.client.SysUserFeignService: DEBUG

+ 33 - 4
mec-web/src/main/java/com/ym/mec/web/controller/FinancialExpenditureController.java

@@ -1,16 +1,24 @@
 package com.ym.mec.web.controller;
 
-import com.ym.mec.biz.dal.entity.FinancialExpenditure;
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.page.FinancialExpenditureQueryInfo;
 import com.ym.mec.biz.service.FinancialExpenditureService;
 import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Arrays;
+import java.util.List;
 
 @RequestMapping("financialExpenditure")
 @Api(tags = "财务支出服务")
@@ -19,6 +27,10 @@ public class FinancialExpenditureController extends BaseController {
 
     @Autowired
     private FinancialExpenditureService financialExpenditureService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private EmployeeDao employeeDao;
 
     @ApiOperation(value = "删除财务支出")
     @PostMapping("/batchDel")
@@ -32,6 +44,23 @@ public class FinancialExpenditureController extends BaseController {
     @GetMapping("/queryPage")
     @PreAuthorize("@pcs.hasPermissions('financialExpenditure/queryPage')")
     public Object queryPage(FinancialExpenditureQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeDao.get(sysUser.getId());
+            if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+                queryInfo.setOrganId(employee.getOrganIdList());
+            }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+                return failed("用户所在分部异常");
+            }else {
+                List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+                if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
+                    return failed("非法请求");
+                }
+            }
+        }
         return succeed(financialExpenditureService.queryFinancialExpenditurePage(queryInfo));
     }
 

+ 127 - 0
mec-web/src/main/java/com/ym/mec/web/controller/OperatingReportController.java

@@ -0,0 +1,127 @@
+package com.ym.mec.web.controller;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.entity.OperatingReport;
+import com.ym.mec.biz.dal.page.OperatingReportQueryInfo;
+import com.ym.mec.biz.service.OperatingReportService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.util.date.DateUtil;
+import com.ym.mec.util.excel.POIUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+@Api(tags = "经营报表服务")
+@RequestMapping("operatingReport")
+@RestController
+public class OperatingReportController extends BaseController {
+
+    @Autowired
+    private OperatingReportService operatingReportService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private EmployeeDao employeeDao;
+
+    @ApiOperation("报表列表")
+    @GetMapping(value = "/queryPage")
+    @PreAuthorize("@pcs.hasPermissions('operatingReport/queryPage')")
+    public HttpResponseResult<PageInfo<OperatingReport>> queryPage(OperatingReportQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        if (!sysUser.getIsSuperAdmin()) {
+            Employee employee = employeeDao.get(sysUser.getId());
+            if (StringUtils.isEmpty(queryInfo.getOrganIdList())) {
+                queryInfo.setOrganIdList(employee.getOrganIdList());
+            } else if (StringUtils.isEmpty(employee.getOrganIdList())) {
+                return failed("用户所在分部异常");
+            } else {
+                List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+                if (!list.containsAll(Arrays.asList(queryInfo.getOrganIdList().split(",")))) {
+                    return failed("非法请求");
+                }
+            }
+        }
+        if (queryInfo.getMonth() != null) {
+            queryInfo.setStartTime(DateUtil.getFirstDayOfMonth(queryInfo.getMonth()));
+            queryInfo.setEndTime(DateUtil.getLastDayOfMonth(queryInfo.getMonth()));
+        }
+        return succeed(operatingReportService.queryPage(queryInfo));
+    }
+
+
+    @ApiOperation(value = "经营报表导出")
+    @GetMapping("/export")
+    @PreAuthorize("@pcs.hasPermissions('operatingReport/export')")
+    public void operatingReport(OperatingReportQueryInfo queryInfo, HttpServletResponse response) throws IOException {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new IOException("用户信息获取失败");
+        }
+        if (!sysUser.getIsSuperAdmin()) {
+            Employee employee = employeeDao.get(sysUser.getId());
+            if (StringUtils.isEmpty(queryInfo.getOrganIdList())) {
+                queryInfo.setOrganIdList(employee.getOrganIdList());
+            } else if (StringUtils.isEmpty(employee.getOrganIdList())) {
+                throw new IOException("用户所在分部异常");
+            } else {
+                List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+                if (!list.containsAll(Arrays.asList(queryInfo.getOrganIdList().split(",")))) {
+                    throw new IOException("非法请求");
+                }
+            }
+        }
+        queryInfo.setRows(65000);
+        PageInfo<OperatingReport> pageList = operatingReportService.queryPage(queryInfo);
+        if (pageList.getTotal() <= 0) {
+            response.setStatus(200);
+            response.setContentType("Content-Type: application/json;charset=UTF-8");
+            response.getOutputStream().write("{\"data\": null, \"code\": 500, \"status\": false, \"msg\": \"没有可导出的记录\"}".getBytes());
+            response.flushBuffer();
+            return;
+        }
+        OutputStream outputStream = response.getOutputStream();
+        try {
+
+            String[] header = {"分部","学校","销售收入(元)","服务收入(元)","业务退费(元)","收入合计(元)","销售成本(元)","固定支出(元)", "变动支出(元)", "分摊费用(元)", "成本费用合计(元)", "利润(元)"};
+            String[] body = {"organName", "schoolName", "sellAmount", "serviceAmount", "refundAmount", "incomeTotal", "sellCost","expensesAmount","variableCost","distributionAmount","costAmount","profit"};
+            HSSFWorkbook workbook = POIUtil.exportExcel(header, body, pageList.getRows());
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attachment;filename=cooperationOrgan-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+            outputStream.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+}

+ 82 - 0
mec-web/src/main/java/com/ym/mec/web/controller/SellOrderController.java

@@ -0,0 +1,82 @@
+package com.ym.mec.web.controller;
+
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.entity.SellOrder;
+import com.ym.mec.biz.dal.page.RepairStudentQueryInfo;
+import com.ym.mec.biz.dal.page.SellOrderQueryInfo;
+import com.ym.mec.biz.service.SellOrderService;
+import com.ym.mec.biz.service.StudentRepairService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.util.date.DateUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.snaker.engine.access.Page;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+@RequestMapping("sellOrder")
+@Api(tags = "销售列表")
+@RestController
+public class SellOrderController extends BaseController {
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private SellOrderService sellOrderService;
+    @Autowired
+    private EmployeeDao employeeDao;
+
+    @ApiOperation("销售列表")
+    @GetMapping(value = "/queryPage")
+    @PreAuthorize("@pcs.hasPermissions('sellOrder/queryPage')")
+    public HttpResponseResult<PageInfo<SellOrder>> queryPage(SellOrderQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        if (!sysUser.getIsSuperAdmin()) {
+            Employee employee = employeeDao.get(sysUser.getId());
+            if (StringUtils.isEmpty(queryInfo.getOrganIdList())) {
+                queryInfo.setOrganIdList(employee.getOrganIdList());
+            } else if (StringUtils.isEmpty(employee.getOrganIdList())) {
+                return failed("用户所在分部异常");
+            } else {
+                List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+                if (!list.containsAll(Arrays.asList(queryInfo.getOrganIdList().split(",")))) {
+                    return failed("非法请求");
+                }
+            }
+        }
+        if (queryInfo.getEndTime() != null) {
+            queryInfo.setEndTime(DateUtil.getLastTimeWithDay(queryInfo.getEndTime()));
+        }
+        return succeed(sellOrderService.queryPage(queryInfo));
+    }
+
+    @ApiOperation("更新")
+    @PostMapping(value = "/update")
+    @PreAuthorize("@pcs.hasPermissions('sellOrder/update')")
+    public HttpResponseResult<SellOrder> update(SellOrder sellOrder) {
+        SellOrder oldOrder = sellOrderService.get(sellOrder.getId());
+        sellOrder.setSellCost(sellOrder.getSellCost().multiply(new BigDecimal(oldOrder.getNum())));
+        sellOrderService.update(sellOrder);
+        return succeed(sellOrder);
+    }
+
+}

+ 32 - 5
mec-web/src/main/java/com/ym/mec/web/controller/StudentPaymentRouteOrderController.java

@@ -3,14 +3,18 @@ package com.ym.mec.web.controller;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.dao.SellOrderDao;
 import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.BasicUserDto;
+import com.ym.mec.biz.dal.dto.OutOrderInfoDto;
 import com.ym.mec.biz.dal.dto.StudentPaymentRouteOrderDto;
 import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.entity.SellOrder;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.page.SporadicOrderQueryInfo;
 import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
+import com.ym.mec.biz.service.SellOrderService;
 import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
 import com.ym.mec.biz.service.StudentPaymentOrderService;
 import com.ym.mec.biz.service.StudentPaymentRouteOrderService;
@@ -24,10 +28,7 @@ import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.math.BigDecimal;
 import java.util.Arrays;
@@ -47,6 +48,8 @@ public class StudentPaymentRouteOrderController extends BaseController {
     private EmployeeDao employeeDao;
     @Autowired
     private StudentPaymentOrderDao studentPaymentOrderDao;
+    @Autowired
+    private SellOrderDao sellOrderDao;
 
     @ApiOperation(value = "财务订单列表")
     @GetMapping("/finance")
@@ -86,11 +89,35 @@ public class StudentPaymentRouteOrderController extends BaseController {
     @ApiOperation(value = "添加订单")
     @PostMapping("/add")
     @PreAuthorize("@pcs.hasPermissions('routeOrder/add')")
-    public HttpResponseResult<StudentPaymentRouteOrderDto> add(StudentPaymentRouteOrderDto studentPaymentRouteOrderDto) {
+    public HttpResponseResult<StudentPaymentRouteOrderDto> add(@RequestBody StudentPaymentRouteOrderDto studentPaymentRouteOrderDto) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         studentPaymentRouteOrderDto.setUserId(sysUser.getId());
+        if (studentPaymentRouteOrderDto.getSchoolId() != null) {
+            studentPaymentRouteOrderDto.setMusicGroupId(studentPaymentRouteOrderDto.getSchoolId().toString());
+        }
+        studentPaymentRouteOrderDto.setActualAmount(studentPaymentRouteOrderDto.getServiceAmount().add(studentPaymentRouteOrderDto.getGoodsAmount()));
         return succeed(studentPaymentRouteOrderService.addOutOrder(studentPaymentRouteOrderDto));
     }
 
+    @ApiOperation(value = "获取订单信息")
+    @GetMapping("/getOrderInfo")
+    @PreAuthorize("@pcs.hasPermissions('routeOrder/getOrderInfo')")
+    public HttpResponseResult<OutOrderInfoDto> getOrderInfo(Long orderId) {
+        OutOrderInfoDto outOrderInfoDto = new OutOrderInfoDto();
+        outOrderInfoDto.setStudentPaymentOrder(studentPaymentOrderDao.get(orderId));
+        List<SellOrder> sellOrders = sellOrderDao.getOrderSellOrder(orderId);
+        BigDecimal goodsAmount = sellOrders.stream().map(SellOrder::getActualAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal serviceAmount = outOrderInfoDto.getStudentPaymentOrder().getActualAmount().subtract(goodsAmount);
+        outOrderInfoDto.setServiceAmount(serviceAmount);
+        outOrderInfoDto.setGoodsAmount(goodsAmount);
+        outOrderInfoDto.setSellOrders(sellOrders);
+        return succeed(outOrderInfoDto);
+    }
 
+    @ApiOperation(value = "删除订单")
+    @PostMapping("/delete")
+    @PreAuthorize("@pcs.hasPermissions('routeOrder/delete')")
+    public HttpResponseResult<Boolean> delete(Long orderId) {
+        return succeed(studentPaymentRouteOrderService.deleteRouteOrder(orderId));
+    }
 }

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

@@ -74,6 +74,9 @@ public class TaskController extends BaseController {
 	@Autowired
 	private StudentServeService studentServeService;
 
+	@Autowired
+	private OperatingReportService operatingReportService;
+
 	@GetMapping(value = "/refreshUserMusicGroupPaymentStatusTask")
 	// 刷新学员乐团付费状态
 	public void refreshUserMusicGroupPaymentStatusTask(){
@@ -260,4 +263,10 @@ public class TaskController extends BaseController {
 	public void studentServeRemind(){
 		extracurricularExercisesService.studentServeRemind();
 	}
+
+	//经营报表
+	@GetMapping("/operatingReport")
+	public void operatingReport(){
+		operatingReportService.statistics();
+	}
 }

+ 21 - 5
mec-web/src/main/java/com/ym/mec/web/controller/education/EduRepairController.java

@@ -5,9 +5,14 @@ import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
 import com.ym.mec.biz.dal.dto.BasicUserDto;
+import com.ym.mec.biz.dal.dto.GoodsSellDto;
 import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.entity.StudentRepair;
+import com.ym.mec.biz.dal.page.GoodsCategoryQueryInfo;
+import com.ym.mec.biz.dal.page.GoodsQueryInfo;
 import com.ym.mec.biz.dal.page.RepairStudentQueryInfo;
+import com.ym.mec.biz.service.GoodsCategoryService;
+import com.ym.mec.biz.service.GoodsService;
 import com.ym.mec.biz.service.StudentRepairService;
 import com.ym.mec.biz.service.SubjectService;
 import com.ym.mec.common.controller.BaseController;
@@ -16,19 +21,14 @@ import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.util.date.DateUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.apache.commons.lang3.StringUtils;
-import org.snaker.engine.access.Page;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.Arrays;
 import java.util.Date;
-import java.util.List;
 import java.util.Objects;
 
 @RequestMapping("eduRepair")
@@ -45,6 +45,10 @@ public class EduRepairController extends BaseController {
     private StudentRepairService studentRepairService;
     @Autowired
     private SubjectService subjectService;
+    @Autowired
+    private GoodsService goodsService;
+    @Autowired
+    private GoodsCategoryService goodsCategoryService;
 
     @ApiOperation("获取学生列表")
     @GetMapping(value = "/getStudents")
@@ -142,4 +146,16 @@ public class EduRepairController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation(value = "分页查询商品(教材、辅件)列表")
+    @GetMapping("/queryGoodsPage")
+    public Object queryPage(GoodsQueryInfo queryInfo){
+        return succeed(goodsService.queryPage(queryInfo));
+    }
+
+    @ApiOperation(value = "分页查询商品分类列表")
+    @GetMapping("/queryGoodsCategoryPage")
+    public Object queryGoodsCategoryPage(GoodsCategoryQueryInfo queryInfo) {
+        return succeed(goodsCategoryService.queryPage(queryInfo));
+    }
+
 }

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

@@ -13,13 +13,14 @@
 商品采购价2(元) = agreeCostPrice
 
 [财务支出导入模板]
-批次号 = batchNo
 财务流程编号 = financialProcessNo
 钉钉流程编号 = dingtalkProcessNo
-分部 = organName
-合作单位 = cooperationOrganName
-申请人(手机号) = phone
-费用 = amount
-费用明细 = itemDetail
-支付时间 = paymentTime
+费用归属分部 = organName
+费用归属学校 = cooperationOrganName
+申请人 = applyUser
+费用类型 = type
+费用项目 = feeProject
+付款金额 = amount
+备注 = itemDetail
+付款时间 = paymentTime
 事由 = cause

BIN
mec-web/src/main/resources/excelTemplate/财务支出导入模板.xls