eight
2024-09-26 137e9fb1f28d213d2608c12e17ece1dd57cec452
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/devrent/DevRentServiceImpl.java
@@ -8,11 +8,14 @@
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.enums.DevRentStateEnum;
import cn.lihu.jh.module.ecg.enums.DevStateEnum;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import cn.lihu.jh.module.ecg.controller.admin.devrent.vo.*;
@@ -52,22 +55,84 @@
    }
    @Override
    @Transactional
    public CommonResult<Long> installOperation(DevRentSaveReqVO createReqVO) {
    public CommonResult<Long> readyOperation(DevRentSaveReqVO createReqVO) {
        Long userId = SecurityFrameworkUtils.getLoginUserId();
        String userNickname = SecurityFrameworkUtils.getLoginUserNickname();
        // 检查设备编号
        DeviceDO deviceDO = deviceMapper.getDeviceByDevId( createReqVO.getDevId() );
        if (null == deviceDO ) {
        // 标注设备 已领取
        Integer ret = markDevRecieved(createReqVO.getDevId());
        if (null == ret || 0 == ret) {
            return CommonResult.error(DEVICE_NOT_EXISTS);
        }
        Long rent_id = createReqVO.getId();
        if (null == rent_id) {
            List<DevRentDO>  devRentDOList = devRentMapper.selectByPatIdAndState(createReqVO.getPatId(), DevRentStateEnum.FREE.getState());
            if (devRentDOList.size() != 1)
                return CommonResult.error(DEV_INSTALL_EXIST);
            if (devRentDOList.size() == 0)
                return CommonResult.error(DEV_INSTALL_NOT_APPOINTMENT);
            else if (devRentDOList.size() != 1) {
                return CommonResult.error(DEV_INSTALL_EXCEPTION);
            }
            rent_id = devRentDOList.getFirst().getId();
            createReqVO.setId( rent_id );
            createReqVO.setState( DevRentStateEnum.READY.getState() );
            updateDevRent( createReqVO );
            JobRecordSaveReqVO jobRecordSaveReqVO = new JobRecordSaveReqVO();
            jobRecordSaveReqVO.setRentId(rent_id);
            jobRecordSaveReqVO.setDevId(createReqVO.getDevId());
            jobRecordSaveReqVO.setDocId(userId);
            jobRecordSaveReqVO.setDocName(userNickname);
            jobRecordSaveReqVO.setPatId(createReqVO.getPatId());
            jobRecordSaveReqVO.setPatName(createReqVO.getPatName());
            jobRecordSaveReqVO.setJobTime(createReqVO.getRentTime());
            jobRecordSaveReqVO.setJobType( DevRentStateEnum.READY.getState() );
            jobRecordSaveReqVO.setRemark(createReqVO.getRemark());
            jobRecordSaveReqVO.setSummary("");
            JobRecordDO jobRecord = BeanUtils.toBean(jobRecordSaveReqVO, JobRecordDO.class);
            jobRecordMapper.insert(jobRecord);
        } else {
            // 撤销 放弃操作
            createReqVO.setState( DevRentStateEnum.READY.getState() );
            updateDevRent( createReqVO );
            JobRecordDO jobRecordDO = jobRecordMapper.selectByRentIdDocId(rent_id, userId);
            if (null != jobRecordDO) {
                jobRecordDO.setDevId(createReqVO.getDevId());
                jobRecordDO.setJobType( DevRentStateEnum.READY.getState() );
                jobRecordDO.setJobTime(createReqVO.getRentTime());
                jobRecordDO.setRemark(createReqVO.getRemark());
                jobRecordDO.setUpdater(String.valueOf(userId));
                jobRecordDO.setUpdateTime(LocalDateTime.now());
                jobRecordMapper.updateById(jobRecordDO);
            }
        }
        return CommonResult.success(rent_id);
    }
    @Override
    @Transactional
    public CommonResult<Long> installOperation(DevRentSaveReqVO createReqVO) {
        Long userId = SecurityFrameworkUtils.getLoginUserId();
        String userNickname = SecurityFrameworkUtils.getLoginUserNickname();
        // 设置设备 使用中
        Integer ret = markDevInUse(createReqVO.getDevId());
        if (null == ret || 0 == ret) {
            return CommonResult.error(DEVICE_NOT_EXISTS);
        }
        Long rent_id = createReqVO.getId();
        if (null == rent_id) {
            List<DevRentDO>  devRentDOList = devRentMapper.selectByPatIdAndState(createReqVO.getPatId(), DevRentStateEnum.READY.getState());
            if (devRentDOList.size() == 0)
                return CommonResult.error(DEV_INSTALL_NOT_RECEIVED);
            else if (devRentDOList.size() != 1) {
                return CommonResult.error(DEV_INSTALL_EXCEPTION);
            }
            rent_id = devRentDOList.getFirst().getId();
            createReqVO.setId( rent_id );
@@ -117,6 +182,9 @@
        Long userId = SecurityFrameworkUtils.getLoginUserId();
        String userNickname = SecurityFrameworkUtils.getLoginUserNickname();
        // 设备恢复到空闲
        resumeDevFree( updateReqVO.getDevId() );
        JobRecordDO jobRecordDO = jobRecordMapper.selectByRentIdDocId(updateReqVO.getId(), userId);
        if (jobRecordDO == null) {
            JobRecordSaveReqVO jobRecordSaveReqVO = new JobRecordSaveReqVO();
@@ -133,9 +201,6 @@
            JobRecordDO jobRecord = BeanUtils.toBean(jobRecordSaveReqVO, JobRecordDO.class);
            jobRecordMapper.insert(jobRecord);
        } else {
            // 设备遗失时, 需恢复到正常
            resumeDevLost( updateReqVO );
            jobRecordDO.setJobType( DevRentStateEnum.DISMANTLED.getState() );
            jobRecordDO.setJobTime( updateReqVO.getReturnTime() );
            jobRecordDO.setRemark( updateReqVO.getRemark() );
@@ -150,10 +215,15 @@
    @Override
    @Transactional
    public CommonResult<Long> cancelOperation(DevCancelReqVO cancelReqVO) {
        DevRentSaveReqVO createReqVO = BeanUtils.toBean(cancelReqVO, DevRentSaveReqVO.class);
        Long userId = SecurityFrameworkUtils.getLoginUserId();
        String userNickname = SecurityFrameworkUtils.getLoginUserNickname();
        // 若从 装机 改为 取消装机,恢复设备状态
        if (null != cancelReqVO.getDevId()) {
            resumeDevFree( cancelReqVO.getDevId() );
        }
        DevRentSaveReqVO createReqVO = BeanUtils.toBean(cancelReqVO, DevRentSaveReqVO.class);
        createReqVO.setDevId(null);
        createReqVO.setState( DevRentStateEnum.CANCELLED.getState() );
@@ -203,6 +273,9 @@
    @Override
    @Transactional
    public CommonResult<Long> loseOperation(DevRentSaveReqVO updateReqVO) {
        // 设备遗失时, 标注遗失
        markDevLost( updateReqVO.getDevId(), updateReqVO.getReturnTime().toLocalDate() );
        updateReqVO.setState( DevRentStateEnum.LOST.getState() );
        updateDevRent( updateReqVO );
@@ -233,9 +306,6 @@
            jobRecordDO.setUpdateTime( LocalDateTime.now() );
            jobRecordMapper.updateById(jobRecordDO);
        }
        // 设备遗失时, 标注遗失
        markDevLost( updateReqVO );
        return CommonResult.success(updateReqVO.getId());
    }
@@ -285,28 +355,68 @@
    }
    @Override
    public DevRentDO getDismantleRent(DevRentSearchReqVO searchReqVO) {
        return devRentMapper.getDismantleRentByState(searchReqVO);
    public DevRentDO getInstalledOrCancelledRent(DevRentSearchReqVO searchReqVO) {
        List<Integer> stateList = new ArrayList<>();
        stateList.add( DevRentStateEnum.INSTALLED.getState() );
        stateList.add( DevRentStateEnum.CANCELLED.getState() );
        searchReqVO.setStateList( stateList );
        return devRentMapper.getRentByState(searchReqVO);
    }
    private void markDevLost(DevRentSaveReqVO createReqVO) {
    @Override
    public DevRentDO getReadyOrCancelledRent(DevRentSearchReqVO searchReqVO) {
        List<Integer> stateList = new ArrayList<>();
        stateList.add( DevRentStateEnum.READY.getState() );
        stateList.add( DevRentStateEnum.CANCELLED.getState() );
        searchReqVO.setStateList( stateList );
        return devRentMapper.getRentByState(searchReqVO);
    }
    private Integer markDevRecieved(String devId) {
        // 设备标注 已领取
        DeviceDO deviveDO = deviceMapper.getDeviceByDevId(devId);
        if (null != deviveDO) {
            deviveDO.setState( DevStateEnum.RECEIVED.getState() );
            return deviceMapper.updateById(deviveDO);
        }
        return 0;
    }
    private Integer markDevInUse(String devId) {
        // 设备标注 在使用
        DeviceDO deviveDO = deviceMapper.getDeviceByDevId(devId);
        if (null != deviveDO) {
            deviveDO.setState( DevStateEnum.INUSE.getState() );
            return deviceMapper.updateById(deviveDO);
        }
        return 0;
    }
    private Integer markDevLost(String devId, LocalDate localDate) {
        // 设备标注遗失
        DeviceDO deviveDO = deviceMapper.getDeviceByDevId(createReqVO.getDevId());
        DeviceDO deviveDO = deviceMapper.getDeviceByDevId(devId);
        if (null != deviveDO) {
            deviveDO.setLost(1);
            deviveDO.setLoseDate( createReqVO.getReturnTime().toLocalDate() );
            deviceMapper.updateById(deviveDO);
            deviveDO.setState( DevStateEnum.LOST.getState() );
            deviveDO.setLoseDate( localDate ); // createReqVO.getReturnTime().toLocalDate()
            return deviceMapper.updateById(deviveDO);
        }
        return 0;
    }
    private void resumeDevLost(DevRentSaveReqVO createReqVO) {
        // 设备标注遗失 恢复为正常
        DeviceDO deviveDO = deviceMapper.getDeviceByDevId(createReqVO.getDevId());
    private Integer resumeDevFree(String devId) {
        // 设备标注遗失 恢复为空闲
        DeviceDO deviveDO = deviceMapper.getDeviceByDevId( devId );
        if (null != deviveDO) {
            deviveDO.setLost(0);
            deviveDO.setState( DevStateEnum.FREE.getState() );
            deviveDO.setLoseDate( null );
            deviceMapper.updateById(deviveDO);
            return deviceMapper.updateById(deviveDO);
        }
        return 0;
    }
}