447 行
14 KiB
PHP
可执行文件
447 行
14 KiB
PHP
可执行文件
<?php
|
||
|
||
/**
|
||
* 促销满赠
|
||
* @author nianyi
|
||
* @create_time 2020年06月17日
|
||
*/
|
||
|
||
|
||
/***
|
||
* _ooOoo_
|
||
* o8888888o
|
||
* 88" . "88
|
||
* (| -_- |)
|
||
* O\ = /O
|
||
* ___/`---'\____
|
||
* . ' \\| |// `.
|
||
* / \\||| : |||// \
|
||
* / _||||| -:- |||||- \
|
||
* | | \\\ - /// | |
|
||
* | \_| ''\---/'' | |
|
||
* \ .-\__ `-` ___/-. /
|
||
* ___`. .' /--.--\ `. . __
|
||
* ."" '< `.___\_<|>_/___.' >'"".
|
||
* | | : `- \`.;`\ _ /`;.`/ - ` : | |
|
||
* \ \ `-. \_ __\ /__ _/ .-` / /
|
||
* ======`-.____`-.___\_____/___.-`____.-'======
|
||
* `=---='
|
||
* .............................................
|
||
* 佛曰:bug泛滥,我已瘫痪!
|
||
*/
|
||
|
||
namespace Common\Model;
|
||
|
||
use Think\Model\ViewModel;
|
||
use Common\Model\RetailSellModel;
|
||
use Common\Model\RetailGoodsGiftsModel;
|
||
use Common\Model\RetailShoppingModel;
|
||
//[1.4.98]
|
||
class RetailGoodsGiftsActivityModel extends BaseModel
|
||
{
|
||
protected $tableName = 'retail_goods_gifts_activity';
|
||
|
||
/*
|
||
* 获取促销赠送信息
|
||
* */
|
||
public function getGoodsGiftsActivityList($where, $field, $page = 1, $pageSize = 10)
|
||
{
|
||
$list = $this->alias('rgga')
|
||
->field($field)
|
||
->where($where)
|
||
->order('rgga.id desc')
|
||
->page($page, $pageSize)
|
||
->select();
|
||
|
||
$total = $this->alias('rgga')
|
||
->where($where)
|
||
->count();
|
||
|
||
$result['list'] = $list;
|
||
$result['total'] = $total;
|
||
return $result;
|
||
}
|
||
|
||
/*
|
||
* 判断活动是否开启
|
||
* $type 1=线上
|
||
* */
|
||
public function judgeGoodsGiftsActivity($goods_id, $type = 1)
|
||
{
|
||
$field = [
|
||
'rgga.id as activity_id',
|
||
'rgga.goods_gifts_json',
|
||
'rgga.goods_num_min',
|
||
'rgga.time_limit',
|
||
'rgga.start_time',
|
||
'rgga.end_time',
|
||
'rgga.online_promotion',
|
||
'rgga.online_buy_limit',
|
||
'rgga.offline_promotion',
|
||
'rgga.offline_buy_limit',
|
||
'rgga.sku_info',
|
||
];
|
||
|
||
$where['rgga.goods_id'] = $goods_id;
|
||
$where['rgga.status'] = 1;
|
||
$where['rgga.is_del'] = 1;
|
||
|
||
$list = $this->alias('rgga')
|
||
->field($field)
|
||
->where($where)
|
||
->find();
|
||
|
||
if(!$list){
|
||
$result['msg'] = '该商品没有促销赠送活动';
|
||
$result['code'] = 0;
|
||
$result['data'] = (object)array();
|
||
return $result;
|
||
}
|
||
|
||
if($list['time_limit'] == 1){
|
||
if( time() < strtotime( $list['start_time']) ){
|
||
$result['msg'] = '活动尚未开始!';
|
||
$result['code'] = 0;
|
||
$result['data'] = (object)array();
|
||
return $result;
|
||
}
|
||
if( time() > strtotime( $list['end_time']) ){
|
||
$result['msg'] = '活动已经结束!';
|
||
$result['code'] = 0;
|
||
$result['data'] = (object)array();
|
||
return $result;
|
||
}
|
||
}
|
||
|
||
if($type == 1){
|
||
if((int)$list['online_promotion'] !== 1){ // 线上促销
|
||
$result['msg'] = '线上促销未开启!';
|
||
$result['code'] = 0;
|
||
$result['data'] = (object)array();
|
||
return $result;
|
||
}
|
||
} else {
|
||
if((int)$list['offline_promotion'] !== 1){ // 线下促销
|
||
$result['msg'] = '线下促销未开启!';
|
||
$result['code'] = 0;
|
||
$result['data'] = (object)array();
|
||
return $result;
|
||
}
|
||
}
|
||
|
||
$list['giftsList'] = json_decode($list['goods_gifts_json'], true);
|
||
unset($list['goods_gifts_json']);
|
||
|
||
$result['msg'] = '信息获取成功!';
|
||
$result['code'] = 1;
|
||
$result['data'] = $list;
|
||
return $result;
|
||
}
|
||
|
||
// 线上是否满足购买次数
|
||
public function judgeOnlineNumber($goods_id, $sku_id, $num, $gifts_activity_id, $uid)
|
||
{
|
||
$where['id'] = $gifts_activity_id;
|
||
$where['goods_id'] = $goods_id;
|
||
$where['online_buy_limit'] = 1; // 线上活动
|
||
$where['status'] = 1;
|
||
$where['is_del'] = 1;
|
||
|
||
$activityData = $this
|
||
->field('goods_num_min, online_promotion, online_buy_limit, goods_gifts_json')
|
||
->where($where)
|
||
->order('id desc')
|
||
->find();
|
||
|
||
if(!$activityData){
|
||
$result['msg'] = '促销活动信息有误';
|
||
$result['code'] = 0;
|
||
return $result;
|
||
}
|
||
|
||
//查询出订单信息
|
||
$SellModel = new RetailSellModel();
|
||
$map = array(
|
||
'goods_gifts_id' => $gifts_activity_id,
|
||
'uid'=> $uid,
|
||
'pay_type'=> ['GT', 0],
|
||
);
|
||
$sellCount = $SellModel->getCount($map);
|
||
|
||
if($activityData['online_promotion'] == 1){
|
||
if( !$activityData['online_buy_limit'] > $sellCount){
|
||
$result['msg'] = '参与次数过多';
|
||
$result['code'] = 0;
|
||
return $result;
|
||
}
|
||
}
|
||
|
||
$giftsList = json_decode($activityData['goods_gifts_json'], true);
|
||
|
||
// 判断赠品数量是否充足
|
||
$give_number = floor($num/$activityData['goods_num_min']); // 应赠送次数
|
||
|
||
$RetailGoodsGiftsModel = new RetailGoodsGiftsModel();
|
||
$sku_arr = [];
|
||
foreach ($giftsList as &$value) {
|
||
// 获取赠品库存
|
||
$gifts_number = $RetailGoodsGiftsModel->getFind(['id' => $value['gifts_id'] ], 'remain_inventory');
|
||
if(!$gifts_number){
|
||
$result['msg'] = '活动赠品错误,请联系客服!';
|
||
$result['code'] = 0;
|
||
return $result;
|
||
}
|
||
|
||
if($gifts_number['remain_inventory'] < $value['gifts_num'] * $give_number) {
|
||
$result['msg'] = '赠品数量不足!';
|
||
$result['code'] = 0;
|
||
return $result;
|
||
}
|
||
$sku_arr[] = $value['sku_id'];
|
||
}
|
||
|
||
if($sku_id){
|
||
if(!in_array($sku_id, $sku_arr)){
|
||
$result['msg'] = '改规格不可以参加此活动!';
|
||
$result['code'] = 0;
|
||
$result['data'] = [];
|
||
return $result;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
}
|
||
|
||
// 是否超标赠送
|
||
public function judgeOfflineNumber($activity_id, $goods_number, $gifts_id, $gifts_number)
|
||
{
|
||
$where['id'] = $activity_id;
|
||
$where['is_del'] = 1;
|
||
$where['status'] = 1;
|
||
$where['offline_promotion'] = 1;
|
||
|
||
$activityData = $this->alias('rgga')
|
||
->field('offline_promotion, offline_buy_limit')
|
||
->where($where)
|
||
->order('rgga.id desc')
|
||
->find();
|
||
|
||
if(!$activityData){
|
||
$result['msg'] = '线下促销未开启!';
|
||
$result['code'] = 0;
|
||
$result['data'] = [];
|
||
return $result;
|
||
}
|
||
|
||
$giftsList = json_decode($activityData['goods_gifts_json'], true);
|
||
|
||
// 赠送门槛
|
||
if($activityData['goods_num_min']){
|
||
|
||
if($activityData['goods_num_min'] > $goods_number){
|
||
$result['msg'] = '未达到赠送门槛!';
|
||
$result['code'] = 0;
|
||
$result['data'] = [];
|
||
return $result;
|
||
}
|
||
|
||
$give_number = floor($goods_number/$activityData['goods_num_min']); // 应赠送次数
|
||
$gifts_arr = [];
|
||
foreach ($giftsList as &$value) {
|
||
if($value['gifts_id'] == $gifts_id){
|
||
if($gifts_number > $value['gifts_num'] * $give_number) {
|
||
$result['msg'] = '赠送数量过多!';
|
||
$result['code'] = 0;
|
||
$result['data'] = [];
|
||
return $result;
|
||
}
|
||
|
||
$gifts_arr[] = $value['gifts_id'];
|
||
}
|
||
}
|
||
|
||
if(!in_array($gifts_id, $gifts_arr)){
|
||
$result['msg'] = '赠品不对哦!';
|
||
$result['code'] = 0;
|
||
$result['data'] = [];
|
||
return $result;
|
||
}
|
||
}
|
||
|
||
$result['msg'] = 'OK!';
|
||
$result['code'] = 1;
|
||
$result['data'] = [];
|
||
return $result;
|
||
|
||
|
||
|
||
|
||
}
|
||
|
||
/* ************************************************** 小程序接口处 ************************************************** */
|
||
/* *
|
||
* 判断活动是否开启
|
||
* $type 1=线上
|
||
* */
|
||
public function judgeGoodsGiftsActivityMini($goods_id, $sku_id = '')
|
||
{
|
||
$field = [
|
||
'rgga.id as activity_id',
|
||
'rgga.goods_gifts_json',
|
||
'rgga.goods_num_min',
|
||
'rgga.time_limit',
|
||
'rgga.start_time',
|
||
'rgga.end_time',
|
||
'rgga.online_promotion',
|
||
'rgga.online_buy_limit',
|
||
];
|
||
|
||
$where['rgga.goods_id'] = $goods_id;
|
||
$where['rgga.status'] = 1;
|
||
$where['rgga.is_del'] = 1;
|
||
|
||
if($sku_id){
|
||
$where['_string'] = 'FIND_IN_SET('."'$sku_id'".', rgga.sku_ids)';
|
||
}
|
||
|
||
$list = $this->alias('rgga')
|
||
->field($field)
|
||
->where($where)
|
||
->find();
|
||
|
||
if(!$list){
|
||
$result['msg'] = '该商品没有促销赠送活动';
|
||
$result['code'] = 0;
|
||
$result['data'] = (object)array();
|
||
return $result;
|
||
}
|
||
|
||
if($list['time_limit'] == 1){
|
||
if( time() < strtotime( $list['start_time']) ){
|
||
$result['msg'] = '活动尚未开始!';
|
||
$result['code'] = 0;
|
||
$result['data'] = (object)array();
|
||
return $result;
|
||
}
|
||
if( time() > strtotime( $list['end_time']) ){
|
||
$result['msg'] = '活动已经结束!';
|
||
$result['code'] = 0;
|
||
$result['data'] = (object)array();
|
||
return $result;
|
||
}
|
||
}
|
||
|
||
if((int)$list['online_promotion'] !== 1){ // 线上促销
|
||
$result['msg'] = '线上促销未开启!';
|
||
$result['code'] = 0;
|
||
$result['data'] = (object)array();
|
||
return $result;
|
||
}
|
||
|
||
$giftsList = json_decode($list['goods_gifts_json'], true);
|
||
unset($list['goods_gifts_json']);
|
||
|
||
$RetailGoodsGiftsModel = new RetailGoodsGiftsModel();
|
||
foreach($giftsList as &$value){
|
||
// 实时库存更新
|
||
$remain_inventory = $RetailGoodsGiftsModel->getFind(['id' => $value['goods_gifts_id']], 'remain_inventory');
|
||
if($remain_inventory){
|
||
$value['remain_inventory'] = $remain_inventory['remain_inventory'];
|
||
} else {
|
||
$value['remain_inventory'] = 0;
|
||
}
|
||
|
||
unset($value['specifications']);
|
||
unset($value['status']);
|
||
unset($value['created_at']);
|
||
unset($value['checked']);
|
||
unset($value['goods_num']);
|
||
unset($value['sku_num']);
|
||
}
|
||
|
||
$list['giftsList'] = $giftsList;
|
||
|
||
$result['msg'] = '信息获取成功!';
|
||
$result['code'] = 1;
|
||
$result['data'] = $list;
|
||
return $result;
|
||
}
|
||
|
||
// 赠品数据 sell表用
|
||
/* **
|
||
* When I wrote this code, only God and I understood what I was doing
|
||
* Now, God only knows
|
||
*/
|
||
public function getActivityForSell($shopping_ids = '')
|
||
{
|
||
$giftsArr = []; // 返回专用
|
||
$shopping_ids = json_decode($shopping_ids, true);
|
||
// 获取购买的商品和参与的满赠活动
|
||
$ShoppingModel = new RetailShoppingModel();
|
||
$GoodsGiftsModel = new RetailGoodsGiftsModel();
|
||
$where['id'] = ['in', $shopping_ids];
|
||
$where['gifts_activity_id'] = ['GT', 0];
|
||
$goodsList = $ShoppingModel->getSelect($where, 'goods_id, sku_id, num, gifts_activity_id');
|
||
|
||
if($goodsList){
|
||
$giftsList = [];
|
||
foreach ($goodsList as $key => $value) {
|
||
// 获取活动应送赠品
|
||
$giftsList[] = $this->getFind(['id' => $value['gifts_activity_id'] ], 'goods_gifts_json, goods_num_min');
|
||
if($giftsList){
|
||
$giftsList[$key]['goods_gifts'] = json_decode($giftsList[$key]['goods_gifts_json'], true);
|
||
$giftsList[$key]['give_multiple'] = floor($value['num'] / $giftsList[$key]['goods_num_min']);
|
||
$giftsList[$key]['gifts_activity_id'] = $value['gifts_activity_id'];
|
||
}
|
||
}
|
||
|
||
dump($giftsList);
|
||
|
||
// 处理赠品信息
|
||
$i = 0;
|
||
foreach ($giftsList as $key => $value) {
|
||
foreach ($value['goods_gifts'] as $k => $v) {
|
||
$giftsArr[$i]['goods_gifts_id'] = $v['gifts_id'];
|
||
$giftsArr[$i]['gifts_num'] = $v['gifts_num'];
|
||
$giftsArr[$i]['gifts_give_num'] = $v['gifts_num'] * $value['give_multiple'];
|
||
$giftsArr[$i]['retail_price'] = $v['retail_price'];
|
||
$giftsArr[$i]['gifts_activity_id'] = $value['gifts_activity_id'];
|
||
$giftsArr[$i]['goods_name'] = $value['goods_name'];
|
||
$giftsArr[$i]['sku_name'] = $value['sku_name'];
|
||
$giftsArr[$i]['goods_img'] = $value['goods_img'];
|
||
$i++ ;
|
||
}
|
||
}
|
||
}
|
||
|
||
// 赠品库存处理
|
||
$remain_inventory = [];
|
||
foreach ($giftsArr as &$value) {
|
||
$remain_inventory[ $value['goods_gifts_id'] ] = $GoodsGiftsModel->getFind(['id' => $value['goods_gifts_id']], 'remain_inventory');
|
||
if(!$remain_inventory[ $value['goods_gifts_id'] ]){
|
||
$remain_inventory[ $value['goods_gifts_id'] ] = 0;
|
||
}
|
||
}
|
||
|
||
foreach ($giftsArr as &$value) {
|
||
if($remain_inventory[ $value['goods_gifts_id'] ]['remain_inventory'] >= $value['gifts_give_num']){
|
||
$value['fact_give_num'] = $value['gifts_give_num'];
|
||
$remain_inventory[ $value['goods_gifts_id'] ]['remain_inventory'] = $remain_inventory[ $value['goods_gifts_id'] ]['remain_inventory'] - $value['gifts_give_num'];
|
||
} else {
|
||
$value['fact_give_num'] = $remain_inventory[ $value['goods_gifts_id'] ]['remain_inventory'];
|
||
$remain_inventory[ $value['goods_gifts_id'] ]['remain_inventory'] = 0;
|
||
}
|
||
|
||
unset($value['gifts_num']);
|
||
|
||
if($value['fact_give_num'] == 0){ // 实际赠送为0时,删除赠品数据
|
||
unset($value);
|
||
}
|
||
}
|
||
return $giftsArr;
|
||
}
|
||
|
||
|
||
|
||
} |