LotteryEnum.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  1. <?php
  2. namespace app\common\Enum;
  3. /**
  4. * 抽奖活动枚举类
  5. */
  6. class LotteryEnum
  7. {
  8. // ============ 抽奖基础状态 ============
  9. const STATUS_NOT_STARTED = 1; // 未开始
  10. const STATUS_ONGOING = 2; // 进行中
  11. const STATUS_ENDED = 3; // 已结束
  12. const STATUS_CANCELLED = 4; // 已取消
  13. const STATUS_SUSPENDED = 5; // 已暂停
  14. const STATUS_CLOSED = 6; // 已关闭
  15. const STATUS_DELETED = 7; // 已删除
  16. const STATUS_EXPIRED = 8; // 已过期
  17. // ============ 抽奖类型 ============
  18. const LOTTERY_TYPE_CONSUMPTION_LOTTERY = 1; // 消费抽奖
  19. // ============ 开奖方式 ============
  20. const LOTTERY_TYPE_INSTANT = 1; // 即抽即中
  21. const LOTTERY_TYPE_TIME = 2; // 按时间开奖
  22. const LOTTERY_TYPE_PEOPLE = 3; // 按人数开奖
  23. // ============ 用户群体类型 ============
  24. const USER_LIMIT_ALL = 1; // 全部会员
  25. const USER_LIMIT_LEVEL = 2; // 会员等级
  26. const USER_LIMIT_TAG = 3; // 会员标签
  27. // ============ 引导样式 ============
  28. const GUIDE_STYLE_DEFAULT = 1; // 默认样式
  29. const GUIDE_STYLE_CUSTOM = 2; // 自定义
  30. // ============ 奖品类型 ============
  31. const PRIZE_TYPE_NO_PRIZE = 1; // 未中奖
  32. const PRIZE_TYPE_GOODS = 2; // 实物奖品
  33. const PRIZE_TYPE_POINTS = 3; // 积分
  34. const PRIZE_TYPE_BALANCE = 4; // 余额
  35. const PRIZE_TYPE_COUPON = 5; // 优惠券
  36. const PRIZE_TYPE_REDPACK = 6; // 红包
  37. const PRIZE_TYPE_CODE = 7; // 兑换码
  38. const PRIZE_TYPE_SHOP_GOODS = 8; // 商城奖品
  39. // ============ 奖品发放方式 ============
  40. const DELIVER_TYPE_AUTO = 1; // 自动发放
  41. const DELIVER_TYPE_MANUAL = 2; // 手动发放
  42. // ============ 奖品发放状态 ============
  43. const DELIVER_STATUS_PENDING = 0; // 待发放
  44. const DELIVER_STATUS_SUCCESS = 1; // 已发放
  45. const DELIVER_STATUS_FAILED = 2; // 发放失败
  46. const DELIVER_STATUS_CANCELLED = 3; // 已取消
  47. // ============ 抽奖状态 ============
  48. const DRAW_STATUS_PARTICIPATED = 1; // 已参与(等待开奖)
  49. const DRAW_STATUS_WIN = 2; // 已中奖
  50. const DRAW_STATUS_NO_WIN = 3; // 未中奖
  51. // ============ 参与条件类型 ============
  52. const CONDITION_TYPE_BUY_GOODS = 1; // 购买指定商品
  53. const CONDITION_TYPE_ORDER_AMOUNT = 2; // 单笔订单消费满额
  54. const CONDITION_TYPE_RECHARGE_AMOUNT = 3; // 单次充值满额
  55. const CONDITION_TYPE_TOTAL_AMOUNT = 4; // 活动期间累计消费满额
  56. // ============ 商品规则 ============
  57. const GOODS_RULE_INCLUDE = 1; // 指定商品参与
  58. const GOODS_RULE_EXCLUDE = 2; // 指定商品不可参与
  59. // ============ 触发类型 ============
  60. const TRIGGER_TYPE_BUY_GOODS = 1; // 购买商品
  61. const TRIGGER_TYPE_ORDER_CONSUME = 2; // 订单消费
  62. const TRIGGER_TYPE_RECHARGE = 3; // 充值
  63. const TRIGGER_TYPE_TOTAL_CONSUME = 4; // 累计消费
  64. // ============ 机会获取类型(与条件类型保持一致,额外增加管理员赠送) ============
  65. const CHANCE_GET_TYPE_BUY_GOODS = 1; // 购买指定商品(对应CONDITION_TYPE_BUY_GOODS)
  66. const CHANCE_GET_TYPE_ORDER_AMOUNT = 2; // 单笔订单消费满额(对应CONDITION_TYPE_ORDER_AMOUNT)
  67. const CHANCE_GET_TYPE_RECHARGE = 3; // 单次充值满额(对应CONDITION_TYPE_RECHARGE_AMOUNT)
  68. const CHANCE_GET_TYPE_TOTAL_AMOUNT = 4; // 活动期间累计消费满额(对应CONDITION_TYPE_TOTAL_AMOUNT)
  69. const CHANCE_GET_TYPE_ADMIN_GRANT = 5; // 管理员赠送
  70. // ============ 兑奖期限类型 ============
  71. const REDEEM_EXPIRE_FOREVER = 1; // 永久有效
  72. const REDEEM_EXPIRE_FIXED = 2; // 固定时长
  73. /**
  74. * 获取活动状态映射(页面显示用)
  75. */
  76. public static function getActivityStatusMap()
  77. {
  78. return [
  79. self::STATUS_NOT_STARTED => '未开始',
  80. self::STATUS_ONGOING => '进行中',
  81. self::STATUS_ENDED => '已结束',
  82. self::STATUS_CANCELLED => '已取消',
  83. self::STATUS_SUSPENDED => '已暂停',
  84. ];
  85. }
  86. /**
  87. * 获取全部活动状态映射(包含逻辑状态)
  88. */
  89. public static function getAllActivityStatusMap()
  90. {
  91. return [
  92. self::STATUS_NOT_STARTED => '未开始',
  93. self::STATUS_ONGOING => '进行中',
  94. self::STATUS_ENDED => '已结束',
  95. self::STATUS_CANCELLED => '已取消',
  96. self::STATUS_SUSPENDED => '已暂停',
  97. self::STATUS_CLOSED => '已关闭',
  98. self::STATUS_DELETED => '已删除',
  99. self::STATUS_EXPIRED => '已过期',
  100. ];
  101. }
  102. /**
  103. * 获取活动类型映射
  104. */
  105. public static function getActivityTypeMap()
  106. {
  107. return [
  108. self::LOTTERY_TYPE_CONSUMPTION_LOTTERY => '消费抽奖',
  109. ];
  110. }
  111. /**
  112. * 获取开奖方式映射
  113. */
  114. public static function getLotteryTypeMap()
  115. {
  116. return [
  117. self::LOTTERY_TYPE_INSTANT => '即抽即中',
  118. self::LOTTERY_TYPE_TIME => '按时间开奖',
  119. self::LOTTERY_TYPE_PEOPLE => '按人数开奖',
  120. ];
  121. }
  122. /**
  123. * 获取用户群体类型映射
  124. */
  125. public static function getUserLimitTypeMap()
  126. {
  127. return [
  128. self::USER_LIMIT_ALL => '全部会员',
  129. self::USER_LIMIT_LEVEL => '会员等级',
  130. self::USER_LIMIT_TAG => '会员标签',
  131. ];
  132. }
  133. /**
  134. * 获取引导样式映射
  135. */
  136. public static function getGuideStyleMap()
  137. {
  138. return [
  139. self::GUIDE_STYLE_DEFAULT => '默认样式',
  140. self::GUIDE_STYLE_CUSTOM => '自定义',
  141. ];
  142. }
  143. /**
  144. * 获取奖品类型映射
  145. */
  146. public static function getPrizeTypeMap()
  147. {
  148. return [
  149. self::PRIZE_TYPE_NO_PRIZE => '未中奖',
  150. self::PRIZE_TYPE_GOODS => '实物奖品',
  151. self::PRIZE_TYPE_POINTS => '积分',
  152. self::PRIZE_TYPE_BALANCE => '余额',
  153. self::PRIZE_TYPE_COUPON => '优惠券',
  154. self::PRIZE_TYPE_REDPACK => '红包',
  155. self::PRIZE_TYPE_CODE => '兑换码',
  156. self::PRIZE_TYPE_SHOP_GOODS => '商城奖品',
  157. ];
  158. }
  159. /**
  160. * 获取奖品默认图片映射
  161. */
  162. public static function getPrizeDefaultImageMap()
  163. {
  164. // 从配置文件获取图片路径
  165. $config = config('site');
  166. return [
  167. self::PRIZE_TYPE_NO_PRIZE => $config['prize_losing_lottery'] ?? '/assets/img/avatar.png',
  168. self::PRIZE_TYPE_GOODS => $config['prize_goods'] ?? '/assets/img/package.png',
  169. self::PRIZE_TYPE_POINTS => $config['prize_credit'] ?? '/assets/img/circle.png',
  170. self::PRIZE_TYPE_BALANCE => $config['prize_balance'] ?? '/assets/img/circle.png',
  171. self::PRIZE_TYPE_COUPON => $config['prize_coupon'] ?? '/assets/img/circle.png',
  172. self::PRIZE_TYPE_REDPACK => $config['prize_redbag'] ?? '/assets/img/circle.png',
  173. self::PRIZE_TYPE_CODE => $config['prize_code'] ?? '/assets/img/circle.png',
  174. self::PRIZE_TYPE_SHOP_GOODS => $config['prize_shop_goods'] ?? '/assets/img/package.png',
  175. ];
  176. }
  177. /**
  178. * 获取奖品发放方式映射
  179. */
  180. public static function getDeliverTypeMap()
  181. {
  182. return [
  183. self::DELIVER_TYPE_AUTO => '自动发放',
  184. self::DELIVER_TYPE_MANUAL => '手动发放',
  185. ];
  186. }
  187. /**
  188. * 获取奖品发放状态映射
  189. */
  190. public static function getDeliverStatusMap()
  191. {
  192. return [
  193. self::DELIVER_STATUS_PENDING => '待发放',
  194. self::DELIVER_STATUS_SUCCESS => '已发放',
  195. self::DELIVER_STATUS_FAILED => '发放失败',
  196. self::DELIVER_STATUS_CANCELLED => '已取消',
  197. ];
  198. }
  199. /**
  200. * 获取抽奖状态映射
  201. */
  202. public static function getDrawStatusMap()
  203. {
  204. return [
  205. self::DRAW_STATUS_PARTICIPATED => '已参与',
  206. self::DRAW_STATUS_WIN => '已中奖',
  207. self::DRAW_STATUS_NO_WIN => '未中奖',
  208. ];
  209. }
  210. public static function getDrawStatusList()
  211. {
  212. return [
  213. self::DRAW_STATUS_PARTICIPATED,
  214. self::DRAW_STATUS_WIN,
  215. self::DRAW_STATUS_NO_WIN,
  216. ];
  217. }
  218. /**
  219. * 获取参与条件类型映射
  220. */
  221. public static function getConditionTypeMap()
  222. {
  223. return [
  224. self::CONDITION_TYPE_BUY_GOODS => '购买指定商品',
  225. self::CONDITION_TYPE_ORDER_AMOUNT => '单笔订单消费满N元',
  226. self::CONDITION_TYPE_RECHARGE_AMOUNT => '单次充值金额满N元',
  227. self::CONDITION_TYPE_TOTAL_AMOUNT => '活动期间累计消费N元',
  228. ];
  229. }
  230. /**
  231. * 获取商品规则映射
  232. */
  233. public static function getGoodsRuleMap()
  234. {
  235. return [
  236. self::GOODS_RULE_INCLUDE => '指定商品参与',
  237. self::GOODS_RULE_EXCLUDE => '指定商品不可参与',
  238. ];
  239. }
  240. /**
  241. * 获取触发类型映射 后台
  242. */
  243. public static function getTriggerTypeMap()
  244. {
  245. return [
  246. self::TRIGGER_TYPE_BUY_GOODS => '购买商品',
  247. self::TRIGGER_TYPE_ORDER_CONSUME => '订单消费',
  248. self::TRIGGER_TYPE_RECHARGE => '充值',
  249. self::TRIGGER_TYPE_TOTAL_CONSUME => '累计消费',
  250. ];
  251. }
  252. /**
  253. * 获取机会获取类型映射h
  254. */
  255. public static function getChanceGetTypeMap()
  256. {
  257. return [
  258. self::CHANCE_GET_TYPE_BUY_GOODS => '购买指定商品',
  259. self::CHANCE_GET_TYPE_ORDER_AMOUNT => '单笔订单消费满额',
  260. self::CHANCE_GET_TYPE_RECHARGE => '单次充值满额',
  261. self::CHANCE_GET_TYPE_TOTAL_AMOUNT => '活动期间累计消费满额',
  262. self::CHANCE_GET_TYPE_ADMIN_GRANT => '管理员赠送',
  263. ];
  264. }
  265. /**
  266. * 获取兑奖期限类型映射
  267. */
  268. public static function getRedeemExpireTypeMap()
  269. {
  270. return [
  271. self::REDEEM_EXPIRE_FOREVER => '永久有效',
  272. self::REDEEM_EXPIRE_FIXED => '固定时长',
  273. ];
  274. }
  275. /**
  276. * 获取活动状态文本
  277. */
  278. public static function getActivityStatusText($status)
  279. {
  280. $map = self::getAllActivityStatusMap();
  281. return $map[$status] ?? '未知';
  282. }
  283. /**
  284. * 获取奖品类型文本
  285. */
  286. public static function getPrizeTypeText($type)
  287. {
  288. $map = self::getPrizeTypeMap();
  289. return $map[$type] ?? '未知';
  290. }
  291. /**
  292. * 获取开奖方式文本
  293. */
  294. public static function getLotteryTypeText($type)
  295. {
  296. $map = self::getLotteryTypeMap();
  297. return $map[$type] ?? '未知';
  298. }
  299. /**
  300. * 获取条件类型文本
  301. */
  302. public static function getConditionTypeText($type)
  303. {
  304. $map = self::getConditionTypeMap();
  305. return $map[$type] ?? '未知';
  306. }
  307. /**
  308. * 获取机会获取类型文本
  309. */
  310. public static function getChanceGetTypeText($type)
  311. {
  312. $map = self::getChanceGetTypeMap();
  313. return $map[$type] ?? '未知';
  314. }
  315. /**
  316. * 获取抽奖状态文本
  317. */
  318. public static function getDrawStatusText($status)
  319. {
  320. $map = self::getDrawStatusMap();
  321. return $map[$status] ?? '未知';
  322. }
  323. /**
  324. * 验证活动状态是否有效(包含所有状态)
  325. */
  326. public static function isValidActivityStatus($status)
  327. {
  328. return array_key_exists($status, self::getAllActivityStatusMap());
  329. }
  330. /**
  331. * 判断是否为可在页面显示的状态
  332. */
  333. public static function isDisplayableStatus($status)
  334. {
  335. return array_key_exists($status, self::getActivityStatusMap());
  336. }
  337. /**
  338. * 判断是否为逻辑状态(不在页面显示)
  339. */
  340. public static function isLogicalStatus($status)
  341. {
  342. return in_array($status, [
  343. self::STATUS_CLOSED,
  344. self::STATUS_DELETED,
  345. self::STATUS_EXPIRED
  346. ]);
  347. }
  348. /**
  349. * 验证奖品类型是否有效
  350. */
  351. public static function isValidPrizeType($type)
  352. {
  353. return array_key_exists($type, self::getPrizeTypeMap());
  354. }
  355. /**
  356. * 验证开奖方式是否有效
  357. */
  358. public static function isValidLotteryType($type)
  359. {
  360. return array_key_exists($type, self::getLotteryTypeMap());
  361. }
  362. /**
  363. * 验证条件类型是否有效
  364. */
  365. public static function isValidConditionType($type)
  366. {
  367. return array_key_exists($type, self::getConditionTypeMap());
  368. }
  369. /**
  370. * 验证机会获取类型是否有效
  371. */
  372. public static function isValidChanceGetType($type)
  373. {
  374. return array_key_exists($type, self::getChanceGetTypeMap());
  375. }
  376. /**
  377. * 验证抽奖状态是否有效
  378. */
  379. public static function isValidDrawStatus($status)
  380. {
  381. return array_key_exists($status, self::getDrawStatusMap());
  382. }
  383. }