From 28314081239ddbdb0bec61ab7fc87bcab05202d8 Mon Sep 17 00:00:00 2001 From: eight <641137800@qq.com> Date: 星期四, 14 十一月 2024 13:01:41 +0800 Subject: [PATCH] refactor 亲和性 --- jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/devrent/DevRentServiceImpl.java | 142 +++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 124 insertions(+), 18 deletions(-) diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/devrent/DevRentServiceImpl.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/devrent/DevRentServiceImpl.java index abbdbea..fc52a46 100644 --- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/devrent/DevRentServiceImpl.java +++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/devrent/DevRentServiceImpl.java @@ -3,14 +3,17 @@ import cn.lihu.jh.framework.common.pojo.CommonResult; import cn.lihu.jh.framework.security.core.util.SecurityFrameworkUtils; import cn.lihu.jh.module.ecg.controller.admin.jobrecord.vo.JobRecordSaveReqVO; +import cn.lihu.jh.module.ecg.dal.dataobject.checktype.CheckTypeDO; import cn.lihu.jh.module.ecg.dal.dataobject.devmanage.DeviceDO; import cn.lihu.jh.module.ecg.dal.dataobject.jobrecord.JobRecordDO; +import cn.lihu.jh.module.ecg.dal.dataobject.queue.QueueDO; import cn.lihu.jh.module.ecg.dal.mysql.devmanage.DeviceMapper; import cn.lihu.jh.module.ecg.dal.mysql.jobrecord.JobRecordMapper; import cn.lihu.jh.module.ecg.dal.mysql.queue.QueueMapper; import cn.lihu.jh.module.ecg.enums.DevRentStateEnum; import cn.lihu.jh.module.ecg.enums.DevStateEnum; import cn.lihu.jh.module.ecg.enums.QueueStatusEnum; +import cn.lihu.jh.module.ecg.service.queue.QueueServiceTxFunctions; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; @@ -40,6 +43,9 @@ @Service @Validated public class DevRentServiceImpl implements DevRentService { + + @Resource + QueueServiceTxFunctions queueServiceTxFunctions; @Resource private DevRentMapper devRentMapper; @@ -75,7 +81,7 @@ jobTypeList.add( DevRentStateEnum.ROUTINE_CANCELLED.getState()); JobRecordDO jobRecordDO = jobRecordMapper.selectByRentIdDocId(rent_id, userId, jobTypeList); if (null == jobRecordDO) { - List<DevRentDO> devRentDOList = devRentMapper.selectByPatIdAndState(createReqVO.getPatId(), DevRentStateEnum.FREE.getState()); + List<DevRentDO> devRentDOList = devRentMapper.selectByPatAndChecktypeAndState(createReqVO.getPatId(), createReqVO.getCheckType(), DevRentStateEnum.FREE.getState()); if (devRentDOList.size() == 0) throw exception(DEV_INSTALL_NOT_APPOINTMENT); else if (devRentDOList.size() != 1) { @@ -98,6 +104,7 @@ jobRecordSaveReqVO.setJobType( DevRentStateEnum.ROUTINE_FINISH.getState() ); jobRecordSaveReqVO.setRemark(createReqVO.getRemark()); jobRecordSaveReqVO.setSummary(""); + jobRecordSaveReqVO.setCheckType( createReqVO.getCheckType() ); JobRecordDO jobRecord = BeanUtils.toBean(jobRecordSaveReqVO, JobRecordDO.class); jobRecordMapper.insert(jobRecord); @@ -117,18 +124,35 @@ } // 鏇存柊..闃熷垪鐘舵�� - queueMapper.updateBedQueueStatus(createReqVO.getRoomId(), createReqVO.getBedNo(), - QueueStatusEnum.ONSTAGE.getStatus(), QueueStatusEnum.FINISH.getStatus()); + //queueMapper.updateBedQueueStatus(createReqVO.getRoomId(), createReqVO.getBedNo(), + // QueueStatusEnum.ONSTAGE.getStatus(), QueueStatusEnum.FINISH.getStatus()); + + QueueDO firstOnStageQueueItem = queueMapper.getFirstItemByBedAndStatus(createReqVO.getRoomId(), + createReqVO.getBedNo(), QueueStatusEnum.ONSTAGE.getStatus()); + // QueueStatusEnum.ONSTAGE => QueueStatusEnum.FINISH + firstOnStageQueueItem.setStatus(QueueStatusEnum.FINISH.getStatus()); // 榛樿鐘舵�� 璁剧疆 + queueMapper.updateById( firstOnStageQueueItem ); + + // 妫�鏌ラ」鐩�.浜插拰鎬� 澶勭悊閫昏緫 + CheckTypeDO checkTypeDO = queueServiceTxFunctions.getCheckTypeItem( firstOnStageQueueItem.getBookCheckType() ); + if (checkTypeDO.getAffinityCheckTypes().length > 0) { + procAffinityWhenRoutineFinish( firstOnStageQueueItem.getPatId(), checkTypeDO.getAffinityCheckTypes() ); + } return CommonResult.success(rent_id); } + /** + * 棰嗙敤瀹屾垚 鎿嶄綔 + * @param createReqVO 鍒涘缓淇℃伅 + * @return + */ @Override @Transactional(rollbackFor = Exception.class) public CommonResult<Long> readyOperation(DevRentSaveReqVO createReqVO) { Long userId = SecurityFrameworkUtils.getLoginUserId(); String userNickname = SecurityFrameworkUtils.getLoginUserNickname(); - Long rent_id = createReqVO.getId(); + Long rent_id = createReqVO.getId(); // dev_rent 琛ㄧ殑ID // 鏍囨敞璁惧 宸查鍙� Integer ret = markDevRecieved(createReqVO.getDevId(), rent_id); @@ -141,7 +165,7 @@ jobTypeList.add( DevRentStateEnum.READY_CANCELLED.getState()); JobRecordDO jobRecordDO = jobRecordMapper.selectByRentIdDocId(rent_id, userId, jobTypeList); if (null == jobRecordDO) { - List<DevRentDO> devRentDOList = devRentMapper.selectByPatIdAndState(createReqVO.getPatId(), DevRentStateEnum.FREE.getState()); + List<DevRentDO> devRentDOList = devRentMapper.selectByPatAndChecktypeAndState(createReqVO.getPatId(), createReqVO.getCheckType(), DevRentStateEnum.FREE.getState()); if (devRentDOList.size() == 0) throw exception(DEV_INSTALL_NOT_APPOINTMENT); else if (devRentDOList.size() != 1) { @@ -164,6 +188,7 @@ jobRecordSaveReqVO.setJobType( DevRentStateEnum.READY.getState() ); jobRecordSaveReqVO.setRemark(createReqVO.getRemark()); jobRecordSaveReqVO.setSummary(""); + jobRecordSaveReqVO.setCheckType( createReqVO.getCheckType() ); JobRecordDO jobRecord = BeanUtils.toBean(jobRecordSaveReqVO, JobRecordDO.class); jobRecordMapper.insert(jobRecord); @@ -183,9 +208,21 @@ } // 鏇存柊..闃熷垪鐘舵�� - queueMapper.updateBedQueueStatus(createReqVO.getRoomId(), createReqVO.getBedNo(), - QueueStatusEnum.ONSTAGE.getStatus(), QueueStatusEnum.RECEIVED.getStatus()); + //queueMapper.updateBedQueueStatus(createReqVO.getRoomId(), createReqVO.getBedNo(), + // QueueStatusEnum.ONSTAGE.getStatus(), QueueStatusEnum.RECEIVED.getStatus()); + // QueueStatusEnum.ONSTAGE => QueueStatusEnum.RECEIVED + QueueDO bedOnStageQueueItem = queueMapper.getFirstItemByBedAndStatus( + createReqVO.getRoomId(), createReqVO.getBedNo(), QueueStatusEnum.ONSTAGE.getStatus() ); + CheckTypeDO checkTypeDO = queueServiceTxFunctions.getCheckTypeItem( bedOnStageQueueItem.getBookCheckType() ); + bedOnStageQueueItem.setStatus(QueueStatusEnum.RECEIVED.getStatus()); // [宸查鐢╙ 鐘舵�� + + // 妫�鏌ラ」鐩�.浜插拰鎬� 澶勭悊閫昏緫 , 鏇存柊 bedOnStageQueueItem + if (checkTypeDO.getAffinityCheckTypes().length > 0) { + procAffinityWhenReadyFinish(/*IN, OUT*/bedOnStageQueueItem, checkTypeDO.getAffinityCheckTypes()); + } + + queueMapper.updateById( bedOnStageQueueItem ); return CommonResult.success(rent_id); } @@ -216,7 +253,7 @@ // 绗竴娆� 瀹夎鎿嶄綔 if (null == jobRecordDO) { - List<DevRentDO> devRentDOList = devRentMapper.selectByPatIdAndState(createReqVO.getPatId(), DevRentStateEnum.READY.getState()); + List<DevRentDO> devRentDOList = devRentMapper.selectByPatAndChecktypeAndState(createReqVO.getPatId(), createReqVO.getCheckType(), DevRentStateEnum.READY.getState()); if (devRentDOList.size() == 0) throw exception(DEV_INSTALL_NOT_RECEIVED); else if (devRentDOList.size() != 1) { @@ -239,6 +276,7 @@ jobRecordSaveReqVO.setJobType( DevRentStateEnum.INSTALLED.getState() ); jobRecordSaveReqVO.setRemark(createReqVO.getRemark()); jobRecordSaveReqVO.setSummary(""); + jobRecordSaveReqVO.setCheckType( createReqVO.getCheckType() ); JobRecordDO jobRecord = BeanUtils.toBean(jobRecordSaveReqVO, JobRecordDO.class); jobRecordMapper.insert(jobRecord); @@ -257,8 +295,20 @@ } // 鏇存柊..闃熷垪鐘舵�� - queueMapper.updateBedQueueStatus(createReqVO.getRoomId(), createReqVO.getBedNo(), - QueueStatusEnum.INSTALLING.getStatus(), QueueStatusEnum.FINISH.getStatus()); + //queueMapper.updateBedQueueStatus(createReqVO.getRoomId(), createReqVO.getBedNo(), + // QueueStatusEnum.INSTALLING.getStatus(), QueueStatusEnum.FINISH.getStatus()); + + // QueueStatusEnum.INSTALLING => QueueStatusEnum.FINISH + QueueDO bedInstallingQueueItem = queueMapper.getFirstItemByBedAndStatus( + createReqVO.getRoomId(), createReqVO.getBedNo(), QueueStatusEnum.INSTALLING.getStatus()); + bedInstallingQueueItem.setStatus(QueueStatusEnum.FINISH.getStatus()); // 榛樿鐘舵�� 璁剧疆 + queueMapper.updateById( bedInstallingQueueItem ); + + // 妫�鏌ラ」鐩�.浜插拰鎬� 澶勭悊閫昏緫 + CheckTypeDO checkTypeDO = queueServiceTxFunctions.getCheckTypeItem( bedInstallingQueueItem.getBookCheckType() ); + if (checkTypeDO.getAffinityCheckTypes().length > 0) { + procAffinityWhenInstallFinish(bedInstallingQueueItem, checkTypeDO.getAffinityCheckTypes()); + } return CommonResult.success(rent_id); } @@ -291,6 +341,7 @@ jobRecordSaveReqVO.setJobType( DevRentStateEnum.DISMANTLED.getState() ); jobRecordSaveReqVO.setRemark( updateReqVO.getRemark() ); jobRecordSaveReqVO.setSummary( updateReqVO.getInterference() + " " + updateReqVO.getBaseline() + " " + updateReqVO.getDetachment() ); + jobRecordSaveReqVO.setCheckType( updateReqVO.getCheckType() ); JobRecordDO jobRecord = BeanUtils.toBean(jobRecordSaveReqVO, JobRecordDO.class); jobRecordMapper.insert(jobRecord); } else { @@ -329,6 +380,7 @@ jobRecordSaveReqVO.setJobType( DevRentStateEnum.DATAENTERED.getState() ); jobRecordSaveReqVO.setRemark( updateReqVO.getRemark() ); jobRecordSaveReqVO.setSummary( updateReqVO.getInterference() + " " + updateReqVO.getBaseline() + " " + updateReqVO.getDetachment() ); + jobRecordSaveReqVO.setCheckType( updateReqVO.getCheckType() ); JobRecordDO jobRecord = BeanUtils.toBean(jobRecordSaveReqVO, JobRecordDO.class); jobRecordMapper.insert(jobRecord); } else { @@ -360,7 +412,7 @@ jobTypeList.add( DevRentStateEnum.ROUTINE_CANCELLED.getState()); JobRecordDO jobRecordDO = jobRecordMapper.selectByRentIdDocId(rent_id, userId, jobTypeList); if (null == jobRecordDO) { - List<DevRentDO> devRentDOList = devRentMapper.selectByPatIdAndState(createReqVO.getPatId(), DevRentStateEnum.FREE.getState()); + List<DevRentDO> devRentDOList = devRentMapper.selectByPatAndChecktypeAndState(createReqVO.getPatId(), createReqVO.getCheckType(), DevRentStateEnum.FREE.getState()); if (devRentDOList.size() != 1) throw exception(ROUTINE_CHECK_EXIST); @@ -380,6 +432,7 @@ jobRecordSaveReqVO.setJobTime(createReqVO.getRentTime()); jobRecordSaveReqVO.setRemark(createReqVO.getRemark()); jobRecordSaveReqVO.setSummary(""); + jobRecordSaveReqVO.setCheckType( createReqVO.getCheckType() ); JobRecordDO jobRecord = BeanUtils.toBean(jobRecordSaveReqVO, JobRecordDO.class); jobRecordMapper.insert(jobRecord); @@ -420,7 +473,7 @@ jobTypeList.add( DevRentStateEnum.READY_CANCELLED.getState()); JobRecordDO jobRecordDO = jobRecordMapper.selectByRentIdDocId(rent_id, userId, jobTypeList); if (null == jobRecordDO) { - List<DevRentDO> devRentDOList = devRentMapper.selectByPatIdAndState(createReqVO.getPatId(), DevRentStateEnum.FREE.getState()); + List<DevRentDO> devRentDOList = devRentMapper.selectByPatAndChecktypeAndState(createReqVO.getPatId(), createReqVO.getCheckType(), DevRentStateEnum.FREE.getState()); if (devRentDOList.size() != 1) throw exception(DEV_INSTALL_EXIST); @@ -440,6 +493,7 @@ jobRecordSaveReqVO.setJobTime(createReqVO.getRentTime()); jobRecordSaveReqVO.setRemark(createReqVO.getRemark()); jobRecordSaveReqVO.setSummary(""); + jobRecordSaveReqVO.setCheckType( createReqVO.getCheckType() ); JobRecordDO jobRecord = BeanUtils.toBean(jobRecordSaveReqVO, JobRecordDO.class); jobRecordMapper.insert(jobRecord); @@ -480,7 +534,7 @@ jobTypeList.add( DevRentStateEnum.INSTALL_CANCELLED.getState()); JobRecordDO jobRecordDO = jobRecordMapper.selectByRentIdDocId(rent_id, userId, jobTypeList); if (null == jobRecordDO) { - List<DevRentDO> devRentDOList = devRentMapper.selectByPatIdAndState(createReqVO.getPatId(), DevRentStateEnum.READY.getState()); + List<DevRentDO> devRentDOList = devRentMapper.selectByPatAndChecktypeAndState(createReqVO.getPatId(), createReqVO.getCheckType(), DevRentStateEnum.READY.getState()); if (devRentDOList.size() != 1) throw exception(DEV_INSTALL_EXIST); @@ -500,6 +554,7 @@ jobRecordSaveReqVO.setJobTime(createReqVO.getRentTime()); jobRecordSaveReqVO.setRemark(createReqVO.getRemark()); jobRecordSaveReqVO.setSummary(""); + jobRecordSaveReqVO.setCheckType( createReqVO.getCheckType() ); JobRecordDO jobRecord = BeanUtils.toBean(jobRecordSaveReqVO, JobRecordDO.class); jobRecordMapper.insert(jobRecord); @@ -521,23 +576,29 @@ @Transactional(rollbackFor = Exception.class) public CommonResult<Long> dismantleExceptionOperation(DevRentSaveReqVO updateReqVO) { DevStateEnum devStateEnum = null; - if (updateReqVO.getState() == DevStateEnum.DAMAGED.getState()) + DevRentStateEnum devRentStateEnum = null; + if (updateReqVO.getState() == DevStateEnum.DAMAGED.getState()) { devStateEnum = DevStateEnum.DAMAGED; - else if (updateReqVO.getState() == DevStateEnum.LOST.getState()) + devRentStateEnum = DevRentStateEnum.DAMAGED; + } + else if (updateReqVO.getState() == DevStateEnum.LOST.getState()) { devStateEnum = DevStateEnum.LOST; + devRentStateEnum = DevRentStateEnum.LOST; + } else throw exception(DEV_DISMANTLE_EXCEPTION); // 璁惧閬楀け鏃�, 鏍囨敞閬楀け markDevDismantleException( updateReqVO.getDevId(), updateReqVO.getId(), updateReqVO.getReturnTime().toLocalDate(), devStateEnum ); - updateReqVO.setState( DevRentStateEnum.LOST.getState() ); + updateReqVO.setState( devRentStateEnum.getState() ); updateDevRent( updateReqVO ); Long userId = SecurityFrameworkUtils.getLoginUserId(); String userNickname = SecurityFrameworkUtils.getLoginUserNickname(); List<Integer> jobTypeList = new ArrayList<Integer>(); + jobTypeList.add( DevRentStateEnum.DAMAGED.getState()); jobTypeList.add( DevRentStateEnum.LOST.getState()); JobRecordDO jobRecordDO = jobRecordMapper.selectByRentIdDocId(updateReqVO.getId(), userId, jobTypeList); if (null == jobRecordDO) { @@ -549,13 +610,14 @@ jobRecordSaveReqVO.setPatId( updateReqVO.getPatId() ); jobRecordSaveReqVO.setPatName( updateReqVO.getPatName() ); jobRecordSaveReqVO.setJobTime( updateReqVO.getReturnTime() ); - jobRecordSaveReqVO.setJobType( DevRentStateEnum.LOST.getState() ); + jobRecordSaveReqVO.setJobType( devRentStateEnum.getState() ); jobRecordSaveReqVO.setRemark( updateReqVO.getRemark() ); jobRecordSaveReqVO.setSummary( updateReqVO.getInterference() + " " + updateReqVO.getBaseline() + " " + updateReqVO.getDetachment() ); + jobRecordSaveReqVO.setCheckType( updateReqVO.getCheckType() ); JobRecordDO jobRecord = BeanUtils.toBean(jobRecordSaveReqVO, JobRecordDO.class); jobRecordMapper.insert(jobRecord); } else { - jobRecordDO.setJobType( DevRentStateEnum.LOST.getState() ); + jobRecordDO.setJobType( devRentStateEnum.getState() ); jobRecordDO.setJobTime( updateReqVO.getReturnTime() ); jobRecordDO.setRemark( updateReqVO.getRemark() ); jobRecordDO.setSummary( updateReqVO.getInterference() + " " + updateReqVO.getBaseline() + " " + updateReqVO.getDetachment() ); @@ -704,5 +766,49 @@ return 0; } + private void procAffinityWhenRoutineFinish(String patId, Integer[] affinityCheckTypes) { + // 濡傛灉瀛樺湪 [浜插拰-鎺掗槦] 浜插拰椤癸紝鍒欓�夋嫨 鍏朵腑涓�涓翰鍜岄」 鎺ユ浛鍏� 澶勪簬 [灏辫瘖涓璢 + List<QueueDO> affinityAffinityWaitingItems = queueMapper.getCurPatGivenCheckTypesAndStatus( + patId, affinityCheckTypes, QueueStatusEnum.AFFINITY_WAITING.getStatus()); + if (!affinityAffinityWaitingItems.isEmpty()) { + QueueDO tmpQueueDO = affinityAffinityWaitingItems.get(0); + tmpQueueDO.setStatus(QueueStatusEnum.ONSTAGE.getStatus()); + queueMapper.updateById(tmpQueueDO); + } + } + + private void procAffinityWhenReadyFinish(QueueDO bedOnStageQueueItem, Integer[] affinityCheckTypes) { + // 濡傛灉瀛樺湪 [瀹夎涓璢 浜插拰椤癸紝鍒欒窡闅忓叾涓竴涓翰鍜岄」 + List<QueueDO> affinityInstallingItems = queueMapper.getCurPatGivenCheckTypesAndStatus( + bedOnStageQueueItem.getPatId(), affinityCheckTypes, QueueStatusEnum.INSTALLING.getStatus()); + if (!affinityInstallingItems.isEmpty()) { + QueueDO affinityInstallingItem = affinityInstallingItems.get(0); + bedOnStageQueueItem.setStatus(QueueStatusEnum.AFFINITY_RECEIVED.getStatus()); // 浜插拰-棰嗙敤 + bedOnStageQueueItem.setRoomId( affinityInstallingItem.getRoomId() ); + bedOnStageQueueItem.setBedNo( affinityInstallingItem.getBedNo() ); // 棰嗙敤 鍒� 瀹夎 鍙兘浼氬湪涓嶅悓宸ヤ綅 + } + + // 濡傛灉瀛樺湪 [浜插拰-鎺掗槦] 浜插拰椤癸紝鍒欓�夋嫨 鍏朵腑涓�涓翰鍜岄」 鎺ユ浛鍏� 澶勪簬 [灏辫瘖涓璢 + List<QueueDO> affinityAffinityWaitingItems = queueMapper.getCurPatGivenCheckTypesAndStatus( + bedOnStageQueueItem.getPatId(), affinityCheckTypes, QueueStatusEnum.AFFINITY_WAITING.getStatus()); + if (!affinityAffinityWaitingItems.isEmpty()) { + QueueDO tmpQueueDO = affinityAffinityWaitingItems.get(0); + tmpQueueDO.setStatus(QueueStatusEnum.ONSTAGE.getStatus()); + queueMapper.updateById( tmpQueueDO ); + } + } + + private void procAffinityWhenInstallFinish(QueueDO bedInstallingQueueItem, Integer[] affinityCheckTypes) { + List<QueueDO> affinityAffinityReceivedItems = queueMapper.getCurPatGivenCheckTypesAndStatus( + bedInstallingQueueItem.getPatId(), affinityCheckTypes, QueueStatusEnum.AFFINITY_RECEIVED.getStatus()); + if (!affinityAffinityReceivedItems.isEmpty()) { + QueueDO tmpQueueDO = affinityAffinityReceivedItems.get(0); + tmpQueueDO.setStatus(QueueStatusEnum.INSTALLING.getStatus()); + tmpQueueDO.setRoomId( bedInstallingQueueItem.getRoomId() ); + tmpQueueDO.setBedNo( bedInstallingQueueItem.getBedNo() ); // 浠� [棰嗙敤] 鍒� [瀹夎]锛� 鍙灔鍦ㄤ笉鍚屽伐浣嶄笂鎿嶄綔 + queueMapper.updateById(tmpQueueDO); + } + } + } -- Gitblit v1.9.3