store_id; $store = Store::findOne($this->store_id); if (\Yii::$app->prod_is_dandianpu()) { $one_store_wechat_appid = Option::get('one_store_wechat_appid', 0, 'saas')['value']; $one_store_wechat_secret = Option::get('one_store_wechat_secret', 0, 'saas')['value']; $this->wechat_config = (object)[ 'app_id' => $one_store_wechat_appid, 'app_secret' => $one_store_wechat_secret ]; }elseif($store->business_model == 2){ $wechat_appid = Option::get('platform_appid', 0, 'saas')['value']; $wechat_secret = Option::get('platform_key', 0, 'saas')['value']; $this->wechat_config = (object)[ 'app_id' => $wechat_appid, 'app_secret' => $wechat_secret ]; } elseif (!\Yii::$app->isSaas()) { $this->wechat_config = WechatConfig::findOne(['store_id' => $store_id, 'type' => $type]); } else { $this->wechat_config = WechatConfig::findOne(['store_id' => $store_id, 'type' => $type]); $platform_third_appid = Option::get('platform_third_appid', 0, 'saas')['value']; $platform_third_secret = Option::get('platform_third_secret', 0, 'saas')['value']; $platform_encodingAesKey = Option::get('platform_encodingAesKey', 0, 'saas')['value']; $platform_token = Option::get('platform_token', 0, 'saas')['value']; $config = [ 'app_id' => $platform_third_appid, 'secret' => $platform_third_secret, 'token' => $platform_token, 'aes_key' => $platform_encodingAesKey ]; $openPlatform = Factory::openPlatform($config); $wechat_config = WechatConfig::findOne(['store_id' => $store_id, 'type' => $type]); if ($wechat_config->app_id) { $base_info = $openPlatform->getAuthorizer($wechat_config->app_id); $this->wechat = $openPlatform->miniProgram($wechat_config->app_id, $base_info['authorization_info']['authorizer_refresh_token']); } else { $this->wechat = null; } return; } if ($this->wechat_config) { $config = [ 'app_id' => $this->wechat_config->app_id, 'secret' => $this->wechat_config->app_secret, 'response_type' => 'array' ]; if (empty($config['app_id']) || empty($config['secret'])) { $this->wechat = null; } else { $this->wechat = Factory::miniProgram($config); } } } public function getQrcode($store_id, $scene = '', $data = null) { $save_root = \Yii::$app->basePath . '/web/temp/'; if (!is_dir($save_root)) { mkdir($save_root); file_put_contents($save_root . '.gitignore', "*\r\n!.gitignore"); } $version = cyy_version(); $save_name = sha1("v={$version}&store_id={$store_id}&type=qrcode_share_store") . '.jpg'; $pic_url = \Yii::$app->request->hostInfo . \Yii::$app->request->baseUrl . '/web/temp/' . $save_name; $wdcp_patch = false; $wdcp_patch_file = \Yii::$app->basePath . '/patch/wdcp.json'; if (file_exists($wdcp_patch_file)) { $wdcp_patch = json_decode(file_get_contents($wdcp_patch_file), true); if ($wdcp_patch && in_array(\Yii::$app->request->hostName, $wdcp_patch)) { $wdcp_patch = true; } else { $wdcp_patch = false; } } if ($wdcp_patch) { $pic_url = str_replace('http://', 'https://', $pic_url); } if (file_exists($save_root . $save_name)) { return [ 'code' => 0, 'msg' => 'success', 'data' => [ 'url'=>$pic_url . '?v=' . time() ] ]; } /** @var Factory $wechat */ $data = [ 'width' => 430, ]; $scene = "store:$store_id"; $wechat = $this->wechat; $response = $wechat->app_code->getUnlimit($scene, $data); \Yii::warning($response); // 保存小程序码到文件 if ($response instanceof \EasyWeChat\Kernel\Http\StreamResponse) { $response->saveAs($save_root, $save_name); //返回图片 return [ 'code' => 0, 'data' => [ 'url' => $pic_url ] ]; } else { //返回文字 return [ 'code' => 1, 'msg' => $response['errmsg'], ]; } } public function storeInfo(){ /** * 判断是否为管理员 * 店铺logo 店铺名称 店铺管理员 * 访客数 今昨日 * 订单数量 今昨日 * 成交金额 今昨日 * 补货通知[] * 待付款数量 待发货数量 待售后数量 待评价数量 待处理数量 **/ try { // //店铺logo 店铺名称 // $saasUser = get_saas_user(); // // 根据admin表中手机号判断当前是否为客户端管理员,后期需添加admin表中的手机号编辑 // $store_admin = Admin::find()->where(['mobile' => $saasUser->mobile, 'is_delete' => 0, 'type' => 'store'])->orderBy('id DESC')->one(); // if($store_admin){ // $store_info = Store::find()->where(['id' => $store_admin->type_id, 'is_delete' => 0]) // ->select('id, name, logo, end_time')->asArray()->one(); // }else{ // $store_info = ''; // } // // if (empty($store_info)) { // throw new \Exception("非商城管理员"); // } // // // $this->store_id = $store_info['id']; $store_info = Store::find()->where(['id' => $this->store_id, 'is_delete' => 0]) ->select('id, name, logo, end_time, business_model, kefu_id')->asArray()->one(); if (empty($store_info)) { throw new \Exception("非商城管理员"); } $mini_qr = ''; $this->initWX(); if ($this->wechat) { $page = "pages/home/home"; //20240816生成码后前端参数识别不了 从store改为store_id $scene = "store_id:{$this->store_id}"; if ($store_info['business_model'] == 2) { //平台运营 $page = 'pages/shop/shopIndex'; $scene = "store_id:{$this->store_id}"; } elseif ($store_info['business_model'] == 3) { //当面付 $page = 'pages/shop/shopDetail'; $scene = "store_id:{$this->store_id}"; } elseif ($store_info['business_model'] == 4) { //点餐 $page = 'alipay-order/orderMeal/orderMeal'; $scene = "md_id:-1,store_id:{$this->store_id}"; } $res = ShareQrcode::wxQrcode($page, $scene, 600, false, false, $store_info['id']); if ($res['code'] === 0) { $mini_qr = $res['url_path']; } } $saas_name = !empty(get_saas_user()->name) ? get_saas_user()->name : "未设置"; //店铺管理员名称 $store_info['user_name'] = $saas_name; //获取昨日凌晨时间 $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)), ]; //访客数 //今日访客 try { $today_visit = $this->getVisit($day); } catch (\Exception $e) { $today_visit = 0; } try { //昨日访客 $yes_visit = $this->getVisit($lastday); } catch (\Exception $e) { $yes_visit = 0; } //订单数 $order_query = Order::find()->where(['store_id' => $store_info['id'], 'is_delete' => 0, '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 ])->select('id, trade_status, created_at'); //成交额 $money_query = clone $order_query; //今日订单数 $order_count = $order_query->count(); //昨日订单数 $yet_order_count = $order_query->andWhere(['and', ['>', 'created_at', $yet], ['>','created_at', $td]])->count(); //成交额 $money_count = $money_query->sum('pay_price') ?: 0; //昨日成交额 $yet_money_count = $order_query->andWhere(['and', ['>','created_at',$yet], ['>','created_at',$td]])->sum('pay_price') ?: 0; //通知 $goods = Goods::find()->where(['store_id' => $store_info['id'], 'status' => 1, 'is_delete' => 0])->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' => $store_info['id'], 'is_delete' => 0, 'is_show' => 1])->andWhere(['<>', 'trade_status', '1']); //待付款 $pay_order = (clone $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 = (clone $order_query)->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(); //待售后 $refund_order = OrderRefund::find()->alias('or')->leftJoin(['o' => Order::tableName()], 'o.id=or.order_id'); $after_sale_order = $refund_order->where([ 'o.store_id' => $store_info['id'], 'or.is_delete' => Order::IS_DELETE_FALSE, 'o.is_show' => Order::IS_SHOW_TRUE, 'o.is_delete' => Order::IS_DELETE_FALSE, 'or.status' => OrderRefund::STATUS_IN ])->count(); //待评价 $commit_order = (clone $order_query)->andWhere(['is_comment'=>0,'trade_status'=>3])->count(); //待处理 $sale_order = $after_sale_order; // Todo 待售后和待处理暂时意思一样,后期优化 //总加购人数 $buy_count = (clone $order_query)->andWhere(['is_pay'=>1])->groupBy('user_id')->count(); //昨日加购人数 $yet_buy_count = (clone $order_query)->andWhere(['is_pay'=>1])->groupBy('user_id')->andWhere(['and', ['>','created_at',$yet], ['>','created_at',$td]])->count(); //未结算 $pay_order_money = (clone $order_query)->andWhere(['is_pay'=>0])->sum('pay_price'); //昨日未结算 $yet_pay_order_money = (clone $order_query)->andWhere(['is_pay'=>0])->andWhere(['and', ['>','created_at',$yet], ['>','created_at',$td]])->sum('pay_price'); $store_info['end_time'] = date('Y-m-d H:i:s', $store_info['end_time']); 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 > 0) { $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 (!empty($rules)) { foreach ($rules as $rules_index => $rules_item) { if ($rules_item === 'store_pay') { unset($rules[$rules_index]); } } $rules = array_values($rules); } $storeCloud = StoreCloud::findOne(['is_delete' => 0, 'is_enable' => 1, 'store_id' => $store_info['id']]); $is_can_distribution = !empty($storeCloud->can_distribution) ? 1 : 0;// 否具备 一键铺货选品的权限 $auth = [ 'is_store_admin' => 1,//是否是店铺管理 'is_can_distribution' => $is_can_distribution,//是否可以选品 'is_purchase' => $storeCloud,//是否可以批发 'kefu_id' => $store_info['kefu_id'] ]; //实时概况 $statistics_data = []; //成交订单数 $pay_order_query = Order::find()->where(['store_id' => $store_info['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' => $store_info['id']]) ->scalar(); //成交客单价 $statistics_data['pay_single_price'] = $statistics_data['pay_count'] > 0 ? 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' => $store_info['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'); 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, 'total' => [ 'order_num' => [//订单数 'order_count' => $order_count, 'yet_order_count' => $yet_order_count ], 'money' => [//成交额 'money_count' => $money_count, 'yet_money_count' => $yet_money_count??0 ], '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 ] ], 'mini_qr' => $mini_qr, 'rules' => $rules, 'auth' => $auth, 'statistics_data' => $statistics_data ] ]; }catch (\Exception $e){ return [ 'code'=>0, 'msg'=>$e->getMessage() ]; } } public function getYesData() { try { $this->initWX(); $store_id = $this->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; //昨日访客 try { $yes_visit = $this->getVisit($lastday); } catch (\Exception $e) { $yes_visit = 0; } //昨日订单数 $yes_order_count = Order::find()->where(['is_delete' => 0, 'store_id' => $store_id, 'is_pay' => 1])->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, 'is_pay' => 1])->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 { //基础数据 $this->initWX(); $store_id = $this->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; //昨日访客 try { $yes_visit = $this->getVisit($lastday); } catch (\Exception $e) { $yes_visit = 0; } //昨日订单数 $yes_order_count = Order::find()->where(['is_delete' => 0, 'store_id' => $store_id])->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(['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' => $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' => $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))]]) ->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' => $store_id, 'bl.is_delete' => 0]) ->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' => $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))]]) ->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' => $store_id, 'c.is_delete' => 0]) ->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' => $store_id, 'is_delete' => 0, 'is_pay' => 1]) ->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.od') ->leftJoin(['g' => Goods::tableName()], 'od.goods_id = g.id')->where(['o.store_id' => $store_id, 'o.is_delete' => 0, 'o.is_pay' => 1]) ->select(['g.name', 'g.cover_pic', new Expression('count(od.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")'), 'od.goods_id']) ->andWhere(['and', ['>', 'od.created_at', strtotime($time['begin_date'])], ['<', 'od.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 { $store_id = $this->store_id; $logo = $this->logo; $name = $this->name; $coordinate = $this->coordinate; $address = $this->address; if (\Yii::$app->request->isPost) { $store = Store::findOne($store_id); if ($logo) { $store->logo = $logo; Option::set('logo', $logo, $store_id, 'store'); Option::set('web_log', $logo, $store_id, 'web'); } if ($name) { $store->name = $name; Option::set('name', $name, $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' => $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){ //如果是模板方式 $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 { $store_id = $this->store_id; $data = [ 'begin_date' => $time['begin_date'], 'end_date' => $time['end_date'] ]; $data_arr = $this->getDateByInterval($data['begin_date'], $data['end_date']); $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 { $data_arr = []; } 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; } public function isPay($order_id){ $order = StoreReOrder::findOne($order_id); if($order->is_pay == 1){ // $store = Store::findOne($order->store_id); // $store->end_time = strtotime('+1 year'); // $store->save(); return [ 'code'=>0, 'msg'=>"支付成功" ]; } } public function storeSetting() { try { $store_id = $this->store_id; $store = Store::findOne($store_id); if (!$store) { throw new \Exception('商城信息错误'); } if (\Yii::$app->request->isPost) { $rate = $this->rate; // $is_auth_trans = $this->is_auth_trans; $cloud_is_update = $this->cloud_is_update; $store->rate = $rate; // $store->is_auth_trans = $is_auth_trans; Option::set('cloud_is_update', $cloud_is_update, $store_id, 'store'); if (!$store->save()) { throw new \Exception(json_encode($store->errors)); } return [ 'code' => 0, 'msg' => 'success' ]; } else { $cloud_is_update = Option::get('cloud_is_update', $store_id, 'store', 0)['value']; return [ 'code' => 0, 'msg' => 'success', 'data' => [ 'rate' => $store->rate ?: '0.00', // 'is_auth_trans' => $store->is_auth_trans ?: 0, 'cloud_is_update' => (int)$cloud_is_update ] ]; } } catch (\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } }