cart.php 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733
  1. <?php
  2. /**
  3. * 购物车
  4. */
  5. defined('InShopNC') or exit('Access Invalid!');
  6. require_once(BASE_ROOT_PATH . '/helper/goods_helper.php');
  7. require_once(BASE_ROOT_PATH . '/helper/activity_helper.php');
  8. require_once(BASE_ROOT_PATH . '/helper/algorithm.php');
  9. require_once(BASE_ROOT_PATH . '/helper/predeposit_helper.php');
  10. class cart_item
  11. {
  12. private $cart_id;
  13. private $bl_id;
  14. private $goods_id;
  15. private $goods_num;
  16. public function __construct($cart_id,$bl_id,$goods_id,$goods_num)
  17. {
  18. $this->cart_id = intval($cart_id);
  19. $this->bl_id = intval($bl_id);
  20. $this->goods_id = intval($goods_id);
  21. $this->goods_num = intval($goods_num);
  22. }
  23. public function is_bl() {
  24. return $this->bl_id > 0;
  25. }
  26. public function format() {
  27. $cart_item['cart_id'] = $this->cart_id;
  28. $cart_item['goods_id'] = $this->goods_id;
  29. $cart_item['bl_id'] = $this->bl_id;
  30. $cart_item['goods_num'] = $this->goods_num;
  31. return $cart_item;
  32. }
  33. public function goods_ids()
  34. {
  35. if($this->is_bl()) {
  36. return activity_helper::bundling_goods($this->bl_id);
  37. }
  38. else {
  39. return array($this->goods_id);
  40. }
  41. }
  42. }
  43. class cartControl extends mobileControl
  44. {
  45. const db_type = 'db';
  46. const session_type = 'Session';
  47. public function __construct() {
  48. parent::__construct();
  49. }
  50. public function rate_moneyOp()
  51. {
  52. if($_SESSION['is_login'] == 1)
  53. {
  54. $pred = new predeposit_helper($_SESSION['member_id']);
  55. $bonus_rate = $pred->bonus_rate();
  56. if($bonus_rate != null)
  57. {
  58. $rates = $bonus_rate->format();
  59. $rates_money = [];
  60. foreach ($rates as $rate => $money) {
  61. $item['rate'] = $rate;
  62. $item['total'] = $money;
  63. $rates_money[] = $item;
  64. }
  65. } else {
  66. $rates_money = null;
  67. }
  68. if(empty($rates_money)) {
  69. $result['bonus_rate'] = null;
  70. } else {
  71. $result['bonus_rate'] = $rates_money;
  72. }
  73. return self::outsuccess($result);
  74. }
  75. else {
  76. return self::outsuccess(null);
  77. }
  78. }
  79. public function listOp()
  80. {
  81. $model_cart = Model('cart');
  82. $minest_cartid = intval($_GET['minest_cartid']);
  83. if($minest_cartid < 0) $minest_cartid = 0;
  84. $save_type = $this->save_type();
  85. if($_SESSION['is_login'] == 1)
  86. {
  87. $page_size = $this->page_size();
  88. if($minest_cartid > 0) {
  89. $condition = array('buyer_id'=>$_SESSION['member_id'],'cart_id' => array('lt',$minest_cartid));
  90. $left = $model_cart->getCartListCount($condition);
  91. $has_more = $left > $page_size;
  92. $total = $model_cart->getCartListCount(array('buyer_id'=>$_SESSION['member_id']));
  93. $pages = $this->pages($total);
  94. } else {
  95. $condition = array('buyer_id'=>$_SESSION['member_id']);
  96. $total = $model_cart->getCartListCount(array('buyer_id'=>$_SESSION['member_id']));
  97. $pages = $this->pages($total);
  98. $has_more = $total > $page_size;
  99. }
  100. $cart_list = $model_cart->listCart($save_type,$condition,$page_size);
  101. }
  102. else
  103. {
  104. $cart_list = $model_cart->listCart($save_type);
  105. $total = count($cart_list);
  106. $has_more = false;
  107. $pages = 1;
  108. }
  109. $goods_ids = array();
  110. $cart_infos = array();
  111. foreach ($cart_list as $item) {
  112. $cart_item['cart_id'] = intval($item['cart_id']);
  113. $cart_item['goods_id'] = intval($item['goods_id']);
  114. $cart_item['bl_id'] = intval($item['bl_id']);
  115. $cart_item['goods_num'] = intval($item['goods_num']);
  116. $goods_ids[] = intval($item['goods_id']);
  117. $cart_infos[] = $cart_item;
  118. }
  119. $helper = new goods_helper();
  120. $summaries = $helper->cart_summary($goods_ids,$related_goods);
  121. $summary_list = $summaries['summary'];
  122. if(!empty($related_goods)) {
  123. $related_summary = $helper->cart_summary($related_goods,$x);
  124. $summary_list = array_merge($summary_list,$related_summary['summary']);
  125. }
  126. //有可能购物车中的商品被删除....
  127. $avables_goods = [];
  128. foreach ($summary_list as $summay) {
  129. $avables_goods[] = $summay['goods_id'];
  130. }
  131. $err_goods = algorithm::not_in($goods_ids,$avables_goods);
  132. $cart_infos = $this->remove_err($cart_infos,$err_goods);
  133. if($minest_cartid == 0) {
  134. $ret['free_info'] = $this->full_send();
  135. }
  136. $ret['cart_count'] = $total;
  137. $ret['cart_list'] = $cart_infos;
  138. $ret['summary'] = $summary_list;
  139. $ret['groupbuy'] = $summaries['groupbuy'];
  140. $ret['limitime'] = $summaries['limitime'];
  141. $ret['bundling'] = $summaries['bundling'];
  142. $ret['mobile_page'] = array('hasmore' => $has_more,'page_total' => $pages);
  143. return self::outsuccess($ret);
  144. }
  145. private function remove_err($cart_infos,$err_goods)
  146. {
  147. if(empty($err_goods)) return $cart_infos;
  148. $result = [];
  149. foreach ($cart_infos as $cart)
  150. {
  151. if($cart['bl_id'] > 0) {
  152. $result[] = $cart;
  153. }
  154. else
  155. {
  156. if(algorithm::binary_search($err_goods,$cart['goods_id']) == false) {
  157. $result[] = $cart;
  158. }
  159. }
  160. }
  161. return $result;
  162. }
  163. private function full_send()
  164. {
  165. $result = [];
  166. $rules = activity_helper::fullsent_rules();
  167. foreach ($rules as $rule) {
  168. $item['title'] = '全场促销';
  169. $item['value'] = $rule;
  170. $result[] = $item;
  171. }
  172. $free_ship = activity_helper::free_ship();
  173. if($free_ship != false) {
  174. $item['title'] = '全场包邮';
  175. $item['value'] = $free_ship;
  176. $result[] = $item;
  177. }
  178. $item['title'] = '红包抵扣';
  179. $item['value'] = "请参考红包抵扣规则,不与其它活动共享,不含运费";
  180. $result[] = $item;
  181. return $result;
  182. }
  183. public function addexOp()
  184. {
  185. $ret = $this->do_add($err,$ext_info);
  186. if($ret === false) {
  187. $msg = isset($err['msg']) ? $err['msg'] : '';
  188. return self::outerr($err['code'],$msg);
  189. }
  190. else
  191. {
  192. $bl_id = intval($ext_info['bl_id']);
  193. $goods_id = intval($ext_info['goods_id']);
  194. $cart_id = intval($ext_info['cart_id']);
  195. $model_cart = Model('cart');
  196. $save_type = $this->save_type();
  197. $cart_num = $model_cart->getCartNum($save_type,array('buyer_id'=>$_SESSION['member_id']));
  198. $goods_num = $model_cart->getCartItemNum($save_type,$cart_id);
  199. $item = new cart_item($cart_id,$bl_id,$goods_id,$goods_num);
  200. $result['cart_count'] = $cart_num;
  201. $result['cart_list'][] = $item->format();
  202. $gids = $item->goods_ids();
  203. if(empty($gids)) {
  204. $result['summary'] = array();
  205. $result['groupbuy'] = array();
  206. $result['limitime'] = array();
  207. $result['bundling'] = array();
  208. }
  209. else
  210. {
  211. $helper = new goods_helper();
  212. $summaries = $helper->cart_summary($gids,$related_goods);
  213. $summary_list = $summaries['summary'];
  214. if(!empty($related_goods)) {
  215. $related_summary = $helper->cart_summary($related_goods,$x);
  216. $summary_list = array_merge($summary_list,$related_summary['summary']);
  217. }
  218. $result['summary'] = $summary_list;
  219. $result['groupbuy'] = $summaries['groupbuy'];
  220. $result['limitime'] = $summaries['limitime'];
  221. $result['bundling'] = $summaries['bundling'];
  222. }
  223. return self::outsuccess($result);
  224. }
  225. }
  226. public function cart_listOp()
  227. {
  228. if($_SESSION['is_login'] != 1) {
  229. return self::outerr(errcode::ErrUnLogin);
  230. }
  231. $page = trim($_GET['page']);
  232. $curpage = trim($_GET['curpage']);
  233. if (!isset($_GET['page'])) {
  234. $page = "100";
  235. $curpage = "1";
  236. $this->page_size = 100;
  237. }
  238. initpage($page, $curpage);
  239. $model_cart = Model('cart');
  240. $model_goods = Model('goods');
  241. $condition = array('buyer_id' => $_SESSION['member_id']);
  242. $cart_list = $model_cart->getCartList($condition, $this->page_size);
  243. $page_count = $model_cart->gettotalpage();
  244. $model_cart->cls();
  245. foreach ($cart_list as $key => $value) {
  246. $goods_id = $value['goods_id'];
  247. $goods_promotion = $model_goods->getGoodsInfoAndPromotionById($goods_id);
  248. $goods_storage = $model_goods->getGoodsStorageById($goods_id);
  249. $promotion_type = '';
  250. $promotion_price = '0.00';
  251. if (!empty($goods_promotion['groupbuy_info'])) {
  252. $promotion_type = '抢购';
  253. $promotion_price = $goods_promotion['groupbuy_info']['groupbuy_price'];
  254. }
  255. if (!empty($goods_promotion['xianshi_info'])) {
  256. $promotion_type = '限时折扣';
  257. $promotion_price = $goods_promotion['xianshi_info']['xianshi_price'];
  258. }
  259. $goods_spec = unserialize($goods_promotion['goods_spec']);
  260. $goods_spec_array = array();
  261. if(!empty($goods_spec))
  262. {
  263. foreach ($goods_spec as $val) {
  264. array_push($goods_spec_array, $val);
  265. }
  266. }
  267. $cart_list[$key]['goods_storage'] = $goods_storage;
  268. $cart_list[$key]['goods_spec'] = implode(',', $goods_spec_array);
  269. $cart_list[$key]['promotion_type'] = $promotion_type;
  270. $cart_list[$key]['promotion_price'] = $promotion_price;
  271. $cart_list[$key]['goods_image_url'] = cthumb($value['goods_image'], $value['store_id']);
  272. $cart_list[$key]['goods_sum'] = ncPriceFormat($value['goods_price'] * $value['goods_num']);
  273. }
  274. self::outsuccess(array('cart_list' => $cart_list, 'mobile_page' => mobile_page($page_count)));
  275. }
  276. public function addOp()
  277. {
  278. $ret = $this->do_add($err,$ext_info);
  279. if($ret === false) {
  280. $msg = isset($err['msg']) ? $err['msg'] : '';
  281. return self::outerr($err['code'],$msg);
  282. } else {
  283. return self::outsuccess($ret);
  284. }
  285. }
  286. public function do_add(&$err,&$ext_info)
  287. {
  288. if (is_numeric($_GET['goods_id']) && is_numeric($_POST['quantity']))
  289. {
  290. $goods_id = intval($_POST['goods_id']);
  291. $quantity = intval($_POST['quantity']);
  292. if ($goods_id <= 0 || $quantity <= 0) {
  293. $err = array('code' => errcode::ErrInputParam);
  294. return false;
  295. }
  296. $model_goods = Model('goods');
  297. $logic_buy_1 = Logic('buy_1');
  298. $goods_info = $model_goods->getGoodsOnlineInfoAndPromotionById($goods_id);
  299. $logic_buy_1->getGroupbuyInfo($goods_info);
  300. $logic_buy_1->getXianshiInfo($goods_info, $quantity);
  301. if(array_key_exists('ifgroupbuy',$goods_info) && $goods_info['ifgroupbuy'] == true)
  302. {
  303. if ($_SESSION['is_login'] != 1)
  304. {
  305. $err = array('code' => errcode::ErrAddCart,'msg' => "只能登录后,才能向购物车添加抢购商品.");;
  306. return false;
  307. }
  308. }
  309. if(array_key_exists('ifxianshi',$goods_info) && $goods_info['ifxianshi'] == true)
  310. {
  311. if ($_SESSION['is_login'] != 1)
  312. {
  313. $err = array('code' => errcode::ErrAddCart,'msg' => "只能登录后,才能向购物车添加限时购商品.");;
  314. return false;
  315. }
  316. }
  317. $ret = $this->check_goods($goods_info, $quantity);
  318. if(is_array($ret)) {
  319. $err = $ret;
  320. return false;
  321. }
  322. $bl_id = 0;
  323. }
  324. elseif (is_numeric($_GET['bl_id']))
  325. {
  326. if ($_SESSION['is_login'] != 1) {
  327. $err = array('code' => errcode::ErrUnLogin);
  328. return false;
  329. }
  330. $bl_id = intval($_GET['bl_id']);
  331. if ($bl_id <= 0) {
  332. $err = array('code' => errcode::ErrInputParam);
  333. return false;
  334. }
  335. $model_bl = Model('p_bundling');
  336. $bl_info = $model_bl->getBundlingInfo(array('bl_id'=>$bl_id));
  337. if (empty($bl_info) || $bl_info['bl_state'] == '0') {
  338. $err = array('code' => errcode::ErrBLUnExist);
  339. return false;
  340. }
  341. $bl_goods_list = $model_bl->getBundlingGoodsList(array('bl_id'=>$bl_id));
  342. $goods_id_array = array();
  343. $bl_amount = 0;
  344. foreach ($bl_goods_list as $goods) {
  345. $goods_id_array[] = $goods['goods_id'];
  346. $bl_amount += $goods['bl_goods_price'];
  347. }
  348. $model_goods = Model('goods');
  349. $goods_list = $model_goods->getGoodsOnlineListAndPromotionByIdArray($goods_id_array);
  350. foreach ($goods_list as $goods)
  351. {
  352. $err = $this->check_goods($goods,1);
  353. if($err === true) {
  354. continue;
  355. } else {
  356. return false;
  357. }
  358. }
  359. //优惠套装作为一条记录插入购物车,图片取套装内的第一个商品图
  360. $goods_info = array();
  361. $goods_info['store_id'] = $bl_info['store_id'];
  362. $goods_info['goods_id'] = $goods_list[0]['goods_id'];
  363. $goods_info['goods_name'] = $bl_info['bl_name'];
  364. $goods_info['goods_price'] = $bl_amount;
  365. $goods_info['goods_num'] = 1;
  366. $goods_info['goods_image'] = $goods_list[0]['goods_image'];
  367. $goods_info['store_name'] = $bl_info['store_name'];
  368. $goods_info['bl_id'] = $bl_id;
  369. $quantity = 1;
  370. $goods_id = intval($goods_info['goods_id']);
  371. }
  372. else
  373. {
  374. $err = array('code' => errcode::ErrInputParam);
  375. return false;
  376. }
  377. $save_type = $this->save_type();
  378. if($_SESSION['member_id']) {
  379. $goods_info['buyer_id'] = $_SESSION['member_id'];
  380. }
  381. $model_cart = Model('cart');
  382. $insert = $model_cart->addCart($goods_info, $save_type , $quantity);
  383. if ($insert) {
  384. $data = array('result' => 1, 'num' => $model_cart->cart_goods_num, 'amount' => ncPriceFormat($model_cart->cart_all_price));
  385. $ext_info = array('bl_id' => $bl_id,'goods_id' => $goods_id,'cart_id' => $insert);
  386. return $data;
  387. } else {
  388. $err = array('code' => errcode::ErrAddCart);
  389. return false;
  390. }
  391. }
  392. private function check_goods($goods_info, $quantity)
  393. {
  394. if(empty($quantity)) {
  395. return array('code' => errcode::ErrInputParam, 'msg' => errcode::msg(errcode::ErrInputParam));
  396. }
  397. if(empty($goods_info)) {
  398. return array('code' => errcode::ErrGoodsOff, 'msg'=> '商品已下架或不存在');
  399. }
  400. if ($goods_info['store_id'] == $_SESSION['store_id']) {
  401. return array('code' => errcode::ErrCanNotBuyOwn, 'msg'=> errcode::msg(errcode::ErrCanNotBuyOwn));
  402. }
  403. if(intval($goods_info['goods_storage']) < 1) {
  404. return array('code' => errcode::ErrGoodsOutofStock, 'msg' => errcode::msg(errcode::ErrGoodsOutofStock));
  405. }
  406. if(intval($goods_info['goods_storage']) < $quantity) {
  407. return array('code' => errcode::ErrStorageShort, 'msg' => errcode::msg(errcode::ErrStorageShort));
  408. }
  409. if ($goods_info['is_virtual'] || $goods_info['is_fcode'] || $goods_info['is_presell']) {
  410. return array('code' => errcode::ErrGoodsSpecial, 'msg' => errcode::msg(errcode::ErrGoodsSpecial));
  411. }
  412. return true;
  413. }
  414. public function cart_editOp()
  415. {
  416. if($_SESSION['is_login'] != 1) {
  417. return self::outerr(errcode::ErrUnLogin);
  418. }
  419. $cart_list = explode(',', urldecode($_POST['cart_list']));
  420. $new_cart_list = array();
  421. if (is_array($cart_list))
  422. {
  423. foreach ($cart_list as $value) {
  424. if (preg_match_all('/^(\d{1,10})\|(\d{1,6})$/', $value, $match)) {
  425. if (intval($match[2][0]) > 0) {
  426. $new_cart_list[$match[1][0]] = $match[2][0];
  427. }
  428. }
  429. }
  430. $model_cart = Model('cart');
  431. $condition = array('buyer_id' => $_SESSION['member_id']);
  432. $original_cart_list = $model_cart->listCart(self::db_type, $condition);
  433. $quantity_error = array();
  434. foreach ($original_cart_list as $key => $value)
  435. {
  436. if (array_key_exists($value['cart_id'], $new_cart_list))
  437. {
  438. $quantity = intval($new_cart_list[$value['cart_id']]);
  439. if (intval($value['goods_num']) !== $quantity)
  440. {
  441. if (!$this->check_goods_storage($value, $quantity)) {
  442. array_push($quantity_error, array('cart_id' => $value['cart_id'], 'quantity' => $quantity, 'err_info' => '库存不足'));
  443. } else {
  444. $data = array();
  445. $data['goods_num'] = $quantity;
  446. $update = $model_cart->editCart($data, array('cart_id' => $value['cart_id']));
  447. if (!$update) {
  448. return self::outerr(errcode::ErrCart, '购物车修改失败');
  449. }
  450. }
  451. }
  452. }
  453. else
  454. {
  455. $delete = $model_cart->delCart(self::db_type, array('cart_id' => $value['cart_id']));
  456. if (!$delete) {
  457. return self::outerr(errcode::ErrCart, '购物车修改失败');
  458. }
  459. }
  460. }
  461. if (count($quantity_error) > 0) {
  462. self::outsuccess(array('result' => '0', 'quantity_error' => $quantity_error));
  463. } else {
  464. self::outsuccess(array('result' => '1','quantity_error' => NULL));
  465. }
  466. }
  467. else {
  468. return self::outerr(errcode::ErrCart, '购物车列表格式错误');
  469. }
  470. }
  471. /**
  472. * 购物车更新商品数量
  473. */
  474. public function editOp()
  475. {
  476. $cart_id = intval($_POST['cart_id']);
  477. $quantity = intval($_POST['quantity']);
  478. if ($cart_id <= 0 || $quantity < 0) {
  479. return self::outerr(errcode::ErrInputParam);
  480. }
  481. if($quantity > 0) {
  482. $ret = $this->do_edit(intval(abs($cart_id)),intval($quantity));
  483. }
  484. else {
  485. $ret = $this->do_del($cart_id);
  486. }
  487. if ($ret === true) {
  488. $save_type = $this->save_type();
  489. $mod_cart = Model('cart');
  490. $cart_num = $mod_cart->getCartNum($save_type,array('buyer_id'=>$_SESSION['member_id']));
  491. $goods_num = $mod_cart->getCartItemNum($save_type,$cart_id);
  492. $result['cart_count'] = $cart_num;
  493. $result['cart_id'] = $cart_id;
  494. $result['goods_num'] = $goods_num;
  495. self::outsuccess($result);
  496. } else {
  497. self::outerr(errcode::ErrAddCart,$ret['err_info']);
  498. }
  499. }
  500. public function do_edit($cart_id,$quantity_in)
  501. {
  502. $model_cart = Model('cart');
  503. $model_goods= Model('goods');
  504. $logic_buy_1 = logic('buy_1');
  505. $quantity = $quantity_in;
  506. //存放返回信息
  507. $cart_info = $model_cart->getCartInfo(array('cart_id'=>$cart_id,'buyer_id'=>$_SESSION['member_id']));
  508. if ($cart_info['bl_id'] == '0')
  509. {
  510. //普通商品
  511. $goods_id = intval($cart_info['goods_id']);
  512. $goods_info = $logic_buy_1->getGoodsOnlineInfo($goods_id,$quantity);
  513. if(empty($goods_info))
  514. {
  515. if($_SESSION['is_login'] == 1) {
  516. QueueClient::push('delCart', array('buyer_id'=>$_SESSION['member_id'],'cart_ids'=>array($cart_id)));
  517. }
  518. return array('cart_id' => $cart_id, 'quantity' => $quantity, 'err_info' => '商品已被下架');
  519. }
  520. //抢购
  521. $logic_buy_1->getGroupbuyInfo($goods_info);
  522. //限时折扣
  523. $logic_buy_1->getXianshiInfo($goods_info,$quantity);
  524. $quantity = $goods_info['goods_num'];
  525. if($quantity == $cart_info['goods_num']) {
  526. return array('cart_id' => $cart_id, 'quantity' => $quantity, 'err_info' => "该商品只允许抢购{$quantity}件~");
  527. }
  528. if(intval($goods_info['goods_storage']) < $quantity) {
  529. $model_cart->editCart(array('goods_num'=>$goods_info['goods_storage']),array('cart_id'=>$cart_id,'buyer_id'=>$_SESSION['member_id']));
  530. return array('cart_id' => $cart_id, 'quantity' => $goods_info['goods_storage'], 'err_info' => '库存不足,已将您购物车更新为库存数量.');
  531. }
  532. }
  533. else
  534. {
  535. //优惠套装商品
  536. $model_bl = Model('p_bundling');
  537. $bl_goods_list = $model_bl->getBundlingGoodsList(array('bl_id'=>$cart_info['bl_id']));
  538. $goods_id_array = array();
  539. foreach ($bl_goods_list as $goods) {
  540. $goods_id_array[] = $goods['goods_id'];
  541. }
  542. $goods_list = $model_goods->getGoodsOnlineListAndPromotionByIdArray($goods_id_array);
  543. //如果其中有商品下架,删除
  544. if (count($goods_list) != count($goods_id_array)) {
  545. QueueClient::push('delCart', array('buyer_id'=>$_SESSION['member_id'],'cart_ids'=>array($cart_id)));
  546. return array('cart_id' => $cart_id, 'quantity' => 0, 'err_info' => '该优惠套装已经无效,建议您购买单个商品.');
  547. }
  548. //如果有商品库存不足,更新购买数量到目前最大库存
  549. foreach ($goods_list as $goods_info)
  550. {
  551. if ($quantity > $goods_info['goods_storage']) {
  552. $model_cart->editCart(array('goods_num'=>$goods_info['goods_storage']),array('cart_id'=>$cart_id,'buyer_id'=>$_SESSION['member_id']));
  553. return array('cart_id' => $cart_id, 'quantity' => $goods_info['goods_storage'], 'err_info' => '该优惠套装部分商品库存不足,建议您降低购买数量或购买库存足够的单个商品.');
  554. }
  555. }
  556. $goods_info['goods_price'] = $cart_info['goods_price'];
  557. }
  558. $data = array();
  559. $data['goods_num'] = $quantity;
  560. $data['goods_price'] = $goods_info['goods_price'];
  561. $update = $model_cart->editCart($data,array('cart_id'=>$cart_id,'buyer_id'=>$_SESSION['member_id']));
  562. if ($update) {
  563. return true;
  564. } else {
  565. return array('cart_id' => $cart_id, 'quantity' => 0, 'err_info' => '更新购物车失败.');
  566. }
  567. }
  568. private function do_del($cart_id)
  569. {
  570. $save_type = $this->save_type();
  571. $model_cart = Model('cart');
  572. if ($_SESSION['member_id']) {
  573. $delete = $model_cart->delCart($save_type,array('cart_id'=>$cart_id,'buyer_id'=>$_SESSION['member_id']));
  574. return $delete;
  575. } else {
  576. $delete = $model_cart->delCart($save_type,array('cart_id'=>$cart_id));
  577. return $delete;
  578. }
  579. }
  580. public function delOp()
  581. {
  582. $cart_id = intval($_POST['cart_id']);
  583. if($cart_id <=0 ) {
  584. return self::outerr(errcode::ErrInputParam);
  585. }
  586. $ret = $this->do_del($cart_id);
  587. if($ret) {
  588. return self::outsuccess(array('result' => '1'));
  589. } else {
  590. return self::outerr(errcode::ErrCartDelError);
  591. }
  592. }
  593. public function cart_delOp()
  594. {
  595. if($_SESSION['is_login'] != 1) {
  596. return self::outerr(errcode::ErrUnLogin);
  597. }
  598. $cart_id = intval($_POST['cart_id']);
  599. $model_cart = Model('cart');
  600. if ($cart_id > 0) {
  601. $condition = array();
  602. $condition['buyer_id'] = $_SESSION['member_id'];
  603. $condition['cart_id'] = $cart_id;
  604. $model_cart->delCart(self::db_type, $condition);
  605. }
  606. self::outsuccess(array('result' => '1'));
  607. }
  608. private function check_goods_storage($cart_info, $quantity)
  609. {
  610. $model_goods = Model('goods');
  611. $model_bl = Model('p_bundling');
  612. $logic_buy_1 = Logic('buy_1');
  613. if ($cart_info['bl_id'] == '0') {
  614. //普通商品
  615. $goods_info = $model_goods->getGoodsOnlineInfoAndPromotionById($cart_info['goods_id']);
  616. $logic_buy_1->getGroupbuyInfo($goods_info);
  617. $logic_buy_1->getXianshiInfo($goods_info, $quantity);
  618. if (intval($goods_info['goods_storage']) < $quantity) {
  619. return false;
  620. }
  621. } else {
  622. //优惠套装商品
  623. $bl_goods_list = $model_bl->getBundlingGoodsList(array('bl_id' => $cart_info['bl_id']));
  624. $goods_id_array = array();
  625. foreach ($bl_goods_list as $goods) {
  626. $goods_id_array[] = $goods['goods_id'];
  627. }
  628. $bl_goods_list = $model_goods->getGoodsOnlineListAndPromotionByIdArray($goods_id_array);
  629. //如果有商品库存不足,更新购买数量到目前最大库存
  630. foreach ($bl_goods_list as $goods_info) {
  631. if (intval($goods_info['goods_storage']) < $quantity) {
  632. return false;
  633. }
  634. }
  635. }
  636. return true;
  637. }
  638. private function save_type()
  639. {
  640. if ($_SESSION['is_login'] == 1) {
  641. $save_type = self::db_type;
  642. } else {
  643. $save_type = self::session_type;
  644. }
  645. return $save_type;
  646. }
  647. }