zyp 2 hafta önce
ebeveyn
işleme
6cad880707

+ 18 - 0
fs-company/src/main/java/com/fs/company/controller/CompanyUserController.java

@@ -9,6 +9,7 @@ import com.fs.common.core.domain.R;
 
 import com.fs.common.utils.DomainUtil;
 import com.fs.company.domain.*;
+import com.fs.company.param.CompanyUserAreaParam;
 import com.fs.company.param.CompanyUserQwParam;
 import com.fs.company.service.*;
 import com.fs.company.vo.CompanyUserQwListVO;
@@ -325,4 +326,21 @@ public class CompanyUserController extends BaseController
         return R.ok().put("data",list);
     }
 
+    /**
+     * 获取区域
+     */
+    @GetMapping("/getCitysAreaList")
+    public R getCitysAreaList(){
+        return R.ok().put("data",companyUserService.getCitysAreaList());
+    }
+
+    /**
+     * 批量修改 销售的所属区域(临时的)
+     */
+    @PostMapping("/updateCompanyUserAreaList")
+    public R updateCompanyUserAreaList(@RequestBody CompanyUserAreaParam param)
+    {
+        return companyUserService.updateCompanyUserAreaList(param);
+    }
+
 }

+ 168 - 53
fs-company/src/main/java/com/fs/qw/QwUserController.java

@@ -3,17 +3,23 @@ package com.fs.qw;
 import com.alibaba.fastjson.JSON;
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.RepeatSubmit;
+import com.fs.common.constant.Constants;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
+import com.fs.common.exception.ServiceException;
+import com.fs.common.exception.user.UserPasswordNotMatchException;
+import com.fs.common.utils.MessageUtils;
 import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.company.domain.Company;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.mapper.CompanyUserMapper;
 import com.fs.company.service.ICompanyUserService;
+import com.fs.core.manager.AsyncManager;
+import com.fs.core.manager.factory.AsyncFactory;
 import com.fs.fastGpt.domain.FastGptRole;
 import com.fs.fastGpt.mapper.FastGptRoleMapper;
 import com.fs.core.security.LoginUser;
@@ -38,10 +44,18 @@ import com.fs.voice.utils.StringUtil;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.authentication.BadCredentialsException;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
 import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * 企微用户Controller
@@ -78,6 +92,10 @@ public class QwUserController extends BaseController
 
     @Autowired
     private QwApiService qwApiService;
+
+    @Resource
+    private AuthenticationManager authenticationManager;
+
     /**
      * 查询企微员工列表
      */
@@ -95,8 +113,8 @@ public class QwUserController extends BaseController
 
 
     /**
-    * 直接授权key
-    */
+     * 直接授权key
+     */
     @PreAuthorize("@ss.hasPermi('qw:user:authAppKey')")
     @PostMapping("/authAppKey")
     public R authAppKey(@RequestBody QwUser param){
@@ -114,8 +132,8 @@ public class QwUserController extends BaseController
 
 
     /**
-    * 登录企业微信(发起登录)
-    */
+     * 登录企业微信(发起登录)
+     */
     @PreAuthorize("@ss.hasPermi('qw:user:login')")
     @PostMapping("/loginQwCode")
     public R loginQwCode(@RequestBody QwLoginParam loginParam){
@@ -140,8 +158,8 @@ public class QwUserController extends BaseController
     }
 
     /**
-    * 登录企业微信(传输验证信息)
-    */
+     * 登录企业微信(传输验证信息)
+     */
     @PreAuthorize("@ss.hasPermi('qw:user:login')")
     @PostMapping("/loginQwCodeMsg")
     public R loginQwCodeMsg(@RequestBody QwLoginParam loginParam){
@@ -167,8 +185,8 @@ public class QwUserController extends BaseController
 //    }
 //
     /**
-    * 查询企业微信登录状态
-    */
+     * 查询企业微信登录状态
+     */
     @PreAuthorize("@ss.hasPermi('qw:user:login')")
     @PostMapping("/getLoginQwStatus")
     public R getLoginQwStatus(@RequestBody QwLoginParam loginParam){
@@ -181,27 +199,62 @@ public class QwUserController extends BaseController
     }
 
     /**
-    * 企业微信员工账号 绑定 云主机
-    */
+     * 企业微信员工账号 绑定 云主机
+     */
     @PreAuthorize("@ss.hasPermi('qw:user:loginIp')")
+    @Log(title = "绑定 云主机", businessType = BusinessType.INSERT)
     @GetMapping("/qwBindCloudHost/{appKey}")
     public R qwBindCloudHost(@PathVariable("appKey") String appKey){
         return qwUserService.qwBindCloudHost(appKey);
     }
 
     /**
-    * 获取云主机的账密
+     * 获取云主机的账密
      *
-    */
+     */
     @PreAuthorize("@ss.hasPermi('qw:user:cloudAP')")
     @PostMapping("/selectCloudAP")
     public R selectCloudAP(@RequestBody QwCloudAPParam param) throws Exception {
         return qwUserService.selectCloudAP(param);
     }
+
+    /**
+     * 根据销售账号密码 获取 他的所有企业微信账号以及云主机和账号密码
+     */
+    @PostMapping("/selectCloudByCompany")
+    public R selectCloudByCompany(@RequestBody QwCloudIPByCompanyParam param) throws Exception {
+
+        // 用户验证
+        Authentication authentication = null;
+        try
+        {
+            // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
+            authentication = authenticationManager
+                    .authenticate(new UsernamePasswordAuthenticationToken(param.getCompanyAdmin(), param.getCompanyPassWord()));
+        }
+        catch (Exception e)
+        {
+            if (e instanceof BadCredentialsException)
+            {
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(0l,param.getCompanyAdmin(), Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
+                throw new UserPasswordNotMatchException();
+            }
+            else
+            {
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(0l,param.getCompanyAdmin(), Constants.LOGIN_FAIL, e.getMessage()));
+                throw new ServiceException(e.getMessage());
+            }
+        }
+        LoginUser loginUser=(LoginUser) authentication.getPrincipal();
+
+        return qwUserService.selectCloudByCompany(loginUser.getUser().getCompanyId(),loginUser.getUser().getUserId());
+    }
+
+
     /**
      * 企业微信员工账号 绑定 云主机
      */
-//    @PreAuthorize("@ss.hasPermi('qw:user:loginIp')")
+    @PreAuthorize("@ss.hasPermi('qw:user:bindIp')")
     @GetMapping("/qwBindCloudHostByIp/{appKey}/{IP}")
     public R qwBindCloudHostByIp(@PathVariable("appKey") String appKey,@PathVariable("IP") String IP){
         return qwUserService.qwBindCloudHostByIp(appKey,IP);
@@ -211,6 +264,7 @@ public class QwUserController extends BaseController
      * 企业微信员工账号 解除绑定 云主机
      */
     @PreAuthorize("@ss.hasPermi('qw:user:loginIpOut')")
+    @Log(title = "解除绑定 云主机", businessType = BusinessType.UPDATE)
     @GetMapping("/qwUnbindCloudHost/{appKey}")
     public R qwUnbindCloudHost(@PathVariable("appKey") String appKey){
         return qwUserService.qwUnbindCloudHost(appKey);
@@ -277,8 +331,8 @@ public class QwUserController extends BaseController
         return util.exportExcel(list, "企微用户数据");
     }
     /**
-    * 查询企微员工列表-用于员工管理绑定
-    */
+     * 查询企微员工列表-用于员工管理绑定
+     */
     @GetMapping("/getQwUserList")
     public R getQwUserList()
     {
@@ -318,8 +372,8 @@ public class QwUserController extends BaseController
         return AjaxResult.success(qwUserService.selectQwUserVOById(id));
     }
     /**
-    * 批量查询 企微用户详细信息
-    */
+     * 批量查询 企微用户详细信息
+     */
     @GetMapping(value = "/getInfo/{ids}")
     public AjaxResult getInfoByIds(@PathVariable("ids") Long[] ids)
     {
@@ -364,7 +418,22 @@ public class QwUserController extends BaseController
         }
         return R.ok();
     }
-
+    @RepeatSubmit
+    @PreAuthorize("@ss.hasPermi('qw:user:sync')")
+    @Log(title = "企微用户", businessType = BusinessType.INSERT)
+    @PostMapping("syncName/{corpId}")
+    public R syncName(@PathVariable String corpId)
+    {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        Company company = loginUser.getCompany();
+        List<String> strings = qwCompanyMapper.selectQwCompanyCorpIdListByCompanyId(company.getCompanyId());
+        for (String string : strings) {
+            if (string.equals(corpId)){
+                qwUserService.syncQwUserName(string);
+            }
+        }
+        return R.ok();
+    }
     /**
      * 绑定AI客服
      */
@@ -380,11 +449,11 @@ public class QwUserController extends BaseController
         FastGptRole role = fastGptRoleMapper.selectFastGptRoleByRoleId(param.getFastGptRoleId());
 
         if (role.getBindCorpId()!=null){
-           if (role.getBindCorpId().equals(param.getCorpId())){
-               qwUserService.updateQwUser(qwUser);
-           }else {
-               return R.error("该角色已绑定其他企业");
-           }
+            if (role.getBindCorpId().equals(param.getCorpId())){
+                qwUserService.updateQwUser(qwUser);
+            }else {
+                return R.error("该角色已绑定其他企业");
+            }
         }else {
             int i = qwUserService.updateQwUser(qwUser);
 
@@ -421,48 +490,83 @@ public class QwUserController extends BaseController
     @Log(title = "企微用户", businessType = BusinessType.UPDATE)
     @PutMapping("/bindQwUser")
     @RepeatSubmit
-    public R bindQwUser(@RequestBody QwUserBingParam qwUser)
+    public R bindQwUser(@RequestBody QwUserBingParam qwUserParam)
     {
-        CompanyUser companyUser = companyUserService.selectCompanyUserById(qwUser.getCompanyUserId());
+        CompanyUser companyUser = companyUserService.selectCompanyUserById(qwUserParam.getCompanyUserId());
+
+        String qwUserIdCompanyStr = companyUser.getQwUserId();
+        Set<String> qwUserIdCompanySet = new HashSet<>();
+        if (!StringUtil.strIsNullOrEmpty(qwUserIdCompanyStr)) {
+            String[] qwUserId = qwUserIdCompanyStr.split(",");
+            qwUserIdCompanySet = Arrays.stream(qwUserId)
+                    .filter(id -> !id.isEmpty())
+                    .collect(Collectors.toSet());
+        }
+
         if (companyUser!=null){
 
             //选择的企业微信账号为“”
-            if (StringUtil.strIsNullOrEmpty(qwUser.getId())&&qwUser.getCompanyUserId()!=null){
+            if (StringUtil.strIsNullOrEmpty(qwUserParam.getId())&&qwUserParam.getCompanyUserId()!=null){
                 //制空企业微信的绑定
-                qwUserService.updateUserByUserId(qwUser.getCompanyUserId());
+                qwUserService.updateUserByUserId(qwUserParam.getCompanyUserId());
 
                 //制空销售的绑定
                 companyUserMapper.updateCompanyUserByNullQwUserID(companyUser.getUserId());
 
             }else {
-                String id = qwUser.getId();
-                String[] split = id.split(",");
-                for (String s : split) {
-                    QwUser qu= qwUserService.selectQwUserById(Long.parseLong(s));
-                    if (qu.getCompanyUserId()!=null&&!qu.getCompanyUserId().equals(qwUser.getCompanyUserId())){
+                String idParam = qwUserParam.getId();
+                String[] splitParam = idParam.split(",");
+                Set<String> splitParamSet = Arrays.stream(splitParam)
+                        .filter(s -> !s.isEmpty())
+                        .collect(Collectors.toSet());
+
+                // 找出在 qwUserIdCompanySet 中存在但在 splitParamSet 中不存在的元素
+                Set<String> difference = new HashSet<>(qwUserIdCompanySet);
+                difference.removeAll(splitParamSet);
+
+                //制空绑定
+                if (!difference.isEmpty()){
+                    difference.forEach(id->{
+                        qwUserService.updateUnBindUserById(id);
+                    });
+
+                }
+
+
+                for (String paramId : splitParamSet) {
+                    QwUser qu= qwUserService.selectQwUserById(Long.parseLong(paramId));
+                    if (qu.getCompanyUserId()!=null&&!qu.getCompanyUserId().equals(qwUserParam.getCompanyUserId())){
                         return R.error( qu.getQwUserName()+"已经被其他人绑定,请先解绑");
                     }
-                }
-                //制空绑定
-                qwUserService.updateUserByUserId(qwUser.getCompanyUserId());
-                CompanyUser user = new CompanyUser();
-                user.setQwUserId(qwUser.getId());
-                user.setUserId(companyUser.getUserId());
-                user.setQwStatus(1);
-                companyUserMapper.updateCompanyUser(user);
-                for (String s : split) {
+
+
+                    CompanyUser user = new CompanyUser();
+                    user.setQwUserId(qwUserParam.getId());
+                    user.setUserId(companyUser.getUserId());
+                    user.setQwStatus(1);
+                    companyUserMapper.updateCompanyUser(user);
+
+
                     QwUser qw = new QwUser();
-                    qw.setCompanyUserId(qwUser.getCompanyUserId());
-                    qw.setId(Long.parseLong(s));
+                    qw.setCompanyUserId(qwUserParam.getCompanyUserId());
+                    qw.setId(Long.parseLong(paramId));
                     qw.setStatus(1);
                     qw.setCompanyId(companyUser.getCompanyId());
                     qwUserService.updateQwUser(qw);
-                    QwUser qu= qwUserService.selectQwUserById(Long.parseLong(s));
 
-                    qwExternalContactMapper.updateBindUserByQwUser(qu.getCorpId(),qu.getQwUserId(),companyUser.getCompanyId(),companyUser.getUserId());
+                }
+
+                //同步最后单独跑/先不异步了pp
+                for (String paramId : splitParamSet){
+
+                    //如果销售没绑定过,全刷,否则只同步新的增加的
+                    if (StringUtil.strIsNullOrEmpty(qwUserIdCompanyStr)){
+                        updateAndSyncQwUser(paramId, companyUser);
 
-                    //根据企微账号和公司id 同步企业微信账号(游标初始为空)
-                    syncMyQwExternalContact(qu,null);
+                    }
+                    else if (!StringUtil.strIsNullOrEmpty(qwUserIdCompanyStr) && !qwUserIdCompanySet.contains(paramId)){
+                        updateAndSyncQwUser(paramId, companyUser);
+                    }
                 }
             }
 
@@ -474,6 +578,17 @@ public class QwUserController extends BaseController
 
     }
 
+
+    private void updateAndSyncQwUser(String paramId, CompanyUser companyUser) {
+
+        QwUser qu= qwUserService.selectQwUserById(Long.parseLong(paramId));
+
+        qwExternalContactMapper.updateBindUserByQwUser(qu.getCorpId(),qu.getQwUserId(),companyUser.getCompanyId(),companyUser.getUserId());
+
+        //根据企微账号和公司id 同步企业微信账号(游标初始为空)
+        syncMyQwExternalContact(qu,null);
+    }
+
     /** 修改企微用户的欢迎语 */
     @PostMapping("/weclomeQwUser")
     public R weclomeQwUser(@RequestBody QwUser qwUser) throws Exception {
@@ -487,7 +602,7 @@ public class QwUserController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('qw:user:remove')")
     @Log(title = "企微用户", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
+    @DeleteMapping("/{ids}")
     public AjaxResult remove(@PathVariable Long[] ids)
     {
         return toAjax(qwUserService.deleteQwUserByIds(ids));
@@ -495,8 +610,8 @@ public class QwUserController extends BaseController
 
 
     /**
-    * 获取企业微信用户列表
-    */
+     * 获取企业微信用户列表
+     */
     @GetMapping("/qwUserList/{corpId}")
     public TableDataInfo qwUserList(@PathVariable String corpId)
     {
@@ -591,9 +706,9 @@ public class QwUserController extends BaseController
             return R.error("同步失败:"+list.getErrmsg());
         }
 
-       if (!StringUtil.strIsNullOrEmpty(list.getNext_cursor())){
-           syncMyQwExternalContact(qwUser,list.getNext_cursor());
-       }
+        if (!StringUtil.strIsNullOrEmpty(list.getNext_cursor())){
+            syncMyQwExternalContact(qwUser,list.getNext_cursor());
+        }
         return R.ok();
     }
 }

+ 10 - 0
fs-service-system/src/main/java/com/fs/company/domain/CompanyUser.java

@@ -141,6 +141,16 @@ public class CompanyUser extends BaseEntity
     /** 域名 */
     private String domain;
 
+    private String addressId;
+
+    public String getAddressId() {
+        return addressId;
+    }
+
+    public void setAddressId(String addressId) {
+        this.addressId = addressId;
+    }
+
     @NotBlank(message = "二级域名不能为空")
     @Pattern(regexp = "^(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,})|(?:\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}))$", message = "域名格式不正确")
     public String getDomain() {

+ 7 - 0
fs-service-system/src/main/java/com/fs/company/service/ICompanyUserService.java

@@ -1,11 +1,14 @@
 package com.fs.company.service;
 
+import com.fs.common.core.domain.R;
 import com.fs.company.domain.CompanyUser;
+import com.fs.company.param.CompanyUserAreaParam;
 import com.fs.company.param.CompanyUserQwParam;
 import com.fs.company.vo.CompanyQwUserByIdsVo;
 import com.fs.company.vo.CompanyUserQwListVO;
 import com.fs.company.vo.CompanyUserVO;
 import com.fs.company.vo.DocCompanyUserVO;
+import com.fs.his.vo.CitysAreaVO;
 import com.fs.qw.vo.CompanyUserQwVO;
 import com.fs.qw.vo.QwUserVO;
 import com.fs.his.vo.OptionsVO;;
@@ -151,4 +154,8 @@ public interface ICompanyUserService {
     List<CompanyUser> selectCompanySubUserList(Long companyUserId);
 
     List<CompanyUser> getAllUserListLimit(Long companyId, String keywords);
+
+    List<CitysAreaVO> getCitysAreaList();
+
+    R updateCompanyUserAreaList(CompanyUserAreaParam param);
 }

+ 22 - 0
fs-service-system/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java

@@ -1,17 +1,21 @@
 package com.fs.company.service.impl;
 
 import com.fs.common.annotation.DataScope;
+import com.fs.common.core.domain.R;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.company.domain.*;
 import com.fs.company.mapper.*;
+import com.fs.company.param.CompanyUserAreaParam;
 import com.fs.company.param.CompanyUserQwParam;
 import com.fs.company.param.CompanyVoiceCallerParam;
 import com.fs.company.service.ICompanyUserService;
 import com.fs.company.vo.*;
+import com.fs.his.vo.CitysAreaVO;
 import com.fs.qw.vo.CompanyUserQwVO;
 import com.fs.qw.vo.QwUserVO;
 import com.fs.his.vo.OptionsVO;;
+import com.fs.store.service.IFsCityService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -45,6 +49,9 @@ public class CompanyUserServiceImpl implements ICompanyUserService
     @Autowired
     private CompanyVoiceCallerMapper callerMapper;
 
+    @Autowired
+    public IFsCityService iFsCityService;
+
     /**
      * 查询物业公司管理员信息
      *
@@ -407,6 +414,21 @@ public class CompanyUserServiceImpl implements ICompanyUserService
         return companyUserMapper.getAllUserListLimit(companyId,keywords);
     }
 
+    @Override
+    public List<CitysAreaVO> getCitysAreaList() {
+        return iFsCityService.getCitysArea();
+    }
+
+    @Override
+    public R updateCompanyUserAreaList(CompanyUserAreaParam param) {
+        int i = companyUserMapper.updateCompanyUserAreaList(param);
+        if (i > 0) {
+            return R.ok("操作成功");
+        }else {
+            return R.error("操作失败");
+        }
+    }
+
     /**
      * 批量审核用户
      * @param userIds 用户ID集合

+ 16 - 0
fs-service-system/src/main/java/com/fs/his/vo/CitysAreaVO.java

@@ -0,0 +1,16 @@
+package com.fs.his.vo;
+
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+
+@Data
+public class CitysAreaVO {
+    /** 地址编码 */
+    @Excel(name = "地址编码")
+    private String cityId;
+
+    /** 地区名称 */
+    @Excel(name = "地区名称")
+    private String cityName;
+
+}

+ 28 - 0
fs-service-system/src/main/java/com/fs/qw/dto/QwUserByToolDTO.java

@@ -0,0 +1,28 @@
+package com.fs.qw.dto;
+
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+
+@Data
+public class QwUserByToolDTO {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 企微用户id */
+    @Excel(name = "企微用户id")
+    private String qwUserId;
+
+    /** 企微用户名 */
+    @Excel(name = "企微用户名")
+    private String qwUserName;
+
+    /**
+     * 地址
+     */
+    private  String loginCodeUrl;
+
+
+    private String apAdmin;
+
+    private String apPassword;
+}

+ 8 - 0
fs-service-system/src/main/java/com/fs/qw/mapper/QwUserMapper.java

@@ -2,6 +2,7 @@ package com.fs.qw.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fs.qw.domain.QwUser;
+import com.fs.qw.dto.QwUserByToolDTO;
 import com.fs.qw.param.QwFsServerBindParam;
 import com.fs.qw.param.QwUserListParam;
 import com.fs.qw.param.QwUserParam;
@@ -335,4 +336,11 @@ public interface QwUserMapper extends BaseMapper<QwUser>
 
     @Select("select company_id from qw_user where corp_id = #{corpId} and qw_user_id = #{qwUserid}")
     Long getQwUserCompanyId(@Param("corpId") String corpId, @Param("qwUserid") String qwUserid);
+
+    @Select("select qw_user_id,qw_user_name,login_code_url from qw_user" +
+            " where company_id=#{companyId} " +
+            "and company_user_id =#{userId} " +
+            "and is_del=0 " +
+            "and login_code_url is not null ")
+    public List<QwUserByToolDTO> selectQwUserListByTools(@Param("companyId") Long companyId , @Param("userId") Long userId);
 }

+ 10 - 0
fs-service-system/src/main/java/com/fs/qw/param/QwCloudIPByCompanyParam.java

@@ -0,0 +1,10 @@
+package com.fs.qw.param;
+
+
+import lombok.Data;
+
+@Data
+public class QwCloudIPByCompanyParam {
+    public String companyAdmin;
+    public String companyPassWord;
+}

+ 2 - 0
fs-service-system/src/main/java/com/fs/qw/service/IQwUserService.java

@@ -146,4 +146,6 @@ public interface IQwUserService
      * @return  QwUser
      */
     QwUser getByQwUserIdAndCorId(String qwUserId, String corpId);
+
+    R selectCloudByCompany(Long companyId, Long userId);
 }

+ 66 - 0
fs-service-system/src/main/java/com/fs/qw/service/impl/QwUserServiceImpl.java

@@ -10,6 +10,7 @@ import com.fs.his.config.FsSysConfig;
 import com.fs.his.utils.ConfigUtil;
 import com.fs.qw.domain.QwCompany;
 import com.fs.qw.domain.QwUser;
+import com.fs.qw.dto.QwUserByToolDTO;
 import com.fs.qw.mapper.QwUserMapper;
 import com.fs.qw.param.*;
 import com.fs.qw.result.QwFsServerBindResult;
@@ -885,6 +886,71 @@ public class QwUserServiceImpl implements IQwUserService
         return qwUserMapper.getQwUserCompanyId(corpId,qwUserid);
     }
 
+    @Override
+    public R selectCloudByCompany(Long companyId, Long userId) {
+        List<QwUserByToolDTO> qwUserByToolDTOS = qwUserMapper.selectQwUserListByTools(companyId, userId);
+        qwUserByToolDTOS.forEach(item->{
+            try {
+                R r = GetIPAdminAndPassWord(item.getLoginCodeUrl());
+                Object data = r.get("data");
+                String jsonString = JSON.toJSONString(data);
+                QwCloudAPVO apvo = JSON.parseObject(jsonString, QwCloudAPVO.class);
+
+                item.setApAdmin(apvo.getApAdmin());
+                item.setApPassword(apvo.getApPassword());
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        });
+
+        return R.ok().put("data",qwUserByToolDTOS);
+    }
+
+    public R GetIPAdminAndPassWord(String ipAddress ) throws Exception {
+
+        String bodyKey = HttpRequest.get("http://watch.ylrzcloud.com/prod-api/server/getKey?serverIp="+ipAddress)
+                .execute().body();
+
+//        String bodyKey = HttpRequest.get("http://192.168.10.155:8111/server/getKey?serverIp="+param.getIpAddress())
+//                .execute().body();
+
+        QwFsServerBindResult resultDecode = JSON.parseObject(bodyKey, QwFsServerBindResult.class);
+
+        PrivateKey privateKey = getPrivateKeyFromString(resultDecode.getMsg());
+
+        String signature = RSASignatureUtils.sign(ipAddress+ "ylrz321!#@1", privateKey );
+
+        QwCloudAPParamB paramB=new QwCloudAPParamB();
+        paramB.setServerIp(ipAddress);
+        paramB.setSignature(signature);
+
+        String body = HttpRequest.post("http://watch.ylrzcloud.com/prod-api/server/getAccount")
+                .body(JSON.toJSONString(paramB), "application/json;charset=UTF-8")
+                .execute().body();
+//        String body = HttpRequest.post("http://192.168.10.155:8111/server/getAccount")
+//                .body(JSON.toJSONString(paramB), "application/json;charset=UTF-8")
+//                .execute().body();
+
+        QwFsServerAPResult result = JSON.parseObject(body, QwFsServerAPResult.class);
+
+        if (result.getCode()==200){
+            //账号 解密
+            String apAdmin = RSAUtils.decrypt(result.getData().serverAccount, privateKey);
+
+            //密码
+            String apPassword = RSAUtils.decrypt(result.getData().serverPassword, privateKey);
+
+            QwCloudAPVO apvo=new QwCloudAPVO();
+            apvo.setApAdmin(apAdmin);
+            apvo.setApPassword(apPassword);
+
+            return  R.ok().put("data",apvo);
+
+        }else {
+            return  R.error("获取账号密码失败,请重试!!错误码:"+result.getMsg());
+        }
+    }
+
     /**
      *  url转临时文件filr
      */

+ 13 - 8
fs-service-system/src/main/java/com/fs/store/mapper/FsCityMapper.java

@@ -1,20 +1,22 @@
 package com.fs.store.mapper;
 
 import java.util.List;
+
+import com.fs.his.vo.CitysAreaVO;
 import com.fs.store.domain.FsCity;
 import org.apache.ibatis.annotations.Select;
 
 /**
  * 城市Mapper接口
- * 
+ *
  * @author fs
  * @date 2022-03-15
  */
-public interface FsCityMapper 
+public interface FsCityMapper
 {
     /**
      * 查询城市
-     * 
+     *
      * @param id 城市ID
      * @return 城市
      */
@@ -22,7 +24,7 @@ public interface FsCityMapper
 
     /**
      * 查询城市列表
-     * 
+     *
      * @param fsCity 城市
      * @return 城市集合
      */
@@ -30,7 +32,7 @@ public interface FsCityMapper
 
     /**
      * 新增城市
-     * 
+     *
      * @param fsCity 城市
      * @return 结果
      */
@@ -38,7 +40,7 @@ public interface FsCityMapper
 
     /**
      * 修改城市
-     * 
+     *
      * @param fsCity 城市
      * @return 结果
      */
@@ -46,7 +48,7 @@ public interface FsCityMapper
 
     /**
      * 删除城市
-     * 
+     *
      * @param id 城市ID
      * @return 结果
      */
@@ -54,11 +56,14 @@ public interface FsCityMapper
 
     /**
      * 批量删除城市
-     * 
+     *
      * @param ids 需要删除的数据ID
      * @return 结果
      */
     public int deleteFsCityByIds(Long[] ids);
     @Select("select * from fs_city where is_show=1")
     List<FsCity> selectFsCitys();
+
+    @Select("SELECT city_id,name as city_name FROM fs_city where parent_id=0 ")
+    List<CitysAreaVO> getCitysArea();
 }

+ 12 - 8
fs-service-system/src/main/java/com/fs/store/service/IFsCityService.java

@@ -1,19 +1,21 @@
 package com.fs.store.service;
 
 import java.util.List;
+
+import com.fs.his.vo.CitysAreaVO;
 import com.fs.store.domain.FsCity;
 
 /**
  * 城市Service接口
- * 
+ *
  * @author fs
  * @date 2022-03-15
  */
-public interface IFsCityService 
+public interface IFsCityService
 {
     /**
      * 查询城市
-     * 
+     *
      * @param id 城市ID
      * @return 城市
      */
@@ -21,7 +23,7 @@ public interface IFsCityService
 
     /**
      * 查询城市列表
-     * 
+     *
      * @param fsCity 城市
      * @return 城市集合
      */
@@ -29,7 +31,7 @@ public interface IFsCityService
 
     /**
      * 新增城市
-     * 
+     *
      * @param fsCity 城市
      * @return 结果
      */
@@ -37,7 +39,7 @@ public interface IFsCityService
 
     /**
      * 修改城市
-     * 
+     *
      * @param fsCity 城市
      * @return 结果
      */
@@ -45,7 +47,7 @@ public interface IFsCityService
 
     /**
      * 批量删除城市
-     * 
+     *
      * @param ids 需要删除的城市ID
      * @return 结果
      */
@@ -53,11 +55,13 @@ public interface IFsCityService
 
     /**
      * 删除城市信息
-     * 
+     *
      * @param id 城市ID
      * @return 结果
      */
     public int deleteFsCityById(Long id);
 
     List<FsCity> selectFsCitys();
+
+    List<CitysAreaVO> getCitysArea();
 }

+ 16 - 8
fs-service-system/src/main/java/com/fs/store/service/impl/FsCityServiceImpl.java

@@ -1,6 +1,9 @@
 package com.fs.store.service.impl;
 
+import java.util.Collections;
 import java.util.List;
+
+import com.fs.his.vo.CitysAreaVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
@@ -10,19 +13,19 @@ import com.fs.store.service.IFsCityService;
 
 /**
  * 城市Service业务层处理
- * 
+ *
  * @author fs
  * @date 2022-03-15
  */
 @Service
-public class FsCityServiceImpl implements IFsCityService 
+public class FsCityServiceImpl implements IFsCityService
 {
     @Autowired
     private FsCityMapper fsCityMapper;
 
     /**
      * 查询城市
-     * 
+     *
      * @param id 城市ID
      * @return 城市
      */
@@ -34,7 +37,7 @@ public class FsCityServiceImpl implements IFsCityService
 
     /**
      * 查询城市列表
-     * 
+     *
      * @param fsCity 城市
      * @return 城市
      */
@@ -46,7 +49,7 @@ public class FsCityServiceImpl implements IFsCityService
 
     /**
      * 新增城市
-     * 
+     *
      * @param fsCity 城市
      * @return 结果
      */
@@ -58,7 +61,7 @@ public class FsCityServiceImpl implements IFsCityService
 
     /**
      * 修改城市
-     * 
+     *
      * @param fsCity 城市
      * @return 结果
      */
@@ -70,7 +73,7 @@ public class FsCityServiceImpl implements IFsCityService
 
     /**
      * 批量删除城市
-     * 
+     *
      * @param ids 需要删除的城市ID
      * @return 结果
      */
@@ -82,7 +85,7 @@ public class FsCityServiceImpl implements IFsCityService
 
     /**
      * 删除城市信息
-     * 
+     *
      * @param id 城市ID
      * @return 结果
      */
@@ -97,4 +100,9 @@ public class FsCityServiceImpl implements IFsCityService
     public List<FsCity> selectFsCitys() {
         return fsCityMapper.selectFsCitys();
     }
+
+    @Override
+    public List<CitysAreaVO> getCitysArea() {
+        return fsCityMapper.getCitysArea();
+    }
 }

+ 8 - 1
fs-service-system/src/main/resources/mapper/company/CompanyUserMapper.xml

@@ -38,6 +38,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="qwStatus"    column="qw_status"    />
         <result property="domain"    column="domain"    />
         <result property="isAudit"    column="is_audit"    />
+        <result property="addressId"    column="address_id"    />
         <association property="dept"    column="dept_id" javaType="CompanyDept" resultMap="deptResult" />
         <collection  property="roles"   javaType="java.util.List"        resultMap="RoleResult" />
 
@@ -135,6 +136,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="qwStatus != null">qw_status,</if>
             <if test="domain != null">`domain`,</if>
             <if test="isAudit != null">`is_audit`,</if>
+            <if test="addressId != null">`address_id`,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="companyId != null">#{companyId},</if>
@@ -166,6 +168,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="qwStatus != null">#{qwStatus},</if>
             <if test="domain != null">#{domain},</if>
             <if test="isAudit != null">#{isAudit},</if>
+            <if test="addressId != null">#{addressId},</if>
          </trim>
     </insert>
 
@@ -200,6 +203,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="qwStatus != null">qw_status = #{qwStatus},</if>
             <if test="domain != null">`domain` = #{domain},</if>
             <if test="isAudit != null">`is_audit` = #{isAudit},</if>
+            <if test="addressId != null">`address_id` = #{addressId},</if>
         </trim>
         where user_id = #{userId}
     </update>
@@ -234,6 +238,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="qwStatus != null">qw_status = #{qwStatus},</if>
             <if test="domain != null">`domain` = #{domain},</if>
             <if test="isAudit != null">`is_audit` = #{isAudit},</if>
+            <if test="addressId != null">`address_id` = #{addressId},</if>
         </trim>
         where company_id = #{companyId}
     </update>
@@ -264,7 +269,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where u.user_name = #{userName}
     </select>
     <sql id="selectUserVo">
-        select u.user_id,u.company_id,u.qw_user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time,u.id_card, u.remark,u.user_type,u.open_id,u.qr_code_weixin,u.qr_code_wecom,u.jpush_id,u.domain,u.is_audit,
+        select u.user_id,u.company_id,u.qw_user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time,u.id_card, u.remark,u.user_type,u.open_id,u.qr_code_weixin,u.qr_code_wecom,u.jpush_id,u.domain,u.is_audit,u.address_id,
         d.dept_id, d.parent_id, d.dept_name, d.order_num, d.leader, d.status as dept_status,
         r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
         from company_user u
@@ -374,7 +379,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="remark"    column="remark"    />
         <result property="openId"    column="open_id"    />
         <result property="nowDayCustomerCount"    column="now_day_customer_count"    />
+        <result property="domain"    column="domain"    />
         <result property="isAudit"    column="is_audit"    />
+        <result property="addressId"    column="address_id"    />
         <association property="dept"    column="dept_id" javaType="CompanyDept" resultMap="deptResult" />
         <collection  property="roles"   javaType="java.util.List"        resultMap="RoleResult" />
         <collection property="posts" javaType="java.util.ArrayList" ofType="com.fs.company.domain.CompanyPost"