|
|
@@ -163,6 +163,12 @@ public class ElderlyInfoServiceImpl implements ElderlyInfoService {
|
|
|
@Resource
|
|
|
private ExpenseOrderItemMapper expenseOrderItemMapper;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private ExpenseMapper expenseMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private ExpenseItemMapper expenseItemMapper;
|
|
|
+
|
|
|
@Resource
|
|
|
private ElderlyHealthRecordMapper elderlyHealthRecordMapper;
|
|
|
|
|
|
@@ -871,6 +877,9 @@ public class ElderlyInfoServiceImpl implements ElderlyInfoService {
|
|
|
@TenantIgnore
|
|
|
public CheckInRecordDetailRespVO getCheckInDetail(Long id) {
|
|
|
CheckInRecordDetailRespVO detailRespVO = elderlyInfoMapper.getCheckInDetail(id);
|
|
|
+ if (detailRespVO == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
List<RelativesDO> relatives = relativesMapper.selectList(new LambdaQueryWrapper<RelativesDO>().eq(RelativesDO::getPeopleId, detailRespVO.getElderId()));
|
|
|
detailRespVO.setRelativesList(relatives);
|
|
|
Gson gson = new Gson();
|
|
|
@@ -894,6 +903,124 @@ public class ElderlyInfoServiceImpl implements ElderlyInfoService {
|
|
|
return detailRespVO;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ @TenantIgnore
|
|
|
+ public CheckInRecordDetailRespVO getCheckInDetailByElderId(Long contractId) {
|
|
|
+ ElderlyContractDO elderlyContract = elderlyContractMapper.selectById(contractId);
|
|
|
+ if (elderlyContract == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ ElderlyInfoDO elderlyInfo = elderlyInfoMapper.selectById(elderlyContract.getElderId());
|
|
|
+ if (elderlyInfo == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ CheckInRecordDetailRespVO detailRespVO = new CheckInRecordDetailRespVO();
|
|
|
+ ElderlyCheckInRecordDO checkInRecord = elderlyCheckInRecordMapper.selectOne(new LambdaQueryWrapperX<ElderlyCheckInRecordDO>()
|
|
|
+ .eq(ElderlyCheckInRecordDO::getElderId, elderlyInfo.getId())
|
|
|
+ .eq(ElderlyCheckInRecordDO::getCurrentFlag, 0)
|
|
|
+ .orderByDesc(ElderlyCheckInRecordDO::getCreatedTime)
|
|
|
+ .last("LIMIT 1"));
|
|
|
+ if (checkInRecord != null) {
|
|
|
+ CheckInRecordDetailRespVO currentCheckInDetail = getCheckInDetail(checkInRecord.getId());
|
|
|
+ if (currentCheckInDetail != null) {
|
|
|
+ detailRespVO.setStatus(currentCheckInDetail.getStatus());
|
|
|
+ detailRespVO.setProcessInstanceId(currentCheckInDetail.getProcessInstanceId());
|
|
|
+ detailRespVO.setType(currentCheckInDetail.getType());
|
|
|
+ detailRespVO.setBpmStatus(currentCheckInDetail.getBpmStatus());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ detailRespVO.setElderId(String.valueOf(elderlyInfo.getId()));
|
|
|
+ detailRespVO.setElderName(elderlyInfo.getElderName());
|
|
|
+ detailRespVO.setElderAge(elderlyInfo.getElderAge() == null ? null : elderlyInfo.getElderAge().longValue());
|
|
|
+ detailRespVO.setElderSex(elderlyInfo.getElderSex());
|
|
|
+ detailRespVO.setIdCard(elderlyInfo.getIdCard());
|
|
|
+ detailRespVO.setBedId(elderlyInfo.getBedId() == null ? null : String.valueOf(elderlyInfo.getBedId()));
|
|
|
+ detailRespVO.setBedName(buildService.getFullBedName(elderlyInfo.getId()));
|
|
|
+ detailRespVO.setIsPrivateRoom(elderlyInfo.getIsPrivateRoom());
|
|
|
+ detailRespVO.setSpecialCareNotes(elderlyInfo.getSpecialCareNotes());
|
|
|
+ detailRespVO.setTenantId(elderlyInfo.getTenantId());
|
|
|
+ detailRespVO.setRelativesList(relativesMapper.selectList(new LambdaQueryWrapper<RelativesDO>()
|
|
|
+ .eq(RelativesDO::getPeopleId, elderlyInfo.getId())));
|
|
|
+ detailRespVO.setNurseLevelId(elderlyInfo.getNurseLevelId());
|
|
|
+ NurseLevelDO nurseLevelDO = nurseLevelMapper.selectById(elderlyInfo.getNurseLevelId());
|
|
|
+ detailRespVO.setNurseLevelName(nurseLevelDO == null ? elderlyInfo.getNurseLevelName() : nurseLevelDO.getNurseLevelName());
|
|
|
+ detailRespVO.setCheckInTime(toLocalDate(elderlyContract.getBeginTime()));
|
|
|
+ detailRespVO.setCheckInDeadlineTime(toLocalDate(elderlyContract.getExpireTime()));
|
|
|
+
|
|
|
+ CheckInContractReqVO contractReqVO = new CheckInContractReqVO();
|
|
|
+ BeanUtils.copyProperties(elderlyContract, contractReqVO);
|
|
|
+ detailRespVO.setElderlyContractDO(contractReqVO);
|
|
|
+
|
|
|
+ List<ExpenseDO> expenseList = expenseMapper.selectList(new LambdaQueryWrapperX<ExpenseDO>()
|
|
|
+ .eq(ExpenseDO::getContractId, contractId)
|
|
|
+ .orderByDesc(ExpenseDO::getCreatedTime));
|
|
|
+ if (CollectionUtil.isEmpty(expenseList)) {
|
|
|
+ detailRespVO.setExpenseItems(Collections.emptyList());
|
|
|
+ detailRespVO.setMonthlyExpenses(Collections.emptyList());
|
|
|
+ detailRespVO.setOneTimeExpenses(Collections.emptyList());
|
|
|
+ detailRespVO.setStageExpenses(Collections.emptyList());
|
|
|
+ return detailRespVO;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Long> expenseIds = expenseList.stream().map(ExpenseDO::getId).collect(Collectors.toList());
|
|
|
+ List<ExpenseItemDO> expenseItems = expenseItemMapper.selectList(new LambdaQueryWrapperX<ExpenseItemDO>()
|
|
|
+ .in(ExpenseItemDO::getExpenseId, expenseIds)
|
|
|
+ .orderByAsc(ExpenseItemDO::getCreateTime)
|
|
|
+ .orderByAsc(ExpenseItemDO::getId));
|
|
|
+
|
|
|
+ detailRespVO.setExpenseItems(expenseItems);
|
|
|
+ detailRespVO.setRemark(expenseList.stream()
|
|
|
+ .map(ExpenseDO::getRemark)
|
|
|
+ .filter(StringUtils::isNotBlank)
|
|
|
+ .findFirst()
|
|
|
+ .orElse(null));
|
|
|
+ detailRespVO.setTotalAmount(expenseItems.stream()
|
|
|
+ .map(this::resolveExpenseAmount)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+
|
|
|
+ List<CheckInExpenseItemReqVo> allExpenseItems = expenseItems.stream().map(item -> {
|
|
|
+ CheckInExpenseItemReqVo reqVo = new CheckInExpenseItemReqVo();
|
|
|
+ BeanUtils.copyProperties(item, reqVo);
|
|
|
+ return reqVo;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ detailRespVO.setMonthlyExpenses(allExpenseItems.stream()
|
|
|
+ .filter(item -> Objects.equals(item.getIsMonthlyExpense(), 1))
|
|
|
+ .collect(Collectors.toList()));
|
|
|
+ detailRespVO.setOneTimeExpenses(allExpenseItems.stream()
|
|
|
+ .filter(item -> Objects.equals(item.getIsOneTimeFee(), 1) || Objects.equals(item.getIsDeposit(), 1))
|
|
|
+ .collect(Collectors.toList()));
|
|
|
+ detailRespVO.setStageExpenses(allExpenseItems.stream()
|
|
|
+ .filter(item -> !Objects.equals(item.getIsMonthlyExpense(), 1))
|
|
|
+ .filter(item -> !Objects.equals(item.getIsOneTimeFee(), 1))
|
|
|
+ .filter(item -> !Objects.equals(item.getIsDeposit(), 1))
|
|
|
+ .collect(Collectors.toList()));
|
|
|
+ detailRespVO.setBedType(allExpenseItems.stream()
|
|
|
+ .filter(item -> Objects.equals(item.getType(), 1))
|
|
|
+ .map(CheckInExpenseItemReqVo::getItemName)
|
|
|
+ .filter(StringUtils::isNotBlank)
|
|
|
+ .findFirst()
|
|
|
+ .orElse(null));
|
|
|
+ return detailRespVO;
|
|
|
+ }
|
|
|
+
|
|
|
+ private LocalDate toLocalDate(Date date) {
|
|
|
+ return date == null ? null : date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
|
|
+ }
|
|
|
+
|
|
|
+ private BigDecimal resolveExpenseAmount(ExpenseItemDO expenseItem) {
|
|
|
+ if (expenseItem.getTotalAmount() != null) {
|
|
|
+ return expenseItem.getTotalAmount();
|
|
|
+ }
|
|
|
+ if (expenseItem.getActualAmount() != null) {
|
|
|
+ return expenseItem.getActualAmount();
|
|
|
+ }
|
|
|
+ if (expenseItem.getAmount() != null) {
|
|
|
+ return expenseItem.getAmount();
|
|
|
+ }
|
|
|
+ return BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
@TenantIgnore
|
|
|
public ElderlyHomeRespVO getHomeDataElderlyPortrait(ElderlyInfoHomeDataReqVO reqVO) {
|
|
|
@@ -3055,6 +3182,3 @@ public class ElderlyInfoServiceImpl implements ElderlyInfoService {
|
|
|
|
|
|
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
-
|