pointprod.model.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. <?php
  2. /**
  3. * 积分礼品管理
  4. *
  5. */
  6. defined('InShopNC') or exit('Access Invalid!');
  7. class pointprodModel extends Model {
  8. public function __construct(){
  9. parent::__construct();
  10. }
  11. /**
  12. * 获取兑换商品的展示状态
  13. */
  14. public function getPgoodsShowState(){
  15. $pgoodsshowstate_arr = array('unshow'=>array(0,'下架'),'show'=>array(1,'上架'));
  16. return $pgoodsshowstate_arr;
  17. }
  18. /**
  19. * 获取兑换商品的开启状态
  20. */
  21. public function getPgoodsOpenState(){
  22. $pgoodsopenstate_arr = array('open'=>array(0,'开启'),'close'=>array(1,'禁售'));
  23. return $pgoodsopenstate_arr;
  24. }
  25. /**
  26. * 获取兑换商品的推荐状态
  27. */
  28. public function getPgoodsRecommendState(){
  29. $pgoodsrecommendstate_arr = array('uncommend'=>array(0,'未推荐'),'commend'=>array(1,'已推荐'));
  30. return $pgoodsrecommendstate_arr;
  31. }
  32. /**
  33. * 礼品保存
  34. *
  35. * @param array $param 商品资料
  36. */
  37. public function addPointGoods($param) {
  38. if(empty($param)) {
  39. return false;
  40. }
  41. $insert_id = $this->table('points_goods')->insert($param);
  42. if ($insert_id) {
  43. return $insert_id;
  44. } else {
  45. return false;
  46. }
  47. }
  48. /**
  49. * 礼品信息列表
  50. *
  51. * @param array $condition 条件数组
  52. * @param array $page 分页
  53. * @param array $field 查询字段
  54. * @param array $page 分页
  55. */
  56. public function getPointProdList($where = '', $field='*',$order='',$limit='',$page=''){
  57. if (empty($order)){
  58. $order = 'pgoods_sort asc';
  59. }
  60. $list = $this->table('points_goods')->field($field)->where($where)->order($order)->limit($limit)->page($page)->select();
  61. if (is_array($list) && count($list)>0){
  62. foreach ($list as $k=>$v){
  63. $v['pgoods_image_old'] = $v['pgoods_image'];
  64. $v['pgoods_image_small'] = pointprodThumb($v['pgoods_image'], 'small');
  65. $v['pgoods_image'] = pointprodThumb($v['pgoods_image'], 'mid');
  66. $v['ex_state'] = $this->getPointProdExstate($v);
  67. //处理限制的会员等级
  68. if (isset($v['pgoods_limitmgrade'])){
  69. $limitgrade = intval($v['pgoods_limitmgrade']);
  70. if ($limitgrade > 0){
  71. $membergrade_arr = Model('member')->getMemberGradeArr();
  72. $v['pgoods_limitgradename'] = $membergrade_arr[$limitgrade]['level_name'];
  73. }
  74. }
  75. //获得浏览次数
  76. if (isset($v['pgoods_view'])){
  77. $v['pgoods_view'] = $this->getPointProdViewNum($v['pgoods_id'],$v['pgoods_view']);
  78. }
  79. $list[$k] = $v;
  80. }
  81. }
  82. return $list;
  83. }
  84. /**
  85. * 查询出售中的兑换礼品列表
  86. */
  87. public function getOnlinePointProdList($where = '', $field='*',$order='',$limit='',$page=''){
  88. $pgoodsshowstate_arr = $this->getPgoodsShowState();
  89. $pgoodsopenstate_arr = $this->getPgoodsOpenState();
  90. $where['pgoods_show'] = $pgoodsshowstate_arr['show'][0];
  91. $where['pgoods_state'] = $pgoodsopenstate_arr['open'][0];
  92. $list = $this->getPointProdList($where, $field, $order, $limit, $page);
  93. return $list;
  94. }
  95. /**
  96. * 礼品信息单条
  97. *
  98. * @param array $condition 条件数组
  99. * @param array $field 查询字段
  100. */
  101. public function getPointProdInfo($where = '',$field='*'){
  102. $prodinfo = $this->table('points_goods')->where($where)->find();
  103. if (!empty($prodinfo)){
  104. $prodinfo['pgoods_image_old'] = $prodinfo['pgoods_image'];
  105. $prodinfo['pgoods_image_max'] = pointprodThumb($prodinfo['pgoods_image']);
  106. $prodinfo['pgoods_image_small'] = pointprodThumb($prodinfo['pgoods_image'], 'small');
  107. $prodinfo['pgoods_image'] = pointprodThumb($prodinfo['pgoods_image'], 'mid');
  108. $prodinfo['ex_state'] = $this->getPointProdExstate($prodinfo);
  109. //处理兑换时间限制
  110. if ($prodinfo['pgoods_islimittime'] == 1 && $prodinfo['ex_state'] == 'going'){
  111. $timediff = intval($prodinfo['pgoods_endtime'])-time();
  112. $prodinfo['timediff']['diff_day'] = intval($timediff/86400);
  113. $prodinfo['timediff']['diff_hour'] = intval($timediff%86400/3600);
  114. $prodinfo['timediff']['diff_mins'] = intval($timediff%86400%3600/60);
  115. $prodinfo['timediff']['diff_secs'] = intval($timediff%86400%3600%60);
  116. }
  117. //处理限制的会员等级
  118. if (isset($prodinfo['pgoods_limitmgrade'])){
  119. $limitgrade = intval($prodinfo['pgoods_limitmgrade']);
  120. if ($limitgrade > 0){
  121. $membergrade_arr = Model('member')->getMemberGradeArr();
  122. $prodinfo['pgoods_limitgradename'] = $membergrade_arr[$limitgrade]['level_name'];
  123. }
  124. }
  125. //获得浏览次数
  126. if (isset($prodinfo['pgoods_view'])){
  127. $prodinfo['pgoods_view'] = $this->getPointProdViewNum($prodinfo['pgoods_id'],$prodinfo['pgoods_view']);
  128. }
  129. }
  130. return $prodinfo;
  131. }
  132. /**
  133. * 查询出售中的兑换礼品
  134. */
  135. public function getOnlinePointProdInfo($where = array(),$field='*'){
  136. $pgoodsshowstate_arr = $this->getPgoodsShowState();
  137. $pgoodsopenstate_arr = $this->getPgoodsOpenState();
  138. $where['pgoods_show'] = $pgoodsshowstate_arr['show'][0];
  139. $where['pgoods_state'] = $pgoodsopenstate_arr['open'][0];
  140. $prodinfo = $this->getPointProdInfo($where,$field);
  141. return $prodinfo;
  142. }
  143. /**
  144. * 获得兑换礼品的浏览次数
  145. * @param int $pgoods_id 兑换礼品ID
  146. */
  147. public function getPointProdViewNum($prod_id,$pgoods_view = ''){
  148. $prod_id = intval($prod_id);
  149. if ($prod_id <= 0){
  150. return 0;
  151. }
  152. $is_data = true;//是否从数据库读取
  153. if (C('cache_open')){//如果开启缓存,则读取缓存的浏览次数
  154. $prod_info = rcache($prod_id, 'pointprod', 'pgoods_view,view_updatetime');
  155. if ($prod_info){
  156. $is_data = false;
  157. }
  158. }
  159. if ($is_data){//从数据库读取
  160. if ($pgoods_view === ''){//如果已经获得浏览次数则直接返回,否则查询数据库中的浏览次数
  161. $prod_info = $this->table('points_goods')->field('pgoods_view')->where(array('pgoods_id'=>$prod_id))->find();
  162. $pgoods_view = intval($prod_info['pgoods_view']);
  163. }
  164. } else {
  165. $pgoods_view = intval($prod_info['pgoods_view']);
  166. }
  167. return $pgoods_view;
  168. }
  169. /**
  170. * 获得礼品兑换状态
  171. * @param array $condition 礼品数组
  172. * return array $field 查询字段
  173. */
  174. public function getPointProdExstate($prodinfo){
  175. $datetime = time();
  176. $ex_state = 'end';//兑换按钮的可用状态
  177. if ($prodinfo['pgoods_islimittime'] == 1){
  178. //即将开始
  179. if ($prodinfo['pgoods_starttime']>$datetime && $prodinfo['pgoods_storage']>0){
  180. $ex_state = 'willbe';
  181. }
  182. //时间进行中
  183. if ($prodinfo['pgoods_starttime'] <= $datetime && $datetime < $prodinfo['pgoods_endtime'] && $prodinfo['pgoods_storage']>0){
  184. $ex_state = 'going';
  185. }
  186. }else {
  187. if ($prodinfo['pgoods_storage']>0){
  188. $ex_state = 'going';
  189. }
  190. }
  191. return $ex_state;
  192. }
  193. /**
  194. * 删除礼品信息
  195. * @param mixed $pg_id 删除申请记录编号
  196. */
  197. public function delPointProdById($pg_id){
  198. if(empty($pg_id)) {
  199. return false;
  200. }
  201. $where = array();
  202. if (is_array($pg_id)){
  203. foreach ($pg_id as $k=>$v){
  204. $pg_id[$k] = intval($v);
  205. }
  206. $where['pgoods_id'] = array('in',$pg_id);
  207. } else {
  208. $pg_id = intval($pg_id);
  209. $where['pgoods_id'] = $pg_id;
  210. }
  211. $result = $this->table('points_goods')->where($where)->delete();
  212. //删除积分礼品下的图片信息
  213. if ($result){
  214. //删除积分礼品下的图片信息
  215. $upload_model = Model('upload');
  216. if (is_array($pg_id) && count($pg_id)>0){
  217. $pg_idStr = implode(',',$pg_id);
  218. $upload_list = $upload_model->getUploadList(array('upload_type_in' =>'5,6','item_id_in'=>$pg_idStr));
  219. }else {
  220. $upload_list = $upload_model->getUploadList(array('upload_type_in' =>'5,6','item_id'=>$pg_id));
  221. }
  222. if (is_array($upload_list) && count($upload_list)>0){
  223. $upload_idarr = array();
  224. foreach ($upload_list as $v){
  225. @unlink(BASE_UPLOAD_PATH.DS.ATTACH_POINTPROD.DS.$v['file_name']);
  226. @unlink(BASE_UPLOAD_PATH.DS.ATTACH_POINTPROD.DS.$v['file_thumb']);
  227. $upload_idarr[] = $v['upload_id'];
  228. }
  229. //删除图片
  230. $upload_model->dropUploadById($upload_idarr);
  231. }
  232. }
  233. return $result;
  234. }
  235. /**
  236. * 编辑积分礼品信息
  237. */
  238. public function editPointProd($update_arr, $where){
  239. if (empty($update_arr)) {
  240. return true;
  241. }
  242. $result = $this->table('points_goods')->where($where)->update($update_arr);
  243. return $result;
  244. }
  245. /**
  246. * 获得推荐的热门兑换商品列表
  247. * @param int $num 查询条数
  248. */
  249. public function getRecommendPointProd($num){
  250. $where = array();
  251. $where['pgoods_show'] = 1;
  252. $where['pgoods_state'] = 0;
  253. $where['pgoods_commend'] = 1;
  254. $recommend_pointsprod = $this->getPointProdList($where,'*','pgoods_sort asc,pgoods_id desc',$num);
  255. if ($recommend_pointsprod && is_array($recommend_pointsprod)){
  256. foreach ($recommend_pointsprod as $k=>$v){
  257. //处理限制的会员等级
  258. $limitgrade = intval($v['pgoods_limitmgrade']);
  259. if ($limitgrade > 0){
  260. $membergrade_arr = Model('member')->getMemberGradeArr();
  261. $v['pgoods_limitgradename'] = $membergrade_arr[$limitgrade]['level_name'];
  262. $recommend_pointsprod[$k] = $v;
  263. }
  264. }
  265. }
  266. return $recommend_pointsprod;
  267. }
  268. /**
  269. * 更新礼品浏览次数
  270. */
  271. public function editPointProdViewnum($prod_id){
  272. if (intval($prod_id) <= 0){
  273. return array('state'=>false,'msg'=>'参数错误');
  274. }
  275. $viewnum = 0;//最新浏览次数
  276. $cache_arr = array();
  277. $tmptime = time();
  278. if (!C('cache_open')){//直接更新数据库浏览次数
  279. $this->editPointProd(array('pgoods_view'=>array('exp','pgoods_view+1')), array('pgoods_id'=>$prod_id));
  280. } else {//通过缓存记录浏览次数
  281. $prod_info = rcache($prod_id, 'pointprod', 'pgoods_view,view_updatetime');
  282. if (empty($prod_info)){//如果兑换礼品的浏览次数缓存不存在,则查询兑换礼品数据库信息,建立缓存
  283. //查询兑换礼品信息
  284. $prod_info = $this->getPointProdInfo(array('pgoods_id'=>$prod_id),'pgoods_view');
  285. $viewnum = intval($prod_info['pgoods_view']) + 1;
  286. wcache($prod_id, array('pgoods_view'=>$viewnum,'view_updatetime'=>$tmptime), 'pointprod');
  287. } else {
  288. $viewnum = intval($prod_info['pgoods_view']) + 1;
  289. if (($prod_info['view_updatetime']+3600) < $tmptime){//如果缓存时间超出1小时,则将更新进入数据库,时间初始为当前时间
  290. $this->editPointProd(array('pgoods_view'=>$viewnum), array('pgoods_id'=>$prod_id));
  291. wcache($prod_id, array('pgoods_view'=>$viewnum,'view_updatetime'=>$tmptime), 'pointprod');
  292. } else {//如果缓存时间未超出1小时,则更新浏览次数
  293. wcache($prod_id, array('pgoods_view'=>$viewnum), 'pointprod');
  294. }
  295. }
  296. }
  297. return array('state'=>true);
  298. }
  299. }