yuan
7 小时以前 0f79bd8c70a6122794aafac0d9373613a75f3e4c
质检新增出库检验报告下载功能
已添加1个文件
已修改6个文件
179 ■■■■■ 文件已修改
src/main/java/com/ruoyi/quality/controller/QualityInspectController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/quality/mapper/QualityInspectMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/quality/pojo/QualityInspect.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/quality/service/IQualityInspectService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/quality/QualityInspectMapper.xml 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/static/out-report-template.docx 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/quality/controller/QualityInspectController.java
@@ -140,4 +140,14 @@
    public void down(HttpServletResponse response,@RequestBody QualityInspect qualityInspect) {
        qualityInspectService.down(response, qualityInspect);
    }
    /**
     * 下载出库检验报告
     * @param response
     * @param qualityInspect
     */
    @PostMapping("/downOutReport")
    public void downOutReport(HttpServletResponse response, @RequestBody QualityInspect qualityInspect) {
        qualityInspectService.downOutReport(response, qualityInspect);
    }
}
src/main/java/com/ruoyi/quality/mapper/QualityInspectMapper.java
@@ -52,4 +52,6 @@
     * 获取热点检测指标 Top 4 + 其他
     */
    List<QualityParameterStatDto> getTopParameters(@Param("modelType") Integer modelType);
    QualityInspect selectOneData(@Param("id") Long id);
}
src/main/java/com/ruoyi/quality/pojo/QualityInspect.java
@@ -6,10 +6,12 @@
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
@@ -39,6 +41,7 @@
     * 检测日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "检测日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date checkTime;
@@ -47,7 +50,7 @@
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "生产日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date productionDate;
    private LocalDate productionDate;
    /**
     * 供应商名称(原材料检验)
@@ -124,7 +127,7 @@
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "有效期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date validityDate;
    private LocalDate validityDate;
    /**
     * 检测单位
@@ -187,4 +190,34 @@
    private String BatchNo;
    private String manufacturingTeam;
    /**
     * 检测日期(格式化字符串,用于Word导出)
     */
    @TableField(exist = false)
    private String checkTimeStr;
    /**
     * 生产日期(格式化字符串,用于Word导出)
     */
    @TableField(exist = false)
    private String productionDateStr;
    /**
     * 有效期(格式化字符串,用于Word导出)
     */
    @TableField(exist = false)
    private String validityDateStr;
    /**
     * 有效期(格式化字符串,用于Word导出)
     */
    @TableField(exist = false)
    private String inspectMaterialConditionA;
    /**
     * 有效期(格式化字符串,用于Word导出)
     */
    @TableField(exist = false)
    private String inspectMaterialConditionB;
}
src/main/java/com/ruoyi/quality/service/IQualityInspectService.java
@@ -24,4 +24,6 @@
    int submit(QualityInspect qualityInspect);
    void down(HttpServletResponse response, QualityInspect qualityInspect);
    void downOutReport(HttpServletResponse response, QualityInspect qualityInspect);
}
src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -33,7 +33,10 @@
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
@@ -207,5 +210,81 @@
    }
    @Override
    public void downOutReport(HttpServletResponse response, QualityInspect qualityInspect) {
        QualityInspect inspect = qualityInspectMapper.selectOneData(qualityInspect.getId());
        // 格式化日期字段
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        inspect.setCheckTimeStr(inspect.getCheckTime() != null ? sdf.format(inspect.getCheckTime()) : "");
        inspect.setProductionDateStr(inspect.getProductionDate() != null ? inspect.getProductionDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) : "");
        inspect.setValidityDateStr(inspect.getValidityDate() != null ? inspect.getValidityDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) : "");
        // 获取检验参数列表
        List<QualityInspectParam> paramList = qualityInspectParamService.list(
                Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, inspect.getId()));
        int index = 1;
        for (QualityInspectParam detail : paramList) {
            detail.setIndex(index);
            index++;
        }
        // 获取产品型号信息(包含有效期)
        ProductModel productModel = null;
        BigDecimal validityPeriod = null;
        if (inspect.getProductModelId() != null) {
            productModel = productModelMapper.selectById(inspect.getProductModelId());
            if (productModel != null) {
                validityPeriod = productModel.getValidityPeriod();
            }
        }
        /*String calculatedValidityDate = "";
        if (inspect.getProductionDate() != null && validityPeriod != null) {
            LocalDate productionDate = inspect.getProductionDate();
            int years = validityPeriod.intValue();
            int months = validityPeriod
                    .subtract(new BigDecimal(years))
                    .multiply(new BigDecimal(12))
                    .setScale(0, RoundingMode.HALF_UP)
                    .intValue();
            LocalDate calculatedDate = productionDate
                    .plusYears(years)
                    .plusMonths(months);
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
            calculatedValidityDate = calculatedDate.format(formatter);
        }*/
        // 检验依据:产品名称 + 出厂检验操作流程
        String checkBasis = (inspect.getProductName() != null ? inspect.getProductName() : "") + "出厂检验操作流程";
        InputStream inputStream = this.getClass().getResourceAsStream("/static/out-report-template.docx");
        Configure configure = Configure.builder()
                .bind("paramList", new HackLoopTableRenderPolicy())
                .build();
//        final String finalCalculatedValidityDate = calculatedValidityDate;
        final String finalCheckBasis = checkBasis;
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("inspect", inspect);
                    put("checkBasis", finalCheckBasis);
//                    put("calculatedValidityDate", finalCalculatedValidityDate);
                    put("paramList", paramList);
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode("出库检验报告", "UTF-8");
            response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
            inputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
}
src/main/resources/mapper/quality/QualityInspectMapper.xml
@@ -443,6 +443,55 @@
        ORDER BY rn;
    </select>
    <select id="selectOneData" resultType="com.ruoyi.quality.pojo.QualityInspect">
        select id,
               inspect_type,
               check_time,
               production_date,
               supplier,
               customer,
               process,
               check_name,
               product_id,
               product_name,
               model,
               unit,
               quantity,
               check_company,
               check_result,
               create_time,
               create_user,
               update_time,
               update_user,
               tenant_id,
               inspect_state,
               purchase_ledger_id,
               product_main_id,
               defective_phenomena,
               product_model_id,
               test_standard_id,
               inspected_quantity,
               case
                   when inspect_material_condition = '检验用液剂情况' then
                       '☐'
                   else
                       '☑'
                   end as inspect_material_condition_a,
               case
                   when inspect_material_condition = '检验用粉剂情况' then
                       '☐'
                   else
                       '☑'
                   end as inspect_material_condition_b,
               validity_date,
               manufacturing_team,
               batch_no
        from quality_inspect
        where id = #{id};
    </select>
</mapper>
src/main/resources/static/out-report-template.docx
Binary files differ