Browse Source

Merge branch 'dev_issue_category' into dev_temp

master
zhaoqifeng 5 years ago
parent
commit
392bf8a2b7
  1. 28
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/TagDifferentSetFormDTO.java
  2. 11
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/GovIssueOpenFeignClient.java
  3. 5
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/fallback/GovIssueOpenFeignClientFallBack.java
  4. 2
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueManageController.java
  5. 15
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueProjectTagDictController.java
  6. 7
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/redis/IssueProjectTagDictRedis.java
  7. 10
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueProjectTagDictService.java
  8. 1
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueProjectCategoryDictServiceImpl.java
  9. 13
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueProjectTagDictServiceImpl.java
  10. 43
      epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/ProjectTagHookFormDTO.java
  11. 13
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectTagsController.java
  12. 18
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/dao/ProjectTagsDao.java
  13. 11
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectTagsService.java
  14. 48
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTagsServiceImpl.java
  15. 38
      epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectTagsDao.xml

28
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/TagDifferentSetFormDTO.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;
/**
* @Description 更新标签使用率入参DTO
* @ClassName TagDifferentSetFormDTO
* @Auth wangc
* @Date 2020-12-11 14:03
*/
@Data
public class TagDifferentSetFormDTO implements Serializable {
private static final long serialVersionUID = -5232943723252172322L;
private List<String> plus;
private List<String> minus;
@NotBlank(message = "客户Id不能为空")
private String customerId;
@NotBlank(message = "用户Id不能为空")
private String userId;
}

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

@ -223,4 +223,15 @@ public interface GovIssueOpenFeignClient {
**/
@PostMapping(value = "/gov/issue/issueprojectcategorydict/getprojectandcategoryinfo")
Result<ProjectIssueCategoryResultDTO> getProjectAndCategoryInfo(ProjectSaveCategoryFormDTO formDTO);
/**
* @Description 更新标签热度 数据库/缓存
* @param param
* @return void
* @author wangc
* @date 2020.12.11 14:00
*/
@PostMapping("/gov/issue/issueprojecttagdict/updatecitations")
Result updateCitations(@RequestBody TagDifferentSetFormDTO param);
}

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

@ -211,4 +211,9 @@ public class GovIssueOpenFeignClientFallBack implements GovIssueOpenFeignClient
public Result<ProjectIssueCategoryResultDTO> getProjectAndCategoryInfo(ProjectSaveCategoryFormDTO formDTO) {
return ModuleUtils.feignConError(ServiceConstant.GOV_ISSUE_SERVER, "getProjectAndCategoryInfo", formDTO);
}
@Override
public Result updateCitations(TagDifferentSetFormDTO param) {
return ModuleUtils.feignConError(ServiceConstant.GOV_ISSUE_SERVER, "updateCitations", param);
}
}

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

@ -180,7 +180,7 @@ public class IssueManageController {
public Result shiftProjectV2(@LoginUser TokenDto tokenDTO, @RequestBody ShiftProjectFormDTO formDTO) {
formDTO.setStaffId(tokenDTO.getUserId());
ValidatorUtils.validateEntity(formDTO);
issueService.shiftProject(formDTO);
issueService.shiftProjectV2(formDTO);
return new Result();
}

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

@ -28,6 +28,7 @@ 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.TagDifferentSetFormDTO;
import com.epmet.dto.form.TagListFormDTO;
import com.epmet.dto.result.TagListResultDTO;
import com.epmet.excel.IssueProjectTagDictExcel;
@ -107,4 +108,18 @@ public class IssueProjectTagDictController {
public Result<TagListResultDTO> list(@LoginUser TokenDto tokenDto, @RequestBody TagListFormDTO formDTO) {
return new Result<TagListResultDTO>().ok(issueProjectTagDictService.getTagList(tokenDto, formDTO));
}
/**
* @Description 更新标签热度 数据库/缓存
* @param param
* @return void
* @author wangc
* @date 2020.12.11 14:00
*/
@PostMapping("updatecitations")
public Result updateCitations(@RequestBody TagDifferentSetFormDTO param){
ValidatorUtils.validateEntity(param);
issueProjectTagDictService.updateTagHeat(param);
return new Result();
}
}

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

@ -144,7 +144,10 @@ public class IssueProjectTagDictRedis {
/**
* @Description category为空则补偿全部返回默认标签和自定义标签
* @Description FIXME 该方法保留默认查询缓存默认和自定义两种标签均按热度排序
* FIXME 如果缓存中没有相关数据则进行补偿返回的数据为1默认标签(分类排序) 2自定义标签(热度排序)
* FIXME 补偿机制均是在缓存中存储热度得分因此在业务改变之前不要调用该方法
* category为空则补偿全部返回默认标签和自定义标签
* category仅包含"其他"这个分类的Id时同上
* category不为空且不只有"其他"这个分类的Id时则返回集合中的类别标签以及自定义标签
* 默认标签不按照热度排序自定义标签按照热度排序
@ -294,9 +297,11 @@ public class IssueProjectTagDictRedis {
}
Map<String,List<IssueCategoryTagResultDTO>> result = new HashMap<>();
//默认标签:按照分类排序 Mapper返回的查询结果是有序的
result.put(ModuleConstants.DEFAULT_TAG_CATEGORY_NAME,CollectionUtils.isEmpty(db) ? null : db.stream().filter(o -> !StringUtils.equals(ModuleConstants.CUSTOMIZED_TAG_CATEGORY_NAME,o.getCategoryId())).map(entity -> {
IssueCategoryTagResultDTO tag = ConvertUtils.sourceToTarget(entity,IssueCategoryTagResultDTO.class);
tag.setName(entity.getTagName()); return tag;}).collect(Collectors.toList()));
//自定义标签:按照热度排序 sorted(Comparator.comparing(IssueProjectTagDictEntity :: getIssueUseCount).reversed())
result.put(ModuleConstants.CUSTOMIZED_TAG_CATEGORY_NAME,CollectionUtils.isEmpty(db) ? null : db.stream().filter(o -> !StringUtils.equals(ModuleConstants.CUSTOMIZED_TAG_CATEGORY_NAME,o.getCategoryId())).sorted(Comparator.comparing(IssueProjectTagDictEntity :: getIssueUseCount).reversed()).map(entity -> {
IssueCategoryTagResultDTO tag = ConvertUtils.sourceToTarget(entity,IssueCategoryTagResultDTO.class);
tag.setName(entity.getTagName());return tag;}).collect(Collectors.toList()));

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

@ -21,6 +21,7 @@ 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.TagDifferentSetFormDTO;
import com.epmet.dto.form.TagListFormDTO;
import com.epmet.dto.result.TagListResultDTO;
import com.epmet.entity.IssueProjectTagDictEntity;
@ -114,4 +115,13 @@ public interface IssueProjectTagDictService extends BaseService<IssueProjectTagD
* @return java.util.List<com.epmet.entity.IssueProjectTagDictEntity>
*/
List<IssueProjectTagDictEntity> getTagListByCustomer(String customerId);
/**
* @Description 更新标签热度 数据库/缓存
* @param param
* @return void
* @author wangc
* @date 2020.12.11 14:00
*/
void updateTagHeat(TagDifferentSetFormDTO param);
}

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

@ -197,5 +197,4 @@ public class IssueProjectCategoryDictServiceImpl extends BaseServiceImpl<IssuePr
issueProjectTagDictService.insertBatch(tagList);
}
}
}

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

@ -27,6 +27,7 @@ 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.TagDifferentSetFormDTO;
import com.epmet.dto.form.TagListFormDTO;
import com.epmet.dto.result.IssueCategoryTagResultDTO;
import com.epmet.dto.result.TagListResultDTO;
@ -143,4 +144,16 @@ public class IssueProjectTagDictServiceImpl extends BaseServiceImpl<IssueProject
return baseDao.selectTagListByCustomer(customerId);
}
/**
* @Description 更新标签热度 数据库/缓存
* @param param
* @return void
* @author wangc
* @date 2020.12.11 14:00
*/
@Override
public void updateTagHeat(TagDifferentSetFormDTO param) {
}
}

43
epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/ProjectTagHookFormDTO.java

@ -0,0 +1,43 @@
package com.epmet.dto.form;
import com.epmet.dto.result.ProjectCategoryTagResultDTO;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.List;
/**
* @Description 项目-标签-钩子入参
* @ClassName ProjectTagHookFormDTO
* @Auth wangc
* @Date 2020-12-11 11:02
*/
@Data
public class ProjectTagHookFormDTO implements Serializable {
private static final long serialVersionUID = 1432932825980640139L;
/**
* 项目Id
*/
@NotBlank(message = "项目Id不能为空")
private String projectId;
/**
* 标签列表 标签Id 标签Name
* 为空表示清除项目的标签信息
*/
private List<ProjectCategoryTagResultDTO> tagList;
/**
* 客户Id从token中获取
*/
@NotBlank(message = "客户Id不能为空")
private String customerId;
/**
* 工作人员Id从token中获取
*/
@NotBlank(message = "工作人员Id不能为空")
private String staffId;
}

13
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectTagsController.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,7 @@ 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.ProjectTagsDTO;
import com.epmet.dto.form.ProjectTagHookFormDTO;
import com.epmet.excel.ProjectTagsExcel;
import com.epmet.service.ProjectTagsService;
import org.springframework.beans.factory.annotation.Autowired;
@ -61,11 +64,13 @@ public class ProjectTagsController {
return new Result<ProjectTagsDTO>().ok(data);
}
@PostMapping
public Result save(@RequestBody ProjectTagsDTO dto){
@PostMapping("save")
public Result save(@RequestBody ProjectTagHookFormDTO dto, @LoginUser TokenDto token){
dto.setCustomerId(token.getCustomerId());
dto.setStaffId(token.getUserId());
//效验数据
ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
projectTagsService.save(dto);
ValidatorUtils.validateEntity(dto);
projectTagsService.saveDifferentSet(dto);
return new Result();
}

18
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/dao/ProjectTagsDao.java

@ -39,4 +39,22 @@ public interface ProjectTagsDao extends BaseDao<ProjectTagsEntity> {
* @Author sun
**/
List<ProjectCategoryTagResultDTO> selectProjectTagList(@Param("projectId") String projectId);
/**
* @Description 删除项目的标签
* @param projectId
* @return void
* @author wangc
* @date 2020.12.11 13:26
*/
void deleteProjectTags(@Param("projectId") String projectId);
/**
* @Description 批量插入
* @param list
* @return void
* @author wangc
* @date 2020.12.11 13:39
*/
void insertBatch(@Param("list")List<ProjectTagsEntity> list);
}

11
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectTagsService.java

@ -20,6 +20,7 @@ package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.page.PageData;
import com.epmet.dto.ProjectTagsDTO;
import com.epmet.dto.form.ProjectTagHookFormDTO;
import com.epmet.entity.ProjectTagsEntity;
import java.util.List;
@ -92,4 +93,14 @@ public interface ProjectTagsService extends BaseService<ProjectTagsEntity> {
* @date 2020-12-08
*/
void delete(String[] ids);
/**
* @Description 修改项目于标签的绑定关系并对标签的引用量做出相应调整
* saveDifferentSet :: 保存差集
* @param param
* @return void
* @author wangc
* @date 2020.12.11 11:10
*/
void saveDifferentSet(ProjectTagHookFormDTO param);
}

48
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTagsServiceImpl.java

@ -20,22 +20,30 @@ 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.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.commons.tools.utils.Result;
import com.epmet.dao.ProjectTagsDao;
import com.epmet.dto.ProjectTagsDTO;
import com.epmet.dto.form.ProjectTagHookFormDTO;
import com.epmet.dto.form.TagDifferentSetFormDTO;
import com.epmet.dto.result.ProjectCategoryTagResultDTO;
import com.epmet.entity.ProjectTagsEntity;
import com.epmet.feign.GovIssueOpenFeignClient;
import com.epmet.redis.ProjectTagsRedis;
import com.epmet.service.ProjectTagsService;
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 org.springframework.util.CollectionUtils;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 项目关联标签表
@ -49,6 +57,9 @@ public class ProjectTagsServiceImpl extends BaseServiceImpl<ProjectTagsDao, Proj
@Autowired
private ProjectTagsRedis projectTagsRedis;
@Autowired
private GovIssueOpenFeignClient issueClient;
@Override
public PageData<ProjectTagsDTO> page(Map<String, Object> params) {
IPage<ProjectTagsEntity> page = baseDao.selectPage(
@ -101,4 +112,41 @@ public class ProjectTagsServiceImpl extends BaseServiceImpl<ProjectTagsDao, Proj
baseDao.deleteBatchIds(Arrays.asList(ids));
}
/**
* @Description 修改项目于标签的绑定关系并对标签的引用量做出相应调整
* saveDifferentSet :: 保存差集
* @param param
* @return void
* @author wangc
* @date 2020.12.11 11:10
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void saveDifferentSet(ProjectTagHookFormDTO param) {
//原始
List<ProjectCategoryTagResultDTO> orientHooks = baseDao.selectProjectTagList(param.getProjectId());
//新增
List<ProjectCategoryTagResultDTO> newHooks = param.getTagList();
if(!CollectionUtils.isEmpty(orientHooks)) baseDao.deleteProjectTags(param.getProjectId());
if(!CollectionUtils.isEmpty(newHooks)){
baseDao.insertBatch(newHooks.stream().map(o->{
ProjectTagsEntity hook = ConvertUtils.sourceToTarget(param,ProjectTagsEntity.class);hook.setTagId(o.getId());hook.setTagName(o.getName());hook.setCreatedBy(param.getStaffId());return hook;
}).collect(Collectors.toList()));
}
List<String> orientIds = CollectionUtils.isEmpty(orientHooks) ? null : orientHooks.stream().map(ProjectCategoryTagResultDTO :: getId).collect(Collectors.toList());
List<String> newIds = CollectionUtils.isEmpty(newHooks) ? null : newHooks.stream().map(ProjectCategoryTagResultDTO::getId).collect(Collectors.toList());
TagDifferentSetFormDTO differentSet = ConvertUtils.sourceToTarget(param,TagDifferentSetFormDTO.class);
differentSet.setUserId(param.getStaffId());
if(null == orientIds && null == newIds) return ;
if(null != orientIds && null == newIds) differentSet.setMinus(orientIds);
if(null == orientIds && null != newIds) differentSet.setPlus(newIds);
if(null != orientIds && null != newIds){
differentSet.setPlus(newIds.removeAll(orientIds) ? newIds : null);
differentSet.setMinus(orientIds.removeAll(newIds) ? orientIds : null);
}
Result result = issueClient.updateCitations(differentSet);
if(!result.success()) throw new RenException(result.getInternalMsg());
}
}

38
epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectTagsDao.xml

@ -16,4 +16,42 @@
created_time ASC
</select>
<!-- 删除项目的标签 -->
<delete id="deleteProjectTags">
delete from project_tags
where del_flag = '0'
and project_id = #{projectId}
</delete>
<insert id="insertBatch" parameterType="java.util.List">
INSERT INTO project_tags
(
ID,
CUSTOMER_ID,
PROJECT_ID,
TAG_ID,
TAG_NAME,
DEL_FLAG,
REVISION,
CREATED_BY,
CREATED_TIME,
UPDATED_BY,
UPDATED_TIME
) values
<foreach collection="list" item="item" index="index" separator=",">
(
(SELECT REPLACE(UUID(), '-', '') AS id),
#{item.customerId},
#{item.projectId},
#{item.tagId},
#{item.tagName},
0,
0,
#{item.createdBy},
now(),
#{item.createdBy},
now()
)
</foreach>
</insert>
</mapper>
Loading…
Cancel
Save