401 lines
14 KiB
PHP
401 lines
14 KiB
PHP
<?php
|
||
|
||
namespace app\common\model;
|
||
|
||
use think\facade\Db;
|
||
/**
|
||
* ============================================================================
|
||
* 联课教育商城系统
|
||
* ============================================================================
|
||
* 版权所有 2022 刻羽互动科技有限公司,并保留所有权利。
|
||
* 网站地址: http://www.o1h.cn
|
||
* ----------------------------------------------------------------------------
|
||
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用 .
|
||
* 不允许对程序代码以任何形式任何目的的再发布。
|
||
* ============================================================================
|
||
* 数据层模型
|
||
*/
|
||
class Pointprod extends BaseModel
|
||
{
|
||
public $page_info;
|
||
|
||
/**
|
||
* 获取兑换商品的展示状态
|
||
* @access public
|
||
* @author o1h.cn
|
||
* @return array
|
||
*/
|
||
public function getPgoodsShowState()
|
||
{
|
||
$pgoodsshowstate_arr = array('unshow' => array(0, '下架'), 'show' => array(1, '上架'));
|
||
return $pgoodsshowstate_arr;
|
||
}
|
||
|
||
/**
|
||
* 获取兑换商品的开启状态
|
||
* @access public
|
||
* @author o1h.cn
|
||
* @return array
|
||
*/
|
||
public function getPgoodsOpenState()
|
||
{
|
||
$pgoodsopenstate_arr = array('open' => array(0, '开启'), 'close' => array(1, '禁售'));
|
||
return $pgoodsopenstate_arr;
|
||
}
|
||
|
||
/**
|
||
* @access public
|
||
* @author o1h.cn
|
||
* 获取兑换商品的推荐状态
|
||
* @return array
|
||
*/
|
||
public function getPgoodsRecommendState()
|
||
{
|
||
$pgoodsrecommendstate_arr = array('uncommend' => array(0, '未推荐'), 'commend' => array(1, '已推荐'));
|
||
return $pgoodsrecommendstate_arr;
|
||
}
|
||
|
||
/**
|
||
* 礼品保存
|
||
* @access public
|
||
* @author o1h.cn
|
||
* @param type $data 商品数据
|
||
* @return boolean
|
||
*/
|
||
public function addPointgoods($data)
|
||
{
|
||
if (empty($data)) {
|
||
return false;
|
||
}
|
||
$insert_id = Db::name('pointsgoods')->insertGetId($data);
|
||
if ($insert_id) {
|
||
return $insert_id;
|
||
}
|
||
else {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 礼品信息列表
|
||
* @access public
|
||
* @author o1h.cn
|
||
* @param array $condition 条件数组
|
||
* @param int $pagesize 分页
|
||
* @param string $field 查询字段
|
||
* @param array $pagesize 分页
|
||
*/
|
||
/**
|
||
* 礼品信息列表
|
||
* @access public
|
||
* @author o1h.cn
|
||
* @param array $where 条件
|
||
* @param string $field 字段
|
||
* @param string $order 排序
|
||
* @param int $limit 限制
|
||
* @param int $pagesize 分页
|
||
* @return array
|
||
*/
|
||
public function getPointProdList($where = '', $field = '*', $order = '', $limit = 0, $pagesize = '')
|
||
{
|
||
if (empty($order)) {
|
||
$order = 'pgoods_sort asc';
|
||
}
|
||
if ($pagesize) {
|
||
$res = Db::name('pointsgoods')->field($field)->where($where)->order($order)->paginate(['list_rows'=>$pagesize,'query' => request()->param()],false);
|
||
$this->page_info = $res;
|
||
$list = $res->items();
|
||
}
|
||
else {
|
||
$list = Db::name('pointsgoods')->field($field)->where($where)->order($order)->limit($limit)->select()->toArray();
|
||
}
|
||
if (is_array($list) && count($list) > 0) {
|
||
foreach ($list as $k => $v) {
|
||
$v['pgoods_image_old'] = $v['pgoods_image'];
|
||
|
||
$v['pgoods_image_small'] = pointprod_thumb($v['pgoods_image'], 'small');
|
||
$v['pgoods_image'] = pointprod_thumb($v['pgoods_image'], 'normal');
|
||
|
||
$v['ex_state'] = $this->getPointProdExstate($v);
|
||
//处理限制的会员等级
|
||
if (isset($v['pgoods_limitmgrade'])) {
|
||
$limitgrade = intval($v['pgoods_limitmgrade']);
|
||
if ($limitgrade > 0) {
|
||
$membergrade_arr = model('member')->getMemberGradeArr();
|
||
$v['pgoods_limitgradename'] = $membergrade_arr[$limitgrade]['level_name'];
|
||
}
|
||
}
|
||
//获得浏览次数
|
||
if (isset($v['pgoods_view'])) {
|
||
$v['pgoods_view'] = $this->getPointProdViewNum($v['pgoods_id'], $v['pgoods_view']);
|
||
}
|
||
$list[$k] = $v;
|
||
}
|
||
}
|
||
return $list;
|
||
}
|
||
|
||
/**
|
||
* 查询出售中的兑换礼品列表
|
||
* @access public
|
||
* @author o1h.cn
|
||
* @param type $where 条件
|
||
* @param type $field 字段
|
||
* @param type $order 排序
|
||
* @param type $limit 限制
|
||
* @param type $pagesize 分页
|
||
* @return type
|
||
*/
|
||
public function getOnlinePointProdList($where = '', $field = '*', $order = '', $limit = 0, $pagesize = '')
|
||
{
|
||
$pgoodsshowstate_arr = $this->getPgoodsShowState();
|
||
$pgoodsopenstate_arr = $this->getPgoodsOpenState();
|
||
$where[]=array('pgoods_show','=',$pgoodsshowstate_arr['show'][0]);
|
||
$where[]=array('pgoods_state','=',$pgoodsopenstate_arr['open'][0]);
|
||
$list = $this->getPointProdList($where, $field, $order, $limit, $pagesize);
|
||
return $list;
|
||
}
|
||
|
||
/**
|
||
* 礼品信息单条
|
||
* @access public
|
||
* @author o1h.cn
|
||
* @param type $where 条件
|
||
* @param type $field 字段
|
||
* @return type
|
||
*/
|
||
public function getPointProdInfo($where = '', $field = '*')
|
||
{
|
||
$prodinfo = Db::name('pointsgoods')->where($where)->find();
|
||
if (!empty($prodinfo)) {
|
||
$prodinfo['pgoods_image_old'] = $prodinfo['pgoods_image'];
|
||
|
||
$prodinfo['pgoods_image_max'] = pointprod_thumb($prodinfo['pgoods_image']);
|
||
$prodinfo['pgoods_image_small'] = pointprod_thumb($prodinfo['pgoods_image'], 'small');
|
||
$prodinfo['pgoods_image'] = pointprod_thumb($prodinfo['pgoods_image'], 'normal');
|
||
|
||
$prodinfo['ex_state'] = $this->getPointProdExstate($prodinfo);
|
||
//处理兑换时间限制
|
||
if ($prodinfo['pgoods_islimittime'] == 1 && $prodinfo['ex_state'] == 'going') {
|
||
$timediff = intval($prodinfo['pgoods_endtime']) - TIMESTAMP;
|
||
$prodinfo['timediff']['diff_day'] = intval($timediff / 86400);
|
||
$prodinfo['timediff']['diff_hour'] = intval($timediff % 86400 / 3600);
|
||
$prodinfo['timediff']['diff_mins'] = intval($timediff % 86400 % 3600 / 60);
|
||
$prodinfo['timediff']['diff_secs'] = intval($timediff % 86400 % 3600 % 60);
|
||
}
|
||
//处理限制的会员等级
|
||
if (isset($prodinfo['pgoods_limitmgrade'])) {
|
||
$limitgrade = intval($prodinfo['pgoods_limitmgrade']);
|
||
if ($limitgrade > 0) {
|
||
$membergrade_arr = model('member')->getMemberGradeArr();
|
||
$prodinfo['pgoods_limitgradename'] = $membergrade_arr[$limitgrade]['level_name'];
|
||
}
|
||
}
|
||
//获得浏览次数
|
||
if (isset($prodinfo['pgoods_view'])) {
|
||
$prodinfo['pgoods_view'] = $this->getPointProdViewNum($prodinfo['pgoods_id'], $prodinfo['pgoods_view']);
|
||
}
|
||
}
|
||
return $prodinfo;
|
||
}
|
||
|
||
/**
|
||
* 查询出售中的兑换礼品
|
||
* @access public
|
||
* @author o1h.cn
|
||
* @param type $where 条件
|
||
* @param type $field 字段
|
||
* @return type
|
||
*/
|
||
public function getOnlinePointProdInfo($where = array(), $field = '*')
|
||
{
|
||
$pgoodsshowstate_arr = $this->getPgoodsShowState();
|
||
$pgoodsopenstate_arr = $this->getPgoodsOpenState();
|
||
$where[]=array('pgoods_show','=',$pgoodsshowstate_arr['show'][0]);
|
||
$where[]=array('pgoods_state','=',$pgoodsopenstate_arr['open'][0]);
|
||
$prodinfo = $this->getPointProdInfo($where, $field);
|
||
return $prodinfo;
|
||
}
|
||
|
||
/**
|
||
* 获得兑换礼品的浏览次数
|
||
* @access public
|
||
* @author o1h.cn
|
||
* @param type $prod_id 兑换礼品ID
|
||
* @param type $pgoods_view 浏览
|
||
* @return int
|
||
*/
|
||
public function getPointProdViewNum($prod_id, $pgoods_view = '')
|
||
{
|
||
$prod_id = intval($prod_id);
|
||
if ($prod_id <= 0) {
|
||
return 0;
|
||
}
|
||
$is_data = true;//是否从数据库读取
|
||
if (config('ds_config.cache_open')) {//如果开启缓存,则读取缓存的浏览次数
|
||
$prod_info = rcache($prod_id, 'pointprod');
|
||
if ($prod_info) {
|
||
$is_data = false;
|
||
}
|
||
}
|
||
if ($is_data) {//从数据库读取
|
||
if ($pgoods_view === '') {//如果已经获得浏览次数则直接返回,否则查询数据库中的浏览次数
|
||
$prod_info = Db::name('pointsgoods')->field('pgoods_view')->where(array('pgoods_id' => $prod_id))->find();
|
||
$pgoods_view = intval($prod_info['pgoods_view']);
|
||
}
|
||
}
|
||
else {
|
||
$pgoods_view = intval($prod_info['pgoods_view']);
|
||
}
|
||
return $pgoods_view;
|
||
}
|
||
|
||
/**
|
||
* 获得礼品兑换状态
|
||
* @access public
|
||
* @author o1h.cn
|
||
* @param type $prodinfo 礼品信息
|
||
* @return string
|
||
*/
|
||
public function getPointProdExstate($prodinfo)
|
||
{
|
||
$datetime = TIMESTAMP;
|
||
$ex_state = 'end';//兑换按钮的可用状态
|
||
if ($prodinfo['pgoods_islimittime'] == 1) {
|
||
//即将开始
|
||
if ($prodinfo['pgoods_starttime'] > $datetime && $prodinfo['pgoods_storage'] > 0) {
|
||
$ex_state = 'willbe';
|
||
}
|
||
//时间进行中
|
||
if ($prodinfo['pgoods_starttime'] <= $datetime && $datetime < $prodinfo['pgoods_endtime'] && $prodinfo['pgoods_storage'] > 0) {
|
||
$ex_state = 'going';
|
||
}
|
||
}
|
||
else {
|
||
if ($prodinfo['pgoods_storage'] > 0) {
|
||
$ex_state = 'going';
|
||
}
|
||
}
|
||
return $ex_state;
|
||
}
|
||
|
||
/**
|
||
* 删除礼品信息
|
||
* @access public
|
||
* @author o1h.cn
|
||
* @param type $pg_id 礼品ID
|
||
* @return boolean
|
||
*/
|
||
public function delPointProdById($pg_id)
|
||
{
|
||
//$pg_id 为整形或者数组
|
||
$where[]=array('pgoods_id','in', $pg_id);
|
||
$result = Db::name('pointsgoods')->where($where)->delete();
|
||
//删除积分礼品下的图片信息
|
||
if ($result) {
|
||
//删除积分礼品下的图片信息
|
||
$upload_model = model('upload');
|
||
$condition = array();
|
||
$condition[] = array('upload_type','in',array('5','6'));
|
||
$condition[]=array('item_id','in',$pg_id);
|
||
$upload_list = $upload_model->getUploadList($condition);
|
||
if (is_array($upload_list) && count($upload_list) > 0) {
|
||
$upload_idarr = array();
|
||
foreach ($upload_list as $v) {
|
||
@unlink(BASE_UPLOAD_PATH . DIRECTORY_SEPARATOR . ATTACH_POINTPROD . DIRECTORY_SEPARATOR . $v['file_name']);
|
||
$upload_idarr[] = $v['upload_id'];
|
||
}
|
||
//删除图片
|
||
$condition = array();
|
||
$condition[]=array('upload_id','in',$upload_idarr);
|
||
$upload_model->delUpload($condition);
|
||
}
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
/**
|
||
* 编辑积分礼品信息
|
||
* @access public
|
||
* @author o1h.cn
|
||
* @param type $update_arr 更新数据
|
||
* @param type $where 条件
|
||
* @return boolean
|
||
*/
|
||
public function editPointProd($update_arr, $where)
|
||
{
|
||
if (empty($update_arr)) {
|
||
return true;
|
||
}
|
||
$result = Db::name('pointsgoods')->where($where)->update($update_arr);
|
||
return $result;
|
||
}
|
||
|
||
/**
|
||
* 获得推荐的热门兑换商品列表
|
||
* @access public
|
||
* @author o1h.cn
|
||
* @param type $num
|
||
* @return type
|
||
*/
|
||
public function getRecommendPointProd($num)
|
||
{
|
||
$where = array();
|
||
$where[] = array('pgoods_show','=',1);
|
||
$where[] = array('pgoods_state','=',0);
|
||
$where[] = array('pgoods_commend','=',1);
|
||
$recommend_pointsprod = $this->getPointProdList($where, '*', 'pgoods_sort asc,pgoods_id desc', $num);
|
||
if ($recommend_pointsprod && is_array($recommend_pointsprod)) {
|
||
foreach ($recommend_pointsprod as $k => $v) {
|
||
//处理限制的会员等级
|
||
$limitgrade = intval($v['pgoods_limitmgrade']);
|
||
if ($limitgrade > 0) {
|
||
$membergrade_arr = model('member')->getMemberGradeArr();
|
||
$v['pgoods_limitgradename'] = $membergrade_arr[$limitgrade]['level_name'];
|
||
$recommend_pointsprod[$k] = $v;
|
||
}
|
||
}
|
||
}
|
||
return $recommend_pointsprod;
|
||
}
|
||
|
||
/**
|
||
* 更新礼品浏览次数
|
||
* @access public
|
||
* @author o1h.cn
|
||
* @param type $prod_id 礼品ID
|
||
* @return int
|
||
*/
|
||
public function editPointProdViewnum($prod_id)
|
||
{
|
||
if (intval($prod_id) <= 0) {
|
||
return array('state' => false, 'msg' => '参数错误');
|
||
}
|
||
$viewnum = 0;//最新浏览次数
|
||
$cache_arr = array();
|
||
$tmptime = TIMESTAMP;
|
||
if (!config('ds_config.cache_open')) {//直接更新数据库浏览次数
|
||
$this->editPointProd(array('pgoods_view' => Db::raw('pgoods_view+1')), array('pgoods_id' => $prod_id));
|
||
}
|
||
else {//通过缓存记录浏览次数
|
||
$prod_info = rcache($prod_id, 'pointprod');
|
||
if (empty($prod_info)) {//如果兑换礼品的浏览次数缓存不存在,则查询兑换礼品数据库信息,建立缓存
|
||
//查询兑换礼品信息
|
||
$prod_info = $this->getPointProdInfo(array('pgoods_id' => $prod_id), 'pgoods_view');
|
||
$viewnum = intval($prod_info['pgoods_view']) + 1;
|
||
wcache($prod_id, array('pgoods_view' => $viewnum, 'view_updatetime' => $tmptime), 'pointprod');
|
||
}
|
||
else {
|
||
$viewnum = intval($prod_info['pgoods_view']) + 1;
|
||
if (($prod_info['view_updatetime'] + 3600) < $tmptime) {//如果缓存时间超出1小时,则将更新进入数据库,时间初始为当前时间
|
||
$this->editPointProd(array('pgoods_view' => $viewnum), array('pgoods_id' => $prod_id));
|
||
wcache($prod_id, array('pgoods_view' => $viewnum, 'view_updatetime' => $tmptime), 'pointprod');
|
||
}
|
||
else {//如果缓存时间未超出1小时,则更新浏览次数
|
||
wcache($prod_id, array('pgoods_view' => $viewnum), 'pointprod');
|
||
}
|
||
}
|
||
}
|
||
return array('state' => true);
|
||
}
|
||
} |