package org.jeecg.modules.base.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.jeecg.modules.base.entity.FactoryModel; import org.jeecg.modules.base.entity.FactoryModelDetail; import org.jeecg.modules.base.entity.WorkCenter; import org.jeecg.modules.base.entity.WorkCenterDetail; import org.jeecg.modules.base.mapper.FactoryModelMapper; import org.jeecg.modules.base.mapper.WorkCenterMapper; import org.jeecg.modules.base.service.IWorkCenterService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.function.Predicate; import java.util.stream.Collectors; /** * @Description: mom_base_work_center * @Author: jeecg-boot * @Date: 2022-11-17 * @Version: V1.0 */ @Service @Transactional public class WorkCenterServiceImpl extends ServiceImpl implements IWorkCenterService { @Autowired private FactoryModelMapper factoryModelMapper; @Autowired private WorkCenterMapper workCenterMapper; @Override//根据工厂建模id寻找该工厂所有工作中心 public Page getAllWorkCenterByPMFId(Page page,String parentFactoryModelId,Integer factoryModelVersion,Integer version) { return page.setRecords(workCenterMapper.selectWorkCenterByPMFIds(page,trueGetLeaves(factoryModelVersion,parentFactoryModelId),version)); } @Override//递归寻找工作中心的root节点 public FactoryModelDetail getTop(String eid, String fid) { FactoryModelDetail factoryModelDetail = factoryModelMapper.getFatherIdById(fid); if(!factoryModelDetail.getParentId().equals(eid)){ return getTop(eid,factoryModelDetail.getParentId()); } else{ return factoryModelDetail; } } @Override public Set getVersionList(){ Set set = new TreeSet(Comparator.reverseOrder()); set.addAll(workCenterMapper.getVersionList()); return set; } @Override public List getUpdateVersionlist(Integer version) { return workCenterMapper.getUpdateVersionlist(version); } @Override public List getUsableList() { return workCenterMapper.getUsableList(); } @Override public Map getNowAndLastUsableVersion() { List usableList = workCenterMapper.getUsableList(); List lastUsableList=workCenterMapper.getLastUsableList(); Map map = new HashMap<>(2); if(CollectionUtils.isNotEmpty(usableList)){ map.put("usableVersion",usableList.get(0).getVersion()); } if(CollectionUtils.isNotEmpty(lastUsableList)){ map.put("lastUsableVersion",lastUsableList.get(0).getVersion()); } return map; } @Override public List getLastUsableVersion() { return workCenterMapper.getLastUsableList(); } @Override public Integer getInitVersion() { List usableVersionList = baseMapper.getUsableList(); Set versionList = getVersionList(); if(CollectionUtils.isNotEmpty(usableVersionList)){ return usableVersionList.get(0).getVersion(); }else if(CollectionUtils.isNotEmpty(versionList)){ return versionList.stream().findFirst().get(); } return null; } @Override public List getVersionStatusByVersion(Integer version) { return baseMapper.getVersionStatusByVersion(version); } @Override public List> getFactoryVersionList() { return baseMapper.getFactoryVersionList(); } @Override public List> getEquipmentCategoryListByEnterpriseId(String enterpriseId) { return workCenterMapper.getEquipmentCategoryListByEnterpriseId(enterpriseId); } /** * 获取叶子节点 * @param * @return */ public List trueGetLeaves(Integer version,String parentId){ List children = factoryModelMapper.selectList( new QueryWrapper() .eq("parent_id",parentId) .eq("version",version) .eq("del_flag",0) ); List leaves = new ArrayList<>(); if(CollectionUtils.isNotEmpty(children)){ children.forEach(factoryModel -> { String id = factoryModel.getId(); if( CollectionUtils.isEmpty( factoryModelMapper.selectList(new QueryWrapper() .eq("parent_id",id) .eq("version",version) .eq("del_flag",0))) ){ leaves.add(id); } else { leaves.addAll(trueGetLeaves(version,id)); } }); } else { leaves.add(parentId); } return leaves; } }