zss
2024-09-27 a14a26c04bc5863248b9a9d387610a143c3a4efd
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
@@ -37,6 +37,7 @@
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;
@@ -95,11 +96,17 @@
    @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;
@@ -142,13 +149,9 @@
        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);
        }
@@ -340,7 +343,10 @@
    //扫码报检
    @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()
@@ -367,9 +373,9 @@
                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());
@@ -381,9 +387,90 @@
        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();
    }
@@ -662,6 +749,9 @@
                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; //不合格
                    }
@@ -673,7 +763,6 @@
                        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 {
@@ -692,7 +781,6 @@
                                } finally {
                                    continue;
                                }
                            }
                        }
                    }
@@ -918,8 +1006,7 @@
                    .set(InsOrderUser::getTell, tell));
            switch (type) {
                case 0:
                    /*再次试验:该单子退回到检验状态(排序改成当前的最后),次数递增(保留以前的数据);*/
                    //更新原来的检验任务
                    //再次试验:该单子退回到检验状态(排序改成当前的最后),次数递增(保留以前的数据);
                    insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
                            .eq(InsOrderState::getId, record.getId())
                            .set(InsOrderState::getInsTime, now)
@@ -930,7 +1017,7 @@
                            .set(InsOrderState::getCreateTime, LocalDateTime.now()));
                    break;
                case 1:
                    //继续试验:则继续将检验任务转接至下一站点;
                    //继续试验:该站点任务结束(可以再次扫码检验);
                    insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
                            .eq(InsOrderState::getInsOrderId, orderId)
                            .eq(InsOrderState::getLaboratory, laboratory)
@@ -940,7 +1027,7 @@
                            .set(InsOrderState::getVerifyUser, userId));
                    break;
                case 2:
                    //结束试验:此委托单停止试验,直接生成最终报告和费用统计。
                    //结束试验:此委托单停止试验(无法再次检验)。
                    insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
                            .eq(InsOrderState::getInsOrderId, orderId)
                            .eq(InsOrderState::getLaboratory, laboratory)
@@ -957,52 +1044,7 @@
                    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) {
@@ -1094,15 +1136,15 @@
                .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();
@@ -1130,7 +1172,7 @@
            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);
@@ -1153,6 +1195,11 @@
            }
            return null;
        });
        /*生成电路试验的站点报告并上传到附件中*/
        /*if (laboratory.equals("电路试验")) {
            MultipartFile file = wordUtils.generateWord(note, term, orderState);
            uploadFile(orderId,file);
        }*/
        // 删除数采采集次数
        String key = "frequency" + ":" + entrustCode + ":*";
        RedisUtil.delsLike(key);
@@ -1194,4 +1241,6 @@
                return "未知";
        }
    }
}