| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- namespace app\jobs;
- use app\models\Md;
- use yii\base\BaseObject;
- use yii\queue\JobInterface;
- use app\models\Goods;
- use app\models\MdGoods;
- use yii\queue\Queue;
- /**
- * 同步门店商品
- */
- class SyncMdGoodsJob extends BaseObject implements JobInterface
- {
- public array $goods_ids;
- public $md_id;
- public function execute($queue)
- {
- $md_ids = [];
- if($this->md_id){
- if(is_array($this->md_id)){
- $md_ids = $this->md_id;
- }else{
- $md_ids = [$this->md_id];
- }
- }
- foreach ($this->goods_ids as $goods_id) {
- $goods = Goods::findOne($goods_id);
- if (!empty($goods)) {
- $query = Md::find()->where(['store_id' => $goods->store_id, 'is_delete' => 0]);
- if(!empty($md_ids)){
- $query->andWhere(['id' => $md_ids]);
- }
- $md_list = $query->asArray()->all();
- foreach ($md_list as $md_item) {
- $is_single = intval($md_item['is_single']);
- if($is_single){
- $md_goods = MdGoods::findOne(['goods_id' => $goods_id, 'md_id' => $md_item['id']]);
- if (empty($md_goods)) {
- $md_goods = new MdGoods();
- $md_goods->md_id = $md_item['id'];
- $md_goods->goods_id = $goods_id;
- $md_goods->attr = $goods->attr;
- $md_goods->virtual_sales = $goods->virtual_sales;
- $md_goods->price = $goods->price;
- $md_goods->status = 1;
- $md_goods->delivery_type = $md_item['self_delivery_type'];
- $md_goods->goods_num = $goods->goods_num;
- $md_goods->delivery_type = $goods->delivery_type;
- if (!$md_goods->save()) {
- return [
- 'code' => 1,
- 'msg' => json_encode($md_goods->errors)
- ];
- }
- } else {
- $md_goods_attr = json_decode($md_goods->attr, true);
- $goods_attr = json_decode($goods->attr, true);
- $array_attr = [];
- foreach ($goods_attr as $goods_attr_index => $goods_attr_item) {
- $array_attr[$goods_attr_index] = $goods_attr_item;
- $goods_attr_id = array_column($goods_attr_item['attr_list'], 'attr_id');
- sort($goods_attr_id);
- foreach ($md_goods_attr as $md_goods_attr_item) {
- $md_goods_attr_id = array_column($md_goods_attr_item['attr_list'], 'attr_id');
- sort($md_goods_attr_id);
- if (empty(array_diff($md_goods_attr_id, $goods_attr_id))) {
- if ($goods->product_type == 0 || $goods->md_food_id != 0) {
- $array_attr[$goods_attr_index]['price'] = $md_goods_attr_item['price'];
- $array_attr[$goods_attr_index]['num'] = $md_goods_attr_item['num'];
- }
- }
- }
- }
- $md_goods->attr = json_encode($array_attr, JSON_UNESCAPED_UNICODE);
- // if (!$is_single) {
- // $md_goods->goods_num = $goods->goods_num;
- // $md_goods->price = $goods->price;
- // }
- $md_goods->virtual_sales = $goods->virtual_sales;
- $md_goods->save();
- }
- }else{
- MdGoods::deleteAll(['md_id' => $md_item['id']]);
- }
-
- }
- }
- }
- }
- }
|