| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329 |
- <?php
- namespace addons\HuifuPay\common\models;
- use addons\Mch\common\models\MchWithdrawLog;
- use addons\Store\common\models\StoreWithdrawLog;
- use common\components\export\CsvTool;
- use common\enums\DownloadEnum;
- use common\enums\StatusEnum;
- use common\enums\WithdrawWayEnum;
- use common\models\common\Download;
- use common\models\common\PaidSinglePayLog;
- use common\models\common\PaymentTrade;
- use common\models\common\PaymentTradeOrder;
- use common\models\mall\MallAddons;
- use common\models\user\User;
- use common\models\user\UserWithdrawLog;
- use Yii;
- /**
- * This is the model class for table "{{%addons_joinpay_fastpay_order}}".
- *
- * @property int $id
- * @property int $mall_id 平台id
- * @property int $user_id 用户id
- * @property string $order_no 订单号,系统生成
- * @property float $amount 订单金额
- * @property float $pay_fee 订单金额
- * @property int $bank_card_id 开通快捷支付银行卡id
- * @property string $title 订单title
- * @property string $hf_order_no 汇聚平台流水号
- * @property int $is_sign 是否签约,1-是,0-否
- * @property int $status 状态[-1:删除;0:禁用;1启用]
- * @property int $created_at 添加时间戳
- * @property int $updated_at 更新时间戳
- */
- class HuifuPayFastpayOrder extends \common\models\base\BaseActiveRecord
- {
- /**
- * {@inheritdoc}
- */
- public static function tableName()
- {
- return '{{%addons_huifupay_fastpay_order}}';
- }
- /**
- * {@inheritdoc}
- */
- public function rules()
- {
- return [
- [['mall_id', 'user_id', 'bank_card_id', 'is_sign', 'status', 'created_at', 'updated_at'], 'integer'],
- [['pay_fee'], 'number'],
- [['order_no'], 'string', 'max' => 32],
- [['title', 'hf_order_no'], 'string', 'max' => 64],
- // [['order_no'], 'unique'], // mycat 环境不能使用此规则
- ];
- }
- /**
- * {@inheritdoc}
- */
- public function attributeLabels()
- {
- return [
- 'id' => 'ID',
- 'mall_id' => '商城 ID',
- 'user_id' => '会员 ID',
- 'order_no' => '订单编号',
- 'pay_fee' => '订单金额',
- 'bank_card_id' => '开通快捷支付银行卡id',
- 'title' => '订单title',
- 'hf_order_no' => '汇付平台流水号',
- 'is_sign' => '是否签约,1-是,0-否',
- 'status' => '状态[-1:删除;0:禁用;1启用]',
- 'created_at' => 'Created At',
- 'updated_at' => 'Updated At',
- ];
- }
- public static function setData(int $mall_id, array $data)
- {
- if (empty($data['id'])) {
- $model = new self();
- $model->loadDefaultValues();
- $model->mall_id = $mall_id;
- } else {
- $model = self::findOne(['mall_id' => $mall_id, 'id' => $data['id'], 'status' => StatusEnum::ENABLED]);
- if (empty($model)) throw new \Exception('数据记录异常');
- }
- foreach ($data as $key => $val) {
- $model->$key = $val;
- }
- if (!$model->save()) {
- self::$static_error = '保存数据失败:' . $model->getErrorMessage();
- return false;
- }
- return $model;
- }
- /**
- * 生成开通快捷支付订单
- * @param $mall_id
- * @param $user_id
- * @param $card_id
- * @param float $pay_fee
- * @return bool
- * @throws
- */
- public static function createOrder($mall_id,$user_id,$card_id,$pay_fee = 0.01,$is_sign=1)
- {
- $params = [
- 'mall_id' => $mall_id,
- 'user_id' => $user_id,
- 'order_no' => self::createMerchantOrderNo(),
- 'pay_fee' => $pay_fee,
- 'bank_card_id' => $card_id,
- 'title' => $is_sign == 1 ? '签约快捷支付' : '解约快捷支付',
- 'is_sign' => $is_sign
- ];
- $model = self::setData($mall_id, $params);
- if (false === $model) {
- return false;
- }
- return $model->id;
- }
- /**
- * 生成订单号
- * @return null|string
- */
- public static function createMerchantOrderNo()
- {
- $order_no = null;
- while (true) {
- $order_no = 'HF' . date('YmdHis') . rand(10000, 99999);
- $exist = self::find()->where(['order_no' => $order_no])->one();
- if (!$exist) {
- break;
- }
- }
- return $order_no;
- }
- //支付记录导出
- public static function fieldsList($field = null){
- $fields = [
- 'pay_id' => '支付ID',
- 'user_id' => '用户ID',
- 'nickname' => '用户昵称',
- 'user_mobile' => '用户手机号',
- 'order_no' => '订单编号',
- 'pay_trade_no' => '支付订单号',
- 'hf_order_no' => '汇付流水号',
- 'type' => '支付类型',
- 'pay_money' => '支付金额',
- 'status' => '状态',
- 'created_at' => '创建时间',
- ];
- if ($field === null) return $fields;
- $temp = [];
- foreach ($field as $val) {
- if (isset($fields[$val])) $temp[$val] = $fields[$val];
- }
- return $temp;
- }
- //支付记录导出
- public static function exportHandle(array $data) {
- $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;
- //查询开始
- $order_no = $params['order_no'];
- $start_time = $params['start_time'];
- $end_time = $params['end_time'];
- $user_id = $params['user_id'];
- $user_keyword = $params['user_keyword'];
- $out_trade_no = $params['out_trade_no'];
- $pay_type = $params['pay_type'];
- $pay_records = PaymentTrade::find();
- $pay_records->where(['mall_id'=>$params['mall_id']]);
- if (empty($pay_type)) {
- $pay_records->andwhere(['in','pay_type',[18]]);
- } else {
- if (!in_array($pay_type, [18])) {
- //return $this->error('参数错误');
- }
- $pay_records->andwhere(['=','pay_type',$pay_type]);
- }
- if (!empty($start_time)) $pay_records->andwhere(['>=', 'created_at', strtotime($start_time . '00:00:00')]);
- if (!empty($end_time)) $pay_records->andwhere(['<=', 'created_at', strtotime($end_time . ' 23:59:59')]);
- if (!empty($out_trade_no)) $pay_records->andwhere(['like', 'out_trade_no', $out_trade_no]);
- if (!empty($user_id)) $pay_records->andwhere(['user_id' => $user_id]);
- if (!empty($user_keyword)) {
- $users = User::find()
- ->select('id,nickname,mobile,avatar_url')
- ->where(['or', ['like', 'nickname', $user_keyword], ['like', 'mobile', $user_keyword]])
- ->asArray()
- ->indexBy('id')
- ->all();
- $user_ids = array_column($users, 'id');
- $pay_records->andwhere(['in','user_id',$user_ids]);
- }
- $trade_ids = [];
- if (!empty($order_no)) {
- $payment_order_logs = PaymentTradeOrder::find()
- ->select('trade_id,order_no')
- ->where(['order_no' => $order_no])
- ->asArray()
- ->indexBy('trade_id')
- ->all();
- $trade_ids = array_column($payment_order_logs, 'trade_id');
- $pay_records->andwhere(['in','id',$trade_ids]);
- }
- //查询结束
- $fields = $params['fields'];
- $fields_arr = self::fieldsList();
- $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;
- // $order_status_list = OrderStatusEnum::getMap();
- // $payment_type_list = PayTypeEnum::getMap();
- // $shipping_status_list = ShippingStatusEnum::getMap();
- foreach ($pay_records->batch(200) as $order_details) {
- if (empty($users)) {
- $user_ids = [];
- foreach($order_details as $key=>$value){
- $user_ids[] = $value->user_id;
- }
- $users = User::find()
- ->select('id,nickname,mobile')
- ->where(['id' => $user_ids, 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]])
- ->asArray()
- ->indexBy('id')
- ->all();
- }
- if (empty($payment_order_logs)) {
- $trade_ids = [];
- foreach($order_details as $key=>$value){
- $trade_ids[] = $value->id;
- }
- $payment_order_logs = PaymentTradeOrder::find()
- ->select('trade_id,order_no')
- ->where(['trade_id' => $trade_ids])
- ->asArray()
- ->indexBy('trade_id')
- ->all();
- }
- $csv->data = array_map(function($order_detail)use($fields,$users,$payment_order_logs){
- $row = [];
- foreach ($fields as $field){
- // 收货人地址切割
- $user = $users[$order_detail['user_id']] ?? [];
- $payment_order_log = $payment_order_logs[$order_detail['id']] ?? [];
- //var_dump($order_detail);
- switch (true){
- case (in_array($field,['created_at'])):
- $row[] = !empty($order_detail[$field])?date('Y-m-d H:i:s',$order_detail[$field]):'';
- break;
- case ($field == 'pay_id'):
- $row[] = $order_detail['id'] ?:'';
- break;
- case ($field == 'user_id'):
- $row[] = $user['id'] ?:'';
- break;
- case ($field == 'nickname'):
- $row[] = $user['nickname'] ?: '默认用户';
- break;
- case ($field=='user_mobile'):
- $row[] = $user['mobile'] ?:'';
- break;
- case ($field=='order_no'):
- $row[] = $payment_order_log['order_no'];
- break;
- case ($field=='pay_trade_no'):
- $row[] = $order_detail['out_trade_no'] ?:'';
- break;
- case ($field=='hf_order_no'):
- $row[] = $order_detail['third_trade_no'] ?: '';
- break;
- case ($field=='type'):
- $row[] = $order_detail['pay_type'] == 18 ? '汇付支付':'快捷支付';
- break;
- case ($field == 'pay_money'):
- $row[] = $order_detail['pay_fee'] ?:'';
- break;
- case ($field=='status'):
- $row[] = $order_detail['is_pay']==1?'已付款':'未付款';
- break;
- default:
- $row[] = !empty($order_detail[$field])?$order_detail[$field]:'';
- }
- //var_dump($row);
- }
- return $row;
- },$order_details);
- $csv->export();
- }
- $csv->updateDown($download,$params['mall_id']);
- return true;
- } catch (\Exception $e) {
- $download->status = 3;
- $res = $download->save();
- // var_dump($e->getMessage());
- self::setStaticError($e->getMessage());
- return $e->getMessage();
- }
- }
- }
-
- }
|