ソースを参照

分销用户同步

SK-20220114EWIL\Administrator 3 年 前
コミット
6932c1c24b

+ 195 - 0
suishenbang-sync/suishenbang-sync-common/src/main/java/com/dgtly/sync/service/AnalysisDiyCustomerComponent.java

@@ -61,6 +61,7 @@ public class AnalysisDiyCustomerComponent {
     private Long[] roleGuideIds;
     private Long[] roleCwIds;
     private Long[] roleCwDiyIds;
+    private Long[] roleFXDiyIds;  //3.4接口,同步分销用户
      /**
      * 获取并解析DIY经销商用户
      * 因为经销商用户并不涉及用信息更新等方面 所以只插入不更新
@@ -89,6 +90,11 @@ public class AnalysisDiyCustomerComponent {
             Long roleDiyId = Long.parseLong(configService.selectConfigByKey("libang.guide.roleid"));
             roleCwDiyIds = new Long[]{roleId, roleDiyId};
         }
+        if (roleFXDiyIds == null) {
+            Long roleId = Long.parseLong(configService.selectConfigByKey("libang.fx.roleid"));
+            roleFXDiyIds = new Long[]{roleId};
+        }
+
 
         List<SyncFailDetail> failDetails = new ArrayList<>();
         SyncLog syncLog = new SyncLog();
@@ -136,6 +142,52 @@ public class AnalysisDiyCustomerComponent {
             total+=gjson.getJSONArray("userlist").size();
         }
 
+
+        // 3.4、获取经销商分销业务员人员列表(分页)开始: ===================>
+        log.info("3.4、获取经销商分销业务员人员列表(分页)开始: ===================>");
+        String fxResellerJson ="";
+        try{
+            fxResellerJson = HttpUtils.sendSSLGet(customerAccessTokenUtil.getUrl(UrlType.RESELLER,1+""));
+        }catch (Exception e){
+            log.error("获取经销商分销业务员人员列表接口错误!");
+            customerAccessTokenUtil.reSetToken();
+            throw e;
+        }
+
+        JSONObject fxJson = JSONObject.parseObject(fxResellerJson);
+        Integer fxCount = fxJson.getInteger("count");
+        if(fxCount>100){
+            int co = 0;
+            if (fxCount%100 != 0){
+                co = (fxCount/100) +2;
+            }else{
+                co = (fxCount/100) +1;
+            }
+            for (int i = 1; i < co; i++) {
+                try {
+                    fxJson = JSONObject.parseObject(HttpUtils.sendSSLGet(customerAccessTokenUtil.getUrl(UrlType.RESELLER,i+"")));
+                } catch (Exception e) {
+                    log.error("循环获取经销商财务接口错误!第"+i+"页");
+                    customerAccessTokenUtil.reSetToken();
+                    throw e;
+                }
+                code = fxJson.getInteger("code");
+                if(code==0){
+                    success+=buildSysUserFx(fxJson,loginNameSet,6,failDetails,packageId,chainsMap);
+                    total+=fxJson.getJSONArray("userlist").size();
+                }
+            }
+        }else{
+            code = fxJson.getInteger("code");
+            if(code==0){
+                success+=buildSysUserFx(fxJson,loginNameSet,6,failDetails,packageId,chainsMap);
+                total+=fxJson.getJSONArray("userlist").size();
+            }
+        }
+        log.info("3.4、获取经销商分销业务员人员列表(分页)结束: <========================");
+        //3.4、获取经销商分销业务员人员列表(分页)结束: <========================
+
+
         String financeJson ="";
         try{
             financeJson = HttpUtils.sendSSLGet(customerAccessTokenUtil.getUrl(UrlType.FINANCE,1+""));
@@ -562,6 +614,149 @@ public class AnalysisDiyCustomerComponent {
         return count;
     }
 
+    /**
+     * 构建 插入分销 3.4 分销业务员人员 List
+     * @param json
+     * @param loginNameSet 排重用
+     * @param isManager
+     * @return
+     */
+    public Integer buildSysUserFx(JSONObject json, Set<String> loginNameSet, int isManager, List<SyncFailDetail> failDetails,String packageId, Map<String,Customers> cusMap){
+        JSONArray jsonArray = json.getJSONArray("userlist");
+        int count = 0;
+
+        for(int i =0;i<jsonArray.size();i++){
+            JSONObject jo = jsonArray.getJSONObject(i);
+
+            try {
+                String userNo = jo.getString("userNo");
+                String enable = jo.getString("enable");
+                String name = jo.getString("name");
+                String status = jo.getString("status");
+                Boolean isSync = jo.getBoolean("isSync");
+                Boolean isDelete = jo.getBoolean("isDelete");
+                String userid = jo.getString("userid");
+                String customerCode = jo.getString("depCode");
+                /*企业微信中成员启用状态。1表示启用的成员,0表示被禁用*/
+                /*if(enable==null||enable.trim().equals("0")){
+                    continue;
+                }
+                *//*企业微信中人员激活状态: 1=已激活,2=已禁用,4=未激活,5=退出企业。*//*
+                if(status==null || !status.trim().equals("1")){
+                    continue;
+                }
+                *//*人员信息是否已更新入企业微信。true:更新成功false:更新失败*//*
+                if(!isSync){
+                    continue;
+                }
+                *//*人员信息是否被标记删除true:删除,false:未删除*//*
+                if(isDelete){
+                    continue;
+                }*/
+                if(userid==null||userid.trim().equals("")){
+                    continue;
+                }
+                if (!loginNameSet.contains(userid)) {
+
+                    /** =============用户基本信息构建 start===============*/
+                    SysUser user = new SysUser();
+                    user.setCompanyId(1L);
+                    user.setDeptId(deptId);
+                    user.setLoginName(userid);
+                    user.setUserName(jo.getString("name"));
+                    user.setPhonenumber(jo.getString("mobile"));
+
+                    if (isManager == 6) {
+                        user.setRoleIds(roleFXDiyIds);
+                    } else {
+                        user.setRoleIds(roleIds);
+                    }
+                    user.setPassword(user.getLoginName());
+                    user.setSalt(ShiroSaltUtil.randomSalt());
+                    user.setPassword(EncryptPassWordClass.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
+
+
+                    /** =============用户基本信息构建 end===============*/
+
+
+                    /**======== 构建diy用户扩展信息表 start===============*/
+                    SysUserExt userExt = new SysUserExt();
+                    userExt.setSalesLevel("reseller_level");
+                    userExt.setCustomerCode(jo.getString("depCode"));
+                    userExt.setIsCustomerManager(isManager + "");
+                    userExt.setSapEmployeeId(userNo);
+
+                    userExt.setPostName("经销商分销业务员");
+                    String orgCode = jo.getString("depCode");
+                    if(cusMap.containsKey(orgCode)){
+                        Customers c = cusMap.get(orgCode);
+                        userExt.setOrgCode(c.getChainsCode());
+                        userExt.setOrgName(c.getChainsName());
+                    }else{
+                        userExt.setOrgCode(orgCode);
+                    }
+
+//                    /**======== 构建diy用户wx信息表 start===============*/
+//                    WxQyUser wxQyUser = new WxQyUser();
+//                    wxQyUser.setUserid(jo.getString("userid"));
+//                    wxQyUser.setMobile(jo.getString("mobile"));
+                    user.setSysUserExt(userExt);
+                    insertUserAndExt(user);
+                    count++;
+                    loginNameSet.add(userid);
+                }else{
+                    /*已经存在的,需要先清空职位,更新职位
+                    (首先查询当前用户职位,判断当前职位是否包含当前职位,不存在就更新,存在就不更新)*/
+
+                    SysUser user = sysUserService.selectUserByLoginName(userid);
+                    /*判断不是导购角色,更新经销商角色*/
+//                    if (isManager == 1 || isManager == 2 || isManager == 3) {
+//                        user.setRoleIds(roleIds);
+//                        sysUserService.updateUser(user);
+//                    }
+                    sysUserService.insertUserRole(user.getUserId(), roleIds[0]);
+
+                    if (!user.getSysUserExt().getIsCustomerManager().contains(isManager + "") ||
+                            !user.getSysUserExt().getCustomerCode().equals(customerCode) || !user.getSysUserExt().getOrgCode().equals(customerCode)) {
+                        if (!user.getSysUserExt().getIsCustomerManager().contains(isManager + "")) {
+                            /*更新职位*/
+                            user.getSysUserExt().setIsCustomerManager(user.getSysUserExt().getIsCustomerManager() + "," + isManager);
+                        }
+                        if (!user.getSysUserExt().getCustomerCode().equals(customerCode) || !user.getSysUserExt().getOrgCode().equals(customerCode)) {
+                            /*更新经销商code*/
+                            if (cusMap.containsKey(customerCode)) {
+                                Customers c = cusMap.get(customerCode);
+                                user.getSysUserExt().setOrgCode(c.getChainsCode());
+                                user.getSysUserExt().setOrgName(c.getChainsName());
+                            } else {
+                                user.getSysUserExt().setOrgCode(customerCode);
+                            }
+                        }
+                        log.info("updateSysUserExt" + customerCode);
+                        sysUserExtMapper.updateSysUserExt(user.getSysUserExt());
+                    }
+                    /*解决名称不一样的情况*/
+                    if(!user.getUserName().equals(name)){
+                        user.setUserName(name);
+                        sysUserService.updateUserInfo(user);
+                    }
+                }
+            }catch (Exception e){
+                log.error(e.getMessage());
+                e.printStackTrace();
+                SyncFailDetail syncFailDetail = new SyncFailDetail();
+                syncFailDetail.setPackageId(packageId);
+                syncFailDetail.setFailReason(e.getMessage());
+                syncFailDetail.setDataJson(jo.toJSONString());
+                syncFailDetail.setFailLevel("1");
+                syncFailDetail.setExceptionType(e.getClass().getSimpleName());
+                failDetails.add(syncFailDetail);
+            }
+        }
+
+        return count;
+    }
+
 
     @Transactional(rollbackFor = Exception.class)
     public Integer insertUserAndExt(SysUser user) {

+ 7 - 0
suishenbang-sync/suishenbang-sync-common/src/main/java/com/dgtly/sync/utils/CustomerAccessTokenUtil.java

@@ -18,6 +18,7 @@ public class CustomerAccessTokenUtil {
         MANAGER,
         STOREGUIDE,
         FINANCE,
+        RESELLER,
         BOSSLIST,
         MANAGERLIST,
         WAREHOUSE;
@@ -65,6 +66,8 @@ public class CustomerAccessTokenUtil {
     private String bossListUrl ;
     //厨卫 获取经理列表
     private String managerUrl ;
+    //获取经销商分销业务员人员列表(分页)
+    private String resellerUrl ;
 
     @PostConstruct
     public void init() {
@@ -75,6 +78,7 @@ public class CustomerAccessTokenUtil {
         warehouseListUrl =domain+"/wechatwork/diydt/v2/user/warehouse/list?page=%s&access_token=%s";
         bossListUrl =domain+"/wechatwork/chuwei/v1/user/boss/list?access_token=%s";
         managerUrl =domain+"/wechatwork/chuwei/v1/user/manager/list?access_token=%s";
+        resellerUrl =domain+"/api/diydt/v2/user/reseller/list?page=%s&access_token=%s";
     }
 
     public String getAccessToken(){
@@ -133,6 +137,9 @@ public class CustomerAccessTokenUtil {
             case FINANCE:
                 url = String.format(financeListUrl,pageNum,token);
                 break;
+            case RESELLER:
+                url = String.format(resellerUrl,pageNum,token);
+                break;
             case WAREHOUSE:
                 url = String.format(warehouseListUrl,pageNum,token);
                 break;