ソースを参照

增加代填不校验考勤选项

QuYueTing 1 ヶ月 前
コミット
ac0f028df1

+ 71 - 31
fhKeeper/formulahousekeeper/collectdata/src/main/java/com/management/collectdata/controller/DataCollectController.java

@@ -133,37 +133,6 @@ public class DataCollectController {
             }
             System.out.println("本批次总数量:"+tisList.size()+",成功插入条数:"+insertCount+",成功更新条数:"+updateCount);
         }
-//        List<TisTimeVO> tisTimeVOS = JSONArray.parseArray(jsonarray, TisTimeVO.class);
-//        if(!CollectionUtils.isEmpty(tisList)){
-//            int count = 0;
-//            for (TisTimeVO tisTimeVO : tisList) {
-//                String sqlQuery = "select top 1 iRealCOID from ca_batchmap where cMOCode = ? and iMOSubSN = ? ";
-//                try (Connection connection = sqlServerDataSource.getConnection()) {
-//                    PreparedStatement queryStmt = connection.prepareStatement(sqlQuery);
-//                    queryStmt.setString(1,tisTimeVO.getOrderId());
-//                    queryStmt.setInt(2,tisTimeVO.getLine());
-//                    ResultSet queryRs = queryStmt.executeQuery();
-//                    if (queryRs.next()) {
-//                        tisTimeVO.setCoId(queryRs.getString("iRealCOID"));
-//                        String sqlInsert = "insert into CA_DayTiS(cPPID,iRealWkt,dDate) values(?,?,?)";
-//                        PreparedStatement insertStmt = connection.prepareStatement(sqlInsert);
-//                        insertStmt.setString(1,tisTimeVO.getCoId());
-//                        insertStmt.setBigDecimal(2,tisTimeVO.getWorkTime());
-//                        insertStmt.setString(3,tisTimeVO.getDateStr());
-//                        int i = insertStmt.executeUpdate();
-//                        if(i>0){
-//                            count++;
-////                        System.out.println("执行成功");
-//                        }else{
-//                            System.out.println(tisTimeVO.getCoId()+"执行失败");
-//                        }
-//                    }
-//                } catch (SQLException e) {
-//                    System.err.println("数据库操作错误: " + e.getMessage());
-//                }
-//            }
-//            System.out.println("本批次总数量:"+tisList.size()+",成功插入条数:"+count);
-//        }
         return "ok";
     }
 
@@ -373,7 +342,20 @@ public class DataCollectController {
                     userFvTime.setProcinstId(resultSet.getString("id"));
                     userFvTime.setUserId(resultSet.getString("emp_no"));
                     userFvTime.setWorkDate(null==resultSet.getDate("attendance_date")?null:LocalDate.parse(sdfYmd.format(resultSet.getDate("attendance_date")), DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+                    if (pageBO.getJobNumber() != null) {
+                        //用户单独刷新某天的
+                        List<LeaveSheet> sheetList = getUserDayLeaveSheet(sdfYmd.format(resultSet.getDate("attendance_date")), pageBO.getJobNumber());
+                        if (sheetList != null && sheetList.size() > 0) {
+                            //获取请假的最晚时间点作为考勤开始时间
+                            LeaveSheet leaveSheet = sheetList.get(0);
+                            userFvTime.setStartTime(leaveSheet.getEndTime());
+                        }
+                    }
                     String startTime = resultSet.getString("come1");
+                    //如果有请假的结束时间,并且比打卡时间要晚,以请假结束时间作为上班时间
+                    if (userFvTime.getStartTime() != null && userFvTime.getStartTime().compareTo(startTime) > 0) {
+                        startTime = userFvTime.getStartTime();
+                    }
                     //从9:05开始计算,小于9:05的以9:00为准,向上取30分钟, 比如9:09,就转换为9:30
                     if (startTime.compareTo("09:05") <= 0) {
                         startTime = "09:00";
@@ -549,6 +531,64 @@ public class DataCollectController {
         return resList;
     }
 
+    private List<LeaveSheet> getUserDayLeaveSheet(String date, String empNo) {
+        String sqlQuery = "select distinct ahlo.id,ahlo.company_id,ahlo.emp_no,ahlo.emp_name " +
+                " ,ahlo.begin_date,ahlo.end_date,ahlo.begin_time,ahlo.end_time,ahlo.leave_category_name " +
+                " ,ahlo.audit_status,ahlo.reason, eic.emp_no as operator_id " +
+                " ,ahlo.total_hour,ahlo.total_day,eie.mobile " +
+                " from att_holiday_leave_order ahlo " +
+                " left join emp_info eie on ahlo.emp_origin_id = eie.origin_id " +
+                " left join emp_info eic on ahlo.create_id = eic.origin_id " +
+                " where ahlo.audit_status = 3 and ahlo.is_delete = 0 and ahlo.create_date = ? and ahlo.emp_no = ? and ahlo.end_time is not null order by ahlo.end_time desc limit 1";
+        SimpleDateFormat sdfYmd = new SimpleDateFormat("yyyy-MM-dd");
+        List<LeaveSheet> resList = new ArrayList<>();
+        try (Connection connection = mysqlDataSource.getConnection()) {
+            PreparedStatement queryStmt = connection.prepareStatement(sqlQuery);
+            queryStmt.setString(1, date);
+            queryStmt.setString(2, empNo);
+            try (ResultSet resultSet = queryStmt.executeQuery()) {
+                while (resultSet.next()) {
+                    LeaveSheet leaveSheet = new LeaveSheet();
+                    leaveSheet.setCompanyId(companyId);
+                    leaveSheet.setOwnerId(resultSet.getString("emp_no"));
+                    leaveSheet.setOwnerName(resultSet.getString("emp_name"));
+                    leaveSheet.setBeginTime(resultSet.getString("begin_time"));
+                    leaveSheet.setEndTime(resultSet.getString("end_time"));
+                    leaveSheet.setStartDate(null==resultSet.getDate("begin_date")?null:LocalDate.parse(sdfYmd.format(resultSet.getDate("begin_date")),DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+                    leaveSheet.setEndDate(null==resultSet.getDate("end_date")?null:LocalDate.parse(sdfYmd.format(resultSet.getDate("end_date")),DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+                    switch (resultSet.getString("leave_category_name")){
+                        case "调休假" : leaveSheet.setLeaveType(6); break;
+                        case "年假" : leaveSheet.setLeaveType(2); break;
+                        case "事假" : leaveSheet.setLeaveType(0); break;
+                        case "病假" : leaveSheet.setLeaveType(1);break;
+                        case "婚假" : leaveSheet.setLeaveType(4);break;
+                        case "产假" : leaveSheet.setLeaveType(3);break;
+                        case "哺乳假" : leaveSheet.setLeaveType(3);break;
+                        case "陪产假" : leaveSheet.setLeaveType(7);break;
+                        case "丧假" : leaveSheet.setLeaveType(5);break;
+                        case "工伤假" : leaveSheet.setLeaveType(1);break;
+                        case "育儿假" : leaveSheet.setLeaveType(3);break;
+                        case "福利病假" : leaveSheet.setLeaveType(1);break;
+                        default: leaveSheet.setLeaveType(8);break;
+                    }
+                    leaveSheet.setStatus(0);
+                    leaveSheet.setRemark(resultSet.getString("reason"));
+                    leaveSheet.setOperatorId(resultSet.getString("operator_id"));
+                    leaveSheet.setTimeHours(null==resultSet.getBigDecimal("total_hour")?null:resultSet.getBigDecimal("total_hour").setScale(1,RoundingMode.HALF_UP).floatValue());
+                    leaveSheet.setTimeDays(null==resultSet.getBigDecimal("total_day")?null:resultSet.getBigDecimal("total_day").setScale(0,RoundingMode.HALF_UP).floatValue());
+                    leaveSheet.setIndate(LocalDateTime.now());
+                    leaveSheet.setTimeType(0);
+                    leaveSheet.setTel(resultSet.getString("mobile"));
+                    leaveSheet.setProcinstId(resultSet.getString("id"));
+                    resList.add(leaveSheet);
+                }
+            }
+        } catch (SQLException e) {
+            System.err.println("数据库操作错误: " + e.getMessage());
+        }
+        return resList;
+    }
+
 
     @RequestMapping("/getBusinessTripDataSum")
     public String getBusinessTripDataSum() {

+ 6 - 0
fhKeeper/formulahousekeeper/collectdata/src/main/java/com/management/collectdata/entity/LeaveSheet.java

@@ -157,6 +157,12 @@ public class LeaveSheet extends Model<LeaveSheet> {
     @TableField("file_urls")
     private String fileUrls;
 
+    @TableField("begin_time")
+    private String beginTime;
+
+    @TableField("end_time")
+    private String endTime;
+
     @Override
     protected Serializable pkVal() {
         return this.id;

+ 7 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeType.java

@@ -17,7 +17,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author Seyason
- * @since 2025-04-20
+ * @since 2025-06-04
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -680,6 +680,12 @@ public class TimeType extends Model<TimeType> {
     @TableField("cc_dept_manager")
     private Boolean ccDeptManager;
 
+    /**
+     * 代填不校验考勤
+     */
+    @TableField("not_check_cardtime")
+    private Boolean notCheckCardtime;
+
 
     @TableField(exist = false)
     private List<User> userList;

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

@@ -165,6 +165,10 @@ public class ExcelParserService {
         if (startHour <= 12 && endHour >= 13) {
             hours -= 1;
         }
+        //减去晚休时间,17:30-18:00
+        if (startHour <= 17 && endHour > 18) {
+            hours -= 0.5;
+        }
 
         return hours;
     }

ファイルの差分が大きいため隠しています
+ 2 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TimeTypeMapper.xml


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

@@ -331,7 +331,10 @@
                     </el-form-item>
                 </div>
                 <el-form-item>
-                    <el-checkbox v-model="timeType.stopReport" :label="$t('guanBiRiBaoTianBaoGongNeng')" />  <el-checkbox  v-model="timeType.notAllowedOnNonWorkday" :label="$t('feiGongZuoRiHanZhouMoWeiFaDingGongZuoRiJinZhiTianBao')" @change="onNonWorkDaySet()"/> <el-checkbox :disabled="timeType.notAllowedOnNonWorkday" v-model="timeType.includeWeekends" :label="$t('piLiangDaiTianHanZhouMo')" />
+                    <el-checkbox v-model="timeType.stopReport" :label="$t('guanBiRiBaoTianBaoGongNeng')" />  
+                    <el-checkbox  v-model="timeType.notAllowedOnNonWorkday" :label="$t('feiGongZuoRiHanZhouMoWeiFaDingGongZuoRiJinZhiTianBao')" @change="onNonWorkDaySet()"/> 
+                    <el-checkbox :disabled="timeType.notAllowedOnNonWorkday" v-model="timeType.includeWeekends" :label="$t('piLiangDaiTianHanZhouMo')" />
+                    <el-checkbox v-if="timeType.syncCorpwxTime || timeType.syncDingding || timeType.syncFanwei" v-model="timeType.notCheckCardtime" label="代填不校验考勤" />
                 </el-form-item><br/>
                 <el-form-item :label="$t('filltime')" prop="fillMonths">
                     <el-select v-model="timeType.fillMonths" >

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

@@ -8605,7 +8605,7 @@
                         }
                         //批量填报不校验考勤时长,交给后台校验
                         if (!this.isBatch) {
-                            if(this.user.timeType.notAllowedNoAttendance == 1 && this.isDraft == 0){
+                            if(this.user.timeType.notAllowedNoAttendance == 1 && this.isDraft == 0 && !(this.isSubstitude && this.user.timeType.notCheckCardtime)){
                                 if (this.workForm.time){
                                     if (this.workForm.time.workHours == 0){
                                         this.$message({