diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000000000000000000000000000000000000..8f309f336b7f35d77804a669f0c34c940c49469f
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,28 @@
+version: '3.3'
+
+# 如需配置变量,请在environment中进行变量配置
+services:
+ api:
+ image: linkwechat
+ container_name: linkwechat
+ environment:
+ - JAVA_OPTS=-Xms4096m -Xmx4096m -Duser.timezone=Asia/Shanghai
+ - TZ=Asia/Shanghai
+ - NACOS_SERVER
+ # 如果使用nacos,以下变量可以不进行配置
+ - ES_ADDRESS
+ - DB_HOST
+ - DB_PORT
+ - DB_NAME
+ - DB_USER
+ - DB_PASS
+ - REDIS_HOST
+ - REDIS_PORT
+ ports:
+ - "${APP_PORT}:8090"
+ volumes:
+ - ./logs:/logs
+ # 上传文件地址,请根据实际${ruoyi.profile}自行修改映射
+ - ./pic:/app/project/pic
+ - ./tmp:/tmp
+ restart: always
\ No newline at end of file
diff --git a/linkwe-admin/pom.xml b/linkwe-admin/pom.xml
index b940a787b5d7967c4e690d23b90aecfbe9b84055..49a8ff57a4fe9c408ee868eb3d443624a03a2573 100644
--- a/linkwe-admin/pom.xml
+++ b/linkwe-admin/pom.xml
@@ -79,10 +79,15 @@
spring-cloud-starter-alibaba-nacos-config
-
-
-
-
+
+
+
+
+
+
+ javax.xml.bind
+ jaxb-api
+
@@ -111,6 +116,36 @@
${project.artifactId}
+
+ com.spotify
+ docker-maven-plugin
+ 1.1.1
+
+ ${parent.artifactId}
+ ${basedir}/src/main/docker
+
+ ${parent.version}
+
+
+
+ ${project.build.finalName}.jar
+
+
+
+ /
+ ${project.build.directory}
+ ${project.build.finalName}.jar
+
+
+
+
+
+ javax.activation
+ activation
+ 1.1.1
+
+
+
${project.artifactId}
diff --git a/linkwe-admin/src/main/docker/Dockerfile b/linkwe-admin/src/main/docker/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..bb49258b47e38132d8ffc711a6061e7bc7bbe784
--- /dev/null
+++ b/linkwe-admin/src/main/docker/Dockerfile
@@ -0,0 +1,15 @@
+FROM openjdk:8-alpine
+
+# 设置时区
+ADD Shanghai /usr/share/zoneinfo/Asia/
+RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
+ && echo "Asia/Shanghai" > /etc/timezone
+
+VOLUME /tmp
+
+#设置字符集
+ENV LANG en_US.UTF-8
+ARG JAR_FILE
+ADD $JAR_FILE app.jar
+
+ENTRYPOINT ["sh","-c","java -server $JAVA_OPTS -jar /app.jar"]
\ No newline at end of file
diff --git a/linkwe-admin/src/main/docker/Shanghai b/linkwe-admin/src/main/docker/Shanghai
new file mode 100644
index 0000000000000000000000000000000000000000..d7f92e2fa5868addab98170099181375634ab1ca
Binary files /dev/null and b/linkwe-admin/src/main/docker/Shanghai differ
diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityGroupSopController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityGroupSopController.java
new file mode 100644
index 0000000000000000000000000000000000000000..72a1733fbeef687ebebe558358281f3c976914f2
--- /dev/null
+++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityGroupSopController.java
@@ -0,0 +1,145 @@
+package com.linkwechat.web.controller.wecom;
+
+import com.linkwechat.common.constant.HttpStatus;
+import com.linkwechat.common.core.controller.BaseController;
+import com.linkwechat.common.core.domain.AjaxResult;
+import com.linkwechat.common.core.page.TableDataInfo;
+import com.linkwechat.common.utils.SecurityUtils;
+import com.linkwechat.wecom.domain.WeGroupSop;
+import com.linkwechat.wecom.domain.dto.WeGroupSopDto;
+import com.linkwechat.wecom.domain.vo.WeGroupSopVo;
+import com.linkwechat.wecom.service.IWeGroupSopService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 社区运营 - 群sop controller
+ */
+@Api(description = "新客自动拉群 Controller")
+@RestController
+@RequestMapping(value = "/wecom/communityGroupSop")
+public class WeCommunityGroupSopController extends BaseController {
+
+ @Autowired
+ private IWeGroupSopService groupSopService;
+
+ /**
+ * 通过过滤条件获取群sop列表
+ *
+ * @param ruleName 规则名称
+ * @param createBy 创建者
+ * @param beginTime 创建区间 - 开始时间
+ * @param endTime 创建区间 - 结束时间
+ * @return 群sop规则列表
+ */
+ @ApiOperation(value = "通过过滤条件获取群sop列表", httpMethod = "GET")
+ @PreAuthorize("@ss.hasPermi('wecom:communityGroupSop:list')")
+ @GetMapping(path = "/list")
+ public TableDataInfo> getSopList(
+ @RequestParam(value = "ruleName", required = false) String ruleName,
+ @RequestParam(value = "createBy", required = false) String createBy,
+ @RequestParam(value = "beginTime", required = false) String beginTime,
+ @RequestParam(value = "endTime", required = false) String endTime
+ )
+ {
+ startPage();
+ List groupSopVoList = groupSopService.getGroupSopList(ruleName, createBy, beginTime, endTime);
+ return getDataTable(groupSopVoList);
+ }
+
+ /**
+ * 新增SOP规则
+ *
+ * @param groupSopDto 更新数据
+ * @return 结果
+ */
+ @ApiOperation(value = "新增SOP规则", httpMethod = "POST")
+ @PreAuthorize("@ss.hasPermi('wecom:communityGroupSop:add')")
+ @PostMapping(path = "/")
+ public AjaxResult addGroupSop(@Validated @RequestBody WeGroupSopDto groupSopDto) {
+ if (!groupSopService.isRuleNameUnique(groupSopDto.getRuleName())) {
+ return AjaxResult.error(HttpStatus.BAD_REQUEST, "规则名称已存在");
+ }
+ WeGroupSop weGroupSop = new WeGroupSop();
+ BeanUtils.copyProperties(groupSopDto, weGroupSop);
+ weGroupSop.setCreateBy(SecurityUtils.getUsername());
+ // 群聊id列表
+ List groupIdList = groupSopDto.getChatIdList();
+ // 素材URL
+ List materialIdList = groupSopDto.getMaterialIdList();
+ // 上传的图片的URl列表
+ List picList = groupSopDto.getPicList();
+ return toAjax(groupSopService.addGroupSop(weGroupSop, groupIdList, materialIdList, picList));
+ }
+
+ /**
+ * 通过规则id获取sop规则
+ *
+ * @param ruleId 规则id
+ * @return 结果
+ */
+ @ApiOperation(value = "通过规则id获取sop规则详情", httpMethod = "GET")
+ @PreAuthorize("@ss.hasPermi('wecom:communityGroupSop:query')")
+ @GetMapping(path = "/{ruleId}")
+ public AjaxResult getGroupSop(@PathVariable("ruleId") Long ruleId) {
+ WeGroupSopVo groupSopVo = groupSopService.getGroupSopById(ruleId);
+ if (null == groupSopVo) {
+ return AjaxResult.error(HttpStatus.NOT_FOUND, "该群SOP规则不存在");
+ }
+ return AjaxResult.success(groupSopVo);
+ }
+
+ /**
+ * 更改SOP规则
+ *
+ * @param ruleId SOP规则 id
+ * @param groupSopDto 更新数据
+ * @return 结果
+ */
+ @ApiOperation(value = "更改SOP规则", httpMethod = "PUT")
+ @PreAuthorize("@ss.hasPermi('wecom:communityGroupSop:edit')")
+ @PutMapping(path = "/{ruleId}")
+ public AjaxResult updateGroupSop(@PathVariable Long ruleId, @Validated @RequestBody WeGroupSopDto groupSopDto) {
+ // 校验是否存在
+ if (null == groupSopService.getGroupSopById(ruleId)) {
+ return AjaxResult.error(HttpStatus.NOT_FOUND, "该群SOP规则不存在");
+ }
+ // 校验规则名是否可用
+ WeGroupSopVo original = groupSopService.getGroupSopById(ruleId);
+ if (!groupSopDto.getRuleName().equals(original.getRuleName()) && !groupSopService.isRuleNameUnique(groupSopDto.getRuleName())) {
+ return AjaxResult.error(HttpStatus.BAD_REQUEST, "规则名称已存在");
+ }
+ WeGroupSop weGroupSop = new WeGroupSop();
+ BeanUtils.copyProperties(groupSopDto, weGroupSop);
+ weGroupSop.setRuleId(ruleId);
+ weGroupSop.setUpdateBy(SecurityUtils.getUsername());
+ // 群聊id列表
+ List groupIdList = groupSopDto.getChatIdList();
+ // 素材id列表
+ List materialIdList = groupSopDto.getMaterialIdList();
+ // 上传的图片的URl列表
+ List picList = groupSopDto.getPicList();
+ return toAjax(groupSopService.updateGroupSop(weGroupSop, groupIdList, materialIdList, picList));
+ }
+
+ /**
+ * 根据id列表批量删除群sop规则
+ *
+ * @param ids 群sop规则列表
+ * @return 结果
+ */
+ @ApiOperation(value = "根据id列表批量删除群sop规则", httpMethod = "DELETE")
+ @PreAuthorize("@ss.hasPermi('wecom:communityGroupSop:remove')")
+ @DeleteMapping(path = "/{ids}")
+ public AjaxResult batchDeleteSopRule(@PathVariable("ids") Long[] ids) {
+ return toAjax(groupSopService.batchRemoveGroupSopByIds(ids));
+ }
+
+}
diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityKeywordGroupController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityKeywordGroupController.java
new file mode 100644
index 0000000000000000000000000000000000000000..6c042252677abf7c3fdca802e481fc4ab1fbc300
--- /dev/null
+++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityKeywordGroupController.java
@@ -0,0 +1,139 @@
+package com.linkwechat.web.controller.wecom;
+
+import com.linkwechat.common.constant.HttpStatus;
+import com.linkwechat.common.core.controller.BaseController;
+import com.linkwechat.common.core.domain.AjaxResult;
+import com.linkwechat.common.core.page.TableDataInfo;
+import com.linkwechat.common.utils.SecurityUtils;
+import com.linkwechat.common.utils.bean.BeanUtils;
+import com.linkwechat.wecom.domain.WeKeywordGroupTask;
+import com.linkwechat.wecom.domain.dto.WeKeywordGroupTaskDto;
+import com.linkwechat.wecom.domain.vo.WeKeywordGroupTaskVo;
+import com.linkwechat.wecom.service.IWeCommunityKeywordToGroupService;
+import com.linkwechat.wecom.service.IWeGroupCodeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 关键词拉群controller
+ */
+@RestController
+@RequestMapping(value = "/wecom/communityKeywordGroup")
+public class WeCommunityKeywordGroupController extends BaseController {
+
+ @Autowired
+ private IWeCommunityKeywordToGroupService keywordToGroupService;
+
+ @Autowired
+ private IWeGroupCodeService groupCodeService;
+
+ /**
+ * 根据过滤条件获取关键词拉群任务列表
+ *
+ * @param taskName 任务名称
+ * @param createBy 创建人
+ * @param keyword 关键词
+ * @param beginTime 开始时间
+ * @param endTime 结束时间
+ * @return 列表数据
+ */
+ @PreAuthorize("@ss.hasPermi('wecom:communityKeyword:list')")
+ @GetMapping(path = "/list")
+ public TableDataInfo> list(
+ @RequestParam(value = "taskName", required = false) String taskName,
+ @RequestParam(value = "createBy", required = false) String createBy,
+ @RequestParam(value = "keyword", required = false) String keyword,
+ @RequestParam(value = "beginTime", required = false) String beginTime,
+ @RequestParam(value = "endTime", required = false) String endTime
+ )
+ {
+ startPage();
+ List taskList = keywordToGroupService
+ .getTaskList(taskName, createBy, keyword, beginTime, endTime);
+ return getDataTable(taskList);
+ }
+
+ /**
+ * 根据id获取任务详情
+ *
+ * @param taskId 任务id
+ * @return 任务详情
+ */
+ @PreAuthorize("@ss.hasPermi('wecom:communityKeyword:query')")
+ @GetMapping(path = "/{taskId}")
+ public AjaxResult getTask(@PathVariable("taskId") Long taskId) {
+ WeKeywordGroupTaskVo keywordsGroupVo = keywordToGroupService.getTaskById(taskId);
+ // 获取群活码
+ keywordsGroupVo.setGroupCodeInfo(groupCodeService.selectWeGroupCodeById(keywordsGroupVo.getGroupCodeId()));
+ return AjaxResult.success(keywordsGroupVo);
+ }
+
+ /**
+ * 添加新任务
+ *
+ * @param keywordToGroupDto 添加任务所需的数据
+ * @return 结果
+ */
+ @PreAuthorize("@ss.hasPermi('wecom:communityKeyword:add')")
+ @PostMapping(path = "/")
+ public AjaxResult addTask(@RequestBody @Validated WeKeywordGroupTaskDto keywordToGroupDto) {
+ // 群活码必须存在
+ if (null == groupCodeService.selectWeGroupCodeById(keywordToGroupDto.getGroupCodeId())) {
+ return AjaxResult.error(HttpStatus.NOT_FOUND, "群活码不存在");
+ }
+ // 任务名称必须唯一
+ if (!keywordToGroupService.taskNameIsUnique(keywordToGroupDto.getTaskName())) {
+ return AjaxResult.error(HttpStatus.BAD_REQUEST, "任务名称已存在");
+ }
+ WeKeywordGroupTask task = new WeKeywordGroupTask();
+ BeanUtils.copyProperties(keywordToGroupDto, task);
+ task.setCreateBy(SecurityUtils.getUsername());
+ String[] keywords = keywordToGroupDto.getKeywords().split(",");
+ return toAjax(keywordToGroupService.addTask(task, keywords));
+ }
+
+ /**
+ * 根据id及更新数据对指定任务进行更新
+ *
+ * @param taskId 任务id
+ * @param keywordToGroupDto 更新所需数据
+ * @return 结果
+ */
+ @PreAuthorize("@ss.hasPermi('wecom:communityKeyword:edit')")
+ @PutMapping(path = "/{taskId}")
+ public AjaxResult updateTask(@PathVariable("taskId") Long taskId, @RequestBody @Validated WeKeywordGroupTaskDto keywordToGroupDto) {
+ // 群活码必须存在
+ if (null == groupCodeService.selectWeGroupCodeById(keywordToGroupDto.getGroupCodeId())) {
+ return AjaxResult.error(HttpStatus.NOT_FOUND, "群活码不存在");
+ }
+ // 若名称发生更改,则必须唯一
+ String inputTaskName = keywordToGroupDto.getTaskName();
+ String originalName = keywordToGroupService.getTaskById(taskId).getTaskName();
+ if (!originalName.equals(inputTaskName) && !keywordToGroupService.taskNameIsUnique(inputTaskName)) {
+ return AjaxResult.error(HttpStatus.BAD_REQUEST, "任务名称已存在");
+ }
+ WeKeywordGroupTask task = new WeKeywordGroupTask();
+ BeanUtils.copyProperties(keywordToGroupDto, task);
+ task.setTaskId(taskId);
+ task.setUpdateBy(SecurityUtils.getUsername());
+ String[] keywords = keywordToGroupDto.getKeywords().split(",");
+ return toAjax(keywordToGroupService.updateTask(task, keywords));
+ }
+
+ /**
+ * 通过id列表批量删除任务
+ *
+ * @param ids id列表
+ * @return 结果
+ */
+ @PreAuthorize("@ss.hasPermi('wecom:communityKeyword:remove')")
+ @DeleteMapping(path = "/{ids}")
+ public AjaxResult batchDeleteTask(@PathVariable("ids") Long[] ids) {
+ return toAjax(keywordToGroupService.batchRemoveTaskByIds(ids));
+ }
+
+}
diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityPresTagGroupController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityPresTagGroupController.java
new file mode 100644
index 0000000000000000000000000000000000000000..b1293b6af76effa319ec6c8a8a165b22a98fdd03
--- /dev/null
+++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityPresTagGroupController.java
@@ -0,0 +1,127 @@
+package com.linkwechat.web.controller.wecom;
+
+
+import com.linkwechat.common.constant.HttpStatus;
+import com.linkwechat.common.core.controller.BaseController;
+import com.linkwechat.common.core.domain.AjaxResult;
+import com.linkwechat.common.core.page.TableDataInfo;
+import com.linkwechat.wecom.domain.WeGroupCode;
+import com.linkwechat.wecom.domain.WeTag;
+import com.linkwechat.wecom.domain.dto.WePresTagGroupTaskDto;
+import com.linkwechat.wecom.domain.vo.WePresTagGroupTaskStatVo;
+import com.linkwechat.wecom.domain.vo.WePresTagGroupTaskVo;
+import com.linkwechat.wecom.domain.vo.WeEmplVo;
+import com.linkwechat.wecom.service.IWePresTagGroupTaskService;
+import com.linkwechat.wecom.service.IWeGroupCodeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping(value = "/wecom/communityPresTagGroup")
+public class WeCommunityPresTagGroupController extends BaseController {
+
+ @Autowired
+ private IWePresTagGroupTaskService taskService;
+
+ @Autowired
+ private IWeGroupCodeService groupCodeService;
+
+ /**
+ * 获取老客标签建群列表数据
+ */
+ @PreAuthorize("@ss.hasPermi('wecom:communitytagGroup:list')")
+ @GetMapping(path = "/list")
+ public TableDataInfo> getList(
+ @RequestParam(value = "taskName", required = false) String taskName,
+ @RequestParam(value = "sendType", required = false) Integer sendType,
+ @RequestParam(value = "createBy", required = false) String createBy,
+ @RequestParam(value = "beginTime", required = false) String beginTime,
+ @RequestParam(value = "endTime", required = false) String endTime) {
+ startPage();
+ List wePresTagGroupTaskVoList = taskService.selectTaskListList(taskName, sendType, createBy, beginTime, endTime);
+ return getDataTable(wePresTagGroupTaskVoList);
+ }
+
+ /**
+ * 新建老客标签建群任务
+ */
+ @PreAuthorize("@ss.hasPermi('wecom:communitytagGroup:add')")
+ @PostMapping
+ public AjaxResult addTask(@RequestBody @Validated WePresTagGroupTaskDto wePresTagGroupTaskDto) {
+ // 检测任务名是否可用
+ if (!taskService.checkTaskNameUnique(wePresTagGroupTaskDto.getTaskName())) {
+ return AjaxResult.error("任务名已存在");
+ }
+ if (null == groupCodeService.selectWeGroupCodeById(wePresTagGroupTaskDto.getGroupCodeId())) {
+ return AjaxResult.error(HttpStatus.NOT_FOUND,"群活码不存在");
+ }
+ return toAjax(taskService.add(wePresTagGroupTaskDto));
+ }
+
+ /**
+ * 根据获取任务详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('wecom:communitytagGroup:query')")
+ @GetMapping(path = "/{id}")
+ public AjaxResult getTask(@PathVariable("id") Long id) {
+ WePresTagGroupTaskVo taskVo = taskService.getTaskById(id);
+ // 获取标签和使用人员
+ List tagList = taskService.getTagListByTaskId(id);
+ List emplVoList = taskService.getEmplListByTaskId(id);
+ WeGroupCode weGroupCode = groupCodeService.selectWeGroupCodeById(taskVo.getGroupCodeId());
+ taskVo.setGroupCodeInfo(weGroupCode);
+ taskVo.setTagList(tagList);
+ taskVo.setScopeList(emplVoList);
+ return AjaxResult.success(taskVo);
+ }
+
+ /**
+ * 更新任务信息
+ */
+ @PreAuthorize("@ss.hasPermi('wecom:communitytagGroup:edit')")
+ @PutMapping(path = "/{id}")
+ public AjaxResult updateTask(@PathVariable("id") Long id, @RequestBody @Validated WePresTagGroupTaskDto wePresTagGroupTaskDto) {
+ // 检测任务名是否可用
+ WePresTagGroupTaskVo original = taskService.getTaskById(id);
+ // 判断名称是否发生变化
+ boolean newName = wePresTagGroupTaskDto.getTaskName().equals(original.getTaskName());
+ // 新名称不能已存在
+ if (!taskService.checkTaskNameUnique(wePresTagGroupTaskDto.getTaskName()) && !newName) {
+ return AjaxResult.error("任务名已存在");
+ }
+ if (null == groupCodeService.selectWeGroupCodeById(wePresTagGroupTaskDto.getGroupCodeId())) {
+ return AjaxResult.error(HttpStatus.NOT_FOUND,"群活码不存在");
+ }
+ return toAjax(taskService.updateTask(id, wePresTagGroupTaskDto));
+ }
+
+ /**
+ * 批量删除老客标签建群任务
+ */
+ @PreAuthorize("@ss.hasPermi('wecom:communitytagGroup:remove')")
+ @DeleteMapping(path = "/{ids}")
+ public AjaxResult batchRemoveTask(@PathVariable("ids") Long[] ids) {
+ return toAjax(taskService.batchRemoveTaskByIds(ids));
+ }
+
+ /**
+ * 根据老客标签建群id及过滤条件,获取其统计信息
+ */
+ @PreAuthorize("@ss.hasPermi('wecom:communitytagGroup:query')")
+ @GetMapping(path = "/stat/{id}")
+ public TableDataInfo> getStatInfo(
+ @PathVariable("id") Long id,
+ @RequestParam(value = "customerName", required = false) String customerName,
+ @RequestParam(value = "isInGroup", required = false) Integer isInGroup,
+ @RequestParam(value = "isSent", required = false) Integer isSent
+ ) {
+ startPage();
+ List statVoList = taskService.getStatByTaskId(id, customerName, isInGroup, isSent);
+ return getDataTable(statVoList);
+ }
+
+}
diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCustomerPortraitController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCustomerPortraitController.java
index 6c422f5eb86f072e19098e28edbd903494ab78ed..db12525712205d4ef34246794f72fae43236c694 100644
--- a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCustomerPortraitController.java
+++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCustomerPortraitController.java
@@ -55,7 +55,7 @@ public class WeCustomerPortraitController extends BaseController {
* @return
*/
@GetMapping(value = "/findWeCustomerInfo")
- public AjaxResult findWeCustomerInfo(String externalUserid, String userid){
+ public AjaxResult findWeCustomerInfo(String externalUserid, String userid) throws Exception {
return AjaxResult.success(
iWeCustomerService.findCustomerByOperUseridAndCustomerId(externalUserid,userid)
diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeTaskFissionController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeTaskFissionController.java
index 896d1bbb417eb7a8466876d59b07f473b6d27dc1..139c2dc28281ab41055085cacb45eaf333357ddb 100644
--- a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeTaskFissionController.java
+++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeTaskFissionController.java
@@ -1,5 +1,7 @@
package com.linkwechat.web.controller.wecom;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.bean.copier.CopyOptions;
import com.alibaba.fastjson.JSONObject;
import com.linkwechat.common.annotation.Log;
import com.linkwechat.common.config.CosConfig;
@@ -17,6 +19,7 @@ import com.linkwechat.wecom.domain.query.WeTaskFissionStatisticQO;
import com.linkwechat.wecom.service.IWeTaskFissionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@@ -61,6 +64,12 @@ public class WeTaskFissionController extends BaseController {
@GetMapping("/stat")
public AjaxResult statistics(WeTaskFissionStatisticQO weTaskFissionStatisticQO) {
//TODO 待完成
+ //record表和complete_record表增加创建时间
+ //record表增加完成时间
+ //三个统计维度:
+ // 1. 日新增:每天裂变客户数
+ // 2. 日参与:每天扫码参加活动的客户数
+ // 3. 日完成:每天完成裂变任务的客户数
return null;
}
@@ -95,7 +104,37 @@ public class WeTaskFissionController extends BaseController {
@Log(title = "任务宝", businessType = BusinessType.INSERT)
@PostMapping("/add")
public AjaxResult add(@RequestBody WeTaskFission weTaskFission) {
- return toAjax(weTaskFissionService.insertWeTaskFission(weTaskFission));
+ Long fissionTaskId = weTaskFissionService.insertWeTaskFission(weTaskFission);
+ if (fissionTaskId != null) {
+ JSONObject json = new JSONObject();
+ json.put("id", fissionTaskId);
+ return AjaxResult.success(json.toJSONString());
+ }
+ return AjaxResult.error();
+ }
+
+ /**
+ * 编辑任务宝
+ */
+ @ApiOperation(value = "编辑任务宝", httpMethod = "POST")
+ @PreAuthorize("@ss.hasPermi('wecom:fission:edit')")
+ @Log(title = "任务宝", businessType = BusinessType.INSERT)
+ @PutMapping("/edit")
+ public AjaxResult edit(@RequestBody WeTaskFission weTaskFission) {
+ if (ObjectUtils.isEmpty(weTaskFission.getId())) {
+ return AjaxResult.error("数据id为空");
+ }
+ WeTaskFission fissionTask = weTaskFissionService.selectWeTaskFissionById(weTaskFission.getId());
+ if (ObjectUtils.isEmpty(fissionTask)) {
+ return AjaxResult.error("数据不存在");
+ }
+ CopyOptions options = CopyOptions.create();
+ options.setIgnoreNullValue(true);
+ BeanUtil.copyProperties(weTaskFission, fissionTask, options);
+ Long id = weTaskFissionService.updateWeTaskFission(fissionTask);
+ JSONObject json = new JSONObject();
+ json.put("id", id);
+ return AjaxResult.success(json.toJSONString());
}
/**
diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeTicketController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeTicketController.java
index 4ed4425069ee2d517b2e8e629504bfa5504ecc4f..2329864cdf5fa4fc594810d62401003adb6d7ac4 100644
--- a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeTicketController.java
+++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeTicketController.java
@@ -42,11 +42,11 @@ public class WeTicketController extends BaseController {
@Log(title = "获取企业的jsapi_ticket", businessType = BusinessType.OTHER)
@GetMapping("/getAppTicket")
public AjaxResult getAppTicket(String url,String agentId) {
- String ticketVaule = redisCache.getCacheObject(WeConstans.AppTicketKey);
+ String ticketVaule = redisCache.getCacheObject(WeConstans.AppTicketKey+"::"+agentId);
if (StringUtils.isEmpty(ticketVaule)) {
WeH5TicketDto ticketRes = weTicketClient.getJsapiTicket(agentId);
if (ticketRes != null && StringUtils.isNotEmpty(ticketRes.getTicket())) {
- redisCache.setCacheObject(WeConstans.AppTicketKey, ticketRes.getTicket(), ticketRes.getExpiresIn(), TimeUnit.SECONDS);
+ redisCache.setCacheObject(WeConstans.AppTicketKey+"::"+agentId, ticketRes.getTicket(), ticketRes.getExpiresIn(), TimeUnit.SECONDS);
}
ticketVaule = ticketRes.getTicket();
}
@@ -62,11 +62,11 @@ public class WeTicketController extends BaseController {
@Log(title = "获取应用的jsapi_ticket", businessType = BusinessType.OTHER)
@GetMapping("/getAgentTicket")
public AjaxResult getAgentTicket(String url,String agentId) {
- String ticketVaule = redisCache.getCacheObject(WeConstans.AgentTicketKey);
+ String ticketVaule = redisCache.getCacheObject(WeConstans.AgentTicketKey+"::"+agentId);
if (StringUtils.isEmpty(ticketVaule)) {
WeH5TicketDto ticketRes = weTicketClient.getTicket(agentId);
if (ticketRes != null && StringUtils.isNotEmpty(ticketRes.getTicket())) {
- redisCache.setCacheObject(WeConstans.AgentTicketKey, ticketRes.getTicket(), ticketRes.getExpiresIn(), TimeUnit.SECONDS);
+ redisCache.setCacheObject(WeConstans.AgentTicketKey+"::"+agentId, ticketRes.getTicket(), ticketRes.getExpiresIn(), TimeUnit.SECONDS);
}
ticketVaule = ticketRes.getTicket();
}
diff --git a/linkwe-admin/src/main/resources/application-druid.yml b/linkwe-admin/src/main/resources/application-druid.yml
index 3d173be1e163448670129613c21752f9628bee50..72489d2ce91c71e5ea7cdd04bee9ac85fa94c2a2 100644
--- a/linkwe-admin/src/main/resources/application-druid.yml
+++ b/linkwe-admin/src/main/resources/application-druid.yml
@@ -1,57 +1,57 @@
# 数据源配置
spring:
- datasource:
- type: com.alibaba.druid.pool.DruidDataSource
- driverClassName: com.mysql.cj.jdbc.Driver
- druid:
- # 主库数据源
- master:
- url: jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/link-wechat-prod?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
- username: ${DB_USER:root}
- password: ${DB_PASS:root}
- # 从库数据源
- slave:
- # 从数据源开关/默认关闭
- enabled: false
- url:
- username:
- password:
- # 初始连接数
- initialSize: 5
- # 最小连接池数量
- minIdle: 10
- # 最大连接池数量
- maxActive: 20
- # 配置获取连接等待超时的时间
- maxWait: 60000
- # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
- timeBetweenEvictionRunsMillis: 60000
- # 配置一个连接在池中最小生存的时间,单位是毫秒
- minEvictableIdleTimeMillis: 300000
- # 配置一个连接在池中最大生存的时间,单位是毫秒
- maxEvictableIdleTimeMillis: 900000
- # 配置检测连接是否有效
- validationQuery: SELECT 1 FROM DUAL
- testWhileIdle: true
- testOnBorrow: false
- testOnReturn: false
- webStatFilter:
- enabled: true
- statViewServlet:
- enabled: true
- # 设置白名单,不填则允许所有访问
- allow:
- url-pattern: /druid/*
- # 控制台管理用户名和密码
- login-username:
- login-password:
- filter:
- stat:
- enabled: true
- # 慢SQL记录
- log-slow-sql: true
- slow-sql-millis: 1000
- merge-sql: true
- wall:
- config:
- multi-statement-allow: true
+ datasource:
+ type: com.alibaba.druid.pool.DruidDataSource
+ driverClassName: com.mysql.cj.jdbc.Driver
+ druid:
+ # 主库数据源
+ master:
+ url: jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:link-wechat-prod}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+ username: ${DB_USER:root}
+ password: ${DB_PASS:root}
+ # 从库数据源
+ slave:
+ # 从数据源开关/默认关闭
+ enabled: false
+ url:
+ username:
+ password:
+ # 初始连接数
+ initialSize: 5
+ # 最小连接池数量
+ minIdle: 10
+ # 最大连接池数量
+ maxActive: 20
+ # 配置获取连接等待超时的时间
+ maxWait: 60000
+ # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+ timeBetweenEvictionRunsMillis: 60000
+ # 配置一个连接在池中最小生存的时间,单位是毫秒
+ minEvictableIdleTimeMillis: 300000
+ # 配置一个连接在池中最大生存的时间,单位是毫秒
+ maxEvictableIdleTimeMillis: 900000
+ # 配置检测连接是否有效
+ validationQuery: SELECT 1 FROM DUAL
+ testWhileIdle: true
+ testOnBorrow: false
+ testOnReturn: false
+ webStatFilter:
+ enabled: true
+ statViewServlet:
+ enabled: true
+ # 设置白名单,不填则允许所有访问
+ allow:
+ url-pattern: /druid/*
+ # 控制台管理用户名和密码
+ login-username:
+ login-password:
+ filter:
+ stat:
+ enabled: true
+ # 慢SQL记录
+ log-slow-sql: true
+ slow-sql-millis: 1000
+ merge-sql: true
+ wall:
+ config:
+ multi-statement-allow: true
diff --git a/linkwe-admin/src/main/resources/application.yml b/linkwe-admin/src/main/resources/application.yml
index fc0eabdb548abed90082023d4b086b50c8c9a507..f69eb0b637f5dd770b748559efebbae864f36a0e 100644
--- a/linkwe-admin/src/main/resources/application.yml
+++ b/linkwe-admin/src/main/resources/application.yml
@@ -20,7 +20,7 @@ ruoyi:
# 开发环境配置
server:
# 服务器的HTTP端口,默认为8090
- port: 8090
+ port: ${APP_PORT:8090}
servlet:
# 应用的访问路径
context-path: /
@@ -55,11 +55,11 @@ spring:
active: druid
# 文件上传
servlet:
- multipart:
- # 单个文件大小
- max-file-size: 10MB
- # 设置总上传的文件大小
- max-request-size: 20MB
+ multipart:
+ # 单个文件大小
+ max-file-size: 10MB
+ # 设置总上传的文件大小
+ max-request-size: 20MB
task:
execution:
pool:
@@ -95,24 +95,24 @@ spring:
# token配置
token:
- # 令牌自定义标识
- header: Authorization
- # 令牌密钥
- secret: abcdefghijklmnopqrstuvwxyz
- # 令牌有效期(默认30分钟)
- expireTime: 30
+ # 令牌自定义标识
+ header: Authorization
+ # 令牌密钥
+ secret: abcdefghijklmnopqrstuvwxyz
+ # 令牌有效期(默认30分钟)
+ expireTime: 30
mybatis-plus:
- mapper-locations: classpath*:mapper/**/*Mapper.xml
- type-aliases-package: com.linkwechat.**.domain
- type-handlers-package: com.linkwechat.framework.handler.GenericTypeHandler,com.linkwechat.framework.handler.StringArrayJoinTypeHandler
- configuration:
- log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
- global-config:
- db-config:
- logic-delete-field: delFlag
- logic-delete-value: 1
- logic-not-delete-value: 0
+ mapper-locations: classpath*:mapper/**/*Mapper.xml
+ type-aliases-package: com.linkwechat.**.domain
+ type-handlers-package: com.linkwechat.framework.handler.GenericTypeHandler,com.linkwechat.framework.handler.StringArrayJoinTypeHandler
+ configuration:
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+ global-config:
+ db-config:
+ logic-delete-field: delFlag
+ logic-delete-value: 1
+ logic-not-delete-value: 0
## MyBatis配置
#mybatis:
@@ -173,49 +173,49 @@ wecome:
serverUrl: https://qyapi.weixin.qq.com/
weComePrefix: cgi-bin
noAccessTokenUrl:
- - /gettoken
- - /service/get_provider_token
- - /wecom/chat/side/list
- - /wecom/chat/item/list
- - /wecom/chat/collection/addCollection
- - /wecom/chat/collection/cancleCollection
- - /wecom/chat/collection/list
+ - /gettoken
+ - /service/get_provider_token
+ - /wecom/chat/side/list
+ - /wecom/chat/item/list
+ - /wecom/chat/collection/addCollection
+ - /wecom/chat/collection/cancleCollection
+ - /wecom/chat/collection/list
needContactTokenUrl:
- - /externalcontact/get_follow_user_list
- - /externalcontact/add_contact_way
- - /externalcontact/update_contact_way
- - /externalcontact/add_corp_tag
- - /externalcontact/get_corp_tag_list
- - /externalcontact/del_corp_tag
- - /externalcontact/edit_corp_tag
- - /externalcontact/list
- - /externalcontact/get
- - /externalcontact/batch/get_by_user
- - /externalcontact/groupchat/list
- - /externalcontact/groupchat/get
- - /externalcontact/mark_tag
- - /externalcontact/transfer
- - /externalcontact/groupchat/transfer
- - /externalcontact/get_unassigned_list
- - /externalcontact/send_welcome_msg
- - /externalcontact/unionid_to_external_userid
- - /externalcontact/add_msg_template
- - /externalcontact/get_group_msg_result
- - /externalcontact/get_user_behavior_data
- - /externalcontact/groupchat/statistic
- fileUplodUrl: /media/upload,/media/uploadimg
+ - /externalcontact/get_follow_user_list
+ - /externalcontact/add_contact_way
+ - /externalcontact/update_contact_way
+ - /externalcontact/add_corp_tag
+ - /externalcontact/get_corp_tag_list
+ - /externalcontact/del_corp_tag
+ - /externalcontact/edit_corp_tag
+ - /externalcontact/list
+ - /externalcontact/get
+ - /externalcontact/batch/get_by_user
+ - /externalcontact/groupchat/list
+ - /externalcontact/groupchat/get
+ - /externalcontact/mark_tag
+ - /externalcontact/transfer
+ - /externalcontact/groupchat/transfer
+ - /externalcontact/get_unassigned_list
+ - /externalcontact/send_welcome_msg
+ - /externalcontact/unionid_to_external_userid
+ - /externalcontact/add_msg_template
+ - /externalcontact/get_group_msg_result
+ - /externalcontact/get_user_behavior_data
+ - /externalcontact/groupchat/statistic
+ fileUplodUrl: /media/upload,/media/uploadimg
needProviderTokenUrl:
- - /service/get_login_info
+ - /service/get_login_info
needChatTokenUrl:
- - /msgaudit/get_permit_user_list
- - /msgaudit/check_single_agree
- - /msgaudit/check_room_agree
- - /msgaudit/groupchat/get
+ - /msgaudit/get_permit_user_list
+ - /msgaudit/check_single_agree
+ - /msgaudit/check_room_agree
+ - /msgaudit/groupchat/get
thirdAppUrl:
- - /user/getuserinfo
- - /get_jsapi_ticket
- - /ticket/get
- - /message/send
+ - /user/getuserinfo
+ - /get_jsapi_ticket
+ - /ticket/get
+ - /message/send
#企微回调通知配置
callBack:
appIdOrCorpId: ww24262ce93851488f
diff --git a/linkwe-admin/src/main/resources/bootstrap.properties b/linkwe-admin/src/main/resources/bootstrap.properties
index 1c2bb0da552f685ac64d5be87677b573b0a0844e..39a9563d13612cc35b3b6c041fe07559f9d3c603 100644
--- a/linkwe-admin/src/main/resources/bootstrap.properties
+++ b/linkwe-admin/src/main/resources/bootstrap.properties
@@ -1,4 +1,4 @@
-spring.cloud.nacos.config.server-addr=${NACOS_SERVER:119.45.28.29:10848}
-spring.cloud.nacos.config.namespace=627a666a-76b2-42ad-a1b0-70a12d2c73fd
-spring.application.name=link-wechat
-spring.cloud.nacos.config.file-extension=yaml
\ No newline at end of file
+#spring.cloud.nacos.config.server-addr=
+#spring.cloud.nacos.config.namespace=
+#spring.application.name=
+#spring.cloud.nacos.config.file-extension=
\ No newline at end of file
diff --git a/linkwe-common/src/main/java/com/linkwechat/common/utils/DateUtils.java b/linkwe-common/src/main/java/com/linkwechat/common/utils/DateUtils.java
index 9392254719b9b5e05f6202de4ef3dec770dd55c4..0a27a7b9f9ca71cdaf4d2c6ef98c36a6af81841b 100644
--- a/linkwe-common/src/main/java/com/linkwechat/common/utils/DateUtils.java
+++ b/linkwe-common/src/main/java/com/linkwechat/common/utils/DateUtils.java
@@ -195,4 +195,33 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
long millionSeconds = sdf.parse(date).getTime();//毫秒
return millionSeconds;
}
+
+
+
+ public static int getAge(Date birthDay) throws Exception {
+ Calendar cal = Calendar.getInstance();
+ if (cal.before(birthDay)) { //出生日期晚于当前时间,无法计算
+ throw new IllegalArgumentException(
+ "The birthDay is before Now.It's unbelievable!");
+ }
+ int yearNow = cal.get(Calendar.YEAR); //当前年份
+ int monthNow = cal.get(Calendar.MONTH); //当前月份
+ int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH); //当前日期
+ cal.setTime(birthDay);
+ int yearBirth = cal.get(Calendar.YEAR);
+ int monthBirth = cal.get(Calendar.MONTH);
+ int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);
+ int age = yearNow - yearBirth; //计算整岁数
+ if (monthNow <= monthBirth) {
+ if (monthNow == monthBirth) {
+ if (dayOfMonthNow < dayOfMonthBirth) age--;//当前日期在生日之前,年龄减一
+ }else{
+ age--;//当前月份在生日之前,年龄减一
+ } }
+ return age;
+
+ }
+
+
+
}
diff --git a/linkwe-ui/.env.development b/linkwe-ui/.env.development
index ae6e34c6c0fc98a11f9b7994c66f603da0022c1e..c8989bbedf1f89afe1e5e04e3f6ddad3e6907677 100644
--- a/linkwe-ui/.env.development
+++ b/linkwe-ui/.env.development
@@ -1,8 +1,8 @@
# 开发环境配置
ENV = 'development'
-# 仟微管理系统/开发环境
-VUE_APP_BASE_API = 'http://146.56.222.200'
+# 塬微管理系统/开发环境
+VUE_APP_BASE_API = 'http://192.168.0.52:8090'
# VUE_APP_BASE_API = 'http://n3rpzt.natappfree.cc'
# 开发环境IP
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAppClient.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAppClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..3405176232257c4cd0f1087b41d8399d7663545b
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAppClient.java
@@ -0,0 +1,37 @@
+package com.linkwechat.wecom.client;
+
+import com.dtflys.forest.annotation.DataObject;
+import com.dtflys.forest.annotation.Query;
+import com.dtflys.forest.annotation.Request;
+import com.linkwechat.wecom.domain.dto.WeAppDetailDto;
+import com.linkwechat.wecom.domain.dto.WeAppDto;
+import com.linkwechat.wecom.domain.dto.WeResultDto;
+
+/**
+ * 应用管理相关接口
+ */
+public interface WeAppClient {
+
+ /**
+ * 获取企业应用列表
+ * @return
+ */
+ @Request(url = "/agent/list")
+ WeAppDto findAgentList();
+
+ /**
+ * 根据应用id获取应用详情
+ * @param agentid
+ * @return
+ */
+ @Request(url = "/agent/get")
+ WeAppDetailDto findAgentById(@Query("agentid") Integer agentid);
+
+ /**
+ * 设置应用
+ * @param weAppDetailDto
+ * @return
+ */
+ @Request(url = "/agent/set")
+ WeResultDto updateAgentById(@DataObject WeAppDetailDto weAppDetailDto);
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCommunityNewGroup.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCommunityNewGroup.java
index c19ef8504473e213bc392fd7610618a31ad56646..721adf465a9ca32ee91f41cb6b6ad9b278659661 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCommunityNewGroup.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCommunityNewGroup.java
@@ -1,5 +1,7 @@
package com.linkwechat.wecom.domain;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
import com.linkwechat.common.core.domain.BaseEntity;
import com.linkwechat.common.utils.SnowFlakeUtil;
import io.swagger.annotations.ApiModel;
@@ -14,11 +16,13 @@ import lombok.Data;
*/
@ApiModel
@Data
+@TableName("we_community_new_group")
public class WeCommunityNewGroup extends BaseEntity {
/**
*主键ID
*/
+ @TableId
private Long newGroupId= SnowFlakeUtil.nextId();
/**
@@ -39,6 +43,12 @@ public class WeCommunityNewGroup extends BaseEntity {
@ApiModelProperty("欢迎语")
private String welcomeMsg;
+ /**
+ * 新增联系方式的配置id
+ */
+ @ApiModelProperty("新增联系方式的配置id")
+ private String configId;
+
/**
* 二维码链接
*/
@@ -75,4 +85,10 @@ public class WeCommunityNewGroup extends BaseEntity {
@ApiModelProperty("0 未删除 1 已删除")
private int delFlag;
+
+ /**
+ * 员工活码
+ */
+ private String userQrCode;
+
}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerPortrait.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerPortrait.java
index d87e26eccce4084b4264c481f0b195c89cac562c..6ef123107eb2a67556bb9f761f280206992fe756 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerPortrait.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerPortrait.java
@@ -38,6 +38,8 @@ public class WeCustomerPortrait {
private String remarkCorpName;
//描述
private String description;
+ //年纪
+ private int age;
//客户标签
private List weTagGroupList;
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSop.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSop.java
new file mode 100644
index 0000000000000000000000000000000000000000..4c02b9498d0e2a97233c0432a69223fc35be6c2c
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSop.java
@@ -0,0 +1,51 @@
+package com.linkwechat.wecom.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.linkwechat.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 群SOP规则
+ */
+@Data
+@TableName("we_group_sop")
+@EqualsAndHashCode(callSuper = true)
+public class WeGroupSop extends BaseEntity {
+
+ /**
+ * 主键
+ */
+ @TableId
+ private Long ruleId;
+
+ /**
+ * 规则名
+ */
+ private String ruleName;
+
+ /**
+ * 内容标题
+ */
+ private String title;
+
+ /**
+ * 消息内容
+ */
+ private String content;
+
+ /**
+ * 开始执行时间
+ */
+ @TableField(value = "start_time")
+ private String startExeTime;
+
+ /**
+ * 结束执行时间
+ */
+ @TableField(value = "end_time")
+ private String stopExeTime;
+
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSopChat.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSopChat.java
new file mode 100644
index 0000000000000000000000000000000000000000..da7d1fbf8f9df09c33ed356afbf9ad1e7c470c4e
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSopChat.java
@@ -0,0 +1,25 @@
+package com.linkwechat.wecom.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 群SOP和群关联对象
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName("we_group_sop_chat")
+public class WeGroupSopChat {
+ /**
+ * 群sop id
+ */
+ private Long ruleId;
+
+ /**
+ * 实际群聊id
+ */
+ private String chatId;
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSopMaterial.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSopMaterial.java
new file mode 100644
index 0000000000000000000000000000000000000000..5e8cfc72f60b8f935404fe2e8eb9a3eff7dc4230
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSopMaterial.java
@@ -0,0 +1,26 @@
+package com.linkwechat.wecom.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 群SOP图片素材
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName("we_group_sop_material")
+public class WeGroupSopMaterial {
+
+ /**
+ * sop规则id
+ */
+ private Long ruleId;
+
+ /**
+ * 素材id
+ */
+ private Long materialId;
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSopPic.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSopPic.java
new file mode 100644
index 0000000000000000000000000000000000000000..d8e436e50b7bacac63362953b51611a24c1fbc80
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSopPic.java
@@ -0,0 +1,22 @@
+package com.linkwechat.wecom.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName("we_group_sop_pic")
+public class WeGroupSopPic {
+ /**
+ * sop id
+ */
+ private Long ruleId;
+
+ /**
+ * 图片url
+ */
+ private String picUrl;
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeKeywordGroupTask.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeKeywordGroupTask.java
new file mode 100644
index 0000000000000000000000000000000000000000..4107b8de4217aed7366ffc5937df0c2a692b3847
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeKeywordGroupTask.java
@@ -0,0 +1,38 @@
+package com.linkwechat.wecom.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.linkwechat.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 社区运营 - 关键词拉群任务实体
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("we_keyword_group")
+public class WeKeywordGroupTask extends BaseEntity {
+
+ /**
+ * 主键id
+ */
+ @TableId
+ private Long taskId;
+
+ /**
+ * 任务名称
+ */
+ private String taskName;
+
+ /**
+ * 群活码id
+ */
+ private Long groupCodeId;
+
+
+ /**
+ * 加群引导语
+ */
+ private String welcomeMsg;
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeKeywordGroupTaskKeyword.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeKeywordGroupTaskKeyword.java
new file mode 100644
index 0000000000000000000000000000000000000000..5fd6c0c71ca324b826333aebd11e10af3e68da25
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeKeywordGroupTaskKeyword.java
@@ -0,0 +1,31 @@
+package com.linkwechat.wecom.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.linkwechat.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * 社区运营 - 关键词拉群任务关键词实体
+ */
+@Data
+@NoArgsConstructor
+@TableName("we_keyword_group_kw")
+public class WeKeywordGroupTaskKeyword {
+
+ /**
+ * 关键词拉群任务id
+ */
+ private Long taskId;
+
+ /**
+ * 关键词
+ */
+ private String keyword;
+
+ public WeKeywordGroupTaskKeyword(Long taskId, String keyword) {
+ this.taskId =taskId;
+ this.keyword = keyword;
+ }
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTask.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTask.java
new file mode 100644
index 0000000000000000000000000000000000000000..decaa6553d76d76aa091c2b4d5e30e7e4da567e5
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTask.java
@@ -0,0 +1,61 @@
+package com.linkwechat.wecom.domain;
+
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.linkwechat.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("we_pres_tag_group")
+public class WePresTagGroupTask extends BaseEntity {
+
+ /**
+ *主键ID
+ */
+ @TableId
+ private Long taskId;
+
+ /**
+ * 任务名称
+ */
+ private String taskName;
+
+ /**
+ * 加群引导语
+ */
+ private String welcomeMsg;
+
+ /**
+ * 发送方式 0: 企业群发 1:个人群发
+ */
+ private Integer sendType;
+
+ /**
+ * 群活码id
+ */
+ private Long groupCodeId;
+
+ /**
+ * 发送范围 0: 全部客户 1:部分客户
+ */
+ private Integer sendScope;
+
+ /**
+ * 发送性别 0: 全部 1: 男 2: 女 3:未知
+ */
+ private Integer sendGender;
+
+ /**
+ * 目标客户被添加起始时间
+ */
+ private String cusBeginTime;
+
+ /**
+ * 目标客户被添加结束时间
+ */
+ private String cusEndTime;
+
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTaskScope.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTaskScope.java
new file mode 100644
index 0000000000000000000000000000000000000000..bc5d98fa91d0979b057d982a0992da190791668f
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTaskScope.java
@@ -0,0 +1,27 @@
+package com.linkwechat.wecom.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 老客户标签建群任务使用人对象
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName("we_pres_tag_group_scope")
+public class WePresTagGroupTaskScope {
+
+ /**
+ * 老客户标签建群任务id
+ */
+ private Long taskId;
+
+ /**
+ * 任务目标员工id
+ */
+ private String weUserId;
+
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTaskStat.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTaskStat.java
new file mode 100644
index 0000000000000000000000000000000000000000..c0598859670e2efc66f45c74c05eda188454c359
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTaskStat.java
@@ -0,0 +1,36 @@
+package com.linkwechat.wecom.domain;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.linkwechat.common.core.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+/**
+ * 老客户标签建群客户统计
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("we_pres_tag_group_stat")
+public class WePresTagGroupTaskStat extends BaseEntity {
+
+ /**
+ * 老客户标签建群任务id
+ */
+ private Long taskId;
+
+ /**
+ * 客户id
+ */
+ private String customerName;
+
+ /**
+ * 是否已送达
+ */
+ private boolean isSent;
+
+ /**
+ * 是否已经在群
+ */
+ private boolean isInGroup;
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTaskTag.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTaskTag.java
new file mode 100644
index 0000000000000000000000000000000000000000..f03926904e266e9632d61f62660f5adf9832d264
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTaskTag.java
@@ -0,0 +1,27 @@
+package com.linkwechat.wecom.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 老客标签建群任务标签关联对象
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName("we_pres_tag_group_tag")
+public class WePresTagGroupTaskTag {
+
+ /**
+ * 老客建群任务id
+ */
+ private Long taskId;
+
+ /**
+ * 标签id
+ */
+ private String tagId;
+
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDetailDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDetailDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..74cba1c617e1ec0b93df70fc002716bfa45d5c55
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDetailDto.java
@@ -0,0 +1,31 @@
+package com.linkwechat.wecom.domain.dto;
+
+
+import lombok.Data;
+
+/**
+ * 企业应用详情接口
+ */
+@Data
+public class WeAppDetailDto extends WeResultDto{
+ //企业应用id
+ private Long agentid;
+ //企业应用名称
+ private String name;
+ //企业应用方形头像
+ private String square_logo_url;
+ //企业应用详情
+ private String description;
+ //企业应用是否被停用
+ private Boolean close;
+ //企业应用可信域名
+ private String redirect_domain;
+ //企业应用是否打开地理位置上报 0:不上报;1:进入会话上报;
+ private Integer report_location_flag;
+ //是否上报用户进入应用事件。0:不接收;1:接收
+ private Integer isreportenter;
+ //应用主页url
+ private String home_url;
+ //企业应用头像的mediaid,通过素材管理接口上传图片获得mediaid,上传后会自动裁剪成方形和圆形两个头像
+ private String logo_mediaid;
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..997539299704c531c67dd37551a1fe7ebfb2dd1e
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDto.java
@@ -0,0 +1,25 @@
+package com.linkwechat.wecom.domain.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class WeAppDto extends WeResultDto{
+
+
+
+ private List agentlist;
+
+
+ @Data
+ public class Agent{
+ //企业应用id
+ private Long agentid;
+ //企业应用名称
+ private String name;
+ //企业应用方形头像url
+ private String square_logo_url;
+ }
+
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeCommunityNewGroupDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeCommunityNewGroupDto.java
index 235e02e9d02589befe1c68bb5a7b17679a7cbefb..5d022b7339ba948c42624762da755afa01778ce1 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeCommunityNewGroupDto.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeCommunityNewGroupDto.java
@@ -4,10 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.linkwechat.wecom.domain.WeEmpleCodeTag;
import com.linkwechat.wecom.domain.WeEmpleCodeUseScop;
import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
-
-import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
@@ -17,57 +14,59 @@ import java.util.List;
* @author kewen
* @date 2021-02-19
*/
-@ApiModel
@Data
public class WeCommunityNewGroupDto {
+
+ /**
+ * 主键
+ */
+ private String newGroupId;
+
/**
* 活动场景
*/
- @ApiModelProperty("活动场景")
private String activityScene;
/**
* 欢迎语
*/
- @ApiModelProperty("欢迎语")
private String welcomeMsg;
@NotNull(message = "员工信息不能为空")
/** 使用员工 */
@TableField(exist = false)
- @ApiModelProperty("使用员工")
private List weEmpleCodeUseScops;
/**
* 扫码标签
*/
@TableField(exist = false)
- @ApiModelProperty("扫码标签")
private List weEmpleCodeTags;
/**
* 群活码ID
*/
- @ApiModelProperty("群活码ID")
private Long groupCodeId;
/**
* 客户添加时无需经过确认自动成为好友:1:是;0:否
*/
- @ApiModelProperty("客户添加时无需经过确认自动成为好友:1:是;0:否")
private Boolean isJoinConfirmFriends;
+ /**
+ * 新增联系方式的配置id
+ */
+ private String configId;
+
/**
* 二维码链接
*/
- @ApiModelProperty("二维码链接")
private String qrCode;
/**
* 素材的id
*/
- @ApiModelProperty("素材的id")
private Long mediaId;
}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeGroupSopDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeGroupSopDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..ac31a2026aed61af840bbcacb49db4c597c0a946
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeGroupSopDto.java
@@ -0,0 +1,58 @@
+package com.linkwechat.wecom.domain.dto;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * 社区运营 - 群SOP DTO
+ */
+@Data
+public class WeGroupSopDto {
+ /**
+ * 规则名
+ */
+ @NotNull(message = "规则名不可为空")
+ private String ruleName;
+
+ /**
+ * 群聊id列表
+ */
+ @NotNull(message = "未选择群聊")
+ private List chatIdList;
+
+ /**
+ * 内容标题
+ */
+ @NotNull(message = "标题不可为空")
+ private String title;
+
+ /**
+ * 消息内容
+ */
+ @NotNull(message = "内容不可为空")
+ private String content;
+
+ /**
+ * 素材列表
+ */
+ private List materialIdList;
+
+ /**
+ * 上传的图片的URL列表
+ */
+ private List picList;
+
+ /**
+ * 开始执行时间
+ */
+ @NotNull(message = "开始执行时间为空")
+ private String startExeTime;
+
+ /**
+ * 结束执行时间
+ */
+ @NotNull(message = "结束时间为空")
+ private String stopExeTime;
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeKeywordGroupTaskDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeKeywordGroupTaskDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..88ba38e1b9857b925bc6f20b442f428d74ea7b72
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeKeywordGroupTaskDto.java
@@ -0,0 +1,36 @@
+package com.linkwechat.wecom.domain.dto;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 社区运营 - 关键词拉群Dto
+ */
+@Data
+public class WeKeywordGroupTaskDto {
+
+ /**
+ * 任务名
+ */
+ @NotNull(message = "任务名不能为空")
+ private String taskName;
+
+ /**
+ * 群活码id
+ */
+ @NotNull(message = "群活码不能为空")
+ private Long groupCodeId;
+
+ /**
+ * 加群引导语
+ */
+ @NotNull(message = "引导语不可为空")
+ private String welcomeMsg;
+
+ /**
+ * 关键词
+ */
+ @NotNull(message = "关键词不可为空")
+ private String keywords;
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WePresTagGroupTaskDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WePresTagGroupTaskDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..5cac503247a9c9f8f5c8a59406eb8359cdc70a8e
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WePresTagGroupTaskDto.java
@@ -0,0 +1,70 @@
+package com.linkwechat.wecom.domain.dto;
+
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * 社群运营 老客户标签建群
+ */
+
+@Data
+public class WePresTagGroupTaskDto {
+
+ /**
+ * 任务名称
+ */
+ @NotNull(message = "任务名称不能为空")
+ private String taskName;
+
+ /**
+ * 发送方式 0: 企业群发 1:个人群发
+ */
+ @NotNull(message = "发送方式不能为空")
+ private Integer sendType;
+
+ /**
+ * 加群引导语
+ */
+ @NotNull(message = "引导语不能为空")
+ private String welcomeMsg;
+
+ /**
+ * 群活码id
+ */
+ @NotNull(message = "活码不能为空")
+ private Long groupCodeId;
+
+ /**
+ * 客户标签
+ */
+ private List tagList;
+
+ /**
+ * 选择员工
+ */
+ private List scopeList;
+
+ /**
+ * 发送范围 0: 全部客户 1:部分客户
+ */
+ @NotNull(message = "发送范围不能为空")
+ private Integer sendScope;
+
+ /**
+ * 发送性别 0: 全部 1: 男 2: 女 3:未知
+ */
+ private Integer sendGender;
+
+ /**
+ * 目标客户被添加起始时间
+ */
+ private String cusBeginTime;
+
+ /**
+ * 目标客户被添加结束时间
+ */
+ private String cusEndTime;
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeCommunityNewGroupVo.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeCommunityNewGroupVo.java
index fd5a23d19b34c37521a7a0bcd262d5cb1fe190cc..a4d3647241ad45eb2b27858114e68e34d012fd86 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeCommunityNewGroupVo.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeCommunityNewGroupVo.java
@@ -22,7 +22,7 @@ import java.util.List;
public class WeCommunityNewGroupVo {
/**
- *主键ID
+ * 主键ID
*/
@ApiModelProperty("主键ID")
private Long newGroupId;
@@ -45,6 +45,12 @@ public class WeCommunityNewGroupVo {
@ApiModelProperty("欢迎语")
private String welcomeMsg;
+ /**
+ * 群活码id
+ */
+ @ApiModelProperty("群活码id")
+ private Long groupCodeId;
+
/**
* 新增联系方式的配置id
*/
@@ -101,13 +107,22 @@ public class WeCommunityNewGroupVo {
@ApiModelProperty("实际群聊")
private List weGroupUserScops;
- /** 创建者 */
- @ApiModelProperty(value = "创建者",hidden = true)
+ /**
+ * 创建者
+ */
+ @ApiModelProperty(value = "创建者", hidden = true)
private String createBy;
- /** 创建时间 */
+ /**
+ * 创建时间
+ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- @ApiModelProperty(value = "创建时间",hidden = true)
- private Date createTime=new Date();
+ @ApiModelProperty(value = "创建时间", hidden = true)
+ private Date createTime = new Date();
+
+ /**
+ * 个人码
+ */
+ private String userQrCode;
}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeEmplVo.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeEmplVo.java
new file mode 100644
index 0000000000000000000000000000000000000000..732036647078c4d11a70b2e6a5f83210b0c4ed37
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeEmplVo.java
@@ -0,0 +1,20 @@
+package com.linkwechat.wecom.domain.vo;
+
+import lombok.Data;
+
+/**
+ * 员工信息
+ */
+@Data
+public class WeEmplVo {
+
+ /**
+ * 员工id
+ */
+ private String userId;
+
+ /**
+ * 员工名称
+ */
+ private String name;
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeGroupSopVo.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeGroupSopVo.java
new file mode 100644
index 0000000000000000000000000000000000000000..e86aa3448d411d79ee942c7885bb6fd65d6df3fa
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeGroupSopVo.java
@@ -0,0 +1,84 @@
+package com.linkwechat.wecom.domain.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.linkwechat.wecom.domain.WeGroup;
+import com.linkwechat.wecom.domain.WeMaterial;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class WeGroupSopVo {
+
+ /**
+ * id
+ */
+ private Long ruleId;
+
+ /**
+ * 规则名
+ */
+ private String ruleName;
+
+ /**
+ * 内容标题
+ */
+ private String title;
+
+ /**
+ * 消息内容
+ */
+ private String content;
+
+ /**
+ * 素材列表
+ */
+ @TableField(exist = false)
+ private List materialList;
+
+ /**
+ * 自上传图片列表
+ */
+ @TableField(exist = false)
+ private List picList;
+
+ /**
+ * 群聊
+ */
+ @TableField(exist = false)
+ private List groupList;
+
+ /**
+ * 开始执行时间
+ */
+ private String startExeTime;
+
+ /**
+ * 结束执行时间
+ */
+ private String stopExeTime;
+
+ /**
+ * 创建者
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private String updateTime;
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeKeywordGroupTaskVo.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeKeywordGroupTaskVo.java
new file mode 100644
index 0000000000000000000000000000000000000000..6287ca1c124dd92d702b7d2dc62f1103f13f5459
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeKeywordGroupTaskVo.java
@@ -0,0 +1,81 @@
+package com.linkwechat.wecom.domain.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.linkwechat.wecom.domain.WeGroupCode;
+import com.linkwechat.wecom.domain.WeKeywordGroupTaskKeyword;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 社区运营 - 关键词拉群任务VO
+ */
+@Data
+public class WeKeywordGroupTaskVo {
+
+ /**
+ * id
+ */
+ private Long taskId;
+
+ /**
+ * 任务名
+ */
+ private String taskName;
+
+ /**
+ * 群活码id
+ */
+ @JsonIgnore
+ private Long groupCodeId;
+
+ /**
+ * 群活码信息
+ */
+ @TableField(exist = false)
+ private WeGroupCode groupCodeInfo;
+
+ /**
+ * 关键词
+ */
+ @TableField(exist = false)
+ private List keywordList;
+
+ /**
+ * 实际群聊
+ */
+ @TableField(exist = false)
+ private List groupNameList;
+
+ /**
+ * 加群引导语
+ */
+ private String welcomeMsg;
+
+ /**
+ * 创建者
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private String updateTime;
+
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WePresTagGroupTaskStatVo.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WePresTagGroupTaskStatVo.java
new file mode 100644
index 0000000000000000000000000000000000000000..9febc01ca4c111bae3e27c664f82916e5ff12a9b
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WePresTagGroupTaskStatVo.java
@@ -0,0 +1,26 @@
+package com.linkwechat.wecom.domain.vo;
+
+import lombok.Data;
+
+
+/**
+ * 老客户标签建群任务客户统计Vo
+ */
+@Data
+public class WePresTagGroupTaskStatVo {
+
+ /**
+ * 客户id
+ */
+ private String customerName;
+
+ /**
+ * 是否已发送
+ */
+ private boolean isSent = false;
+
+ /**
+ * 是否已在群
+ */
+ private boolean isInGroup = false;
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WePresTagGroupTaskVo.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WePresTagGroupTaskVo.java
new file mode 100644
index 0000000000000000000000000000000000000000..1c7f2fb958f539b74f34c48474f6adc033368a83
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WePresTagGroupTaskVo.java
@@ -0,0 +1,110 @@
+package com.linkwechat.wecom.domain.vo;
+
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.linkwechat.wecom.domain.WeGroupCode;
+import com.linkwechat.wecom.domain.WeTag;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 老客标签建群任务Vo
+ */
+@Data
+public class WePresTagGroupTaskVo {
+
+ /**
+ * 老客标签建群任务id
+ */
+ private Long taskId;
+
+ /**
+ * 任务名称
+ */
+ private String taskName;
+
+ /**
+ * 加群引导语
+ */
+ private String welcomeMsg;
+
+ /**
+ * 群活码id
+ */
+ @JsonIgnore
+ private Long groupCodeId;
+
+ /**
+ * 群活码信息
+ */
+ @TableField(exist = false)
+ private WeGroupCode groupCodeInfo;
+
+ /**
+ * 发送方式 0: 企业群发 1:个人群发
+ */
+ private Integer sendType;
+
+ /**
+ * 当前群人数
+ */
+ private Integer totalMember;
+
+ /**
+ * 使用员工
+ */
+ @TableField(exist = false)
+ private List scopeList;
+
+ /**
+ * 标签
+ */
+ @TableField(exist = false)
+ private List tagList;
+
+ /**
+ * 发送范围 0: 全部客户 1:部分客户
+ */
+ private Integer sendScope;
+
+ /**
+ * 发送性别 0: 全部 1: 男 2: 女 3:未知
+ */
+ private Integer sendGender;
+
+ /**
+ * 目标客户被添加起始时间
+ */
+ private String cusBeginTime;
+
+ /**
+ * 目标客户被添加结束时间
+ */
+ private String cusEndTime;
+
+ /**
+ * 创建者
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private String updateTime;
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeCommunityNewGroupMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeCommunityNewGroupMapper.java
index 8dc46fefce7173bc242b540ed3ec4607d7de23c8..3a541819e5151fa18fa8107199d17a639034129c 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeCommunityNewGroupMapper.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeCommunityNewGroupMapper.java
@@ -18,14 +18,18 @@ public interface WeCommunityNewGroupMapper extends BaseMapper selectWeCommunityNewGroupList(@Param("empleCodeName") String empleCodeName, @Param("createBy") String createBy
- ,@Param("beginTime") String beginTime, @Param("endTime") String endTime);
+ List selectWeCommunityNewGroupList(@Param("employCodeName") String employCodeName, @Param("createBy") String createBy
+ , @Param("beginTime") String beginTime, @Param("endTime") String endTime);
/**
* 获取新客自动拉群详细信息
+ *
* @param newGroupId 主键id
* @return {@link WeCommunityNewGroupVo} 自动拉群信息
*/
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopChatMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopChatMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..89d5f1e1020dd8d23a86eeb75a8f1f560d5ec01e
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopChatMapper.java
@@ -0,0 +1,25 @@
+package com.linkwechat.wecom.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.linkwechat.wecom.domain.WeGroupSopChat;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+
+/**
+ * 群sop和群聊关联对象 mapper接口
+ */
+@Mapper
+@Repository
+public interface WeGroupSopChatMapper extends BaseMapper {
+
+ /**
+ * 批量保存sop - chat 绑定
+ *
+ * @param sopChatList 待绑定对象
+ * @return 结果
+ */
+ int batchBindsSopChat(List sopChatList);
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..f5031dad9f94e57d5c227a11c6c181882fefa74c
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopMapper.java
@@ -0,0 +1,74 @@
+package com.linkwechat.wecom.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.linkwechat.wecom.domain.WeGroupSop;
+import com.linkwechat.wecom.domain.vo.WeGroupSopVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 群SOP mapper接口
+ */
+@Mapper
+@Repository
+public interface WeGroupSopMapper extends BaseMapper {
+
+ /**
+ * 根据过滤条件获取群sop规则列表
+ *
+ * @param ruleName 规则名称
+ * @param createBy 创建人
+ * @param beginTime 创建开始时间
+ * @param endTime 创建结束时间
+ * @return 结果
+ */
+ List getGroupSopList(
+ @Param("ruleName") String ruleName,
+ @Param("createBy") String createBy,
+ @Param("beginTime") String beginTime,
+ @Param("endTime") String endTime
+ );
+
+ /**
+ * 通过id获取sop规则
+ *
+ * @param sopId id
+ * @return 结果
+ */
+ WeGroupSopVo getGroupSopById(Long sopId);
+
+ /**
+ * 批量删除群sop
+ *
+ * @param ruleIds 群sop规则id列表
+ * @return 结果
+ */
+ int batchRemoveWeGroupSopByIds(Long[] ruleIds);
+
+ /**
+ * 校验规则名是否已存在
+ *
+ * @param ruleName 规则名
+ * @return 结果
+ */
+ int isRuleNameUnique(String ruleName);
+
+ /**
+ * 通过规则id获取其所有素材id
+ *
+ * @param ruleId sop规则id
+ * @return 结果
+ */
+ List getMaterialIdListByRuleId(Long ruleId);
+
+ /**
+ * 通过规则id获取其所有群聊id
+ *
+ * @param ruleId sop规则id
+ * @return 结果
+ */
+ List getChatIdListByRuleId(Long ruleId);
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopMaterialMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopMaterialMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..6e16975d01eb711a673f4a4aa186a0d1d6a85f62
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopMaterialMapper.java
@@ -0,0 +1,23 @@
+package com.linkwechat.wecom.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.linkwechat.wecom.domain.WeGroupSopMaterial;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 群SOP - 素材 关联 Mapper
+ */
+@Mapper
+@Repository
+public interface WeGroupSopMaterialMapper extends BaseMapper {
+
+ /**
+ * 批量保存 sop规则与素材的绑定
+ * @param sopMaterialList 待绑定列表
+ * @return 结果
+ */
+ int batchBindsSopMaterial(List sopMaterialList);
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopPicMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopPicMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..930a03432849a47b35e844d890176f93c43ba530
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopPicMapper.java
@@ -0,0 +1,25 @@
+package com.linkwechat.wecom.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.linkwechat.wecom.domain.WeGroupSopPic;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+
+/**
+ * 图片语sop规则绑定信息 mapper
+ */
+@Mapper
+@Repository
+public interface WeGroupSopPicMapper extends BaseMapper {
+
+ /**
+ * 批量保存群SOP和图片
+ *
+ * @param sopPicList WeGroupSopPic对象列表
+ * @return 结果
+ */
+ int batchSopPic(List sopPicList);
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeKeywordGroupTaskKwMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeKeywordGroupTaskKwMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..ebf7a8486cb0fc28ddd187e017f032fab1d6dacf
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeKeywordGroupTaskKwMapper.java
@@ -0,0 +1,23 @@
+package com.linkwechat.wecom.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.linkwechat.wecom.domain.WeKeywordGroupTaskKeyword;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 关键词拉群 关键词mapper
+ */
+@Mapper
+@Repository
+public interface WeKeywordGroupTaskKwMapper extends BaseMapper {
+
+ /**
+ * 批量绑定关键词拉群任务与关键词关联
+ * @param taskKeywordList 待绑定对象
+ * @return 结果
+ */
+ int batchBindsTaskKeyword(List taskKeywordList);
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeKeywordGroupTaskMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeKeywordGroupTaskMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..998aa8602b13841fa7eec41543e7451a9a435631
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeKeywordGroupTaskMapper.java
@@ -0,0 +1,67 @@
+package com.linkwechat.wecom.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.linkwechat.wecom.domain.WeKeywordGroupTask;
+import com.linkwechat.wecom.domain.vo.WeKeywordGroupTaskVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 关键词拉群mapper
+ */
+@Mapper
+@Repository
+public interface WeKeywordGroupTaskMapper extends BaseMapper {
+ /**
+ * 根据过滤条件获取关键词拉群任务列表
+ *
+ * @param taskName 任务名称
+ * @param createBy 创建人
+ * @param keyword 关键词
+ * @param beginTime 开始时间
+ * @param endTime 结束时间
+ * @return 列表数据
+ */
+ List getTaskList(
+ @Param("taskName") String taskName,
+ @Param("createBy") String createBy,
+ @Param("keyword") String keyword,
+ @Param("beginTime") String beginTime,
+ @Param("endTime") String endTime
+ );
+
+ /**
+ * 根据id获取任务性情
+ *
+ * @param taskId 任务id
+ * @return 结果
+ */
+ WeKeywordGroupTaskVo getTaskById(Long taskId);
+
+ /**
+ * 根据id列表批量删除任务
+ *
+ * @param ids id列表
+ * @return 删除行数
+ */
+ int batchRemoveTaskByIds(Long[] ids);
+
+ /**
+ * 根据任务id获取对应所有的群聊名称
+ *
+ * @param taskId 任务id
+ * @return 结果
+ */
+ List getGroupNameListByTaskId(Long taskId);
+
+ /**
+ * 校验名称是否唯一
+ *
+ * @param taskName 任务名
+ * @return 结果
+ */
+ int checkNameUnique(String taskName);
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeMaterialMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeMaterialMapper.java
index f92e7fd6b0971fddef8b985a9ae557c8554226aa..099ed78a7237a010cb5f704832fa0849c00546f9 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeMaterialMapper.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeMaterialMapper.java
@@ -1,5 +1,6 @@
package com.linkwechat.wecom.mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.linkwechat.wecom.domain.WeMaterial;
import org.apache.ibatis.annotations.Param;
@@ -11,7 +12,7 @@ import java.util.List;
* @author KEWEN
* @date 2020-10-09
*/
-public interface WeMaterialMapper {
+public interface WeMaterialMapper extends BaseMapper {
/**
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..0b392feb5c282892c61d62935706dc2aaafeb426
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskMapper.java
@@ -0,0 +1,49 @@
+package com.linkwechat.wecom.mapper;
+
+import com.linkwechat.wecom.domain.vo.WePresTagGroupTaskVo;
+import org.apache.ibatis.annotations.Param;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.linkwechat.wecom.domain.WePresTagGroupTask;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 老客户标签建群相关Mapper接口
+ */
+@Repository
+public interface WePresTagGroupTaskMapper extends BaseMapper {
+
+ /**
+ * 获取老客户标签建群任务
+ *
+ * @param taskId 任务id
+ * @return 结果
+ */
+ WePresTagGroupTaskVo selectTaskById(Long taskId);
+
+ /**
+ * 根据条件查询老客标签建群任务
+ * @param taskName 任务名称
+ * @param createBy 创建人
+ * @param beginTime 开始时间
+ * @param endTime 结束时间
+ * @param sendType 发送方式
+ * @return 结果
+ */
+ List selectTaskList(
+ @Param("taskName") String taskName,
+ @Param("sendType") Integer sendType,
+ @Param("createBy") String createBy,
+ @Param("beginTime") String beginTime,
+ @Param("endTime") String endTime
+ );
+
+ /**
+ * 检测任务名是否已被占用
+ * @param taskName 任务名
+ * @return 是否被占用
+ */
+ int checkTaskNameUnique(String taskName);
+
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskScopeMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskScopeMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..8d9165baabe81d31bd9363f09a3363a7cb880f7e
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskScopeMapper.java
@@ -0,0 +1,29 @@
+package com.linkwechat.wecom.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.linkwechat.wecom.domain.WePresTagGroupTaskScope;
+import com.linkwechat.wecom.domain.vo.WeEmplVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface WePresTagGroupTaskScopeMapper extends BaseMapper {
+
+ /**
+ * 根据建群任务id获取所有使用人员信息
+ *
+ * @param taskId 建群任务id
+ * @return 结果
+ */
+ List getScopeListByTaskId(Long taskId);
+
+ /**
+ * 批量绑定任务与使用人员
+ * @param taskScopeList 待绑定对象
+ * @return 结果
+ */
+ int batchBindsTaskScopes(List taskScopeList);
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskStatMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskStatMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..d15b16c516387da3ca0ca21552d20d57a8a6570c
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskStatMapper.java
@@ -0,0 +1,31 @@
+package com.linkwechat.wecom.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.linkwechat.wecom.domain.WePresTagGroupTaskStat;
+import com.linkwechat.wecom.domain.vo.WePresTagGroupTaskStatVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface WePresTagGroupTaskStatMapper extends BaseMapper {
+
+ /**
+ * 根据 老客标签建群任务id及附属相关属性条件获取任务对应的客户统计
+ * @param taskId 任务id
+ * @param customerName 客户名称
+ * @param isInGroup 是否在群
+ * @param isSent 是否已发送
+ * @return 客户统计列表
+ */
+ List getStatByTaskId(
+ @Param("taskId") Long taskId,
+ @Param("customerName") String customerName,
+ @Param("isSent") Integer isSent,
+ @Param("isInGroup") Integer isInGroup
+ );
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskTagMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskTagMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..c22d22be453533e1c78829d6c16c10b9918956c5
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskTagMapper.java
@@ -0,0 +1,32 @@
+package com.linkwechat.wecom.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.linkwechat.wecom.domain.WePresTagGroupTaskTag;
+import com.linkwechat.wecom.domain.WeTag;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 老客户标签建群任务tag mapper接口
+ */
+@Mapper
+@Repository
+public interface WePresTagGroupTaskTagMapper extends BaseMapper {
+
+ /**
+ * 通过标签建群任务id获取该任务对应所有标签
+ *
+ * @param taskId 建群任务id
+ * @return 标签Vo列表
+ */
+ List getTagListByTaskId(Long taskId);
+
+ /**
+ * 批量绑定建群任务与标签
+ * @param taskTagList 任务-标签关联对象
+ * @return 结果
+ */
+ int batchBindsTaskTags(List taskTagList);
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCommunityKeywordToGroupService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCommunityKeywordToGroupService.java
new file mode 100644
index 0000000000000000000000000000000000000000..21c4fbc46b8ad745aa1d946396ec5a361e67702e
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCommunityKeywordToGroupService.java
@@ -0,0 +1,66 @@
+package com.linkwechat.wecom.service;
+
+import com.linkwechat.wecom.domain.WeKeywordGroupTask;
+import com.linkwechat.wecom.domain.vo.WeKeywordGroupTaskVo;
+
+import java.util.List;
+
+/**
+ * 社区运营 - 关键词拉群任务Service
+ */
+public interface IWeCommunityKeywordToGroupService {
+
+ /**
+ * 根据过滤条件获取关键词拉群任务列表
+ *
+ * @param taskName 任务名称
+ * @param createBy 创建人
+ * @param keyword 关键词
+ * @param beginTime 开始时间
+ * @param endTime 结束时间
+ * @return 列表数据
+ */
+ List getTaskList(String taskName, String createBy, String keyword, String beginTime, String endTime);
+
+ /**
+ * 根据id获取任务性情
+ *
+ * @param taskId 任务id
+ * @return 结果
+ */
+ WeKeywordGroupTaskVo getTaskById(Long taskId);
+
+ /**
+ * 创建新任务
+ *
+ * @param task 待存储的对象
+ * @param keywords 关键词
+ * @return 结果
+ */
+ int addTask(WeKeywordGroupTask task, String[] keywords);
+
+ /**
+ * 对指定任务进行更新
+ *
+ * @param task 待更新对象
+ * @param keywords 关键词
+ * @return 结果
+ */
+ int updateTask(WeKeywordGroupTask task, String[] keywords);
+
+ /**
+ * 根据id列表批量删除任务
+ *
+ * @param ids id列表
+ * @return 删除行数
+ */
+ int batchRemoveTaskByIds(Long[] ids);
+
+ /**
+ * 检测任务名是否唯一
+ *
+ * @param taskName 任务名
+ * @return 结果
+ */
+ boolean taskNameIsUnique(String taskName);
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCustomerService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCustomerService.java
index f80cc58a35f3928499512172aca133ee6907ac1e..a7164be33862d4ae8319d4f4b701c17cf14fae50 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCustomerService.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCustomerService.java
@@ -118,7 +118,7 @@ public interface IWeCustomerService extends IService
* @param userid
* @return
*/
- WeCustomerPortrait findCustomerByOperUseridAndCustomerId(String externalUserid,String userid);
+ WeCustomerPortrait findCustomerByOperUseridAndCustomerId(String externalUserid,String userid) throws Exception;
/**
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupSopService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupSopService.java
new file mode 100644
index 0000000000000000000000000000000000000000..96e6127653fab0fe019adf9e2e27d6a7dc51e2b7
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupSopService.java
@@ -0,0 +1,71 @@
+package com.linkwechat.wecom.service;
+
+import com.linkwechat.wecom.domain.WeGroupSop;
+import com.linkwechat.wecom.domain.vo.WeGroupSopVo;
+
+import java.util.List;
+
+/**
+ * 社区运营 群sop service接口
+ */
+public interface IWeGroupSopService {
+
+ /**
+ * 通过规则id获取sop规则
+ *
+ * @param ruleId 规则id
+ * @return 结果
+ */
+ WeGroupSopVo getGroupSopById(Long ruleId);
+
+ /**
+ * 通过过滤条件获取群sop列表
+ *
+ * @param ruleName 规则名称
+ * @param createBy 创建者
+ * @param beginTime 创建区间 - 开始时间
+ * @param endTime 创建区间 - 结束时间
+ * @return 群sop规则列表
+ */
+ List getGroupSopList(String ruleName, String createBy, String beginTime, String endTime);
+
+
+ /**
+ * 新增群sop
+ *
+ * @param weGroupSop 新增所用数据
+ * @param groupIdList 选中的群聊id
+ * @param materialIdList 素材
+ * @param picList 手动上传的图片URL
+ * @return 结果
+ */
+ int addGroupSop(WeGroupSop weGroupSop, List groupIdList, List materialIdList, List picList);
+
+
+ /**
+ * 更新群sop
+ *
+ * @param weGroupSop 更新所用数据
+ * @param groupIdList 选中的群聊id
+ * @param materialIdList 素材
+ * @param picList 手动上传的图片URL
+ * @return 结果
+ */
+ int updateGroupSop(WeGroupSop weGroupSop, List groupIdList, List materialIdList, List picList);
+
+ /**
+ * 批量删除群sop
+ *
+ * @param ids sop规则id列表
+ * @return 结果
+ */
+ int batchRemoveGroupSopByIds(Long[] ids);
+
+ /**
+ * 校验规则名是否唯一
+ *
+ * @param ruleName 规则名
+ * @return 是否唯一
+ */
+ boolean isRuleNameUnique(String ruleName);
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWePresTagGroupTaskService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWePresTagGroupTaskService.java
new file mode 100644
index 0000000000000000000000000000000000000000..52f7ca0f1511669c3945fff676500ba742cca955
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWePresTagGroupTaskService.java
@@ -0,0 +1,95 @@
+package com.linkwechat.wecom.service;
+
+import com.linkwechat.wecom.domain.WeTag;
+import com.linkwechat.wecom.domain.dto.WePresTagGroupTaskDto;
+import com.linkwechat.wecom.domain.vo.WeEmplVo;
+import com.linkwechat.wecom.domain.vo.WePresTagGroupTaskVo;
+import com.linkwechat.wecom.domain.vo.WePresTagGroupTaskStatVo;
+
+import java.util.List;
+
+/**
+ * 社区运营 老客户标签建群 相关逻辑
+ */
+public interface IWePresTagGroupTaskService {
+
+ /**
+ * 新增建群任务
+ *
+ * @param taskDto 建群所需数据
+ * @return 数据库新增行数
+ */
+ int add(WePresTagGroupTaskDto taskDto);
+
+ /**
+ * 根据条件查询任务列表
+ *
+ * @param taskName 任务名称
+ * @param sendType 发送方式
+ * @param createBy 创建人
+ * @param beginTime 起始时间
+ * @param endTime 结束时间
+ * @return 结果
+ */
+ List selectTaskListList(String taskName, Integer sendType, String createBy, String beginTime, String endTime);
+
+ /**
+ * 通过id获取老客标签建群任务
+ *
+ * @param taskId 任务id
+ * @return 结果
+ */
+ WePresTagGroupTaskVo getTaskById(Long taskId);
+
+ /**
+ * 批量删除老客标签建群任务
+ *
+ * @param idList 任务id列表
+ * @return 删除的行数
+ */
+ int batchRemoveTaskByIds(Long[] idList);
+
+ /**
+ * 更新老客户标签建群任务
+ *
+ * @param wePresTagGroupTaskDto 更新数据
+ * @return 结果
+ * @taskId 待更新任务id
+ */
+ int updateTask(Long taskId, WePresTagGroupTaskDto wePresTagGroupTaskDto);
+
+ /**
+ * 检测任务名是否已存在
+ *
+ * @param taskName 任务名
+ * @return 结果
+ */
+ boolean checkTaskNameUnique(String taskName);
+
+ /**
+ * 通过老客标签建群id获取其统计信息
+ *
+ * @param taskId 任务id
+ * @param customerName 客户名
+ * @param isSent 是否已发送
+ * @param isInGroup 是否已在群
+ * @return 统计信息
+ */
+ List getStatByTaskId(Long taskId, String customerName, Integer isSent, Integer isInGroup);
+
+ /**
+ * 通过任务id获取对应使用员工
+ *
+ * @param taskId 任务id
+ * @return 结果
+ */
+ List getEmplListByTaskId(Long taskId);
+
+ /**
+ * 通过任务id获取标签列表
+ *
+ * @param taskId 任务id
+ * @return 结果
+ */
+ List getTagListByTaskId(Long taskId);
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeTaskFissionService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeTaskFissionService.java
index 58b5c651ecd503f8fdadf1319e499be52570d4a9..905904bd7e6dbc629187591b17f3c3dde52ad4ad 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeTaskFissionService.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeTaskFissionService.java
@@ -35,7 +35,7 @@ public interface IWeTaskFissionService {
* @param weTaskFission 任务宝
* @return 结果
*/
- public int insertWeTaskFission(WeTaskFission weTaskFission);
+ public Long insertWeTaskFission(WeTaskFission weTaskFission);
/**
* 修改任务宝
@@ -43,7 +43,7 @@ public interface IWeTaskFissionService {
* @param weTaskFission 任务宝
* @return 结果
*/
- public int updateWeTaskFission(WeTaskFission weTaskFission);
+ public Long updateWeTaskFission(WeTaskFission weTaskFission);
/**
* 批量删除任务宝
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCommunityKeywordToGroupServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCommunityKeywordToGroupServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..1b9ffe440b4019abcb89a1c622fd627e5492366a
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCommunityKeywordToGroupServiceImpl.java
@@ -0,0 +1,157 @@
+package com.linkwechat.wecom.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.linkwechat.wecom.domain.WeKeywordGroupTaskKeyword;
+import com.linkwechat.wecom.domain.WeKeywordGroupTask;
+import com.linkwechat.wecom.domain.WeGroupCode;
+import com.linkwechat.wecom.domain.vo.WeKeywordGroupTaskVo;
+import com.linkwechat.wecom.mapper.WeKeywordGroupTaskKwMapper;
+import com.linkwechat.wecom.mapper.WeKeywordGroupTaskMapper;
+import com.linkwechat.wecom.service.IWeCommunityKeywordToGroupService;
+import com.linkwechat.wecom.service.IWeGroupCodeService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 社区运营 - 关键词拉群任务ServiceImpl
+ */
+@Slf4j
+@Service
+public class WeCommunityKeywordToGroupServiceImpl extends ServiceImpl implements IWeCommunityKeywordToGroupService {
+
+ @Autowired
+ private WeKeywordGroupTaskMapper taskMapper;
+
+ @Autowired
+ private WeKeywordGroupTaskKwMapper taskKwMapper;
+
+ @Autowired
+ private IWeGroupCodeService groupCodeService;
+
+ /**
+ * 根据过滤条件获取关键词拉群任务列表
+ *
+ * @param taskName 任务名称
+ * @param createBy 创建人
+ * @param keyword 关键词
+ * @param beginTime 开始时间
+ * @param endTime 结束时间
+ * @return 列表数据
+ */
+ @Override
+ public List getTaskList(String taskName, String createBy, String keyword, String beginTime, String endTime) {
+ List taskVoList = taskMapper.getTaskList(taskName, createBy, keyword, beginTime, endTime);
+ for (WeKeywordGroupTaskVo task : taskVoList) {
+ // 查询关键词列表
+ QueryWrapper taskKeywordQueryWrapper = new QueryWrapper<>();
+ taskKeywordQueryWrapper.eq("task_id", task.getTaskId());
+ List taskKeywordList = taskKwMapper.selectList(taskKeywordQueryWrapper);
+ task.setKeywordList(taskKeywordList);
+ // 通过群活码id查询对应的群
+ List groupNameList = taskMapper.getGroupNameListByTaskId(task.getTaskId());
+ groupNameList.removeIf(Objects::isNull);
+ task.setGroupNameList(groupNameList);
+ // 获取群活码信息
+ WeGroupCode weGroupCode = groupCodeService.selectWeGroupCodeById(task.getGroupCodeId());
+ task.setGroupCodeInfo(weGroupCode);
+ }
+
+ return taskVoList;
+ }
+
+ /**
+ * 根据id获取任务性情
+ *
+ * @param taskId 任务id
+ * @return 结果
+ */
+ @Override
+ public WeKeywordGroupTaskVo getTaskById(Long taskId) {
+ WeKeywordGroupTaskVo taskVo = taskMapper.getTaskById(taskId);
+ // 查询关键词列表
+ QueryWrapper taskKeywordQueryWrapper = new QueryWrapper<>();
+ taskKeywordQueryWrapper.eq("task_id", taskId);
+ List keywordList = taskKwMapper.selectList(taskKeywordQueryWrapper);
+ taskVo.setKeywordList(keywordList);
+ return taskVo;
+ }
+
+ /**
+ * 创建新任务
+ *
+ * @param task 待存储的对象
+ * @param keywords 关键词
+ * @return 结果
+ */
+ @Override
+ @Transactional
+ public int addTask(WeKeywordGroupTask task, String[] keywords) {
+ if(this.save(task)) {
+ // 构建关键词对象并存储
+ List weKeywordGroupTaskKeywordList = Arrays.stream(keywords)
+ .map(word -> new WeKeywordGroupTaskKeyword(task.getTaskId(), word)).collect(Collectors.toList());
+ taskKwMapper.batchBindsTaskKeyword(weKeywordGroupTaskKeywordList);
+ return 1;
+ }
+ return 0;
+ }
+
+ /**
+ * 对指定任务进行更新
+ *
+ * @param task 待更新对象
+ * @param keywords 关键词
+ * @return 结果
+ */
+ @Override
+ @Transactional
+ public int updateTask(WeKeywordGroupTask task, String[] keywords) {
+ if(taskMapper.updateById(task) == 1) {
+ // 删除原有的关键词
+ QueryWrapper taskKwQueryWrapper = new QueryWrapper<>();
+ taskKwQueryWrapper.eq("task_id", task.getTaskId());
+ taskKwMapper.delete(taskKwQueryWrapper);
+ // 再重新插入新的关键词
+ List weKeywordGroupTaskKeywordList = Arrays.stream(keywords)
+ .map(word -> new WeKeywordGroupTaskKeyword(task.getTaskId(), word)).collect(Collectors.toList());
+ taskKwMapper.batchBindsTaskKeyword(weKeywordGroupTaskKeywordList);
+ return 1;
+ }
+ return 0;
+ }
+
+ /**
+ * 根据id列表批量删除任务
+ *
+ * @param ids id列表
+ * @return 删除行数
+ */
+ @Override
+ @Transactional
+ public int batchRemoveTaskByIds(Long[] ids) {
+ // 移除其所有关键词对象
+ QueryWrapper taskKwQueryWrapper = new QueryWrapper<>();
+ taskKwQueryWrapper.in("task_id", Arrays.asList(ids));
+ taskKwMapper.delete(taskKwQueryWrapper);
+ return taskMapper.batchRemoveTaskByIds(ids);
+ }
+
+ /**
+ * 检测任务名是否唯一
+ *
+ * @param taskName 任务名
+ * @return 结果
+ */
+ @Override
+ public boolean taskNameIsUnique(String taskName) {
+ return taskMapper.checkNameUnique(taskName) == 0;
+ }
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCommunityNewGroupServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCommunityNewGroupServiceImpl.java
index 40dd47d5abadf74159d36e1ddb48a403e58edc6a..d9330eb0dfe5db5c89d047cfe886f8e50c0f5ac5 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCommunityNewGroupServiceImpl.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCommunityNewGroupServiceImpl.java
@@ -1,6 +1,7 @@
package com.linkwechat.wecom.service.impl;
import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
import com.linkwechat.common.exception.wecom.WeComException;
@@ -19,6 +20,7 @@ import com.linkwechat.wecom.service.IWeGroupCodeActualService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
@@ -57,6 +59,7 @@ public class WeCommunityNewGroupServiceImpl extends ServiceImpl item.setEmpleCodeId(communityNewGroup.getNewGroupId()));
iWeEmpleCodeUseScopService.saveBatch(weEmpleCode.getWeEmpleCodeUseScops());
@@ -111,16 +117,19 @@ public class WeCommunityNewGroupServiceImpl extends ServiceImpl selectWeCommunityNewGroupList(String empleCodeName, String createBy, String beginTime, String endTime) {
List weCommunityNewGroupVos = weCommunityNewGroupMapper.selectWeCommunityNewGroupList(empleCodeName, createBy, beginTime, endTime);
+
if (CollectionUtil.isNotEmpty(weCommunityNewGroupVos)) {
List newGroupIdList = weCommunityNewGroupVos.stream().map(WeCommunityNewGroupVo::getNewGroupId).collect(Collectors.toList());
List useScopList = iWeEmpleCodeUseScopService.selectWeEmpleCodeUseScopListByIds(newGroupIdList);
List tagList = weEmpleCodeTagService.selectWeEmpleCodeTagListByIds(newGroupIdList);
+
weCommunityNewGroupVos.forEach(newGroup -> {
List weGroupCodeActuals = getWeGroupCodeActuals(newGroup);
newGroup.setWeGroupUserScops(weGroupCodeActuals);
@@ -162,17 +171,19 @@ public class WeCommunityNewGroupServiceImpl extends ServiceImpl()
+// .eq(WeCommunityNewGroup::getGroupCodeId, communityNewGroupDto.getGroupCodeId()));
+ WeCommunityNewGroup communityNewGroup = weCommunityNewGroupMapper.selectById(communityNewGroupDto.getNewGroupId());
+ if (null == communityNewGroup) {
throw new WeComException("信息不存在!");
}
@@ -180,12 +191,14 @@ public class WeCommunityNewGroupServiceImpl extends ServiceImpl item.setEmpleCodeId(communityNewGroup.getNewGroupId()));
- iWeEmpleCodeUseScopService.updateBatchById(weEmpleCode.getWeEmpleCodeUseScops());
+ iWeEmpleCodeUseScopService.saveOrUpdateBatch(weEmpleCode.getWeEmpleCodeUseScops());
}
if (CollectionUtil.isNotEmpty(weEmpleCode.getWeEmpleCodeTags())) {
weEmpleCode.getWeEmpleCodeTags().forEach(item -> item.setEmpleCodeId(communityNewGroup.getNewGroupId()));
- weEmpleCodeTagService.updateBatchById(weEmpleCode.getWeEmpleCodeTags());
+ weEmpleCodeTagService.saveOrUpdateBatch(weEmpleCode.getWeEmpleCodeTags());
}
}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerServiceImpl.java
index 3168c12b145bfe4249f62b20c2d391537556a17a..b68184f1d4e4966f1f6f359f03aa99bc6e2c979b 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerServiceImpl.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerServiceImpl.java
@@ -5,6 +5,7 @@ import cn.hutool.core.util.ArrayUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.linkwechat.common.constant.WeConstans;
+import com.linkwechat.common.utils.DateUtils;
import com.linkwechat.common.utils.SecurityUtils;
import com.linkwechat.common.utils.SnowFlakeUtil;
import com.linkwechat.common.utils.StringUtils;
@@ -627,11 +628,16 @@ public class WeCustomerServiceImpl extends ServiceImpl implements IWeGroupSopService {
+
+ @Autowired
+ private WeGroupSopMapper groupSopMapper;
+
+ @Autowired
+ private WeGroupSopChatMapper sopChatMapper;
+
+ @Autowired
+ private WeMaterialMapper materialMapper;
+
+ @Autowired
+ private WeGroupSopMaterialMapper sopMaterialMapper;
+
+ @Autowired
+ private WeGroupMapper groupMapper;
+
+ @Autowired
+ private WeGroupSopPicMapper sopPicMapper;
+
+ /**
+ * 通过规则id获取sop规则
+ *
+ * @param ruleId 规则id
+ * @return 结果
+ */
+ @Override
+ public WeGroupSopVo getGroupSopById(Long ruleId) {
+ WeGroupSopVo groupSopVo = groupSopMapper.getGroupSopById(ruleId);
+ this.setChatAndMaterial(groupSopVo);
+ // 设置手动上传的图片url
+ this.setPicList(groupSopVo);
+ return groupSopVo;
+ }
+
+ /**
+ * 通过过滤条件获取群sop列表
+ *
+ * @param ruleName 规则名称
+ * @param createBy 创建者
+ * @param beginTime 创建区间 - 开始时间
+ * @param endTime 创建区间 - 结束时间
+ * @return 群sop规则列表
+ */
+ @Override
+ public List getGroupSopList(String ruleName, String createBy, String beginTime, String endTime) {
+ List groupSopVoList = groupSopMapper.getGroupSopList(ruleName, createBy, beginTime, endTime);
+ for (WeGroupSopVo groupSopVo : groupSopVoList) {
+ this.setChatAndMaterial(groupSopVo);
+ // 设置手动上传的图片url
+ this.setPicList(groupSopVo);
+
+ }
+ return groupSopVoList;
+ }
+
+ /**
+ * 新增群sop
+ *
+ * @param weGroupSop 新增所用数据
+ * @param groupIdList 选中的群聊id
+ * @param materialIdList 素材
+ * @param picList 手动上传的图片URL
+ * @return 结果
+ */
+ @Override
+ @Transactional
+ public int addGroupSop(WeGroupSop weGroupSop, List groupIdList, List materialIdList, List picList) {
+ if (this.save(weGroupSop)) {
+ Long ruleId = weGroupSop.getRuleId();
+ // 保存群聊及素材关联
+ this.saveChatAndMaterialBinds(ruleId, groupIdList, materialIdList);
+ // 保存手动上传的图片素材
+ List sopPicList = picList.stream().map(e -> new WeGroupSopPic(ruleId, e)).collect(Collectors.toList());
+ sopPicMapper.batchSopPic(sopPicList);
+ return 1;
+ }
+ return 0;
+ }
+
+ /**
+ * 更新群sop
+ *
+ * @param weGroupSop 更新所用数据
+ * @param groupIdList 选中的群聊id
+ * @param materialIdList 素材
+ * @param picList 手动上传的图片URL
+ * @return 结果
+ */
+ @Override
+ @Transactional
+ public int updateGroupSop(WeGroupSop weGroupSop, List groupIdList, List materialIdList, List picList) {
+ if (this.updateById(weGroupSop)) {
+ Long ruleId = weGroupSop.getRuleId();
+ // 先删除旧数据
+ this.deleteChatAndMaterialBinds(ruleId);
+ // 再插入新数据
+ this.saveChatAndMaterialBinds(ruleId, groupIdList, materialIdList);
+ // 删除旧图片
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ sopPicMapper.delete(queryWrapper.eq("rule_id", ruleId));
+
+ // 保留新上传的图片
+ List sopPicList = picList.stream().map(e -> new WeGroupSopPic(ruleId, e)).collect(Collectors.toList());
+ sopPicMapper.batchSopPic(sopPicList);
+ return 1;
+ }
+ return 0;
+ }
+
+ /**
+ * 批量删除群sop
+ *
+ * @param ids sop规则id列表
+ * @return 结果
+ */
+ @Override
+ @Transactional
+ public int batchRemoveGroupSopByIds(Long[] ids) {
+ int affectedRows = groupSopMapper.deleteBatchIds(Arrays.asList(ids));
+ if (affectedRows > 0) {
+ // 解除群聊和素材关联
+ QueryWrapper sopGroupQueryWrapper = new QueryWrapper<>();
+ sopGroupQueryWrapper.in("rule_id", Arrays.asList(ids));
+ sopChatMapper.delete(sopGroupQueryWrapper);
+ QueryWrapper sopMaterialQueryWrapper = new QueryWrapper<>();
+ sopMaterialQueryWrapper.in("rule_id", Arrays.asList(ids));
+ sopMaterialMapper.delete(sopMaterialQueryWrapper);
+
+ // 删除手动上传的图片
+ QueryWrapper picQueryWrapper = new QueryWrapper<>();
+ picQueryWrapper.in("rule_id", Arrays.asList(ids));
+ sopPicMapper.delete(picQueryWrapper);
+ }
+ return affectedRows;
+ }
+
+ /**
+ * 校验规则名是否唯一
+ *
+ * @param ruleName 规则名
+ * @return 是否唯一
+ */
+ @Override
+ public boolean isRuleNameUnique(String ruleName) {
+ return groupSopMapper.isRuleNameUnique(ruleName) == 0;
+ }
+
+
+ /**
+ * 根据关联条件查询该sop所关联的群聊及素材对象,并将其放入WeGroupSopVo相应属性中用于前端使用
+ *
+ * @param groupSopVo 目标sop规则
+ */
+ private void setChatAndMaterial(WeGroupSopVo groupSopVo) {
+ Long ruleId = groupSopVo.getRuleId();
+
+ // 获取对应群聊信息
+ QueryWrapper groupQueryWrapper = new QueryWrapper<>();
+ List chatIdList = groupSopMapper.getChatIdListByRuleId(ruleId);
+ if (StringUtils.isNotEmpty(chatIdList)) {
+ groupQueryWrapper.in("chat_id", chatIdList);
+ List groupList = groupMapper.selectList(groupQueryWrapper);
+ groupSopVo.setGroupList(groupList);
+ }
+ // 获取对应素材信息
+ QueryWrapper materialQueryWrapper = new QueryWrapper<>();
+ List materialIdList = groupSopMapper.getMaterialIdListByRuleId(ruleId);
+ if (StringUtils.isNotEmpty(materialIdList)) {
+ materialQueryWrapper.in("id", materialIdList);
+ List materialList = materialMapper.selectList(materialQueryWrapper);
+ groupSopVo.setMaterialList(materialList);
+ }
+ }
+
+ /**
+ * 保存该sop规则对应的群聊及素材关联对象
+ *
+ * @param ruleId 规则id
+ * @param chatIdList 群聊id列表
+ * @param materialIdList 素材id列表
+ */
+ private void saveChatAndMaterialBinds(Long ruleId, List chatIdList, List materialIdList) {
+ if (StringUtils.isNotEmpty(chatIdList)) {
+ List sopChatList = chatIdList
+ .stream()
+ .map(id -> new WeGroupSopChat(ruleId, id))
+ .collect(Collectors.toList());
+ sopChatMapper.batchBindsSopChat(sopChatList);
+ }
+ if (StringUtils.isNotEmpty(materialIdList)) {
+ List materialList = materialIdList
+ .stream()
+ .map(id -> new WeGroupSopMaterial(ruleId, id))
+ .collect(Collectors.toList());
+ sopMaterialMapper.batchBindsSopMaterial(materialList);
+ }
+ }
+
+ /**
+ * 解除该sop规则对应的群聊及素材关联
+ *
+ * @param ruleId 规则id
+ */
+ private void deleteChatAndMaterialBinds(Long ruleId) {
+ QueryWrapper sopChatQueryWrapper = new QueryWrapper<>();
+ sopChatQueryWrapper.eq("rule_id", ruleId);
+ sopChatMapper.delete(sopChatQueryWrapper);
+ QueryWrapper sopMaterialQueryWrapper = new QueryWrapper<>();
+ sopMaterialQueryWrapper.eq("rule_id", ruleId);
+ sopMaterialMapper.delete(sopMaterialQueryWrapper);
+ }
+
+ /**
+ * 为WeGroupSopVo查询手动上传的图片列表
+ *
+ * @param sopVo 代操作对象
+ */
+ private void setPicList(WeGroupSopVo sopVo) {
+ Long ruleId = sopVo.getRuleId();
+ QueryWrapper picQueryWrapper = new QueryWrapper<>();
+ picQueryWrapper.eq("rule_id", ruleId);
+ List sopPicList = sopPicMapper.selectList(picQueryWrapper);
+ List picList = sopPicList.stream().map(WeGroupSopPic::getPicUrl).collect(Collectors.toList());
+ sopVo.setPicList(picList);
+ }
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WePresTagGroupTaskServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WePresTagGroupTaskServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..00f6620336eedd324e3bd6c5de024fcb9ad4db5b
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WePresTagGroupTaskServiceImpl.java
@@ -0,0 +1,241 @@
+package com.linkwechat.wecom.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.linkwechat.common.utils.SecurityUtils;
+import com.linkwechat.common.utils.bean.BeanUtils;
+import com.linkwechat.wecom.domain.*;
+import com.linkwechat.wecom.domain.dto.WePresTagGroupTaskDto;
+import com.linkwechat.wecom.domain.vo.WePresTagGroupTaskStatVo;
+import com.linkwechat.wecom.domain.vo.WePresTagGroupTaskVo;
+import com.linkwechat.wecom.domain.vo.WeEmplVo;
+import com.linkwechat.wecom.mapper.WePresTagGroupTaskMapper;
+import com.linkwechat.wecom.mapper.WePresTagGroupTaskScopeMapper;
+import com.linkwechat.wecom.mapper.WePresTagGroupTaskStatMapper;
+import com.linkwechat.wecom.mapper.WePresTagGroupTaskTagMapper;
+import com.linkwechat.wecom.service.IWePresTagGroupTaskService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class WePresTagGroupTaskServiceImpl extends ServiceImpl implements IWePresTagGroupTaskService {
+
+ @Autowired
+ private WePresTagGroupTaskMapper taskMapper;
+
+ @Autowired
+ private WePresTagGroupTaskStatMapper taskStatMapper;
+
+ @Autowired
+ private WePresTagGroupTaskScopeMapper taskScopeMapper;
+
+ @Autowired
+ private WePresTagGroupTaskTagMapper taskTagMapper;
+
+ /**
+ * 新增建群任务
+ *
+ * @param taskDto 建群所需数据
+ * @return 数据库新增行数
+ */
+ @Override
+ @Transactional(rollbackFor = RuntimeException.class)
+ public int add(WePresTagGroupTaskDto taskDto) {
+
+ // 创建WeCommunityOldGroup对象进行存储
+ WePresTagGroupTask task = new WePresTagGroupTask();
+
+ BeanUtils.copyProperties(taskDto, task);
+ task.setCreateBy(SecurityUtils.getUsername());
+
+ if (this.save(task)) {
+ // 保存标签对象
+ List tagIdList = taskDto.getTagList();
+ if (CollectionUtil.isNotEmpty(tagIdList)) {
+ List taskTagList = tagIdList.stream().map(id -> new WePresTagGroupTaskTag(task.getTaskId(), id)).collect(Collectors.toList());
+ taskTagMapper.batchBindsTaskTags(taskTagList);
+ }
+
+ // 保存员工信息
+ List emplIdList = taskDto.getScopeList();
+ if (CollectionUtil.isNotEmpty(emplIdList)) {
+ List wePresTagGroupTaskScopeList = emplIdList.stream().map(id -> new WePresTagGroupTaskScope(task.getTaskId(), id)).collect(Collectors.toList());
+ taskScopeMapper.batchBindsTaskScopes(wePresTagGroupTaskScopeList);
+ }
+
+ return 1;
+ }
+ return 0;
+ }
+
+ /**
+ * 根据条件查询任务列表
+ * @param taskName 任务名称
+ * @param sendType 发送方式
+ * @param createBy 创建人
+ * @param beginTime 起始时间
+ * @param endTime 结束时间
+ * @return 结果
+ */
+ @Override
+ public List selectTaskListList(String taskName, Integer sendType, String createBy, String beginTime, String endTime) {
+ // 查询任务列表
+ List taskVoList = taskMapper.selectTaskList(taskName, sendType, createBy, beginTime, endTime);
+ if(CollectionUtil.isNotEmpty(taskVoList)) {
+
+ for (WePresTagGroupTaskVo taskVo : taskVoList) {
+ Long taskId = taskVo.getTaskId();
+ // 根据任务id获取标签
+ List TagList = taskTagMapper.getTagListByTaskId(taskId);
+ taskVo.setTagList(TagList);
+
+ // 根据任务id获取该任务使用人员列表
+ List emplList = taskScopeMapper.getScopeListByTaskId(taskId);
+ taskVo.setScopeList(emplList);
+ }
+ }
+ return taskVoList;
+ }
+
+ /**
+ * 通过id获取老客标签建群任务
+ *
+ * @param taskId 任务id
+ * @return 结果
+ */
+ @Override
+ public WePresTagGroupTaskVo getTaskById(Long taskId) {
+ return taskMapper.selectTaskById(taskId);
+ }
+
+ /**
+ * 批量删除老客标签建群任务
+ *
+ * @param idList 任务id列表
+ * @return 删除的行数
+ */
+ @Override
+ @Transactional
+ public int batchRemoveTaskByIds(Long[] idList) {
+ List ids = Arrays.asList(idList);
+
+ // 解除关联的标签
+ QueryWrapper taskTagQueryWrapper = new QueryWrapper<>();
+ taskTagQueryWrapper.in("task_id", ids);
+ taskTagMapper.delete(taskTagQueryWrapper);
+ // 解除关联的员工
+ QueryWrapper taskScopeQueryWrapper = new QueryWrapper<>();
+ taskScopeQueryWrapper.in("task_id", ids);
+ taskScopeMapper.delete(taskScopeQueryWrapper);
+ // 删除其用户统计
+ QueryWrapper statQueryWrapper = new QueryWrapper<>();
+ statQueryWrapper.in("task_id", ids);
+ taskStatMapper.delete(statQueryWrapper);
+
+ // 删除task
+ QueryWrapper taskQueryWrapper = new QueryWrapper<>();
+ taskQueryWrapper.in("task_id", ids);
+ return taskMapper.delete(taskQueryWrapper);
+ }
+
+ /**
+ * 更新老客户标签建群任务
+ *
+ * @taskId 待更新任务id
+ * @param wePresTagGroupTaskDto 更新数据
+ * @return 结果
+ */
+ @Override
+ @Transactional(rollbackFor = RuntimeException.class)
+ public int updateTask(Long taskId, WePresTagGroupTaskDto wePresTagGroupTaskDto) {
+ WePresTagGroupTask wePresTagGroupTask = new WePresTagGroupTask();
+ BeanUtils.copyProperties(wePresTagGroupTaskDto, wePresTagGroupTask);
+ wePresTagGroupTask.setTaskId(taskId);
+ wePresTagGroupTask.setUpdateBy(SecurityUtils.getUsername());
+ if (taskMapper.updateById(wePresTagGroupTask) == 1) {
+ // 更新标签
+ // 先删除旧标签
+ QueryWrapper taskTagQueryWrapper = new QueryWrapper<>();
+ taskTagQueryWrapper.eq("task_id", taskId);
+ taskTagMapper.delete(taskTagQueryWrapper);
+ // 再添加新标签
+ List tagIdList = wePresTagGroupTaskDto.getTagList();
+ if (CollectionUtil.isNotEmpty(tagIdList)) {
+ List wePresTagGroupTaskTagList = tagIdList.stream().map(id -> new WePresTagGroupTaskTag(taskId, id)).collect(Collectors.toList());
+ taskTagMapper.batchBindsTaskTags(wePresTagGroupTaskTagList);
+ }
+
+ // 更新范围
+
+ // 先解除旧的员工绑定信息
+ QueryWrapper taskScopeQueryWrapper = new QueryWrapper<>();
+ taskScopeQueryWrapper.eq("task_id", taskId);
+ taskScopeMapper.delete(taskScopeQueryWrapper);
+
+ // 再重新绑定员工信息
+ List userIdList = wePresTagGroupTaskDto.getScopeList();
+ if (CollectionUtil.isNotEmpty(userIdList)) {
+ List wePresTagGroupTaskScopeList = userIdList.stream().map(id -> new WePresTagGroupTaskScope(taskId, id)).collect(Collectors.toList());
+ taskScopeMapper.batchBindsTaskScopes(wePresTagGroupTaskScopeList);
+ }
+ return 1;
+ }
+ return 0;
+ }
+
+ /**
+ * 检测任务名是否已存在
+ *
+ * @param taskName 任务名
+ * @return 结果
+ */
+ @Override
+ public boolean checkTaskNameUnique(String taskName) {
+ int count = taskMapper.checkTaskNameUnique(taskName);
+ return count <= 0;
+ }
+
+ /**
+ * 通过老客标签建群id获取其统计信息
+ *
+ * @param taskId 任务id
+ * @param customerName 客户名
+ * @param isSent 是否已发送
+ * @param isInGroup 是否已在群
+ * @return 统计信息
+ */
+ @Override
+ public List getStatByTaskId(Long taskId, String customerName, Integer isSent, Integer isInGroup) {
+ return taskStatMapper.getStatByTaskId(taskId, customerName, isSent, isInGroup);
+ }
+
+ /**
+ * 通过任务id获取对应使用员工
+ *
+ * @param taskId 任务id
+ * @return 结果
+ */
+ @Override
+ public List getEmplListByTaskId(Long taskId) {
+ return taskScopeMapper.getScopeListByTaskId(taskId);
+ }
+
+ /**
+ * 通过任务id获取标签列表
+ *
+ * @param taskId 任务id
+ * @return 结果
+ */
+ @Override
+ public List getTagListByTaskId(Long taskId) {
+ return taskTagMapper.getTagListByTaskId(taskId);
+ }
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTaskFissionServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTaskFissionServiceImpl.java
index 680ba4c242edd08e2f438c0320f1749d321c1d68..56702bab493cabfecd45523b6daa0efa09cfb44f 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTaskFissionServiceImpl.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTaskFissionServiceImpl.java
@@ -30,10 +30,10 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.text.ParseException;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
+import java.text.ParseException;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@@ -103,7 +103,7 @@ public class WeTaskFissionServiceImpl implements IWeTaskFissionService {
*/
@Override
@Transactional
- public int insertWeTaskFission(WeTaskFission weTaskFission) {
+ public Long insertWeTaskFission(WeTaskFission weTaskFission) {
weTaskFission.setCreateBy(SecurityUtils.getUsername());
weTaskFission.setCreateTime(DateUtils.getNowDate());
groupQrcodeHandler(weTaskFission);
@@ -118,7 +118,7 @@ public class WeTaskFissionServiceImpl implements IWeTaskFissionService {
}
}
}
- return insertResult;
+ return weTaskFission.getId();
}
/**
@@ -128,10 +128,25 @@ public class WeTaskFissionServiceImpl implements IWeTaskFissionService {
* @return 结果
*/
@Override
- public int updateWeTaskFission(WeTaskFission weTaskFission) {
+ @Transactional
+ public Long updateWeTaskFission(WeTaskFission weTaskFission) {
weTaskFission.setUpdateTime(DateUtils.getNowDate());
weTaskFission.setUpdateBy(SecurityUtils.getUsername());
- return weTaskFissionMapper.updateWeTaskFission(weTaskFission);
+ groupQrcodeHandler(weTaskFission);
+ int updateResult = weTaskFissionMapper.updateWeTaskFission(weTaskFission);
+ if (updateResult > 0) {
+ if (CollectionUtils.isNotEmpty(weTaskFission.getTaskFissionStaffs())) {
+ List staffList = weTaskFissionStaffService.selectWeTaskFissionStaffByTaskId(weTaskFission.getId());
+ if (CollectionUtils.isNotEmpty(staffList)) {
+ weTaskFissionStaffService.deleteWeTaskFissionStaffByIds(staffList.stream().map(WeTaskFissionStaff::getId).toArray(Long[]::new));
+ }
+ weTaskFission.getTaskFissionStaffs().forEach(staff -> {
+ staff.setTaskFissionId(weTaskFission.getId());
+ });
+ weTaskFissionStaffService.insertWeTaskFissionStaffList(weTaskFission.getTaskFissionStaffs());
+ }
+ }
+ return weTaskFission.getId();
}
/**
@@ -164,12 +179,14 @@ public class WeTaskFissionServiceImpl implements IWeTaskFissionService {
String postersPath = weTaskFission.getPostersUrl();
//目标员工id
String fissStaffId = weTaskFission.getFissionTargetId();
- //todo H5生成海报页面路径
+ //H5生成海报页面路径
StringBuilder pageUrlBuilder = new StringBuilder(pageUrl);
pageUrlBuilder.append("?")
.append("fissionId=").append(id)
.append("&")
- .append("userId=").append(fissStaffId);
+ .append("userId=").append(fissStaffId)
+ .append("&")
+ .append("posterId=").append(weTaskFission.getPostersId());
LinkMessageDto linkMessageDto = new LinkMessageDto();
linkMessageDto.setPicurl(postersPath);
diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeCommunityNewGroupMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeCommunityNewGroupMapper.xml
index 22c4dc9683b3fab1ffa6e39b34a9133c33f3e469..bcf7f2e27aa39bde60574df9f5025aa7b59f1198 100644
--- a/linkwe-wecom/src/main/resources/mapper/wecom/WeCommunityNewGroupMapper.xml
+++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeCommunityNewGroupMapper.xml
@@ -18,7 +18,9 @@
qr_code,
is_join_confirm_friends,
media_id,
- join_friend_nums
+ join_friend_nums,
+ config_id,
+ user_qr_code
FROM we_community_new_group