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(); } }