www.lightcourse.com/app/common/model/Ppintuan.php

324 lines
10 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
/**
* 拼团活动模型
*
*/
namespace app\common\model;
use think\facade\Db;
/**
* ============================================================================
* 联课教育商城系统
* ============================================================================
* 版权所有 2022 刻羽互动科技有限公司,并保留所有权利。
* 网站地址: http://www.o1h.cn
* ----------------------------------------------------------------------------
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用 .
* 不允许对程序代码以任何形式任何目的的再发布。
* ============================================================================
* 数据层模型
*/
class Ppintuan extends BaseModel {
public $page_info;
const PINTUAN_STATE_CLOSE = 0;
const PINTUAN_STATE_NORMAL = 1;
const PINTUAN_STATE_CANCEL = 2;
private $pintuan_state_array = array(
self::PINTUAN_STATE_CLOSE => '已结束',
self::PINTUAN_STATE_NORMAL => '正常',
self::PINTUAN_STATE_CANCEL => '管理员关闭'
);
/**
* 读取拼团列表
* @access public
* @author o1h.cn
* @param array $condition 查询条件
* @param int $pagesize 分页数
* @param string $order 排序
* @param string $field 所需字段
* @return array 拼团列表
*/
public function getPintuanList($condition, $pagesize = null, $order = '', $field = '*') {
if ($pagesize) {
$res = Db::name('ppintuan')->field($field)->where($condition)->order($order)->paginate(['list_rows' => $pagesize, 'query' => request()->param()], false);
$pintuan_list = $res->items();
$this->page_info = $res;
} else {
$pintuan_list = Db::name('ppintuan')->field($field)->where($condition)->order($order)->select()->toArray();
}
if (!empty($pintuan_list)) {
for ($i = 0, $j = count($pintuan_list); $i < $j; $i++) {
$pintuan_list[$i] = $this->getPintuanExtendInfo($pintuan_list[$i]);
}
}
return $pintuan_list;
}
/**
* 根据条件读取限制折扣信息
* @access public
* @author o1h.cn
* @param array $condition 查询条件
* @return array 拼团信息
*/
public function getPintuanInfo($condition) {
$pintuan_info = Db::name('ppintuan')->where($condition)->find();
if(!empty($pintuan_info)){
$pintuan_info = $this->getPintuanExtendInfo($pintuan_info);
}
return $pintuan_info;
}
/**
* 根据拼团编号读取限制折扣信息
* @access public
* @author o1h.cn
* @param array $pintuan_id 限制折扣活动编号
* @return array 拼团信息
*/
public function getPintuanInfoByID($pintuan_id) {
if (intval($pintuan_id) <= 0) {
return null;
}
$condition = array();
$condition[] = array('pintuan_id','=',$pintuan_id);
$pintuan_info = $this->getPintuanInfo($condition);
return $pintuan_info;
}
/**
* 拼团状态数组
* @access public
* @author o1h.cn
* @return type
*/
public function getPintuanStateArray() {
return $this->pintuan_state_array;
}
/**
* 增加
* @access public
* @author o1h.cn
* @param array $data 数据
* @return type
*/
public function addPintuan($data) {
$data['pintuan_state'] = self::PINTUAN_STATE_NORMAL;
$flag= Db::name('ppintuan')->insertGetId($data);
if($flag){
// 发布拼团锁定商品
$this->_lockGoods($data['pintuan_goods_commonid']);
}
return $flag;
}
/**
* 删除活动
* @author o1h.cn
* @param type $condition 删除条件
* @return type
*/
public function delPintuan($condition)
{
return Db::name('ppintuan')->where($condition)->delete();
}
/**
* 锁定商品
* @access private
* @author o1h.cn
* @param type $goods_commonid 商品编号
*/
private function _lockGoods($goods_commonid)
{
$condition = array();
$condition[] = array('goods_commonid','=',$goods_commonid);
$goods_model = model('goods');
$goods_model->editGoodsCommonLock($condition);
$goods_model->editGoodsLock($condition);
}
/**
* 解锁商品
* @access private
* @author o1h.cn
* @param type $goods_commonid 商品编号ID
*/
private function _unlockGoods($goods_commonid)
{
$goods_model = model('goods');
$goods_model->editGoodsCommonUnlock(array(array('goods_commonid' ,'in', $goods_commonid)));
$goods_model->editGoodsUnlock(array(array('goods_commonid' ,'in', $goods_commonid)));
}
/**
* 编辑更新
* @param type $update 更新数据
* @param type $condition 条件
* @return type
*/
public function editPintuan($update, $condition) {
return Db::name('ppintuan')->where($condition)->update($update);
}
/**
* 指定拼团活动结束,参团成功的继续参团,不成功的保持默认.
* @access public
* @author o1h.cn
* @param type $condition
* @return type
*/
public function endPintuan($condition) {
$goods_commonid=Db::name('ppintuan')->where($condition)->column('pintuan_goods_commonid');
$data['pintuan_state'] = self::PINTUAN_STATE_CLOSE;
$flag= Db::name('ppintuan')->where($condition)->update($data);
if($flag){
if(!empty($goods_commonid)){
$this->_unlockGoods($goods_commonid);
}
}
return $flag;
}
/**
* 获取拼团扩展信息,包括状态文字和是否可编辑状态
* @access public
* @author o1h.cn
* @param type $pintuan_info 拼团信息
* @return boolean
*/
public function getPintuanExtendInfo($pintuan_info) {
$pintuan_info['pintuan_state_text'] = $this->pintuan_state_array[$pintuan_info['pintuan_state']];
//是否有正在参加拼团的订单
$pintuan_order_count=Db::name('ppintuanorder')->where(array('pintuan_id'=>$pintuan_info['pintuan_id'],'pintuanorder_state'=>1))->count();
if ($pintuan_info['pintuan_state'] == self::PINTUAN_STATE_NORMAL && $pintuan_info['pintuan_end_time'] > TIMESTAMP) {
$pintuan_info['editable'] = true;
} else {
$pintuan_info['editable'] = false;
}
return $pintuan_info;
}
/**
* 过期修改状态
* @access public
* @author o1h.cn
* @param type $condition 条件
* @return boolean
*/
public function editExpirePintuan($condition) {
$condition[]=array('pintuan_end_time','<', TIMESTAMP);
$condition[]=array('pintuan_state','=',self::PINTUAN_STATE_NORMAL);
$updata = array();
$update['pintuan_state'] = self::PINTUAN_STATE_CLOSE;
$this->editPintuan($update, $condition);
return true;
}
/**
* 读取拼团列表
* @access public
* @author o1h.cn
* @param type $condition 条件
* @param type $pagesize 分页
* @param type $order 排序
* @param type $field 字段
* @param type $limit 限制
* @return type
*/
public function getPintuanExtendList($condition, $pagesize = null, $order = 'pintuan_state asc', $field = '*', $limit = 0) {
$pintuan_list = $this->getPintuanList($condition, $pagesize, $order, $field, $limit);
if (!empty($pintuan_list)) {
for ($i = 0, $j = count($pintuan_list); $i < $j; $i++) {
$pintuan_list[$i] = $this->getPintuanExtendInfo($pintuan_list[$i]);
}
}
return $pintuan_list;
}
/**
* 根据商品编号查询是否有可用拼团活动如果有返回抢购信息没有返回null
* @param type $goods_commonid 商品id
* @return array
*/
public function getPintuanInfoByGoodsCommonID($goods_commonid) {
$info = $this->_rGoodsPintuanCache($goods_commonid);
if (empty($info)) {
$condition = array();
$condition[]=array('pintuan_state','=',self::PINTUAN_STATE_NORMAL);
$condition[]=array('pintuan_end_time','>', TIMESTAMP);
$condition[]=array('pintuan_goods_commonid','=',$goods_commonid);
$pintuan_goods_list = $this->getPintuanExtendList($condition, null, 'pintuan_starttime asc', '*', 1);
$pintuan_goods = isset($pintuan_goods_list[0]) ? $pintuan_goods_list[0] : "";
if (!empty($pintuan_goods)) {
//获取此商品拼团对应的开团人
$condition = array();
$condition[] = array('pintuangroup_joined','>',0);
$condition[] = array('pintuan_id','=',$pintuan_goods['pintuan_id']);
$condition[] = array('pintuangroup_state','=',1);
$pintuan_goods['pintuangroup_list'] = model('ppintuangroup')->getPpintuangroupList($condition);
}
//序列化存储到缓存
$info['info'] = serialize($pintuan_goods);
$this->_wGoodsPintuanCache($goods_commonid, $info);
}
$pintuan_goods_info = unserialize($info['info']);
if (!empty($pintuan_goods_info) && ($pintuan_goods_info['pintuan_starttime'] > TIMESTAMP || $pintuan_goods_info['pintuan_end_time'] < TIMESTAMP)) {
$pintuan_goods_info = array();
}
return $pintuan_goods_info;
}
/**
* 读取商品抢购缓存
* @access public
* @author o1h.cn
* @param type $goods_commonid 商品id
* @return type
*/
private function _rGoodsPintuanCache($goods_commonid) {
return rcache($goods_commonid, 'goods_pintuan');
}
/**
* 写入商品抢购缓存
* @access public
* @author o1h.cn
* @param type $goods_commonid ID
* @param type $info 信息
* @return type
*/
private function _wGoodsPintuanCache($goods_commonid, $info) {
return wcache($goods_commonid, $info, 'goods_pintuan');
}
/**
* 删除商品抢购缓存
* @access public
* @author o1h.cn
* @param int $goods_commonid 商品ID
* @return boolean
*/
public function _dGoodsPintuanCache($goods_commonid) {
return dcache($goods_commonid, 'goods_pintuan');
}
}