PayLogService.php 9.2 KB
Newer Older
D
v1.2.0  
devil_gong 已提交
1 2 3 4
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
D
devil_gong 已提交
5
// | Copyright (c) 2011~2019 http://shopxo.net All rights reserved.
D
v1.2.0  
devil_gong 已提交
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace app\service;

use think\Db;

/**
 * 支付日志服务层
 * @author   Devil
 * @blog     http://gong.gg/
 * @version  0.0.1
 * @datetime 2016-12-01T21:51:08+0800
 */
class PayLogService
{
D
devil_gong 已提交
24 25 26 27 28 29 30 31
    /**
     * 支付日志添加
     * @author   Devil
     * @blog     http://gong.gg/
     * @version  1.0.0
     * @datetime 2019-05-07T00:57:36+0800
     * @param   [array]             $params         [输入参数]
     * @param   [int]               $user_id        [用户id]
D
devil 已提交
32
     * @param   [int]               $business_ids   [业务订单id]
D
devil_gong 已提交
33
     * @param   [float]             $total_price    [业务订单实际金额]
D
devil 已提交
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
     * @param   [string]            $subject        [业务订单名称]
     * @param   [int]               $business_type  [业务类型(0默认, 1订单, 2充值, ...)]
     * @return  [boolean]                           [成功true, 失败false]
     */
    public static function PayLogInsert($params = [])
    {
        // 请求参数
        $p = [
            [
                'checked_type'      => 'empty',
                'key_name'          => 'business_ids',
                'error_msg'         => '业务id为空',
            ],
            [
                'checked_type'      => 'is_array',
                'key_name'          => 'business_ids',
                'error_msg'         => '业务id数据类型有误',
            ],
            [
                'checked_type'      => 'empty',
                'key_name'          => 'user_id',
                'error_msg'         => '用户id为空',
            ],
            [
                'checked_type'      => 'empty',
                'key_name'          => 'business_type',
                'error_msg'         => '业务类型为空',
            ],
            [
                'checked_type'      => 'empty',
                'key_name'          => 'total_price',
                'error_msg'         => '业务金额为空',
            ],
            [
                'checked_type'      => 'min',
                'key_name'          => 'total_price',
                'checked_data'      => 0.01,
                'error_msg'         => '业务金额必须大于0',
            ],
        ];
        $ret = ParamsChecked($params, $p);
        if($ret !== true)
        {
            return DataReturn($ret, -1);
        }

        // 业务id
        if(empty($params['business_ids']))
        {
            return DataReturn('业务id为空', -1);
        }

        // 日志主数据
        $data = [
            'log_no'            => date('YmdHis').GetNumberCode(6),
            'user_id'           => intval($params['user_id']),
            'total_price'       => PriceNumberFormat($params['total_price']),
            'business_type'     => trim($params['business_type']),
            'subject'           => isset($params['subject']) ? $params['subject'] : '',
            'payment'           => isset($params['payment']) ? $params['payment'] : '',
            'payment_name'      => isset($params['payment_name']) ? $params['payment_name'] : '',
            'add_time'          => time(),
        ];
        $pay_log_id = Db::name('PayLog')->insertGetId($data);
        if($pay_log_id > 0)
        {
            $business_nos = isset($params['business_nos']) && is_array($params['business_nos']) ? $params['business_nos'] : [];
            $value_data = [];
            foreach($params['business_ids'] as $bk=>$bv)
            {
                $value_data[] = [
                    'pay_log_id'    => $pay_log_id,
                    'business_id'   => $bv,
                    'business_no'   => isset($business_nos[$bk]) ? trim($business_nos[$bk]) : '',
                    'add_time'      => time(),
                ];
            }
            $res = Db::name('PayLogValue')->insertAll($value_data);
            if($res >= count($params['business_ids']))
            {
                $data['id'] = $pay_log_id;
                return DataReturn('添加成功', 0, $data);
            }
        }
        return DataReturn('支付订单添加失败', -100);
    }

    /**
     * @author  Devil
     * @blog    http://gong.gg/
     * @version 1.0.0
     * @date    2020-07-27
     * @desc    description
     * @param   [int]               $log_id         [支付日志id]
D
devil_gong 已提交
128 129 130 131 132 133
     * @param   [string]            $trade_no       [支付平台交易号]
     * @param   [string]            $buyer_user     [支付平台用户帐号]
     * @param   [float]             $pay_price      [支付金额]
     * @param   [string]            $payment        [支付方式标记]
     * @param   [string]            $payment_name   [支付方式名称]
     */
D
devil 已提交
134
    public static function PayLogSuccess($params = [])
D
devil_gong 已提交
135
    {
D
devil 已提交
136 137 138 139 140 141 142
        // 参数
        if(empty($params['log_id']))
        {
            return DataReturn('日志id有误', -100);
        }

        // 更新数据
D
devil_gong 已提交
143 144
        $data = [
            'trade_no'          => isset($params['trade_no']) ? $params['trade_no'] : '',
D
devil_gong 已提交
145
            'buyer_user'        => isset($params['buyer_user']) ? $params['buyer_user'] : '',
D
devil_gong 已提交
146
            'pay_price'         => isset($params['pay_price']) ? PriceNumberFormat($params['pay_price']) : 0.00,
D
devil_gong 已提交
147 148 149
            'subject'           => isset($params['subject']) ? $params['subject'] : '',
            'payment'           => isset($params['payment']) ? $params['payment'] : '',
            'payment_name'      => isset($params['payment_name']) ? $params['payment_name'] : '',
D
devil 已提交
150 151
            'status'            => 1,
            'pay_time'          => time(),
D
devil_gong 已提交
152
        ];
D
devil 已提交
153 154 155 156 157
        if(Db::name('PayLog')->where(['id'=>intval($params['log_id']), 'status'=>0])->update($data))
        {
            return DataReturn('日志订单更新成功', 0);
        }
        return DataReturn('日志订单更新失败', -100);
D
devil_gong 已提交
158 159
    }

D
v1.2.0  
devil_gong 已提交
160 161 162 163 164 165 166 167
    /**
     * 获取支付日志类型
     * @author   Devil
     * @blog     http://gong.gg/
     * @version  1.0.0
     * @datetime 2018-12-23T02:22:03+0800
     * @param   [array]          $params [输入参数]
     */
168
    public static function PayLogTypeList($params = [])
D
v1.2.0  
devil_gong 已提交
169
    {
D
devil 已提交
170
        $data = Db::name('PayLog')->field('payment as id, payment_name as name')->group('payment,payment_name')->select();
D
v1.2.0  
devil_gong 已提交
171 172
        return DataReturn('处理成功', 0, $data);
    }
G
1.3.0  
gongfuxiang 已提交
173
    
D
v1.2.0  
devil_gong 已提交
174
    /**
D
devil 已提交
175
     * 列表
D
v1.2.0  
devil_gong 已提交
176 177 178 179 180 181 182
     * @author   Devil
     * @blog    http://gong.gg/
     * @version 1.0.0
     * @date    2018-09-29
     * @desc    description
     * @param   [array]          $params [输入参数]
     */
D
devil 已提交
183
    public static function PayLogList($params = [])
D
v1.2.0  
devil_gong 已提交
184 185 186 187
    {
        $where = empty($params['where']) ? [] : $params['where'];
        $m = isset($params['m']) ? intval($params['m']) : 0;
        $n = isset($params['n']) ? intval($params['n']) : 10;
D
devil 已提交
188 189
        $field = '*';
        $order_by = empty($params['order_by']) ? 'id desc' : $params['order_by'];
D
v1.2.0  
devil_gong 已提交
190 191

        // 获取数据列表
D
devil 已提交
192
        $data = Db::name('PayLog')->where($where)->field($field)->limit($m, $n)->order($order_by)->select();
D
v1.2.0  
devil_gong 已提交
193 194
        if(!empty($data))
        {
D
devil 已提交
195 196 197 198 199 200 201 202 203 204 205 206
            // 获取支付业务关联数据
            $log_value_list = [];
            $log_value = Db::name('PayLogValue')->field('pay_log_id,business_id,business_no')->where(['pay_log_id'=>array_column($data, 'id')])->select();
            if(!empty($log_value))
            {
                foreach($log_value as $lv)
                {
                    $log_value_list[$lv['pay_log_id']][] = $lv;
                }
            }

            // 循环处理数据
D
v1.2.0  
devil_gong 已提交
207 208
            foreach($data as &$v)
            {
D
devil 已提交
209 210 211 212 213 214 215 216
                // 用户信息
                if(isset($v['user_id']))
                {
                    if(isset($params['is_public']) && $params['is_public'] == 0)
                    {
                        $v['user'] = UserService::GetUserViewInfo($v['user_id']);
                    }
                }
D
v1.2.0  
devil_gong 已提交
217

D
devil 已提交
218 219
                // 关联业务数据
                $v['business_list'] = isset($log_value_list[$v['id']]) ? $log_value_list[$v['id']] : [];
D
v1.2.0  
devil_gong 已提交
220 221

                // 时间
D
devil 已提交
222 223 224
                $v['add_time'] = empty($v['add_time']) ? '' : date('Y-m-d H:i:s', $v['add_time']);
                $v['pay_time'] = empty($v['pay_time']) ? '' : date('Y-m-d H:i:s', $v['pay_time']);
                $v['close_time'] = empty($v['close_time']) ? '' : date('Y-m-d H:i:s', $v['close_time']);
D
v1.2.0  
devil_gong 已提交
225 226 227 228 229 230
            }
        }
        return DataReturn('处理成功', 0, $data);
    }

    /**
D
devil_gong 已提交
231
     * 总数
D
v1.2.0  
devil_gong 已提交
232 233 234 235 236 237 238
     * @author   Devil
     * @blog    http://gong.gg/
     * @version 1.0.0
     * @date    2018-09-29
     * @desc    description
     * @param   [array]          $where [条件]
     */
D
devil 已提交
239
    public static function PayLogTotal($where = [])
D
v1.2.0  
devil_gong 已提交
240
    {
D
devil 已提交
241
        return (int) Db::name('PayLog')->where($where)->count();
D
v1.2.0  
devil_gong 已提交
242 243 244
    }
}
?>