| | |
| | | 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; |
| | | import com.ruoyi.system.mapper.TbBasicDataMapper; |
| | | import com.ruoyi.system.mapper.TbDeptMapper; |
| | | import com.ruoyi.system.query.CurrentFieldsQuery; |
| | | import com.ruoyi.system.query.ScoreCalculateQuery; |
| | | import com.ruoyi.system.query.ScoreQuery; |
| | | import com.ruoyi.system.service.*; |
| | | import com.ruoyi.system.utils.FieldBuildUtil; |
| | |
| | | if (Objects.isNull(dept)) { |
| | | throw new ServiceException(String.format("区划代码%s不存在", deptAreaCode)); |
| | | } |
| | | //当前所在季度 |
| | | Date date = new Date(); |
| | | int quarterOfYear = DateUtils.getQuarterOfYear(date); |
| | | String quarterOfYearStr = NumberDisplaceChineseUtil.numberToChinese(quarterOfYear); |
| | | Map<String, Date> quarterDate = DateUtils.getQuarterDate(date); |
| | | //当前季度开始 |
| | | Date quarterStart = quarterDate.get("first"); |
| | |
| | | LocalDate quarterStartLocalDate = instant.atZone(ZoneId.systemDefault()).toLocalDate(); |
| | | LocalDate fifteenDaysLimit = quarterStartLocalDate.plusDays(15); |
| | | LocalDate now = LocalDate.now(); |
| | | vo.setQuarter(String.format("%s年%s季度",now.getYear(),quarterOfYearStr)); |
| | | vo.setQuarter(DateUtils.getNowQuarter()); |
| | | vo.setStatus(ReportingStatusEnum.UNFILLED); |
| | | //如果当前时间不在规定范围内:季度初1-15号 |
| | | if (now.isBefore(quarterStartLocalDate) || now.isAfter(fifteenDaysLimit)) { |
| | | return R.ok(vo,"请于季度初1-15号上传季度数据。"); |
| | | return R.ok(vo, "请于季度初1-15号上传季度数据。"); |
| | | } |
| | | //查询是否有当前季度的填报记录 |
| | | TbBasicData basicData = this.getOne(Wrappers.<TbBasicData>lambdaQuery() |
| | | .eq(TbBasicData::getDeptAreaCode, dept.getAreaCode()) |
| | | .between(TbBasicData::getCreateTime, quarterStart,quarterEnd)); |
| | | .between(TbBasicData::getCreateTime, quarterStart, quarterEnd)); |
| | | //查询需要填写的字段 |
| | | List<TbField> list = tbFieldService.lambdaQuery().eq(TbField::getStatus, ShowStatusEnum.SHOW).list(); |
| | | List<FieldsTreeVO> roots = new ArrayList<>(); |
| | |
| | | roots.add(fieldsTreeVO); |
| | | roots.add(fieldsTreeVO2); |
| | | if (CollUtils.isNotEmpty(list)) { |
| | | FieldBuildUtil.buildTreeFromTbFieldList(list,roots); |
| | | FieldBuildUtil.buildTreeFromTbFieldList(list, roots); |
| | | FieldsTreeVO remark = new FieldsTreeVO(); |
| | | remark.setId(-3L); |
| | | remark.setName("备注"); |
| | |
| | | vo.setFields(roots); |
| | | } |
| | | if (Objects.isNull(basicData)) { |
| | | vo.setQuarter(String.format("%s年%s季度",now.getYear(),quarterOfYearStr)); |
| | | vo.setQuarter(DateUtils.getNowQuarter()); |
| | | vo.setStatus(ReportingStatusEnum.UNFILLED); |
| | | return R.ok(vo); |
| | | }else { |
| | | } else { |
| | | vo.setStatus(basicData.getStatus()); |
| | | //查询已填报数据 包含数据缺失和已填报 |
| | | List<TbBasicDataField> basicDataFields = tbBasicDataFieldService.lambdaQuery() |
| | |
| | | Set<Long> fieldIds = fieldList.stream().map(TbField::getId).collect(Collectors.toSet()); |
| | | //用户填写的动态字段 |
| | | Set<Long> deptFieldIds = tbBasicDataFields.stream().map(TbBasicDataField::getFieldId).collect(Collectors.toSet()); |
| | | boolean flag = deptFieldIds.containsAll(fieldIds) && (StringUtils.isNotEmpty(dto.getTransferPaymentScale())&& StringUtils.isNotEmpty(dto.getCurrentGdp())); |
| | | boolean flag = deptFieldIds.containsAll(fieldIds) && (StringUtils.isNotEmpty(dto.getTransferPaymentScale()) && StringUtils.isNotEmpty(dto.getCurrentGdp())); |
| | | if (flag) { |
| | | tbBasicData.setStatus(ReportingStatusEnum.FILLED); |
| | | this.updateById(tbBasicData); |
| | |
| | | |
| | | /** |
| | | * 根据字段名获取该字段下标 |
| | | * @param list 表头 |
| | | * |
| | | * @param list 表头 |
| | | * @param value 字段名 |
| | | * @return 下标 |
| | | */ |
| | |
| | | private List<List<Object>> dataList(List<TbField> list) throws Exception { |
| | | LoginUser loginUser = SecurityUtils.getLoginUser(); |
| | | String areaName = loginUser.getUser().getAreaName(); |
| | | |
| | | //当前所在季度 |
| | | int quarterOfYear = DateUtils.getQuarterOfYear(new Date()); |
| | | String quarterOfYearStr = NumberDisplaceChineseUtil.numberToChinese(quarterOfYear); |
| | | List<List<Object>> excellist = new ArrayList<List<Object>>(); |
| | | List<List<String>> head = head(list); |
| | | List<Object> columnNo = Lists.newArrayList("栏号"); |
| | |
| | | columnNo.add(String.valueOf(i)); |
| | | } |
| | | excellist.add(columnNo); |
| | | excellist.add(Lists.newArrayList(areaName, String.format("%s季度",quarterOfYearStr))); |
| | | excellist.add(Lists.newArrayList(areaName, DateUtils.getNowQuarter())); |
| | | return excellist; |
| | | } |
| | | |
| | |
| | | headTitles.add(Lists.newArrayList("填报季度")); |
| | | headTitles.add(Lists.newArrayList("转移支付规模")); |
| | | headTitles.add(Lists.newArrayList("当期GDP")); |
| | | list.forEach(item ->{ |
| | | 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(levelOneCategory, StringUtils.isBlank(levelTwoCategory) ? fieldName : levelTwoCategory, StringUtils.isBlank(levelThreeCategory) ? fieldName : levelThreeCategory, fieldName)); |
| | | }); |
| | | headTitles.add(Lists.newArrayList("备注")); |
| | | return headTitles; |
| | |
| | | String areaCode = loginUser.getUser().getAreaCode(); |
| | | //查询需要填写的动态字段 |
| | | List<TbField> fieldList = tbFieldService.lambdaQuery().eq(TbField::getStatus, ShowStatusEnum.SHOW).list(); |
| | | EasyExcel.read(file.getInputStream(), new BasicDataListener(this,fieldList, |
| | | tbFieldService,areaCode,tbBasicDataFieldService,tbBasicDataConfigService, |
| | | tbBasicDataConfigDetailService,tbScoreService)).sheet().doRead(); |
| | | EasyExcel.read(file.getInputStream(), new BasicDataListener(this, fieldList, |
| | | tbFieldService, areaCode, tbBasicDataFieldService, tbBasicDataConfigService, |
| | | tbBasicDataConfigDetailService, tbScoreService)).sheet().doRead(); |
| | | } |
| | | |
| | | private void calculateScore(TbBasicData tbBasicData) { |
| | |
| | | //查询是否有当前季度的填报记录 |
| | | TbBasicData basicData = this.getOne(Wrappers.<TbBasicData>lambdaQuery() |
| | | .eq(TbBasicData::getDeptAreaCode, areaCode) |
| | | .between(TbBasicData::getCreateTime, quarterStart,quarterEnd)); |
| | | .between(TbBasicData::getCreateTime, quarterStart, quarterEnd)); |
| | | if (Objects.isNull(basicData)) { |
| | | return PageDTO.empty(page); |
| | | } |
| | | query.setBasicDataId(basicData.getId()); |
| | | //查询对应的基础数据配置 |
| | | Page<ScoreVO> pageVO = tbScoreService.pageScore(query,page); |
| | | Page<ScoreVO> pageVO = tbScoreService.pageScore(query, page); |
| | | return PageDTO.of(pageVO); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | @Override |
| | | public R<PageDTO<CurrentFieldsVO>> fieldsStatics(CurrentFieldsQueryDTO dto) { |
| | | public R<PageDTO<CurrentFieldsVO>> fieldsStatics(CurrentFieldsQuery dto) throws Exception { |
| | | 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("查询失败"); |
| | | } |
| | | String nowQuarter = DateUtils.getNowQuarter(); |
| | | return R.ok(PageDTO.of(baseMapper.fieldsStatics(page, dto))); |
| | | } |
| | | |
| | | @Override |
| | | public CurrentFieldsAllVO fieldsStaticsAll() { |
| | | public CurrentFieldsAllVO fieldsStaticsAll() throws Exception { |
| | | CurrentFieldsAllVO vo = new CurrentFieldsAllVO(); |
| | | List<FieldsTreeVO> roots = new ArrayList<>(); |
| | | //获取表头 |
| | |
| | | currentGdp.setName("当期GDP"); |
| | | roots.add(area); |
| | | roots.add(quarter); |
| | | roots.add(transferPaymentScale); |
| | | roots.add(currentGdp); |
| | | //查询当前季度填写字段 |
| | | 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 nowQuarter = DateUtils.getNowQuarter(); |
| | | //查询上报的基础数据 |
| | | 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; |
| | | } |
| | | |
| | | @Override |
| | | public R<PageDTO<CurrentFieldsVO>> historyFieldsStatics(CurrentFieldsQuery dto) { |
| | | Page<CurrentFieldsVO> page = new Page<>(dto.getPageNum(), dto.getPageSize()); |
| | | //当前所在季度 |
| | | 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); |
| | | return R.ok(PageDTO.of(baseMapper.fieldsStatics(page, dto))); |
| | | } |
| | | |
| | | @Override |
| | | public PageDTO<ScoreCalculateVO> scoreCalculatePage(ScoreCalculateQuery query) { |
| | | Page<ScoreCalculateVO> page = new Page<>(query.getPageNum(), query.getPageSize()); |
| | | Page<ScoreCalculateVO> pageVO = tbBasicDataConfigService.scoreCalculatePage(query, page); |
| | | return PageDTO.of(pageVO); |
| | | } |
| | | |
| | | @Override |
| | | public CurrentFieldsAllVO fieldsStaticsAll(String quarterStr) { |
| | | 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(transferPaymentScale); |
| | | roots.add(currentGdp); |
| | | List<TbBasicData> basicDataList = this.lambdaQuery() |
| | | .eq(TbBasicData::getQuarter, quarterStr) |
| | | .eq(TbBasicData::getStatus, ReportingStatusEnum.FILLED) |
| | | .list(); |
| | | if (CollUtils.isNotEmpty(basicDataList)) { |
| | | throw new ServiceException("非法参数"); |
| | | } |
| | | Long basicDataId = basicDataList.get(0).getId(); |
| | | Set<Long> fieldIds = tbBasicDataFieldService.lambdaQuery() |
| | | .eq(TbBasicDataField::getBasicDataId, basicDataId) |
| | | .ne(TbBasicDataField::getFieldId, -1L) |
| | | .ne(TbBasicDataField::getFieldId, -2L) |
| | | .list().stream().map(TbBasicDataField::getFieldId).collect(Collectors.toSet()); |
| | | List<TbField> fieldList = tbFieldService.lambdaQuery().in(TbField::getId, fieldIds).list(); |
| | | if (CollUtils.isEmpty(fieldList)) { |
| | | 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("查询失败"); |
| | | } |
| | | FieldBuildUtil.buildTreeFromTbFieldList(fieldList, roots); |
| | | FieldsTreeVO remark = new FieldsTreeVO(); |
| | | remark.setCategory(Boolean.FALSE); |
| | | remark.setName("备注"); |
| | | roots.add(remark); |
| | | vo.setFields(roots); |
| | | 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; |
| | | } |
| | | } |