wks 1 рік тому
батько
коміт
7b5c8790a4

+ 10 - 9
sql/Online.sql

@@ -1,9 +1,10 @@
---  2024-11-29 BY dongxin
-CREATE TABLE `ins_area_company_related_info`  (
-                                                  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键/自增',
-                                                  `company_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '子订单id',
-                                                  `jqappoint` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '交强特别约定',
-                                                  `syappoint` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '商业特别约定',
-                                                  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '子订单关联信息表' ROW_FORMAT = Dynamic;
---  2024-11-29 BY dongxin
+--  2024-12-02 BY wks
+alter table sys_qy_wechat
+    drop column support_staff_url;
+
+alter table sys_qy_wechat
+    add open_kf_id varchar(256) null comment '客服账号ID';
+
+alter table sys_qy_wechat
+    add open_kf_name varchar(256) null comment '客服账号名称';
+--  2024-12-02 BY wks

+ 0 - 12
src/main/java/com/ydtech/config/MvcConfig.java

@@ -3,16 +3,11 @@ package com.ydtech.config;
 import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.extension.plugins.handler.TableNameHandler;
 import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
-import com.fasterxml.jackson.dataformat.xml.XmlMapper;
 import com.ydtech.aop.DynamicNameAspect;
 import com.ydtech.aop.DynamicTableNameHandler;
 import com.ydtech.aop.RequestStringParamHandlerMethodArgumentResolver;
 import com.ydtech.components.CorsInterceptor;
 import com.ydtech.components.TokenInterceptor;
-import com.ydtech.config.properties.WechatOpenProperties;
-import me.chanjar.weixin.mp.api.WxMpService;
-import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
-import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -26,8 +21,6 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 import javax.annotation.Resource;
 import java.nio.charset.StandardCharsets;
 import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
 
 @Configuration
 public class MvcConfig implements WebMvcConfigurer {
@@ -143,9 +136,4 @@ public class MvcConfig implements WebMvcConfigurer {
 
     }
 
-    @Bean
-    public XmlMapper xmlMapper(){
-        return new XmlMapper();
-    }
-
 }

+ 1 - 0
src/main/java/com/ydtech/modules/admin/components/wechat/customer/request/CustomerListRequest.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.admin.components.wechat.customer.request;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.core.page.BasePageVO;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;

+ 20 - 2
src/main/java/com/ydtech/modules/admin/controller/SysQyWeChatController.java

@@ -3,18 +3,17 @@ package com.ydtech.modules.admin.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ydtech.core.page.HttpResult;
-import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.po.SysQyWeChat;
 import com.ydtech.modules.admin.service.SysQyWeChatService;
 import com.ydtech.modules.admin.service.SysSwitchConfigService;
 import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.modules.admin.service.WechatCustomerService;
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.time.LocalDateTime;
@@ -33,6 +32,8 @@ public class SysQyWeChatController {
 
     private final SysSwitchConfigService sysSwitchConfigService;
 
+    private final WechatCustomerService wechatCustomerService;
+
     @ApiOperation(value = "配置宣传图/客服")
     @PostMapping(value = "/save/picture")
     public HttpResult<SysQyWeChat> save(@RequestBody SysQyWeChat sysQyWeChat) {
@@ -62,6 +63,8 @@ public class SysQyWeChatController {
             List<SysQyWeChat> list = sysQyWeChatService.list();
             sysQyWeChat = list.get(new Random().nextInt(list.size()));
         }
+        sysQyWeChat.setOpenKfId(null);
+        sysQyWeChat.setOpenKfName(null);
         sysQyWeChat.setDisplay(b);
         return HttpResult.ok(sysQyWeChat);
     }
@@ -73,4 +76,19 @@ public class SysQyWeChatController {
         return HttpResult.ok(sysQyWeChat);
     }
 
+    @ApiOperation(value = "查询微信客服链接")
+    @PostMapping(value = "/find/wechatCustomer")
+    public HttpResult<String> findWechatPictureByUserId() {
+        String userId = BaseController.getUser().getId();
+        SysUser user = sysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getId, userId));
+        SysQyWeChat sysQyWeChat = sysQyWeChatService.getOne(new LambdaQueryWrapper<SysQyWeChat>().eq(SysQyWeChat::getUserId, user.getLeaderId()));
+        if (sysQyWeChat == null) {
+            List<SysQyWeChat> list = sysQyWeChatService.list();
+            sysQyWeChat = list.get(new Random().nextInt(list.size()));
+        }
+        String s = wechatCustomerService.addContactWay(sysQyWeChat.getOpenKfId());
+        String url = s + "&scene_param=" + userId;
+        return HttpResult.ok(url);
+    }
+
 }

+ 9 - 0
src/main/java/com/ydtech/modules/admin/controller/wechat/WechatCustomerController.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.admin.controller.wechat;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.components.wechat.customer.response.CustomerListResponse;
 import com.ydtech.modules.admin.service.WechatCustomerService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -12,6 +13,7 @@ import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.List;
 
 @Api(tags = "微信业务")
 @Slf4j
@@ -38,4 +40,11 @@ public class WechatCustomerController {
         return HttpResult.ok();
     }
 
+    @PostMapping(path = "/list")
+    @ApiOperation(value = "客服列表")
+    public HttpResult<List<CustomerListResponse.AccountListDTO>> list() throws JsonProcessingException {
+        List<CustomerListResponse.AccountListDTO> list = customerService.list();
+        return HttpResult.ok(list);
+    }
+
 }

+ 7 - 6
src/main/java/com/ydtech/modules/admin/model/po/SysQyWeChat.java

@@ -48,12 +48,13 @@ public class SysQyWeChat {
     @TableField( "wechat_picture_url")
     private String wechatPictureUrl;
 
-    /**
-     * 企业微信客服URL
-     */
-    @ApiModelProperty("企业微信客服URL")
-    @TableField("support_staff_url")
-    private String supportStaffUrl;
+    @ApiModelProperty("企业微信客服id")
+    @TableField("open_kf_id")
+    private String openKfId;
+
+    @ApiModelProperty("企业微信客服名称")
+    @TableField("open_kf_name")
+    private String openKfName;
 
     @ApiModelProperty("创建用户")
     @TableField("operator")

+ 22 - 2
src/main/java/com/ydtech/modules/admin/service/WechatCustomerService.java

@@ -1,6 +1,10 @@
 package com.ydtech.modules.admin.service;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.ydtech.core.page.BasePageVO;
+import com.ydtech.modules.admin.components.wechat.customer.response.CustomerListResponse;
+
+import java.util.List;
 
 public interface WechatCustomerService {
 
@@ -8,16 +12,32 @@ public interface WechatCustomerService {
      * 配置微信客服回调信息
      *
      * @param msgSignature
-     * @param timestamp 时间戳
+     * @param timestamp    时间戳
      * @param nonce
-     * @param echoStr 加密后的参数
+     * @param echoStr      加密后的参数
      * @return 校验参数
      */
     String customerCallback(String msgSignature, String timestamp, String nonce, String echoStr);
 
     /**
      * 回调事件
+     *
      * @param wechatEncrypt
      */
     void callbackSendMsgOnEvent(String wechatEncrypt) throws JsonProcessingException;
+
+
+    /**
+     * 获取全部客服账号
+     *
+     * @return 客服列表
+     */
+    List<CustomerListResponse.AccountListDTO> list();
+
+    /**
+     * 获取链接
+     *
+     * @return 跳转链接
+     */
+    String addContactWay(String openKfId);
 }

+ 23 - 6
src/main/java/com/ydtech/modules/admin/service/impl/WechatCustomerServiceImpl.java

@@ -3,23 +3,24 @@ package com.ydtech.modules.admin.service.impl;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.dataformat.xml.XmlMapper;
 import com.ydtech.modules.admin.components.WechatCustomerComponents;
+import com.ydtech.modules.admin.components.wechat.customer.request.CustomerAddContactWayRequest;
+import com.ydtech.modules.admin.components.wechat.customer.request.CustomerListRequest;
 import com.ydtech.modules.admin.components.wechat.customer.request.CustomerSendMsgOnEventRequest;
 import com.ydtech.modules.admin.components.wechat.customer.request.CustomerSyncMsgRequest;
+import com.ydtech.modules.admin.components.wechat.customer.response.CustomerAddContactWayResponse;
+import com.ydtech.modules.admin.components.wechat.customer.response.CustomerListResponse;
 import com.ydtech.modules.admin.components.wechat.customer.response.CustomerSyncMsgResponse;
-import com.ydtech.modules.admin.model.SysDept;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.vo.wechat.WechatCustomerCallbackVo;
 import com.ydtech.modules.admin.model.vo.wechat.WechatEncryptVo;
-import com.ydtech.modules.admin.service.SysDeptService;
 import com.ydtech.modules.admin.service.SysUserService;
 import com.ydtech.modules.admin.service.WechatCustomerService;
 import com.ydtech.utils.StringUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.util.crypto.WxCryptUtil;
-import me.chanjar.weixin.cp.bean.kf.WxCpKfMsgListResp;
-import me.chanjar.weixin.cp.bean.kf.WxCpKfMsgSendRequest;
 import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
 
 import java.util.List;
 
@@ -32,7 +33,7 @@ public class WechatCustomerServiceImpl implements WechatCustomerService {
 
     private final SysUserService sysUserService;
 
-    private final XmlMapper xmlMapper;
+    private final XmlMapper xmlMapper = new XmlMapper();
 
     @Override
     public String customerCallback(String msgSignature, String timestamp, String nonce, String echoStr) {
@@ -59,14 +60,30 @@ public class WechatCustomerServiceImpl implements WechatCustomerService {
         CustomerSyncMsgResponse.MsgListDTO msgListDTO = customerSyncMsgResponse.getMsgList().get(msgList.size() - 1);
 
         CustomerSyncMsgResponse.MsgListDTO.EventDTO event = msgListDTO.getEvent();
+        if(ObjectUtils.isEmpty(event)) {
+            return;
+        }
         String sceneParam = event.getSceneParam();
         if (StringUtils.isEmpty(sceneParam)) {
             return;
         }
 
         SysUser sysUser = sysUserService.getById(sceneParam);
-        CustomerSendMsgOnEventRequest customerSendMsgOnEventRequest = CustomerSendMsgOnEventRequest.sendMsgOnEvent(sysUser, msgListDTO.getMsgid(),event.getWelcomeCode());
+        CustomerSendMsgOnEventRequest customerSendMsgOnEventRequest = CustomerSendMsgOnEventRequest.sendMsgOnEvent(sysUser, msgListDTO.getMsgid(), event.getWelcomeCode());
         wechatCustomerComponents.sendMsgOnEvent(customerSendMsgOnEventRequest);
     }
 
+    @Override
+    public List<CustomerListResponse.AccountListDTO> list() {
+        CustomerListRequest customerListResponse = new CustomerListRequest(0, 100);
+        return wechatCustomerComponents.list(customerListResponse).getAccountList();
+    }
+
+    @Override
+    public String addContactWay(String openKfId) {
+        CustomerAddContactWayRequest customerAddContactWayRequest = new CustomerAddContactWayRequest(openKfId, "WELCOME_MESSAGE");
+        CustomerAddContactWayResponse customerAddContactWayResponse = wechatCustomerComponents.addContactWay(customerAddContactWayRequest);
+        return customerAddContactWayResponse.getUrl();
+    }
+
 }

+ 1 - 1
src/main/java/com/ydtech/modules/order/constants/OrderCacheConstant.java

@@ -112,6 +112,6 @@ public class OrderCacheConstant {
     /**
      * 微信客服token
      */
-    public static final String WECHAT_CUSTOMER_TOKEN = "WECHAT:CUSTOMER:TOKEN";
+    public static final String WECHAT_CUSTOMER_TOKEN = "wechat:customer:token";
 
 }