| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- <?php
- namespace addons\CloudStock\common\services;
- use addons\CloudStock\common\enums\CloudStockEnum;
- use addons\CloudStock\common\models\CloudStockAgent;
- use addons\CloudStock\common\models\CloudStockPaymentLog;
- use common\components\export\CsvTool;
- use common\enums\DownloadEnum;
- use common\enums\StatusEnum;
- use common\models\common\Download;
- use common\models\user\User;
- class PaymentLogService extends BaseService
- {
- public function index($params)
- {
- $mall_id = $this->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();
- }
- }
- }
- }
|