| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- <?php
- namespace app\jobs\storeSync;
- use app\models\Goods;
- use app\models\SeckillActivity;
- use app\models\SeckillActivityGoods;
- use app\models\StoreSyncExtLog;
- use yii\base\BaseObject;
- use yii\queue\JobInterface;
- class SeckillActivityJob extends BaseObject implements JobInterface
- {
- public array $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;
- $activity_id = $this->activity_id;
- foreach ($to_store_id as $store_id_item) {
- //同步活动
- $cacheActivity = $this->doCopySeckill($from_store_id, $store_id_item, $activity_id);
- //同步产品
- $cache = $this->doCopySeckillGoods($from_store_id, $store_id_item, $cacheActivity);
- }
- }
- public function doCopySeckill($from_store_id, $to_store_id, $activity_id) {
- try {
- $list = SeckillActivity::find()
- ->where([
- 'store_id' => $from_store_id,
- 'id' => $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_SECKILL,
- 'from_id' => $id
- ]);
- unset($attr['id']);
- $attr['store_id'] = $to_store_id;
- $model = SeckillActivity::findOne($storeSyncExtLog->to_id ?? 0) ?: new SeckillActivity();
- $model->setAttributes($attr, false);
- $model->is_delete = $attr['is_delete'];
- $model->save();
- (new StoreSyncExtLog())::handleData($from_store_id, $to_store_id, $id, $model->id, StoreSyncExtLog::TYPE_SECKILL);
- $cache[$id] = $model->id;
- }
- return $cache;
- } catch(\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- public function doCopySeckillGoods($from_store_id, $to_store_id, $cacheActivity) {
- try {
- $old_activity_id = array_keys($cacheActivity);
- $list = SeckillActivityGoods::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']];
- $attr['goods_id'] = $storeSyncExtLog->to_id;
- $attr['sale_num'] = 0;
- $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);
- if ($gattrNew) {
- 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_SECKILL_GOODS,
- 'from_id' => $id
- ]);
- $model = SeckillActivityGoods::findOne($storeSyncExtLog->to_id ?? 0) ?: new SeckillActivityGoods();
- $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_SECKILL_GOODS);
- }
- return $cache;
- } catch(\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- /** 同步秒杀 end */
- }
|