From edc1be0934a546718e79cbcff2d66706be40ac49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=AE=9D=E9=BE=99?= Date: Fri, 3 Jul 2026 12:19:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constant/enums/ModelTemplateTypeEnum.java | 2 + ...lyMonitorTotalFertilityRateController.java | 104 ++++++++++ .../ModelSupplyMonitorTotalFertilityRate.java | 39 ++++ ...SupplyMonitorTotalFertilityRateMapper.java | 64 ++++++ ...upplyMonitorTotalFertilityRateService.java | 75 +++++++ .../service/impl/ModelCommonServiceImpl.java | 7 + ...yMonitorTotalFertilityRateServiceImpl.java | 194 ++++++++++++++++++ .../ModelWarningIndicatorDataServiceImpl.java | 1 + ...lSupplyMonitorTotalFertilityRateMapper.xml | 63 ++++++ ...劳动力动态监测系统-劳动力供给预测人口.xlsx | Bin 10336 -> 10292 bytes ...力动态监测系统-劳动力供给预测总和生育率.xlsx | Bin 0 -> 10236 bytes sql/datadashboard/table.sql | 27 ++- 12 files changed, 575 insertions(+), 1 deletion(-) create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/ModelSupplyMonitorTotalFertilityRateController.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/ModelSupplyMonitorTotalFertilityRate.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/ModelSupplyMonitorTotalFertilityRateMapper.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/ModelSupplyMonitorTotalFertilityRateService.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ModelSupplyMonitorTotalFertilityRateServiceImpl.java create mode 100644 ruoyi-bussiness/src/main/resources/mapper/ModelSupplyMonitorTotalFertilityRateMapper.xml create mode 100644 ruoyi-bussiness/src/main/resources/template/劳动力动态监测系统-劳动力供给预测总和生育率.xlsx diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/constant/enums/ModelTemplateTypeEnum.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/constant/enums/ModelTemplateTypeEnum.java index 21cc155..2e70af0 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/constant/enums/ModelTemplateTypeEnum.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/constant/enums/ModelTemplateTypeEnum.java @@ -16,6 +16,8 @@ public enum ModelTemplateTypeEnum { MODEL_WARNING_INDICATOR_DATA("劳动力动态监测系统-就业失业预警指标数据"), MODEL_SUPPLY_MONITOR_POPULATION("劳动力动态监测系统-劳动力供给预测人口"), + + MODEL_SUPPLY_MONITOR_TOTAL_FERTILITY_RATE("劳动力动态监测系统-劳动力供给预测总和生育率"), ; private final String desc; } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/ModelSupplyMonitorTotalFertilityRateController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/ModelSupplyMonitorTotalFertilityRateController.java new file mode 100644 index 0000000..09a97b6 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/ModelSupplyMonitorTotalFertilityRateController.java @@ -0,0 +1,104 @@ +package com.ruoyi.cms.controller; + +import com.ruoyi.cms.domain.ModelSupplyMonitorTotalFertilityRate; +import com.ruoyi.cms.service.ModelSupplyMonitorTotalFertilityRateService; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; +import java.util.List; + +/** + * 劳动力供给总和生育率 + * + * @author 马宝龙 + * @date 2026/7/3 + */ +@RestController +@RequestMapping("/model/supplyMonitorTotalFertilityRate") +@RequiredArgsConstructor +public class ModelSupplyMonitorTotalFertilityRateController extends BaseController { + + private final ModelSupplyMonitorTotalFertilityRateService modelSupplyMonitorTotalFertilityRateService; + + /** + * 创建 + * + * @param modelSupplyMonitorTotalFertilityRate 劳动力供给总和生育率 + * @return 创建结果 + */ + @PostMapping("/create") + public AjaxResult create(@Valid @RequestBody ModelSupplyMonitorTotalFertilityRate modelSupplyMonitorTotalFertilityRate) { + modelSupplyMonitorTotalFertilityRateService.create(modelSupplyMonitorTotalFertilityRate); + return AjaxResult.success(); + } + + /** + * 更新 + * + * @param modelSupplyMonitorTotalFertilityRate 劳动力供给总和生育率 + * @return 更新结果 + */ + @PutMapping("/update") + public AjaxResult update(@Valid @RequestBody ModelSupplyMonitorTotalFertilityRate modelSupplyMonitorTotalFertilityRate) { + modelSupplyMonitorTotalFertilityRateService.update(modelSupplyMonitorTotalFertilityRate); + return AjaxResult.success(); + } + + /** + * 删除 + * + * @param id ID + * @return 删除结果 + */ + @DeleteMapping("/delete") + public AjaxResult delete(@RequestParam Long id) { + modelSupplyMonitorTotalFertilityRateService.delete(id); + return AjaxResult.success(); + } + + /** + * 清空 + * + * @return 清空结果 + */ + @DeleteMapping("/clear") + public AjaxResult clear() { + modelSupplyMonitorTotalFertilityRateService.clear(); + return AjaxResult.success(); + } + + /** + * 查询详情 + * + * @param id ID + * @return 劳动力供给总和生育率 + */ + @GetMapping("/detail") + public AjaxResult detail(@RequestParam Long id) { + ModelSupplyMonitorTotalFertilityRate data = modelSupplyMonitorTotalFertilityRateService.detail(id); + return AjaxResult.success(data); + } + + /** + * 查询列表 + * + * @param modelSupplyMonitorTotalFertilityRate 劳动力供给总和生育率 + * @return 列表 + */ + @PostMapping("/list") + public AjaxResult list(@RequestBody ModelSupplyMonitorTotalFertilityRate modelSupplyMonitorTotalFertilityRate) { + List list = + modelSupplyMonitorTotalFertilityRateService.list(modelSupplyMonitorTotalFertilityRate); + return AjaxResult.success(list); + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/ModelSupplyMonitorTotalFertilityRate.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/ModelSupplyMonitorTotalFertilityRate.java new file mode 100644 index 0000000..fe0bb0a --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/ModelSupplyMonitorTotalFertilityRate.java @@ -0,0 +1,39 @@ +package com.ruoyi.cms.domain; + +import com.ruoyi.common.annotation.Excel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 劳动力供给总和生育率 + * + * @author 马宝龙 + * @date 2026/7/3 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ModelSupplyMonitorTotalFertilityRate implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + private Long id; + /** + * 年份 + */ + @Excel(name = "年份") + private Integer year; + /** + * 总和生育率 + */ + @Excel(name = "总和生育率") + private BigDecimal totalFertilityRate; +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/ModelSupplyMonitorTotalFertilityRateMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/ModelSupplyMonitorTotalFertilityRateMapper.java new file mode 100644 index 0000000..66777af --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/ModelSupplyMonitorTotalFertilityRateMapper.java @@ -0,0 +1,64 @@ +package com.ruoyi.cms.mapper; + +import com.ruoyi.cms.domain.ModelSupplyMonitorTotalFertilityRate; + +import java.util.List; + +/** + * 劳动力供给总和生育率 + * + * @author 马宝龙 + * @date 2026/7/3 + */ +public interface ModelSupplyMonitorTotalFertilityRateMapper { + + /** + * 新增 + * + * @param modelSupplyMonitorTotalFertilityRate 劳动力供给总和生育率 + */ + void insert(ModelSupplyMonitorTotalFertilityRate modelSupplyMonitorTotalFertilityRate); + + /** + * 修改 + * + * @param modelSupplyMonitorTotalFertilityRate 劳动力供给总和生育率 + */ + void update(ModelSupplyMonitorTotalFertilityRate modelSupplyMonitorTotalFertilityRate); + + /** + * 通过ID删除 + * + * @param id ID + */ + void deleteById(Long id); + + /** + * 清空 + */ + void clear(); + + /** + * 通过ID查询 + * + * @param id ID + * @return 劳动力供给总和生育率 + */ + ModelSupplyMonitorTotalFertilityRate selectById(Long id); + + /** + * 查询唯一(按年份) + * + * @param modelSupplyMonitorTotalFertilityRate 劳动力供给总和生育率 + * @return 劳动力供给总和生育率 + */ + ModelSupplyMonitorTotalFertilityRate findUnique(ModelSupplyMonitorTotalFertilityRate modelSupplyMonitorTotalFertilityRate); + + /** + * 查询列表 + * + * @param modelSupplyMonitorTotalFertilityRate 劳动力供给总和生育率 + * @return 列表 + */ + List list(ModelSupplyMonitorTotalFertilityRate modelSupplyMonitorTotalFertilityRate); +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/ModelSupplyMonitorTotalFertilityRateService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/ModelSupplyMonitorTotalFertilityRateService.java new file mode 100644 index 0000000..14270c4 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/ModelSupplyMonitorTotalFertilityRateService.java @@ -0,0 +1,75 @@ +package com.ruoyi.cms.service; + +import com.ruoyi.cms.domain.ModelSupplyMonitorTotalFertilityRate; +import com.ruoyi.cms.domain.dto.ModelExportParamDto; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 劳动力供给总和生育率 + * + * @author 马宝龙 + * @date 2026/7/3 + */ +public interface ModelSupplyMonitorTotalFertilityRateService { + + /** + * 创建 + * + * @param modelSupplyMonitorTotalFertilityRate 劳动力供给总和生育率 + */ + void create(ModelSupplyMonitorTotalFertilityRate modelSupplyMonitorTotalFertilityRate); + + /** + * 更新 + * + * @param modelSupplyMonitorTotalFertilityRate 劳动力供给总和生育率 + */ + void update(ModelSupplyMonitorTotalFertilityRate modelSupplyMonitorTotalFertilityRate); + + /** + * 删除 + * + * @param id ID + */ + void delete(Long id); + + /** + * 清空 + */ + void clear(); + + /** + * 查询详情 + * + * @param id ID + * @return 劳动力供给总和生育率 + */ + ModelSupplyMonitorTotalFertilityRate detail(Long id); + + /** + * 查询列表 + * + * @param modelSupplyMonitorTotalFertilityRate 劳动力供给总和生育率 + * @return 列表 + */ + List list(ModelSupplyMonitorTotalFertilityRate modelSupplyMonitorTotalFertilityRate); + + /** + * 导入数据 + * + * @param file 文件 + * @return 导入结果 + */ + String importExcel(MultipartFile file); + + /** + * 导出数据 + * + * @param response 响应体 + * @param dto 导出参数 + */ + void exportExcel(HttpServletResponse response, ModelExportParamDto dto); +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ModelCommonServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ModelCommonServiceImpl.java index fcee169..0ff5e0b 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ModelCommonServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ModelCommonServiceImpl.java @@ -4,6 +4,7 @@ import com.ruoyi.cms.constant.enums.ModelTemplateTypeEnum; import com.ruoyi.cms.domain.dto.ModelExportParamDto; import com.ruoyi.cms.service.ModelCommonService; import com.ruoyi.cms.service.ModelSupplyMonitorPopulationService; +import com.ruoyi.cms.service.ModelSupplyMonitorTotalFertilityRateService; import com.ruoyi.cms.service.ModelWarningIndicatorDataService; import com.ruoyi.common.exception.ServiceException; import lombok.RequiredArgsConstructor; @@ -36,6 +37,7 @@ public class ModelCommonServiceImpl implements ModelCommonService { private final ModelWarningIndicatorDataService modelWarningIndicatorDataService; private final ModelSupplyMonitorPopulationService modelSupplyMonitorPopulationService; + private final ModelSupplyMonitorTotalFertilityRateService modelSupplyMonitorTotalFertilityRateService; @Override public void template(HttpServletResponse response, @@ -83,6 +85,8 @@ public class ModelCommonServiceImpl implements ModelCommonService { return modelWarningIndicatorDataService.importExcel(file); case MODEL_SUPPLY_MONITOR_POPULATION: return modelSupplyMonitorPopulationService.importExcel(file); + case MODEL_SUPPLY_MONITOR_TOTAL_FERTILITY_RATE: + return modelSupplyMonitorTotalFertilityRateService.importExcel(file); default: throw new ServiceException("模板类型错误"); } @@ -101,6 +105,9 @@ public class ModelCommonServiceImpl implements ModelCommonService { case MODEL_SUPPLY_MONITOR_POPULATION: modelSupplyMonitorPopulationService.exportExcel(response, dto); break; + case MODEL_SUPPLY_MONITOR_TOTAL_FERTILITY_RATE: + modelSupplyMonitorTotalFertilityRateService.exportExcel(response, dto); + break; default: throw new ServiceException("模板类型错误"); } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ModelSupplyMonitorTotalFertilityRateServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ModelSupplyMonitorTotalFertilityRateServiceImpl.java new file mode 100644 index 0000000..23b52af --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ModelSupplyMonitorTotalFertilityRateServiceImpl.java @@ -0,0 +1,194 @@ +package com.ruoyi.cms.service.impl; + +import com.ruoyi.cms.constant.enums.ModelTemplateTypeEnum; +import com.ruoyi.cms.domain.ModelSupplyMonitorTotalFertilityRate; +import com.ruoyi.cms.domain.dto.ModelExportParamDto; +import com.ruoyi.cms.mapper.ModelSupplyMonitorTotalFertilityRateMapper; +import com.ruoyi.cms.service.ModelSupplyMonitorTotalFertilityRateService; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.bean.BeanValidators; +import com.ruoyi.common.utils.poi.ExcelUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import javax.validation.Validator; +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +/** + * 劳动力供给总和生育率 + * + * @author 马宝龙 + * @date 2026/7/3 + */ +@Slf4j +@Service +@Validated +@RequiredArgsConstructor +public class ModelSupplyMonitorTotalFertilityRateServiceImpl implements ModelSupplyMonitorTotalFertilityRateService { + + private final ModelSupplyMonitorTotalFertilityRateMapper modelSupplyMonitorTotalFertilityRateMapper; + private final Validator validator; + + @Override + public void create(ModelSupplyMonitorTotalFertilityRate modelSupplyMonitorTotalFertilityRate) { + + check(modelSupplyMonitorTotalFertilityRate); + + // 查询唯一(按年份) + Optional optional = findUnique(modelSupplyMonitorTotalFertilityRate); + if (optional.isPresent()) { + // 更新 + ModelSupplyMonitorTotalFertilityRate exists = optional.get(); + modelSupplyMonitorTotalFertilityRate.setId(exists.getId()); + modelSupplyMonitorTotalFertilityRateMapper.update(modelSupplyMonitorTotalFertilityRate); + } else { + // 新增 + modelSupplyMonitorTotalFertilityRateMapper.insert(modelSupplyMonitorTotalFertilityRate); + } + } + + /** + * 检查 + * + * @param modelSupplyMonitorTotalFertilityRate 劳动力供给总和生育率 + */ + void check(ModelSupplyMonitorTotalFertilityRate modelSupplyMonitorTotalFertilityRate) { + if (Objects.isNull(modelSupplyMonitorTotalFertilityRate.getYear())) { + throw new ServiceException("年份不能为空"); + } + if (Objects.isNull(modelSupplyMonitorTotalFertilityRate.getTotalFertilityRate())) { + throw new ServiceException("总和生育率不能为空"); + } + } + + @Override + public void update(ModelSupplyMonitorTotalFertilityRate modelSupplyMonitorTotalFertilityRate) { + + check(modelSupplyMonitorTotalFertilityRate); + + if (Objects.isNull(modelSupplyMonitorTotalFertilityRate.getId())) { + throw new ServiceException("id不能为空"); + } + Optional unique = findUnique(modelSupplyMonitorTotalFertilityRate); + if (!unique.isPresent()) { + modelSupplyMonitorTotalFertilityRateMapper.update(modelSupplyMonitorTotalFertilityRate); + return; + } + ModelSupplyMonitorTotalFertilityRate exists = unique.get(); + if (!exists.getId().equals(modelSupplyMonitorTotalFertilityRate.getId())) { + throw new ServiceException("数据已存在"); + } + modelSupplyMonitorTotalFertilityRateMapper.update(modelSupplyMonitorTotalFertilityRate); + } + + @Override + public void delete(Long id) { + if (Objects.isNull(id)) { + throw new ServiceException("id不能为空"); + } + modelSupplyMonitorTotalFertilityRateMapper.deleteById(id); + } + + @Override + public void clear() { + modelSupplyMonitorTotalFertilityRateMapper.clear(); + } + + @Override + public ModelSupplyMonitorTotalFertilityRate detail(Long id) { + if (Objects.isNull(id)) { + throw new ServiceException("id不能为空"); + } + return modelSupplyMonitorTotalFertilityRateMapper.selectById(id); + } + + /** + * 查询唯一 + * + * @param modelSupplyMonitorTotalFertilityRate 劳动力供给总和生育率 + * @return 劳动力供给总和生育率 + */ + private Optional findUnique(ModelSupplyMonitorTotalFertilityRate modelSupplyMonitorTotalFertilityRate) { + ModelSupplyMonitorTotalFertilityRate unique = + modelSupplyMonitorTotalFertilityRateMapper.findUnique(modelSupplyMonitorTotalFertilityRate); + return Optional.ofNullable(unique); + } + + @Override + public List list(ModelSupplyMonitorTotalFertilityRate modelSupplyMonitorTotalFertilityRate) { + return modelSupplyMonitorTotalFertilityRateMapper.list(modelSupplyMonitorTotalFertilityRate); + } + + @Override + public String importExcel(MultipartFile file) { + try { + ExcelUtil util = new ExcelUtil<>(ModelSupplyMonitorTotalFertilityRate.class); + List list = util.importExcel(file.getInputStream()); + + ModelSupplyMonitorTotalFertilityRate exists; + int successNum = 0; + int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + for (ModelSupplyMonitorTotalFertilityRate item : list) { + try { + check(item); + exists = modelSupplyMonitorTotalFertilityRateMapper.findUnique(item); + if (exists == null) { + BeanValidators.validateWithException(validator, item); + modelSupplyMonitorTotalFertilityRateMapper.insert(item); + successNum++; + String msg = + "
" + successNum + "、" + "年份:" + item.getYear() + "数据导入成功。"; + successMsg.append(msg); + } else { + item.setId(exists.getId()); + BeanValidators.validateWithException(validator, item); + modelSupplyMonitorTotalFertilityRateMapper.update(item); + successNum++; + String msg = + "
" + successNum + "、" + "年份:" + item.getYear() + "数据更新成功。"; + successMsg.append(msg); + } + } catch (Exception e) { + failureNum++; + String msg = "
" + failureNum + "、" + "年份:" + item.getYear() + "数据导入失败:"; + failureMsg.append(msg).append(e.getMessage()); + log.error(msg, e); + } + } + if (failureNum > 0) { + failureMsg.insert(0, "导入失败!共 " + failureNum + " 条数据出现问题,错误如下:"); + throw new ServiceException(failureMsg.toString()); + } else { + successMsg.insert(0, "数据已全部导入成功!共 " + successNum + " 条:"); + } + return successMsg.toString(); + } catch (Exception e) { + log.error("数据导入失败", e); + throw new ServiceException("数据导入失败"); + } + } + + @Override + public void exportExcel(HttpServletResponse response, ModelExportParamDto dto) { + try { + + List list = list(ModelSupplyMonitorTotalFertilityRate.builder() + .year(dto.getYear()) + .build()); + ExcelUtil util = new ExcelUtil<>(ModelSupplyMonitorTotalFertilityRate.class); + util.exportExcel(response, list, ModelTemplateTypeEnum.MODEL_SUPPLY_MONITOR_TOTAL_FERTILITY_RATE.getDesc()); + + } catch (Exception e) { + log.error("数据导出失败", e); + throw new ServiceException("数据导出失败"); + } + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ModelWarningIndicatorDataServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ModelWarningIndicatorDataServiceImpl.java index e5a8b6f..3ed3371 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ModelWarningIndicatorDataServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ModelWarningIndicatorDataServiceImpl.java @@ -159,6 +159,7 @@ public class ModelWarningIndicatorDataServiceImpl implements ModelWarningIndicat StringBuilder failureMsg = new StringBuilder(); for (ModelWarningIndicatorData item : list) { try { + check(item); exists = modelWarningIndicatorDataMapper.findUnique(item); if (exists == null) { BeanValidators.validateWithException(validator, item); diff --git a/ruoyi-bussiness/src/main/resources/mapper/ModelSupplyMonitorTotalFertilityRateMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/ModelSupplyMonitorTotalFertilityRateMapper.xml new file mode 100644 index 0000000..374b535 --- /dev/null +++ b/ruoyi-bussiness/src/main/resources/mapper/ModelSupplyMonitorTotalFertilityRateMapper.xml @@ -0,0 +1,63 @@ + + + + + + INSERT INTO model_supply_monitor_total_fertility_rate (year, total_fertility_rate) + VALUES (#{year}, #{totalFertilityRate}) + + + + UPDATE model_supply_monitor_total_fertility_rate + SET year = #{year}, + total_fertility_rate = #{totalFertilityRate} + WHERE id = #{id} + + + + DELETE + FROM model_supply_monitor_total_fertility_rate + WHERE id = #{id} + + + + DELETE FROM model_supply_monitor_total_fertility_rate + WHERE id IS NOT NULL; + + + + + + + + + \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/resources/template/劳动力动态监测系统-劳动力供给预测人口.xlsx b/ruoyi-bussiness/src/main/resources/template/劳动力动态监测系统-劳动力供给预测人口.xlsx index ff4f1a56e42c50883fc68057630c8a4b3a8ff1ab..bd20e26752a26eba65b736f997b19f6a27dee6a4 100644 GIT binary patch delta 1478 zcmV;%1v&cQP_$5xH3_5#s(NAp005DZJ{f<_N&_(zh4+H*5VCL69~CJxQ^X(KNDEf? zY35EFm`Or%9a`T(T)A^2BDfNFLczCbi;rPu2I?rfad(q*a_)C83Hq}vB{^6pwF+sw z*`frL(6LmLkY0>V8vB$u(kY_pG3LY+GVXtx zURGX7w9PpBqn$9FBvQbU7FQW4WSv%PkHHK<#Sk~lCXiN%y&V4=8f#JTxy#Yqc;F~F zFea6Pqn|Q5lfr7J6C}qo0Vz4uneoav1;WU{Q=9oLCEaGbxf`(h!{8Knv6vy3)% zy&ME;OPsv+tLacO<_?OMAOw>XaMa^Ce5PD6nX;Lx(XzRHDRqO_ue&=vG4n&&xRNwKgF->$LC?yxY5V11fcTRPs^QO zhbp%X$h$)s3aoSd`#zUqNXCQ(?mO42MQvzVq8rHm!c7$I*t zKD);GassOH@&AeQnB2xBtH{kjTwD;(fO5$F^S{e4vo8a?4}U#~qNW)F0043X000jF z004MwFL!TpYhrJ2Yc6iY)Zrd;r-52N`1nzC>V<)y@Ij~|24G;%`<2voCpd~6I zB9Q_~R}P9Eq3Eh7=)UMW=V^0}4kb%*k)rU5oZ*`{GjB#3pY8I@`bec>g8Rtn+Q_0j z5;5a6V4+MjTTU=Q?-~L6dR9GP;15=dr z+0jRq+!n!>W$-%mY!~54E6cS6!|1bSv{cW2V_GHSu_$j@tW(h3>-9kO+V_UCyHxw= zbl}>C4j)id4FOekTD&Uq*W=^wuiu}({e1fJ0|sTZy?|;QC~d^xA}?ac@Epe67?gW} zhI@;yntynKhTdClxVLDps4!XlDI*U~aaRm9M--JwCyoxW7MI<2i_KKc~&2Z8Mk z-A*rb!cNZ_+MOUc>2>R<9ah*ESWRF zRWv1fD`9sh?R=@mpg00MoSy9P*Jf_w9>}6(L>+D?5^l4+Sr7de3Nf}GbETBWGTtPI;mAi zCmT&lKnWd7wH?xp-txpOB@VfYd8!qJbO?^lMdM>Z*J=Y6B{30fvpK_HfS_WCC(NfItsFZ!{?|0tqTq9zy`k~I zQ7~^zDg{SBWwa`V)lMf!mIeY+vY<2Lm8}#ABWs@832hgZ z6y(^+L7=w8$z8vi7A0HULD4d#Ik$h3EA*|4vMMR#)Ht-!%fsdK)5+`Eb-=t{-IZaz zv>wZ;s9hHL;Co?VP;q$SJ7G^^3T`dwa*MwJx9h+qLxuZ+cz6H&c>HovoNwoQuQykt zgZ@6aWAK2mlF(PU1jc z3US6Zlga@te`!eDC2IEM5)*4Qz7e?V8VewkW$P@^I_W&AO(gN z6lm`-O(_2Mda%mn$G`7$DaK?>Sl}LH6y9RTWGCe%ySuN}s7y(k#bgoF zw4#*JCj}$qEypL5}rml2wLT=(T))G6iUD640 zL)rz7TsR?wxPiuvAH*v77uZRY6%C5tTo6VbU^Pu(VCu7g z(3Jz8&b>w#7(yZ%pqNqYfNLzk(eUx3LB{yilCdj85m4cOfJn-;525fQoFLI;DW>Wq zWIRDqg?t4?$}tK=gt1IwXq)B%Oc0@cBAcCUZZXG%!cb8v>TnV*XkTvW)YC@uS&n^n5;fRz3m$X(&`ZR|8#k9+rO~ z!#}eP6{rpZ6C#thBR>Rf9{>Q8kR=wA5F{D_k&`PVRSCfs&U00000>F2fa diff --git a/ruoyi-bussiness/src/main/resources/template/劳动力动态监测系统-劳动力供给预测总和生育率.xlsx b/ruoyi-bussiness/src/main/resources/template/劳动力动态监测系统-劳动力供给预测总和生育率.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..0f5ec5824198a0ad79537e4ed4815c0fdc83645e GIT binary patch literal 10236 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 PAU6>W8nXh)BlrIU&?Tqs literal 0 HcmV?d00001 diff --git a/sql/datadashboard/table.sql b/sql/datadashboard/table.sql index 7cf4d88..6575447 100644 --- a/sql/datadashboard/table.sql +++ b/sql/datadashboard/table.sql @@ -901,4 +901,29 @@ COMMENT ON COLUMN shz_data_dashboard.model_supply_monitor_population.total_count IS '总人数'; COMMENT -ON TABLE shz_data_dashboard.model_supply_monitor_population IS '劳动力供给人口'; \ No newline at end of file +ON TABLE shz_data_dashboard.model_supply_monitor_population IS '劳动力供给人口'; + + +--劳动力供给总和生育率 +CREATE TABLE shz_data_dashboard.model_supply_monitor_total_fertility_rate +( + id serial PRIMARY KEY, + year integer NOT NULL, + total_fertility_rate numeric(10, 2) NOT NULL +) +; + +ALTER TABLE shz_data_dashboard.model_supply_monitor_total_fertility_rate + OWNER TO sysdba; + +COMMENT +ON COLUMN shz_data_dashboard.model_supply_monitor_total_fertility_rate.id IS '主键'; + +COMMENT +ON COLUMN shz_data_dashboard.model_supply_monitor_total_fertility_rate.year IS '年份'; + +COMMENT +ON COLUMN shz_data_dashboard.model_supply_monitor_total_fertility_rate.total_fertility_rate IS '总和生育率'; + +COMMENT +ON TABLE shz_data_dashboard.model_supply_monitor_total_fertility_rate IS '劳动力供给总和生育率'; \ No newline at end of file