Ver Fonte

企微聊天及详情

Long há 3 semanas atrás
pai
commit
5af92ce42a

+ 12 - 10
fs-company/src/main/java/com/fs/store/controller/FsCityController.java

@@ -9,7 +9,9 @@ import com.fs.store.vo.CityVO;
 import com.google.common.collect.Lists;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 import springfox.documentation.annotations.Cacheable;
 
 import javax.servlet.http.HttpServletRequest;
@@ -43,15 +45,15 @@ public class FsCityController extends BaseController
     @Cacheable("citys")
     public R getCitys(HttpServletRequest request){
         List<FsCity> list=fsCityService.selectFsCitys();
-//        List<CityVO> cityVOS = Lists.newArrayList();
-////        for (FsCity city : list){
-////            CityVO cityVO = new CityVO();
-////            cityVO.setValue(city.getCityId());
-////            cityVO.setLabel(city.getName());
-////            cityVO.setPid(city.getParentId());
-////            cityVOS.add(cityVO);
-////        }
-        return R.ok().put("data", list);
+        List<CityVO> cityVOS = Lists.newArrayList();
+        for (FsCity city : list){
+            CityVO cityVO = new CityVO();
+            cityVO.setValue(Long.parseLong(city.getCityId()));
+            cityVO.setLabel(city.getCityName());
+            cityVO.setPid(Long.parseLong(city.getParentId()));
+            cityVOS.add(cityVO);
+        }
+        return R.ok().put("data", CityTreeUtil.list2TreeConverter(cityVOS, 0));
 
     }
 }

+ 20 - 0
fs-company/src/main/java/com/fs/users/controller/FsUserAddressController.java

@@ -1,5 +1,6 @@
 package com.fs.users.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
@@ -8,6 +9,7 @@ import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.store.domain.FsUserAddress;
+import com.fs.store.dto.AddressInfoDTO;
 import com.fs.store.service.IFsUserAddressService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -95,4 +97,22 @@ public class FsUserAddressController extends BaseController
         List<FsUserAddress> list = fsUserAddressService.selectFsUserAddressList(fsUserAddress);
         return R.ok().put("data", list);
     }
+
+    @GetMapping(value = "/getAddress/{address}")
+    public AjaxResult getAddress(@PathVariable("address") String address)
+    {
+        String kdnAddress = fsUserAddressService.getKdnAddress(address);
+        AddressInfoDTO addressInfoDTO = JSON.parseObject(kdnAddress, AddressInfoDTO.class);
+        AddressInfoDTO.AddressData data = addressInfoDTO.getData();
+        String provinceName = data.getProvinceName();
+        if (!provinceName.contains("省") && !provinceName.contains("区")){
+            data.setProvinceName(data.getProvinceName()+"市");
+            if (data.getExpAreaName().contains("县")){
+                data.setCityName("县");
+            }else {
+                data.setCityName("市辖区");
+            }
+        }
+        return AjaxResult.success(addressInfoDTO);
+    }
 }

+ 5 - 0
fs-company/src/main/java/com/fs/users/controller/FsUserController.java

@@ -140,4 +140,9 @@ public class FsUserController extends BaseController
         Boolean r = fsUserService.disabledUser(ids, true);
         return ResponseResult.ok(r);
     }
+
+    @GetMapping("/getUserInfoBySessionId")
+    public R getUserInfoBySessionId(@RequestParam Long sessionId) {
+        return R.ok().put("data", fsUserService.getUserInfoBySessionId(sessionId));
+    }
 }

+ 37 - 0
fs-service-system/src/main/java/com/fs/store/dto/AddressInfoDTO.java

@@ -0,0 +1,37 @@
+package com.fs.store.dto;
+
+import lombok.Data;
+
+@Data
+public class AddressInfoDTO {
+
+    private String EBusinessID;
+
+    private AddressData Data;
+
+    private boolean Success;
+
+    private String Reason;
+
+
+    private String ResultCode;
+    @Data
+    public  class AddressData {
+
+        private String ProvinceName;
+
+        private String StreetName;
+
+        private String Address;
+
+        private String CityName;
+
+        private String ExpAreaName;
+
+        private String Mobile;
+
+        private String Name;
+
+    }
+
+}

+ 4 - 1
fs-service-system/src/main/java/com/fs/store/service/IFsUserAddressService.java

@@ -1,8 +1,9 @@
 package com.fs.store.service;
 
-import java.util.List;
 import com.fs.store.domain.FsUserAddress;
 
+import java.util.List;
+
 /**
  * 用户地址Service接口
  * 
@@ -64,4 +65,6 @@ public interface IFsUserAddressService
     Integer selectFsUserAddressCountsByUserId(long userId);
 
     Integer delAllAddress(Long userId);
+
+    String getKdnAddress(String address);
 }

+ 7 - 1
fs-service-system/src/main/java/com/fs/store/service/IFsUserService.java

@@ -20,7 +20,6 @@ import com.fs.store.vo.FSUserVO;
 import com.fs.store.vo.FsCompanyUserListQueryVO;
 import com.fs.store.vo.FsUserTuiVO;
 import com.fs.store.vo.h5.*;
-import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
@@ -252,4 +251,11 @@ public interface IFsUserService
      * @param param
      */
     void setRepeatFansTag(FsUserCourseBeMemberParam param);
+
+    /**
+     * 根据会话sessionId查询用户信息
+     * @param sessionId sessionId
+     * @return  fsUser
+     */
+    FsUser getUserInfoBySessionId(Long sessionId);
 }

+ 65 - 4
fs-service-system/src/main/java/com/fs/store/service/impl/FsUserAddressServiceImpl.java

@@ -1,12 +1,22 @@
 package com.fs.store.service.impl;
 
-import java.util.List;
+import cn.hutool.http.HttpUtil;
+import com.fs.common.exception.CustomException;
 import com.fs.common.utils.DateUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.fs.store.mapper.FsUserAddressMapper;
+import com.fs.his.config.FsSysConfig;
+import com.fs.his.utils.ConfigUtil;
 import com.fs.store.domain.FsUserAddress;
+import com.fs.store.mapper.FsUserAddressMapper;
 import com.fs.store.service.IFsUserAddressService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.Base64Utils;
+
+import java.net.URLEncoder;
+import java.security.MessageDigest;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 用户地址Service业务层处理
@@ -19,6 +29,8 @@ public class FsUserAddressServiceImpl implements IFsUserAddressService
 {
     @Autowired
     private FsUserAddressMapper fsUserAddressMapper;
+    @Autowired
+    private ConfigUtil ConfigUtil;
 
     /**
      * 查询用户地址
@@ -110,4 +122,53 @@ public class FsUserAddressServiceImpl implements IFsUserAddressService
     public Integer delAllAddress(Long userId) {
         return fsUserAddressMapper.delAllAddress(userId);
     }
+
+    @Override
+    public String getKdnAddress(String address) {
+        String   requestData = "{'Content':'" + address + "'}";
+        Map<String, Object> params = new HashMap<>();
+        FsSysConfig sysConfig = ConfigUtil.getSysConfig();
+        try {
+            params.put("RequestData", URLEncoder.encode(requestData, "UTF-8"));
+            params.put("EBusinessID",sysConfig.getKdnId().trim());
+            params.put("RequestType", "6001");
+            String dataSign = encrypt(requestData, sysConfig.getKdnKeyId().trim(), "UTF-8");
+            params.put("DataSign", URLEncoder.encode(dataSign, "UTF-8"));
+            params.put("DataType", "2");
+            String result = HttpUtil.post(sysConfig.getKdnAddressUrl().trim(), params);
+
+            return result;
+        } catch (Exception e) {
+            throw  new CustomException(e.getMessage());
+        }
+    }
+
+    private String encrypt(String content, String keyValue, String charset) {
+        if (keyValue != null) {
+            content = content + keyValue;
+        }
+        byte[] src;
+        try {
+            src = MD5(content, charset).getBytes(charset);
+            return Base64Utils.encodeToString(src);
+        } catch (Exception e) {
+        }
+
+        return null;
+    }
+
+    private String MD5(String str, String charset) throws Exception {
+        MessageDigest md = MessageDigest.getInstance("MD5");
+        md.update(str.getBytes(charset));
+        byte[] result = md.digest();
+        StringBuilder sb = new StringBuilder(32);
+        for (int i = 0; i < result.length; i++) {
+            int val = result[i] & 0xff;
+            if (val <= 0xf) {
+                sb.append("0");
+            }
+            sb.append(Integer.toHexString(val));
+        }
+        return sb.toString().toLowerCase();
+    }
 }

+ 45 - 2
fs-service-system/src/main/java/com/fs/store/service/impl/FsUserServiceImpl.java

@@ -2,12 +2,15 @@ package com.fs.store.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.fs.common.constant.HttpStatus;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.ResponseResult;
 import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.exception.CustomException;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.company.cache.ICompanyTagCacheService;
@@ -16,7 +19,6 @@ import com.fs.company.domain.Company;
 import com.fs.company.domain.CompanyTag;
 import com.fs.company.domain.CompanyTagUser;
 import com.fs.company.domain.CompanyUser;
-import com.fs.company.dto.CompanyIdAndUserDTO;
 import com.fs.company.mapper.CompanyMapper;
 import com.fs.company.mapper.CompanyTagMapper;
 import com.fs.company.mapper.CompanyTagUserMapper;
@@ -31,6 +33,10 @@ import com.fs.course.vo.newfs.FsCourseAnalysisVO;
 import com.fs.course.vo.newfs.FsUserCourseVideoPageListVO;
 import com.fs.his.vo.OptionsVO;
 import com.fs.qw.cache.IQwExternalContactCacheService;
+import com.fs.qw.domain.QwExternalContact;
+import com.fs.qw.domain.QwSession;
+import com.fs.qw.mapper.QwExternalContactMapper;
+import com.fs.qw.mapper.QwSessionMapper;
 import com.fs.qw.param.QwFsUserParam;
 import com.fs.qw.vo.QwFsUserVO;
 import com.fs.store.domain.*;
@@ -52,7 +58,6 @@ import com.fs.store.vo.FSUserVO;
 import com.fs.store.vo.FsCompanyUserListQueryVO;
 import com.fs.store.vo.FsUserTuiVO;
 import com.fs.store.vo.h5.*;
-import com.github.pagehelper.PageInfo;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.http.util.Asserts;
@@ -126,6 +131,10 @@ public class FsUserServiceImpl implements IFsUserService
 
     @Autowired
     CompanyTagMapper companyTagMapper;
+    @Autowired
+    private QwSessionMapper qwSessionMapper;
+    @Autowired
+    private QwExternalContactMapper qwExternalContactMapper;
 
     /**
      * 查询用户
@@ -899,6 +908,40 @@ public class FsUserServiceImpl implements IFsUserService
         }
     }
 
+    /**
+     * 根据会话sessionId查询用户信息
+     * @param sessionId sessionId
+     * @return  fsUser
+     */
+    @Override
+    public FsUser getUserInfoBySessionId(Long sessionId) {
+        Wrapper<QwSession> qwSessionWrapper = Wrappers.<QwSession>lambdaQuery()
+        .select(QwSession.class, q -> !q.getColumn().equals("remark"))
+        .eq(QwSession::getSessionId, sessionId);
+        QwSession qwSession = qwSessionMapper.selectOne(qwSessionWrapper);
+        if (Objects.isNull(qwSession)) {
+            log.warn("企微会话不存在 sessionId:{}", sessionId);
+            throw new CustomException("会话不存在");
+        }
+
+        Wrapper<QwExternalContact> qwExternalContactWrapper = Wrappers.<QwExternalContact>lambdaQuery()
+        .select(QwExternalContact.class, q -> !q.getColumn().equals("remark"))
+        .eq(QwExternalContact::getId, qwSession.getQwExtId());
+        QwExternalContact qwExternalContact = qwExternalContactMapper.selectOne(qwExternalContactWrapper);
+        if (Objects.isNull(qwExternalContact)) {
+            log.warn("企微会话对应外部联系人不存在 qwExtId: {}", qwSession.getQwExtId());
+            throw new CustomException("外部联系人不存在");
+        }
+
+        FsUser fsUser = fsUserMapper.selectFsUserById(qwExternalContact.getFsUserId());
+        if (Objects.isNull(fsUser)) {
+            fsUser = new FsUser();
+            fsUser.setAvatar(qwExternalContact.getAvatar());
+            fsUser.setNickname(qwExternalContact.getName());
+        }
+        return fsUser;
+    }
+
     // 判断是否绑定了销售
     private static FsUserCompanyUser getFsUserCompanyUser(FsUserCourseBeMemberParam param, FsUser fsUser) {
         FsUserCompanyUser fsUserCompanyUser = new FsUserCompanyUser();