|  |  | 
 |  |  | import com.alibaba.excel.util.StringUtils; | 
 |  |  | import com.dy.pmsGlobal.daoBa.BaUserMapper; | 
 |  |  | import com.dy.pmsGlobal.daoPlt.PltProductMapper; | 
 |  |  | import com.dy.pmsGlobal.daoPlt.PltProductionLineMapper; | 
 |  |  | import com.dy.pmsGlobal.daoPlt.PltStationMapper; | 
 |  |  | import com.dy.pmsGlobal.daoPr.PrAssemblyPlanMapper; | 
 |  |  | import com.dy.pmsGlobal.daoPr.PrProductionNodeMapper; | 
 |  |  | 
 |  |  | import com.dy.pmsGlobal.daoSta.StaAssemblyWorkLastMapper; | 
 |  |  | import com.dy.pmsGlobal.pojoBa.BaUser; | 
 |  |  | import com.dy.pmsGlobal.pojoPlt.PltProduct; | 
 |  |  | import com.dy.pmsGlobal.pojoPlt.PltProductionLine; | 
 |  |  | import com.dy.pmsGlobal.pojoPlt.PltStation; | 
 |  |  | import com.dy.pmsGlobal.pojoPr.PrAssemblyPlan; | 
 |  |  | import com.dy.pmsGlobal.pojoPr.PrProductionNode; | 
 |  |  | 
 |  |  |     private static final String WORK_TYPE_INSPECTION = "3"; | 
 |  |  |     private static final String WORK_TYPE_REPAIR = "4"; | 
 |  |  |  | 
 |  |  |     private static final String USER_PREFIX = "101"; | 
 |  |  |     private static final String STATION_PREFIX = "103"; | 
 |  |  | //    private static final String USER_PREFIX = "101"; | 
 |  |  | //    private static final String STATION_PREFIX = "103"; | 
 |  |  |  | 
 |  |  |     private PrAssemblyPlanMapper assemblyDao; | 
 |  |  |     private BaUserMapper baUserDao; | 
 |  |  | 
 |  |  |     private StaAssemblyWorkHistoryMapper assemblyWorkHistoryDao; | 
 |  |  |     private PrProductionNodeMapper nodeDao; | 
 |  |  |     private PltProductMapper productDao; | 
 |  |  |     private PltProductionLineMapper lineDao; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     public void setAssemblyDao(PrAssemblyPlanMapper assemblyDao) { | 
 |  |  | 
 |  |  |         this.productDao = productDao; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     public void setLineDao(PltProductionLineMapper lineDao) { | 
 |  |  |         this.lineDao = lineDao; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public BaUser getUserInfo(String id) { | 
 |  |  |         Long userId = null; | 
 |  |  | 
 |  |  |             throw new RuntimeException("员工编码不能为空"); | 
 |  |  |         } | 
 |  |  |         //用户101 | 
 |  |  |         if (id.startsWith(USER_PREFIX)) { | 
 |  |  |         if (id.startsWith(QrCodeConstant.TypeWorker)) { | 
 |  |  |             userId = Long.parseLong(id.toString().substring(3)); | 
 |  |  |         } else { | 
 |  |  |             userId = Long.parseLong(id.toString()); | 
 |  |  | 
 |  |  |             throw new RuntimeException("工站编码不能为空"); | 
 |  |  |         } | 
 |  |  |         //工站103 | 
 |  |  |         if (id.startsWith(STATION_PREFIX)) { | 
 |  |  |         if (id.startsWith(QrCodeConstant.TypeStation)) { | 
 |  |  |             stationId = Long.parseLong(id.toString().substring(3)); | 
 |  |  |         } else { | 
 |  |  |             stationId = Long.parseLong(id.toString()); | 
 |  |  | 
 |  |  |             throw new RuntimeException("工站编码:" + stationId + "不在系统中,请先维护工站信息"); | 
 |  |  |         } else if (stationInfo.getDisabled()) { | 
 |  |  |             throw new RuntimeException("工站(" + stationInfo.getName() + ")编码:" + stationId + "在系统已禁用,请先启用工站"); | 
 |  |  |         } | 
 |  |  |         //检查线体是否被禁用 | 
 |  |  |         PltProductionLine lineInfo = lineDao.selectByPrimaryKey(stationInfo.getLineId()); | 
 |  |  |         if (lineInfo == null ) { | 
 |  |  |             throw new RuntimeException("工站(" + stationInfo.getName() + ")编码:" + stationId + "所在线体编码:" + lineInfo.getId() + "在系统不存在,请先找管理人员检查"); | 
 |  |  |         }else if(lineInfo.getDisabled()){ | 
 |  |  |             throw new RuntimeException("工站(" + stationInfo.getName() + ")编码:" + stationId + "所在线体编码:" + lineInfo.getName() + "在系统已禁用,请先启用线体"); | 
 |  |  |         } | 
 |  |  |         return stationInfo; | 
 |  |  |     } | 
 |  |  | 
 |  |  |             throw new RuntimeException("工站编码或员工编码均不能为空,请检查"); | 
 |  |  |         } | 
 |  |  |         //工站103 | 
 |  |  |         if (vo.getStationId().startsWith(USER_PREFIX)) { | 
 |  |  |         if (vo.getStationId().startsWith(QrCodeConstant.TypeWorker)) { | 
 |  |  |             userInfo = getUserInfo(vo.getStationId()); | 
 |  |  |         } else { | 
 |  |  |             stationInfo = getStationInfo(vo.getStationId()); | 
 |  |  |         } | 
 |  |  |         if (vo.getUserId().startsWith(STATION_PREFIX)) { | 
 |  |  |         if (vo.getUserId().startsWith(QrCodeConstant.TypeStation)) { | 
 |  |  |             stationInfo = getStationInfo(vo.getUserId()); | 
 |  |  |         } else { | 
 |  |  |             userInfo = getUserInfo(vo.getUserId()); | 
 |  |  | 
 |  |  |         param.setStationId(stationInfo.getId()); | 
 |  |  |         param.setStatus(STATUS_NORMAL); | 
 |  |  |         List<StaAssemblyWorkLast> workLasts = assemblyWorkLastDao.selectList(param); | 
 |  |  |         long userId = userInfo.getId(); | 
 |  |  |         //long userId = userInfo.getId(); | 
 |  |  |         if (workLasts.size() > 0) { | 
 |  |  |             List<StaAssemblyWorkLast> userStationList = workLasts.stream().filter(item -> userId == item.getUserId()).collect(Collectors.toList()); | 
 |  |  |             if (userStationList.size() == 0) { | 
 |  |  |             StaAssemblyWorkLast paramQuery = new StaAssemblyWorkLast(); | 
 |  |  |             paramQuery.setUserId(userInfo.getId()); | 
 |  |  |             paramQuery.setStationId(stationInfo.getId()); | 
 |  |  |             paramQuery.setPlanId(vo.getPlanId()); | 
 |  |  |             paramQuery.setProcessId(vo.getProcessId()); | 
 |  |  |             paramQuery.setNodeId(vo.getNodeId()); | 
 |  |  |             paramQuery.setWorkType(vo.getWorkType()); | 
 |  |  |             StaAssemblyWorkLast userStation =  assemblyWorkLastDao.existsEntity(paramQuery); | 
 |  |  |             //List<StaAssemblyWorkLast> userStationList = workLasts.stream().filter(item -> userId == item.getUserId()).collect(Collectors.toList()); | 
 |  |  |             if (userStation == null) { | 
 |  |  |                 //删除工站登录信息 | 
 |  |  |                 for (int i = 0; i < workLasts.size(); i++) { | 
 |  |  |                     logout(workLasts.get(i).getId().toString()); | 
 |  |  |                 } | 
 |  |  |                 //throw new RuntimeException("员工(" +userInfo.getName() + ")编码:" + workLasts.get(0).getUserId() + "已经绑定该工站(" + stationInfo.getName() + ")编码:" + workLasts.get(0).getStationId() + ".请先让其解绑"); | 
 |  |  |             } else { | 
 |  |  |                 BeanUtils.copyProperties(userStationList.get(0), result); | 
 |  |  |                 BeanUtils.copyProperties(userStation, result); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         if (result.getId() == null) { | 
 |  |  | 
 |  |  |         } | 
 |  |  |         BaUser userInfo = getUserInfo(result.getUserId().toString()); | 
 |  |  |         PltStation stationInfo = getStationInfo(result.getStationId().toString()); | 
 |  |  |         //如果是维修work_type 没有 planId processId nodeId | 
 |  |  |         if (WORK_TYPE_REPAIR.equals(result.getWorkType())) { | 
 |  |  |         //如果是无任务计划 如维修work_type 没有 planId processId nodeId | 
 |  |  |         if (result.getPlanId() != null) { | 
 |  |  |             //校验planId processId nodeId | 
 |  |  |             PrAssemblyPlan assyPlan = assemblyDao.selectByPrimaryKey(result.getPlanId()); | 
 |  |  |             boolean hasNodeId = assyPlan.getProcess().getNodes().stream() | 
 |  |  | 
 |  |  |                 } | 
 |  |  |                 return result; | 
 |  |  |             } else { | 
 |  |  |                 List<PrProductionNode> nodeInfo = assyPlan.getProcess().getNodes().stream() | 
 |  |  |                         .filter(node -> node.id.equals(result.getNodeId())).collect(Collectors.toList()); | 
 |  |  |                 result.setPlanName(assyPlan.getName()); | 
 |  |  |                 result.setProcessName(assyPlan.getProcessName()); | 
 |  |  |                 result.setNodeName(assyPlan.getProcess().getNodes().get(0).getContent()); | 
 |  |  |                 result.setNodeName(nodeInfo.get(0).getContent()); | 
 |  |  |                 //找到对应的产品信息 | 
 |  |  |                 PltProduct product = productDao.selectByPrimaryKey(assyPlan.getProId()); | 
 |  |  |                 if (product != null) { | 
 |  |  | 
 |  |  |         //先check | 
 |  |  |         StaAssemblyWorkLast checkResult = checkUserAndStationUsed(vo); | 
 |  |  |         //校验planId processId nodeId | 
 |  |  |         PrAssemblyPlan assyPlan = assemblyDao.selectByPrimaryKey(vo.getPlanId()); | 
 |  |  |         if (assyPlan == null) { | 
 |  |  |             throw new RuntimeException("组装任务已经在系统中删除请检查,刷新并重新选择任务"); | 
 |  |  |         PrAssemblyPlan assyPlan = null; | 
 |  |  |         if (vo.getPlanId() != null) { | 
 |  |  |             assyPlan = assemblyDao.selectByPrimaryKey(vo.getPlanId()); | 
 |  |  |             if (assyPlan == null) { | 
 |  |  |                 throw new RuntimeException("组装任务已经在系统中删除请检查,刷新并重新选择任务"); | 
 |  |  |             } | 
 |  |  |             boolean hasNodeId = assyPlan.getProcess().getNodes().stream() | 
 |  |  |                     .anyMatch(node -> node.id.equals(vo.getNodeId())); | 
 |  |  |             if (!hasNodeId) { | 
 |  |  |                 throw new RuntimeException("节点信息有误或被其他人员修改,请重新选择节点信息"); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         boolean hasNodeId = assyPlan.getProcess().getNodes().stream() | 
 |  |  |                 .anyMatch(node -> node.id.equals(vo.getNodeId())); | 
 |  |  |         if (!hasNodeId) { | 
 |  |  |             throw new RuntimeException("节点信息有误或被其他人员修改,请重新选择节点信息"); | 
 |  |  |         StaAssemblyWorkLast result = new StaAssemblyWorkLast(); | 
 |  |  |         //查询到当前的信息 如果登录信息一模一样,不会更新 | 
 |  |  |         if (checkResult.getId() != null) { | 
 |  |  |             BeanUtils.copyProperties(checkResult, result);//checkResult拷贝到result | 
 |  |  |             result.setDt(new Date()); | 
 |  |  |             assemblyWorkLastDao.updateByPrimaryKeySelective(result); | 
 |  |  |         }else{ | 
 |  |  |             //逐个封装保存 | 
 |  |  |             BeanUtils.copyProperties(vo, result);//vo拷贝到result | 
 |  |  |             result.setUserId(checkResult.getUserId()); | 
 |  |  |             result.setStationId(checkResult.getStationId()); | 
 |  |  |             result.setLineId(checkResult.getLineId()); | 
 |  |  |             result.setStatus(STATUS_NORMAL); | 
 |  |  |             result.setStartTime(new Date()); | 
 |  |  |             if (vo.getPlanId() != null) { | 
 |  |  |                 result.setPlanId(assyPlan.getId()); | 
 |  |  |                 result.setProcessId(assyPlan.getProcess().getId()); | 
 |  |  |                 result.setNodeId(vo.getNodeId()); | 
 |  |  |             } | 
 |  |  |             int count =  assemblyWorkLastDao.insertSelective(result); | 
 |  |  |             if (count <= 0) { | 
 |  |  |                 throw new RuntimeException("数据库存储失败"); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         //数据逐个封装返回 | 
 |  |  |         vo.setLineId(checkResult.getLineId()); | 
 |  |  |         StaAssemblyWorkLast staLast = new StaAssemblyWorkLast(); | 
 |  |  |         BeanUtils.copyProperties(vo, staLast); | 
 |  |  |         staLast.setUserId(checkResult.getUserId()); | 
 |  |  |         staLast.setStationId(checkResult.getStationId()); | 
 |  |  |         int count = 0; | 
 |  |  |         if (checkResult.getId() == null) { | 
 |  |  |             BeanUtils.copyProperties(vo, staLast);//vo拷贝到staLast | 
 |  |  |             staLast.setUserId(checkResult.getUserId()); | 
 |  |  |             staLast.setStationId(checkResult.getStationId()); | 
 |  |  |             staLast.setStatus(STATUS_NORMAL); | 
 |  |  |             staLast.setStartTime(new Date()); | 
 |  |  |             count = assemblyWorkLastDao.insertSelective(staLast); | 
 |  |  |         } else { | 
 |  |  |             //保存一条history? | 
 |  |  |             BeanUtils.copyProperties(checkResult, staLast); | 
 |  |  |             staLast.setPlanId(assyPlan.getId()); | 
 |  |  |             staLast.setProcessId(assyPlan.getProcess().getId()); | 
 |  |  |             staLast.setNodeId(vo.getNodeId()); | 
 |  |  |             staLast.setStatus(STATUS_NORMAL); | 
 |  |  |             staLast.setStartTime(new Date()); | 
 |  |  |             count = assemblyWorkLastDao.updateByPrimaryKeySelective(staLast); | 
 |  |  |         if (assyPlan != null) { | 
 |  |  |             List<PrProductionNode> nodeInfo = assyPlan.getProcess().getNodes().stream() | 
 |  |  |                     .filter(node -> node.id.equals(vo.getNodeId())).collect(Collectors.toList()); | 
 |  |  |             result.setPlanName(assyPlan.getName()); | 
 |  |  |             result.setProcessName(assyPlan.getProcessName()); | 
 |  |  |             result.setNodeName(nodeInfo.get(0).getContent()); | 
 |  |  |             //找到对应的产品信息 | 
 |  |  |             PltProduct product = productDao.selectByPrimaryKey(assyPlan.getProId()); | 
 |  |  |             if (product == null) { | 
 |  |  |                 throw new RuntimeException("产品信息有误或被其他人员修改,请登录管理系统查看任务关联产品ID为:" + assyPlan.getProId()); | 
 |  |  |             } | 
 |  |  |             result.setProId(product.getId()); | 
 |  |  |             result.setProName(product.getName()); | 
 |  |  |             String devicePrefix = QrCodeConstant.TypeProduct + product.getCode() + assyPlan.getBatchNo(); | 
 |  |  |             result.setDevicePrefix(devicePrefix); | 
 |  |  |         } | 
 |  |  |         if (count <= 0) { | 
 |  |  |             throw new RuntimeException("数据库存储失败"); | 
 |  |  |         } | 
 |  |  |         StaAssemblyWorkLast result = assemblyWorkLastDao.selectByPrimaryKey(staLast.getId()); | 
 |  |  |         List<PrProductionNode> nodeInfo = assyPlan.getProcess().getNodes().stream() | 
 |  |  |                 .filter(node -> node.id.equals(vo.getNodeId())).collect(Collectors.toList()); | 
 |  |  |         result.setPlanName(assyPlan.getName()); | 
 |  |  |         result.setProcessName(assyPlan.getProcessName()); | 
 |  |  |         result.setNodeName(assyPlan.getProcess().getNodes().get(0).getContent()); | 
 |  |  |         //找到对应的产品信息 | 
 |  |  |         PltProduct product = productDao.selectByPrimaryKey(assyPlan.getProId()); | 
 |  |  |         if (product == null) { | 
 |  |  |             throw new RuntimeException("产品信息有误或被其他人员修改,请登录管理系统查看任务关联产品ID为:" + assyPlan.getProId()); | 
 |  |  |         } | 
 |  |  |         result.setProId(product.getId()); | 
 |  |  |         result.setProName(product.getName()); | 
 |  |  |         String devicePrefix = QrCodeConstant.TypeProduct + product.getCode() + assyPlan.getBatchNo(); | 
 |  |  |         result.setDevicePrefix(devicePrefix); | 
 |  |  |         return result; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |         } | 
 |  |  |         BaUser userInfo = getUserInfo(assistant); | 
 |  |  |         //当前登录人不能是辅助人员 | 
 |  |  |         if (workLast.getUserId() == userInfo.getId()) { | 
 |  |  |         if (workLast.getUserId().intValue() == userInfo.getId().intValue()) { | 
 |  |  |             throw new RuntimeException(userInfo.getName() + "是当前登录人员,不必添加为辅助人员."); | 
 |  |  |         } | 
 |  |  |         String userId = userInfo.getId().toString(); | 
 |  |  | 
 |  |  |         if (workLast == null) { | 
 |  |  |             throw new RuntimeException("系统中没有当前登录信息,请检查或重新登录"); | 
 |  |  |         } | 
 |  |  |         if ((!StringUtils.isBlank(assistant)) && assistant.startsWith(USER_PREFIX)) { | 
 |  |  |         if ((!StringUtils.isBlank(assistant)) && assistant.startsWith(QrCodeConstant.TypeWorker)) { | 
 |  |  |             assistant = assistant.substring(3); | 
 |  |  |         } | 
 |  |  |         if (!StringUtils.isBlank(workLast.getAssistants())) { |