|  |  |  | 
|---|
|  |  |  | package com.dy.pmsStation.workOrder; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.alibaba.excel.util.StringUtils; | 
|---|
|  |  |  | import com.dy.common.webUtil.BaseResponseUtils; | 
|---|
|  |  |  | import com.dy.pmsGlobal.daoBa.BaUserMapper; | 
|---|
|  |  |  | import com.dy.pmsGlobal.daoOth.OthFileMapper; | 
|---|
|  |  |  | import com.dy.pmsGlobal.daoPlt.PltStationMapper; | 
|---|
|  |  |  | import com.dy.pmsGlobal.daoPr.PrAssemblyPlanMapper; | 
|---|
|  |  |  | import com.dy.pmsGlobal.daoSta.StaAssemblyWorkHistoryMapper; | 
|---|
|  |  |  | import com.dy.pmsGlobal.daoSta.StaAssemblyWorkLastMapper; | 
|---|
|  |  |  | import com.dy.pmsGlobal.dyFile.FileOperate; | 
|---|
|  |  |  | import com.dy.pmsGlobal.dyFile.FileRestVo; | 
|---|
|  |  |  | 
|---|
|  |  |  | import com.dy.pmsGlobal.pojoPr.PrAssemblyPlan; | 
|---|
|  |  |  | import com.dy.pmsGlobal.pojoPr.PrProductionNode; | 
|---|
|  |  |  | import com.dy.pmsGlobal.pojoPr.PrWorkingInstruction; | 
|---|
|  |  |  | import com.dy.pmsGlobal.pojoSta.StaAssemblyWorkHistory; | 
|---|
|  |  |  | import com.dy.pmsGlobal.pojoSta.StaAssemblyWorkLast; | 
|---|
|  |  |  | import lombok.extern.slf4j.Slf4j; | 
|---|
|  |  |  | import org.springframework.beans.BeanUtils; | 
|---|
|  |  |  | 
|---|
|  |  |  | private BaUserMapper baUserDao; | 
|---|
|  |  |  | private PltStationMapper pltStationDao; | 
|---|
|  |  |  | private StaAssemblyWorkLastMapper assemblyWorkLastDao; | 
|---|
|  |  |  | private StaAssemblyWorkHistoryMapper assemblyWorkHistoryDao; | 
|---|
|  |  |  | private FileOperate fileOperate; | 
|---|
|  |  |  | private OthFileMapper othFileMapper; | 
|---|
|  |  |  | @Value("${dy.webFile.fmUrl}") | 
|---|
|  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private void setPltStationDao(PltStationMapper pltStationDao){ | 
|---|
|  |  |  | this.pltStationDao = pltStationDao; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private void setStaAssemblyWorkHistoryDao(StaAssemblyWorkHistoryMapper assemblyWorkHistoryDao){ | 
|---|
|  |  |  | this.assemblyWorkHistoryDao = assemblyWorkHistoryDao; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private void setStaAssemblyWorkLastDao(StaAssemblyWorkLastMapper assemblyWorkLastDao){ | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return userInfo; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public PltStation getStationInfo(String id){ | 
|---|
|  |  |  | //仅检查工站信息以及工站占用情况 | 
|---|
|  |  |  | Long stationId = null; | 
|---|
|  |  |  | if(StringUtils.isBlank(id)){ | 
|---|
|  |  |  | throw new RuntimeException("工站编码不能为空"); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return stationInfo; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | public StaAssemblyWorkLast checkStationUsed(QueryVo last){ | 
|---|
|  |  |  | public StaAssemblyWorkLast checkStationUsed(String id){ | 
|---|
|  |  |  | StaAssemblyWorkLast result = new StaAssemblyWorkLast(); | 
|---|
|  |  |  | PltStation stationInfo = null; | 
|---|
|  |  |  | if(StringUtils.isBlank(id)){ | 
|---|
|  |  |  | throw new RuntimeException("工站编码不能为空,请检查"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | stationInfo = getStationInfo(id); | 
|---|
|  |  |  | //检查表中stationId是否已经存在 | 
|---|
|  |  |  | StaAssemblyWorkLast param = new StaAssemblyWorkLast(); | 
|---|
|  |  |  | param.setStationId(stationInfo.getId()); | 
|---|
|  |  |  | param.setStatus(1); | 
|---|
|  |  |  | List<StaAssemblyWorkLast> workLasts = assemblyWorkLastDao.selectList(param); | 
|---|
|  |  |  | if(workLasts.size() > 0){ | 
|---|
|  |  |  | BeanUtils.copyProperties(workLasts.get(0),result); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | result.setStationId(stationInfo.getId()); | 
|---|
|  |  |  | result.setStationName(stationInfo.getName()); | 
|---|
|  |  |  | result.setLineId(stationInfo.getLineId()); | 
|---|
|  |  |  | result.setLineName(stationInfo.getLineName()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return result; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public StaAssemblyWorkLast checkUserAndStationUsed(QueryVo vo){ | 
|---|
|  |  |  | StaAssemblyWorkLast result = new StaAssemblyWorkLast(); | 
|---|
|  |  |  | PltStation stationInfo = null; | 
|---|
|  |  |  | BaUser userInfo = null; | 
|---|
|  |  |  | if(StringUtils.isBlank(last.getStationId()) || StringUtils.isBlank(last.getUserId())){ | 
|---|
|  |  |  | if(StringUtils.isBlank(vo.getStationId()) || StringUtils.isBlank(vo.getUserId())){ | 
|---|
|  |  |  | throw new RuntimeException("工站编码或员工编码均不能为空,请检查"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //工站103 | 
|---|
|  |  |  | if(last.getStationId().startsWith("101")){ | 
|---|
|  |  |  | userInfo = getUserInfo(last.getStationId()); | 
|---|
|  |  |  | if(vo.getStationId().startsWith("101")){ | 
|---|
|  |  |  | userInfo = getUserInfo(vo.getStationId()); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | stationInfo = getStationInfo(last.getStationId()); | 
|---|
|  |  |  | stationInfo = getStationInfo(vo.getStationId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(last.getUserId().startsWith("103")){ | 
|---|
|  |  |  | stationInfo = getStationInfo(last.getUserId()); | 
|---|
|  |  |  | if(vo.getUserId().startsWith("103")){ | 
|---|
|  |  |  | stationInfo = getStationInfo(vo.getUserId()); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | userInfo = getUserInfo(last.getUserId()); | 
|---|
|  |  |  | userInfo = getUserInfo(vo.getUserId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(userInfo == null && stationInfo == null){ | 
|---|
|  |  |  | throw new RuntimeException("员工编码:"+ last.getUserId() + "和工站编码:" + last.getStationId() + "不正确,请检查"); | 
|---|
|  |  |  | throw new RuntimeException("员工编码:"+ vo.getUserId() + "和工站编码:" + vo.getStationId() + "不正确,请检查"); | 
|---|
|  |  |  | }else if(userInfo == null){ | 
|---|
|  |  |  | throw new RuntimeException("员工编码:"+ last.getUserId() + "不正确,请检查"); | 
|---|
|  |  |  | throw new RuntimeException("员工编码:"+ vo.getUserId() + "不正确,请检查"); | 
|---|
|  |  |  | }else if(stationInfo == null){ | 
|---|
|  |  |  | throw new RuntimeException("工站编码:" + last.getStationId() + "不正确,请检查"); | 
|---|
|  |  |  | throw new RuntimeException("工站编码:" + vo.getStationId() + "不正确,请检查"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //检查表中stationId是否已经存在 | 
|---|
|  |  |  | StaAssemblyWorkLast param = new StaAssemblyWorkLast(); | 
|---|
|  |  |  | 
|---|
|  |  |  | return result; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public int save(QueryVo last) { | 
|---|
|  |  |  | public StaAssemblyWorkLast save(QueryVo vo) { | 
|---|
|  |  |  | //先check | 
|---|
|  |  |  | StaAssemblyWorkLast checkResult = checkStationUsed(last); | 
|---|
|  |  |  | StaAssemblyWorkLast checkResult = checkUserAndStationUsed(vo); | 
|---|
|  |  |  | //校验planId processId nodeId | 
|---|
|  |  |  | PrAssemblyPlan params = new PrAssemblyPlan(); | 
|---|
|  |  |  | params.setStatus(1); | 
|---|
|  |  |  | params.setId(last.getPlanId()); | 
|---|
|  |  |  | params.setProcessId(last.getProcessId()); | 
|---|
|  |  |  | params.setId(vo.getPlanId()); | 
|---|
|  |  |  | params.setProcessId(vo.getProcessId()); | 
|---|
|  |  |  | List<PrAssemblyPlan> planList = selectAssyPlanList(params); | 
|---|
|  |  |  | boolean hasNodeId= planList.stream() | 
|---|
|  |  |  | .flatMap(process -> process.nodes.stream()) | 
|---|
|  |  |  | .anyMatch(node -> node.id.equals(last.getNodeId())); | 
|---|
|  |  |  | .flatMap(process -> process.getProcess().getNodes().stream()) | 
|---|
|  |  |  | .anyMatch(node -> node.id.equals(vo.getNodeId())); | 
|---|
|  |  |  | if(!hasNodeId){ | 
|---|
|  |  |  | throw new RuntimeException("节点信息有误或被其他人员修改,请重新选择节点信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | last.setLineId(checkResult.getLineId()); | 
|---|
|  |  |  | vo.setLineId(checkResult.getLineId()); | 
|---|
|  |  |  | StaAssemblyWorkLast staLast = new StaAssemblyWorkLast(); | 
|---|
|  |  |  | BeanUtils.copyProperties(last,staLast); | 
|---|
|  |  |  | BeanUtils.copyProperties(vo,staLast); | 
|---|
|  |  |  | staLast.setUserId(checkResult.getUserId()); | 
|---|
|  |  |  | staLast.setStationId(checkResult.getStationId()); | 
|---|
|  |  |  | int count = 0; | 
|---|
|  |  |  | if(checkResult.getId() == null){ | 
|---|
|  |  |  | BeanUtils.copyProperties(last,staLast); | 
|---|
|  |  |  | BeanUtils.copyProperties(vo,staLast); | 
|---|
|  |  |  | staLast.setUserId(checkResult.getUserId()); | 
|---|
|  |  |  | staLast.setStationId(checkResult.getStationId()); | 
|---|
|  |  |  | staLast.setStatus(1); | 
|---|
|  |  |  | staLast.setStartTime(new Date()); | 
|---|
|  |  |  | count = assemblyWorkLastDao.insertSelective(staLast); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | //保存一条history? | 
|---|
|  |  |  | BeanUtils.copyProperties(checkResult,staLast); | 
|---|
|  |  |  | staLast.setPlanId(last.getPlanId()); | 
|---|
|  |  |  | staLast.setProcessId(last.getProcessId()); | 
|---|
|  |  |  | staLast.setNodeId(last.getNodeId()); | 
|---|
|  |  |  | staLast.setPlanId(vo.getPlanId()); | 
|---|
|  |  |  | staLast.setProcessId(vo.getProcessId()); | 
|---|
|  |  |  | staLast.setNodeId(vo.getNodeId()); | 
|---|
|  |  |  | staLast.setStatus(1); | 
|---|
|  |  |  | staLast.setStartTime(new Date()); | 
|---|
|  |  |  | count = assemblyWorkLastDao.updateByPrimaryKeySelective(staLast); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (count <= 0) { | 
|---|
|  |  |  | throw new RuntimeException("数据库存储失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | StaAssemblyWorkLast result = assemblyWorkLastDao.selectByPrimaryKey(staLast.getId()); | 
|---|
|  |  |  | return result; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public int logout(String id) { | 
|---|
|  |  |  | //找到登录记录 | 
|---|
|  |  |  | StaAssemblyWorkLast workLast = assemblyWorkLastDao.selectByPrimaryKey(Long.parseLong(id)); | 
|---|
|  |  |  | if(workLast == null){ | 
|---|
|  |  |  | throw new RuntimeException("系统中没有该条登录信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //更新登录记录 | 
|---|
|  |  |  | workLast.setStatus(2); | 
|---|
|  |  |  | workLast.setEndTime(new Date()); | 
|---|
|  |  |  | // 保存history | 
|---|
|  |  |  | StaAssemblyWorkHistory history = new StaAssemblyWorkHistory(); | 
|---|
|  |  |  | BeanUtils.copyProperties(workLast,history); | 
|---|
|  |  |  | history.setId(null); | 
|---|
|  |  |  | int count = assemblyWorkHistoryDao.insertSelective(history); | 
|---|
|  |  |  | //删除last | 
|---|
|  |  |  | assemblyWorkLastDao.deleteByPrimaryKey(Long.parseLong(id)); | 
|---|
|  |  |  | return count; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | public List<PrAssemblyPlan> selectAssyPlanList(PrAssemblyPlan params){ | 
|---|
|  |  |  | List<PrAssemblyPlan> planList = assemblyDao.selectAssyPlanList(params); | 
|---|
|  |  |  | planList.stream().forEach(process -> { | 
|---|
|  |  |  | process.nodes.forEach(node -> { | 
|---|
|  |  |  | process.getProcess().getNodes().forEach(node -> { | 
|---|
|  |  |  | if(node.instruction != null){ | 
|---|
|  |  |  | addUrl(node.instruction); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | ins.orgName = file.orgName; | 
|---|
|  |  |  | ins.extName = file.extName; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //workId   assistants 传的是单个的userId  必传参数 | 
|---|
|  |  |  | public List<BaUser> updateAssistant(QueryVo vo) { | 
|---|
|  |  |  | //找到workId | 
|---|
|  |  |  | StaAssemblyWorkLast workLast = assemblyWorkLastDao.selectByPrimaryKey(vo.getWorkId()); | 
|---|
|  |  |  | if(workLast == null){ | 
|---|
|  |  |  | throw new RuntimeException("系统中没有该条登录信息,请检查或重新登录"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //如果assistants 有101 则删掉 | 
|---|
|  |  |  | StringBuilder sb = new StringBuilder(); | 
|---|
|  |  |  | String[] assistantArr = vo.getAssistants().split(","); | 
|---|
|  |  |  | for (String item : assistantArr) { | 
|---|
|  |  |  | if(item.startsWith("101")){ | 
|---|
|  |  |  | sb.append(item.substring(3)).append(","); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | sb.append(item).append(","); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String assistantStr = assistantArr.length > 0 ? sb.deleteCharAt(sb.length() - 1).toString() : ""; | 
|---|
|  |  |  | List<BaUser> userInfo = baUserDao.selectByAssistants(vo.getAssistants()); | 
|---|
|  |  |  | return userInfo; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public int addAssistant(String workId ,String assistant) { | 
|---|
|  |  |  | //找到workId | 
|---|
|  |  |  | StaAssemblyWorkLast workLast = assemblyWorkLastDao.selectByPrimaryKey(Long.parseLong(workId)); | 
|---|
|  |  |  | if(workLast == null){ | 
|---|
|  |  |  | throw new RuntimeException("系统中没有当前登录信息,请检查或重新登录"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | BaUser userInfo = getUserInfo(assistant); | 
|---|
|  |  |  | //当前登录人不能是辅助人员 | 
|---|
|  |  |  | if(workLast.getUserId() == userInfo.getId()){ | 
|---|
|  |  |  | throw new RuntimeException(userInfo.getName() +"是当前登录人员,不必添加为辅助人员."); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String userId = userInfo.getId().toString(); | 
|---|
|  |  |  | if(StringUtils.isBlank(workLast.getAssistants())){ | 
|---|
|  |  |  | workLast.setAssistants(userId); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | //已经添加的辅助人员 不必重复添加 | 
|---|
|  |  |  | String assistants = workLast.getAssistants(); | 
|---|
|  |  |  | String[] assistantArr = assistants.split(","); | 
|---|
|  |  |  | for (String item : assistantArr) { | 
|---|
|  |  |  | if(userId.equals(item)){ | 
|---|
|  |  |  | throw new RuntimeException(userInfo.getName() +"已经添加为辅助人员,不必重复添加."); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | workLast.setAssistants(assistants +","+ userId); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | int count = assemblyWorkLastDao.updateByPrimaryKey(workLast); | 
|---|
|  |  |  | return count; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | public int removeAssistant(String workId ,String assistant) { | 
|---|
|  |  |  | //找到workId | 
|---|
|  |  |  | StaAssemblyWorkLast workLast = assemblyWorkLastDao.selectByPrimaryKey(Long.parseLong(workId)); | 
|---|
|  |  |  | if(workLast == null){ | 
|---|
|  |  |  | throw new RuntimeException("系统中没有当前登录信息,请检查或重新登录"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if((!StringUtils.isBlank(assistant)) && assistant.startsWith("101")){ | 
|---|
|  |  |  | assistant = assistant.substring(3); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(!StringUtils.isBlank(workLast.getAssistants())){ | 
|---|
|  |  |  | StringBuilder sb = new StringBuilder(); | 
|---|
|  |  |  | String[] assistantArr = workLast.getAssistants().split(","); | 
|---|
|  |  |  | for (String item : assistantArr) { | 
|---|
|  |  |  | if((!StringUtils.isBlank(assistant)) && (!assistant.equals(item))){ | 
|---|
|  |  |  | sb.append(item).append(","); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String assistantStr = sb.length() > 0 ? sb.deleteCharAt(sb.length() - 1).toString() : ""; | 
|---|
|  |  |  | workLast.setAssistants(assistantStr); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | int count = assemblyWorkLastDao.updateByPrimaryKey(workLast); | 
|---|
|  |  |  | return count; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | public List<BaUser> getAssistantList(String workId) { | 
|---|
|  |  |  | //找到workId | 
|---|
|  |  |  | StaAssemblyWorkLast workLast = assemblyWorkLastDao.selectByPrimaryKey(Long.parseLong(workId)); | 
|---|
|  |  |  | if(workLast == null){ | 
|---|
|  |  |  | throw new RuntimeException("系统中没有当前登录信息,请检查或重新登录"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<BaUser> assistantList = baUserDao.selectByAssistants(workLast.getAssistants()); | 
|---|
|  |  |  | return assistantList; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|