Exchange.php 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace addon\pointexchange\model;
  11. use app\model\BaseModel;
  12. use addon\coupon\model\Coupon;
  13. use app\model\goods\Goods;
  14. use app\model\upload\Upload;
  15. /**
  16. * 积分兑换
  17. */
  18. class Exchange extends BaseModel
  19. {
  20. public $type = [
  21. 1 => [
  22. 'name' => 'goods',
  23. 'title' => '兑换商品',
  24. ],
  25. 2 => [
  26. 'name' => 'coupon',
  27. 'title' => '兑换优惠券',
  28. ],
  29. 3 => [
  30. 'name' => 'balance',
  31. 'title' => '兑换红包',
  32. ],
  33. ];
  34. /**
  35. * 添加积分兑换
  36. * @param array $data
  37. */
  38. public function addExchange($data)
  39. {
  40. model('promotion_exchange')->startTrans();
  41. try {
  42. $exchange_goods_data = [
  43. 'site_id' => $data[ 'site_id' ],
  44. 'type' => $data[ 'type' ],
  45. 'type_name' => $data[ 'type_name' ],
  46. 'state' => $data[ 'state' ],
  47. 'create_time' => time(),
  48. ];
  49. if ($data[ 'type' ] == 1) {
  50. $exchange_goods = $data[ 'goods_data' ];
  51. foreach ($exchange_goods as $k => $v) {
  52. $exist = model('promotion_exchange_goods')->getInfo([ [ 'type', '=', 1 ], [ 'type_id', '=', $v[ 'goods_id' ] ] ], 'id');
  53. if (!empty($exist)) {
  54. return $this->error('', '商品已存在,请不要重复添加');
  55. }
  56. $sku_model = new Goods();
  57. $sku_info = $sku_model->getGoodsSkuInfo([ [ 'sku_id', '=', $v[ 'sku_list' ][ 0 ][ 'sku_id' ] ] ], 'sku_name,sku_image,price,stock,goods_content')[ 'data' ];
  58. $exchange_goods_data[ 'type_id' ] = $v[ 'goods_id' ];
  59. $exchange_goods_data[ 'name' ] = $sku_info[ 'sku_name' ];
  60. $exchange_goods_data[ 'image' ] = $sku_info[ 'sku_image' ];
  61. $exchange_goods_data[ 'point' ] = $v[ 'sku_list' ][ 0 ][ 'point' ];
  62. $exchange_goods_data[ 'price' ] = $v[ 'sku_list' ][ 0 ][ 'exchange_price' ];
  63. $exchange_goods_data[ 'content' ] = $sku_info[ 'goods_content' ];
  64. $exchange_goods_data[ 'rule' ] = $data[ 'rule' ];
  65. $exchange_goods_data[ 'pay_type' ] = $v[ 'sku_list' ][ 0 ][ 'exchange_price' ] ? 1 : 0;
  66. $exchange_goods_id = model('promotion_exchange_goods')->add($exchange_goods_data);
  67. foreach ($v[ 'sku_list' ] as $index => $item) {
  68. $sku_info = $sku_model->getGoodsSkuInfo([ [ 'sku_id', '=', $item[ 'sku_id' ] ] ], 'sku_name,sku_image,price,stock,goods_content')[ 'data' ];
  69. $exchange_data = [
  70. 'site_id' => $data[ 'site_id' ],
  71. 'exchange_goods_id' => $exchange_goods_id,
  72. 'type' => $data[ 'type' ],
  73. 'type_name' => $data[ 'type_name' ],
  74. 'type_id' => $item[ 'sku_id' ],
  75. 'state' => $data[ 'state' ],
  76. 'rule' => $data[ 'rule' ],
  77. 'name' => $sku_info[ 'sku_name' ],
  78. 'image' => $sku_info[ 'sku_image' ],
  79. 'stock' => $sku_info[ 'stock' ],
  80. 'pay_type' => empty($item[ 'exchange_price' ]) ? 0 : 1,
  81. 'point' => $item[ 'point' ],
  82. 'market_price' => $sku_info[ 'price' ],
  83. 'price' => $item[ 'exchange_price' ],
  84. 'limit_num' => $item[ 'limit_num' ],
  85. 'create_time' => time(),
  86. 'content' => $sku_info[ 'goods_content' ],
  87. 'is_free_shipping' => $data[ 'is_free_shipping' ], //是否免邮(0不免邮 1免邮)
  88. 'delivery_type' => $data[ 'delivery_type' ] ?? 1, //运费类型( 0 固定运费 1运费模板 2按照商品)
  89. 'shipping_template' => $data[ 'shipping_template' ], //运费模板
  90. 'delivery_price' => $data[ 'delivery_price' ] ?? 0 //运费
  91. ];
  92. model('promotion_exchange')->add($exchange_data);
  93. }
  94. }
  95. } elseif ($data[ 'type' ] == 2) {
  96. $exist = model('promotion_exchange_goods')->getInfo([ [ 'type', '=', 2 ], [ 'type_id', '=', $data[ 'coupon_type_id' ] ] ], 'id');
  97. if (!empty($exist)) {
  98. return $this->error('', '该优惠券已存在,请不要重复添加');
  99. }
  100. $coupon = new Coupon();
  101. $coupon_type_info = $coupon->getCouponTypeInfo([ [ 'coupon_type_id', '=', $data[ 'coupon_type_id' ] ] ], 'coupon_type_id,coupon_name,money,count,image,status,type,discount')[ 'data' ];
  102. $exchange_goods_data[ 'type_id' ] = $data[ 'coupon_type_id' ];
  103. $exchange_goods_data[ 'name' ] = $coupon_type_info[ 'coupon_name' ];
  104. $exchange_goods_data[ 'image' ] = $coupon_type_info[ 'image' ];
  105. $exchange_goods_data[ 'point' ] = $data[ 'point' ];
  106. $exchange_goods_data[ 'content' ] = $data[ 'content' ];
  107. $exchange_goods_id = model('promotion_exchange_goods')->add($exchange_goods_data);
  108. $exchange_data = [
  109. 'site_id' => $data[ 'site_id' ],
  110. 'exchange_goods_id' => $exchange_goods_id,
  111. 'type' => $data[ 'type' ],
  112. 'type_name' => $data[ 'type_name' ],
  113. 'state' => $data[ 'state' ],
  114. 'type_id' => $data[ 'coupon_type_id' ],
  115. 'name' => $coupon_type_info[ 'coupon_name' ],
  116. 'image' => $coupon_type_info[ 'image' ],
  117. 'stock' => $data[ 'stock' ],
  118. 'pay_type' => 0,
  119. 'point' => $data[ 'point' ],
  120. 'create_time' => time(),
  121. 'content' => $data[ 'content' ],
  122. ];
  123. if ($coupon_type_info[ 'type' ] == 'reward') {
  124. $exchange_data[ 'market_price' ] = $coupon_type_info[ 'money' ];
  125. } elseif ($coupon_type_info[ 'type' ] == 'discount') {
  126. $exchange_data[ 'market_price' ] = $coupon_type_info[ 'discount' ];
  127. }
  128. model('promotion_exchange')->add($exchange_data);
  129. } elseif ($data[ 'type' ] == 3) {
  130. $exchange_goods_data[ 'name' ] = $data[ 'name' ];
  131. $exchange_goods_data[ 'image' ] = $data[ 'image' ];
  132. $exchange_goods_data[ 'point' ] = $data[ 'point' ];
  133. $exchange_goods_data[ 'balance' ] = $data[ 'balance' ];
  134. $exchange_goods_data[ 'content' ] = $data[ 'content' ];
  135. $exchange_goods_id = model('promotion_exchange_goods')->add($exchange_goods_data);
  136. $exchange_data = [
  137. 'site_id' => $data[ 'site_id' ],
  138. 'exchange_goods_id' => $exchange_goods_id,
  139. 'type' => $data[ 'type' ],
  140. 'type_name' => $data[ 'type_name' ],
  141. 'state' => $data[ 'state' ],
  142. 'name' => $data[ 'name' ],
  143. 'image' => $data[ 'image' ],
  144. 'stock' => $data[ 'stock' ],
  145. 'pay_type' => 0,
  146. 'point' => $data[ 'point' ],
  147. 'balance' => $data[ 'balance' ],
  148. 'create_time' => time(),
  149. 'content' => $data[ 'content' ],
  150. ];
  151. model('promotion_exchange')->add($exchange_data);
  152. }
  153. model('promotion_exchange')->commit();
  154. return $this->success();
  155. } catch (\Exception $e) {
  156. model('promotion_exchange')->rollback();
  157. return $this->error('', $e->getMessage());
  158. }
  159. }
  160. /**
  161. * 编辑积分兑换
  162. * @param array $data
  163. */
  164. public function editExchange($data)
  165. {
  166. model('promotion_exchange')->startTrans();
  167. try {
  168. $exchange_goods_id = $data[ 'id' ];
  169. if ($data[ 'type' ] == 1) {
  170. $goods_data = $data[ 'goods_data' ];
  171. $sku_model = new Goods();
  172. $sku_info = $sku_model->getGoodsSkuInfo([ [ 'sku_id', '=', $goods_data[ 0 ][ 'sku_id' ] ] ], 'sku_name,sku_image,price,stock,goods_content')[ 'data' ];
  173. $exchange_goods_data = [
  174. 'modify_time' => time(),
  175. 'pay_type' => $goods_data[ 0 ][ 'exchange_price' ] ? 1 : 0,
  176. ];
  177. $exchange_goods_data[ 'name' ] = $sku_info[ 'sku_name' ];
  178. $exchange_goods_data[ 'image' ] = $sku_info[ 'sku_image' ];
  179. $exchange_goods_data[ 'point' ] = $goods_data[ 0 ][ 'point' ];
  180. $exchange_goods_data[ 'price' ] = $goods_data[ 0 ][ 'exchange_price' ];
  181. $exchange_goods_data[ 'content' ] = $sku_info[ 'goods_content' ];
  182. $exchange_goods_data[ 'rule' ] = $data[ 'rule' ];
  183. $exchange_goods_data[ 'state' ] = $data[ 'state' ];
  184. model('promotion_exchange_goods')->update($exchange_goods_data, [ [ 'id', '=', $exchange_goods_id ] ]);
  185. model('promotion_exchange')->delete([ [ 'exchange_goods_id', '=', $exchange_goods_id ] ]);
  186. foreach ($goods_data as $index => $item) {
  187. $sku_info = $sku_model->getGoodsSkuInfo([ [ 'sku_id', '=', $item[ 'sku_id' ] ] ], 'sku_name,sku_image,price,stock,goods_content')[ 'data' ];
  188. $exchange_data = [
  189. 'site_id' => $data[ 'site_id' ],
  190. 'exchange_goods_id' => $exchange_goods_id,
  191. 'type' => $data[ 'type' ],
  192. 'type_name' => $data[ 'type_name' ],
  193. 'type_id' => $item[ 'sku_id' ],
  194. 'state' => $data[ 'state' ],
  195. 'rule' => $data[ 'rule' ],
  196. 'name' => $sku_info[ 'sku_name' ],
  197. 'image' => $sku_info[ 'sku_image' ],
  198. 'stock' => $sku_info[ 'stock' ],
  199. 'pay_type' => empty($item[ 'exchange_price' ]) ? 0 : 1,
  200. 'point' => $item[ 'point' ],
  201. 'market_price' => $sku_info[ 'price' ],
  202. 'price' => $item[ 'exchange_price' ],
  203. 'limit_num' => $item[ 'limit_num' ],
  204. 'create_time' => time(),
  205. 'content' => $sku_info[ 'goods_content' ],
  206. 'is_free_shipping' => $data[ 'is_free_shipping' ], //是否免邮(0不免邮 1免邮)
  207. 'delivery_type' => $data[ 'delivery_type' ] ?? 1, //运费类型( 0 固定运费 1运费模板 2按照商品)
  208. 'shipping_template' => $data[ 'shipping_template' ], //运费模板
  209. 'delivery_price' => $data[ 'delivery_price' ] ?? 0 //运费
  210. ];
  211. model('promotion_exchange')->add($exchange_data);
  212. }
  213. } else if ($data[ 'type' ] == 2) {
  214. $coupon = new Coupon();
  215. $coupon_type_info = $coupon->getCouponTypeInfo([ [ 'coupon_type_id', '=', $data[ 'coupon_type_id' ] ] ], 'coupon_type_id,coupon_name,money,count,image,status,type,discount')[ 'data' ];
  216. $exchange_goods_data = [];
  217. $exchange_goods_data[ 'type_id' ] = $data[ 'coupon_type_id' ];
  218. $exchange_goods_data[ 'name' ] = $coupon_type_info[ 'coupon_name' ];
  219. $exchange_goods_data[ 'image' ] = $coupon_type_info[ 'image' ];
  220. $exchange_goods_data[ 'point' ] = $data[ 'point' ];
  221. $exchange_goods_data[ 'content' ] = $data[ 'content' ];
  222. $exchange_goods_data[ 'state' ] = $data[ 'state' ];
  223. model('promotion_exchange_goods')->update($exchange_goods_data, [ [ 'id', '=', $exchange_goods_id ] ]);
  224. $exchange_data = [
  225. 'site_id' => $data[ 'site_id' ],
  226. 'exchange_goods_id' => $exchange_goods_id,
  227. 'type' => $data[ 'type' ],
  228. 'type_name' => $data[ 'type_name' ],
  229. 'state' => $data[ 'state' ],
  230. 'type_id' => $data[ 'coupon_type_id' ],
  231. 'name' => $coupon_type_info[ 'coupon_name' ],
  232. 'image' => $coupon_type_info[ 'image' ],
  233. 'stock' => $data[ 'stock' ],
  234. 'pay_type' => 0,
  235. 'point' => $data[ 'point' ],
  236. 'create_time' => time(),
  237. 'content' => $data[ 'content' ],
  238. ];
  239. if ($coupon_type_info[ 'type' ] == 'reward') {
  240. $exchange_data[ 'market_price' ] = $coupon_type_info[ 'money' ];
  241. } elseif ($coupon_type_info[ 'type' ] == 'discount') {
  242. $exchange_data[ 'market_price' ] = $coupon_type_info[ 'discount' ];
  243. }
  244. model('promotion_exchange')->delete([ [ 'exchange_goods_id', '=', $exchange_goods_id ] ]);
  245. model('promotion_exchange')->add($exchange_data);
  246. } else if ($data[ 'type' ] == 3) {
  247. $exchange_goods_data = [];
  248. $exchange_goods_data[ 'name' ] = $data[ 'name' ];
  249. $exchange_goods_data[ 'image' ] = $data[ 'image' ];
  250. $exchange_goods_data[ 'point' ] = $data[ 'point' ];
  251. $exchange_goods_data[ 'balance' ] = $data[ 'balance' ];
  252. $exchange_goods_data[ 'content' ] = $data[ 'content' ];
  253. $exchange_goods_data[ 'state' ] = $data[ 'state' ];
  254. $exchange_goods_info = model('promotion_exchange_goods')->getInfo([ [ 'id', '=', $exchange_goods_id ] ]);
  255. if (!empty($exchange_goods_info[ 'image' ]) && !empty($data[ 'image' ]) && $exchange_goods_info[ 'image' ] != $data[ 'image' ]) {
  256. $upload_model = new Upload();
  257. $upload_model->deletePic($exchange_goods_info[ 'image' ], $data[ 'site_id' ]);
  258. }
  259. model('promotion_exchange_goods')->update($exchange_goods_data, [ [ 'id', '=', $exchange_goods_id ] ]);
  260. $exchange_data = [
  261. 'site_id' => $data[ 'site_id' ],
  262. 'exchange_goods_id' => $exchange_goods_id,
  263. 'type' => $data[ 'type' ],
  264. 'type_name' => $data[ 'type_name' ],
  265. 'state' => $data[ 'state' ],
  266. 'name' => $data[ 'name' ],
  267. 'image' => $data[ 'image' ],
  268. 'stock' => $data[ 'stock' ],
  269. 'pay_type' => 0,
  270. 'point' => $data[ 'point' ],
  271. 'balance' => $data[ 'balance' ],
  272. 'create_time' => time(),
  273. 'content' => $data[ 'content' ],
  274. ];
  275. model('promotion_exchange')->delete([ [ 'exchange_goods_id', '=', $exchange_goods_id ] ]);
  276. model('promotion_exchange')->add($exchange_data);
  277. }
  278. model('promotion_exchange')->commit();
  279. return $this->success();
  280. } catch (\Exception $e) {
  281. model('promotion_exchange')->rollback();
  282. return $this->error('', $e->getMessage());
  283. }
  284. }
  285. /**
  286. * 删除积分兑换
  287. * @param string $ids
  288. */
  289. public function deleteExchange($ids)
  290. {
  291. $list = model("promotion_exchange")->getList([ [ 'exchange_goods_id', 'in', $ids ] ]);
  292. if ($list) {
  293. foreach ($list as $k => $v) {
  294. if (!empty($v[ 'image' ])) {
  295. $upload_model = new Upload();
  296. $upload_model->deletePic($v[ 'image' ], $v[ 'site_id' ]);
  297. }
  298. }
  299. }
  300. model("promotion_exchange")->delete([ [ 'exchange_goods_id', 'in', $ids ] ]);
  301. model("promotion_exchange_goods")->delete([ [ 'id', 'in', $ids ] ]);
  302. return $this->success();
  303. }
  304. /**
  305. * 获取积分兑换信息
  306. * @param int $id
  307. */
  308. public function getExchangeInfo($id, $field = '*', $sku_id = 0)
  309. {
  310. $condition = [
  311. [ 'exchange_goods_id', '=', $id ]
  312. ];
  313. if ($sku_id) $condition[] = [ 'type_id', '=', $sku_id ];
  314. $info = model("promotion_exchange")->getInfo($condition, $field);
  315. if (!empty($info) && !empty($info[ 'type' ])) {
  316. switch ( $info[ 'type' ] ) {
  317. case 1:
  318. //商品
  319. $goods = new Goods();
  320. $goods_sku_info = $goods->getGoodsSkuInfo([ [ 'sku_id', '=', $info[ 'type_id' ], [ 'goods_state', '=', 1 ], [ 'is_delete', '=', 0 ] ] ], 'sku_id,sku_name,stock')[ 'data' ];
  321. if (!empty($goods_sku_info)) {
  322. $goods_sku_info[ 'stock' ] = numberFormat($goods_sku_info[ 'stock' ]);
  323. $info = array_merge($info, $goods_sku_info);
  324. } else {
  325. $info = [];
  326. }
  327. break;
  328. case 2:
  329. //优惠券
  330. $coupon = new Coupon();
  331. $coupon_type_info = $coupon->getCouponTypeInfo([ [ 'coupon_type_id', '=', $info[ 'type_id' ] ] ], 'type as coupon_type,discount_limit,count,lead_count')[ 'data' ];
  332. if (!empty($coupon_type_info)) {
  333. $info = array_merge($info, $coupon_type_info);
  334. } else {
  335. $info = [];
  336. }
  337. break;
  338. case 3:
  339. //余额红包
  340. break;
  341. }
  342. }
  343. return $this->success($info);
  344. }
  345. /**
  346. * 获取积分兑换商品详情
  347. * @param $id
  348. * @param $site_id
  349. * @return array
  350. */
  351. public function getExchangeGoodsDetail($id, $site_id)
  352. {
  353. $info = model("promotion_exchange_goods")->getInfo([ [ 'id', '=', $id ], [ 'site_id', '=', $site_id ] ], 'id,type,type_name,type_id,name,image,pay_type,point,price,delivery_price,balance,state,content,rule');
  354. // 兑换类型,1:商品,2:优惠券,3:红包
  355. switch ( $info[ 'type' ] ) {
  356. case 1:
  357. //商品
  358. $goods_sku = model('goods_sku')->getList([ [ 'goods_id', '=', $info[ 'type_id' ] ], [ 'is_delete', '=', 0 ], [ 'goods_state', '=', 1 ] ], 'stock, price,sku_id,sku_name,discount_price,stock as goods_stock,sku_image,sku_images,goods_id,site_id,goods_content');
  359. $exchange_list = model("promotion_exchange")->getList([ [ 'exchange_goods_id', '=', $id ], [ 'site_id', '=', $site_id ] ], 'limit_num, id,type,type_name,type_id,name,image,pay_type,point,price,delivery_price,balance,state,content,delivery_type,is_free_shipping,shipping_template,rule');
  360. foreach ($goods_sku as $k => $v) {
  361. $goods_sku[ $k ][ 'is_select' ] = 0;
  362. $goods_sku[ $k ][ 'exchange_price' ] = 0;
  363. $goods_sku[ $k ][ 'point' ] = 0;
  364. $goods_sku[ $k ][ 'limit_num' ] = 0;
  365. $goods_sku[ $k ][ 'stock' ] = numberFormat($goods_sku[ $k ][ 'stock' ]);
  366. $goods_sku[ $k ][ 'goods_stock' ] = numberFormat($goods_sku[ $k ][ 'goods_stock' ]);
  367. foreach ($exchange_list as $key => $val) {
  368. if ($val[ 'type_id' ] == $v[ 'sku_id' ]) {
  369. $goods_sku[ $k ][ 'is_select' ] = 1;
  370. $goods_sku[ $k ][ 'exchange_price' ] = $val[ 'price' ];
  371. $goods_sku[ $k ][ 'limit_num' ] = $val[ 'limit_num' ];
  372. $goods_sku[ $k ][ 'point' ] = $val[ 'point' ];
  373. }
  374. }
  375. }
  376. $info[ 'goods_sku' ] = $goods_sku;
  377. $info[ 'exchange_goods' ] = $exchange_list;
  378. break;
  379. case 2:
  380. //优惠券
  381. $coupon = new Coupon();
  382. $coupon_type_info = $coupon->getCouponTypeInfo([ [ 'coupon_type_id', '=', $info[ 'type_id' ] ] ], 'coupon_type_id,coupon_name,money,count as stock,status,lead_count,max_fetch,at_least,end_time,validity_type,fixed_term,goods_type,is_limit,type as coupon_type,discount_limit,discount')[ 'data' ];
  383. $exchange_info = model("promotion_exchange")->getInfo([ [ 'exchange_goods_id', '=', $id ], [ 'site_id', '=', $site_id ] ], 'market_price,stock');
  384. if (!empty($coupon_type_info)) {
  385. $info = array_merge($info, $coupon_type_info);
  386. } else {
  387. $info = [];
  388. }
  389. $info = array_merge($info, $exchange_info);
  390. break;
  391. case 3:
  392. //余额红包
  393. $exchange_info = model("promotion_exchange")->getInfo([ [ 'exchange_goods_id', '=', $id ], [ 'site_id', '=', $site_id ] ], 'stock');
  394. if (!empty($exchange_info)) {
  395. $info = array_merge($info, $exchange_info);
  396. } else {
  397. $info = [];
  398. }
  399. break;
  400. }
  401. if (!empty($info)) {
  402. return $this->success($info);
  403. } else {
  404. return $this->error('', '该兑换物品已失效');
  405. }
  406. }
  407. /**
  408. * 获取积分兑换列表
  409. * @param array $condition
  410. * @param string $field
  411. * @param string $order
  412. * @param null $limit
  413. * @param string $alias
  414. * @param array $join
  415. * @return array
  416. */
  417. public function getExchangeList($condition = [], $field = '*', $order = '', $limit = null, $alias = '', $join = [])
  418. {
  419. $list = model('promotion_exchange')->getList($condition, $field, $order, $alias, $join, '', $limit);
  420. return $this->success($list);
  421. }
  422. /**
  423. * 获取积分兑换列表
  424. * @param array $condition
  425. * @param int $page
  426. * @param int $page_size
  427. * @param string $order
  428. * @param string $field
  429. * @param string $alias
  430. * @param array $join
  431. * @return array
  432. */
  433. public function getExchangePageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = 'create_time desc', $field = '*', $alias = '', $join = [])
  434. {
  435. $list = model('promotion_exchange')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
  436. return $this->success($list);
  437. }
  438. /**
  439. * 获取积分兑换列表
  440. * @param array $condition
  441. * @param string $field
  442. * @param string $order
  443. * @param null $limit
  444. * @return array
  445. */
  446. public function getExchangeGoodsList($condition = [], $field = '*', $order = '', $limit = null)
  447. {
  448. $list = model('promotion_exchange_goods')->getList($condition, $field, $order, '', '', '', $limit);
  449. return $this->success($list);
  450. }
  451. /**
  452. * 获取积分兑换列表
  453. * @param array $condition
  454. * @param int $page
  455. * @param int $page_size
  456. * @param string $order
  457. * @param string $field
  458. * @param string $alias
  459. * @param array $join
  460. * @return array
  461. */
  462. public function getExchangeGoodsPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = 'create_time desc', $field = '*', $alias = '', $join = [])
  463. {
  464. $list = model('promotion_exchange_goods')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
  465. foreach ($list[ 'list' ] as $k => $v) {
  466. if ($v[ 'type' ] == 1) {
  467. $goods_info = model('goods')->getInfo([ [ 'goods_id', '=', $v[ 'type_id' ] ] ], "goods_name,is_delete");
  468. if (empty($goods_info)) {
  469. unset($list[ 'list' ][ $k ]);
  470. } else {
  471. if ($goods_info[ 'is_delete' ] == 1) {
  472. unset($list[ 'list' ][ $k ]);
  473. } else {
  474. $list[ 'list' ][ $k ][ 'g_name' ] = $goods_info[ 'goods_name' ];
  475. }
  476. }
  477. }
  478. }
  479. return $this->success($list);
  480. }
  481. /**
  482. * 增加库存
  483. * @param $param
  484. */
  485. public function incStock($param)
  486. {
  487. $condition = array (
  488. [ "id", "=", $param[ "id" ] ]
  489. );
  490. $num = $param[ "num" ];
  491. $info = model("promotion_exchange")->getInfo($condition, "stock, name");
  492. if (empty($info))
  493. return $this->error(-1, "");
  494. //编辑sku库存
  495. $result = model("promotion_exchange")->setInc($condition, "stock", $num);
  496. return $this->success($result);
  497. }
  498. /**
  499. * 减少库存
  500. * @param $param
  501. */
  502. public function decStock($param)
  503. {
  504. $condition = array (
  505. [ "id", "=", $param[ "id" ] ]
  506. );
  507. $num = $param[ "num" ];
  508. $info = model("promotion_exchange")->getInfo($condition, "stock, name, type");
  509. if (empty($info))
  510. return $this->error();
  511. if ($info[ 'type' ] == 2 && $info[ 'stock' ] == -1) {
  512. return $this->success();
  513. }
  514. if ($info[ "stock" ] < 0) {
  515. return $this->error('', $info[ "name" ] . "库存不足!");
  516. }
  517. //编辑sku库存
  518. $result = model("promotion_exchange")->setDec($condition, "stock", $num);
  519. if ($result === false)
  520. return $this->error();
  521. return $this->success($result);
  522. }
  523. /**
  524. * 修改标签排序
  525. * @param $sort
  526. * @param $id
  527. * @return array
  528. */
  529. public function modifyExchangeSort($sort, $id)
  530. {
  531. $res = model('promotion_exchange_goods')->update([ 'sort' => $sort ], [ [ 'id', '=', $id ] ]);
  532. return $this->success($res);
  533. }
  534. /**
  535. * 兑换商品详情
  536. * @param array $condition
  537. * @param string $field
  538. * @return array
  539. */
  540. public function getExchangeDetail($condition = [], $type = 1)
  541. {
  542. $alias = 'pe';
  543. $field = 'peg.type,peg.id as exchange_id, pe.id,pe.type_id as sku_id,peg.type_id as goods_id,pe.pay_type,pe.point, pe.price as exchange_price, pe.limit_num,
  544. pe.delivery_price,pe.balance,pe.state,pe.content,pe.exchange_goods_id,pe.rule';
  545. $join = [
  546. [ 'promotion_exchange_goods peg', 'pe.exchange_goods_id = peg.id', 'inner' ]
  547. ];
  548. if ($type == 1) {
  549. $condition[] = [ 'g.goods_state', '=', 1 ];
  550. $condition[] = [ 'g.is_delete', '=', 0 ];
  551. $field .= ',sku.site_id,sku.sku_name,sku.sku_spec_format,sku.price,sku.promotion_type,sku.stock,sku.click_num,
  552. (sku.sale_num + sku.virtual_sale) as sale_num,sku.collect_num,sku.sku_image,
  553. sku.sku_images,sku.site_id,sku.goods_content,sku.goods_state,sku.is_virtual,
  554. sku.is_free_shipping,sku.goods_spec_format,sku.goods_attr_format,sku.introduction,
  555. sku.unit,sku.video_url,sku.evaluate,sku.goods_service_ids,g.goods_image,g.goods_stock,g.goods_name,sku.qr_id,g.stock_show,g.sale_show';
  556. $join[] = [ 'goods_sku sku', 'pe.type_id = sku.sku_id', 'inner' ];
  557. $join[] = [ 'goods g', 'g.goods_id = sku.goods_id', 'inner' ];
  558. } else if ($type == 2) {
  559. $join[] = [ 'promotion_coupon_type pct', 'pct.coupon_type_id = peg.type_id', 'inner' ];
  560. $field .= ',pe.stock,pct.type as coupon_type,pct.discount_limit,pct.image,pct.coupon_name as name,pct.count, pct.lead_count
  561. ,pct.money, pct.discount, pct.at_least, pct.validity_type,pct.fixed_term,pct.end_time, pct.image';
  562. // $condition[] = [ 'pct.is_show', '=', 1 ];
  563. // $condition[] = [ 'pct.is_forbidden', '=', 0 ];
  564. } else if ($type == 3) {
  565. $field .= ',pe.stock,pe.name,pe.image,pe.balance';
  566. }
  567. $info = model('promotion_exchange')->getInfo($condition, $field, $alias, $join);
  568. if (!empty($info)) {
  569. if (isset($info[ 'stock' ])) {
  570. $info[ 'stock' ] = numberFormat($info[ 'stock' ]);
  571. }
  572. if (isset($info[ 'sale_num' ])) {
  573. $info[ 'sale_num' ] = numberFormat($info[ 'sale_num' ]);
  574. }
  575. }
  576. return $this->success($info);
  577. }
  578. /**
  579. * 兑换商品详情
  580. * @param array $condition
  581. * @param string $field
  582. * @return array
  583. */
  584. public function getExchangeSkuList($condition = [], $type = 1)
  585. {
  586. $alias = 'pe';
  587. $field = 'peg.type,peg.id as exchange_id, pe.id,pe.type_id as sku_id,peg.type_id as goods_id,pe.pay_type,pe.point, pe.price as exchange_price, pe.limit_num,
  588. pe.delivery_price,pe.balance,pe.state,pe.exchange_goods_id,pe.rule';
  589. $join = [
  590. [ 'promotion_exchange_goods peg', 'pe.exchange_goods_id = peg.id', 'inner' ]
  591. ];
  592. if ($type == 1) {
  593. $condition[] = [ 'g.goods_state', '=', 1 ];
  594. $condition[] = [ 'g.is_delete', '=', 0 ];
  595. $field .= ',sku.sku_name,sku.sku_spec_format,sku.price,sku.stock,sku.sku_image,sku.sku_images,sku.goods_spec_format,g.goods_image';
  596. $join[] = [ 'goods_sku sku', 'pe.type_id = sku.sku_id', 'inner' ];
  597. $join[] = [ 'goods g', 'g.goods_id = sku.goods_id', 'inner' ];
  598. } else if ($type == 2) {
  599. $join[] = [ 'promotion_coupon_type pct', 'pct.coupon_type_id = peg.type_id', 'inner' ];
  600. $field .= ',pe.stock,pct.type as coupon_type,pct.discount_limit,pct.image,pct.coupon_name as name,pct.count, pct.lead_count
  601. ,pct.money, pct.discount, pct.at_least, pct.validity_type,pct.fixed_term,pct.end_time, pct.image';
  602. } else if ($type == 3) {
  603. $field .= ',pe.stock,pe.name,pe.image,pe.balance';
  604. }
  605. $list = model('promotion_exchange')->getList($condition, $field, '', $alias, $join);
  606. foreach ($list as $k => $v) {
  607. if (isset($v[ 'stock' ])) {
  608. $list[ $k ][ 'stock' ] = numberFormat($list[ $k ][ 'stock' ]);
  609. }
  610. }
  611. return $this->success($list);
  612. }
  613. /**
  614. * 判断规格值是否禁用
  615. * @param $id
  616. * @param $site_id
  617. * @param $goods
  618. * @return mixed
  619. */
  620. public function getGoodsSpecFormat($id, $site_id, $goods_spec_format = '', $sku_id = 0)
  621. {
  622. //获取活动参与的商品sku_ids
  623. $sku_ids = model('promotion_exchange')->getColumn([ [ 'exchange_goods_id', '=', $id ], [ 'site_id', '=', $site_id ] ], 'type_id');
  624. $goods_model = new Goods();
  625. if ($sku_id == 0) {
  626. $res = $goods_model->getGoodsSpecFormat($sku_ids, $goods_spec_format);
  627. } else {
  628. $res = $goods_model->getEmptyGoodsSpecFormat($sku_ids, $sku_id);
  629. }
  630. return $res;
  631. }
  632. }