From e9c73ccf95a6269f828bd2034fa48b849b5a5472 Mon Sep 17 00:00:00 2001 From: leejoker <1056650571@qq.com> Date: Thu, 11 Mar 2021 15:08:18 +0800 Subject: [PATCH 01/16] =?UTF-8?q?=E5=A2=9E=E5=8A=A0Dockerfile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buidDocker.sh | 5 + docker-compose.yml | 28 ++++ linkwe-admin/pom.xml | 38 +++++- linkwe-admin/src/main/docker/Dockerfile | 15 +++ linkwe-admin/src/main/docker/Shanghai | Bin 0 -> 554 bytes .../src/main/resources/application-druid.yml | 110 ++++++++-------- .../src/main/resources/application.yml | 122 +++++++++--------- 7 files changed, 198 insertions(+), 120 deletions(-) create mode 100644 buidDocker.sh create mode 100644 docker-compose.yml create mode 100644 linkwe-admin/src/main/docker/Dockerfile create mode 100644 linkwe-admin/src/main/docker/Shanghai diff --git a/buidDocker.sh b/buidDocker.sh new file mode 100644 index 000000000..019d23b56 --- /dev/null +++ b/buidDocker.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +# 需要使用maven,请自行配置环境变量 +cd ./linkwe-admin || exit +mvn docker:build diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..4dba3facc --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,28 @@ +version: '3.3' + +# 如需配置变量,请在environment中进行变量配置 +services: + api: + image: link-wechat + container_name: link-wechat + environment: + - JAVA_OPTS=-Xms4096m -Xmx4096m -Duser.timezone=Asia/Shanghai + - TZ=Asia/Shanghai + - NACOS_SERVER + # 如果使用nacos,以下变量可以不进行配置 + - ES_ADDRESS + - DB_HOST + - DB_PORT + - DB_NAME + - DB_USER + - DB_PASS + - REDIS_HOST + - REDIS_PORT + ports: + - "${APP_PORT}:8090" + volumes: + - ./logs:/logs + # 上传文件地址,请根据实际${ruoyi.profile}自行修改映射 + - ./pic:/app/project/pic + - ./tmp:/tmp + restart: always \ No newline at end of file diff --git a/linkwe-admin/pom.xml b/linkwe-admin/pom.xml index b940a787b..ec5b0750b 100644 --- a/linkwe-admin/pom.xml +++ b/linkwe-admin/pom.xml @@ -79,10 +79,10 @@ spring-cloud-starter-alibaba-nacos-config - - - - + + + + @@ -111,6 +111,36 @@ ${project.artifactId} + + com.spotify + docker-maven-plugin + 1.2.2 + + ${project.artifactId} + ${basedir}/src/main/docker + + link-wechat + + + + ${project.build.finalName}.jar + + + + / + ${project.build.directory} + ${project.build.finalName}.jar + + + + + + javax.activation + activation + 1.1.1 + + + ${project.artifactId} diff --git a/linkwe-admin/src/main/docker/Dockerfile b/linkwe-admin/src/main/docker/Dockerfile new file mode 100644 index 000000000..bb49258b4 --- /dev/null +++ b/linkwe-admin/src/main/docker/Dockerfile @@ -0,0 +1,15 @@ +FROM openjdk:8-alpine + +# 设置时区 +ADD Shanghai /usr/share/zoneinfo/Asia/ +RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ + && echo "Asia/Shanghai" > /etc/timezone + +VOLUME /tmp + +#设置字符集 +ENV LANG en_US.UTF-8 +ARG JAR_FILE +ADD $JAR_FILE app.jar + +ENTRYPOINT ["sh","-c","java -server $JAVA_OPTS -jar /app.jar"] \ No newline at end of file diff --git a/linkwe-admin/src/main/docker/Shanghai b/linkwe-admin/src/main/docker/Shanghai new file mode 100644 index 0000000000000000000000000000000000000000..d7f92e2fa5868addab98170099181375634ab1ca GIT binary patch literal 554 zcma)&y-EW?6h`mH|6sA$`Zq?6Nnv9lf+EokS?(n{}{R)XH)&RKS5nE8%(T&u3guNu%lG&QNs_jsh!%TXn2jD7iy_OmpH zZjxqDkk1O8_oTR^edw{E z<^3INO1IfqpZ0{vw^q1X%tK;AqFQQPNMuWm4T%nk4^aTo08s(a0Z{_cVySAl9z766 m5KRzO5M2;u5N!~35Pg=a5TemiRZ3rzPU=4{)2elOE&T%%N2$92 literal 0 HcmV?d00001 diff --git a/linkwe-admin/src/main/resources/application-druid.yml b/linkwe-admin/src/main/resources/application-druid.yml index 3d173be1e..72489d2ce 100644 --- a/linkwe-admin/src/main/resources/application-druid.yml +++ b/linkwe-admin/src/main/resources/application-druid.yml @@ -1,57 +1,57 @@ # 数据源配置 spring: - datasource: - type: com.alibaba.druid.pool.DruidDataSource - driverClassName: com.mysql.cj.jdbc.Driver - druid: - # 主库数据源 - master: - url: jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/link-wechat-prod?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 - username: ${DB_USER:root} - password: ${DB_PASS:root} - # 从库数据源 - slave: - # 从数据源开关/默认关闭 - enabled: false - url: - username: - password: - # 初始连接数 - initialSize: 5 - # 最小连接池数量 - minIdle: 10 - # 最大连接池数量 - maxActive: 20 - # 配置获取连接等待超时的时间 - maxWait: 60000 - # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 - timeBetweenEvictionRunsMillis: 60000 - # 配置一个连接在池中最小生存的时间,单位是毫秒 - minEvictableIdleTimeMillis: 300000 - # 配置一个连接在池中最大生存的时间,单位是毫秒 - maxEvictableIdleTimeMillis: 900000 - # 配置检测连接是否有效 - validationQuery: SELECT 1 FROM DUAL - testWhileIdle: true - testOnBorrow: false - testOnReturn: false - webStatFilter: - enabled: true - statViewServlet: - enabled: true - # 设置白名单,不填则允许所有访问 - allow: - url-pattern: /druid/* - # 控制台管理用户名和密码 - login-username: - login-password: - filter: - stat: - enabled: true - # 慢SQL记录 - log-slow-sql: true - slow-sql-millis: 1000 - merge-sql: true - wall: - config: - multi-statement-allow: true + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + druid: + # 主库数据源 + master: + url: jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:link-wechat-prod}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: ${DB_USER:root} + password: ${DB_PASS:root} + # 从库数据源 + slave: + # 从数据源开关/默认关闭 + enabled: false + url: + username: + password: + # 初始连接数 + initialSize: 5 + # 最小连接池数量 + minIdle: 10 + # 最大连接池数量 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + # 配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: + login-password: + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true diff --git a/linkwe-admin/src/main/resources/application.yml b/linkwe-admin/src/main/resources/application.yml index fc0eabdb5..f69eb0b63 100644 --- a/linkwe-admin/src/main/resources/application.yml +++ b/linkwe-admin/src/main/resources/application.yml @@ -20,7 +20,7 @@ ruoyi: # 开发环境配置 server: # 服务器的HTTP端口,默认为8090 - port: 8090 + port: ${APP_PORT:8090} servlet: # 应用的访问路径 context-path: / @@ -55,11 +55,11 @@ spring: active: druid # 文件上传 servlet: - multipart: - # 单个文件大小 - max-file-size: 10MB - # 设置总上传的文件大小 - max-request-size: 20MB + multipart: + # 单个文件大小 + max-file-size: 10MB + # 设置总上传的文件大小 + max-request-size: 20MB task: execution: pool: @@ -95,24 +95,24 @@ spring: # token配置 token: - # 令牌自定义标识 - header: Authorization - # 令牌密钥 - secret: abcdefghijklmnopqrstuvwxyz - # 令牌有效期(默认30分钟) - expireTime: 30 + # 令牌自定义标识 + header: Authorization + # 令牌密钥 + secret: abcdefghijklmnopqrstuvwxyz + # 令牌有效期(默认30分钟) + expireTime: 30 mybatis-plus: - mapper-locations: classpath*:mapper/**/*Mapper.xml - type-aliases-package: com.linkwechat.**.domain - type-handlers-package: com.linkwechat.framework.handler.GenericTypeHandler,com.linkwechat.framework.handler.StringArrayJoinTypeHandler - configuration: - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl - global-config: - db-config: - logic-delete-field: delFlag - logic-delete-value: 1 - logic-not-delete-value: 0 + mapper-locations: classpath*:mapper/**/*Mapper.xml + type-aliases-package: com.linkwechat.**.domain + type-handlers-package: com.linkwechat.framework.handler.GenericTypeHandler,com.linkwechat.framework.handler.StringArrayJoinTypeHandler + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + global-config: + db-config: + logic-delete-field: delFlag + logic-delete-value: 1 + logic-not-delete-value: 0 ## MyBatis配置 #mybatis: @@ -173,49 +173,49 @@ wecome: serverUrl: https://qyapi.weixin.qq.com/ weComePrefix: cgi-bin noAccessTokenUrl: - - /gettoken - - /service/get_provider_token - - /wecom/chat/side/list - - /wecom/chat/item/list - - /wecom/chat/collection/addCollection - - /wecom/chat/collection/cancleCollection - - /wecom/chat/collection/list + - /gettoken + - /service/get_provider_token + - /wecom/chat/side/list + - /wecom/chat/item/list + - /wecom/chat/collection/addCollection + - /wecom/chat/collection/cancleCollection + - /wecom/chat/collection/list needContactTokenUrl: - - /externalcontact/get_follow_user_list - - /externalcontact/add_contact_way - - /externalcontact/update_contact_way - - /externalcontact/add_corp_tag - - /externalcontact/get_corp_tag_list - - /externalcontact/del_corp_tag - - /externalcontact/edit_corp_tag - - /externalcontact/list - - /externalcontact/get - - /externalcontact/batch/get_by_user - - /externalcontact/groupchat/list - - /externalcontact/groupchat/get - - /externalcontact/mark_tag - - /externalcontact/transfer - - /externalcontact/groupchat/transfer - - /externalcontact/get_unassigned_list - - /externalcontact/send_welcome_msg - - /externalcontact/unionid_to_external_userid - - /externalcontact/add_msg_template - - /externalcontact/get_group_msg_result - - /externalcontact/get_user_behavior_data - - /externalcontact/groupchat/statistic - fileUplodUrl: /media/upload,/media/uploadimg + - /externalcontact/get_follow_user_list + - /externalcontact/add_contact_way + - /externalcontact/update_contact_way + - /externalcontact/add_corp_tag + - /externalcontact/get_corp_tag_list + - /externalcontact/del_corp_tag + - /externalcontact/edit_corp_tag + - /externalcontact/list + - /externalcontact/get + - /externalcontact/batch/get_by_user + - /externalcontact/groupchat/list + - /externalcontact/groupchat/get + - /externalcontact/mark_tag + - /externalcontact/transfer + - /externalcontact/groupchat/transfer + - /externalcontact/get_unassigned_list + - /externalcontact/send_welcome_msg + - /externalcontact/unionid_to_external_userid + - /externalcontact/add_msg_template + - /externalcontact/get_group_msg_result + - /externalcontact/get_user_behavior_data + - /externalcontact/groupchat/statistic + fileUplodUrl: /media/upload,/media/uploadimg needProviderTokenUrl: - - /service/get_login_info + - /service/get_login_info needChatTokenUrl: - - /msgaudit/get_permit_user_list - - /msgaudit/check_single_agree - - /msgaudit/check_room_agree - - /msgaudit/groupchat/get + - /msgaudit/get_permit_user_list + - /msgaudit/check_single_agree + - /msgaudit/check_room_agree + - /msgaudit/groupchat/get thirdAppUrl: - - /user/getuserinfo - - /get_jsapi_ticket - - /ticket/get - - /message/send + - /user/getuserinfo + - /get_jsapi_ticket + - /ticket/get + - /message/send #企微回调通知配置 callBack: appIdOrCorpId: ww24262ce93851488f -- Gitee From 92ffb77c108490c285099127704c0a808a77b99b Mon Sep 17 00:00:00 2001 From: leejoker <1056650571@qq.com> Date: Fri, 12 Mar 2021 01:13:06 +0800 Subject: [PATCH 02/16] =?UTF-8?q?=E4=BF=AE=E6=94=B9Dockerfile=E5=92=8Cdock?= =?UTF-8?q?er-compose?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buidDocker.sh | 5 ----- docker-compose.yml | 4 ++-- linkwe-admin/pom.xml | 6 +++--- 3 files changed, 5 insertions(+), 10 deletions(-) delete mode 100644 buidDocker.sh diff --git a/buidDocker.sh b/buidDocker.sh deleted file mode 100644 index 019d23b56..000000000 --- a/buidDocker.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -# 需要使用maven,请自行配置环境变量 -cd ./linkwe-admin || exit -mvn docker:build diff --git a/docker-compose.yml b/docker-compose.yml index 4dba3facc..8f309f336 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,8 +3,8 @@ version: '3.3' # 如需配置变量,请在environment中进行变量配置 services: api: - image: link-wechat - container_name: link-wechat + image: linkwechat + container_name: linkwechat environment: - JAVA_OPTS=-Xms4096m -Xmx4096m -Duser.timezone=Asia/Shanghai - TZ=Asia/Shanghai diff --git a/linkwe-admin/pom.xml b/linkwe-admin/pom.xml index ec5b0750b..7516087b1 100644 --- a/linkwe-admin/pom.xml +++ b/linkwe-admin/pom.xml @@ -114,12 +114,12 @@ com.spotify docker-maven-plugin - 1.2.2 + 1.1.1 - ${project.artifactId} + ${parent.artifactId} ${basedir}/src/main/docker - link-wechat + ${parent.version} -- Gitee From 1ec92abd61ddb40e586ffe71232c49d61819897e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B0=B4=E5=BA=93=E6=B5=AA=E5=AD=90?= <1539136324@qq.com> Date: Thu, 11 Mar 2021 18:23:25 +0800 Subject: [PATCH 03/16] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E7=A5=A8=E6=8D=AE?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/wecom/WeTicketController.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeTicketController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeTicketController.java index 4ed442506..2329864cd 100644 --- a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeTicketController.java +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeTicketController.java @@ -42,11 +42,11 @@ public class WeTicketController extends BaseController { @Log(title = "获取企业的jsapi_ticket", businessType = BusinessType.OTHER) @GetMapping("/getAppTicket") public AjaxResult getAppTicket(String url,String agentId) { - String ticketVaule = redisCache.getCacheObject(WeConstans.AppTicketKey); + String ticketVaule = redisCache.getCacheObject(WeConstans.AppTicketKey+"::"+agentId); if (StringUtils.isEmpty(ticketVaule)) { WeH5TicketDto ticketRes = weTicketClient.getJsapiTicket(agentId); if (ticketRes != null && StringUtils.isNotEmpty(ticketRes.getTicket())) { - redisCache.setCacheObject(WeConstans.AppTicketKey, ticketRes.getTicket(), ticketRes.getExpiresIn(), TimeUnit.SECONDS); + redisCache.setCacheObject(WeConstans.AppTicketKey+"::"+agentId, ticketRes.getTicket(), ticketRes.getExpiresIn(), TimeUnit.SECONDS); } ticketVaule = ticketRes.getTicket(); } @@ -62,11 +62,11 @@ public class WeTicketController extends BaseController { @Log(title = "获取应用的jsapi_ticket", businessType = BusinessType.OTHER) @GetMapping("/getAgentTicket") public AjaxResult getAgentTicket(String url,String agentId) { - String ticketVaule = redisCache.getCacheObject(WeConstans.AgentTicketKey); + String ticketVaule = redisCache.getCacheObject(WeConstans.AgentTicketKey+"::"+agentId); if (StringUtils.isEmpty(ticketVaule)) { WeH5TicketDto ticketRes = weTicketClient.getTicket(agentId); if (ticketRes != null && StringUtils.isNotEmpty(ticketRes.getTicket())) { - redisCache.setCacheObject(WeConstans.AgentTicketKey, ticketRes.getTicket(), ticketRes.getExpiresIn(), TimeUnit.SECONDS); + redisCache.setCacheObject(WeConstans.AgentTicketKey+"::"+agentId, ticketRes.getTicket(), ticketRes.getExpiresIn(), TimeUnit.SECONDS); } ticketVaule = ticketRes.getTicket(); } -- Gitee From 23b09718f317e5c1e07d0c339e56dde6def3ef04 Mon Sep 17 00:00:00 2001 From: 18356073052 <274131322@qq.com> Date: Thu, 11 Mar 2021 23:04:01 +0800 Subject: [PATCH 04/16] fix CommunityNewGroup detail lost a field groupCodeId --- .../domain/vo/WeCommunityNewGroupVo.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) 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 fd5a23d19..9495e541b 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeCommunityNewGroupVo.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeCommunityNewGroupVo.java @@ -22,7 +22,7 @@ import java.util.List; public class WeCommunityNewGroupVo { /** - *主键ID + * 主键ID */ @ApiModelProperty("主键ID") private Long newGroupId; @@ -45,6 +45,12 @@ public class WeCommunityNewGroupVo { @ApiModelProperty("欢迎语") private String welcomeMsg; + /** + * 群活码id + */ + @ApiModelProperty("群活码id") + private Long groupCodeId; + /** * 新增联系方式的配置id */ @@ -101,13 +107,17 @@ public class WeCommunityNewGroupVo { @ApiModelProperty("实际群聊") private List weGroupUserScops; - /** 创建者 */ - @ApiModelProperty(value = "创建者",hidden = true) + /** + * 创建者 + */ + @ApiModelProperty(value = "创建者", hidden = true) private String createBy; - /** 创建时间 */ + /** + * 创建时间 + */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @ApiModelProperty(value = "创建时间",hidden = true) - private Date createTime=new Date(); + @ApiModelProperty(value = "创建时间", hidden = true) + private Date createTime = new Date(); } -- Gitee From bafae4e048c19a1d5754e82a9d09571fd83a2ce0 Mon Sep 17 00:00:00 2001 From: "1539136324@qq.com" Date: Fri, 12 Mar 2021 00:17:27 +0800 Subject: [PATCH 05/16] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3;CRM?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E8=AF=A6=E6=83=85=E6=8E=A5=E5=8F=A3=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0age=E5=AD=97=E6=AE=B5,=E5=8A=A8=E6=80=81=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E5=AE=A2=E6=88=B7=E5=B9=B4=E9=BE=84;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wecom/WeCustomerPortraitController.java | 2 +- .../linkwechat/common/utils/DateUtils.java | 29 +++++++++++++ .../linkwechat/wecom/client/WeAppClient.java | 41 +++++++++++++++++++ .../wecom/domain/WeCustomerPortrait.java | 2 + .../wecom/domain/dto/WeAppDetailDto.java | 37 +++++++++++++++++ .../linkwechat/wecom/domain/dto/WeAppDto.java | 25 +++++++++++ .../wecom/service/IWeCustomerService.java | 2 +- .../impl/WeCommunityNewGroupServiceImpl.java | 13 ++++-- .../service/impl/WeCustomerServiceImpl.java | 8 +++- 9 files changed, 152 insertions(+), 7 deletions(-) create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAppClient.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDetailDto.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDto.java diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCustomerPortraitController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCustomerPortraitController.java index 6c422f5eb..db1252571 100644 --- a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCustomerPortraitController.java +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCustomerPortraitController.java @@ -55,7 +55,7 @@ public class WeCustomerPortraitController extends BaseController { * @return */ @GetMapping(value = "/findWeCustomerInfo") - public AjaxResult findWeCustomerInfo(String externalUserid, String userid){ + public AjaxResult findWeCustomerInfo(String externalUserid, String userid) throws Exception { return AjaxResult.success( iWeCustomerService.findCustomerByOperUseridAndCustomerId(externalUserid,userid) diff --git a/linkwe-common/src/main/java/com/linkwechat/common/utils/DateUtils.java b/linkwe-common/src/main/java/com/linkwechat/common/utils/DateUtils.java index 939225471..0a27a7b9f 100644 --- a/linkwe-common/src/main/java/com/linkwechat/common/utils/DateUtils.java +++ b/linkwe-common/src/main/java/com/linkwechat/common/utils/DateUtils.java @@ -195,4 +195,33 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils long millionSeconds = sdf.parse(date).getTime();//毫秒 return millionSeconds; } + + + + public static int getAge(Date birthDay) throws Exception { + Calendar cal = Calendar.getInstance(); + if (cal.before(birthDay)) { //出生日期晚于当前时间,无法计算 + throw new IllegalArgumentException( + "The birthDay is before Now.It's unbelievable!"); + } + int yearNow = cal.get(Calendar.YEAR); //当前年份 + int monthNow = cal.get(Calendar.MONTH); //当前月份 + int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH); //当前日期 + cal.setTime(birthDay); + int yearBirth = cal.get(Calendar.YEAR); + int monthBirth = cal.get(Calendar.MONTH); + int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH); + int age = yearNow - yearBirth; //计算整岁数 + if (monthNow <= monthBirth) { + if (monthNow == monthBirth) { + if (dayOfMonthNow < dayOfMonthBirth) age--;//当前日期在生日之前,年龄减一 + }else{ + age--;//当前月份在生日之前,年龄减一 + } } + return age; + + } + + + } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAppClient.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAppClient.java new file mode 100644 index 000000000..64d38a3b9 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAppClient.java @@ -0,0 +1,41 @@ +package com.linkwechat.wecom.client; + +import com.dtflys.forest.annotation.DataObject; +import com.dtflys.forest.annotation.Query; +import com.dtflys.forest.annotation.Request; +import com.linkwechat.wecom.domain.dto.WeAppDetailDto; +import com.linkwechat.wecom.domain.dto.WeAppDto; +import com.linkwechat.wecom.domain.dto.WeResultDto; + +/** + * 应用管理相关接口 + */ +public interface WeAppClient { + + /** + * 获取企业应用列表 + * @return + */ + @Request(url = "/agent/list") + WeAppDto findAgentList(); + + + /** + * 根据应用id获取应用详情 + * @param agentid + * @return + */ + @Request(url = "/agent/get") + WeAppDetailDto findAgentById(@Query("agentid") Integer agentid); + + + /** + * 设置应用 + * @param weAppDetailDto + * @return + */ + @Request(url = "/agent/set") + WeResultDto updateAgentById(@DataObject WeAppDetailDto weAppDetailDto); + + +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerPortrait.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerPortrait.java index d87e26ecc..6ef123107 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerPortrait.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCustomerPortrait.java @@ -38,6 +38,8 @@ public class WeCustomerPortrait { private String remarkCorpName; //描述 private String description; + //年纪 + private int age; //客户标签 private List weTagGroupList; diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDetailDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDetailDto.java new file mode 100644 index 000000000..574c70c8a --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDetailDto.java @@ -0,0 +1,37 @@ +package com.linkwechat.wecom.domain.dto; + + +import lombok.Data; + +/** + * 企业应用详情接口 + */ +@Data +public class WeAppDetailDto extends WeResultDto{ + //企业应用id + private Long agentid; + //企业应用名称 + private String name; + //企业应用方形头像 + private String square_logo_url; + //企业应用详情 + private String description; + //企业应用是否被停用 + private Boolean close; + //企业应用可信域名 + private String redirect_domain; + //企业应用是否打开地理位置上报 0:不上报;1:进入会话上报; + private Integer report_location_flag; + //是否上报用户进入应用事件。0:不接收;1:接收 + private Integer isreportenter; + //应用主页url + private String home_url; + + //企业应用头像的mediaid,通过素材管理接口上传图片获得mediaid,上传后会自动裁剪成方形和圆形两个头像 + private String logo_mediaid; + + + + + +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDto.java new file mode 100644 index 000000000..997539299 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDto.java @@ -0,0 +1,25 @@ +package com.linkwechat.wecom.domain.dto; + +import lombok.Data; + +import java.util.List; + +@Data +public class WeAppDto extends WeResultDto{ + + + + private List agentlist; + + + @Data + public class Agent{ + //企业应用id + private Long agentid; + //企业应用名称 + private String name; + //企业应用方形头像url + private String square_logo_url; + } + +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCustomerService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCustomerService.java index f80cc58a3..a7164be33 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCustomerService.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCustomerService.java @@ -118,7 +118,7 @@ public interface IWeCustomerService extends IService * @param userid * @return */ - WeCustomerPortrait findCustomerByOperUseridAndCustomerId(String externalUserid,String userid); + WeCustomerPortrait findCustomerByOperUseridAndCustomerId(String externalUserid,String userid) throws Exception; /** diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCommunityNewGroupServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCommunityNewGroupServiceImpl.java index 40dd47d5a..1f1a6d421 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCommunityNewGroupServiceImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCommunityNewGroupServiceImpl.java @@ -1,6 +1,7 @@ package com.linkwechat.wecom.service.impl; import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Lists; import com.linkwechat.common.exception.wecom.WeComException; @@ -72,7 +73,7 @@ public class WeCommunityNewGroupServiceImpl extends ServiceImpl selectWeCommunityNewGroupList(String empleCodeName, String createBy, String beginTime, String endTime) { List weCommunityNewGroupVos = weCommunityNewGroupMapper.selectWeCommunityNewGroupList(empleCodeName, createBy, beginTime, endTime); + if (CollectionUtil.isNotEmpty(weCommunityNewGroupVos)) { List newGroupIdList = weCommunityNewGroupVos.stream().map(WeCommunityNewGroupVo::getNewGroupId).collect(Collectors.toList()); List useScopList = iWeEmpleCodeUseScopService.selectWeEmpleCodeUseScopListByIds(newGroupIdList); @@ -166,13 +168,15 @@ public class WeCommunityNewGroupServiceImpl extends ServiceImpl() + .eq(WeCommunityNewGroup::getGroupCodeId,communityNewGroupDto.getGroupCodeId())); +// WeCommunityNewGroup communityNewGroup = weCommunityNewGroupMapper.selectById(communityNewGroupDto.getGroupCodeId()); + if (null == communityNewGroup) { throw new WeComException("信息不存在!"); } @@ -180,6 +184,7 @@ public class WeCommunityNewGroupServiceImpl extends ServiceImpl Date: Fri, 12 Mar 2021 09:42:47 +0800 Subject: [PATCH 06/16] fix some bugs --- .../linkwechat/wecom/domain/WeCommunityNewGroup.java | 6 ++++++ .../wecom/domain/dto/WeCommunityNewGroupDto.java | 6 ++++++ .../wecom/mapper/WeCommunityNewGroupMapper.java | 12 ++++++++---- .../service/impl/WeCommunityNewGroupServiceImpl.java | 6 ++++-- .../mapper/wecom/WeCommunityNewGroupMapper.xml | 7 ++++--- 5 files changed, 28 insertions(+), 9 deletions(-) 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 c19ef8504..9fae521a8 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 @@ -39,6 +39,12 @@ public class WeCommunityNewGroup extends BaseEntity { @ApiModelProperty("欢迎语") private String welcomeMsg; + /** + * 新增联系方式的配置id + */ + @ApiModelProperty("新增联系方式的配置id") + private String configId; + /** * 二维码链接 */ 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 235e02e9d..0618da8a2 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 @@ -58,6 +58,12 @@ public class WeCommunityNewGroupDto { @ApiModelProperty("客户添加时无需经过确认自动成为好友:1:是;0:否") private Boolean isJoinConfirmFriends; + /** + * 新增联系方式的配置id + */ + @ApiModelProperty("新增联系方式的配置id") + private String configId; + /** * 二维码链接 */ 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 8dc46fefc..3a541819e 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeCommunityNewGroupMapper.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeCommunityNewGroupMapper.java @@ -18,14 +18,18 @@ public interface WeCommunityNewGroupMapper extends BaseMapper selectWeCommunityNewGroupList(@Param("empleCodeName") String empleCodeName, @Param("createBy") String createBy - ,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + List selectWeCommunityNewGroupList(@Param("employCodeName") String employCodeName, @Param("createBy") String createBy + , @Param("beginTime") String beginTime, @Param("endTime") String endTime); /** * 获取新客自动拉群详细信息 + * * @param newGroupId 主键id * @return {@link WeCommunityNewGroupVo} 自动拉群信息 */ diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCommunityNewGroupServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCommunityNewGroupServiceImpl.java index 1f1a6d421..a6fa471e0 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 @@ -85,6 +85,7 @@ public class WeCommunityNewGroupServiceImpl extends ServiceImpl() - .eq(WeCommunityNewGroup::getGroupCodeId,communityNewGroupDto.getGroupCodeId())); + WeCommunityNewGroup communityNewGroup = weCommunityNewGroupMapper.selectOne(new LambdaQueryWrapper() + .eq(WeCommunityNewGroup::getGroupCodeId, communityNewGroupDto.getGroupCodeId())); // WeCommunityNewGroup communityNewGroup = weCommunityNewGroupMapper.selectById(communityNewGroupDto.getGroupCodeId()); if (null == communityNewGroup) { throw new WeComException("信息不存在!"); diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeCommunityNewGroupMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeCommunityNewGroupMapper.xml index 22c4dc968..9e1a836c5 100644 --- a/linkwe-wecom/src/main/resources/mapper/wecom/WeCommunityNewGroupMapper.xml +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeCommunityNewGroupMapper.xml @@ -18,7 +18,8 @@ qr_code, is_join_confirm_friends, media_id, - join_friend_nums + join_friend_nums, + config_id FROM we_community_new_group @@ -36,8 +37,8 @@ del_flag = 0 - - AND emple_code_name LIKE CONCAT("%",#{empleCodeName},"%") + + AND emple_code_name LIKE CONCAT("%",#{employCodeName},"%") AND date_format(create_time,'%y%m%d') >= date_format(#{beginTime},'%y%m%d') -- Gitee From b297e0c68806bee19407d784238f9ace743ad7fc Mon Sep 17 00:00:00 2001 From: "1539136324@qq.com" Date: Fri, 12 Mar 2021 23:53:45 +0800 Subject: [PATCH 07/16] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=B0=E5=AE=A2?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=8B=89=E7=BE=A4=E6=8E=A5=E5=8F=A3BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../linkwechat/wecom/client/WeAppClient.java | 4 ---- .../wecom/domain/WeCommunityNewGroup.java | 4 ++++ .../wecom/domain/dto/WeAppDetailDto.java | 6 ------ .../domain/dto/WeCommunityNewGroupDto.java | 19 ++++++------------- .../impl/WeCommunityNewGroupServiceImpl.java | 16 +++++++++------- 5 files changed, 19 insertions(+), 30 deletions(-) diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAppClient.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAppClient.java index 64d38a3b9..340517623 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAppClient.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeAppClient.java @@ -19,7 +19,6 @@ public interface WeAppClient { @Request(url = "/agent/list") WeAppDto findAgentList(); - /** * 根据应用id获取应用详情 * @param agentid @@ -28,7 +27,6 @@ public interface WeAppClient { @Request(url = "/agent/get") WeAppDetailDto findAgentById(@Query("agentid") Integer agentid); - /** * 设置应用 * @param weAppDetailDto @@ -36,6 +34,4 @@ public interface WeAppClient { */ @Request(url = "/agent/set") WeResultDto updateAgentById(@DataObject WeAppDetailDto weAppDetailDto); - - } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCommunityNewGroup.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCommunityNewGroup.java index 9fae521a8..98296ee26 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCommunityNewGroup.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCommunityNewGroup.java @@ -1,5 +1,7 @@ package com.linkwechat.wecom.domain; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import com.linkwechat.common.core.domain.BaseEntity; import com.linkwechat.common.utils.SnowFlakeUtil; import io.swagger.annotations.ApiModel; @@ -14,11 +16,13 @@ import lombok.Data; */ @ApiModel @Data +@TableName("we_community_new_group") public class WeCommunityNewGroup extends BaseEntity { /** *主键ID */ + @TableId private Long newGroupId= SnowFlakeUtil.nextId(); /** diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDetailDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDetailDto.java index 574c70c8a..74cba1c61 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDetailDto.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeAppDetailDto.java @@ -26,12 +26,6 @@ public class WeAppDetailDto extends WeResultDto{ private Integer isreportenter; //应用主页url private String home_url; - //企业应用头像的mediaid,通过素材管理接口上传图片获得mediaid,上传后会自动裁剪成方形和圆形两个头像 private String logo_mediaid; - - - - - } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeCommunityNewGroupDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeCommunityNewGroupDto.java index 0618da8a2..5d022b733 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeCommunityNewGroupDto.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeCommunityNewGroupDto.java @@ -4,10 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.linkwechat.wecom.domain.WeEmpleCodeTag; import com.linkwechat.wecom.domain.WeEmpleCodeUseScop; import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.Data; - -import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.util.List; @@ -17,63 +14,59 @@ import java.util.List; * @author kewen * @date 2021-02-19 */ -@ApiModel @Data public class WeCommunityNewGroupDto { + + /** + * 主键 + */ + private String newGroupId; + /** * 活动场景 */ - @ApiModelProperty("活动场景") private String activityScene; /** * 欢迎语 */ - @ApiModelProperty("欢迎语") private String welcomeMsg; @NotNull(message = "员工信息不能为空") /** 使用员工 */ @TableField(exist = false) - @ApiModelProperty("使用员工") private List weEmpleCodeUseScops; /** * 扫码标签 */ @TableField(exist = false) - @ApiModelProperty("扫码标签") private List weEmpleCodeTags; /** * 群活码ID */ - @ApiModelProperty("群活码ID") private Long groupCodeId; /** * 客户添加时无需经过确认自动成为好友:1:是;0:否 */ - @ApiModelProperty("客户添加时无需经过确认自动成为好友:1:是;0:否") private Boolean isJoinConfirmFriends; /** * 新增联系方式的配置id */ - @ApiModelProperty("新增联系方式的配置id") private String configId; /** * 二维码链接 */ - @ApiModelProperty("二维码链接") private String qrCode; /** * 素材的id */ - @ApiModelProperty("素材的id") private Long mediaId; } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCommunityNewGroupServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCommunityNewGroupServiceImpl.java index a6fa471e0..4ba6f6e54 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 @@ -20,6 +20,7 @@ import com.linkwechat.wecom.service.IWeGroupCodeActualService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; @@ -58,6 +59,7 @@ public class WeCommunityNewGroupServiceImpl extends ServiceImpl() - .eq(WeCommunityNewGroup::getGroupCodeId, communityNewGroupDto.getGroupCodeId())); -// WeCommunityNewGroup communityNewGroup = weCommunityNewGroupMapper.selectById(communityNewGroupDto.getGroupCodeId()); +// WeCommunityNewGroup communityNewGroup = weCommunityNewGroupMapper.selectOne(new LambdaQueryWrapper() +// .eq(WeCommunityNewGroup::getGroupCodeId, communityNewGroupDto.getGroupCodeId())); + WeCommunityNewGroup communityNewGroup = weCommunityNewGroupMapper.selectById(communityNewGroupDto.getNewGroupId()); if (null == communityNewGroup) { throw new WeComException("信息不存在!"); } @@ -192,7 +195,6 @@ public class WeCommunityNewGroupServiceImpl extends ServiceImpl item.setEmpleCodeId(communityNewGroup.getNewGroupId())); - iWeEmpleCodeUseScopService.updateBatchById(weEmpleCode.getWeEmpleCodeUseScops()); + iWeEmpleCodeUseScopService.saveOrUpdateBatch(weEmpleCode.getWeEmpleCodeUseScops()); } if (CollectionUtil.isNotEmpty(weEmpleCode.getWeEmpleCodeTags())) { weEmpleCode.getWeEmpleCodeTags().forEach(item -> item.setEmpleCodeId(communityNewGroup.getNewGroupId())); - weEmpleCodeTagService.updateBatchById(weEmpleCode.getWeEmpleCodeTags()); + weEmpleCodeTagService.saveOrUpdateBatch(weEmpleCode.getWeEmpleCodeTags()); } } -- Gitee From 9f81011dd98d9d2a501dd1eb95b4663735367a66 Mon Sep 17 00:00:00 2001 From: "1539136324@qq.com" Date: Sat, 13 Mar 2021 10:57:12 +0800 Subject: [PATCH 08/16] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E7=94=BB=E5=83=8F=E6=8E=A5=E5=8F=A3=E7=9B=B8=E5=85=B3=EF=BC=8C?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E5=9F=BA=E6=9C=AC=E8=B5=84=E6=96=99=E8=8E=B7?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wecom/service/impl/WeCommunityNewGroupServiceImpl.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 4ba6f6e54..eec5cdd7e 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 @@ -128,6 +128,7 @@ public class WeCommunityNewGroupServiceImpl extends ServiceImpl 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); @@ -202,8 +203,8 @@ public class WeCommunityNewGroupServiceImpl extends ServiceImpl Date: Sun, 14 Mar 2021 12:50:27 +0800 Subject: [PATCH 09/16] add return items for WeTaskFissionController#add --- .../web/controller/wecom/WeTaskFissionController.java | 9 ++++++++- .../linkwechat/wecom/service/IWeTaskFissionService.java | 2 +- .../wecom/service/impl/WeTaskFissionServiceImpl.java | 6 +++--- 3 files changed, 12 insertions(+), 5 deletions(-) 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 896d1bbb4..a11040485 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 @@ -95,7 +95,14 @@ public class WeTaskFissionController extends BaseController { @Log(title = "任务宝", businessType = BusinessType.INSERT) @PostMapping("/add") public AjaxResult add(@RequestBody WeTaskFission weTaskFission) { - return toAjax(weTaskFissionService.insertWeTaskFission(weTaskFission)); + Long fissionTaskId = weTaskFissionService.insertWeTaskFission(weTaskFission); + //TODO 根据需要返回VO + if (fissionTaskId != null) { + JSONObject json = new JSONObject(); + json.put("id", fissionTaskId); + return AjaxResult.success(json.toJSONString()); + } + return AjaxResult.error(); } /** diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeTaskFissionService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeTaskFissionService.java index 58b5c651e..b77a06d01 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeTaskFissionService.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeTaskFissionService.java @@ -35,7 +35,7 @@ public interface IWeTaskFissionService { * @param weTaskFission 任务宝 * @return 结果 */ - public int insertWeTaskFission(WeTaskFission weTaskFission); + public Long insertWeTaskFission(WeTaskFission weTaskFission); /** * 修改任务宝 diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTaskFissionServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTaskFissionServiceImpl.java index 680ba4c24..5f63618ed 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTaskFissionServiceImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTaskFissionServiceImpl.java @@ -30,10 +30,10 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.text.ParseException; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; +import java.text.ParseException; import java.util.Date; import java.util.List; import java.util.Objects; @@ -103,7 +103,7 @@ public class WeTaskFissionServiceImpl implements IWeTaskFissionService { */ @Override @Transactional - public int insertWeTaskFission(WeTaskFission weTaskFission) { + public Long insertWeTaskFission(WeTaskFission weTaskFission) { weTaskFission.setCreateBy(SecurityUtils.getUsername()); weTaskFission.setCreateTime(DateUtils.getNowDate()); groupQrcodeHandler(weTaskFission); @@ -118,7 +118,7 @@ public class WeTaskFissionServiceImpl implements IWeTaskFissionService { } } } - return insertResult; + return weTaskFission.getId(); } /** -- Gitee From 0958b76e030f6bed543aa3067a66f80693d4858d Mon Sep 17 00:00:00 2001 From: leejoker <1056650571@qq.com> Date: Mon, 15 Mar 2021 17:20:24 +0800 Subject: [PATCH 10/16] =?UTF-8?q?h5=E9=93=BE=E6=8E=A5=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=B5=B7=E6=8A=A5id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wecom/service/impl/WeTaskFissionServiceImpl.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTaskFissionServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTaskFissionServiceImpl.java index 5f63618ed..115c1d8b1 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTaskFissionServiceImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTaskFissionServiceImpl.java @@ -164,12 +164,14 @@ public class WeTaskFissionServiceImpl implements IWeTaskFissionService { String postersPath = weTaskFission.getPostersUrl(); //目标员工id String fissStaffId = weTaskFission.getFissionTargetId(); - //todo H5生成海报页面路径 + //H5生成海报页面路径 StringBuilder pageUrlBuilder = new StringBuilder(pageUrl); pageUrlBuilder.append("?") .append("fissionId=").append(id) .append("&") - .append("userId=").append(fissStaffId); + .append("userId=").append(fissStaffId) + .append("&") + .append("posterId=").append(weTaskFission.getPostersId()); LinkMessageDto linkMessageDto = new LinkMessageDto(); linkMessageDto.setPicurl(postersPath); -- Gitee From 0f8a3312f895fd4ea390e8533bd16cc1c780f28d Mon Sep 17 00:00:00 2001 From: leejoker <1056650571@qq.com> Date: Mon, 15 Mar 2021 17:42:09 +0800 Subject: [PATCH 11/16] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wecom/WeTaskFissionController.java | 28 ++++++++++++++++++- .../wecom/service/IWeTaskFissionService.java | 2 +- .../impl/WeTaskFissionServiceImpl.java | 19 +++++++++++-- 3 files changed, 45 insertions(+), 4 deletions(-) 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 a11040485..9486275c9 100644 --- a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeTaskFissionController.java +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeTaskFissionController.java @@ -1,5 +1,7 @@ package com.linkwechat.web.controller.wecom; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; import com.alibaba.fastjson.JSONObject; import com.linkwechat.common.annotation.Log; import com.linkwechat.common.config.CosConfig; @@ -17,6 +19,7 @@ import com.linkwechat.wecom.domain.query.WeTaskFissionStatisticQO; import com.linkwechat.wecom.service.IWeTaskFissionService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; @@ -96,7 +99,6 @@ public class WeTaskFissionController extends BaseController { @PostMapping("/add") public AjaxResult add(@RequestBody WeTaskFission weTaskFission) { Long fissionTaskId = weTaskFissionService.insertWeTaskFission(weTaskFission); - //TODO 根据需要返回VO if (fissionTaskId != null) { JSONObject json = new JSONObject(); json.put("id", fissionTaskId); @@ -105,6 +107,30 @@ public class WeTaskFissionController extends BaseController { return AjaxResult.error(); } + /** + * 编辑任务宝 + */ + @ApiOperation(value = "编辑任务宝", httpMethod = "POST") + @PreAuthorize("@ss.hasPermi('wecom:fission:edit')") + @Log(title = "任务宝", businessType = BusinessType.INSERT) + @PutMapping("/edit") + public AjaxResult edit(@RequestBody WeTaskFission weTaskFission) { + if (ObjectUtils.isEmpty(weTaskFission.getId())) { + return AjaxResult.error("数据id为空"); + } + WeTaskFission fissionTask = weTaskFissionService.selectWeTaskFissionById(weTaskFission.getId()); + if (ObjectUtils.isEmpty(fissionTask)) { + return AjaxResult.error("数据不存在"); + } + CopyOptions options = CopyOptions.create(); + options.setIgnoreNullValue(true); + BeanUtil.copyProperties(weTaskFission, fissionTask, options); + Long id = weTaskFissionService.updateWeTaskFission(fissionTask); + JSONObject json = new JSONObject(); + json.put("id", id); + return AjaxResult.success(json.toJSONString()); + } + /** * 删除任务宝 */ diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeTaskFissionService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeTaskFissionService.java index b77a06d01..905904bd7 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeTaskFissionService.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeTaskFissionService.java @@ -43,7 +43,7 @@ public interface IWeTaskFissionService { * @param weTaskFission 任务宝 * @return 结果 */ - public int updateWeTaskFission(WeTaskFission weTaskFission); + public Long updateWeTaskFission(WeTaskFission weTaskFission); /** * 批量删除任务宝 diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTaskFissionServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTaskFissionServiceImpl.java index 115c1d8b1..56702bab4 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTaskFissionServiceImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTaskFissionServiceImpl.java @@ -128,10 +128,25 @@ public class WeTaskFissionServiceImpl implements IWeTaskFissionService { * @return 结果 */ @Override - public int updateWeTaskFission(WeTaskFission weTaskFission) { + @Transactional + public Long updateWeTaskFission(WeTaskFission weTaskFission) { weTaskFission.setUpdateTime(DateUtils.getNowDate()); weTaskFission.setUpdateBy(SecurityUtils.getUsername()); - return weTaskFissionMapper.updateWeTaskFission(weTaskFission); + groupQrcodeHandler(weTaskFission); + int updateResult = weTaskFissionMapper.updateWeTaskFission(weTaskFission); + if (updateResult > 0) { + if (CollectionUtils.isNotEmpty(weTaskFission.getTaskFissionStaffs())) { + List staffList = weTaskFissionStaffService.selectWeTaskFissionStaffByTaskId(weTaskFission.getId()); + if (CollectionUtils.isNotEmpty(staffList)) { + weTaskFissionStaffService.deleteWeTaskFissionStaffByIds(staffList.stream().map(WeTaskFissionStaff::getId).toArray(Long[]::new)); + } + weTaskFission.getTaskFissionStaffs().forEach(staff -> { + staff.setTaskFissionId(weTaskFission.getId()); + }); + weTaskFissionStaffService.insertWeTaskFissionStaffList(weTaskFission.getTaskFissionStaffs()); + } + } + return weTaskFission.getId(); } /** -- Gitee From 7075f283130559c3c581500e0a535527889e1a11 Mon Sep 17 00:00:00 2001 From: YaoYuHang Date: Mon, 15 Mar 2021 17:48:35 +0800 Subject: [PATCH 12/16] =?UTF-8?q?=E7=A4=BE=E5=8C=BA=E8=BF=90=E8=90=A5=20-?= =?UTF-8?q?=20=E8=80=81=E5=AE=A2=E6=A0=87=E7=AD=BE=E5=BB=BA=E7=BE=A4?= =?UTF-8?q?=E3=80=81=E5=85=B3=E9=94=AE=E8=AF=8D=E6=8B=89=E7=BE=A4=E3=80=81?= =?UTF-8?q?=E7=BE=A4SOP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wecom/WeCommunityGroupSopController.java | 145 ++++++++++ .../WeCommunityKeywordGroupController.java | 139 ++++++++++ .../WeCommunityPresTagGroupController.java | 127 +++++++++ linkwe-ui/.env.development | 4 +- .../linkwechat/wecom/domain/WeGroupSop.java | 51 ++++ .../wecom/domain/WeGroupSopChat.java | 25 ++ .../wecom/domain/WeGroupSopMaterial.java | 26 ++ .../wecom/domain/WeGroupSopPic.java | 22 ++ .../wecom/domain/WeKeywordGroupTask.java | 38 +++ .../domain/WeKeywordGroupTaskKeyword.java | 31 +++ .../wecom/domain/WePresTagGroupTask.java | 61 +++++ .../wecom/domain/WePresTagGroupTaskScope.java | 27 ++ .../wecom/domain/WePresTagGroupTaskStat.java | 36 +++ .../wecom/domain/WePresTagGroupTaskTag.java | 27 ++ .../wecom/domain/dto/WeGroupSopDto.java | 58 ++++ .../domain/dto/WeKeywordGroupTaskDto.java | 36 +++ .../domain/dto/WePresTagGroupTaskDto.java | 70 +++++ .../linkwechat/wecom/domain/vo/WeEmplVo.java | 20 ++ .../wecom/domain/vo/WeGroupSopVo.java | 84 ++++++ .../wecom/domain/vo/WeKeywordGroupTaskVo.java | 81 ++++++ .../domain/vo/WePresTagGroupTaskStatVo.java | 26 ++ .../wecom/domain/vo/WePresTagGroupTaskVo.java | 110 ++++++++ .../wecom/mapper/WeGroupSopChatMapper.java | 25 ++ .../wecom/mapper/WeGroupSopMapper.java | 74 ++++++ .../mapper/WeGroupSopMaterialMapper.java | 23 ++ .../wecom/mapper/WeGroupSopPicMapper.java | 25 ++ .../mapper/WeKeywordGroupTaskKwMapper.java | 23 ++ .../mapper/WeKeywordGroupTaskMapper.java | 67 +++++ .../wecom/mapper/WeMaterialMapper.java | 3 +- .../mapper/WePresTagGroupTaskMapper.java | 49 ++++ .../mapper/WePresTagGroupTaskScopeMapper.java | 29 ++ .../mapper/WePresTagGroupTaskStatMapper.java | 31 +++ .../mapper/WePresTagGroupTaskTagMapper.java | 32 +++ .../IWeCommunityKeywordToGroupService.java | 66 +++++ .../wecom/service/IWeGroupSopService.java | 71 +++++ .../service/IWePresTagGroupTaskService.java | 95 +++++++ .../WeCommunityKeywordToGroupServiceImpl.java | 157 +++++++++++ .../service/impl/WeGroupSopServiceImpl.java | 247 ++++++++++++++++++ .../impl/WePresTagGroupTaskServiceImpl.java | 241 +++++++++++++++++ .../mapper/wecom/WeGroupSopChatMapper.xml | 12 + .../mapper/wecom/WeGroupSopMapper.xml | 85 ++++++ .../mapper/wecom/WeGroupSopMaterialMapper.xml | 12 + .../mapper/wecom/WeGroupSopPicMapper.xml | 12 + .../wecom/WeKeywordGroupTaskKwMapper.xml | 12 + .../mapper/wecom/WeKeywordGroupTaskMapper.xml | 82 ++++++ .../mapper/wecom/WePresTagGroupTaskMapper.xml | 77 ++++++ .../wecom/WePresTagGroupTaskScopeMapper.xml | 31 +++ .../wecom/WePresTagGroupTaskStatMapper.xml | 49 ++++ .../wecom/WePresTagGroupTaskTagMapper.xml | 31 +++ sql/link-wechat.sql | 107 ++++++++ 50 files changed, 3009 insertions(+), 3 deletions(-) create mode 100644 linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityGroupSopController.java create mode 100644 linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityKeywordGroupController.java create mode 100644 linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityPresTagGroupController.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSop.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSopChat.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSopMaterial.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSopPic.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeKeywordGroupTask.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeKeywordGroupTaskKeyword.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTask.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTaskScope.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTaskStat.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTaskTag.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeGroupSopDto.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeKeywordGroupTaskDto.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WePresTagGroupTaskDto.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeEmplVo.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeGroupSopVo.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeKeywordGroupTaskVo.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WePresTagGroupTaskStatVo.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WePresTagGroupTaskVo.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopChatMapper.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopMapper.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopMaterialMapper.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopPicMapper.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeKeywordGroupTaskKwMapper.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeKeywordGroupTaskMapper.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskMapper.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskScopeMapper.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskStatMapper.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskTagMapper.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCommunityKeywordToGroupService.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupSopService.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWePresTagGroupTaskService.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCommunityKeywordToGroupServiceImpl.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeGroupSopServiceImpl.java create mode 100644 linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WePresTagGroupTaskServiceImpl.java create mode 100644 linkwe-wecom/src/main/resources/mapper/wecom/WeGroupSopChatMapper.xml create mode 100644 linkwe-wecom/src/main/resources/mapper/wecom/WeGroupSopMapper.xml create mode 100644 linkwe-wecom/src/main/resources/mapper/wecom/WeGroupSopMaterialMapper.xml create mode 100644 linkwe-wecom/src/main/resources/mapper/wecom/WeGroupSopPicMapper.xml create mode 100644 linkwe-wecom/src/main/resources/mapper/wecom/WeKeywordGroupTaskKwMapper.xml create mode 100644 linkwe-wecom/src/main/resources/mapper/wecom/WeKeywordGroupTaskMapper.xml create mode 100644 linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskMapper.xml create mode 100644 linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskScopeMapper.xml create mode 100644 linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskStatMapper.xml create mode 100644 linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskTagMapper.xml diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityGroupSopController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityGroupSopController.java new file mode 100644 index 000000000..72a1733fb --- /dev/null +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityGroupSopController.java @@ -0,0 +1,145 @@ +package com.linkwechat.web.controller.wecom; + +import com.linkwechat.common.constant.HttpStatus; +import com.linkwechat.common.core.controller.BaseController; +import com.linkwechat.common.core.domain.AjaxResult; +import com.linkwechat.common.core.page.TableDataInfo; +import com.linkwechat.common.utils.SecurityUtils; +import com.linkwechat.wecom.domain.WeGroupSop; +import com.linkwechat.wecom.domain.dto.WeGroupSopDto; +import com.linkwechat.wecom.domain.vo.WeGroupSopVo; +import com.linkwechat.wecom.service.IWeGroupSopService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 社区运营 - 群sop controller + */ +@Api(description = "新客自动拉群 Controller") +@RestController +@RequestMapping(value = "/wecom/communityGroupSop") +public class WeCommunityGroupSopController extends BaseController { + + @Autowired + private IWeGroupSopService groupSopService; + + /** + * 通过过滤条件获取群sop列表 + * + * @param ruleName 规则名称 + * @param createBy 创建者 + * @param beginTime 创建区间 - 开始时间 + * @param endTime 创建区间 - 结束时间 + * @return 群sop规则列表 + */ + @ApiOperation(value = "通过过滤条件获取群sop列表", httpMethod = "GET") + @PreAuthorize("@ss.hasPermi('wecom:communityGroupSop:list')") + @GetMapping(path = "/list") + public TableDataInfo> getSopList( + @RequestParam(value = "ruleName", required = false) String ruleName, + @RequestParam(value = "createBy", required = false) String createBy, + @RequestParam(value = "beginTime", required = false) String beginTime, + @RequestParam(value = "endTime", required = false) String endTime + ) + { + startPage(); + List groupSopVoList = groupSopService.getGroupSopList(ruleName, createBy, beginTime, endTime); + return getDataTable(groupSopVoList); + } + + /** + * 新增SOP规则 + * + * @param groupSopDto 更新数据 + * @return 结果 + */ + @ApiOperation(value = "新增SOP规则", httpMethod = "POST") + @PreAuthorize("@ss.hasPermi('wecom:communityGroupSop:add')") + @PostMapping(path = "/") + public AjaxResult addGroupSop(@Validated @RequestBody WeGroupSopDto groupSopDto) { + if (!groupSopService.isRuleNameUnique(groupSopDto.getRuleName())) { + return AjaxResult.error(HttpStatus.BAD_REQUEST, "规则名称已存在"); + } + WeGroupSop weGroupSop = new WeGroupSop(); + BeanUtils.copyProperties(groupSopDto, weGroupSop); + weGroupSop.setCreateBy(SecurityUtils.getUsername()); + // 群聊id列表 + List groupIdList = groupSopDto.getChatIdList(); + // 素材URL + List materialIdList = groupSopDto.getMaterialIdList(); + // 上传的图片的URl列表 + List picList = groupSopDto.getPicList(); + return toAjax(groupSopService.addGroupSop(weGroupSop, groupIdList, materialIdList, picList)); + } + + /** + * 通过规则id获取sop规则 + * + * @param ruleId 规则id + * @return 结果 + */ + @ApiOperation(value = "通过规则id获取sop规则详情", httpMethod = "GET") + @PreAuthorize("@ss.hasPermi('wecom:communityGroupSop:query')") + @GetMapping(path = "/{ruleId}") + public AjaxResult getGroupSop(@PathVariable("ruleId") Long ruleId) { + WeGroupSopVo groupSopVo = groupSopService.getGroupSopById(ruleId); + if (null == groupSopVo) { + return AjaxResult.error(HttpStatus.NOT_FOUND, "该群SOP规则不存在"); + } + return AjaxResult.success(groupSopVo); + } + + /** + * 更改SOP规则 + * + * @param ruleId SOP规则 id + * @param groupSopDto 更新数据 + * @return 结果 + */ + @ApiOperation(value = "更改SOP规则", httpMethod = "PUT") + @PreAuthorize("@ss.hasPermi('wecom:communityGroupSop:edit')") + @PutMapping(path = "/{ruleId}") + public AjaxResult updateGroupSop(@PathVariable Long ruleId, @Validated @RequestBody WeGroupSopDto groupSopDto) { + // 校验是否存在 + if (null == groupSopService.getGroupSopById(ruleId)) { + return AjaxResult.error(HttpStatus.NOT_FOUND, "该群SOP规则不存在"); + } + // 校验规则名是否可用 + WeGroupSopVo original = groupSopService.getGroupSopById(ruleId); + if (!groupSopDto.getRuleName().equals(original.getRuleName()) && !groupSopService.isRuleNameUnique(groupSopDto.getRuleName())) { + return AjaxResult.error(HttpStatus.BAD_REQUEST, "规则名称已存在"); + } + WeGroupSop weGroupSop = new WeGroupSop(); + BeanUtils.copyProperties(groupSopDto, weGroupSop); + weGroupSop.setRuleId(ruleId); + weGroupSop.setUpdateBy(SecurityUtils.getUsername()); + // 群聊id列表 + List groupIdList = groupSopDto.getChatIdList(); + // 素材id列表 + List materialIdList = groupSopDto.getMaterialIdList(); + // 上传的图片的URl列表 + List picList = groupSopDto.getPicList(); + return toAjax(groupSopService.updateGroupSop(weGroupSop, groupIdList, materialIdList, picList)); + } + + /** + * 根据id列表批量删除群sop规则 + * + * @param ids 群sop规则列表 + * @return 结果 + */ + @ApiOperation(value = "根据id列表批量删除群sop规则", httpMethod = "DELETE") + @PreAuthorize("@ss.hasPermi('wecom:communityGroupSop:remove')") + @DeleteMapping(path = "/{ids}") + public AjaxResult batchDeleteSopRule(@PathVariable("ids") Long[] ids) { + return toAjax(groupSopService.batchRemoveGroupSopByIds(ids)); + } + +} diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityKeywordGroupController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityKeywordGroupController.java new file mode 100644 index 000000000..6c0422526 --- /dev/null +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityKeywordGroupController.java @@ -0,0 +1,139 @@ +package com.linkwechat.web.controller.wecom; + +import com.linkwechat.common.constant.HttpStatus; +import com.linkwechat.common.core.controller.BaseController; +import com.linkwechat.common.core.domain.AjaxResult; +import com.linkwechat.common.core.page.TableDataInfo; +import com.linkwechat.common.utils.SecurityUtils; +import com.linkwechat.common.utils.bean.BeanUtils; +import com.linkwechat.wecom.domain.WeKeywordGroupTask; +import com.linkwechat.wecom.domain.dto.WeKeywordGroupTaskDto; +import com.linkwechat.wecom.domain.vo.WeKeywordGroupTaskVo; +import com.linkwechat.wecom.service.IWeCommunityKeywordToGroupService; +import com.linkwechat.wecom.service.IWeGroupCodeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 关键词拉群controller + */ +@RestController +@RequestMapping(value = "/wecom/communityKeywordGroup") +public class WeCommunityKeywordGroupController extends BaseController { + + @Autowired + private IWeCommunityKeywordToGroupService keywordToGroupService; + + @Autowired + private IWeGroupCodeService groupCodeService; + + /** + * 根据过滤条件获取关键词拉群任务列表 + * + * @param taskName 任务名称 + * @param createBy 创建人 + * @param keyword 关键词 + * @param beginTime 开始时间 + * @param endTime 结束时间 + * @return 列表数据 + */ + @PreAuthorize("@ss.hasPermi('wecom:communityKeyword:list')") + @GetMapping(path = "/list") + public TableDataInfo> list( + @RequestParam(value = "taskName", required = false) String taskName, + @RequestParam(value = "createBy", required = false) String createBy, + @RequestParam(value = "keyword", required = false) String keyword, + @RequestParam(value = "beginTime", required = false) String beginTime, + @RequestParam(value = "endTime", required = false) String endTime + ) + { + startPage(); + List taskList = keywordToGroupService + .getTaskList(taskName, createBy, keyword, beginTime, endTime); + return getDataTable(taskList); + } + + /** + * 根据id获取任务详情 + * + * @param taskId 任务id + * @return 任务详情 + */ + @PreAuthorize("@ss.hasPermi('wecom:communityKeyword:query')") + @GetMapping(path = "/{taskId}") + public AjaxResult getTask(@PathVariable("taskId") Long taskId) { + WeKeywordGroupTaskVo keywordsGroupVo = keywordToGroupService.getTaskById(taskId); + // 获取群活码 + keywordsGroupVo.setGroupCodeInfo(groupCodeService.selectWeGroupCodeById(keywordsGroupVo.getGroupCodeId())); + return AjaxResult.success(keywordsGroupVo); + } + + /** + * 添加新任务 + * + * @param keywordToGroupDto 添加任务所需的数据 + * @return 结果 + */ + @PreAuthorize("@ss.hasPermi('wecom:communityKeyword:add')") + @PostMapping(path = "/") + public AjaxResult addTask(@RequestBody @Validated WeKeywordGroupTaskDto keywordToGroupDto) { + // 群活码必须存在 + if (null == groupCodeService.selectWeGroupCodeById(keywordToGroupDto.getGroupCodeId())) { + return AjaxResult.error(HttpStatus.NOT_FOUND, "群活码不存在"); + } + // 任务名称必须唯一 + if (!keywordToGroupService.taskNameIsUnique(keywordToGroupDto.getTaskName())) { + return AjaxResult.error(HttpStatus.BAD_REQUEST, "任务名称已存在"); + } + WeKeywordGroupTask task = new WeKeywordGroupTask(); + BeanUtils.copyProperties(keywordToGroupDto, task); + task.setCreateBy(SecurityUtils.getUsername()); + String[] keywords = keywordToGroupDto.getKeywords().split(","); + return toAjax(keywordToGroupService.addTask(task, keywords)); + } + + /** + * 根据id及更新数据对指定任务进行更新 + * + * @param taskId 任务id + * @param keywordToGroupDto 更新所需数据 + * @return 结果 + */ + @PreAuthorize("@ss.hasPermi('wecom:communityKeyword:edit')") + @PutMapping(path = "/{taskId}") + public AjaxResult updateTask(@PathVariable("taskId") Long taskId, @RequestBody @Validated WeKeywordGroupTaskDto keywordToGroupDto) { + // 群活码必须存在 + if (null == groupCodeService.selectWeGroupCodeById(keywordToGroupDto.getGroupCodeId())) { + return AjaxResult.error(HttpStatus.NOT_FOUND, "群活码不存在"); + } + // 若名称发生更改,则必须唯一 + String inputTaskName = keywordToGroupDto.getTaskName(); + String originalName = keywordToGroupService.getTaskById(taskId).getTaskName(); + if (!originalName.equals(inputTaskName) && !keywordToGroupService.taskNameIsUnique(inputTaskName)) { + return AjaxResult.error(HttpStatus.BAD_REQUEST, "任务名称已存在"); + } + WeKeywordGroupTask task = new WeKeywordGroupTask(); + BeanUtils.copyProperties(keywordToGroupDto, task); + task.setTaskId(taskId); + task.setUpdateBy(SecurityUtils.getUsername()); + String[] keywords = keywordToGroupDto.getKeywords().split(","); + return toAjax(keywordToGroupService.updateTask(task, keywords)); + } + + /** + * 通过id列表批量删除任务 + * + * @param ids id列表 + * @return 结果 + */ + @PreAuthorize("@ss.hasPermi('wecom:communityKeyword:remove')") + @DeleteMapping(path = "/{ids}") + public AjaxResult batchDeleteTask(@PathVariable("ids") Long[] ids) { + return toAjax(keywordToGroupService.batchRemoveTaskByIds(ids)); + } + +} diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityPresTagGroupController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityPresTagGroupController.java new file mode 100644 index 000000000..b1293b6af --- /dev/null +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityPresTagGroupController.java @@ -0,0 +1,127 @@ +package com.linkwechat.web.controller.wecom; + + +import com.linkwechat.common.constant.HttpStatus; +import com.linkwechat.common.core.controller.BaseController; +import com.linkwechat.common.core.domain.AjaxResult; +import com.linkwechat.common.core.page.TableDataInfo; +import com.linkwechat.wecom.domain.WeGroupCode; +import com.linkwechat.wecom.domain.WeTag; +import com.linkwechat.wecom.domain.dto.WePresTagGroupTaskDto; +import com.linkwechat.wecom.domain.vo.WePresTagGroupTaskStatVo; +import com.linkwechat.wecom.domain.vo.WePresTagGroupTaskVo; +import com.linkwechat.wecom.domain.vo.WeEmplVo; +import com.linkwechat.wecom.service.IWePresTagGroupTaskService; +import com.linkwechat.wecom.service.IWeGroupCodeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping(value = "/wecom/communityPresTagGroup") +public class WeCommunityPresTagGroupController extends BaseController { + + @Autowired + private IWePresTagGroupTaskService taskService; + + @Autowired + private IWeGroupCodeService groupCodeService; + + /** + * 获取老客标签建群列表数据 + */ + @PreAuthorize("@ss.hasPermi('wecom:communitytagGroup:list')") + @GetMapping(path = "/list") + public TableDataInfo> getList( + @RequestParam(value = "taskName", required = false) String taskName, + @RequestParam(value = "sendType", required = false) Integer sendType, + @RequestParam(value = "createBy", required = false) String createBy, + @RequestParam(value = "beginTime", required = false) String beginTime, + @RequestParam(value = "endTime", required = false) String endTime) { + startPage(); + List wePresTagGroupTaskVoList = taskService.selectTaskListList(taskName, sendType, createBy, beginTime, endTime); + return getDataTable(wePresTagGroupTaskVoList); + } + + /** + * 新建老客标签建群任务 + */ + @PreAuthorize("@ss.hasPermi('wecom:communitytagGroup:add')") + @PostMapping + public AjaxResult addTask(@RequestBody @Validated WePresTagGroupTaskDto wePresTagGroupTaskDto) { + // 检测任务名是否可用 + if (!taskService.checkTaskNameUnique(wePresTagGroupTaskDto.getTaskName())) { + return AjaxResult.error("任务名已存在"); + } + if (null == groupCodeService.selectWeGroupCodeById(wePresTagGroupTaskDto.getGroupCodeId())) { + return AjaxResult.error(HttpStatus.NOT_FOUND,"群活码不存在"); + } + return toAjax(taskService.add(wePresTagGroupTaskDto)); + } + + /** + * 根据获取任务详细信息 + */ + @PreAuthorize("@ss.hasPermi('wecom:communitytagGroup:query')") + @GetMapping(path = "/{id}") + public AjaxResult getTask(@PathVariable("id") Long id) { + WePresTagGroupTaskVo taskVo = taskService.getTaskById(id); + // 获取标签和使用人员 + List tagList = taskService.getTagListByTaskId(id); + List emplVoList = taskService.getEmplListByTaskId(id); + WeGroupCode weGroupCode = groupCodeService.selectWeGroupCodeById(taskVo.getGroupCodeId()); + taskVo.setGroupCodeInfo(weGroupCode); + taskVo.setTagList(tagList); + taskVo.setScopeList(emplVoList); + return AjaxResult.success(taskVo); + } + + /** + * 更新任务信息 + */ + @PreAuthorize("@ss.hasPermi('wecom:communitytagGroup:edit')") + @PutMapping(path = "/{id}") + public AjaxResult updateTask(@PathVariable("id") Long id, @RequestBody @Validated WePresTagGroupTaskDto wePresTagGroupTaskDto) { + // 检测任务名是否可用 + WePresTagGroupTaskVo original = taskService.getTaskById(id); + // 判断名称是否发生变化 + boolean newName = wePresTagGroupTaskDto.getTaskName().equals(original.getTaskName()); + // 新名称不能已存在 + if (!taskService.checkTaskNameUnique(wePresTagGroupTaskDto.getTaskName()) && !newName) { + return AjaxResult.error("任务名已存在"); + } + if (null == groupCodeService.selectWeGroupCodeById(wePresTagGroupTaskDto.getGroupCodeId())) { + return AjaxResult.error(HttpStatus.NOT_FOUND,"群活码不存在"); + } + return toAjax(taskService.updateTask(id, wePresTagGroupTaskDto)); + } + + /** + * 批量删除老客标签建群任务 + */ + @PreAuthorize("@ss.hasPermi('wecom:communitytagGroup:remove')") + @DeleteMapping(path = "/{ids}") + public AjaxResult batchRemoveTask(@PathVariable("ids") Long[] ids) { + return toAjax(taskService.batchRemoveTaskByIds(ids)); + } + + /** + * 根据老客标签建群id及过滤条件,获取其统计信息 + */ + @PreAuthorize("@ss.hasPermi('wecom:communitytagGroup:query')") + @GetMapping(path = "/stat/{id}") + public TableDataInfo> getStatInfo( + @PathVariable("id") Long id, + @RequestParam(value = "customerName", required = false) String customerName, + @RequestParam(value = "isInGroup", required = false) Integer isInGroup, + @RequestParam(value = "isSent", required = false) Integer isSent + ) { + startPage(); + List statVoList = taskService.getStatByTaskId(id, customerName, isInGroup, isSent); + return getDataTable(statVoList); + } + +} diff --git a/linkwe-ui/.env.development b/linkwe-ui/.env.development index ae6e34c6c..c8989bbed 100644 --- a/linkwe-ui/.env.development +++ b/linkwe-ui/.env.development @@ -1,8 +1,8 @@ # 开发环境配置 ENV = 'development' -# 仟微管理系统/开发环境 -VUE_APP_BASE_API = 'http://146.56.222.200' +# 塬微管理系统/开发环境 +VUE_APP_BASE_API = 'http://192.168.0.52:8090' # VUE_APP_BASE_API = 'http://n3rpzt.natappfree.cc' # 开发环境IP diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSop.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSop.java new file mode 100644 index 000000000..4c02b9498 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSop.java @@ -0,0 +1,51 @@ +package com.linkwechat.wecom.domain; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.linkwechat.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 群SOP规则 + */ +@Data +@TableName("we_group_sop") +@EqualsAndHashCode(callSuper = true) +public class WeGroupSop extends BaseEntity { + + /** + * 主键 + */ + @TableId + private Long ruleId; + + /** + * 规则名 + */ + private String ruleName; + + /** + * 内容标题 + */ + private String title; + + /** + * 消息内容 + */ + private String content; + + /** + * 开始执行时间 + */ + @TableField(value = "start_time") + private String startExeTime; + + /** + * 结束执行时间 + */ + @TableField(value = "end_time") + private String stopExeTime; + +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSopChat.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSopChat.java new file mode 100644 index 000000000..da7d1fbf8 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSopChat.java @@ -0,0 +1,25 @@ +package com.linkwechat.wecom.domain; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 群SOP和群关联对象 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@TableName("we_group_sop_chat") +public class WeGroupSopChat { + /** + * 群sop id + */ + private Long ruleId; + + /** + * 实际群聊id + */ + private String chatId; +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSopMaterial.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSopMaterial.java new file mode 100644 index 000000000..5e8cfc72f --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSopMaterial.java @@ -0,0 +1,26 @@ +package com.linkwechat.wecom.domain; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 群SOP图片素材 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@TableName("we_group_sop_material") +public class WeGroupSopMaterial { + + /** + * sop规则id + */ + private Long ruleId; + + /** + * 素材id + */ + private Long materialId; +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSopPic.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSopPic.java new file mode 100644 index 000000000..d8e436e50 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeGroupSopPic.java @@ -0,0 +1,22 @@ +package com.linkwechat.wecom.domain; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@TableName("we_group_sop_pic") +public class WeGroupSopPic { + /** + * sop id + */ + private Long ruleId; + + /** + * 图片url + */ + private String picUrl; +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeKeywordGroupTask.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeKeywordGroupTask.java new file mode 100644 index 000000000..4107b8de4 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeKeywordGroupTask.java @@ -0,0 +1,38 @@ +package com.linkwechat.wecom.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.linkwechat.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 社区运营 - 关键词拉群任务实体 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("we_keyword_group") +public class WeKeywordGroupTask extends BaseEntity { + + /** + * 主键id + */ + @TableId + private Long taskId; + + /** + * 任务名称 + */ + private String taskName; + + /** + * 群活码id + */ + private Long groupCodeId; + + + /** + * 加群引导语 + */ + private String welcomeMsg; +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeKeywordGroupTaskKeyword.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeKeywordGroupTaskKeyword.java new file mode 100644 index 000000000..5fd6c0c71 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeKeywordGroupTaskKeyword.java @@ -0,0 +1,31 @@ +package com.linkwechat.wecom.domain; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.linkwechat.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +/** + * 社区运营 - 关键词拉群任务关键词实体 + */ +@Data +@NoArgsConstructor +@TableName("we_keyword_group_kw") +public class WeKeywordGroupTaskKeyword { + + /** + * 关键词拉群任务id + */ + private Long taskId; + + /** + * 关键词 + */ + private String keyword; + + public WeKeywordGroupTaskKeyword(Long taskId, String keyword) { + this.taskId =taskId; + this.keyword = keyword; + } +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTask.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTask.java new file mode 100644 index 000000000..decaa6553 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTask.java @@ -0,0 +1,61 @@ +package com.linkwechat.wecom.domain; + + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.linkwechat.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("we_pres_tag_group") +public class WePresTagGroupTask extends BaseEntity { + + /** + *主键ID + */ + @TableId + private Long taskId; + + /** + * 任务名称 + */ + private String taskName; + + /** + * 加群引导语 + */ + private String welcomeMsg; + + /** + * 发送方式 0: 企业群发 1:个人群发 + */ + private Integer sendType; + + /** + * 群活码id + */ + private Long groupCodeId; + + /** + * 发送范围 0: 全部客户 1:部分客户 + */ + private Integer sendScope; + + /** + * 发送性别 0: 全部 1: 男 2: 女 3:未知 + */ + private Integer sendGender; + + /** + * 目标客户被添加起始时间 + */ + private String cusBeginTime; + + /** + * 目标客户被添加结束时间 + */ + private String cusEndTime; + +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTaskScope.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTaskScope.java new file mode 100644 index 000000000..bc5d98fa9 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTaskScope.java @@ -0,0 +1,27 @@ +package com.linkwechat.wecom.domain; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 老客户标签建群任务使用人对象 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@TableName("we_pres_tag_group_scope") +public class WePresTagGroupTaskScope { + + /** + * 老客户标签建群任务id + */ + private Long taskId; + + /** + * 任务目标员工id + */ + private String weUserId; + +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTaskStat.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTaskStat.java new file mode 100644 index 000000000..c05988596 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTaskStat.java @@ -0,0 +1,36 @@ +package com.linkwechat.wecom.domain; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.linkwechat.common.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; + +/** + * 老客户标签建群客户统计 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("we_pres_tag_group_stat") +public class WePresTagGroupTaskStat extends BaseEntity { + + /** + * 老客户标签建群任务id + */ + private Long taskId; + + /** + * 客户id + */ + private String customerName; + + /** + * 是否已送达 + */ + private boolean isSent; + + /** + * 是否已经在群 + */ + private boolean isInGroup; +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTaskTag.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTaskTag.java new file mode 100644 index 000000000..f03926904 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WePresTagGroupTaskTag.java @@ -0,0 +1,27 @@ +package com.linkwechat.wecom.domain; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 老客标签建群任务标签关联对象 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@TableName("we_pres_tag_group_tag") +public class WePresTagGroupTaskTag { + + /** + * 老客建群任务id + */ + private Long taskId; + + /** + * 标签id + */ + private String tagId; + +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeGroupSopDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeGroupSopDto.java new file mode 100644 index 000000000..ac31a2026 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeGroupSopDto.java @@ -0,0 +1,58 @@ +package com.linkwechat.wecom.domain.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 社区运营 - 群SOP DTO + */ +@Data +public class WeGroupSopDto { + /** + * 规则名 + */ + @NotNull(message = "规则名不可为空") + private String ruleName; + + /** + * 群聊id列表 + */ + @NotNull(message = "未选择群聊") + private List chatIdList; + + /** + * 内容标题 + */ + @NotNull(message = "标题不可为空") + private String title; + + /** + * 消息内容 + */ + @NotNull(message = "内容不可为空") + private String content; + + /** + * 素材列表 + */ + private List materialIdList; + + /** + * 上传的图片的URL列表 + */ + private List picList; + + /** + * 开始执行时间 + */ + @NotNull(message = "开始执行时间为空") + private String startExeTime; + + /** + * 结束执行时间 + */ + @NotNull(message = "结束时间为空") + private String stopExeTime; +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeKeywordGroupTaskDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeKeywordGroupTaskDto.java new file mode 100644 index 000000000..88ba38e1b --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeKeywordGroupTaskDto.java @@ -0,0 +1,36 @@ +package com.linkwechat.wecom.domain.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * 社区运营 - 关键词拉群Dto + */ +@Data +public class WeKeywordGroupTaskDto { + + /** + * 任务名 + */ + @NotNull(message = "任务名不能为空") + private String taskName; + + /** + * 群活码id + */ + @NotNull(message = "群活码不能为空") + private Long groupCodeId; + + /** + * 加群引导语 + */ + @NotNull(message = "引导语不可为空") + private String welcomeMsg; + + /** + * 关键词 + */ + @NotNull(message = "关键词不可为空") + private String keywords; +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WePresTagGroupTaskDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WePresTagGroupTaskDto.java new file mode 100644 index 000000000..5cac50324 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WePresTagGroupTaskDto.java @@ -0,0 +1,70 @@ +package com.linkwechat.wecom.domain.dto; + + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 社群运营 老客户标签建群 + */ + +@Data +public class WePresTagGroupTaskDto { + + /** + * 任务名称 + */ + @NotNull(message = "任务名称不能为空") + private String taskName; + + /** + * 发送方式 0: 企业群发 1:个人群发 + */ + @NotNull(message = "发送方式不能为空") + private Integer sendType; + + /** + * 加群引导语 + */ + @NotNull(message = "引导语不能为空") + private String welcomeMsg; + + /** + * 群活码id + */ + @NotNull(message = "活码不能为空") + private Long groupCodeId; + + /** + * 客户标签 + */ + private List tagList; + + /** + * 选择员工 + */ + private List scopeList; + + /** + * 发送范围 0: 全部客户 1:部分客户 + */ + @NotNull(message = "发送范围不能为空") + private Integer sendScope; + + /** + * 发送性别 0: 全部 1: 男 2: 女 3:未知 + */ + private Integer sendGender; + + /** + * 目标客户被添加起始时间 + */ + private String cusBeginTime; + + /** + * 目标客户被添加结束时间 + */ + private String cusEndTime; +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeEmplVo.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeEmplVo.java new file mode 100644 index 000000000..732036647 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeEmplVo.java @@ -0,0 +1,20 @@ +package com.linkwechat.wecom.domain.vo; + +import lombok.Data; + +/** + * 员工信息 + */ +@Data +public class WeEmplVo { + + /** + * 员工id + */ + private String userId; + + /** + * 员工名称 + */ + private String name; +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeGroupSopVo.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeGroupSopVo.java new file mode 100644 index 000000000..e86aa3448 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeGroupSopVo.java @@ -0,0 +1,84 @@ +package com.linkwechat.wecom.domain.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.linkwechat.wecom.domain.WeGroup; +import com.linkwechat.wecom.domain.WeMaterial; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +@Data +public class WeGroupSopVo { + + /** + * id + */ + private Long ruleId; + + /** + * 规则名 + */ + private String ruleName; + + /** + * 内容标题 + */ + private String title; + + /** + * 消息内容 + */ + private String content; + + /** + * 素材列表 + */ + @TableField(exist = false) + private List materialList; + + /** + * 自上传图片列表 + */ + @TableField(exist = false) + private List picList; + + /** + * 群聊 + */ + @TableField(exist = false) + private List groupList; + + /** + * 开始执行时间 + */ + private String startExeTime; + + /** + * 结束执行时间 + */ + private String stopExeTime; + + /** + * 创建者 + */ + private String createBy; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private String updateTime; +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeKeywordGroupTaskVo.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeKeywordGroupTaskVo.java new file mode 100644 index 000000000..6287ca1c1 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeKeywordGroupTaskVo.java @@ -0,0 +1,81 @@ +package com.linkwechat.wecom.domain.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.linkwechat.wecom.domain.WeGroupCode; +import com.linkwechat.wecom.domain.WeKeywordGroupTaskKeyword; +import lombok.Data; + +import java.util.Date; +import java.util.List; + + +/** + * 社区运营 - 关键词拉群任务VO + */ +@Data +public class WeKeywordGroupTaskVo { + + /** + * id + */ + private Long taskId; + + /** + * 任务名 + */ + private String taskName; + + /** + * 群活码id + */ + @JsonIgnore + private Long groupCodeId; + + /** + * 群活码信息 + */ + @TableField(exist = false) + private WeGroupCode groupCodeInfo; + + /** + * 关键词 + */ + @TableField(exist = false) + private List keywordList; + + /** + * 实际群聊 + */ + @TableField(exist = false) + private List groupNameList; + + /** + * 加群引导语 + */ + private String welcomeMsg; + + /** + * 创建者 + */ + private String createBy; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private String updateTime; + +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WePresTagGroupTaskStatVo.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WePresTagGroupTaskStatVo.java new file mode 100644 index 000000000..9febc01ca --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WePresTagGroupTaskStatVo.java @@ -0,0 +1,26 @@ +package com.linkwechat.wecom.domain.vo; + +import lombok.Data; + + +/** + * 老客户标签建群任务客户统计Vo + */ +@Data +public class WePresTagGroupTaskStatVo { + + /** + * 客户id + */ + private String customerName; + + /** + * 是否已发送 + */ + private boolean isSent = false; + + /** + * 是否已在群 + */ + private boolean isInGroup = false; +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WePresTagGroupTaskVo.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WePresTagGroupTaskVo.java new file mode 100644 index 000000000..1c7f2fb95 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WePresTagGroupTaskVo.java @@ -0,0 +1,110 @@ +package com.linkwechat.wecom.domain.vo; + + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.linkwechat.wecom.domain.WeGroupCode; +import com.linkwechat.wecom.domain.WeTag; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +/** + * 老客标签建群任务Vo + */ +@Data +public class WePresTagGroupTaskVo { + + /** + * 老客标签建群任务id + */ + private Long taskId; + + /** + * 任务名称 + */ + private String taskName; + + /** + * 加群引导语 + */ + private String welcomeMsg; + + /** + * 群活码id + */ + @JsonIgnore + private Long groupCodeId; + + /** + * 群活码信息 + */ + @TableField(exist = false) + private WeGroupCode groupCodeInfo; + + /** + * 发送方式 0: 企业群发 1:个人群发 + */ + private Integer sendType; + + /** + * 当前群人数 + */ + private Integer totalMember; + + /** + * 使用员工 + */ + @TableField(exist = false) + private List scopeList; + + /** + * 标签 + */ + @TableField(exist = false) + private List tagList; + + /** + * 发送范围 0: 全部客户 1:部分客户 + */ + private Integer sendScope; + + /** + * 发送性别 0: 全部 1: 男 2: 女 3:未知 + */ + private Integer sendGender; + + /** + * 目标客户被添加起始时间 + */ + private String cusBeginTime; + + /** + * 目标客户被添加结束时间 + */ + private String cusEndTime; + + /** + * 创建者 + */ + private String createBy; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private String updateTime; +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopChatMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopChatMapper.java new file mode 100644 index 000000000..89d5f1e10 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopChatMapper.java @@ -0,0 +1,25 @@ +package com.linkwechat.wecom.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.linkwechat.wecom.domain.WeGroupSopChat; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +import java.util.List; + + +/** + * 群sop和群聊关联对象 mapper接口 + */ +@Mapper +@Repository +public interface WeGroupSopChatMapper extends BaseMapper { + + /** + * 批量保存sop - chat 绑定 + * + * @param sopChatList 待绑定对象 + * @return 结果 + */ + int batchBindsSopChat(List sopChatList); +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopMapper.java new file mode 100644 index 000000000..f5031dad9 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopMapper.java @@ -0,0 +1,74 @@ +package com.linkwechat.wecom.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.linkwechat.wecom.domain.WeGroupSop; +import com.linkwechat.wecom.domain.vo.WeGroupSopVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 群SOP mapper接口 + */ +@Mapper +@Repository +public interface WeGroupSopMapper extends BaseMapper { + + /** + * 根据过滤条件获取群sop规则列表 + * + * @param ruleName 规则名称 + * @param createBy 创建人 + * @param beginTime 创建开始时间 + * @param endTime 创建结束时间 + * @return 结果 + */ + List getGroupSopList( + @Param("ruleName") String ruleName, + @Param("createBy") String createBy, + @Param("beginTime") String beginTime, + @Param("endTime") String endTime + ); + + /** + * 通过id获取sop规则 + * + * @param sopId id + * @return 结果 + */ + WeGroupSopVo getGroupSopById(Long sopId); + + /** + * 批量删除群sop + * + * @param ruleIds 群sop规则id列表 + * @return 结果 + */ + int batchRemoveWeGroupSopByIds(Long[] ruleIds); + + /** + * 校验规则名是否已存在 + * + * @param ruleName 规则名 + * @return 结果 + */ + int isRuleNameUnique(String ruleName); + + /** + * 通过规则id获取其所有素材id + * + * @param ruleId sop规则id + * @return 结果 + */ + List getMaterialIdListByRuleId(Long ruleId); + + /** + * 通过规则id获取其所有群聊id + * + * @param ruleId sop规则id + * @return 结果 + */ + List getChatIdListByRuleId(Long ruleId); +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopMaterialMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopMaterialMapper.java new file mode 100644 index 000000000..6e16975d0 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopMaterialMapper.java @@ -0,0 +1,23 @@ +package com.linkwechat.wecom.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.linkwechat.wecom.domain.WeGroupSopMaterial; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 群SOP - 素材 关联 Mapper + */ +@Mapper +@Repository +public interface WeGroupSopMaterialMapper extends BaseMapper { + + /** + * 批量保存 sop规则与素材的绑定 + * @param sopMaterialList 待绑定列表 + * @return 结果 + */ + int batchBindsSopMaterial(List sopMaterialList); +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopPicMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopPicMapper.java new file mode 100644 index 000000000..930a03432 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeGroupSopPicMapper.java @@ -0,0 +1,25 @@ +package com.linkwechat.wecom.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.linkwechat.wecom.domain.WeGroupSopPic; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +import java.util.List; + + +/** + * 图片语sop规则绑定信息 mapper + */ +@Mapper +@Repository +public interface WeGroupSopPicMapper extends BaseMapper { + + /** + * 批量保存群SOP和图片 + * + * @param sopPicList WeGroupSopPic对象列表 + * @return 结果 + */ + int batchSopPic(List sopPicList); +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeKeywordGroupTaskKwMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeKeywordGroupTaskKwMapper.java new file mode 100644 index 000000000..ebf7a8486 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeKeywordGroupTaskKwMapper.java @@ -0,0 +1,23 @@ +package com.linkwechat.wecom.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.linkwechat.wecom.domain.WeKeywordGroupTaskKeyword; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 关键词拉群 关键词mapper + */ +@Mapper +@Repository +public interface WeKeywordGroupTaskKwMapper extends BaseMapper { + + /** + * 批量绑定关键词拉群任务与关键词关联 + * @param taskKeywordList 待绑定对象 + * @return 结果 + */ + int batchBindsTaskKeyword(List taskKeywordList); +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeKeywordGroupTaskMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeKeywordGroupTaskMapper.java new file mode 100644 index 000000000..998aa8602 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeKeywordGroupTaskMapper.java @@ -0,0 +1,67 @@ +package com.linkwechat.wecom.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.linkwechat.wecom.domain.WeKeywordGroupTask; +import com.linkwechat.wecom.domain.vo.WeKeywordGroupTaskVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 关键词拉群mapper + */ +@Mapper +@Repository +public interface WeKeywordGroupTaskMapper extends BaseMapper { + /** + * 根据过滤条件获取关键词拉群任务列表 + * + * @param taskName 任务名称 + * @param createBy 创建人 + * @param keyword 关键词 + * @param beginTime 开始时间 + * @param endTime 结束时间 + * @return 列表数据 + */ + List getTaskList( + @Param("taskName") String taskName, + @Param("createBy") String createBy, + @Param("keyword") String keyword, + @Param("beginTime") String beginTime, + @Param("endTime") String endTime + ); + + /** + * 根据id获取任务性情 + * + * @param taskId 任务id + * @return 结果 + */ + WeKeywordGroupTaskVo getTaskById(Long taskId); + + /** + * 根据id列表批量删除任务 + * + * @param ids id列表 + * @return 删除行数 + */ + int batchRemoveTaskByIds(Long[] ids); + + /** + * 根据任务id获取对应所有的群聊名称 + * + * @param taskId 任务id + * @return 结果 + */ + List getGroupNameListByTaskId(Long taskId); + + /** + * 校验名称是否唯一 + * + * @param taskName 任务名 + * @return 结果 + */ + int checkNameUnique(String taskName); +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeMaterialMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeMaterialMapper.java index f92e7fd6b..099ed78a7 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeMaterialMapper.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeMaterialMapper.java @@ -1,5 +1,6 @@ package com.linkwechat.wecom.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.linkwechat.wecom.domain.WeMaterial; import org.apache.ibatis.annotations.Param; @@ -11,7 +12,7 @@ import java.util.List; * @author KEWEN * @date 2020-10-09 */ -public interface WeMaterialMapper { +public interface WeMaterialMapper extends BaseMapper { /** diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskMapper.java new file mode 100644 index 000000000..0b392feb5 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskMapper.java @@ -0,0 +1,49 @@ +package com.linkwechat.wecom.mapper; + +import com.linkwechat.wecom.domain.vo.WePresTagGroupTaskVo; +import org.apache.ibatis.annotations.Param; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.linkwechat.wecom.domain.WePresTagGroupTask; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 老客户标签建群相关Mapper接口 + */ +@Repository +public interface WePresTagGroupTaskMapper extends BaseMapper { + + /** + * 获取老客户标签建群任务 + * + * @param taskId 任务id + * @return 结果 + */ + WePresTagGroupTaskVo selectTaskById(Long taskId); + + /** + * 根据条件查询老客标签建群任务 + * @param taskName 任务名称 + * @param createBy 创建人 + * @param beginTime 开始时间 + * @param endTime 结束时间 + * @param sendType 发送方式 + * @return 结果 + */ + List selectTaskList( + @Param("taskName") String taskName, + @Param("sendType") Integer sendType, + @Param("createBy") String createBy, + @Param("beginTime") String beginTime, + @Param("endTime") String endTime + ); + + /** + * 检测任务名是否已被占用 + * @param taskName 任务名 + * @return 是否被占用 + */ + int checkTaskNameUnique(String taskName); + +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskScopeMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskScopeMapper.java new file mode 100644 index 000000000..8d9165baa --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskScopeMapper.java @@ -0,0 +1,29 @@ +package com.linkwechat.wecom.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.linkwechat.wecom.domain.WePresTagGroupTaskScope; +import com.linkwechat.wecom.domain.vo.WeEmplVo; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Mapper +@Repository +public interface WePresTagGroupTaskScopeMapper extends BaseMapper { + + /** + * 根据建群任务id获取所有使用人员信息 + * + * @param taskId 建群任务id + * @return 结果 + */ + List getScopeListByTaskId(Long taskId); + + /** + * 批量绑定任务与使用人员 + * @param taskScopeList 待绑定对象 + * @return 结果 + */ + int batchBindsTaskScopes(List taskScopeList); +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskStatMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskStatMapper.java new file mode 100644 index 000000000..d15b16c51 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskStatMapper.java @@ -0,0 +1,31 @@ +package com.linkwechat.wecom.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.linkwechat.wecom.domain.WePresTagGroupTaskStat; +import com.linkwechat.wecom.domain.vo.WePresTagGroupTaskStatVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Mapper +@Repository +public interface WePresTagGroupTaskStatMapper extends BaseMapper { + + /** + * 根据 老客标签建群任务id及附属相关属性条件获取任务对应的客户统计 + * @param taskId 任务id + * @param customerName 客户名称 + * @param isInGroup 是否在群 + * @param isSent 是否已发送 + * @return 客户统计列表 + */ + List getStatByTaskId( + @Param("taskId") Long taskId, + @Param("customerName") String customerName, + @Param("isSent") Integer isSent, + @Param("isInGroup") Integer isInGroup + ); +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskTagMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskTagMapper.java new file mode 100644 index 000000000..c22d22be4 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WePresTagGroupTaskTagMapper.java @@ -0,0 +1,32 @@ +package com.linkwechat.wecom.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.linkwechat.wecom.domain.WePresTagGroupTaskTag; +import com.linkwechat.wecom.domain.WeTag; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 老客户标签建群任务tag mapper接口 + */ +@Mapper +@Repository +public interface WePresTagGroupTaskTagMapper extends BaseMapper { + + /** + * 通过标签建群任务id获取该任务对应所有标签 + * + * @param taskId 建群任务id + * @return 标签Vo列表 + */ + List getTagListByTaskId(Long taskId); + + /** + * 批量绑定建群任务与标签 + * @param taskTagList 任务-标签关联对象 + * @return 结果 + */ + int batchBindsTaskTags(List taskTagList); +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCommunityKeywordToGroupService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCommunityKeywordToGroupService.java new file mode 100644 index 000000000..21c4fbc46 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeCommunityKeywordToGroupService.java @@ -0,0 +1,66 @@ +package com.linkwechat.wecom.service; + +import com.linkwechat.wecom.domain.WeKeywordGroupTask; +import com.linkwechat.wecom.domain.vo.WeKeywordGroupTaskVo; + +import java.util.List; + +/** + * 社区运营 - 关键词拉群任务Service + */ +public interface IWeCommunityKeywordToGroupService { + + /** + * 根据过滤条件获取关键词拉群任务列表 + * + * @param taskName 任务名称 + * @param createBy 创建人 + * @param keyword 关键词 + * @param beginTime 开始时间 + * @param endTime 结束时间 + * @return 列表数据 + */ + List getTaskList(String taskName, String createBy, String keyword, String beginTime, String endTime); + + /** + * 根据id获取任务性情 + * + * @param taskId 任务id + * @return 结果 + */ + WeKeywordGroupTaskVo getTaskById(Long taskId); + + /** + * 创建新任务 + * + * @param task 待存储的对象 + * @param keywords 关键词 + * @return 结果 + */ + int addTask(WeKeywordGroupTask task, String[] keywords); + + /** + * 对指定任务进行更新 + * + * @param task 待更新对象 + * @param keywords 关键词 + * @return 结果 + */ + int updateTask(WeKeywordGroupTask task, String[] keywords); + + /** + * 根据id列表批量删除任务 + * + * @param ids id列表 + * @return 删除行数 + */ + int batchRemoveTaskByIds(Long[] ids); + + /** + * 检测任务名是否唯一 + * + * @param taskName 任务名 + * @return 结果 + */ + boolean taskNameIsUnique(String taskName); +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupSopService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupSopService.java new file mode 100644 index 000000000..96e612765 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupSopService.java @@ -0,0 +1,71 @@ +package com.linkwechat.wecom.service; + +import com.linkwechat.wecom.domain.WeGroupSop; +import com.linkwechat.wecom.domain.vo.WeGroupSopVo; + +import java.util.List; + +/** + * 社区运营 群sop service接口 + */ +public interface IWeGroupSopService { + + /** + * 通过规则id获取sop规则 + * + * @param ruleId 规则id + * @return 结果 + */ + WeGroupSopVo getGroupSopById(Long ruleId); + + /** + * 通过过滤条件获取群sop列表 + * + * @param ruleName 规则名称 + * @param createBy 创建者 + * @param beginTime 创建区间 - 开始时间 + * @param endTime 创建区间 - 结束时间 + * @return 群sop规则列表 + */ + List getGroupSopList(String ruleName, String createBy, String beginTime, String endTime); + + + /** + * 新增群sop + * + * @param weGroupSop 新增所用数据 + * @param groupIdList 选中的群聊id + * @param materialIdList 素材 + * @param picList 手动上传的图片URL + * @return 结果 + */ + int addGroupSop(WeGroupSop weGroupSop, List groupIdList, List materialIdList, List picList); + + + /** + * 更新群sop + * + * @param weGroupSop 更新所用数据 + * @param groupIdList 选中的群聊id + * @param materialIdList 素材 + * @param picList 手动上传的图片URL + * @return 结果 + */ + int updateGroupSop(WeGroupSop weGroupSop, List groupIdList, List materialIdList, List picList); + + /** + * 批量删除群sop + * + * @param ids sop规则id列表 + * @return 结果 + */ + int batchRemoveGroupSopByIds(Long[] ids); + + /** + * 校验规则名是否唯一 + * + * @param ruleName 规则名 + * @return 是否唯一 + */ + boolean isRuleNameUnique(String ruleName); +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWePresTagGroupTaskService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWePresTagGroupTaskService.java new file mode 100644 index 000000000..52f7ca0f1 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWePresTagGroupTaskService.java @@ -0,0 +1,95 @@ +package com.linkwechat.wecom.service; + +import com.linkwechat.wecom.domain.WeTag; +import com.linkwechat.wecom.domain.dto.WePresTagGroupTaskDto; +import com.linkwechat.wecom.domain.vo.WeEmplVo; +import com.linkwechat.wecom.domain.vo.WePresTagGroupTaskVo; +import com.linkwechat.wecom.domain.vo.WePresTagGroupTaskStatVo; + +import java.util.List; + +/** + * 社区运营 老客户标签建群 相关逻辑 + */ +public interface IWePresTagGroupTaskService { + + /** + * 新增建群任务 + * + * @param taskDto 建群所需数据 + * @return 数据库新增行数 + */ + int add(WePresTagGroupTaskDto taskDto); + + /** + * 根据条件查询任务列表 + * + * @param taskName 任务名称 + * @param sendType 发送方式 + * @param createBy 创建人 + * @param beginTime 起始时间 + * @param endTime 结束时间 + * @return 结果 + */ + List selectTaskListList(String taskName, Integer sendType, String createBy, String beginTime, String endTime); + + /** + * 通过id获取老客标签建群任务 + * + * @param taskId 任务id + * @return 结果 + */ + WePresTagGroupTaskVo getTaskById(Long taskId); + + /** + * 批量删除老客标签建群任务 + * + * @param idList 任务id列表 + * @return 删除的行数 + */ + int batchRemoveTaskByIds(Long[] idList); + + /** + * 更新老客户标签建群任务 + * + * @param wePresTagGroupTaskDto 更新数据 + * @return 结果 + * @taskId 待更新任务id + */ + int updateTask(Long taskId, WePresTagGroupTaskDto wePresTagGroupTaskDto); + + /** + * 检测任务名是否已存在 + * + * @param taskName 任务名 + * @return 结果 + */ + boolean checkTaskNameUnique(String taskName); + + /** + * 通过老客标签建群id获取其统计信息 + * + * @param taskId 任务id + * @param customerName 客户名 + * @param isSent 是否已发送 + * @param isInGroup 是否已在群 + * @return 统计信息 + */ + List getStatByTaskId(Long taskId, String customerName, Integer isSent, Integer isInGroup); + + /** + * 通过任务id获取对应使用员工 + * + * @param taskId 任务id + * @return 结果 + */ + List getEmplListByTaskId(Long taskId); + + /** + * 通过任务id获取标签列表 + * + * @param taskId 任务id + * @return 结果 + */ + List getTagListByTaskId(Long taskId); +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCommunityKeywordToGroupServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCommunityKeywordToGroupServiceImpl.java new file mode 100644 index 000000000..1b9ffe440 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCommunityKeywordToGroupServiceImpl.java @@ -0,0 +1,157 @@ +package com.linkwechat.wecom.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.linkwechat.wecom.domain.WeKeywordGroupTaskKeyword; +import com.linkwechat.wecom.domain.WeKeywordGroupTask; +import com.linkwechat.wecom.domain.WeGroupCode; +import com.linkwechat.wecom.domain.vo.WeKeywordGroupTaskVo; +import com.linkwechat.wecom.mapper.WeKeywordGroupTaskKwMapper; +import com.linkwechat.wecom.mapper.WeKeywordGroupTaskMapper; +import com.linkwechat.wecom.service.IWeCommunityKeywordToGroupService; +import com.linkwechat.wecom.service.IWeGroupCodeService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * 社区运营 - 关键词拉群任务ServiceImpl + */ +@Slf4j +@Service +public class WeCommunityKeywordToGroupServiceImpl extends ServiceImpl implements IWeCommunityKeywordToGroupService { + + @Autowired + private WeKeywordGroupTaskMapper taskMapper; + + @Autowired + private WeKeywordGroupTaskKwMapper taskKwMapper; + + @Autowired + private IWeGroupCodeService groupCodeService; + + /** + * 根据过滤条件获取关键词拉群任务列表 + * + * @param taskName 任务名称 + * @param createBy 创建人 + * @param keyword 关键词 + * @param beginTime 开始时间 + * @param endTime 结束时间 + * @return 列表数据 + */ + @Override + public List getTaskList(String taskName, String createBy, String keyword, String beginTime, String endTime) { + List taskVoList = taskMapper.getTaskList(taskName, createBy, keyword, beginTime, endTime); + for (WeKeywordGroupTaskVo task : taskVoList) { + // 查询关键词列表 + QueryWrapper taskKeywordQueryWrapper = new QueryWrapper<>(); + taskKeywordQueryWrapper.eq("task_id", task.getTaskId()); + List taskKeywordList = taskKwMapper.selectList(taskKeywordQueryWrapper); + task.setKeywordList(taskKeywordList); + // 通过群活码id查询对应的群 + List groupNameList = taskMapper.getGroupNameListByTaskId(task.getTaskId()); + groupNameList.removeIf(Objects::isNull); + task.setGroupNameList(groupNameList); + // 获取群活码信息 + WeGroupCode weGroupCode = groupCodeService.selectWeGroupCodeById(task.getGroupCodeId()); + task.setGroupCodeInfo(weGroupCode); + } + + return taskVoList; + } + + /** + * 根据id获取任务性情 + * + * @param taskId 任务id + * @return 结果 + */ + @Override + public WeKeywordGroupTaskVo getTaskById(Long taskId) { + WeKeywordGroupTaskVo taskVo = taskMapper.getTaskById(taskId); + // 查询关键词列表 + QueryWrapper taskKeywordQueryWrapper = new QueryWrapper<>(); + taskKeywordQueryWrapper.eq("task_id", taskId); + List keywordList = taskKwMapper.selectList(taskKeywordQueryWrapper); + taskVo.setKeywordList(keywordList); + return taskVo; + } + + /** + * 创建新任务 + * + * @param task 待存储的对象 + * @param keywords 关键词 + * @return 结果 + */ + @Override + @Transactional + public int addTask(WeKeywordGroupTask task, String[] keywords) { + if(this.save(task)) { + // 构建关键词对象并存储 + List weKeywordGroupTaskKeywordList = Arrays.stream(keywords) + .map(word -> new WeKeywordGroupTaskKeyword(task.getTaskId(), word)).collect(Collectors.toList()); + taskKwMapper.batchBindsTaskKeyword(weKeywordGroupTaskKeywordList); + return 1; + } + return 0; + } + + /** + * 对指定任务进行更新 + * + * @param task 待更新对象 + * @param keywords 关键词 + * @return 结果 + */ + @Override + @Transactional + public int updateTask(WeKeywordGroupTask task, String[] keywords) { + if(taskMapper.updateById(task) == 1) { + // 删除原有的关键词 + QueryWrapper taskKwQueryWrapper = new QueryWrapper<>(); + taskKwQueryWrapper.eq("task_id", task.getTaskId()); + taskKwMapper.delete(taskKwQueryWrapper); + // 再重新插入新的关键词 + List weKeywordGroupTaskKeywordList = Arrays.stream(keywords) + .map(word -> new WeKeywordGroupTaskKeyword(task.getTaskId(), word)).collect(Collectors.toList()); + taskKwMapper.batchBindsTaskKeyword(weKeywordGroupTaskKeywordList); + return 1; + } + return 0; + } + + /** + * 根据id列表批量删除任务 + * + * @param ids id列表 + * @return 删除行数 + */ + @Override + @Transactional + public int batchRemoveTaskByIds(Long[] ids) { + // 移除其所有关键词对象 + QueryWrapper taskKwQueryWrapper = new QueryWrapper<>(); + taskKwQueryWrapper.in("task_id", Arrays.asList(ids)); + taskKwMapper.delete(taskKwQueryWrapper); + return taskMapper.batchRemoveTaskByIds(ids); + } + + /** + * 检测任务名是否唯一 + * + * @param taskName 任务名 + * @return 结果 + */ + @Override + public boolean taskNameIsUnique(String taskName) { + return taskMapper.checkNameUnique(taskName) == 0; + } +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeGroupSopServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeGroupSopServiceImpl.java new file mode 100644 index 000000000..33b61ac8b --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeGroupSopServiceImpl.java @@ -0,0 +1,247 @@ +package com.linkwechat.wecom.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.linkwechat.common.utils.StringUtils; +import com.linkwechat.wecom.domain.*; +import com.linkwechat.wecom.domain.vo.WeGroupSopVo; +import com.linkwechat.wecom.mapper.*; +import com.linkwechat.wecom.service.IWeGroupSopService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class WeGroupSopServiceImpl extends ServiceImpl implements IWeGroupSopService { + + @Autowired + private WeGroupSopMapper groupSopMapper; + + @Autowired + private WeGroupSopChatMapper sopChatMapper; + + @Autowired + private WeMaterialMapper materialMapper; + + @Autowired + private WeGroupSopMaterialMapper sopMaterialMapper; + + @Autowired + private WeGroupMapper groupMapper; + + @Autowired + private WeGroupSopPicMapper sopPicMapper; + + /** + * 通过规则id获取sop规则 + * + * @param ruleId 规则id + * @return 结果 + */ + @Override + public WeGroupSopVo getGroupSopById(Long ruleId) { + WeGroupSopVo groupSopVo = groupSopMapper.getGroupSopById(ruleId); + this.setChatAndMaterial(groupSopVo); + // 设置手动上传的图片url + this.setPicList(groupSopVo); + return groupSopVo; + } + + /** + * 通过过滤条件获取群sop列表 + * + * @param ruleName 规则名称 + * @param createBy 创建者 + * @param beginTime 创建区间 - 开始时间 + * @param endTime 创建区间 - 结束时间 + * @return 群sop规则列表 + */ + @Override + public List getGroupSopList(String ruleName, String createBy, String beginTime, String endTime) { + List groupSopVoList = groupSopMapper.getGroupSopList(ruleName, createBy, beginTime, endTime); + for (WeGroupSopVo groupSopVo : groupSopVoList) { + this.setChatAndMaterial(groupSopVo); + // 设置手动上传的图片url + this.setPicList(groupSopVo); + + } + return groupSopVoList; + } + + /** + * 新增群sop + * + * @param weGroupSop 新增所用数据 + * @param groupIdList 选中的群聊id + * @param materialIdList 素材 + * @param picList 手动上传的图片URL + * @return 结果 + */ + @Override + @Transactional + public int addGroupSop(WeGroupSop weGroupSop, List groupIdList, List materialIdList, List picList) { + if (this.save(weGroupSop)) { + Long ruleId = weGroupSop.getRuleId(); + // 保存群聊及素材关联 + this.saveChatAndMaterialBinds(ruleId, groupIdList, materialIdList); + // 保存手动上传的图片素材 + List sopPicList = picList.stream().map(e -> new WeGroupSopPic(ruleId, e)).collect(Collectors.toList()); + sopPicMapper.batchSopPic(sopPicList); + return 1; + } + return 0; + } + + /** + * 更新群sop + * + * @param weGroupSop 更新所用数据 + * @param groupIdList 选中的群聊id + * @param materialIdList 素材 + * @param picList 手动上传的图片URL + * @return 结果 + */ + @Override + @Transactional + public int updateGroupSop(WeGroupSop weGroupSop, List groupIdList, List materialIdList, List picList) { + if (this.updateById(weGroupSop)) { + Long ruleId = weGroupSop.getRuleId(); + // 先删除旧数据 + this.deleteChatAndMaterialBinds(ruleId); + // 再插入新数据 + this.saveChatAndMaterialBinds(ruleId, groupIdList, materialIdList); + // 删除旧图片 + QueryWrapper queryWrapper = new QueryWrapper<>(); + sopPicMapper.delete(queryWrapper.eq("rule_id", ruleId)); + + // 保留新上传的图片 + List sopPicList = picList.stream().map(e -> new WeGroupSopPic(ruleId, e)).collect(Collectors.toList()); + sopPicMapper.batchSopPic(sopPicList); + return 1; + } + return 0; + } + + /** + * 批量删除群sop + * + * @param ids sop规则id列表 + * @return 结果 + */ + @Override + @Transactional + public int batchRemoveGroupSopByIds(Long[] ids) { + int affectedRows = groupSopMapper.deleteBatchIds(Arrays.asList(ids)); + if (affectedRows > 0) { + // 解除群聊和素材关联 + QueryWrapper sopGroupQueryWrapper = new QueryWrapper<>(); + sopGroupQueryWrapper.in("rule_id", Arrays.asList(ids)); + sopChatMapper.delete(sopGroupQueryWrapper); + QueryWrapper sopMaterialQueryWrapper = new QueryWrapper<>(); + sopMaterialQueryWrapper.in("rule_id", Arrays.asList(ids)); + sopMaterialMapper.delete(sopMaterialQueryWrapper); + + // 删除手动上传的图片 + QueryWrapper picQueryWrapper = new QueryWrapper<>(); + picQueryWrapper.in("rule_id", Arrays.asList(ids)); + sopPicMapper.delete(picQueryWrapper); + } + return affectedRows; + } + + /** + * 校验规则名是否唯一 + * + * @param ruleName 规则名 + * @return 是否唯一 + */ + @Override + public boolean isRuleNameUnique(String ruleName) { + return groupSopMapper.isRuleNameUnique(ruleName) == 0; + } + + + /** + * 根据关联条件查询该sop所关联的群聊及素材对象,并将其放入WeGroupSopVo相应属性中用于前端使用 + * + * @param groupSopVo 目标sop规则 + */ + private void setChatAndMaterial(WeGroupSopVo groupSopVo) { + Long ruleId = groupSopVo.getRuleId(); + + // 获取对应群聊信息 + QueryWrapper groupQueryWrapper = new QueryWrapper<>(); + List chatIdList = groupSopMapper.getChatIdListByRuleId(ruleId); + if (StringUtils.isNotEmpty(chatIdList)) { + groupQueryWrapper.in("chat_id", chatIdList); + List groupList = groupMapper.selectList(groupQueryWrapper); + groupSopVo.setGroupList(groupList); + } + // 获取对应素材信息 + QueryWrapper materialQueryWrapper = new QueryWrapper<>(); + List materialIdList = groupSopMapper.getMaterialIdListByRuleId(ruleId); + if (StringUtils.isNotEmpty(materialIdList)) { + materialQueryWrapper.in("id", materialIdList); + List materialList = materialMapper.selectList(materialQueryWrapper); + groupSopVo.setMaterialList(materialList); + } + } + + /** + * 保存该sop规则对应的群聊及素材关联对象 + * + * @param ruleId 规则id + * @param chatIdList 群聊id列表 + * @param materialIdList 素材id列表 + */ + private void saveChatAndMaterialBinds(Long ruleId, List chatIdList, List materialIdList) { + if (StringUtils.isNotEmpty(chatIdList)) { + List sopChatList = chatIdList + .stream() + .map(id -> new WeGroupSopChat(ruleId, id)) + .collect(Collectors.toList()); + sopChatMapper.batchBindsSopChat(sopChatList); + } + if (StringUtils.isNotEmpty(materialIdList)) { + List materialList = materialIdList + .stream() + .map(id -> new WeGroupSopMaterial(ruleId, id)) + .collect(Collectors.toList()); + sopMaterialMapper.batchBindsSopMaterial(materialList); + } + } + + /** + * 解除该sop规则对应的群聊及素材关联 + * + * @param ruleId 规则id + */ + private void deleteChatAndMaterialBinds(Long ruleId) { + QueryWrapper sopChatQueryWrapper = new QueryWrapper<>(); + sopChatQueryWrapper.eq("rule_id", ruleId); + sopChatMapper.delete(sopChatQueryWrapper); + QueryWrapper sopMaterialQueryWrapper = new QueryWrapper<>(); + sopMaterialQueryWrapper.eq("rule_id", ruleId); + sopMaterialMapper.delete(sopMaterialQueryWrapper); + } + + /** + * 为WeGroupSopVo查询手动上传的图片列表 + * + * @param sopVo 代操作对象 + */ + private void setPicList(WeGroupSopVo sopVo) { + Long ruleId = sopVo.getRuleId(); + QueryWrapper picQueryWrapper = new QueryWrapper<>(); + picQueryWrapper.eq("rule_id", ruleId); + List sopPicList = sopPicMapper.selectList(picQueryWrapper); + List picList = sopPicList.stream().map(WeGroupSopPic::getPicUrl).collect(Collectors.toList()); + sopVo.setPicList(picList); + } +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WePresTagGroupTaskServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WePresTagGroupTaskServiceImpl.java new file mode 100644 index 000000000..00f662033 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WePresTagGroupTaskServiceImpl.java @@ -0,0 +1,241 @@ +package com.linkwechat.wecom.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.linkwechat.common.utils.SecurityUtils; +import com.linkwechat.common.utils.bean.BeanUtils; +import com.linkwechat.wecom.domain.*; +import com.linkwechat.wecom.domain.dto.WePresTagGroupTaskDto; +import com.linkwechat.wecom.domain.vo.WePresTagGroupTaskStatVo; +import com.linkwechat.wecom.domain.vo.WePresTagGroupTaskVo; +import com.linkwechat.wecom.domain.vo.WeEmplVo; +import com.linkwechat.wecom.mapper.WePresTagGroupTaskMapper; +import com.linkwechat.wecom.mapper.WePresTagGroupTaskScopeMapper; +import com.linkwechat.wecom.mapper.WePresTagGroupTaskStatMapper; +import com.linkwechat.wecom.mapper.WePresTagGroupTaskTagMapper; +import com.linkwechat.wecom.service.IWePresTagGroupTaskService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class WePresTagGroupTaskServiceImpl extends ServiceImpl implements IWePresTagGroupTaskService { + + @Autowired + private WePresTagGroupTaskMapper taskMapper; + + @Autowired + private WePresTagGroupTaskStatMapper taskStatMapper; + + @Autowired + private WePresTagGroupTaskScopeMapper taskScopeMapper; + + @Autowired + private WePresTagGroupTaskTagMapper taskTagMapper; + + /** + * 新增建群任务 + * + * @param taskDto 建群所需数据 + * @return 数据库新增行数 + */ + @Override + @Transactional(rollbackFor = RuntimeException.class) + public int add(WePresTagGroupTaskDto taskDto) { + + // 创建WeCommunityOldGroup对象进行存储 + WePresTagGroupTask task = new WePresTagGroupTask(); + + BeanUtils.copyProperties(taskDto, task); + task.setCreateBy(SecurityUtils.getUsername()); + + if (this.save(task)) { + // 保存标签对象 + List tagIdList = taskDto.getTagList(); + if (CollectionUtil.isNotEmpty(tagIdList)) { + List taskTagList = tagIdList.stream().map(id -> new WePresTagGroupTaskTag(task.getTaskId(), id)).collect(Collectors.toList()); + taskTagMapper.batchBindsTaskTags(taskTagList); + } + + // 保存员工信息 + List emplIdList = taskDto.getScopeList(); + if (CollectionUtil.isNotEmpty(emplIdList)) { + List wePresTagGroupTaskScopeList = emplIdList.stream().map(id -> new WePresTagGroupTaskScope(task.getTaskId(), id)).collect(Collectors.toList()); + taskScopeMapper.batchBindsTaskScopes(wePresTagGroupTaskScopeList); + } + + return 1; + } + return 0; + } + + /** + * 根据条件查询任务列表 + * @param taskName 任务名称 + * @param sendType 发送方式 + * @param createBy 创建人 + * @param beginTime 起始时间 + * @param endTime 结束时间 + * @return 结果 + */ + @Override + public List selectTaskListList(String taskName, Integer sendType, String createBy, String beginTime, String endTime) { + // 查询任务列表 + List taskVoList = taskMapper.selectTaskList(taskName, sendType, createBy, beginTime, endTime); + if(CollectionUtil.isNotEmpty(taskVoList)) { + + for (WePresTagGroupTaskVo taskVo : taskVoList) { + Long taskId = taskVo.getTaskId(); + // 根据任务id获取标签 + List TagList = taskTagMapper.getTagListByTaskId(taskId); + taskVo.setTagList(TagList); + + // 根据任务id获取该任务使用人员列表 + List emplList = taskScopeMapper.getScopeListByTaskId(taskId); + taskVo.setScopeList(emplList); + } + } + return taskVoList; + } + + /** + * 通过id获取老客标签建群任务 + * + * @param taskId 任务id + * @return 结果 + */ + @Override + public WePresTagGroupTaskVo getTaskById(Long taskId) { + return taskMapper.selectTaskById(taskId); + } + + /** + * 批量删除老客标签建群任务 + * + * @param idList 任务id列表 + * @return 删除的行数 + */ + @Override + @Transactional + public int batchRemoveTaskByIds(Long[] idList) { + List ids = Arrays.asList(idList); + + // 解除关联的标签 + QueryWrapper taskTagQueryWrapper = new QueryWrapper<>(); + taskTagQueryWrapper.in("task_id", ids); + taskTagMapper.delete(taskTagQueryWrapper); + // 解除关联的员工 + QueryWrapper taskScopeQueryWrapper = new QueryWrapper<>(); + taskScopeQueryWrapper.in("task_id", ids); + taskScopeMapper.delete(taskScopeQueryWrapper); + // 删除其用户统计 + QueryWrapper statQueryWrapper = new QueryWrapper<>(); + statQueryWrapper.in("task_id", ids); + taskStatMapper.delete(statQueryWrapper); + + // 删除task + QueryWrapper taskQueryWrapper = new QueryWrapper<>(); + taskQueryWrapper.in("task_id", ids); + return taskMapper.delete(taskQueryWrapper); + } + + /** + * 更新老客户标签建群任务 + * + * @taskId 待更新任务id + * @param wePresTagGroupTaskDto 更新数据 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = RuntimeException.class) + public int updateTask(Long taskId, WePresTagGroupTaskDto wePresTagGroupTaskDto) { + WePresTagGroupTask wePresTagGroupTask = new WePresTagGroupTask(); + BeanUtils.copyProperties(wePresTagGroupTaskDto, wePresTagGroupTask); + wePresTagGroupTask.setTaskId(taskId); + wePresTagGroupTask.setUpdateBy(SecurityUtils.getUsername()); + if (taskMapper.updateById(wePresTagGroupTask) == 1) { + // 更新标签 + // 先删除旧标签 + QueryWrapper taskTagQueryWrapper = new QueryWrapper<>(); + taskTagQueryWrapper.eq("task_id", taskId); + taskTagMapper.delete(taskTagQueryWrapper); + // 再添加新标签 + List tagIdList = wePresTagGroupTaskDto.getTagList(); + if (CollectionUtil.isNotEmpty(tagIdList)) { + List wePresTagGroupTaskTagList = tagIdList.stream().map(id -> new WePresTagGroupTaskTag(taskId, id)).collect(Collectors.toList()); + taskTagMapper.batchBindsTaskTags(wePresTagGroupTaskTagList); + } + + // 更新范围 + + // 先解除旧的员工绑定信息 + QueryWrapper taskScopeQueryWrapper = new QueryWrapper<>(); + taskScopeQueryWrapper.eq("task_id", taskId); + taskScopeMapper.delete(taskScopeQueryWrapper); + + // 再重新绑定员工信息 + List userIdList = wePresTagGroupTaskDto.getScopeList(); + if (CollectionUtil.isNotEmpty(userIdList)) { + List wePresTagGroupTaskScopeList = userIdList.stream().map(id -> new WePresTagGroupTaskScope(taskId, id)).collect(Collectors.toList()); + taskScopeMapper.batchBindsTaskScopes(wePresTagGroupTaskScopeList); + } + return 1; + } + return 0; + } + + /** + * 检测任务名是否已存在 + * + * @param taskName 任务名 + * @return 结果 + */ + @Override + public boolean checkTaskNameUnique(String taskName) { + int count = taskMapper.checkTaskNameUnique(taskName); + return count <= 0; + } + + /** + * 通过老客标签建群id获取其统计信息 + * + * @param taskId 任务id + * @param customerName 客户名 + * @param isSent 是否已发送 + * @param isInGroup 是否已在群 + * @return 统计信息 + */ + @Override + public List getStatByTaskId(Long taskId, String customerName, Integer isSent, Integer isInGroup) { + return taskStatMapper.getStatByTaskId(taskId, customerName, isSent, isInGroup); + } + + /** + * 通过任务id获取对应使用员工 + * + * @param taskId 任务id + * @return 结果 + */ + @Override + public List getEmplListByTaskId(Long taskId) { + return taskScopeMapper.getScopeListByTaskId(taskId); + } + + /** + * 通过任务id获取标签列表 + * + * @param taskId 任务id + * @return 结果 + */ + @Override + public List getTagListByTaskId(Long taskId) { + return taskTagMapper.getTagListByTaskId(taskId); + } +} diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupSopChatMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupSopChatMapper.xml new file mode 100644 index 000000000..d1630d6ff --- /dev/null +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupSopChatMapper.xml @@ -0,0 +1,12 @@ + + + + + insert into we_group_sop_chat(rule_id, chat_id) values + + (#{item.ruleId},#{item.chatId}) + + + \ No newline at end of file diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupSopMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupSopMapper.xml new file mode 100644 index 000000000..d139ad5a1 --- /dev/null +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupSopMapper.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + SELECT + rule_id, + rule_name, + title, + content, + start_time, + end_time, + create_by, + create_time, + update_by, + update_time + FROM + we_group_sop + + + + + + + + + + + + + \ No newline at end of file diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupSopMaterialMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupSopMaterialMapper.xml new file mode 100644 index 000000000..29ca84bb2 --- /dev/null +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupSopMaterialMapper.xml @@ -0,0 +1,12 @@ + + + + + insert into we_group_sop_material(rule_id, material_id) values + + (#{item.ruleId},#{item.materialId}) + + + \ No newline at end of file diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupSopPicMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupSopPicMapper.xml new file mode 100644 index 000000000..ad82b6208 --- /dev/null +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeGroupSopPicMapper.xml @@ -0,0 +1,12 @@ + + + + + insert into we_group_sop_pic(rule_id, pic_url) values + + (#{item.ruleId},#{item.picUrl}) + + + \ No newline at end of file diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeKeywordGroupTaskKwMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeKeywordGroupTaskKwMapper.xml new file mode 100644 index 000000000..813ff68e5 --- /dev/null +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeKeywordGroupTaskKwMapper.xml @@ -0,0 +1,12 @@ + + + + + insert into we_keyword_group_kw(task_id, keyword) values + + (#{item.taskId},#{item.keyword}) + + + \ No newline at end of file diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeKeywordGroupTaskMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeKeywordGroupTaskMapper.xml new file mode 100644 index 000000000..ac84e36fd --- /dev/null +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeKeywordGroupTaskMapper.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + SELECT DISTINCT + wkg.task_id, + wkg.task_name, + wkg.group_code_id, + wkg.welcome_msg, + wkg.create_by, + wkg.create_time, + wkg.update_by, + wkg.update_time + FROM + we_keyword_group wkg + LEFT JOIN we_keyword_group_kw wkgk ON wkgk.task_id = wkg.task_id + + + + + + + + + + delete from we_keyword_group where task_id in + + #{id} + + + + + \ No newline at end of file diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskMapper.xml new file mode 100644 index 000000000..ea3f9a968 --- /dev/null +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskMapper.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + SELECT + wptg.task_id, + wptg.task_name, + wptg.welcome_msg, + wptg.send_type, + wptg.group_code_id, + wptg.send_scope, + wptg.send_gender, + wptg.cus_begin_time, + wptg.cus_end_time, + wptg.create_by, + wptg.create_time, + wptg.update_by, + wptg.update_time, + IFNULL((SELECT SUM( wgca.scan_code_times ) AS scan_times FROM we_group_code_actual wgca GROUP BY group_code_id HAVING group_code_id = wgc.id), 0) as total_member + FROM + we_pres_tag_group wptg + left join we_group_code wgc on wgc.id = wptg.group_code_id + + + + + + + + + \ No newline at end of file diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskScopeMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskScopeMapper.xml new file mode 100644 index 000000000..8e40f049a --- /dev/null +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskScopeMapper.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + insert into we_pres_tag_group_scope(task_id, we_user_id) values + + (#{item.taskId},#{item.weUserId}) + + + + \ No newline at end of file diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskStatMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskStatMapper.xml new file mode 100644 index 000000000..cff6579a7 --- /dev/null +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskStatMapper.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + delete from we_pres_tag_group_stat where task_id = #{taskId} + + + \ No newline at end of file diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskTagMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskTagMapper.xml new file mode 100644 index 000000000..08508c44e --- /dev/null +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskTagMapper.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + insert into we_pres_tag_group_tag(task_id, tag_id) values + + (#{item.taskId},#{item.tagId}) + + + \ No newline at end of file diff --git a/sql/link-wechat.sql b/sql/link-wechat.sql index 624d7546e..593fe19e7 100644 --- a/sql/link-wechat.sql +++ b/sql/link-wechat.sql @@ -25962,3 +25962,110 @@ INSERT INTO `we_user` VALUES ('wdd', '', 'www', '1', '1', '13211113333', '', nul INSERT INTO `we_user` VALUES ('XiaoSheYu', 'http://wework.qpic.cn/bizmail/X3FxrhAuusOcZ043GdRcFeia622qBa3SZJJb4qtowKeOhmSYERDeMyQ/0', '舒俊丽', '', '2', '15956647920', '', null, '1', '', '0', null, '1', null, null, '', null, null, null, null, null, '0', '1', '0'); INSERT INTO `we_user` VALUES ('XuXueJun', 'http://wework.qpic.cn/bizmail/aUfcY5fiaq6Fwc8qgcDh0MKO443WLmULcJg2iaWWZHjZP4lRQjibxqYAg/0', '徐学军', '', '1', '18654148698', '1570728529@qq.com', null, '4294967290', '前端高级开发工程师', '0', null, '1', null, null, '', '', null, null, null, null, '0', '1', '0'); INSERT INTO `we_user` VALUES ('zhengjw10', '', '郑伟', '', '1', '13966190918', '', null, '4294967290', '', '0', null, '1', null, null, '', null, null, null, null, null, '0', '4', '0'); + + +DROP TABLE IF EXISTS `we_pres_tag_group`; +CREATE TABLE `we_pres_tag_group` ( + `task_id` bigint(20) NOT NULL COMMENT '老客户标签建群任务id', + `task_name` varchar(100) NOT NULL COMMENT '任务名称', + `send_type` tinyint(1) NULL DEFAULT 0 COMMENT '发送方式 0: 企业群发 1:个人群发', + `create_by` varchar(100) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(100) NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `group_code_id` bigint(11) NOT NULL COMMENT '群活码id', + `send_scope` tinyint(1) NOT NULL DEFAULT 0 COMMENT '发送范围 0: 全部客户 1:部分客户', + `send_gender` tinyint(1) UNSIGNED ZEROFILL NOT NULL DEFAULT 0 COMMENT '发送性别 0: 全部 1: 男 2: 女 3:未知', + `cus_begin_time` datetime(0) NULL DEFAULT NULL COMMENT '目标客户被添加起始时间', + `cus_end_time` datetime(0) NULL DEFAULT NULL COMMENT '目标客户被添加结束时间', + `welcome_msg` varchar(255) NOT NULL COMMENT '加群引导语', + PRIMARY KEY (`task_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '老客户标签建群' ROW_FORMAT = Dynamic; + +INSERT INTO `we_pres_tag_group` VALUES (1369113576379850754, 'test2', 0, 'admin', '2021-03-09 10:31:28', NULL, '2021-03-09 10:31:28', 1366313511814303744, 1, 0, '2021-03-10 00:00:00', '2021-03-26 00:00:00', '11111'); + +DROP TABLE IF EXISTS `we_pres_tag_group_scope`; +CREATE TABLE `we_pres_tag_group_scope` ( + `task_id` bigint(20) NOT NULL COMMENT '老客户标签建群任务id', + `we_user_id` varchar(64) NOT NULL COMMENT '员工id' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic COMMENT = '老客标签建群使用范围表'; + +INSERT INTO `we_pres_tag_group_scope` VALUES (1369113576379850754, '45DuXiangShangQingXie'); + +DROP TABLE IF EXISTS `we_pres_tag_group_tag`; +CREATE TABLE `we_pres_tag_group_tag` ( + `task_id` bigint(20) NOT NULL COMMENT '老客户标签建群任务id', + `tag_id` varchar(64) NOT NULL COMMENT '标签id' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic COMMENT = '老客标签建群标签关联表'; + +INSERT INTO `we_pres_tag_group_tag` VALUES (1369113576379850754, 'et2H-nDQAA3BIW0d9qKA8c7gSU_gGcDg'); +INSERT INTO `we_pres_tag_group_tag` VALUES (1369113576379850754, 'et2H-nDQAAlUGX7YwAmuyygDAk72TfTg'); +INSERT INTO `we_pres_tag_group_tag` VALUES (1369113576379850754, 'et2H-nDQAAWagEOi96PHb42IgGunTRpQ'); + +DROP TABLE IF EXISTS `we_pres_tag_group_stat`; +CREATE TABLE `we_pres_tag_group_stat` ( + `task_id` bigint(20) NOT NULL COMMENT '老客标签建群任务id', + `external_userid` varchar(255) NOT NULL COMMENT '客户id', + `is_sent` tinyint(255) NOT NULL DEFAULT 1 COMMENT '是否已送达 0: 未送达 1:已送达', + `is_in_group` tinyint(255) NOT NULL COMMENT '是否已经在群 0:不在群 1:已在群' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic COMMENT = '老客标签建群客户统计表'; + +DROP TABLE IF EXISTS `we_keyword_group_kw`; +CREATE TABLE `we_keyword_group_kw` ( + `task_id` bigint(20) NOT NULL COMMENT '关键词拉群任务id', + `keyword` varchar(32) NOT NULL COMMENT '关键词' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic COMMENT = '关键词拉群 关键词表'; + +INSERT INTO `we_keyword_group_kw` VALUES (1369483460217491458, 'aaa'); +INSERT INTO `we_keyword_group_kw` VALUES (1369483460217491458, 'bbb'); +INSERT INTO `we_keyword_group_kw` VALUES (1369483460217491458, 'eee'); + +DROP TABLE IF EXISTS `we_keyword_group`; +CREATE TABLE `we_keyword_group` ( + `task_id` bigint(20) NOT NULL COMMENT '关键词拉群任务主键', + `task_name` varchar(100) NOT NULL COMMENT '任务名称', + `group_code_id` bigint(20) NOT NULL COMMENT '群活码id', + `welcome_msg` varchar(255) NOT NULL COMMENT '加群欢迎语', + `create_by` varchar(64) NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) NULL DEFAULT '' COMMENT '备注', + PRIMARY KEY (`task_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic COMMENT = '关键词拉群任务表'; + +INSERT INTO `we_keyword_group` VALUES (1369483460217491458, 'test22', 1366658053960765440, 'welcome', 'admin', '2021-03-10 14:12:38', 'admin', '2021-03-10 14:12:38', ''); + +DROP TABLE IF EXISTS `we_group_sop`; +CREATE TABLE `we_group_sop` ( + `rule_id` bigint(20) NOT NULL COMMENT '群SOP主键', + `rule_name` varchar(64) NOT NULL COMMENT '规则名称', + `title` varchar(64) NOT NULL COMMENT '标题', + `content` varchar(255) NOT NULL COMMENT '内容', + `start_time` datetime NOT NULL COMMENT '开始执行时间', + `end_time` datetime NOT NULL COMMENT '结束时间', + `create_by` varchar(64) DEFAULT '' COMMENT '创建者', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) DEFAULT '' COMMENT '更新者', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`rule_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='群SOP规则表'; + +DROP TABLE IF EXISTS `we_group_sop_chat`; +CREATE TABLE `we_group_sop_chat` ( + `rule_id` bigint(20) NOT NULL COMMENT 'SOP id', + `chat_id` varchar(32) NOT NULL COMMENT '群聊id' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='SOP规则 - 群聊 关联表'; + +DROP TABLE IF EXISTS `we_group_sop_material`; +CREATE TABLE `we_group_sop_material` ( + `rule_id` bigint(20) NOT NULL COMMENT 'SOP规则id', + `material_id` bigint(20) NOT NULL COMMENT '素材id' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic COMMENT = '群SOP规则 - 素材关联表'; + +DROP TABLE IF EXISTS `we_group_sop_pic`; +CREATE TABLE `we_group_sop_pic` ( + `rule_id` bigint(20) NOT NULL COMMENT '群SOP规则ID', + `pic_url` varchar(150) NOT NULL COMMENT '图片URL' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic COMMENT = '群SOP规则图片'; -- Gitee From 0de46161d5e75ba05c1f812c1d15771820fe680e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B0=B4=E5=BA=93=E6=B5=AA=E5=AD=90?= <1539136324@qq.com> Date: Tue, 16 Mar 2021 14:05:52 +0800 Subject: [PATCH 13/16] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=B0=E5=AE=A2?= =?UTF-8?q?=E6=8B=89=E7=BE=A4BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wecom/domain/WeCommunityNewGroup.java | 6 ++++++ .../wecom/domain/vo/WeCommunityNewGroupVo.java | 5 +++++ .../impl/WeCommunityNewGroupServiceImpl.java | 17 ++++++++++------- .../mapper/wecom/WeCommunityNewGroupMapper.xml | 3 ++- 4 files changed, 23 insertions(+), 8 deletions(-) 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 98296ee26..721adf465 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 @@ -85,4 +85,10 @@ public class WeCommunityNewGroup extends BaseEntity { @ApiModelProperty("0 未删除 1 已删除") private int delFlag; + + /** + * 员工活码 + */ + private String userQrCode; + } diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeCommunityNewGroupVo.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeCommunityNewGroupVo.java index 9495e541b..a4d364724 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 @@ -120,4 +120,9 @@ public class WeCommunityNewGroupVo { @ApiModelProperty(value = "创建时间", hidden = true) private Date createTime = new Date(); + /** + * 个人码 + */ + private String userQrCode; + } 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 eec5cdd7e..d9330eb0d 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 @@ -73,7 +73,6 @@ public class WeCommunityNewGroupServiceImpl extends ServiceImpl item.setEmpleCodeId(communityNewGroup.getNewGroupId())); iWeEmpleCodeUseScopService.saveBatch(weEmpleCode.getWeEmpleCodeUseScops()); @@ -192,7 +193,9 @@ public class WeCommunityNewGroupServiceImpl extends ServiceImpl -- Gitee From 353a9fdc944b9d53143c44f9608d901582087b3a Mon Sep 17 00:00:00 2001 From: leejoker <1056650571@qq.com> Date: Wed, 17 Mar 2021 00:15:26 +0800 Subject: [PATCH 14/16] =?UTF-8?q?=E5=A2=9E=E5=8A=A0TODO=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/wecom/WeTaskFissionController.java | 6 ++++++ 1 file changed, 6 insertions(+) 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 9486275c9..139c2dc28 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 @@ -64,6 +64,12 @@ public class WeTaskFissionController extends BaseController { @GetMapping("/stat") public AjaxResult statistics(WeTaskFissionStatisticQO weTaskFissionStatisticQO) { //TODO 待完成 + //record表和complete_record表增加创建时间 + //record表增加完成时间 + //三个统计维度: + // 1. 日新增:每天裂变客户数 + // 2. 日参与:每天扫码参加活动的客户数 + // 3. 日完成:每天完成裂变任务的客户数 return null; } -- Gitee From 9538bfb97e0a8b4211214aeb7d486c3d4d20bba1 Mon Sep 17 00:00:00 2001 From: leejoker <1056650571@qq.com> Date: Wed, 17 Mar 2021 09:05:35 +0800 Subject: [PATCH 15/16] =?UTF-8?q?=E8=A7=A3=E5=86=B3jdk9+=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E4=BE=9D=E8=B5=96=E7=BC=BA=E5=A4=B1=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- linkwe-admin/pom.xml | 5 +++++ pom.xml | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/linkwe-admin/pom.xml b/linkwe-admin/pom.xml index 7516087b1..49a8ff57a 100644 --- a/linkwe-admin/pom.xml +++ b/linkwe-admin/pom.xml @@ -83,6 +83,11 @@ + + + javax.xml.bind + jaxb-api + diff --git a/pom.xml b/pom.xml index e72007200..8454df901 100644 --- a/pom.xml +++ b/pom.xml @@ -40,6 +40,7 @@ 4.0.0 4.1.49.Final 2.2.5.RELEASE + 2.3.1 @@ -269,6 +270,12 @@ spring-cloud-starter-alibaba-nacos-discovery ${nacos.version} + + + javax.xml.bind + jaxb-api + ${jaxb.version} + -- Gitee From 215e20e9424491400e515c9fe1bf030616752b00 Mon Sep 17 00:00:00 2001 From: sunxiwang Date: Wed, 17 Mar 2021 09:22:35 +0800 Subject: [PATCH 16/16] fix --- linkwe-admin/src/main/resources/bootstrap.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/linkwe-admin/src/main/resources/bootstrap.properties b/linkwe-admin/src/main/resources/bootstrap.properties index 1c2bb0da5..39a9563d1 100644 --- a/linkwe-admin/src/main/resources/bootstrap.properties +++ b/linkwe-admin/src/main/resources/bootstrap.properties @@ -1,4 +1,4 @@ -spring.cloud.nacos.config.server-addr=${NACOS_SERVER:119.45.28.29:10848} -spring.cloud.nacos.config.namespace=627a666a-76b2-42ad-a1b0-70a12d2c73fd -spring.application.name=link-wechat -spring.cloud.nacos.config.file-extension=yaml \ No newline at end of file +#spring.cloud.nacos.config.server-addr= +#spring.cloud.nacos.config.namespace= +#spring.application.name= +#spring.cloud.nacos.config.file-extension= \ No newline at end of file -- Gitee