| src/main/java/com/ruoyi/quality/controller/QualityInspectController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/quality/mapper/QualityInspectMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/quality/pojo/QualityInspect.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/quality/service/IQualityInspectService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/mapper/quality/QualityInspectMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | 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.docxBinary files differ