| | |
| | | @Resource |
| | | private InsProductMapper insProductMapper; |
| | | @Resource |
| | | private InsOrderUserMapper insOrderUserMapper; |
| | | @Resource |
| | | private ShiftTimeMapper shiftTimeMapper; |
| | | @Resource |
| | | private PerformanceShiftMapper performanceShiftMapper; |
| | |
| | | public boolean claimInsOrderPlan(InsOrderPlanDTO entity) { |
| | | if (Objects.isNull(entity)) { |
| | | return false; |
| | | } |
| | | /*认领需要判断该样品是否在库*/ |
| | | //查询样品id(过滤没有检验项目的样品) |
| | | List<Integer> sampleIds = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery() |
| | | .eq(InsSample::getInsOrderId, entity.getInsSampleId())).stream().map(InsSample::getId).collect(Collectors.toList()); |
| | | for (Integer samId : sampleIds) { |
| | | //过滤没有检验项目的样品id |
| | | if (ObjectUtils.isEmpty(insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() |
| | | .eq(InsProduct::getInsSampleId, samId) |
| | | .eq(InsProduct::getState, 1)))) { |
| | | continue; |
| | | } |
| | | //入库次数 |
| | | Long inCount = warehouseHistoryMapper.selectCount(Wrappers.<WarehouseHistory>lambdaQuery() |
| | | .eq(WarehouseHistory::getState, 1) |
| | | .eq(WarehouseHistory::getInsSampleId, samId)); |
| | | //出库次数 |
| | | Long outCount = warehouseHistoryMapper.selectCount(Wrappers.<WarehouseHistory>lambdaQuery() |
| | | .eq(WarehouseHistory::getState, 2) |
| | | .eq(WarehouseHistory::getInsSampleId, samId)); |
| | | if (inCount > 0 && inCount > outCount) { |
| | | continue; |
| | | } else { |
| | | throw new ErrorException("所选的样品库存不足,请检查入库和出库记录!"); |
| | | } |
| | | } |
| | | Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId(null); |
| | | Integer userId = map1.get("userId"); |
| | |
| | | .eq(InsProductResult2::getFrequency, insProductResultVo.getFrequency()) |
| | | .eq(InsProductResult2::getNum, insProductResultVo.getNum()) |
| | | .in(InsProductResult2::getInsProductId, insProductResultVo.getProductIds())); |
| | | } |
| | | |
| | | //扫码报检 |
| | | @Override |
| | | public int scanInsOrderState(String sonLaboratory, String sampleCode) { |
| | | //先判断该订单是否有这个站点的项目 |
| | | InsSample insSample = insSampleMapper.selectOne(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getSampleCode, sampleCode)); |
| | | List<Integer> sampleIds = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery() |
| | | .eq(InsSample::getInsOrderId, insSample.getInsOrderId())).stream().map(InsSample::getId).collect(Collectors.toList()); |
| | | List<String> collect = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() |
| | | .eq(InsProduct::getState, 1) |
| | | .in(InsProduct::getInsSampleId, sampleIds)).stream().map(InsProduct::getSonLaboratory).collect(Collectors.toList()); |
| | | if (!collect.contains(sonLaboratory)) { |
| | | throw new ErrorException("该订单没有" + sonLaboratory + "站点的相关项目,请查看下单详情!"); |
| | | } |
| | | //判断该订单是否站点任务有结束试验 |
| | | List<InsOrderState> orderStates = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery() |
| | | .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId()) |
| | | .eq(InsOrderState::getInsState, 5)); |
| | | if (CollectionUtils.isNotEmpty(orderStates)) { |
| | | throw new ErrorException("该订单站点的任务已经结束试验,无法再次进行试验!"); |
| | | } |
| | | InsOrderState orderState = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery() |
| | | .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId()) |
| | | .eq(InsOrderState::getLaboratory, sonLaboratory)); |
| | | if (ObjectUtils.isNotEmpty(orderState)) { |
| | | //继续试验 |
| | | if (orderState.getInsState() == 6) { |
| | | orderState.setInsState(0); |
| | | orderState.setNum(orderState.getNum() + 1);//递增 |
| | | insOrderStateMapper.updateById(orderState); |
| | | } else { |
| | | throw new ErrorException("该订单站点的任务已创建,无法再次创建!"); |
| | | } |
| | | } else { |
| | | InsOrderState insOrderState = new InsOrderState(); |
| | | insOrderState.setInsOrderId(insSample.getInsOrderId()); |
| | | insOrderState.setLaboratory(sonLaboratory); |
| | | insOrderState.setInsState(0); |
| | | insOrderState.setNum(1);//初始是第一次 |
| | | insOrderStateMapper.insert(insOrderState); |
| | | } |
| | | return 1; |
| | | } |
| | | |
| | | @Override |
| | | public List<InsOrderUser> getInsOrderUserList(Integer insOrderStateId) { |
| | | return insOrderUserMapper.getInsOrderUserList(insOrderStateId); |
| | | } |
| | | |
| | | |
| | |
| | | } |
| | | insUnPassService.saveBatch(insUnPasses); |
| | | /*type=0 再次试验; type=1 继续试验 ; type=2 结束试验*/ |
| | | switch (type) { |
| | | case 0: |
| | | /*再次试验:该单子退回到检验状态(排序改成当前的最后),次数递增(保留以前的数据);*/ |
| | | //更新原来的检验任务 |
| | | // 查询根据 id 倒序排列的第一条记录 |
| | | InsOrderState record = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery() |
| | | .eq(InsOrderState::getInsOrderId, orderId) |
| | | .eq(InsOrderState::getLaboratory, laboratory) |
| | | .orderByDesc(InsOrderState::getId) |
| | | .last("LIMIT 1")); // 确保只取一条记录 |
| | | if (record != null) { |
| | | // 获取到第一条记录的 id 后,执行更新操作 |
| | | // 查询根据 id 倒序排列的第一条记录 |
| | | InsOrderState record = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery() |
| | | .eq(InsOrderState::getInsOrderId, orderId) |
| | | .eq(InsOrderState::getLaboratory, laboratory) |
| | | .orderByDesc(InsOrderState::getId) |
| | | .last("LIMIT 1")); // 确保只取一条记录 |
| | | if (record != null) { |
| | | //更新记录 |
| | | insOrderUserMapper.update(null, Wrappers.<InsOrderUser>lambdaUpdate() |
| | | .eq(InsOrderUser::getInsOrderStateId, record.getId()) |
| | | .eq(InsOrderUser::getNum, record.getNum()) |
| | | .set(InsOrderUser::getTell, tell)); |
| | | switch (type) { |
| | | case 0: |
| | | /*再次试验:该单子退回到检验状态(排序改成当前的最后),次数递增(保留以前的数据);*/ |
| | | //更新原来的检验任务 |
| | | insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate() |
| | | .eq(InsOrderState::getId, record.getId()) |
| | | .set(InsOrderState::getInsTime, now) |
| | |
| | | .set(InsOrderState::getVerifyUser, userId) |
| | | .set(InsOrderState::getNum, record.getNum() + 1)//次数加1 |
| | | .set(InsOrderState::getCreateTime, LocalDateTime.now())); |
| | | } |
| | | break; |
| | | case 1: |
| | | //继续试验:则继续将检验任务转接至下一站点; |
| | | insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate() |
| | | .eq(InsOrderState::getInsOrderId, orderId) |
| | | .eq(InsOrderState::getLaboratory, laboratory) |
| | | .set(InsOrderState::getInsTime, now) |
| | | .set(InsOrderState::getInsState, 6) |
| | | .set(InsOrderState::getVerifyTell, tell) |
| | | .set(InsOrderState::getVerifyUser, userId)); |
| | | //转接至下一站点,需要先判断是否还有其余试验室,如果有其余试验室需要将订单下发 |
| | | List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery() |
| | | .eq(InsSample::getInsOrderId, orderId).select(InsSample::getId)); |
| | | List<Integer> ids = insSamples.stream().map(a -> a.getId()).collect(Collectors.toList()); |
| | | List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() |
| | | .in(InsProduct::getInsSampleId, ids) |
| | | .eq(InsProduct::getState, 1)); |
| | | List<Integer> list = new ArrayList<>(); |
| | | list.add(4); |
| | | list.add(5); |
| | | list.add(6); |
| | | List<InsOrderState> insOrderStates = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery() |
| | | .eq(InsOrderState::getInsOrderId, orderId) |
| | | .in(InsOrderState::getInsState, list)); |
| | | List<String> strings = insOrderStates.stream().map(InsOrderState::getLaboratory).distinct().collect(Collectors.toList()); |
| | | //除去当前复核的试验室和已经复核的试验室 |
| | | List<String> collect = insProducts.stream() |
| | | .map(InsProduct::getSonLaboratory) |
| | | .distinct() |
| | | .filter(s -> !s.equals(laboratory)) |
| | | .filter(s -> !strings.contains(s)) |
| | | .collect(Collectors.toList()); |
| | | if (collect.size() > 0) { |
| | | //要判断剩余试验室中哪个最空闲就安排给哪个 |
| | | Map<String, Long> dataCounts = new HashMap<>(); |
| | | for (String sonLaboratory : collect) { |
| | | Long count = insOrderStateMapper.selectCount(Wrappers.<InsOrderState>lambdaQuery() |
| | | .eq(InsOrderState::getLaboratory, sonLaboratory) |
| | | .ne(InsOrderState::getInsState, 4) |
| | | .ne(InsOrderState::getInsState, 5) |
| | | .ne(InsOrderState::getInsState, 6)); |
| | | dataCounts.put(sonLaboratory, count); |
| | | break; |
| | | case 1: |
| | | //继续试验:则继续将检验任务转接至下一站点; |
| | | insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate() |
| | | .eq(InsOrderState::getInsOrderId, orderId) |
| | | .eq(InsOrderState::getLaboratory, laboratory) |
| | | .set(InsOrderState::getInsTime, now) |
| | | .set(InsOrderState::getInsState, 6) |
| | | .set(InsOrderState::getVerifyTell, tell) |
| | | .set(InsOrderState::getVerifyUser, userId)); |
| | | break; |
| | | case 2: |
| | | //结束试验:此委托单停止试验,直接生成最终报告和费用统计。 |
| | | insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate() |
| | | .eq(InsOrderState::getInsOrderId, orderId) |
| | | .eq(InsOrderState::getLaboratory, laboratory) |
| | | .set(InsOrderState::getInsTime, now) |
| | | .set(InsOrderState::getInsState, 5) |
| | | .set(InsOrderState::getVerifyTell, tell) |
| | | .set(InsOrderState::getVerifyUser, userId)); |
| | | //如果订单类型是原理样机,则该订单直接闭环 |
| | | InsOrder insOrder = insOrderMapper.selectById(orderId); |
| | | if (insOrder.getFormType().equals("原理样机")) { |
| | | insOrder.setState(4); |
| | | insOrderMapper.updateById(insOrder); |
| | | } |
| | | // 查找数据量最少的元素 |
| | | String minElement = null; |
| | | Long minCount = Long.MAX_VALUE; |
| | | for (Map.Entry<String, Long> entry : dataCounts.entrySet()) { |
| | | if (entry.getValue() < minCount) { |
| | | minCount = entry.getValue(); |
| | | minElement = entry.getKey(); |
| | | } |
| | | } |
| | | InsOrderState insOrderState = new InsOrderState(); |
| | | insOrderState.setInsOrderId(orderId); |
| | | insOrderState.setLaboratory(minElement); |
| | | insOrderState.setInsState(0); |
| | | insOrderState.setNum(1);//初始是第一次 |
| | | insOrderStateMapper.insert(insOrderState); |
| | | } else { |
| | | //如果继续试验没有其他站点的检验任务那就结束试验 |
| | | verifyPlan(orderId, laboratory, 2, tell); |
| | | } |
| | | break; |
| | | case 2: |
| | | //结束试验:此委托单停止试验,直接生成最终报告和费用统计。 |
| | | insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate() |
| | | .eq(InsOrderState::getInsOrderId, orderId) |
| | | .eq(InsOrderState::getLaboratory, laboratory) |
| | | .set(InsOrderState::getInsTime, now) |
| | | .set(InsOrderState::getInsState, 5) |
| | | .set(InsOrderState::getVerifyTell, tell) |
| | | .set(InsOrderState::getVerifyUser, userId)); |
| | | break; |
| | | break; |
| | | } |
| | | } |
| | | /*复核完成之后生成他自己的站点报告(仅限辐射试验检测(近场,远场)和电路试验)*/ |
| | | /*switch (laboratory) { |
| | |
| | | } |
| | | |
| | | //生成电路试验的excel文件 |
| | | private MultipartFile generateExcelFile(Integer orderId, String laboratory) throws IOException{ |
| | | private MultipartFile generateExcelFile(Integer orderId, String laboratory) throws IOException { |
| | | // 创建一个Workbook对象 |
| | | Workbook workbook = new XSSFWorkbook(); |
| | | |
| | |
| | | } |
| | | |
| | | @Override |
| | | public int submitPlan(Integer orderId, String laboratory, Integer verifyUser, String entrustCode) { |
| | | public int submitPlan(Integer orderId, String laboratory, Integer verifyUser, String entrustCode, String note, String term) { |
| | | List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery() |
| | | .eq(InsSample::getInsOrderId, orderId).select(InsSample::getId)); |
| | | InsOrderState orderState = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery() |
| | |
| | | .eq(InsOrderState::getLaboratory, laboratory) |
| | | .orderByDesc(InsOrderState::getId) |
| | | .last("LIMIT 1"));// 确保只取一条记录 |
| | | /*记录检验任务每次的备注信息*/ |
| | | InsOrderUser insOrderUser = new InsOrderUser(); |
| | | insOrderUser.setInsOrderStateId(orderState.getId()); |
| | | insOrderUser.setSubmitUser(getLook.selectPowerByMethodAndUserId(null).get("userId")); |
| | | insOrderUser.setSubmitTime(LocalDateTime.now()); |
| | | insOrderUser.setNum(orderState.getNum()); |
| | | insOrderUser.setNote(ObjectUtils.isNotEmpty(note) ? note : null); |
| | | insOrderUser.setTerm(ObjectUtils.isNotEmpty(term) ? term : null); |
| | | insOrderUserMapper.insert(insOrderUser); |
| | | List<Integer> ids = insSamples.stream().map(a -> a.getId()).collect(Collectors.toList()); |
| | | List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() |
| | | .in(InsProduct::getInsSampleId, ids) |