LowPriceGoods.php 49 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003
  1. <?php
  2. namespace App\Http\Controllers\Manager\Process;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Requests\Manager\Process\LowPriceGoods as Request;
  5. use App\Models\Manager\Process\LowPriceGoods as LowPriceGoodsModel;
  6. use App\Jobs\Manager\Process\LowPriceGoodsJobs;
  7. use App\Models\Manager\Personnel\Employee as EmployeeModel;
  8. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  9. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  10. use PhpOffice\PhpSpreadsheet\Style\Alignment;
  11. use PhpOffice\PhpSpreadsheet\IOFactory;
  12. use App\Models\Manager\Process\LowPriceGoodsMember as LowPriceGoodsMemberModel;
  13. use App\Models\manager\Process\LowPriceGoodsRecord as LowPriceGoodsRecordModel;
  14. use Illuminate\Support\Facades\DB;
  15. use App\Models\Manager\Citys as CitysModel;
  16. /**
  17. * 违规处理-低价商品
  18. * @author 唐远望
  19. * @version 1.0
  20. * @date 2025-12-08
  21. */
  22. class LowPriceGoods extends Controller
  23. {
  24. /**
  25. * 列表
  26. * @author 唐远望
  27. * @version 1.0
  28. * @date 2025-12-08
  29. *
  30. */
  31. public function list(Request $request, LowPriceGoodsModel $LowPriceGoodsModel, EmployeeModel $EmployeeModel, LowPriceGoodsMemberModel $LowPriceGoodsMemberModel)
  32. {
  33. $request->scene('list')->validate();
  34. $admin_company_id = request('admin_company_id', '0');
  35. $company_id = request('access_token.company_id', '0');
  36. $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否
  37. // 查询条件
  38. $map = [];
  39. $limit = request('limit', config('page_num', 10));
  40. $status = request('status', '');
  41. $start_time = request('start_time', '');
  42. $end_time = request('end_time', '');
  43. $product_name = request('product_name', '');
  44. $product_names = request('product_names', '');
  45. $first_responsible_person = request('first_responsible_person', '');
  46. $responsible_person = request('responsible_person', '');
  47. $platform = request('platform', '');
  48. $company_name = request('company_name', '');
  49. $company_names = request('company_names', '');
  50. $store_name = request('store_name', '');
  51. $store_names = request('store_names', '');
  52. $source_responsible_person = request('source_responsible_person', '');
  53. $processing_status = request('processing_status', '');
  54. $product_specs = request('product_specs', '');
  55. $online_posting_count = request('online_posting_count', '');
  56. $category_name = request('category_name', '');
  57. // 时间条件
  58. if ($start_time) $map[] = ['insert_time', '>=', strtotime($start_time)];
  59. if ($end_time) $map[] = ['insert_time', '<=', strtotime($end_time)];
  60. // 其他条件
  61. if ($product_name) $map[] = ['product_name', 'like', "%$product_name%"];
  62. if ($store_name) $map[] = ['store_name', 'like', "%$store_name%"];
  63. if ($category_name) $map[] = ['category_name', 'like', "%$category_name%"];
  64. if ($company_name) $map[] = ['company_name', 'like', "%$company_name%"];
  65. //多选平台查询
  66. if ($platform && is_string($platform)) {
  67. $platform = explode(',', $platform);
  68. $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('platform', $platform);
  69. }
  70. //多选处理状态查询
  71. if ($processing_status && is_string($processing_status)) {
  72. $processing_status = explode(',', $processing_status);
  73. $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('processing_status', $processing_status);
  74. }
  75. //多选状态查询
  76. if ($status && is_string($status)) {
  77. $status = explode(',', $status);
  78. $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('status', $status);
  79. }
  80. //多选店铺名称查询
  81. if ($store_names && is_string($store_names)) {
  82. $store_names = explode(',', $store_names);
  83. $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('store_name', $store_names);
  84. }
  85. //多选违规挂网次数查询
  86. if ($online_posting_count && is_string($online_posting_count)) {
  87. $online_posting_count = explode(',', $online_posting_count);
  88. $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('online_posting_count', $online_posting_count);
  89. }
  90. //多选规格查询
  91. if ($product_specs && is_string($product_specs)) {
  92. $product_specs = explode(',', $product_specs);
  93. $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('product_specs', $product_specs);
  94. }
  95. //多选商品查询
  96. if ($product_names && is_string($product_names)) {
  97. $product_names = explode(',', $product_names);
  98. $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('product_name', $product_names);
  99. }
  100. //多选公司查询
  101. if ($company_names && is_string($company_names)) {
  102. $company_names = explode(',', $company_names);
  103. $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('company_name', $company_names);
  104. }
  105. //多选第一责任人
  106. if ($first_responsible_person && is_string($first_responsible_person)) {
  107. $first_responsible_person = explode(',', $first_responsible_person);
  108. $subQuery = $LowPriceGoodsMemberModel->whereIn('employee_id', $first_responsible_person)->distinct('lowprice_product_logid')->select('lowprice_product_logid');
  109. $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('id', function ($query1) use ($subQuery) {
  110. $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
  111. });
  112. }
  113. //多选责任人
  114. if ($responsible_person && is_string($responsible_person)) {
  115. $responsible_person = explode(',', $responsible_person);
  116. $subQuery = $LowPriceGoodsMemberModel->whereIn('employee_id', $responsible_person)->distinct('lowprice_product_logid')->select('lowprice_product_logid');
  117. $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('id', function ($query1) use ($subQuery) {
  118. $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
  119. });
  120. }
  121. //多选溯源责任人
  122. if ($source_responsible_person && is_string($source_responsible_person)) {
  123. $source_responsible_person = explode(',', $source_responsible_person);
  124. $subQuery = $LowPriceGoodsMemberModel->whereIn('employee_id', $source_responsible_person)->distinct('lowprice_product_logid')->select('lowprice_product_logid');
  125. $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('id', function ($query1) use ($subQuery) {
  126. $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
  127. });
  128. }
  129. $result = $LowPriceGoodsModel
  130. ->where($map)
  131. ->orderByDesc('id')
  132. ->paginate($limit)->toarray();
  133. // 分配数据
  134. if (!$result) json_send(['code' => 'success', 'msg' => '获取成功', 'data' => []]);
  135. if (isset($result['data']) && count($result['data']) > 0) {
  136. foreach ($result['data'] as $key => $value) {
  137. //查询第一责任人名称
  138. $first_responsible_person = explode(',', $value['first_responsible_person']);
  139. $first_responsible_person_name = $EmployeeModel->whereIn('id', $first_responsible_person)->pluck('name')->toarray();
  140. $result['data'][$key]['first_responsible_person_name'] = $first_responsible_person_name;
  141. //查询责任人名称
  142. $responsible_person = explode(',', $value['responsible_person']);
  143. $responsible_person_name = $EmployeeModel->whereIn('id', $responsible_person)->pluck('name')->toarray();
  144. $result['data'][$key]['responsible_person_name'] = $responsible_person_name;
  145. //查询来源责任人名称
  146. $source_responsible_person = explode(',', $value['source_responsible_person']);
  147. $source_responsible_person_name = $EmployeeModel->whereIn('id', $source_responsible_person)->pluck('name')->toarray();
  148. $result['data'][$key]['source_responsible_person_name'] = $source_responsible_person_name;
  149. }
  150. }
  151. // 加载模板
  152. return json_send(['code' => 'success', 'msg' => '获取成功', 'data' => $result]);
  153. }
  154. /**
  155. * 列表导出
  156. * @author 唐远望
  157. * @version 1.0
  158. * @date 2025-06-17
  159. */
  160. public function export_excel(Request $request, LowPriceGoodsModel $LowPriceGoodsModel, EmployeeModel $EmployeeModel, LowPriceGoodsMemberModel $LowPriceGoodsMemberModel)
  161. {
  162. $request->scene('export_excel')->validate();
  163. $admin_company_id = request('admin_company_id', '0');
  164. $company_id = request('access_token.company_id', '0');
  165. $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否
  166. // 查询条件
  167. $map = [];
  168. $limit = request('limit', config('page_num', 10));
  169. $status = request('status', '');
  170. $start_time = request('start_time', '');
  171. $end_time = request('end_time', '');
  172. $product_name = request('product_name', '');
  173. $product_names = request('product_names', '');
  174. $first_responsible_person = request('first_responsible_person', '');
  175. $responsible_person = request('responsible_person', '');
  176. $platform = request('platform', '');
  177. $company_name = request('company_name', '');
  178. $store_name = request('store_name', '');
  179. $store_names = request('store_names', '');
  180. $source_responsible_person = request('source_responsible_person', '');
  181. $processing_status = request('processing_status', '');
  182. $product_specs = request('product_specs', '');
  183. $online_posting_count = request('online_posting_count', '');
  184. $category_name = request('category_name', '');
  185. // 时间条件
  186. if ($start_time) $map[] = ['insert_time', '>=', strtotime($start_time)];
  187. if ($end_time) $map[] = ['insert_time', '<=', strtotime($end_time)];
  188. // 其他条件
  189. if ($product_name) $map[] = ['product_name', 'like', "%$product_name%"];
  190. if ($store_name) $map[] = ['store_name', 'like', "%$store_name%"];
  191. if ($category_name) $map[] = ['category_name', 'like', "%$category_name%"];
  192. //多选平台查询
  193. if ($platform && is_string($platform)) {
  194. $platform = explode(',', $platform);
  195. $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('platform', $platform);
  196. }
  197. //多选处理状态查询
  198. if ($processing_status && is_string($processing_status)) {
  199. $processing_status = explode(',', $processing_status);
  200. $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('processing_status', $processing_status);
  201. }
  202. //多选状态查询
  203. if ($status && is_string($status)) {
  204. $status = explode(',', $status);
  205. $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('status', $status);
  206. }
  207. //多选店铺名称查询
  208. if ($store_names && is_string($store_names)) {
  209. $store_names = explode(',', $store_names);
  210. $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('store_name', $store_names);
  211. }
  212. //多选违规挂网次数查询
  213. if ($online_posting_count && is_string($online_posting_count)) {
  214. $online_posting_count = explode(',', $online_posting_count);
  215. $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('online_posting_count', $online_posting_count);
  216. }
  217. //多选规格查询
  218. if ($product_specs && is_string($product_specs)) {
  219. $product_specs = explode(',', $product_specs);
  220. $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('product_specs', $product_specs);
  221. }
  222. //多选商品查询
  223. if ($product_names && is_string($product_names)) {
  224. $product_names = explode(',', $product_names);
  225. $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('product_name', $product_names);
  226. }
  227. //多选公司查询
  228. if ($company_name && is_string($company_name)) {
  229. $company_name = explode(',', $company_name);
  230. $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('company_name', $company_name);
  231. }
  232. //多选第一责任人
  233. if ($first_responsible_person && is_string($first_responsible_person)) {
  234. $first_responsible_person = explode(',', $first_responsible_person);
  235. $subQuery = $LowPriceGoodsMemberModel->whereIn('employee_id', $first_responsible_person)->distinct('lowprice_product_logid')->select('lowprice_product_logid');
  236. $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('id', function ($query1) use ($subQuery) {
  237. $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
  238. });
  239. }
  240. //多选责任人
  241. if ($responsible_person && is_string($responsible_person)) {
  242. $responsible_person = explode(',', $responsible_person);
  243. $subQuery = $LowPriceGoodsMemberModel->whereIn('employee_id', $responsible_person)->distinct('lowprice_product_logid')->select('lowprice_product_logid');
  244. $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('id', function ($query1) use ($subQuery) {
  245. $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
  246. });
  247. }
  248. //多选溯源责任人
  249. if ($source_responsible_person && is_string($source_responsible_person)) {
  250. $source_responsible_person = explode(',', $source_responsible_person);
  251. $subQuery = $LowPriceGoodsMemberModel->whereIn('employee_id', $source_responsible_person)->distinct('lowprice_product_logid')->select('lowprice_product_logid');
  252. $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('id', function ($query1) use ($subQuery) {
  253. $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
  254. });
  255. }
  256. $result = $LowPriceGoodsModel
  257. ->where($map)
  258. ->orderByDesc('id')
  259. ->get()->toarray();
  260. // 分配数据
  261. if (!$result) return json_send(['code' => 'error', 'msg' => '暂无数据']);
  262. // 处理责任人展示信息
  263. $list_data = $this->processing_responsible_person($result);
  264. // 导出数据
  265. $this->export_download($list_data);
  266. }
  267. /**
  268. * 处理责任人展示信息
  269. * @author 唐远望
  270. * @version 1.0
  271. * @date 2025-12-17
  272. */
  273. public function processing_responsible_person($result)
  274. {
  275. $EmployeeModel = new EmployeeModel();
  276. //获取所有员工
  277. $employeee_data = $EmployeeModel->select(['id', 'name'])->get()->toarray();
  278. $employeee_list = [];
  279. if (!empty($employeee_data)) {
  280. foreach ($employeee_data as $key => $value) {
  281. $employeee_list[$value['id']] = $value['name'];
  282. }
  283. }
  284. if (isset($result) && count($result) > 0) {
  285. foreach ($result as $key => $value) {
  286. //查询第一责任人名称
  287. $first_responsible_person = $value['first_responsible_person'] != '' ? explode(',', $value['first_responsible_person']) : [];
  288. $first_responsible_person_name = [];
  289. if (!empty($first_responsible_person)) {
  290. foreach ($first_responsible_person as $k => $v) {
  291. if (isset($employeee_list[$v])) {
  292. $first_responsible_person_name[] = $employeee_list[$v];
  293. }
  294. }
  295. }
  296. $result[$key]['first_responsible_person_name'] = $first_responsible_person_name;
  297. //查询责任人名称
  298. $responsible_person = $value['responsible_person'] != '' ? explode(',', $value['responsible_person']) : [];
  299. $responsible_person_name = [];
  300. if (!empty($responsible_person)) {
  301. foreach ($responsible_person as $k => $v) {
  302. if (isset($employeee_list[$v])) {
  303. $responsible_person_name[] = $employeee_list[$v];
  304. }
  305. }
  306. }
  307. $result[$key]['responsible_person_name'] = $responsible_person_name;
  308. //查询来源责任人名称
  309. $source_responsible_person = $value['source_responsible_person'] != '' ? explode(',', $value['source_responsible_person']) : [];
  310. $source_responsible_person_name = [];
  311. if (!empty($source_responsible_person)) {
  312. foreach ($source_responsible_person as $k => $v) {
  313. if (isset($employeee_list[$v])) {
  314. $source_responsible_person_name[] = $employeee_list[$v];
  315. }
  316. }
  317. }
  318. $result[$key]['source_responsible_person_name'] = $source_responsible_person_name;
  319. }
  320. }
  321. return $result;
  322. }
  323. /**
  324. * 导出下载
  325. * @author 唐远望
  326. * @version 1.0
  327. * @date 2025-06-17
  328. */
  329. public function export_download($data)
  330. {
  331. // 创建一个新的 Spreadsheet 对象
  332. $spreadsheet = new Spreadsheet();
  333. $sheet = $spreadsheet->getActiveSheet();
  334. //合并单元格
  335. $sheet->mergeCells('A1:U1');
  336. $sheet->setCellValue('A1', '低价挂网商品导出(导出时间:' . date('Y-m-d H:i:s', time()) . ')'); // 设置合并后的单元格内容
  337. // 获取合并后的单元格样式对象
  338. $style = $sheet->getStyle('A1');
  339. // 设置水平居中和垂直居中
  340. $style->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER)->setVertical(Alignment::VERTICAL_CENTER);
  341. // 然后设置行高以适应两行文本
  342. $sheet->getRowDimension(1)->setRowHeight(40); // 设置行高,单位是磅(point)
  343. // 设置表头
  344. $sheet->setCellValue('A2', '第一责任人');
  345. $sheet->setCellValue('B2', '责任人');
  346. $sheet->setCellValue('C2', '平台');
  347. $sheet->setCellValue('D2', '商品分类');
  348. $sheet->setCellValue('E2', '商品名称');
  349. $sheet->setCellValue('F2', '商品规格');
  350. $sheet->setCellValue('G2', '监控价格');
  351. $sheet->setCellValue('H2', '挂网价格');
  352. $sheet->setCellValue('I2', '累计挂网次数');
  353. $sheet->setCellValue('J2', '连续挂网次数');
  354. $sheet->setCellValue('K2', '链接地址');
  355. $sheet->setCellValue('L2', '店铺名称');
  356. $sheet->setCellValue('M2', '公司名称');
  357. $sheet->setCellValue('N2', '公司分类');
  358. $sheet->setCellValue('O2', '信用代码');
  359. $sheet->setCellValue('P2', '省份');
  360. $sheet->setCellValue('Q2', '城市');
  361. $sheet->setCellValue('R2', '溯源责任人');
  362. $sheet->setCellValue('S2', '处理状态');
  363. $sheet->setCellValue('T2', '任务状态');
  364. $sheet->setCellValue('U2', '记录时间');
  365. $platform_data = [
  366. '0' => '全部',
  367. '1' => '淘宝',
  368. '2' => '京东',
  369. '3' => '拼多多',
  370. '4' => '美团',
  371. '5' => '药师帮',
  372. '6' => '1药城',
  373. '7' => '药久久',
  374. ];
  375. $processing_status_text = [
  376. '1' => '待处理',
  377. ];
  378. $status_text = [
  379. '0' => '有效',
  380. '1' => '无效',
  381. ];
  382. // 填充数据
  383. $row = 3; // 从第2行开始
  384. foreach ($data as $item) {
  385. $first_responsible_person_name = !empty($item['first_responsible_person_name']) ? implode(',', $item['first_responsible_person_name']) : '';
  386. $responsible_person_name = !empty($item['responsible_person_name']) ? implode(',', $item['responsible_person_name']) : '';
  387. $source_responsible_person_name = !empty($item['source_responsible_person_name']) ? implode(',', $item['source_responsible_person_name']) : '';
  388. $sheet->setCellValue('A' . $row, $first_responsible_person_name);
  389. $sheet->setCellValue('B' . $row, $responsible_person_name);
  390. $sheet->setCellValue('C' . $row, isset($platform_data[$item['platform']]) ? $platform_data[$item['platform']] : '');
  391. $sheet->setCellValue('D' . $row, $item['category_name']);
  392. $sheet->setCellValue('E' . $row, $item['product_name']);
  393. $sheet->setCellValue('F' . $row, $item['product_specs']);
  394. $sheet->setCellValue('G' . $row, $item['suggested_price']);
  395. $sheet->setCellValue('H' . $row, $item['online_posting_price']);
  396. $sheet->setCellValue('I' . $row, $item['online_posting_count']);
  397. $sheet->setCellValue('J' . $row, $item['continuous_listing_count']);
  398. $sheet->setCellValue('k' . $row, $item['link_url']);
  399. $sheet->setCellValue('L' . $row, $item['store_name']);
  400. $sheet->setCellValue('M' . $row, $item['company_name']);
  401. $sheet->setCellValue('N' . $row, $item['company_category_name']);
  402. $sheet->setCellValue('O' . $row, $item['social_credit_code']);
  403. $sheet->setCellValue('P' . $row, $item['province_name']);
  404. $sheet->setCellValue('Q' . $row, $item['city_name']);
  405. $sheet->setCellValue('R' . $row, $source_responsible_person_name);
  406. $sheet->setCellValue('S' . $row, isset($processing_status_text[$item['processing_status']]) ? $processing_status_text[$item['processing_status']] : '');
  407. $sheet->setCellValue('T' . $row, isset($status_text[$item['status']]) ? $status_text[$item['status']] : '');
  408. $sheet->setCellValue('U' . $row, date('Y-m-d H:i:s', $item['insert_time']));
  409. $row++;
  410. }
  411. // 生成 Excel 文件
  412. $writer = new Xlsx($spreadsheet);
  413. // 直接输出到浏览器(下载)
  414. $filename = '低价挂网商品数据' . date('YmdHis') . '.xlsx';
  415. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  416. header('Content-Disposition: attachment;filename="' . $filename . '"');
  417. header('Cache-Control: max-age=0');
  418. $writer->save('php://output');
  419. exit;
  420. }
  421. /**
  422. * 详情
  423. * @author 唐远望
  424. * @version 1.0
  425. * @date 2025-12-08
  426. */
  427. public function detail(Request $request, LowPriceGoodsModel $LowPriceGoodsModel, EmployeeModel $EmployeeModel)
  428. {
  429. $request->scene('detail')->validate();
  430. $admin_company_id = request('admin_company_id', '0');
  431. $company_id = request('access_token.company_id', '0');
  432. $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否
  433. // 接收参数
  434. $id = request('id', 0);
  435. $map = ['id' => $id];
  436. $data = $LowPriceGoodsModel->where($map)->first();
  437. if (!$data) return json_send(['code' => 'error', 'msg' => '记录不存在']);
  438. //查询第一责任人名称
  439. $first_responsible_person = explode(',', $data->first_responsible_person);
  440. $first_responsible_person_name = $EmployeeModel->whereIn('id', $first_responsible_person)->pluck('name')->toarray();
  441. $data->first_responsible_person_name = $first_responsible_person_name;
  442. //查询责任人名称
  443. $responsible_person = explode(',', $data->responsible_person);
  444. $responsible_person_name = $EmployeeModel->whereIn('id', $responsible_person)->pluck('name')->toarray();
  445. $data->responsible_person_name = $responsible_person_name;
  446. //查询来源责任人名称
  447. $source_responsible_person = explode(',', $data->source_responsible_person);
  448. $source_responsible_person_name = $EmployeeModel->whereIn('id', $source_responsible_person)->pluck('name')->toarray();
  449. $data->source_responsible_person_name = $source_responsible_person_name;
  450. // 加载模板
  451. return json_send(['code' => 'success', 'msg' => '获取成功', 'data' => $data]);
  452. }
  453. /**
  454. * 添加
  455. * @author 唐远望
  456. * @version 1.0
  457. * @date 2025-12-08
  458. *
  459. */
  460. public function add(Request $request, LowPriceGoodsModel $LowPriceGoodsModel)
  461. {
  462. $request->scene('add')->validate();
  463. $admin_company_id = request('admin_company_id', '0');
  464. $company_id = request('access_token.company_id', '0');
  465. $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否
  466. // 接收数据
  467. $all_data = request()->all();
  468. $store_scope = request('store_scope', '');
  469. $all_data['store_scope'] = $store_scope;
  470. //查询是否存在
  471. $map = ['product_name' => $all_data['product_name'], 'product_specs' => $all_data['product_specs']];
  472. $data = $LowPriceGoodsModel->where($map)->first();
  473. if ($data) return json_send(['code' => 'error', 'msg' => '记录已存在']);
  474. // 写入数据表
  475. $result = $LowPriceGoodsModel->addLowPriceGoods($all_data);
  476. // 如果操作失败
  477. if (!$result) return json_send(['code' => 'error', 'msg' => '新增失败']);
  478. // 告知结果
  479. return json_send(['code' => 'success', 'msg' => '新增成功']);
  480. }
  481. /**
  482. * 修改
  483. * @author 唐远望
  484. * @version 1.0
  485. * @date 2025-12-08
  486. *
  487. */
  488. public function edit(Request $request, LowPriceGoodsModel $LowPriceGoodsModel)
  489. {
  490. $request->scene('edit')->validate();
  491. $admin_company_id = request('admin_company_id', '0');
  492. $company_id = request('access_token.company_id', '0');
  493. $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否
  494. // 接收参数
  495. $id = request('id', 0);
  496. // 接收数据
  497. $all_data = request()->all();
  498. $store_scope = request('store_scope', '');
  499. $all_data['store_scope'] = $store_scope;
  500. //查询是否存在
  501. $map = ['product_name' => $all_data['product_name'], 'product_specs' => $all_data['product_specs']];
  502. $data = $LowPriceGoodsModel->where($map)->where('id', '!=', $id)->first();
  503. if ($data) return json_send(['code' => 'error', 'msg' => '记录已存在']);
  504. // 更新数据表
  505. $where = ['id' => $id];
  506. $result = $LowPriceGoodsModel->updateLowPriceGoods($where, $all_data);
  507. // 如果操作失败
  508. if (!$result) return json_send(['code' => 'error', 'msg' => '修改失败']);
  509. // 告知结果
  510. return json_send(['code' => 'success', 'msg' => '修改成功']);
  511. }
  512. /**
  513. * 修改状态
  514. * @author 唐远望
  515. * @version 1.0
  516. * @date 2025-12-08
  517. *
  518. */
  519. public function set_status(Request $request, LowPriceGoodsModel $LowPriceGoodsModel)
  520. {
  521. // 验证参数
  522. $request->scene('set_status')->validate();
  523. $admin_company_id = request('admin_company_id', '0');
  524. $company_id = request('access_token.company_id', '0');
  525. $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否
  526. // 接收数据
  527. $id = request('id', 0);
  528. $status = request('status', 0);
  529. // 查询用户
  530. $where = ['id' => $id];
  531. // 执行修改
  532. $result = $LowPriceGoodsModel->changeStatus($where, $status);
  533. // 提示新增失败
  534. if (!$result) return json_send(['code' => 'error', 'msg' => '设置失败']);
  535. // 告知结果
  536. return json_send(['code' => 'success', 'msg' => '设置成功']);
  537. }
  538. /**
  539. * 修改处理状态
  540. * @author 唐远望
  541. * @version 1.0
  542. * @date 2025-12-08
  543. *
  544. */
  545. public function set_processing_status(Request $request, LowPriceGoodsModel $LowPriceGoodsModel)
  546. {
  547. // 验证参数
  548. $request->scene('set_processing_status')->validate();
  549. $admin_company_id = request('admin_company_id', '0');
  550. $company_id = request('access_token.company_id', '0');
  551. $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否
  552. // 接收数据
  553. $id = request('id', 0);
  554. $processing_status = request('processing_status', 0);
  555. // 查询用户
  556. $where = ['id' => $id];
  557. // 执行修改
  558. $result = $LowPriceGoodsModel->changeProcessingStatus($where, $processing_status);
  559. // 提示新增失败
  560. if (!$result) return json_send(['code' => 'error', 'msg' => '设置失败']);
  561. // 告知结果
  562. return json_send(['code' => 'success', 'msg' => '设置成功']);
  563. }
  564. /**
  565. * 删除
  566. * @author 唐远望
  567. * @version 1.0
  568. * @date 2025-12-08
  569. *
  570. */
  571. public function delete(Request $request, LowPriceGoodsModel $LowPriceGoodsModel)
  572. {
  573. // 验证参数
  574. $request->scene('delete')->validate();
  575. $admin_company_id = request('admin_company_id', '0');
  576. $company_id = request('access_token.company_id', '0');
  577. $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否
  578. // 接收数据
  579. $id = request('id', 0);
  580. // 查询用户
  581. $where = ['id' => $id];
  582. // 执行删除
  583. $result = $LowPriceGoodsModel->deleteLowPriceGoods($where);
  584. // 提示删除失败
  585. if (!$result) return json_send(['code' => 'error', 'msg' => '删除失败']);
  586. // 告知结果
  587. return json_send(['code' => 'success', 'msg' => '删除成功']);
  588. }
  589. /**
  590. * 执行数据清洗
  591. * @author 唐远望
  592. * @version 1.0
  593. * @date 2025-12-11
  594. *
  595. */
  596. public function data_cleaning(Request $request)
  597. {
  598. // 验证参数
  599. $request->scene('data_cleaning')->validate();
  600. $admin_company_id = request('admin_company_id', '0');
  601. $company_id = request('access_token.company_id', '0');
  602. $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否
  603. $admin_id = request('access_token.uid', 0); //用户ID
  604. $is_admin = request('access_token.is_admin'); //是否管理员操作 0=是1=否
  605. $message_data = ['page' => '1', 'limit' => 50, 'admin_id' => $admin_id,'is_admin' => $is_admin];
  606. LowPriceGoodsJobs::dispatch($message_data);
  607. // LowPriceGoodsJobs::dispatchSync($message_data);
  608. // 告知结果
  609. return json_send(['code' => 'success', 'msg' => '执行成功']);
  610. }
  611. /**
  612. * 处理买药中的业务
  613. * @author 唐远望
  614. * @version 1.0
  615. * @date 2025-12-23
  616. *
  617. */
  618. public function buying_business(Request $request, LowPriceGoodsModel $LowPriceGoodsModel, LowPriceGoodsRecordModel $LowPriceGoodsRecordModel)
  619. {
  620. // 验证参数
  621. $request->scene('buying_business')->validate();
  622. $admin_company_id = request('admin_company_id', '0');
  623. $company_id = request('access_token.company_id', '0');
  624. $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否
  625. $access_token = request('access_token', '');
  626. $admin_id = $access_token['uid'];
  627. // 接收数据
  628. $all_data = request()->all();
  629. $id = request('id', 0);
  630. $where = ['id' => $id];
  631. $LowPriceGoods = $LowPriceGoodsModel->where($where)->first();
  632. if (!$LowPriceGoods) return json_send(['code' => 'error', 'msg' => '违规记录不存在']);
  633. if ($LowPriceGoods->processing_status != '1') return json_send(['code' => 'error', 'msg' => '当前状态不是待处理,流程调用错误']);
  634. if ($all_data['processing_status'] != '2') return json_send(['code' => 'error', 'msg' => '流程状态参数值错误']);
  635. // 查询是否存在流程中的记录
  636. $map = ['lowprice_product_logid' => $id, 'processing_status' => $all_data['processing_status']];
  637. $record = $LowPriceGoodsRecordModel->where($map)->first();
  638. if ($record) return json_send(['code' => 'error', 'msg' => '当前状态已存在流程中,请勿重复提交']);
  639. $record_content = [
  640. 'purchase_quantity' => $all_data['purchase_quantity'], //购买数量
  641. 'totle_amount' => $all_data['totle_amount'], //总金额
  642. 'buy_date' => $all_data['buy_date'], //购买日期
  643. 'screenshot_images' => $all_data['screenshot_images'], // 截图图片
  644. ];
  645. // 写入流程记录
  646. $insert_data = [
  647. 'lowprice_product_logid' => $id,
  648. 'admin_id' => $admin_id,
  649. 'record_content' => json_encode($record_content),
  650. 'processing_status' => $all_data['processing_status'], //处理状态1=待处理2=购买中3=已溯源4=回收凭据已上传5=已回收6=拒绝回收7=已下架8=无法处理
  651. ];
  652. DB::beginTransaction();
  653. try {
  654. $LowPriceGoodsRecordModel->addLowPriceGoodsRecord_content($insert_data);
  655. //更新违规记录状态
  656. $LowPriceGoods->processing_status = $all_data['processing_status'];
  657. $LowPriceGoods->update_time = time();
  658. $LowPriceGoods->save();
  659. DB::commit();
  660. return json_send(['code' => 'success', 'msg' => '流转成功']);
  661. // 成功处理...
  662. } catch (\Exception $e) {
  663. DB::rollBack();
  664. // 错误处理...
  665. return json_send(['code' => 'error', 'msg' => '流转失败', 'data' => $e->getMessage()]);
  666. }
  667. }
  668. /**
  669. * 处理已下架/无法处理中的业务
  670. * @author 唐远望
  671. * @version 1.0
  672. * @date 2025-12-23
  673. *
  674. */
  675. public function unprocessed_business(Request $request, LowPriceGoodsModel $LowPriceGoodsModel, LowPriceGoodsRecordModel $LowPriceGoodsRecordModel)
  676. {
  677. // 验证参数
  678. $request->scene('unprocessed_business')->validate();
  679. $admin_company_id = request('admin_company_id', '0');
  680. $company_id = request('access_token.company_id', '0');
  681. $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否
  682. $access_token = request('access_token', '');
  683. $admin_id = $access_token['uid'];
  684. // 接收数据
  685. $all_data = request()->all();
  686. $id = request('id', 0);
  687. $where = ['id' => $id];
  688. $LowPriceGoods = $LowPriceGoodsModel->where($where)->first();
  689. if (!$LowPriceGoods) return json_send(['code' => 'error', 'msg' => '违规记录不存在']);
  690. if ($LowPriceGoods->processing_status != '1') return json_send(['code' => 'error', 'msg' => '当前状态不是待处理,流程调用错误']);
  691. if (!in_array($all_data['processing_status'], [7, 8])) return json_send(['code' => 'error', 'msg' => '流程状态参数值错误']);
  692. // 查询是否存在流程中的记录
  693. $map = ['lowprice_product_logid' => $id, 'processing_status' => $all_data['processing_status']];
  694. $record = $LowPriceGoodsRecordModel->where($map)->first();
  695. if ($record) return json_send(['code' => 'error', 'msg' => '当前状态已存在流程中,请勿重复提交']);
  696. $record_content = [
  697. 'description' => $all_data['description'], //情况描述
  698. 'screenshot_images' => $all_data['screenshot_images'], // 截图图片
  699. ];
  700. // 写入流程记录
  701. $insert_data = [
  702. 'lowprice_product_logid' => $id,
  703. 'admin_id' => $admin_id,
  704. 'record_content' => json_encode($record_content),
  705. 'processing_status' => $all_data['processing_status'], //处理状态1=待处理2=购买中3=已溯源4=回收凭据已上传5=已回收6=拒绝回收7=已下架8=无法处理
  706. ];
  707. DB::beginTransaction();
  708. try {
  709. $LowPriceGoodsRecordModel->addLowPriceGoodsRecord_content($insert_data);
  710. //更新违规记录状态
  711. $LowPriceGoods->processing_status = $all_data['processing_status'];
  712. $LowPriceGoods->update_time = time();
  713. $LowPriceGoods->save();
  714. DB::commit();
  715. return json_send(['code' => 'success', 'msg' => '流转成功']);
  716. // 成功处理...
  717. } catch (\Exception $e) {
  718. DB::rollBack();
  719. // 错误处理...
  720. return json_send(['code' => 'error', 'msg' => '流转失败', 'data' => $e->getMessage()]);
  721. }
  722. }
  723. /**
  724. * 处理已溯源中的业务
  725. * @author 唐远望
  726. * @version 1.0
  727. * @date 2025-12-23
  728. *
  729. */
  730. public function trace_business(Request $request, LowPriceGoodsModel $LowPriceGoodsModel, LowPriceGoodsRecordModel $LowPriceGoodsRecordModel)
  731. {
  732. // 验证参数
  733. $request->scene('trace_business')->validate();
  734. $admin_company_id = request('admin_company_id', '0');
  735. $company_id = request('access_token.company_id', '0');
  736. $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否
  737. $access_token = request('access_token', '');
  738. $admin_id = $access_token['uid'];
  739. // 接收数据
  740. $all_data = request()->all();
  741. $id = request('id', 0);
  742. $where = ['id' => $id];
  743. $LowPriceGoods = $LowPriceGoodsModel->where($where)->first();
  744. if (!$LowPriceGoods) return json_send(['code' => 'error', 'msg' => '违规记录不存在']);
  745. if ($LowPriceGoods->processing_status != '2') return json_send(['code' => 'error', 'msg' => '当前状态不是购买中,流程调用错误']);
  746. if ($all_data['processing_status'] != '3') return json_send(['code' => 'error', 'msg' => '流程状态参数值错误']);
  747. // 查询是否存在流程中的记录
  748. $map = ['lowprice_product_logid' => $id, 'processing_status' => $all_data['processing_status']];
  749. $record = $LowPriceGoodsRecordModel->where($map)->first();
  750. if ($record) return json_send(['code' => 'error', 'msg' => '当前状态已存在流程中,请勿重复提交']);
  751. $record_content = [
  752. 'trace_company_name' => $all_data['trace_company_name'], //溯源公司名称
  753. 'trace_description' => $all_data['trace_description'], //溯源情况描述
  754. 'screenshot_images' => $all_data['screenshot_images'], // 截图图片
  755. ];
  756. // 写入流程记录
  757. $insert_data = [
  758. 'lowprice_product_logid' => $id,
  759. 'admin_id' => $admin_id,
  760. 'record_content' => json_encode($record_content),
  761. 'processing_status' => $all_data['processing_status'], //处理状态1=待处理2=购买中3=已溯源4=回收凭据已上传5=已回收6=拒绝回收7=已下架8=无法处理
  762. ];
  763. DB::beginTransaction();
  764. try {
  765. $LowPriceGoodsRecordModel->addLowPriceGoodsRecord_content($insert_data);
  766. //更新违规记录状态
  767. $LowPriceGoods->processing_status = $all_data['processing_status'];
  768. $LowPriceGoods->update_time = time();
  769. $LowPriceGoods->save();
  770. DB::commit();
  771. return json_send(['code' => 'success', 'msg' => '流转成功']);
  772. // 成功处理...
  773. } catch (\Exception $e) {
  774. DB::rollBack();
  775. // 错误处理...
  776. return json_send(['code' => 'error', 'msg' => '流转失败', 'data' => $e->getMessage()]);
  777. }
  778. }
  779. /**
  780. * 下载导入模板
  781. * @author 唐远望
  782. * @version 1.0
  783. * @date 2025-12-31
  784. *
  785. */
  786. public function download_template()
  787. {
  788. // 创建一个新的 Spreadsheet 对象
  789. $spreadsheet = new Spreadsheet();
  790. $sheet = $spreadsheet->getActiveSheet();
  791. //合并单元格
  792. $sheet->mergeCells('A1:R1');
  793. $sheet->setCellValue('A1', '低价挂网商品导入模板'); // 设置合并后的单元格内容
  794. // 获取合并后的单元格样式对象
  795. $style = $sheet->getStyle('A1');
  796. // 设置水平居中和垂直居中
  797. $style->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER)->setVertical(Alignment::VERTICAL_CENTER);
  798. // 然后设置行高以适应两行文本
  799. $sheet->getRowDimension(1)->setRowHeight(40); // 设置行高,单位是磅(point)
  800. // 设置表头
  801. $sheet->setCellValue('A2', '第一责任人');
  802. $sheet->setCellValue('B2', '责任人');
  803. $sheet->setCellValue('C2', '平台*');
  804. $sheet->setCellValue('D2', '商品分类');
  805. $sheet->setCellValue('E2', '商品名称*');
  806. $sheet->setCellValue('F2', '商品规格*');
  807. $sheet->setCellValue('G2', '监控价格*');
  808. $sheet->setCellValue('H2', '挂网价格*');
  809. $sheet->setCellValue('I2', '累计挂网次数');
  810. $sheet->setCellValue('J2', '连续挂网次数');
  811. $sheet->setCellValue('K2', '链接地址*');
  812. $sheet->setCellValue('L2', '店铺名称*');
  813. $sheet->setCellValue('M2', '公司名称*');
  814. $sheet->setCellValue('N2', '公司分类');
  815. $sheet->setCellValue('O2', '信用代码*');
  816. $sheet->setCellValue('P2', '省份*');
  817. $sheet->setCellValue('Q2', '城市*');
  818. $sheet->setCellValue('R2', '溯源责任人');
  819. // 生成 Excel 文件
  820. $writer = new Xlsx($spreadsheet);
  821. // 直接输出到浏览器(下载)
  822. $filename = '低价挂网商品导入模板.xlsx';
  823. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  824. header('Content-Disposition: attachment;filename="' . $filename . '"');
  825. header('Cache-Control: max-age=0');
  826. $writer->save('php://output');
  827. exit;
  828. }
  829. /**
  830. * 导入Excel数据
  831. * @author 唐远望
  832. * @version 1.0
  833. * @date 2025-12-31
  834. *
  835. */
  836. public function import_data(Request $request, LowPriceGoodsModel $LowPriceGoodsModel, EmployeeModel $EmployeeModel,CitysModel $CitysModel)
  837. {
  838. $request->scene('import_data')->validate();
  839. $admin_company_id = request('admin_company_id', '0');
  840. $company_id = request('access_token.company_id', '0');
  841. $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否
  842. $file = $request->file('file');
  843. // 加载Excel文件
  844. $spreadsheet = IOFactory::load($file->getPathname());
  845. $sheet = $spreadsheet->getActiveSheet();
  846. // 获取所有数据
  847. $data = $sheet->toArray();
  848. if (empty($data) || count($data) < 2) return json_send(['code' => 'error', 'msg' => '导入数据为空']);
  849. $result = $EmployeeModel->select(['id', 'name'])->get()->keyBy('name')->toarray();
  850. $platform_data = $LowPriceGoodsModel->platform_data();
  851. $city_id_data = $CitysModel->get_city_id_list();
  852. foreach ($data as $key => $item) {
  853. if ($key < 2) continue;
  854. //强制必传参数校验
  855. $this->import_data_check($item);
  856. $first_responsible_person_id = [];
  857. $first_responsible_person_name = $item[0];
  858. if ($first_responsible_person_name) {
  859. $first_responsible_person_name = explode(',', $first_responsible_person_name);
  860. foreach ($first_responsible_person_name as $k => $v) {
  861. if (isset($result[$v])) {
  862. $first_responsible_person_id[] = $result[$v]['id'];
  863. }
  864. }
  865. }
  866. $responsible_person_id = [];
  867. $responsible_person_name = $item[1];
  868. if ($responsible_person_name) {
  869. $responsible_person_name = explode(',', $responsible_person_name);
  870. foreach ($responsible_person_name as $k => $v) {
  871. if (isset($result[$v])) {
  872. $responsible_person_id[] = $result[$v]['id'];
  873. }
  874. }
  875. }
  876. $source_responsible_person_id = [];
  877. $source_responsible_person_name = $item[17];
  878. if ($source_responsible_person_name) {
  879. $source_responsible_person_name = explode(',', $source_responsible_person_name);
  880. foreach ($source_responsible_person_name as $k => $v) {
  881. if (isset($result[$v])) {
  882. $source_responsible_person_id[] = $result[$v]['id'];
  883. }
  884. }
  885. }
  886. $province_name = $item[15];
  887. if($province_name && !strpos($province_name,'省')){
  888. if(!in_array($province_name,['北京','天津','上海','重庆'])){
  889. $province_name = $province_name.'省';
  890. }
  891. }
  892. $city_name = $item[16];
  893. if($city_name && !strpos($city_name,'市')){
  894. $city_name = $city_name.'市';
  895. }
  896. $insert_product_data['first_responsible_person'] = !empty($first_responsible_person_id) ? implode(',', $first_responsible_person_id) : ''; //第一责任人ID集合
  897. $insert_product_data['responsible_person'] = !empty($responsible_person_id) ? implode(',', $responsible_person_id) : ''; //责任人ID集合
  898. $insert_product_data['platform'] = isset($platform_data[$item[2]]) ? $platform_data[$item[2]] : '0'; // 平台
  899. $insert_product_data['category_name'] = $item[3] ? $item[3] : ''; // 商品分类
  900. $insert_product_data['product_name'] = $item[4]; // 商品名称
  901. $insert_product_data['product_specs'] = $item[5]; // 商品规格
  902. $insert_product_data['suggested_price'] = $item[6]; // 监控价格
  903. $insert_product_data['online_posting_price'] = $item[7]; // 挂网价格
  904. $insert_product_data['online_posting_count'] = isset($item[8]) ? $item[8] : 1; // 累计挂网次数
  905. $insert_product_data['continuous_listing_count'] = isset($item[9]) ? $item[9] : 1; // 连续挂网次数
  906. $insert_product_data['link_url'] = $item[10]; // 链接地址
  907. $insert_product_data['store_name'] = $item[11]; // 店铺名称
  908. $insert_product_data['company_name'] = $item[12]; // 公司名称
  909. $insert_product_data['company_category_name'] = isset($item[13]) ? $item[13] : ''; // 公司分类
  910. $insert_product_data['social_credit_code'] = $item[14]; // 信用代码
  911. $insert_product_data['province_name'] = $item[15]; // 省份
  912. $insert_product_data['province_id'] = isset($city_id_data[$province_name]) ? $city_id_data[$province_name]['id'] : 0; // 省份ID
  913. $insert_product_data['city_name'] = $item[16]; // 城市
  914. $insert_product_data['city_id'] = isset($city_id_data[$city_name]) ? $city_id_data[$city_name]['id'] : 0; // 城市ID
  915. $insert_product_data['area_info'] = ''; // 详细地址
  916. $insert_product_data['source_responsible_person'] = !empty($source_responsible_person_id) ? implode(',', $source_responsible_person_id) : ''; //溯源责任人ID集合
  917. $insert_product_data['processing_status'] = 1; //处理状态1=待处理2=购买中3=已溯源4=回收凭据已上传5=已回收6=拒绝回收7=已下架8=无法处理
  918. $insert_product_data['status'] = 0; //状态0=有效=无效
  919. $insert_product_data['insert_time'] = time();
  920. $insert_product_data['source_id'] = 0;// 原始数据ID
  921. //插入数据
  922. $LowPriceGoodsModel->addLowPriceGoods($insert_product_data,true);
  923. }
  924. return json_send(['code' => 'success', 'msg' => '导入成功']);
  925. }
  926. /**
  927. * 导入Excel数据必传参数校验
  928. * @author 唐远望
  929. * @version 1.0
  930. * @date 2025-12-31
  931. *
  932. */
  933. private function import_data_check($item)
  934. {
  935. if ($item[2] == '') {
  936. return json_send(['code' => 'error', 'msg' => '平台不能为空']);
  937. }
  938. if ($item[4] == '') {
  939. return json_send(['code' => 'error', 'msg' => '商品名称不能为空']);
  940. }
  941. if ($item[5] == '') {
  942. return json_send(['code' => 'error', 'msg' => '商品规格不能为空']);
  943. }
  944. if ($item[6] == '') {
  945. return json_send(['code' => 'error', 'msg' => '监控价格不能为空']);
  946. }
  947. if ($item[7] == '') {
  948. return json_send(['code' => 'error', 'msg' => '挂网价格不能为空']);
  949. }
  950. if ($item[10] == '') {
  951. return json_send(['code' => 'error', 'msg' => '链接地址不能为空']);
  952. }
  953. if ($item[11] == '') {
  954. return json_send(['code' => 'error', 'msg' => '店铺名称不能为空']);
  955. }
  956. if ($item[12] == '') {
  957. return json_send(['code' => 'error', 'msg' => '公司名称不能为空']);
  958. }
  959. if ($item[14] == '') {
  960. return json_send(['code' => 'error', 'msg' => '信用代码不能为空']);
  961. }
  962. if ($item[15] == '') {
  963. return json_send(['code' => 'error', 'msg' => '省份不能为空']);
  964. }
  965. if ($item[16] == '') {
  966. return json_send(['code' => 'error', 'msg' => '城市不能为空']);
  967. }
  968. }
  969. }