| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436 |
- <?php
- namespace App\Jobs\Manager\CollectData\Backfill;
- 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\WashConfig\ViolationStore as ViolationStoreModel;
- use App\Models\Manager\Process\ViolationStore as ProcessViolationStoreModel;
- use App\Models\Manager\Personnel\EmployeeArea as EmployeeAreaModel;
- use App\Models\Manager\Personnel\Employee as EmployeeModel;
- use App\Models\Manager\WashConfig\ViolationCompany as ViolationCompanyModel;
- use App\Models\Manager\WashConfig\ViolationCompanyMember as ViolationCompanyMemberModel;
- use App\Models\Manager\Personnel\EmployeePlatform as EmployeePlatformModel;
- use App\Models\Manager\Process\ViolationStoreMember as ViolationStoreMemberModel;
- use Illuminate\Support\Facades\DB;
- use App\Facades\Servers\Logs\Log;
- /**
- * 禁止店铺商品数据数据清洗-回填责任人
- * @author: 唐远望
- * @version: 1.0
- * @date: 2026-05-22
- */
- class ViolationStoreJobs implements ShouldQueue
- {
- use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
- public $tries = 3; // 限制重试次数
- public $timeout = 600; // 10分钟超时
- 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()
- {
- $ProcessViolationStoreModel = new ProcessViolationStoreModel();
- //获取非导入的低价商品清洗数据
- $company_id = $this->message_data['company_id'];
- $map = [];
- $map[] = ['merge_city_id', '!=', '0'];
- $map[] = ['first_responsible_person', '=', ''];
- $map[] = ['responsible_person', '=', ''];
- $map[] = ['source_responsible_person', '=', ''];
- $map[] = ['company_id', '=', $company_id];
- $page = isset($this->message_data['page']) ? $this->message_data['page'] : 1;
- $limit = isset($this->message_data['limit']) ? $this->message_data['limit'] : 10;
- DB::beginTransaction();
- try {
- $result = $ProcessViolationStoreModel->where($map)->orderByDesc('id')->orderByDesc('id')->paginate($limit, ['*'], 'page', $page)->toarray();
- $select_product_datas = $result['data'];
- $last_page = $result['last_page'];
- if (empty($select_product_datas)) {
- return true;
- } else {
- if ($page < $last_page) {
- //继续执行下一页
- $this->message_data['page'] = $page + 1;
- $this->message_data['limit'] = $limit;
- ViolationStoreJobs::dispatch($this->message_data);
- }
- foreach ($result['data'] as $key => $product_data) {
- $specify_responsible_person = $product_data['specify_responsible_person'];
- //获取指定人员信息
- $insert_product_data = [];
- if ($specify_responsible_person == 0) {
- $product_data['qualification_number'] = $product_data['social_credit_code'];
- $product_data['platform_id'] = $product_data['platform'];
- $insert_product_data = $this->get_responsible_person_info($product_data);
- }
- $update_data = $insert_product_data;
- if (!empty($update_data) && count($update_data) > 0) {
- $product_data['first_responsible_person'] = isset($update_data['first_responsible_person']) ? $update_data['first_responsible_person'] : $product_data['first_responsible_person'];
- $product_data['responsible_person'] = isset($update_data['responsible_person']) ? $update_data['responsible_person'] : $product_data['responsible_person'];
- $product_data['source_responsible_person'] = isset($update_data['source_responsible_person']) ? $update_data['source_responsible_person'] : $product_data['source_responsible_person'];
- $ProcessViolationStoreModel->where('id', $product_data['id'])->update($update_data);
- }
- $insert_product_data['first_responsible_person'] = $product_data['first_responsible_person'];
- $insert_product_data['responsible_person'] = $product_data['responsible_person'];
- $insert_product_data['source_responsible_person'] = $product_data['source_responsible_person'];
- $this->insert_violation_store_responsible_person_info($product_data, $insert_product_data);
- }
- }
- DB::commit();
- // 成功处理...
- } catch (\Exception $e) {
- DB::rollBack();
- Log::info('job_error', '数据回填-禁止店铺责任人数据回填队列失败', ['data' => $this->message_data, 'error' => $e->getMessage()]);
- }
- }
- /**
- * 写入处理违规店铺-责任人信息
- * @author: 唐远望
- * @version: 1.0
- * @date: 2026-05-19
- */
- private function insert_violation_store_responsible_person_info($product_data, $data)
- {
- $ViolationStoreMemberModel = new ViolationStoreMemberModel();
- $ViolationStore_id = $product_data['id'];
- $first_responsible_persons = $data['first_responsible_person'] != '' ? explode(',', $data['first_responsible_person']) : [];
- $first_responsible_person_data = [];
- if (count($first_responsible_persons) > 0) {
- //去除重复的责任人
- $first_responsible_persons = array_unique($first_responsible_persons);
- //移除数组内的空值
- $first_responsible_persons = array_filter($first_responsible_persons);
- $EmployeeModel = new EmployeeModel();
- $employee_user_list = $EmployeeModel->whereIn('id', $first_responsible_persons)->select(['id', 'name'])->get()->toarray();
- $employee_user_list_name = [];
- if (!empty($employee_user_list)) {
- foreach ($employee_user_list as $key => $employee_user_info) {
- $employee_id = $employee_user_info['id'];
- $employee_user_list_name[$employee_id] = $employee_user_info['name'];
- }
- }
- foreach ($first_responsible_persons as $key => $employee_id) {
- //如果不是数字或者为空,则跳过
- if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id)) continue;
- $member_info = $ViolationStoreMemberModel->where('violation_product_logid', $ViolationStore_id)->where('employee_id', $employee_id)->where('duty_type', 1)->count();
- if ($member_info > 0) continue;
- $first_responsible_person_data[] = [
- 'violation_store_logid' => $ViolationStore_id,
- 'employee_id' => $employee_id,
- 'employee_name' => isset($employee_user_list_name[$employee_id]) ? $employee_user_list_name[$employee_id] : '',
- 'duty_type' => 1, //责任类型1=第一责任人,2=责任人,3=溯源责任人
- ];
- }
- }
- if ($first_responsible_person_data) {
- $ViolationStoreMemberModel->insert($first_responsible_person_data);
- }
- $responsible_persons = $data['responsible_person'] != '' ? explode(',', $data['responsible_person']) : [];
- $responsible_person_data = [];
- if (count($responsible_persons) > 0) {
- //去除重复的责任人
- $responsible_persons = array_unique($responsible_persons);
- //移除数组内的空值
- $responsible_persons = array_filter($responsible_persons);
- $EmployeeModel = new EmployeeModel();
- $employee_user_list = $EmployeeModel->whereIn('id', $responsible_persons)->select(['id', 'name'])->get()->toarray();
- $employee_user_list_name = [];
- if (!empty($employee_user_list)) {
- foreach ($employee_user_list as $key => $employee_user_info) {
- $employee_id = $employee_user_info['id'];
- $employee_user_list_name[$employee_id] = $employee_user_info['name'];
- }
- }
- foreach ($responsible_persons as $key => $employee_id) {
- //如果不是数字或者为空,则跳过
- if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id)) continue;
- $member_info = $ViolationStoreMemberModel->where('violation_product_logid', $ViolationStore_id)->where('employee_id', $employee_id)->where('duty_type', 2)->count();
- if ($member_info > 0) continue;
- $responsible_person_data[] = [
- 'violation_store_logid' => $ViolationStore_id,
- 'employee_id' => $employee_id,
- 'employee_name' => isset($employee_user_list_name[$employee_id]) ? $employee_user_list_name[$employee_id] : '',
- 'duty_type' => 2, //责任类型1=第一责任人,2=责任人,3=溯源责任人
- ];
- }
- }
- if ($responsible_person_data) {
- $ViolationStoreMemberModel->insert($responsible_person_data);
- }
- $source_responsible_persons = $data['source_responsible_person'] != '' ? explode(',', $data['source_responsible_person']) : [];
- $source_responsible_person_data = [];
- if (count($source_responsible_persons) > 0) {
- //去除重复的责任人
- $source_responsible_persons = array_unique($source_responsible_persons);
- //移除数组内的空值
- $source_responsible_persons = array_filter($source_responsible_persons);
- $EmployeeModel = new EmployeeModel();
- $employee_user_list = $EmployeeModel->whereIn('id', $source_responsible_persons)->select(['id', 'name'])->get()->toarray();
- $employee_user_list_name = [];
- if (!empty($employee_user_list)) {
- foreach ($employee_user_list as $key => $employee_user_info) {
- $employee_id = $employee_user_info['id'];
- $employee_user_list_name[$employee_id] = $employee_user_info['name'];
- }
- }
- foreach ($source_responsible_persons as $key => $employee_id) {
- //如果不是数字或者为空,则跳过
- if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id)) continue;
- $member_info = $ViolationStoreMemberModel->where('violation_product_logid', $ViolationStore_id)->where('employee_id', $employee_id)->where('duty_type', 3)->count();
- if ($member_info > 0) continue;
- $source_responsible_person_data[] = [
- 'violation_store_logid' => $ViolationStore_id,
- 'employee_id' => $employee_id,
- 'employee_name' => isset($employee_user_list_name[$employee_id]) ? $employee_user_list_name[$employee_id] : '',
- 'duty_type' => 3, //责任类型1=第一责任人,2=责任人,3=溯源责任人
- ];
- }
- }
- if ($source_responsible_person_data) {
- $ViolationStoreMemberModel->insert($source_responsible_person_data);
- }
- }
- /**
- * 根据规则获取责任人分配信息
- * @author: 唐远望
- * @version: 1.0
- * @date: 2026-05-18
- */
- private function get_responsible_person_info($product_data)
- {
- $EmployeeAreaModel = new EmployeeAreaModel();
- $EmployeePlatformModel = new EmployeePlatformModel();
- $ViolationCompanyModel = new ViolationCompanyModel();
- $ViolationCompanyMemberModel = new ViolationCompanyMemberModel();
- $company_id = $product_data['company_id'];
- //获取店铺责任人信息
- $ViolationStoreModel = new ViolationStoreModel();
- $store_data_info = $ViolationStoreModel->where('company_id', $company_id)->where('store_name', $product_data['store_name'])->where('status', '0')->first();
- if (!empty($store_data_info) && trim($store_data_info->employee_ids) != '') {
- //查询店铺第一责任人信息
- $EmployeeModel = new EmployeeModel();
- $store_where_query = [];
- $employee_id_store = explode(',', $store_data_info->employee_ids);
- $store_where_query[] = ['company_id', '=', $company_id];
- $store_where_query[] = ['status', '=', 0];
- $store_where_query[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
- $first_responsible_person = $EmployeeModel->whereIn('id', $employee_id_store)->where($store_where_query)->pluck('id')->implode(',');
- $insert_product_data['first_responsible_person'] = $first_responsible_person;
- //查询店铺责任人信息
- $EmployeeModel = new EmployeeModel();
- $store_where_query = [];
- $employee_id_store = explode(',', $store_data_info->employee_ids);
- $store_where_query[] = ['company_id', '=', $company_id];
- $store_where_query[] = ['status', '=', 0];
- $store_where_query[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
- $responsible_person = $EmployeeModel->whereIn('id', $employee_id_store)->where($store_where_query)->pluck('id')->implode(',');
- $insert_product_data['responsible_person'] = $responsible_person;
- //溯源责任人
- $source_responsible_person = '';
- if ($first_responsible_person && $responsible_person) {
- //转换成数组,合并后在去重
- $first_responsible_person = explode(',', $first_responsible_person);
- $responsible_person = explode(',', $responsible_person);
- $source_responsible_person = array_unique(array_merge($first_responsible_person, $responsible_person));
- $source_responsible_person = ',' . implode(',', $source_responsible_person) . ',';
- } else if ($first_responsible_person) {
- $source_responsible_person = $first_responsible_person;
- } else if ($responsible_person) {
- $source_responsible_person = $responsible_person;
- }
- $insert_product_data['source_responsible_person'] = $source_responsible_person;
- } else {
- //获取公司绑定责任人信息
- $company_data = $ViolationCompanyModel->leftjoin('washconfig_company_category', 'washconfig_company_category.id', '=', 'washconfig_violation_company.category_id')
- ->where('washconfig_violation_company.social_credit_code', $product_data['qualification_number'])
- ->where('washconfig_violation_company.company_id', $company_id)
- ->select(['washconfig_violation_company.id', 'washconfig_company_category.name as category_name'])->first();
- $employee_id_list = [];
- if ($company_data) {
- $employee_id_list = $ViolationCompanyMemberModel->where('company_logid', $company_data->id)->pluck('employee_id')->toarray();
- $insert_product_data['company_category_name'] = $company_data->category_name ? $company_data->category_name : '';
- }
- $where_query1 = [];
- $where_query2 = [];
- $where_query3 = [];
- //查询指定公司第一责任人
- if (!empty($employee_id_list)) {
- $where_query1[] = ['company_id', '=', $company_id];
- $where_query1[] = ['id', 'in', $employee_id_list];
- $where_query1[] = ['status', '=', 0];
- $where_query1[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
- }
- //查询地区配置的第一责任人
- $employee_id_area = $EmployeeAreaModel->where('city_id', $product_data['city_id'])->pluck('employee_id')->toarray();
- if (!empty($employee_id_area)) {
- $where_query2[] = ['company_id', '=', $company_id];
- $where_query2[] = ['id', 'in', $employee_id_area];
- $where_query2[] = ['status', '=', 0];
- $where_query2[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
- }
- //查询平台配置的第一责任人
- $employee_id_platform = $EmployeePlatformModel->where('platform_id', $product_data['platform_id'])->pluck('employee_id')->toarray();
- if (!empty($employee_id_platform)) {
- $where_query3[] = ['company_id', '=', $company_id];
- $where_query3[] = ['id', 'in', $employee_id_platform];
- $where_query3[] = ['status', '=', 0];
- $where_query3[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
- }
- //并行查询第一责任人
- $EmployeeModel = new EmployeeModel();
- $EmployeeModel = $EmployeeModel
- ->orWhere(function ($q) use ($employee_id_list, $company_id) {
- if (!empty($employee_id_list)) {
- $q->where('company_id', $company_id)
- ->orWhereIn('id', $employee_id_list)
- ->where('duty_type', 1)
- ->where('status', 0);
- }
- })->orWhere(function ($q) use ($employee_id_area, $company_id) {
- if (!empty($employee_id_area)) {
- $q->where('company_id', $company_id)
- ->whereIn('id', $employee_id_area)
- ->where('duty_type', 1)
- ->where('status', 0);
- }
- })->orWhere(function ($q) use ($employee_id_platform, $company_id) {
- if (!empty($employee_id_platform)) {
- $q->where('company_id', $company_id)
- ->whereIn('id', $employee_id_platform)
- ->where('duty_type', 1)
- ->where('status', 0);
- }
- });
- $first_responsible_person = $EmployeeModel->pluck('id')->implode(',');
- //当以上规则匹配不到责任人时,则去查询发货地区信息关联责任人
- if (trim($first_responsible_person) == '' && trim($product_data['shipment_city_id']) != '') {
- $employee_id_area = $EmployeeAreaModel->where('company_id', $company_id)->where('city_id', $product_data['shipment_city_id'])->pluck('employee_id')->toarray();
- if (!empty($employee_id_area)) {
- $where_city = [];
- $where_city[] = ['company_id', '=', $company_id];
- $where_city[] = ['status', '=', 0];
- $where_city[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
- $EmployeeModel = new EmployeeModel();
- $first_responsible_person = $EmployeeModel->whereIn('id', $employee_id_area)->where($where_city)->pluck('id')->implode(',');
- }
- }
- //调试记录查询条件
- $insert_product_data['first_responsible_person'] = $first_responsible_person;
- //查询责任人
- $where_query1 = [];
- $where_query2 = [];
- $where_query3 = [];
- //查询指定公司责任人
- if (!empty($employee_id_list)) {
- $where_query1[] = ['company_id', '=', $company_id];
- $where_query1[] = ['id', 'in', $employee_id_list];
- $where_query1[] = ['status', '=', 0];
- $where_query1[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
- }
- //查询地区配置的员工
- $employee_id_area = $EmployeeAreaModel->where('city_id', $product_data['city_id'])->pluck('employee_id')->toarray();
- if (!empty($employee_id_area)) {
- $where_query2[] = ['company_id', '=', $company_id];
- $where_query2[] = ['id', 'in', $employee_id_area];
- $where_query2[] = ['status', '=', 0];
- $where_query2[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
- }
- //查询平台配置的员工
- $employee_id_platform = $EmployeePlatformModel->where('platform_id', $product_data['platform_id'])->pluck('employee_id')->toarray();
- if (!empty($employee_id_platform)) {
- $where_query3[] = ['company_id', '=', $company_id];
- $where_query3[] = ['id', 'in', $employee_id_platform];
- $where_query3[] = ['status', '=', 0];
- $where_query3[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
- }
- //并行查询责任人
- $EmployeeModel = new EmployeeModel();
- $EmployeeModel = $EmployeeModel
- ->orWhere(function ($q) use ($employee_id_list, $company_id) {
- if (!empty($employee_id_list)) {
- $q->where('company_id', $company_id)
- ->orWhereIn('id', $employee_id_list)
- ->where('duty_type', 2)
- ->where('status', 0);
- }
- })->orWhere(function ($q) use ($employee_id_area, $company_id) {
- if (!empty($employee_id_area)) {
- $q->where('company_id', $company_id)
- ->whereIn('id', $employee_id_area)
- ->where('duty_type', 2)
- ->where('status', 0);
- }
- })->orWhere(function ($q) use ($employee_id_platform, $company_id) {
- if (!empty($employee_id_platform)) {
- $q->where('company_id', $company_id)
- ->whereIn('id', $employee_id_platform)
- ->where('duty_type', 2)
- ->where('status', 0);
- }
- });
- $responsible_person = $EmployeeModel->pluck('id')->implode(',');
- //当以上规则匹配不到责任人时,则去查询发货地区信息关联责任人
- if (trim($responsible_person) == '' && trim($product_data['shipment_city_id']) != '') {
- $employee_id_area = $EmployeeAreaModel->where('company_id', $company_id)->where('city_id', $product_data['shipment_city_id'])->pluck('employee_id')->toarray();
- if (!empty($employee_id_area)) {
- $where_city = [];
- $where_city[] = ['company_id', '=', $company_id];
- $where_city[] = ['status', '=', 0];
- $where_city[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
- $EmployeeModel = new EmployeeModel();
- $responsible_person = $EmployeeModel->whereIn('id', $employee_id_area)->where($where_city)->pluck('id')->implode(',');
- }
- }
- $insert_product_data['responsible_person'] = $responsible_person;
- //溯源责任人
- $source_responsible_person = '';
- if ($first_responsible_person && $responsible_person) {
- //转换成数组,合并后在去重
- $first_responsible_person = explode(',', $first_responsible_person);
- $responsible_person = explode(',', $responsible_person);
- $source_responsible_person = array_unique(array_merge($first_responsible_person, $responsible_person));
- $source_responsible_person = ',' . implode(',', $source_responsible_person) . ',';
- } else if ($first_responsible_person) {
- $source_responsible_person = $first_responsible_person;
- } else if ($responsible_person) {
- $source_responsible_person = $responsible_person;
- }
- $insert_product_data['source_responsible_person'] = $source_responsible_person;
- }
- return $insert_product_data;
- }
- public function failed(\Throwable $exception)
- {
- Log::info('job_error', '数据回填-禁止店铺责任人数据回填队列完全失败', ['data' => $this->message_data, 'error' => $exception->getMessage()]);
- }
- }
|