package jnpf.controller; import cn.hutool.core.util.ObjectUtil; 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.exception.DataException; import jnpf.model.subjectsettlementrules.SubjectSettlementRulesConstant; import jnpf.permission.entity.UserEntity; import jnpf.service.*; import jnpf.entity.*; import jnpf.util.*; import jnpf.model.energyconsumption.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.*; import jnpf.annotation.JnpfField; import jnpf.base.vo.PageListVO; import jnpf.base.vo.PaginationVO; import jnpf.base.vo.DownloadVO; import jnpf.config.ConfigValueUtil; import jnpf.base.entity.ProvinceEntity; import java.io.IOException; import java.util.stream.Collectors; import jnpf.engine.entity.FlowTaskEntity; import jnpf.exception.WorkFlowException; import org.springframework.web.multipart.MultipartFile; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Workbook; import java.io.File; import jnpf.onlinedev.model.ExcelImFieldModel; import jnpf.onlinedev.model.OnlineImport.ImportDataModel; import jnpf.onlinedev.model.OnlineImport.ImportFormCheckUniqueModel; import jnpf.onlinedev.model.OnlineImport.ExcelImportModel; import jnpf.onlinedev.model.OnlineImport.VisualImportModel; import cn.xuyanwu.spring.file.storage.FileInfo; import lombok.Cleanup; import jnpf.model.visualJson.config.HeaderModel; import jnpf.base.model.ColumnDataModel; import jnpf.base.util.VisualUtils; import org.springframework.transaction.annotation.Transactional; /** * energyConsumption * @版本: V3.5 * @版权: 引迈信息技术有限公司(https://www.jnpfsoft.com) * @作者: JNPF开发平台组 * @日期: 2024-02-02 */ @Slf4j @RestController @Tag(name = "energyConsumption" , description = "scm") @RequestMapping("/api/scm/EnergyConsumption") public class EnergyConsumptionController { @Autowired private GeneraterSwapUtil generaterSwapUtil; @Autowired private UserProvider userProvider; @Autowired private EnergyConsumptionService energyConsumptionService; @Autowired private ConfigValueUtil configValueUtil; /** * 列表 * * @param energyConsumptionPagination * @return */ @Operation(summary = "获取列表") @PostMapping("/getList") public ActionResult list(@RequestBody EnergyConsumptionPagination energyConsumptionPagination)throws IOException{ List list= energyConsumptionService.getList(energyConsumptionPagination); List> realList=new ArrayList<>(); for (EnergyConsumptionEntity entity : list) { Map energyConsumptionMap=JsonUtil.entityToMap(entity); energyConsumptionMap.put("id", energyConsumptionMap.get("id")); //副表数据 //子表数据 realList.add(energyConsumptionMap); } //数据转换 realList = generaterSwapUtil.swapDataList(realList, EnergyConsumptionConstant.getFormData(), EnergyConsumptionConstant.getColumnData(), energyConsumptionPagination.getModuleId(),false); //流程状态添加 for(Map vo:realList){ FlowTaskEntity flowTaskEntity = generaterSwapUtil.getInfoSubmit(String.valueOf(vo.get("id")), FlowTaskEntity::getStatus); if (flowTaskEntity!=null){ vo.put("flowState",flowTaskEntity.getStatus()); }else{ vo.put("flowState",null); } //添加流程id String flowId=""; if(vo.get("flowid")!=null){ flowId = String.valueOf(vo.get("flowid")); } if(vo.get("flowid".toUpperCase())!=null){ flowId = String.valueOf(vo.get("flowid".toUpperCase())); } if(StringUtil.isNotEmpty(flowId)){ vo.put("flowId" ,flowId); } } //返回对象 PageListVO vo = new PageListVO(); vo.setList(realList); PaginationVO page = JsonUtil.getJsonToBean(energyConsumptionPagination, PaginationVO.class); vo.setPagination(page); return ActionResult.success(vo); } /** * 创建 * * @param energyConsumptionForm * @return */ @PostMapping("/{id}") @Operation(summary = "创建") public ActionResult create(@PathVariable("id") String id, @RequestBody @Valid EnergyConsumptionForm energyConsumptionForm) { String b = energyConsumptionService.checkForm(energyConsumptionForm,0); if (StringUtil.isNotEmpty(b)){ return ActionResult.fail(b ); } try{ energyConsumptionService.saveOrUpdate(energyConsumptionForm, id ,true); }catch(Exception e){ return ActionResult.fail("新增数据失败"); } return ActionResult.success("创建成功"); } /** * 导出Excel * * @return */ @Operation(summary = "导出Excel") @PostMapping("/Actions/Export") public ActionResult Export(@RequestBody EnergyConsumptionPagination energyConsumptionPagination) throws IOException { if (StringUtil.isEmpty(energyConsumptionPagination.getSelectKey())){ return ActionResult.fail("请选择导出字段"); } List list= energyConsumptionService.getList(energyConsumptionPagination); List> realList=new ArrayList<>(); for (EnergyConsumptionEntity entity : list) { Map energyConsumptionMap=JsonUtil.entityToMap(entity); energyConsumptionMap.put("id", energyConsumptionMap.get("id")); //副表数据 //子表数据 realList.add(energyConsumptionMap); } //数据转换 realList = generaterSwapUtil.swapDataList(realList, EnergyConsumptionConstant.getFormData(), EnergyConsumptionConstant.getColumnData(), energyConsumptionPagination.getModuleId(),false); String[]keys=!StringUtil.isEmpty(energyConsumptionPagination.getSelectKey())?energyConsumptionPagination.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 "code" : entitys.add(new ExcelExportEntity("编号" ,"code")); break; case "name" : entitys.add(new ExcelExportEntity("名称" ,"name")); break; case "monthTime" : entitys.add(new ExcelExportEntity("隶属月份" ,"monthTime")); break; case "type" : entitys.add(new ExcelExportEntity("单据类型" ,"type")); break; case "cost" : entitys.add(new ExcelExportEntity("费用信息" ,"cost")); 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(EnergyConsumptionConstant.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("yyyyMMdd") + "_" + RandomUtil.uuId() + ".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; } /** * 编辑 * @param id * @param energyConsumptionForm * @return */ @PutMapping("/{id}") @Operation(summary = "更新") public ActionResult update(@PathVariable("id") String id,@RequestBody @Valid EnergyConsumptionForm energyConsumptionForm, @RequestParam(value = "isImport", required = false) boolean isImport){ energyConsumptionForm.setId(id); if (!isImport) { String b = energyConsumptionService.checkForm(energyConsumptionForm,1); if (StringUtil.isNotEmpty(b)){ return ActionResult.fail(b ); } } EnergyConsumptionEntity entity= energyConsumptionService.getInfo(id); if(entity!=null){ try{ energyConsumptionService.saveOrUpdate(energyConsumptionForm,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){ EnergyConsumptionEntity entity= energyConsumptionService.getInfo(id); if(entity!=null){ FlowTaskEntity taskEntity = generaterSwapUtil.getInfoSubmit(id, FlowTaskEntity::getId, FlowTaskEntity::getStatus); if (taskEntity != null) { try { generaterSwapUtil.deleteFlowTask(taskEntity); } catch (WorkFlowException e) { e.printStackTrace(); } } //假删除 entity.setDeleteMark(1); energyConsumptionService.update(id,entity); } return ActionResult.success("删除成功"); } /** * 表单信息(详情页) * 详情页面使用-转换数据 * @param id * @return */ @Operation(summary = "表单信息(详情页)") @GetMapping("/detail/{id}") public ActionResult detailInfo(@PathVariable("id") String id){ EnergyConsumptionEntity entity= energyConsumptionService.getInfo(id); if(entity==null){ return ActionResult.fail("表单数据不存在!"); } Map energyConsumptionMap=JsonUtil.entityToMap(entity); energyConsumptionMap.put("id", energyConsumptionMap.get("id")); //副表数据 //子表数据 energyConsumptionMap = generaterSwapUtil.swapDataDetail(energyConsumptionMap,EnergyConsumptionConstant.getFormData(),"523056602735981125",false); return ActionResult.success(energyConsumptionMap); } /** * 获取详情(编辑页) * 编辑页面使用-不转换数据 * @param id * @return */ @Operation(summary = "信息") @GetMapping("/{id}") public ActionResult info(@PathVariable("id") String id){ EnergyConsumptionEntity entity= energyConsumptionService.getInfo(id); if(entity==null){ return ActionResult.fail("表单数据不存在!"); } Map energyConsumptionMap=JsonUtil.entityToMap(entity); energyConsumptionMap.put("id", energyConsumptionMap.get("id")); //副表数据 //子表数据 energyConsumptionMap = generaterSwapUtil.swapDataForm(energyConsumptionMap,EnergyConsumptionConstant.getFormData(),EnergyConsumptionConstant.TABLEFIELDKEY,EnergyConsumptionConstant.TABLERENAMES); return ActionResult.success(energyConsumptionMap); } }