政策相关

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

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>