Procházet zdrojové kódy

OKR业务代码提交

hcst_sunzhen před 5 roky
rodič
revize
3887d542cb

+ 0 - 2
src/main/java/cn/com/ctop/okr/controller/FeishuController.java

@@ -1,10 +1,8 @@
 package cn.com.ctop.okr.controller;
 
-import cn.com.ctop.okr.dto.FeishuUserInfoDto;
 import cn.com.ctop.okr.dto.UserInfoDto;
 import cn.com.ctop.okr.service.CorpUserInfoService;
 import cn.com.ctop.okr.vo.Result;
-import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;

+ 34 - 4
src/main/java/cn/com/ctop/okr/controller/OkrController.java

@@ -185,14 +185,15 @@ public class OkrController {
      */
     @ResponseBody
     @RequestMapping(value = "/getSyncUserListByMemberId")
-    public Result<List<UserInfoDto>> getSyncUserListByMemberId(HttpServletRequest request,
+    public Result<Map<String, Object>> getSyncUserListByMemberId(@RequestBody UserInfoDto dto,
+                                                           HttpServletRequest request,
                                                            HttpServletResponse response){
         logger.info("/okr/getSyncUserListByMemberId 方法开始");
-        Result<List<UserInfoDto>> result = new Result();
+        Result<Map<String, Object>> result = new Result();
 
         try {
-            List<UserInfoDto> userInfoList = okrService.getSyncUserListByMemberId();
-            result.setResult(userInfoList);
+            Map<String, Object> resultMap = okrService.getSyncUserListByMemberId(dto.getYear(), dto.getQuarter());
+            result.setResult(resultMap);
         }catch (Exception e){
             logger.error(e.getMessage());
             result.setSuccess(false);
@@ -550,4 +551,33 @@ public class OkrController {
         return result;
     }
 
+
+    /**
+     * 获取OKR所有年
+     * @param request
+     * @param response
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping(value = "/getObjectYear")
+    public Result getObjectYear(@RequestBody OkrDto dto,
+                                  HttpServletRequest request,
+                                  HttpServletResponse response){
+        logger.info("/okr/getObjectYear 方法开始");
+        Result<List<Integer>> result = new Result();
+
+        try {
+            List<Integer> yearList = okrService.getObjectYear();
+            result.setResult(yearList);
+        }catch (Exception e){
+            logger.error(e.getMessage());
+            result.setSuccess(false);
+            result.setMessage("error");
+        }finally{
+            logger.info("/okr/getObjectYear 方法结束");
+        }
+
+        return result;
+    }
+
 }

+ 2 - 0
src/main/java/cn/com/ctop/okr/dto/UserInfoDto.java

@@ -11,5 +11,7 @@ public class UserInfoDto {
     private String name;
     private String departName;
     private List<String> userIdList;
+    private Integer year;
+    private Integer quarter;
 
 }

+ 16 - 0
src/main/java/cn/com/ctop/okr/entity/QYWxDepartInfo.java

@@ -0,0 +1,16 @@
+package cn.com.ctop.okr.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("wx_depart_info")
+public class QYWxDepartInfo {
+    @TableId(value = "id",type = IdType.AUTO)
+    private Long id;
+    private String name;
+    private Long parentid;
+    private Long order;
+}

+ 22 - 0
src/main/java/cn/com/ctop/okr/entity/QYWxUserInfo.java

@@ -0,0 +1,22 @@
+package cn.com.ctop.okr.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("wx_user_info")
+public class QYWxUserInfo {
+    @TableId(value = "userid",type = IdType.INPUT)
+    private Long userid;
+    private String open_id;
+    private String name;
+    private String mobile;
+    private String avatar;
+    private String main_department;
+    private String thumb_avatar;
+    private String qrCode;
+    private String email;
+    private Integer status;
+}

+ 4 - 0
src/main/java/cn/com/ctop/okr/mapper/OkrObjectInfoMapper.java

@@ -9,9 +9,13 @@ import java.util.List;
 public interface OkrObjectInfoMapper extends BaseMapper<OkrObjectInfo> {
    List<OkrObjectInfo> getQuarterObject(@Param("userId")String userId, @Param("year")Integer year, @Param("quarter")Integer quarter);
 
+   List<OkrObjectInfo> getAllQuarterObject(@Param("userId")String userId, @Param("year")Integer year, @Param("quarter")Integer quarter);
+
    Long insertObjectInfo(@Param("object")OkrObjectInfo object);
 
    void updateObjectInfo(@Param("object")OkrObjectInfo object);
 
    void deleteObjectInfoById(@Param("object")OkrObjectInfo object);
+
+   List<Integer> getObjectYear();
 }

+ 15 - 0
src/main/java/cn/com/ctop/okr/mapper/QYWxDepartInfoMapper.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.okr.mapper;
+
+import cn.com.ctop.okr.dto.UserInfoDto;
+import cn.com.ctop.okr.entity.CorpUserInfo;
+import cn.com.ctop.okr.entity.QYWxDepartInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface QYWxDepartInfoMapper extends BaseMapper<CorpUserInfo> {
+
+    void insertWxDepartInfo(@Param("departInfo")QYWxDepartInfo departInfo);
+
+}

+ 21 - 0
src/main/java/cn/com/ctop/okr/mapper/xml/OkrObjectInfoMapper.xml

@@ -59,4 +59,25 @@
         id=#{object.id}
     </update>
 
+    <select id="getObjectYear" resultType="integer">
+        select
+        year
+        from
+        okr_object_info
+        group by year
+    </select>
+
+    <select id="getAllQuarterObject" resultType="cn.com.ctop.okr.entity.OkrObjectInfo">
+            select
+            *
+        from
+        okr_object_info
+        where
+        user_id != #{userId}
+        and
+        year = #{year}
+        and
+        quarter = #{quarter}
+    </select>
+
 </mapper>

+ 25 - 0
src/main/java/cn/com/ctop/okr/mapper/xml/QYWxDepartInfoMapper.xml

@@ -0,0 +1,25 @@
+<?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="cn.com.ctop.okr.mapper.QYWxDepartInfoMapper">
+
+    <insert id="insertWxDepartInfo">
+        insert into
+        wx_depart_info
+        (
+            id,
+            name,
+            parentid,
+            order
+        )
+        values
+        (
+            #{departInfo.id},
+            #{departInfo.name},
+            #{departInfo.parentid},
+            #{departInfo.order},
+        )
+
+    </insert>
+
+
+</mapper>

+ 15 - 0
src/main/java/cn/com/ctop/okr/qywx/constant/QYWxConstant.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.okr.qywx.constant;
+
+public class QYWxConstant {
+    public static final String QYWX_CORP_ID = "ww24b8a47826f5875f";
+    public static final Integer QYWX_AGENT_ID = 1000004;
+    public static final String QYWX_CORP_SECRET = "1YWGDtuZWrQDl6US3OPHG8_pvuNgP1TeUsOmfRk6GmQ";
+    public static final String QYWX_API_URL = "https://qyapi.weixin.qq.com";  //企业微信api域名
+    public static final String QYWX_DEPART_LIST = "/cgi-bin/department/list";  //获取部门列表
+    public static final String QYWX_DEPART_USER = "/cgi-bin/user/list";  //获取部门下员工详情
+    public static final String QYWX_GET_TOKEN = "/cgi-bin/gettoken";  //获取部门下员工详情
+    public static final String QYWX_USER_SIMPLELIST = "/cgi-bin/user/simplelist";  //获取部门下员工简单信息
+    public static final String QYWX_USER_LIST = "/cgi-bin/user/list";  //获取部门下员工详细信息
+    public static final String QYWX_CONVERT_TO_OPENID = "/cgi-bin/user/convert_to_openid";  //获取部门下员工详细信息
+
+}

+ 32 - 0
src/main/java/cn/com/ctop/okr/qywx/provider/AuthProvider.java

@@ -0,0 +1,32 @@
+package cn.com.ctop.okr.qywx.provider;
+
+import cn.com.ctop.okr.qywx.constant.QYWxConstant;
+import cn.com.ctop.okr.utils.HttpUtils;
+import com.alibaba.fastjson.JSONObject;
+
+import java.util.TreeMap;
+
+public class AuthProvider {
+
+    public static String getQYWXAccessToken() throws Exception{
+        TreeMap<String,Object> params = new TreeMap<>();
+        params.put("corpid", QYWxConstant.QYWX_CORP_ID);
+        params.put("corpsecret",QYWxConstant.QYWX_CORP_SECRET);
+        String resultStr = HttpUtils.httpGetRequest(QYWxConstant.QYWX_API_URL+QYWxConstant.QYWX_GET_TOKEN,null,params);
+        //System.out.println(resultStr);
+        JSONObject resultJson = JSONObject.parseObject(resultStr);
+        Integer errcode = resultJson.getInteger("errcode");
+        if(errcode == 0){
+            return resultJson.getString("access_token");
+        }else{
+            throw new Exception("access_token获取失败,result:" + resultStr);
+        }
+    }
+
+
+    public static void main(String[] args) throws Exception {
+        getQYWXAccessToken();
+    }
+
+
+}

+ 88 - 0
src/main/java/cn/com/ctop/okr/qywx/provider/DepartUserProvider.java

@@ -0,0 +1,88 @@
+package cn.com.ctop.okr.qywx.provider;
+
+import cn.com.ctop.okr.qywx.constant.QYWxConstant;
+import cn.com.ctop.okr.utils.HttpUtils;
+import com.alibaba.fastjson.JSONObject;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.TreeMap;
+
+public class DepartUserProvider {
+
+    /**
+     * 获取部门信息
+     * @param department_id
+     * @param token
+     * @return
+     * @throws Exception
+     */
+    public static JSONObject getCorpDepartList(String department_id, String token) throws Exception {
+        TreeMap<String,Object> params = new TreeMap<>();
+        params.put("access_token", token);
+
+        String resultStr = HttpUtils.httpGetRequest(QYWxConstant.QYWX_API_URL+QYWxConstant.QYWX_DEPART_LIST,null,params);
+        JSONObject resultJson = JSONObject.parseObject(resultStr);
+        System.out.println(resultJson);
+        return resultJson;
+    }
+
+
+    /**
+     * 获取部门下员工简单信息
+     * @param department_id
+     * @param token
+     * @return
+     * @throws Exception
+     */
+    public static JSONObject getUserSimpleInfoByDepartId(Integer department_id, String token) throws Exception {
+        TreeMap<String,Object> params = new TreeMap<>();
+        params.put("access_token", token);
+        params.put("department_id", department_id);
+        params.put("fetch_child", 1);
+
+        String resultStr = HttpUtils.httpGetRequest(QYWxConstant.QYWX_API_URL+QYWxConstant.QYWX_USER_SIMPLELIST,null,params);
+        JSONObject resultJson = JSONObject.parseObject(resultStr);
+        System.out.println(resultJson);
+        return resultJson;
+    }
+
+    /**
+     * 获取部门下员工详细信息
+     * @param department_id
+     * @param token
+     * @return
+     * @throws Exception
+     */
+    public static JSONObject getUserDetailInfoByDepartId(Integer department_id, String token) throws Exception {
+        TreeMap<String,Object> params = new TreeMap<>();
+        params.put("access_token", token);
+        params.put("department_id", department_id);
+        params.put("fetch_child", 1);
+
+        String resultStr = HttpUtils.httpGetRequest(QYWxConstant.QYWX_API_URL+QYWxConstant.QYWX_USER_LIST,null,params);
+        JSONObject resultJson = JSONObject.parseObject(resultStr);
+        System.out.println(resultJson);
+        return resultJson;
+    }
+
+
+    public static JSONObject convertUserIdToOpenId(String userid, String token) throws Exception{
+        Map<String, Object> params = new HashMap<>();
+        params.put("userid", userid);  //"qy017c8f2a6db0e90328f3ae7cc1"
+        String resultStr = HttpUtils.httpPostRequest(QYWxConstant.QYWX_API_URL+QYWxConstant.QYWX_CONVERT_TO_OPENID+"?access_token="+token, params, null);
+        JSONObject resultJson = JSONObject.parseObject(resultStr);
+        System.out.println(resultJson);
+        return resultJson;
+    }
+
+    public static void main(String[] args) throws Exception {
+        //String token = AuthProvider.getQYWXAccessToken();
+        //System.out.println(token);
+        //getCorpDepartList(null,"2qZIc_qzyZ7ZuTB4cdUAZbVDGfJCoEc6YRPyprp_KgaPMlEgi8sN5jIFCsNMy375QgnycQY8B-shloUEqFv08q9BvMppO-VC5wx89yrHFPugCD9j81-jfwxTf_PLYgLaaRY5EqDE3Yh-Ng4aOERNlOB_EgFcMSGwGja-vtKSgI5DbLrXhlVHfWbicWNdOJTeNfWcEV_WU9EsAivhadMhlQ");
+        //getUserDetailInfoByDepartId(2,"2qZIc_qzyZ7ZuTB4cdUAZbVDGfJCoEc6YRPyprp_KgaPMlEgi8sN5jIFCsNMy375QgnycQY8B-shloUEqFv08q9BvMppO-VC5wx89yrHFPugCD9j81-jfwxTf_PLYgLaaRY5EqDE3Yh-Ng4aOERNlOB_EgFcMSGwGja-vtKSgI5DbLrXhlVHfWbicWNdOJTeNfWcEV_WU9EsAivhadMhlQ");
+        convertUserIdToOpenId(null,"2qZIc_qzyZ7ZuTB4cdUAZbVDGfJCoEc6YRPyprp_KgaPMlEgi8sN5jIFCsNMy375QgnycQY8B-shloUEqFv08q9BvMppO-VC5wx89yrHFPugCD9j81-jfwxTf_PLYgLaaRY5EqDE3Yh-Ng4aOERNlOB_EgFcMSGwGja-vtKSgI5DbLrXhlVHfWbicWNdOJTeNfWcEV_WU9EsAivhadMhlQ");
+    }
+
+
+}

+ 3 - 1
src/main/java/cn/com/ctop/okr/service/OkrService.java

@@ -18,7 +18,7 @@ public interface OkrService{
 
     List<UserInfoDto> getMemberListByUserId(String name);
 
-    List<UserInfoDto> getSyncUserListByMemberId();
+    Map<String, Object> getSyncUserListByMemberId(Integer year, Integer quarter);
 
     void insertTaskInfo(OkrTaskInfo taskInfo);
 
@@ -43,4 +43,6 @@ public interface OkrService{
     void deleteTaskInfoById(OkrTaskInfo okrTaskInfo);
 
     void insertOkrKrInfo(OkrKrInfo krInfo);
+
+    List<Integer> getObjectYear();
 }

+ 20 - 0
src/main/java/cn/com/ctop/okr/service/QYWxService.java

@@ -0,0 +1,20 @@
+package cn.com.ctop.okr.service;
+
+import cn.com.ctop.okr.dto.UserInfoDto;
+import cn.com.ctop.okr.entity.CorpDepartInfo;
+import cn.com.ctop.okr.entity.CorpUserInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+public interface QYWxService extends IService<CorpUserInfo> {
+
+    //List<CorpDepartInfo> queryUserDeparts(String openId);
+    //
+    //CorpUserInfo getUserInfoByOpenId(String openId);
+    //
+    //void loadFeishuDepartAndUserInfo() throws Exception;
+    //
+    //List<UserInfoDto> getUserListByName(String name);
+
+}

+ 5 - 155
src/main/java/cn/com/ctop/okr/service/impl/CorpUserInfoServiceImpl.java

@@ -1,185 +1,35 @@
 package cn.com.ctop.okr.service.impl;
 
-import cn.com.ctop.okr.dto.FeishuUserInfoDto;
-import cn.com.ctop.okr.dto.UserInfoDto;
 import cn.com.ctop.okr.entity.CorpDepartInfo;
-import cn.com.ctop.okr.entity.CorpUserDepartMap;
 import cn.com.ctop.okr.entity.CorpUserInfo;
-import cn.com.ctop.okr.feishu.provider.DepartmentProvider;
 import cn.com.ctop.okr.mapper.CorpDepartInfoMapper;
 import cn.com.ctop.okr.mapper.CorpUserInfoMapper;
-import cn.com.ctop.okr.service.CorpUserInfoService;
-import cn.com.ctop.okr.utils.Check;
-import cn.com.ctop.okr.utils.DateUtils;
-import cn.com.ctop.okr.vo.UserDepartMap;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
+import cn.com.ctop.okr.service.QYWxService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
 import java.util.List;
 
 @Service
 @Slf4j
-public class CorpUserInfoServiceImpl extends ServiceImpl<CorpUserInfoMapper, CorpUserInfo> implements CorpUserInfoService {
+public class CorpUserInfoServiceImpl extends ServiceImpl<CorpUserInfoMapper, CorpUserInfo> implements QYWxService {
 
     @Autowired
     private CorpDepartInfoMapper corpDepartInfoMapper;
     @Autowired
     private CorpUserInfoMapper corpUserInfoMapper;
 
-    @Override
-    public List<CorpDepartInfo> queryUserDeparts(String openId){
-        return corpDepartInfoMapper.queryUserDeparts(openId);
-    }
-
-    /**
-     * 获取飞书公司部门和员工信息
-     * @throws Exception
-     */
-    @Override
-    public void loadFeishuDepartAndUserInfo() throws Exception {
-        log.info("获取飞书公司部门列表开始");
-        //同步飞书部门列表
-        loadFeishuDepartInfo("0", null);
-        log.info("获取飞书公司部门列表结束");
-        log.info("获取飞书公司员工信息开始");
-        loadFeishuUserInfoByDepartId();
-        log.info("获取飞书公司员工信息结束");
-    }
-
-    private void loadFeishuDepartInfo(String department_id, String page_token) throws Exception {
-        JSONObject resultJson = DepartmentProvider.getDepartSimpleList(department_id,null);
-        Integer code = resultJson.getInteger("code");
-        if(code != 0){
-            //log.error("部门列表返回不成功,返回为:{}",resultJson.getString("msg"));
-            throw new Exception("部门列表返回不成功,返回为:" + resultJson);
-        }
-
-        JSONObject dataJson = resultJson.getJSONObject("data");
-        if(Check.isNull(dataJson)){
-            throw new Exception("部门列表返回不成功,返回为:" + resultJson);
-        }
-        JSONArray departmentInfos = dataJson.getJSONArray("department_infos");
-        int size = departmentInfos.size();
-
-        for(int i=0; i<size; i++){
-            JSONObject departmentInfo = departmentInfos.getJSONObject(i);
-            CorpDepartInfo departInfo = new CorpDepartInfo();
-            departInfo.setDepartmentId(departmentInfo.getString("id"));
-            departInfo.setDepartmentName(departmentInfo.getString("name"));
-            departInfo.setOpenDepartmentId(departmentInfo.getString("parent_open_department_id"));
-            departInfo.setParentId(departmentInfo.getString("parent_id"));
-            departInfo.setParentOpenDepartmentId(departmentInfo.getString("parent_open_department_id"));
-
-            corpDepartInfoMapper.replaceInfoDepartInfo(departInfo);
-        }
-
-        Boolean hasMore = dataJson.getBoolean("has_more");
-        if(hasMore){
-            String pageToken = dataJson.getString("page_token");
-            loadFeishuDepartInfo(department_id, pageToken);
-        }
-    }
-
-    private void loadFeishuUserInfoByDepartId(){
-        List<String> departIdList = corpDepartInfoMapper.getCorpDepartIdList();
-        for (String departId:departIdList){
-            try {
-                loadFeishuUserInfo(departId,null);
-            }catch (Exception e){
-                log.error(e.getMessage());
-            }
-        }
-    }
+    //@Override
+    public List<CorpDepartInfo> loadQYWXxDepartInfo(String openId){
 
-    private void loadFeishuUserInfo(String department_id, String page_token) throws Exception {
-        JSONObject resultJson = DepartmentProvider.getDepartmentUserDetailList(department_id, page_token);
 
-        Integer code = resultJson.getInteger("code");
-        if(code != 0){
-            throw new Exception("飞书部门员工明细返回不成功,返回为:" + resultJson);
-        }
-
-        JSONObject dataJson = resultJson.getJSONObject("data");
-        if (Check.isNull(dataJson)){
-            throw new Exception("飞书部门员工明细返回不成功,返回为:" + resultJson);
-        }
-
-        JSONArray userInfoArray = dataJson.getJSONArray("user_infos");
-        int size = userInfoArray.size();
-        for(int i=0; i<size; i++){
-            JSONObject userJson = userInfoArray.getJSONObject(i);
-            //数据入库
-            CorpUserInfo user = new CorpUserInfo();
-            String openId = userJson.getString("open_id");
-
-            user.setAvatar72(userJson.getString("avatar_72"));
-            user.setAvatar240(userJson.getString("avatar_240"));
-            user.setAvatar640(userJson.getString("avatar_640"));
-            user.setAvatarUrl(userJson.getString("avatar_url"));
-            user.setCity(userJson.getString("city"));
-            user.setCountry(userJson.getString("country"));
-            user.setEmail(userJson.getString("email"));
-            user.setEmployeeId(userJson.getString("employee_id"));
-            user.setEmployeeNo(userJson.getString("employee_no"));
-            user.setEmployeeType(userJson.getInteger("employee_type"));
-            user.setEnName(userJson.getString("en_name"));
-            user.setGender(userJson.getInteger("gender"));
-            user.setIsTenantManager(userJson.getBoolean("is_tenant_manager")==true?1:0);
-            user.setLeaderEmployeeId(userJson.getString("leader_employee_id"));
-            user.setLeaderOpenId(userJson.getString("leader_open_id"));
-            user.setLeaderUnionId(userJson.getString("leader_union_id"));
-            user.setMobile(userJson.getString("mobile"));
-            user.setName(userJson.getString("name"));
-            user.setNamePy(userJson.getString("name_py"));
-            user.setOpenId(openId);
-            user.setUnionId(userJson.getString("union_id"));
-            user.setStatus(userJson.getInteger("status"));
-            user.setUserUpdateTime(DateUtils.timeStampToDate(userJson.getLong("update_time") * 1000));
-            user.setWorkStation(userJson.getString("work_station"));
-
-            corpUserInfoMapper.replaceInfoUserInfo(user);
-
-
-            //员工部门关联表入库
-            JSONArray departListArray = userJson.getJSONArray("departments");
-            corpDepartInfoMapper.deleteUserDepartMapByOpenId(openId);
-            List<CorpUserDepartMap> userDepartMapList = new ArrayList<>();
-            int departListArraySize = departListArray.size();
-            for(int j=0; j<departListArraySize; j++){
-                CorpUserDepartMap map = new CorpUserDepartMap();
-                String departmentId = departListArray.getString(j);
-                map.setDepartmentId(departmentId);
-                map.setOpenId(openId);
-                userDepartMapList.add(map);
-            }
-            corpDepartInfoMapper.insertUserDepartMapList(userDepartMapList);
-        }
-
-        Boolean hasMore = resultJson.getJSONObject("data").getBoolean("has_more");
-        if(hasMore){
-            String pageToken = resultJson.getJSONObject("data").getString("page_token");
-            loadFeishuUserInfo(department_id,pageToken);
-        }
 
+        return corpDepartInfoMapper.queryUserDeparts(openId);
     }
 
 
-    @Override
-    public CorpUserInfo getUserInfoByOpenId(String openId){
-        return corpUserInfoMapper.getUserInfoByOpenId(openId);
-    }
-
-    //根据名字模糊查询飞书用户
-    @Override
-    public List<UserInfoDto> getUserListByName(String name){
-        return corpUserInfoMapper.getUserListByName(name);
-    }
 
 
 

+ 43 - 4
src/main/java/cn/com/ctop/okr/service/impl/OkrServiceImpl.java

@@ -31,6 +31,8 @@ public class OkrServiceImpl implements OkrService {
     private OkrObjectInfoMapper okrObjectInfoMapper;
     @Autowired
     private OkrTaskInfoMapper okrTaskInfoMapper;
+    @Autowired
+    private CorpUserInfoMapper corpUserInfoMapper;
 
     @Override
     public Map<String, Object> getOkrInfo(String userId){
@@ -277,14 +279,45 @@ public class OkrServiceImpl implements OkrService {
 
     //获取本季度同步给我OKR的同事的列表
     @Override
-    public List<UserInfoDto> getSyncUserListByMemberId(){
+    public Map<String, Object> getSyncUserListByMemberId(Integer year, Integer quarter){
         //LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         String memberId = "ou_03c4826ae66623a53f2af456ff3661a1";
+        Integer isCurrentQuarter = null;
+        Map<String, Object> map = new HashMap<>();
+        //List<List<Map<String, Object>>> list = new ArrayList<>();
+        //List<UserInfoDto> userList = okrMemberMapper.getSyncUserListByMemberId(memberId, year, quarter);
+
+        Integer todayQuarter = DateUtils.getQuarter(new Date());
+        Integer todayYear = DateUtils.getYear(new Date());
+        if(year ==null || quarter ==null){
+            year = todayYear;
+            quarter = todayQuarter;
+        }
 
-        Integer quarter = DateUtils.getQuarter(new Date());
-        Integer year = DateUtils.getYear(new Date());
+        //如果不是当年当季度,返回O和KR的信息;是当季度,直接返回OKR四象限信息
+        if(todayYear.equals(year) && todayQuarter.equals(quarter)){
+            isCurrentQuarter = 1;
+        }else{
+            isCurrentQuarter = 0;
+        }
 
-        return okrMemberMapper.getSyncUserListByMemberId(memberId, year, quarter);
+        List<Map<String, Object>> mapList = new ArrayList<>();
+        List<OkrObjectInfo> OkrObjectInfoList = okrObjectInfoMapper.getAllQuarterObject(memberId, year, quarter);
+
+        for(OkrObjectInfo object:OkrObjectInfoList){
+            Map<String, Object> okrmap = new HashMap<>();
+            List<OkrKrInfo> krList = okrKrInfoMapper.getKrByObjectId(object.getId(), object.getUserId(), year, quarter);
+            CorpUserInfo userInfo = corpUserInfoMapper.getUserInfoByOpenId(object.getUserId());
+            okrmap.put("krList", krList);
+            okrmap.put("object", object);
+            okrmap.put("name",userInfo.getName());
+            mapList.add(okrmap);
+        }
+
+        map.put("isCurrentQuarter",isCurrentQuarter);
+        map.put("list",mapList);
+
+        return map;
     }
 
 
@@ -391,4 +424,10 @@ public class OkrServiceImpl implements OkrService {
 
     }
 
+    @Override
+    public List<Integer> getObjectYear(){
+        return okrObjectInfoMapper.getObjectYear();
+    }
+
+
 }

+ 183 - 0
src/main/java/cn/com/ctop/okr/service/impl/QYWxServiceImpl.java

@@ -0,0 +1,183 @@
+package cn.com.ctop.okr.service.impl;
+
+import cn.com.ctop.okr.dto.UserInfoDto;
+import cn.com.ctop.okr.entity.CorpDepartInfo;
+import cn.com.ctop.okr.entity.CorpUserDepartMap;
+import cn.com.ctop.okr.entity.CorpUserInfo;
+import cn.com.ctop.okr.feishu.provider.DepartmentProvider;
+import cn.com.ctop.okr.mapper.CorpDepartInfoMapper;
+import cn.com.ctop.okr.mapper.CorpUserInfoMapper;
+import cn.com.ctop.okr.service.CorpUserInfoService;
+import cn.com.ctop.okr.utils.Check;
+import cn.com.ctop.okr.utils.DateUtils;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+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 java.util.ArrayList;
+import java.util.List;
+
+@Service
+@Slf4j
+public class QYWxServiceImpl extends ServiceImpl<CorpUserInfoMapper, CorpUserInfo> implements CorpUserInfoService {
+
+    @Autowired
+    private CorpDepartInfoMapper corpDepartInfoMapper;
+    @Autowired
+    private CorpUserInfoMapper corpUserInfoMapper;
+
+    @Override
+    public List<CorpDepartInfo> queryUserDeparts(String openId){
+        return corpDepartInfoMapper.queryUserDeparts(openId);
+    }
+
+    /**
+     * 获取飞书公司部门和员工信息
+     * @throws Exception
+     */
+    @Override
+    public void loadFeishuDepartAndUserInfo() throws Exception {
+        log.info("获取飞书公司部门列表开始");
+        //同步飞书部门列表
+        loadFeishuDepartInfo("0", null);
+        log.info("获取飞书公司部门列表结束");
+        log.info("获取飞书公司员工信息开始");
+        loadFeishuUserInfoByDepartId();
+        log.info("获取飞书公司员工信息结束");
+    }
+
+    private void loadFeishuDepartInfo(String department_id, String page_token) throws Exception {
+        JSONObject resultJson = DepartmentProvider.getDepartSimpleList(department_id,null);
+        Integer code = resultJson.getInteger("code");
+        if(code != 0){
+            //log.error("部门列表返回不成功,返回为:{}",resultJson.getString("msg"));
+            throw new Exception("部门列表返回不成功,返回为:" + resultJson);
+        }
+
+        JSONObject dataJson = resultJson.getJSONObject("data");
+        if(Check.isNull(dataJson)){
+            throw new Exception("部门列表返回不成功,返回为:" + resultJson);
+        }
+        JSONArray departmentInfos = dataJson.getJSONArray("department_infos");
+        int size = departmentInfos.size();
+
+        for(int i=0; i<size; i++){
+            JSONObject departmentInfo = departmentInfos.getJSONObject(i);
+            CorpDepartInfo departInfo = new CorpDepartInfo();
+            departInfo.setDepartmentId(departmentInfo.getString("id"));
+            departInfo.setDepartmentName(departmentInfo.getString("name"));
+            departInfo.setOpenDepartmentId(departmentInfo.getString("parent_open_department_id"));
+            departInfo.setParentId(departmentInfo.getString("parent_id"));
+            departInfo.setParentOpenDepartmentId(departmentInfo.getString("parent_open_department_id"));
+
+            corpDepartInfoMapper.replaceInfoDepartInfo(departInfo);
+        }
+
+        Boolean hasMore = dataJson.getBoolean("has_more");
+        if(hasMore){
+            String pageToken = dataJson.getString("page_token");
+            loadFeishuDepartInfo(department_id, pageToken);
+        }
+    }
+
+    private void loadFeishuUserInfoByDepartId(){
+        List<String> departIdList = corpDepartInfoMapper.getCorpDepartIdList();
+        for (String departId:departIdList){
+            try {
+                loadFeishuUserInfo(departId,null);
+            }catch (Exception e){
+                log.error(e.getMessage());
+            }
+        }
+    }
+
+    private void loadFeishuUserInfo(String department_id, String page_token) throws Exception {
+        JSONObject resultJson = DepartmentProvider.getDepartmentUserDetailList(department_id, page_token);
+
+        Integer code = resultJson.getInteger("code");
+        if(code != 0){
+            throw new Exception("飞书部门员工明细返回不成功,返回为:" + resultJson);
+        }
+
+        JSONObject dataJson = resultJson.getJSONObject("data");
+        if (Check.isNull(dataJson)){
+            throw new Exception("飞书部门员工明细返回不成功,返回为:" + resultJson);
+        }
+
+        JSONArray userInfoArray = dataJson.getJSONArray("user_infos");
+        int size = userInfoArray.size();
+        for(int i=0; i<size; i++){
+            JSONObject userJson = userInfoArray.getJSONObject(i);
+            //数据入库
+            CorpUserInfo user = new CorpUserInfo();
+            String openId = userJson.getString("open_id");
+
+            user.setAvatar72(userJson.getString("avatar_72"));
+            user.setAvatar240(userJson.getString("avatar_240"));
+            user.setAvatar640(userJson.getString("avatar_640"));
+            user.setAvatarUrl(userJson.getString("avatar_url"));
+            user.setCity(userJson.getString("city"));
+            user.setCountry(userJson.getString("country"));
+            user.setEmail(userJson.getString("email"));
+            user.setEmployeeId(userJson.getString("employee_id"));
+            user.setEmployeeNo(userJson.getString("employee_no"));
+            user.setEmployeeType(userJson.getInteger("employee_type"));
+            user.setEnName(userJson.getString("en_name"));
+            user.setGender(userJson.getInteger("gender"));
+            user.setIsTenantManager(userJson.getBoolean("is_tenant_manager")==true?1:0);
+            user.setLeaderEmployeeId(userJson.getString("leader_employee_id"));
+            user.setLeaderOpenId(userJson.getString("leader_open_id"));
+            user.setLeaderUnionId(userJson.getString("leader_union_id"));
+            user.setMobile(userJson.getString("mobile"));
+            user.setName(userJson.getString("name"));
+            user.setNamePy(userJson.getString("name_py"));
+            user.setOpenId(openId);
+            user.setUnionId(userJson.getString("union_id"));
+            user.setStatus(userJson.getInteger("status"));
+            user.setUserUpdateTime(DateUtils.timeStampToDate(userJson.getLong("update_time") * 1000));
+            user.setWorkStation(userJson.getString("work_station"));
+
+            corpUserInfoMapper.replaceInfoUserInfo(user);
+
+
+            //员工部门关联表入库
+            JSONArray departListArray = userJson.getJSONArray("departments");
+            corpDepartInfoMapper.deleteUserDepartMapByOpenId(openId);
+            List<CorpUserDepartMap> userDepartMapList = new ArrayList<>();
+            int departListArraySize = departListArray.size();
+            for(int j=0; j<departListArraySize; j++){
+                CorpUserDepartMap map = new CorpUserDepartMap();
+                String departmentId = departListArray.getString(j);
+                map.setDepartmentId(departmentId);
+                map.setOpenId(openId);
+                userDepartMapList.add(map);
+            }
+            corpDepartInfoMapper.insertUserDepartMapList(userDepartMapList);
+        }
+
+        Boolean hasMore = resultJson.getJSONObject("data").getBoolean("has_more");
+        if(hasMore){
+            String pageToken = resultJson.getJSONObject("data").getString("page_token");
+            loadFeishuUserInfo(department_id,pageToken);
+        }
+
+    }
+
+
+    @Override
+    public CorpUserInfo getUserInfoByOpenId(String openId){
+        return corpUserInfoMapper.getUserInfoByOpenId(openId);
+    }
+
+    //根据名字模糊查询飞书用户
+    @Override
+    public List<UserInfoDto> getUserListByName(String name){
+        return corpUserInfoMapper.getUserListByName(name);
+    }
+
+
+
+}