服务指令同步(临时版本)

This commit is contained in:
1378012178@qq.com 2025-07-25 15:11:44 +08:00
parent bbe90c7203
commit 4cbe3c689e
17 changed files with 364 additions and 49 deletions

View File

@ -0,0 +1,41 @@
package com.nu.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Description: 体型标签
* @Author: 张明远
* @Date: 2025-07-25
* @Version: V1.0
*/
@Data
public class BodyTagMQDto implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
private String id;
/**
* 标签名称
*/
private String tagName;
/**
* 排序
*/
private Integer sort;
/**
* 状态 0已授权 1未授权
*/
private String status;
/**
* 是否启用 0启用 1未启用
*/
private String izEnabled;
/**
* 是否删除 0未删除 1删除
*/
private String delFlag;
}

View File

@ -0,0 +1,45 @@
package com.nu.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Description: 服务类别
* @Author: 张明远
* @Date: 2025-07-25
* @Version: V1.0
*/
@Data
public class CategoryMQDto implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
private String id;
/**
* 分类标签id
*/
private String instructionId;
/**
* 服务类别名称
*/
private String categoryName;
/**
* 排序
*/
private Integer sort;
/**
* 状态 0已授权 1未授权
*/
private String status;
/**
* 是否启用 0启用 1未启用
*/
private String izEnabled;
/**
* 是否删除 0未删除 1删除
*/
private String delFlag;
}

View File

@ -3,6 +3,7 @@ package com.nu.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @Description: 服务指令审核
@ -134,4 +135,6 @@ public class DirectiveAsyncMQDto implements Serializable {
private String bodyTagsObj;
//情绪标签json字符串有idlabel
private String emotionTagsObj;
}

View File

@ -15,4 +15,17 @@ public class DirectiveMQDto {
private String asyncId;
//同步子表code
private String code;
//指令集合
private List<DirectiveAsyncMQDto> directiveList;
//分类标签字典项
private List<InstructionTagMQDto> instructionList;
//服务类别字典项
private List<CategoryMQDto> categoryList;
//服务类型字典项
private List<DirectiveTypeMQDto> typeList;
//体型标签字典项
private List<BodyTagMQDto> bodyTagList;
//情绪标签字典项
private List<EmotionTagMQDto> emotionTagList;
}

View File

@ -0,0 +1,61 @@
package com.nu.dto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
/**
* @Description: 服务类型
* @Author: 张明远
* @Date: 2025-07-25
* @Version: V1.0
*/
@Data
public class DirectiveTypeMQDto implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
private String id;
/**
* 分类标签id
*/
private String instructionId;
/**
* 服务类别id
*/
private String categoryId;
/**
* 服务类型名称
*/
private String typeName;
/**
* 排序
*/
private Integer sort;
/**
* 状态 0已授权 1未授权
*/
private String status;
/**
* 是否启用 0启用 1未启用
*/
private String izEnabled;
/**
* 是否删除 0未删除 1删除
*/
private String delFlag;
}

View File

@ -0,0 +1,41 @@
package com.nu.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Description: 情绪标签
* @Author: 张明远
* @Date: 2025-07-25
* @Version: V1.0
*/
@Data
public class EmotionTagMQDto implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
private String id;
/**
* 标签名称
*/
private String tagName;
/**
* 排序
*/
private Integer sort;
/**
* 状态 0已授权 1未授权
*/
private String status;
/**
* 是否启用 0启用 1未启用
*/
private String izEnabled;
/**
* 是否删除 0未删除 1删除
*/
private String delFlag;
}

View File

@ -0,0 +1,29 @@
package com.nu.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Description: 服务指令-分类标签
* @Author: zmy
* @Date: 2025-07-25
* @Version: V1.0
*/
@Data
public class InstructionTagMQDto implements Serializable {
private static final long serialVersionUID = 1L;
/**id*/
private String id;
/**分类标签名称*/
private String instructionName;
/**排序*/
private Integer sort;
/**状态 0已授权 1未授权*/
private String status;
/**是否启用 0启用 1未启用*/
private String izEnabled;
/**是否删除 0未删除 1删除*/
private String delFlag;
}

View File

@ -16,6 +16,7 @@ public interface IDirectiveBodyTagService extends IService<DirectiveBodyTag> {
/**
* 查询数据是否已被使用
*
* @param ids
* @return
*/
@ -27,7 +28,7 @@ public interface IDirectiveBodyTagService extends IService<DirectiveBodyTag> {
void insertAllRelation(List<DirectiveBodyTagRelation> relations);
List<DirectiveBodyTag> selectAll(String dataSourceCode, List<String> ids,List<String> excludeIds);
List<DirectiveBodyTag> selectAll(List<String> ids, List<String> excludeIds);
void insertAll(List<DirectiveBodyTag> bodyAll);
}

View File

@ -62,8 +62,7 @@ public class DirectiveBodyTagServiceImpl extends ServiceImpl<DirectiveBodyTagMap
}
@Override
@DS("#dataSourceCode")
public List<DirectiveBodyTag> selectAll(String dataSourceCode, List<String> ids,List<String> excludeIds) {
public List<DirectiveBodyTag> selectAll(List<String> ids, List<String> excludeIds) {
return baseMapper.selectAll(ids, excludeIds);
}

View File

@ -16,6 +16,7 @@ public interface IDirectiveEmotionTagService extends IService<DirectiveEmotionTa
/**
* 查询数据是否已被使用
*
* @param ids
* @return
*/
@ -27,7 +28,7 @@ public interface IDirectiveEmotionTagService extends IService<DirectiveEmotionTa
void insertAllRelation(List<DirectiveEmotionTagRelation> relations);
List<DirectiveEmotionTag> selectAll(String dataSourceCode, List<String> ids,List<String> excludeIds);
List<DirectiveEmotionTag> selectAll(List<String> ids, List<String> excludeIds);
void insertAll(List<DirectiveEmotionTag> emoRelations);
}

View File

@ -62,8 +62,7 @@ public class DirectiveEmotionTagServiceImpl extends ServiceImpl<DirectiveEmotion
}
@Override
@DS("#dataSourceCode")
public List<DirectiveEmotionTag> selectAll(String dataSourceCode, List<String> ids, List<String> excludeIds) {
public List<DirectiveEmotionTag> selectAll(List<String> ids, List<String> excludeIds) {
return baseMapper.selectAll(ids, excludeIds);
}

View File

@ -23,7 +23,7 @@ public interface IConfigServiceCategoryService extends IService<ConfigServiceCat
void removeAll();
List<ConfigServiceCategory> selectAll(String dataSourceCode, List<String> ids, List<String> excludeSubIds);
List<ConfigServiceCategory> selectAll(List<String> ids, List<String> excludeSubIds);
void insertAll(List<ConfigServiceCategory> categoryList);
}

View File

@ -65,8 +65,7 @@ public class ConfigServiceCategoryServiceImpl extends ServiceImpl<ConfigServiceC
}
@Override
@DS("#dataSourceCode")
public List<ConfigServiceCategory> selectAll(String dataSourceCode, List<String> ids, List<String> excludeSubIds) {
public List<ConfigServiceCategory> selectAll(List<String> ids, List<String> excludeSubIds) {
return baseMapper.selectAll(ids, excludeSubIds);
}

View File

@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.beust.jcommander.internal.Maps;
import com.nu.dto.DirectiveAsyncMQDto;
import com.nu.modules.directivetag.body.service.IDirectiveBodyTagService;
import com.nu.modules.servicedirective.entity.ConfigServiceDirective;
import com.nu.modules.servicedirective.service.IConfigServiceDirectiveService;
import com.nu.utils.RabbitMQUtil;
@ -65,10 +66,7 @@ public class ConfigServiceDirectiveController extends JeecgController<ConfigServ
//@AutoLog(value = "服务指令-分页列表查询")
@ApiOperation(value = "服务指令-分页列表查询", notes = "服务指令-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<ConfigServiceDirective>> queryPageList(ConfigServiceDirective configServiceDirective,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
public Result<IPage<ConfigServiceDirective>> queryPageList(ConfigServiceDirective configServiceDirective, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) {
Map<String, QueryRuleEnum> customeRuleMap = new HashMap<>();
// 自定义多选的查询规则为LIKE_WITH_OR
customeRuleMap.put("categoryId", QueryRuleEnum.LIKE_WITH_OR);
@ -127,10 +125,7 @@ public class ConfigServiceDirectiveController extends JeecgController<ConfigServ
@ApiOperation(value = "服务指令-分页列表查询", notes = "服务指令-分页列表查询")
@GetMapping(value = "/listByDS")
@DS("#dataSourceCode")
public Result<IPage<ConfigServiceDirective>> queryPageListByDS(@RequestParam(name = "dataSourceCode") String dataSourceCode, ConfigServiceDirective configServiceDirective,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
public Result<IPage<ConfigServiceDirective>> queryPageListByDS(@RequestParam(name = "dataSourceCode") String dataSourceCode, ConfigServiceDirective configServiceDirective, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) {
if (StringUtils.isBlank(dataSourceCode)) {
return Result.ok(new Page<ConfigServiceDirective>());
}
@ -167,11 +162,11 @@ public class ConfigServiceDirectiveController extends JeecgController<ConfigServ
}
}
//只查询已授权status = 0)
if (StringUtils.isNotBlank(configServiceDirective.getStatus())) {
queryWrapper.in("status", configServiceDirective.getStatus().split(","));
} else {
queryWrapper.in("status", new String[]{"0", "2"});
}
// if (StringUtils.isNotBlank(configServiceDirective.getStatus())) {
// queryWrapper.in("status", configServiceDirective.getStatus().split(","));
// } else {
// queryWrapper.in("status", new String[]{"0", "2"});
// }
if (StringUtils.isNotBlank(configServiceDirective.getExcludeIds())) {
queryWrapper.notIn("id", configServiceDirective.getExcludeIds().split(","));
}
@ -377,9 +372,7 @@ public class ConfigServiceDirectiveController extends JeecgController<ConfigServ
BeanUtils.copyProperties(dto, directiveAsyncMQDto);
List<JSONObject> orgList = sysBaseAPI.queryOpeDept();
List<String> codes = orgList.stream()
.map(o -> o.getString("code"))
.collect(Collectors.toList());
List<String> codes = orgList.stream().map(o -> o.getString("code")).collect(Collectors.toList());
//启动线程循环 codes 5 分钟通知一个平台
new Thread(() -> {
@ -397,4 +390,16 @@ public class ConfigServiceDirectiveController extends JeecgController<ConfigServ
return Result.OK(Maps.newHashMap());
}
@AutoLog(value = "服务指令-指令同步")
@ApiOperation(value = "服务指令-指令同步", notes = "服务指令-指令同步")
@GetMapping(value = "/syncDirective")
@DS("#dataSourceCode")
public Result<Map> syncDirective(@RequestParam(name = "dataSourceCode") String dataSourceCode, @RequestParam(name = "syncIds") String syncIds, @RequestParam(name = "syncOrgCodes") String syncOrgCodes) {
//服务指令
configServiceDirectiveService.syncDirective(syncIds, syncOrgCodes);
//发送消息
return Result.ok();
}
}

View File

@ -204,4 +204,8 @@ public class ConfigServiceDirective implements Serializable {
private String instructionTagName;
@TableField(exist = false)
private String excludeIds;//需要排除的ids
@TableField(exist = false)
private String syncIds;//需要同步的的指令id逗号拼接
@TableField(exist = false)
private String syncOrgCodes;//需要同步的指令的机构编码逗号拼接
}

View File

@ -60,4 +60,7 @@ public interface IConfigServiceDirectiveService extends IService<ConfigServiceDi
void handleMediaFile(ConfigServiceDirective configServiceDirective);
void auditPass(ConfigServiceDirective dto);
//同步服务指令
void syncDirective(String syncIds, String syncOrgCodes);
}

View File

@ -1,10 +1,12 @@
package com.nu.modules.servicedirective.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nu.dto.*;
import com.nu.modules.directivetag.body.entity.DirectiveBodyTag;
import com.nu.modules.directivetag.body.service.IDirectiveBodyTagService;
import com.nu.modules.directivetag.emotion.entity.DirectiveEmotionTag;
@ -19,6 +21,8 @@ import com.nu.modules.servicedirective.service.IConfigServiceDirectiveService;
import com.nu.modules.servicetype.entity.ConfigServiceType;
import com.nu.modules.servicetype.service.IConfigServiceTypeService;
import com.nu.modules.sysconfig.ISysConfigApi;
import com.nu.utils.RabbitMQUtil;
import org.apache.commons.compress.utils.Lists;
import org.apache.commons.lang.StringUtils;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.springframework.beans.factory.annotation.Autowired;
@ -63,6 +67,8 @@ public class ConfigServiceDirectiveServiceImpl extends ServiceImpl<ConfigService
@Lazy
@Autowired
private IDirectiveEmotionTagService emotionTagService;
@Autowired
private RabbitMQUtil rabbitMQUtil;
@Override
public List<ConfigServiceDirective> pageList(ConfigServiceDirective configServiceDirective, IPage<ConfigServiceDirective> list_) {
@ -394,4 +400,69 @@ public class ConfigServiceDirectiveServiceImpl extends ServiceImpl<ConfigService
return null;
}
/**
* @param syncIds 需要同步的指令ID
* @param syncOrgCodes 需要同步的目标平台orgCode
*/
@Override
public void syncDirective(String syncIds, String syncOrgCodes) {
DirectiveMQDto directiveMQDto = new DirectiveMQDto();
List<ConfigServiceDirective> directives;
List<String> directiveIds = Arrays.asList(syncIds.split(","));
{
List<ConfigServiceDirective> param = Lists.newArrayList();
Arrays.stream(syncIds.split(",")).forEach(id -> {
ConfigServiceDirective configServiceDirective = new ConfigServiceDirective();
configServiceDirective.setId(id);
param.add(configServiceDirective);
});
directives = baseMapper.pageList(null, param);
if (directives != null && !directives.isEmpty()) {
directives.stream().forEach(record -> {
List<DirectiveBodyTag> bodyTagList = record.getBodyTagList();
record.setBodyTags(bodyTagList.stream().map(DirectiveBodyTag::getId).collect(Collectors.joining(",")));
List<DirectiveEmotionTag> emotionTagList = record.getEmotionTagList();
record.setEmotionTags(emotionTagList.stream().map(DirectiveEmotionTag::getId).collect(Collectors.joining(",")));
});
}
directiveMQDto.setDirectiveList(BeanUtil.copyToList(directives, DirectiveAsyncMQDto.class));
}
//分类标签
{
List<String> instructionTagIds = directives.stream().map(ConfigServiceDirective::getInstructionTagId).filter(instructionTagId -> instructionTagId != null && !instructionTagId.isEmpty()).distinct().collect(Collectors.toList());
QueryWrapper<InstructionTag> qw = new QueryWrapper<>();
qw.in("id", instructionTagIds);
List<InstructionTag> list = instructionTagService.list(qw);
directiveMQDto.setInstructionList(BeanUtil.copyToList(list, InstructionTagMQDto.class));
}
//服务类别
{
List<String> categoryIds = directives.stream().map(ConfigServiceDirective::getCategoryId).filter(categoryId -> categoryId != null && !categoryId.isEmpty()).distinct().collect(Collectors.toList());
QueryWrapper<ConfigServiceCategory> qw = new QueryWrapper<>();
qw.in("id", categoryIds);
List<ConfigServiceCategory> list = categoryService.list(qw);
directiveMQDto.setCategoryList(BeanUtil.copyToList(list, CategoryMQDto.class));
}
//服务类型
{
List<String> typeIds = directives.stream().map(ConfigServiceDirective::getTypeId).filter(typeId -> typeId != null && !typeId.isEmpty()).distinct().collect(Collectors.toList());
QueryWrapper<ConfigServiceType> qw = new QueryWrapper<>();
qw.in("id", typeIds);
List<ConfigServiceType> list = typeService.list(qw);
directiveMQDto.setTypeList(BeanUtil.copyToList(list, DirectiveTypeMQDto.class));
}
//体型标签
{
directiveMQDto.setBodyTagList(BeanUtil.copyToList(bodyTagService.selectAll(directiveIds, null), BodyTagMQDto.class));
}
//情绪标签
{
directiveMQDto.setEmotionTagList(BeanUtil.copyToList(emotionTagService.selectAll(directiveIds, null), EmotionTagMQDto.class));
}
//给对应业务平台发送消息
Arrays.stream(syncOrgCodes.split(",")).forEach(orgCode -> {
// rabbitMQUtil.sendToExchange("hldy.directive", orgCode + ".directive.syncDirective", directiveMQDto);
});
}
}