🔓 Ultimate Webshell - Penetration Testing Tool

📖 File Reader

<?php
namespace app\api\common;
use app\api\model\ModGoodsAct;
use app\BaseController;
use think\Facade\Db;
use think\facade\Session;
use think\facade\View;

class Common_order extends BaseController
{
    /**
     * 商品检测
     * @param array $goods_list 产品信息
     */
    public function order_detection($goods_list=[])
    {
        foreach ($goods_list as $k => $v){
            if (!empty($v["guige_id"])){
                $goods_stocks = db::name("goods_guige_value")->where("id = $v[guige_id]")->value("stocks");
            }else {
                $goods_stocks = db::name("goods")->where("goods_id = $v[goods_id]")->value("stocks");
            }
            $pay_num = $v["goods_sum"];
            if ($pay_num > $goods_stocks){
                $data = [
                    'code'=>400,
                    'msg'=>'【'.$v["name"].'】库存不足',
                ];
                return $data;
            }
        }
        $data = [
            'code'=>200,
            'msg'=>'ok',
        ];
        return $data;
    }

    /**
     * 订单价格计算
     * @param array $goods_list 产品信息
     * @param int $user_card_id 会员优惠卷id
     * @param int $user_id 会员id
     * @param int $integral 使用积分
     */
    public function order_price($goods_list=[],$user_card_id=0,$user_id=0,$integral=0)
    {
        //积分专区分类
//        $jifen_sublevel_act_id = ModGoodsAct::sublevel_act_id(52,1);
//        $jifen_sublevel_act_arr = explode(',',$jifen_sublevel_act_id);
        $jifen_sublevel_act_arr = [];
        $integral_maximum = 0;//最大可使用积分
        $order_price = 0;//订单总价格
        foreach ($goods_list as $k => $v){
            if ($v["guige_price"] > 0 ){
                $order_price += $v["guige_price"] * $v["goods_sum"];
            }else{
                $order_price += $v["price"] * $v["goods_sum"];
            }
            //积分可使用积分
            foreach ($jifen_sublevel_act_arr as $v2){
                if ($v["act_id"] == $v2){
                    if ($v["guige_price"] > 0 ){
                        $integral_maximum += $v["guige_price"] * $v["goods_sum"];
                    }else{
                        $integral_maximum += $v["price"] * $v["goods_sum"];
                    }
                }
            }
        }
        /*检测最大可使用积分*/
        if ($integral_maximum > 0){
            if (!empty($user_id)){
                $user_integral = db::name("user")->where("user_id = $user_id")->value("integral");
                if ($integral_maximum >= $user_integral){
                    $integral_maximum = $user_integral;
                }
            }else{
                $integral_maximum = 0;
            }
        }
        /*会员使用积分抵扣*/
        if ($integral > 0){
            $order_price -= $integral;
            if ($order_price <= 0){
                $order_price = 0;
            }
        }else{
            $integral = 0;
        }
        /*优惠卷优惠*/
        if (!empty($user_card_id)){
            $price_yh = db::name("user_activity_preferential_card")->where("id = $user_card_id")->value("price_yh");
            $order_price = $order_price-$price_yh;
        }
        /*会员折扣计算*/
        $price_vip_discount = 0;//vip折扣金额
        if (!empty($user_id)){
            $user_info = db::name("user")->alias("a")
                ->join("user_rank b","a.rank_id = b.rank_id","LEFT")
                ->field("a.user_id,b.name as rank_name,bili_discount")
                ->where("a.user_id = $user_id")
                ->find();
            $price_vip_discount = substr(sprintf("%.3f", $order_price * $user_info["bili_discount"]), 0, -1);
            $order_price = $order_price - $price_vip_discount;
        }
        $data = [
            'order_price'=>substr(sprintf("%.3f", $order_price), 0, -1),
            'price_vip_discount'=>$price_vip_discount,
            'integral_maximum'=>$integral_maximum,
            'integral'=>$integral,
        ];
        return $data;
    }

    /**
     * 会员级别处理
     * @param $user_id 会员id
     * @param $buy_num 购买数量
     * @param $primeval_rank_id 原始会员id
     */
    public function rank_upload($user_id,$buy_num,$primeval_rank_id)
    {
        //平台设置的升级规则
        $config = Common_config::config("'v1','v2','v3','v4','v5','v6','v7','v8','v9'");
        $rank_id = 0;
        if ($buy_num >= $config["v1"] && !empty($config["v1"])){
            $rank_id = 1;
        }
        if ($buy_num >= $config["v2"] && !empty($config["v2"])){
            $rank_id = 2;
        }
        if ($buy_num >= $config["v3"] && !empty($config["v3"])){
            $rank_id = 3;
        }
        if ($buy_num >= $config["v4"] && !empty($config["v4"])){
            $rank_id = 4;
        }
        if ($buy_num >= $config["v5"] && !empty($config["v5"])){
            $rank_id = 5;
        }
        if ($buy_num >= $config["v6"] && !empty($config["v6"])){
            $rank_id = 6;
        }
        if ($buy_num >= $config["v7"] && !empty($config["v7"])){
            $rank_id = 7;
        }
        if ($buy_num >= $config["v8"] && !empty($config["v8"])){
            $rank_id = 8;
        }
        if ($buy_num >= $config["v9"] && !empty($config["v9"])){
            $rank_id = 9;
        }
        if (!empty($rank_id)){
            $info = [
                'priority_rank_id_time'=>strtotime(date('Y-m-d H:i:s',strtotime('+6 month'))),
                'rank_id_priority'=>$rank_id,
            ];
            db::name("user")->where("user_id = $user_id")->data($info)->update();
            /*创建升级记录*/
            $this->user_rank_upgrade_log($user_id,$rank_id,$primeval_rank_id);
        }
        return 'ok';
    }

    /**
     * 多店铺订单支付成功拆单处理
     * @param $order_id 订单id
     * @return void
     */
    public function order_chai($order_id=0)
    {
        $order_info = db::name("order")->where("order_id = $order_id and is_chai = 0")->find();
        if (!empty($order_info)){
            $order_goods = db::name("order_goods")->alias("a")
                ->join("goods b","a.goods_id = b.goods_id","LEFT")
                ->field("a.*,b.name,b.shop_id")
                ->where("a.order_id = $order_id")
                ->select()
                ->toArray();
            $shop_arr = [];
            foreach ($order_goods as $k => $v){
                $shop_arr[] = $v["shop_id"];
            }
            $shop_arr = array_unique($shop_arr);
            if (count($shop_arr) > 1){ //拆单处理
                foreach ($shop_arr as $k => $v){
                    $shop_id = $v;//店铺id
                    $order_price = 0;//订单总价
                    $goods_list = [];
                    foreach ($order_goods as $k2 => $v2){
                        if ($v2["shop_id"] == $shop_id){
                            $goods_list[] = $v2;
                            $order_price += $v2["price_one"] * $v2["num"];
                        }
                    }
                    //根据店铺订单总金额计算在总订单占比
                    $price_shop_bili = 0;
                    if ($order_price > 0 && $order_info["price"] > 0){
                        $price_shop_bili = substr(sprintf("%.3f", $order_price / $order_info["price"]), 0, -1);
                    }
                    /*创建新数据*/
                    $info = [
                        'order_sn'=>$order_info["order_sn"],
                        'shop_id'=>$shop_id,
                        'user_id'=>$order_info["user_id"],
                        'price'=>substr(sprintf("%.3f", $order_info["price"] * $price_shop_bili), 0, -1),
                        'price_vip_discount'=>substr(sprintf("%.3f", $order_info["price_vip_discount"] * $price_shop_bili), 0, -1),
                        'integral'=>substr(sprintf("%.3f", $order_info["integral"] * $price_shop_bili), 0, -1),
                        'address_id'=>$order_info["address_id"],
                        'warehouse_id'=>$order_info["warehouse_id"],
                        'address_name'=>$order_info["address_name"],
                        'address_phone'=>$order_info["address_phone"],
                        'province'=>$order_info["province"],
                        'city'=>$order_info["city"],
                        'district'=>$order_info["district"],
                        'address'=>$order_info["address"],
                        'type_courier'=>$order_info["type_courier"],
                        'state'=>$order_info["state"],
                        'describe'=>$order_info["describe"],
                        'pay_way'=>$order_info["pay_way"],
                        'pay_time'=>$order_info["pay_time"],
                        'add_time'=>time(),
                    ];
                    $order_id_new = db::name("order")->insertGetId($info);
                    foreach ($goods_list as $k3 => $v3){
                        $info_goods = [
                            'order_id'=>$order_id_new,
                            'goods_id'=>$v3["goods_id"],
                            'goods_guige_id'=>$v3["goods_guige_id"],
                            'goods_name'=>$v3["goods_name"],
                            'goods_guige_name'=>$v3["goods_guige_name"],
                            'goods_img'=>$v3["goods_img"],
                            'price_one'=>$v3["price_one"],
                            'num'=>$v3["num"],
                            'time_add'=>time(),
                        ];
                        db::name("order_goods")->insert($info_goods);
                    }
                }
                db::name("order")->where("order_id = $order_id")->update(['is_chai'=>1,'time_chai'=>time()]);
            }else{
                db::name("order")->where("order_id = $order_id")->update(['shop_id'=>$shop_arr[0]]);
            }
        }
        return 'ok';
    }
}