| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 | <?phpnamespace app\admin\service\order;use app\model\PayDetail;use support\Db;class PayDetailService{    public static function checkPaying()    {        Db::beginTransaction();        try {            $timeUnix = strtotime("-30 minutes");            $payDetails = PayDetail::where('pay_status', 'WAITING')                ->where('pay_addtimes', '<', $timeUnix)                ->get();            foreach ($payDetails as $payDetail) {                // 订单主表                PayDetail::where('pay_id', $payDetail->pay_id)->update([                    'pay_status' => 'CANCEL',                ]);            }            Db::commit();        } catch (\Exception $e) {            Db::rollBack();        }    }    /**     * @Desc 搜索指定时间的付款订单ID     * @Author Gorden     * @Date 2024/10/24 15:12     *     * @param $timeStart     * @param $timeEnd     * @return array     */    public static function getPayOrderId($timeStart, $timeEnd)    {        $payDetails = PayDetail::whereRaw('CAST(UNIX_TIMESTAMP(pay_paytimes) as SIGNED) > ? ', [$timeStart])            ->whereRaw('CAST(UNIX_TIMESTAMP(pay_paytimes) as SIGNED) < ? ', [$timeEnd])            ->where('pay_status', 'SUCCESS')            ->select('join_pay_object_json')            ->get()            ->toArray();        $orderIds = [];        foreach ($payDetails as $detail) {            if (!empty($detail['join_pay_object_json']) && is_json($detail['join_pay_object_json'])) {                $payObjectJson = json_decode($detail['join_pay_object_json'], true);                if (!empty($payObjectJson['order_id']) && !in_array($payObjectJson['order_id'], $orderIds)) {                    $orderIds[] = $payObjectJson['order_id'];                }            }        }        return $orderIds;    }    /**     * @Desc 获取支付方式     * @Author Gorden     * @Date 2024/10/24 16:12     *     * @param $groupId     * @param $orderId     * @return array     */    public static function getPayWay($groupId, $orderId)    {        $payDetails = PayDetail::where('join_pay_order_id', $groupId)            ->whereJsonContains('join_pay_object_json->order_id', $orderId)            ->where('pay_category', '<>', 'REFUND')            ->where('pay_status', 'SUCCESS')            ->select('pay_id', 'pay_category', 'pay_prepayid', 'pay_paytimes', 'pay_status', 'pay_amount', 'pay_extend_json')            ->get()            ->toArray();        $data = [];        if (count($payDetails) > 1) {            $data['payWay'] = "组合支付";        }        foreach ($payDetails as $detail) {            $data['pay_paytimes'] = $detail['pay_paytimes'];            $data['pay_status'] = $detail['pay_status'];            $data['pay_amount'] = $detail['pay_amount'];            $data['pay_category'] = $detail['pay_category'];            $payWay = '';            if (in_array($detail['pay_prepayid'], ['WXPAY', 'ALIPAY', 'OFFLINE_WXPAY', 'OFFLINE_ALIPAY', 'MONEY', 'OFFLINE'])) {                $payWay = $detail['pay_prepayid'];            } else {                $prepayid = explode('-', $detail['pay_prepayid']);                if (!empty($prepayid[1]) && in_array($prepayid[1], ['CASH', 'WELFARE', 'QRCODE', 'NONE'])) {                    $payWay = $prepayid[1];                }            }            $payWay = OrderService::$payWay[$payWay];            if (!empty($data['payWay']) && $data['payWay'] == '组合支付') {                $data['payWayDesc'] = $payWay . '(¥' . $detail['pay_amount'] . '),';            } else {                $data['payWay'] = $payWay;            }        }        return $data;    }}
 |