package org.jeecg.modules.eam.service.impl; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.util.SimpleVersionGenerateUtil; import org.jeecg.modules.system.entity.BaseFactory; import org.jeecg.modules.system.entity.BaseFactoryUser; import org.jeecg.modules.system.service.IBaseFactoryService; import org.jeecg.modules.system.service.IBaseFactoryUserService; import org.jeecg.modules.eam.constant.TechnicalStatusEvaluationCheckCategoryEnum; import org.jeecg.modules.eam.constant.TechnicalStatusEvaluationStandardEnum; import org.jeecg.modules.eam.entity.EamTechnicalStatusEvaluationStandard; import org.jeecg.modules.eam.entity.EamTechnicalStatusEvaluationStandardDetail; import org.jeecg.modules.eam.mapper.EamTechnicalStatusEvaluationStandardMapper; import org.jeecg.modules.eam.request.EamTechnicalStatusEvaluationStandardRequest; import org.jeecg.modules.eam.service.IEamTechnicalStatusEvaluationStandardDetailService; import org.jeecg.modules.eam.service.IEamTechnicalStatusEvaluationStandardService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** * @Description: 技术状态鉴定规范 * @Author: jeecg-boot * @Date: 2025-07-07 * @Version: V1.0 */ @Service public class EamTechnicalStatusEvaluationStandardServiceImpl extends ServiceImpl implements IEamTechnicalStatusEvaluationStandardService { @Autowired private IBaseFactoryUserService baseFactoryUserService; @Autowired private IBaseFactoryService baseFactoryService; @Autowired private IEamTechnicalStatusEvaluationStandardDetailService standardDetailService; @Override public IPage queryPageList(Page page, EamTechnicalStatusEvaluationStandard query) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("ems.del_flag", CommonConstant.DEL_FLAG_0); //用户数据权限 LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); if (sysUser == null) { return page; } if (StringUtils.isNotBlank(sysUser.getEamEquipmentIds())) { //选择了设备,根据设备id过滤设备 List equipArr = Arrays.asList(sysUser.getEamEquipmentIds().split(",")); queryWrapper.in("e.equipment_code", equipArr); } else { //没有选择设备,根据中心过滤设备 List baseFactoryUserList = baseFactoryUserService. list(new LambdaQueryWrapper().eq(BaseFactoryUser::getUserId, sysUser.getId())); if (!CollectionUtils.isEmpty(baseFactoryUserList)) { List factoryIds = baseFactoryUserList.stream().map(BaseFactoryUser::getFactoryId).collect(Collectors.toList()); List factoryCode = baseFactoryService.listByIds(factoryIds).stream().map(BaseFactory::getFactoryCode).collect(Collectors.toList()); queryWrapper.in("e.factory_code", factoryCode); } else { return page; } } if (query != null) { //编码 模糊查询 if (StringUtils.isNotBlank(query.getStandardCode())) { queryWrapper.like("ems.standard_code", query.getStandardCode()); } //名称 模糊查询 if (StringUtils.isNotBlank(query.getStandardName())) { queryWrapper.like("ems.standard_name", query.getStandardName()); } //设备 if (StringUtils.isNotBlank(query.getEquipmentId())) { queryWrapper.eq("ems.equipment_id", query.getEquipmentId()); } //保养分类 if (StringUtils.isNotBlank(query.getStandardStatus())) { queryWrapper.eq("ems.standard_status", query.getStandardStatus()); } } queryWrapper.orderByDesc("ems.create_time"); return this.getBaseMapper().queryPageList(page, queryWrapper); } @Override @Transactional(rollbackFor = Exception.class) public boolean addEamTechnicalStatusEvaluationStandard(EamTechnicalStatusEvaluationStandardRequest request) { if(!CommonConstant.STATUS_1.equals(request.getHasOtherCheck()) && !CommonConstant.STATUS_1.equals(request.getHasSafetyEquipmentCheck()) && !CommonConstant.STATUS_1.equals(request.getHasPrecisionCheck())) { //必须要选择一个检查分类 throw new JeecgBootException("必须要选择一个检查分类!"); } EamTechnicalStatusEvaluationStandard entity = new EamTechnicalStatusEvaluationStandard(); BeanUtils.copyProperties(request, entity); entity.setStandardStatus(TechnicalStatusEvaluationStandardEnum.WAIT_SUBMIT.name()); //版本递增 entity.setStandardVersion(SimpleVersionGenerateUtil.getInitVersion()); //设备处理 entity.setEquipmentId(request.getEquipmentId()); //删除标记 entity.setDelFlag(CommonConstant.DEL_FLAG_0); //重复性校验 EamTechnicalStatusEvaluationStandard exist = checkDuplicate(entity.getEquipmentId(), null); if(exist != null){ throw new JeecgBootException("规范已存在,不能重复添加!"); } this.getBaseMapper().insert(entity); //处理明细数据 if(CollectionUtil.isNotEmpty(request.getTableDetailList())) { request.getTableDetailList().forEach(tableDetail -> { tableDetail.setStandardId(entity.getId()); }); //根据分类判断是否保存 if(CommonConstant.STATUS_1.equals(entity.getHasOtherCheck())) { //保存其他分类 List collect = request.getTableDetailList().stream().filter(item -> TechnicalStatusEvaluationCheckCategoryEnum.OTHER_CHECK.name().equals(item.getCheckCategory())).collect(Collectors.toList()); if(CollectionUtils.isEmpty(collect)) { throw new JeecgBootException("其他检查明细不能为空!"); } standardDetailService.saveBatch(collect); } if(CommonConstant.STATUS_1.equals(entity.getHasSafetyEquipmentCheck())) { //保存安全装置分类 List collect = request.getTableDetailList().stream().filter(item -> TechnicalStatusEvaluationCheckCategoryEnum.SAFETY_EQUIPMENT_CHECK.name().equals(item.getCheckCategory())).collect(Collectors.toList()); if(CollectionUtils.isEmpty(collect)) { throw new JeecgBootException("安全装置检查明细不能为空!"); } standardDetailService.saveBatch(collect); } if(CommonConstant.STATUS_1.equals(entity.getHasPrecisionCheck())) { //保存精度检验分类 List collect = request.getTableDetailList().stream().filter(item -> TechnicalStatusEvaluationCheckCategoryEnum.PRECISION_CHECK.name().equals(item.getCheckCategory())).collect(Collectors.toList()); if(CollectionUtils.isEmpty(collect)) { throw new JeecgBootException("精度检查明细不能为空!"); } standardDetailService.saveBatch(collect); } } return true; } @Override public EamTechnicalStatusEvaluationStandard checkDuplicate(String equipmentId, String id) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(EamTechnicalStatusEvaluationStandard::getEquipmentId, equipmentId); queryWrapper.eq(EamTechnicalStatusEvaluationStandard::getDelFlag, CommonConstant.DEL_FLAG_0); //待提交、启用状态 queryWrapper.in(EamTechnicalStatusEvaluationStandard::getStandardStatus, Arrays.asList(TechnicalStatusEvaluationStandardEnum.ENABLE.name(), TechnicalStatusEvaluationStandardEnum.WAIT_SUBMIT.name())); queryWrapper.orderByDesc(EamTechnicalStatusEvaluationStandard::getStandardVersion); if(StringUtils.isNotBlank(id)){ queryWrapper.ne(EamTechnicalStatusEvaluationStandard::getId, id); } List list = this.getBaseMapper().selectList(queryWrapper); if(CollectionUtil.isEmpty(list)) { return null; } return list.get(0); } @Override @Transactional(rollbackFor = Exception.class) public boolean editEamTechnicalStatusEvaluationStandard(EamTechnicalStatusEvaluationStandardRequest request) { if(!CommonConstant.STATUS_1.equals(request.getHasOtherCheck()) && !CommonConstant.STATUS_1.equals(request.getHasSafetyEquipmentCheck()) && !CommonConstant.STATUS_1.equals(request.getHasPrecisionCheck())) { //必须要选择一个检查分类 throw new JeecgBootException("必须要选择一个检查分类!"); } EamTechnicalStatusEvaluationStandard entity = this.getBaseMapper().selectById(request.getId()); if(entity == null){ throw new JeecgBootException("编辑的数据已删除,请刷新重试!"); } entity.setStandardName(request.getStandardName()); entity.setEvaluationPeriod(request.getEvaluationPeriod()); entity.setHasOtherCheck(request.getHasOtherCheck()); entity.setHasPrecisionCheck(request.getHasPrecisionCheck()); entity.setHasSafetyEquipmentCheck(request.getHasSafetyEquipmentCheck()); entity.setRemark(request.getRemark()); this.getBaseMapper().updateById(entity); //处理详情 if(CollectionUtil.isNotEmpty(request.getTableDetailList())) { //先删除检查项 standardDetailService.removeByStandardId(entity.getId()); request.getTableDetailList().forEach(tableDetail -> { tableDetail.setStandardId(entity.getId()); }); //根据分类判断是否保存 if(CommonConstant.STATUS_1.equals(entity.getHasOtherCheck())) { //保存其他分类 List collect = request.getTableDetailList().stream().filter(item -> TechnicalStatusEvaluationCheckCategoryEnum.OTHER_CHECK.name().equals(item.getCheckCategory())).collect(Collectors.toList()); if(CollectionUtils.isEmpty(collect)) { throw new JeecgBootException("其他检查明细不能为空!"); } standardDetailService.saveBatch(collect); } if(CommonConstant.STATUS_1.equals(entity.getHasSafetyEquipmentCheck())) { //保存安全装置分类 List collect = request.getTableDetailList().stream().filter(item -> TechnicalStatusEvaluationCheckCategoryEnum.SAFETY_EQUIPMENT_CHECK.name().equals(item.getCheckCategory())).collect(Collectors.toList()); if(CollectionUtils.isEmpty(collect)) { throw new JeecgBootException("安全装置检查明细不能为空!"); } standardDetailService.saveBatch(collect); } if(CommonConstant.STATUS_1.equals(entity.getHasPrecisionCheck())) { //保存精度检验分类 List collect = request.getTableDetailList().stream().filter(item -> TechnicalStatusEvaluationCheckCategoryEnum.PRECISION_CHECK.name().equals(item.getCheckCategory())).collect(Collectors.toList()); if(CollectionUtils.isEmpty(collect)) { throw new JeecgBootException("精度检查明细不能为空!"); } standardDetailService.saveBatch(collect); } } return true; } @Override @Transactional(rollbackFor = Exception.class) public boolean upgrade(EamTechnicalStatusEvaluationStandardRequest request) { if(!CommonConstant.STATUS_1.equals(request.getHasOtherCheck()) && !CommonConstant.STATUS_1.equals(request.getHasSafetyEquipmentCheck()) && !CommonConstant.STATUS_1.equals(request.getHasPrecisionCheck())) { //必须要选择一个检查分类 throw new JeecgBootException("必须要选择一个检查分类!"); } EamTechnicalStatusEvaluationStandard entity = this.getBaseMapper().selectById(request.getId()); if(entity == null){ throw new JeecgBootException("升版的数据已删除,请刷新重试!"); } //新增一个版本 EamTechnicalStatusEvaluationStandard newEntity = new EamTechnicalStatusEvaluationStandard(); newEntity.setStandardCode(request.getStandardCode()); newEntity.setStandardName(request.getStandardName()); newEntity.setEvaluationPeriod(request.getEvaluationPeriod()); newEntity.setStandardStatus(TechnicalStatusEvaluationStandardEnum.ENABLE.name()); //版本递增 newEntity.setStandardVersion(SimpleVersionGenerateUtil.addVersion(entity.getStandardVersion())); //设备处理 newEntity.setEquipmentId(request.getEquipmentId()); newEntity.setHasOtherCheck(request.getHasOtherCheck()); newEntity.setHasPrecisionCheck(request.getHasPrecisionCheck()); newEntity.setHasSafetyEquipmentCheck(request.getHasSafetyEquipmentCheck()); //删除标记 newEntity.setDelFlag(CommonConstant.DEL_FLAG_0); newEntity.setRemark(request.getRemark()); //重复性校验 EamTechnicalStatusEvaluationStandard exist = checkDuplicate(newEntity.getEquipmentId(), entity.getId()); if(exist != null){ throw new JeecgBootException("鉴定规范已存在,不能重复添加!"); } this.getBaseMapper().insert(newEntity); //处理明细数据 if(CollectionUtil.isNotEmpty(request.getTableDetailList())) { request.getTableDetailList().forEach(tableDetail -> { tableDetail.setId(null); tableDetail.setCreateBy(null); tableDetail.setUpdateBy(null); tableDetail.setCreateTime(null); tableDetail.setUpdateTime(null); tableDetail.setStandardId(newEntity.getId()); }); //根据分类判断是否保存 if(CommonConstant.STATUS_1.equals(entity.getHasOtherCheck())) { //保存其他分类 List collect = request.getTableDetailList().stream().filter(item -> TechnicalStatusEvaluationCheckCategoryEnum.OTHER_CHECK.name().equals(item.getCheckCategory())).collect(Collectors.toList()); if(CollectionUtils.isEmpty(collect)) { throw new JeecgBootException("其他检查明细不能为空!"); } standardDetailService.saveBatch(collect); } if(CommonConstant.STATUS_1.equals(entity.getHasSafetyEquipmentCheck())) { //保存安全装置分类 List collect = request.getTableDetailList().stream().filter(item -> TechnicalStatusEvaluationCheckCategoryEnum.SAFETY_EQUIPMENT_CHECK.name().equals(item.getCheckCategory())).collect(Collectors.toList()); if(CollectionUtils.isEmpty(collect)) { throw new JeecgBootException("安全装置检查明细不能为空!"); } standardDetailService.saveBatch(collect); } if(CommonConstant.STATUS_1.equals(entity.getHasPrecisionCheck())) { //保存精度检验分类 List collect = request.getTableDetailList().stream().filter(item -> TechnicalStatusEvaluationCheckCategoryEnum.PRECISION_CHECK.name().equals(item.getCheckCategory())).collect(Collectors.toList()); if(CollectionUtils.isEmpty(collect)) { throw new JeecgBootException("精度检查明细不能为空!"); } standardDetailService.saveBatch(collect); } } //禁用原来的版本 entity.setStandardStatus(TechnicalStatusEvaluationStandardEnum.DISABLE.name()); this.getBaseMapper().updateById(entity); return true; } }