CollectData.php 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612
  1. <?php
  2. namespace App\Http\Controllers\Manager\Process;
  3. use App\Http\Controllers\Controller;
  4. use Illuminate\Http\Request;
  5. use App\Models\Manager\Process\LowPriceGoods as LowPriceGoodsModel;
  6. use App\Models\Manager\Process\ViolationProduct as ViolationProductModel;
  7. use App\Models\Manager\Process\ViolationStore as ViolationStoreModel;
  8. use App\Models\Manager\Personnel\EmployeeArea as EmployeeAreaModel;
  9. use App\Models\Manager\Personnel\Employee as EmployeeModel;
  10. use App\Models\Manager\WashConfig\ViolationCompany as ViolationCompanyModel;
  11. use App\Models\Manager\WashConfig\ViolationCompanyMember as ViolationCompanyMemberModel;
  12. use App\Models\Manager\Personnel\EmployeePlatform as EmployeePlatformModel;
  13. use App\Models\Manager\Process\LowPriceGoodsMember as LowPriceGoodsMemberModel;
  14. use App\Models\Manager\Process\ViolationStoreMember as ViolationStoreMemberModel;
  15. use Illuminate\Support\Facades\DB;
  16. /**
  17. * 清洗后的数据处理
  18. * @author 唐远望
  19. * @version 1.0
  20. * @date 2026-04-29
  21. */
  22. class CollectData extends Controller
  23. {
  24. /**
  25. * 低价商品数据数据清洗-回填责任人
  26. * @author: 唐远望
  27. * @version: 1.0
  28. * @date: 2026-04-29
  29. */
  30. public function low_price_product_collect_data(LowPriceGoodsModel $LowPriceGoodsModel)
  31. {
  32. //获取非导入的低价商品清洗数据
  33. $map = [];
  34. $map[] = ['merge_city_id', '!=', '0'];
  35. $map[] = ['first_responsible_person', '=', ''];
  36. $map[] = ['responsible_person', '=', ''];
  37. $map[] = ['source_responsible_person', '=', ''];
  38. // $map[] = ['online_posting_count', '=', '1'];
  39. // $map[] = ['continuous_listing_count', '=', '1'];
  40. $limit = '100';
  41. DB::beginTransaction();
  42. try {
  43. $result = $LowPriceGoodsModel->where($map)->orderByDesc('id')->paginate($limit)->toarray();
  44. if (!empty($result['data'])) {
  45. foreach ($result['data'] as $key => $product_data) {
  46. $specify_responsible_person = $product_data['specify_responsible_person'];
  47. //获取指定人员信息
  48. $insert_product_data = [];
  49. if ($specify_responsible_person == 0) {
  50. $product_data['qualification_number'] = $product_data['social_credit_code'];
  51. $product_data['platform_id'] = $product_data['platform'];
  52. $insert_product_data = $this->get_responsible_person_info($product_data);
  53. }
  54. // $product_data['collect_config_info'] ='{"sampling_cycle": "1,4", "sampling_start_time": 1778688000, "sampling_end_time": 0}';
  55. // $product_data=$LowPriceGoodsModel->handleCountData($product_data);
  56. // //累计挂网次数
  57. // if(isset($product_data['online_posting_count']) && $product_data['online_posting_count'] > 1){
  58. // $insert_product_data['online_posting_count'] = $product_data['online_posting_count'];
  59. // }
  60. // //连续挂网
  61. // if(isset($product_data['continuous_listing_count']) && $product_data['continuous_listing_count'] > 1){
  62. // $insert_product_data['continuous_listing_count'] = $product_data['continuous_listing_count'];
  63. // }
  64. $update_data = $insert_product_data;
  65. if (!empty($update_data) && count($update_data) > 0) {
  66. $LowPriceGoodsModel->where('id', $product_data['id'])->update($update_data);
  67. $this->insert_low_product_responsible_person_info($product_data, $insert_product_data);
  68. }
  69. }
  70. }
  71. DB::commit();
  72. return json_send(['code' => 'success', 'msg' => '执行成功', 'data' => count($result['data'])]);
  73. // 成功处理...
  74. } catch (\Exception $e) {
  75. DB::rollBack();
  76. return json_send(['code' => 'error', 'msg' => '执行失败', 'data' => $e->getMessage()]);
  77. }
  78. }
  79. /**
  80. * 写入处理低价商品-责任人信息
  81. * @author: 唐远望
  82. * @version: 1.0
  83. * @date: 2026-05-18
  84. */
  85. private function insert_low_product_responsible_person_info($product_data, $insert_product_data)
  86. {
  87. $LowPriceGoodsMemberModel = new LowPriceGoodsMemberModel();
  88. // $LowPriceGoodsModel->where('id', $product_data['id'])->update($update_data);
  89. $LowPriceGoods_id = $product_data['id'];
  90. $data['first_responsible_person'] = isset($insert_product_data['first_responsible_person']) ? $insert_product_data['first_responsible_person'] : '';
  91. $first_responsible_persons = $data['first_responsible_person'] != '' ? explode(',', $data['first_responsible_person']) : [];
  92. $first_responsible_person_data = [];
  93. if (count($first_responsible_persons) > 0) {
  94. //去除重复的责任人
  95. $first_responsible_persons = array_unique($first_responsible_persons);
  96. //移除数组内的空值
  97. $first_responsible_persons = array_filter($first_responsible_persons);
  98. foreach ($first_responsible_persons as $key => $employee_id) {
  99. //如果不是数字或者为空,则跳过
  100. if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id)) continue;
  101. $first_responsible_person_data[] = [
  102. 'lowprice_product_logid' => $LowPriceGoods_id,
  103. 'employee_id' => $employee_id,
  104. 'duty_type' => 1, //责任类型1=第一责任人,2=责任人,3=溯源责任人
  105. ];
  106. }
  107. }
  108. $LowPriceGoodsMemberModel->insert($first_responsible_person_data);
  109. $data['responsible_person'] = isset($insert_product_data['responsible_person']) ? $insert_product_data['responsible_person'] : '';
  110. $responsible_persons = $data['responsible_person'] != '' ? explode(',', $data['responsible_person']) : [];
  111. $responsible_person_data = [];
  112. if (count($responsible_persons) > 0) {
  113. //去除重复的责任人
  114. $responsible_persons = array_unique($responsible_persons);
  115. //移除数组内的空值
  116. $responsible_persons = array_filter($responsible_persons);
  117. foreach ($responsible_persons as $key => $employee_id) {
  118. //如果不是数字或者为空,则跳过
  119. if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id)) continue;
  120. $responsible_person_data[] = [
  121. 'lowprice_product_logid' => $LowPriceGoods_id,
  122. 'employee_id' => $employee_id,
  123. 'duty_type' => 2, //责任类型1=第一责任人,2=责任人,3=溯源责任人
  124. ];
  125. }
  126. }
  127. $LowPriceGoodsMemberModel->insert($responsible_person_data);
  128. $data['source_responsible_person'] = isset($insert_product_data['source_responsible_person']) ? $insert_product_data['source_responsible_person'] : '';
  129. $source_responsible_persons = $data['source_responsible_person'] != '' ? explode(',', $data['source_responsible_person']) : [];
  130. $source_responsible_person_data = [];
  131. if (count($source_responsible_persons) > 0) {
  132. //去除重复的责任人
  133. $source_responsible_persons = array_unique($source_responsible_persons);
  134. //移除数组内的空值
  135. $source_responsible_persons = array_filter($source_responsible_persons);
  136. foreach ($source_responsible_persons as $key => $employee_id) {
  137. //如果不是数字或者为空,则跳过
  138. if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id)) continue;
  139. $source_responsible_person_data[] = [
  140. 'lowprice_product_logid' => $LowPriceGoods_id,
  141. 'employee_id' => $employee_id,
  142. 'duty_type' => 3, //责任类型1=第一责任人,2=责任人,3=溯源责任人
  143. ];
  144. }
  145. }
  146. $LowPriceGoodsMemberModel->insert($source_responsible_person_data);
  147. }
  148. /**
  149. * 根据规则获取责任人分配信息
  150. * @author: 唐远望
  151. * @version: 1.0
  152. * @date: 2026-05-18
  153. */
  154. private function get_responsible_person_info($product_data)
  155. {
  156. $EmployeeAreaModel = new EmployeeAreaModel();
  157. $EmployeePlatformModel = new EmployeePlatformModel();
  158. $ViolationCompanyModel = new ViolationCompanyModel();
  159. $ViolationCompanyMemberModel = new ViolationCompanyMemberModel();
  160. $company_id = $product_data['company_id'];
  161. //获取指定人员信息
  162. $insert_product_data = [];
  163. //获取店铺责任人信息
  164. $ViolationStoreModel = new ViolationStoreModel();
  165. $store_data_info = $ViolationStoreModel->where('company_id', $company_id)->where('store_name', $product_data['store_name'])->where('status', '0')->first();
  166. if (!empty($store_data_info) && trim($store_data_info->employee_ids) != '') {
  167. //查询店铺第一责任人信息
  168. $EmployeeModel = new EmployeeModel();
  169. $store_where_query = [];
  170. $employee_id_store = explode(',', $store_data_info->employee_ids);
  171. $store_where_query[] = ['company_id', '=', $company_id];
  172. $store_where_query[] = ['status', '=', 0];
  173. $store_where_query[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
  174. $first_responsible_person = $EmployeeModel->whereIn('id', $employee_id_store)->where($store_where_query)->pluck('id')->implode(',');
  175. $insert_product_data['first_responsible_person'] = $first_responsible_person;
  176. //查询店铺责任人信息
  177. $EmployeeModel = new EmployeeModel();
  178. $store_where_query = [];
  179. $employee_id_store = explode(',', $store_data_info->employee_ids);
  180. $store_where_query[] = ['company_id', '=', $company_id];
  181. $store_where_query[] = ['status', '=', 0];
  182. $store_where_query[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
  183. $responsible_person = $EmployeeModel->whereIn('id', $employee_id_store)->where($store_where_query)->pluck('id')->implode(',');
  184. $insert_product_data['responsible_person'] = $responsible_person;
  185. //溯源责任人
  186. $source_responsible_person = '';
  187. if ($first_responsible_person && $responsible_person) {
  188. //转换成数组,合并后在去重
  189. $first_responsible_person = explode(',', $first_responsible_person);
  190. $responsible_person = explode(',', $responsible_person);
  191. $source_responsible_person = array_unique(array_merge($first_responsible_person, $responsible_person));
  192. $source_responsible_person = ',' . implode(',', $source_responsible_person) . ',';
  193. } else if ($first_responsible_person) {
  194. $source_responsible_person = $first_responsible_person;
  195. } else if ($responsible_person) {
  196. $source_responsible_person = $responsible_person;
  197. }
  198. $insert_product_data['source_responsible_person'] = $source_responsible_person;
  199. } else {
  200. //获取公司绑定责任人信息
  201. $company_data = $ViolationCompanyModel->leftjoin('washconfig_company_category', 'washconfig_company_category.id', '=', 'washconfig_violation_company.category_id')
  202. ->where('washconfig_violation_company.social_credit_code', $product_data['qualification_number'])
  203. ->where('washconfig_violation_company.company_id', $company_id)
  204. ->select(['washconfig_violation_company.id', 'washconfig_company_category.name as category_name'])->first();
  205. $employee_id_list = [];
  206. if ($company_data) {
  207. $employee_id_list = $ViolationCompanyMemberModel->where('company_logid', $company_data->id)->pluck('employee_id')->toarray();
  208. $insert_product_data['company_category_name'] = $company_data->category_name ? $company_data->category_name : '';
  209. }
  210. $where_query1 = [];
  211. $where_query2 = [];
  212. $where_query3 = [];
  213. //查询指定公司第一责任人
  214. if (!empty($employee_id_list)) {
  215. $where_query1[] = ['company_id', '=', $company_id];
  216. $where_query1[] = ['id', 'in', $employee_id_list];
  217. $where_query1[] = ['status', '=', 0];
  218. $where_query1[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
  219. }
  220. //查询地区配置的第一责任人
  221. $employee_id_area = $EmployeeAreaModel->where('city_id', $product_data['city_id'])->pluck('employee_id')->toarray();
  222. if (!empty($employee_id_area)) {
  223. $where_query2[] = ['company_id', '=', $company_id];
  224. $where_query2[] = ['id', 'in', $employee_id_area];
  225. $where_query2[] = ['status', '=', 0];
  226. $where_query2[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
  227. }
  228. //查询平台配置的第一责任人
  229. $employee_id_platform = $EmployeePlatformModel->where('platform_id', $product_data['platform_id'])->pluck('employee_id')->toarray();
  230. if (!empty($employee_id_platform)) {
  231. $where_query3[] = ['company_id', '=', $company_id];
  232. $where_query3[] = ['id', 'in', $employee_id_platform];
  233. $where_query3[] = ['status', '=', 0];
  234. $where_query3[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
  235. }
  236. //并行查询第一责任人
  237. $EmployeeModel = new EmployeeModel();
  238. $EmployeeModel = $EmployeeModel
  239. ->orWhere(function ($q) use ($employee_id_list, $company_id) {
  240. if (!empty($employee_id_list)) {
  241. $q->where('company_id', $company_id)
  242. ->orWhereIn('id', $employee_id_list)
  243. ->where('duty_type', 1)
  244. ->where('status', 0);
  245. }
  246. })->orWhere(function ($q) use ($employee_id_area, $company_id) {
  247. if (!empty($employee_id_area)) {
  248. $q->where('company_id', $company_id)
  249. ->whereIn('id', $employee_id_area)
  250. ->where('duty_type', 1)
  251. ->where('status', 0);
  252. }
  253. })->orWhere(function ($q) use ($employee_id_platform, $company_id) {
  254. if (!empty($employee_id_platform)) {
  255. $q->where('company_id', $company_id)
  256. ->whereIn('id', $employee_id_platform)
  257. ->where('duty_type', 1)
  258. ->where('status', 0);
  259. }
  260. });
  261. $first_responsible_person = $EmployeeModel->pluck('id')->implode(',');
  262. //当以上规则匹配不到责任人时,则去查询发货地区信息关联责任人
  263. if (trim($first_responsible_person) == '' && trim($product_data['shipment_city_id']) != '') {
  264. $employee_id_area = $EmployeeAreaModel->where('company_id', $company_id)->where('city_id', $product_data['shipment_city_id'])->pluck('employee_id')->toarray();
  265. if (!empty($employee_id_area)) {
  266. $where_city = [];
  267. $where_city[] = ['company_id', '=', $company_id];
  268. $where_city[] = ['status', '=', 0];
  269. $where_city[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
  270. $EmployeeModel = new EmployeeModel();
  271. $first_responsible_person = $EmployeeModel->whereIn('id', $employee_id_area)->where($where_city)->pluck('id')->implode(',');
  272. }
  273. }
  274. //调试记录查询条件
  275. $insert_product_data['first_responsible_person'] = $first_responsible_person;
  276. //查询责任人
  277. $where_query1 = [];
  278. $where_query2 = [];
  279. $where_query3 = [];
  280. //查询指定公司责任人
  281. if (!empty($employee_id_list)) {
  282. $where_query1[] = ['company_id', '=', $company_id];
  283. $where_query1[] = ['id', 'in', $employee_id_list];
  284. $where_query1[] = ['status', '=', 0];
  285. $where_query1[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
  286. }
  287. //查询地区配置的员工
  288. $employee_id_area = $EmployeeAreaModel->where('city_id', $product_data['city_id'])->pluck('employee_id')->toarray();
  289. if (!empty($employee_id_area)) {
  290. $where_query2[] = ['company_id', '=', $company_id];
  291. $where_query2[] = ['id', 'in', $employee_id_area];
  292. $where_query2[] = ['status', '=', 0];
  293. $where_query2[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
  294. }
  295. //查询平台配置的员工
  296. $employee_id_platform = $EmployeePlatformModel->where('platform_id', $product_data['platform_id'])->pluck('employee_id')->toarray();
  297. if (!empty($employee_id_platform)) {
  298. $where_query3[] = ['company_id', '=', $company_id];
  299. $where_query3[] = ['id', 'in', $employee_id_platform];
  300. $where_query3[] = ['status', '=', 0];
  301. $where_query3[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
  302. }
  303. //并行查询责任人
  304. $EmployeeModel = new EmployeeModel();
  305. $EmployeeModel = $EmployeeModel
  306. ->orWhere(function ($q) use ($employee_id_list, $company_id) {
  307. if (!empty($employee_id_list)) {
  308. $q->where('company_id', $company_id)
  309. ->orWhereIn('id', $employee_id_list)
  310. ->where('duty_type', 2)
  311. ->where('status', 0);
  312. }
  313. })->orWhere(function ($q) use ($employee_id_area, $company_id) {
  314. if (!empty($employee_id_area)) {
  315. $q->where('company_id', $company_id)
  316. ->whereIn('id', $employee_id_area)
  317. ->where('duty_type', 2)
  318. ->where('status', 0);
  319. }
  320. })->orWhere(function ($q) use ($employee_id_platform, $company_id) {
  321. if (!empty($employee_id_platform)) {
  322. $q->where('company_id', $company_id)
  323. ->whereIn('id', $employee_id_platform)
  324. ->where('duty_type', 2)
  325. ->where('status', 0);
  326. }
  327. });
  328. $responsible_person = $EmployeeModel->pluck('id')->implode(',');
  329. //当以上规则匹配不到责任人时,则去查询发货地区信息关联责任人
  330. if (trim($responsible_person) == '' && trim($product_data['shipment_city_id']) != '') {
  331. $employee_id_area = $EmployeeAreaModel->where('company_id', $company_id)->where('city_id', $product_data['shipment_city_id'])->pluck('employee_id')->toarray();
  332. if (!empty($employee_id_area)) {
  333. $where_city = [];
  334. $where_city[] = ['company_id', '=', $company_id];
  335. $where_city[] = ['status', '=', 0];
  336. $where_city[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
  337. $EmployeeModel = new EmployeeModel();
  338. $responsible_person = $EmployeeModel->whereIn('id', $employee_id_area)->where($where_city)->pluck('id')->implode(',');
  339. }
  340. }
  341. $insert_product_data['responsible_person'] = $responsible_person;
  342. //溯源责任人
  343. $source_responsible_person = '';
  344. if ($first_responsible_person && $responsible_person) {
  345. //转换成数组,合并后在去重
  346. $first_responsible_person = explode(',', $first_responsible_person);
  347. $responsible_person = explode(',', $responsible_person);
  348. $source_responsible_person = array_unique(array_merge($first_responsible_person, $responsible_person));
  349. $source_responsible_person = ',' . implode(',', $source_responsible_person) . ',';
  350. } else if ($first_responsible_person) {
  351. $source_responsible_person = $first_responsible_person;
  352. } else if ($responsible_person) {
  353. $source_responsible_person = $responsible_person;
  354. }
  355. $insert_product_data['source_responsible_person'] = $source_responsible_person;
  356. }
  357. return $insert_product_data;
  358. }
  359. /**
  360. * 低价商品清洗数据回填
  361. * @author: 唐远望
  362. * @version: 1.0
  363. * @date: 2026-04-29
  364. */
  365. public function low_price_product_collect_collection_time_data(LowPriceGoodsModel $LowPriceGoodsModel)
  366. {
  367. //获取非导入的低价商品清洗数据
  368. $map = [];
  369. $map[] = ['process_lowprice_product.source_id', '!=', '0'];
  370. $map[] = ['process_lowprice_product.collection_time', '==', '0'];
  371. $map[] = ['scrape_data.insert_time', '!=', 'null'];
  372. $limit = '10000';
  373. $result = $LowPriceGoodsModel->leftjoin('scrape_data', 'scrape_data.id', '=', 'process_lowprice_product.source_id')
  374. ->where($map)->select(['process_lowprice_product.id', 'scrape_data.insert_time as collect_collection_time'])
  375. ->orderByDesc('id')->paginate($limit)->toarray();
  376. if (!empty($result['data'])) {
  377. foreach ($result['data'] as $key => $value) {
  378. if (empty($value['collect_collection_time'])) {
  379. continue;
  380. }
  381. $update_data['collection_time'] = strtotime($value['collect_collection_time']);
  382. $LowPriceGoodsModel->where('id', $value['id'])->update($update_data);
  383. }
  384. }
  385. return json_send(['code' => 'success', 'msg' => '执行成功', 'data' => count($result['data'])]);
  386. }
  387. /**
  388. * 禁止商品清洗数据回填
  389. * @author: 唐远望
  390. * @version: 1.0
  391. * @date: 2026-04-29
  392. */
  393. public function violation_product_collect_data(ViolationProductModel $ViolationProductModel)
  394. {
  395. //获取非导入的低价商品清洗数据
  396. $map = [];
  397. $map[] = ['merge_city_id', '!=', '0'];
  398. $map[] = ['first_responsible_person', '=', ''];
  399. $map[] = ['responsible_person', '=', ''];
  400. $map[] = ['source_responsible_person', '=', ''];
  401. $limit = '100';
  402. DB::beginTransaction();
  403. try {
  404. $result = $ViolationProductModel->where($map)->orderByDesc('id')->paginate($limit)->toarray();
  405. if (!empty($result['data'])) {
  406. foreach ($result['data'] as $key => $product_data) {
  407. $specify_responsible_person = $product_data['specify_responsible_person'];
  408. //获取指定人员信息
  409. $insert_product_data = [];
  410. if ($specify_responsible_person == 0) {
  411. $product_data['qualification_number'] = $product_data['social_credit_code'];
  412. $product_data['platform_id'] = $product_data['platform'];
  413. $insert_product_data = $this->get_responsible_person_info($product_data);
  414. }
  415. $update_data = $insert_product_data;
  416. if (!empty($update_data) && count($update_data) > 0) {
  417. $ViolationProductModel->where('id', $product_data['id'])->update($update_data);
  418. $this->insert_violation_product_responsible_person_info($product_data, $insert_product_data);
  419. }
  420. }
  421. }
  422. DB::commit();
  423. return json_send(['code' => 'success', 'msg' => '执行成功', 'data' => count($result['data'])]);
  424. // 成功处理...
  425. } catch (\Exception $e) {
  426. DB::rollBack();
  427. return json_send(['code' => 'error', 'msg' => '执行失败', 'data' => $e->getMessage()]);
  428. }
  429. }
  430. /**
  431. * 写入处理禁止商品-责任人信息
  432. * @author: 唐远望
  433. * @version: 1.0
  434. * @date: 2026-05-19
  435. */
  436. private function insert_violation_product_responsible_person_info($product_data, $data)
  437. {
  438. $ViolationStoreMemberModel = new ViolationStoreMemberModel();
  439. $ViolationStore_id = $product_data['id'];
  440. $first_responsible_persons = $data['first_responsible_person'] != '' ? explode(',', $data['first_responsible_person']) : [];
  441. $first_responsible_person_data = [];
  442. if (count($first_responsible_persons) > 0) {
  443. //去除重复的责任人
  444. $first_responsible_persons = array_unique($first_responsible_persons);
  445. //移除数组内的空值
  446. $first_responsible_persons = array_filter($first_responsible_persons);
  447. foreach ($first_responsible_persons as $key => $employee_id) {
  448. //如果不是数字或者为空,则跳过
  449. if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id)) continue;
  450. $first_responsible_person_data[] = [
  451. 'violation_store_logid' => $ViolationStore_id,
  452. 'employee_id' => $employee_id,
  453. 'duty_type' => 1, //责任类型1=第一责任人,2=责任人,3=溯源责任人
  454. ];
  455. }
  456. }
  457. $ViolationStoreMemberModel->insert($first_responsible_person_data);
  458. $responsible_persons = $data['responsible_person'] != '' ? explode(',', $data['responsible_person']) : [];
  459. $responsible_person_data = [];
  460. if (count($responsible_persons) > 0) {
  461. //去除重复的责任人
  462. $responsible_persons = array_unique($responsible_persons);
  463. //移除数组内的空值
  464. $responsible_persons = array_filter($responsible_persons);
  465. foreach ($responsible_persons as $key => $employee_id) {
  466. //如果不是数字或者为空,则跳过
  467. if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id)) continue;
  468. $responsible_person_data[] = [
  469. 'violation_store_logid' => $ViolationStore_id,
  470. 'employee_id' => $employee_id,
  471. 'duty_type' => 2, //责任类型1=第一责任人,2=责任人,3=溯源责任人
  472. ];
  473. }
  474. }
  475. $ViolationStoreMemberModel->insert($responsible_person_data);
  476. $source_responsible_persons = $data['source_responsible_person'] != '' ? explode(',', $data['source_responsible_person']) : [];
  477. $source_responsible_person_data = [];
  478. if (count($source_responsible_persons) > 0) {
  479. //去除重复的责任人
  480. $source_responsible_persons = array_unique($source_responsible_persons);
  481. //移除数组内的空值
  482. $source_responsible_persons = array_filter($source_responsible_persons);
  483. foreach ($source_responsible_persons as $key => $employee_id) {
  484. //如果不是数字或者为空,则跳过
  485. if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id)) continue;
  486. $source_responsible_person_data[] = [
  487. 'violation_store_logid' => $ViolationStore_id,
  488. 'employee_id' => $employee_id,
  489. 'duty_type' => 3, //责任类型1=第一责任人,2=责任人,3=溯源责任人
  490. ];
  491. }
  492. }
  493. $ViolationStoreMemberModel->insert($source_responsible_person_data);
  494. }
  495. /**
  496. * 违规店铺清洗数据回填
  497. * @author: 唐远望
  498. * @version: 1.0
  499. * @date: 2026-04-29
  500. */
  501. public function violation_store_collect_data(ViolationStoreModel $ViolationStoreModel)
  502. {
  503. //获取非导入的低价商品清洗数据
  504. $map = [];
  505. $map[] = ['merge_city_id', '!=', '0'];
  506. $map[] = ['first_responsible_person', '=', ''];
  507. $map[] = ['responsible_person', '=', ''];
  508. $map[] = ['source_responsible_person', '=', ''];
  509. $limit = '100';
  510. DB::beginTransaction();
  511. try {
  512. $result = $ViolationStoreModel->where($map)->orderByDesc('id')->paginate($limit)->toarray();
  513. if (!empty($result['data'])) {
  514. foreach ($result['data'] as $key => $product_data) {
  515. $specify_responsible_person = $product_data['specify_responsible_person'];
  516. //获取指定人员信息
  517. $insert_product_data = [];
  518. if ($specify_responsible_person == 0) {
  519. $product_data['qualification_number'] = $product_data['social_credit_code'];
  520. $product_data['platform_id'] = $product_data['platform'];
  521. $insert_product_data = $this->get_responsible_person_info($product_data);
  522. }
  523. $update_data = $insert_product_data;
  524. if (!empty($update_data) && count($update_data) > 0) {
  525. $ViolationStoreModel->where('id', $product_data['id'])->update($update_data);
  526. $this->insert_violation_store_responsible_person_info($product_data, $insert_product_data);
  527. }
  528. }
  529. }
  530. DB::commit();
  531. return json_send(['code' => 'success', 'msg' => '执行成功', 'data' => count($result['data'])]);
  532. // 成功处理...
  533. } catch (\Exception $e) {
  534. DB::rollBack();
  535. return json_send(['code' => 'error', 'msg' => '执行失败', 'data' => $e->getMessage()]);
  536. }
  537. }
  538. /**
  539. * 写入处理违规店铺-责任人信息
  540. * @author: 唐远望
  541. * @version: 1.0
  542. * @date: 2026-05-19
  543. */
  544. private function insert_violation_store_responsible_person_info($product_data, $data)
  545. {
  546. $ViolationStoreMemberModel = new ViolationStoreMemberModel();
  547. $ViolationStore_id = $product_data['id'];
  548. $first_responsible_persons = $data['first_responsible_person'] != '' ? explode(',', $data['first_responsible_person']) : [];
  549. $first_responsible_person_data = [];
  550. if (count($first_responsible_persons) > 0) {
  551. foreach ($first_responsible_persons as $key => $employee_id) {
  552. //如果不是数字或者为空,则跳过
  553. if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id)) continue;
  554. $first_responsible_person_data[] = [
  555. 'violation_store_logid' => $ViolationStore_id,
  556. 'employee_id' => $employee_id,
  557. 'duty_type' => 1, //责任类型1=第一责任人,2=责任人,3=溯源责任人
  558. ];
  559. }
  560. }
  561. $ViolationStoreMemberModel->insert($first_responsible_person_data);
  562. $responsible_persons = $data['responsible_person'] != '' ? explode(',', $data['responsible_person']) : [];
  563. $responsible_person_data = [];
  564. if (count($responsible_persons) > 0) {
  565. foreach ($responsible_persons as $key => $employee_id) {
  566. //如果不是数字或者为空,则跳过
  567. if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id)) continue;
  568. $responsible_person_data[] = [
  569. 'violation_store_logid' => $ViolationStore_id,
  570. 'employee_id' => $employee_id,
  571. 'duty_type' => 2, //责任类型1=第一责任人,2=责任人,3=溯源责任人
  572. ];
  573. }
  574. }
  575. $ViolationStoreMemberModel->insert($responsible_person_data);
  576. $source_responsible_persons = $data['source_responsible_person'] != '' ? explode(',', $data['source_responsible_person']) : [];
  577. $source_responsible_person_data = [];
  578. if (count($source_responsible_persons) > 0) {
  579. foreach ($source_responsible_persons as $key => $employee_id) {
  580. //如果不是数字或者为空,则跳过
  581. if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id)) continue;
  582. $source_responsible_person_data[] = [
  583. 'violation_store_logid' => $ViolationStore_id,
  584. 'employee_id' => $employee_id,
  585. 'duty_type' => 3, //责任类型1=第一责任人,2=责任人,3=溯源责任人
  586. ];
  587. }
  588. }
  589. $ViolationStoreMemberModel->insert($source_responsible_person_data);
  590. }
  591. }