当前位置: 首页 > article >正文

PHP脚本示例

/**
     * @desc 清理产品商品无效数据
     * @param Input $input
     * php think goods -m Clear -a clearGoods --endTime='2020-01-01' -vvv
     * @return void
     * @author 陈龙
     * @date 2024-04-02 9:45
     */
    public function clearGoods(Input $input)
    {
        $options = $input->getOptions();
        $start_time = microtime(true);
        $clearTime = strtotime($options['endTime'] ?? '') ?: strtotime(date('2020-01-01'));
        $where = [
            'completetime' => ['<', $clearTime],
            'retread_time' => ['<', $clearTime]
        ];
        $data = Goods::where($where)->column('goods_spu');
        $this->output->writeln(Goods::getLastSql());
        $data = array_unique($data);
        $dataCount = count($data);
        $limit = 1000;
        $totalPage = ceil($dataCount / $limit);
        $this->output->writeln("总数据量:{$dataCount}");
        $this->output->writeln("每次查询:{$limit}");
        $this->output->writeln("总页数:{$totalPage}");
        if (empty($dataCount)) {
            $this->output->writeln('查无数据');
            return;
        }

        for ($pageNo = 1; $pageNo <= $totalPage; $pageNo++) {
            $this->output->info("第 {$pageNo} 页");
            $spus = array_slice($data, ($pageNo - 1) * $limit, $limit);
            $this->output->writeln('开始处理数据');
            $result = ClearService::instance()->dealClearGoods($spus);
            $message = $result['message'] ?? ($result['messages'] ?? '');
            $this->_showMsg($message);
            $this->output->info("第 {$pageNo} 页处理完成");
        }

        $this->output->writeln("执行时间:" . (microtime(true) - $start_time));
    }
    /**
     * @desc 消息提示抽离
     * @param array|string $message 消息内容
     * @return void
     * @author 陈龙
     * @date 2020/11/20 14:47:09
     */
    private function _showMsg($message)
    {
        if (is_array($message)) {
            foreach ($message as $key => $value) {
                $this->output->writeln("{$key}:" . (is_array($value) ? json_encode($value) : $value));
            }
        } else {
            $this->output->writeln($message);
        }
    }

    public function dealClearGoods($goods_spus)
    {
        if (empty($goods_spus)) return back(0, "SPU为空");
        //1.根据spu查出所有sku,看近90天是否有库存,有销量
        $skus_arr = DevGoodsSku::where(['goods_spu' => ['IN', $goods_spus]])->column('goods_sku');
        //有库存的skus
        $stock_break_skus = $this->checkStockBySkus($skus_arr);
        //有销量的skus
        $sale_break_skus = $this->checkSalesBySkus($skus_arr);
        $all_break_skus = sep_unique_str(array_merge($stock_break_skus, $sale_break_skus));
        //获取需要剔除的spu
        $need_break_spus = DevGoodsSku::where(['goods_sku' => ['IN', $all_break_skus]])->group('goods_spu')->column('goods_spu');
        $this->output->writeln("需要剔除的spu总数:".count($need_break_spus));
        //去除后需要更新的skus
        $need_up_spus = array_diff($goods_spus, $need_break_spus);
        $this->output->writeln("需要更新的spu总数:".count($need_up_spus));
        //开始更新数据
        $this->updateIsClear($need_up_spus,1);
        return back(1, '执行完成');
    }

http://www.kler.cn/a/559547.html

相关文章:

  • 【CSS】---- CSS 变量,实现样式和动画函数复用
  • 一种简单有效的分析qnx+android智能座舱项目中的画面闪烁的方法(8155平台)
  • vscode无法预览Markdown在线图片链接
  • 跟着李沐老师学习深度学习(十三)
  • 国产芯片汽车气压表pcba方案
  • AI学习之-阿里天池
  • React fiber架构中 优先级是如何确定的?
  • 【Bluedroid】AVRCP 连接源码分析(三)
  • 【NLP算法面经】本科双非,头条+腾讯 NLP 详细面经(★附面题整理★)
  • SOME/IP--协议英文原文讲解10
  • c++———————————————c++11
  • 小型字符级语言模型的改进方向和策略
  • Opengl常用缓冲对象功能介绍及使用示例(C++实现)
  • 嵌入式工业级显示器在环保垃圾柜设备中发挥着至关重要的作用
  • Android14 Camera框架中Jpeg流buffer大小的计算
  • 2025年第一期 | CCF ODC《开源战略动态月报》
  • AI前端开发与远程工作模式下的效率革命:ScriptEcho赋能高效协作
  • 第10篇:组件生命周期与钩子函数
  • 15-最后一个单词的长度
  • 全面汇总windows进程通信(三)