Browse Source

Changes 修改站点绑定业务

cyan 3 months ago
parent
commit
cc45f7c0e2

+ 24 - 0
jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/okki/site/controller/ShopApiController.java

@@ -18,6 +18,7 @@ import org.jeecg.modules.okki.site.service.IOkkiSiteService;
 import org.jeecg.modules.okki.wechatgroup.entity.OkkiShopWechatGroupMsg;
 import org.jeecg.modules.okki.wechatgroup.service.IOkkiShopWechatGroupMsgService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
@@ -48,6 +49,9 @@ public class ShopApiController {
     @Autowired
     private IOkkiShopWechatGroupMsgService okkiShopWechatGroupMsgService;
 
+    @Value("${file.jsonPath}")
+    private String fileJsonPath;
+
     @PostMapping(value = "/add")
     public Result<String> add(@RequestBody OkkiSiteParam okkiSiteParam, @RequestHeader(HttpHeaders.AUTHORIZATION) String authorization) {
         log.info("请求参数 param" + okkiSiteParam.toString() + "authorization" + authorization);
@@ -201,4 +205,24 @@ public class ShopApiController {
         List<OkkiShopWechatGroupMsg> okkiShopWechatGroupMsgs = okkiShopWechatGroupMsgService.getSiteWechatMsgBySiteId(weChatMsgDto);
         return Result.ok(okkiShopWechatGroupMsgs);
     }
+
+    /**
+     * 处理okki站点信息
+     *
+     * @param authorization
+     * @return
+     */
+    @PostMapping(value = "/deal/site/info")
+    public Result<?> dealOkkiSiteInfo(@RequestHeader(HttpHeaders.AUTHORIZATION) String authorization) {
+        log.info("请求参数 authorization:{}", authorization);
+        String Authorization = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImRlYW4iLCJleHAiOjE3MTQ0NjU5Njl9.QdCBYR8mioXcKGi1n5RdMQ5RbJHCSGbE8dkdwYuOXh4";
+        if (!authorization.equals(Authorization)) {
+            return Result.error("sign 验证不通过");
+        }
+        boolean result = okkiSiteService.dealSiteInfoByJsonData(fileJsonPath);
+        if (result) {
+            return Result.ok("同步站点信息成功");
+        }
+        return Result.error("同步站点信息失败");
+    }
 }

+ 49 - 0
jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/okki/site/dto/XiaoManSiteDto.java

@@ -0,0 +1,49 @@
+package org.jeecg.modules.okki.site.dto;
+
+import lombok.Data;
+
+/**
+ * @author Chen
+ */
+@Data
+public class XiaoManSiteDto {
+    /**
+     * 站点名称
+     */
+    private String name;
+
+    /**
+     * 站点id
+     */
+    private String siteId;
+
+    /**
+     * 服务阶段
+     */
+    private String servicePhase;
+
+    /**
+     * 阶段状态
+     */
+    private String serviceStatus;
+
+    /**
+     * 阶段停留时长
+     */
+    private String serviceHour;
+
+    /**
+     * 阶段节点
+     */
+    private String phaseName;
+
+    /**
+     * 阶段节点状态
+     */
+    private String phaseStatus;
+
+    /**
+     * 节点停留时长
+     */
+    private String phaseHour;
+}

+ 1 - 1
jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/okki/site/entity/FeiShuConfigEnum.java

@@ -5,7 +5,7 @@ package org.jeecg.modules.okki.site.entity;
  */
 public enum FeiShuConfigEnum {
     PROD("cli_a61c977059f01013", "saNlFj2YdMXZ0uEAucyRodfSEp5ZHikR", "X16RbjCVCasCmds7fn0c0k21nju", "tblSkc8HfEYDL99U", "tblr6rTYtEbLHmAg", "tbl9ykcEZBqZt1vj", "vewiMyOeed"),
-    DEV("cli_a61c977059f01013", "saNlFj2YdMXZ0uEAucyRodfSEp5ZHikR", "Emonb0RBsaVKjdsagjdc4tcOnUd", "tblG6SUeY3YFmnh2", "tblV1nViJgSGbmmL", "tblNApWmY1Rw9H7G", "vewiMyOeed");
+    DEV("cli_a61c977059f01013", "saNlFj2YdMXZ0uEAucyRodfSEp5ZHikR", "J7vLb3DSzawXUEsJclic42KZnle", "tbllKsGJnErNNQiv", "tblfgKMLQAzcn7CP", "tblrtDtH1SiWUJiX", "vewiMyOeed");
 
     private final String appId;
     private final String appSecret;

+ 47 - 0
jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/okki/site/service/IFeiShuCommonService.java

@@ -923,4 +923,51 @@ public class IFeiShuCommonService {
 
         return mapList;
     }
+
+    /**
+     * 获取客服团队表数据
+     * @return
+     */
+    public List<Map<String, Object>> getCustomerInfoKfSheet() {
+        FeiShuConfigEnum configEnum = FeiShuConfigManager.getInstance().getConfigEnum();
+        Client client = Client.newBuilder(configEnum.getAppId(), configEnum.getAppSecret()).build();
+
+        SearchAppTableRecordReq req = SearchAppTableRecordReq.newBuilder().appToken(configEnum.getAppToken()).tableId(configEnum.getKfTableId())
+                .searchAppTableRecordReqBody(SearchAppTableRecordReqBody.newBuilder()
+                        .viewId(configEnum.getKfTableSummaryViewId())
+                        .fieldNames(new String[]{"公司名称", "网站ID"})
+                        .automaticFields(false)
+                        .build())
+                .build();
+
+        // 发起请求
+        SearchAppTableRecordResp resp = null;
+        try {
+            resp = client.bitable().appTableRecord().search(req);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+
+        // 处理服务端错误
+        if (!resp.success()) {
+            log.error(String.format("code:%s,msg:%s,reqId:%s", resp.getCode(), resp.getMsg(), resp.getRequestId()));
+        }
+
+//        log.info(Jsons.DEFAULT.toJson(resp.getData()));
+
+        List<Map<String, Object>> mapList = new ArrayList<>();
+        if (resp.success()) {
+            SearchAppTableRecordRespBody recordRespBody = resp.getData();
+            AppTableRecord[] items = recordRespBody.getItems();
+            for (AppTableRecord item : items) {
+                Map<String,Object> fieldsObject = item.getFields();
+                fieldsObject.put("record_id",item.getRecordId());
+                mapList.add(fieldsObject);
+            }
+        }
+        // 业务数据处理
+        log.info("mapList:{}", FastJsonUtil.toJSONString(mapList));
+
+        return mapList;
+    }
 }

+ 6 - 0
jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/okki/site/service/IFeiShuMsgService.java

@@ -55,4 +55,10 @@ public interface IFeiShuMsgService {
      * @param status
      */
     public void sendCreateSeoShowlistTableLinkMsg(String customerName, String feiShuUnionId, String siteId, String tableLink, String status);
+
+    /**
+     * 同步小满仪表盘数据
+     *
+     */
+    public void syncXiaoManDashboardData();
 }

+ 6 - 0
jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/okki/site/service/IOkkiSiteService.java

@@ -38,7 +38,13 @@ public interface IOkkiSiteService extends IService<OkkiSite> {
 
     /**
      * 保存或更新飞书客户信息
+     *
      * @param siteId
      */
     public void saveOrUpdateFeishuSheetFields(String siteId);
+
+    /**
+     * 处理站点信息
+     */
+    public boolean dealSiteInfoByJsonData(String jsonPath);
 }

+ 20 - 0
jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/okki/site/service/impl/FeiShuMsgServiceImpl.java

@@ -6,6 +6,9 @@ import org.jeecg.common.util.HttpClientUtil;
 import org.jeecg.modules.okki.site.service.IFeiShuMsgService;
 import org.springframework.stereotype.Service;
 
+import java.util.HashMap;
+import java.util.Map;
+
 
 /**
  * @author Chen
@@ -684,4 +687,21 @@ public class FeiShuMsgServiceImpl implements IFeiShuMsgService {
         object.put("card", template);
         HttpClientUtil.doPostJson(botUrl, object.toJSONString());
     }
+
+    /**
+     * 同步小满仪表盘数据
+     *
+     */
+    @Override
+    public void syncXiaoManDashboardData() {
+        String botUrl = "https://open.feishu.cn/open-apis/bot/v2/hook/dd827854-2d0b-41b4-ba69-f7f417d5e086";
+//        String botUrl = "https://open.feishu.cn/open-apis/bot/v2/hook/5a8d0e56-1ab1-40c3-8405-ba91202a163b";
+
+        JSONObject object = new JSONObject();
+        object.put("msg_type", "text");
+        Map<String, Object> map = new HashMap<>();
+        map.put("text","<at user_id=\"all\">Tom</at> 小满仪表盘的数据已完成同步,并已更新至飞书表格");
+        object.put("content", map);
+        HttpClientUtil.doPostJson(botUrl, object.toJSONString());
+    }
 }

+ 87 - 1
jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/okki/site/service/impl/OkkiSiteServiceImpl.java

@@ -1,5 +1,6 @@
 package org.jeecg.modules.okki.site.service.impl;
 
+import cn.hutool.core.io.FileUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -11,6 +12,7 @@ import org.jeecg.common.util.FastJsonUtil;
 import org.jeecg.common.util.ThreadPoolUtil;
 import org.jeecg.modules.okki.account.dto.OkkiUserInfoDto;
 import org.jeecg.modules.okki.site.dto.FeiShuRecordSheetDto;
+import org.jeecg.modules.okki.site.dto.XiaoManSiteDto;
 import org.jeecg.modules.okki.site.entity.OkkiSite;
 import org.jeecg.modules.okki.site.entity.OkkiSiteStatusChangeLog;
 import org.jeecg.modules.okki.site.mapper.OkkiSiteMapper;
@@ -223,7 +225,7 @@ public class OkkiSiteServiceImpl extends ServiceImpl<OkkiSiteMapper, OkkiSite> i
             defaultUserIds.put("10", Collections.singletonList(1543));
             defaultUserIds.put("4", Collections.singletonList(1290));
             defaultUserIds.put("8", Collections.singletonList(1593));
-            defaultUserIds.put("12", Collections.singletonList(1409));
+            defaultUserIds.put("12", Arrays.asList(1364, 1409));
             if (userIds.isEmpty() && defaultUserIds.containsKey(key)) {
                 userIds.addAll(defaultUserIds.get(key));
             }
@@ -605,4 +607,88 @@ public class OkkiSiteServiceImpl extends ServiceImpl<OkkiSiteMapper, OkkiSite> i
         }
         return null;
     }
+
+    /**
+     * 处理站点信息
+     */
+    @Override
+    public boolean dealSiteInfoByJsonData(String jsonPath) {
+        boolean result = false;
+
+        // 读取 JSON 数据
+        String jsonDataStr = FileUtil.readString(jsonPath, "UTF-8");
+
+        // 解析 JSON 数据并清理 siteId
+        List<XiaoManSiteDto> xiaoManSiteDtoOrigins = FastJsonUtil.parseList(jsonDataStr, XiaoManSiteDto.class);
+        xiaoManSiteDtoOrigins.forEach(c -> {
+            String siteId = c.getSiteId();
+            if (siteId.contains("网站ID: ")) {
+                c.setSiteId(siteId.replace("网站ID: ", ""));
+            }
+        });
+
+        Map<String, XiaoManSiteDto> xiaoManSiteDtoMap = new HashMap<>();
+        xiaoManSiteDtoOrigins.forEach(c -> {
+            xiaoManSiteDtoMap.put(c.getSiteId(), c);
+        });
+        log.info("xiaoManSiteDtoMap: {}", FastJsonUtil.toJSONString(xiaoManSiteDtoMap));
+
+        // 获取所有客户信息
+        List<Map<String, Object>> allCustomerInfos = feiShuCommonService.getCustomerInfoKfSheet();
+        if (allCustomerInfos.isEmpty()) {
+            return result;
+        }
+
+        // 遍历客户信息并处理更新
+        for (Map<String, Object> item : allCustomerInfos) {
+            String siteIdStr = String.valueOf(item.get("网站ID"));
+            String[] parts = siteIdStr.split("\\.");
+            String siteId = parts[0];
+            log.info("siteId:{}", siteId);
+            if (xiaoManSiteDtoMap.containsKey(siteId)) {
+                dealUpdateCustomerInfo(item, xiaoManSiteDtoMap.get(siteId));
+            }
+        }
+
+        // 发送消息
+        feiShuMsgService.syncXiaoManDashboardData();
+        return true;
+    }
+
+    /**
+     * 处理客服团队信息的更新逻辑
+     */
+    private void dealUpdateCustomerInfo(Map<String, Object> customerInfo, XiaoManSiteDto xiaoManSiteDto) {
+        log.info("customerInfo:{},xiaoManSiteDto:{}", FastJsonUtil.toJSONString(customerInfo), FastJsonUtil.toJSONString(xiaoManSiteDto));
+        // 初始化飞书更新 DTO
+        String recordId = (String) customerInfo.get("record_id");
+        FeiShuRecordSheetDto recordSheetDto = new FeiShuRecordSheetDto();
+        recordSheetDto.setRecordId(recordId);
+        recordSheetDto.setOkTablePage("Y");
+        recordSheetDto.setOkTableName("客服团队");
+
+        // 获取更新字段映射
+        Map<String, Object> updateGroupFieldMap = getOkkiSiteInfoMap(xiaoManSiteDto);
+        log.info("updateGroupFieldMap: {}", updateGroupFieldMap);
+
+        // 发送更新请求到飞书
+        feiShuCommonService.sendUpdateRequestFeiShuSheet(updateGroupFieldMap, recordSheetDto);
+    }
+
+    /**
+     * 获取需要更新的用户类型与对应的飞书字段
+     *
+     * @param xiaoManSiteDto
+     * @return
+     */
+    private Map<String, Object> getOkkiSiteInfoMap(XiaoManSiteDto xiaoManSiteDto) {
+        Map<String, Object> updateGroupFieldMap = new HashMap<>();
+        updateGroupFieldMap.put("小满-服务阶段", xiaoManSiteDto.getServicePhase());
+        updateGroupFieldMap.put("小满-阶段状态", xiaoManSiteDto.getServiceStatus());
+        updateGroupFieldMap.put("小满-阶段停留时长", xiaoManSiteDto.getServiceHour());
+        updateGroupFieldMap.put("小满-阶段节点", xiaoManSiteDto.getPhaseName());
+        updateGroupFieldMap.put("小满-阶段节点状态", xiaoManSiteDto.getPhaseStatus());
+        updateGroupFieldMap.put("小满-节点停留时长", xiaoManSiteDto.getPhaseHour());
+        return updateGroupFieldMap;
+    }
 }

+ 4 - 1
jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml

@@ -320,4 +320,7 @@ aws:
   secretKey: kJUFTihoZD9MMzr7/P5znYfqanI6iPAt7rhSkLM/
   region: us-west-2
   host: https://nsyqc4gjshaehd4b6brkq3jij40iucuc.lambda-url.us-west-2.on.aws
-  service : lambda
+  service : lambda
+
+file:
+  jsonPath: /home/ubuntu/okki-oms/files/xiaoman_dashboard.json