Explorar o código

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

yonge %!s(int64=2) %!d(string=hai) anos
pai
achega
82660d28ad
Modificáronse 22 ficheiros con 851 adicións e 258 borrados
  1. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SellOrderDao.java
  2. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentBasicInfoDao.java
  3. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java
  4. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentRouteOrderDao.java
  5. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentStatisticsDao.java
  6. 143 239
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentPaymentOrderExportDto.java
  7. 195 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentPaymentOrderMallExportDto.java
  8. 103 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentPaymentOrderRouteDto.java
  9. 12 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentStatistics.java
  10. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportEnum.java
  11. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportTypeEnum.java
  12. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ExportService.java
  13. 1 4
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java
  14. 196 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
  15. 13 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentStatisticsServiceImpl.java
  16. 12 0
      mec-biz/src/main/resources/config/mybatis/SellOrderMapper.xml
  17. 3 0
      mec-biz/src/main/resources/config/mybatis/StudentBasicInfoMapper.xml
  18. 103 0
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  19. 24 0
      mec-biz/src/main/resources/config/mybatis/StudentPaymentRouteOrderMapper.xml
  20. 5 0
      mec-biz/src/main/resources/config/mybatis/StudentStatisticsMapper.xml
  21. 8 0
      mec-web/src/main/resources/exportColumnMapper.ini
  22. 2 7
      mec-websocket/src/main/java/com/ym/mec/web/support/socket/ServerRunner.java

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

@@ -230,4 +230,15 @@ public interface SellOrderDao extends BaseDAO<Integer, SellOrder> {
     List<Map<Long, String>> sumOutOrderAmount(@Param("outOrderList") List<Long> outOrderList);
 
     List<SellOrder> querySellOrderByOrderIds(@Param("orderIds") Set<Long> paymentOrderIds);
+
+    /**
+    * @description: 获取商城商品分类
+     * @param productIdList
+    * @return java.util.Map<java.lang.Integer,java.lang.String>
+    * @author zx
+    * @date 2022/11/7 11:15
+    */
+    List<Map<Long, String>> getMallProductMap(@Param("productIdList") Set<String> productIdList, @Param("database") String database);
+
+    List<String> getMallProductCategory(@Param("database") String database);
 }

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

@@ -9,4 +9,6 @@ public interface StudentBasicInfoDao extends BaseDAO<Integer, StudentBasicInfo>
     Integer getMaxId();
 
     void updateSubjectTeacher();
+
+    void updateStudentBasicInfo();
 }

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

@@ -183,6 +183,8 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
      */
     List<StudentPaymentOrderExportDto> ExportQueryPage(Map<String, Object> params);
 
+    List<StudentPaymentOrderMallExportDto> exportMallQueryPage(Map<String, Object> params);
+
     /**
      * 获取零星收费订单列表
      *

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

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.dto.FeeFlagNumDto;
 import com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto;
+import com.ym.mec.biz.dal.dto.StudentPaymentOrderMallExportDto;
 import com.ym.mec.biz.dal.dto.StudentPaymentRouteOrderDto;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.entity.StudentPaymentRouteOrder;
@@ -49,6 +50,7 @@ public interface StudentPaymentRouteOrderDao extends BaseDAO<Long, StudentPaymen
     List<StudentPaymentOrderExportDto> ExportQueryPage(Map<String, Object> params);
 
     List<StudentPaymentOrderExportDto> ExportQueryPage1(Map<String, Object> params);
+    List<StudentPaymentOrderMallExportDto> exportMallQueryPage(Map<String, Object> params);
 
     /**
      * 根据订单号删除

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentStatisticsDao.java

@@ -13,6 +13,9 @@ import java.util.Map;
 public interface StudentStatisticsDao extends BaseDAO<Integer, StudentStatistics> {
 
     //更新乐团主管、指导老师
+    void updateCooperationOrgan();
+
+    //更新乐团主管、指导老师
     void updateTeacherAndEdu();
 
     //更新总课时数、已完成、剩余课时数、最近30天课耗

+ 143 - 239
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentPaymentOrderExportDto.java

@@ -1,7 +1,6 @@
 package com.ym.mec.biz.dal.dto;
 
 import com.ym.mec.biz.dal.entity.Goods;
-import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
 import com.ym.mec.common.enums.BaseEnum;
 import io.swagger.annotations.ApiModelProperty;
@@ -9,7 +8,7 @@ import io.swagger.annotations.ApiModelProperty;
 import java.math.BigDecimal;
 import java.util.List;
 
-public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
+public class StudentPaymentOrderExportDto extends StudentPaymentOrderRouteDto {
     @ApiModelProperty(value = "分部",required = true)
     private String organName;
 
@@ -39,14 +38,6 @@ public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
     @ApiModelProperty(value = "维修费用",required = true)
     private BigDecimal repairFee = BigDecimal.ZERO;
 
-    //汇付手续费
-    @ApiModelProperty(value = "汇付手续费",required = true)
-    private BigDecimal transferFee = BigDecimal.ZERO;
-    
-    //平台手续费
-    @ApiModelProperty(value = "平台手续费",required = true)
-    private BigDecimal platformFee = BigDecimal.ZERO;
-
     //乐团家长采买课程费用
     @ApiModelProperty(value = "乐团课程费用",required = true)
     private BigDecimal musicGroupCourseFee = BigDecimal.ZERO;
@@ -124,29 +115,6 @@ public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
     @ApiModelProperty(value = "商品列表",required = true)
     private List<Goods> goodsList;
 
-    //收款账户
-    @ApiModelProperty(value = "收款账户",required = true)
-    private String routeMerNo;
-
-    //分润金额
-    @ApiModelProperty(value = "分润金额",required = true)
-    private BigDecimal routeAmount;
-
-    //分润余额
-    @ApiModelProperty(value = "分润余额",required = true)
-    private BigDecimal routeBalance;
-
-    //分润中的销售费用
-    @ApiModelProperty(value = "分润中的销售费用",required = true)
-    private BigDecimal saleAmount = BigDecimal.ZERO;
-
-    //分润中的服务费用
-    @ApiModelProperty(value = "分润中的服务费用",required = true)
-    private BigDecimal serviceAmount = BigDecimal.ZERO;
-
-    @ApiModelProperty(value = "服务费",required = true)
-    private BigDecimal serviceFee = BigDecimal.ZERO;
-
     @ApiModelProperty(value = "分部",required = true)
     private String feeFlag;
 
@@ -228,76 +196,20 @@ public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
     @ApiModelProperty(value = "教学点",required = true)
     private String schoolName;
 
-    public String getUserOrganName() {
-        return userOrganName;
-    }
-
-    public void setUserOrganName(String userOrganName) {
-        this.userOrganName = userOrganName;
-    }
-
-    public BigDecimal getCourseSchoolBuyAmount() {
-        return courseSchoolBuyAmount;
-    }
-
-    public void setCourseSchoolBuyAmount(BigDecimal courseSchoolBuyAmount) {
-        this.courseSchoolBuyAmount = courseSchoolBuyAmount;
-    }
-
-    public BigDecimal getRetailGoodsFee() {
-        return retailGoodsFee;
-    }
-
-    public void setRetailGoodsFee(BigDecimal retailGoodsFee) {
-        this.retailGoodsFee = retailGoodsFee;
-    }
-
-    public BigDecimal getLargeMusicalFee() {
-        return largeMusicalFee;
-    }
-
-    public void setLargeMusicalFee(BigDecimal largeMusicalFee) {
-        this.largeMusicalFee = largeMusicalFee;
-    }
-
-    public String getSchoolName() {
-        return schoolName;
-    }
-
-    public void setSchoolName(String schoolName) {
-        this.schoolName = schoolName;
-    }
-
-    public String getFeeMusicGroupName() {
-        return feeMusicGroupName;
-    }
-
-    public void setFeeMusicGroupName(String feeMusicGroupName) {
-        this.feeMusicGroupName = feeMusicGroupName;
-    }
-
-    public String getFeeMusicGroupId() {
-        return feeMusicGroupId;
-    }
-
-    public void setFeeMusicGroupId(String feeMusicGroupId) {
-        this.feeMusicGroupId = feeMusicGroupId;
-    }
-
-    public String getTypeDesc() {
-        return typeDesc;
+    public String getOrganName() {
+        return organName;
     }
 
-    public void setTypeDesc(String typeDesc) {
-        this.typeDesc = typeDesc;
+    public void setOrganName(String organName) {
+        this.organName = organName;
     }
 
-    public BigDecimal getOrderAmount() {
-        return orderAmount;
+    public String getUserOrganName() {
+        return userOrganName;
     }
 
-    public void setOrderAmount(BigDecimal orderAmount) {
-        this.orderAmount = orderAmount;
+    public void setUserOrganName(String userOrganName) {
+        this.userOrganName = userOrganName;
     }
 
     public BigDecimal getSporadicAmount() {
@@ -308,54 +220,6 @@ public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
         this.sporadicAmount = sporadicAmount;
     }
 
-    public BigDecimal getMusicalFee() {
-        return musicalFee;
-    }
-
-    public void setMusicalFee(BigDecimal musicalFee) {
-        this.musicalFee = musicalFee;
-    }
-
-    public BigDecimal getTeachingFee() {
-        return teachingFee;
-    }
-
-    public void setTeachingFee(BigDecimal teachingFee) {
-        this.teachingFee = teachingFee;
-    }
-
-    public BigDecimal getTransferFee() {
-        return transferFee;
-    }
-
-    public void setTransferFee(BigDecimal transferFee) {
-        this.transferFee = transferFee;
-    }
-
-    public BigDecimal getPlatformFee() {
-		return platformFee;
-	}
-
-	public void setPlatformFee(BigDecimal platformFee) {
-		this.platformFee = platformFee;
-	}
-
-	public String getOrganName() {
-        return organName;
-    }
-
-    public void setOrganName(String organName) {
-        this.organName = organName;
-    }
-
-    public String getSubjectName() {
-        return subjectName;
-    }
-
-    public void setSubjectName(String subjectName) {
-        this.subjectName = subjectName;
-    }
-
     public String getSporadicType() {
         return sporadicType;
     }
@@ -364,68 +228,28 @@ public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
         this.sporadicType = sporadicType;
     }
 
-    public BigDecimal getLeaseFee() {
-        return leaseFee;
-    }
-
-    public void setLeaseFee(BigDecimal leaseFee) {
-        this.leaseFee = leaseFee;
-    }
-
-    public List<StudentPaymentOrderDetail> getOrderDetailList() {
-        return orderDetailList;
-    }
-
-    public void setOrderDetailList(List<StudentPaymentOrderDetail> orderDetailList) {
-        this.orderDetailList = orderDetailList;
-    }
-
-    public Integer getChargeType() {
-        return chargeType;
-    }
-
-    public void setChargeType(Integer chargeType) {
-        this.chargeType = chargeType;
-    }
-
-    public List<Goods> getGoodsList() {
-        return goodsList;
-    }
-
-    public void setGoodsList(List<Goods> goodsList) {
-        this.goodsList = goodsList;
-    }
-
-    public String getCooperationOrganName() {
-        return cooperationOrganName;
-    }
-
-    public void setCooperationOrganName(String cooperationOrganName) {
-        this.cooperationOrganName = cooperationOrganName;
-    }
-
-    public String getRouteMerNo() {
-        return routeMerNo;
+    public BigDecimal getMusicalFee() {
+        return musicalFee;
     }
 
-    public void setRouteMerNo(String routeMerNo) {
-        this.routeMerNo = routeMerNo;
+    public void setMusicalFee(BigDecimal musicalFee) {
+        this.musicalFee = musicalFee;
     }
 
-    public BigDecimal getRouteAmount() {
-        return routeAmount;
+    public BigDecimal getLeaseFee() {
+        return leaseFee;
     }
 
-    public void setRouteAmount(BigDecimal routeAmount) {
-        this.routeAmount = routeAmount;
+    public void setLeaseFee(BigDecimal leaseFee) {
+        this.leaseFee = leaseFee;
     }
 
-    public BigDecimal getRouteBalance() {
-        return routeBalance;
+    public BigDecimal getTeachingFee() {
+        return teachingFee;
     }
 
-    public void setRouteBalance(BigDecimal routeBalance) {
-        this.routeBalance = routeBalance;
+    public void setTeachingFee(BigDecimal teachingFee) {
+        this.teachingFee = teachingFee;
     }
 
     public BigDecimal getRepairFee() {
@@ -444,6 +268,14 @@ public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
         this.musicGroupCourseFee = musicGroupCourseFee;
     }
 
+    public BigDecimal getCourseSchoolBuyAmount() {
+        return courseSchoolBuyAmount;
+    }
+
+    public void setCourseSchoolBuyAmount(BigDecimal courseSchoolBuyAmount) {
+        this.courseSchoolBuyAmount = courseSchoolBuyAmount;
+    }
+
     public BigDecimal getHighCourseFee() {
         return highCourseFee;
     }
@@ -492,44 +324,28 @@ public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
         this.otherFee = otherFee;
     }
 
-    public String getFeeFlag() {
-        return feeFlag;
-    }
-
-    public void setFeeFlag(String feeFlag) {
-        this.feeFlag = feeFlag;
-    }
-
-    public BigDecimal getSaleAmount() {
-        return saleAmount;
+    public BigDecimal getMaintenanceFee() {
+        return maintenanceFee;
     }
 
-    public void setSaleAmount(BigDecimal saleAmount) {
-        this.saleAmount = saleAmount;
+    public void setMaintenanceFee(BigDecimal maintenanceFee) {
+        this.maintenanceFee = maintenanceFee;
     }
 
-    public BigDecimal getServiceAmount() {
-        return serviceAmount;
+    public BigDecimal getRetailGoodsFee() {
+        return retailGoodsFee;
     }
 
-    public void setServiceAmount(BigDecimal serviceAmount) {
-        this.serviceAmount = serviceAmount;
+    public void setRetailGoodsFee(BigDecimal retailGoodsFee) {
+        this.retailGoodsFee = retailGoodsFee;
     }
 
-    public BigDecimal getServiceFee() {
-		return serviceFee;
-	}
-
-	public void setServiceFee(BigDecimal serviceFee) {
-		this.serviceFee = serviceFee;
-	}
-
-	public BigDecimal getMaintenanceFee() {
-        return maintenanceFee;
+    public BigDecimal getLargeMusicalFee() {
+        return largeMusicalFee;
     }
 
-    public void setMaintenanceFee(BigDecimal maintenanceFee) {
-        this.maintenanceFee = maintenanceFee;
+    public void setLargeMusicalFee(BigDecimal largeMusicalFee) {
+        this.largeMusicalFee = largeMusicalFee;
     }
 
     public BigDecimal getMaintenanceProductFee() {
@@ -540,14 +356,6 @@ public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
         this.maintenanceProductFee = maintenanceProductFee;
     }
 
-    public String getEduTeacher() {
-        return eduTeacher;
-    }
-
-    public void setEduTeacher(String eduTeacher) {
-        this.eduTeacher = eduTeacher;
-    }
-
     public BigDecimal getCloudTeacherFee() {
         return cloudTeacherFee;
     }
@@ -572,6 +380,62 @@ public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
         this.rechargeFee = rechargeFee;
     }
 
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public String getCooperationOrganName() {
+        return cooperationOrganName;
+    }
+
+    public void setCooperationOrganName(String cooperationOrganName) {
+        this.cooperationOrganName = cooperationOrganName;
+    }
+
+    public String getEduTeacher() {
+        return eduTeacher;
+    }
+
+    public void setEduTeacher(String eduTeacher) {
+        this.eduTeacher = eduTeacher;
+    }
+
+    public Integer getChargeType() {
+        return chargeType;
+    }
+
+    public void setChargeType(Integer chargeType) {
+        this.chargeType = chargeType;
+    }
+
+    public List<StudentPaymentOrderDetail> getOrderDetailList() {
+        return orderDetailList;
+    }
+
+    public void setOrderDetailList(List<StudentPaymentOrderDetail> orderDetailList) {
+        this.orderDetailList = orderDetailList;
+    }
+
+    public List<Goods> getGoodsList() {
+        return goodsList;
+    }
+
+    public void setGoodsList(List<Goods> goodsList) {
+        this.goodsList = goodsList;
+    }
+
+    public String getFeeFlag() {
+        return feeFlag;
+    }
+
+    public void setFeeFlag(String feeFlag) {
+        this.feeFlag = feeFlag;
+    }
+
     public Integer getPayingStatus() {
         return payingStatus;
     }
@@ -580,11 +444,51 @@ public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
         this.payingStatus = payingStatus;
     }
 
-	public BigDecimal getTranslatedIncome() {
-		return translatedIncome;
-	}
+    public BigDecimal getOrderAmount() {
+        return orderAmount;
+    }
+
+    public void setOrderAmount(BigDecimal orderAmount) {
+        this.orderAmount = orderAmount;
+    }
+
+    public BigDecimal getTranslatedIncome() {
+        return translatedIncome;
+    }
+
+    public void setTranslatedIncome(BigDecimal translatedIncome) {
+        this.translatedIncome = translatedIncome;
+    }
+
+    public String getTypeDesc() {
+        return typeDesc;
+    }
+
+    public void setTypeDesc(String typeDesc) {
+        this.typeDesc = typeDesc;
+    }
+
+    public String getFeeMusicGroupId() {
+        return feeMusicGroupId;
+    }
 
-	public void setTranslatedIncome(BigDecimal translatedIncome) {
-		this.translatedIncome = translatedIncome;
-	}
+    public void setFeeMusicGroupId(String feeMusicGroupId) {
+        this.feeMusicGroupId = feeMusicGroupId;
+    }
+
+    public String getFeeMusicGroupName() {
+        return feeMusicGroupName;
+    }
+
+    public void setFeeMusicGroupName(String feeMusicGroupName) {
+        this.feeMusicGroupName = feeMusicGroupName;
+    }
+
+    public String getSchoolName() {
+        return schoolName;
+    }
+
+    public void setSchoolName(String schoolName) {
+        this.schoolName = schoolName;
+    }
 }

+ 195 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentPaymentOrderMallExportDto.java

@@ -0,0 +1,195 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.Map;
+
+public class StudentPaymentOrderMallExportDto extends StudentPaymentOrderRouteDto {
+    @ApiModelProperty(value = "分部",required = true)
+    private String organName;
+
+    @ApiModelProperty(value = "业务分部",required = true)
+    private String userOrganName;
+
+    @ApiModelProperty(value = "支付状态",required = true)
+    private Integer payingStatus;
+
+    @ApiModelProperty(value = "订单金额",required = true)
+    private BigDecimal orderAmount = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "购买商品名称列表",required = true)
+    private String goodsNames;
+
+    @ApiModelProperty(value = "购买商品列表",required = true)
+    private String goodsJson;
+
+    @ApiModelProperty(value = "购买的商品汇总金额",required = true)
+    private Map<String, BigDecimal> categoryAmount;
+
+    @ApiModelProperty(value = "商品分类1",required = true)
+    private BigDecimal category1 = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "商品分类2",required = true)
+    private BigDecimal category2 = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "商品分类3",required = true)
+    private BigDecimal category3 = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "商品分类4",required = true)
+    private BigDecimal category4 = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "商品分类5",required = true)
+    private BigDecimal category5 = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "商品分类6",required = true)
+    private BigDecimal category6 = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "商品分类7",required = true)
+    private BigDecimal category7 = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "商品分类8",required = true)
+    private BigDecimal category8 = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "商品分类9",required = true)
+    private BigDecimal category9 = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "商品分类10",required = true)
+    private BigDecimal category10 = BigDecimal.ZERO;
+
+    public Map<String, BigDecimal> getCategoryAmount() {
+        return categoryAmount;
+    }
+
+    public void setCategoryAmount(Map<String, BigDecimal> categoryAmount) {
+        this.categoryAmount = categoryAmount;
+    }
+
+    public BigDecimal getCategory1() {
+        return category1;
+    }
+
+    public void setCategory1(BigDecimal category1) {
+        this.category1 = category1;
+    }
+
+    public BigDecimal getCategory2() {
+        return category2;
+    }
+
+    public void setCategory2(BigDecimal category2) {
+        this.category2 = category2;
+    }
+
+    public BigDecimal getCategory3() {
+        return category3;
+    }
+
+    public void setCategory3(BigDecimal category3) {
+        this.category3 = category3;
+    }
+
+    public BigDecimal getCategory4() {
+        return category4;
+    }
+
+    public void setCategory4(BigDecimal category4) {
+        this.category4 = category4;
+    }
+
+    public BigDecimal getCategory5() {
+        return category5;
+    }
+
+    public void setCategory5(BigDecimal category5) {
+        this.category5 = category5;
+    }
+
+    public BigDecimal getCategory6() {
+        return category6;
+    }
+
+    public void setCategory6(BigDecimal category6) {
+        this.category6 = category6;
+    }
+
+    public BigDecimal getCategory7() {
+        return category7;
+    }
+
+    public void setCategory7(BigDecimal category7) {
+        this.category7 = category7;
+    }
+
+    public BigDecimal getCategory8() {
+        return category8;
+    }
+
+    public void setCategory8(BigDecimal category8) {
+        this.category8 = category8;
+    }
+
+    public BigDecimal getCategory9() {
+        return category9;
+    }
+
+    public void setCategory9(BigDecimal category9) {
+        this.category9 = category9;
+    }
+
+    public BigDecimal getCategory10() {
+        return category10;
+    }
+
+    public void setCategory10(BigDecimal category10) {
+        this.category10 = category10;
+    }
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
+    public String getUserOrganName() {
+        return userOrganName;
+    }
+
+    public void setUserOrganName(String userOrganName) {
+        this.userOrganName = userOrganName;
+    }
+
+    public Integer getPayingStatus() {
+        return payingStatus;
+    }
+
+    public void setPayingStatus(Integer payingStatus) {
+        this.payingStatus = payingStatus;
+    }
+
+    public BigDecimal getOrderAmount() {
+        return orderAmount;
+    }
+
+    public void setOrderAmount(BigDecimal orderAmount) {
+        this.orderAmount = orderAmount;
+    }
+
+    public String getGoodsNames() {
+        return goodsNames;
+    }
+
+    public void setGoodsNames(String goodsNames) {
+        this.goodsNames = goodsNames;
+    }
+
+    public String getGoodsJson() {
+        return goodsJson;
+    }
+
+    public void setGoodsJson(String goodsJson) {
+        this.goodsJson = goodsJson;
+    }
+}

+ 103 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentPaymentOrderRouteDto.java

@@ -0,0 +1,103 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+
+public class StudentPaymentOrderRouteDto extends StudentPaymentOrder {
+    //汇付手续费
+    @ApiModelProperty(value = "汇付手续费",required = true)
+    private BigDecimal transferFee = BigDecimal.ZERO;
+
+    //平台手续费
+    @ApiModelProperty(value = "平台手续费",required = true)
+    private BigDecimal platformFee = BigDecimal.ZERO;
+
+    //收款账户
+    @ApiModelProperty(value = "收款账户",required = true)
+    private String routeMerNo;
+
+    //分润金额
+    @ApiModelProperty(value = "分润金额",required = true)
+    private BigDecimal routeAmount;
+
+    //分润余额
+    @ApiModelProperty(value = "分润余额",required = true)
+    private BigDecimal routeBalance;
+
+    //分润中的销售费用
+    @ApiModelProperty(value = "分润中的销售费用",required = true)
+    private BigDecimal saleAmount = BigDecimal.ZERO;
+
+    //分润中的服务费用
+    @ApiModelProperty(value = "分润中的服务费用",required = true)
+    private BigDecimal serviceAmount = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "服务费",required = true)
+    private BigDecimal serviceFee = BigDecimal.ZERO;
+
+    public BigDecimal getTransferFee() {
+        return transferFee;
+    }
+
+    public void setTransferFee(BigDecimal transferFee) {
+        this.transferFee = transferFee;
+    }
+
+    public BigDecimal getPlatformFee() {
+        return platformFee;
+    }
+
+    public void setPlatformFee(BigDecimal platformFee) {
+        this.platformFee = platformFee;
+    }
+
+    public String getRouteMerNo() {
+        return routeMerNo;
+    }
+
+    public void setRouteMerNo(String routeMerNo) {
+        this.routeMerNo = routeMerNo;
+    }
+
+    public BigDecimal getRouteAmount() {
+        return routeAmount;
+    }
+
+    public void setRouteAmount(BigDecimal routeAmount) {
+        this.routeAmount = routeAmount;
+    }
+
+    public BigDecimal getRouteBalance() {
+        return routeBalance;
+    }
+
+    public void setRouteBalance(BigDecimal routeBalance) {
+        this.routeBalance = routeBalance;
+    }
+
+    public BigDecimal getSaleAmount() {
+        return saleAmount;
+    }
+
+    public void setSaleAmount(BigDecimal saleAmount) {
+        this.saleAmount = saleAmount;
+    }
+
+    public BigDecimal getServiceAmount() {
+        return serviceAmount;
+    }
+
+    public void setServiceAmount(BigDecimal serviceAmount) {
+        this.serviceAmount = serviceAmount;
+    }
+
+    public BigDecimal getServiceFee() {
+        return serviceFee;
+    }
+
+    public void setServiceFee(BigDecimal serviceFee) {
+        this.serviceFee = serviceFee;
+    }
+}

+ 12 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentStatistics.java

@@ -38,14 +38,16 @@ public class StudentStatistics {
 	/** 已完成课时(已结束课时数) */
 	private Integer overCourseNum;
 
-	@ApiModelProperty(value = "剩余课时",required = false)
-	/** 剩余课时(未开始课时数) */
+	@ApiModelProperty(value = "未开始课时数",required = false)
 	private Integer subCourseNum;
 
 	@ApiModelProperty(value = "未排课时",required = false)
 	/** 未排课时(未排课时总数) */
 	private Integer noScheduleNum;
 
+	@ApiModelProperty(value = "未开始+未排课资格",required = false)
+	private Integer subTotalCourse;
+
 	@ApiModelProperty(value = "第一次课时间",required = false)
 	/** 第一次课时间 */
 	private String firstCourseTime;
@@ -103,6 +105,14 @@ public class StudentStatistics {
 	@ApiModelProperty(value = "课程组类型(VIP,THEORY,PRACTICE)",required = false)
 	private String groupType;
 
+	public Integer getSubTotalCourse() {
+		return subTotalCourse;
+	}
+
+	public void setSubTotalCourse(Integer subTotalCourse) {
+		this.subTotalCourse = subTotalCourse;
+	}
+
 	public BigDecimal getPreCourseFee() {
 		return preCourseFee;
 	}

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

@@ -31,6 +31,7 @@ public enum ExportEnum implements BaseEnum<String, ExportEnum> {
     MUSICAL_LIST_DETAIL_EXPORT("MUSICAL_LIST_DETAIL_EXPORT", "导出学员采购清单明细"),
     QUERY_STUDENT_APPLY_DETAIL_EXPORT("QUERY_STUDENT_APPLY_DETAIL_EXPORT", "学生详情列表导出"),
     COURSE_SCHEDULE_TEACHER_SALARY("COURSE_SCHEDULE_TEACHER_SALARY", "分页导出教师薪酬列表"),
+    MALL_ORDER_LIST("ORDER_LIST", "商城订单列表导出"),
     ORDER_LIST1("ORDER_LIST1", "订单列表导出1"),
     ORDER_LIST2("ORDER_LIST2", "订单列表导出2"),
     ORDER_LIST_SUM("ORDER_LIST_SUM", "订单列表汇总导出"),
@@ -46,6 +47,7 @@ public enum ExportEnum implements BaseEnum<String, ExportEnum> {
     VIP_COURSE_REVIEWS("VIP_COURSE_REVIEWS", "VIP评论列表导出"),
     DEGREE_REGISTRATION("DEGREE_REGISTRATION", "考级报名导出"),
     COOPERATION_ORGAN("COOPERATION_ORGAN", "合作单位导出"),
+    MALL_ROUTE_ORDER_LIST("MALL_ROUTE_ORDER_LIST", "商城财务管理导出"),
     ROUTE_ORDER_LIST1("ROUTE_ORDER_LIST1", "财务管理导出1"),
     ROUTE_ORDER_LIST2("ROUTE_ORDER_LIST2", "财务管理导出2"),
     TEACHER_DEFAULT_SALARY("TEACHER_DEFAULT_SALARY", "老师默认课酬导出"),

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

@@ -15,7 +15,9 @@ public enum ExportTypeEnum implements BaseEnum<Integer, ExportTypeEnum> {
 	MUSIC_GROUP_COURSE_LIST(9, "乐团课表详情导出"),
 	MUSIC_GROUP_DATA_EXPORT(10, "乐团数据导出"),
 	EXPORT_STUDENT_SUBCOURSE(11, "活动资格导出"),
-	EXPORT_TRAINING_STATISTICS(12, "训练统计导出");
+	EXPORT_TRAINING_STATISTICS(12, "训练统计导出"),
+	MALL_ORDER(13, "商城订单列表"),
+	MALL_ROUTE_ORDER(14, "商城财务管理");
 	;
 
 	private Integer code;

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

@@ -256,6 +256,7 @@ public interface ExportService {
 
     //财务管理导出
     HttpResponseResult routeOrderList(Map<String, Object> info);
+    HttpResponseResult routeMallOrderList(Map<String, Object> info);
 
     //学员小课记录导出
     HttpResponseResult exportStudentVipPractice(Map<String, Object> info);
@@ -275,17 +276,22 @@ public interface ExportService {
     //订单列表导出
     HttpResponseResult orderList(Map<String, Object> info);
 
+    HttpResponseResult mallOrderList(Map<String, Object> info);
+
     //订单列表汇总导出
     HttpResponseResult orderListSum(Map<String, Object> info);
 
     //保存下载记录
     ManagerDownload saveManagerDownload(ExportTypeEnum exportTypeEnum, Integer userId);
 
+    void mallOrderList(Map<String, Object> params, ManagerDownload managerDownload);
+
     void orderList(Map<String, Object> params, ManagerDownload managerDownload);
 
     void orderListSum(Map<String, Object> params, ManagerDownload managerDownload);
 
     void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload);
+    void mallRouteOrderList(Map<String, Object> params, ManagerDownload managerDownload);
 
     void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, ManagerDownload managerDownload);
 

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

@@ -1,10 +1,7 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
-import com.ym.mec.biz.dal.dto.PageInfoOrder;
-import com.ym.mec.biz.dal.dto.SporadicChargeInfoDto;
-import com.ym.mec.biz.dal.dto.StudentPaymentOrderDto;
-import com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;

+ 196 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -38,6 +38,7 @@ import org.springframework.util.CollectionUtils;
 import javax.annotation.PostConstruct;
 import javax.servlet.http.HttpServletResponse;
 import java.io.*;
+import java.lang.reflect.Method;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
@@ -354,8 +355,10 @@ public class ExportServiceImpl implements ExportService {
         //导出到报表中心
 //        exportManageFuncMap.put(ExportEnum.SUPER_FIND_COURSE_SCHEDULES, (info,headColumns) -> this.superFindCourseSchedules(info,headColumns));
         //针对不同的用户有不同的模板
+        exportManageFuncMap.put(ExportEnum.MALL_ROUTE_ORDER_LIST, (info) -> routeMallOrderList(info));
         exportManageFuncMap.put(ExportEnum.ROUTE_ORDER_LIST1, (info) -> routeOrderList(info));
         exportManageFuncMap.put(ExportEnum.ROUTE_ORDER_LIST2, (info) -> routeOrderList(info));
+        exportManageFuncMap.put(ExportEnum.MALL_ORDER_LIST, (info) -> mallOrderList(info));
         exportManageFuncMap.put(ExportEnum.ORDER_LIST1, (info) -> orderList(info));
         exportManageFuncMap.put(ExportEnum.ORDER_LIST2, (info) -> orderList(info));
         exportManageFuncMap.put(ExportEnum.ORDER_LIST_SUM, (info) -> orderListSum(info));
@@ -1425,6 +1428,7 @@ public class ExportServiceImpl implements ExportService {
         queryInfo.setOrderType("3");
         Map<String, Object> params = new HashMap<>();
         MapUtil.populateMap(params, queryInfo);
+        params.put("noGroupType","MALL_SELL");
         int count = studentPaymentRouteOrderDao.queryCount(params);
         if (count <= 0) {
             return BaseController.failed("没有可导出的数据");
@@ -1437,6 +1441,36 @@ public class ExportServiceImpl implements ExportService {
                 managerDownload.getName());
     }
 
+    //财务管理导出
+    @Override
+    public HttpResponseResult routeMallOrderList(Map<String, Object> info) {
+        StudentPaymentOrderQueryInfo queryInfo = JSONObject.parseObject(JSONObject.toJSONString(info), StudentPaymentOrderQueryInfo.class);
+        SysUser sysUser = sysUserService.getUser();
+        queryInfo.setRoutingOrganId(organizationService.getEmployeeOrgan(sysUser.getId(), queryInfo.getRoutingOrganId(), sysUser.getIsSuperAdmin()));
+        if (StringUtils.isNotBlank(queryInfo.getSearch())) {
+            List<BasicUserDto> users = studentPaymentOrderDao.getUsers(queryInfo.getSearch());
+            List<Integer> userIds = users.stream().map(BasicUserDto::getUserId).collect(Collectors.toList());
+            if (userIds.size() <= 0) {
+                userIds.add(0);
+            }
+            queryInfo.setUserIds(userIds);
+        }
+        queryInfo.setOrderType("3");
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+        params.put("paymentType","MALL_BUY");
+        int count = studentPaymentRouteOrderDao.queryCount(params);
+        if (count <= 0) {
+            return BaseController.failed("没有可导出的数据");
+        }
+        if (count > 50000) {
+            return BaseController.failed("数据集太大,不能导出.最大数据集不能超过50000");
+        }
+        ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.MALL_ROUTE_ORDER, sysUser.getId());
+        return this.asyncExport(() -> this.mallRouteOrderList(params, managerDownload),
+                managerDownload.getName());
+    }
+
     //学员小课记录导出
     @Override
     public HttpResponseResult exportStudentVipPractice(Map<String, Object> info) {
@@ -1567,6 +1601,34 @@ public class ExportServiceImpl implements ExportService {
         return this.asyncExport(() -> this.orderList(params, managerDownload),
                 managerDownload.getName());
     }
+    //订单列表导出
+    @Override
+    public HttpResponseResult mallOrderList(Map<String, Object> info) {
+        StudentPaymentOrderQueryInfo queryInfo = JSONObject.parseObject(JSONObject.toJSONString(info), StudentPaymentOrderQueryInfo.class);
+        SysUser sysUser = sysUserService.getUser();
+        queryInfo.setOrganId(organizationService.getEmployeeOrgan(sysUser.getId(), queryInfo.getOrganId(), sysUser.getIsSuperAdmin()));
+        if (StringUtils.isNotBlank(queryInfo.getSearch())) {
+            List<BasicUserDto> users = studentPaymentOrderDao.getUsers(queryInfo.getSearch());
+            List<Integer> userIds = users.stream().map(BasicUserDto::getUserId).collect(Collectors.toList());
+            if (userIds.size() <= 0) {
+                userIds.add(0);
+            }
+            queryInfo.setUserIds(userIds);
+        }
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+        params.put("paymentType","MALL_BUY");
+        int count = studentPaymentOrderDao.queryCount(params);
+        if (count <= 0) {
+            return BaseController.failed("没有可导出的数据");
+        }
+        if (count > 50000) {
+            return BaseController.failed("数据集太大,不能导出.最大数据集不能超过50000");
+        }
+        ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.MALL_ORDER, sysUser.getId());
+        return this.asyncExport(() -> this.mallOrderList(params, managerDownload),
+                managerDownload.getName());
+    }
 
     //订单列表导出
     @Override
@@ -1624,6 +1686,86 @@ public class ExportServiceImpl implements ExportService {
         return BigDecimal.ZERO;
     }
 
+    @Override
+    public void mallOrderList(Map<String, Object> params, ManagerDownload managerDownload){
+        List<StudentPaymentOrderMallExportDto> studentPaymentOrderExportDtos = studentPaymentOrderDao.exportMallQueryPage(params);
+        long i = 1;
+        //获取机构费率
+        Integer tenantId = (Integer) params.get("tenantId");
+        TenantConfig tenantConfig = tenantConfigService.queryByTenantId(tenantId);
+        //获取商城订单商品信息
+        List<String> goodsJsonList = studentPaymentOrderExportDtos.stream().map(e -> e.getGoodsJson()).collect(Collectors.toList());
+        goodsJsonList.removeAll(Collections.singleton(null));
+        Set<String> productIdList = new HashSet<>();
+        for (String goodsJson : goodsJsonList) {
+            List<JSONObject> orderItemList = JSONObject.parseArray(JSONObject.parseObject(goodsJson).getString("orderItemList"), JSONObject.class);
+            productIdList.addAll(orderItemList.stream().map(e -> e.get("productId").toString()).collect(Collectors.toSet()));
+        }
+        List<String> categoryNames = sellOrderDao.getMallProductCategory("mall_dev");
+        Map<Long,String> productCategoryMap = MapUtil.convertMybatisMap(sellOrderDao.getMallProductMap(productIdList,"mall_dev"));
+        for (StudentPaymentOrderMallExportDto row : studentPaymentOrderExportDtos) {
+            if (row.getActualAmount() == null) {
+                row.setActualAmount(BigDecimal.ZERO);
+            }
+            if (row.getBalancePaymentAmount() == null) {
+                row.setBalancePaymentAmount(BigDecimal.ZERO);
+            }
+            BigDecimal transferFee = BigDecimal.ZERO;
+            if (row.getPaymentChannel() != null && row.getPaymentChannel().equals("ADAPAY")) {
+                transferFee = row.getActualAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
+            }
+            row.setTransferFee(transferFee);
+            row.setPlatformFee(row.getActualAmount().multiply(tenantConfig.getChargeRate()).divide(new BigDecimal(1000), 2, BigDecimal.ROUND_HALF_UP));
+            //解析json
+            this.parseGoodsJson(row,categoryNames,productCategoryMap);
+            //活动购买的商品列表
+            String paymentChannel = "";
+            if (row.getPaymentChannel() == null) {
+            } else if (row.getPaymentChannel().equals("YQPAY")) {
+                paymentChannel = "双乾";
+            } else if (row.getPaymentChannel().equals("ADAPAY")) {
+                paymentChannel = "汇付";
+            } else if (row.getPaymentChannel().equals("BALANCE")) {
+                paymentChannel = "余额";
+            }
+            row.setPaymentChannel(paymentChannel);
+            row.setId(i);
+            row.setOrderAmount(row.getExpectAmount().add(row.getCouponRemitFee()));
+            i++;
+        }
+        Map<String, String> headMap = getExportMap(new ExportDto(ExportEnum.MALL_ORDER_LIST));
+        for (int j = 0; j < categoryNames.size(); j++) {
+            int num = j + 1;
+            headMap.put(categoryNames.get(j),"category"+ num);
+        }
+        String[] header = headMap.keySet().toArray(new String[headMap.keySet().size()]);
+        String[] body = headMap.values().toArray(new String[headMap.keySet().size()]);
+        HSSFWorkbook workbook = POIUtil.exportExcel(header, body, studentPaymentOrderExportDtos);
+        exportManagerDownload(workbook, managerDownload);
+    }
+
+    private void parseGoodsJson(StudentPaymentOrderMallExportDto row,List<String> categoryNames,Map<Long,String> productCategoryMap){
+        if(StringUtils.isNotEmpty(row.getGoodsJson())){
+            List<JSONObject> orderItemList = JSONObject.parseArray(JSONObject.parseObject(row.getGoodsJson()).getString("orderItemList"), JSONObject.class);
+            for (JSONObject json : orderItemList) {
+                try {
+                    String category = productCategoryMap.get(Long.parseLong(json.get("productId").toString()));
+                    BigDecimal realAmount = new BigDecimal(json.get("realAmount").toString());
+                    int index = categoryNames.indexOf(category) + 1;
+                    if(index == 0){
+                        continue;
+                    }
+                    Method method = row.getClass().getMethod("getCategory" + index, null);
+                    BigDecimal invoke = (BigDecimal)method.invoke(row);
+                    invoke = invoke.add(realAmount);
+                    Method method1 = row.getClass().getMethod("setCategory" + index, BigDecimal.class);
+                    method1.invoke(row,invoke);
+                }catch (Exception e){
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
 
     @Override
     public void orderList(Map<String, Object> params, ManagerDownload managerDownload) {
@@ -2321,6 +2463,57 @@ public class ExportServiceImpl implements ExportService {
         return subtract;
     }
 
+    public void mallRouteOrderList(Map<String, Object> params, ManagerDownload managerDownload) {
+        //获取分润订单(不包含订单详情)(纯余额支付不处理)
+        List<StudentPaymentOrderMallExportDto> studentPaymentOrderExportDtos = studentPaymentRouteOrderDao.exportMallQueryPage(params);
+        if (CollectionUtils.isEmpty(studentPaymentOrderExportDtos)) {
+            return;
+        }
+        //计算手续费
+        Map<String, BigDecimal> serviceChargeMap = new HashMap<>();
+        Map<String, Integer> orderCountMap = new HashMap<>();
+        Integer tenantId = (Integer) params.get("tenantId");
+        TenantConfig tenantConfig = tenantConfigService.queryByTenantId(tenantId);
+        Map<Integer, String> studentNameMap = new HashMap<>();
+        List<Integer> organIds = studentPaymentOrderExportDtos.stream().map(e -> e.getOrganId()).distinct().collect(Collectors.toList());
+        Map<Integer, String> userOrganNameMap = organizationService.getMap("organization","id_","name_",organIds,tenantId,Integer.class,String.class);
+        if (studentPaymentOrderExportDtos.stream().anyMatch(e -> e.getUserId() != null)) {
+            List<Integer> studentIds = studentPaymentOrderExportDtos.stream().filter(e -> e.getUserId() != null).map(e -> e.getUserId()).distinct().collect(Collectors.toList());
+            //获取学员名称
+            studentNameMap = studentService.getMap("sys_user", "id_", "username_", studentIds, tenantId, Integer.class, String.class);
+        }
+
+        //用于计算手续费
+        Map<String, FeeFlagNumDto> feeFlagMap = new HashMap<>();
+        if (studentPaymentOrderExportDtos.stream().anyMatch(e -> Objects.equals(e.getPaymentChannel(), "ADAPAY"))) {
+            List<String> orderNoList = studentPaymentOrderExportDtos.stream().filter(e -> Objects.equals(e.getPaymentChannel(), "ADAPAY")).map(e -> e.getOrderNo()).distinct().collect(Collectors.toList());
+            List<FeeFlagNumDto> feeFlagNumDtos = studentPaymentRouteOrderDao.queryCountFeeFlagNum(orderNoList);
+            feeFlagMap = feeFlagNumDtos.stream().collect(Collectors.toMap(FeeFlagNumDto::getOrderNo, Function.identity()));
+        }
+        for (StudentPaymentOrderMallExportDto basicOrder : studentPaymentOrderExportDtos) {
+            basicOrder.getUser().setUsername(studentNameMap.get(basicOrder.getUserId()));
+            basicOrder.setUserOrganName(userOrganNameMap.get(basicOrder.getOrganId()));
+            //计算手续费
+            this.calcPlatformFee(basicOrder, serviceChargeMap, orderCountMap, tenantConfig, feeFlagMap);
+
+            String paymentChannel = "";
+            if (basicOrder.getPaymentChannel() == null) {
+            } else if (basicOrder.getPaymentChannel().equals("YQPAY")) {
+                paymentChannel = "双乾";
+            } else if (basicOrder.getPaymentChannel().equals("ADAPAY")) {
+                paymentChannel = "汇付";
+            } else if (basicOrder.getPaymentChannel().equals("BALANCE")) {
+                paymentChannel = "余额";
+            }
+            basicOrder.setPaymentChannel(paymentChannel);
+            if (basicOrder.getRouteAmount().compareTo(BigDecimal.ZERO) == 0) {
+                continue;
+            }
+        }
+        HSSFWorkbook workbook = getHSSFWorkbook(studentPaymentOrderExportDtos, ExportEnum.MALL_ROUTE_ORDER_LIST);
+        exportManagerDownload(workbook, managerDownload);
+    }
+
     public void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload) {
         //获取分润订单(不包含订单详情)(纯余额支付不处理)
         List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentRouteOrderDao.ExportQueryPage1(params);
@@ -2588,12 +2781,12 @@ public class ExportServiceImpl implements ExportService {
         List<StudentStatisticsDto> rows = studentStatisticsService.queryStatisticsPage(queryInfo).getRows();
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "学生姓名", "学员编号", "联系电话", "声部", "学校", "年级", "学员状态", "未排课时", "总课时", "已完成课时",
-                            "剩余课时", "预收金额", "第一次课时间", "最近上课时间", "指导老师编号", "指导老师", "乐团主管编号", "乐团主管", "声部课老师编号", "声部课老师", "近30天课耗", "回访次数",
+                            "剩余未开始课时","剩余课时(未开始+未排课资格)", "预收金额", "第一次课时间", "最近上课时间", "指导老师编号", "指导老师", "乐团主管编号", "乐团主管", "声部课老师编号", "声部课老师", "近30天课耗", "回访次数",
                             "回访状态", "原因", "回访日期"},
                     new String[]{"studentBasicInfo.organName", "studentBasicInfo.userName", "studentBasicInfo.userId",
                             "studentBasicInfo.phone", "studentBasicInfo.subjectName", "studentBasicInfo.cooperationOrganName", "studentBasicInfo.grade",
                             "studentBasicInfo.studentStatus",
-                            "noScheduleNum", "totalCourseNum", "overCourseNum", "subCourseNum", "preCourseFee", "firstCourseTime", "lastCourseTime", "teacherId", "teacherName", "musicDirectorId", "musicDirectorName",
+                            "noScheduleNum", "totalCourseNum", "overCourseNum", "subCourseNum",  "subTotalCourse", "preCourseFee", "firstCourseTime", "lastCourseTime", "teacherId", "teacherName", "musicDirectorId", "musicDirectorName",
                             "studentBasicInfo.subjectTeacherId", "studentBasicInfo.subjectTeacherName", "latelyCourseConsumer", "visitNum",
                             "lastVisitStatus == null?'':lastVisitStatus == 'LOST' ? '流失':lastVisitStatus == 'THINKING' ? '考虑中':" +
                                     "lastVisitStatus == 'PENDING_PAYMENT' ? '确认缴费待缴费':lastVisitStatus == 'PAUSE' ? '暂停':lastVisitStatus == 'OTHER' ? '其他':''"
@@ -2973,7 +3166,7 @@ public class ExportServiceImpl implements ExportService {
     }
 
     //计算汇付手续费和平台手续费
-    public void calcPlatformFee(StudentPaymentOrderExportDto row, Map<String, BigDecimal> serviceChargeMap,
+    public void calcPlatformFee(StudentPaymentOrderRouteDto row, Map<String, BigDecimal> serviceChargeMap,
                                 Map<String, Integer> orderCountMap, TenantConfig tenantConfig, Map<String, FeeFlagNumDto> feeFlagMap) {
         BigDecimal currentFee = BigDecimal.ZERO;
         if (row.getPaymentChannel() != null && row.getPaymentChannel().equals("ADAPAY")) {

+ 13 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentStatisticsServiceImpl.java

@@ -43,6 +43,8 @@ public class StudentStatisticsServiceImpl extends BaseServiceImpl<Integer, Stude
 
 	@Override
 	public void updateStudentStatistics() {
+		//更新学员基本信息
+		studentBasicInfoDao.updateStudentBasicInfo();
 		RedisTemplate<String, Integer> redisTemplate = redisCache.getRedisTemplate();
 		Integer num = redisTemplate.opsForValue().get("updateStudentStatisticsNum:");
 		if(num == null || num == 1){
@@ -51,22 +53,31 @@ public class StudentStatisticsServiceImpl extends BaseServiceImpl<Integer, Stude
 			}
 			//更新未排课总数
 			studentStatisticsDao.updateNoCourseNum();
+		}else if (num == 2){
 			//更新未开始价值总和
 			studentStatisticsDao.updateNotStartCourseFee();
+		}else if (num == 3){
 			//更新未排课价值
 			studentStatisticsDao.updateNoCourseFee();
-		}else if (num == 2){
+		}else if (num == 4){
 			//更新第一次课的时间\最近一次课时间
 			studentStatisticsDao.updateFirstAndLastCourseTime();
+		}else if (num == 5){
 			//更新进行中课程组数量
 			studentStatisticsDao.updateNormalGroupNum();
+		}else if (num == 6){
 			//更新总课时数、已完成、剩余课时数、最近30天课耗、最近1年课耗
 			studentStatisticsDao.updateCourseNum();
-		} else if (num == 3) {
+		}else if (num == 7){
 			//更新声部班老师
 			studentBasicInfoDao.updateSubjectTeacher();
+		}else if (num == 8){
 			//更新乐团主管、指导老师
 			studentStatisticsDao.updateTeacherAndEdu();
+		}else if (num == 8){
+			//更新学员合作单位
+			studentStatisticsDao.updateCooperationOrgan();
+		} else if (num == 9) {
 			//更新第一次付费时间
 			studentStatisticsDao.updateFirstOrderTime();
 			num = 0;

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

@@ -657,5 +657,17 @@
             #{orderId}
         </foreach>
     </select>
+    <select id="getMallProductMap" resultType="java.util.Map">
+        select pp.id 'key',ppc.name 'value' from mall_dev.pms_product_category ppc
+        left join mall_dev.pms_product_category ppcc ON ppcc.parent_id = ppc.id
+        left join mall_dev.pms_product pp ON pp.product_category_id = ppcc.id
+        where pp.id IN
+        <foreach collection="productIdList" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+    </select>
+    <select id="getMallProductCategory" resultType="java.lang.String">
+        select name from mall_dev.pms_product_category where parent_id = 0
+    </select>
 
 </mapper>

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

@@ -101,4 +101,7 @@
 	<update id="updateSubjectTeacher">
 		SELECT updateSubjectTeacher()
 	</update>
+	<update id="updateStudentBasicInfo">
+		SELECT updateStudentBasicInfo()
+	</update>
 </mapper>

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

@@ -334,6 +334,75 @@
         <include refid="queryPaymentOrder"/>
     </select>
 
+    <sql id="queryPaymentMallOrder">
+        <where>
+        	spo.tenant_id_ = #{tenantId}
+            <if test="userIds != null">
+                AND spo.user_id_ IN
+                <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
+                    #{userId}
+                </foreach>
+            </if>
+            <if test="organId != null">
+                AND FIND_IN_SET(spo.organ_id_,#{organId})
+            </if>
+            <if test="orderStartDate != null">
+                AND DATE_FORMAT(spo.create_time_,'%Y-%m-%d') &gt;= #{orderStartDate}
+            </if>
+            <if test="orderEndDate != null">
+                AND DATE_FORMAT(spo.create_time_,'%Y-%m-%d') &lt;= #{orderEndDate}
+            </if>
+            <if test="notGroupType != null and notGroupType != ''">
+                AND spo.group_type_ != #{notGroupType}
+            </if>
+            <if test="paymentType != null">
+                AND spo.type_ = #{paymentType}
+            </if>
+            <if test="remark != null">
+                AND spo.memo_ LIKE CONCAT('%',#{remark},'%')
+            </if>
+            <if test="studentId != null">
+                AND spo.user_id_ = #{studentId}
+            </if>
+            <if test="paymentStatus != null">
+                AND spo.status_ = #{paymentStatus}
+            </if>
+            <if test="paymentChannel != null">
+                AND spo.payment_channel_ NOT IN (#{paymentChannel})
+            </if>
+            <if test='orderType != null and orderType.toString()=="1".toString()'>
+                AND spo.com_amount_ > 0
+            </if>
+            <if test='orderType != null and orderType.toString()=="2".toString()'>
+                AND spo.per_amount_ > 0
+            </if>
+            <if test="routingOrganId != null">
+                AND FIND_IN_SET(spo.routing_organ_id_,#{routingOrganId})
+            </if>
+            <if test="actualAmount != null">
+                AND spo.actual_amount_ >= #{actualAmount}
+            </if>
+
+            <if test="balancePaymentAmount != null">
+                AND spo.balance_payment_amount_ >= #{balancePaymentAmount}
+            </if>
+            <if test="lessActualAmount != null">
+                <![CDATA[ AND spo.actual_amount_ <= #{lessActualAmount}]]>
+            </if>
+            <if test="lessBalancePaymentAmount != null">
+                <![CDATA[AND spo.balance_payment_amount_ <= #{lessBalancePaymentAmount}]]>
+            </if>
+            <if test="orderNo != null">
+                AND (spo.id_ = #{orderNo} OR spo.order_no_ = #{orderNo})
+            </if>
+            <if test="merNos != null">
+                AND FIND_IN_SET(#{merNos},spo.mer_nos_)
+            </if>
+            <if test="transNo != null">
+                AND spo.trans_no_ = #{transNo}
+            </if>
+        </where>
+    </sql>
     <sql id="queryPaymentOrder">
         <where>
         	spo.tenant_id_ = #{tenantId}
@@ -582,6 +651,19 @@
         </foreach>
     </select>
 
+    <resultMap type="com.ym.mec.biz.dal.dto.StudentPaymentOrderMallExportDto" id="mallOrderAndDetail"
+               extends="StudentPaymentOrder">
+        <result column="organ_name" property="organName"/>
+        <result column="username_" property="user.username"/>
+        <result column="routeMerNo" property="routeMerNo"/>
+        <result column="routeAmount" property="routeAmount"/>
+        <result column="routeBalance" property="routeBalance"/>
+        <result column="sale_amount_" property="saleAmount"/>
+        <result column="service_amount_" property="serviceAmount"/>
+        <result column="service_fee_" property="serviceFee"/>
+        <result column="routeBalance" property="routeBalance"/>
+        <result column="orderAmount" property="orderAmount"/>
+    </resultMap>
     <resultMap type="com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto" id="orderAndDetail"
                extends="StudentPaymentOrder">
         <result column="organ_name" property="organName"/>
@@ -611,6 +693,27 @@
     </resultMap>
 
     <!-- 分页查询 -->
+    <select id="exportMallQueryPage" resultMap="mallOrderAndDetail" parameterType="map">
+        SELECT spo.*,u.username_,o.name_ organ_name,sgs.goods_json_
+        FROM student_payment_order spo
+        left join student_goods_sell sgs ON sgs.order_no_ = spo.order_no_
+        LEFT JOIN sys_user u on spo.user_id_ = u.id_
+        <if test='orderType != null and orderType.toString()=="0".toString()'>
+            LEFT JOIN organization o on spo.organ_id_ = o.id_
+        </if>
+        <if test='orderType != null and orderType.toString()=="1".toString()'>
+            LEFT JOIN organization o on spo.organ_id_ = o.id_
+        </if>
+        <if test='orderType != null and orderType.toString()=="2".toString()'>
+            LEFT JOIN organization o on spo.organ_id_ = o.id_
+        </if>
+        <if test='orderType != null and orderType.toString()=="3".toString()'>
+            LEFT JOIN organization o on spo.routing_organ_id_ = o.id_
+        </if>
+        <include refid="queryPaymentMallOrder"/>
+        ORDER BY spo.id_ ASC
+    </select>
+    <!-- 分页查询 -->
     <select id="ExportQueryPage" resultMap="orderAndDetail" parameterType="map">
         SELECT spo.*,u.username_,spod.id_ detail_id_,spod.type_ detail_type_,spod.price_
         detail_price_,spod.kit_group_purchase_type_ detail_kit_group_purchase_type_,

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

@@ -211,6 +211,9 @@ calender_id_,create_time_,create_by_,update_time_,update_by_,tenant_id_,type_
             <if test="orderEndDate != null">
                 AND DATE_FORMAT(spo.create_time_,'%Y-%m-%d') &lt;= #{orderEndDate}
             </if>
+            <if test="noGroupType != null and noGroupType != ''">
+                AND spo.group_type_ != #{noGroupType}
+            </if>
             <if test="paymentType != null">
                 AND spo.type_ = #{paymentType}
             </if>
@@ -307,6 +310,27 @@ calender_id_,create_time_,create_by_,update_time_,update_by_,tenant_id_,type_
         GROUP BY spro.order_no_,spro.mer_no_
         ORDER BY spro.id_
     </select>
+    <select id="exportMallQueryPage" resultMap="com.ym.mec.biz.dal.dao.StudentPaymentOrderDao.mallOrderAndDetail"
+            parameterType="map">
+        SELECT spo.*,
+        SUM(spro.route_amount_) routeAmount,
+        SUM(spro.route_balance_amount_) routeBalance,
+        SUM(spro.sale_amount_) sale_amount_,
+        SUM(spro.service_amount_) service_amount_,
+        SUM(spro.service_fee_) service_fee_,
+        spro.mer_no_ routeMerNo,
+        spro.fee_flag_ feeFlag,
+        sci.charge_type_,
+        spo.expect_amount_ + spo.coupon_remit_fee_ orderAmount,
+        o.name_ organ_name
+        FROM student_payment_route_order spro
+        LEFT JOIN student_payment_order spo ON spo.order_no_ = spro.order_no_
+        LEFT JOIN sporadic_charge_info sci ON spo.music_group_id_ = sci.id_
+        LEFT JOIN organization o on spro.route_organ_id_ = o.id_
+        <include refid="queryPaymentOrder"/>
+        GROUP BY spro.order_no_,spro.mer_no_
+        ORDER BY spro.id_
+    </select>
 
 
 

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

@@ -32,6 +32,7 @@
 		<result column="last_order_time_" property="lastOrderTime" />
 		<result column="order_num_" property="orderNum" />
 		<result column="group_type_" property="groupType" />
+		<result column="subTotalCourse" property="subTotalCourse" />
 	</resultMap>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -188,6 +189,9 @@
 	<select id="queryPage" resultMap="StudentStatistics" parameterType="map">
 		SELECT * FROM student_statistics ORDER BY id_ <include refid="global.limit"/>
 	</select>
+	<update id="updateCooperationOrgan">
+		SELECT updateCooperationOrgan()
+	</update>
 	<update id="updateTeacherAndEdu">
 		SELECT updateTeacherAndEdu()
 	</update>
@@ -330,6 +334,7 @@
 	</select>
 	<select id="queryStatistics" resultMap="StudentStatisticsDto">
 		SELECT *,ss.not_start_course_fee_ + ss.no_course_fee_ preCourseFee,
+		ss.no_schedule_num_ + ss.sub_course_num_ subTotalCourse,
 			CASE WHEN (ss.no_schedule_num_ > 0 OR ss.sub_course_num_ > 0) AND (ss.lately_year_course_consumer_ > 0 OR ss.over_course_num_ &lt;= 0) THEN '在读'
 			WHEN ss.over_course_num_ > 0 AND (ss.sub_course_num_ > 0 OR ss.no_schedule_num_ > 0) AND ss.lately_year_course_consumer_ &lt;= 0 THEN '沉睡'
 			WHEN ss.over_course_num_ > 0 AND ss.sub_course_num_ &lt;= 0 AND ss.no_schedule_num_ &lt;= 0 AND suca.course_balance_ &lt;= 0 THEN '流失'

+ 8 - 0
mec-web/src/main/resources/exportColumnMapper.ini

@@ -110,6 +110,10 @@ fieldColumns = ["studentName", "parentsName", "currentGrade", "currentClass", "g
 headColumns = ["用户编号", "用户名", "手机号", "课程类型", "实际薪水", "补助", "结算时间", "教师角色"]
 fieldColumns = ["userId", "username", "phone", "type.msg", "name", "actualSalary", "subsidy", "settlementTime", "teacherRole.msg"]
 
+[商城订单列表导出]
+headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额", "汇付手续费","平台手续费", "到账时间", "分部", "备注"]
+fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount","balancePaymentAmount","couponRemitFee", "transferFee", "platformFee", "payTime", "organName","memo"]
+
 [订单列表导出1]
 headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额", "课程家长采买","课程学校采买", "VIP课", "网管课", "乐理课", "考级", "维修费用", "乐保费用", "云教练", "押金", "乐器", "教辅费用", "上门费","账户充值", "零售乐器","大件乐器", "其它", "汇付手续费","平台手续费", "到账时间","关联乐团ID/VIP课ID","课程形态","类型","收费乐团编号","收费乐团","零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
 fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount","balancePaymentAmount","couponRemitFee","musicGroupCourseFee","courseSchoolBuyAmount", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee","leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee","retailGoodsFee","largeMusicalFee", "otherFee", "transferFee", "platformFee", "payTime", "musicGroupId","groupType.desc","typeDesc","feeMusicGroupId","feeMusicGroupName", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
@@ -170,6 +174,10 @@ fieldColumns = ["name", "gender == 1?'男':'女'", "idcard", "city", "school", "
 headColumns = ["分部", "单位编号", "单位名称", "是否启用","乐团主管","状态栏"]
 fieldColumns = ["organization.name", "id", "name", "isEnable == true ? '是':'否'", "realName", "isEnable == true ? '开启' : '未开启'"]
 
+[商城财务管理导出]
+headColumns = ["序号", "业务分部",  "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "汇付手续费", "平台手续费", "到账时间", "分部", "备注"]
+fieldColumns = ["id", "userOrganName", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee", "transferFee", "platformFee", "payTime", "organName", "memo"]
+
 [财务管理导出1]
 headColumns = ["序号", "业务分部",  "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用", "乐保费用", "云教练", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "汇付手续费", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
 fieldColumns = ["id", "userOrganName", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee",     "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee", "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "transferFee", "platformFee", "payTime", "musicGroupId", "groupType.desc","typeDesc","feeMusicGroupId","feeMusicGroupName", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]

+ 2 - 7
mec-websocket/src/main/java/com/ym/mec/web/support/socket/ServerRunner.java

@@ -1,18 +1,13 @@
 package com.ym.mec.web.support.socket;
 
 import com.corundumstudio.socketio.SocketIOServer;
-import com.corundumstudio.socketio.namespace.Namespace;
 import com.corundumstudio.socketio.namespace.NamespacesHub;
-import com.corundumstudio.socketio.store.pubsub.DispatchMessage;
 import com.corundumstudio.socketio.store.pubsub.PubSubStore;
-import com.corundumstudio.socketio.store.pubsub.PubSubType;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.stereotype.Component;
 
-import java.util.Objects;
-
 @Slf4j
 @Component
 public class ServerRunner implements CommandLineRunner {
@@ -35,7 +30,7 @@ public class ServerRunner implements CommandLineRunner {
         server.start();
 
         // 订阅消息
-        pubSubStore.subscribe(PubSubType.DISPATCH, message -> {
+        /*pubSubStore.subscribe(PubSubType.DISPATCH, message -> {
 
             // 分布式服务空间请求分发
             Namespace namespace = namespacesHub.get(message.getNamespace());
@@ -44,7 +39,7 @@ public class ServerRunner implements CommandLineRunner {
                 namespace.dispatch(message.getRoom(), message.getPacket());
             }
 
-        }, DispatchMessage.class);
+        }, DispatchMessage.class);*/
 
         log.info("--------SocketIO------- SERVER.START PORT={}", server.getConfiguration().getPort());
     }