文件
mashangyoujiu/Application/Common/Model/RetailGoodsGiftsActivityModel.class.php

447 行
14 KiB
PHP
可执行文件

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

<?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;
}
}