MemberLevelClass.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?php
  2. namespace bizHd\member\classes;
  3. use common\components\dict;
  4. use Yii;
  5. use bizHd\base\classes\BaseClass;
  6. class MemberLevelClass extends BaseClass
  7. {
  8. public static $baseFile = '\bizHd\member\models\MemberLevel';
  9. public static function initData($shop)
  10. {
  11. $mainId = $shop['mainId'];
  12. $shopId = $shop['id'];
  13. $has = self::getByCondition(['mainId' => $mainId], true);
  14. if (!empty($has)) {
  15. return true;
  16. }
  17. $map = dict::getDict('memberLevelMap');
  18. foreach ($map as $k => $v) {
  19. $v['mainId'] = $mainId;
  20. $v['shopId'] = $shopId;
  21. if (!isset($v['discount'])) {
  22. $v['discount'] = 10;
  23. }
  24. if (!isset($v['birthdayBenefit'])) {
  25. $v['birthdayBenefit'] = '';
  26. }
  27. if (!isset($v['benefitDesc'])) {
  28. $v['benefitDesc'] = '';
  29. }
  30. self::add($v);
  31. }
  32. return true;
  33. }
  34. /**
  35. * 获取门店会员等级展示列表(与 hd 后台「会员等级设置」同源)
  36. * mall 权益页、hd 初始化接口共用,避免两套等级数据不一致
  37. * @param object|array $shop 门店(含 id、mainId、memberLevelSet)
  38. * @return array 按 level 升序的等级行
  39. */
  40. public static function getShopMemberList($shop)
  41. {
  42. $shopId = intval(is_array($shop) ? ($shop['id'] ?? 0) : ($shop->id ?? 0));
  43. $mainId = intval(is_array($shop) ? ($shop['mainId'] ?? 0) : ($shop->mainId ?? 0));
  44. $memberLevelSet = intval(is_array($shop) ? ($shop['memberLevelSet'] ?? 0) : ($shop->memberLevelSet ?? 0));
  45. // memberLevelSet=1:已按门店自定义;否则用默认字典(与 MemberLevelController::actionGetInitData 一致)
  46. if ($memberLevelSet == 1) {
  47. $list = self::getAllByCondition(['shopId' => $shopId], 'level ASC', '*', null);
  48. $member = [];
  49. if (!empty($list)) {
  50. foreach ($list as $val) {
  51. $member[] = self::formatMemberRow($val);
  52. }
  53. }
  54. return $member;
  55. }
  56. $member = dict::getDict('memberLevelMap');
  57. foreach ($member as $k => $row) {
  58. $member[$k] = self::formatMemberRow($row);
  59. }
  60. return array_values($member);
  61. }
  62. /**
  63. * 统一等级行字段,便于前台展示折扣/成长值/权益文案
  64. * @param array|object $val 等级原始数据
  65. * @return array
  66. */
  67. public static function formatMemberRow($val)
  68. {
  69. $name = is_array($val) ? ($val['name'] ?? '会员') : ($val->name ?? '会员');
  70. $levelSn = is_array($val) ? ($val['levelSn'] ?? 'general') : ($val->levelSn ?? 'general');
  71. $level = intval(is_array($val) ? ($val['level'] ?? 1) : ($val->level ?? 1));
  72. $amount = floatval(is_array($val) ? ($val['amount'] ?? 0) : ($val->amount ?? 0));
  73. $discount = floatval(is_array($val) ? ($val['discount'] ?? 10) : ($val->discount ?? 10));
  74. $birthdayBenefit = trim(is_array($val) ? ($val['birthdayBenefit'] ?? '') : ($val->birthdayBenefit ?? ''));
  75. $benefitDesc = trim(is_array($val) ? ($val['benefitDesc'] ?? '') : ($val->benefitDesc ?? ''));
  76. return [
  77. 'name' => $name,
  78. 'levelSn' => $levelSn,
  79. 'level' => $level,
  80. 'member' => $level,
  81. 'amount' => $amount,
  82. // 兼容旧 mall 字段 growth(成长值门槛)
  83. 'growth' => $amount,
  84. 'discount' => $discount,
  85. 'birthdayBenefit' => $birthdayBenefit,
  86. 'benefitDesc' => $benefitDesc,
  87. ];
  88. }
  89. }