CollectData.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459
  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 Illuminate\Support\Facades\DB;
  15. /**
  16. * 清洗后的数据处理
  17. * @author 唐远望
  18. * @version 1.0
  19. * @date 2026-04-29
  20. */
  21. class CollectData extends Controller
  22. {
  23. /**
  24. * 低价商品数据数据清洗-回填责任人
  25. * @author: 唐远望
  26. * @version: 1.0
  27. * @date: 2026-04-29
  28. */
  29. public function low_price_product_collect_data(LowPriceGoodsModel $LowPriceGoodsModel) {
  30. //获取非导入的低价商品清洗数据
  31. $map = [];
  32. $map[] = ['merge_city_id', '!=', '0'];
  33. $map[] = ['first_responsible_person', '=', ''];
  34. $map[] = ['responsible_person', '=', ''];
  35. $map[] = ['source_responsible_person', '=', ''];
  36. $limit = '100';
  37. DB::beginTransaction();
  38. try {
  39. $result = $LowPriceGoodsModel->where($map)->orderByDesc('id')->paginate($limit)->toarray();
  40. if (!empty($result['data'])) {
  41. foreach ($result['data'] as $key => $product_data) {
  42. $specify_responsible_person = 0;
  43. //获取指定人员信息
  44. $insert_product_data = [];
  45. if ($specify_responsible_person == 0) {
  46. $product_data['qualification_number'] = $product_data['social_credit_code'];
  47. $product_data['platform_id'] = $product_data['platform'];
  48. $insert_product_data = $this->get_responsible_person_info($product_data);
  49. }
  50. $update_data = $insert_product_data;
  51. if (!empty($update_data) && count($update_data) > 0) {
  52. $LowPriceGoodsModel->where('id', $product_data['id'])->update($update_data);
  53. $this->insert_low_product_responsible_person_info($product_data, $insert_product_data);
  54. }
  55. }
  56. }
  57. DB::commit();
  58. return json_send(['code' => 'success', 'msg' => '执行成功', 'data' => count($result['data'])]);
  59. // 成功处理...
  60. } catch (\Exception $e) {
  61. DB::rollBack();
  62. return json_send(['code' => 'error', 'msg' => '执行失败', 'data' => $e->getMessage()]);
  63. }
  64. }
  65. /**
  66. * 写入处理低价商品-责任人信息
  67. * @author: 唐远望
  68. * @version: 1.0
  69. * @date: 2026-05-18
  70. */
  71. public function insert_low_product_responsible_person_info($product_data, $insert_product_data)
  72. {
  73. $LowPriceGoodsMemberModel = new LowPriceGoodsMemberModel();
  74. // $LowPriceGoodsModel->where('id', $product_data['id'])->update($update_data);
  75. $LowPriceGoods_id = $product_data['id'];
  76. $data['first_responsible_person'] = isset($insert_product_data['first_responsible_person']) ? $insert_product_data['first_responsible_person'] : '';
  77. $first_responsible_persons = $data['first_responsible_person'] != '' ? explode(',', $data['first_responsible_person']) : [];
  78. $first_responsible_person_data = [];
  79. if (count($first_responsible_persons) > 0) {
  80. foreach ($first_responsible_persons as $key => $employee_id) {
  81. //如果不是数字或者为空,则跳过
  82. if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id)) continue;
  83. $first_responsible_person_data[] = [
  84. 'lowprice_product_logid' => $LowPriceGoods_id,
  85. 'employee_id' => $employee_id,
  86. 'duty_type' => 1, //责任类型1=第一责任人,2=责任人,3=溯源责任人
  87. ];
  88. }
  89. }
  90. $LowPriceGoodsMemberModel->insert($first_responsible_person_data);
  91. $data['responsible_person'] = isset($insert_product_data['responsible_person']) ? $insert_product_data['responsible_person'] : '';
  92. $responsible_persons = $data['responsible_person'] != '' ? explode(',', $data['responsible_person']) : [];
  93. $responsible_person_data = [];
  94. if (count($responsible_persons) > 0) {
  95. foreach ($responsible_persons as $key => $employee_id) {
  96. //如果不是数字或者为空,则跳过
  97. if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id)) continue;
  98. $responsible_person_data[] = [
  99. 'lowprice_product_logid' => $LowPriceGoods_id,
  100. 'employee_id' => $employee_id,
  101. 'duty_type' => 2, //责任类型1=第一责任人,2=责任人,3=溯源责任人
  102. ];
  103. }
  104. }
  105. $LowPriceGoodsMemberModel->insert($responsible_person_data);
  106. $data['source_responsible_person'] = isset($insert_product_data['source_responsible_person']) ? $insert_product_data['source_responsible_person'] : '';
  107. $source_responsible_persons = $data['source_responsible_person'] != '' ? explode(',', $data['source_responsible_person']) : [];
  108. $source_responsible_person_data = [];
  109. if (count($source_responsible_persons) > 0) {
  110. foreach ($source_responsible_persons as $key => $employee_id) {
  111. //如果不是数字或者为空,则跳过
  112. if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id)) continue;
  113. $source_responsible_person_data[] = [
  114. 'lowprice_product_logid' => $LowPriceGoods_id,
  115. 'employee_id' => $employee_id,
  116. 'duty_type' => 3, //责任类型1=第一责任人,2=责任人,3=溯源责任人
  117. ];
  118. }
  119. }
  120. $LowPriceGoodsMemberModel->insert($source_responsible_person_data);
  121. }
  122. /**
  123. * 根据规则获取责任人分配信息
  124. * @author: 唐远望
  125. * @version: 1.0
  126. * @date: 2026-05-18
  127. */
  128. public function get_responsible_person_info($product_data)
  129. {
  130. $EmployeeAreaModel = new EmployeeAreaModel();
  131. $EmployeePlatformModel = new EmployeePlatformModel();
  132. $ViolationCompanyModel = new ViolationCompanyModel();
  133. $ViolationCompanyMemberModel = new ViolationCompanyMemberModel();
  134. $company_id = $product_data['company_id'];
  135. //获取指定人员信息
  136. $insert_product_data = [];
  137. //获取店铺责任人信息
  138. $ViolationStoreModel = new ViolationStoreModel();
  139. $store_data_info = $ViolationStoreModel->where('company_id', $company_id)->where('store_name', $product_data['store_name'])->where('status', '0')->first();
  140. if (!empty($store_data_info) && trim($store_data_info->employee_ids) != '') {
  141. //查询店铺第一责任人信息
  142. $EmployeeModel = new EmployeeModel();
  143. $store_where_query = [];
  144. $employee_id_store = explode(',', $store_data_info->employee_ids);
  145. $store_where_query[] = ['company_id', '=', $company_id];
  146. $store_where_query[] = ['status', '=', 0];
  147. $store_where_query[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
  148. $first_responsible_person = $EmployeeModel->whereIn('id', $employee_id_store)->where($store_where_query)->pluck('id')->implode(',');
  149. $insert_product_data['first_responsible_person'] = $first_responsible_person;
  150. //查询店铺责任人信息
  151. $EmployeeModel = new EmployeeModel();
  152. $store_where_query = [];
  153. $employee_id_store = explode(',', $store_data_info->employee_ids);
  154. $store_where_query[] = ['company_id', '=', $company_id];
  155. $store_where_query[] = ['status', '=', 0];
  156. $store_where_query[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
  157. $responsible_person = $EmployeeModel->whereIn('id', $employee_id_store)->where($store_where_query)->pluck('id')->implode(',');
  158. $insert_product_data['responsible_person'] = $responsible_person;
  159. //溯源责任人
  160. $source_responsible_person = '';
  161. if ($first_responsible_person && $responsible_person) {
  162. //转换成数组,合并后在去重
  163. $first_responsible_person = explode(',', $first_responsible_person);
  164. $responsible_person = explode(',', $responsible_person);
  165. $source_responsible_person = array_unique(array_merge($first_responsible_person, $responsible_person));
  166. $source_responsible_person = ',' . implode(',', $source_responsible_person) . ',';
  167. } else if ($first_responsible_person) {
  168. $source_responsible_person = $first_responsible_person;
  169. } else if ($responsible_person) {
  170. $source_responsible_person = $responsible_person;
  171. }
  172. $insert_product_data['source_responsible_person'] = $source_responsible_person;
  173. } else {
  174. //获取公司绑定责任人信息
  175. $company_data = $ViolationCompanyModel->leftjoin('washconfig_company_category', 'washconfig_company_category.id', '=', 'washconfig_violation_company.category_id')
  176. ->where('washconfig_violation_company.social_credit_code', $product_data['qualification_number'])
  177. ->where('washconfig_violation_company.company_id', $company_id)
  178. ->select(['washconfig_violation_company.id', 'washconfig_company_category.name as category_name'])->first();
  179. $employee_id_list = [];
  180. if ($company_data) {
  181. $employee_id_list = $ViolationCompanyMemberModel->where('company_logid', $company_data->id)->pluck('employee_id')->toarray();
  182. $insert_product_data['company_category_name'] = $company_data->category_name ? $company_data->category_name : '';
  183. }
  184. $where_query1 = [];
  185. $where_query2 = [];
  186. $where_query3 = [];
  187. //查询指定公司第一责任人
  188. if (!empty($employee_id_list)) {
  189. $where_query1[] = ['company_id', '=', $company_id];
  190. $where_query1[] = ['id', 'in', $employee_id_list];
  191. $where_query1[] = ['status', '=', 0];
  192. $where_query1[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
  193. }
  194. //查询地区配置的第一责任人
  195. $employee_id_area = $EmployeeAreaModel->where('city_id', $product_data['city_id'])->pluck('employee_id')->toarray();
  196. if (!empty($employee_id_area)) {
  197. $where_query2[] = ['company_id', '=', $company_id];
  198. $where_query2[] = ['id', 'in', $employee_id_area];
  199. $where_query2[] = ['status', '=', 0];
  200. $where_query2[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
  201. }
  202. //查询平台配置的第一责任人
  203. $employee_id_platform = $EmployeePlatformModel->where('platform_id', $product_data['platform_id'])->pluck('employee_id')->toarray();
  204. if (!empty($employee_id_platform)) {
  205. $where_query3[] = ['company_id', '=', $company_id];
  206. $where_query3[] = ['id', 'in', $employee_id_platform];
  207. $where_query3[] = ['status', '=', 0];
  208. $where_query3[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
  209. }
  210. //并行查询第一责任人
  211. $EmployeeModel = new EmployeeModel();
  212. $EmployeeModel = $EmployeeModel
  213. ->orWhere(function ($q) use ($employee_id_list, $company_id) {
  214. if (!empty($employee_id_list)) {
  215. $q->where('company_id', $company_id)
  216. ->orWhereIn('id', $employee_id_list)
  217. ->where('duty_type', 1)
  218. ->where('status', 0);
  219. }
  220. })->orWhere(function ($q) use ($employee_id_area, $company_id) {
  221. if (!empty($employee_id_area)) {
  222. $q->where('company_id', $company_id)
  223. ->whereIn('id', $employee_id_area)
  224. ->where('duty_type', 1)
  225. ->where('status', 0);
  226. }
  227. })->orWhere(function ($q) use ($employee_id_platform, $company_id) {
  228. if (!empty($employee_id_platform)) {
  229. $q->where('company_id', $company_id)
  230. ->whereIn('id', $employee_id_platform)
  231. ->where('duty_type', 1)
  232. ->where('status', 0);
  233. }
  234. });
  235. $first_responsible_person = $EmployeeModel->pluck('id')->implode(',');
  236. //当以上规则匹配不到责任人时,则去查询发货地区信息关联责任人
  237. if (trim($first_responsible_person) == '' && trim($product_data['shipment_city_id']) != '') {
  238. $employee_id_area = $EmployeeAreaModel->where('company_id', $company_id)->where('city_id', $product_data['shipment_city_id'])->pluck('employee_id')->toarray();
  239. if (!empty($employee_id_area)) {
  240. $where_city = [];
  241. $where_city[] = ['company_id', '=', $company_id];
  242. $where_city[] = ['status', '=', 0];
  243. $where_city[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
  244. $EmployeeModel = new EmployeeModel();
  245. $first_responsible_person = $EmployeeModel->whereIn('id', $employee_id_area)->where($where_city)->pluck('id')->implode(',');
  246. }
  247. }
  248. //调试记录查询条件
  249. $insert_product_data['first_responsible_person'] = $first_responsible_person;
  250. //查询责任人
  251. $where_query1 = [];
  252. $where_query2 = [];
  253. $where_query3 = [];
  254. //查询指定公司责任人
  255. if (!empty($employee_id_list)) {
  256. $where_query1[] = ['company_id', '=', $company_id];
  257. $where_query1[] = ['id', 'in', $employee_id_list];
  258. $where_query1[] = ['status', '=', 0];
  259. $where_query1[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
  260. }
  261. //查询地区配置的员工
  262. $employee_id_area = $EmployeeAreaModel->where('city_id', $product_data['city_id'])->pluck('employee_id')->toarray();
  263. if (!empty($employee_id_area)) {
  264. $where_query2[] = ['company_id', '=', $company_id];
  265. $where_query2[] = ['id', 'in', $employee_id_area];
  266. $where_query2[] = ['status', '=', 0];
  267. $where_query2[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
  268. }
  269. //查询平台配置的员工
  270. $employee_id_platform = $EmployeePlatformModel->where('platform_id', $product_data['platform_id'])->pluck('employee_id')->toarray();
  271. if (!empty($employee_id_platform)) {
  272. $where_query3[] = ['company_id', '=', $company_id];
  273. $where_query3[] = ['id', 'in', $employee_id_platform];
  274. $where_query3[] = ['status', '=', 0];
  275. $where_query3[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
  276. }
  277. //并行查询责任人
  278. $EmployeeModel = new EmployeeModel();
  279. $EmployeeModel = $EmployeeModel
  280. ->orWhere(function ($q) use ($employee_id_list, $company_id) {
  281. if (!empty($employee_id_list)) {
  282. $q->where('company_id', $company_id)
  283. ->orWhereIn('id', $employee_id_list)
  284. ->where('duty_type', 2)
  285. ->where('status', 0);
  286. }
  287. })->orWhere(function ($q) use ($employee_id_area, $company_id) {
  288. if (!empty($employee_id_area)) {
  289. $q->where('company_id', $company_id)
  290. ->whereIn('id', $employee_id_area)
  291. ->where('duty_type', 2)
  292. ->where('status', 0);
  293. }
  294. })->orWhere(function ($q) use ($employee_id_platform, $company_id) {
  295. if (!empty($employee_id_platform)) {
  296. $q->where('company_id', $company_id)
  297. ->whereIn('id', $employee_id_platform)
  298. ->where('duty_type', 2)
  299. ->where('status', 0);
  300. }
  301. });
  302. $responsible_person = $EmployeeModel->pluck('id')->implode(',');
  303. //当以上规则匹配不到责任人时,则去查询发货地区信息关联责任人
  304. if (trim($responsible_person) == '' && trim($product_data['shipment_city_id']) != '') {
  305. $employee_id_area = $EmployeeAreaModel->where('company_id', $company_id)->where('city_id', $product_data['shipment_city_id'])->pluck('employee_id')->toarray();
  306. if (!empty($employee_id_area)) {
  307. $where_city = [];
  308. $where_city[] = ['company_id', '=', $company_id];
  309. $where_city[] = ['status', '=', 0];
  310. $where_city[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
  311. $EmployeeModel = new EmployeeModel();
  312. $responsible_person = $EmployeeModel->whereIn('id', $employee_id_area)->where($where_city)->pluck('id')->implode(',');
  313. }
  314. }
  315. $insert_product_data['responsible_person'] = $responsible_person;
  316. //溯源责任人
  317. $source_responsible_person = '';
  318. if ($first_responsible_person && $responsible_person) {
  319. //转换成数组,合并后在去重
  320. $first_responsible_person = explode(',', $first_responsible_person);
  321. $responsible_person = explode(',', $responsible_person);
  322. $source_responsible_person = array_unique(array_merge($first_responsible_person, $responsible_person));
  323. $source_responsible_person = ',' . implode(',', $source_responsible_person) . ',';
  324. } else if ($first_responsible_person) {
  325. $source_responsible_person = $first_responsible_person;
  326. } else if ($responsible_person) {
  327. $source_responsible_person = $responsible_person;
  328. }
  329. $insert_product_data['source_responsible_person'] = $source_responsible_person;
  330. }
  331. return $insert_product_data;
  332. }
  333. /**
  334. * 低价商品清洗数据回填
  335. * @author: 唐远望
  336. * @version: 1.0
  337. * @date: 2026-04-29
  338. */
  339. public function low_price_product_collect_collection_time_data(LowPriceGoodsModel $LowPriceGoodsModel)
  340. {
  341. //获取非导入的低价商品清洗数据
  342. $map = [];
  343. $map[] = ['process_lowprice_product.source_id', '!=', '0'];
  344. $map[] = ['process_lowprice_product.collection_time', '==', '0'];
  345. $map[] = ['scrape_data.insert_time', '!=', 'null'];
  346. $limit = '10000';
  347. $result = $LowPriceGoodsModel->leftjoin('scrape_data', 'scrape_data.id', '=', 'process_lowprice_product.source_id')
  348. ->where($map)->select(['process_lowprice_product.id', 'scrape_data.insert_time as collect_collection_time'])
  349. ->orderByDesc('id')->paginate($limit)->toarray();
  350. if (!empty($result['data'])) {
  351. foreach ($result['data'] as $key => $value) {
  352. if (empty($value['collect_collection_time'])) {
  353. continue;
  354. }
  355. $update_data['collection_time'] = strtotime($value['collect_collection_time']);
  356. $LowPriceGoodsModel->where('id', $value['id'])->update($update_data);
  357. }
  358. }
  359. return json_send(['code' => 'success', 'msg' => '执行成功', 'data' => count($result['data'])]);
  360. }
  361. /**
  362. * 禁止商品清洗数据回填
  363. * @author: 唐远望
  364. * @version: 1.0
  365. * @date: 2026-04-29
  366. */
  367. public function violation_product_collect_data(ViolationProductModel $ViolationProductModel)
  368. {
  369. //获取非导入的低价商品清洗数据
  370. $map = [];
  371. $map[] = ['merge_city_id', '!=', '0'];
  372. $map[] = ['first_responsible_person', '=', ''];
  373. $map[] = ['responsible_person', '=', ''];
  374. $map[] = ['source_responsible_person', '=', ''];
  375. $limit = '100';
  376. DB::beginTransaction();
  377. try {
  378. $result = $ViolationProductModel->where($map)->orderByDesc('id')->paginate($limit)->toarray();
  379. if (!empty($result['data'])) {
  380. foreach ($result['data'] as $key => $product_data) {
  381. $specify_responsible_person = 0;
  382. //获取指定人员信息
  383. $insert_product_data = [];
  384. if ($specify_responsible_person == 0) {
  385. $product_data['qualification_number'] = $product_data['social_credit_code'];
  386. $product_data['platform_id'] = $product_data['platform'];
  387. $insert_product_data = $this->get_responsible_person_info($product_data);
  388. }
  389. $update_data = $insert_product_data;
  390. if (!empty($update_data) && count($update_data) > 0) {
  391. $ViolationProductModel->where('id', $product_data['id'])->update($update_data);
  392. $this->insert_violation_product_responsible_person_info($product_data, $insert_product_data);
  393. }
  394. }
  395. }
  396. DB::commit();
  397. return json_send(['code' => 'success', 'msg' => '执行成功', 'data' => count($result['data'])]);
  398. // 成功处理...
  399. } catch (\Exception $e) {
  400. DB::rollBack();
  401. return json_send(['code' => 'error', 'msg' => '执行失败', 'data' => $e->getMessage()]);
  402. }
  403. }
  404. /**
  405. * 写入处理禁止商品-责任人信息
  406. * @author: 唐远望
  407. * @version: 1.0
  408. * @date: 2026-05-18
  409. */
  410. public function insert_violation_product_responsible_person_info($product_data, $insert_product_data)
  411. {
  412. }
  413. /**
  414. * 违规店铺清洗数据回填
  415. * @author: 唐远望
  416. * @version: 1.0
  417. * @date: 2026-04-29
  418. */
  419. public function violation_store_collect_data(ViolationStoreModel $ViolationStoreModel)
  420. {
  421. //获取非导入的低价商品清洗数据
  422. $map = [];
  423. $map[] = ['process_violation_store.source_id', '!=', '0'];
  424. $map[] = ['process_violation_store.collection_time', '==', '0'];
  425. $map[] = ['scrape_data.insert_time', '!=', 'null'];
  426. $limit = '10000';
  427. $result = $ViolationStoreModel->leftjoin('scrape_data', 'scrape_data.id', '=', 'process_violation_store.source_id')
  428. ->where($map)->select(['process_violation_store.id', 'scrape_data.insert_time as collect_collection_time'])
  429. ->orderByDesc('id')->paginate($limit)->toarray();
  430. if (!empty($result['data'])) {
  431. foreach ($result['data'] as $key => $value) {
  432. if (empty($value['collect_collection_time'])) {
  433. continue;
  434. }
  435. $update_data['collection_time'] = strtotime($value['collect_collection_time']);
  436. $ViolationStoreModel->where('id', $value['id'])->update($update_data);
  437. }
  438. }
  439. return json_send(['code' => 'success', 'msg' => '执行成功', 'data' => count($result['data'])]);
  440. }
  441. }