PayLogService.php 10.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
     * @param   [string]            $subject        [业务订单名称]
D
devil 已提交
35
     * @param   [string]            $business_type  [业务类型,字符串(如:订单、钱包充值、会员购买、等...)]
D
devil 已提交
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
     * @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'         => '业务类型为空',
            ],
            [
63
                'checked_type'      => 'isset',
D
devil 已提交
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
                'key_name'          => 'total_price',
                'error_msg'         => '业务金额为空',
            ],
        ];
        $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 已提交
122 123 124 125 126 127
     * @param   [string]            $trade_no       [支付平台交易号]
     * @param   [string]            $buyer_user     [支付平台用户帐号]
     * @param   [float]             $pay_price      [支付金额]
     * @param   [string]            $payment        [支付方式标记]
     * @param   [string]            $payment_name   [支付方式名称]
     */
D
devil 已提交
128
    public static function PayLogSuccess($params = [])
D
devil_gong 已提交
129
    {
D
devil 已提交
130 131 132 133 134 135 136
        // 参数
        if(empty($params['log_id']))
        {
            return DataReturn('日志id有误', -100);
        }

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

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

        // 获取数据列表
D
devil 已提交
186
        $data = Db::name('PayLog')->where($where)->field($field)->limit($m, $n)->order($order_by)->select();
D
v1.2.0  
devil_gong 已提交
187 188
        if(!empty($data))
        {
D
Devil 已提交
189 190 191
            // 字段列表
            $keys = ArrayKeys($data);

D
devil 已提交
192 193 194 195 196 197 198 199 200
            // 获取支付业务关联数据
            $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
Devil 已提交
201 202 203 204 205 206

                // 用户列表
            if(in_array('user_id', $keys) && isset($params['is_public']) && $params['is_public'] == 0)
            {
                $user_list = UserService::GetUserViewInfo(array_column($data, 'user_id'));
            }
D
devil 已提交
207 208 209
            }

            // 循环处理数据
D
v1.2.0  
devil_gong 已提交
210 211
            foreach($data as &$v)
            {
D
devil 已提交
212 213 214 215 216
                // 用户信息
                if(isset($v['user_id']))
                {
                    if(isset($params['is_public']) && $params['is_public'] == 0)
                    {
D
Devil 已提交
217
                        $v['user'] = (!empty($user_list) && is_array($user_list) && array_key_exists($v['user_id'], $user_list)) ? $user_list[$v['user_id']] : [];
D
devil 已提交
218 219
                    }
                }
D
v1.2.0  
devil_gong 已提交
220

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

                // 时间
D
devil 已提交
225 226 227
                $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 已提交
228 229 230 231 232 233
            }
        }
        return DataReturn('处理成功', 0, $data);
    }

    /**
D
devil_gong 已提交
234
     * 总数
D
v1.2.0  
devil_gong 已提交
235 236 237 238 239 240 241
     * @author   Devil
     * @blog    http://gong.gg/
     * @version 1.0.0
     * @date    2018-09-29
     * @desc    description
     * @param   [array]          $where [条件]
     */
D
devil 已提交
242
    public static function PayLogTotal($where = [])
D
v1.2.0  
devil_gong 已提交
243
    {
D
devil 已提交
244
        return (int) Db::name('PayLog')->where($where)->count();
D
v1.2.0  
devil_gong 已提交
245
    }
D
devil 已提交
246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269

    /**
     * 关闭
     * @author   Devil
     * @blog    http://gong.gg/
     * @version 1.0.0
     * @date    2018-12-18
     * @desc    description
     * @param   [array]          $params [输入参数]
     */
    public static function PayLogClose($params = [])
    {
        // 参数是否有误
        if(empty($params['ids']))
        {
            return DataReturn('操作id有误', -1);
        }
        // 是否数组
        if(!is_array($params['ids']))
        {
            $params['ids'] = explode(',', $params['ids']);
        }

        // 关闭操作
D
devil 已提交
270
        if(Db::name('PayLog')->where(['id'=>$params['ids'], 'status'=>0])->update(['status'=>2, 'close_time'=>time()]))
D
devil 已提交
271 272 273 274 275 276
        {
            return DataReturn('关闭成功');
        }

        return DataReturn('关闭失败', -100);
    }
D
v1.2.0  
devil_gong 已提交
277 278
}
?>