From 429945d359b6dac3dba197ba11589ccbee7389db Mon Sep 17 00:00:00 2001 From: zhangheng <3226558941@qq.com> Date: Thu, 13 Jun 2024 13:54:55 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=B8=B8=E7=94=A8=E8=AF=9D=E6=9C=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/manage/scriptinfoedge/ScriptInfoEdgeMapper.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/postdischarge-manage/src/main/resources/mapper/manage/scriptinfoedge/ScriptInfoEdgeMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/scriptinfoedge/ScriptInfoEdgeMapper.xml index f7f8dd13..9a186d35 100644 --- a/postdischarge-manage/src/main/resources/mapper/manage/scriptinfoedge/ScriptInfoEdgeMapper.xml +++ b/postdischarge-manage/src/main/resources/mapper/manage/scriptinfoedge/ScriptInfoEdgeMapper.xml @@ -195,15 +195,15 @@ - - insert into script_info_edge( + + insert into script_info_edge ( script_info_id, script_edge_name, start_node_id, start_node_name, end_node_id, end_node_name, - condition, + `condition`, keywords, remark, create_by, From b7032429953a32a2c64f515621783ecce8f25e47 Mon Sep 17 00:00:00 2001 From: zhangheng <3226558941@qq.com> Date: Thu, 13 Jun 2024 16:18:37 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=B8=B8=E7=94=A8=E8=AF=9D=E6=9C=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scriptInfo/ScriptInfoController.java | 29 ++- .../mapper/scriptInfo/ScriptInfoMapper.java | 8 + .../scriptinfoedge/ScriptInfoEdgeMapper.java | 2 + .../scriptinfonode/ScriptInfoNodeMapper.java | 2 + .../scriptInfo/IScriptInfoService.java | 14 +- .../impl/ScriptInfoServiceImpl.java | 192 ++++++++++++------ .../manage/scriptInfo/ScriptInfoMapper.xml | 35 ++++ .../scriptinfoedge/ScriptInfoEdgeMapper.xml | 7 + .../scriptinfonode/ScriptInfoNodeMapper.xml | 7 + 9 files changed, 230 insertions(+), 66 deletions(-) diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/controller/scriptInfo/ScriptInfoController.java b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/scriptInfo/ScriptInfoController.java index ad2beac6..fb717019 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/controller/scriptInfo/ScriptInfoController.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/scriptInfo/ScriptInfoController.java @@ -81,11 +81,6 @@ public class ScriptInfoController extends BaseController { return toAjax(scriptInfoService.insertScriptInfo(scriptInfo)); } - @PostMapping("/insertScriptEdgeNode") - public AjaxResult insertScriptEdgeNode(@RequestBody ScriptVO scriptVO) { - return scriptInfoService.insertScriptEdgeNode(scriptVO); - } - /** * 修改话术信息 */ @@ -121,4 +116,28 @@ public class ScriptInfoController extends BaseController { } return scriptInfoService.uploadScriptInfo(multipartFile); } + + /** + * 查询话术节点 + */ + @GetMapping("/selectScriptEdgeNode") + public AjaxResult selectScriptEdgeNode(Long id) { + return scriptInfoService.selectScriptEdgeNode(id); + } + + /** + * 新增话术节点 + */ + @PostMapping("/insertScriptEdgeNode") + public AjaxResult insertScriptEdgeNode(@RequestBody ScriptVO scriptVO) { + return scriptInfoService.insertScriptEdgeNode(scriptVO); + } + + /** + * 修改话术节点 + */ + @PostMapping("/updateScriptEdgeNode") + public AjaxResult updateScriptEdgeNode(@RequestBody ScriptVO scriptVO) { + return scriptInfoService.updateScriptEdgeNode(scriptVO); + } } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/scriptInfo/ScriptInfoMapper.java b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/scriptInfo/ScriptInfoMapper.java index a6a5d6a1..7dd49eac 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/scriptInfo/ScriptInfoMapper.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/scriptInfo/ScriptInfoMapper.java @@ -1,6 +1,7 @@ package com.xinelu.manage.mapper.scriptInfo; import com.xinelu.manage.domain.scriptInfo.ScriptInfo; +import com.xinelu.manage.vo.scriptInfo.ScriptVO; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -69,4 +70,11 @@ public interface ScriptInfoMapper { * 检查是否存在除当前记录之外的同名记录 */ int countByScriptNameExcludingId(@Param("scriptName") String scriptName, @Param("departmentId") Long departmentId, @Param("id") Long id, @Param("commonScriptName") String commonScriptName); + + + ScriptVO selectScriptEdgeNode(Long id); + + List selectScriptInfoEdgeIds(Long id); + + List selectScriptInfoNodeIds(Long id); } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/scriptinfoedge/ScriptInfoEdgeMapper.java b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/scriptinfoedge/ScriptInfoEdgeMapper.java index b10079c5..fef05e65 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/scriptinfoedge/ScriptInfoEdgeMapper.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/scriptinfoedge/ScriptInfoEdgeMapper.java @@ -60,4 +60,6 @@ public interface ScriptInfoEdgeMapper { int deleteScriptInfoEdgeByIds(Long[] ids); int insertScriptInfoEdgeList(List scriptInfoEdges); + + int deleteScriptInfoEdgeByScriptInfoIds(Long[] ids); } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/scriptinfonode/ScriptInfoNodeMapper.java b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/scriptinfonode/ScriptInfoNodeMapper.java index d80b9705..11d18b77 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/scriptinfonode/ScriptInfoNodeMapper.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/scriptinfonode/ScriptInfoNodeMapper.java @@ -60,5 +60,7 @@ public interface ScriptInfoNodeMapper { */ int deleteScriptInfoNodeByIds(Long[] ids); + int deleteScriptInfoNodeByScriptInfoIds(Long[] ids); + int insertScriptInfoNodeList(List scriptInfoNodes); } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/scriptInfo/IScriptInfoService.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/scriptInfo/IScriptInfoService.java index 56b11d17..4d539c46 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/scriptInfo/IScriptInfoService.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/scriptInfo/IScriptInfoService.java @@ -38,8 +38,6 @@ public interface IScriptInfoService { */ public int insertScriptInfo(ScriptInfo scriptInfo); - AjaxResult insertScriptEdgeNode(ScriptVO scriptVO); - /** * 修改话术信息 * @@ -68,4 +66,16 @@ public interface IScriptInfoService { * 话术图片上传 */ AjaxResult uploadScriptInfo(MultipartFile multipartFile) throws Exception; + + AjaxResult selectScriptEdgeNode(Long id); + + /** + * 新增话术节点 + */ + AjaxResult insertScriptEdgeNode(ScriptVO scriptVO); + + /** + * 新增话术节点 + */ + AjaxResult updateScriptEdgeNode(ScriptVO scriptVO); } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/scriptInfo/impl/ScriptInfoServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/scriptInfo/impl/ScriptInfoServiceImpl.java index a7829896..e123f7ea 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/scriptInfo/impl/ScriptInfoServiceImpl.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/scriptInfo/impl/ScriptInfoServiceImpl.java @@ -17,6 +17,7 @@ import com.xinelu.manage.service.scriptInfo.IScriptInfoService; import com.xinelu.manage.vo.scriptInfo.Edge; import com.xinelu.manage.vo.scriptInfo.Node; import com.xinelu.manage.vo.scriptInfo.ScriptVO; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -92,6 +93,81 @@ public class ScriptInfoServiceImpl implements IScriptInfoService { return scriptInfoMapper.insertScriptInfo(scriptInfo); } + /** + * 修改话术信息 + * + * @param scriptInfo 话术信息 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateScriptInfo(ScriptInfo scriptInfo) { + // 检查除当前记录之外是否存在同名的话术名称 + if (scriptInfoMapper.countByScriptNameExcludingId(scriptInfo.getScriptName(), scriptInfo.getDepartmentId(), scriptInfo.getId(), scriptInfo.getCommonScriptName()) > 0) { + // 存在同名的通用话术名称,不能进行更新 + throw new ServiceException("通用话术名称已存在,请使用其他名称。"); + } + // 不存在同名的话术名称或者名称未改变,设置修改人和修改时间 + scriptInfo.setUpdateBy(SecurityUtils.getUsername()); + scriptInfo.setUpdateTime(LocalDateTime.now()); + // 进行更新操作 + return scriptInfoMapper.updateScriptInfo(scriptInfo); + } + + /** + * 批量删除话术信息 + * + * @param ids 需要删除的话术信息主键 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int deleteScriptInfoByIds(Long[] ids) { + scriptInfoEdgeMapper.deleteScriptInfoEdgeByScriptInfoIds(ids); + scriptInfoNodeMapper.deleteScriptInfoNodeByScriptInfoIds(ids); + return scriptInfoMapper.deleteScriptInfoByIds(ids); + } + + /** + * 删除话术信息信息 + * + * @param id 话术信息主键 + * @return 结果 + */ + @Override + public int deleteScriptInfoById(Long id) { + return scriptInfoMapper.deleteScriptInfoById(id); + } + + /** + * 话术图片上传 + */ + @Override + public AjaxResult uploadScriptInfo(MultipartFile multipartFile) throws Exception { + // 获取文件路径 + String uploadPathUrl = SystemBusinessConfig.getProfile() + systemBusinessConfig.getScriptFileUrl(); + if (StringUtils.isBlank(uploadPathUrl)) { + return AjaxResult.success(); + } + // 上传 + String scriptFilePath = FileUploadUtils.upload(uploadPathUrl, multipartFile, MimeTypeUtils.IMAGE_EXTENSION); + if (StringUtils.isBlank(scriptFilePath)) { + throw new ServiceException("图片上传失败,请联系管理员!"); + } + // 上传成功,返回话术图片url + AjaxResult ajax = AjaxResult.success("上传成功!"); + ajax.put("imgUrl", scriptFilePath); + return ajax; + } + + @Override + public AjaxResult selectScriptEdgeNode(Long id) { + return AjaxResult.success(scriptInfoMapper.selectScriptEdgeNode(id)); + } + + /** + * 新增话术节点 + */ @Transactional(rollbackFor = Exception.class) @Override public AjaxResult insertScriptEdgeNode(ScriptVO scriptVO) { @@ -100,10 +176,13 @@ public class ScriptInfoServiceImpl implements IScriptInfoService { scriptInfo.setFlowScheme(scriptVO.getFlowScheme()); scriptInfo.setUpdateBy(SecurityUtils.getUsername()); scriptInfo.setUpdateTime(LocalDateTime.now()); - int i = scriptInfoMapper.updateScriptInfo(scriptInfo); - if (i <= 0) { + int updateScriptInfo = scriptInfoMapper.updateScriptInfo(scriptInfo); + if (updateScriptInfo <= 0) { return AjaxResult.error("新增话术图失败!"); } + if (CollectionUtils.isEmpty(scriptVO.getNodes()) || CollectionUtils.isEmpty(scriptVO.getEdges())) { + return AjaxResult.success(); + } List scriptInfoNodes = scriptVO.getNodes(); List scriptInfoEdges = new ArrayList<>(); for (Node node : scriptVO.getNodes()) { @@ -138,68 +217,63 @@ public class ScriptInfoServiceImpl implements IScriptInfoService { return AjaxResult.success(); } - /** - * 修改话术信息 - * - * @param scriptInfo 话术信息 - * @return 结果 - */ @Override - @Transactional(rollbackFor = Exception.class) - public int updateScriptInfo(ScriptInfo scriptInfo) { - // 检查除当前记录之外是否存在同名的话术名称 - if (scriptInfoMapper.countByScriptNameExcludingId(scriptInfo.getScriptName(), scriptInfo.getDepartmentId(), scriptInfo.getId(), scriptInfo.getCommonScriptName()) > 0) { - // 存在同名的通用话术名称,不能进行更新 - throw new ServiceException("通用话术名称已存在,请使用其他名称。"); - } - // 不存在同名的话术名称或者名称未改变,设置修改人和修改时间 + public AjaxResult updateScriptEdgeNode(ScriptVO scriptVO) { + List scriptInfoEdgeIds = scriptInfoMapper.selectScriptInfoEdgeIds(scriptVO.getScriptInfoId()); + List scriptInfoNodeIds = scriptInfoMapper.selectScriptInfoNodeIds(scriptVO.getScriptInfoId()); + ScriptInfo scriptInfo = new ScriptInfo(); + scriptInfo.setId(scriptVO.getScriptInfoId()); + scriptInfo.setFlowScheme(scriptVO.getFlowScheme()); scriptInfo.setUpdateBy(SecurityUtils.getUsername()); scriptInfo.setUpdateTime(LocalDateTime.now()); - // 进行更新操作 - return scriptInfoMapper.updateScriptInfo(scriptInfo); - } - - /** - * 批量删除话术信息 - * - * @param ids 需要删除的话术信息主键 - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public int deleteScriptInfoByIds(Long[] ids) { - return scriptInfoMapper.deleteScriptInfoByIds(ids); - } - - /** - * 删除话术信息信息 - * - * @param id 话术信息主键 - * @return 结果 - */ - @Override - public int deleteScriptInfoById(Long id) { - return scriptInfoMapper.deleteScriptInfoById(id); - } - - /** - * 话术图片上传 - */ - @Override - public AjaxResult uploadScriptInfo(MultipartFile multipartFile) throws Exception { - // 获取文件路径 - String uploadPathUrl = SystemBusinessConfig.getProfile() + systemBusinessConfig.getScriptFileUrl(); - if (StringUtils.isBlank(uploadPathUrl)) { + int updateScriptInfo = scriptInfoMapper.updateScriptInfo(scriptInfo); + if (updateScriptInfo <= 0) { + return AjaxResult.error("修改话术图失败!"); + } + List scriptInfoNodes = scriptVO.getNodes(); + List scriptInfoEdges = new ArrayList<>(); + int i = 0; + for (Node node : scriptVO.getNodes()) { + node.setScriptInfoId(scriptVO.getScriptInfoId()); + node.setScriptNodeName(node.getLabel()); + node.setScriptContent(node.getLabel()); + node.setScriptNodeType(node.getType()); + node.setCreateBy(SecurityUtils.getUsername()); + node.setCreateTime(LocalDateTime.now()); + if (CollectionUtils.isNotEmpty(scriptInfoNodeIds) && (i < scriptInfoNodeIds.size()) && Objects.nonNull(scriptInfoNodeIds.get(i))) { + node.setId(scriptInfoNodeIds.get(i)); + i++; + } + } + int i1 = scriptInfoNodeMapper.insertScriptInfoNodeList(scriptInfoNodes); + if (i1 <= 0) { + return AjaxResult.error("修改话术图失败!"); + } + if (CollectionUtils.isEmpty(scriptVO.getNodes()) || CollectionUtils.isEmpty(scriptVO.getEdges())) { return AjaxResult.success(); } - // 上传 - String scriptFilePath = FileUploadUtils.upload(uploadPathUrl, multipartFile, MimeTypeUtils.IMAGE_EXTENSION); - if (StringUtils.isBlank(scriptFilePath)) { - throw new ServiceException("图片上传失败,请联系管理员!"); + int num = 0; + for (Edge edge : scriptVO.getEdges()) { + ScriptInfoEdge scriptInfoEdge = new ScriptInfoEdge(); + scriptInfoEdge.setKeywords(edge.getKeyword()); + Node startNode = scriptInfoNodes.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getCode()) && edge.getSource().equals(item.getCode())).findFirst().orElse(new Node()); + scriptInfoEdge.setStartNodeId(startNode.getId()); + scriptInfoEdge.setStartNodeName(startNode.getLabel()); + Node endNode = scriptInfoNodes.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getCode()) && edge.getTarget().equals(item.getCode())).findFirst().orElse(new Node()); + scriptInfoEdge.setEndNodeId(endNode.getId()); + scriptInfoEdge.setEndNodeName(endNode.getLabel()); + scriptInfoEdge.setScriptInfoId(scriptVO.getScriptInfoId()); + scriptInfoEdge.setScriptEdgeName(edge.getLabel()); + scriptInfoEdges.add(scriptInfoEdge); + if (CollectionUtils.isNotEmpty(scriptInfoEdgeIds) && (num < scriptInfoEdgeIds.size()) && Objects.nonNull(scriptInfoEdgeIds.get(num))) { + scriptInfoEdge.setId(scriptInfoEdgeIds.get(num)); + num++; + } } - // 上传成功,返回话术图片url - AjaxResult ajax = AjaxResult.success("上传成功!"); - ajax.put("imgUrl", scriptFilePath); - return ajax; + int i2 = scriptInfoEdgeMapper.insertScriptInfoEdgeList(scriptInfoEdges); + if (i2 <= 0) { + return AjaxResult.error("修改话术图失败!"); + } + return AjaxResult.success(); } } diff --git a/postdischarge-manage/src/main/resources/mapper/manage/scriptInfo/ScriptInfoMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/scriptInfo/ScriptInfoMapper.xml index db5befcb..1e908ab3 100644 --- a/postdischarge-manage/src/main/resources/mapper/manage/scriptInfo/ScriptInfoMapper.xml +++ b/postdischarge-manage/src/main/resources/mapper/manage/scriptInfo/ScriptInfoMapper.xml @@ -19,12 +19,19 @@ + + + + + + + select id, department_id, @@ -40,6 +47,7 @@ script_sort, script_remark, script_file_path, + flow_scheme, create_by, create_time, update_by, @@ -62,6 +70,7 @@ si.script_sort, si.script_remark, si.script_file_path, + si.flow_scheme, si.create_by, si.create_time, si.update_by, @@ -168,6 +177,8 @@ script_file_path, + flow_scheme, + create_by, create_time, @@ -204,6 +215,8 @@ #{scriptFilePath}, + #{flowScheme}, + #{createBy}, #{createTime}, @@ -253,6 +266,9 @@ script_file_path= #{scriptFilePath}, + flow_scheme = + #{flowScheme}, + create_by = #{createBy}, @@ -281,4 +297,23 @@ #{id} + + + + + + \ No newline at end of file diff --git a/postdischarge-manage/src/main/resources/mapper/manage/scriptinfoedge/ScriptInfoEdgeMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/scriptinfoedge/ScriptInfoEdgeMapper.xml index 9a186d35..f16349ed 100644 --- a/postdischarge-manage/src/main/resources/mapper/manage/scriptinfoedge/ScriptInfoEdgeMapper.xml +++ b/postdischarge-manage/src/main/resources/mapper/manage/scriptinfoedge/ScriptInfoEdgeMapper.xml @@ -195,6 +195,13 @@ + + delete from script_info_edge where script_info_id in + + #{id} + + + insert into script_info_edge ( script_info_id, diff --git a/postdischarge-manage/src/main/resources/mapper/manage/scriptinfonode/ScriptInfoNodeMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/scriptinfonode/ScriptInfoNodeMapper.xml index c70a7c3d..89f4ee04 100644 --- a/postdischarge-manage/src/main/resources/mapper/manage/scriptinfonode/ScriptInfoNodeMapper.xml +++ b/postdischarge-manage/src/main/resources/mapper/manage/scriptinfonode/ScriptInfoNodeMapper.xml @@ -147,6 +147,13 @@ + + delete from script_info_node where script_info_id in + + #{id} + + + insert into script_info_node( script_info_id, From 89d35ce89ef6db060b41b23aefd42e7e57116ccd Mon Sep 17 00:00:00 2001 From: zhangheng <3226558941@qq.com> Date: Thu, 13 Jun 2024 16:41:41 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=B8=B8=E7=94=A8=E8=AF=9D=E6=9C=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/scriptInfo/impl/ScriptInfoServiceImpl.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/scriptInfo/impl/ScriptInfoServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/scriptInfo/impl/ScriptInfoServiceImpl.java index e123f7ea..2eaff91e 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/scriptInfo/impl/ScriptInfoServiceImpl.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/scriptInfo/impl/ScriptInfoServiceImpl.java @@ -217,6 +217,7 @@ public class ScriptInfoServiceImpl implements IScriptInfoService { return AjaxResult.success(); } + @Transactional(rollbackFor = Exception.class) @Override public AjaxResult updateScriptEdgeNode(ScriptVO scriptVO) { List scriptInfoEdgeIds = scriptInfoMapper.selectScriptInfoEdgeIds(scriptVO.getScriptInfoId()); @@ -235,8 +236,9 @@ public class ScriptInfoServiceImpl implements IScriptInfoService { int i = 0; for (Node node : scriptVO.getNodes()) { node.setScriptInfoId(scriptVO.getScriptInfoId()); - node.setScriptNodeName(node.getLabel()); - node.setScriptContent(node.getLabel()); + String[] split = node.getLabel().split("\\n"); + node.setScriptNodeName(StringUtils.isBlank(split[0]) ? "" : split[0]); + node.setScriptContent(StringUtils.isBlank(split[1]) ? "" : split[0]); node.setScriptNodeType(node.getType()); node.setCreateBy(SecurityUtils.getUsername()); node.setCreateTime(LocalDateTime.now());