StoreAdminAttrForm.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\modules\alliance\models\salesman;
  8. use app\jobs\SyncMdGoodsJob;
  9. use app\models\Attr;
  10. use app\models\AttrGroup;
  11. use app\models\Cat;
  12. use app\models\Goods;
  13. use app\models\GoodsBook;
  14. use app\models\GoodsCat;
  15. use app\models\GoodsFullMinus;
  16. use app\models\GoodsPic;
  17. use yii\base\Model;
  18. use yii\helpers\Json;
  19. class StoreAdminAttrForm extends Model
  20. {
  21. public $store_id;
  22. public function goodsAttrBook($goods_info){
  23. $t = \Yii::$app->db->beginTransaction();
  24. try {
  25. $store_id = $this->store_id;
  26. // 预约
  27. if ($goods_info['product_type'] == Goods::GOODS_TYPE_DATE) {
  28. if (empty($goods_info['date_book'])) {
  29. $t->rollBack();
  30. throw new \Exception('请检查预约日期相关配置是否正确');
  31. }
  32. foreach ($goods_info['date_book'] as $k => $v) {
  33. if (intval($v['num']) < 0 || $v['price'] <= 0) {
  34. $t->rollBack();
  35. throw new \Exception('请检查预约日期的价格和库存参数是否填写正确');
  36. }
  37. }
  38. $goods_book = GoodsBook::findOne(['goods_id' => $goods_info['id']]);
  39. if (!$goods_book) {
  40. $goods_book = new GoodsBook();
  41. }
  42. $goods_book->goods_id = $goods_info['id'];
  43. $goods_book->date_book = Json::encode($goods_info['date_book']);
  44. $goods_book->save();
  45. }
  46. if ($goods_info['product_type'] == Goods::GOODS_TYPE_TIME) {
  47. if (empty($goods_info['service_book']) || !is_array($goods_info['service_book']) || empty($goods_info['service_book']['data'])) {
  48. $t->rollBack();
  49. throw new \Exception('请检查服务商品预定参数');
  50. }
  51. if (count($goods_info['service_book']['data']) != $goods_info['service_book']['date']) {
  52. $t->rollBack();
  53. throw new \Exception('请检查是否少填写时间段和价格参数');
  54. }
  55. $time_arr = [];
  56. foreach ($goods_info['service_book']['data'] as $val) {
  57. if (empty($val['time'])) {
  58. $t->rollBack();
  59. throw new \Exception('请检查是否少填写时间段');
  60. }
  61. foreach ($val['time'] as $v) {
  62. if (empty($v['start_time']) || empty($v['end_time'])) {
  63. $t->rollBack();
  64. throw new \Exception('请检查是否少填写时间段');
  65. }
  66. if (empty($v['times']) || !is_array($v['times'])) {
  67. $t->rollBack();
  68. throw new \Exception('请检查时间段下是否未选择详细时间');
  69. }
  70. foreach ($v['times'] as $m) {
  71. if (empty($m['time']) || empty($m['price'] || empty($m['num']))) {
  72. $t->rollBack();
  73. throw new \Exception('请检查是否少填写时间点, 价格以及库存');
  74. }
  75. }
  76. $time_arr[] = [
  77. 'start_time' => $v['start_time'],
  78. 'end_time' => $v['end_time'],
  79. ];
  80. }
  81. }
  82. $goods_book = GoodsBook::findOne(['goods_id' => $goods_info['id']]);
  83. if (!$goods_book) {
  84. $goods_book = new GoodsBook();
  85. $goods_book->goods_id = $goods_info['id'];
  86. }
  87. $goods_book->service_book = Json::encode($goods_info['service_book']);
  88. $goods_book->save();
  89. }
  90. // 设置规格
  91. try {
  92. $this->setAttr($goods_info);
  93. } catch(\Exception $e){
  94. return [
  95. 'code' => 0,
  96. 'msg' => $e->getMessage()
  97. ];
  98. }
  99. if ($goods_info['cat_id'] && count($goods_info['cat_id']) && (int)$goods_info['md_food_id'] === 0) {
  100. if ($goods_info['id'] > 0) {
  101. GoodsCat::updateAll(['is_delete' => 1], ['goods_id' => $goods_info['id'], 'is_delete' => 0]);
  102. }
  103. $goodsCatForm = new GoodsCat();
  104. foreach ($goods_info['cat_id'] as $cat_id) {
  105. $cat = Cat::findOne(['id' => $cat_id, 'store_id' => $store_id, 'is_show' => 1]);
  106. if (!$cat) {
  107. throw new \Exception("获取分类失败");
  108. }
  109. $goodsCat = clone $goodsCatForm;
  110. $goodsCat->goods_id = $goods_info['id'];
  111. $goodsCat->cat_id = $cat_id;
  112. $goodsCat->store_id = $store_id;
  113. if (!$goodsCat->save()) {
  114. throw new \Exception('保存失败');
  115. }
  116. }
  117. }
  118. //判断如果规格发生改变就删除满减规则
  119. if (!empty($goods_info['is_change_attr'])) {
  120. $res = GoodsFullMinus::updateAll(['is_delete' => 1], ['goods_id' => $goods_info['id']]);
  121. \Yii::error($res, "规格发生改变就删除满减规则");
  122. }
  123. if ($goods_info['goods_pic_list']) {
  124. if ($goods_info['id'] > 0) {
  125. GoodsPic::updateAll(['is_delete' => 1], ['goods_id' => $goods_info['id'], 'is_delete' => 0]);
  126. }
  127. $goodsPicForm = new GoodsPic();
  128. foreach ($goods_info['goods_pic_list'] as $pic) {
  129. $goodsPic = clone $goodsPicForm;
  130. $goodsPic->goods_id = $goods_info['id'];
  131. $goodsPic->pic_url = $pic['pic_url'];
  132. if (!$goodsPic->save()) {
  133. throw new \Exception('保存失败');
  134. }
  135. }
  136. }
  137. queue_push(new SyncMdGoodsJob(['goods_ids' => [$goods_info['id']]]), 0, 1);
  138. $t->commit();
  139. return [
  140. 'code' => 0,
  141. 'msg' => "操作成功"
  142. ];
  143. } catch (\Exception $e){
  144. $t->rollBack();
  145. return [
  146. 'code' => 0,
  147. 'msg' => $e->getMessage()
  148. ];
  149. }
  150. }
  151. //设置规格
  152. private function setAttr($goods_info)
  153. {
  154. try {
  155. $store_id = $this->store_id;
  156. $goods = Goods::findOne($goods_info['id']);
  157. if ($goods_info['product_type'] == Goods::GOODS_TYPE_DATE || $goods_info['product_type'] == Goods::GOODS_TYPE_TIME) {
  158. $defaultAttr = '[{"attr_list":[{"attr_id":1,"attr_name":"默认"}],"num":0,"price":0,"no":"","pic":"","share_commission_first":"","share_commission_second":"","share_commission_third":""}]';
  159. $goods->attr = $defaultAttr;
  160. $goods->save();
  161. return;
  162. }
  163. if (!$goods_info['use_attr']) {
  164. list($default_attr, $default_attr_group) = $this->getDefaultAttr();
  165. if (empty($goods_info['attr'])) {
  166. $goods_info['attr'] = [
  167. [
  168. 'attr_list' => [
  169. [
  170. 'attr_group_name' => $default_attr_group->attr_group_name,
  171. 'attr_id' => $default_attr->id,
  172. 'attr_name' => $default_attr->attr_name,
  173. ],
  174. ],
  175. 'num' => intval($goods_info['goods_num']) ?: 0,
  176. 'price' => $goods_info['price'],
  177. 'no' => $goods_info['goods_no'],
  178. ],
  179. ];
  180. } else {
  181. $attr_list = [
  182. [
  183. 'attr_group_name' => $default_attr_group->attr_group_name,
  184. 'attr_id' => $default_attr->id,
  185. 'attr_name' => $default_attr->attr_name,
  186. ],
  187. ];
  188. $goods_info['attr'][0]['attr_list'] = $attr_list;
  189. $goods_info['attr'][0]['num'] = intval($goods_info['goods_num']) ?: 0;
  190. $goods_info['attr'][0]['price'] = intval($goods_info['price']) ?: 0;
  191. $goods_info['attr'][0]['no'] = $goods_info['goods_no'];
  192. }
  193. }
  194. if (empty($goods_info['attr']) || !is_array($goods_info['attr'])) {
  195. return [
  196. 'code' => 0,
  197. 'msg' => "没有规格"
  198. ];
  199. }
  200. $new_attr = [];
  201. foreach ($goods_info['attr'] as $i => $item) {
  202. $new_attr_item = [
  203. 'attr_list' => [],
  204. 'num' => intval($item['num']),
  205. 'price' => doubleval($item['price']),
  206. 'no' => $item['no'] ? $item['no'] : '',
  207. 'pic' => $item['pic'] ? $item['pic'] : '',
  208. 'share_commission_first' => $item['share_commission_first'] ?: '',
  209. 'share_commission_second' => $item['share_commission_second'] ?: '',
  210. 'share_commission_third' => $item['share_commission_third'] ?: '',
  211. ];
  212. foreach ($item as $k => $v) {
  213. if (strpos($k,'member') !== false) {
  214. $new_attr_item[$k] = $v;
  215. }
  216. }
  217. foreach ($item['attr_list'] as $a) {
  218. $attr_group_model = AttrGroup::findOne(['store_id' => $store_id, 'attr_group_name' => $a['attr_group_name'], 'is_delete' => 0]);
  219. if (!$attr_group_model) {
  220. $attr_group_model = new AttrGroup();
  221. $attr_group_model->attr_group_name = $a['attr_group_name'];
  222. $attr_group_model->store_id = $store_id;
  223. $attr_group_model->is_delete = 0;
  224. $attr_group_model->save();
  225. }
  226. $attr_model = Attr::findOne(['attr_group_id' => $attr_group_model->id, 'attr_name' => $a['attr_name'], 'is_delete' => 0]);
  227. if (!$attr_model) {
  228. $attr_model = new Attr();
  229. $attr_model->attr_name = $a['attr_name'];
  230. $attr_model->attr_group_id = $attr_group_model->id;
  231. $attr_model->is_delete = 0;
  232. $attr_model->save();
  233. }
  234. \Yii::error((array)$attr_model,"今天是个好日子");
  235. $new_attr_item['attr_list'][] = [
  236. 'attr_id' => $attr_model->id,
  237. 'attr_name' => $attr_model->attr_name,
  238. ];
  239. }
  240. $new_attr[] = $new_attr_item;
  241. }
  242. $goods->attr = Json::encode($new_attr);
  243. if (!$goods->save()) {
  244. throw new \Exception(json_encode($goods->errors));
  245. }
  246. return [
  247. 'code' => 0,
  248. 'msg' => '操作成功'
  249. ];
  250. } catch (\Exception $e) {
  251. return [
  252. 'code' => 1,
  253. 'msg' => $e->getMessage()
  254. ];
  255. }
  256. }
  257. //设置默认规格
  258. public function getDefaultAttr()
  259. {
  260. $default_attr_name = '默认';
  261. $default_attr_group_name = '规格';
  262. $store_id = $this->store_id;
  263. $attr = Attr::findOne([
  264. 'attr_name' => $default_attr_name,
  265. 'is_delete' => 0,
  266. 'is_default' => 1,
  267. ]);
  268. $attr_group = null;
  269. if (!$attr) {
  270. $attr_group = AttrGroup::findOne([
  271. 'attr_group_name' => $default_attr_group_name,
  272. 'is_delete' => 0,
  273. ]);
  274. if (!$attr_group) {
  275. $attr_group = new AttrGroup();
  276. $attr_group->store_id = $store_id;
  277. $attr_group->attr_group_name = $default_attr_group_name;
  278. $attr_group->is_delete = 0;
  279. $attr_group->save(false);
  280. }
  281. $attr = new Attr();
  282. $attr->attr_group_id = $attr_group->id;
  283. $attr->attr_name = $default_attr_name;
  284. $attr->is_delete = 0;
  285. $attr->is_default = 1;
  286. $attr->save(false);
  287. } else {
  288. $attr_group = AttrGroup::findOne($attr->attr_group_id);
  289. }
  290. return [$attr, $attr_group];
  291. }
  292. }