MdGoodsForm.php 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\modules\admin\models;
  8. use app\jobs\SyncMdGoodsJob;
  9. use app\models\Cat;
  10. use app\models\Goods;
  11. use app\models\GoodsCat;
  12. use app\models\Md;
  13. use app\models\MdGoods;
  14. use yii\base\Model;
  15. use yii\helpers\Json;
  16. class MdGoodsForm extends Model
  17. {
  18. /**
  19. * @param array $arr | status 状态 name 名称 cat_id 分类id mch_id 入驻商 is_verify 审核 select 查询数据
  20. * @return array
  21. */
  22. public static function getList ($arr = [])
  23. {
  24. $query = MdGoods::find()->alias('mdg')
  25. ->leftJoin(['g' => Goods::tableName()], 'mdg.goods_id = g.id')
  26. ->where(['mdg.md_id' => get_md_id(), 'g.store_id' => get_store_id(), 'g.mch_id' => 0, 'g.is_delete' => 0, 'g.md_food_id' => 0])
  27. ->andWhere(['not like', 'g.name', '当面付'])
  28. ->andWhere(['g.product_type' => [0, 1, 2]])->andWhere(['g.status' => Goods::STATUS_NORMAL]);
  29. if (isset($arr['name']) && !empty($arr['name'])) {
  30. $query->andWhere([
  31. 'like',
  32. 'g.name',
  33. $arr['name']
  34. ]);
  35. }
  36. if (isset($arr['cat_id']) && $arr['cat_id'] > 0) {
  37. $query->leftJoin(['gc' => GoodsCat::tableName()], 'g.id = gc.goods_id')->andWhere([
  38. 'gc.cat_id' => Cat::getCatId($arr['cat_id'])
  39. ])->groupBy('gc.goods_id');
  40. }
  41. if (isset($arr['status']) && $arr['status'] > -1) {
  42. if ($arr['status'] == 0) {
  43. $query->andWhere(['mdg.status' => 0]);
  44. } elseif ($arr['status'] == 1) {
  45. $query->andWhere(['mdg.status' => 1]);
  46. }
  47. }
  48. $select = ['g.id', 'g.name', 'mdg.status', 'g.service', 'g.updated_at', 'g.virtual_sales', 'g.price', 'g.goods_num',
  49. 'g.sort' ,'g.cover_pic', 'g.original_price', 'g.attr', 'g.detail', 'g.use_attr', 'mdg.delivery_type', 'g.can_set_md_price',
  50. 'md_price' => 'mdg.price', 'md_goods_num' => 'mdg.goods_num', 'md_virtual_sales' => 'mdg.virtual_sales'];
  51. $query->select($select)
  52. ->orderBy(['g.sort' => SORT_DESC, 'g.id' => SORT_DESC]);
  53. $pagination = pagination_make($query);
  54. $list = $pagination['list'];
  55. foreach($list as $k => $v) {
  56. $goods_cat = GoodsCat::find()->alias('gc')
  57. ->leftJoin(['c' => Cat::tableName()], 'gc.cat_id=c.id')
  58. ->where([ 'gc.goods_id' => $v['id'] ])
  59. ->select(['c.name'])
  60. ->asArray()
  61. ->all();
  62. $list[$k]['cat'] = $goods_cat;
  63. // 处理门店商品兼容
  64. // $list[$k]['md_virtual_sales'] = $v['virtual_sales'];
  65. // $list[$k]['md_goods_num'] = $v['goods_num'];
  66. // $list[$k]['md_price'] = $v['price'];
  67. $list[$k]['delivery_type'] = Json::decode($v['delivery_type']);
  68. $list[$k]['status'] = intval($v['status']);
  69. $list[$k]['choose_delivery_type'] = Json::decode(Md::findOne(get_md_id())->delivery_type);
  70. }
  71. return [
  72. 'code' => 0,
  73. 'msg' => 'success',
  74. 'data' => [
  75. 'data' => $list,
  76. 'pageNo' => $pagination['pageNo'],
  77. 'totalCount' => $pagination['totalCount']
  78. ]
  79. ];
  80. }
  81. public function setAttrNum()
  82. {
  83. $data = post_params();
  84. $md_goods = MdGoods::findOne(['goods_id' => $data['id'], 'md_id' => get_md_id()]);
  85. if (!$md_goods) {
  86. $md_goods = new MdGoods();
  87. $md_goods->md_id = get_md_id();
  88. $md_goods->goods_id = $data['id'];
  89. $md_goods->status = Goods::STATUS_NORMAL;
  90. $md_goods->price = $data['price'];
  91. $goods = Goods::findOne($data['id']);
  92. $md_goods->virtual_sales = $goods->virtual_sales;
  93. $md_goods->delivery_type = Md::findOne(get_md_id())->self_delivery_type;
  94. }
  95. $md_goods->attr = Json::encode($data['attr']);
  96. $goods_num = 0;
  97. foreach($data['attr'] as $item) {
  98. $goods_num += $item['num'];
  99. }
  100. $md_goods->goods_num = $goods_num;
  101. $res = $md_goods->save() ? ['code' => 0, 'msg' => '保存成功'] : ['code' => 1, 'msg' => implode(';', $md_goods->firstErrors)];
  102. return $res;
  103. }
  104. // 修改商品属性
  105. public function setType()
  106. {
  107. $type = get_params('type');
  108. $goods_id = get_params('id');
  109. $md_id = get_md_id();
  110. $value = get_params('value', 0);
  111. if (!$type || !$goods_id || !$md_id) {
  112. return [
  113. 'code' => 1,
  114. 'msg' => '参数错误'
  115. ];
  116. }
  117. $md_goods = MdGoods::findOne([
  118. 'md_id' => $md_id,
  119. 'goods_id' => $goods_id
  120. ]);
  121. $is_new_record = false;
  122. if (!$md_goods) {
  123. $md_goods = new MdGoods();
  124. $md_goods->md_id = $md_id;
  125. $md_goods->goods_id = $goods_id;
  126. $is_new_record = true;
  127. }
  128. $goods = Goods::findOne($goods_id);
  129. if ($type == 'delivery_type') {
  130. $md_goods->delivery_type = Json::decode($value);
  131. } else {
  132. $md_goods->$type = $value;
  133. }
  134. if ($type == 'goods_num') {
  135. if ($goods->use_attr == 0) {
  136. $attr = Json::decode($goods->attr);
  137. $attr[0]['num'] = $value;
  138. $md_goods->attr = Json::encode($attr);
  139. }
  140. if ($is_new_record) {
  141. $md_goods->attr = $goods->attr;
  142. $md_goods->virtual_sales = $goods->virtual_sales;
  143. $md_goods->price = $goods->price;
  144. $md_goods->delivery_type = Md::findOne(get_md_id())->self_delivery_type;
  145. }
  146. }
  147. if ($type == 'price') {
  148. if ($goods->use_attr == 0) {
  149. $attr = Json::decode($goods->attr);
  150. $attr[0]['price'] = doubleval($value);
  151. $md_goods->attr = Json::encode($attr);
  152. }
  153. if ($is_new_record) {
  154. $md_goods->attr = $goods->attr;
  155. $md_goods->virtual_sales = $goods->virtual_sales;
  156. $md_goods->delivery_type = Md::findOne(get_md_id())->self_delivery_type;
  157. $md_goods->goods_num = $goods->goods_num;
  158. }
  159. }
  160. if ($type == 'virtual_sales'){
  161. if ($is_new_record) {
  162. $md_goods->attr = $goods->attr;
  163. $md_goods->price = $value;
  164. $md_goods->delivery_type = Md::findOne(get_md_id())->self_delivery_type;
  165. $md_goods->goods_num = $goods->goods_num;
  166. }
  167. }
  168. if ($type == 'delivery_type'){
  169. if ($is_new_record) {
  170. $md_goods->attr = $goods->attr;
  171. $md_goods->price = $goods->price;
  172. $md_goods->goods_num = $goods->goods_num;
  173. $md_goods->virtual_sales = $goods->virtual_sales;
  174. }
  175. }
  176. if ($type == 'status'){
  177. if ($is_new_record) {
  178. $md_goods->attr = $goods->attr;
  179. $md_goods->price = $goods->price;
  180. $md_goods->virtual_sales = $goods->virtual_sales;
  181. $md_goods->delivery_type = Md::findOne(get_md_id())->self_delivery_type;
  182. $md_goods->goods_num = $goods->goods_num;
  183. }
  184. }
  185. if ($md_goods->save()) {
  186. return [
  187. 'code' => 0,
  188. 'msg' => '保存成功'
  189. ];
  190. } else {
  191. return [
  192. 'code' => 1,
  193. 'msg' => implode(';', $md_goods->firstErrors)
  194. ];
  195. }
  196. }
  197. }