$id, 'ftype' => $ftype, 'ref_date' => $refDate, 'start_time' => $startTime, 'end_time' => $endTime, 'pv' => (int)($pv ?? 0), 'uv' => (int)($uv ?? 0), 'stay_time' => $stayTime ?? 0, 'cart_users' => $cartUsersV ?? 0, 'fav_users' => $favUsersV ?? 0, 'share_users' => $shareUsersV ?? 0, 'pay_users' => $payUsers ?? 0, ]; $info = self::where('goods_id', $id)->where('ref_date', $refDate)->find(); if (empty($info)) { (new self)->save($insert); } else { $info->where('id', $info['id'])->update($insert); } } } private static function getPvUv($type, $startTime, $endTime) { // 访问量 $data = Db::name('visit_record')->where('visit_type', $type) ->whereBetween('create_time', [$startTime, $endTime]) ->field('sum(IF(v_type=0, 1, 0)) as pv,sum(IF(v_type=1, 1, 0)) as uv,sum(stay_time) as stay_time,visit_type_id') ->group('visit_type_id') ->select()->toArray(); return $data; } /** * 获取某天的加购用户数 * * @param $startTime * @param $endTime * @return array */ private static function getCartUsers($startTime, $endTime) { return Db::name('cart')->field('user_id') ->where('create_time', '>=', $startTime) ->where('create_time', '<', $endTime) ->where('is_delete', '=', '0') ->group('goods_id') ->column('count(distinct(user_id)) as cart_users,goods_id', 'goods_id'); } /** * 获取某天的收藏人数 * * @param $startTime * @param $endTime * @return array */ private static function getFavUsers($startTime, $endTime) { return Db::name('user_favorites')->field('user_id') ->where('target_type', 1) ->where('create_time', '>=', $startTime) ->where('create_time', '<', $endTime) ->group('target_id') ->column('count(distinct(user_id)) as fav_users,target_id', 'target_id'); } /** * 获取某天的分享人数 * * @param $startTime * @param $endTime * @return array */ private static function getShareUsers($startTime, $endTime) { return Db::name('user_share')->field('user_id') ->where('target_type', 1) ->where('create_time', '>=', $startTime) ->where('create_time', '<', $endTime) ->group('target_id') ->column('count(distinct(user_id)) as share_users,target_id', 'target_id'); } private static function getPayData($startTime, $endTime) { $data = Db::name('order')->alias('order') ->whereBetween('order.pay_time', [$startTime, $endTime]) ->where('order.is_delete', '=', 0) ->leftJoin('order_goods og', 'og.order_id=order.order_id') ->group('og.goods_id') ->column('count(distinct(og.user_id)) as pay_users,og.goods_id', 'og.goods_id'); return $data; } }