GoodsService.php 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689
  1. <?php
  2. namespace app\admin\service\goods;
  3. use app\model\Goods;
  4. use app\model\GoodsDetail;
  5. use app\model\GoodsLabel;
  6. use app\model\GoodsRunning;
  7. use app\model\GoodsSku;
  8. use app\model\SysSerial;
  9. use support\Db;
  10. use support\exception\BusinessException;
  11. use support\Redis;
  12. use support\Request;
  13. use support\Response;
  14. class GoodsService
  15. {
  16. public static function select(Request $request, $classify = "GOODS")
  17. {
  18. $page = $request->get('page');
  19. $pageSize = $request->get('pageSize');
  20. $goodsName = $request->get('goods_name', '');
  21. $categoryId = $request->get('join_goods_category_id', null);
  22. $rows = Goods::with([
  23. 'category' => function ($query) {
  24. $query->select('category_id', 'category_name');
  25. },
  26. 'running' => function ($query) {
  27. $query->select('join_running_goods_id', 'goods_running_storage');
  28. }
  29. ])->select('goods_id', 'join_goods_category_id', 'goods_status', 'goods_sales_price', 'goods_category', 'goods_name', 'goods_title', 'goods_cover', 'goods_sort', 'goods_addtimes')
  30. ->when($goodsName != '', function ($query) use ($goodsName) {
  31. $query->where(function ($q) use ($goodsName) {
  32. $q->where('goods_name', 'like', '%' . $goodsName . '%')
  33. ->OrWhere('goods_title', 'like', '%' . $goodsName . '%');
  34. });
  35. })->when($categoryId != null, function ($query) use ($categoryId) {
  36. $query->where('join_goods_category_id', $categoryId);
  37. })
  38. ->where('goods_classify', $classify)
  39. ->orderBy('goods_addtimes', 'DESC')
  40. ->forPage($page, $pageSize)
  41. ->get()
  42. ->toArray();
  43. $total = Goods::when($goodsName != '', function ($query) use ($goodsName) {
  44. $query->where(function ($q) use ($goodsName) {
  45. $q->where('goods_name', 'like', '%' . $goodsName . '%')
  46. ->OrWhere('goods_title', 'like', '%' . $goodsName . '%');
  47. });
  48. })->when($categoryId != null, function ($query) use ($categoryId) {
  49. $query->where('join_goods_category_id', $categoryId);
  50. })->where('goods_classify', $classify)->count();
  51. foreach ($rows as &$row) {
  52. $row['goods_cover'] = getenv('STORAGE_DOMAIN') . $row['goods_cover'];
  53. }
  54. return json_success('', compact('rows', 'page', 'pageSize', 'total'));
  55. }
  56. /**
  57. * @Desc 商品详情
  58. * @Author Gorden
  59. * @Date 2024/3/28 10:25
  60. *
  61. * @param $goodsId
  62. * @return Response
  63. */
  64. public static function info($goodsId)
  65. {
  66. try {
  67. // 商品主表
  68. $main = Goods::where('goods_id', $goodsId)->first();
  69. if (!empty($main)) {
  70. $main = $main->toArray();
  71. $main['goods_sku_json'] = json_decode($main['goods_sku_json'], true);
  72. $main['specList'] = [];
  73. foreach ($main['goods_sku_json'] as $key => $sku) {
  74. $main['specList'][] = [
  75. 'label' => $key,
  76. 'tags' => $sku
  77. ];
  78. }
  79. } else {
  80. $main = [];
  81. }
  82. // 详情表
  83. $detail = GoodsDetail::where('join_detail_goods_id', $goodsId)->first();
  84. if (!empty($detail)) {
  85. $detail = $detail->toArray();
  86. } else {
  87. $detail = [];
  88. }
  89. // 标签表
  90. $label = GoodsLabel::where('join_label_goods_id', $goodsId)->first();
  91. if (!empty($label)) {
  92. $label = $label->toArray();
  93. } else {
  94. $label = [];
  95. }
  96. // Running表
  97. $running = GoodsRunning::where('join_running_goods_id', $goodsId)->first();
  98. if (!empty($running)) {
  99. $running = $running->toArray();
  100. } else {
  101. $running = [];
  102. }
  103. // Sku表
  104. $skus = GoodsSku::where('join_sku_goods_id', $goodsId)->get();
  105. if (!empty($running)) {
  106. $skus = $skus->toArray();
  107. $submitList = [];
  108. foreach ($skus as $key => $sku) {
  109. $skuSpecsJson = json_decode($sku['goods_sku_specs_json'], true);
  110. $skuSpecs = '';
  111. $skuNameValue = [];
  112. $i = 1;
  113. foreach ($skuSpecsJson as $k => $item) {
  114. $skuSpecs = $skuSpecs . $item . ',';
  115. $skuNameKey = 'skuName' . $i;
  116. $skuValueKey = 'skuValue' . $i;
  117. $skuNameValue[$skuNameKey] = $k;
  118. $skuNameValue[$skuValueKey] = $item;
  119. $skuNameValue[$k] = $item;
  120. $i++;
  121. }
  122. $storage = json_decode($sku['goods_sku_storage_json'], true);
  123. $priceStorage = [
  124. 'sku' => rtrim($skuSpecs, ','),
  125. 'stock' => $storage['storage'],
  126. 'price' => $sku['goods_sku_sales_price'],
  127. ];
  128. $submitList[] = array_merge($skuNameValue, $priceStorage);
  129. }
  130. $skus['submitList'] = $submitList;
  131. } else {
  132. $skus = [];
  133. }
  134. // 合并数据
  135. $data = array_merge($main, $detail, $label, $running, ['sku' => $skus]);
  136. $data['goods_sku_json_label'] = [];
  137. $data['goods_label'] = !empty($data['goods_label']) ? explode(',', $data['goods_label']) : [];
  138. $data['goods_cover'] = getenv('STORAGE_DOMAIN') . $data['goods_cover'];
  139. if (!empty($data['goods_detail_slider_json'])) {
  140. $data['goods_detail_slider_json'] = json_decode($data['goods_detail_slider_json'], true);
  141. $slider = '';
  142. foreach ($data['goods_detail_slider_json'] as $item) {
  143. $slider .= getenv('STORAGE_DOMAIN') . $item . ',';
  144. }
  145. $data['goods_detail_slider_json'] = rtrim($slider, ',');
  146. }
  147. $data['goods_on_addtimes'] = date('Y-m-d\TH:i:s.u\Z', $data['goods_on_addtimes'] - 60 * 60 * 8);
  148. return json_success('', $data);
  149. } catch (\Exception $e) {
  150. dump($e->getTrace());
  151. return json_fail("查询错误~");
  152. }
  153. }
  154. /**
  155. * @Desc 添加商品
  156. * @Author Gorden
  157. * @Date 2024/3/11 10:20
  158. *
  159. * @param $params
  160. * @return Response
  161. */
  162. public static function insert($params): Response
  163. {
  164. Db::beginTransaction();
  165. try {
  166. $params['goods_id'] = "GD" . sprintf('%016d', SysSerial::getSerial()) . random_string(6, 'up');
  167. // 主表
  168. self::mainInsert($params);
  169. // 商品详情表
  170. self::detailInsert($params);
  171. // 商品标签表
  172. self::labelInsert($params);
  173. // 产品运行控制信息表
  174. self::goodsRunningInsert($params);
  175. // sku表
  176. self::goodsSkuSet($params, 'insert');
  177. // 待上架状态,上架时间大于当前时间
  178. if ($params['goods_status'] == 'PENDING' && strtotime($params['goods_on_addtimes']) > time()) {
  179. $redis = Redis::connection();
  180. $key = date('YmdHi', strtotime($params['goods_on_addtimes']));
  181. $redis->sAdd(Goods::LISTING_KEY_PREFIX . $key, $params['goods_id']);
  182. }
  183. Db::commit();
  184. } catch (\PDOException $e) {
  185. Db::rollBack();
  186. dump($e->getMessage());
  187. return json_fail('数据写入失败~');
  188. } catch (BusinessException $e) {
  189. Db::rollBack();
  190. dump($e->getMessage());
  191. return json_fail($e->getMessage());
  192. } catch (\Exception $e) {
  193. Db::rollBack();
  194. dump($e->getTrace());
  195. return json_fail('数据写入失败~');
  196. }
  197. return json_success('success');
  198. }
  199. public static function update($params)
  200. {
  201. Db::beginTransaction();
  202. try {
  203. // 主表
  204. self::mainUpdate($params);
  205. // 商品详情表
  206. self::detailUpdate($params);
  207. // 商品标签表
  208. self::labelUpdate($params);
  209. // 产品运行控制信息表
  210. self::goodsRunningUpdate($params);
  211. // sku表
  212. self::goodsSkuSet($params, 'update');
  213. Db::commit();
  214. } catch (BusinessException $e) {
  215. Db::rollBack();
  216. return json_fail($e->getMessage());
  217. } catch (\Exception $e) {
  218. Db::rollBack();
  219. return json_fail('数据更新失败~');
  220. }
  221. return json_success('success');
  222. }
  223. /**
  224. * @Desc 删除商品
  225. * @Author Gorden
  226. * @Date 2024/3/28 13:20
  227. *
  228. * @param $ids
  229. * @return Response
  230. */
  231. public static function delete($ids)
  232. {
  233. if (!$ids) {
  234. return json_fail("数据错误~");
  235. }
  236. if (!is_array($ids)) {
  237. $ids = [$ids];
  238. }
  239. Db::beginTransaction();
  240. try {
  241. Goods::whereIn('goods_id', $ids)->delete();
  242. GoodsDetail::whereIn('join_detail_goods_id', $ids)->delete();
  243. GoodsLabel::whereIn('join_label_goods_id', $ids)->delete();
  244. GoodsRunning::whereIn('join_running_goods_id', $ids)->delete();
  245. GoodsSku::whereIn('join_sku_goods_id', $ids)->delete();
  246. Db::commit();
  247. return json_success("商品删除成功");
  248. } catch (\Exception $e) {
  249. Db::rollBack();
  250. return json_fail("商品删除失败~");
  251. }
  252. }
  253. /**
  254. * @Desc 商品主表
  255. * @Author Gorden
  256. * @Date 2024/3/11 11:20
  257. *
  258. * @param $params
  259. * @return mixed|string
  260. * @throws BusinessException
  261. */
  262. public static function mainInsert($params)
  263. {
  264. if (!empty($params['goods_cover'])) {
  265. $params['goods_cover'] = str_replace(getenv('STORAGE_DOMAIN'), '', $params['goods_cover']);
  266. }
  267. // 如果产品是待处理状态
  268. if ($params['goods_status'] == 'PENDING') {
  269. if (strtotime($params['goods_on_addtimes']) <= time()) {
  270. $params['goods_status'] = 'ON';
  271. }
  272. }
  273. try {
  274. $model = new Goods();
  275. $model->goods_id = $params['goods_id'];
  276. $model->join_goods_category_id = $params['join_goods_category_id'] ?? 0;
  277. $model->goods_classify = $params['goods_classify'] ?? '';
  278. $model->goods_status = $params['goods_status'] ?? '';
  279. $model->goods_category = $params['goods_category'] ?? '';
  280. $model->goods_prefix = $params['goods_prefix'] ?? '';
  281. $model->goods_name = $params['goods_name'];
  282. $model->goods_market_price = $params['goods_market_price'] ?? '';
  283. $model->goods_sales_price = $params['goods_sales_price'] ?? '';
  284. $model->goods_sku_json = !empty($params['goods_sku_json_label']) ? json_encode($params['goods_sku_json_label']) : json_encode(['规格' => []]);
  285. $model->goods_attribute_json = !empty($params['goods_attribute_json']) ? $params['goods_attribute_json'] : '{}';
  286. // $model->goods_service_json = !empty($params['goods_service_json']) ? $params['goods_service_json'] : '{}';
  287. $model->goods_title = $params['goods_title'] ?? '';
  288. $model->goods_cover = $params['goods_cover'] ?? '';
  289. $model->goods_on_addtimes = $params['goods_on_addtimes'] ? strtotime($params['goods_on_addtimes']) : null;
  290. $model->goods_sort = $params['goods_sort'] ?? null;
  291. $model->goods_groupby = $params['goods_groupby'] ?? '';
  292. $model->goods_remark = $params['goods_remark'] ?? '';
  293. $model->goods_extend_json = $params['goods_extend_json'] ?? '{}';
  294. $model->goods_addtimes = time();
  295. if ($model->save()) {
  296. return $model->goods_id;
  297. }
  298. // 异常
  299. throw new BusinessException("数据写入失败~");
  300. } catch (\Exception $e) {
  301. dump($e->getMessage());
  302. throw new BusinessException("数据写入失败~");
  303. }
  304. }
  305. /**
  306. * @Desc 详情表
  307. * @Author Gorden
  308. * @Date 2024/3/11 11:19
  309. *
  310. * @param $params
  311. * @return void
  312. * @throws BusinessException
  313. */
  314. public static function detailInsert($params)
  315. {
  316. if (!empty($params['goods_detail_slider_json'])) {
  317. $params['goods_detail_slider_json'] = str_replace(getenv('STORAGE_DOMAIN'), '', $params['goods_detail_slider_json']);
  318. $params['goods_detail_slider_json'] = json_encode(explode(',', $params['goods_detail_slider_json']));
  319. }
  320. try {
  321. $model = new GoodsDetail();
  322. $model->join_detail_goods_id = $params['goods_id'];
  323. $model->goods_detail_code_json = $params['goods_detail_code_json'] ?? '{}';
  324. $model->goods_detail_slider_json = $params['goods_detail_slider_json'] ?? '{}';
  325. $model->goods_detail_specs_json = $params['goods_detail_specs_json'] ?? '{}';
  326. $model->goods_detail_content = $params['goods_detail_content'] ?? '';
  327. if (!$model->save()) {
  328. // 异常
  329. throw new BusinessException("数据写入失败~");
  330. }
  331. } catch (\Exception $e) {
  332. dump($e->getMessage());
  333. throw new BusinessException("数据写入失败~");
  334. }
  335. }
  336. /**
  337. * @Desc 标签表
  338. * @Author Gorden
  339. * @Date 2024/3/11 11:32
  340. *
  341. * @param $params
  342. * @return void
  343. * @throws BusinessException
  344. */
  345. public static function labelInsert($params)
  346. {
  347. $model = new GoodsLabel();
  348. $model->join_label_goods_id = $params['goods_id'];
  349. $model->goods_label = $params['goods_label'] ? implode(',', $params['goods_label']) : '';
  350. $model->goods_label_extend_json = !empty($params['goods_label_extend_json']) ? $params['goods_label_extend_json'] : '{}';
  351. if (!$model->save()) {
  352. // 异常
  353. throw new BusinessException('数据写入失败~');
  354. }
  355. }
  356. /**
  357. * @Desc 产品运行控制信息表
  358. * @Author Gorden
  359. * @Date 2024/3/11 11:38
  360. *
  361. * @param $params
  362. * @return void
  363. * @throws BusinessException
  364. */
  365. public static function goodsRunningInsert($params)
  366. {
  367. try {
  368. $model = new GoodsRunning();
  369. $model->join_running_goods_id = $params['goods_id'];
  370. $model->goods_running_storage = $params['goods_running_storage'] ?? '';
  371. $model->goods_running_sale = $params['goods_running_sale'] ?? '';
  372. $model->goods_running_off_type = $params['goods_running_off_type'] ?? '';
  373. $model->goods_running_off_json = $params['goods_running_off_json'] ?? '{}';
  374. if (!$model->save()) {
  375. throw new BusinessException('数据写入失败');
  376. }
  377. } catch (\Exception $e) {
  378. dump($e->getMessage());
  379. throw new BusinessException('数据写入失败');
  380. }
  381. }
  382. /**
  383. * @Desc SKU
  384. * @Author Gorden
  385. * @Date 2024/3/11 12:01
  386. *
  387. * @param $params
  388. * @return void
  389. * @throws BusinessException
  390. */
  391. public static function skuInsert($params)
  392. {
  393. $model = new GoodsSku();
  394. $model->join_sku_goods_id = $params['goods_id'];
  395. $model->goods_sku_status = $params['goods_sku_status'];
  396. $model->goods_sku_specs_json = $params['goods_sku_specs_json'];
  397. $model->goods_sku_title = $params['goods_sku_title'];
  398. $model->goods_sku_images_json = $params['goods_sku_images_json'];
  399. $model->goods_sku_content = $params['goods_sku_content'];
  400. $model->goods_sku_market_price = $params['goods_sku_market_price'];
  401. $model->goods_sku_sales_price = $params['goods_sku_sales_price'];
  402. $model->goods_sku_storage_json = $params['goods_sku_storage_json'];
  403. $model->goods_sku_service_json = $params['goods_sku_service_json'];
  404. $model->goods_sku_extend_json = $params['goods_sku_extend_json'];
  405. if (!$model->save()) {
  406. throw new BusinessException('数据写入失败~');
  407. }
  408. }
  409. /**
  410. * @Desc
  411. * @Author Gorden
  412. * @Date 2024/3/12 8:44
  413. *
  414. * @param $params
  415. * @return void
  416. * @throws BusinessException
  417. */
  418. public static function mainUpdate($params)
  419. {
  420. try {
  421. $data = self::inputFilter($params, new Goods());
  422. if (!empty($data['goods_cover'])) {
  423. $data['goods_cover'] = str_replace(getenv('STORAGE_DOMAIN'), '', $data['goods_cover']);
  424. }
  425. $data['goods_on_addtimes'] = strtotime($data['goods_on_addtimes']);
  426. $data['goods_sku_json'] = !empty($params['goods_sku_json_label']) ? json_encode($params['goods_sku_json_label']) : json_encode(['规格' => []]);
  427. $row = Goods::find($data['goods_id']);
  428. // 上架时间有变动
  429. if ($data['goods_status'] == 'PENDING' && $row->goods_on_addtimes != $data['goods_on_addtimes']) {
  430. $redis = Redis::connection();
  431. // 删掉原来的
  432. $oldKey = Goods::LISTING_KEY_PREFIX . date('YmdHi', $row->goods_on_addtimes);
  433. $redis->srem($oldKey, $data['goods_id']);
  434. // 加入新的
  435. $newKey = Goods::LISTING_KEY_PREFIX . date('YmdHi', $data['goods_on_addtimes']);
  436. $redis->sadd($newKey, $data['goods_id']);
  437. }
  438. foreach ($data as $key => $val) {
  439. $row->{$key} = $val;
  440. }
  441. $row->save();
  442. } catch (BusinessException $e) {
  443. throw new BusinessException($e->getMessage());
  444. } catch (\Exception $e) {
  445. dump($e->getTrace());
  446. throw new BusinessException('数据更新异常~1');
  447. }
  448. }
  449. /**
  450. * @Desc
  451. * @Author Gorden
  452. * @Date 2024/3/12 9:57
  453. *
  454. * @param $params
  455. * @return void
  456. * @throws BusinessException
  457. */
  458. public static function detailUpdate($params)
  459. {
  460. try {
  461. $data = self::inputFilter($params, new GoodsDetail());
  462. if (!empty($data['goods_detail_slider_json'])) {
  463. $data['goods_detail_slider_json'] = str_replace(getenv('STORAGE_DOMAIN'), '', $data['goods_detail_slider_json']);
  464. $data['goods_detail_slider_json'] = json_encode(explode(',', $data['goods_detail_slider_json']));
  465. }
  466. // 根据goods_id 查详情ID
  467. $detail = GoodsDetail::where('join_detail_goods_id', $params['goods_id'])->first();
  468. if ($detail) {
  469. self::doUpdate($detail->join_detail_goods_id, $data, new GoodsDetail());
  470. }
  471. } catch (BusinessException $e) {
  472. throw new BusinessException($e->getMessage());
  473. } catch (\Exception $e) {
  474. dump($e->getMessage());
  475. throw new BusinessException('数据更新异常~2');
  476. }
  477. }
  478. /**
  479. * @Desc
  480. * @Author Gorden
  481. * @Date 2024/3/12 9:58
  482. *
  483. * @param $params
  484. * @return void
  485. * @throws BusinessException
  486. */
  487. public static function labelUpdate($params)
  488. {
  489. try {
  490. $data = self::inputFilter($params, new GoodsLabel());
  491. // 根据goods_id 查详情ID
  492. $detail = GoodsLabel::where('join_label_goods_id', $params['goods_id'])->first();
  493. if ($detail) {
  494. self::doUpdate($detail->goods_label_id, $data, new GoodsLabel());
  495. }
  496. } catch (BusinessException $e) {
  497. throw new BusinessException($e->getMessage());
  498. } catch (\Exception $e) {
  499. throw new BusinessException('数据更新异常~3');
  500. }
  501. }
  502. /**
  503. * @Desc
  504. * @Author Gorden
  505. * @Date 2024/3/12 9:59
  506. *
  507. * @param $params
  508. * @return void
  509. * @throws BusinessException
  510. */
  511. public static function goodsRunningUpdate($params)
  512. {
  513. try {
  514. $data = self::inputFilter($params, new GoodsRunning());
  515. // 根据goods_id 查详情ID
  516. $detail = GoodsRunning::where('join_running_goods_id', $params['goods_id'])->first();
  517. if ($detail) {
  518. self::doUpdate($detail->join_running_goods_id, $data, new GoodsRunning());
  519. }
  520. } catch (BusinessException $e) {
  521. throw new BusinessException($e->getMessage());
  522. } catch (\Exception $e) {
  523. dump($e->getMessage());
  524. throw new BusinessException('数据更新异常~4');
  525. }
  526. }
  527. /**
  528. * @Desc sku 设置
  529. * @Author Gorden
  530. * @Date 2024/4/10 10:43
  531. *
  532. * @param $params
  533. * @return void
  534. * @throws BusinessException
  535. */
  536. public static function goodsSkuSet($params, $operation = 'insert')
  537. {
  538. try {
  539. Db::beginTransaction();
  540. if ($operation == 'update') {
  541. // 删掉原有的
  542. GoodsSku::where('join_sku_goods_id', $params['goods_id'])->delete();
  543. }
  544. // 入新的
  545. if (!empty($params['goods_sku_json_value'])) {
  546. foreach ($params['goods_sku_json_value'] as $item) {
  547. $skus = explode(',', $item['sku']);
  548. $skuArr = [];
  549. for ($i = 1; $i <= count($skus); $i++) {
  550. $skuName = "skuName" . $i;
  551. $key = $item[$skuName];
  552. $skuArr[$key] = $skus[$i - 1];
  553. }
  554. $model = new GoodsSku();
  555. $model->join_sku_goods_id = $params['goods_id'];
  556. $model->goods_sku_status = $params['goods_status'];
  557. $model->goods_sku_specs_json = json_encode($skuArr);
  558. $model->goods_sku_title = str_replace('-', ',', $item['sku']) . $params['goods_name'];
  559. $model->goods_sku_market_price = $params['goods_market_price'];
  560. $model->goods_sku_sales_price = $item['price'];
  561. $model->goods_sku_storage_json = json_encode(['storage' => $item['stock']]);
  562. $model->save();
  563. }
  564. }
  565. Db::commit();
  566. } catch (\Exception $e) {
  567. Db::rollBack();
  568. throw new BusinessException('数据更新异常~5');
  569. }
  570. }
  571. /**
  572. * @Desc
  573. * @Author Gorden
  574. * @Date 2024/3/12 8:45
  575. *
  576. * @param array $data
  577. * @param $model
  578. * @return array
  579. * @throws BusinessException
  580. */
  581. private static function inputFilter(array $data, $model): array
  582. {
  583. $table = config('database.connections.mysql.prefix') . $model->getTable();
  584. $allow_column = $model->getConnection()->select("desc `$table`");
  585. if (!$allow_column) {
  586. throw new BusinessException('表不存在', 2);
  587. }
  588. $columns = array_column($allow_column, 'Type', 'Field');
  589. foreach ($data as $col => $item) {
  590. if (!isset($columns[$col])) {
  591. unset($data[$col]);
  592. continue;
  593. }
  594. // 非字符串类型传空则为null
  595. if ($item === '' && strpos(strtolower($columns[$col]), 'varchar') === false && strpos(strtolower($columns[$col]), 'text') === false) {
  596. $data[$col] = null;
  597. }
  598. if (is_array($item)) {
  599. $data[$col] = implode(',', $item);
  600. }
  601. if ($item != '' && (strpos(strtolower($columns[$col]), 'varchar') || strpos(strtolower($columns[$col]), 'text'))) {
  602. $data[$col] = htmlspecialchars($item);
  603. }
  604. }
  605. if (empty($data['created_at'])) {
  606. unset($data['created_at']);
  607. }
  608. if (empty($data['updated_at'])) {
  609. unset($data['updated_at']);
  610. }
  611. return $data;
  612. }
  613. /**
  614. * @Desc 执行更新
  615. * @Author Gorden
  616. * @Date 2024/3/12 8:43
  617. *
  618. * @param $id
  619. * @param $data
  620. * @param $model
  621. * @return void
  622. */
  623. private static function doUpdate($id, $data, $model)
  624. {
  625. $row = $model->find($id);
  626. foreach ($data as $key => $val) {
  627. $row->{$key} = $val;
  628. }
  629. $row->save();
  630. }
  631. /**
  632. * @Desc 上架定时
  633. * @Author Gorden
  634. * @Date 2024/4/11 15:13
  635. *
  636. * @return void
  637. */
  638. public static function checkListing()
  639. {
  640. $key = Goods::LISTING_KEY_PREFIX . date('YmdHi');
  641. $redis = Redis::connection();
  642. if ($redis->exists($key)) {
  643. $goodsIds = $redis->sMembers($key);
  644. if (Goods::whereIn('goods_id', $goodsIds)->update(['goods_status' => 'ON'])) {
  645. $redis->del($key);
  646. }
  647. }
  648. }
  649. }