Browse Source

Merge branch 'dev_issue_category' into dev_temp

dev_shibei_match
sunyuchao 5 years ago
parent
commit
b906894dd1
  1. 1
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java
  2. 29
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisUtils.java
  3. 24
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/AddTagFormDTO.java
  4. 28
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/IssueSaveCategoryFormDTO.java
  5. 27
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/SaveIssueCategoryFormDTO.java
  6. 10
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/ShiftProjectFormDTO.java
  7. 17
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/TagListFormDTO.java
  8. 23
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/result/AddTagResultDTO.java
  9. 15
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/result/IssueCategoryTagResultDTO.java
  10. 18
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/result/TagListResultDTO.java
  11. 11
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/GovIssueOpenFeignClient.java
  12. 9
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/fallback/GovIssueOpenFeignClientFallBack.java
  13. 6
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/constant/GovIssueRedisKeys.java
  14. 31
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueCategoryController.java
  15. 16
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueManageController.java
  16. 28
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueProjectCategoryDictController.java
  17. 16
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueProjectTagDictController.java
  18. 19
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueTagsController.java
  19. 17
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueCategoryDao.java
  20. 9
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueProjectCategoryDictDao.java
  21. 6
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueProjectRelationDao.java
  22. 19
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueTagsDao.java
  23. 113
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/redis/IssueProjectTagDictRedis.java
  24. 20
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueCategoryService.java
  25. 18
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueProjectCategoryDictService.java
  26. 13
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueProjectTagDictService.java
  27. 9
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueService.java
  28. 20
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueTagsService.java
  29. 74
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueCategoryServiceImpl.java
  30. 52
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueProjectCategoryDictServiceImpl.java
  31. 17
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueProjectTagDictServiceImpl.java
  32. 120
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java
  33. 56
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueTagsServiceImpl.java
  34. 6
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/utils/ModuleConstants.java
  35. 67
      epmet-module/gov-issue/gov-issue-server/src/main/resources/db/migration/V0.0.7__add_category_tag.sql
  36. 19
      epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueCategoryDao.xml
  37. 16
      epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueProjectCategoryDictDao.xml
  38. 12
      epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueProjectRelationDao.xml
  39. 22
      epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueTagsDao.xml
  40. 28
      epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/ProjectSaveCategoryFormDTO.java
  41. 26
      epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/SaveIssueCategoryFormDTO.java
  42. 55
      epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/ProjectCategoryDTOResultDTO.java
  43. 25
      epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/ProjectIssueCategoryResultDTO.java
  44. 96
      epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/ProjectIssueDTOResultDTO.java
  45. 19
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectCategoryController.java
  46. 5
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/dao/ProjectCategoryDao.java
  47. 9
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectCategoryService.java
  48. 49
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectCategoryServiceImpl.java
  49. 33
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java
  50. 30
      epmet-module/gov-project/gov-project-server/src/main/resources/db/migration/V0.0.5__add_category_tag.sql
  51. 14
      epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectCategoryDao.xml

1
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java

@ -126,6 +126,7 @@ public enum EpmetErrorCode {
ARTICLE_PUBLISH_ERROR(8801, "发布文章失败,请刷新重试"),
REPEATED_SUBMIT_ERROR(8998, "请勿重复提交"),
CUSTOMER_VALIDATE_ERROR(8999, "内部数据校验异常"),
CATEGORY_IS_NULL(8811, "请设置分类"),
//公众号 865..开头的码
PUBLIC_NOT_EXISTS(8651,"手机号未注册,请先完成信息注册"),

29
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisUtils.java

@ -10,12 +10,13 @@ package com.epmet.commons.tools.redis;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.utils.ConvertUtils;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.*;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.data.redis.support.atomic.RedisAtomicLong;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
@ -363,6 +364,28 @@ public class RedisUtils {
return redisTemplate.opsForZSet().incrementScore(key, value, delta);
}
/**
* @Description 获取某个Zset的score
* @Param key
* @Param o
* @author zxc
* @date 2020/12/9 下午3:07
*/
public Double getScore(String key, Object o){
return redisTemplate.opsForZSet().score(key,o);
}
/**
* @Description zset添加
* @Param key
* @Param o
* @author zxc
* @date 2020/12/9 下午3:18
*/
public void zSetAdd(String key, Object o){
redisTemplate.opsForZSet().add(key,o,NumConstant.ZERO);
}
/**
* @Description 判断key是否存在
* @param key

24
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/AddTagFormDTO.java

@ -0,0 +1,24 @@
package com.epmet.dto.form;
import com.google.gson.internal.$Gson$Types;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Author zxc
* @DateTime 2020/12/9 下午3:25
*/
@Data
public class AddTagFormDTO implements Serializable {
private static final long serialVersionUID = -3245317956853388308L;
public interface AddTag{}
@NotBlank(message = "标签名称不能为空",groups = AddTag.class)
private String tagName;
private String customerId;
}

28
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/IssueSaveCategoryFormDTO.java

@ -0,0 +1,28 @@
package com.epmet.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.List;
/**
* 议题保存/修改分类-接口入参
* @Author sun
*/
@Data
public class IssueSaveCategoryFormDTO implements Serializable {
private static final long serialVersionUID = 2599592072265715951L;
/**
* 议题Id
*/
@NotBlank(message = "议题ID不能为空",groups = {ProjectSaveCategoryFormDTO.SaveCategory.class})
private String issueId;
/**
* 议题分类集合
*/
private List<SaveIssueCategoryFormDTO> categoryList;
public interface SaveCategory{}
}

27
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/SaveIssueCategoryFormDTO.java

@ -0,0 +1,27 @@
package com.epmet.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 议题保存/修改分类-接口入参
*
* @Author sun
*/
@Data
public class SaveIssueCategoryFormDTO implements Serializable {
private static final long serialVersionUID = 2599592072265715951L;
/**
* 分类Id
*/
private String id;
/**
* 分类名称
*/
private String name;
}

10
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/ShiftProjectFormDTO.java

@ -1,6 +1,8 @@
package com.epmet.dto.form;
import com.epmet.dto.IssueCategoryDTO;
import com.epmet.dto.IssueDTO;
import com.epmet.dto.IssueTagsDTO;
import com.epmet.resi.group.dto.topic.ResiTopicDTO;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
@ -42,6 +44,14 @@ public class ShiftProjectFormDTO implements Serializable {
* 话题对象信息
*/
private ResiTopicDTO topicDTO ;
/**
* 议题分类
*/
private List<IssueCategoryDTO> categoryList;
/**
* 议题标签
*/
private List<IssueTagsDTO> tagList;
}

17
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/TagListFormDTO.java

@ -0,0 +1,17 @@
package com.epmet.dto.form;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @author zhaoqifeng
* @dscription
* @date 2020/12/9 15:32
*/
@Data
public class TagListFormDTO implements Serializable {
private static final long serialVersionUID = -6448213704058150588L;
private List<String> categoryIdList;
}

23
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/result/AddTagResultDTO.java

@ -0,0 +1,23 @@
package com.epmet.dto.result;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.io.Serializable;
/**
* @Author zxc
* @DateTime 2020/12/9 下午5:09
*/
@Data
@AllArgsConstructor
public class AddTagResultDTO implements Serializable {
private static final long serialVersionUID = 4769136806332933579L;
private String tagId;
public AddTagResultDTO() {
this.tagId = "";
}
}

15
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/result/IssueCategoryTagResultDTO.java

@ -3,6 +3,7 @@ package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
import java.util.Objects;
/**
* @Description 获取议题的分类标签列表-接口返参
@ -22,4 +23,18 @@ public class IssueCategoryTagResultDTO implements Serializable {
*/
private String name;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
IssueCategoryTagResultDTO that = (IssueCategoryTagResultDTO) o;
return Objects.equals(id, that.id) &&
Objects.equals(name, that.name);
}
@Override
public int hashCode() {
return Objects.hash(id, name);
}
}

18
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/result/TagListResultDTO.java

@ -0,0 +1,18 @@
package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @author zhaoqifeng
* @dscription
* @date 2020/12/9 15:33
*/
@Data
public class TagListResultDTO implements Serializable {
private static final long serialVersionUID = -4247291364077634874L;
List<IssueCategoryTagResultDTO> defaulted;
List<IssueCategoryTagResultDTO> customized;
}

11
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/GovIssueOpenFeignClient.java

@ -34,8 +34,8 @@ import java.util.Map;
* @author yinzuomei@elink-cn.com
* @date 2020/6/4 13:37
*/
@FeignClient(name = ServiceConstant.GOV_ISSUE_SERVER, fallback = GovIssueOpenFeignClientFallBack.class)
//@FeignClient(name = ServiceConstant.GOV_ISSUE_SERVER, fallback = GovIssueOpenFeignClientFallBack.class,url = "localhost:8101")
//@FeignClient(name = ServiceConstant.GOV_ISSUE_SERVER, fallback = GovIssueOpenFeignClientFallBack.class)
@FeignClient(name = ServiceConstant.GOV_ISSUE_SERVER, fallback = GovIssueOpenFeignClientFallBack.class,url = "localhost:8101")
public interface GovIssueOpenFeignClient {
/**
@ -216,4 +216,11 @@ public interface GovIssueOpenFeignClient {
**/
@PostMapping(value = "/gov/issue/issuecategory/projectcategorylist")
Result<List<ProjectCategoryTagResultDTO>> projectCategoryList(@RequestBody List<String> categoryIdList);
/**
* @description 查询项目所属客户和所属网格信息以及分类对应的分类信息
* @author sun
**/
@PostMapping(value = "/gov/issue/issueprojectcategorydict/getprojectandcategoryinfo")
Result<ProjectIssueCategoryResultDTO> getProjectAndCategoryInfo(ProjectSaveCategoryFormDTO formDTO);
}

9
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/fallback/GovIssueOpenFeignClientFallBack.java

@ -202,4 +202,13 @@ public class GovIssueOpenFeignClientFallBack implements GovIssueOpenFeignClient
public Result<List<ProjectCategoryTagResultDTO>> projectCategoryList(List<String> categoryIdList) {
return ModuleUtils.feignConError(ServiceConstant.GOV_ISSUE_SERVER, "projectCategoryList", categoryIdList);
}
/**
* @description 查询项目所属客户和所属网格信息以及分类对应的分类信息
* @author sun
**/
@Override
public Result<ProjectIssueCategoryResultDTO> getProjectAndCategoryInfo(ProjectSaveCategoryFormDTO formDTO) {
return ModuleUtils.feignConError(ServiceConstant.GOV_ISSUE_SERVER, "getProjectAndCategoryInfo", formDTO);
}
}

6
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/constant/GovIssueRedisKeys.java

@ -1,5 +1,9 @@
package com.epmet.constant;
import com.epmet.utils.ModuleConstants;
import java.util.Optional;
/**
* @Description gov-issue-server模块redis key
* @Author yinzuomei
@ -28,7 +32,7 @@ public class GovIssueRedisKeys {
* @return
*/
public static String getGovernmentTagKey(String customerId,String categoryId){
return rootPrefix.concat("govern:customer:category:").concat(customerId).concat(":").concat(categoryId);
return rootPrefix.concat("govern:customer:category:").concat(customerId).concat(":").concat(Optional.ofNullable(categoryId).orElse(ModuleConstants.ASTERISK));
}
}

31
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueCategoryController.java

@ -17,6 +17,8 @@
package com.epmet.controller;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ExcelUtils;
import com.epmet.commons.tools.utils.Result;
@ -27,6 +29,7 @@ import com.epmet.commons.tools.validator.group.DefaultGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.dto.IssueCategoryDTO;
import com.epmet.dto.form.IssueCategoryTagListFormDTO;
import com.epmet.dto.form.IssueSaveCategoryFormDTO;
import com.epmet.dto.result.IssueCategoryTagListResultDTO;
import com.epmet.dto.result.ProjectCategoryTagResultDTO;
import com.epmet.excel.IssueCategoryExcel;
@ -48,24 +51,24 @@ import java.util.Map;
@RestController
@RequestMapping("issuecategory")
public class IssueCategoryController {
@Autowired
private IssueCategoryService issueCategoryService;
@GetMapping("page")
public Result<PageData<IssueCategoryDTO>> page(@RequestParam Map<String, Object> params){
public Result<PageData<IssueCategoryDTO>> page(@RequestParam Map<String, Object> params) {
PageData<IssueCategoryDTO> page = issueCategoryService.page(params);
return new Result<PageData<IssueCategoryDTO>>().ok(page);
}
@GetMapping("{id}")
public Result<IssueCategoryDTO> get(@PathVariable("id") String id){
public Result<IssueCategoryDTO> get(@PathVariable("id") String id) {
IssueCategoryDTO data = issueCategoryService.get(id);
return new Result<IssueCategoryDTO>().ok(data);
}
@PostMapping
public Result save(@RequestBody IssueCategoryDTO dto){
public Result save(@RequestBody IssueCategoryDTO dto) {
//效验数据
ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
issueCategoryService.save(dto);
@ -73,7 +76,7 @@ public class IssueCategoryController {
}
@PutMapping
public Result update(@RequestBody IssueCategoryDTO dto){
public Result update(@RequestBody IssueCategoryDTO dto) {
//效验数据
ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
issueCategoryService.update(dto);
@ -81,7 +84,7 @@ public class IssueCategoryController {
}
@DeleteMapping
public Result delete(@RequestBody String[] ids){
public Result delete(@RequestBody String[] ids) {
//效验数据
AssertUtils.isArrayEmpty(ids, "id");
issueCategoryService.delete(ids);
@ -117,4 +120,20 @@ public class IssueCategoryController {
return new Result<List<ProjectCategoryTagResultDTO>>().ok(issueCategoryService.projectCategoryList(categoryIdList));
}
/**
* @param formDTO
* @return
* @Description 议题保存/修改分类
* @Author sun
**/
@PostMapping("save")
public Result saveCategory(@RequestBody IssueSaveCategoryFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, IssueSaveCategoryFormDTO.SaveCategory.class);
if(formDTO.getCategoryList().size()< NumConstant.ONE){
throw new RenException("请至少选择一个分类保存");
}
issueCategoryService.saveCategory(formDTO);
return new Result();
}
}

16
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueManageController.java

@ -168,6 +168,22 @@ public class IssueManageController {
return new Result();
}
/**
* 议题管理-议题转项目-增加分类标签功能
* @author zhaoqifeng
* @date 2020/12/9 9:58
* @param tokenDTO
* @param formDTO
* @return com.epmet.commons.tools.utils.Result
*/
@PostMapping("shiftproject-v2")
public Result shiftProjectV2(@LoginUser TokenDto tokenDTO, @RequestBody ShiftProjectFormDTO formDTO) {
formDTO.setStaffId(tokenDTO.getUserId());
ValidatorUtils.validateEntity(formDTO);
issueService.shiftProject(formDTO);
return new Result();
}
/**
* @Description 政府端查看议题进展 (已关闭单表查询转议题跨服务查询)
* @param issueId

28
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueProjectCategoryDictController.java

@ -23,13 +23,13 @@ import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.AssertUtils;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.commons.tools.validator.group.AddGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.commons.tools.validator.group.DefaultGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.dto.IssueProjectCategoryDictDTO;
import com.epmet.dto.form.CustomerCategoryListFormDTO;
import com.epmet.dto.form.IssueCategoryTagListFormDTO;
import com.epmet.dto.form.ProjectSaveCategoryFormDTO;
import com.epmet.dto.result.CustomerCategoryListResultDTO;
import com.epmet.dto.result.ProjectCategoryTagResultDTO;
import com.epmet.dto.result.ProjectIssueCategoryResultDTO;
import com.epmet.excel.IssueProjectCategoryDictExcel;
import com.epmet.service.IssueProjectCategoryDictService;
import org.springframework.beans.factory.annotation.Autowired;
@ -107,4 +107,26 @@ public class IssueProjectCategoryDictController {
return new Result<List<CustomerCategoryListResultDTO>>().ok(issueProjectCategoryDictService.categoryList(formDTO));
}
/**
* @param cstegoryIdList
* @return
* @Description 批量查询分类信息
* @Author sun
**/
@PostMapping("getcategorylist")
public Result<List<IssueProjectCategoryDictDTO>> getCategoryList(@RequestBody List<String> cstegoryIdList) {
return new Result<List<IssueProjectCategoryDictDTO>>().ok(issueProjectCategoryDictService.getCategoryList(cstegoryIdList));
}
/**
* @param formDTO
* @return
* @Description 查询项目所属客户和所属网格信息以及分类对应的分类信息
* @Author sun
**/
@PostMapping("getprojectandcategoryinfo")
public Result<ProjectIssueCategoryResultDTO> getProjectAndCategoryInfo(@RequestBody ProjectSaveCategoryFormDTO formDTO) {
return new Result<ProjectIssueCategoryResultDTO>().ok(issueProjectCategoryDictService.getProjectAndCategoryInfo(formDTO));
}
}

16
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueProjectTagDictController.java

@ -17,7 +17,9 @@
package com.epmet.controller;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ExcelUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.AssertUtils;
@ -26,6 +28,8 @@ import com.epmet.commons.tools.validator.group.AddGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.commons.tools.validator.group.DefaultGroup;
import com.epmet.dto.IssueProjectTagDictDTO;
import com.epmet.dto.form.TagListFormDTO;
import com.epmet.dto.result.TagListResultDTO;
import com.epmet.excel.IssueProjectTagDictExcel;
import com.epmet.service.IssueProjectTagDictService;
import org.springframework.beans.factory.annotation.Autowired;
@ -91,4 +95,16 @@ public class IssueProjectTagDictController {
ExcelUtils.exportExcelToTarget(response, null, list, IssueProjectTagDictExcel.class);
}
/**
* 标签列表
* @author zhaoqifeng
* @date 2020/12/9 15:43
* @param tokenDto
* @param formDTO
* @return com.epmet.commons.tools.utils.Result<com.epmet.dto.result.TagListResultDTO>
*/
@PostMapping("list")
public Result<TagListResultDTO> list(@LoginUser TokenDto tokenDto, @RequestBody TagListFormDTO formDTO) {
return new Result<TagListResultDTO>().ok(issueProjectTagDictService.getTagList(tokenDto, formDTO));
}
}

19
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueTagsController.java

@ -17,15 +17,19 @@
package com.epmet.controller;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ExcelUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.AssertUtils;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.commons.tools.validator.group.AddGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.commons.tools.validator.group.DefaultGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.dto.IssueTagsDTO;
import com.epmet.dto.form.AddTagFormDTO;
import com.epmet.dto.result.AddTagResultDTO;
import com.epmet.excel.IssueTagsExcel;
import com.epmet.service.IssueTagsService;
import org.springframework.beans.factory.annotation.Autowired;
@ -91,4 +95,17 @@ public class IssueTagsController {
ExcelUtils.exportExcelToTarget(response, null, list, IssueTagsExcel.class);
}
/**
* @Description 标签添加
* @Param form
* @author zxc
* @date 2020/12/9 下午3:29
*/
@PostMapping("add")
public Result<AddTagResultDTO> addTag(@RequestBody AddTagFormDTO form, @LoginUser TokenDto tokenDto){
ValidatorUtils.validateEntity(form, AddTagFormDTO.AddTag.class);
AddTagResultDTO addTagResultDTO = issueTagsService.addTag(form, tokenDto);
return new Result<AddTagResultDTO>().ok(addTagResultDTO);
}
}

17
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueCategoryDao.java

@ -18,6 +18,7 @@
package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.IssueCategoryDTO;
import com.epmet.dto.result.IssueCategoryTagResultDTO;
import com.epmet.dto.result.ProjectCategoryTagResultDTO;
import com.epmet.entity.IssueCategoryEntity;
@ -48,4 +49,20 @@ public interface IssueCategoryDao extends BaseDao<IssueCategoryEntity> {
* @Author sun
**/
List<ProjectCategoryTagResultDTO> selectProjectCategoryList(@Param("categoryIdList") List<String> categoryIdList);
// List<ProjectCategoryTagResultDTO> selectProjectCategoryList(List<String> categoryIdList);
/**
* 获取议题分类
* @author zhaoqifeng
* @date 2020/12/9 10:46
* @param issueId
* @return java.util.List<com.epmet.dto.IssueCategoryDTO>
*/
List<IssueCategoryDTO> selectCategoryByIssue(@Param("issueId") String issueId);
/**
* @Description 删除议题的分类信息
* @Author sun
**/
void delByIssueId(@Param("issueId") String issueId);
}

9
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueProjectCategoryDictDao.java

@ -18,6 +18,7 @@
package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.IssueProjectCategoryDictDTO;
import com.epmet.dto.result.CustomerCategoryListResultDTO;
import com.epmet.entity.IssueProjectCategoryDictEntity;
import org.apache.ibatis.annotations.Mapper;
@ -44,4 +45,12 @@ public interface IssueProjectCategoryDictDao extends BaseDao<IssueProjectCategor
* @Author sun
**/
List<CustomerCategoryListResultDTO> subCategoryList(@Param("id") String categoryId);
/**
* @param cstegoryIdList
* @return
* @Description 批量查询分类信息
* @Author sun
**/
List<IssueProjectCategoryDictDTO> selectCategoryList(@Param("cstegoryIdList") List<String> cstegoryIdList);
}

6
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueProjectRelationDao.java

@ -18,6 +18,7 @@
package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.IssueDTO;
import com.epmet.entity.IssueProjectRelationEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -50,4 +51,9 @@ public interface IssueProjectRelationDao extends BaseDao<IssueProjectRelationEnt
**/
List<IssueProjectRelationEntity> selectRelationList(@Param("projectIdList") List<String> projectIdList);
/**
* @Author sun
* @Description 根据项目id查询对应的议题基本信息
**/
IssueDTO selectProjectToIssue(@Param("issueId") String issueId);
}

19
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueTagsDao.java

@ -18,6 +18,8 @@
package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.IssueTagsDTO;
import com.epmet.dto.form.AddTagFormDTO;
import com.epmet.dto.result.IssueCategoryTagResultDTO;
import com.epmet.entity.IssueTagsEntity;
import org.apache.ibatis.annotations.Mapper;
@ -39,4 +41,21 @@ public interface IssueTagsDao extends BaseDao<IssueTagsEntity> {
* @Author sun
**/
List<IssueCategoryTagResultDTO> selectIssueTagList(@Param("issueId") String issueId);
/**
* 获取议题标签
* @author zhaoqifeng
* @date 2020/12/9 14:05
* @param issueId
* @return java.util.List<com.epmet.dto.IssueTagsDTO>
*/
List<IssueTagsDTO> selectTagsByIssue(@Param("issueId") String issueId);
/**
* @Description 查询标签是否重名
* @Param form
* @author zxc
* @date 2020/12/9 下午3:40
*/
String selectTagNameCount(AddTagFormDTO form);
}

113
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/redis/IssueProjectTagDictRedis.java

@ -17,14 +17,26 @@
package com.epmet.redis;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.constant.GovIssueRedisKeys;
import com.epmet.dto.result.IssueCategoryTagResultDTO;
import com.epmet.utils.ModuleConstants;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
* 议题项目标签字典表
@ -37,7 +49,8 @@ import java.util.List;
public class IssueProjectTagDictRedis {
@Autowired
private RedisUtils redisUtils;
@Autowired
private RedisTemplate redisTemplate;
public void delete(Object[] ids) {
}
@ -63,12 +76,106 @@ public class IssueProjectTagDictRedis {
*/
public List<IssueCategoryTagResultDTO> getTagsOrderByRank(String customerId,List<String> category){
if(StringUtils.isBlank(customerId)) {
log.error("customerId can not be null when obtain govern tags cache");
log.error("customerId can not be null when obtain govern tags.");
return null;
}
Set<String> keys;
if(CollectionUtils.isEmpty(category))
keys = redisUtils.keys(GovIssueRedisKeys.getGovernmentTagKey(customerId,null));
else keys = category.stream().map(key -> {return GovIssueRedisKeys.getGovernmentTagKey(customerId,key);}).collect(Collectors.toSet());
List<Set<ZSetOperations.TypedTuple<Object>>> heatTuple = redisTemplate.executePipelined(new RedisCallback<Set<ZSetOperations.TypedTuple<Object>>>() {
@Nullable
@Override
public Set<ZSetOperations.TypedTuple<Object>> doInRedis(RedisConnection connection) throws DataAccessException {
connection.openPipeline();
keys.forEach(key -> {
connection.zSetCommands().zRangeByScoreWithScores(redisTemplate.getKeySerializer().serialize(key), NumConstant.ZERO_L, (long) (NumConstant.ONE_NEG));
});
return null;
}
},redisTemplate.getValueSerializer());
//热度Map 分数为key
Map<Double,List<IssueCategoryTagResultDTO>> heatMap = new HashMap<>();
if(!CollectionUtils.isEmpty(heatTuple)){
heatTuple.forEach(tupleSet -> {
tupleSet.forEach( tuple -> {
IssueCategoryTagResultDTO entity = parseObject(tuple.getValue(),IssueCategoryTagResultDTO.class);
Double heatScore = tuple.getScore();
List<IssueCategoryTagResultDTO> queue = heatMap.get(heatScore);
if(CollectionUtils.isEmpty(queue)) queue = new LinkedList<>();
queue.add(entity);
} );
});
List<IssueCategoryTagResultDTO> result = new LinkedList<>();
heatMap.keySet().stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList()).forEach(count -> {
result.addAll(heatMap.get(count));
});
return result;
}
if(CollectionUtils.isEmpty(keys) || !keys.iterator().next().contains(ModuleConstants.CUSTOMIZED_TAG_CATEGORY_ID)) {
log.warn("fetch customer govern tag cache blankly , customerId:{} , now begin compensation...", customerId);
List<IssueCategoryTagResultDTO> compensate = compensate(customerId, category);
if (CollectionUtils.isEmpty(compensate)) {
log.error("compensation failure or there is no default tag data in database !!");
return null;
} else {
log.warn("compensation completed !!");
return compensate;
}
}return null;
}
public List<IssueCategoryTagResultDTO> compensate(String customerId,List<String> category){
//TODO 补偿机制
return null;
}
/**
* @Description 标签使用次数修改
* @Param customerId 客户ID
* @Param categoryId 标签ID 自定义标签的categoryId统一为[customize]
* @Param formDTO
* @Param status 标签次数更新状态 0+11-1
* @author zxc
* @date 2020/12/9 下午2:54
*/
public void editTagUseCount(String customerId,String categoryId, Object formDTO,String status){
String key = GovIssueRedisKeys.getGovernmentTagKey(customerId, categoryId);
if (status.equals(NumConstant.ZERO_STR)){
// 标签使用次数+1
redisUtils.zIncrementScore(key, formDTO,NumConstant.ONE);
}
if (status.equals(NumConstant.ONE_STR)){
//标签使用次数-1
if (redisUtils.getScore(key,formDTO)>NumConstant.ZERO){
redisUtils.zIncrementScore(key, formDTO,NumConstant.ONE_NEG);
}
}
}
/**
* @Description 标签添加
* @Param customerId
* @Param categoryId
* @Param o
* @author zxc
* @date 2020/12/9 下午3:19
*/
public void addIssueProjectTag(String customerId,String categoryId,Object o){
String key = GovIssueRedisKeys.getGovernmentTagKey(customerId, categoryId);
redisUtils.zSetAdd(key,o);
}
public <T> T parseObject(Object o,Class<T> clazz){
ObjectMapper objectMapper = new ObjectMapper();
T t = objectMapper.convertValue(o, clazz);
return t;
}
}

20
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueCategoryService.java

@ -21,6 +21,7 @@ import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.page.PageData;
import com.epmet.dto.IssueCategoryDTO;
import com.epmet.dto.form.IssueCategoryTagListFormDTO;
import com.epmet.dto.form.IssueSaveCategoryFormDTO;
import com.epmet.dto.result.IssueCategoryTagListResultDTO;
import com.epmet.dto.result.ProjectCategoryTagResultDTO;
import com.epmet.entity.IssueCategoryEntity;
@ -111,4 +112,23 @@ public interface IssueCategoryService extends BaseService<IssueCategoryEntity> {
* @Author sun
**/
List<ProjectCategoryTagResultDTO> projectCategoryList(List<String> categoryIdList);
/**
* 获取议题分类
* @author zhaoqifeng
* @date 2020/12/9 10:48
* @param issueId
* @return java.util.List<com.epmet.dto.IssueCategoryDTO>
*/
List<IssueCategoryDTO> getCategoryByIssue(String issueId);
/**
* @param formDTO
* @return
* @Description 议题保存/修改分类
* @Author sun
**/
void saveCategory(IssueSaveCategoryFormDTO formDTO);
}

18
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueProjectCategoryDictService.java

@ -21,7 +21,9 @@ import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.page.PageData;
import com.epmet.dto.IssueProjectCategoryDictDTO;
import com.epmet.dto.form.CustomerCategoryListFormDTO;
import com.epmet.dto.form.ProjectSaveCategoryFormDTO;
import com.epmet.dto.result.CustomerCategoryListResultDTO;
import com.epmet.dto.result.ProjectIssueCategoryResultDTO;
import com.epmet.entity.IssueProjectCategoryDictEntity;
import java.util.List;
@ -102,4 +104,20 @@ public interface IssueProjectCategoryDictService extends BaseService<IssueProjec
* @Author sun
**/
List<CustomerCategoryListResultDTO> categoryList(CustomerCategoryListFormDTO formDTO);
/**
* @param cstegoryIdList
* @return
* @Description 批量查询分类信息
* @Author sun
**/
List<IssueProjectCategoryDictDTO> getCategoryList(List<String> cstegoryIdList);
/**
* @param formDTO
* @return
* @Description 查询项目所属客户和所属网格信息以及分类对应的分类信息
* @Author sun
**/
ProjectIssueCategoryResultDTO getProjectAndCategoryInfo(ProjectSaveCategoryFormDTO formDTO);
}

13
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueProjectTagDictService.java

@ -19,7 +19,10 @@ package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.dto.IssueProjectTagDictDTO;
import com.epmet.dto.form.TagListFormDTO;
import com.epmet.dto.result.TagListResultDTO;
import com.epmet.entity.IssueProjectTagDictEntity;
import java.util.List;
@ -92,4 +95,14 @@ public interface IssueProjectTagDictService extends BaseService<IssueProjectTagD
* @date 2020-12-08
*/
void delete(String[] ids);
/**
* 标签列表
* @author zhaoqifeng
* @date 2020/12/9 15:41
* @param tokenDto
* @param formDTO
* @return com.epmet.dto.result.TagListResultDTO
*/
TagListResultDTO getTagList(TokenDto tokenDto, TagListFormDTO formDTO);
}

9
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueService.java

@ -205,6 +205,15 @@ public interface IssueService extends BaseService<IssueEntity> {
**/
void shiftProject(ShiftProjectFormDTO formDTO);
/**
* 议题管理-议题转项目-增加分类标签功能
* @author zhaoqifeng
* @date 2020/12/9 10:01
* @param formDTO
* @return void
*/
void shiftProjectV2(ShiftProjectFormDTO formDTO);
/**
* @Description 已关闭列表 政府端
* @param issueListForm

20
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueTagsService.java

@ -19,7 +19,10 @@ package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.dto.IssueTagsDTO;
import com.epmet.dto.form.AddTagFormDTO;
import com.epmet.dto.result.AddTagResultDTO;
import com.epmet.entity.IssueTagsEntity;
import java.util.List;
@ -92,4 +95,21 @@ public interface IssueTagsService extends BaseService<IssueTagsEntity> {
* @date 2020-12-08
*/
void delete(String[] ids);
/**
* 获取议题标签
* @author zhaoqifeng
* @date 2020/12/9 14:07
* @param issueId
* @return java.util.List<com.epmet.dto.IssueTagsDTO>
*/
List<IssueTagsDTO> getTagsByIssue(String issueId);
/**
* @Description 标签添加
* @Param form
* @author zxc
* @date 2020/12/9 下午3:29
*/
AddTagResultDTO addTag(AddTagFormDTO form, TokenDto tokenDto);
}

74
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueCategoryServiceImpl.java

@ -22,26 +22,35 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.dao.IssueCategoryDao;
import com.epmet.dao.IssueTagsDao;
import com.epmet.dto.IssueCategoryDTO;
import com.epmet.dto.IssueProjectCategoryDictDTO;
import com.epmet.dto.form.IssueCategoryTagListFormDTO;
import com.epmet.dto.form.IssueSaveCategoryFormDTO;
import com.epmet.dto.form.SaveIssueCategoryFormDTO;
import com.epmet.dto.result.IssueCategoryTagListResultDTO;
import com.epmet.dto.result.IssueCategoryTagResultDTO;
import com.epmet.dto.result.ProjectCategoryTagResultDTO;
import com.epmet.entity.IssueCategoryEntity;
import com.epmet.entity.IssueEntity;
import com.epmet.redis.IssueCategoryRedis;
import com.epmet.service.IssueCategoryService;
import com.epmet.service.IssueProjectCategoryDictService;
import com.epmet.service.IssueService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 议题所属分类表
@ -56,6 +65,10 @@ public class IssueCategoryServiceImpl extends BaseServiceImpl<IssueCategoryDao,
private IssueCategoryRedis issueCategoryRedis;
@Autowired
private IssueTagsDao issueTagsDao;
@Autowired
private IssueService issueService;
@Autowired
private IssueProjectCategoryDictService issueProjectCategoryDictService;
@Override
public PageData<IssueCategoryDTO> page(Map<String, Object> params) {
@ -142,4 +155,65 @@ public class IssueCategoryServiceImpl extends BaseServiceImpl<IssueCategoryDao,
return baseDao.selectProjectCategoryList(categoryIdList);
}
/**
* 获取议题分类
*
* @param issueId
* @return java.util.List<com.epmet.dto.IssueCategoryDTO>
* @author zhaoqifeng
* @date 2020/12/9 10:48
*/
@Override
public List<IssueCategoryDTO> getCategoryByIssue(String issueId) {
return baseDao.selectCategoryByIssue(issueId);
}
/**
* @param formDTO
* @return
* @Description 议题保存/修改分类
* @Author sun
**/
@Override
public void saveCategory(IssueSaveCategoryFormDTO formDTO) {
//1.查询议题所属客户和所属网格信息
IssueEntity issue = issueService.selectById(formDTO.getIssueId());
if (null == issue) {
throw new RenException(String.format("根据议题Id获取议题信息失败,issueId->%s", formDTO.getIssueId()));
}
//2.批量查询分类信息
List<String> categoryIdList = formDTO.getCategoryList().stream().map(SaveIssueCategoryFormDTO::getId).collect(Collectors.toList());
List<IssueProjectCategoryDictDTO> categoryList = issueProjectCategoryDictService.getCategoryList(categoryIdList);
if (null == categoryList) {
throw new RenException(String.format("议题分类信息保存,根据分类Id获取分类信息失败"));
}
//3.汇总批量新增数据
List<IssueCategoryEntity> entityList = new ArrayList<>();
formDTO.getCategoryList().forEach(ca -> {
IssueCategoryEntity entity = new IssueCategoryEntity();
entity.setCustomerId(issue.getCustomerId());
entity.setGridId(issue.getGridId());
entity.setIssueId(formDTO.getIssueId());
entity.setCategoryId(ca.getId());
categoryList.forEach(cl -> {
if (ca.getId().equals(cl.getId())) {
entity.setCategoryPids(cl.getPids());
}
});
entityList.add(entity);
});
//4.根据议题Id删除可能存在的分类信息
baseDao.delByIssueId(formDTO.getIssueId());
//5.批量保存议题分类信息
if (!insertBatch(entityList)) {
throw new RenException(String.format("议题分类信息保存失败"));
}
}
}

52
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueProjectCategoryDictServiceImpl.java

@ -20,13 +20,21 @@ package com.epmet.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.dao.IssueProjectCategoryDictDao;
import com.epmet.dao.IssueProjectRelationDao;
import com.epmet.dto.IssueDTO;
import com.epmet.dto.IssueProjectCategoryDictDTO;
import com.epmet.dto.form.CustomerCategoryListFormDTO;
import com.epmet.dto.form.ProjectSaveCategoryFormDTO;
import com.epmet.dto.form.SaveIssueCategoryFormDTO;
import com.epmet.dto.result.CustomerCategoryListResultDTO;
import com.epmet.dto.result.ProjectCategoryDTOResultDTO;
import com.epmet.dto.result.ProjectIssueCategoryResultDTO;
import com.epmet.dto.result.ProjectIssueDTOResultDTO;
import com.epmet.entity.IssueProjectCategoryDictEntity;
import com.epmet.redis.IssueProjectCategoryDictRedis;
import com.epmet.service.IssueProjectCategoryDictService;
@ -38,6 +46,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 议题项目分类字典
@ -50,6 +59,8 @@ public class IssueProjectCategoryDictServiceImpl extends BaseServiceImpl<IssuePr
@Autowired
private IssueProjectCategoryDictRedis issueProjectCategoryDictRedis;
@Autowired
private IssueProjectRelationDao issueProjectRelationDao;
@Override
public PageData<IssueProjectCategoryDictDTO> page(Map<String, Object> params) {
@ -115,4 +126,43 @@ public class IssueProjectCategoryDictServiceImpl extends BaseServiceImpl<IssuePr
return resultList;
}
/**
* @param cstegoryIdList
* @return
* @Description 批量查询分类信息
* @Author sun
**/
@Override
public List<IssueProjectCategoryDictDTO> getCategoryList(List<String> cstegoryIdList) {
return baseDao.selectCategoryList(cstegoryIdList);
}
/**
* @param formDTO
* @return
* @Description 查询项目所属客户和所属网格信息以及分类对应的分类信息
* @Author sun
**/
@Override
public ProjectIssueCategoryResultDTO getProjectAndCategoryInfo(ProjectSaveCategoryFormDTO formDTO) {
ProjectIssueCategoryResultDTO resultDTO = new ProjectIssueCategoryResultDTO();
//1.根据项目id查询对应的议题基本信息
IssueDTO dto = issueProjectRelationDao.selectProjectToIssue(formDTO.getProjectId());
if (null == dto) {
throw new RenException(String.format("保存项目分类信息,获取项目对应的议题基本信息失败,projectId->%s", formDTO.getProjectId()));
}
ProjectIssueDTOResultDTO issueDTO = ConvertUtils.sourceToTarget(dto,ProjectIssueDTOResultDTO.class);
resultDTO.setIssueDTO(issueDTO);
//2.批量查询分类信息
List<String> categoryIdList = formDTO.getCategoryList().stream().map(SaveIssueCategoryFormDTO::getId).collect(Collectors.toList());
List<IssueProjectCategoryDictDTO> categoryList = getCategoryList(categoryIdList);
if (null == categoryList) {
throw new RenException(String.format("保存项目分类信息,根据分类Id获取分类信息失败"));
}
List<ProjectCategoryDTOResultDTO> list = ConvertUtils.sourceToTarget(categoryList,ProjectCategoryDTOResultDTO.class);
resultDTO.setCategoryList(list);
return resultDTO;
}
}

17
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueProjectTagDictServiceImpl.java

@ -21,10 +21,13 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.dao.IssueProjectTagDictDao;
import com.epmet.dto.IssueProjectTagDictDTO;
import com.epmet.dto.form.TagListFormDTO;
import com.epmet.dto.result.TagListResultDTO;
import com.epmet.entity.IssueProjectTagDictEntity;
import com.epmet.redis.IssueProjectTagDictRedis;
import com.epmet.service.IssueProjectTagDictService;
@ -101,4 +104,18 @@ public class IssueProjectTagDictServiceImpl extends BaseServiceImpl<IssueProject
baseDao.deleteBatchIds(Arrays.asList(ids));
}
/**
* 标签列表
*
* @param tokenDto
* @param formDTO
* @return com.epmet.dto.result.TagListResultDTO
* @author zhaoqifeng
* @date 2020/12/9 15:41
*/
@Override
public TagListResultDTO getTagList(TokenDto tokenDto, TagListFormDTO formDTO) {
return null;
}
}

120
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java

@ -110,6 +110,12 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
private EpmetUserOpenFeignClient userOpenFeignClient;
@Autowired
private EpmetMessageOpenFeignClient epmetMessageOpenFeignClient;
@Autowired
private IssueCategoryService issueCategoryService;
@Autowired
private IssueTagsService issueTagsService;
@Autowired
private IssueProjectTagDictService issueProjectTagDictService;
@Value("${openapi.scan.server.url}")
@ -879,6 +885,120 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
}
}
/**
* 议题管理-议题转项目-增加分类标签功能
*
* @param formDTO
* @return void
* @author zhaoqifeng
* @date 2020/12/9 10:01
*/
@Override
public void shiftProjectV2(ShiftProjectFormDTO formDTO) {
//获取议题分类
List<IssueCategoryDTO> categoryList = issueCategoryService.getCategoryByIssue(formDTO.getIssueId());
if (CollectionUtils.isEmpty(categoryList)) {
throw new RenException(EpmetErrorCode.CATEGORY_IS_NULL.getCode());
}
//公开回复内容审核
if (StringUtils.isNotBlank(formDTO.getPublicReply())) {
TextScanParamDTO textScanParamDTO = new TextScanParamDTO();
TextTaskDTO taskDTO = new TextTaskDTO();
taskDTO.setDataId(UUID.randomUUID().toString().replace("-", ""));
taskDTO.setContent(formDTO.getPublicReply());
textScanParamDTO.getTasks().add(taskDTO);
Result<SyncScanResult> textSyncScanResult = ScanContentUtils.textSyncScan(scanApiUrl.concat(textSyncScanMethod), textScanParamDTO);
if (!textSyncScanResult.success()) {
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode());
} else {
if (!textSyncScanResult.getData().isAllPass()) {
throw new RenException(EpmetErrorCode.TEXT_SCAN_FAILED.getCode());
}
}
}
//因需要保证议题表中的转项目时间与创建项目时间一致 因此先新增项目数据再更新议题数据
//1:查询议题数据
IssueEntity entity = baseDao.selectById(formDTO.getIssueId());
if (null == entity) {
throw new RenException(IssueConstant.SELECT_EXCEPTION);
}
if (IssueConstant.ISSUE_SHIFT_PROJECT.equals(entity.getIssueStatus())) {
throw new RenException(IssueConstant.ISSUE_SHIFT_PROJECT_EXCEPTION);
}
if (!IssueConstant.ISSUE_VOTING.equals(entity.getIssueStatus())) {
throw new RenException(IssueConstant.ISSUE_VOTING_EXCEPTION);
}
formDTO.setIssueDTO(ConvertUtils.sourceToTarget(entity, IssueDTO.class));
//2:调用resi-group查询话题创建人数据(目前议题来源只有来自话题),为了到项目服务初始数据以及发送消息使用
Result<ResiTopicDTO> resultTopicDTO = resiGroupFeignClient.getTopicById(entity.getSourceId());
if (!resultTopicDTO.success() || null == resultTopicDTO.getData()) {
throw new RenException(IssueConstant.SELECT_TOPIC_EXCEPTION);
}
ResiTopicDTO topicDTO = resultTopicDTO.getData();
formDTO.setTopicDTO(topicDTO);
//3:调用gov-project服务,新增项目各业务表初始数据
formDTO.setCategoryList(categoryList);
List<IssueTagsDTO> tagList = issueTagsService.getTagsByIssue(formDTO.getIssueId());
formDTO.setTagList(tagList);
Result<IssueProjectResultDTO> resultDTO = govProjectFeignClient.issueShiftProject(formDTO);
if (!resultDTO.success() || null == resultDTO.getData()) {
logger.error(resultDTO.getInternalMsg());
throw new RenException(IssueConstant.GOV_PRJECT_EXCEPTION);
}
IssueProjectResultDTO issueProjectResultDTO = resultDTO.getData();
//更新项目对标签的引用次数
if (CollectionUtils.isNotEmpty(tagList)) {
tagList.forEach(item -> {
IssueProjectTagDictDTO tag = issueProjectTagDictService.get(item.getTagId());
tag.setProjectUseCount(tag.getProjectUseCount() + NumConstant.ONE);
issueProjectTagDictService.update(tag);
});
}
//4:更新议题相关业务表数据
//4.1:更新议题表数据
entity.setIssueStatus(IssueConstant.ISSUE_SHIFT_PROJECT);
entity.setShiftedTime(issueProjectResultDTO.getShiftedTime());
baseDao.updateById(entity);
//4.2:议题处理进展表新增数据
IssueProcessEntity processEntity = new IssueProcessEntity();
processEntity.setIssueId(entity.getId());
processEntity.setIssueStatus(IssueConstant.ISSUE_SHIFT_PROJECT);
processEntity.setOrgType(IssueConstant.ISSUE_GRID);
processEntity.setOrgId(entity.getGridId());
processEntity.setOrgName(issueProjectResultDTO.getOrgName());
issueProcessDao.insert(processEntity);
//4.3:议题项目关系表新增数据
IssueProjectRelationEntity relationEntity = new IssueProjectRelationEntity();
relationEntity.setIssueId(entity.getId());
relationEntity.setProjectId(issueProjectResultDTO.getProjectId());
issueProjectRelationDao.insert(relationEntity);
//5:调用epmet-message服务,给居民端话题创建人、议题发起人以及政府端工作人员发送消息
if (!shiftProjectMessage(issueProjectResultDTO, formDTO, entity).success()) {
throw new RenException(IssueConstant.SAVE_MSG_EXCEPTION);
}
//5-1:2020.10.26 添加给居民端话题创建人、议题发起人以及政府端工作人员推送微信订阅消息功能 sun
if (!wxmpShiftProjectMessage(issueProjectResultDTO, formDTO, entity).success()) {
logger.error("议题转项目,推送微信订阅消息失败!");
}
//6:缓存中网格下表决中的议题总数减1
govIssueRedis.subtractWorkGrassrootsIssueRedDotValue(entity.getGridId());
try{
issueVoteStatisticalService.syncVotingCacheToDbByParams(formDTO.getIssueId(),entity.getGridId(),null);
}catch(RenException e){
logger.error(e.getInternalMsg());
}
}
/**
* @Description 议题转项目时给话题创建人议题发起人勾选的工作人员分别推送消息
* @author sun

56
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueTagsServiceImpl.java

@ -20,14 +20,23 @@ package com.epmet.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.dao.IssueProjectTagDictDao;
import com.epmet.dao.IssueTagsDao;
import com.epmet.dto.IssueTagsDTO;
import com.epmet.dto.form.AddTagFormDTO;
import com.epmet.dto.result.AddTagResultDTO;
import com.epmet.dto.result.IssueCategoryTagResultDTO;
import com.epmet.entity.IssueProjectTagDictEntity;
import com.epmet.entity.IssueTagsEntity;
import com.epmet.redis.IssueProjectTagDictRedis;
import com.epmet.redis.IssueTagsRedis;
import com.epmet.service.IssueTagsService;
import com.epmet.utils.ModuleConstants;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -48,6 +57,10 @@ public class IssueTagsServiceImpl extends BaseServiceImpl<IssueTagsDao, IssueTag
@Autowired
private IssueTagsRedis issueTagsRedis;
@Autowired
private IssueProjectTagDictDao issueProjectTagDictDao;
@Autowired
private IssueProjectTagDictRedis dictRedis;
@Override
public PageData<IssueTagsDTO> page(Map<String, Object> params) {
@ -101,4 +114,45 @@ public class IssueTagsServiceImpl extends BaseServiceImpl<IssueTagsDao, IssueTag
baseDao.deleteBatchIds(Arrays.asList(ids));
}
/**
* 获取议题标签
*
* @param issueId
* @return java.util.List<com.epmet.dto.IssueTagsDTO>
* @author zhaoqifeng
* @date 2020/12/9 14:07
*/
@Override
public List<IssueTagsDTO> getTagsByIssue(String issueId) {
return baseDao.selectTagsByIssue(issueId);
}
/**
* @Description 标签添加
* @Param form
* @author zxc
* @date 2020/12/9 下午3:29
*/
@Override
public AddTagResultDTO addTag(AddTagFormDTO form, TokenDto tokenDto) {
form.setCustomerId(tokenDto.getCustomerId());
String tagId = baseDao.selectTagNameCount(form);
if (StringUtils.isNotBlank(tagId)){
return new AddTagResultDTO(tagId);
}
IssueProjectTagDictEntity entity = new IssueProjectTagDictEntity();
entity.setCustomerId(form.getCustomerId());
entity.setCategoryId(ModuleConstants.CUSTOMIZED_TAG_CATEGORY_ID);
entity.setTagName(form.getTagName());
entity.setIsDefault(NumConstant.ONE_STR);
entity.setIssueUseCount(NumConstant.ZERO);
entity.setProjectUseCount(NumConstant.ZERO);
issueProjectTagDictDao.insert(entity);
IssueCategoryTagResultDTO issueCategoryTagResultDTO = new IssueCategoryTagResultDTO();
issueCategoryTagResultDTO.setId(entity.getId());
issueCategoryTagResultDTO.setName(entity.getTagName());
dictRedis.addIssueProjectTag(entity.getCustomerId(),entity.getCategoryId(),issueCategoryTagResultDTO);
return new AddTagResultDTO();
}
}

6
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/utils/ModuleConstants.java

@ -154,4 +154,10 @@ public interface ModuleConstants {
String ISSUE_ACTION_SHIFT = "转议题";
String ISSUE_ACTION_REJECT = "驳回";
String ASTERISK = "*";
/**
* 自定义标签类别缺省值
*/
String CUSTOMIZED_TAG_CATEGORY_ID = "customize";
}

67
epmet-module/gov-issue/gov-issue-server/src/main/resources/db/migration/V0.0.7__add_category_tag.sql

@ -0,0 +1,67 @@
CREATE TABLE `issue_project_category_dict` (
`ID` varchar(64) NOT NULL COMMENT '主键',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户id, 产品默认default',
`PID` varchar(64) NOT NULL COMMENT '上级分类ID 顶级此列存储0',
`PIDS` varchar(512) NOT NULL COMMENT '所有上级分类ID,用逗号分开',
`CATEGORY_CODE` varchar(50) DEFAULT NULL COMMENT '分类编码,分类编码+customer_id唯一',
`CATEGORY_NAME` varchar(500) NOT NULL COMMENT '分类名称',
`CATEGORY_TYPE` varchar(50) NOT NULL COMMENT '分类类别1,2,3,4....',
`SORT` int(10) unsigned NOT NULL COMMENT '排序',
`DEL_FLAG` varchar(1) CHARACTER SET utf8mb4 NOT NULL DEFAULT '0' COMMENT '删除标识 0未删除、1已删除',
`REVISION` int(11) NOT NULL DEFAULT '0' COMMENT '乐观锁',
`CREATED_BY` varchar(32) CHARACTER SET utf8mb4 NOT NULL COMMENT '创建人',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(32) CHARACTER SET utf8mb4 NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`ID`,`CUSTOMER_ID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='议题项目分类字典';
CREATE TABLE `issue_project_tag_dict` (
`ID` varchar(64) NOT NULL COMMENT '主键ID',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户ID',
`TAG_NAME` varchar(32) NOT NULL COMMENT '标签名称',
`CATEGORY_ID` varchar(64) DEFAULT NULL COMMENT '分类id, 用户自己添加的标签此列可为空',
`IS_DEFAULT` varchar(32) NOT NULL COMMENT '是否是默认标签(0:是 1:否)',
`ISSUE_USE_COUNT` int(10) NOT NULL DEFAULT '0' COMMENT '议题对标签的引用次数',
`PROJECT_USE_COUNT` int(10) NOT NULL DEFAULT '0' COMMENT '项目对标签的引用次数',
`DEL_FLAG` int(11) NOT NULL DEFAULT '0' COMMENT '删除标识 0.未删除 1.已删除',
`REVISION` int(11) NOT NULL COMMENT '乐观锁',
`CREATED_BY` varchar(64) NOT NULL COMMENT '创建人',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(64) NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`ID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='议题、项目标签字典表';
CREATE TABLE `issue_category` (
`ID` varchar(64) NOT NULL COMMENT '主键',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户id',
`GRID_ID` varchar(64) NOT NULL COMMENT '网格ID: 议题所属网格Id',
`ISSUE_ID` varchar(64) NOT NULL COMMENT '议题id',
`CATEGORY_ID` varchar(64) NOT NULL COMMENT '分类id',
`CATEGORY_PIDS` varchar(512) NOT NULL COMMENT '分类对应的所有上级,英文逗号隔开',
`DEL_FLAG` varchar(1) NOT NULL DEFAULT '0' COMMENT '删除标识 0未删除、1已删除',
`REVISION` int(11) NOT NULL DEFAULT '0' COMMENT '乐观锁',
`CREATED_BY` varchar(64) NOT NULL COMMENT '创建人',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(64) NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`ID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='议题所属分类表';
CREATE TABLE `issue_tags` (
`ID` varchar(64) NOT NULL COMMENT '主键ID',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户ID',
`GRID_ID` varchar(64) NOT NULL COMMENT '议题所属网格id',
`ISSUE_ID` varchar(64) NOT NULL COMMENT '议题ID',
`TAG_ID` varchar(64) NOT NULL COMMENT '标签ID',
`TAG_NAME` varchar(32) NOT NULL COMMENT '标签名称',
`DEL_FLAG` int(11) NOT NULL DEFAULT '0' COMMENT '删除标识 0.未删除 1.已删除',
`REVISION` int(11) NOT NULL COMMENT '乐观锁',
`CREATED_BY` varchar(32) NOT NULL COMMENT '创建人',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`ID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='议题关联标签表';

19
epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueCategoryDao.xml

@ -35,4 +35,23 @@
sort ASC
</select>
<select id="selectCategoryByIssue" resultType="com.epmet.dto.IssueCategoryDTO">
SELECT
CUSTOMER_ID,
GRID_ID,
CATEGORY_ID,
CATEGORY_PIDS
FROM issue_category
WHERE DEL_FLAG = '0'
AND ISSUE_ID = #{issueId}
</select>
<delete id="delByIssueId">
DELETE
FROM
issue_category
WHERE
issue_id = #{issueId}
</delete>
</mapper>

16
epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueProjectCategoryDictDao.xml

@ -36,4 +36,20 @@
</select>
<!-- sql递归 查询客户议题项目的分类信息以及递归查询二级分类信息 end-->
<select id="selectCategoryList" resultType="com.epmet.dto.IssueProjectCategoryDictDTO">
SELECT
*
FROM
issue_project_category_dict
WHERE
del_flag = '0'
<if test="cstegoryIdList != null and cstegoryIdList.size() > 0">
<foreach collection="cstegoryIdList" item="id" open="AND( " separator=" OR " index="index" close=")">
id = #{id}
</foreach>
</if>
ORDER BY
sort ASC
</select>
</mapper>

12
epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueProjectRelationDao.xml

@ -46,4 +46,16 @@
)
</select>
<select id="selectProjectToIssue" resultType="com.epmet.dto.IssueDTO">
SELECT
i.*
FROM
issue_project_relation ipr
INNER JOIN issue i ON ipr.ISSUE_ID = i.ID
WHERE
ipr.DEL_FLAG = '0'
AND i.DEL_FLAG = '0'
AND ipr.PROJECT_ID = #{issueId}
</select>
</mapper>

22
epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueTagsDao.xml

@ -15,5 +15,27 @@
ORDER BY
created_time ASC
</select>
<select id="selectTagsByIssue" resultType="com.epmet.dto.IssueTagsDTO">
SELECT
CUSTOMER_ID,
GRID_ID,
TAG_ID,
TAG_NAME
FROM
issue_tags
WHERE
DEL_FLAG = '0'
AND ISSUE_ID = #{issueId}
</select>
<!-- 查询标签是否重名 -->
<select id="selectTagNameCount" resultType="java.lang.String">
SELECT
ID
FROM issue_project_tag_dict
WHERE DEL_FLAG = 0
AND TAG_NAME = #{tagName}
AND (CUSTOMER_ID = 'default' OR CUSTOMER_ID = #{customerId})
</select>
</mapper>

28
epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/ProjectSaveCategoryFormDTO.java

@ -0,0 +1,28 @@
package com.epmet.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.List;
/**
* 议题保存/修改分类-接口入参
* @Author sun
*/
@Data
public class ProjectSaveCategoryFormDTO implements Serializable {
private static final long serialVersionUID = 2599592072265715951L;
/**
* 议题Id
*/
@NotBlank(message = "项目ID不能为空",groups = {SaveCategory.class})
private String projectId;
/**
* 议题分类集合
*/
private List<SaveIssueCategoryFormDTO> categoryList;
public interface SaveCategory{}
}

26
epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/SaveIssueCategoryFormDTO.java

@ -0,0 +1,26 @@
package com.epmet.dto.form;
import lombok.Data;
import java.io.Serializable;
/**
* 议题保存/修改分类-接口入参
*
* @Author sun
*/
@Data
public class SaveIssueCategoryFormDTO implements Serializable {
private static final long serialVersionUID = 2599592072265715951L;
/**
* 分类Id
*/
private String id;
/**
* 分类名称
*/
private String name;
}

55
epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/ProjectCategoryDTOResultDTO.java

@ -0,0 +1,55 @@
package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* @dscription 项目所属网格分类基本信息-接口返参
* @author sun
*/
@Data
public class ProjectCategoryDTOResultDTO implements Serializable {
private static final long serialVersionUID = 5957826616179876849L;
/**
* 主键
*/
private String id;
/**
* 客户id, 产品默认default
*/
private String customerId;
/**
* 上级分类ID 顶级此列存储0
*/
private String pid;
/**
* 所有上级分类ID用逗号分开
*/
private String pids;
/**
* 分类编码分类编码+customer_id唯一
*/
private String categoryCode;
/**
* 分类名称
*/
private String categoryName;
/**
* 分类类别1,2,3,4....
*/
private String categoryType;
/**
* 排序
*/
private Integer sort;
}

25
epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/ProjectIssueCategoryResultDTO.java

@ -0,0 +1,25 @@
package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @dscription 项目所属网格分类基本信息-接口返参
* @author sun
*/
@Data
public class ProjectIssueCategoryResultDTO implements Serializable {
private static final long serialVersionUID = 5957826616179876849L;
/**
* 项目Id
*/
private ProjectIssueDTOResultDTO issueDTO;
/**
* 项目标题
*/
private List<ProjectCategoryDTOResultDTO> categoryList;
}

96
epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/ProjectIssueDTOResultDTO.java

@ -0,0 +1,96 @@
package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @dscription 项目所属网格分类基本信息-接口返参
* @author sun
*/
@Data
public class ProjectIssueDTOResultDTO implements Serializable {
private static final long serialVersionUID = 5957826616179876849L;
/**
* 议题ID
*/
private String id;
/**
* 议题状态 表决中voting 已转项目shift_project 已关闭closed
*/
private String issueStatus;
/**
* 来源类型 eg:resi_topic
*/
private String sourceType;
/**
* 来源ID eg:2223232(当SOURCE_TYPE为"resi_topic"这里指话题的ID)
*/
private String sourceId;
/**
* 关闭理由 未关闭时可以为空关闭议题时必填的理由转项目后而且已经结案这个字段不回写
*/
private String closeReason;
/**
* 解决类型 未关闭时可以为空已解决resolved未解决unresolved对应在关闭议题时所选的checkbox转项目后而且已经结案这个字段不回写
*/
private String resolveType;
/**
* 议题名称 最多20字
*/
private String issueTitle;
/**
* 建议 最多1000字
*/
private String suggestion;
/**
* 客户ID
*/
private String customerId;
/**
* 网格ID 居民端议题对应一个网格Id
*/
private String gridId;
/**
* 所属机关 数据权限-非必填11:22:33(agencyId)数据权限控制
*/
private String orgIdPath;
/**
* 组织ID 数据权限-非必填agencyId
*/
private String orgId;
/**
* 表决截止日期
*/
private Date votingDeadline;
/**
* 表决发起日期转议题日期
*/
private Date decidedTime;
/**
* 转项目日期 服务间调用日期一致性
*/
private Date shiftedTime;
/**
* 关闭日期
*/
private Date closedTime;
}

19
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectCategoryController.java

@ -17,6 +17,8 @@
package com.epmet.controller;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ExcelUtils;
import com.epmet.commons.tools.utils.Result;
@ -27,6 +29,7 @@ import com.epmet.commons.tools.validator.group.DefaultGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.dto.ProjectCategoryDTO;
import com.epmet.dto.form.ProjectCategoryTagListFormDTO;
import com.epmet.dto.form.ProjectSaveCategoryFormDTO;
import com.epmet.dto.result.ProjectCategoryTagListResultDTO;
import com.epmet.excel.ProjectCategoryExcel;
import com.epmet.service.ProjectCategoryService;
@ -105,4 +108,20 @@ public class ProjectCategoryController {
return new Result<ProjectCategoryTagListResultDTO>().ok(projectCategoryService.categoryTagList(formDTO));
}
/**
* @param formDTO
* @return
* @Description 项目保存/修改分类
* @Author sun
**/
@PostMapping("save")
public Result saveCategory(@RequestBody ProjectSaveCategoryFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, ProjectSaveCategoryFormDTO.SaveCategory.class);
if(formDTO.getCategoryList().size()< NumConstant.ONE){
throw new RenException("请至少选择一个分类保存");
}
projectCategoryService.saveCategory(formDTO);
return new Result();
}
}

5
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/dao/ProjectCategoryDao.java

@ -39,4 +39,9 @@ public interface ProjectCategoryDao extends BaseDao<ProjectCategoryEntity> {
**/
List<String> selectProjectCategoryIdList(@Param("projectId") String projectId);
/**
* @Description 删除项目的分类信息
* @Author sun
**/
void delByProjectId(@Param("projectId") String projectId);
}

9
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectCategoryService.java

@ -21,6 +21,7 @@ import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.page.PageData;
import com.epmet.dto.ProjectCategoryDTO;
import com.epmet.dto.form.ProjectCategoryTagListFormDTO;
import com.epmet.dto.form.ProjectSaveCategoryFormDTO;
import com.epmet.dto.result.ProjectCategoryTagListResultDTO;
import com.epmet.entity.ProjectCategoryEntity;
@ -102,4 +103,12 @@ public interface ProjectCategoryService extends BaseService<ProjectCategoryEntit
* @Author sun
**/
ProjectCategoryTagListResultDTO categoryTagList(ProjectCategoryTagListFormDTO formDTO);
/**
* @param formDTO
* @return
* @Description 项目保存/修改分类
* @Author sun
**/
void saveCategory(ProjectSaveCategoryFormDTO formDTO);
}

49
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectCategoryServiceImpl.java

@ -22,7 +22,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ConvertUtils;
@ -31,8 +30,8 @@ import com.epmet.dao.ProjectCategoryDao;
import com.epmet.dao.ProjectTagsDao;
import com.epmet.dto.ProjectCategoryDTO;
import com.epmet.dto.form.ProjectCategoryTagListFormDTO;
import com.epmet.dto.result.ProjectCategoryTagListResultDTO;
import com.epmet.dto.result.ProjectCategoryTagResultDTO;
import com.epmet.dto.form.ProjectSaveCategoryFormDTO;
import com.epmet.dto.result.*;
import com.epmet.entity.ProjectCategoryEntity;
import com.epmet.feign.GovIssueOpenFeignClient;
import com.epmet.redis.ProjectCategoryRedis;
@ -42,6 +41,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@ -141,4 +141,47 @@ public class ProjectCategoryServiceImpl extends BaseServiceImpl<ProjectCategoryD
return resultDTO;
}
/**
* @param formDTO
* @return
* @Description 项目保存/修改分类
* @Author sun
**/
@Override
public void saveCategory(ProjectSaveCategoryFormDTO formDTO) {
//1.查询项目所属客户和所属网格信息以及分类对应的分类信息
Result<ProjectIssueCategoryResultDTO> result = govIssueOpenFeignClient.getProjectAndCategoryInfo(formDTO);
if (!result.success()) {
throw new RenException(String.format("保存项目分类,获取项目对应的议题信息以及分类信息失败,projiectId->%s", formDTO.getProjectId()));
}
ProjectIssueDTOResultDTO issue = result.getData().getIssueDTO();
List<ProjectCategoryDTOResultDTO> categoryList = result.getData().getCategoryList();
//2.汇总批量新增数据
List<ProjectCategoryEntity> entityList = new ArrayList<>();
formDTO.getCategoryList().forEach(ca -> {
ProjectCategoryEntity entity = new ProjectCategoryEntity();
entity.setCustomerId(issue.getCustomerId());
entity.setGridId(issue.getGridId());
entity.setProjectId(formDTO.getProjectId());
entity.setCategoryId(ca.getId());
categoryList.forEach(cl -> {
if (ca.getId().equals(cl.getId())) {
entity.setCategoryPids(cl.getPids());
}
});
entityList.add(entity);
});
//3.根据议题Id删除可能存在的分类信息
baseDao.delByProjectId(formDTO.getProjectId());
//4.批量保存议题分类信息
if (!insertBatch(entityList)) {
throw new RenException(String.format("项目分类信息保存失败"));
}
}
}

33
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java

@ -102,6 +102,10 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
private String textSyncScanMethod;
@Autowired
private ProjectOrgRelationDao relationDao;
@Autowired
private ProjectCategoryService projectCategoryService;
@Autowired
private ProjectTagsService projectTagsService;
private final static String ONE_DAY = "<1";
@ -850,6 +854,34 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
list.add(entity2);
projectRelatedPersonnelService.insertBatch(list);
//项目分类和标签表初始数据
if (CollectionUtils.isNotEmpty(formDTO.getCategoryList())) {
List<ProjectCategoryEntity> categoryList = new ArrayList<>();
formDTO.getCategoryList().forEach(item -> {
ProjectCategoryEntity entity = new ProjectCategoryEntity();
entity.setCategoryId(item.getCategoryId());
entity.setCategoryPids(item.getCategoryPids());
entity.setCustomerId(item.getCustomerId());
entity.setGridId(item.getGridId());
entity.setProjectId(projectEntity.getId());
categoryList.add(entity);
});
projectCategoryService.insertBatch(categoryList);
if (CollectionUtils.isNotEmpty(formDTO.getTagList())) {
List<ProjectTagsEntity> tagList = new ArrayList<>();
formDTO.getTagList().forEach(item -> {
ProjectTagsEntity entity = new ProjectTagsEntity();
entity.setCustomerId(item.getCustomerId());
entity.setTagId(item.getTagId());
entity.setTagName(item.getTagName());
entity.setProjectId(projectEntity.getId());
tagList.add(entity);
});
projectTagsService.insertBatch(tagList);
}
}
//6:返回接口参数
issueProjectResultDTO.setProjectId(projectEntity.getId());
issueProjectResultDTO.setOrgName(processEntity.getDepartmentName());
@ -859,6 +891,7 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
return issueProjectResultDTO;
}
@Override
public void response(ProjectResponseFormDTO formDTO) {
//公开回复内容审核

30
epmet-module/gov-project/gov-project-server/src/main/resources/db/migration/V0.0.5__add_category_tag.sql

@ -0,0 +1,30 @@
CREATE TABLE `project_category` (
`ID` varchar(64) NOT NULL COMMENT '主键',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户id',
`GRID_ID` varchar(64) DEFAULT NULL COMMENT '来源网格id',
`PROJECT_ID` varchar(64) NOT NULL COMMENT '项目id',
`CATEGORY_ID` varchar(64) NOT NULL COMMENT '分类id',
`CATEGORY_PIDS` varchar(512) NOT NULL COMMENT '分类对应的所有上级,英文逗号隔开',
`DEL_FLAG` varchar(1) NOT NULL DEFAULT '0' COMMENT '删除标识 0未删除、1已删除',
`REVISION` int(11) NOT NULL DEFAULT '0' COMMENT '乐观锁',
`CREATED_BY` varchar(64) NOT NULL COMMENT '创建人',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(64) NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`ID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='项目所属分类表';
CREATE TABLE `project_tags` (
`ID` varchar(64) NOT NULL COMMENT '主键ID',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户ID',
`PROJECT_ID` varchar(64) NOT NULL COMMENT '项目ID',
`TAG_ID` varchar(64) NOT NULL COMMENT '标签ID',
`TAG_NAME` varchar(32) NOT NULL COMMENT '标签名称',
`DEL_FLAG` int(11) NOT NULL DEFAULT '0' COMMENT '删除标识 0.未删除 1.已删除',
`REVISION` int(11) NOT NULL COMMENT '乐观锁',
`CREATED_BY` varchar(32) NOT NULL COMMENT '创建人',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`ID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='项目关联标签表';

14
epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectCategoryDao.xml

@ -5,12 +5,20 @@
<select id="selectProjectCategoryIdList" resultType="java.lang.String">
SELECT
CATEGORY_ID
category_id
FROM
project_category
WHERE
DEL_FLAG = '0'
AND PROJECT_ID = #{projectId}
del_flag = '0'
AND project_id = #{projectId}
</select>
<delete id="delByProjectId">
DELETE
FROM
project_category
WHERE
project_id = #{projectId}
</delete>
</mapper>
Loading…
Cancel
Save