SyncMdGoodsJob.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\jobs;
  8. use app\models\Md;
  9. use yii\base\BaseObject;
  10. use yii\queue\JobInterface;
  11. use app\models\Goods;
  12. use app\models\MdGoods;
  13. use yii\queue\Queue;
  14. /**
  15. * 同步门店商品
  16. */
  17. class SyncMdGoodsJob extends BaseObject implements JobInterface
  18. {
  19. public array $goods_ids;
  20. public $md_id;
  21. public function execute($queue)
  22. {
  23. $md_ids = [];
  24. if($this->md_id){
  25. if(is_array($this->md_id)){
  26. $md_ids = $this->md_id;
  27. }else{
  28. $md_ids = [$this->md_id];
  29. }
  30. }
  31. foreach ($this->goods_ids as $goods_id) {
  32. $goods = Goods::findOne($goods_id);
  33. if (!empty($goods)) {
  34. $query = Md::find()->where(['store_id' => $goods->store_id, 'is_delete' => 0]);
  35. if(!empty($md_ids)){
  36. $query->andWhere(['id' => $md_ids]);
  37. }
  38. $md_list = $query->asArray()->all();
  39. foreach ($md_list as $md_item) {
  40. $is_single = intval($md_item['is_single']);
  41. if($is_single){
  42. $md_goods = MdGoods::findOne(['goods_id' => $goods_id, 'md_id' => $md_item['id']]);
  43. if (empty($md_goods)) {
  44. $md_goods = new MdGoods();
  45. $md_goods->md_id = $md_item['id'];
  46. $md_goods->goods_id = $goods_id;
  47. $md_goods->attr = $goods->attr;
  48. $md_goods->virtual_sales = $goods->virtual_sales;
  49. $md_goods->price = $goods->price;
  50. $md_goods->status = 1;
  51. $md_goods->delivery_type = $md_item['self_delivery_type'];
  52. $md_goods->goods_num = $goods->goods_num;
  53. $md_goods->delivery_type = $goods->delivery_type;
  54. if (!$md_goods->save()) {
  55. return [
  56. 'code' => 1,
  57. 'msg' => json_encode($md_goods->errors)
  58. ];
  59. }
  60. } else {
  61. $md_goods_attr = json_decode($md_goods->attr, true);
  62. $goods_attr = json_decode($goods->attr, true);
  63. $array_attr = [];
  64. foreach ($goods_attr as $goods_attr_index => $goods_attr_item) {
  65. $array_attr[$goods_attr_index] = $goods_attr_item;
  66. $goods_attr_id = array_column($goods_attr_item['attr_list'], 'attr_id');
  67. sort($goods_attr_id);
  68. foreach ($md_goods_attr as $md_goods_attr_item) {
  69. $md_goods_attr_id = array_column($md_goods_attr_item['attr_list'], 'attr_id');
  70. sort($md_goods_attr_id);
  71. if (empty(array_diff($md_goods_attr_id, $goods_attr_id))) {
  72. if ($goods->product_type == 0 || $goods->md_food_id != 0) {
  73. $array_attr[$goods_attr_index]['price'] = $md_goods_attr_item['price'];
  74. $array_attr[$goods_attr_index]['num'] = $md_goods_attr_item['num'];
  75. }
  76. }
  77. }
  78. }
  79. $md_goods->attr = json_encode($array_attr, JSON_UNESCAPED_UNICODE);
  80. // if (!$is_single) {
  81. // $md_goods->goods_num = $goods->goods_num;
  82. // $md_goods->price = $goods->price;
  83. // }
  84. $md_goods->virtual_sales = $goods->virtual_sales;
  85. $md_goods->save();
  86. }
  87. }else{
  88. MdGoods::deleteAll(['md_id' => $md_item['id']]);
  89. }
  90. }
  91. }
  92. }
  93. }
  94. }