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.pojoBa.BaUser; import com.dy.pmsGlobal.pojoOth.OthFile; import com.dy.pmsGlobal.pojoPlt.PltStation; 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; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; import java.util.concurrent.atomic.AtomicLong; import java.util.stream.Collectors; @Slf4j @Service public class WorkOrderSv { private PrAssemblyPlanMapper assemblyDao; private BaUserMapper baUserDao; private PltStationMapper pltStationDao; private StaAssemblyWorkLastMapper assemblyWorkLastDao; private StaAssemblyWorkHistoryMapper assemblyWorkHistoryDao; private FileOperate fileOperate; private OthFileMapper othFileMapper; @Value("${dy.webFile.fmUrl}") private String fmUrl ; @Autowired public void setAssemblyDao(PrAssemblyPlanMapper assemblyDao) { this.assemblyDao = assemblyDao; } @Autowired private void setBaUserDao(BaUserMapper baUserDao){ this.baUserDao = baUserDao; } @Autowired private void setPltStationDao(PltStationMapper pltStationDao){ this.pltStationDao = pltStationDao; } @Autowired private void setStaAssemblyWorkHistoryDao(StaAssemblyWorkHistoryMapper assemblyWorkHistoryDao){ this.assemblyWorkHistoryDao = assemblyWorkHistoryDao; } @Autowired private void setStaAssemblyWorkLastDao(StaAssemblyWorkLastMapper assemblyWorkLastDao){ this.assemblyWorkLastDao = assemblyWorkLastDao; } @Autowired public void setFileOperate(FileOperate fileOperate){ this.fileOperate = fileOperate; } @Autowired public void setOthFileMapper(OthFileMapper othFileMapper){ this.othFileMapper = othFileMapper; } public BaUser getUserInfo(String id){ Long userId = null; if(StringUtils.isBlank(id)){ throw new RuntimeException("员工编码不能为空"); } //用户101 if(id.startsWith("101")){ userId = Long.parseLong(id.toString().substring(3)); }else{ userId = Long.parseLong(id.toString()); } BaUser userInfo = baUserDao.selectByPrimaryKey(userId); if(userInfo == null){ throw new RuntimeException("员工编码:"+ userId +"不在系统中,请先维护员工信息"); }else if(userInfo.getDisabled()){ throw new RuntimeException("员工("+userInfo.getName()+")编码:"+ userId +"在系统已禁用,请先启用员工"); } return userInfo; } public PltStation getStationInfo(String id){ //仅检查工站信息以及工站占用情况 Long stationId = null; if(StringUtils.isBlank(id)){ throw new RuntimeException("工站编码不能为空"); } //工站103 if(id.startsWith("103")){ stationId = Long.parseLong(id.toString().substring(3)); }else{ stationId = Long.parseLong(id.toString()); } PltStation stationInfo = pltStationDao.selectByPrimaryKey(stationId); if(stationInfo == null){ throw new RuntimeException("工站编码:"+ stationId +"不在系统中,请先维护工站信息"); }else if(stationInfo.getDisabled()){ throw new RuntimeException("工站("+stationInfo.getName()+")编码:"+ stationId +"在系统已禁用,请先启用工站"); } return stationInfo; } 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 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(vo.getStationId()) || StringUtils.isBlank(vo.getUserId())){ throw new RuntimeException("工站编码或员工编码均不能为空,请检查"); } //工站103 if(vo.getStationId().startsWith("101")){ userInfo = getUserInfo(vo.getStationId()); }else{ stationInfo = getStationInfo(vo.getStationId()); } if(vo.getUserId().startsWith("103")){ stationInfo = getStationInfo(vo.getUserId()); }else{ userInfo = getUserInfo(vo.getUserId()); } if(userInfo == null && stationInfo == null){ throw new RuntimeException("员工编码:"+ vo.getUserId() + "和工站编码:" + vo.getStationId() + "不正确,请检查"); }else if(userInfo == null){ throw new RuntimeException("员工编码:"+ vo.getUserId() + "不正确,请检查"); }else if(stationInfo == null){ throw new RuntimeException("工站编码:" + vo.getStationId() + "不正确,请检查"); } //检查表中stationId是否已经存在 StaAssemblyWorkLast param = new StaAssemblyWorkLast(); param.setStationId(stationInfo.getId()); param.setStatus(1); List workLasts = assemblyWorkLastDao.selectList(param); long userId = userInfo.getId(); if(workLasts.size() > 0){ List userStationList = workLasts.stream().filter(item->userId == item.getUserId()).collect(Collectors.toList()); if(userStationList.size() == 0){ throw new RuntimeException("员工("+workLasts.get(0).getUserName()+")编码:"+ workLasts.get(0).getUserId() + "已经绑定该工站("+workLasts.get(0).getStationName()+")编码:" + workLasts.get(0).getStationId() + ".请先让其解绑"); }else{ BeanUtils.copyProperties(userStationList.get(0),result); } }else{ result.setUserId(userInfo.getId()); result.setUserName(userInfo.getName()); result.setStationId(stationInfo.getId()); result.setStationName(stationInfo.getName()); result.setLineId(stationInfo.getLineId()); } return result; } @Transactional public StaAssemblyWorkLast save(QueryVo vo) { //先check StaAssemblyWorkLast checkResult = checkUserAndStationUsed(vo); //校验planId processId nodeId PrAssemblyPlan params = new PrAssemblyPlan(); params.setStatus(1); params.setId(vo.getPlanId()); params.setProcessId(vo.getProcessId()); List planList = selectAssyPlanList(params); boolean hasNodeId= planList.stream() .flatMap(process -> process.getProcess().getNodes().stream()) .anyMatch(node -> node.id.equals(vo.getNodeId())); if(!hasNodeId){ 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); 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(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 selectAssyPlanList(PrAssemblyPlan params){ List planList = assemblyDao.selectAssyPlanList(params); planList.stream().forEach(process -> { process.getProcess().getNodes().forEach(node -> { if(node.instruction != null){ addUrl(node.instruction); } }); }); return planList; } private void addUrl(PrWorkingInstruction ins){ if (ins == null || ins.fileId == null) { return; } OthFile file = othFileMapper.selectByPrimaryKey(ins.fileId); if (file == null) { return; } FileRestVo fileRestVo = fileOperate.parseHashcode(fmUrl, file.hash); ins.webUrl = fileRestVo.fileSysRestUrl + fileRestVo.fileWebDownloadPath + ins.fileId; ins.orgName = file.orgName; ins.extName = file.extName; } //workId assistants 传的是单个的userId 必传参数 public List 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 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 getAssistantList(String workId) { //找到workId StaAssemblyWorkLast workLast = assemblyWorkLastDao.selectByPrimaryKey(Long.parseLong(workId)); if(workLast == null){ throw new RuntimeException("系统中没有当前登录信息,请检查或重新登录"); } List assistantList = baUserDao.selectByAssistants(workLast.getAssistants()); return assistantList; } }