mitao
2024-07-09 07c83c163675e24252de05d029cef2eab046e583
finance-system/src/main/java/com/finance/system/service/impl/TbBasicDataServiceImpl.java
@@ -48,6 +48,7 @@
import com.finance.system.query.CurrentFieldsQuery;
import com.finance.system.query.ScoreCalculateQuery;
import com.finance.system.query.ScoreQuery;
import com.finance.system.service.AsyncService;
import com.finance.system.service.ISysUserService;
import com.finance.system.service.TbBasicDataConfigDetailService;
import com.finance.system.service.TbBasicDataConfigService;
@@ -114,7 +115,7 @@
    private final TbOperLogService tbOperLogService;
    private final TbDataScreenScoreService tbDataScreenScoreService;
    private final TbDataScreenConfigService tbDataScreenConfigService;
    private final AsyncService asyncService;
    public static void setFieldValues(
            List<FieldsTreeVO> fields, Map<Long, TbBasicDataField> fieldMap) {
@@ -231,7 +232,7 @@
            tbBasicData.setId(basicDataOpt.get().getId());
            tbBasicData.setDeptAreaCode(areaCode);
            this.updateById(tbBasicData);
            //查询该基础数据的动态字端
            // 查询该基础数据的动态字端
            List<TbBasicDataField> originFields = tbBasicDataFieldService.lambdaQuery()
                    .eq(TbBasicDataField::getBasicDataId, tbBasicData.getId()).list();
            CompletableFuture.runAsync(
@@ -468,12 +469,13 @@
        LocalDate quarterStartLocalDate = instant.atZone(ZoneId.systemDefault()).toLocalDate();
        LocalDate fifteenDaysLimit = quarterStartLocalDate.plusDays(14);
        LocalDate now = LocalDate.now();
        //TODO
        // TODO
      /*  if (now.isBefore(quarterStartLocalDate) || now.isAfter(fifteenDaysLimit)) {
            throw new ServiceException("请于季度初1-15号上传季度数据。");
        }*/
        LoginUser loginUser = SecurityUtils.getLoginUser();
        String areaCode = loginUser.getUser().getAreaCode();
        String nowQuarter = DateUtils.getNowQuarter();
        EasyExcel.read(
                        file.getInputStream(),
                        new BasicDataListener(
@@ -483,7 +485,9 @@
                                tbBasicDataFieldService,
                                tbBasicDataConfigService,
                                tbBasicDataConfigDetailService,
                                tbScoreService, tbDataScreenScoreService, tbDataScreenConfigService))
                                tbScoreService, tbDataScreenScoreService, nowQuarter,
                                tbDataScreenConfigService,
                                asyncService))
                .sheet()
                .headRowNumber(0)
                .doRead();
@@ -880,7 +884,7 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void importData(MultipartFile file, String quarter) throws IOException {
        //校验季度
        // 校验季度
        Date quarterDate = DateUtils.getQuarterDate(quarter);
        Map<String, Date> quarterMap = DateUtils.getQuarterDate(new Date());
@@ -900,8 +904,9 @@
                                tbBasicDataConfigService,
                                tbBasicDataConfigDetailService,
                                tbScoreService, sysUserService, quarter, tbDataScreenScoreService,
                                tbDataScreenConfigService))
                                tbDataScreenConfigService, asyncService))
                .sheet()
                .headRowNumber(0)
                .doRead();
    }
@@ -913,49 +918,49 @@
        response.setHeader(
                "Content-disposition",
                "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".xlsx");
        //季度数据,用于反查字段
        // 季度数据,用于反查字段
        List<TbBasicData> tbBasicDataList = this.lambdaQuery()
                .in(TbBasicData::getQuarter, quarterList)
                .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED)
                .groupBy(TbBasicData::getQuarter).list();
        //符合导出条件的基础数据
        // 符合导出条件的基础数据
        List<TbBasicData> tbBasicDataListAll = this.lambdaQuery()
                .in(TbBasicData::getQuarter, quarterList)
                .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED)
                .list();
        //基础数据id列表
        // 基础数据id列表
        Set<Long> basicDataIdList = tbBasicDataListAll.stream().map(TbBasicData::getId)
                .collect(Collectors.toSet());
        //涉及到的部门编码
        // 涉及到的部门编码
        Set<String> userAreaCodeList = tbBasicDataListAll.stream().map(TbBasicData::getDeptAreaCode)
                .collect(Collectors.toSet());
        //用户信息map
        // 用户信息map
        Map<String, SysUser> userMap = sysUserService.lambdaQuery()
                .in(SysUser::getAreaCode, userAreaCodeList).list().stream()
                .collect(Collectors.toMap(SysUser::getAreaCode, e -> e));
        //基础数据对应的字段值列表
        // 基础数据对应的字段值列表
        List<TbBasicDataField> tbBasicDataFieldList = tbBasicDataFieldService.lambdaQuery()
                .in(TbBasicDataField::getBasicDataId, basicDataIdList)
                .list();
        //构建Excel写对象
        // 构建Excel写对象
        try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
                .registerWriteHandler(new CustomCellWriteHandler())
                .registerWriteHandler(EasyExcelUtil.getStyleStrategy()).build()) {
            WriteSheet writeSheet;
            //遍历季度基础数据
            // 遍历季度基础数据
            for (TbBasicData tbBasicData : tbBasicDataList) {
                //该季度的动态字段id列表
                // 该季度的动态字段id列表
                Set<Long> fieldIdList = tbBasicDataFieldList.stream()
                        .filter(item -> tbBasicData.getId().equals(item.getBasicDataId()))
                        .map(TbBasicDataField::getFieldId)
                        .collect(Collectors.toSet());
                //字段列表
                // 字段列表
                List<TbField> fieldList = tbFieldService.lambdaQuery()
                        .in(TbField::getId, fieldIdList)
                        .list();
                //表头
                // 表头
                List<List<String>> head = head(fieldList);
                //过滤基础数据为遍历元素的季度
                // 过滤基础数据为遍历元素的季度
                List<TbBasicData> list = tbBasicDataListAll.stream()
                        .filter(item -> tbBasicData.getQuarter().equals(item.getQuarter()))
                        .collect(Collectors.toList());
@@ -973,17 +978,17 @@
    private List<List<Object>> dataList(List<TbField> fieldList, List<TbBasicData> list,
            List<TbBasicDataField> tbBasicDataFieldList, Map<String, SysUser> userMap,
            List<List<String>> head) {
        //所有数据集合
        // 所有数据集合
        List<List<Object>> excellist = new ArrayList<>();
        //构建栏号行
        // 构建栏号行
        List<Object> columnNo = Lists.newArrayList("栏号");
        for (int i = 1; i < head.size(); i++) {
            columnNo.add(String.valueOf(i));
        }
        excellist.add(columnNo);
        //动态字段数据行
        // 动态字段数据行
        for (TbBasicData tbBasicData : list) {
            //转换为map,方便遍历的时候取
            // 转换为map,方便遍历的时候取
            Map<Long, TbBasicDataField> basicDataFieldMap = tbBasicDataFieldList.stream()
                    .filter(item -> tbBasicData.getId().equals(item.getBasicDataId()))
                    .collect(Collectors.toMap(TbBasicDataField::getFieldId, e -> e));
@@ -1069,14 +1074,14 @@
        if (Objects.isNull(dto)) {
            return;
        }
        //查询基础数据
        // 查询基础数据
        TbBasicData basicData = this.getById(dto.getId());
        if (Objects.isNull(basicData)) {
            throw new ServiceException("非法参数");
        }
        String nowQuarter = DateUtils.getNowQuarter();
        this.updateById(basicData);
        //查询该基础数据的动态字端
        // 查询该基础数据的动态字端
        List<TbBasicDataField> originFields = tbBasicDataFieldService.lambdaQuery()
                .eq(TbBasicDataField::getBasicDataId, basicData.getId()).list();
        Set<Long> fieldIdList = originFields.stream().map(TbBasicDataField::getFieldId)