where(['id' => $params['self_store_id']]) ->asArray() ->one(); if (empty($before_model) || empty($before_model['is_sync']) || $before_model['sync_status'] != StoreEnum::SYNC_STATUS_WAIT) return true; //需要被同步的门店id $self_store_id = $params['self_store_id']; $mall_id = $params['mall_id']; $is_secondary_card = MallAddons::isInstall($mall_id, 'SecondaryCard'); $is_install_store_boss_agent = MallAddons::isInstall($mall_id, AddonsEnum::ADDONS_NAME_STORE_BOSS_AGENT); $is_install_coupon = MallAddons::isInstall($mall_id, AddonsEnum::ADDONS_NAME_COUPON); //模板门店id $source_store_id = $params['source_store_id']; $enter = \Yii::$app->services->setting->addons->get($mall_id, StoreEnum::ADDONS_NAME, 'enter'); if (empty($enter['is_template'])) { return true; } if (empty($source_store_id)) { $template_store = json_decode($enter['template_store'], true); if (empty($template_store)) { return true; } $template_store = end($template_store); $source_store_id = $template_store['id']; $source_store = Store::find() ->where([ 'id' => $params['self_store_id'], 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED] ]) ->one(); if (empty($source_store)) { return true; } } //更新店铺同步中 self::updateStoreStatus($params['self_store_id'], StoreEnum::SYNC_STATUS_IN_SYNC); $transaction = \Yii::$app->db->beginTransaction(); try { //清楚可能已经存在的数据 StoreSettings::updateAll([ 'status' => StatusEnum::DELETE ], [ 'store_id' => $params['self_store_id'], 'mall_id' => $mall_id ]); //店铺信息 self::syncStore($self_store_id, $source_store_id); //店铺公告 self::syncCommon($self_store_id, $source_store_id, 'StoreNotice', StoreNotice::class); //门店分佣模式 self::syncCommon($self_store_id, $source_store_id, 'StoreModel', StoreModel::class); //门店配置记录表 self::syncStoreSettings($self_store_id, $source_store_id, $mall_id); //预约门店独立设置 self::syncCommon($self_store_id, $source_store_id, 'StoreReserveSetting', StoreReserveSetting::class); //商品 self::syncGoodsCateData($self_store_id, $source_store_id); //商品分类 self::syncCommon($self_store_id, $source_store_id, 'FreightRules', StoreFreightRules::class); self::syncGoodsData($self_store_id, $source_store_id, $mall_id); self::syncGoodsAssociation($self_store_id, $source_store_id); self::syncCommon($self_store_id, $source_store_id, 'GoodsSpecs', GoodsSpecs::class); if ($is_install_coupon) { var_dump('优惠券'); //优惠券 self::syncStoreCoupon($self_store_id, $source_store_id); self::syncStoreCouponCatRelate($self_store_id, $source_store_id, $mall_id); self::syncStoreCouponGoodsRelate($self_store_id, $source_store_id, $mall_id); self::syncStoreCouponGiveItemSetting($self_store_id, $source_store_id, $mall_id); self::syncStoreCouponMemberRelate($self_store_id, $source_store_id, $mall_id); } if ($is_install_store_boss_agent) { var_dump('股东团队'); //股东基础设置 self::syncCommon($self_store_id, $source_store_id, 'StoreBossAgentSetting', StoreBossAgentSetting::class); //股东等级 self::syncStoreBossAgentLevel($self_store_id, $source_store_id, 'StoreBossAgentLevel', StoreBossAgentLevel::class); //门店核销券与门店股东相关联,同步设置 self::syncCommon($self_store_id, $source_store_id, 'StoreVerificationCoupons', StoreVerificationCoupons::class); self::syncCommon($self_store_id, $source_store_id, 'StoreVerificationSetting', StoreVerificationSetting::class); //核销券同步完先禁用 StoreVerificationCoupons::updateAll([ 'status' => StatusEnum::DISABLED ], [ 'store_id' => $params['self_store_id'], 'mall_id' => $mall_id ]); } if ($is_secondary_card) { var_dump('次卡'); //次卡同步 self::syncSecondaryCard($self_store_id, $source_store_id, $mall_id); //次卡关系同步 self::syncSecondaryCardRelateStore($self_store_id, $source_store_id, $mall_id); } //收银同步 self::syncStoreCashierExtra($self_store_id, $source_store_id, $mall_id); self::syncStoreExtra($self_store_id, $source_store_id, $mall_id); self::updateStoreStatus($params['self_store_id'], StoreEnum::SYNC_STATUS_COMPLETE); $transaction->commit(); // self::syncCommon($self_store_id, $source_store_id, 'StoreGoodsCate', StoreGoodsCate::class); } catch (\Exception $e) { $transaction->rollback(); self::updateStoreStatus($params['self_store_id'], StoreEnum::SYNC_STATUS_WAIT); var_dump($e->getMessage()); } } public static function syncCommon($self_store_id, $source_store_id, $type, $class) { $not_status_array = ['GoodsSpecs', 'StoreBossAgentSetting']; $where = []; $where[] = ['store_id' => $source_store_id]; if (!in_array($type, $not_status_array)) $where[] = ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]; $list = $class::lists([ 'where' => $where, 'order' => 'id asc', ]); if (empty($list)) { return true; } $ids = array_column($list, 'id'); $source_type_ids = StoreCommonSyncLogs::getTypeIds($self_store_id, $source_store_id, $type, $ids); foreach ($list as $item) { if (in_array($item['id'], $source_type_ids)) continue; $source_type_id = $item['id']; unset($item['id']); $model = new $class(); $item['store_id'] = $self_store_id; $model->attributes = $item; $model->save(); StoreCommonSyncLogs::add($self_store_id, $source_store_id, $source_type_id, $type, $model->id, $model->mall_id); } } //商品分类 public static function syncGoodsCateData($self_store_id, $source_store_id) { $type = 'GoodsCate'; $goods_cate_list = StoreGoodsCate::find() ->where(['store_id' => $source_store_id, 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]) ->orderBy('parent_id asc,id asc')->asArray()->all(); if (empty($goods_cate_list)) { return true; } $ids = array_column($goods_cate_list, 'id'); $goods_cate_common_sync_logs_list = StoreCommonSyncLogs::lists([ 'where' => [ ['self_store_id' => $self_store_id], ['type' => $type], ['source_store_id' => $source_store_id], ['source_type_id' => $ids] ], 'index' => 'source_type_id', ]); $source_type_ids = array_column($goods_cate_common_sync_logs_list, 'source_type_id'); $arr = []; foreach ($goods_cate_list as $item) { if (in_array($item['id'], $source_type_ids)) continue; $source_type_id = $item['id']; $model = new StoreGoodsCate(); $item['store_id'] = $self_store_id; $item['parent_id'] = 0; $model->attributes = $item; $model->save(); StoreCommonSyncLogs::add($self_store_id, $source_store_id, $source_type_id, $type, $model->id, $model->mall_id); $arr[$source_type_id] = $model->id; } foreach ($goods_cate_list as $item) { if (empty($item['parent_id'])) continue; $parent_id = $item['parent_id']; if (!isset($arr[$parent_id])) continue; $parent_cate_id = $arr[$parent_id]; if (!isset($arr[$item['id']])) continue; $cate_id = $arr[$item['id']]; StoreGoodsCate::updateAll(['parent_id' => $parent_cate_id], ['id' => $cate_id]); } } //同步商品 public static function syncGoodsData($self_store_id, $source_store_id) { $now = time(); $i = 1; $page_size = 1000; while ($goods_list = StoreGoods::find() ->where(['store_id' => $source_store_id, 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]) ->andWhere(['or', ['goods_source' => null], ['goods_source' => '']]) ->with(['cats', 'attr', 'extra']) ->offset(($i - 1) * $page_size)->orderBy('id asc')->asArray()->limit($page_size)->all()) { $goods_ids = array_column($goods_list, 'id'); $sync_goods_logs_list = StoreSyncGoodsLogs::lists([ 'where' => [ ['self_store_id' => $self_store_id], ['source_store_id' => $source_store_id], ['source_goods_id' => $goods_ids] ], ]); $sync_goods_logs_goods_ids = array_column($sync_goods_logs_list, 'source_goods_id'); $goods_ids = array_diff($goods_ids, $sync_goods_logs_goods_ids); if (!empty($goods_ids)) { $goods_cate_relate_list = StoreGoodsCateRelate::lists(['where' => [['goods_id' => $goods_ids]]]); $goods_cate_ids = array_column($goods_cate_relate_list, 'cate_id'); $goods_cate_sync_logs_list = StoreCommonSyncLogs::lists([ 'where' => [ ['type' => 'GoodsCate'], ['self_store_id' => $self_store_id], ['source_store_id' => $source_store_id], ['source_type_id' => $goods_cate_ids], ], 'index' => 'source_type_id', ]); $goods_cate_relate_arr = []; foreach ($goods_cate_relate_list as $val) { $goods_cate_relate_arr[$val['goods_id']][] = $val['cate_id']; } foreach ($goods_list as $goods) { if (!in_array($goods['id'], $goods_ids)) continue; $cats = []; if (isset($goods_cate_relate_arr[$goods['id']])) { foreach ($goods_cate_relate_arr[$goods['id']] as $cid) { if (isset($goods_cate_sync_logs_list[$cid])) { $cats[] = $goods_cate_sync_logs_list[$cid]['type_id']; } } } $add_goods_data = $goods; $add_goods_data['mall_id'] = $goods['mall_id']; $add_goods_data['store_id'] = $self_store_id; unset($add_goods_data['id']); $add_goods_data['cats'] = $cats; $source_goods_id = $goods['id']; //更新运费模板 if (!empty($goods['freight_id'])) { $freight_rules_sync_logs_list = StoreCommonSyncLogs::lists([ 'where' => [ ['type' => 'FreightRules'], ['self_store_id' => $self_store_id], ['source_store_id' => $source_store_id], ], 'index' => 'source_type_id', ]); if (isset($freight_rules_sync_logs_list[$goods['freight_id']])) { $goods['freight_id'] = $freight_rules_sync_logs_list[$goods['freight_id']]['type_id']; } } //添加商品 $goods_model = new StoreGoods(); unset($goods['id']); $goods_model->attributes = $goods; $goods_model->store_id = $self_store_id; $goods_model->supplier_id = $self_store_id; $goods_model->is_on_sale = 0; $goods_model->save(); $goods_id = $goods_model->id; self::addSyncGoodsLogs($self_store_id, $source_store_id, $goods_id, $source_goods_id, $goods['mall_id']); //商品规格 if (!empty($goods['attr'])) { self::addGoodsAttr($goods_id, $goods['attr'], $now); } //商品分类关联 if (!empty($cats)) { self::addGoodsCateRelate($cats, $goods_id, $now); } //额外信息 if (!empty($goods['extra'])) { self::addGoodExtra($goods['mall_id'], $self_store_id, $goods_id, $goods['extra']); } //编辑商品触发 $event = new GoodsEditEvent($goods_model->mall_id); $data['goods_id'] = $goods_id; $data['store_id'] = $self_store_id; $data['mall_id'] = $goods_model->mall_id; Yii::$app->services->events->dispatch($event, $data, $event->listeners); // //预约商品 if ($goods['goods_type'] == 3) { self::syncGoodsReserve($self_store_id, $source_store_id, $goods_id, $source_goods_id, StoreGoodsReserve::class); self::syncGoodsReserve($self_store_id, $source_store_id, $goods_id, $source_goods_id, StoreGoodsReserveSku::class); } if (MallAddons::isInstall($goods_model->mall_id, AddonsEnum::ADDONS_NAME_DEVOTE)) { //红包贡献值 self::syncDevoteGoodsSetting($self_store_id, $source_store_id, $goods_id, $source_goods_id, \addons\Devote\common\models\DevoteGoodsSetting::class); } //商品模式 self::syncStoreGoodsModel($self_store_id, $source_store_id, $goods_id, $source_goods_id, StoreGoodsModel::class); var_dump($goods_id); } } $i++; } } protected static function addSyncGoodsLogs($self_store_id, $source_store_id, $goods_id, $source_goods_id, $mall_id) { $model = new StoreSyncGoodsLogs(); $model->mall_id = $mall_id; $model->self_store_id = $self_store_id; $model->source_store_id = $source_store_id; $model->goods_id = $goods_id; $model->source_goods_id = $source_goods_id; $model->save(); } //商品规格 protected static function addGoodsAttr($goods_id, $attr_arr, $now) { $insert = []; foreach ($attr_arr as $goods_attr) { $insert[] = [ $goods_id, $goods_attr['name'], $goods_attr['sign_id'], $goods_attr['stock'], $goods_attr['price'], $goods_attr['original_price'], $goods_attr['cost_price'], $goods_attr['goods_no'], $goods_attr['weight'], $goods_attr['pic_url'], $goods_attr['version'], $goods_attr['sort'], $now, $now]; } $field = ['goods_id', 'name', 'sign_id', 'stock', 'price', 'original_price', 'cost_price', 'goods_no', 'weight', 'pic_url', 'version', 'sort', 'created_at', 'updated_at']; // 批量插入数据,商品规格 Yii::$app->db->createCommand()->batchInsert(StoreGoodsAttr::tableName(), $field, $insert)->execute(); } //商品与分类关联 protected static function addGoodsCateRelate($cats, $goods_id, $now) { $insert = []; foreach ($cats as $cid) { $insert[] = [$goods_id, $cid, $now, $now]; } $field = ['goods_id', 'cate_id', 'created_at', 'updated_at']; // 批量插入数据,商品分类关联 Yii::$app->db->createCommand()->batchInsert(StoreGoodsCateRelate::tableName(), $field, $insert)->execute(); } //商品额外信息 protected static function addGoodExtra($mall_id, $store_id, $goods_id, $extra) { // 批量插入数据,商品规格 $goods_extra_model = new StoreGoodsExtra(); $goods_extra_model->mall_id = $mall_id; $goods_extra_model->store_id = $store_id; $goods_extra_model->goods_id = $goods_id; $goods_extra_model->full_reduce_money = $extra['full_reduce_money']; $goods_extra_model->full_reduce_price_limit = $extra['full_reduce_price_limit']; $goods_extra_model->score_give_setting = $extra['score_give_setting']; $goods_extra_model->score_deduct_setting = $extra['score_deduct_setting']; $goods_extra_model->currency_deduct_setting = $extra['currency_deduct_setting']; $goods_extra_model->is_member_price = $extra['is_member_price']; $goods_extra_model->member_price_setting = $extra['member_price_setting']; $goods_extra_model->member_buy_limit_setting = $extra['member_buy_limit_setting']; $goods_extra_model->status = $extra['status']; $goods_extra_model->is_repurchase = $extra['is_repurchase']; $goods_extra_model->repurchase_setting = $extra['repurchase_setting']; $goods_extra_model->is_alone_settle = $extra['is_alone_settle']; $goods_extra_model->alone_settle_price = $extra['alone_settle_price']; $goods_extra_model->save(); } //关联商品 public static function syncGoodsAssociation($self_store_id, $source_store_id) { $now = time(); $i = 1; $sync_goods_logs_list = StoreSyncGoodsLogs::lists([ 'where' => [ ['self_store_id' => $self_store_id], ['source_store_id' => $source_store_id], ], 'index' => 'source_goods_id' ]); if (empty($sync_goods_logs_list)) { return true; } $page_size = 1000; while ($goods_list = GoodsAssociation::find() ->where(['store_id' => $source_store_id, 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]) ->offset(($i - 1) * $page_size)->orderBy('id asc')->asArray()->limit($page_size)->all()) { $type = 'GoodsAssociation'; $ids = array_column($goods_list, 'id'); $source_type_ids = StoreCommonSyncLogs::getTypeIds($self_store_id, $source_store_id, $type, $ids); foreach ($goods_list as &$item) { if (in_array($item['id'], $source_type_ids)) continue; for ($i = 1; $i < 11; $i++) { $item_name = 'extra' . $i . '_goods_id'; $extra_goods_id = json_decode($item[$item_name], true); if (!empty($extra_goods_id)) { $new_goods = []; foreach ($extra_goods_id as $goods_id) { if (isset($sync_goods_logs_list[$goods_id])) { $new_goods[] = $sync_goods_logs_list[$goods_id]['goods_id']; } } if ($new_goods) { $item[$item_name] = json_encode($new_goods); } } } $new_goods_id = $sync_goods_logs_list[$item['goods_id']]['goods_id']; if (empty($new_goods_id)) { continue; } $source_type_id = $item['id']; $model = new GoodsAssociation(); unset($item['id']); $model->attributes = $item; $model->store_id = $self_store_id; $model->goods_id = $new_goods_id; $model->save(); StoreCommonSyncLogs::add($self_store_id, $source_store_id, $source_type_id, $type, $model->id, $model->mall_id); } $i++; } } public static function syncStore($self_store_id, $source_store_id) { $select = [ 'mall_id', 'business_time_start', 'business_time_end', 'store_style', 'commission_authority', 'share_title', 'share_desc', 'share_pic', 'freight_type', 'intra_city_distribution', 'shop_status', 'scan_code_bind', 'pickup', 'is_show_wechat_video_number', 'is_show_coupon', // 'default_store_cate_style', // 'store_category_switch', 'show_sync_goods', 'payment_settlement_type' ]; $source_store_info = Store::find() ->where(['id' => $source_store_id]) ->select($select) ->asArray() ->one(); $model = Store::find() ->where(['id' => $self_store_id]) ->one(); $model->attributes = $source_store_info; $model->save(); } public static function syncStoreSettings($self_store_id, $source_store_id, $mall_id) { $type = 'StoreSettings'; $setting = StoreSettings::find() ->where(['store_id' => $source_store_id, 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]) ->asArray() ->one(); if (empty($setting)) { return true; } $source_type_id = $setting['id']; $source_type_ids = StoreCommonSyncLogs::getTypeIds($self_store_id, $source_store_id, $type, [$source_type_id]); if (in_array($source_type_id, $source_type_ids)) return true; $setting['store_id'] = $self_store_id; if ($setting['store_service_fee'] == 2) { $setting['store_service_fee'] = 0; $setting['huifu_mch_no'] = ''; } $model = new StoreSettings(); unset($setting['id'], $setting['is_customer'], $setting['customer_types']); $model->attributes = $setting; $model->save(); $addons_store_score_give_setting = Yii::$app->services->setting->addons->get($mall_id, StoreEnum::ADDONS_NAME, 'scoreGive'); $addons_store_payment_setting = Yii::$app->services->setting->addons->get($mall_id, StoreEnum::ADDONS_NAME, 'payment'); //积分赠送,如果指定门店包含了$source_store_id, $self_store_id也加进去 if ($addons_store_score_give_setting['store_limit_type'] && $addons_store_score_give_setting['store_limit_stores']) { $score_give_limit_store = json_decode($addons_store_score_give_setting['store_limit_stores'], true); if ($score_give_limit_store && in_array($source_store_id, $score_give_limit_store)) { array_push($score_give_limit_store, $self_store_id); } \Yii::$app->services->setting->addons->set($mall_id, StoreEnum::ADDONS_NAME, [ 'scoreGive' => [ 'store_limit_stores' => $score_give_limit_store ] ]); } //积分抵扣,如果指定门店包含了$source_store_id, $self_store_id也加进去 if ($addons_store_payment_setting['score_deduction']) { $score_deduction = json_decode($addons_store_payment_setting['score_deduction'], true); if ($score_deduction['store_limit_stores_deduction'] && $score_deduction['store_limit_type'] && isset($score_deduction['store_limit_stores_deduction'][$source_store_id])) { $score_deduction['store_limit_stores_deduction'][$self_store_id] = ''; \Yii::$app->services->setting->addons->set($mall_id, StoreEnum::ADDONS_NAME, [ 'payment' => [ 'score_deduction' => $score_deduction ] ]); } } StoreCommonSyncLogs::add($self_store_id, $source_store_id, $source_type_id, $type, $model->id, $model->mall_id); } public static function syncGoodsReserve($self_store_id, $source_store_id, $goods_id, $source_goods_id, $class) { $where[] = ['store_id' => $source_store_id]; $where[] = ['goods_id' => $source_goods_id]; $list = $class::lists([ 'where' => $where, 'order' => 'id asc', ]); foreach ($list as $item) { $model = new $class(); $item['store_id'] = $self_store_id; $item['goods_id'] = $goods_id; $model->attributes = $item; $model->save(); } } public static function syncSecondaryCard($self_store_id, $source_store_id, $mall_id) { $type = 'SecondaryCard'; $class = new \addons\SecondaryCard\common\models\SecondaryCard(); $list = $class::lists([ 'alias' => 'sc', 'where' => [ ['sc.mall_id' => $mall_id], [ 'or', ['sc.use_type' => 0], ['scrs.store_id' => $source_store_id, 'scrs.store_type' => 1] ] ], 'join' => [['left join', \addons\SecondaryCard\common\models\SecondaryCardRelateStore::tableName() . ' as scrs', 'sc.id = scrs.secondary_card_id']] ]); if (empty($list)) { return true; } $ids = array_column($list, 'id'); $source_type_ids = StoreCommonSyncLogs::getTypeIds($self_store_id, $source_store_id, $type, $ids); foreach ($list as $item) { if (in_array($item['id'], $source_type_ids)) continue; if ($item['create_source_type'] == 0) { continue; } $source_type_id = $item['id']; unset($item['id']); $model = new $class(); if ($item['create_source_type'] == 1) { $item['create_source_id'] = $self_store_id; } $item['is_on_sales'] = 0; $model->attributes = $item; $model->save(); StoreCommonSyncLogs::add($self_store_id, $source_store_id, $source_type_id, $type, $model->id, $model->mall_id); } } public static function syncSecondaryCardRelateStore($self_store_id, $source_store_id, $mall_id) { $type = 'SecondaryCardRelateStore'; $class = new \addons\SecondaryCard\common\models\SecondaryCardRelateStore(); $secondary_card_list = \addons\SecondaryCard\common\models\SecondaryCard::lists([ 'alias' => 'sc', 'where' => [ ['sc.mall_id' => $mall_id], [ 'or', ['sc.use_type' => 0], ['scrs.store_id' => $source_store_id, 'scrs.store_type' => 1] ] ], 'join' => [['left join', \addons\SecondaryCard\common\models\SecondaryCardRelateStore::tableName() . ' as scrs', 'sc.id = scrs.secondary_card_id']], 'index' => 'id' ]); if (empty($secondary_card_list)) { return true; } //获取已同步的次卡 $sync_list = StoreCommonSyncLogs::lists([ 'where' => [ ['type' => 'SecondaryCard'], ['self_store_id' => $self_store_id], ['source_store_id' => $source_store_id], ], 'index' => 'source_type_id' ]); $where = []; $where[] = ['store_id' => $source_store_id]; $where[] = ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]; $list = $class::lists([ 'where' => $where, 'order' => 'id asc', ]); if (empty($list)) { return true; } $ids = array_column($list, 'id'); $source_type_ids = StoreCommonSyncLogs::getTypeIds($self_store_id, $source_store_id, $type, $ids); foreach ($list as $item) { if (in_array($item['id'], $source_type_ids)) continue; if (!isset($secondary_card_list[$item['secondary_card_id']])) continue; $secondary_card = $secondary_card_list[$item['secondary_card_id']]; if ($secondary_card['create_source_type'] == 0) { $secondary_card_id = $secondary_card['id']; } else { if (!isset($sync_list[$item['secondary_card_id']]['type_id'])) continue; $secondary_card_id = $sync_list[$item['secondary_card_id']]['type_id']; } $source_type_id = $item['id']; unset($item['id']); $model = new $class(); $item['secondary_card_id'] = $secondary_card_id; $item['store_id'] = $self_store_id; $model->attributes = $item; $model->save(); StoreCommonSyncLogs::add($self_store_id, $source_store_id, $source_type_id, $type, $model->id, $model->mall_id); } } public static function syncStoreCashierExtra($self_store_id, $source_store_id, $mall_id) { $is_install_coupon = MallAddons::isInstall($mall_id, AddonsEnum::ADDONS_NAME_COUPON); StoreCashierExtra::updateAll([ 'status' => StatusEnum::DELETE ], [ 'store_id' => $self_store_id, 'mall_id' => $mall_id ]); $type = 'StoreCashierExtra'; $class = new StoreCashierExtra(); $where = []; $where[] = ['store_id' => $source_store_id]; $where[] = ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]; $list = $class::lists([ 'where' => $where, 'order' => 'id asc', ]); if (empty($list)) { return true; } $ids = array_column($list, 'id'); $source_type_ids = StoreCommonSyncLogs::getTypeIds($self_store_id, $source_store_id, $type, $ids); $limit_coupon_ids = []; foreach ($list as $item) { if (in_array($item['id'], $source_type_ids)) continue; if ($item['score_give_setting']) { $score_give_setting = json_decode($item['score_give_setting'], true); if ($score_give_setting['coupon_id']) { $limit_coupon_ids[] = $score_give_setting['coupon_id']; } } if ($item['score_deduct_setting']) { $score_give_setting = json_decode($item['score_deduct_setting'], true); if ($score_give_setting['coupon_id']) { $limit_coupon_ids[] = $score_give_setting['coupon_id']; } } $source_type_id = $item['id']; unset($item['id']); $model = new $class(); $item['store_id'] = $self_store_id; $model->attributes = $item; $model->save(); StoreCommonSyncLogs::add($self_store_id, $source_store_id, $source_type_id, $type, $model->id, $model->mall_id); } if ($is_install_coupon && $limit_coupon_ids) { //指定门店内容增加$self_store_id foreach ($limit_coupon_ids as $coupon_id) { $coupon_info = AddonsCoupon::find()->where(['id' => $coupon_id, 'mall_id' => $mall_id])->one(); if (empty($coupon_info)) { continue; } $store_id = $coupon_info->store_id; if ($store_id) { $store_id_array = explode(',', $store_id); array_push($store_id_array, $self_store_id); $store_id_array = implode(',', $store_id_array); $coupon_info->store_id = $store_id_array; $coupon_info->save(); } } } } public static function syncStoreBossAgentLevel($self_store_id, $source_store_id) { $type = 'StoreBossAgentLevel'; $class = new StoreBossAgentLevel(); $where = []; $where[] = ['store_id' => $source_store_id]; $where[] = ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]; $list = $class::lists([ 'where' => $where, 'order' => 'id asc', ]); if (empty($list)) { return true; } $ids = array_column($list, 'id'); $source_type_ids = StoreCommonSyncLogs::getTypeIds($self_store_id, $source_store_id, $type, $ids); $goods_ids = $self_good_list = []; foreach ($list as $item) { if ($item['upgrade_type_goods'] && $item['goods_type'] == 2 && json_decode($item['goods_warehouse_ids'], true)) { $tempArray = json_decode($item['goods_warehouse_ids'], true); $goods_ids = array_merge($goods_ids, $tempArray); } } if ($goods_ids) { $sync_goods_logs_list = StoreSyncGoodsLogs::lists([ 'where' => [ ['self_store_id' => $self_store_id], ['source_store_id' => $source_store_id], ['source_goods_id' => $goods_ids] ], ]); $self_good_ids = array_column($sync_goods_logs_list, 'goods_id'); $sync_goods_logs_id_list = array_column($sync_goods_logs_list, 'goods_id', 'source_goods_id'); $self_goods_list = StoreGoods::lists([ 'where' => [['id' => $self_good_ids], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]], 'select' => ['id', 'goods_name as name', 'cover_pic'], 'index' => 'id' ]); } foreach ($list as $item) { if (in_array($item['id'], $source_type_ids)) continue; $self_warehouse_insert_ids = $self_goods_insert_list = []; if ($item['upgrade_type_goods'] && $item['goods_type'] == 2 && json_decode($item['goods_warehouse_ids'], true)) { $goods_warehouse_ids = json_decode($item['goods_warehouse_ids']); foreach ($goods_warehouse_ids as $id) { if (isset($sync_goods_logs_id_list[$id])) { $self_warehouse_insert_ids[] = $sync_goods_logs_id_list[$id]; $self_goods_insert_list[] = $self_goods_list[$sync_goods_logs_id_list[$id]] ?? []; } } $item['goods_warehouse_ids'] = json_encode($self_warehouse_insert_ids); $item['goods_list'] = json_encode($self_goods_insert_list); } $source_type_id = $item['id']; unset($item['id']); $model = new $class(); $item['store_id'] = $self_store_id; $model->attributes = $item; $model->save(); StoreCommonSyncLogs::add($self_store_id, $source_store_id, $source_type_id, $type, $model->id, $model->mall_id); } } public static function updateStoreStatus($store_id, $status) { $model = Store::find() ->where(['id' => $store_id]) ->one(); $model->sync_status = $status; $model->save(); } public static function syncStoreExtra($self_store_id, $source_store_id) { $type = 'StoreExtra'; $where[] = ['store_id' => $source_store_id]; $where[] = ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]; $list = StoreExtra::lists([ 'where' => $where, 'order' => 'id asc', ]); if (empty($list)) { return true; } $ids = array_column($list, 'id'); $source_type_ids = StoreCommonSyncLogs::getTypeIds($self_store_id, $source_store_id, $type, $ids); $sync_coupon_list = StoreCommonSyncLogs::lists([ 'where' => [ ['type' => 'StoreCoupon'], ['self_store_id' => $self_store_id], ['source_store_id' => $source_store_id], ], 'index' => 'source_type_id' ]); foreach ($list as $item) { if (in_array($item['id'], $source_type_ids)) continue; $model = new StoreExtra(); $item['store_id'] = $self_store_id; $give_setting = json_decode($item['give_setting'], true); if ($give_setting) { if ($give_setting['coupon_give']['coupon_id1'] && isset($sync_coupon_list[$give_setting['coupon_give']['coupon_id1']]['type_id'])) { $give_setting['coupon_give']['coupon_id1'] = $sync_coupon_list[$give_setting['coupon_give']['coupon_id1']]['type_id']; } if ($give_setting['coupon_give']['coupon_id2'] && isset($sync_coupon_list[$give_setting['coupon_give']['coupon_id2']]['type_id'])) { $give_setting['coupon_give']['coupon_id2'] = $sync_coupon_list[$give_setting['coupon_give']['coupon_id2']]['type_id']; } $item['give_setting'] = json_encode($give_setting); } $source_type_id = $item['id']; unset($item['id']); $model->attributes = $item; $model->save(); StoreCommonSyncLogs::add($self_store_id, $source_store_id, $source_type_id, $type, $model->id, $model->mall_id); } } public static function syncStoreCoupon($self_store_id, $source_store_id) { $class = StoreCoupon::class; $type = 'StoreCoupon'; $where[] = ['store_id' => $source_store_id]; $where[] = ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]; $list = $class::lists([ 'where' => $where, 'order' => 'id asc', ]); if (empty($list)) { return true; } $ids = array_column($list, 'id'); $source_type_ids = StoreCommonSyncLogs::getTypeIds($self_store_id, $source_store_id, $type, $ids); foreach ($list as $item) { if (in_array($item['id'], $source_type_ids)) continue; $source_type_id = $item['id']; unset($item['id']); $model = new $class(); $item['store_id'] = $self_store_id; $item['is_open_screen'] = 0; $item['is_public_receive'] = 0; $model->attributes = $item; $model->save(); StoreCommonSyncLogs::add($self_store_id, $source_store_id, $source_type_id, $type, $model->id, $model->mall_id); } } public static function syncStoreCouponCatRelate($self_store_id, $source_store_id, $mall_id) { $class = StoreCouponCatRelate::class; $type = 'StoreCouponCatRelate'; //同步的优惠券 $sync_coupon_list = StoreCommonSyncLogs::lists([ 'where' => [ ['type' => 'StoreCoupon'], ['self_store_id' => $self_store_id], ['source_store_id' => $source_store_id], ], 'index' => 'source_type_id' ]); if (empty($sync_coupon_list)) { return true; } $coupon_id = array_column($sync_coupon_list, 'source_type_id'); $where[] = ['coupon_id' => $coupon_id]; $where[] = ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]; $list = $class::lists([ 'where' => $where, 'order' => 'id asc', ]); if (empty($list)) { return true; } $ids = array_column($list, 'id'); $source_type_ids = StoreCommonSyncLogs::getTypeIds($self_store_id, $source_store_id, $type, $ids); $cate_id = array_column($list, 'cate_id'); //同步的优惠券 $sync_cate_list = StoreCommonSyncLogs::lists([ 'where' => [ ['type' => 'GoodsCate'], ['self_store_id' => $self_store_id], ['source_store_id' => $source_store_id], ['source_type_id' => $cate_id], ], 'index' => 'source_type_id' ]); if (empty($sync_cate_list)) { return true; } foreach ($list as $item) { if (in_array($item['id'], $source_type_ids)) continue; $source_type_id = $item['id']; unset($item['id']); $new_cate_id = $sync_cate_list[$item['cate_id']]['type_id']; if (empty($new_cate_id)) { continue; } $new_coupon_id = $sync_coupon_list[$item['coupon_id']]['type_id']; if (empty($new_coupon_id)) { continue; } $model = new $class(); $item['coupon_id'] = $new_coupon_id; $item['cate_id'] = $new_cate_id; $model->attributes = $item; $model->save(); StoreCommonSyncLogs::add($self_store_id, $source_store_id, $source_type_id, $type, $model->id, $mall_id); } } public static function syncStoreCouponGoodsRelate($self_store_id, $source_store_id, $mall_id) { $class = StoreCouponGoodsRelate::class; $type = 'StoreCouponGoodsRelate'; //同步的优惠券 $sync_coupon_list = StoreCommonSyncLogs::lists([ 'where' => [ ['type' => 'StoreCoupon'], ['self_store_id' => $self_store_id], ['source_store_id' => $source_store_id], ], 'index' => 'source_type_id' ]); if (empty($sync_coupon_list)) { return true; } $coupon_id = array_column($sync_coupon_list, 'source_type_id'); $where[] = ['coupon_id' => $coupon_id]; $where[] = ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]; $list = $class::lists([ 'where' => $where, 'order' => 'id asc', ]); if (empty($list)) { return true; } $ids = array_column($list, 'id'); $source_type_ids = StoreCommonSyncLogs::getTypeIds($self_store_id, $source_store_id, $type, $ids); $goods_id = array_column($list, 'goods_id'); $sync_goods_logs_list = StoreSyncGoodsLogs::lists([ 'where' => [ ['self_store_id' => $self_store_id], ['source_store_id' => $source_store_id], ['source_goods_id' => $goods_id] ], 'index' => 'source_goods_id' ]); if (empty($sync_goods_logs_list)) { return true; } foreach ($list as $item) { if (in_array($item['id'], $source_type_ids)) continue; $source_type_id = $item['id']; unset($item['id']); $new_goods_id = $sync_goods_logs_list[$item['goods_id']]['goods_id']; if (empty($new_goods_id)) { continue; } $new_coupon_id = $sync_coupon_list[$item['coupon_id']]['type_id']; if (empty($new_coupon_id)) { continue; } $model = new $class(); $item['coupon_id'] = $new_coupon_id; $item['goods_id'] = $new_goods_id; $model->attributes = $item; $model->save(); StoreCommonSyncLogs::add($self_store_id, $source_store_id, $source_type_id, $type, $model->id, $mall_id); } } public static function syncDevoteGoodsSetting($self_store_id, $source_store_id, $goods_id, $source_goods_id, $class) { $type = 'DevoteGoodsSetting'; $where[] = ['goods_id' => $source_goods_id]; $where[] = ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]; $list = $class::lists([ 'where' => $where, 'order' => 'id asc', ]); if (empty($list)) { return true; } $ids = array_column($list, 'id'); $source_type_ids = StoreCommonSyncLogs::getTypeIds($self_store_id, $source_store_id, $type, $ids); foreach ($list as $item) { if (in_array($item['id'], $source_type_ids)) continue; $source_type_id = $item['id']; unset($item['id']); $model = new $class(); $item['goods_id'] = $goods_id; $item['store_id'] = $self_store_id; $model->attributes = $item; $model->save(); StoreCommonSyncLogs::add($self_store_id, $source_store_id, $source_type_id, $type, $model->id, $model->mall_id); } } public static function syncStoreGoodsModel($self_store_id, $source_store_id, $goods_id, $source_goods_id, $class) { $type = 'StoreGoodsModel'; $where[] = ['goods_id' => $source_goods_id]; $where[] = ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]; $list = $class::lists([ 'where' => $where, 'order' => 'id asc', ]); if (empty($list)) { return true; } $ids = array_column($list, 'id'); $source_type_ids = StoreCommonSyncLogs::getTypeIds($self_store_id, $source_store_id, $type, $ids); foreach ($list as $item) { if (in_array($item['id'], $source_type_ids)) continue; $source_type_id = $item['id']; unset($item['id']); $model = new $class(); $item['goods_id'] = $goods_id; $item['store_id'] = $self_store_id; $model->attributes = $item; $model->save(); StoreCommonSyncLogs::add($self_store_id, $source_store_id, $source_type_id, $type, $model->id, $model->mall_id); } } public static function syncStoreCouponGiveItemSetting($self_store_id, $source_store_id, $mall_id) { $type = 'StoreCouponGiveItemSetting'; $class = StoreCouponGiveItemSetting::class; $where[] = ['mall_id' => $mall_id]; $where[] = ['store_id' => $source_store_id]; $where[] = ['item_type' => 'goods']; $where[] = ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]; $list = $class::lists([ 'where' => $where, 'order' => 'id asc', ]); if (empty($list)) { return true; } $goods_id = array_column($list, 'item_id'); $sync_goods_logs_list = StoreSyncGoodsLogs::lists([ 'where' => [ ['self_store_id' => $self_store_id], ['source_store_id' => $source_store_id], ['source_goods_id' => $goods_id] ], 'index' => 'source_goods_id' ]); if (empty($sync_goods_logs_list)) { return true; } $ids = array_column($list, 'id'); $source_type_ids = StoreCommonSyncLogs::getTypeIds($self_store_id, $source_store_id, $type, $ids); $setting_ids = []; foreach ($list as $item) { if (in_array($item['id'], $source_type_ids)) continue; $source_type_id = $item['id']; unset($item['id']); $new_goods_id = $sync_goods_logs_list[$item['item_id']]['goods_id']; if (empty($new_goods_id)) { continue; } $setting_ids[] = $source_type_id; $model = new $class(); $item['store_id'] = $self_store_id; $item['item_id'] = $new_goods_id; $model->attributes = $item; $model->save(); StoreCommonSyncLogs::add($self_store_id, $source_store_id, $source_type_id, $type, $model->id, $model->mall_id); } if (!empty($setting_ids)) { self::syncStoreCouponGiveItemSettingDetail($self_store_id, $source_store_id, $mall_id, $setting_ids); } } public static function syncStoreCouponGiveItemSettingDetail($self_store_id, $source_store_id, $mall_id, $coupon_give_item_setting_id) { $type = 'StoreCouponGiveItemSettingDetail'; $class = StoreCouponGiveItemSettingDetail::class; $where[] = ['mall_id' => $mall_id]; $where[] = ['store_id' => $source_store_id]; $where[] = ['coupon_give_item_setting_id' => $coupon_give_item_setting_id]; $where[] = ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]; $list = $class::lists([ 'where' => $where, 'order' => 'id asc', ]); if (empty($list)) { return true; } //同步的优惠券项目 $sync_give_list = StoreCommonSyncLogs::lists([ 'where' => [ ['type' => 'StoreCouponGiveItemSetting'], ['self_store_id' => $self_store_id], ['source_store_id' => $source_store_id], ], 'index' => 'source_type_id' ]); if (empty($sync_give_list)) { return true; } //同步的优惠券 $sync_coupon_list = StoreCommonSyncLogs::lists([ 'where' => [ ['type' => 'StoreCoupon'], ['self_store_id' => $self_store_id], ['source_store_id' => $source_store_id], ], 'index' => 'source_type_id' ]); if (empty($sync_coupon_list)) { return true; } $ids = array_column($list, 'id'); $source_type_ids = StoreCommonSyncLogs::getTypeIds($self_store_id, $source_store_id, $type, $ids); foreach ($list as $item) { if (in_array($item['id'], $source_type_ids)) continue; $source_type_id = $item['id']; unset($item['id']); $new_coupon_give_item_setting_id = $sync_give_list[$item['coupon_give_item_setting_id']]['type_id']; if (empty($new_coupon_give_item_setting_id)) { continue; } $new_coupon_id = $sync_coupon_list[$item['coupon_id']]['type_id']; if (empty($new_coupon_id)) { continue; } $model = new $class(); $item['store_id'] = $self_store_id; $item['coupon_id'] = $new_coupon_id; $item['coupon_give_item_setting_id'] = $new_coupon_give_item_setting_id; $model->attributes = $item; $model->save(); StoreCommonSyncLogs::add($self_store_id, $source_store_id, $source_type_id, $type, $model->id, $model->mall_id); } } public static function syncStoreCouponMemberRelate($self_store_id, $source_store_id, $mall_id) { $type = 'StoreCouponMemberRelate'; $class = StoreCouponMemberRelate::class; //同步的优惠券 $sync_coupon_list = StoreCommonSyncLogs::lists([ 'where' => [ ['type' => 'StoreCoupon'], ['self_store_id' => $self_store_id], ['source_store_id' => $source_store_id], ], 'index' => 'source_type_id' ]); if (empty($sync_coupon_list)) { return true; } $coupon_id = array_column($sync_coupon_list, 'source_type_id'); $where[] = ['coupon_id' => $coupon_id]; $where[] = ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]; $list = $class::lists([ 'where' => $where, 'order' => 'id asc', ]); if (empty($list)) { return true; } $ids = array_column($list, 'id'); $source_type_ids = StoreCommonSyncLogs::getTypeIds($self_store_id, $source_store_id, $type, $ids); foreach ($list as $item) { if (in_array($item['id'], $source_type_ids)) continue; $source_type_id = $item['id']; unset($item['id']); $new_coupon_id = $sync_coupon_list[$item['coupon_id']]['type_id']; if (empty($new_coupon_id)) { continue; } $model = new $class(); $item['coupon_id'] = $new_coupon_id; $item['store_id'] = $self_store_id; $model->attributes = $item; $model->save(); StoreCommonSyncLogs::add($self_store_id, $source_store_id, $source_type_id, $type, $model->id, $mall_id); } } }