MemberSignService.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | Niucloud-admin 企业快速开发的saas管理平台
  4. // +----------------------------------------------------------------------
  5. // | 官方网址:https://www.niucloud.com
  6. // +----------------------------------------------------------------------
  7. // | niucloud团队 版权所有 开源版本可自由商用
  8. // +----------------------------------------------------------------------
  9. // | Author: Niucloud Team
  10. // +----------------------------------------------------------------------
  11. namespace app\service\admin\member;
  12. use app\model\member\MemberSign;
  13. use app\service\core\member\CoreMemberService;
  14. use app\service\core\sys\CoreConfigService;
  15. use core\base\BaseAdminService;
  16. use core\dict\DictLoader;
  17. use core\exception\AdminException;
  18. /**
  19. * 会员签到服务层
  20. */
  21. class MemberSignService extends BaseAdminService
  22. {
  23. public function __construct()
  24. {
  25. parent::__construct();
  26. $this->model = new MemberSign();
  27. }
  28. /**
  29. * 会员签到记录
  30. * @param array $where
  31. * @return array
  32. */
  33. public function getPage(array $where = [])
  34. {
  35. $member_where = [];
  36. if (isset($where[ 'keywords' ]) && $where[ 'keywords' ] != '') {
  37. $member_where = [ [ 'member.member_no|member.nickname|member.mobile', 'like', '%' . $this->model->handelSpecialCharacter($where[ 'keywords' ]) . '%' ] ];
  38. }
  39. $field = 'sign_id, member_sign.site_id, member_sign.member_id, days, day_award, continue_award, continue_tag, member_sign.create_time, is_sign';
  40. $search_model = $this->model->withSearch(['create_time'],$where)->where($member_where)->where([['member_sign.site_id', '=', $this->site_id]])->withJoin(["member" => ['member_no', 'mobile', 'nickname', 'headimg']])->field($field)->append(['is_sign_name'])->order('member_sign.create_time desc');
  41. return $this->pageQuery($search_model, function ($item, $key) {
  42. $item = $this->makeUp($item);
  43. });
  44. }
  45. /**
  46. * 组合整理数据
  47. * @param $data
  48. */
  49. public function makeUp($data){
  50. //日签奖励
  51. if(!empty($data['day_award'])){
  52. $data['day_award'] = ( new CoreMemberService() )->getGiftContent($this->site_id, $data[ 'day_award' ]);
  53. }
  54. //连签奖励
  55. if(!empty($data['continue_award'])){
  56. $gift = $data['continue_award'];
  57. unset($gift['continue_sign'], $gift['continue_tag'], $gift['receive_limit'], $gift['receive_num']);
  58. $data['continue_award'] = ( new CoreMemberService() )->getGiftContent($this->site_id, $gift);
  59. }
  60. return $data;
  61. }
  62. /**
  63. * 会员签到详情
  64. * @param int $sign_id
  65. * @return array
  66. */
  67. public function getInfo(int $sign_id)
  68. {
  69. $field = 'sign_id, site_id, member_id, days, day_award, continue_award, continue_tag, create_time, is_sign';
  70. return $this->model->where([['sign_id', '=', $sign_id], ['site_id', '=', $this->site_id]])->field($field)->append(['is_sign_name'])->findOrEmpty()->toArray();
  71. }
  72. /**
  73. * 设置签到设置
  74. * @param array $value
  75. * @return bool
  76. */
  77. public function setSign(array $value)
  78. {
  79. if (empty($value[ 'sign_period' ])) throw new AdminException('SIGN_PERIOD_CANNOT_EMPTY');
  80. if ($value[ 'sign_period' ] < 2 || $value[ 'sign_period' ] > 365) throw new AdminException('SIGN_PERIOD_BETWEEN_2_365_DAYS');
  81. if (!empty($value[ 'continue_award' ])) {
  82. foreach ($value[ 'continue_award' ] as $v) {
  83. if ($v[ 'continue_sign' ] < 2 || $v[ 'continue_sign' ] > 365) throw new AdminException('CONTINUE_SIGN_BETWEEN_2_365_DAYS');
  84. if ($v[ 'continue_sign' ] > $value[ 'sign_period' ]) throw new AdminException('CONTINUE_SIGN_CANNOT_GREATER_THAN_SIGN_PERIOD');
  85. }
  86. }
  87. $data = [
  88. 'is_use' => $value[ 'is_use' ], //是否开启
  89. 'sign_period' => $value[ 'sign_period' ], // 签到周期
  90. 'day_award' => $value[ 'day_award' ], // 日签奖励
  91. 'continue_award' => $value[ 'continue_award' ], // 连签奖励
  92. 'rule_explain' => $value[ 'rule_explain' ] // 规则说明
  93. ];
  94. return ( new CoreConfigService() )->setConfig($this->request->defaultSiteId(), 'SIGN_CONFIG', $data);
  95. }
  96. /**
  97. * 获取签到设置
  98. */
  99. public function getSign()
  100. {
  101. $info = ( new CoreConfigService() )->getConfig($this->request->defaultSiteId(), 'SIGN_CONFIG');
  102. if (empty($info)) {
  103. $info = [];
  104. $info[ 'value' ] = [
  105. 'is_use' => 0,
  106. 'sign_period' => '',
  107. 'day_award' => '',
  108. 'continue_award' => [],
  109. 'rule_explain' => ''
  110. ];
  111. }
  112. if (empty($info[ 'value' ][ 'continue_award' ]) && gettype($info[ 'value' ][ 'continue_award' ]) == 'string') {
  113. $info[ 'value' ][ 'continue_award' ] = [];
  114. }
  115. return $info[ 'value' ];
  116. }
  117. }