From 6e9a23d93097b5eb45a0df20d613ad6c07c4e0f4 Mon Sep 17 00:00:00 2001 From: elliott <382696293@qq.com> Date: Mon, 18 Dec 2023 19:11:34 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=9D=E6=9C=AF=E7=AE=A1=E7=90=86=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/domain/entity/WxScriptTag.java | 84 ++++++ .../core/domain/entity/WxScriptTemplate.java | 284 ++++++++++++++++++ .../common/core/mapper/WxScriptTagMapper.java | 70 +++++ .../core/mapper/WxScriptTemplateMapper.java | 71 +++++ .../resources/mapper/WxScriptTagMapper.xml | 90 ++++++ .../mapper/WxScriptTemplateMapper.xml | 155 ++++++++++ .../system/controller/SysTagController.java | 11 + .../WxScriptTemplateController.java | 125 ++++++++ .../system/service/ISysTagService.java | 8 + .../service/IWxScriptTemplateService.java | 70 +++++ .../service/impl/SysTagServiceImpl.java | 6 + .../impl/WxScriptTemplateServiceImpl.java | 185 ++++++++++++ flossom-ui/src/api/system/scriptTemplate.js | 44 +++ flossom-ui/src/api/system/wechatTab.js | 9 + .../src/views/system/scriptTag/index.vue | 279 +++++++++++------ .../src/views/system/wechatTag/index.vue | 33 +- 16 files changed, 1400 insertions(+), 124 deletions(-) create mode 100644 flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/entity/WxScriptTag.java create mode 100644 flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/entity/WxScriptTemplate.java create mode 100644 flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/mapper/WxScriptTagMapper.java create mode 100644 flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/mapper/WxScriptTemplateMapper.java create mode 100644 flossom-common/flossom-common-core/src/main/resources/mapper/WxScriptTagMapper.xml create mode 100644 flossom-common/flossom-common-core/src/main/resources/mapper/WxScriptTemplateMapper.xml create mode 100644 flossom-modules/flossom-system/src/main/java/com/flossom/system/controller/WxScriptTemplateController.java create mode 100644 flossom-modules/flossom-system/src/main/java/com/flossom/system/service/IWxScriptTemplateService.java create mode 100644 flossom-modules/flossom-system/src/main/java/com/flossom/system/service/impl/WxScriptTemplateServiceImpl.java create mode 100644 flossom-ui/src/api/system/scriptTemplate.js diff --git a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/entity/WxScriptTag.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/entity/WxScriptTag.java new file mode 100644 index 0000000..4b8b7bd --- /dev/null +++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/entity/WxScriptTag.java @@ -0,0 +1,84 @@ +package com.flossom.common.core.domain.entity; + +import com.flossom.common.core.annotation.Excel; +import com.flossom.common.core.web.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 话术模板与标签关联对象 wx_script_tag + * + * @author flossom + * @date 2023-12-18 + */ +public class WxScriptTag extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** $column.columnComment */ + private Long id; + + /** 话术主键 */ + @Excel(name = "话术主键") + private Long scriptId; + + /** 标签主键 */ + @Excel(name = "标签主键") + private Long tagId; + + /** 状态(0正常 1停用) */ + @Excel(name = "状态", readConverterExp = "0=正常,1=停用") + private Long status; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setScriptId(Long scriptId) + { + this.scriptId = scriptId; + } + + public Long getScriptId() + { + return scriptId; + } + public void setTagId(Long tagId) + { + this.tagId = tagId; + } + + public Long getTagId() + { + return tagId; + } + public void setStatus(Long status) + { + this.status = status; + } + + public Long getStatus() + { + return status; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("scriptId", getScriptId()) + .append("tagId", getTagId()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/entity/WxScriptTemplate.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/entity/WxScriptTemplate.java new file mode 100644 index 0000000..c9d2639 --- /dev/null +++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/entity/WxScriptTemplate.java @@ -0,0 +1,284 @@ +package com.flossom.common.core.domain.entity; + +import com.flossom.common.core.annotation.Excel; +import com.flossom.common.core.web.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.ArrayList; +import java.util.List; + +/** + * 话术模板对象 wx_script_template + * + * @author flossom + * @date 2023-12-18 + */ +public class WxScriptTemplate extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** $column.columnComment */ + private Long id; + + + /** 话术名称 */ + @Excel(name = "话术名称") + private String scriptName; + + /** 话术标题 */ + @Excel(name = "话术标题") + private String titile; + + /** 话术内容 */ + @Excel(name = "话术内容") + private String content; + + /** 标签名字 */ + @Excel(name = "标签名字") + private String tagNames; + + /** 标签ID */ + @Excel(name = "标签ID") + private String tagIds; + + /** 话术等级:1一级 2 二级 */ + @Excel(name = "话术等级:1一级 2 二级") + private Long level; + + /** 1小程序标签 2企微标签 */ + @Excel(name = "1小程序标签 2企微标签") + private Integer tagType; + + /** 跳转类型:0无跳转、1跳转内部链接、3跳转外部链接、4跳转小程序、5导向视频号、6导向视频号直播间 */ + @Excel(name = "跳转类型:0无跳转、1跳转内部链接、3跳转外部链接、4跳转小程序、5导向视频号、6导向视频号直播间") + private Integer type; + + /** 跳转链接(跳转外部链接、跳转内部链接) */ + @Excel(name = "跳转链接", readConverterExp = "跳=转外部链接、跳转内部链接") + private String link; + + /** 跳转链接参数(跳转内部链接) */ + @Excel(name = "跳转链接参数", readConverterExp = "跳=转内部链接") + private String linkParams; + + /** 外链小程序appid(跳转小程序) */ + @Excel(name = "外链小程序appid", readConverterExp = "跳=转小程序") + private String redirectAppid; + + /** 外链小程序url(跳转小程序) */ + @Excel(name = "外链小程序url", readConverterExp = "跳=转小程序") + private String redirectUrl; + + /** 视频号(导向视频号、导向视频号直播间) */ + @Excel(name = "视频号", readConverterExp = "导=向视频号、导向视频号直播间") + private String videoNo; + + /** 视频号feedId(导向视频号) */ + @Excel(name = "视频号feedId", readConverterExp = "导=向视频号") + private String feedId; + + /** 父级 */ + @Excel(name = "父级") + private Long parentId; + + /** 状态(0正常 1停用) */ + @Excel(name = "状态", readConverterExp = "0=正常,1=停用") + private Long status; + + /** 子话术 */ + private List children = new ArrayList(); + + + private List tagIdArray = new ArrayList(); + + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setTitile(String titile) + { + this.titile = titile; + } + + public String getTitile() + { + return titile; + } + public void setContent(String content) + { + this.content = content; + } + + public String getContent() + { + return content; + } + public void setLevel(Long level) + { + this.level = level; + } + + public Long getLevel() + { + return level; + } + public void setTagType(Integer tagType) + { + this.tagType = tagType; + } + + public Integer getTagType() + { + return tagType; + } + public void setType(Integer type) + { + this.type = type; + } + + public Integer getType() + { + return type; + } + public void setLink(String link) + { + this.link = link; + } + + public String getLink() + { + return link; + } + public void setLinkParams(String linkParams) + { + this.linkParams = linkParams; + } + + public String getLinkParams() + { + return linkParams; + } + public void setRedirectAppid(String redirectAppid) + { + this.redirectAppid = redirectAppid; + } + + public String getRedirectAppid() + { + return redirectAppid; + } + public void setRedirectUrl(String redirectUrl) + { + this.redirectUrl = redirectUrl; + } + + public String getRedirectUrl() + { + return redirectUrl; + } + + public void setParentId(Long parentId) + { + this.parentId = parentId; + } + + public Long getParentId() + { + return parentId; + } + public void setStatus(Long status) + { + this.status = status; + } + + public Long getStatus() + { + return status; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + public String getScriptName() { + return scriptName; + } + + public void setScriptName(String scriptName) { + this.scriptName = scriptName; + } + + public String getVideoNo() { + return videoNo; + } + + public void setVideoNo(String videoNo) { + this.videoNo = videoNo; + } + + public String getFeedId() { + return feedId; + } + + public void setFeedId(String feedId) { + this.feedId = feedId; + } + + public String getTagNames() { + return tagNames; + } + + public void setTagNames(String tagNames) { + this.tagNames = tagNames; + } + + public String getTagIds() { + return tagIds; + } + + public void setTagIds(String tagIds) { + this.tagIds = tagIds; + } + + public List getTagIdArray() { + return tagIdArray; + } + + public void setTagIdArray(List tagIdArray) { + this.tagIdArray = tagIdArray; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("titile", getTitile()) + .append("content", getContent()) + .append("level", getLevel()) + .append("tagType", getTagType()) + .append("type", getType()) + .append("link", getLink()) + .append("linkParams", getLinkParams()) + .append("redirectAppid", getRedirectAppid()) + .append("redirectUrl", getRedirectUrl()) + .append("parentId", getParentId()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/mapper/WxScriptTagMapper.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/mapper/WxScriptTagMapper.java new file mode 100644 index 0000000..21fd827 --- /dev/null +++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/mapper/WxScriptTagMapper.java @@ -0,0 +1,70 @@ +package com.flossom.common.core.mapper; + +import com.flossom.common.core.domain.entity.WxScriptTag; + +import java.util.List; + +/** + * 话术模板与标签关联Mapper接口 + * + * @author flossom + * @date 2023-12-18 + */ +public interface WxScriptTagMapper +{ + /** + * 查询话术模板与标签关联 + * + * @param id 话术模板与标签关联主键 + * @return 话术模板与标签关联 + */ + public WxScriptTag selectWxScriptTagById(Long id); + + /** + * 查询话术模板与标签关联列表 + * + * @param wxScriptTag 话术模板与标签关联 + * @return 话术模板与标签关联集合 + */ + public List selectWxScriptTagList(WxScriptTag wxScriptTag); + + /** + * 新增话术模板与标签关联 + * + * @param wxScriptTag 话术模板与标签关联 + * @return 结果 + */ + public int insertWxScriptTag(WxScriptTag wxScriptTag); + + /** + * 修改话术模板与标签关联 + * + * @param wxScriptTag 话术模板与标签关联 + * @return 结果 + */ + public int updateWxScriptTag(WxScriptTag wxScriptTag); + + /** + * 删除话术模板与标签关联 + * + * @param id 话术模板与标签关联主键 + * @return 结果 + */ + public int deleteWxScriptTagById(Long id); + + /** + * 批量删除话术模板与标签关联 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteWxScriptTagByIds(Long[] ids); + + /** + * 根据话术ID删除关联数据 + * + * @param scriptId 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteWxScriptByScriptId(Long scriptId); +} diff --git a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/mapper/WxScriptTemplateMapper.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/mapper/WxScriptTemplateMapper.java new file mode 100644 index 0000000..44f8e54 --- /dev/null +++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/mapper/WxScriptTemplateMapper.java @@ -0,0 +1,71 @@ +package com.flossom.common.core.mapper; + +import com.flossom.common.core.domain.entity.WxScriptTemplate; + +import java.util.List; + +/** + * 话术模板Mapper接口 + * + * @author flossom + * @date 2023-12-18 + */ +public interface WxScriptTemplateMapper +{ + /** + * 查询话术模板 + * + * @param id 话术模板主键 + * @return 话术模板 + */ + public WxScriptTemplate selectWxScriptTemplateById(Long id); + + /** + * 是否存在子节点 + * + * @param id 标签ID + * @return 结果 + */ + public int hasChildByScriptId(Long id); + + + /** + * 查询话术模板列表 + * + * @param wxScriptTemplate 话术模板 + * @return 话术模板集合 + */ + public List selectWxScriptTemplateList(WxScriptTemplate wxScriptTemplate); + + /** + * 新增话术模板 + * + * @param wxScriptTemplate 话术模板 + * @return 结果 + */ + public int insertWxScriptTemplate(WxScriptTemplate wxScriptTemplate); + + /** + * 修改话术模板 + * + * @param wxScriptTemplate 话术模板 + * @return 结果 + */ + public int updateWxScriptTemplate(WxScriptTemplate wxScriptTemplate); + + /** + * 删除话术模板 + * + * @param id 话术模板主键 + * @return 结果 + */ + public int deleteWxScriptTemplateById(Long id); + + /** + * 批量删除话术模板 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteWxScriptTemplateByIds(Long[] ids); +} diff --git a/flossom-common/flossom-common-core/src/main/resources/mapper/WxScriptTagMapper.xml b/flossom-common/flossom-common-core/src/main/resources/mapper/WxScriptTagMapper.xml new file mode 100644 index 0000000..85a4d00 --- /dev/null +++ b/flossom-common/flossom-common-core/src/main/resources/mapper/WxScriptTagMapper.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + select id, script_id, tag_id, status, create_by, create_time, update_by, update_time, remark from wx_script_tag + + + + + + + + insert into wx_script_tag + + script_id, + tag_id, + status, + create_by, + create_time, + update_by, + update_time, + remark, + + + #{scriptId}, + #{tagId}, + #{status}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{remark}, + + + + + update wx_script_tag + + script_id = #{scriptId}, + tag_id = #{tagId}, + status = #{status}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + remark = #{remark}, + + where id = #{id} + + + + delete from wx_script_tag where script_id = #{scriptId} + + + + delete from wx_script_tag where id = #{id} + + + + delete from wx_script_tag where id in + + #{id} + + + diff --git a/flossom-common/flossom-common-core/src/main/resources/mapper/WxScriptTemplateMapper.xml b/flossom-common/flossom-common-core/src/main/resources/mapper/WxScriptTemplateMapper.xml new file mode 100644 index 0000000..a6eb3fa --- /dev/null +++ b/flossom-common/flossom-common-core/src/main/resources/mapper/WxScriptTemplateMapper.xml @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id,tag_ids,tag_names,script_name, titile, content, level, tag_type, type, link, link_params, redirect_appid, redirect_url, video_no, feed_id, parent_id, status, create_by, create_time, update_by, update_time, remark from wx_script_template + + + + + + + + + + insert into wx_script_template + + tag_names, + tag_ids, + script_name, + titile, + content, + level, + tag_type, + type, + link, + link_params, + redirect_appid, + redirect_url, + video_no, + feed_id, + parent_id, + status, + create_by, + create_time, + update_by, + update_time, + remark, + + + #{tagNames}, + #{tagIds}, + #{scriptName}, + #{titile}, + #{content}, + #{level}, + #{tagType}, + #{type}, + #{link}, + #{linkParams}, + #{redirectAppid}, + #{redirectUrl}, + #{videoNo}, + #{feedId}, + #{parentId}, + #{status}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{remark}, + + + + + update wx_script_template + + tag_names = #{tagNames}, + tag_ids = #{tagIds}, + script_name = #{scriptName}, + titile = #{titile}, + content = #{content}, + level = #{level}, + tag_type = #{tagType}, + type = #{type}, + link = #{link}, + link_params = #{linkParams}, + redirect_appid = #{redirectAppid}, + redirect_url = #{redirectUrl}, + video_no = #{videoNo}, + feed_id = #{feedId}, + parent_id = #{parentId}, + status = #{status}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + remark = #{remark}, + + where id = #{id} + + + + delete from wx_script_template where id = #{id} + + + + + delete from wx_script_template where id in + + #{id} + + + diff --git a/flossom-modules/flossom-system/src/main/java/com/flossom/system/controller/SysTagController.java b/flossom-modules/flossom-system/src/main/java/com/flossom/system/controller/SysTagController.java index 0ed99c0..daa6349 100644 --- a/flossom-modules/flossom-system/src/main/java/com/flossom/system/controller/SysTagController.java +++ b/flossom-modules/flossom-system/src/main/java/com/flossom/system/controller/SysTagController.java @@ -125,5 +125,16 @@ public class SysTagController extends BaseController // } tagService.checkDeptDataScope(id); return toAjax(tagService.deleteDeptById(id)); + + } + + /** + * 获取标签树列表 + */ + @RequiresPermissions("system:user:list") + @GetMapping("/tagTree") + public AjaxResult tagTree(SysTag tag) + { + return success(tagService.selectTagTreeList(tag)); } } diff --git a/flossom-modules/flossom-system/src/main/java/com/flossom/system/controller/WxScriptTemplateController.java b/flossom-modules/flossom-system/src/main/java/com/flossom/system/controller/WxScriptTemplateController.java new file mode 100644 index 0000000..233d525 --- /dev/null +++ b/flossom-modules/flossom-system/src/main/java/com/flossom/system/controller/WxScriptTemplateController.java @@ -0,0 +1,125 @@ +package com.flossom.system.controller; + +import java.util.List; +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; + +import com.flossom.common.core.domain.entity.SysTag; +import com.flossom.common.core.domain.entity.WxScriptTemplate; +import com.flossom.common.core.utils.StringUtils; +import com.flossom.common.core.utils.poi.ExcelUtil; +import com.flossom.common.core.web.controller.BaseController; +import com.flossom.common.core.web.domain.AjaxResult; +import com.flossom.common.core.web.page.TableDataInfo; +import com.flossom.common.log.annotation.Log; +import com.flossom.common.log.enums.BusinessType; +import com.flossom.common.security.annotation.RequiresPermissions; +import org.apache.commons.lang3.ArrayUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.flossom.system.service.IWxScriptTemplateService; + +/** + * 话术模板Controller + * + * @author flossom + * @date 2023-12-18 + */ +@RestController +@RequestMapping("/scriptTemplate") +public class WxScriptTemplateController extends BaseController +{ + @Autowired + private IWxScriptTemplateService wxScriptTemplateService; + + /** + * 查询话术模板列表 + */ + @RequiresPermissions("system:scriptTemplate:list") + @GetMapping("/list") + public AjaxResult list(WxScriptTemplate wxScriptTemplate) + { + List list = wxScriptTemplateService.selectWxScriptTemplateList(wxScriptTemplate); + return success(list); + } + + /** + * 导出话术模板列表 + */ + @RequiresPermissions("system:scriptTemplate:export") + @Log(title = "话术模板", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, WxScriptTemplate wxScriptTemplate) + { + List list = wxScriptTemplateService.selectWxScriptTemplateList(wxScriptTemplate); + ExcelUtil util = new ExcelUtil(WxScriptTemplate.class); + util.exportExcel(response, list, "话术模板数据"); + } + + /** + * 获取话术模板详细信息 + */ + @RequiresPermissions("system:scriptTemplate:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(wxScriptTemplateService.selectWxScriptTemplateById(id)); + } + + /** + * 新增话术模板 + */ + @RequiresPermissions("system:scriptTemplate:add") + @Log(title = "话术模板", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody WxScriptTemplate wxScriptTemplate) + { + return toAjax(wxScriptTemplateService.insertWxScriptTemplate(wxScriptTemplate)); + } + + /** + * 修改话术模板 + */ + @RequiresPermissions("system:scriptTemplate:edit") + @Log(title = "话术模板", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody WxScriptTemplate wxScriptTemplate) + { + System.out.println("标签数组==》"+wxScriptTemplate.getTagIds().toString()); + return toAjax(wxScriptTemplateService.updateWxScriptTemplate(wxScriptTemplate)); + } + + /** + * 删除话术模板 + */ + @RequiresPermissions("system:scriptTemplate:remove") + @Log(title = "话术模板", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public AjaxResult remove(@PathVariable Long id) + { + if (wxScriptTemplateService.hasChildByScriptId(id)) + { + return warn("存在下级标签,不允许删除"); + } + return toAjax(wxScriptTemplateService.deleteWxScriptTemplateById(id)); + } + +// /** +// * 查询标签列表(排除节点) +// */ +// @RequiresPermissions("system:scriptTemplate:list") +// @GetMapping("/list/exclude/{id}") +// public AjaxResult excludeChild(@PathVariable(value = "id", required = false) Long id) +// { +// List tags = wxScriptTemplateService.selectWxScriptTemplateList(new WxScriptTemplate()); +// tags.removeIf(d -> d.getId().intValue() == id || ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), id + "")); +// return success(tags); +// } +} diff --git a/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/ISysTagService.java b/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/ISysTagService.java index 54429c7..fd03429 100644 --- a/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/ISysTagService.java +++ b/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/ISysTagService.java @@ -124,4 +124,12 @@ public interface ISysTagService * @return 结果 */ public int deleteDeptById(Long id); + + /** + * 查询部门树结构信息 + * + * @param tag 标签信息 + * @return 标签树信息集合 + */ + public List selectTagTreeList(SysTag tag); } diff --git a/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/IWxScriptTemplateService.java b/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/IWxScriptTemplateService.java new file mode 100644 index 0000000..325174d --- /dev/null +++ b/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/IWxScriptTemplateService.java @@ -0,0 +1,70 @@ +package com.flossom.system.service; + +import java.util.List; + +import com.flossom.common.core.domain.entity.WxScriptTemplate; + +/** + * 话术模板Service接口 + * + * @author flossom + * @date 2023-12-18 + */ +public interface IWxScriptTemplateService +{ + /** + * 查询话术模板 + * + * @param id 话术模板主键 + * @return 话术模板 + */ + public WxScriptTemplate selectWxScriptTemplateById(Long id); + + /** + * 查询话术模板列表 + * + * @param wxScriptTemplate 话术模板 + * @return 话术模板集合 + */ + public List selectWxScriptTemplateList(WxScriptTemplate wxScriptTemplate); + + /** + * 新增话术模板 + * + * @param wxScriptTemplate 话术模板 + * @return 结果 + */ + public int insertWxScriptTemplate(WxScriptTemplate wxScriptTemplate); + + /** + * 修改话术模板 + * + * @param wxScriptTemplate 话术模板 + * @return 结果 + */ + public int updateWxScriptTemplate(WxScriptTemplate wxScriptTemplate); + + /** + * 批量删除话术模板 + * + * @param ids 需要删除的话术模板主键集合 + * @return 结果 + */ + public int deleteWxScriptTemplateByIds(Long[] ids); + + /** + * 删除话术模板信息 + * + * @param id 话术模板主键 + * @return 结果 + */ + public int deleteWxScriptTemplateById(Long id); + + /** + * 是否存在标签子节点 + * + * @param id 标签ID + * @return 结果 + */ + public boolean hasChildByScriptId(Long id); +} diff --git a/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/impl/SysTagServiceImpl.java b/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/impl/SysTagServiceImpl.java index 9abb039..8eb57d2 100644 --- a/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/impl/SysTagServiceImpl.java +++ b/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/impl/SysTagServiceImpl.java @@ -302,6 +302,12 @@ public class SysTagServiceImpl implements ISysTagService return tagMapper.deleteDeptById(id); } + @Override + public List selectTagTreeList(SysTag tag) { + List tags = SpringUtils.getAopProxy(this).selectDeptList(tag); + return buildDeptTreeSelect(tags); + } + /** * 递归列表 */ diff --git a/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/impl/WxScriptTemplateServiceImpl.java b/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/impl/WxScriptTemplateServiceImpl.java new file mode 100644 index 0000000..edeb44f --- /dev/null +++ b/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/impl/WxScriptTemplateServiceImpl.java @@ -0,0 +1,185 @@ +package com.flossom.system.service.impl; + +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +import com.flossom.common.core.domain.entity.SysTag; +import com.flossom.common.core.domain.entity.WxScriptTag; +import com.flossom.common.core.domain.entity.WxScriptTemplate; +import com.flossom.common.core.mapper.SysTagMapper; +import com.flossom.common.core.mapper.WxScriptTagMapper; +import com.flossom.common.core.mapper.WxScriptTemplateMapper; +import com.flossom.common.core.utils.DateUtils; +import com.flossom.common.core.utils.StringUtils; +import com.flossom.common.security.utils.SecurityUtils; +import org.apache.commons.compress.utils.Lists; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.flossom.system.service.IWxScriptTemplateService; +import org.springframework.util.CollectionUtils; + +/** + * 话术模板Service业务层处理 + * + * @author flossom + * @date 2023-12-18 + */ +@Service +public class WxScriptTemplateServiceImpl implements IWxScriptTemplateService +{ + @Autowired + private WxScriptTemplateMapper wxScriptTemplateMapper; + @Autowired + private WxScriptTagMapper wxScriptTagMapper; + @Autowired + private SysTagMapper sysTagMapper; + /** + * 查询话术模板 + * + * @param id 话术模板主键 + * @return 话术模板 + */ + @Override + public WxScriptTemplate selectWxScriptTemplateById(Long id) + { + return wxScriptTemplateMapper.selectWxScriptTemplateById(id); + } + + /** + * 查询话术模板列表 + * + * @param wxScriptTemplate 话术模板 + * @return 话术模板 + */ + @Override + public List selectWxScriptTemplateList(WxScriptTemplate wxScriptTemplate) + { + return wxScriptTemplateMapper.selectWxScriptTemplateList(wxScriptTemplate); + } + + /** + * 新增话术模板 + * + * @param wxScriptTemplate 话术模板 + * @return 结果 + */ + @Override + public int insertWxScriptTemplate(WxScriptTemplate wxScriptTemplate) + { + wxScriptTemplate.setCreateTime(DateUtils.getNowDate()); + wxScriptTemplate.setCreateBy(SecurityUtils.getLoginUser().getUsername()); + List sysTags = Lists.newArrayList(); + // 处理标签在字段的展示 + List tagIds = wxScriptTemplate.getTagIdArray(); + if(!CollectionUtils.isEmpty(tagIds)) { + for (long tagId:tagIds) { + SysTag sysTag = sysTagMapper.selectDeptById(tagId); + if (Objects.nonNull(sysTag)) { + sysTags.add(sysTag); + } + } + } + if (!CollectionUtils.isEmpty(sysTags)) { + String tagNames = sysTags.stream().map(SysTag::getTagName).collect(Collectors.joining(",")); + wxScriptTemplate.setTagNames(tagNames); + List resultList = sysTags.stream().map(SysTag::getId).collect(Collectors.toList()); + String ids = StringUtils.join(resultList, ","); + wxScriptTemplate.setTagIds(ids); + } + + int i = wxScriptTemplateMapper.insertWxScriptTemplate(wxScriptTemplate); + + for(SysTag tag : sysTags) { + // 增加关联关系 + WxScriptTag scriptTag = new WxScriptTag(); + scriptTag.setScriptId(wxScriptTemplate.getId()); + scriptTag.setTagId(tag.getId()); + scriptTag.setStatus(0l); + scriptTag.setCreateBy(SecurityUtils.getLoginUser().getUsername()); + scriptTag.setCreateTime(DateUtils.getNowDate()); + wxScriptTagMapper.insertWxScriptTag(scriptTag); + } + return i; + } + + /** + * 修改话术模板 + * + * @param wxScriptTemplate 话术模板 + * @return 结果 + */ + @Override + public int updateWxScriptTemplate(WxScriptTemplate wxScriptTemplate) + { + wxScriptTemplate.setUpdateTime(DateUtils.getNowDate()); + wxScriptTemplate.setUpdateBy(SecurityUtils.getLoginUser().getUsername()); + wxScriptTemplate.setTagIds(""); + wxScriptTemplate.setTagNames(""); + List sysTags = Lists.newArrayList(); + // 处理标签在字段的展示 + List tagIds = wxScriptTemplate.getTagIdArray(); + if(!CollectionUtils.isEmpty(tagIds)) { + for (long tagId:tagIds) { + SysTag sysTag = sysTagMapper.selectDeptById(tagId); + if (Objects.nonNull(sysTag)) { + sysTags.add(sysTag); + } + } + } + if (!CollectionUtils.isEmpty(sysTags)) { + String tagNames = sysTags.stream().map(SysTag::getTagName).collect(Collectors.joining(",")); + wxScriptTemplate.setTagNames(tagNames); + List resultList = sysTags.stream().map(SysTag::getId).collect(Collectors.toList()); + String ids = StringUtils.join(resultList, ","); + wxScriptTemplate.setTagIds(ids); + } + + // 先删除原本的关系 + wxScriptTagMapper.deleteWxScriptByScriptId(wxScriptTemplate.getId()); + + for(SysTag tag : sysTags) { + // 增加关联关系 + WxScriptTag scriptTag = new WxScriptTag(); + scriptTag.setScriptId(wxScriptTemplate.getId()); + scriptTag.setTagId(tag.getId()); + scriptTag.setStatus(0l); + scriptTag.setCreateBy(SecurityUtils.getLoginUser().getUsername()); + scriptTag.setCreateTime(DateUtils.getNowDate()); + wxScriptTagMapper.insertWxScriptTag(scriptTag); + } + return wxScriptTemplateMapper.updateWxScriptTemplate(wxScriptTemplate); + } + + /** + * 批量删除话术模板 + * + * @param ids 需要删除的话术模板主键 + * @return 结果 + */ + @Override + public int deleteWxScriptTemplateByIds(Long[] ids) + { + return wxScriptTemplateMapper.deleteWxScriptTemplateByIds(ids); + } + + /** + * 删除话术模板信息 + * + * @param id 话术模板主键 + * @return 结果 + */ + @Override + public int deleteWxScriptTemplateById(Long id) + { + // 先删除原本的关系 + int i = wxScriptTagMapper.deleteWxScriptByScriptId(id); + return wxScriptTemplateMapper.deleteWxScriptTemplateById(id); + } + + @Override + public boolean hasChildByScriptId(Long id) { + int result = wxScriptTemplateMapper.hasChildByScriptId(id); + return result > 0; + } +} diff --git a/flossom-ui/src/api/system/scriptTemplate.js b/flossom-ui/src/api/system/scriptTemplate.js new file mode 100644 index 0000000..f8a9923 --- /dev/null +++ b/flossom-ui/src/api/system/scriptTemplate.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询话术模板列表 +export function listTemplate(query) { + return request({ + url: '/system/scriptTemplate/list', + method: 'get', + params: query + }) +} + +// 查询话术模板详细 +export function getTemplate(id) { + return request({ + url: '/system/scriptTemplate/' + id, + method: 'get' + }) +} + +// 新增话术模板 +export function addTemplate(data) { + return request({ + url: '/system/scriptTemplate', + method: 'post', + data: data + }) +} + +// 修改话术模板 +export function updateTemplate(data) { + return request({ + url: '/system/scriptTemplate', + method: 'put', + data: data + }) +} + +// 删除话术模板 +export function delTemplate(id) { + return request({ + url: '/system/scriptTemplate/' + id, + method: 'delete' + }) +} diff --git a/flossom-ui/src/api/system/wechatTab.js b/flossom-ui/src/api/system/wechatTab.js index 10485a6..c6355ed 100644 --- a/flossom-ui/src/api/system/wechatTab.js +++ b/flossom-ui/src/api/system/wechatTab.js @@ -50,3 +50,12 @@ export function delDept(deptId) { method: 'delete' }) } + +// 查询部门下拉树结构 +export function tagTreeSelect(query) { + return request({ + url: '/system/tagInfo/tagTree', + method: 'get', + params: query + }) +} diff --git a/flossom-ui/src/views/system/scriptTag/index.vue b/flossom-ui/src/views/system/scriptTag/index.vue index 5092f28..53b8613 100644 --- a/flossom-ui/src/views/system/scriptTag/index.vue +++ b/flossom-ui/src/views/system/scriptTag/index.vue @@ -1,29 +1,29 @@