zouxuan преди 3 години
родител
ревизия
eeb22b38ec

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

@@ -204,12 +204,27 @@ public interface SellOrderDao extends BaseDAO<Integer, SellOrder> {
     StudentPaymentOrderExportDto getFeeByType(@Param("orderId") Long orderId);
 
     /**
+     * 获取订单的各类型费用
+     *
+     * @param orderIdList
+     * @return
+     */
+    List<StudentPaymentOrderExportDto> queryFeeByType(@Param("orderIdList") List<Long> orderIdList);
+
+    /**
      * 获取打包辅件中乐保
      * @param orderId
      * @return
      */
     BigDecimal getChildRepair(@Param("orderId") Long orderId);
 
+    /**
+     * 获取打包辅件中乐保
+     * @param orderIdList
+     * @return
+     */
+    List<Map<Long,BigDecimal>> queryChildRepair(@Param("orderIdList") List<Long> orderIdList);
+
     //统计外部销售收入总金额
     List<Map<Long, String>> sumOutOrderAmount(@Param("outOrderList") List<Long> outOrderList);
 }

+ 29 - 13
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -1647,7 +1647,6 @@ public class ExportServiceImpl implements ExportService {
         if(org.apache.commons.collections.CollectionUtils.isNotEmpty(outOrderList)){
             outOrderAmountMap = MapUtil.convertIntegerMap(sellOrderDao.sumOutOrderAmount(outOrderList));
         }
-
         for (StudentPaymentOrderExportDto row : studentPaymentOrderExportDtos) {
             if (row.getActualAmount() == null) {
                 row.setActualAmount(BigDecimal.ZERO);
@@ -1994,6 +1993,20 @@ public class ExportServiceImpl implements ExportService {
         if(org.apache.commons.collections.CollectionUtils.isNotEmpty(outOrderList)){
             outOrderAmountMap = MapUtil.convertIntegerMap(sellOrderDao.sumOutOrderAmount(outOrderList));
         }
+        List<Long> otherOrderIds = studentPaymentOrderExportDtos.stream().filter(e -> e.getGroupType() != GroupType.GOODS_SELL
+                && e.getGroupType() != GroupType.REPLACEMENT
+                && e.getGroupType() != GroupType.PRACTICE
+                && e.getGroupType() != GroupType.SPORADIC
+                && e.getGroupType() != GroupType.MEMBER
+                && e.getGroupType() != GroupType.ACTIVITY
+                && e.getGroupType() != GroupType.VIP).map(e -> e.getId()).collect(Collectors.toList());
+        Map<Long, List<StudentPaymentOrderExportDto>> feeByTypeMap = new HashMap<>();
+        Map<Long, BigDecimal> childRepairMap = new HashMap<>();
+        if(!CollectionUtils.isEmpty(otherOrderIds)){
+            List<StudentPaymentOrderExportDto> feeByType = sellOrderDao.queryFeeByType(otherOrderIds);
+            feeByTypeMap = feeByType.stream().collect(Collectors.groupingBy(StudentPaymentOrderExportDto::getId));
+            childRepairMap = MapUtil.convertIntegerMap(sellOrderDao.queryChildRepair(otherOrderIds));
+        }
         for (StudentPaymentOrderExportDto row : studentPaymentOrderExportDtos) {
             if (row.getActualAmount() == null) {
                 row.setActualAmount(BigDecimal.ZERO);
@@ -2144,18 +2157,21 @@ public class ExportServiceImpl implements ExportService {
                     row.setLargeMusicalFee(row.getActualAmount());
                 }
             } else {
-                StudentPaymentOrderExportDto feeByType = sellOrderDao.getFeeByType(row.getId());
-                BigDecimal childRepairFee = sellOrderDao.getChildRepair(row.getId());
-                row.setMusicalFee(feeByType.getMusicalFee());
-                row.setTeachingFee(feeByType.getTeachingFee().subtract(childRepairFee));
-                row.setMaintenanceProductFee(feeByType.getRepairFee().add(childRepairFee));
-                row.setOtherFee(feeByType.getOtherFee());
-                if (row.getGroupType().equals(GroupType.MUSIC)) {
-                    row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(row.getTeachingFee()).subtract(row.getMaintenanceFee()).subtract(row.getMaintenanceProductFee()).subtract(feeByType.getOtherFee()).subtract(row.getLeaseFee()).subtract(row.getCloudTeacherFee()));
-                } else if (row.getType().equals(OrderTypeEnum.REPAIR)) {
-                    row.setRepairFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
-                } else if (row.getType().equals(OUTORDER)) {
-                    row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(row.getTeachingFee()).subtract(row.getMaintenanceProductFee()).subtract(feeByType.getOtherFee()));
+                List<StudentPaymentOrderExportDto> exportDtoList = feeByTypeMap.get(row.getId());
+                if(!CollectionUtils.isEmpty(exportDtoList)){
+                    StudentPaymentOrderExportDto feeByType = exportDtoList.get(0);
+                    BigDecimal childRepairFee = childRepairMap.get(row.getId()) == null?BigDecimal.ZERO:childRepairMap.get(row.getId());
+                    row.setMusicalFee(feeByType.getMusicalFee());
+                    row.setTeachingFee(feeByType.getTeachingFee().subtract(childRepairFee));
+                    row.setMaintenanceProductFee(feeByType.getRepairFee().add(childRepairFee));
+                    row.setOtherFee(feeByType.getOtherFee());
+                    if (row.getGroupType().equals(GroupType.MUSIC)) {
+                        row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(row.getTeachingFee()).subtract(row.getMaintenanceFee()).subtract(row.getMaintenanceProductFee()).subtract(feeByType.getOtherFee()).subtract(row.getLeaseFee()).subtract(row.getCloudTeacherFee()));
+                    } else if (row.getType().equals(OrderTypeEnum.REPAIR)) {
+                        row.setRepairFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
+                    }else if (row.getType().equals(OUTORDER)) {
+                        row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(row.getTeachingFee()).subtract(row.getMaintenanceProductFee()).subtract(feeByType.getOtherFee()));
+                    }
                 }
             }
             row.setRepairFee(row.getRepairFee().add(row.getMaintenanceProductFee()));

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

@@ -615,9 +615,34 @@
         WHERE spo.id_ = #{orderId}
     </select>
 
+    <select id="queryFeeByType" resultType="com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto">
+        SELECT spo.id_,MAX(spo.actual_amount_)                                actualAmount,
+               SUM(IF(g.type_ = 'INSTRUMENT', so.actual_amount_, 0))  musicalFee,
+               SUM(IF((g.type_ = 'ACCESSORIES' || g.type_ = 'TEACHING' || g.type_ = 'STAFF')  AND g.name_ !='乐器维护',IFNULL(so.actual_amount_,0), 0)) teachingFee,
+               SUM(IF((g.type_ = 'ACCESSORIES' || g.type_ = 'TEACHING' || g.type_ = 'STAFF')  AND g.name_ ='乐器维护',IFNULL(so.actual_amount_,0), 0)) repairFee,
+               SUM(IF((g.type_= 'OTHER' || g.type_ IS NULL) ,IFNULL(so.actual_amount_,0), 0)) otherFee
+        FROM student_payment_order spo
+                 LEFT JOIN sell_order so ON spo.id_ = so.order_id_
+                 LEFT JOIN goods g ON IF(so.parent_goods_id_ IS NOT NULL,g.id_ = so.parent_goods_id_,g.id_ = so.goods_id_)
+        WHERE spo.id_ IN
+        <foreach collection="orderIdList" item="orderId" open="(" close=")" separator=",">
+            #{orderId}
+        </foreach>
+        GROUP BY spo.id_
+    </select>
+
     <select id="getChildRepair" resultType="decimal">
         SELECT IFNULL(SUM(actual_amount_),0) FROM sell_order WHERE order_id_ = #{orderId} AND goods_id_ = 76 AND parent_goods_id_ > 0
     </select>
+
+    <select id="queryChildRepair" resultType="java.util.Map">
+        SELECT order_id_ 'key',IFNULL(SUM(actual_amount_),0) 'value' FROM sell_order
+        WHERE goods_id_ = 76 AND parent_goods_id_ > 0 AND order_id_ IN
+        <foreach collection="orderIdList" item="orderId" open="(" close=")" separator=",">
+            #{orderId}
+        </foreach>
+        GROUP BY order_id_
+    </select>
     <select id="sumOutOrderAmount" resultType="java.util.Map">
         SELECT order_id_ 'key',SUM(actual_amount_) 'value' FROM sell_order
         WHERE order_id_ IN