| | |
| | | package com.ruoyi.system.service.impl; |
| | | |
| | | import com.alibaba.excel.EasyExcel; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.google.common.collect.Lists; |
| | | import com.ruoyi.common.basic.PageDTO; |
| | | import com.ruoyi.common.core.domain.entity.SysUser; |
| | | import com.ruoyi.common.enums.FieldInputTypeEnum; |
| | | import com.ruoyi.common.enums.FieldTypeEnum; |
| | | import com.ruoyi.common.enums.ShowStatusEnum; |
| | | import com.ruoyi.common.enums.UserTypeEnum; |
| | | import com.ruoyi.common.exception.ServiceException; |
| | | import com.ruoyi.common.utils.BeanUtils; |
| | | import com.ruoyi.common.utils.CollUtils; |
| | | import com.ruoyi.common.utils.DateUtils; |
| | | import com.ruoyi.common.utils.EasyExcelUtil; |
| | | import com.ruoyi.common.utils.SecurityUtils; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.system.domain.*; |
| | | import com.ruoyi.system.domain.TbBasicData; |
| | | import com.ruoyi.system.domain.TbBasicDataConfig; |
| | | import com.ruoyi.system.domain.TbBasicDataField; |
| | | import com.ruoyi.system.domain.TbField; |
| | | import com.ruoyi.system.domain.TbFieldCategory; |
| | | import com.ruoyi.system.dto.FieldDTO; |
| | | import com.ruoyi.system.dto.ShowHideDTO; |
| | | import com.ruoyi.system.dto.update.FieldUpdateDTO; |
| | | import com.ruoyi.system.handler.CustomerHandler; |
| | | import com.ruoyi.system.handler.SelectedSheetWriteHandler; |
| | | import com.ruoyi.system.mapper.TbBasicDataMapper; |
| | | import com.ruoyi.system.mapper.TbFieldMapper; |
| | | import com.ruoyi.system.query.FieldQuery; |
| | | import com.ruoyi.system.service.ISysUserService; |
| | | import com.ruoyi.system.service.TbBasicDataConfigService; |
| | | import com.ruoyi.system.service.TbBasicDataFieldService; |
| | | import com.ruoyi.system.service.TbFieldCategoryService; |
| | |
| | | import com.ruoyi.system.vo.BasicDataFieldVO; |
| | | import com.ruoyi.system.vo.FieldVO; |
| | | import com.ruoyi.system.vo.FieldsTreeVO; |
| | | import java.net.URLEncoder; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | import java.util.Set; |
| | | import java.util.concurrent.CompletableFuture; |
| | | import java.util.stream.Collectors; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.*; |
| | | import java.util.concurrent.CompletableFuture; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | @Slf4j |
| | | @Service |
| | | @RequiredArgsConstructor |
| | | public class TbFieldServiceImpl extends ServiceImpl<TbFieldMapper, TbField> implements TbFieldService { |
| | | public class TbFieldServiceImpl extends ServiceImpl<TbFieldMapper, TbField> implements |
| | | TbFieldService { |
| | | |
| | | private final TbFieldCategoryService tbFieldCategoryService; |
| | | private final TbBasicDataConfigService tbBasicDataConfigService; |
| | | private final TbBasicDataMapper tbBasicDataMapper; |
| | | private final TbBasicDataFieldService tbBasicDataFieldService; |
| | | private final HttpServletResponse response; |
| | | private final ISysUserService sysUserService; |
| | | |
| | | @Override |
| | | public void add(FieldDTO dto) { |
| | |
| | | if (FieldTypeEnum.TEXT.equals(fieldType)) { |
| | | if (StringUtils.isNull(dto.getTextInputType())) { |
| | | throw new ServiceException("输入类型不能为空"); |
| | | } else if (FieldInputTypeEnum.FIXED_CONTENT.equals(dto.getTextInputType()) && StringUtils.isBlank(dto.getTextContent())) { |
| | | } else if (FieldInputTypeEnum.FIXED_CONTENT.equals(dto.getTextInputType()) |
| | | && StringUtils.isBlank(dto.getTextContent())) { |
| | | throw new ServiceException("内容设置不能为空"); |
| | | } |
| | | } |
| | |
| | | tbField.setLevelTwoCategory(category2.getFieldCategoryName()); |
| | | } |
| | | if (StringUtils.isNotNull(dto.getLevelThreeCategoryId())) { |
| | | TbFieldCategory category3 = tbFieldCategoryService.getById(dto.getLevelThreeCategoryId()); |
| | | TbFieldCategory category3 = tbFieldCategoryService.getById( |
| | | dto.getLevelThreeCategoryId()); |
| | | tbField.setLevelThreeCategory(category3.getFieldCategoryName()); |
| | | } |
| | | this.save(tbField); |
| | |
| | | throw new ServiceException("非法参数"); |
| | | } |
| | | //隐藏字段 |
| | | this.lambdaUpdate().set(TbField::getStatus, dto.getStatus()).eq(TbField::getId, dto.getId()).update(); |
| | | this.lambdaUpdate().set(TbField::getStatus, dto.getStatus()).eq(TbField::getId, dto.getId()) |
| | | .update(); |
| | | //异步隐藏基础数据配置 |
| | | CompletableFuture.runAsync(() -> handleDataConfig(dto, field)); |
| | | } |
| | | |
| | | private void handleDataConfig(ShowHideDTO dto, TbField field) { |
| | | log.info("======子线程执行handleDataConfig{}",Thread.currentThread().getName() ); |
| | | List<TbBasicDataConfig> list = tbBasicDataConfigService.lambdaQuery().eq(TbBasicDataConfig::getStatus, ShowStatusEnum.SHOW.getCode()).list(); |
| | | List<TbBasicDataConfig> list = tbBasicDataConfigService.lambdaQuery() |
| | | .eq(TbBasicDataConfig::getStatus, ShowStatusEnum.SHOW.getCode()).list(); |
| | | if (CollUtils.isNotEmpty(list)) { |
| | | List<Long> ids = list.stream().map(config -> { |
| | | String fieldIdStr = config.getFieldIdStr(); |
| | |
| | | } |
| | | return null; |
| | | }).collect(Collectors.toList()); |
| | | tbBasicDataConfigService.lambdaUpdate().set(TbBasicDataConfig::getStatus, dto.getStatus()).in(TbBasicDataConfig::getId, ids).update(); |
| | | tbBasicDataConfigService.lambdaUpdate() |
| | | .set(TbBasicDataConfig::getStatus, dto.getStatus()) |
| | | .in(TbBasicDataConfig::getId, ids).update(); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public PageDTO<FieldVO> queryPage(FieldQuery query) { |
| | | Page<TbField> page = this.lambdaQuery() |
| | | .like(StringUtils.isNotEmpty(query.getFieldName()), TbField::getFieldName, query.getFieldName()) |
| | | .like(StringUtils.isNotEmpty(query.getLevelOneCategory()), TbField::getLevelOneCategory, query.getLevelOneCategory()) |
| | | .like(StringUtils.isNotEmpty(query.getLevelTwoCategory()), TbField::getLevelTwoCategory, query.getLevelTwoCategory()) |
| | | .like(StringUtils.isNotEmpty(query.getLevelThreeCategory()), TbField::getLevelThreeCategory, query.getLevelThreeCategory()) |
| | | .like(StringUtils.isNotEmpty(query.getFieldName()), TbField::getFieldName, |
| | | query.getFieldName()) |
| | | .like(StringUtils.isNotEmpty(query.getLevelOneCategory()), |
| | | TbField::getLevelOneCategory, query.getLevelOneCategory()) |
| | | .like(StringUtils.isNotEmpty(query.getLevelTwoCategory()), |
| | | TbField::getLevelTwoCategory, query.getLevelTwoCategory()) |
| | | .like(StringUtils.isNotEmpty(query.getLevelThreeCategory()), |
| | | TbField::getLevelThreeCategory, query.getLevelThreeCategory()) |
| | | .eq(StringUtils.isNotNull(query.getStatus()), TbField::getStatus, query.getStatus()) |
| | | .eq(StringUtils.isNotNull(query.getFieldType()), TbField::getFieldType, query.getFieldType()) |
| | | .eq(StringUtils.isNotNull(query.getFieldType()), TbField::getFieldType, |
| | | query.getFieldType()) |
| | | .orderByDesc(TbField::getCreateTime) |
| | | .page(new Page<>(query.getPageNum(), query.getPageSize())); |
| | | if (CollUtils.isEmpty(page.getRecords())) { |
| | |
| | | |
| | | @Override |
| | | public String influencedData(Long id) { |
| | | List<TbBasicDataConfig> list = tbBasicDataConfigService.lambdaQuery().eq(TbBasicDataConfig::getStatus, ShowStatusEnum.SHOW).list(); |
| | | List<TbBasicDataConfig> list = tbBasicDataConfigService.lambdaQuery() |
| | | .eq(TbBasicDataConfig::getStatus, ShowStatusEnum.SHOW).list(); |
| | | if (CollUtils.isEmpty(list)) { |
| | | return ""; |
| | | } |
| | |
| | | } |
| | | BasicDataFieldVO vo = BeanUtils.copyBean(basicData, BasicDataFieldVO.class); |
| | | // 查询动态字段 |
| | | List<TbBasicDataField> basicDataFields = tbBasicDataFieldService.lambdaQuery().eq(TbBasicDataField::getBasicDataId, basicData.getId()).list(); |
| | | List<TbBasicDataField> basicDataFields = tbBasicDataFieldService.lambdaQuery() |
| | | .eq(TbBasicDataField::getBasicDataId, basicData.getId()).list(); |
| | | // 获取所有字段ID |
| | | Set<Long> fieldIds = basicDataFields.stream().map(TbBasicDataField::getFieldId).collect(Collectors.toSet()); |
| | | Set<Long> fieldIds = basicDataFields.stream().map(TbBasicDataField::getFieldId) |
| | | .collect(Collectors.toSet()); |
| | | // 根据字段ID查询字段信息并构建字段ID到字段对象的映射 |
| | | Map<Long, TbField> fieldMap = this.lambdaQuery().in(!fieldIds.isEmpty(), TbField::getId, fieldIds).list().stream().collect(Collectors.toMap(TbField::getId, e -> e)); |
| | | Map<Long, TbField> fieldMap = this.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 ->{ |
| | | basicDataFields.stream().filter(item -> item.getFieldId() == -1).findFirst() |
| | | .ifPresent(item -> { |
| | | FieldsTreeVO fieldsTreeVO = new FieldsTreeVO(); |
| | | fieldsTreeVO.setId(item.getFieldId()); |
| | | fieldsTreeVO.setName("转移支付规模"); |
| | |
| | | fieldsTreeVO.setCategory(Boolean.FALSE); |
| | | root.add(fieldsTreeVO); |
| | | }); |
| | | basicDataFields.stream().filter(item -> item.getFieldId()==-2).findFirst().ifPresent(item ->{ |
| | | basicDataFields.stream().filter(item -> item.getFieldId() == -2).findFirst() |
| | | .ifPresent(item -> { |
| | | FieldsTreeVO fieldsTreeVO = new FieldsTreeVO(); |
| | | fieldsTreeVO.setId(item.getFieldId()); |
| | | fieldsTreeVO.setName("当期GDP"); |
| | |
| | | vo.setFields(root); |
| | | return vo; |
| | | } |
| | | |
| | | @Override |
| | | public void downloadImportTemplate() throws Exception { |
| | | response.setContentType("application/vnd.ms-excel"); |
| | | response.setCharacterEncoding("utf-8"); |
| | | String fileName = "地方财政运行及“三保”情况统计表"; |
| | | response.setHeader( |
| | | "Content-disposition", |
| | | "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".xlsx"); |
| | | SysUser user = SecurityUtils.getLoginUser().getUser(); |
| | | // 查询需要填写的动态字段 |
| | | List<TbField> list = |
| | | this.lambdaQuery().eq(TbField::getStatus, ShowStatusEnum.SHOW).list(); |
| | | List<List<String>> head = head(list); |
| | | List<TbField> collect = |
| | | list.stream() |
| | | .filter(item -> FieldTypeEnum.TEXT.equals(item.getFieldType())) |
| | | .filter(item -> FieldInputTypeEnum.FIXED_CONTENT.equals( |
| | | item.getTextInputType())) |
| | | .collect(Collectors.toList()); |
| | | Map<Integer, String[]> selectedMap = new HashMap<>(); |
| | | if (CollUtils.isNotEmpty(collect)) { |
| | | selectedMap = new HashMap<>(); |
| | | for (TbField tbField : collect) { |
| | | int outerListIndex = getOuterListIndex(head, tbField.getFieldName()); |
| | | String[] selectStr = tbField.getTextContent().split(","); |
| | | selectedMap.put(outerListIndex, selectStr); |
| | | } |
| | | } |
| | | boolean isPlatform = UserTypeEnum.PLATFORM.equals(user.getUserType()); |
| | | //默认生成下拉框的行数为1 |
| | | int rows = 1; |
| | | if (isPlatform) { |
| | | //查询所有的地区 |
| | | List<SysUser> userList = sysUserService.lambdaQuery() |
| | | .eq(SysUser::getUserType, UserTypeEnum.DEPARTMENT).list(); |
| | | String[] userNameArr = userList.stream().map(SysUser::getAreaName) |
| | | .toArray(String[]::new); |
| | | selectedMap.put(0, userNameArr); |
| | | //生成下拉框的行数为部门的数量 |
| | | rows = userList.size(); |
| | | } |
| | | // 这里需要设置不关闭流 |
| | | EasyExcel.write(response.getOutputStream()) |
| | | .head(head) |
| | | .autoCloseStream(Boolean.TRUE) |
| | | .sheet("模板") |
| | | .registerWriteHandler(new SelectedSheetWriteHandler(selectedMap, rows)) |
| | | .registerWriteHandler(new CustomerHandler()) |
| | | .registerWriteHandler(EasyExcelUtil.getStyleStrategy()) |
| | | .doWrite(dataList(list, user)); |
| | | } |
| | | |
| | | /** |
| | | * 根据字段名获取该字段下标 |
| | | * |
| | | * @param list 表头 |
| | | * @param value 字段名 |
| | | * @return 下标 |
| | | */ |
| | | public int getOuterListIndex(List<List<String>> list, String value) { |
| | | for (int i = 0; i < list.size(); i++) { |
| | | if (list.get(i).contains(value)) { |
| | | return i; |
| | | } |
| | | } |
| | | return -1; // 返回-1表示未找到 |
| | | } |
| | | |
| | | private List<List<Object>> dataList(List<TbField> list, SysUser user) throws Exception { |
| | | String areaName = ""; |
| | | boolean isDept = UserTypeEnum.DEPARTMENT.equals(user.getUserType()); |
| | | areaName = isDept ? user.getAreaName() : areaName; |
| | | List<List<Object>> excellist = new ArrayList<>(); |
| | | List<List<String>> head = head(list); |
| | | List<Object> columnNo = Lists.newArrayList("栏号"); |
| | | for (int i = 1; i < head.size(); i++) { |
| | | columnNo.add(String.valueOf(i)); |
| | | } |
| | | excellist.add(columnNo); |
| | | excellist.add(Lists.newArrayList(areaName, isDept ? DateUtils.getNowQuarter() : "")); |
| | | return excellist; |
| | | } |
| | | |
| | | private List<List<String>> head(List<TbField> list) { |
| | | List<List<String>> headTitles = Lists.newArrayList(); |
| | | // 固定字段 |
| | | headTitles.add(Lists.newArrayList("地区")); |
| | | headTitles.add(Lists.newArrayList("填报季度")); |
| | | headTitles.add(Lists.newArrayList("转移支付规模")); |
| | | headTitles.add(Lists.newArrayList("当期GDP")); |
| | | list.forEach( |
| | | item -> { |
| | | String levelOneCategory = item.getLevelOneCategory(); |
| | | String levelTwoCategory = item.getLevelTwoCategory(); |
| | | String levelThreeCategory = item.getLevelThreeCategory(); |
| | | String fieldName = item.getFieldName(); |
| | | headTitles.add( |
| | | Lists.newArrayList( |
| | | levelOneCategory, |
| | | StringUtils.isBlank(levelTwoCategory) ? fieldName |
| | | : levelTwoCategory, |
| | | StringUtils.isBlank(levelThreeCategory) ? fieldName |
| | | : levelThreeCategory, |
| | | fieldName)); |
| | | }); |
| | | headTitles.add(Lists.newArrayList("备注")); |
| | | return headTitles; |
| | | } |
| | | } |