diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000000000000000000000000000000000000..b901097f2db6e50097dc0b222204a88f8cea1609 --- /dev/null +++ b/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,117 @@ +/* + * Copyright 2007-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + private static final String WRAPPER_VERSION = "0.5.6"; + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" + + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { + String username = System.getenv("MVNW_USERNAME"); + char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); + Authenticator.setDefault(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + } + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054 Binary files /dev/null and b/.mvn/wrapper/maven-wrapper.jar differ diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000000000000000000000000000000000000..841206814bd69a85cbe82b990873c30c702d1fc7 --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=http://10.252.96.249:8081/repository/maven-public//org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip +wrapperUrl=http://10.252.96.249:8081/repository/maven-public//io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/build_docker.sh b/build_docker.sh new file mode 100644 index 0000000000000000000000000000000000000000..a6dcf8c3b5dde388f2057e1f957e6ecd31581105 --- /dev/null +++ b/build_docker.sh @@ -0,0 +1,28 @@ +#!/bin/bash +######################################################## +############### LinkWeChat Docker 部署脚本 ############## +######################################################## +LOG=$1 +PROJ_HOME=$PWD +echo "$PROJ_HOME" +CLEAN_BUILD="clean" +BUILD_CODE="install" +BUILD_DOCKER="docker:build" + +showLog(){ + if [ "$1" == '--log' -o "$1" == '-l' ]; then + $PROJ_HOME/mvnw "$2" + else + $PROJ_HOME/mvnw "$2" > /dev/null + fi +} + +cd "$PROJ_HOME" +echo '开始从代码构建LinkWeChat' +showLog "$LOG" "$CLEAN_BUILD" +showLog "$LOG" "$BUILD_CODE" +echo '构建完成' +cd "$PROJ_HOME"/linkwe-admin +echo '开始构建Docker镜像' +showLog "$LOG" "$BUILD_DOCKER" +echo 'Docker镜像构建完成' \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 8f309f336b7f35d77804a669f0c34c940c49469f..b9477a38b63303467e8d179a3e2f1e3a4c2947ff 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,7 +19,7 @@ services: - REDIS_HOST - REDIS_PORT ports: - - "${APP_PORT}:8090" + - 8090 volumes: - ./logs:/logs # 上传文件地址,请根据实际${ruoyi.profile}自行修改映射 diff --git a/linkwe-admin/src/main/docker/Dockerfile b/linkwe-admin/src/main/docker/Dockerfile index bb49258b47e38132d8ffc711a6061e7bc7bbe784..edfe17e61169203dd9de342dcd8d81ee7080e47b 100644 --- a/linkwe-admin/src/main/docker/Dockerfile +++ b/linkwe-admin/src/main/docker/Dockerfile @@ -1,5 +1,7 @@ FROM openjdk:8-alpine +RUN set -xe && apk --no-cache add ttf-dejavu fontconfig + # 设置时区 ADD Shanghai /usr/share/zoneinfo/Asia/ RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ diff --git a/linkwe-admin/src/main/java/com/linkwechat/LinkWeChatApplication.java b/linkwe-admin/src/main/java/com/linkwechat/LinkWeChatApplication.java index 721558f7824be4a2b342f15e0cd55dc24efc93a0..760220aead86479ae9da0c2c6068749745e0e679 100644 --- a/linkwe-admin/src/main/java/com/linkwechat/LinkWeChatApplication.java +++ b/linkwe-admin/src/main/java/com/linkwechat/LinkWeChatApplication.java @@ -16,7 +16,7 @@ import org.springframework.scheduling.annotation.EnableAsync; */ @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, PageHelperAutoConfiguration.class}) @MapperScan("com.linkwechat.*.mapper") -@ForestScan(basePackages = "com.linkwechat.wecom.client") +@ForestScan(basePackages = {"com.linkwechat.wecom.client","com.linkwechat.wecom.wxclient"}) @EnableAsync @EnableDiscoveryClient public class LinkWeChatApplication { diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/system/SysLoginController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/system/SysLoginController.java index 6efcf20ee5b3a0f22c706b6683397a73d56a9aa7..736312b7889599e54184cc6d7f835d96c5b7304b 100644 --- a/linkwe-admin/src/main/java/com/linkwechat/web/controller/system/SysLoginController.java +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/system/SysLoginController.java @@ -158,9 +158,7 @@ public class SysLoginController String token = loginService.noPwdLogin(loginInfo.getUser_info().getUserid()); ajax.put(Constants.TOKEN, token); - } - return ajax; } diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeAppController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeAppController.java new file mode 100644 index 0000000000000000000000000000000000000000..d106661f77c4b1a57ea4798323a0c89dc8298e39 --- /dev/null +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeAppController.java @@ -0,0 +1,42 @@ +package com.linkwechat.web.controller.wecom; + +import com.linkwechat.common.core.controller.BaseController; +import com.linkwechat.common.core.domain.AjaxResult; +import com.linkwechat.wecom.domain.WeApp; +import com.linkwechat.wecom.service.IWeAppService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/wecom/weapp") +public class WeAppController extends BaseController { + + @Autowired + IWeAppService iWeAppService; + + + @GetMapping("/list") + public AjaxResult list() { + return AjaxResult.success( + iWeAppService.list() + ); + } + + + + @PutMapping("/updateWeApp") + public AjaxResult updateWeApp(@RequestBody WeApp weApp){ + + iWeAppService.updateById(weApp); + + return AjaxResult.success(); + } + + + + + + + + +} diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeChatContactMappingController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeChatContactMappingController.java index f802b3824776b37e89be98771a6628e5dd40955a..24166dfb7df818074b9da95c48be754b1fd07956 100644 --- a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeChatContactMappingController.java +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeChatContactMappingController.java @@ -10,6 +10,8 @@ import com.linkwechat.common.utils.poi.ExcelUtil; import com.linkwechat.wecom.domain.WeChatContactMapping; import com.linkwechat.wecom.domain.WeCustomer; import com.linkwechat.wecom.service.IWeChatContactMappingService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -29,6 +31,7 @@ import java.util.List; * @author ruoyi * @date 2020-12-27 */ +@Api("聊天关系映射Controller") @RestController @RequestMapping("/chat/mapping") public class WeChatContactMappingController extends BaseController @@ -40,8 +43,9 @@ public class WeChatContactMappingController extends BaseController * 查询聊天关系映射列表 */ // @PreAuthorize("@ss.hasPermi('chat:mapping:list')") + @ApiOperation(value = "查询聊天关系映射列表",httpMethod = "GET") @GetMapping("/list") - public TableDataInfo list(WeChatContactMapping weChatContactMapping) + public TableDataInfo> list(WeChatContactMapping weChatContactMapping) { startPage(); List list = weChatContactMappingService.selectWeChatContactMappingList(weChatContactMapping); @@ -52,8 +56,9 @@ public class WeChatContactMappingController extends BaseController * 按客户查询关系映射列表 */ // @PreAuthorize("@ss.hasPermi('chat:mapping:listByCustomer')") + @ApiOperation(value = "按客户查询关系映射列表",httpMethod = "GET") @GetMapping("/listByCustomer") - public TableDataInfo listByCustomer() + public TableDataInfo> listByCustomer() { startPage(); PageInfo weCustomerPageInfo = weChatContactMappingService.listByCustomer(); 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 index fd01bd2774d5a3d9353702445c1351cefe743e1a..8b87b5727305700141b3633064771bee26931a05 100644 --- 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 @@ -76,7 +76,12 @@ public class WeCommunityGroupSopController extends BaseController { List materialIdList = groupSopDto.getMaterialIdList(); // 上传的图片的URl列表 List picList = groupSopDto.getPicList(); - return toAjax(groupSopService.addGroupSop(weGroupSop, groupIdList, materialIdList, picList)); + int affectedRows = groupSopService.addGroupSop(weGroupSop, groupIdList, materialIdList, picList); + if (affectedRows > 0) { + // 添加成功后进行异步消息推送 + groupSopService.sendMessage(groupIdList); + } + return toAjax(affectedRows); } /** diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityH5Controller.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityH5Controller.java new file mode 100644 index 0000000000000000000000000000000000000000..8f0967343ebc1a6018f5c3dc01af757250fa9efb --- /dev/null +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityH5Controller.java @@ -0,0 +1,122 @@ +package com.linkwechat.web.controller.wecom; + +import com.linkwechat.common.core.controller.BaseController; +import com.linkwechat.common.core.domain.AjaxResult; +import com.linkwechat.common.core.domain.entity.SysUser; +import com.linkwechat.common.core.page.TableDataInfo; +import com.linkwechat.common.enums.CommunityTaskType; +import com.linkwechat.system.service.ISysUserService; +import com.linkwechat.wecom.domain.vo.WeKeywordGroupTaskVo; +import com.linkwechat.wecom.service.IWeCommunityKeywordToGroupService; +import com.linkwechat.wecom.service.IWeGroupSopService; +import com.linkwechat.wecom.service.IWePresTagGroupTaskService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; + +/** + * 社区运营H5接口 + * + * @Author Hang + * @Date 2021/3/24 10:54 + */ +@RestController +@RequestMapping(value = "/wecom/community/h5") +public class WeCommunityH5Controller extends BaseController { + + @Autowired + private IWePresTagGroupTaskService tagGroupTaskService; + + @Autowired + private IWeGroupSopService sopService; + + @Autowired + private IWeCommunityKeywordToGroupService keywordToGroupService; + + @Autowired + private ISysUserService userService; + + /** + * 获取任务对应的执行人列表 + * @param taskId 任务id + * @param type 任务类型 1:标签建群任务 2:sop任务 + * @return + */ + @GetMapping("/scope/{taskId}") + public AjaxResult getTaskScopeList(@PathVariable("taskId") Long taskId, @RequestParam(value = "type") Integer type) { + if (type.equals(CommunityTaskType.TAG.getType())) { + return AjaxResult.success(tagGroupTaskService.getScopeListByTaskId(taskId)); + } else { + return AjaxResult.success(sopService.getScopeListByRuleId(taskId)); + } + } + + /** + * h5页面根据员工id获取老客标签建群和群sop任务信息 + * + * @param emplId 员工id + * @param type 数据类型,0:全部数据 1:老客标签建群数据 2:群SOP数据 + * @return + */ + @GetMapping("/{emplId}") + public AjaxResult getEmplTask(@PathVariable("emplId") String emplId, @RequestParam(value = "type") Integer type) { + AjaxResult res = AjaxResult.success(); + if (type.equals(CommunityTaskType.TAG.getType())) { + // 老客标签建群数据 + res.put("todo", tagGroupTaskService.getEmplTaskList(emplId, false)); + res.put("done", tagGroupTaskService.getEmplTaskList(emplId, true)); + } else if (type.equals(CommunityTaskType.SOP.getType())) { + // 群SOP数据 + res.put("todo", sopService.getEmplTaskList(emplId, false)); + res.put("done", sopService.getEmplTaskList(emplId, true)); + } else { + // 全部数据 + List todoList = new ArrayList(); + List doneList = new ArrayList(); + todoList.addAll(tagGroupTaskService.getEmplTaskList(emplId, false)); + todoList.addAll(sopService.getEmplTaskList(emplId, false)); + res.put("todo", todoList); + doneList.addAll(tagGroupTaskService.getEmplTaskList(emplId, true)); + doneList.addAll(sopService.getEmplTaskList(emplId, true)); + res.put("done", doneList); + } + SysUser user = userService.selectUserByUserName(emplId); + boolean isAdmin = user != null && user.isAdmin(); + res.put("isAdmin", isAdmin); + return res; + } + + /** + * 员工发送老客标签建群任务信息或者发送sop到其客户群之后,变更其任务状态 + * + * @param taskId 老客标签建群时代表任务id,sop时,代表规则id + * @param emplId 老客标签建群时代表员工id,sop时,代表群主 + * @param type 类型 0:老客标签建群 1:sop + * @return 结果 + */ + @GetMapping("/changeStatus") + public AjaxResult changeStatus(@RequestParam("taskId") Long taskId, @RequestParam("emplId") String emplId, @RequestParam("type") Integer type) { + if (type.equals(0)) { + return toAjax(tagGroupTaskService.updateEmplTaskStatus(taskId, emplId)); + } else { + return toAjax(sopService.updateChatSopStatus(taskId, emplId)); + } + + } + + + /** + * 用于支持H5页面的名称和关键字检索 + * + * @param word 过滤字符 + * @return 结果 + */ + @GetMapping(path = "/filter") + public TableDataInfo filter(@RequestParam("word") String word) { + startPage(); + List taskList = keywordToGroupService.filterByNameOrKeyword(word); + return getDataTable(taskList); + } +} 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 index 1bac77bec022160befbf7dee8d2ceb621345f201..6a42e96430af168dbbd7c1eccf91e6432d68c972 100644 --- 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 @@ -12,7 +12,6 @@ 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.*; @@ -49,8 +48,7 @@ public class WeCommunityKeywordGroupController extends BaseController { @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); @@ -66,10 +64,7 @@ public class WeCommunityKeywordGroupController extends BaseController { // @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); + return AjaxResult.success(keywordToGroupService.getTaskById(taskId)); } /** diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityNewGroupController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityNewGroupController.java index a33dd50c4e5035242f9a31bb942eca49c57ac93c..9653871b4cf0c9019c73590c47a6567ce95e71fb 100644 --- a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityNewGroupController.java +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityNewGroupController.java @@ -2,6 +2,7 @@ package com.linkwechat.web.controller.wecom; import cn.hutool.core.collection.CollectionUtil; import com.linkwechat.common.annotation.Log; +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; @@ -9,17 +10,16 @@ import com.linkwechat.common.enums.BusinessType; import com.linkwechat.common.exception.wecom.WeComException; import com.linkwechat.common.utils.StringUtils; import com.linkwechat.common.utils.file.FileUtils; -import com.linkwechat.wecom.domain.WeCommunityNewGroup; import com.linkwechat.wecom.domain.WeEmpleCode; import com.linkwechat.wecom.domain.dto.WeCommunityNewGroupDto; import com.linkwechat.wecom.domain.vo.WeCommunityNewGroupVo; import com.linkwechat.wecom.service.IWeCommunityNewGroupService; +import com.linkwechat.wecom.service.IWeEmpleCodeService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Controller; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -31,7 +31,6 @@ import java.net.URL; import java.util.Arrays; import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -49,56 +48,8 @@ public class WeCommunityNewGroupController extends BaseController { @Autowired private IWeCommunityNewGroupService weCommunityNewGroupService; - /** - * 查询新客自动拉群列表 - */ - @ApiOperation(value = "查询新客自动拉群列表", httpMethod = "GET") - // @PreAuthorize("@ss.hasPermi('wecom:communityNewGroup:list')") - @GetMapping("/list") - public TableDataInfo> list(@RequestParam(value = "empleCodeName", required = false) String empleCodeName - , @RequestParam(value = "createBy", required = false) String createBy - , @RequestParam(value = "beginTime", required = false) String beginTime - , @RequestParam(value = "endTime", required = false) String endTime) { - startPage(); - List communityNewGroupVos = weCommunityNewGroupService.selectWeCommunityNewGroupList(empleCodeName, createBy, beginTime, endTime); - return getDataTable(communityNewGroupVos); - } - - /** - * 获取新客自动拉群详细信息 - */ - @ApiOperation(value = "获取新客自动拉群详细信息", httpMethod = "GET") - // @PreAuthorize("@ss.hasPermi('wecom:communityNewGroup:query')") - @GetMapping(value = "/{newGroupId}") - public AjaxResult getInfo(@PathVariable("newGroupId") @ApiParam("主键ID") String newGroupId) { - return AjaxResult.success(weCommunityNewGroupService.selectWeCommunityNewGroupById(new Long(newGroupId))); - } - - /** - * 修改新客自动拉群 - */ - @ApiOperation(value = "修改新客自动拉群", httpMethod = "PUT") - // @PreAuthorize("@ss.hasPermi('wecom:communityNewGroup:edit')") - @Log(title = "新客自动拉群", businessType = BusinessType.UPDATE) - @PutMapping("/update") - public AjaxResult edit(@RequestBody @Validated WeCommunityNewGroupDto communityNewGroupDto) { - weCommunityNewGroupService.updateWeCommunityNewGroup(communityNewGroupDto); - - return AjaxResult.success(); - } - - /** - * 删除新客自动拉群 - */ - @ApiOperation(value = "删除新客自动拉群", httpMethod = "DELETE") - // @PreAuthorize("@ss.hasPermi('wecom:communityNewGroup:remove')") - @Log(title = "新客自动拉群", businessType = BusinessType.DELETE) - @DeleteMapping("/delete/{ids}") - public AjaxResult remove(@PathVariable String ids) { - List idList = Arrays.stream(StringUtils.split(ids, ",")).collect(Collectors.toList()); - return toAjax(weCommunityNewGroupService.batchRemoveWeCommunityNewGroupIds(idList)); - } - + @Autowired + private IWeEmpleCodeService weEmpleCodeService; /** * 新增新客自动拉群 @@ -106,11 +57,10 @@ public class WeCommunityNewGroupController extends BaseController { @ApiOperation(value = "新增新客自动拉群", httpMethod = "POST") // @PreAuthorize("@ss.hasPermi('wecom:communityNewGroup:add')") @Log(title = "新客自动拉群", businessType = BusinessType.INSERT) - @PostMapping("/add") + @PostMapping("/") public AjaxResult add(@RequestBody @Validated WeCommunityNewGroupDto communityNewGroupDto) { try { - weCommunityNewGroupService.add(communityNewGroupDto); - return AjaxResult.success(); + return toAjax(weCommunityNewGroupService.add(communityNewGroupDto)); } catch (Exception e) { e.printStackTrace(); if (e instanceof WeComException) { @@ -119,9 +69,31 @@ public class WeCommunityNewGroupController extends BaseController { return AjaxResult.error("请求接口异常!"); } } - } + /** + * 单个下载 + * + * @param id 待下载员工活码 + * @param request 请求 + * @param response 响应 + */ + @ApiOperation(value = "员工活码下载", httpMethod = "GET") + // @PreAuthorize("@ss.hasPermi('wecom:code:download')") + @Log(title = "员工活码下载", businessType = BusinessType.OTHER) + @GetMapping("/download") + public void download(String id, HttpServletRequest request, HttpServletResponse response) { + Optional communityNewGroupVo = weCommunityNewGroupService.selectWeCommunityNewGroupById(Long.valueOf(id)); + communityNewGroupVo.ifPresent(e -> { + try { + WeEmpleCode empleCode = weEmpleCodeService.selectWeEmpleCodeById(e.getEmplCodeId()); + FileUtils.downloadFile(empleCode.getQrCode(), response.getOutputStream()); + } catch (IOException exc) { + exc.printStackTrace(); + } + }); + return; + } /** * 员工活码批量下载 @@ -129,30 +101,27 @@ public class WeCommunityNewGroupController extends BaseController { * @param ids 新客自动拉群ids * @param request 请求 * @param response 输出 - * @throws Exception */ @ApiOperation(value = "员工活码批量下载", httpMethod = "GET") // @PreAuthorize("@ss.hasPermi('wecom:code:downloadBatch')") @Log(title = "员工活码批量下载", businessType = BusinessType.OTHER) @GetMapping("/downloadBatch") - public void downloadBatch(String ids, HttpServletRequest request, HttpServletResponse response) { - List idList = Arrays.stream(Optional.ofNullable(ids).orElse("").split(",")) - .filter(StringUtils::isNotEmpty).collect(Collectors.toList()); + public void downloadBatch(Long[] ids, HttpServletRequest request, HttpServletResponse response) { try { - - List weCommunityNewGroupVos = weCommunityNewGroupService.selectWeCommunityNewGroupByIds(idList); - + List weCommunityNewGroupVos = weCommunityNewGroupService.selectWeCommunityNewGroupByIds(Arrays.asList(ids)); //zip输出流 ZipOutputStream zos = new ZipOutputStream(response.getOutputStream()); if (CollectionUtil.isNotEmpty(weCommunityNewGroupVos)) { for (WeCommunityNewGroupVo communityNewGroupVo : weCommunityNewGroupVos) { - String qrCode = communityNewGroupVo.getQrCode(); + // 获取改新客拉群对应员工活码的二维码 + WeEmpleCode empleCode = weEmpleCodeService.selectWeEmpleCodeById(communityNewGroupVo.getEmplCodeId()); + String qrCode = empleCode.getQrCode(); if (StringUtils.isEmpty(qrCode)) { continue; } URL url = new URL(qrCode); - //每个二维码名称 - String fileName = communityNewGroupVo.getEmpleCodeName() + communityNewGroupVo.getActivityScene() + ".jpg"; + // 二维码名称使用场景 + String fileName = empleCode.getScenario() + ".png"; zos.putNextEntry(new ZipEntry(fileName)); InputStream fis = url.openConnection().getInputStream(); byte[] buffer = new byte[1024]; @@ -168,27 +137,60 @@ public class WeCommunityNewGroupController extends BaseController { zos.close(); } catch (IOException e) { e.printStackTrace(); - } catch (Exception e) { - e.printStackTrace(); } } - @ApiOperation(value = "员工活码下载", httpMethod = "GET") - // @PreAuthorize("@ss.hasPermi('wecom:code:download')") - @Log(title = "员工活码下载", businessType = BusinessType.OTHER) - @GetMapping("/download") - public void download(String id, HttpServletRequest request, HttpServletResponse response) { - WeCommunityNewGroupVo communityNewGroupVo = weCommunityNewGroupService.selectWeCommunityNewGroupById(Long.valueOf(id)); - if (StringUtils.isEmpty(communityNewGroupVo.getQrCode())) { - return; - } else { - try { - FileUtils.downloadFile(communityNewGroupVo.getQrCode(), response.getOutputStream()); - } catch (IOException e) { - e.printStackTrace(); - } + /** + * 查询新客自动拉群列表 + */ + @ApiOperation(value = "查询新客自动拉群列表", httpMethod = "GET") + // @PreAuthorize("@ss.hasPermi('wecom:communityNewGroup:list')") + @GetMapping("/list") + public TableDataInfo> list( + @RequestParam(value = "emplCodeName", required = false) String emplCodeName, + @RequestParam(value = "createBy", required = false) String createBy, + @RequestParam(value = "beginTime", required = false) String beginTime, + @RequestParam(value = "endTime", required = false) String endTime) { + startPage(); + List communityNewGroupVos = weCommunityNewGroupService.selectWeCommunityNewGroupList(emplCodeName, createBy, beginTime, endTime); + return getDataTable(communityNewGroupVos); + } + + /** + * 获取新客自动拉群详细信息 + */ + @ApiOperation(value = "获取新客自动拉群详细信息", httpMethod = "GET") + // @PreAuthorize("@ss.hasPermi('wecom:communityNewGroup:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") @ApiParam("主键ID") String id) { + Optional communityNewGroupVo = weCommunityNewGroupService.selectWeCommunityNewGroupById(Long.valueOf(id)); + if (communityNewGroupVo.isPresent()) { + return AjaxResult.success(communityNewGroupVo); } + return AjaxResult.error(HttpStatus.NOT_FOUND, "新客拉群信息不存在"); + } + + /** + * 修改新客自动拉群 + */ + @ApiOperation(value = "修改新客自动拉群", httpMethod = "PUT") + // @PreAuthorize("@ss.hasPermi('wecom:communityNewGroup:edit')") + @Log(title = "新客自动拉群", businessType = BusinessType.UPDATE) + @PutMapping("/{id}") + public AjaxResult edit(@PathVariable("id") String id, @RequestBody @Validated WeCommunityNewGroupDto communityNewGroupDto) { + return toAjax(weCommunityNewGroupService.updateWeCommunityNewGroup(Long.valueOf(id), communityNewGroupDto)); } + /** + * 删除新客自动拉群 + */ + @ApiOperation(value = "删除新客自动拉群", httpMethod = "DELETE") + // @PreAuthorize("@ss.hasPermi('wecom:communityNewGroup:remove')") + @Log(title = "新客自动拉群", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(weCommunityNewGroupService.batchRemoveWeCommunityNewGroupByIds(Arrays.asList(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 index 30b18ba966158e14b415d5a7739bc698ca6c30a9..6ab2df6c6cc4b9838918dd992cdabe4675ac051a 100644 --- 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 @@ -5,12 +5,13 @@ 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.common.utils.SecurityUtils; +import com.linkwechat.common.utils.StringUtils; +import com.linkwechat.common.utils.bean.BeanUtils; +import com.linkwechat.wecom.domain.WePresTagGroupTask; 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; @@ -42,7 +43,7 @@ public class WeCommunityPresTagGroupController extends BaseController { @RequestParam(value = "beginTime", required = false) String beginTime, @RequestParam(value = "endTime", required = false) String endTime) { startPage(); - List wePresTagGroupTaskVoList = taskService.selectTaskListList(taskName, sendType, createBy, beginTime, endTime); + List wePresTagGroupTaskVoList = taskService.selectTaskList(taskName, sendType, createBy, beginTime, endTime); return getDataTable(wePresTagGroupTaskVoList); } @@ -57,9 +58,20 @@ public class WeCommunityPresTagGroupController extends BaseController { return AjaxResult.error("任务名已存在"); } if (null == groupCodeService.selectWeGroupCodeById(wePresTagGroupTaskDto.getGroupCodeId())) { - return AjaxResult.error(HttpStatus.NOT_FOUND,"群活码不存在"); + return AjaxResult.error(HttpStatus.NOT_FOUND, "群活码不存在"); } - return toAjax(taskService.add(wePresTagGroupTaskDto)); + // 创建新任务并保存 + WePresTagGroupTask task = new WePresTagGroupTask(); + BeanUtils.copyProperties(wePresTagGroupTaskDto, task); + task.setCreateBy(SecurityUtils.getUsername()); + List tagList = wePresTagGroupTaskDto.getTagList(); + List scopeList = wePresTagGroupTaskDto.getScopeList(); + int affectedRows = taskService.add(task, tagList, scopeList); + if (affectedRows > 0) { + // 若保存成功,则进行异步消息推送 + taskService.sendMessage(task); + } + return toAjax(affectedRows); } /** @@ -69,14 +81,10 @@ public class WeCommunityPresTagGroupController extends BaseController { @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); + if (StringUtils.isNull(taskVo)) { + return AjaxResult.error(HttpStatus.NOT_FOUND, "群活码不存在"); + } + return AjaxResult.success(); } /** @@ -94,7 +102,7 @@ public class WeCommunityPresTagGroupController extends BaseController { return AjaxResult.error("任务名已存在"); } if (null == groupCodeService.selectWeGroupCodeById(wePresTagGroupTaskDto.getGroupCodeId())) { - return AjaxResult.error(HttpStatus.NOT_FOUND,"群活码不存在"); + return AjaxResult.error(HttpStatus.NOT_FOUND, "群活码不存在"); } return toAjax(taskService.updateTask(id, wePresTagGroupTaskDto)); } @@ -118,10 +126,12 @@ public class WeCommunityPresTagGroupController extends BaseController { @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); + List statVoList = taskService.getStatByTaskId(id); return getDataTable(statVoList); } + } diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeConversationArchiveController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeConversationArchiveController.java index 21a1610ecaa91513dd2ac7e522c1e8cf12381b99..fa47b970d12e66c4ef2a94d9a8abe581fe2fcd4f 100644 --- a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeConversationArchiveController.java +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeConversationArchiveController.java @@ -1,9 +1,13 @@ package com.linkwechat.web.controller.wecom; +import com.alibaba.fastjson.JSONObject; +import com.github.pagehelper.PageInfo; import com.linkwechat.common.core.controller.BaseController; import com.linkwechat.common.core.domain.ConversationArchiveQuery; import com.linkwechat.common.core.page.TableDataInfo; import com.linkwechat.wecom.service.IWeConversationArchiveService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -16,6 +20,7 @@ import org.springframework.web.bind.annotation.RestController; * @description 会话存档controller * @date 2020/12/19 13:51 **/ +@Api("会话存档controller") @Slf4j @RestController @RequestMapping("/wecom/finance") @@ -32,8 +37,9 @@ public class WeConversationArchiveController extends BaseController { * @return */ // @PreAuthorize("@ss.hasPermi('conversationArchive:chatContact:list')") + @ApiOperation(value = "获取单聊会话数据接口",httpMethod = "GET") @GetMapping("/getChatContactList") - public TableDataInfo getChatContactList(ConversationArchiveQuery query) { + public TableDataInfo> getChatContactList(ConversationArchiveQuery query) { return getDataTable(weConversationArchiveService.getChatContactList(query)); } @@ -47,8 +53,9 @@ public class WeConversationArchiveController extends BaseController { * @return */ // @PreAuthorize("@ss.hasPermi('conversationArchive:chatRoomContact:list')") + @ApiOperation(value = "获取群聊会话数据接口",httpMethod = "GET") @GetMapping("/getChatRoomContactList") - public TableDataInfo getChatRoomContactList(ConversationArchiveQuery query) { + public TableDataInfo> getChatRoomContactList(ConversationArchiveQuery query) { return getDataTable(weConversationArchiveService.getChatRoomContactList(query)); } @@ -60,8 +67,9 @@ public class WeConversationArchiveController extends BaseController { * @return */ // @PreAuthorize("@ss.hasPermi('conversationArchive:chatAllContact:list')") + @ApiOperation(value = "获取全局会话数据接口",httpMethod = "GET") @GetMapping("/getChatAllList") - public TableDataInfo getChatAllList(ConversationArchiveQuery query) { + public TableDataInfo> getChatAllList(ConversationArchiveQuery query) { return getDataTable(weConversationArchiveService.getChatAllList(query)); } diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeEmpleCodeController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeEmpleCodeController.java index 49f79ecb147483b42fae5912268868a6314d7a31..1b0461a9856dce22bd7541229c7c58af6dc65779 100644 --- a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeEmpleCodeController.java +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeEmpleCodeController.java @@ -169,7 +169,7 @@ public class WeEmpleCodeController extends BaseController { } URL url = new URL(qrCode); //每个二维码名称 - String fileName = weEmpleCode.getUseUserName()+"-"+weEmpleCode.getActivityScene()+".jpg"; + String fileName = weEmpleCode.getUseUserName()+"-"+weEmpleCode.getScenario()+".jpg"; zos.putNextEntry(new ZipEntry(fileName)); InputStream fis = url.openConnection().getInputStream(); byte[] buffer = new byte[1024]; diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeGroupCodeController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeGroupCodeController.java index 41efe6b72b036aa5940ddfaede13a57d61e1607b..b912d9288c01d31b93af6c7ca9061923066de7c4 100644 --- a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeGroupCodeController.java +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeGroupCodeController.java @@ -3,6 +3,7 @@ package com.linkwechat.web.controller.wecom; import cn.hutool.core.collection.CollectionUtil; import com.linkwechat.common.annotation.Log; import com.linkwechat.common.constant.HttpStatus; +import com.linkwechat.common.constant.WeConstans; import com.linkwechat.common.core.controller.BaseController; import com.linkwechat.common.core.domain.AjaxResult; import com.linkwechat.common.core.page.TableDataInfo; @@ -24,6 +25,7 @@ import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -41,7 +43,7 @@ import java.util.zip.ZipOutputStream; @RequestMapping("/wecom/groupCode") public class WeGroupCodeController extends BaseController { @Autowired - private IWeGroupCodeService weGroupCodeService; + private IWeGroupCodeService groupCodeService; /** * 查询客户群活码列表 @@ -50,7 +52,7 @@ public class WeGroupCodeController extends BaseController { @GetMapping("/list") public TableDataInfo list(WeGroupCode weGroupCode) { startPage(); - List list = weGroupCodeService.selectWeGroupCodeList(weGroupCode); + List list = groupCodeService.selectWeGroupCodeList(weGroupCode); return getDataTable(list); } @@ -64,7 +66,7 @@ public class WeGroupCodeController extends BaseController { List idList = Arrays.stream(Optional.ofNullable(ids).orElse("").split(",")) .filter(StringUtils::isNotEmpty).collect(Collectors.toList()); try { - List weGroupCodeList = weGroupCodeService.selectWeGroupCodeListByIds(idList); + List weGroupCodeList = groupCodeService.selectWeGroupCodeListByIds(idList); ZipOutputStream zos = new ZipOutputStream(response.getOutputStream()); if (CollectionUtil.isNotEmpty(weGroupCodeList)) { for (WeGroupCode weGroupCode : weGroupCodeList) { @@ -96,7 +98,7 @@ public class WeGroupCodeController extends BaseController { @Log(title = "群活码下载", businessType = BusinessType.OTHER) @GetMapping("/download") public void download(String id, HttpServletRequest request, HttpServletResponse response) { - WeGroupCode weGroupCode = weGroupCodeService.selectWeGroupCodeById(Long.valueOf(id)); + WeGroupCode weGroupCode = groupCodeService.selectWeGroupCodeById(Long.valueOf(id)); try { FileUtils.downloadFile(weGroupCode.getCodeUrl(), response.getOutputStream()); } catch (IOException e) { @@ -104,30 +106,17 @@ public class WeGroupCodeController extends BaseController { } } -// /** -// * 导出客户群活码列表 -// */ -// @PreAuthorize("@ss.hasPermi('wecom:code:export')") -// @Log(title = "客户群活码", businessType = BusinessType.EXPORT) -// @GetMapping("/export") -// public AjaxResult export(WeGroupCode weGroupCode) -// { -// List list = weGroupCodeService.selectWeGroupCodeList(weGroupCode); -// ExcelUtil util = new ExcelUtil(WeGroupCode.class); -// return util.exportExcel(list, "code"); -// } - /** * 获取客户群活码详细信息 */ // @PreAuthorize("@ss.hasPermi('drainageCode:group:query')") @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") Long id) { - WeGroupCode weGroupCode = weGroupCodeService.selectWeGroupCodeById(id); + WeGroupCode weGroupCode = groupCodeService.selectWeGroupCodeById(id); if (StringUtils.isNull(weGroupCode)) { return AjaxResult.error(HttpStatus.NOT_FOUND, "数据不存在"); } - List weGroupCodeActualList = weGroupCodeService.selectActualListByGroupCodeId(weGroupCode.getId()); + List weGroupCodeActualList = groupCodeService.selectActualListByGroupCodeId(weGroupCode.getId()); weGroupCode.setActualList(weGroupCodeActualList); return AjaxResult.success(weGroupCode); } @@ -140,12 +129,12 @@ public class WeGroupCodeController extends BaseController { @PostMapping public AjaxResult add(@Validated @RequestBody WeGroupCode weGroupCode) { // 唯一性检查 - if (!weGroupCodeService.checkActivityNameUnique(weGroupCode)) { + if (!groupCodeService.checkActivityNameUnique(weGroupCode)) { return AjaxResult.error("添加群活码失败,活码名称 " + weGroupCode.getActivityName() + " 已存在"); } AjaxResult ajax = AjaxResult.success(); weGroupCode.setCreateBy(SecurityUtils.getUsername()); - weGroupCodeService.insertWeGroupCode(weGroupCode); + groupCodeService.insertWeGroupCode(weGroupCode); ajax.put("id", weGroupCode.getId()); return ajax; } @@ -157,18 +146,18 @@ public class WeGroupCodeController extends BaseController { @Log(title = "客户群活码", businessType = BusinessType.UPDATE) @PutMapping(value = "/{id}") public AjaxResult edit(@PathVariable("id") Long id, @RequestBody WeGroupCode weGroupCode) { - WeGroupCode originalCode = weGroupCodeService.selectWeGroupCodeById(id); + WeGroupCode originalCode = groupCodeService.selectWeGroupCodeById(id); if (StringUtils.isNull(originalCode)) { return AjaxResult.error(HttpStatus.NOT_FOUND, "数据不存在"); } // 唯一性检查 if (!originalCode.getActivityName().equals(weGroupCode.getActivityName()) && - !weGroupCodeService.checkActivityNameUnique(weGroupCode)) { + !groupCodeService.checkActivityNameUnique(weGroupCode)) { return AjaxResult.error("修改群活码失败,活码名称 " + weGroupCode.getActivityName() + " 已存在"); } weGroupCode.setId(id); weGroupCode.setUpdateBy(SecurityUtils.getUsername()); - return toAjax(weGroupCodeService.updateWeGroupCode(weGroupCode)); + return toAjax(groupCodeService.updateWeGroupCode(weGroupCode)); } /** @@ -178,19 +167,42 @@ public class WeGroupCodeController extends BaseController { @Log(title = "客户群活码", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public AjaxResult batchRemove(@PathVariable Long[] ids) { - return toAjax(weGroupCodeService.deleteWeGroupCodeByIds(ids)); + return toAjax(groupCodeService.deleteWeGroupCodeByIds(ids)); } -// /** -// * 删除客户群活码 -// */ -// @PreAuthorize("@ss.hasPermi('wecom:code:remove')") -// @Log(title = "客户群活码", businessType = BusinessType.DELETE) -// @DeleteMapping("/{ids}") -// public AjaxResult remove(@PathVariable Long[] ids) -// { -// return toAjax(weGroupCodeService.deleteWeGroupCodeByIds(ids)); -// } + /** + * 从群活码获取第一个可用的实际码 + */ + @GetMapping("/getActualCode/{groupCodeId}") + public AjaxResult getActual(@PathVariable("groupCodeId") String groupCodeUuid) { + WeGroupCode groupCode = groupCodeService.getWeGroupByUuid(groupCodeUuid); + List actualCodeList = groupCodeService.selectActualListByGroupCodeId(groupCode.getId()); + WeGroupCodeActual groupCodeActual = null; + for (WeGroupCodeActual item : actualCodeList) { + // 获取第一个可用的实际码 + if (item.getStatus().intValue() == WeConstans.WE_GROUP_CODE_ENABLE) { + groupCodeActual = item; + break; + } + } + if (StringUtils.isNotNull(groupCodeActual)) { + AjaxResult ajax = AjaxResult.success(); + + HashMap data = new HashMap<>(); + data.put("activityName", groupCode.getActivityName()); + data.put("tipMsg", groupCode.getTipMsg()); + data.put("guide", groupCode.getGuide()); + data.put("actualQRCode", groupCodeActual.getActualGroupQrCode()); + data.put("isOpenTip", groupCode.getJoinGroupIsTip().toString()); + data.put("serviceQrCode", groupCode.getCustomerServerQrCode()); + data.put("groupName", groupCodeActual.getChatGroupName()); + ajax.put("data", data); + return ajax; + } else { + // 找不到可用的实际群活码也不要抛出错误,否则前端H5页面不好处理。 + return AjaxResult.success("没有可用的实际群活码!"); + } + } } diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeMaterialController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeMaterialController.java index 85bfdf2e39253fe95c54d7c153d89bf90fd3796e..443666a0b0630f4e8cfb111531e697533ebb1dc1 100644 --- a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeMaterialController.java +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeMaterialController.java @@ -8,6 +8,7 @@ import com.linkwechat.common.enums.BusinessType; import com.linkwechat.common.enums.MediaType; import com.linkwechat.wecom.domain.WeMaterial; import com.linkwechat.wecom.domain.dto.ResetCategoryDto; +import com.linkwechat.wecom.domain.dto.TemporaryMaterialDto; import com.linkwechat.wecom.domain.dto.WeMediaDto; import com.linkwechat.wecom.domain.vo.WeMaterialFileVO; import com.linkwechat.wecom.service.IWeMaterialService; @@ -135,10 +136,12 @@ public class WeMaterialController extends BaseController { //@PreAuthorize("@ss.hasPermi('wechat:material:temporaryMaterialMediaId')") @Log(title = "获取素材media_id", businessType = BusinessType.OTHER) - @GetMapping("/temporaryMaterialMediaId") + @PostMapping("/temporaryMaterialMediaId") @ApiOperation("获取素材media_id") - public AjaxResult temporaryMaterialMediaId(@RequestParam(value = "url") String url, @RequestParam(value = "type") String type,@RequestParam(value = "name") String name){ - WeMediaDto weMediaDto = materialService.uploadTemporaryMaterial(url, type,name); + public AjaxResult temporaryMaterialMediaId(@RequestBody TemporaryMaterialDto temporaryMaterialDto){ + WeMediaDto weMediaDto = materialService.uploadTemporaryMaterial(temporaryMaterialDto.getUrl(), + temporaryMaterialDto.getType() + ,temporaryMaterialDto.getName()); return AjaxResult.success(weMediaDto); } 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 08ffd6ae0f221723225f568c02fc6cf9d0af9fc5..403f4b3ce01b976a6cc29638f56def6a91580e9b 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 @@ -2,8 +2,9 @@ package com.linkwechat.web.controller.wecom; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; +import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSONObject; -import com.alibaba.nacos.common.utils.CollectionUtils; +//import com.alibaba.nacos.common.utils.CollectionUtils; import com.google.common.collect.Lists; import com.linkwechat.common.annotation.Log; import com.linkwechat.common.config.CosConfig; @@ -151,6 +152,12 @@ public class WeTaskFissionController extends BaseController { CopyOptions options = CopyOptions.create(); options.setIgnoreNullValue(true); BeanUtil.copyProperties(weTaskFission, fissionTask, options); + if (CollectionUtil.isNotEmpty(weTaskFission.getTaskFissionStaffs())) { + fissionTask.setTaskFissionStaffs(weTaskFission.getTaskFissionStaffs()); + } + if (CollectionUtil.isNotEmpty(weTaskFission.getTaskFissionWeGroups())) { + fissionTask.setTaskFissionWeGroups(weTaskFission.getTaskFissionWeGroups()); + } Long id = weTaskFissionService.updateWeTaskFission(fissionTask); JSONObject json = new JSONObject(); json.put("id", id); @@ -222,7 +229,7 @@ public class WeTaskFissionController extends BaseController { public AjaxResult upload(@RequestParam(value = "file") MultipartFile file) throws IOException { String url = FileUploadUtils.upload2Cos(file, cosConfig); JSONObject json = new JSONObject(); - json.put("rewardImageUrl", url); + json.put("rewardImageUrl", cosConfig.getImgUrlPrefix()+url); return AjaxResult.success(json); } @@ -245,12 +252,12 @@ public class WeTaskFissionController extends BaseController { @ApiOperation(value = "获取客户邀请列表和任务进度", httpMethod = "GET") // @PreAuthorize("@ss.hasPermi('wecom:fission:getCustomerProgress')") @Log(title = "获取客户邀请列表和任务进度", businessType = BusinessType.OTHER) - @GetMapping("/{id}/progress/{eid}") + @GetMapping("/{id}/progress/{unionId}") public AjaxResult getCustomerProgress(@ApiParam("任务id") @PathVariable("id") Long id - , @PathVariable("eid") @ApiParam("客户id") String eid) { + , @PathVariable("unionId") @ApiParam("客户id") String unionId) { WeTaskFission weTaskFission = weTaskFissionService.selectWeTaskFissionById(id); if (weTaskFission != null) { - return AjaxResult.success(weTaskFissionService.getCustomerTaskProgress(weTaskFission, eid)); + return AjaxResult.success(weTaskFissionService.getCustomerTaskProgress(weTaskFission, unionId)); } else { throw new WeComException("任务不存在"); } @@ -268,7 +275,7 @@ public class WeTaskFissionController extends BaseController { List list = Lists.newArrayList(); if (weTaskFission != null) { List customers = weTaskFissionService.getCustomerListById(null, String.valueOf(id)); - if (CollectionUtils.isNotEmpty(customers)) { + if (StringUtils.isNotEmpty(customers)) { customers.stream().filter(Objects::nonNull).forEach(customer -> { WeTaskFissionTotalProgressVO vo = new WeTaskFissionTotalProgressVO(); vo.setCustomer(customer); diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeTaskFissionRewardController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeTaskFissionRewardController.java index f08cdb3863ce7deebc27b7cfd3b2ca898daf6d0d..e31c4179d05a4f50a96073e9ef02d9038e16e8ef 100644 --- a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeTaskFissionRewardController.java +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeTaskFissionRewardController.java @@ -106,9 +106,9 @@ public class WeTaskFissionRewardController extends BaseController { */ @ApiOperation(value = "根据微信用户id和任务id获取任务裂变奖励详细信息",httpMethod = "GET") // @PreAuthorize("@ss.hasPermi('wecom:getRewardByFissionId:query')") - @GetMapping(value = "/getRewardByFissionId/{fissionId}/{eid}") + @GetMapping(value = "/getRewardByFissionId/{fissionId}/{unionId}") public AjaxResult getRewardByFissionId(@ApiParam("任务id") @PathVariable("fissionId") String fissionId - , @PathVariable("eid") @ApiParam("客户id") String eid) { - return AjaxResult.success(weTaskFissionRewardService.getRewardByFissionId(fissionId,eid)); + , @PathVariable("unionId") @ApiParam("客户id") String unionId) { + return AjaxResult.success(weTaskFissionRewardService.getRewardByFissionId(fissionId,unionId)); } } diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeUserController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeUserController.java index 543e526d90c7b77f145b72e80d315c986eeb5ec0..1d34cd2bfe563e0f64f96f344509931358f4702f 100644 --- a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeUserController.java +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeUserController.java @@ -7,16 +7,12 @@ import com.linkwechat.common.core.domain.AjaxResult; import com.linkwechat.common.core.page.TableDataInfo; import com.linkwechat.common.enums.BusinessType; import com.linkwechat.wecom.domain.WeUser; -import com.linkwechat.wecom.domain.vo.WeAllocateCustomersVo; -import com.linkwechat.wecom.domain.vo.WeAllocateGroupsVo; -import com.linkwechat.wecom.domain.vo.WeLeaveUserInfoAllocateVo; -import com.linkwechat.wecom.domain.vo.WeLeaveUserVo; -import com.linkwechat.wecom.service.IWeCustomerService; +import com.linkwechat.wecom.domain.vo.*; import com.linkwechat.wecom.service.IWeUserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; 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.*; @@ -25,13 +21,14 @@ import java.util.List; /** * 通讯录相关客户Controller - * + * * @author ruoyi * @date 2020-08-31 */ @RestController @RequestMapping("/wecom/user") @Api("通讯录人员接口") +@Slf4j public class WeUserController extends BaseController { @Autowired @@ -44,23 +41,19 @@ public class WeUserController extends BaseController { // @PreAuthorize("@ss.hasPermi('contacts:organization:query')") @GetMapping("/list") @ApiOperation("获取通讯录人员列表") - public TableDataInfo list(WeUser weUser) - { + public TableDataInfo list(WeUser weUser) { startPage(); - List list = weUserService.selectWeUserList(weUser); return getDataTable(list); } - /** * 获取通讯录相关客户详细信息 */ // @PreAuthorize("@ss.hasPermi('contacts:organization:view')") @GetMapping(value = "/{userId}") - public AjaxResult getInfo(@PathVariable("userId") String userId) - { + public AjaxResult getInfo(@PathVariable("userId") String userId) { return AjaxResult.success(weUserService.selectWeUserById(userId)); } @@ -71,8 +64,7 @@ public class WeUserController extends BaseController { @Log(title = "通讯录相关客户", businessType = BusinessType.INSERT) @PostMapping @ApiOperation("新增通讯录客户") - public AjaxResult add(@Validated @RequestBody WeUser weUser) - { + public AjaxResult add(@Validated @RequestBody WeUser weUser) { weUserService.insertWeUser(weUser); return AjaxResult.success(); } @@ -84,8 +76,7 @@ public class WeUserController extends BaseController { @Log(title = "更新通讯录客户", businessType = BusinessType.UPDATE) @PutMapping @ApiOperation("更新通讯录客户") - public AjaxResult edit(@RequestBody WeUser weUser) - { + public AjaxResult edit(@RequestBody WeUser weUser) { weUserService.updateWeUser(weUser); return AjaxResult.success(); } @@ -93,6 +84,7 @@ public class WeUserController extends BaseController { /** * 启用或者禁止 + * * @param weUser * @return */ @@ -100,7 +92,7 @@ public class WeUserController extends BaseController { @Log(title = "启用禁用用户", businessType = BusinessType.UPDATE) @PutMapping("/startOrStop") @ApiOperation("是否启用(1表示启用成员,0表示禁用成员)") - public AjaxResult startOrStop(@RequestBody WeUser weUser){ + public AjaxResult startOrStop(@RequestBody WeUser weUser) { weUserService.startOrStop(weUser); @@ -110,73 +102,78 @@ public class WeUserController extends BaseController { /** * 离职已分配 + * * @param weLeaveUserVo * @return */ // @PreAuthorize("@ss.hasPermi('customerManage:dimission:filter')") - @GetMapping({"/leaveUserAllocateList"}) - public TableDataInfo leaveUserAllocateList(WeLeaveUserVo weLeaveUserVo) { - startPage(); - weLeaveUserVo.setIsActivate(WeConstans.WE_USER_IS_LEAVE); - weLeaveUserVo.setIsAllocate(WeConstans.LEAVE_ALLOCATE_STATE); - List list = this.weUserService.leaveAllocateUserList(weLeaveUserVo); - return getDataTable(list); - } + @GetMapping({"/leaveUserAllocateList"}) + public TableDataInfo leaveUserAllocateList(WeLeaveUserVo weLeaveUserVo) { + startPage(); + weLeaveUserVo.setIsActivate(WeConstans.WE_USER_IS_LEAVE); + weLeaveUserVo.setIsAllocate(WeConstans.LEAVE_ALLOCATE_STATE); + List list = this.weUserService.leaveAllocateUserList(weLeaveUserVo); + return getDataTable(list); + } /** * 离职未分配 + * * @param weLeaveUserVo * @return */ // @PreAuthorize("@ss.hasPermi('customerManage:dimission:query')") - @GetMapping({"/leaveUserNoAllocateList"}) - public TableDataInfo leaveUserNoAllocateList(WeLeaveUserVo weLeaveUserVo) { + @GetMapping({"/leaveUserNoAllocateList"}) + public TableDataInfo leaveUserNoAllocateList(WeLeaveUserVo weLeaveUserVo) { startPage(); weLeaveUserVo.setIsActivate(WeConstans.WE_USER_IS_LEAVE); weLeaveUserVo.setIsAllocate(WeConstans.LEAVE_NO_ALLOCATE_STATE); List list = weUserService.leaveNoAllocateUserList(weLeaveUserVo); return getDataTable(list); - } + } /** * 离职分配 + * * @param weLeaveUserInfoAllocateVo * @return */ // @PreAuthorize("@ss.hasPermi('customerManage:dimission:allocate')") - @PutMapping({"/allocateLeaveUserAboutData"}) - public AjaxResult allocateLeaveUserAboutData(@RequestBody WeLeaveUserInfoAllocateVo weLeaveUserInfoAllocateVo) { + @PutMapping({"/allocateLeaveUserAboutData"}) + public AjaxResult allocateLeaveUserAboutData(@RequestBody WeLeaveUserInfoAllocateVo weLeaveUserInfoAllocateVo) { - weUserService.allocateLeaveUserAboutData(weLeaveUserInfoAllocateVo); + weUserService.allocateLeaveUserAboutData(weLeaveUserInfoAllocateVo); - return AjaxResult.success("离职分配成功"); + return AjaxResult.success("离职分配成功"); } /** - * 同步成员 + * 同步成员 + * * @return */ // @PreAuthorize("@ss.hasPermi('contacts:organization:sync')") @GetMapping({"/synchWeUser"}) - public AjaxResult synchWeUser(){ + public AjaxResult synchWeUser() { weUserService.synchWeUser(); - return AjaxResult.success(WeConstans.SYNCH_TIP); + return AjaxResult.success(WeConstans.SYNCH_TIP); } /** * 删除用户 + * * @return */ // @PreAuthorize("@ss.hasPermi('contacts:organization:removeMember')") @DeleteMapping({"/{ids}"}) - public AjaxResult deleteUser(@PathVariable String[] ids){ + public AjaxResult deleteUser(@PathVariable String[] ids) { weUserService.deleteUser(ids); @@ -188,27 +185,28 @@ public class WeUserController extends BaseController { /** * 获取历史分配记录的成员 + * * @param weAllocateCustomersVo * @return */ // @PreAuthorize("@ss.hasPermi('wecom:user:getAllocateCustomers')") @GetMapping({"/getAllocateCustomers"}) - public TableDataInfo getAllocateCustomers(WeAllocateCustomersVo weAllocateCustomersVo){ + public TableDataInfo getAllocateCustomers(WeAllocateCustomersVo weAllocateCustomersVo) { startPage(); List list = weUserService.getAllocateCustomers(weAllocateCustomersVo); return getDataTable(list); } - /** * 获取历史分配记录的群 + * * @param weAllocateGroupsVo * @return */ // @PreAuthorize("@ss.hasPermi('wecom:user:getAllocateGroups')") @GetMapping({"/getAllocateGroups"}) - public TableDataInfo getAllocateGroups(WeAllocateGroupsVo weAllocateGroupsVo){ + public TableDataInfo getAllocateGroups(WeAllocateGroupsVo weAllocateGroupsVo) { startPage(); List list = weUserService.getAllocateGroups(weAllocateGroupsVo); return getDataTable(list); @@ -217,20 +215,13 @@ public class WeUserController extends BaseController { /** * 内部应用获取用户userId + * * @param code * @return */ @GetMapping("/getUserInfo") - public AjaxResult getUserInfo(String code,String agentId) - { - - return AjaxResult.success( - weUserService.getUserInfo(code,agentId) - ); + public AjaxResult getUserInfo(String code, String agentId) { + WeUserInfoVo userInfo = weUserService.getUserInfo(code, agentId); + return AjaxResult.success(userInfo); } - - - - - } diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/weixin/WxAuthController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/weixin/WxAuthController.java new file mode 100644 index 0000000000000000000000000000000000000000..560bc67d1064fbecefe288fecfdba1b7ac4a1440 --- /dev/null +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/weixin/WxAuthController.java @@ -0,0 +1,48 @@ +package com.linkwechat.web.controller.weixin; + +import com.linkwechat.common.core.domain.AjaxResult; +import com.linkwechat.web.controller.common.CommonController; +import com.linkwechat.wecom.domain.weixin.dto.WxAuthUserInfoDto; +import com.linkwechat.wecom.domain.weixin.dto.WxTokenDto; +import com.linkwechat.wecom.service.IWxAuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author danmo + * @description 微信授权controller + * @date 2021/4/5 18:37 + **/ +@Api("微信授权controller") +@Slf4j +@RestController +@RequestMapping("/weixin/auth") +public class WxAuthController extends CommonController { + + @Autowired + private IWxAuthService wxAuthService; + + /** + * 通过code获取网页授权token + */ + @ApiOperation(value = "通过code获取网页授权token",httpMethod = "GET") + @GetMapping("/getToken") + public AjaxResult getToken(@ApiParam(value = "URL上的code参数",required = true) String code, @ApiParam(value = "用户的唯一标识",required = false) String openId) { + return AjaxResult.success(wxAuthService.getToken(code,openId)); + } + + /** + * 拉取用户信息(需scope为 snsapi_userinfo) + */ + @ApiOperation(value = "拉取用户信息(需scope为 snsapi_userinfo)",httpMethod = "GET") + @GetMapping("/getUserInfo") + public AjaxResult getUserInfo(@ApiParam(value = "用户的唯一标识",required = true) String openId, @ApiParam(value = "语言版本",required = true) String lang) { + return AjaxResult.success(wxAuthService.getUserInfo(openId,lang)); + } +} diff --git a/linkwe-admin/src/main/resources/application.yml b/linkwe-admin/src/main/resources/application.yml index f69eb0b637f5dd770b748559efebbae864f36a0e..680d8fe98b9537d0fe9f1a4dd16173ee6f4c0a91 100644 --- a/linkwe-admin/src/main/resources/application.yml +++ b/linkwe-admin/src/main/resources/application.yml @@ -221,6 +221,10 @@ wecome: appIdOrCorpId: ww24262ce93851488f token: jtQ1aGHgSmH2UHNBIndUtUe6B6EwfR encodingAesKey: Vga4HWv7nFbRDYK8iAaQbxmkuecpo2BAfmXAyWwcXMO + # JS SDK 身份校验url + authorizeUrl: https://open.weixin.qq.com/connect/oauth2/authorize + # JS SDK身份校验成功后的redirect url + authorizeRedirectUrl: http://www.linkwechat.cn/mobile/#/task #腾讯云对象存储 cos: secretId: AKIDQRCizIeUGl13vakkDQMH0VkjhPr1rBBv diff --git a/linkwe-common/src/main/java/com/linkwechat/common/constant/WeConstans.java b/linkwe-common/src/main/java/com/linkwechat/common/constant/WeConstans.java index 9ab793bf7adb8a1a1fc43a245164c8271e0a6707..d51c77cfc0d30c47ccb8b71917989cbc766c4fa9 100644 --- a/linkwe-common/src/main/java/com/linkwechat/common/constant/WeConstans.java +++ b/linkwe-common/src/main/java/com/linkwechat/common/constant/WeConstans.java @@ -13,6 +13,17 @@ import java.util.Map; **/ public class WeConstans { + /** + * 微信授权token + */ + public static final String WX_AUTH_ACCESS_TOKEN = "wx_auth_access_token"; + public static final String WX_AUTH_REFRESH_ACCESS_TOKEN = "wx_auth_refresh_access_token"; + + /** + * 微信通用token + */ + public static final String WX_ACCESS_TOKEN = "wx_access_token"; + /** * 企业微信相关token */ diff --git a/linkwe-common/src/main/java/com/linkwechat/common/core/domain/ConversationArchiveQuery.java b/linkwe-common/src/main/java/com/linkwechat/common/core/domain/ConversationArchiveQuery.java index af9e1d6c72a338ac7aaa3ae37bd06924b6039b4e..d2b51eebc6fc1096b308a9ebd238fe619592d4e0 100644 --- a/linkwe-common/src/main/java/com/linkwechat/common/core/domain/ConversationArchiveQuery.java +++ b/linkwe-common/src/main/java/com/linkwechat/common/core/domain/ConversationArchiveQuery.java @@ -1,5 +1,7 @@ package com.linkwechat.common.core.domain; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** @@ -7,29 +9,38 @@ import lombok.Data; * @description 会话存档接口入参实体 * @date 2020/12/29 14:23 **/ +@ApiModel @Data public class ConversationArchiveQuery extends BaseEntity { /** 发送人Id */ - private String fromId; + @ApiModelProperty("发送人Id") + private String fromId=""; /** 成员名称 */ - private String userName; + @ApiModelProperty("成员名称") + private String userName=""; /** 接收人Id */ - private String receiveId; + @ApiModelProperty("接收人Id") + private String receiveId=""; /** 客户姓名 */ - private String customerName; + @ApiModelProperty("客户姓名") + private String customerName=""; /** 群聊Id */ - private String roomId; + @ApiModelProperty("群聊Id") + private String roomId=""; - /** 类型 */ - private String msgType; + /** 消息类型(同企微api文档消息类型) */ + @ApiModelProperty("消息类型(同企微api文档消息类型)") + private String msgType=""; /** 关键词 **/ - private String keyWord; + @ApiModelProperty("关键词") + private String keyWord=""; /** 消息动作 */ - private String action; + @ApiModelProperty("消息动作") + private String action=""; } diff --git a/linkwe-common/src/main/java/com/linkwechat/common/enums/CallbackEventUpdateDetail.java b/linkwe-common/src/main/java/com/linkwechat/common/enums/CallbackEventUpdateDetail.java new file mode 100644 index 0000000000000000000000000000000000000000..e1eedafe0a6f6b70145130e461cb05d75683127f --- /dev/null +++ b/linkwe-common/src/main/java/com/linkwechat/common/enums/CallbackEventUpdateDetail.java @@ -0,0 +1,27 @@ +package com.linkwechat.common.enums; + +import lombok.Getter; + +/** + * 客户群变更时间的回调参数 UpdateDetail + * 变更详情。目前有以下几种: + * add_member : 成员入群 + * del_member : 成员退群 + * change_owner : 群主变更 + * change_name : 群名变更 + * change_notice : 群公告变更 + */ +@Getter +public enum CallbackEventUpdateDetail { + ADD_MEMBER("add_member"), + DEL_MEMBER("del_member"), + CHANGE_OWNER("change_owner"), + CHANGE_NAME("change_name"), + CHANGE_NOTICE("change_notice"); + + private final String type; + + CallbackEventUpdateDetail(String type) { + this.type = type; + } +} diff --git a/linkwe-common/src/main/java/com/linkwechat/common/enums/CommunityTaskType.java b/linkwe-common/src/main/java/com/linkwechat/common/enums/CommunityTaskType.java new file mode 100644 index 0000000000000000000000000000000000000000..5a4a809c434098004ecae26ee72006b0e0ea33e3 --- /dev/null +++ b/linkwe-common/src/main/java/com/linkwechat/common/enums/CommunityTaskType.java @@ -0,0 +1,26 @@ +package com.linkwechat.common.enums; + +import lombok.Getter; + +/** + * 社群运营H5列表页数据类型 + * @Author Hang + * @Date 2021/3/24 11:02 + */ +@Getter +public enum CommunityTaskType { + + TAG(1, "老客标签建群"), + + SOP(2, "群sop"); + + + private final String name; + + private final Integer type; + + CommunityTaskType(Integer type, String name) { + this.name = name; + this.type = type; + } +} diff --git a/linkwe-common/src/main/java/com/linkwechat/common/enums/TaskSendType.java b/linkwe-common/src/main/java/com/linkwechat/common/enums/TaskSendType.java new file mode 100644 index 0000000000000000000000000000000000000000..f0ae063305a0a09c59ec74528f76f1a037b2eb2e --- /dev/null +++ b/linkwe-common/src/main/java/com/linkwechat/common/enums/TaskSendType.java @@ -0,0 +1,30 @@ +package com.linkwechat.common.enums; + +import lombok.Getter; + +/** + * 老客标签建群任务群发类型 + * @Author Hang + * @Date 2021/3/24 9:56 + */ +@Getter +public enum TaskSendType { + /** + * 个人群发 + */ + CROP(0, "企业群发"), + + /** + * 企业群发 + */ + SINGLE(1, "个人群发"); + + private final String name; + + private final Integer type; + + TaskSendType(Integer type, String name) { + this.name = name; + this.type = type; + } +} diff --git a/linkwe-common/src/main/java/com/linkwechat/common/enums/WeEmpleCodeType.java b/linkwe-common/src/main/java/com/linkwechat/common/enums/WeEmpleCodeType.java new file mode 100644 index 0000000000000000000000000000000000000000..979f3b5aee55f00c5496fcaf68b527a4b81365ba --- /dev/null +++ b/linkwe-common/src/main/java/com/linkwechat/common/enums/WeEmpleCodeType.java @@ -0,0 +1,29 @@ +package com.linkwechat.common.enums; + + +/** + * 群活码运用场景: 单人、多人、批量 + */ +public enum WeEmpleCodeType { + + // 员工活码类型:1:单人;2:多人;3:批量; + SINGLE(1, "单人"), + MULTI(2, "多人"), + BATCH(3, "批量"); + + private final Integer type; + private final String info; + + WeEmpleCodeType(Integer type, String info) { + this.type = type; + this.info = info; + } + + public Integer getType() { + return type; + } + + public String getInfo() { + return info; + } +} diff --git a/linkwe-framework/src/main/java/com/linkwechat/framework/config/SecurityConfig.java b/linkwe-framework/src/main/java/com/linkwechat/framework/config/SecurityConfig.java index 7d0d7b1b307c9928347e435544159ef09297318b..855e057040a22d0c776906c2dd39bb38ca2487cc 100644 --- a/linkwe-framework/src/main/java/com/linkwechat/framework/config/SecurityConfig.java +++ b/linkwe-framework/src/main/java/com/linkwechat/framework/config/SecurityConfig.java @@ -121,6 +121,15 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { .antMatchers("/wecom/ticket/**").anonymous() .antMatchers("/wecom/user/getUserInfo").anonymous() + // .antMatchers("/common/uploadFile2Cos").anonymous() +// .antMatchers("/wecom/material/temporaryMaterialMediaId").anonymous() + .antMatchers("/wecom/portrait/**").anonymous() + .antMatchers("/wecom/fission/poster", "/wecom/fission/*/progress/*", "/wecom/reward/getRewardByFissionId/**").anonymous() + // 获取实际群活码和社群运营H5页面不需要登录 + .antMatchers("/wecom/groupCode/getActualCode/**").anonymous() + .antMatchers("/wecom/community/h5/**").anonymous() + //微信授权接口 + .antMatchers("/weixin/auth/**").anonymous() // .antMatchers("/common/uploadFile2Cos").anonymous() .antMatchers("/wecom/material/temporaryMaterialMediaId").anonymous() diff --git a/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/TaskFissionStatusTask.java b/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/TaskFissionStatusTask.java new file mode 100644 index 0000000000000000000000000000000000000000..42f41623d2e766e84ef60468fb2cac8442a6ce1f --- /dev/null +++ b/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/TaskFissionStatusTask.java @@ -0,0 +1,25 @@ +package com.linkwechat.quartz.task; + +import com.linkwechat.wecom.service.IWeTaskFissionService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * @author danmo + * @description 任务状态处理 + * @date 2021/4/12 14:39 + **/ +@Slf4j +@Component("TaskFissionStatusTask") +public class TaskFissionStatusTask { + @Autowired + private IWeTaskFissionService weTaskFissionService; + + + public void taskFissionExpiredStatusHandle() { + log.info("任务宝过期时间处理--------------------------start"); + weTaskFissionService.updateExpiredWeTaskFission(); + log.info("任务宝过期时间处理--------------------------end"); + } +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAccessTokenClient.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAccessTokenClient.java index 2a3e6ec371bbdceb70e5c3cc84469396c28c1997..a563ffb143232c993a6f2a24a08e36cdbed306ea 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAccessTokenClient.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAccessTokenClient.java @@ -1,20 +1,20 @@ package com.linkwechat.wecom.client; +import com.dtflys.forest.annotation.BaseRequest; import com.dtflys.forest.annotation.Body; import com.dtflys.forest.annotation.Query; import com.dtflys.forest.annotation.Request; import com.linkwechat.wecom.domain.dto.WeAccessTokenDtoDto; import com.linkwechat.wecom.domain.dto.WeLoginUserInfoDto; +import com.linkwechat.wecom.interceptor.WeAccessTokenInterceptor; /** * @description: 获取企业微信Token相关 * @author: HaoN * @create: 2020-08-26 14:33 **/ +@BaseRequest(interceptor = WeAccessTokenInterceptor.class) public interface WeAccessTokenClient { - - - /** * 获取token(常用token,联系人token) * @param corpId 企业id 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 index 3405176232257c4cd0f1087b41d8399d7663545b..a7a40ead2d7ed71ea89879c6621621cf7a5c8dea 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAppClient.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAppClient.java @@ -1,15 +1,18 @@ package com.linkwechat.wecom.client; +import com.dtflys.forest.annotation.BaseRequest; 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; +import com.linkwechat.wecom.interceptor.WeAccessTokenInterceptor; /** * 应用管理相关接口 */ +@BaseRequest(interceptor = WeAccessTokenInterceptor.class) public interface WeAppClient { /** diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeCropTagClient.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeCropTagClient.java index 78805e84faf01db1c9e3dffc52f33020e88d3799..05700efb06a96f41f05768a0f830b3516ed7c68c 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeCropTagClient.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeCropTagClient.java @@ -1,16 +1,19 @@ package com.linkwechat.wecom.client; +import com.dtflys.forest.annotation.BaseRequest; import com.dtflys.forest.annotation.Body; import com.dtflys.forest.annotation.DataObject; import com.dtflys.forest.annotation.Request; import com.linkwechat.wecom.domain.dto.WeResultDto; import com.linkwechat.wecom.domain.dto.tag.*; +import com.linkwechat.wecom.interceptor.WeAccessTokenInterceptor; /** * @description: 企业微信标签相关 * @author: HaoN * @create: 2020-10-17 11:00 **/ +@BaseRequest(interceptor = WeAccessTokenInterceptor.class) public interface WeCropTagClient { /** diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeCustomerClient.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeCustomerClient.java index c18256ec21a4efcb8901c723f7c439fa6b535efe..e4219c3295e706e5af4764322512de394139d9dc 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeCustomerClient.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeCustomerClient.java @@ -1,13 +1,11 @@ package com.linkwechat.wecom.client; -import com.dtflys.forest.annotation.DataObject; -import com.dtflys.forest.annotation.JSONBody; -import com.dtflys.forest.annotation.Query; -import com.dtflys.forest.annotation.Request; +import com.dtflys.forest.annotation.*; import com.linkwechat.wecom.domain.dto.*; import com.linkwechat.wecom.domain.dto.customer.*; import com.linkwechat.wecom.domain.query.GroupChatStatisticQuery; import com.linkwechat.wecom.domain.query.UserBehaviorDataQuery; +import com.linkwechat.wecom.interceptor.WeAccessTokenInterceptor; import java.util.Map; @@ -17,6 +15,7 @@ import java.util.Map; * @author: HaoN * @create: 2020-09-15 14:15 **/ +@BaseRequest(interceptor = WeAccessTokenInterceptor.class) public interface WeCustomerClient { /** diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeCustomerGroupClient.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeCustomerGroupClient.java index 9adaa54557c80a52f0aba613ff91a273a8c178b4..963165aa74c62c30e24c9988f98fab2c37dd4aba 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeCustomerGroupClient.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeCustomerGroupClient.java @@ -1,16 +1,19 @@ package com.linkwechat.wecom.client; +import com.dtflys.forest.annotation.BaseRequest; import com.dtflys.forest.annotation.DataObject; import com.dtflys.forest.annotation.Query; import com.dtflys.forest.annotation.Request; import com.linkwechat.wecom.domain.dto.customer.CustomerGroupDetail; import com.linkwechat.wecom.domain.dto.customer.CustomerGroupList; +import com.linkwechat.wecom.interceptor.WeAccessTokenInterceptor; /** * @description: 客户群 * @author: HaoN * @create: 2020-10-20 21:50 **/ +@BaseRequest(interceptor = WeAccessTokenInterceptor.class) public interface WeCustomerGroupClient { diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeCustomerMessagePushClient.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeCustomerMessagePushClient.java index 84408de31e49286bad52d7b7e609cc4d3db348a0..9564f798f1ea7008d0beaad6a16ea0cab3d301a6 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeCustomerMessagePushClient.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeCustomerMessagePushClient.java @@ -1,19 +1,18 @@ package com.linkwechat.wecom.client; -import com.dtflys.forest.annotation.Body; -import com.dtflys.forest.annotation.DataObject; -import com.dtflys.forest.annotation.Query; -import com.dtflys.forest.annotation.Request; +import com.dtflys.forest.annotation.*; import com.linkwechat.wecom.domain.dto.message.QueryCustomerMessageStatusResultDataObjectDto; import com.linkwechat.wecom.domain.dto.message.QueryCustomerMessageStatusResultDto; import com.linkwechat.wecom.domain.dto.message.SendMessageResultDto; import com.linkwechat.wecom.domain.dto.message.WeCustomerMessagePushDto; +import com.linkwechat.wecom.interceptor.WeAccessTokenInterceptor; /** * @description: 群发消息 * @author: KeWen * @create: 2020-10-25 21:34 **/ +@BaseRequest(interceptor = WeAccessTokenInterceptor.class) public interface WeCustomerMessagePushClient { diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeDepartMentClient.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeDepartMentClient.java index cf0525723f3eacd20f918462ec043ab7368d05e2..c5da019196f9f0600c99b796780988a90ad263ea 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeDepartMentClient.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeDepartMentClient.java @@ -1,16 +1,19 @@ package com.linkwechat.wecom.client; +import com.dtflys.forest.annotation.BaseRequest; import com.dtflys.forest.annotation.DataObject; import com.dtflys.forest.annotation.Query; import com.dtflys.forest.annotation.Request; import com.linkwechat.wecom.domain.dto.WeDepartMentDto; import com.linkwechat.wecom.domain.dto.WeResultDto; +import com.linkwechat.wecom.interceptor.WeAccessTokenInterceptor; /** * @description: 企业微信部门相关客户端 * @author: HaoN * @create: 2020-08-27 16:40 **/ +@BaseRequest(interceptor = WeAccessTokenInterceptor.class) public interface WeDepartMentClient { /** diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeExternalContactClient.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeExternalContactClient.java index e0354cfcffb9ab3f045b120f87b98c329a2bb120..45b66b0102cbdbedaafcc3cdbba7828b2c0e5558 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeExternalContactClient.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeExternalContactClient.java @@ -1,15 +1,18 @@ package com.linkwechat.wecom.client; +import com.dtflys.forest.annotation.BaseRequest; import com.dtflys.forest.annotation.DataObject; import com.dtflys.forest.annotation.Query; import com.dtflys.forest.annotation.Request; import com.linkwechat.wecom.domain.dto.WeExternalContactDto; +import com.linkwechat.wecom.interceptor.WeAccessTokenInterceptor; /** * @description: 员工对外联系方式 * @author: HaoN * @create: 2020-10-13 10:39 **/ +@BaseRequest(interceptor = WeAccessTokenInterceptor.class) public interface WeExternalContactClient { @Request(url = "/externalcontact/add_contact_way", diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeMediaClient.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeMediaClient.java index c5281749940a63ffc28a067fa4a3281bc2f642a0..8cafe75a22f05ce6908b0466b6149a8a1933e8c6 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeMediaClient.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeMediaClient.java @@ -1,9 +1,11 @@ package com.linkwechat.wecom.client; +import com.dtflys.forest.annotation.BaseRequest; import com.dtflys.forest.annotation.DataFile; import com.dtflys.forest.annotation.Post; import com.dtflys.forest.annotation.Query; import com.linkwechat.wecom.domain.dto.WeMediaDto; +import com.linkwechat.wecom.interceptor.WeAccessTokenInterceptor; import org.springframework.web.multipart.MultipartFile; import java.io.File; @@ -15,6 +17,7 @@ import java.io.InputStream; * @Description: * @Date: create in 2020/9/24 0024 0:14 */ +@BaseRequest(interceptor = WeAccessTokenInterceptor.class) public interface WeMediaClient { /** diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeMessagePushClient.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeMessagePushClient.java index 56a606498a239c51e8181857726bb69f0b460dfd..16ee17ed877c669b00f36e7983b23631d14af6c8 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeMessagePushClient.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeMessagePushClient.java @@ -1,11 +1,13 @@ package com.linkwechat.wecom.client; +import com.dtflys.forest.annotation.BaseRequest; import com.dtflys.forest.annotation.DataObject; import com.dtflys.forest.annotation.Header; import com.dtflys.forest.annotation.Request; import com.linkwechat.wecom.domain.dto.WeMessagePushDto; import com.linkwechat.wecom.domain.dto.WeMessagePushGroupDto; import com.linkwechat.wecom.domain.dto.WeMessagePushResultDto; +import com.linkwechat.wecom.interceptor.WeAccessTokenInterceptor; /** * @description: 消息推送 @@ -13,6 +15,7 @@ import com.linkwechat.wecom.domain.dto.WeMessagePushResultDto; * @create: 2020-10-17 22:41 **/ @SuppressWarnings("all") +@BaseRequest(interceptor = WeAccessTokenInterceptor.class) public interface WeMessagePushClient { /** diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeMsgAuditClient.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeMsgAuditClient.java index 01914abb4ccf516501ef7f69fe1994f7d1441659..6300c635592f81bd353b4c07abdace54b64b529f 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeMsgAuditClient.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeMsgAuditClient.java @@ -1,16 +1,19 @@ package com.linkwechat.wecom.client; +import com.dtflys.forest.annotation.BaseRequest; import com.dtflys.forest.annotation.DataObject; import com.dtflys.forest.annotation.DataVariable; import com.dtflys.forest.annotation.Request; import com.linkwechat.wecom.domain.dto.msgaudit.WeMsgAuditDto; import com.linkwechat.wecom.domain.vo.WeMsgAuditVo; +import com.linkwechat.wecom.interceptor.WeAccessTokenInterceptor; /** * @author danmo * @description 会话存档接口 * @date 2020/12/2 16:45 **/ +@BaseRequest(interceptor = WeAccessTokenInterceptor.class) public interface WeMsgAuditClient { /** diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeTicketClient.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeTicketClient.java index 6ecfe4d3810732f3f04c38cb230649cba23c2bfe..2bd9346daf718e8de7ed05ea5d2e900b195cf0d7 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeTicketClient.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeTicketClient.java @@ -1,14 +1,17 @@ package com.linkwechat.wecom.client; +import com.dtflys.forest.annotation.BaseRequest; import com.dtflys.forest.annotation.Header; import com.dtflys.forest.annotation.Request; import com.linkwechat.wecom.domain.WeH5TicketDto; +import com.linkwechat.wecom.interceptor.WeAccessTokenInterceptor; /** * @author danmo * @description h5获取签名 * @date 2021/1/6 11:51 **/ +@BaseRequest(interceptor = WeAccessTokenInterceptor.class) public interface WeTicketClient { /** * 获取去企业jsapi_ticket diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeUserClient.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeUserClient.java index b998633f061f3c74d3445447c38757e797d2a29b..1881de06f3e38cc8ff8ebcc7615d2f4faf03faed 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeUserClient.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeUserClient.java @@ -1,16 +1,15 @@ package com.linkwechat.wecom.client; -import com.dtflys.forest.annotation.DataObject; -import com.dtflys.forest.annotation.Header; -import com.dtflys.forest.annotation.Query; -import com.dtflys.forest.annotation.Request; +import com.dtflys.forest.annotation.*; import com.linkwechat.wecom.domain.dto.*; +import com.linkwechat.wecom.interceptor.WeAccessTokenInterceptor; /** * @description: 企业微信通讯录成员 * @author: HaoN * @create: 2020-08-27 16:42 **/ +@BaseRequest(interceptor = WeAccessTokenInterceptor.class) public interface WeUserClient { /** diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeApp.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeApp.java index 2e477f9d6c0526ee9886bebd599c311354d18e58..8f34ed28ea53b97795383aa9ea569589a1321579 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeApp.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeApp.java @@ -1,5 +1,6 @@ package com.linkwechat.wecom.domain; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.linkwechat.common.utils.SnowFlakeUtil; import lombok.AllArgsConstructor; @@ -29,11 +30,40 @@ public class WeApp { /**应用id**/ private String agentId; + /**应用名称**/ + private String agentName; + /**应用密钥**/ private String agentSecret; + /**应用描述**/ + private String description; + + /**应用图标**/ + private String squareLogoUrl; + + /**企业应用是否被停用(1:是;0:否)**/ + private Integer close; + + + /**企业应用可信域名**/ + private String redirectDomain; + + + /**企业应用是否打开地理位置上报 0:不上报;1:进入会话上报;**/ + private Integer reportLocationFlag; + + + /**是否上报用户进入应用事件。0:不接收;1:接收**/ + private Integer isreportenter; + + + /**应用主页url**/ + private String homeUrl; + + /**应用类型(1:自建应用;)**/ private Integer appType; @@ -52,6 +82,11 @@ public class WeApp { private String status; + /**企业应用头像的mediaid,通过素材管理接口上传图片获得mediaid,上传后会自动裁剪成方形和圆形两个头像**/ + @TableField(exist = false) + private String logoMediaid; + + diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeChatContactMapping.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeChatContactMapping.java index 1d5c0e6f5f0e04480630d68ab182583e6656732d..d6088806c6ee1fa6d9de6c10cd393c9bfb228e11 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeChatContactMapping.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeChatContactMapping.java @@ -3,6 +3,8 @@ package com.linkwechat.wecom.domain; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.annotation.TableField; import com.linkwechat.common.annotation.Excel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -12,6 +14,7 @@ import lombok.Data; * @author ruoyi * @date 2020-12-27 */ +@ApiModel @Data public class WeChatContactMapping { private static final long serialVersionUID = 1L; @@ -24,66 +27,77 @@ public class WeChatContactMapping { /** * 发送人id */ + @ApiModelProperty("发送人id") @Excel(name = "发送人id") private String fromId; /** * 接收人id */ + @ApiModelProperty("接收人id") @Excel(name = "接收人id") private String receiveId; /** * 群聊id */ + @ApiModelProperty("群聊id") @Excel(name = "群聊id") private String roomId; /** * 是否为客户 0-成员 1-客户 2-机器人 */ + @ApiModelProperty("是否为客户 0-成员 1-客户 2-机器人") @Excel(name = "是否为客户 0-成员 1-客户 2-机器人") private Integer isCustom; /** * 是否为客户 0-内部 1-外部 2-群聊 */ + @ApiModelProperty("是否为客户 0-内部 1-外部 2-群聊") @TableField(exist = false) private Integer searchType; /** - * 内部接收人信息 + * 内部发送人信息 */ + @ApiModelProperty("内部发送人信息") @TableField(exist = false) private WeUser fromWeUser; /** - * 外部接收人信息 + * 外部发送人信息 */ + @ApiModelProperty("外部发送人信息") @TableField(exist = false) private WeCustomer fromWeCustomer; /** * 内部接收人信息 */ + @ApiModelProperty("内部接收人信息") @TableField(exist = false) private WeUser receiveWeUser; /** * 外部接收人信息 */ + @ApiModelProperty("外部接收人信息") @TableField(exist = false) private WeCustomer receiveWeCustomer; /** * 群信息 */ + @ApiModelProperty("群信息") @TableField(exist = false) private WeGroup roomInfo; /** * 最后一条聊天数据 */ + @ApiModelProperty("最后一条聊天数据") @TableField(exist = false) private JSONObject finalChatContext; } 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 721adf465a9ca32ee91f41cb6b6ad9b278659661..6288e13036d0e1e37b3bda147e9804f6a761b611 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 @@ -23,72 +23,25 @@ public class WeCommunityNewGroup extends BaseEntity { *主键ID */ @TableId - private Long newGroupId= SnowFlakeUtil.nextId(); + private Long id = SnowFlakeUtil.nextId(); /** * 员工活码名称 */ - @ApiModelProperty("员工活码名称") - private String empleCodeName; + private String emplCodeName; /** - * 活动场景 + * 群活码id */ - @ApiModelProperty("活动场景") - private String activityScene; - - /** - * 欢迎语 - */ - @ApiModelProperty("欢迎语") - private String welcomeMsg; - - /** - * 新增联系方式的配置id - */ - @ApiModelProperty("新增联系方式的配置id") - private String configId; - - /** - * 二维码链接 - */ - @ApiModelProperty("二维码链接") - private String qrCode; - - /** - * 客户添加时无需经过确认自动成为好友:1:是;0:否 - */ - @ApiModelProperty("客户添加时无需经过确认自动成为好友:1:是;0:否") - private Boolean isJoinConfirmFriends; - - /** - * 添加好友数 - */ - @ApiModelProperty("添加好友数") - private Integer joinFriendNums; - - /** - * 群活码ID - */ - @ApiModelProperty("群活码ID") private Long groupCodeId; /** - * 素材的id + * 员工活码id */ - @ApiModelProperty("素材的id") - private Long mediaId; + private Long emplCodeId; /** * 0 未删除 1 已删除 */ - @ApiModelProperty("0 未删除 1 已删除") - private int delFlag; - - - /** - * 员工活码 - */ - private String userQrCode; - + private int delFlag = 0; } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomer.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomer.java index 4cd7a0f54c9251226e29b8340eb60704bfc3ed15..760efe2266958faf3a62f629de9d31617d510193 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomer.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomer.java @@ -1,31 +1,26 @@ package com.linkwechat.wecom.domain; -import java.util.Date; -import java.util.List; - import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import com.linkwechat.common.annotation.Excel; -import com.linkwechat.common.annotation.Excels; import com.linkwechat.common.core.domain.BaseEntity; -import com.linkwechat.common.utils.SnowFlakeUtil; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import javax.validation.constraints.NotBlank; +import java.util.Date; +import java.util.List; /** * 企业微信客户对象 we_customer - * + * * @author ruoyi * @date 2020-09-13 */ @@ -35,72 +30,99 @@ import javax.validation.constraints.NotBlank; @AllArgsConstructor @NoArgsConstructor @TableName("we_customer") -public class WeCustomer extends BaseEntity -{ +public class WeCustomer extends BaseEntity { private static final long serialVersionUID = 1L; - /** 外部联系人的userid */ + /** + * 外部联系人的userid + */ @TableId @NotBlank(message = "外部联系人的id不可为空") @ApiModelProperty("外部联系人的userid") private String externalUserid; - /** 外部联系人名称 */ + /** + * 外部联系人名称 + */ @Excel(name = "客户") @ApiModelProperty("外部联系人名称") private String name; - /** 外部联系人头像 */ + /** + * 外部联系人头像 + */ @ApiModelProperty("外部联系人头像") private String avatar; - /** 外部联系人的类型,1表示该外部联系人是微信用户,2表示该外部联系人是企业微信用户 */ + /** + * 外部联系人的类型,1表示该外部联系人是微信用户,2表示该外部联系人是企业微信用户 + */ @ApiModelProperty("外部联系人的类型,1表示该外部联系人是微信用户,2表示该外部联系人是企业微信用户") @Excel(name = "客户类型", readConverterExp = "1=微信,2=企业微信") private Integer type; - /** 外部联系人性别 0-未知 1-男性 2-女性 */ + /** + * 外部联系人性别 0-未知 1-男性 2-女性 + */ @ApiModelProperty("外部联系人性别 0-未知 1-男性 2-女性") @Excel(name = "性别", readConverterExp = "0=未知,1=男性,2=女性") private Integer gender; - /** 外部联系人在微信开放平台的唯一身份标识,通过此字段企业可将外部联系人与公众号/小程序用户关联起来。 */ + /** + * 外部联系人在微信开放平台的唯一身份标识,通过此字段企业可将外部联系人与公众号/小程序用户关联起来。 + */ @ApiModelProperty("外部联系人在微信开放平台的唯一身份标识,通过此字段企业可将外部联系人与公众号/小程序用户关联起来") private String unionid; - /** 生日 */ + /** + * 生日 + */ @JsonFormat(pattern = "yyyy-MM-dd") @ApiModelProperty("生日") private Date birthday; - /** 客户企业简称 */ + /** + * 客户企业简称 + */ @ApiModelProperty("客户企业简称") @Excel(name = "公司名称") private String corpName; - /** 客户企业全称 */ + /** + * 客户企业全称 + */ @ApiModelProperty("客户企业全称") private String corpFullName; - /** 职位 */ + /** + * 职位 + */ @ApiModelProperty("职位") - private String position; + private String position; - /** 是否开启会话存档 0:关闭 1:开启 */ + /** + * 是否开启会话存档 0:关闭 1:开启 + */ @ApiModelProperty("是否开启会话存档 0:关闭 1:开启") private Integer isOpenChat; - /** 添加人员 */ + /** + * 添加人员 + */ @TableField(exist = false) private List weFlowerCustomerRels; - /** 添加人id */ + /** + * 添加人id + */ @TableField(exist = false) private String userIds; - /** 标签 */ + /** + * 标签 + */ @TableField(exist = false) private String tagIds; @@ -108,7 +130,9 @@ public class WeCustomer extends BaseEntity @JSONField(defaultValue = "0") private Integer status; - /** 部门 */ + /** + * 部门 + */ @TableField(exist = false) private String departmentIds; @@ -125,4 +149,17 @@ public class WeCustomer extends BaseEntity private String userId; + /** + * 创建者 + */ + @ApiModelProperty(hidden = true) + @TableField(exist = false) + private String createBy; + + /** + * 更新者 + */ + @ApiModelProperty(hidden = true) + @TableField(exist = false) + private String updateBy; } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeEmpleCode.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeEmpleCode.java index 340caef7c794fa653d0833950e2aca80fc34220b..4f74efecde12f2714d0f497dc70d37157e09fa68 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeEmpleCode.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeEmpleCode.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.linkwechat.common.core.domain.BaseEntity; import com.linkwechat.common.utils.SnowFlakeUtil; import lombok.Data; +import lombok.EqualsAndHashCode; import javax.validation.constraints.NotEmpty; import java.util.List; @@ -17,6 +18,7 @@ import java.util.List; * @date 2020-10-04 */ @Data +@EqualsAndHashCode(callSuper = true) @TableName("we_emple_code") public class WeEmpleCode extends BaseEntity { private static final long serialVersionUID = 1L; @@ -34,12 +36,12 @@ public class WeEmpleCode extends BaseEntity { /** * 客户添加时无需经过确认自动成为好友:1:是;0:否 */ - private Boolean isJoinConfirmFriends; + private Boolean skipVerify; /** - * 活动场景 + * 活动场景,和 联系我 接口需要的 scene 不是一回事 */ - private String activityScene; + private String scenario; /** * 欢迎语 @@ -54,10 +56,10 @@ public class WeEmpleCode extends BaseEntity { /** * 0:正常;1:删除; */ - private Integer delFlag = new Integer(0); + private Integer delFlag = 0; - @NotEmpty(message = "员工信息不能为空") /** 使用员工 */ + @NotEmpty(message = "员工信息不能为空") @TableField(exist = false) private List weEmpleCodeUseScops; @@ -84,6 +86,16 @@ public class WeEmpleCode extends BaseEntity { */ private String qrCode; + /** + * 企业自定义的state参数,用于区分客户具体是通过哪个「联系我」添加 + */ + private String state; + + /** + * 扫码次数 + */ + private Integer scanTimes = 0; + /** * 使用员工姓名 */ diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeEmpleCodeTag.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeEmpleCodeTag.java index 2d2e22c9b3b6a050216a594e67eb6bb447110e1a..cdb7e05ec46a35ba705ea6229bb9280d77a6807a 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeEmpleCodeTag.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeEmpleCodeTag.java @@ -1,9 +1,7 @@ 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 com.linkwechat.common.utils.SnowFlakeUtil; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -16,7 +14,6 @@ import lombok.Data; * @author ruoyi * @date 2020-10-04 */ -@ApiModel @Data @TableName("we_emple_code_tag") public class WeEmpleCodeTag @@ -37,7 +34,7 @@ public class WeEmpleCodeTag /** 0:正常;2:删除; */ @ApiModelProperty("0:正常;2:删除") - private Integer delFlag=new Integer(0); + private Integer delFlag = 0; /** 标签名 */ @ApiModelProperty("标签名") diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeEmpleCodeUseScop.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeEmpleCodeUseScop.java index 7a16f622c974763ba9f36ff82b33f6780cd7e3d5..948c13b4c0150a47678ee631bab4480308c78f68 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeEmpleCodeUseScop.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeEmpleCodeUseScop.java @@ -43,7 +43,7 @@ public class WeEmpleCodeUseScop /** 0:正常;2:删除; */ @ApiModelProperty("0:正常;2:删除") - private Integer delFlag=new Integer(0); + private Integer delFlag = 0; /** 活码使用人员名称 */ @ApiModelProperty("活码使用人员名称") 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 index da7d1fbf8f9df09c33ed356afbf9ad1e7c470c4e..269a7d5d67d03b5690088b322e5d5bba106ba017 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSopChat.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSopChat.java @@ -22,4 +22,9 @@ public class WeGroupSopChat { * 实际群聊id */ private String chatId; + + /** + * 是否已完成 + */ + private boolean isDone; } 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 index decaa6553d76d76aa091c2b4d5e30e7e4da567e5..0e2c5d328c81ad933bc6d56dd9001b9e0699e254 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTask.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTask.java @@ -4,6 +4,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 lombok.Data; import lombok.EqualsAndHashCode; @@ -12,11 +13,13 @@ import lombok.EqualsAndHashCode; @TableName("we_pres_tag_group") public class WePresTagGroupTask extends BaseEntity { + private static final long serialVersionUID = 1L; + /** *主键ID */ @TableId - private Long taskId; + private Long taskId = SnowFlakeUtil.nextId(); /** * 任务名称 @@ -58,4 +61,9 @@ public class WePresTagGroupTask extends BaseEntity { */ private String cusEndTime; + /** + * 企业群发消息的id + */ + private String msgid; + } 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 index bc5d98fa91d0979b057d982a0992da190791668f..bbe3e289cfba15e8bb7242639ae1ec595bac7bee 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTaskScope.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTaskScope.java @@ -24,4 +24,9 @@ public class WePresTagGroupTaskScope { */ private String weUserId; + /** + * 是否已处理 + */ + private boolean isDone; + } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeTaskFission.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeTaskFission.java index 2a16d87a4f52c1e50ba5da1109d2c86ac59bf3a5..46b38e35e1c662e32972bd1882b3a7043e6c3946 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeTaskFission.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeTaskFission.java @@ -59,16 +59,16 @@ public class WeTaskFission extends BaseEntity { /** * 活动开始时间 */ - @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "活动开始时间", width = 30, dateFormat = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "活动开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "活动开始时间") private Date startTime; /** * 活动结束时间 */ - @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "活动结束时间", width = 30, dateFormat = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "活动结束时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "活动结束时间") private Date overTime; diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeUser.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeUser.java index 13dd7649ef829ceb6b85dd610cfa7082f6dc14e7..879c0da73fee9b142be1ad2402a18c096e1f9a57 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeUser.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeUser.java @@ -28,6 +28,7 @@ import java.util.Date; * @author ruoyi * @date 2020-08-31 */ +@ApiModel @Data @TableName("we_user") @Builder @@ -39,79 +40,101 @@ public class WeUser /** 用户头像 */ + @ApiModelProperty("用户头像") @TableField(value = "head_image_url") private String avatarMediaid; /** 用户名称 */ + @ApiModelProperty("用户名称") @NotBlank(message = "姓名不可为空") @TableField(value = "user_name") private String name; /** 用户昵称 */ + @ApiModelProperty("用户昵称") private String alias; /** 账号 */ + @ApiModelProperty("账号") @NotBlank(message = "账号不可为空") @TableId private String userId; /** 性别。1表示男性,2表示女性 */ + @ApiModelProperty("性别。1表示男性,2表示女性") private Integer gender; /** 手机号 */ + @ApiModelProperty("手机号") @NotBlank(message = "手机号不可为空") private String mobile; /** 邮箱 */ + @ApiModelProperty("邮箱") private String email; /** 个人微信号 */ + @ApiModelProperty("个人微信号") private String wxAccount; /** 用户所属部门,使用逗号隔开,字符串格式存储 */ + @ApiModelProperty("用户所属部门") private String[] department; /** 职务 */ + @ApiModelProperty("职务") private String position; /** 1表示为上级,0表示普通成员(非上级)。 */ + @ApiModelProperty("1表示为上级,0表示普通成员(非上级)") private String[] isLeaderInDept; /** 入职时间 */ + @ApiModelProperty("入职时间") @JsonFormat(pattern = "yyyy-MM-dd") private Date joinTime; /** 是否启用(1表示启用成员,0表示禁用成员) */ + @ApiModelProperty("是否启用(1表示启用成员,0表示禁用成员)") private Integer enable; /** 身份证号 */ + @ApiModelProperty("身份证号") private String idCard; /** QQ号 */ + @ApiModelProperty("QQ号") private String qqAccount; /** 座机 */ + @ApiModelProperty("座机") private String telephone; /** 地址 */ + @ApiModelProperty("地址") private String address; /** 生日 */ @JsonFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty("生日") private Date birthday; /** 是否激活(1:是;2:否)该字段主要表示当前信息是否同步微信 */ /** 激活状态: 1=已激活,2=已禁用,4=未激活,5=退出企业,6=删除 */ + @ApiModelProperty("激活状态: 1=已激活,2=已禁用,4=未激活,5=退出企业,6=删除") private Integer isActivate; /** 离职是否分配(1:已分配;0:未分配;) */ + @ApiModelProperty("离职是否分配(1:已分配;0:未分配;)") private Integer isAllocate; /** 离职时间 */ + @ApiModelProperty("离职时间") private Date dimissionTime; + @ApiModelProperty("备注") private String remark; @TableField(exist = false) diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/TemporaryMaterialDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/TemporaryMaterialDto.java new file mode 100644 index 0000000000000000000000000000000000000000..7ad14ab7d7c6b9c4d65e2e98f81b632068ce0f9a --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/TemporaryMaterialDto.java @@ -0,0 +1,15 @@ +package com.linkwechat.wecom.domain.dto; + +import lombok.Data; + +/** + * @description: 群发参数相关 + * @author: HaoN + * @create: 2021-03-31 17:20 + **/ +@Data +public class TemporaryMaterialDto { + private String url; + private String type; + private String name; +} 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 5d022b7339ba948c42624762da755afa01778ce1..b789f9e02d59f08e6c9b6b13a0c9fb442413be82 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 @@ -1,9 +1,5 @@ package com.linkwechat.wecom.domain.dto; -import com.baomidou.mybatisplus.annotation.TableField; -import com.linkwechat.wecom.domain.WeEmpleCodeTag; -import com.linkwechat.wecom.domain.WeEmpleCodeUseScop; -import io.swagger.annotations.ApiModel; import lombok.Data; import javax.validation.constraints.NotNull; import java.util.List; @@ -17,56 +13,39 @@ import java.util.List; @Data public class WeCommunityNewGroupDto { - /** - * 主键 + * 活码名称 */ - private String newGroupId; + @NotNull(message = "活码名不能为空") + private String codeName; /** - * 活动场景 + * 指定的员工(id) */ - private String activityScene; + @NotNull(message = "使用员工不能为空") + private List emplList; /** * 欢迎语 */ + @NotNull(message = "欢迎语不能为空") private String welcomeMsg; - @NotNull(message = "员工信息不能为空") - /** 使用员工 */ - @TableField(exist = false) - private List weEmpleCodeUseScops; - - /** - * 扫码标签 - */ - @TableField(exist = false) - private List weEmpleCodeTags; - /** * 群活码ID */ + @NotNull(message = "群活码不能为空") private Long groupCodeId; /** - * 客户添加时无需经过确认自动成为好友:1:是;0:否 - */ - private Boolean isJoinConfirmFriends; - - /** - * 新增联系方式的配置id - */ - private String configId; - - /** - * 二维码链接 + * 标签id列表 */ - private String qrCode; + @NotNull(message = "标签不能为空") + private List tagList; /** - * 素材的id + * 是否跳过验证自动加好友 */ - private Long mediaId; + private Boolean skipVerify = true; } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeTaskFissionPosterDTO.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeTaskFissionPosterDTO.java index 832ec1d1b2982df04375a66fecda53bbd2b55343..f09ae36614d25573bca206a97f39d897051279de 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeTaskFissionPosterDTO.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeTaskFissionPosterDTO.java @@ -13,7 +13,7 @@ import lombok.Data; @Data public class WeTaskFissionPosterDTO { @ApiModelProperty("客户id") - private String eid; + private String unionId; @ApiModelProperty("任务id") private Long taskFissionId; diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeWelcomeMsg.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeWelcomeMsg.java index b8163a981b1de9031321eb3b354feb379a55b6a3..f4c2f1d53a6433b0635828f307c1add4dc6a0d64 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeWelcomeMsg.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeWelcomeMsg.java @@ -3,6 +3,8 @@ package com.linkwechat.wecom.domain.dto; import lombok.Builder; import lombok.Data; +import java.util.List; + /** * @author admin * @date 2020-11-18 @@ -12,6 +14,8 @@ import lombok.Data; public class WeWelcomeMsg { private String welcome_code; + private List attachments; + private Text text; private Image image; 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 a4d3647241ad45eb2b27858114e68e34d012fd86..4efc1e2ca925d59a6e06e2a1e4d3e3569006f952 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 @@ -2,15 +2,11 @@ package com.linkwechat.wecom.domain.vo; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; -import com.linkwechat.wecom.domain.WeEmpleCodeTag; -import com.linkwechat.wecom.domain.WeEmpleCodeUseScop; -import com.linkwechat.wecom.domain.WeGroupCodeActual; -import com.linkwechat.wecom.domain.WeMaterial; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.linkwechat.wecom.domain.*; import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import javax.validation.constraints.NotEmpty; import java.util.Date; import java.util.List; @@ -21,108 +17,75 @@ import java.util.List; @Data public class WeCommunityNewGroupVo { - /** - * 主键ID - */ - @ApiModelProperty("主键ID") - private Long newGroupId; - - /** - * 员工活码名称 - */ - @ApiModelProperty("员工活码名称") - private String empleCodeName; + private Long id; /** - * 活动场景 + * 活码名称 */ - @ApiModelProperty("活动场景") - private String activityScene; + private String codeName; - /** - * 欢迎语 - */ - @ApiModelProperty("欢迎语") - private String welcomeMsg; - - /** - * 群活码id - */ - @ApiModelProperty("群活码id") + @JsonIgnore private Long groupCodeId; + @JsonIgnore + private Long emplCodeId; + /** - * 新增联系方式的配置id + * 员工活码URL */ - @ApiModelProperty("新增联系方式的配置id") - private String configId; + private String emplCodeUrl; /** - * 二维码链接 + * 欢迎语(即员工活码设定的欢迎语) */ - @ApiModelProperty("二维码链接") - private String qrCode; + @TableField(exist = false) + private String welcomeMsg; /** - * 客户添加时无需经过确认自动成为好友:1:是;0:否 + * 群活码信息 */ - @ApiModelProperty("客户添加时无需经过确认自动成为好友:1:是;0:否") - private Boolean isJoinConfirmFriends; + @TableField(exist = false) + private WeGroupCodeVo groupCodeInfo; /** - * 添加好友数 + * 员工信息 */ - @ApiModelProperty("添加好友数") - private Integer joinFriendNums; - - @NotEmpty(message = "员工信息不能为空") - /** 使用员工 */ @TableField(exist = false) - @ApiModelProperty("使用员工") - private List weEmpleCodeUseScops; + private List emplList; /** - * 扫码标签 + * 对应群聊信息 */ @TableField(exist = false) - @ApiModelProperty("扫码标签") - private List weEmpleCodeTags; + private List groupList; /** - * 素材 + * 客户标签列表 */ - @ApiModelProperty("素材") @TableField(exist = false) - private WeMaterial weMaterial; + private List tagList; /** - * 素材的id + * 当前添加的好友数 */ - @ApiModelProperty("素材的id") - private Long mediaId; + @TableField(exist = false) + private Integer cusNumber = 0; /** - * 实际群聊 + * 是否跳过验证 */ - @ApiModelProperty("实际群聊") - private List weGroupUserScops; + @TableField(exist = false) + private Boolean skipVerify = 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(); - /** - * 个人码 - */ - 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/WeCommunityTaskEmplVo.java similarity index 47% rename from linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeEmplVo.java rename to linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeCommunityTaskEmplVo.java index 732036647078c4d11a70b2e6a5f83210b0c4ed37..d3477c426585e46c0e7f3182f0244b8ae9758640 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeEmplVo.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeCommunityTaskEmplVo.java @@ -3,10 +3,10 @@ package com.linkwechat.wecom.domain.vo; import lombok.Data; /** - * 员工信息 + * 社群运营相关任务执行人信息 */ @Data -public class WeEmplVo { +public class WeCommunityTaskEmplVo { /** * 员工id @@ -17,4 +17,14 @@ public class WeEmplVo { * 员工名称 */ private String name; + + /** + * 员工头像 + */ + private String avatar; + + /** + * 是否已完成任务 + */ + private boolean isDone; } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeGroupCodeVo.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeGroupCodeVo.java new file mode 100644 index 0000000000000000000000000000000000000000..91740e0b8646c55643045432229563d26aea06e6 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeGroupCodeVo.java @@ -0,0 +1,23 @@ +package com.linkwechat.wecom.domain.vo; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 群活码简略信息 + * @Author Hang + * @Date 2021/3/26 14:21 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class WeGroupCodeVo { + + private Long id; + + private String uuid; + + private String codeUrl; +} \ No newline at end of file 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 index e86aa3448d411d79ee942c7885bb6fd65d6df3fa..0b454ccbd069234a6f22b092e3d7f88f9c8c3ed2 100644 --- 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 @@ -2,8 +2,8 @@ package com.linkwechat.wecom.domain.vo; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; +import com.linkwechat.common.enums.CommunityTaskType; import com.linkwechat.wecom.domain.WeGroup; -import com.linkwechat.wecom.domain.WeMaterial; import lombok.Data; import java.util.Date; @@ -12,6 +12,12 @@ import java.util.List; @Data public class WeGroupSopVo { + /** + * 类型。该属性仅用于H5页面与老客标签建群混合列表的任务类型判断 + */ + @TableField(exist = false) + private final Integer type = CommunityTaskType.SOP.getType(); + /** * id */ @@ -36,7 +42,7 @@ public class WeGroupSopVo { * 素材列表 */ @TableField(exist = false) - private List materialList; + private List materialList; /** * 自上传图片列表 @@ -50,6 +56,12 @@ public class WeGroupSopVo { @TableField(exist = false) private List groupList; + /** + * 执行人列表 + */ + @TableField(exist = false) + private List scopeList; + /** * 开始执行时间 */ 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 index 6287ca1c124dd92d702b7d2dc62f1103f13f5459..e75ac4ba1123709a56dafb1191a5cfc33c37e4aa 100644 --- 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 @@ -3,7 +3,6 @@ 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; @@ -37,7 +36,7 @@ public class WeKeywordGroupTaskVo { * 群活码信息 */ @TableField(exist = false) - private WeGroupCode groupCodeInfo; + private WeGroupCodeVo groupCodeInfo; /** * 关键词 @@ -46,7 +45,7 @@ public class WeKeywordGroupTaskVo { private List keywordList; /** - * 实际群聊 + * 实际群聊(仅群聊名称) */ @TableField(exist = false) private List groupNameList; diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeMakeCustomerTag.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeMakeCustomerTag.java index 0f91e02c802715525e63330405169e689e8c2697..ec0d010171b31fa9af629040d8a959c944e49ad3 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeMakeCustomerTag.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeMakeCustomerTag.java @@ -1,7 +1,10 @@ package com.linkwechat.wecom.domain.vo; import com.linkwechat.wecom.domain.WeTag; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import java.util.List; @@ -11,6 +14,9 @@ import java.util.List; * @create: 2020-10-24 20:09 **/ @Data +@Builder +@AllArgsConstructor +@NoArgsConstructor public class WeMakeCustomerTag { private String externalUserid; private List addTag; diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeMaterialVo.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeMaterialVo.java new file mode 100644 index 0000000000000000000000000000000000000000..2b18bad22654d67c705283035b9acd6c4b113d60 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeMaterialVo.java @@ -0,0 +1,74 @@ +package com.linkwechat.wecom.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + * 素材Vo + * + * @Author Hang + * @Date 2021/3/26 17:51 + */ +@Data +public class WeMaterialVo { + /** + * 素材类型。参考 {@link com.linkwechat.common.enums.MediaType} + */ + private Integer mediaType; + + private Long id; + + /** + * 本地资源文件地址 + */ + private String materialUrl; + + /** + * 文本内容、图片文案 + */ + private String content; + + /** + * 图片名称 + */ + private String materialName; + + /** + * 摘要 + */ + private String digest; + + /** + * 封面本地资源文件 + */ + private String coverUrl; + + /** + * 音频时长 + */ + private String audioTime; + + /** + * 创建者 + */ + 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; +} \ No newline at end of file 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 index 9febc01ca4c111bae3e27c664f82916e5ff12a9b..23ee6bf0e4bdd70c524bbd716fa0dfdc8a4b16ee 100644 --- 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 @@ -10,14 +10,14 @@ import lombok.Data; public class WePresTagGroupTaskStatVo { /** - * 客户id + * 客户名称 */ private String customerName; /** - * 是否已发送 + * 发送状态 */ - private boolean isSent = false; + private String status; /** * 是否已在群 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 index 1c7f2fb958f539b74f34c48474f6adc033368a83..bf3b2dd52aa3064b0934e7787ab8d41c95a40dbf 100644 --- 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 @@ -4,7 +4,7 @@ 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.common.enums.CommunityTaskType; import com.linkwechat.wecom.domain.WeTag; import lombok.Data; @@ -17,6 +17,12 @@ import java.util.List; @Data public class WePresTagGroupTaskVo { + /** + * 类型。该属性仅用于H5页面与SOP混合列表的任务类型判断 + */ + @TableField(exist = false) + private final Integer type = CommunityTaskType.TAG.getType(); + /** * 老客标签建群任务id */ @@ -33,16 +39,25 @@ public class WePresTagGroupTaskVo { private String welcomeMsg; /** - * 群活码id + * 群活吗id + */ + @JsonIgnore + private Long codeId; + + /** + * 群活码连接 */ @JsonIgnore - private Long groupCodeId; + private String codeUrl; /** - * 群活码信息 + * 群活码uuid */ + @JsonIgnore + private String CodeUuid; + @TableField(exist = false) - private WeGroupCode groupCodeInfo; + private WeGroupCodeVo groupCodeInfo; /** * 发送方式 0: 企业群发 1:个人群发 @@ -58,7 +73,7 @@ public class WePresTagGroupTaskVo { * 使用员工 */ @TableField(exist = false) - private List scopeList; + private List scopeList; /** * 标签 @@ -86,6 +101,11 @@ public class WePresTagGroupTaskVo { */ private String cusEndTime; + /** + * msgid + */ + private String msgid; + /** * 创建者 */ @@ -107,4 +127,12 @@ public class WePresTagGroupTaskVo { */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private String updateTime; + + /** + * 设置群活码信息 + */ + public void fillGroupCodeVo() { + WeGroupCodeVo groupCodeVo = new WeGroupCodeVo(this.getCodeId(), this.getCodeUuid(), this.getCodeUrl()); + this.setGroupCodeInfo(groupCodeVo); + } } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WxCpXmlMessageVO.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WxCpXmlMessageVO.java index 337683294427f233a925797d00d3ffc7a7f2a6ba..db86b4ec6b032aacd4bceacb6dbb5c0db2567f6b 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WxCpXmlMessageVO.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WxCpXmlMessageVO.java @@ -41,6 +41,22 @@ public class WxCpXmlMessageVO extends WxCpXmlMessage { @XStreamConverter(value = XStreamCDataConverter.class) private String tagId; + @XStreamAlias("UpdateDetail") + @XStreamConverter(value = XStreamCDataConverter.class) + private String updateDetail; + + @XStreamAlias("JoinScene") + @XStreamConverter(value = XStreamCDataConverter.class) + private String joinScene; + + @XStreamAlias("QuitScene") + @XStreamConverter(value = XStreamCDataConverter.class) + private String quitScene; + + @XStreamAlias("MemChangeCnt") + @XStreamConverter(value = XStreamCDataConverter.class) + private String memberChangeCnt; + @Data public static class BatchJob implements Serializable { private static final long serialVersionUID = -3418685294606228837L; diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/weixin/dto/WxAuthUserInfoDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/weixin/dto/WxAuthUserInfoDto.java new file mode 100644 index 0000000000000000000000000000000000000000..f7fe166fae943a01a697ab8001a706f07639e5cb --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/weixin/dto/WxAuthUserInfoDto.java @@ -0,0 +1,42 @@ +package com.linkwechat.wecom.domain.weixin.dto; + +import com.alibaba.fastjson.JSONArray; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author danmo + * @description 授权用户信息 + * @date 2021/4/5 16:12 + **/ +@ApiModel +@Data +public class WxAuthUserInfoDto extends WxBaseResultDto{ + @ApiModelProperty("用户的唯一标识") + private String openId; + + @ApiModelProperty("用户昵称") + private String nickName; + + @ApiModelProperty("用户的性别,值为1时是男性,值为2时是女性,值为0时是未知") + private Integer sex; + + @ApiModelProperty("用户个人资料填写的省份") + private String province; + + @ApiModelProperty("普通用户个人资料填写的城市") + private String city; + + @ApiModelProperty("国家,如中国为CN") + private String country; + + @ApiModelProperty("用户头像") + private String headImgUrl; + + @ApiModelProperty("用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)") + private JSONArray privilege; + + @ApiModelProperty("只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。") + private String unionId; +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/weixin/dto/WxBaseResultDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/weixin/dto/WxBaseResultDto.java new file mode 100644 index 0000000000000000000000000000000000000000..c36c2d19c396611f8469581851b385529449e4d9 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/weixin/dto/WxBaseResultDto.java @@ -0,0 +1,14 @@ +package com.linkwechat.wecom.domain.weixin.dto; + +import lombok.Data; + +/** + * @author danmo + * @description + * @date 2021/4/5 15:59 + **/ +@Data +public class WxBaseResultDto { + private Integer errcode; + private String errmsg; +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/weixin/dto/WxTokenDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/weixin/dto/WxTokenDto.java new file mode 100644 index 0000000000000000000000000000000000000000..872439508f5da920342e896e777c64383988bfe5 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/weixin/dto/WxTokenDto.java @@ -0,0 +1,30 @@ +package com.linkwechat.wecom.domain.weixin.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author danmo + * @description + * @date 2021/4/5 16:01 + **/ +@ApiModel +@Data +public class WxTokenDto extends WxBaseResultDto { + + @ApiModelProperty("网页授权接口调用凭证token") + private String accessToken; + + @ApiModelProperty("超时时间,单位(秒)") + private Integer expiresIn; + + @ApiModelProperty("用户刷新access_token") + private String refreshToken; + + @ApiModelProperty("用户唯一标识") + private String openId; + + @ApiModelProperty("用户授权的作用域,使用逗号(,)分隔") + private String scope; +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/WeEventChangeExternalContactImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/WeEventChangeExternalContactImpl.java index 156ccb1c5f584ab7225be7d49cf23ce2455ca888..5a25d9fe7bf0abffdf5256e2d07ef64d9dcd26ff 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/WeEventChangeExternalContactImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/WeEventChangeExternalContactImpl.java @@ -1,30 +1,12 @@ package com.linkwechat.wecom.factory.impl; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.linkwechat.common.constant.WeConstans; -import com.linkwechat.common.enums.MediaType; -import com.linkwechat.common.enums.MessageType; -import com.linkwechat.common.utils.StringUtils; -import com.linkwechat.common.utils.Threads; -import com.linkwechat.wecom.client.WeMessagePushClient; -import com.linkwechat.wecom.domain.*; -import com.linkwechat.wecom.domain.dto.WeEmpleCodeDto; -import com.linkwechat.wecom.domain.dto.WeMediaDto; -import com.linkwechat.wecom.domain.dto.WeMessagePushDto; -import com.linkwechat.wecom.domain.dto.WeWelcomeMsg; -import com.linkwechat.wecom.domain.dto.message.TextMessageDto; import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO; import com.linkwechat.wecom.factory.WeCallBackEventFactory; import com.linkwechat.wecom.factory.WeStrategyBeanFactory; -import com.linkwechat.wecom.service.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.*; -import java.util.stream.Collectors; - /** * @author danmo * @description 外部联系人回调事件处理 diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallBackAddExternalContactImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallBackAddExternalContactImpl.java index a9d0828e8fa1faa20a1658a2bffef62e4d03834b..448e3da111835318fae78a91f5841ec6bc81375e 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallBackAddExternalContactImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallBackAddExternalContactImpl.java @@ -16,7 +16,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -48,10 +47,20 @@ public class WeCallBackAddExternalContactImpl extends WeEventStrategy { private IWeTaskFissionRewardService weTaskFissionRewardService; @Autowired private IWeTaskFissionService weTaskFissionService; + @Autowired + private IWeCommunityNewGroupService weCommunityNewGroupService; + @Autowired + private IWeGroupCodeService weGroupCodeService; + + private ThreadLocal weFlowerCustomerRelThreadLocal = new ThreadLocal<>(); @Override public void eventHandle(WxCpXmlMessageVO message) { if (message.getExternalUserId() != null) { + WeFlowerCustomerRel weFlowerCustomerRel = weFlowerCustomerRelService.getOne(new LambdaQueryWrapper() + .eq(WeFlowerCustomerRel::getExternalUserid, message.getExternalUserId()) + .eq(WeFlowerCustomerRel::getUserId,message.getUserId())); + weFlowerCustomerRelThreadLocal.set(weFlowerCustomerRel); weCustomerService.getCustomersInfoAndSynchWeCustomer(message.getExternalUserId()); } if (message.getState() != null && message.getWelcomeCode() != null) { @@ -65,6 +74,7 @@ public class WeCallBackAddExternalContactImpl extends WeEventStrategy { //裂变任务处理 private void taskFissionRecordHandle(String state, String wecomCode, String userId, String externalUserId) { + log.info("裂变任务处理 >>>>>>>>>>start"); //查询裂变客户任务记录 String fissionRecordId = state.substring(WeConstans.FISSION_PREFIX.length()); WeTaskFissionRecord weTaskFissionRecord = weTaskFissionRecordService.selectWeTaskFissionRecordById(Long.valueOf(fissionRecordId)); @@ -72,20 +82,23 @@ public class WeCallBackAddExternalContactImpl extends WeEventStrategy { //查询裂变任务详情 WeTaskFission weTaskFission = weTaskFissionService .selectWeTaskFissionById(weTaskFissionRecord.getTaskFissionId()); - - Long fissNum = weTaskFissionRecord.getFissNum() + 1; - weTaskFissionRecord.setFissNum(fissNum); - + Long fissNum = weTaskFissionRecord.getFissNum(); + if (weFlowerCustomerRelThreadLocal.get() == null){ + fissNum++; + weTaskFissionRecord.setFissNum(fissNum); + } + log.info("查询裂变任务详情 >>>>>>>>>>{}",JSONObject.toJSONString(weTaskFissionRecord)); if (weTaskFission != null){ //发送欢迎语 - String welcomeMsg = weTaskFission.getWelcomeMsg(); - WeWelcomeMsg.WeWelcomeMsgBuilder weWelcomeMsgBuilder = JSONObject.parseObject(welcomeMsg, WeWelcomeMsg.WeWelcomeMsgBuilder.class); - weWelcomeMsgBuilder.welcome_code(wecomCode); + WeWelcomeMsg.WeWelcomeMsgBuilder weWelcomeMsgBuilder = WeWelcomeMsg.builder().welcome_code(wecomCode); + weWelcomeMsgBuilder.text(WeWelcomeMsg.Text.builder() + .content(weTaskFission.getWelcomeMsg()).build()); weCustomerService.sendWelcomeMsg(weWelcomeMsgBuilder.build()); } //裂变数量完成任务处理,消费兑换码 if (fissNum >= weTaskFission.getFissNum()){ + log.info("裂变数量完成任务处理,消费兑换码 >>>>>>>>>>{}",fissNum); weTaskFissionRecord.setCompleteTime(new Date()); WeTaskFissionReward reward = new WeTaskFissionReward(); reward.setTaskFissionId(weTaskFissionRecord.getTaskFissionId()); @@ -96,8 +109,9 @@ public class WeCallBackAddExternalContactImpl extends WeEventStrategy { fissionReward.setRewardUserId(weTaskFissionRecord.getCustomerId()); weTaskFissionRewardService.updateWeTaskFissionReward(fissionReward); } - + log.info("裂变任务处理变更 >>>>>>>>>>{}",JSONObject.toJSONString(weTaskFissionRecord)); weTaskFissionRecordService.updateWeTaskFissionRecord(weTaskFissionRecord); + log.info("裂变任务处理 >>>>>>>>>>end"); } } @@ -111,12 +125,19 @@ public class WeCallBackAddExternalContactImpl extends WeEventStrategy { */ private void empleCodeHandle(String state, String wecomCode, String userId, String externalUserId) { try { + log.debug("递增扫码次数>>>>>>>>>>>>>>>"); + // 增加扫码次数 + weEmpleCodeService.updateScanTimesByState(state); log.info("执行发送欢迎语>>>>>>>>>>>>>>>"); WeWelcomeMsg.WeWelcomeMsgBuilder weWelcomeMsgBuilder = WeWelcomeMsg.builder().welcome_code(wecomCode); - WeEmpleCodeDto messageMap = weEmpleCodeService.selectWelcomeMsgByActivityScene(state, userId); + // 获取员工活码相关信息 + WeEmpleCodeDto messageMap = weEmpleCodeService.selectWelcomeMsgByState(state); if (messageMap != null) { String empleCodeId = messageMap.getEmpleCodeId(); - //查询活码对应标签 + + // 查询对应员工活码 + + // 查询活码对应标签 List tagList = weEmpleCodeTagService.list(new LambdaQueryWrapper() .eq(WeEmpleCodeTag::getEmpleCodeId, empleCodeId)); //查询外部联系人与通讯录关系数据 @@ -138,18 +159,26 @@ public class WeCallBackAddExternalContactImpl extends WeEventStrategy { weFlowerCustomerTagRelService.saveOrUpdateBatch(weFlowerCustomerTagRels); }); log.debug(">>>>>>>>>欢迎语查询结果:{}", JSONObject.toJSONString(messageMap)); + // 发送欢迎语 if (messageMap != null) { + if (StringUtils.isNotEmpty(messageMap.getWelcomeMsg())) { weWelcomeMsgBuilder.text(WeWelcomeMsg.Text.builder() .content(messageMap.getWelcomeMsg()).build()); } + + // 构造WeMediaDto。要么是普通情况创建的员工活码,使用创建时指定的素材,要么是新客拉群信创建的员工活码,使用对应群活码图片作为素材 if (StringUtils.isNotEmpty(messageMap.getCategoryId())) { - WeMediaDto weMediaDto = weMaterialService - .uploadTemporaryMaterial(messageMap.getMaterialUrl(), MediaType.IMAGE.getMediaType(),messageMap.getMaterialName()); - Optional.ofNullable(weMediaDto).ifPresent(media -> { - weWelcomeMsgBuilder.image(WeWelcomeMsg.Image.builder().media_id(media.getMedia_id()) - .pic_url(media.getUrl()).build()); - }); + WeMediaDto weMediaDto = weMaterialService.uploadTemporaryMaterial(messageMap.getMaterialUrl(), MediaType.IMAGE.getMediaType(),messageMap.getMaterialName()); + bindAttachments(weWelcomeMsgBuilder, weMediaDto); + } + + WeCommunityNewGroup communityNewGroup = weCommunityNewGroupService.getOne(new LambdaQueryWrapper() + .eq(WeCommunityNewGroup::getEmplCodeId, Long.valueOf(empleCodeId))); + if (StringUtils.isNotNull(communityNewGroup)) { + WeGroupCode weGroupCode = weGroupCodeService.selectWeGroupCodeById(communityNewGroup.getGroupCodeId()); + WeMediaDto weMediaDto = weMaterialService.uploadTemporaryMaterial(weGroupCode.getCodeUrl(), MediaType.IMAGE.getMediaType(), weGroupCode.getActivityName()); + bindAttachments(weWelcomeMsgBuilder, weMediaDto); } weCustomerService.sendWelcomeMsg(weWelcomeMsgBuilder.build()); } @@ -160,6 +189,18 @@ public class WeCallBackAddExternalContactImpl extends WeEventStrategy { } } + private void bindAttachments(WeWelcomeMsg.WeWelcomeMsgBuilder weWelcomeMsgBuilder, WeMediaDto weMediaDto) { + Optional.ofNullable(weMediaDto).ifPresent(media -> { + List attachments = new ArrayList(); + JSONObject json = new JSONObject(); + json.put("msgtype",weMediaDto.getType()); + json.put(weMediaDto.getType(),WeWelcomeMsg.Image.builder().media_id(media.getMedia_id()) + .pic_url(media.getUrl()).build()); + attachments.add(json); + weWelcomeMsgBuilder.attachments(attachments); + }); + } + private boolean isFission(String str) { if (str.indexOf(WeConstans.FISSION_PREFIX) != -1){ return true; diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallBackAddHalfExternalContactImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallBackAddHalfExternalContactImpl.java index 4f0c4dd1c763ed6fb2bc8028504093c618e427e0..9a93a748a5166c38893c93e39d817c4cbe6322be 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallBackAddHalfExternalContactImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallBackAddHalfExternalContactImpl.java @@ -54,7 +54,7 @@ public class WeCallBackAddHalfExternalContactImpl extends WeEventStrategy { if (message.getState() != null && message.getWelcomeCode() != null) { log.info("执行发送欢迎语>>>>>>>>>>>>>>>"); WeWelcomeMsg.WeWelcomeMsgBuilder weWelcomeMsgBuilder = WeWelcomeMsg.builder().welcome_code(message.getWelcomeCode()); - WeEmpleCodeDto messageMap = weEmpleCodeService.selectWelcomeMsgByActivityScene(message.getState(),message.getUserId()); + WeEmpleCodeDto messageMap = weEmpleCodeService.selectWelcomeMsgByScenario(message.getState(),message.getUserId()); String empleCodeId = messageMap.getEmpleCodeId(); //查询活码对应标签 List tagList = weEmpleCodeTagService.list(new LambdaQueryWrapper() diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customergroup/WeCallBackUpdateGroupImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customergroup/WeCallBackUpdateGroupImpl.java index c8458067d1945eed8a0b9990e0c655074e7a1976..8ff8d2195a1747b2c4d748254c9d528423faa0a7 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customergroup/WeCallBackUpdateGroupImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customergroup/WeCallBackUpdateGroupImpl.java @@ -1,7 +1,9 @@ package com.linkwechat.wecom.factory.impl.customergroup; +import com.linkwechat.common.enums.CallbackEventUpdateDetail; import com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO; import com.linkwechat.wecom.factory.WeEventStrategy; +import com.linkwechat.wecom.service.IWeGroupCodeActualService; import com.linkwechat.wecom.service.IWeGroupService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -18,10 +20,18 @@ public class WeCallBackUpdateGroupImpl extends WeEventStrategy { @Autowired private IWeGroupService weGroupService; + @Autowired + private IWeGroupCodeActualService groupCodeActualService; + @Override public void eventHandle(WxCpXmlMessageVO message) { try { weGroupService.updateWeGroup(message.getChatId()); + String updateDetail = message.getUpdateDetail(); + if (updateDetail.equals(CallbackEventUpdateDetail.ADD_MEMBER.getType())) { + // 添加成员,该群的实际群活码扫码次数需要加1 + groupCodeActualService.updateScanTimesByChatId(message.getChatId()); + } } catch (Exception e) { e.printStackTrace(); log.error("update>>>>>>>>>param:{},ex:{}",message.getChatId(),e); diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/interceptor/WeAccessTokenInterceptor.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/interceptor/WeAccessTokenInterceptor.java index d97639755a249acf7ac1b4280b73644de36ec1c4..5ef93eaaef3fba0956b60d517e6494f921981696 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/interceptor/WeAccessTokenInterceptor.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/interceptor/WeAccessTokenInterceptor.java @@ -41,12 +41,6 @@ public class WeAccessTokenInterceptor implements Interceptor{ */ @Override public boolean beforeExecute(ForestRequest request) { - - - - - - String uri=request.getUrl().replace("http://",""); log.info(">>>>>>>>>>>>>>>>>>>>>>>>uri:{}",uri); //request.setContentType("application/json"); @@ -54,9 +48,6 @@ public class WeAccessTokenInterceptor implements Interceptor{ request.setDataType(ForestDataType.JSON); request.setContentType("application/json"); } - - - // 添加请求参数access_token if(!Arrays.asList(weComeConfig.getNoAccessTokenUrl()).contains(uri)){ String token=""; @@ -78,8 +69,6 @@ public class WeAccessTokenInterceptor implements Interceptor{ request.addQuery("access_token",token); } - - //添加服务器统一请求地址 request.setUrl(weComeConfig.getServerUrl()+weComeConfig.getWeComePrefix()+uri); diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/interceptor/WeiXinAccessTokenInterceptor.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/interceptor/WeiXinAccessTokenInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..c5cb8cfd07ead238c2937405cf0729fc2ef7c946 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/interceptor/WeiXinAccessTokenInterceptor.java @@ -0,0 +1,90 @@ +package com.linkwechat.wecom.interceptor; + +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSONObject; +import com.dtflys.forest.exceptions.ForestRuntimeException; +import com.dtflys.forest.http.ForestRequest; +import com.dtflys.forest.http.ForestResponse; +import com.dtflys.forest.interceptor.Interceptor; +import com.dtflys.forest.utils.ForestDataType; +import com.linkwechat.common.constant.WeConstans; +import com.linkwechat.common.core.redis.RedisCache; +import com.linkwechat.common.utils.StringUtils; +import com.linkwechat.wecom.domain.weixin.dto.WxBaseResultDto; +import com.linkwechat.wecom.domain.weixin.dto.WxTokenDto; +import com.linkwechat.wecom.wxclient.WxCommonClient; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.concurrent.TimeUnit; + +/** + * @author danmo + * @description 微信请求拦截器 + * @date 2021/4/5 15:17 + **/ +@Slf4j +@Component +public class WeiXinAccessTokenInterceptor implements Interceptor { + //暂时写到配置文件,之后写入数据库 + @Value("${weixin.appid}") + private String appId; + @Value("${weixin.secret}") + private String secret; + private final String grantType = "client_credential"; + + @Autowired + private WxCommonClient wxCommonClient; + + @Autowired + private RedisCache redisCache; + + @Override + public boolean beforeExecute(ForestRequest request){ + request.setDataType(ForestDataType.JSON); + String accessToken = findAccessToken(); + request.addQuery("access_token",accessToken); + return true; + } + + + private String findAccessToken(){ + //获取用户token + String accessToken =redisCache.getCacheObject(WeConstans.WX_ACCESS_TOKEN); + if (StringUtils.isEmpty(accessToken)){ + //当用户token失效,重新获取token + WxTokenDto wxTokenDto = wxCommonClient.getToken(grantType, appId, secret); + if(wxTokenDto != null && StringUtils.isNotEmpty(wxTokenDto.getAccessToken())){ + redisCache.setCacheObject(WeConstans.WX_AUTH_ACCESS_TOKEN, wxTokenDto.getAccessToken(), wxTokenDto.getExpiresIn(), TimeUnit.SECONDS); + accessToken = wxTokenDto.getAccessToken(); + } + } + return accessToken; + } + + + /** + * 请求发送失败时被调用 + * @param e + * @param request + * @param response + */ + @Override + public void onError(ForestRuntimeException e, ForestRequest request, ForestResponse response) { + log.info("url:{},------params:{},----------result:"+request.getUrl(), + JSONObject.toJSONString(request.getArguments()), + response.getContent()); + throw new ForestRuntimeException(response.getContent()); + } + + @Override + public void onSuccess(Object data, ForestRequest request, ForestResponse response) { + log.info("url:【{}】,result:【{}】",request.getUrl(),response.getContent()); + WxBaseResultDto wxBaseResultDto = JSONUtil.toBean(response.getContent(), WxBaseResultDto.class); + if(null != wxBaseResultDto.getErrcode() && !wxBaseResultDto.getErrcode().equals(WeConstans.WE_SUCCESS_CODE)){ + throw new ForestRuntimeException(response.getContent()); + } + } +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/interceptor/WeiXinAuthInterceptor.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/interceptor/WeiXinAuthInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..b1e79bfebd019cd54463c2211eb54f2e33a60726 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/interceptor/WeiXinAuthInterceptor.java @@ -0,0 +1,98 @@ +package com.linkwechat.wecom.interceptor; + +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSONObject; +import com.dtflys.forest.exceptions.ForestRuntimeException; +import com.dtflys.forest.http.ForestRequest; +import com.dtflys.forest.http.ForestResponse; +import com.dtflys.forest.interceptor.Interceptor; +import com.dtflys.forest.utils.ForestDataType; +import com.linkwechat.common.constant.WeConstans; +import com.linkwechat.common.core.redis.RedisCache; +import com.linkwechat.common.exception.wecom.WeComException; +import com.linkwechat.common.utils.StringUtils; +import com.linkwechat.wecom.domain.weixin.dto.WxTokenDto; +import com.linkwechat.wecom.domain.weixin.dto.WxBaseResultDto; +import com.linkwechat.wecom.wxclient.WxAuthClient; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.concurrent.TimeUnit; + +/** + * @author danmo + * @description 微信授权拦截器 + * @date 2021/4/5 15:28 + **/ + +@Slf4j +@Component +public class WeiXinAuthInterceptor implements Interceptor { + //暂时写到配置文件,之后写入数据库 + @Value("${weixin.appid}") + private String appId; + @Value("${weixin.secret}") + private String secret; + private final String grantType = "refresh_token"; + + @Autowired + private WxAuthClient wxAuthClient; + + @Autowired + private RedisCache redisCache; + + @Override + public boolean beforeExecute(ForestRequest request){ + Object openId =request.getQuery("openid"); + request.setDataType(ForestDataType.JSON); + if (openId != null){ + request.addQuery("access_token",findAccessToken(openId.toString())); + } + return true; + } + + + private String findAccessToken(String openId){ + //获取用户token + WxTokenDto wxTokenDto = redisCache.getCacheObject(WeConstans.WX_AUTH_ACCESS_TOKEN + ":" + openId); + if (wxTokenDto == null){ + //当用户token失效,则获取refreshToken + String refreshToken = redisCache.getCacheObject(WeConstans.WX_AUTH_REFRESH_ACCESS_TOKEN + ":" + openId); + if(StringUtils.isEmpty(refreshToken)){ + throw new WeComException(1001,"token失效,请重新授权"); + }else { + wxTokenDto = wxAuthClient.refreshToken(appId, grantType, refreshToken); + if(wxTokenDto != null && StringUtils.isNotEmpty(wxTokenDto.getAccessToken())){ + redisCache.setCacheObject(WeConstans.WX_AUTH_ACCESS_TOKEN+":"+ openId, wxTokenDto, wxTokenDto.getExpiresIn(), TimeUnit.SECONDS); + } + } + } + return wxTokenDto.getAccessToken(); + } + + + /** + * 请求发送失败时被调用 + * @param e + * @param request + * @param response + */ + @Override + public void onError(ForestRuntimeException e, ForestRequest request, ForestResponse response) { + log.info("url:{},------params:{},----------result:"+request.getUrl(), + JSONObject.toJSONString(request.getArguments()), + response.getContent()); + throw new ForestRuntimeException(response.getContent()); + } + + @Override + public void onSuccess(Object data, ForestRequest request, ForestResponse response) { + log.info("url:【{}】,result:【{}】",request.getUrl(),response.getContent()); + WxBaseResultDto wxBaseResultDto = JSONUtil.toBean(response.getContent(), WxBaseResultDto.class); + if(null != wxBaseResultDto.getErrcode() && !wxBaseResultDto.getErrcode().equals(WeConstans.WE_SUCCESS_CODE)){ + throw new ForestRuntimeException(response.getContent()); + } + } +} 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 3a541819e5151fa18fa8107199d17a639034129c..0918ebb00508d7e202c476ac5e04de380d15a841 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 @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.linkwechat.wecom.domain.WeCommunityNewGroup; import com.linkwechat.wecom.domain.vo.WeCommunityNewGroupVo; import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Optional; /** * 社群运营 新客自动拉群 mapper接口 @@ -13,27 +15,28 @@ import java.util.List; * @author kewen * @date 2021-02-19 */ +@Repository public interface WeCommunityNewGroupMapper extends BaseMapper { /** * 查询新客自动拉群列表 * - * @param employCodeName 员工名称 - * @param createBy 创建人 - * @param beginTime 开始时间 - * @param endTime 结束时间 + * @param emplCodeName 员工名称 + * @param createBy 创建人 + * @param beginTime 开始时间 + * @param endTime 结束时间 * @return {WeCommunityNewGroupVo}s 列表 */ - List selectWeCommunityNewGroupList(@Param("employCodeName") String employCodeName, @Param("createBy") String createBy + List selectWeCommunityNewGroupList(@Param("emplCodeName") String emplCodeName, @Param("createBy") String createBy , @Param("beginTime") String beginTime, @Param("endTime") String endTime); /** * 获取新客自动拉群详细信息 * - * @param newGroupId 主键id + * @param id 主键id * @return {@link WeCommunityNewGroupVo} 自动拉群信息 */ - WeCommunityNewGroupVo selectWeCommunityNewGroupById(@Param("newGroupId") Long newGroupId); + Optional selectWeCommunityNewGroupById(@Param("id") Long id); /** * 删除新客自动拉群 @@ -41,7 +44,7 @@ public interface WeCommunityNewGroupMapper extends BaseMapper idList); + int batchRemoveWeCommunityNewGroupByIds(@Param("ids") List idList); /** * 通过id查询新客自动拉群信息列表 @@ -49,6 +52,6 @@ public interface WeCommunityNewGroupMapper extends BaseMapper selectWeCommunityNewGroupByIds(@Param("ids") List ids); + List selectWeCommunityNewGroupByIds(@Param("ids") List ids); } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeEmpleCodeMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeEmpleCodeMapper.java index 092dcbf52951dc0024202ec92b18fea52c1e26be..f9c517db99394073640d8b7b7e2a76d3bf1c6548 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeEmpleCodeMapper.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeEmpleCodeMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.linkwechat.wecom.domain.WeEmpleCode; import com.linkwechat.wecom.domain.dto.WeEmpleCodeDto; import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; import java.util.List; @@ -13,6 +14,7 @@ import java.util.List; * @author ruoyi * @date 2020-10-04 */ +@Repository public interface WeEmpleCodeMapper extends BaseMapper { /** @@ -81,10 +83,17 @@ public interface WeEmpleCodeMapper extends BaseMapper /** * 通过活动场景获取客户欢迎语 - * @param activityScene 活动场景 + * @param scenario 活动场景 * @return */ - public WeEmpleCodeDto selectWelcomeMsgByActivityScene(@Param("activityScene") String activityScene, @Param("userId") String userId); + public WeEmpleCodeDto selectWelcomeMsgByScenario(@Param("scenario") String scenario, @Param("userId") String userId); + + /** + * 通过state定位员工活码 + * @param state state + * @return 员工活码 + */ + WeEmpleCodeDto selectWelcomeMsgByState(@Param("state") String state); /** * 通过成员id 获取去成员活码 @@ -92,4 +101,10 @@ public interface WeEmpleCodeMapper extends BaseMapper * @return */ WeEmpleCode getQrcodeByUserId(String userId); + + /** + * 递增扫码次数 + * @param state state + */ + void updateScanTimesByState(String state); } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeEmpleCodeTagMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeEmpleCodeTagMapper.java index 07d2637c3376d89c8eaa808d67e79cd62711f9f6..b2bfa99b466d580e0e35fd5b509d9f0df16b8f33 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeEmpleCodeTagMapper.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeEmpleCodeTagMapper.java @@ -5,6 +5,7 @@ import java.util.List; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.linkwechat.wecom.domain.WeEmpleCodeTag; import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; /** * 员工活码标签Mapper接口 @@ -12,6 +13,7 @@ import org.apache.ibatis.annotations.Param; * @author ruoyi * @date 2020-10-04 */ +@Repository public interface WeEmpleCodeTagMapper extends BaseMapper { /** @@ -81,7 +83,7 @@ public interface WeEmpleCodeTagMapper extends BaseMapper /** * 批量逻辑删除 - * @param ids + * @param ids 员工活码id列表 * @return */ public int batchRemoveWeEmpleCodeTagIds(@Param("ids") List ids); diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeEmpleCodeUseScopMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeEmpleCodeUseScopMapper.java index 7cb34889fe754e4ecbd76a2e7a095319cb412ceb..47587d12f5f5ccb0d2d71cef274e7862289d1cf5 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeEmpleCodeUseScopMapper.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeEmpleCodeUseScopMapper.java @@ -3,6 +3,7 @@ package com.linkwechat.wecom.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.linkwechat.wecom.domain.WeEmpleCodeUseScop; import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; import java.util.List; @@ -12,6 +13,7 @@ import java.util.List; * @author ruoyi * @date 2020-10-04 */ +@Repository public interface WeEmpleCodeUseScopMapper extends BaseMapper { /** @@ -20,7 +22,7 @@ public interface WeEmpleCodeUseScopMapper extends BaseMapper * @param id 员工活码使用人ID * @return 员工活码使用人 */ - public WeEmpleCodeUseScop selectWeEmpleCodeUseScopById(Long id); + WeEmpleCodeUseScop selectWeEmpleCodeUseScopById(Long id); /** * 查询员工活码使用人列表 @@ -28,7 +30,7 @@ public interface WeEmpleCodeUseScopMapper extends BaseMapper * @param empleCodeId 员工活码id * @return 员工活码使用人集合 */ - public List selectWeEmpleCodeUseScopListById(@Param("empleCodeId") Long empleCodeId); + List selectWeEmpleCodeUseScopListById(@Param("empleCodeId") Long empleCodeId); /** * 查询员工活码使用人列表(批量) @@ -43,7 +45,7 @@ public interface WeEmpleCodeUseScopMapper extends BaseMapper * @param weEmpleCodeUseScop 员工活码使用人 * @return 结果 */ - public int insertWeEmpleCodeUseScop(WeEmpleCodeUseScop weEmpleCodeUseScop); + int insertWeEmpleCodeUseScop(WeEmpleCodeUseScop weEmpleCodeUseScop); /** * 修改员工活码使用人 @@ -51,7 +53,7 @@ public interface WeEmpleCodeUseScopMapper extends BaseMapper * @param weEmpleCodeUseScop 员工活码使用人 * @return 结果 */ - public int updateWeEmpleCodeUseScop(WeEmpleCodeUseScop weEmpleCodeUseScop); + int updateWeEmpleCodeUseScop(WeEmpleCodeUseScop weEmpleCodeUseScop); /** * 删除员工活码使用人 @@ -59,7 +61,7 @@ public interface WeEmpleCodeUseScopMapper extends BaseMapper * @param id 员工活码使用人ID * @return 结果 */ - public int deleteWeEmpleCodeUseScopById(Long id); + int deleteWeEmpleCodeUseScopById(Long id); /** * 批量删除员工活码使用人 @@ -67,22 +69,22 @@ public interface WeEmpleCodeUseScopMapper extends BaseMapper * @param ids 需要删除的数据ID * @return 结果 */ - public int deleteWeEmpleCodeUseScopByIds(Long[] ids); + int deleteWeEmpleCodeUseScopByIds(Long[] ids); /** * 批量保存 * @param weEmpleCodeUseScops * @return */ - public int batchInsetWeEmpleCodeUseScop(@Param("weEmpleCodeUseScops") List weEmpleCodeUseScops); + int batchInsetWeEmpleCodeUseScop(@Param("weEmpleCodeUseScops") List weEmpleCodeUseScops); /** * 批量物理删除 - * @param ids + * @param ids 员工活码id列表 * @return */ - public int batchRemoveWeEmpleCodeUseScopIds(List ids); + int batchRemoveWeEmpleCodeUseScopIds(List ids); } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupCodeActualMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupCodeActualMapper.java index 5be00c8e720c033ab177c7d60180e2c9871372d1..6dd9a16b8a40751de3bea91416ea80ff066e2cc3 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupCodeActualMapper.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupCodeActualMapper.java @@ -3,6 +3,7 @@ package com.linkwechat.wecom.mapper; import java.util.List; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.linkwechat.wecom.domain.WeGroup; import com.linkwechat.wecom.domain.WeGroupCodeActual; /** @@ -18,14 +19,14 @@ public interface WeGroupCodeActualMapper extends BaseMapper { * @param id 实际群码ID * @return 实际群码 */ - public WeGroupCodeActual selectWeGroupCodeActualById(Long id); + WeGroupCodeActual selectWeGroupCodeActualById(Long id); /** * 根据群聊id获取群实际码 * @param chatId 群聊id * @return 结果 */ - public WeGroupCodeActual selectWeGroupCodeActualByChatId(String chatId); + WeGroupCodeActual selectWeGroupCodeActualByChatId(String chatId); /** * 查询实际群码列表 @@ -33,7 +34,7 @@ public interface WeGroupCodeActualMapper extends BaseMapper { * @param weGroupCodeActual 实际群码 * @return 实际群码集合 */ - public List selectWeGroupCodeActualList(WeGroupCodeActual weGroupCodeActual); + List selectWeGroupCodeActualList(WeGroupCodeActual weGroupCodeActual); /** * 新增实际群码 @@ -41,7 +42,7 @@ public interface WeGroupCodeActualMapper extends BaseMapper { * @param weGroupCodeActual 实际群码 * @return 结果 */ - public int insertWeGroupCodeActual(WeGroupCodeActual weGroupCodeActual); + int insertWeGroupCodeActual(WeGroupCodeActual weGroupCodeActual); /** * 修改实际群码 @@ -49,7 +50,7 @@ public interface WeGroupCodeActualMapper extends BaseMapper { * @param weGroupCodeActual 实际群码 * @return 结果 */ - public int updateWeGroupCodeActual(WeGroupCodeActual weGroupCodeActual); + int updateWeGroupCodeActual(WeGroupCodeActual weGroupCodeActual); /** * 删除实际群码 @@ -57,7 +58,7 @@ public interface WeGroupCodeActualMapper extends BaseMapper { * @param id 实际群码ID * @return 结果 */ - public int deleteWeGroupCodeActualById(Long id); + int deleteWeGroupCodeActualById(Long id); /** * 批量删除实际群码 @@ -65,7 +66,7 @@ public interface WeGroupCodeActualMapper extends BaseMapper { * @param ids 需要删除的数据ID * @return 结果 */ - public int deleteWeGroupCodeActualByIds(Long[] ids); + int deleteWeGroupCodeActualByIds(Long[] ids); /** * 通过群活码id查询实际码列表 @@ -73,19 +74,25 @@ public interface WeGroupCodeActualMapper extends BaseMapper { * @param groupCodeId 群活码id * @return 结果 */ - public List selectActualListByGroupCodeId(Long groupCodeId); + List selectActualListByGroupCodeId(Long groupCodeId); /** * 通过群活码id删除实际码 * @param groupCodeIds 群活码id列表 * @return 结果 */ - public int deleteActualListByGroupCodeIds(Long[] groupCodeIds); + int deleteActualListByGroupCodeIds(Long[] groupCodeIds); /** * 检测chatId是否唯一 * @param chatId 群聊id * @return 结果 */ - public int checkChatIdUnique(String chatId); + int checkChatIdUnique(String chatId); + + /** + * 通过群id递增其实际群活码扫码次数 + * @param chatId + */ + void updateScanTimesByChatId(String chatId); } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupCodeMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupCodeMapper.java index 9a70d0ad99bc874429ea3555050cbf21ad3078a5..864d34ed3d1c5ca41beb736378ea2584d0f7235c 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupCodeMapper.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupCodeMapper.java @@ -3,7 +3,10 @@ package com.linkwechat.wecom.mapper; import java.util.List; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.linkwechat.wecom.domain.WeGroup; import com.linkwechat.wecom.domain.WeGroupCode; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; /** * 客户群活码Mapper接口 @@ -11,6 +14,8 @@ import com.linkwechat.wecom.domain.WeGroupCode; * @author ruoyi * @date 2020-10-07 */ +@Mapper +@Repository public interface WeGroupCodeMapper extends BaseMapper { /** @@ -19,7 +24,7 @@ public interface WeGroupCodeMapper extends BaseMapper * @param id 客户群活码ID * @return 客户群活码 */ - public WeGroupCode selectWeGroupCodeById(Long id); + WeGroupCode selectWeGroupCodeById(Long id); /** * 查询客户群活码列表 @@ -27,14 +32,14 @@ public interface WeGroupCodeMapper extends BaseMapper * @param weGroupCode 客户群活码 * @return 客户群活码集合 */ - public List selectWeGroupCodeList(WeGroupCode weGroupCode); + List selectWeGroupCodeList(WeGroupCode weGroupCode); /** * 根据群活码id查询群活码列表 * @param ids id列表 * @return 结果 */ - public List selectWeGroupCodeListByIds(List ids); + List selectWeGroupCodeListByIds(List ids); /** * 新增客户群活码 @@ -42,7 +47,7 @@ public interface WeGroupCodeMapper extends BaseMapper * @param weGroupCode 客户群活码 * @return 结果 */ - public int insertWeGroupCode(WeGroupCode weGroupCode); + int insertWeGroupCode(WeGroupCode weGroupCode); /** * 修改客户群活码 @@ -50,7 +55,7 @@ public interface WeGroupCodeMapper extends BaseMapper * @param weGroupCode 客户群活码 * @return 结果 */ - public int updateWeGroupCode(WeGroupCode weGroupCode); + int updateWeGroupCode(WeGroupCode weGroupCode); /** * 删除客户群活码 @@ -58,7 +63,7 @@ public interface WeGroupCodeMapper extends BaseMapper * @param id 客户群活码ID * @return 结果 */ - public int deleteWeGroupCodeById(Long id); + int deleteWeGroupCodeById(Long id); /** * 批量删除客户群活码 @@ -66,12 +71,34 @@ public interface WeGroupCodeMapper extends BaseMapper * @param ids 需要删除的数据ID * @return 结果 */ - public int deleteWeGroupCodeByIds(Long[] ids); + int deleteWeGroupCodeByIds(Long[] ids); /** * 检测活码名称是否唯一 * @param activityName 活码名称 * @return 结果 */ - public int checkActivityNameUnique(String activityName); + int checkActivityNameUnique(String activityName); + + /** + * 根据 uuid获取群活码 + * + * @param uuid uuid + * @return 结果 + */ + WeGroupCode getWeGroupByUuid(String uuid); + + /** + * 根据群活码id获取对应所有群聊信息 + * @param groupCodeId 群活码id + * @return 结果 + */ + List selectWeGroupListByGroupCodeId(Long groupCodeId); + + /** + * 获取群活码的总扫码次数 + * @param groupCodeId 群活码id + * @return 总扫码次数 + */ + int selectScanTimesByGroupCodeId(Long groupCodeId); } 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 index 89d5f1e1020dd8d23a86eeb75a8f1f560d5ec01e..04b9629bc0d91aed2c61f97061581275c31dd2f2 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopChatMapper.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopChatMapper.java @@ -2,7 +2,9 @@ package com.linkwechat.wecom.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.linkwechat.wecom.domain.WeGroupSopChat; +import com.linkwechat.wecom.domain.vo.WeCommunityTaskEmplVo; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import java.util.List; @@ -22,4 +24,21 @@ public interface WeGroupSopChatMapper extends BaseMapper { * @return 结果 */ int batchBindsSopChat(List sopChatList); + + /** + * 变更某员工sop规则发送任务的状态 + * + * @param ruleId 规则名称 + * @param emplId 员工id(即群聊群主) + * @return 结果 + */ + int updateChatSopStatus(@Param("ruleId") Long ruleId, @Param("emplId") String emplId); + + /** + * 根据SOP 规则id获取所有使用人员信息 + * + * @param ruleId sop id + * @return 结果 + */ + List getScopeListByRuleId(Long ruleId); } 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 index f5031dad9f94e57d5c227a11c6c181882fefa74c..510c643c200294827cce3ca851aab3f1c5f54ab3 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopMapper.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopMapper.java @@ -71,4 +71,13 @@ public interface WeGroupSopMapper extends BaseMapper { * @return 结果 */ List getChatIdListByRuleId(Long ruleId); + + /** + * 根据员工id获取对应的sop任务列表 + * @param emplId 员工id + * @param isDone 已完成还是待处理 + * @return 结果 + */ + List getEmplTaskList(@Param("emplId") String emplId, @Param("isDone") boolean isDone); + } 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 index fd17fc89fcc476b4fdaa02592024ee586065de61..d862bfc8e8009fa1cb9abf6b2d905b655f234c08 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeKeywordGroupTaskMapper.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeKeywordGroupTaskMapper.java @@ -56,4 +56,12 @@ public interface WeKeywordGroupTaskMapper extends BaseMapper * @return 结果 */ int checkNameUnique(String taskName); + + /** + * 通过名称或者关键词进行过滤 + * + * @param word 过滤字段 + * @return 结果 + */ + List filterByNameOrKeyword(String word); } 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 099ed78a7237a010cb5f704832fa0849c00546f9..8d96b05d36f091523f3e9a03bbbb22fb05a162b9 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 @@ -2,6 +2,7 @@ package com.linkwechat.wecom.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.linkwechat.wecom.domain.WeMaterial; +import com.linkwechat.wecom.domain.vo.WeMaterialVo; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -74,5 +75,10 @@ public interface WeMaterialMapper extends BaseMapper { */ int resetCategory(@Param("categoryId") String categoryId, @Param("material") String material); - + /** + * 根据id列表获取素材Vo列表 + * @param ids 素材id列表 + * @return 结果 + */ + List findMaterialVoListByIds(Long[] ids); } 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 index 0b392feb5c282892c61d62935706dc2aaafeb426..6ffd57b599b531e9491ae9c79eae1f6fa78e00da 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskMapper.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskMapper.java @@ -14,6 +14,19 @@ import java.util.List; @Repository public interface WePresTagGroupTaskMapper extends BaseMapper { + /** + * 添加新任务 + * @param task 老客标签建群任务 + * @return 结果 + */ + int insertTask(WePresTagGroupTask task); + + /** + * 更新任务 + * @param task 建群任务信息 + * @return 结果 + */ + int updateTask(WePresTagGroupTask task); /** * 获取老客户标签建群任务 * @@ -24,11 +37,12 @@ public interface WePresTagGroupTaskMapper extends BaseMapper /** * 根据条件查询老客标签建群任务 - * @param taskName 任务名称 - * @param createBy 创建人 + * + * @param taskName 任务名称 + * @param createBy 创建人 * @param beginTime 开始时间 - * @param endTime 结束时间 - * @param sendType 发送方式 + * @param endTime 结束时间 + * @param sendType 发送方式 * @return 结果 */ List selectTaskList( @@ -41,9 +55,19 @@ public interface WePresTagGroupTaskMapper extends BaseMapper /** * 检测任务名是否已被占用 + * * @param taskName 任务名 * @return 是否被占用 */ int checkTaskNameUnique(String taskName); + /** + * 获取某员工的任务 + * + * @param emplId 员工id + * @param isDone 已完成的还是待处理 + * @return 结果 + */ + List getTaskListByEmplId(@Param("emplId") String emplId, @Param("isDone") boolean isDone); + } 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 index 8d9165baabe81d31bd9363f09a3363a7cb880f7e..e86aad6bbd0dc837e6a3ed613b2f300118b62517 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskScopeMapper.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskScopeMapper.java @@ -2,8 +2,9 @@ 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 com.linkwechat.wecom.domain.vo.WeCommunityTaskEmplVo; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import java.util.List; @@ -18,7 +19,7 @@ public interface WePresTagGroupTaskScopeMapper extends BaseMapper getScopeListByTaskId(Long taskId); + List getScopeListByTaskId(Long taskId); /** * 批量绑定任务与使用人员 @@ -26,4 +27,13 @@ public interface WePresTagGroupTaskScopeMapper extends BaseMapper taskScopeList); + + /** + * 员工发送信息后,变更其任务状态为 "完成" + * + * @param taskId 任务id + * @param emplId 员工id + * @return 结果 + */ + int updateEmplTaskStatus(@Param("taskId") Long taskId, @Param("emplId") String emplId); } 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 index d15b16c516387da3ca0ca21552d20d57a8a6570c..404c94a94a8ca588c6f55c5ae3614ff3575e8f61 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskStatMapper.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskStatMapper.java @@ -16,16 +16,17 @@ public interface WePresTagGroupTaskStatMapper extends BaseMapper getStatByTaskId( - @Param("taskId") Long taskId, - @Param("customerName") String customerName, - @Param("isSent") Integer isSent, - @Param("isInGroup") Integer isInGroup - ); + List selectStatInfoByTaskId(@Param("taskId") Long taskId); + + /** + * 通过taskId获取所有外部联系人id + * + * @param taskId 老客标签建群任务id + * @return 结果 + */ + List getAllExternalIdByTaskId(Long taskId); } 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 index c22d22be453533e1c78829d6c16c10b9918956c5..baeeeb9533de9c896a6ef7c4149c265c812f2883 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskTagMapper.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskTagMapper.java @@ -25,8 +25,17 @@ public interface WePresTagGroupTaskTagMapper extends BaseMapper taskTagList); + + /** + * 通过任务id获取所有符合该任务标签的客户的external_id + * + * @param taskId 热任务id + * @return 结果 + */ + List getExternalUserIdListByTaskId(Long taskId); } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeTagMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeTagMapper.java index 1e7a4d9f09a403ba2bbe92b5daaa3ef72c2521ba..4a265828aa9b181c32616f71b9923c03e352c34e 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeTagMapper.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeTagMapper.java @@ -5,6 +5,7 @@ import java.util.List; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.linkwechat.wecom.domain.WeTag; import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; /** * 企业微信标签Mapper接口 @@ -12,6 +13,7 @@ import org.apache.ibatis.annotations.Param; * @author ruoyi * @date 2020-09-07 */ +@Repository public interface WeTagMapper extends BaseMapper { /** diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeTaskFissionMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeTaskFissionMapper.java index 5727810cd1af129cc007b161b60da843cf2a0b0d..96face221d1b082367e045013f381dc940327934 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeTaskFissionMapper.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeTaskFissionMapper.java @@ -58,4 +58,10 @@ public interface WeTaskFissionMapper { * @return 结果 */ public int deleteWeTaskFissionByIds(Long[] ids); + + /** + * 更新过期任务 + * @return + */ + public void updateExpiredWeTaskFission(); } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeUserMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeUserMapper.java index d4fa04d8f6e062f67c728d4883d61ca7bb75351a..5ff24a15341ccfcf7ab864fe7a2eaf6b344020f3 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeUserMapper.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeUserMapper.java @@ -7,6 +7,7 @@ import com.linkwechat.wecom.domain.vo.WeAllocateCustomersVo; import com.linkwechat.wecom.domain.vo.WeAllocateGroupsVo; import com.linkwechat.wecom.domain.vo.WeLeaveUserVo; import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; import java.util.List; @@ -16,6 +17,7 @@ import java.util.List; * @author ruoyi * @date 2020-08-31 */ +@Repository public interface WeUserMapper extends BaseMapper { /** 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 index 21c4fbc46b8ad745aa1d946396ec5a361e67702e..b2a19620adb732c5bb5b9a3cac072c99b23639da 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCommunityKeywordToGroupService.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCommunityKeywordToGroupService.java @@ -63,4 +63,13 @@ public interface IWeCommunityKeywordToGroupService { * @return 结果 */ boolean taskNameIsUnique(String taskName); + + + /** + * 通过名称或者关键词进行过滤 + * + * @param word 过滤字段 + * @return 结果 + */ + List filterByNameOrKeyword(String word); } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCommunityNewGroupService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCommunityNewGroupService.java index cffe13910db0890f7290e50f988be5694b4ae321..a44ce8b157e3e9d1e2a2ab5cdd40f9307e60fb90 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCommunityNewGroupService.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCommunityNewGroupService.java @@ -6,6 +6,7 @@ import com.linkwechat.wecom.domain.dto.WeCommunityNewGroupDto; import com.linkwechat.wecom.domain.vo.WeCommunityNewGroupVo; import java.util.List; +import java.util.Optional; /** * 社群运营 新客自动拉群 @@ -26,25 +27,26 @@ public interface IWeCommunityNewGroupService extends IService selectWeCommunityNewGroupList(String empleCodeName, String createBy, String beginTime, String endTime); + List selectWeCommunityNewGroupList(String emplCodeName, String createBy, String beginTime, String endTime); /** * 获取新客自动拉群详细信息 * - * @param newGroupId 主键id + * @param id 主键id * @return {@link WeCommunityNewGroupVo} 自动拉群信息 */ - WeCommunityNewGroupVo selectWeCommunityNewGroupById(Long newGroupId); + Optional selectWeCommunityNewGroupById(Long id); /** * 修改新客自动拉群 * + * @param id 新客拉群id * @param communityNewGroupDto 信息 * @return 结果 */ - int updateWeCommunityNewGroup(WeCommunityNewGroupDto communityNewGroupDto); + int updateWeCommunityNewGroup(Long id, WeCommunityNewGroupDto communityNewGroupDto); /** * 删除新客自动拉群 @@ -52,15 +54,15 @@ public interface IWeCommunityNewGroupService extends IService idList); - - /** - * 通过id查询新客自动拉群信息 - * - * @param id id - * @return {@link WeCommunityNewGroup} 新客自动拉群信息 - */ - WeCommunityNewGroupVo selectWeCommunityNewGroupById(long id); + int batchRemoveWeCommunityNewGroupByIds(List idList); +// +// /** +// * 通过id查询新客自动拉群信息 +// * +// * @param id id +// * @return {@link WeCommunityNewGroup} 新客自动拉群信息 +// */ +// WeCommunityNewGroupVo selectWeCommunityNewGroupById(long id); /** * 通过id查询新客自动拉群信息列表 @@ -68,6 +70,6 @@ public interface IWeCommunityNewGroupService extends IService selectWeCommunityNewGroupByIds(List ids); + List selectWeCommunityNewGroupByIds(List ids); } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeEmpleCodeService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeEmpleCodeService.java index 7bbe852967e42f26b142258da109b67492cc3280..3ade394fa8943aadaccec72751b0d89d3200c09d 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeEmpleCodeService.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeEmpleCodeService.java @@ -10,7 +10,7 @@ import java.util.List; /** * 员工活码Service接口 - * + * * @author ruoyi * @date 2020-10-04 */ @@ -41,7 +41,7 @@ public interface IWeEmpleCodeService extends IService /** * 新增员工活码 - * + * * @param weEmpleCode 员工活码 * @return 结果 */ @@ -49,7 +49,7 @@ public interface IWeEmpleCodeService extends IService /** * 修改员工活码 - * + * * @param weEmpleCode 员工活码 * @return 结果 */ @@ -83,11 +83,18 @@ public interface IWeEmpleCodeService extends IService /** * 通过活动场景获取客户欢迎语 - * @param activityScene 活动场景 + * @param scenario 活动场景 * @param userId 成员id * @return */ - public WeEmpleCodeDto selectWelcomeMsgByActivityScene(String activityScene, String userId); + public WeEmpleCodeDto selectWelcomeMsgByScenario(String scenario, String userId); + + /** + * 通过state定位员工活码 + * @param state state + * @return 员工活码 + */ + WeEmpleCodeDto selectWelcomeMsgByState(String state); /** * 批量新增员工活码 @@ -116,4 +123,10 @@ public interface IWeEmpleCodeService extends IService * @return */ WeEmpleCode getQrcodeByUserId(String userId); + + /** + * 递增扫码次数 + * @param state state + */ + void updateScanTimesByState(String state); } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupCodeActualService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupCodeActualService.java index ff60eeb1ff07bdc0bba2552950bc40862175e4c7..a3060e2ca46f64a3817366a9cc00712e58fe1949 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupCodeActualService.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupCodeActualService.java @@ -75,4 +75,10 @@ public interface IWeGroupCodeActualService extends IService * @return 结果 */ public boolean checkChatIdUnique(WeGroupCodeActual weGroupCodeActual); + + /** + * 通过群id递增其实际群活码扫码次数 + * @param chatId + */ + void updateScanTimesByChatId(String chatId); } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupCodeService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupCodeService.java index 061d2759bf67cd0f701dfc0eec008cf1ebe2e729..439bbbda9c9ac9f7181c2b4475fe65db8c405c04 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupCodeService.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupCodeService.java @@ -20,14 +20,15 @@ public interface IWeGroupCodeService extends IService { * @param id 客户群活码ID * @return 客户群活码 */ - public WeGroupCode selectWeGroupCodeById(Long id); + WeGroupCode selectWeGroupCodeById(Long id); /** * 根据群活码id查询实际码列表 + * * @param groupCodeId 群活码id * @return 结果 */ - public List selectActualListByGroupCodeId(Long groupCodeId); + List selectActualListByGroupCodeId(Long groupCodeId); /** * 查询客户群活码列表 @@ -35,7 +36,7 @@ public interface IWeGroupCodeService extends IService { * @param weGroupCode 客户群活码 * @return 客户群活码集合 */ - public List selectWeGroupCodeList(WeGroupCode weGroupCode); + List selectWeGroupCodeList(WeGroupCode weGroupCode); /** * 根据群活码id查询群活码列表 @@ -43,7 +44,7 @@ public interface IWeGroupCodeService extends IService { * @param ids id列表 * @return 结果 */ - public List selectWeGroupCodeListByIds(List ids); + List selectWeGroupCodeListByIds(List ids); /** * 新增客户群活码 @@ -51,7 +52,7 @@ public interface IWeGroupCodeService extends IService { * @param weGroupCode 客户群活码 * @return 结果 */ - public void insertWeGroupCode(WeGroupCode weGroupCode); + void insertWeGroupCode(WeGroupCode weGroupCode); /** * 修改客户群活码 @@ -59,7 +60,7 @@ public interface IWeGroupCodeService extends IService { * @param weGroupCode 客户群活码 * @return 结果 */ - public int updateWeGroupCode(WeGroupCode weGroupCode); + int updateWeGroupCode(WeGroupCode weGroupCode); /** * 批量删除客户群活码 @@ -67,7 +68,7 @@ public interface IWeGroupCodeService extends IService { * @param ids 需要删除的客户群活码ID * @return 结果 */ - public int deleteWeGroupCodeByIds(Long[] ids); + int deleteWeGroupCodeByIds(Long[] ids); /** * 删除客户群活码信息 @@ -75,12 +76,22 @@ public interface IWeGroupCodeService extends IService { * @param id 客户群活码ID * @return 结果 */ - public int deleteWeGroupCodeById(Long id); + int deleteWeGroupCodeById(Long id); /** * 检测活码名称是否唯一 + * * @param weGroupCode 活码对象 * @return 结果 */ - public boolean checkActivityNameUnique(WeGroupCode weGroupCode); + boolean checkActivityNameUnique(WeGroupCode weGroupCode); + + /** + * 根据 uuid获取群活码 + * + * @param uuid uuid + * @return 结果 + */ + WeGroupCode getWeGroupByUuid(String uuid); + } 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 index 96e6127653fab0fe019adf9e2e27d6a7dc51e2b7..8fedc64e244fc64c7f87b014dde8499351b4ce43 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupSopService.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupSopService.java @@ -1,7 +1,10 @@ package com.linkwechat.wecom.service; +import com.linkwechat.wecom.domain.WeGroup; import com.linkwechat.wecom.domain.WeGroupSop; +import com.linkwechat.wecom.domain.vo.WeCommunityTaskEmplVo; import com.linkwechat.wecom.domain.vo.WeGroupSopVo; +import com.linkwechat.wecom.domain.vo.WeKeywordGroupTaskVo; import java.util.List; @@ -68,4 +71,35 @@ public interface IWeGroupSopService { * @return 是否唯一 */ boolean isRuleNameUnique(String ruleName); + + /** + * 根据员工id获取对应的sop任务列表 + * @param emplId 员工id + * @param isDone 已完成还是待处理 + * @return 结果 + */ + List getEmplTaskList(String emplId, boolean isDone); + + /** + * 变更某员工sop规则发送任务的状态 + * + * @param ruleId 规则名称 + * @param emplId 群聊的群主id + * @return 结果 + */ + int updateChatSopStatus(Long ruleId, String emplId); + + /** + * 根据SOP 规则id获取所有使用人员信息 + * + * @param ruleId sop id + * @return 结果 + */ + List getScopeListByRuleId(Long ruleId); + + /** + * 向指定的群聊进行sop企微消息推送 + * @param groupIdList 群聊id列表 + */ + void sendMessage(List groupIdList); } 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 index 52f7ca0f1511669c3945fff676500ba742cca955..44b814a5dfd0d208f2bd98986b0740094c419348 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWePresTagGroupTaskService.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWePresTagGroupTaskService.java @@ -1,8 +1,9 @@ package com.linkwechat.wecom.service; +import com.linkwechat.wecom.domain.WePresTagGroupTask; 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.WeCommunityTaskEmplVo; import com.linkwechat.wecom.domain.vo.WePresTagGroupTaskVo; import com.linkwechat.wecom.domain.vo.WePresTagGroupTaskStatVo; @@ -14,12 +15,13 @@ import java.util.List; public interface IWePresTagGroupTaskService { /** - * 新增建群任务 - * - * @param taskDto 建群所需数据 - * @return 数据库新增行数 + * 添加新标签建群任务 + * @param task 建群任务本体信息 + * @param tagIdList 标签列表 + * @param emplIdList 员工列表 + * @return 结果 */ - int add(WePresTagGroupTaskDto taskDto); + int add(WePresTagGroupTask task, List tagIdList, List emplIdList); /** * 根据条件查询任务列表 @@ -31,7 +33,7 @@ public interface IWePresTagGroupTaskService { * @param endTime 结束时间 * @return 结果 */ - List selectTaskListList(String taskName, Integer sendType, String createBy, String beginTime, String endTime); + List selectTaskList(String taskName, Integer sendType, String createBy, String beginTime, String endTime); /** * 通过id获取老客标签建群任务 @@ -69,27 +71,49 @@ public interface IWePresTagGroupTaskService { /** * 通过老客标签建群id获取其统计信息 * - * @param taskId 任务id - * @param customerName 客户名 - * @param isSent 是否已发送 - * @param isInGroup 是否已在群 + * @param taskId 任务id * @return 统计信息 */ - List getStatByTaskId(Long taskId, String customerName, Integer isSent, Integer isInGroup); + List getStatByTaskId(Long taskId); + /** - * 通过任务id获取对应使用员工 + * 根据任务id获取对应员工信息列表 * * @param taskId 任务id * @return 结果 */ - List getEmplListByTaskId(Long taskId); + List getScopeListByTaskId(Long taskId); /** - * 通过任务id获取标签列表 + * 根据任务id获取对应标签信息列表 * * @param taskId 任务id * @return 结果 */ List getTagListByTaskId(Long taskId); + + /** + * 获取员工建群任务信息 + * + * @param emplId 员工id + * @param isDone 是否已处理 + * @return 结果 + */ + List getEmplTaskList(String emplId, boolean isDone); + + /** + * 员工发送信息后,变更其任务状态为 "完成" + * + * @param taskId 任务id + * @param emplId 员工id + * @return 结果 + */ + int updateEmplTaskStatus(Long taskId, String emplId); + + /** + * 根据标签建群任务信息发送消息 + * @param task 标签建群任务 + */ + void sendMessage(WePresTagGroupTask task); } 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 b284693178335208de3de95d08c6e4220c110207..eae9683625d444ae1dcdc0053e2c947bfa713990 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 @@ -94,4 +94,10 @@ public interface IWeTaskFissionService { WeTaskFissionStatisticVO taskFissionStatistic(Long taskFissionId, Date startTime, Date endTime); WeTaskFissionProgressVO getCustomerTaskProgress(WeTaskFission taskFission, String eid); + + /** + * 更新过期任务 + * @return + */ + public void updateExpiredWeTaskFission(); } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWxAuthService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWxAuthService.java new file mode 100644 index 0000000000000000000000000000000000000000..c5654ce2692f7298c904776d5effa3dfd3a3b594 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWxAuthService.java @@ -0,0 +1,15 @@ +package com.linkwechat.wecom.service; + +import com.linkwechat.wecom.domain.weixin.dto.WxAuthUserInfoDto; +import com.linkwechat.wecom.domain.weixin.dto.WxTokenDto; + +/** + * @author danmo + * @description + * @date 2021/4/5 22:45 + **/ +public interface IWxAuthService { + WxTokenDto getToken(String code,String openId); + + WxAuthUserInfoDto getUserInfo(String openId, String lang); +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/IWxAuthServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/IWxAuthServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..cf9e9144902c01e016b29615ccc8ad357b4ba78b --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/IWxAuthServiceImpl.java @@ -0,0 +1,57 @@ +package com.linkwechat.wecom.service.impl; + +import com.linkwechat.common.constant.WeConstans; +import com.linkwechat.common.core.redis.RedisCache; +import com.linkwechat.common.utils.StringUtils; +import com.linkwechat.wecom.domain.weixin.dto.WxAuthUserInfoDto; +import com.linkwechat.wecom.domain.weixin.dto.WxTokenDto; +import com.linkwechat.wecom.service.IWxAuthService; +import com.linkwechat.wecom.wxclient.WxAuthClient; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.util.concurrent.TimeUnit; + +/** + * @author danmo + * @description + * @date 2021/4/5 22:45 + **/ +@Slf4j +@Service +public class IWxAuthServiceImpl implements IWxAuthService { + @Autowired + private WxAuthClient wxAuthClient; + @Autowired + private RedisCache redisCache; + + @Value("${weixin.appid}") + private String appId; + @Value("${weixin.secret}") + private String secret; + private final String grantType = "authorization_code"; + + @Override + public WxTokenDto getToken(String code,String openId) { + WxTokenDto authToken; + if (StringUtils.isNotEmpty(openId)){ + authToken =redisCache.getCacheObject(WeConstans.WX_AUTH_ACCESS_TOKEN+":"+ openId); + }else { + authToken = wxAuthClient.getAuthToken(appId, secret, code, grantType); + if(authToken != null && StringUtils.isNotEmpty(authToken.getAccessToken())){ + redisCache.setCacheObject(WeConstans.WX_AUTH_ACCESS_TOKEN+":"+ authToken.getOpenId(), + authToken, authToken.getExpiresIn(), TimeUnit.SECONDS); + redisCache.setCacheObject(WeConstans.WX_AUTH_REFRESH_ACCESS_TOKEN+":"+ authToken.getOpenId(), + authToken.getRefreshToken(), 30, TimeUnit.DAYS); + } + } + return authToken; + } + + @Override + public WxAuthUserInfoDto getUserInfo(String openId, String lang) { + return wxAuthClient.getUserInfo(openId, lang); + } +} 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 index bb965325591643ff72ba38efa1bc67c4cdf409ce..3f51bf1bfab36b838d9ce5f0581cb7f3b19c5bf1 100644 --- 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 @@ -3,14 +3,15 @@ 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.common.utils.StringUtils; +import com.linkwechat.wecom.domain.WeGroupCode; import com.linkwechat.wecom.domain.WeKeywordGroupTaskKeyword; import com.linkwechat.wecom.domain.WeKeywordGroupTask; -import com.linkwechat.wecom.domain.WeGroupCode; +import com.linkwechat.wecom.domain.vo.WeGroupCodeVo; import com.linkwechat.wecom.domain.vo.WeKeywordGroupTaskVo; +import com.linkwechat.wecom.mapper.WeGroupCodeMapper; 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; @@ -35,7 +36,7 @@ public class WeCommunityKeywordToGroupServiceImpl extends ServiceImpl getTaskList(String taskName, String createBy, String keyword, String beginTime, String endTime) { List taskVoList = taskMapper.getTaskList(taskName, createBy, keyword, beginTime, endTime); - for (WeKeywordGroupTaskVo task : taskVoList) { + for (WeKeywordGroupTaskVo taskVo : taskVoList) { // 查询关键词列表 - QueryWrapper taskKeywordQueryWrapper = new QueryWrapper<>(); - taskKeywordQueryWrapper.eq("task_id", task.getTaskId()); - List taskKeywordList = taskKwMapper.selectList(taskKeywordQueryWrapper); - task.setKeywordList(taskKeywordList); + List taskKeywordList = this.getTaskKeywordList(taskVo.getTaskId()); + if (StringUtils.isNotEmpty(taskKeywordList)) { + taskVo.setKeywordList(taskKeywordList); + } + // 群活码信息 + taskVo.setGroupCodeInfo(this.getGroupVoByTaskId(taskVo.getGroupCodeId())); // 通过群活码id查询对应的群 - List groupNameList = taskMapper.getGroupNameListByTaskId(task.getTaskId()); + List groupNameList = taskMapper.getGroupNameListByTaskId(taskVo.getTaskId()); groupNameList.removeIf(Objects::isNull); - task.setGroupNameList(groupNameList); - // 获取群活码信息 - WeGroupCode weGroupCode = groupCodeService.selectWeGroupCodeById(task.getGroupCodeId()); - task.setGroupCodeInfo(weGroupCode); + taskVo.setGroupNameList(groupNameList); } return taskVoList; @@ -78,10 +78,16 @@ public class WeCommunityKeywordToGroupServiceImpl extends ServiceImpl taskKeywordQueryWrapper = new QueryWrapper<>(); - taskKeywordQueryWrapper.eq("task_id", taskId); - List keywordList = taskKwMapper.selectList(taskKeywordQueryWrapper); - taskVo.setKeywordList(keywordList); + List keywordList = this.getTaskKeywordList(taskId); + if (StringUtils.isNotEmpty(keywordList)) { + taskVo.setKeywordList(keywordList); + } + // 群活码 + taskVo.setGroupCodeInfo(this.getGroupVoByTaskId(taskVo.getGroupCodeId())); + // 群聊名称列表 + List groupNameList = taskMapper.getGroupNameListByTaskId(taskVo.getTaskId()); + groupNameList.removeIf(Objects::isNull); + taskVo.setGroupNameList(groupNameList); return taskVo; } @@ -95,7 +101,7 @@ public class WeCommunityKeywordToGroupServiceImpl extends ServiceImpl taskKeywordList = Arrays .stream(keywords) @@ -119,7 +125,7 @@ public class WeCommunityKeywordToGroupServiceImpl extends ServiceImpl taskKwQueryWrapper = new QueryWrapper<>(); taskKwQueryWrapper.eq("task_id", task.getTaskId()); @@ -165,4 +171,52 @@ public class WeCommunityKeywordToGroupServiceImpl extends ServiceImpl filterByNameOrKeyword(String word) { + List taskVoList = taskMapper.filterByNameOrKeyword(word); + taskVoList.forEach(taskVo -> { + // 关键词列表 + taskVo.setKeywordList(this.getTaskKeywordList(taskVo.getTaskId())); + List groupNameList = taskMapper.getGroupNameListByTaskId(taskVo.getTaskId()); + // 群活码 + taskVo.setGroupCodeInfo(this.getGroupVoByTaskId(taskVo.getGroupCodeId())); + // 群名称列表 + groupNameList.removeIf(StringUtils::isNull); + taskVo.setGroupNameList(groupNameList); + }); + return taskVoList; + } + + /** + * 根据任务id获取关键词列表 + * + * @param taskId 任务id + */ + private List getTaskKeywordList(Long taskId) { + QueryWrapper taskKeywordQueryWrapper = new QueryWrapper<>(); + taskKeywordQueryWrapper.eq("task_id", taskId); + return taskKwMapper.selectList(taskKeywordQueryWrapper); + } + + /** + * 获取群活码简略信息 + * + * @param groupCodeId 群活码id + * @return 群活码简略信息 + */ + private WeGroupCodeVo getGroupVoByTaskId(Long groupCodeId) { + WeGroupCode groupCode = groupCodeMapper.selectWeGroupCodeById(groupCodeId); + WeGroupCodeVo groupCodeVo = new WeGroupCodeVo(); + groupCodeVo.setId(groupCode.getId()); + groupCodeVo.setCodeUrl(groupCode.getCodeUrl()); + groupCodeVo.setUuid(groupCode.getUuid()); + return groupCodeVo; + } } 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 d9330eb0dfe5db5c89d047cfe886f8e50c0f5ac5..9d5e75757dbbee10c9430c177c9fa93d18b0dfc5 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,29 +1,26 @@ package com.linkwechat.wecom.service.impl; -import cn.hutool.core.collection.CollectionUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.google.common.collect.Lists; +import com.linkwechat.common.enums.WeEmpleCodeType; import com.linkwechat.common.exception.wecom.WeComException; import com.linkwechat.common.utils.SecurityUtils; -import com.linkwechat.wecom.client.WeExternalContactClient; +import com.linkwechat.common.utils.StringUtils; import com.linkwechat.wecom.domain.*; import com.linkwechat.wecom.domain.dto.WeCommunityNewGroupDto; import com.linkwechat.wecom.domain.dto.WeExternalContactDto; import com.linkwechat.wecom.domain.vo.WeCommunityNewGroupVo; -import com.linkwechat.wecom.mapper.WeCommunityNewGroupMapper; -import com.linkwechat.wecom.mapper.WeGroupCodeMapper; +import com.linkwechat.wecom.domain.vo.WeGroupCodeVo; +import com.linkwechat.wecom.mapper.*; import com.linkwechat.wecom.service.IWeCommunityNewGroupService; -import com.linkwechat.wecom.service.IWeEmpleCodeTagService; -import com.linkwechat.wecom.service.IWeEmpleCodeUseScopService; -import com.linkwechat.wecom.service.IWeGroupCodeActualService; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; 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; +import java.util.Optional; import java.util.stream.Collectors; /** @@ -37,27 +34,36 @@ import java.util.stream.Collectors; public class WeCommunityNewGroupServiceImpl extends ServiceImpl implements IWeCommunityNewGroupService { @Autowired - private WeGroupCodeMapper weGroupCodeMapper; + private WeEmpleCodeServiceImpl weEmpleCodeService; @Autowired - private WeEmpleCodeServiceImpl weEmpleCodeService; + private WeGroupCodeMapper weGroupCodeMapper; @Autowired private WeCommunityNewGroupMapper weCommunityNewGroupMapper; @Autowired - private IWeEmpleCodeTagService weEmpleCodeTagService; + private WeEmpleCodeTagMapper empleCodeTagMapper; + @Autowired + private WeEmpleCodeUseScopMapper empleCodeUseScopMapper; @Autowired - private IWeEmpleCodeUseScopService iWeEmpleCodeUseScopService; + private WeTagMapper weTagMapper; @Autowired - private WeExternalContactClient weExternalContactClient; + private WeEmpleCodeMapper weEmpleCodeMapper; @Autowired - private IWeGroupCodeActualService weGroupCodeActualService; + private WeUserMapper weUserMapper; + + /** + * 添加新客自动拉群信息 + * + * @param communityNewGroupDto 信息 + * @return 结果 + */ @Override @Transactional(rollbackFor = Exception.class) public int add(WeCommunityNewGroupDto communityNewGroupDto) { @@ -67,175 +73,223 @@ public class WeCommunityNewGroupServiceImpl extends ServiceImpl item.setEmpleCodeId(communityNewGroup.getNewGroupId())); - iWeEmpleCodeUseScopService.saveBatch(weEmpleCode.getWeEmpleCodeUseScops()); - } - if (CollectionUtil.isNotEmpty(weEmpleCode.getWeEmpleCodeTags())) { - weEmpleCode.getWeEmpleCodeTags().forEach(item -> item.setEmpleCodeId(communityNewGroup.getNewGroupId())); - weEmpleCodeTagService.saveBatch(weEmpleCode.getWeEmpleCodeTags()); - } + WeExternalContactDto weExternalContactDto = weEmpleCodeService.getQrCode(weContactWay); + weEmpleCode.setConfigId(weExternalContactDto.getConfig_id()); + weEmpleCode.setQrCode(weExternalContactDto.getQr_code()); + + // 保存员工活码信息 + if (weEmpleCodeMapper.insertWeEmpleCode(weEmpleCode) > 0) { + // 批量保存员工活码标签 + empleCodeTagMapper.batchInsetWeEmpleCodeTag(weEmpleCode.getWeEmpleCodeTags()); + // 批量保存活码使用员工 + empleCodeUseScopMapper.batchInsetWeEmpleCodeUseScop(weEmpleCode.getWeEmpleCodeUseScops()); + + // 保存新客自动拉群信息 + WeCommunityNewGroup communityNewGroup = new WeCommunityNewGroup(); + communityNewGroup.setGroupCodeId(weGroupCode.getId()); + communityNewGroup.setEmplCodeName(communityNewGroupDto.getCodeName()); + communityNewGroup.setCreateBy(SecurityUtils.getUsername()); + communityNewGroup.setEmplCodeId(weEmpleCode.getId()); + + return weCommunityNewGroupMapper.insert(communityNewGroup); } - return 1; + return 0; } - private WeEmpleCode getWeEmpleCode(WeCommunityNewGroupDto communityNewGroupDto) { - WeEmpleCode weEmpleCode = new WeEmpleCode(); - weEmpleCode.setCodeType(2); - weEmpleCode.setActivityScene(communityNewGroupDto.getActivityScene()); - weEmpleCode.setIsJoinConfirmFriends(communityNewGroupDto.getIsJoinConfirmFriends()); - weEmpleCode.setWelcomeMsg(communityNewGroupDto.getWelcomeMsg()); - weEmpleCode.setWeEmpleCodeUseScops(communityNewGroupDto.getWeEmpleCodeUseScops()); - weEmpleCode.setWeEmpleCodeTags(communityNewGroupDto.getWeEmpleCodeTags()); - weEmpleCode.setQrCode(communityNewGroupDto.getQrCode()); - weEmpleCode.setMediaId(communityNewGroupDto.getMediaId()); - weEmpleCode.setConfigId(communityNewGroupDto.getConfigId()); - return weEmpleCode; - } + /** + * 查询新客自动拉群列表 + * + * @param emplCodeName 员工活码名称 + * @param createBy 创建者 + * @param beginTime 开始时间 + * @param endTime 结束时间 + * @return {@link WeCommunityNewGroupVo}s + */ @Override - public List 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); - //活码使用人对象 - List weEmpleCodeUseScopList = useScopList.stream() - .filter(useScop -> useScop.getEmpleCodeId().equals(newGroup.getNewGroupId())).collect(Collectors.toList()); - newGroup.setWeEmpleCodeUseScops(weEmpleCodeUseScopList); - //员工活码标签对象 - newGroup.setWeEmpleCodeTags(tagList.stream() - .filter(tag -> tag.getEmpleCodeId().equals(newGroup.getNewGroupId())).collect(Collectors.toList())); - }); + public List selectWeCommunityNewGroupList(String emplCodeName, String createBy, String beginTime, String endTime) { + List communityNewGroupVos = weCommunityNewGroupMapper.selectWeCommunityNewGroupList(emplCodeName, createBy, beginTime, endTime); + if (StringUtils.isNotEmpty(communityNewGroupVos)) { + communityNewGroupVos.forEach(this::getCompleteEmplCodeInfo); } - return weCommunityNewGroupVos; + return communityNewGroupVos; } + /** + * 获取新客自动拉群详细信息 + * + * @param id 主键id + * @return {@link WeCommunityNewGroupVo} 自动拉群信息 + */ @Override - public WeCommunityNewGroupVo selectWeCommunityNewGroupById(Long newGroupId) { - WeCommunityNewGroupVo weCommunityNewGroupVo = weCommunityNewGroupMapper.selectWeCommunityNewGroupById(newGroupId); - if (null != weCommunityNewGroupVo) { - List weGroupCodeActuals = getWeGroupCodeActuals(weCommunityNewGroupVo); - weCommunityNewGroupVo.setWeGroupUserScops(weGroupCodeActuals); - List useScopList = iWeEmpleCodeUseScopService.selectWeEmpleCodeUseScopListByIds(Lists.newArrayList(weCommunityNewGroupVo.getNewGroupId())); - List tagList = weEmpleCodeTagService.selectWeEmpleCodeTagListByIds(Lists.newArrayList(weCommunityNewGroupVo.getNewGroupId())); - //活码使用人对象 - List weEmpleCodeUseScopList = useScopList.stream() - .filter(useScop -> useScop.getEmpleCodeId().equals(weCommunityNewGroupVo.getNewGroupId())).collect(Collectors.toList()); - weCommunityNewGroupVo.setWeEmpleCodeUseScops(weEmpleCodeUseScopList); - //员工活码标签对象 - weCommunityNewGroupVo.setWeEmpleCodeTags(tagList.stream() - .filter(tag -> tag.getEmpleCodeId().equals(weCommunityNewGroupVo.getNewGroupId())).collect(Collectors.toList())); - } - return weCommunityNewGroupVo; + public Optional selectWeCommunityNewGroupById(Long id) { + Optional vo = weCommunityNewGroupMapper.selectWeCommunityNewGroupById(id); + vo.ifPresent(this::getCompleteEmplCodeInfo); + return vo; } - private List getWeGroupCodeActuals(WeCommunityNewGroupVo weCommunityNewGroupVo) { - WeGroupCodeActual weGroupCodeActual = new WeGroupCodeActual(); - weGroupCodeActual.setGroupCodeId(weCommunityNewGroupVo.getNewGroupId()); - return weGroupCodeActualService.selectWeGroupCodeActualList(weGroupCodeActual); - } - - @Override + /** + * 修改新客自动拉群。主要是对员工活码进行更新。需要先调用企微接口更新对应config_id的"联系我"配置 + * + * @param id 新客拉群id + * @param communityNewGroupDto 信息 + * @return 结果 + */ @Transactional(rollbackFor = Exception.class) - public int updateWeCommunityNewGroup(WeCommunityNewGroupDto communityNewGroupDto) { - - //检查群活码是否存在 + @Override + public int updateWeCommunityNewGroup(Long id, WeCommunityNewGroupDto communityNewGroupDto) { + // 检查新客拉群信息是否存在 + WeCommunityNewGroup communityNewGroup = weCommunityNewGroupMapper.selectById(id); + if (StringUtils.isNull(communityNewGroup)) { + throw new WeComException("新客拉群信息不存在!"); + } + // 检查群活码是否存在 WeGroupCode weGroupCode = weGroupCodeMapper.selectWeGroupCodeById(communityNewGroupDto.getGroupCodeId()); if (null == weGroupCode) { throw new WeComException("群活码不存在!"); } - //查询新客自动拉群信息 -// WeCommunityNewGroup communityNewGroup = weCommunityNewGroupMapper.selectOne(new LambdaQueryWrapper() -// .eq(WeCommunityNewGroup::getGroupCodeId, communityNewGroupDto.getGroupCodeId())); - WeCommunityNewGroup communityNewGroup = weCommunityNewGroupMapper.selectById(communityNewGroupDto.getNewGroupId()); - if (null == communityNewGroup) { - throw new WeComException("信息不存在!"); - } - - //更新员工活码信息 - WeEmpleCode weEmpleCode = getWeEmpleCode(communityNewGroupDto); - - WeExternalContactDto.WeContactWay weContactWay = weEmpleCodeService.getWeContactWay(weEmpleCode); + communityNewGroup.setGroupCodeId(communityNewGroupDto.getGroupCodeId()); try { - WeExternalContactDto weExternalContactDto = weExternalContactClient.updateContactWay(weContactWay); - System.out.println(weExternalContactDto.getQr_code()); - + // 更新员工活码以及其对应的 "联系我" 配置 + WeEmpleCode weEmplCode = weEmpleCodeMapper.selectWeEmpleCodeById(communityNewGroup.getEmplCodeId()); + // 更改员工活码的扫码标签、使用员工 + getScopsAndTags(weEmplCode, communityNewGroupDto); + // 更新使用场景、欢迎语、是否验证 + weEmplCode.setScenario(communityNewGroupDto.getCodeName()); + weEmplCode.setWelcomeMsg(communityNewGroupDto.getWelcomeMsg()); + weEmplCode.setSkipVerify(communityNewGroupDto.getSkipVerify()); + weEmpleCodeService.updateWeEmpleCode(weEmplCode); } catch (Exception e) { - e.printStackTrace(); - } - communityNewGroup.setEmpleCodeName(communityNewGroupDto.getActivityScene()); - communityNewGroup.setDelFlag(0); - communityNewGroup.setCreateTime(new Date()); - communityNewGroup.setCreateBy(SecurityUtils.getUsername()); - communityNewGroup.setActivityScene(communityNewGroupDto.getActivityScene()); - communityNewGroup.setWelcomeMsg(communityNewGroupDto.getWelcomeMsg()); - communityNewGroup.setIsJoinConfirmFriends(communityNewGroupDto.getIsJoinConfirmFriends()); - communityNewGroup.setMediaId(communityNewGroupDto.getMediaId()); - communityNewGroup.setGroupCodeId(communityNewGroupDto.getGroupCodeId()); - communityNewGroup.setQrCode(communityNewGroupDto.getQrCode()); - //更新新客自动拉群信息 - if (this.updateById(communityNewGroup)) { - if (CollectionUtil.isNotEmpty(weEmpleCode.getWeEmpleCodeUseScops())) { - weEmpleCode.getWeEmpleCodeUseScops().forEach(item -> item.setEmpleCodeId(communityNewGroup.getNewGroupId())); - iWeEmpleCodeUseScopService.saveOrUpdateBatch(weEmpleCode.getWeEmpleCodeUseScops()); - } - if (CollectionUtil.isNotEmpty(weEmpleCode.getWeEmpleCodeTags())) { - weEmpleCode.getWeEmpleCodeTags().forEach(item -> item.setEmpleCodeId(communityNewGroup.getNewGroupId())); - weEmpleCodeTagService.saveOrUpdateBatch(weEmpleCode.getWeEmpleCodeTags()); - } + throw new WeComException("员工活码更新失败"); } - - return 1; + communityNewGroup.setEmplCodeName(communityNewGroupDto.getCodeName()); + communityNewGroup.setUpdateBy(SecurityUtils.getUsername()); + return weCommunityNewGroupMapper.updateById(communityNewGroup); } + /** + * 批量删除新客自动拉群。不需要删除该拉群的员工活码信息 + * + * @param idList 新客拉群id列表 + * @return 标签对象列表 + */ @Override - public int batchRemoveWeCommunityNewGroupIds(List idList) { - return weCommunityNewGroupMapper.batchRemoveWeCommunityNewGroupIds(idList); + @Transactional + public int batchRemoveWeCommunityNewGroupByIds(List idList) { + // 删除新客拉群信息 + return weCommunityNewGroupMapper.batchRemoveWeCommunityNewGroupByIds(idList); } + /** + * 通过id查询新客自动拉群信息列表 + * + * @param ids id列表 + * @return {@link WeCommunityNewGroup} 新客自动拉群信息 + */ @Override - public WeCommunityNewGroupVo selectWeCommunityNewGroupById(long id) { - return weCommunityNewGroupMapper.selectWeCommunityNewGroupById(id); + public List selectWeCommunityNewGroupByIds(List ids) { + return weCommunityNewGroupMapper.selectWeCommunityNewGroupByIds(ids); } - @Override - public List selectWeCommunityNewGroupByIds(List ids) { - return weCommunityNewGroupMapper.selectWeCommunityNewGroupByIds(ids); + /** + * 创建员工活码 + * + * @param communityNewGroupDto 数据 + * @return 员工活码 + */ + private WeEmpleCode getWeEmpleCode(WeCommunityNewGroupDto communityNewGroupDto) { + + WeEmpleCode weEmpleCode = new WeEmpleCode(); + + // 获取员工和扫码标签 + getScopsAndTags(weEmpleCode, communityNewGroupDto); + + // 固定为多人类型 + weEmpleCode.setCodeType(WeEmpleCodeType.MULTI.getType()); + + weEmpleCode.setSkipVerify(communityNewGroupDto.getSkipVerify()); + // 欢迎语 + weEmpleCode.setWelcomeMsg(communityNewGroupDto.getWelcomeMsg()); + // state,用于区分客户具体是通过哪个「联系我」添加,最大30个字符。使用id作为值即可,使用uuid则会超长。 + weEmpleCode.setState(weEmpleCode.getId().toString()); + + // 活动场景,使用键入的活码名称 + weEmpleCode.setScenario(communityNewGroupDto.getCodeName()); + + // 通用属性设置 + weEmpleCode.setCreateBy(SecurityUtils.getUsername()); + + return weEmpleCode; + } + + private void getScopsAndTags(WeEmpleCode weEmpleCode, WeCommunityNewGroupDto communityNewGroupDto) { + // 获取活码员工列表 TODO user_id是对应business_id? + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.in("user_id", communityNewGroupDto.getEmplList()); + List weUserList = weUserMapper.selectList(userQueryWrapper); + List weEmpleCodeUseScopList = weUserList.stream().map(e -> { + WeEmpleCodeUseScop scop = new WeEmpleCodeUseScop(); + scop.setEmpleCodeId(weEmpleCode.getId()); + scop.setBusinessId(e.getUserId()); + scop.setBusinessIdType(2); + scop.setBusinessName(e.getName()); + return scop; + }).collect(Collectors.toList()); + weEmpleCode.setWeEmpleCodeUseScops(weEmpleCodeUseScopList); + + // 获取活码标签 + List tagIdList = communityNewGroupDto.getTagList(); + QueryWrapper tagQueryWrapper = new QueryWrapper<>(); + tagQueryWrapper.in("tag_id", tagIdList); + List weTagList = weTagMapper.selectList(tagQueryWrapper); + List weEmpleCodeTagList = weTagList.stream().map(e -> { + WeEmpleCodeTag tag = new WeEmpleCodeTag(); + tag.setEmpleCodeId(weEmpleCode.getId()); + tag.setTagId(e.getTagId()); + tag.setTagName(e.getName()); + return tag; + }).collect(Collectors.toList()); + weEmpleCode.setWeEmpleCodeTags(weEmpleCodeTagList); + } + + /** + * 获取完整的新客自动拉群相关信息 + * + * @param vo 新客自动拉群 + */ + private void getCompleteEmplCodeInfo(WeCommunityNewGroupVo vo) { + // 获取群活码信息 + WeGroupCode weGroupCode = weGroupCodeMapper.selectWeGroupCodeById(vo.getGroupCodeId()); + WeGroupCodeVo weGroupCodeVo = new WeGroupCodeVo(); + BeanUtils.copyProperties(weGroupCode, weGroupCodeVo); + vo.setGroupCodeInfo(weGroupCodeVo); + + // 获取员工列表信息 + List empleCodeUseScopList = empleCodeUseScopMapper.selectWeEmpleCodeUseScopListById(vo.getEmplCodeId()); + vo.setEmplList(empleCodeUseScopList); + + // 获取员工活码信息 + WeEmpleCode empleCode = weEmpleCodeMapper.selectWeEmpleCodeById(vo.getEmplCodeId()); + vo.setEmplCodeUrl(empleCode.getQrCode()); + vo.setWelcomeMsg(empleCode.getWelcomeMsg()); + + // 获取相关群聊信息 + List groupList = weGroupCodeMapper.selectWeGroupListByGroupCodeId(vo.getGroupCodeId()); + vo.setGroupList(groupList); + + // 获取标签信息 + List tagList = empleCodeTagMapper.selectWeEmpleCodeTagListById(vo.getEmplCodeId()); + vo.setTagList(tagList); + + vo.setSkipVerify(empleCode.getSkipVerify()); } } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerMessagePushServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerMessagePushServiceImpl.java index 8d5c31c38e35e31d30e051f07671e0ef55f689ce..49d2de8b5aea6a556ce1d21c8198e7d68f613a9e 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerMessagePushServiceImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerMessagePushServiceImpl.java @@ -1,6 +1,7 @@ package com.linkwechat.wecom.service.impl; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Lists; @@ -70,14 +71,20 @@ public class WeCustomerMessagePushServiceImpl implements IWeCustomerMessagePushS private WeCustomerMessageTimeTaskMapper customerMessageTimeTaskMapper; @Override - @Transactional + @Transactional(rollbackFor = Exception.class) public void addWeCustomerMessagePush(CustomerMessagePushDto customerMessagePushDto) throws JsonProcessingException, ParseException { if ((null != customerMessagePushDto.getSettingTime() && !"".equals(customerMessagePushDto.getSettingTime())) - && DateUtils.diffTime(new Date(), DateUtil.parse(customerMessagePushDto.getSettingTime(), "yyyy-MM-dd HH:mm:ss")) > 0) { + && DateUtils.diffTime(new Date(), DateUtil.parse(customerMessagePushDto.getSettingTime(), "yyyy-MM-dd HH:mm")) > 0) { throw new WeComException("发送时间不能小于当前时间"); } + + /*if(StrUtil.isBlank(customerMessagePushDto.getSettingTime())){ + throw new WeComException("发送时间不能为空"); + }*/ + + List customers = Lists.newArrayList(); List groups = new ArrayList<>(); // 0 发给客户 diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerMessageServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerMessageServiceImpl.java index d0f047a4ec6e3a131b643fa1ce63e51e2502b505..81aa74771cd82598777c0e58fcb37fd314cffe70 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerMessageServiceImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerMessageServiceImpl.java @@ -148,7 +148,8 @@ public class WeCustomerMessageServiceImpl extends ServiceImpl tagRels = new ArrayList<>(); List cutomerTagEdits = new ArrayList<>(); + flowerCustomerRels.stream().forEach(customer -> { CutomerTagEdit cutomerTagEdit = CutomerTagEdit.builder() .userid(customer.getUserId()) .external_userid(customer.getExternalUserid()) .build(); + List tags = new ArrayList<>(); addTags.stream().forEach(tag -> { tags.add(tag.getTagId()); @@ -473,6 +482,8 @@ public class WeCustomerServiceImpl extends ServiceImpl weEmpleCodeUseScopList = new ArrayList<>(); weEmpleCodeUseScopList.add(useScops); weEmpleCode.setWeEmpleCodeUseScops(weEmpleCodeUseScopList); @@ -347,8 +370,8 @@ public class WeEmpleCodeServiceImpl extends ServiceImpl @@ -368,4 +391,14 @@ public class WeEmpleCodeServiceImpl extends ServiceImpl 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); - - } + groupSopVoList.forEach(this::setChatAndMaterialAndPicList); return groupSopVoList; } @@ -175,25 +194,34 @@ public class WeGroupSopServiceImpl extends ServiceImpl groupQueryWrapper = new QueryWrapper<>(); - List chatIdList = groupSopMapper.getChatIdListByRuleId(ruleId); - if (StringUtils.isNotEmpty(chatIdList)) { - groupQueryWrapper.in("chat_id", chatIdList); - List groupList = groupMapper.selectList(groupQueryWrapper); + List groupList = this.getGroupListByRuleId(ruleId); + if (StringUtils.isNotEmpty(groupList)) { groupSopVo.setGroupList(groupList); } + // 设置执行人信息 + List scopeList = sopChatMapper.getScopeListByRuleId(ruleId); + if (StringUtils.isNotEmpty(scopeList)) { + groupSopVo.setScopeList(scopeList); + } // 获取对应素材信息 - QueryWrapper materialQueryWrapper = new QueryWrapper<>(); List materialIdList = groupSopMapper.getMaterialIdListByRuleId(ruleId); if (StringUtils.isNotEmpty(materialIdList)) { - materialQueryWrapper.in("id", materialIdList); - List materialList = materialMapper.selectList(materialQueryWrapper); + List materialList = materialMapper.findMaterialVoListByIds(materialIdList.toArray(new Long[0])); groupSopVo.setMaterialList(materialList); } + + // 设置图片列表 + QueryWrapper picQueryWrapper = new QueryWrapper<>(); + picQueryWrapper.eq("rule_id", ruleId); + List sopPicList = sopPicMapper.selectList(picQueryWrapper); + if (StringUtils.isNotEmpty(sopPicList)) { + List picUrlList = sopPicList.stream().map(WeGroupSopPic::getPicUrl).collect(Collectors.toList()); + groupSopVo.setPicList(picUrlList); + } } /** @@ -207,7 +235,7 @@ public class WeGroupSopServiceImpl extends ServiceImpl sopChatList = chatIdList .stream() - .map(id -> new WeGroupSopChat(ruleId, id)) + .map(id -> new WeGroupSopChat(ruleId, id, false)) .collect(Collectors.toList()); sopChatMapper.batchBindsSopChat(sopChatList); } @@ -235,16 +263,96 @@ public class WeGroupSopServiceImpl extends ServiceImpl getEmplTaskList(String emplId, boolean isDone) { + List sopVoList = groupSopMapper.getEmplTaskList(emplId, isDone); + sopVoList.forEach(this::setChatAndMaterialAndPicList); + return sopVoList; + } + + /** + * 变更某员工sop规则发送任务的状态 * - * @param sopVo 代操作对象 + * @param ruleId 规则名称 + * @param emplId 群聊的群主id + * @return 结果 */ - private void setPicList(WeGroupSopVo sopVo) { - Long ruleId = sopVo.getRuleId(); - QueryWrapper picQueryWrapper = new QueryWrapper<>(); - picQueryWrapper.eq("rule_id", ruleId); - List sopPicList = sopPicMapper.selectList(picQueryWrapper); - List picUrlList = sopPicList.stream().map(WeGroupSopPic::getPicUrl).collect(Collectors.toList()); - sopVo.setPicList(picUrlList); + @Override + public int updateChatSopStatus(Long ruleId, String emplId) { + return sopChatMapper.updateChatSopStatus(ruleId, emplId); + } + + /** + * 根据SOP 规则id获取所有使用人员信息 + * + * @param ruleId sop id + * @return 结果 + */ + @Override + public List getScopeListByRuleId(Long ruleId) { + return sopChatMapper.getScopeListByRuleId(ruleId); + } + + /** + * 根据规则id获取对应的群聊信息 + * + * @param ruleId 规则id + * @return 群聊信息列表 + */ + private List getGroupListByRuleId(Long ruleId) { + QueryWrapper groupQueryWrapper = new QueryWrapper<>(); + List chatIdList = groupSopMapper.getChatIdListByRuleId(ruleId); + List groupList = new ArrayList<>(); + if (StringUtils.isNotEmpty(chatIdList)) { + groupQueryWrapper.in("chat_id", chatIdList); + groupList = groupMapper.selectList(groupQueryWrapper); + } + return groupList; + } + + /** + * 消息推送(企微API 消息推送 - 发送应用消息) + */ + @Override + @Async + public void sendMessage(List groupIdList) { + + // 构造请求参数 + WeMessagePushDto pushDto = new WeMessagePushDto(); + // 查询群聊列表,获取群主列表 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("chat_id", groupIdList); + List groupList = groupMapper.selectList(queryWrapper); + String toUser = groupList.stream().map(WeGroup::getOwner).collect(Collectors.joining("|")); + pushDto.setTouser(toUser); + + // 获取agentId + WeCorpAccount validWeCorpAccount = corpAccountService.findValidWeCorpAccount(); + String agentId = validWeCorpAccount.getAgentId(); + String corpId = validWeCorpAccount.getCorpId(); + if (StringUtils.isEmpty(agentId)) { + throw new WeComException("当前agentId不可用或不存在"); + } + pushDto.setAgentid(Integer.valueOf(agentId)); + + // 设置消息内容 + pushDto.setMsgtype("text"); + + TextMessageDto text = new TextMessageDto(); + String REDIRECT_URI = URLEncoder.encode(String.format("%s?corpId=%s&agentId=%s&type=%s", authorizeRedirectUrl, corpId, agentId, CommunityTaskType.SOP.getType())); + String context = String.format( + "你有新的SOP待发送,请点击此链接查看", + authorizeUrl, corpId, REDIRECT_URI); + text.setContent(context); + pushDto.setText(text); + + // 请求消息推送接口,获取结果 [消息推送 - 发送应用消息] + messagePushClient.sendMessageToUser(pushDto, agentId); + } } 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 index e442838591a0d78e9c788f9eb74c71eca1e3546e..1aa85ba422e9bfe35d0a50d52ebb65ac7f90786f 100644 --- 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 @@ -2,24 +2,37 @@ package com.linkwechat.wecom.service.impl; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.linkwechat.common.enums.ChatType; +import com.linkwechat.common.enums.MediaType; +import com.linkwechat.common.enums.TaskSendType; +import com.linkwechat.common.enums.CommunityTaskType; +import com.linkwechat.common.exception.wecom.WeComException; import com.linkwechat.common.utils.SecurityUtils; +import com.linkwechat.common.utils.StringUtils; import com.linkwechat.common.utils.bean.BeanUtils; +import com.linkwechat.wecom.client.WeCustomerMessagePushClient; +import com.linkwechat.wecom.client.WeMessagePushClient; import com.linkwechat.wecom.domain.*; +import com.linkwechat.wecom.domain.dto.WeMediaDto; +import com.linkwechat.wecom.domain.dto.WeMessagePushDto; import com.linkwechat.wecom.domain.dto.WePresTagGroupTaskDto; +import com.linkwechat.wecom.domain.dto.message.*; +import com.linkwechat.wecom.domain.vo.WeCommunityTaskEmplVo; 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 com.linkwechat.wecom.mapper.*; +import com.linkwechat.wecom.service.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.net.URLEncoder; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -40,67 +53,79 @@ public class WePresTagGroupTaskServiceImpl extends ServiceImpl tagIdList, List emplIdList) { + if (taskMapper.insertTask(task) > 0) { // 保存标签对象 - List tagIdList = taskDto.getTagList(); if (CollectionUtil.isNotEmpty(tagIdList)) { - List taskTagList = tagIdList.stream().map(id -> new WePresTagGroupTaskTag(task.getTaskId(), id)).collect(Collectors.toList()); + 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()); + List wePresTagGroupTaskScopeList = emplIdList + .stream() + .map(id -> new WePresTagGroupTaskScope(task.getTaskId(), id, false)) + .collect(Collectors.toList()); taskScopeMapper.batchBindsTaskScopes(wePresTagGroupTaskScopeList); } - return 1; } return 0; } /** - * 根据条件查询任务列表 - * @param taskName 任务名称 - * @param sendType 发送方式 - * @param createBy 创建人 + * 根据条件查询任务列表 + * + * @param taskName 任务名称 + * @param sendType 发送方式 + * @param createBy 创建人 * @param beginTime 起始时间 - * @param endTime 结束时间 + * @param endTime 结束时间 * @return 结果 */ @Override - public List selectTaskListList(String taskName, Integer sendType, String createBy, String beginTime, String endTime) { + public List selectTaskList(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); - } + if (CollectionUtil.isNotEmpty(taskVoList)) { + taskVoList.forEach(this::setGroupCodeAndScopeAndTag); } return taskVoList; } @@ -113,7 +138,11 @@ public class WePresTagGroupTaskServiceImpl extends ServiceImpl ids = Arrays.asList(idList); @@ -149,9 +178,9 @@ public class WePresTagGroupTaskServiceImpl extends ServiceImpl 0) { // 更新标签 // 先删除旧标签 QueryWrapper taskTagQueryWrapper = new QueryWrapper<>(); @@ -181,7 +210,7 @@ public class WePresTagGroupTaskServiceImpl extends ServiceImpl userIdList = wePresTagGroupTaskDto.getScopeList(); if (CollectionUtil.isNotEmpty(userIdList)) { - List wePresTagGroupTaskScopeList = userIdList.stream().map(id -> new WePresTagGroupTaskScope(taskId, id)).collect(Collectors.toList()); + List wePresTagGroupTaskScopeList = userIdList.stream().map(id -> new WePresTagGroupTaskScope(taskId, id, false)).collect(Collectors.toList()); taskScopeMapper.batchBindsTaskScopes(wePresTagGroupTaskScopeList); } return 1; @@ -204,30 +233,53 @@ public class WePresTagGroupTaskServiceImpl extends ServiceImpl getStatByTaskId(Long taskId, String customerName, Integer isSent, Integer isInGroup) { - return taskStatMapper.getStatByTaskId(taskId, customerName, isSent, isInGroup); + public List getStatByTaskId(Long taskId) { + WePresTagGroupTask task = taskMapper.selectById(taskId); + // 该任务对应的所有外部联系人id + List externalIdList = taskStatMapper.getAllExternalIdByTaskId(taskId); + List statVoList = new ArrayList<>(); + if (task.getSendType().equals(TaskSendType.CROP.getType())) { + // 企业群发。通过企微接口统计 + QueryCustomerMessageStatusResultDataObjectDto requestData = new QueryCustomerMessageStatusResultDataObjectDto(); + requestData.setMsgid(task.getMsgid()); + QueryCustomerMessageStatusResultDto resultDto = customerMessagePushClient.queryCustomerMessageStatus(requestData); + + if (StringUtils.isNotEmpty(resultDto.getDetail_list())) { + for (DetailMessageStatusResultDto detail : resultDto.getDetail_list()) { + WePresTagGroupTaskStatVo statVo = new WePresTagGroupTaskStatVo(); + WeCustomer customer = customerMapper.selectWeCustomerById(detail.getExternal_userid()); + statVo.setCustomerName(customer.getName()); + statVo.setStatus(detail.getStatus()); + statVo.setInGroup(externalIdList.contains(detail.getExternal_userid())); + statVoList.add(statVo); + } + } + + } else { + // 个人群发。通过数据库进行统计 + statVoList = taskStatMapper.selectStatInfoByTaskId(taskId); + } + return statVoList; + } /** - * 通过任务id获取对应使用员工 + * 根据任务id获取对应员工信息列表 * * @param taskId 任务id * @return 结果 */ @Override - public List getEmplListByTaskId(Long taskId) { + public List getScopeListByTaskId(Long taskId) { return taskScopeMapper.getScopeListByTaskId(taskId); } /** - * 通过任务id获取标签列表 + * 根据任务id获取对应标签信息列表 * * @param taskId 任务id * @return 结果 @@ -236,4 +288,149 @@ public class WePresTagGroupTaskServiceImpl extends ServiceImpl getTagListByTaskId(Long taskId) { return taskTagMapper.getTagListByTaskId(taskId); } + + /** + * 获取员工建群任务信息 + * + * @param emplId 员工id + * @param isDone 是否已处理 + * @return 结果 + */ + @Override + public List getEmplTaskList(String emplId, boolean isDone) { + List taskVoList = taskMapper.getTaskListByEmplId(emplId, isDone); + if (StringUtils.isNotEmpty(taskVoList)) { + taskVoList.forEach(this::setGroupCodeAndScopeAndTag); + } + return taskVoList; + } + + /** + * 员工发送信息后,变更其任务状态为 "完成" + * + * @param taskId 任务id + * @param emplId 员工id + * @return 结果 + */ + @Override + public int updateEmplTaskStatus(Long taskId, String emplId) { + return taskScopeMapper.updateEmplTaskStatus(taskId, emplId); + } + + /** + * 任务群活码、员工和标签 + * + * @param taskVo 任务vo + */ + private void setGroupCodeAndScopeAndTag(WePresTagGroupTaskVo taskVo) { + // 任务群活码信息 + taskVo.fillGroupCodeVo(); + // 员工信息 + taskVo.setScopeList(this.getScopeListByTaskId(taskVo.getTaskId())); + // 客户标签 + taskVo.setTagList(this.getTagListByTaskId(taskVo.getTaskId())); + } + + /** + * 任务派发 + * + * @param task 建群任务 + */ + @Override + @Async + public void sendMessage(WePresTagGroupTask task) { + try { + + Integer sendType = task.getSendType(); + + if (sendType.equals(TaskSendType.CROP.getType())) { + // 企业群发 + this.sendCorpMessage(task); + + } else { + // 个人群发 + this.sendEmployeeMessage(task); + } + + } catch (Exception e) { + throw new WeComException(e.getMessage()); + } + } + + /** + * 企业群发 + * + * @param task 建群任务信息 + */ + private void sendCorpMessage(WePresTagGroupTask task) { + try { + + // 构建企微api参数 [客户联系 - 消息推送 - 创建企业群发] + + // 群发任务的类型、外部联系人id列表 + List externalIdList = taskTagMapper.getExternalUserIdListByTaskId(task.getTaskId()); + WeCustomerMessagePushDto queryData = new WeCustomerMessagePushDto(); + queryData.setChat_type(ChatType.SINGLE.getName()); + queryData.setExternal_userid(externalIdList); + + // 引导语 + TextMessageDto text = new TextMessageDto(); + text.setContent(task.getWelcomeMsg()); + queryData.setText(text); + + // 群活码图片(上传临时文件获取media_id) TODO 过期问题? + ImageMessageDto image = new ImageMessageDto(); + WeGroupCode groupCode = groupCodeMapper.selectWeGroupCodeById(task.getGroupCodeId()); + WeMediaDto mediaDto = materialService.uploadTemporaryMaterial(groupCode.getCodeUrl(), MediaType.IMAGE.getMediaType(), "临时文件"); + image.setMedia_id(mediaDto.getMedia_id()); + queryData.setImage(image); + + // 调用企业群发接口 + SendMessageResultDto resultDto = customerMessagePushClient.sendCustomerMessageToUser(queryData); + + // 设定该任务的msgid + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("task_id", task.getTaskId()); + updateWrapper.set("msgid", resultDto.getMsgid()); + this.update(updateWrapper); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 个人群发 + * + * @param task 建群任务信息 + */ + private void sendEmployeeMessage(WePresTagGroupTask task) { + WeMessagePushDto pushDto = new WeMessagePushDto(); + // 设置toUser参数 + List employeeList = taskScopeMapper.getScopeListByTaskId(task.getTaskId()); + String toUser = employeeList.stream().map(WeCommunityTaskEmplVo::getUserId).collect(Collectors.joining("|")); + pushDto.setTouser(toUser); + + // 获取agentId + WeCorpAccount validWeCorpAccount = corpAccountService.findValidWeCorpAccount(); + String agentId = validWeCorpAccount.getAgentId(); + String corpId = validWeCorpAccount.getCorpId(); + if (StringUtils.isEmpty(agentId)) { + throw new WeComException("当前agentId不可用或不存在"); + } + pushDto.setAgentid(Integer.valueOf(agentId)); + + // 设置文本消息 + TextMessageDto text = new TextMessageDto(); + String REDIRECT_URI = URLEncoder.encode(String.format("%s?corpId=%s&agentId=%s&type=%s", authorizeRedirectUrl, corpId, agentId, CommunityTaskType.TAG.getType())); + String context = String.format( + "你有一个新任务,请点击此链接查看", + authorizeUrl, corpId, REDIRECT_URI); + text.setContent(context); + pushDto.setText(text); + + pushDto.setMsgtype("text"); + + // 请求消息推送接口,获取结果 [消息推送 - 发送应用消息] + messagePushClient.sendMessageToUser(pushDto, agentId); + } } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTaskFissionRewardServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTaskFissionRewardServiceImpl.java index 19f55f9e728c23d33d7eb5986affbbee1abc6edb..b12b5822b0dad57aca2458a1f365dee1f84d9b1a 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTaskFissionRewardServiceImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTaskFissionRewardServiceImpl.java @@ -106,27 +106,29 @@ public class WeTaskFissionRewardServiceImpl implements IWeTaskFissionRewardServi } @Override - public WeTaskFissionRewardVo getRewardByFissionId(String fissionId, String eid) { + public WeTaskFissionRewardVo getRewardByFissionId(String fissionId, String unionId) { WeTaskFissionRewardVo weTaskFissionRewardVo = new WeTaskFissionRewardVo(); - WeCustomer weCustomer = weCustomerService.getOne(new LambdaQueryWrapper().eq(WeCustomer::getExternalUserid, eid)); - String externalUseriId = Optional.ofNullable(weCustomer).map(WeCustomer::getExternalUserid) + WeCustomer weCustomer = weCustomerService.getOne(new LambdaQueryWrapper().eq(WeCustomer::getUnionid, unionId)); + String customerUnionId = Optional.ofNullable(weCustomer).map(WeCustomer::getUnionid) .orElseThrow(() -> new WeComException("用户信息不存在")); - WeTaskFissionRecord record = weTaskFissionRecordService.selectWeTaskFissionRecordByIdAndCustomerId(Long.valueOf(fissionId), externalUseriId); - Date completeTime = Optional.ofNullable(record).map(WeTaskFissionRecord::getCompleteTime) - .orElseThrow(() -> new WeComException("任务信息不存在")); - + WeTaskFissionRecord record = weTaskFissionRecordService.selectWeTaskFissionRecordByIdAndCustomerId(Long.valueOf(fissionId), customerUnionId); + if (record == null){ + throw new WeComException("任务信息不存在"); + } + Date completeTime = record.getCompleteTime(); WeTaskFission weTaskFission = weTaskFissionService.selectWeTaskFissionById(Long.valueOf(fissionId)); Optional.ofNullable(weTaskFission).ifPresent(fission -> { weTaskFissionRewardVo.setRewardRule(fission.getRewardRule()); - weTaskFissionRewardVo.setRewardImageUrl(fission.getRewardImageUrl()); - weTaskFissionRewardVo.setRewardUrl(fission.getRewardUrl()); }); - if (completeTime != null) { + Optional.ofNullable(weTaskFission).ifPresent(fission -> { + weTaskFissionRewardVo.setRewardUrl(fission.getRewardUrl()); + weTaskFissionRewardVo.setRewardImageUrl(fission.getRewardImageUrl()); + }); WeTaskFissionReward fissionReward = weTaskFissionRewardMapper.selectOne(new LambdaQueryWrapper() .eq(WeTaskFissionReward::getTaskFissionId, fissionId) - .eq(WeTaskFissionReward::getRewardUserId, externalUseriId)); + .eq(WeTaskFissionReward::getRewardUserId, customerUnionId)); weTaskFissionRewardVo.setWeTaskFissionReward(fissionReward); //发放兑奖码之后,置为已使用 Optional.ofNullable(fissionReward).ifPresent(reward -> weTaskFissionRewardMapper.update(reward, new LambdaUpdateWrapper() 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 6172620e3339276705e4131021794cba0c0dee2a..2e5357febb91da844848b17c8802e44f73aab833 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 @@ -1,6 +1,7 @@ package com.linkwechat.wecom.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.fasterxml.jackson.core.JsonProcessingException; @@ -153,6 +154,7 @@ public class WeTaskFissionServiceImpl implements IWeTaskFissionService { int updateResult = weTaskFissionMapper.updateWeTaskFission(weTaskFission); if (updateResult > 0) { if (CollectionUtils.isNotEmpty(weTaskFission.getTaskFissionStaffs())) { + log.info("发起成员信息:【{}】",JSONObject.toJSONString(weTaskFission.getTaskFissionStaffs())); List staffList = weTaskFissionStaffService.selectWeTaskFissionStaffByTaskId(weTaskFission.getId()); if (CollectionUtils.isNotEmpty(staffList)) { weTaskFissionStaffService.deleteWeTaskFissionStaffByIds(staffList.stream().map(WeTaskFissionStaff::getId).toArray(Long[]::new)); @@ -199,11 +201,9 @@ public class WeTaskFissionServiceImpl implements IWeTaskFissionService { //H5生成海报页面路径 StringBuilder pageUrlBuilder = new StringBuilder(pageUrl); pageUrlBuilder.append("?") - .append("agentId=").append("1000010") - .append("&") .append("fissionId=").append(id) .append("&") - .append("userId=").append(fissStaffId) + .append("fissionTargetId=").append(fissStaffId) .append("&") .append("posterId=").append(weTaskFission.getPostersId()); @@ -214,6 +214,9 @@ public class WeTaskFissionServiceImpl implements IWeTaskFissionService { linkMessageDto.setUrl(pageUrlBuilder.toString()); CustomerMessagePushDto customerMessagePushDto = new CustomerMessagePushDto(); + if (weTaskFission.getStartTime() != null){ + customerMessagePushDto.setSettingTime(DateUtil.formatDateTime(weTaskFission.getStartTime())); + } customerMessagePushDto.setLinkMessage(linkMessageDto); customerMessagePushDto.setPushType("0"); customerMessagePushDto.setPushRange("1"); @@ -247,10 +250,10 @@ public class WeTaskFissionServiceImpl implements IWeTaskFissionService { @Transactional public String fissionPosterGenerate(WeTaskFissionPosterDTO weTaskFissionPosterDTO) { WeCustomer weCustomer = weCustomerService.getOne(new LambdaQueryWrapper() - .eq(WeCustomer::getExternalUserid, weTaskFissionPosterDTO.getEid())); + .eq(WeCustomer::getUnionid, weTaskFissionPosterDTO.getUnionId())); if (weCustomer != null) { //任务表添加当前客户任务 - WeTaskFissionRecord record = getTaskFissionRecordId(weTaskFissionPosterDTO.getTaskFissionId(), weCustomer.getExternalUserid(), weCustomer.getName()); + WeTaskFissionRecord record = getTaskFissionRecordId(weTaskFissionPosterDTO.getTaskFissionId(), weCustomer.getUnionid(), weCustomer.getName()); String posterUrl = record.getPoster(); if (StringUtils.isBlank(posterUrl)) { String qrcode = getPosterQRCode(weTaskFissionPosterDTO.getFissionTargetId(), record, weCustomer); @@ -292,27 +295,27 @@ public class WeTaskFissionServiceImpl implements IWeTaskFissionService { } @Override - public List getCustomerListById(String eid, String fissionId) { + public List getCustomerListById(String unionId, String fissionId) { WeTaskFissionRecord weTaskFissionRecord; - if (StringUtils.isEmpty(eid)) { + if (StringUtils.isEmpty(unionId)) { List weTaskFissionRecords = weTaskFissionRecordService .list(new LambdaQueryWrapper().eq(WeTaskFissionRecord::getTaskFissionId, fissionId)); return Optional.ofNullable(weTaskFissionRecords).orElseGet(ArrayList::new).stream() .map(record -> weCustomerService.selectWeCustomerById(record.getCustomerId())) .filter(Objects::nonNull).collect(Collectors.toList()); } else { - WeCustomer weCustomer = weCustomerService.getOne(new LambdaQueryWrapper().eq(WeCustomer::getExternalUserid, eid)); - String externalUseriId = Optional.ofNullable(weCustomer).map(WeCustomer::getExternalUserid) - .orElseThrow(() -> new WeComException("用户信息不存在")); weTaskFissionRecord = weTaskFissionRecordService - .selectWeTaskFissionRecordByIdAndCustomerId(Long.valueOf(fissionId), externalUseriId); - Optional.ofNullable(weTaskFissionRecord).map(WeTaskFissionRecord::getId) - .orElseThrow(() -> new WeComException("任务记录信息不存在")); + .selectWeTaskFissionRecordByIdAndCustomerId(Long.valueOf(fissionId), unionId); + Optional.ofNullable(weTaskFissionRecord).orElseThrow(() -> new WeComException("任务记录信息不存在")); List list = weFlowerCustomerRelService.list(new LambdaQueryWrapper() .eq(WeFlowerCustomerRel::getState, WeConstans.FISSION_PREFIX + weTaskFissionRecord.getId())); List eidList = Optional.ofNullable(list).orElseGet(ArrayList::new).stream() .map(WeFlowerCustomerRel::getExternalUserid).collect(Collectors.toList()); - return weCustomerService.listByIds(eidList); + if (CollectionUtil.isNotEmpty(eidList)){ + return weCustomerService.listByIds(eidList); + }else { + return null; + } } } @@ -351,10 +354,10 @@ public class WeTaskFissionServiceImpl implements IWeTaskFissionService { } @Override - public WeTaskFissionProgressVO getCustomerTaskProgress(WeTaskFission taskFission, String eid) { + public WeTaskFissionProgressVO getCustomerTaskProgress(WeTaskFission taskFission, String unionId) { long complete = 0L; long total = taskFission.getFissNum(); - List list = getCustomerListById(eid, String.valueOf(taskFission.getId())); + List list = getCustomerListById(unionId, String.valueOf(taskFission.getId())); if (CollectionUtils.isNotEmpty(list)) { complete = list.size(); } else { @@ -363,6 +366,15 @@ public class WeTaskFissionServiceImpl implements IWeTaskFissionService { return WeTaskFissionProgressVO.builder().total(total).completed(complete).customers(list).build(); } + /** + * 更新过期任务 + * @return + */ + @Override + public void updateExpiredWeTaskFission() { + weTaskFissionMapper.updateExpiredWeTaskFission(); + } + /*************************************** private functions **************************************/ private String getPosterQRCode(String fissionTargetId, WeTaskFissionRecord record, WeCustomer weCustomer) { @@ -430,7 +442,8 @@ public class WeTaskFissionServiceImpl implements IWeTaskFissionService { WeTaskFissionRecord record = WeTaskFissionRecord.builder() .taskFissionId(taskFissionId) .customerId(customerId) - .customerName(customerName).build(); + .customerName(customerName) + .createTime(new Date()).build(); List searchExists = weTaskFissionRecordService.selectWeTaskFissionRecordList(record); WeTaskFissionRecord recordInfo; if (CollectionUtils.isNotEmpty(searchExists)) { diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTaskFissionStaffServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTaskFissionStaffServiceImpl.java index 3e85cca2a78876c82c46a056b9e5dbd9687a304f..ddd694ab15939bc6f10019bd91b0e805060c6804 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTaskFissionStaffServiceImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTaskFissionStaffServiceImpl.java @@ -54,7 +54,7 @@ public class WeTaskFissionStaffServiceImpl implements IWeTaskFissionStaffService @Override public int insertWeTaskFissionStaffList(List weTaskFissionStaffs) { - return 0; + return weTaskFissionStaffMapper.insertWeTaskFissionStaffList(weTaskFissionStaffs); } /** diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/wxclient/WxAuthClient.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/wxclient/WxAuthClient.java new file mode 100644 index 0000000000000000000000000000000000000000..6fc74aed7bfe342d98f745988eecf4de3082d216 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/wxclient/WxAuthClient.java @@ -0,0 +1,63 @@ +package com.linkwechat.wecom.wxclient; + +import com.dtflys.forest.annotation.BaseRequest; +import com.dtflys.forest.annotation.Query; +import com.dtflys.forest.annotation.Request; +import com.linkwechat.wecom.domain.weixin.dto.WxTokenDto; +import com.linkwechat.wecom.domain.weixin.dto.WxAuthUserInfoDto; +import com.linkwechat.wecom.interceptor.WeiXinAuthInterceptor; + +/** + * @author danmo + * @description + * @date 2021/4/5 15:47 + **/ +@BaseRequest(baseURL = "https://api.weixin.qq.com/sns",contentType = "application/json" + ,interceptor = WeiXinAuthInterceptor.class) +public interface WxAuthClient { + /** + * 获取微信授权token + * + * @param appId 公众号的唯一标识 + * @param secret 密钥 + * @param code 302重定向code + * @param grantType 填写为authorization_code + * @return + */ + @Request(url = "/oauth2/access_token", type = "GET") + WxTokenDto getAuthToken(@Query("appid") String appId, @Query("secret") String secret, + @Query("code") String code, @Query("grant_type") String grantType); + + /** + * 刷新access_token + * + * + * @param id + * @param appId 公众号的唯一标识 + * @param grantType 填写为refresh_token + * @param refreshToken 填写通过access_token获取到的refresh_token参数 + * @return + */ + @Request(url = "/oauth2/refresh_token", type = "GET") + WxTokenDto refreshToken(@Query("appid") String appId, @Query("grant_type") String grantType, + @Query("refresh_token") String refreshToken); + + /** + * 检验授权凭证(access_token)是否有效 + * @param openId 用户的唯一标识 + * @return + */ + @Request(url = "/auth", type = "GET") + WxTokenDto auth(@Query("openid") String openId); + + + /** + * 拉取用户信息(需scope为 snsapi_userinfo) + * @param openId 用户的唯一标识 + * @param lang 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语 + * @return + */ + @Request(url = "/userinfo", type = "GET") + WxAuthUserInfoDto getUserInfo(@Query("openid") String openId, @Query("lang") String lang); + +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/wxclient/WxCommonClient.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/wxclient/WxCommonClient.java new file mode 100644 index 0000000000000000000000000000000000000000..9ab4e95c7c58baf1258d54530e21ab077174bbfd --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/wxclient/WxCommonClient.java @@ -0,0 +1,36 @@ +package com.linkwechat.wecom.wxclient; + +import com.dtflys.forest.annotation.BaseRequest; +import com.dtflys.forest.annotation.Query; +import com.dtflys.forest.annotation.Request; +import com.linkwechat.wecom.domain.weixin.dto.WxTokenDto; +import com.linkwechat.wecom.interceptor.WeiXinAccessTokenInterceptor; + +/** + * @author danmo + * @description + * @date 2021/4/5 17:11 + **/ +@BaseRequest(baseURL = "https://api.weixin.qq.com/cgi-bin",contentType = "application/json") +public interface WxCommonClient { + /** + * 获取微信token + * + * @param grantType 填写为client_credential + * @param appId 公众号的唯一标识 + * @param secret 密钥 + * @return + */ + @Request(url = "/token", type = "GET") + WxTokenDto getToken(@Query("grant_type") String grantType, @Query("appid") String appId, @Query("secret") String secret); + + /** + * + * @param type + * @return + */ + @Request(url = "/ticket/getticket", type = "GET", interceptor = WeiXinAccessTokenInterceptor.class) + WxTokenDto getTicket(@Query("type") String type); + + +} diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeCommunityNewGroupMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeCommunityNewGroupMapper.xml index bcf7f2e27aa39bde60574df9f5025aa7b59f1198..d2efc5ff9f8aa4ebad19d0f462afef31bae90755 100644 --- a/linkwe-wecom/src/main/resources/mapper/wecom/WeCommunityNewGroupMapper.xml +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeCommunityNewGroupMapper.xml @@ -4,42 +4,44 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + + + + + + + - SELECT new_group_id, - emple_code_name, + SELECT id, + empl_code_name, + empl_code_id, group_code_id, create_by, create_time, update_by, update_time, - del_flag, - activity_scene, - welcome_msg, - qr_code, - is_join_confirm_friends, - media_id, - join_friend_nums, - config_id, - user_qr_code + del_flag FROM we_community_new_group - + + update we_community_new_group set del_flag = 1 - where new_group_id in + where id in #{id} - del_flag = 0 - - AND emple_code_name LIKE CONCAT("%",#{employCodeName},"%") + + AND empl_code_name LIKE CONCAT("%",#{emplCodeName},"%") AND date_format(create_time,'%y%m%d') >= date_format(#{beginTime},'%y%m%d') @@ -54,18 +56,18 @@ - - new_group_id =#{newGroupId} + del_flag = 0 AND id = #{id} - - new_group_id in + del_flag = 0 + AND id in #{id} diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeEmpleCodeMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeEmpleCodeMapper.xml index 924b292f19f889630b6778f59e949317f30374cb..2d87ee440c4d111a95504d50a8c3ed325cea9c2e 100644 --- a/linkwe-wecom/src/main/resources/mapper/wecom/WeEmpleCodeMapper.xml +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeEmpleCodeMapper.xml @@ -7,8 +7,8 @@ - - + + @@ -16,6 +16,8 @@ + + @@ -28,21 +30,23 @@ - select id, code_type, is_join_confirm_friends, activity_scene, welcome_msg, create_by, create_time, del_flag, config_id,qr_code from we_emple_code + select id, code_type, skip_verify, scenario, welcome_msg, create_by, create_time, del_flag, config_id,qr_code, state, scan_times from we_emple_code select wec.id, wec.code_type, - wec.is_join_confirm_friends, - wec.activity_scene, + wec.skip_verify, + wec.scenario, wec.welcome_msg, wec.create_by, wec.create_time, wec.del_flag, wec.config_id, - wec.qr_code + wec.state, + wec.qr_code, + wec.scan_times from we_emple_code wec left join we_emple_code_use_scop wecus on wec.id = wecus.emple_code_id and wecus.business_id_type = 2 @@ -54,14 +58,16 @@ wecode.id, wecode.code_type, wecode.media_id, - wecode.is_join_confirm_friends, - wecode.activity_scene, + wecode.skip_verify, + wecode.scenario, wecode.welcome_msg, wecode.create_by, wecode.create_time, wecode.del_flag, wecode.config_id, wecode.qr_code, + wecode.state, + wecode.scan_times, wecusn.business_id, wecusn.business_name, wecusn.mobile, @@ -88,9 +94,9 @@ select wecode.id as emple_code_id, @@ -217,8 +229,8 @@ wm .id = wecode.media_id where wecode.del_flag = 0 - - and wecode.activity_scene = #{activityScene} + + and wecode.scenario = #{scenario} and wecus.business_id = #{userId} @@ -226,6 +238,30 @@ + + + + + + update we_emple_code + set scan_times = scan_times + 1 + where state = #{state} + \ No newline at end of file diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeEmpleCodeUseScopMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeEmpleCodeUseScopMapper.xml index 53d2826c8ff9749452506ea0e79feca6a20eac58..1c15d02f4e9b672845cd5f900dfa083080a2c24c 100644 --- a/linkwe-wecom/src/main/resources/mapper/wecom/WeEmpleCodeUseScopMapper.xml +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeEmpleCodeUseScopMapper.xml @@ -3,7 +3,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + @@ -44,12 +44,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + - + insert into we_emple_code_use_scop @@ -84,17 +84,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - delete from we_emple_code_use_scop where id in + delete from we_emple_code_use_scop where id in #{id} - insert into we_emple_code_use_scop (id,emple_code_id,business_id,business_name,del_flag) + insert into we_emple_code_use_scop (id,emple_code_id,business_id,business_name, business_id_type, del_flag) values - (#{scop.id},#{scop.empleCodeId},#{scop.businessId},#{scop.businessName},#{scop.delFlag}) + (#{scop.id},#{scop.empleCodeId},#{scop.businessId},#{scop.businessName},#{scop.businessIdType},#{scop.delFlag}) @@ -102,10 +102,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update we_emple_code_use_scop set del_flag = 2 where emple_code_id in - #{id} - + \ No newline at end of file diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupCodeActualMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupCodeActualMapper.xml index 54eb11b64f1952d6c409e2ee9ae9e6b42df87306..52f547c5991073dc4b0f07de245d43ec45831303 100644 --- a/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupCodeActualMapper.xml +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupCodeActualMapper.xml @@ -108,6 +108,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where id = #{id} + + update we_group_code_actual + set scan_code_times = scan_code_times + 1 + where chat_id = #{chatId} + + delete from we_group_code_actual where id = #{id} diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupCodeMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupCodeMapper.xml index 326dbfe5f0f949c52ffff3e9946a732afcd1325d..eaa3a17e5857eb333058d527ed580a897721880b 100644 --- a/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupCodeMapper.xml +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupCodeMapper.xml @@ -93,6 +93,29 @@ where w.id = #{id} + + + + @@ -170,4 +193,9 @@ + + \ No newline at end of file diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupSopChatMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupSopChatMapper.xml index d1630d6ffe3938c4fb3c5814b8cec176420ad304..e973b112c3bfbd6f3fd0b27eb1f29addd3edd951 100644 --- a/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupSopChatMapper.xml +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupSopChatMapper.xml @@ -3,10 +3,43 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + + + + + + + + + + - insert into we_group_sop_chat(rule_id, chat_id) values + insert into we_group_sop_chat(rule_id, chat_id, is_done) values - (#{item.ruleId},#{item.chatId}) + (#{item.ruleId},#{item.chatId}, #{item.isDone}) + + + update we_group_sop_chat wgsc + inner join we_group wg on wgsc.chat_id = wg.chat_id + set wgsc.is_done = TRUE + where wgsc.rule_id = #{ruleId} + and wg.owner = #{emplId} + \ No newline at end of file diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupSopMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupSopMapper.xml index d139ad5a1b9820de8d589211edf91027242366c2..5dcdc486d546aa2c8496cfd7093a7c07adac0149 100644 --- a/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupSopMapper.xml +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupSopMapper.xml @@ -82,4 +82,25 @@ select count(1) from we_group_sop where rule_name = #{ruleName} + + \ No newline at end of file diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeKeywordGroupTaskMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeKeywordGroupTaskMapper.xml index 4a4c31e695cd14323f20d3ee1928eda31dbeb654..c1126102cfa1db25c884e922d0867265805a7d40 100644 --- a/linkwe-wecom/src/main/resources/mapper/wecom/WeKeywordGroupTaskMapper.xml +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeKeywordGroupTaskMapper.xml @@ -72,4 +72,10 @@ + + \ No newline at end of file diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeMaterialMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeMaterialMapper.xml index 85004b906ef5e352059488c16f9ce233252fa984..67ba26153fa90892c23c316a8d261a24081a1aeb 100644 --- a/linkwe-wecom/src/main/resources/mapper/wecom/WeMaterialMapper.xml +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeMaterialMapper.xml @@ -19,6 +19,22 @@ + + + + + + + + + + + + + + + + INSERT INTO we_material @@ -201,6 +217,17 @@ + + id,category_id,material_url,content,material_name,digest,cover_url,create_by,create_time,update_by,update_time,audio_time diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskMapper.xml index ea3f9a9681034c916a84ff30d8b2ad916d7560d6..a5e5487846c4e86fcd4660ee9836058ea08f4597 100644 --- a/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskMapper.xml +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskMapper.xml @@ -9,12 +9,15 @@ - + + + + @@ -27,28 +30,31 @@ wptg.task_name, wptg.welcome_msg, wptg.send_type, - wptg.group_code_id, wptg.send_scope, wptg.send_gender, wptg.cus_begin_time, wptg.cus_end_time, + wptg.msgid, wptg.create_by, wptg.create_time, wptg.update_by, wptg.update_time, + wgc.code_url, + wgc.uuid as code_uuid, + wgc.id as group_code_id, IFNULL((SELECT SUM( wgca.scan_code_times ) AS scan_times FROM we_group_code_actual wgca GROUP BY group_code_id HAVING group_code_id = wgc.id), 0) as total_member FROM we_pres_tag_group wptg - left join we_group_code wgc on wgc.id = wptg.group_code_id + LEFT JOIN we_group_code wgc ON wgc.id = wptg.group_code_id - + - + + + + + INSERT INTO we_pres_tag_group + + task_id, + task_name, + send_type, + group_code_id, + welcome_msg, + send_scope, + send_gender, + cus_begin_time, + cus_end_time, + msgid, + create_time, + create_by, + + + #{taskId}, + #{taskName}, + #{sendType}, + #{groupCodeId}, + #{welcomeMsg}, + #{sendScope}, + #{sendGender}, + #{cusBeginTime}, + #{cusEndTime}, + #{msgid}, + #{createTime}, + #{createBy}, + + + + + UPDATE we_pres_tag_group + + task_name = #{taskName}, + send_type = #{sendType}, + group_code_id = #{groupCodeId}, + welcome_msg = #{welcomeMsg}, + send_scope = #{sendScope}, + send_gender = #{sendGender}, + cus_begin_time = #{cusBeginTime}, + cus_end_time = #{cusEndTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + WHERE task_id = #{taskId} + + \ No newline at end of file diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskScopeMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskScopeMapper.xml index 8e40f049ad57e76fdcae59ee89d20631546d7a63..142fe30b5a1f2eabbd7625e5f9e4aabc33c83ef5 100644 --- a/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskScopeMapper.xml +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskScopeMapper.xml @@ -4,15 +4,19 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - + + + + + - insert into we_pres_tag_group_scope(task_id, we_user_id) values + insert into we_pres_tag_group_scope(task_id, we_user_id, is_done) values - (#{item.taskId},#{item.weUserId}) + (#{item.taskId},#{item.weUserId},#{item.isDone}) + + UPDATE we_pres_tag_group_scope + SET is_done = TRUE + WHERE + task_id = #{taskId} AND we_user_id = #{emplId} + + \ No newline at end of file diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskStatMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskStatMapper.xml index cff6579a78b82a1f3f2ca264fd8b3388ddec9d59..e74a1d8cf690008779dbd72cf305ba722f3e2418 100644 --- a/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskStatMapper.xml +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskStatMapper.xml @@ -10,40 +10,46 @@ - SELECT DISTINCT - wc.`name` AS customer_name, - IFNULL( wptgs.is_sent, 0 ) AS is_sent, - IFNULL( wptgs.is_in_group, 0 ) AS is_in_group + wc.external_userid FROM - we_pres_tag_group_tag wptgt - LEFT JOIN we_flower_customer_tag_rel wfctr ON wfctr.tag_id = wptgt.tag_id - LEFT JOIN we_flower_customer_rel wfcr ON wfcr.id = wfctr.flower_customer_rel_id - LEFT JOIN we_customer wc ON wc.external_userid = wfcr.external_userid - LEFT JOIN we_pres_tag_group_stat wptgs ON wptgt.task_id = wptgs.task_id - AND wptgs.external_userid = wfcr.external_userid - WHERE - wptgt.task_id = #{taskId} - ) t + we_customer wc + LEFT JOIN we_group_member wgm ON wgm.user_id = wc.external_userid + LEFT JOIN we_group wg ON wg.chat_id = wgm.chat_id + LEFT JOIN we_group_code_actual wgca ON wgca.chat_id = wg.chat_id + LEFT JOIN we_pres_tag_group wptg ON wptg.group_code_id = wgca.group_code_id WHERE - 1 = 1 - - AND t.customer_name LIKE concat('%', #{customerName}, '%') - - - AND t.is_sent = #{isSent} - - - AND t.is_in_group = #{isInGroup} - + wptg.task_id = #{taskId} + + \ No newline at end of file diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskTagMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskTagMapper.xml index 08508c44e32b53317dbd8d187e8ebc01bc89f727..928216ae583618e63c6e0dee85fa7f2afcae44f3 100644 --- a/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskTagMapper.xml +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskTagMapper.xml @@ -22,6 +22,21 @@ wcog.task_id = #{taskId} + + insert into we_pres_tag_group_tag(task_id, tag_id) values diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeTaskFissionMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeTaskFissionMapper.xml index 05c38ed05dfccf40870a03acef2ca498bfbbb8a6..cf32ad0d204e132c44287b6079d7ff0653c0b269 100644 --- a/linkwe-wecom/src/main/resources/mapper/wecom/WeTaskFissionMapper.xml +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeTaskFissionMapper.xml @@ -156,4 +156,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + update we_task_fission as wtff, + ( + select + id + from + we_task_fission wtf + where + wtf.fiss_status = 1 + and now() >= wtf.over_time + )as wtfl + set wtff.fiss_status = 2 + where + wtff.id = wtfl.id + \ No newline at end of file diff --git a/mvnw b/mvnw new file mode 100644 index 0000000000000000000000000000000000000000..41c0f0c23db5dca836d3db1a17a7a28444d17d74 --- /dev/null +++ b/mvnw @@ -0,0 +1,310 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000000000000000000000000000000000000..86115719e5383e94597f918bf18c5ecbb7cfe492 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,182 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/pom.xml b/pom.xml index b60683b303fc359b6419e27d711ec6b9769106a6..3393d92bd86a0d4664ad6a73b6b2f6a5ebc4c6b0 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ 若依管理系统 - 2.3.7.RELEASE + 2.3.7.RELEASE 3.1.0 UTF-8 UTF-8 @@ -59,7 +59,7 @@ org.springframework.boot spring-boot-dependencies - ${springboot.vaerion} + ${springboot.version} pom import diff --git a/sql/link-wechat.sql b/sql/link-wechat.sql index 58fedfe6287e3afb16ad220844e400743535c748..c99a1448535c8e649f9edb50f5256f31fe531e24 100644 --- a/sql/link-wechat.sql +++ b/sql/link-wechat.sql @@ -20138,18 +20138,17 @@ INSERT INTO `we_chat_side` VALUES ('6', '5', '海报类型', '10', '0', null, nu -- ---------------------------- DROP TABLE IF EXISTS `we_community_new_group`; CREATE TABLE `we_community_new_group` ( - `new_group_id` bigint(64) NOT NULL COMMENT '主键ID', - `emple_code_id` bigint(64) DEFAULT NULL COMMENT '员工活码ID', - `emple_code_name` varchar(100) DEFAULT NULL COMMENT '员工活码名称', - `group_code_id` bigint(64) DEFAULT NULL COMMENT '群活码ID', - `create_by` varchar(64) DEFAULT NULL, - `create_time` datetime DEFAULT NULL, - `update_by` varchar(64) DEFAULT NULL, - `update_time` datetime DEFAULT NULL, - `del_flag` int(1) DEFAULT '0', - PRIMARY KEY (`new_group_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='新客自动拉群'; - + `id` bigint(64) NOT NULL COMMENT '主键ID', + `empl_code_name` varchar(100) NOT NULL COMMENT '员工活码名称', + `group_code_id` bigint(64) NOT NULL COMMENT '群活码ID', + `create_by` varchar(64) DEFAULT NULL COMMENT '创建人', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) DEFAULT NULL COMMENT '修改人', + `update_time` datetime DEFAULT NULL COMMENT '修改时间', + `del_flag` int(1) DEFAULT '0' COMMENT '0:正常;1:删除;', + `empl_code_id` bigint(20) NOT NULL COMMENT '员工活码id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='新客自动拉群' -- ---------------------------- -- Records of we_community_new_group -- ---------------------------- @@ -24154,8 +24153,8 @@ DROP TABLE IF EXISTS `we_emple_code`; CREATE TABLE `we_emple_code` ( `id` bigint(20) NOT NULL, `code_type` tinyint(4) DEFAULT NULL COMMENT '活码类型:1:批量;2:单人;3:多人;', - `is_join_confirm_friends` tinyint(4) DEFAULT NULL COMMENT '客户添加时无需经过确认自动成为好友:1:是;0:否', - `activity_scene` varchar(300) DEFAULT NULL COMMENT '活动场景', + `skip_verify` tinyint(4) DEFAULT NULL COMMENT '客户添加时无需经过确认自动成为好友:1:是;0:否', + `scenario` varchar(300) DEFAULT NULL COMMENT '活动场景', `welcome_msg` varchar(60) DEFAULT NULL COMMENT '欢迎语', `create_by` varchar(64) DEFAULT NULL COMMENT '创建人', `create_time` datetime DEFAULT NULL COMMENT '创建时间', @@ -24163,35 +24162,16 @@ CREATE TABLE `we_emple_code` ( `config_id` varchar(50) DEFAULT NULL COMMENT '新增联系方式的配置id', `qr_code` varchar(100) DEFAULT NULL COMMENT '二维码链接', `media_id` bigint(20) DEFAULT NULL COMMENT '素材id', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='员工活码表'; + `state` varchar(30) DEFAULT NULL COMMENT '用于区分客户具体是通过哪个「联系我」添加。不能超过30个字符。', + `update_by` varchar(64) DEFAULT NULL COMMENT '更新者', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `scan_times` int(11) NOT NULL DEFAULT '0' COMMENT '该员工活码的扫码次数', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='员工活码表' -- ---------------------------- -- Records of we_emple_code -- ---------------------------- -INSERT INTO `we_emple_code` VALUES ('1326456976804286464', '1', '1', '测试场景', '欢迎加我微信', 'admin', '2020-11-11 17:29:22', '1', null, null, null); -INSERT INTO `we_emple_code` VALUES ('1333283446512029696', '1', '1', '测试', '反反复复', 'admin', '2020-11-30 13:35:20', '1', '8a1a02dd48af74abddd9742d5656ea93', 'https://wework.qpic.cn/wwpic/797066_R18FRn2jR_m9MVp_1606714519/0', '1333022014193143808'); -INSERT INTO `we_emple_code` VALUES ('1333284454675910656', '2', '1', '测试多人', '反反复复', 'admin', '2020-11-30 13:39:20', '1', '09c1e17569cc83ba162472382ba9a021', 'https://wework.qpic.cn/wwpic/178524_-bVn8D-OQeOyBEZ_1606714760/0', '1333281312584372224'); -INSERT INTO `we_emple_code` VALUES ('1333307181688295424', '1', '1', '测试个人', '测试个人', 'admin', '2020-11-30 15:09:38', '1', '4a1fc5b877c54c87b70dc1987782ec97', 'https://wework.qpic.cn/wwpic/747967_JN7jXRYPRBOAV8Q_1606720178/0', '1333022014193143808'); -INSERT INTO `we_emple_code` VALUES ('1333307316556140544', '2', '1', '测试多人', '测试多人', 'admin', '2020-11-30 15:10:11', '0', 'd431a637de3d6095f0fb6396ee1ee253', 'https://wework.qpic.cn/wwpic/870989_UfArHAvSS7uY8DQ_1606720210/0', '1344530706545643520'); -INSERT INTO `we_emple_code` VALUES ('1333321986788691968', '1', '1', '测试测试它', '欢迎光临', 'admin', '2020-11-30 16:08:28', '0', '9e3bb2d4291e5d5bb4bd9b9af51b02ae', 'https://wework.qpic.cn/wwpic/401133_9kFd-DQNRYmXCUH_1608889743/0', '1333022014193143808'); -INSERT INTO `we_emple_code` VALUES ('1334748765000699904', '1', '0', '胜多负少', null, 'admin', '2020-12-04 14:37:59', '1', null, null, '1333022014193143808'); -INSERT INTO `we_emple_code` VALUES ('1335099526549213184', '1', '0', '是的', '是公司', 'admin', '2020-12-05 13:51:47', '1', null, null, '1333022014193143808'); -INSERT INTO `we_emple_code` VALUES ('1339470240295292928', '1', '1', '码云入群', '欢迎关注Linkwechat!', 'admin', '2020-12-17 15:19:26', '1', null, '', null); -INSERT INTO `we_emple_code` VALUES ('1339471190355480576', '1', '1', '码云加群', '欢迎关注linkwechat!', 'admin', '2020-12-17 15:23:13', '0', '6913293c8c88460e56140bb8ddfb6050', 'https://wework.qpic.cn/wwpic/932103_itm3jjENRkunPBW_1608189792/0', null); -INSERT INTO `we_emple_code` VALUES ('1347751705542004736', '1', '1', '111111111111111111111111111111', '分发给他', 'admin', '2021-01-09 11:47:01', '1', null, '', '1344530706545643520'); -INSERT INTO `we_emple_code` VALUES ('1347753507050098688', '1', '1', '1111', '111111', 'admin', '2021-01-09 11:54:11', '0', '2b647fade018081066130c6237b32276', 'https://wework.qpic.cn/wwpic/187770_HU8zxBf_SmKMjxM_1610164451/0', null); -INSERT INTO `we_emple_code` VALUES ('1349722261107642368', '2', '0', null, '测试111', 'admin', '2021-01-14 22:17:18', '1', null, '', '1333022014193143808'); -INSERT INTO `we_emple_code` VALUES ('1349723537274966016', '1', '1', '1', '1', 'admin', '2021-01-14 22:22:23', '0', null, '', '1344530706545643520'); -INSERT INTO `we_emple_code` VALUES ('1349724997391880192', '2', '0', '2', '2', 'admin', '2021-01-14 22:28:11', '0', '5abadc11db2ac9b77d994ec017c02045', 'https://wework.qpic.cn/wwpic/950045_zoFB4ywsSqW6Edk_1610634490/0', '1344530706545643520'); -INSERT INTO `we_emple_code` VALUES ('1349727145127186432', '1', '0', '', null, 'admin', '2021-01-14 22:36:43', '0', '5acecef11e4a8063161dcc2d9130a8aa', 'https://wework.qpic.cn/wwpic/97022_AlqMayNvRAiw8rY_1610635003/0', null); -INSERT INTO `we_emple_code` VALUES ('1360045616641740800', '1', '0', '放一放', '有', 'admin', '2021-02-12 09:58:38', '0', 'bd265217030555e5ca40793ca0eac8c1', 'https://wework.qpic.cn/wwpic/531532_bvW-Rck7R9GC3ef_1613095118/0', null); -INSERT INTO `we_emple_code` VALUES ('1361961254406721536', '2', '1', 'dsd', '11112344', 'admin', '2021-02-17 16:50:42', '1', 'c54f7acd3328b576cdc80288cb596c60', 'https://wework.qpic.cn/wwpic/158551_VEogRv4LQue6pDr_1613551842/0', '1344530706545643520'); -INSERT INTO `we_emple_code` VALUES ('1362021107510677504', '2', '1', '测试多人哇哇哇1', '测试欢迎多人码123456', 'admin', '2021-02-17 20:48:32', '0', 'a08161c55d9d1d3dc90fc34fc098739e', 'https://wework.qpic.cn/wwpic/171788_-UrrOgN7RpGoEHQ_1613566112/0', '1354320802832584704'); -INSERT INTO `we_emple_code` VALUES ('1362033099269083136', '2', '1', 'vvcv', 'fddfdsfs', 'admin', '2021-02-17 21:36:11', '0', null, '', '1344530706545643520'); -INSERT INTO `we_emple_code` VALUES ('1363428436030394368', '2', '1', 'ghgh', 'hgfhgf ', 'admin', '2021-02-21 18:00:45', '1', 'f3cdf40e93cc70421a005526a41c141c', 'https://wework.qpic.cn/wwpic/270235_BJtY49LbRiS5xUw_1613901645/0', '1354320802832584704'); -INSERT INTO `we_emple_code` VALUES ('1363782299438682112', '1', '1', '123', null, 'WeCome', '2021-02-22 17:26:53', '0', 'e4eb857397abe66002237f8b081170ab', 'https://wework.qpic.cn/wwpic/123516_CYrFq5IIQWCoPc7_1613986013/0', null); -INSERT INTO `we_emple_code` VALUES ('1363782417915187200', '1', '0', '123', null, 'WeCome', '2021-02-22 17:27:21', '0', '705d08cd059c5efd1c826a70e764157a', 'https://wework.qpic.cn/wwpic/190726_9ygIGgUaQmyIBjJ_1613986041/0', null); -- ---------------------------- -- Table structure for we_emple_code_tag @@ -24209,30 +24189,6 @@ CREATE TABLE `we_emple_code_tag` ( -- ---------------------------- -- Records of we_emple_code_tag -- ---------------------------- -INSERT INTO `we_emple_code_tag` VALUES ('1326456976808480769', 'nDQAACFz3gFh1wZ5cSqQhApwUyA', null, '1326456976804286464', '0'); -INSERT INTO `we_emple_code_tag` VALUES ('1333283446516224000', 'et2H-nDQAACFz3gFh1wZ5cSqQhApwUyA', '企业QQ', '1333283446512029696', '0'); -INSERT INTO `we_emple_code_tag` VALUES ('1333284454675910657', 'et2H-nDQAATH8oY7ppNrVgpMJeEnXj3w', '企业用户', '1333284454675910656', '0'); -INSERT INTO `we_emple_code_tag` VALUES ('1333284454675910658', 'et2H-nDQAAsQsbOPfpKVNf_vc9Zwl8ww', 'ss', '1333284454675910656', '0'); -INSERT INTO `we_emple_code_tag` VALUES ('1333307181692489728', 'et2H-nDQAAsQsbOPfpKVNf_vc9Zwl8ww', 'ss', '1333307181688295424', '0'); -INSERT INTO `we_emple_code_tag` VALUES ('1333307316556140545', 'et2H-nDQAACFz3gFh1wZ5cSqQhApwUyA', '企业QQ', '1333307316556140544', '0'); -INSERT INTO `we_emple_code_tag` VALUES ('1333307316556140546', 'et2H-nDQAAd7YUGnw71_iXjD-HaruyFg', '123', '1333307316556140544', '0'); -INSERT INTO `we_emple_code_tag` VALUES ('1333307316556140547', 'et2H-nDQAAOh5qBB5mEP1Z0asFCI99HQ', '111', '1333307316556140544', '0'); -INSERT INTO `we_emple_code_tag` VALUES ('1333321986822246400', 'et2H-nDQAACFz3gFh1wZ5cSqQhApwUyA', '企业QQ', '1333321986788691968', '0'); -INSERT INTO `we_emple_code_tag` VALUES ('1347751705550393344', 'et2H-nDQAAibBWd1hLQ6JCEO2WuT5CJA', '牛逼', '1347751705542004736', '0'); -INSERT INTO `we_emple_code_tag` VALUES ('1347751705550393345', 'et2H-nDQAAXTX83q-6b-03YsLqJVC6yQ', '大客户A', '1347751705542004736', '0'); -INSERT INTO `we_emple_code_tag` VALUES ('1349727145127186433', 'et2H-nDQAAxl2C49iD32IfbAbzB6iPsQ', '2', '1349727145127186432', '0'); -INSERT INTO `we_emple_code_tag` VALUES ('1349727145127186434', 'et2H-nDQAALEcWxXVtJGnXX1hE1LfVwg', '客户234', '1349727145127186432', '0'); -INSERT INTO `we_emple_code_tag` VALUES ('1349727145127186435', 'et2H-nDQAAN04RIxYu38nOJEYy7QxLxQ', '哈', '1349727145127186432', '0'); -INSERT INTO `we_emple_code_tag` VALUES ('1349727145127186436', 'et2H-nDQAAu6X6vK7HwdAQLLfYEJ3Aww', '很熟悉', '1349727145127186432', '0'); -INSERT INTO `we_emple_code_tag` VALUES ('1361961254406721537', 'et2H-nDQAA3BIW0d9qKA8c7gSU_gGcDg', '高手', '1361961254406721536', '0'); -INSERT INTO `we_emple_code_tag` VALUES ('1361961254406721538', 'et2H-nDQAAaL59T3-GwGomqgEOX-osNg', '二', '1361961254406721536', '0'); -INSERT INTO `we_emple_code_tag` VALUES ('1361961254406721539', 'et2H-nDQAAfeEOwoIplFcAJyhutaJCVg', 'test', '1361961254406721536', '0'); -INSERT INTO `we_emple_code_tag` VALUES ('1362021107510677505', 'et2H-nDQAAWagEOi96PHb42IgGunTRpQ', '高手', '1362021107510677504', '0'); -INSERT INTO `we_emple_code_tag` VALUES ('1363428436030394369', 'et2H-nDQAA2fcc9i41FzYxxjKqOe-tKA', 'IT', '1363428436030394368', '0'); -INSERT INTO `we_emple_code_tag` VALUES ('1363428436030394370', 'et2H-nDQAAG-XqO7bljOH-02zVxhTW9w', '456', '1363428436030394368', '0'); -INSERT INTO `we_emple_code_tag` VALUES ('1363428436030394371', 'et2H-nDQAAKPXWgYdjpva4N40lgZm4yw', '4564564564', '1363428436030394368', '0'); -INSERT INTO `we_emple_code_tag` VALUES ('1363428436030394372', 'et2H-nDQAAOZNSSbFT5fGHbbXiN0rGhA', '456456456', '1363428436030394368', '0'); - -- ---------------------------- -- Table structure for we_emple_code_use_scop -- ---------------------------- @@ -24251,45 +24207,6 @@ CREATE TABLE `we_emple_code_use_scop` ( -- ---------------------------- -- Records of we_emple_code_use_scop -- ---------------------------- -INSERT INTO `we_emple_code_use_scop` VALUES ('1326456976808480768', '1326456976804286464', '2', null, '18158873850', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1333283446520418304', '1333283446512029696', '2', 'JDQ', '15665400628', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1333284454675910659', '1333284454675910656', '2', '徐学军', 'XuXueJun', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1333284454675910660', '1333284454675910656', '2', '孙喜旺', 'administrator', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1333284454675910661', '1333284454675910656', '2', 'JDQ', '15665400628', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1333307181692489729', '1333307181688295424', '2', 'JDQ', '15665400628', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1333307316556140548', '1333307316556140544', '2', 'JDQ', '15665400628', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1333307316556140549', '1333307316556140544', '2', '孙喜旺', 'administrator', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1333307316556140550', '1333307316556140544', '2', '徐学军', 'XuXueJun', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1333321986822246401', '1333321986788691968', '2', 'JDQ', '15665400628', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1339470240299487232', '1339470240295292928', '2', 'JDQ', '15665400628', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1339471190355480577', '1339471190355480576', '2', '江冬勤', '45DuXiangShangQingXie', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1347751705550393346', '1347751705542004736', '2', '郑伟', 'zhengjw10', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1347753507054292992', '1347753507050098688', '2', '徐学军', '45DuXiangShangQingXie', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1349722261107642369', '1349722261107642368', '2', 'JDQ', '15665400628', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1349722261107642370', '1349722261107642368', '2', '徐学军', '45DuXiangShangQingXie', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1349722261107642371', '1349722261107642368', '2', '董春林', 'DongChunLin', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1349722261107642372', '1349722261107642368', '2', '郑伟', 'zhengjw10', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1349722261107642373', '1349722261107642368', '2', '齐叶青', 'ZheMi', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1349722261111836672', '1349722261107642368', '2', '孙喜旺', 'DanMo', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1349723537274966017', '1349723537274966016', '2', '郑伟', 'zhengjw10', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1349724997391880193', '1349724997391880192', '2', '董健', 'DongDongQiang', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1349727145127186437', '1349727145127186432', '2', '徐学军', '45DuXiangShangQingXie', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1360045616645935104', '1360045616641740800', '2', '徐学军', '45DuXiangShangQingXie', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1361961254406721540', '1361961254406721536', '2', '董春林', 'DongChunLin', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1361961254406721541', '1361961254406721536', '2', '董健', 'DongDongQiang', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1361961254406721542', '1361961254406721536', '2', '黄梦怡', 'Meng', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1361961254406721543', '1361961254406721536', '2', '舒俊丽', 'XiaoSheYu', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1362021107510677506', '1362021107510677504', '2', '柯文', 'KeWen', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1362021107510677507', '1362021107510677504', '2', '徐学军', 'XuXueJun', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1362033099269083137', '1362033099269083136', '2', '徐学军', 'XuXueJun', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1362033099269083138', '1362033099269083136', '2', '郑伟', 'zhengjw10', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1362033099269083139', '1362033099269083136', '2', '阿三', 'asan', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1362033099269083140', '1362033099269083136', '2', 'aaaaa', 'aaaa', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1362033099269083141', '1362033099269083136', '2', 'www', 'wdd', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1363428436030394373', '1363428436030394368', '2', '徐学军', '45DuXiangShangQingXie', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1363428436030394374', '1363428436030394368', '2', '董春林', 'DongChunLin', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1363782299438682113', '1363782299438682112', '2', '舒俊丽', 'XiaoSheYu', '0', null); -INSERT INTO `we_emple_code_use_scop` VALUES ('1363782417915187201', '1363782417915187200', '2', '徐学军', '45DuXiangShangQingXie', '0', null); -- ---------------------------- -- Table structure for we_flower_customer_rel @@ -25985,35 +25902,29 @@ CREATE TABLE `we_pres_tag_group` ( `cus_begin_time` datetime(0) NULL DEFAULT NULL COMMENT '目标客户被添加起始时间', `cus_end_time` datetime(0) NULL DEFAULT NULL COMMENT '目标客户被添加结束时间', `welcome_msg` varchar(255) NOT NULL COMMENT '加群引导语', + `msgid` varchar(64) DEFAULT NULL COMMENT '企业群发消息的id', PRIMARY KEY (`task_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '老客户标签建群' ROW_FORMAT = Dynamic; -INSERT INTO `we_pres_tag_group` VALUES (1369113576379850754, 'test2', 0, 'admin', '2021-03-09 10:31:28', NULL, '2021-03-09 10:31:28', 1366313511814303744, 1, 0, '2021-03-10 00:00:00', '2021-03-26 00:00:00', '11111'); DROP TABLE IF EXISTS `we_pres_tag_group_scope`; CREATE TABLE `we_pres_tag_group_scope` ( `task_id` bigint(20) NOT NULL COMMENT '老客户标签建群任务id', - `we_user_id` varchar(64) NOT NULL COMMENT '员工id' + `we_user_id` varchar(64) NOT NULL COMMENT '员工id', + `is_done` smallint(1) NOT NULL DEFAULT '0' COMMENT '是否已处理' ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic COMMENT = '老客标签建群使用范围表'; -INSERT INTO `we_pres_tag_group_scope` VALUES (1369113576379850754, '45DuXiangShangQingXie'); - DROP TABLE IF EXISTS `we_pres_tag_group_tag`; CREATE TABLE `we_pres_tag_group_tag` ( `task_id` bigint(20) NOT NULL COMMENT '老客户标签建群任务id', `tag_id` varchar(64) NOT NULL COMMENT '标签id' ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic COMMENT = '老客标签建群标签关联表'; -INSERT INTO `we_pres_tag_group_tag` VALUES (1369113576379850754, 'et2H-nDQAA3BIW0d9qKA8c7gSU_gGcDg'); -INSERT INTO `we_pres_tag_group_tag` VALUES (1369113576379850754, 'et2H-nDQAAlUGX7YwAmuyygDAk72TfTg'); -INSERT INTO `we_pres_tag_group_tag` VALUES (1369113576379850754, 'et2H-nDQAAWagEOi96PHb42IgGunTRpQ'); DROP TABLE IF EXISTS `we_pres_tag_group_stat`; CREATE TABLE `we_pres_tag_group_stat` ( `task_id` bigint(20) NOT NULL COMMENT '老客标签建群任务id', - `external_userid` varchar(255) NOT NULL COMMENT '客户id', - `is_sent` tinyint(255) NOT NULL DEFAULT 1 COMMENT '是否已送达 0: 未送达 1:已送达', - `is_in_group` tinyint(255) NOT NULL COMMENT '是否已经在群 0:不在群 1:已在群' + `external_userid` varchar(255) NOT NULL COMMENT '客户id' ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic COMMENT = '老客标签建群客户统计表'; DROP TABLE IF EXISTS `we_keyword_group_kw`; @@ -26022,9 +25933,6 @@ CREATE TABLE `we_keyword_group_kw` ( `keyword` varchar(32) NOT NULL COMMENT '关键词' ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic COMMENT = '关键词拉群 关键词表'; -INSERT INTO `we_keyword_group_kw` VALUES (1369483460217491458, 'aaa'); -INSERT INTO `we_keyword_group_kw` VALUES (1369483460217491458, 'bbb'); -INSERT INTO `we_keyword_group_kw` VALUES (1369483460217491458, 'eee'); DROP TABLE IF EXISTS `we_keyword_group`; CREATE TABLE `we_keyword_group` ( @@ -26040,7 +25948,6 @@ CREATE TABLE `we_keyword_group` ( PRIMARY KEY (`task_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic COMMENT = '关键词拉群任务表'; -INSERT INTO `we_keyword_group` VALUES (1369483460217491458, 'test22', 1366658053960765440, 'welcome', 'admin', '2021-03-10 14:12:38', 'admin', '2021-03-10 14:12:38', ''); DROP TABLE IF EXISTS `we_group_sop`; CREATE TABLE `we_group_sop` ( @@ -26061,7 +25968,8 @@ CREATE TABLE `we_group_sop` ( DROP TABLE IF EXISTS `we_group_sop_chat`; CREATE TABLE `we_group_sop_chat` ( `rule_id` bigint(20) NOT NULL COMMENT 'SOP id', - `chat_id` varchar(32) NOT NULL COMMENT '群聊id' + `chat_id` varchar(32) NOT NULL COMMENT '群聊id', + `is_done` smallint(255) NOT NULL COMMENT '规则是否已发送0:未发送 1:已发送' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='SOP规则 - 群聊 关联表'; DROP TABLE IF EXISTS `we_group_sop_material`; @@ -26075,3 +25983,4 @@ CREATE TABLE `we_group_sop_pic` ( `rule_id` bigint(20) NOT NULL COMMENT '群SOP规则ID', `pic_url` varchar(150) NOT NULL COMMENT '图片URL' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic COMMENT = '群SOP规则图片'; +