Bundling.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace addon\bundling\model;
  11. use app\model\BaseModel;
  12. /**
  13. * 优惠套餐
  14. */
  15. class Bundling extends BaseModel
  16. {
  17. /**
  18. * 添加优惠套餐
  19. * @param $data
  20. * @param $sku_ids
  21. * @return array
  22. */
  23. public function addBundling($data, $sku_ids)
  24. {
  25. if ($data[ "bl_price" ] <= 0) {
  26. return $this->error([], "优惠套餐价格不能小于或等与0");
  27. }
  28. model("promotion_bundling")->startTrans();
  29. try {
  30. $sku_id_array = explode(',', $sku_ids);
  31. $goods_money = 0;
  32. $sku_array = [];
  33. foreach ($sku_id_array as $k => $v) {
  34. $sku_info = model('goods_sku')->getInfo([ [ 'sku_id', '=', $v ] ], 'sku_id,sku_name,price,sku_image,is_virtual');
  35. if ($sku_info[ "is_virtual" ] == 1) {
  36. model("promotion_bundling")->rollback();
  37. return $this->error([], "优惠套餐中不能包含虚拟商品");
  38. }
  39. unset($sku_info[ "is_virtual" ]);
  40. $goods_money += $sku_info[ 'price' ];
  41. $sku_array[] = $sku_info;
  42. }
  43. $data[ "goods_money" ] = $goods_money;
  44. $data[ "update_time" ] = time();
  45. $bundling_id = model("promotion_bundling")->add($data);
  46. foreach ($sku_array as $k => $v) {
  47. $v[ 'bl_id' ] = $bundling_id;
  48. $v[ 'site_id' ] = $data[ "site_id" ];
  49. $v[ 'promotion_price' ] = $v[ 'price' ] / $goods_money * $data[ 'bl_price' ];
  50. model("promotion_bundling_goods")->add($v);
  51. }
  52. model("promotion_bundling")->commit();
  53. return $this->success($bundling_id);
  54. } catch (\Exception $e) {
  55. model("promotion_bundling")->rollback();
  56. return $this->error('', $e->getMessage());
  57. }
  58. }
  59. /**
  60. * 编辑优惠套餐
  61. * @param $data
  62. * @param $sku_ids
  63. * @param $condition
  64. * @return array
  65. */
  66. public function editBundling($data, $sku_ids, $condition)
  67. {
  68. if ($data[ "bl_price" ] <= 0) {
  69. return $this->error([], "优惠套餐价格不能小于或等与0");
  70. }
  71. $check_condition = array_column($condition, 2, 0);
  72. model("promotion_bundling")->startTrans();
  73. try {
  74. model("promotion_bundling_goods")->delete($condition);
  75. $sku_id_array = explode(',', $sku_ids);
  76. $goods_money = 0;
  77. $sku_array = [];
  78. foreach ($sku_id_array as $k => $v) {
  79. $sku_info = model('goods_sku')->getInfo([ [ 'sku_id', '=', $v ] ], 'sku_id,sku_name,price,sku_image,is_virtual');
  80. if ($sku_info[ "is_virtual" ] == 1) {
  81. model("promotion_bundling")->rollback();
  82. return $this->error([], "优惠套餐中不能包含虚拟商品");
  83. }
  84. unset($sku_info[ "is_virtual" ]);
  85. $sku_info[ 'bl_id' ] = $check_condition[ 'bl_id' ];
  86. $goods_money += $sku_info[ 'price' ];
  87. $sku_array[] = $sku_info;
  88. }
  89. $data[ "goods_money" ] = $goods_money;
  90. $data[ "update_time" ] = time();
  91. $res = model("promotion_bundling")->update($data, $condition);
  92. foreach ($sku_array as $k => $v) {
  93. $v[ 'promotion_price' ] = $v[ 'price' ] / $goods_money * $data[ 'bl_price' ];
  94. $v[ "site_id" ] = $check_condition[ "site_id" ];
  95. model("promotion_bundling_goods")->add($v);
  96. }
  97. model("promotion_bundling")->commit();
  98. return $this->success($res);
  99. } catch (\Exception $e) {
  100. model("promotion_bundling")->rollback();
  101. return $this->error('', $e->getMessage());
  102. }
  103. }
  104. /**
  105. * 删除优惠套餐
  106. * @param number $bl_id
  107. * @param number $site_id
  108. */
  109. public function deleteBundling($bl_id, $site_id)
  110. {
  111. $condition = array (
  112. [ 'bl_id', "=", $bl_id ],
  113. [ "site_id", "=", $site_id ]
  114. );
  115. $res = model('promotion_bundling')->delete($condition);
  116. if ($res) {
  117. model('promotion_bundling_goods')->delete([ 'bl_id' => $bl_id ]);
  118. return $this->success($res);
  119. } else {
  120. return $this->error();
  121. }
  122. }
  123. /**
  124. * 获取优惠套餐详情
  125. * @param $condition
  126. * @return array
  127. */
  128. public function getBundlingInfo($condition)
  129. {
  130. $data = model("promotion_bundling")->getInfo($condition, 'bl_id,bl_name, site_id, site_name, bl_price, goods_money, shipping_fee_type,status');
  131. return $this->success($data);
  132. }
  133. /**
  134. * 获取优惠套餐详情
  135. * @param $condition
  136. * @return array
  137. */
  138. public function getBundlingDetail($condition)
  139. {
  140. $check_condition = array_column($condition, 2, 0);
  141. $bl_id = isset($check_condition[ 'bl_id' ]) ? $check_condition[ 'bl_id' ] : '';
  142. $data = model("promotion_bundling")->getInfo($condition, 'bl_id,bl_name, site_id, site_name, bl_price, goods_money, shipping_fee_type,status');
  143. if (!empty($data)) {
  144. $order = '';
  145. $alias = 'pbg';
  146. $condition = [
  147. [ 'pbg.bl_id', '=', $bl_id ],
  148. [ 'ngs.is_delete', '=', 0 ]
  149. ];
  150. $field = 'ngs.sku_id,ngs.goods_id, ngs.sku_name, ngs.price, ngs.sku_image, ngs.stock,ngs.unit,pbg.promotion_price,g.sale_store';
  151. $join = [
  152. [
  153. 'goods_sku ngs',
  154. 'pbg.sku_id = ngs.sku_id',
  155. 'inner'
  156. ],
  157. [
  158. 'goods g',
  159. 'g.goods_id = ngs.goods_id',
  160. 'left'
  161. ],
  162. ];
  163. $bundling_goods = model("promotion_bundling_goods")->getList($condition, $field, $order, $alias, $join);
  164. foreach ($bundling_goods as $k => $v) {
  165. $bundling_goods[ $k ][ 'stock' ] = numberFormat($bundling_goods[ $k ][ 'stock' ]);
  166. }
  167. $data[ 'bundling_goods' ] = $bundling_goods;
  168. $data[ 'bundling_goods_count' ] = count($data[ 'bundling_goods' ]);
  169. }
  170. return $this->success($data);
  171. }
  172. /**
  173. * 获取商品优惠套餐
  174. * @param $sku_id
  175. * @return array
  176. */
  177. public function getBundlingGoods($sku_id)
  178. {
  179. $bundling_ids = model("promotion_bundling_goods")->getList([ [ 'sku_id', '=', $sku_id ] ], 'bl_id');
  180. $bundling_array = [];
  181. foreach ($bundling_ids as $k => $v) {
  182. $temp_result = $this->getBundlingDetail([ [ 'bl_id', '=', $v[ "bl_id" ] ], [ 'status', '=', 1 ] ]);
  183. if (!empty($temp_result[ "data" ])) $bundling_array[] = $temp_result[ "data" ];
  184. }
  185. return $this->success($bundling_array);
  186. }
  187. /**
  188. * 获取优惠餐列表
  189. * @param array $condition
  190. * @param number $page
  191. * @param string $page_size
  192. * @param string $order
  193. * @param string $field
  194. */
  195. public function getBundlingPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
  196. {
  197. $list = model('promotion_bundling')->pageList($condition, $field, $order, $page, $page_size);
  198. return $this->success($list);
  199. }
  200. /**
  201. * 删除商品(需判断套餐是否存在该商品,存在活动关闭)
  202. * @param $param
  203. * @return array
  204. */
  205. public function cronDeleteGoods($param)
  206. {
  207. //获取商品sku_id
  208. $sku_ids = model('goods_sku')->getColumn([ [ 'goods_id', 'in', (array) $param[ 'goods_id' ] ], [ 'site_id', '=', $param[ 'site_id' ] ] ], 'sku_id');
  209. if (!empty($sku_ids)) {
  210. //获取组合套餐id
  211. $bl_ids = model('promotion_bundling_goods')->getColumn([ [ 'sku_id', 'in', $sku_ids ], [ 'site_id', '=', $param[ 'site_id' ] ] ], 'bl_id');
  212. if (!empty($bl_ids)) {
  213. $bl_ids = array_unique($bl_ids);
  214. //将组合套餐活动下架
  215. $res = model('promotion_bundling')->update([ 'status' => 0 ], [ [ 'bl_id', 'in', $bl_ids ], [ 'site_id', '=', $param[ 'site_id' ] ] ]);
  216. return $this->success($res);
  217. }
  218. }
  219. }
  220. /**
  221. * 获取组合
  222. *
  223. * @param $sku_id
  224. * @return array
  225. */
  226. public function getBundlingGoodsNew($sku_id)
  227. {
  228. $goods_id = model('goods_sku')->getInfo([ [ 'sku_id', '=', $sku_id ] ], 'goods_id');
  229. $sku_list_id = model('goods_sku')->getList([ [ 'goods_id', '=', $goods_id[ 'goods_id' ] ] ], 'sku_id');
  230. $sku_id_arr = [];
  231. foreach ($sku_list_id as $key => $val) {
  232. if ($val[ 'sku_id' ] != $sku_id) {
  233. $sku_id_arr[] = $val[ 'sku_id' ];
  234. }
  235. }
  236. $bundling_list1 = model("promotion_bundling_goods")->getList([ [ 'sku_id', '=', $sku_id ] ], 'bl_id');
  237. $bundling_list = model("promotion_bundling_goods")->getList([ [ 'sku_id', 'in', $sku_id_arr ] ], 'bl_id');
  238. $bl_id_arr1 = [];
  239. if ($bundling_list1) {
  240. foreach ($bundling_list1 as $kes => $vas) {
  241. $bl_id_arr1[] = $vas[ 'bl_id' ];
  242. }
  243. }
  244. $bl_id_arr = [];
  245. if ($bundling_list) {
  246. foreach ($bundling_list as $ke => $va) {
  247. $bl_id_arr[] = $va[ 'bl_id' ];
  248. }
  249. }
  250. $bl_id_arr = array_unique(array_merge($bl_id_arr1, $bl_id_arr));
  251. $bundling_array = [];
  252. foreach ($bl_id_arr as $k => $v) {
  253. $temp_result = $this->getBundlingDetail([ [ 'bl_id', '=', $v ], [ 'status', '=', 1 ] ]);
  254. if (!empty($temp_result[ "data" ])) $bundling_array[] = $temp_result[ "data" ];
  255. }
  256. return $this->success($bundling_array);
  257. }
  258. }