|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.alibaba.excel.util.StringUtils; | 
|---|
|  |  |  | import com.dy.pmsGlobal.daoBa.BaUserMapper; | 
|---|
|  |  |  | import com.dy.pmsGlobal.daoOth.OthFileMapper; | 
|---|
|  |  |  | 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.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.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; | 
|---|
|  |  |  | import com.dy.pmsGlobal.pojoPr.PrWorkingInstruction; | 
|---|
|  |  |  | import com.dy.pmsGlobal.pojoSta.StaAssemblyWorkHistory; | 
|---|
|  |  |  | import com.dy.pmsGlobal.pojoSta.StaAssemblyWorkLast; | 
|---|
|  |  |  | import com.dy.pmsGlobal.util.QrCodeConstant; | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | private static final int STATUS_REPAIR = 3; | 
|---|
|  |  |  | private static final int STATUS_WASTE = 4; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private static final String USER_PREFIX = "101"; | 
|---|
|  |  |  | private static final String STATION_PREFIX = "103"; | 
|---|
|  |  |  | private static final String WORK_TYPE_ASSEMBLY = "1"; | 
|---|
|  |  |  | private static final String WORK_TYPE_TEST = "2"; | 
|---|
|  |  |  | 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 PrAssemblyPlanMapper assemblyDao; | 
|---|
|  |  |  | private BaUserMapper baUserDao; | 
|---|
|  |  |  | 
|---|
|  |  |  | private StaAssemblyWorkHistoryMapper assemblyWorkHistoryDao; | 
|---|
|  |  |  | private PrProductionNodeMapper nodeDao; | 
|---|
|  |  |  | private PltProductMapper productDao; | 
|---|
|  |  |  | private FileOperate fileOperate; | 
|---|
|  |  |  | private OthFileMapper othFileMapper; | 
|---|
|  |  |  | @Value("${dy.webFile.fmUrl}") | 
|---|
|  |  |  | private String fmUrl; | 
|---|
|  |  |  | private PltProductionLineMapper lineDao; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | public void setAssemblyDao(PrAssemblyPlanMapper assemblyDao) { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | public void setFileOperate(FileOperate fileOperate) { | 
|---|
|  |  |  | this.fileOperate = fileOperate; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | public void setOthFileMapper(OthFileMapper othFileMapper) { | 
|---|
|  |  |  | this.othFileMapper = othFileMapper; | 
|---|
|  |  |  | public void setLineDao(PltProductionLineMapper lineDao) { | 
|---|
|  |  |  | this.lineDao = lineDao; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public BaUser getUserInfo(String id) { | 
|---|
|  |  |  | 
|---|
|  |  |  | 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()); | 
|---|
|  |  |  | 
|---|
|  |  |  | } 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; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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(STATUS_NORMAL); | 
|---|
|  |  |  | 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) { | 
|---|
|  |  |  | 
|---|
|  |  |  | 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) { | 
|---|
|  |  |  | throw new RuntimeException("员工(" + workLasts.get(0).getUserName() + ")编码:" + workLasts.get(0).getUserId() + "已经绑定该工站(" + workLasts.get(0).getStationName() + ")编码:" + workLasts.get(0).getStationId() + ".请先让其解绑"); | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (result.getId() == null) { | 
|---|
|  |  |  | result.setUserId(userInfo.getId()); | 
|---|
|  |  |  | result.setUserName(userInfo.getName()); | 
|---|
|  |  |  | result.setStationId(stationInfo.getId()); | 
|---|
|  |  |  | 
|---|
|  |  |  | return result; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public StaAssemblyWorkLast getWorkLast(String workId) { | 
|---|
|  |  |  | if (StringUtils.isBlank(workId)) { | 
|---|
|  |  |  | throw new RuntimeException("登录ID为空,请联系管理员查看并解决问题."); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | StaAssemblyWorkLast result = assemblyWorkLastDao.selectByPrimaryKey(Long.parseLong(workId)); | 
|---|
|  |  |  | if (result == null) { | 
|---|
|  |  |  | throw new RuntimeException("系统中没有该条登录信息"); | 
|---|
|  |  |  | //return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | BaUser userInfo = getUserInfo(result.getUserId().toString()); | 
|---|
|  |  |  | PltStation stationInfo = getStationInfo(result.getStationId().toString()); | 
|---|
|  |  |  | //如果是无任务计划 如维修work_type 没有 planId processId nodeId | 
|---|
|  |  |  | if (result.getPlanId() != null) { | 
|---|
|  |  |  | //校验planId processId nodeId | 
|---|
|  |  |  | PrAssemblyPlan assyPlan = assemblyDao.selectByPrimaryKey(result.getPlanId()); | 
|---|
|  |  |  | boolean hasNodeId = assyPlan.getProcess().getNodes().stream() | 
|---|
|  |  |  | .anyMatch(node -> node.id.equals(result.getNodeId())); | 
|---|
|  |  |  | if (userInfo == null || stationInfo == null || assyPlan == null || (!hasNodeId)) { | 
|---|
|  |  |  | //直接删除记录 | 
|---|
|  |  |  | logout(result.getId().toString()); | 
|---|
|  |  |  | result.setId(null); | 
|---|
|  |  |  | result.setStatus(STATUS_WORK_LAST_LOGOUT); | 
|---|
|  |  |  | if (userInfo == null) { | 
|---|
|  |  |  | result.setUserId(null); | 
|---|
|  |  |  | result.setUserName(""); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (stationInfo == null) { | 
|---|
|  |  |  | result.setStationId(null); | 
|---|
|  |  |  | result.setStationName(""); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (assyPlan == null) { | 
|---|
|  |  |  | result.setPlanId(null); | 
|---|
|  |  |  | result.setPlanName(""); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!hasNodeId) { | 
|---|
|  |  |  | result.setNodeId(null); | 
|---|
|  |  |  | result.setNodeName(""); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 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(nodeInfo.get(0).getContent()); | 
|---|
|  |  |  | //找到对应的产品信息 | 
|---|
|  |  |  | PltProduct product = productDao.selectByPrimaryKey(assyPlan.getProId()); | 
|---|
|  |  |  | if (product != null) { | 
|---|
|  |  |  | result.setProId(product.getId()); | 
|---|
|  |  |  | result.setProName(product.getName()); | 
|---|
|  |  |  | String devicePrefix = QrCodeConstant.TypeProduct + product.getCode() + assyPlan.getBatchNo(); | 
|---|
|  |  |  | result.setDevicePrefix(devicePrefix); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | result.setStationId(stationInfo.getId()); | 
|---|
|  |  |  | result.setStationName(stationInfo.getName()); | 
|---|
|  |  |  | result.setLineId(stationInfo.getLineId()); | 
|---|
|  |  |  | result.setLineName(stationInfo.getLineName()); | 
|---|
|  |  |  | return result; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public StaAssemblyWorkLast checkStationUsed(String stationId) { | 
|---|
|  |  |  | StaAssemblyWorkLast result = new StaAssemblyWorkLast(); | 
|---|
|  |  |  | PltStation stationInfo = null; | 
|---|
|  |  |  | if (StringUtils.isBlank(stationId)) { | 
|---|
|  |  |  | throw new RuntimeException("工站编码不能为空,请检查"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | stationInfo = getStationInfo(stationId); | 
|---|
|  |  |  | //检查表中stationId是否已经存在 | 
|---|
|  |  |  | StaAssemblyWorkLast param = new StaAssemblyWorkLast(); | 
|---|
|  |  |  | param.setStationId(stationInfo.getId()); | 
|---|
|  |  |  | param.setStatus(STATUS_NORMAL); | 
|---|
|  |  |  | List<StaAssemblyWorkLast> workLasts = assemblyWorkLastDao.selectList(param); | 
|---|
|  |  |  | if (workLasts.size() > 0) { | 
|---|
|  |  |  | result = getWorkLast(workLasts.get(0).getId().toString()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | result.setStationId(stationInfo.getId()); | 
|---|
|  |  |  | result.setStationName(stationInfo.getName()); | 
|---|
|  |  |  | result.setLineId(stationInfo.getLineId()); | 
|---|
|  |  |  | result.setLineName(stationInfo.getLineName()); | 
|---|
|  |  |  | return result; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public StaAssemblyWorkLast save(QueryVo vo) { | 
|---|
|  |  |  | //先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); | 
|---|
|  |  |  | 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(vo.getPlanId()); | 
|---|
|  |  |  | staLast.setProcessId(vo.getProcessId()); | 
|---|
|  |  |  | 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()); | 
|---|
|  |  |  | assyPlan.getProcess().setNodes(nodeInfo); | 
|---|
|  |  |  | result.setPlan(assyPlan); | 
|---|
|  |  |  | return result; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | // 保存history | 
|---|
|  |  |  | StaAssemblyWorkHistory history = new StaAssemblyWorkHistory(); | 
|---|
|  |  |  | BeanUtils.copyProperties(workLast, history); | 
|---|
|  |  |  | history.setWorkId(workLast.getId()); | 
|---|
|  |  |  | //history.setId(null); | 
|---|
|  |  |  | int count = assemblyWorkHistoryDao.insertSelective(history); | 
|---|
|  |  |  | //删除last | 
|---|
|  |  |  | 
|---|
|  |  |  | 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<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(USER_PREFIX)) { | 
|---|
|  |  |  | 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)); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 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())) { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<BaUser> assistantList = baUserDao.selectByAssistants(workLast.getAssistants()); | 
|---|
|  |  |  | return assistantList; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //根据节点查出节点作业指导书 | 
|---|
|  |  |  | public PrProductionNode getSopByNodeId(String nodeId) { | 
|---|
|  |  |  | if(StringUtils.isBlank(nodeId)){ | 
|---|
|  |  |  | throw new RuntimeException("节点ID不能为空"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | PrProductionNode node = nodeDao.selectByPrimaryKey(Long.parseLong(nodeId)); | 
|---|
|  |  |  | if(node == null){ | 
|---|
|  |  |  | throw new RuntimeException("节点ID不存在,请检查"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(node.instruction != null){ | 
|---|
|  |  |  | addUrl(node.instruction); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return  node; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 根据产品查出产品文件 主要技术参数    同 platform-->product-->productSv | 
|---|
|  |  |  | public PltProduct getFileByProId(String proId) { | 
|---|
|  |  |  | if(StringUtils.isBlank(proId)){ | 
|---|
|  |  |  | throw new RuntimeException("产品ID不能为空"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | PltProduct product = productDao.selectByPrimaryKey(Long.parseLong(proId)); | 
|---|
|  |  |  | if(product == null){ | 
|---|
|  |  |  | throw new RuntimeException("产品ID不存在,请检查"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | product = addWebUrl(product); | 
|---|
|  |  |  | return  product; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | private PltProduct addWebUrl(PltProduct pro) { | 
|---|
|  |  |  | if (pro != null) { | 
|---|
|  |  |  | if (pro.image != null) { | 
|---|
|  |  |  | String filePathWithWebUrl = getFilePathWithWebUrl(pro.image); | 
|---|
|  |  |  | pro.imageWebPath = filePathWithWebUrl; | 
|---|
|  |  |  | pro.imageWebPathZip = fileOperate.getImgFileZipPath(filePathWithWebUrl); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | pro.proFiles.stream().forEach(doc -> { | 
|---|
|  |  |  | OthFile file = othFileMapper.selectByPrimaryKey(doc.fileId); | 
|---|
|  |  |  | if (file == null) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | FileRestVo fileRestVo = fileOperate.parseHashcode(fmUrl, file.hash); | 
|---|
|  |  |  | doc.webUrl = fileRestVo.fileSysRestUrl + fileRestVo.fileWebDownloadPath + doc.fileId; | 
|---|
|  |  |  | doc.orgName = file.orgName; | 
|---|
|  |  |  | doc.extName = file.extName; | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return pro; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | private String getFilePathWithWebUrl(Long fileId) { | 
|---|
|  |  |  | OthFile file = othFileMapper.selectByPrimaryKey(fileId); | 
|---|
|  |  |  | FileRestVo fileRestVo = fileOperate.parseHashcode(fmUrl, file.hash); | 
|---|
|  |  |  | return fileRestVo.fileWebUrl + file.filePath; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|