Explorar el Código

BUGFIX
1、解决日常费用导入时,存在同名费用项目没有按照价格进一步匹配的问题
2、解决变更生效月账单,删除后重新生成会同时存在旧费用和新费用项目的问题

liangwenxuan hace 1 semana
padre
commit
71311b0326

+ 2 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/DailyExpensesServiceImpl.java

@@ -370,7 +370,8 @@ public class DailyExpensesServiceImpl implements DailyExpensesService {
      */
     private OverheadChargeDO validateAndGetOverheadCharge(DailyExpensesExcelVO excelVO) {
         return sysOverheadChargeMapper.selectOne(new LambdaQueryWrapperX<OverheadChargeDO>()
-                .eq(OverheadChargeDO::getChargeName, excelVO.getItemName()));
+                .eq(OverheadChargeDO::getChargeName, excelVO.getItemName())
+                .eq(OverheadChargeDO::getPrice,excelVO.getPrice()));
     }
 
     /**

+ 9 - 16
yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/ExpenseItemMapper.xml

@@ -193,28 +193,21 @@
         WHERE eei.is_monthly_expense = 1
         AND ee.elder_id = #{elderId}
         AND (
-        -- 情况1:有明确的开始和结束日期,且查询月份在这个区间内
-        (DATE_FORMAT(eei.change_start_date, '%Y-%m') &lt;= #{billingMonth}
-        AND DATE_FORMAT(eei.change_end_date, '%Y-%m') &gt;= #{billingMonth})
-        -- 情况2:开始日期 &lt;= 查询月份,且结束日期为NULL
-        OR (DATE_FORMAT(eei.change_start_date, '%Y-%m') &lt;= #{billingMonth}
+        (DATE_FORMAT(eei.change_start_date, '%Y-%m') <![CDATA[ <= ]]> #{billingMonth}
+        AND DATE_FORMAT(eei.change_end_date, '%Y-%m') <![CDATA[ >= ]]> #{billingMonth})
+        OR (DATE_FORMAT(eei.change_start_date, '%Y-%m') <![CDATA[ <= ]]> #{billingMonth}
         AND eei.change_end_date IS NULL)
         )
-        -- 关键修复:排除在账单月开始的新费用(当存在同一老人、同一费用项的旧版本时)
         AND NOT (
         DATE_FORMAT(eei.change_start_date, '%Y-%m') = #{billingMonth}
-        AND eei.change_start_date &gt; STR_TO_DATE(CONCAT(#{billingMonth}, '-01'), '%Y-%m-%d')
+        AND eei.change_start_date > STR_TO_DATE(CONCAT(#{billingMonth}, '-01'), '%Y-%m-%d')
         AND EXISTS (
         SELECT 1
-        FROM elderly_expense_item eei2
-        INNER JOIN elderly_expense ee2 ON eei2.expense_id = ee2.id
-        WHERE ee2.elder_id = ee.elder_id          -- 同一老人
-        AND eei2.item_id = eei.item_id          -- 同一费用项
-        AND eei2.id != eei.id                    -- 排除自身
-        AND eei2.is_monthly_expense = 1          -- 同样只考虑月费用
-        AND DATE_FORMAT(eei2.change_start_date, '%Y-%m') &lt; #{billingMonth}
-        AND (eei2.change_end_date IS NULL
-        OR DATE_FORMAT(eei2.change_end_date, '%Y-%m') &gt;= #{billingMonth})
+        FROM elderly_change_record ecr
+        WHERE ecr.elderly_id = ee.elder_id
+        AND ecr.expect_overhead_charge_id = eei.item_id
+        AND DATE_FORMAT(ecr.change_date, '%Y-%m') = #{billingMonth}
+        AND ecr.deleted = 0
         )
         )
         ) expense_data