lxp
2025-03-06 3b1d490c1b462388622ae49b459a8c279b1fc364
检验委托单修改
已修改5个文件
已添加2个文件
364 ■■■■■ 文件已修改
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessOrderController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessSampleNewMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessOrder.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessSampleNew.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/ProcessOrderService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessOrderServiceImpl.java 256 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/ProcessOrderMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessOrderController.java
@@ -9,6 +9,7 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
@@ -36,6 +37,17 @@
        return Result.success(processOrderService.pageProcessOrder(page, processOrderDto));
    }
    /**
     * ä¸Šä¼ æ–‡ä»¶
     * @param file
     * @return
     */
    @PostMapping("/uploadFile")
    public Result uploadFile(@RequestParam("file") MultipartFile file, @RequestParam("id") Integer id) {
        processOrderService.uploadFile(file,id);
        return Result.success();
    }
    @ApiOperation(value = "删除要求、标书和合同评审")
    @DeleteMapping("/delProcessOrder")
    public Result delProcessOrder(Long id) {
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessSampleNewMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
package com.ruoyi.process.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.process.pojo.ProcessSampleNew;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ProcessSampleNewMapper extends BaseMapper<ProcessSampleNew> {
}
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessOrder.java
@@ -60,4 +60,52 @@
    @ApiModelProperty("领样日期")
    private LocalDate issueTime;
    @ApiModelProperty("是否启用上传")
    private Integer isUpload;
    @ApiModelProperty("试样名称")
    private String sampleS;
    @ApiModelProperty("委托时间")
    private String entrustmentTimeS;
    @ApiModelProperty("型号")
    private String sampleTypeS;
    @ApiModelProperty("委托单位")
    private String companyS;
    @ApiModelProperty("生产单位")
    private String productionS;
    @ApiModelProperty("委托人")
    private String prepareUserS;
    @ApiModelProperty("样品数量")
    private Integer sampleNumS;
    @ApiModelProperty("样品状态")
    private Integer insStateS;
    @ApiModelProperty("是否留样")
    private Integer isLeaveS;
    @ApiModelProperty("样品处理方式")
    private Integer processingS;
    @ApiModelProperty("约定时间")
    private String appointedS;
    @ApiModelProperty("报告发送方式")
    private Integer sendS;
    @ApiModelProperty("委托人签名")
    private String prepareUserUrlS;
    @ApiModelProperty("委托日期")
    private String createTimeTwoS;
    @ApiModelProperty("委托人联系电话")
    private String phoneS;
}
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessSampleNew.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package com.ruoyi.process.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@TableName("cnas_process_sample_new")
public class ProcessSampleNew {
    @TableId(type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("关联cnas_process_order è¡¨id")
    private Integer cnasOrderId;
    @ApiModelProperty("样品编号")
    private String sampleCode;
    @ApiModelProperty("试验项目")
    private String inspectionItem;
    @ApiModelProperty("检验依据")
    private String method;
    @ApiModelProperty("备注")
    private String remark;
}
cnas-process/src/main/java/com/ruoyi/process/service/ProcessOrderService.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.process.dto.ProcessOrderDto;
import com.ruoyi.process.pojo.ProcessOrder;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
@@ -21,6 +22,8 @@
    IPage<ProcessOrderDto> pageProcessOrder(Page page, ProcessOrderDto processOrderDto);
    void uploadFile(MultipartFile file, Integer id);
    ProcessOrderDto getProcessOrder(Integer id);
    int doProcessOrder(ProcessOrder processOrder);
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessOrderServiceImpl.java
@@ -1,7 +1,10 @@
package com.ruoyi.process.service.impl;
import cn.hutool.core.util.NumberUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
@@ -14,22 +17,36 @@
import com.ruoyi.process.dto.InspectionOrderDetail;
import com.ruoyi.process.dto.InspectionOrderExportDto;
import com.ruoyi.process.dto.ProcessOrderDto;
import com.ruoyi.process.dto.SampleItemDto;
import com.ruoyi.process.mapper.ProcessOrderMapper;
import com.ruoyi.process.mapper.ProcessSampleNewMapper;
import com.ruoyi.process.pojo.ProcessOrder;
import com.ruoyi.process.pojo.ProcessSampleNew;
import com.ruoyi.process.service.ProcessOrderService;
import com.ruoyi.system.mapper.UserMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
/**
 * <p>
@@ -40,8 +57,12 @@
 * @since 2024-11-05 03:06:20
 */
@Service
@Slf4j
@Transactional(rollbackFor = Exception.class)
public class ProcessOrderServiceImpl extends ServiceImpl<ProcessOrderMapper, ProcessOrder> implements ProcessOrderService {
    @Resource
    private ProcessSampleNewMapper processSampleNewMapper;
    @Resource
    private ProcessOrderMapper processOrderMapper;
@@ -55,8 +76,182 @@
    }
    @Override
    public void uploadFile(MultipartFile file, Integer id) {
        ProcessOrder processOrder = processOrderMapper.selectById(id);
        ArrayList<String> list = new ArrayList<>();
        try (InputStream inputStream = file.getInputStream()) {
            XWPFDocument xwpfDocument = new XWPFDocument(inputStream);
            // èŽ·å–æ‰€æœ‰è¡¨æ ¼
            List<XWPFTable> tables = xwpfDocument.getTables();
            for (XWPFTable table : tables) {
                // èŽ·å–è¡¨æ ¼çš„è¡Œ
                List<XWPFTableRow> rows = table.getRows();
                for (int i = 0; i < rows.size(); i++) {
                    // èŽ·å–æ¯ä¸€è¡Œ
                    List<XWPFTableCell> tableCells = rows.get(i).getTableCells();
                    for (int j = 0; j < tableCells.size(); j++) {
                        // èŽ·å–æ¯ä¸€å•å…ƒæ ¼
                        String text = rows.get(i).getCell(j).getText();
                        log.info("读取的内容:{}", text);
                        list.add(text);
                    }
                }
            }
            // æ ¹æ®èŽ·å–åˆ°çš„å†…å®¹è¿›è¡Œèµ‹å€¼
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyå¹´MM月dd日");
            processOrder.setIsUpload(1); // æ˜¯å¦ä¸Šä¼ 
            processOrder.setSampleS(list.get(1)); // è¯•样名称
            processOrder.setEntrustmentTimeS(list.get(3)); // å§”托时间
            processOrder.setSampleTypeS(list.get(5)); // åž‹å·
            processOrder.setCompanyS(list.get(7)); // å§”托单位
            processOrder.setProductionS(list.get(9)); // ç”Ÿäº§å•位
            processOrder.setPrepareUserS(list.get(11)); // å§”托人
            if (NumberUtil.isNumber(list.get(13))) {
                processOrder.setSampleNumS(Integer.parseInt(list.get(13))); // æ ·å“æ•°é‡
            }
            // æ ·å“çŠ¶æ€
            switch (list.get(15)) {
                case "待审核":
                    processOrder.setInsStateS(0);
                    break;
                case "待检验":
                    processOrder.setInsStateS(1);
                    break;
                case "已检验":
                    processOrder.setInsStateS(4);
                    break;
                case "退回":
                    processOrder.setInsStateS(2);
                    break;
                case "撤销":
                    processOrder.setInsStateS(3);
                    break;
            }
            if (list.get(17).contains("☑是Yes")) {
                processOrder.setIsLeaveS(1); // æ˜¯å¦ç•™æ ·
            } else {
                processOrder.setIsLeaveS(0); // æ˜¯å¦ç•™æ ·
            }
            if (list.get(19).contains("☑委托单位取回")) {
                processOrder.setProcessingS(0); // æ ·å“å¤„理方式
            }
            if(list.get(19).contains("☑实验室处理")){
                processOrder.setProcessingS(1); // æ ·å“å¤„理方式
            }
            processOrder.setAppointedS(list.get(21)); // çº¦å®šæ—¶é—´
            if (list.get(23).contains("☑自取")) {
                processOrder.setSendS(1); // æ˜¯å¦è‡ªå–
            }
            if(list.get(23).contains("☑其它")) {
                processOrder.setSendS(0); // æ˜¯å¦è‡ªå–
            }
            // ä»Ž30开始是样品表格数据  åˆ° å€¼ä¸ºåˆ¤å®šè§„则结束
            ArrayList<String> sampleList = new ArrayList<>();
            for (int i = 29; i < list.size(); i++) {
                if (list.get(i).contains("判定规则")) {
                    break;
                }
                sampleList.add(list.get(i));
            }
            // æ ·å“è¡¨æ ¼æ•°æ®
            // æ ¹æ®orderId å°†åŽŸæœ¬çš„åˆ é™¤
            processSampleNewMapper.delete(new LambdaQueryWrapper<ProcessSampleNew>().eq(ProcessSampleNew::getCnasOrderId, id));
            for (int i = 0; i < sampleList.size(); i += 5) {
                ProcessSampleNew processSampleNew = new ProcessSampleNew();
                processSampleNew.setCnasOrderId(id);
                processSampleNew.setSampleCode(sampleList.get(i + 1));
                processSampleNew.setInspectionItem(sampleList.get(i + 2));
                processSampleNew.setMethod(sampleList.get(i + 3));
                processSampleNew.setRemark(sampleList.get(i + 4));
                processSampleNewMapper.insert(processSampleNew);
            }
            int len = sampleList.size() + 28;
            // åˆ¤å®šè§„则
            processOrder.setPrepareUserUrlS(list.get(len + 4)); // å§”托人签名
            if (StringUtils.isNotEmpty(list.get(len + 6))) {
                String date = list.get(len + 6).substring(0, list.get(len + 6).indexOf("日") + 1);
                processOrder.setCreateTimeTwoS(date); // å§”托日期
            }
            processOrder.setPhoneS(list.get(len + 8)); // è”系方式
            Integer comprehensiveUser = null;
            if (StringUtils.isNotEmpty(list.get(len + 10))) {
                List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>().like(User::getName, list.get(len + 10)));
                comprehensiveUser = users.get(0).getId();
            }
            processOrder.setComprehensiveUser(comprehensiveUser); // ç»¼åˆå®¤ç­¾å
            if (StringUtils.isNotEmpty(list.get(len + 12))) {
                String date = list.get(len + 12).substring(0, list.get(len + 12).indexOf("日") + 1);
                if (StringUtils.isNotEmpty(date)) {
                    LocalDate parse = LocalDate.parse(date, formatter);
                    processOrder.setComprehensiveTime(parse); // æŽ¥æ”¶æ—¥æœŸ
                }
            }
            if (StringUtils.isNotEmpty(list.get(len + 14))) {
                List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>().like(User::getName, list.get(len + 14)));
                processOrder.setIssueUser(users.get(0).getId()); // é¢†æ ·å‘˜
            }
            if (StringUtils.isNotEmpty(list.get(len + 16))) {
                String date = list.get(len + 16).substring(0, list.get(len + 16).indexOf("日") + 1);
                if (StringUtils.isNotEmpty(date)) {
                    LocalDate parse = LocalDate.parse(date, formatter);
                    processOrder.setIssueTime(parse); // é¢†æ ·æ—¥æœŸ
                }
            }
            processOrderMapper.updateById(processOrder);
        } catch (Exception e) {
            e.printStackTrace();
            throw new ErrorException("上传失败");
        }
    }
    @Override
    public ProcessOrderDto getProcessOrder(Integer id) {
        return processOrderMapper.getProcessOrder(id);
        ProcessOrderDto a = processOrderMapper.getProcessOrder(id);
        // å¦‚果上传了则采用上传了的字段
        if (Objects.nonNull(a.getIsUpload()) && a.getIsUpload().equals(1)) {
            a = getNewValue(a);
        }
        return a;
    }
    public ProcessOrderDto getNewValue(ProcessOrderDto a) {
        List<ProcessSampleNew> processSampleNews = processSampleNewMapper.selectList(new LambdaQueryWrapper<ProcessSampleNew>()
                .eq(ProcessSampleNew::getCnasOrderId, a.getId()));
        a.setSample(a.getSampleS()); // è¯•样名称
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyå¹´MM月dd日");
        if (StringUtils.isNotEmpty(a.getEntrustmentTimeS())) {
            LocalDate parse = LocalDate.parse(a.getEntrustmentTimeS(), dateTimeFormatter);
            LocalDateTime localDateTime = LocalDateTime.of(parse, LocalTime.MIDNIGHT);
            a.setCreateTime(localDateTime); // å§”托时间
        }
        a.setSampleType(a.getSampleTypeS()); // åž‹å·
        a.setCompany(a.getCompanyS()); // å§”托单位
        a.setProduction(a.getProductionS()); // ç”Ÿäº§å•位
        a.setPrepareUser(a.getPrepareUserS()); // å§”托人
        a.setSampleNum(a.getSampleNumS() + ""); // æ ·å“æ•°é‡
        a.setInsState(a.getInsStateS()); // æ ·å“çŠ¶æ€
        a.setIsLeave(a.getIsLeaveS()); // æ˜¯å¦ç•™æ ·
        a.setProcessing(a.getProcessingS()); // æ ·å“å¤„理方式
        a.setPhone(a.getPhoneS()); // è”系方式
        if (StringUtils.isNotEmpty(a.getAppointedS())) {
            LocalDate parse = LocalDate.parse(a.getAppointedS(), dateTimeFormatter);
            a.setAppointed(parse); // çº¦å®šæ—¶é—´
        }
        a.setSend(a.getSendS()); // æŠ¥å‘Šå‘送方式
        ArrayList<SampleItemDto> sampleItemDtos = new ArrayList<>();
        for (ProcessSampleNew b : processSampleNews) {
            SampleItemDto sampleItemDto = new SampleItemDto();
            sampleItemDto.setCode(b.getSampleCode());
            sampleItemDto.setProduct(b.getInspectionItem());
            sampleItemDto.setStandardMethodList(b.getMethod());
            sampleItemDto.setRemark(b.getRemark());
            sampleItemDtos.add(sampleItemDto);
        }
        a.setSampleItems(sampleItemDtos);
        return a;
    }
    @Override
@@ -77,13 +272,56 @@
    public void exportInspectionOrder(Integer id, HttpServletResponse response) {
        ProcessOrder processOrder = baseMapper.selectById(id);
        InspectionOrderExportDto inspectionOrderExportDto = extracted(processOrder);
        List<InspectionOrderDetail> list = baseMapper.selectInsOrder(processOrder.getInsOrderId());
        int index = 1;
        for (InspectionOrderDetail inspectionOrderDetail : list) {
            inspectionOrderDetail.setIndex(index);
            index++;
        final List<InspectionOrderDetail> list;
        // å¦‚果该数据上传了文件 å°±ä½¿ç”¨ä¸Šä¼ çš„æ•°æ®
        if(Objects.nonNull(processOrder.getIsUpload()) && processOrder.getIsUpload().equals(1)) {
            list = new ArrayList<>();
            List<ProcessSampleNew> processSampleNews = processSampleNewMapper.selectList(new LambdaQueryWrapper<ProcessSampleNew>()
                    .eq(ProcessSampleNew::getCnasOrderId, id));
            inspectionOrderExportDto.setSample(processOrder.getSampleS()); // è¯•样名称
            inspectionOrderExportDto.setCommissionDateString(processOrder.getEntrustmentTimeS()); // å§”托时间
            inspectionOrderExportDto.setSampleType(processOrder.getSampleTypeS()); // åž‹å·
            inspectionOrderExportDto.setCompany(processOrder.getCompanyS()); // å§”托单位
            inspectionOrderExportDto.setProduction(processOrder.getProductionS()); // ç”Ÿäº§å•位
            inspectionOrderExportDto.setPrepareUser(processOrder.getPrepareUserS()); // å§”托人
            inspectionOrderExportDto.setSampleNum(processOrder.getSampleNumS() + ""); // æ ·å“æ•°é‡
            inspectionOrderExportDto.setInsState(processOrder.getInsStateS()); // æ ·å“çŠ¶æ€
            // æ˜¯å¦ç•™æ ·
            inspectionOrderExportDto.setIsLeave1(processOrder.getIsLeaveS() == 1 ? "☑" : "□");
            inspectionOrderExportDto.setIsLeave2(processOrder.getIsLeaveS() == 0 ? "☑" : "□");
            // æ ·å“å¤„理方式
            inspectionOrderExportDto.setProcessing0(processOrder.getProcessingS() == 0 ? "☑" : "□");
            inspectionOrderExportDto.setProcessing1(processOrder.getProcessingS() == 1 ? "☑" : "□");
            // çº¦å®šæ—¶é—´
            inspectionOrderExportDto.setAppointedString(processOrder.getAppointedS());
            // æ˜¯å¦è‡ªå–
            inspectionOrderExportDto.setSend0(processOrder.getSendS() == 0 ? "☑" : "□");
            inspectionOrderExportDto.setSend1(processOrder.getSendS() == 1 ? "☑" : "□");
            int i = 1;
            for(ProcessSampleNew a : processSampleNews) {
                InspectionOrderDetail inspectionOrderDetail = new InspectionOrderDetail();
                inspectionOrderDetail.setSampleNumber(a.getSampleCode());
                inspectionOrderDetail.setTestItem(a.getInspectionItem());
                inspectionOrderDetail.setTestStandard(a.getMethod());
                inspectionOrderDetail.setRemark(a.getRemark());
                inspectionOrderDetail.setIndex(i);
                list.add(inspectionOrderDetail);
                i++;
            }
            // å§”托人签名
            inspectionOrderExportDto.setPrepareUser(processOrder.getPrepareUserS());
            // å§”托日期
            inspectionOrderExportDto.setCommissionDateString(processOrder.getEntrustmentTimeS());
            // è”系方式
            inspectionOrderExportDto.setPhone(processOrder.getPhoneS());
        }else {
            list = baseMapper.selectInsOrder(processOrder.getInsOrderId());
            int index = 1;
            for (InspectionOrderDetail inspectionOrderDetail : list) {
                inspectionOrderDetail.setIndex(index);
                index++;
            }
        }
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/inspection-order.docx");
        Configure configure = Configure.builder()
@@ -133,8 +371,8 @@
        inspectionOrderExportDto.setIsLeave1(processOrderDto.getIsLeave() != null && processOrderDto.getIsLeave() == 1 ? "☑" : "□");
        inspectionOrderExportDto.setIsLeave2(processOrderDto.getIsLeave() != null && processOrderDto.getIsLeave() == 0 ? "☑" : "□");
        inspectionOrderExportDto.setSend0(processOrderDto.getSend() != null && processOrderDto.getSend() == 1 ? "☑" : "□");
        inspectionOrderExportDto.setSend1(processOrderDto.getSend() != null && processOrderDto.getSend() == 0 ? "☑" : "□");
        inspectionOrderExportDto.setSend0(processOrderDto.getSend() != null && processOrderDto.getSend() == 0 ? "☑" : "□");
        inspectionOrderExportDto.setSend1(processOrderDto.getSend() != null && processOrderDto.getSend() == 1 ? "☑" : "□");
        inspectionOrderExportDto.setProcessing0(processOrderDto.getProcessing() != null && processOrderDto.getProcessing() == 0 ? "☑" : "□");
        inspectionOrderExportDto.setProcessing1(processOrderDto.getProcessing() != null && processOrderDto.getProcessing() == 1 ? "☑" : "□");
        if (ObjectUtils.isNotEmpty(processOrder.getRule())) {
cnas-process/src/main/resources/mapper/ProcessOrderMapper.xml
@@ -178,7 +178,8 @@
                     is2.model,
                     GROUP_CONCAT(DISTINCT ip.inspection_item SEPARATOR ' ') AS product,
--                      sm.code                                                    standardMethodList,
                     '试验要求'                                                         standardMethodList,
--                      '试验要求'                                                         standardMethodList,
                     ip.method_s  standardMethodList,
                     GROUP_CONCAT(DISTINCT ip.tell SEPARATOR ' ;') AS groupConcatTell,
                     is2.remark
              from ins_order io2
@@ -194,7 +195,8 @@
        select is2.sample_code                                            sampleNumber,
               is2.model,
               GROUP_CONCAT(DISTINCT ip.inspection_item SEPARATOR ',') AS testItem,
               sm.code                                                    testStandard,
--                sm.code                                                    testStandard,
                ip.method_s  testStandard,
               is2.remark
        from ins_sample is2
                 left join standard_method sm on standard_method_list_id = sm.id