From bc7de4224cf84b39fb5a73f9370d51f77ea4bbb2 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:00:08 +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 + ...odelSupplyMonitorPopulationController.java | 106 +++++++++ .../domain/ModelSupplyMonitorPopulation.java | 52 +++++ .../cms/domain/dto/ModelExportParamDto.java | 4 + .../ModelSupplyMonitorPopulationMapper.java | 64 ++++++ .../ModelSupplyMonitorPopulationService.java | 75 +++++++ .../ModelWarningIndicatorDataService.java | 6 +- .../service/impl/ModelCommonServiceImpl.java | 7 + ...delSupplyMonitorPopulationServiceImpl.java | 204 ++++++++++++++++++ .../ModelSupplyMonitorPopulationMapper.xml | 79 +++++++ ...劳动力动态监测系统-劳动力供给预测人口.xlsx | Bin 0 -> 10336 bytes sql/datadashboard/table.sql | 39 +++- 12 files changed, 633 insertions(+), 5 deletions(-) create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/ModelSupplyMonitorPopulationController.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/ModelSupplyMonitorPopulation.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/ModelSupplyMonitorPopulationMapper.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/ModelSupplyMonitorPopulationService.java create mode 100644 ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ModelSupplyMonitorPopulationServiceImpl.java create mode 100644 ruoyi-bussiness/src/main/resources/mapper/ModelSupplyMonitorPopulationMapper.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 a103345..21cc155 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 @@ -14,6 +14,8 @@ import lombok.Getter; public enum ModelTemplateTypeEnum { MODEL_WARNING_INDICATOR_DATA("劳动力动态监测系统-就业失业预警指标数据"), + + MODEL_SUPPLY_MONITOR_POPULATION("劳动力动态监测系统-劳动力供给预测人口"), ; private final String desc; } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/ModelSupplyMonitorPopulationController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/ModelSupplyMonitorPopulationController.java new file mode 100644 index 0000000..edd139f --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/ModelSupplyMonitorPopulationController.java @@ -0,0 +1,106 @@ +package com.ruoyi.cms.controller; + +import com.ruoyi.cms.domain.ModelSupplyMonitorPopulation; +import com.ruoyi.cms.service.ModelSupplyMonitorPopulationService; +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.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; +import java.util.List; + +/** + * 劳动力供给人口 + * + * @author 马宝龙 + * @date 2026/7/3 + */ +@RestController +@RequestMapping("/model/supplyMonitorPopulation") +@RequiredArgsConstructor +public class ModelSupplyMonitorPopulationController extends BaseController { + + private final ModelSupplyMonitorPopulationService modelSupplyMonitorPopulationService; + + /** + * 创建 + * + * @param modelSupplyMonitorPopulation 劳动力供给人口 + * @return 创建结果 + */ + @PostMapping("/create") + public AjaxResult create(@Valid @RequestBody ModelSupplyMonitorPopulation modelSupplyMonitorPopulation) { + modelSupplyMonitorPopulationService.create(modelSupplyMonitorPopulation); + return AjaxResult.success(); + } + + /** + * 更新 + * + * @param modelSupplyMonitorPopulation 劳动力供给人口 + * @return 更新结果 + */ + @PutMapping("/update") + public AjaxResult update(@Valid @RequestBody ModelSupplyMonitorPopulation modelSupplyMonitorPopulation) { + modelSupplyMonitorPopulationService.update(modelSupplyMonitorPopulation); + return AjaxResult.success(); + } + + /** + * 删除 + * + * @param id ID + * @return 删除结果 + */ + @DeleteMapping("/delete") + public AjaxResult delete(@RequestParam Long id) { + modelSupplyMonitorPopulationService.delete(id); + return AjaxResult.success(); + } + + /** + * 清空 + * + * @return 清空结果 + */ + @DeleteMapping("/clear") + public AjaxResult clear() { + modelSupplyMonitorPopulationService.clear(); + return AjaxResult.success(); + } + + /** + * 查询详情 + * + * @param id ID + * @return 劳动力供给人口 + */ + @GetMapping("/detail") + public AjaxResult detail(@RequestParam Long id) { + ModelSupplyMonitorPopulation data = modelSupplyMonitorPopulationService.detail(id); + return AjaxResult.success(data); + } + + /** + * 查询列表 + * + * @param modelSupplyMonitorPopulation 劳动力供给人口 + * @return 列表 + */ + @PostMapping("/list") + @ResponseBody + public AjaxResult list(@RequestBody ModelSupplyMonitorPopulation modelSupplyMonitorPopulation) { + List list = + modelSupplyMonitorPopulationService.list(modelSupplyMonitorPopulation); + return AjaxResult.success(list); + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/ModelSupplyMonitorPopulation.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/ModelSupplyMonitorPopulation.java new file mode 100644 index 0000000..26efce0 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/ModelSupplyMonitorPopulation.java @@ -0,0 +1,52 @@ +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; + +/** + * 劳动力供给人口 + * + * @author 马宝龙 + * @date 2026/7/3 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ModelSupplyMonitorPopulation implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + private Long id; + /** + * 年份 + */ + @Excel(name = "年份") + private Integer year; + /** + * 年龄 + */ + @Excel(name = "年龄") + private Integer age; + /** + * 男性人数 + */ + @Excel(name = "男性人数") + private Integer maleCount; + /** + * 女性人数 + */ + @Excel(name = "女性人数") + private Integer femaleCount; + /** + * 总人数 + */ + private Integer totalCount; +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/dto/ModelExportParamDto.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/dto/ModelExportParamDto.java index bfa39be..7f70658 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/dto/ModelExportParamDto.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/dto/ModelExportParamDto.java @@ -29,4 +29,8 @@ public class ModelExportParamDto implements Serializable { * 指标编码 */ private String indicatorCode; + /** + * 指标编码 + */ + private Integer year; } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/ModelSupplyMonitorPopulationMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/ModelSupplyMonitorPopulationMapper.java new file mode 100644 index 0000000..d8c10dd --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/ModelSupplyMonitorPopulationMapper.java @@ -0,0 +1,64 @@ +package com.ruoyi.cms.mapper; + +import com.ruoyi.cms.domain.ModelSupplyMonitorPopulation; + +import java.util.List; + +/** + * 劳动力供给人口 + * + * @author 马宝龙 + * @date 2026/7/3 + */ +public interface ModelSupplyMonitorPopulationMapper { + + /** + * 新增 + * + * @param modelSupplyMonitorPopulation 劳动力供给人口 + */ + void insert(ModelSupplyMonitorPopulation modelSupplyMonitorPopulation); + + /** + * 修改 + * + * @param modelSupplyMonitorPopulation 劳动力供给人口 + */ + void update(ModelSupplyMonitorPopulation modelSupplyMonitorPopulation); + + /** + * 通过ID删除 + * + * @param id ID + */ + void deleteById(Long id); + + /** + * 清空 + */ + void clear(); + + /** + * 通过ID查询 + * + * @param id ID + * @return 劳动力供给人口 + */ + ModelSupplyMonitorPopulation selectById(Long id); + + /** + * 查询唯一(按年份+年龄) + * + * @param modelSupplyMonitorPopulation 劳动力供给人口 + * @return 劳动力供给人口 + */ + ModelSupplyMonitorPopulation findUnique(ModelSupplyMonitorPopulation modelSupplyMonitorPopulation); + + /** + * 查询列表 + * + * @param modelSupplyMonitorPopulation 劳动力供给人口 + * @return 列表 + */ + List list(ModelSupplyMonitorPopulation modelSupplyMonitorPopulation); +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/ModelSupplyMonitorPopulationService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/ModelSupplyMonitorPopulationService.java new file mode 100644 index 0000000..b5d67a6 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/ModelSupplyMonitorPopulationService.java @@ -0,0 +1,75 @@ +package com.ruoyi.cms.service; + +import com.ruoyi.cms.domain.ModelSupplyMonitorPopulation; +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 ModelSupplyMonitorPopulationService { + + /** + * 创建 + * + * @param modelSupplyMonitorPopulation 劳动力供给人口 + */ + void create(ModelSupplyMonitorPopulation modelSupplyMonitorPopulation); + + /** + * 更新 + * + * @param modelSupplyMonitorPopulation 劳动力供给人口 + */ + void update(ModelSupplyMonitorPopulation modelSupplyMonitorPopulation); + + /** + * 删除 + * + * @param id ID + */ + void delete(Long id); + + /** + * 清空 + */ + void clear(); + + /** + * 查询详情 + * + * @param id ID + * @return 劳动力供给人口 + */ + ModelSupplyMonitorPopulation detail(Long id); + + /** + * 查询列表 + * + * @param modelSupplyMonitorPopulation 劳动力供给人口 + * @return 列表 + */ + List list(ModelSupplyMonitorPopulation modelSupplyMonitorPopulation); + + /** + * 导入数据 + * + * @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/ModelWarningIndicatorDataService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/ModelWarningIndicatorDataService.java index 70c7f02..a6af20d 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/ModelWarningIndicatorDataService.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/ModelWarningIndicatorDataService.java @@ -1,6 +1,5 @@ package com.ruoyi.cms.service; -import com.ruoyi.cms.constant.enums.ModelTemplateTypeEnum; import com.ruoyi.cms.domain.ModelWarningIndicatorData; import com.ruoyi.cms.domain.dto.ModelExportParamDto; import org.springframework.web.multipart.MultipartFile; @@ -53,11 +52,10 @@ public interface ModelWarningIndicatorDataService { */ List list(ModelWarningIndicatorData modelWarningIndicatorData); - /** * 导入数据 * - * @param file 文件 + * @param file 文件 * @return 导入结果 */ String importExcel(MultipartFile file); @@ -66,7 +64,7 @@ public interface ModelWarningIndicatorDataService { * 导出数据 * * @param response 响应体 - * @param dto 导出参数 + * @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 09bb447..fcee169 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 @@ -3,6 +3,7 @@ package com.ruoyi.cms.service.impl; 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.ModelWarningIndicatorDataService; import com.ruoyi.common.exception.ServiceException; import lombok.RequiredArgsConstructor; @@ -34,6 +35,7 @@ import java.util.Objects; public class ModelCommonServiceImpl implements ModelCommonService { private final ModelWarningIndicatorDataService modelWarningIndicatorDataService; + private final ModelSupplyMonitorPopulationService modelSupplyMonitorPopulationService; @Override public void template(HttpServletResponse response, @@ -79,6 +81,8 @@ public class ModelCommonServiceImpl implements ModelCommonService { switch (modelTemplateType) { case MODEL_WARNING_INDICATOR_DATA: return modelWarningIndicatorDataService.importExcel(file); + case MODEL_SUPPLY_MONITOR_POPULATION: + return modelSupplyMonitorPopulationService.importExcel(file); default: throw new ServiceException("模板类型错误"); } @@ -94,6 +98,9 @@ public class ModelCommonServiceImpl implements ModelCommonService { case MODEL_WARNING_INDICATOR_DATA: modelWarningIndicatorDataService.exportExcel(response, dto); break; + case MODEL_SUPPLY_MONITOR_POPULATION: + modelSupplyMonitorPopulationService.exportExcel(response, dto); + break; default: throw new ServiceException("模板类型错误"); } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ModelSupplyMonitorPopulationServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ModelSupplyMonitorPopulationServiceImpl.java new file mode 100644 index 0000000..5dbf3a3 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ModelSupplyMonitorPopulationServiceImpl.java @@ -0,0 +1,204 @@ +package com.ruoyi.cms.service.impl; + +import com.ruoyi.cms.constant.enums.ModelTemplateTypeEnum; +import com.ruoyi.cms.domain.ModelSupplyMonitorPopulation; +import com.ruoyi.cms.domain.dto.ModelExportParamDto; +import com.ruoyi.cms.mapper.ModelSupplyMonitorPopulationMapper; +import com.ruoyi.cms.service.ModelSupplyMonitorPopulationService; +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 ModelSupplyMonitorPopulationServiceImpl implements ModelSupplyMonitorPopulationService { + + private final ModelSupplyMonitorPopulationMapper modelSupplyMonitorPopulationMapper; + private final Validator validator; + + @Override + public void create(ModelSupplyMonitorPopulation modelSupplyMonitorPopulation) { + + check(modelSupplyMonitorPopulation); + + // 查询唯一(按年份+年龄) + Optional optional = findUnique(modelSupplyMonitorPopulation); + if (optional.isPresent()) { + // 更新 + ModelSupplyMonitorPopulation exists = optional.get(); + modelSupplyMonitorPopulation.setId(exists.getId()); + modelSupplyMonitorPopulationMapper.update(modelSupplyMonitorPopulation); + } else { + // 新增 + modelSupplyMonitorPopulationMapper.insert(modelSupplyMonitorPopulation); + } + } + + /** + * 检查 + * + * @param modelSupplyMonitorPopulation 劳动力供给人口 + */ + void check(ModelSupplyMonitorPopulation modelSupplyMonitorPopulation) { + if (Objects.isNull(modelSupplyMonitorPopulation.getYear())) { + throw new ServiceException("年份不能为空"); + } + if (Objects.isNull(modelSupplyMonitorPopulation.getAge())) { + throw new ServiceException("年龄不能为空"); + } + if (Objects.isNull(modelSupplyMonitorPopulation.getMaleCount())) { + throw new ServiceException("男性人数不能为空"); + } + if (Objects.isNull(modelSupplyMonitorPopulation.getFemaleCount())) { + throw new ServiceException("女性人数不能为空"); + } + + modelSupplyMonitorPopulation.setTotalCount(modelSupplyMonitorPopulation.getMaleCount() + + modelSupplyMonitorPopulation.getFemaleCount()); + } + + @Override + public void update(ModelSupplyMonitorPopulation modelSupplyMonitorPopulation) { + + check(modelSupplyMonitorPopulation); + + if (Objects.isNull(modelSupplyMonitorPopulation.getId())) { + throw new ServiceException("id不能为空"); + } + Optional unique = findUnique(modelSupplyMonitorPopulation); + if (!unique.isPresent()) { + modelSupplyMonitorPopulationMapper.update(modelSupplyMonitorPopulation); + return; + } + ModelSupplyMonitorPopulation exists = unique.get(); + if (!exists.getId().equals(modelSupplyMonitorPopulation.getId())) { + throw new ServiceException("数据已存在"); + } + modelSupplyMonitorPopulationMapper.update(modelSupplyMonitorPopulation); + } + + @Override + public void delete(Long id) { + if (Objects.isNull(id)) { + throw new ServiceException("id不能为空"); + } + modelSupplyMonitorPopulationMapper.deleteById(id); + } + + @Override + public void clear() { + modelSupplyMonitorPopulationMapper.clear(); + } + + @Override + public ModelSupplyMonitorPopulation detail(Long id) { + if (Objects.isNull(id)) { + throw new ServiceException("id不能为空"); + } + return modelSupplyMonitorPopulationMapper.selectById(id); + } + + /** + * 查询唯一 + * + * @param modelSupplyMonitorPopulation 劳动力供给人口 + * @return 劳动力供给人口 + */ + private Optional findUnique(ModelSupplyMonitorPopulation modelSupplyMonitorPopulation) { + ModelSupplyMonitorPopulation unique = + modelSupplyMonitorPopulationMapper.findUnique(modelSupplyMonitorPopulation); + return Optional.ofNullable(unique); + } + + @Override + public List list(ModelSupplyMonitorPopulation modelSupplyMonitorPopulation) { + return modelSupplyMonitorPopulationMapper.list(modelSupplyMonitorPopulation); + } + + + @Override + public String importExcel(MultipartFile file) { + try { + ExcelUtil util = new ExcelUtil<>(ModelSupplyMonitorPopulation.class); + List list = util.importExcel(file.getInputStream()); + + ModelSupplyMonitorPopulation exists; + int successNum = 0; + int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + for (ModelSupplyMonitorPopulation item : list) { + try { + check(item); + exists = modelSupplyMonitorPopulationMapper.findUnique(item); + if (exists == null) { + BeanValidators.validateWithException(validator, item); + modelSupplyMonitorPopulationMapper.insert(item); + successNum++; + String msg = + "
" + successNum + "、" + "年份:" + item.getYear() + "年龄" + item.getAge() + "数据导入成功。"; + successMsg.append(msg); + } else { + item.setId(exists.getId()); + BeanValidators.validateWithException(validator, item); + modelSupplyMonitorPopulationMapper.update(item); + successNum++; + String msg = + "
" + successNum + "、" + "年份:" + item.getYear() + "年龄" + item.getAge() + "数据更新成功。"; + successMsg.append(msg); + } + } catch (Exception e) { + failureNum++; + String msg = "
" + failureNum + "、" + "年份:" + item.getYear() + "年龄" + item.getAge() + "数据导入失败:"; + 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(ModelSupplyMonitorPopulation.builder() + .year(dto.getYear()) + .build()); + ExcelUtil util = new ExcelUtil<>(ModelSupplyMonitorPopulation.class); + util.exportExcel(response, list, ModelTemplateTypeEnum.MODEL_SUPPLY_MONITOR_POPULATION.getDesc()); + + } catch (Exception e) { + log.error("数据导出失败", e); + throw new ServiceException("数据导出失败"); + } + } +} \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/resources/mapper/ModelSupplyMonitorPopulationMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/ModelSupplyMonitorPopulationMapper.xml new file mode 100644 index 0000000..4dadabb --- /dev/null +++ b/ruoyi-bussiness/src/main/resources/mapper/ModelSupplyMonitorPopulationMapper.xml @@ -0,0 +1,79 @@ + + + + + + INSERT INTO model_supply_monitor_population (year, age, male_count, female_count, total_count) + VALUES (#{year}, #{age}, #{maleCount}, #{femaleCount}, #{totalCount}) + + + + UPDATE model_supply_monitor_population + SET year = #{year}, + age = #{age}, + male_count = #{maleCount}, + female_count = #{femaleCount}, + total_count = #{totalCount} + WHERE id = #{id} + + + + DELETE + FROM model_supply_monitor_population + WHERE id = #{id} + + + + DELETE FROM model_supply_monitor_population + 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 new file mode 100644 index 0000000000000000000000000000000000000000..ff4f1a56e42c50883fc68057630c8a4b3a8ff1ab GIT binary patch literal 10336 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 D$@c2K literal 0 HcmV?d00001 diff --git a/sql/datadashboard/table.sql b/sql/datadashboard/table.sql index 90b4db0..7cf4d88 100644 --- a/sql/datadashboard/table.sql +++ b/sql/datadashboard/table.sql @@ -864,4 +864,41 @@ COMMENT ON COLUMN shz_data_dashboard.model_unemployment_warning_diffusion.sort_order IS '排序'; COMMENT -ON TABLE shz_data_dashboard.model_unemployment_warning_diffusion IS '失业预警扩散指数管理'; \ No newline at end of file +ON TABLE shz_data_dashboard.model_unemployment_warning_diffusion IS '失业预警扩散指数管理'; + + +--劳动力供给人口 +CREATE TABLE shz_data_dashboard.model_supply_monitor_population +( + id serial PRIMARY KEY, + year integer NOT NULL, + age integer NOT NULL, + male_count integer NOT NULL, + female_count integer NOT NULL, + total_count integer NOT NULL +) +; + +ALTER TABLE shz_data_dashboard.model_supply_monitor_population + OWNER TO sysdba; + +COMMENT +ON COLUMN shz_data_dashboard.model_supply_monitor_population.id IS '主键'; + +COMMENT +ON COLUMN shz_data_dashboard.model_supply_monitor_population.year IS '年份'; + +COMMENT +ON COLUMN shz_data_dashboard.model_supply_monitor_population.age IS '年龄'; + +COMMENT +ON COLUMN shz_data_dashboard.model_supply_monitor_population.male_count IS '男性人数'; + +COMMENT +ON COLUMN shz_data_dashboard.model_supply_monitor_population.female_count IS '女性人数'; + +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