| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- <?php
- namespace addons\QiShangTong\common\logic;
- use addons\QiShangTong\common\enums\QiShangTongEnums;
- use addons\QiShangTong\common\models\QiShangTongBalanceLog;
- use addons\QiShangTong\common\models\QiShangTongOrder;
- use addons\QiShangTong\common\service\SettingService;
- use common\components\export\CsvTool;
- use common\enums\DownloadEnum;
- use common\enums\StatusEnum;
- use common\models\common\Download;
- use common\models\mall\Mall;
- use common\models\user\User;
- use common\traits\ErrorTrait;
- use yii\helpers\Json;
- class DownloadLogic
- {
- use ErrorTrait;
- public static function exportHandle(array $data)
- {
- date_default_timezone_set('Asia/Shanghai');
- $download_id = $data['download_id'] ?? 0;
- $download = Download::findOne(['id' => $download_id]);
- if ($download) {
- $params = Json::decode($download->params);
- switch ($params['func']) {
- case 'o':
- return self::o($download);
- case 'f':
- return self::f($download);
- }
- }
- return false;
- }
- protected static function o(Download $download)
- {
- try {
- $params = Json::decode($download->params);
- $filename = $download->name;
- $type = $download->type;
- $model = QiShangTongOrder::find();
- $model->where(['status' => [StatusEnum::DISABLED, StatusEnum::ENABLED]]);
- if (!empty($params['mall_id'])) {
- $model->andWhere(['mall_id' => $params['mall_id']]);
- } elseif (!empty($params['keyword'])) {
- $mIds = Mall::find()->where(['or', ['like', 'id', $params['keyword']], ['like', 'name', $params['keyword']]])
- ->select('id')->column();
- if (!empty($mIds)) {
- $model->andWhere(['mall_id' => $mIds]);
- } else {
- $model->andWhere(['mall_id' => 0]);
- }
- }
- if (!empty($params['order_no'])) {
- $model->andWhere(['like', 'order_no', $params['order_no']]);
- }
- if (!empty($params['third_order_no'])) {
- $model->andWhere(['like', 'third_order_no', $params['third_order_no']]);
- }
- if (!empty($params['member'])) {
- $query = User::find();
- if (!empty($params['mall_id'])) $query->where(['mall_id' => $params['mall_id']]);
- $uids = $query->andWhere(['or', ['like', 'id', $params['member']], ['like', 'mobile', $params['member']],
- ['like', 'nickname', $params['member']]])
- ->andWhere(['status' => StatusEnum::ENABLED])
- ->select('id')->column();
- if (!empty($uids)) {
- $model->andWhere(['user_id' => $uids]);
- } else {
- $model->andWhere(['user_id' => 0]);
- }
- }
- $model->with(['order' => function($query) {
- $query->with(['detail' => function($dQuery) {
- $dQuery->select('id, order_id, goods_name, goods_attr_name');
- }, 'user' => function ($query) {
- $query->select('id,nickname,username,mobile');
- }]);
- }, 'mall' => function($query) {
- $query->select('id, name');
- }]);
- $fields = $params['fields'];
- $fields_arr = [
- 'mall_id' => '商城ID',
- 'mall_name' => '商城名称',
- 'order_no' => '订单编号',
- 'third_order_no'=> '第三方订单编号',
- 'req_success' => '推单状态',
- 'updated_at' => '推单时间',
- 'last_resp' => '推单详情',
- 'goods_name' => '商品名称',
- 'goods_attr_name' => '规格名称',
- 'pay_money' => '支付金额',
- 'pay_time' => '支付时间'
- ];
- $have_select_field_arr = [];
- foreach ($fields as $value) {
- if (isset($fields_arr[$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;
- foreach ($model->batch() as $orders) {
- foreach ($orders as $item) {
- $row = [];
- foreach ($fields as $field) {
- switch (true) {
- case in_array($field, ['mall_name']):
- $row[] = $item['mall']['name'] ?? '未知商城';
- break;
- case in_array($field, ['created_at', 'updated_at']):
- $row[] = !empty($item[$field]) ? date('Y-m-d H:i:s', $item[$field]) : '';
- break;
- case in_array($field, ['pay_time']):
- $row[] = !empty($item['order'][$field]) ? date('Y-m-d H:i:s', $item['order'][$field]) : '';
- break;
- case in_array($field, ['req_success']):
- $row[] = $item[$field] == 100 ? '成功' : '失败';
- break;
- case in_array($field, ['goods_name', 'goods_attr_name']):
- $row[] = $item['order']['detail'][0][$field] ?? '';
- break;
- case in_array($field, ['pay_money']):
- $row[] = $item['order'][$field] ?? '';
- break;
- default:
- $row[] = !empty($item[$field]) ? $item[$field] : '';
- }
- }
- $csv->data[] = $row;
- }
- $csv->export();
- }
- $csv->updateDown($download, empty($params['mall_id']) ? SettingService::getMasterMall() : $params['mall_id']);
- } catch (\Exception $e) {
- $download->status = 3;
- $res = $download->save();
- dd($e->getMessage() . $e->getFile() . $e->getLine());
- self::setStaticError($e->getMessage());
- return $e->getMessage();
- }
- }
- protected static function f(Download $download)
- {
- try {
- $params = Json::decode($download->params);
- $filename = $download->name;
- $type = $download->type;
- $model = QiShangTongBalanceLog::find();
- $model->where(['status' => [StatusEnum::DISABLED, StatusEnum::ENABLED]]);
- if (!empty($params['mall_id'])) {
- $model->andWhere(['mall_id' => $params['mall_id']]);
- } elseif (!empty($params['keyword'])) {
- $mIds = Mall::find()->where(['or', ['like', 'id', $params['keyword']], ['like', 'name', $params['keyword']]])
- ->select('id')->column();
- if (!empty($mIds)) {
- $model->andWhere(['mall_id' => $mIds]);
- } else {
- $model->andWhere(['mall_id' => 0]);
- }
- }
- if (!empty($params['date_start'])) $model->andWhere(['>=', 'created_at', strtotime($params['date_start'])]);
- if (!empty($params['date_end'])) $model->andWhere(['<=', 'created_at', strtotime($params['date_end'])]);
- $model->with(['mall' => function($query) {
- $query->select('id, name');
- }]);
- $fields = $params['fields'];
- $fields_arr = [
- 'mall_id' => '商城ID',
- 'mall_name' => '商城名称',
- 'order_no' => '异动单号',
- 'created_at' => '创建时间',
- 'amount' => '异动金额',
- 'type' => '异动类型',
- 'direction' => '增加/减少',
- 'remark' => '异动备注'
- ];
- $have_select_field_arr = [];
- foreach ($fields as $value) {
- if (isset($fields_arr[$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;
- foreach ($model->batch() as $orders) {
- foreach ($orders as $item) {
- $row = [];
- foreach ($fields as $field) {
- switch (true) {
- case in_array($field, ['mall_name']):
- $row[] = $item['mall']['name'] ?? '未知商城';
- break;
- case in_array($field, ['created_at', 'updated_at']):
- $row[] = !empty($item[$field]) ? date('Y-m-d H:i:s', $item[$field]) : '';
- break;
- case in_array($field, ['type']):
- $row[] = QiShangTongEnums::BALANCE_LOG_TYPE_MAP[$item[$field]] ?? '';
- break;
- case in_array($field, ['direction']):
- $row[] = $item[$field] == 1 ? '增加' : '减少';
- break;
- default:
- $row[] = !empty($item[$field]) ? $item[$field] : '';
- }
- }
- $csv->data[] = $row;
- }
- $csv->export();
- }
- $csv->updateDown($download, empty($params['mall_id']) ? SettingService::getMasterMall() : $params['mall_id']);
- } catch (\Exception $e) {
- $download->status = 3;
- $res = $download->save();
- dd($e->getMessage() . $e->getFile() . $e->getLine());
- self::setStaticError($e->getMessage());
- return $e->getMessage();
- }
- }
- }
|