GoodsAttribute.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 山西牛酷信息科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com.cn
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用。
  9. * 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
  10. * =========================================================
  11. */
  12. namespace app\model\goods;
  13. use think\facade\Cache;
  14. use app\model\BaseModel;
  15. /**
  16. * 商品类型、属性
  17. */
  18. class GoodsAttribute extends BaseModel
  19. {
  20. /************************************************************商品类型*********************************************/
  21. /**
  22. * 添加商品类型
  23. * @param $data
  24. * @return \multitype
  25. */
  26. public function addAttrClass($data)
  27. {
  28. $class_id = model("goods_attr_class")->add($data);
  29. Cache::tag("goods_attr_class")->clear();
  30. return $this->success($class_id);
  31. }
  32. /**
  33. * 编辑商品类型
  34. * @param $data
  35. * @return \multitype
  36. */
  37. public function editAttrClass($data)
  38. {
  39. $res = model("goods_attr_class")->update($data, [ [ 'class_id', '=', $data['class_id'] ] ]);
  40. if (!empty($data['class_name'])) {
  41. //修改属性表
  42. model("goods_attribute")->update([ 'attr_class_name' => $data['class_name'] ], [ [ 'attr_class_id', '=', $data['class_id'] ] ]);
  43. }
  44. //预留修改商品
  45. Cache::tag("goods_attr_class")->clear();
  46. return $this->success($res);
  47. }
  48. /**
  49. * 删除商品类型
  50. * @param $class_id
  51. * @return \multitype
  52. */
  53. public function deleteAttrClass($class_id)
  54. {
  55. $res = model('goods_attr_class')->delete([ [ 'class_id', '=', $class_id ] ]);
  56. if ($res) {
  57. // 删除商品类型品牌关联
  58. model('goods_attr_class_brand')->delete([ [ 'attr_class_id', '=', $class_id ] ]);
  59. Cache::tag("goods_attr_class_brand_" . $class_id)->clear();
  60. // 删除商品属性
  61. model('goods_attribute')->delete([ [ 'attr_class_id', '=', $class_id ] ]);
  62. Cache::tag("goods_attribute_" . $class_id)->clear();
  63. // 删除商品属性值
  64. model('goods_attribute_value')->delete([ [ 'attr_class_id', '=', $class_id ] ]);
  65. Cache::tag("goods_attribute_value_" . $class_id)->clear();
  66. }
  67. Cache::tag("goods_attr_class")->clear();
  68. return $this->success($res);
  69. }
  70. /**
  71. * 修改排序
  72. * @param int $sort
  73. * @param int $class_id
  74. */
  75. public function modifyAttrClassSort($sort, $class_id)
  76. {
  77. $res = model('goods_attr_class')->update([ 'sort' => $sort ], [ [ 'class_id', '=', $class_id ] ]);
  78. Cache::tag("goods_attr_class")->clear();
  79. return $this->success($res);
  80. }
  81. /**
  82. * 获取商品类型信息
  83. * @param array $condition
  84. * @param string $field
  85. */
  86. public function getAttrClassInfo($condition, $field = 'class_id,class_name,sort')
  87. {
  88. $data = json_encode([ $condition, $field ]);
  89. $cache = Cache::get("goods_attr_class_getAttrClassInfo_" . $data);
  90. if (!empty($cache)) {
  91. return $this->success($cache);
  92. }
  93. $res = model('goods_attr_class')->getInfo($condition, $field);
  94. Cache::tag("goods_attr_class")->set("goods_attr_class_getAttrClassInfo_" . $data, $res);
  95. return $this->success($res);
  96. }
  97. /**
  98. * 获取商品类型列表
  99. * @param array $condition
  100. * @param string $field
  101. * @param string $order
  102. * @param null $limit
  103. * @return \multitype
  104. */
  105. public function getAttrClassList($condition = [], $field = 'class_id,class_name,sort', $order = 'class_id desc', $limit = null)
  106. {
  107. $data = json_encode([ $condition, $field, $order, $limit ]);
  108. $cache = Cache::get("goods_attr_class_getAttrClassList_" . $data);
  109. if (!empty($cache)) {
  110. return $this->success($cache);
  111. }
  112. $list = model('goods_attr_class')->getList($condition, $field, $order, '', '', '', $limit);
  113. Cache::tag("goods_attr_class")->set("goods_attr_class_getAttrClassList_" . $data, $list);
  114. return $this->success($list);
  115. }
  116. /**
  117. * 获取商品类型分页列表
  118. * @param array $condition
  119. * @param int $page
  120. * @param int $page_size
  121. * @param string $order
  122. * @param string $field
  123. * @return \multitype
  124. */
  125. public function getAttrClassPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = 'class_id desc', $field = 'class_id,class_name,sort')
  126. {
  127. $data = json_encode([ $condition, $field, $order, $page, $page_size ]);
  128. $cache = Cache::get("goods_attr_class_getAttrClassPageList_" . $data);
  129. if (!empty($cache)) {
  130. return $this->success($cache);
  131. }
  132. $list = model('goods_attr_class')->pageList($condition, $field, $order, $page, $page_size);
  133. Cache::tag("goods_attr_class")->set("goods_attr_class_getAttrClassPageList_" . $data, $list);
  134. return $this->success($list);
  135. }
  136. /************************************************************商品类型品牌关联*********************************************/
  137. /**
  138. * 添加商品类型品牌关联
  139. * @param $attr_class_id
  140. * @param $data
  141. * @return \multitype
  142. */
  143. public function addAttrClassBrand($attr_class_id, $data)
  144. {
  145. $class_id = model("goods_attr_class_brand")->addList($data);
  146. Cache::tag("goods_attr_class_brand_" . $attr_class_id)->clear();
  147. return $this->success($class_id);
  148. }
  149. /**
  150. * 删除商品类型品牌关联
  151. * @param $attr_class_id
  152. * @param $id
  153. * @return \multitype
  154. */
  155. public function deleteAttrClassBrand($attr_class_id, $id)
  156. {
  157. $res = model('goods_attr_class_brand')->delete([ [ 'id', 'in', $id ], [ 'attr_class_id', '=', $attr_class_id ] ]);
  158. Cache::tag("goods_attr_class_brand_" . $attr_class_id)->clear();
  159. return $this->success($res);
  160. }
  161. /**
  162. * 获取商品类型品牌关联列表
  163. * @param array $condition
  164. * @param string $field
  165. * @param string $order
  166. * @param null $limit
  167. * @return \multitype
  168. */
  169. public function getAttrClassBrandList($condition = [], $field = 'ngacb.id,ngacb.attr_class_id,nsgb.brand_id,nsgb.brand_name', $order = 'ngacb.id desc', $limit = null)
  170. {
  171. $check_condition = array_column($condition, 2, 0);
  172. $attr_class_id = isset($check_condition['ngacb.attr_class_id']) ? $check_condition['ngacb.attr_class_id'] : '';
  173. if ($attr_class_id === '') {
  174. // return $this->error('', 'REQUEST_GOODS_ATTRIBUTE_ID');
  175. }
  176. $data = json_encode([ $condition, $field, $order, $limit ]);
  177. $cache = Cache::get("goods_attr_class_brand_getAttrClassBrandList_" . $attr_class_id . '_' . $data);
  178. if (!empty($cache)) {
  179. return $this->success($cache);
  180. }
  181. $join = [
  182. [
  183. 'goods_brand nsgb',
  184. 'ngacb.brand_id = nsgb.brand_id',
  185. 'left'
  186. ]
  187. ];
  188. $list = model('goods_attr_class_brand')->getList($condition, $field, $order, 'ngacb', $join, '', $limit);
  189. Cache::tag("goods_attr_class_brand_" . $attr_class_id)->set("goods_attr_class_brand_getAttrClassBrandList_" . $attr_class_id . '_' . $data, $list);
  190. return $this->success($list);
  191. }
  192. /************************************************************商品属性*********************************************/
  193. /**
  194. * 添加商品属性
  195. * @param $attr_class_id
  196. * @param $data
  197. * @return \multitype
  198. */
  199. public function addAttribute($attr_class_id, $data)
  200. {
  201. $attr_id = model("goods_attribute")->add($data);
  202. Cache::tag("goods_attribute_" . $attr_class_id)->clear();
  203. return $this->success($attr_id);
  204. }
  205. /**
  206. * 编辑商品属性
  207. * @param $attr_class_id
  208. * @param $data
  209. * @return \multitype
  210. */
  211. public function editAttribute($attr_class_id, $data)
  212. {
  213. $res = model("goods_attribute")->update($data, [ [ 'attr_id', '=', $data['attr_id'] ], [ 'attr_class_id', '=', $attr_class_id ] ]);
  214. Cache::tag("goods_attribute_" . $attr_class_id)->clear();
  215. return $this->success($res);
  216. }
  217. /**
  218. * 删除属性
  219. * @param $attr_class_id
  220. * @param $attr_id
  221. * @return \multitype
  222. */
  223. public function deleteAttribute($attr_class_id, $attr_id)
  224. {
  225. $res = model('goods_attribute')->delete([ [ 'attr_id', '=', $attr_id ], [ 'attr_class_id', '=', $attr_class_id ] ]);
  226. if ($res) {
  227. $res = model('goods_attribute_value')->delete([ [ 'attr_id', '=', $attr_id ], [ 'attr_class_id', '=', $attr_class_id ] ]);
  228. Cache::tag("goods_attribute_value_" . $attr_class_id)->clear();
  229. }
  230. Cache::tag("goods_attribute_" . $attr_class_id)->clear();
  231. return $this->success($res);
  232. }
  233. /**
  234. * 修改站点
  235. * @param int $sort
  236. * @param int $class_id
  237. */
  238. public function modifyAttributeSite($site_id, $attr_class_id, $attr_id)
  239. {
  240. $res = model('goods_attribute')->update([ 'site_id' => $site_id ], [ [ 'attr_id', '=', $attr_id ] ]);
  241. Cache::tag("goods_attribute_" . $attr_class_id)->clear();
  242. return $this->success($res);
  243. }
  244. /**
  245. * 获取属性信息
  246. * @param $condition
  247. * @param string $field
  248. * @return \multitype
  249. */
  250. public function getAttributeInfo($condition, $field = 'attr_id,attr_name,attr_class_id,sort,is_query,is_spec,attr_value_list,attr_type')
  251. {
  252. $check_condition = array_column($condition, 2, 0);
  253. $attr_class_id = isset($check_condition['attr_class_id']) ? $check_condition['attr_class_id'] : '';
  254. if ($attr_class_id === '') {
  255. return $this->error('', 'REQUEST_GOODS_ATTRIBUTE_ID');
  256. }
  257. $data = json_encode([ $condition, $field ]);
  258. $cache = Cache::get("goods_attribute_getAttributeInfo_" . $attr_class_id . '_' . $data);
  259. if (!empty($cache)) {
  260. return $this->success($cache);
  261. }
  262. $res = model('goods_attribute')->getInfo($condition, $field);
  263. Cache::tag("goods_attribute_" . $attr_class_id)->set("goods_attribute_getAttributeInfo_" . $attr_class_id . '_' . $data, $res);
  264. return $this->success($res);
  265. }
  266. /**
  267. * 获取商品属性列表
  268. * @param array $condition
  269. * @param string $field
  270. * @param string $order
  271. * @param null $limit
  272. * @return \multitype
  273. */
  274. public function getAttributeList($condition = [], $field = 'attr_id,attr_name,attr_class_id,sort,is_query,is_spec,attr_value_list,attr_value_list,attr_type,site_id,site_name', $order = 'attr_id desc', $limit = null)
  275. {
  276. $check_condition = array_column($condition, 2, 0);
  277. $attr_class_id = isset($check_condition['attr_class_id']) ? $check_condition['attr_class_id'] : '';
  278. if ($attr_class_id === '') {
  279. return $this->error('', 'REQUEST_GOODS_ATTRIBUTE_ID');
  280. }
  281. $data = json_encode([ $condition, $field, $order, $limit ]);
  282. $cache = Cache::get("goods_attribute_getAttributeList_" . $attr_class_id . '_' . $data);
  283. if (!empty($cache)) {
  284. return $this->success($cache);
  285. }
  286. $list = model('goods_attribute')->getList($condition, $field, $order, '', '', '', $limit);
  287. Cache::tag("goods_attribute_" . $attr_class_id)->set("goods_attribute_getAttributeList_" . $attr_class_id . '_' . $data, $list);
  288. return $this->success($list);
  289. }
  290. /**
  291. * 获取商品规格列表,暂时不加缓存
  292. * @param array $condition
  293. * @param string $field
  294. * @param string $order
  295. * @param null $limit
  296. * @return \multitype
  297. */
  298. public function getSpecList($condition = [], $field = 'attr_id,attr_name,attr_class_id,sort,is_query,is_spec,attr_value_list,attr_value_list,attr_type,site_id', $order = 'attr_id desc', $limit = null)
  299. {
  300. $list = model('goods_attribute')->getList($condition, $field, $order, '', '', '', $limit);
  301. return $this->success($list);
  302. }
  303. /************************************************************商品属性关联*********************************************/
  304. /**
  305. * 获取商品属性关联列表
  306. * @param array $condition
  307. * @param string $field
  308. * @param string $order
  309. * @param null $limit
  310. * @return array|\multitype
  311. */
  312. public function getAttributeIndexList($condition = [], $field = 'id,goods_id,sku_id,attr_id,attr_value_id,attr_class_id', $order = '', $limit = null)
  313. {
  314. $list = model('goods_attr_index')->getList($condition, $field, $order, '', '', '', $limit);
  315. return $this->success($list);
  316. }
  317. /************************************************************商品属性值*********************************************/
  318. /**
  319. * 添加属性值
  320. * @param $attr_class_id
  321. * @param $data
  322. * @return \multitype
  323. */
  324. public function addAttributeValue($attr_class_id, $data)
  325. {
  326. $attr_value_id = model("goods_attribute_value")->addList($data);
  327. if ($attr_value_id) {
  328. // 刷新属性值JSON格式
  329. $this->refreshAttrValueFormat($attr_class_id, $data[0]['attr_id']);
  330. Cache::tag("goods_attribute_value_" . $attr_class_id)->clear();
  331. return $this->success($attr_value_id);
  332. } else {
  333. return $this->error();
  334. }
  335. }
  336. /**
  337. * 编辑商品属性值
  338. * @param $attr_class_id
  339. * @param $data
  340. * @return \multitype
  341. */
  342. public function editAttributeValue($attr_class_id, $data)
  343. {
  344. $res = model("goods_attribute_value")->update($data, [ [ 'attr_value_id', '=', $data['attr_value_id'] ] ]);
  345. if ($res) {
  346. // 刷新属性值JSON格式
  347. $this->refreshAttrValueFormat($attr_class_id, $data['attr_id']);
  348. Cache::tag("goods_attribute_value_" . $attr_class_id)->clear();
  349. return $this->success($res);
  350. } else {
  351. return $this->error();
  352. }
  353. }
  354. /**
  355. * 刷新属性值JSON格式
  356. * @param $attr_class_id
  357. * @param $attr_id
  358. */
  359. private function refreshAttrValueFormat($attr_class_id, $attr_id)
  360. {
  361. $list = model('goods_attribute_value')->getList([ [ 'attr_id', '=', $attr_id ] ], 'attr_value_id,attr_value_name');
  362. if (!empty($list)) {
  363. $attr_value_format = [];
  364. foreach ($list as $k => $v) {
  365. $item = [
  366. 'attr_value_id' => $v['attr_value_id'],
  367. 'attr_value_name' => $v['attr_value_name']
  368. ];
  369. $attr_value_format[] = $item;
  370. }
  371. $res = model("goods_attribute")->update([ 'attr_value_format' => json_encode($attr_value_format) ], [ [ 'attr_id', '=', $attr_id ], [ 'attr_class_id', '=', $attr_class_id ] ]);
  372. Cache::tag("goods_attribute_" . $attr_class_id)->clear();
  373. return $this->success($res);
  374. }
  375. }
  376. /**
  377. * 删除属性值
  378. * @param $attr_class_id
  379. * @param $condition
  380. * @return \multitype
  381. */
  382. public function deleteAttributeValue($attr_class_id, $condition)
  383. {
  384. $res = model('goods_attribute_value')->delete($condition);
  385. Cache::tag("goods_attribute_value_" . $attr_class_id)->clear();
  386. return $this->success($res);
  387. }
  388. /**
  389. * 获取商品属性值列表
  390. * @param array $condition
  391. * @param string $field
  392. * @param string $order
  393. * @param null $limit
  394. * @return \multitype
  395. */
  396. public function getAttributeValueList($condition = [], $field = 'attr_value_id,attr_value_name,attr_id,attr_class_id,sort', $order = '', $limit = null)
  397. {
  398. $check_condition = array_column($condition, 2, 0);
  399. $attr_class_id = isset($check_condition['attr_class_id']) ? $check_condition['attr_class_id'] : '';
  400. if ($attr_class_id === '') {
  401. return $this->error('', 'REQUEST_GOODS_ATTRIBUTE_ID');
  402. }
  403. $data = json_encode([ $condition, $field, $order, $limit ]);
  404. $cache = Cache::get("goods_attribute_value_getAttributeValueList_" . $attr_class_id . '_' . $data);
  405. if (!empty($cache)) {
  406. return $this->success($cache);
  407. }
  408. $list = model('goods_attribute_value')->getList($condition, $field, $order, '', '', '', $limit);
  409. Cache::tag("goods_attribute_value_" . $attr_class_id)->set("goods_attribute_value_getAttributeValueList_" . $attr_class_id . '_' . $data, $list);
  410. return $this->success($list);
  411. }
  412. /**
  413. * 获取商品规格值列表,暂时不加缓存
  414. * @param array $condition
  415. * @param string $field
  416. * @param string $order
  417. * @param null $limit
  418. * @return \multitype
  419. */
  420. public function getSpecValueList($condition = [], $field = 'attr_value_id,attr_value_name,attr_id,attr_class_id,sort', $order = 'attr_value_id desc', $limit = null)
  421. {
  422. $list = model('goods_attribute_value')->getList($condition, $field, $order, '', '', '', $limit);
  423. return $this->success($list);
  424. }
  425. }