yangkaixuan пре 1 месец
родитељ
комит
bd2cd0cc28

+ 4 - 0
takai-admin/src/main/resources/application.yml

@@ -225,6 +225,10 @@ jk:
   iamProfileUrl: http://esc.sribs.com.cn:8080/esc-sso/oauth2.0/profile
   #虚拟密码
   jkPsw: GybjcxhDe8XQtabXVP1A
+  #慧项管项目与项目用户
+  hxgProjectAndStaff: https://dpmp.jkec.info/api/mdata/organization/queryProjectAndUserHXG.api
+  #慧监管项目与项目用户
+  hjlProjectAndStaff: https://ocr.jkec.info:8095/ocr/supervisionData/getProjectsAndUsers
 
 # redisson 配置
 redisson:

+ 4 - 0
takai-common/src/main/java/com/takai/common/config/JkConfig.java

@@ -31,4 +31,8 @@ public class JkConfig {
     private String  iamProfileUrl;
 
     private String jkPsw;
+
+    private String hxgProjectAndStaff;
+
+    private String hjlProjectAndStaff;
 }

+ 15 - 1
takai-quartz/src/main/java/com/takai/quartz/task/JkTask.java

@@ -10,7 +10,7 @@ import java.io.IOException;
 
 /**
  * 建科统一用户平台信息定时任务调度
- * 
+ *
  * @author takai
  */
 @Slf4j
@@ -46,4 +46,18 @@ public class JkTask
         }
         log.info("===================获取建科统一用户平台信息Job执行结束==============");
     }
+
+    public void rySynchronizationProject()
+    {
+        log.info("===================获取项目项目成员同步Job开始执行==============");
+        try {
+            log.info("===================开始获取慧监理信息==============");
+            jkApiService.getHjlProjectAndStaff();
+            log.info("===================开始获取慧项管信息==============");
+            jkApiService.getHxgProjectAndStaff();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        log.info("===================获取项目项目成员同步Job执行结束==============");
+    }
 }

+ 1 - 1
takai-system/src/main/java/com/takai/system/domain/SysProjectStaff.java

@@ -48,7 +48,7 @@ public class SysProjectStaff extends BaseEntity
     private String mNo;
 
     /** 角色 */
-    private long roleId;
+    private Long roleId;
 
     @Excel(name = "系统角色")
     private String roleName;

+ 11 - 0
takai-system/src/main/java/com/takai/system/domain/vo/Member.java

@@ -0,0 +1,11 @@
+package com.takai.system.domain.vo;
+
+import lombok.Data; /**
+ * 项目成员实体类(匹配memberList子对象)
+ */
+@Data
+public class Member {
+    private String accountNo;
+    private String userName;
+    private String userSex;
+}

+ 23 - 0
takai-system/src/main/java/com/takai/system/domain/vo/ProjectWebApiBo.java

@@ -0,0 +1,23 @@
+package com.takai.system.domain.vo;
+
+import lombok.Data;
+import java.util.List;
+
+/**
+ * 项目实体类(匹配JSON外层对象)
+ */
+@Data // Lombok 自动生成 get/set/toString/equals/hashCode
+public class ProjectWebApiBo {
+    // 字段名与JSON键严格一致(大小写敏感)
+    private String proCode;
+    private String proName;
+    private String orgName;
+    private String proType;
+    private String orgCode;
+    private String projectManager;
+    private String projectManagerId;
+    private String projectManagerNo;
+    // 成员列表(JSON子数组)
+    private List<Member> memberList;
+}
+

+ 4 - 1
takai-system/src/main/java/com/takai/system/service/IJkApiService.java

@@ -11,7 +11,7 @@ import java.util.Map;
 
 /**
  * 高井 业务层
- * 
+ *
  * @author takai
  */
 public interface IJkApiService
@@ -37,4 +37,7 @@ public interface IJkApiService
      */
     Map<String, Object> getJkToken(String code, String redirectUrl) throws IOException;
 
+    void getHjlProjectAndStaff() throws IOException;
+
+    void getHxgProjectAndStaff() throws IOException;
 }

+ 112 - 4
takai-system/src/main/java/com/takai/system/service/impl/JkApiServiceImpl.java

@@ -9,7 +9,11 @@ import com.takai.common.enums.UserTypeEnum;
 import com.takai.common.utils.DateUtils;
 import com.takai.common.utils.SecurityUtils;
 import com.takai.common.utils.StringUtils;
-import com.takai.system.service.IJkApiService;
+import com.takai.system.domain.SysProject;
+import com.takai.system.domain.SysProjectStaff;
+import com.takai.system.domain.vo.Member;
+import com.takai.system.domain.vo.ProjectWebApiBo;
+import com.takai.system.service.*;
 import com.takai.common.annotation.DataSource;
 import com.takai.common.config.JkConfig;
 import com.takai.common.core.domain.entity.SysDept;
@@ -17,9 +21,6 @@ import com.takai.common.core.domain.entity.SysUser;
 import com.takai.common.core.redis.RedisCache;
 import com.takai.common.enums.DataSourceType;
 import com.takai.system.domain.SysPost;
-import com.takai.system.service.ISysDeptService;
-import com.takai.system.service.ISysPostService;
-import com.takai.system.service.ISysUserService;
 import lombok.extern.slf4j.Slf4j;
 import okhttp3.*;
 import org.slf4j.Logger;
@@ -62,6 +63,12 @@ public class JkApiServiceImpl implements IJkApiService {
     @Autowired
     JkConfig jkConfig;
 
+    @Autowired
+    private ISysProjectService projectService;
+
+    @Autowired
+    private ISysProjectStaffService projectStaffService;
+
     public static final String BEARER = "Bearer";
 
     public static final String PARAM_ST = "startTime";
@@ -106,6 +113,14 @@ public class JkApiServiceImpl implements IJkApiService {
 
     private static final OkHttpClient client = new OkHttpClient();
 
+    public static final String HXG_PROJECT_AND_STAFF = "用户";
+
+    public static final String HJL_PROJECT_AND_STAFF = "用户";
+
+    public static final String HXG = "f47ac10b58cc4372a5670e06f141669d";
+
+    public static final String HJL = "a34851c530ee0d07d1154beb47bb93dd";
+
 
 
     /**
@@ -216,6 +231,54 @@ public class JkApiServiceImpl implements IJkApiService {
         return postList;
     }
 
+    @Override
+    public void getHxgProjectAndStaff() throws IOException {
+        JSONArray dataList = getProjectApiData(jkConfig.getHxgProjectAndStaff(),HXG_PROJECT_AND_STAFF);
+        buildAndSaveSysProjectAndStaff(dataList,HXG);
+    }
+
+    @Override
+    public void getHjlProjectAndStaff() throws IOException {
+        JSONArray dataList = getProjectApiData(jkConfig.getHjlProjectAndStaff(),HJL_PROJECT_AND_STAFF);
+        buildAndSaveSysProjectAndStaff(dataList,HJL);
+
+    }
+
+    private void buildAndSaveSysProjectAndStaff(JSONArray jsonArray,String sourceFrom) {
+        try {
+            // ========== 核心解析:JSON数组 → List<Project> ==========
+            List<ProjectWebApiBo> projectList = JSON.parseArray(String.valueOf(jsonArray), ProjectWebApiBo.class);
+            // 遍历解析结果,验证数据
+            for (ProjectWebApiBo project : projectList) {
+                SysProject sysProject = new SysProject();
+                sysProject.setProjectPid(project.getProCode());
+                sysProject.setProjectName(project.getProName());
+                sysProject.setSourceFrom(sourceFrom);
+                SysProject dbProject = projectService.selectSysProjectByProjectPid(project.getProCode());
+                if(null == dbProject) {
+                    projectService.insertSysProject(sysProject);
+                }
+
+                for (Member member : project.getMemberList()) {
+                    SysProjectStaff sysProjectStaff = new SysProjectStaff();
+                    SysUser sysUser = sysUserService.selectUserByUserName(member.getAccountNo());
+                    sysProjectStaff.setProjectPid(project.getProCode());
+                    sysProjectStaff.setProjectName(project.getProName());
+                    sysProjectStaff.setUserId(null != sysUser ? sysUser.getUserId() : null);
+                    sysProjectStaff.setRoleId(null != sysUser ? sysUser.getRoleId() : null);
+                    SysProjectStaff dbStaff = projectStaffService.selectSysProjectStaff(sysProjectStaff);
+                    if(null == dbStaff) {
+                        projectStaffService.insertSysProjectStaff(sysProjectStaff);
+                    }
+
+                }
+            }
+        } catch (Exception e) {
+            System.err.println("FastJSON2 解析失败:" + e.getMessage());
+            e.printStackTrace();
+        }
+    }
+
     public List<JSONObject> getApiData(String url,String objectName) throws IOException {
         List<JSONObject> objectList = new ArrayList<>();
         int page = 1;
@@ -258,6 +321,34 @@ public class JkApiServiceImpl implements IJkApiService {
         return objectList;
     }
 
+    public JSONArray getProjectApiData(String url,String objectName) throws IOException {
+        JSONArray jsonArray = new JSONArray();
+        logger.info("获取建科"+objectName+"请求url:" + url);
+        Request request = buildPostRequest(url);
+        try {
+            Response response = client.newCall(request).execute();
+            String responseBody = response.body().string();
+            logger.info("获取建科项目"+objectName+"返回:" + responseBody);
+
+            if (!response.isSuccessful()) {
+                throw new IOException("获取建科项目"+objectName+"信息失败 " + responseBody);
+            }
+            JSONObject jsonObject =JSON.parseObject(responseBody);
+            logger.info("获取建科项目"+objectName+"返回信息:" + jsonObject.toJSONString());
+            //“0”为成功其余均为失败
+            String code = jsonObject.getString("code");
+            if (code == null) {
+                code = jsonObject.getString("statusCode");
+            }
+            if (CODE_SUCCESS.equals(code) ||"200".equals(code)) {
+                jsonArray = jsonObject.getJSONArray(DATA);
+            }
+        } catch (IOException e) {
+            throw new IOException("获取建科用项目"+objectName+"信息失败 ", e);
+        }
+        return jsonArray;
+    }
+
     private boolean doUserCallback(JSONObject dataObject) {
         String ids = "";
         JSONArray jsonArray = dataObject.getJSONArray(LIST);
@@ -368,6 +459,23 @@ public class JkApiServiceImpl implements IJkApiService {
         logger.info("请求body:{}", requestBodyJson);
         return request;
     }
+    private Request buildPostRequest(String url) {
+        Map<String, Object> requestBodyMap = new HashMap<>();
+        requestBodyMap.put("projectCode", "");
+        // 将 Map 转换为 JSON 字符串
+        String requestBodyJson = JSON.toJSONString(requestBodyMap);
+
+        // 构建请求体
+        RequestBody body = RequestBody.create(JSON_UTF8,requestBodyJson);
+        Request request = new Request.Builder()
+                .addHeader("accept", "*/*")
+                .addHeader("Content-Type", "application/json")
+                .post(body)
+                .url(url).build();
+        logger.info("请求head:{}", request.headers().toString());
+        logger.info("请求body:{}", requestBodyJson);
+        return request;
+    }
 
     private Request buildTokenRequest(String code, String redirectUrl) {
         String completeUrl = jkConfig.getIamTokenUrl() + "?" +PARAM_GRANT_TYPE + "=" + GRANT_TYPE_AC