|
@@ -0,0 +1,667 @@
|
|
|
+package com.muzhi.tianhe.service.impl;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.muzhi.tianhe.entity.Tianhe;
|
|
|
+import com.muzhi.tianhe.entity.User;
|
|
|
+import com.muzhi.tianhe.entity.vo.TianheDataVo;
|
|
|
+import com.muzhi.tianhe.entity.vo.TianheQuery;
|
|
|
+import com.muzhi.tianhe.mapper.TianheMapper;
|
|
|
+import com.muzhi.tianhe.service.TbService;
|
|
|
+import com.muzhi.tianhe.util.PublicUtil;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.scheduling.annotation.Async;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.util.StringUtils;
|
|
|
+
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+
|
|
|
+@Service
|
|
|
+@Slf4j
|
|
|
+public class TbServiceImpl extends ServiceImpl<TianheMapper, Tianhe> implements TbService{
|
|
|
+
|
|
|
+ //【云璞POC TB】企业ID:6034c885e71842e1e5bb5218
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private TbApiService tbApiService;
|
|
|
+ @Autowired
|
|
|
+ private TianheMapper tianheMapper;
|
|
|
+
|
|
|
+ //缓存用户信息
|
|
|
+ public static Map<String,User> USER_MAP=new HashMap<>();
|
|
|
+ //缓存项目里程碑
|
|
|
+ public static Map<String,String> TB_LICHENGBEI_MAP=new HashMap<>();
|
|
|
+ //缓存项目分组成员
|
|
|
+ public static Map<String,String> TB_PROJECT_GROUP_MAP=new HashMap<>();
|
|
|
+
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");
|
|
|
+ SimpleDateFormat defaultFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+
|
|
|
+ //获取项目任务类型
|
|
|
+ public JSONArray getXiangmuRenwuLeixing(String xmid){
|
|
|
+ JSONArray array=tbApiService.getTasksType(xmid);
|
|
|
+ JSONArray result = new JSONArray();
|
|
|
+ if (array != null){
|
|
|
+ for (int i = 0; i < array.size(); i++) {
|
|
|
+ Map map = new HashMap();
|
|
|
+ String name = array.getJSONObject(i).getString("name");
|
|
|
+ String id = array.getJSONObject(i).getString("id");
|
|
|
+ map.put("name",name);
|
|
|
+ map.put("id",id);
|
|
|
+ result.add(map);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取项目信息
|
|
|
+ @Override
|
|
|
+ public String getXiangmu(){
|
|
|
+ JSONArray array=tbApiService.getProjectList();
|
|
|
+ for (int ii = 0; ii < array.size(); ii++) {
|
|
|
+ String xmid = array.getJSONObject(ii).getString("id");
|
|
|
+ log.info("封装项目数据,项目编号:[{}]进度:[{}/{}]",xmid,ii+1,array.size());
|
|
|
+ syncData(xmid);
|
|
|
+ }
|
|
|
+ return "同步完成";
|
|
|
+ }
|
|
|
+
|
|
|
+ // 单个项目同步
|
|
|
+ private void syncData(String xmid){
|
|
|
+ /**数据库表*/
|
|
|
+ JSONArray array = getXiangmuRenwuLeixing(xmid);
|
|
|
+ List<String> list=new ArrayList<>();
|
|
|
+ for (int j = 0; j < array.size(); j++) {
|
|
|
+ JSONObject jsonObject1 = array.getJSONObject(j);
|
|
|
+ String renwuleixingName = jsonObject1.getString("name");
|
|
|
+ if (renwuleixingName.equals("周报")){
|
|
|
+ // 获取属于【周报】的任务
|
|
|
+ list.add(jsonObject1.getString("id"));
|
|
|
+ }else if (renwuleixingName.equals("里程碑")){
|
|
|
+ // 获取项目里程碑
|
|
|
+ getLichengbei(jsonObject1.getString("id"),xmid);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
+ log.info("封装周报类型项目数据,项目编号:[{}]进度:[{}/{}]",list.get(i),i+1,list.size());
|
|
|
+ getZhoubao(list.get(i),xmid);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取项目里程碑信息
|
|
|
+ private void getLichengbei(String rwlxid,String xmid){
|
|
|
+ JSONArray array=tbApiService.getTasksByType(xmid,rwlxid);
|
|
|
+ if (array != null){
|
|
|
+ int uniqueId=1000000;
|
|
|
+ String content="";
|
|
|
+ for (int i = 0; i < array.size(); i++) {
|
|
|
+ JSONObject jsonObject1 = array.getJSONObject(i);
|
|
|
+ if(!jsonObject1.getBoolean("isDone")){
|
|
|
+ // 未完成的里程碑
|
|
|
+ if(uniqueId>jsonObject1.getIntValue("uniqueId")){
|
|
|
+ uniqueId=jsonObject1.getIntValue("uniqueId");
|
|
|
+ content=array.getJSONObject(i).getString("content");
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ // 已完成的里程碑
|
|
|
+ TB_LICHENGBEI_MAP.put(xmid,content);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ TB_LICHENGBEI_MAP.put(xmid,content);// 如果全部未完成,显示第一个里程碑
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private String timeFormat(String startDate){
|
|
|
+ String result = "";
|
|
|
+ Date rwStateTime = null;
|
|
|
+ long timeState = 0;
|
|
|
+ if (startDate == null) {
|
|
|
+ System.out.println("该项目没有获取到任务开始时间!");
|
|
|
+ } else {
|
|
|
+ startDate = startDate.replace("Z", " UTC");
|
|
|
+ try {
|
|
|
+ rwStateTime = format.parse(startDate);
|
|
|
+ result = defaultFormat.format(rwStateTime);
|
|
|
+ timeState = rwStateTime.getTime();
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 同步项目下所有周报任务
|
|
|
+ private void getZhoubao(String rwlxid,String projectId){
|
|
|
+ Tianhe tianhe = new Tianhe();
|
|
|
+ JSONArray tasks=tbApiService.getTasksByType(projectId,rwlxid);
|
|
|
+ if (tasks != null){
|
|
|
+ //里程碑
|
|
|
+ tianhe.setLichengbei(TB_LICHENGBEI_MAP.get(projectId));
|
|
|
+ //项目类别
|
|
|
+ tianhe.setXiangmuleibie(getProjectCustVule(projectId,"65bb984c7bbdd92f48e7264a"));
|
|
|
+ tianhe.setXiangmubianhao(projectId);
|
|
|
+ tianhe.setXiangmuzhuangtai(getProjectState(projectId));
|
|
|
+ JSONArray projects=tbApiService.getProjectInfo(projectId);
|
|
|
+ JSONObject project = projects.getJSONObject(0);
|
|
|
+// JSONArray customfields = project.getJSONArray("customfields");
|
|
|
+ // 项目名称
|
|
|
+ tianhe.setXiangmumingcheng(project.getString("name"));
|
|
|
+ //项目负责人
|
|
|
+// List<User> xmfzr = projectMember(projectId);// 单项目
|
|
|
+ List<User> xmfzrId = projectAllMember(projectId);// 包含项目分组
|
|
|
+ List<User> xmfzr = _getProjectRoleId(projectId,"项目经理(业务数字化/集团QPD)");
|
|
|
+ xmfzrId.addAll(xmfzr);// 添加项目经理
|
|
|
+ tianhe.setXiangmufuzeren((getUser(true,xmfzr)).replaceAll("null",""));
|
|
|
+ tianhe.setXiangmufuzerenid((getUser(false,xmfzrId)));
|
|
|
+ if (project.getString("isArchived").equals("false") && project.getString("isTemplate").equals("false")) {
|
|
|
+ //项目创建时间
|
|
|
+ tianhe.setXiangmuchuangjianshijian(timeFormat(project.getString("created")));
|
|
|
+ //是否归档
|
|
|
+ tianhe.setShifouguidang(project.getString("isSuspended").equals("false")?0:1);
|
|
|
+ }
|
|
|
+ // 循环处理每个任务
|
|
|
+ for (int i = 0; i < tasks.size(); i++) {
|
|
|
+ JSONObject task = tasks.getJSONObject(i);
|
|
|
+ log.info("封装任务数据,任务编号:[{}]进度:[{}/{}]",task.getString("id"),i+1,tasks.size());
|
|
|
+ tianhe.setTaskid(task.getString("id"));
|
|
|
+ tianhe.setBeizhu(task.getString("note"));
|
|
|
+ //任务开始时间
|
|
|
+ tianhe.setRenwukaishishijian(timeFormat(task.getString("startDate")));
|
|
|
+ //任务截止时间
|
|
|
+ tianhe.setRenwujieshushijian(timeFormat(task.getString("dueDate")));
|
|
|
+ //所属周
|
|
|
+ String ssz = "";
|
|
|
+ //本周工作内容
|
|
|
+ String bzgznr = "";
|
|
|
+ //下周工作计划
|
|
|
+ String xzgzjh = "";
|
|
|
+ //项目事项清单
|
|
|
+ String xmsxqd = "";
|
|
|
+ //获取自定义任务集合
|
|
|
+ JSONArray rwArray = task.getJSONArray("customfields");
|
|
|
+ if (!rwArray.isEmpty()){
|
|
|
+ for (int j = 0; j < rwArray.size(); j++) {
|
|
|
+ //任务-自定义字段id
|
|
|
+ String cfId = rwArray.getJSONObject(j).getString("cfId");
|
|
|
+ if (cfId.equals("65bcac474d4dc9286d42afdd")) {//所属周
|
|
|
+ JSONArray value = rwArray.getJSONObject(j).getJSONArray("value");
|
|
|
+ if (!value.isEmpty()) {
|
|
|
+ for (int z = 0; z < value.size(); z++) {
|
|
|
+ String title = value.getJSONObject(z).getString("title");
|
|
|
+ ssz = title;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (cfId.equals("65bcac510bb530c9d7d04fe8")) {//本周工作内容
|
|
|
+ JSONArray value = rwArray.getJSONObject(j).getJSONArray("value");
|
|
|
+ if (!value.isEmpty()) {
|
|
|
+ for (int z = 0; z < value.size(); z++) {
|
|
|
+ String title = value.getJSONObject(z).getString("title");
|
|
|
+ bzgznr = title;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (cfId.equals("65bcac5a7bbdd92f48e74927")) {//下周工作计划
|
|
|
+ JSONArray value = rwArray.getJSONObject(j).getJSONArray("value");
|
|
|
+ if (!value.isEmpty()) {
|
|
|
+ for (int z = 0; z < value.size(); z++) {
|
|
|
+ String title = value.getJSONObject(z).getString("title");
|
|
|
+ xzgzjh = title;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (cfId.equals("65bcacf85b255d16573fe47f")) {//项目事项清单
|
|
|
+ JSONArray value = rwArray.getJSONObject(j).getJSONArray("value");
|
|
|
+ if (!value.isEmpty()) {
|
|
|
+ for (int z = 0; z < value.size(); z++) {
|
|
|
+ String title = value.getJSONObject(z).getString("title");
|
|
|
+ xmsxqd = title;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ tianhe.setSuoshuzhou(ssz);
|
|
|
+ tianhe.setBenzhougongzuoneirong(bzgznr);
|
|
|
+ tianhe.setXiazhougongzuojihua(xzgzjh);
|
|
|
+ tianhe.setXiangmushixiangqingdan(xmsxqd);
|
|
|
+ //项目执行人
|
|
|
+ User xmzxr = getDingUserId(task.getString("executorId"));
|
|
|
+ tianhe.setRenwuzhixingren(xmzxr.getUserName());
|
|
|
+ tianhe.setRenwuzhixingrenid(xmzxr.getTbUserId());
|
|
|
+ QueryWrapper<Tianhe> wrapper = new QueryWrapper<>();
|
|
|
+ wrapper.lambda().eq(Tianhe::getXiangmubianhao,tianhe.getXiangmubianhao()).eq(Tianhe::getTaskid,tianhe.getTaskid());
|
|
|
+ List<Tianhe> list=tianheMapper.selectList(wrapper);
|
|
|
+ if(list!=null&&list.size()>0){
|
|
|
+ tianheMapper.update(tianhe,wrapper);
|
|
|
+ }else{
|
|
|
+ tianheMapper.insert(tianhe);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询数据库中employee表的所有数据
|
|
|
+ @Override
|
|
|
+ public List<Tianhe> getTianhe(){
|
|
|
+ List<Tianhe> tianheList = tianheMapper.selectList(null);
|
|
|
+ return tianheList;
|
|
|
+ }
|
|
|
+
|
|
|
+ //删除employee表中的所有数据
|
|
|
+ @Override
|
|
|
+ public String removeTianhe(){
|
|
|
+// //获取当前时间
|
|
|
+// Date Date = new Date(System.currentTimeMillis());
|
|
|
+// System.out.println("当前时间:" + Date);
|
|
|
+// //截取当天本月的年月
|
|
|
+// Calendar calendar123 = Calendar.getInstance();
|
|
|
+// calendar123.setTime(Date);
|
|
|
+// calendar123.add(Calendar.MONTH,0);
|
|
|
+// String lastMonthNow = new SimpleDateFormat("yyyy-MM").format(calendar123.getTime());
|
|
|
+// System.out.println("本月日期,文本格式(月)" + lastMonthNow);
|
|
|
+
|
|
|
+// //构造查询条件
|
|
|
+// QueryWrapper<Yikong> queryWrapper = new QueryWrapper();
|
|
|
+// try {
|
|
|
+// queryWrapper.eq("tongbutime", lastMonthNow);
|
|
|
+// } catch (Exception e) {
|
|
|
+// e.printStackTrace();
|
|
|
+// }
|
|
|
+//
|
|
|
+// yikongMapper.delete(queryWrapper);
|
|
|
+ tianheMapper.delete(null);
|
|
|
+ return "清空天合项目表数据成功!";
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取数据库中yikong实体类表数据并放入vo对象进行前端接口调用展示数据
|
|
|
+ @Override
|
|
|
+ public TianheDataVo<Tianhe> getTianheTB(Integer page, Integer limit, TianheQuery tianheQuery){
|
|
|
+ log.info("查询条件:{}",tianheQuery.toString());
|
|
|
+ //写法1:调用写好的接口(查询数据库中employee表的所有数据)
|
|
|
+// EmployeeDataVo employeeDataVo = new EmployeeDataVo();
|
|
|
+// employeeDataVo.setCode(0);
|
|
|
+// employeeDataVo.setMsg("");
|
|
|
+// employeeDataVo.setCount(tongbuService.getEmployee().size());
|
|
|
+//
|
|
|
+// employeeDataVo.setData(tongbuService.getEmployee());
|
|
|
+// return employeeDataVo;
|
|
|
+
|
|
|
+ //写法2:直接在该实现类查询数据库实体类的数据
|
|
|
+ TianheDataVo tianheDataVo = new TianheDataVo();
|
|
|
+ tianheDataVo.setCode(0);
|
|
|
+ tianheDataVo.setMsg("");
|
|
|
+ //查询总数方法1
|
|
|
+// employeeDataVo.setCount(employeeMapper.selectCount(null));
|
|
|
+
|
|
|
+ System.out.println("page===" + page + "--->limit===" + limit);
|
|
|
+
|
|
|
+ //分页查询,创建page对象
|
|
|
+ Page<Tianhe> tianhePage = new Page<>(page,limit);
|
|
|
+
|
|
|
+ //构建查询条件
|
|
|
+ QueryWrapper<Tianhe> wrapper = new QueryWrapper<>();
|
|
|
+ //多条件组合查询(类似mybatis中动态sql)
|
|
|
+ String name = tianheQuery.getName();
|
|
|
+ String xmbh = tianheQuery.getXmbh();
|
|
|
+ String xmfzr = tianheQuery.getXmfzr();
|
|
|
+ String xmzt = tianheQuery.getXmzt();
|
|
|
+ Integer sfgd = tianheQuery.getSfgd();
|
|
|
+ String userId = tianheQuery.getUserId();
|
|
|
+
|
|
|
+ String rwStart = tianheQuery.getRwStart();//TODO 2024-03-18+00:00
|
|
|
+ String rwEnd = tianheQuery.getRwEnd();//TODO 2024-03-22+00:00
|
|
|
+
|
|
|
+
|
|
|
+ //判断条件值是否为空,如果不为空则拼接条件
|
|
|
+ if (!StringUtils.isEmpty(name)) {
|
|
|
+ //构建条件
|
|
|
+ wrapper.like("xiangmumingcheng", name);
|
|
|
+ }
|
|
|
+ if (!StringUtils.isEmpty(xmbh)) {
|
|
|
+ //构建条件
|
|
|
+ wrapper.like("xiangmubianhao", xmbh);
|
|
|
+ }
|
|
|
+ if (!StringUtils.isEmpty(xmfzr)) {
|
|
|
+ //构建条件
|
|
|
+ wrapper.like("xiangmufuzeren", xmfzr);
|
|
|
+ }
|
|
|
+ if (!StringUtils.isEmpty(xmzt)) {
|
|
|
+ wrapper.eq("xiangmuzhuangtai", xmzt);
|
|
|
+ }
|
|
|
+ if (!StringUtils.isEmpty(sfgd)) {
|
|
|
+ wrapper.eq("shifouguidang", sfgd);
|
|
|
+ }
|
|
|
+ if (!StringUtils.isEmpty(rwStart) && !StringUtils.isEmpty(rwEnd)) {
|
|
|
+ System.out.println("前端传参任务开始时间:" + rwStart);
|
|
|
+ System.out.println("前端传参任务截止时间:" + rwEnd);
|
|
|
+
|
|
|
+ wrapper.ge("renwukaishishijian", rwStart);
|
|
|
+ wrapper.le("renwujieshushijian", rwEnd);
|
|
|
+ }
|
|
|
+ if (!StringUtils.isEmpty(userId)) {
|
|
|
+ //构建条件
|
|
|
+ wrapper.and(i->i.like("xiangmufuzerenid", userId).or().eq("renwuzhixingrenid",userId));
|
|
|
+ }
|
|
|
+// if (!StringUtils.isEmpty(shijiStart) && !StringUtils.isEmpty(shijiEnd)) {
|
|
|
+// wrapper.between("shijiwanchengshijian", shijiStart,shijiEnd);
|
|
|
+// }
|
|
|
+// //排序:按照入职日期进行排序
|
|
|
+// wrapper.orderByDesc("confirmjointime");
|
|
|
+
|
|
|
+ //排序:按照项目序号进行排序
|
|
|
+ wrapper.orderByDesc("xiangmubianhao");
|
|
|
+
|
|
|
+// List<Employee> employeeList = employeePage.getRecords();
|
|
|
+
|
|
|
+ IPage<Tianhe> result = tianheMapper.selectPage(tianhePage, wrapper);
|
|
|
+
|
|
|
+ //查询实体类表中所有的数据(全部)
|
|
|
+// List<Employee> employeeList = employeeMapper.selectList(null);
|
|
|
+ //查询分页信息记录(根据分页要求来查)
|
|
|
+ List<Tianhe> tianheList = result.getRecords();
|
|
|
+ //查询总数方法2
|
|
|
+ tianheDataVo.setCount(result.getTotal());
|
|
|
+ System.out.println("总数:" + result.getTotal());
|
|
|
+
|
|
|
+// List<EmployeeVo> employeeVoList = new ArrayList<>();
|
|
|
+// for (Employee employee : employeeList) {
|
|
|
+// EmployeeVo employeeVo = new EmployeeVo();
|
|
|
+// //将前面实体类表中的数据,一一对应赋值给后面的vo对象
|
|
|
+// BeanUtils.copyProperties(employee,employeeVo);
|
|
|
+//
|
|
|
+// employeeVoList.add(employeeVo);
|
|
|
+// }
|
|
|
+
|
|
|
+ tianheDataVo.setData(tianheList);
|
|
|
+ return tianheDataVo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public User getDingUserId(String tbUserId) {
|
|
|
+ if(USER_MAP.containsKey(tbUserId)){
|
|
|
+ return USER_MAP.get(tbUserId);
|
|
|
+ }
|
|
|
+ User user=new User();
|
|
|
+ String ddUserId=idMapQuery(tbUserId,true);
|
|
|
+ if(ddUserId!=null){
|
|
|
+ user.setDdUserId(ddUserId);
|
|
|
+ user.setUserName(userSearch(ddUserId));
|
|
|
+ user.setTbUserId(tbUserId);
|
|
|
+ USER_MAP.put(tbUserId,user);
|
|
|
+ }
|
|
|
+ return user;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /***
|
|
|
+ * 获取钉钉userId
|
|
|
+ * @param userId
|
|
|
+ * @param isTbID
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public String idMapQuery(String userId, boolean isTbID) {
|
|
|
+
|
|
|
+ try {
|
|
|
+ JSONArray array=tbApiService.idMapQuery(userId,isTbID);
|
|
|
+ if(array!=null&&array.size()>0){
|
|
|
+ return array.getJSONObject(0).getJSONObject("extra").getString("userId");
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ public String userSearch(String userId) {
|
|
|
+ try {
|
|
|
+ JSONArray array=tbApiService.userSearch(userId);
|
|
|
+ if(array!=null&&array.size()>0){
|
|
|
+ return array.getJSONObject(0).getString("name");
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ // 暂不需要钉钉userId
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<User> projectMember(String projectId) {
|
|
|
+ try {
|
|
|
+ JSONArray array=tbApiService.getProjectMember(projectId);
|
|
|
+ if(array!=null&&array.size()>0){
|
|
|
+ List<User> users=new ArrayList<>();
|
|
|
+ for (int i = 0; i < array.size(); i++) {
|
|
|
+ User user=new User();
|
|
|
+ user.setTbUserId(array.getJSONObject(i).getString("userId"));// id? userId
|
|
|
+ user.setRole(array.getJSONObject(i).getInteger("role"));
|
|
|
+ users.add(user);
|
|
|
+ }
|
|
|
+ return users;
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Async
|
|
|
+ public void asyncXm() {
|
|
|
+ getXiangmu();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void asyncXm(String id) {
|
|
|
+ syncData(id);
|
|
|
+ }
|
|
|
+
|
|
|
+ public String getUser(boolean isNeedName,List<User> users){
|
|
|
+ if(users==null||users.size()<1){
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+ if(isNeedName){
|
|
|
+ // 筛选只显示拥有者 .filter(user -> user.getRole() == 2)
|
|
|
+ return String.join(",",Arrays.stream(users.toArray(new User[0])).map(User::getUserName).toArray(String[]::new));
|
|
|
+ }else{
|
|
|
+ return String.join(",",Arrays.stream(users.toArray(new User[0])).map(User::getTbUserId).toArray(String[]::new));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void test() {
|
|
|
+// getProjectState("65eefd95fc0ff5ef94bd7863");
|
|
|
+ syncData("65efed344f2eb1fe4e88c81f");
|
|
|
+// List<User> list=projectAllMember("65eefd4b5a93ac0240065a4e");
|
|
|
+// User user=getDingUserId("65c09f4155d0f38026a1e218");
|
|
|
+// String list=userSearch("孙雯");
|
|
|
+// System.out.println(JSONObject.toJSONString(list));
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /***
|
|
|
+ * 查询项目用户
|
|
|
+ * @param projectId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<User> projectAllMember(String projectId) {
|
|
|
+ String users=getAllUserIds(projectId);
|
|
|
+ List<User> list=new ArrayList<>();
|
|
|
+ if(PublicUtil.isNull(users)){
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+ String[] user=users.split(",");
|
|
|
+ for (int i = 0; i < user.length; i++) {
|
|
|
+ list.addAll(projectAllMemberId(projectId,user[i]));// 默认不要名称
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ /***
|
|
|
+ * 查询项目所有权限的用户ID 及 角色
|
|
|
+ * @param projectId
|
|
|
+ * @param userIds
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<User> projectAllMemberId(String projectId,String userIds) {
|
|
|
+ try {
|
|
|
+ JSONArray array=tbApiService.getProjectMemberRole(projectId,userIds);
|
|
|
+ if(array!=null&&array.size()>0){
|
|
|
+ List<User> users=new ArrayList<>();
|
|
|
+ for (int i = 0; i < array.size(); i++) {
|
|
|
+ if(array.getJSONObject(i).getInteger("role")==-2){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ User user=getDingUserId(array.getJSONObject(i).getString("userId"));// id? userId
|
|
|
+ if(user!=null){
|
|
|
+ user.setRole(array.getJSONObject(i).getInteger("role"));
|
|
|
+ users.add(user);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return users;
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+
|
|
|
+ /***
|
|
|
+ * 获取项目状态
|
|
|
+ * @param projectId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public String getProjectState(String projectId) {
|
|
|
+ try {
|
|
|
+ JSONArray array=tbApiService.getProjectState(projectId);
|
|
|
+ if(array!=null&&array.size()>0){
|
|
|
+ return array.getJSONObject(0).getString("name");
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ /***
|
|
|
+ * 获取项目所有成员信息
|
|
|
+ * @param projectId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public String getAllUserIds(String projectId){
|
|
|
+ String projectTagId=getProjectGroupId(projectId,true);// 父级项目分组ID
|
|
|
+ if(PublicUtil.isNull(projectTagId)){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ String ids=getProjectGroupUserIds(projectTagId);
|
|
|
+// getProjectGroupId(projectTagId,false);// 父分组
|
|
|
+ return ids;
|
|
|
+ }
|
|
|
+
|
|
|
+ /***
|
|
|
+ * 获取项目分组下所有项目的项目成员
|
|
|
+ * @param projectTagId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public String getProjectGroupUserIds(String projectTagId){
|
|
|
+ if(TB_PROJECT_GROUP_MAP.containsKey(projectTagId)){
|
|
|
+ return TB_PROJECT_GROUP_MAP.get(projectTagId);
|
|
|
+ }
|
|
|
+ JSONArray array2=tbApiService.getProjecTagUser(projectTagId);
|
|
|
+ List<String> list=new ArrayList<>();
|
|
|
+ for (int i = 0; i < array2.size(); i++) {
|
|
|
+ JSONArray array3=tbApiService.getProjectMember(array2.getString(i));
|
|
|
+ if(array3!=null&&array3.size()>0){
|
|
|
+ for (int j = 0; j < array3.size(); j++) {
|
|
|
+ list.add(array3.getJSONObject(j).getString("userId"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Set<String> set=new HashSet(list);
|
|
|
+ String[] ids = set.toArray(new String[0]);
|
|
|
+ TB_PROJECT_GROUP_MAP.put(projectTagId,String.join(",",ids));
|
|
|
+ return TB_PROJECT_GROUP_MAP.get(projectTagId);
|
|
|
+ }
|
|
|
+
|
|
|
+ /***
|
|
|
+ * 查询项目分组ID
|
|
|
+ * @param id 编号
|
|
|
+ * @param isProjectId true 项目编号 false 项目分组编号
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public String getProjectGroupId(String id,boolean isProjectId){
|
|
|
+ JSONArray array;
|
|
|
+ if(isProjectId){
|
|
|
+ array=tbApiService.getProjectTag(id);
|
|
|
+ }else{
|
|
|
+ array=tbApiService.getProjecGrouptTag(id);
|
|
|
+ }
|
|
|
+ if(array!=null&&array.size()>0){
|
|
|
+ if(isProjectId){
|
|
|
+ return array.getString(0);
|
|
|
+ }else{
|
|
|
+ System.out.println("==============");
|
|
|
+ // todo 查询项目分组接口的返回值缺少一个ancestorIds参数。公有云是有的
|
|
|
+ System.out.println(array.toJSONString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ /***
|
|
|
+ * 查询项目指定角色下的成员
|
|
|
+ * @param projectId
|
|
|
+ * @param roleName
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private List<User> _getProjectRoleId(String projectId, String roleName) {
|
|
|
+ try {
|
|
|
+ JSONArray roleArray=tbApiService.getProjectRole(projectId);
|
|
|
+ List<Map> roles = roleArray.toJavaList(Map.class);
|
|
|
+ if(roles!=null&&roles.size()>0){
|
|
|
+ for (Map map:roles){
|
|
|
+ if(roleName.equals(String.valueOf(map.get("name")))){
|
|
|
+ String id=String.valueOf(map.get("id"));
|
|
|
+// String id="65eef969b6adf46ff2c974a1";
|
|
|
+ JSONArray array=tbApiService.getProjectRoleMember(projectId,id);
|
|
|
+ if(array!=null&&array.size()>0){
|
|
|
+ List<User> users=new ArrayList<>();
|
|
|
+ for (int i = 0; i < array.size(); i++) {
|
|
|
+ users.add(getDingUserId(array.getJSONObject(i).getString("userId")));
|
|
|
+ }
|
|
|
+ return users;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+
|
|
|
+ /***
|
|
|
+ * 查询项目概览自定义字段数据
|
|
|
+ */
|
|
|
+ private String getProjectCustVule(String projectId,String cfId){
|
|
|
+ try {
|
|
|
+ JSONArray array = tbApiService.getProjectCust(projectId);
|
|
|
+ List<JSONObject> list=array.toJavaList(JSONObject.class);
|
|
|
+ Optional optional = list.stream().filter(item -> cfId.equals(item.get("cfId"))).findAny();
|
|
|
+ JSONArray valueArray=((JSONObject) optional.get()).getJSONArray("value");
|
|
|
+ if(valueArray!=null&&valueArray.size()>0){
|
|
|
+ String value=valueArray.getJSONObject(0).getString("title");
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+}
|