工单模块
This commit is contained in:
@@ -0,0 +1,168 @@
|
||||
package org.xyzh.workcase.config;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.dubbo.config.annotation.DubboReference;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.boot.CommandLineRunner;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.xyzh.api.ai.dto.TbKnowledge;
|
||||
import org.xyzh.api.ai.service.KnowledgeService;
|
||||
import org.xyzh.common.core.domain.ResultDomain;
|
||||
|
||||
/**
|
||||
* @description 初始化客服系统必须的8个知识库,4个内部知识库,4个外部知识库,运行结束即销毁
|
||||
* @filename KnowledgeInit.java
|
||||
* @author yslg
|
||||
* @copyright xyzh
|
||||
* @since 2025-12-18
|
||||
*/
|
||||
@Configuration
|
||||
public class KnowledgeInit {
|
||||
private static final Logger logger = LoggerFactory.getLogger(KnowledgeInit.class);
|
||||
|
||||
private static final String SERVICE_WORKCASE = "workcase";
|
||||
private static final String CATEGORY_INTERNAL = "internal";
|
||||
private static final String CATEGORY_EXTERNAL = "external";
|
||||
private static final String PERMISSION_PUBLIC = "PUBLIC";
|
||||
|
||||
@DubboReference(version = "1.0.0", group = "ai", timeout = 30000)
|
||||
private KnowledgeService knowledgeService;
|
||||
|
||||
@Bean
|
||||
public CommandLineRunner knowledgeInitRunner() {
|
||||
return args -> {
|
||||
logger.info("开始初始化客服系统知识库...");
|
||||
|
||||
List<KnowledgeConfig> configs = buildKnowledgeConfigs();
|
||||
int successCount = 0;
|
||||
int skipCount = 0;
|
||||
|
||||
for (KnowledgeConfig config : configs) {
|
||||
if (checkKnowledgeExists(knowledgeService, config.title)) {
|
||||
logger.info("知识库已存在,跳过: {}", config.title);
|
||||
skipCount++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (createKnowledge(knowledgeService, config)) {
|
||||
successCount++;
|
||||
}
|
||||
}
|
||||
|
||||
logger.info("客服系统知识库初始化完成: 成功创建{}个,跳过{}个", successCount, skipCount);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建8个知识库配置
|
||||
*/
|
||||
private List<KnowledgeConfig> buildKnowledgeConfigs() {
|
||||
List<KnowledgeConfig> configs = new ArrayList<>();
|
||||
|
||||
// 4个内部知识库
|
||||
configs.add(new KnowledgeConfig(
|
||||
"内部-政策法规库",
|
||||
"存储城市生命线相关政策法规、行业标准、规范文件",
|
||||
CATEGORY_INTERNAL
|
||||
));
|
||||
configs.add(new KnowledgeConfig(
|
||||
"内部-技术文档库",
|
||||
"存储技术规范、操作手册、维护指南等技术文档",
|
||||
CATEGORY_INTERNAL
|
||||
));
|
||||
configs.add(new KnowledgeConfig(
|
||||
"内部-案例经验库",
|
||||
"存储历史工单处理案例、经验总结、故障排查记录",
|
||||
CATEGORY_INTERNAL
|
||||
));
|
||||
configs.add(new KnowledgeConfig(
|
||||
"内部-培训资料库",
|
||||
"存储员工培训材料、业务知识、常见问题解答",
|
||||
CATEGORY_INTERNAL
|
||||
));
|
||||
|
||||
// 4个外部知识库
|
||||
configs.add(new KnowledgeConfig(
|
||||
"外部-服务指南库",
|
||||
"面向公众的服务办理指南、流程说明、所需材料",
|
||||
CATEGORY_EXTERNAL
|
||||
));
|
||||
configs.add(new KnowledgeConfig(
|
||||
"外部-常见问题库",
|
||||
"公众常见咨询问题及标准答案,FAQ知识库",
|
||||
CATEGORY_EXTERNAL
|
||||
));
|
||||
configs.add(new KnowledgeConfig(
|
||||
"外部-公告通知库",
|
||||
"政府公告、服务通知、停水停电通知等公开信息",
|
||||
CATEGORY_EXTERNAL
|
||||
));
|
||||
configs.add(new KnowledgeConfig(
|
||||
"外部-便民信息库",
|
||||
"便民服务信息、联系方式、服务网点、办事地点等",
|
||||
CATEGORY_EXTERNAL
|
||||
));
|
||||
|
||||
return configs;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查知识库是否已存在
|
||||
*/
|
||||
private boolean checkKnowledgeExists(KnowledgeService knowledgeService, String title) {
|
||||
TbKnowledge filter = new TbKnowledge();
|
||||
filter.setTitle(title);
|
||||
filter.setService(SERVICE_WORKCASE);
|
||||
|
||||
ResultDomain<TbKnowledge> result = knowledgeService.listKnowledges(filter);
|
||||
if (result.getSuccess() && result.getDataList() != null && !result.getDataList().isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建知识库
|
||||
*/
|
||||
private boolean createKnowledge(KnowledgeService knowledgeService, KnowledgeConfig config) {
|
||||
TbKnowledge knowledge = new TbKnowledge();
|
||||
knowledge.setTitle(config.title);
|
||||
knowledge.setDescription(config.description);
|
||||
knowledge.setService(SERVICE_WORKCASE);
|
||||
knowledge.setCategory(config.category);
|
||||
knowledge.setDifyIndexingTechnique("high_quality");
|
||||
knowledge.setRetrievalTopK(5);
|
||||
knowledge.setRetrievalScoreThreshold(0.5);
|
||||
knowledge.setRerankingEnable(1);
|
||||
|
||||
ResultDomain<TbKnowledge> result = knowledgeService.createKnowledge(
|
||||
knowledge, PERMISSION_PUBLIC, null, null);
|
||||
|
||||
if (result.getSuccess()) {
|
||||
logger.info("创建知识库成功: {} [{}]", config.title, config.category);
|
||||
return true;
|
||||
} else {
|
||||
logger.error("创建知识库失败: {} - {}", config.title, result.getMessage());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 知识库配置内部类
|
||||
*/
|
||||
private static class KnowledgeConfig {
|
||||
final String title;
|
||||
final String description;
|
||||
final String category;
|
||||
|
||||
KnowledgeConfig(String title, String description, String category) {
|
||||
this.title = title;
|
||||
this.description = description;
|
||||
this.category = category;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package org.xyzh.workcase.enums;
|
||||
|
||||
public enum WorkcaseProcessAction {
|
||||
|
||||
INFO("info", "记录"),
|
||||
ASSIGN("assign","指派"),
|
||||
REDEPLOY("redeploy", "转派"),
|
||||
REPEAL("repeal", "撤销"),
|
||||
FINISH("finish", "完成");
|
||||
|
||||
private String name;
|
||||
private String description;
|
||||
|
||||
WorkcaseProcessAction(String name, String description){
|
||||
this.name = name;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package org.xyzh.workcase.mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.xyzh.api.workcase.dto.TbWorkcaseDeviceDTO;
|
||||
import org.xyzh.common.core.page.PageParam;
|
||||
|
||||
/**
|
||||
* @description 工单设备文件数据访问层
|
||||
* @filename TbWorkcaseDeviceMapper.java
|
||||
* @author yslg
|
||||
* @copyright xyzh
|
||||
* @since 2025-12-18
|
||||
*/
|
||||
@Mapper
|
||||
public interface TbWorkcaseDeviceMapper {
|
||||
|
||||
/**
|
||||
* 插入工单设备文件
|
||||
*/
|
||||
int insertWorkcaseDevice(TbWorkcaseDeviceDTO device);
|
||||
|
||||
/**
|
||||
* 更新工单设备文件(只更新非null字段)
|
||||
*/
|
||||
int updateWorkcaseDevice(TbWorkcaseDeviceDTO device);
|
||||
|
||||
/**
|
||||
* 删除工单设备文件
|
||||
*/
|
||||
int deleteWorkcaseDevice(@Param("workcaseId") String workcaseId, @Param("fileId") String fileId);
|
||||
|
||||
/**
|
||||
* 根据工单ID和文件ID查询
|
||||
*/
|
||||
TbWorkcaseDeviceDTO selectWorkcaseDeviceById(@Param("workcaseId") String workcaseId, @Param("fileId") String fileId);
|
||||
|
||||
/**
|
||||
* 查询工单设备文件列表
|
||||
*/
|
||||
List<TbWorkcaseDeviceDTO> selectWorkcaseDeviceList(@Param("filter") TbWorkcaseDeviceDTO filter);
|
||||
|
||||
/**
|
||||
* 分页查询工单设备文件
|
||||
*/
|
||||
List<TbWorkcaseDeviceDTO> selectWorkcaseDevicePage(@Param("filter") TbWorkcaseDeviceDTO filter, @Param("pageParam") PageParam pageParam);
|
||||
|
||||
/**
|
||||
* 统计工单设备文件数量
|
||||
*/
|
||||
long countWorkcaseDevices(@Param("filter") TbWorkcaseDeviceDTO filter);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package org.xyzh.workcase.mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.xyzh.api.workcase.dto.TbWorkcaseDTO;
|
||||
import org.xyzh.common.core.page.PageParam;
|
||||
|
||||
/**
|
||||
* @description 工单数据访问层
|
||||
* @filename TbWorkcaseMapper.java
|
||||
* @author yslg
|
||||
* @copyright xyzh
|
||||
* @since 2025-12-18
|
||||
*/
|
||||
@Mapper
|
||||
public interface TbWorkcaseMapper {
|
||||
|
||||
/**
|
||||
* 插入工单
|
||||
*/
|
||||
int insertWorkcase(TbWorkcaseDTO workcase);
|
||||
|
||||
/**
|
||||
* 更新工单(只更新非null字段)
|
||||
*/
|
||||
int updateWorkcase(TbWorkcaseDTO workcase);
|
||||
|
||||
/**
|
||||
* 逻辑删除工单
|
||||
*/
|
||||
int deleteWorkcase(TbWorkcaseDTO workcase);
|
||||
|
||||
/**
|
||||
* 根据ID查询工单
|
||||
*/
|
||||
TbWorkcaseDTO selectWorkcaseById(@Param("workcaseId") String workcaseId);
|
||||
|
||||
/**
|
||||
* 查询工单列表
|
||||
*/
|
||||
List<TbWorkcaseDTO> selectWorkcaseList(@Param("filter") TbWorkcaseDTO filter);
|
||||
|
||||
/**
|
||||
* 分页查询工单
|
||||
*/
|
||||
List<TbWorkcaseDTO> selectWorkcasePage(@Param("filter") TbWorkcaseDTO filter, @Param("pageParam") PageParam pageParam);
|
||||
|
||||
/**
|
||||
* 统计工单数量
|
||||
*/
|
||||
long countWorkcases(@Param("filter") TbWorkcaseDTO filter);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package org.xyzh.workcase.mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.xyzh.api.workcase.dto.TbWorkcaseProcessDTO;
|
||||
import org.xyzh.common.core.page.PageParam;
|
||||
|
||||
/**
|
||||
* @description 工单过程数据访问层
|
||||
* @filename TbWorkcaseProcessMapper.java
|
||||
* @author yslg
|
||||
* @copyright xyzh
|
||||
* @since 2025-12-18
|
||||
*/
|
||||
@Mapper
|
||||
public interface TbWorkcaseProcessMapper {
|
||||
|
||||
/**
|
||||
* 插入工单过程
|
||||
*/
|
||||
int insertWorkcaseProcess(TbWorkcaseProcessDTO process);
|
||||
|
||||
/**
|
||||
* 更新工单过程(只更新非null字段)
|
||||
*/
|
||||
int updateWorkcaseProcess(TbWorkcaseProcessDTO process);
|
||||
|
||||
/**
|
||||
* 删除工单过程
|
||||
*/
|
||||
int deleteWorkcaseProcess(@Param("processId") String processId);
|
||||
|
||||
/**
|
||||
* 根据ID查询工单过程
|
||||
*/
|
||||
TbWorkcaseProcessDTO selectWorkcaseProcessById(@Param("processId") String processId);
|
||||
|
||||
/**
|
||||
* 查询工单过程列表
|
||||
*/
|
||||
List<TbWorkcaseProcessDTO> selectWorkcaseProcessList(@Param("filter") TbWorkcaseProcessDTO filter);
|
||||
|
||||
/**
|
||||
* 分页查询工单过程
|
||||
*/
|
||||
List<TbWorkcaseProcessDTO> selectWorkcaseProcessPage(@Param("filter") TbWorkcaseProcessDTO filter, @Param("pageParam") PageParam pageParam);
|
||||
|
||||
/**
|
||||
* 统计工单过程数量
|
||||
*/
|
||||
long countWorkcaseProcesses(@Param("filter") TbWorkcaseProcessDTO filter);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
package org.xyzh.workcase.service;
|
||||
|
||||
import org.apache.dubbo.config.annotation.DubboService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
|
||||
import org.xyzh.api.ai.dto.ChatPrepareData;
|
||||
import org.xyzh.api.ai.dto.TbChat;
|
||||
import org.xyzh.api.ai.dto.TbChatMessage;
|
||||
import org.xyzh.api.workcase.dto.TbWordCloudDTO;
|
||||
import org.xyzh.api.workcase.dto.TbWorkcaseDTO;
|
||||
import org.xyzh.api.workcase.service.WorkcaseChatService;
|
||||
import org.xyzh.common.core.domain.ResultDomain;
|
||||
import org.xyzh.common.core.page.PageRequest;
|
||||
|
||||
@DubboService(version = "1.0.0",group = "workcase",timeout = 30000,retries = 0)
|
||||
public class WorkcaseChatServiceImpl implements WorkcaseChatService{
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(WorkcaseChatServiceImpl.class);
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbWordCloudDTO> addWordCloud(TbWordCloudDTO wordCloud) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbWorkcaseDTO> analyzeChat(String chatId) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<Boolean> commentChatMessage(TbChat filter, String messageId, String comment) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbChat> createChat(TbChat chat) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbChat> getChatList(TbChat filter) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbChatMessage> getChatMessageList(TbChat filter) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbChat> getChatPage(PageRequest<TbChat> pageRequest) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbWordCloudDTO> getWordCloudList(TbWordCloudDTO filter) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbWordCloudDTO> getWordCloudPage(PageRequest<TbWordCloudDTO> pageRequest) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<String> prepareChatMessageSession(ChatPrepareData prepareData) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<Boolean> stopChatMessageByTaskId(TbChat filter, String taskId) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SseEmitter streamChatMessageWithSse(String sessionId) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbWorkcaseDTO> summaryChat(String chatId) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbChat> updateChat(TbChat chat) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbWordCloudDTO> updateWordCloud(TbWordCloudDTO wordCloud) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
package org.xyzh.workcase.service;
|
||||
|
||||
import org.apache.dubbo.config.annotation.DubboService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.xyzh.api.workcase.dto.TbWorkcaseDTO;
|
||||
import org.xyzh.api.workcase.dto.TbWorkcaseDeviceDTO;
|
||||
import org.xyzh.api.workcase.dto.TbWorkcaseProcessDTO;
|
||||
import org.xyzh.api.workcase.service.WorkcaseService;
|
||||
import org.xyzh.common.core.domain.ResultDomain;
|
||||
import org.xyzh.common.core.page.PageRequest;
|
||||
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
|
||||
@DubboService(version = "1.0.0",group = "workcase",timeout = 30000,retries = 0)
|
||||
public class WorkcaseServiceImpl implements WorkcaseService {
|
||||
private static final Logger logger = LoggerFactory.getLogger(WorkcaseServiceImpl.class);
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbWorkcaseDTO> createWorkcase(TbWorkcaseDTO workcase) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbWorkcaseDeviceDTO> createWorkcaseDevice(TbWorkcaseDeviceDTO workcaseDevice) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbWorkcaseProcessDTO> createWorkcaseProcess(TbWorkcaseProcessDTO workcaseProcess) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbWorkcaseDTO> deleteWorkcase(TbWorkcaseDTO workcase) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbWorkcaseDeviceDTO> deleteWorkcaseDevice(TbWorkcaseDeviceDTO workcaseDevice) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbWorkcaseProcessDTO> deleteWorkcaseProcess(TbWorkcaseProcessDTO workcaseProcess) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbWorkcaseDTO> getWorkcaseById(String workcaseId) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbWorkcaseDeviceDTO> getWorkcaseDeviceList(TbWorkcaseDeviceDTO filter) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbWorkcaseDeviceDTO> getWorkcaseDevicePage(PageRequest<TbWorkcaseDeviceDTO> pageRequest) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbWorkcaseDTO> getWorkcaseList(TbWorkcaseDTO filter) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbWorkcaseDTO> getWorkcasePage(PageRequest<TbWorkcaseDTO> pageRequest) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbWorkcaseProcessDTO> getWorkcaseProcessList(TbWorkcaseProcessDTO filter) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbWorkcaseProcessDTO> getWorkcaseProcessPage(PageRequest<TbWorkcaseProcessDTO> pageRequest) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<Void> receiveWorkcaseFromCrm(JSON json) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<Void> syncWorkcaseToCrm(TbWorkcaseDTO workcase) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbWorkcaseDTO> updateWorkcase(TbWorkcaseDTO workcase) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbWorkcaseDeviceDTO> updateWorkcaseDevice(TbWorkcaseDeviceDTO workcaseDevice) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbWorkcaseProcessDTO> updateWorkcaseProcess(TbWorkcaseProcessDTO workcaseProcess) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.xyzh.workcase.mapper.TbWorkcaseDeviceMapper">
|
||||
|
||||
<resultMap id="BaseResultMap" type="org.xyzh.api.workcase.dto.TbWorkcaseDeviceDTO">
|
||||
<id column="workcase_id" property="workcaseId" jdbcType="VARCHAR"/>
|
||||
<id column="file_id" property="fileId" jdbcType="VARCHAR"/>
|
||||
<result column="optsn" property="optsn" jdbcType="VARCHAR"/>
|
||||
<result column="device" property="device" jdbcType="VARCHAR"/>
|
||||
<result column="device_code" property="deviceCode" jdbcType="VARCHAR"/>
|
||||
<result column="file_name" property="fileName" jdbcType="VARCHAR"/>
|
||||
<result column="file_root_id" property="fileRootId" jdbcType="VARCHAR"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="Base_Column_List">
|
||||
workcase_id, file_id, optsn, device, device_code, file_name, file_root_id
|
||||
</sql>
|
||||
|
||||
<insert id="insertWorkcaseDevice" parameterType="org.xyzh.api.workcase.dto.TbWorkcaseDeviceDTO">
|
||||
INSERT INTO workcase.tb_workcase_device (
|
||||
optsn, workcase_id, device, file_id, file_name
|
||||
<if test="deviceCode != null">, device_code</if>
|
||||
<if test="fileRootId != null">, file_root_id</if>
|
||||
) VALUES (
|
||||
#{optsn}, #{workcaseId}, #{device}, #{fileId}, #{fileName}
|
||||
<if test="deviceCode != null">, #{deviceCode}</if>
|
||||
<if test="fileRootId != null">, #{fileRootId}</if>
|
||||
)
|
||||
</insert>
|
||||
|
||||
<update id="updateWorkcaseDevice" parameterType="org.xyzh.api.workcase.dto.TbWorkcaseDeviceDTO">
|
||||
UPDATE workcase.tb_workcase_device
|
||||
<set>
|
||||
<if test="device != null and device != ''">device = #{device},</if>
|
||||
<if test="deviceCode != null">device_code = #{deviceCode},</if>
|
||||
<if test="fileName != null and fileName != ''">file_name = #{fileName},</if>
|
||||
<if test="fileRootId != null">file_root_id = #{fileRootId},</if>
|
||||
</set>
|
||||
WHERE workcase_id = #{workcaseId} AND file_id = #{fileId}
|
||||
</update>
|
||||
|
||||
<delete id="deleteWorkcaseDevice">
|
||||
DELETE FROM workcase.tb_workcase_device
|
||||
WHERE workcase_id = #{workcaseId} AND file_id = #{fileId}
|
||||
</delete>
|
||||
|
||||
<select id="selectWorkcaseDeviceById" resultMap="BaseResultMap">
|
||||
SELECT <include refid="Base_Column_List"/>
|
||||
FROM workcase.tb_workcase_device
|
||||
WHERE workcase_id = #{workcaseId} AND file_id = #{fileId}
|
||||
</select>
|
||||
|
||||
<select id="selectWorkcaseDeviceList" resultMap="BaseResultMap">
|
||||
SELECT <include refid="Base_Column_List"/>
|
||||
FROM workcase.tb_workcase_device
|
||||
<where>
|
||||
<if test="filter.workcaseId != null and filter.workcaseId != ''">
|
||||
AND workcase_id = #{filter.workcaseId}
|
||||
</if>
|
||||
<if test="filter.device != null and filter.device != ''">
|
||||
AND device LIKE CONCAT('%', #{filter.device}, '%')
|
||||
</if>
|
||||
<if test="filter.deviceCode != null and filter.deviceCode != ''">
|
||||
AND device_code = #{filter.deviceCode}
|
||||
</if>
|
||||
<if test="filter.fileId != null and filter.fileId != ''">
|
||||
AND file_id = #{filter.fileId}
|
||||
</if>
|
||||
<if test="filter.fileName != null and filter.fileName != ''">
|
||||
AND file_name LIKE CONCAT('%', #{filter.fileName}, '%')
|
||||
</if>
|
||||
<if test="filter.fileRootId != null and filter.fileRootId != ''">
|
||||
AND file_root_id = #{filter.fileRootId}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY workcase_id, file_id
|
||||
</select>
|
||||
|
||||
<select id="selectWorkcaseDevicePage" resultMap="BaseResultMap">
|
||||
SELECT <include refid="Base_Column_List"/>
|
||||
FROM workcase.tb_workcase_device
|
||||
<where>
|
||||
<if test="filter.workcaseId != null and filter.workcaseId != ''">
|
||||
AND workcase_id = #{filter.workcaseId}
|
||||
</if>
|
||||
<if test="filter.device != null and filter.device != ''">
|
||||
AND device LIKE CONCAT('%', #{filter.device}, '%')
|
||||
</if>
|
||||
<if test="filter.deviceCode != null and filter.deviceCode != ''">
|
||||
AND device_code = #{filter.deviceCode}
|
||||
</if>
|
||||
<if test="filter.fileId != null and filter.fileId != ''">
|
||||
AND file_id = #{filter.fileId}
|
||||
</if>
|
||||
<if test="filter.fileName != null and filter.fileName != ''">
|
||||
AND file_name LIKE CONCAT('%', #{filter.fileName}, '%')
|
||||
</if>
|
||||
<if test="filter.fileRootId != null and filter.fileRootId != ''">
|
||||
AND file_root_id = #{filter.fileRootId}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY workcase_id, file_id
|
||||
LIMIT #{pageParam.pageSize} OFFSET #{pageParam.offset}
|
||||
</select>
|
||||
|
||||
<select id="countWorkcaseDevices" resultType="long">
|
||||
SELECT COUNT(*)
|
||||
FROM workcase.tb_workcase_device
|
||||
<where>
|
||||
<if test="filter.workcaseId != null and filter.workcaseId != ''">
|
||||
AND workcase_id = #{filter.workcaseId}
|
||||
</if>
|
||||
<if test="filter.device != null and filter.device != ''">
|
||||
AND device LIKE CONCAT('%', #{filter.device}, '%')
|
||||
</if>
|
||||
<if test="filter.deviceCode != null and filter.deviceCode != ''">
|
||||
AND device_code = #{filter.deviceCode}
|
||||
</if>
|
||||
<if test="filter.fileId != null and filter.fileId != ''">
|
||||
AND file_id = #{filter.fileId}
|
||||
</if>
|
||||
<if test="filter.fileName != null and filter.fileName != ''">
|
||||
AND file_name LIKE CONCAT('%', #{filter.fileName}, '%')
|
||||
</if>
|
||||
<if test="filter.fileRootId != null and filter.fileRootId != ''">
|
||||
AND file_root_id = #{filter.fileRootId}
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,193 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.xyzh.workcase.mapper.TbWorkcaseMapper">
|
||||
|
||||
<resultMap id="BaseResultMap" type="org.xyzh.api.workcase.dto.TbWorkcaseDTO">
|
||||
<id column="workcase_id" property="workcaseId" jdbcType="VARCHAR"/>
|
||||
<result column="optsn" property="optsn" jdbcType="VARCHAR"/>
|
||||
<result column="user_id" property="userId" jdbcType="VARCHAR"/>
|
||||
<result column="username" property="username" jdbcType="VARCHAR"/>
|
||||
<result column="phone" property="phone" jdbcType="VARCHAR"/>
|
||||
<result column="type" property="type" jdbcType="VARCHAR"/>
|
||||
<result column="device" property="device" jdbcType="VARCHAR"/>
|
||||
<result column="device_code" property="deviceCode" jdbcType="VARCHAR"/>
|
||||
<result column="imgs" property="imgs" jdbcType="ARRAY" typeHandler="org.xyzh.common.jdbc.handler.StringArrayTypeHandler"/>
|
||||
<result column="emergency" property="emergency" jdbcType="VARCHAR"/>
|
||||
<result column="status" property="status" jdbcType="VARCHAR"/>
|
||||
<result column="processor" property="processor" jdbcType="VARCHAR"/>
|
||||
<result column="creator" property="creator" jdbcType="VARCHAR"/>
|
||||
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
|
||||
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
|
||||
<result column="delete_time" property="deleteTime" jdbcType="TIMESTAMP"/>
|
||||
<result column="deleted" property="deleted" jdbcType="BOOLEAN"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="Base_Column_List">
|
||||
workcase_id, optsn, user_id, username, phone, type, device, device_code, imgs,
|
||||
emergency, status, processor, creator, create_time, update_time, delete_time, deleted
|
||||
</sql>
|
||||
|
||||
<insert id="insertWorkcase" parameterType="org.xyzh.api.workcase.dto.TbWorkcaseDTO">
|
||||
INSERT INTO workcase.tb_workcase (
|
||||
optsn, workcase_id, user_id, username, phone, type, device, device_code, creator
|
||||
<if test="imgs != null">, imgs</if>
|
||||
<if test="emergency != null">, emergency</if>
|
||||
<if test="status != null">, status</if>
|
||||
<if test="processor != null">, processor</if>
|
||||
) VALUES (
|
||||
#{optsn}, #{workcaseId}, #{userId}, #{username}, #{phone}, #{type}, #{device}, #{deviceCode}, #{creator}
|
||||
<if test="imgs != null">, #{imgs, typeHandler=org.xyzh.common.jdbc.handler.StringArrayTypeHandler}</if>
|
||||
<if test="emergency != null">, #{emergency}</if>
|
||||
<if test="status != null">, #{status}</if>
|
||||
<if test="processor != null">, #{processor}</if>
|
||||
)
|
||||
</insert>
|
||||
|
||||
<update id="updateWorkcase" parameterType="org.xyzh.api.workcase.dto.TbWorkcaseDTO">
|
||||
UPDATE workcase.tb_workcase
|
||||
<set>
|
||||
<if test="userId != null and userId != ''">user_id = #{userId},</if>
|
||||
<if test="username != null and username != ''">username = #{username},</if>
|
||||
<if test="phone != null and phone != ''">phone = #{phone},</if>
|
||||
<if test="type != null and type != ''">type = #{type},</if>
|
||||
<if test="device != null and device != ''">device = #{device},</if>
|
||||
<if test="deviceCode != null and deviceCode != ''">device_code = #{deviceCode},</if>
|
||||
<if test="imgs != null">imgs = #{imgs, typeHandler=org.xyzh.common.jdbc.handler.StringArrayTypeHandler},</if>
|
||||
<if test="emergency != null and emergency != ''">emergency = #{emergency},</if>
|
||||
<if test="status != null and status != ''">status = #{status},</if>
|
||||
<if test="processor != null">processor = #{processor},</if>
|
||||
update_time = now()
|
||||
</set>
|
||||
WHERE workcase_id = #{workcaseId} AND deleted = false
|
||||
</update>
|
||||
|
||||
<update id="deleteWorkcase" parameterType="org.xyzh.api.workcase.dto.TbWorkcaseDTO">
|
||||
UPDATE workcase.tb_workcase
|
||||
SET deleted = true, delete_time = now()
|
||||
WHERE workcase_id = #{workcaseId} AND deleted = false
|
||||
</update>
|
||||
|
||||
<select id="selectWorkcaseById" resultMap="BaseResultMap">
|
||||
SELECT <include refid="Base_Column_List"/>
|
||||
FROM workcase.tb_workcase
|
||||
WHERE workcase_id = #{workcaseId} AND deleted = false
|
||||
</select>
|
||||
|
||||
<select id="selectWorkcaseList" resultMap="BaseResultMap">
|
||||
SELECT <include refid="Base_Column_List"/>
|
||||
FROM workcase.tb_workcase
|
||||
<where>
|
||||
<if test="filter.workcaseId != null and filter.workcaseId != ''">
|
||||
AND workcase_id = #{filter.workcaseId}
|
||||
</if>
|
||||
<if test="filter.userId != null and filter.userId != ''">
|
||||
AND user_id = #{filter.userId}
|
||||
</if>
|
||||
<if test="filter.username != null and filter.username != ''">
|
||||
AND username LIKE CONCAT('%', #{filter.username}, '%')
|
||||
</if>
|
||||
<if test="filter.phone != null and filter.phone != ''">
|
||||
AND phone = #{filter.phone}
|
||||
</if>
|
||||
<if test="filter.type != null and filter.type != ''">
|
||||
AND type = #{filter.type}
|
||||
</if>
|
||||
<if test="filter.device != null and filter.device != ''">
|
||||
AND device LIKE CONCAT('%', #{filter.device}, '%')
|
||||
</if>
|
||||
<if test="filter.deviceCode != null and filter.deviceCode != ''">
|
||||
AND device_code = #{filter.deviceCode}
|
||||
</if>
|
||||
<if test="filter.emergency != null and filter.emergency != ''">
|
||||
AND emergency = #{filter.emergency}
|
||||
</if>
|
||||
<if test="filter.status != null and filter.status != ''">
|
||||
AND status = #{filter.status}
|
||||
</if>
|
||||
<if test="filter.processor != null and filter.processor != ''">
|
||||
AND processor = #{filter.processor}
|
||||
</if>
|
||||
AND deleted = false
|
||||
</where>
|
||||
ORDER BY create_time DESC
|
||||
</select>
|
||||
|
||||
<select id="selectWorkcasePage" resultMap="BaseResultMap">
|
||||
SELECT <include refid="Base_Column_List"/>
|
||||
FROM workcase.tb_workcase
|
||||
<where>
|
||||
<if test="filter.workcaseId != null and filter.workcaseId != ''">
|
||||
AND workcase_id = #{filter.workcaseId}
|
||||
</if>
|
||||
<if test="filter.userId != null and filter.userId != ''">
|
||||
AND user_id = #{filter.userId}
|
||||
</if>
|
||||
<if test="filter.username != null and filter.username != ''">
|
||||
AND username LIKE CONCAT('%', #{filter.username}, '%')
|
||||
</if>
|
||||
<if test="filter.phone != null and filter.phone != ''">
|
||||
AND phone = #{filter.phone}
|
||||
</if>
|
||||
<if test="filter.type != null and filter.type != ''">
|
||||
AND type = #{filter.type}
|
||||
</if>
|
||||
<if test="filter.device != null and filter.device != ''">
|
||||
AND device LIKE CONCAT('%', #{filter.device}, '%')
|
||||
</if>
|
||||
<if test="filter.deviceCode != null and filter.deviceCode != ''">
|
||||
AND device_code = #{filter.deviceCode}
|
||||
</if>
|
||||
<if test="filter.emergency != null and filter.emergency != ''">
|
||||
AND emergency = #{filter.emergency}
|
||||
</if>
|
||||
<if test="filter.status != null and filter.status != ''">
|
||||
AND status = #{filter.status}
|
||||
</if>
|
||||
<if test="filter.processor != null and filter.processor != ''">
|
||||
AND processor = #{filter.processor}
|
||||
</if>
|
||||
AND deleted = false
|
||||
</where>
|
||||
ORDER BY create_time DESC
|
||||
LIMIT #{pageParam.pageSize} OFFSET #{pageParam.offset}
|
||||
</select>
|
||||
|
||||
<select id="countWorkcases" resultType="long">
|
||||
SELECT COUNT(*)
|
||||
FROM workcase.tb_workcase
|
||||
<where>
|
||||
<if test="filter.workcaseId != null and filter.workcaseId != ''">
|
||||
AND workcase_id = #{filter.workcaseId}
|
||||
</if>
|
||||
<if test="filter.userId != null and filter.userId != ''">
|
||||
AND user_id = #{filter.userId}
|
||||
</if>
|
||||
<if test="filter.username != null and filter.username != ''">
|
||||
AND username LIKE CONCAT('%', #{filter.username}, '%')
|
||||
</if>
|
||||
<if test="filter.phone != null and filter.phone != ''">
|
||||
AND phone = #{filter.phone}
|
||||
</if>
|
||||
<if test="filter.type != null and filter.type != ''">
|
||||
AND type = #{filter.type}
|
||||
</if>
|
||||
<if test="filter.device != null and filter.device != ''">
|
||||
AND device LIKE CONCAT('%', #{filter.device}, '%')
|
||||
</if>
|
||||
<if test="filter.deviceCode != null and filter.deviceCode != ''">
|
||||
AND device_code = #{filter.deviceCode}
|
||||
</if>
|
||||
<if test="filter.emergency != null and filter.emergency != ''">
|
||||
AND emergency = #{filter.emergency}
|
||||
</if>
|
||||
<if test="filter.status != null and filter.status != ''">
|
||||
AND status = #{filter.status}
|
||||
</if>
|
||||
<if test="filter.processor != null and filter.processor != ''">
|
||||
AND processor = #{filter.processor}
|
||||
</if>
|
||||
AND deleted = false
|
||||
</where>
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,130 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.xyzh.workcase.mapper.TbWorkcaseProcessMapper">
|
||||
|
||||
<resultMap id="BaseResultMap" type="org.xyzh.api.workcase.dto.TbWorkcaseProcessDTO">
|
||||
<id column="process_id" property="processId" jdbcType="VARCHAR"/>
|
||||
<result column="optsn" property="optsn" jdbcType="VARCHAR"/>
|
||||
<result column="workcase_id" property="workcaseId" jdbcType="VARCHAR"/>
|
||||
<result column="action" property="action" jdbcType="VARCHAR"/>
|
||||
<result column="message" property="message" jdbcType="VARCHAR"/>
|
||||
<result column="files" property="files" jdbcType="ARRAY" typeHandler="org.xyzh.common.jdbc.handler.StringArrayTypeHandler"/>
|
||||
<result column="processor" property="processor" jdbcType="VARCHAR"/>
|
||||
<result column="remark" property="remark" jdbcType="VARCHAR"/>
|
||||
<result column="creator" property="creator" jdbcType="VARCHAR"/>
|
||||
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="Base_Column_List">
|
||||
process_id, optsn, workcase_id, action, message, files, processor, remark, creator, create_time
|
||||
</sql>
|
||||
|
||||
<insert id="insertWorkcaseProcess" parameterType="org.xyzh.api.workcase.dto.TbWorkcaseProcessDTO">
|
||||
INSERT INTO workcase.tb_workcase_process (
|
||||
optsn, workcase_id, process_id, action, creator
|
||||
<if test="message != null">, message</if>
|
||||
<if test="files != null">, files</if>
|
||||
<if test="processor != null">, processor</if>
|
||||
<if test="remark != null">, remark</if>
|
||||
) VALUES (
|
||||
#{optsn}, #{workcaseId}, #{processId}, #{action}, #{creator}
|
||||
<if test="message != null">, #{message}</if>
|
||||
<if test="files != null">, #{files, typeHandler=org.xyzh.common.jdbc.handler.StringArrayTypeHandler}</if>
|
||||
<if test="processor != null">, #{processor}</if>
|
||||
<if test="remark != null">, #{remark}</if>
|
||||
)
|
||||
</insert>
|
||||
|
||||
<update id="updateWorkcaseProcess" parameterType="org.xyzh.api.workcase.dto.TbWorkcaseProcessDTO">
|
||||
UPDATE workcase.tb_workcase_process
|
||||
<set>
|
||||
<if test="action != null and action != ''">action = #{action},</if>
|
||||
<if test="message != null">message = #{message},</if>
|
||||
<if test="files != null">files = #{files, typeHandler=org.xyzh.common.jdbc.handler.StringArrayTypeHandler},</if>
|
||||
<if test="processor != null">processor = #{processor},</if>
|
||||
<if test="remark != null">remark = #{remark},</if>
|
||||
</set>
|
||||
WHERE process_id = #{processId}
|
||||
</update>
|
||||
|
||||
<delete id="deleteWorkcaseProcess">
|
||||
DELETE FROM workcase.tb_workcase_process
|
||||
WHERE process_id = #{processId}
|
||||
</delete>
|
||||
|
||||
<select id="selectWorkcaseProcessById" resultMap="BaseResultMap">
|
||||
SELECT <include refid="Base_Column_List"/>
|
||||
FROM workcase.tb_workcase_process
|
||||
WHERE process_id = #{processId}
|
||||
</select>
|
||||
|
||||
<select id="selectWorkcaseProcessList" resultMap="BaseResultMap">
|
||||
SELECT <include refid="Base_Column_List"/>
|
||||
FROM workcase.tb_workcase_process
|
||||
<where>
|
||||
<if test="filter.processId != null and filter.processId != ''">
|
||||
AND process_id = #{filter.processId}
|
||||
</if>
|
||||
<if test="filter.workcaseId != null and filter.workcaseId != ''">
|
||||
AND workcase_id = #{filter.workcaseId}
|
||||
</if>
|
||||
<if test="filter.action != null and filter.action != ''">
|
||||
AND action = #{filter.action}
|
||||
</if>
|
||||
<if test="filter.processor != null and filter.processor != ''">
|
||||
AND processor = #{filter.processor}
|
||||
</if>
|
||||
<if test="filter.creator != null and filter.creator != ''">
|
||||
AND creator = #{filter.creator}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY create_time ASC
|
||||
</select>
|
||||
|
||||
<select id="selectWorkcaseProcessPage" resultMap="BaseResultMap">
|
||||
SELECT <include refid="Base_Column_List"/>
|
||||
FROM workcase.tb_workcase_process
|
||||
<where>
|
||||
<if test="filter.processId != null and filter.processId != ''">
|
||||
AND process_id = #{filter.processId}
|
||||
</if>
|
||||
<if test="filter.workcaseId != null and filter.workcaseId != ''">
|
||||
AND workcase_id = #{filter.workcaseId}
|
||||
</if>
|
||||
<if test="filter.action != null and filter.action != ''">
|
||||
AND action = #{filter.action}
|
||||
</if>
|
||||
<if test="filter.processor != null and filter.processor != ''">
|
||||
AND processor = #{filter.processor}
|
||||
</if>
|
||||
<if test="filter.creator != null and filter.creator != ''">
|
||||
AND creator = #{filter.creator}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY create_time ASC
|
||||
LIMIT #{pageParam.pageSize} OFFSET #{pageParam.offset}
|
||||
</select>
|
||||
|
||||
<select id="countWorkcaseProcesses" resultType="long">
|
||||
SELECT COUNT(*)
|
||||
FROM workcase.tb_workcase_process
|
||||
<where>
|
||||
<if test="filter.processId != null and filter.processId != ''">
|
||||
AND process_id = #{filter.processId}
|
||||
</if>
|
||||
<if test="filter.workcaseId != null and filter.workcaseId != ''">
|
||||
AND workcase_id = #{filter.workcaseId}
|
||||
</if>
|
||||
<if test="filter.action != null and filter.action != ''">
|
||||
AND action = #{filter.action}
|
||||
</if>
|
||||
<if test="filter.processor != null and filter.processor != ''">
|
||||
AND processor = #{filter.processor}
|
||||
</if>
|
||||
<if test="filter.creator != null and filter.creator != ''">
|
||||
AND creator = #{filter.creator}
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user