diff --git a/app/Http/Controllers/Api/ApproveController.php b/app/Http/Controllers/Api/ApproveController.php index d12eaa1e4..fe5e70c07 100755 --- a/app/Http/Controllers/Api/ApproveController.php +++ b/app/Http/Controllers/Api/ApproveController.php @@ -16,6 +16,7 @@ use App\Tasks\PushTask; use App\Module\BillExport; use App\Models\WebSocketDialog; use App\Models\ApproveProcMsg; +use App\Models\ApproveProcInstHistory; use App\Exceptions\ApiException; use App\Models\UserDepartment; use App\Models\WebSocketDialogMsg; @@ -1146,13 +1147,9 @@ class ApproveController extends AbstractController */ public function user__status() { - $data['userid'] = intval(Request::input('userid')); - $ret = Ihttp::ihttp_get($this->flow_url . '/api/v1/workflow/process/getUserApprovalStatus?' . http_build_query($data)); - $procdef = json_decode($ret['ret'] == 1 ? $ret['data'] : '{}', true); - if (isset($procdef['status']) && $procdef['status'] == 200) { - return Base::retSuccess('success', $procdef['data']["proc_def_name"] ?? ''); - } - return Base::retSuccess('success', ''); + $userid = intval(Request::input('userid')); + $status = ApproveProcInstHistory::getUserApprovalStatus($userid); + return Base::retSuccess('success', $status); } /** diff --git a/app/Models/ApproveProcInstHistory.php b/app/Models/ApproveProcInstHistory.php new file mode 100644 index 000000000..79ce8a2da --- /dev/null +++ b/app/Models/ApproveProcInstHistory.php @@ -0,0 +1,45 @@ +addMinute(), function () use ($userid) { + return self::where([ + ['start_user_id', '=', $userid], + [DB::raw("JSON_UNQUOTE(JSON_EXTRACT(var, '$.startTime'))"), '<=', Carbon::now()->toDateTimeString()], + [DB::raw("JSON_UNQUOTE(JSON_EXTRACT(var, '$.endTime'))"), '>=', Carbon::now()->toDateTimeString()], + ['state', '=', 2] + ])->where(function ($query) { + $query->where('proc_def_name', 'like', '%请假%') + ->orWhere('proc_def_name', 'like', '%外出%'); + })->orderByDesc('id')->value('proc_def_name'); + }); + } + + /** + * 判断用户是否请假(包含:请假、外出) + * @param $userid + * @return bool + */ + public static function userIsLeave($userid) + { + return (bool)self::getUserApprovalStatus($userid); + } +} diff --git a/app/Tasks/CheckinRemindTask.php b/app/Tasks/CheckinRemindTask.php index c90e561d9..33de0dfe1 100644 --- a/app/Tasks/CheckinRemindTask.php +++ b/app/Tasks/CheckinRemindTask.php @@ -2,12 +2,12 @@ namespace App\Tasks; +use App\Models\ApproveProcInstHistory; use App\Models\User; use App\Models\UserCheckinRecord; use App\Models\WebSocketDialog; use App\Models\WebSocketDialogMsg; use App\Module\Base; -use App\Module\Doo; use App\Module\Extranet; use App\Module\Timer; use Cache; @@ -82,6 +82,9 @@ class CheckinRemindTask extends AbstractTask if (!UserCheckinRecord::whereUserid($user->userid)->where('created_at', '>', Carbon::now()->subDays(3))->exists()) { continue; // 3天内没有打卡 } + if (ApproveProcInstHistory::userIsLeave($user->userid)) { + continue; // 请假、外出 + } $dialog = WebSocketDialog::checkUserDialog($botUser, $user->userid); if ($dialog) { if ($type === 'exceed') {