TaskController.php 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. /**
  3. * 任务
  4. */
  5. namespace app\api\controller;
  6. use app\index\model\GoodsModel;
  7. use app\index\service\Goods;
  8. use app\index\service\Grab;
  9. use app\index\service\PRedis;
  10. use think\Controller;
  11. class TaskController extends Controller
  12. {
  13. /**
  14. * 新品数据抓取
  15. */
  16. public function grabPublishGoods(){
  17. $result = Grab::instance()->grabData('nike_cn');
  18. showJson(1001, 1004, ['count'=> count($result),'result'=> $result]);
  19. }
  20. /**
  21. * 新品抓取数据处理
  22. */
  23. public function catchGrabGoods(){
  24. set_time_limit(0);
  25. $resource = input('r','nike_cn');
  26. try {
  27. $goodIds = [];
  28. $goodsList = [];
  29. $queenKey = "queens:grabs_{$resource}:goods_".date('YmdH');
  30. for($i=0; $i<50; $i++){
  31. $goodsInfo = PRedis::lpop($queenKey);
  32. $goodsInfo = $goodsInfo? json_decode($goodsInfo, true) : [];
  33. $productId = isset($goodsInfo['product_id'])? trim($goodsInfo['product_id']) : '';
  34. $cacheKey = "task:grabs_{$resource}:goods:".$productId;
  35. if($goodsInfo && !PRedis::get($cacheKey)){
  36. if(Goods::checkGoodsExists($productId)){
  37. PRedis::set($cacheKey, 1, 3600);
  38. continue;
  39. }
  40. $goodsInfo['created_at'] = date('Y-m-d H:i:s');
  41. $goodIds[] = $productId;
  42. $goodsList[] = $goodsInfo;
  43. PRedis::set($cacheKey, json_encode($goodsInfo, 256), 3600);
  44. }
  45. }
  46. // 入库
  47. if($goodsList){
  48. $res = GoodsModel::insertAll($goodsList);
  49. if(!$res){
  50. return showJson(1004, '处理抓取新品数据失败', "\n");
  51. }
  52. }
  53. $msg = "处理新品抓取数据结果,累计处理" . count($goodIds) . "个商品数据";
  54. return showJson(1005, $msg, "\n");
  55. } catch (\Exception $exception) {
  56. return showJson(1004, $exception->getMessage(), '', "\n");
  57. }
  58. }
  59. /**
  60. * 清楚缓存
  61. */
  62. public function clearGrabCache(){
  63. $resource = input('r','nike_cn');
  64. PRedis::delByKeys("grab:grabs_{$resource}:*");
  65. PRedis::delByKeys("task:grabs_{$resource}:*");
  66. return showJson(1005, '清理抓取新品数据缓存成功', "\n");
  67. }
  68. }