Переглянути джерело

Merge branch 'master' of http://47.100.37.243:10191/wutt/manHourHousekeeper

zhouyy 3 місяців тому
батько
коміт
1ac5d78fc8

+ 4 - 23
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/FeishuInfoController.java

@@ -872,28 +872,16 @@ public class FeishuInfoController {
         JSONArray departmentArray = departmentInfoArrays;
         JSONArray allNeedTodo=new JSONArray();
         allNeedTodo.addAll(departmentArray);
-//        for (int i = 0; i < departmentArray.size(); i++) {
-//            JSONObject ob = departmentArray.getJSONObject(i);
-//            System.out.println("ob对象数据"+ob.toJSONString());
-//            if(ob.getString("open_department_id")!=null){
-//                JSONArray jsonArray = getSubDepartmentList(feishuInfo, ob.getString("open_department_id"));
-//                if(jsonArray!=null&&jsonArray.size()>0){
-//                    allNeedTodo.addAll(jsonArray);
-//                }
-//            }
-//        }
         List<Department> departmentList=new ArrayList<>();
         List<DepartmentFeishu> departmentFeishuList=new ArrayList<>();
         for (int j = 0; j < allNeedTodo.size(); j++) {
             JSONObject ob = allNeedTodo.getJSONObject(j);
             String departmentName = String.valueOf(ob.get("name"));
-            System.out.println("synchronizationDP========="+departmentName);
             String departmentId = String.valueOf(ob.getString("department_id"));
             String openDepartmentId = String.valueOf(ob.getString("open_department_id"));
             String departmentParentId =String.valueOf(ob.getString("parent_department_id"));
             JSONArray leaders = ob.getJSONArray("leaders");
             if(!departmentId.equals("0")){
-                System.out.println("join===========");
                 DepartmentFeishu departmentFeishu=new DepartmentFeishu();
                 departmentFeishu.setCorpid(feishuInfo.getCorpid())
                         .setName(departmentName)
@@ -951,7 +939,6 @@ public class FeishuInfoController {
             }
         }
         List<User> newUserList=new ArrayList<>();
-        System.out.println("departmentFeishuList========"+departmentFeishuList.toString());
         for (DepartmentFeishu departmentFeishu : departmentFeishuList) {
             Optional<Department> first = departmentList.stream().filter(dl -> dl.getDepartmentId().equals(departmentFeishu.getSysDeptid())).findFirst();
             //获取到当前部门的上级部门
@@ -967,13 +954,11 @@ public class FeishuInfoController {
             }
             //处理部门下的人员
             JSONArray userInfoWithDepartment=feishuInfoService.getUserInfoWithDepartment(feishuInfo,departmentFeishu.getFeishuOpenDeptid(),null);
-            System.out.println("userInfoWithDepartment=========="+userInfoWithDepartment.toJSONString());
             for (int m=0;m<userInfoWithDepartment.size(); m++) {
                 JSONObject userJson = userInfoWithDepartment.getJSONObject(m);
                 String curUserid = userJson.getString("user_id");
                 String openUserid = userJson.getString("open_id");
                 List<String> departments = (List<String>) userJson.get("department_ids");
-                System.out.println("user info======:"+userJson.toString());
                 Optional<User> optional = allUserList.stream().filter(al -> al.getFeishuUserid() != null && al.getFeishuUserid().equals(userJson.getString("open_id"))).findFirst();
                 //不存在的人员, 进行插入
                 User user = new User();
@@ -994,12 +979,10 @@ public class FeishuInfoController {
                         .setFeishuDeptid(departmentFeishu.getFeishuDeptid())
                         .setIsActive(userJson.getJSONObject("status").getBoolean("is_activated")?1:0);
                 String max = departments.get(0);
-                System.out.println("maxDept====="+max);
                 Optional<DepartmentFeishu> dpFs = departmentFeishuList.stream().filter(dl -> dl.getFeishuOpenDeptid().equals(max)).findFirst();
                 if(dpFs.isPresent()){
                     Optional<Department> dp = departmentList.stream().filter(dl -> dl.getDepartmentId().equals(dpFs.get().getSysDeptid())).findFirst();
                     if(dp.isPresent()){
-                        System.out.println("Set Dept");
                         user.setDepartmentName(dp.get().getDepartmentName());
                         user.setDepartmentId(dp.get().getDepartmentId());
                         user.setDepartmentCascade(convertDepartmentIdToCascade(dp.get().getDepartmentId(),departmentList));
@@ -1014,7 +997,6 @@ public class FeishuInfoController {
         //todo:处理人员
         //获取应用可用范围内的人员
         JSONArray userArrays = (JSONArray) availableRange.get("user_ids");
-        System.out.println("userArrays==========="+userArrays.toJSONString());
         if(userArrays!=null&&userArrays.size()>0){
             for (int i = 0; i < userArrays.size(); i++) {
                 String uid = userArrays.getString(i);
@@ -1025,13 +1007,12 @@ public class FeishuInfoController {
                 if(optional.isPresent()){
                     user.setId(optional.get().getId());
                 }else {
-                    user.setId(SnowFlake.nextId()+"");
+                    user.setId(SnowFlake.nextId()+"")
+                            .setRoleId(role.getId())//默认普通员工
+                            .setRoleName(role.getRolename());
                 }
                 JSONObject userOb = feishuInfoService.getUserInfo(feishuInfo, uid);
-                user.setRoleId(role.getId())
-                        .setRoleId(role.getId())//默认普通员工
-                        .setRoleName(role.getRolename())
-                        .setCompanyId(feishuInfo.getCompanyId())
+                user.setCompanyId(feishuInfo.getCompanyId())
                         .setName(userOb.getString("name"))
                         .setFeishuUserid(userOb.getString("open_id"))
                         .setColor(ColorUtil.randomColor())

+ 5 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskFilesController.java

@@ -342,8 +342,12 @@ public class TaskFilesController {
             record.setProjectId(projectId);
             if(1 == timeType.getTaskFileCharge()){
                 record.setNeedFileCharge(1);
+                if (department == null) {
+                    msg.setError("您无所属部门,请重新设置");
+                    return msg;
+                }
                 if(org.apache.commons.lang3.StringUtils.isBlank(department.getManagerId())){
-                    msg.setError("员工所在部门无负责人,请重新设置");
+                    msg.setError("所在部门无负责人,请重新设置");
                     return msg;
                 }
                 if(org.apache.commons.lang3.StringUtils.isBlank(project.getInchargerId())){

+ 2 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserWithBeisenController.java

@@ -370,9 +370,9 @@ public class UserWithBeisenController {
                    //产假
                    double maternityLeaveHour = list.stream().mapToDouble(l -> l.getDoubleValue("MaternityLeaveHour")).sum();
                    //福利年假
-                   double CustomItemHour1 = list.stream().mapToDouble(l -> l.getDoubleValue("CustomItemHour1")).sum();
+                   double customItemHour1 = list.stream().mapToDouble(l -> l.getDoubleValue("CustomItemHour1")).sum();
                    //打印数据
-                   workTime=workTime-annualLeaveHour-casualLeaveHour-sickLeaveHour-marriageLeaveHour-maternityLeaveHour-CustomItemHour1;
+                   workTime=workTime-annualLeaveHour-casualLeaveHour-sickLeaveHour-marriageLeaveHour-maternityLeaveHour-customItemHour1;
                }
             }
             UserFvTime userFvTime=new UserFvTime();

+ 3 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/TimeTypeService.java

@@ -1,9 +1,11 @@
 package com.management.platform.service;
 
+import com.management.platform.entity.HolidaySetting;
 import com.management.platform.entity.TimeType;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.time.LocalDate;
+import java.util.List;
 
 /**
  * <p>
@@ -20,5 +22,5 @@ public interface TimeTypeService extends IService<TimeType> {
      * @param date
      * @return
      */
-    Boolean isWorkDay(Integer companyId, LocalDate date, TimeType timeType);
+    Boolean isWorkDay(Integer companyId, LocalDate date, TimeType timeType, List<HolidaySetting> holidaySetting);
 }

+ 8 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -171,6 +171,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     @Resource
     private TaskMapper taskMapper;
     @Resource
+    private HolidaySettingMapper holidaySettingMapper;
+    @Resource
     private TaskService taskService;
     @Resource
     private ReportAuditorSettingService reportAuditorSettingService;
@@ -7258,6 +7260,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             List<Integer> finalBranchDepartment = branchDepartment;
             allRangeUserList=allRangeUserList.stream().filter(at-> finalBranchDepartment.contains(at.getDepartmentId())).collect(Collectors.toList());
         }
+        List<HolidaySetting> holidaySettingList = holidaySettingMapper.selectList(new QueryWrapper<HolidaySetting>().eq("company_id", companyId));
         for (User curUser: allRangeUserList){
             for (int i=0;i<=cnt; i++) {
                 LocalDate date = localStart.plusDays(i);
@@ -7270,15 +7273,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     continue;
                 }
                 //去掉非工作日
-                Boolean workDay = timeTypeService.isWorkDay(companyId, date, timeType);
+                Boolean workDay = timeTypeService.isWorkDay(companyId, date, timeType, holidaySettingList);
                 if (!workDay){
                     continue;
                 }
-                //去掉非工作日
-                boolean workDay1 = WorkDayCalculateUtils.isWorkDay(date);
-                if(!workDay1){
-                    continue;
-                }
                 //去掉设置了分摊比例的人员
                 if (setPercentUserIdList.contains(curUser.getId())) {
                     continue;
@@ -7386,6 +7384,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         long cnt = localStart.until(localEnd, ChronoUnit.DAYS);
         //查询请假数据,请假的不算漏填,状态为已通过(0)或者待审核的(1)
         List<LeaveSheet> leaveSheetList = leaveSheetMapper.selectList(new QueryWrapper<LeaveSheet>().select("owner_id,start_date, end_date").eq("company_id", companyId).le("status", 1).gt("end_date", localStart).lt("start_date",localEnd));
+        List<HolidaySetting> holidaySettingList = holidaySettingMapper.selectList(new QueryWrapper<HolidaySetting>().eq("company_id", companyId));
         //按人员过滤
         for (User curUser: allRangeUserList){
             //判断此用户当天是否请假,请假的不算
@@ -7400,7 +7399,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     continue;
                 }
                 //去掉非工作日
-                Boolean workDay = timeTypeService.isWorkDay(companyId, date, timeType);
+                Boolean workDay = timeTypeService.isWorkDay(companyId, date, timeType, holidaySettingList);
                 if (!workDay){
                     continue;
                 }
@@ -8363,6 +8362,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         //需要补的时间
         User user = userMapper.selectById(monthVO.getUserId());
         TimeType timeType = timeTypeMapper.selectOne(new QueryWrapper<TimeType>().eq("company_id", user.getCompanyId()));
+        List<HolidaySetting> holidaySettings = holidaySettingMapper.selectList(new QueryWrapper<HolidaySetting>().eq("company_id", user.getCompanyId()));
         LocalDate time = LocalDate.parse(yearMonth, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
         LocalDate now = LocalDate.now();
         LocalDate startDate = time.with(TemporalAdjusters.firstDayOfMonth());
@@ -8400,7 +8400,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             if (user.getIsActive() == 1 && user.getInductionDate() != null && i.isBefore(user.getInductionDate())){
                 continue;
             }
-            Boolean workDay = timeTypeService.isWorkDay(user.getCompanyId(), i, timeType);
+            Boolean workDay = timeTypeService.isWorkDay(user.getCompanyId(), i, timeType, holidaySettings);
             if (workDay){
                 Double workTime = 0.0;
                 //添加该日日报进入集合

+ 18 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TimeTypeServiceImpl.java

@@ -1,7 +1,9 @@
 package com.management.platform.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.HolidaySetting;
 import com.management.platform.entity.TimeType;
+import com.management.platform.mapper.HolidaySettingMapper;
 import com.management.platform.mapper.TimeTypeMapper;
 import com.management.platform.service.TimeTypeService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -11,6 +13,7 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.time.LocalDate;
 import java.util.Calendar;
+import java.util.List;
 import java.util.Locale;
 
 /**
@@ -26,6 +29,8 @@ public class TimeTypeServiceImpl extends ServiceImpl<TimeTypeMapper, TimeType> i
 
     @Resource
     private TimeTypeMapper timeTypeMapper;
+    @Resource
+    private HolidaySettingMapper holidaySettingMapper;
 
     /**
      * 判断某公司某天是否是工作日
@@ -34,11 +39,14 @@ public class TimeTypeServiceImpl extends ServiceImpl<TimeTypeMapper, TimeType> i
      * @return
      */
     @Override
-    public Boolean isWorkDay(Integer companyId, LocalDate date, TimeType timeType) {
+    public Boolean isWorkDay(Integer companyId, LocalDate date, TimeType timeType, List<HolidaySetting> holidaySetting) {
         Boolean workDay = true;
         if (timeType == null) {
             timeType = timeTypeMapper.selectOne(new QueryWrapper<TimeType>().eq("company_id", companyId));
         }
+        if (holidaySetting == null) {
+            holidaySetting = holidaySettingMapper.selectList(new QueryWrapper<HolidaySetting>().eq("company_id", companyId));
+        }
         String alertNonWorkday = timeType.getAlertNonWorkday().toString();
         if (alertNonWorkday.length() == 1){
             alertNonWorkday = "00" +alertNonWorkday;
@@ -66,6 +74,15 @@ public class TimeTypeServiceImpl extends ServiceImpl<TimeTypeMapper, TimeType> i
         if (WorkDayCalculateUtils.isWorkDay(date)){
             workDay = true;
         }
+        //如果是工作日,再校验是否为系统内设置的特殊节假日
+        if (workDay){
+            for (HolidaySetting holiday : holidaySetting) {
+                if (holiday.getHolidayDate().equals(date)){
+                    workDay = false;
+                    break;
+                }
+            }
+        }
         return workDay;
     }
 }

+ 8 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserWithBeisenServiceImpl.java

@@ -151,6 +151,11 @@ public class UserWithBeisenServiceImpl extends ServiceImpl<UserWithBeisenMapper,
             allVacationList.addAll(vacationList);
             allDailyReportList.addAll(dailyReportList);
         }
+        //打印数据
+        System.out.println("allOverTimeList:"+allOverTimeList);
+        System.out.println("attendanceStatistics:"+attendanceStatistics);
+        System.out.println("allVacationList:"+allVacationList);
+        System.out.println("allDailyReportList:"+allDailyReportList);
         for (LocalDate localDate : workDaysListInRange) {
             Stream<JSONObject> swipingCardsStream = attendanceStatistics.stream().map(item -> (JSONObject) item);
             //todo: 获取当天的考勤数据
@@ -284,7 +289,9 @@ public class UserWithBeisenServiceImpl extends ServiceImpl<UserWithBeisenMapper,
                             double marriageLeaveHour = list.stream().mapToDouble(l -> l.getDoubleValue("MarriageLeaveHour")).sum();
                             //产假
                             double maternityLeaveHour = list.stream().mapToDouble(l -> l.getDoubleValue("MaternityLeaveHour")).sum();
-                            workTime=workTime-annualLeaveHour-casualLeaveHour-sickLeaveHour-marriageLeaveHour-maternityLeaveHour;
+                            //福利年假
+                            double customItemHour1 = list.stream().mapToDouble(l -> l.getDoubleValue("CustomItemHour1")).sum();
+                            workTime=workTime-annualLeaveHour-casualLeaveHour-sickLeaveHour-marriageLeaveHour-maternityLeaveHour-customItemHour1;
                         }
                     }
                     UserFvTime userFvTime=new UserFvTime();

+ 7 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java

@@ -148,6 +148,8 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
 
     @Resource
     WxCorpInfoMapper wxCorpInfoMapper;
+    @Resource
+    HolidaySettingMapper holidaySettingMapper;
 
     @Resource
     SysConfigMapper sysConfigMapper;
@@ -907,13 +909,14 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
             //获取企业下的活跃员工
             List<User> users = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId).isNotNull("corpwx_userid").eq("is_active", 1));
             List<UserCorpwxTime> corpwxTimes = userCorpwxTimeMapper.selectList(new QueryWrapper<UserCorpwxTime>().eq("company_id", companyId).between("create_date", startDateTime.toLocalDate(), endDateTime.toLocalDate()));
+            List<HolidaySetting> holidaySettings = holidaySettingMapper.selectList(new QueryWrapper<HolidaySetting>().eq("company_id", companyId));
             LocalDate endLocalDate = endDateTime.toLocalDate();
             int i=0;
             DateTimeFormatter dateTimeFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd");
             TimeType timeType = timeTypeMapper.selectById(companyId);
             while (true) {
                 LocalDate day = date.plusDays(i);
-                if (timeTypeService.isWorkDay(corpInfo.getCompanyId(), day, timeType)) {
+                if (timeTypeService.isWorkDay(corpInfo.getCompanyId(), day, timeType, holidaySettings)) {
                     System.out.println("============="+dateTimeFormat.format(day)+"==============");
                     List<String> missRecordUserCorpIds = new ArrayList<>();
                     List<User> filterusers = new ArrayList<>();
@@ -1261,6 +1264,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
         ResponseEntity<String> responseEntity = this.restTemplate.exchange(url,
                 HttpMethod.POST, requestEntity, String.class);
         TimeType timeType = timeTypeMapper.selectById(corpInfo.getCompanyId());
+        List<HolidaySetting> holidaySettings = holidaySettingMapper.selectList(new QueryWrapper<HolidaySetting>().eq("company_id", corpInfo.getCompanyId()));
         if (responseEntity.getStatusCode() == HttpStatus.OK) {
             String resp = responseEntity.getBody();
             if (showLog) System.out.println(resp);
@@ -1361,7 +1365,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                         ct.setWorkHours(DateTimeUtil.getHoursFromDouble(ct.getCardTime()));
                     }
                     //工作日或者非工作日有打卡/加班,需要校正请假,外出的时长数据
-                    else if (timeTypeService.isWorkDay(corpInfo.getCompanyId(), localDate, timeType) || sTime > 0 || eTime > 0) {
+                    else if (timeTypeService.isWorkDay(corpInfo.getCompanyId(), localDate, timeType, holidaySettings) || sTime > 0 || eTime > 0) {
                         JSONArray holidayItems = jsonObject.getJSONArray("holiday_infos");
                         //开始时间和结束时间一样,说明下班没有打卡,需要提取请假的最晚时间作为下班打卡时间
                         boolean needRecaculate = false;
@@ -1869,7 +1873,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                             userCorpwxTimeMapper.insert(ct);
                         } else {
                             //调用打卡详情去获取,弥补外出打卡且时间不在自动同步范围内的情况; 仅对工作日有效
-                            if (timeTypeService.isWorkDay(corpInfo.getCompanyId(), localDate, timeType)) {
+                            if (timeTypeService.isWorkDay(corpInfo.getCompanyId(), localDate, timeType, holidaySettings)) {
                                 System.out.println("=========获取日打卡详情========="+localDate.toString());
                                 User user = userMapper.selectOne(new QueryWrapper<User>().eq("corpwx_userid", curUserid));
                                 if (user != null) {

+ 2 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java

@@ -1492,7 +1492,7 @@ public class TimingTask {
         typeList.forEach(t->{
             if (str.equals(t.getAlertTime())) {
                 //节假日是否提醒
-                Boolean workDay = timeTypeService.isWorkDay(t.getCompanyId(), localDate, t);
+                Boolean workDay = timeTypeService.isWorkDay(t.getCompanyId(), localDate, t, null);
                 if ((t.getAlertType() == 0 || t.getAlertType() == 1) && !workDay){
                     return;
                 }
@@ -1726,7 +1726,7 @@ public class TimingTask {
 
                     //节假日不提醒,判断当前是否是工作日
                     if (compWorkDayMap.get(curCompanyId) == null) {
-                        Boolean workDay = timeTypeService.isWorkDay(curCompanyId, localDate, null);
+                        Boolean workDay = timeTypeService.isWorkDay(curCompanyId, localDate, null, null);
                         compWorkDayMap.put(curCompanyId, workDay);
                     }
                     Boolean workDay = compWorkDayMap.get(curCompanyId);

+ 65 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/settings/timetype.vue

@@ -335,6 +335,21 @@
             </div>
         </el-col>
         </el-row>
+        <div class="yanjiu" v-if="user.companyId == 5978">
+            <p style="margin-left:10px;color:#666;">考勤同步</p>
+            <el-date-picker
+                v-model="attendanceSynchronizationDate"
+                type="daterange"
+                range-separator="至"
+                start-placeholder="开始日期"
+                end-placeholder="结束日期"
+                value-format="yyyy-MM-dd" 
+                size="small"
+                :picker-options="pickerOptions"
+                style="margin: 0 20px;">
+            </el-date-picker>
+            <el-button type="primary" :loading="attendanceSynchronizationLoading" @click="startSynchronizing()" size="small" :disabled="!attendanceSynchronizationDate.length">开始同步</el-button>
+        </div>
         <div class="yanjiu">
             <p style="margin-left:10px;color:#666;">{{ $t('riBaoShenHeMoShi') }}</p><el-tag style="margin-left:10px;" type="plain">{{reportAuditTypeArray[timeType.reportAuditType]}}
                 <el-tooltip effect="dark" :content="$t('ruXuXiuGaiWeiQiTaShenHeMoShiQingLianXiKeFu')" placement="top-start">
@@ -915,7 +930,27 @@
                 specialHolidaysUser: {
                     values: [],
                     labels: []
-                }
+                },
+                attendanceSynchronizationDate: [],
+                attendanceSynchronizationLoading: false,
+                day31: 30 * 24 * 3600 * 1000,
+                pickerMinDate: null,
+                pickerMaxDate: null,
+                pickerOptions: {
+                    onPick: ({ maxDate, minDate }) => {
+                        if (minDate && this.pickerMinDate) {
+                            this.pickerMinDate = null;
+                        } else if (minDate) {
+                            this.pickerMinDate = minDate.getTime();
+                        }
+                    },
+                    disabledDate: (time) => {
+                        if (this.pickerMinDate) {
+                            return (time.getTime() > (this.pickerMinDate + this.day31)) || (time.getTime() < (this.pickerMinDate - this.day31));
+                        }
+                        return false;
+                    }
+                },
             };
         },
         watch: {
@@ -955,6 +990,35 @@
             }, 1000)
         },
          methods: {
+            startSynchronizing() {
+                this.attendanceSynchronizationLoading = true;
+                this.http.post('/user-with-beisen/syncAttendanceFromBeisen',{
+                    startDate: this.attendanceSynchronizationDate[0],
+                    endDate: this.attendanceSynchronizationDate[1],
+                },
+                res => {
+                    this.attendanceSynchronizationLoading = false;
+                    if (res.code == "ok") {
+                        this.$message({
+                            message: '同步成功',
+                            type: "success"
+                        });
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.attendanceSynchronizationLoading = false;
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                    }
+                );
+            },
             showMultiTimeOption() {
                 this.multiTimeOptionVisible = true;
                 this.listLoading = true;