| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- <?php
- namespace app\jobs\storeSync;
- use app\models\AboutArticle;
- use app\models\Goods;
- use app\models\PtActivity;
- use app\models\PtActivityBanner;
- use app\models\PtActivityGoods;
- use app\models\PtActivityGoodsCat;
- use app\models\StoreSyncExtLog;
- use yii\base\BaseObject;
- use yii\queue\JobInterface;
- //拼团活动
- class PtActivityJob extends BaseObject implements JobInterface
- {
- public array $pt_activity_id;
- public array $to_store_id;
- public int $from_store_id;
- public function execute($queue)
- {
- // TODO: Implement execute() method.
- $from_store_id = $this->from_store_id;
- $to_store_id = $this->to_store_id;
- $pt_activity_id = $this->pt_activity_id;
- foreach ($to_store_id as $store_id_item) {
- $cacheActivity = $this->doCopyPt($from_store_id, $store_id_item, $pt_activity_id);
- $cacheCat = $this->doCopyPtCat($from_store_id, $store_id_item);
- $this->doCopyPtGoods($from_store_id, $store_id_item, $cacheActivity, $cacheCat);
- }
- }
- public function doCopyPt($from_store_id, $to_store_id, $pt_activity_id) {
- try {
- $list = PtActivity::find()
- ->where([
- 'store_id' => $from_store_id,
- 'id' => $pt_activity_id
- ])->orderBy(['id' => SORT_ASC])->all();
- $cache = [];
- foreach ($list as $value) {
- //判断是否为当前商城同步过此商品
- $storeSyncExtLog = StoreSyncExtLog::findOne([
- 'from_store_id' => $from_store_id,
- 'to_store_id' => $to_store_id,
- 'type' => StoreSyncExtLog::TYPE_PT,
- 'from_id' => $value['id']
- ]);
- $id = $value['id'];
- $attr = $value->attributes;
- unset($attr['id']);
- $attr['store_id'] = $to_store_id;
- $attr['goods_ids'] = '';
- $model = PtActivity::findOne($storeSyncExtLog->to_id ?? 0) ?: new PtActivity();
- $model->setAttributes($attr, false);
- $model->is_delete = $attr['is_delete'];
- $model->save();
- $cache[$id] = $model->id;
- (new StoreSyncExtLog())::handleData($from_store_id, $to_store_id, $value['id'], $model->id, StoreSyncExtLog::TYPE_PT);
- }
- return $cache;
- } catch(\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- public function doCopyPtCat($from_store_id, $to_store_id) {
- try {
- $list = PtActivityGoodsCat::find()
- ->where([
- 'store_id' => $from_store_id
- ])->orderBy(['id' => SORT_ASC])->all();
- $cache = [];
- foreach ($list as $value) {
- //判断是否为当前商城同步过此商品
- $storeSyncExtLog = StoreSyncExtLog::findOne([
- 'from_store_id' => $from_store_id,
- 'to_store_id' => $to_store_id,
- 'type' => StoreSyncExtLog::TYPE_PT_GOODS_CAT,
- 'from_id' => $value['id']
- ]);
- $id = $value['id'];
- $attr = $value->attributes;
- unset($attr['id']);
- $attr['store_id'] = $to_store_id;
- $model = PtActivityGoodsCat::findOne($storeSyncExtLog->to_id ?? 0) ?: new PtActivityGoodsCat();
- $model->setAttributes($attr, false);
- $model->is_delete = $attr['is_delete'];
- $model->save();
- $cache[$id] = $model->id;
- (new StoreSyncExtLog())::handleData($from_store_id, $to_store_id, $id, $model->id, StoreSyncExtLog::TYPE_PT_GOODS_CAT);
- }
- return $cache;
- } catch(\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- public function doCopyPtGoods($from_store_id, $to_store_id, $cacheActivity, $cacheCat) {
- try {
- $old_activity_id = array_keys($cacheActivity);
- $list = PtActivityGoods::find()
- ->where([
- 'store_id' => $from_store_id,
- 'activity_id' => $old_activity_id
- ])->orderBy(['id' => SORT_ASC])->all();
- $cache = [];
- foreach ($list as $value) {
- $id = $value['id'];
- $attr = $value->attributes;
- $storeSyncExtLog = StoreSyncExtLog::findOne([
- 'from_store_id' => $from_store_id,
- 'to_store_id' => $to_store_id,
- 'type' => StoreSyncExtLog::TYPE_PRODUCT,
- 'from_id' => $attr['goods_id']
- ]);
- if ($storeSyncExtLog && !$storeSyncExtLog->to_id) {
- continue;
- }
- unset($attr['id']);
- $attr['store_id'] = $to_store_id;
- $attr['activity_id'] = $cacheActivity[$attr['activity_id']];
- $cat = PtActivityGoodsCat::findOne(['id' => $attr['cat_id'], 'is_delete' => 0]);
- if (!$cat) {
- continue;
- }
- $attr['cat_id'] = $cacheCat[$attr['cat_id']];
- $goods = Goods::findOne(['id' => $attr['goods_id'], 'is_delete' => 0]);
- if (!$goods) {
- continue;
- }
- $attr['goods_id'] = $storeSyncExtLog->to_id;
- $agattr = json_decode($value['attr'], true);
- $goodsNew = Goods::findOne($attr['goods_id']);
- $gattrNew = json_decode($goodsNew->attr, true);
- $agattrNew = [];
- foreach($agattr as $k => $item){
- $attrNames = array_column($item['attr_list'], 'attr_name');
- // var_dump($attrNames);
- foreach($gattrNew as $v){
- $attrNamesNew = array_column($v['attr_list'], 'attr_name');
- // var_dump($attrNamesNew);
- if($attrNames === $attrNamesNew){
- // var_dump('$attrNames == $attrNamesNew');
- $item['attr_list'] = $v['attr_list'];
- }
- }
- $agattrNew[] = $item;
- }
- $attr['attr'] = json_encode($agattrNew, JSON_UNESCAPED_UNICODE);
- //判断是否为当前商城同步过此商品
- $storeSyncExtLog = StoreSyncExtLog::findOne([
- 'from_store_id' => $from_store_id,
- 'to_store_id' => $to_store_id,
- 'type' => StoreSyncExtLog::TYPE_PT_GOODS,
- 'from_id' => $value['id']
- ]);
- $model = PtActivityGoods::findOne($storeSyncExtLog->to_id ?? 0) ?: new PtActivityGoods();
- $model->setAttributes($attr, false);
- $model->is_delete = $attr['is_delete'];
- $model->save();
- (new StoreSyncExtLog())::handleData($from_store_id, $to_store_id, $value['id'], $model->id, StoreSyncExtLog::TYPE_PT_GOODS);
- $cache[$id] = $model->id;
- }
- return $cache;
- } catch (\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- }
|