cqp пре 3 часа
родитељ
комит
bbfe9795a5

+ 4 - 0
app/Service/CalendarService.php

@@ -181,6 +181,10 @@ class CalendarService extends Service
         if(empty($data['time'])) return [false, '年月不能为空'];
         $data['time'] = $this->changeDateToMonth($data['time']);
 
+        // 使用日期范围限制
+        list($status, $msg) = MiddleGroundService::checkTimestampInRange($data['time'], $data['top_depart_id']);
+        if(! $status) return [false, $msg];
+
         $res = $this->checkNumber($data['work_days'],0,'positive');
         if(! $res['valid']) return [false,'工作日:' . $res['error']];
 

+ 4 - 0
app/Service/DeviceWorkService.php

@@ -597,6 +597,10 @@ class DeviceWorkService extends Service
         $orderTime = $data['order_time'];
         $itemId = $data['item_id'] ?? 0;
 
+        // 使用日期范围限制
+        list($status, $msg) = MiddleGroundService::checkTimestampInRange($data['order_time'], $data['top_depart_id']);
+        if(! $status) return [false, $msg];
+
         //归档
         list($status, $msg) = ArchiveService::isArchive($data['order_time'], $user);
         if(! $status) return [false, $msg];

+ 24 - 0
app/Service/ImportService.php

@@ -2082,6 +2082,10 @@ class ImportService extends Service
 
         $allMonthsTs = array_unique($uniqueMonths);
 
+        // 使用日期范围限制
+        list($status, $msg) = MiddleGroundService::checkTimestampInRange($allMonthsTs, $user['top_depart_id']);
+        if(! $status) return [false, $msg];
+
         //归档
         list($status, $msg) = ArchiveService::isArchive($allMonthsTs, $user);
         if(! $status)  return [$msg, [], []];
@@ -2340,6 +2344,10 @@ class ImportService extends Service
 
         $allMonthsTs = array_unique($uniqueMonths);
 
+        // 使用日期范围限制
+        list($status, $msg) = MiddleGroundService::checkTimestampInRange($allMonthsTs, $user['top_depart_id']);
+        if(! $status) return [false, $msg];
+
         //归档
         list($status, $msg) = ArchiveService::isArchive($allMonthsTs, $user);
         if(! $status)  return [$msg, [], []];
@@ -2553,6 +2561,10 @@ class ImportService extends Service
 
         $allMonthsTs = array_unique($uniqueMonths);
 
+        // 使用日期范围限制
+        list($status, $msg) = MiddleGroundService::checkTimestampInRange($allMonthsTs, $user['top_depart_id']);
+        if(! $status) return [false, $msg];
+
         //归档
         list($status, $msg) = ArchiveService::isArchive($allMonthsTs, $user);
         if(! $status)  return [$msg, [], []];
@@ -3336,6 +3348,10 @@ class ImportService extends Service
 
         $allDateTs = array_unique($allDateTs);
 
+        // 使用日期范围限制
+        list($status, $msg) = MiddleGroundService::checkTimestampInRange($allDateTs, $user['top_depart_id']);
+        if(! $status) return [false, $msg];
+
         //归档
         list($status, $msg) = ArchiveService::isArchive($allDateTs, $user);
         if(! $status)  return [$msg, [], []];
@@ -3608,6 +3624,10 @@ class ImportService extends Service
 
         $allDateTs = array_unique($allDateTs);
 
+        // 使用日期范围限制
+        list($status, $msg) = MiddleGroundService::checkTimestampInRange($allDateTs, $user['top_depart_id']);
+        if(! $status) return [false, $msg];
+
         //归档
         list($status, $msg) = ArchiveService::isArchive($allDateTs, $user);
         if(! $status)  return [$msg, [], []];
@@ -3927,6 +3947,10 @@ class ImportService extends Service
 
         $allMonthsTs = array_unique($allMonthsTs);
 
+        // 使用日期范围限制
+        list($status, $msg) = MiddleGroundService::checkTimestampInRange($allMonthsTs, $user['top_depart_id']);
+        if(! $status) return [false, $msg];
+
         //归档
         list($status, $msg) = ArchiveService::isArchive($allMonthsTs, $user);
         if(! $status)  return [$msg, [], []];

+ 59 - 0
app/Service/MiddleGroundService.php

@@ -349,6 +349,65 @@ class MiddleGroundService extends Service
         return [true, ''];
     }
 
+    public static function checkTimestampInRange($targetStamp, $topDepartId)
+    {
+//        if (empty($targetStamp) || empty($topDepartId)) return [false, '缺少使用时段范围参数'];
+//
+//        // 核心 SQL:寻找只要有一条记录满足 start_time_stamp <= target <= end_time_stamp
+//        $bool =  UseRangeDetails::where('top_depart_id', $topDepartId)
+//            ->where('del_time', 0)
+//            ->where('start_time_stamp', '<=', $targetStamp)
+//            ->where('end_time_stamp', '>=', $targetStamp)
+//            ->exists(); // 存在满足条件的就返回 true,否则 false
+//        if(! $bool) return [false, '该日期下不允许使用系统建单'];
+//
+//        return [true, ''];
+//
+//        if (empty($targetStamp) || empty($topDepartId)) {
+//            return [false, '缺少使用时段范围参数'];
+//        }
+
+        if(! is_array($targetStamp)) {
+            $targetStamps = [$targetStamp];
+        }else{
+            $targetStamps = $targetStamp;
+        }
+
+        // 1. 一次性查出该公司所有未删除的授权时段
+        $ranges = UseRangeDetails::where('top_depart_id', $topDepartId)
+            ->where('del_time', 0)
+            ->select('start_time', 'end_time', 'start_time_stamp', 'end_time_stamp')
+            ->get();
+
+        // 如果库里没有任何授权时段,那所有传进来的时间肯定都不允许建单
+        if ($ranges->isEmpty()) {
+            return [false, '该公司未配置任何有效的授权时段,不允许建单'];
+        }
+
+        // 2. 遍历每一个需要校验的时间戳
+        foreach ($targetStamps as $stamp) {
+            $isMatch = false;
+
+            // 拿当前时间戳去和库里的每一个时段碰撞
+            foreach ($ranges as $range) {
+                if ($stamp >= $range->start_time_stamp && $stamp <= $range->end_time_stamp) {
+                    $isMatch = true;
+                    break; // 只要命中了其中一个时段,当前时间戳就是合法的,跳出内层,检查下一个时间戳
+                }
+            }
+
+            // 3. 核心拦截:只要发现有【任意一个】时间戳没被任何时段包含,直接宣告失败
+            if (!$isMatch) {
+                // 可选:为了让前端好定位,把具体错的日期转出来返回(假设传进来的是秒级时间戳)
+                $errDate = date('Y-m-d', $stamp);
+                return [false, "日期 [{$errDate}] 不在允许使用的系统建单时段内"];
+            }
+        }
+
+        // 所有时间戳都顺利通过了碰撞,返回成功
+        return [true, ''];
+    }
+
     function generateAt8CharPassword() {
         $lettersNumbers = 'abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789';
 

+ 4 - 0
app/Service/PLeaveOverService.php

@@ -221,6 +221,10 @@ class PLeaveOverService extends Service
         $orderTime = $data['order_time'];
         $orderType = $data['type'];
 
+        // 使用日期范围限制
+        list($status, $msg) = MiddleGroundService::checkTimestampInRange($data['order_time'], $data['top_depart_id']);
+        if(! $status) return [false, $msg];
+
         //归档
         list($status, $msg) = ArchiveService::isArchive($data['order_time'], $user);
         if(! $status) return [false, $msg];

+ 4 - 0
app/Service/PersonSalaryService.php

@@ -206,6 +206,10 @@ class PersonSalaryService extends Service
 
         $data['top_depart_id'] = $user['top_depart_id'];
 
+        // 使用日期范围限制
+        list($status, $msg) = MiddleGroundService::checkTimestampInRange($data['month'], $data['top_depart_id']);
+        if(! $status) return [false, $msg];
+
         //归档
         list($status, $msg) = ArchiveService::isArchive($data['month'], $user);
         if(! $status) return [false, $msg];

+ 4 - 0
app/Service/PersonWorkService.php

@@ -588,6 +588,10 @@ class PersonWorkService extends Service
         $orderTime = $data['order_time'];
         $itemId = $data['item_id'] ?? 0;
 
+        // 使用日期范围限制
+        list($status, $msg) = MiddleGroundService::checkTimestampInRange($data['order_time'], $data['top_depart_id']);
+        if(! $status) return [false, $msg];
+
         //归档
         list($status, $msg) = ArchiveService::isArchive($data['order_time'], $user);
         if(! $status) return [false, $msg];

+ 4 - 0
app/Service/RuleSetService.php

@@ -258,6 +258,10 @@ class RuleSetService extends Service
         if (empty($data['month'])) return [false, '月份不能为空'];
         $data['month'] = $this->changeDateToDate($data['month']);
 
+        // 使用日期范围限制
+        list($status, $msg) = MiddleGroundService::checkTimestampInRange($data['month'], $data['top_depart_id']);
+        if(! $status) return [false, $msg];
+
         //归档
         list($status, $msg) = ArchiveService::isArchive($data['month'], $user);
         if(! $status) return [false, $msg];

+ 9 - 9
routes/api.php

@@ -177,9 +177,9 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('approval', 'Api\WorkFlowController@approval');
 
     //费用类型
-    $route->any('feeAdd', 'Api\FeeController@feeAdd')->name('fee.add');
-    $route->any('feeEdit', 'Api\FeeController@feeEdit')->name('fee.edit');
-    $route->any('feeDel', 'Api\FeeController@feeDel')->name('fee.del');
+    $route->any('feeAdd', 'Api\FeeController@feeAdd');
+    $route->any('feeEdit', 'Api\FeeController@feeEdit');
+    $route->any('feeDel', 'Api\FeeController@feeDel');
     $route->any('feeList', 'Api\FeeController@feeList');
 
     //人员月度研发工时单
@@ -212,8 +212,8 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
 
     //规则配置
     $route->any('ruleSetList', 'Api\RuleSetController@ruleSetList');
-    $route->any('ruleSetEdit', 'Api\RuleSetController@ruleSetEdit');
-    $route->any('ruleSetAdd', 'Api\RuleSetController@ruleSetAdd');
+    $route->any('ruleSetEdit', 'Api\RuleSetController@ruleSetEdit')->name('use_range_check');
+    $route->any('ruleSetAdd', 'Api\RuleSetController@ruleSetAdd')->name('use_range_check');
     $route->any('ruleSetDel', 'Api\RuleSetController@ruleSetDel');
     $route->any('ruleSetDetail', 'Api\RuleSetController@ruleSetDetail');
     $route->any('ruleSetCreate', 'Api\RuleSetController@ruleSetCreate');
@@ -254,8 +254,8 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
 
     //请假单 加班单
     $route->any('pLeaveOverOrderList', 'Api\PLeaveOverController@pLeaveOverList');
-    $route->any('pLeaveOverEdit', 'Api\PLeaveOverController@pLeaveOverEdit');
-    $route->any('pLeaveOverAdd', 'Api\PLeaveOverController@pLeaveOverAdd');
+    $route->any('pLeaveOverEdit', 'Api\PLeaveOverController@pLeaveOverEdit')->name('use_range_check');
+    $route->any('pLeaveOverAdd', 'Api\PLeaveOverController@pLeaveOverAdd')->name('use_range_check');
     $route->any('pLeaveOverDel', 'Api\PLeaveOverController@pLeaveOverDel');
     $route->any('pLeaveOverDetail', 'Api\PLeaveOverController@pLeaveOverDetail');
 
@@ -264,8 +264,8 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
 
     //费用报销单
     $route->any('expenseClaimsList', 'Api\ExpenseClaimsController@expenseClaimsList');
-    $route->any('expenseClaimsAdd', 'Api\ExpenseClaimsController@expenseClaimsAdd')->middleware('OssFileDeal')->name('use_range_check');;
-    $route->any('expenseClaimsEdit', 'Api\ExpenseClaimsController@expenseClaimsEdit')->middleware('OssFileDeal')->name('use_range_check');;
+    $route->any('expenseClaimsAdd', 'Api\ExpenseClaimsController@expenseClaimsAdd')->middleware('OssFileDeal')->name('use_range_check');
+    $route->any('expenseClaimsEdit', 'Api\ExpenseClaimsController@expenseClaimsEdit')->middleware('OssFileDeal')->name('use_range_check');
     $route->any('expenseClaimsDel', 'Api\ExpenseClaimsController@expenseClaimsDel')->middleware('OssFileDeal');
     $route->any('expenseClaimsDetail', 'Api\ExpenseClaimsController@expenseClaimsDetail');