GoodsController.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\plugins\integral\controllers;
  8. use app\models\Attr;
  9. use app\models\AttrGroup;
  10. use app\models\Goods;
  11. use app\models\SaasIntegralCat;
  12. use app\plugins\integral\models\form\GoodsForm;
  13. use app\plugins\integral\models\SaasIntegralGoods;
  14. use yii\base\BaseObject;
  15. class GoodsController
  16. {
  17. public function actionList() {
  18. $status = get_params('status', -1);
  19. $name = get_params('name');
  20. $query = SaasIntegralGoods::find()->alias('ig')->where(['ig.store_id' => get_store_id(), 'ig.is_delete' => 0])->leftJoin(['g' => Goods::tableName()],'g.id=ig.goods_id');
  21. if (!empty($name)) {
  22. $query->andWhere([
  23. 'or',
  24. ['like', 'g.name', $name],
  25. ['like', 'ig.name', $name]
  26. ]);
  27. }
  28. if ($status >= 0) {
  29. $query->andWhere(['ig.status' => $status]);
  30. }
  31. $query->select(['ig.*'])->orderBy(['ig.sort' => SORT_ASC, 'ig.created_at' => SORT_DESC]);
  32. $list = pagination_make($query);
  33. foreach ($list['list'] as &$val) {
  34. $val['cat_name'] = SaasIntegralCat::findOne($val['cat_id'])->name;
  35. $val['created_at'] = date('Y-m-d H:i:s', $val['created_at']);
  36. $val['goods'] = SaasIntegralGoods::getGoods($val['goods_id']);
  37. $attr = json_decode($val['attr'], true);
  38. $count = count($attr);
  39. $str = '';
  40. foreach ($attr as $key => &$value) {
  41. $attr_group = GoodsForm::getAttrGroupByAttId($value['attr_id']);
  42. $t = $value['attr_name'];
  43. unset($value['attr_name']);
  44. $value['attr_group_name'] = $attr_group ? $attr_group->attr_group_name : null;
  45. $value['attr_name'] = $t;
  46. $str .= $value['attr_group_name'] . ':' . $t;
  47. if ($key < $count - 1) {
  48. $str .= ',';
  49. }
  50. }
  51. $val['attr_str'] = $str;
  52. }
  53. return [
  54. 'code' => 0,
  55. 'msg' => 'success',
  56. 'data' => [
  57. 'data' => $list['list'],
  58. 'pageNo' => $list['pageNo'],
  59. 'totalCount' => $list['totalCount'],
  60. ],
  61. ];
  62. }
  63. public function actionAttr()
  64. {
  65. $good_id = get_params('goods_id');
  66. $goods = Goods::findOne(['id' => $good_id, 'store_id' => get_store_id()]);
  67. if (!$goods->attr) {
  68. return [];
  69. }
  70. $attr_data = json_decode($goods->attr, true);
  71. foreach ($attr_data as $i => $attr_data_item) {
  72. $str = '';
  73. $count = count($attr_data[$i]['attr_list']);
  74. foreach ($attr_data[$i]['attr_list'] as $j => $attr_list) {
  75. $attr_group = GoodsForm::getAttrGroupByAttId($attr_data[$i]['attr_list'][$j]['attr_id']);
  76. $t = $attr_data[$i]['attr_list'][$j]['attr_name'];
  77. unset($attr_data[$i]['attr_list'][$j]['attr_name']);
  78. $attr_data[$i]['attr_list'][$j]['attr_group_name'] = $attr_group ? $attr_group->attr_group_name : null;
  79. $attr_data[$i]['attr_list'][$j]['attr_name'] = $t;
  80. $str .= $attr_data[$i]['attr_list'][$j]['attr_group_name'] . ':' . $t;
  81. if ($j < $count - 1) {
  82. $str .= ',';
  83. }
  84. }
  85. $attr_data[$i]['name'] = $str;
  86. }
  87. return [
  88. 'code' => 0,
  89. 'data' => [
  90. 'attr' => $attr_data
  91. ]
  92. ];
  93. }
  94. public function actionSave()
  95. {
  96. if (post_params('type') && post_params('type') == 'edit') {
  97. return $this->edit(post_params());
  98. }
  99. $form = new GoodsForm();
  100. $form->store_id = get_store_id();
  101. $form->attributes = post_params();
  102. return $form->save();
  103. }
  104. public function actionDetail()
  105. {
  106. $id = get_params('id');
  107. $store_id = get_store_id();
  108. $goods = SaasIntegralGoods::find()->where(['store_id' => $store_id, 'id' => $id])->asArray()->one();
  109. if (!$goods) {
  110. return [
  111. 'code' => 0,
  112. 'msg' => '未找到该记录'
  113. ];
  114. }
  115. $goods['origin_name'] = Goods::findOne($goods['goods_id'])->name;
  116. $goods['name'] = $goods['name'] ? $goods['name'] : $goods['origin_name'];
  117. $attr = json_decode($goods['attr'], true);
  118. $count = count($attr);
  119. $str = '';
  120. foreach ($attr as $key => &$value) {
  121. $attr_group = GoodsForm::getAttrGroupByAttId($value['attr_id']);
  122. $t = $value['attr_name'];
  123. unset($value['attr_name']);
  124. $value['attr_group_name'] = $attr_group ? $attr_group->attr_group_name : null;
  125. $value['attr_name'] = $t;
  126. $str .= $value['attr_group_name'] . ':' . $t;
  127. if ($key < $count - 1) {
  128. $str .= ',';
  129. }
  130. }
  131. $ids = array_column($attr, 'attr_id');
  132. $goods_num = 0;
  133. $goods_attr = json_decode(Goods::findOne($goods['goods_id'])->attr, true);
  134. foreach ($goods_attr as $value) {
  135. $goods_attr = array_column($value['attr_list'], 'attr_id');
  136. if ($ids == $goods_attr) {
  137. $goods_num = $value['num'];
  138. break;
  139. }
  140. }
  141. $goods['cat_id'] = intval($goods['cat_id']);
  142. $goods['goods_num'] = $goods_num;
  143. $goods['attr_str'] = $str;
  144. return [
  145. 'code' => 0,
  146. 'msg' => 'success',
  147. 'data' => $goods
  148. ];
  149. }
  150. private function edit($args)
  151. {
  152. $t = \Yii::$app->db->beginTransaction();
  153. $integral_goods = SaasIntegralGoods::findOne($args['id']);
  154. $before = $integral_goods->goods_count;
  155. if (!$integral_goods) {
  156. return [
  157. 'code' => 1,
  158. 'msg' => '商品不存在'
  159. ];
  160. }
  161. if (empty($args['detail'])) {
  162. return [
  163. 'code' => 1,
  164. 'msg' => '请填写商品详情'
  165. ];
  166. }
  167. if ($args['goods_num'] >= $args['goods_count']) {
  168. $integral_goods->goods_count = $args['user_num'];
  169. } else {
  170. return [
  171. 'code' => 1,
  172. 'msg' => '积分商品规格库存不能大于本商品规格库存'
  173. ];
  174. }
  175. if ($args['name']) {
  176. $integral_goods->name = $args['name'];
  177. }
  178. if ($args['integral'] >= 0) {
  179. $integral_goods->integral = $args['integral'];
  180. }
  181. if ($args['user_num'] >= 0) {
  182. $integral_goods->user_num = $args['user_num'];
  183. }
  184. if ($args['sales'] >= 0) {
  185. $integral_goods->sales = $args['sales'];
  186. }
  187. if ($args['goods_count'] >= 0) {
  188. $integral_goods->goods_count = $args['goods_count'];
  189. }
  190. if ($args['cat_id'] >= 0) {
  191. $integral_goods->cat_id = $args['cat_id'];
  192. }
  193. if ($args['sort'] >= 0) {
  194. $integral_goods->sort = $args['sort'];
  195. }
  196. $integral_goods->detail = $args['detail'];
  197. if (!$integral_goods->save()) {
  198. $t->rollBack();
  199. return [
  200. 'code' => 1,
  201. 'msg' => '编辑失败'
  202. ];
  203. } else {
  204. $ids = array_column(json_decode($integral_goods->attr, true), 'attr_id');
  205. // 修改库存
  206. $goods_attr_res = Goods::findOne($integral_goods['goods_id']);
  207. $goods_attr = json_decode($goods_attr_res->attr, true);
  208. foreach ($goods_attr as $key => $value) {
  209. $goods_attr_id = array_column($value['attr_list'], 'attr_id');
  210. if ($ids == $goods_attr_id) {
  211. $v = $integral_goods['goods_count'] - $before;
  212. $goods_attr[$key]['num'] -= $v;
  213. if ($goods_attr[$key]['num'] < 0) {
  214. $t->rollBack();
  215. return [
  216. 'code' => 1,
  217. 'msg' => '编辑失败'
  218. ];
  219. }
  220. break;
  221. }
  222. }
  223. $goods_attr_res->attr = json_encode($goods_attr);
  224. if (!$goods_attr_res->save()) {
  225. $t->rollBack();
  226. return [
  227. 'code' => 1,
  228. 'msg' => '编辑失败'
  229. ];
  230. } else {
  231. $t->commit();
  232. return [
  233. 'code' => 0,
  234. 'msg' => '编辑成功'
  235. ];
  236. }
  237. }
  238. }
  239. /**
  240. * 修改商品状态
  241. */
  242. public function actionStatus()
  243. {
  244. if (!in_array(intval(post_params('status')), [0, 1])) {
  245. return [
  246. 'code' => 1,
  247. 'msg' => 'status状态不正确'
  248. ];
  249. }
  250. $integral_goods = SaasIntegralGoods::findOne(post_params('id'));
  251. if (empty($integral_goods)) {
  252. return [
  253. 'code' => 1,
  254. 'msg' => '查无此商品'
  255. ];
  256. }
  257. if ($integral_goods->goods_count < 1 && post_params('status') == 1) {
  258. return [
  259. 'code' => 1,
  260. 'msg' => '积分商品库存不足'
  261. ];
  262. }
  263. $integral_goods->status = intval(post_params('status'));
  264. if (!$integral_goods->save()) {
  265. return [
  266. 'code' => 1,
  267. 'msg' => $integral_goods->errors[0]
  268. ];
  269. }
  270. return [
  271. 'code' => 0,
  272. 'msg' => '更新状态成功'
  273. ];
  274. }
  275. /**
  276. * 删除商品
  277. */
  278. public function actionDelete()
  279. {
  280. $integral_goods = SaasIntegralGoods::find()->where(['id' => post_params('id'), 'is_delete' => 0])->one();
  281. if (empty($integral_goods)) {
  282. return [
  283. 'code' => 1,
  284. 'msg' => '查无此商品'
  285. ];
  286. }
  287. $integral_goods->is_delete = 1;
  288. if (!$integral_goods->save()) {
  289. return [
  290. 'code' => 1,
  291. 'msg' => $integral_goods->errors[0]
  292. ];
  293. }
  294. return [
  295. 'code' => 0,
  296. 'msg' => '删除成功'
  297. ];
  298. }
  299. public function actionCat() {
  300. return [
  301. 'code' => 0,
  302. 'msg' => 'success',
  303. 'data' => SaasIntegralCat::findAll(['is_delete' => SaasIntegralCat::DELETE_STATUS_FALSE, 'is_enable' => SaasIntegralCat::IS_ENABLE_TRUE])
  304. ];
  305. }
  306. }