Commit 93c6b93f by 阳浪

我要留言

parent 80594f69
package com.yizhi.training.application.feign;
import com.baomidou.mybatisplus.plugins.Page;
import com.yizhi.training.application.vo.domain.LeaveWordParamVo;
import com.yizhi.training.application.vo.domain.LeaveWordVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
/**
* com.yizhi.training.application.feign
*
* @author yanglang
* @create 2025-01-03 13:38:47
*/
@FeignClient(name = "trainingProject", contextId = "LeaveWordClient")
public interface LeaveWordClient {
@PostMapping("/manage/leaveWord/page")
Page<LeaveWordVo> page(@RequestBody LeaveWordParamVo paramVo);
@PostMapping("/manage/leaveWord/save")
boolean save(@RequestBody LeaveWordVo leaveWordVo);
@GetMapping("/manage/leaveWord/getById")
LeaveWordVo getById(@RequestParam(name = "id")Long id);
@GetMapping("/manage/leaveWord/updateState")
boolean updateState(@RequestParam(name = "id")Long id,@RequestParam(name = "state")Integer state);
@GetMapping("/manage/leaveWord/removeById")
boolean removeById(@RequestParam(name = "id")Long id);
}
package com.yizhi.training.application.vo.domain;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* com.yizhi.training.application.vo.domain
*
* @author yanglang
* @create 2025-01-03 13:03:59
*/
@Data
public class LeaveWordParamVo {
@ApiModelProperty(value = "标题")
private String name;
@ApiModelProperty(value = "创建者名称")
private String createByName;
@ApiModelProperty(value = "创建者Id")
private Long createById;
@ApiModelProperty("当前页数")
public Integer pageNo;
@ApiModelProperty("页内条数")
public Integer pageSize;
@ApiModelProperty(value = "业务类型:1-功能异常、2-体验问题、3-产品建议、4-其他")
private Integer bizType;
@ApiModelProperty("提交状态1-待接收,2-已接受")
private Integer state;
}
package com.yizhi.training.application.vo.domain;
import com.baomidou.mybatisplus.activerecord.Model;
import com.yizhi.util.application.sensitive.annotation.SensitiveWords;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
* 留言管理
* </p>
*
* @author yanglang
* @since 2025-01-03
*/
@Data
@Api(tags = "LeaveWordVo", description = "留言管理表")
public class LeaveWordVo extends Model<LeaveWordVo> {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键id")
private Long id;
@ApiModelProperty(value = "标题")
private String name;
@SensitiveWords
@ApiModelProperty(value = "你的问题建议")
private String content;
@ApiModelProperty(value = "图片地址,多个以逗号分隔")
private String ossUrl;
@ApiModelProperty(value = "接受时间")
private Date acceptTime;
@ApiModelProperty(value = "创建者id")
private Long createById;
@ApiModelProperty(value = "创建者名称")
private String createByName;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "修改者id")
private Long updateById;
@ApiModelProperty(value = "修改者名称")
private String updateByName;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "站点id")
private Long siteId;
@ApiModelProperty(value = "组织id")
private Long groupId;
@ApiModelProperty(value = "部室名称")
private String groupName;
@ApiModelProperty(value = "支部名称")
private String orgName;
@ApiModelProperty(value = "企业id")
private Long companyId;
@ApiModelProperty(value = "业务类型:1-功能异常、2-体验问题、3-产品建议、4-其他")
private Integer bizType;
@Override
protected Serializable pkVal() {
return this.id;
}
@ApiModelProperty("提交状态1-待接收,2-已接受")
private Integer state;
}
package com.yizhi.training.application.vo.manage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* com.yizhi.training.application.vo.manage
*
* @author yanglang
* @create 2025-01-03 10:33:44
*/
@Data
@ApiModel("部门角色信息")
public class AuthzUserGroupVo {
private Long id;
@ApiModelProperty(value = "管辖区名称")
private String name;
@ApiModelProperty(value = "描述")
private String description;
private Long siteId;
private Long companyId;
}
package com.yizhi.training.application.controller;
import com.baomidou.mybatisplus.plugins.Page;
import com.yizhi.training.application.service.LeaveWordService;
import com.yizhi.training.application.vo.domain.LeaveWordParamVo;
import com.yizhi.training.application.vo.domain.LeaveWordVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* com.yizhi.training.application.controller
*
* @author yanglang
* @create 2025-01-03 13:34:48
*/
@RestController
@RequestMapping("/manage/leaveWord")
public class LeaveWordController {
@Autowired
private LeaveWordService leaveWordService;
@PostMapping("/page")
public Page<LeaveWordVo> page(LeaveWordParamVo paramVo){
return leaveWordService.page(paramVo);
}
@PostMapping("/save")
public boolean save(LeaveWordVo leaveWordVo){
return leaveWordService.save(leaveWordVo);
}
@GetMapping("/getById")
public LeaveWordVo getById(Long id){
return leaveWordService.getById(id);
}
@GetMapping("/updateState")
public boolean updateState(Long id,Integer state){
return leaveWordService.updateState(id,state);
}
@GetMapping("/removeById")
public boolean removeById(Long id){
return leaveWordService.removeById(id);
}
}
package com.yizhi.training.application.domain;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableLogic;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import com.yizhi.util.application.sensitive.annotation.SensitiveWords;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
* 留言管理
* </p>
*
* @author yanglang
* @since 2025-01-03
*/
@Data
@Api(tags = "LeaveWord", description = "留言管理")
@TableName("leave_word")
public class LeaveWord extends Model<LeaveWord> {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键id")
private Long id;
@ApiModelProperty(value = "标题")
@TableField("name")
private String name;
@SensitiveWords
@ApiModelProperty(value = "你的问题建议")
private String content;
@ApiModelProperty(value = "图片地址,多个以逗号分隔")
@TableField("oss_url")
private String ossUrl;
@ApiModelProperty(value = "接受时间")
@TableField("accept_time")
private Date acceptTime;
@ApiModelProperty(value = "创建者id")
@TableField(value = "create_by_id", fill = FieldFill.INSERT)
private Long createById;
@ApiModelProperty(value = "创建者名称")
@TableField(value = "create_by_name", fill = FieldFill.INSERT)
private String createByName;
@ApiModelProperty(value = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "修改者id")
@TableField(value = "update_by_id", fill = FieldFill.UPDATE)
private Long updateById;
@ApiModelProperty(value = "修改者名称")
@TableField(value = "update_by_name", fill = FieldFill.UPDATE)
private String updateByName;
@ApiModelProperty(value = "修改时间")
@TableField(value = "update_time", fill = FieldFill.UPDATE)
private Date updateTime;
@ApiModelProperty(value = "站点id")
@TableField("site_id")
private Long siteId;
@ApiModelProperty(value = "组织id")
@TableField("group_id")
private Long groupId;
@ApiModelProperty(value = "支部名称")
@TableField(exist = false)
private String groupName;
@ApiModelProperty(value = "部室名称")
@TableField(exist = false)
private String orgName;
@ApiModelProperty(value = "企业id")
@TableField("company_id")
private Long companyId;
@ApiModelProperty(value = "业务类型:1-功能异常、2-体验问题、3-产品建议、4-其他")
private Integer bizType;
@Override
protected Serializable pkVal() {
return this.id;
}
@ApiModelProperty("提交状态1-待接收,2-已接受")
@TableField("state")
private Integer state;
@ApiModelProperty(value = "是否删除(0:否,1:是)")
@TableLogic
private Integer deleted;
}
package com.yizhi.training.application.mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.yizhi.training.application.domain.LeaveWord;
import com.yizhi.training.application.vo.manage.AuthzUserGroupVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* com.yizhi.training.application.mapper
*
* @author yanglang
* @create 2025-01-03 10:03:34
*/
public interface LeaveWordMapper extends BaseMapper<LeaveWord> {
AuthzUserGroupVo getUserGroupByUser(@Param("accountId") Long accountId);
AuthzUserGroupVo getUserGroupById(@Param("groupId") Long groupId);
List<AuthzUserGroupVo> queryUserGroupByIds(@Param("groupIds") List<Long> groupIds);
}
<?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.yizhi.training.application.mapper.LeaveWordMapper">
<select id="getUserGroupByUser" resultType="com.yizhi.training.application.vo.manage.AuthzUserGroupVo">
select
aug.id,
aug.name,
aug.description,
aug.site_id as siteId,
aug.company_id as companyId
from
cloud_system.authz_user_group aug
inner join cloud_system.authz_role_user_group arug on
aug.id = arug.user_group_id
inner join cloud_system.authz_account_role aar on
arug.role_id = aar.role_id
where
aar.account_id = #{accountId}
limit 1
</select>
<select id="queryUserGroupByIds" resultType="com.yizhi.training.application.vo.manage.AuthzUserGroupVo">
select
aug.id,
aug.name,
aug.description,
aug.site_id as siteId,
aug.company_id as companyId
from
cloud_system.authz_user_group aug
inner join cloud_system.authz_role_user_group arug on
aug.id = arug.user_group_id
inner join cloud_system.authz_account_role aar on
arug.role_id = aar.role_id
where
aar.id in
<foreach item="item" index="index" collection="groupIds" open="(" separator="," close=")">
#{item}
</foreach>
</select>
<select id="getUserGroupById" resultType="com.yizhi.training.application.vo.manage.AuthzUserGroupVo">
select
aug.id,
aug.name,
aug.description,
aug.site_id as siteId,
aug.company_id as companyId
from
cloud_system.authz_user_group aug
where
aug.id = #{groupId}
</select>
</mapper>
\ No newline at end of file
package com.yizhi.training.application.service;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.yizhi.training.application.domain.LeaveWord;
import com.yizhi.training.application.vo.domain.LeaveWordParamVo;
import com.yizhi.training.application.vo.domain.LeaveWordVo;
/**
* com.yizhi.training.application.service
*
* @author yanglang
* @create 2025-01-03 10:05:41
*/
public interface LeaveWordService extends IService<LeaveWord> {
Page<LeaveWordVo> page(LeaveWordParamVo paramVo);
boolean save(LeaveWordVo leaveWordVo);
LeaveWordVo getById(Long id);
boolean updateState(Long id,Integer state);
boolean removeById(Long id);
}
package com.yizhi.training.application.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.yizhi.application.orm.id.IdGenerator;
import com.yizhi.core.application.context.ContextHolder;
import com.yizhi.core.application.context.RequestContext;
import com.yizhi.training.application.domain.LeaveWord;
import com.yizhi.training.application.mapper.LeaveWordMapper;
import com.yizhi.training.application.service.LeaveWordService;
import com.yizhi.training.application.vo.domain.LeaveWordParamVo;
import com.yizhi.training.application.vo.domain.LeaveWordVo;
import com.yizhi.training.application.vo.manage.AuthzUserGroupVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* com.yizhi.training.application.service.impl
*
* @author yanglang
* @create 2025-01-03 10:06:26
*/
@Service
public class LeaveWordServiceImpl extends ServiceImpl<LeaveWordMapper, LeaveWord> implements LeaveWordService {
@Autowired
private IdGenerator idGenerator;
@Override
public Page<LeaveWordVo> page(LeaveWordParamVo paramVo){
Page<LeaveWordVo> page = new Page(paramVo.getPageNo(), paramVo.getPageSize());
Page<LeaveWord> paramPage = new Page(paramVo.getPageNo(), paramVo.getPageSize());
EntityWrapper<LeaveWord> map = new EntityWrapper<LeaveWord>();
if(ObjectUtil.isNotEmpty(paramVo.getName())){
map.like("name", paramVo.getName());
}
if(ObjectUtil.isNotEmpty(paramVo.getBizType())){
map.eq("bizType", paramVo.getBizType());
}
if(ObjectUtil.isNotEmpty(paramVo.getCreateByName())){
map.like("createByName", paramVo.getCreateByName());
}
if(ObjectUtil.isNotEmpty(paramVo.getCreateById())){
map.eq("createById", paramVo.getCreateById());
}
if(ObjectUtil.isNotEmpty(paramVo.getState())){
map.eq("state", paramVo.getState());
}
map.eq("deleted", 0);
paramPage = selectPage(paramPage,map);
if(paramPage!=null){
page.setSize(paramPage.getSize());
List<LeaveWord> leaveWordList = paramPage.getRecords();
List<LeaveWordVo> leaveWordVoList = Lists.newArrayList();
if(CollUtil.isNotEmpty(leaveWordList)){
List<Long> groupIds = leaveWordList.stream().filter(l->l.getGroupId()!=null).map(LeaveWord::getGroupId).collect(Collectors.toList());
Map<Long,AuthzUserGroupVo> groupVoMap = Maps.newHashMap();
if(CollUtil.isNotEmpty(groupIds)){
List<AuthzUserGroupVo> authzUserGroupVoList = this.baseMapper.queryUserGroupByIds(groupIds);
if(CollUtil.isNotEmpty(authzUserGroupVoList)){
groupVoMap = authzUserGroupVoList.stream().collect(Collectors.toMap(AuthzUserGroupVo::getId,a->a));
}
}
Map<Long, AuthzUserGroupVo> finalGroupVoMap = groupVoMap;
leaveWordList.stream().forEach(leaveWord -> {
LeaveWordVo leaveWordVo = new LeaveWordVo();
BeanUtil.copyProperties(leaveWord,leaveWordVo);
if(leaveWord.getGroupId()!=null&&finalGroupVoMap.containsKey(leaveWord.getGroupId())){
AuthzUserGroupVo groupVo = finalGroupVoMap.get(leaveWord.getGroupId());
leaveWordVo.setGroupName(groupVo.getName());
leaveWordVo.setOrgName(groupVo.getDescription());
leaveWordVoList.add(leaveWordVo);
}
});
}
page.setRecords(leaveWordVoList);
}
return page;
}
@Override
public boolean save(LeaveWordVo leaveWordVo){
LeaveWord leaveWord = new LeaveWord();
BeanUtil.copyProperties(leaveWordVo,leaveWord);
RequestContext context = ContextHolder.get();
Date now = new Date();
leaveWord.setUpdateById(context.getAccountId());
leaveWord.setUpdateByName(context.getAccountName());
leaveWord.setUpdateTime(now);
leaveWord.setDeleted(0);
if(leaveWord.getId()==null){
leaveWord.setId(idGenerator.generate());
leaveWord.setCreateById(context.getAccountId());
leaveWord.setCreateByName(context.getAccountName());
leaveWord.setCreateTime(now);
leaveWord.setState(1);
AuthzUserGroupVo authzUserGroupVo = this.baseMapper.getUserGroupByUser(context.getAccountId());
if(authzUserGroupVo!=null){
leaveWord.setSiteId(authzUserGroupVo.getSiteId());
leaveWord.setCompanyId(authzUserGroupVo.getCompanyId());
leaveWord.setGroupId(authzUserGroupVo.getId());
}
return this.insert(leaveWord);
}else{
return this.updateById(leaveWord);
}
}
@Override
public LeaveWordVo getById(Long id) {
LeaveWord leaveWord = this.selectById(id);
if(leaveWord==null){
return null;
}
LeaveWordVo leaveWordVo = new LeaveWordVo();
BeanUtil.copyProperties(leaveWord,leaveWordVo);
if(leaveWord.getGroupId()!=null) {
AuthzUserGroupVo authzUserGroupVo = this.baseMapper.getUserGroupById(leaveWord.getGroupId());
if(authzUserGroupVo!=null){
leaveWordVo.setGroupName(authzUserGroupVo.getName());
leaveWordVo.setOrgName(authzUserGroupVo.getDescription());
}
}
return leaveWordVo;
}
@Override
public boolean updateState(Long id,Integer state) {
LeaveWord leaveWord = this.selectById(id);
if(leaveWord==null){
return false;
}
RequestContext context = ContextHolder.get();
Date now = new Date();
leaveWord.setState(state);
if(Objects.equals(state,2)){
leaveWord.setAcceptTime(now);
}
leaveWord.setUpdateById(context.getAccountId());
leaveWord.setUpdateByName(context.getAccountName());
leaveWord.setUpdateTime(now);
return this.updateById(leaveWord);
}
@Override
public boolean removeById(Long id) {
LeaveWord leaveWord = this.selectById(id);
if(leaveWord==null){
return false;
}
leaveWord.setDeleted(1);
RequestContext context = ContextHolder.get();
Date now = new Date();
leaveWord.setUpdateById(context.getAccountId());
leaveWord.setUpdateByName(context.getAccountName());
leaveWord.setUpdateTime(now);
return this.updateById(leaveWord);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment