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) { 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) { ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/CurrentQuarterController.java
New file @@ -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(); } } 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() { ruoyi-common/src/main/java/com/ruoyi/common/utils/EasyExcelUtil.java
New file @@ -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); } } 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; 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 = "字段值") ruoyi-system/src/main/java/com/ruoyi/system/dto/CurrentFieldsQueryDTO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/dto/QuestionDTO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/dto/QuestionQueryDTO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/dto/QuestionUpdDto.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/handler/CustomerHandler.java
New file @@ -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; } } } } } ruoyi-system/src/main/java/com/ruoyi/system/handler/SelectedSheetWriteHandler.java
New file @@ -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); } } } 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); } 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(); } 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); } 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("查询失败"); } } } 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; } 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); } } 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; // 不满足条件时返回传入的值 } } } 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; 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 = "类型名称不能为空") 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; 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; } 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 = "字段") 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; 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,9 +13,8 @@ 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; ruoyi-system/src/main/java/com/ruoyi/system/vo/CurrentFieldsAllVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/CurrentFieldsDetailVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/CurrentFieldsVO.java
New file @@ -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; } 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; 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; 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=隐藏)") 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; ruoyi-system/src/main/java/com/ruoyi/system/vo/QuestionVO.java
New file @@ -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; } 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>