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.constant.DataBaseConstant; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.eam.aspect.annotation.EquipmentHistoryLog; import org.jeecg.modules.eam.constant.*; import org.jeecg.modules.eam.entity.EamEquipment; import org.jeecg.modules.eam.entity.EamEquipmentExtend; import org.jeecg.modules.eam.mapper.EamEquipmentMapper; import org.jeecg.modules.eam.request.EamEquipmentQuery; import org.jeecg.modules.eam.service.IEamEquipmentExtendService; import org.jeecg.modules.eam.service.IEamEquipmentService; import org.jeecg.modules.eam.tree.FindsEquipmentEamCenterUtil; import org.jeecg.modules.eam.tree.FindsEquipmentProductionUtil; import org.jeecg.modules.eam.vo.EamEquipmentTree; import org.jeecg.modules.eam.vo.EquipmentSearchResult; import org.jeecg.modules.system.entity.BaseFactory; import org.jeecg.modules.system.entity.BaseFactoryUser; import org.jeecg.modules.system.entity.MdcProduction; import org.jeecg.modules.system.service.IBaseFactoryService; import org.jeecg.modules.system.service.IBaseFactoryUserService; import org.jeecg.modules.system.service.IMdcProductionService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; /** * @Description: 设备台账 * @Author: jeecg-boot * @Date: 2025-03-19 * @Version: V1.0 */ @Service public class EamEquipmentServiceImpl extends ServiceImpl implements IEamEquipmentService { @Resource private EamEquipmentMapper eamEquipmentMapper; @Autowired private IEamEquipmentExtendService equipmentExtendService; @Autowired private IMdcProductionService mdcProductionService; @Autowired private IBaseFactoryUserService baseFactoryUserService; @Autowired private IBaseFactoryService baseFactoryService; @Override @Transactional(rollbackFor = Exception.class) @EquipmentHistoryLog(operationTag = EquipmentOperationTagEnum.ACCEPTANCE, businessTable = "eam_equipment") public EamEquipment saveEquipment(EamEquipment eamEquipment) { if (eamEquipment == null) { return null; } //资产状态默认 正常 eamEquipment.setAssetStatus(AssetStatusEnum.NORMAL.name()); eamEquipment.setDelFlag(CommonConstant.DEL_FLAG_0); eamEquipmentMapper.insert(eamEquipment); //扩展表数据同步添加 EamEquipmentExtend eamEquipmentExtend = new EamEquipmentExtend(); BeanUtils.copyProperties(eamEquipment, eamEquipmentExtend); eamEquipmentExtend.setMaintenanceStatus(EquipmentMaintenanceStatus.NORMAL.name()); eamEquipmentExtend.setRepairStatus(EquipmentRepairStatus.NORMAL.name()); equipmentExtendService.save(eamEquipmentExtend); //插入设备履历 @EquipmentHistoryLog return eamEquipment; } /** * 台账设备编辑 * @param eamEquipment */ @Override public EamEquipment updateEquipment(EamEquipment eamEquipment){ if (eamEquipment == null) { return null; } eamEquipmentMapper.updateById(eamEquipment); EamEquipmentExtend eamEquipmentExtend = new EamEquipmentExtend(); BeanUtils.copyProperties(eamEquipment, eamEquipmentExtend); equipmentExtendService.updateById(eamEquipmentExtend); return eamEquipment; } @Override public List loadTreeListByProductionIds(String ids) { List productionIds = Arrays.asList(ids.split(",")); //获取所有产线数据 List productionList = mdcProductionService.list(new LambdaQueryWrapper().eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0.toString()).orderByAsc(MdcProduction::getProductionOrder)); List allProductionIds = new ArrayList<>(); //找到所有产线id的上级id if (!productionIds.isEmpty()) { for (String productionId : productionIds) { this.getAllProductionIds(productionList, productionId, allProductionIds); } } //过滤产线数据 List list = productionList.stream().filter((MdcProduction mdcProduction) -> allProductionIds.contains(mdcProduction.getId())).collect(Collectors.toList()); //组装产线设备树 List treeList = FindsEquipmentProductionUtil.wrapEquipmentProductionTreeList(list); //填充设备数据 fillEquipmentByProduction(treeList); return treeList; } /** * 获取EAM中心下的设备信息 * @param ids EAM中心ids * @return */ @Override public List loadTreeListByEamCenterIds(String ids){ List baseFactoryIds = Arrays.asList(ids.split(",")); //获取所有EAM数据 List baseFactoryList = baseFactoryService.list(new LambdaQueryWrapper().eq(BaseFactory::getDelFlag, CommonConstant.DEL_FLAG_0.toString()).orderByAsc(BaseFactory::getSorter)); List allBaseFactoryIds = new ArrayList<>(); //找到所有产线id的上级id if (!baseFactoryIds.isEmpty()) { for (String baseFactoryId : baseFactoryIds) { this.getAllBaseFactoryIds(baseFactoryList, baseFactoryId, allBaseFactoryIds); } } //过滤EAM数据 List list = baseFactoryList.stream().filter((BaseFactory baseFactory) -> allBaseFactoryIds.contains(baseFactory.getId())).collect(Collectors.toList()); //组装EAM设备树 List treeList = FindsEquipmentEamCenterUtil.wrapEquipmentBaseFactoryTreeList(list); //填充设备数据 fillEquipmentByBaseFactory(treeList); return treeList; } @Override public IPage queryPageList(IPage page, EamEquipmentQuery eamEquipment) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("e.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)){ Set factoryIds = baseFactoryUserList.stream().map(BaseFactoryUser::getFactoryId).collect(Collectors.toSet()); Set factoryCode= baseFactoryService.listByIds(factoryIds).stream().map(BaseFactory::getOrgCode).collect(Collectors.toSet()); queryWrapper.in("e.factory_org_code", factoryCode); }else { return page; } } //查询条件过滤 if (eamEquipment != null) { if (StringUtils.isNotBlank(eamEquipment.getEquipmentCode())) { queryWrapper.like("e.equipment_code", eamEquipment.getEquipmentCode()); } if (StringUtils.isNotBlank(eamEquipment.getEquipmentName())) { queryWrapper.like("e.equipment_name", eamEquipment.getEquipmentName()); } if (StringUtils.isNotBlank(eamEquipment.getEquipmentImportance())) { queryWrapper.eq("e.equipment_importance", eamEquipment.getEquipmentImportance()); } if (StringUtils.isNotBlank(eamEquipment.getAssetStatus())) { queryWrapper.like("e.asset_status", eamEquipment.getAssetStatus()); } if (StringUtils.isNotBlank(eamEquipment.getTechnologyStatus())) { queryWrapper.like("e.technology_status", eamEquipment.getTechnologyStatus()); } if (StringUtils.isNotBlank(eamEquipment.getOperationSystem())) { queryWrapper.like("e.operation_system", eamEquipment.getOperationSystem()); } if (StringUtils.isNotBlank(eamEquipment.getOrgId())) { //车间编码不为空 List productIds = mdcProductionService.recursionChildren(eamEquipment.getOrgId()); if (CollectionUtil.isNotEmpty(productIds)) { //不做筛选 queryWrapper.in("e.org_id", productIds); } } if (StringUtils.isNotBlank(eamEquipment.getEquipmentCategory())) { queryWrapper.like("e.equipment_category", eamEquipment.getEquipmentCategory()); } if (StringUtils.isNotBlank(eamEquipment.getFactoryOrgCode())) { queryWrapper.like("e.factory_org_code", eamEquipment.getFactoryOrgCode()); } if (StringUtils.isNotBlank(eamEquipment.getRepairDepartOrgCode())) { queryWrapper.like("e.repair_depart_org_code", eamEquipment.getRepairDepartOrgCode()); } if (StringUtils.isNotBlank(eamEquipment.getId())) { queryWrapper.eq("e.id", eamEquipment.getId()); } //排序 if (StringUtils.isNotBlank(eamEquipment.getColumn()) && StringUtils.isNotBlank(eamEquipment.getOrder())) { //queryWrapper.like("column", eamEquipment.getColumn()); String column = eamEquipment.getColumn(); if (column.endsWith(CommonConstant.DICT_TEXT_SUFFIX)) { column = column.substring(0, column.lastIndexOf(CommonConstant.DICT_TEXT_SUFFIX)); } if (DataBaseConstant.SQL_ASC.equalsIgnoreCase(eamEquipment.getOrder())) { queryWrapper.orderByAsc("e." + oConvertUtils.camelToUnderline(column)); } else { queryWrapper.orderByDesc("e." + oConvertUtils.camelToUnderline(column)); } } else { queryWrapper.orderByDesc("e.create_time"); } } else { queryWrapper.orderByDesc("e.create_time"); } IPage ipage = eamEquipmentMapper.queryPageList(page, queryWrapper); return ipage; } @Override public List asyncLoadEquipment(String keyword, Integer pageSize, String id) { if (StringUtils.isNotBlank(id)) { EamEquipment eamEquipment = eamEquipmentMapper.selectById(id); if (eamEquipment != null) { List resultList = new ArrayList<>(); resultList.add(new EquipmentSearchResult(eamEquipment)); return resultList; } } IPage page = new Page<>(1, pageSize); QueryWrapper queryWrapper = new QueryWrapper<>(); //用户数据权限 LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); if (sysUser == null) { return Collections.emptyList(); } 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)){ Set factoryIds = baseFactoryUserList.stream().map(BaseFactoryUser::getFactoryId).collect(Collectors.toSet()); Set factoryCode= baseFactoryService.listByIds(factoryIds).stream().map(BaseFactory::getOrgCode).collect(Collectors.toSet()); queryWrapper.in("e.factory_org_code", factoryCode); } else { return Collections.emptyList(); } } if (StringUtils.isNotBlank(keyword)) { queryWrapper.like("equipment_code", keyword); queryWrapper.or().like("equipment_name", keyword); } queryWrapper.eq("del_flag", CommonConstant.DEL_FLAG_0); IPage pageResult = eamEquipmentMapper.queryPageList(page, queryWrapper); if (pageResult != null && CollectionUtil.isNotEmpty(pageResult.getRecords())) { List resultList = new ArrayList<>(); pageResult.getRecords().forEach((record) -> { resultList.add(new EquipmentSearchResult(record)); }); return resultList; } return Collections.emptyList(); } @Override public EamEquipment selectByEquipmentCode(String equipmentCode) { if (StringUtils.isBlank(equipmentCode)) { return null; } QueryWrapper queryWrapper = new QueryWrapper<>(); //用户数据权限 LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); if (sysUser == null) { return null; } if (StringUtils.isNotBlank(sysUser.getEamEquipmentIds())) { //选择了设备,根据设备id过滤设备 List equipArr = Arrays.asList(sysUser.getEamEquipmentIds().split(",")); queryWrapper.in("equipment_code", equipArr); } else { //没有选择设备,根据车间过滤设备 List baseFactoryUserList = baseFactoryUserService. list(new LambdaQueryWrapper().eq(BaseFactoryUser::getUserId, sysUser.getId())); if (!CollectionUtils.isEmpty(baseFactoryUserList)) { Set factoryIds = baseFactoryUserList.stream().map(BaseFactoryUser::getFactoryId).collect(Collectors.toSet()); Set factoryCodeList = baseFactoryService.listByIds(factoryIds).stream().map(BaseFactory::getOrgCode).collect(Collectors.toSet()); queryWrapper.in("factory_org_code", factoryCodeList); } else { return null; } } queryWrapper.eq("equipment_code", equipmentCode); queryWrapper.eq("del_flag", CommonConstant.DEL_FLAG_0); return eamEquipmentMapper.selectOne(queryWrapper); } /** * 设备台账导出 * @param eamEquipment * @return */ @Override public List exportList(EamEquipmentQuery eamEquipment){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("e.del_flag", CommonConstant.DEL_FLAG_0); //用户数据权限 LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); if (sysUser == null) { return new ArrayList<>(); } 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)){ Set factoryIds = baseFactoryUserList.stream().map(BaseFactoryUser::getFactoryId).collect(Collectors.toSet()); Set factoryCode= baseFactoryService.listByIds(factoryIds).stream().map(BaseFactory::getOrgCode).collect(Collectors.toSet()); queryWrapper.in("e.factory_org_code", factoryCode); }else { return Collections.emptyList(); } } //查询条件过滤 if (eamEquipment != null) { if (StringUtils.isNotBlank(eamEquipment.getEquipmentCode())) { queryWrapper.like("e.equipment_code", eamEquipment.getEquipmentCode()); } if (StringUtils.isNotBlank(eamEquipment.getEquipmentName())) { queryWrapper.like("e.equipment_name", eamEquipment.getEquipmentName()); } if (StringUtils.isNotBlank(eamEquipment.getEquipmentImportance())) { queryWrapper.eq("e.equipment_importance", eamEquipment.getEquipmentImportance()); } if (StringUtils.isNotBlank(eamEquipment.getAssetStatus())) { queryWrapper.like("e.asset_status", eamEquipment.getAssetStatus()); } if (StringUtils.isNotBlank(eamEquipment.getTechnologyStatus())) { queryWrapper.like("e.technology_status", eamEquipment.getTechnologyStatus()); } if (StringUtils.isNotBlank(eamEquipment.getOperationSystem())) { queryWrapper.like("e.operation_system", eamEquipment.getOperationSystem()); } if (StringUtils.isNotBlank(eamEquipment.getOrgId())) { //车间编码不为空 List productIds = mdcProductionService.recursionChildren(eamEquipment.getOrgId()); if (CollectionUtil.isNotEmpty(productIds)) { //不做筛选 queryWrapper.in("e.org_id", productIds); } } if (StringUtils.isNotBlank(eamEquipment.getEquipmentCategory())) { queryWrapper.like("e.equipment_category", eamEquipment.getEquipmentCategory()); } if (StringUtils.isNotBlank(eamEquipment.getId())) { queryWrapper.eq("e.id", eamEquipment.getId()); } //排序 if (StringUtils.isNotBlank(eamEquipment.getColumn()) && StringUtils.isNotBlank(eamEquipment.getOrder())) { //queryWrapper.like("column", eamEquipment.getColumn()); String column = eamEquipment.getColumn(); if (column.endsWith(CommonConstant.DICT_TEXT_SUFFIX)) { column = column.substring(0, column.lastIndexOf(CommonConstant.DICT_TEXT_SUFFIX)); } if (DataBaseConstant.SQL_ASC.equalsIgnoreCase(eamEquipment.getOrder())) { queryWrapper.orderByAsc("e." + oConvertUtils.camelToUnderline(column)); } else { queryWrapper.orderByDesc("e." + oConvertUtils.camelToUnderline(column)); } } else { queryWrapper.orderByDesc("e.create_time"); } } else { queryWrapper.orderByDesc("e.create_time"); } return eamEquipmentMapper.queryList(queryWrapper); } @Override public List selectTechnicalEquipmentList() { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("e.del_flag", CommonConstant.DEL_FLAG_0); queryWrapper.ne("ext.technology_status", TechnologyStatusEnum.PROHIBITED.name()); queryWrapper.isNotNull("ext.technology_check_period"); queryWrapper.isNotNull("e.next_technology_check"); return this.getBaseMapper().selectTechnicalEquipmentList(queryWrapper); } /** * 获取所有的产线id(包含所有上级) */ private void getAllProductionIds(List productionList, String productionId, List allProductionIds) { if (!allProductionIds.contains(productionId)) { allProductionIds.add(productionId); } for (MdcProduction mdcProduction : productionList) { if (StringUtils.isEmpty(mdcProduction.getParentId())) { continue; } if (productionId.equals(mdcProduction.getId())) { if (!allProductionIds.contains(mdcProduction.getParentId())) { allProductionIds.add(mdcProduction.getParentId()); getAllProductionIds(productionList, mdcProduction.getParentId(), allProductionIds); } } } } /** * 获取所有的产线id(包含所有上级) */ private void getAllBaseFactoryIds(List baseFactoryList, String baseFactoryId, List allBaseFactoryIds) { if (!allBaseFactoryIds.contains(baseFactoryId)) { allBaseFactoryIds.add(baseFactoryId); } for (BaseFactory baseFactory : baseFactoryList) { if (StringUtils.isEmpty(baseFactory.getParentId())) { continue; } if (baseFactoryId.equals(baseFactory.getId())) { if (!allBaseFactoryIds.contains(baseFactory.getParentId())) { allBaseFactoryIds.add(baseFactory.getParentId()); getAllBaseFactoryIds(baseFactoryList, baseFactory.getParentId(), allBaseFactoryIds); } } } } /** * 产线设备树填充设备数据 */ private void fillEquipmentByProduction(List treeList) { for (EamEquipmentTree mdcEquipmentTree : treeList) { List equipmentList = eamEquipmentMapper.queryByProductionId(mdcEquipmentTree.getKey()); if (CollectionUtil.isNotEmpty(equipmentList)) { for (EamEquipment mdcEquipment : equipmentList) { EamEquipmentTree tree = new EamEquipmentTree().convert(mdcEquipment); tree.setParentId(mdcEquipmentTree.getKey()); tree.setType(2); mdcEquipmentTree.getChildren().add(tree); } mdcEquipmentTree.setLeaf(false); } if (CollectionUtil.isNotEmpty(mdcEquipmentTree.getChildren())) { fillEquipmentByProduction(mdcEquipmentTree.getChildren()); } } } /** * 产线设备树填充设备数据 */ private void fillEquipmentByBaseFactory(List treeList) { for (EamEquipmentTree mdcEquipmentTree : treeList) { List equipmentList = eamEquipmentMapper.queryByEamCenterId(mdcEquipmentTree.getKey()); if (CollectionUtil.isNotEmpty(equipmentList)) { for (EamEquipment mdcEquipment : equipmentList) { EamEquipmentTree tree = new EamEquipmentTree().convert(mdcEquipment); tree.setParentId(mdcEquipmentTree.getKey()); tree.setType(2); mdcEquipmentTree.getChildren().add(tree); } mdcEquipmentTree.setLeaf(false); } if (CollectionUtil.isNotEmpty(mdcEquipmentTree.getChildren())) { fillEquipmentByBaseFactory(mdcEquipmentTree.getChildren()); } } } }