| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- <?php
- namespace App\Jobs\Manager\Process;
- use Illuminate\Bus\Queueable;
- use Illuminate\Contracts\Queue\ShouldBeUnique;
- use Illuminate\Contracts\Queue\ShouldQueue;
- use Illuminate\Foundation\Bus\Dispatchable;
- use Illuminate\Queue\InteractsWithQueue;
- use Illuminate\Queue\SerializesModels;
- use App\Models\Manager\Personnel\Employee as EmployeeModel;
- use App\Facades\Servers\Wechat\Official;
- use App\Facades\Servers\Logs\Log;
- use Illuminate\Support\Carbon;
- use App\Models\Manager\Process\LowPriceGoodsMember as LowPriceGoodsMemberModel;
- use App\Models\Manager\Process\ViolationProductMember as ViolationProductMemberModel;
- use Illuminate\Support\Facades\DB;
- /**
- * 订阅消息通知推送
- * @author 唐远望
- * @version 1.0
- * @date 2026-03-04
- */
- class SubscriptionJobs implements ShouldQueue
- {
- use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
- protected $message_data;
- /**
- * Create a new job instance.
- *
- * @return void
- */
- public function __construct(array $message_data)
- {
- $this->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
- ];
- }
- // $user_id_list=['2'=>'10'];
- $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']
- ];
- }
- // $user_id_list=['2'=>'10'];
- $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->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_notice', '=', 0], ['personnel_employee.status', '=', 0]])->first();
- if (empty($user_info)) return true;
- if ($user_info['openid'] == '') return true;
- $data = [
- 'thing1' => '数据违规预警',
- 'thing2' => '低价挂网商品:共【' . $totle_number . '】条',
- 'time7' => time(),
- 'phrase9' => '待处理',
- ];
- $params = [
- 'openid' => $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_notice', '=', 0], ['personnel_employee.status', '=', 0]])->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 = [
- 'openid' => $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]);
- }
- }
|