package jnpf.controller; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.xuyanwu.spring.file.storage.FileInfo; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jnpf.base.ActionResult; import jnpf.base.UserInfo; import jnpf.base.model.ColumnDataModel; import jnpf.base.util.VisualUtils; import jnpf.base.vo.DownloadVO; import jnpf.config.ConfigValueUtil; import jnpf.model.materialcheckdata.QaMaterialCheckDataConstant; import jnpf.model.materialcheckdata.QaMaterialCheckDataForm; import jnpf.model.materialcheckdata.QaMaterialCheckDataPagination; import jnpf.model.materialcheckdata.QaSchemeBaseModel; import jnpf.model.qafinalcheckdata.QaFinalCheckDataConstant; import jnpf.model.qafinalcheckdata.QaFinalCheckDataPagination; import jnpf.model.visualJson.config.HeaderModel; import jnpf.service.*; import jnpf.entity.*; import jnpf.util.*; import lombok.Cleanup; import lombok.extern.slf4j.Slf4j; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.*; import jnpf.base.vo.PageListVO; import jnpf.base.vo.PaginationVO; import java.io.IOException; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; /** * 原材料检验 * @版本: V3.5 * @版权: 引迈信息技术有限公司(https://www.jnpfsoft.com) * @作者: JNPF开发平台组 * @日期: 2024-10-03 */ @Slf4j @RestController @Tag(name = "原材料检验" , description = "example") @RequestMapping("/api/example/Qa_material_check_data") public class QaMaterialCheckDataController { @Autowired private GeneraterSwapUtil generaterSwapUtil; @Autowired private UserProvider userProvider; @Autowired private QaMaterialCheckDataService qaMaterialCheckDataService; @Autowired private QaMaterialCheckDataTwService qaMaterialCheckDataTwService; @Autowired private QaMaterialCheckDataThService qaMaterialCheckDataThService; @Autowired private ConfigValueUtil configValueUtil; /** * 列表 * * @param pageInfo * @return */ @Operation(summary = "获取列表") @PostMapping("/getList") public ActionResult list(@RequestBody QaMaterialCheckDataPagination pageInfo)throws IOException{ List list= qaMaterialCheckDataService.getList(pageInfo); //返回对象 PageListVO vo = new PageListVO(); vo.setList(list); PaginationVO page = JsonUtil.getJsonToBean(pageInfo, PaginationVO.class); vo.setPagination(page); return ActionResult.success(vo); } /** * 创建 * * @param qaMaterialCheckDataForm * @return */ @PostMapping() @Operation(summary = "创建") public ActionResult create(@RequestBody @Valid QaMaterialCheckDataForm qaMaterialCheckDataForm) { String b = qaMaterialCheckDataService.checkForm(qaMaterialCheckDataForm,0); if (StringUtil.isNotEmpty(b)){ return ActionResult.fail(b ); } try{ qaMaterialCheckDataService.saveOrUpdate(qaMaterialCheckDataForm, null ,true); }catch(Exception e){ log.error("####################### 新增数据失败 ", e); return ActionResult.fail("新增数据失败"); } return ActionResult.success("创建成功"); } /** * 编辑 * @param id * @param qaMaterialCheckDataForm * @return */ @PutMapping("/{id}") @Operation(summary = "更新") public ActionResult update(@PathVariable("id") String id,@RequestBody @Valid QaMaterialCheckDataForm qaMaterialCheckDataForm, @RequestParam(value = "isImport", required = false) boolean isImport){ if (!isImport) { String b = qaMaterialCheckDataService.checkForm(qaMaterialCheckDataForm,1); if (StringUtil.isNotEmpty(b)){ return ActionResult.fail(b ); } } QaMaterialCheckDataEntity entity= qaMaterialCheckDataService.getInfo(id); if(entity!=null){ try{ qaMaterialCheckDataService.saveOrUpdate(qaMaterialCheckDataForm,id,false); }catch(Exception e){ return ActionResult.fail("修改数据失败"); } return ActionResult.success("更新成功"); }else{ return ActionResult.fail("更新失败,数据不存在"); } } /** * 删除 * @param id * @return */ @Operation(summary = "删除") @DeleteMapping("/{id}") @Transactional public ActionResult delete(@PathVariable("id") String id){ QaMaterialCheckDataEntity entity= qaMaterialCheckDataService.getInfo(id); if(entity!=null){ //主表数据删除 qaMaterialCheckDataService.delete(entity); QueryWrapper queryWrapperQa_material_check_data_tw=new QueryWrapper<>(); queryWrapperQa_material_check_data_tw.lambda().eq(QaMaterialCheckDataTwEntity::getMaterialCheckDataId,entity.getId()); //子表数据删除 qaMaterialCheckDataTwService.remove(queryWrapperQa_material_check_data_tw); QueryWrapper queryWrapperQa_material_check_data_th=new QueryWrapper<>(); queryWrapperQa_material_check_data_th.lambda().eq(QaMaterialCheckDataThEntity::getMaterialCheckDataId,entity.getId()); //子表数据删除 qaMaterialCheckDataThService.remove(queryWrapperQa_material_check_data_th); } return ActionResult.success("删除成功"); } /** * 表单信息(详情页) * 详情页面使用-转换数据 * @param id * @return */ @Operation(summary = "表单信息(详情页)") @GetMapping("/detail/{id}") public ActionResult detailInfo(@PathVariable("id") String id){ QaMaterialCheckDataEntity entity= qaMaterialCheckDataService.getInfo(id); if(entity==null){ return ActionResult.fail("表单数据不存在!"); } Map qa_material_check_dataMap=JsonUtil.entityToMap(entity); qa_material_check_dataMap.put("id", qa_material_check_dataMap.get("id")); //副表数据 //子表数据 List qa_material_check_data_twList = entity.getQa_material_check_data_tw(); qa_material_check_dataMap.put("tableField120",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(qa_material_check_data_twList))); qa_material_check_dataMap.put("qa_material_check_data_twList",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(qa_material_check_data_twList))); List qa_material_check_data_thList = entity.getQa_material_check_data_th(); qa_material_check_dataMap.put("tableField126",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(qa_material_check_data_thList))); qa_material_check_dataMap.put("qa_material_check_data_thList",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(qa_material_check_data_thList))); qa_material_check_dataMap = generaterSwapUtil.swapDataDetail(qa_material_check_dataMap, QaMaterialCheckDataConstant.getFormData(),"611557365761712197",false); return ActionResult.success(qa_material_check_dataMap); } /** * 获取详情(编辑页) * 编辑页面使用-不转换数据 * @param id * @return */ @Operation(summary = "信息") @GetMapping("/{id}") public ActionResult info(@PathVariable("id") String id){ QaMaterialCheckDataEntity entity= qaMaterialCheckDataService.getInfo(id); if(entity==null){ return ActionResult.fail("表单数据不存在!"); } Map qa_material_check_dataMap=JsonUtil.entityToMap(entity); qa_material_check_dataMap.put("id", qa_material_check_dataMap.get("id")); //副表数据 //子表数据 List qa_material_check_data_twList = entity.getQa_material_check_data_tw(); qa_material_check_dataMap.put("tableField120",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(qa_material_check_data_twList))); qa_material_check_dataMap.put("qa_material_check_data_twList",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(qa_material_check_data_twList))); List qa_material_check_data_thList = entity.getQa_material_check_data_th(); qa_material_check_dataMap.put("tableField126",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(qa_material_check_data_thList))); qa_material_check_dataMap.put("qa_material_check_data_thList",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(qa_material_check_data_thList))); qa_material_check_dataMap = generaterSwapUtil.swapDataForm(qa_material_check_dataMap, QaMaterialCheckDataConstant.getFormData(), QaMaterialCheckDataConstant.TABLEFIELDKEY, QaMaterialCheckDataConstant.TABLERENAMES); return ActionResult.success(qa_material_check_dataMap); } /** * 质检方案信息 * @param materialCode * @return */ @Operation(summary = "质检方案信息") @PostMapping("/item/{materialCode}") public ActionResult item(@PathVariable("materialCode") String materialCode, @RequestBody @Valid QaMaterialCheckDataForm qaMaterialCheckDataForm){ QaMaterialCheckDataForm param = qaMaterialCheckDataForm; param.setMaterialCode(materialCode); List result= qaMaterialCheckDataService.getItemInfo(param); return ActionResult.success(result); } /** * 导出Excel * * @return */ @Operation(summary = "导出Excel") @PostMapping("/Actions/Export") public ActionResult Export(@RequestBody QaMaterialCheckDataPagination qaMaterialCheckDataPagination) throws IOException { if (StringUtil.isEmpty(qaMaterialCheckDataPagination.getSelectKey())){ return ActionResult.fail("请选择导出字段"); } List list = qaMaterialCheckDataService.getList(qaMaterialCheckDataPagination); List> realList=new ArrayList<>(); for (QaMaterialCheckDataForm entity : list) { Map qaFinalCheckDataMap=JsonUtil.entityToMap(entity); qaFinalCheckDataMap.put("id", qaFinalCheckDataMap.get("id")); realList.add(qaFinalCheckDataMap); } //数据转换 realList = generaterSwapUtil.swapDataList(realList, QaFinalCheckDataConstant.getFormData(), QaFinalCheckDataConstant.getColumnData(), qaMaterialCheckDataPagination.getModuleId(),false); String[]keys=!StringUtil.isEmpty(qaMaterialCheckDataPagination.getSelectKey())?qaMaterialCheckDataPagination.getSelectKey():new String[0]; UserInfo userInfo=userProvider.get(); DownloadVO vo=this.creatModelExcel(configValueUtil.getTemporaryFilePath(),realList,keys,userInfo); return ActionResult.success(vo); } /** * 导出表格方法 */ public DownloadVO creatModelExcel(String path,List>list,String[]keys,UserInfo userInfo){ DownloadVO vo=DownloadVO.builder().build(); List entitys=new ArrayList<>(); if(keys.length>0){ for(String key:keys){ switch(key){ case "supplierName" : entitys.add(new ExcelExportEntity("供应商" ,"supplierName")); break; case "materialName" : entitys.add(new ExcelExportEntity("原材料名称" ,"materialName")); break; case "model" : entitys.add(new ExcelExportEntity("规格" ,"model")); break; case "productLot" : entitys.add(new ExcelExportEntity("生产批号" ,"productLot")); break; case "checkDate" : entitys.add(new ExcelExportEntity("检验日期" ,"checkDate")); break; case "checkResult" : entitys.add(new ExcelExportEntity("检验结果" ,"checkResult")); break; case "processResult" : entitys.add(new ExcelExportEntity("处理结果" ,"processResult")); break; case "problemReason" : entitys.add(new ExcelExportEntity("问题原因" ,"problemReason")); break; case "remark" : entitys.add(new ExcelExportEntity("备注" ,"remark")); break; default: break; } } } ExportParams exportParams = new ExportParams(null, "表单信息"); exportParams.setType(ExcelType.XSSF); try{ @Cleanup Workbook workbook = new HSSFWorkbook(); if (entitys.size()>0){ if (list.size()==0){ list.add(new HashMap<>()); } //去除空数据 List> dataList = new ArrayList<>(); for (Map map : list) { int i = 0; for (String key : keys) { //子表 if (key.toLowerCase().startsWith("tablefield")) { String tableField = key.substring(0, key.indexOf("-" )); String field = key.substring(key.indexOf("-" ) + 1); Object o = map.get(tableField); if (o != null) { List> childList = (List>) o; for (Map childMap : childList) { if (childMap.get(field) != null) { i++; } } } } else { Object o = map.get(key); if (o != null) { i++; } } } if (i > 0) { dataList.add(map); } } //复杂表头-表头和数据处理 ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(QaFinalCheckDataConstant.getColumnData(), ColumnDataModel.class); List complexHeaderList = columnDataModel.getComplexHeaderList(); //复杂表头-表头和数据处理 if (!Objects.equals(columnDataModel.getType(), 3) && !Objects.equals(columnDataModel.getType(), 5)) { entitys = VisualUtils.complexHeaderHandel(entitys, complexHeaderList); dataList = VisualUtils.complexHeaderDataHandel(dataList, complexHeaderList); } workbook = ExcelExportUtil.exportExcel(exportParams, entitys, dataList); } String fileName = "原材料检验表单信息_" + DateUtil.dateNow("yyyyMMddHHmmss") + ".xlsx"; MultipartFile multipartFile = ExcelUtil.workbookToCommonsMultipartFile(workbook, fileName); String temporaryFilePath = configValueUtil.getTemporaryFilePath(); FileInfo fileInfo = FileUploadUtils.uploadFile(multipartFile, temporaryFilePath, fileName); vo.setName(fileInfo.getFilename()); vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + "Temporary") + "&name=" + fileName); } catch (Exception e) { log.error("信息导出Excel错误:{}", e.getMessage()); e.printStackTrace(); } return vo; } }