package cn.lihu.jh.module.ecg.service.devrent; 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.devmanage.DeviceDO; import cn.lihu.jh.module.ecg.dal.dataobject.jobrecord.JobRecordDO; import cn.lihu.jh.module.ecg.dal.mysql.devmanage.DeviceMapper; import cn.lihu.jh.module.ecg.dal.mysql.jobrecord.JobRecordMapper; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.util.*; import cn.lihu.jh.module.ecg.controller.admin.devrent.vo.*; import cn.lihu.jh.module.ecg.dal.dataobject.devrent.DevRentDO; import cn.lihu.jh.framework.common.pojo.PageResult; import cn.lihu.jh.framework.common.pojo.PageParam; import cn.lihu.jh.framework.common.util.object.BeanUtils; import cn.lihu.jh.module.ecg.dal.mysql.devrent.DevRentMapper; import javax.annotation.Resource; import static cn.lihu.jh.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.lihu.jh.module.ecg.enums.ErrorCodeConstants.*; /** * 装机拆机 Service 实现类 * * @author 芋道源码 */ @Service @Validated public class DevRentServiceImpl implements DevRentService { @Resource private DevRentMapper devRentMapper; @Resource private JobRecordMapper jobRecordMapper; @Resource DeviceMapper deviceMapper; @Override @Transactional public CommonResult installOperation(DevRentSaveReqVO createReqVO) { Long userId = SecurityFrameworkUtils.getLoginUserId(); String userNickname = SecurityFrameworkUtils.getLoginUserNickname(); // 检查设备编号 DeviceDO deviceDO = deviceMapper.getDeviceByDevId( createReqVO.getDevId() ); if (null == deviceDO ) { return CommonResult.error(DEVICE_NOT_EXISTS); } Long rent_id = createReqVO.getId(); if (null == rent_id) { // 判断是否已经有装机记录 Integer recordNum = jobRecordMapper.getPatientJobNum(createReqVO.getPatId(), createReqVO.getRentTime(), 0); if (null != recordNum && recordNum > 0) { return CommonResult.error(DEV_INSTALL_EXIST); } rent_id = createDevRent(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(0); jobRecordSaveReqVO.setRemark(createReqVO.getRemark()); jobRecordSaveReqVO.setSummary(""); JobRecordDO jobRecord = BeanUtils.toBean(jobRecordSaveReqVO, JobRecordDO.class); jobRecordMapper.insert(jobRecord); } else { // 撤销 放弃操作 createReqVO.setCancelled(0); updateDevRent( createReqVO ); JobRecordDO jobRecordDO = jobRecordMapper.selectByRentIdJobTypeDocId(rent_id, 0, userId); if (null != jobRecordDO) { jobRecordDO.setCancelled( createReqVO.getCancelled() ); jobRecordDO.setDevId(createReqVO.getDevId()); 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 Long dismantleOperation(DevRentSaveReqVO updateReqVO) { // 取消遗失标记 updateReqVO.setLost(0); updateDevRent( updateReqVO ); Long userId = SecurityFrameworkUtils.getLoginUserId(); String userNickname = SecurityFrameworkUtils.getLoginUserNickname(); JobRecordDO jobRecordDO = jobRecordMapper.selectByRentIdJobTypeDocId(updateReqVO.getId(), 1, userId); if (jobRecordDO == null) { JobRecordSaveReqVO jobRecordSaveReqVO = new JobRecordSaveReqVO(); jobRecordSaveReqVO.setRentId( updateReqVO.getId() ); jobRecordSaveReqVO.setDevId( updateReqVO.getDevId() ); jobRecordSaveReqVO.setDocId( userId ); jobRecordSaveReqVO.setDocName( userNickname ); jobRecordSaveReqVO.setPatId( updateReqVO.getPatId() ); jobRecordSaveReqVO.setPatName( updateReqVO.getPatName() ); jobRecordSaveReqVO.setJobTime( updateReqVO.getReturnTime() ); jobRecordSaveReqVO.setJobType( 1 ); jobRecordSaveReqVO.setRemark( updateReqVO.getRemark() ); jobRecordSaveReqVO.setSummary( updateReqVO.getInterference() + " " + updateReqVO.getBaseline() + " " + updateReqVO.getDetachment() ); JobRecordDO jobRecord = BeanUtils.toBean(jobRecordSaveReqVO, JobRecordDO.class); jobRecordMapper.insert(jobRecord); } else { // 设备遗失时, 需恢复到正常 resumeDevLost( updateReqVO ); // 取消遗失标记 jobRecordDO.setLost(0); jobRecordDO.setJobTime( updateReqVO.getReturnTime() ); jobRecordDO.setRemark( updateReqVO.getRemark() ); jobRecordDO.setSummary( updateReqVO.getInterference() + " " + updateReqVO.getBaseline() + " " + updateReqVO.getDetachment() ); jobRecordDO.setUpdater( String.valueOf(userId) ); jobRecordDO.setUpdateTime( LocalDateTime.now() ); jobRecordMapper.updateById(jobRecordDO); } return updateReqVO.getId(); } @Override @Transactional public CommonResult cancelOperation(DevCancelReqVO cancelReqVO) { DevRentSaveReqVO createReqVO = BeanUtils.toBean(cancelReqVO, DevRentSaveReqVO.class); Long userId = SecurityFrameworkUtils.getLoginUserId(); String userNickname = SecurityFrameworkUtils.getLoginUserNickname(); createReqVO.setCancelled(1); Long rent_id = createReqVO.getId(); if (null == rent_id) { // 判断是否已经有拆机记录 Integer recordNum = jobRecordMapper.getPatientJobNum(createReqVO.getPatId(), createReqVO.getRentTime(), 0); if (null != recordNum && recordNum > 0) { return CommonResult.error(DEV_INSTALL_EXIST); } rent_id = createDevRent(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(0); jobRecordSaveReqVO.setCancelled(1); jobRecordSaveReqVO.setRemark(createReqVO.getRemark()); jobRecordSaveReqVO.setSummary(""); JobRecordDO jobRecord = BeanUtils.toBean(jobRecordSaveReqVO, JobRecordDO.class); jobRecordMapper.insert(jobRecord); } else { updateDevRent( createReqVO ); JobRecordDO jobRecordDO = jobRecordMapper.selectByRentIdJobTypeDocId(rent_id, 0, userId); if (null != jobRecordDO) { //jobRecordDO.setDevId(createReqVO.getDevId()); jobRecordDO.setJobTime(createReqVO.getRentTime()); jobRecordDO.setCancelled(1); 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 loseOperation(DevRentSaveReqVO updateReqVO) { updateReqVO.setLost(1); updateDevRent( updateReqVO ); Long userId = SecurityFrameworkUtils.getLoginUserId(); String userNickname = SecurityFrameworkUtils.getLoginUserNickname(); JobRecordDO jobRecordDO = jobRecordMapper.selectByRentIdJobTypeDocId(updateReqVO.getId(), 1, userId); if (jobRecordDO == null) { JobRecordSaveReqVO jobRecordSaveReqVO = new JobRecordSaveReqVO(); jobRecordSaveReqVO.setRentId( updateReqVO.getId() ); jobRecordSaveReqVO.setDevId( updateReqVO.getDevId() ); jobRecordSaveReqVO.setDocId( userId ); jobRecordSaveReqVO.setDocName( userNickname ); jobRecordSaveReqVO.setPatId( updateReqVO.getPatId() ); jobRecordSaveReqVO.setPatName( updateReqVO.getPatName() ); jobRecordSaveReqVO.setJobTime( updateReqVO.getReturnTime() ); jobRecordSaveReqVO.setJobType( 1 ); jobRecordSaveReqVO.setLost( updateReqVO.getLost() ); jobRecordSaveReqVO.setRemark( updateReqVO.getRemark() ); jobRecordSaveReqVO.setSummary( updateReqVO.getInterference() + " " + updateReqVO.getBaseline() + " " + updateReqVO.getDetachment() ); JobRecordDO jobRecord = BeanUtils.toBean(jobRecordSaveReqVO, JobRecordDO.class); jobRecordMapper.insert(jobRecord); } else { jobRecordDO.setLost( updateReqVO.getLost() ); jobRecordDO.setJobTime( updateReqVO.getReturnTime() ); jobRecordDO.setRemark( updateReqVO.getRemark() ); jobRecordDO.setSummary( updateReqVO.getInterference() + " " + updateReqVO.getBaseline() + " " + updateReqVO.getDetachment() ); jobRecordDO.setUpdater( String.valueOf(userId) ); jobRecordDO.setUpdateTime( LocalDateTime.now() ); jobRecordMapper.updateById(jobRecordDO); } // 设备遗失时, 标注遗失 markDevLost( updateReqVO ); return CommonResult.success(updateReqVO.getId()); } @Override public Long createDevRent(DevRentSaveReqVO createReqVO) { // // 插入 DevRentDO devRent = BeanUtils.toBean(createReqVO, DevRentDO.class); devRentMapper.insert(devRent); // 返回 return devRent.getId(); } @Override public void updateDevRent(DevRentSaveReqVO updateReqVO) { // 校验存在 validateDevRentExists(updateReqVO.getId()); // 更新 DevRentDO updateObj = BeanUtils.toBean(updateReqVO, DevRentDO.class); devRentMapper.updateById(updateObj); } @Override public void deleteDevRent(Long id) { // 校验存在 validateDevRentExists(id); // 删除 devRentMapper.deleteById(id); } private void validateDevRentExists(Long id) { if (devRentMapper.selectById(id) == null) { throw exception(DEV_RENT_NOT_EXISTS); } } @Override public DevRentDO getDevRent(Long id) { return devRentMapper.selectById(id); } @Override public PageResult getDevRentPage(DevRentPageReqVO pageReqVO) { return devRentMapper.selectPage(pageReqVO); } @Override public DevRentDO getLatestRent(DevRentSearchReqVO searchReqVO) { return devRentMapper.getLatestRent(searchReqVO); } private void markDevLost(DevRentSaveReqVO createReqVO) { // 设备标注遗失 DeviceDO deviveDO = deviceMapper.getDeviceByDevId(createReqVO.getDevId()); if (null != deviveDO) { deviveDO.setLost(1); deviveDO.setLoseDate( createReqVO.getReturnTime().toLocalDate() ); deviceMapper.updateById(deviveDO); } } private void resumeDevLost(DevRentSaveReqVO createReqVO) { // 设备标注遗失 恢复为正常 DeviceDO deviveDO = deviceMapper.getDeviceByDevId(createReqVO.getDevId()); if (null != deviveDO) { deviveDO.setLost(0); deviveDO.setLoseDate( null ); deviceMapper.updateById(deviveDO); } } }