Browse Source

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

cs 2 years ago
parent
commit
b436216b73

+ 21 - 10
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -124,7 +124,9 @@ public class ReportController {
             worktimeItemList.add(worktimeItem);
         }
         User user = userMapper.selectById(token);
+        //按当前填报人所属部门或者全公司来匹配
         List<TimeAutoExclude> excludeTimeList = timeAutoExcludeMapper.selectList(new QueryWrapper<TimeAutoExclude>().eq("company_id", user.getCompanyId()));
+        excludeTimeList = excludeTimeList.stream().filter(ex->ex.getDId() == null || ex.getDId().equals(user.getDepartmentId())).collect(Collectors.toList());
 
         int totalMinutes = 0;
         for (WorktimeItem worktimeItem : worktimeItemList) {
@@ -162,7 +164,7 @@ public class ReportController {
             totalMinutes += minutes;
         }
         double hours = totalMinutes*1.0f/60;
-        DecimalFormat df = new DecimalFormat("0.00");
+        DecimalFormat df = new DecimalFormat("0.0");
         msg.data = df.format(hours);
         return msg;
     }
@@ -572,7 +574,10 @@ public class ReportController {
             List<TimeAutoExclude> excludeTimeList = new ArrayList<>();
             //按照时间段填报的模式下,检查是否设置了休息时间段,要自动剔除
             if (comTimeType.getType() == 2) {
-                excludeTimeList = timeAutoExcludeMapper.selectList(new QueryWrapper<TimeAutoExclude>().eq("company_id", company.getId()));
+                excludeTimeList = timeAutoExcludeMapper.selectList(new QueryWrapper<TimeAutoExclude>().eq("company_id", user.getCompanyId()));
+                //按当前填报人所属部门或者全公司来匹配
+                excludeTimeList = excludeTimeList.stream().filter(ex->ex.getDId() == null || ex.getDId().equals(user.getDepartmentId())).collect(Collectors.toList());
+
             }
 
             for (int i = 0; i < id.length; i++) {
@@ -1835,7 +1840,8 @@ public class ReportController {
             TimeType allDay = timeTypeMapper.selectOne(new QueryWrapper<TimeType>().eq("company_id", compId));
             List<User> allUserList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", compId));
             //获取休息设置
-            TimeAutoExclude timeAutoExclude = timeAutoExcludeMapper.selectOne(new QueryWrapper<TimeAutoExclude>().eq("company_id", compId));
+            List<TimeAutoExclude> excludeTimeList = timeAutoExcludeMapper.selectList(new QueryWrapper<TimeAutoExclude>().eq("company_id", compId));
+
             //Todo: 获取考勤打卡数据
             HttpRespMsg workDataMsg = dockWithMLD.getResult("http://10.1.10.51:20175/api/cube/restful/interface/getModeDataPageList/getWorkData", jsonString);
             List<Map<String,Object>> workDataList= (List<Map<String, Object>>) workDataMsg.data;
@@ -1849,6 +1855,9 @@ public class ReportController {
             List<User> userList = userMapper.selectList(new QueryWrapper<User>().in("job_number", userIds));
             List<LocalDateTime> dateTimeList = getDays(yesterday, yesterday.plusDays(2));
             for (User user : userList) {
+                //按当前填报人所属部门或者全公司来匹配
+                excludeTimeList = excludeTimeList.stream().filter(ex->ex.getDId() == null || ex.getDId().equals(user.getDepartmentId())).collect(Collectors.toList());
+
                 for (LocalDateTime localDateTime : dateTimeList) {
                     LocalDate workDate=localDateTime.toLocalDate();
                     //当天的考勤记录
@@ -1895,14 +1904,16 @@ public class ReportController {
                         userFvTime.setCompanyId(user.getCompanyId());
                         userFvTime.setUserId(user.getId());
                         long workHours = between.toHours();
-                        long restHours;
-                        if(startTime.isBefore(LocalTime.parse(timeAutoExclude.getStartTime(),dtf2))
-                                &&endTime.isAfter(LocalTime.parse(timeAutoExclude.getEndTime(),dtf2))){
-                            Duration bt = Duration.between(LocalTime.parse(timeAutoExclude.getStartTime(),dtf2), LocalTime.parse(timeAutoExclude.getEndTime(),dtf2));
-                            restHours=bt.toHours();
-                        }else {
-                            restHours=0;
+                        long restHours = 0;
+                        //处理排除时间段
+                        for (TimeAutoExclude timeAutoExclude : excludeTimeList) {
+                            if(startTime.isBefore(LocalTime.parse(timeAutoExclude.getStartTime(),dtf2))
+                                    &&endTime.isAfter(LocalTime.parse(timeAutoExclude.getEndTime(),dtf2))){
+                                Duration bt = Duration.between(LocalTime.parse(timeAutoExclude.getStartTime(),dtf2), LocalTime.parse(timeAutoExclude.getEndTime(),dtf2));
+                                restHours += bt.toHours();
+                            }
                         }
+
                         userFvTime.setWorkHours(BigDecimal.valueOf(workHours).subtract(BigDecimal.valueOf(restHours)).floatValue());
                         Optional<UserFvTime> first = oldUserFvTimeList.stream().filter(ol -> ol.getWorkDate().isEqual(userFvTime.getWorkDate()) && ol.getUserId().equals(userFvTime.getUserId())).findFirst();
                         if(first.isPresent()){

+ 12 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserFvTimeController.java

@@ -87,7 +87,7 @@ public class UserFvTimeController {
             TimeType allDay = timeTypeMapper.selectOne(new QueryWrapper<TimeType>().eq("company_id", compId));
             List<User> allUserList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", compId));
             //获取休息设置
-            TimeAutoExclude timeAutoExclude = timeAutoExcludeMapper.selectOne(new QueryWrapper<TimeAutoExclude>().eq("company_id", compId));
+            List<TimeAutoExclude> excludeTimeList = timeAutoExcludeMapper.selectList(new QueryWrapper<TimeAutoExclude>().eq("company_id", compId));
             //Todo: 获取考勤打卡数据
             HttpRespMsg workDataMsg = dockWithMLD.getResult("http://10.1.10.51:20175/api/cube/restful/interface/getModeDataPageList/getWorkData", jsonString);
             List<Map<String,Object>> workDataList= (List<Map<String, Object>>) workDataMsg.data;
@@ -101,6 +101,8 @@ public class UserFvTimeController {
             List<User> userList = userMapper.selectList(new QueryWrapper<User>().in("job_number", userIds));
             List<LocalDateTime> dateTimeList = getDays(yesterday, yesterday.plusDays(2));
             for (User user : userList) {
+                //按当前填报人所属部门或者全公司来匹配
+                excludeTimeList = excludeTimeList.stream().filter(ex->ex.getDId() == null || ex.getDId().equals(user.getDepartmentId())).collect(Collectors.toList());
                 for (LocalDateTime localDateTime : dateTimeList) {
                     LocalDate workDate=localDateTime.toLocalDate();
                     //当天的考勤记录
@@ -147,14 +149,16 @@ public class UserFvTimeController {
                         userFvTime.setCompanyId(user.getCompanyId());
                         userFvTime.setUserId(user.getId());
                         long workHours = between.toHours();
-                        long restHours;
-                        if(startTime.isBefore(LocalTime.parse(timeAutoExclude.getStartTime(),dtf2))
-                                &&endTime.isAfter(LocalTime.parse(timeAutoExclude.getEndTime(),dtf2))){
-                            Duration bt = Duration.between(LocalTime.parse(timeAutoExclude.getStartTime(),dtf2), LocalTime.parse(timeAutoExclude.getEndTime(),dtf2));
-                            restHours=bt.toHours();
-                        }else {
-                            restHours=0;
+                        long restHours = 0;
+                        //处理排除时间段
+                        for (TimeAutoExclude timeAutoExclude : excludeTimeList) {
+                            if(startTime.isBefore(LocalTime.parse(timeAutoExclude.getStartTime(),dtf2))
+                                    &&endTime.isAfter(LocalTime.parse(timeAutoExclude.getEndTime(),dtf2))){
+                                Duration bt = Duration.between(LocalTime.parse(timeAutoExclude.getStartTime(),dtf2), LocalTime.parse(timeAutoExclude.getEndTime(),dtf2));
+                                restHours += bt.toHours();
+                            }
                         }
+
                         userFvTime.setWorkHours(BigDecimal.valueOf(workHours).subtract(BigDecimal.valueOf(restHours)).floatValue());
                         Optional<UserFvTime> first = oldUserFvTimeList.stream().filter(ol -> ol.getWorkDate().isEqual(userFvTime.getWorkDate()) && ol.getUserId().equals(userFvTime.getUserId())).findFirst();
                         if(first.isPresent()){

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

@@ -310,7 +310,8 @@ public class TimingTask {
             TimeType allDay = timeTypeMapper.selectOne(new QueryWrapper<TimeType>().eq("company_id", compId));
             List<User> allUserList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", compId));
             //获取休息设置
-            TimeAutoExclude timeAutoExclude = timeAutoExcludeMapper.selectOne(new QueryWrapper<TimeAutoExclude>().eq("company_id", compId));
+            List<TimeAutoExclude> excludeTimeList = timeAutoExcludeMapper.selectList(new QueryWrapper<TimeAutoExclude>().eq("company_id", compId));
+
             //Todo: 获取考勤打卡数据
             HttpRespMsg workDataMsg = dockWithMLD.getResult("http://10.1.10.51:20175/api/cube/restful/interface/getModeDataPageList/getWorkData", jsonString);
             List<Map<String,Object>> workDataList= (List<Map<String, Object>>) workDataMsg.data;
@@ -324,6 +325,9 @@ public class TimingTask {
             List<User> userList = userMapper.selectList(new QueryWrapper<User>().in("job_number", userIds));
             List<LocalDateTime> dateTimeList = getDays(yesterday, yesterday.plusDays(2));
             for (User user : userList) {
+                //按当前填报人所属部门或者全公司来匹配
+                excludeTimeList = excludeTimeList.stream().filter(ex->ex.getDId() == null || ex.getDId().equals(user.getDepartmentId())).collect(Collectors.toList());
+
                 for (LocalDateTime localDateTime : dateTimeList) {
                     LocalDate workDate=localDateTime.toLocalDate();
                     //当天的考勤记录
@@ -370,14 +374,16 @@ public class TimingTask {
                         userFvTime.setCompanyId(user.getCompanyId());
                         userFvTime.setUserId(user.getId());
                         long workHours = between.toHours();
-                        long restHours;
-                        if(startTime.isBefore(LocalTime.parse(timeAutoExclude.getStartTime(),dtf2))
-                                &&endTime.isAfter(LocalTime.parse(timeAutoExclude.getEndTime(),dtf2))){
-                            Duration bt = Duration.between(LocalTime.parse(timeAutoExclude.getStartTime(),dtf2), LocalTime.parse(timeAutoExclude.getEndTime(),dtf2));
-                            restHours=bt.toHours();
-                        }else {
-                            restHours=0;
+                        long restHours = 0;
+                        //处理排除时间段
+                        for (TimeAutoExclude timeAutoExclude : excludeTimeList) {
+                            if(startTime.isBefore(LocalTime.parse(timeAutoExclude.getStartTime(),dtf2))
+                                    &&endTime.isAfter(LocalTime.parse(timeAutoExclude.getEndTime(),dtf2))){
+                                Duration bt = Duration.between(LocalTime.parse(timeAutoExclude.getStartTime(),dtf2), LocalTime.parse(timeAutoExclude.getEndTime(),dtf2));
+                                restHours += bt.toHours();
+                            }
                         }
+
                         userFvTime.setWorkHours(BigDecimal.valueOf(workHours).subtract(BigDecimal.valueOf(restHours)).floatValue());
                         Optional<UserFvTime> first = oldUserFvTimeList.stream().filter(ol -> ol.getWorkDate().isEqual(userFvTime.getWorkDate()) && ol.getUserId().equals(userFvTime.getUserId())).findFirst();
                         if(first.isPresent()){

+ 61 - 39
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue

@@ -16,7 +16,7 @@
                         </template>
                         <span style="margin-left:20px">总填报时长:</span>
                         <span>{{totalReportHours}}h</span>
-                    </div>
+                    </div> 
                 </template>
                 <template #right-icon>
                     <van-button icon="replay" native-type="button" type="default" size="mini" style="height:0.6rem;padding:0 0.16667rem;" :loading="cardRefLoading" loading-size="0.26667rem" @click.stop.native="cardtimeRefresh(form.createDate)" v-if="user.timeType.syncCorpwxTime==1 && (form.createDate == today || !report.time || report.time.workHours <= 0) && (user.timeType.syncDingding == 1 || user.timeType.syncCorpwxTime == 1)"></van-button>
@@ -997,6 +997,7 @@ import timetoolVue from '../timetool/timetool.vue';
                     this.curWorktime.endTime = this.endTime;
                     this.showWorkEndTime = false;
                 }
+                this.setTotalReportHours()
             },
 
             confirmTime(item, field, index) {
@@ -1018,61 +1019,78 @@ import timetoolVue from '../timetool/timetool.vue';
                 let domains = this.form.domains
                 let hours = 0
                 let arrNum = [] //  用于时间段计算加班时间
+                let timeArr = []
                 for(let i in domains){
-                    // if(domains[i].projectId){
-                        // hours += parseFloat(domains[i].workingTime)
                         if(this.reportTimeType.multiWorktime == 1){
                             for(let m in domains[i].worktimeList){
                                 if(domains[i].worktimeList[m].startTime && domains[i].worktimeList[m].endTime){
-                                    hours += this.getHour(domains[i].worktimeList[m].startTime, domains[i].worktimeList[m].endTime)
+                                    // hours += this.getHour(domains[i].worktimeList[m].startTime, domains[i].worktimeList[m].endTime)
+                                    timeArr.push({startTime: domains[i].worktimeList[m].startTime, endTime:domains[i].worktimeList[m].endTime})
                                 }
                             }
                         }else{
                             if(this.user.timeType.type == 2){
                                 if(domains[i].startTime && domains[i].endTime){
-                                    let selectionTime = this.getHour(domains[i].startTime, domains[i].endTime)
-                                    let subtractedData = 0
-                                    let arr = JSON.parse(JSON.stringify(this.vacationTime))
-                                    arr.unshift({s: domains[i].startTime, e: domains[i].endTime})
-                                    for(var j in arr) {
-                                        subtractedData += +this.timeOverlap(j, arr)
-                                    }
-                                    console.log(selectionTime, subtractedData)
-                                    hours += +selectionTime - +subtractedData
-                                    console.log(hours)
-                                    arrNum.push(+selectionTime - +subtractedData)
+                                    // let selectionTime = this.getHour(domains[i].startTime, domains[i].endTime)
+                                    // let subtractedData = 0
+                                    // let arr = JSON.parse(JSON.stringify(this.vacationTime))
+                                    // arr.unshift({s: domains[i].startTime, e: domains[i].endTime})
+                                    // for(var j in arr) {
+                                    //     subtractedData += +this.timeOverlap(j, arr)
+                                    // }
+                                    // console.log(selectionTime, subtractedData)
+                                    // hours += +selectionTime - +subtractedData
+                                    // console.log(hours)
+                                    // arrNum.push(+selectionTime - +subtractedData)
+                                    timeArr.push({startTime: domains[i].startTime, endTime: domains[i].endTime})
                                 }
                             } else {
                                 hours += domains[i].workingTime ? parseFloat(domains[i].workingTime) : 0
                             }
                         }
-                    // }
                 }
-                // return hours.toFixed(2)
-                this.totalReportHours = hours.toFixed(2)
-
-                if(this.user.timeType.type == 2 && this.reportTimeType.multiWorktime != 1) {
-                    let flg = false
-                    let zuiNum = 0
-                    for(let j in arrNum) {
-                        zuiNum += arrNum[j]
-                        console.log(zuiNum, arrNum[j], flg)
-                        if(flg) {
-                            this.$set(this.form.domains[j],'isOvertime', true)
-                            this.$set(this.form.domains[j],'overtimeHours', arrNum[j])
-                        }
-                        if(zuiNum > this.user.timeType.allday && !flg) {
-                            flg = true
-                            this.$set(this.form.domains[j],'isOvertime', true)
-                            this.$set(this.form.domains[j],'overtimeHours', zuiNum - this.user.timeType.allday)
-                        }
 
-                        if(zuiNum < this.user.timeType.allday && !flg) {
-                            this.$set(this.form.domains[j],'isOvertime', false)
-                            this.$set(this.form.domains[j],'overtimeHours', '')
-                        }
-                    }
+                // this.totalReportHours = hours.toFixed(2)
+                console.log('timeArr', timeArr)
+                if(this.reportTimeType.multiWorktime == 1 || this.user.timeType.type == 2){
+                    this.getTimeHours(timeArr)
+                } else {
+                    this.totalReportHours = hours.toFixed(2)
                 }
+
+                // if(this.user.timeType.type == 2 && this.reportTimeType.multiWorktime != 1) {
+                //     let flg = false
+                //     let zuiNum = 0
+                //     for(let j in arrNum) {
+                //         zuiNum += arrNum[j]
+                //         console.log(zuiNum, arrNum[j], flg)
+                //         if(flg) {
+                //             this.$set(this.form.domains[j],'isOvertime', true)
+                //             this.$set(this.form.domains[j],'overtimeHours', arrNum[j])
+                //         }
+                //         if(zuiNum > this.user.timeType.allday && !flg) {
+                //             flg = true
+                //             this.$set(this.form.domains[j],'isOvertime', true)
+                //             this.$set(this.form.domains[j],'overtimeHours', zuiNum - this.user.timeType.allday)
+                //         }
+
+                //         if(zuiNum < this.user.timeType.allday && !flg) {
+                //             this.$set(this.form.domains[j],'isOvertime', false)
+                //             this.$set(this.form.domains[j],'overtimeHours', '')
+                //         }
+                //     }
+                // }
+            },
+            getTimeHours(arr) {
+                this.$axios.post("/report/getHoursByTimeRange", {timeJsonStr: JSON.stringify(arr)})
+                .then(res => {
+                    if(res.code == "ok") {
+                        this.totalReportHours = res.data
+                    } else {
+                        this.$toast.clear();
+                        this.$toast.fail('获取失败');
+                    }
+                }).catch(err=> {this.$toast.clear();});
             },
 
             filter(type, options) {
@@ -1688,6 +1706,8 @@ import timetoolVue from '../timetool/timetool.vue';
                 }
                 
                 this.form.domains.push(item)
+                //重新计算总时长
+                this.setTotalReportHours();
                 this.canEdit = true
                 this.$forceUpdate()
             },
@@ -1699,6 +1719,8 @@ import timetoolVue from '../timetool/timetool.vue';
                     message: '是否移除当前项目'
                 }).then(() => {
                     this.form.domains.splice(i,1);
+                    //重新计算总时长
+                    this.setTotalReportHours();
                 }).catch(() => {
                 });
             },