Files
Smart-Farm/app/farm/model/Car.php
2025-12-22 14:32:54 +08:00

371 lines
9.5 KiB
PHP

<?php
namespace app\farm\model;
use app\BaseModel;
use app\shop\model\IntegralList;
use app\shop\model\SeckillList;
use think\facade\Db;
class Car extends BaseModel
{
//定义表名
protected $name = 'lbfarm_car';
/**
* @author chenniang
* @DataTime: 2020-09-29 11:04
* @功能说明:添加
*/
public function dataAdd($data){
$res = $this->insert($data);
return $res;
}
/**
* @author chenniang
* @DataTime: 2020-09-29 11:05
* @功能说明:编辑
*/
public function dataUpdate($dis,$data){
$res = $this->where($dis)->update($data);
return $res;
}
/**
* @author chenniang
* @DataTime: 2020-09-29 11:06
* @功能说明:列表
*/
public function dataList($dis,$page){
$data = $this->where($dis)->order('status desc,id desc')->paginate($page)->toArray();
return $data;
}
/**
* @author chenniang
* @DataTime: 2020-09-29 11:43
* @功能说明:
*/
public function dataInfo($dis){
$data = $this->where($dis)->find();
return !empty($data)?$data->toArray():[];
}
/**
* @author chenniang
* @DataTime: 2021-03-19 16:08
* @功能说明:开启默认
*/
public function updateOne($id){
$user_id = $this->where(['id'=>$id])->value('user_id');
$res = $this->where(['user_id'=>$user_id])->where('id','<>',$id)->update(['status'=>0]);
return $res;
}
/**
* @author chenniang
* @DataTime: 2022-01-10 15:19
* @功能说明:获取购物车内的价格
*/
public function carBreedPrice($user_id,$farmer_id){
$dis = [
'a.user_id' => $user_id,
'a.farmer_id' => $farmer_id,
'a.type' => 1,
'a.status' => 1
];
$data = $this->alias('a')
->join('lbfarm_breed b','a.goods_id = b.id')
->where($dis)
->field('(a.goods_num*b.price) as total_price')
->select()
->toArray();
return array_sum(array_column($data,'total_price'));
}
/**
* @author chenniang
* @DataTime: 2021-03-18 17:21
* @功能说明:购物车价格
*/
public function carPriceAndCount($user_id,$store_id,$is_car=0,$is_show=1,$no_i=1){
//查询积分活动
$integral_model = new IntegralList();
$kill_model = new SeckillList();
//选中
$list = $this->carList($user_id,$store_id,0,$is_show);
//所有 is_car0的时候也是选中
$data['list'] = $this->carList($user_id,$store_id,$is_car,$is_show);
//是否是秒杀商品
$have_kill = $kill_model->getBuyLimit($data['list']);
if(!empty($have_kill)){
$buy_limit = 0;
$no_i = 1;
$discount_add = 0;
}else{
$min = $integral_model->getBuyLimit($data['list']);
//获取是否允许原价购买 1允许 0不允许
$buy_limit = $min['buy_limit'];
$no_i = $buy_limit==1?$no_i:0;
//是否允许优惠活动叠加
$discount_add = $no_i==0?$min['discount_add']:1;
}
//积分抵扣掉的钱
$integral_discount_price = $kill_discount_price = 0;
//积分
$integral = 0;
if(!empty($data['list'])){
foreach ($data['list'] as &$vs){
$vs['member_discount'] = 100;
$vs['integral'] = $vs['i_price'] = $vs['integral_id'] = $vs['kill_atv_id'] = $v['integral_discount_price'] = 0;
$kill_list = $kill_model->atvIng($vs['goods_id'],$vs['spe_id']);
//秒杀
if(!empty($kill_list)){
$vs['true_price'] = $kill_list['price']*$vs['goods_num'];
$vs['kill_atv_id'] = $kill_list['id'];
$kill_discount_price = $vs['kill_discount_price'] = $vs['all_price'] - $vs['true_price'];
}else{
//查询正在进行中的积分活动
$info = $integral_model->atvIng($vs['goods_id'],$vs['spe_id']);
if(!empty($info)){
//使用积分抵扣掉的钱
$integral_discount_price += $vs['all_price'] - $info['price']*$vs['goods_num'];
//使用积分
$integral += $info['integral']*$vs['goods_num'];
//使用积分抵扣
if($buy_limit==0||$no_i==0){
$vs['true_price'] = $info['price']*$vs['goods_num'];
$vs['integral_id'] = $info['atv_id'];
}
}
}
$vs['kill_price'] = !empty($kill_list)?$kill_list['price']:0;
$vs['kill_end_time'] = !empty($kill_list)?$kill_list['end_time']:0;
$vs['integral'] = !empty($info['integral'])?$info['integral']:0;
$vs['i_price'] = !empty($info['price'])?$info['price']:0;
$vs['total_integral_discount_price'] = !empty($info['price'])?$vs['all_price'] - $info['price']*$vs['goods_num']:0;
$vs['total_integral'] = !empty($info['integral'])?$info['integral']*$vs['goods_num']:0;
}
}
//总的数量
$data['all_count'] = array_sum(array_column($data['list'],'goods_num'));
if($is_car==0){
$list = $data['list'];
}
//拼接订单
$data['list'] = $this->getFarmerCar($data['list']);
$data['kill_atv_id'] = !empty($kill_list)?$kill_list['id']:0;
$data['kill_over_time'] = !empty($kill_list)?$kill_list['over_time']:0;
//积分抵扣
$data['integral'] = $integral;
//积分抵扣多少钱
$data['integral_discount_price'] = round($integral_discount_price,2);
//
$data['kill_discount_price'] = round($kill_discount_price,2);
$data['buy_limit'] = $buy_limit;
$data['discount_add'] = $discount_add;
if(!empty($list)){
$data['car_price'] = round(array_sum(array_column($list,'true_price')),2);
//原价
$data['init_price'] = round(array_sum(array_column($list,'all_price')),2);;
//选中的数量
$data['car_count'] = array_sum(array_column($list,'goods_num'));
}else{
$data['init_price'] = 0;
$data['car_price'] = 0;
$data['car_count'] = 0;
$data['all_count'] = 0;
}
return $data;
}
/**
* @author chenniang
* @DataTime: 2022-02-23 11:26
* @功能说明:转换成农场格式
*/
public function getFarmerCar($car){
$farmer_model = new Farmer();
$arr = [];
foreach ($car as $value){
$arr[$value['farmer_id']]['goods_list'][] = $value;
$arr[$value['farmer_id']]['farmer_id'] = $value['farmer_id'];
}
foreach ($arr as &$vs){
$vs['farmer_info']= $farmer_model->dataInfo(['id'=>$vs['farmer_id']],'title,lng,lat,uniacid');
$vs['car_price'] = round(array_sum(array_column($vs['goods_list'],'true_price')),2);
//原价
$vs['init_price'] = round(array_sum(array_column($vs['goods_list'],'all_price')),2);
$vs['integral'] = round(array_sum(array_column($vs['goods_list'],'total_integral')),2);
$vs['integral_discount_price'] = round(array_sum(array_column($vs['goods_list'],'total_integral_discount_price')),2);
$vs['kill_discount_price'] = round(array_sum(array_column($vs['goods_list'],'kill_discount_price')),2);
//运费
$vs['freight'] = 0;
$vs['coupon_discount'] = 0;
}
return array_values($arr);
}
/**
* @author chenniang
* @DataTime: 2021-03-18 17:35
* @功能说明:购物车列表
*/
public function carList($user_id,$store_id=0,$all=0,$is_show=1){
$dis = [
'a.user_id' => $user_id,
'b.status' => 1,
'a.type' => 5,
'a.is_show' => $is_show,
'e.status' => 2
];
if($all==0){
$dis['a.status'] = 1;
}
if(!empty($store_id)){
$dis['d.store_id']= $store_id;
}
$data = $this->alias('a')
->join('lbfarm_shop_goods b','a.goods_id = b.id')
->join('lbfarm_v2_shop_spe_price c','a.spe_id = c.id','left')
->join('lbfarm_v2_goods_store d','a.goods_id = d.goods_id AND d.type=1')
->join('lbfarm_farmer e','d.store_id = e.id')
->where($dis)
->field('a.id,c.spe_id_1,b.send_tmpl_id,b.sale_num,b.true_sale_num,e.id as farmer_id,a.status,a.uniacid,a.goods_num,b.goods_name,b.cover,c.price,ROUND(c.price*a.goods_num,2) as all_price,ROUND(c.price*a.goods_num,2) as true_price,a.spe_id,a.goods_id,b.weight*a.goods_num as total_weight')
->group('a.id')
->select()
->toArray();
if(!empty($data)){
foreach ($data as &$v){
$v['all_sale_num'] = $v['sale_num']+$v['true_sale_num'];
$pec_id = explode('-',$v['spe_id_1']);
$spe_name = Db::name('lbfarm_v2_shop_spe')->where(['status'=>1])->where('id','IN',$pec_id)->column('title');
$v['spe_name'] = implode('-',$spe_name);
}
}
return $data;
}
}