• 如果一些复杂的数据查询不好用数组,那就用字符串拼接,灵活方便


    /**
     * 查询订单是否过期
     */
    public function checkOrderStatus() {
        if (!$group_order_id = $_POST['group_order_id']) {
            $this->json->printOutError('缺少参数', 10001);
        }
        $group_order      = M('group_order');
        $group_order_info = $group_order->where(['id' => $group_order_id])->find();
        if (!$group_order_info) {
            $this->json->printOutError('订单信息不存在', 10002);
        }
        if ((int)$group_order_info['ugroup_inc_id'] === 0) { // 发起团
            $leader_order_id = $group_order_id;
        } else {
            $leader_order_id = $group_order_info['ugroup_inc_id'];
        }
        // 获取相关团的数据
        $capture_group_order = $group_order
            ->where('is_pay = 1 and status = 1 and expired_time < '.time().' and ( id = '.$leader_order_id.' or ugroup_inc_id ='.$leader_order_id.' )')
            ->select();
    //        setlog($group_order->getLastSql());
    
        // todo改造,成功一条,commit一条
        $error_msg_arr = [];
        $success_count = 0;
        $fail_count = 0;
        if ($capture_group_order) {
            $group_purchase = M('group_purchase');
            $group_reward   = M('group_reward');
            vendor('Func.WxPay');
            foreach ($capture_group_order as $k=>$v) {
                M()->startTrans();
                // step1 修改订单状态
                $edit_data = [
                    'status' => -2,
                    'updatetime' => time()
                ];
                $edit_group_order_flag = $group_order
                    ->where(['id'=>$v['id']])
                    ->save($edit_data);
                if ($edit_group_order_flag === false) {
                    M()->rollback();
                    $error_msg_arr[] = date('Y-m-d H:i:s').'-清理过期时间未拼团成功订单:修改状态不成功';
                    $fail_count++;
                    continue;
                }
    
                // step2 撤回已占用库存
                $group_flag = $group_purchase->where(['id'=>$v['group_id']])->setDec('buyed_stock');
                if ($group_flag === false) {
                    M()->rollback();
                    $error_msg_arr[] = date('Y-m-d H:i:s').'-清理未支付订单:修改库存失败';
                    $fail_count++;
                    continue;
                }
    
                // step3 撤回已占用惊喜金额
                if ((int)$v['reward_id'] > 0) {
                    $reward_edit_data  = [
                        'status' => 1
                    ];
                    $group_reward_flag = $group_reward->where(['id' => $v['reward_id']])->save($reward_edit_data);
                    if ($group_reward_flag === false) {
                        M()->rollback();
                        $error_msg_arr[] = date('Y-m-d H:i:s').'-清理未支付订单:修改惊喜失败';
                        $fail_count++;
                        continue;
                    }
                }
                // step4 退回付款金额
                $refund_result = WxPay::refundOrder($v['billno'], $v['payed_price'], $v['payed_price']);
                if ((int)$refund_result['num'] === 1) {
                    $refund_order_edit_data = [
                        'refund_transaction_id' => $refund_result['refund_id'],
                        'refund_order_sn'       => $refund_result['refund_no'],
                        'is_refund'             => 1,
                    ];
                    $refund_order_edit_flag = $group_order->where(['id' => $v['id']])->save($refund_order_edit_data);
                    if ($refund_order_edit_flag === false) { // 如果失败,再改一次
                        $refund_order_edit_data = [
                            'is_refund'             => 1,
                        ];
                        $group_order->where(['id' => $v['id']])->save($refund_order_edit_data);
                    }
                } else {
                    M()->rollback();
                    $error_msg_arr[] = date('Y-m-d H:i:s').'-清理未支付订单:退款失败'.$refund_result['desc'];
                    $fail_count++;
                    continue;
                }
                M()->commit();
                $success_count++;
                $error_msg_arr[] = date('Y-m-d H:i').'-清理未支付订单:订单号,'.$v['billno'].'拼团失败,退款成功';
            }
            $error_msg_arr[] = date('Y-m-d H:i').'-清理过期时间未拼团成功订单:本次共清理'.count($capture_group_order).'个拼团失败订单'.',成功了'.$success_count.',失败了'.$fail_count.'个'.PHP_EOL;
            setlog($_POST,$error_msg_arr,__METHOD__);
            // 再次查询状态
            $group_order_info = $group_order->where(['id' => $group_order_id])->find();
        }
        $this->json->printOutSuccess($group_order_info);
    }
    

    多尝试sql拼接,很好的解决复杂的业务问题。记得多打log测试。

  • 相关阅读:
    『NiFi 节点本地流与集群流不一致导致集群加入失败』问题解决
    『NiFi 学习之路』简介
    『NiFi 学习之路』自定义 —— 组件的自定义及使用
    『NiFi 学习之路』使用 —— 主要组件的使用
    『NiFi 学习之路』把握 —— 架构及主要部件
    TabLayout与ViewPager同步后Tab的标题不显示
    Word 为标题设置段前段后间距设置与异常
    Word 中将正文中的参考文件标号链接到参考文献具体条目
    Linux字体美化实战(Fontconfig配置)(转)
    Linux字体美化实战(Fontconfig配置)(转)
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/10945873.html
Copyright © 2020-2023  润新知