diff --git a/linkwe-admin/pom.xml b/linkwe-admin/pom.xml
index 7a21ea6a14515fb55ba455ad6de0efa03426a286..b940a787b5d7967c4e690d23b90aecfbe9b84055 100644
--- a/linkwe-admin/pom.xml
+++ b/linkwe-admin/pom.xml
@@ -74,6 +74,15 @@
5.6.24
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+
+
+
+
diff --git a/linkwe-admin/src/main/java/com/linkwechat/LinkWeChatApplication.java b/linkwe-admin/src/main/java/com/linkwechat/LinkWeChatApplication.java
index 9684fe1a9e2deb6fa0fe9958c71d999b05d3990d..3f7a258a7324a03377a7064296045412b89f894c 100644
--- a/linkwe-admin/src/main/java/com/linkwechat/LinkWeChatApplication.java
+++ b/linkwe-admin/src/main/java/com/linkwechat/LinkWeChatApplication.java
@@ -6,35 +6,33 @@ import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.scheduling.annotation.EnableAsync;
/**
* 启动程序
- *
+ *
* @author ruoyi
*/
-@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, PageHelperAutoConfiguration.class })
+@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, PageHelperAutoConfiguration.class})
@MapperScan("com.linkwechat.*.mapper")
@ForestScan(basePackages = "com.linkwechat.wecom.client")
@EnableAsync
-public class LinkWeChatApplication
-{
- public static void main(String[] args)
- {
+@EnableDiscoveryClient
+public class LinkWeChatApplication {
+ public static void main(String[] args) {
- SpringApplication.run(LinkWeChatApplication.class, args);
- System.out.println("(♥◠‿◠)ノ゙ LinkWeChat启动成功 ლ(´ڡ`ლ)゙ \n" +
- " .-------. ____ __ \n" +
- " | _ _ \\ \\ \\ / / \n" +
- " | ( ' ) | \\ _. / ' \n" +
- " |(_ o _) / _( )_ .' \n" +
- " | (_,_).' __ ___(_ o _)' \n" +
- " | |\\ \\ | || |(_,_)' \n" +
- " | | \\ `' /| `-' / \n" +
- " | | \\ / \\ / \n" +
- " ''-' `'-' `-..-' ");
+ SpringApplication.run(LinkWeChatApplication.class, args);
+ System.out.println("(♥◠‿◠)ノ゙ LinkWeChat启动成功 ლ(´ڡ`ლ)゙ \n" +
+ " .-------. ____ __ \n" +
+ " | _ _ \\ \\ \\ / / \n" +
+ " | ( ' ) | \\ _. / ' \n" +
+ " |(_ o _) / _( )_ .' \n" +
+ " | (_,_).' __ ___(_ o _)' \n" +
+ " | |\\ \\ | || |(_,_)' \n" +
+ " | | \\ `' /| `-' / \n" +
+ " | | \\ / \\ / \n" +
+ " ''-' `'-' `-..-' ");
}
-
-
}
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 53304c6bcc75851323efb0cd9097830a4068af71..7c1d3428b8210dfe02c41a6ae0225bacadb309c2 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
@@ -159,32 +159,4 @@ public class SysLoginController
}
-// /**
-// * 从群活码获取第一个可用的实际码
-// */
-// @GetMapping("/getChatQRCode")
-// public AjaxResult getActual(Long weGroupCodeId) {
-// WeGroupCode weGroupCode = weGroupCodeService.selectWeGroupCodeById(weGroupCodeId);
-// List weGroupCodeActualList = weGroupCodeService.selectActualListByGroupCodeId(weGroupCodeId);
-// WeGroupCodeActual weGroupCodeActual = null;
-// for (WeGroupCodeActual item : weGroupCodeActualList) {
-// // 获取第一个可用的实际码
-// if (item.getStatus().intValue() == WeConstans.WE_GROUP_CODE_ENABLE) {
-// weGroupCodeActual = item;
-// break;
-// }
-// }
-// if (StringUtils.isNotNull(weGroupCodeActual)) {
-// AjaxResult ajax = AjaxResult.success();
-// ajax.put("tipMsg", weGroupCode.getTipMsg());
-// ajax.put("activityName", weGroupCode.getActivityName());
-// ajax.put("groupName", weGroupCodeActual.getChatGroupName());
-// ajax.put("actualQRCode", weGroupCodeActual.getActualGroupQrCode());
-// return ajax;
-// } else {
-// return AjaxResult.error(HttpStatus.NOT_FOUND, "数据不存在");
-// }
-// }
-
-
}
diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCategoryController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCategoryController.java
index 211159464f6ad5e8cc87b4c8e5f92245ecbd21b6..f92071599909879db3175d13ed242a1c7d7213ee 100644
--- a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCategoryController.java
+++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCategoryController.java
@@ -30,7 +30,7 @@ public class WeCategoryController extends BaseController {
/**
* 类目树
*/
- @PreAuthorize("@ss.hasPermi('wechat:category:list')")
+// @PreAuthorize("@ss.hasPermi('wechat:category:list')")
@GetMapping("/list")
@ApiOperation("类目树")
public AjaxResult list(@RequestParam("mediaType") String mediaType) {
@@ -40,7 +40,7 @@ public class WeCategoryController extends BaseController {
/**
* 通过id查询类目详细信息
*/
- @PreAuthorize("@ss.hasPermi('wechat:category:query')")
+// @PreAuthorize("@ss.hasPermi('wechat:category:query')")
@GetMapping(value = "/{id}")
@ApiOperation("通过id查询类目详细信息")
public AjaxResult getInfo(@PathVariable("id") Long id) {
@@ -50,7 +50,7 @@ public class WeCategoryController extends BaseController {
/**
* 添加类目
*/
- @PreAuthorize("@ss.hasPermi('wechat:category:add')")
+// @PreAuthorize("@ss.hasPermi('wechat:category:add')")
@Log(title = "添加类目", businessType = BusinessType.INSERT)
@PostMapping
@ApiOperation("添加类目")
@@ -61,7 +61,7 @@ public class WeCategoryController extends BaseController {
/**
* 更新目录
*/
- @PreAuthorize("@ss.hasPermi('wechat:category:edit')")
+// @PreAuthorize("@ss.hasPermi('wechat:category:edit')")
@Log(title = "更新目录", businessType = BusinessType.UPDATE)
@PutMapping
@ApiOperation("更新目录")
@@ -73,7 +73,7 @@ public class WeCategoryController extends BaseController {
/**
* 删除类目
*/
- @PreAuthorize("@ss.hasPermi('wechat:category:remove')")
+// @PreAuthorize("@ss.hasPermi('wechat:category:remove')")
@Log(title = "删除类目", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
@ApiOperation("删除类目")
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 935e25381ae1addad8cba9c5dc6bb0db48e70386..f802b3824776b37e89be98771a6628e5dd40955a 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
@@ -39,7 +39,7 @@ public class WeChatContactMappingController extends BaseController
/**
* 查询聊天关系映射列表
*/
- @PreAuthorize("@ss.hasPermi('chat:mapping:list')")
+// @PreAuthorize("@ss.hasPermi('chat:mapping:list')")
@GetMapping("/list")
public TableDataInfo list(WeChatContactMapping weChatContactMapping)
{
@@ -51,7 +51,7 @@ public class WeChatContactMappingController extends BaseController
/**
* 按客户查询关系映射列表
*/
- @PreAuthorize("@ss.hasPermi('chat:mapping:listByCustomer')")
+// @PreAuthorize("@ss.hasPermi('chat:mapping:listByCustomer')")
@GetMapping("/listByCustomer")
public TableDataInfo listByCustomer()
{
@@ -63,7 +63,7 @@ public class WeChatContactMappingController extends BaseController
/**
* 导出聊天关系映射列表
*/
- @PreAuthorize("@ss.hasPermi('chat:mapping:export')")
+// @PreAuthorize("@ss.hasPermi('chat:mapping:export')")
@Log(title = "聊天关系映射", businessType = BusinessType.EXPORT)
@GetMapping("/export")
public AjaxResult export(WeChatContactMapping weChatContactMapping)
@@ -76,7 +76,7 @@ public class WeChatContactMappingController extends BaseController
/**
* 获取聊天关系映射详细信息
*/
- @PreAuthorize("@ss.hasPermi('chat:mapping:query')")
+// @PreAuthorize("@ss.hasPermi('chat:mapping:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
@@ -86,7 +86,7 @@ public class WeChatContactMappingController extends BaseController
/**
* 新增聊天关系映射
*/
- @PreAuthorize("@ss.hasPermi('chat:mapping:add')")
+// @PreAuthorize("@ss.hasPermi('chat:mapping:add')")
@Log(title = "聊天关系映射", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody WeChatContactMapping weChatContactMapping)
@@ -97,7 +97,7 @@ public class WeChatContactMappingController extends BaseController
/**
* 修改聊天关系映射
*/
- @PreAuthorize("@ss.hasPermi('chat:mapping:edit')")
+// @PreAuthorize("@ss.hasPermi('chat:mapping:edit')")
@Log(title = "聊天关系映射", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody WeChatContactMapping weChatContactMapping)
@@ -108,7 +108,7 @@ public class WeChatContactMappingController extends BaseController
/**
* 删除聊天关系映射
*/
- @PreAuthorize("@ss.hasPermi('chat:mapping:remove')")
+// @PreAuthorize("@ss.hasPermi('chat:mapping:remove')")
@Log(title = "聊天关系映射", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
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 b6a88c0061cdcf514f19f631105fe868fb56f981..135b81b8aee3b1dfb1a50b6dfa91ce2fdfca758c 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
@@ -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.core.controller.BaseController;
import com.linkwechat.common.core.domain.AjaxResult;
@@ -7,20 +8,32 @@ import com.linkwechat.common.core.page.TableDataInfo;
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 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.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+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;
/**
* 社群运营 新客自动拉群 Controller
@@ -28,36 +41,43 @@ import java.util.stream.Collectors;
* @author kewen
* @date 2021-02-19
*/
-@Controller
-@RequestMapping(value = "communityNewGroup")
+@Api(description = "新客自动拉群 Controller")
+@RestController
+@RequestMapping(value = "/wecom/communityNewGroup")
public class WeCommunityNewGroupController extends BaseController {
- @Autowired
- private IWeCommunityNewGroupService weCommunityNewGroupService;
+ @Autowired
+ private IWeCommunityNewGroupService weCommunityNewGroupService;
/**
* 查询新客自动拉群列表
*/
+ @ApiOperation(value = "查询新客自动拉群列表", httpMethod = "GET")
@PreAuthorize("@ss.hasPermi('wecom:communityNewGroup:list')")
@GetMapping("/list")
- public TableDataInfo list(WeCommunityNewGroup communityNewGroup) {
+ 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(communityNewGroup);
+ List communityNewGroupVos = weCommunityNewGroupService.selectWeCommunityNewGroupList(empleCodeName, createBy, beginTime, endTime);
return getDataTable(communityNewGroupVos);
}
/**
* 获取新客自动拉群详细信息
*/
+ @ApiOperation(value = "获取新客自动拉群详细信息", httpMethod = "GET")
@PreAuthorize("@ss.hasPermi('wecom:communityNewGroup:query')")
- @GetMapping(value = "/{id}")
- public AjaxResult getInfo(@PathVariable("newGroupId") Long newGroupId) {
- return AjaxResult.success(weCommunityNewGroupService.selectWeCommunityNewGroupById(newGroupId));
+ @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")
@@ -70,6 +90,7 @@ public class WeCommunityNewGroupController extends BaseController {
/**
* 删除新客自动拉群
*/
+ @ApiOperation(value = "删除新客自动拉群", httpMethod = "DELETE")
@PreAuthorize("@ss.hasPermi('wecom:communityNewGroup:remove')")
@Log(title = "新客自动拉群", businessType = BusinessType.DELETE)
@DeleteMapping("/delete/{ids}")
@@ -82,6 +103,7 @@ public class WeCommunityNewGroupController extends BaseController {
/**
* 新增新客自动拉群
*/
+ @ApiOperation(value = "新增新客自动拉群", httpMethod = "POST")
@PreAuthorize("@ss.hasPermi('wecom:communityNewGroup:add')")
@Log(title = "新客自动拉群", businessType = BusinessType.INSERT)
@PostMapping("/add")
@@ -91,9 +113,9 @@ public class WeCommunityNewGroupController extends BaseController {
return AjaxResult.success();
} catch (Exception e) {
e.printStackTrace();
- if (e instanceof WeComException){
+ if (e instanceof WeComException) {
return AjaxResult.error(e.getMessage());
- }else {
+ } else {
return AjaxResult.error("请求接口异常!");
}
}
@@ -101,4 +123,72 @@ 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());
+ try {
+
+ List weCommunityNewGroupVos = weCommunityNewGroupService.selectWeCommunityNewGroupByIds(idList);
+
+ //zip输出流
+ ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
+ if (CollectionUtil.isNotEmpty(weCommunityNewGroupVos)) {
+ for (WeCommunityNewGroupVo communityNewGroupVo : weCommunityNewGroupVos) {
+ String qrCode = communityNewGroupVo.getQrCode();
+ if (StringUtils.isEmpty(qrCode)) {
+ continue;
+ }
+ URL url = new URL(qrCode);
+ //每个二维码名称
+ String fileName = communityNewGroupVo.getEmpleCodeName() + communityNewGroupVo.getActivityScene() + ".jpg";
+ zos.putNextEntry(new ZipEntry(fileName));
+ InputStream fis = url.openConnection().getInputStream();
+ byte[] buffer = new byte[1024];
+ int r = 0;
+ while ((r = fis.read(buffer)) != -1) {
+ zos.write(buffer, 0, r);
+ }
+ fis.close();
+ }
+ }
+ //关闭zip输出流
+ zos.flush();
+ 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();
+ }
+ }
+ }
+
+
}
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
new file mode 100644
index 0000000000000000000000000000000000000000..6c422f5eb86f072e19098e28edbd903494ab78ed
--- /dev/null
+++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCustomerPortraitController.java
@@ -0,0 +1,220 @@
+package com.linkwechat.web.controller.wecom;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.linkwechat.common.constant.Constants;
+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.WeCustomerPortrait;
+import com.linkwechat.wecom.domain.WeCustomerTrajectory;
+import com.linkwechat.wecom.domain.WeFlowerCustomerTagRel;
+import com.linkwechat.wecom.domain.WeTagGroup;
+import com.linkwechat.wecom.domain.vo.WeMakeCustomerTag;
+import com.linkwechat.wecom.service.*;
+import org.aspectj.weaver.loadtime.Aj;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @description: 客户画像相关controller
+ * @author: HaoN
+ * @create: 2021-03-03 15:10
+ **/
+@RestController
+@RequestMapping("/wecom/portrait")
+public class WeCustomerPortraitController extends BaseController {
+
+
+ @Autowired
+ private IWeCustomerService iWeCustomerService;
+
+
+ @Autowired
+ private IWeTagGroupService weTagGroupService;
+
+
+ @Autowired
+ private IWeUserService iWeUserService;
+
+
+ @Autowired
+ private IWeGroupService iWeGroupService;
+
+
+
+ @Autowired
+ private IWeCustomerTrajectoryService iWeCustomerTrajectoryService;
+
+
+ /**
+ * 根据客户id和当前企业员工id获取客户详细信息
+ * @param externalUserid
+ * @param userid
+ * @return
+ */
+ @GetMapping(value = "/findWeCustomerInfo")
+ public AjaxResult findWeCustomerInfo(String externalUserid, String userid){
+
+ return AjaxResult.success(
+ iWeCustomerService.findCustomerByOperUseridAndCustomerId(externalUserid,userid)
+ );
+ }
+
+
+ /**
+ * 客户画像资料更新
+ * @param weCustomerPortrait
+ * @return
+ */
+ @PostMapping(value = "/updateWeCustomerInfo")
+ public AjaxResult updateWeCustomerInfo(@RequestBody WeCustomerPortrait weCustomerPortrait){
+
+
+
+
+ iWeCustomerService.updateWeCustomerPortrait(weCustomerPortrait);
+
+
+ return AjaxResult.success();
+ }
+
+
+
+ /**
+ * 获取当前系统所有可用标签
+ * @return
+ */
+ @GetMapping(value = "/findAllTags")
+ public AjaxResult findAllTags(){
+
+ return AjaxResult.success(
+ weTagGroupService.selectWeTagGroupList(
+ WeTagGroup.builder()
+ .build()
+ )
+ );
+
+ }
+
+
+ /**
+ * 更新客户画像标签
+ * @param weMakeCustomerTag
+ * @return
+ */
+ @PostMapping(value = "/updateWeCustomerPorTraitTag")
+ public AjaxResult updateWeCustomerPorTraitTag(@RequestBody WeMakeCustomerTag weMakeCustomerTag){
+
+
+
+ iWeCustomerService.makeLabel(weMakeCustomerTag);
+
+ return AjaxResult.success();
+ }
+
+
+ /**
+ * 查看客户添加的员工
+ * @param externalUserid
+ * @return
+ */
+ @GetMapping(value = "/findAddaddEmployes/{externalUserid}")
+ public AjaxResult findaddEmployes(@PathVariable String externalUserid){
+
+
+ return AjaxResult.success(
+ iWeUserService.findWeUserByCutomerId(externalUserid)
+ );
+ }
+
+
+ /**
+ * 获取用户添加的群
+ * @param externalUserid
+ * @param userId
+ * @return
+ */
+ @GetMapping(value = "/findAddGroupNum")
+ public AjaxResult findAddGroupNum(String externalUserid,String userId){
+
+ return AjaxResult.success(
+ iWeGroupService.findWeGroupByCustomer(userId,externalUserid)
+ );
+ }
+
+
+ /**
+ * 获取轨迹信息
+ * @param trajectoryType
+ * @return
+ */
+ @GetMapping(value = "/findTrajectory")
+ public TableDataInfo findTrajectory(Integer trajectoryType){
+ startPage();
+ return getDataTable(
+ iWeCustomerTrajectoryService.list(new LambdaQueryWrapper()
+ .eq(WeCustomerTrajectory::getTrajectoryType,trajectoryType)
+ .ne(WeCustomerTrajectory::getStatus,Constants.DELETE_CODE))
+ );
+ }
+
+
+ /**
+ * 添加或编辑轨迹
+ * @param trajectory
+ * @return
+ */
+ @PostMapping(value = "/addOrEditWaitHandle")
+ public AjaxResult addOrEditWaitHandle(@RequestBody WeCustomerTrajectory trajectory){
+
+
+ iWeCustomerTrajectoryService.saveOrUpdate(trajectory);
+
+ return AjaxResult.success();
+ }
+
+
+ /**
+ * 删除轨迹
+ * @param trajectoryId
+ * @return
+ */
+ @DeleteMapping(value = "/removeTrajectory/{trajectoryId}")
+ public AjaxResult removeTrajectory(@PathVariable String trajectoryId){
+ iWeCustomerTrajectoryService.updateById(WeCustomerTrajectory.builder()
+ .id(trajectoryId)
+ .status(Constants.DELETE_CODE)
+ .build());
+ return AjaxResult.success();
+ }
+
+
+ /**
+ * 完成待办
+ * @param trajectoryId
+ * @return
+ */
+ @DeleteMapping(value = "/handleWait/{trajectoryId}")
+ public AjaxResult handleWait(@PathVariable String trajectoryId){
+ iWeCustomerTrajectoryService.updateById(WeCustomerTrajectory.builder()
+ .id(trajectoryId)
+ .status(Constants.HANDLE_SUCCESS)
+ .build());
+ return AjaxResult.success();
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
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 2f77bd264bdb3be20f7a2a9f9abca39fd79195d5..e17c81f2c4c5f9f04c1233a7b265de6e6d118602 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
@@ -46,7 +46,7 @@ public class WeGroupCodeController extends BaseController {
/**
* 查询客户群活码列表
*/
- @PreAuthorize("@ss.hasPermi('wecom:groupCode:list')")
+ @PreAuthorize("@ss.hasPermi('drainageCode:group:list')")
@GetMapping("/list")
public TableDataInfo list(WeGroupCode weGroupCode) {
startPage();
@@ -57,7 +57,7 @@ public class WeGroupCodeController extends BaseController {
/**
* 批量下载群活码
*/
- @PreAuthorize("@ss.hasPermi('wecom:groupCode:downloadBatch')")
+ @PreAuthorize("@ss.hasPermi('drainageCode:group:downloadBatch')")
@Log(title = "群活码批量下载", businessType = BusinessType.OTHER)
@GetMapping("/downloadBatch")
public void downloadBatch(String ids, HttpServletRequest request, HttpServletResponse response) {
@@ -92,7 +92,7 @@ public class WeGroupCodeController extends BaseController {
}
}
- @PreAuthorize("@ss.hasPermi('wecom:groupCode:download')")
+ @PreAuthorize("@ss.hasPermi('drainageCode:group:download')")
@Log(title = "群活码下载", businessType = BusinessType.OTHER)
@GetMapping("/download")
public void download(String id, HttpServletRequest request, HttpServletResponse response) {
@@ -120,7 +120,7 @@ public class WeGroupCodeController extends BaseController {
/**
* 获取客户群活码详细信息
*/
- @PreAuthorize("@ss.hasPermi('wecom:groupCode:query')")
+ @PreAuthorize("@ss.hasPermi('drainageCode:group:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id) {
WeGroupCode weGroupCode = weGroupCodeService.selectWeGroupCodeById(id);
@@ -135,7 +135,7 @@ public class WeGroupCodeController extends BaseController {
/**
* 新增客户群活码
*/
- @PreAuthorize("@ss.hasPermi('wecom:groupCode:add')")
+ @PreAuthorize("@ss.hasPermi('drainageCode:group:add')")
@Log(title = "客户群活码", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@Validated @RequestBody WeGroupCode weGroupCode) {
@@ -153,7 +153,7 @@ public class WeGroupCodeController extends BaseController {
/**
* 修改客户群活码
*/
- @PreAuthorize("@ss.hasPermi('wecom:groupCode:edit')")
+ @PreAuthorize("@ss.hasPermi('drainageCode:group:edit')")
@Log(title = "客户群活码", businessType = BusinessType.UPDATE)
@PutMapping(value = "/{id}")
public AjaxResult edit(@PathVariable("id") Long id, @RequestBody WeGroupCode weGroupCode) {
@@ -174,7 +174,7 @@ public class WeGroupCodeController extends BaseController {
/**
* 删除客户群活码
*/
- @PreAuthorize("@ss.hasPermi('wecom:groupCode:remove')")
+ @PreAuthorize("@ss.hasPermi('drainageCode:group:remove')")
@Log(title = "客户群活码", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult batchRemove(@PathVariable Long[] ids) {
diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WePageDateContraller.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WePageDateContraller.java
new file mode 100644
index 0000000000000000000000000000000000000000..497fc5734056f24147f05ee90d65de6fc38210f9
--- /dev/null
+++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WePageDateContraller.java
@@ -0,0 +1,49 @@
+package com.linkwechat.web.controller.wecom;
+
+import com.linkwechat.common.core.domain.AjaxResult;
+import com.linkwechat.common.core.redis.RedisCache;
+import com.linkwechat.wecom.domain.dto.WePageStaticDataDto;
+import com.linkwechat.wecom.service.IWeCorpAccountService;
+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.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @author danmo
+ * @description 首页统计
+ * @date 2021/2/23 15:30
+ **/
+@Api(description = "首页统计contraller")
+@Slf4j
+@RestController
+@RequestMapping("wecom/page/")
+public class WePageDateContraller {
+ @Autowired
+ private RedisCache redisCache;
+
+ /**
+ *
+ */
+ @ApiOperation(value = "数据总览controller",httpMethod = "GET")
+ @PreAuthorize("@ss.hasPermi('wecom:page:getCorpBasicData')")
+ @GetMapping("/getCorpBasicData")
+ public AjaxResult getCorpBasicData(){
+ return AjaxResult.success(redisCache.getCacheMap("getCorpBasicData"));
+ }
+
+ @ApiOperation(value = "实时数据controller",httpMethod = "GET")
+ @PreAuthorize("@ss.hasPermi('wecom:page:getCorpRealTimeData')")
+ @GetMapping("/getCorpRealTimeData")
+ public AjaxResult getCorpRealTimeData(){
+ WePageStaticDataDto wePageStaticDataDto = redisCache.getCacheObject("getCorpRealTimeData");
+ return AjaxResult.success(wePageStaticDataDto);
+ }
+}
diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WePosterController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WePosterController.java
index 63ae5c518a097f956667b6c50c7013ff3ab77376..13ba4056442333f945567889d29f346022357835 100644
--- a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WePosterController.java
+++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WePosterController.java
@@ -79,7 +79,7 @@ public class WePosterController extends BaseController {
poster.setMediaType(null);
wePosterService.generateSimpleImg(poster);
wePosterService.saveOrUpdate(poster);
- List posterSubassemblyList = wePosterSubassemblyService.lambdaQuery().eq(WePosterSubassembly::getPosterId, poster.getId()).eq(WePosterSubassembly::getDelFlag, 1).list();
+ List posterSubassemblyList = wePosterSubassemblyService.lambdaQuery().eq(WePosterSubassembly::getPosterId, poster.getId()).eq(WePosterSubassembly::getDelFlag, 0).list();
Map posterSubassemblyMap = posterSubassemblyList.stream().collect(Collectors.toMap(WePosterSubassembly::getId, p -> p));
if(!CollectionUtils.isEmpty(poster.getPosterSubassemblyList())) {
List insertList = new ArrayList<>();
@@ -104,8 +104,7 @@ public class WePosterController extends BaseController {
}
List deleteList = new ArrayList<>(posterSubassemblyMap.values());
if (!CollectionUtils.isEmpty(deleteList)) {
- deleteList.forEach(wePosterSubassembly -> wePosterSubassembly.setDelFlag(1));
- wePosterSubassemblyService.updateBatchById(deleteList);
+ wePosterSubassemblyService.update(Wrappers.lambdaUpdate(WePosterSubassembly.class).set(WePosterSubassembly::getDelFlag,1).in(WePosterSubassembly::getId,deleteList.stream().map(WePosterSubassembly::getId).collect(Collectors.toList())));
}
return AjaxResult.success("修改成功");
}
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 83246a1c4aa6e57cdb6661af7f5116e2f1359ada..896d1bbb417eb7a8466876d59b07f473b6d27dc1 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
@@ -13,6 +13,7 @@ import com.linkwechat.common.utils.poi.ExcelUtil;
import com.linkwechat.wecom.domain.WeTaskFission;
import com.linkwechat.wecom.domain.dto.WeChatUserDTO;
import com.linkwechat.wecom.domain.dto.WeTaskFissionPosterDTO;
+import com.linkwechat.wecom.domain.query.WeTaskFissionStatisticQO;
import com.linkwechat.wecom.service.IWeTaskFissionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -52,6 +53,17 @@ public class WeTaskFissionController extends BaseController {
return getDataTable(list);
}
+ /**
+ * 查询统计信息
+ */
+ @ApiOperation(value = "查询统计信息", httpMethod = "GET")
+ @PreAuthorize("@ss.hasPermi('wecom:fission:stat')")
+ @GetMapping("/stat")
+ public AjaxResult statistics(WeTaskFissionStatisticQO weTaskFissionStatisticQO) {
+ //TODO 待完成
+ return null;
+ }
+
/**
* 导出任务宝列表
*/
diff --git a/linkwe-admin/src/main/resources/application.yml b/linkwe-admin/src/main/resources/application.yml
index 5f60dbcf91d1d6c9eab8f74ce6927e275b41bd12..fc0eabdb548abed90082023d4b086b50c8c9a507 100644
--- a/linkwe-admin/src/main/resources/application.yml
+++ b/linkwe-admin/src/main/resources/application.yml
@@ -150,6 +150,8 @@ xss:
elasticsearch:
schema: http
address: ${ES_ADDRESS:localhost}
+ userName: ""
+ password: ""
connectTimeout: 10000
socketTimeout: 10000
connectionRequestTimeout: 10000
@@ -167,6 +169,7 @@ forest:
wecome:
+ chatKey: finance
serverUrl: https://qyapi.weixin.qq.com/
weComePrefix: cgi-bin
noAccessTokenUrl:
@@ -198,6 +201,8 @@ wecome:
- /externalcontact/unionid_to_external_userid
- /externalcontact/add_msg_template
- /externalcontact/get_group_msg_result
+ - /externalcontact/get_user_behavior_data
+ - /externalcontact/groupchat/statistic
fileUplodUrl: /media/upload,/media/uploadimg
needProviderTokenUrl:
- /service/get_login_info
diff --git a/linkwe-admin/src/main/resources/bootstrap.properties b/linkwe-admin/src/main/resources/bootstrap.properties
new file mode 100644
index 0000000000000000000000000000000000000000..1c2bb0da552f685ac64d5be87677b573b0a0844e
--- /dev/null
+++ b/linkwe-admin/src/main/resources/bootstrap.properties
@@ -0,0 +1,4 @@
+spring.cloud.nacos.config.server-addr=${NACOS_SERVER:119.45.28.29:10848}
+spring.cloud.nacos.config.namespace=627a666a-76b2-42ad-a1b0-70a12d2c73fd
+spring.application.name=link-wechat
+spring.cloud.nacos.config.file-extension=yaml
\ No newline at end of file
diff --git a/linkwe-common/pom.xml b/linkwe-common/pom.xml
index 0d9c26b2b6d77312028d1e7a50a64bb5a3422bbc..75b1110095434a5bd010675d12e4bce461b2149d 100644
--- a/linkwe-common/pom.xml
+++ b/linkwe-common/pom.xml
@@ -149,8 +149,6 @@
-
-
io.swagger
@@ -245,6 +243,23 @@
cos_api
5.6.24
+
+
+
+ org.bouncycastle
+ bcprov-jdk15on
+ 1.68
+
+
+ org.bouncycastle
+ bcpg-jdk15on
+ 1.68
+
+
+ org.bouncycastle
+ bcpkix-jdk15on
+ 1.68
+
\ No newline at end of file
diff --git a/linkwe-common/src/main/java/com/linkwechat/common/config/ElasticSearchConfig.java b/linkwe-common/src/main/java/com/linkwechat/common/config/ElasticSearchConfig.java
index 61754cb57f5fed7b8bb4ec90c6896329a1fcfdac..69a7b5f5fb55b0dbc3de8e3bfc41b22a011557fd 100644
--- a/linkwe-common/src/main/java/com/linkwechat/common/config/ElasticSearchConfig.java
+++ b/linkwe-common/src/main/java/com/linkwechat/common/config/ElasticSearchConfig.java
@@ -1,6 +1,10 @@
package com.linkwechat.common.config;
import org.apache.http.HttpHost;
+import org.apache.http.auth.AuthScope;
+import org.apache.http.auth.UsernamePasswordCredentials;
+import org.apache.http.client.CredentialsProvider;
+import org.apache.http.impl.client.BasicCredentialsProvider;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
@@ -30,6 +34,11 @@ public class ElasticSearchConfig {
@Value("${elasticsearch.address}")
private String address;
+ @Value("${elasticsearch.userName}")
+ private String userName;
+
+ @Value("${elasticsearch.password}")
+ private String password;
/**
* 连接超时时间
*/
@@ -70,6 +79,8 @@ public class ElasticSearchConfig {
String port = addr.split(":")[1];
hostLists.add(new HttpHost(host, Integer.parseInt(port), schema));
}
+ final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
+ credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));
// 转换成 HttpHost 数组
HttpHost[] httpHost = hostLists.toArray(new HttpHost[]{});
// 构建连接对象
@@ -85,6 +96,7 @@ public class ElasticSearchConfig {
builder.setHttpClientConfigCallback(httpClientBuilder -> {
httpClientBuilder.setMaxConnTotal(maxConnectNum);
httpClientBuilder.setMaxConnPerRoute(maxConnectPerRoute);
+ httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
return httpClientBuilder;
});
return new RestHighLevelClient(builder);
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 76911062c89d745b23711a6a123b4c53099db7a7..ee3d6c95445a79a0174d96b065a31b67f7f40e9b 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
@@ -156,6 +156,11 @@ public class Constants
+ /**完成待办*/
+ public static final String HANDLE_SUCCESS="1";
+
+
+
diff --git a/linkwe-common/src/main/java/com/linkwechat/common/core/domain/AjaxResult.java b/linkwe-common/src/main/java/com/linkwechat/common/core/domain/AjaxResult.java
index bbb2dcd6e07bc94f16cc34e44eaf8e3879e8f499..73af9928320bc56b3e75762bdbfcf36f85a35610 100644
--- a/linkwe-common/src/main/java/com/linkwechat/common/core/domain/AjaxResult.java
+++ b/linkwe-common/src/main/java/com/linkwechat/common/core/domain/AjaxResult.java
@@ -10,7 +10,7 @@ import com.linkwechat.common.constant.HttpStatus;
*
* @author ruoyi
*/
-public class AjaxResult extends HashMap
+public class AjaxResult extends HashMap
{
private static final long serialVersionUID = 1L;
diff --git a/linkwe-common/src/main/java/com/linkwechat/common/core/elasticsearch/ElasticSearch.java b/linkwe-common/src/main/java/com/linkwechat/common/core/elasticsearch/ElasticSearch.java
index 7aa5bafd934241af715cdf3ae2d3187266903057..c9dac0b52bfbeacdd1b89192e15b138aa95dd01b 100644
--- a/linkwe-common/src/main/java/com/linkwechat/common/core/elasticsearch/ElasticSearch.java
+++ b/linkwe-common/src/main/java/com/linkwechat/common/core/elasticsearch/ElasticSearch.java
@@ -14,6 +14,7 @@ import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.support.IndicesOptions;
+import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
@@ -31,12 +32,14 @@ import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
+import java.util.function.BiConsumer;
import java.util.function.Consumer;
/**
@@ -97,12 +100,16 @@ public class ElasticSearch {
return;
}
CreateIndexRequest request = new CreateIndexRequest(idxName);
+ GetIndexRequest getIndexRequest = new GetIndexRequest(idxName);
buildSetting(request);
request.mapping(builder);
// request.settings() 手工指定Setting
- CreateIndexResponse res = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
- if (!res.isAcknowledged()) {
- log.info("初始化失败");
+ boolean exists = restHighLevelClient.indices().exists(getIndexRequest, RequestOptions.DEFAULT);
+ if (!exists) {
+ CreateIndexResponse res = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
+ if (!res.isAcknowledged()) {
+ log.info("初始化失败");
+ }
}
} catch (Exception e) {
e.printStackTrace();
@@ -201,7 +208,9 @@ public class ElasticSearch {
list.forEach(item -> request.add(new IndexRequest(idxName, "_doc").id(item.getId())
.source(item.getData(), XContentType.JSON)));
try {
- restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
+ if (!CollectionUtils.isEmpty(request.requests())) {
+ restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
+ }
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -212,14 +221,41 @@ public class ElasticSearch {
*
* @param idxName
* @param list
- * @param consumers
+ * @param consumer
*/
- public void insertBatchAsync(String idxName, List list, List>> consumers) {
+ public void insertBatchAsync(String idxName, List list, BiConsumer consumer, Object param) {
+ BulkRequest request = new BulkRequest();
+ list.parallelStream().forEach(item -> request.add(new IndexRequest(idxName, "_doc").id(item.getId())
+ .source(item.getData(), XContentType.JSON)));
+ try {
+ if (!CollectionUtils.isEmpty(request.requests())) {
+ restHighLevelClient.bulkAsync(request, RequestOptions.DEFAULT, getActionListener(consumer, list, param));
+ }
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void insertBatchAsync(String idxName, List list, Consumer> consumer) {
BulkRequest request = new BulkRequest();
- list.parallelStream().forEach(item -> request.add(new IndexRequest(idxName, "_doc").id(item.getString("msgid"))
+ list.forEach(item -> request.add(new IndexRequest(idxName, "_doc").id(item.getString("msgid"))
.source(item, XContentType.JSON)));
try {
- restHighLevelClient.bulkAsync(request, RequestOptions.DEFAULT, getActionListener(list, consumers));
+ if (!CollectionUtils.isEmpty(request.requests())) {
+ restHighLevelClient.bulkAsync(request, RequestOptions.DEFAULT, getActionListener(consumer, list));
+ }
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void updateBatch(String idxName, List list) {
+ BulkRequest request = new BulkRequest();
+ list.forEach(item -> request.add(new UpdateRequest(idxName, item.getId()).upsert(item.getData(), XContentType.JSON)));
+ try {
+ if (!CollectionUtils.isEmpty(request.requests())) {
+ restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
+ }
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -241,7 +277,9 @@ public class ElasticSearch {
BulkRequest request = new BulkRequest();
idList.forEach(item -> request.add(new DeleteRequest(idxName, "_doc", item.toString())));
try {
- restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
+ if (!CollectionUtils.isEmpty(request.requests())) {
+ restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
+ }
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -362,11 +400,25 @@ public class ElasticSearch {
}
}
- public ActionListener getActionListener(List list, List>> consumers) {
+ public ActionListener getActionListener(Consumer consumer, List list) {
+ return new ActionListener() {
+ @Override
+ public void onResponse(Object o) {
+ consumer.accept(list);
+ }
+
+ @Override
+ public void onFailure(Exception e) {
+ log.warn("work with es failed, exception={}", ExceptionUtils.getStackTrace(e));
+ }
+ };
+ }
+
+ public ActionListener getActionListener(BiConsumer consumer, List list, Object param) {
return new ActionListener() {
@Override
public void onResponse(Object o) {
- consumers.forEach(consumer -> consumer.accept(list));
+ consumer.accept(list, param);
}
@Override
diff --git a/linkwe-common/src/main/java/com/linkwechat/common/core/page/TableDataInfo.java b/linkwe-common/src/main/java/com/linkwechat/common/core/page/TableDataInfo.java
index 853ecb551931bfe380a358666334e6eca01a3bb9..d8b4196c999fd21dd1c4f2cff0fde1c2c16d1d8d 100644
--- a/linkwe-common/src/main/java/com/linkwechat/common/core/page/TableDataInfo.java
+++ b/linkwe-common/src/main/java/com/linkwechat/common/core/page/TableDataInfo.java
@@ -8,7 +8,7 @@ import java.util.List;
*
* @author ruoyi
*/
-public class TableDataInfo implements Serializable
+public class TableDataInfo implements Serializable
{
private static final long serialVersionUID = 1L;
@@ -16,7 +16,7 @@ public class TableDataInfo implements Serializable
private long total;
/** 列表数据 */
- private List> rows;
+ private T rows;
/** 消息状态码 */
private int code;
@@ -37,7 +37,7 @@ public class TableDataInfo implements Serializable
* @param list 列表数据
* @param total 总记录数
*/
- public TableDataInfo(List> list, int total)
+ public TableDataInfo(T list, int total)
{
this.rows = list;
this.total = total;
@@ -53,12 +53,12 @@ public class TableDataInfo implements Serializable
this.total = total;
}
- public List> getRows()
+ public T getRows()
{
return rows;
}
- public void setRows(List> rows)
+ public void setRows(T rows)
{
this.rows = rows;
}
diff --git a/linkwe-common/src/main/java/com/linkwechat/common/utils/file/MimeTypeUtils.java b/linkwe-common/src/main/java/com/linkwechat/common/utils/file/MimeTypeUtils.java
index 9001088f240e1b13d0a5e12eae1a4ee1aacf3821..34a7a985ee43577481dc650ce06e02520012e1f6 100644
--- a/linkwe-common/src/main/java/com/linkwechat/common/utils/file/MimeTypeUtils.java
+++ b/linkwe-common/src/main/java/com/linkwechat/common/utils/file/MimeTypeUtils.java
@@ -32,7 +32,7 @@ public class MimeTypeUtils
// 压缩文件
"rar", "zip", "gz", "bz2",
// pdf
- "pdf" ,"wav","amr","mp4"};
+ "pdf" ,"wav","amr","mp4","mp3"};
public static String getExtension(String prefix)
{
diff --git a/linkwe-common/src/main/java/com/linkwechat/common/utils/wecom/RSAUtil.java b/linkwe-common/src/main/java/com/linkwechat/common/utils/wecom/RSAUtil.java
index 8a4d30c760fc963a22788c8fe3efb86650abe1ae..a959faebbb05f0288c45321ad4b10aefb64ee9f6 100644
--- a/linkwe-common/src/main/java/com/linkwechat/common/utils/wecom/RSAUtil.java
+++ b/linkwe-common/src/main/java/com/linkwechat/common/utils/wecom/RSAUtil.java
@@ -1,20 +1,18 @@
package com.linkwechat.common.utils.wecom;
-import sun.security.util.DerInputStream;
-import sun.security.util.DerValue;
+import org.bouncycastle.openssl.PEMKeyPair;
+import org.bouncycastle.openssl.PEMParser;
+import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import java.io.IOException;
-import java.math.BigInteger;
-import java.security.InvalidKeyException;
-import java.security.KeyFactory;
-import java.security.NoSuchAlgorithmException;
-import java.security.PrivateKey;
-import java.security.spec.InvalidKeySpecException;
-import java.security.spec.RSAPrivateCrtKeySpec;
+import java.io.Reader;
+import java.io.StringReader;
+import java.nio.charset.StandardCharsets;
+import java.security.*;
import java.util.Base64;
/**
@@ -26,51 +24,42 @@ public class RSAUtil {
/**
* RSA pkcs1 2048bit 解密工具,
* 获取私钥PrivateKey
+ *
* @param privKeyPEM 2048bit pkcs1格式,base64编码后的RSA字符串
- * @return PrivateKey,用于解密 decryptRSA
+ * @return PrivateKey, 用于解密 decryptRSA
* @throws IOException 异常
- * @throws NoSuchAlgorithmException 异常
- * @throws InvalidKeySpecException 异常
*/
- public static PrivateKey getPrivateKey(String privKeyPEM) throws IOException, NoSuchAlgorithmException, InvalidKeySpecException {
- String privKeyPEMnew = privKeyPEM.replaceAll("\\r\\n", "")//看看保存到数据库的这个字符是不是有\r,如果没有,那就只需要替换掉"\\n"
- .replaceAll("\n", "")
- .replace("-----BEGIN RSA PRIVATE KEY-----", "")
- .replace("-----END RSA PRIVATE KEY-----", "");
- byte[] bytes = java.util.Base64.getDecoder().decode(privKeyPEMnew);
- DerInputStream derReader = new DerInputStream(bytes);
- DerValue[] seq = derReader.getSequence(0);
- BigInteger modulus = seq[1].getBigInteger();
- BigInteger publicExp = seq[2].getBigInteger();
- BigInteger privateExp = seq[3].getBigInteger();
- BigInteger prime1 = seq[4].getBigInteger();
- BigInteger prime2 = seq[5].getBigInteger();
- BigInteger exp1 = seq[6].getBigInteger();
- BigInteger exp2 = seq[7].getBigInteger();
- BigInteger crtCoef = seq[8].getBigInteger();
- RSAPrivateCrtKeySpec keySpec = new RSAPrivateCrtKeySpec(modulus, publicExp, privateExp, prime1, prime2, exp1, exp2, crtCoef);
- KeyFactory keyFactory = KeyFactory.getInstance("RSA");
- PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
+ public static PrivateKey getPrivateKey(String privKeyPEM) throws IOException {
+ PrivateKey privateKey = null;
+ Reader privateKeyReader = new StringReader(privKeyPEM);
+ PEMParser privatePemParser = new PEMParser(privateKeyReader);
+ Object privateObject = privatePemParser.readObject();
+ if (privateObject instanceof PEMKeyPair) {
+ PEMKeyPair pemKeyPair = (PEMKeyPair) privateObject;
+ JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");
+ privateKey = converter.getPrivateKey(pemKeyPair.getPrivateKeyInfo());
+ }
return privateKey;
}
/**
* RSA pkcs1 2048bit 解密工具,
- * @param str 被解密的字符串
+ *
+ * @param str 被解密的字符串
* @param privateKey 私钥对象 从 getPrivateKey 获取
* @return 解密后数据
- * @throws NoSuchPaddingException 异常
- * @throws NoSuchAlgorithmException 异常
- * @throws InvalidKeyException 异常
- * @throws BadPaddingException 异常
+ * @throws NoSuchPaddingException 异常
+ * @throws NoSuchAlgorithmException 异常
+ * @throws InvalidKeyException 异常
+ * @throws BadPaddingException 异常
* @throws IllegalBlockSizeException 异常
*/
- public static String decryptRSA(String str, PrivateKey privateKey) throws NoSuchPaddingException,
- NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
- Cipher cipher = Cipher.getInstance("RSA");
- cipher.init(Cipher.DECRYPT_MODE, privateKey);
- byte[] randomkeybyte = Base64.getDecoder().decode(str);
- byte[] finalrandomkeybyte = cipher.doFinal(randomkeybyte);
- return new String(finalrandomkeybyte);
+ public static String decryptRSA(String str, PrivateKey privateKey) throws NoSuchPaddingException,
+ NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, NoSuchProviderException {
+ Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
+ Cipher rsa = Cipher.getInstance("RSA/ECB/PKCS1Padding", "BC");
+ rsa.init(Cipher.DECRYPT_MODE, privateKey);
+ byte[] utf8 = rsa.doFinal(Base64.getDecoder().decode(str));
+ return new String(utf8, StandardCharsets.UTF_8);
}
}
diff --git a/linkwe-common/src/main/java/com/tencent/wework/Finance.java b/linkwe-common/src/main/java/com/tencent/wework/Finance.java
index 2c74ce95d868cd6661d1f6d18d52edf975fb3b86..935920bef0a20c659d7b0996b1b3ed1446247a0d 100644
--- a/linkwe-common/src/main/java/com/tencent/wework/Finance.java
+++ b/linkwe-common/src/main/java/com/tencent/wework/Finance.java
@@ -118,7 +118,7 @@ public class Finance {
System.loadLibrary("libcurl");
System.loadLibrary("WeWorkFinanceSdk");
} else {
- System.load("/var/jenkins_home/app/projects/libWeWorkFinanceSdk_Java.so");
+ System.load("/data/jenkins_home/app/projects/libWeWorkFinanceSdk_Java.so");
}
}
diff --git a/linkwe-common/src/main/java/com/tencent/wework/FinanceUtils.java b/linkwe-common/src/main/java/com/tencent/wework/FinanceUtils.java
index b6e29908782f018695eeaa010c41e6a1b268666a..ba9a8dc7c21dcd76f1ec7c2c19479d7def6009dc 100644
--- a/linkwe-common/src/main/java/com/tencent/wework/FinanceUtils.java
+++ b/linkwe-common/src/main/java/com/tencent/wework/FinanceUtils.java
@@ -3,16 +3,20 @@ package com.tencent.wework;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
+import com.linkwechat.common.config.CosConfig;
import com.linkwechat.common.config.RuoYiConfig;
import com.linkwechat.common.constant.WeConstans;
import com.linkwechat.common.core.redis.RedisCache;
import com.linkwechat.common.utils.DateUtils;
import com.linkwechat.common.utils.StringUtils;
+import com.linkwechat.common.utils.file.FileUploadUtils;
+import com.linkwechat.common.utils.spring.SpringUtils;
import com.linkwechat.common.utils.uuid.IdUtils;
import com.linkwechat.common.utils.wecom.RSAUtil;
import lombok.extern.slf4j.Slf4j;
import java.io.File;
+import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.PrivateKey;
import java.util.ArrayList;
@@ -244,6 +248,7 @@ public class FinanceUtils {
getPath(realJsonData, msgType, fileName);
}
+ /*//本地存储
private static void getPath(JSONObject realJsonData, String msgType, String fileName) {
String filePath = getFilePath(msgType);
JSONObject data = Optional.ofNullable(realJsonData.getJSONObject(msgType))
@@ -254,7 +259,39 @@ public class FinanceUtils {
} catch (Exception e) {
e.printStackTrace();
}
- data.put("attachment", filePath + "/" + fileName);
+ String currentDir = StringUtils.substring(filePath,downloadWeWorkPath.length()+1);
+ String pathFileName;
+ if(org.apache.commons.lang3.StringUtils.isBlank(currentDir)){
+ pathFileName = Constants.RESOURCE_PREFIX + "/" +fileName;
+ }else {
+ pathFileName = Constants.RESOURCE_PREFIX + "/" + currentDir + "/" + fileName;
+ }
+ data.put("attachment", pathFileName);
+ if (realJsonData.containsKey("content")) {
+ realJsonData.put("content", data);
+ } else {
+ realJsonData.put(msgType, data);
+ }
+
+ }*/
+
+ //云存储
+ private static void getPath(JSONObject realJsonData, String msgType, String fileName) {
+ String filePath = getFilePath(msgType);
+ JSONObject data = Optional.ofNullable(realJsonData.getJSONObject(msgType))
+ .orElse(realJsonData.getJSONObject("content"));
+ String sdkfileid = data.getString("sdkfileid");
+ try {
+ getMediaData(sdkfileid, "", "", filePath, fileName);
+ CosConfig cosConfig = SpringUtils.getBean(CosConfig.class);
+ String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
+ StringBuilder cosUrl = new StringBuilder(cosConfig.getImgUrlPrefix());
+ String cosFilePath = FileUploadUtils.upload2Cos(new FileInputStream(new File(filePath, fileName)), suffix, cosConfig);
+ cosUrl.append(cosFilePath);
+ data.put("attachment", cosUrl.toString());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
if (realJsonData.containsKey("content")) {
realJsonData.put("content", data);
} else {
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 0d4f3377285ddfbbfba0d65717f31330eb76627d..12a14cff82eedae15f66e38e6d94c76c8a8b9622 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
@@ -126,6 +126,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
.antMatchers("/wecom/user/getUserInfo").anonymous()
// .antMatchers("/common/uploadFile2Cos").anonymous()
.antMatchers("/wecom/material/temporaryMaterialMediaId").anonymous()
+ .antMatchers("/wecom/portrait/**").anonymous()
+
// 除上面外的所有请求全部需要鉴权认证
.anyRequest().authenticated()
.and()
diff --git a/linkwe-generator/src/main/resources/vm/java/sub-domain.java.vm b/linkwe-generator/src/main/resources/vm/java/sub-domain.java.vm
new file mode 100644
index 0000000000000000000000000000000000000000..a3f53ebab9896cd40de0fd40d80153c3d2ba812e
--- /dev/null
+++ b/linkwe-generator/src/main/resources/vm/java/sub-domain.java.vm
@@ -0,0 +1,76 @@
+package ${packageName}.domain;
+
+#foreach ($import in $subImportList)
+import ${import};
+#end
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * ${subTable.functionName}对象 ${subTableName}
+ *
+ * @author ${author}
+ * @date ${datetime}
+ */
+public class ${subClassName} extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+#foreach ($column in $subTable.columns)
+#if(!$table.isSuperColumn($column.javaField))
+ /** $column.columnComment */
+#if($column.list)
+#set($parentheseIndex=$column.columnComment.indexOf("("))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if($parentheseIndex != -1)
+ @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+#elseif($column.javaType == 'Date')
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd")
+#else
+ @Excel(name = "${comment}")
+#end
+#end
+ private $column.javaType $column.javaField;
+
+#end
+#end
+#foreach ($column in $subTable.columns)
+#if(!$table.isSuperColumn($column.javaField))
+#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
+#set($AttrName=$column.javaField)
+#else
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+#end
+ public void set${AttrName}($column.javaType $column.javaField)
+ {
+ this.$column.javaField = $column.javaField;
+ }
+
+ public $column.javaType get${AttrName}()
+ {
+ return $column.javaField;
+ }
+#end
+#end
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+#foreach ($column in $subTable.columns)
+#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
+#set($AttrName=$column.javaField)
+#else
+#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+#end
+ .append("${column.javaField}", get${AttrName}())
+#end
+ .toString();
+ }
+}
diff --git a/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/GroupChatStatisticTask.java b/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/GroupChatStatisticTask.java
new file mode 100644
index 0000000000000000000000000000000000000000..faa18529c4424c80834fabe8a82c78a2f39614b3
--- /dev/null
+++ b/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/GroupChatStatisticTask.java
@@ -0,0 +1,104 @@
+package com.linkwechat.quartz.task;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.linkwechat.common.utils.bean.BeanUtils;
+import com.linkwechat.wecom.client.WeCustomerClient;
+import com.linkwechat.wecom.domain.WeGroup;
+import com.linkwechat.wecom.domain.WeGroupStatistic;
+import com.linkwechat.wecom.domain.dto.GroupChatStatisticDto;
+import com.linkwechat.wecom.domain.query.GroupChatStatisticQuery;
+import com.linkwechat.wecom.service.IWeGroupService;
+import com.linkwechat.wecom.service.IWeGroupStatisticService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author sxw
+ * @description 群聊数据统计
+ * @date 2021/2/24 0:42
+ **/
+@Slf4j
+@Component("GroupChatStatisticTask")
+public class GroupChatStatisticTask {
+ @Autowired
+ private WeCustomerClient weCustomerClient;
+ @Autowired
+ private IWeGroupService weGroupService;
+ @Autowired
+ private IWeGroupStatisticService weGroupStatisticService;
+
+ public void getGroupChatData() {
+ log.info("群聊数据统计>>>>>>>>>>>>>>>>>>>启动");
+ List weGroupList = weGroupService.list(new LambdaQueryWrapper().eq(WeGroup::getStatus, 0));
+ log.info("群聊数据统计>>>>>>>>>>>>>>>>>>>weGroupList:{}",weGroupList.size());
+ if (CollectionUtil.isNotEmpty(weGroupList)){
+ List weGroupStatisticList = new ArrayList<>();
+ GroupChatStatisticQuery query = new GroupChatStatisticQuery();
+ //前一天的数据
+ Long startTime = strToDate(-1, 0);
+ Long endTime = strToDate(-1, 1);
+ query.setDay_begin_time(startTime);
+ query.setDay_end_time(endTime);
+ weGroupList.forEach(weGroup -> {
+ GroupChatStatisticQuery.OwnerFilter ownerFilter = new GroupChatStatisticQuery.OwnerFilter();
+ List idList = new ArrayList<>();
+ idList.add(weGroup.getOwner());
+ ownerFilter.setUserid_list(idList);
+ query.setOwnerFilter(ownerFilter);
+ try {
+ GroupChatStatisticDto groupChatStatistic = weCustomerClient.getGroupChatStatisticGroupByDay(query);
+ List items = groupChatStatistic.getItems();
+ if(CollectionUtil.isNotEmpty(items)){
+ items.forEach(groupchatStatisticData -> {
+ WeGroupStatistic weGroupStatistic = new WeGroupStatistic();
+ GroupChatStatisticDto.StatisticData data = groupchatStatisticData.getData();
+ BeanUtils.copyPropertiesignoreOther(data, weGroupStatistic);
+ weGroupStatistic.setChatId(weGroup.getChatId());
+ weGroupStatistic.setStatTime(groupchatStatisticData.getStatTime());
+ weGroupStatisticList.add(weGroupStatistic);
+ });
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ log.error("群聊数据拉取失败: ownerFilter:【{}】,ex:【{}】", JSONObject.toJSONString(ownerFilter),e.getStackTrace());
+ }
+ });
+ weGroupStatisticService.saveBatch(weGroupStatisticList);
+ }
+ }
+
+ private Long strToDate(int days, Integer type) {
+ Long time = null;
+ DateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ Date date = null;
+ Calendar cale = Calendar.getInstance();
+ cale.add(Calendar.DATE, days);
+ String tarday = new SimpleDateFormat("yyyy-MM-dd").format(cale.getTime());
+ if (type.equals(0)) {
+ tarday += " 00:00:00";
+ } else {
+ tarday += " 23:59:59";
+ }
+ // String转Date
+ try {
+ date = format2.parse(tarday);
+ System.out.println(date.getTime());
+ time = date.getTime() / 1000;
+ System.out.println(time.toString());
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ return time;
+ }
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..9b6ff39cb4343f3a0b0e2fc864068c64b0316dc3
--- /dev/null
+++ b/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/PageHomeDataTask.java
@@ -0,0 +1,175 @@
+package com.linkwechat.quartz.task;
+
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.linkwechat.common.constant.WeConstans;
+import com.linkwechat.common.core.redis.RedisCache;
+import com.linkwechat.wecom.domain.WeUser;
+import com.linkwechat.wecom.domain.dto.WePageCountDto;
+import com.linkwechat.wecom.domain.dto.WePageStaticDataDto;
+import com.linkwechat.wecom.domain.query.WePageStateQuery;
+import com.linkwechat.wecom.service.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author danmo
+ * @description 首页数据统计
+ * @date 2021/2/23 23:51
+ **/
+@Slf4j
+@Component("PageHomeDataTask")
+public class PageHomeDataTask {
+ @Autowired
+ private IWeCorpAccountService weCorpAccountService;
+
+ @Autowired
+ private IWeUserService weUserService;
+
+ @Autowired
+ private IWeCustomerService weCustomerService;
+
+ @Autowired
+ private IWeGroupService weGroupService;
+
+ @Autowired
+ private IWeGroupMemberService weGroupMemberService;
+
+ @Autowired
+ private IWeUserBehaviorDataService weUserBehaviorDataService;
+
+ @Autowired
+ private IWeGroupStatisticService weGroupStatisticService;
+
+ @Autowired
+ private RedisCache redisCache;
+
+
+ public void getPageHomeDataData(){
+ getCorpBasicData();
+ getCorpRealTimeData();
+ }
+
+ public void getCorpBasicData(){
+ //查询当前使用企业
+ //WeCorpAccount weCorpAccount = weCorpAccountService.findValidWeCorpAccount();
+ //String corpId = weCorpAccount.getCorpId();
+ Map totalMap = new HashMap<>(16);
+ //企业成员总数
+ int userCount = weUserService.count(new LambdaQueryWrapper().eq(WeUser::getIsActivate, WeConstans.WE_USER_IS_ACTIVATE));
+ //客户总人数
+ int customerCount = weCustomerService.count();
+ //客户群总数
+ int groupCount = weGroupService.count();
+ //群成员总数
+ int groupMemberCount = weGroupMemberService.count();
+
+ totalMap.put("userCount",userCount);
+ totalMap.put("customerCount",customerCount);
+ totalMap.put("groupCount",groupCount);
+ totalMap.put("groupMemberCount",groupMemberCount);
+ redisCache.setCacheMap("getCorpBasicData",totalMap);
+ }
+
+
+ public void getCorpRealTimeData(){
+ WePageStaticDataDto wePageStaticDataDto = new WePageStaticDataDto();
+ //今天
+ wePageStaticDataDto.setToday(getTodayData());
+ wePageStaticDataDto.setWeek(getWeekData());
+ wePageStaticDataDto.setMonth(getMonthData());
+ wePageStaticDataDto.setUpdateTime(DateUtil.now());
+ redisCache.setCacheObject("getCorpRealTimeData",wePageStaticDataDto);
+ }
+
+ private WePageStaticDataDto.PageStaticData getTodayData(){
+ /**
+ * 今日
+ */
+ String today = DateUtil.today();
+ String yesterday = DateUtil.yesterday().toDateStr();
+ //客户统计
+ WePageCountDto newTime = weUserBehaviorDataService.getCountDataByDay(today,"day");
+ /**
+ * 昨日
+ */
+ //客户统计
+ WePageCountDto lastTime = weUserBehaviorDataService.getCountDataByDay(yesterday,"day");
+
+ WePageStaticDataDto.PageStaticData pageStaticData = setPageStaticData(newTime, lastTime);
+
+ WePageStateQuery wePageStateQuery = new WePageStateQuery();
+ //获取15天前的时间
+ wePageStateQuery.setStartTime(DateUtil.offsetDay(new Date(), -15).toDateStr());
+ wePageStateQuery.setEndTime(today);
+ wePageStateQuery.setFew(14);
+ List dayCountData = weUserBehaviorDataService.getDayCountData(wePageStateQuery);
+ pageStaticData.setDataList(dayCountData);
+
+ return pageStaticData;
+ }
+
+ private WePageStaticDataDto.PageStaticData getWeekData(){
+ /**
+ * 本周
+ */
+ //客户统计
+ WePageCountDto newTime = weUserBehaviorDataService.getCountDataByDay(DateUtil.today(),"week");
+ /**
+ * 上周
+ */
+ //客户统计
+ WePageCountDto lastTime = weUserBehaviorDataService.getCountDataByDay(DateUtil.lastWeek().toDateStr(),"week");
+
+ WePageStaticDataDto.PageStaticData pageStaticData = setPageStaticData(newTime, lastTime);
+
+ WePageStateQuery wePageStateQuery = new WePageStateQuery();
+ wePageStateQuery.setFew(5);
+ List weekCountData = weUserBehaviorDataService.getWeekCountData(wePageStateQuery);
+ pageStaticData.setDataList(weekCountData);
+
+ return pageStaticData;
+ }
+
+ private WePageStaticDataDto.PageStaticData getMonthData(){
+ /**
+ * 本周
+ */
+ //客户统计
+ WePageCountDto newTime = weUserBehaviorDataService.getCountDataByDay(DateUtil.today(),"month");
+ /**
+ * 上周
+ */
+ //客户统计
+ WePageCountDto lastTime = weUserBehaviorDataService.getCountDataByDay(DateUtil.lastMonth().toDateStr(),"month");
+
+ WePageStaticDataDto.PageStaticData pageStaticData = setPageStaticData(newTime, lastTime);
+
+ WePageStateQuery wePageStateQuery = new WePageStateQuery();
+ wePageStateQuery.setFew(5);
+ List monthCountData = weUserBehaviorDataService.getMonthCountData(wePageStateQuery);
+ pageStaticData.setDataList(monthCountData);
+
+ return pageStaticData;
+ }
+
+
+ private WePageStaticDataDto.PageStaticData setPageStaticData(WePageCountDto nowTime,WePageCountDto lastTime){
+ WePageStaticDataDto.PageStaticData pageStaticData = new WePageStaticDataDto.PageStaticData();
+
+ pageStaticData.setNewApplyCnt(nowTime.getNewApplyCnt());
+ pageStaticData.setNewApplyCntDiff(nowTime.getNewApplyCnt() - lastTime.getNewApplyCnt());
+ pageStaticData.setNegativeFeedbackCnt(nowTime.getNegativeFeedbackCnt());
+ pageStaticData.setNegativeFeedbackCntDiff(nowTime.getNegativeFeedbackCnt() - lastTime.getNegativeFeedbackCnt());
+ pageStaticData.setNewContactCnt(nowTime.getNewContactCnt());
+ pageStaticData.setNewContactCntDiff(nowTime.getNewContactCnt() - lastTime.getNewContactCnt());
+
+ return pageStaticData;
+ }
+}
diff --git a/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/RyTask.java b/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/RyTask.java
index 1d20f365aa09bed9f9f7882f3526a74248647006..a548c3817c7c5531f5534977422e146f1865ccf3 100644
--- a/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/RyTask.java
+++ b/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/RyTask.java
@@ -3,7 +3,6 @@ package com.linkwechat.quartz.task;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
-import com.google.common.collect.Lists;
import com.linkwechat.common.constant.WeConstans;
import com.linkwechat.common.core.elasticsearch.ElasticSearch;
import com.linkwechat.common.core.redis.RedisCache;
@@ -20,6 +19,7 @@ import org.elasticsearch.search.sort.SortBuilder;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.IOException;
@@ -27,7 +27,6 @@ import java.util.List;
import java.util.Optional;
import java.util.concurrent.Semaphore;
import java.util.concurrent.atomic.AtomicLong;
-import java.util.function.Consumer;
/**
* 定时任务调度测试
@@ -55,6 +54,9 @@ public class RyTask {
@Autowired
private IWeCustomerMessageService weCustomerMessageService;
+ @Value("${wecome.chatKey}")
+ private String chartKey;
+
public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i) {
System.out.println(StringUtils.format("执行多参方法: 字符串类型{},布尔类型{},长整型{},浮点型{},整形{}", s, b, l, d, i));
@@ -72,7 +74,7 @@ public class RyTask {
public void FinanceTask(String corpId, String secret) throws IOException {
log.info("执行有参方法: params:{},{}", corpId, secret);
//创建索引
- elasticSearch.createIndex2(WeConstans.WECOM_FINANCE_INDEX, elasticSearch.getFinanceMapping());
+ elasticSearch.createIndex2(chartKey, elasticSearch.getFinanceMapping());
//从缓存中获取消息标识
Object seqObject = Optional.ofNullable(redisCache.getCacheObject(WeConstans.CONTACT_SEQ_KEY)).orElse(0L);
@@ -92,9 +94,7 @@ public class RyTask {
List elasticSearchEntities = weChatContactMappingService.saveWeChatContactMapping(chatDataList);
//获取敏感行为命中信息
weSensitiveActHitService.hitWeSensitiveAct(chatDataList);
- List>> consumerList = Lists.newArrayList();
- consumerList.add(weSensitiveService::hitSensitive);
- elasticSearch.insertBatchAsync(WeConstans.WECOM_FINANCE_INDEX, elasticSearchEntities, consumerList);
+ elasticSearch.insertBatchAsync(chartKey, elasticSearchEntities, weSensitiveService::hitSensitive);
} catch (Exception e) {
log.error("消息处理异常:ex:{}", e);
e.printStackTrace();
@@ -122,7 +122,7 @@ public class RyTask {
SortBuilder> sortBuilderPrice = SortBuilders.fieldSort(WeConstans.CONTACT_SEQ_KEY).order(SortOrder.DESC);
searchSourceBuilder.sort(sortBuilderPrice);
searchSourceBuilder.size(1);
- List searchResultList = elasticSearch.search(WeConstans.WECOM_FINANCE_INDEX, searchSourceBuilder, JSONObject.class);
+ List searchResultList = elasticSearch.search(chartKey, searchSourceBuilder, JSONObject.class);
searchResultList.stream().findFirst().ifPresent(result -> {
index.set(result.getLong(WeConstans.CONTACT_SEQ_KEY) + 1);
});
@@ -161,7 +161,7 @@ public class RyTask {
semaphore.acquire();
if (s.getMessageInfo() != null && s.getMessageId() != null || (s.getMessageInfo().getPushType().equals(WeConstans.SEND_MESSAGE_CUSTOMER)
- && CollectionUtils.isNotEmpty(s.getCustomersInfo())) ||(s.getMessageInfo().getPushType().equals(WeConstans.SEND_MESSAGE_GROUP)
+ && CollectionUtils.isNotEmpty(s.getCustomersInfo())) || (s.getMessageInfo().getPushType().equals(WeConstans.SEND_MESSAGE_GROUP)
&& CollectionUtils.isNotEmpty(s.getGroupsInfo()))) {
weCustomerMessageService.sendMessgae(s.getMessageInfo(), s.getMessageId(), s.getCustomersInfo(), s.getGroupsInfo());
diff --git a/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/UserBehaviorDataTak.java b/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/UserBehaviorDataTak.java
new file mode 100644
index 0000000000000000000000000000000000000000..b2d718490206c17c6f6a0f17f1b456e68592e180
--- /dev/null
+++ b/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/UserBehaviorDataTak.java
@@ -0,0 +1,113 @@
+package com.linkwechat.quartz.task;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.dtflys.forest.exceptions.ForestRuntimeException;
+import com.linkwechat.common.constant.WeConstans;
+import com.linkwechat.common.utils.bean.BeanUtils;
+import com.linkwechat.wecom.client.WeCustomerClient;
+import com.linkwechat.wecom.domain.WeUser;
+import com.linkwechat.wecom.domain.WeUserBehaviorData;
+import com.linkwechat.wecom.domain.dto.UserBehaviorDataDto;
+import com.linkwechat.wecom.domain.query.UserBehaviorDataQuery;
+import com.linkwechat.wecom.service.IWeUserBehaviorDataService;
+import com.linkwechat.wecom.service.IWeUserService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author sxw
+ * @description 联系客户统计
+ * @date 2021/2/24 0:41
+ **/
+@Slf4j
+@Component("UserBehaviorDataTak")
+public class UserBehaviorDataTak {
+ @Autowired
+ private WeCustomerClient weCustomerClient;
+ @Autowired
+ private IWeUserService weUserService;
+ @Autowired
+ private IWeUserBehaviorDataService weUserBehaviorDataService;
+
+ private final int offset = 500;
+
+ public void getUserBehaviorData() {
+ log.info("联系客户统计>>>>>>>>>>>>>>>>>>>启动");
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper().eq(WeUser::getIsActivate, WeConstans.WE_USER_IS_ACTIVATE);
+ int userCount = weUserService.count(wrapper);
+ log.info("联系客户统计>>>>>>>>>>>>>>>>>>>userCount:{}",userCount);
+ double num = 1;
+ if (userCount > offset) {
+ num = Math.ceil((double) userCount / offset);
+ }
+ int temp = 0;
+ for (int i = 0; i < num; i++) {
+ wrapper.last("limit " + temp + "," + offset);
+ List list = weUserService.list(wrapper);
+ if (CollectionUtil.isNotEmpty(list)) {
+ List dataList = new ArrayList<>();
+ UserBehaviorDataQuery query = new UserBehaviorDataQuery();
+ //前一天的数据
+ Long startTime = strToDate(-1, 0);
+ Long endTime = strToDate(-1, 1);
+ query.setStart_time(startTime);
+ query.setEnd_time(endTime);
+ list.forEach(weUser -> {
+ List idList = new ArrayList<>();
+ idList.add(weUser.getUserId());
+ query.setUserid(idList);
+ try {
+ UserBehaviorDataDto userBehaviorData = weCustomerClient.getUserBehaviorData(query);
+ List behaviorDataList = userBehaviorData.getBehaviorData();
+ for (UserBehaviorDataDto.BehaviorData data : behaviorDataList) {
+ WeUserBehaviorData weUserBehaviorData = new WeUserBehaviorData();
+ BeanUtils.copyPropertiesignoreOther(data, weUserBehaviorData);
+ weUserBehaviorData.setUserId(weUser.getUserId());
+ dataList.add(weUserBehaviorData);
+ }
+ } catch (ForestRuntimeException e) {
+ e.printStackTrace();
+ log.error("员工数据拉取失败: userId:【{}】,ex:【{}】",weUser.getUserId(),e.getStackTrace());
+ }
+ });
+ weUserBehaviorDataService.saveBatch(dataList);
+ }
+ temp += offset;
+ }
+
+ }
+
+ private Long strToDate(int days, Integer type) {
+ Long time = null;
+ DateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ Date date = null;
+ Calendar cale = Calendar.getInstance();
+ cale.add(Calendar.DATE, days);
+ String tarday = new SimpleDateFormat("yyyy-MM-dd").format(cale.getTime());
+ if (type.equals(0)) {
+ tarday += " 00:00:00";
+ } else {
+ tarday += " 23:59:59";
+ }
+ // String转Date
+ try {
+ date = format2.parse(tarday);
+ System.out.println(date.getTime());
+ time = date.getTime() / 1000;
+ System.out.println(time.toString());
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ return time;
+ }
+}
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 a5279f1bea0d410cae899f5a0e1ff1115006fb4e..c18256ec21a4efcb8901c723f7c439fa6b535efe 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,15 +1,13 @@
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.linkwechat.wecom.domain.dto.WeCustomerDto;
-import com.linkwechat.wecom.domain.dto.WeResultDto;
-import com.linkwechat.wecom.domain.dto.WeWelcomeMsg;
-import com.linkwechat.wecom.domain.dto.customer.CutomerTagEdit;
-import com.linkwechat.wecom.domain.dto.customer.ExternalUserDetail;
-import com.linkwechat.wecom.domain.dto.customer.ExternalUserList;
-import com.linkwechat.wecom.domain.dto.customer.FollowUserList;
+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 java.util.Map;
@@ -93,5 +91,27 @@ public interface WeCustomerClient {
ExternalUserDetail unionidToExternalUserid(@DataObject ExternalUserDetail.ExternalContact unionid);
+ /**
+ * 联系客户统计
+ * @return
+ */
+ @Request(url = "/externalcontact/get_user_behavior_data",
+ type = "POST")
+ UserBehaviorDataDto getUserBehaviorData(@JSONBody UserBehaviorDataQuery query);
+ /**
+ * 群聊数据统计(按群主聚合的方式)
+ * @return
+ */
+ @Request(url = "/externalcontact/groupchat/statistic",
+ type = "POST")
+ GroupChatStatisticDto getGroupChatStatistic(@JSONBody GroupChatStatisticQuery query);
+
+ /**
+ * 群聊数据统计(按自然日聚合的方式)
+ * @return
+ */
+ @Request(url = "/externalcontact/groupchat/statistic_group_by_day",
+ type = "POST")
+ GroupChatStatisticDto getGroupChatStatisticGroupByDay(@JSONBody GroupChatStatisticQuery query);
}
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 eda560e49af80f4d8aaf9821fb7668be88f18f42..c19ef8504473e213bc392fd7610618a31ad56646 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
@@ -2,6 +2,8 @@ package com.linkwechat.wecom.domain;
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.Data;
/**
@@ -10,6 +12,7 @@ import lombok.Data;
* @author kewen
* @date 2021-02-19
*/
+@ApiModel
@Data
public class WeCommunityNewGroup extends BaseEntity {
@@ -19,23 +22,57 @@ public class WeCommunityNewGroup extends BaseEntity {
private Long newGroupId= SnowFlakeUtil.nextId();
/**
- *员工活码ID
+ * 员工活码名称
*/
- private Long empleCodeId;
+ @ApiModelProperty("员工活码名称")
+ private String empleCodeName;
/**
- * 员工活码名称
+ * 活动场景
*/
- private String empleCodeName;
+ @ApiModelProperty("活动场景")
+ private String activityScene;
+
+ /**
+ * 欢迎语
+ */
+ @ApiModelProperty("欢迎语")
+ private String welcomeMsg;
+
+ /**
+ * 二维码链接
+ */
+ @ApiModelProperty("二维码链接")
+ private String qrCode;
+
+ /**
+ * 客户添加时无需经过确认自动成为好友:1:是;0:否
+ */
+ @ApiModelProperty("客户添加时无需经过确认自动成为好友:1:是;0:否")
+ private Boolean isJoinConfirmFriends;
+
+ /**
+ * 添加好友数
+ */
+ @ApiModelProperty("添加好友数")
+ private Integer joinFriendNums;
/**
* 群活码ID
*/
+ @ApiModelProperty("群活码ID")
private Long groupCodeId;
+ /**
+ * 素材的id
+ */
+ @ApiModelProperty("素材的id")
+ private Long mediaId;
+
/**
* 0 未删除 1 已删除
*/
+ @ApiModelProperty("0 未删除 1 已删除")
private int delFlag;
}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerAddGroup.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerAddGroup.java
new file mode 100644
index 0000000000000000000000000000000000000000..281e51730a130de9985e017e7a087cfa5409285a
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerAddGroup.java
@@ -0,0 +1,27 @@
+package com.linkwechat.wecom.domain;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @description:
+ * @author: HaoN
+ * @create: 2021-03-08 17:04
+ **/
+@Data
+public class WeCustomerAddGroup {
+ //群id
+ private String chatId;
+ //群名
+ private String groupName;
+ //群主名
+ private String ownerName;
+ //群成员数
+ private Integer groupMemberNum;
+ //加入时间
+ private Date joinTime;
+
+ //是否共同群 0:不是共同群;1:是共同群
+ private Integer commonGroup;
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerAddUser.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerAddUser.java
new file mode 100644
index 0000000000000000000000000000000000000000..010b98fbf3961d77820a1c4cebd9e6b66b023fb7
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerAddUser.java
@@ -0,0 +1,22 @@
+package com.linkwechat.wecom.domain;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @description: 客户添加人
+ * @author: HaoN
+ * @create: 2021-03-08 15:47
+ **/
+@Data
+public class WeCustomerAddUser {
+ //员工名称
+ private String userName;
+ //员工id
+ private String userId;
+ //员工头像
+ private String headImageUrl;
+ //创建时间
+ private Date createTime;
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerPortrait.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerPortrait.java
new file mode 100644
index 0000000000000000000000000000000000000000..d87e26eccce4084b4264c481f0b195c89cac562c
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerPortrait.java
@@ -0,0 +1,48 @@
+package com.linkwechat.wecom.domain;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @description: 客户画像实体VO
+ * @author: HaoN
+ * @create: 2021-03-03 11:49
+ **/
+@Data
+public class WeCustomerPortrait {
+ //外部联系人id
+ private String externalUserid;
+ //企业员工id
+ private String userId;
+ //客户与企业员工关系id
+ private String flowerCustomerRelId;
+ //客户昵称
+ private String name;
+ //客户备注
+ private String remark;
+ //备注客户手机号
+ private String remarkMobiles;
+ //客户生日
+ private Date birthday;
+ //邮箱
+ private String email;
+ //地址
+ private String address;
+ //qq
+ private String qq;
+ //职业
+ private String position;
+ //公司
+ private String remarkCorpName;
+ //描述
+ private String description;
+
+ //客户标签
+ private List weTagGroupList;
+
+ //客户社交关系
+ private WeCustomerSocialConn socialConn;
+
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerPortraitTag.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerPortraitTag.java
new file mode 100644
index 0000000000000000000000000000000000000000..7b0aaea6ae60a6061a7f87e24e68062e325eea53
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerPortraitTag.java
@@ -0,0 +1,12 @@
+package com.linkwechat.wecom.domain;
+
+import lombok.Data;
+
+/**
+ * @description: 客户画像标签
+ * @author: HaoN
+ * @create: 2021-03-04 12:31
+ **/
+@Data
+public class WeCustomerPortraitTag {
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerSocialConn.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerSocialConn.java
new file mode 100644
index 0000000000000000000000000000000000000000..b5a18c249d22e3eaa76b8d3584a89d4ca760c9e7
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerSocialConn.java
@@ -0,0 +1,16 @@
+package com.linkwechat.wecom.domain;
+
+import lombok.Data;
+
+/**
+ * 客户社交关系
+ */
+@Data
+public class WeCustomerSocialConn {
+ /**添加员工数*/
+ private Integer addEmployeNum;
+ /**添加群聊数*/
+ private Integer addGroupNum;
+ /**共同群聊数*/
+ private Integer commonGroupNum;
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..2b601c25330d38ab560cb0ecae3d82ef7c1bb78b
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerTrajectory.java
@@ -0,0 +1,36 @@
+package com.linkwechat.wecom.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.sql.Time;
+import java.util.Date;
+
+/**
+ * 活动轨迹相关
+ */
+@Data
+@TableName("we_customer_trajectory")
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class WeCustomerTrajectory {
+ @TableId
+ private String id;
+ //轨迹类型(1:信息动态;2:社交动态;3:活动规则;4:待办动态)
+ private Integer trajectoryType;
+ //外部联系人id
+ private String externalUserid;
+ //文案内容
+ private String content;
+ //处理日期
+ private Date createDate;
+ //处理时间
+ private Time createTime;
+ //0:正常;1:删除;2:完成
+ private String status;
+}
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 a69fd2b8d865e71dadcc92d6249359cd5b7dd097..2d2e22c9b3b6a050216a594e67eb6bb447110e1a 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
@@ -5,6 +5,8 @@ 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;
import lombok.Data;
@@ -14,6 +16,7 @@ import lombok.Data;
* @author ruoyi
* @date 2020-10-04
*/
+@ApiModel
@Data
@TableName("we_emple_code_tag")
public class WeEmpleCodeTag
@@ -25,15 +28,19 @@ public class WeEmpleCodeTag
private Long id= SnowFlakeUtil.nextId();
/** 标签id */
+ @ApiModelProperty("标签id")
private String tagId;
/** 员工活码id */
+ @ApiModelProperty("员工活码id")
private Long empleCodeId;
/** 0:正常;2:删除; */
+ @ApiModelProperty("0:正常;2:删除")
private Integer delFlag=new Integer(0);
/** 标签名 */
+ @ApiModelProperty("标签名")
private String tagName;
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 1cf84b2b86fb57a684cd8c95652547cfa2a00825..7a16f622c974763ba9f36ff82b33f6780cd7e3d5 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
@@ -5,6 +5,8 @@ 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;
import lombok.Data;
import java.util.Date;
@@ -16,6 +18,7 @@ import java.util.Date;
* @author ruoyi
* @date 2020-10-04
*/
+@ApiModel
@Data
@TableName("we_emple_code_use_scop")
public class WeEmpleCodeUseScop
@@ -27,21 +30,27 @@ public class WeEmpleCodeUseScop
private Long id = SnowFlakeUtil.nextId();
/** 员工活码id */
+ @ApiModelProperty("员工活码id")
private Long empleCodeId;
/** 业务id类型1:组织机构id,2:成员id */
+ @ApiModelProperty("业务id类型1:组织机构id,2:成员id")
private Integer businessIdType;
/** 活码类型下业务使用人的id */
+ @ApiModelProperty("活码类型下业务使用人的id")
private String businessId;
/** 0:正常;2:删除; */
+ @ApiModelProperty("0:正常;2:删除")
private Integer delFlag=new Integer(0);
/** 活码使用人员名称 */
+ @ApiModelProperty("活码使用人员名称")
private String businessName;
/** 活码使用人员手机号 */
+ @ApiModelProperty("活码使用人员手机号")
@TableField(exist = false)
private String mobile;
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeFlowerCustomerRel.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeFlowerCustomerRel.java
index b2511086328555e70f090e22083b4ca9e4b5841d..a22f4807bd736859ba4d0176074f3bdcd05b5844 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeFlowerCustomerRel.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeFlowerCustomerRel.java
@@ -89,4 +89,23 @@ public class WeFlowerCustomerRel
@TableField(exist = false)
private String endTime;
+
+ /** 备注 */
+ private String remark;
+
+
+ /** 邮件 */
+ private String email;
+
+
+ /** qq */
+ private String qq;
+
+ /**地址*/
+ private String address;
+
+
+
+
+
}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupCode.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupCode.java
index b9dad9cd1c63ddb2225cf2f1ca38794a4848d7ed..f0b35f53f6a8f3af63b3b47ffc10a48959dd16b5 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupCode.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupCode.java
@@ -35,6 +35,11 @@ public class WeGroupCode extends BaseEntity {
*/
private String codeUrl;
+ /**
+ * 二维码的uuid
+ */
+ private String uuid;
+
/**
* 活码头像
*/
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupCodeActual.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupCodeActual.java
index 88678a0082aced6716103b42cf2eb9f47883c699..fc4aaa2ce64194e5454a2ca2b1711aa777585597 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupCodeActual.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupCodeActual.java
@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.linkwechat.common.utils.SnowFlakeUtil;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
@@ -17,6 +19,7 @@ import javax.validation.constraints.NotNull;
* @author ruoyi
* @date 2020-10-07
*/
+@ApiModel
@Data
@TableName("we_group_code_actual")
public class WeGroupCodeActual
@@ -29,37 +32,47 @@ public class WeGroupCodeActual
/** 实际群码 */
@NotNull(message = "实际群活码称不能为空")
+ @ApiModelProperty("实际群码")
private String actualGroupQrCode;
/** 群名称 */
@NotNull(message = "群名称不能为空")
+ @ApiModelProperty("群名称")
private String groupName;
/** 有效期 */
@NotNull(message = "有效期不能为空")
@JsonFormat(pattern = "yyyy-MM-dd")
+ @ApiModelProperty("有效期")
private Date effectTime;
/** 扫码次数限制 */
@NotNull(message = "次数限制不能为空")
+ @ApiModelProperty("扫码次数限制")
private Long scanCodeTimesLimit;
/** 群活码id */
@NotNull(message = "群活码id不能为空")
+ @ApiModelProperty("群活码id")
private Long groupCodeId;
/** 客户群id */
+ @ApiModelProperty("客户群id")
private String chatId;
/** 客户群名称 */
+ @ApiModelProperty("客户群名称")
private String chatGroupName;
/** 扫码次数 */
+ @ApiModelProperty("扫码次数")
private Long scanCodeTimes;
/** 0:正常使用;2:删除; */
+ @ApiModelProperty("0:正常使用;2:删除;")
private Long delFlag;
/** 0:使用中 */
+ @ApiModelProperty("0:使用中")
private Long status;
}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupStatistic.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupStatistic.java
new file mode 100644
index 0000000000000000000000000000000000000000..b554639433756ca78ea88f9b1cd4810f10f76eb0
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupStatistic.java
@@ -0,0 +1,96 @@
+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.fasterxml.jackson.annotation.JsonFormat;
+import com.linkwechat.common.annotation.Excel;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 群聊数据统计数据
+ * 对象 we_group_statistic
+ *
+ * @author ruoyi
+ * @date 2021-02-24
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("we_group_statistic")
+public class WeGroupStatistic implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+
+ /**
+ * 主键id
+ */
+ @TableId(value = "id")
+ private Long id;
+
+ /**
+ * 群主ID
+ */
+ @Excel(name = "群ID")
+ private String chatId;
+
+ /**
+ * 数据日期
+ */
+ @Excel(name = "数据日期", width = 30, dateFormat = "yyyy-MM-dd")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date statTime;
+
+ /**
+ * 新增客户群数量
+ */
+ @Excel(name = "新增客户群数量")
+ private Integer newChatCnt;
+
+ /**
+ * 截至当天客户群总数量
+ */
+ @Excel(name = "截至当天客户群总数量")
+ private Integer chatTotal;
+
+ /**
+ * 截至当天有发过消息的客户群数量
+ */
+ @Excel(name = "截至当天有发过消息的客户群数量")
+ private Integer chatHasMsg;
+
+ /**
+ * 客户群新增群人数
+ */
+ @Excel(name = "客户群新增群人数")
+ private Integer newMemberCnt;
+
+ /**
+ * 截至当天客户群总人数
+ */
+ @Excel(name = "截至当天客户群总人数")
+ private Integer memberTotal;
+
+ /**
+ * 截至当天有发过消息的群成员数
+ */
+ @Excel(name = "截至当天有发过消息的群成员数")
+ private Integer memberHasMsg;
+
+ /**
+ * 截至当天客户群消息总数
+ */
+ @Excel(name = "截至当天客户群消息总数")
+ private Integer msgTotal;
+
+ @TableField(exist = false)
+ private Map params = new HashMap<>();
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeMaterial.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeMaterial.java
index 711b56e7c9cc59e9943024f6c2cfa38f1ffb52bf..fb6af3710a9560922dc733f0915529a567d8d492 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeMaterial.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeMaterial.java
@@ -2,6 +2,8 @@ package com.linkwechat.wecom.domain;
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.Data;
/**
@@ -9,6 +11,7 @@ import lombok.Data;
* @author: KEWEN
* @create: 2020-09-21 21:17
**/
+@ApiModel
@Data
public class WeMaterial extends BaseEntity {
@@ -19,36 +22,43 @@ public class WeMaterial extends BaseEntity {
/**
* 分类id
*/
+ @ApiModelProperty("分类id")
private Long categoryId;
/**
* 本地资源文件地址
*/
+ @ApiModelProperty("本地资源文件地址")
private String materialUrl;
/**
* 文本内容、图片文案
*/
+ @ApiModelProperty("文本内容、图片文案")
private String content;
/**
* 图片名称
*/
+ @ApiModelProperty("图片名称")
private String materialName;
/**
* 摘要
*/
+ @ApiModelProperty("摘要")
private String digest;
/**
* 封面本地资源文件
*/
+ @ApiModelProperty("封面本地资源文件")
private String coverUrl;
/**
* 音频时长
*/
+ @ApiModelProperty("音频时长")
private String audioTime;
}
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 9bf03b0d75d44b6a013ba40f420318c52b40c616..13dd7649ef829ceb6b85dd610cfa7082f6dc14e7 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
@@ -114,7 +114,7 @@ public class WeUser
private String remark;
-
+ @TableField(exist = false)
private String departmentStr;
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeUserBehaviorData.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeUserBehaviorData.java
new file mode 100644
index 0000000000000000000000000000000000000000..08c2f9def33419ed92a5963d8cb4f7065fe1f5fa
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeUserBehaviorData.java
@@ -0,0 +1,95 @@
+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.fasterxml.jackson.annotation.JsonFormat;
+import com.linkwechat.common.annotation.Excel;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 联系客户统计数据 对象 we_user_behavior_data
+ *
+ * @author ruoyi
+ * @date 2021-02-24
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("we_user_behavior_data")
+public class WeUserBehaviorData implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+
+ /**
+ * $column.columnComment
+ */
+ @TableId(value = "id")
+ private Long id;
+
+ /**
+ * 客户id
+ */
+ @Excel(name = "客户id")
+ private String userId;
+
+ /**
+ * 数据日期,为当日0点的时间戳
+ */
+ @Excel(name = "数据日期,为当日0点的时间戳", width = 30, dateFormat = "yyyy-MM-dd")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date statTime;
+
+ /**
+ * 发起申请数
+ */
+ @Excel(name = "发起申请数")
+ private Integer newApplyCnt;
+
+ /**
+ * 新增客户数,成员新添加的客户数量
+ */
+ @Excel(name = "新增客户数,成员新添加的客户数量")
+ private Integer newContactCnt;
+
+ /**
+ * 聊天总数, 成员有主动发送过消息的单聊总数
+ */
+ @Excel(name = "聊天总数, 成员有主动发送过消息的单聊总数")
+ private Integer chatCnt;
+
+ /**
+ * 发送消息数,成员在单聊中发送的消息总数
+ */
+ @Excel(name = "发送消息数,成员在单聊中发送的消息总数")
+ private Integer messageCnt;
+
+ /**
+ * 已回复聊天占比,浮点型,客户主动发起聊天后,成员在一个自然日内有回复过消息的聊天数/客户主动发起的聊天数比例,不包括群聊,仅在确有聊天时返回
+ */
+ @Excel(name = "已回复聊天占比,浮点型,客户主动发起聊天后,成员在一个自然日内有回复过消息的聊天数/客户主动发起的聊天数比例,不包括群聊,仅在确有聊天时返回")
+ private Float replyPercentage;
+
+ /**
+ * 平均首次回复时长
+ */
+ @Excel(name = "平均首次回复时长")
+ private Integer avgReplyTime;
+
+ /**
+ * 删除/拉黑成员的客户数,即将成员删除或加入黑名单的客户数
+ */
+ @Excel(name = "删除/拉黑成员的客户数,即将成员删除或加入黑名单的客户数")
+ private Integer negativeFeedbackCnt;
+
+ @TableField(exist = false)
+ private Map params = new HashMap<>();
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/GroupChatStatisticDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/GroupChatStatisticDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..c52c20147dc7388becd60a153ffae59115b6adbe
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/GroupChatStatisticDto.java
@@ -0,0 +1,68 @@
+package com.linkwechat.wecom.domain.dto;
+
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author danmo
+ */
+@Data
+public class GroupChatStatisticDto {
+
+
+ private List items;
+
+ @Data
+ public static class GroupchatStatisticData {
+
+ /**
+ * 数据日期,为当日0点的时间戳
+ */
+ private Date statTime;
+
+ public void setStatTime(Long statTime) {
+ this.statTime = new Date(statTime * 1000);
+ }
+
+ private StatisticData data;
+
+
+ }
+
+ @Data
+ public static class StatisticData {
+ /**
+ * 新增客户群数量
+ */
+ private Integer newChatCnt;
+ /**
+ * 截至当天客户群总数量
+ */
+ private Integer chatTotal;
+ /**
+ * 截至当天有发过消息的客户群数量
+ */
+ private Integer chatHasMsg;
+ /**
+ * 客户群新增群人数
+ */
+ private Integer newMemberCnt;
+ /**
+ * 截至当天客户群总人数
+ */
+ private Integer memberTotal;
+ /**
+ * 截至当天有发过消息的群成员数
+ */
+ private Integer memberHasMsg;
+ /**
+ * 截至当天客户群消息总数
+ */
+ private Integer msgTotal;
+ }
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/UserBehaviorDataDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/UserBehaviorDataDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..efe07a08098a250b4d81e1cd980369e04ef4da64
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/UserBehaviorDataDto.java
@@ -0,0 +1,59 @@
+package com.linkwechat.wecom.domain.dto;
+
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author danmo
+ */
+@Data
+public class UserBehaviorDataDto{
+
+ private List behaviorData;
+
+ @Data
+ public static class BehaviorData{
+
+ /**
+ * 数据日期,为当日0点的时间戳
+ */
+ private Date statTime;
+
+ public void setStatTime(Long statTime) {
+ this.statTime = new Date(statTime * 1000);
+ }
+
+ /**
+ * 聊天总数, 成员有主动发送过消息的单聊总数。
+ */
+ private Integer chatCnt = 0;
+ /**
+ * 发送消息数,成员在单聊中发送的消息总数。
+ */
+ private Integer messageCnt = 0;
+ /**
+ * 已回复聊天占比,浮点型,客户主动发起聊天后,成员在一个自然日内有回复过消息的聊天数/客户主动发起的聊天数比例,不包括群聊,仅在确有聊天时返回。
+ */
+ private Float replyPercentage = 0.00f;
+ /**
+ * 平均首次回复时长,单位为分钟,即客户主动发起聊天后,成员在一个自然日内首次回复的时长间隔为首次回复时长,所有聊天的首次回复总时长/已回复的聊天总数即为平均首次回复时长,不包括群聊,仅在确有聊天时返回。
+ */
+ private Integer avgReplyTime = 0;
+ /**
+ * 删除/拉黑成员的客户数,即将成员删除或加入黑名单的客户数。
+ */
+ private Integer negativeFeedbackCnt = 0;
+ /**
+ * 主动向客户发起的好友申请数量
+ */
+ private Integer newApplyCnt = 0;
+ /**
+ * 新增客户数,成员新添加的客户数量。
+ */
+ private Integer newContactCnt = 0;
+
+ }
+}
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 58fce09e7991f12fa804ce400e88459da35623e4..235e02e9d02589befe1c68bb5a7b17679a7cbefb 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
@@ -3,9 +3,12 @@ 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 io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
import java.util.List;
/**
@@ -14,44 +17,57 @@ import java.util.List;
* @author kewen
* @date 2021-02-19
*/
+@ApiModel
@Data
public class WeCommunityNewGroupDto {
/**
* 活动场景
*/
+ @ApiModelProperty("活动场景")
private String activityScene;
/**
* 欢迎语
*/
+ @ApiModelProperty("欢迎语")
private String welcomeMsg;
- @NotEmpty(message = "员工信息不能为空")
+ @NotNull(message = "员工信息不能为空")
/** 使用员工 */
@TableField(exist = false)
+ @ApiModelProperty("使用员工")
private List weEmpleCodeUseScops;
/**
* 扫码标签
*/
@TableField(exist = false)
+ @ApiModelProperty("扫码标签")
private List weEmpleCodeTags;
- /**
- * 员工活码 id
- */
- @TableField(exist = false)
- private Long weEmpleCodeId;
-
/**
* 群活码ID
*/
+ @ApiModelProperty("群活码ID")
private Long groupCodeId;
/**
* 客户添加时无需经过确认自动成为好友:1:是;0:否
*/
+ @ApiModelProperty("客户添加时无需经过确认自动成为好友:1:是;0:否")
private Boolean isJoinConfirmFriends;
+ /**
+ * 二维码链接
+ */
+ @ApiModelProperty("二维码链接")
+ private String qrCode;
+
+ /**
+ * 素材的id
+ */
+ @ApiModelProperty("素材的id")
+ private Long mediaId;
+
}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WePageCountDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WePageCountDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..be4d8b79fa83cc54add3cfcf95dd0cf0e7fedd2b
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WePageCountDto.java
@@ -0,0 +1,86 @@
+package com.linkwechat.wecom.domain.dto;
+
+import lombok.Data;
+
+/**
+ * @author danmo
+ * @description
+ * @date 2021/2/25 11:21
+ **/
+@Data
+public class WePageCountDto {
+ /**
+ * 日期
+ */
+ private String xTime;
+
+ /**
+ * 发起申请数
+ */
+ private Integer newApplyCnt;
+
+ /**
+ * 新增客户数,成员新添加的客户数量
+ */
+ private Integer newContactCnt;
+
+ /**
+ * 聊天总数, 成员有主动发送过消息的单聊总数
+ */
+ private Integer chatCnt;
+
+ /**
+ * 发送消息数,成员在单聊中发送的消息总数
+ */
+ private Integer messageCnt;
+
+ /**
+ * 已回复聊天占比,浮点型,客户主动发起聊天后,成员在一个自然日内有回复过消息的聊天数/客户主动发起的聊天数比例,不包括群聊,仅在确有聊天时返回
+ */
+ private Float replyPercentage;
+
+ /**
+ * 平均首次回复时长
+ */
+ private Integer avgReplyTime;
+
+ /**
+ * 删除/拉黑成员的客户数,即将成员删除或加入黑名单的客户数
+ */
+ private Long negativeFeedbackCnt;
+
+ /**
+ * 新增客户群数量
+ */
+ private Integer newChatCnt;
+
+ /**
+ * 截至当天客户群总数量
+ */
+ private Integer chatTotal;
+
+ /**
+ * 截至当天有发过消息的客户群数量
+ */
+ private Integer chatHasMsg;
+
+ /**
+ * 客户群新增群人数
+ */
+ private Integer newMemberCnt;
+
+ /**
+ * 截至当天客户群总人数
+ */
+ private Integer memberTotal;
+
+ /**
+ * 截至当天有发过消息的群成员数
+ */
+ private Integer memberHasMsg;
+
+ /**
+ * 截至当天客户群消息总数
+ */
+ private Integer msgTotal;
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WePageStaticDataDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WePageStaticDataDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..aa08cc15e2e8297f8f6b2b94becb0a4d2e547ee7
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WePageStaticDataDto.java
@@ -0,0 +1,47 @@
+package com.linkwechat.wecom.domain.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author danmo
+ * @description
+ * @date 2021/2/25 11:21
+ **/
+@Data
+public class WePageStaticDataDto {
+
+ /**
+ * 更新时间
+ */
+ private String updateTime;
+
+ private PageStaticData today;
+
+ private PageStaticData week;
+
+ private PageStaticData month;
+
+ @Data
+ public static class PageStaticData{
+ //发起申请数
+ private Integer newApplyCnt;
+ //发起申请数差值
+ private Integer newApplyCntDiff;
+ //新增客户数
+ private Integer newContactCnt;
+ //新增客户数差值
+ private Integer newContactCntDiff;
+ //群新增人数
+ private Integer newMemberCnt;
+ //群新增人数差值
+ private Integer newMemberCntDiff;
+ //流失客户数
+ private Long negativeFeedbackCnt;
+ //流失客户数差值
+ private Long negativeFeedbackCntDiff;
+ //图表数据
+ private List dataList;
+ }
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/query/GroupChatStatisticQuery.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/query/GroupChatStatisticQuery.java
new file mode 100644
index 0000000000000000000000000000000000000000..171638251bf10904d94e5d2d7a2289858950fe2a
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/query/GroupChatStatisticQuery.java
@@ -0,0 +1,28 @@
+package com.linkwechat.wecom.domain.query;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author danmo
+ */
+@Data
+public class GroupChatStatisticQuery {
+ @ApiModelProperty(value = "起始日期的时间戳")
+ private Long day_begin_time;
+
+ @ApiModelProperty(value = "结束日期的时间戳")
+ private Long day_end_time;
+
+ @ApiModelProperty(value = "群主过滤")
+ private OwnerFilter ownerFilter;
+
+ @Data
+ public static class OwnerFilter{
+ @ApiModelProperty(value = "群主ID列表")
+ private List userid_list;
+ }
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/query/UserBehaviorDataQuery.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/query/UserBehaviorDataQuery.java
new file mode 100644
index 0000000000000000000000000000000000000000..82c55b460d4faf032573b16368d74cf5002b6175
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/query/UserBehaviorDataQuery.java
@@ -0,0 +1,25 @@
+package com.linkwechat.wecom.domain.query;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author danmo
+ */
+@Data
+public class UserBehaviorDataQuery {
+
+ @ApiModelProperty(value = "成员ID列表,最多100个")
+ private List userid;
+
+ @ApiModelProperty(value = "部门ID列表,最多100个")
+ private List partyid;
+
+ @ApiModelProperty(value = "数据起始时间")
+ private Long start_time;
+
+ @ApiModelProperty(value = "数据结束时间")
+ private Long end_time;
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/query/WePageStateQuery.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/query/WePageStateQuery.java
new file mode 100644
index 0000000000000000000000000000000000000000..84e55a6a5e83cd939e1578a9c48ebeb256d35ae4
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/query/WePageStateQuery.java
@@ -0,0 +1,32 @@
+package com.linkwechat.wecom.domain.query;
+
+import lombok.Data;
+
+/**
+ * @author danmo
+ * @description
+ * @date 2021/2/25 11:21
+ **/
+@Data
+public class WePageStateQuery {
+ /**
+ * 日期间隔
+ */
+ private Integer few;
+
+ /**
+ * 日期
+ */
+ private String dateTime;
+
+ /**
+ * 开始时间
+ */
+ private String startTime;
+
+ /**
+ * 结束时间
+ */
+ private String endTime;
+
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/query/WeTaskFissionStatisticQO.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/query/WeTaskFissionStatisticQO.java
new file mode 100644
index 0000000000000000000000000000000000000000..4e3c675fd5d9a91a526021636d5640813b9e1ca4
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/query/WeTaskFissionStatisticQO.java
@@ -0,0 +1,16 @@
+package com.linkwechat.wecom.domain.query;
+
+import lombok.Data;
+
+/**
+ * @author leejoker <1056650571@qq.com>
+ * @version 1.0
+ * @date 2021/3/8 17:55
+ */
+@Data
+public class WeTaskFissionStatisticQO {
+ private Boolean seven;
+ private Boolean thirty;
+ private String beginTime;
+ private String endTime;
+}
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 c4c2b96075ca22a3bd7c0daca05043c7248b5736..fd5a23d19b34c37521a7a0bcd262d5cb1fe190cc 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
@@ -6,6 +6,7 @@ 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 io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -16,83 +17,97 @@ import java.util.List;
/**
* 社区运营 新客自动拉群
*/
+@ApiModel
@Data
public class WeCommunityNewGroupVo {
/**
*主键ID
*/
+ @ApiModelProperty("主键ID")
private Long newGroupId;
- /**
- *员工活码ID
- */
- private Long empleCodeId;
-
/**
* 员工活码名称
*/
+ @ApiModelProperty("员工活码名称")
private String empleCodeName;
/**
* 活动场景
*/
+ @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;
@NotEmpty(message = "员工信息不能为空")
/** 使用员工 */
@TableField(exist = false)
+ @ApiModelProperty("使用员工")
private List weEmpleCodeUseScops;
/**
* 扫码标签
*/
@TableField(exist = false)
+ @ApiModelProperty("扫码标签")
private List weEmpleCodeTags;
/**
- * 扫码标签
+ * 素材
*/
+ @ApiModelProperty("素材")
@TableField(exist = false)
private WeMaterial weMaterial;
+ /**
+ * 素材的id
+ */
+ @ApiModelProperty("素材的id")
+ private Long mediaId;
+
/**
* 实际群聊
*/
+ @ApiModelProperty("实际群聊")
private List weGroupUserScops;
/** 创建者 */
- @ApiModelProperty(hidden = true)
+ @ApiModelProperty(value = "创建者",hidden = true)
private String createBy;
/** 创建时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- @ApiModelProperty(hidden = true)
+ @ApiModelProperty(value = "创建时间",hidden = true)
private Date createTime=new Date();
}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeTaskFissionDailyDataVO.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeTaskFissionDailyDataVO.java
new file mode 100644
index 0000000000000000000000000000000000000000..9ffd7e0c682cc471d473d47437639a69f6fa0675
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeTaskFissionDailyDataVO.java
@@ -0,0 +1,20 @@
+package com.linkwechat.wecom.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author leejoker <1056650571@qq.com>
+ * @version 1.0
+ * @date 2021/3/8 10:24
+ */
+@Data
+public class WeTaskFissionDailyDataVO {
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date day;
+ private Integer increase;
+ private Integer attend;
+ private Integer complete;
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeTaskFissionStatisticVO.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeTaskFissionStatisticVO.java
new file mode 100644
index 0000000000000000000000000000000000000000..259b56e54a8da05dead0bdf386378c8b8c3f6cdb
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeTaskFissionStatisticVO.java
@@ -0,0 +1,23 @@
+package com.linkwechat.wecom.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author leejoker <1056650571@qq.com>
+ * @version 1.0
+ * @date 2021/3/8 10:20
+ */
+@Data
+public class WeTaskFissionStatisticVO {
+ private Long id;
+ private String taskName;
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date startTime;
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date endTime;
+ private List data;
+}
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 81df166e1ddc98d5b379681f43b4414a4be3f581..8dc46fefce7173bc242b540ed3ec4607d7de23c8 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
@@ -21,7 +21,8 @@ public interface WeCommunityNewGroupMapper extends BaseMapper selectWeCommunityNewGroupList(WeCommunityNewGroup communityNewGroup);
+ List selectWeCommunityNewGroupList(@Param("empleCodeName") String empleCodeName, @Param("createBy") String createBy
+ ,@Param("beginTime") String beginTime, @Param("endTime") String endTime);
/**
* 获取新客自动拉群详细信息
@@ -36,6 +37,14 @@ public interface WeCommunityNewGroupMapper extends BaseMapper idList);
+ int batchRemoveWeCommunityNewGroupIds(@Param("ids") List idList);
+
+ /**
+ * 通过id查询新客自动拉群信息列表
+ *
+ * @param ids id列表
+ * @return {@link WeCommunityNewGroup} 新客自动拉群信息
+ */
+ List selectWeCommunityNewGroupByIds(@Param("ids") List ids);
}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeCustomerMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeCustomerMapper.java
index b622d5b724e49ee7fad3b5685fb01915d818cc1b..6bce0289c2ad80200e97f2adbfbc4925ca8d4f4a 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeCustomerMapper.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeCustomerMapper.java
@@ -4,6 +4,8 @@ import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.linkwechat.wecom.domain.WeCustomer;
+import com.linkwechat.wecom.domain.WeCustomerPortrait;
+import com.linkwechat.wecom.domain.WeCustomerSocialConn;
import com.linkwechat.wecom.domain.WeUser;
import org.apache.ibatis.annotations.Param;
@@ -77,4 +79,24 @@ public interface WeCustomerMapper extends BaseMapper
* @return
*/
List getCustomerByTag(List ids);
+
+
+ /**
+ * 根据外部联系人ID和企业员工ID获取当前客户信息
+ * @param externalUserid
+ * @param userid
+ * @return
+ */
+ WeCustomerPortrait findCustomerByOperUseridAndCustomerId(@Param("externalUserid") String externalUserid,@Param("userid") String userid);
+
+
+ /**
+ * 统计客户社交关系
+ * @param externalUserid 客户id
+ * @param userid 员工id
+ * @return
+ */
+ WeCustomerSocialConn countSocialConn(@Param("externalUserid")String externalUserid,@Param("userid")String userid);
+
+
}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeCustomerTrajectoryMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeCustomerTrajectoryMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..df13f27153b3ca352788687bc3ab162d5c1e320c
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeCustomerTrajectoryMapper.java
@@ -0,0 +1,9 @@
+package com.linkwechat.wecom.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.linkwechat.wecom.domain.WeCustomerTrajectory;
+
+public interface WeCustomerTrajectoryMapper extends BaseMapper {
+
+
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupMapper.java
index 39b0afa045828473de0dc5eb8935f405d2122678..49f6d3a8daed5d17db65f788c95ee88bbe107741 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupMapper.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupMapper.java
@@ -1,6 +1,7 @@
package com.linkwechat.wecom.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.linkwechat.wecom.domain.WeCustomerAddGroup;
import com.linkwechat.wecom.domain.WeGroup;
import org.apache.ibatis.annotations.Param;
@@ -27,4 +28,6 @@ public interface WeGroupMapper extends BaseMapper {
// int batchLogicDeleteByIds(@Param("ids") List ids);
//
// int batchInsetWeGroup(@Param("weGroups") List weGroups);
+
+ List findWeGroupByCustomer(@Param("userId") String userId,@Param("externalUserid") String externalUserid);
}
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
new file mode 100644
index 0000000000000000000000000000000000000000..145b166de83081bb4f6be57f59f1657109f2cfe0
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupStatisticMapper.java
@@ -0,0 +1,15 @@
+package com.linkwechat.wecom.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.linkwechat.wecom.domain.WeGroupStatistic;
+
+/**
+ * 群聊数据统计数据
+Mapper接口
+ *
+ * @author ruoyi
+ * @date 2021-02-24
+ */
+public interface WeGroupStatisticMapper extends BaseMapper {
+
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeTagGroupMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeTagGroupMapper.java
index 86919511e1994866d0fdf2cbd0e027863e4ea0b2..7343c4876fce31a18da6c2214d2856e9bef72110 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeTagGroupMapper.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeTagGroupMapper.java
@@ -62,4 +62,16 @@ public interface WeTagGroupMapper extends BaseMapper
* @return
*/
public int batchInsetWeTagGroup(@Param("weTagGroups") List weTagGroups);
+
+
+ /**
+ * 根据企业员工与添加客户关系id给客户打标签
+ * @param flowerCustomerRelId
+ * @return
+ */
+ public List findCustomerTagByFlowerCustomerRelId(@Param("flowerCustomerRelId") String flowerCustomerRelId);
+
+
+
+
}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeUserBehaviorDataMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeUserBehaviorDataMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..36f1d91017c442a6493e4a49b573405f4cc16ed9
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeUserBehaviorDataMapper.java
@@ -0,0 +1,45 @@
+package com.linkwechat.wecom.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.linkwechat.wecom.domain.WeUserBehaviorData;
+import com.linkwechat.wecom.domain.dto.WePageCountDto;
+import com.linkwechat.wecom.domain.query.WePageStateQuery;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 联系客户统计数据 Mapper接口
+ *
+ * @author ruoyi
+ * @date 2021-02-24
+ */
+public interface WeUserBehaviorDataMapper 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/WeUserMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeUserMapper.java
index 49e1b4abe7fa232dfe646a4f1d6b8563197de10a..d4fa04d8f6e062f67c728d4883d61ca7bb75351a 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
@@ -1,6 +1,7 @@
package com.linkwechat.wecom.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.linkwechat.wecom.domain.WeCustomerAddUser;
import com.linkwechat.wecom.domain.WeUser;
import com.linkwechat.wecom.domain.vo.WeAllocateCustomersVo;
import com.linkwechat.wecom.domain.vo.WeAllocateGroupsVo;
@@ -97,4 +98,12 @@ public interface WeUserMapper extends BaseMapper
* @return
*/
public List getAllocateGroups(WeAllocateGroupsVo weAllocateGroupsVo);
+
+
+ /**
+ * 根据客户id获取客户添加人
+ * @param externalUserid
+ * @return
+ */
+ List findWeUserByCutomerId(@Param("externalUserid") String externalUserid);
}
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 978fe107b1a5bdd6af6eb4ecb2541c44c338a414..cffe13910db0890f7290e50f988be5694b4ae321 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
@@ -26,13 +26,13 @@ public interface IWeCommunityNewGroupService extends IService selectWeCommunityNewGroupList(WeCommunityNewGroup communityNewGroup);
+ List selectWeCommunityNewGroupList(String empleCodeName, String createBy, String beginTime, String endTime);
/**
* 获取新客自动拉群详细信息
+ *
* @param newGroupId 主键id
* @return {@link WeCommunityNewGroupVo} 自动拉群信息
*/
@@ -40,6 +40,7 @@ public interface IWeCommunityNewGroupService extends IService idList);
+ int batchRemoveWeCommunityNewGroupIds(List idList);
+
+ /**
+ * 通过id查询新客自动拉群信息
+ *
+ * @param id id
+ * @return {@link WeCommunityNewGroup} 新客自动拉群信息
+ */
+ WeCommunityNewGroupVo selectWeCommunityNewGroupById(long id);
+
+ /**
+ * 通过id查询新客自动拉群信息列表
+ *
+ * @param ids id列表
+ * @return {@link WeCommunityNewGroup} 新客自动拉群信息
+ */
+ List selectWeCommunityNewGroupByIds(List ids);
+
}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCustomerService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCustomerService.java
index f02807f2343a10ede5d5b407c6c7b67117088f0c..f80cc58a35f3928499512172aca133ee6907ac1e 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCustomerService.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCustomerService.java
@@ -2,12 +2,12 @@ package com.linkwechat.wecom.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.linkwechat.wecom.domain.WeCustomer;
+import com.linkwechat.wecom.domain.WeCustomerPortrait;
import com.linkwechat.wecom.domain.WeUser;
import com.linkwechat.wecom.domain.dto.WeWelcomeMsg;
import com.linkwechat.wecom.domain.vo.WeLeaveUserInfoAllocateVo;
import com.linkwechat.wecom.domain.vo.WeMakeCustomerTag;
-
import java.util.List;
/**
@@ -109,4 +109,26 @@ public interface IWeCustomerService extends IService
* @return
*/
public List getCustomerByTag(List ids);
+
+
+
+ /**
+ * 根据外部联系人ID和企业员工ID获取当前客户信息
+ * @param externalUserid
+ * @param userid
+ * @return
+ */
+ WeCustomerPortrait findCustomerByOperUseridAndCustomerId(String externalUserid,String userid);
+
+
+ /**
+ * 跟新客户画像
+ * @param weCustomerPortrait
+ */
+ void updateWeCustomerPortrait(WeCustomerPortrait weCustomerPortrait);
+
+
+
+
+
}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCustomerTrajectoryService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCustomerTrajectoryService.java
new file mode 100644
index 0000000000000000000000000000000000000000..700bc077641cfb2315fc2735cf60e4226a7f6d5d
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCustomerTrajectoryService.java
@@ -0,0 +1,8 @@
+package com.linkwechat.wecom.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.linkwechat.wecom.domain.WeCustomerTrajectory;
+
+public interface IWeCustomerTrajectoryService extends IService {
+
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupService.java
index a043b1462ab28d324642c581fd1caa7e56f8d89c..083eccaf2893ee2ec6f66d551f225cd45bc30147 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupService.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupService.java
@@ -1,6 +1,7 @@
package com.linkwechat.wecom.service;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.linkwechat.wecom.domain.WeCustomerAddGroup;
import com.linkwechat.wecom.domain.WeGroup;
import com.linkwechat.wecom.domain.vo.WeLeaveUserInfoAllocateVo;
@@ -26,4 +27,6 @@ public interface IWeGroupService extends IService {
void updateWeGroup(String chatId);
void deleteWeGroup(String chatId);
+
+ List findWeGroupByCustomer(String userId,String externalUserid);
}
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
new file mode 100644
index 0000000000000000000000000000000000000000..8c2b56c3fc561a7787ca774c711ce7396828e9d6
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupStatisticService.java
@@ -0,0 +1,21 @@
+package com.linkwechat.wecom.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.linkwechat.wecom.domain.WeGroupStatistic;
+
+import java.util.List;
+
+/**
+ * 群聊数据统计数据
+Service接口
+ *
+ * @author ruoyi
+ * @date 2021-02-24
+ */
+public interface IWeGroupStatisticService extends IService {
+
+ /**
+ * 查询列表
+ */
+ List queryList(WeGroupStatistic weGroupStatistic);
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeTagGroupService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeTagGroupService.java
index b0e29ea2121c5f7ab9c349f0b43c5105d6c18db8..4828d2d8543a6c56d89f2ec62322ede56915087a 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeTagGroupService.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeTagGroupService.java
@@ -1,11 +1,11 @@
package com.linkwechat.wecom.service;
-import java.util.List;
-
import com.baomidou.mybatisplus.extension.service.IService;
import com.linkwechat.wecom.domain.WeTagGroup;
import com.linkwechat.wecom.domain.dto.tag.WeCropGroupTagDto;
+import java.util.List;
+
/**
* 标签组Service接口
*
@@ -69,4 +69,13 @@ public interface IWeTagGroupService extends IService
void deleteTagGroup(String id);
void updateTagGroup(String id);
+
+
+
+ /**
+ * 根据企业员工与添加客户关系id给客户打标签
+ * @param flowerCustomerRelId
+ * @return
+ */
+ public List findCustomerTagByFlowerCustomerRelId(String flowerCustomerRelId);
}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeUserBehaviorDataService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeUserBehaviorDataService.java
new file mode 100644
index 0000000000000000000000000000000000000000..904cae6f46f0773216d111e6d5b144e5e468dae7
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeUserBehaviorDataService.java
@@ -0,0 +1,49 @@
+package com.linkwechat.wecom.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.linkwechat.wecom.domain.WeUserBehaviorData;
+import com.linkwechat.wecom.domain.dto.WePageCountDto;
+import com.linkwechat.wecom.domain.query.WePageStateQuery;
+
+import java.util.List;
+
+/**
+ * 联系客户统计数据 Service接口
+ *
+ * @author ruoyi
+ * @date 2021-02-24
+ */
+public interface IWeUserBehaviorDataService extends IService {
+
+ /**
+ * 查询列表
+ */
+ List queryList(WeUserBehaviorData weUserBehaviorData);
+
+ /**
+ * 按日期查询当天数据统计结果
+ * @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/IWeUserService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeUserService.java
index 0ecbd8be724022c14a350007cfbaf19aa6cb3648..c31b06b54f3b42b448015ec021301dc8544995cd 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeUserService.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeUserService.java
@@ -2,10 +2,12 @@ package com.linkwechat.wecom.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dtflys.forest.annotation.Query;
+import com.linkwechat.wecom.domain.WeCustomerAddUser;
import com.linkwechat.wecom.domain.WeUser;
import com.linkwechat.wecom.domain.dto.WeUserInfoDto;
import com.linkwechat.wecom.domain.dto.msgaudit.WeMsgAuditDto;
import com.linkwechat.wecom.domain.vo.*;
+import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -144,4 +146,12 @@ public interface IWeUserService extends IService
* @return
*/
WeUserInfoVo getUserInfo(String code,String agentId);
+
+
+ /**
+ * 根据客户id获取客户添加人
+ * @param externalUserid
+ * @return
+ */
+ List findWeUserByCutomerId(String externalUserid);
}
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 d979970a3b56e14d33be51d3bceee62db97472cf..40dd47d5abadf74159d36e1ddb48a403e58edc6a 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,23 +1,28 @@
package com.linkwechat.wecom.service.impl;
+import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
import com.linkwechat.common.exception.wecom.WeComException;
import com.linkwechat.common.utils.SecurityUtils;
-import com.linkwechat.wecom.domain.WeCommunityNewGroup;
-import com.linkwechat.wecom.domain.WeEmpleCode;
-import com.linkwechat.wecom.domain.WeGroupCode;
+import com.linkwechat.wecom.client.WeExternalContactClient;
+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.service.IWeCommunityNewGroupService;
-import com.linkwechat.wecom.service.IWeEmpleCodeService;
+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.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
+import java.util.stream.Collectors;
/**
* 社群运营 新客自动拉群
@@ -27,58 +32,133 @@ import java.util.List;
*/
@Service
@Slf4j
-public class WeCommunityNewGroupServiceImpl extends ServiceImpl implements IWeCommunityNewGroupService {
+public class WeCommunityNewGroupServiceImpl extends ServiceImpl implements IWeCommunityNewGroupService {
@Autowired
private WeGroupCodeMapper weGroupCodeMapper;
@Autowired
- private IWeEmpleCodeService weEmpleCodeService;
+ private WeEmpleCodeServiceImpl weEmpleCodeService;
@Autowired
private WeCommunityNewGroupMapper weCommunityNewGroupMapper;
+ @Autowired
+ private IWeEmpleCodeTagService weEmpleCodeTagService;
+
+
+ @Autowired
+ private IWeEmpleCodeUseScopService iWeEmpleCodeUseScopService;
+
+ @Autowired
+ private WeExternalContactClient weExternalContactClient;
+
+ @Autowired
+ private IWeGroupCodeActualService weGroupCodeActualService;
+
@Override
public int add(WeCommunityNewGroupDto communityNewGroupDto) {
//检查群活码是否存在
WeGroupCode weGroupCode = weGroupCodeMapper.selectWeGroupCodeById(communityNewGroupDto.getGroupCodeId());
- if(null!=weGroupCode){
+ if (null == weGroupCode) {
throw new WeComException("群活码不存在!");
}
- 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.setCreateTime(new Date());
- weEmpleCode.setCreateBy(SecurityUtils.getUsername());
+ WeEmpleCode weEmpleCode = getWeEmpleCode(communityNewGroupDto);
+
//生成员工活码信息
- weEmpleCodeService.insertWeEmpleCode(weEmpleCode);
+ WeExternalContactDto.WeContactWay weContactWay = weEmpleCodeService.getWeContactWay(weEmpleCode);
+ WeExternalContactDto qrCode = weEmpleCodeService.getQrCode(weContactWay);
+
//保存新客自动拉群信息
- WeCommunityNewGroup communityNewGroup=new WeCommunityNewGroup();
+ WeCommunityNewGroup communityNewGroup = new WeCommunityNewGroup();
communityNewGroup.setNewGroupId(weGroupCode.getId());
- communityNewGroup.setEmpleCodeId(weEmpleCode.getId());
communityNewGroup.setEmpleCodeName(communityNewGroupDto.getActivityScene());
communityNewGroup.setDelFlag(0);
communityNewGroup.setCreateTime(new Date());
communityNewGroup.setCreateBy(SecurityUtils.getUsername());
- this.save(communityNewGroup);
+ communityNewGroup.setActivityScene(communityNewGroupDto.getActivityScene());
+ communityNewGroup.setWelcomeMsg(communityNewGroupDto.getWelcomeMsg());
+ communityNewGroup.setIsJoinConfirmFriends(communityNewGroupDto.getIsJoinConfirmFriends());
+ communityNewGroup.setMediaId(communityNewGroup.getMediaId());
+
+ if (qrCode != null) {
+ communityNewGroup.setQrCode(qrCode.getQr_code());
+ }
+
+ if (this.save(communityNewGroup)) {
+ if (CollectionUtil.isNotEmpty(weEmpleCode.getWeEmpleCodeUseScops())) {
+ weEmpleCode.getWeEmpleCodeUseScops().forEach(item -> 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());
+ }
+ }
return 1;
}
+ 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());
+ return weEmpleCode;
+ }
+
@Override
- public List selectWeCommunityNewGroupList(WeCommunityNewGroup communityNewGroup) {
- return weCommunityNewGroupMapper.selectWeCommunityNewGroupList(communityNewGroup);
+ 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()));
+ });
+ }
+ return weCommunityNewGroupVos;
}
@Override
public WeCommunityNewGroupVo selectWeCommunityNewGroupById(Long newGroupId) {
- return weCommunityNewGroupMapper.selectWeCommunityNewGroupById(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;
+ }
+
+ private List getWeGroupCodeActuals(WeCommunityNewGroupVo weCommunityNewGroupVo) {
+ WeGroupCodeActual weGroupCodeActual = new WeGroupCodeActual();
+ weGroupCodeActual.setGroupCodeId(weCommunityNewGroupVo.getNewGroupId());
+ return weGroupCodeActualService.selectWeGroupCodeActualList(weGroupCodeActual);
}
@Override
@@ -86,36 +166,47 @@ public class WeCommunityNewGroupServiceImpl extends ServiceImpl item.setEmpleCodeId(communityNewGroup.getNewGroupId()));
+ iWeEmpleCodeUseScopService.updateBatchById(weEmpleCode.getWeEmpleCodeUseScops());
+ }
+ if (CollectionUtil.isNotEmpty(weEmpleCode.getWeEmpleCodeTags())) {
+ weEmpleCode.getWeEmpleCodeTags().forEach(item -> item.setEmpleCodeId(communityNewGroup.getNewGroupId()));
+ weEmpleCodeTagService.updateBatchById(weEmpleCode.getWeEmpleCodeTags());
+ }
+ }
return 1;
}
@@ -125,4 +216,13 @@ public class WeCommunityNewGroupServiceImpl extends ServiceImpl selectWeCommunityNewGroupByIds(List ids) {
+ return weCommunityNewGroupMapper.selectWeCommunityNewGroupByIds(ids);
+ }
}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeConversationArchiveServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeConversationArchiveServiceImpl.java
index c329a887b1be864584d865a5aa6a3f3dcc40ca81..b994dd68b14f8679c31422b7b763f43166fa499e 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeConversationArchiveServiceImpl.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeConversationArchiveServiceImpl.java
@@ -18,6 +18,7 @@ import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.Date;
@@ -34,6 +35,9 @@ public class WeConversationArchiveServiceImpl implements IWeConversationArchiveS
@Autowired
private ElasticSearch elasticSearch;
+ @Value("${wecome.chatKey}")
+ private String chartKey;
+
/**
* 根据用户ID 获取对应内部联系人列表
*
@@ -49,7 +53,7 @@ public class WeConversationArchiveServiceImpl implements IWeConversationArchiveS
int from = (pageNum - 1) * pageSize;
builder.size(pageSize);
builder.from(from);
- builder.sort("msgtime", SortOrder.DESC);
+ builder.sort("msgtime", SortOrder.ASC);
BoolQueryBuilder fromBuilder = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("roomid", ""))
.must(QueryBuilders.matchQuery("from", query.getFromId()))
.must(QueryBuilders.matchQuery("tolist.keyword", query.getReceiveId()));
@@ -73,7 +77,7 @@ public class WeConversationArchiveServiceImpl implements IWeConversationArchiveS
boolQueryBuilder.filter(QueryBuilders.rangeQuery("msgtime").gte(beginTime).lte(endTime));
}
builder.query(boolQueryBuilder);
- return elasticSearch.searchPage(WeConstans.WECOM_FINANCE_INDEX, builder, pageNum, pageSize, JSONObject.class);
+ return elasticSearch.searchPage(chartKey, builder, pageNum, pageSize, JSONObject.class);
}
@Override
@@ -85,7 +89,7 @@ public class WeConversationArchiveServiceImpl implements IWeConversationArchiveS
int from = (pageNum - 1) * pageSize;
builder.size(pageSize);
builder.from(from);
- builder.sort("msgtime", SortOrder.DESC);
+ builder.sort("msgtime", SortOrder.ASC);
BoolQueryBuilder fromBuilder = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("roomid", query.getRoomId()))
.must(QueryBuilders.matchQuery("from", query.getFromId()));
@@ -111,14 +115,14 @@ public class WeConversationArchiveServiceImpl implements IWeConversationArchiveS
}
builder.query(boolQueryBuilder);
- return elasticSearch.searchPage(WeConstans.WECOM_FINANCE_INDEX, builder, pageNum, pageSize, JSONObject.class);
+ return elasticSearch.searchPage(chartKey, builder, pageNum, pageSize, JSONObject.class);
}
@Override
public JSONObject getFinalChatContactInfo(String fromId, String receiveId) {
SearchSourceBuilder builder = new SearchSourceBuilder();
- builder.sort("msgtime", SortOrder.DESC);
+ builder.sort("msgtime", SortOrder.ASC);
builder.size(1);
BoolQueryBuilder fromBuilder = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("roomid", ""))
.must(QueryBuilders.matchQuery("from", fromId))
@@ -132,7 +136,7 @@ public class WeConversationArchiveServiceImpl implements IWeConversationArchiveS
.should(toLsitBuilder)
.minimumShouldMatch(1);
builder.query(boolQueryBuilder);
- List resultList = elasticSearch.search(WeConstans.WECOM_FINANCE_INDEX, builder, JSONObject.class);
+ List resultList = elasticSearch.search(chartKey, builder, JSONObject.class);
if (CollectionUtil.isNotEmpty(resultList)) {
return resultList.get(0);
} else {
@@ -143,7 +147,7 @@ public class WeConversationArchiveServiceImpl implements IWeConversationArchiveS
@Override
public JSONObject getFinalChatRoomContactInfo(String fromId, String roomId) {
SearchSourceBuilder builder = new SearchSourceBuilder();
- builder.sort("msgtime", SortOrder.DESC);
+ builder.sort("msgtime", SortOrder.ASC);
builder.size(1);
BoolQueryBuilder fromBuilder = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("roomid", roomId))
.must(QueryBuilders.matchQuery("from", fromId));
@@ -154,7 +158,7 @@ public class WeConversationArchiveServiceImpl implements IWeConversationArchiveS
.should(fromBuilder)
.should(roomidBuilder);
builder.query(boolQueryBuilder);
- List resultList = elasticSearch.search(WeConstans.WECOM_FINANCE_INDEX, builder, JSONObject.class);
+ List resultList = elasticSearch.search(chartKey, builder, JSONObject.class);
if (CollectionUtil.isNotEmpty(resultList)) {
return resultList.get(0);
} else {
@@ -171,10 +175,10 @@ public class WeConversationArchiveServiceImpl implements IWeConversationArchiveS
int from = (pageNum - 1) * pageSize;
builder.size(pageSize);
builder.from(from);
- builder.sort("msgtime", SortOrder.DESC);
+ builder.sort("msgtime", SortOrder.ASC);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
-
+ boolQueryBuilder.must(QueryBuilders.termQuery("msgtype", "text"));
//成员姓名查询
if(StringUtils.isNotEmpty(query.getUserName())){
boolQueryBuilder.must(QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("fromInfo.name",query.getUserName()))
@@ -204,7 +208,7 @@ public class WeConversationArchiveServiceImpl implements IWeConversationArchiveS
boolQueryBuilder.filter(QueryBuilders.rangeQuery("msgtime").gte(beginTime).lte(endTime));
}
builder.query(boolQueryBuilder);
- PageInfo pageInfo = elasticSearch.searchPage(WeConstans.WECOM_FINANCE_INDEX, builder, pageNum, pageSize, JSONObject.class);
+ PageInfo pageInfo = elasticSearch.searchPage(chartKey, builder, pageNum, pageSize, JSONObject.class);
return pageInfo;
}
}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerServiceImpl.java
index db579e286f3f2ea3ce2d0248492585e3633ceb32..3168c12b145bfe4249f62b20c2d391537556a17a 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerServiceImpl.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerServiceImpl.java
@@ -8,7 +8,6 @@ import com.linkwechat.common.constant.WeConstans;
import com.linkwechat.common.utils.SecurityUtils;
import com.linkwechat.common.utils.SnowFlakeUtil;
import com.linkwechat.common.utils.StringUtils;
-import com.linkwechat.common.utils.Threads;
import com.linkwechat.common.utils.bean.BeanUtils;
import com.linkwechat.wecom.client.WeCropTagClient;
import com.linkwechat.wecom.client.WeCustomerClient;
@@ -626,4 +625,55 @@ public class WeCustomerServiceImpl extends ServiceImpl()
+ .eq(WeFlowerCustomerRel::getExternalUserid,weCustomerPortrait.getExternalUserid())
+ .eq(WeFlowerCustomerRel::getUserId,weCustomerPortrait.getUserId()));
+
+ }
+
+
+
+
+
}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerTrajectoryServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerTrajectoryServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..e71773b76d51843b83c5393415995b5d93ec0b4b
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerTrajectoryServiceImpl.java
@@ -0,0 +1,11 @@
+package com.linkwechat.wecom.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.linkwechat.wecom.domain.WeCustomerTrajectory;
+import com.linkwechat.wecom.mapper.WeCustomerTrajectoryMapper;
+import com.linkwechat.wecom.service.IWeCustomerTrajectoryService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class WeCustomerTrajectoryServiceImpl extends ServiceImpl implements IWeCustomerTrajectoryService {
+}
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 e094117de86b5e230064666f60b9e62b086fc52e..ce146e59dfd9d04294ac83239dee1cfb2d33279b 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
@@ -326,7 +326,7 @@ public class WeEmpleCodeServiceImpl extends ServiceImpl weEmpleCodeUseScops = weEmpleCode.getWeEmpleCodeUseScops();
//根据类型生成相应的活码
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeGroupCodeServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeGroupCodeServiceImpl.java
index bd9ee7ea9d5ee545e19a3e7abf38941452cc2e16..b46fcee395124f011fe214f99b557dc866abed45 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeGroupCodeServiceImpl.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeGroupCodeServiceImpl.java
@@ -102,12 +102,6 @@ public class WeGroupCodeServiceImpl extends ServiceImpl impl
@Autowired
private IWeGroupMemberService iWeGroupMemberService;
- @Autowired
- private IWeUserService weUserService;
-
- @Autowired
- private IWeCustomerService weCustomerService;
@Autowired
@@ -206,20 +204,11 @@ public class WeGroupServiceImpl extends ServiceImpl impl
this.saveOrUpdateBatch(weGroups);
List weGroupMemberList = iWeGroupMemberService.list(new LambdaQueryWrapper().in(WeGroupMember::getChatId,
weGroups.stream().map(WeGroup::getChatId).collect(Collectors.toList())));
- //存量去重
+
if (CollectionUtil.isNotEmpty(weGroupMemberList)) {
- List groupMemberList = weGroupMembers.stream().filter(e -> {
- for (WeGroupMember weGroupMember : weGroupMemberList) {
- if (e.getUserId().equals(weGroupMember.getUserId())) {
- return false;
- }
- }
- return true;
- }).collect(Collectors.toList());
- iWeGroupMemberService.saveBatch(groupMemberList);
- } else {
- iWeGroupMemberService.saveBatch(weGroupMembers);
+ iWeGroupMemberService.removeByIds(weGroupMemberList.stream().map(WeGroupMember::getId).collect(Collectors.toList()));
}
+ iWeGroupMemberService.saveBatch(weGroupMembers);
}
@@ -332,4 +321,9 @@ public class WeGroupServiceImpl extends ServiceImpl impl
iWeGroupMemberService.remove(new LambdaQueryWrapper().eq(WeGroupMember::getChatId,chatId));
}
+ @Override
+ public List findWeGroupByCustomer(String userId, String externalUserid) {
+ return this.baseMapper.findWeGroupByCustomer(userId,externalUserid);
+ }
+
}
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
new file mode 100644
index 0000000000000000000000000000000000000000..609fe1bb890dec38c278b3160d263a8e94d87752
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeGroupStatisticServiceImpl.java
@@ -0,0 +1,57 @@
+package com.linkwechat.wecom.service.impl;
+
+import com.linkwechat.wecom.domain.WeGroupStatistic;
+import com.linkwechat.wecom.mapper.WeGroupStatisticMapper;
+import com.linkwechat.wecom.service.IWeGroupStatisticService;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 群聊数据统计数据
+Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2021-02-24
+ */
+@Service
+public class WeGroupStatisticServiceImpl extends ServiceImpl implements IWeGroupStatisticService {
+
+ @Override
+ public List queryList(WeGroupStatistic weGroupStatistic) {
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ if (StringUtils.isNotBlank(weGroupStatistic.getChatId())){
+ lqw.eq(WeGroupStatistic::getChatId ,weGroupStatistic.getChatId());
+ }
+ if (weGroupStatistic.getStatTime() != null){
+ lqw.eq(WeGroupStatistic::getStatTime ,weGroupStatistic.getStatTime());
+ }
+ if (weGroupStatistic.getNewChatCnt() != null){
+ lqw.eq(WeGroupStatistic::getNewChatCnt ,weGroupStatistic.getNewChatCnt());
+ }
+ if (weGroupStatistic.getChatTotal() != null){
+ lqw.eq(WeGroupStatistic::getChatTotal ,weGroupStatistic.getChatTotal());
+ }
+ if (weGroupStatistic.getChatHasMsg() != null){
+ lqw.eq(WeGroupStatistic::getChatHasMsg ,weGroupStatistic.getChatHasMsg());
+ }
+ if (weGroupStatistic.getNewMemberCnt() != null){
+ lqw.eq(WeGroupStatistic::getNewMemberCnt ,weGroupStatistic.getNewMemberCnt());
+ }
+ if (weGroupStatistic.getMemberTotal() != null){
+ lqw.eq(WeGroupStatistic::getMemberTotal ,weGroupStatistic.getMemberTotal());
+ }
+ if (weGroupStatistic.getMemberHasMsg() != null){
+ lqw.eq(WeGroupStatistic::getMemberHasMsg ,weGroupStatistic.getMemberHasMsg());
+ }
+ if (weGroupStatistic.getMsgTotal() != null){
+ lqw.eq(WeGroupStatistic::getMsgTotal ,weGroupStatistic.getMsgTotal());
+ }
+ return this.list(lqw);
+ }
+}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WePosterServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WePosterServiceImpl.java
index e264e27bfe63a345200ce7073b4de4ca91d035dd..871385294097875c7a502b841b69dbccb74ba484 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WePosterServiceImpl.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WePosterServiceImpl.java
@@ -126,14 +126,25 @@ public class WePosterServiceImpl extends ServiceImpl i
poster.setSampleImgPath(poster.getBackgroundImgPath());
return poster.getBackgroundImgPath();
}
- Map fontMap = poster.getPosterSubassemblyList().stream().filter(wePosterSubassembly -> wePosterSubassembly.getType().equals(1))
+ Set existFontId = new HashSet<>();
+ Map fontMap = poster.getPosterSubassemblyList().stream().filter(wePosterSubassembly -> wePosterSubassembly.getType().equals(1))
.peek(wePosterSubassembly -> {
- if(wePosterSubassembly.getFontId() == null){
+ if (wePosterSubassembly.getFontId() == null) {
wePosterSubassembly.setFontId(0L);
}
})
- .collect(Collectors.toMap(WePosterSubassembly::getFontId, wePosterSubassembly -> posterFontService.getFont(wePosterSubassembly.getFontId(), wePosterSubassembly.getFontSize(),wePosterSubassembly.getFontStyle())));
- Map fileCallableMap = poster.getPosterSubassemblyList().stream().filter(wePosterSubassembly -> StringUtils.isNotBlank(wePosterSubassembly.getImgPath())).distinct().collect(Collectors.toMap(WePosterSubassembly::getImgPath, wePosterSubassembly -> NetFileUtils.getNetFile(wePosterSubassembly.getImgPath())));
+ .filter(wePosterSubassembly -> {
+ if(existFontId.contains(wePosterSubassembly.getFontId()+"_"+wePosterSubassembly.getFontSize()+"_"+wePosterSubassembly.getFontStyle())){
+ return false;
+ }else {
+ existFontId.add(wePosterSubassembly.getFontId()+"_"+wePosterSubassembly.getFontSize()+"_"+wePosterSubassembly.getFontStyle());
+ return true;
+ }
+ })
+ .collect(Collectors.toMap(wePosterSubassembly -> {
+ return wePosterSubassembly.getFontId()+"_"+wePosterSubassembly.getFontSize()+"_"+wePosterSubassembly.getFontStyle();
+ }, wePosterSubassembly -> posterFontService.getFont(wePosterSubassembly.getFontId(), wePosterSubassembly.getFontSize(),wePosterSubassembly.getFontStyle())));
+ Map fileCallableMap = poster.getPosterSubassemblyList().stream().map(WePosterSubassembly::getImgPath).filter(StringUtils::isNotBlank).distinct().collect(Collectors.toMap(s->s, NetFileUtils::getNetFile));
if (CollectionUtils.isEmpty(fileCallableMap)) {
fileCallableMap = new HashMap<>();
}
@@ -151,7 +162,7 @@ public class WePosterServiceImpl extends ServiceImpl i
poster.setHeight(backgroundImg.getHeight());
poster.getPosterSubassemblyList().forEach(wePosterSubassembly -> {
if (wePosterSubassembly.getType().equals(1)) {
- Font font = fontMap.get(wePosterSubassembly.getFontId());
+ Font font = fontMap.get(wePosterSubassembly.getFontId()+"_"+wePosterSubassembly.getFontSize()+"_"+wePosterSubassembly.getFontStyle());
FontMetrics fontMetrics = ImageUtils.getFontMetrics(font);
Color color;
if (StringUtils.isNotBlank(wePosterSubassembly.getFontColor())) {
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 aee74fc0a24412a79647dd59518aab964db8b009..8168615b4362abb7878de9b7073c17ecd57499eb 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
@@ -35,11 +35,13 @@ import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
@@ -70,6 +72,9 @@ public class WeSensitiveServiceImpl implements IWeSensitiveService {
@Autowired
private IWeCorpAccountService weCorpAccountService;
+ @Value("${wecome.chatKey}")
+ private String chartKey;
+
/**
* 查询敏感词设置
*
@@ -256,8 +261,23 @@ public class WeSensitiveServiceImpl implements IWeSensitiveService {
private void addHitSensitiveList(List json, WeSensitive weSensitive) {
elasticSearch.createIndex2(WeConstans.WECOM_SENSITIVE_HIT_INDEX, getSensitiveHitMapping());
- boolean sendMessage = false;
- if (weSensitive.getAlertFlag().equals(1)) {
+ //批量提交插入记录
+ if (CollectionUtils.isNotEmpty(json)) {
+ List list = json.stream().filter(Objects::nonNull).map(j -> {
+ ElasticSearchEntity ese = new ElasticSearchEntity();
+ j.put("status", "0");
+ ese.setData(j);
+ ese.setId(j.getString("msgid"));
+ return ese;
+ }).collect(Collectors.toList());
+ elasticSearch.insertBatchAsync(WeConstans.WECOM_SENSITIVE_HIT_INDEX, list, this::sendMessage, weSensitive);
+ }
+ }
+
+ private void sendMessage(Object listObj, Object weSensitiveObj) {
+ WeSensitive weSensitive = (WeSensitive) weSensitiveObj;
+ List list = (List) listObj;
+ if (weSensitive.getAlertFlag().equals(1) && CollectionUtils.isNotEmpty(list)) {
//发送消息通知给相应的审计人
WeCorpAccount weCorpAccount = weCorpAccountService.findValidWeCorpAccount();
String auditUserId = weSensitive.getAuditUserId();
@@ -268,22 +288,14 @@ public class WeSensitiveServiceImpl implements IWeSensitiveService {
pushDto.setTouser(auditUserId);
pushDto.setMsgtype(MessageType.TEXT.getMessageType());
pushDto.setText(textMessageDto);
- weMessagePushClient.sendMessageToUser(pushDto,weCorpAccount.getAgentId());
- sendMessage = true;
- }
- //批量提交插入记录
- if (CollectionUtils.isNotEmpty(json)) {
- boolean finalSendMessage = sendMessage;
- List list = json.stream().filter(Objects::nonNull).map(j -> {
- ElasticSearchEntity ese = new ElasticSearchEntity();
- if (finalSendMessage) {
- j.put("status", "1");
- }
- ese.setData(j);
- ese.setId(j.getString("msgid"));
- return ese;
+ weMessagePushClient.sendMessageToUser(pushDto, weCorpAccount.getAgentId());
+ //批量更新
+ list = list.stream().peek(entity -> {
+ Map map = entity.getData();
+ map.put("status", "1");
+ entity.setData(map);
}).collect(Collectors.toList());
- elasticSearch.insertBatch(WeConstans.WECOM_SENSITIVE_HIT_INDEX, list);
+ elasticSearch.updateBatch(WeConstans.WECOM_SENSITIVE_HIT_INDEX, list);
}
}
@@ -314,7 +326,7 @@ public class WeSensitiveServiceImpl implements IWeSensitiveService {
userBuilder.minimumShouldMatch(1);
BoolQueryBuilder searchBuilder = QueryBuilders.boolQuery().must(QueryBuilders.matchPhraseQuery("text.content", patternWord)).must(userBuilder);
builder.query(searchBuilder);
- List list = elasticSearch.search(WeConstans.WECOM_FINANCE_INDEX, builder, JSONObject.class);
+ List list = elasticSearch.search(chartKey, builder, JSONObject.class);
list.parallelStream().forEach(j -> j.put("pattern_words", patternWord));
resultList.addAll(list);
}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTagGroupServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTagGroupServiceImpl.java
index 11b917ca204c253a14466bd7340aec74c285b8de..065aadb16be11f5aea21fe1bcb8ef72cb6db0725 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTagGroupServiceImpl.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTagGroupServiceImpl.java
@@ -337,5 +337,10 @@ public class WeTagGroupServiceImpl extends ServiceImpl findCustomerTagByFlowerCustomerRelId(String flowerCustomerRelId) {
+ return this.baseMapper.findCustomerTagByFlowerCustomerRelId(flowerCustomerRelId);
+ }
+
}
diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeUserBehaviorDataServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeUserBehaviorDataServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..c50f32a36255a575da502d9a57af13e835f65e37
--- /dev/null
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeUserBehaviorDataServiceImpl.java
@@ -0,0 +1,77 @@
+package com.linkwechat.wecom.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.linkwechat.wecom.domain.WeUserBehaviorData;
+import com.linkwechat.wecom.domain.dto.WePageCountDto;
+import com.linkwechat.wecom.domain.query.WePageStateQuery;
+import com.linkwechat.wecom.mapper.WeUserBehaviorDataMapper;
+import com.linkwechat.wecom.service.IWeUserBehaviorDataService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 联系客户统计数据 Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2021-02-24
+ */
+@Service
+public class WeUserBehaviorDataServiceImpl extends ServiceImpl implements IWeUserBehaviorDataService {
+
+ @Override
+ public List queryList(WeUserBehaviorData weUserBehaviorData) {
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ if (StringUtils.isNotBlank(weUserBehaviorData.getUserId())){
+ lqw.eq(WeUserBehaviorData::getUserId ,weUserBehaviorData.getUserId());
+ }
+ if (weUserBehaviorData.getStatTime() != null){
+ lqw.eq(WeUserBehaviorData::getStatTime ,weUserBehaviorData.getStatTime());
+ }
+ if (weUserBehaviorData.getNewApplyCnt() != null){
+ lqw.eq(WeUserBehaviorData::getNewApplyCnt ,weUserBehaviorData.getNewApplyCnt());
+ }
+ if (weUserBehaviorData.getNewContactCnt() != null){
+ lqw.eq(WeUserBehaviorData::getNewContactCnt ,weUserBehaviorData.getNewContactCnt());
+ }
+ if (weUserBehaviorData.getChatCnt() != null){
+ lqw.eq(WeUserBehaviorData::getChatCnt ,weUserBehaviorData.getChatCnt());
+ }
+ if (weUserBehaviorData.getMessageCnt() != null){
+ lqw.eq(WeUserBehaviorData::getMessageCnt ,weUserBehaviorData.getMessageCnt());
+ }
+ if (weUserBehaviorData.getReplyPercentage() != null){
+ lqw.eq(WeUserBehaviorData::getReplyPercentage ,weUserBehaviorData.getReplyPercentage());
+ }
+ if (weUserBehaviorData.getAvgReplyTime() != null){
+ lqw.eq(WeUserBehaviorData::getAvgReplyTime ,weUserBehaviorData.getAvgReplyTime());
+ }
+ if (weUserBehaviorData.getNegativeFeedbackCnt() != null){
+ lqw.eq(WeUserBehaviorData::getNegativeFeedbackCnt ,weUserBehaviorData.getNegativeFeedbackCnt());
+ }
+ return this.list(lqw);
+ }
+
+ @Override
+ public WePageCountDto getCountDataByDay(String dateTime,String type) {
+ return this.baseMapper.getCountDataByDay(dateTime,type);
+ }
+
+ @Override
+ public List 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/WeUserServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeUserServiceImpl.java
index e2b5869b579061f5852b79fbf9a4443742458117..b5cc4829f6137f64c26b7f1d3bdb0e455d0c9303 100644
--- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeUserServiceImpl.java
+++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeUserServiceImpl.java
@@ -8,6 +8,7 @@ import com.linkwechat.common.core.redis.RedisCache;
import com.linkwechat.common.exception.wecom.WeComException;
import com.linkwechat.wecom.client.WeMsgAuditClient;
import com.linkwechat.wecom.client.WeUserClient;
+import com.linkwechat.wecom.domain.WeCustomerAddUser;
import com.linkwechat.wecom.domain.WeUser;
import com.linkwechat.wecom.domain.dto.WeUserInfoDto;
import com.linkwechat.wecom.domain.dto.msgaudit.WeMsgAuditDto;
@@ -222,8 +223,9 @@ public class WeUserServiceImpl extends ServiceImpl implemen
List weUsers
= weUserClient.list(WeConstans.WE_ROOT_DEPARMENT_ID, WeConstans.DEPARTMENT_SUB_WEUSER).getWeUsers();
if(CollectionUtil.isNotEmpty(weUsers)){
-
- this.saveOrUpdateBatch(weUsers);
+ weUsers.forEach(userInfo ->{
+ insertWeUserNoToWeCom(userInfo);
+ });
}
}
@@ -316,5 +318,10 @@ public class WeUserServiceImpl extends ServiceImpl implemen
}
+ @Override
+ public List findWeUserByCutomerId(String externalUserid) {
+ return this.baseMapper.findWeUserByCutomerId(externalUserid);
+ }
+
}
diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeCommunityNewGroupMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeCommunityNewGroupMapper.xml
index 6a57d7e04a0cbfef15bc590e46b3e9ba0330f4a4..22c4dc9683b3fab1ffa6e39b34a9133c33f3e469 100644
--- a/linkwe-wecom/src/main/resources/mapper/wecom/WeCommunityNewGroupMapper.xml
+++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeCommunityNewGroupMapper.xml
@@ -4,24 +4,71 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+ SELECT new_group_id,
+ emple_code_name,
+ 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
+ FROM we_community_new_group
+
+
\ No newline at end of file
diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeCustomerMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeCustomerMapper.xml
index 73693b34c30380c5f234f21966da8866ab7a06e2..2063757514ef277feed4d46235e1481f642cfb4e 100644
--- a/linkwe-wecom/src/main/resources/mapper/wecom/WeCustomerMapper.xml
+++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeCustomerMapper.xml
@@ -303,4 +303,56 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeCustomerMessageOriginalMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeCustomerMessageOriginalMapper.xml
index 7f92fba68ade4f03f32dd7219c39c23ba56529cf..c0e84d813756d33dd40eb084d848fcb779ffc32b 100644
--- a/linkwe-wecom/src/main/resources/mapper/wecom/WeCustomerMessageOriginalMapper.xml
+++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeCustomerMessageOriginalMapper.xml
@@ -40,6 +40,7 @@
AND wcm.create_by=#{sender}
+ ORDER BY wcmo.create_time DESC
+
+
+
\ 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
new file mode 100644
index 0000000000000000000000000000000000000000..69ff242309f05fafec849ba723da1fbb562f0823
--- /dev/null
+++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupStatisticMapper.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeTagGroupMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeTagGroupMapper.xml
index a53d9f1b911ce067e525fd44a3208b696067a357..2385248ee986a965710a867f98a70a05139e800c 100644
--- a/linkwe-wecom/src/main/resources/mapper/wecom/WeTagGroupMapper.xml
+++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeTagGroupMapper.xml
@@ -101,5 +101,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+
+
+
\ No newline at end of file
diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeUserBehaviorDataMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeUserBehaviorDataMapper.xml
new file mode 100644
index 0000000000000000000000000000000000000000..058c832a85633aa6d489ae69cf12e9d6d6be5ef4
--- /dev/null
+++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeUserBehaviorDataMapper.xml
@@ -0,0 +1,162 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeUserMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeUserMapper.xml
index 145043d690d0f85e661e69357c080c30315df06c..a178406ffde4003b70cd29f05a1bc401f6803590 100644
--- a/linkwe-wecom/src/main/resources/mapper/wecom/WeUserMapper.xml
+++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeUserMapper.xml
@@ -266,6 +266,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+
+
diff --git a/pom.xml b/pom.xml
index 35a110bf84f34229befa4fa328c29043746729b1..e720072003f744bede60084f2429ea5a3dd76ec9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,8 +2,8 @@
- 4.0.0
-
+ 4.0.0
+
com.linkwechat
linkwechat
3.1.0
@@ -11,18 +11,18 @@
linkwechat
http://www.ruoyi.vip
若依管理系统
-
+
2.3.7.RELEASE
3.1.0
UTF-8
UTF-8
1.8
-
+
1.1.14
1.19
2.9.2
- 2.3.2
+ 2.3.2
1.2.7
1.2.73
3.9.1
@@ -39,8 +39,9 @@
3.4.0
4.0.0
4.1.49.Final
+ 2.2.5.RELEASE
-
+
@@ -61,35 +62,35 @@
pom
import
-
+
com.alibaba
druid-spring-boot-starter
${druid.version}
-
+
eu.bitwalker
UserAgentUtils
${bitwalker.version}
-
+
com.github.pagehelper
pagehelper-spring-boot-starter
${pagehelper.boot.version}
-
+
com.github.oshi
oshi-core
${oshi.version}
-
+
io.springfox
@@ -106,91 +107,91 @@
-
+
io.springfox
springfox-swagger-ui
${swagger.version}
-
+
commons-io
commons-io
${commons.io.version}
-
+
commons-fileupload
commons-fileupload
${commons.fileupload.version}
-
+
org.apache.poi
poi-ooxml
${poi.version}
-
+
org.apache.velocity
velocity
${velocity.version}
-
+
com.alibaba
fastjson
${fastjson.version}
-
+
io.jsonwebtoken
jjwt
${jwt.version}
-
+
com.github.penggle
kaptcha
${kaptcha.version}
-
+
com.linkwechat
linkwe-quartz
${linkwe.version}
-
+
com.linkwechat
linkwe-generator
${linkwe.version}
-
+
com.linkwechat
linkwe-framework
${linkwe.version}
-
+
com.linkwechat
linkwe-system
${linkwe.version}
-
+
com.linkwechat
@@ -257,6 +258,17 @@
${vertx.version}
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+ ${nacos.version}
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+ ${nacos.version}
+
@@ -269,12 +281,8 @@
linkwe-common
linkwe-wecom
- pom
-
-
-
-
+ pom
diff --git a/sql/link-wechat.sql b/sql/link-wechat.sql
index 89070dc89184fc13c7dc871c58992e4769c851bd..624d7546e5153d1c56d4c40d07dc0ef727e2f700 100644
--- a/sql/link-wechat.sql
+++ b/sql/link-wechat.sql
@@ -24730,6 +24730,7 @@ DROP TABLE IF EXISTS `we_group_code`;
CREATE TABLE `we_group_code` (
`id` bigint(20) NOT NULL,
`code_url` varchar(150) NOT NULL COMMENT '二维码链接',
+ `uuid` varchar(32) NOT NULL COMMENT '二维码标识符',
`activity_head_url` varchar(150) DEFAULT NULL COMMENT '活码头像链接',
`activity_name` varchar(60) DEFAULT NULL COMMENT '活码名称',
`activity_desc` varchar(60) DEFAULT NULL COMMENT '活码描述',
@@ -24750,14 +24751,7 @@ CREATE TABLE `we_group_code` (
-- ----------------------------
-- Records of we_group_code
-- ----------------------------
-INSERT INTO `we_group_code` VALUES ('1354247069136719872', 'https://link-wechat-1251309172.cos.ap-nanjing.myqcloud.com/2021/01/27/1e46f0f1-0461-4837-ab54-bf107d92d7b6.png', '', '哈哈', '哈哈', null, '哈哈', '0', '', '', null, 'admin', '2021-01-27 09:57:17', 'admin', '2021-02-18 22:26:05', null);
-INSERT INTO `we_group_code` VALUES ('1354247279053246464', 'https://link-wechat-1251309172.cos.ap-nanjing.myqcloud.com/2021/01/27/739b72e1-f304-4dfe-928b-ace989dc5968.png', '', '123321', 'test、', null, '', '0', '', '', null, 'admin', '2021-01-27 09:58:07', '', '2021-01-27 09:58:07', null);
-INSERT INTO `we_group_code` VALUES ('1354258116010708992', 'https://link-wechat-1251309172.cos.ap-nanjing.myqcloud.com/2021/01/27/aaf5440a-d113-445a-b870-95c884a9bfa1.png', 'https://link-wechat-1251309172.cos.ap-nanjing.myqcloud.com/2021/01/27/64fdeab7-79cd-4f90-821b-3836b863cb82.jpg', '滴了个滴', '哒了个哒', null, '瞧一瞧,看一看', '1', '咚了个咚', '', null, 'admin', '2021-01-27 10:41:10', '', '2021-01-27 10:41:10', null);
-INSERT INTO `we_group_code` VALUES ('1361969875039424512', 'https://link-wechat-1251309172.cos.ap-nanjing.myqcloud.com/2021/02/17/4f913c79-978e-40a3-ad3a-e1f8d4167f65.png', '', '辅导费 ', '辅导费', null, '短发短发', '0', '', '', null, 'admin', '2021-02-17 17:24:57', '', '2021-02-17 17:24:57', null);
-INSERT INTO `we_group_code` VALUES ('1362406755178516480', 'https://link-wechat-1251309172.cos.ap-nanjing.myqcloud.com/2021/02/18/36ef3dc3-f203-47c3-9412-8cb3a184d5b1.png', 'https://link-wechat-1251309172.cos.ap-nanjing.myqcloud.com/2021/02/18/2f3316fa-4ab5-458f-977c-34657c83ab10.JPG', '时代大厦', 'da s d', null, '阿迪三大', '0', '哈哈哈', '', null, 'admin', '2021-02-18 22:20:57', '', '2021-02-18 22:20:57', null);
-INSERT INTO `we_group_code` VALUES ('1362579210891300864', 'https://link-wechat-1251309172.cos.ap-nanjing.myqcloud.com/2021/02/19/f4bfdaa6-ad93-42e4-8b23-a61136b20277.png', 'https://link-wechat-1251309172.cos.ap-nanjing.myqcloud.com/2021/02/19/f6915c67-9be2-4b59-b5b7-1b38543c0703.jpg', '322', '3232', null, '323232232323rere', '0', '', '', null, 'admin', '2021-02-19 09:46:14', '', '2021-02-19 09:46:14', null);
-INSERT INTO `we_group_code` VALUES ('1362580445904113664', 'https://link-wechat-1251309172.cos.ap-nanjing.myqcloud.com/2021/02/19/5b9bb660-fdf9-48e6-8018-e9e0a233f1da.png', 'https://link-wechat-1251309172.cos.ap-nanjing.myqcloud.com/2021/02/19/157ede0c-1fd5-4002-98c5-58f10a24162c.jpg', '测试群活码', '测试', null, '测试', '0', '', '', null, 'admin', '2021-02-19 09:51:08', '', '2021-02-19 09:51:08', null);
-INSERT INTO `we_group_code` VALUES ('1362600782515539968', 'https://link-wechat-1251309172.cos.ap-nanjing.myqcloud.com/2021/02/19/357fc901-20e2-4227-ac25-7b7df958084e.png', 'https://link-wechat-1251309172.cos.ap-nanjing.myqcloud.com/2021/02/19/53ce7c00-3c6e-4942-b510-6b2387576689.jpg', '信息', '挺好听那', null, '', '0', '', '', null, 'admin', '2021-02-19 11:11:57', '', '2021-02-19 11:11:57', null);
+INSERT INTO `we_group_code` VALUES (1364149701775069184, 'https://link-wechat-1251309172.cos.ap-nanjing.myqcloud.com/2021/02/23/142c491d-cf4c-4159-a89d-71c68151e41f.png', '5f8aa1f033d240bbb3d2f5064b905bd0', '', 'test1', '123123123', NULL, '', 0, '', '', NULL, 'admin', '2021-02-23 17:46:48', '', '2021-02-23 17:46:48', NULL);
-- ----------------------------
-- Table structure for we_group_code_actual