|
|
@@ -10,9 +10,12 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
|
|
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
|
|
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
|
|
|
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
|
|
|
+import cn.iocoder.yudao.module.bpm.api.business.BpmElderlApplyServiceApi;
|
|
|
import cn.iocoder.yudao.module.system.api.bpm.BpmElderlyApi;
|
|
|
import cn.iocoder.yudao.module.system.api.bpm.vo.CheckInContractReqVO;
|
|
|
+import cn.iocoder.yudao.module.system.api.bpm.vo.CheckInCreateReqVO;
|
|
|
import cn.iocoder.yudao.module.system.api.bpm.vo.CheckInExpenseItemReqVo;
|
|
|
+import cn.iocoder.yudao.module.system.api.bpm.vo.CheckInExpenseSaveReqVO;
|
|
|
import cn.iocoder.yudao.module.system.api.open.OpenApi;
|
|
|
import cn.iocoder.yudao.module.system.controller.admin.biz.vo.*;
|
|
|
import cn.iocoder.yudao.module.system.controller.admin.biz.vo.excel.*;
|
|
|
@@ -43,6 +46,7 @@ import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.google.gson.Gson;
|
|
|
+import com.google.gson.JsonObject;
|
|
|
import com.google.gson.reflect.TypeToken;
|
|
|
import com.mzt.logapi.starter.annotation.LogRecord;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
@@ -185,6 +189,15 @@ public class ElderlyInfoServiceImpl implements ElderlyInfoService {
|
|
|
|
|
|
@Autowired
|
|
|
private RedisTemplate<String, Object> redisTemplate;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SysOverheadChargeMapper sysOverheadChargeMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private BpmElderlApplyServiceApi bpmElderlApplyServiceApi;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private DepositService depositService;
|
|
|
|
|
|
// 定义一个静态的线程池
|
|
|
private static final ExecutorService executorService = Executors.newFixedThreadPool(10);
|
|
|
@@ -1539,6 +1552,95 @@ public class ElderlyInfoServiceImpl implements ElderlyInfoService {
|
|
|
return respVO;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ @TenantIgnore
|
|
|
+ public InstitutionDashboardRespVO getInstitutionDashboard() {
|
|
|
+ Long tenantId = TenantContextHolder.getTenantId();
|
|
|
+ LocalDate today = LocalDate.now();
|
|
|
+ Date todayStartDate = Date.from(today.atStartOfDay(ZoneId.systemDefault()).toInstant());
|
|
|
+ Date todayEndDate = Date.from(today.plusDays(1).atStartOfDay(ZoneId.systemDefault()).minusSeconds(1).toInstant());
|
|
|
+
|
|
|
+ long totalBedCount = Optional.ofNullable(buildBedMapper.selectCount(new LambdaQueryWrapperX<BuildBedDO>()
|
|
|
+ .eq(BuildBedDO::getOrgType, 1)
|
|
|
+ .in(BuildBedDO::getTenantId, tenantId))).orElse(0L);
|
|
|
+
|
|
|
+ long inHospitalCount = Optional.ofNullable(elderlyInfoMapper.selectCount(new LambdaQueryWrapperX<ElderlyInfoDO>()
|
|
|
+ .eq(ElderlyInfoDO::getInStatus, 1)
|
|
|
+ .eq(ElderlyInfoDO::getDeleted, 0)
|
|
|
+ .eq(ElderlyInfoDO::getOrgType, 1)
|
|
|
+ .in(ElderlyInfoDO::getTenantId, tenantId))).orElse(0L);
|
|
|
+
|
|
|
+ long newCheckInCount = Optional.ofNullable(elderlyCheckInRecordMapper.selectCount(new LambdaQueryWrapperX<ElderlyCheckInRecordDO>()
|
|
|
+ .eq(ElderlyCheckInRecordDO::getStatus, 2)
|
|
|
+ .in(ElderlyCheckInRecordDO::getTenantId, tenantId)
|
|
|
+ .between(ElderlyCheckInRecordDO::getCheckInTime, todayStartDate, todayEndDate))).orElse(0L);
|
|
|
+
|
|
|
+ long askLeaveCount = Optional.ofNullable(elderlyAskLeaveMapper.selectCount(new LambdaQueryWrapperX<ElderlyAskLeaveDO>()
|
|
|
+ .in(ElderlyAskLeaveDO::getTenantId, tenantId)
|
|
|
+ .le(ElderlyAskLeaveDO::getOutDate, todayEndDate)
|
|
|
+ .and(w -> w.ge(ElderlyAskLeaveDO::getComeDate, todayStartDate).or().isNull(ElderlyAskLeaveDO::getComeDate)))).orElse(0L);
|
|
|
+
|
|
|
+ long todayAskLeaveCount = Optional.ofNullable(elderlyAskLeaveMapper.selectCount(new LambdaQueryWrapperX<ElderlyAskLeaveDO>()
|
|
|
+ .in(ElderlyAskLeaveDO::getTenantId, tenantId)
|
|
|
+ .between(ElderlyAskLeaveDO::getOutDate, todayStartDate, todayEndDate))).orElse(0L);
|
|
|
+
|
|
|
+ long checkOutCount = Optional.ofNullable(elderlyRetreatRecordMapper.selectCount(new LambdaQueryWrapperX<ElderlyRetreatRecordDO>()
|
|
|
+ .in(ElderlyRetreatRecordDO::getTenantId, tenantId)
|
|
|
+ .between(ElderlyRetreatRecordDO::getRetreatDate, today, today))).orElse(0L);
|
|
|
+
|
|
|
+ List<ElderlyInfoDO> inHospitalElders = elderlyInfoMapper.selectList(new LambdaQueryWrapperX<ElderlyInfoDO>()
|
|
|
+ .select(ElderlyInfoDO::getNurseLevelId)
|
|
|
+ .eq(ElderlyInfoDO::getInStatus, 1)
|
|
|
+ .eq(ElderlyInfoDO::getDeleted, 0)
|
|
|
+ .eq(ElderlyInfoDO::getOrgType, 1)
|
|
|
+ .in(ElderlyInfoDO::getTenantId, tenantId));
|
|
|
+
|
|
|
+ Map<Long, Long> nurseLevelCountMap = inHospitalElders.stream()
|
|
|
+ .map(ElderlyInfoDO::getNurseLevelId)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
|
|
|
+
|
|
|
+ long noFeeCount = inHospitalElders.stream().filter(e -> e.getNurseLevelId() == null).count();
|
|
|
+
|
|
|
+ Map<Long, String> levelNameMap = nurseLevelCountMap.isEmpty()
|
|
|
+ ? new HashMap<>()
|
|
|
+ : nurseLevelMapper.selectBatchIds(nurseLevelCountMap.keySet()).stream()
|
|
|
+ .collect(Collectors.toMap(NurseLevelDO::getId, NurseLevelDO::getNurseLevelName, (a, b) -> a));
|
|
|
+
|
|
|
+ List<InstitutionDashboardRespVO.StatisticItemVO> nursingSituation = new ArrayList<>();
|
|
|
+ nurseLevelCountMap.entrySet().stream()
|
|
|
+ .sorted(Map.Entry.comparingByKey())
|
|
|
+ .forEach(entry -> {
|
|
|
+ String levelName = levelNameMap.get(entry.getKey());
|
|
|
+ if (StringUtils.isBlank(levelName)) {
|
|
|
+ levelName = "未知等级";
|
|
|
+ }
|
|
|
+ nursingSituation.add(buildStatisticItem(levelName, entry.getValue()));
|
|
|
+ });
|
|
|
+ if (noFeeCount > 0) {
|
|
|
+ nursingSituation.add(buildStatisticItem("无费用", noFeeCount));
|
|
|
+ }
|
|
|
+
|
|
|
+ InstitutionDashboardRespVO respVO = new InstitutionDashboardRespVO();
|
|
|
+ respVO.setHospitalDynamics(Arrays.asList(
|
|
|
+ buildStatisticItem("总床位数", totalBedCount),
|
|
|
+ buildStatisticItem("在院人数", inHospitalCount),
|
|
|
+ buildStatisticItem("新收人数", newCheckInCount),
|
|
|
+ buildStatisticItem("请假人数", askLeaveCount),
|
|
|
+ buildStatisticItem("当天请假人数", todayAskLeaveCount),
|
|
|
+ buildStatisticItem("退院人数", checkOutCount)
|
|
|
+ ));
|
|
|
+ respVO.setNursingSituation(nursingSituation);
|
|
|
+ return respVO;
|
|
|
+ }
|
|
|
+
|
|
|
+ private InstitutionDashboardRespVO.StatisticItemVO buildStatisticItem(String name, Long count) {
|
|
|
+ InstitutionDashboardRespVO.StatisticItemVO item = new InstitutionDashboardRespVO.StatisticItemVO();
|
|
|
+ item.setName(name);
|
|
|
+ item.setCount(count == null ? 0L : count);
|
|
|
+ return item;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
private List<TodayUpdate> getTodayUpdate(ElderlyInfoHomeDataReqVO reqVO) {
|
|
|
Long tenantId = reqVO.getTenantIds()[0];
|
|
|
@@ -2164,6 +2266,52 @@ public class ElderlyInfoServiceImpl implements ElderlyInfoService {
|
|
|
});
|
|
|
return list;
|
|
|
}
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public String importCheckIn(List<ElderlyCheckInImportVO> list){
|
|
|
+ List<CheckInCreateReqVO> checkInList = new ArrayList<>();
|
|
|
+ for (ElderlyCheckInImportVO item : list) {
|
|
|
+ CheckInCreateReqVO checkInCreateReqVO = preCheckIn(item);
|
|
|
+ if(checkInCreateReqVO != null){
|
|
|
+ checkInList.add(checkInCreateReqVO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ handleImportCheckIn(checkInList);
|
|
|
+ return "success";
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public String importDeposit(List<ElderlyDepositImportVO> list){
|
|
|
+ for (ElderlyDepositImportVO item : list) {
|
|
|
+ ElderlyInfoDO elderlyInfoDO = elderlyInfoMapper.selectOne(new LambdaQueryWrapperX<ElderlyInfoDO>()
|
|
|
+ .eq(ElderlyInfoDO::getIdCard, item.getIdCard())
|
|
|
+ .eq(ElderlyInfoDO::getTenantId,TenantContextHolder.getTenantId()));
|
|
|
+ DepositDO depositDO = depositMapper.selectOne(new LambdaQueryWrapperX<DepositDO>().eq(DepositDO::getElderId,elderlyInfoDO.getId()));
|
|
|
+ depositDO.setAmount(item.getDeposit());
|
|
|
+ depositDO.setTenantId(TenantContextHolder.getTenantId());
|
|
|
+ DepositRecordDO depositRecordDO = new DepositRecordDO();
|
|
|
+ OverheadChargeDO overheadChargeDO = sysOverheadChargeMapper.selectOne(new LambdaQueryWrapperX<OverheadChargeDO>()
|
|
|
+ .like(OverheadChargeDO::getChargeName, "押金")
|
|
|
+ .eq(OverheadChargeDO::getPrice, item.getDeposit())
|
|
|
+ .eq(OverheadChargeDO::getTenantId,TenantContextHolder.getTenantId()));
|
|
|
+ if(overheadChargeDO == null){
|
|
|
+ log.info("{},该条记录异常,无该金额的押金:{}",item.getElderName(),item.getDeposit());
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ depositRecordDO.setItemId(overheadChargeDO.getId());
|
|
|
+ depositRecordDO.setItemName(overheadChargeDO.getChargeName());
|
|
|
+ depositRecordDO.setElderId(elderlyInfoDO.getId());
|
|
|
+ depositRecordDO.setReceiptNumber("系统初始化导入");
|
|
|
+ depositRecordDO.setAmount(item.getDeposit());
|
|
|
+ depositRecordDO.setType(1);
|
|
|
+ depositRecordDO.setPayType("系统初始化导入");
|
|
|
+ depositDO.setRecords(Collections.singletonList(depositRecordDO));
|
|
|
+ depositService.pay(depositDO);
|
|
|
+ }
|
|
|
+
|
|
|
+ return "success";
|
|
|
+ }
|
|
|
|
|
|
ElderlySanChart getSexAndNcdSan(ElderlyInfoHomeDataReqVO reqVO) {
|
|
|
|
|
|
@@ -2614,6 +2762,229 @@ public class ElderlyInfoServiceImpl implements ElderlyInfoService {
|
|
|
}
|
|
|
return field + " " + order + ", ei.update_time desc";
|
|
|
}
|
|
|
+
|
|
|
+ private CheckInExpenseItemReqVo processMonthlyBedExpense(ElderlyCheckInImportVO item) {
|
|
|
+ String itemName = item.getBedType();
|
|
|
+ BigDecimal itemPrice = item.getBedFee();
|
|
|
+ OverheadChargeDO overheadChargeDO = sysOverheadChargeMapper.selectOne(new LambdaQueryWrapperX<OverheadChargeDO>()
|
|
|
+ .eq(OverheadChargeDO::getChargeName, itemName)
|
|
|
+ .eq(OverheadChargeDO::getPrice, itemPrice)
|
|
|
+ .eq(OverheadChargeDO::getStatus,1)
|
|
|
+ .eq(OverheadChargeDO::getTenantId,TenantContextHolder.getTenantId()));
|
|
|
+ if (overheadChargeDO == null) {
|
|
|
+ System.out.println("获取床位费项失败: 类型=" + itemName + ", 价格=" + itemPrice + ",长者=" + item.getElderName());
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return setMonthlyFee(overheadChargeDO, itemName, itemPrice, 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ private CheckInExpenseItemReqVo processMonthlyNurseExpense(ElderlyCheckInImportVO item) {
|
|
|
+ String itemName = item.getNurseType();
|
|
|
+ BigDecimal itemPrice = item.getNurseFee();
|
|
|
+ OverheadChargeDO overheadChargeDO = sysOverheadChargeMapper.selectOne(new LambdaQueryWrapperX<OverheadChargeDO>()
|
|
|
+ .eq(OverheadChargeDO::getChargeName, itemName)
|
|
|
+ .eq(OverheadChargeDO::getPrice, itemPrice)
|
|
|
+ .eq(OverheadChargeDO::getStatus,1)
|
|
|
+ .eq(OverheadChargeDO::getTenantId,TenantContextHolder.getTenantId()));
|
|
|
+ if (overheadChargeDO == null) {
|
|
|
+ System.out.println("护理费错误: 类型=" + itemName + ",价格=" + itemPrice);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ return setMonthlyFee(overheadChargeDO, itemName, itemPrice, 2);
|
|
|
+ }
|
|
|
+
|
|
|
+ private CheckInExpenseItemReqVo processMonthlyDietExpense(ElderlyCheckInImportVO item) {
|
|
|
+ String itemName = item.getCateringType();
|
|
|
+ BigDecimal itemPrice = item.getCateringFee();
|
|
|
+ OverheadChargeDO overheadChargeDO = sysOverheadChargeMapper.selectOne(new LambdaQueryWrapperX<OverheadChargeDO>()
|
|
|
+ .eq(OverheadChargeDO::getChargeName, itemName)
|
|
|
+ .eq(OverheadChargeDO::getPrice, itemPrice)
|
|
|
+ .eq(OverheadChargeDO::getStatus,1)
|
|
|
+ .eq(OverheadChargeDO::getTenantId,TenantContextHolder.getTenantId()));
|
|
|
+ if (overheadChargeDO == null) {
|
|
|
+ System.out.println("餐饮费错误: 类型=" + itemName + ",价格=" + itemPrice);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return setMonthlyFee(overheadChargeDO, itemName, itemPrice, 3);
|
|
|
+ }
|
|
|
+
|
|
|
+ private CheckInExpenseItemReqVo processMonthlyServiceFees(ElderlyCheckInImportVO item) {
|
|
|
+ String itemName = item.getServiceType();
|
|
|
+ BigDecimal itemPrice = item.getServiceFee();
|
|
|
+ OverheadChargeDO overheadChargeDO = sysOverheadChargeMapper.selectOne(new LambdaQueryWrapperX<OverheadChargeDO>()
|
|
|
+ .eq(OverheadChargeDO::getChargeName, itemName)
|
|
|
+ .eq(OverheadChargeDO::getPrice, itemPrice)
|
|
|
+ .eq(OverheadChargeDO::getStatus,1)
|
|
|
+ .eq(OverheadChargeDO::getTenantId,TenantContextHolder.getTenantId()));
|
|
|
+ if (overheadChargeDO == null) {
|
|
|
+ System.out.println("服务费错误: 类型=" + itemName + ",价格=" + itemPrice);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return setMonthlyFee(overheadChargeDO, itemName, itemPrice, 7);
|
|
|
+ }
|
|
|
+
|
|
|
+ private CheckInExpenseItemReqVo processMonthlyExaminationFees(ElderlyCheckInImportVO item) {
|
|
|
+ String itemName = "诊查费";
|
|
|
+ BigDecimal itemPrice = item.getExaminationFee();
|
|
|
+ OverheadChargeDO overheadChargeDO = sysOverheadChargeMapper.selectOne(new LambdaQueryWrapperX<OverheadChargeDO>()
|
|
|
+ .eq(OverheadChargeDO::getChargeName, itemName)
|
|
|
+ .eq(OverheadChargeDO::getPrice, itemPrice)
|
|
|
+ .eq(OverheadChargeDO::getStatus,1)
|
|
|
+ .eq(OverheadChargeDO::getTenantId,TenantContextHolder.getTenantId()));
|
|
|
+ if (overheadChargeDO == null) {
|
|
|
+ System.out.println("诊查费错误: 类型=" + itemName + ",价格=" + itemPrice);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return setMonthlyFee(overheadChargeDO, itemName, itemPrice, 7);
|
|
|
+ }
|
|
|
+
|
|
|
+ private CheckInExpenseItemReqVo setMonthlyFee(OverheadChargeDO overheadChargeDO, String itemName, BigDecimal itemPrice, int expenseType) {
|
|
|
+ CheckInExpenseItemReqVo monthlyItem = new CheckInExpenseItemReqVo();
|
|
|
+ long itemCategoryId = Long.parseLong(overheadChargeDO.getSuperiorsId());
|
|
|
+ monthlyItem.setItemCategoryId(itemCategoryId);
|
|
|
+ monthlyItem.setItemCategoryName(overheadChargeDO.getCategoryName());
|
|
|
+ monthlyItem.setItemId(overheadChargeDO.getId());
|
|
|
+ monthlyItem.setItemName(itemName);
|
|
|
+
|
|
|
+ monthlyItem.setCount(1);
|
|
|
+ monthlyItem.setIsOneTimeFee(0);
|
|
|
+ monthlyItem.setIsDiscount(0);
|
|
|
+ monthlyItem.setIsDeposit(0);
|
|
|
+ monthlyItem.setIsFreeGift(0);
|
|
|
+ monthlyItem.setIsHirePurchase(0);
|
|
|
+ monthlyItem.setIsMonthlyExpense(1);
|
|
|
+
|
|
|
+ monthlyItem.setType(expenseType); // 床位费1,护理费2
|
|
|
+ monthlyItem.setTenantId(TenantContextHolder.getTenantId());
|
|
|
+ monthlyItem.setDiscount(null);
|
|
|
+
|
|
|
+ monthlyItem.setAmount(itemPrice);
|
|
|
+ monthlyItem.setDiscountAmount(BigDecimal.valueOf(0.0));
|
|
|
+ monthlyItem.setActualAmount(itemPrice);
|
|
|
+ monthlyItem.setTotalAmount(itemPrice);
|
|
|
+
|
|
|
+ return monthlyItem;
|
|
|
+ }
|
|
|
+
|
|
|
+ private CheckInCreateReqVO preCheckIn(ElderlyCheckInImportVO item){
|
|
|
+ CheckInCreateReqVO checkInCreateReqVO = new CheckInCreateReqVO();
|
|
|
+ ElderlyInfoDO elderlyInfoDO = elderlyInfoMapper.selectOne(new LambdaQueryWrapperX<ElderlyInfoDO>()
|
|
|
+ .eq(ElderlyInfoDO::getIdCard, item.getIdCard())
|
|
|
+ .eq(ElderlyInfoDO::getTenantId,TenantContextHolder.getTenantId()));
|
|
|
+ if(elderlyInfoDO == null){
|
|
|
+ log.info("{},该条记录异常,无该身份证长者",item.getElderName());
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ CheckInContractReqVO contractDO = new CheckInContractReqVO();
|
|
|
+ contractDO.setElderId(elderlyInfoDO.getId());
|
|
|
+ contractDO.setElderName(elderlyInfoDO.getElderName());
|
|
|
+ contractDO.setBeginTime(item.getContractBeginDate());
|
|
|
+ contractDO.setContractNumber(item.getContractNumber());
|
|
|
+ // 多少年
|
|
|
+ int yearNum = Integer.parseInt(item.getContractYear().replace("年", ""));
|
|
|
+ // Date -> LocalDate
|
|
|
+ LocalDate localDate = item.getContractBeginDate().toInstant()
|
|
|
+ .atZone(ZoneId.systemDefault())
|
|
|
+ .toLocalDate();
|
|
|
+ // 增加年份
|
|
|
+ LocalDate newLocalDate = localDate.plusYears(yearNum);
|
|
|
+ contractDO.setExpireTime(Date.from(newLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()));
|
|
|
+ contractDO.setStatus(1);
|
|
|
+ contractDO.setTimes(0);
|
|
|
+ contractDO.setInStatusType("1");
|
|
|
+ CheckInExpenseSaveReqVO reqVO = new CheckInExpenseSaveReqVO();
|
|
|
+ List<CheckInExpenseItemReqVo> monthlyExpenseList = new ArrayList<>();
|
|
|
+ // 2.1 床位费
|
|
|
+ monthlyExpenseList.add(processMonthlyBedExpense(item));
|
|
|
+ // 2.1 护理费
|
|
|
+ monthlyExpenseList.add(processMonthlyNurseExpense(item));
|
|
|
+ // 2.2 餐饮
|
|
|
+ monthlyExpenseList.add(processMonthlyDietExpense(item));
|
|
|
+ // 2.3 服务费
|
|
|
+ monthlyExpenseList.add(processMonthlyServiceFees(item));
|
|
|
+ // 2.4 诊查费
|
|
|
+ monthlyExpenseList.add(processMonthlyExaminationFees(item));
|
|
|
+ monthlyExpenseList = monthlyExpenseList.stream().filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
+ BigDecimal total = monthlyExpenseList.stream()
|
|
|
+ .map(CheckInExpenseItemReqVo::getActualAmount)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ reqVO.setMonthlyExpenses(monthlyExpenseList);
|
|
|
+
|
|
|
+ List<CheckInExpenseItemReqVo> oneTimeExpensesList = new ArrayList<>();
|
|
|
+ oneTimeExpensesList.add(processDeposit(item));
|
|
|
+ oneTimeExpensesList = oneTimeExpensesList.stream().filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
+ reqVO.setOneTimeExpenses(oneTimeExpensesList);
|
|
|
+ reqVO.setStageExpenses(new ArrayList<>());
|
|
|
+ // 5. 其他字段
|
|
|
+ String totalBedName = item.getBedName();
|
|
|
+ String[] parts = totalBedName.split("-"); // 按">"分割字符串
|
|
|
+ String buildName = parts[0]; // "3-5号楼"
|
|
|
+ String floorName = parts[1]; // "1F"
|
|
|
+ String roomName = parts[2]; // "110"
|
|
|
+ String bedName = parts[3]; // "01"
|
|
|
+
|
|
|
+ long bedId = buildBedMapper.selectBedIdByFullName(TenantContextHolder.getTenantId(),buildName, floorName, roomName, bedName);
|
|
|
+ if (bedId == -1L) {
|
|
|
+ log.error(item.getElderName()+",bedId=-1:" + buildName + "-" + floorName + "-" + roomName + "-" + bedName);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ reqVO.setElderId(elderlyInfoDO.getId());
|
|
|
+ reqVO.setTotalAmount(total);
|
|
|
+ reqVO.setBedId(bedId);
|
|
|
+ reqVO.setCheckInTime(item.getContractBeginDate());
|
|
|
+ reqVO.setCheckInDeadlineTime(contractDO.getExpireTime());
|
|
|
+ NurseLevelDO nurseLevelDO = nurseLevelMapper.selectOne(new LambdaQueryWrapperX<NurseLevelDO>()
|
|
|
+ .eq(NurseLevelDO::getNurseLevelName, item.getNurseLevel())
|
|
|
+ .eq(NurseLevelDO::getTenantId, TenantContextHolder.getTenantId()));
|
|
|
+ if(nurseLevelDO == null){
|
|
|
+ log.info("{},该条记录异常,无该护理等级:{}",item.getElderName(),item.getNurseLevel());
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ reqVO.setNurseLevelId(nurseLevelDO.getId());
|
|
|
+ reqVO.setIsPrivateRoom(item.getIsPrivate().equals("是") ? 1 : 0);
|
|
|
+ reqVO.setSpecialCareNotes("");
|
|
|
+ checkInCreateReqVO.setElderlyId(elderlyInfoDO.getId());
|
|
|
+ checkInCreateReqVO.setElderlyContractDO(contractDO);
|
|
|
+ checkInCreateReqVO.setExpenseBO(reqVO);
|
|
|
+ checkInCreateReqVO.setType(9);
|
|
|
+ checkInCreateReqVO.setTenantId(TenantContextHolder.getTenantId());
|
|
|
+ return checkInCreateReqVO;
|
|
|
+ }
|
|
|
+
|
|
|
+ private CheckInExpenseItemReqVo processDeposit(ElderlyCheckInImportVO item){
|
|
|
+ CheckInExpenseItemReqVo deposit = new CheckInExpenseItemReqVo();
|
|
|
+ OverheadChargeDO depositDO = sysOverheadChargeMapper.selectOne(new LambdaQueryWrapperX<OverheadChargeDO>()
|
|
|
+ .like(OverheadChargeDO::getChargeName, "押金")
|
|
|
+ .eq(OverheadChargeDO::getPrice, item.getDeposit())
|
|
|
+ .eq(OverheadChargeDO::getTenantId,TenantContextHolder.getTenantId()));
|
|
|
+ if(depositDO == null){
|
|
|
+ log.info("{},该条记录异常,无该金额的押金:{}",item.getElderName(),item.getDeposit());
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ deposit.setItemId(depositDO.getId());
|
|
|
+ deposit.setItemName(depositDO.getChargeName());
|
|
|
+ deposit.setItemCategoryId(Long.valueOf(depositDO.getSuperiorsId()));
|
|
|
+ deposit.setItemCategoryName("押金");
|
|
|
+ deposit.setAmount(item.getDeposit());
|
|
|
+ deposit.setActualAmount(item.getDeposit());
|
|
|
+ deposit.setTotalAmount(item.getDeposit());
|
|
|
+ deposit.setIsOneTimeFee(1);
|
|
|
+ deposit.setCount(1);
|
|
|
+ deposit.setIsDeposit(1);
|
|
|
+ deposit.setTenantId(TenantContextHolder.getTenantId());
|
|
|
+ deposit.setChangeStartDate(LocalDate.now());
|
|
|
+ return deposit;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void handleImportCheckIn(List<CheckInCreateReqVO> checkInList){
|
|
|
+ for (CheckInCreateReqVO checkInCreateReqVO : checkInList) {
|
|
|
+ bpmElderlApplyServiceApi.checkInCreate(SecurityFrameworkUtils.getLoginUserId(), (JSONObject)JSON.toJSON(checkInCreateReqVO));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|