package com.dy.pmsStation.workOrder; import com.alibaba.excel.util.StringUtils; 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.daoPr.PrProductionNodeMapper; import com.dy.pmsGlobal.daoPr.PrProductionProcessMapper; import com.dy.pmsGlobal.daoPr.PrWorkingInstructionMapper; 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.PltProductionLine; import com.dy.pmsGlobal.pojoPlt.PltStation; import com.dy.pmsGlobal.pojoPr.PrAssemblyPlan; import com.dy.pmsGlobal.pojoPr.PrWorkingInstruction; 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.stream.Collectors; @Slf4j @Service public class WorkOrderSv { private PrAssemblyPlanMapper assemblyDao; private BaUserMapper baUserDao; private PltStationMapper pltStationDao; private StaAssemblyWorkLastMapper assemblyWorkLastDao; 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 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(QueryVo last){ StaAssemblyWorkLast result = new StaAssemblyWorkLast(); PltStation stationInfo = null; BaUser userInfo = null; if(StringUtils.isBlank(last.getStationId()) || StringUtils.isBlank(last.getUserId())){ throw new RuntimeException("工站编码或员工编码均不能为空,请检查"); } //工站103 if(last.getStationId().startsWith("101")){ userInfo = getUserInfo(last.getStationId()); }else{ stationInfo = getStationInfo(last.getStationId()); } if(last.getUserId().startsWith("103")){ stationInfo = getStationInfo(last.getUserId()); }else{ userInfo = getUserInfo(last.getUserId()); } if(userInfo == null && stationInfo == null){ throw new RuntimeException("员工编码:"+ last.getUserId() + "和工站编码:" + last.getStationId() + "不正确,请检查"); }else if(userInfo == null){ throw new RuntimeException("员工编码:"+ last.getUserId() + "不正确,请检查"); }else if(stationInfo == null){ throw new RuntimeException("工站编码:" + last.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.setStationId(stationInfo.getId()); result.setStationName(stationInfo.getName()); result.setLineId(stationInfo.getLineId()); } return result; } @Transactional public int save(QueryVo last) { //先check StaAssemblyWorkLast checkResult = checkStationUsed(last); //校验planId processId nodeId PrAssemblyPlan params = new PrAssemblyPlan(); params.setStatus(1); params.setId(last.getPlanId()); params.setProcessId(last.getProcessId()); List planList = selectAssyPlanList(params); planList.stream().forEach(process -> { process.nodes.stream().filter(node -> node.id == last.getNodeId()); }); last.setLineId(checkResult.getLineId()); StaAssemblyWorkLast staLast = new StaAssemblyWorkLast(); BeanUtils.copyProperties(last,staLast); staLast.setUserId(checkResult.getUserId()); staLast.setStationId(checkResult.getStationId()); int count = 0; if(checkResult.getId() == null){ BeanUtils.copyProperties(last,staLast); staLast.setUserId(checkResult.getUserId()); staLast.setStationId(checkResult.getStationId()); staLast.setStatus(1); staLast.setStartTime(new Date()); count = assemblyWorkLastDao.insertSelective(staLast); }else{ BeanUtils.copyProperties(checkResult,staLast); staLast.setPlanId(last.getPlanId()); staLast.setProcessId(last.getProcessId()); staLast.setNodeId(last.getNodeId()); staLast.setStatus(1); staLast.setStartTime(new Date()); count = assemblyWorkLastDao.updateByPrimaryKeySelective(staLast); } return count; } public List selectAssyPlanList(PrAssemblyPlan params){ List planList = assemblyDao.selectAssyPlanList(params); planList.stream().forEach(process -> { process.nodes.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; } }