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 5ecacc7f..ad2beac6 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 @@ -9,6 +9,7 @@ import com.xinelu.common.enums.BusinessType; import com.xinelu.common.utils.poi.ExcelUtil; import com.xinelu.manage.domain.scriptInfo.ScriptInfo; import com.xinelu.manage.service.scriptInfo.IScriptInfoService; +import com.xinelu.manage.vo.scriptInfo.ScriptVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; @@ -70,7 +71,7 @@ public class ScriptInfoController extends BaseController { } /** - * 新增话术信息 + * 新增话术列表信息 */ @ApiOperation("新增话术信息") @PreAuthorize("@ss.hasPermi('manage:script:add')") @@ -80,6 +81,11 @@ public class ScriptInfoController extends BaseController { return toAjax(scriptInfoService.insertScriptInfo(scriptInfo)); } + @PostMapping("/insertScriptEdgeNode") + public AjaxResult insertScriptEdgeNode(@RequestBody ScriptVO scriptVO) { + return scriptInfoService.insertScriptEdgeNode(scriptVO); + } + /** * 修改话术信息 */ diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/controller/scriptinfoedge/ScriptInfoEdgeController.java b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/scriptinfoedge/ScriptInfoEdgeController.java new file mode 100644 index 00000000..d32b0d1e --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/scriptinfoedge/ScriptInfoEdgeController.java @@ -0,0 +1,91 @@ +package com.xinelu.manage.controller.scriptinfoedge; + +import com.xinelu.common.annotation.Log; +import com.xinelu.common.core.controller.BaseController; +import com.xinelu.common.core.domain.AjaxResult; +import com.xinelu.common.core.page.TableDataInfo; +import com.xinelu.common.enums.BusinessType; +import com.xinelu.common.utils.poi.ExcelUtil; +import com.xinelu.manage.domain.scriptinfoedge.ScriptInfoEdge; +import com.xinelu.manage.service.scriptinfoedge.IScriptInfoEdgeService; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 话术信息分支Controller + * + * @author xinelu + * @date 2024-06-12 + */ +@RestController +@RequestMapping("/system/edge") +public class ScriptInfoEdgeController extends BaseController { + @Resource + private IScriptInfoEdgeService scriptInfoEdgeService; + + /** + * 查询话术信息分支列表 + */ + @PreAuthorize("@ss.hasPermi('system:edge:list')") + @GetMapping("/list") + public TableDataInfo list(ScriptInfoEdge scriptInfoEdge) { + startPage(); + List list = scriptInfoEdgeService.selectScriptInfoEdgeList(scriptInfoEdge); + return getDataTable(list); + } + + /** + * 导出话术信息分支列表 + */ + @PreAuthorize("@ss.hasPermi('system:edge:export')") + @Log(title = "话术信息分支", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, ScriptInfoEdge scriptInfoEdge) { + List list = scriptInfoEdgeService.selectScriptInfoEdgeList(scriptInfoEdge); + ExcelUtil util = new ExcelUtil<>(ScriptInfoEdge.class); + util.exportExcel(response, list, "话术信息分支数据"); + } + + /** + * 获取话术信息分支详细信息 + */ + @PreAuthorize("@ss.hasPermi('system:edge:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return AjaxResult.success(scriptInfoEdgeService.selectScriptInfoEdgeById(id)); + } + + /** + * 新增话术信息分支 + */ + @PreAuthorize("@ss.hasPermi('system:edge:add')") + @Log(title = "话术信息分支", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody ScriptInfoEdge scriptInfoEdge) { + return toAjax(scriptInfoEdgeService.insertScriptInfoEdge(scriptInfoEdge)); + } + + /** + * 修改话术信息分支 + */ + @PreAuthorize("@ss.hasPermi('system:edge:edit')") + @Log(title = "话术信息分支", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody ScriptInfoEdge scriptInfoEdge) { + return toAjax(scriptInfoEdgeService.updateScriptInfoEdge(scriptInfoEdge)); + } + + /** + * 删除话术信息分支 + */ + @PreAuthorize("@ss.hasPermi('system:edge:remove')") + @Log(title = "话术信息分支", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(scriptInfoEdgeService.deleteScriptInfoEdgeByIds(ids)); + } +} diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/controller/scriptinfonode/ScriptInfoNodeController.java b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/scriptinfonode/ScriptInfoNodeController.java new file mode 100644 index 00000000..57180102 --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/scriptinfonode/ScriptInfoNodeController.java @@ -0,0 +1,91 @@ +package com.xinelu.manage.controller.scriptinfonode; + +import com.xinelu.common.annotation.Log; +import com.xinelu.common.core.controller.BaseController; +import com.xinelu.common.core.domain.AjaxResult; +import com.xinelu.common.core.page.TableDataInfo; +import com.xinelu.common.enums.BusinessType; +import com.xinelu.common.utils.poi.ExcelUtil; +import com.xinelu.manage.domain.scriptinfonode.ScriptInfoNode; +import com.xinelu.manage.service.scriptinfonode.IScriptInfoNodeService; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 话术信息节点Controller + * + * @author xinelu + * @date 2024-06-12 + */ +@RestController +@RequestMapping("/system/node") +public class ScriptInfoNodeController extends BaseController { + @Resource + private IScriptInfoNodeService scriptInfoNodeService; + + /** + * 查询话术信息节点列表 + */ + @PreAuthorize("@ss.hasPermi('system:node:list')") + @GetMapping("/list") + public TableDataInfo list(ScriptInfoNode scriptInfoNode) { + startPage(); + List list = scriptInfoNodeService.selectScriptInfoNodeList(scriptInfoNode); + return getDataTable(list); + } + + /** + * 导出话术信息节点列表 + */ + @PreAuthorize("@ss.hasPermi('system:node:export')") + @Log(title = "话术信息节点", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, ScriptInfoNode scriptInfoNode) { + List list = scriptInfoNodeService.selectScriptInfoNodeList(scriptInfoNode); + ExcelUtil util = new ExcelUtil<>(ScriptInfoNode.class); + util.exportExcel(response, list, "话术信息节点数据"); + } + + /** + * 获取话术信息节点详细信息 + */ + @PreAuthorize("@ss.hasPermi('system:node:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return AjaxResult.success(scriptInfoNodeService.selectScriptInfoNodeById(id)); + } + + /** + * 新增话术信息节点 + */ + @PreAuthorize("@ss.hasPermi('system:node:add')") + @Log(title = "话术信息节点", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody ScriptInfoNode scriptInfoNode) { + return toAjax(scriptInfoNodeService.insertScriptInfoNode(scriptInfoNode)); + } + + /** + * 修改话术信息节点 + */ + @PreAuthorize("@ss.hasPermi('system:node:edit')") + @Log(title = "话术信息节点", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody ScriptInfoNode scriptInfoNode) { + return toAjax(scriptInfoNodeService.updateScriptInfoNode(scriptInfoNode)); + } + + /** + * 删除话术信息节点 + */ + @PreAuthorize("@ss.hasPermi('system:node:remove')") + @Log(title = "话术信息节点", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(scriptInfoNodeService.deleteScriptInfoNodeByIds(ids)); + } +} diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/domain/scriptInfo/ScriptInfo.java b/postdischarge-manage/src/main/java/com/xinelu/manage/domain/scriptInfo/ScriptInfo.java index 43f55ed3..ae4a3c94 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/domain/scriptInfo/ScriptInfo.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/domain/scriptInfo/ScriptInfo.java @@ -133,6 +133,7 @@ public class ScriptInfo extends BaseEntity { @ApiModelProperty(value = "话术图片文件路径") private String scriptFilePath; + private String flowScheme; @Override public String toString() { diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/domain/scriptinfoedge/ScriptInfoEdge.java b/postdischarge-manage/src/main/java/com/xinelu/manage/domain/scriptinfoedge/ScriptInfoEdge.java new file mode 100644 index 00000000..c9add840 --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/domain/scriptinfoedge/ScriptInfoEdge.java @@ -0,0 +1,109 @@ +package com.xinelu.manage.domain.scriptinfoedge; + +import com.xinelu.common.annotation.Excel; +import com.xinelu.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 话术信息分支对象 script_info_edge + * + * @author xinelu + * @date 2024-06-12 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "话术信息分支对象", description = "script_info_edge") +public class ScriptInfoEdge extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + private Long id; + + /** + * 话术信息表id + */ + @ApiModelProperty(value = "话术信息表id") + @Excel(name = "话术信息表id") + private Long scriptInfoId; + + /** + * 分支名称 + */ + @ApiModelProperty(value = "分支名称") + @Excel(name = "分支名称") + private String scriptEdgeName; + + /** + * 开始节点id + */ + @ApiModelProperty(value = "开始节点id") + @Excel(name = "开始节点id") + private Long startNodeId; + + /** + * 开始节点名称 + */ + @ApiModelProperty(value = "开始节点名称") + @Excel(name = "开始节点名称") + private String startNodeName; + + /** + * 结束节点id + */ + @ApiModelProperty(value = "结束节点id") + @Excel(name = "结束节点id") + private Long endNodeId; + + /** + * 结束节点名称 + */ + @ApiModelProperty(value = "结束节点名称") + @Excel(name = "结束节点名称") + private String endNodeName; + + /** + * 条件 + */ + @ApiModelProperty(value = "条件") + @Excel(name = "条件") + private String condition; + + /** + * 回答关键词,多个用逗号隔开 + */ + @ApiModelProperty(value = "回答关键词,多个用逗号隔开") + @Excel(name = "回答关键词,多个用逗号隔开") + private String keywords; + + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("scriptInfoId", getScriptInfoId()) + .append("scriptEdgeName", getScriptEdgeName()) + .append("startNodeId", getStartNodeId()) + .append("startNodeName", getStartNodeName()) + .append("endNodeId", getEndNodeId()) + .append("endNodeName", getEndNodeName()) + .append("condition", getCondition()) + .append("keywords", getKeywords()) + .append("remark", getRemark()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/domain/scriptinfonode/ScriptInfoNode.java b/postdischarge-manage/src/main/java/com/xinelu/manage/domain/scriptinfonode/ScriptInfoNode.java new file mode 100644 index 00000000..180f53eb --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/domain/scriptinfonode/ScriptInfoNode.java @@ -0,0 +1,77 @@ +package com.xinelu.manage.domain.scriptinfonode; + +import com.xinelu.common.annotation.Excel; +import com.xinelu.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 话术信息节点对象 script_info_node + * + * @author xinelu + * @date 2024-06-12 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "话术信息节点对象", description = "script_info_node") +public class ScriptInfoNode extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + private Long id; + + /** + * 话术信息表id + */ + @ApiModelProperty(value = "话术信息表id") + @Excel(name = "话术信息表id") + private Long scriptInfoId; + + /** + * 话术节点名称 + */ + @ApiModelProperty(value = "话术节点名称") + @Excel(name = "话术节点名称") + private String scriptNodeName; + + /** + * 话术内容 + */ + @ApiModelProperty(value = "话术内容") + @Excel(name = "话术内容") + private String scriptContent; + + /** + * 话术节点类型(起点:START_NODE,终点:END_NODE) + */ + @ApiModelProperty(value = "话术节点类型") + @Excel(name = "话术节点类型", readConverterExp = "起=点:START_NODE,终点:END_NODE") + private String scriptNodeType; + + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("scriptInfoId", getScriptInfoId()) + .append("scriptNodeName", getScriptNodeName()) + .append("scriptContent", getScriptContent()) + .append("scriptNodeType", getScriptNodeType()) + .append("remark", getRemark()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} 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 new file mode 100644 index 00000000..b10079c5 --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/scriptinfoedge/ScriptInfoEdgeMapper.java @@ -0,0 +1,63 @@ +package com.xinelu.manage.mapper.scriptinfoedge; + +import com.xinelu.manage.domain.scriptinfoedge.ScriptInfoEdge; + +import java.util.List; + +/** + * 话术信息分支Mapper接口 + * + * @author xinelu + * @date 2024-06-12 + */ +public interface ScriptInfoEdgeMapper { + /** + * 查询话术信息分支 + * + * @param id 话术信息分支主键 + * @return 话术信息分支 + */ + ScriptInfoEdge selectScriptInfoEdgeById(Long id); + + /** + * 查询话术信息分支列表 + * + * @param scriptInfoEdge 话术信息分支 + * @return 话术信息分支集合 + */ + List selectScriptInfoEdgeList(ScriptInfoEdge scriptInfoEdge); + + /** + * 新增话术信息分支 + * + * @param scriptInfoEdge 话术信息分支 + * @return 结果 + */ + int insertScriptInfoEdge(ScriptInfoEdge scriptInfoEdge); + + /** + * 修改话术信息分支 + * + * @param scriptInfoEdge 话术信息分支 + * @return 结果 + */ + int updateScriptInfoEdge(ScriptInfoEdge scriptInfoEdge); + + /** + * 删除话术信息分支 + * + * @param id 话术信息分支主键 + * @return 结果 + */ + int deleteScriptInfoEdgeById(Long id); + + /** + * 批量删除话术信息分支 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + int deleteScriptInfoEdgeByIds(Long[] ids); + + int insertScriptInfoEdgeList(List scriptInfoEdges); +} 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 new file mode 100644 index 00000000..d80b9705 --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/scriptinfonode/ScriptInfoNodeMapper.java @@ -0,0 +1,64 @@ +package com.xinelu.manage.mapper.scriptinfonode; + +import com.xinelu.manage.domain.scriptinfonode.ScriptInfoNode; +import com.xinelu.manage.vo.scriptInfo.Node; + +import java.util.List; + +/** + * 话术信息节点Mapper接口 + * + * @author xinelu + * @date 2024-06-12 + */ +public interface ScriptInfoNodeMapper { + /** + * 查询话术信息节点 + * + * @param id 话术信息节点主键 + * @return 话术信息节点 + */ + ScriptInfoNode selectScriptInfoNodeById(Long id); + + /** + * 查询话术信息节点列表 + * + * @param scriptInfoNode 话术信息节点 + * @return 话术信息节点集合 + */ + List selectScriptInfoNodeList(ScriptInfoNode scriptInfoNode); + + /** + * 新增话术信息节点 + * + * @param scriptInfoNode 话术信息节点 + * @return 结果 + */ + int insertScriptInfoNode(ScriptInfoNode scriptInfoNode); + + /** + * 修改话术信息节点 + * + * @param scriptInfoNode 话术信息节点 + * @return 结果 + */ + int updateScriptInfoNode(ScriptInfoNode scriptInfoNode); + + /** + * 删除话术信息节点 + * + * @param id 话术信息节点主键 + * @return 结果 + */ + int deleteScriptInfoNodeById(Long id); + + /** + * 批量删除话术信息节点 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + int deleteScriptInfoNodeByIds(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 45261a54..56b11d17 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 @@ -2,6 +2,7 @@ package com.xinelu.manage.service.scriptInfo; import com.xinelu.common.core.domain.AjaxResult; import com.xinelu.manage.domain.scriptInfo.ScriptInfo; +import com.xinelu.manage.vo.scriptInfo.ScriptVO; import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -37,6 +38,8 @@ public interface IScriptInfoService { */ public int insertScriptInfo(ScriptInfo scriptInfo); + AjaxResult insertScriptEdgeNode(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 24e0378b..a7829896 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 @@ -9,8 +9,14 @@ import com.xinelu.common.utils.file.FileUploadUtils; import com.xinelu.common.utils.file.MimeTypeUtils; import com.xinelu.common.utils.uuid.IdUtils; import com.xinelu.manage.domain.scriptInfo.ScriptInfo; +import com.xinelu.manage.domain.scriptinfoedge.ScriptInfoEdge; import com.xinelu.manage.mapper.scriptInfo.ScriptInfoMapper; +import com.xinelu.manage.mapper.scriptinfoedge.ScriptInfoEdgeMapper; +import com.xinelu.manage.mapper.scriptinfonode.ScriptInfoNodeMapper; 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.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -18,7 +24,9 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * 话术信息Service业务层处理 @@ -34,6 +42,12 @@ public class ScriptInfoServiceImpl implements IScriptInfoService { @Resource private SystemBusinessConfig systemBusinessConfig; + @Resource + private ScriptInfoEdgeMapper scriptInfoEdgeMapper; + + @Resource + private ScriptInfoNodeMapper scriptInfoNodeMapper; + /** * 查询话术信息 @@ -78,6 +92,52 @@ public class ScriptInfoServiceImpl implements IScriptInfoService { return scriptInfoMapper.insertScriptInfo(scriptInfo); } + @Transactional(rollbackFor = Exception.class) + @Override + public AjaxResult insertScriptEdgeNode(ScriptVO scriptVO) { + ScriptInfo scriptInfo = new ScriptInfo(); + scriptInfo.setId(scriptVO.getScriptInfoId()); + scriptInfo.setFlowScheme(scriptVO.getFlowScheme()); + scriptInfo.setUpdateBy(SecurityUtils.getUsername()); + scriptInfo.setUpdateTime(LocalDateTime.now()); + int i = scriptInfoMapper.updateScriptInfo(scriptInfo); + if (i <= 0) { + return AjaxResult.error("新增话术图失败!"); + } + List scriptInfoNodes = scriptVO.getNodes(); + List scriptInfoEdges = new ArrayList<>(); + 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()); + } + int i1 = scriptInfoNodeMapper.insertScriptInfoNodeList(scriptInfoNodes); + if (i1 <= 0) { + return AjaxResult.error("新增话术图失败!"); + } + for (Edge edge : scriptVO.getEdges()) { + ScriptInfoEdge scriptInfoEdge = new ScriptInfoEdge(); + scriptInfoEdge.setKeywords(edge.getKeyword()); + Node node = scriptInfoNodes.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getCode()) && edge.getSource().equals(item.getCode())).findFirst().orElse(new Node()); + scriptInfoEdge.setStartNodeId(node.getId()); + scriptInfoEdge.setStartNodeName(node.getLabel()); + Node node2 = scriptInfoNodes.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getCode()) && edge.getTarget().equals(item.getCode())).findFirst().orElse(new Node()); + scriptInfoEdge.setEndNodeId(node2.getId()); + scriptInfoEdge.setEndNodeName(node2.getLabel()); + scriptInfoEdge.setScriptInfoId(scriptVO.getScriptInfoId()); + scriptInfoEdge.setScriptEdgeName(edge.getLabel()); + scriptInfoEdges.add(scriptInfoEdge); + } + int i2 = scriptInfoEdgeMapper.insertScriptInfoEdgeList(scriptInfoEdges); + if (i2 <= 0) { + return AjaxResult.error("新增话术图失败!"); + } + return AjaxResult.success(); + } + /** * 修改话术信息 * diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/scriptinfoedge/IScriptInfoEdgeService.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/scriptinfoedge/IScriptInfoEdgeService.java new file mode 100644 index 00000000..489f7fa8 --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/scriptinfoedge/IScriptInfoEdgeService.java @@ -0,0 +1,61 @@ +package com.xinelu.manage.service.scriptinfoedge; + +import com.xinelu.manage.domain.scriptinfoedge.ScriptInfoEdge; + +import java.util.List; + +/** + * 话术信息分支Service接口 + * + * @author xinelu + * @date 2024-06-12 + */ +public interface IScriptInfoEdgeService { + /** + * 查询话术信息分支 + * + * @param id 话术信息分支主键 + * @return 话术信息分支 + */ + ScriptInfoEdge selectScriptInfoEdgeById(Long id); + + /** + * 查询话术信息分支列表 + * + * @param scriptInfoEdge 话术信息分支 + * @return 话术信息分支集合 + */ + List selectScriptInfoEdgeList(ScriptInfoEdge scriptInfoEdge); + + /** + * 新增话术信息分支 + * + * @param scriptInfoEdge 话术信息分支 + * @return 结果 + */ + int insertScriptInfoEdge(ScriptInfoEdge scriptInfoEdge); + + /** + * 修改话术信息分支 + * + * @param scriptInfoEdge 话术信息分支 + * @return 结果 + */ + int updateScriptInfoEdge(ScriptInfoEdge scriptInfoEdge); + + /** + * 批量删除话术信息分支 + * + * @param ids 需要删除的话术信息分支主键集合 + * @return 结果 + */ + int deleteScriptInfoEdgeByIds(Long[] ids); + + /** + * 删除话术信息分支信息 + * + * @param id 话术信息分支主键 + * @return 结果 + */ + int deleteScriptInfoEdgeById(Long id); +} diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/scriptinfoedge/impl/ScriptInfoEdgeServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/scriptinfoedge/impl/ScriptInfoEdgeServiceImpl.java new file mode 100644 index 00000000..7e534159 --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/scriptinfoedge/impl/ScriptInfoEdgeServiceImpl.java @@ -0,0 +1,90 @@ +package com.xinelu.manage.service.scriptinfoedge.impl; + +import com.xinelu.manage.domain.scriptinfoedge.ScriptInfoEdge; +import com.xinelu.manage.mapper.scriptinfoedge.ScriptInfoEdgeMapper; +import com.xinelu.manage.service.scriptinfoedge.IScriptInfoEdgeService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 话术信息分支Service业务层处理 + * + * @author xinelu + * @date 2024-06-12 + */ +@Service +public class ScriptInfoEdgeServiceImpl implements IScriptInfoEdgeService { + @Resource + private ScriptInfoEdgeMapper scriptInfoEdgeMapper; + + /** + * 查询话术信息分支 + * + * @param id 话术信息分支主键 + * @return 话术信息分支 + */ + @Override + public ScriptInfoEdge selectScriptInfoEdgeById(Long id) { + return scriptInfoEdgeMapper.selectScriptInfoEdgeById(id); + } + + /** + * 查询话术信息分支列表 + * + * @param scriptInfoEdge 话术信息分支 + * @return 话术信息分支 + */ + @Override + public List selectScriptInfoEdgeList(ScriptInfoEdge scriptInfoEdge) { + return scriptInfoEdgeMapper.selectScriptInfoEdgeList(scriptInfoEdge); + } + + /** + * 新增话术信息分支 + * + * @param scriptInfoEdge 话术信息分支 + * @return 结果 + */ + @Override + public int insertScriptInfoEdge(ScriptInfoEdge scriptInfoEdge) { + scriptInfoEdge.setCreateTime(LocalDateTime.now()); + return scriptInfoEdgeMapper.insertScriptInfoEdge(scriptInfoEdge); + } + + /** + * 修改话术信息分支 + * + * @param scriptInfoEdge 话术信息分支 + * @return 结果 + */ + @Override + public int updateScriptInfoEdge(ScriptInfoEdge scriptInfoEdge) { + scriptInfoEdge.setUpdateTime(LocalDateTime.now()); + return scriptInfoEdgeMapper.updateScriptInfoEdge(scriptInfoEdge); + } + + /** + * 批量删除话术信息分支 + * + * @param ids 需要删除的话术信息分支主键 + * @return 结果 + */ + @Override + public int deleteScriptInfoEdgeByIds(Long[] ids) { + return scriptInfoEdgeMapper.deleteScriptInfoEdgeByIds(ids); + } + + /** + * 删除话术信息分支信息 + * + * @param id 话术信息分支主键 + * @return 结果 + */ + @Override + public int deleteScriptInfoEdgeById(Long id) { + return scriptInfoEdgeMapper.deleteScriptInfoEdgeById(id); + } +} diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/scriptinfonode/IScriptInfoNodeService.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/scriptinfonode/IScriptInfoNodeService.java new file mode 100644 index 00000000..64047276 --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/scriptinfonode/IScriptInfoNodeService.java @@ -0,0 +1,61 @@ +package com.xinelu.manage.service.scriptinfonode; + +import com.xinelu.manage.domain.scriptinfonode.ScriptInfoNode; + +import java.util.List; + +/** + * 话术信息节点Service接口 + * + * @author xinelu + * @date 2024-06-12 + */ +public interface IScriptInfoNodeService { + /** + * 查询话术信息节点 + * + * @param id 话术信息节点主键 + * @return 话术信息节点 + */ + ScriptInfoNode selectScriptInfoNodeById(Long id); + + /** + * 查询话术信息节点列表 + * + * @param scriptInfoNode 话术信息节点 + * @return 话术信息节点集合 + */ + List selectScriptInfoNodeList(ScriptInfoNode scriptInfoNode); + + /** + * 新增话术信息节点 + * + * @param scriptInfoNode 话术信息节点 + * @return 结果 + */ + int insertScriptInfoNode(ScriptInfoNode scriptInfoNode); + + /** + * 修改话术信息节点 + * + * @param scriptInfoNode 话术信息节点 + * @return 结果 + */ + int updateScriptInfoNode(ScriptInfoNode scriptInfoNode); + + /** + * 批量删除话术信息节点 + * + * @param ids 需要删除的话术信息节点主键集合 + * @return 结果 + */ + int deleteScriptInfoNodeByIds(Long[] ids); + + /** + * 删除话术信息节点信息 + * + * @param id 话术信息节点主键 + * @return 结果 + */ + int deleteScriptInfoNodeById(Long id); +} diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/scriptinfonode/impl/ScriptInfoNodeServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/scriptinfonode/impl/ScriptInfoNodeServiceImpl.java new file mode 100644 index 00000000..c3c4cdab --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/scriptinfonode/impl/ScriptInfoNodeServiceImpl.java @@ -0,0 +1,90 @@ +package com.xinelu.manage.service.scriptinfonode.impl; + +import com.xinelu.manage.domain.scriptinfonode.ScriptInfoNode; +import com.xinelu.manage.mapper.scriptinfonode.ScriptInfoNodeMapper; +import com.xinelu.manage.service.scriptinfonode.IScriptInfoNodeService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 话术信息节点Service业务层处理 + * + * @author xinelu + * @date 2024-06-12 + */ +@Service +public class ScriptInfoNodeServiceImpl implements IScriptInfoNodeService { + @Resource + private ScriptInfoNodeMapper scriptInfoNodeMapper; + + /** + * 查询话术信息节点 + * + * @param id 话术信息节点主键 + * @return 话术信息节点 + */ + @Override + public ScriptInfoNode selectScriptInfoNodeById(Long id) { + return scriptInfoNodeMapper.selectScriptInfoNodeById(id); + } + + /** + * 查询话术信息节点列表 + * + * @param scriptInfoNode 话术信息节点 + * @return 话术信息节点 + */ + @Override + public List selectScriptInfoNodeList(ScriptInfoNode scriptInfoNode) { + return scriptInfoNodeMapper.selectScriptInfoNodeList(scriptInfoNode); + } + + /** + * 新增话术信息节点 + * + * @param scriptInfoNode 话术信息节点 + * @return 结果 + */ + @Override + public int insertScriptInfoNode(ScriptInfoNode scriptInfoNode) { + scriptInfoNode.setCreateTime(LocalDateTime.now()); + return scriptInfoNodeMapper.insertScriptInfoNode(scriptInfoNode); + } + + /** + * 修改话术信息节点 + * + * @param scriptInfoNode 话术信息节点 + * @return 结果 + */ + @Override + public int updateScriptInfoNode(ScriptInfoNode scriptInfoNode) { + scriptInfoNode.setUpdateTime(LocalDateTime.now()); + return scriptInfoNodeMapper.updateScriptInfoNode(scriptInfoNode); + } + + /** + * 批量删除话术信息节点 + * + * @param ids 需要删除的话术信息节点主键 + * @return 结果 + */ + @Override + public int deleteScriptInfoNodeByIds(Long[] ids) { + return scriptInfoNodeMapper.deleteScriptInfoNodeByIds(ids); + } + + /** + * 删除话术信息节点信息 + * + * @param id 话术信息节点主键 + * @return 结果 + */ + @Override + public int deleteScriptInfoNodeById(Long id) { + return scriptInfoNodeMapper.deleteScriptInfoNodeById(id); + } +} diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/vo/scriptInfo/Edge.java b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/scriptInfo/Edge.java new file mode 100644 index 00000000..837e53e2 --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/scriptInfo/Edge.java @@ -0,0 +1,30 @@ +package com.xinelu.manage.vo.scriptInfo; + +import lombok.Data; + +/** + * 话术信息分支表VO + */ +@Data +public class Edge { + + private String color; + + private String code; + + private String index; + + private String keyword; + + private String label; + + private String shape; + + private String source; + + private String sourceAnchor; + + private String target; + + private String targetAnchor; +} diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/vo/scriptInfo/Node.java b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/scriptInfo/Node.java new file mode 100644 index 00000000..e733c00c --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/scriptInfo/Node.java @@ -0,0 +1,26 @@ +package com.xinelu.manage.vo.scriptInfo; + +import com.xinelu.manage.domain.scriptinfonode.ScriptInfoNode; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class Node extends ScriptInfoNode { + + private String color; + + private String code; + + private String index; + + private String label; + + private String size; + + private String type; + + private String x; + + private String y; +} \ No newline at end of file diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/vo/scriptInfo/ScriptVO.java b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/scriptInfo/ScriptVO.java new file mode 100644 index 00000000..97b8d4ef --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/scriptInfo/ScriptVO.java @@ -0,0 +1,26 @@ +package com.xinelu.manage.vo.scriptInfo; + +import com.xinelu.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * 话术信息对象 script_info + * + * @author xinelu + * @date 2024-02-26 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class ScriptVO extends BaseEntity { + + private Long scriptInfoId; + + private List edges; + + private List nodes; + + private String flowScheme; +} diff --git a/postdischarge-manage/src/main/resources/mapper/manage/scriptinfoedge/ScriptInfoEdgeMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/scriptinfoedge/ScriptInfoEdgeMapper.xml new file mode 100644 index 00000000..f7f8dd13 --- /dev/null +++ b/postdischarge-manage/src/main/resources/mapper/manage/scriptinfoedge/ScriptInfoEdgeMapper.xml @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + select id, + script_info_id, + script_edge_name, + start_node_id, + start_node_name, + end_node_id, + end_node_name, + condition, + keywords, + remark, + create_by, + create_time, + update_by, + update_time + from 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, + + keywords, + + remark, + + create_by, + + create_time, + + update_by, + + update_time, + + + + #{scriptInfoId}, + + #{scriptEdgeName}, + + #{startNodeId}, + + #{startNodeName}, + + #{endNodeId}, + + #{endNodeName}, + + #{condition}, + + #{keywords}, + + #{remark}, + + #{createBy}, + + #{createTime}, + + #{updateBy}, + + #{updateTime}, + + + + + + update script_info_edge + + script_info_id = + #{scriptInfoId}, + + script_edge_name = + #{scriptEdgeName}, + + start_node_id = + #{startNodeId}, + + start_node_name = + #{startNodeName}, + + end_node_id = + #{endNodeId}, + + end_node_name = + #{endNodeName}, + + condition = + #{condition}, + + keywords = + #{keywords}, + + remark = + #{remark}, + + create_by = + #{createBy}, + + create_time = + #{createTime}, + + update_by = + #{updateBy}, + + update_time = + #{updateTime}, + + + where id = #{id} + + + + delete + from script_info_edge + where id = #{id} + + + + delete from script_info_edge where id in + + #{id} + + + + + insert into script_info_edge( + script_info_id, + script_edge_name, + start_node_id, + start_node_name, + end_node_id, + end_node_name, + condition, + keywords, + remark, + create_by, + create_time + )values + + ( + #{scriptInfoEdges.scriptInfoId}, + #{scriptInfoEdges.scriptEdgeName}, + #{scriptInfoEdges.startNodeId}, + #{scriptInfoEdges.startNodeName}, + #{scriptInfoEdges.endNodeId}, + #{scriptInfoEdges.endNodeName}, + #{scriptInfoEdges.condition}, + #{scriptInfoEdges.keywords}, + #{scriptInfoEdges.remark}, + #{scriptInfoEdges.createBy}, + #{scriptInfoEdges.createTime} + ) + + + \ No newline at end of file diff --git a/postdischarge-manage/src/main/resources/mapper/manage/scriptinfonode/ScriptInfoNodeMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/scriptinfonode/ScriptInfoNodeMapper.xml new file mode 100644 index 00000000..c70a7c3d --- /dev/null +++ b/postdischarge-manage/src/main/resources/mapper/manage/scriptinfonode/ScriptInfoNodeMapper.xml @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + select id, + script_info_id, + script_node_name, + script_content, + script_node_type, + remark, + create_by, + create_time, + update_by, + update_time + from script_info_node + + + + + + + + insert into script_info_node + + script_info_id, + + script_node_name, + + script_content, + + script_node_type, + + remark, + + create_by, + + create_time, + + update_by, + + update_time, + + + + #{scriptInfoId}, + + #{scriptNodeName}, + + #{scriptContent}, + + #{scriptNodeType}, + + #{remark}, + + #{createBy}, + + #{createTime}, + + #{updateBy}, + + #{updateTime}, + + + + + + update script_info_node + + script_info_id = + #{scriptInfoId}, + + script_node_name = + #{scriptNodeName}, + + script_content = + #{scriptContent}, + + script_node_type = + #{scriptNodeType}, + + remark = + #{remark}, + + create_by = + #{createBy}, + + create_time = + #{createTime}, + + update_by = + #{updateBy}, + + update_time = + #{updateTime}, + + + where id = #{id} + + + + delete + from script_info_node + where id = #{id} + + + + delete from script_info_node where id in + + #{id} + + + + + insert into script_info_node( + script_info_id, + script_node_name, + script_content, + script_node_type, + remark, + create_by, + create_time + )values + + ( + #{scriptInfoNodes.scriptInfoId}, + #{scriptInfoNodes.scriptNodeName}, + #{scriptInfoNodes.scriptContent}, + #{scriptInfoNodes.scriptNodeType}, + #{scriptInfoNodes.remark}, + #{scriptInfoNodes.createBy}, + #{scriptInfoNodes.createTime} + ) + + + \ No newline at end of file