| | |
| | | package com.ruoyi.system.service.impl; |
| | | |
| | | import cn.hutool.core.date.DateUtil; |
| | | import com.alibaba.excel.EasyExcel; |
| | | import com.alibaba.excel.ExcelWriter; |
| | | import com.alibaba.excel.write.metadata.WriteSheet; |
| | |
| | | import com.ruoyi.common.enums.BusinessType; |
| | | import com.ruoyi.common.enums.CalculateTypeEnum; |
| | | import com.ruoyi.common.enums.DataScreenConfigEnum; |
| | | import com.ruoyi.common.enums.FieldInputTypeEnum; |
| | | import com.ruoyi.common.enums.FieldTypeEnum; |
| | | import com.ruoyi.common.enums.ReportingStatusEnum; |
| | | import com.ruoyi.common.enums.ShowStatusEnum; |
| | | import com.ruoyi.common.enums.UserTypeEnum; |
| | |
| | | import com.ruoyi.system.dto.BasicDataDTO; |
| | | import com.ruoyi.system.dto.BasicDataFieldDTO; |
| | | import com.ruoyi.system.dto.CalculateItemDTO; |
| | | import com.ruoyi.system.dto.update.BasicDataUpdDTO; |
| | | import com.ruoyi.system.handler.CustomCellWriteHandler; |
| | | import com.ruoyi.system.listener.BasicDataListener; |
| | | import com.ruoyi.system.listener.HistoryDataListener; |
| | |
| | | TbBasicDataField tbBasicDataField = fieldMap.get(field.getId()); |
| | | if (tbBasicDataField != null) { |
| | | field.setValue( |
| | | FieldBuildUtil.formatNumberWithCommas(tbBasicDataField.getFieldValue())); |
| | | tbBasicDataField.getFieldValue()); |
| | | } |
| | | if (field.getChildren() != null && !field.getChildren().isEmpty()) { |
| | | setFieldValues(field.getChildren(), fieldMap); |
| | |
| | | throw new ServiceException(String.format("区划代码%s不存在", deptAreaCode)); |
| | | } |
| | | Date date = new Date(); |
| | | Map<String, Date> quarterDate = DateUtils.getQuarterDate(date); |
| | | // 当前季度开始 |
| | | Date quarterStart = quarterDate.get("first"); |
| | | // 当前季度结束 |
| | | Date quarterEnd = quarterDate.get("last"); |
| | | // 判断当前时间是否在季度初1-15号 |
| | | Date quarterStart = DateUtil.beginOfQuarter(date); |
| | | Date quarterEnd = DateUtil.endOfQuarter(date); |
| | | Instant instant = quarterStart.toInstant(); |
| | | LocalDate quarterStartLocalDate = instant.atZone(ZoneId.systemDefault()).toLocalDate(); |
| | | LocalDate fifteenDaysLimit = quarterStartLocalDate.plusDays(14); |
| | |
| | | TbBasicData tbBasicData = BeanUtils.copyBean(dto, TbBasicData.class); |
| | | if (basicDataOpt.isPresent()) { |
| | | tbBasicData.setId(basicDataOpt.get().getId()); |
| | | tbBasicData.setDeptAreaCode(areaCode); |
| | | this.updateById(tbBasicData); |
| | | //查询该基础数据的动态字端 |
| | | List<TbBasicDataField> originFields = tbBasicDataFieldService.lambdaQuery() |
| | |
| | | this.save(tbBasicData); |
| | | } |
| | | // 保存基础数据动态字段数据 |
| | | List<TbBasicDataField> tbBasicDataFields = |
| | | List<TbBasicDataField> tbBasicDataFieldsOrg = |
| | | BeanUtils.copyList(dto.getFields(), TbBasicDataField.class); |
| | | |
| | | List<TbBasicDataField> tbBasicDataFields = tbBasicDataFieldsOrg.stream() |
| | | .filter(item -> Objects.nonNull(item.getFieldValue())).collect( |
| | | Collectors.toList()); |
| | | tbBasicDataFields.forEach( |
| | | item -> { |
| | | item.setBasicDataId(tbBasicData.getId()); |
| | | TbField tbField = fieldMap.get(item.getFieldId()); |
| | | if (Objects.nonNull(tbField)) { |
| | | item.setFieldName(tbField.getFieldName()); |
| | | } |
| | | Integer numMax = tbField.getNumMax(); |
| | | Integer numMin = tbField.getNumMin(); |
| | | Integer textMaxNum = tbField.getTextMaxNum(); |
| | | Integer textMinNum = tbField.getTextMinNum(); |
| | | if (FieldTypeEnum.NUMBER.equals(tbField.getFieldType()) && Objects.nonNull( |
| | | numMax) && Objects.nonNull(numMin)) { |
| | | double fieldValue = Double.parseDouble(item.getFieldValue()); |
| | | if (fieldValue < numMin || fieldValue > numMax) { |
| | | throw new ServiceException( |
| | | String.format("字段%s的值不在范围%d-%d内", |
| | | tbField.getFieldName(), |
| | | numMin, numMax)); |
| | | } |
| | | } |
| | | if (FieldTypeEnum.TEXT.equals(tbField.getFieldType()) |
| | | && FieldInputTypeEnum.MANUAL_INPUT.equals( |
| | | tbField.getTextInputType()) |
| | | && Objects.nonNull( |
| | | textMaxNum) && Objects.nonNull(textMinNum)) { |
| | | String fieldValue = item.getFieldValue(); |
| | | if (fieldValue.length() < numMin || fieldValue.length() > numMax) { |
| | | throw new ServiceException( |
| | | String.format("字段%s的值的长度不在范围%d-%d内", |
| | | tbField.getFieldName(), |
| | | textMinNum, textMaxNum)); |
| | | } |
| | | } |
| | | }); |
| | | // 添加固定字段 转移支付规模、当期GDP |
| | |
| | | |
| | | private static void wrapOperLog(LoginUser loginUser, TbBasicData tbBasicData, String before, |
| | | String after, List<TbOperLog> tbOperlogList, String fieldName) { |
| | | SysUser user = loginUser.getUser(); |
| | | TbOperLog tbOperLog = new TbOperLog(); |
| | | tbOperLog.setOperation(tbBasicData.getQuarter()); |
| | | tbOperLog.setStaffName(loginUser.getUser().getNickName()); |
| | | tbOperLog.setAreaName(loginUser.getUser().getAreaName()); |
| | | tbOperLog.setStaffName( |
| | | user.getUserType() == UserTypeEnum.PLATFORM ? user |
| | | .getUserName() |
| | | : user.getNickName()); |
| | | tbOperLog.setAreaName( |
| | | user.getUserType() == UserTypeEnum.PLATFORM ? "平台" : user.getAreaName()); |
| | | tbOperLog.setFieldName(fieldName); |
| | | tbOperLog.setBusinessType(BusinessType.UPDBASICDATA.ordinal()); |
| | | tbOperLog.setBeforeEdit(before); |
| | |
| | | |
| | | @Override |
| | | public void importBasicData(MultipartFile file) throws Exception { |
| | | Map<String, Date> quarterDate = DateUtils.getQuarterDate(new Date()); |
| | | // 当前季度开始 |
| | | Date quarterStart = quarterDate.get("first"); |
| | | // 当前季度结束 |
| | | Date quarterEnd = quarterDate.get("last"); |
| | | Date date = new Date(); |
| | | Date quarterStart = DateUtil.beginOfQuarter(date); |
| | | Date quarterEnd = DateUtil.endOfQuarter(date); |
| | | // 判断当前时间是否在季度初1-15号 |
| | | Instant instant = quarterStart.toInstant(); |
| | | 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号上传季度数据。"); |
| | | }*/ |
| | |
| | | Page<ScoreVO> page = new Page<>(query.getPageNum(), query.getPageSize()); |
| | | SysUser user = SecurityUtils.getLoginUser().getUser(); |
| | | String areaCode = user.getAreaCode(); |
| | | Map<String, Date> quarterDate = DateUtils.getQuarterDate(new Date()); |
| | | // 当前季度开始 |
| | | Date quarterStart = quarterDate.get("first"); |
| | | // 当前季度结束 |
| | | Date quarterEnd = quarterDate.get("last"); |
| | | Date date = new Date(); |
| | | Date quarterStart = DateUtil.beginOfQuarter(date); |
| | | Date quarterEnd = DateUtil.endOfQuarter(date); |
| | | // 查询是否有当前季度的填报记录 |
| | | TbBasicData basicData = |
| | | this.getOne( |
| | | Wrappers.<TbBasicData>lambdaQuery() |
| | | .eq(TbBasicData::getDeptAreaCode, areaCode) |
| | | .between(TbBasicData::getCreateTime, quarterStart, quarterEnd)); |
| | | .between(TbBasicData::getReportingTime, quarterStart, quarterEnd)); |
| | | if (Objects.isNull(basicData)) { |
| | | return PageDTO.empty(page); |
| | | } |
| | |
| | | throw new ServiceException("非法参数"); |
| | | } |
| | | CurrentFieldsDetailVO vo = BeanUtils.copyBean(basicData, CurrentFieldsDetailVO.class); |
| | | vo.setId(basicData.getId()); |
| | | // 查询用户信息 |
| | | sysUserService |
| | | .lambdaQuery() |
| | |
| | | TbBasicDataField tbBasicDataField = basicDataFieldMap.get(tbField.getId()); |
| | | item.add( |
| | | Objects.nonNull(tbBasicDataField) |
| | | ? FieldBuildUtil.formatNumberWithCommas( |
| | | tbBasicDataField.getFieldValue()) |
| | | ? tbBasicDataField.getFieldValue() |
| | | : ""); |
| | | } |
| | | item.add(tbBasicData.getRemark()); |
| | |
| | | TbBasicDataField tbBasicDataField = basicDataFieldMap.get(tbField.getId()); |
| | | item.add( |
| | | Objects.nonNull(tbBasicDataField) |
| | | ? FieldBuildUtil.formatNumberWithCommas( |
| | | tbBasicDataField.getFieldValue()) |
| | | ? tbBasicDataField.getFieldValue() |
| | | : ""); |
| | | } |
| | | item.add(tbBasicData.getRemark()); |
| | |
| | | return baseMapper.selectBasicDataFieldsConfig(areaCode, nowQuarter); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void editBasicData(BasicDataUpdDTO dto) throws Exception { |
| | | LoginUser loginUser = SecurityUtils.getLoginUser(); |
| | | // 数据校验 |
| | | 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) |
| | | .collect(Collectors.toSet()); |
| | | Map<Long, TbField> fieldMap = tbFieldService.lambdaQuery().in(TbField::getId, fieldIdList) |
| | | .list().stream().collect(Collectors.toMap(TbField::getId, e -> e)); |
| | | CompletableFuture.runAsync( |
| | | () -> saveExchangeLog(loginUser, basicData, originFields, |
| | | BeanUtils.copyBean(dto, BasicDataDTO.class), |
| | | fieldMap)); |
| | | TbBasicData tbBasicData = BeanUtils.copyBean(dto, TbBasicData.class); |
| | | |
| | | // 保存基础数据动态字段数据 |
| | | List<TbBasicDataField> tbBasicDataFields = |
| | | BeanUtils.copyList(dto.getFields(), TbBasicDataField.class); |
| | | |
| | | for (TbBasicDataField item : tbBasicDataFields) { |
| | | TbField tbField = fieldMap.get(item.getFieldId()); |
| | | Integer numMax = tbField.getNumMax(); |
| | | Integer numMin = tbField.getNumMin(); |
| | | Integer textMaxNum = tbField.getTextMaxNum(); |
| | | Integer textMinNum = tbField.getTextMinNum(); |
| | | if (FieldTypeEnum.NUMBER.equals(tbField.getFieldType()) && Objects.nonNull( |
| | | numMax) && Objects.nonNull(numMin)) { |
| | | double fieldValue = Double.parseDouble(item.getFieldValue()); |
| | | if (fieldValue < numMin || fieldValue > numMax) { |
| | | throw new ServiceException( |
| | | String.format("字段%s的值不在范围%d-%d内", tbField.getFieldName(), |
| | | numMin, numMax)); |
| | | } |
| | | } |
| | | if (FieldTypeEnum.TEXT.equals(tbField.getFieldType()) |
| | | && FieldInputTypeEnum.MANUAL_INPUT.equals(tbField.getTextInputType()) |
| | | && Objects.nonNull( |
| | | textMaxNum) && Objects.nonNull(textMinNum)) { |
| | | String fieldValue = item.getFieldValue(); |
| | | if (fieldValue.length() < numMin || fieldValue.length() > numMax) { |
| | | throw new ServiceException( |
| | | String.format("字段%s的值的长度不在范围%d-%d内", tbField.getFieldName(), |
| | | textMinNum, textMaxNum)); |
| | | } |
| | | } |
| | | } |
| | | tbBasicDataFields.forEach( |
| | | item -> { |
| | | item.setBasicDataId(tbBasicData.getId()); |
| | | TbField tbField = fieldMap.get(item.getFieldId()); |
| | | if (Objects.nonNull(tbField)) { |
| | | item.setFieldName(tbField.getFieldName()); |
| | | } |
| | | }); |
| | | // 添加固定字段 转移支付规模、当期GDP |
| | | TbBasicDataField transferPaymentScale = new TbBasicDataField(); |
| | | transferPaymentScale.setBasicDataId(tbBasicData.getId()); |
| | | transferPaymentScale.setFieldId(-1L); |
| | | transferPaymentScale.setFieldValue(tbBasicData.getTransferPaymentScale()); |
| | | tbBasicDataFields.add(transferPaymentScale); |
| | | TbBasicDataField currentGdp = new TbBasicDataField(); |
| | | 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); |
| | | if (ReportingStatusEnum.FILLED.equals(tbBasicData.getStatus())) { |
| | | CompletableFuture.runAsync(() -> { |
| | | calculateScore(tbBasicData, tbBasicDataFields); |
| | | calculateScreenScore(tbBasicData, tbBasicDataFields); |
| | | }); |
| | | } |
| | | } |
| | | } |