GoodsAttribute.php 16 KB

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