Переглянути джерело

排产增加上下料站登录人员的校验及设备校验

yejian016332 3 роки тому
батько
коміт
edddd19854

+ 92 - 44
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/operationManagementCenter/service/impl/TaskServiceImpl.java

@@ -1,8 +1,11 @@
 package com.github.zuihou.business.operationManagementCenter.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
-import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.zuihou.authority.dao.auth.StationUserLoginInfoMapper;
+import com.github.zuihou.authority.dao.auth.UserMapper;
+import com.github.zuihou.authority.entity.auth.StationUserLoginInfo;
+import com.github.zuihou.authority.entity.auth.User;
 import com.github.zuihou.base.service.SuperServiceImpl;
 import com.github.zuihou.business.DemoLine.DemoCacheKey;
 import com.github.zuihou.business.DemoLine.DemoLineConstant;
@@ -16,13 +19,15 @@ import com.github.zuihou.business.operationManagementCenter.dao.TTaskMapper;
 import com.github.zuihou.business.operationManagementCenter.dao.WorkpieceMapper;
 import com.github.zuihou.business.operationManagementCenter.entity.*;
 import com.github.zuihou.business.operationManagementCenter.service.TaskService;
-import com.github.zuihou.business.operationManagementCenter.service.WorkpieceService;
 import com.github.zuihou.business.productionReadyCenter.dao.AutoNodeMapper;
 import com.github.zuihou.business.productionReadyCenter.dao.BomProcedureProductionresourceMapper;
 import com.github.zuihou.business.productionReadyCenter.dao.BomProcedureProgramMapper;
 import com.github.zuihou.business.productionReadyCenter.entity.*;
+import com.github.zuihou.business.productionResourceCenter.dao.ProductionresourceBizMapper;
+import com.github.zuihou.business.productionResourceCenter.dao.ZZoneMapper;
+import com.github.zuihou.business.productionResourceCenter.entity.Productionresource;
 import com.github.zuihou.business.productionResourceCenter.entity.Repair;
-import com.github.zuihou.business.productionResourceCenter.entity.ResourceAutoCode;
+import com.github.zuihou.business.productionResourceCenter.entity.ZZone;
 import com.github.zuihou.business.productionResourceCenter.service.RepairService;
 import com.github.zuihou.common.constant.CacheKey;
 import com.github.zuihou.common.constant.CodeRuleModule;
@@ -38,8 +43,6 @@ import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
 import java.sql.Timestamp;
-import java.time.LocalDateTime;
-import java.time.temporal.ChronoField;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -78,6 +81,14 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
     private BomProcedureProductionresourceMapper procedureProductionresourceMapper;
     @Autowired
     private BomProcedureProgramMapper bomProcedureProgramMapper;
+    @Autowired
+    private StationUserLoginInfoMapper stationUserLoginInfoMapper;
+    @Autowired
+    private ZZoneMapper zZoneMapper;
+    @Autowired
+    private UserMapper userMapper;
+    @Autowired
+    private ProductionresourceBizMapper productionresourceBizMapper;
 
     @Override
     public List<TTask> createTaskByPlan(List<PlanProduct> planProductList, Map<Long,List<BomProcedure>> bomProcedureMap,String taskBatchNo) {
@@ -200,6 +211,25 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
             List<BomProcedure> bomProcedureList = bomProcedureMap.get(bomId);
             Map<Long,BomProcedure> bpMap = bomProcedureList.stream().collect(Collectors.toMap(BomProcedure::getId, t->t));
 
+            // 将人工上下料放在排产中计算,上下料工艺配置中可配置所有上下料,实际排产中根据上下料站人员登录的实际情况和订单产品进行绑定,将不是该订单产线登录的人员上下料站剔除
+            // 取得当前上下料站人员登录情况
+            Order order = orderMapper.selectById(orderProduct.getOrderId());
+            Long zoneId = order.getZoneId();
+            ZZone zZone = zZoneMapper.selectById(zoneId);
+            Long orgId = zZone.getOrgId();
+
+            // 查询该机构下的所有用户对应的上下料站
+            LbqWrapper<User> userWrapper = new LbqWrapper<User>().eq(User::getOrg, orgId);
+            List<User> orgUsers = userMapper.selectList(userWrapper);
+            List<Long>  userIds = orgUsers.stream().map(p -> p.getId()).collect(Collectors.toList());
+            LbqWrapper<StationUserLoginInfo> stationUserLoginInfoWrapper = new LbqWrapper<StationUserLoginInfo>().in(StationUserLoginInfo::getUserId, userIds);
+            List<StationUserLoginInfo> stationUserLoginInfos = stationUserLoginInfoMapper.selectList(stationUserLoginInfoWrapper);
+            // 工人上下料站人员信息
+            List<Long>  stationResourcesIds = stationUserLoginInfos.stream().map(p -> p.getStationId()).collect(Collectors.toList());
+
+            if(stationResourcesIds.size() == 0){
+                return null;
+            }
 
             //产品批次号,用于产品分解任务关联
             String bomBatchNo = UUID.randomUUID().toString().replace("-", "");
@@ -214,7 +244,6 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
                 for(int bomProcedureIndex = 0; bomProcedureIndex < bomProcedureList.size(); bomProcedureIndex++){
                     // 工序可用设备
                     List<CandidateProcess> candidateProcesses = new ArrayList<CandidateProcess>();
-
                     BomProcedure bomProcedure = bomProcedureList.get(bomProcedureIndex);
 
                     TTask task = new TTask();
@@ -266,49 +295,21 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
                         Machine machine = new Machine();
                         CandidateProcess candidateProcess = new CandidateProcess();
                         for(BomProcedureProductionresource bomProcedureProductionresource : bomProcedure.getProductionresourceList()){
-                            if(!machineMap.containsKey(bomProcedureProductionresource.getResourceId())){
-                                machine.setId(bomProcedureProductionresource.getResourceId().longValue());
-                                // 添加设备维保时间片
-                                LbqWrapper<Repair> repairWrapper = new LbqWrapper<Repair>().eq(Repair::getProductionresourceId, bomProcedureProductionresource.getResourceId()).gt(Repair::getRepairStartTime, cn.hutool.core.date.DateUtil.toLocalDateTime(cn.hutool.core.date.DateUtil.date()));
-                                List<Repair> repairs = repairService.list(repairWrapper);
-                                for(Repair repair : repairs){
-                                    machine.getNoUseTime().add(Timestamp.valueOf(repair.getRepairStartTime()).getTime() + "-" + Timestamp.valueOf(repair.getRepairEndTime()).getTime());
-                                }
-                                // 添加设备已经分配的时间片(从当前系统时间开始计算)
-                                LbqWrapper<TTask> tTaskWrapper = new LbqWrapper<TTask>().eq(TTask::getResourceId, bomProcedureProductionresource.getResourceId()).gt(TTask::getExpectStartTime, cn.hutool.core.date.DateUtil.current(false)).orderByAsc(TTask::getExpectStartTime);
-                                List<TTask> resourseTasks = tTaskMapper.selectList(tTaskWrapper);
-                                for(TTask tTask : resourseTasks){
-                                    machine.getNoUseTime().add(tTask.getExpectStartTime().getTime() + "-" + tTask.getExpectEndTime().getTime());
-                                }
-                                machineMap.put("M" + bomProcedureProductionresource.getResourceId(), machine);
-                            }
-
-                            if(!candidateProMap.containsKey(workpiece.getCompleteBatchNo() + "_" + bomProcedure.getNo())){
-                                candidateProcess.setMachineId(bomProcedureProductionresource.getResourceId());
-                                LbqWrapper<BomProcedureProgram> bomProcedureProgramWrapper = new LbqWrapper<BomProcedureProgram>().eq(BomProcedureProgram::getResourceId, bomProcedureProductionresource.getResourceId()).eq(BomProcedureProgram::getProcedureId,bomProcedureProductionresource.getProcedureId());
-                                List<BomProcedureProgram> bomProcedureProgramList = bomProcedureProgramMapper.selectList(bomProcedureProgramWrapper);
 
-                                BomProcedureProgram bomProcedureProgram = null;
-                                if(CollectionUtil.isNotEmpty(bomProcedureProgramList)){
-                                    bomProcedureProgram = bomProcedureProgramList.get(0);
+                            // TODO 工艺模板还是需要工序类型,先用名称判断
+                            if(bomProcedure.getName().contains("上料") || bomProcedure.getName().contains("下料")){
+                                if(stationResourcesIds.contains(bomProcedureProductionresource.getResourceId())){
+                                    assemblingCandidate(candidateProMap, machineMap, workpiece, candidateProcesses, bomProcedure, machine, candidateProcess, bomProcedureProductionresource);
                                 }
 
-                                // 人工上下料没有程序的情况直接用工序时间
-                                if(null != bomProcedureProgram && null != bomProcedureProgram.getRunTime()){
-                                    candidateProcess.setProcedureId(bomProcedureProgram.getProcedureId());
-                                    candidateProcess.setDuration(bomProcedureProgram.getRunTime().intValue());
-                                    candidateProcess.setRunTime(bomProcedureProgram.getRunTime());
-                                }else{
-                                    candidateProcess.setProcedureId(bomProcedure.getId());
-                                    //candidateProcess.setDuration(bomProcedure.getPrepareWorkhours().intValue() + bomProcedure.getRatedWorkhours().intValue());
-                                    candidateProcess.setDuration(bomProcedure.getRatedWorkhours().intValue());
-                                    candidateProcess.setRunTime( bomProcedure.getRatedWorkhours());
+                            }else{
+                                // 查询设备状态
+                                Productionresource productionresource = productionresourceBizMapper.selectOne(Wraps.<Productionresource>lbQ().eq(Productionresource::getId, bomProcedureProductionresource.getResourceId()));
+                                if("1".equals(productionresource.getStatus()) || "1".equals(productionresource.getOnlineStatus())){
+                                    assemblingCandidate(candidateProMap, machineMap, workpiece, candidateProcesses, bomProcedure, machine, candidateProcess, bomProcedureProductionresource);
                                 }
-                                if(!candidateProcesses.contains(candidateProcess)){
-                                    candidateProcesses.add(candidateProcess);
-                                }
-                                candidateProMap.put(workpiece.getCompleteBatchNo() + "_" + bomProcedure.getNo(),candidateProcesses);
                             }
+
                         }
                     }
 
@@ -338,6 +339,7 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
         }
 
         // 调用java简易排产
+
         Instance instance = new Instance();
         instance.setTotalOpNum(totalOpNum);
         // 赋值设备map
@@ -376,6 +378,52 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
         return taskList;
     }
 
+    private void assemblingCandidate(Map<String, List<CandidateProcess>> candidateProMap, Map<String, Machine> machineMap, TWorkpiece workpiece, List<CandidateProcess> candidateProcesses, BomProcedure bomProcedure, Machine machine, CandidateProcess candidateProcess, BomProcedureProductionresource bomProcedureProductionresource) {
+        if (!machineMap.containsKey(bomProcedureProductionresource.getResourceId())) {
+            machine.setId(bomProcedureProductionresource.getResourceId().longValue());
+            // 添加设备维保时间片
+            LbqWrapper<Repair> repairWrapper = new LbqWrapper<Repair>().eq(Repair::getProductionresourceId, bomProcedureProductionresource.getResourceId()).gt(Repair::getRepairStartTime, cn.hutool.core.date.DateUtil.toLocalDateTime(cn.hutool.core.date.DateUtil.date()));
+            List<Repair> repairs = repairService.list(repairWrapper);
+            for (Repair repair : repairs) {
+                machine.getNoUseTime().add(Timestamp.valueOf(repair.getRepairStartTime()).getTime() + "-" + Timestamp.valueOf(repair.getRepairEndTime()).getTime());
+            }
+            // 添加设备已经分配的时间片(从当前系统时间开始计算)
+            LbqWrapper<TTask> tTaskWrapper = new LbqWrapper<TTask>().eq(TTask::getResourceId, bomProcedureProductionresource.getResourceId()).gt(TTask::getExpectStartTime, cn.hutool.core.date.DateUtil.current(false)).orderByAsc(TTask::getExpectStartTime);
+            List<TTask> resourseTasks = tTaskMapper.selectList(tTaskWrapper);
+            for (TTask tTask : resourseTasks) {
+                machine.getNoUseTime().add(tTask.getExpectStartTime().getTime() + "-" + tTask.getExpectEndTime().getTime());
+            }
+            machineMap.put("M" + bomProcedureProductionresource.getResourceId(), machine);
+        }
+
+        if (!candidateProMap.containsKey(workpiece.getCompleteBatchNo() + "_" + bomProcedure.getNo())) {
+            candidateProcess.setMachineId(bomProcedureProductionresource.getResourceId());
+            LbqWrapper<BomProcedureProgram> bomProcedureProgramWrapper = new LbqWrapper<BomProcedureProgram>().eq(BomProcedureProgram::getResourceId, bomProcedureProductionresource.getResourceId()).eq(BomProcedureProgram::getProcedureId, bomProcedureProductionresource.getProcedureId());
+            List<BomProcedureProgram> bomProcedureProgramList = bomProcedureProgramMapper.selectList(bomProcedureProgramWrapper);
+
+            BomProcedureProgram bomProcedureProgram = null;
+            if (CollectionUtil.isNotEmpty(bomProcedureProgramList)) {
+                bomProcedureProgram = bomProcedureProgramList.get(0);
+            }
+
+            // 人工上下料没有程序的情况直接用工序时间
+            if (null != bomProcedureProgram && null != bomProcedureProgram.getRunTime()) {
+                candidateProcess.setProcedureId(bomProcedureProgram.getProcedureId());
+                candidateProcess.setDuration(bomProcedureProgram.getRunTime().intValue());
+                candidateProcess.setRunTime(bomProcedureProgram.getRunTime());
+            } else {
+                candidateProcess.setProcedureId(bomProcedure.getId());
+                //candidateProcess.setDuration(bomProcedure.getPrepareWorkhours().intValue() + bomProcedure.getRatedWorkhours().intValue());
+                candidateProcess.setDuration(bomProcedure.getRatedWorkhours().intValue());
+                candidateProcess.setRunTime(bomProcedure.getRatedWorkhours());
+            }
+            if (!candidateProcesses.contains(candidateProcess)) {
+                candidateProcesses.add(candidateProcess);
+            }
+            candidateProMap.put(workpiece.getCompleteBatchNo() + "_" + bomProcedure.getNo(), candidateProcesses);
+        }
+    }
+
 //    private List<TTask> preHandMatlab(List<TTask> taskList,List<TTask> tList){
 //        List<TTask> returnList = new ArrayList<TTask>();
 //        String taskJSon = JSONArray.toJSONString(taskList,SerializerFeature.WriteNullListAsEmpty,SerializerFeature.WriteNullStringAsEmpty