Compare commits
16 Commits
c42f4b3179
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7d715736ed | ||
|
|
5f33be65ca | ||
|
|
7039d5b34d | ||
|
|
0e675a1004 | ||
|
|
3d06b57cf8 | ||
|
|
45289d5666 | ||
|
|
9b7fdafcd1 | ||
|
|
5303f8a8ed | ||
|
|
487dc33049 | ||
|
|
7cc52d896c | ||
|
|
937349dac7 | ||
|
|
69270286bb | ||
|
|
4201d9c015 | ||
|
|
09222c39ff | ||
|
|
8b06250131 | ||
| df6d3a7220 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -60,3 +60,6 @@ nbdist/
|
|||||||
local.sh
|
local.sh
|
||||||
.claude
|
.claude
|
||||||
/test-reports/
|
/test-reports/
|
||||||
|
ruoyi-admin/src/main/resources/application-local.yml
|
||||||
|
ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java
|
||||||
|
ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobTitleSuggestServiceImpl.java
|
||||||
@@ -1,5 +1,9 @@
|
|||||||
package com.ruoyi.web.controller.system;
|
package com.ruoyi.web.controller.system;
|
||||||
|
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.InvalidPathException;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@@ -7,6 +11,7 @@ import com.alibaba.fastjson2.JSONObject;
|
|||||||
import com.ruoyi.cms.domain.IDCardInfo;
|
import com.ruoyi.cms.domain.IDCardInfo;
|
||||||
import com.ruoyi.cms.service.impl.AppUserServiceImpl;
|
import com.ruoyi.cms.service.impl.AppUserServiceImpl;
|
||||||
import com.ruoyi.cms.util.StringUtil;
|
import com.ruoyi.cms.util.StringUtil;
|
||||||
|
import com.ruoyi.common.config.RuoYiConfig;
|
||||||
import com.ruoyi.common.core.domain.entity.AppUser;
|
import com.ruoyi.common.core.domain.entity.AppUser;
|
||||||
import com.ruoyi.common.core.domain.entity.tymh.wwToken.WwTokenResult;
|
import com.ruoyi.common.core.domain.entity.tymh.wwToken.WwTokenResult;
|
||||||
import com.ruoyi.common.core.domain.entity.tymh.wwToken.WwUserLogin;
|
import com.ruoyi.common.core.domain.entity.tymh.wwToken.WwUserLogin;
|
||||||
@@ -166,6 +171,7 @@ public class SysLoginController
|
|||||||
public AjaxResult getInfo()
|
public AjaxResult getInfo()
|
||||||
{
|
{
|
||||||
SysUser user = SecurityUtils.getLoginUser().getUser();
|
SysUser user = SecurityUtils.getLoginUser().getUser();
|
||||||
|
normalizeMissingLocalAvatar(user);
|
||||||
// 角色集合
|
// 角色集合
|
||||||
Set<String> roles = permissionService.getRolePermission(user);
|
Set<String> roles = permissionService.getRolePermission(user);
|
||||||
// 权限集合
|
// 权限集合
|
||||||
@@ -189,6 +195,41 @@ public class SysLoginController
|
|||||||
return ajax;
|
return ajax;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 本地头像文件被清理后,不能把已失效的静态地址继续交给浏览器。
|
||||||
|
* 外部 HTTPS 头像不在本方法处理范围内,避免改变第三方资源语义。
|
||||||
|
*/
|
||||||
|
private void normalizeMissingLocalAvatar(SysUser user)
|
||||||
|
{
|
||||||
|
if (user == null || StringUtils.isEmpty(user.getAvatar())
|
||||||
|
|| !user.getAvatar().startsWith(Constants.RESOURCE_PREFIX + "/"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String profile = RuoYiConfig.getProfile();
|
||||||
|
if (StringUtils.isEmpty(profile))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Path profileRoot = Paths.get(profile).toAbsolutePath().normalize();
|
||||||
|
Path relativeAvatar = Paths.get(user.getAvatar()
|
||||||
|
.substring(Constants.RESOURCE_PREFIX.length() + 1)).normalize();
|
||||||
|
Path avatarFile = profileRoot.resolve(relativeAvatar).normalize();
|
||||||
|
if (!avatarFile.startsWith(profileRoot) || !Files.isRegularFile(avatarFile))
|
||||||
|
{
|
||||||
|
user.setAvatar("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (InvalidPathException | SecurityException exception)
|
||||||
|
{
|
||||||
|
user.setAvatar("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取路由信息
|
* 获取路由信息
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -87,8 +87,10 @@ spring:
|
|||||||
multi-statement-allow: true
|
multi-statement-allow: true
|
||||||
redis:
|
redis:
|
||||||
# 本地
|
# 本地
|
||||||
host: 127.0.0.1
|
#host: 127.0.0.1
|
||||||
port: 6379
|
#port: 6379
|
||||||
|
host: 124.243.245.42
|
||||||
|
port: 5379
|
||||||
# 数据库索引
|
# 数据库索引
|
||||||
database: 0
|
database: 0
|
||||||
# 密码(本地通常无密码)
|
# 密码(本地通常无密码)
|
||||||
|
|||||||
@@ -240,6 +240,7 @@ public class AppJobController extends BaseController
|
|||||||
String errorMsg = "描述中包含敏感词:" + String.join("、", sensitiveWords);
|
String errorMsg = "描述中包含敏感词:" + String.join("、", sensitiveWords);
|
||||||
return AjaxResult.error(errorMsg, sensitiveWords);
|
return AjaxResult.error(errorMsg, sensitiveWords);
|
||||||
}
|
}
|
||||||
|
job.setDataSource("1");//系统自录
|
||||||
jobService.publishJob(job);
|
jobService.publishJob(job);
|
||||||
return success();
|
return success();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,82 @@
|
|||||||
|
package com.ruoyi.cms.controller.app;
|
||||||
|
|
||||||
|
import com.ruoyi.cms.domain.policy.PolicyConsultRecord;
|
||||||
|
import com.ruoyi.cms.domain.policy.PolicyConsultReplyDTO;
|
||||||
|
import com.ruoyi.cms.domain.policy.PolicyConsultSatisfactionDTO;
|
||||||
|
import com.ruoyi.cms.domain.policy.PolicyConsultSubmitDTO;
|
||||||
|
import com.ruoyi.cms.service.policy.IPolicyConsultRecordService;
|
||||||
|
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.utils.SiteSecurityUtils;
|
||||||
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
|
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.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/app/policyConsultRecord")
|
||||||
|
@Api(tags = "移动端接口:政策咨询记录")
|
||||||
|
public class AppPolicyConsultRecordController extends BaseController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IPolicyConsultRecordService policyConsultRecordService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存用户提交留言咨询
|
||||||
|
*/
|
||||||
|
@ApiOperation("用户提交留言咨询")
|
||||||
|
@PostMapping("/submit")
|
||||||
|
public AjaxResult save(@RequestBody PolicyConsultSubmitDTO policyConsultSubmitDTO){
|
||||||
|
log.info("用户提交留言咨询...小程序端");
|
||||||
|
if(!SiteSecurityUtils.isLogin()){
|
||||||
|
return AjaxResult.error("用户未登录!");
|
||||||
|
}
|
||||||
|
if(SiteSecurityUtils.getUserId() == null){
|
||||||
|
return AjaxResult.error("获取用户ID失败!");
|
||||||
|
}
|
||||||
|
policyConsultSubmitDTO.setUserId(SiteSecurityUtils.getUserId());
|
||||||
|
return toAjax(policyConsultRecordService.insert(policyConsultSubmitDTO));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户查看【自己】的留言咨询记录(留言板只能看自己)
|
||||||
|
*/
|
||||||
|
@ApiOperation("用户查看【自己】的留言咨询记录(留言板只能看自己)")
|
||||||
|
@GetMapping("/my/list/{policyId}")
|
||||||
|
public TableDataInfo getMyConsult(@ApiParam("政策ID") @PathVariable Long policyId){
|
||||||
|
startPage();
|
||||||
|
if(SiteSecurityUtils.getUserId() == null){
|
||||||
|
throw new RuntimeException("用户ID不能为空");
|
||||||
|
}
|
||||||
|
Long userId = SiteSecurityUtils.getUserId();
|
||||||
|
List<PolicyConsultRecord> list = policyConsultRecordService.getUserOwnConsultList(policyId,userId);
|
||||||
|
return getDataTable(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户对咨询进行满意度评价
|
||||||
|
*/
|
||||||
|
@ApiOperation("用户对咨询进行满意度评价")
|
||||||
|
@PostMapping("/satisfaction")
|
||||||
|
public AjaxResult satisfaction(@RequestBody PolicyConsultSatisfactionDTO dto){
|
||||||
|
if(!SiteSecurityUtils.isLogin()){
|
||||||
|
return AjaxResult.error("用户未登录!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(SiteSecurityUtils.getUserId() == null){
|
||||||
|
return AjaxResult.error("获取用户ID失败!");
|
||||||
|
}
|
||||||
|
dto.setUserId(SiteSecurityUtils.getUserId());
|
||||||
|
return toAjax(policyConsultRecordService.submitSatisfaction(dto));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -147,6 +147,7 @@ public class CmsJobController extends BaseController
|
|||||||
return AjaxResult.error(errorMsg, sensitiveWords);
|
return AjaxResult.error(errorMsg, sensitiveWords);
|
||||||
}
|
}
|
||||||
job.setJobStatus("0");
|
job.setJobStatus("0");
|
||||||
|
job.setDataSource("1");//系统自录
|
||||||
// 无敏感词,执行插入
|
// 无敏感词,执行插入
|
||||||
return toAjax(jobService.insertJob(job));
|
return toAjax(jobService.insertJob(job));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,101 @@
|
|||||||
|
package com.ruoyi.cms.controller.cms;
|
||||||
|
|
||||||
|
import com.ruoyi.cms.domain.policy.*;
|
||||||
|
import com.ruoyi.cms.service.policy.IPolicyConsultRecordService;
|
||||||
|
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.utils.SecurityUtils;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import io.swagger.annotations.ApiParam;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/cms/policyConsultRecord")
|
||||||
|
@Api(tags = "CMS:政策咨询记录管理")
|
||||||
|
public class CmsPolicyConsultRecordController extends BaseController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IPolicyConsultRecordService policyConsultRecordService;
|
||||||
|
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(CmsPolicyConsultRecordController.class);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存用户提交留言咨询
|
||||||
|
*/
|
||||||
|
@ApiOperation("用户提交留言咨询")
|
||||||
|
@PostMapping("/submit")
|
||||||
|
public AjaxResult save(@RequestBody PolicyConsultSubmitDTO policyConsultSubmitDTO){
|
||||||
|
log.info("用户提交留言咨询...pc端");
|
||||||
|
if(!SecurityUtils.isLogin()){
|
||||||
|
return AjaxResult.error("用户未登录!");
|
||||||
|
}
|
||||||
|
if(SecurityUtils.getAppuserId() == null){
|
||||||
|
return AjaxResult.error("获取用户ID失败!");
|
||||||
|
}
|
||||||
|
policyConsultSubmitDTO.setUserId(SecurityUtils.getAppuserId());
|
||||||
|
return toAjax(policyConsultRecordService.insert(policyConsultSubmitDTO));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户查看【自己】的留言咨询记录(留言板只能看自己)
|
||||||
|
*/
|
||||||
|
@ApiOperation("用户查看【自己】的留言咨询记录(留言板只能看自己)")
|
||||||
|
@GetMapping("/my/list/{policyId}")
|
||||||
|
public TableDataInfo getMyConsult(@ApiParam("政策ID") @PathVariable Long policyId){
|
||||||
|
startPage();
|
||||||
|
if(SecurityUtils.getAppuserId() == null){
|
||||||
|
throw new RuntimeException("用户ID不能为空");
|
||||||
|
}
|
||||||
|
Long userId = SecurityUtils.getAppuserId();
|
||||||
|
List<PolicyConsultRecord> list = policyConsultRecordService.getUserOwnConsultList(policyId,userId);
|
||||||
|
return getDataTable(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户对咨询进行满意度评价
|
||||||
|
*/
|
||||||
|
@ApiOperation("用户对咨询进行满意度评价")
|
||||||
|
@PostMapping("/satisfaction")
|
||||||
|
public AjaxResult satisfaction(@RequestBody PolicyConsultSatisfactionDTO dto){
|
||||||
|
if(!SecurityUtils.isLogin()){
|
||||||
|
return AjaxResult.error("用户未登录!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(SecurityUtils.getAppuserId() == null){
|
||||||
|
return AjaxResult.error("获取用户ID失败!");
|
||||||
|
}
|
||||||
|
dto.setUserId(SecurityUtils.getAppuserId());
|
||||||
|
return toAjax(policyConsultRecordService.submitSatisfaction(dto));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ========== 管理员接口 ==========
|
||||||
|
/**
|
||||||
|
* 管理员回复留言咨询
|
||||||
|
*/
|
||||||
|
@ApiOperation("管理员回复留言咨询")
|
||||||
|
@PostMapping("/reply")
|
||||||
|
public AjaxResult reply(@RequestBody PolicyConsultReplyDTO dto){
|
||||||
|
return toAjax(policyConsultRecordService.replyConsult(dto));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 管理员查看全部咨询存档记录
|
||||||
|
*/
|
||||||
|
@ApiOperation("管理员查看全部咨询存档记录")
|
||||||
|
@PostMapping("/list")
|
||||||
|
public TableDataInfo allRecord(@RequestBody PolicyConsultQueryDTO query){
|
||||||
|
startPage();
|
||||||
|
List<PolicyConsultRecord> list = policyConsultRecordService.getAllConsultRecord(query);
|
||||||
|
return getDataTable(list);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -243,4 +243,15 @@ public class IndustryController extends BaseController
|
|||||||
updateIndustry.setParentId(parentId);
|
updateIndustry.setParentId(parentId);
|
||||||
industryService.updateIndustry(updateIndustry);
|
industryService.updateIndustry(updateIndustry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询第一级行业大类
|
||||||
|
*/
|
||||||
|
@ApiOperation("查询第一级行业大类")
|
||||||
|
@GetMapping("/first-level")
|
||||||
|
public AjaxResult getFirstLevelIndustries()
|
||||||
|
{
|
||||||
|
List<Industry> list = industryService.selectFirstLevelIndustryList();
|
||||||
|
return success(list);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ public class Job extends BaseEntity
|
|||||||
@ApiModelProperty("是否发布 0未发布 1发布")
|
@ApiModelProperty("是否发布 0未发布 1发布")
|
||||||
private Integer isPublish;
|
private Integer isPublish;
|
||||||
|
|
||||||
@ApiModelProperty("数据来源 5本地石河子模板导入")
|
@ApiModelProperty("数据来源 5本地石河子模板导入;本地录入1;互联网岗位上传2;")
|
||||||
private String dataSource;
|
private String dataSource;
|
||||||
|
|
||||||
@ApiModelProperty("岗位链接")
|
@ApiModelProperty("岗位链接")
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package com.ruoyi.cms.domain.policy;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ApiModel("政策咨询查询")
|
||||||
|
public class PolicyConsultQueryDTO {
|
||||||
|
|
||||||
|
@ApiModelProperty("页码")
|
||||||
|
private Integer pageNum = 1;
|
||||||
|
|
||||||
|
@ApiModelProperty("每页条数")
|
||||||
|
private Integer pageSize = 10;
|
||||||
|
|
||||||
|
@ApiModelProperty("政策名称搜索关键词")
|
||||||
|
private String searchValue;
|
||||||
|
|
||||||
|
@ApiModelProperty("咨询状态 PENDING待回复、REPLIED已回复")
|
||||||
|
private String consultStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("满意度(0-5分)")
|
||||||
|
private Integer satisfaction;
|
||||||
|
|
||||||
|
// 咨询起始时间
|
||||||
|
@ApiModelProperty("咨询起始时间")
|
||||||
|
private Date beginConsultTime;
|
||||||
|
// 咨询结束时间
|
||||||
|
@ApiModelProperty("咨询结束时间")
|
||||||
|
private Date endConsultTime;
|
||||||
|
}
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
package com.ruoyi.cms.domain.policy;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
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.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ApiModel("政策咨询记录")
|
||||||
|
public class PolicyConsultRecord extends BaseEntity {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
/** 咨询渠道 - 留言板 */
|
||||||
|
public static final String CHANNEL_MESSAGE_BOARD = "MESSAGE_BOARD";
|
||||||
|
/** 咨询渠道 - 在线客服 */
|
||||||
|
public static final String CHANNEL_ONLINE_CHAT = "ONLINE_CHAT";
|
||||||
|
/** 状态 - 待回复 */
|
||||||
|
public static final String STATUS_PENDING = "PENDING";
|
||||||
|
/** 状态 - 已回复 */
|
||||||
|
public static final String STATUS_REPLIED = "REPLIED";
|
||||||
|
/** 状态 - 已办结 */
|
||||||
|
public static final String STATUS_CLOSED = "CLOSED";
|
||||||
|
/** 主键 */
|
||||||
|
@ApiModelProperty("主键")
|
||||||
|
@TableId(value = "id",type = IdType.AUTO)
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/** 咨询用户ID */
|
||||||
|
@ApiModelProperty("咨询用户ID")
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
|
/** 管理员ID */
|
||||||
|
@ApiModelProperty("管理员ID")
|
||||||
|
private Long adminId;
|
||||||
|
|
||||||
|
/** 浏览咨询对应的政策ID */
|
||||||
|
@ApiModelProperty("浏览咨询对应的政策ID")
|
||||||
|
private Long policyId;
|
||||||
|
|
||||||
|
/** 政策名称 */
|
||||||
|
@ApiModelProperty("政策名称")
|
||||||
|
private String policyName;
|
||||||
|
|
||||||
|
/** 咨询渠道:MESSAGE_BOARD 留言板、ONLINE_CHAT在线客服等 */
|
||||||
|
@ApiModelProperty("咨询渠道:MESSAGE_BOARD 留言板")
|
||||||
|
private String consultChannel;
|
||||||
|
|
||||||
|
/** 用户咨询问题 */
|
||||||
|
@ApiModelProperty("用户咨询问题")
|
||||||
|
private String questionContent;
|
||||||
|
|
||||||
|
/** 管理员回复内容 */
|
||||||
|
@ApiModelProperty("管理员回复内容")
|
||||||
|
private String replyContent;
|
||||||
|
|
||||||
|
/** 状态 PENDING待回复、REPLIED已回复、CLOSED已办结 */
|
||||||
|
@ApiModelProperty("状态 PENDING待回复、REPLIED已回复、CLOSED已办结")
|
||||||
|
private String consultStatus;
|
||||||
|
|
||||||
|
/** 咨询提交时间 */
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
@ApiModelProperty("咨询提交时间")
|
||||||
|
private Date consultTime;
|
||||||
|
|
||||||
|
/** 回复时间 */
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
@ApiModelProperty("回复时间")
|
||||||
|
private Date replyTime;
|
||||||
|
|
||||||
|
/** 用户满意度 五颗星 每颗星代表1分 */
|
||||||
|
@ApiModelProperty("用户满意度 五颗星 每颗星代表1分")
|
||||||
|
private Integer satisfaction;
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package com.ruoyi.cms.domain.policy;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ApiModel("管理员回复")
|
||||||
|
public class PolicyConsultReplyDTO {
|
||||||
|
|
||||||
|
@NotNull(message = "记录ID不能为空")
|
||||||
|
@ApiModelProperty(value = "记录ID", required = true, example = "1")
|
||||||
|
private Long recordId;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "回复内容", required = true, example = "回复内容")
|
||||||
|
@NotNull(message = "回复内容不能为空")
|
||||||
|
private String replyContent;
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package com.ruoyi.cms.domain.policy;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ApiModel("政策咨询满意度评价")
|
||||||
|
public class PolicyConsultSatisfactionDTO {
|
||||||
|
|
||||||
|
@NotNull(message = "记录ID不能为空")
|
||||||
|
@ApiModelProperty(value = "记录ID", required = true, example = "1")
|
||||||
|
private Long recordId;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "满意度", required = true, example = "1")
|
||||||
|
@NotNull(message = "满意度不能为空")
|
||||||
|
private Integer satisfaction;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "用户ID")
|
||||||
|
private Long userId;
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package com.ruoyi.cms.domain.policy;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ApiModel("用户提交留言")
|
||||||
|
public class PolicyConsultSubmitDTO {
|
||||||
|
|
||||||
|
@NotNull(message = "政策ID不能为空")
|
||||||
|
@ApiModelProperty(value = "政策ID", required = true, example = "1")
|
||||||
|
private Long policyId;
|
||||||
|
|
||||||
|
@NotNull(message = "咨询问题不能为空")
|
||||||
|
@ApiModelProperty(value = "咨询问题", required = true, example = "咨询问题")
|
||||||
|
private String questionContent;
|
||||||
|
|
||||||
|
@NotNull(message = "咨询渠道不能为空( 渠道固定传 MESSAGE_BOARD(留言板渠道))")
|
||||||
|
@ApiModelProperty(value = "咨询渠道", required = true, example = "MESSAGE_BOARD")
|
||||||
|
private String consultChannel;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "咨询用户ID")
|
||||||
|
private Long userId;
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModel;
|
|||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
@@ -73,4 +74,36 @@ public class PolicyInfo extends BaseEntity {
|
|||||||
|
|
||||||
@ApiModelProperty("状态(0启用 1禁用)")
|
@ApiModelProperty("状态(0启用 1禁用)")
|
||||||
private String status;
|
private String status;
|
||||||
|
|
||||||
|
@ApiModelProperty("行业大类")
|
||||||
|
private String industryBigType;
|
||||||
|
|
||||||
|
@ApiModelProperty("行业大类名称")
|
||||||
|
private String industryBigTypeName;
|
||||||
|
|
||||||
|
@ApiModelProperty("政策文号")
|
||||||
|
private String docNo;
|
||||||
|
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||||
|
@ApiModelProperty("生效日期")
|
||||||
|
private Date effectiveTime;
|
||||||
|
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||||
|
@ApiModelProperty("失效日期")
|
||||||
|
private Date expireTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("政策背景")
|
||||||
|
private String policyBackground;
|
||||||
|
|
||||||
|
@ApiModelProperty("目标宗旨")
|
||||||
|
private String policyPurpose;
|
||||||
|
|
||||||
|
@ApiModelProperty("具体条款")
|
||||||
|
private String policyClause;
|
||||||
|
|
||||||
|
@ApiModelProperty("实施细则")
|
||||||
|
private String implementRule;
|
||||||
|
|
||||||
|
@ApiModelProperty("电子邮件")
|
||||||
|
private String email;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package com.ruoyi.cms.mapper.policy;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.ruoyi.cms.domain.policy.PolicyConsultRecord;
|
||||||
|
|
||||||
|
public interface PolicyConsultRecordMapper extends BaseMapper<PolicyConsultRecord> {
|
||||||
|
|
||||||
|
int insert(PolicyConsultRecord policyConsultRecord);
|
||||||
|
}
|
||||||
@@ -61,4 +61,10 @@ public interface IIndustryService
|
|||||||
|
|
||||||
void importData();
|
void importData();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询第一级行业大类
|
||||||
|
*
|
||||||
|
* @return 行业集合
|
||||||
|
*/
|
||||||
|
public List<Industry> selectFirstLevelIndustryList();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,9 @@ public class IndustryServiceImpl extends ServiceImpl<IndustryMapper,Industry> im
|
|||||||
@Autowired
|
@Autowired
|
||||||
private IndustryMapper industryMapper;
|
private IndustryMapper industryMapper;
|
||||||
|
|
||||||
|
/** 行业根节点父ID */
|
||||||
|
public static final Long INDUSTRY_ROOT_PARENT_ID = 0L;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询行业
|
* 查询行业
|
||||||
*
|
*
|
||||||
@@ -234,4 +237,12 @@ public class IndustryServiceImpl extends ServiceImpl<IndustryMapper,Industry> im
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Industry> selectFirstLevelIndustryList() {
|
||||||
|
Industry industry = new Industry();
|
||||||
|
industry.setParentId(INDUSTRY_ROOT_PARENT_ID);
|
||||||
|
industry.setStatus("0");
|
||||||
|
return industryMapper.selectIndustryList(industry);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -297,6 +297,8 @@ public class JobServiceImpl extends ServiceImpl<JobMapper,Job> implements IJobSe
|
|||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
job.setFilesList(processedFiles);
|
job.setFilesList(processedFiles);
|
||||||
|
//浏览量默认添加+1
|
||||||
|
this.view(jobId);
|
||||||
|
|
||||||
return job;
|
return job;
|
||||||
}
|
}
|
||||||
@@ -1009,6 +1011,7 @@ public class JobServiceImpl extends ServiceImpl<JobMapper,Job> implements IJobSe
|
|||||||
job.setCreateBy(string);
|
job.setCreateBy(string);
|
||||||
job.setCreateTime(formattedDate);
|
job.setCreateTime(formattedDate);
|
||||||
job.setRowId(Long.valueOf(rowWork.getId()));
|
job.setRowId(Long.valueOf(rowWork.getId()));
|
||||||
|
job.setDataSource("2");//互联网岗位上传
|
||||||
|
|
||||||
jobBatch.add(job);
|
jobBatch.add(job);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.ruoyi.cms.service.policy;
|
||||||
|
|
||||||
|
import com.ruoyi.cms.domain.policy.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface IPolicyConsultRecordService {
|
||||||
|
|
||||||
|
int insert(PolicyConsultSubmitDTO policyConsultSubmitDTO);
|
||||||
|
|
||||||
|
int replyConsult(PolicyConsultReplyDTO policyConsultReplyDTO);
|
||||||
|
|
||||||
|
int submitSatisfaction(PolicyConsultSatisfactionDTO dto);
|
||||||
|
|
||||||
|
List<PolicyConsultRecord> getUserOwnConsultList(Long policyId, Long userId);
|
||||||
|
|
||||||
|
List<PolicyConsultRecord> getAllConsultRecord(PolicyConsultQueryDTO queryDTO);
|
||||||
|
}
|
||||||
@@ -0,0 +1,128 @@
|
|||||||
|
package com.ruoyi.cms.service.policy.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import com.ruoyi.cms.domain.policy.*;
|
||||||
|
import com.ruoyi.cms.mapper.policy.PolicyConsultRecordMapper;
|
||||||
|
import com.ruoyi.cms.mapper.policy.PolicyInfoMapper;
|
||||||
|
import com.ruoyi.cms.service.policy.IPolicyConsultRecordService;
|
||||||
|
import com.ruoyi.common.utils.DateUtils;
|
||||||
|
import com.ruoyi.common.utils.SecurityUtils;
|
||||||
|
import com.ruoyi.common.utils.SiteSecurityUtils;
|
||||||
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static com.ruoyi.common.utils.DateUtils.YYYY_MM_DD_HH_MM_SS;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class PolicyConsultRecordServiceImpl extends ServiceImpl<PolicyConsultRecordMapper, PolicyConsultRecord> implements IPolicyConsultRecordService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private PolicyConsultRecordMapper policyConsultRecordMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private PolicyInfoMapper policyInfoMapper;
|
||||||
|
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(PolicyConsultRecordServiceImpl.class);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int insert(PolicyConsultSubmitDTO policyConsultSubmitDTO) {
|
||||||
|
log.info("开始执行保存...");
|
||||||
|
PolicyInfo policyInfo = policyInfoMapper.selectPolicyInfoById(policyConsultSubmitDTO.getPolicyId());
|
||||||
|
if (policyInfo == null) {
|
||||||
|
throw new RuntimeException("政策不存在");
|
||||||
|
}
|
||||||
|
PolicyConsultRecord record = new PolicyConsultRecord();
|
||||||
|
record.setUserId(policyConsultSubmitDTO.getUserId());
|
||||||
|
record.setPolicyId(policyConsultSubmitDTO.getPolicyId());
|
||||||
|
record.setPolicyName(policyInfo.getZcmc());
|
||||||
|
record.setConsultChannel(policyConsultSubmitDTO.getConsultChannel());
|
||||||
|
record.setQuestionContent(policyConsultSubmitDTO.getQuestionContent());
|
||||||
|
record.setConsultStatus(PolicyConsultRecord.STATUS_PENDING);
|
||||||
|
record.setConsultTime(new Date());
|
||||||
|
return policyConsultRecordMapper.insert(record);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 2.管理员回复咨询
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int replyConsult(PolicyConsultReplyDTO dto) {
|
||||||
|
PolicyConsultRecord record = policyConsultRecordMapper.selectById(dto.getRecordId());
|
||||||
|
record.setReplyContent(dto.getReplyContent());
|
||||||
|
record.setConsultStatus(PolicyConsultRecord.STATUS_REPLIED);
|
||||||
|
record.setReplyTime(new Date());
|
||||||
|
record.setAdminId(SecurityUtils.getUserId());//管理员id
|
||||||
|
record.setUpdateBy(SecurityUtils.getUsername());//管理员名称
|
||||||
|
record.setUpdateTime(DateUtils.dateTimeNow(YYYY_MM_DD_HH_MM_SS));
|
||||||
|
return policyConsultRecordMapper.updateById(record);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 3.用户评价满意度(存档满意度信息)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int submitSatisfaction(PolicyConsultSatisfactionDTO dto) {
|
||||||
|
PolicyConsultRecord record = policyConsultRecordMapper.selectById(dto.getRecordId());
|
||||||
|
// 权限校验:只能评价自己的咨询记录
|
||||||
|
if (!record.getUserId().equals(dto.getUserId())){
|
||||||
|
throw new RuntimeException("无权操作");
|
||||||
|
}
|
||||||
|
record.setSatisfaction(dto.getSatisfaction());
|
||||||
|
record.setUpdateTime(DateUtils.dateTimeNow(YYYY_MM_DD_HH_MM_SS));
|
||||||
|
return policyConsultRecordMapper.updateById(record);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 4.【重要】用户查询自己的留言咨询记录
|
||||||
|
* 需求备注:留言板自己看自己,只能查询userId匹配的数据
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<PolicyConsultRecord> getUserOwnConsultList(Long policyId, Long userId) {
|
||||||
|
LambdaQueryWrapper<PolicyConsultRecord> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
wrapper.eq(PolicyConsultRecord::getUserId, userId);
|
||||||
|
// 可选:按政策筛选
|
||||||
|
if(policyId != null){
|
||||||
|
wrapper.eq(PolicyConsultRecord::getPolicyId, policyId);
|
||||||
|
}
|
||||||
|
wrapper.orderByDesc(PolicyConsultRecord::getConsultTime);
|
||||||
|
return policyConsultRecordMapper.selectList(wrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 管理员后台:查询全部咨询存档记录(用于台账查看)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<PolicyConsultRecord> getAllConsultRecord(PolicyConsultQueryDTO query) {
|
||||||
|
LambdaQueryWrapper<PolicyConsultRecord> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
// 状态
|
||||||
|
if(StringUtils.isNotEmpty(query.getConsultStatus())){
|
||||||
|
wrapper.eq(PolicyConsultRecord::getConsultStatus, query.getConsultStatus());
|
||||||
|
}
|
||||||
|
// 满意度
|
||||||
|
if(query.getSatisfaction() != null){
|
||||||
|
wrapper.eq(PolicyConsultRecord::getSatisfaction, query.getSatisfaction());
|
||||||
|
}
|
||||||
|
// 政策
|
||||||
|
if(StringUtils.isNotEmpty(query.getSearchValue())){
|
||||||
|
wrapper.like(PolicyConsultRecord::getPolicyName, query.getSearchValue());
|
||||||
|
}
|
||||||
|
// 时间区间
|
||||||
|
if(query.getBeginConsultTime() != null){
|
||||||
|
wrapper.ge(PolicyConsultRecord::getConsultTime, query.getBeginConsultTime());
|
||||||
|
}
|
||||||
|
if(query.getEndConsultTime() != null){
|
||||||
|
wrapper.le(PolicyConsultRecord::getConsultTime, query.getEndConsultTime());
|
||||||
|
}
|
||||||
|
// 排序:最新咨询靠前
|
||||||
|
wrapper.orderByDesc(PolicyConsultRecord::getConsultTime);
|
||||||
|
return policyConsultRecordMapper.selectList(wrapper);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,7 +5,9 @@ import com.github.pagehelper.PageInfo;
|
|||||||
import com.ruoyi.cms.domain.policy.PolicyInfo;
|
import com.ruoyi.cms.domain.policy.PolicyInfo;
|
||||||
import com.ruoyi.cms.domain.policy.PolicyInfoQuery;
|
import com.ruoyi.cms.domain.policy.PolicyInfoQuery;
|
||||||
import com.ruoyi.cms.mapper.policy.PolicyInfoMapper;
|
import com.ruoyi.cms.mapper.policy.PolicyInfoMapper;
|
||||||
|
import com.ruoyi.cms.service.IIndustryService;
|
||||||
import com.ruoyi.cms.service.policy.IPolicyInfoService;
|
import com.ruoyi.cms.service.policy.IPolicyInfoService;
|
||||||
|
import com.ruoyi.common.core.domain.entity.Industry;
|
||||||
import com.ruoyi.common.core.page.TableDataInfo;
|
import com.ruoyi.common.core.page.TableDataInfo;
|
||||||
import com.ruoyi.common.utils.SecurityUtils;
|
import com.ruoyi.common.utils.SecurityUtils;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -29,6 +31,12 @@ public class PolicyInfoServiceImpl implements IPolicyInfoService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private PolicyInfoMapper policyInfoMapper;
|
private PolicyInfoMapper policyInfoMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IIndustryService industryService;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TableDataInfo getPortalList(PolicyInfoQuery query) {
|
public TableDataInfo getPortalList(PolicyInfoQuery query) {
|
||||||
PageHelper.startPage(query.getPageNum(), query.getPageSize());
|
PageHelper.startPage(query.getPageNum(), query.getPageSize());
|
||||||
@@ -58,7 +66,10 @@ public class PolicyInfoServiceImpl implements IPolicyInfoService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PolicyInfo getDetail(Long id) {
|
public PolicyInfo getDetail(Long id) {
|
||||||
return policyInfoMapper.selectPolicyInfoById(id);
|
PolicyInfo policyInfo = policyInfoMapper.selectPolicyInfoById(id);
|
||||||
|
Industry industry = industryService.selectIndustryByIndustryId(Long.valueOf(policyInfo.getIndustryBigType()));
|
||||||
|
policyInfo.setIndustryBigTypeName(industry.getIndustryName());
|
||||||
|
return policyInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -37,6 +37,22 @@ public class JobRecommendUtil {
|
|||||||
public static final Float EXP_MATCH_LOW1 = 2F;
|
public static final Float EXP_MATCH_LOW1 = 2F;
|
||||||
public static final Float EXP_MATCH_LOWER = 1F;
|
public static final Float EXP_MATCH_LOWER = 1F;
|
||||||
|
|
||||||
|
private static final Map<Character, Character> CHINA_NUM_MAP;
|
||||||
|
|
||||||
|
static {
|
||||||
|
CHINA_NUM_MAP = new HashMap<>();
|
||||||
|
CHINA_NUM_MAP.put('零', '0');
|
||||||
|
CHINA_NUM_MAP.put('一', '1');
|
||||||
|
CHINA_NUM_MAP.put('二', '2');
|
||||||
|
CHINA_NUM_MAP.put('三', '3');
|
||||||
|
CHINA_NUM_MAP.put('四', '4');
|
||||||
|
CHINA_NUM_MAP.put('五', '5');
|
||||||
|
CHINA_NUM_MAP.put('六', '6');
|
||||||
|
CHINA_NUM_MAP.put('七', '7');
|
||||||
|
CHINA_NUM_MAP.put('八', '8');
|
||||||
|
CHINA_NUM_MAP.put('九', '9');
|
||||||
|
}
|
||||||
|
|
||||||
// =====================基础计算方法=====================
|
// =====================基础计算方法=====================
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -48,17 +64,62 @@ public class JobRecommendUtil {
|
|||||||
if (StrUtil.isBlank(startDateStr)) {
|
if (StrUtil.isBlank(startDateStr)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
LocalDate start = LocalDate.parse(startDateStr + "-01");
|
LocalDate start = parseToFirstDayOfMonth(startDateStr);
|
||||||
LocalDate end;
|
LocalDate end;
|
||||||
if (StrUtil.isBlank(endDateStr)) {
|
if (StrUtil.isBlank(endDateStr)) {
|
||||||
end = LocalDate.now();
|
end = LocalDate.now();
|
||||||
} else {
|
} else {
|
||||||
end = LocalDate.parse(endDateStr + "-01");
|
end = parseToFirstDayOfMonth(endDateStr);
|
||||||
}
|
}
|
||||||
Period period = Period.between(start, end);
|
Period period = Period.between(start, end);
|
||||||
return period.getYears() * 12 + period.getMonths();
|
return period.getYears() * 12 + period.getMonths();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 兼容两种格式:yyyy-MM / yyyy-MM-dd,返回当月1号
|
||||||
|
*/
|
||||||
|
private static LocalDate parseToFirstDayOfMonth(String dateStr) {
|
||||||
|
try {
|
||||||
|
String source = dateStr.trim();
|
||||||
|
//中文年份转阿拉伯数字:二零一六 → 2016
|
||||||
|
source = convertChinaYearToNum(source);
|
||||||
|
|
||||||
|
LocalDate date;
|
||||||
|
if (source.matches("^\\d{4}$")) {
|
||||||
|
// 仅年份 2016 → 2016-01-01
|
||||||
|
date = LocalDate.parse(source + "-01-01");
|
||||||
|
} else if (source.matches("^\\d{4}-\\d{2}$")) {
|
||||||
|
// yyyy-MM
|
||||||
|
date = LocalDate.parse(source + "-01");
|
||||||
|
} else if (source.matches("^\\d{4}-\\d{2}-\\d{2}$")) {
|
||||||
|
// yyyy-MM-dd
|
||||||
|
date = LocalDate.parse(source);
|
||||||
|
} else {
|
||||||
|
throw new IllegalArgumentException("无法识别日期格式:" + dateStr);
|
||||||
|
}
|
||||||
|
return date.withDayOfMonth(1);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new IllegalArgumentException("日期解析失败,原始值:" + dateStr
|
||||||
|
+ ",支持格式:2016、2016-09、2016-09-09、二零一六", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 中文年份字符串转数字年份
|
||||||
|
* 例:二零一六 → 2016;二零二五-03 保留后面横杠
|
||||||
|
*/
|
||||||
|
private static String convertChinaYearToNum(String str) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
for (char c : str.toCharArray()) {
|
||||||
|
if (CHINA_NUM_MAP.containsKey(c)) {
|
||||||
|
sb.append(CHINA_NUM_MAP.get(c));
|
||||||
|
} else {
|
||||||
|
sb.append(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 计算全部工作经历总月数(简单累加,不处理时间重叠)
|
* 计算全部工作经历总月数(简单累加,不处理时间重叠)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -44,16 +44,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<result property="missedOutdoorFairCount" column="missed_outdoor_fair_count" />
|
<result property="missedOutdoorFairCount" column="missed_outdoor_fair_count" />
|
||||||
|
|
||||||
<collection property="companyContactList" ofType="com.ruoyi.common.core.domain.entity.CompanyContact"
|
<collection property="companyContactList" ofType="com.ruoyi.common.core.domain.entity.CompanyContact"
|
||||||
resultMap="CompanyContactResult"/>
|
select="selectCompanyContactsById"
|
||||||
|
column="company_id"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<resultMap type="com.ruoyi.common.core.domain.entity.CompanyContact" id="CompanyContactResult">
|
<resultMap type="com.ruoyi.common.core.domain.entity.CompanyContact" id="CompanyContactResult">
|
||||||
<result property="contactPerson" column="con_contact_person"/>
|
<result property="id" column="id" />
|
||||||
<result property="contactPersonPhone" column="con_contact_person_phone"/>
|
<result property="companyId" column="company_id" />
|
||||||
<result property="companyId" column="con_company_id" />
|
<result property="contactPerson" column="contact_person"/>
|
||||||
<result property="id" column="con_company_contact_id" />
|
<result property="contactPersonPhone" column="contact_person_phone"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
|
<select id="selectCompanyContactsById" resultMap="CompanyContactResult">
|
||||||
|
select id, company_id, contact_person, contact_person_phone
|
||||||
|
from company_contact
|
||||||
|
where company_id = #{companyId}
|
||||||
|
and del_flag = '0'
|
||||||
|
</select>
|
||||||
|
|
||||||
<sql id="selectCompanyVo">
|
<sql id="selectCompanyVo">
|
||||||
select company_id, name, location, industry, scale, del_flag, create_by, create_time, update_by, update_time, remark,code,description,nature,company_nature,total_recruitment,registered_address,contact_person,contact_person_phone,is_abnormal,not_pass_reason,status,case when status='2' then update_time else null end reject_time,is_imp_company,imp_company_type,enterprise_type,legal_person,legal_id_card,legal_phone,is_hrs,
|
select company_id, name, location, industry, scale, del_flag, create_by, create_time, update_by, update_time, remark,code,description,nature,company_nature,total_recruitment,registered_address,contact_person,contact_person_phone,is_abnormal,not_pass_reason,status,case when status='2' then update_time else null end reject_time,is_imp_company,imp_company_type,enterprise_type,legal_person,legal_id_card,legal_phone,is_hrs,
|
||||||
(select count(1)
|
(select count(1)
|
||||||
@@ -155,10 +163,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
and fc.del_flag = '0'
|
and fc.del_flag = '0'
|
||||||
and fc.review_status = '1'
|
and fc.review_status = '1'
|
||||||
and f.end_time < CURRENT_TIMESTAMP
|
and f.end_time < CURRENT_TIMESTAMP
|
||||||
and coalesce(a.attendance_status, '0') <> '1') as missed_outdoor_fair_count,
|
and coalesce(a.attendance_status, '0') <> '1') as missed_outdoor_fair_count
|
||||||
cct.contact_person as con_contact_person,cct.contact_person_phone as con_contact_person_phone,
|
from company cp
|
||||||
cct.company_id as con_company_id,cct.id as con_company_contact_id from company cp
|
|
||||||
left join company_contact cct on cp.company_id=cct.company_id and cct.del_flag='0'
|
|
||||||
<where> cp.del_flag = '0'
|
<where> cp.del_flag = '0'
|
||||||
<if test="name != null and name != ''"> and cp.name like concat('%', cast(#{name, jdbcType=VARCHAR} as varchar), '%')</if>
|
<if test="name != null and name != ''"> and cp.name like concat('%', cast(#{name, jdbcType=VARCHAR} as varchar), '%')</if>
|
||||||
<if test="location != null and location != ''"> and cp.location = #{location}</if>
|
<if test="location != null and location != ''"> and cp.location = #{location}</if>
|
||||||
@@ -250,9 +256,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
and fc.review_status = '1'
|
and fc.review_status = '1'
|
||||||
and f.end_time < CURRENT_TIMESTAMP
|
and f.end_time < CURRENT_TIMESTAMP
|
||||||
and coalesce(a.attendance_status, '0') <> '1') as missed_outdoor_fair_count,
|
and coalesce(a.attendance_status, '0') <> '1') as missed_outdoor_fair_count,
|
||||||
su.lc_userid,su.user_id,cct.contact_person as con_contact_person,cct.contact_person_phone as con_contact_person_phone,cct.company_id as con_company_id from company t
|
su.lc_userid,su.user_id from company t
|
||||||
left join sys_user su on t.code=su.id_card and su.del_flag='0'
|
left join sys_user su on t.code=su.id_card and su.del_flag='0'
|
||||||
left join company_contact cct on t.company_id=cct.company_id and cct.del_flag='0'
|
|
||||||
<where> t.del_flag = '0' and su.lc_userid is not null
|
<where> t.del_flag = '0' and su.lc_userid is not null
|
||||||
<if test="name != null and name != ''"> and t.name like concat('%', cast(#{name, jdbcType=VARCHAR} as varchar), '%')</if>
|
<if test="name != null and name != ''"> and t.name like concat('%', cast(#{name, jdbcType=VARCHAR} as varchar), '%')</if>
|
||||||
<if test="scale != null and scale != ''"> and t.scale = #{scale}</if>
|
<if test="scale != null and scale != ''"> and t.scale = #{scale}</if>
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
<?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.PolicyConsultRecordMapper">
|
||||||
|
|
||||||
|
<resultMap type="PolicyConsultRecord" id="PolicyConsultRecordResult">
|
||||||
|
<result property="id" column="id" />
|
||||||
|
<result property="userId" column="user_id" />
|
||||||
|
<result property="adminId" column="admin_id" />
|
||||||
|
<result property="policyId" column="policy_id" />
|
||||||
|
<result property="consultChannel" column="consult_channel" />
|
||||||
|
<result property="questionContent" column="question_content" />
|
||||||
|
<result property="replyContent" column="reply_content" />
|
||||||
|
<result property="consultStatus" column="consult_status" />
|
||||||
|
<result property="consultTime" column="consult_time" />
|
||||||
|
<result property="replyTime" column="reply_time" />
|
||||||
|
<result property="satisfaction" column="satisfaction" />
|
||||||
|
<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="selectPolicyConsultRecordVo">
|
||||||
|
select id, user_id, admin_id, policy_id, consult_channel, question_content, reply_content,
|
||||||
|
consult_status, consult_time, reply_time, satisfaction, create_by, update_time
|
||||||
|
from policy_consult_record
|
||||||
|
</sql>
|
||||||
|
|
||||||
|
<insert id="insertPolicyConsultRecord" useGeneratedKeys="true" keyProperty="id">
|
||||||
|
insert into policy_consult_record (
|
||||||
|
user_id, admin_id, policy_id, consult_channel, question_content,
|
||||||
|
reply_content, consult_status, consult_time, reply_time,
|
||||||
|
satisfaction, create_by, create_time, update_time, del_flag, remark
|
||||||
|
) values (
|
||||||
|
#{userId}, #{adminId}, #{policyId}, #{consultChannel}, #{questionContent},
|
||||||
|
#{replyContent}, #{consultStatus}, #{consultTime}, #{replyTime},
|
||||||
|
#{satisfaction}, #{createBy}, now(), now(), '0', #{remark}
|
||||||
|
)
|
||||||
|
</insert>
|
||||||
|
</mapper>
|
||||||
@@ -26,17 +26,28 @@
|
|||||||
<result property="policyTag" column="policy_tag"/>
|
<result property="policyTag" column="policy_tag"/>
|
||||||
<result property="status" column="status"/>
|
<result property="status" column="status"/>
|
||||||
<result property="policyCategory" column="policy_category"/>
|
<result property="policyCategory" column="policy_category"/>
|
||||||
|
<result property="industryBigType" column="industry_big_type"/>
|
||||||
|
<result property="docNo" column="doc_no"/>
|
||||||
|
<result property="effectiveTime" column="effective_time"/>
|
||||||
|
<result property="expireTime" column="expire_time"/>
|
||||||
|
<result property="policyBackground" column="policy_background"/>
|
||||||
|
<result property="policyPurpose" column="policy_purpose"/>
|
||||||
|
<result property="policyClause" column="policy_clause"/>
|
||||||
|
<result property="implementRule" column="implement_rule"/>
|
||||||
|
<result property="email" column="email"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<sql id="selectPolicyInfoListVo">
|
<sql id="selectPolicyInfoListVo">
|
||||||
select id, zcmc, zclx, zc_level, source_unit, accept_unit, publish_time, view_num, create_time, policy_tag, status,policy_category
|
select id, zcmc, zclx, zc_level, source_unit, accept_unit, publish_time, view_num, create_time, policy_tag, status,policy_category,industry_big_type,
|
||||||
|
doc_no,effective_time,expire_time,policy_background,policy_purpose,policy_clause,implement_rule,email
|
||||||
from policy_info
|
from policy_info
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
<sql id="selectPolicyInfoDetailVo">
|
<sql id="selectPolicyInfoDetailVo">
|
||||||
select id, zcmc, zclx, zc_level, source_unit, accept_unit, publish_time,
|
select id, zcmc, zclx, zc_level, source_unit, accept_unit, publish_time,
|
||||||
zc_content, subsidy_standard, handle_channel, apply_condition,
|
zc_content, subsidy_standard, handle_channel, apply_condition,
|
||||||
file_url, file_name, view_num, create_by, create_time, update_by, update_time, remark, policy_tag, status,policy_category
|
file_url, file_name, view_num, create_by, create_time, update_by, update_time, remark, policy_tag, status,policy_category,industry_big_type,
|
||||||
|
doc_no,effective_time,expire_time,policy_background,policy_purpose,policy_clause,implement_rule,email
|
||||||
from policy_info
|
from policy_info
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
@@ -78,11 +89,13 @@
|
|||||||
insert into policy_info (
|
insert into policy_info (
|
||||||
zcmc, zclx, zc_level, source_unit, accept_unit, publish_time,
|
zcmc, zclx, zc_level, source_unit, accept_unit, publish_time,
|
||||||
zc_content, subsidy_standard, handle_channel, apply_condition,
|
zc_content, subsidy_standard, handle_channel, apply_condition,
|
||||||
file_url, file_name, view_num, create_by, create_time, del_flag, remark, policy_tag, status,policy_category
|
file_url, file_name, view_num, create_by, create_time, del_flag, remark, policy_tag, status,policy_category,industry_big_type,
|
||||||
|
doc_no,effective_time,expire_time,policy_background,policy_purpose,policy_clause,implement_rule,email
|
||||||
) values (
|
) values (
|
||||||
#{zcmc}, #{zclx}, #{zcLevel}, #{sourceUnit}, #{acceptUnit}, #{publishTime},
|
#{zcmc}, #{zclx}, #{zcLevel}, #{sourceUnit}, #{acceptUnit}, #{publishTime},
|
||||||
#{zcContent}, #{subsidyStandard}, #{handleChannel}, #{applyCondition},
|
#{zcContent}, #{subsidyStandard}, #{handleChannel}, #{applyCondition},
|
||||||
#{fileUrl}, #{fileName}, #{viewNum}, #{createBy}, now(), '0', #{remark}, #{policyTag}, #{status},#{policyCategory}
|
#{fileUrl}, #{fileName}, #{viewNum}, #{createBy}, now(), '0', #{remark}, #{policyTag}, #{status},#{policyCategory},#{industryBigType},
|
||||||
|
#{docNo}, #{effectiveTime}, #{expireTime}, #{policyBackground}, #{policyPurpose}, #{policyClause}, #{implementRule}, #{email}
|
||||||
)
|
)
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
@@ -105,6 +118,15 @@
|
|||||||
<if test="policyTag != null">policy_tag = #{policyTag},</if>
|
<if test="policyTag != null">policy_tag = #{policyTag},</if>
|
||||||
<if test="status != null">status = #{status},</if>
|
<if test="status != null">status = #{status},</if>
|
||||||
<if test="policyCategory != null">policy_category = #{policyCategory},</if>
|
<if test="policyCategory != null">policy_category = #{policyCategory},</if>
|
||||||
|
<if test="industryBigType != null">industry_big_type = #{industryBigType},</if>
|
||||||
|
<if test="docNo != null">doc_no = #{docNo},</if>
|
||||||
|
<if test="effectiveTime != null">effective_time = #{effectiveTime},</if>
|
||||||
|
<if test="expireTime != null">expire_time = #{expireTime},</if>
|
||||||
|
<if test="policyBackground != null">policy_background = #{policyBackground},</if>
|
||||||
|
<if test="policyPurpose != null">policy_purpose = #{policyPurpose},</if>
|
||||||
|
<if test="policyClause != null">policy_clause = #{policyClause},</if>
|
||||||
|
<if test="implementRule != null">implement_rule = #{implementRule},</if>
|
||||||
|
<if test="email != null">email = #{email},</if>
|
||||||
update_by = #{updateBy},
|
update_by = #{updateBy},
|
||||||
update_time = now()
|
update_time = now()
|
||||||
</set>
|
</set>
|
||||||
|
|||||||
@@ -143,6 +143,12 @@ public class Company extends BaseEntity
|
|||||||
@ApiModelProperty("是否人力资源机构(Y是,N否)")
|
@ApiModelProperty("是否人力资源机构(Y是,N否)")
|
||||||
private String isHrs;
|
private String isHrs;
|
||||||
|
|
||||||
|
@ApiModelProperty("省")
|
||||||
|
private String companyProvince;
|
||||||
|
|
||||||
|
@ApiModelProperty("市")
|
||||||
|
private String companyCity;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 岗位列表
|
* 岗位列表
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -300,6 +300,8 @@ public class SsoService {
|
|||||||
company.setNature(object.getString("entType"));
|
company.setNature(object.getString("entType"));
|
||||||
company.setDescription(object.getString("entIntro"));
|
company.setDescription(object.getString("entIntro"));
|
||||||
company.setIsHrs(object.getString("isServiceProvider"));//是否是人力资源机构
|
company.setIsHrs(object.getString("isServiceProvider"));//是否是人力资源机构
|
||||||
|
company.setCompanyProvince(object.getString("entProvince"));
|
||||||
|
company.setCompanyCity(object.getString("entCity"));
|
||||||
// company.setScale(object.getString("entSize"));
|
// company.setScale(object.getString("entSize"));
|
||||||
//添加联系人
|
//添加联系人
|
||||||
CompanyContact contact=new CompanyContact();
|
CompanyContact contact=new CompanyContact();
|
||||||
|
|||||||
Reference in New Issue
Block a user