| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- namespace app\modules\alliance\models;
- use app\models\Admin;
- use app\models\Option;
- use app\models\Order;
- use app\models\OrderDetail;
- use app\models\OrderTransit;
- use app\models\PurchaseOrder;
- use app\models\SaasCategory;
- use app\models\SaasStoreReferral;
- use app\models\Salesman;
- use app\models\SalesmanNewStore;
- use app\models\SharingReceiver;
- use app\models\Store;
- use app\models\StoreReOrder;
- use app\models\StoreShareMoney;
- use app\models\Supplier;
- use app\models\User;
- use app\models\UserShareMoney;
- use yii\base\Model;
- use yii\data\Pagination;
- use yii\db\Expression;
- class AgencyForm extends Model
- {
- public $page = 1;
- public $limit = 5;
- public $type = 0;
- public $profit_type;
- public function rules()
- {
- return [
- [['page','limit','type', 'profit_type'],'integer']
- ];
- }
- public function commonSql($type_name) {
- $saas_user_id = get_saas_user_id();
- $admin = Admin::findOne(['saas_user_id' => $saas_user_id, 'is_delete' => 0, 'type' => $type_name]);
- $sales_man_arr = Salesman::find()->where(['admin_id' => $admin->id, 'is_delete' => 0])->select("id, saas_user_id")->asArray()->all();
- $sales_man_ids = array_column($sales_man_arr, 'id');
- $store_admin_ids = array_column($sales_man_arr, 'saas_user_id');
- $query = Store::find()->where(['is_delete'=>0]);
- $store_ids = SalesmanNewStore::find()->where(['salesman_saas_id' => array_column($sales_man_ids, 'saas_user_id')])
- ->andWhere(['>', 'store_id', 0])->select('store_id')->column();
- $area_level = $admin->area_level;
- if ($admin->type === Admin::ADMIN_TYPE_DEFAULT) {
- if ($area_level == 1) {
- $query->andWhere(['province_id' => $admin->province_id, 'city_id' => $admin->city_id, 'district_id' => $admin->district_id]);
- } elseif ($area_level == 2) {
- $query->andWhere(['province_id' => $admin->province_id, 'city_id' => $admin->city_id]);
- } elseif ($area_level == 3){
- $query->andWhere(['province_id' => $admin->province_id]);
- } else {
- $query->andWhere(['admin_id' => $admin->id]);
- }
- } elseif ($admin->type === Admin::ADMIN_TYPE_BD_AGENT) {
- $query->andWhere(['OR',
- ['salesman_id' => $sales_man_ids],
- ['store_admin' => $store_admin_ids],
- ['admin_id' => $admin->id],
- ['id' => $store_ids]
- ]);
- }
- return $query;
- }
- //下级店铺
- public function lowerLevelShop(){
- $saas_user_id = get_saas_user_id();
- $type_name = Admin::ADMIN_TYPE_DEFAULT;
- if ((int)$this->type === 1) {
- $type_name = Admin::ADMIN_TYPE_BD_AGENT;
- }
- $store = $this->commonSql($type_name);
- $count = $store->count();
- $pagination = new Pagination(['totalCount' => $count, 'page' => 0, 'pageSize' => $this->page * 10]);
- /* @var Order[] $list */
- $store_list = $store->limit($pagination->limit)->offset($pagination->offset)->orderBy('created_at DESC')->asArray()->all();
- foreach($store_list as &$item){
- $item['created_at'] = date("Y-m-d",$item['created_at']);
- }
- return [
- 'code'=>0,
- 'msg'=>"SUCCESS",
- 'data'=>$store_list
- ];
- }
- //店铺订单
- public function shopOrder(){
- $saas_user_id = get_saas_user_id();
- $type_name = Admin::ADMIN_TYPE_DEFAULT;
- if ((int)$this->type === 1) {
- $type_name = Admin::ADMIN_TYPE_BD_AGENT;
- }
- $store_query = $this->commonSql($type_name);
- $store_ids = $store_query->select('id')->column();
- $query = Order::find()
- ->where(['is_delete'=>0,'store_id'=>$store_ids])->andWhere(['and',['<>', 'trade_status', '1'], ['is_pay' => 1]])->select('id, order_no, store_id, name, created_at, is_pay, pay_price, is_price, trade_status, is_sale');//->asArray()->all();
- // $query = Store::find()->where(['salesman_id'=>$sales_man_ids,'is_delete'=>0])->select('id,name,logo');//->asArray()->all();
- $query->with(['store'=>function($query){
- $query->select('id, name, logo')->asArray();
- }]);
- $count = $query->count();
- $pagination = new Pagination(['totalCount' => $count, 'page' => 0, 'pageSize' => $this->page * 10]);
- /* @var Order[] $list */
- $order_list = $query->limit($pagination->limit)->offset($pagination->offset)->orderBy('created_at DESC')->asArray()->all();
- foreach($order_list as &$o){
- $o['status'] = Order::TRADE_STATUS_TEXT[$o['trade_status']];
- if (intval($o['is_sale'])) {
- $o['status'] = "已发放";
- }
- $o['created_at'] = date("Y-m-d H:i:s",$o['created_at']);
- $o['amount'] = StoreShareMoney::find()->where(['order_id' => $o['id'], 'user_id' => $saas_user_id])->sum("commission") ?: '0.00';
- $o['goods_list'] = OrderDetail::find()->select('goods_name, pic')->andWhere(['order_id' => $o['id']])->asArray()->all();
- }
- return [
- 'code'=>0,
- 'msg'=>"SUCCESS",
- 'data'=>$order_list
- ];
- }
- //店铺续费订单
- public function storeReOrder(){
- $saas_user_id = get_saas_user_id();
- $type_name = Admin::ADMIN_TYPE_BD_AGENT;
- $admin = Admin::findOne(['saas_user_id' => $saas_user_id, 'is_delete' => 0, 'type' => $type_name]);
- $sales_man_ids = Salesman::find()->where(['admin_id'=>$admin->id,'is_delete'=>0])->select("id, saas_user_id")->asArray()->all();
- $store_ids = SalesmanNewStore::find()->where(['salesman_saas_id' => array_column($sales_man_ids, 'saas_user_id')])
- ->andWhere(['>', 'store_id', 0])->select('store_id')->column();
- $store_query = Store::find()->where(['is_delete'=>0]);
- $store_query->andWhere([
- 'or',
- ['admin_id' => $admin->id],//添加店铺时候修改的
- ['in', 'salesman_id', array_column($sales_man_ids, 'id')],//修改店铺业务员时候修改的
- ['in', 'store_admin', array_column($sales_man_ids, 'saas_user_id')],//修改店铺业务员时候修改的
- ['in', 'id', $store_ids]//业务员帮助店铺进件时候增加
- ]);
- $store_ids = $store_query->select('id')->column();
- $query = StoreReOrder::find()->where(['store_id'=>$store_ids,'is_pay'=>1])->select('id,order_no,total_price,desc,store_id,', new Expression('FROM_UNIXTIME(created_at,"%Y-%m-%d %H:%i:%s") as created_at,'));//->asArray()->all();
- $query->with(['store'=>function($query){
- $query->with(['admin'=>function($querys){
- $querys->select('name')->asArray();
- }])->select("id,name,logo,admin_id")->asArray();
- }]);
- $count = $query->count();
- $pagination = new Pagination(['totalCount' => $count, 'page' => 0, 'pageSize' => $this->page * 10]);
- $order = $query->limit($pagination->limit)->offset($pagination->offset)->orderBy('created_at DESC')->asArray()->all();
- foreach ($order as &$item) {
- $store = Store::findOne($item['store_id']);
- $item['store'] = [
- 'id' => $store->id ?? '',
- 'name' => $store->name ?? '',
- 'logo' => $store->logo ?: Option::get('web_log', $store->id, 'web', '')['value'],
- ];
- }
- return [
- 'code'=>0,
- 'msg'=>"SUCCESS",
- 'data'=>$order
- ];
- }
- public function getDataInfo() {
- try {
- $saas_user = get_saas_user();
- //店铺入驻费用返利
- $query = StoreShareMoney::find()->where(['user_id' => $saas_user->id, 'is_delete' => 0]);
- $all_query = clone $query;
- $all_commission = (float)$saas_user->share_profit ?: 0;
- //推广店铺店铺佣金
- $store_query = clone $query;
- $store_commission = (float)$store_query->andWhere(['type' => [StoreShareMoney::TYPE_AGENT, StoreShareMoney::TYPE_BD_AGENT], 'status' => StoreShareMoney::STATUS_STORE_ORDER])
- ->select('commission')->sum('commission');
- //店铺缴费
- $store_fee_query = clone $query;
- $store_fee_commission = (float)$store_fee_query->andWhere(['status' => StoreShareMoney::STATUS_STORE_SETTLED])->select('commission')
- ->sum('commission');
- //店铺区域佣金
- $store_area_query = clone $query;
- $store_area_commission = (float)$store_area_query->andWhere(['status' => StoreShareMoney::STATUS_STORE_ORDER, 'type' => StoreShareMoney::TYPE_AREA_AGENT, 'cloud_type' => 0])->select('commission')
- ->sum('commission');
- //供货商区域佣金
- $supplier_query = clone $query;
- $supplier_commission = (float)$supplier_query->andWhere(['status' => StoreShareMoney::STATUS_STORE_ORDER, 'type' => StoreShareMoney::TYPE_AREA_AGENT, 'cloud_type' => 1])->select('commission')
- ->sum('commission');
- //产品代理佣金
- $goods_agent_query = clone $query;
- $goods_agent_commission = (float)$goods_agent_query->andWhere(['type' => StoreShareMoney::TYPE_GOODS_AGENT])->select('commission')
- ->sum('commission');
- return [
- 'code' => 0,
- 'msg' => '获取成功',
- 'data' => [
- 'saas_money' => $all_commission,
- 'store_commission' => $store_commission,//推荐店铺返利佣金
- 'store_fee_commission' => $store_fee_commission,//店铺缴费佣金
- 'store_area_commission' => $store_area_commission,//店铺区域佣金
- 'supplier_commission' => $supplier_commission,//入住商区域佣金
- 'goods_agent_commission' => $goods_agent_commission//产品代理佣金
- ]
- ];
- } catch (\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- //分佣
- public function commission(){
- $saas_user = get_saas_user();
- $profit_type = (int)$this->profit_type;
- //店铺入驻费用返利
- $storeShareMoneyTable = StoreShareMoney::tableName();
- $sharingReceiverTable = SharingReceiver::tableName();
- $sql = "select * from (SELECT id, store_id, user_id, commission AS money, order_id, created_at, is_send, order_type,
- cloud_type, `type`, status, 0 AS profit_type FROM ${storeShareMoneyTable} where is_delete = 0 UNION ALL
- SELECT id, store_id, saas_id AS user_id, amount AS money, order_no AS order_id, created_at, is_pay AS is_send, 0 AS order_type,
- 0 AS cloud_type, 3 AS `type`, 1 AS status, 5 AS profit_type FROM ${sharingReceiverTable} where is_delete = 0 AND execute_type = 1
- ) AS sm where sm.user_id = " . $saas_user->id;//后面的SharingReceiver信息profit_type之前的自定义字段都随便填写的 不进入where条件就行
- // $query = StoreShareMoney::find()->where(['user_id'=>$saas_user->id,'is_delete'=>0])->select('id,
- // store_id, commission as money, order_id, created_at, is_send, order_type, cloud_type, type, status')
- // ;
- switch ($profit_type) {
- case 1:
- $sql .= " AND sm.type = " . StoreShareMoney::TYPE_AREA_AGENT . " AND cloud_type = 0 ";
- break;
- case 2:
- $sql .= " AND sm.type = " . StoreShareMoney::TYPE_AREA_AGENT . " AND cloud_type = 1 ";
- break;
- case 3:
- $sql .= " AND sm.status = " . StoreShareMoney::STATUS_STORE_SETTLED;
- break;
- case 4:
- $sql .= " AND sm.type = " . StoreShareMoney::TYPE_GOODS_AGENT;
- break;
- case 5:
- // $sql .= " AND sm.profit_type = " . $profit_type;
- break;
- default:
- $sql .= " AND sm.type in (" . implode(',', [StoreShareMoney::TYPE_AGENT, StoreShareMoney::TYPE_BD_AGENT]) . ") ";
- break;
- }
- $sql .= " ORDER BY sm.created_at DESC ";
- $count = \Yii::$app->db->createCommand($sql)->query()->count();
- $pagination = new Pagination(['totalCount' => $count, 'page' => $this->page - 1, 'pageSize' => $this->limit]);
- /* @var Order[] $list */
- $sql .= " LIMIT " . $pagination->limit . " OFFSET " . $pagination->offset;
- $data = \Yii::$app->db->createCommand($sql)->queryAll();
- foreach ($data as &$item) {
- //类型
- if ($item['profit_type'] < 5) {//分账转帐类型
- //店铺区域佣金 / 入驻商(供货商)区域佣金 / 店铺推荐返利
- if ((int)$item['type'] === StoreShareMoney::TYPE_AREA_AGENT) {
- if ((int)$item['cloud_type'] === 0) {
- $model = Order::find();
- $item['profit_type'] = 1; //店铺区域佣金
- } else {
- $model = PurchaseOrder::find();
- $item['profit_type'] = 2;//入驻商(供货商)区域佣金
- }
- $item['order'] = $model->where(['AND', ['id' => $item['order_id']],['<>', 'trade_status', '1']])
- ->select('id, order_no, total_price')->asArray()->one();
- }
- if (in_array($item['type'], [StoreShareMoney::TYPE_AGENT, StoreShareMoney::TYPE_BD_AGENT, StoreShareMoney::TYPE_AREA_AGENT])) {
- if ((int)$item['cloud_type'] === 0) {
- $model = Order::find();
- $item['profit_type'] = 1; //店铺区域佣金
- } else {
- $model = PurchaseOrder::find();
- $item['profit_type'] = 2;//入驻商(供货商)区域佣金
- }
- if (intval($item['type']) === StoreShareMoney::TYPE_AREA_AGENT) {
- if ((int)$item['cloud_type'] === 0) {
- $item['profit_type'] = 1; //店铺区域佣金
- } else {
- $item['profit_type'] = 2;//入驻商(供货商)区域佣金
- }
- } else {
- $item['order'] = $model->where(['AND', ['id' => $item['order_id']],['<>', 'trade_status', '1']])
- ->select('id, order_no, total_price')->asArray()->one();
- $item['profit_type'] = 0;
- }
- }
- //店铺缴费
- if ($item['status'] === StoreShareMoney::STATUS_STORE_SETTLED) {
- $item['order'] = StoreReOrder::find()->where(['id' => $item['order_id']])
- ->select('id, order_no, total_price')->asArray()->one();
- $item['profit_type'] = 3;
- }
- //产品代理佣金
- if ((int)$item['type'] === StoreShareMoney::TYPE_GOODS_AGENT) {
- $item['order'] = Order::find()->where(['AND', ['id' => $item['order_id']],['<>', 'trade_status', '1']])
- ->select('id, order_no, total_price')->asArray()->one();
- $item['profit_type'] = 4;
- }
- $item['order'] = !empty($item['reorder'])?$item['reorder']:$item['order'];
- $item['new_order'] = \app\plugins\scanCodePay\models\Order::findOne($item['order_id']);
- if(!$item['order']){
- $item['order'] = \app\plugins\scanCodePay\models\Order::findOne($item['order_id']);
- }
- if ((int)$item['status'] === StoreShareMoney::STATUS_STORE_ORDER) {
- if ((int)$item['order_type'] === 1) {
- $item['order'] = PurchaseOrder::find()->select('id, order_no, total_price, supplier_id')->where(['id' => $item['order_id']])
- ->asArray()->one();
- if ((int)$item['cloud_type'] === 1) {
- $supplier = Supplier::find()->select('id,supplier_name name,logo')->where(['cloud_supplier_id' => $item['order']['supplier_id']])
- ->asArray()->one();
- }
- } else {
- $OrderTransit = OrderTransit::find()->where(['order_id' => $item['order_id']])
- ->asArray()->one();
- if ((int)$item['cloud_type'] === 1) {
- $supplier = Supplier::find()->select('id,name,logo')->where(['cloud_supplier_id' => $OrderTransit['supplier_id']])
- ->asArray()->one();
- }
- }
- if (!empty($supplier)) {
- $item['store'] = $supplier;
- }
- }
- } else {
- $item['order'] = [
- 'order_no' => $item['order_id']
- ];
- $item['store'] = Store::find()->where(['id' => $item['store_id']])->select('id, name, logo')
- ->asArray()->one();
- }
- $item['created_at'] = date("Y-m-d H:i:s",$item['created_at']);
- }
- return [
- 'code'=>0,
- 'msg'=>"SUCCESS",
- 'data'=>[
- 'list' => $data,
- 'row_count' => $count,
- 'page_count' => $pagination->pageCount,
- ]
- ];
- }
- }
|