ShopSite.php 5.8 KB

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