From 5980a5fed8092f9866cb2f6a8b74abb7d631c018 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期日, 07 四月 2024 18:26:47 +0800 Subject: [PATCH] 平台端 当前季度数据接口 --- ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/CurrentQuarterController.java | 163 +++++++++ ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataFieldVO.java | 9 ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldVO.java | 6 ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataConfigVO.java | 8 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataServiceImpl.java | 198 ++++++++++- ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataVO.java | 2 ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/HistoryDataController.java | 18 + ruoyi-system/src/main/java/com/ruoyi/system/vo/CurrentFieldsAllVO.java | 25 + ruoyi-system/src/main/java/com/ruoyi/system/utils/FieldBuildUtil.java | 18 + ruoyi-system/src/main/resources/mapper/system/TbBasicDataMapper.xml | 36 ++ ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/CurrentQuarterController.java | 20 + ruoyi-system/src/main/java/com/ruoyi/system/dto/QuestionQueryDTO.java | 20 + ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldServiceImpl.java | 6 ruoyi-system/src/main/java/com/ruoyi/system/handler/CustomerHandler.java | 78 ++++ ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldCategoryDetailVO.java | 6 ruoyi-system/src/main/java/com/ruoyi/system/service/TbQuestionService.java | 10 ruoyi-system/src/main/java/com/ruoyi/system/dto/QuestionUpdDto.java | 28 + ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BasePage.java | 3 ruoyi-system/src/main/java/com/ruoyi/system/dto/BasicDataFieldDTO.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/vo/DeptVO.java | 8 ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataCategoryVO.java | 8 ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataConfigDetailVO.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataReportingVO.java | 9 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbBasicDataMapper.java | 5 ruoyi-system/src/main/java/com/ruoyi/system/service/TbBasicDataService.java | 11 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbQuestionServiceImpl.java | 27 + ruoyi-system/src/main/java/com/ruoyi/system/vo/CalculateVO.java | 7 ruoyi-system/src/main/java/com/ruoyi/system/dto/QuestionDTO.java | 24 + ruoyi-system/src/main/java/com/ruoyi/system/vo/CurrentFieldsVO.java | 43 ++ ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldCategoryVO.java | 8 ruoyi-system/src/main/java/com/ruoyi/system/dto/CurrentFieldsQueryDTO.java | 27 + ruoyi-common/src/main/java/com/ruoyi/common/utils/EasyExcelUtil.java | 49 ++ ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicDataField.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/vo/CurrentFieldsDetailVO.java | 42 ++ ruoyi-system/src/main/java/com/ruoyi/system/vo/QuestionVO.java | 30 + ruoyi-system/src/main/java/com/ruoyi/system/handler/SelectedSheetWriteHandler.java | 47 ++ 36 files changed, 959 insertions(+), 46 deletions(-) diff --git a/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/CurrentQuarterController.java b/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/CurrentQuarterController.java index 458aa5e..99a5d3e 100644 --- a/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/CurrentQuarterController.java +++ b/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/CurrentQuarterController.java @@ -28,6 +28,11 @@ private final TbBasicDataService tbBasicDataService; + /** + * 获取基础数据填报相关信息 + * + * @return R<BasicDataReportingVO> + */ @ApiOperation("获取基础数据填报相关信息") @GetMapping("/basic-fields") public R<BasicDataReportingVO> getBasicFields() { @@ -42,6 +47,11 @@ } } + /** + * 保存当前季度数据 + * @param dto 当前季度基础数据数据传输对象 + * @return R<Void> + */ @PostMapping("/save-basic-data") @ApiOperation("保存当前季度数据") public R<Void> saveBasicData(@RequestBody BasicDataDTO dto) { @@ -70,6 +80,11 @@ } } + /** + * 基础数据导入 + * @param file file + * @return R<Void> + */ @PostMapping("/import") @ApiOperation("基础数据导入") public R<Void> importBasicData(@RequestPart("file") MultipartFile file) { @@ -85,6 +100,11 @@ return R.ok(); } + /** + * 得分计算分页查询 + * @param query 得分计算条件查询对象 + * @return R<PageDTO < ScoreVO>> + */ @PostMapping("/page-score") @ApiOperation("得分计算分页查询") public R<PageDTO<ScoreVO>> pageScore(@RequestBody ScoreQuery query) { diff --git a/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/HistoryDataController.java b/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/HistoryDataController.java index 40ed183..b20c23a 100644 --- a/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/HistoryDataController.java +++ b/ruoyi-admin-dept/src/main/java/com/ruoyi/web/controller/api/HistoryDataController.java @@ -37,16 +37,27 @@ private final TbFieldService tbFieldService; private final TbScoreService tbScoreService; + /** + * 历史数据分页查询 + * + * @param dto 历史数据查询传输对象 + * @return R<PageDTO < BasicDataVO>> + */ @PostMapping("/list") @ApiOperation("历史数据分页查询") public R<PageDTO<BasicDataVO>> list(HistoryDataQueryDTO dto) { String areaCode = SecurityUtils.getLoginUser().getUser().getAreaCode(); Page<TbBasicData> page = tbBasicDataService.lambdaQuery().eq(TbBasicData::getDeptAreaCode, areaCode) .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED) - .page(new Page<TbBasicData>(dto.getPageNum(), dto.getPageSize())); + .page(new Page<>(dto.getPageNum(), dto.getPageSize())); return R.ok(PageDTO.of(page, BasicDataVO.class)); } + /** + * 字段查看 + * @param id 基础数据id + * @return R<BasicDataFieldVO> + */ @GetMapping("/history-fields") @ApiOperation("字段查看") @ApiImplicitParam(name = "id", value = "基础数据id", required = true, dataType = "int", paramType = "query", dataTypeClass = Long.class) @@ -54,6 +65,11 @@ return R.ok(tbFieldService.getHistoryFields(id)); } + /** + * 得分计算 + * @param query 得分计算条件查询对象 + * @return R<PageDTO < ScoreVO>> + */ @PostMapping("/history-score") @ApiOperation("得分计算") public R<PageDTO<ScoreVO>> getHistoryScore(@RequestBody HistoryScoreQuery query) { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/CurrentQuarterController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/CurrentQuarterController.java new file mode 100644 index 0000000..978b174 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/CurrentQuarterController.java @@ -0,0 +1,163 @@ +package com.ruoyi.web.controller.api; + +import com.ruoyi.common.basic.PageDTO; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.BeanUtils; +import com.ruoyi.system.domain.TbQuestion; +import com.ruoyi.system.dto.CurrentFieldsQueryDTO; +import com.ruoyi.system.dto.QuestionDTO; +import com.ruoyi.system.dto.QuestionQueryDTO; +import com.ruoyi.system.dto.QuestionUpdDto; +import com.ruoyi.system.service.TbBasicDataService; +import com.ruoyi.system.service.TbQuestionService; +import com.ruoyi.system.vo.CurrentFieldsAllVO; +import com.ruoyi.system.vo.CurrentFieldsDetailVO; +import com.ruoyi.system.vo.CurrentFieldsVO; +import com.ruoyi.system.vo.QuestionVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * @author mitao + * @date 2024/3/19 + */ +@Slf4j +@RestController +@RequestMapping("/current-quarter") +@RequiredArgsConstructor +@Api(tags = "当前季度数据相关接口") +public class CurrentQuarterController { + + private final TbBasicDataService tbBasicDataService; + private final TbQuestionService tbQuestionService; + + /** + * 获取基础数据填报相关信息 + * + * @return R<BasicDataReportingVO> + */ + @ApiOperation(value = "字段统计", notes = "字段统计") + @PostMapping("/fields-statics") + public R<PageDTO<CurrentFieldsVO>> fieldsStatics(@Validated @RequestBody CurrentFieldsQueryDTO dto) { + try { + return tbBasicDataService.fieldsStatics(dto); + } catch (Exception e) { + log.error("获取字段统计相关信息异常", e); + return R.fail(); + } + } + + /** + * 查看详情 + * + * @param id 基础数据id + * @return R<CurrentFieldsDetailVO> + */ + @GetMapping("/fields-details") + @ApiOperation(value = "查看详情", notes = "字段统计") + @ApiImplicitParam(name = "id", value = "基础数据id", required = true, dataType = "int", paramType = "query", dataTypeClass = Long.class) + public R<CurrentFieldsDetailVO> fieldsDetails(@RequestParam("id") Long id) { + try { + return tbBasicDataService.fieldsDetails(id); + } catch (Exception e) { + if (e instanceof ServiceException) { + return R.fail(e.getMessage()); + } + log.error("保存当前季度数据异常", e); + return R.fail(); + } + } + + /** + * 查看全部 + * + * @return R<CurrentFieldsAllVO> + */ + @GetMapping("/fields-statics-all") + @ApiOperation(value = "查看全部", notes = "字段统计") + public R<CurrentFieldsAllVO> fieldsStaticsAll() { + try { + return R.ok(tbBasicDataService.fieldsStaticsAll()); + } catch (Exception e) { + if (e instanceof ServiceException) { + return R.fail(e.getMessage()); + } + log.error("查看全部异常", e); + return R.fail(); + } + } + + /** + * 添加问题 + * + * @param dto 发现问题数据传输对象 + * @return R<Void> + */ + @PostMapping("add-question") + @ApiOperation(value = "添加问题", notes = "发现问题") + public R<Void> addQuestion(@Validated @RequestBody QuestionDTO dto) { + try { + tbQuestionService.addQuestion(dto); + return R.ok(); + } catch (Exception e) { + if (e instanceof ServiceException) { + return R.fail(e.getMessage()); + } + log.error("添加问题异常", e); + return R.fail(); + } + } + + @PostMapping("/edit-question") + @ApiOperation(value = "编辑问题", notes = "发现问题") + public R<Void> editQuestion(@Validated @RequestBody QuestionUpdDto dto) { + try { + tbQuestionService.editQuestion(dto); + return R.ok(); + } catch (Exception e) { + if (e instanceof ServiceException) { + return R.fail(e.getMessage()); + } + log.error("编辑问题异常", e); + return R.fail(); + } + } + + /** + * 分页查询问题 + * + * @param dto 发现问题分页数据传输对象 + * @return R<PageDTO < QuestionVO>> + */ + @PostMapping("/page-question") + @ApiOperation(value = "分页查询问题", notes = "发现问题") + public R<PageDTO<QuestionVO>> pageQuestion(@RequestBody QuestionQueryDTO dto) { + return R.ok(tbQuestionService.pageQuestion(dto)); + } + + /** + * 问题详情 + * + * @param id id + * @return R<QuestionDTO> + */ + @GetMapping("/detail-question") + @ApiOperation(value = "问题详情", notes = "发现问题") + public R<QuestionDTO> detailQuestion(@RequestParam("id") Long id) { + TbQuestion question = tbQuestionService.getById(id); + return R.ok(BeanUtils.copyBean(question, QuestionDTO.class)); + } + + @DeleteMapping("/delete") + @ApiOperation(value = "删除问题", notes = "发现问题") + public R<Void> delete(@RequestParam("id") Long id) { + tbQuestionService.removeById(id); + return R.ok(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BasePage.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BasePage.java index b7d844c..fd3d0c2 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BasePage.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BasePage.java @@ -3,6 +3,7 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import javax.validation.constraints.DecimalMin; import java.io.Serializable; /** @@ -17,11 +18,13 @@ * 分页参数,当前页码 */ @ApiModelProperty(value = "分页参数,当前页码") + @DecimalMin(value = "1", message = "当前页码最小为1") private Integer pageNum = 1; /** * 分页参数,每页数量 */ @ApiModelProperty(value = "分页参数,每页数量,默认为10") + @DecimalMin(value = "1", message = "每页数量最低为1") private Integer pageSize = 10; public Integer getPageNum() { diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/EasyExcelUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/EasyExcelUtil.java new file mode 100644 index 0000000..222222b --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/EasyExcelUtil.java @@ -0,0 +1,49 @@ +package com.ruoyi.common.utils; + +import com.alibaba.excel.write.metadata.style.WriteCellStyle; +import com.alibaba.excel.write.metadata.style.WriteFont; +import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.IndexedColors; +import org.apache.poi.ss.usermodel.VerticalAlignment; + +/** + * @author mitao + * @date 2024/4/2 + */ + +public class EasyExcelUtil { + public static HorizontalCellStyleStrategy getStyleStrategy() { + // 头的策略 + WriteCellStyle headWriteCellStyle = new WriteCellStyle(); + // 背景设置为灰色 + headWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE1.getIndex()); + WriteFont headWriteFont = new WriteFont(); + headWriteFont.setFontHeightInPoints((short) 12); + // 字体样式 + headWriteFont.setFontName("微软雅黑"); + headWriteCellStyle.setWriteFont(headWriteFont); + //自动换行 + headWriteCellStyle.setWrapped(false); + // 水平对齐方式 + headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); + // 垂直对齐方式 + headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); + + // 内容的策略 + WriteCellStyle contentWriteCellStyle = new WriteCellStyle(); + // 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.头默认了 FillPatternType所以可以不指定 +// contentWriteCellStyle.setFillPatternType(FillPatternType.SQUARES); + // 背景白色 + contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex()); + WriteFont contentWriteFont = new WriteFont(); + // 字体大小 + contentWriteFont.setFontHeightInPoints((short) 12); + // 字体样式 + contentWriteFont.setFontName("宋体"); + contentWriteCellStyle.setWriteFont(contentWriteFont); + // 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现 + return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle); + } + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicDataField.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicDataField.java index 18a93aa..523b5fd 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicDataField.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TbBasicDataField.java @@ -37,7 +37,7 @@ @TableField("field_id") private Long fieldId; - @ApiModelProperty(value = "字段名", notes = "fieldId = -1 转移支付规模 fieldId = -2 当期GDP") + @ApiModelProperty(value = "字段名", notes = "fieldId = -1 转移支付规模 fieldId = -2 当期GDP fieldId = -3 备注") @TableField("field_name") private String fieldName; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/BasicDataFieldDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/BasicDataFieldDTO.java index 9e40e64..6edebdd 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/BasicDataFieldDTO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/BasicDataFieldDTO.java @@ -12,7 +12,7 @@ @ApiModel(value = "当前季度基础数据字段数据传输对象") public class BasicDataFieldDTO { - @ApiModelProperty(value = "字段id") + @ApiModelProperty(value = "字段id", notes = "转移支付规模=-1,当期GDP=-2,备注=-3") private Long fieldId; @ApiModelProperty(value = "字段值") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/CurrentFieldsQueryDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/CurrentFieldsQueryDTO.java new file mode 100644 index 0000000..3bf01f3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/CurrentFieldsQueryDTO.java @@ -0,0 +1,27 @@ +package com.ruoyi.system.dto; + +import com.ruoyi.common.core.domain.BasePage; +import com.ruoyi.common.enums.ReportingStatusEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author mitao + * @date 2024/4/7 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "当前季度字段统计查询数据传输对象") +public class CurrentFieldsQueryDTO extends BasePage { + private static final long serialVersionUID = 3808984599047049282L; + @ApiModelProperty(value = "填报部门") + private String areaName; + @ApiModelProperty(value = "状态") + private ReportingStatusEnum status; + @ApiModelProperty(value = "负责人姓名") + private String personInCharge; + @ApiModelProperty(value = "负责人联系电话)") + private String phoneNumber; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/QuestionDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/QuestionDTO.java new file mode 100644 index 0000000..ef724ed --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/QuestionDTO.java @@ -0,0 +1,24 @@ +package com.ruoyi.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * @author mitao + * @date 2024/4/7 + */ +@Data +@ApiModel(value = "发现问题数据传输对象") +public class QuestionDTO implements Serializable { + private static final long serialVersionUID = -8074469734465858811L; + @ApiModelProperty(value = "问题标题") + @NotBlank(message = "问题标题不能为空") + private String title; + @ApiModelProperty(value = "问题内容") + @NotBlank(message = "问题内容不能为空") + private String content; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/QuestionQueryDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/QuestionQueryDTO.java new file mode 100644 index 0000000..66d08ad --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/QuestionQueryDTO.java @@ -0,0 +1,20 @@ +package com.ruoyi.system.dto; + +import com.ruoyi.common.core.domain.BasePage; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author mitao + * @date 2024/4/7 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "发现问题分页数据传输对象") +public class QuestionQueryDTO extends BasePage { + private static final long serialVersionUID = -7645166269898895715L; + @ApiModelProperty("问题标题") + private String title; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/QuestionUpdDto.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/QuestionUpdDto.java new file mode 100644 index 0000000..d22eedd --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/QuestionUpdDto.java @@ -0,0 +1,28 @@ +package com.ruoyi.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * @author mitao + * @date 2024/4/7 + */ +@Data +@ApiModel(value = "发现问题编辑数据传输对象") +public class QuestionUpdDto implements Serializable { + private static final long serialVersionUID = 6382858207794071957L; + @ApiModelProperty(value = "id") + @NotNull(message = "id不能为空") + private Long id; + @ApiModelProperty(value = "问题标题") + @NotBlank(message = "问题标题不能为空") + private String title; + @ApiModelProperty(value = "问题内容") + @NotBlank(message = "问题内容不能为空") + private String content; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/handler/CustomerHandler.java b/ruoyi-system/src/main/java/com/ruoyi/system/handler/CustomerHandler.java new file mode 100644 index 0000000..6f8b0dd --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/handler/CustomerHandler.java @@ -0,0 +1,78 @@ +package com.ruoyi.system.handler; + +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.Head; +import com.alibaba.excel.metadata.data.CellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; +import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import org.apache.poi.ss.usermodel.Cell; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class CustomerHandler extends AbstractColumnWidthStyleStrategy { + + private static final int MAX_COLUMN_WIDTH = 255; + //因为在自动列宽的过程中,有些设置地方让列宽显得紧凑,所以做出了个判断 + private static final int COLUMN_WIDTH = 20; + private Map<Integer, Map<Integer, Integer>> CACHE = new HashMap(8); + + public CustomerHandler() { + } + + @Override + protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<WriteCellData<?>> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) { + boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList); + if (needSetWidth) { + Map<Integer, Integer> maxColumnWidthMap = (Map) CACHE.get(writeSheetHolder.getSheetNo()); + if (maxColumnWidthMap == null) { + maxColumnWidthMap = new HashMap(16); + CACHE.put(writeSheetHolder.getSheetNo(), maxColumnWidthMap); + } + + Integer columnWidth = this.dataLength(cellDataList, cell, isHead); + if (columnWidth >= 0) { + if (columnWidth > MAX_COLUMN_WIDTH) { + columnWidth = MAX_COLUMN_WIDTH; + } else { + if (columnWidth < COLUMN_WIDTH) { + columnWidth = columnWidth * 2; + } + } + + Integer maxColumnWidth = (Integer) ((Map) maxColumnWidthMap).get(cell.getColumnIndex()); + if (maxColumnWidth == null || columnWidth > maxColumnWidth) { + ((Map) maxColumnWidthMap).put(cell.getColumnIndex(), columnWidth); + writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), columnWidth * 256); + } + } + } + } + + private Integer dataLength(List<WriteCellData<?>> cellDataList, Cell cell, Boolean isHead) { + if (isHead) { + return cell.getStringCellValue().getBytes().length; + } else { + CellData cellData = (CellData) cellDataList.get(0); + CellDataTypeEnum type = cellData.getType(); + if (type == null) { + return -1; + } else { + switch (type) { + case STRING: + return cellData.getStringValue().getBytes().length; + case BOOLEAN: + return cellData.getBooleanValue().toString().getBytes().length; + case NUMBER: + return cellData.getNumberValue().toString().getBytes().length; + default: + return -1; + } + } + } + } +} + diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/handler/SelectedSheetWriteHandler.java b/ruoyi-system/src/main/java/com/ruoyi/system/handler/SelectedSheetWriteHandler.java new file mode 100644 index 0000000..d21bc69 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/handler/SelectedSheetWriteHandler.java @@ -0,0 +1,47 @@ +package com.ruoyi.system.handler; + +import com.alibaba.excel.write.handler.SheetWriteHandler; +import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; +import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder; +import lombok.Data; +import org.apache.poi.ss.usermodel.DataValidation; +import org.apache.poi.ss.usermodel.DataValidationConstraint; +import org.apache.poi.ss.usermodel.DataValidationHelper; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.util.CellRangeAddressList; +import org.apache.poi.xssf.usermodel.XSSFDataValidation; + +import java.util.Map; + +@Data +public class SelectedSheetWriteHandler implements SheetWriteHandler { + private Map<Integer, String[]> selectedMap; + + public SelectedSheetWriteHandler(Map<Integer, String[]> selectedMap) { + this.selectedMap = selectedMap; + } + + @Override + public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { + //获取sheet页 + Sheet sheet = writeSheetHolder.getSheet(); + int firstRow = writeSheetHolder.getHead().get(0).size() + 1; + ///开始设置下拉框 + DataValidationHelper helper = sheet.getDataValidationHelper(); + for (Map.Entry<Integer, String[]> entry : selectedMap.entrySet()) { + /***起始行、终止行、起始列、终止列**/ + CellRangeAddressList addressList = new CellRangeAddressList(firstRow, firstRow, entry.getKey(), entry.getKey()); + /***设置下拉框数据**/ + DataValidationConstraint constraint = helper.createExplicitListConstraint(entry.getValue()); + DataValidation dataValidation = helper.createValidation(constraint, addressList); + /***处理Excel兼容性问题**/ + if (dataValidation instanceof XSSFDataValidation) { + dataValidation.setSuppressDropDownArrow(true); + dataValidation.setShowErrorBox(true); + } else { + dataValidation.setSuppressDropDownArrow(false); + } + sheet.addValidationData(dataValidation); + } + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbBasicDataMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbBasicDataMapper.java index c04cc53..ee6f9fe 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbBasicDataMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TbBasicDataMapper.java @@ -1,7 +1,11 @@ package com.ruoyi.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.system.domain.TbBasicData; +import com.ruoyi.system.dto.CurrentFieldsQueryDTO; +import com.ruoyi.system.vo.CurrentFieldsVO; +import org.apache.ibatis.annotations.Param; /** * <p> @@ -13,4 +17,5 @@ */ public interface TbBasicDataMapper extends BaseMapper<TbBasicData> { + Page<CurrentFieldsVO> fieldsStatics(@Param("page") Page<CurrentFieldsVO> page, @Param("dto") CurrentFieldsQueryDTO dto, @Param("nowQuarter") String nowQuarter); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbBasicDataService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbBasicDataService.java index 983022e..86bbc69 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbBasicDataService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbBasicDataService.java @@ -5,9 +5,9 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.system.domain.TbBasicData; import com.ruoyi.system.dto.BasicDataDTO; +import com.ruoyi.system.dto.CurrentFieldsQueryDTO; import com.ruoyi.system.query.ScoreQuery; -import com.ruoyi.system.vo.BasicDataReportingVO; -import com.ruoyi.system.vo.ScoreVO; +import com.ruoyi.system.vo.*; import org.springframework.web.multipart.MultipartFile; /** @@ -29,4 +29,11 @@ void importBasicData(MultipartFile file) throws Exception; PageDTO<ScoreVO> pageScore(ScoreQuery query); + + R<CurrentFieldsDetailVO> fieldsDetails(Long id); + + R<PageDTO<CurrentFieldsVO>> fieldsStatics(CurrentFieldsQueryDTO dto); + + CurrentFieldsAllVO fieldsStaticsAll(); + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbQuestionService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbQuestionService.java index 62dc2ee..fdf7f5f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbQuestionService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbQuestionService.java @@ -1,7 +1,12 @@ package com.ruoyi.system.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.basic.PageDTO; import com.ruoyi.system.domain.TbQuestion; +import com.ruoyi.system.dto.QuestionDTO; +import com.ruoyi.system.dto.QuestionQueryDTO; +import com.ruoyi.system.dto.QuestionUpdDto; +import com.ruoyi.system.vo.QuestionVO; /** * <p> @@ -13,4 +18,9 @@ */ public interface TbQuestionService extends IService<TbQuestion> { + void addQuestion(QuestionDTO dto); + + void editQuestion(QuestionUpdDto dto); + + PageDTO<QuestionVO> pageQuestion(QuestionQueryDTO dto); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataServiceImpl.java index 301ee1b..cbb4220 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbBasicDataServiceImpl.java @@ -15,6 +15,7 @@ import com.ruoyi.common.utils.*; import com.ruoyi.system.domain.*; import com.ruoyi.system.dto.BasicDataDTO; +import com.ruoyi.system.dto.CurrentFieldsQueryDTO; import com.ruoyi.system.handler.CustomerHandler; import com.ruoyi.system.handler.SelectedSheetWriteHandler; import com.ruoyi.system.listener.BasicDataListener; @@ -23,9 +24,7 @@ import com.ruoyi.system.query.ScoreQuery; import com.ruoyi.system.service.*; import com.ruoyi.system.utils.FieldBuildUtil; -import com.ruoyi.system.vo.BasicDataReportingVO; -import com.ruoyi.system.vo.FieldsTreeVO; -import com.ruoyi.system.vo.ScoreVO; +import com.ruoyi.system.vo.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -61,6 +60,19 @@ private final TbBasicDataConfigService tbBasicDataConfigService; private final TbBasicDataConfigDetailService tbBasicDataConfigDetailService; private final TbScoreService tbScoreService; + private final ISysUserService sysUserService; + + public static void setFieldValues(List<FieldsTreeVO> fields, Map<Long, TbBasicDataField> fieldMap) { + for (FieldsTreeVO field : fields) { + TbBasicDataField tbBasicDataField = fieldMap.get(field.getId()); + if (tbBasicDataField != null) { + field.setValue(FieldBuildUtil.formatNumberWithCommas(tbBasicDataField.getFieldValue())); + } + if (field.getChildren() != null && !field.getChildren().isEmpty()) { + setFieldValues(field.getChildren(), fieldMap); + } + } + } @Override public R<BasicDataReportingVO> getBasicFields() throws Exception { @@ -72,8 +84,8 @@ if (Objects.isNull(dept)) { throw new ServiceException(String.format("区划代码%s不存在", deptAreaCode)); } - Date date = new Date(); //当前所在季度 + Date date = new Date(); int quarterOfYear = DateUtils.getQuarterOfYear(date); String quarterOfYearStr = NumberDisplaceChineseUtil.numberToChinese(quarterOfYear); Map<String, Date> quarterDate = DateUtils.getQuarterDate(date); @@ -111,6 +123,10 @@ roots.add(fieldsTreeVO2); if (CollUtils.isNotEmpty(list)) { FieldBuildUtil.buildTreeFromTbFieldList(list,roots); + FieldsTreeVO remark = new FieldsTreeVO(); + remark.setId(-3L); + remark.setName("备注"); + roots.add(remark); vo.setFields(roots); } if (Objects.isNull(basicData)) { @@ -131,17 +147,6 @@ } } return R.ok(vo); - } - public static void setFieldValues(List<FieldsTreeVO> fields, Map<Long, TbBasicDataField> fieldMap) { - for (FieldsTreeVO field : fields) { - TbBasicDataField tbBasicDataField = fieldMap.get(field.getId()); - if (tbBasicDataField != null) { - field.setValue(tbBasicDataField.getFieldValue()); - } - if (field.getChildren() != null && !field.getChildren().isEmpty()) { - setFieldValues(field.getChildren(), fieldMap); - } - } } @Override @@ -176,10 +181,15 @@ transferPaymentScale.setFieldValue(tbBasicData.getTransferPaymentScale()); tbBasicDataFields.add(transferPaymentScale); TbBasicDataField currentGdp = new TbBasicDataField(); - transferPaymentScale.setBasicDataId(tbBasicData.getId()); - transferPaymentScale.setFieldId(-2L); - transferPaymentScale.setFieldValue(tbBasicData.getCurrentGdp()); + currentGdp.setBasicDataId(tbBasicData.getId()); + currentGdp.setFieldId(-2L); + currentGdp.setFieldValue(tbBasicData.getCurrentGdp()); tbBasicDataFields.add(currentGdp); + TbBasicDataField remark = new TbBasicDataField(); + remark.setBasicDataId(tbBasicData.getId()); + remark.setFieldId(-3L); + remark.setFieldValue(tbBasicData.getRemark()); + tbBasicDataFields.add(remark); //将该基础数据的动态字段数据全部删除 tbBasicDataFieldService.remove(Wrappers.<TbBasicDataField>lambdaQuery().eq(TbBasicDataField::getBasicDataId, tbBasicData.getId())); tbBasicDataFieldService.saveBatch(tbBasicDataFields); @@ -387,4 +397,156 @@ Page<ScoreVO> pageVO = tbScoreService.pageScore(query,page); return PageDTO.of(pageVO); } + + @Override + public R<CurrentFieldsDetailVO> fieldsDetails(Long id) { + // 从数据库中获取基本数据 + TbBasicData basicData = this.getById(id); + if (Objects.isNull(basicData)) { + throw new ServiceException("非法参数"); + } + CurrentFieldsDetailVO vo = BeanUtils.copyBean(basicData, CurrentFieldsDetailVO.class); + //查询用户信息 + sysUserService.lambdaQuery() + .eq(SysUser::getAreaCode, basicData.getDeptAreaCode()) + .eq(SysUser::getUserType, UserTypeEnum.DEPARTMENT.getCode()) + .oneOpt() + .ifPresent(item -> { + vo.setAreaName(item.getAreaName()); + vo.setPhoneNumber(item.getPhoneNumber()); + vo.setPersonInCharge(item.getPersonInCharge()); + }); + // 查询动态字段 + List<TbBasicDataField> basicDataFields = tbBasicDataFieldService.lambdaQuery().eq(TbBasicDataField::getBasicDataId, basicData.getId()).list(); + // 获取所有字段ID + Set<Long> fieldIds = basicDataFields.stream().map(TbBasicDataField::getFieldId).collect(Collectors.toSet()); + // 根据字段ID查询字段信息并构建字段ID到字段对象的映射 + Map<Long, TbField> fieldMap = tbFieldService.lambdaQuery() + .in(!fieldIds.isEmpty(), TbField::getId, fieldIds) + .list().stream() + .collect(Collectors.toMap(TbField::getId, e -> e)); + // 根节点 + List<FieldsTreeVO> root = new ArrayList<>(); + basicDataFields.stream().filter(item -> item.getFieldId() == -1).findFirst().ifPresent(item -> { + FieldsTreeVO fieldsTreeVO = new FieldsTreeVO(); + fieldsTreeVO.setId(item.getFieldId()); + fieldsTreeVO.setName("转移支付规模"); + fieldsTreeVO.setValue(item.getFieldValue()); + fieldsTreeVO.setCategory(Boolean.FALSE); + root.add(fieldsTreeVO); + }); + basicDataFields.stream().filter(item -> item.getFieldId() == -2).findFirst().ifPresent(item -> { + FieldsTreeVO fieldsTreeVO = new FieldsTreeVO(); + fieldsTreeVO.setId(item.getFieldId()); + fieldsTreeVO.setName("当期GDP"); + fieldsTreeVO.setValue(item.getFieldValue()); + fieldsTreeVO.setCategory(Boolean.FALSE); + root.add(fieldsTreeVO); + }); + FieldBuildUtil.buildTreeStructure(basicDataFields, fieldMap, root); + basicDataFields.stream().filter(item -> item.getFieldId() == -3).findFirst().ifPresent(item -> { + FieldsTreeVO fieldsTreeVO = new FieldsTreeVO(); + fieldsTreeVO.setId(item.getFieldId()); + fieldsTreeVO.setName("备注"); + fieldsTreeVO.setValue(item.getFieldValue()); + fieldsTreeVO.setCategory(Boolean.FALSE); + root.add(fieldsTreeVO); + }); + vo.setFields(root); + return R.ok(vo); + } + + @Override + public R<PageDTO<CurrentFieldsVO>> fieldsStatics(CurrentFieldsQueryDTO dto) { + Page<CurrentFieldsVO> page = new Page<>(dto.getPageNum(), dto.getPageSize()); + //当前所在季度 + Date date = new Date(); + int quarterOfYear = DateUtils.getQuarterOfYear(date); + String quarterOfYearStr = null; + try { + quarterOfYearStr = NumberDisplaceChineseUtil.numberToChinese(quarterOfYear); + LocalDate now = LocalDate.now(); + String nowQuarter = String.format("%s年%s季度", now.getYear(), quarterOfYearStr); + return R.ok(PageDTO.of(baseMapper.fieldsStatics(page, dto, nowQuarter))); + } catch (Exception e) { + log.error("查询失败", e); + return R.fail("查询失败"); + } + } + + @Override + public CurrentFieldsAllVO fieldsStaticsAll() { + CurrentFieldsAllVO vo = new CurrentFieldsAllVO(); + List<FieldsTreeVO> roots = new ArrayList<>(); + //获取表头 + FieldsTreeVO area = new FieldsTreeVO(); + area.setCategory(Boolean.FALSE); + area.setName("地区"); + FieldsTreeVO quarter = new FieldsTreeVO(); + quarter.setCategory(Boolean.FALSE); + quarter.setName("填报季度"); + FieldsTreeVO transferPaymentScale = new FieldsTreeVO(); + transferPaymentScale.setName("转移支付规模"); + FieldsTreeVO currentGdp = new FieldsTreeVO(); + currentGdp.setCategory(Boolean.FALSE); + currentGdp.setName("当期GDP"); + roots.add(area); + roots.add(quarter); + roots.add(currentGdp); + //当前所在季度 + Date date = new Date(); + int quarterOfYear = DateUtils.getQuarterOfYear(date); + try { + //查询当前季度填写字段 + List<TbField> fieldList = tbFieldService.lambdaQuery().eq(TbField::getStatus, ShowStatusEnum.SHOW).list(); + FieldBuildUtil.buildTreeFromTbFieldList(fieldList, roots); + FieldsTreeVO remark = new FieldsTreeVO(); + remark.setCategory(Boolean.FALSE); + remark.setName("备注"); + roots.add(remark); + vo.setFields(roots); + String quarterOfYearStr = NumberDisplaceChineseUtil.numberToChinese(quarterOfYear); + String nowQuarter = String.format("%s年%s季度", LocalDate.now().getYear(), quarterOfYearStr); + //查询上报的基础数据 + List<TbBasicData> basicDataList = this.lambdaQuery() + .eq(TbBasicData::getQuarter, nowQuarter) + .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED) + .list(); + if (CollUtils.isNotEmpty(basicDataList)) { + Set<String> areaCodeList = basicDataList.stream() + .map(TbBasicData::getDeptAreaCode) + .collect(Collectors.toSet()); + Map<String, SysUser> userMap = sysUserService.lambdaQuery() + .in(SysUser::getAreaCode, areaCodeList) + .list() + .stream() + .collect(Collectors.toMap(SysUser::getAreaCode, e -> e)); + Set<Long> basicDataIds = basicDataList.stream().map(TbBasicData::getId).collect(Collectors.toSet()); + Map<Long, TbBasicDataField> basicDataFieldMap = tbBasicDataFieldService.lambdaQuery() + .in(TbBasicDataField::getBasicDataId, basicDataIds).list().stream() + .collect(Collectors.toMap(TbBasicDataField::getFieldId, e -> e)); + //值 + List<Object> result = new ArrayList<>(); + for (TbBasicData tbBasicData : basicDataList) { + SysUser user = userMap.get(tbBasicData.getDeptAreaCode()); + List<String> item = new ArrayList<>(); + item.add(Objects.nonNull(user) ? user.getAreaName() : ""); + item.add(tbBasicData.getQuarter()); + item.add(tbBasicData.getTransferPaymentScale()); + item.add(tbBasicData.getCurrentGdp()); + for (TbField tbField : fieldList) { + TbBasicDataField tbBasicDataField = basicDataFieldMap.get(tbField.getId()); + item.add(Objects.nonNull(tbBasicDataField) ? FieldBuildUtil.formatNumberWithCommas(tbBasicDataField.getFieldValue()) : ""); + } + item.add(tbBasicData.getRemark()); + result.add(item); + } + vo.setValue(result); + } + return vo; + } catch (Exception e) { + log.error("查询失败", e); + throw new ServiceException("查询失败"); + } + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldServiceImpl.java index 12285e4..4534eac 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbFieldServiceImpl.java @@ -188,6 +188,12 @@ root.add(fieldsTreeVO); }); FieldBuildUtil.buildTreeStructure(basicDataFields, fieldMap, root); + FieldsTreeVO fieldsTreeVO = new FieldsTreeVO(); + fieldsTreeVO.setId(-3L); + fieldsTreeVO.setName("备注"); + fieldsTreeVO.setValue(vo.getRemark()); + fieldsTreeVO.setCategory(Boolean.FALSE); + root.add(fieldsTreeVO); vo.setFields(root); return vo; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbQuestionServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbQuestionServiceImpl.java index c1e6adb..d66f98e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbQuestionServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbQuestionServiceImpl.java @@ -1,9 +1,17 @@ package com.ruoyi.system.service.impl; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.basic.PageDTO; +import com.ruoyi.common.utils.BeanUtils; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.TbQuestion; +import com.ruoyi.system.dto.QuestionDTO; +import com.ruoyi.system.dto.QuestionQueryDTO; +import com.ruoyi.system.dto.QuestionUpdDto; import com.ruoyi.system.mapper.TbQuestionMapper; import com.ruoyi.system.service.TbQuestionService; +import com.ruoyi.system.vo.QuestionVO; import org.springframework.stereotype.Service; /** @@ -17,4 +25,23 @@ @Service public class TbQuestionServiceImpl extends ServiceImpl<TbQuestionMapper, TbQuestion> implements TbQuestionService { + @Override + public void addQuestion(QuestionDTO dto) { + TbQuestion tbQuestion = BeanUtils.copyBean(dto, TbQuestion.class); + this.save(tbQuestion); + } + + @Override + public void editQuestion(QuestionUpdDto dto) { + TbQuestion tbQuestion = BeanUtils.copyBean(dto, TbQuestion.class); + this.updateById(tbQuestion); + } + + @Override + public PageDTO<QuestionVO> pageQuestion(QuestionQueryDTO dto) { + Page<TbQuestion> page = this.lambdaQuery() + .like(StringUtils.isNotBlank(dto.getTitle()), TbQuestion::getTitle, dto.getTitle()) + .page(new Page<>(dto.getPageNum(), dto.getPageSize())); + return PageDTO.of(page, QuestionVO.class); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/FieldBuildUtil.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/FieldBuildUtil.java index 47fbb5a..ccd45b3 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/utils/FieldBuildUtil.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/FieldBuildUtil.java @@ -5,6 +5,7 @@ import com.ruoyi.system.domain.TbField; import com.ruoyi.system.vo.FieldsTreeVO; +import java.text.DecimalFormat; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -33,7 +34,7 @@ String levelThreeCategory = tbField.getLevelThreeCategory(); Long id = tbField.getId(); String fieldName = tbField.getFieldName(); - String fieldValue = item.getFieldValue(); + String fieldValue = formatNumberWithCommas(item.getFieldValue()); FieldsTreeVO field = new FieldsTreeVO(); field.setId(id); field.setName(fieldName); @@ -134,4 +135,19 @@ } } } + + /** + * 数值类型格式化 数字类型字符串,每三位增加逗号 + * + * @param fieldValue 整数类型的字符串 + * @return 格式化后的值 + */ + public static String formatNumberWithCommas(String fieldValue) { + if (fieldValue != null && fieldValue.matches("\\d+")) { + DecimalFormat df = new DecimalFormat("#,###"); + return df.format(Long.parseLong(fieldValue)); + } else { + return fieldValue; // 不满足条件时返回传入的值 + } + } } \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataCategoryVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataCategoryVO.java index eeb2db4..0dc0df9 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataCategoryVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataCategoryVO.java @@ -5,16 +5,20 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.io.Serializable; + /** * @author mitao * @date 2024/3/18 */ @Data @ApiModel(value="基础数据分类视图对象") -public class BasicDataCategoryVO { +public class BasicDataCategoryVO implements Serializable { + + private static final long serialVersionUID = -1547151291021868164L; @ApiModelProperty(value = "基础数据分类id") - private Integer id; + private Long id; @ApiModelProperty(value = "基础数据分类名称") private String basicDataCategoryName; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataConfigDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataConfigDetailVO.java index 6b4f245..1d7e4f9 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataConfigDetailVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataConfigDetailVO.java @@ -22,7 +22,7 @@ @ApiModelProperty(value = "id") @NotNull(message = "id不能为空") - private Integer id; + private Long id; @ApiModelProperty(value = "类型名称") @NotBlank(message = "类型名称不能为空") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataConfigVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataConfigVO.java index d2b32f4..4c628cb 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataConfigVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataConfigVO.java @@ -6,16 +6,20 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.io.Serializable; + /** * @author mitao * @date 2024/3/18 */ @Data @ApiModel(value="基础数据视图对象") -public class BasicDataConfigVO { +public class BasicDataConfigVO implements Serializable { + + private static final long serialVersionUID = -1181996283443136774L; @ApiModelProperty(value = "基础数据配置id") - private Integer id; + private Long id; @ApiModelProperty(value = "类型名称") private String typeName; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataFieldVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataFieldVO.java index 6417359..74a88a7 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataFieldVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataFieldVO.java @@ -1,12 +1,13 @@ package com.ruoyi.system.vo; +import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.enums.ReportingStatusEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; -import java.time.LocalDateTime; +import java.util.Date; import java.util.List; /** @@ -38,9 +39,11 @@ private List<FieldsTreeVO> fields; @ApiModelProperty(value = "首次填报时间") - private LocalDateTime createTime; + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date createTime; @ApiModelProperty(value = "填报完成时间",notes = "状态为已填报才展示") - private LocalDateTime updateTime; + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date updateTime; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataReportingVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataReportingVO.java index 71646a5..49117f9 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataReportingVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataReportingVO.java @@ -1,12 +1,13 @@ package com.ruoyi.system.vo; +import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.enums.ReportingStatusEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; -import java.time.LocalDateTime; +import java.util.Date; import java.util.List; /** @@ -29,10 +30,12 @@ private ReportingStatusEnum status; @ApiModelProperty(value = "首次填报时间") - private LocalDateTime createTime; + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date createTime; @ApiModelProperty(value = "填报完成时间",notes = "状态为已填报才展示") - private LocalDateTime updateTime; + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date updateTime; //1:未填报 2:数据缺失 3:已填报 @ApiModelProperty(value = "字段") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataVO.java index 9313a10..80a0642 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BasicDataVO.java @@ -17,7 +17,7 @@ private static final long serialVersionUID = -2405812660664664181L; @ApiModelProperty(value = "基础数据id") - private Integer id; + private Long id; @ApiModelProperty(value = "季度") private String quarter; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/CalculateVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/CalculateVO.java index ca2e23d..7af94d0 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/CalculateVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/CalculateVO.java @@ -1,7 +1,5 @@ package com.ruoyi.system.vo; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -15,12 +13,11 @@ private static final long serialVersionUID = 4439552435460575151L; @ApiModelProperty(value = "id") - @TableId(value = "id", type = IdType.AUTO) + private Long id; - private Integer id; @ApiModelProperty(value = "键") private String key; - + @ApiModelProperty(value = "值") private String value; } \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/CurrentFieldsAllVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/CurrentFieldsAllVO.java new file mode 100644 index 0000000..9f8aab2 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/CurrentFieldsAllVO.java @@ -0,0 +1,25 @@ +package com.ruoyi.system.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @author mitao + * @date 2024/4/7 + */ +@Data +@ApiModel(value = "字段统计查看全部视图对象") +public class CurrentFieldsAllVO implements Serializable { + + private static final long serialVersionUID = -4726257158363163342L; + + @ApiModelProperty("表头") + private List<FieldsTreeVO> fields; + + @ApiModelProperty("值") + private List<Object> value; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/CurrentFieldsDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/CurrentFieldsDetailVO.java new file mode 100644 index 0000000..3a74279 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/CurrentFieldsDetailVO.java @@ -0,0 +1,42 @@ +package com.ruoyi.system.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.enums.ReportingStatusEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * @author mitao + * @date 2024/3/19 + */ +@Data +@ApiModel(value = "字段统计详情视图对象") +public class CurrentFieldsDetailVO implements Serializable { + + private static final long serialVersionUID = -4453903771078396720L; + + @ApiModelProperty(value = "填报部门") + private String areaName; + + @ApiModelProperty(value = "负责人姓名") + private String personInCharge; + + @ApiModelProperty(value = "负责人联系电话)") + private String phoneNumber; + + @ApiModelProperty(value = "填报时间") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date createTime; + + @ApiModelProperty(value = "状态") + private ReportingStatusEnum status; + + @ApiModelProperty(value = "动态字段") + private List<FieldsTreeVO> fields; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/CurrentFieldsVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/CurrentFieldsVO.java new file mode 100644 index 0000000..1fc2bba --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/CurrentFieldsVO.java @@ -0,0 +1,43 @@ +package com.ruoyi.system.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.enums.ReportingStatusEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author mitao + * @date 2024/4/7 + */ +@Data +@ApiModel(value = "当前季度数据-字段统计视图对象") +public class CurrentFieldsVO implements Serializable { + + private static final long serialVersionUID = 8678843789669990102L; + + @ApiModelProperty(value = "基础数据id") + private Long id; + + @ApiModelProperty(value = "季度") + private String quarter; + + @ApiModelProperty(value = "填报部门") + private String areaName; + + @ApiModelProperty(value = "负责人姓名") + private String personInCharge; + + @ApiModelProperty(value = "负责人联系电话)") + private String phoneNumber; + + @ApiModelProperty(value = "填报时间") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date createTime; + + @ApiModelProperty(value = "状态") + private ReportingStatusEnum status; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/DeptVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DeptVO.java index f897a53..205c52f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/DeptVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DeptVO.java @@ -5,16 +5,20 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.io.Serializable; + /** * @author mitao * @date 2024/3/13 */ @Data @ApiModel(value="部门VO") -public class DeptVO { +public class DeptVO implements Serializable { + + private static final long serialVersionUID = 459136043020691805L; @ApiModelProperty(value = "部门id") - private Integer userId; + private Long userId; @ApiModelProperty(value = "部门地区") private String areaName; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldCategoryDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldCategoryDetailVO.java index 2acfb9f..e0fa685 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldCategoryDetailVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldCategoryDetailVO.java @@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -13,7 +14,10 @@ */ @Data @ApiModel(value="字段分类详情视图对象") -public class FieldCategoryDetailVO { +public class FieldCategoryDetailVO implements Serializable { + + private static final long serialVersionUID = -9032349498306349055L; + @ApiModelProperty(value = "分类id") private Long id; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldCategoryVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldCategoryVO.java index 9e04e0e..41a0f0d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldCategoryVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldCategoryVO.java @@ -5,14 +5,20 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.io.Serializable; + /** * @author mitao * @date 2024/3/14 */ @Data @ApiModel(value="字段分类视图对象") -public class FieldCategoryVO { +public class FieldCategoryVO implements Serializable { + + private static final long serialVersionUID = 6367532315341833784L; + @ApiModelProperty(value = "分类id") + private Long id; @ApiModelProperty(value = "状态(0=展示 1=隐藏)") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldVO.java index 9672e7f..e7c8671 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/FieldVO.java @@ -6,13 +6,17 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.io.Serializable; + /** * @author mitao * @date 2024/3/15 */ @Data @ApiModel(value="字段视图对象") -public class FieldVO { +public class FieldVO implements Serializable { + + private static final long serialVersionUID = -8474307057802966503L; @ApiModelProperty(value = "字段id") private Long id; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/QuestionVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/QuestionVO.java new file mode 100644 index 0000000..c5f5188 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/QuestionVO.java @@ -0,0 +1,30 @@ +package com.ruoyi.system.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author mitao + * @date 2024/4/7 + */ +public class QuestionVO implements Serializable { + + private static final long serialVersionUID = -7560198211729183682L; + + @ApiModelProperty(value = "问题id") + private Long id; + + @ApiModelProperty(value = "问题标题") + private String title; + + @ApiModelProperty(value = "问题内容") + private String content; + + @ApiModelProperty(value = "填报时间") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date createTime; + +} diff --git a/ruoyi-system/src/main/resources/mapper/system/TbBasicDataMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TbBasicDataMapper.xml index fb126df..b3738eb 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TbBasicDataMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TbBasicDataMapper.xml @@ -22,5 +22,41 @@ <sql id="Base_Column_List"> id, quarter, dept_id, transfer_payment_scale, current_gdp, remark, status, del_flag, create_by, create_time, update_by, update_time </sql> + <select id="fieldsStatics" resultType="com.ruoyi.system.vo.CurrentFieldsVO"> + SELECT + su.area_name, + IF(tbd.`quarter` IS NULL, CONCAT(YEAR(NOW()), '年', + CASE + WHEN MONTH(NOW()) BETWEEN 1 AND 3 THEN '一季度' + WHEN MONTH(NOW()) BETWEEN 4 AND 6 THEN '二季度' + WHEN MONTH(NOW()) BETWEEN 7 AND 9 THEN '三季度' + ELSE '四季度' + END), tbd.`quarter`) AS `quarter`, + su.person_in_charge, + su.phone_number, + tbd.create_time, + COALESCE(tbd.`status`, 1) AS `status` + FROM + (SELECT * FROM sys_user WHERE user_type = 2) su + LEFT JOIN + (SELECT * FROM tb_basic_data WHERE `quarter` = #{nowQuarter}) tbd ON su.area_code = tbd.dept_area_code + <where> + <if test="nowQuarter != null and nowQuarter !=''"> + tbd.quarter LIKE CONCAT('%',#{nowQuarter},'%') + </if> + <if test="dto.areaName != null and dto.areaName !=''"> + su.area_name LIKE CONCAT('%',#{dto.areaName},'%') + </if> + <if test="dto.status != null and dto.status !=''"> + tbd.status = #{dto.status} + </if> + <if test="dto.personInCharge != null and dto.personInCharge !=''"> + su.person_in_charge LIKE CONCAT('%',#{dto.personInCharge},'%') + </if> + <if test="dto.phoneNumber != null and dto.phoneNumber != ''"> + su.phone_number LIKE CONCAT('%',#{dto.phoneNumber},'%') + </if> + </where> + </select> </mapper> -- Gitblit v1.7.1