BirthdayGift.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace addon\birthdaygift\model;
  11. use addon\coupon\model\Coupon;
  12. use addon\coupon\model\CouponType;
  13. use app\model\BaseModel;
  14. use app\model\member\MemberAccount;
  15. use app\model\system\Cron;
  16. use think\facade\Db;
  17. /**
  18. * 生日有礼
  19. */
  20. class BirthdayGift extends BaseModel
  21. {
  22. public $status = [
  23. 0 => '未开始',
  24. 1 => '进行中',
  25. 2 => '已结束',
  26. 3 => '已关闭',
  27. ];
  28. /**
  29. * 获取订单详细列表
  30. * @param array $condition
  31. * @param int $page
  32. * @param int $page_size
  33. * @param string $order
  34. * @param string $field
  35. * @param string $alias
  36. * @param array $join
  37. * @param null $group
  38. * @param null $limit
  39. * @return array
  40. */
  41. public function birthdayGiftPagelist($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*', $alias = 'a', $join = [], $group = null, $limit = null)
  42. {
  43. $list = model("promotion_birthdaygift")->pageList($condition, $field, $order, $page, $page_size, $alias, $join, $group, $limit);
  44. return $this->success($list);
  45. }
  46. /**
  47. * 添加生日有礼
  48. */
  49. public function addBirthdayGiftActivity($data)
  50. {
  51. //时间检测
  52. if ($data[ 'end_time' ] < time()) {
  53. return $this->error('', '结束时间不能早于当前时间');
  54. }
  55. $activity_info = model('promotion_birthdaygift')->getInfo([
  56. [ 'status', 'in', "0,1" ],
  57. [ 'site_id', '=', $data[ 'site_id' ] ],
  58. [ '', 'exp', Db::raw('not ( (`start_time` > ' . $data[ 'end_time' ] . ' and `start_time` > ' . $data[ 'start_time' ] . ' ) or (`end_time` < ' . $data[ 'start_time' ] . ' and `end_time` < ' . $data[ 'end_time' ] . '))') ]
  59. ], 'start_time,end_time');
  60. if (!empty($activity_info)) {
  61. return $this->error('', '此时间段已有同类型的活动');
  62. }
  63. $data[ 'create_time' ] = time();
  64. if ($data[ 'start_time' ] <= time()) {
  65. $data[ 'status' ] = 1;//直接启动
  66. } else {
  67. $data[ 'status' ] = 0;
  68. }
  69. model('promotion_birthdaygift')->startTrans();
  70. try {
  71. $res = model('promotion_birthdaygift')->add($data);
  72. $cron = new Cron();
  73. if ($data[ 'start_time' ] <= time()) {
  74. $cron->addCron(1, 0, "生日有礼活动关闭", "CloseBirthdayGift", $data[ 'end_time' ], $res);
  75. } else {
  76. $cron->addCron(1, 0, "生日有礼活动开启", "OpenBirthdayGift", $data[ 'start_time' ], $res);
  77. $cron->addCron(1, 0, "生日有礼活动关闭", "CloseBirthdayGift", $data[ 'end_time' ], $res);
  78. }
  79. model('promotion_birthdaygift')->commit();
  80. return $this->success($res);
  81. } catch (\Exception $e) {
  82. model('promotion_birthdaygift')->rollback();
  83. return $this->error('', $e->getMessage());
  84. }
  85. }
  86. /**
  87. * 编辑生日有礼活动
  88. * @param array $data 活动数据
  89. * @param $id
  90. * @return array
  91. */
  92. public function editBirthdayGiftActivity($data, $id)
  93. {
  94. //时间检测
  95. if ($data[ 'end_time' ] < time()) {
  96. return $this->error('', '结束时间不能早于当前时间');
  97. }
  98. $activity_info = model('promotion_birthdaygift')->getInfo([
  99. [ 'status', 'in', "0,1" ],
  100. [ 'site_id', '=', $data[ 'site_id' ] ],
  101. [ '', 'exp', Db::raw('not ( (`start_time` > ' . $data[ 'end_time' ] . ' and `start_time` > ' . $data[ 'start_time' ] . ' ) or (`end_time` < ' . $data[ 'start_time' ] . ' and `end_time` < ' . $data[ 'end_time' ] . '))') ],
  102. [ 'id', '<>', $id ],
  103. ], 'id,start_time,end_time');
  104. if (!empty($activity_info)) {
  105. return $this->error('', '此时间段已有同类型的活动');
  106. }
  107. $data[ 'update_time' ] = time();
  108. if ($data[ 'start_time' ] <= time()) {
  109. $data[ 'status' ] = 1;//直接启动
  110. } else {
  111. $data[ 'status' ] = 0;
  112. }
  113. model('promotion_birthdaygift')->startTrans();
  114. try {
  115. model('promotion_birthdaygift')->update($data, [ [ 'site_id', '=', $data[ 'site_id' ] ], [ 'id', '=', $id ] ]);
  116. $cron = new Cron();
  117. $cron->deleteCron([ [ 'event', '=', 'CloseBirthdayGift' ], [ 'relate_id', '=', $id ] ]);
  118. $cron->deleteCron([ [ 'event', '=', 'OpenBirthdayGift' ], [ 'relate_id', '=', $id ] ]);
  119. if ($data[ 'start_time' ] <= time()) {
  120. $cron->addCron(1, 0, "生日有礼关闭", "CloseBirthdayGift", $data[ 'end_time' ], $id);
  121. } else {
  122. $cron->addCron(1, 0, "生日有礼开启", "OpenBirthdayGift", $data[ 'start_time' ], $id);
  123. $cron->addCron(1, 0, "生日有礼关闭", "CloseBirthdayGift", $data[ 'end_time' ], $id);
  124. }
  125. model('promotion_birthdaygift')->commit();
  126. return $this->success();
  127. } catch (\Exception $e) {
  128. model('promotion_birthdaygift')->rollback();
  129. return $this->error('', $e->getMessage());
  130. }
  131. }
  132. /**
  133. * 修改生日有礼活动,用于做状态修改
  134. * @param $id
  135. * @param $site_id
  136. * @param array $data
  137. * @return array
  138. */
  139. public function updateBirthdayGift($id, $site_id, $data = [])
  140. {
  141. $res = model('promotion_birthdaygift')->update($data, [ [ 'id', '=', $id ], [ 'site_id', '=', $site_id ] ]);
  142. return $this->success($res);
  143. }
  144. /**
  145. * 获取生日有礼列表
  146. * @param $condition
  147. * @param string $field
  148. * @return array
  149. */
  150. public function getBirthdayGiftList($condition, $field = '*')
  151. {
  152. $list = model('promotion_birthdaygift')->getList($condition, $field);
  153. return $this->success($list);
  154. }
  155. /**
  156. * 获取生日有礼详情
  157. * @param $condition
  158. * @param $field
  159. * @return array
  160. */
  161. public function getBirthdayGiftDetail($condition, $field)
  162. {
  163. $res = model('promotion_birthdaygift')->getInfo($condition, $field);
  164. if (!empty($res)) {
  165. $res[ 'type' ] = explode(',', $res[ 'type' ]);
  166. //获取优惠券信息
  167. if (isset($res[ 'coupon' ]) && !empty($res[ 'coupon' ])) {
  168. //优惠券字段
  169. $coupon_field = 'coupon_type_id,type,coupon_name,image,money,discount,validity_type,fixed_term,status,is_limit,at_least,count,lead_count,end_time,goods_type,max_fetch';
  170. $model = new CouponType();
  171. $coupon = $model->getCouponTypeList([ [ 'coupon_type_id', 'in', $res[ 'coupon' ] ] ], $coupon_field);
  172. $res[ 'coupon_list' ] = $coupon[ 'data' ];
  173. $res[ 'coupon_ids' ] = explode(',', $res[ 'coupon' ]);
  174. } else {
  175. $res[ 'coupon_ids' ] = [];
  176. }
  177. }
  178. return $this->success($res);
  179. }
  180. /**
  181. * 获取生日有礼的相关奖励
  182. * @param $site_id
  183. * @return array
  184. */
  185. public function getAward($site_id)
  186. {
  187. // 获取进行中的生日有礼
  188. $award_info = model('promotion_birthdaygift')->getInfoTo([ [ 'site_id', '=', $site_id ], [ 'status', '=', '1' ], [ 'is_delete', '=', '0' ] ], 'id,activity_name,activity_time_type,level_id,blessing_content,type,point,balance,balance_type,balance_money,coupon,level_name');
  189. if (!empty($award_info)) {
  190. $award_info[ 'type' ] = explode(',', $award_info[ 'type' ]);
  191. //获取优惠券信息
  192. if (isset($award_info[ 'coupon' ]) && !empty($award_info[ 'coupon' ])) {
  193. //优惠券字段
  194. $coupon_field = 'coupon_type_id,type,coupon_name,image,money,discount,validity_type,fixed_term,status,is_limit,at_least,count,lead_count,end_time,goods_type,max_fetch';
  195. $model = new CouponType();
  196. $coupon = $model->getCouponTypeList([ [ 'coupon_type_id', 'in', $award_info[ 'coupon' ] ] ], $coupon_field);
  197. $award_info[ 'coupon_list' ] = $coupon[ 'data' ];
  198. }
  199. }
  200. return $this->success($award_info);
  201. }
  202. public function receive($member_id, $activity_id, $site_id)
  203. {
  204. $award_info = model('promotion_birthdaygift')->getInfo([ [ 'site_id', '=', $site_id ], [ 'id', '=', $activity_id ], [ 'is_delete', '=', '0' ], [ 'status', '=', 1 ] ], 'id,activity_name,activity_time_type,level_id,blessing_content,type,point,balance,balance_type,balance_money,coupon');
  205. if (empty($award_info)) return $this->error("", "未获取到活动信息");
  206. $member_info = model('member')->getInfo([ [ 'member_id', '=', $member_id ], [ 'site_id', '=', $site_id ], [ 'status', '=', 1 ] ], 'nickname,member_level,point');
  207. if (empty($member_info)) return $this->error("", "未获取到会员信息");
  208. if (!empty($award_info[ 'level_id' ])) {
  209. $level = explode(',', $award_info[ 'level_id' ]);
  210. if (!in_array($member_info[ 'member_level' ], $level)) {
  211. return $this->error("", "只有{$award_info['level_name']}等级的会员可参与该活动");
  212. }
  213. }
  214. model('promotion_birthdaygift_record')->startTrans();
  215. try {
  216. $meber_account = new MemberAccount();
  217. if (!empty($award_info[ 'type' ])) {
  218. $type_arr = explode(',', $award_info[ 'type' ]);
  219. foreach ($type_arr as $v) {
  220. switch ( $v ) {
  221. case 'point':
  222. // 积分
  223. $meber_account->addMemberAccount($site_id, $member_id, 'point', $award_info[ 'point' ], 'birthdaygift', $activity_id, "会员生日心意礼");
  224. break;
  225. case 'balance':
  226. // 余额
  227. if ($award_info[ 'balance_type' ] == 0) {
  228. $meber_account->addMemberAccount($site_id, $member_id, 'balance', $award_info[ 'balance' ], 'birthdaygift', $activity_id, "会员生日心意礼");
  229. } else {
  230. $meber_account->addMemberAccount($site_id, $member_id, 'balance_money', $award_info[ 'balance_money' ], 'birthdaygift', $activity_id, "会员生日心意礼");
  231. }
  232. break;
  233. case 'coupon':
  234. // 优惠券
  235. $coupon = new Coupon();
  236. $coupon_list = explode(',', $award_info[ 'coupon' ]);
  237. $coupon_list = array_map(function($value) {
  238. return [ 'coupon_type_id' => $value, 'num' => 1 ];
  239. }, $coupon_list);
  240. $receive_res = $coupon->giveCoupon($coupon_list, $site_id, $member_id, 6);
  241. break;
  242. case 4:
  243. // 赠品
  244. break;
  245. }
  246. }
  247. $record[ 'member_id' ] = $member_id;
  248. $record[ 'member_name' ] = $member_info[ 'nickname' ];
  249. $record[ 'activity_id' ] = $activity_id;
  250. $record[ 'receive_time' ] = time();
  251. }
  252. $res = model('promotion_birthdaygift_record')->add($record);
  253. model('promotion_birthdaygift_record')->commit();
  254. return $this->success($res);
  255. } catch (\Exception $e) {
  256. model('promotion_games')->rollback();
  257. return $this->error("", $e->getMessage());
  258. }
  259. }
  260. /**
  261. * 获取生日有礼奖励信息列表
  262. * @param $condition
  263. * @return array
  264. */
  265. public function getRecordList($condition)
  266. {
  267. $list = model('promotion_birthdaygift_record')->getList($condition);
  268. return $this->success($list);
  269. }
  270. /**获取生日有礼奖励分页列表
  271. * @param array $condition
  272. * @param int $page
  273. * @param int $page_size
  274. * @param string $order
  275. * @param string $field
  276. * @param string $alias
  277. * @param array $join
  278. * @param null $group
  279. * @param null $limit
  280. * @return array
  281. */
  282. public function getRecordPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*', $alias = 'a', $join = [], $group = null, $limit = null)
  283. {
  284. $list = model("promotion_birthdaygift_record")->pageList($condition, $field, $order, $page, $page_size, $alias, $join, $group, $limit);
  285. return $this->success($list);
  286. }
  287. /**
  288. * 验证当前年是否领取
  289. */
  290. public function verificationRecord($member_id)
  291. {
  292. $list = $this->getRecordList([ [ "member_id", "=", $member_id ] ]);
  293. $res = true;
  294. if ($list[ 'data' ]) {
  295. foreach ($list[ 'data' ] as $key => $val) {
  296. if (date("Y", $val[ 'receive_time' ]) == date("Y", time())) {
  297. $res = false;
  298. break;
  299. }
  300. }
  301. }
  302. return $this->success($res);
  303. }
  304. /**
  305. * 定时开启活动
  306. * @param $id
  307. * @return array
  308. */
  309. public function cronOpenBirthdayGift($id)
  310. {
  311. $info = model('promotion_birthdaygift')->getInfo([ [ 'id', '=', $id ] ], 'start_time,status');
  312. if (!empty($info)) {
  313. if ($info[ 'start_time' ] <= time() && $info[ 'status' ] == 0) {
  314. model('promotion_birthdaygift')->startTrans();
  315. try {
  316. model('promotion_birthdaygift')->update([ 'status' => 1 ], [ [ 'id', '=', $id ] ]);
  317. model('promotion_birthdaygift')->commit();
  318. return $this->success();
  319. } catch (\Exception $e) {
  320. model('promotion_birthdaygift')->rollback();
  321. return $this->error('', $e->getMessage());
  322. }
  323. } else {
  324. return $this->error("", "生日有礼活动已开启或者关闭");
  325. }
  326. } else {
  327. return $this->error("", "生日有礼活动不存在");
  328. }
  329. }
  330. /**
  331. * 定时关闭活动
  332. * @param $recommend_id
  333. * @return array
  334. */
  335. public function cronCloseBirthdayGift($id)
  336. {
  337. $info = model('promotion_birthdaygift')->getInfo([ [ 'id', '=', $id ] ], 'status');
  338. if (!empty($info)) {
  339. if ($info[ 'status' ] == 1) {
  340. model('promotion_birthdaygift')->startTrans();
  341. try {
  342. model('promotion_birthdaygift')->update([ 'status' => -1 ], [ [ 'id', '=', $id ] ]);
  343. model('promotion_birthdaygift')->commit();
  344. return $this->success();
  345. } catch (\Exception $e) {
  346. model('promotion_birthdaygift')->rollback();
  347. return $this->error('', $e->getMessage());
  348. }
  349. } else {
  350. return $this->error("", "生日有礼活动已关闭");
  351. }
  352. } else {
  353. return $this->error("", "生日有礼活动不存在");
  354. }
  355. }
  356. }