Jelajahi Sumber

部门同步完成

yq 3 tahun lalu
induk
melakukan
f15be93e22

+ 3 - 9
src/main/java/com/usky/dxtop/controller/web/StaffController.java

@@ -7,7 +7,6 @@ import com.usky.dxtop.model.StaffRadio;
 import com.usky.dxtop.service.DeptService;
 import com.usky.dxtop.service.StaffRadioService;
 import com.usky.dxtop.service.StaffService;
-import com.usky.dxtop.service.job.SmJob;
 import com.usky.dxtop.service.vo.StaffRequest;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -30,9 +29,6 @@ public class StaffController {
     @Autowired
     private DeptService deptService;
 
-    @Autowired
-    private SmJob smJob;
-
     /**
      *
      * @return
@@ -93,16 +89,14 @@ public class StaffController {
     }
 
     @GetMapping("sendDept")
-    public String sendDeptAndStaff(@RequestParam Long id){
-        Dept byId = deptService.getById(id);
-        smJob.deptSendMessage(byId);
-        return "sucess";
+    public List<Dept> sendDeptAndStaff(){
+        return deptService.buildDeptTree(deptService.list());
     }
 
     @GetMapping("sendPerson")
     public String sendPerson(Long id,Integer type){
         Staff staff = staffService.getById(id);
-        smJob.personSendMessage(staff,type);
+        staffService.personSendMessage(staff,type);
         return "sucess";
     }
 

+ 6 - 0
src/main/java/com/usky/dxtop/model/Dept.java

@@ -1,12 +1,15 @@
 package com.usky.dxtop.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 /**
  * <p>
@@ -72,5 +75,8 @@ public class Dept implements Serializable {
 
     private Date updateTime;
 
+    @TableField(exist = false)
+    private List<Dept> children = new ArrayList<>();
+
 
 }

+ 11 - 0
src/main/java/com/usky/dxtop/service/DeptService.java

@@ -6,6 +6,8 @@ import com.usky.dxtop.common.core.page.CommonPage;
 import com.usky.dxtop.model.Dept;
 import com.usky.dxtop.service.vo.StaffRequest;
 
+import java.util.List;
+
 /**
  * <p>
  *  服务类
@@ -23,4 +25,13 @@ public interface DeptService extends IService<Dept> {
      */
     CommonPage<Dept> page(StaffRequest staffRequest);
 
+
+    /**
+     * 构建前端所需要树结构
+     *
+     * @param depts 部门列表
+     * @return 树结构列表
+     */
+    List<Dept> buildDeptTree(List<Dept> depts);
+
 }

+ 5 - 0
src/main/java/com/usky/dxtop/service/StaffService.java

@@ -24,4 +24,9 @@ public interface StaffService extends IService<Staff> {
 
 
     Staff one(String id,String phone,String card);
+
+    void personSendMessage(Staff staff,Integer type);
+
+
+    void faceSendMessage(Staff staff);
 }

+ 98 - 0
src/main/java/com/usky/dxtop/service/impl/DeptServiceImpl.java

@@ -1,6 +1,7 @@
 package com.usky.dxtop.service.impl;
 
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -10,10 +11,20 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.usky.dxtop.common.core.page.CommonPage;
 import com.usky.dxtop.mapper.DeptMapper;
 import com.usky.dxtop.model.Dept;
+import com.usky.dxtop.model.MsgLog;
 import com.usky.dxtop.service.DeptService;
+import com.usky.dxtop.service.MsgLogService;
+import com.usky.dxtop.service.config.rabbitmq.group.GroupConsumeConfig;
 import com.usky.dxtop.service.vo.StaffRequest;
+import org.springframework.amqp.rabbit.connection.CorrelationData;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
+import java.util.*;
+import java.util.stream.Collectors;
+
 /**
  * <p>
  *  服务实现类
@@ -25,6 +36,13 @@ import org.springframework.stereotype.Service;
 @Service
 public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements DeptService {
 
+    @Autowired
+    private MsgLogService msgLogService;
+
+    @Autowired
+    @Qualifier(GroupConsumeConfig.TEMPLATE)
+    private RabbitTemplate groupRabbitTemplate;
+
     @Override
     public CommonPage<Dept> page(StaffRequest staffRequest) {
         IPage<Dept> page = new Page<>(staffRequest.getCurrent(), staffRequest.getSize());
@@ -35,4 +53,84 @@ public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements De
         page = this.page(page,queryWrapper);
         return new CommonPage<>(page.getRecords(),page.getTotal(),page.getCurrent(),page.getSize());
     }
+
+    @Override
+    public List<Dept> buildDeptTree(List<Dept> depts) {
+        List<Dept> returnList = new ArrayList<>();
+        List<String> tempList = depts.stream().map(Dept::getId).collect(Collectors.toList());
+        for (Dept dept:depts) {
+            // 如果是顶级节点, 遍历该父节点的所有子节点
+            if (!tempList.contains(dept.getPid()))
+            {
+                deptSendMessage(dept,depts);
+                recursionFn(depts, dept);
+                returnList.add(dept);
+            }
+        }
+        if (returnList.isEmpty())
+        {
+            returnList = depts;
+        }
+        return returnList;
+    }
+
+    /**
+     * 递归列表
+     */
+    private void recursionFn(List<Dept> list, Dept t)
+    {
+        // 得到子节点列表
+        List<Dept> childList = getChildList(list, t);
+        t.setChildren(childList);
+        for (Dept tChild : childList) {
+            deptSendMessage(tChild,list);
+            if (hasChild(list, tChild)) {
+                recursionFn(list, tChild);
+            }
+        }
+    }
+
+
+    /**
+     * 得到子节点列表
+     */
+    private List<Dept> getChildList(List<Dept> list, Dept t)
+    {
+        return list.stream().filter(dept -> dept.getPid().equals(t.getId())).collect(Collectors.toList());
+
+    }
+
+    /**
+     * 判断是否有子节点
+     */
+    private boolean hasChild(List<Dept> list, Dept t)
+    {
+        return getChildList(list, t).size() > 0 ? true : false;
+    }
+
+
+
+    /**
+     * 部门消息
+     * @param dept
+     */
+    public void deptSendMessage(Dept dept,List<Dept> list){
+        Map<String,Object> map = new HashMap<>();
+        //获取父id
+        Long pid = list.stream().filter(d -> d.getId().equals(dept.getPid())).map(Dept::getDId).findAny().orElse(0L);
+        map.put("parentid",pid);
+        map.put("id",dept.getDId());
+        map.put("name",dept.getName());
+        MsgLog msgLog = new MsgLog();
+        msgLog.setBusinessId(dept.getDId());
+        msgLog.setExchange(GroupConsumeConfig.NAME);
+        msgLog.setRoutingKey(GroupConsumeConfig.NAME);
+        msgLogService.save(msgLog);
+        map.put("seq",msgLog.getId());
+        msgLog.setMsg(JSON.toJSONString(map));
+        msgLogService.updateById(msgLog);
+        CorrelationData correlationData = new CorrelationData(msgLog.getId().toString());
+        groupRabbitTemplate.convertAndSend(msgLog.getExchange(), msgLog.getRoutingKey(), map,correlationData);
+        System.out.println("发送的pid和id"+pid+"----------"+dept.getDId());
+    }
 }

+ 64 - 0
src/main/java/com/usky/dxtop/service/impl/StaffServiceImpl.java

@@ -14,6 +14,8 @@ import com.usky.dxtop.model.Staff;
 import com.usky.dxtop.service.MsgLogService;
 import com.usky.dxtop.service.StaffService;
 import com.usky.dxtop.service.config.rabbitmq.cartget.CartGetConsumeConfig;
+import com.usky.dxtop.service.config.rabbitmq.face.FaceConsumeConfig;
+import com.usky.dxtop.service.config.rabbitmq.profile.ProfileConsumeConfig;
 import com.usky.dxtop.service.vo.StaffRequest;
 import org.springframework.amqp.rabbit.connection.CorrelationData;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
@@ -42,6 +44,16 @@ public class StaffServiceImpl extends ServiceImpl<StaffMapper, Staff> implements
     @Autowired
     private MsgLogService msgLogService;
 
+
+    @Autowired
+    @Qualifier(ProfileConsumeConfig.TEMPLATE)
+    private RabbitTemplate profileRabbitTemplate;
+
+
+    @Autowired
+    @Qualifier(FaceConsumeConfig.TEMPLATE)
+    private RabbitTemplate faceRabbitTemplate;
+
     @Override
     public CommonPage<Staff> page(StaffRequest staffRequest) {
         IPage<Staff> page = new Page<>(staffRequest.getCurrent(), staffRequest.getSize());
@@ -78,4 +90,56 @@ public class StaffServiceImpl extends ServiceImpl<StaffMapper, Staff> implements
         }
         return baseMapper.one(id,phone,card);
     }
+
+
+    /**
+     * 人员消息
+     * @param staff
+     */
+    @Override
+    public void personSendMessage(Staff staff,Integer type){
+        Map<String,Object> map = new HashMap<>();
+        map.put("type",type);
+        map.put("card_type",1);
+        map.put("card",staff.getCardId());
+        map.put("name",staff.getName());
+        map.put("mob",staff.getId());
+        Map dept = JSON.parseObject(staff.getDept(), Map.class);
+        map.put("groupid",dept.get("id"));
+        map.put("tel",staff.getContacts());
+        map.put("level_name","");
+        MsgLog msgLog = new MsgLog();
+        msgLog.setBusinessId(staff.getSId());
+        msgLog.setExchange(ProfileConsumeConfig.NAME);
+        msgLog.setRoutingKey(ProfileConsumeConfig.NAME);
+        msgLogService.save(msgLog);
+        map.put("seq",msgLog.getId());
+        msgLog.setMsg(JSON.toJSONString(map));
+        msgLogService.updateById(msgLog);
+        CorrelationData correlationData = new CorrelationData(msgLog.getId().toString());
+        profileRabbitTemplate.convertAndSend(msgLog.getExchange(), msgLog.getRoutingKey(), map,correlationData);
+    }
+
+
+    /**
+     * 人脸
+     * @param staff
+     */
+    @Override
+    public void faceSendMessage(Staff staff){
+        Map<String,Object> map = new HashMap<>();
+        map.put("mob",staff.getId());
+        map.put("image",staff.getFaceId());
+        faceRabbitTemplate.convertAndSend(FaceConsumeConfig.NAME, FaceConsumeConfig.NAME, map);
+        MsgLog msgLog = new MsgLog();
+        msgLog.setBusinessId(staff.getSId());
+        msgLog.setExchange(FaceConsumeConfig.NAME);
+        msgLog.setRoutingKey(FaceConsumeConfig.NAME);
+        msgLogService.save(msgLog);
+        map.put("seq",msgLog.getId());
+        msgLog.setMsg(JSON.toJSONString(map));
+        msgLogService.updateById(msgLog);
+        CorrelationData correlationData = new CorrelationData(msgLog.getId().toString());
+        faceRabbitTemplate.convertAndSend(msgLog.getExchange(), msgLog.getRoutingKey(), map,correlationData);
+    }
 }

+ 20 - 105
src/main/java/com/usky/dxtop/service/job/SmJob.java

@@ -8,24 +8,19 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.usky.dxtop.common.utils.StringUtils;
 import com.usky.dxtop.common.utils.http.HttpUtils;
 import com.usky.dxtop.model.Dept;
-import com.usky.dxtop.model.MsgLog;
 import com.usky.dxtop.model.Staff;
 import com.usky.dxtop.service.DeptService;
-import com.usky.dxtop.service.MsgLogService;
 import com.usky.dxtop.service.StaffService;
 import com.usky.dxtop.service.api.SmApi;
-import com.usky.dxtop.service.config.rabbitmq.face.FaceConsumeConfig;
-import com.usky.dxtop.service.config.rabbitmq.group.GroupConsumeConfig;
-import com.usky.dxtop.service.config.rabbitmq.profile.ProfileConsumeConfig;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.rabbit.connection.CorrelationData;
-import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 
-import java.util.*;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
 import java.util.function.Function;
 
 /**
@@ -44,23 +39,6 @@ public class SmJob {
     @Autowired
     private DeptService deptService;
 
-    @Autowired
-    @Qualifier(ProfileConsumeConfig.TEMPLATE)
-    private RabbitTemplate profileRabbitTemplate;
-
-
-    @Autowired
-    @Qualifier(FaceConsumeConfig.TEMPLATE)
-    private RabbitTemplate faceRabbitTemplate;
-
-    @Autowired
-    @Qualifier(GroupConsumeConfig.TEMPLATE)
-    private RabbitTemplate groupRabbitTemplate;
-
-
-    @Autowired
-    private MsgLogService msgLogService;
-
 //    @Scheduled(cron = "0 0 0 */1 * ?")
     public void personExecute(String param) {
         PersonParam personParam = JSON.parseObject(param, PersonParam.class);
@@ -90,8 +68,11 @@ public class SmJob {
                 LambdaQueryWrapper<Staff> queryWrapper = Wrappers.lambdaQuery();
                 queryWrapper.eq(Staff::getId,date.getId());
                 Staff staff = staffService.getOne(queryWrapper);
-                Map dept = JSON.parseObject(date.getDept(), Map.class);
-                date.setDeptId(dept.get("id").toString());
+                //获取部门信息
+                Map deptMap = JSON.parseObject(date.getDept(), Map.class);
+                LambdaQueryWrapper<Dept> deptLambdaQueryWrapper = Wrappers.lambdaQuery();
+                deptLambdaQueryWrapper.eq(Dept::getId,deptMap.get("id").toString());
+                Dept dept = deptService.getOne(deptLambdaQueryWrapper);
                 int type;
                 if (null == staff){
                     type = 1;
@@ -102,12 +83,13 @@ public class SmJob {
                     staffService.updateById(date);
                 }
                 //发送人员信息
-                if (StringUtils.isNotBlank(date.getCardId())){
-                    personSendMessage(date,type);
+                if (StringUtils.isNotBlank(date.getCardId()) && null != dept){
+                    date.setDeptId(dept.getId());
+                    staffService.personSendMessage(date,type);
                 }
                 //发送人脸信息
                 if (StringUtils.isNotBlank(date.getFaceId())){
-                    faceSendMessage(date);
+                    staffService.faceSendMessage(date);
                 }
             });
             return list.isEmpty();
@@ -123,19 +105,19 @@ public class SmJob {
             treeMap = SmApi.generateDeptParam(null,
                     null,null,null);
         }
-        common(SmApi.DEPT_URL,treeMap,staffList -> {
-            List<Dept> list = staffList.toJavaList(Dept.class);
+        common(SmApi.DEPT_URL,treeMap,deptList -> {
+            List<Dept> list = deptList.toJavaList(Dept.class);
             list.forEach(date -> {
+                //只负责同步
                 LambdaQueryWrapper<Dept> queryWrapper = Wrappers.lambdaQuery();
                 queryWrapper.eq(Dept::getId,date.getId());
-                Dept dept = deptService.getOne(queryWrapper);
-                if (null == dept){
-                    deptService.save(date);
-                }
-                deptSendMessage(date);
+                deptService.saveOrUpdate(date,queryWrapper);
             });
             return list.isEmpty();
         });
+        //拼接父子结构发送数据
+        List<Dept> list = deptService.list();
+        deptService.buildDeptTree(list);
     }
 
     public void common(String url, TreeMap<String,Object> param, Function<JSONArray,Boolean> function){
@@ -169,74 +151,7 @@ public class SmJob {
         }
     }
 
-    /**
-     * 人员消息
-     * @param staff
-     */
-    public void personSendMessage(Staff staff,Integer type){
-        Map<String,Object> map = new HashMap<>();
-        map.put("type",type);
-        map.put("card_type",1);
-        map.put("card",staff.getCardId());
-        map.put("name",staff.getName());
-        map.put("mob",staff.getId());
-        Map dept = JSON.parseObject(staff.getDept(), Map.class);
-        map.put("groupid",dept.get("id"));
-        map.put("tel",staff.getContacts());
-        map.put("level_name","");
-        MsgLog msgLog = new MsgLog();
-        msgLog.setBusinessId(staff.getSId());
-        msgLog.setExchange(ProfileConsumeConfig.NAME);
-        msgLog.setRoutingKey(ProfileConsumeConfig.NAME);
-        msgLogService.save(msgLog);
-        map.put("seq",msgLog.getId());
-        msgLog.setMsg(JSON.toJSONString(map));
-        msgLogService.updateById(msgLog);
-        CorrelationData correlationData = new CorrelationData(msgLog.getId().toString());
-        profileRabbitTemplate.convertAndSend(msgLog.getExchange(), msgLog.getRoutingKey(), map,correlationData);
-    }
 
-    /**
-     * 部门消息
-     * @param dept
-     */
-    public void deptSendMessage(Dept dept){
-        Map<String,Object> map = new HashMap<>();
-        map.put("parentid",dept.getPid());
-        map.put("id",dept.getId());
-        map.put("name",dept.getName());
-        MsgLog msgLog = new MsgLog();
-        msgLog.setBusinessId(dept.getDId());
-        msgLog.setExchange(GroupConsumeConfig.NAME);
-        msgLog.setRoutingKey(GroupConsumeConfig.NAME);
-        msgLogService.save(msgLog);
-        map.put("seq",msgLog.getId());
-        msgLog.setMsg(JSON.toJSONString(map));
-        msgLogService.updateById(msgLog);
-        CorrelationData correlationData = new CorrelationData(msgLog.getId().toString());
-        groupRabbitTemplate.convertAndSend(msgLog.getExchange(), msgLog.getRoutingKey(), map,correlationData);
-    }
-
-    /**
-     * 人脸
-     * @param staff
-     */
-    public void faceSendMessage(Staff staff){
-        Map<String,Object> map = new HashMap<>();
-        map.put("mob",staff.getId());
-        map.put("image",staff.getFaceId());
-        faceRabbitTemplate.convertAndSend(FaceConsumeConfig.NAME, FaceConsumeConfig.NAME, map);
-        MsgLog msgLog = new MsgLog();
-        msgLog.setBusinessId(staff.getSId());
-        msgLog.setExchange(FaceConsumeConfig.NAME);
-        msgLog.setRoutingKey(FaceConsumeConfig.NAME);
-        msgLogService.save(msgLog);
-        map.put("seq",msgLog.getId());
-        msgLog.setMsg(JSON.toJSONString(map));
-        msgLogService.updateById(msgLog);
-        CorrelationData correlationData = new CorrelationData(msgLog.getId().toString());
-        faceRabbitTemplate.convertAndSend(msgLog.getExchange(), msgLog.getRoutingKey(), map,correlationData);
-    }
 
     @Data
     public static class PersonParam {