Forráskód Böngészése

预警规则匹配逻辑消息汇总

zhaoxian 4 éve
szülő
commit
017abfb2a8
31 módosított fájl, 655 hozzáadás és 196 törlés
  1. 2 0
      jeecg-boot-module-system/src/main/java/org/jeecg/config/ShiroConfig.java
  2. 3 3
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/entity/AlarmEventSend.java
  3. 4 4
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/service/impl/AlarmEventSendServiceImpl.java
  4. 93 84
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/service/impl/RuleGroupServiceImpl.java
  5. 2 3
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/WechatApproveAttendanceJob.java
  6. 1 3
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/WechatAttendanceJob.java
  7. 15 3
      module-oa/src/main/java/cn/com/ctop/oa/modules/constant/QYWxConstant.java
  8. 2 1
      module-oa/src/main/java/cn/com/ctop/oa/modules/controller/WechatDepartmentController.java
  9. 48 5
      module-oa/src/main/java/cn/com/ctop/oa/modules/controller/WechatNoListController.java
  10. 2 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/entity/WechatCheckinData.java
  11. 2 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/entity/WechatDepartment.java
  12. 2 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/entity/WechatNoList.java
  13. 2 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/entity/WechatUserList.java
  14. 1 1
      module-oa/src/main/java/cn/com/ctop/oa/modules/enums/DepartEnum.java
  15. 1 1
      module-oa/src/main/java/cn/com/ctop/oa/modules/mapper/WechatDepartmentMapper.java
  16. 3 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/mapper/WechatNoListMapper.java
  17. 3 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/mapper/WechatUserListMapper.java
  18. 16 17
      module-oa/src/main/java/cn/com/ctop/oa/modules/mapper/xml/WechatCheckinDataMapper.xml
  19. 1 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/mapper/xml/WechatDepartmentMapper.xml
  20. 91 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/mapper/xml/WechatNoListMapper.xml
  21. 6 1
      module-oa/src/main/java/cn/com/ctop/oa/modules/mapper/xml/WechatUserListMapper.xml
  22. 3 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/service/IWechatCheckinDataService.java
  23. 1 1
      module-oa/src/main/java/cn/com/ctop/oa/modules/service/IWechatDepartmentService.java
  24. 5 12
      module-oa/src/main/java/cn/com/ctop/oa/modules/service/IWechatNoListService.java
  25. 23 6
      module-oa/src/main/java/cn/com/ctop/oa/modules/service/IWechatTokenService.java
  26. 6 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/service/IWechatUserListService.java
  27. 87 3
      module-oa/src/main/java/cn/com/ctop/oa/modules/service/impl/WechatCheckinDataServiceImpl.java
  28. 4 2
      module-oa/src/main/java/cn/com/ctop/oa/modules/service/impl/WechatDepartmentServiceImpl.java
  29. 75 41
      module-oa/src/main/java/cn/com/ctop/oa/modules/service/impl/WechatNoListServiceImpl.java
  30. 93 4
      module-oa/src/main/java/cn/com/ctop/oa/modules/service/impl/WechatTokenServiceImpl.java
  31. 58 1
      module-oa/src/main/java/cn/com/ctop/oa/modules/service/impl/WechatUserListServiceImpl.java

+ 2 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/config/ShiroConfig.java

@@ -176,6 +176,8 @@ public class ShiroConfig {
         filterChainDefinitionMap.put("/ctop/checkTaskList/*", "anon");
         filterChainDefinitionMap.put("/ctop/report/bytedance/*", "anon");
         filterChainDefinitionMap.put("/shiwan/shiwanFileUpload/*", "anon");
+        filterChainDefinitionMap.put("/oa/wechatNoList/*", "anon");
+        filterChainDefinitionMap.put("/ruleGroup/*", "anon");
 
         // 添加自己的过滤器并且取名为jwt
         Map<String, Filter> filterMap = new HashMap<>(1);

+ 3 - 3
module-alarm/src/main/java/cn/com/ctop/alarm/modules/entity/AlarmEventSend.java

@@ -41,13 +41,13 @@ public class AlarmEventSend {
      */
     @Excel(name = "规则id", width = 15)
     @ApiModelProperty(value = "规则id")
-    private Long eventRuleId;
+    private Long groupId;
     /**
      * 预警指标
      */
     @Excel(name = "预警指标", width = 15)
     @ApiModelProperty(value = "预警指标")
-    private String metricValueCode;
+    private String groupName;
     /**
      * 预警发送内容
      */
@@ -61,7 +61,7 @@ public class AlarmEventSend {
     @ApiModelProperty(value = "预警发送状态 0未发送,1已发送")
     private String alarmStatus;
 
-    private String alarmCondition;
+    private String ruleDimension;
     /**
      * createTime
      */

+ 4 - 4
module-alarm/src/main/java/cn/com/ctop/alarm/modules/service/impl/AlarmEventSendServiceImpl.java

@@ -279,10 +279,10 @@ public class AlarmEventSendServiceImpl extends ServiceImpl<AlarmEventSendMapper,
                     sendMessageService.sendMessage(rule.getUserId(), msg);
                     AlarmEventSend send = new AlarmEventSend();
                     send.setAlarmDetail(msg);
-                    send.setAlarmStatus(NoEn.NO1.valueStr());
-                    send.setMetricValueCode(rule.getMetricValueCode());
-                    send.setEventRuleId(rule.getEventRuleId());
-                    send.setAlarmCondition(rule.getMetricValueName().concat("预警:").concat(detail.replace("<br/>", ";")));
+
+                    send.setRuleDimension(rule.getMetricValueCode());send.setAlarmStatus(NoEn.NO1.valueStr());
+                    send.setGroupId(rule.getEventRuleId());
+                    send.setGroupName(rule.getMetricValueName().concat("预警:").concat(detail.replace("<br/>", ";")));
                     send.setUserId(rule.getUserId());
                     alarmEventSendMapper.insert(send);
                 }

+ 93 - 84
module-alarm/src/main/java/cn/com/ctop/alarm/modules/service/impl/RuleGroupServiceImpl.java

@@ -25,6 +25,7 @@ import cn.com.ctop.common.module.service.ICtopOauthTokenService;
 import cn.com.ctop.common.module.service.IRuleDataAccountService;
 import cn.com.ctop.common.module.service.ISendMessageService;
 import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.SendMailUtil;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouUpdateService;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -35,6 +36,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -82,8 +84,10 @@ public class RuleGroupServiceImpl extends ServiceImpl<RuleGroupMapper, RuleGroup
     private AlarmEventSendMapper alarmEventSendMapper;
     @Autowired
     private UserAllocationMapper userAllocationMapper;
-    ;
     private JSONObject userObj = null;
+    private final static String ACCOUNT = "account";
+    private final static String PLAN = "plan";
+    private final static String CREATIVE = "creative";
 
     @Override
     public void checkRules() {
@@ -92,24 +96,23 @@ public class RuleGroupServiceImpl extends ServiceImpl<RuleGroupMapper, RuleGroup
         //查询账户绑定过的规则模板
         List<RuleAccountTemplate> ruleAccountTemplates = ruleAccountTemplateMapper.selectByMap(null);
         if (Check.isNull(ruleAccountTemplates)) {
-            log.warn("查询账户绑定过的规则模板失败");
+            log.error("查询账户绑定过的规则模板失败");
             return;
         }
         //获取规则集
         Map<Long, Object> ruleGroupMap = getRuleGroupMap();
         if (Check.isNull(ruleGroupMap)) {
-            log.warn("获取规则集失败");
+            log.error("获取规则集失败");
             return;
         }
         //获取指标内容
         JSONObject indicators = getRuleIndicator();
         if (Check.isNull(indicators)) {
-            log.warn("获取指标内容失败");
+            log.error("获取指标内容失败");
             return;
         }
         for (RuleAccountTemplate templates : ruleAccountTemplates) {
-            if (templates.getAccountId() == 1681223758914574l)
-                matchAlarmRules(ruleGroupMap, indicators, templates);
+            matchAlarmRules(ruleGroupMap, indicators, templates);
         }
         Long endTime = System.currentTimeMillis();
         log.info("------end------共耗时: {} ms", endTime - startTime);
@@ -192,14 +195,14 @@ public class RuleGroupServiceImpl extends ServiceImpl<RuleGroupMapper, RuleGroup
                 for (Map.Entry<String, Object> entry : batchNo.entrySet()) {
                     JSONObject thresholdJn = (JSONObject) entry.getValue();
                     if (!Check.isNull(thresholdJn)) {
-                        CombinationRule(ruleGroup, ruleBaseList, thresholdJn, indicators, matchData, type, accountName, complianceList);
+                        CombinationRule(ruleGroup, ruleBaseList, thresholdJn, indicators, matchData, complianceList);
                     }
                 }
             } else {
                 boolean isGroup = "group".equals(ruleGroup.getRuleType());
                 //匹配组合规则
                 if (isGroup) {
-                    CombinationRule(ruleGroup, ruleBaseList, thresholdObj, indicators, matchData, type, accountName, complianceList);
+                    CombinationRule(ruleGroup, ruleBaseList, thresholdObj, indicators, matchData, complianceList);
                     //匹配单规则
                 } else {
                     RuleBase ruleBase = ruleBaseList.get(0);
@@ -225,8 +228,9 @@ public class RuleGroupServiceImpl extends ServiceImpl<RuleGroupMapper, RuleGroup
                     }
                 }
             }
-
-
+            if (!Check.isNull(complianceList)) {
+                getAndSendMessag(complianceList, ruleGroup, accountName);
+            }
         }
     }
 
@@ -244,7 +248,7 @@ public class RuleGroupServiceImpl extends ServiceImpl<RuleGroupMapper, RuleGroup
      * @throws
      * @author ZHAOXA
      */
-    private void CombinationRule(RuleGroup ruleGroup, List<RuleBase> ruleBaseList, JSONObject thresholdObj, JSONObject indicators, JSONObject matchData, Integer type, String accountName, JSONArray complianceList) {
+    private void CombinationRule(RuleGroup ruleGroup, List<RuleBase> ruleBaseList, JSONObject thresholdObj, JSONObject indicators, JSONObject matchData, JSONArray complianceList) {
         //符合规则的数据集
         JSONArray targetDatas = new JSONArray();
         JSONArray planDatas = new JSONArray();
@@ -266,7 +270,7 @@ public class RuleGroupServiceImpl extends ServiceImpl<RuleGroupMapper, RuleGroup
                 break;
             }
             //账户维度数据
-            if ("account".equals(ruleBase.getRuleDimension())) {
+            if (ACCOUNT.equals(ruleBase.getRuleDimension())) {
                 JSONObject accountEntity = dimensionData.getJSONObject(0);
                 if (MatchLogic.matchCondition(dataType, ruleBase.getRuleCondition(), threshold, accountEntity.getString(ruleBase.getIndicatorCode()), accountEntity)) {
                     accountDatas.add(accountEntity);
@@ -277,12 +281,12 @@ public class RuleGroupServiceImpl extends ServiceImpl<RuleGroupMapper, RuleGroup
                 if (Check.isNull(accountDatas)) {
                     break;
                 }
-            } else if ("plan".equals(ruleBase.getRuleDimension())) {
+            } else if (PLAN.equals(ruleBase.getRuleDimension())) {
                 planDatas = getOKData(planDatas, dimensionData, ruleBase, dataType, threshold);
                 if (Check.isNull(planDatas)) {
                     break;
                 }
-            } else if ("creative".equals(ruleBase.getRuleDimension())) {
+            } else if (CREATIVE.equals(ruleBase.getRuleDimension())) {
                 creativeDatas = getOKData(creativeDatas, dimensionData, ruleBase, dataType, threshold);
                 if (Check.isNull(creativeDatas)) {
                     break;
@@ -299,10 +303,6 @@ public class RuleGroupServiceImpl extends ServiceImpl<RuleGroupMapper, RuleGroup
         JSONArray sendData = MatchLogic.getSendData(accountDatas, planDatas, creativeDatas, targetDatas);
         if (!Check.isNull(sendData)) {
             complianceList.addAll(sendData);
-//            //执行发送
-////            for (int i = 0; i < sendData.size(); i++) {
-////                sendMsg(ruleGroup, , type, accountName);
-////            }
         }
     }
 
@@ -338,7 +338,7 @@ public class RuleGroupServiceImpl extends ServiceImpl<RuleGroupMapper, RuleGroup
         return ruleDatas;
     }
 
-    private void sendMag2(JSONArray complianceList, RuleGroup ruleGroup, String accountName) {
+    private void getAndSendMessag(JSONArray complianceList, RuleGroup ruleGroup, String accountName) {
         Long accountId = complianceList.getJSONObject(0).getLong("accountId");
         if (Check.isNull(accountId)) {
             return;
@@ -353,65 +353,69 @@ public class RuleGroupServiceImpl extends ServiceImpl<RuleGroupMapper, RuleGroup
             boolean isNull = obj.getBoolean("isNull");
             if (isNull) {
                 if (!Check.isNull(obj.getString("creativeId"))) {
-                    //字节小于1900时
-                    if (isNullCreativeJoiner.toString().getBytes().length <= 1900) {
+                    //字节小于1800时
+                    if (isNullCreativeJoiner.toString().getBytes().length <= 1800) {
                         isNullCreativeJoiner.add(obj.getString("creativeId"));
                     } else {
-                        String message = MatchLogic.getMessage(ruleGroup.getGroupName(), accountId, accountName, "creative", isNullCreativeJoiner.toString(), false);
-                        sendMsg(message, ruleGroup, user);
+                        String message = MatchLogic.getMessage(ruleGroup.getGroupName(), accountId, accountName, CREATIVE, isNullCreativeJoiner.toString(), isNull);
+                        sendMsg(message, ruleGroup, user, CREATIVE);
                         isNullCreativeJoiner = new StringJoiner(",");
+                        isNullCreativeJoiner.add(obj.getString("creativeId"));
                     }
                 } else if (!Check.isNull(obj.getLong("planId"))) {
-                    if (isNullPlanJoiner.toString().getBytes().length <= 1900) {
+                    if (isNullPlanJoiner.toString().getBytes().length <= 1800) {
                         isNullPlanJoiner.add(obj.getString("planId"));
                     } else {
-                        String msg = MatchLogic.getMessage(ruleGroup.getGroupName(), accountId, accountName, "plan", isNullPlanJoiner.toString(), false);
-                        sendMsg(msg, ruleGroup, user);
+                        String msg = MatchLogic.getMessage(ruleGroup.getGroupName(), accountId, accountName, PLAN, isNullPlanJoiner.toString(), isNull);
+                        sendMsg(msg, ruleGroup, user, PLAN);
                         isNullPlanJoiner = new StringJoiner(",");
+                        isNullPlanJoiner.add(obj.getString("planId"));
                     }
                 } else {
-                    String msg = MatchLogic.getMessage(ruleGroup.getGroupName(), accountId, accountName, null, null, false);
-                    sendMsg(msg, ruleGroup, user);
+                    String msg = MatchLogic.getMessage(ruleGroup.getGroupName(), accountId, accountName, null, null, isNull);
+                    sendMsg(msg, ruleGroup, user, ACCOUNT);
                 }
             } else {
                 if (!Check.isNull(obj.getString("creativeId"))) {
-                    //字节小于1900时
-                    if (creativeJoiner.toString().getBytes().length <= 1900) {
+                    //字节小于1800时(消息支持最大2048字节)
+                    if (creativeJoiner.toString().getBytes().length <= 1800) {
                         creativeJoiner.add(obj.getString("creativeId"));
                     } else {
-                        String message = MatchLogic.getMessage(ruleGroup.getGroupName(), accountId, accountName, "creative", creativeJoiner.toString(), false);
-                        sendMsg(message, ruleGroup, user);
+                        String message = MatchLogic.getMessage(ruleGroup.getGroupName(), accountId, accountName, CREATIVE, creativeJoiner.toString(), isNull);
+                        sendMsg(message, ruleGroup, user, CREATIVE);
                         creativeJoiner = new StringJoiner(",");
+                        creativeJoiner.add(obj.getString("creativeId"));
                     }
                 } else if (!Check.isNull(obj.getLong("planId"))) {
-                    if (planJoiner.toString().getBytes().length <= 1900) {
+                    if (planJoiner.toString().getBytes().length <= 1800) {
                         planJoiner.add(obj.getString("planId"));
                     } else {
-                        String msg = MatchLogic.getMessage(ruleGroup.getGroupName(), accountId, accountName, "plan", planJoiner.toString(), false);
-                        sendMsg(msg, ruleGroup, user);
+                        String msg = MatchLogic.getMessage(ruleGroup.getGroupName(), accountId, accountName, PLAN, planJoiner.toString(), isNull);
+                        sendMsg(msg, ruleGroup, user, PLAN);
                         planJoiner = new StringJoiner(",");
+                        planJoiner.add(obj.getString("planId"));
                     }
                 } else {
-                    String msg = MatchLogic.getMessage(ruleGroup.getGroupName(), accountId, accountName, null, null, false);
-                    sendMsg(msg, ruleGroup, user);
+                    String msg = MatchLogic.getMessage(ruleGroup.getGroupName(), accountId, accountName, null, null, isNull);
+                    sendMsg(msg, ruleGroup, user, ACCOUNT);
                 }
             }
         }
-        String creativeMsg = MatchLogic.getMessage(ruleGroup.getGroupName(), accountId, "creative", creativeJoiner.toString(), accountName, false);
-        if (!Check.isNull(creativeMsg)) {
-            sendMsg(creativeMsg, ruleGroup, user);
+        if (!Check.isNull(creativeJoiner.toString())) {
+            String creativeMsg = MatchLogic.getMessage(ruleGroup.getGroupName(), accountId, accountName, CREATIVE, creativeJoiner.toString(), false);
+            sendMsg(creativeMsg, ruleGroup, user, CREATIVE);
         }
-        String planMsg = MatchLogic.getMessage(ruleGroup.getGroupName(), accountId, "creative", planJoiner.toString(), accountName, false);
-        if (!Check.isNull(planMsg)) {
-            sendMsg(planMsg, ruleGroup, user);
+        if (!Check.isNull(planJoiner.toString())) {
+            String planMsg = MatchLogic.getMessage(ruleGroup.getGroupName(), accountId, accountName, PLAN, planJoiner.toString(), false);
+            sendMsg(planMsg, ruleGroup, user, PLAN);
         }
-        String isNullCreativeMsg = MatchLogic.getMessage(ruleGroup.getGroupName(), accountId, "creative", isNullCreativeJoiner.toString(), accountName, false);
-        if (!Check.isNull(isNullCreativeMsg)) {
-            sendMsg(isNullCreativeMsg, ruleGroup, user);
+        if (!Check.isNull(isNullCreativeJoiner.toString())) {
+            String isNullCreativeMsg = MatchLogic.getMessage(ruleGroup.getGroupName(), accountId, accountName, CREATIVE, isNullCreativeJoiner.toString(), true);
+            sendMsg(isNullCreativeMsg, ruleGroup, user, CREATIVE);
         }
-        String isNullPlanMsg = MatchLogic.getMessage(ruleGroup.getGroupName(), accountId, "creative", isNullPlanJoiner.toString(), accountName, false);
-        if (!Check.isNull(isNullPlanMsg)) {
-            sendMsg(isNullPlanMsg, ruleGroup, user);
+        if (!Check.isNull(isNullPlanJoiner.toString())) {
+            String isNullPlanMsg = MatchLogic.getMessage(ruleGroup.getGroupName(), accountId, accountName, PLAN, isNullPlanJoiner.toString(), true);
+            sendMsg(isNullPlanMsg, ruleGroup, user, PLAN);
         }
     }
 
@@ -426,9 +430,10 @@ public class RuleGroupServiceImpl extends ServiceImpl<RuleGroupMapper, RuleGroup
      * @throws
      * @author ZHAOXA
      */
-    private void sendMsg(String msg, RuleGroup ruleGroup, JSONObject user) {
-        //TODO 关停操作
-        boolean isPause = false;
+    private void sendMsg(String msg, RuleGroup ruleGroup, JSONObject user, String type) {
+        try {
+            //TODO 关停操作
+            boolean isPause = false;
           /*      "PAUSE".equals(ruleGroup.getOperate());
         if (isPause) {
             if (shutDown(accountId, planId, creativeId, user.getString("id"))) {
@@ -437,42 +442,46 @@ public class RuleGroupServiceImpl extends ServiceImpl<RuleGroupMapper, RuleGroup
             type 1:头条2:快手
         }*/
 //        String msg = MatchLogic.getMsg(ruleGroup, user, obj, isPause, accountName);
-        if (isPause) {
-            msg += "现已被关停,请您及时查看并调整!";
-        } else {
-            msg += "请您及时查看并调整!";
-        }
-        String sendType = ruleGroup.getSendType();
-        if ("SMS".equals(sendType)) {
-
-        } else if ("EMAIL".equals(sendType)) {
+            if (isPause) {
+                msg += "现已被关停,请您及时查看并调整!";
+            } else {
+                msg += "请您及时查看并调整!";
+            }
+            String sendType = ruleGroup.getSendType();
+            if ("SMS".equals(sendType)) {
 
-        } else if ("TEL".equals(sendType)) {
+            } else if ("EMAIL".equals(sendType)) {
+                List<String> mailList = new ArrayList<>();
+                mailList.add(user.getString("email"));
+                SendMailUtil.sendMail(mailList, ruleGroup.getGroupName() + "预警", msg);
+            } else if ("TEL".equals(sendType)) {
 
-        } else {
-            //TODO
-            ISendMessageService sendMessageService = this.sendMessageService;
-//            sendMessageService.sendMessage(user.getString("id"), msg);
-            sendMessageService.sendMessage("1b3deb8258e84df994f1371a51cfc14a", msg);
-            //113dee46c7df464da78c07a985e92cd1 于蒙
-        }
-        if (!Check.isNull(msg)) {
-            AlarmEventSend send = new AlarmEventSend();
-            send.setAlarmDetail(msg);
-            send.setAlarmStatus(NoEn.NO1.valueStr());
-            send.setEventRuleId(ruleGroup.getId());
-            if (msg.contains("预警账户")) {
-                send.setMetricValueCode("account");
-                if (msg.contains("预警计划")) {
-                    send.setMetricValueCode("plan");
-                    if (msg.contains("预警创意")) {
-                        send.setMetricValueCode("creative");
-                    }
+            } else {
+//                for (int i = 0; i < 10000000; i++) {
+//                    sendMessageService.sendMessage("1b3deb8258e84df994f1371a51cfc14a", msg + i);
+//                    Thread.sleep(2000);
+//                }
+                sendMessageService.sendMessage(user.getString("id"), msg);
+                Thread.sleep(200);
+            }
+            if (!Check.isNull(msg)) {
+                AlarmEventSend send = new AlarmEventSend();
+                send.setUserId(user.getString("id"));
+                send.setAlarmDetail(msg.replace("<br/>", ""));
+                send.setAlarmStatus(NoEn.NO1.valueStr());
+                send.setGroupId(ruleGroup.getId());
+                send.setGroupName(ruleGroup.getGroupName());
+                if (CREATIVE.equals(type)) {
+                    send.setRuleDimension(CREATIVE);
+                } else if (PLAN.equals(type)) {
+                    send.setRuleDimension(PLAN);
+                } else {
+                    send.setRuleDimension(ACCOUNT);
                 }
+                alarmEventSendMapper.insert(send);
             }
-            send.setAlarmCondition(ruleGroup.getGroupName());
-            send.setUserId(user.getString("id"));
-            alarmEventSendMapper.insert(send);
+        } catch (Exception e) {
+            log.error("发送消息异常", e);
         }
     }
 

+ 2 - 3
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/WechatApproveAttendanceJob.java

@@ -3,6 +3,7 @@ package cn.com.ctop.job.bytedance.handler;
 
 import cn.com.ctop.oa.modules.service.IWechatNoListService;
 import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.enums.NoEn;
 import com.xxl.job.core.handler.annotation.XxlJob;
 import com.xxl.job.core.log.XxlJobLogger;
 import org.jeecg.common.util.DateUtils;
@@ -35,10 +36,8 @@ public class WechatApproveAttendanceJob {
     public ReturnT<String> execute(String param) throws Exception {
         XxlJobLogger.log("--------异常考勤审批数据入库 start ");
         String initMonth = DateUtils.initDateByMonth();
-        long starttime = DateUtils.timeToStamp(DateUtils.getMonthBefore(DateUtils.NEW_FORMAT, initMonth, -1));
-        long endtime = DateUtils.timeToStamp(initMonth);
         //更新审批状态表
-        wechatNoListService.getNoDateByNo(String.valueOf(starttime), String.valueOf(endtime));
+        wechatNoListService.getNoDateByNo(DateUtils.getMonthBefore(DateUtils.NEW_FORMAT, initMonth, -1), initMonth, NoEn.NO0.valueStr());
         XxlJobLogger.log("--------异常考勤审批数据入库 end ");
         return ReturnT.SUCCESS;
     }

+ 1 - 3
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/WechatAttendanceJob.java

@@ -32,10 +32,8 @@ public class WechatAttendanceJob {
     public ReturnT<String> execute(String params) throws Exception {
         XxlJobLogger.log("--------考勤和人员数据入库 start ");
         String beforeDay = DateUtils.getLastDay(DateUtils.formatDate(new Date()), NoEn.NO1.valueInt());
-        long starttime = DateUtils.timeToStamp(beforeDay + " 00:00:00");
-        long endtime = DateUtils.timeToStamp(beforeDay + " 23:59:59");
         //更新员工打卡明细表
-        wechatCheckinDataService.getCheckinData(String.valueOf(starttime), String.valueOf(endtime));
+        wechatCheckinDataService.getCheckinData(beforeDay + " 00:00:00", beforeDay + " 23:59:59");
         XxlJobLogger.log("--------考勤数据入库 end ");
         //更新人员信息表
         wechatUserInfoService.getUserList();

+ 15 - 3
module-oa/src/main/java/cn/com/ctop/oa/modules/constant/QYWxConstant.java

@@ -1,13 +1,14 @@
 package cn.com.ctop.oa.modules.constant;
 
 public class QYWxConstant {
+    //企业ID
     public static final String QYWX_CORP_ID = "ww24b8a47826f5875f";
-    public static final Integer QYWX_AGENT_ID = 1000004;
+    //okr
     public static final String QYWX_CORP_SECRET = "1YWGDtuZWrQDl6US3OPHG8_pvuNgP1TeUsOmfRk6GmQ";
 
-
-    public static final Integer QYWX_OA_AGENT_ID = 3010011;
+    //打卡
     public static final String QYWX_OA_CORP_SECRET = "MDeiFSCwIlcmcR1zrYvmjNlsoYFGl8I770uuUezWgGE";
+    //审批
     public static final String QYWX_APPROVA_CORP_SECRET = "qlk4nSc1vjxy0AHyX1f5bnGh7y2WtqN9lR__0WJA6zM";
 
 
@@ -19,5 +20,16 @@ public class QYWxConstant {
     public static final String APP_ROVAL_INFO = "https://qyapi.weixin.qq.com/cgi-bin/oa/getapprovalinfo";  //批量获取审批单号
     public static final String APP_ROVAL_DETAIL = "https://qyapi.weixin.qq.com/cgi-bin/oa/getapprovaldetail";  //获取审批申请详情
 
+    /**
+     * 天津优容智汇 企业微信信息
+     */
+    //企业ID
+    public static final String YR_CORP_ID = "wwec72c7e61a7840b2";
+    //考勤统计
+    public static final String YR_CORP_SECRET = "AeykrKAY-OoEM7P46Xr6rJB9aa28BLK9VO2hrS0g3S8";
+    //打卡
+    public static final String YR_OA_CORP_SECRET = "AUhGy8TOTenCbdsxyW-QtrYN7mA5Pj7ou_YF52-M-GE";
+    //审批
+    public static final String YR_APPROVA_CORP_SECRET = "XRw6j6gVCV4oXfFDtheIanp0pf8QLuVgDLQiFx3Fa1E";
 
 }

+ 2 - 1
module-oa/src/main/java/cn/com/ctop/oa/modules/controller/WechatDepartmentController.java

@@ -8,6 +8,7 @@ import com.alibaba.fastjson.JSON;
 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.xxl.job.core.enums.NoEn;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -88,7 +89,7 @@ public class WechatDepartmentController {
     public Result<List<WechatDepartment>> queryList() {
         Result<List<WechatDepartment>> result = new Result<>();
         try {
-            List<WechatDepartment> pageList = wechatDepartmentService.queryList();
+            List<WechatDepartment> pageList = wechatDepartmentService.queryList(NoEn.NO0.valueInt());
             if (!Check.isNull(pageList)) {
                 result.setResult(pageList);
                 result.setSuccess(true);

+ 48 - 5
module-oa/src/main/java/cn/com/ctop/oa/modules/controller/WechatNoListController.java

@@ -46,6 +46,7 @@ import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -267,13 +268,24 @@ public class WechatNoListController {
      * @param requestBody
      * @param response
      */
-    @PostMapping("/excel")
-    public void getExcelReport(HttpServletResponse response, @RequestBody Map<String, Object> paramsMap) {
+    @GetMapping("/excel")
+    public void getExcelReport(HttpServletResponse response, String startTime, String stopTime, String departName, Long departId, String userName, String userId) {
+        Map<String, Object> paramsMap = new HashMap<>();
+        paramsMap.put("startTime", startTime);
+        paramsMap.put("stopTime", stopTime);
+        paramsMap.put("departName", departName);
+        paramsMap.put("departId", departId);
+        paramsMap.put("userName", userName);
+        paramsMap.put("userId", userId);
         List<WechatAttendance> excelData = wechatNoListService.queryAttendanceData(paramsMap);
+        List<WechatAttendance> excelYRData = wechatNoListService.queryYRAttendanceData(paramsMap);
         List<WechatAttendance> overtimeData = wechatNoListService.queryOverTimeData(paramsMap);
+        List<WechatAttendance> overtimeYRData = wechatNoListService.queryYROverTimeData(paramsMap);
         try {
             List<List<Object>> excelList = new ArrayList<>();
+            List<List<Object>> excelYRList = new ArrayList<>();
             List<List<Object>> overtimeExcelList = new ArrayList<>();
+            List<List<Object>> overtimeYRExcelList = new ArrayList<>();
             if (!excelData.isEmpty()) {
                 excelData.forEach(data -> {
                     List<Object> temp = new ArrayList<>();
@@ -303,14 +315,45 @@ public class WechatNoListController {
                     overtimeExcelList.add(temp);
                 });
             }
+            if (!excelYRData.isEmpty()) {
+                excelYRData.forEach(data -> {
+                    List<Object> temp = new ArrayList<>();
+                    temp.add(data.getUserName());
+                    temp.add(data.getDepartName());
+                    temp.add(data.getCheckinDate());
+                    temp.add(data.getCheckinType());
+                    temp.add(data.getExceptionType());
+                    temp.add(data.getCheckinTime());
+                    temp.add(data.getType());
+                    temp.add(data.getStateDuration());
+                    if (!Check.isNull(data.getStatus())) {
+                        temp.add("1".equals(data.getStatus()) ? "审批中" : "已通过");
+                    } else {
+                        temp.add("");
+                    }
+                    excelYRList.add(temp);
+                });
+            }
+            if (!overtimeYRData.isEmpty()) {
+                overtimeYRData.forEach(data -> {
+                    List<Object> temp = new ArrayList<>();
+                    temp.add(data.getUserName());
+                    temp.add(data.getDepartName());
+                    temp.add(data.getCheckinDate());
+                    temp.add(data.getOvertime());
+                    overtimeYRExcelList.add(temp);
+                });
+            }
             OutputStream os = response.getOutputStream();
             ExportExcelUtils eeu = new ExportExcelUtils();
             XSSFWorkbook workbook = new XSSFWorkbook();
             String[] titles = {"姓名", "部门", "考勤日期", "考勤类型", "考勤状态", "考勤时间", "审核状态", "状态时长", "审批状态"};
             String[] overtimeTitles = {"姓名", "部门", "加班日期", "加班时长"};
-            eeu.exportExcelForAttendance(workbook, 0, "异常考勤", titles, excelList);
-            eeu.exportExcel(workbook, 1, "加班考勤", overtimeTitles, overtimeExcelList);
-            HttpUtils.setResponseHeader(response, "考勤记录.xlsx");
+            eeu.exportExcelForAttendance(workbook, 0, "汇创异常考勤", titles, excelList);
+            eeu.exportExcel(workbook, 1, "汇创加班考勤", overtimeTitles, overtimeExcelList);
+            eeu.exportExcelForAttendance(workbook, 2, "优容异常考勤", titles, excelYRList);
+            eeu.exportExcel(workbook, 3, "优容加班考勤", overtimeTitles, overtimeYRExcelList);
+            HttpUtils.setResponseHeader(response, "clockIn.xlsx");
             workbook.write(os);
             os.flush();
             os.close();

+ 2 - 0
module-oa/src/main/java/cn/com/ctop/oa/modules/entity/WechatCheckinData.java

@@ -125,6 +125,8 @@ public class WechatCheckinData {
 
     private Integer overtimeOrNot; // 是否加班
     private Double overtime; // 加班时长
+    // 数据类型
+    private Integer dataType;
 
 
     /**

+ 2 - 0
module-oa/src/main/java/cn/com/ctop/oa/modules/entity/WechatDepartment.java

@@ -56,6 +56,8 @@ public class WechatDepartment {
     @Excel(name = "排序", width = 15)
     @ApiModelProperty(value = "排序")
     private String departOrder;
+    // 数据类型
+    private Integer dataType;
     /**
      * createTime
      */

+ 2 - 0
module-oa/src/main/java/cn/com/ctop/oa/modules/entity/WechatNoList.java

@@ -58,6 +58,8 @@ public class WechatNoList {
 	/**结束时间*/
     @ApiModelProperty(value = "结束时间")
 	private Date newEnd;
+	// 数据类型
+	private Integer dataType;
 	/**createTime*/
     @ApiModelProperty(value = "createTime")
 	private Date createTime;

+ 2 - 0
module-oa/src/main/java/cn/com/ctop/oa/modules/entity/WechatUserList.java

@@ -50,6 +50,8 @@ public class WechatUserList {
     @Excel(name = "部门id", width = 15)
     @ApiModelProperty(value = "部门id")
     private String departId;
+    // 数据类型
+    private Integer dataType;
     /**
      * createTime
      */

+ 1 - 1
module-oa/src/main/java/cn/com/ctop/oa/modules/enums/DepartEnum.java

@@ -10,7 +10,7 @@ public enum DepartEnum {
     depart2("头条事业部"),
     depart3("销售部"),
     depart4("研发中心部"),
-    depart5("内容中心部"),
+  //  depart5("内容中心部"),
     depart6("媒介部"),
     depart7("渠道部"),
     depart8("制片部"),

+ 1 - 1
module-oa/src/main/java/cn/com/ctop/oa/modules/mapper/WechatDepartmentMapper.java

@@ -14,5 +14,5 @@ import java.util.List;
  */
 public interface WechatDepartmentMapper extends BaseMapper<WechatDepartment> {
 
-    List<WechatDepartment> queryList();
+    List<WechatDepartment> queryList(Integer dataType);
 }

+ 3 - 0
module-oa/src/main/java/cn/com/ctop/oa/modules/mapper/WechatNoListMapper.java

@@ -18,6 +18,9 @@ public interface WechatNoListMapper extends BaseMapper<WechatNoList> {
 
     List<WechatAttendance> queryAttendanceData(Map<String, Object> paramsMap);
 
+    List<WechatAttendance> queryYRAttendanceData(Map<String, Object> paramsMap);
+
     List<WechatAttendance> queryOverTimeData(Map<String, Object> paramsMap);
 
+    List<WechatAttendance> queryYROverTimeData(Map<String, Object> paramsMap);
 }

+ 3 - 0
module-oa/src/main/java/cn/com/ctop/oa/modules/mapper/WechatUserListMapper.java

@@ -3,6 +3,8 @@ package cn.com.ctop.oa.modules.mapper;
 import cn.com.ctop.oa.modules.entity.WechatUserList;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
+import java.util.List;
+
 /**
  * 企业微信用户
  *
@@ -12,4 +14,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface WechatUserListMapper extends BaseMapper<WechatUserList> {
 
+    List<WechatUserList> queryList(int dataType);
 }

+ 16 - 17
module-oa/src/main/java/cn/com/ctop/oa/modules/mapper/xml/WechatCheckinDataMapper.xml

@@ -49,22 +49,21 @@
         FROM ctop_wechat_checkin_data as ck
         LEFT JOIN ctop_wechat_user_list as us ON ck.user_id = us.user_id
         LEFT JOIN ctop_wechat_department as dpt ON dpt.depart_id = us.depart_id
-        <where>
-            <if test="userId != null and userId != '' ">
-                and ck.user_id = #{userId}
-            </if>
-            <if test="departId != null and departId != '' ">
-                and ck.depart_id = #{departId}
-            </if>
-            <if test="userName != null ">
-                and us.user_name like concat(#{userName},"%")
-            </if>
-            <if test="startTime != null">
-                and ck.checkin_time &gt;= #{startTime}
-            </if>
-            <if test="stopTime != null ">
-                and ck.checkin_time &lt;= #{stopTime}
-            </if>
-        </where>
+        where us.data_type = 0
+        <if test="userId != null and userId != '' ">
+            and ck.user_id = #{userId}
+        </if>
+        <if test="departId != null and departId != '' ">
+            and ck.depart_id = #{departId}
+        </if>
+        <if test="userName != null ">
+            and us.user_name like concat(#{userName},"%")
+        </if>
+        <if test="startTime != null">
+            and ck.checkin_time &gt;= #{startTime}
+        </if>
+        <if test="stopTime != null ">
+            and ck.checkin_time &lt;= #{stopTime}
+        </if>
     </select>
 </mapper>

+ 1 - 0
module-oa/src/main/java/cn/com/ctop/oa/modules/mapper/xml/WechatDepartmentMapper.xml

@@ -7,5 +7,6 @@
         SELECT
             *
         FROM ctop_wechat_department
+        where data_type = #{dataType}
     </select>
 </mapper>

+ 91 - 0
module-oa/src/main/java/cn/com/ctop/oa/modules/mapper/xml/WechatNoListMapper.xml

@@ -31,6 +31,60 @@
         LEFT JOIN ctop_wechat_no_list AS nl ON nl.user_id = us.user_id and
         nl.new_begin Like CONCAT(DATE_FORMAT(ck.checkin_time,'%Y-%m-%d'),'%')
         WHERE ck.exception_type!='' and ISNULL(ck.exception_type)= 0
+        and us.data_type = dpt.data_type
+        and us.data_type = 0
+        <if test="userId != null and userId != '' ">
+            and us.user_id = #{userId}
+        </if>
+        <if test="userName != null and userName != '' ">
+            and us.user_Name LIKE CONCAT("%",#{userName},"%")
+        </if>
+        <if test="departId != null and departId != '' ">
+            and dpt.depart_id = #{departId}
+        </if>
+        <if test="departName != null and departName != '' ">
+            and dpt.depart_name LIKE CONCAT("%",#{departName},"%")
+        </if>
+        <if test="startTime != null">
+            and ck.checkin_time &gt;= #{startTime}
+        </if>
+        <if test="stopTime != null ">
+            and ck.checkin_time &lt;= #{stopTime}
+        </if>
+        order by us.depart_id,us.user_name ,ck.checkin_time
+    </select>
+
+    <select id="queryYRAttendanceData" resultType="cn.com.ctop.oa.modules.entity.WechatAttendance">
+        SELECT DISTINCT
+        us.user_id AS userId,
+        us.user_name AS userName,
+        dpt.depart_id AS departId,
+        dpt.depart_name AS departName,
+        DATE_FORMAT(ck.checkin_time,'%Y-%m-%d') AS checkinDate,
+        ck.checkin_type AS checkinType,
+        ck.exception_type AS exceptionType,
+        nl.status as status,
+        DATE_FORMAT(ck.checkin_time, '%Y-%m-%d %H:%i:%s') AS checkinTime,
+        case when nl.type !='' THEN nl.type
+        when ck.checkin_type ='上班打卡' AND exception_type ='时间异常' then '迟到'
+        when ck.checkin_type ='下班打卡' AND exception_type ='时间异常' then '早退'
+        end AS type,
+        case when nl.type!=''and nl.type !='补卡' then CONCAT(nl.new_duration,' h')
+        when ck.checkin_type ='上班打卡'and ck.exception_type ='时间异常' then
+        CONCAT(TIMESTAMPDIFF(MINUTE,DATE_FORMAT(CONCAT(DATE_FORMAT(ck.checkin_time,'%Y-%m-%d '),'10:00:00'),'%Y-%m-%d
+        %H:%i:%s'),ck.checkin_time),' min')
+        when ck.checkin_type ='下班打卡'and ck.exception_type ='时间异常' then
+        CONCAT(TIMESTAMPDIFF(MINUTE,ck.checkin_time,DATE_FORMAT(CONCAT(DATE_FORMAT(ck.checkin_time,'%Y-%m-%d
+        '),'19:00:00'),'%Y-%m-%d %H:%i:%s')),' min')
+        end AS stateDuration
+        FROM ctop_wechat_user_list AS us
+        LEFT JOIN ctop_wechat_department AS dpt ON us.depart_id = dpt.depart_id
+        LEFT JOIN ctop_wechat_checkin_data AS ck ON ck.user_id = us.user_id
+        LEFT JOIN ctop_wechat_no_list AS nl ON nl.user_id = us.user_id and
+        nl.new_begin Like CONCAT(DATE_FORMAT(ck.checkin_time,'%Y-%m-%d'),'%')
+        WHERE ck.exception_type!='' and ISNULL(ck.exception_type)= 0
+        and us.data_type = dpt.data_type
+        and us.data_type = 1
         <if test="userId != null and userId != '' ">
             and us.user_id = #{userId}
         </if>
@@ -65,6 +119,43 @@
         LEFT JOIN ctop_wechat_user_list as us ON ck.user_id = us.user_id
         LEFT JOIN ctop_wechat_department as dpt ON dpt.depart_id = us.depart_id
         WHERE ck.overtime_or_not = 1
+        and us.data_type = dpt.data_type
+        and us.data_type = 0
+        <if test="userId != null and userId != '' ">
+            and us.user_id = #{userId}
+        </if>
+        <if test="userName != null and userName != '' ">
+            and us.user_Name LIKE CONCAT("%",#{userName},"%")
+        </if>
+        <if test="departId != null and departId != '' ">
+            and dpt.depart_id = #{departId}
+        </if>
+        <if test="departName != null and departName != '' ">
+            and dpt.depart_name LIKE CONCAT("%",#{departName},"%")
+        </if>
+        <if test="startTime != null">
+            and ck.checkin_time &gt;= #{startTime}
+        </if>
+        <if test="stopTime != null ">
+            and ck.checkin_time &lt;= #{stopTime}
+        </if>
+        order by us.depart_id,us.user_name ,ck.checkin_time
+    </select>
+
+    <select id="queryYROverTimeData" resultType="cn.com.ctop.oa.modules.entity.WechatAttendance">
+        SELECT
+        us.user_id AS userId,
+        us.user_name AS userName,
+        dpt.depart_id AS departId,
+        dpt.depart_name AS departName,
+        DATE_FORMAT(ck.checkin_time,'%Y-%m-%d') AS checkinDate,
+        CONCAT(ck.overtime,' h') AS overtime
+        FROM ctop_wechat_checkin_data as ck
+        LEFT JOIN ctop_wechat_user_list as us ON ck.user_id = us.user_id
+        LEFT JOIN ctop_wechat_department as dpt ON dpt.depart_id = us.depart_id
+        WHERE ck.overtime_or_not = 1
+        and us.data_type = dpt.data_type
+        and us.data_type = 1
         <if test="userId != null and userId != '' ">
             and us.user_id = #{userId}
         </if>

+ 6 - 1
module-oa/src/main/java/cn/com/ctop/oa/modules/mapper/xml/WechatUserListMapper.xml

@@ -1,5 +1,10 @@
 <?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.oa.modules.mapper.WechatUserListMapper">
-
+    <select id="queryList" resultType="cn.com.ctop.oa.modules.entity.WechatUserList">
+        SELECT
+            *
+        FROM ctop_wechat_user_list
+        where data_type = #{dataType}
+    </select>
 </mapper>

+ 3 - 0
module-oa/src/main/java/cn/com/ctop/oa/modules/service/IWechatCheckinDataService.java

@@ -14,7 +14,10 @@ import java.util.Map;
  * @Version: V1.0
  */
 public interface IWechatCheckinDataService extends IService<WechatCheckinData> {
+
     void getCheckinData(String starttime, String endtime);
 
+    void getYRCheckinData(String starttime, String endtime);
+
     PageInfo<WechatCheckinSubData> selectPageList(Map<String, Object> paramsMap);
 }

+ 1 - 1
module-oa/src/main/java/cn/com/ctop/oa/modules/service/IWechatDepartmentService.java

@@ -14,5 +14,5 @@ import java.util.List;
 public interface IWechatDepartmentService extends IService<WechatDepartment> {
     void getDepartment();
 
-    List<WechatDepartment> queryList();
+    List<WechatDepartment> queryList(Integer dataType);
 }

+ 5 - 12
module-oa/src/main/java/cn/com/ctop/oa/modules/service/IWechatNoListService.java

@@ -16,17 +16,6 @@ import java.util.Map;
  * @Version: V1.0
  */
 public interface IWechatNoListService extends IService<WechatNoList> {
-    /**
-     * 批量获取审批单号,单号!
-     *
-     * @param page      查询起始数,分页查询游标,默认为0
-     * @param starttime 审批单提交的时间范围,开始时间,UNix时间戳
-     * @param endtime   批单提交的时间范围,结束时间,Unix时间戳
-     * @return com.alibaba.fastjson.JSONObject
-     * @throws
-     * @author ZHAOXA
-     */
-    JSONObject getNoList(Integer page, String starttime, String endtime);
 
     /**
      * 审批申请数据入库
@@ -37,7 +26,7 @@ public interface IWechatNoListService extends IService<WechatNoList> {
      * @throws
      * @author ZHAOXA
      */
-    void getNoDateByNo(String starttime, String endtime);
+    void getNoDateByNo(String starttime, String endtime,String dataType);
 
     List<WechatAttendance> queryAttendanceData(Map<String, Object> paramsMap);
 
@@ -46,4 +35,8 @@ public interface IWechatNoListService extends IService<WechatNoList> {
     PageInfo<WechatAttendance> selectNoListPage(Map<String, Object> paramsMap);
 
     PageInfo<WechatAttendance> selectOverTimePage(Map<String, Object> paramsMap);
+
+    List<WechatAttendance> queryYRAttendanceData(Map<String, Object> paramsMap);
+
+    List<WechatAttendance> queryYROverTimeData(Map<String, Object> paramsMap);
 }

+ 23 - 6
module-oa/src/main/java/cn/com/ctop/oa/modules/service/IWechatTokenService.java

@@ -3,17 +3,34 @@ package cn.com.ctop.oa.modules.service;
 import java.util.Map;
 
 public interface IWechatTokenService {
+    /**
+     * 获取okr秘钥
+     */
     Map<String, Object> getQYWXAccessToken();
 
+    /**
+     * 打卡信息token
+     */
     Map<String, Object> getOAAccessToken();
 
     /**
-     * 审批token
-     *
-     * @return java.util.Map<java.lang.String, java.lang.Object>
-     * @throws
-     * @author ZHAOXA
-     * @Param []
+     * 审批信息token
      */
     Map<String, Object> getApprovaAccessToken();
+
+    /**
+     * 获取优容公司秘钥
+     */
+    Map<String, Object> getYRCompanyToken();
+
+    /**
+     * 优容打卡信息token
+     */
+    Map<String, Object> getYROAToken();
+
+    /**
+     * 优容审批信息token
+     */
+    Map<String, Object> getYRApprovaToken();
+
 }

+ 6 - 0
module-oa/src/main/java/cn/com/ctop/oa/modules/service/IWechatUserListService.java

@@ -3,6 +3,8 @@ package cn.com.ctop.oa.modules.service;
 import cn.com.ctop.oa.modules.entity.WechatUserList;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * @Description: 企业微信用户
  * @Author: jeecg-boot
@@ -11,5 +13,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IWechatUserListService extends IService<WechatUserList> {
     void getUserList();
+
+    void getYRUserList();
+
+    List<WechatUserList> queryList(int dataType);
 }
 

+ 87 - 3
module-oa/src/main/java/cn/com/ctop/oa/modules/service/impl/WechatCheckinDataServiceImpl.java

@@ -52,7 +52,7 @@ public class WechatCheckinDataServiceImpl extends ServiceImpl<WechatCheckinDataM
                 log.error("员工考勤获取token失败,返回信息:{}", qywxAccessToken.get(MESSAGE));
                 throw new Exception("员工考勤获取token失败");
             }
-            List<WechatUserList> list = userListService.list();
+            List<WechatUserList> list = userListService.queryList(NoEn.NO0.valueInt());
             if (Check.isNull(list)) {
                 return;
             }
@@ -64,8 +64,8 @@ public class WechatCheckinDataServiceImpl extends ServiceImpl<WechatCheckinDataM
                 JSONArray userArr = new JSONArray();
                 userArr.add(userId);
                 params.put("useridlist", userArr);
-                params.put(API_START_TIME, starttime);
-                params.put(API_END_TIME, endtime);
+                params.put(API_START_TIME, DateUtils.timeToStamp(starttime));
+                params.put(API_END_TIME, DateUtils.timeToStamp(endtime));
                 String resultStr = HttpUtils.httpPostRequestTest(QYWxConstant.QYWX_CHECKIN_DATA + "?access_token=" + qywxAccessToken.get(ACCESS_TOKEN), params.toJSONString(), null);
                 JSONObject resultJson = JSONObject.parseObject(resultStr);
                 if (resultJson.getInteger(ERR_CODE) == 0) {
@@ -125,6 +125,90 @@ public class WechatCheckinDataServiceImpl extends ServiceImpl<WechatCheckinDataM
         }
     }
 
+
+    @Override
+    public void getYRCheckinData(String starttime, String endtime) {
+        try {
+            Map<String, Object> qywxAccessToken = tokenService.getYROAToken();
+            if ((Integer) qywxAccessToken.get(CODE) != 0) {
+                log.error("员工考勤获取token失败,返回信息:{}", qywxAccessToken.get(MESSAGE));
+                throw new Exception("员工考勤获取token失败");
+            }
+            List<WechatUserList> list = userListService.queryList(NoEn.NO1.valueInt());
+            if (Check.isNull(list)) {
+                return;
+            }
+            for (WechatUserList userList : list) {
+                JSONObject params = new JSONObject();
+                String userId = userList.getUserId();
+                String departId = userList.getDepartId();
+                params.put("opencheckindatatype", 3);
+                JSONArray userArr = new JSONArray();
+                userArr.add(userId);
+                params.put("useridlist", userArr);
+                params.put(API_START_TIME, DateUtils.timeToStamp(starttime));
+                params.put(API_END_TIME, DateUtils.timeToStamp(endtime));
+                String resultStr = HttpUtils.httpPostRequestTest(QYWxConstant.QYWX_CHECKIN_DATA + "?access_token=" + qywxAccessToken.get(ACCESS_TOKEN), params.toJSONString(), null);
+                JSONObject resultJson = JSONObject.parseObject(resultStr);
+                if (resultJson.getInteger(ERR_CODE) == 0) {
+                    JSONArray checkindata = resultJson.getJSONArray("checkindata");
+                    if (!Check.isNull(checkindata)) {
+                        StringBuffer buf = null;
+                        String checkinType = "";
+                        String checkinTypeCode = "";
+                        for (int i = 0; i < checkindata.size(); i++) {
+                            JSONObject jsonObject = checkindata.getJSONObject(i);
+                            if (!Check.isNull(jsonObject)) {
+                                WechatCheckinData checkinData = new WechatCheckinData();
+                                checkinType = jsonObject.getString("checkin_type");
+                                //1上班,2下班
+                                checkinTypeCode = "上班打卡".equals(checkinType) ? NoEn.NO1.valueStr() : NoEn.NO2.valueStr();
+                                //下班打卡时间
+                                Long checkinTimeStamp = jsonObject.getLong("checkin_time");
+                                Date checkDate = DateUtils.stampToTime(checkinTimeStamp);
+                                String dateStr = DateUtils.formatDate(checkDate);
+                                long dateLong = DateUtils.timeToStamp(dateStr + DAY_BEGIN);
+                                buf = new StringBuffer();
+                                String id = buf.append(userId).append("_").append(checkinTypeCode).append("_").append(dateLong).toString();
+                                checkinData.setId(id);
+                                checkinData.setDepartId(departId);
+                                checkinData.setUserId(userId);
+                                checkinData.setCheckinType(checkinType);
+                                checkinData.setCheckinTime(checkDate);
+                                Long dateStamp = DateUtils.timeToStamp(dateStr + " 21:30:00"); // 每天九点半时间戳
+                                if (checkinTimeStamp >= dateStamp) {
+                                    checkinData.setOvertimeOrNot(1);
+                                    String overtimeStr = DateUtils.formatDate(checkDate) + " 19:00:00";
+                                    Long overtimeStamp = DateUtils.timeToStamp(overtimeStr); // 每天九点半时间戳
+                                    Double overtime = Double.valueOf(checkinTimeStamp - overtimeStamp) / 3600;
+                                    checkinData.setOvertime(overtime);
+                                }
+                                checkinData.setWifiname(jsonObject.getString("wifiname"));
+                                checkinData.setNotes(jsonObject.getString("notes"));
+                                checkinData.setLat(jsonObject.getString("lng"));
+                                checkinData.setLocationDetail(jsonObject.getString("location_detail"));
+                                checkinData.setGroupName(jsonObject.getString("groupname"));
+                                checkinData.setDeviceid(jsonObject.getString("deviceid"));
+                                checkinData.setExceptionType(jsonObject.getString("exception_type"));
+                                checkinData.setLocationTitle(jsonObject.getString("location_title"));
+                                checkinData.setWifimac(jsonObject.getString("wifimac"));
+                                checkinData.setMediaids(jsonObject.getJSONArray("mediaids").toJSONString());
+                                checkinData.setLat(jsonObject.getString("lat"));
+                                checkinData.setDataType(NoEn.NO1.valueInt());
+                                this.saveOrUpdate(checkinData);
+                            }
+                        }
+                    }
+                } else {
+                    log.error("获取打卡数据异常,返回数据-> {} ;入参-> {}", resultJson, params.toJSONString());
+                }
+            }
+        } catch (Exception e) {
+            log.error("员工考勤入库异常,", e);
+        }
+    }
+
+
     @Override
     public PageInfo<WechatCheckinSubData> selectPageList(Map<String, Object> paramsMap) {
         Integer pageNo = (Integer) paramsMap.get(PAGE_NO);

+ 4 - 2
module-oa/src/main/java/cn/com/ctop/oa/modules/service/impl/WechatDepartmentServiceImpl.java

@@ -11,6 +11,7 @@ import cn.com.ctop.oa.modules.service.IWechatTokenService;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xxl.job.core.enums.NoEn;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -79,7 +80,8 @@ public class WechatDepartmentServiceImpl extends ServiceImpl<WechatDepartmentMap
     }
 
     @Override
-    public List<WechatDepartment> queryList() {
-        return wechatDepartmentMapper.queryList();
+    public List<WechatDepartment> queryList(Integer dataType) {
+        return wechatDepartmentMapper.queryList(dataType);
     }
+
 }

+ 75 - 41
module-oa/src/main/java/cn/com/ctop/oa/modules/service/impl/WechatNoListServiceImpl.java

@@ -54,8 +54,11 @@ public class WechatNoListServiceImpl extends ServiceImpl<WechatNoListMapper, Wec
      * @author ZHAOXA
      * @Param []
      */
-    private String getToken() throws Exception {
+    private String getToken(String dataType) throws Exception {
         Map<String, Object> approvaAccessToken = tokenService.getApprovaAccessToken();
+        if (NoEn.NO1.valueStr().equals(dataType)) {
+            approvaAccessToken = tokenService.getYRApprovaToken();
+        }
         if ((Integer) approvaAccessToken.get("code") != 0) {
             log.error("企业微信获取token失败,返回信息:{}", approvaAccessToken.get("message"));
             throw new Exception("企业微信获取token失败");
@@ -64,47 +67,14 @@ public class WechatNoListServiceImpl extends ServiceImpl<WechatNoListMapper, Wec
     }
 
     @Override
-    public JSONObject getNoList(Integer page, String starttime, String endtime) {
-        try {
-            JSONObject params = new JSONObject();
-            params.put("starttime", starttime);
-            params.put("endtime", endtime);
-            params.put("cursor", page);
-            params.put("size", 100);
-            StringBuffer buf = new StringBuffer();
-            //批量获取审批单号 URL
-            buf.append(QYWxConstant.APP_ROVAL_INFO).append("?access_token=").append(getToken());
-            String resultStr = HttpUtils.httpPostRequestTest(buf.toString(), params.toJSONString(), null);
-            JSONObject resultJson = JSONObject.parseObject(resultStr);
-            Integer errcode = resultJson.getInteger("errcode");
-            if (errcode == 0) {
-                return resultJson;
-            } else {
-                throw new Exception("批量获取审批单号");
-            }
-        } catch (Exception e) {
-            log.error("批量获取审批单号异常", e);
-        }
-        return new JSONObject();
-    }
-
-    //递归获取审批数据
-    private JSONArray getAllNoList(Integer page, JSONArray spNoList, String starttime, String endtime) {
-        JSONObject data = getNoList(page, starttime, endtime);
-        spNoList.addAll(data.getJSONArray("sp_no_list"));
-        Integer nextCursor = data.getInteger("next_cursor");
-        if (!Check.isNull(nextCursor)) {
-            return getAllNoList(nextCursor, spNoList, starttime, endtime);
-        }
-        return spNoList;
-    }
-
-    @Override
-    public void getNoDateByNo(String starttime, String endtime) {
+    public void getNoDateByNo(String starttime, String endtime, String dataType) {
         Map<String, Object> returnMap = new HashMap<>();
         try {
+            long start = DateUtils.timeToStamp(starttime);
+            long end = DateUtils.timeToStamp(endtime);
+            String token = getToken(dataType);
             Integer page = 0;
-            JSONArray noList = getAllNoList(page, new JSONArray(), starttime, endtime);
+            JSONArray noList = getAllNoList(page, new JSONArray(), start, end, token);
             boolean sleep = false;
             if (noList.size() > 600) {
                 sleep = true;
@@ -112,14 +82,14 @@ public class WechatNoListServiceImpl extends ServiceImpl<WechatNoListMapper, Wec
             if (!Check.isNull(noList)) {
                 StringBuffer buf = new StringBuffer();
                 //获取审批申请详情 URL;
-                buf.append(QYWxConstant.APP_ROVAL_DETAIL).append("?access_token=").append(getToken());
+                buf.append(QYWxConstant.APP_ROVAL_DETAIL).append("?access_token=").append(token);
                 String userId = null;
                 Map<String, String> parameterMap = null;
                 for (Object spNo : noList) {
                     parameterMap = new HashMap<>();
                     //接口频率限制 600次/分钟
                     if (sleep) {
-                        Thread.sleep(100);
+                        Thread.sleep(105);
                     }
                     JSONObject params = new JSONObject();
                     params.put("sp_no", spNo);
@@ -156,6 +126,9 @@ public class WechatNoListServiceImpl extends ServiceImpl<WechatNoListMapper, Wec
                             }
                             noEntity.setType(parameterMap.get(TYPE));
                             noEntity.setNewDuration(parameterMap.get("newDuration"));
+                            if (NoEn.NO1.valueStr().equals(dataType)) {
+                                noEntity.setDataType(NoEn.NO1.valueInt());
+                            }
                             wechatNoListMapper.insert(noEntity);
                         }
                     }
@@ -168,6 +141,51 @@ public class WechatNoListServiceImpl extends ServiceImpl<WechatNoListMapper, Wec
         }
     }
 
+    //递归获取审批数据
+    private JSONArray getAllNoList(Integer page, JSONArray spNoList, Long starttime, Long endtime, String token) {
+        JSONObject data = getNoList(page, starttime, endtime, token);
+        spNoList.addAll(data.getJSONArray("sp_no_list"));
+        Integer nextCursor = data.getInteger("next_cursor");
+        if (!Check.isNull(nextCursor)) {
+            return getAllNoList(nextCursor, spNoList, starttime, endtime, token);
+        }
+        return spNoList;
+    }
+
+    /**
+     * 批量获取审批单号,单号!
+     *
+     * @param page      查询起始数,分页查询游标,默认为0
+     * @param starttime 审批单提交的时间范围,开始时间,UNix时间戳
+     * @param endtime   批单提交的时间范围,结束时间,Unix时间戳
+     * @return com.alibaba.fastjson.JSONObject
+     * @throws
+     * @author ZHAOXA
+     */
+    private JSONObject getNoList(Integer page, Long starttime, Long endtime, String token) {
+        try {
+            JSONObject params = new JSONObject();
+            params.put("starttime", starttime);
+            params.put("endtime", endtime);
+            params.put("cursor", page);
+            params.put("size", 100);
+            StringBuffer buf = new StringBuffer();
+            //批量获取审批单号 URL
+            buf.append(QYWxConstant.APP_ROVAL_INFO).append("?access_token=").append(token);
+            String resultStr = HttpUtils.httpPostRequestTest(buf.toString(), params.toJSONString(), null);
+            JSONObject resultJson = JSONObject.parseObject(resultStr);
+            Integer errcode = resultJson.getInteger("errcode");
+            if (errcode == 0) {
+                return resultJson;
+            } else {
+                throw new Exception("批量获取审批单号");
+            }
+        } catch (Exception e) {
+            log.error("批量获取审批单号异常", e);
+        }
+        return new JSONObject();
+    }
+
     /**
      * 获取审批状态数据
      *
@@ -291,6 +309,16 @@ public class WechatNoListServiceImpl extends ServiceImpl<WechatNoListMapper, Wec
         return list;
     }
 
+    @Override
+    public List<WechatAttendance> queryYRAttendanceData(Map<String, Object> paramsMap) {
+        finishingTime(paramsMap);
+        List<WechatAttendance> list = wechatNoListMapper.queryYRAttendanceData(paramsMap);
+        if (!Check.isNull(list)) {
+            checkOverTimeData(list);
+        }
+        return list;
+    }
+
     /**
      * 整理时间
      *
@@ -319,6 +347,12 @@ public class WechatNoListServiceImpl extends ServiceImpl<WechatNoListMapper, Wec
     }
 
     @Override
+    public List<WechatAttendance> queryYROverTimeData(Map<String, Object> paramsMap) {
+        finishingTime(paramsMap);
+        return wechatNoListMapper.queryYROverTimeData(paramsMap);
+    }
+
+    @Override
     public PageInfo<WechatAttendance> selectNoListPage(Map<String, Object> paramsMap) {
         finishingTime(paramsMap);
         Integer pageNo = (Integer) paramsMap.get(PAGE_NO);

+ 93 - 4
module-oa/src/main/java/cn/com/ctop/oa/modules/service/impl/WechatTokenServiceImpl.java

@@ -12,6 +12,10 @@ import java.util.TreeMap;
 
 @Service
 public class WechatTokenServiceImpl implements IWechatTokenService {
+    /**
+     * 获取okr秘钥
+     */
+    @Override
     public Map<String, Object> getQYWXAccessToken() {
         Map<String, Object> returnMap = new HashMap<>();
         try {
@@ -35,6 +39,10 @@ public class WechatTokenServiceImpl implements IWechatTokenService {
         return returnMap;
     }
 
+    /**
+     * 打卡信息token
+     */
+    @Override
     public Map<String, Object> getOAAccessToken() {
         Map<String, Object> returnMap = new HashMap<>();
         try {
@@ -59,10 +67,7 @@ public class WechatTokenServiceImpl implements IWechatTokenService {
     }
 
     /**
-     * @return java.util.Map<java.lang.String, java.lang.Object>
-     * @throws 获取审批
-     * @author ZHAOXA
-     * @Param []
+     * 审批信息token
      */
     @Override
     public Map<String, Object> getApprovaAccessToken() {
@@ -88,4 +93,88 @@ public class WechatTokenServiceImpl implements IWechatTokenService {
         return returnMap;
     }
 
+    //--------------↓-天津优容-↓--------------
+
+    /**
+     * 获取优容公司秘钥
+     */
+    @Override
+    public Map<String, Object> getYRCompanyToken() {
+        Map<String, Object> returnMap = new HashMap<>();
+        try {
+            TreeMap<String, Object> params = new TreeMap<>();
+            params.put("corpid", QYWxConstant.YR_CORP_ID);
+            params.put("corpsecret", QYWxConstant.YR_CORP_SECRET);
+            String resultStr = HttpUtils.httpGetRequest(QYWxConstant.QYWX_API_URL + QYWxConstant.QYWX_GET_TOKEN, null, params);
+            JSONObject resultJson = JSONObject.parseObject(resultStr);
+            Integer errcode = resultJson.getInteger("errcode");
+            if (errcode == 0) {
+                returnMap.put("code", 0);
+                returnMap.put("accessToken", resultJson.getString("access_token"));
+            } else {
+                returnMap.put("code", errcode);
+                returnMap.put("message", resultJson.getString("errmsg"));
+            }
+        } catch (Exception e) {
+            returnMap.put("code", -1);
+            returnMap.put("message", "系统错误");
+        }
+        return returnMap;
+    }
+
+    /**
+     * 优容打卡信息token
+     */
+    @Override
+    public Map<String, Object> getYROAToken() {
+        Map<String, Object> returnMap = new HashMap<>();
+        try {
+            TreeMap<String, Object> params = new TreeMap<>();
+            params.put("corpid", QYWxConstant.YR_CORP_ID);
+            params.put("corpsecret", QYWxConstant.YR_OA_CORP_SECRET);
+            String resultStr = HttpUtils.httpGetRequest(QYWxConstant.QYWX_API_URL + QYWxConstant.QYWX_GET_TOKEN, null, params);
+            JSONObject resultJson = JSONObject.parseObject(resultStr);
+            Integer errcode = resultJson.getInteger("errcode");
+            if (errcode == 0) {
+                returnMap.put("code", 0);
+                returnMap.put("accessToken", resultJson.getString("access_token"));
+            } else {
+                returnMap.put("code", errcode);
+                returnMap.put("message", resultJson.getString("errmsg"));
+            }
+        } catch (Exception e) {
+            returnMap.put("code", -1);
+            returnMap.put("message", "系统错误");
+        }
+        return returnMap;
+    }
+
+    /**
+     * 优容审批信息token
+     */
+    @Override
+    public Map<String, Object> getYRApprovaToken() {
+        Map<String, Object> returnMap = new HashMap<>();
+        try {
+            TreeMap<String, Object> params = new TreeMap<>();
+            params.put("corpid", QYWxConstant.YR_CORP_ID);
+            params.put("corpsecret", QYWxConstant.YR_APPROVA_CORP_SECRET);
+            String resultStr = HttpUtils.httpGetRequest(QYWxConstant.QYWX_API_URL + QYWxConstant.QYWX_GET_TOKEN, null, params);
+            JSONObject resultJson = JSONObject.parseObject(resultStr);
+            Integer errcode = resultJson.getInteger("errcode");
+            if (errcode == 0) {
+                returnMap.put("code", 0);
+                returnMap.put("accessToken", resultJson.getString("access_token"));
+            } else {
+                returnMap.put("code", errcode);
+                returnMap.put("message", resultJson.getString("errmsg"));
+            }
+        } catch (Exception e) {
+            returnMap.put("code", -1);
+            returnMap.put("message", "系统错误");
+        }
+        return returnMap;
+    }
+
+
 }

+ 58 - 1
module-oa/src/main/java/cn/com/ctop/oa/modules/service/impl/WechatUserListServiceImpl.java

@@ -12,6 +12,7 @@ import cn.com.ctop.oa.modules.service.IWechatUserListService;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xxl.job.core.enums.NoEn;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -34,6 +35,8 @@ public class WechatUserListServiceImpl extends ServiceImpl<WechatUserListMapper,
     private IWechatTokenService tokenService;
     @Autowired
     private IWechatDepartmentService departmentService;
+    @Autowired
+    private WechatUserListMapper wechatUserListMapper;
 
     @Override
     public void getUserList() {
@@ -45,7 +48,7 @@ public class WechatUserListServiceImpl extends ServiceImpl<WechatUserListMapper,
             }
             TreeMap<String, Object> params = new TreeMap<>();
             params.put("access_token", qywxAccessToken.get("accessToken"));
-            List<WechatDepartment> list = departmentService.list();
+            List<WechatDepartment> list = departmentService.queryList(NoEn.NO0.valueInt());
             if (Check.isNull(list)) {
                 return;
             }
@@ -81,4 +84,58 @@ public class WechatUserListServiceImpl extends ServiceImpl<WechatUserListMapper,
             e.printStackTrace();
         }
     }
+
+
+    @Override
+    public void getYRUserList() {
+        try {
+            Map<String, Object> qywxAccessToken = tokenService.getYRCompanyToken();
+            if ((Integer) qywxAccessToken.get("code") != 0) {
+                log.error("企业微信获取token失败,返回信息:{}", qywxAccessToken.get("message"));
+                throw new Exception("企业微信获取token失败");
+            }
+            TreeMap<String, Object> params = new TreeMap<>();
+            params.put("access_token", qywxAccessToken.get("accessToken"));
+            List<WechatDepartment> list = departmentService.queryList(NoEn.NO1.valueInt());
+            if (Check.isNull(list)) {
+                return;
+            }
+            for (WechatDepartment department : list) {
+                params.remove("department_id");
+                String departId = department.getDepartId();
+                params.put("department_id", departId);
+                String resultStr = HttpUtils.httpGetRequest(QYWxConstant.QYWX_USER_SIMPLELIST, null, params);
+                JSONObject resultJson = JSONObject.parseObject(resultStr);
+                Integer errcode = resultJson.getInteger("errcode");
+                if (errcode == 0) {
+                    JSONArray userlist = resultJson.getJSONArray("userlist");
+                    if (!Check.isNull(userlist)) {
+                        for (int i = 0; i < userlist.size(); i++) {
+                            JSONObject userJson = userlist.getJSONObject(i);
+                            if (!Check.isNull(userJson)) {
+                                String userid = userJson.getString("userid");
+                                String id = departId + "_" + userid;
+                                WechatUserList userList = new WechatUserList();
+                                userList.setId(id);
+                                userList.setDepartId(departId);
+                                userList.setUserId(userid);
+                                userList.setDataType(NoEn.NO1.valueInt());
+                                userList.setUserName(userJson.getString("name"));
+                                this.saveOrUpdate(userList);
+                            }
+                        }
+                    }
+                } else {
+                    throw new Exception("企业微信获取用户列表失败");
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public List<WechatUserList> queryList(int dataType) {
+        return wechatUserListMapper.queryList(dataType);
+    }
 }