LuckyDrawLogic.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | likeshop100%开源免费商用商城系统
  4. // +----------------------------------------------------------------------
  5. // | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
  6. // | 开源版本可自由商用,可去除界面版权logo
  7. // | 商业版本务必购买商业授权,以免引起法律纠纷
  8. // | 禁止对系统程序代码以任何目的,任何形式的再发布
  9. // | gitee下载:https://gitee.com/likeshop_gitee
  10. // | github下载:https://github.com/likeshop-github
  11. // | 访问官网:https://www.likeshop.cn
  12. // | 访问社区:https://home.likeshop.cn
  13. // | 访问手册:http://doc.likeshop.cn
  14. // | 微信公众号:likeshop技术社区
  15. // | likeshop团队 版权所有 拥有最终解释权
  16. // +----------------------------------------------------------------------
  17. // | author: likeshopTeam
  18. // +----------------------------------------------------------------------
  19. namespace app\adminapi\logic\lucky_draw;
  20. use app\common\enum\LuckyDrawEnum;
  21. use app\common\logic\BaseLogic;
  22. use app\common\model\LuckyDraw;
  23. use app\common\model\LuckyDrawPrize;
  24. use think\facade\Db;
  25. /**
  26. * 幸运抽奖
  27. */
  28. class LuckyDrawLogic extends BaseLogic
  29. {
  30. /**
  31. * @notes 获取奖品类型
  32. * @author Tab
  33. * @date 2021/11/24 9:50
  34. */
  35. public static function getPrizeType()
  36. {
  37. $data = [];
  38. $prizeTypes = LuckyDrawEnum::getPrizeTypeDesc();
  39. foreach ($prizeTypes as $key => $value) {
  40. $temp['value'] = $key;
  41. $temp['label'] = $value;
  42. $data[] = $temp;
  43. }
  44. return $data;
  45. }
  46. /**
  47. * @notes 添加幸运抽奖活动
  48. * @param $params
  49. * @author Tab
  50. * @date 2021/11/24 11:06
  51. */
  52. public static function add($params)
  53. {
  54. Db::startTrans();
  55. try {
  56. // 添加活动
  57. $activity = self::addActivity($params);
  58. // 添加奖品
  59. self::addPrizes($params, $activity->id);
  60. Db::commit();
  61. return true;
  62. } catch (\Exception $e) {
  63. Db::rollback();
  64. self::$error = $e->getMessage();
  65. return false;
  66. }
  67. }
  68. /**
  69. * @notes 添加活动
  70. * @param $params
  71. * @author Tab
  72. * @date 2021/11/24 11:37
  73. */
  74. private static function addActivity($params)
  75. {
  76. unset($params['prizes']);
  77. $params['start_time'] = strtotime($params['start_time']);
  78. $params['end_time'] = strtotime($params['end_time']);
  79. $params['sn'] = generate_sn((new LuckyDraw()), 'sn');
  80. $params['remark'] = $params['remark'] ?? '';
  81. $params['status'] = LuckyDrawEnum::WAIT;
  82. return LuckyDraw::create($params);
  83. }
  84. /**
  85. * @notes 添加奖品
  86. * @param $params
  87. * @param $activityId
  88. * @author Tab
  89. * @date 2021/11/24 11:50
  90. */
  91. private static function addPrizes($params, $activityId)
  92. {
  93. $data = [];
  94. foreach ($params['prizes'] as $key => $item) {
  95. $item['activity_id'] = $activityId;
  96. $item['location'] = $key + 1;
  97. $item['probability'] = (int)(round($item['probability'], 2) * 100);
  98. $data[] = $item;
  99. }
  100. $prizeModel = new LuckyDrawPrize();
  101. $prizeModel->saveAll($data);
  102. }
  103. /**
  104. * @notes 查看幸运抽奖活动详情
  105. * @param $params
  106. * @author Tab
  107. * @date 2021/11/24 14:06
  108. */
  109. public static function detail($params)
  110. {
  111. $activity = LuckyDraw::withoutField('create_time,update_time,delete_time')
  112. ->append(['status_desc', 'start_time_desc', 'end_time_desc'])
  113. ->findOrEmpty($params['id'])->toArray();
  114. $activity['prizes'] = LuckyDrawPrize::withoutField('create_time,update_time,delete_time')
  115. ->append(['type_desc', 'probability_desc'])
  116. ->where('activity_id', $activity['id'])->select()->toArray();
  117. return $activity;
  118. }
  119. /**
  120. * @notes 编辑幸运抽奖活动
  121. * @param $params
  122. * @author Tab
  123. * @date 2021/11/24 14:23
  124. */
  125. public static function edit($params)
  126. {
  127. Db::startTrans();
  128. try {
  129. $params['start_time'] = strtotime($params['start_time']);
  130. $params['end_time'] = strtotime($params['end_time']);
  131. $activity = LuckyDraw::findOrEmpty($params['id']);
  132. switch ($activity->status) {
  133. case LuckyDrawEnum::WAIT:
  134. self::waitEdit($params);
  135. break;
  136. case LuckyDrawEnum::ING:
  137. self::ingEdit($activity, $params);
  138. break;
  139. case LuckyDrawEnum::END:
  140. throw new \Exception('已结束的活动不允许编辑');
  141. }
  142. Db::commit();
  143. return true;
  144. } catch(\Exception $e) {
  145. Db::rollback();
  146. self::$error = $e->getMessage();
  147. return false;
  148. }
  149. }
  150. /**
  151. * @notes 编辑未开始的幸运抽奖
  152. * @author Tab
  153. * @date 2021/11/24 14:28
  154. */
  155. private static function waitEdit($params)
  156. {
  157. $prizes = $params['prizes'];
  158. unset($params['prizes']);
  159. // 更新活动表
  160. LuckyDraw::update($params);
  161. foreach ($prizes as &$item) {
  162. $item['probability'] = (int)(round($item['probability_desc'], 2) * 100);
  163. }
  164. // 更新奖品表
  165. $prizeModel = new LuckyDrawPrize();
  166. $prizeModel->saveAll($prizes);
  167. }
  168. /**
  169. * @notes 编辑进行中的幸运抽奖
  170. * @author Tab
  171. * @date 2021/11/24 14:28
  172. */
  173. private static function ingEdit($activity, $params)
  174. {
  175. // 进行中的只允许更新活动名称及时间
  176. $activity->name = $params['name'];
  177. $activity->start_time = $params['start_time'];
  178. $activity->end_time = $params['end_time'];
  179. $activity->save();
  180. }
  181. /**
  182. * @notes 开始幸运抽奖活动
  183. * @param $params
  184. * @author Tab
  185. * @date 2021/11/24 14:59
  186. */
  187. public static function start($params)
  188. {
  189. try {
  190. $activity = LuckyDraw::findOrEmpty($params['id']);
  191. if ($activity->status != LuckyDrawEnum::WAIT) {
  192. throw new \Exception('只有未开始的活动才能进行开始操作');
  193. }
  194. $activity->status = LuckyDrawEnum::ING;
  195. $activity->save();
  196. return true;
  197. } catch (\Exception $e) {
  198. self::$error = $e->getMessage();
  199. return false;
  200. }
  201. }
  202. /**
  203. * @notes 结束活动
  204. * @param $params
  205. * @return bool
  206. * @author Tab
  207. * @date 2021/11/24 15:05
  208. */
  209. public static function end($params)
  210. {
  211. try {
  212. $activity = LuckyDraw::findOrEmpty($params['id']);
  213. if ($activity->status != LuckyDrawEnum::ING) {
  214. throw new \Exception('只有进行中的活动才能结束');
  215. }
  216. $activity->status = LuckyDrawEnum::END;
  217. $activity->remark = $activity->remark . ' 后台结束活动';
  218. $activity->save();
  219. return true;
  220. } catch (\Exception $e) {
  221. self::$error = $e->getMessage();
  222. return false;
  223. }
  224. }
  225. /**
  226. * @notes 删除幸运抽奖活动
  227. * @param $params
  228. * @return bool
  229. * @author Tab
  230. * @date 2021/11/24 15:15
  231. */
  232. public static function delete($params)
  233. {
  234. try {
  235. LuckyDraw::destroy($params['id']);
  236. return true;
  237. } catch (\Exception $e) {
  238. self::$error = $e->getMessage();
  239. return false;
  240. }
  241. }
  242. }