政策相关

This commit is contained in:
2026-01-11 16:48:40 +08:00
parent 110bc88462
commit b4fdcfd804
14 changed files with 1154 additions and 0 deletions

153
docs/app-policy-info-api.md Normal file
View File

@@ -0,0 +1,153 @@
# 政策信息移动端接口文档
## 1. 获取政策列表
**接口地址:** `GET /app/policyInfo/portalList`
**请求参数:**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| pageNum | Number | 是 | 页码,默认 1 |
| pageSize | Number | 是 | 每页条数,默认 10 |
| searchValue | String | 否 | 政策名称搜索关键词 |
**响应参数:**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Number | 状态码200 表示成功 |
| msg | String | 提示信息 |
| total | Number | 总记录数 |
| rows | Array | 政策列表数据 |
**rows 数组元素字段:**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| id | Number | 政策ID |
| zcmc | String | 政策名称 |
| zclx | String | 政策类型 |
| zcLevel | String | 政策级别 |
| sourceUnit | String | 发文单位 |
| acceptUnit | String | 受理单位 |
| publishTime | String | 发文时间 |
| viewNum | Number | 浏览数 |
| createTime | String | 创建时间 |
**响应示例:**
```json
{
"code": 200,
"msg": "操作成功",
"total": 100,
"rows": [
{
"id": 1,
"zcmc": "就业见习补贴",
"zclx": "就业政策",
"zcLevel": "自治区级",
"sourceUnit": "新疆维吾尔自治区人力资源和社会保障厅",
"acceptUnit": "石河子市人社局",
"publishTime": "2021-09-24",
"viewNum": 1234,
"createTime": "2025-01-10"
}
]
}
```
---
## 2. 获取政策详情
**接口地址:** `GET /app/policyInfo/detail/{id}`
**请求参数:**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| id | Number | 是 | 政策ID路径参数 |
**响应参数:**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Number | 状态码200 表示成功 |
| msg | String | 提示信息 |
| data | Object | 政策详情数据 |
**data 字段:**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| id | Number | 政策ID |
| zcmc | String | 政策名称 |
| zclx | String | 政策类型 |
| zcLevel | String | 政策级别 |
| sourceUnit | String | 发文单位 |
| acceptUnit | String | 受理单位 |
| publishTime | String | 发文时间 |
| zcContent | String | 政策内容 |
| subsidyStandard | String | 补贴标准 |
| handleChannel | String | 经办渠道 |
| applyCondition | String | 申报条件 |
| fileUrl | String | 政策文件URL |
| fileName | String | 政策文件名称 |
| viewNum | Number | 浏览数 |
| createTime | String | 创建时间 |
**响应示例:**
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"id": 1,
"zcmc": "就业见习补贴",
"zclx": "就业政策",
"zcLevel": "自治区级",
"sourceUnit": "新疆维吾尔自治区人力资源和社会保障厅",
"acceptUnit": "石河子市人社局",
"publishTime": "2021-09-24",
"zcContent": "支持高校毕业生和失业青年参加就业见习,提升就业能力。",
"subsidyStandard": "按当地最低工资标准给予见习补贴见习单位按不低于当地最低工资标准的50%为见习人员发放岗位补助。",
"handleChannel": "石河子市人力资源和社会保障局就业服务窗口",
"applyCondition": "人社部门认定的见习单位吸纳离校2年内未就业高校毕业生和16-24岁新疆籍失业青年参加就业见习。",
"fileUrl": "https://example.com/files/policy_001.pdf",
"fileName": "就业见习补贴政策文件.pdf",
"viewNum": 1234,
"createTime": "2025-01-10"
}
}
```
---
## 3. 浏览数加1
**接口地址:** `POST /app/policyInfo/addViewNum/{id}`
**请求参数:**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| id | Number | 是 | 政策ID路径参数 |
**响应参数:**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Number | 状态码200 表示成功 |
| msg | String | 提示信息 |
**响应示例:**
```json
{
"code": 200,
"msg": "操作成功"
}
```

335
docs/cms-policy-info-api.md Normal file
View File

@@ -0,0 +1,335 @@
# 政策信息CMS管理接口文档
## 1. 查询政策列表
**接口地址:** `GET /cms/policyInfo/list`
**权限标识:** `cms:policyInfo:list`
**请求参数:**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| pageNum | Number | 否 | 页码,默认 1 |
| pageSize | Number | 否 | 每页条数,默认 10 |
| searchValue | String | 否 | 政策名称搜索关键词 |
**响应参数:**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Number | 状态码200 表示成功 |
| msg | String | 提示信息 |
| total | Number | 总记录数 |
| rows | Array | 政策列表数据 |
**rows 数组元素字段:**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| id | Number | 政策ID |
| zcmc | String | 政策名称 |
| zclx | String | 政策类型 |
| zcLevel | String | 政策级别 |
| sourceUnit | String | 发文单位 |
| acceptUnit | String | 受理单位 |
| publishTime | String | 发文时间 |
| viewNum | Number | 浏览数 |
| createTime | String | 创建时间 |
**响应示例:**
```json
{
"code": 200,
"msg": "查询成功",
"total": 100,
"rows": [
{
"id": 1,
"zcmc": "就业见习补贴",
"zclx": "就业政策",
"zcLevel": "自治区级",
"sourceUnit": "新疆维吾尔自治区人力资源和社会保障厅",
"acceptUnit": "石河子市人社局",
"publishTime": "2021-09-24",
"viewNum": 1234,
"createTime": "2025-01-10 10:00:00"
}
]
}
```
---
## 2. 获取政策详情
**接口地址:** `GET /cms/policyInfo/{id}`
**权限标识:** `cms:policyInfo:query`
**请求参数:**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| id | Number | 是 | 政策ID路径参数 |
**响应参数:**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Number | 状态码200 表示成功 |
| msg | String | 提示信息 |
| data | Object | 政策详情数据 |
**data 字段:**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| id | Number | 政策ID |
| zcmc | String | 政策名称 |
| zclx | String | 政策类型 |
| zcLevel | String | 政策级别 |
| sourceUnit | String | 发文单位 |
| acceptUnit | String | 受理单位 |
| publishTime | String | 发文时间 |
| zcContent | String | 政策内容 |
| subsidyStandard | String | 补贴标准 |
| handleChannel | String | 经办渠道 |
| applyCondition | String | 申报条件 |
| fileUrl | String | 政策文件URL |
| fileName | String | 政策文件名称 |
| viewNum | Number | 浏览数 |
| createBy | String | 创建者 |
| createTime | String | 创建时间 |
| updateBy | String | 更新者 |
| updateTime | String | 更新时间 |
| remark | String | 备注 |
**响应示例:**
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"id": 1,
"zcmc": "就业见习补贴",
"zclx": "就业政策",
"zcLevel": "自治区级",
"sourceUnit": "新疆维吾尔自治区人力资源和社会保障厅",
"acceptUnit": "石河子市人社局",
"publishTime": "2021-09-24",
"zcContent": "支持高校毕业生和失业青年参加就业见习,提升就业能力。",
"subsidyStandard": "按当地最低工资标准给予见习补贴",
"handleChannel": "石河子市人力资源和社会保障局就业服务窗口",
"applyCondition": "人社部门认定的见习单位",
"fileUrl": "https://example.com/files/policy_001.pdf",
"fileName": "就业见习补贴政策文件.pdf",
"viewNum": 1234,
"createBy": "admin",
"createTime": "2025-01-10 10:00:00",
"updateBy": null,
"updateTime": null,
"remark": null
}
}
```
---
## 3. 新增政策
**接口地址:** `POST /cms/policyInfo`
**权限标识:** `cms:policyInfo:add`
**请求参数Body JSON**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| zcmc | String | 是 | 政策名称 |
| zclx | String | 否 | 政策类型 |
| zcLevel | String | 否 | 政策级别 |
| sourceUnit | String | 否 | 发文单位 |
| acceptUnit | String | 否 | 受理单位 |
| publishTime | String | 否 | 发文时间yyyy-MM-dd |
| zcContent | String | 否 | 政策内容 |
| subsidyStandard | String | 否 | 补贴标准 |
| handleChannel | String | 否 | 经办渠道 |
| applyCondition | String | 否 | 申报条件 |
| fileUrl | String | 否 | 政策文件URL |
| fileName | String | 否 | 政策文件名称 |
| remark | String | 否 | 备注 |
**请求示例:**
```json
{
"zcmc": "就业见习补贴",
"zclx": "就业政策",
"zcLevel": "自治区级",
"sourceUnit": "新疆维吾尔自治区人力资源和社会保障厅",
"acceptUnit": "石河子市人社局",
"publishTime": "2021-09-24",
"zcContent": "支持高校毕业生和失业青年参加就业见习",
"subsidyStandard": "按当地最低工资标准给予见习补贴",
"handleChannel": "石河子市人力资源和社会保障局就业服务窗口",
"applyCondition": "人社部门认定的见习单位",
"fileUrl": "https://example.com/files/policy.pdf",
"fileName": "政策文件.pdf"
}
```
**响应示例:**
```json
{
"code": 200,
"msg": "操作成功"
}
```
---
## 4. 修改政策
**接口地址:** `PUT /cms/policyInfo`
**权限标识:** `cms:policyInfo:edit`
**请求参数Body JSON**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| id | Number | 是 | 政策ID |
| zcmc | String | 否 | 政策名称 |
| zclx | String | 否 | 政策类型 |
| zcLevel | String | 否 | 政策级别 |
| sourceUnit | String | 否 | 发文单位 |
| acceptUnit | String | 否 | 受理单位 |
| publishTime | String | 否 | 发文时间yyyy-MM-dd |
| zcContent | String | 否 | 政策内容 |
| subsidyStandard | String | 否 | 补贴标准 |
| handleChannel | String | 否 | 经办渠道 |
| applyCondition | String | 否 | 申报条件 |
| fileUrl | String | 否 | 政策文件URL |
| fileName | String | 否 | 政策文件名称 |
| remark | String | 否 | 备注 |
**请求示例:**
```json
{
"id": 1,
"zcmc": "就业见习补贴(修订版)",
"subsidyStandard": "按当地最低工资标准的120%给予见习补贴"
}
```
**响应示例:**
```json
{
"code": 200,
"msg": "操作成功"
}
```
---
## 5. 删除政策
**接口地址:** `DELETE /cms/policyInfo/{ids}`
**权限标识:** `cms:policyInfo:remove`
**请求参数:**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| ids | String | 是 | 政策ID多个用逗号分隔路径参数 |
**请求示例:**
```
DELETE /cms/policyInfo/1,2,3
```
**响应示例:**
```json
{
"code": 200,
"msg": "操作成功"
}
```
**说明:** 删除为逻辑删除,将 del_flag 字段置为 '2'。
---
## 6. 上传政策文件
**接口地址:** `POST /cms/policyInfo/upload`
**权限标识:** `cms:policyInfo:add`
**Content-Type** `multipart/form-data`
**请求参数:**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| file | File | 是 | 上传的文件 |
**响应参数:**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Number | 状态码200 表示成功 |
| msg | String | 提示信息 |
| data | Object | 文件信息 |
**data 字段:**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| fileUrl | String | 文件访问URL域名/file/+文件路径) |
| fileName | String | 原始文件名 |
| filePath | String | 文件相对路径 |
**响应示例:**
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"fileUrl": "https://your-domain.com/file/2026/01/11/abc123def456.pdf",
"fileName": "就业见习补贴政策文件.pdf",
"filePath": "2026/01/11/abc123def456.pdf"
}
}
```
**配置说明:**
`application.yml` 中配置上传目录和域名:
```yaml
policy:
upload:
# 文件上传目录
path: /data/policy/files
# 访问域名
domain: https://your-domain.com
```
**Nginx配置示例**
```nginx
location /file/ {
alias /data/policy/files/;
}
```

View File

@@ -140,6 +140,14 @@ mybatis-plus:
file:
upload-dir: /data/file
# 政策文件上传配置
policy:
upload:
# 文件上传目录
path: /data/policy/files
# 访问域名nginx配置的域名
domain: https://your-domain.com
#微信小程序
wx:
appid: wx99193c507b93d6db

View File

@@ -0,0 +1,57 @@
package com.ruoyi.cms.controller.app;
import com.ruoyi.cms.domain.policy.PolicyInfo;
import com.ruoyi.cms.domain.policy.PolicyInfoQuery;
import com.ruoyi.cms.service.policy.IPolicyInfoService;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* 政策信息移动端Controller
* @author kiro
* @date 2026-01-11
*/
@Slf4j
@RestController
@RequestMapping("/app/policyInfo")
@Api(tags = "移动端接口:政策信息")
public class AppPolicyInfoController extends BaseController {
@Autowired
private IPolicyInfoService policyInfoService;
/**
* 获取政策列表
*/
@ApiOperation("获取政策列表")
@GetMapping("/portalList")
public TableDataInfo portalList(PolicyInfoQuery query) {
return policyInfoService.getPortalList(query);
}
/**
* 获取政策详情
*/
@ApiOperation("获取政策详情")
@GetMapping("/detail/{id}")
public AjaxResult detail(@ApiParam("政策ID") @PathVariable Long id) {
PolicyInfo policyInfo = policyInfoService.getDetail(id);
return success(policyInfo);
}
/**
* 浏览数加1
*/
@ApiOperation("浏览数加1")
@PostMapping("/addViewNum/{id}")
public AjaxResult addViewNum(@ApiParam("政策ID") @PathVariable Long id) {
return toAjax(policyInfoService.addViewNum(id));
}
}

View File

@@ -0,0 +1,150 @@
package com.ruoyi.cms.controller.cms;
import com.ruoyi.cms.domain.policy.PolicyInfo;
import com.ruoyi.cms.domain.policy.PolicyInfoQuery;
import com.ruoyi.cms.service.policy.IPolicyInfoService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.uuid.IdUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;
/**
* 政策信息CMS管理Controller
* @author kiro
* @date 2026-01-11
*/
@RestController
@RequestMapping("/cms/policyInfo")
@Api(tags = "CMS政策信息管理")
public class CmsPolicyInfoController extends BaseController {
@Autowired
private IPolicyInfoService policyInfoService;
@Value("${policy.upload.path:/data/policy/files}")
private String uploadPath;
@Value("${policy.upload.domain:}")
private String uploadDomain;
/**
* 查询政策列表
*/
@PreAuthorize("@ss.hasPermi('cms:policyInfo:list')")
@ApiOperation("查询政策列表")
@GetMapping("/list")
public TableDataInfo list(PolicyInfoQuery query) {
startPage();
return getDataTable(policyInfoService.selectList(query));
}
/**
* 获取政策详情
*/
@PreAuthorize("@ss.hasPermi('cms:policyInfo:query')")
@ApiOperation("获取政策详情")
@GetMapping("/{id}")
public AjaxResult getInfo(@PathVariable Long id) {
return success(policyInfoService.selectById(id));
}
/**
* 新增政策
*/
@PreAuthorize("@ss.hasPermi('cms:policyInfo:add')")
@Log(title = "政策信息", businessType = BusinessType.INSERT)
@ApiOperation("新增政策")
@PostMapping
public AjaxResult add(@RequestBody PolicyInfo policyInfo) {
return toAjax(policyInfoService.insert(policyInfo));
}
/**
* 修改政策
*/
@PreAuthorize("@ss.hasPermi('cms:policyInfo:edit')")
@Log(title = "政策信息", businessType = BusinessType.UPDATE)
@ApiOperation("修改政策")
@PutMapping
public AjaxResult edit(@RequestBody PolicyInfo policyInfo) {
return toAjax(policyInfoService.update(policyInfo));
}
/**
* 删除政策
*/
@PreAuthorize("@ss.hasPermi('cms:policyInfo:remove')")
@Log(title = "政策信息", businessType = BusinessType.DELETE)
@ApiOperation("删除政策")
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids) {
return toAjax(policyInfoService.deleteByIds(ids));
}
/**
* 上传政策文件
*/
@PreAuthorize("@ss.hasPermi('cms:policyInfo:add')")
@Log(title = "政策文件上传", businessType = BusinessType.OTHER)
@ApiOperation("上传政策文件")
@PostMapping("/upload")
public AjaxResult uploadFile(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return error("上传文件不能为空");
}
try {
// 获取原始文件名
String originalFilename = file.getOriginalFilename();
// 获取文件后缀
String suffix = "";
if (originalFilename != null && originalFilename.contains(".")) {
suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
}
// 生成新文件名:日期目录 + UUID + 后缀
String dateDir = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd"));
String newFileName = IdUtils.fastSimpleUUID() + suffix;
// 创建目录
File destDir = new File(uploadPath + File.separator + dateDir);
if (!destDir.exists()) {
destDir.mkdirs();
}
// 保存文件
String filePath = dateDir + "/" + newFileName;
File destFile = new File(uploadPath + File.separator + dateDir + File.separator + newFileName);
file.transferTo(destFile);
// 构建返回URL
String fileUrl = uploadDomain + "/file/" + filePath;
Map<String, String> result = new HashMap<>();
result.put("fileUrl", fileUrl);
result.put("fileName", originalFilename);
result.put("filePath", filePath);
return success(result);
} catch (IOException e) {
logger.error("文件上传失败", e);
return error("文件上传失败:" + e.getMessage());
}
}
}

View File

@@ -0,0 +1,66 @@
package com.ruoyi.cms.domain.policy;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 政策信息对象
* @author kiro
* @date 2026-01-11
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel("政策信息")
public class PolicyInfo extends BaseEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("政策ID")
private Long id;
@ApiModelProperty("政策名称")
private String zcmc;
@ApiModelProperty("政策类型")
private String zclx;
@ApiModelProperty("政策级别")
private String zcLevel;
@ApiModelProperty("发文单位")
private String sourceUnit;
@ApiModelProperty("受理单位")
private String acceptUnit;
@JsonFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty("发文时间")
private Date publishTime;
@ApiModelProperty("政策内容")
private String zcContent;
@ApiModelProperty("补贴标准")
private String subsidyStandard;
@ApiModelProperty("经办渠道")
private String handleChannel;
@ApiModelProperty("申报条件")
private String applyCondition;
@ApiModelProperty("政策文件URL")
private String fileUrl;
@ApiModelProperty("政策文件名称")
private String fileName;
@ApiModelProperty("浏览数")
private Integer viewNum;
}

View File

@@ -0,0 +1,24 @@
package com.ruoyi.cms.domain.policy;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 政策信息查询参数
* @author kiro
* @date 2026-01-11
*/
@Data
@ApiModel("政策信息查询参数")
public class PolicyInfoQuery {
@ApiModelProperty("页码")
private Integer pageNum = 1;
@ApiModelProperty("每页条数")
private Integer pageSize = 10;
@ApiModelProperty("政策名称搜索关键词")
private String searchValue;
}

View File

@@ -0,0 +1,45 @@
package com.ruoyi.cms.mapper.policy;
import com.ruoyi.cms.domain.policy.PolicyInfo;
import com.ruoyi.cms.domain.policy.PolicyInfoQuery;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 政策信息Mapper接口
* @author kiro
* @date 2026-01-11
*/
public interface PolicyInfoMapper {
/**
* 分页查询政策列表
*/
List<PolicyInfo> selectPolicyInfoList(@Param("query") PolicyInfoQuery query);
/**
* 根据ID查询政策详情
*/
PolicyInfo selectPolicyInfoById(@Param("id") Long id);
/**
* 更新浏览数
*/
int updateViewNum(@Param("id") Long id);
/**
* 新增政策
*/
int insertPolicyInfo(PolicyInfo policyInfo);
/**
* 修改政策
*/
int updatePolicyInfo(PolicyInfo policyInfo);
/**
* 批量删除政策
*/
int deletePolicyInfoByIds(@Param("ids") Long[] ids);
}

View File

@@ -0,0 +1,57 @@
package com.ruoyi.cms.service.policy;
import com.ruoyi.cms.domain.policy.PolicyInfo;
import com.ruoyi.cms.domain.policy.PolicyInfoQuery;
import com.ruoyi.common.core.page.TableDataInfo;
import java.util.List;
/**
* 政策信息Service接口
* @author kiro
* @date 2026-01-11
*/
public interface IPolicyInfoService {
/**
* 分页查询政策列表(门户端)
*/
TableDataInfo getPortalList(PolicyInfoQuery query);
/**
* 获取政策详情
*/
PolicyInfo getDetail(Long id);
/**
* 浏览数加1
*/
int addViewNum(Long id);
// ========== CMS后台管理接口 ==========
/**
* 查询政策列表
*/
List<PolicyInfo> selectList(PolicyInfoQuery query);
/**
* 根据ID查询政策
*/
PolicyInfo selectById(Long id);
/**
* 新增政策
*/
int insert(PolicyInfo policyInfo);
/**
* 修改政策
*/
int update(PolicyInfo policyInfo);
/**
* 批量删除政策
*/
int deleteByIds(Long[] ids);
}

View File

@@ -0,0 +1,87 @@
package com.ruoyi.cms.service.policy.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ruoyi.cms.domain.policy.PolicyInfo;
import com.ruoyi.cms.domain.policy.PolicyInfoQuery;
import com.ruoyi.cms.mapper.policy.PolicyInfoMapper;
import com.ruoyi.cms.service.policy.IPolicyInfoService;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.utils.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
* 政策信息Service实现
* @author kiro
* @date 2026-01-11
*/
@Slf4j
@Service
public class PolicyInfoServiceImpl implements IPolicyInfoService {
@Autowired
private PolicyInfoMapper policyInfoMapper;
@Override
public TableDataInfo getPortalList(PolicyInfoQuery query) {
PageHelper.startPage(query.getPageNum(), query.getPageSize());
List<PolicyInfo> list = policyInfoMapper.selectPolicyInfoList(query);
PageInfo<PolicyInfo> pageInfo = new PageInfo<>(list);
TableDataInfo rspData = new TableDataInfo();
rspData.setCode(200);
rspData.setMsg("操作成功");
rspData.setRows(list);
rspData.setTotal(pageInfo.getTotal());
return rspData;
}
@Override
public PolicyInfo getDetail(Long id) {
return policyInfoMapper.selectPolicyInfoById(id);
}
@Override
public int addViewNum(Long id) {
return policyInfoMapper.updateViewNum(id);
}
// ========== CMS后台管理接口实现 ==========
@Override
public List<PolicyInfo> selectList(PolicyInfoQuery query) {
return policyInfoMapper.selectPolicyInfoList(query);
}
@Override
public PolicyInfo selectById(Long id) {
return policyInfoMapper.selectPolicyInfoById(id);
}
@Override
public int insert(PolicyInfo policyInfo) {
policyInfo.setCreateBy(SecurityUtils.getUsername());
policyInfo.setCreateTime(String.valueOf(new Date()));
if (policyInfo.getViewNum() == null) {
policyInfo.setViewNum(0);
}
return policyInfoMapper.insertPolicyInfo(policyInfo);
}
@Override
public int update(PolicyInfo policyInfo) {
policyInfo.setUpdateBy(SecurityUtils.getUsername());
policyInfo.setUpdateTime(String.valueOf(new Date()));
return policyInfoMapper.updatePolicyInfo(policyInfo);
}
@Override
public int deleteByIds(Long[] ids) {
return policyInfoMapper.deletePolicyInfoByIds(ids);
}
}

View File

@@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.cms.mapper.policy.PolicyInfoMapper">
<resultMap type="com.ruoyi.cms.domain.policy.PolicyInfo" id="PolicyInfoResult">
<result property="id" column="id"/>
<result property="zcmc" column="zcmc"/>
<result property="zclx" column="zclx"/>
<result property="zcLevel" column="zc_level"/>
<result property="sourceUnit" column="source_unit"/>
<result property="acceptUnit" column="accept_unit"/>
<result property="publishTime" column="publish_time"/>
<result property="zcContent" column="zc_content"/>
<result property="subsidyStandard" column="subsidy_standard"/>
<result property="handleChannel" column="handle_channel"/>
<result property="applyCondition" column="apply_condition"/>
<result property="fileUrl" column="file_url"/>
<result property="fileName" column="file_name"/>
<result property="viewNum" column="view_num"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="delFlag" column="del_flag"/>
<result property="remark" column="remark"/>
</resultMap>
<sql id="selectPolicyInfoListVo">
select id, zcmc, zclx, zc_level, source_unit, accept_unit, publish_time, view_num, create_time
from policy_info
</sql>
<sql id="selectPolicyInfoDetailVo">
select id, zcmc, zclx, zc_level, source_unit, accept_unit, publish_time,
zc_content, subsidy_standard, handle_channel, apply_condition,
file_url, file_name, view_num, create_by, create_time, update_by, update_time, remark
from policy_info
</sql>
<select id="selectPolicyInfoList" resultMap="PolicyInfoResult">
<include refid="selectPolicyInfoListVo"/>
<where>
del_flag = '0'
<if test="query.searchValue != null and query.searchValue != ''">
and zcmc like concat('%', #{query.searchValue}, '%')
</if>
</where>
order by publish_time desc, create_time desc
</select>
<select id="selectPolicyInfoById" resultMap="PolicyInfoResult">
<include refid="selectPolicyInfoDetailVo"/>
where id = #{id} and del_flag = '0'
</select>
<update id="updateViewNum">
update policy_info set view_num = view_num + 1 where id = #{id}
</update>
<insert id="insertPolicyInfo" useGeneratedKeys="true" keyProperty="id">
insert into policy_info (
zcmc, zclx, zc_level, source_unit, accept_unit, publish_time,
zc_content, subsidy_standard, handle_channel, apply_condition,
file_url, file_name, view_num, create_by, create_time, del_flag, remark
) values (
#{zcmc}, #{zclx}, #{zcLevel}, #{sourceUnit}, #{acceptUnit}, #{publishTime},
#{zcContent}, #{subsidyStandard}, #{handleChannel}, #{applyCondition},
#{fileUrl}, #{fileName}, #{viewNum}, #{createBy}, now(), '0', #{remark}
)
</insert>
<update id="updatePolicyInfo">
update policy_info
<set>
<if test="zcmc != null">zcmc = #{zcmc},</if>
<if test="zclx != null">zclx = #{zclx},</if>
<if test="zcLevel != null">zc_level = #{zcLevel},</if>
<if test="sourceUnit != null">source_unit = #{sourceUnit},</if>
<if test="acceptUnit != null">accept_unit = #{acceptUnit},</if>
<if test="publishTime != null">publish_time = #{publishTime},</if>
<if test="zcContent != null">zc_content = #{zcContent},</if>
<if test="subsidyStandard != null">subsidy_standard = #{subsidyStandard},</if>
<if test="handleChannel != null">handle_channel = #{handleChannel},</if>
<if test="applyCondition != null">apply_condition = #{applyCondition},</if>
<if test="fileUrl != null">file_url = #{fileUrl},</if>
<if test="fileName != null">file_name = #{fileName},</if>
<if test="remark != null">remark = #{remark},</if>
update_by = #{updateBy},
update_time = now()
</set>
where id = #{id}
</update>
<update id="deletePolicyInfoByIds">
update policy_info set del_flag = '2'
where id in
<foreach item="id" collection="ids" open="(" separator="," close=")">
#{id}
</foreach>
</update>
</mapper>

View File

@@ -119,6 +119,8 @@ public class SecurityConfig
// 移动端公用查询,可匿名访问
.antMatchers("/app/common/**").permitAll()
.antMatchers("/app/**").permitAll()
// 门户端公开接口,可匿名访问
.antMatchers("/portal/**").permitAll()
.antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
//放行前端界面
.antMatchers("/kashi/job-portal/detail/**").permitAll()

53
sql/policy_info.sql Normal file
View File

@@ -0,0 +1,53 @@
-- 政策信息表(瀚高/PostgreSQL
CREATE TABLE policy_info (
id BIGSERIAL PRIMARY KEY,
zcmc VARCHAR(500) NOT NULL,
zclx VARCHAR(100),
zc_level VARCHAR(50),
source_unit VARCHAR(200),
accept_unit VARCHAR(200),
publish_time TIMESTAMP,
zc_content TEXT,
subsidy_standard TEXT,
handle_channel TEXT,
apply_condition TEXT,
file_url VARCHAR(500),
file_name VARCHAR(200),
view_num INT DEFAULT 0,
create_by VARCHAR(64) DEFAULT '',
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_by VARCHAR(64) DEFAULT '',
update_time TIMESTAMP,
del_flag CHAR(1) DEFAULT '0',
remark VARCHAR(500) DEFAULT ''
);
-- 表注释
COMMENT ON TABLE policy_info IS '政策信息表';
-- 字段注释
COMMENT ON COLUMN policy_info.id IS '政策ID';
COMMENT ON COLUMN policy_info.zcmc IS '政策名称';
COMMENT ON COLUMN policy_info.zclx IS '政策类型';
COMMENT ON COLUMN policy_info.zc_level IS '政策级别';
COMMENT ON COLUMN policy_info.source_unit IS '发文单位';
COMMENT ON COLUMN policy_info.accept_unit IS '受理单位';
COMMENT ON COLUMN policy_info.publish_time IS '发文时间';
COMMENT ON COLUMN policy_info.zc_content IS '政策内容';
COMMENT ON COLUMN policy_info.subsidy_standard IS '补贴标准';
COMMENT ON COLUMN policy_info.handle_channel IS '经办渠道';
COMMENT ON COLUMN policy_info.apply_condition IS '申报条件';
COMMENT ON COLUMN policy_info.file_url IS '政策文件URL';
COMMENT ON COLUMN policy_info.file_name IS '政策文件名称';
COMMENT ON COLUMN policy_info.view_num IS '浏览数';
COMMENT ON COLUMN policy_info.create_by IS '创建者';
COMMENT ON COLUMN policy_info.create_time IS '创建时间';
COMMENT ON COLUMN policy_info.update_by IS '更新者';
COMMENT ON COLUMN policy_info.update_time IS '更新时间';
COMMENT ON COLUMN policy_info.del_flag IS '删除标志0代表存在 2代表删除';
COMMENT ON COLUMN policy_info.remark IS '备注';
-- 创建索引
CREATE INDEX idx_policy_info_zcmc ON policy_info(zcmc);
CREATE INDEX idx_policy_info_zclx ON policy_info(zclx);
CREATE INDEX idx_policy_info_del_flag ON policy_info(del_flag);

15
sql/policy_info_data.sql Normal file
View File

@@ -0,0 +1,15 @@
-- 政策信息测试数据(石河子)
INSERT INTO policy_info (zcmc, zclx, zc_level, source_unit, zc_content, view_num, create_by, create_time, del_flag) VALUES
('石河子市高层次人才引进政策', '人才政策', '市级', '石河子市人力资源和社会保障局', '为吸引高层次人才来石河子发展,对符合条件的人才给予安家费、住房补贴、生活补贴等优惠政策。', 1234, 'admin', '2025-01-10 10:00:00', '0');
INSERT INTO policy_info (zcmc, zclx, zc_level, source_unit, zc_content, view_num, create_by, create_time, del_flag) VALUES
('新疆生产建设兵团创业扶持政策', '创业政策', '兵团级', '新疆生产建设兵团人力资源和社会保障局', '对符合条件的创业者提供创业担保贷款、创业补贴、场地租金减免等扶持措施,支持兵团职工自主创业。', 856, 'admin', '2025-01-08 14:30:00', '0');
INSERT INTO policy_info (zcmc, zclx, zc_level, source_unit, zc_content, view_num, create_by, create_time, del_flag) VALUES
('石河子大学毕业生就业补贴政策', '就业政策', '市级', '石河子市就业服务中心', '对石河子大学应届毕业生到本地中小微企业就业的,给予一次性就业补贴和社保补贴,鼓励毕业生留疆就业。', 2156, 'admin', '2025-01-05 09:15:00', '0');
INSERT INTO policy_info (zcmc, zclx, zc_level, source_unit, zc_content, view_num, create_by, create_time, del_flag) VALUES
('第八师石河子市技能人才培养激励政策', '培训政策', '师市级', '第八师石河子市人社局', '鼓励企业开展职业技能培训,对取得职业资格证书的人员给予培训补贴和技能提升补贴,助力兵团技能人才队伍建设。', 3421, 'admin', '2025-01-03 16:45:00', '0');
INSERT INTO policy_info (zcmc, zclx, zc_level, source_unit, zc_content, view_num, create_by, create_time, del_flag) VALUES
('石河子市灵活就业人员社保补贴政策', '社保政策', '市级', '石河子市社会保险事业中心', '对就业困难人员和离校2年内未就业高校毕业生灵活就业后缴纳社会保险费的给予社保补贴减轻灵活就业人员负担。', 1678, 'admin', '2025-01-01 11:20:00', '0');