Просмотр исходного кода

修改
1、优化试住账单描述
2、床位变更记录显示修改
3、退住账单不再自动计算长护险,以录入的为准

liangwenxuan 1 день назад
Родитель
Сommit
97c59de258

+ 4 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/BedChangeRecordRespVO.java

@@ -70,7 +70,7 @@ public class BedChangeRecordRespVO {
     @Schema(description = "现床位id", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
     private Long expectId;
 
-    @Schema(description = "现床位名称", example = "20769")
+    @Schema(description = "现床位项目名称", example = "20769")
     private String expectName;
 
     @Schema(description = "新收费项目id", example = "20769")
@@ -123,4 +123,7 @@ public class BedChangeRecordRespVO {
     @Schema(description = "发起租户id")
     private Long startTenantId;
 
+    @Schema(description = "现床位名称", example = "20769")
+    private String expectBedName;
+
 }

+ 6 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/vo/ExpenseBillRespVO.java

@@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.biz.ExpenseSubsidyDO;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 
+import java.time.LocalDate;
 import java.util.*;
 import java.math.BigDecimal;
 
@@ -103,4 +104,9 @@ public class ExpenseBillRespVO {
     @Schema(description = "合同号")
     private String contractNumber;
 
+    @Schema(description = "账单开始日期(试住专用)")
+    private LocalDate beginDate;
+    @Schema(description = "账单结束日期(试住专用)")
+    private LocalDate endDate;
+
 }

+ 0 - 15
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ElderlyConsumerVouchersServiceImpl.java

@@ -142,21 +142,6 @@ public class ElderlyConsumerVouchersServiceImpl implements ElderlyConsumerVouche
             if (elderlyInfo == null) {
                 throw exceptionCustomMsg(COMMON_ERROR, "第" + excelRow + "行未找到匹配长者(姓名+身份证)");
             }
-
-            ExpenseOrderDO expenseOrder = expenseOrderMapper.selectOne(new LambdaQueryWrapperX<ExpenseOrderDO>()
-                            .eqIfPresent(ExpenseOrderDO::getTenantId, elderlyInfo.getTenantId())
-                            .eq(ExpenseOrderDO::getElderId, elderlyInfo.getId())
-                            .eq(ExpenseOrderDO::getIsShow, true)
-                            .eq(ExpenseOrderDO::getIsLock,0)
-                            .eq(ExpenseOrderDO::getConfirmStatus,0)
-                            .ne(ExpenseOrderDO::getPayStatus, 1)
-                            .eq(ExpenseOrderDO::getBillingMonth, item.getBillingMonth())
-                            .in(ExpenseOrderDO::getType, 1, 2));
-            if (expenseOrder == null) {
-                throw exceptionCustomMsg(COMMON_ERROR, "第" + excelRow + "行未找到可抵扣账单(需存在未缴费且可见的对应账单月账单)");
-            }
-            validateExpenseOrderNotConfirmedAndNotLock(expenseOrder);
-
             ElderlyConsumerVouchersDO data = ElderlyConsumerVouchersDO.builder()
                     .elderId(elderlyInfo.getId())
                     .billingMonth(item.getBillingMonth())

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

@@ -382,7 +382,7 @@ public class ElderlyContractServiceImpl implements ElderlyContractService {
         List<ElderlyChangeRecordDO> elderlyChangeRecords = elderlyChangeRecordMapper.selectList(new LambdaQueryWrapperX<ElderlyChangeRecordDO>()
                 .eq(ElderlyChangeRecordDO::getElderlyId, elderId)
                 .eq(ElderlyChangeRecordDO::getCurrentFlag, 0));
-        resVO.setChangeRecords(elderlyChangeRecords);
+        resVO.setChangeRecords(elderlyChangeRecords.stream().filter(e->e.getExpectId() != null).collect(Collectors.toList()));
         if (CollectionUtil.isNotEmpty(elderlyChangeRecords)) {
             List<Long> changeIds = elderlyChangeRecords.stream()
                     .map(ElderlyChangeRecordDO::getId)

+ 24 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ExpenseOrderServiceImpl.java

@@ -264,6 +264,7 @@ public class ExpenseOrderServiceImpl implements ExpenseOrderService {
         respVO.setElderName(elderlyInfo == null ? null : elderlyInfo.getElderName());
         respVO.setElderSex(elderlyInfo == null ? null : elderlyInfo.getElderSex());
         List<ExpenseOrderItemDO> items = expenseOrderItemMapper.selectList(new LambdaQueryWrapper<ExpenseOrderItemDO>().eq(ExpenseOrderItemDO::getExpenseOrderId, id));
+        YearMonth billYearMonth = YearMonth.parse(expenseOrder.getBillingMonth(), DateTimeFormatter.ofPattern("yyyy-MM"));
         if (expenseOrder.getType() == 1) {
             Date checkInTime = elderlyInfo.getCheckInTime();
             LocalDate startDay = checkInTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
@@ -279,6 +280,29 @@ public class ExpenseOrderServiceImpl implements ExpenseOrderService {
                 respVO.setExpenseRemarks(expenseDO.getRemark());
                 respVO.setExpenseRemarksCreator(expenseDO.getCreatedBy());
             }
+        } else if (expenseOrder.getType() == 3) {
+            List<ElderlyContractDO> elderlyContractDOList = elderlyContractMapper.selectList(new LambdaQueryWrapperX<ElderlyContractDO>()
+                    .eq(ElderlyContractDO::getElderId, elderlyInfo.getId())
+                    .and(w -> w
+                            .le(ElderlyContractDO::getBeginTime, billYearMonth.atEndOfMonth().atTime(23, 59, 59))
+                            .ge(ElderlyContractDO::getExpireTime, billYearMonth.atDay(1).atStartOfDay()))
+                    .orderByDesc(ElderlyContractDO::getCreatedTime).last("LIMIT 1"));
+            ElderlyContractDO elderlyContractDO = elderlyContractDOList.get(0);
+            Date checkInTime = elderlyInfo.getCheckInTime();
+            LocalDate startDay = checkInTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+            LocalDate lastDay = elderlyContractDO.getExpireTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+            Period period = Period.between(startDay, lastDay);
+            int daysBetween = period.getDays() + 1;
+            respVO.setDescription(startDay + "至" + lastDay + "  共" + daysBetween + "天");
+            respVO.setBeginDate(startDay);
+            respVO.setEndDate(lastDay);
+            ExpenseOrderItemDO orderItemDO = items.stream().findFirst().get();
+            if (orderItemDO.getExpenseSource().equals(BusinessConstants.EXPENSE_ITEM)) {
+                ExpenseItemDO expenseItem = expenseItemMapper.selectById(orderItemDO.getSourceExpenseItemId());
+                ExpenseDO expenseDO = expenseMapper.selectById(expenseItem.getExpenseId());
+                respVO.setExpenseRemarks(expenseDO.getRemark());
+                respVO.setExpenseRemarksCreator(expenseDO.getCreatedBy());
+            }
         } else {
             List<ElderlyContractDO> elderlyContractList = elderlyContractMapper.selectList(new LambdaQueryWrapperX<ElderlyContractDO>()
                     .eq(ElderlyContractDO::getElderId, elderlyInfo.getId())
@@ -293,8 +317,6 @@ public class ExpenseOrderServiceImpl implements ExpenseOrderService {
             if (elderlyContractDO.getExpireTime() != null) {
                 LocalDate expireDate = elderlyContractDO.getExpireTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
                 YearMonth expireYearMonth = YearMonth.from(expireDate);
-                YearMonth billYearMonth = YearMonth.parse(expenseOrder.getBillingMonth(), DateTimeFormatter.ofPattern("yyyy-MM"));
-
                 // 如果合同在当前账单月过期,则使用月头到过期日期作为描述
                 if (expireYearMonth.equals(billYearMonth)) {
                     lastDayOfMonth = expireDate;

+ 1 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/NurseChangeRecordServiceImpl.java

@@ -125,6 +125,7 @@ public class NurseChangeRecordServiceImpl implements ElderlyChangeRecordService
         BedChangeRecordRespVO detail = isDetail ? bedChangeRecordMapper.getBedDetail(id, currentFlag) : bedChangeRecordMapper.createBedChangeGetDetail(id, currentFlag);
         if (null != detail) {
             detail.setBedName(buildService.getFullBedName(detail.getElderlyId()));
+            detail.setExpectBedName(buildService.getFullBedNameByBedId(detail.getExpectId()));
         }
         return detail;
     }

+ 19 - 14
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/RefundSettlementOrderServiceImpl.java

@@ -1675,21 +1675,22 @@ public class RefundSettlementOrderServiceImpl implements RefundSettlementOrderSe
             itemVO.setIsMonthlyExpense(BooleanEnum.FALSE.getValue());
             itemVO.setDailyExpenseType(4);
             itemVO.setCount(1);
-            LocalDate endDate = bizUtil.getEndDateWithExpireDate(elderId,item.getContractId(),costDeadlineDate.with(TemporalAdjusters.lastDayOfMonth()));
-            // 根据是否缴费来确定正负,若未缴费,那么需要抵扣长护险就是负,天数为月初到截止日期,如果已缴费那么就是收回长护险是正,天数为费用截止日期到月末
-            long calDay = item.getPayStatus().equals(BooleanEnum.FALSE.getValue()) ?
-                    -(ChronoUnit.DAYS.between(costDeadlineDate.withDayOfMonth(1),costDeadlineDate)) :
-                    ChronoUnit.DAYS.between(costDeadlineDate,endDate);
-            BigDecimal daysOfMonth = new BigDecimal(Math.abs(ChronoUnit.DAYS.between(costDeadlineDate.withDayOfMonth(1),endDate))).add(BigDecimal.ONE);
+//            LocalDate endDate = bizUtil.getEndDateWithExpireDate(elderId,item.getContractId(),costDeadlineDate.with(TemporalAdjusters.lastDayOfMonth()));
+//            // 根据是否缴费来确定正负,若未缴费,那么需要抵扣长护险就是负,天数为月初到截止日期,如果已缴费那么就是收回长护险是正,天数为费用截止日期到月末
+//            long calDay = item.getPayStatus().equals(BooleanEnum.FALSE.getValue()) ?
+//                    -(ChronoUnit.DAYS.between(costDeadlineDate.withDayOfMonth(1),costDeadlineDate)) :
+//                    ChronoUnit.DAYS.between(costDeadlineDate,endDate);
+//            BigDecimal daysOfMonth = new BigDecimal(Math.abs(ChronoUnit.DAYS.between(costDeadlineDate.withDayOfMonth(1),endDate))).add(BigDecimal.ONE);
             ExpenseSubsidyDO expenseSubsidyDO = expenseSubsidyMapper.selectById(item.getSourceExpenseItemId());
             // 长护险补充备注
-            String subsidyRemarks = calDay > 0 ? ";收回" + calDay + "天的长护险" : ";抵扣" + (-calDay) + "天的长护险";
+//            String subsidyRemarks = calDay > 0 ? ";收回" + calDay + "天的长护险" : ";抵扣" + (-calDay) + "天的长护险";
             if (expenseSubsidyDO != null) {
                 YearMonth yearMonth = YearMonth.parse(expenseSubsidyDO.getMonth());
                 if(yearMonth.isAfter(costDeadlineYearMonth)){
                     itemVO.setSkip(true);
                 }
                 YearMonth decutionBillYearMonth = YearMonth.parse(expenseSubsidyDO.getDeductionBillMonth());
+                // 长户险抵扣账单月在费用截止日期后
                 if(decutionBillYearMonth.isAfter(costDeadlineYearMonth)){
                     if(item.getPayStatus().equals(BooleanEnum.TRUE.getValue())){
                         BigDecimal subsidyAmount = expenseSubsidyDO.getAmount() == null ? BigDecimal.ZERO : expenseSubsidyDO.getAmount();
@@ -1701,10 +1702,12 @@ public class RefundSettlementOrderServiceImpl implements RefundSettlementOrderSe
                 }else {
                     BigDecimal subsidyAmount = expenseSubsidyDO.getAmount() == null ? BigDecimal.ZERO : expenseSubsidyDO.getAmount();
                     // 计算长护险单日费用
-                    BigDecimal dayPrice = subsidyAmount.divide(daysOfMonth, RoundingMode.HALF_UP);
-                    itemVO.setAmount(dayPrice.multiply(new BigDecimal(calDay)));
-                    itemVO.setPrice(expenseSubsidyDO.getAmount().negate());
-                    itemVO.setRemarks(expenseSubsidyDO.getRemarks() + subsidyRemarks);
+//                    BigDecimal dayPrice = subsidyAmount.divide(daysOfMonth, RoundingMode.HALF_UP);
+//                    itemVO.setAmount(dayPrice.multiply(new BigDecimal(calDay)));
+                    itemVO.setAmount(subsidyAmount);
+                    itemVO.setPrice(subsidyAmount);
+//                    itemVO.setRemarks(expenseSubsidyDO.getRemarks() + subsidyRemarks);
+                    itemVO.setRemarks(expenseSubsidyDO.getRemarks());
                     itemVO.setItemId(expenseSubsidyDO.getId());
                 }
             } else {    // 长护险录入成了日常费用
@@ -1723,10 +1726,12 @@ public class RefundSettlementOrderServiceImpl implements RefundSettlementOrderSe
                     }
                 }else {
                     // 计算长护险单日费用
-                    BigDecimal dayPrice = subsidyAmount.divide(daysOfMonth, RoundingMode.HALF_UP);
-                    itemVO.setAmount(dayPrice.multiply(new BigDecimal(calDay)));
+//                    BigDecimal dayPrice = subsidyAmount.divide(daysOfMonth, RoundingMode.HALF_UP);
+//                    itemVO.setAmount(dayPrice.multiply(new BigDecimal(calDay)));
+                    itemVO.setAmount(subsidyAmount);
                     itemVO.setPrice(subsidyAmount);
-                    itemVO.setRemarks(dailyExpenses.getRemarks() + subsidyRemarks);
+//                    itemVO.setRemarks(dailyExpenses.getRemarks() + subsidyRemarks);
+                    itemVO.setRemarks(dailyExpenses.getRemarks());
                     itemVO.setItemId(dailyExpenses.getId());
                 }
             }