| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426 |
- <?php
- namespace addons\Store\common\logic;
- use addons\Store\common\enums\StoreEnum;
- use common\enums\StatusEnum;
- use addons\Store\common\models\Store;
- use addons\Store\common\models\StoreGoodsCate;
- use addons\Store\common\models\StoreCommonSyncLogs;
- use addons\Store\common\models\StoreGoods;
- use addons\Store\common\models\StoreSyncGoodsLogs;
- use addons\Store\common\models\StoreGoodsCateRelate;
- use addons\Store\common\models\StoreGoodsAttr;
- use addons\Store\common\models\StoreGoodsExtra;
- use addons\Store\common\models\StoreNotice;
- use addons\Store\common\models\StoreModel;
- use addons\Store\common\models\StoreFreightRules;
- use addons\Store\common\models\StoreSettings;
- use addons\Store\common\models\StoreCashierExtra;
- use addons\Store\common\models\StoreGoodsReserve;
- use addons\Store\common\models\StoreGoodsReserveSku;
- use addons\Store\common\models\StoreReserveSetting;
- use addons\Store\common\models\StoreExtra;
- use addons\Store\common\models\StoreBossAgentSetting;
- use addons\Store\common\models\StoreBossAgentLevel;
- use addons\Store\common\models\StoreCoupon;
- use addons\Store\common\models\StoreCouponGoodsRelate;
- use addons\Store\common\models\StoreCouponCatRelate;
- use addons\Store\common\models\StoreCouponGiveItemSetting;
- use addons\Store\common\models\StoreCouponGiveItemSettingDetail;
- use addons\Store\common\models\StoreCouponMemberRelate;
- use common\models\goods\GoodsAssociation;
- use common\models\goods\GoodsSpecs;
- use addons\Store\common\models\StoreGoodsModel;
- use addons\Store\common\events\goods\GoodsEditEvent;
- use common\enums\AddonsEnum;
- use common\models\mall\MallAddons;
- use Yii;
- use addons\Store\addons\Verification\common\models\StoreVerificationSetting;
- use addons\Store\addons\Verification\common\models\StoreVerificationCoupons;
- use addons\Coupon\common\models\AddonsCoupon;
- class StoreCreateSync
- {
- public function synStoreData($params)
- {
- if (empty($params['self_store_id'])) return true;
- $before_model = Store::find()
- ->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);
- }
- }
- }
|