فهرست منبع

景昱工时异常明细修改
伊斯呗预估工时审核导出修改

Min 1 سال پیش
والد
کامیت
00464addc8

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

@@ -1993,6 +1993,16 @@ public class ReportController {
         return reportService.getUserDailyWorkTime(request, startDate, endDate);
     }
 
+    @RequestMapping("/getUserDailyWorkTimeReminder")
+    public HttpRespMsg getUserDailyWorkTimeReminder(HttpServletRequest request, String startDate, String endDate) throws Exception{
+        return reportService.getUserDailyWorkTimeReminder(request, startDate, endDate);
+    }
+
+    @RequestMapping("/exportUserDailyWorkTimeReminder")
+    public HttpRespMsg exportUserDailyWorkTimeReminder(HttpServletRequest request, String startDate, String endDate) throws Exception{
+        return reportService.exportUserDailyWorkTimeReminder(request, startDate, endDate);
+    }
+
     @RequestMapping("/getNoReportUserList")
     public HttpRespMsg getNoReportUserList(HttpServletRequest request, String startDate, String endDate,Integer noReportDeptId) {
         return reportService.getNoReportUserList(request, startDate, endDate,noReportDeptId);

+ 4 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ReportService.java

@@ -153,4 +153,8 @@ public interface ReportService extends IService<Report> {
     HttpRespMsg getDetailReportById(Integer reportId, HttpServletRequest request);
 
     HttpRespMsg changeReminder(HttpServletRequest request) throws Exception;
+
+    HttpRespMsg getUserDailyWorkTimeReminder(HttpServletRequest request, String startDate, String endDate) throws Exception;
+
+    HttpRespMsg exportUserDailyWorkTimeReminder(HttpServletRequest request, String startDate, String endDate) throws Exception;
 }

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

@@ -4394,16 +4394,18 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             String name = (String)data.get("name");
             String departmentName = (String) data.get("departmentName");
             String corpwxUserId = (String) data.get("corpwxUserId");
-            Integer corpwxDeptId = (Integer) data.get("corpwxDeptId");
+            String corpwxDeptId = (String) data.get("corpwxDeptId");
             Map<String, Object> map = new HashMap<>();
             String date = new SimpleDateFormat("yyyy-MM-dd").format((Date)data.get("createDate"));
             map.put("workingTime", data.get("workingTime"));
             map.put("createDate", date);
+            map.put("cardTime", 0);
             //针对景昱 5978 校验填报工时是否超过考勤
             if(user.getCompanyId().equals(5978)){
                 map.put("exceedCardTime",0);
                 Optional<UserFvTime> first = userFvTimeList.stream().filter(u -> u.getWorkDate().isEqual(LocalDate.parse(date, df)) && u.getUserId().equals(id)).findFirst();
                 if(first.isPresent()){
+                    map.put("cardTime",first.get().getWorkHours());
                     if(first.get().getWorkHours()!=null){
                         Optional<User> optional = userList.stream().filter(u -> u.getId().equals(id)).findFirst();
                         User targetUser = optional.get();
@@ -4438,7 +4440,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 lastUserData.name = name;
                 lastUserData.departmentName = departmentName;
                 lastUserData.corpwxUserId = corpwxUserId;
-                lastUserData.corpwxDeptId = departmentName;
+                lastUserData.corpwxDeptId = corpwxDeptId;
                 lastUserData.worktimeList = new ArrayList<>();
                 lastUserData.worktimeList.add(map);
                 userMonthWorks.add(lastUserData);
@@ -8999,4 +9001,91 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         }
         return msg;
     }
+
+    @Override
+    public HttpRespMsg getUserDailyWorkTimeReminder(HttpServletRequest request, String startDate, String endDate) throws Exception {
+        HttpRespMsg msg=new HttpRespMsg();
+        DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        HttpRespMsg userDailyWorkTime = getUserDailyWorkTime(request, startDate, endDate);
+        List<UserFvTime> userFvTimeList = userFvTimeMapper.selectList(new LambdaQueryWrapper<UserFvTime>().between(UserFvTime::getWorkDate, startDate, endDate));
+        Map<String, Object> objectMap = (Map<String, Object>) userDailyWorkTime.getData();
+        List<UserMonthWork > mapList = (List<UserMonthWork >) objectMap.get("list");
+        List<LocalDate> days = getDays(LocalDate.parse(startDate, df), LocalDate.parse(endDate, df));
+        List<Map<String, Object>> result=new ArrayList<>();
+        mapList.forEach(m->{
+            List<Map<String, Object>> worktimeList = (List<Map<String, Object>>) m.worktimeList;
+            for (LocalDate date : days) {
+                boolean match = worktimeList.stream().anyMatch(www -> www.get("createDate").equals(date.format(df)));
+                if(!match){
+                    Map<String,Object> ww=new HashMap<>();
+                    ww.put("createDate",date.format(df));
+                    ww.put("exceedCardTime",0);
+                    ww.put("workingTime",0);
+//                    ww.put("name",m.name);
+//                    ww.put("corpwxDeptId",m.corpwxDeptId);
+//                    ww.put("corpwxUserId",m.corpwxUserId);
+//                    ww.put("departmentName",m.departmentName);
+//                    ww.put("userId",m.userId);
+                    worktimeList.add(ww);
+                }
+                if(worktimeList.size()>0){
+                    worktimeList.forEach(w->{
+                        w.put("cardTime",0);
+                        Optional<UserFvTime> first = userFvTimeList.stream().filter(u -> u.getWorkDate().isEqual(date) && u.getUserId().equals(m.userId)).findFirst();
+                        if(first.isPresent()){
+                            w.put("cardTime",first.get().getWorkHours());
+                        }
+                        w.put("name",m.name);
+                        w.put("corpwxDeptId",m.corpwxDeptId);
+                        w.put("corpwxUserId",m.corpwxUserId);
+                        w.put("departmentName",m.departmentName);
+                        w.put("userId",m.userId);
+                    });
+                }
+            }
+            result.addAll(worktimeList);
+        });
+        Map<String,Object> map=new HashMap<>();
+        map.put("list",result);
+        msg.setData(map);
+        return msg;
+    }
+
+    @Override
+    public HttpRespMsg exportUserDailyWorkTimeReminder(HttpServletRequest request, String startDate, String endDate) throws Exception {
+        HttpRespMsg timeReminder = getUserDailyWorkTimeReminder(request, startDate, endDate);
+        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new LambdaQueryWrapper<WxCorpInfo>().eq(WxCorpInfo::getCompanyId, companyId));
+        Map<String, Object> data = (Map<String, Object>) timeReminder.getData();
+        List<Map<String, Object>> mapList = (List<Map<String, Object>>) data.get("list");
+        List<List<String>> dataList=new ArrayList<>();
+        List<String> titleList=new ArrayList<>();
+        titleList.add("日期");
+        titleList.add("姓名");
+        titleList.add("部门");
+        titleList.add("填报工时");
+        titleList.add("考勤工时");
+        titleList.add("是否异常");
+        titleList.add("催办");
+        dataList.add(titleList);
+        for (Map<String, Object> map : mapList) {
+            List<String> item=new ArrayList<>();
+            item.add(String.valueOf(map.get("createDate")));
+            if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                item.add(String.valueOf(map.get("name")));
+                item.add(String.valueOf(map.get("departmentName")));
+            }else {
+                item.add("$userName="+String.valueOf(map.get("corpwxUserId"))+"$");
+                item.add("$departmentName="+String.valueOf(map.get("corpwxDeptId"))+"$");
+            }
+
+            item.add(String.valueOf(map.get("workingTime")));
+            item.add(String.valueOf(map.get("cardTime")));
+            item.add(Integer.valueOf(String.valueOf(map.get("exceedCardTime")))==0?"否":"是");
+            item.add(Integer.valueOf(String.valueOf(map.get("exceedCardTime")))==0?"":"变更提醒");
+            dataList.add(item);
+        }
+        String fileName="工时异常表"+System.currentTimeMillis();
+        return excelExportService.exportGeneralExcelByTitleAndList(wxCorpInfo,fileName,dataList,path);
+    }
 }

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/project/budgetReview.vue

@@ -369,7 +369,7 @@ export default {
             const { projectId, dateRange, checkUserId, status } = this.screeningConditionForm;
             const params = {
                 ...(projectId && { projectId }),
-                ...(dateRange && { startTime: dateRange[0], endTime: dateRange[1] }),
+                ...(dateRange && { startDate: dateRange[0], endDate: dateRange[1] }),
                 ...(checkUserId && { checkUserId }),
                 ...(status && { status }),
             };

+ 91 - 94
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -1627,7 +1627,7 @@
           <el-alert style="position:absolute;bottom:0;z-index:10;" v-if="isMore" :title="$t('message.noMoreData')" type="success" center show-icon></el-alert>
         </el-tab-pane>
 
-        <el-tab-pane v-if="user.companyId==5978" :label="'工时填报明细'" name="third">
+        <el-tab-pane v-if="user.companyId==5978" :label="'工时异常明细'" name="third">
           <div class="selectworktime_export" style="margin-top:10px;">
             <!-- <div class="selectworktime_export_l">
               <el-date-picker
@@ -1665,7 +1665,7 @@
               >
               <el-link
               type="primary"
-              @click="exportMembWorkHours()"
+              @click="exportMembWorkHoursReminder()"
               >{{$t('export.exportData')}}</el-link
              >
             </div>
@@ -1682,113 +1682,50 @@
             v-loading="tbload"
             :lazy="true"
           >
-            <el-table-column width="75" type="index" fixed="left" :label="$t('headerTop.serialNumber')">
+            <el-table-column width="180" type="index" fixed="left" :label="'日期'">
               <template slot-scope="scope">
-                {{ scope.$index + 1 }}
+                {{ scope.row.createDate}}
               </template>
             </el-table-column>
 
-            <el-table-column width="105" prop="name" fixed="left" :label="$t('lable.name')">
+            <el-table-column width="160" prop="name" fixed="left" :label="$t('lable.name')">
                 <template slot-scope="scope">
-                    <span :style="scope.row.worktimeList.length==0?'color:red':''">
-                        <span v-if="user.userNameNeedTranslate == 1"><ww-open-data type='userName' :openid='scope.row.name'></ww-open-data></span>
-                        <span v-if="user.userNameNeedTranslate != 1">{{scope.row.name}}</span>
+                    <span v-if="user.userNameNeedTranslate == 1"><ww-open-data type='userName' :openid='scope.row.name'></ww-open-data></span>
+                    <span v-if="user.userNameNeedTranslate != 1">{{scope.row.name}}</span>
                         <!-- {{scope.row.name}} -->
-                    </span>
                 </template>
             </el-table-column>
-            <el-table-column prop="departmentName" fixed="left" :label="$t('lable.department')">
+            <el-table-column prop="departmentName" width="170" fixed="left" :label="$t('lable.department')">
                 <template slot-scope="scope">
                     <span v-if="user.userNameNeedTranslate == 1"><ww-open-data type='departmentName' :openid='scope.row.departmentName'></ww-open-data></span>
                     <span v-if="user.userNameNeedTranslate != 1">{{scope.row.departmentName}}</span>
                 </template>
             </el-table-column>
-            <el-table-column
-              min-width="105"
-              v-for="(item, index) in pickDateArray"
-              :key="index"
-              :label="item.label"
-              align="center"
-            >
+
+            <el-table-column width="160" type="index" fixed="left" :label="'填报工时'">
               <template slot-scope="scope">
-                <div
-                  style="color: red"
-                  v-if="
-                    scope.row.worktimeList.filter(
-                      (w) =>
-                        w.createDate==item.date
-                    ).length > 0 &&
-                    scope.row.worktimeList.filter(
-                      (w) =>w.createDate==item.date
-                    )[0].workingTime < reportTimeType.allday
-                  "
-                >
-                  {{
-                    scope.row.worktimeList.filter(
-                      (w) =>w.createDate==item.date
-                    )[0].workingTime.toFixed(1)
-                  }}
-                </div>
-                <div
-                  style="color: #20a0ff"
-                  v-if="
-                    scope.row.worktimeList.filter(
-                      (w) =>w.createDate==item.date
-                    ).length > 0 &&
-                    scope.row.worktimeList.filter(
-                      (w) =>w.createDate==item.date
-                    )[0].workingTime > reportTimeType.allday
-                  "
-                >
-                  {{
-                    scope.row.worktimeList.filter(
-                      (w) =>w.createDate==item.date
-                    )[0].workingTime.toFixed(1)
-                  }}
-                </div>
-                <div
-                  v-if="
-                    scope.row.worktimeList.filter(
-                      (w) =>w.createDate==item.date
-                    ).length > 0 &&
-                    scope.row.worktimeList.filter(
-                      (w) =>w.createDate==item.date
-                    )[0].workingTime == reportTimeType.allday
-                  "
-                >
-                  {{
-                    scope.row.worktimeList.filter(
-                      (w) =>w.createDate==item.date
-                    )[0].workingTime
-                  }}
-                </div>
-                <div
-                  v-if="
-                    scope.row.worktimeList.filter(
-                      (w) =>w.createDate==item.date
-                    ).length == 0
-                  "
-                >
-                  0
-                </div>
-                <div
-                  v-if="
-                    scope.row.worktimeList.filter(
-                      (w) =>w.createDate==item.date
-                    ).length > 0 &&
-                    typeof scope.row.worktimeList.filter(
-                      (w) =>w.createDate==item.date
-                    )[0].workingTime == 'string'
-                  "
-                >
-                  {{
-                    scope.row.worktimeList.filter(
-                      (w) =>w.createDate==item.date
-                    )[0].workingTime
-                  }}
-                </div>
+                {{ scope.row.workingTime}}
+              </template>
+            </el-table-column>
+
+            <el-table-column width="160" type="index" fixed="left" :label="'考勤工时'">
+              <template slot-scope="scope">
+                {{ scope.row.cardTime}}
               </template>
             </el-table-column>
+
+            <el-table-column width="160" type="index" fixed="left" :label="'是否异常'">
+              <template slot-scope="scope">
+                {{ scope.row.exceedCardTime==0?'否':'是'}}
+              </template>
+            </el-table-column>
+
+            <el-table-column width="160" type="index" fixed="left" :label="'催办'">
+              <template slot-scope="scope">
+                {{ scope.row.exceedCardTime==0?'':'变更提醒'}}
+              </template>
+            </el-table-column>
+
           </el-table>
           <el-alert style="position:absolute;bottom:0;z-index:10;" v-if="isFlag" :title="$t('message.loading')+'...'" type="success" center :closable="false" show-icon></el-alert>
           <el-alert style="position:absolute;bottom:0;z-index:10;" v-if="isMore" :title="$t('message.noMoreData')" type="warning" center show-icon></el-alert>
@@ -3887,8 +3824,10 @@
     handleClick(t,e){
       if (t.name == "second") {
         this.showMonthNotWorkTime()
-      }else{
+      }else if(t.name == "first"){
         this.showMonthWorkTime(t.name)
+      }else if(t.name == "third"){
+        this.showMonthWorkTimeReminder()
       }
     },
     //导出员工每日填报工时数
@@ -3914,6 +3853,28 @@
         }
       );
     },
+    exportMembWorkHoursReminder() {   
+      this.http.post(
+        "/report/exportUserDailyWorkTimeReminder",
+        {
+          // month: this.date,
+          startDate: this.WorktimeDatepickValueForMonth[0],
+          endDate: this.WorktimeDatepickValueForMonth[1],
+        },
+        (res) => {
+          if (res.code == "ok") {
+            let url = res.data;
+            this.downloadByA('工时异常表.xlsx', url);
+          }
+        },
+        (error) => {
+          this.$message({
+            message: error,
+            type: "error",
+          });
+        }
+      );
+    },
     exportMembNotWorkHours() {
       
       this.http.post(
@@ -4020,6 +3981,42 @@
         }
       );
     },
+    showMonthWorkTimeReminder() {
+      this.monthTotalPage = 0,
+        this.tbload = true
+        let parameter={}
+        parameter={
+            startDate: this.WorktimeDatepickValueForMonth[0],
+            endDate: this.WorktimeDatepickValueForMonth[1],
+        }
+      this.http.post(
+        "/report/getUserDailyWorkTimeReminder",
+        parameter,
+        (res) => {
+          if (res.code == "ok") {
+            this.tbload = false;
+            this.monthWorkData = res.data.list;
+            this.monthTotal = res.data.list.length
+            if (this.monthWorkData.length > 50) {
+                this.monthWorkDataS = this.monthWorkData.slice(0,50);
+            }else{
+                this.monthWorkDataS = this.monthWorkData
+            }
+            this.searchScreen(0)
+            this.$nextTick(function(){
+                this.$refs.hasworkTbl.doLayout();
+            });
+          }
+        },
+        (error) => {
+            this.tbload = false
+          this.$message({
+            message: error,
+            type: "error",
+          });
+        }
+      );
+    },
     // tableListener(){
     //   let that = this;
     //   let dom = that.$refs.hasworkTbl.bodyWrapper;