|
|
@@ -159,7 +159,7 @@ public class BpmCheckInApiImpl implements BpmCheckInApi {
|
|
|
insertBO.setCheckInTime(elderlyContractDO.getBeginTime());
|
|
|
insertBO.setCreatedTime(new Date());
|
|
|
insertBO.setElderId(createReqVO.getElderlyId());
|
|
|
- insertBO.setStatus(2);
|
|
|
+ insertBO.setStatus(1);
|
|
|
insertBO.setAssociateId(checkInApplyDO.getId());
|
|
|
insertBO.setCurrentFlag(0);
|
|
|
insertBO.setTenantId(createReqVO.getTenantId());
|
|
|
@@ -215,6 +215,11 @@ public class BpmCheckInApiImpl implements BpmCheckInApi {
|
|
|
Long expenseOrderId = expenseService.createExpense(expenseSaveReqVO);
|
|
|
|
|
|
ElderlyInfoDO elderlyInfoDO = elderlyInfoMapper.selectById(checkInApplyDO.getElderlyId());
|
|
|
+ if (elderlyInfoDO != null && expenseSaveReqVO.getInStatusType() != null) {
|
|
|
+ elderlyInfoDO.setInStatusType(expenseSaveReqVO.getInStatusType());
|
|
|
+ elderlyInfoMapper.updateById(elderlyInfoDO);
|
|
|
+ }
|
|
|
+ applyCheckInStatusOnApproval(elderlyCheckInRecordDO, checkInApplyDO, elderlyInfoDO, expenseSaveReqVO.getTenantId());
|
|
|
|
|
|
notifyMessageSendApi.updateMessageByCodeAndPkMessage(BpmMessageEnum.CHECK_IN_HANDLE.getTemplateCode(), elderlyInfoDO.getId());
|
|
|
|
|
|
@@ -300,6 +305,55 @@ public class BpmCheckInApiImpl implements BpmCheckInApi {
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ @TenantIgnore
|
|
|
+ public Integer unbindBedOnCancel(Long businessId) {
|
|
|
+ ElderlyCheckInRecordDO checkInRecord = recordMapper.selectById(businessId);
|
|
|
+ if (checkInRecord == null || checkInRecord.getAssociateId() == null) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ CheckInApplyDO checkInApplyDO = checkInApplyMapper.selectById(checkInRecord.getAssociateId());
|
|
|
+ if (checkInApplyDO == null || checkInApplyDO.getBedId() == null) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ unlockBed(checkInApplyDO.getBedId(), checkInRecord.getTenantId());
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void applyCheckInStatusOnApproval(ElderlyCheckInRecordDO checkInRecordDO, CheckInApplyDO checkInApplyDO,
|
|
|
+ ElderlyInfoDO elderlyInfoDO, Long tenantId) {
|
|
|
+ if (checkInRecordDO == null || checkInApplyDO == null || elderlyInfoDO == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (checkInApplyDO.getBedId() != null) {
|
|
|
+ BuildBedDO bedDO = buildBedMapper.selectById(checkInApplyDO.getBedId());
|
|
|
+ if (bedDO != null) {
|
|
|
+ elderlyInfoDO.setBedId(bedDO.getId());
|
|
|
+ elderlyInfoDO.setBedName(bedDO.getBedName());
|
|
|
+ elderlyInfoDO.setRoomId(bedDO.getRoomId());
|
|
|
+ elderlyInfoDO.setFloorId(bedDO.getFloorId());
|
|
|
+ elderlyInfoDO.setBuildId(bedDO.getBuildId());
|
|
|
+ lockBed(bedDO.getId(), tenantId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ elderlyInfoDO.setInStatus(1);
|
|
|
+ elderlyInfoDO.setCheckInTime(checkInApplyDO.getCheckInTime());
|
|
|
+ elderlyInfoDO.setNurseLevelId(checkInApplyDO.getNurseLevelId());
|
|
|
+ elderlyInfoDO.setIsPrivateRoom(checkInApplyDO.getIsPrivateRoom());
|
|
|
+ elderlyInfoDO.setSpecialCareNotes(checkInApplyDO.getSpecialCareNotes());
|
|
|
+ if (checkInApplyDO.getNurseLevelId() != null) {
|
|
|
+ NurseLevelDO nurseLevelDO = nurseLevelMapper.selectById(checkInApplyDO.getNurseLevelId());
|
|
|
+ elderlyInfoDO.setNurseLevelName(nurseLevelDO == null ? null : nurseLevelDO.getNurseLevelName());
|
|
|
+ }
|
|
|
+ elderlyInfoMapper.updateById(elderlyInfoDO);
|
|
|
+
|
|
|
+ checkInRecordDO.setStatus(2);
|
|
|
+ if (checkInApplyDO.getCheckInTime() != null) {
|
|
|
+ checkInRecordDO.setCheckInTime(checkInApplyDO.getCheckInTime());
|
|
|
+ }
|
|
|
+ recordMapper.updateById(checkInRecordDO);
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public PageResult<CheckInRecordRespVO> getProcessInstanceCheckInPage(CheckInApiPageReqVO pageReqVO) {
|
|
|
Page<CheckInRecordRespVO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
|
|
|
@@ -320,75 +374,76 @@ public class BpmCheckInApiImpl implements BpmCheckInApi {
|
|
|
@TenantIgnore
|
|
|
public Integer bindBedByType(CheckInCreateReqVO createReqVO, Integer queryType) {
|
|
|
CheckInExpenseSaveReqVO expenseBO = createReqVO.getExpenseBO();
|
|
|
-
|
|
|
- // 绑定床位信息
|
|
|
- ElderlyInfoDO elderlyInfo = elderlyInfoMapper.selectById(expenseBO.getElderId());
|
|
|
- Long bedId = elderlyInfo.getBedId();
|
|
|
- BuildBedDO bedDO = buildBedMapper.selectById(expenseBO.getBedId());
|
|
|
- // queryType 0:绑定 1:解绑
|
|
|
- if (0 == queryType) {
|
|
|
- if (bedDO != null) {
|
|
|
- elderlyInfo.setRoomId(bedDO.getRoomId());
|
|
|
- elderlyInfo.setFloorId(bedDO.getFloorId());
|
|
|
- elderlyInfo.setBuildId(bedDO.getBuildId());
|
|
|
-
|
|
|
- bedDO.setStatus(1);
|
|
|
- buildBedMapper.updateById(bedDO);
|
|
|
-
|
|
|
- BuildRoomDO roomDO = buildRoomMapper.selectById(bedDO.getRoomId());
|
|
|
- // TODO 为什么不在楼栋房间表增加床位数量字段,状态增加满员,更加精确形容房间的状态
|
|
|
- roomDO.setStatus(1);
|
|
|
- buildRoomMapper.updateById(roomDO);
|
|
|
- }
|
|
|
- } else {
|
|
|
- // 解绑之前的床位
|
|
|
- BuildBedDO historyBedDO = buildBedMapper.selectById(bedId);
|
|
|
- if (null != historyBedDO) {
|
|
|
- // 释放之前的床位
|
|
|
- historyBedDO.setStatus(0);
|
|
|
- buildBedMapper.updateById(historyBedDO);
|
|
|
- BuildRoomDO historyRoomDO = buildRoomMapper.selectById(historyBedDO.getRoomId());
|
|
|
- List<BuildBedDO> buildBedDOS = buildBedMapper.selectList(new LambdaQueryWrapperX<BuildBedDO>()
|
|
|
- .eq(BuildBedDO::getRoomId, bedDO.getRoomId())
|
|
|
- .eq(BuildBedDO::getTenantId, createReqVO.getTenantId()));
|
|
|
- if(null != buildBedDOS && buildBedDOS.size() == 1) {
|
|
|
- historyRoomDO.setStatus(0);
|
|
|
- buildRoomMapper.updateById(historyRoomDO);
|
|
|
- }
|
|
|
- }
|
|
|
- if (null != bedDO) {
|
|
|
- elderlyInfo.setRoomId(bedDO.getRoomId());
|
|
|
- elderlyInfo.setFloorId(bedDO.getFloorId());
|
|
|
- elderlyInfo.setBuildId(bedDO.getBuildId());
|
|
|
-
|
|
|
- bedDO.setStatus(1);
|
|
|
- buildBedMapper.updateById(bedDO);
|
|
|
- BuildRoomDO roomDO = buildRoomMapper.selectById(bedDO.getRoomId());
|
|
|
- roomDO.setStatus(1);
|
|
|
- buildRoomMapper.updateById(roomDO);
|
|
|
-
|
|
|
+ if (expenseBO == null || expenseBO.getElderId() == null || expenseBO.getBedId() == null) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ Long tenantId = createReqVO.getTenantId();
|
|
|
+ Long elderId = expenseBO.getElderId();
|
|
|
+ Long newBedId = expenseBO.getBedId();
|
|
|
+
|
|
|
+ if (Integer.valueOf(1).equals(queryType)) {
|
|
|
+ Long historyBedId = getLatestProcessBedId(elderId, tenantId, newBedId);
|
|
|
+ if (historyBedId != null) {
|
|
|
+ unlockBed(historyBedId, tenantId);
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
- elderlyInfo.setInStatus(1);
|
|
|
- elderlyInfo.setBedId(expenseBO.getBedId());
|
|
|
- elderlyInfo.setCheckInTime(expenseBO.getCheckInTime());
|
|
|
- elderlyInfo.setNurseLevelId(expenseBO.getNurseLevelId());
|
|
|
- elderlyInfo.setIsPrivateRoom(expenseBO.getIsPrivateRoom());
|
|
|
- NurseLevelDO nurseLevelDO = nurseLevelMapper.selectById(expenseBO.getNurseLevelId());
|
|
|
- elderlyInfo.setNurseLevelName(nurseLevelDO == null ? null : nurseLevelDO.getNurseLevelName());
|
|
|
- elderlyInfoMapper.updateById(elderlyInfo);
|
|
|
- ElderlyCheckInRecordDO elderlyCheckInRecord = recordMapper.selectOne(new LambdaQueryWrapperX<ElderlyCheckInRecordDO>()
|
|
|
- .eq(ElderlyCheckInRecordDO::getElderId, elderlyInfo.getId())
|
|
|
- .eq(ElderlyCheckInRecordDO::getTenantId, createReqVO.getTenantId())
|
|
|
+ lockBed(newBedId, tenantId);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Long getLatestProcessBedId(Long elderId, Long tenantId, Long excludeBedId) {
|
|
|
+ ElderlyCheckInRecordDO historyRecord = recordMapper.selectOne(new LambdaQueryWrapperX<ElderlyCheckInRecordDO>()
|
|
|
+ .eq(ElderlyCheckInRecordDO::getElderId, elderId)
|
|
|
+ .eqIfPresent(ElderlyCheckInRecordDO::getTenantId, tenantId)
|
|
|
+ .eq(ElderlyCheckInRecordDO::getCurrentFlag, 1)
|
|
|
.orderByDesc(ElderlyCheckInRecordDO::getCreatedTime)
|
|
|
.last("LIMIT 1"));
|
|
|
- if (elderlyCheckInRecord != null) {
|
|
|
- elderlyCheckInRecord.setStatus(2); //修改状态为已入住
|
|
|
- elderlyCheckInRecord.setCheckInTime(expenseBO.getCheckInTime());
|
|
|
- recordMapper.updateById(elderlyCheckInRecord);
|
|
|
+ if (historyRecord == null || historyRecord.getAssociateId() == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ CheckInApplyDO historyApply = checkInApplyMapper.selectById(historyRecord.getAssociateId());
|
|
|
+ if (historyApply == null || historyApply.getBedId() == null) {
|
|
|
+ return null;
|
|
|
}
|
|
|
+ if (excludeBedId != null && excludeBedId.equals(historyApply.getBedId())) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return historyApply.getBedId();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void unlockBed(Long bedId, Long tenantId) {
|
|
|
+ BuildBedDO bedDO = buildBedMapper.selectById(bedId);
|
|
|
+ if (bedDO == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ bedDO.setStatus(0);
|
|
|
+ buildBedMapper.updateById(bedDO);
|
|
|
+ updateRoomStatus(bedDO.getRoomId(), tenantId);
|
|
|
+ }
|
|
|
|
|
|
- return null;
|
|
|
+ private void lockBed(Long bedId, Long tenantId) {
|
|
|
+ BuildBedDO bedDO = buildBedMapper.selectById(bedId);
|
|
|
+ if (bedDO == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ bedDO.setStatus(1);
|
|
|
+ buildBedMapper.updateById(bedDO);
|
|
|
+ updateRoomStatus(bedDO.getRoomId(), tenantId);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void updateRoomStatus(Long roomId, Long tenantId) {
|
|
|
+ if (roomId == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ BuildRoomDO roomDO = buildRoomMapper.selectById(roomId);
|
|
|
+ if (roomDO == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Long occupiedCount = buildBedMapper.selectCount(new LambdaQueryWrapperX<BuildBedDO>()
|
|
|
+ .eq(BuildBedDO::getRoomId, roomId)
|
|
|
+ .eqIfPresent(BuildBedDO::getTenantId, tenantId)
|
|
|
+ .ne(BuildBedDO::getStatus, 0));
|
|
|
+ roomDO.setStatus(occupiedCount != null && occupiedCount > 0 ? 1 : 0);
|
|
|
+ buildRoomMapper.updateById(roomDO);
|
|
|
}
|
|
|
}
|