| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- namespace app\modules\client\models\v1\store;
- use app\constants\AdminPickLink;
- use app\models\Admin;
- use app\models\BrowseLog;
- use app\models\Cart;
- use app\models\Cat;
- use app\models\Goods;
- use app\models\Option;
- use app\models\Order;
- use app\models\OrderDetail;
- use app\models\OrderGoodsCancel;
- use app\models\OrderRefund;
- use app\models\Store;
- use app\models\StoreMini;
- use app\models\User;
- use app\models\UserShareLog;
- use EasyWeChat\Factory;
- use EasyWeChat\Kernel\BaseClient;
- use yii\base\Model;
- use yii\db\Expression;
- use app\modules\admin\models\MchForm;
- use app\plugins\scanCodePay\models\Order as ScanCodePayOrder;
- class StoreAdminForm extends Model
- {
- public $mch_id = 0;
- public $date_range;
- public $start_date;
- public $end_date;
- public $wechat;
- public $type;
- public $tab;
- public $logo;
- public $name;
- public $coordinate;
- public $address;
- public function rules()
- {
- return [
- [['start_date', 'end_date', 'type', 'tab'], 'integer'],
- [['mch_id'], 'safe'],
- [['logo', 'name', 'coordinate', 'address'], 'string']
- ];
- }
- public function storeInfo(){
- /**
- * 判断是否为管理员
- * 店铺logo 店铺名称 店铺管理员
- * 访客数 今昨日
- * 订单数量 今昨日
- * 成交金额 今昨日
- * 补货通知[]
- * 待付款数量 待发货数量 待售后数量 待评价数量 待处理数量
- **/
- try {
- //店铺logo 店铺名称
- // $admin = Admin::findOne(['type' => 'store', 'type_id' => get_store_id()]);
- // if ((int)$admin->saas_user_id !== (int)get_saas_user_id()) {
- // throw new \Exception("非店铺管理员");
- // }
- $store_info = Store::find()->where(['id' => get_store_id()])->select('id, name, logo')->asArray()->one();
- $saas_name = !empty(get_saas_user()->name) ? get_saas_user()->name : "未设置";
- //店铺管理员名称
- $store_info['user_name'] = $saas_name;
-
- $whereMch = [];
- if($this->mch_id){
- $whereMch = ['mch_id' => $this->mch_id];
- $mch_info = (new MchForm(['mch_id' => $this->mch_id]))->mchInfo();
- }
- //获取昨日凌晨时间
- $yet = strtotime(date('Y-m-d')) - (60 * 60 * 24);
- //获取今日凌晨时间
- $td = strtotime(date('Y-m-d'));
- //获取明日凌晨时间
- $tot = strtotime(date('Y-m-d')) + (60 * 60 * 24);
- $timestamp = time();
- $day = [
- 'begin_date' => date('Ymd', $timestamp),
- 'end_date' => date('Ymd', $timestamp),
- ];
- $lastday = [
- 'begin_date' => date('Ymd', strtotime("-1 day", $timestamp)),
- 'end_date' => date('Ymd', strtotime("-1 day", $timestamp)),
- ];
- //访客数
- //今日访客
- $today_visit = $this->getVisit($day);
- //昨日访客
- $yes_visit = $this->getVisit($lastday);
- //订单数
- $order_query = Order::find()->where(['is_delete' => 0, 'store_id' => get_store_id(), 'is_show'=>1])->andWhere(
- [
- 'trade_status' => [
- Order::ORDER_FLOW_NO_SEND,
- Order::ORDER_FLOW_SEND,
- Order::ORDER_FLOW_CONFIRM
- ],
- 'is_pay' => Order::IS_PAY_TRUE
- ]
- )->andWhere($whereMch)->select('id, trade_status, created_at');
- //成交额
- $money_query = clone $order_query;
- //今日订单数
- $order_count = (clone $order_query)->andWhere(['>', 'created_at', $td])->count();
- //昨日订单数
- $yet_order_count = (clone $order_query)->andWhere(['and', ['>', 'created_at', $yet], ['<','created_at', $td]])->count();
- //成交额
- $money_count = (float)(clone $order_query)->andWhere(['>', 'created_at', $td])->sum('pay_price');
- //昨日成交额
- $yet_money_count = (clone $order_query)->andWhere(['and', ['>','created_at',$yet], ['<','created_at',$td]])->sum('pay_price');
- //通知
- $goods = Goods::find()->where(['store_id' => get_store_id(), 'status' => 1, 'is_delete' => 0])->andWhere($whereMch)->select('id, goods_num, attr, use_attr, goods_no')->asArray()->all();
- $arr = [];
- $i = 0;
- foreach($goods as $item){
- // 判断无规格商品的总库存
- if ($item['goods_num'] * 1 < 10 && $item['use_attr'] == 0) {
- $arr[$i]['id'] = $item['id'];
- $arr[$i]['notice'] = 'id:' . $item['id'] . ' 货号:' . $item['goods_no'] . "库存不足,请及时补货";
- $i++;
- }
- // 判断有规格商品的总库存
- if ($item['use_attr'] != 0 && !empty($item['attr'])) {
- $attrs = json_decode($item['attr'],true);
- foreach($attrs as $attr){
- if ($attr['num']*1 < 10) {
- $arr[$i]['id'] = $item['id'];
- $arr[$i]['notice'] = 'id:' . $item['id'] . ' 货号:' . $attr['no'] . '规格:' . $attr['attr_list'][0]['attr_name'] . "库存不足,请及时补货";
- $i++;
- }
- }
- }
- }
- $notice = $arr;
- //订单
- $order_query = Order::find()->where(['store_id'=>get_store_id(), 'is_delete'=>0, 'is_show'=>1])->andWhere($whereMch);
- //待付款
- $pay_order = $order_query->andWhere(['OR', ['is_pay' => Order::IS_PAY_FALSE, 'trade_status' => Order::ORDER_FLOW_DEFAULT], ['AND', ['is_pay' => Order::IS_PAY_FALSE, 'pay_type' => Order::PAY_TYPE_COD], ['<>', 'trade_status', Order::ORDER_FLOW_CANCEL]]])->count();
- //待发货
- $send_order = Order::find()->where(['store_id'=>get_store_id(), 'is_delete'=>0, 'is_show'=>1])->andWhere($whereMch)->andWhere(['OR', ['trade_status' => Order::ORDER_FLOW_NO_SEND], ['is_pay' => Order::IS_PAY_FALSE, 'pay_type' => Order::PAY_TYPE_COD, 'trade_status' => Order::ORDER_FLOW_DEFAULT]])->count();
- //待售后
- // $after_sale_order = Order::find()->where(['store_id'=>get_store_id(), 'is_delete'=>0, 'is_sale'=>0, 'is_show'=>1])->andWhere(['or', ['trade_status'=>2], ['trade_status'=>3]])->count();
- $after_sale_order = OrderRefund::find()->alias('or')->leftJoin(['o' => Order::tableName()], 'or.order_id = o.id')->where(['or.store_id'=>get_store_id(), 'or.is_delete'=>0, 'o.is_delete' => 0, 'o.is_show' => 1])->andWhere($whereMch)->andWhere(['IS NOT', 'o.id', NULL])->andWhere(['or', ['or.is_agree' => 0], ['or.status'=>0]])->count();
- //待评价
- $commit_order = Order::find()->where(['store_id'=>get_store_id(), 'is_delete'=>0, 'is_sale'=>1, 'is_show'=>1])->andWhere($whereMch)->andWhere(['is_comment'=>0,'trade_status'=>3])->count();
- //待处理
- // $sale_order = Order::find()->where(['store_id'=>get_store_id(), 'is_delete'=>0, 'is_show'=>1])->andWhere(['<>', 'trade_status', '1'])->andWhere(['is_sale' => 0])->count();
- $sale_order = OrderRefund::find()->alias('or')->leftJoin(['o' => Order::tableName()], 'or.order_id = o.id')->where(['or.store_id'=>get_store_id(), 'or.is_delete'=>0, 'o.is_delete'=>0, 'o.is_show'=>1])->andWhere($whereMch)->andWhere(['IS NOT', 'o.id', NULL])->andWhere(['or', ['or.is_agree' => 0], ['or.status'=>0]])->count(); //总加购人数
- $buy_count = Order::find()->where(['store_id'=>get_store_id(), 'is_delete'=>0, 'is_sale'=>1, 'is_show'=>1])->andWhere($whereMch)->andWhere(['<>', 'trade_status', '1'])->andWhere(['is_pay'=>1])->groupBy('user_id')->count();
- //昨日加购人数
- $yet_buy_count = Order::find()->where(['store_id'=>get_store_id(), 'is_delete'=>0, 'is_sale'=>1, 'is_show'=>1])->andWhere($whereMch)->andWhere(['<>', 'trade_status', '1'])->andWhere(['is_pay'=>1])->groupBy('user_id')->andWhere(['and', ['>','created_at',$yet], ['>','created_at',$td]])->count();
- //未结算
- $pay_order_money = Order::find()->where(['store_id'=>get_store_id(), 'is_delete'=>0, 'is_sale'=>1, 'is_show'=>1])->andWhere($whereMch)->andWhere(['<>', 'trade_status', '1'])->andWhere(['is_pay'=>0])->sum('pay_price');
- //昨日未结算
- $yet_pay_order_money = Order::find()->where(['store_id'=>get_store_id(), 'is_delete'=>0, 'is_sale'=>1, 'is_show'=>1])->andWhere($whereMch)->andWhere(['<>', 'trade_status', '1'])->andWhere(['is_pay'=>0])->andWhere(['and', ['>','created_at',$yet], ['>','created_at',$td]])->sum('pay_price');
- if(!$this->mch_id){
- try {
- $payload = \Yii::$app->jwt->getPayload();
- } catch (\Exception $e) {
- return [
- 'code' => 0,
- 'msg' => $e->getMessage(),
- 'status' => 401
- ];
- }
- $store_admin_id = $payload['store_admin_id'];
- if ($store_admin_id) {
- $store_admin = \app\models\StoreAdmin::findOne($store_admin_id);
- $rules = !empty($store_admin->rules) ? explode(',', $store_admin->rules) : [];
- } else {
- $pickLink = AdminPickLink::LIST;
- if ($pickLink) {
- $rules = array_column($pickLink, 'key');
- }
- }
- }
- if($this->mch_id){
- $rules = [
- "goods",
- "order",
- "refund_order",
- "category",
- "evaluate",
- "store_data",
- "clerk",
- 'mch_store_data',
- 'mch_account_withdrawal',
- 'mch_promote_code',
- 'mch_scan_code_verification',
- 'mch_withdrawal_details'
- ];
- $today_visit = (new MchForm(['mch_id' => $this->mch_id]))->mchVisit(date('Ymd'));
- $yes_visit = (new MchForm(['mch_id' => $this->mch_id]))->mchVisit(date('Ymd', time()-86400));
- }
- //实时概况
- $statistics_data = [];
- //成交订单数
- $pay_order_query = Order::find()->where(['store_id' => get_store_id()])
- ->andWhere(['OR', ['is_pay' => 1], ['is_pay' => 0, 'pay_type' => Order::PAY_TYPE_COD]])
- ->andWhere(['<>', 'trade_status', 1]);
- $statistics_data['pay_order_count'] = (clone $pay_order_query)->select('id')->count();
- //成交金额
- $statistics_data['pay_order_price'] = (clone $pay_order_query)->select('pay_price')->sum('pay_price');
- //成交人数
- $statistics_data['pay_count'] = (clone $pay_order_query)->groupBy('user_id')
- ->select('user_id')->count();
- //成交商品数
- $statistics_data['pay_goods_count'] = OrderDetail::find()->alias('od')
- ->select('SUM(od.num)')
- ->leftJoin(['o' => Order::tableName()], 'od.order_id=o.id')
- ->where(['od.is_delete' => 0, 'o.is_delete' => 0, 'o.is_pay' => 1, 'o.store_id' => get_store_id()])
- ->scalar();
- //成交客单价
- $statistics_data['pay_single_price'] = $statistics_data['pay_count'] ?
- bcdiv($statistics_data['pay_order_price'], $statistics_data['pay_count'], 2) : 0;
- //退款订单数
- $cancel_order_query = OrderGoodsCancel::find()
- ->where([
- 'NOT IN', 'status', [OrderGoodsCancel::STATUS_REFUSE, OrderGoodsCancel::STATUS_CANCEL]
- ])->andWhere(['store_id' => get_store_id()]);
- $statistics_data['cancel_order_count'] = (clone $cancel_order_query)->select('id')->count();
- //退款金额
- $statistics_data['cancel_order_price'] = (clone $cancel_order_query)
- ->select('refund_price')->sum('refund_price');
- $scanPayOrder = ScanCodePayOrder::getMchOrder($this->mch_id,$td);
- $scanPayOrderYet = ScanCodePayOrder::getMchOrder($this->mch_id,$yet,$td);
- return [
- 'code' => 0,
- 'msg' => "获取成功",
- 'data' => [
- 'order' => [
- 'pay_order_count' => $pay_order,//待付款
- 'send_order_count' => $send_order,//待发货
- 'after_sale_order_count' => $after_sale_order,//待售后
- 'comment_order_count' => $commit_order,//待评价
- 'sale_order_count' => $sale_order //待处理
- ],
- 'notice' => $notice,
- 'store' => $store_info,
- 'mch' => $mch_info,
- 'total' => [
- 'order_num' => [//订单数
- 'order_count' => $order_count + ($scanPayOrder['order_num'] ?? 0),
- 'yet_order_count' => $yet_order_count + ($scanPayOrderYet['order_num'] ?? 0)
- ],
- 'money' => [//成交额
- 'money_count' => bcadd($money_count,($scanPayOrder['order_price'] ?? 0),2),
- 'yet_money_count' => bcadd($yet_money_count??0,($scanPayOrderYet['order_price'] ?? 0),2)
- ],
- 'visit' => [//访问量
- "today_visit_count" => $today_visit??0,
- "yet_visit_count" => $yes_visit??0
- ],
- 'browse' => [ //浏览量
- "today_see_count" => $today_visit??0,
- "yet_see_count" => $yes_visit??0
- ],
- 'buy_people' => [//加购人数
- "buy_count" => $buy_count??0,
- "yet_buy_count" => $yet_buy_count??0
- ],
- 'pay_order_money' => [//未结算
- "pay_order_money" => $pay_order_money??0,
- "yet_pay_order_money" => $yet_pay_order_money??0
- ]
- ],
- 'rules' => $rules,
- 'statistics_data' => $statistics_data
- ]
- ];
- }catch (\Exception $e){
- return [
- 'code'=>0,
- 'msg'=>$e->getMessage()
- ];
- }
- }
- public function getYesData()
- {
- try {
- $whereMch = [
- 'trade_status' => [
- Order::ORDER_FLOW_NO_SEND,
- Order::ORDER_FLOW_SEND,
- Order::ORDER_FLOW_CONFIRM
- ],
- 'is_pay' => Order::IS_PAY_TRUE
- ];
- if($this->mch_id){
- $whereMch = ['mch_id' => $this->mch_id];
- }
- $store_id = \get_store_id();
- $timestamp = time();
- $lastday = [
- 'begin_date' => date('Ymd', strtotime("-1 day", $timestamp)),
- 'end_date' => date('Ymd', (strtotime("-1 day", $timestamp))),
- ];
- $yes_start_date = mktime(0,0,0,date('m'),date('d')-1,date('Y'));
- $yes_end_date = mktime(0,0,0,date('m'),date('d'),date('Y'))-1;
- //昨日访客
- $yes_visit = $this->getVisit($lastday);
- if($this->mch_id){
- $yes_visit = (new MchForm())->mchVisit(date('Ymd', time()-86400));
- }
- //昨日订单数
- $yes_order_count = Order::find()->where(['is_delete' => 0, 'store_id' => $store_id])->andWhere($whereMch)->andWhere(['and', ['>=', 'created_at', $yes_start_date], ['<=', 'created_at', $yes_end_date]])->select('id')->count();
- //昨日订单支付金额
- $yes_order_price = Order::find()->where(['is_delete' => 0, 'store_id' => $store_id])->andWhere($whereMch)->andWhere(['and', ['>=', 'created_at', $yes_start_date], ['<=', 'created_at', $yes_end_date]])->select('total_price')->sum('total_price');
- //昨日经营情况
- $yes_data = [
- 'visit' => $yes_visit ?: 0,
- 'visit_num' => $yes_visit ?: 0,
- 'order_count' => $yes_order_count,
- 'order_price' => $yes_order_price ?: 0
- ];
- return [
- 'code' => 0,
- 'msg' => "获取成功",
- 'data' => $yes_data
- ];
- } catch (\Exception $e) {
- return [
- 'code'=>0,
- 'msg'=>$e->getMessage()
- ];
- }
- }
- public function shopData()
- {
- try {
- $whereMch = [];
- $whereMchBrowseLog = [];
- $whereMchGoods = [];
- if($this->mch_id){
- $whereMch = ['mch_id' => $this->mch_id];
- $whereMchBrowseLog = ['log_id' => Goods::find()->select('id')->where(['mch_id' => $this->mch_id])];
- $whereMchGoods = ['g.mch_id' => $this->mch_id];
- }
- //基础数据
- $store_id = get_store_id();
- $type = (int)$this->type;
- $tab = (int)$this->tab;
- $timestamp = time();
- $lastday = [
- 'begin_date' => date('Ymd', strtotime("-1 day", $timestamp)),
- 'end_date' => date('Ymd', (strtotime("-1 day", $timestamp) + (60 * 60 * 24))),
- ];
- $start_date = strtotime($this->start_date);
- $end_date = strtotime($this->end_date);
- $yes_start_date = mktime(0,0,0,date('m'),date('d')-1,date('Y'));
- $yes_end_date = mktime(0,0,0,date('m'),date('d'),date('Y'))-1;
- //昨日访客
- $yes_visit = $this->getVisit($lastday);
- //昨日订单数
- $yes_order_count = Order::find()->where(['is_delete' => 0])->andWhere(['and', ['>=', 'created_at', $yes_start_date], ['<=', 'created_at', $yes_end_date]])->select('id')->count();
- //昨日订单支付金额
- $yes_order_price = Order::find()->where(['is_delete' => 0])->andWhere(['and', ['>=', 'created_at', $yes_start_date], ['<=', 'created_at', $yes_end_date]])->select('total_price')->sum('total_price');
- //昨日经营情况
- $yes_data = [
- 'visit' => $yes_visit,
- 'order_count' => $yes_order_count,
- 'order_price' => $yes_order_price
- ];
- $time = [
- 'begin_date' => date("Ymd", $start_date ?: strtotime('-1 month')),
- 'end_date' => date("Ymd", $end_date ?: strtotime('now')),
- ];
- $table_data = [];
- //访问人数
- if ($type === 1 || ($tab === 0 && empty($type))) {
- $new_data = $this->getData($time);
- $table_data = $new_data;
- } else {
- $data_arr = $this->getDateByInterval($time['begin_date'], $time['end_date']);
- $new_data = $data_arr;
- //分享数据
- if ($type === 2) {
- foreach ($new_data as &$item) {
- $log = UserShareLog::find()->alias('usl')->leftJoin(['u' => User::tableName()], 'usl.parent_id = u.id')->where(['store_id' => get_store_id()])
- ->select([new Expression('count(usl.id) as value')])
- ->groupBy(new Expression('FROM_UNIXTIME(usl.created_at, "%Y%m%d")'))
- ->andWhere(['and', ['>', 'usl.created_at', strtotime($item['date'])], ['<', 'usl.created_at', (strtotime($item['date']) + (24*60*60))]])
- ->asArray()->one();
- $data = [];
- $data['value'] = (int)$log['value'] ?: 0;
- $item = array_merge($item, $data);
- }
- $table_data = $new_data;
- }
- if ($type === 3 || ($tab === 1 && empty($type))) {
- //商品浏览量
- foreach ($new_data as &$item) {
- $log = BrowseLog::find()->where(['store_id' => get_store_id(), 'is_delete' => 0])
- ->select([new Expression('count(id) as value')])
- ->groupBy(new Expression('FROM_UNIXTIME(created_at, "%Y%m%d")'))
- ->andWhere(['and', ['>', 'created_at', strtotime($item['date'])], ['<', 'created_at', (strtotime($item['date']) + (24*60*60))]])
- ->andWhere($whereMchBrowseLog)
- ->asArray()->one();
- $data = [];
- $data['value'] = (int)$log['value'] ?: 0;
- $item = array_merge($item, $data);
- }
- /**
- * 表格数据
- */
- $table_data = BrowseLog::find()->alias('bl')->leftJoin(['g' => Goods::tableName()], 'bl.log_id = g.id')
- ->where(['bl.store_id' => get_store_id(), 'bl.is_delete' => 0])->andWhere($whereMch)
- ->select(['g.name', 'g.cover_pic', new Expression('count(bl.id) as value'), new Expression('FROM_UNIXTIME(bl.created_at, "%Y/%m/%d") as date')])
- ->groupBy([new Expression('FROM_UNIXTIME(bl.created_at, "%Y%m%d")'), 'bl.log_id'])
- ->andWhere(['and', ['>', 'bl.created_at', strtotime($time['begin_date'])], ['<', 'bl.created_at', (strtotime($time['end_date']) + (24*60*60))]])
- ->asArray()->all();
- }
- if ($type === 4) {
- //加购人数
- foreach ($new_data as &$item) {
- $cat_log = Cart::find()->where(['store_id' => get_store_id(), 'is_delete' => 0])->andWhere($whereMch)
- ->select([new Expression('count(id) as value')])
- ->groupBy(new Expression('FROM_UNIXTIME(created_at, "%Y%m%d")'))
- ->andWhere(['and', ['>', 'created_at', strtotime($item['date'])], ['<', 'created_at', (strtotime($item['date']) + (24 * 60 * 60))]])
- ->asArray()->one();
- $data = [];
- $data['value'] = (int)$cat_log['value'] ?: 0;
- $item = array_merge($item, $data);
- }
- $table_data = Cart::find()->alias('c')->leftJoin(['g' => Goods::tableName()], 'c.goods_id = g.id')
- ->where(['c.store_id' => get_store_id(), 'c.is_delete' => 0])->andWhere($whereMchGoods)
- ->select(['g.name', 'g.cover_pic', new Expression('count(c.id) as value'), new Expression('FROM_UNIXTIME(c.created_at, "%Y/%m/%d") as date')])
- ->groupBy([new Expression('FROM_UNIXTIME(c.created_at, "%Y%m%d")'), 'c.goods_id'])
- ->andWhere(['and', ['>', 'c.created_at', strtotime($time['begin_date'])], ['<', 'c.created_at', (strtotime($time['end_date']) + (24*60*60))]])
- ->asArray()->all();
- }
- if ($type === 5 || $type === 6) {
- //支付人数
- //加购人数
- foreach ($new_data as &$item) {
- $cat_log = Order::find()->where(['store_id' => get_store_id(), 'is_delete' => 0, 'is_pay' => 1])->andWhere($whereMch)
- ->select([new Expression('sum(total_price) as price'),new Expression('count(id) as value')])
- ->groupBy([new Expression('FROM_UNIXTIME(created_at, "%Y%m%d")'), 'user_id'])
- ->andWhere(['and', ['>', 'created_at', strtotime($item['date'])], ['<', 'created_at', (strtotime($item['date']) + (24 * 60 * 60))]])
- ->asArray()->one();
- $data = [];
- if ($type === 5) {
- $data['value'] = (int)$cat_log['value'] ?: 0;
- }
- if ($type === 6) {
- $data['value'] = (float)$cat_log['price'] ?: 0;
- }
- $item = array_merge($item, $data);
- }
- $table_data = OrderDetail::find()->alias('od')->leftJoin(['o' => Order::tableName()], 'od.order_id = o.id')
- ->leftJoin(['g' => Goods::tableName()], 'od.goods_id = g.id')->where(['o.store_id' => get_store_id(), 'o.is_delete' => 0, 'o.is_pay' => 1])->andWhere($whereMchGoods)
- ->select(['g.name', 'g.cover_pic', new Expression('count(od.id) as value'), new Expression('FROM_UNIXTIME(o.created_at, "%Y/%m/%d") as date')])
- ->groupBy([new Expression('FROM_UNIXTIME(o.created_at, "%Y%m%d")'), 'od.goods_id'])
- ->andWhere(['and', ['>', 'o.created_at', strtotime($time['begin_date'])], ['<', 'o.created_at', (strtotime($time['end_date']) + (24*60*60))]])
- ->asArray()->all();
- }
- }
- return [
- 'code' => 0,
- 'msg' => '获取成功',
- 'data' => [
- 'data' => $new_data,
- 'table_data' => $table_data
- ],
- ];
- } catch (\Exception $e) {
- return [
- 'code'=>0,
- 'msg'=>$e->getMessage()
- ];
- }
- }
- //修改商城信息
- public function getStoreInfo()
- {
- $t = \Yii::$app->db->beginTransaction();
- try {
- $logo = $this->logo;
- $name = $this->name;
- $coordinate = $this->coordinate;
- $address = $this->address;
- if (\Yii::$app->request->isPost) {
- $store = Store::findOne(get_store_id());
- if ($logo) {
- $store->logo = $logo;
- Option::set('logo', $logo, get_store_id(), 'store');
- Option::set('web_log', $logo, get_store_id(), 'web');
- }
- if ($name) {
- $store->name = $name;
- Option::set('name', $name, get_store_id(), 'store');
- }
- if ($coordinate) {
- $store->coordinate = $coordinate;
- }
- if ($address) {
- $store->address = $address;
- }
- if (!$store->save()) {
- throw new \Exception(json_encode($store->errors));
- }
- $t->commit();
- return [
- 'code' => 0,
- 'msg' => "保存成功"
- ];
- } else {
- $store = Store::find()->alias('s')->where(['s.id' => get_store_id()])
- ->leftJoin(['a' => Admin::tableName()], 's.admin_id = a.id')
- ->select('s.logo, s.name, s.coordinate, s.address, a.username')
- ->asArray()->one();
- $data = [];
- $data['url'] = \Yii::$app->request->getHostInfo();
- $store = array_merge($store, $data);
- return [
- 'code' => 0,
- 'msg' => '获取成功',
- 'data' => $store
- ];
- }
- } catch (\Exception $e) {
- $t->rollBack();
- return [
- 'code'=>0,
- 'msg'=>$e->getMessage()
- ];
- }
- }
- public function getVisit($time){
- //如果是模板方式
- if(is_open_platform('wx', get_store_id())){
- //获取三方平台配置信息
- $config = [
- 'app_id' => Option::get("platform_third_appid", 0, 'saas')['value'],
- 'secret' => Option::get("platform_third_secret", 0, 'saas')['value'],
- 'token' => Option::get("platform_token", 0, 'saas')['value'],
- 'aes_key' => Option::get("platform_encodingAesKey", 0, 'saas')['value']
- ];
- //设置小程序配置
- $store_mini = StoreMini::find()->where(['id'=>get_mini_id()])->select('id, appid, authorizer_refresh_token')->one();
- if(empty($store_mini->appid) || empty($store_mini->authorizer_refresh_token)){
- return 0;
- }
- $openPlatform = Factory::openPlatform($config);
- $mini_program = $openPlatform->miniProgram($store_mini->appid, $store_mini->authorizer_refresh_token);
- $data = [
- 'begin_date' => $time['begin_date'],
- 'end_date' => $time['end_date']
- ];
- $client = new BaseClient($mini_program);
- $res = $client->httpPostJson("datacube/getweanalysisappiddailysummarytrend", $data);
- \Yii::error($time['begin_date'].'-'.$time['end_date']."今天访问数据已出炉");
- \Yii::error($res);
- return $res['list'][0]['visit_total']; //返回访问人数
- } else {
- $data = [
- 'begin_date' => $time['begin_date'],
- 'end_date' => $time['end_date']
- ];
- $mini_program = $this->wechat;
- if ($mini_program) {
- $res = $mini_program->data_cube->summaryTrend($data['begin_date'], $data['end_date']);
- return $res['list'][0]['visit_total']; //返回访问人数
- } else {
- return 0;
- }
- }
- }
- public function getData($time)
- {
- try {
- $data = [
- 'begin_date' => $time['begin_date'],
- 'end_date' => $time['end_date']
- ];
- $data_arr = $this->getDateByInterval($data['begin_date'], $data['end_date']);
- if (is_isv()) {
- //获取三方平台配置信息
- $config = [
- 'app_id' => Option::get("platform_third_appid", 0, 'saas')['value'],
- 'secret' => Option::get("platform_third_secret", 0, 'saas')['value'],
- 'token' => Option::get("platform_token", 0, 'saas')['value'],
- 'aes_key' => Option::get("platform_encodingAesKey", 0, 'saas')['value']
- ];
- //设置小程序配置
- $store_mini = StoreMini::find()->where(['id'=>get_mini_id()])->select('id, appid, authorizer_refresh_token')->one();
- if(empty($store_mini->appid) || empty($store_mini->authorizer_refresh_token)){
- return [
- 'code'=>1,
- 'msg'=>"参数配置错误"
- ];
- }
- $openPlatform = Factory::openPlatform($config);
- $mini_program = $openPlatform->miniProgram($store_mini->appid, $store_mini->authorizer_refresh_token);
- foreach ($data_arr as &$item) {
- $data = [
- 'begin_date' => date('Ymd', strtotime($item['date'])),
- 'end_date' => date('Ymd', strtotime($item['date']))
- ];
- $item['visit'] = 0;
- $client = new BaseClient($mini_program);
- $res = $client->httpPostJson("datacube/getweanalysisappiddailyvisittrend", $data);
- if (isset($res['list'][0]['visit_pv'])) {
- $item['value'] = $res['list'][0]['visit_pv'];
- }
- }
- return $data_arr;
- } else {
- $mini_program = $this->wechat;
- if ($mini_program) {
- foreach ($data_arr as &$item) {
- $res = $mini_program->data_cube->dailyVisitTrend(date('Ymd', strtotime($item['date'])), date('Ymd', strtotime($item['date'])));
- if (isset($res['list'][0]['visit_pv'])) {
- $item['value'] = $res['list'][0]['visit_pv'];
- } else {
- $item['value'] = 0;
- }
- }
- }
- }
- return $data_arr;
- } catch (\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- public function getDateByInterval(string $st, string $et, string $format = 'Y/m/d') :array
- {
- //日期格式不正确
- if (strtotime($st) > strtotime($et)) return [];
- $returnData = [];
- $i = 0;
- do {
- $temp = [];
- $tempDate = date('Y/m/d', strtotime('+' . $i . ' day', strtotime($st)));
- // $temp['name'] = date('Y-m-d', strtotime('+' . $i . ' day', strtotime($st)));
- // $temp['startDate'] = date('Y-m-d', strtotime('+' . $i . ' day', strtotime($st)));
- // $temp['endDate'] = date('Y-m-d', strtotime('+' . $i . ' day', strtotime($st)));
- $temp['date'] = date($format, strtotime('+' . $i . ' day', strtotime($st)));
- $returnData[] = $temp;
- $i++;
- } while (strtotime($tempDate) < strtotime($et));
- return $returnData;
- }
- }
|