ShopSite.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  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\shop;
  12. use app\dict\site\SiteDict;
  13. use core\base\BaseModel;
  14. use think\db\Query;
  15. use think\model\relation\HasOne;
  16. /**
  17. * 多商户站点模型
  18. * Class Site
  19. * @package app\model\site
  20. */
  21. class ShopSite extends BaseModel
  22. {
  23. protected $type = [
  24. 'expire_time' => 'timestamp',
  25. ];
  26. /**
  27. * 数据表主键
  28. * @var string
  29. */
  30. protected $pk = 'site_id';
  31. /**
  32. * 模型名称
  33. * @var string
  34. */
  35. protected $name = 'site';
  36. protected $json = ['addons', 'app', 'initalled_addon'];
  37. protected $jsonAssoc = true;
  38. /**
  39. * 状态字段转化
  40. * @param $value
  41. * @param $data
  42. * @return mixed
  43. */
  44. public function getStatusNameAttr($value, $data)
  45. {
  46. if (empty($data['status']))
  47. return '';
  48. return SiteDict::getStatus()[$data['status']] ?? '';
  49. }
  50. /**
  51. * 关键字搜索
  52. * @param $query
  53. * @param $value
  54. * @param $data
  55. */
  56. public function searchKeywordAttr($query, $value, $data)
  57. {
  58. if ($value) {
  59. $query->where('site_name|keywords', 'like', '%' . $value . '%');
  60. }
  61. }
  62. /**
  63. * 站点域名搜索
  64. * @param $query
  65. * @param $value
  66. * @param $data
  67. * @return void
  68. */
  69. public function searchSiteDomainAttr($query, $value, $data)
  70. {
  71. if ($value) {
  72. $query->where('site_domain', 'like', '%' . $value . '%');
  73. }
  74. }
  75. /**
  76. * 关键字搜索
  77. * @param $query
  78. * @param $value
  79. * @param $data
  80. */
  81. public function searchAppAttr($query, $value, $data)
  82. {
  83. if ($value) {
  84. $query->where('app', 'like', '%"' . $value . '"%');
  85. }
  86. }
  87. /**
  88. * 站点状态搜索
  89. * @param $query
  90. * @param $value
  91. * @param $data
  92. */
  93. public function searchStatusAttr($query, $value, $data)
  94. {
  95. if ($value) {
  96. $query->where('status', '=', $value);
  97. }
  98. }
  99. /**
  100. * 站点分组搜索
  101. * @param $query
  102. * @param $value
  103. * @param $data
  104. */
  105. public function searchGroupIdAttr($query, $value, $data)
  106. {
  107. if ($value) {
  108. $query->where('group_id', '=', $value);
  109. }
  110. }
  111. /**
  112. * 分组名称
  113. * @return HasOne
  114. */
  115. public function groupName()
  116. {
  117. return $this->hasOne(ShopSiteGroup::class, 'group_id', 'group_id')->joinType('left')->withField('group_id, group_name')->bind(['group_name' => 'group_name']);
  118. }
  119. /**
  120. * 关联站点分组
  121. * @return HasOne
  122. */
  123. public function siteGroup() {
  124. return $this->hasOne(ShopSiteGroup::class, 'group_id', 'group_id');
  125. }
  126. /**
  127. * 店铺扩展信息
  128. * @return HasOne
  129. */
  130. public function shop(){
  131. return $this->hasOne(Shop::class, 'site_id', 'site_id');
  132. }
  133. /**
  134. * 创建时间搜索器
  135. * @param Query $query
  136. * @param $value
  137. * @param $data
  138. */
  139. public function searchCreateTimeAttr(Query $query, $value, $data)
  140. {
  141. $start_time = empty($value[0]) ? 0 : strtotime($value[0]);
  142. $end_time = empty($value[1]) ? 0 : strtotime($value[1]);
  143. if ($start_time > 0 && $end_time > 0) {
  144. $query->whereBetweenTime('create_time', $start_time, $end_time);
  145. } else if ($start_time > 0 && $end_time == 0) {
  146. $query->where([['create_time', '>=', $start_time]]);
  147. } else if ($start_time == 0 && $end_time > 0) {
  148. $query->where([['create_time', '<=', $end_time]]);
  149. }
  150. }
  151. /**
  152. * 到期时间搜索器
  153. * @param Query $query
  154. * @param $value
  155. * @param $data
  156. */
  157. public function searchExpireTimeAttr(Query $query, $value, $data)
  158. {
  159. $start_time = empty($value[0]) ? 0 : strtotime($value[0]);
  160. $end_time = empty($value[1]) ? 0 : strtotime($value[1]);
  161. if ($start_time > 0 && $end_time > 0) {
  162. $query->whereBetweenTime('expire_time', $start_time, $end_time);
  163. } else if ($start_time > 0 && $end_time == 0) {
  164. $query->where([['expire_time', '>=', $start_time]]);
  165. } else if ($start_time == 0 && $end_time > 0) {
  166. $query->where([['expire_time', '<=', $end_time]]);
  167. }
  168. }
  169. /**
  170. * 是否自营
  171. * @param $query
  172. * @param $value
  173. * @param $data
  174. */
  175. public function searchIsSelfAttr($query, $value, $data)
  176. {
  177. if ($value) {
  178. $query->where('shop.is_self', '=', $value);
  179. }
  180. }
  181. /**
  182. * 店铺分类
  183. * @param $query
  184. * @param $value
  185. * @param $data
  186. */
  187. public function searchCategoryIdAttr($query, $value, $data)
  188. {
  189. if ($value) {
  190. $query->where('shop.category_id', '=', $value);
  191. }
  192. }
  193. /**
  194. * 分类名称
  195. * @return HasOne
  196. */
  197. public function categoryName()
  198. {
  199. return $this->hasOne(ShopCategory::class, 'category_id', 'category_id')->joinType('left')->withField('category_id, category_name')->bind(['category_name' => 'category_name']);
  200. }
  201. }