TaskController.php 2.3 KB

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