📖 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';
}
}