mall_id; $where[] = ['mall_id' => $mall_id]; $where[] = ['user_id' => $this->user_id]; if (isset($params['status'])) { $where[] = ['status' => $params['status']]; } else { $where[] = ['status' => StatusEnum::ENABLED]; } $params['page'] = empty($params['page']) ? 1 : $params['page']; $params['limit'] = empty($params['limit']) ? 5 : $params['limit']; $params['where'] = $where; $params['order'] = 'id desc'; $params['with'] = ['buyUser']; $params['select'] = 'id,buy_user_id,order_no,created_at,num,money,goods_name,type'; $page_data = CloudStockPaymentLog::listPage($params, false); if (!empty($page_data['list'])) { foreach ($page_data['list'] as &$item) { $item['avatar_url'] = $item['buyUser']['avatar_url'] ?? ''; $item['buy_user_nickname'] = $item['buyUser']['nickname'] ?? ''; $item['type'] = CloudStockEnum::getPaymentLogTypeMap($item['type']) ?? ''; unset($item['buyUser']); } } return $page_data; } public function exportFieldsList() { return [ 'user_id' => '会员ID', 'nickname' => '用户昵称', 'mobile' => '用户手机', 'source_text' => '货款类型', 'money' => '金额', 'status' => '状态', 'desc' => '说明', 'order_no' => '订单号', 'buy_user_id' => '来源会员ID', 'buy_nickname' => '来源用户昵称', 'created_at' => '创建时间', ]; } protected function getWhere($params) { $where = [['mall_id' => $this->mall_id]]; if (!empty($params['order_no'])) { $where[] = ['like', 'order_no', trim($params['order_no'])]; } if (!empty($params['keyword'])) { $user_list = User::lists([ 'where' => [ ['or', ['like', 'nickname', $params['keyword']], ['like', 'mobile', $params['keyword']] ] ], 'select' => 'id', ]); $user_ids = array_column($user_list, 'id'); $where[] = ['user_id' => $user_ids]; } if (!empty($params['user_id'])) { $where[] = ['user_id' => $params['user_id']]; } if (isset($params['status']) && $params['status'] != 'all') { $where[] = ['status' => $params['status']]; } if (!empty($params['date'])) { $start = strtotime(date($params['date'] . '-01')); $end = strtotime(date($params['date'] . '-t')); $where[] = ['>=', 'created_at', $start]; $where[] = ['<=', 'created_at', $end]; } if (isset($params['contributor']) && is_numeric($params['contributor'])) { $userIdsByMobile = User::find() ->where(['mall_id' => $this->mall_id]) ->andWhere(['like', 'mobile', $params['contributor']]) ->andWhere(['!=', 'status', StatusEnum::DELETE]) ->column(); $userIdsByMobile[] = $params['contributor']; $where[] = ['buy_user_id' => $userIdsByMobile]; } return $where; } public function paymentLog($params) { $params['where'] = $this->getWhere($params); $params['order'] = 'id desc'; $list = CloudStockPaymentLog::listPage($params, false, true); if (!empty($list['list'])) { $user_id_arr = array_column($list['list'], 'user_id'); $buy_user_id_arr = array_column($list['list'], 'buy_user_id'); $user_arr = User::lists([ 'where' => [ ['id' => array_merge($user_id_arr, $buy_user_id_arr)] ], 'index' => 'id', ]); foreach ($list['list'] as &$lv) { if ($lv['type'] == 'fill') { $desc = $source_text = '补货货款'; } else { $source_text = '会员买货货款'; $desc = '线下订单出货'; } $lv['source_text'] = $source_text; $lv['desc'] = $desc; $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'] = []; if (isset($user_arr[$lv['buy_user_id']])) { $lv['from_user']['nickname'] = $user_arr[$lv['buy_user_id']]['nickname']; $lv['from_user']['avatar_url'] = $user_arr[$lv['buy_user_id']]['avatar_url']; $lv['from_user']['id'] = $user_arr[$lv['buy_user_id']]['id']; } } } // 业务类型 $cloud_warehouse = CloudStockAgent::find()->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED])->sum('cloud_warehouse_price+cloud_warehouse_frozen_price'); $cloud_warehouse_withdraw_price = CloudStockAgent::find()->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED])->sum('cloud_warehouse_withdraw_price'); $list['statistics_data'] = ['cloud_warehouse' => $cloud_warehouse, 'cloud_warehouse_withdraw_price' => $cloud_warehouse_withdraw_price]; $list['export_list'] = $this->exportFieldsList(); $list['export_url'] = 'cloud-stock/default/payment-log'; return $list; } public function add($params) { $res = CloudStockPaymentLog::add($params); if (empty($res)) { throw new \Exception(CloudStockPaymentLog::$static_error); } if (empty($params['status'])) { $params['is_frozen'] = true; } else { $params['is_frozen'] = false; } WithdrawService::handle($params); return $res; } public function export($data) { ini_set('memory_limit', '512M'); $download_id = $data['download_id'] ?? 0; $download = Download::findOne(['id' => $download_id]); if ($download) { try { $params = json_decode($download->params, true); $filename = $download->name; $type = $download->type; $params['where'] = $this->getWhere($params); $params['order'] = 'id desc'; $list = CloudStockPaymentLog::lists($params); $fields = $params['fields']; $fields_arr = $this->exportFieldsList(); $have_select_field_arr = []; foreach ($fields as $value) { $have_select_field_arr[] = $fields_arr[$value]; } $csv = new CsvTool(); $csv->filename = $filename; $csv->file_dirname = DownloadEnum::getTypeStorageDirMap($type); $csv->export_mode = CsvTool::EXPORT_MODE_ASYNC; $csv->header = $have_select_field_arr; $user_id_arr = array_column($list, 'user_id'); $buy_user_id_arr = array_column($list, 'buy_user_id'); $user_arr = User::lists([ 'where' => [ ['id' => array_merge($user_id_arr, $buy_user_id_arr)] ], 'index' => 'id', ]); $csv->data = array_map(function ($item) use ($fields, $user_arr) { $row = []; foreach ($fields as $field) { switch (true) { case $field == 'created_at': $row[] = !empty($item[$field]) ? date('Y-m-d H:i:s', $item[$field]) : ''; break; case $field == 'mobile': $row[] = $user_arr[$item['user_id']]['mobile'] ?? ''; break; case $field == 'source_text': $row[] = $item['type'] == 'fill' ? '补货货款' : '会员买货货款'; break; case $field == 'status': $row[] = $item['status'] == 0 ? '未结算' : '已结算'; break; case $field == 'desc': $row[] = $item['type'] == 'fill' ? '补货货款' : '线下订单出货'; break; case $field == 'nickname': $row[] = $user_arr[$item['user_id']]['nickname'] ?? ''; break; case $field == 'buy_nickname': $row[] = $user_arr[$item['buy_user_id']]['nickname'] ?? ''; break; default: $row[] = !empty($item[$field]) ? $item[$field] : ''; } } return $row; }, $list); $csv->export(); $csv->updateDown($download, $params['mall_id']); return true; } catch (\Exception $e) { $download->status = 3; $res = $download->save(); return $e->getMessage(); } } } }