Member.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  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\model\member;
  12. use app\dict\common\ChannelDict;
  13. use app\dict\common\CommonDict;
  14. use app\dict\member\MemberDict;
  15. use app\dict\member\MemberLoginTypeDict;
  16. use app\dict\member\MemberRegisterChannelDict;
  17. use app\dict\member\MemberRegisterTypeDict;
  18. use core\base\BaseModel;
  19. use think\db\Query;
  20. use think\model\concern\SoftDelete;
  21. /**
  22. * 会员模型
  23. * Class Member
  24. * @package app\model\member
  25. */
  26. class Member extends BaseModel
  27. {
  28. use SoftDelete;
  29. protected $type = [
  30. 'last_visit_time' => 'timestamp',
  31. 'login_time' => 'timestamp',
  32. 'last_consum_time' => 'timestamp',
  33. ];
  34. /**
  35. * 数据表主键
  36. * @var string
  37. */
  38. protected $pk = 'member_id';
  39. /**
  40. * 模型名称
  41. * @var string
  42. */
  43. protected $name = 'member';
  44. /**
  45. * 定义软删除标记字段
  46. * @var string
  47. */
  48. protected $deleteTime = 'delete_time';
  49. /**
  50. * 定义软删除字段的默认值
  51. * @var int
  52. */
  53. protected $defaultSoftDelete = 0;
  54. // 设置json类型字段
  55. protected $json = ['member_label'];
  56. // 设置JSON数据返回数组
  57. protected $jsonAssoc = true;
  58. /**
  59. * 状态字段转化
  60. * @param $value
  61. * @param $data
  62. * @return mixed
  63. */
  64. public function getStatusNameAttr($value, $data)
  65. {
  66. if (empty($data['status']))
  67. return '';
  68. return MemberDict::getStatus()[$data['status']] ?? '';
  69. }
  70. /**
  71. * 注册来源字段转化
  72. * @param $value
  73. * @param $data
  74. * @return mixed
  75. */
  76. public function getRegisterChannelNameAttr($value, $data)
  77. {
  78. if (empty($data['register_channel']))
  79. return '';
  80. return MemberRegisterChannelDict::getType()[$data['register_channel']] ?? '';
  81. }
  82. /**
  83. * 注册方式字段转化
  84. * @param $value
  85. * @param $data
  86. * @return mixed
  87. */
  88. public function getRegisterTypeNameAttr($value, $data)
  89. {
  90. if (empty($data['register_type']))
  91. return '';
  92. return MemberRegisterTypeDict::getType()[$data['register_type']] ?? '';
  93. }
  94. /**
  95. * 登录渠道字段转化
  96. * @param $value
  97. * @param $data
  98. * @return mixed
  99. */
  100. public function getLoginChannelNameAttr($value, $data)
  101. {
  102. if (empty($data['login_channel']))
  103. return '';
  104. return ChannelDict::getType()[$data['login_channel']] ?? '';
  105. }
  106. /**
  107. * 登录方式字段转化
  108. * @param $value
  109. * @param $data
  110. * @return mixed
  111. */
  112. public function getLoginTypeNameAttr($value, $data)
  113. {
  114. if (empty($data['login_type']))
  115. return '';
  116. return MemberLoginTypeDict::getType()[$data['login_type']] ?? '';
  117. }
  118. /**
  119. * 性别名称
  120. * @param $value
  121. * @param $data
  122. * @return mixed|string
  123. */
  124. public function getSexNameAttr($value, $data)
  125. {
  126. if (empty($data['sex']))
  127. return '';
  128. return CommonDict::getSexType()[$data['sex']] ?? '';
  129. }
  130. /**
  131. * 是否删除搜索器
  132. * @param $query
  133. */
  134. public function searchIsDelAttr($query)
  135. {
  136. $query->where('is_del', 0);
  137. }
  138. /**
  139. * 关键字搜索
  140. * @param $query
  141. * @param $value
  142. * @param $data
  143. */
  144. public function searchKeywordAttr($query, $value, $data)
  145. {
  146. if ($value) {
  147. $query->where('member_no|username|nickname|mobile', 'like', '%' . $value . '%');
  148. }
  149. }
  150. /**
  151. * 注册方式搜索
  152. * @param $query
  153. * @param $value
  154. * @param $data
  155. */
  156. public function searchRegisterTypeAttr($query, $value, $data)
  157. {
  158. if ($value) {
  159. $query->where('register_type', '=', $value);
  160. }
  161. }
  162. /**
  163. * 注册渠道搜索
  164. * @param $query
  165. * @param $value
  166. * @param $data
  167. */
  168. public function searchRegisterChannelAttr($query, $value, $data)
  169. {
  170. if ($value) {
  171. $query->where('register_channel', '=', $value);
  172. }
  173. }
  174. /**
  175. * 标签筛选
  176. * @param Query $query
  177. * @param $value
  178. * @param $data
  179. * @return void
  180. */
  181. public function searchMemberLabelAttr(Query $query, $value, $data)
  182. {
  183. if ($value) {
  184. $query->whereLike('member_label', '%' . $value . '%');
  185. }
  186. }
  187. /**
  188. * 创建时间搜索器
  189. * @param Query $query
  190. * @param $value
  191. * @param $data
  192. */
  193. public function searchCreateTimeAttr(Query $query, $value, $data)
  194. {
  195. $start_time = empty($value[0]) ? 0 : strtotime($value[0]);
  196. $end_time = empty($value[1]) ? 0 : strtotime($value[1]);
  197. if ($start_time > 0 && $end_time > 0) {
  198. $query->whereBetweenTime('create_time', $start_time, $end_time);
  199. } else if ($start_time > 0 && $end_time == 0) {
  200. $query->where([['create_time', '>=', $start_time]]);
  201. } else if ($start_time == 0 && $end_time > 0) {
  202. $query->where([['create_time', '<=', $end_time]]);
  203. }
  204. }
  205. /**
  206. * 创建时间搜索器
  207. * @param Query $query
  208. * @param $value
  209. * @param $data
  210. */
  211. public function searchJoinCreateTimeAttr(Query $query, $value, $data)
  212. {
  213. $start_time = empty($value[0]) ? 0 : strtotime($value[0]);
  214. $end_time = empty($value[1]) ? 0 : strtotime($value[1]);
  215. if ($start_time > 0 && $end_time > 0) {
  216. $query->whereBetweenTime('member.create_time', $start_time, $end_time);
  217. } else if ($start_time > 0 && $end_time == 0) {
  218. $query->where([['member.create_time', '>=', $start_time]]);
  219. } else if ($start_time == 0 && $end_time > 0) {
  220. $query->where([['member.create_time', '<=', $end_time]]);
  221. }
  222. }
  223. public function memberLevelData() {
  224. return $this->hasOne(MemberLevel::class, 'level_id', 'member_level');
  225. }
  226. public function memberLevelNameBind() {
  227. return $this->hasOne(MemberLevel::class, 'level_id', 'member_level')->bind(['member_level_name' => 'level_name']);
  228. }
  229. }