zss
2024-08-01 30a143f368dd2ff6e9c27b9d5dd17923ffed03ae
检验单增加外部委托编号+报告批量下载批量上传
已修改16个文件
410 ■■■■ 文件已修改
framework/src/main/java/com/yuanchu/mom/mapper/SystemLogMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/utils/GiveCode.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/InsReportController.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/pojo/InsOrder.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/InsReportService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsReportServiceImpl.java 217 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/StandardProductListServiceImpl.java 97 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsOrderMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsSampleMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/main/java/com/yuanchu/mom/backup/MysqlDataBackup.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/mapper/UserMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/service/UserService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/service/impl/UserServiceImp.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/resources/mapper/UserMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/mapper/SystemLogMapper.java
@@ -28,5 +28,8 @@
    @Select("select coalesce(count(id), 0) from ${tableName} where examine_time like concat('%', #{date}, '%') and laboratory=#{laboratory} and company_id=#{companyId}")
    int countRowsByNow3(String tableName, Long companyId, String laboratory, String date);
    @Select("select coalesce(count(id), 0) from ${tableName} where create_time like concat('%', #{date}, '%') and laboratory=#{laboratory} and company_id=#{companyId}")
    int countRowsByNow4(String tableName, Long companyId, String laboratory, String date);
}
framework/src/main/java/com/yuanchu/mom/utils/GiveCode.java
@@ -40,4 +40,18 @@
        return code + (date2 == null ? date : date2) + symbol + nums;
    }
    //检验单生成外部委托编号的规则
    public String giveCode3(String code, Long companyId, String laboratory, String tableName, String symbol, String patten) {
        String date = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
        String date2 = LocalDate.now().format(DateTimeFormatter.ofPattern(patten));
        int num;
        num = systemLogMapper.countRowsByNow4(tableName, companyId, laboratory, LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM"))) + 1;
        String nums = num + "";
        if (nums.length() == 1) nums = "0000" + num;
        else if (nums.length() == 2) nums = "000" + num;
        else if (nums.length() == 3) nums = "00" + num;
        else if (nums.length() == 4) nums = "0" + num;
        return code + (date2 == null ? date : date2) + symbol + nums;
    }
}
inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderController.java
@@ -51,12 +51,6 @@
        return Result.success(insOrderService.selectInsOrderParameter(page, sampleOrderDto));
    }
//    @ValueClassify("检验下单")
//    @ApiOperation(value = "查看所有检验单")
//    @PostMapping("/selectAllInsOrder")
//    public Result selectAllInsOrder(){
//        return Result.success();
//    }
    @ValueClassify("检验下单")
    @ApiOperation(value = "检验分配")
inspect-server/src/main/java/com/yuanchu/mom/controller/InsReportController.java
@@ -21,6 +21,7 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@@ -63,7 +64,7 @@
            pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + file.getOriginalFilename();
            urlString = realpath + "/" + pathName;
            file.transferTo(new File(urlString));
            return Result.success(insReportService.inReport("/word/"+pathName, id));
            return Result.success(insReportService.inReport("/word/" + pathName, id));
        } catch (Exception e) {
            throw new ErrorException("文件上传失败");
        }
@@ -133,4 +134,18 @@
            writer.write("{\"error\":0}");
        }
    }
    @ValueAuth
    @ApiOperation(value = "报告批量下载")
    @GetMapping("/downAll")
    public Result downAll(String ids) {
        return Result.success(insReportService.downAll(ids));
    }
    @ValueAuth
    @ApiOperation(value = "报告批量上传")
    @PostMapping("/upAll")
    public Result upAll(MultipartFile file) throws IOException {
        return Result.success(insReportService.upAll(file));
    }
}
inspect-server/src/main/java/com/yuanchu/mom/pojo/InsOrder.java
@@ -34,6 +34,15 @@
    @Length(max= 255,message="编码长度不能超过255")
    private String entrustCode;
    /**
     * 外部委托编号
     */
    @ValueTableShow(1)
    @Size(max= 255,message="编码长度不能超过255")
    @ApiModelProperty(value = "外部委托编号")
    @Length(max= 255,message="编码长度不能超过255")
    private String outEntrustCode;
    @Size(max= 255,message="编码长度不能超过255")
    @ApiModelProperty(value = "检验类别")
    @Length(max= 255,message="编码长度不能超过255")
inspect-server/src/main/java/com/yuanchu/mom/service/InsReportService.java
@@ -4,7 +4,9 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuanchu.mom.dto.ReportPageDto;
import com.yuanchu.mom.pojo.InsReport;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.Map;
/**
@@ -32,4 +34,8 @@
    int ratifyReport(Integer id, Integer isRatify, String ratifyTell);
    int wordInsertUrl(Map<String, Object> map, String url);
    String downAll(String ids);
    int upAll(MultipartFile file) throws IOException;
}
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java
@@ -158,8 +158,21 @@
    @Transactional(rollbackFor = Exception.class)
    public int addInsOrder(List<SampleProductDto> list, InsOrder insOrder, List<List<Integer>> pairing) {
        insOrder.setState(0);
        String code = customMapper.selectById(insOrder.getCompanyId()).getCode2();
        //insOrder.setEntrustCode(giveCode.giveCode("JCZX-" + code + "-", "ins_order", "", "yyMMdd"));
        //客户代号
        Custom custom = customMapper.selectById(insOrder.getCompanyId());
        String code = custom.getCode2();
        if (!custom.getCompany().equals(insOrder.getCompany())){
            Custom one = customMapper.selectOne(Wrappers.<Custom>lambdaQuery().eq(Custom::getCompany, insOrder.getCompany()));
            insOrder.setCompanyId(one.getId());
            code=one.getCode2();
        }
        //实验室编号
        String code2 = baseMapper.selLaboratoryCode(insOrder.getLaboratory());
        if (StringUtils.isEmpty(code2)) {
            code2 = "";
        }
        //外部委托编号
        insOrder.setOutEntrustCode(giveCode.giveCode3("ZT/" + code2 + "-" + code + "-", insOrder.getCompanyId(), insOrder.getLaboratory(), "ins_order", "", "yyMM"));
        String giveCode = this.giveCode.giveCode("JCZX-" + code + "-", "ins_sample", "", "yyMMdd");
        insOrderMapper.insert(insOrder);
        AtomicInteger count = new AtomicInteger();
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsReportServiceImpl.java
@@ -23,22 +23,30 @@
import com.yuanchu.mom.pojo.InsReport;
import com.yuanchu.mom.service.InsReportService;
import com.yuanchu.mom.utils.QueryWrappers;
import com.yuanchu.mom.vo.Result;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
/**
 * @author Administrator
@@ -189,7 +197,7 @@
            put("seal1", Pictures.ofLocal(imgUrl + "/" + sealUrl).create());
            put("seal2", Pictures.ofLocal(imgUrl + "/" + sealUrl).create());
        }}, finalUrl);
        wordToPdf(finalUrl,sealUrl);
        wordToPdf(finalUrl, sealUrl);
       /* String replace = finalUrl.replace(".docx", ".pdf");
        CompletableFuture.supplyAsync(() -> {
@@ -223,11 +231,161 @@
        return 1;
    }
    //报告批量下载
    @Override
    public void wordToPdf(String path,String sealUrl) {
    @Transactional(rollbackFor = Exception.class)
    public String downAll(String ids) {
        List<Long> list = Arrays.stream(ids.split(",")).map(Long::parseLong).collect(Collectors.toList());
        List<InsReport> insReports = insReportMapper.selectBatchIds(list);
        String zipFilePath = null;
        // 临时文件夹路径
        try {
            String tempFolderPath = wordUrl + "/tempFolder";
            File tempFolder = new File(tempFolderPath);
            if (tempFolder.exists()) {
                deleteDirectory(tempFolder); // 删除旧的临时文件夹
            }
            tempFolder.mkdirs(); // 创建新的临时文件夹
            for (InsReport insReport : insReports) {
                File sourceFile = new File((ObjectUtils.isNotEmpty(insReport.getUrlS()) ? insReport.getUrlS() : insReport.getUrl()).replace("/word", wordUrl));
                File destinationFile = new File(tempFolder, sourceFile.getName());
                Files.copy(sourceFile.toPath(), destinationFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
            }
            // 压缩临时文件夹
            zipFilePath = wordUrl + "/zip/output.zip";
            zipDirectory(tempFolderPath, zipFilePath);
            // 清理临时文件夹
            deleteDirectory(tempFolder);
            System.out.println("ZIP文件创建完成!");
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "/word/zip/output.zip";
    }
    //批量上传
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int upAll(MultipartFile file) throws IOException {
        File tempFile = null;
        File unzipDir = null;
        try {
            tempFile = File.createTempFile(wordUrl, ".zip");
            file.transferTo(tempFile);
            unzipDir = new File("uploaded_files");
            if (!unzipDir.exists()) {
                unzipDir.mkdir();
            }
            unzip(tempFile, unzipDir);
            // 处理解压后的文件
            File[] files = unzipDir.listFiles();
            if (files != null) {
                for (File f : files) {
                    // 根据文件名查询id
                    String name = f.getName();
                    InsReport insReport = insReportMapper.selectOne(Wrappers.<InsReport>lambdaQuery().like(InsReport::getCode, f.getName().replace(".docx", "").replace("JCZX", "JCZX/")));
                    if (ObjectUtils.isEmpty(insReport)) {
                        throw new ErrorException("没有找到 " + f.getName() + " 这个文件对应的报告数据");
                    }
                    String urlString;
                    String pathName;
                    try {
                        String path = wordUrl;
                        File realpath = new File(path);
                        if (!realpath.exists()) {
                            realpath.mkdirs();
                        }
                        pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + f.getName();
                        urlString = realpath + "/" + pathName;
                        // 复制文件到指定路径
                        Files.copy(f.toPath(), new File(urlString).toPath(), StandardCopyOption.REPLACE_EXISTING);
                        inReport("/word/" + pathName, insReport.getId());
                    }
                    catch (IOException e) {
                        throw new ErrorException("文件上传失败");
                    }
                }
            }
        } catch (IOException e) {
            throw new ErrorException("文件处理失败");
        } finally {
            if (tempFile != null && tempFile.exists()) {
                tempFile.delete();
            }
            // 递归删除解压目录及其中的文件
            if (unzipDir.exists()) {
                deleteDirectory(unzipDir); // 删除旧的临时文件夹
            }
        }
        return 0;
    }
    //解压文件夹
    private void unzip(File zipFile, File destDir) throws IOException {
        try (ZipFile zip = new ZipFile(zipFile)) {
            Enumeration<? extends ZipEntry> entries = zip.entries();
            while (entries.hasMoreElements()) {
                ZipEntry entry = entries.nextElement();
                File file = new File(destDir, entry.getName());
                if (entry.isDirectory()) {
                    file.mkdirs();
                } else {
                    file.getParentFile().mkdirs();
                    try (InputStream in = zip.getInputStream(entry);
                         OutputStream out = new FileOutputStream(file)) {
                        byte[] buffer = new byte[1024];
                        int len;
                        while ((len = in.read(buffer)) > 0) {
                            out.write(buffer, 0, len);
                        }
                    }
                }
            }
        }
    }
    // 压缩文件夹
    public static void zipDirectory(String sourceDirPath, String zipFilePath) throws IOException {
        try (ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFilePath))) {
            Path sourceDir = Paths.get(sourceDirPath);
            Files.walk(sourceDir)
                    .filter(path -> !Files.isDirectory(path))
                    .forEach(path -> {
                        ZipEntry zipEntry = new ZipEntry(sourceDir.relativize(path).toString());
                        try {
                            zipOut.putNextEntry(zipEntry);
                            Files.copy(path, zipOut);
                            zipOut.closeEntry();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    });
        }
    }
    // 删除文件夹及其内容
    public static void deleteDirectory(File directory) throws IOException {
        if (directory.isDirectory()) {
            File[] files = directory.listFiles();
            if (files != null) {
                for (File file : files) {
                    deleteDirectory(file);
                }
            }
        }
        Files.delete(directory.toPath());
    }
    @Override
    public void wordToPdf(String path, String sealUrl) {
        CompletableFuture.supplyAsync(() -> {
            try {
                wordToPdf(path, path.replace(".docx", ".pdf"),sealUrl);
                wordToPdf(path, path.replace(".docx", ".pdf"), sealUrl);
                return null;
            } catch (Exception e) {
                throw new ErrorException("转换失败");
@@ -239,7 +397,7 @@
        });
    }
    public String wordToPdf(String wordPath, String pdfPath,String sealUrl) {
    public String wordToPdf(String wordPath, String pdfPath, String sealUrl) {
        FileOutputStream os = null;
        try {
            //凭证 不然切换后有水印
@@ -264,14 +422,14 @@
                return null;
            }
            //生成一个空的PDF文件
            File file = new File(pdfPath.replace(".pdf","-1.pdf"));
            File file = new File(pdfPath.replace(".pdf", "-1.pdf"));
            os = new FileOutputStream(file);
            //要转换的word文件
            com.aspose.words.Document doc = new com.aspose.words.Document(wordPath);
            doc.save(os, SaveFormat.PDF);
            //添加骑缝章
            stamperCheckMarkPDF(pdfPath.replace(".pdf","-1.pdf"),pdfPath,imgUrl + "/" +sealUrl);
            stamperCheckMarkPDF(pdfPath.replace(".pdf", "-1.pdf"), pdfPath, imgUrl + "/" + sealUrl);
        } catch (Exception e) {
@@ -290,26 +448,27 @@
    /**
     * 切割图片
     * @param Path  图片路径
     * @param n 切割份数
     *
     * @param Path 图片路径
     * @param n    切割份数
     */
    public static com.itextpdf.text.Image[] slicingImages(String Path, int n) throws IOException, BadElementException {
        com.itextpdf.text.Image[] nImage = new  com.itextpdf.text.Image[n];
        com.itextpdf.text.Image[] nImage = new com.itextpdf.text.Image[n];
        BufferedImage img = ImageIO.read(new File(Path));
        int h = img.getHeight();
        int w = img.getWidth();
        int sw = w/n;
        for(int i=0;i<n;i++){
        int sw = w / n;
        for (int i = 0; i < n; i++) {
            BufferedImage subImg;
            if(i==n-1){//最后剩余部分
                subImg = img.getSubimage(i * sw, 0, w-i*sw, h);
            }else {//前n-1块均匀切
            if (i == n - 1) {//最后剩余部分
                subImg = img.getSubimage(i * sw, 0, w - i * sw, h);
            } else {//前n-1块均匀切
                subImg = img.getSubimage(i * sw, 0, sw, h);
            }
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            ImageIO.write(subImg,Path.substring(Path.lastIndexOf('.')+1),out);
            ImageIO.write(subImg, Path.substring(Path.lastIndexOf('.') + 1), out);
            nImage[i] = com.itextpdf.text.Image.getInstance(out.toByteArray());
        }
@@ -317,30 +476,30 @@
    }
    /**
     *  盖骑缝章
     * 盖骑缝章
     *
     * @param infilePath    原PDF路径
     * @param outFilePath    输出PDF路径
     * @param infilePath  原PDF路径
     * @param outFilePath 输出PDF路径
     */
    public static void stamperCheckMarkPDF(String infilePath,String outFilePath,String picPath) throws IOException, DocumentException {
    public static void stamperCheckMarkPDF(String infilePath, String outFilePath, String picPath) throws IOException, DocumentException {
        PdfReader reader = new PdfReader(infilePath);//选择需要印章的pdf
        PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(outFilePath));//加完印章后的pdf
        com.itextpdf.text.Rectangle pageSize = reader.getPageSize(1);//获得第一页
        float height = pageSize.getHeight();
        float width  = pageSize.getWidth();
        float width = pageSize.getWidth();
        int nums = reader.getNumberOfPages();
        com.itextpdf.text.Image[] nImage =  slicingImages(picPath,nums);//生成骑缝章切割图片
        com.itextpdf.text.Image[] nImage = slicingImages(picPath, nums);//生成骑缝章切割图片
        for(int n=1;n<=nums;n++){
        for (int n = 1; n <= nums; n++) {
            PdfContentByte over = stamp.getOverContent(n);//设置在第几页打印印章
            com.itextpdf.text.Image img = nImage[n-1];//选择图片
            com.itextpdf.text.Image img = nImage[n - 1];//选择图片
            float newHeight = 100f;
            float newWidth = img.getWidth()/(img.getHeight()/100);
            img.scaleAbsolute(newWidth,newHeight);//控制图片大小
            img.setAbsolutePosition(width-newWidth,height/2-newHeight/2);//控制图片位置
            float newWidth = img.getWidth() / (img.getHeight() / 100);
            img.scaleAbsolute(newWidth, newHeight);//控制图片大小
            img.setAbsolutePosition(width - newWidth, height / 2 - newHeight / 2);//控制图片位置
            over.addImage(img);
        }
        stamp.close();
inspect-server/src/main/java/com/yuanchu/mom/service/impl/StandardProductListServiceImpl.java
@@ -69,14 +69,20 @@
            String[] split = insSample.getFactory().split(" - ");
            String tree = split[0] + " - " + split[1] + " - " + split[2] + " - " + split[3] + " - null";
            list = standardProductListMapper.selectDetail2(insSample.getStandardMethodListId(), 1, tree);
            if (list.size()==0){
                String tree1 = split[0] + " - " + split[1] + " - " + split[2] + " - null - " + split[3] ;
            if (list.size() == 0) {
                String tree1 = split[0] + " - " + split[1] + " - " + split[2] + " - null - " + split[3];
                list = standardProductListMapper.selectDetail2(insSample.getStandardMethodListId(), 1, tree1);
            }
        }
        String[] split1 = insSample.getFactory().split(" - ");
        if (ObjectUtils.isNotEmpty(split1[3])){
            list = list.stream().filter(list1 -> list1.getSample().equals(split1[3])).collect(Collectors.toList());
        //判断长度
        if (split1.length > 3) {
            if (ObjectUtils.isNotEmpty(split1[3])) {
                list = list.stream().filter(list1 -> list1.getSample().equals(split1[3])).collect(Collectors.toList());
            }else if (split1[3].equals("")) {
                list = list.stream().filter(list1 -> list1.getSampleType().equals(split1[2])).collect(Collectors.toList());
            }
        }
        list = list.stream().filter(a -> {
            try {
@@ -147,9 +153,9 @@
    @Transactional(rollbackFor = Exception.class)
    public Map<String, Object> selectStandardProductListByMethodId(Integer id, String tree, Integer page) {
        String[] trees = tree.split(" - ");
        try{
        try {
            String tree1 = trees[2];
        }catch (Exception e){
        } catch (Exception e) {
            throw new ErrorException("操作太快,系统传参错误!!!!");
        }
        List<StandardProductList> list = new ArrayList<>();
@@ -183,7 +189,8 @@
                list.addAll(standardTreeMapper.selectStandardProductListByTree("\"" + trees[2] + "\"", standardTree2.getSample(), standardTree2.getModel(), tree2, trees[1]));
                list.addAll(standardTreeMapper.selectStandardProductListByTree2("\"" + trees[2] + "\",\"" + standardTree2.getSample() + "\"", standardTree2.getSample(), standardTree2.getModel(), tree2, trees[1]));
            }
        } else if (trees.length == 4) {
        }
        else if (trees.length == 4) {
            List<StandardTree> treeList = standardTreeMapper.selectList(Wrappers.<StandardTree>lambdaQuery().eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2]).eq(StandardTree::getSample, trees[3]));
            if (treeList.size() == 0) {
                StandardTree standardTree = new StandardTree();
@@ -198,7 +205,8 @@
                list.addAll(standardTreeMapper.selectStandardProductListByTree("\"" + trees[2] + "\"", standardTree.getSample(), standardTree.getModel(), str, trees[1]));
                list.addAll(standardTreeMapper.selectStandardProductListByTree2("\"" + trees[2] + "\",\"" + trees[3] + "\"", standardTree.getSample(), standardTree.getModel(), str, trees[1]));
            }
        } else {
        }
        else {
            list.addAll(standardTreeMapper.selectStandardProductListByTree("\"" + trees[2] + "\"", trees[3].equals("null") ? null : trees[3], trees[4], tree, trees[1]));
            list.addAll(standardTreeMapper.selectStandardProductListByTree2("\"" + trees[2] + "\",\"" + trees[3] + "\"", trees[3].equals("null") ? null : trees[3], trees[4], tree, trees[1]));
        }
@@ -249,45 +257,46 @@
        if (page == 1) {
            Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
//            CompletableFuture.supplyAsync(() -> {
                System.out.println("开始开始开始开始!!!!!!!!!!");
                if (trees.length == 5) {
                    standardProductListMapper.delete(Wrappers.<StandardProductList>lambdaUpdate()
                            .eq(StandardProductList::getStandardMethodListId, id)
                            .eq(StandardProductList::getTree, tree));
                } else {
                    standardProductListMapper.delete(Wrappers.<StandardProductList>lambdaUpdate()
                            .eq(StandardProductList::getStandardMethodListId, id)
                            .like(StandardProductList::getTree, tree));
                }
            System.out.println("开始开始开始开始!!!!!!!!!!");
            if (trees.length == 5) {
                standardProductListMapper.delete(Wrappers.<StandardProductList>lambdaUpdate()
                        .eq(StandardProductList::getStandardMethodListId, id)
                        .eq(StandardProductList::getTree, tree));
            } else {
                standardProductListMapper.delete(Wrappers.<StandardProductList>lambdaUpdate()
                        .eq(StandardProductList::getStandardMethodListId, id)
                        .like(StandardProductList::getTree, tree));
            }
                boolean success = false;
                int retryCount = 0;
                while (!success && retryCount < 100) {
                    try {
                        standardProductListService2.saveBatch(list.stream().map(a -> {
                            a.setFactory(trees[0]);
                            a.setLaboratory(trees[1]);
                            a.setSampleType(trees[2]);
                            a.setCreateUser(userId);
                            a.setUpdateUser(userId);
                            a.setStandardMethodListId(id);
                            return a;
                        }).collect(Collectors.toList()));;
                        success = true;
                    } catch (Exception e) {
                        retryCount++;
                        System.out.println("重复"+ retryCount+"次");
                        // 处理重复 ID 的记录,重新生成 ID 并继续尝试插入
                        for (StandardProductList productList : list) {
                            productList.setId(IdWorker.getId());
                        }
            boolean success = false;
            int retryCount = 0;
            while (!success && retryCount < 100) {
                try {
                    standardProductListService2.saveBatch(list.stream().map(a -> {
                        a.setFactory(trees[0]);
                        a.setLaboratory(trees[1]);
                        a.setSampleType(trees[2]);
                        a.setCreateUser(userId);
                        a.setUpdateUser(userId);
                        a.setStandardMethodListId(id);
                        return a;
                    }).collect(Collectors.toList()));
                    ;
                    success = true;
                } catch (Exception e) {
                    retryCount++;
                    System.out.println("重复" + retryCount + "次");
                    // 处理重复 ID 的记录,重新生成 ID 并继续尝试插入
                    for (StandardProductList productList : list) {
                        productList.setId(IdWorker.getId());
                    }
                }
                if (!success) {
                    throw new RuntimeException("插入失败");
                }else {
                    System.out.println("结束结束结束结束@@@@@@@@@@@@");
                }
            }
            if (!success) {
                throw new RuntimeException("插入失败");
            } else {
                System.out.println("结束结束结束结束@@@@@@@@@@@@");
            }
             /*   standardProductListService2.saveBatch(list.stream().map(a -> {
                    a.setFactory(trees[0]);
inspect-server/src/main/resources/mapper/InsOrderMapper.xml
@@ -6,6 +6,7 @@
    <resultMap id="BaseResultMap" type="com.yuanchu.mom.pojo.InsOrder">
        <id property="id" column="id" jdbcType="INTEGER"/>
        <result property="entrustCode" column="entrust_code" jdbcType="VARCHAR"/>
        <result property="outEntrustCode" column="out_entrust_code" jdbcType="VARCHAR"/>
        <result property="custom" column="custom" jdbcType="VARCHAR"/>
        <result property="company" column="company" jdbcType="VARCHAR"/>
        <result property="code" column="code" jdbcType="VARCHAR"/>
inspect-server/src/main/resources/mapper/InsSampleMapper.xml
@@ -268,6 +268,7 @@
        select name_en
        from `center-lims`.product
        where name = #{sample}
        limit 1
    </select>
    <select id="selectSampleProductListByOrderId2" resultMap="sampleDto">
        select isa.*,
system-run/src/main/java/com/yuanchu/mom/backup/MysqlDataBackup.java
@@ -1,10 +1,14 @@
package com.yuanchu.mom.backup;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yuanchu.mom.dto.PerformanceShiftAddDto;
import com.yuanchu.mom.mapper.DepartmentLimsMapper;
import com.yuanchu.mom.mapper.EnumMapper;
import com.yuanchu.mom.pojo.DepartmentLims;
import com.yuanchu.mom.pojo.Enums;
import com.yuanchu.mom.pojo.PerformanceShift;
import com.yuanchu.mom.pojo.User;
import com.yuanchu.mom.service.DepartmentLimsService;
import com.yuanchu.mom.service.EnumService;
import com.yuanchu.mom.service.PerformanceShiftService;
import com.yuanchu.mom.service.UserService;
@@ -81,6 +85,9 @@
    @Resource
    private UserService userService;
    @Resource
    private DepartmentLimsMapper  departmentLimsMapper;
    /**
     * 每天晚上23点05秒执行 【  0 0 4 1/1 * ? 】
@@ -213,8 +220,8 @@
        List<Enums> shiftType = enumService.selectEnumByCategory("班次类型");
        List<String> collect = shiftType.stream().filter(enums -> enums.getLabel().equals("早")).map(enums -> enums.getValue()).collect(Collectors.toList());
        performanceShiftAddDto.setShift(collect.get(0));
        //人员--所有人
        String userIds = userService.getDeviceManager().stream().map(user -> user.getId().toString()).distinct().collect(Collectors.joining(","));
        //人员--(departlims表的两个实验室的人)
        String userIds = userService.getUser().stream().map(user -> user.getId().toString()).distinct().collect(Collectors.joining(","));
        performanceShiftAddDto.setUserId(userIds);
        //周次--当月所有
        // 获取当前日期
user-server/src/main/java/com/yuanchu/mom/mapper/UserMapper.java
@@ -23,4 +23,5 @@
    User getCustom(Integer userId);
    List<User> getUser();
}
user-server/src/main/java/com/yuanchu/mom/service/UserService.java
@@ -5,6 +5,7 @@
import com.yuanchu.mom.dto.UserPageDto;
import com.yuanchu.mom.pojo.User;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -41,4 +42,5 @@
    int delUserDepardLimsId(Integer id);
    List<User> getUser();
}
user-server/src/main/java/com/yuanchu/mom/service/impl/UserServiceImp.java
@@ -196,4 +196,9 @@
    public int delUserDepardLimsId(Integer id) {
        return userMapper.update(null, Wrappers.<User>lambdaUpdate().eq(User::getId, id).set(User::getDepartLimsId, null).set(User::getUpdateTime, LocalDateTime.now()).set(User::getUpdateUser, getLook.selectPowerByMethodAndUserId(null).get("userId")));
    }
    @Override
    public List<User> getUser() {
        return userMapper.getUser();
    }
}
user-server/src/main/resources/mapper/UserMapper.xml
@@ -44,4 +44,7 @@
        left join custom c on u.company = c.id
        where u.id = #{userId}
    </select>
    <select id="getUser" resultType="com.yuanchu.mom.pojo.User">
        select * from user where  depart_lims_id=FIND_IN_SET(depart_lims_id, (select  GROUP_CONCAT(id SEPARATOR ',') from department_lims where department_lims.name like '%实验室'))
    </select>
</mapper>