| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889 |
- <?php
- namespace addons\CloudStock\backend\controllers;
- use addons\Agent\common\models\Agent;
- use addons\CloudStock\common\enums\CloudStockEnum;
- use addons\CloudStock\common\logic\payment_log\PaymentLogLogic;
- use addons\CloudStock\common\models\CloudStockAgent;
- use addons\CloudStock\common\models\CloudStockAgentGoods;
- use addons\CloudStock\common\models\CloudStockBuyingOrder;
- use addons\CloudStock\common\models\CloudStockDeductionDetail;
- use addons\CloudStock\common\models\CloudStockFillOrder;
- use addons\CloudStock\common\models\CloudStockDispenseOrder;
- use addons\CloudStock\common\models\CloudStockGoods;
- use addons\CloudStock\common\models\CloudStockGoodsStockLog;
- use addons\CloudStock\common\models\CloudStockIncreaseDetail;
- use addons\CloudStock\common\models\CloudStockLevel;
- use addons\CloudStock\common\models\CloudStockImportLevelFailLog;
- use addons\CloudStock\common\models\CloudStockImportLevelLog;
- use addons\CloudStock\common\services\PaymentLogService;
- use addons\CloudStock\common\models\CloudStockPriceDifferenceOrder;
- use addons\CloudStock\common\models\CloudStockSms;
- use common\enums\AddonsEnum;
- use common\enums\DownloadEnum;
- use common\enums\StatusEnum;
- use common\enums\UserWalletEnum;
- use common\helpers\csv\CsvExportHelper;
- use common\models\common\CapitalLog;
- use common\models\common\CommissionLog;
- use common\models\common\GlobalVarMap;
- use common\models\goods\Goods;
- use common\models\user\User;
- use services\common\UserWalletService;
- use common\models\order\Order;
- use common\models\order\OrderDetail;
- use common\components\CsvExport;
- use Yii;
- /**
- * 默认控制器
- *
- * Class DefaultController
- * @package addons\CloudStock\backend\controllers
- */
- class DefaultController extends BaseController
- {
- public $enableCsrfValidation = false;
- public function actionIndex()
- {
- if (\Yii::$app->request->isAjax) {
- if (\Yii::$app->request->isGet) {
- $params = Yii::$app->request->get();
- $where[] = ['=', 'mall_id', $this->mall_id];
- $where[] = ['in', 'status', [StatusEnum::DISABLED, StatusEnum::ENABLED]];
- if (!empty($params['keyword'])) {
- $user_list = User::find()->where(['or',
- ['id' => $params['keyword']],
- ['like', 'mobile', $params['keyword']],
- ['nickname' => $params['keyword']]])->select('id')->asArray()->all();
- $user_id_arr = array_column($user_list, 'id');
- $where[] = ['user_id' => $user_id_arr];
- }
- if (!empty($params['level'])) $where[] = ['level' => $params['level']];
- if (!empty($params['start'])) $where[] = ['>=', 'created_at', strtotime($params['start'] . ' 00:00:00')];
- if (!empty($params['end'])) $where[] = ['<=', 'created_at', strtotime($params['end'] . ' 00:00:00')];
- $params['where'] = $where;
- $params['order'] = 'id desc';
- $params['with'] = ['user'];
- $page_data = CloudStockAgent::listPage($params, false);
- if (!empty($page_data['list'])) {
- $level_arr = array_column($page_data['list'], 'level');
- $parent_id_arr = [];
- $supplier_id_arr = [];
- foreach ($page_data['list'] as $val) {
- if(!in_array($val['user']['parent_id'],$parent_id_arr))$parent_id_arr[]= $val['user']['parent_id'];
- $parent_agent = CloudStockAgent::getUserParentAgent($val['user_id'], $val['level']);
- if (!empty($parent_agent)) {
- $supplier_id_arr[$val['user_id']] = $parent_agent['user_id'];
- if(!in_array($parent_agent['user_id'],$parent_id_arr))$parent_id_arr[]=$parent_agent['user_id'];
- }
- }
- $parent_arr = User::lists(['where' => [['id' => array_unique($parent_id_arr)]], 'index' => 'id', 'select' => 'id,nickname,avatar_url,mobile,parent_id']);
- $before_level_arr = array_column($page_data['list'], 'before_level');
- $level_list = CloudStockLevel::lists(['where' => [['mall_id' => $this->mall_id], ['level' => $level_arr],['status'=>[StatusEnum::DISABLED,StatusEnum::ENABLED]]], 'index' => 'level']);
- $before_level_arr_list = CloudStockLevel::lists(['where' => [['mall_id' => $this->mall_id], ['level' => $before_level_arr],['status'=>[StatusEnum::DISABLED,StatusEnum::ENABLED]]], 'index' => 'level']);
- $user_ids = array_column($page_data['list'], 'user_id');
- $cloudStockGoodsList = CloudStockGoods::lists(['where'=>[['mall_id'=>$this->mall_id],['status'=>StatusEnum::ENABLED]]]);
- $goods_ids = array_column($cloudStockGoodsList,'goods_id');
- $agent_goods_arr = CloudStockAgentGoods::lists(['where' => [['user_id' => $user_ids],['status'=>StatusEnum::ENABLED],['goods_id'=>$goods_ids]], 'select' => 'sum(num) num,user_id', 'group' => 'user_id', 'index' => 'user_id']);
- foreach ($page_data['list'] as &$item) {
- $item['level_name'] = $level_list[$item['level']]['name'] ?? '';
- $item['before_level_name'] = $before_level_arr_list[$item['before_level']]['name'] ?? '';
- $item['goods_stock'] = $agent_goods_arr[$item['user_id']]['num'] ?? 0;
- $item['parent_name'] = '平台';
- $item['parent'] = ['user_id'=>'', 'avatar_url'=>'', 'nickname'=>'平台', 'mobile'=>'',];
- $item['supplier'] = ['user_id'=>'', 'avatar_url'=>'', 'nickname'=>'平台', 'mobile'=>'',];
- if (isset($parent_arr[$item['user']['parent_id']])) {
- $item['parent']=[
- 'user_id'=>$item['user']['parent_id'],
- 'avatar_url'=>$parent_arr[$item['user']['parent_id']]['avatar_url'],
- 'nickname'=>$parent_arr[$item['user']['parent_id']]['nickname'],
- 'mobile'=>$parent_arr[$item['user']['parent_id']]['mobile'],
- ];
- $item['parent_name'] = $parent_arr[$item['user']['parent_id']]['nickname'] ? $parent_arr[$item['user']['parent_id']]['nickname'] : $item['user']['parent_id'];
- }
- $item['supplier_name'] = '平台';
- if (isset($supplier_id_arr[$item['user_id']])) {
- $supplier_id = $supplier_id_arr[$item['user_id']];
- $item['supplier_name'] = !empty($parent_arr[$supplier_id]['nickname']) ? $parent_arr[$supplier_id]['nickname'] : '供货商:' . $supplier_id;
- if(isset($parent_arr[$supplier_id])){
- $item['supplier']=[
- 'user_id'=>$supplier_id,
- 'avatar_url'=>$parent_arr[$supplier_id]['avatar_url'],
- 'nickname'=>$parent_arr[$supplier_id]['nickname'],
- 'mobile'=>$parent_arr[$supplier_id]['mobile'],
- ];
- }
- }
- }
- }
- $setting = \Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_CLOUD_STOCK, 'basic');
- $page_data['payment_is_not_in_commission'] = $setting['payment_is_not_in_commission'] ?? 0;
- $page_data['export_list'] = CloudStockAgent::exportFieldsList();
- $page_data['export_url'] = 'mall/finance/commission-log';
- return $this->success('操作成功', $page_data);
- }}
- if (\Yii::$app->request->post('flag') == 'EXPORT') {
- $post = \Yii::$app->request->post();
- $post['mall_id'] = $this->mall_id;
- $filename = '代理商列表-' . date('YmdHis') . '_' . rand(10000, 99999);
- $res = CsvExportHelper::exportDownLoadCenter($this->mall_id, $filename, DownloadEnum::TYPE_CLOUD_STOCK, CloudStockAgent::class, 'exportHandle', $post);
- if ($res === false) return $this->error('加入导出任务失败' . CsvExportHelper::getStaticError());
- return $this->success('添加导出任务成功,任务完成后请在下载中心进行下载!');
- }
- return $this->render('index', []);
- }
- public function actionEdit()
- {
- try {
- $request = Yii::$app->request;
- if ($request->isAjax) {
- if ($request->isGet) {
- $id = Yii::$app->request->get('id', '');
- $setting = \Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_CLOUD_STOCK, 'basic');
- $data = CloudStockLevel::getOne([['id' => $id], ['mall_id' => $this->mall_id], ['status' => [StatusEnum::DISABLED, StatusEnum::ENABLED]]], true);
- $configs['setting'] = $setting;
- if (!empty($data)) {
- $data['checked_condition_values'] = json_decode($data['checked_condition_values'], true);
- $data['checked_condition_keys'] = json_decode($data['checked_condition_keys'], true);
- $data['give_quota'] = json_decode($data['give_quota'], true);
- }
- return $this->success('操作成功', $data);
- }
- if ($request->isPost) {
- $params = Yii::$app->request->post();
- $res = Yii::$app->services->validate->validate($params, [
- [['level', 'user_id'], 'required'],
- ]);
- if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- $params['mall_id'] = $this->mall_id;
- $params['upgrade_status'] = CloudStockEnum::UPGRADE_STATUS_MANUAL;
- $params['upgrade_at'] = time();
- $res = CloudStockAgent::getOne([['mall_id' => $this->mall_id], ['user_id' => $params['user_id']], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]]);
- if ($res) return $this->error('该用户已是代理商');
- $res = CloudStockAgent::setData($params);
- if ($res === false) return $this->error(CloudStockAgent::getStaticError());
- // 触发云库存代理商修改权重事件
- $event = new \addons\CloudStock\common\events\user\ChangeCloudStockAgentLevelEvent($this->mall_id);
- $data = ['mall_id' => $this->mall_id,'user_id'=>$res['user_id']];
- \Yii::$app->services->events->dispatch($event, $data, $event->listeners);
- return $this->success('操作成功');
- }
- }
- } catch (\Exception $e) {
- return $this->error($e->getMessage(), []);
- }
- return $this->render('edit');
- }
- public function actionRemarksEdit()
- {
- if (\Yii::$app->request->isAjax) {
- if (\Yii::$app->request->isPost) {
- $params = \Yii::$app->request->post();
- $res = Yii::$app->services->validate->validate($params, [
- [['id'], 'required'],
- [['remarks'], 'safe']
- ]);
- if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- $params['mall_id'] = $this->mall_id;
- $res = CloudStockAgent::setData($params);
- if ($res === false) return $this->error(CloudStockAgent::getStaticError());
- return $this->success('操作成功');
- }
- }
- return $this->error();
- }
- public function actionDelete()
- {
- if (\Yii::$app->request->isAjax) {
- if (\Yii::$app->request->isPost) {
- $params = \Yii::$app->request->post();
- $res = Yii::$app->services->validate->validate($params, [
- [['id'], 'required'],
- [['id'], 'integer']
- ]);
- if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- $params['mall_id'] = $this->mall_id;
- $params['status'] = StatusEnum::DELETE;
- $res = CloudStockAgent::setData($params);
- if ($res === false) return $this->error(CloudStockAgent::getStaticError());
- return $this->success('操作成功');
- }
- }
- return $this->error();
- }
- public function actionLevelChange()
- {
- if (\Yii::$app->request->isAjax) {
- if (\Yii::$app->request->isPost) {
- $params = \Yii::$app->request->post();
- $res = Yii::$app->services->validate->validate($params, [
- [['id', 'level'], 'required'],
- [['level'], 'integer']
- ]);
- if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- $params['mall_id'] = $this->mall_id;
- $params['upgrade_status'] = CloudStockEnum::UPGRADE_STATUS_MANUAL;
- $res = CloudStockAgent::setData($params);
- if ($res === false) return $this->error(CloudStockAgent::getStaticError());
- // 触发云库存代理商修改权重事件
- $event = new \addons\CloudStock\common\events\user\ChangeCloudStockAgentLevelEvent($this->mall_id);
- $data = ['mall_id' => $this->mall_id,'user_id'=>$res['user_id']];
- \Yii::$app->services->events->dispatch($event, $data, $event->listeners);
- return $this->success('操作成功');
- }
- }
- return $this->error();
- }
- //不用验证权限
- public function actionGetLevelList()
- {
- $list = CloudStockLevel::lists(['where' => [['mall_id' => $this->mall_id], ['status' => StatusEnum::ENABLED]],'order'=>'level asc']);
- return $this->success('操作成功', $list);
- }
- //不用验证权限
- public function actionSearchUser()
- {
- if (\Yii::$app->request->isAjax) {
- $keyword = \Yii::$app->request->get('keyword', '');
- $list['list'] = User::searchUser(['keyword' => $keyword, 'mall_id' => $this->mall_id]);
- return $this->success('操作成功', $list);
- }
- return $this->error();
- }
- public function actionStock()
- {
- if (\Yii::$app->request->isAjax) {
- if (\Yii::$app->request->isPost) {
- $data = \Yii::$app->request->post();
- $title = '代理库存';
- $filename = $title. '-' . date('YmdHis').'_'.rand(10000,99999);
- $data['mall_id'] = $this->mall_id;
- $res = CsvExportHelper::exportDownLoadCenter($this->mall_id,$filename,DownloadEnum::TYPE_CLOUD_STOCK,CloudStockAgent::class,'exportOrder',$data);
- if ($res === false) return $this->error('加入导出任务失败'.CsvExportHelper::getStaticError());
- return $this->success('添加导出任务成功,任务完成后请在下载中心进行下载!');
- }else{
- $params = Yii::$app->request->get();
- $where[] = ['=', 'mall_id', $this->mall_id];
- $where[] = ['in', 'status', [StatusEnum::DISABLED, StatusEnum::ENABLED]];
- if (!empty($params['keyword'])) {
- $user_list = User::find()->where(['or',
- ['id' => $params['keyword']],
- ['like', 'mobile', $params['keyword']],
- ['like', 'nickname', $params['keyword']]])->select('id')->asArray()->all();
- $user_id_arr = array_column($user_list, 'id');
- $where[] = ['user_id' => $user_id_arr];
- }
- if (!empty($params['level'])) $where[] = ['level' => $params['level']];
- if (!empty($params['start'])) $where[] = ['>=', 'created_at', strtotime($params['start'] . ' 00:00:00')];
- if (!empty($params['end'])) $where[] = ['<=', 'created_at', strtotime($params['end'] . ' 00:00:00')];
- $params['order'] = 'stock desc';
- if(!empty($params['sort_column'])&&!empty($params['sort_order'])){
- $sort_order = $params['sort_order']=='ascending'?'asc':'desc';
- $params['order'] = $params['sort_column'].' '.$sort_order;
- }
- $params['where'] = $where;
- $params['with'] = 'user';
- $page_data = CloudStockAgent::listPage($params, false);
- if (!empty($page_data['list'])) {
- $level_arr = array_column($page_data['list'], 'level');
- $user_ids = array_column($page_data['list'], 'user_id');
- $level_list = CloudStockLevel::lists(['where' => [['mall_id' => $this->mall_id], ['level' => $level_arr], ['status' => StatusEnum::ENABLED]], 'index' => 'level']);
- $cloudStockGoodsList = CloudStockGoods::lists(['where'=>[['mall_id'=>$this->mall_id],['status'=>StatusEnum::ENABLED]]]);
- $goods_ids = array_column($cloudStockGoodsList,'goods_id');
- $agent_goods_list = CloudStockAgentGoods::lists(['where' => [['user_id' => $user_ids],['goods_id'=>$goods_ids],['status'=>StatusEnum::ENABLED]], 'select' => 'sum(num) num ,user_id', 'group' => 'user_id', 'index' => 'user_id']);
- foreach ($page_data['list'] as &$item) {
- $item['level_name'] = $level_list[$item['level']]['name'] ?? '';
- $item['total_stock_num'] = 0;
- if (isset($agent_goods_list[$item['user_id']])) $item['total_stock_num'] = $agent_goods_list[$item['user_id']]['num'];
- }
- }
- $page_data['export_list'] = CloudStockAgent::fieldsLists();
- return $this->success('操作成功', $page_data);
- }
- }
- return $this->render('stock');
- }
- /**
- * 导入日志记录
- * @return mixed|void
- */
- public function actionGetImportLevelLog()
- {
- $params = \Yii::$app->request->get();
- $params['where'] = [
- ['mall_id'=>$this->mall_id]
- ];
- $params['order'] = 'id desc';
- $data = CloudStockImportLevelLog::listPage($params, false, true);
- if (!empty($data['list'])) {
- foreach ($data['list'] as &$v) {
- $v['url'] = '';
- if ($v['fail_counts']) $v['url'] = \Yii::$app->urlManager->createUrl(['cloud-stock/default/export-level-fail', 'log_id' => $v['id']]);
- }
- }
- return $this->success('操作成功', $data);
- }
- /**
- * 导出失败日志
- */
- public function actionExportLevelFail()
- {
- CloudStockImportLevelFailLog::exportFailLog(\Yii::$app->request->get());
- }
- /**
- * 会员批量导入模板下载
- */
- public function actionImportLevelModel()
- {
- $csv = new CsvExport();
- $file_name = '批量导入代理等级模板-' . date('YmdHis', time());
- $head_list = array_column(CloudStockAgent::$head_list, 'field_name');
- return $csv->export([], $head_list, $file_name);
- }
- /**
- * 批量导入等级
- * @return mixed|string|void
- */
- public function actionImportLevel()
- {
- set_time_limit(0);
- if (\Yii::$app->request->isAjax) {
- $params = \Yii::$app->request->post();
- $res = Yii::$app->services->validate->validate($params, [
- [['current_num'], 'required'],
- [['file'], 'file', 'extensions' => ['csv']],
- [['file_path'], 'string'],
- [['sync'], 'safe'],
- ]);
- if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- $params['mall_id'] = $this->mall_id;
- if(!empty($params['sync'])){
- $res = CloudStockAgent::importLevelSync($params);
- }else{
- $res = CloudStockAgent::importLevel($params);
- }
- if (empty($res['fail_counts'])) return $this->success('操作成功', $res);
- if (!empty($res['fail_counts'])) return $this->error('导入失败'.$res['fail_counts'].'条');
- return $this->error(CloudStockAgent::getStaticError());
- } else {
- return $this->render($this->action->id);
- }
- }
- public function actionStockLog()
- {
- if (\Yii::$app->request->isAjax) {
- if (\Yii::$app->request->isPost) {
- $data = \Yii::$app->request->post();
- if ($data['log_type'] == 'add') {
- $class = CloudStockIncreaseDetail::class;
- $title = '增加库存明细列表';
- } else {
- $class = CloudStockDeductionDetail::class;
- $title = '扣减库存明细列表';
- }
- $filename = $title. '-' . date('YmdHis').'_'.rand(10000,99999);
- $data['mall_id'] = $this->mall_id;
- $res = CsvExportHelper::exportDownLoadCenter($this->mall_id,$filename,DownloadEnum::TYPE_CLOUD_STOCK,$class,'exportOrder',$data);
- if ($res === false) return $this->error('加入导出任务失败'.CsvExportHelper::getStaticError());
- return $this->success('添加导出任务成功,任务完成后请在下载中心进行下载!');
- }else{
- $params = Yii::$app->request->get();
- $where[] = ['=', 'mall_id', $this->mall_id];
- $where[] = ['=', 'status', StatusEnum::ENABLED];
- if (!empty($params['keyword'])) {
- $user_list = User::find()->where(['id' => $params['keyword']])->select('id')->asArray()->all();
- $user_id_arr = array_column($user_list, 'id');
- $where[] = ['user_id' => $user_id_arr];
- } else {
- if ($params['keyword'] != '') {
- $where[] = ['user_id' => 0];
- }
- }
- if (isset($params['mobile']) && $params['mobile'] !== '') {
- $user_id_arr = User::find()
- ->where([
- 'mall_id' => $this->mall_id,
- 'status' => StatusEnum::ENABLED
- ])
- ->andWhere(['like', 'mobile', $params['mobile']])
- ->select('id')
- ->column();
- $where[] = ['user_id' => $user_id_arr];
- }
- if (!empty($params['goods_name'])) {
- $goods_list = Goods::find()->where([
- 'like', 'goods_name', $params['goods_name']])->select('id')->asArray()->all();
- $goods_list_arr = array_column($goods_list, 'id');
- $where[] = ['goods_id' => $goods_list_arr];
- }
- if (!empty($params['order_id'])) $where[] = ['order_id' => $params['order_id']];
- if(!empty($params['order_no'])){
- $buying_order_list = CloudStockBuyingOrder::find()
- ->alias('c')
- ->leftJoin(['order'=>Order::tableName()],'order.id = c.order_id')
- ->where(['order.order_no'=>$params['order_no']])
- ->select('c.id,c.order_id')->all();
- $buying_order_ids = array_column($buying_order_list,'id');
- $order_ids = array_column($buying_order_list,'order_id');
- $fill_order_ids = CloudStockFillOrder::find()->where(['order_no'=>$params['order_no']])->select('id')->column();
- $order_ids = array_merge($buying_order_ids,$order_ids,$fill_order_ids);
- $where[] = ['order_id' => $order_ids];
- }
- if (!empty($params['changes_type'])) $where[] = ['changes_type' => $params['changes_type']];
- if (!empty($params['start'])) $where[] = ['>=', 'created_at', strtotime($params['start'] . ' 00:00:00')];
- if (!empty($params['end'])) $where[] = ['<=', 'created_at', strtotime($params['end'] . ' 00:00:00')];
- $params['order'] = 'id desc';
- $params['with'] = ['goods', 'user'];
- $params['where'] = $where;
- if ($params['log_type'] == 'add') {
- $page_data = CloudStockIncreaseDetail::listPage($params, false);
- $page_data['export_list'] = CloudStockIncreaseDetail::fieldsLists();
- } else {
- $page_data = CloudStockDeductionDetail::listPage($params, false);
- $page_data['export_list'] = CloudStockDeductionDetail::fieldsLists();
- }
- if (!empty($page_data['list'])) {
- foreach ($page_data['list'] as &$item) {
- if (isset($item['user']['id'])) {
- $item['agent_user_id'] = $item['user']['id'];
- $item['agent_user_avatar_url'] = $item['user']['avatar_url'];
- $item['agent_user_nickname'] = $item['user']['nickname'];
- $item['agent_user_mobile'] = $item['user']['mobile'];
- } else {
- $item['agent_user_id'] = $item['user_id'];
- $item['agent_user_avatar_url'] = '';
- $item['agent_user_nickname'] = '平台';
- $item['agent_user_mobile'] = '';
- }
- $item['order_no'] = '';
- $item['from_user'] = [];
- $order = null;
- $changes_type = '';
- if ($params['log_type'] == 'add') {
- if(in_array($item['changes_type'],[CloudStockEnum::CHANGE_TYPE_INCREASE_FILL])){
- $changes_type = CloudStockEnum::CHANGE_TYPE_DEDUTION_FILL;
- $order = CloudStockFillOrder::findOne(['id'=>$item['order_id']]);
- }
- if(in_array($item['changes_type'],[CloudStockEnum::CHANGE_TYPE_INCREASE_UPGRADE_BAG_GIVE,CloudStockEnum::CHANGE_TYPE_INCREASE_GIFT_PLAN_GIVE])){
- $changes_type = $item['changes_type'];
- $order = Order::findOne(['id'=>$item['order_id']]);
- }
- $deduction_user_ids = CloudStockDeductionDetail::find()->where(['changes_type'=>$changes_type,'order_id'=>$item['order_id']])->select('user_id')->asArray()->column();
- $platform = [
- 'id' => 0,
- 'nickname' => '平台',
- 'mobile' => '',
- 'avatar_url' => '',
- ];
- if(!empty($deduction_user_ids)){
- $item['from_user'] = [];
- $item['from_user'] = User::find()->where(['id'=>$deduction_user_ids])->select('id,nickname,mobile,avatar_url')->asArray()->all();
- if(in_array(0,$deduction_user_ids)){
- $item['from_user'][] = $platform;
- }
- } else {
- $item['from_user'][] = $platform;
- }
- if(!empty($order)){
- $item['order_no'] = $order['order_no'];
- }
- } else {
- if(in_array($item['changes_type'],[CloudStockEnum::CHANGE_TYPE_DEDUTION_GOODS_BUYING])){
- $buying_order = CloudStockBuyingOrder::findOne(['id'=>$item['order_id']]);
- $order = Order::findOne(['id'=>$buying_order['order_id']]);
- }
- if(in_array($item['changes_type'],[CloudStockEnum::CHANGE_TYPE_INCREASE_UPGRADE_BAG_GIVE])){
- $order = Order::findOne(['id'=>$item['order_id']]);
- }
- if(in_array($item['changes_type'],[CloudStockEnum::CHANGE_TYPE_DEDUTION_FILL])){
- $order = CloudStockFillOrder::findOne(['id'=>$item['order_id']]);
- }
- if(!empty($order)){
- $item['order_no'] = $order['order_no'];
- $item['from_user'] = [];
- $item['from_user'][] = User::find()->where(['id'=>$order['user_id']])->select('id,nickname,mobile,avatar_url')->asArray()->one();
- }
- }
- }
- }
- $page_data['changeTypeMap'] = CloudStockEnum::getStockChangeTypeMap();
- return $this->success('操作成功', $page_data);
- }
- }
- return $this->render('stock-log');
- }
- //不用验证权限
- public function actionGetChangesTypeList()
- {
- $changeTypeMap = CloudStockEnum::getStockChangeTypeMap();
- $row = [];
- foreach ($changeTypeMap as $k=>$v){
- if(100<=$k&&$k<200){
- $row['increase'][] =[
- 'value'=>$k,'desc'=>$v
- ];
- }
- if((200<=$k&&$k<300)||$k==105||$k==106){
- $row['deduction'][] =[
- 'value'=>$k,'desc'=>$v
- ];
- }
- }
- $data[0]=$row;
- return $this->success('success', $data);
- }
- public function actionPriceLog()
- {
- CapitalLog::$capitalType = 'commission';
- if (\Yii::$app->request->isAjax) {
- if (\Yii::$app->request->isPost) {
- $filename = '佣金列表-' . date('YmdHis') . '_' . rand(10000, 99999);
- $data = \Yii::$app->request->post();
- if (is_numeric($data['status']) && $data['status'] == 0)
- {
- $data['table'] = 'commission_frozen';
- } else {
- $data['table'] = 'commission';
- }
- $data['mall_id'] = $this->mall_id;
- $data['from_type'] = CloudStockEnum::ADDONS_NAME;
- if (!empty($data['date'])) {
- $stat_date = $data['date'] . '-01 00:00:00';
- $end_date = date('Y-m-t 23:59:59', time());
- $data['date'] = [
- $stat_date,
- $end_date
- ];
- }
- $res = CsvExportHelper::exportDownLoadCenter($this->mall_id, $filename, DownloadEnum::TYPE_ASSETS, CapitalLog::class, 'exportAssets', $data);
- if ($res === false) return $this->error('加入导出任务失败' . CsvExportHelper::getStaticError());
- return $this->success('添加导出任务成功,任务完成后请在下载中心进行下载!');
- }
- $page = \Yii::$app->request->get('page') ?? 1;
- $limit = \Yii::$app->request->get('page_size') ?? $this->pageSize;
- $get = \Yii::$app->request->get();
- $params[] = ['log.mall_id' => $this->mall_id];
- if ($get['status'] == 0) {
- //查询冻结表,未结算数据
- $params[] = ['in', 'log.status', [StatusEnum::DISABLED]];
- CapitalLog::$capitalType = 'commission_frozen';
- }
- if (!empty($get['capital_type'])) $params[] = ['log.capital_type' => $get['capital_type']];
- if (!empty($get['remark'])) $params[] = ['like', 'log.desc', $get['remark']];
- // 搜索来源
- $isSearchContributor = isset($get['contributor']) && is_numeric($get['contributor']);
- if (!empty($get['order_no']) || $isSearchContributor){
- $where_or_params = [];
- // 来源搜索
- if ($isSearchContributor) {
- $userIdsByMobile = User::find()
- ->where(['mall_id' => $this->mall_id])
- ->andWhere(['like', 'mobile', $get['contributor']])
- ->andWhere(['!=', 'status', StatusEnum::DELETE])
- ->column();
- $userIdsByMobile[] = $get['contributor'];
- $where_or_params[] = ['contributor_id' => $userIdsByMobile];
- }
- $orderSearchWhere = ['or'];
- if (!empty($get['order_no'])) {
- $orderSearchWhere[] = ['order_no' => $get['order_no']];
- }
- if ($isSearchContributor) {
- $orderSearchWhere[] = ['user_id' => $userIdsByMobile];
- }
- $order_ids = Order::find()->where(['mall_id' => $this->mall_id])->andWhere($orderSearchWhere)->select('id')->column();
- if(!empty($order_ids)){
- $where_or_params[] = [
- 'and',
- ['log.source_table' => Order::tableName()],
- ['log.source_table_id' => $order_ids]
- ];
- }
- $order_detail_ids = OrderDetail::find()->where(['order_id'=>$order_ids])->select('id')->column();
- if(!empty($order_detail_ids)){
- $where_or_params[] = [
- 'and',
- ['log.source_table' => OrderDetail::tableName()],
- ['log.source_table_id' => $order_detail_ids]
- ];
- }
- $fill_order_ids = CloudStockFillOrder::find()->where(['mall_id' => $this->mall_id])->andWhere($orderSearchWhere)->select('id')->column();
- if(!empty($fill_order_ids)){
- $where_or_params[] = [
- 'and',
- ['log.source_table' => CloudStockFillOrder::tableName()],
- ['log.source_table_id' => $fill_order_ids]
- ];
- }
- if (!empty($get['order_no'])) {
- $where_or_params[] = [
- 'and',
- ['log.order_no' => trim($get['order_no'])],
- ];
- }
- if(!empty($where_or_params)){
- array_unshift($where_or_params,'or');
- $params[] = $where_or_params;
- }
- }
- if (!empty($get['keyword'])){
- $user_list = User::lists([
- 'where'=>[
- ['or',
- ['like', 'nickname', $get['keyword']],
- ['like', 'mobile', $get['keyword']]
- ]
- ],
- 'select'=>'id',
- ]);
- $user_ids = array_column($user_list,'id');
- }
- if(isset($user_ids)) $params[] = ['log.user_id' => $user_ids];
- if (!empty($get['user_id'])) $params[] = ['log.user_id' => $get['user_id']];
- $date = 0;
- if (!empty($get['date'])) {
- $start = strtotime(date($get['date'] . '-01'));
- $end = strtotime(date($get['date'] . '-t'));
- $params[] = ['>=', 'log.created_at', $start];
- $params[] = ['<=', 'log.created_at', $end];
- if (isset($params['end']) && $params['end'] != '') {
- $where[] = ['<', 'pl.created_at', strtotime($params['end'])];
- }
- }
- $params[] = ['log.from_type' => CloudStockEnum::ADDONS_NAME];
- $params = [
- 'alias' => 'log',
- 'select' => 'log.id,log.created_at,log.mall_id,log.user_id,log.change_type,log.change_num,log.current_num,log.desc,log.from_type,
- log.capital_type,log.created_at,log.source_table_id,log.source_table,log.order_no,log.contributor_id',
- 'where' => $params,
- 'order' => 'id desc',
- 'page' => $page,
- 'limit' => $limit,
- ];
- $list = CapitalLog::listPage($params, false, true);
- $commission_map = UserWalletEnum::getCommissionMap();
- $list['date'] = '';
- $capital_type_map = GlobalVarMap::getEnumMapByType('CapitalTypeMap');
- if (!empty($list['list'])) {
- $user_id_arr = array_column($list['list'],'user_id');
- $contributor_id_arr = array_column($list['list'], 'contributor_id');
- $user_arr = User::lists([
- 'where'=>[
- ['id' => array_merge($contributor_id_arr, $user_id_arr)]
- ],
- 'index'=>'id',
- ]);
- foreach ($list['list'] as &$lv) {
- $lv['source_text'] = ($commission_map[$lv['from_type']] ?? '') . ($capital_type_map[$lv['capital_type']] ? '-' . $capital_type_map[$lv['capital_type']] : '');
- $lv['created_at'] = date('Y-m-d H:i:s', $lv['created_at']);
- $lv['nickname'] = '';
- $lv['avatar_url'] = '';
- $lv['mobile'] = '';
- $lv['username'] = '';
- if(isset($user_arr[$lv['user_id']])){
- $lv['nickname'] = $user_arr[$lv['user_id']]['nickname'];
- $lv['avatar_url'] = $user_arr[$lv['user_id']]['avatar_url'];
- $lv['mobile'] = $user_arr[$lv['user_id']]['mobile'];
- $lv['username'] = $user_arr[$lv['user_id']]['username'];
- }
- $lv['from_user'] = [];
- $order = null;
- if($lv['source_table'] == Order::tableName()){
- $order = Order::findOne(['id'=>$lv['source_table_id']]);
- }elseif($lv['source_table'] == OrderDetail::tableName()){
- $order_detail = OrderDetail::findOne(['id'=>$lv['source_table_id']]);
- if($order_detail){
- $order = Order::findOne(['id'=>$order_detail['order_id']]);
- }
- }elseif($lv['source_table'] == CloudStockFillOrder::tableName()){
- $order = CloudStockFillOrder::findOne(['id'=>$lv['source_table_id']]);
- }
- if (empty($lv['order_no']) && !empty($order)) {
- $lv['order_no'] = $order['order_no'];
- }
- if (isset($user_arr[$lv['contributor_id']])) {
- $lv['from_user'] = [
- 'id' => $user_arr[$lv['contributor_id']]['id'],
- 'nickname' => $user_arr[$lv['contributor_id']]['nickname'],
- 'mobile' => $user_arr[$lv['contributor_id']]['mobile'],
- 'avatar_url' => $user_arr[$lv['contributor_id']]['avatar_url'],
- ];
- } else {
- if (!empty($order)) {
- $lv['from_user'] = User::find()->where(['id' => $order['user_id']])->select('id,nickname,mobile,avatar_url')->asArray()->one();
- }
- }
- }
- }
- // 业务类型
- $list['commissionFromTypeList'] = $commission_map;//来源类型
- $list['incomeCapitalTypeList'] = $capital_type_map;//佣金类型
- // 导出字段列表
- $list['export_list'] = CommissionLog::EXPORT_FIELD_LIST;
- CapitalLog::$capitalType = 'commission_frozen';
- $frozen_capital_total = CapitalLog::find()->where(['mall_id' => $this->mall_id, 'from_type' => CloudStockEnum::ADDONS_NAME, 'status' => 0])->sum('change_num');
- $statistics_data['frozen_capital_total'] = 0;
- $statistics_data['commission_total'] = 0;
- if (!empty($frozen_capital_total)) $statistics_data['frozen_capital_total'] = bcsub($frozen_capital_total,1,2);
- CapitalLog::$capitalType = 'commission';
- $commission_total = CapitalLog::find()->where(['mall_id' => $this->mall_id, 'from_type' => CloudStockEnum::ADDONS_NAME,'change_type'=>'add'])->sum('change_num');
- if(!empty($commission_total)) $statistics_data['commission_total'] = $commission_total;
- $statistics_data['commission_total']+=$statistics_data['frozen_capital_total'];
- $list['statistics_data'] = $statistics_data;
- $list['export_list'] = CapitalLog::exportFieldsList();
- return $this->success('操作成功', $list);
- } else {
- $flag = \Yii::$app->request->post('flag');
- if (empty($flag)) {
- return $this->render('price-log');
- } else {
- // 导出数据
- }
- }
- return $this->render('price-log');
- }
- public function actionPaymentLog()
- {
- if (\Yii::$app->request->isAjax) {
- if (\Yii::$app->request->isPost) {
- $filename = '货款明细-' . date('YmdHis') . '_' . rand(10000, 99999);
- $data = \Yii::$app->request->post();
- $data['mall_id'] = $this->mall_id;
- $res = CsvExportHelper::exportDownLoadCenter($this->mall_id, $filename, DownloadEnum::TYPE_ASSETS, PaymentLogLogic::class, 'export', $data);
- if ($res === false) return $this->error('加入导出任务失败' . CsvExportHelper::getStaticError());
- return $this->success('添加导出任务成功,任务完成后请在下载中心进行下载!');
- }
- try {
- $params = Yii::$app->request->get();
- $data = (new PaymentLogService(['mall_id' => $this->mall_id]))->paymentLog($params);
- return $this->success('操作成功', $data);
- } catch (\Exception $e) {
- return $this->error($e->getMessage(), []);
- }
- }
- }
- public function actionSettlement()
- {
- $wallet_type = 'commission';
- CapitalLog::$capitalType = "{$wallet_type}_frozen";
- $res = false;
- if (\Yii::$app->request->isAjax) {
- if (\Yii::$app->request->isPost) {
- $params = \Yii::$app->request->post();
- $res = UserWalletService::unfrozen($params['id'], $wallet_type);
- }
- }
- return $this->success('成功', $res);
- }
- public function actionChangeGoodsStock()
- {
- if (\Yii::$app->request->isAjax) {
- if (\Yii::$app->request->isPost) {
- $params = \Yii::$app->request->post();
- $res = Yii::$app->services->validate->validate($params, [
- [['user_id', 'changes_dir', 'goods_id', 'num'], 'required'],
- ]);
- if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- if ($params['changes_dir'] == CloudStockEnum::STOCK_CHANGE_ADD) {
- try {
- $post['goods_id'] = $params['goods_id'];
- $post['user_id'] = 0;
- $post['mall_id'] = $this->mall_id;
- $post['number'] = $params['num'];
- $post['target_user_id'] = $params['user_id'];
- $post['type'] = 2;
- CloudStockDispenseOrder::addData($post);
- } catch (\Exception $e) {
- return $this->error($e->getMessage());
- }
- $changes_dir = CloudStockEnum::CHANGE_TYPE_INCREASE_PLATFORM;
- } elseif ($params['changes_dir'] == CloudStockEnum::STOCK_CHANGE_SUB) {
- $changes_dir = CloudStockEnum::CHANGE_TYPE_DEDUTION_PLATFORM;
- } else {
- return $this->error("changes_dir错误");
- }
- if ($params['num'] < 1) {
- return $this->error('操作数量最小值为0');
- }
- $stock_params = [
- 'goods_id' => $params['goods_id'],
- 'number' => $params['num'],
- 'user_id' => $params['user_id'],
- 'order_id' => 0,
- ];
- $res_handle_stock = CloudStockGoodsStockLog::stockHandle($this->mall_id, $stock_params, $changes_dir);
- if (false === $res_handle_stock) return $this->error(CloudStockGoodsStockLog::getStaticError());
- CloudStockAgent::fixStock($this->mall_id,$params['user_id']);
- return $this->success('操作成功', $res_handle_stock);
- }
- }
- return $this->error();
- }
- public function actionSwitchRestriction()
- {
- if (\Yii::$app->request->isAjax) {
- if (\Yii::$app->request->isPost) {
- $params = \Yii::$app->request->post();
- $res = Yii::$app->services->validate->validate($params, [
- [['id'], 'required'],
- [['is_equal_award_restriction'], 'integer']
- ]);
- if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- $params['mall_id'] = $this->mall_id;
- $res = CloudStockAgent::updateAll(['is_equal_award_restriction' => $params['is_equal_award_restriction']], ['id' => $params['id'], 'mall_id' => $this->mall_id]);
- if ($res == false) return $this->error(CloudStockAgent::getStaticError());
- return $this->success('操作成功');
- }
- }
- return $this->error();
- }
- }
|