Browse Source

企业微信考勤加班限制

QuYueTing 7 tháng trước cách đây
mục cha
commit
ace13eb82e

+ 33 - 11
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -865,7 +865,6 @@ public class ReportController {
                 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++) {
@@ -1218,16 +1217,39 @@ public class ReportController {
             }
         }
         //如果开启了加班时长校验
-        if(comTimeType.getFillOvertime()==1&&comTimeType.getWorkOvertimeNeedCheck()==1){
-            for (Report report : reportList) {
-                if(WorkDayCalculateUtils.isWorkDay(report.getCreateDate())){
-                    HttpRespMsg httpRespMsg = new HttpRespMsg();
-                    double sum = reportList.stream().filter(rl -> rl.getCreateDate().equals(report.getCreateDate()) && rl.getCreatorId().equals(report.getCreatorId())).mapToDouble(Report::getWorkingTime).sum();
-                    BigDecimal bigDecimal=new BigDecimal(sum);
-                    bigDecimal=bigDecimal.subtract(new BigDecimal(comTimeType.getAllday()));
-                    if(report.getOvertimeHours() != null && report.getOvertimeHours()>0 && report.getOvertimeHours()-bigDecimal.doubleValue() > 0.001){
-                        httpRespMsg.setError("加班时长不得超过总工作时长-正常工作时长");
-                        return httpRespMsg;
+        if(comTimeType.getFillOvertime()==1){
+            if (comTimeType.getWorkOvertimeNeedCheck()==1) {
+                for (Report report : reportList) {
+                    if(WorkDayCalculateUtils.isWorkDay(report.getCreateDate())){
+                        HttpRespMsg httpRespMsg = new HttpRespMsg();
+                        double sum = reportList.stream().filter(rl -> rl.getCreateDate().equals(report.getCreateDate()) && rl.getCreatorId().equals(report.getCreatorId())).mapToDouble(Report::getWorkingTime).sum();
+                        BigDecimal bigDecimal=new BigDecimal(sum);
+                        bigDecimal=bigDecimal.subtract(new BigDecimal(comTimeType.getAllday()));
+                        if(report.getOvertimeHours() != null && report.getOvertimeHours()>0 && report.getOvertimeHours()-bigDecimal.doubleValue() > 0.001){
+                            httpRespMsg.setError("加班时长不得超过总工作时长-正常工作时长");
+                            return httpRespMsg;
+                        }
+                    }
+                }
+            }
+            //校验加班时长是否超过打卡中的加班时长
+            if (draft == 0 && comTimeType.getVerifyCardOvertime() == 1) {
+                User curReporter = userMapper.selectById(reportList.get(0).getCreatorId());
+                for (Report report : reportList) {
+                    if(WorkDayCalculateUtils.isWorkDay(report.getCreateDate())){
+                        HttpRespMsg httpRespMsg = new HttpRespMsg();
+                        double overTimeSum = reportList.stream().filter(rl -> rl.getCreateDate().equals(report.getCreateDate()) && rl.getCreatorId().equals(report.getCreatorId())).mapToDouble(Report::getOvertimeHours).sum();
+                        UserCorpwxTime userCorpwxTime = userCorpwxTimeMapper.selectOne(new QueryWrapper<UserCorpwxTime>().eq("ot_status", 1).eq("corpwx_userid", curReporter.getCorpwxUserid()).eq("create_date", report.getCreateDate()));
+                        if(overTimeSum > 0){
+                            if (userCorpwxTime == null || userCorpwxTime.getOtTime() == 0) {
+                                httpRespMsg.setError("未同步到加班时长,请先补填加班申请");
+                                return httpRespMsg;
+                            } else if (overTimeSum - userCorpwxTime.getOtTime() > 0.001) {
+                                httpRespMsg.setError("填报加班时长不得超过考勤加班时长("+userCorpwxTime.getOtTime()+"h)");
+                                return httpRespMsg;
+                            }
+
+                        }
                     }
                 }
             }

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

@@ -10116,10 +10116,20 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
 
     @Override
     public HttpRespMsg getCurAuditNode(String date, String userId) {
+        HttpRespMsg msg = new HttpRespMsg();
         List<Report> list = reportMapper.selectList(new QueryWrapper<Report>().eq("create_date", date).eq("creator_id", userId));
-        if (list.size() == 0) {
-            return new HttpRespMsg().setError("日报已不存在");
+        Integer curNode = 1;//员工提交
+        if (list.size() > 0) {
+            Report report = list.get(0);
+            if (report.getState() == 1) {
+                curNode = 4;//公司副总审核通过
+            } else if (report.getProjectAuditState() == 1) {
+                curNode = 3; //项目经理审核通过
+            } else if (report.getState() == 0) {
+                curNode = 2;//员工提交,待审核
+            }
         }
-        return null;
+        msg.data = curNode;
+        return msg;
     }
 }

BIN
fhKeeper/formulahousekeeper/management-platform/src/main/resources/upload/上海民航合同模板.xlsx


+ 35 - 14
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -198,7 +198,7 @@
                                                     <p><!-- 项目 -->{{$t('other.project')}}:<b v-if="item2.projectCode">{{item2.projectCode + '/'}}</b><b>{{item2.project}}</b>
                                                     <span v-if="item2.subProjectName != null"> / {{item2.subProjectName}}</span>
                                                     <span v-if="user.company.packageEngineering == 0">
-                                                    <span style="margin-left:15px;color:#DAA520;"  v-if="item2.state == 0">[ 
+                                                    <span style="margin-left:15px;color:#FFA500;"  v-if="item2.state == 0">[ 
                                                         <span v-if="user.timeType.reportAuditType == 7" >
                                                             {{$t('other.reviewer')}}:<TranslationOpenData  :configurationItems="{ openType: 'userName', openId: item2.projectAuditorName, renderIndex: 0 }" /><span v-if="item2.projectAuditState==1">√</span>
                                                             <span v-if="item2.deptAuditorName">、</span>
@@ -231,7 +231,7 @@
                                                             </span>
                                                         </span>
                                                         ]</span> 
-                                                    <span style="margin-left:15px;color:#DAA520;" v-else-if="item2.state == -1">[ {{$t('other.importWaitingForReview')}} ]</span>
+                                                    <span style="margin-left:15px;color:#FFA500;" v-else-if="item2.state == -1">[ {{$t('other.importWaitingForReview')}} ]</span>
                                                     <span style="margin-left:15px;color:#32CD32;" v-else-if="item2.state == 1">[ {{$t('state.alreadyPassed')}} ]
                                                         <span style="color:#c7e944" v-if="item2.reportAutoApprove == 1 && user.companyId != '3511'">{{$t('other.automaticReview')}}</span>
                                                     </span>
@@ -241,10 +241,10 @@
                                                     </span>
                                                     <!-- <el-button v-if="(user.role == 1 || user.role == 2) && item2.state != 1 && user.manageDeptId != 0" size="mini" @click="guanli(item2, item1)" style="float: right;">删除</el-button> -->
                                                     <span v-if="user.company.packageEngineering == 1">
-                                                        <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == -1">[ {{$t('other.importWaitingForReview')}} ]</span>
-                                                        <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == 0 && item2.departmentAuditState == -1">[ {{$t('other.waitingForProfessionalReview')}} ]</span>
-                                                        <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == 0 && item2.departmentAuditState == 0">[ {{$t('other.waitingForDepartmentReview')}} ]</span>
-                                                        <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == 0 && item2.departmentAuditState == 1">[ {{$t('other.waitForTheProjectReviewer')}}<span v-if="item2.projectAuditorName != null">
+                                                        <span style="margin-left:15px;color:#FFA500;" v-if="item2.state == -1">[ {{$t('other.importWaitingForReview')}} ]</span>
+                                                        <span style="margin-left:15px;color:#FFA500;" v-if="item2.state == 0 && item2.departmentAuditState == -1">[ {{$t('other.waitingForProfessionalReview')}} ]</span>
+                                                        <span style="margin-left:15px;color:#FFA500;" v-if="item2.state == 0 && item2.departmentAuditState == 0">[ {{$t('other.waitingForDepartmentReview')}} ]</span>
+                                                        <span style="margin-left:15px;color:#FFA500;" v-if="item2.state == 0 && item2.departmentAuditState == 1">[ {{$t('other.waitForTheProjectReviewer')}}<span v-if="item2.projectAuditorName != null">
                                                             (
                                                                 <!-- <span v-if="user.userNameNeedTranslate != 1">
                                                                     {{item2.projectAuditorName}}
@@ -418,6 +418,7 @@
                     <el-form-item :label="$t('other.attendancePunch')" v-if="workForm.showRefresh || user.companyId == 5978">
                         <span v-if="workForm.time">{{workForm.time.startTime}}-{{workForm.time.endTime}}, 工作{{workForm.time.workHours}}{{$t('time.hour')}}
                         <span v-if="workForm.time.askLeaveTime">|&nbsp;{{ $t('other.AskForLeave') }}{{ workForm.time.askLeaveTime }}{{$t('time.hour')}}</span>
+                        <span v-if="workForm.time.otTime" style="color:#FFA500;">|&nbsp;加班{{ workForm.time.otTime }}{{$t('time.hour')}}</span>
                         </span>
                         <!--批量填报和批量代填不显示考勤记录-->
                         <span v-if="!isBatch && (user.timeType.syncDingding==1 || user.timeType.syncCorpwxTime==1)&&!workForm.time" >{{$t('other.noAttendanceRecord')}}</span>
@@ -948,7 +949,6 @@
 
         <!-- 按周填报 -->
         <el-dialog :title="$t('textLink.fillInAWeek')" :visible.sync="fillWeekDialogVisi" width="1200px" :close-on-click-modal="false" @closed="guanbi(),closeAddWeeklyReport()">
-            
             <!-- 按周填报-已填工时-点击 -->
             <el-dialog append-to-body :title="$t('lable.filledReport')" :visible.sync="weeklyFilledTimeDialog" width="50%" :close-on-click-modal="false">
                 <el-table :data="weeklyFilledTimeList" v-loading="weeklyFilledTimeLoading">
@@ -1029,9 +1029,11 @@
                             </div>
                         </template>
                     </el-table-column>
-                    <el-table-column fixed="right" :label="$t('other.attendancePunch')" width="150" v-if="user.timeType.showDdCardtime == 1 || user.timeType.showCorpwxCardtime == 1">
+                    <el-table-column fixed="right" :label="$t('other.attendancePunch')" width="160" v-if="user.timeType.showDdCardtime == 1 || user.timeType.showCorpwxCardtime == 1">
                         <template slot-scope="scope">
-                            <span v-if="scope.row.corpTime">{{scope.row.corpTime.startTime + '-' + scope.row.corpTime.endTime + ',' + scope.row.corpTime.workHours.toFixed(1) + 'h'}}</span>
+                            <span v-if="scope.row.corpTime">{{scope.row.corpTime.startTime + '-' + scope.row.corpTime.endTime + ',' + scope.row.corpTime.workHours.toFixed(1) + 'h'}}
+                                <span v-if="scope.row.corpTime.otTime" style="color:#FFA500"><br/>加班:{{scope.row.corpTime.otTime+'h'}}</span>
+                            </span>
                             <span v-else style="color:#999999;">{{$t('other.noAttendanceRecord')}}</span>
                         </template>
                     </el-table-column>
@@ -2164,15 +2166,16 @@
         </el-dialog>
         
         <!-- 审核流程展示 -->
-        <el-dialog :title="$t('title.reviewProcess')" v-if="approvalProcessDialog" :visible.sync="approvalProcessDialog" customClass="customWidth" width="400px">
+        <el-dialog :title="$t('title.reviewProcess')" v-if="approvalProcessDialog" :visible.sync="approvalProcessDialog" customClass="customWidth" width="500px">
             <div style="padding:20px 40px 20px 0">
-                <el-steps  :active="curAuditNode" align-center="true" finish-status="success">
+                <el-steps  :active="curAuditNode" align-center="true" finish-status="success" v-if="user.companyId == 7544">
+                <el-step title="待提交"></el-step>
                 <el-step title="员工提交"></el-step>
                 <el-step title="项目经理审核"></el-step>
                 <el-step title="公司副总审核"></el-step>
                 </el-steps>
-                <el-divider></el-divider>
-                <p style="color:#aaaaaa;">审核记录</p>
+                <el-divider v-if="user.companyId == 7544"></el-divider>
+                <p style="color:#aaaaaa;" v-if="user.companyId == 7544">审核记录</p>
                 <el-timeline :reverse="false" style="margin-top:10px;">
                     <el-timeline-item v-for="item in approvalProcessData" :key="item.id" :timestamp="item.operateDate">
                         <!-- {{item.msg}} -->
@@ -3256,6 +3259,23 @@
                         type: 'error'
                     })
                 })
+                //获取审批节点状态
+                if (this.user.companyId == 7544) {
+                    this.http.post('/report/getCurAuditNode',{
+                        userId: item.id,
+                        date: sessionStorage.msg
+                    },res => {
+                        if(res.code == 'ok'){
+                            this.curAuditNode = res.data
+                        }else{
+                        }
+                    },err => {
+                        this.$message({
+                            message: err,
+                            type: 'error'
+                        })
+                    })
+                }
             },
 
             filterNode(value, data) {
@@ -6802,7 +6822,8 @@
                             let item = {
                                 startTime: list[i].startTime,
                                 endTime: list[i].endTime,
-                                workHours: list[i].workHours
+                                workHours: list[i].workHours,
+                                otTime: list[i].otTime
                             }
                             this.$set(this.zhoData[m],'corpTime',item)
                         }

+ 2 - 0
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue

@@ -34,6 +34,8 @@
                                 <span v-else>{{ report.time.startTime }}-{{ report.time.endTime }}, 工作{{
                                     report.time.workHours }}h
                                     <span v-if="report.time.askLeaveTime">|&nbsp;请假{{ report.time.askLeaveTime
+                                    }}h</span>
+                                    <span v-if="report.time.otTime" style="color:#DAA520;">|&nbsp;加班{{ report.time.otTime
                                     }}h</span></span>
                             </template>
                             <span style="margin-left:5px">总填报:</span>

+ 3 - 0
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/weekEdit.vue

@@ -748,6 +748,9 @@
                             if (res.data.askLeaveTime) {
                                 this.kaoqinText += ' | 请假'+res.data.askLeaveTime+'h';
                             }
+                            if (res.data.otTime) {
+                                this.kaoqinText += ' | 加班'+res.data.otTime+'h';
+                            }
                             if((this.user.timeType.showDdCardtime == 1 || this.user.timeType.showCorpwxCardtime == 1)){
                                 this.$set(this.currentForm,'cardtime',res.data.workHours)
                             }