添加功能

This commit is contained in:
马宝龙
2026-07-13 12:40:41 +08:00
parent 2b29ea6618
commit c27d81f59e
7 changed files with 98 additions and 23 deletions

View File

@@ -130,6 +130,29 @@ public class CommonConstant {
Tuple2::getT1, Tuple2::getT1,
Tuple2::getT2 Tuple2::getT2
))); )));
/**
* 重点产业列表
*/
public static final List<Tuple2<String, String>> MAJOR_SECTOR_LIST =
Collections.unmodifiableList(new ArrayList<>(Arrays.asList(
Tuples.of("新材料产业 (碳基、硅基、铝基)", "新材料产业 (碳基、硅基、铝基)"),
Tuples.of("新能源产业", "新能源产业"),
Tuples.of("农业资源转化产业 (农产品精深加工)", "农业资源转化产业 (农产品精深加工)"),
Tuples.of("现代服务业", "现代服务业"),
Tuples.of("绿色算力产业", "绿色算力产业"),
Tuples.of("纺织服装产业", "纺织服装产业"),
Tuples.of("先进装备制造", "先进装备制造"),
Tuples.of("生物医药", "生物医药")
)));
/**
* 重点产业Map
*/
public static final Map<String, String> MAJOR_SECTOR_MAP =
Collections.unmodifiableMap(MAJOR_SECTOR_LIST.stream()
.collect(Collectors.toMap(
Tuple2::getT1,
Tuple2::getT2
)));
/** /**
* 高校类型列表 * 高校类型列表

View File

@@ -68,6 +68,14 @@ public class SectorTalentOverviewVo implements Serializable {
* 人才缺口环比 * 人才缺口环比
*/ */
private BigDecimal talentGapCountMom; private BigDecimal talentGapCountMom;
/**
* 创业企业数
*/
private Long startupCompanyCount;
/**
* 创业企业数环比
*/
private BigDecimal startupCompanyCountMom;
/** /**
* 技能培训人数 * 技能培训人数
*/ */

View File

@@ -155,7 +155,7 @@ public interface ThemeRecruitmentJobMapper {
* @param dto 查询参数 * @param dto 查询参数
* @return 结果列表 * @return 结果列表
*/ */
List<QueryResultVo> majorIndustryRecruitment(QueryParamDto dto); List<QueryResultVo> majorSectorRecruitment(QueryParamDto dto);
/** /**
@@ -164,7 +164,7 @@ public interface ThemeRecruitmentJobMapper {
* @param dto 查询参数 * @param dto 查询参数
* @return 趋势列表 * @return 趋势列表
*/ */
List<TreadVo> majorIndustryLaborForceTreadYear(QueryParamDto dto); List<TreadVo> majorSectorLaborForceTreadYear(QueryParamDto dto);
/** /**
* 重点监测行业劳动力动态走势 - 季度 * 重点监测行业劳动力动态走势 - 季度
@@ -172,7 +172,7 @@ public interface ThemeRecruitmentJobMapper {
* @param dto 查询参数 * @param dto 查询参数
* @return 趋势列表 * @return 趋势列表
*/ */
List<TreadVo> majorIndustryLaborForceTreadQuarter(QueryParamDto dto); List<TreadVo> majorSectorLaborForceTreadQuarter(QueryParamDto dto);
/** /**
* 重点监测行业劳动力动态走势 - 月度 * 重点监测行业劳动力动态走势 - 月度
@@ -180,7 +180,7 @@ public interface ThemeRecruitmentJobMapper {
* @param dto 查询参数 * @param dto 查询参数
* @return 趋势列表 * @return 趋势列表
*/ */
List<TreadVo> majorIndustryLaborForceTreadMonth(QueryParamDto dto); List<TreadVo> majorSectorLaborForceTreadMonth(QueryParamDto dto);
/** /**
* 不同类型企业用工规模 * 不同类型企业用工规模

View File

@@ -181,9 +181,9 @@ public class AnalysisLaborForceRecruitmentDemandServiceImpl implements AnalysisL
public List<QueryResultVo> majorIndustryRecruitment(QueryParamDto dto) { public List<QueryResultVo> majorIndustryRecruitment(QueryParamDto dto) {
dealParam(dto); dealParam(dto);
List<QueryResultVo> list = themeRecruitmentJobMapper.majorIndustryRecruitment(dto); List<QueryResultVo> list = themeRecruitmentJobMapper.majorSectorRecruitment(dto);
MathUtil.calculatePercentage(list); MathUtil.calculatePercentage(list);
ParamUtil.fillDictName(list, "majorIndustry"); ParamUtil.fillDictName(list, "majorSector");
return list; return list;
} }
@@ -201,25 +201,25 @@ public class AnalysisLaborForceRecruitmentDemandServiceImpl implements AnalysisL
dto.setStartTime(LocalDateTime.of(dto.getYear(), 1, 1, 0, 0, 0) dto.setStartTime(LocalDateTime.of(dto.getYear(), 1, 1, 0, 0, 0)
.minusYears(5L)); .minusYears(5L));
dto.setEndTime(LocalDateTime.of(dto.getYear(), 12, 31, 23, 59, 59)); dto.setEndTime(LocalDateTime.of(dto.getYear(), 12, 31, 23, 59, 59));
list = themeRecruitmentJobMapper.majorIndustryLaborForceTreadYear(dto); list = themeRecruitmentJobMapper.majorSectorLaborForceTreadYear(dto);
vo = transform(list,false); vo = transform(list,false);
ParamUtil.fillDictName(vo, "majorIndustry"); ParamUtil.fillDictName(vo, "majorSector");
break; break;
} }
case QUARTER: { case QUARTER: {
dto.setStartTime(LocalDateTime.of(dto.getYear(), 1, 1, 0, 0, 0)); dto.setStartTime(LocalDateTime.of(dto.getYear(), 1, 1, 0, 0, 0));
dto.setEndTime(LocalDateTime.of(dto.getYear(), 12, 31, 23, 59, 59)); dto.setEndTime(LocalDateTime.of(dto.getYear(), 12, 31, 23, 59, 59));
list = themeRecruitmentJobMapper.majorIndustryLaborForceTreadQuarter(dto); list = themeRecruitmentJobMapper.majorSectorLaborForceTreadQuarter(dto);
vo = transform(list,false); vo = transform(list,false);
ParamUtil.fillDictName(vo, "majorIndustry"); ParamUtil.fillDictName(vo, "majorSector");
break; break;
} }
case MONTH: { case MONTH: {
dto.setStartTime(LocalDateTime.of(dto.getYear(), 1, 1, 0, 0, 0)); dto.setStartTime(LocalDateTime.of(dto.getYear(), 1, 1, 0, 0, 0));
dto.setEndTime(LocalDateTime.of(dto.getYear(), 12, 31, 23, 59, 59)); dto.setEndTime(LocalDateTime.of(dto.getYear(), 12, 31, 23, 59, 59));
list = themeRecruitmentJobMapper.majorIndustryLaborForceTreadMonth(dto); list = themeRecruitmentJobMapper.majorSectorLaborForceTreadMonth(dto);
vo = transform(list,false); vo = transform(list,false);
ParamUtil.fillDictName(vo, "majorIndustry"); ParamUtil.fillDictName(vo, "majorSector");
break; break;
} }
default: default:

View File

@@ -196,6 +196,9 @@ public class ParamUtil {
case "majorIndustry": { case "majorIndustry": {
return Optional.ofNullable(CommonConstant.MAJOR_INDUSTRY_MAP.get(code)).orElse("未知"); return Optional.ofNullable(CommonConstant.MAJOR_INDUSTRY_MAP.get(code)).orElse("未知");
} }
case "majorSector": {
return Optional.ofNullable(CommonConstant.MAJOR_SECTOR_MAP.get(code)).orElse("未知");
}
case "educationLevel": { case "educationLevel": {
return Optional.ofNullable(CommonConstant.EDUCATION_LEVEL_MAP.get(code)).orElse("未知"); return Optional.ofNullable(CommonConstant.EDUCATION_LEVEL_MAP.get(code)).orElse("未知");
} }

View File

@@ -493,7 +493,7 @@
ORDER BY month_num; ORDER BY month_num;
</select> </select>
<select id="majorIndustryRecruitment" <select id="majorSectorRecruitment"
parameterType="com.ruoyi.cms.domain.dto.QueryParamDto" parameterType="com.ruoyi.cms.domain.dto.QueryParamDto"
resultType="com.ruoyi.cms.domain.vo.QueryResultVo"> resultType="com.ruoyi.cms.domain.vo.QueryResultVo">
@@ -503,7 +503,7 @@
FROM ( FROM (
SELECT SELECT
vacancies, vacancies,
SUBSTRING(industry FROM 1 FOR 3) AS code major_sector AS code
FROM theme_recruitment_job FROM theme_recruitment_job
WHERE WHERE
<!-- 引入公共条件 --> <!-- 引入公共条件 -->
@@ -514,7 +514,7 @@
</select> </select>
<select id="majorIndustryLaborForceTreadYear" <select id="majorSectorLaborForceTreadYear"
parameterType="com.ruoyi.cms.domain.dto.QueryParamDto" parameterType="com.ruoyi.cms.domain.dto.QueryParamDto"
resultType="com.ruoyi.cms.domain.vo.TreadVo"> resultType="com.ruoyi.cms.domain.vo.TreadVo">
WITH params AS ( WITH params AS (
@@ -535,7 +535,7 @@
aggregated_data AS ( aggregated_data AS (
SELECT SELECT
r.month_num, r.month_num,
SUBSTRING(industry FROM 1 FOR 3) AS another_code, major_sector AS another_code,
COALESCE(SUM(CASE WHEN r.year_offset = 0 THEN vacancies END), 0) AS current_count, COALESCE(SUM(CASE WHEN r.year_offset = 0 THEN vacancies END), 0) AS current_count,
COALESCE(SUM(CASE WHEN r.year_offset = 1 THEN vacancies END), 0) AS last_count COALESCE(SUM(CASE WHEN r.year_offset = 1 THEN vacancies END), 0) AS last_count
FROM month_ranges r FROM month_ranges r
@@ -555,7 +555,7 @@
</foreach> </foreach>
) )
</if> </if>
GROUP BY r.month_num,SUBSTRING(industry FROM 1 FOR 3) GROUP BY r.month_num,major_sector
) )
SELECT SELECT
(CAST(EXTRACT(YEAR FROM #{endTime}) AS INT) +1 - month_num) AS code, (CAST(EXTRACT(YEAR FROM #{endTime}) AS INT) +1 - month_num) AS code,
@@ -568,7 +568,7 @@
ORDER BY sort ; ORDER BY sort ;
</select> </select>
<select id="majorIndustryLaborForceTreadQuarter" <select id="majorSectorLaborForceTreadQuarter"
parameterType="com.ruoyi.cms.domain.dto.QueryParamDto" parameterType="com.ruoyi.cms.domain.dto.QueryParamDto"
resultType="com.ruoyi.cms.domain.vo.TreadVo"> resultType="com.ruoyi.cms.domain.vo.TreadVo">
WITH params AS ( WITH params AS (
@@ -591,7 +591,7 @@
aggregated_data AS ( aggregated_data AS (
SELECT SELECT
r.month_num, r.month_num,
SUBSTRING(industry FROM 1 FOR 3) AS another_code, major_sector AS another_code,
COALESCE(SUM(CASE WHEN r.year_offset = 0 THEN vacancies END), 0) AS current_count, COALESCE(SUM(CASE WHEN r.year_offset = 0 THEN vacancies END), 0) AS current_count,
COALESCE(SUM(CASE WHEN r.year_offset = 1 THEN vacancies END), 0) AS last_count COALESCE(SUM(CASE WHEN r.year_offset = 1 THEN vacancies END), 0) AS last_count
FROM month_ranges r FROM month_ranges r
@@ -611,7 +611,7 @@
</foreach> </foreach>
) )
</if> </if>
GROUP BY r.month_num,SUBSTRING(industry FROM 1 FOR 3) GROUP BY r.month_num,major_sector
) )
SELECT SELECT
month_num AS code, month_num AS code,
@@ -624,7 +624,7 @@
ORDER BY month_num; ORDER BY month_num;
</select> </select>
<select id="majorIndustryLaborForceTreadMonth" <select id="majorSectorLaborForceTreadMonth"
parameterType="com.ruoyi.cms.domain.dto.QueryParamDto" parameterType="com.ruoyi.cms.domain.dto.QueryParamDto"
resultType="com.ruoyi.cms.domain.vo.TreadVo"> resultType="com.ruoyi.cms.domain.vo.TreadVo">
WITH params AS ( WITH params AS (
@@ -647,7 +647,7 @@
aggregated_data AS ( aggregated_data AS (
SELECT SELECT
r.month_num, r.month_num,
SUBSTRING(industry FROM 1 FOR 3) AS another_code, major_sector AS another_code,
COALESCE(SUM(CASE WHEN r.year_offset = 0 THEN vacancies END), 0) AS current_count, COALESCE(SUM(CASE WHEN r.year_offset = 0 THEN vacancies END), 0) AS current_count,
COALESCE(SUM(CASE WHEN r.year_offset = 1 THEN vacancies END), 0) AS last_count COALESCE(SUM(CASE WHEN r.year_offset = 1 THEN vacancies END), 0) AS last_count
FROM month_ranges r FROM month_ranges r
@@ -667,7 +667,7 @@
</foreach> </foreach>
) )
</if> </if>
GROUP BY r.month_num,SUBSTRING(industry FROM 1 FOR 3) GROUP BY r.month_num,major_sector
) )
SELECT SELECT
month_num AS code, month_num AS code,

View File

@@ -481,6 +481,7 @@ CREATE TABLE shz_data_dashboard.theme_recruitment_job
name character varying(255) COLLATE pg_catalog."default", name character varying(255) COLLATE pg_catalog."default",
location character varying(255) COLLATE pg_catalog."default", location character varying(255) COLLATE pg_catalog."default",
industry character varying(100) COLLATE pg_catalog."default", industry character varying(100) COLLATE pg_catalog."default",
major_sector character varying(100) COLLATE pg_catalog."default",
scale character varying(50) COLLATE pg_catalog."default", scale character varying(50) COLLATE pg_catalog."default",
del_flag character varying(1) COLLATE pg_catalog."default", del_flag character varying(1) COLLATE pg_catalog."default",
code character varying(100) COLLATE pg_catalog."default", code character varying(100) COLLATE pg_catalog."default",
@@ -561,6 +562,9 @@ ON COLUMN shz_data_dashboard.theme_recruitment_job.location IS '单位地点';
COMMENT COMMENT
ON COLUMN shz_data_dashboard.theme_recruitment_job.industry IS '主要行业'; ON COLUMN shz_data_dashboard.theme_recruitment_job.industry IS '主要行业';
COMMENT
ON COLUMN shz_data_dashboard.theme_recruitment_job.major_sector IS '重点产业';
COMMENT COMMENT
ON COLUMN shz_data_dashboard.theme_recruitment_job.scale IS '单位规模'; ON COLUMN shz_data_dashboard.theme_recruitment_job.scale IS '单位规模';
@@ -696,6 +700,43 @@ ON COLUMN shz_data_dashboard.theme_job_seeker.user_type IS '用户类型';
COMMENT COMMENT
ON TABLE shz_data_dashboard.theme_job_seeker IS '求职者主题库'; ON TABLE shz_data_dashboard.theme_job_seeker IS '求职者主题库';
-- 产业发展主题库
CREATE TABLE shz_data_dashboard.theme_sector_develop
(
date timestamp without time zone,
area_code character varying(50) COLLATE pg_catalog."default",
sector character varying(20) COLLATE pg_catalog."default",
sector_amount numeric(10, 2),
company_new_investment_amount numeric(10, 2),
startup_company_count integer
)
;
ALTER TABLE shz_data_dashboard.theme_sector_develop
OWNER TO sysdba;
COMMENT
ON COLUMN shz_data_dashboard.theme_sector_develop.date IS '时间';
COMMENT
ON COLUMN shz_data_dashboard.theme_sector_develop.area_code IS '区域编码';
COMMENT
ON COLUMN shz_data_dashboard.theme_sector_develop.sector IS '产业';
COMMENT
ON COLUMN shz_data_dashboard.theme_sector_develop.sector_amount IS '产业产值';
COMMENT
ON COLUMN shz_data_dashboard.theme_sector_develop.company_new_investment_amount IS '企业新增投资额';
COMMENT
ON COLUMN shz_data_dashboard.theme_sector_develop.startup_company_count IS '创业企业';
COMMENT
ON TABLE shz_data_dashboard.theme_sector_develop IS '产业发展主题库';
-- 就业失业预警指标 -- 就业失业预警指标
CREATE TABLE shz_data_dashboard.model_warning_indicator CREATE TABLE shz_data_dashboard.model_warning_indicator
( (