Explorar el Código

销售欢迎语加入APP分享好友绑定卡片IM、处理制单缓存过期问题、销售填写用户开方、地址存入缓存信息

yjwang hace 1 mes
padre
commit
c0577c370d
Se han modificado 21 ficheros con 1191 adiciones y 246 borrados
  1. 103 0
      fs-admin/src/main/java/com/fs/his/controller/FsImFriendshipController.java
  2. 26 0
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseServiceImpl.java
  3. 37 0
      fs-service/src/main/java/com/fs/his/domain/FsImFriendship.java
  4. 61 0
      fs-service/src/main/java/com/fs/his/mapper/FsImFriendshipMapper.java
  5. 14 0
      fs-service/src/main/java/com/fs/his/param/FsAddUserAndSaleFriendParam.java
  6. 69 0
      fs-service/src/main/java/com/fs/his/service/IFsImFriendshipService.java
  7. 9 0
      fs-service/src/main/java/com/fs/his/service/IFsUserService.java
  8. 160 0
      fs-service/src/main/java/com/fs/his/service/impl/FsImFriendshipServiceImpl.java
  9. 88 4
      fs-service/src/main/java/com/fs/his/service/impl/FsUserServiceImpl.java
  10. 234 240
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java
  11. 35 0
      fs-service/src/main/java/com/fs/hospital580/vo/CacheOpenInformationVo.java
  12. 19 0
      fs-service/src/main/java/com/fs/hospital580/vo/HealthQuizVo.java
  13. 7 0
      fs-service/src/main/java/com/fs/im/service/OpenIMService.java
  14. 38 0
      fs-service/src/main/java/com/fs/im/service/impl/OpenIMServiceImpl.java
  15. 30 1
      fs-service/src/main/java/com/fs/qw/service/impl/QwExternalContactServiceImpl.java
  16. 14 0
      fs-service/src/main/java/com/fs/qwApi/param/SendWelcomeMsgParam.java
  17. 82 0
      fs-service/src/main/resources/mapper/his/FsImFriendshipMapper.xml
  18. 63 0
      fs-user-app/src/main/java/com/fs/app/controller/Hospital580Controller.java
  19. 75 1
      fs-user-app/src/main/java/com/fs/app/controller/UserAddressController.java
  20. 18 0
      fs-user-app/src/main/java/com/fs/app/controller/UserController.java
  21. 9 0
      fs-user-app/src/main/java/com/fs/app/param/FsUserAddressAddEditParam.java

+ 103 - 0
fs-admin/src/main/java/com/fs/his/controller/FsImFriendshipController.java

@@ -0,0 +1,103 @@
+package com.fs.his.controller;
+
+import java.util.List;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.enums.BusinessType;
+import com.fs.his.domain.FsImFriendship;
+import com.fs.his.service.IFsImFriendshipService;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.common.core.page.TableDataInfo;
+
+/**
+ * im用户好友绑定关系Controller
+ * 
+ * @author fs
+ * @date 2026-01-27
+ */
+@RestController
+@RequestMapping("/his/friendship")
+public class FsImFriendshipController extends BaseController
+{
+    @Autowired
+    private IFsImFriendshipService fsImFriendshipService;
+
+    /**
+     * 查询im用户好友绑定关系列表
+     */
+    @PreAuthorize("@ss.hasPermi('his:friendship:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(FsImFriendship fsImFriendship)
+    {
+        startPage();
+        List<FsImFriendship> list = fsImFriendshipService.selectFsImFriendshipList(fsImFriendship);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出im用户好友绑定关系列表
+     */
+    @PreAuthorize("@ss.hasPermi('his:friendship:export')")
+    @Log(title = "im用户好友绑定关系", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(FsImFriendship fsImFriendship)
+    {
+        List<FsImFriendship> list = fsImFriendshipService.selectFsImFriendshipList(fsImFriendship);
+        ExcelUtil<FsImFriendship> util = new ExcelUtil<FsImFriendship>(FsImFriendship.class);
+        return util.exportExcel(list, "im用户好友绑定关系数据");
+    }
+
+    /**
+     * 获取im用户好友绑定关系详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('his:friendship:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return AjaxResult.success(fsImFriendshipService.selectFsImFriendshipById(id));
+    }
+
+    /**
+     * 新增im用户好友绑定关系
+     */
+    @PreAuthorize("@ss.hasPermi('his:friendship:add')")
+    @Log(title = "im用户好友绑定关系", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody FsImFriendship fsImFriendship)
+    {
+        return toAjax(fsImFriendshipService.insertFsImFriendship(fsImFriendship));
+    }
+
+    /**
+     * 修改im用户好友绑定关系
+     */
+    @PreAuthorize("@ss.hasPermi('his:friendship:edit')")
+    @Log(title = "im用户好友绑定关系", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody FsImFriendship fsImFriendship)
+    {
+        return toAjax(fsImFriendshipService.updateFsImFriendship(fsImFriendship));
+    }
+
+    /**
+     * 删除im用户好友绑定关系
+     */
+    @PreAuthorize("@ss.hasPermi('his:friendship:remove')")
+    @Log(title = "im用户好友绑定关系", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        return toAjax(fsImFriendshipService.deleteFsImFriendshipByIds(ids));
+    }
+}

+ 26 - 0
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseServiceImpl.java

@@ -502,6 +502,12 @@ public class FsUserCourseServiceImpl implements IFsUserCourseService
                 continue;
             }
 
+            //加入APP推送好友图片
+            FsUserCourse appCourse = appFriendCoverCourse();
+            if(appCourse != null){
+                fsUserCourses.add(appCourse);
+            }
+
             // 遍历每个课程,上传图片到对应企业的素材库
             for (FsUserCourse course : fsUserCourses) {
                 try {
@@ -1052,4 +1058,24 @@ public class FsUserCourseServiceImpl implements IFsUserCourseService
     public int minusBatchFavorite(List<Long> courseIds) {
         return fsUserCourseMapper.minusBatchFavorite(courseIds);
     }
+
+    /**
+     * APP好友封面图,兼容课程图片上传
+     * **/
+    public FsUserCourse appFriendCoverCourse(){
+        //获取redis
+        String json = configService.selectConfigByKey("course.config");
+        if(null == json || StringUtils.isBlank(json)){
+            return null;
+        }
+        //检测图片是否存在
+        CourseConfig config = JSONUtil.toBean(json, CourseConfig.class);
+        if(config.getCourseLogo() == null){
+            return null;
+        }
+        FsUserCourse fsUserCourse = new FsUserCourse();
+        fsUserCourse.setCourseId(-1L);
+        fsUserCourse.setImgUrl(config.getCompanyUserQRCode());
+        return fsUserCourse;
+    }
 }

+ 37 - 0
fs-service/src/main/java/com/fs/his/domain/FsImFriendship.java

@@ -0,0 +1,37 @@
+package com.fs.his.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+import com.fs.common.core.domain.BaseEntity;
+import lombok.EqualsAndHashCode;
+
+/**
+ * im用户好友绑定关系对象 fs_im_friendship
+ *
+ * @author fs
+ * @date 2026-01-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class FsImFriendship extends BaseEntity{
+
+    /** 主键ID */
+    @TableId(type = IdType.AUTO)
+    private String id;
+
+    /** 用户ID */
+    @Excel(name = "用户ID")
+    private Long userId;
+
+    /** 销售ID */
+    @Excel(name = "销售ID")
+    private Long companyUserId;
+
+    /** 0未绑定、1绑定 */
+    @Excel(name = "0未绑定、1绑定")
+    private Integer status;
+
+
+}

+ 61 - 0
fs-service/src/main/java/com/fs/his/mapper/FsImFriendshipMapper.java

@@ -0,0 +1,61 @@
+package com.fs.his.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.his.domain.FsImFriendship;
+
+/**
+ * im用户好友绑定关系Mapper接口
+ * 
+ * @author fs
+ * @date 2026-01-27
+ */
+public interface FsImFriendshipMapper extends BaseMapper<FsImFriendship>{
+    /**
+     * 查询im用户好友绑定关系
+     * 
+     * @param id im用户好友绑定关系主键
+     * @return im用户好友绑定关系
+     */
+    FsImFriendship selectFsImFriendshipById(String id);
+
+    /**
+     * 查询im用户好友绑定关系列表
+     * 
+     * @param fsImFriendship im用户好友绑定关系
+     * @return im用户好友绑定关系集合
+     */
+    List<FsImFriendship> selectFsImFriendshipList(FsImFriendship fsImFriendship);
+
+    /**
+     * 新增im用户好友绑定关系
+     * 
+     * @param fsImFriendship im用户好友绑定关系
+     * @return 结果
+     */
+    int insertFsImFriendship(FsImFriendship fsImFriendship);
+
+    /**
+     * 修改im用户好友绑定关系
+     * 
+     * @param fsImFriendship im用户好友绑定关系
+     * @return 结果
+     */
+    int updateFsImFriendship(FsImFriendship fsImFriendship);
+
+    /**
+     * 删除im用户好友绑定关系
+     * 
+     * @param id im用户好友绑定关系主键
+     * @return 结果
+     */
+    int deleteFsImFriendshipById(String id);
+
+    /**
+     * 批量删除im用户好友绑定关系
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    int deleteFsImFriendshipByIds(String[] ids);
+}

+ 14 - 0
fs-service/src/main/java/com/fs/his/param/FsAddUserAndSaleFriendParam.java

@@ -0,0 +1,14 @@
+package com.fs.his.param;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class FsAddUserAndSaleFriendParam implements Serializable {
+    //销售用户ID
+    private Long compayUserId;
+
+    //外部联系人ID
+    private Long externalUserId;
+}

+ 69 - 0
fs-service/src/main/java/com/fs/his/service/IFsImFriendshipService.java

@@ -0,0 +1,69 @@
+package com.fs.his.service;
+
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.his.domain.FsImFriendship;
+
+/**
+ * im用户好友绑定关系Service接口
+ * 
+ * @author fs
+ * @date 2026-01-27
+ */
+public interface IFsImFriendshipService extends IService<FsImFriendship>{
+    /**
+     * 查询im用户好友绑定关系
+     * 
+     * @param id im用户好友绑定关系主键
+     * @return im用户好友绑定关系
+     */
+    FsImFriendship selectFsImFriendshipById(String id);
+
+    /**
+     * 查询im用户好友绑定关系列表
+     * 
+     * @param fsImFriendship im用户好友绑定关系
+     * @return im用户好友绑定关系集合
+     */
+    List<FsImFriendship> selectFsImFriendshipList(FsImFriendship fsImFriendship);
+
+    /**
+     * 新增im用户好友绑定关系
+     * 
+     * @param fsImFriendship im用户好友绑定关系
+     * @return 结果
+     */
+    int insertFsImFriendship(FsImFriendship fsImFriendship);
+
+    /**
+     * 修改im用户好友绑定关系
+     * 
+     * @param fsImFriendship im用户好友绑定关系
+     * @return 结果
+     */
+    int updateFsImFriendship(FsImFriendship fsImFriendship);
+
+    /**
+     * 批量删除im用户好友绑定关系
+     * 
+     * @param ids 需要删除的im用户好友绑定关系主键集合
+     * @return 结果
+     */
+    int deleteFsImFriendshipByIds(String[] ids);
+
+    /**
+     * 删除im用户好友绑定关系信息
+     * 
+     * @param id im用户好友绑定关系主键
+     * @return 结果
+     */
+    int deleteFsImFriendshipById(String id);
+
+    /**
+     * 获取绑定关系信息
+     * @param ownerUserID
+     * @param friendUserID
+     * **/
+    void addBindInfo(String ownerUserID, String friendUserID);
+
+}

+ 9 - 0
fs-service/src/main/java/com/fs/his/service/IFsUserService.java

@@ -238,4 +238,13 @@ public interface IFsUserService
      * @return  PageInfo<FsUserPageListVO>
      * **/
     PageInfo<FsUserPageListVO> selectFsUserCompanyPageList(FsUserPageListParam param);
+
+    /**
+     * 添加用户和销售IM好友
+     * @param user 用户信息
+     * @param compayUserId 销售ID
+     * @param externalUserId 外部联系人ID
+     * @return R
+     * **/
+    R addUserAndSaleFriend(FsUser user,Long compayUserId, Long externalUserId);
 }

+ 160 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsImFriendshipServiceImpl.java

@@ -0,0 +1,160 @@
+package com.fs.his.service.impl;
+
+import java.util.Date;
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fs.common.utils.DateUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.fs.his.mapper.FsImFriendshipMapper;
+import com.fs.his.domain.FsImFriendship;
+import com.fs.his.service.IFsImFriendshipService;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * im用户好友绑定关系Service业务层处理
+ *
+ * @author fs
+ * @date 2026-01-27
+ */
+@Service
+@Slf4j
+public class FsImFriendshipServiceImpl extends ServiceImpl<FsImFriendshipMapper, FsImFriendship> implements IFsImFriendshipService {
+    private static final String USER_ID_PREFIX = "U";
+    private static final String COMPANY_ID_PREFIX = "C";
+
+
+    /**
+     * 查询im用户好友绑定关系
+     *
+     * @param id im用户好友绑定关系主键
+     * @return im用户好友绑定关系
+     */
+    @Override
+    public FsImFriendship selectFsImFriendshipById(String id) {
+        return baseMapper.selectFsImFriendshipById(id);
+    }
+
+    /**
+     * 查询im用户好友绑定关系列表
+     *
+     * @param fsImFriendship im用户好友绑定关系
+     * @return im用户好友绑定关系
+     */
+    @Override
+    public List<FsImFriendship> selectFsImFriendshipList(FsImFriendship fsImFriendship) {
+        return baseMapper.selectFsImFriendshipList(fsImFriendship);
+    }
+
+    /**
+     * 新增im用户好友绑定关系
+     *
+     * @param fsImFriendship im用户好友绑定关系
+     * @return 结果
+     */
+    @Override
+    public int insertFsImFriendship(FsImFriendship fsImFriendship) {
+        fsImFriendship.setCreateTime(DateUtils.getNowDate());
+        return baseMapper.insertFsImFriendship(fsImFriendship);
+    }
+
+    /**
+     * 修改im用户好友绑定关系
+     *
+     * @param fsImFriendship im用户好友绑定关系
+     * @return 结果
+     */
+    @Override
+    public int updateFsImFriendship(FsImFriendship fsImFriendship) {
+        fsImFriendship.setUpdateTime(DateUtils.getNowDate());
+        return baseMapper.updateFsImFriendship(fsImFriendship);
+    }
+
+    /**
+     * 批量删除im用户好友绑定关系
+     *
+     * @param ids 需要删除的im用户好友绑定关系主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFsImFriendshipByIds(String[] ids) {
+        return baseMapper.deleteFsImFriendshipByIds(ids);
+    }
+
+    /**
+     * 删除im用户好友绑定关系信息
+     *
+     * @param id im用户好友绑定关系主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFsImFriendshipById(String id) {
+        return baseMapper.deleteFsImFriendshipById(id);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void addBindInfo(String ownerUserID, String friendUserID) {
+        Long userId = splitId(ownerUserID, friendUserID, 1);
+        Long companyUserId = splitId(ownerUserID, friendUserID, 2);
+        //只记录销售和用户关系
+        if(userId != null && companyUserId != null){
+            log.info("添加绑定关系----销售《-》用户:{}", companyUserId + "--" + userId);
+            FsImFriendship imFriendship = baseMapper.selectOne(new LambdaQueryWrapper<FsImFriendship>()
+                    .select(FsImFriendship::getId, FsImFriendship::getStatus)
+                    .eq(FsImFriendship::getCompanyUserId, companyUserId)
+                    .eq(FsImFriendship::getUserId, userId).eq(FsImFriendship::getStatus, 1));
+            if (imFriendship == null) {
+                //插入数据
+                imFriendship = new FsImFriendship();
+                imFriendship.setUserId(userId);
+                imFriendship.setCompanyUserId(companyUserId);
+                imFriendship.setStatus(1);
+                imFriendship.setCreateTime(new Date());
+                baseMapper.insert(imFriendship);
+            } else if (imFriendship != null && imFriendship.getStatus() != null && imFriendship.getStatus() == 0) {
+                //更新数据
+                imFriendship.setStatus(1);
+                baseMapper.updateById(imFriendship);
+            }
+        }
+    }
+
+    /**
+     * 从用户ID字符串中提取数字ID
+     *
+     * @param ownerUserID  拥有者用户ID
+     * @param friendUserID 好友用户ID
+     * @param type         1:用户ID(U开头) 2:销售ID(C开头)
+     * @return 提取的数字ID,如果未找到返回null
+     */
+    public Long splitId(String ownerUserID, String friendUserID, Integer type) {
+        if (type == null || (type != 1 && type != 2)) {
+            throw new IllegalArgumentException("type参数必须为1或2");
+        }
+        String targetPrefix = (type == 1) ? USER_ID_PREFIX : COMPANY_ID_PREFIX;
+        if (ownerUserID != null && ownerUserID.startsWith(targetPrefix)) {
+            return extractNumberFromId(ownerUserID, targetPrefix);
+        }
+        if (friendUserID != null && friendUserID.startsWith(targetPrefix)) {
+            return extractNumberFromId(friendUserID, targetPrefix);
+        }
+        return null;
+    }
+
+    /**
+     * 从ID字符串中提取数字部分
+     */
+    private Long extractNumberFromId(String idWithPrefix, String prefix) {
+        try {
+            return Long.parseLong(idWithPrefix.substring(prefix.length()));
+        } catch (NumberFormatException e) {
+            throw new IllegalArgumentException("ID格式错误: " + idWithPrefix + " 的数字部分无效", e);
+        } catch (StringIndexOutOfBoundsException e) {
+            throw new IllegalArgumentException("ID格式错误: " + idWithPrefix + " 长度不足", e);
+        }
+    }
+}

+ 88 - 4
fs-service/src/main/java/com/fs/his/service/impl/FsUserServiceImpl.java

@@ -12,7 +12,9 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
+import cn.hutool.http.HttpRequest;
 import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -54,14 +56,14 @@ import com.fs.his.mapper.*;
 import com.fs.his.param.FindUserByParam;
 import com.fs.his.param.FsUserAddIntegralTemplateParam;
 import com.fs.his.param.FsUserParam;
-import com.fs.his.service.IFsUserIntegralLogsService;
-import com.fs.his.service.IFsUserProjectTagService;
-import com.fs.his.service.IFsUserWxService;
+import com.fs.his.service.*;
 import com.fs.his.vo.FsUserVO;
 import com.fs.his.vo.FsUserExportListVO;
 import com.fs.his.vo.FsUserFollowDoctorVO;
 import com.fs.his.vo.UserVo;
+import com.fs.im.config.IMConfig;
 import com.fs.im.config.ImTypeConfig;
+import com.fs.im.dto.OpenImResponseDTO;
 import com.fs.im.service.OpenIMService;
 import com.fs.hisStore.domain.FsStoreOrderScrm;
 import com.fs.hisStore.domain.FsUserBillScrm;
@@ -71,7 +73,9 @@ import com.fs.hisStore.mapper.FsStoreOrderScrmMapper;
 import com.fs.hisStore.service.IFsUserBillScrmService;
 import com.fs.hisStore.vo.FsCompanyUserListQueryVO;
 import com.fs.qw.cache.IQwExternalContactCacheService;
+import com.fs.qw.domain.QwExternalContact;
 import com.fs.qw.dto.FsUserTransferParamDTO;
+import com.fs.qw.mapper.QwExternalContactMapper;
 import com.fs.qw.param.QwFsUserParam;
 import com.fs.qw.vo.QwFsUserVO;
 import com.fs.store.domain.FsUserCourseCount;
@@ -90,12 +94,13 @@ import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.http.util.Asserts;
+import org.json.JSONArray;
+import org.json.JSONObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.fs.his.service.IFsUserService;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -181,6 +186,11 @@ public class FsUserServiceImpl implements IFsUserService {
     @Autowired
     private IFsUserWxService fsUserWxService;
 
+    @Autowired
+    private QwExternalContactMapper qwExternalContactMapper;
+
+    @Autowired
+    private IFsImFriendshipService fsImFriendshipService;
 
     /**
      * 查询用户
@@ -1396,4 +1406,78 @@ public class FsUserServiceImpl implements IFsUserService {
 
         return new PageInfo<>(fsUserPageListVOS);
     }
+
+    @Override
+    public R addUserAndSaleFriend(FsUser user, Long compayUserId, Long externalUserId) {
+        //获取IM的管理员Token
+        String adminToken = openIMService.getAdminToken();
+        String userId = "U" + user.getUserId().toString();
+        String compayUserIdValue = "C" + compayUserId.toString();
+
+        //验证销售是否存在
+        CompanyUser companyUser = companyUserMapper.selectCompanyUserById(compayUserId);
+        if (companyUser == null) {
+           return R.error("操作失败,销售不存在!");
+        }
+        //验证外部联系人是否绑定用户
+        QwExternalContact externalContact = qwExternalContactMapper.selectQwExternalContactById(externalUserId);
+        if(externalContact ==  null){
+            return R.error("操作失败,外部联系人不存在!");
+        }
+        if (StringUtils.isNotEmpty(adminToken)) {
+            //判断是否注册过
+            ArrayList<String> userIds = new ArrayList<>();
+            userIds.add(userId);
+            JSONObject requestBody = new JSONObject().put("checkUserIDs", userIds);
+            String body = HttpRequest.post(IMConfig.URL+"/user/account_check")
+                    .header("operationID", String.valueOf(System.currentTimeMillis()))
+                    .header("token", adminToken)
+                    .body(requestBody.toString())
+                    .execute()
+                    .body();
+            JSONObject jsonObject = new JSONObject(body);
+            JSONArray results = jsonObject.getJSONObject("data").getJSONArray("results");
+            if (results != null && results.length() > 0) {
+                JSONObject resultObj = results.getJSONObject(0);
+                int accountStatus = resultObj.getInt("accountStatus");
+                //未注册进行用户注册
+                if (accountStatus==0){
+                    ArrayList<Object> users = new ArrayList<>();
+                    HashMap<String, String> map = new HashMap<>();
+                    map.put("userID",userId);
+                    map.put("nickname",user.getNickName());
+                    map.put("faceURL",user.getAvatar());
+                    users.add(map);
+                    requestBody = new JSONObject();
+                    requestBody.put("users", users);
+                    String registerBody = HttpRequest.post(IMConfig.URL+"/user/user_register")
+                            .header("operationID", String.valueOf(System.currentTimeMillis()))
+                            .header("token", adminToken).body(requestBody.toString()).execute().body();
+                    OpenImResponseDTO registerDTO = JSON.parseObject(registerBody,OpenImResponseDTO.class);
+                    if(registerDTO.getErrCode() != 0){
+                        logger.error("用户注册失败------》:{}",compayUserId+"--"+JSON.toJSONString(registerDTO));
+                        return R.error("用户注册IM失败,请联系管理员!");
+                    }
+                }
+
+                //添加用户与销售的关系链路
+                List<String> friendUserIDs = Arrays.asList(userId);
+                OpenImResponseDTO openImResponseDTO = openIMService.importFriend(compayUserIdValue, friendUserIDs);
+                if(openImResponseDTO != null && openImResponseDTO.getErrCode() != 0){
+                    logger.error("系链路绑定失败------》:{}",compayUserId+"--"+JSON.toJSONString(openImResponseDTO));
+                    return R.error("操作失败,销售与好友关系链路绑定失败!");
+                }
+
+                if(externalContact.getFsUserId() == null){
+                    //绑定外部联系人
+                    externalContact.setFsUserId(user.getUserId());
+                    qwExternalContactMapper.updateQwExternalContact(externalContact);
+                }
+            }
+        }else {
+            logger.error("获取IMTOKEN失败------》:{}",compayUserId);
+            return R.error("获取IMTOKEN失败,请联系管理员!");
+        }
+        return R.ok();
+    }
 }

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 234 - 240
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java


+ 35 - 0
fs-service/src/main/java/com/fs/hospital580/vo/CacheOpenInformationVo.java

@@ -0,0 +1,35 @@
+package com.fs.hospital580.vo;
+
+import com.fs.his.domain.FsPatient;
+import com.fs.hospital580.vo.res.DiseaseQueryRes;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 缓存开放实体类
+ * **/
+@Data
+public class CacheOpenInformationVo implements Serializable {
+    //问诊人信息
+    private List<FsPatient> fsPatients;
+
+    //复诊凭证
+    private String imgList;
+
+    //确诊疾病类型
+    private List<DiseaseQueryRes> diseaseQueryResList;
+
+    //答题
+    private List<HealthQuizVo> healthQuizVoList;
+
+    //用户ID
+    private Long userId;
+
+    //销售ID
+    private Long companyUserId;
+
+    //订单KEY
+    private String orderKey;
+}

+ 19 - 0
fs-service/src/main/java/com/fs/hospital580/vo/HealthQuizVo.java

@@ -0,0 +1,19 @@
+package com.fs.hospital580.vo;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 健康答题
+ * **/
+@Data
+public class HealthQuizVo implements Serializable {
+    //题目ID
+    private Integer subjectId;
+
+    //答题
+    private String answer;
+
+    //题目
+    private String title;
+}

+ 7 - 0
fs-service/src/main/java/com/fs/im/service/OpenIMService.java

@@ -83,4 +83,11 @@ public interface OpenIMService {
 
     OpenImResponseDTO sendInquiryUtil(String sendID, String recvID, Integer contentType, String payloadData,String inquiryName,String type,Long companyId,Long companyUserId,String doctorId);
 
+    /**
+     * 删除关系链好友信息
+     * @param ownerUserID 需要删除好友的用户
+     * @param friendUserID  待删除的好友
+     * @return OpenImResponseDTO
+     * **/
+    OpenImResponseDTO deleteFriend(String ownerUserID,String friendUserID);
 }

+ 38 - 0
fs-service/src/main/java/com/fs/im/service/impl/OpenIMServiceImpl.java

@@ -32,6 +32,7 @@ import com.fs.his.dto.PayloadDTO;
 import com.fs.his.mapper.FsDoctorMapper;
 import com.fs.his.mapper.FsFollowMapper;
 import com.fs.his.mapper.FsUserMapper;
+import com.fs.his.service.IFsImFriendshipService;
 import com.fs.im.config.IMConfig;
 import com.fs.im.domain.FsImMsgSendDetail;
 import com.fs.im.domain.FsImMsgSendLog;
@@ -102,6 +103,9 @@ public class OpenIMServiceImpl implements OpenIMService {
     @Autowired
     private FsCourseWatchLogMapper fsCourseWatchLogMapper;
 
+    @Autowired
+    private IFsImFriendshipService fsImFriendshipService;
+
 
 //    @Value("${openIM.prefix}")
 //    private String openImPrefix;
@@ -877,8 +881,26 @@ public class OpenIMServiceImpl implements OpenIMService {
                 if (!inUser1Friends&&!inUser2Friends){
                     newFriendIds.add(friendUserID);
                     //friendUserIDs.remove(friendUserID);
+                } else {//存在单项关系则重新双向绑定
+                    boolean check = false;
+                    if(!inUser1Friends){
+                        //删除1
+                        deleteFriend(ownerUserID,friendUserID);
+                        check = true;
+                    }else if(!inUser2Friends){
+                        //删除2
+                        deleteFriend(friendUserID,ownerUserID);
+                        check = true;
+                    }
+
+                    if(check){
+                        newFriendIds.add(friendUserID);
+                    }
                 }
             }
+
+            //加入IM绑定信息
+            fsImFriendshipService.addBindInfo(friendUserID , ownerUserID);
         }
         if (newFriendIds.size()<=0){
             return null;
@@ -1575,4 +1597,20 @@ public class OpenIMServiceImpl implements OpenIMService {
             return null;
         }
     }
+
+    @Override
+    public OpenImResponseDTO deleteFriend(String ownerUserID, String friendUserID) {
+        String adminToken = getAdminToken();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("ownerUserID",ownerUserID);
+        jsonObject.put("friendUserID",friendUserID);
+        String body = HttpRequest.post(IMConfig.URL+"/friend/delete_friend")
+                .header("operationID", String.valueOf(System.currentTimeMillis()))
+                .header("token", adminToken)
+                .body(jsonObject.toString())
+                .execute()
+                .body();
+        OpenImResponseDTO responseDTO= JSONUtil.toBean(body,OpenImResponseDTO.class);
+        return responseDTO;
+    }
 }

+ 30 - 1
fs-service/src/main/java/com/fs/qw/service/impl/QwExternalContactServiceImpl.java

@@ -3877,8 +3877,37 @@ public class QwExternalContactServiceImpl extends ServiceImpl<QwExternalContactM
                 }  catch (Exception e) {
                     logger.error("欢迎语生成小程序消息失败:"+e.getMessage()+"|"+corpId+"|"+att.getMiniprogram().getCourseId());
                 }
+            }else if("appRegister".equals(att.getMsgtype())){
+                    try {
+                        //获取项目配置图片
+                        String mediaId =(String)redisCache.getCacheObject("miniprogram:"+corpId+":"+ -1);
+                        if(!StringUtil.strIsNullOrEmpty(mediaId)){
+                            Long companyUserId = qwUser.getCompanyUserId();
+                            SendWelcomeMsgParam.Attachment.MiniProgramAttachment param = new SendWelcomeMsgParam.Attachment.MiniProgramAttachment();
+                            att.setMsgtype("miniprogram");
+                            //获取企业微信公司APPID绑定的小程序
+                            if (!StringUtil.strIsNullOrEmpty(qwCompany.getMiniAppId())){
+                                param.setAppid(qwCompany.getMiniAppId());
+                            }else {
+                                logger.error("欢迎语:企业未配置小程序id:采用默认appid"+corpId);
+                            }
+                            param.setPage("pages_course/bindCourseFriends?compayUserId=" + companyUserId + "&externalUserId=" + qwExternalId + "&companyId=" + qwUser.getCompanyId());
+                            param.setPic_media_id(mediaId);//图片ID
+                            param.setTitle(att.getAppRegister().getTitle());//标题
+                            param.setCompayId(qwUser.getCompanyId());//公司id
+                            //外部联系人ID
+                            param.setExternalUserId(qwExternalId);
+                            //销售ID
+                            param.setCompanyUserId(companyUserId);
+                            att.setMiniprogram(param);
+                            att.setAppRegister(null);
+                        }else {
+                            logger.error("欢迎语发送失败APP:未获取到"+"|"+corpId);
+                        }
+                    }catch (Exception e){
+                        logger.error("欢迎语生成小程序消息失败:"+e.getMessage()+"|"+corpId+"|"+att.getMiniprogram().getCourseId());
+                    }
             }
-
         });
 
         return attachments;

+ 14 - 0
fs-service/src/main/java/com/fs/qwApi/param/SendWelcomeMsgParam.java

@@ -21,6 +21,8 @@ public class SendWelcomeMsgParam {
         private MiniProgramAttachment miniprogram; // 小程序附件详情
         private VideoAttachment video; // 视频附件详情
         private FileAttachment file; // 文件附件详情
+        private AppRegisterAttachment appRegister;// APP注册附件详情
+
         @Data
         // 内部类,用于图片附件
         public static class ImageAttachment {
@@ -47,6 +49,18 @@ public class SendWelcomeMsgParam {
             private String courseId; // 链接的课程id
             private String videoId; // 链接的课节id
             private Integer expiresDays; // 链接的过期时间
+            private Long compayId;//企业ID
+            private Long companyUserId;//销售ID
+            private Long externalUserId;//外部联系人Id
+        }
+
+        @Data
+        // 用于APP注册附件
+        public static class AppRegisterAttachment {
+            private String title; // APP注册好友标题
+            private String appid; // 小程序的App ID
+            private String page; // 注册页面路径
+            private String pic_media_id; // 小程序缩略图的媒体ID
         }
         @Data
         // 内部类,用于视频附件

+ 82 - 0
fs-service/src/main/resources/mapper/his/FsImFriendshipMapper.xml

@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fs.his.mapper.FsImFriendshipMapper">
+    
+    <resultMap type="FsImFriendship" id="FsImFriendshipResult">
+        <result property="id"    column="id"    />
+        <result property="userId"    column="user_id"    />
+        <result property="companyUserId"    column="company_user_id"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="status"    column="status"    />
+    </resultMap>
+
+    <sql id="selectFsImFriendshipVo">
+        select id, user_id, company_user_id, create_time, update_time, create_by, update_by, status from fs_im_friendship
+    </sql>
+
+    <select id="selectFsImFriendshipList" parameterType="FsImFriendship" resultMap="FsImFriendshipResult">
+        <include refid="selectFsImFriendshipVo"/>
+        <where>  
+            <if test="userId != null "> and user_id = #{userId}</if>
+            <if test="companyUserId != null "> and company_user_id = #{companyUserId}</if>
+            <if test="status != null "> and status = #{status}</if>
+        </where>
+    </select>
+    
+    <select id="selectFsImFriendshipById" parameterType="String" resultMap="FsImFriendshipResult">
+        <include refid="selectFsImFriendshipVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertFsImFriendship" parameterType="FsImFriendship" useGeneratedKeys="true" keyProperty="id">
+        insert into fs_im_friendship
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="userId != null">user_id,</if>
+            <if test="companyUserId != null">company_user_id,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="status != null">status,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="userId != null">#{userId},</if>
+            <if test="companyUserId != null">#{companyUserId},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="status != null">#{status},</if>
+         </trim>
+    </insert>
+
+    <update id="updateFsImFriendship" parameterType="FsImFriendship">
+        update fs_im_friendship
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="companyUserId != null">company_user_id = #{companyUserId},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="status != null">status = #{status},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteFsImFriendshipById" parameterType="String">
+        delete from fs_im_friendship where id = #{id}
+    </delete>
+
+    <delete id="deleteFsImFriendshipByIds" parameterType="String">
+        delete from fs_im_friendship where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 63 - 0
fs-user-app/src/main/java/com/fs/app/controller/Hospital580Controller.java

@@ -3,8 +3,11 @@ package com.fs.app.controller;
 import com.fs.app.annotation.Login;
 import com.fs.app.facade.Hospital580FacadeService;
 import com.fs.common.core.domain.PageResponse;
+import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.Result;
 import com.fs.common.core.page.PageRequest;
+import com.fs.common.utils.StringUtils;
+import com.fs.hospital580.vo.CacheOpenInformationVo;
 import com.fs.hospital580.vo.req.DiseaseReq;
 import com.fs.hospital580.vo.req.PrescriptionListReq;
 import com.fs.hospital580.vo.req.SaveOrderScrmReq;
@@ -18,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.concurrent.TimeUnit;
 
 
 @RestController
@@ -25,6 +29,7 @@ import javax.validation.Valid;
 @Slf4j
 @Api(tags = "处方相关接口")
 public class Hospital580Controller extends AppBaseController {
+    private static final String CACHE_KEY_PREFIX = "cacheSquareInformation";
 
     @Autowired
     private Hospital580FacadeService hospital580FacadeService;
@@ -59,4 +64,62 @@ public class Hospital580Controller extends AppBaseController {
     public Result<PrescriptionDetailRes> prescriptionDetail(@PathVariable("preId") Long preId,@RequestParam(value = "type", defaultValue = "0") Integer type) {
         return hospital580FacadeService.prescriptionDetail(getUserId(), preId,type);
     }
+
+    @ApiOperation(value = "销售制单分享-缓存对应订单客户开方信息")
+    @Login
+    @PostMapping("/cacheSquareInformation")
+    public R cacheOpenInformation(@RequestBody CacheOpenInformationVo vo){
+        if(StringUtils.isNull(vo.getOrderKey())){
+            return R.error("操作失败,关键信息不能为空!");
+        }
+
+        //缓存开放信息-6小时
+        String redisKey = buildCacheKey(vo.getOrderKey(), vo.getUserId(), vo.getCompanyUserId());
+        redisCache.setCacheObject(redisKey , vo , 6, TimeUnit.HOURS);
+        return R.ok();
+    }
+
+    @ApiOperation(value = "销售制单分享-获取缓存对应订单客户开方信息")
+    @Login
+    @GetMapping("/selectSquareInformation")
+    public R selectOpenInformation(
+            @RequestParam(value = "orderKey", required = false) String orderKey,
+            @RequestParam(value = "userId", required = false) Long userId,
+            @RequestParam(value = "companyUserId", required = false) Long companyUserId) {
+        log.debug("获取缓存开放信息: orderKey={}, userId={}, companyUserId={}",
+                orderKey, userId, companyUserId);
+        String redisKey = buildCacheKey(orderKey, userId, companyUserId);
+        CacheOpenInformationVo vo = redisCache.getCacheObject(redisKey);
+        if (vo == null) {
+            log.warn("缓存未找到: key={}", redisKey);
+            return R.error("未找到对应的开放信息");
+        }
+        return R.ok(vo);
+    }
+
+    /**
+     * 构建缓存key
+     */
+    private String buildCacheKey(String orderKey, Long userId, Long companyUserId) {
+        StringBuilder keyBuilder = new StringBuilder(CACHE_KEY_PREFIX);
+        keyBuilder.append(":");
+        if (userId != null) {
+            keyBuilder.append(userId);
+        } else {
+            keyBuilder.append("-");
+        }
+        keyBuilder.append(":");
+        if (companyUserId != null) {
+            keyBuilder.append(companyUserId);
+        } else {
+            keyBuilder.append("-");
+        }
+        keyBuilder.append(":");
+        if (StringUtils.isNotBlank(orderKey)) {
+            keyBuilder.append(orderKey.trim());
+        } else {
+            keyBuilder.append("-");
+        }
+        return keyBuilder.toString();
+    }
 }

+ 75 - 1
fs-user-app/src/main/java/com/fs/app/controller/UserAddressController.java

@@ -7,6 +7,7 @@ import com.fs.app.param.FsAddressParseParam;
 import com.fs.app.param.FsUserAddressAddEditParam;
 import com.fs.common.annotation.RepeatSubmit;
 import com.fs.common.core.domain.R;
+import com.fs.common.utils.StringUtils;
 import com.fs.his.domain.FsCity;
 import com.fs.his.domain.FsUserAddress;
 import com.fs.his.enums.FsUserIntegralLogTypeEnum;
@@ -18,12 +19,14 @@ import com.fs.his.service.IFsUserIntegralLogsService;
 import com.google.common.collect.Lists;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 import static com.fs.his.utils.PhoneUtil.decryptPhone;
 import static com.fs.his.utils.PhoneUtil.encryptPhone;
@@ -31,9 +34,10 @@ import static com.fs.his.utils.PhoneUtil.encryptPhone;
 
 @Api("地址接口")
 @RestController
+@Slf4j
 @RequestMapping(value="/app/userAddress")
 public class UserAddressController extends  AppBaseController {
-
+    private static final String CACHE_KEY_PREFIX = "cacheAddress";
 
     @Autowired
     private IFsUserAddressService addressService;
@@ -152,4 +156,74 @@ public class UserAddressController extends  AppBaseController {
         return R.ok().put("data",address);
     }
 
+
+    @Login
+    @ApiOperation("制单分享-销售制单缓存用户地址信息")
+    @PostMapping("/salesVoucherCacheAddress")
+    public R salesVoucherCacheAddress(@RequestBody FsUserAddressAddEditParam address){
+        if(address.getAddressId() == null || address.getAddressId() == 0){
+            return R.error("操作失败,地址信息不能为空!");
+        }
+
+        if(address.getOrderKey() != null){
+            return R.error("操作失败,订单唯一值不为空!");
+        }
+
+        //获取地址信息
+        FsUserAddress userAddress=addressService.selectFsUserAddressByAddressId(address.getAddressId());
+        if(userAddress == null){
+           return R.error("操作失败,用户地址不存在!");
+        }
+
+        //缓存地址信息-6小时
+        String redisKey = buildCacheKey(address.getOrderKey(), address.getUserId(), address.getCompanyUserId());
+        redisCache.setCacheObject(redisKey, userAddress , 6, TimeUnit.HOURS);
+        //后续根据实际需求是否写入到对应用户信息中去
+        return R.ok();
+    }
+
+    @Login
+    @ApiOperation("制单分享-获取缓存地址信息")
+    @PostMapping("/selectCacheAddress")
+    public R selectCacheAddress(@RequestParam(value = "orderKey", required = false) String orderKey,
+                                @RequestParam(value = "userId", required = false) Long userId,
+                                @RequestParam(value = "companyUserId", required = false) Long companyUserId){
+        if(StringUtils.isNull(orderKey)){
+            return R.error("操作失败,关键信息不能为空!");
+        }
+        log.debug("获取缓存开放信息: orderKey={}, userId={}, companyUserId={}",
+                orderKey, userId, companyUserId);
+        String redisKey = buildCacheKey(orderKey, userId, companyUserId);
+        FsUserAddress userAddress= redisCache.getCacheObject(redisKey);
+        if(userAddress == null){
+            return R.error("操作失败,用户地址不存在!");
+        }
+        return R.ok().put("data",userAddress);
+    }
+
+    /**
+     * 构建缓存key
+     */
+    private String buildCacheKey(String orderKey, Long userId, Long companyUserId) {
+        StringBuilder keyBuilder = new StringBuilder(CACHE_KEY_PREFIX);
+        keyBuilder.append(":");
+        if (userId != null) {
+            keyBuilder.append(userId);
+        } else {
+            keyBuilder.append("-");
+        }
+        keyBuilder.append(":");
+        if (companyUserId != null) {
+            keyBuilder.append(companyUserId);
+        } else {
+            keyBuilder.append("-");
+        }
+        keyBuilder.append(":");
+        if (StringUtils.isNotBlank(orderKey)) {
+            keyBuilder.append(orderKey.trim());
+        } else {
+            keyBuilder.append("-");
+        }
+        return keyBuilder.toString();
+    }
 }

+ 18 - 0
fs-user-app/src/main/java/com/fs/app/controller/UserController.java

@@ -21,6 +21,7 @@ import com.fs.his.domain.FsPackage;
 import com.fs.his.domain.FsUser;
 import com.fs.his.dto.FindUsersByDTO;
 import com.fs.his.param.FindUserByParam;
+import com.fs.his.param.FsAddUserAndSaleFriendParam;
 import com.fs.his.param.FsUserCouponUParam;
 import com.fs.his.param.FsUserEditPushParam;
 import com.fs.his.service.IFsDoctorService;
@@ -413,4 +414,21 @@ public class UserController extends  AppBaseController {
     public R removeUser(){
         return userService.removeUser(Long.parseLong(getUserId()));
     }
+
+
+    /**
+     * 添加用户和销售IM好友
+     * @param param 请求参数
+     * @return R
+     * **/
+    @Login
+    @ApiOperation("添加用户和销售IM好友")
+    @PostMapping("/addUserAndSaleFriend")
+    public R addUserAndSaleFriend(@RequestBody FsAddUserAndSaleFriendParam param){
+        FsUser user = userService.selectFsUserByUserId(Long.parseLong(getUserId()));
+        if(user == null){
+            return R.error("操作失败,未找到当前用户信息!");
+        }
+        return userService.addUserAndSaleFriend(user,param.getCompayUserId(),param.getExternalUserId());
+    }
 }

+ 9 - 0
fs-user-app/src/main/java/com/fs/app/param/FsUserAddressAddEditParam.java

@@ -58,5 +58,14 @@ public class FsUserAddressAddEditParam implements Serializable {
 
     private Integer isDefault;
 
+    //用户ID
+    private Long userId;
+
+    //销售ID
+    private Long companyUserId;
+
+    //订单KEY
+    private String orderKey;
+
 
 }

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio