PtActivityJob.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <?php
  2. namespace app\jobs\storeSync;
  3. use app\models\AboutArticle;
  4. use app\models\Goods;
  5. use app\models\PtActivity;
  6. use app\models\PtActivityBanner;
  7. use app\models\PtActivityGoods;
  8. use app\models\PtActivityGoodsCat;
  9. use app\models\StoreSyncExtLog;
  10. use yii\base\BaseObject;
  11. use yii\queue\JobInterface;
  12. //拼团活动
  13. class PtActivityJob extends BaseObject implements JobInterface
  14. {
  15. public array $pt_activity_id;
  16. public array $to_store_id;
  17. public int $from_store_id;
  18. public function execute($queue)
  19. {
  20. // TODO: Implement execute() method.
  21. $from_store_id = $this->from_store_id;
  22. $to_store_id = $this->to_store_id;
  23. $pt_activity_id = $this->pt_activity_id;
  24. foreach ($to_store_id as $store_id_item) {
  25. $cacheActivity = $this->doCopyPt($from_store_id, $store_id_item, $pt_activity_id);
  26. $cacheCat = $this->doCopyPtCat($from_store_id, $store_id_item);
  27. $this->doCopyPtGoods($from_store_id, $store_id_item, $cacheActivity, $cacheCat);
  28. }
  29. }
  30. public function doCopyPt($from_store_id, $to_store_id, $pt_activity_id) {
  31. try {
  32. $list = PtActivity::find()
  33. ->where([
  34. 'store_id' => $from_store_id,
  35. 'id' => $pt_activity_id
  36. ])->orderBy(['id' => SORT_ASC])->all();
  37. $cache = [];
  38. foreach ($list as $value) {
  39. //判断是否为当前商城同步过此商品
  40. $storeSyncExtLog = StoreSyncExtLog::findOne([
  41. 'from_store_id' => $from_store_id,
  42. 'to_store_id' => $to_store_id,
  43. 'type' => StoreSyncExtLog::TYPE_PT,
  44. 'from_id' => $value['id']
  45. ]);
  46. $id = $value['id'];
  47. $attr = $value->attributes;
  48. unset($attr['id']);
  49. $attr['store_id'] = $to_store_id;
  50. $attr['goods_ids'] = '';
  51. $model = PtActivity::findOne($storeSyncExtLog->to_id ?? 0) ?: new PtActivity();
  52. $model->setAttributes($attr, false);
  53. $model->is_delete = $attr['is_delete'];
  54. $model->save();
  55. $cache[$id] = $model->id;
  56. (new StoreSyncExtLog())::handleData($from_store_id, $to_store_id, $value['id'], $model->id, StoreSyncExtLog::TYPE_PT);
  57. }
  58. return $cache;
  59. } catch(\Exception $e) {
  60. return [
  61. 'code' => 1,
  62. 'msg' => $e->getMessage()
  63. ];
  64. }
  65. }
  66. public function doCopyPtCat($from_store_id, $to_store_id) {
  67. try {
  68. $list = PtActivityGoodsCat::find()
  69. ->where([
  70. 'store_id' => $from_store_id
  71. ])->orderBy(['id' => SORT_ASC])->all();
  72. $cache = [];
  73. foreach ($list as $value) {
  74. //判断是否为当前商城同步过此商品
  75. $storeSyncExtLog = StoreSyncExtLog::findOne([
  76. 'from_store_id' => $from_store_id,
  77. 'to_store_id' => $to_store_id,
  78. 'type' => StoreSyncExtLog::TYPE_PT_GOODS_CAT,
  79. 'from_id' => $value['id']
  80. ]);
  81. $id = $value['id'];
  82. $attr = $value->attributes;
  83. unset($attr['id']);
  84. $attr['store_id'] = $to_store_id;
  85. $model = PtActivityGoodsCat::findOne($storeSyncExtLog->to_id ?? 0) ?: new PtActivityGoodsCat();
  86. $model->setAttributes($attr, false);
  87. $model->is_delete = $attr['is_delete'];
  88. $model->save();
  89. $cache[$id] = $model->id;
  90. (new StoreSyncExtLog())::handleData($from_store_id, $to_store_id, $id, $model->id, StoreSyncExtLog::TYPE_PT_GOODS_CAT);
  91. }
  92. return $cache;
  93. } catch(\Exception $e) {
  94. return [
  95. 'code' => 1,
  96. 'msg' => $e->getMessage()
  97. ];
  98. }
  99. }
  100. public function doCopyPtGoods($from_store_id, $to_store_id, $cacheActivity, $cacheCat) {
  101. try {
  102. $old_activity_id = array_keys($cacheActivity);
  103. $list = PtActivityGoods::find()
  104. ->where([
  105. 'store_id' => $from_store_id,
  106. 'activity_id' => $old_activity_id
  107. ])->orderBy(['id' => SORT_ASC])->all();
  108. $cache = [];
  109. foreach ($list as $value) {
  110. $id = $value['id'];
  111. $attr = $value->attributes;
  112. $storeSyncExtLog = StoreSyncExtLog::findOne([
  113. 'from_store_id' => $from_store_id,
  114. 'to_store_id' => $to_store_id,
  115. 'type' => StoreSyncExtLog::TYPE_PRODUCT,
  116. 'from_id' => $attr['goods_id']
  117. ]);
  118. if ($storeSyncExtLog && !$storeSyncExtLog->to_id) {
  119. continue;
  120. }
  121. unset($attr['id']);
  122. $attr['store_id'] = $to_store_id;
  123. $attr['activity_id'] = $cacheActivity[$attr['activity_id']];
  124. $cat = PtActivityGoodsCat::findOne(['id' => $attr['cat_id'], 'is_delete' => 0]);
  125. if (!$cat) {
  126. continue;
  127. }
  128. $attr['cat_id'] = $cacheCat[$attr['cat_id']];
  129. $goods = Goods::findOne(['id' => $attr['goods_id'], 'is_delete' => 0]);
  130. if (!$goods) {
  131. continue;
  132. }
  133. $attr['goods_id'] = $storeSyncExtLog->to_id;
  134. $agattr = json_decode($value['attr'], true);
  135. $goodsNew = Goods::findOne($attr['goods_id']);
  136. $gattrNew = json_decode($goodsNew->attr, true);
  137. $agattrNew = [];
  138. foreach($agattr as $k => $item){
  139. $attrNames = array_column($item['attr_list'], 'attr_name');
  140. // var_dump($attrNames);
  141. foreach($gattrNew as $v){
  142. $attrNamesNew = array_column($v['attr_list'], 'attr_name');
  143. // var_dump($attrNamesNew);
  144. if($attrNames === $attrNamesNew){
  145. // var_dump('$attrNames == $attrNamesNew');
  146. $item['attr_list'] = $v['attr_list'];
  147. }
  148. }
  149. $agattrNew[] = $item;
  150. }
  151. $attr['attr'] = json_encode($agattrNew, JSON_UNESCAPED_UNICODE);
  152. //判断是否为当前商城同步过此商品
  153. $storeSyncExtLog = StoreSyncExtLog::findOne([
  154. 'from_store_id' => $from_store_id,
  155. 'to_store_id' => $to_store_id,
  156. 'type' => StoreSyncExtLog::TYPE_PT_GOODS,
  157. 'from_id' => $value['id']
  158. ]);
  159. $model = PtActivityGoods::findOne($storeSyncExtLog->to_id ?? 0) ?: new PtActivityGoods();
  160. $model->setAttributes($attr, false);
  161. $model->is_delete = $attr['is_delete'];
  162. $model->save();
  163. (new StoreSyncExtLog())::handleData($from_store_id, $to_store_id, $value['id'], $model->id, StoreSyncExtLog::TYPE_PT_GOODS);
  164. $cache[$id] = $model->id;
  165. }
  166. return $cache;
  167. } catch (\Exception $e) {
  168. return [
  169. 'code' => 1,
  170. 'msg' => $e->getMessage()
  171. ];
  172. }
  173. }
  174. }