Explorar o código

定时任务,考勤数据入库。。。。。。

zhaoxian %!s(int64=4) %!d(string=hai) anos
pai
achega
1c43959144
Modificáronse 20 ficheiros con 429 adicións e 147 borrados
  1. 67 19
      jeecg-boot-base-common/src/main/java/org/jeecg/common/util/DateUtils.java
  2. 12 0
      module-job-bytedance/pom.xml
  3. 45 0
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/WechatApproveAttendanceJob.java
  4. 43 0
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/WechatAttendanceJob.java
  5. 27 16
      module-oa/src/main/java/cn/com/ctop/oa/modules/controller/WechatCheckinDataController.java
  6. 28 1
      module-oa/src/main/java/cn/com/ctop/oa/modules/controller/WechatDepartmentController.java
  7. 55 45
      module-oa/src/main/java/cn/com/ctop/oa/modules/controller/WechatNoListController.java
  8. 9 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/entity/WechatCheckinData.java
  9. 3 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/mapper/WechatCheckinDataMapper.java
  10. 3 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/mapper/WechatDepartmentMapper.java
  11. 0 1
      module-oa/src/main/java/cn/com/ctop/oa/modules/mapper/WechatNoListMapper.java
  12. 58 12
      module-oa/src/main/java/cn/com/ctop/oa/modules/mapper/xml/WechatCheckinDataMapper.xml
  13. 6 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/mapper/xml/WechatDepartmentMapper.xml
  14. 5 1
      module-oa/src/main/java/cn/com/ctop/oa/modules/service/IWechatCheckinDataService.java
  15. 4 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/service/IWechatDepartmentService.java
  16. 0 1
      module-oa/src/main/java/cn/com/ctop/oa/modules/service/IWechatUserListService.java
  17. 33 8
      module-oa/src/main/java/cn/com/ctop/oa/modules/service/impl/WechatCheckinDataServiceImpl.java
  18. 5 11
      module-oa/src/main/java/cn/com/ctop/oa/modules/service/impl/WechatDepartmentServiceImpl.java
  19. 26 23
      module-oa/src/main/java/cn/com/ctop/oa/modules/service/impl/WechatNoListServiceImpl.java
  20. 0 9
      module-oa/src/main/java/cn/com/ctop/oa/modules/service/impl/WechatUserListServiceImpl.java

+ 67 - 19
jeecg-boot-base-common/src/main/java/org/jeecg/common/util/DateUtils.java

@@ -10,7 +10,14 @@ import java.sql.Timestamp;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 
 /**
  * 类描述:时间操作定义类
@@ -71,6 +78,21 @@ public class DateUtils extends PropertyEditorSupport {
     private static final long HOUR_IN_MILLIS = 3600 * 1000L;
     private static final long MINUTE_IN_MILLIS = 60 * 1000L;
     private static final long SECOND_IN_MILLIS = 1000L;
+    /**
+     * 格式常量
+     */
+    public final static String SHORT_FORMAT = "yyyyMMdd";
+    public final static String LONG_FORMAT = "yyyyMMddHHmmss";
+    public final static String YEARHOUR_FORMAT = "yyyyMMddHH";
+    public final static String WEB_FORMAT = "yyyy-MM-dd";
+    public final static String TIME_FORMAT = "HHmmss";
+    public final static String COLON_TIME_FORMAT = "HH:mm:ss";
+    public final static String CHINESEDT_FORMAT = "yyyy年MM月dd日";
+    public final static String NEW_FORMAT = "yyyy-MM-dd HH:mm:ss";
+    public final static String WEB_FORMAT_ALL = "yyyy MM dd HH mm ss";
+    public final static String SECOND_FORMAT = "yyyy-MM-dd HH";
+    public final static String GREGORIAN_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
+    public final static String NOMS_GREGORIAN_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'";
 
     public static String getNowHour(Date date) {
         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH");
@@ -731,24 +753,6 @@ public class DateUtils extends PropertyEditorSupport {
         return temp;
     }
 
-
-    public static String getLastDay(String time) {
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-        Calendar calendar = Calendar.getInstance();
-        Date date = null;
-        try {
-            date = sdf.parse(time);
-        } catch (ParseException e) {
-            e.printStackTrace();
-        }
-        calendar.setTime(date);
-        int day = calendar.get(Calendar.DATE);
-        //                      此处修改为+1则是获取后一天
-        calendar.set(Calendar.DATE, day - 1);
-
-        String lastDay = sdf.format(calendar.getTime());
-        return lastDay;
-    }
     private static Calendar zeroFromHour(long milliseconds) {
         Calendar calendar = Calendar.getInstance(); // 获得一个日历
 
@@ -1497,6 +1501,50 @@ public class DateUtils extends PropertyEditorSupport {
         return lDate;
     }
 
+    /**
+     * 获取前一天的日期
+     *
+     * @param
+     * @return java.lang.String
+     * @throws
+     * @author ZHAOXA
+     */
+    public static String getLastDay(String time) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar calendar = Calendar.getInstance();
+        Date date = null;
+        try {
+            date = sdf.parse(time);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        calendar.setTime(date);
+        int day = calendar.get(Calendar.DATE);
+        //                      此处修改为+1则是获取后一天
+        calendar.set(Calendar.DATE, day - 1);
+
+        String lastDay = sdf.format(calendar.getTime());
+        return lastDay;
+    }
+
+    /**
+     * 获取当月1号零时零分的时间
+     *
+     * @param
+     * @return java.lang.String
+     * @throws
+     * @author ZHAOXA
+     */
+    public static String initDateByMonth() {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(new Date());
+        calendar.set(Calendar.DAY_OF_MONTH, 1);
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        return sdf.format(calendar.getTime());
+    }
 }
 
 

+ 12 - 0
module-job-bytedance/pom.xml

@@ -79,6 +79,12 @@
             <scope>compile</scope>
         </dependency>
         <dependency>
+            <groupId>cn.com.ctop</groupId>
+            <artifactId>module-oa</artifactId>
+            <version>2.0.2</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
             <groupId>com.aliyun.oss</groupId>
             <artifactId>aliyun-sdk-oss</artifactId>
             <version>3.5.0</version>
@@ -139,6 +145,12 @@
             <artifactId>module-check</artifactId>
             <version>2.0.2</version>
         </dependency>
+        <dependency>
+            <groupId>cn.com.ctop</groupId>
+            <artifactId>module-oa</artifactId>
+            <version>2.0.2</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <dependencyManagement>

+ 45 - 0
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/WechatApproveAttendanceJob.java

@@ -0,0 +1,45 @@
+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.handler.annotation.XxlJob;
+import com.xxl.job.core.log.XxlJobLogger;
+import org.jeecg.common.util.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 异常考勤审批数据入库
+ *
+ * @param
+ * @author ZHAOXA
+ * @return
+ * @throws
+ */
+@Component
+public class WechatApproveAttendanceJob {
+    @Autowired
+    private IWechatNoListService wechatNoListService;
+
+    /**
+     * 异常考勤审批数据入库
+     * 频率:每月2日凌晨2点同步审批数据 cron:0 0 2 2 * ?
+     * 审批状态表
+     * starttime 统计开始时间,上个月1号零时零分的时间 例:2020-08-01 00:00:00;
+     * endtime 统计结束时间,本月1号零时零分的时间 例:2020-09-01 00:00:00;
+     *
+     * @author ZHAOXA
+     */
+    @XxlJob("wechatApproveAttendanceJob")
+    public ReturnT<String> execute() 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));
+        XxlJobLogger.log("--------异常考勤审批数据入库 end ");
+        return ReturnT.SUCCESS;
+    }
+}

+ 43 - 0
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/WechatAttendanceJob.java

@@ -0,0 +1,43 @@
+package cn.com.ctop.job.bytedance.handler;
+
+
+import cn.com.ctop.oa.modules.service.IWechatCheckinDataService;
+import cn.com.ctop.oa.modules.service.IWechatUserListService;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import com.xxl.job.core.log.XxlJobLogger;
+import org.jeecg.common.util.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+@Component
+public class WechatAttendanceJob {
+    @Autowired
+    private IWechatCheckinDataService wechatCheckinDataService;
+    @Autowired
+    private IWechatUserListService wechatUserInfoService;
+
+    /**
+     * 考勤数据入库
+     * 员工打卡明细表 每日凌晨2点统计前一天的考勤数据 cron:0 0 2 * * ?
+     * <p>
+     * 人员信息表 每日凌晨2点统计前一天的人员数据 cron:0 0 2 * * ?
+     *
+     * @author ZHAOXA
+     */
+    @XxlJob("wechatAttendanceJob")
+    public ReturnT<String> execute(String params) throws Exception {
+        XxlJobLogger.log("--------考勤数据入库 start ");
+        String beforeDay = DateUtils.getLastDay(DateUtils.formatDate(new Date()));
+        long starttime = DateUtils.timeToStamp(beforeDay + " 00:00:00");
+        long endtime = DateUtils.timeToStamp(beforeDay + " 23:59:59");
+        //更新员工打卡明细表
+        wechatCheckinDataService.getCheckinData(String.valueOf(starttime), String.valueOf(endtime));
+        //更新人员信息表
+        wechatUserInfoService.getUserList();
+        XxlJobLogger.log("--------考勤数据入库 end ");
+        return ReturnT.SUCCESS;
+    }
+}

+ 27 - 16
module-oa/src/main/java/cn/com/ctop/oa/modules/controller/WechatCheckinDataController.java

@@ -1,12 +1,12 @@
 package cn.com.ctop.oa.modules.controller;
 
 import cn.com.ctop.common.module.annotation.AutoLog;
+import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.oa.modules.entity.WechatCheckinData;
 import cn.com.ctop.oa.modules.service.IWechatCheckinDataService;
 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.github.pagehelper.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -19,7 +19,15 @@ import org.jeecgframework.poi.excel.entity.ExportParams;
 import org.jeecgframework.poi.excel.entity.ImportParams;
 import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartHttpServletRequest;
 import org.springframework.web.servlet.ModelAndView;
@@ -57,22 +65,25 @@ public class WechatCheckinDataController {
      * @param req
      * @return
      */
-    @AutoLog(value = "企业微信用户-分页列表查询")
-    @ApiOperation(value = "企业微信用户-分页列表查询", notes = "企业微信用户-分页列表查询")
-    @GetMapping(value = "/list")
-    public Result<IPage<WechatCheckinData>> queryPageList(WechatCheckinData wechatCheckinData,
-                                                          @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
-                                                          @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
-                                                          HttpServletRequest req) {
-        Result<IPage<WechatCheckinData>> result = new Result<>();
-        QueryWrapper<WechatCheckinData> queryWrapper = QueryGenerator.initQueryWrapper(wechatCheckinData, req.getParameterMap());
-        Page<WechatCheckinData> page = new Page<WechatCheckinData>(pageNo, pageSize);
-        IPage<WechatCheckinData> pageList = wechatCheckinDataService.page(page, queryWrapper);
-        result.setSuccess(true);
-        result.setResult(pageList);
+    @AutoLog(value = "考勤打卡明细-分页列表查询")
+    @ApiOperation(value = "考勤打卡明细-分页列表查询", notes = "考勤打卡明细-分页列表查询")
+    @PostMapping(value = "/queryPageList")
+    public Result<PageInfo<WechatCheckinData>> queryPageList(@RequestBody Map<String, Object> paramsMap) {
+        Result<PageInfo<WechatCheckinData>> result = new Result<>();
+        try {
+            PageInfo<WechatCheckinData> pageData = wechatCheckinDataService.selectPageList(paramsMap);
+            if (!Check.isNull(pageData)) {
+                result.setResult(pageData);
+                result.setSuccess(true);
+            }
+        } catch (Exception e) {
+            log.error("考勤打卡明细-分页列表查询 error ", e);
+            result.error500("操作失败");
+        }
         return result;
     }
 
+
     /**
      * 添加
      *

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

@@ -1,6 +1,7 @@
 package cn.com.ctop.oa.modules.controller;
 
 import cn.com.ctop.common.module.annotation.AutoLog;
+import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.oa.modules.entity.WechatDepartment;
 import cn.com.ctop.oa.modules.service.IWechatDepartmentService;
 import com.alibaba.fastjson.JSON;
@@ -19,7 +20,15 @@ import org.jeecgframework.poi.excel.entity.ExportParams;
 import org.jeecgframework.poi.excel.entity.ImportParams;
 import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartHttpServletRequest;
 import org.springframework.web.servlet.ModelAndView;
@@ -73,6 +82,24 @@ public class WechatDepartmentController {
         return result;
     }
 
+    @AutoLog(value = "部门列表List-列表查询")
+    @ApiOperation(value = "部门列表List-列表查询", notes = "部门列表List-列表查询")
+    @PostMapping(value = "/queryList")
+    public Result<List<WechatDepartment>> queryList() {
+        Result<List<WechatDepartment>> result = new Result<>();
+        try {
+            List<WechatDepartment> pageList = wechatDepartmentService.queryList();
+            if (!Check.isNull(pageList)) {
+                result.setResult(pageList);
+                result.setSuccess(true);
+            }
+        } catch (Exception e) {
+            log.error("部门列表List-列表查询 error ", e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
     /**
      * 添加
      *

+ 55 - 45
module-oa/src/main/java/cn/com/ctop/oa/modules/controller/WechatNoListController.java

@@ -46,7 +46,6 @@ 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;
 
@@ -269,46 +268,47 @@ public class WechatNoListController {
      * @param response
      */
     @PostMapping("/excel")
-    public void getExcelReport(HttpServletResponse response) {
-        Map<String, Object> paramsMap = new HashMap<>();
+    public void getExcelReport(HttpServletResponse response, @RequestBody Map<String, Object> paramsMap) {
+
         List<WechatAttendance> excelData = wechatNoListService.queryAttendanceData(paramsMap);
         List<WechatAttendance> overtimeData = wechatNoListService.queryOverTimeData(paramsMap);
-        if (excelData.isEmpty() || overtimeData.isEmpty()) {
-            return;
-        }
-        String[] titles = {"姓名", "部门", "考勤日期", "考勤类型", "考勤状态", "考勤时间", "审核状态", "状态时长", "审批状态"};
-        String[] overtimeTitles = {"姓名", "部门", "加班日期", "加班时长"};
-        List<List<Object>> excelList = new ArrayList<>();
-        List<List<Object>> overtimeExcelList = new ArrayList<>();
-        excelData.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("");
-            }
-            excelList.add(temp);
-        });
-        overtimeData.forEach(data -> {
-            List<Object> temp = new ArrayList<>();
-            temp.add(data.getUserName());
-            temp.add(data.getDepartName());
-            temp.add(data.getCheckinDate());
-            temp.add(data.getOvertime());
-            overtimeExcelList.add(temp);
-        });
         try {
+            List<List<Object>> excelList = new ArrayList<>();
+            List<List<Object>> overtimeExcelList = new ArrayList<>();
+            if (!excelData.isEmpty()) {
+                excelData.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("");
+                    }
+                    excelList.add(temp);
+                });
+            }
+            if (!overtimeData.isEmpty()) {
+                overtimeData.forEach(data -> {
+                    List<Object> temp = new ArrayList<>();
+                    temp.add(data.getUserName());
+                    temp.add(data.getDepartName());
+                    temp.add(data.getCheckinDate());
+                    temp.add(data.getOvertime());
+                    overtimeExcelList.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");
@@ -326,14 +326,19 @@ public class WechatNoListController {
      * @param id
      * @return
      */
-    @AutoLog(value = "考勤异常数据查询")
+    @AutoLog(value = "异常考勤数据-分页列表查询")
     @PostMapping(value = "/selectNoListPage")
     public Result<PageInfo<WechatAttendance>> selectNoListPage(@RequestBody Map<String, Object> paramsMap) {
         Result<PageInfo<WechatAttendance>> result = new Result<>();
-        PageInfo<WechatAttendance> pageData = wechatNoListService.selectNoListPage(paramsMap);
-        if (!Check.isNull(pageData)) {
-            result.setResult(pageData);
-            result.setSuccess(true);
+        try {
+            PageInfo<WechatAttendance> pageData = wechatNoListService.selectNoListPage(paramsMap);
+            if (!Check.isNull(pageData)) {
+                result.setResult(pageData);
+                result.setSuccess(true);
+            }
+        } catch (Exception e) {
+            log.error("异常考勤数据-分页列表查询 error ", e);
+            result.error500("操作失败");
         }
         return result;
     }
@@ -344,14 +349,19 @@ public class WechatNoListController {
      * @param id
      * @return
      */
-    @AutoLog(value = "加班异常数据查询")
+    @AutoLog(value = "加班考勤数据-分页列表查询")
     @PostMapping(value = "/selectOverTimePage")
     public Result<PageInfo<WechatAttendance>> selectOverTimePage(@RequestBody Map<String, Object> paramsMap) {
         Result<PageInfo<WechatAttendance>> result = new Result<>();
-        PageInfo<WechatAttendance> pageData = wechatNoListService.selectOverTimePage(paramsMap);
-        if (!Check.isNull(pageData)) {
-            result.setResult(pageData);
-            result.setSuccess(true);
+        try {
+            PageInfo<WechatAttendance> pageData = wechatNoListService.selectOverTimePage(paramsMap);
+            if (!Check.isNull(pageData)) {
+                result.setResult(pageData);
+                result.setSuccess(true);
+            }
+        } catch (Exception e) {
+            log.error("加班考勤数据-分页列表查询 error ", e);
+            result.error500("操作失败");
         }
         return result;
     }

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

@@ -137,4 +137,13 @@ public class WechatCheckinData {
      */
     @ApiModelProperty(value = "updateTime")
     private Date updateTime;
+
+    /**
+     * 员工名
+     */
+    private String userName;
+    /**
+     * 部门名
+     */
+    private String departName;
 }

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

@@ -3,6 +3,7 @@ package cn.com.ctop.oa.modules.mapper;
 import cn.com.ctop.oa.modules.entity.WechatCheckinData;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -15,4 +16,6 @@ import java.util.Map;
 public interface WechatCheckinDataMapper extends BaseMapper<WechatCheckinData> {
 
     WechatCheckinData queryEntityByMap(Map<String, Object> paramsMap);
+
+    List<WechatCheckinData> selectPageList(Map<String, Object> paramsMap);
 }

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

@@ -3,6 +3,8 @@ package cn.com.ctop.oa.modules.mapper;
 import cn.com.ctop.oa.modules.entity.WechatDepartment;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
+import java.util.List;
+
 /**
  * 部门列表
  *
@@ -12,4 +14,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface WechatDepartmentMapper extends BaseMapper<WechatDepartment> {
 
+    List<WechatDepartment> queryList();
 }

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

@@ -3,7 +3,6 @@ package cn.com.ctop.oa.modules.mapper;
 import cn.com.ctop.oa.modules.entity.WechatAttendance;
 import cn.com.ctop.oa.modules.entity.WechatNoList;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.jeecg.common.api.vo.Result;
 
 import java.util.List;
 import java.util.Map;

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

@@ -6,19 +6,65 @@
         *
         FROM ctop_wechat_checkin_data
         <where>
-        <if test="userId != null and userId != '' " >
-            and user_id = #{userId}
-        </if>
-        <if test="departId != null and departId != '' " >
-            and depart_id = #{departId}
-        </if>
-        <if test="checkinType != null">
-            and checkin_type = #{checkinType}
-        </if>
-        <if test="checkinDate != null ">
-            and checkin_time like concat(#{checkinDate},"%")
-        </if>
+            <if test="userId != null and userId != '' ">
+                and user_id = #{userId}
+            </if>
+            <if test="departId != null and departId != '' ">
+                and depart_id = #{departId}
+            </if>
+            <if test="checkinType != null">
+                and checkin_type = #{checkinType}
+            </if>
+            <if test="checkinDate != null ">
+                and checkin_time like concat(#{checkinDate},"%")
+            </if>
         </where>
     </select>
 
+
+    <select id="selectPageList" resultType="cn.com.ctop.oa.modules.entity.WechatCheckinData">
+        SELECT
+        ck.id,
+        ck.depart_id,
+        ck.user_id,
+        us.user_name,
+        dpt.depart_name,
+        ck.group_name,
+        ck.checkin_type,
+        ck.exception_type,
+        ck.checkin_time,
+        ck.location_title,
+        ck.location_detail,
+        ck.wifiname,
+        ck.notes,
+        ck.wifimac,
+        ck.mediaids,
+        ck.lat,
+        ck.lng,
+        ck.deviceid,
+        ck.overtime_or_not,
+        ck.overtime,
+        ck.create_time,
+        ck.update_time
+        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>
+    </select>
 </mapper>

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

@@ -2,4 +2,10 @@
 <!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.WechatDepartmentMapper">
 
+
+    <select id="queryList" resultType="cn.com.ctop.oa.modules.entity.WechatDepartment">
+        SELECT
+            *
+        FROM ctop_wechat_department
+    </select>
 </mapper>

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

@@ -2,6 +2,9 @@ package cn.com.ctop.oa.modules.service;
 
 import cn.com.ctop.oa.modules.entity.WechatCheckinData;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.pagehelper.PageInfo;
+
+import java.util.Map;
 
 /**
  * @Description: 企业微信用户
@@ -10,6 +13,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @Version: V1.0
  */
 public interface IWechatCheckinDataService extends IService<WechatCheckinData> {
-    void getCheckinData();
+    void getCheckinData(String starttime, String endtime);
 
+    PageInfo<WechatCheckinData> selectPageList(Map<String, Object> paramsMap);
 }

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

@@ -3,6 +3,8 @@ package cn.com.ctop.oa.modules.service;
 import cn.com.ctop.oa.modules.entity.WechatDepartment;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * @Description: 部门列表
  * @Author: jeecg-boot
@@ -11,4 +13,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IWechatDepartmentService extends IService<WechatDepartment> {
     void getDepartment();
+
+    List<WechatDepartment> queryList();
 }

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

@@ -11,5 +11,4 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IWechatUserListService extends IService<WechatUserList> {
     void getUserList();
-
 }

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

@@ -12,11 +12,14 @@ 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.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.util.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.text.ParseException;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -35,9 +38,11 @@ public class WechatCheckinDataServiceImpl extends ServiceImpl<WechatCheckinDataM
     private IWechatTokenService tokenService;
     @Autowired
     private IWechatUserListService userListService;
+    @Autowired
+    private WechatCheckinDataMapper wechatCheckinDataMapper;
 
     @Override
-    public void getCheckinData() {
+    public void getCheckinData(String starttime, String endtime) {
         try {
             Map<String, Object> qywxAccessToken = tokenService.getOAAccessToken();
             if ((Integer) qywxAccessToken.get("code") != 0) {
@@ -57,8 +62,8 @@ public class WechatCheckinDataServiceImpl extends ServiceImpl<WechatCheckinDataM
                 JSONArray userArr = new JSONArray();
                 userArr.add(userId);
                 params.put("useridlist", userArr);
-                params.put("starttime", 1598889600);
-                params.put("endtime", 1601049600);
+                params.put("starttime", starttime);
+                params.put("endtime", endtime);
                 String resultStr = HttpUtils.httpPostRequestTest(QYWxConstant.QYWX_CHECKIN_DATA + "?access_token=" + qywxAccessToken.get("accessToken"), params.toJSONString(), null);
                 JSONObject resultJson = JSONObject.parseObject(resultStr);
                 Integer errcode = resultJson.getInteger("errcode");
@@ -70,7 +75,7 @@ public class WechatCheckinDataServiceImpl extends ServiceImpl<WechatCheckinDataM
                         String checkinTypeCode = "";
                         for (int i = 0; i < checkindata.size(); i++) {
                             JSONObject jsonObject = checkindata.getJSONObject(i);
-                            if("JiLei".equals(userId)){
+                            if ("JiLei".equals(userId)) {
                                 System.out.println(jsonObject);
                             }
                             if (!Check.isNull(jsonObject)) {
@@ -112,7 +117,6 @@ public class WechatCheckinDataServiceImpl extends ServiceImpl<WechatCheckinDataM
                             }
                         }
                     }
-
                 } else {
                     log.error("获取打卡数据异常");
                 }
@@ -120,9 +124,30 @@ public class WechatCheckinDataServiceImpl extends ServiceImpl<WechatCheckinDataM
         } catch (Exception e) {
             e.printStackTrace();
         }
-
-
     }
 
-
+    @Override
+    public PageInfo<WechatCheckinData> selectPageList(Map<String, Object> paramsMap) {
+        Integer pageNo = (Integer) paramsMap.get("pageNo");
+        if (null == pageNo || pageNo == 0) {
+            pageNo = 1;
+        }
+        Integer pageSize = (Integer) paramsMap.get("pageSize");
+        if (null == pageSize || pageSize == 0) {
+            pageSize = 10;
+        }
+        String startTime = (String) paramsMap.get("startTime");
+        if (!Check.isNull(startTime)) {
+            startTime += " 00:00:00";
+            paramsMap.put("startTime", startTime);
+        }
+        String stopTime = (String) paramsMap.get("stopTime");
+        if (!Check.isNull(stopTime)) {
+            stopTime += " 23:59:59";
+            paramsMap.put("stopTime", stopTime);
+        }
+        PageHelper.startPage(pageNo, pageSize);
+        List<WechatCheckinData> list = wechatCheckinDataMapper.selectPageList(paramsMap);
+        return new PageInfo<>(list);
+    }
 }

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

@@ -16,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
 
@@ -34,7 +35,6 @@ public class WechatDepartmentServiceImpl extends ServiceImpl<WechatDepartmentMap
     @Autowired
     private WechatDepartmentMapper wechatDepartmentMapper;
 
-
     @Override
     public void getDepartment() {
         try {
@@ -43,11 +43,8 @@ public class WechatDepartmentServiceImpl extends ServiceImpl<WechatDepartmentMap
                 log.error("企业微信获取token失败,返回信息:{}", qywxAccessToken.get("message"));
                 throw new Exception("企业微信获取token失败");
             }
-
-
             TreeMap<String, Object> params = new TreeMap<>();
             params.put("access_token", qywxAccessToken.get("accessToken"));
-
             String resultStr = HttpUtils.httpGetRequest(QYWxConstant.QYWX_DEPART_LIST, null, params);
             JSONObject resultJson = JSONObject.parseObject(resultStr);
             System.err.println(resultJson);
@@ -71,22 +68,19 @@ public class WechatDepartmentServiceImpl extends ServiceImpl<WechatDepartmentMap
                             depart.setParentId(departJson.getString("parentid"));
                             depart.setDepartOrder(departJson.getString("order"));
                             wechatDepartmentMapper.insert(depart);
-
                         }
-
                     }
-
                 }
-
-
             } else {
                 throw new Exception("企业微信获取部门列表");
-
             }
         } catch (Exception e) {
             e.printStackTrace();
         }
+    }
 
-
+    @Override
+    public List<WechatDepartment> queryList() {
+        return wechatDepartmentMapper.queryList();
     }
 }

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

@@ -22,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -283,6 +284,7 @@ public class WechatNoListServiceImpl extends ServiceImpl<WechatNoListMapper, Wec
 
     @Override
     public List<WechatAttendance> queryAttendanceData(Map<String, Object> paramsMap) {
+        finishingTime(paramsMap);
         List<WechatAttendance> list = wechatNoListMapper.queryAttendanceData(paramsMap);
         if (!Check.isNull(list)) {
             checkOverTimeData(list);
@@ -290,13 +292,36 @@ public class WechatNoListServiceImpl extends ServiceImpl<WechatNoListMapper, Wec
         return list;
     }
 
+    /**
+     * 整理时间
+     *
+     * @param
+     * @return void
+     * @throws
+     * @author ZHAOXA
+     */
+    private void finishingTime(Map<String, Object> paramsMap) {
+        String startTime = (String) paramsMap.get("startTime");
+        if (!Check.isNull(startTime)) {
+            startTime += " 00:00:00";
+            paramsMap.put("startTime", startTime);
+        }
+        String stopTime = (String) paramsMap.get("stopTime");
+        if (!Check.isNull(stopTime)) {
+            stopTime += " 23:59:59";
+            paramsMap.put("stopTime", stopTime);
+        }
+    }
+
     @Override
     public List<WechatAttendance> queryOverTimeData(Map<String, Object> paramsMap) {
+        finishingTime(paramsMap);
         return wechatNoListMapper.queryOverTimeData(paramsMap);
     }
 
     @Override
     public PageInfo<WechatAttendance> selectNoListPage(Map<String, Object> paramsMap) {
+        finishingTime(paramsMap);
         Integer pageNo = (Integer) paramsMap.get("pageNo");
         if (null == pageNo || pageNo == 0) {
             pageNo = 1;
@@ -305,16 +330,6 @@ public class WechatNoListServiceImpl extends ServiceImpl<WechatNoListMapper, Wec
         if (null == pageSize || pageSize == 0) {
             pageSize = 10;
         }
-        String startTime = (String) paramsMap.get("startTime");
-        if (!Check.isNull(startTime)) {
-            startTime += " 00:00:00";
-            paramsMap.put("startTime", startTime);
-        }
-        String stopTime = (String) paramsMap.get("stopTime");
-        if (!Check.isNull(stopTime)) {
-            stopTime += " 23:59:59";
-            paramsMap.put("stopTime", stopTime);
-        }
         PageHelper.startPage(pageNo, pageSize);
         List<WechatAttendance> list = wechatNoListMapper.queryAttendanceData(paramsMap);
         if (!Check.isNull(list)) {
@@ -353,6 +368,7 @@ public class WechatNoListServiceImpl extends ServiceImpl<WechatNoListMapper, Wec
 
     @Override
     public PageInfo<WechatAttendance> selectOverTimePage(Map<String, Object> paramsMap) {
+        finishingTime(paramsMap);
         Integer pageNo = (Integer) paramsMap.get("pageNo");
         if (null == pageNo || pageNo == 0) {
             pageNo = 1;
@@ -361,21 +377,8 @@ public class WechatNoListServiceImpl extends ServiceImpl<WechatNoListMapper, Wec
         if (null == pageSize || pageSize == 0) {
             pageSize = 10;
         }
-        String startTime = (String) paramsMap.get("startTime");
-        if (!Check.isNull(startTime)) {
-            startTime += " 00:00:00";
-            paramsMap.put("startTime", startTime);
-        }
-        String stopTime = (String) paramsMap.get("stopTime");
-        if (!Check.isNull(stopTime)) {
-            stopTime += " 23:59:59";
-            paramsMap.put("stopTime", stopTime);
-        }
         PageHelper.startPage(pageNo, pageSize);
         List<WechatAttendance> list = wechatNoListMapper.queryOverTimeData(paramsMap);
-        if (!Check.isNull(list)) {
-            checkOverTimeData(list);
-        }
         return new PageInfo<>(list);
     }
 }

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

@@ -30,7 +30,6 @@ import java.util.TreeMap;
 @Service
 @Slf4j
 public class WechatUserListServiceImpl extends ServiceImpl<WechatUserListMapper, WechatUserList> implements IWechatUserListService {
-
     @Autowired
     private IWechatTokenService tokenService;
     @Autowired
@@ -72,20 +71,12 @@ public class WechatUserListServiceImpl extends ServiceImpl<WechatUserListMapper,
                                 userList.setUserName(userJson.getString("name"));
                                 this.saveOrUpdate(userList);
                             }
-
                         }
-
                     }
-
-
                 } else {
                     throw new Exception("企业微信获取用户列表失败");
-
                 }
-
             }
-
-
         } catch (Exception e) {
             e.printStackTrace();
         }