diff --git a/README.md b/README.md index 188de53182663e827de441429dc0e084b1de8235..75d9079c220cfb7f5a03f43f5b7a8bb733d72004 100644 --- a/README.md +++ b/README.md @@ -8,16 +8,12 @@
-[![star](https://gitee.com/LinkWeChat/link-wechat/badge/star.svg?theme=gvp)](https://gitee.com/LinkWeChat/link-wechat/stargazers) -[![fork](https://gitee.com/LinkWeChat/link-wechat/badge/fork.svg?theme=gvp)](https://gitee.com/LinkWeChat/link-wechat/members) -[![license](http://img.shields.io/badge/license-GPL%203.0-green)](https://gitee.com/LinkWeChat/link-wechat/blob/master/LICENSE) +![GVP Stars](http://img.shields.io/badge/GPV%20Stars-700+-yellow) +![GVP Forks](http://img.shields.io/badge/GPV%20Forks-200+-yellow) +![license](http://img.shields.io/badge/license-GPL%203.0-green)
-

-

-

-

@@ -25,15 +21,6 @@ ![输入图片说明](https://images.gitee.com/uploads/images/2020/1231/233450_65d03349_1480777.png "LinkWeChat 企业微信私域流量营销专家-V1.0.4_00.png") ---- - - **如果您觉得我们的开源项目很有帮助,请帮忙点击右上方的 :star: Star ,您的认可就是我们最大的动力,谢谢支持!:heart:** - ---- - -[LinkWeChat 官方帮助文档——语雀](https://www.yuque.com/linkwechat/help) - - ### 平台简介 > LinkWeChat, Link to WeChat @@ -226,13 +213,13 @@ com.linkwechat #### 在线体验 -演示地址:http://demo.linkwechat.cn +演示地址:http://106.13.201.219/ -演示账号/密码:Wecome/123456 +演示账号/密码:test/123456 #### 开发进度 -![输入图片说明](https://images.gitee.com/uploads/images/2021/0315/205221_36f5b3f3_1480777.png "LinkWeChat 1.0.png") +![输入图片说明](https://images.gitee.com/uploads/images/2020/1231/233603_09dc4ac4_1480777.png "LinkWeChat 1.0.png") ### 联系作者加入群 @@ -321,4 +308,4 @@ LinkWeChat 开源版遵循 [GPL-3.0](https://gitee.com/LinkWeChat/link-wechat/bl --- - **如果您觉得我们的开源项目很有帮助,请帮忙点击右上方的 :star: Star ,您的认可就是我们最大的动力,谢谢支持!:heart:** \ No newline at end of file + **如果您觉得我们的开源项目很有帮助,请帮忙点击右上方的 :star: Star ,您的认可就是我们最大的动力,谢谢支持!:heart:** 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 7c1d3428b8210dfe02c41a6ae0225bacadb309c2..ed5e2a3fe8cb983fa02c0a3db9c9c53edd71a681 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 @@ -12,7 +12,7 @@ import com.linkwechat.framework.web.service.SysPermissionService; import com.linkwechat.framework.web.service.TokenService; import com.linkwechat.system.service.ISysMenuService; import com.linkwechat.wecom.client.WeAccessTokenClient; -import com.linkwechat.wecom.domain.WeCorpAccount; +import com.linkwechat.common.core.domain.entity.WeCorpAccount; import com.linkwechat.wecom.domain.dto.WeLoginUserInfoDto; import com.linkwechat.wecom.service.IWeCorpAccountService; import org.springframework.beans.factory.annotation.Autowired; @@ -52,9 +52,6 @@ public class SysLoginController @Autowired private WeAccessTokenClient weAccessTokenClient; -// @Autowired -// private IWeGroupCodeService weGroupCodeService; - /** * 登录方法 @@ -152,11 +149,24 @@ public class SysLoginController String token = loginService.noPwdLogin(loginInfo.getUser_info().getUserid()); ajax.put(Constants.TOKEN, token); - } - return ajax; + } + + /** + * 租户登录 + * @param corpId + * @param corpSecret + * @return + */ + @GetMapping("/tenantLogin") + public AjaxResult tenantLogin(String corpId,String corpSecret){ + AjaxResult ajax = AjaxResult.success(); + + + + 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..e911068eb3e2cbf61e03bb297d02ef9f41d08218 --- /dev/null +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeAppController.java @@ -0,0 +1,50 @@ +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() + ); + } + + + + @PostMapping("/addWeapp") + public AjaxResult addWeApp(@RequestBody WeApp weApp){ + + iWeAppService.addWeApp(weApp); + + return AjaxResult.success(); + } + + + + @PostMapping("/updateWeApp") + public AjaxResult updateWeApp(@RequestBody WeApp weApp){ + iWeAppService.updateWeApp(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..ea6c1e9410d62cdf68d9d6491a49ed39bdc75cb6 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,22 +57,34 @@ 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(); - } catch (Exception e) { - e.printStackTrace(); - if (e instanceof WeComException) { - return AjaxResult.error(e.getMessage()); - } else { - return AjaxResult.error("请求接口异常!"); - } - } - + return toAjax(weCommunityNewGroupService.add(communityNewGroupDto)); } + /** + * 单个下载 + * + * @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 +92,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 +128,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/WeCorpAccountController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCorpAccountController.java index 9d37d021be674d94d748b28226e10a23af45e07e..8925928e9e7496c15b3896574d11cdd3b07b6c07 100644 --- a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCorpAccountController.java +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCorpAccountController.java @@ -1,15 +1,13 @@ package com.linkwechat.web.controller.wecom; 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; import com.linkwechat.common.enums.BusinessType; -import com.linkwechat.wecom.domain.WeCorpAccount; +import com.linkwechat.common.core.domain.entity.WeCorpAccount; import com.linkwechat.wecom.service.IWeCorpAccountService; 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.*; diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCustomerController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCustomerController.java index 5781473f397b19d2b673cc0608c36b208c3d933f..a8e9729b15254526ac8139805dd5824b985b7bf3 100644 --- a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCustomerController.java +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCustomerController.java @@ -1,5 +1,6 @@ package com.linkwechat.web.controller.wecom; +import cn.hutool.core.collection.CollectionUtil; import com.linkwechat.common.annotation.Log; import com.linkwechat.common.constant.WeConstans; import com.linkwechat.common.core.controller.BaseController; @@ -18,6 +19,7 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.ArrayList; import java.util.List; /** @@ -151,4 +153,25 @@ public class WeCustomerController extends BaseController } + + + /** + * 查询企业微信客户列表(六感) + */ + // @PreAuthorize("@ss.hasPermi('customerManage:customer:list')") + @GetMapping("/listConcise") + public TableDataInfo listConcise(WeCustomer weCustomer) + { + startPage(); + + List list = weCustomerService.selectWeCustomerList(weCustomer); + if(CollectionUtil.isNotEmpty(list)){ + + list.stream().forEach(k->{ + k.setWeFlowerCustomerRels(new ArrayList<>()); + }); + } + return getDataTable(list); + } + } diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCustomerPortraitController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCustomerPortraitController.java index db12525712205d4ef34246794f72fae43236c694..eec508c443fd20124cdec9a4eb69927a0473dbc7 100644 --- a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCustomerPortraitController.java +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCustomerPortraitController.java @@ -153,11 +153,18 @@ public class WeCustomerPortraitController extends BaseController { @GetMapping(value = "/findTrajectory") public TableDataInfo findTrajectory(Integer trajectoryType){ startPage(); + LambdaQueryWrapper ne = new LambdaQueryWrapper() + .ne(WeCustomerTrajectory::getStatus, Constants.DELETE_CODE); + + if(trajectoryType != null){ + ne.eq(WeCustomerTrajectory::getTrajectoryType, trajectoryType); + } + + return getDataTable( - iWeCustomerTrajectoryService.list(new LambdaQueryWrapper() - .eq(WeCustomerTrajectory::getTrajectoryType,trajectoryType) - .ne(WeCustomerTrajectory::getStatus,Constants.DELETE_CODE)) + iWeCustomerTrajectoryService.list(ne) ); + } 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..cef8aa5885791353374b4b4eb5c123c862d85798 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 @@ -3,7 +3,7 @@ package com.linkwechat.web.controller.wecom; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import com.alibaba.fastjson.JSONObject; -import com.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; @@ -245,12 +245,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 +268,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/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/Constants.java b/linkwe-common/src/main/java/com/linkwechat/common/constant/Constants.java index ee3d6c95445a79a0174d96b065a31b67f7f40e9b..621e4667553ea7d55efc6d66263a2c857c6a6d0f 100644 --- a/linkwe-common/src/main/java/com/linkwechat/common/constant/Constants.java +++ b/linkwe-common/src/main/java/com/linkwechat/common/constant/Constants.java @@ -151,10 +151,16 @@ public class Constants public static final String USER_TYPE_WECOME="11"; + /** 企业管理 */ + public static final String USER_TYOE_CORP_ADMIN="22"; + + /** 企业微信用户系统中默认用户 */ public static final String DEFAULT_WECOME_ROLE_KEY="WeCome"; + /** 企业微信用户系统中默认用户 */ + public static final String DEFAULT_WECOME_CORP_ADMIN="CROP_ADMIN_ROLE"; /**完成待办*/ public static final String HANDLE_SUCCESS="1"; 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/core/domain/entity/SysUser.java b/linkwe-common/src/main/java/com/linkwechat/common/core/domain/entity/SysUser.java index b67cfce9a6616f66d7274a2bdc4749f68afa89de..b0dd5cc35734c977b265f306191958a2a711562e 100644 --- a/linkwe-common/src/main/java/com/linkwechat/common/core/domain/entity/SysUser.java +++ b/linkwe-common/src/main/java/com/linkwechat/common/core/domain/entity/SysUser.java @@ -105,6 +105,9 @@ public class SysUser extends BaseEntity /** 是否具有有效得cropId */ private boolean validCropId=false; + + private WeCorpAccount weCorpAccount; + public SysUser() { diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCorpAccount.java b/linkwe-common/src/main/java/com/linkwechat/common/core/domain/entity/WeCorpAccount.java similarity index 94% rename from linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCorpAccount.java rename to linkwe-common/src/main/java/com/linkwechat/common/core/domain/entity/WeCorpAccount.java index dbc65083227a097f9935751304298127f22c889b..58e077c3739d19abe97684c7b69ca08f77269959 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCorpAccount.java +++ b/linkwe-common/src/main/java/com/linkwechat/common/core/domain/entity/WeCorpAccount.java @@ -1,4 +1,4 @@ -package com.linkwechat.wecom.domain; +package com.linkwechat.common.core.domain.entity; import com.linkwechat.common.core.domain.BaseEntity; import com.linkwechat.common.utils.SnowFlakeUtil; @@ -76,4 +76,8 @@ public class WeCorpAccount extends BaseEntity @ApiModelProperty("客户流失通知开关 0:关闭 1:开启") private String customerChurnNoticeSwitch = new String("0"); + + + @ApiModelProperty("企业管理员账号") + private String cropAccount; } 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 f339d9aa3e5717e78aaa8167c6eaaf0472e70278..42448b76ffe24274fc99e253ec5f15d221f20ea9 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,9 +121,16 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { .antMatchers("/wecom/ticket/**").anonymous() .antMatchers("/wecom/user/getUserInfo").anonymous() - // .antMatchers("/common/uploadFile2Cos").anonymous() - .antMatchers("/wecom/material/temporaryMaterialMediaId").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() + // 除上面外的所有请求全部需要鉴权认证 .anyRequest().authenticated() .and() diff --git a/linkwe-framework/src/main/java/com/linkwechat/framework/web/service/UserDetailsServiceImpl.java b/linkwe-framework/src/main/java/com/linkwechat/framework/web/service/UserDetailsServiceImpl.java index 424a3fcc9384760c304cbcb59fd601d855f66887..95bc8d7ee83eb0f1acaa292e40f2224957d25167 100644 --- a/linkwe-framework/src/main/java/com/linkwechat/framework/web/service/UserDetailsServiceImpl.java +++ b/linkwe-framework/src/main/java/com/linkwechat/framework/web/service/UserDetailsServiceImpl.java @@ -12,7 +12,8 @@ import com.linkwechat.common.utils.SecurityUtils; import com.linkwechat.common.utils.StringUtils; import com.linkwechat.system.mapper.SysRoleMapper; import com.linkwechat.system.service.ISysUserService; -import com.linkwechat.wecom.domain.WeUser; +import com.linkwechat.common.core.domain.entity.WeCorpAccount; +import com.linkwechat.wecom.service.IWeCorpAccountService; import com.linkwechat.wecom.service.IWeUserService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -51,35 +52,57 @@ public class UserDetailsServiceImpl implements UserDetailsService private SysRoleMapper roleMapper; + @Autowired + private IWeCorpAccountService iWeCorpAccountService; + + @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { SysUser user = userService.selectUserByUserName(username); if (StringUtils.isNull(user)) { - //we_user表中去查询,如果该表为空则提示用户不存在,如果不为空,则将用户记录注册到系统用户表中 - WeUser weUser - = iWeUserService.getById(username); - if(null == weUser){ - log.info("登录用户:{} 不存在.", username); - throw new UsernameNotFoundException("登录用户:" + username + " 不存在"); - } - - //注册到we_user表中 - user=SysUser.builder() - .userName(weUser.getUserId()) - .nickName(weUser.getName()) - .userType(Constants.USER_TYPE_WECOME) - .email(weUser.getEmail()) - .phonenumber(weUser.getMobile()) - .sex(weUser.getGender() ==0 ? "1": weUser.getGender() .toString()) - .avatar(weUser.getAvatarMediaid()) - .roleIds(ArrayUtil.toArray(roleMapper.selectRoleList(SysRole.builder() - .roleKey(Constants.DEFAULT_WECOME_ROLE_KEY) - .build()).stream().map(SysRole::getRoleId).collect(Collectors.toList()), Long.class)) - .password(SecurityUtils.encryptPassword(ruoYiConfig.getWeUserDefaultPwd())) - .build(); - +// //企业管理登录 +// //查询企业管理相关账号 +// WeCorpAccount weCorpByAccount = iWeCorpAccountService.findWeCorpByAccount(username); +// if(null != weCorpByAccount){ +// //注册到we_user表中 +// user=SysUser.builder() +// .userName(weCorpByAccount.getCropAccount()) +// .nickName(weCorpByAccount.getCompanyName()) +// .userType(Constants.USER_TYOE_CORP_ADMIN) +// .roleIds(ArrayUtil.toArray(roleMapper.selectRoleList(SysRole.builder() +// .roleKey(Constants.DEFAULT_WECOME_CORP_ADMIN) +// .build()).stream().map(SysRole::getRoleId).collect(Collectors.toList()), Long.class)) +// .password(SecurityUtils.encryptPassword(ruoYiConfig.getWeUserDefaultPwd())) +// .build(); +// } + +// else{ +// +// //we_user表中去查询,如果该表为空则提示用户不存在,如果不为空,则将用户记录注册到系统用户表中 +// WeUser weUser +// = iWeUserService.getById(username); +// if(null == weUser){ +// log.info("登录用户:{} 不存在.", username); +// throw new UsernameNotFoundException("登录用户:" + username + " 不存在"); +// } +// +// //注册到we_user表中 +// user=SysUser.builder() +// .userName(weUser.getUserId()) +// .nickName(weUser.getName()) +// .userType(Constants.USER_TYPE_WECOME) +// .email(weUser.getEmail()) +// .phonenumber(weUser.getMobile()) +// .sex(weUser.getGender() ==0 ? "1": weUser.getGender() .toString()) +// .avatar(weUser.getAvatarMediaid()) +// .roleIds(ArrayUtil.toArray(roleMapper.selectRoleList(SysRole.builder() +// .roleKey(Constants.DEFAULT_WECOME_ROLE_KEY) +// .build()).stream().map(SysRole::getRoleId).collect(Collectors.toList()), Long.class)) +// .password(SecurityUtils.encryptPassword(ruoYiConfig.getWeUserDefaultPwd())) +// .build(); +// } userService.insertUser( user ); @@ -95,6 +118,13 @@ public class UserDetailsServiceImpl implements UserDetailsService throw new BaseException("对不起,您的账号:" + username + " 已停用"); } + //当前登录用户为企业管理,设置corpId和密钥相关 +// if(user.getUserType().equals(Constants.USER_TYOE_CORP_ADMIN)){ +// user.setWeCorpAccount( +// iWeCorpAccountService.findWeCorpByAccount(username) +// ); +// } + return createLoginUser(user); } diff --git a/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/PageHomeDataTask.java b/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/PageHomeDataTask.java index 9b6ff39cb4343f3a0b0e2fc864068c64b0316dc3..8f8366cf738ce76cb74bb636f64fe18848be9913 100644 --- a/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/PageHomeDataTask.java +++ b/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/PageHomeDataTask.java @@ -95,14 +95,36 @@ public class PageHomeDataTask { String today = DateUtil.today(); String yesterday = DateUtil.yesterday().toDateStr(); //客户统计 - WePageCountDto newTime = weUserBehaviorDataService.getCountDataByDay(today,"day"); + WePageCountDto nowData = weUserBehaviorDataService.getCountDataByDay(today,"day"); + //客户群统计 + WePageCountDto nowTimeGroupChatData = weGroupStatisticService.getCountDataByDay(today, "day"); + if(nowTimeGroupChatData != null){ + nowData.setChatCnt(nowTimeGroupChatData.getChatCnt()); + nowData.setChatTotal(nowTimeGroupChatData.getChatTotal()); + nowData.setChatHasMsg(nowTimeGroupChatData.getChatHasMsg()); + nowData.setNewChatCnt(nowTimeGroupChatData.getNewChatCnt()); + nowData.setNewMemberCnt(nowTimeGroupChatData.getNewMemberCnt()); + nowData.setMemberTotal(nowTimeGroupChatData.getMemberTotal()); + nowData.setMsgTotal(nowTimeGroupChatData.getMsgTotal()); + } /** * 昨日 */ //客户统计 WePageCountDto lastTime = weUserBehaviorDataService.getCountDataByDay(yesterday,"day"); - - WePageStaticDataDto.PageStaticData pageStaticData = setPageStaticData(newTime, lastTime); + //客户群统计 + WePageCountDto lastGroupChatTime = weGroupStatisticService.getCountDataByDay(yesterday,"day"); + if(lastGroupChatTime != null){ + lastTime.setChatCnt(lastGroupChatTime.getChatCnt()); + lastTime.setChatTotal(lastGroupChatTime.getChatTotal()); + lastTime.setChatHasMsg(lastGroupChatTime.getChatHasMsg()); + lastTime.setNewChatCnt(lastGroupChatTime.getNewChatCnt()); + lastTime.setNewMemberCnt(lastGroupChatTime.getNewMemberCnt()); + lastTime.setMemberTotal(lastGroupChatTime.getMemberTotal()); + lastTime.setMsgTotal(lastGroupChatTime.getMsgTotal()); + } + + WePageStaticDataDto.PageStaticData pageStaticData = setPageStaticData(nowData, lastTime); WePageStateQuery wePageStateQuery = new WePageStateQuery(); //获取15天前的时间 @@ -110,6 +132,21 @@ public class PageHomeDataTask { wePageStateQuery.setEndTime(today); wePageStateQuery.setFew(14); List dayCountData = weUserBehaviorDataService.getDayCountData(wePageStateQuery); + List dayGroupChatCountData = weGroupStatisticService.getDayCountData(wePageStateQuery); + for (WePageCountDto dayData : dayCountData) { + for (WePageCountDto dayGroupChatData : dayGroupChatCountData) { + if (dayData.getXTime().equals(dayGroupChatData.getXTime())){ + dayData.setChatCnt(dayGroupChatData.getChatCnt()); + dayData.setChatTotal(dayGroupChatData.getChatTotal()); + dayData.setChatHasMsg(dayGroupChatData.getChatHasMsg()); + dayData.setNewChatCnt(dayGroupChatData.getNewChatCnt()); + dayData.setNewMemberCnt(dayGroupChatData.getNewMemberCnt()); + dayData.setMemberTotal(dayGroupChatData.getMemberTotal()); + dayData.setMsgTotal(dayGroupChatData.getMsgTotal()); + break; + } + } + } pageStaticData.setDataList(dayCountData); return pageStaticData; @@ -121,17 +158,51 @@ public class PageHomeDataTask { */ //客户统计 WePageCountDto newTime = weUserBehaviorDataService.getCountDataByDay(DateUtil.today(),"week"); + WePageCountDto nowTimeGroupChatData = weGroupStatisticService.getCountDataByDay(DateUtil.today(),"week"); + if(nowTimeGroupChatData != null){ + newTime.setChatCnt(nowTimeGroupChatData.getChatCnt()); + newTime.setChatTotal(nowTimeGroupChatData.getChatTotal()); + newTime.setChatHasMsg(nowTimeGroupChatData.getChatHasMsg()); + newTime.setNewChatCnt(nowTimeGroupChatData.getNewChatCnt()); + newTime.setNewMemberCnt(nowTimeGroupChatData.getNewMemberCnt()); + newTime.setMemberTotal(nowTimeGroupChatData.getMemberTotal()); + newTime.setMsgTotal(nowTimeGroupChatData.getMsgTotal()); + } /** * 上周 */ //客户统计 WePageCountDto lastTime = weUserBehaviorDataService.getCountDataByDay(DateUtil.lastWeek().toDateStr(),"week"); - + WePageCountDto lastTimeGroupChatData = weGroupStatisticService.getCountDataByDay(DateUtil.lastWeek().toDateStr(),"week"); + if(lastTimeGroupChatData != null){ + lastTime.setChatCnt(lastTimeGroupChatData.getChatCnt()); + lastTime.setChatTotal(lastTimeGroupChatData.getChatTotal()); + lastTime.setChatHasMsg(lastTimeGroupChatData.getChatHasMsg()); + lastTime.setNewChatCnt(lastTimeGroupChatData.getNewChatCnt()); + lastTime.setNewMemberCnt(lastTimeGroupChatData.getNewMemberCnt()); + lastTime.setMemberTotal(lastTimeGroupChatData.getMemberTotal()); + lastTime.setMsgTotal(lastTimeGroupChatData.getMsgTotal()); + } WePageStaticDataDto.PageStaticData pageStaticData = setPageStaticData(newTime, lastTime); WePageStateQuery wePageStateQuery = new WePageStateQuery(); wePageStateQuery.setFew(5); List weekCountData = weUserBehaviorDataService.getWeekCountData(wePageStateQuery); + List weekGroupChatCountData = weGroupStatisticService.getWeekCountData(wePageStateQuery); + for (WePageCountDto weekData : weekCountData) { + for (WePageCountDto weekGroupChatData : weekGroupChatCountData) { + if (weekData.getXTime().equals(weekGroupChatData.getXTime())){ + weekData.setChatCnt(weekGroupChatData.getChatCnt()); + weekData.setChatTotal(weekGroupChatData.getChatTotal()); + weekData.setChatHasMsg(weekGroupChatData.getChatHasMsg()); + weekData.setNewChatCnt(weekGroupChatData.getNewChatCnt()); + weekData.setNewMemberCnt(weekGroupChatData.getNewMemberCnt()); + weekData.setMemberTotal(weekGroupChatData.getMemberTotal()); + weekData.setMsgTotal(weekGroupChatData.getMsgTotal()); + break; + } + } + } pageStaticData.setDataList(weekCountData); return pageStaticData; @@ -139,21 +210,55 @@ public class PageHomeDataTask { private WePageStaticDataDto.PageStaticData getMonthData(){ /** - * 本周 + * 本月 */ //客户统计 WePageCountDto newTime = weUserBehaviorDataService.getCountDataByDay(DateUtil.today(),"month"); + WePageCountDto nowTimeGroupChatData = weGroupStatisticService.getCountDataByDay(DateUtil.today(),"month"); + if(nowTimeGroupChatData != null){ + newTime.setChatCnt(nowTimeGroupChatData.getChatCnt()); + newTime.setChatTotal(nowTimeGroupChatData.getChatTotal()); + newTime.setChatHasMsg(nowTimeGroupChatData.getChatHasMsg()); + newTime.setNewChatCnt(nowTimeGroupChatData.getNewChatCnt()); + newTime.setNewMemberCnt(nowTimeGroupChatData.getNewMemberCnt()); + newTime.setMemberTotal(nowTimeGroupChatData.getMemberTotal()); + newTime.setMsgTotal(nowTimeGroupChatData.getMsgTotal()); + } /** - * 上周 + * 上月 */ //客户统计 WePageCountDto lastTime = weUserBehaviorDataService.getCountDataByDay(DateUtil.lastMonth().toDateStr(),"month"); - + WePageCountDto lastTimeGroupChatData = weGroupStatisticService.getCountDataByDay(DateUtil.lastMonth().toDateStr(),"month"); + if(lastTimeGroupChatData != null){ + lastTime.setChatCnt(lastTimeGroupChatData.getChatCnt()); + lastTime.setChatTotal(lastTimeGroupChatData.getChatTotal()); + lastTime.setChatHasMsg(lastTimeGroupChatData.getChatHasMsg()); + lastTime.setNewChatCnt(lastTimeGroupChatData.getNewChatCnt()); + lastTime.setNewMemberCnt(lastTimeGroupChatData.getNewMemberCnt()); + lastTime.setMemberTotal(lastTimeGroupChatData.getMemberTotal()); + lastTime.setMsgTotal(lastTimeGroupChatData.getMsgTotal()); + } WePageStaticDataDto.PageStaticData pageStaticData = setPageStaticData(newTime, lastTime); WePageStateQuery wePageStateQuery = new WePageStateQuery(); wePageStateQuery.setFew(5); List monthCountData = weUserBehaviorDataService.getMonthCountData(wePageStateQuery); + List monthGroupChatCountData = weGroupStatisticService.getMonthCountData(wePageStateQuery); + for (WePageCountDto monthData : monthCountData) { + for (WePageCountDto monthGroupChatData : monthGroupChatCountData) { + if (monthData.getXTime().equals(monthGroupChatData.getXTime())){ + monthData.setChatCnt(monthGroupChatData.getChatCnt()); + monthData.setChatTotal(monthGroupChatData.getChatTotal()); + monthData.setChatHasMsg(monthGroupChatData.getChatHasMsg()); + monthData.setNewChatCnt(monthGroupChatData.getNewChatCnt()); + monthData.setNewMemberCnt(monthGroupChatData.getNewMemberCnt()); + monthData.setMemberTotal(monthGroupChatData.getMemberTotal()); + monthData.setMsgTotal(monthGroupChatData.getMsgTotal()); + break; + } + } + } pageStaticData.setDataList(monthCountData); return pageStaticData; @@ -169,6 +274,8 @@ public class PageHomeDataTask { pageStaticData.setNegativeFeedbackCntDiff(nowTime.getNegativeFeedbackCnt() - lastTime.getNegativeFeedbackCnt()); pageStaticData.setNewContactCnt(nowTime.getNewContactCnt()); pageStaticData.setNewContactCntDiff(nowTime.getNewContactCnt() - lastTime.getNewContactCnt()); + pageStaticData.setNewMemberCnt(nowTime.getNewMemberCnt()); + pageStaticData.setNewMemberCntDiff(nowTime.getNewMemberCnt() - lastTime.getNewMemberCnt()); return pageStaticData; } 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..6c5ff540ea212d832c4687ba352ffec461331616 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 { /** @@ -25,7 +28,7 @@ public interface WeAppClient { * @return */ @Request(url = "/agent/get") - WeAppDetailDto findAgentById(@Query("agentid") Integer agentid); + WeAppDetailDto findAgentById(@Query("agentid") String agentid); /** * 设置应用 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..08cc95821945129dca48118d4c298f20842a2dc0 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; @@ -8,6 +9,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.util.Date; +import java.util.List; /** * @description: 自建应用相关 @@ -34,7 +36,7 @@ public class WeApp { private String agentSecret; - /**应用类型(1:自建应用;)**/ + /**应用类型(1:自建应用;2:小程序)**/ private Integer appType; @@ -52,8 +54,28 @@ public class WeApp { private String status; + /**可见范围部门id,使用逗号隔开**/ + private String allowPartys; + /**可见范围人员id,使用逗号隔开**/ + private String allowUserinfos; + + + /**应用名称**/ + private String agentName; + + + /**企业应用描述**/ + private String description; + + + /**应用头像**/ + private String squareLogoUrl; + + + @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/WeCustomerTrajectory.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerTrajectory.java index 2b601c25330d38ab560cb0ecae3d82ef7c1bb78b..db82ae47084a7f1c7277108a957bf787dc4f5022 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerTrajectory.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerTrajectory.java @@ -29,8 +29,13 @@ public class WeCustomerTrajectory { private String content; //处理日期 private Date createDate; - //处理时间 - private Time createTime; + + //处理开始时间 + private Time startTime; + + //处理结束时间 + private Time endTime; + //0:正常;1:删除;2:完成 private String status; } 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/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/WeAppDetailDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDetailDto.java index 74cba1c617e1ec0b93df70fc002716bfa45d5c55..93d3811bf054ad76aebc495d966486558ef278cc 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDetailDto.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDetailDto.java @@ -1,15 +1,21 @@ package com.linkwechat.wecom.domain.dto; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; /** * 企业应用详情接口 */ @Data +@Builder +@AllArgsConstructor +@NoArgsConstructor public class WeAppDetailDto extends WeResultDto{ //企业应用id - private Long agentid; + private String agentid; //企业应用名称 private String name; //企业应用方形头像 @@ -28,4 +34,33 @@ public class WeAppDetailDto extends WeResultDto{ private String home_url; //企业应用头像的mediaid,通过素材管理接口上传图片获得mediaid,上传后会自动裁剪成方形和圆形两个头像 private String logo_mediaid; + + //企业应用可见范围(人员) + private AllowUserinfos allow_userinfos; + + //企业应用可见范围(部门) + private AllowPartys allow_partys; + + + + //可见部门 + @Data + public class AllowPartys{ + private String[] partyid; + + } + + + @Data + public class AllowUserinfos{ + private user[] user; + } + + @Data + public class user{ + private String userid; + } + + + } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDto.java index 997539299704c531c67dd37551a1fe7ebfb2dd1e..9bc811f2cae005c4b56e3a9f0790c8b15db28215 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDto.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDto.java @@ -15,11 +15,19 @@ public class WeAppDto extends WeResultDto{ @Data public class Agent{ //企业应用id - private Long agentid; + private String agentid; //企业应用名称 private String name; //企业应用方形头像url private String square_logo_url; + + + + + } + + + } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeCommunityNewGroupDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeCommunityNewGroupDto.java index 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/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..d3637698e745b40053e577c09b81fff292a47f52 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; @@ -113,7 +112,7 @@ public class WeCallBackAddExternalContactImpl extends WeEventStrategy { try { 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(); //查询活码对应标签 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/customer/WeCallBackDelFollowUserImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallBackDelFollowUserImpl.java index 5e8f310d0d0c79189889475164eb485743974843..18cd8da68de9f3462619e4000ba706fd9291e7f7 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallBackDelFollowUserImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallBackDelFollowUserImpl.java @@ -2,6 +2,7 @@ package com.linkwechat.wecom.factory.impl.customer; import com.alibaba.fastjson.JSONObject; import com.linkwechat.common.constant.WeConstans; +import com.linkwechat.common.core.domain.entity.WeCorpAccount; import com.linkwechat.common.enums.MessageType; import com.linkwechat.wecom.client.WeMessagePushClient; import com.linkwechat.wecom.domain.*; 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 a75e15fe0f7d34c5393eca52b1591987caf4c4a3..8afe85a2493d3539c1339bd381e1a7b8c954dedc 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 @@ -40,12 +40,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"); @@ -53,9 +47,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=""; @@ -77,8 +68,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..d373f71d1544c3dcd71f471ae87c736ef7d92015 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/interceptor/WeiXinAuthInterceptor.java @@ -0,0 +1,99 @@ +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 + String accessToken =redisCache.getCacheObject(WeConstans.WX_AUTH_ACCESS_TOKEN+":"+ openId); + if (StringUtils.isEmpty(accessToken)){ + //当用户token失效,则获取refreshToken + String refreshToken = redisCache.getCacheObject(WeConstans.WX_AUTH_REFRESH_ACCESS_TOKEN + ":" + openId); + if(StringUtils.isEmpty(refreshToken)){ + throw new WeComException(1001,"token失效,请重新授权"); + }else { + WxTokenDto wxTokenDto = wxAuthClient.refreshToken(appId, secret, grantType, refreshToken); + if(wxTokenDto != null && StringUtils.isNotEmpty(wxTokenDto.getAccessToken())){ + redisCache.setCacheObject(WeConstans.WX_AUTH_ACCESS_TOKEN+":"+ openId, 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/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/WeCorpAccountMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeCorpAccountMapper.java index 905273fe1b5fc13696136378daf0d7ac420ecfd0..bdfd8087f7cf0def78a4af6aef3d555b7ca1449c 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeCorpAccountMapper.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeCorpAccountMapper.java @@ -1,7 +1,7 @@ package com.linkwechat.wecom.mapper; import java.util.List; -import com.linkwechat.wecom.domain.WeCorpAccount; +import com.linkwechat.common.core.domain.entity.WeCorpAccount; import org.apache.ibatis.annotations.Param; /** @@ -59,4 +59,12 @@ public interface WeCorpAccountMapper * @return */ public int startVailWeCorpAccount(@Param("corpId") String corpId); + + + /** + * 根据企业账号获取企业相关配置 + * @param corpAccount + * @return + */ + WeCorpAccount findWeCorpByAccount(@Param("corpAccount") String corpAccount); } 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/WeGroupStatisticMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupStatisticMapper.java index 145b166de83081bb4f6be57f59f1657109f2cfe0..d318a29d4e4c7c31b0089db2fca25e023f2b3631 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupStatisticMapper.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupStatisticMapper.java @@ -2,6 +2,11 @@ package com.linkwechat.wecom.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.linkwechat.wecom.domain.WeGroupStatistic; +import com.linkwechat.wecom.domain.dto.WePageCountDto; +import com.linkwechat.wecom.domain.query.WePageStateQuery; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 群聊数据统计数据 @@ -11,5 +16,29 @@ Mapper接口 * @date 2021-02-24 */ public interface WeGroupStatisticMapper extends BaseMapper { + /** + * 按日期查询当天数据统计结果 + * @param dateTime + * @return WeUserBehaviorDataDto + */ + public WePageCountDto getCountDataByDay(@Param("dateTime") String dateTime, @Param("type") String type); + /** + * 按天维度查询数据统计 + * @param wePageStateQuery 入参 + * @return List + */ + public List getDayCountData(WePageStateQuery wePageStateQuery); + /** + * 按周维度查询数据统计 + * @param wePageStateQuery 入参 + * @return List + */ + public List getWeekCountData(WePageStateQuery wePageStateQuery); + /** + * 按月维度查询数据统计 + * @param wePageStateQuery 入参 + * @return List + */ + public List getMonthCountData(WePageStateQuery wePageStateQuery); } 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/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/IWeAppService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeAppService.java index 3a7ac87f5f0714c23f64c86f7cccdc3120cac1da..ff1c9d6665b38de77b5876359bc6cf9361b63371 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeAppService.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeAppService.java @@ -9,4 +9,10 @@ import com.linkwechat.wecom.domain.WeApp; * @create: 2021-01-26 18:44 **/ public interface IWeAppService extends IService { + + + void addWeApp(WeApp weApp); + + + void updateWeApp(WeApp weApp); } 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/IWeCorpAccountService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCorpAccountService.java index 2e5182722c2ec252e55bcb0bc887ac4ee2e0bc00..75374cfc744346178183e025793e741a33e9323f 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCorpAccountService.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCorpAccountService.java @@ -1,8 +1,8 @@ package com.linkwechat.wecom.service; +import com.linkwechat.common.core.domain.entity.WeCorpAccount; + import java.util.List; -import com.linkwechat.wecom.domain.WeCorpAccount; -import org.apache.ibatis.annotations.Param; /** * 企业id相关配置Service接口 @@ -71,4 +71,7 @@ public interface IWeCorpAccountService * 客户流失通知开关查询 */ public String getCustomerChurnNoticeSwitch(); + + + WeCorpAccount findWeCorpByAccount(String corpAccount); } 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/IWeGroupStatisticService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupStatisticService.java index 8c2b56c3fc561a7787ca774c711ce7396828e9d6..13f80f8deeedb27bdad0d373ba46982ef538fad3 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupStatisticService.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupStatisticService.java @@ -2,6 +2,8 @@ package com.linkwechat.wecom.service; import com.baomidou.mybatisplus.extension.service.IService; import com.linkwechat.wecom.domain.WeGroupStatistic; +import com.linkwechat.wecom.domain.dto.WePageCountDto; +import com.linkwechat.wecom.domain.query.WePageStateQuery; import java.util.List; @@ -18,4 +20,31 @@ public interface IWeGroupStatisticService extends IService { * 查询列表 */ List queryList(WeGroupStatistic weGroupStatistic); + + /** + * 按日期查询当天数据统计结果 + * @param dateTime + * @return WeUserBehaviorDataDto + */ + WePageCountDto getCountDataByDay(String dateTime, String type); + + /** + * 按天维度查询数据统计 + * @param wePageStateQuery 入参 + * @return List + */ + List getDayCountData(WePageStateQuery wePageStateQuery); + /** + * 按周维度查询数据统计 + * @param wePageStateQuery 入参 + * @return List + */ + List getWeekCountData(WePageStateQuery wePageStateQuery); + + /** + * 按月维度查询数据统计 + * @param wePageStateQuery 入参 + * @return List + */ + List getMonthCountData(WePageStateQuery wePageStateQuery); } 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/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/WeAccessTokenServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeAccessTokenServiceImpl.java index c462dded92e29482cfac619a422da6b6d30c443c..5ea459b1cbc3c4cc637980c35670ec4940624319 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeAccessTokenServiceImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeAccessTokenServiceImpl.java @@ -8,7 +8,7 @@ import com.linkwechat.common.exception.wecom.WeComException; import com.linkwechat.common.utils.StringUtils; import com.linkwechat.wecom.client.WeAccessTokenClient; import com.linkwechat.wecom.domain.WeApp; -import com.linkwechat.wecom.domain.WeCorpAccount; +import com.linkwechat.common.core.domain.entity.WeCorpAccount; import com.linkwechat.wecom.domain.dto.WeAccessTokenDtoDto; import com.linkwechat.wecom.service.IWeAccessTokenService; import com.linkwechat.wecom.service.IWeAppService; diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeAppServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeAppServiceImpl.java index b6dbef78aa7cc6151c0a8ef942287d1d4258204a..80fd45115bc19b987e140cf91e58f4ab0f2f74c5 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeAppServiceImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeAppServiceImpl.java @@ -1,10 +1,27 @@ package com.linkwechat.wecom.service.impl; +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.linkwechat.common.constant.Constants; +import com.linkwechat.common.exception.wecom.WeComException; +import com.linkwechat.wecom.client.WeAppClient; import com.linkwechat.wecom.domain.WeApp; +import com.linkwechat.wecom.domain.WeDepartment; +import com.linkwechat.wecom.domain.dto.WeAppDetailDto; +import com.linkwechat.wecom.domain.dto.WeAppDto; import com.linkwechat.wecom.mapper.WeAppMapper; import com.linkwechat.wecom.service.IWeAppService; +import com.linkwechat.wecom.service.IWeDepartmentService; +import com.linkwechat.wecom.service.IWeUserService; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; /** * @description: @@ -13,4 +30,65 @@ import org.springframework.stereotype.Service; **/ @Service public class WeAppServiceImpl extends ServiceImpl implements IWeAppService { + + @Autowired + WeAppClient weAppClient; + + + @Autowired + IWeDepartmentService iWeDepartmentService; + + + @Autowired + IWeUserService iWeUserService; + + + /** + * 保存应用 + * @param weApp + */ + @Override + @Transactional + public void addWeApp(WeApp weApp) { + + if(null !=this.getOne(new LambdaQueryWrapper() + .eq(WeApp::getAgentId, weApp.getAgentId()) + .eq(WeApp::getDelFlag, Constants.SUCCESS))){ + throw new WeComException("AgentId已经存在"); + } + + + + WeAppDetailDto weAppDetailDto + = weAppClient.findAgentById(weApp.getAgentId()); + if(null != weAppDetailDto){ + weApp.setAgentName(weAppDetailDto.getName()); + weApp.setCreateTime(new Date()); + weApp.setSquareLogoUrl(weAppDetailDto.getSquare_logo_url()); + weApp.setDescription(weAppDetailDto.getDescription()); + weApp.setAllowPartys(StringUtils.join(weAppDetailDto.getAllow_partys().getPartyid(),",")); + weApp.setAllowUserinfos(StringUtils.join(weAppDetailDto.getAllow_userinfos().getUser(),",")); + this.save(weApp); + } + + } + + + + @Override + @Transactional + public void updateWeApp(WeApp weApp) { + if(this.updateById(weApp)){ + weAppClient.updateAgentById( + WeAppDetailDto.builder() + .agentid(weApp.getAgentId()) + .logo_mediaid(weApp.getLogoMediaid()) + .description(weApp.getDescription()) + .name(weApp.getAgentName()) + .build() + ); + } + + + } } 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/WeCorpAccountServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCorpAccountServiceImpl.java index 18d3f4d0213bea06f67b2fe8b70d10b788d0e93a..7a2135e5a3cab3dfd04d1cc5572730df1fac8c4c 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCorpAccountServiceImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCorpAccountServiceImpl.java @@ -5,14 +5,12 @@ import java.util.Optional; import com.linkwechat.common.constant.Constants; import com.linkwechat.common.constant.WeConstans; -import com.linkwechat.common.utils.DateUtils; import com.linkwechat.wecom.service.IWeAccessTokenService; import com.linkwechat.wecom.service.IWeCorpAccountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.linkwechat.wecom.mapper.WeCorpAccountMapper; -import com.linkwechat.wecom.domain.WeCorpAccount; -import org.springframework.transaction.annotation.Transactional; +import com.linkwechat.common.core.domain.entity.WeCorpAccount; /** * 企业id相关配置Service业务层处理 @@ -136,5 +134,10 @@ public class WeCorpAccountServiceImpl implements IWeCorpAccountService { return noticeSwitch; } + @Override + public WeCorpAccount findWeCorpByAccount(String corpAccount) { + return weCorpAccountMapper.findWeCorpByAccount(corpAccount); + } + } 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..6436142b0e3227df1505cbd8f5e11524931b9a66 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) { - throw new WeComException("发送时间不能小于当前时间"); +// if ((null != customerMessagePushDto.getSettingTime() && !"".equals(customerMessagePushDto.getSettingTime())) +// && 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()); diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeEmpleCodeServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeEmpleCodeServiceImpl.java index ce146e59dfd9d04294ac83239dee1cfb2d33279b..ff4601d81a1d2b279972f9019bc6bcad0a45b3d9 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeEmpleCodeServiceImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeEmpleCodeServiceImpl.java @@ -2,9 +2,11 @@ package com.linkwechat.wecom.service.impl; import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.SecurityUtils; import com.linkwechat.common.utils.SnowFlakeUtil; import com.linkwechat.common.utils.StringUtils; @@ -16,6 +18,8 @@ import com.linkwechat.wecom.domain.WeMaterial; import com.linkwechat.wecom.domain.dto.WeEmpleCodeDto; import com.linkwechat.wecom.domain.dto.WeExternalContactDto; import com.linkwechat.wecom.mapper.WeEmpleCodeMapper; +import com.linkwechat.wecom.mapper.WeEmpleCodeTagMapper; +import com.linkwechat.wecom.mapper.WeEmpleCodeUseScopMapper; import com.linkwechat.wecom.service.IWeEmpleCodeService; import com.linkwechat.wecom.service.IWeEmpleCodeTagService; import com.linkwechat.wecom.service.IWeEmpleCodeUseScopService; @@ -56,6 +60,12 @@ public class WeEmpleCodeServiceImpl 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 +195,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 +236,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 +264,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/WeGroupStatisticServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeGroupStatisticServiceImpl.java index 609fe1bb890dec38c278b3160d263a8e94d87752..2e323bf25e9f19dc01a9afa892a6931d14401db9 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeGroupStatisticServiceImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeGroupStatisticServiceImpl.java @@ -1,6 +1,8 @@ package com.linkwechat.wecom.service.impl; import com.linkwechat.wecom.domain.WeGroupStatistic; +import com.linkwechat.wecom.domain.dto.WePageCountDto; +import com.linkwechat.wecom.domain.query.WePageStateQuery; import com.linkwechat.wecom.mapper.WeGroupStatisticMapper; import com.linkwechat.wecom.service.IWeGroupStatisticService; import org.springframework.stereotype.Service; @@ -54,4 +56,25 @@ public class WeGroupStatisticServiceImpl extends ServiceImpl getDayCountData(WePageStateQuery wePageStateQuery) { + return this.baseMapper.getDayCountData(wePageStateQuery); + } + + @Override + public List getWeekCountData(WePageStateQuery wePageStateQuery) { + return this.baseMapper.getWeekCountData(wePageStateQuery); + } + + @Override + public List getMonthCountData(WePageStateQuery wePageStateQuery) { + return this.baseMapper.getMonthCountData(wePageStateQuery); + } } 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..dbc3d09ae0f3f00748a6a9a082d1bf0ae501e89e 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,38 @@ 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.core.domain.entity.WeCorpAccount; +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 +54,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 +139,11 @@ public class WePresTagGroupTaskServiceImpl extends ServiceImpl ids = Arrays.asList(idList); @@ -149,9 +179,9 @@ public class WePresTagGroupTaskServiceImpl extends ServiceImpl 0) { // 更新标签 // 先删除旧标签 QueryWrapper taskTagQueryWrapper = new QueryWrapper<>(); @@ -181,7 +211,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 +234,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 +289,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/WeSensitiveServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeSensitiveServiceImpl.java index 8168615b4362abb7878de9b7073c17ecd57499eb..23e9d353dcac729dca578383cdb5ea90fa7725be 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeSensitiveServiceImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeSensitiveServiceImpl.java @@ -13,7 +13,7 @@ import com.linkwechat.common.utils.DateUtils; import com.linkwechat.common.utils.SecurityUtils; import com.linkwechat.common.utils.StringUtils; import com.linkwechat.wecom.client.WeMessagePushClient; -import com.linkwechat.wecom.domain.WeCorpAccount; +import com.linkwechat.common.core.domain.entity.WeCorpAccount; import com.linkwechat.wecom.domain.WeSensitive; import com.linkwechat.wecom.domain.WeSensitiveAuditScope; import com.linkwechat.wecom.domain.WeUser; 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..c0e9fc88a1d60b86691fe5abec0de75e23d74172 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 @@ -203,7 +203,7 @@ public class WeTaskFissionServiceImpl implements IWeTaskFissionService { .append("&") .append("fissionId=").append(id) .append("&") - .append("userId=").append(fissStaffId) + .append("fissionTargetId=").append(fissStaffId) .append("&") .append("posterId=").append(weTaskFission.getPostersId()); @@ -247,10 +247,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,20 +292,20 @@ 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) + WeCustomer weCustomer = weCustomerService.getOne(new LambdaQueryWrapper().eq(WeCustomer::getUnionid, unionId)); + String uid = Optional.ofNullable(weCustomer).map(WeCustomer::getUnionid) .orElseThrow(() -> new WeComException("用户信息不存在")); weTaskFissionRecord = weTaskFissionRecordService - .selectWeTaskFissionRecordByIdAndCustomerId(Long.valueOf(fissionId), externalUseriId); + .selectWeTaskFissionRecordByIdAndCustomerId(Long.valueOf(fissionId), uid); Optional.ofNullable(weTaskFissionRecord).map(WeTaskFissionRecord::getId) .orElseThrow(() -> new WeComException("任务记录信息不存在")); List list = weFlowerCustomerRelService.list(new LambdaQueryWrapper() @@ -351,10 +351,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 { 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..c2c27cca67467d511ce7b42279eb19faa39205e0 --- /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(String id, @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/WeCorpAccountMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeCorpAccountMapper.xml index a5861cceafecb77debec07575cdfbf378ede765b..ddd571e0ee84965272b35c3d929c5a810b005088 100644 --- a/linkwe-wecom/src/main/resources/mapper/wecom/WeCorpAccountMapper.xml +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeCorpAccountMapper.xml @@ -22,10 +22,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + - select id,chat_secret,provider_secret,company_name, corp_id, corp_secret,agent_id, agent_secret, status, del_flag, create_by, create_time, update_by, update_time,contact_secret, customer_churn_notice_switch,wx_qr_login_redirect_uri from we_corp_account + select id,chat_secret,provider_secret,company_name, corp_id, corp_secret,agent_id, agent_secret, status, del_flag, create_by, create_time, update_by, update_time,contact_secret, customer_churn_notice_switch,wx_qr_login_redirect_uri, + corp_account + from we_corp_account + + WHERE + del_flag = 0 + AND corp_account = #{corpAccount} + + 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/WeGroupStatisticMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupStatisticMapper.xml index 69ff242309f05fafec849ba723da1fbb562f0823..70252f8106934150c13e880e9f18ada7acea441c 100644 --- a/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupStatisticMapper.xml +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupStatisticMapper.xml @@ -18,4 +18,146 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + + + + \ 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/sql/link-wechat.sql b/sql/link-wechat.sql index 58fedfe6287e3afb16ad220844e400743535c748..104e0e16496aa3b13a648ddee8639b531b7366c6 100644 --- a/sql/link-wechat.sql +++ b/sql/link-wechat.sql @@ -25985,35 +25985,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 +26016,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 +26031,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 +26051,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 +26066,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规则图片'; +