message_data = $message_data; } /** * Execute the job. * * @return void */ public function handle() { try { $notice_type = $this->message_data['notice_type']; $map = []; $todayStart = Carbon::today()->startOfDay()->getTimestamp(); // 今天开始时间 00:00:00 $todayEnd = Carbon::today()->endOfDay()->getTimestamp(); // 今天结束时间 23:59:59 switch ($notice_type) { case 'low_price_goods': $LowPriceGoodsMemberModel = new LowPriceGoodsMemberModel(); //查询今日待处理低价商品责任人 $map[] = ['process_lowprice_product.insert_time', '>=', $todayStart]; $map[] = ['process_lowprice_product.insert_time', '<=', $todayEnd]; $process_data = $LowPriceGoodsMemberModel ->join('process_lowprice_product', 'process_lowprice_product_member.lowprice_product_logid', '=', 'process_lowprice_product.id') ->where($map) ->where([ 'process_lowprice_product.processing_status' => '1', 'process_lowprice_product_member.duty_type' => '1' ]) ->groupBy('process_lowprice_product_member.employee_id') // 按员工ID分组 ->select( 'process_lowprice_product_member.employee_id', DB::raw('count(*) as total_number') // 统计每个员工的数量 ) ->get(); if (empty($process_data)) { return true; } // 转换为原来的数组格式 $user_id_list = []; foreach ($process_data as $value) { $user_id_list[$value->employee_id] = [ 'totle_number' => $value->total_number ]; } $this->send_low_price_goods_notice($user_id_list); break; case 'violation_product': $ViolationProductMemberModel = new ViolationProductMemberModel(); //查询今日待处理禁止商品责任人 $map[] = ['process_violation_product.insert_time', '>=', $todayStart]; $map[] = ['process_violation_product.insert_time', '<=', $todayEnd]; $process_data = $ViolationProductMemberModel ->join('process_violation_product', 'process_violation_product_member.lowprice_product_logid', '=', 'process_violation_product.id') ->where($map) ->where(['process_violation_product.processing_status' => '1', 'process_violation_product_member.duty_type' => '1']) ->groupBy('process_violation_product_member.employee_id') // 按员工ID分组 ->select( 'process_violation_product_member.employee_id', DB::raw('count(*) as total_number') // 统计每个员工的数量 ) ->get(); if (empty($process_data)) { return true; } // 转换为数组格式(如果需要原来的格式) $user_id_list = []; foreach ($process_data as $value) { $user_id_list[$value['employee_id']] = [ 'totle_number' => $value['total_number'] ]; } $this->send_violation_product($user_id_list); break; default: break; } } catch (\Exception $e) { Log::info('job_error', '订阅消息通知推送队列失败', ['data' => $this->message_data, 'error' => $e->getMessage()]); } } /** * 公众号消息订阅推送(低价挂网) * @author 唐远望 * @version 1.0 * @date 2026-03-04 */ private function send_low_price_goods_notice($user_id_list) { $EmployeeModel = new EmployeeModel(); foreach ($user_id_list as $key => $totle_number) { $user_info = $EmployeeModel->where('id', $key)->where([['open_subscribe', '=', 0], ['status', '=', 1]])->first(['openid']); if (empty($user_info)) return true; if ($user_info['openid'] == '') return true; $data = [ 'thing1' => '数据违规预警', 'thing2' => '低价挂网商品:共【' . $totle_number . '】条', 'time7' => strtotime(time(), 'Y:m:d H:i:s'), 'phrase9' => '待处理', ]; $params = [ 'touser' => $user_info['openid'], 'template_id' => 't559Iagds7Av-YcqwIpeAaS5gt7LuOKuIBDvVKlyfm8', 'miniprogram' => [ 'appid' => config('wechat.mini.app_id'), 'pagepath' => 'pages/index/index' ], 'data' => $data, ]; //发送模板消息 $result = Official::sendSubscription($params); if (!empty($result) && isset($result['error'])) { Log::info('job_notice', '公众号消息订阅推送失败', ['data' => $params, 'error' => $result]); } } } /** * 公众号消息订阅推送(禁止挂网) * @author 唐远望 * @version 1.0 * @date 2026-03-04 */ private function send_violation_product($user_id_list) { $EmployeeModel = new EmployeeModel(); foreach ($user_id_list as $key => $totle_number) { $user_info = $EmployeeModel->join('personnel_employee_openid', 'personnel_employee_openid.employee_id', '=', 'personnel_employee.id') ->select(['personnel_employee.*', 'personnel_employee_openid.employee_id', 'personnel_employee_openid.openid']) ->where('personnel_employee.id', $key)->where([['personnel_employee.open_subscribe', '=', 0], ['personnel_employee.status', '=', 1]])->first(); if (empty($user_info)) return true; if ($user_info['openid'] == '') return true; $data = [ 'thing1' => '数据违规预警', 'thing2' => '禁止挂网商品:共【' . $totle_number . '】条', 'time7' => strtotime(time(), 'Y:m:d H:i:s'), 'phrase9' => '待处理', ]; $params = [ 'touser' => $user_info['openid'], 'template_id' => 't559Iagds7Av-YcqwIpeAaS5gt7LuOKuIBDvVKlyfm8', 'miniprogram' => [ 'appid' => config('wechat.mini.app_id'), 'pagepath' => 'pages/index/index' ], 'data' => $data, ]; //发送模板消息 $result = Official::sendSubscription($params); if (!empty($result) && isset($result['error'])) { Log::info('job_notice', '公众号消息订阅推送失败', ['data' => $params, 'error' => $result]); } } } public function failed(\Throwable $exception) { Log::info('job_error', '订阅消息通知推送队列完全失败', ['data' => $this->message_data, 'error' => $exception]); } }