| | |
| | | import org.apache.poi.ss.usermodel.Row; |
| | | import org.apache.poi.ss.usermodel.Sheet; |
| | | import org.apache.poi.ss.usermodel.Workbook; |
| | | import org.apache.poi.xssf.usermodel.XSSFSheet; |
| | | import org.apache.poi.xssf.usermodel.XSSFWorkbook; |
| | | import org.apache.poi.xwpf.usermodel.*; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | |
| | | @Resource |
| | | private WarehouseHistoryMapper warehouseHistoryMapper; |
| | | |
| | | @Resource |
| | | private WarehouseService warehouseService; |
| | | |
| | | @Value("${wordUrl}") |
| | | private String wordUrl; |
| | | |
| | | @Value("${twoCode}") |
| | | private String twoCode; |
| | | |
| | | @Resource |
| | | WordUtils wordUtils; |
| | | |
| | | @Resource |
| | | private InsReportMapper insReportMapper; |
| | |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("head", PrintChina.printChina(InsOrderPlanVO.class)); |
| | | Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId(null); |
| | | User user = userMapper.selectById(map1.get("userId"));//当前登录的人 |
| | | |
| | | String laboratory = null; |
| | | String userName = null; |
| | | Integer userId = null; |
| | | if (ObjectUtil.isNotEmpty(insOrderPlanDTO.getUserId())) { |
| | | userId = map1.get("userId"); |
| | | userName = userMapper.selectById(map1.get("userId")).getName(); |
| | | insOrderPlanDTO.setUserId(null); |
| | | } |
| | |
| | | |
| | | //扫码报检 |
| | | @Override |
| | | public int scanInsOrderState(String sonLaboratory, String sampleCode) { |
| | | public int scanInsOrderState(String sonLaboratory, String sampleCode, String trees) { |
| | | /*样品入库*/ |
| | | warehouseService.inWarehouse(trees, sampleCode); |
| | | /*新增检验任务*/ |
| | | //先判断该订单是否有这个站点的项目 |
| | | InsSample insSample = insSampleMapper.selectOne(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getSampleCode, sampleCode)); |
| | | List<Integer> sampleIds = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery() |
| | |
| | | orderState.setInsState(0); |
| | | orderState.setNum(orderState.getNum() + 1);//递增 |
| | | insOrderStateMapper.updateById(orderState); |
| | | } else { |
| | | } /*else { |
| | | throw new ErrorException("该订单站点的任务已创建,无法再次创建!"); |
| | | } |
| | | }*/ |
| | | } else { |
| | | InsOrderState insOrderState = new InsOrderState(); |
| | | insOrderState.setInsOrderId(insSample.getInsOrderId()); |
| | |
| | | return 1; |
| | | } |
| | | |
| | | //扫码出库 |
| | | @Override |
| | | public int outInsOrderState(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()) |
| | | .and(wrapper -> wrapper |
| | | .eq(InsOrderState::getInsState, 5) |
| | | .or() |
| | | .eq(InsOrderState::getInsState, 6) |
| | | )); |
| | | if (CollectionUtils.isEmpty(orderStates)) { |
| | | throw new ErrorException("该样品的检验任务还没有结束试验,暂时无法出库!"); |
| | | } |
| | | warehouseService.outWarehouse(sampleCode); |
| | | return 0; |
| | | } |
| | | |
| | | @Override |
| | | public List<InsOrderUser> getInsOrderUserList(Integer insOrderStateId) { |
| | | return insOrderUserMapper.getInsOrderUserList(insOrderStateId); |
| | | } |
| | | |
| | | private static final String splitIdentifier = "@-@"; // 自定义唯一标识分割符 |
| | | |
| | | //预览文件 |
| | | @Override |
| | | public Object preview(Integer id) throws Exception { |
| | | InsOrderFile insOrderFile = insOrderFileMapper.selectById(id); |
| | | File file = new File(wordUrl + "/" + insOrderFile.getFileUrl()); |
| | | StringBuilder stringBuilder = new StringBuilder(); |
| | | // 创建 reader |
| | | try (BufferedReader br = Files.newBufferedReader(file.toPath())) { |
| | | // CSV文件的分隔符 |
| | | String DELIMITER = ","; |
| | | // 按行读取 |
| | | String line; |
| | | while ((line = br.readLine()) != null) { |
| | | // 分割 |
| | | String[] columns = line.split(DELIMITER); |
| | | // 打印行 |
| | | stringBuilder.append(String.join(splitIdentifier, columns)).append("\n"); |
| | | } |
| | | } catch (Exception ex) { |
| | | List<Object> list = new ArrayList<>(); |
| | | //创建工作簿对象 |
| | | XSSFWorkbook xssfWorkbook = new XSSFWorkbook(new FileInputStream(file)); |
| | | //获取工作簿下sheet的个数 只读取第一个sheet |
| | | int sheetNum = xssfWorkbook.getNumberOfSheets(); |
| | | //遍历工作簿中的所有数据 |
| | | for (int i = 0; i < sheetNum; i++) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | StringBuilder result = new StringBuilder(); |
| | | XSSFSheet sheet = xssfWorkbook.getSheetAt(i); |
| | | //获取最后一行的num,即总行数。此处从0开始 |
| | | int maxRow = sheet.getLastRowNum(); |
| | | for (int row = 0; row <= maxRow; row++) { |
| | | //获取最后单元格num,即总单元格数 ***注意:此处从1开始计数*** |
| | | int maxRol = sheet.getRow(row).getLastCellNum(); |
| | | StringBuilder aLine = new StringBuilder(); |
| | | for (int rol = 0; rol < maxRol; rol++) { |
| | | aLine.append(sheet.getRow(row).getCell(rol)).append(","); |
| | | } |
| | | String substring = aLine.substring(0, aLine.length() - 1); |
| | | result.append(substring).append("\n"); |
| | | } |
| | | map.put("sheetName", sheet.getSheetName()); |
| | | map.put("content", result.toString()); |
| | | list.add(map); |
| | | } |
| | | return list; |
| | | } |
| | | return stringBuilder.toString(); |
| | | } |
| | | |
| | | |
| | |
| | | int ressult = 1; |
| | | String valueStr = insProductResult2.getValue(); |
| | | if (!insProduct.getAsk().contains(",")) { |
| | | if (insProduct.getAsk().equals("/")) { |
| | | ressult = 3; //不判定 |
| | | } |
| | | if (!isValueValid(valueStr, new String[]{insProduct.getAsk()})) { |
| | | ressult = 0; //不合格 |
| | | } |
| | |
| | | String[] askSplit = s.split("°"); |
| | | String angleKey = askSplit[0]; |
| | | String angleValue = askSplit[1]; |
| | | |
| | | for (int i = 0; i < angles.length; i++) { |
| | | if (angles[i].split("°")[0].equals(angleKey)) { |
| | | try { |
| | |
| | | } finally { |
| | | continue; |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | |
| | | .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::getCreateTime, LocalDateTime.now())); |
| | | break; |
| | | case 1: |
| | | //继续试验:则继续将检验任务转接至下一站点; |
| | | //继续试验:该站点任务结束(可以再次扫码检验); |
| | | insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate() |
| | | .eq(InsOrderState::getInsOrderId, orderId) |
| | | .eq(InsOrderState::getLaboratory, laboratory) |
| | |
| | | .set(InsOrderState::getVerifyUser, userId)); |
| | | break; |
| | | case 2: |
| | | //结束试验:此委托单停止试验,直接生成最终报告和费用统计。 |
| | | //结束试验:此委托单停止试验(无法再次检验)。 |
| | | insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate() |
| | | .eq(InsOrderState::getInsOrderId, orderId) |
| | | .eq(InsOrderState::getLaboratory, laboratory) |
| | |
| | | break; |
| | | } |
| | | } |
| | | /*复核完成之后生成他自己的站点报告(仅限辐射试验检测(近场,远场)和电路试验)*/ |
| | | /*switch (laboratory) { |
| | | case "近场": |
| | | uploadFile(orderId, null); |
| | | break; |
| | | case "远场": |
| | | uploadFile(orderId, null); |
| | | break; |
| | | case "电路试验": |
| | | uploadFile(orderId, generateExcelFile(orderId,laboratory)); |
| | | break; |
| | | default: |
| | | break; |
| | | }*/ |
| | | return 1; |
| | | } |
| | | |
| | | //生成电路试验的excel文件 |
| | | private MultipartFile generateExcelFile(Integer orderId, String laboratory) throws IOException { |
| | | // 创建一个Workbook对象 |
| | | Workbook workbook = new XSSFWorkbook(); |
| | | |
| | | // 创建第一个Sheet |
| | | Sheet sheet1 = workbook.createSheet("Sheet1"); |
| | | Row row1 = sheet1.createRow(0); |
| | | Cell cell1 = row1.createCell(0); |
| | | cell1.setCellValue("Hello, Sheet1"); |
| | | |
| | | // 创建第二个Sheet |
| | | Sheet sheet2 = workbook.createSheet("Sheet2"); |
| | | Row row2 = sheet2.createRow(0); |
| | | Cell cell2 = row2.createCell(0); |
| | | cell2.setCellValue("Hello, Sheet2"); |
| | | |
| | | // 将Workbook写入到字节数组中 |
| | | ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); |
| | | workbook.write(outputStream); |
| | | workbook.close(); |
| | | |
| | | byte[] excelBytes = outputStream.toByteArray(); |
| | | |
| | | // 创建MultipartFile对象 |
| | | MultipartFile multipartFile = new MockMultipartFile( |
| | | "file", "example.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", new ByteArrayInputStream(excelBytes)); |
| | | |
| | | return multipartFile; |
| | | } |
| | | |
| | | private void getTemplateThing(Set<Integer> set, Map<Integer, String> map2, List<InsProduct> insProducts) { |
| | |
| | | .set(InsOrderState::getInsTime, LocalDateTime.now()) |
| | | .set(InsOrderState::getInsState, 3) |
| | | .set(InsOrderState::getVerifyUser, verifyUser)); |
| | | /*如果是C类订单且是下发到质量部,则直接复核通过(结束试验)*/ |
| | | InsOrder insOrder = insOrderMapper.selectById(orderId); |
| | | if (insOrder.getOrderType().equals("C") && insOrder.getDepartmentLims().equals("质量部")) { |
| | | try { |
| | | verifyPlan(orderId, laboratory, 2, null); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } else { |
| | | /*这个情况先关闭----如果是C类订单且是下发到质量部,则直接复核通过(结束试验)*/ |
| | | // InsOrder insOrder = insOrderMapper.selectById(orderId); |
| | | // if (insOrder.getOrderType().equals("C") && insOrder.getDepartmentLims().equals("质量部")) { |
| | | // try { |
| | | // verifyPlan(orderId, laboratory, 2, null); |
| | | // } catch (IOException e) { |
| | | // e.printStackTrace(); |
| | | // } |
| | | // } else { |
| | | Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId"); |
| | | //LIMS系统消息推送 |
| | | InformationNotification info = new InformationNotification(); |
| | |
| | | map.put("enable_id_trans", 0);//是否开启id转译.0否 |
| | | map.put("enable_duplicate_check", 0);//是否开启重复消息检查.0否 |
| | | qywxApi.send(map);*/ |
| | | } |
| | | // } |
| | | //复核人--检验单相关负责人 |
| | | InsSampleUser insSampleUser = new InsSampleUser(); |
| | | insSampleUser.setUserId(verifyUser); |
| | |
| | | } |
| | | return null; |
| | | }); |
| | | /*生成电路试验的站点报告并上传到附件中*/ |
| | | /*if (laboratory.equals("电路试验")) { |
| | | MultipartFile file = wordUtils.generateWord(note, term, orderState); |
| | | uploadFile(orderId,file); |
| | | }*/ |
| | | // 删除数采采集次数 |
| | | String key = "frequency" + ":" + entrustCode + ":*"; |
| | | RedisUtil.delsLike(key); |
| | |
| | | return "未知"; |
| | | } |
| | | } |
| | | |
| | | |
| | | } |