From ec9a95eb994018cc1ba28a80946165f795001dea Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期五, 29 十一月 2024 16:49:24 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- business/src/main/java/com/ycl/service/impl/ProjectPlanExamineRecordServiceImpl.java | 22 ++ business/src/main/resources/mapper/ProjectInfoMapper.xml | 28 +++ business/src/main/java/com/ycl/domain/excel/ProjectExcelTemplate.java | 14 + business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoVO.java | 3 business/src/main/resources/mapper/ProjectPlanProgressReportMapper.xml | 1 common/src/main/java/com/ycl/common/enums/business/ImportanceTypeEnum.java | 31 +++ business/src/main/resources/mapper/ProjectPlanExamineRecordMapper.xml | 1 business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java | 7 business/src/main/java/com/ycl/domain/query/ProjectExportQuery.java | 14 + common/src/main/java/com/ycl/common/enums/business/ProjectStatusEnum.java | 30 +++ business/src/main/java/com/ycl/domain/entity/ProjectPlanInfo.java | 17 - business/src/main/java/com/ycl/service/impl/ProjectPlanInfoServiceImpl.java | 13 + business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoItem.java | 2 business/src/main/java/com/ycl/controller/ProjectInfoController.java | 18 + business/src/main/java/com/ycl/service/ProjectPlanProgressReportService.java | 2 business/src/main/resources/mapper/ProjectPlanInfoMapper.xml | 5 business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java | 169 +++++++++++++++++--- business/src/main/java/com/ycl/controller/ProjectPlanProgressReportController.java | 5 common/src/main/java/com/ycl/common/enums/business/ProjectTypeEnum.java | 32 ++++ common/src/main/java/com/ycl/common/utils/excel/OutputExcelUtils.java | 8 business/src/main/java/com/ycl/service/ProjectInfoService.java | 6 business/src/main/java/com/ycl/service/impl/ProjectPlanProgressReportServiceImpl.java | 29 +++ 22 files changed, 396 insertions(+), 61 deletions(-) diff --git a/business/src/main/java/com/ycl/controller/ProjectInfoController.java b/business/src/main/java/com/ycl/controller/ProjectInfoController.java index 768ed26..b082e4d 100644 --- a/business/src/main/java/com/ycl/controller/ProjectInfoController.java +++ b/business/src/main/java/com/ycl/controller/ProjectInfoController.java @@ -8,6 +8,7 @@ import com.ycl.domain.excel.ProjectExcelTemplate; import com.ycl.domain.form.DocumentInfoForm; import com.ycl.domain.form.ProjectInfoForm; +import com.ycl.domain.query.ProjectExportQuery; import com.ycl.domain.query.ProjectInfoQuery; import com.ycl.service.ProjectInfoService; import io.swagger.annotations.Api; @@ -19,6 +20,7 @@ import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.NotEmpty; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -58,7 +60,7 @@ @DeleteMapping("/{id}") @ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎") // @PreAuthorize("hasAuthority('projectInfo:del')") - public Result removeById(@PathVariable("id") String id) { + public Result removeById(@PathVariable("id") Long id) { return projectInfoService.removeById(id); } @@ -115,10 +117,18 @@ * @return */ @PostMapping("/export/template") - public void exportTemplate(HttpServletResponse response, - @RequestBody List<String> fieldList - ) throws IOException { + public void exportTemplate(HttpServletResponse response) throws IOException { + List<String> fieldList = new ArrayList<>(); OutputExcelUtils.export(response, "瀵煎叆妯℃澘", "椤圭洰淇℃伅", null, ProjectExcelTemplate.class ,fieldList); } + /** + * 椤圭洰瀵煎嚭 + * @param response + * @throws IOException + */ + @PostMapping("/export") + public void export(HttpServletResponse response, ProjectExportQuery query) throws IOException { + projectInfoService.export(response, query); + } } diff --git a/business/src/main/java/com/ycl/controller/ProjectPlanProgressReportController.java b/business/src/main/java/com/ycl/controller/ProjectPlanProgressReportController.java index 64db8ca..dc6aac4 100644 --- a/business/src/main/java/com/ycl/controller/ProjectPlanProgressReportController.java +++ b/business/src/main/java/com/ycl/controller/ProjectPlanProgressReportController.java @@ -40,6 +40,11 @@ return projectPlanProgressReportService.add(form); } + @PostMapping("/examine") + public Result examine(@RequestBody @Validated(Add.class) ProgressReportResponseVO form) { + return projectPlanProgressReportService.examine(form); + } + @PutMapping @ApiOperation(value = "淇敼", notes = "淇敼") @PreAuthorize("hasAuthority('projectPlanProgressReport:edit')") diff --git a/business/src/main/java/com/ycl/domain/entity/ProjectPlanInfo.java b/business/src/main/java/com/ycl/domain/entity/ProjectPlanInfo.java index 02506a9..f82e768 100644 --- a/business/src/main/java/com/ycl/domain/entity/ProjectPlanInfo.java +++ b/business/src/main/java/com/ycl/domain/entity/ProjectPlanInfo.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import com.ycl.system.domain.base.AbsEntity; +import com.ycl.system.domain.base.AbsEntityOnlyIdAndDeleted; import lombok.Data; import java.time.LocalDateTime; @@ -18,7 +19,7 @@ */ @Data @TableName("t_project_plan_info") -public class ProjectPlanInfo extends AbsEntity { +public class ProjectPlanInfo extends AbsEntityOnlyIdAndDeleted { private static final long serialVersionUID = 1L; @@ -35,23 +36,13 @@ private Integer progressStatus; @TableField("start_time") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") /** 璁″垝寮�濮嬫椂闂� */ private Date startTime; @TableField("end_time") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") /** 璁″垝瀹屾垚鏃堕棿 */ private Date endTime; - /** 鍒涘缓鏃堕棿 */ - @TableField(exist = false) - private Date gmtCreate; - - /** 淇敼鏃堕棿 */ - @TableField(exist = false) - private Date gmtUpdate; - - @TableField(exist = false) - private Integer deleted; } diff --git a/business/src/main/java/com/ycl/domain/excel/ProjectExcelTemplate.java b/business/src/main/java/com/ycl/domain/excel/ProjectExcelTemplate.java index 58228b0..b1fdfa3 100644 --- a/business/src/main/java/com/ycl/domain/excel/ProjectExcelTemplate.java +++ b/business/src/main/java/com/ycl/domain/excel/ProjectExcelTemplate.java @@ -2,6 +2,11 @@ import com.alibaba.excel.annotation.ExcelProperty; import com.fasterxml.jackson.annotation.JsonFormat; +import com.ycl.common.enums.business.ImportanceTypeEnum; +import com.ycl.common.enums.business.ProjectStatusEnum; +import com.ycl.common.enums.business.ProjectTypeEnum; +import com.ycl.common.utils.excel.annotation.ExcelEnumFormat; +import com.ycl.common.utils.excel.convert.ExcelEnumConvert; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; @@ -36,13 +41,15 @@ /** * 椤圭洰绫诲瀷 */ - @ExcelProperty(value = "椤圭洰绫诲瀷") + @ExcelProperty(value = "椤圭洰绫诲瀷",converter = ExcelEnumConvert.class) + @ExcelEnumFormat(enumClass = ProjectTypeEnum.class,codeField = "type",textField = "desc") private String projectType; /** * 椤圭洰鐘舵�� */ - @ExcelProperty(value = "椤圭洰鐘舵��") + @ExcelProperty(value = "椤圭洰鐘舵��",converter = ExcelEnumConvert.class) + @ExcelEnumFormat(enumClass = ProjectStatusEnum.class,codeField = "type",textField = "desc") private String projectStatus; /** @@ -60,7 +67,8 @@ /** * 閲嶇偣鍒嗙被 */ - @ExcelProperty(value = "閲嶇偣鍒嗙被") + @ExcelProperty(value = "閲嶇偣鍒嗙被",converter = ExcelEnumConvert.class) + @ExcelEnumFormat(enumClass = ImportanceTypeEnum.class,codeField = "type",textField = "desc") private String importanceType; /** diff --git a/business/src/main/java/com/ycl/domain/query/ProjectExportQuery.java b/business/src/main/java/com/ycl/domain/query/ProjectExportQuery.java new file mode 100644 index 0000000..78907d1 --- /dev/null +++ b/business/src/main/java/com/ycl/domain/query/ProjectExportQuery.java @@ -0,0 +1,14 @@ +package com.ycl.domain.query; + +import lombok.Data; + +import java.util.List; +@Data +public class ProjectExportQuery { + //瀛楁鍒� + private List<String> fieldList; + //鍏蜂綋鐨刾rojectId + private List<Long> dataIdList; + //鏄惁闇�瑕侀檮浠� + private Boolean requireFile; +} diff --git a/business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoItem.java b/business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoItem.java index fee3153..8425346 100644 --- a/business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoItem.java +++ b/business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoItem.java @@ -14,6 +14,8 @@ @NoArgsConstructor public class ProjectPlanInfoItem { private String title; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date startTime; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date endTime; } diff --git a/business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoVO.java b/business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoVO.java index 6343fd5..d6f7810 100644 --- a/business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoVO.java +++ b/business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoVO.java @@ -2,6 +2,7 @@ import com.ycl.domain.entity.ProjectPlanInfo; +import com.ycl.system.domain.base.AbsEntity; import com.ycl.system.domain.base.AbsVo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -19,7 +20,7 @@ */ @Data @ApiModel(value = "椤圭洰璁″垝椤瑰搷搴旀暟鎹�", description = "椤圭洰璁″垝椤瑰搷搴旀暟鎹�") -public class ProjectPlanInfoVO extends AbsVo { +public class ProjectPlanInfoVO extends AbsEntity { /** 椤圭洰璁″垝璁板綍id */ @ApiModelProperty("椤圭洰璁″垝璁板綍id") diff --git a/business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java b/business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java index fa9dd84..34e9092 100644 --- a/business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java +++ b/business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java @@ -3,10 +3,14 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.ycl.domain.entity.ProjectInfo; +import com.ycl.domain.excel.ProjectExcelTemplate; import com.ycl.domain.query.ProjectInfoQuery; import com.ycl.domain.vo.ProjectInfoVO; +import com.ycl.domain.vo.ProjectVO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 椤圭洰绠$悊鍩虹淇℃伅琛� Mapper 鎺ュ彛 @@ -29,4 +33,7 @@ */ IPage getPage(IPage page, @Param("query") ProjectInfoQuery query); + List<ProjectVO> homeCount(); + + List<ProjectVO> selectProjectDetailByIds(@Param("dataIdList") List<Long> dataIdList); } diff --git a/business/src/main/java/com/ycl/service/ProjectInfoService.java b/business/src/main/java/com/ycl/service/ProjectInfoService.java index e98c556..cea7951 100644 --- a/business/src/main/java/com/ycl/service/ProjectInfoService.java +++ b/business/src/main/java/com/ycl/service/ProjectInfoService.java @@ -5,10 +5,12 @@ import com.ycl.domain.entity.ProjectInfo; import com.ycl.domain.form.DocumentInfoForm; import com.ycl.domain.form.ProjectInfoForm; +import com.ycl.domain.query.ProjectExportQuery; import com.ycl.domain.query.ProjectInfoQuery; import com.ycl.domain.vo.IndexCountVO; import com.ycl.domain.vo.IndexDTO; +import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; @@ -46,7 +48,7 @@ * @param id * @return */ - Result removeById(String id); + Result removeById(Long id); /** * 鍒嗛〉鏌ヨ @@ -77,4 +79,6 @@ Result addDoc(DocumentInfoForm form); Result getManagerFlag(Integer recordId); + + void export(HttpServletResponse response, ProjectExportQuery query); } diff --git a/business/src/main/java/com/ycl/service/ProjectPlanProgressReportService.java b/business/src/main/java/com/ycl/service/ProjectPlanProgressReportService.java index c9fbd88..1c22da4 100644 --- a/business/src/main/java/com/ycl/service/ProjectPlanProgressReportService.java +++ b/business/src/main/java/com/ycl/service/ProjectPlanProgressReportService.java @@ -64,4 +64,6 @@ * @return */ Result all(); + + Result examine(ProgressReportResponseVO form); } diff --git a/business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java index 3adc8f2..b865b20 100644 --- a/business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java +++ b/business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java @@ -1,32 +1,42 @@ package com.ycl.service.impl; import cn.hutool.core.collection.CollUtil; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.common.base.Result; import com.ycl.common.enums.business.FileTypeEnum; +import com.ycl.common.enums.business.ImportanceTypeEnum; import com.ycl.common.enums.business.ProjectCategoryEnum; +import com.ycl.common.exception.base.BaseException; import com.ycl.common.utils.CopyUtils; import com.ycl.common.utils.DateUtils; import com.ycl.common.utils.SecurityUtils; -import com.ycl.domain.entity.File; -import com.ycl.domain.entity.ProjectInfo; +import com.ycl.common.utils.StringUtils; +import com.ycl.common.utils.bean.BeanUtils; +import com.ycl.common.utils.excel.OutputExcelUtils; +import com.ycl.domain.entity.*; +import com.ycl.domain.excel.ProjectExcelTemplate; import com.ycl.domain.form.DocumentInfoForm; import com.ycl.domain.form.ProjectInfoForm; +import com.ycl.domain.query.ProjectExportQuery; import com.ycl.domain.query.ProjectInfoQuery; import com.ycl.domain.vo.*; import com.ycl.framework.utils.PageUtil; -import com.ycl.mapper.FileMapper; -import com.ycl.mapper.ProjectInfoMapper; +import com.ycl.mapper.*; import com.ycl.service.FileService; import com.ycl.service.ProjectInfoService; import lombok.RequiredArgsConstructor; -import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -41,6 +51,10 @@ public class ProjectInfoServiceImpl extends ServiceImpl<ProjectInfoMapper, ProjectInfo> implements ProjectInfoService { private final ProjectInfoMapper projectInfoMapper; + private final ProjectInvestmentFundingMapper investmentFundingMapper; + private final ProjectInvestmentInfoMapper investmentInfoMapper; + private final ProjectInvestmentPolicyComplianceMapper policyMapper; + private final ProjectUnitRegistrationInfoMapper unitRegistrationInfoMapper; private final FileService fileService; private final FileMapper fileMapper; @@ -109,7 +123,6 @@ * @return */ @Override - //TODO:寰呭畬鍠� public Result remove(List<String> ids) { baseMapper.deleteBatchIds(ids); return Result.ok("鍒犻櫎鎴愬姛"); @@ -122,8 +135,18 @@ * @return */ @Override - //TODO:寰呭畬鍠� - public Result removeById(String id) { + @Transactional(rollbackFor = Exception.class) + public Result removeById(Long id) { + investmentFundingMapper.delete(new QueryWrapper<ProjectInvestmentFunding>().eq("project_id", id)); + investmentInfoMapper.delete(new QueryWrapper<ProjectInvestmentInfo>().eq("project_id", id)); + policyMapper.delete(new QueryWrapper<ProjectInvestmentPolicyCompliance>().eq("project_id", id)); + unitRegistrationInfoMapper.delete(new QueryWrapper<ProjectUnitRegistrationInfo>().eq("project_id", id)); + + List<String> types = new ArrayList<>(); + types.add(FileTypeEnum.PROJECT_INFO.getType()); + types.add(FileTypeEnum.INVEST_POLICY.getType()); + types.add(FileTypeEnum.DOCUMENT_INFO.getType()); + fileMapper.delete(new QueryWrapper<File>().eq("bus_id", id).in("type", types)); baseMapper.deleteById(id); return Result.ok("鍒犻櫎鎴愬姛"); } @@ -143,6 +166,7 @@ query.setProjectEndTime(DateUtils.getDayEnd(query.getProjectEndTime())); } String projectCategory = query.getProjectCategory(); + //瀹炴柦闃舵鏈変袱涓�兼斁鍦╯ql澶勭悊 if (ProjectCategoryEnum.RESERVE.getType().equals(projectCategory)) { query.setProjectStatus(ProjectCategoryEnum.RESERVE.getStatus()); query.setReserveOrPrevious(ProjectCategoryEnum.RESERVE.getCode()); @@ -165,10 +189,10 @@ List<ProjectInfoVO> records = page.getRecords(); List<ProjectVO> list = new ArrayList<>(); records.forEach(vo -> { - ProjectInfoVO.transform(vo); - vo.setProjectColorCode("green"); + ProjectInfoVO.transform(vo); + vo.setProjectColorCode("green"); ProjectVO projectVO = new ProjectVO(); - copyToProjectVO(vo,projectVO); + copyToProjectVO(vo, projectVO); //缈昏瘧椤圭洰闃舵 String phase = ProjectCategoryEnum.getPhaseByProjectStatus(projectVO.getProjectStatus(), projectVO.getProcessId() != null); projectVO.setProjectPhase(phase); @@ -177,13 +201,17 @@ return Result.ok().data(list).total(page.getTotal()); } - private void copyToProjectVO(ProjectInfoVO vo,ProjectVO projectVO) { + private void copyToProjectVO(ProjectInfoVO vo, ProjectVO projectVO) { //蹇界暐null鍊肩殑澶嶅埗 CopyUtils.copyNoNullProperties(vo, projectVO); - if(vo.getProjectInvestmentFunding()!=null) CopyUtils.copyNoNullProperties(vo.getProjectInvestmentFunding(),projectVO); - if(vo.getProjectInvestmentInfo()!=null) CopyUtils.copyNoNullProperties(vo.getProjectInvestmentInfo(),projectVO); - if(vo.getProjectUnitRegistrationInfo()!=null) CopyUtils.copyNoNullProperties(vo.getProjectUnitRegistrationInfo(),projectVO); - if(vo.getProjectInvestmentPolicyCompliance()!=null) CopyUtils.copyNoNullProperties(vo.getProjectInvestmentPolicyCompliance(),projectVO); + if (vo.getProjectInvestmentInfo() != null) + CopyUtils.copyNoNullProperties(vo.getProjectInvestmentInfo(), projectVO); + if (vo.getProjectUnitRegistrationInfo() != null) + CopyUtils.copyNoNullProperties(vo.getProjectUnitRegistrationInfo(), projectVO); + if (vo.getProjectInvestmentPolicyCompliance() != null) + CopyUtils.copyNoNullProperties(vo.getProjectInvestmentPolicyCompliance(), projectVO); + if (vo.getProjectInvestmentFunding() != null) + CopyUtils.copyNoNullProperties(vo.getProjectInvestmentFunding(), projectVO); } /** @@ -229,17 +257,80 @@ // {"type":"鐪侀噸鐐归」鐩�","count":0,"amount":"0.00","text":"鐪�"}]}} IndexCountVO indexCountVO = new IndexCountVO(); List<IndexProPhaseCountVO> proPhaseCountVO = new ArrayList<>(); - proPhaseCountVO.add(new IndexProPhaseCountVO("鍌ㄥ瑙勫垝闃舵", 0, "0.00", "鍌�")); - proPhaseCountVO.add(new IndexProPhaseCountVO("椤圭洰鍓嶆湡闃舵", 0, "0.00", "鏂�")); - proPhaseCountVO.add(new IndexProPhaseCountVO("瀹炴柦闃舵", 0, "0.00", "寤�")); - proPhaseCountVO.add(new IndexProPhaseCountVO("绔e伐鎶曠敤闃舵", 0, "0.00", "绔�")); - List<IndexImpTypeCountVO> impTypeCountVO = new ArrayList<>(); - impTypeCountVO.add(new IndexImpTypeCountVO("涓�鑸」鐩�", 0, "0.00", "鏅�")); - impTypeCountVO.add(new IndexImpTypeCountVO("鍘块噸鐐归」鐩�", 0, "0.00", "鍘�")); - impTypeCountVO.add(new IndexImpTypeCountVO("甯傞噸鐐归」鐩�", 0, "0.00", "甯�")); - impTypeCountVO.add(new IndexImpTypeCountVO("鐪侀噸鐐归」鐩�", 0, "0.00", "鐪�")); - indexCountVO.setImpTypeCountVO(impTypeCountVO); + List<ProjectVO> projectVOS = baseMapper.homeCount(); + List<ProjectVO> reserve = new ArrayList<>(); + List<ProjectVO> previous = new ArrayList<>(); + List<ProjectVO> implement = new ArrayList<>(); + List<ProjectVO> finish = new ArrayList<>(); + List<ProjectVO> normal = new ArrayList<>(); + List<ProjectVO> province = new ArrayList<>(); + List<ProjectVO> city = new ArrayList<>(); + List<ProjectVO> county = new ArrayList<>(); + projectVOS.forEach(item -> { + if (ProjectCategoryEnum.RESERVE.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectStatus(), item.getProcessId() != null))) { + reserve.add(item); + } else if (ProjectCategoryEnum.PREVIOUS.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectStatus(), item.getProcessId() != null))) { + previous.add(item); + } else if (ProjectCategoryEnum.IMPLEMENT.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectStatus(), item.getProcessId() != null))) { + implement.add(item); + } else if (ProjectCategoryEnum.FINISH.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectStatus(), item.getProcessId() != null))) { + finish.add(item); + } + + if (ImportanceTypeEnum.PROVINCIAL_KEY.getType().equals(item.getImportanceType())) { + province.add(item); + } else if (ImportanceTypeEnum.SUINING_KEY.getType().equals(item.getImportanceType())) { + city.add(item); + } else if (ImportanceTypeEnum.SHEHONG_KEY.getType().equals(item.getImportanceType())) { + county.add(item); + } else if (ImportanceTypeEnum.NORMAL.getType().equals(item.getImportanceType())) { + normal.add(item); + } + }); + //鍗曚綅鍏堥粯璁や负鍏� + proPhaseCountVO.add(new IndexProPhaseCountVO("鍌ㄥ瑙勫垝闃舵", reserve.size(), reserve.stream(). + filter(item -> !StringUtils.isEmpty(item.getTotalInvestment())) + .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP)) + .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "鍌�")); + + proPhaseCountVO.add(new IndexProPhaseCountVO("椤圭洰鍓嶆湡闃舵", previous.size(), previous.stream(). + filter(item -> !StringUtils.isEmpty(item.getTotalInvestment())) + .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP)) + .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "鏂�")); + + proPhaseCountVO.add(new IndexProPhaseCountVO("瀹炴柦闃舵", implement.size(), implement.stream(). + filter(item -> !StringUtils.isEmpty(item.getTotalInvestment())) + .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP)) + .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "寤�")); + + proPhaseCountVO.add(new IndexProPhaseCountVO("绔e伐鎶曠敤闃舵", finish.size(), finish.stream(). + filter(item -> !StringUtils.isEmpty(item.getTotalInvestment())) + .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP)) + .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "绔�")); + indexCountVO.setProPhaseCountVO(proPhaseCountVO); + + List<IndexImpTypeCountVO> impTypeCountVO = new ArrayList<>(); + impTypeCountVO.add(new IndexImpTypeCountVO("涓�鑸」鐩�", province.size(), province.stream(). + filter(item -> !StringUtils.isEmpty(item.getTotalInvestment())) + .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP)) + .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "鏅�")); + + impTypeCountVO.add(new IndexImpTypeCountVO("鍘块噸鐐归」鐩�", city.size(), city.stream(). + filter(item -> !StringUtils.isEmpty(item.getTotalInvestment())) + .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP)) + .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "鍘�")); + + impTypeCountVO.add(new IndexImpTypeCountVO("甯傞噸鐐归」鐩�", county.size(), county.stream(). + filter(item -> !StringUtils.isEmpty(item.getTotalInvestment())) + .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP)) + .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "甯�")); + + impTypeCountVO.add(new IndexImpTypeCountVO("鐪侀噸鐐归」鐩�", normal.size(), normal.stream(). + filter(item -> !StringUtils.isEmpty(item.getTotalInvestment())) + .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP)) + .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "鐪�")); + indexCountVO.setImpTypeCountVO(impTypeCountVO); return indexCountVO; @@ -295,4 +386,30 @@ return Result.ok().data(false); } } + + @Override + public void export(HttpServletResponse response, ProjectExportQuery query) { + List<ProjectVO> data = baseMapper.selectProjectDetailByIds(query.getDataIdList()); + List<ProjectExcelTemplate> excelList = new ArrayList<>(); + //瀛楀吀浣滅炕璇� + data.forEach(item->{ + ProjectExcelTemplate excel = new ProjectExcelTemplate(); + BeanUtils.copyProperties(item,excel); + //椤圭洰闃舵 + excel.setProjectPhase(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectStatus(),item.getProcessId()!=null)); + excelList.add(excel); + }); + //琛ュ厖鏂囦欢鐨勫瓧娈� + Set<Integer> indexes = OutputExcelUtils.getSelectFields(query.getFieldList(), ProjectExcelTemplate.class); + //涓嶉渶瑕侀檮浠� + if(!query.getRequireFile()) { + try (ServletOutputStream outputStream = response.getOutputStream()) { + EasyExcel.write(outputStream, ProjectExcelTemplate.class).includeColumnIndexes(indexes).sheet("椤圭洰鍒楄〃").doWrite(excelList); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new BaseException("瀵煎嚭澶辫触锛�" + e.getMessage()); + } + } + //TODO锛氶渶瑕侀檮浠� + } } diff --git a/business/src/main/java/com/ycl/service/impl/ProjectPlanExamineRecordServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectPlanExamineRecordServiceImpl.java index d6086a7..c7eb055 100644 --- a/business/src/main/java/com/ycl/service/impl/ProjectPlanExamineRecordServiceImpl.java +++ b/business/src/main/java/com/ycl/service/impl/ProjectPlanExamineRecordServiceImpl.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; import com.ycl.common.utils.SecurityUtils; import com.ycl.domain.entity.ProjectPlanExamineRecord; +import com.ycl.domain.entity.ProjectPlanRecord; import com.ycl.domain.vo.DepartmentApprovalResponseVO; import com.ycl.mapper.ProjectPlanExamineRecordMapper; +import com.ycl.mapper.ProjectPlanRecordMapper; import com.ycl.service.ProjectPlanExamineRecordService; import com.ycl.common.base.Result; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -33,6 +35,7 @@ public class ProjectPlanExamineRecordServiceImpl extends ServiceImpl<ProjectPlanExamineRecordMapper, ProjectPlanExamineRecord> implements ProjectPlanExamineRecordService { private final ProjectPlanExamineRecordMapper projectPlanExamineRecordMapper; + private final ProjectPlanRecordMapper projectPlanRecordMapper; /** * 娣诲姞 @@ -150,10 +153,21 @@ @Override public Result saveExamine(ProjectPlanExamineRecordForm form) { - ProjectPlanExamineRecord projectPlanExamineRecord = ProjectPlanExamineRecordForm.getEntityByForm(form, null); - projectPlanExamineRecord.setDepartmentUserId(SecurityUtils.getUserId()); - projectPlanExamineRecord.setManagerUserId(SecurityUtils.getUserId()); - baseMapper.updateById(projectPlanExamineRecord); + // 鍒ゆ柇锛屽鏋滈兘鍚屾剰锛屽垯鐩存帴鏇存柊瀹℃壒璁板綍 + if (null != form.getDepartmentExamine() && null != form.getManageExamine() && form.getDepartmentExamine() == 0 && form.getManageExamine() == 0){ + ProjectPlanExamineRecord projectPlanExamineRecord = ProjectPlanExamineRecordForm.getEntityByForm(form, null); + projectPlanExamineRecord.setId(form.getId().longValue()); + projectPlanExamineRecord.setDepartmentUserId(SecurityUtils.getUserId()); + projectPlanExamineRecord.setManagerUserId(SecurityUtils.getUserId()); + baseMapper.updateById(projectPlanExamineRecord); + } + // 鍚﹀垯锛屽皢椤圭洰璁板綍璁剧疆涓烘湭涓婃姤锛屽苟灏嗚褰曢�昏緫鍒犻櫎 + new LambdaUpdateChainWrapper<>(projectPlanRecordMapper) + .eq(ProjectPlanRecord::getId, form.getProjectPlanRecordId()) + .set(ProjectPlanRecord::getReportStatus,1); + new LambdaUpdateChainWrapper<>(baseMapper) + .eq(ProjectPlanExamineRecord::getProjectPlanRecordId, form.getProjectPlanRecordId()) + .remove(); return Result.ok("鍥炲鎴愬姛"); } } diff --git a/business/src/main/java/com/ycl/service/impl/ProjectPlanInfoServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectPlanInfoServiceImpl.java index a202490..5c0b5fa 100644 --- a/business/src/main/java/com/ycl/service/impl/ProjectPlanInfoServiceImpl.java +++ b/business/src/main/java/com/ycl/service/impl/ProjectPlanInfoServiceImpl.java @@ -139,7 +139,10 @@ return Result.error("璇烽�夋嫨瑕佹坊鍔犵殑璁″垝椤�"); }} // 鍒犻櫎鍘熸湁璁板綍 - new LambdaUpdateChainWrapper<>(baseMapper).eq(ProjectPlanInfo::getProjectPlanRecordId, request.getProjectPlanRecordId()).remove(); + new LambdaUpdateChainWrapper<>(baseMapper) + .eq(ProjectPlanInfo::getProjectPlanRecordId, request.getProjectPlanRecordId()) + .set(ProjectPlanInfo::getDeleted, 1) + .update(); // 鎵归噺鎻掑叆鏂拌褰� List<ProjectPlanInfo> list = new ArrayList<>(); request.getAddList().forEach(item -> { @@ -149,15 +152,19 @@ projectPlanInfo.setProgressStatus(0); projectPlanInfo.setStartTime(item.getStartTime()); projectPlanInfo.setEndTime(item.getEndTime()); + projectPlanInfo.setDeleted(0); list.add(projectPlanInfo); }); - baseMapper.batchInsert(list); + list.stream().forEach(i -> { + baseMapper.insert(i); + }); // 鏇存柊璁″垝璁板綍鐨勬姇璧�,浠ュ強涓婃姤鐘舵�� new LambdaUpdateChainWrapper<>(projectPlanRecordMapper) .eq(ProjectPlanRecord::getId, request.getProjectPlanRecordId()) .set(ProjectPlanRecord::getActualInvest, request.getActualInvest()) .set(ProjectPlanRecord::getReportStatus, 0) .update(); + // 鏂板涓�鏉″鏍歌褰� ProjectPlanExamineRecord item = new ProjectPlanExamineRecord(); item.setProjectPlanRecordId(request.getProjectPlanRecordId().longValue()); @@ -166,8 +173,8 @@ item.setDeleted(0); list.stream().forEach(i -> { item.setProjectPlanInfoId(i.getId().longValue()); -// projectPlanExamineRecordMapper.insert(item); projectPlanExamineRecordMapper.insertOne(item); +// projectPlanExamineRecordMapper.insertOne(item); }); return Result.ok("娣诲姞鎴愬姛"); } diff --git a/business/src/main/java/com/ycl/service/impl/ProjectPlanProgressReportServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectPlanProgressReportServiceImpl.java index ae2e7e6..1a1384a 100644 --- a/business/src/main/java/com/ycl/service/impl/ProjectPlanProgressReportServiceImpl.java +++ b/business/src/main/java/com/ycl/service/impl/ProjectPlanProgressReportServiceImpl.java @@ -68,7 +68,6 @@ baseMapper.insertOne(projectPlanProgressReport); }else { projectPlanProgressReport.setId(form.getProgressReportId()); -// baseMapper.updateOne(projectPlanProgressReport); baseMapper.updateById(projectPlanProgressReport); } @@ -182,4 +181,32 @@ .collect(Collectors.toList()); return Result.ok().data(vos); } + + @Override + public Result examine(ProgressReportResponseVO form) { + // 鏇存柊瀹℃壒璁板綍 + ProjectPlanExamineRecord record = new ProjectPlanExamineRecord(); + record.setId(form.getExamineRecordId().longValue()); + record.setDepartmentExamine(form.getDepartmentExamine()); + record.setDepartmentApproval(form.getDepartmentApproval()); + record.setManageExamine(form.getManageExamine()); + record.setManageApproval(form.getManageApproval()); + projectPlanExamineRecordMapper.updateById(record); + + // 鏇存柊璁″垝椤圭姸鎬� + if (form.getDepartmentExamine() == 0 && form.getManageExamine() == 0){ + new LambdaUpdateChainWrapper<>(projectPlanInfoMapper) + .eq(ProjectPlanInfo::getId, form.getId()) + .set(ProjectPlanInfo::getProgressStatus, 3) + .update(); + }else { + new LambdaUpdateChainWrapper<>(projectPlanInfoMapper) + .eq(ProjectPlanInfo::getId, form.getId()) + .set(ProjectPlanInfo::getProgressStatus, 2) + .update(); + } + + + return Result.ok("瀹℃壒鎴愬姛"); + } } diff --git a/business/src/main/resources/mapper/ProjectInfoMapper.xml b/business/src/main/resources/mapper/ProjectInfoMapper.xml index 0da2550..4de8e29 100644 --- a/business/src/main/resources/mapper/ProjectInfoMapper.xml +++ b/business/src/main/resources/mapper/ProjectInfoMapper.xml @@ -149,8 +149,36 @@ <if test="query.reserveOrPrevious != null and query.reserveOrPrevious == 'previous'"> and TPP.process_instance_id is not null </if> + <if test="query.projectCategory == 3"> + and (TPI.project_status = 'working' or TPI.project_status = 'stop') + </if> </where> order by TPI.gmt_create </select> + <select id="homeCount" resultType="com.ycl.domain.vo.ProjectVO"> + SELECT TPI.*,TPIF.total_investment,TPP.process_instance_id as processId + FROM t_project_info TPI + LEFT JOIN t_project_investment_funding TPIF ON TPI.id = TPIF.project_id and TPIF.deleted = 0 + LEFT JOIN t_project_process TPP ON TPI.id = TPP.project_id and TPP.deleted = 0 + WHERE TPI.deleted = 0 + </select> + + <select id="selectProjectDetailByIds" resultType="com.ycl.domain.vo.ProjectVO"> + select * + from t_project_info TPI + left join t_project_investment_funding TPIF on TPI.id = TPIF.project_id and TPIF.deleted = 0 + left join t_project_investment_info TPII on TPI.id = TPII.project_id and TPII.deleted = 0 + left join t_project_unit_registration_info TPURI on TPI.id = TPURI.project_id and TPURI.deleted = 0 + left join t_project_investment_policy_compliance TPIPC on TPI.id = TPIPC.project_id and TPIPC.deleted = 0 + <where> + TPI.deleted =0 + <if test="dataIdList != null and dataIdList.size > 0"> + and TPI.id in + <foreach collection="dataIdList" item="id" separator="," open="(" close=")"> + #{id} + </foreach> + </if> + </where> + </select> </mapper> diff --git a/business/src/main/resources/mapper/ProjectPlanExamineRecordMapper.xml b/business/src/main/resources/mapper/ProjectPlanExamineRecordMapper.xml index 1f5eea5..2e939a8 100644 --- a/business/src/main/resources/mapper/ProjectPlanExamineRecordMapper.xml +++ b/business/src/main/resources/mapper/ProjectPlanExamineRecordMapper.xml @@ -145,6 +145,7 @@ WHERE project_plan_record_id = #{projectPlanRecordId} ) AS ranked WHERE rn = 1 AND ranked.deleted = 0 + Order by gmt_create DESC </select> <select id="getPlanLog" resultType="com.ycl.domain.vo.DepartmentApprovalResponseVO"> diff --git a/business/src/main/resources/mapper/ProjectPlanInfoMapper.xml b/business/src/main/resources/mapper/ProjectPlanInfoMapper.xml index ebc1fb4..eec02c6 100644 --- a/business/src/main/resources/mapper/ProjectPlanInfoMapper.xml +++ b/business/src/main/resources/mapper/ProjectPlanInfoMapper.xml @@ -9,12 +9,13 @@ <result column="progress_status" property="progressStatus" /> <result column="start_time" property="startTime" /> <result column="end_time" property="endTime" /> + <result column="deleted" property="deleted" /> </resultMap> <insert id="batchInsert" keyColumn="id" useGeneratedKeys="true" keyProperty="id"> - insert into t_project_plan_info(project_plan_record_id, title, progress_status, start_time, end_time) + insert into t_project_plan_info(project_plan_record_id, title, progress_status, start_time, end_time, deleted) values <foreach collection="list" item="item" separator=","> - (#{item.projectPlanRecordId}, #{item.title}, #{item.progressStatus}, #{item.startTime}, #{item.endTime}) + (#{item.projectPlanRecordId}, #{item.title}, #{item.progressStatus}, #{item.startTime}, #{item.endTime}, #{item.deleted}) </foreach> </insert> <insert id="insertOne"> diff --git a/business/src/main/resources/mapper/ProjectPlanProgressReportMapper.xml b/business/src/main/resources/mapper/ProjectPlanProgressReportMapper.xml index 5e7ddeb..8d2b74d 100644 --- a/business/src/main/resources/mapper/ProjectPlanProgressReportMapper.xml +++ b/business/src/main/resources/mapper/ProjectPlanProgressReportMapper.xml @@ -93,7 +93,6 @@ LEFT JOIN t_project_plan_progress_report AS pppr ON pppr.project_plan_info_id = ppi.id RIGHT JOIN t_project_plan_examine_record AS pper ON pper.project_plan_info_id = ppi.id WHERE ppi.id = #{id} - ORDER BY pper.gmt_create DESC LIMIT 1 </select> </mapper> diff --git a/common/src/main/java/com/ycl/common/enums/business/ImportanceTypeEnum.java b/common/src/main/java/com/ycl/common/enums/business/ImportanceTypeEnum.java new file mode 100644 index 0000000..056a218 --- /dev/null +++ b/common/src/main/java/com/ycl/common/enums/business/ImportanceTypeEnum.java @@ -0,0 +1,31 @@ +package com.ycl.common.enums.business; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; + +/** + * 閲嶇偣绫诲瀷鏋氫妇 + * + * @author锛歠lq + * @date锛�2024/11/27 18:21 + */ +@Getter +public enum ImportanceTypeEnum { + PROVINCIAL_KEY("provincial_key", "鐪侀噸鐐�"), + SUINING_KEY("suining_key","閬傚畞甯傞噸鐐�"), + //鍘块噸鐐� + SHEHONG_KEY("shehong_key","灏勬椽甯傞噸鐐�"), + NORMAL("normal", "涓�鑸�"); + + @EnumValue // 鏍囨槑璇ュ瓧娈靛瓨鍏ユ暟鎹簱 + private final String type; + + @JsonValue // 鏍囨槑鍦ㄨ浆JSON鏃朵娇鐢ㄨ瀛楁 + private final String desc; + + ImportanceTypeEnum(String type, String desc) { + this.type = type; + this.desc = desc; + } +} diff --git a/common/src/main/java/com/ycl/common/enums/business/ProjectStatusEnum.java b/common/src/main/java/com/ycl/common/enums/business/ProjectStatusEnum.java new file mode 100644 index 0000000..10e57fe --- /dev/null +++ b/common/src/main/java/com/ycl/common/enums/business/ProjectStatusEnum.java @@ -0,0 +1,30 @@ +package com.ycl.common.enums.business; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; + +/** + * 椤圭洰鐘舵�佹灇涓� + * + * @author锛歠lq + * @date锛�2024/11/27 18:21 + */ +@Getter +public enum ProjectStatusEnum { + PENDDING("pendding", "鏈紑宸�"), + WORKING("working","宸插紑宸�"), + FINISH("finish","宸茬宸�"), + STOP("stop", "鏆傚仠"); + + @EnumValue // 鏍囨槑璇ュ瓧娈靛瓨鍏ユ暟鎹簱 + private final String type; + + @JsonValue // 鏍囨槑鍦ㄨ浆JSON鏃朵娇鐢ㄨ瀛楁 + private final String desc; + + ProjectStatusEnum(String type, String desc) { + this.type = type; + this.desc = desc; + } +} diff --git a/common/src/main/java/com/ycl/common/enums/business/ProjectTypeEnum.java b/common/src/main/java/com/ycl/common/enums/business/ProjectTypeEnum.java new file mode 100644 index 0000000..2e1a9fa --- /dev/null +++ b/common/src/main/java/com/ycl/common/enums/business/ProjectTypeEnum.java @@ -0,0 +1,32 @@ +package com.ycl.common.enums.business; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; + +/** + * 椤圭洰绫诲瀷鏋氫妇 + * + * @author锛歠lq + * @date锛�2024/11/27 18:21 + */ +@Getter +public enum ProjectTypeEnum { + HOUSE("house", "鎴垮眿寤虹瓚"), + CITY("city","鍩庡競鍩虹璁炬柦"), + TRANSPORT("transport","浜ら�氳繍杈�"), + WATER("water", "姘村埄"), + ENERGY("energy", "鑳芥簮"), + NON_COAL_MINE("non_coal_mine", "闈炵叅鐭垮北"); + + @EnumValue // 鏍囨槑璇ュ瓧娈靛瓨鍏ユ暟鎹簱 + private final String type; + + @JsonValue // 鏍囨槑鍦ㄨ浆JSON鏃朵娇鐢ㄨ瀛楁 + private final String desc; + + ProjectTypeEnum(String type, String desc) { + this.type = type; + this.desc = desc; + } +} diff --git a/common/src/main/java/com/ycl/common/utils/excel/OutputExcelUtils.java b/common/src/main/java/com/ycl/common/utils/excel/OutputExcelUtils.java index 68d0bac..b1d2fb8 100644 --- a/common/src/main/java/com/ycl/common/utils/excel/OutputExcelUtils.java +++ b/common/src/main/java/com/ycl/common/utils/excel/OutputExcelUtils.java @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ZipUtil; import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder; import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import com.ycl.common.utils.excel.convert.ExcelBigNumberConvert; @@ -21,6 +22,7 @@ import java.lang.reflect.Field; import java.net.URLEncoder; import java.nio.file.Files; +import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -155,8 +157,10 @@ public static <T> @NotNull Set<Integer> getSelectFields(List<String> fieldNames, Class<T> clazz) { Set<Integer> selectedIndexes = new HashSet<>(); if (CollUtil.isNotEmpty(fieldNames)) { - // 鍙嶅皠鑾峰彇瀛楁灞炴�� - Field[] declaredFields = clazz.getDeclaredFields(); + // 鍙嶅皠鑾峰彇瀛楁灞炴��,杩欓噷鍙幏鍙杄asyExcel娉ㄨВ鐨勫瓧娈� + Field[] declaredFields = Arrays.stream(clazz.getDeclaredFields()) + .filter(field -> field.isAnnotationPresent(ExcelProperty.class)) + .toArray(Field[]::new); // // 鍖归厤闇�瑕佸鍏ョ殑瀛楁 for (int i = 0; i < declaredFields.length; i++) { if (fieldNames.contains(declaredFields[i].getName())) { -- Gitblit v1.8.0