浏览代码

工时报告,新增未提交人员列表的请假操作

yusm 1 月之前
父节点
当前提交
3fe3d0114e

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

@@ -3481,4 +3481,8 @@ public class ReportController {
     public HttpRespMsg updateJingYuOldReport(String startDate, String endDate) {
         return reportService.updateJingYuOldReport(startDate, endDate);
     }
+    @RequestMapping("/updateNoReportUserList")
+    public HttpRespMsg updateNoReportUserList(HttpServletRequest request, String leaveStartTime, String leaveEndTime,String createDate,Double leaveDuration, String corpwxUserId) {
+        return reportService.updateNoReportUserList(request, leaveStartTime, leaveEndTime,createDate, leaveDuration,corpwxUserId);
+    }
 }

+ 6 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/UserCorpwxTime.java

@@ -110,6 +110,12 @@ public class UserCorpwxTime extends Model<UserCorpwxTime> {
     @TableField("ot_time")
     private Double otTime;
 
+    /**
+     * 用于区分是同步的还是手动录入,默认:0:自动同步;1:手动录入
+     */
+    @TableField("modified_by_admin")
+    private Integer modifiedByAdmin;
+
 
     @Override
     protected Serializable pkVal() {

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/UserDailyWorkItem.java

@@ -17,6 +17,7 @@ public class UserDailyWorkItem {
     public String cardTime;
     public String status;
     public String jobNumber;
+    public Integer modifiedByAdmin;
 
     public HashMap toHashMap() {
         HashMap<String, Object> map = new HashMap<>();
@@ -31,6 +32,7 @@ public class UserDailyWorkItem {
         map.put("cardTime", cardTime);
         map.put("status", status);
         map.put("jobNumber", jobNumber);
+        map.put("modifiedByAdmin", modifiedByAdmin);
         return map;
     }
 }

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

@@ -200,4 +200,6 @@ public interface ReportService extends IService<Report> {
      * @return 返回未填写日报的日期列表
      */
     List<String> getUserMissingReportDates(String userId, String startDate, String endDate);
+
+    HttpRespMsg updateNoReportUserList(HttpServletRequest request, String startTime, String endTime,String createDate,Double leaveDuration, String corpwxUserId);
 }

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

@@ -7610,7 +7610,11 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 Optional<UserCorpwxTime> first = cardTimeList.stream().filter(card -> card.getCorpwxUserid().equals(corpwxUserid) && item.createDate.startsWith(dtf.format(card.getCreateDate()))).findFirst();
                 if (first.isPresent()) {
                     UserCorpwxTime userCorpwxTime = first.get();
-                    item.cardTime = userCorpwxTime.getStartTime()+"~"+userCorpwxTime.getEndTime()+", "+userCorpwxTime.getWorkHours()+"h";
+                    Double time = userCorpwxTime.getAskLeaveTime() > 0 ? userCorpwxTime.getAskLeaveTime() : userCorpwxTime.getWorkHours();
+                    item.cardTime = userCorpwxTime.getStartTime()+"~"+userCorpwxTime.getEndTime()+", "+time+"h";
+                    if (userCorpwxTime.getModifiedByAdmin() != null && userCorpwxTime.getModifiedByAdmin() == 1) {
+                        item.modifiedByAdmin = 1;
+                    }
                 }
             }
         }
@@ -13382,4 +13386,86 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         }
         return null;
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public HttpRespMsg updateNoReportUserList(HttpServletRequest request, String startTime, String endTime,String createDate,Double leaveDuration, String corpwxUserId) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        try{
+        String userId = request.getHeader("Token");
+        User currentUser = userMapper.selectById(userId);
+        String name = currentUser.getName();
+        Integer companyId = currentUser.getCompanyId();
+        UserCorpwxTime userCorpwxTime = userCorpwxTimeMapper.selectOne(new QueryWrapper<UserCorpwxTime>().eq("corpwx_userid", corpwxUserId).eq("create_date", createDate));
+        if (userCorpwxTime == null) {
+            //插入
+            userCorpwxTime = new UserCorpwxTime();
+            userCorpwxTime.setCorpwxUserid(corpwxUserId);
+            userCorpwxTime.setCreateDate(LocalDate.parse(createDate));
+            userCorpwxTime.setStartTime(startTime);
+            userCorpwxTime.setEndTime(endTime);
+            userCorpwxTime.setAskLeaveTime(leaveDuration);
+            userCorpwxTime.setCompanyId(companyId);
+            userCorpwxTime.setName(name);
+            //根据createDate来判断今天是周几
+            //将字符串日期解析为LocalDate对象
+            LocalDate date = LocalDate.parse(createDate, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+
+            //获取对应的星期几
+            DayOfWeek dayOfWeek = date.getDayOfWeek();
+            //获取数字形式的星期几
+            int dayOfWeekNumber = dayOfWeek.getValue();
+            //获取中文形式的星期几
+            String dayOfWeekChinese = getWeek(dayOfWeek);
+            userCorpwxTime.setWeekDay(dayOfWeekNumber);
+            userCorpwxTime.setWeekDayTxt(dayOfWeekChinese);
+            userCorpwxTime.setWorkHours(0.0);
+            userCorpwxTime.setModifiedByAdmin(1);
+            userCorpwxTimeMapper.insert(userCorpwxTime);
+
+        }else{
+            //若表中存在,则为更新
+            userCorpwxTime.setStartTime(startTime);
+            userCorpwxTime.setEndTime(endTime);
+            userCorpwxTime.setAskLeaveTime(leaveDuration);
+            userCorpwxTime.setModifiedByAdmin(1);
+            userCorpwxTimeMapper.update(userCorpwxTime, new QueryWrapper<UserCorpwxTime>().eq("id", userCorpwxTime.getId()));
+        }
+        httpRespMsg.data = "操作成功";
+        return httpRespMsg;
+
+    } catch (Exception e) {
+        httpRespMsg.setError("操作失败: " + e.getMessage());
+        return httpRespMsg;
+    }
+    }
+    public String getWeek(DayOfWeek dayOfWeek){
+        //获取中文形式的星期几
+        String dayOfWeekChinese = "";
+        switch (dayOfWeek) {
+            case MONDAY:
+                dayOfWeekChinese = "周一";
+                break;
+            case TUESDAY:
+                dayOfWeekChinese = "周二";
+                break;
+            case WEDNESDAY:
+                dayOfWeekChinese = "周三";
+                break;
+            case THURSDAY:
+                dayOfWeekChinese = "周四";
+                break;
+            case FRIDAY:
+                dayOfWeekChinese = "周五";
+                break;
+            case SATURDAY:
+                dayOfWeekChinese = "周六";
+                break;
+            case SUNDAY:
+                dayOfWeekChinese = "周日";
+                break;
+        }
+        return dayOfWeekChinese;
+    }
+
 }

+ 128 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -1787,7 +1787,25 @@
               :label="$t('other.attendanceData')"
               prop="cardTime"
               align="center"
-              v-if="user.timeType.syncCorpwxTime == 1"></el-table-column>
+              v-if="user.timeType.syncCorpwxTime == 1">
+              <template slot-scope="scope">
+                <span v-if="scope.row.cardTime">{{ scope.row.cardTime }}</span>
+                <el-link
+                    v-if="scope.row.cardTime && scope.row.modifiedByAdmin === 1"
+                    type="primary"
+                    size="mini"
+                    @click="openLeaveDialog(scope.row)">
+                  {{ $t('修改请假') }}
+                </el-link>
+                <el-link
+                    v-else-if="!scope.row.cardTime"
+                    type="primary"
+                    size="mini"
+                    @click="openLeaveDialog(scope.row)">
+                  {{ $t('补填请假') }}
+                </el-link>
+              </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="success" center show-icon></el-alert>
@@ -2351,7 +2369,40 @@
                 </el-timeline>
             </div>
         </el-dialog>
-        
+        <!--请假弹框-->
+      <el-dialog
+          :title="hasManualLeaveRecord(currentLeaveRecord) ? $t('修改请假') : $t('补填请假')"
+          :visible.sync="leaveDialogVisible"
+          width="500px">
+        <el-form ref="leaveForm" :model="leaveForm" :rules="leaveFormRules" label-width="120px">
+          <el-form-item :label="$t('请假开始时间')" prop="startTime">
+            <el-time-picker
+                v-model="leaveForm.startTime"
+                format="HH:mm"
+                value-format="HH:mm"
+                :placeholder="$t('请选择开始时间')"
+            >
+            </el-time-picker>
+          </el-form-item>
+          <el-form-item :label="$t('请假结束时间')" prop="endTime">
+            <el-time-picker
+                v-model="leaveForm.endTime"
+                format="HH:mm"
+                value-format="HH:mm"
+                :placeholder="$t('请选择结束时间')"
+            >
+            </el-time-picker>
+          </el-form-item>
+          <el-form-item :label="$t('请假时长')" prop="duration">
+            <el-input-number v-model="leaveForm.duration" :min="0.0" :step="0.5" :disabled="false"></el-input-number>
+            <span style="margin-left: 10px;">小时</span>
+          </el-form-item>
+        </el-form>
+        <div slot="footer">
+          <el-button @click="leaveDialogVisible = false">{{$t('btn.cancel')}}</el-button>
+          <el-button type="primary" @click="submitLeaveForm">{{$t('btn.submit')}}</el-button>
+        </div>
+      </el-dialog>
         <!-- 威派格定制 -->
         <TransferWorkingHours v-model="transferWorkingHoursVisable" :projectList="projectList" :userList="usersList"></TransferWorkingHours>
     </section>
@@ -2694,6 +2745,21 @@
 
                 nodeModelData: localStorage.getItem('nodeModelDataKey') ? JSON.parse(localStorage.getItem('nodeModelDataKey')) : [],
 
+                leaveDialogVisible: false,
+                currentLeaveRecord: {},
+                leaveForm: {
+                  startTime: '',
+                  endTime: '',
+                  duration: 0.0,
+                  corpwxUserId: '',
+                  createDate: ''
+                },
+                leaveFormRules: {
+                  startTime: [{ required: true, message: '请选择开始时间', trigger: 'change' }],
+                  endTime: [{ required: true, message: '请选择结束时间', trigger: 'change' }],
+                  duration: [{ required: true, message: '请输入请假时长', trigger: 'blur' }]
+                },
+
                 weekIndex: 1,
                 weekParentData: {},
                 deptIdForNoReport:[],
@@ -2892,6 +2958,66 @@
                     }
                 );
             },
+          openLeaveDialog(row) {
+            this.currentLeaveRecord = row;
+            //如果已有手动请假记录,初始化表单数据
+            if (this.hasManualLeaveRecord(row)) {
+              //从已有记录中获取数据并填充表单
+              const parts = row.cardTime.split(', ');
+              const timeRange = parts[0];
+              const hours = parts[1];
+              const timeParts = timeRange.split('~');
+              const startTime = timeParts[0] === 'null' ? null : timeParts[0];
+              const endTime = timeParts[1] === 'null' ? null : timeParts[1];
+
+              const leaveHours = hours ? parseFloat(hours.replace('h', '')) : 0;
+              this.leaveForm = {
+                startTime: startTime,
+                endTime: endTime,
+                duration: leaveHours
+              };
+            } else {
+              //清空表单
+              this.leaveForm = {
+                startTime: '',
+                endTime: '',
+                duration: 0
+              };
+            }
+            this.leaveForm.corpwxUserId = row.corpwxUserId;
+            this.leaveForm.createDate = row.createDate;
+            console.log("this.leaveForm.corpwxUserId+++>>>222",this.leaveForm.corpwxUserId)
+            console.log("this.leaveForm.createDate+++>>>222",this.leaveForm.createDate)
+            console.log("this.leaveForm+++>>>",this.leaveForm)
+            this.leaveDialogVisible = true;
+          },
+
+          hasManualLeaveRecord(row) {
+            return row.modifiedByAdmin === 1;
+          },
+
+          submitLeaveForm() {
+            this.$refs.leaveForm.validate((valid) => {
+              if (valid) {
+               let params= {
+                  corpwxUserId: this.leaveForm.corpwxUserId,
+                  createDate: this.leaveForm.createDate,
+                  leaveStartTime: this.leaveForm.startTime,
+                  leaveEndTime: this.leaveForm.endTime,
+                  leaveDuration: this.leaveForm.duration,
+                  // modifiedByAdmin: 1
+                };
+                this.http.post('/report/updateNoReportUserList', params, (res) => {
+                      if (res.code == "ok") {
+                        this.leaveDialogVisible = false;
+                        this.showMonthNotWorkTime();
+                      }
+                    },(error) => {
+                      this.leaveDialogVisible = false;
+                    })
+              }
+            });
+          },
             showReportTimeLessThanCardTimeList() {
                 this.monthTotalPage = 0,
                 this.tbload = true,