| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- <?php
- namespace app\jobs\storeSync;
- use app\models\StoreSyncExtLog;
- use app\models\WorkerCat;
- use app\models\WorkerGoodsCat;
- use app\models\WorkerGoodsExt;
- use app\models\WorkerLevel;
- use yii\base\BaseObject;
- use yii\queue\JobInterface;
- //服务人员
- class WorkerConfigJob extends BaseObject implements JobInterface
- {
- 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;
- foreach ($to_store_id as $store_id_item) {
- //商品分类
- $cat_cache = $this->workerGoodsCat($from_store_id, $store_id_item);
- //商品列表
- $goods_result = $this->workerGoods($from_store_id, $store_id_item, $cat_cache);
- //服务分类
- $worker_cat_result = $this->workerCat($from_store_id, $store_id_item);
- //服务等级
- $worker_level_result = $this->workerLevel($from_store_id, $store_id_item);
- }
- }
- //商品分类
- private function workerGoodsCat($fromStoreId, $toId) {
- try {
- $cat_cache = [];
- $goods_cat_ = WorkerGoodsCat::find()->where(['store_id' => $fromStoreId])->asArray()->all();
- foreach ($goods_cat_ as $goods_cat_item) {
- $id = $goods_cat_item['id'];
- unset($goods_cat_item['id']);
- //判断是否为当前商城同步过此商品
- $storeSyncExtLog = StoreSyncExtLog::findOne([
- 'from_store_id' => $fromStoreId,
- 'to_store_id' => $toId,
- 'type' => StoreSyncExtLog::TYPE_WORKER_CONFIG_GOODS_CAT,
- 'from_id' => $id
- ]);
- $goods_cat = WorkerGoodsCat::findOne($storeSyncExtLog->to_id ?? 0) ?: new WorkerGoodsCat();
- $goods_cat->attributes = $goods_cat_item;
- $goods_cat->store_id = $toId;
- $goods_cat->created_at = time();
- $goods_cat->updated_at = time();
- $goods_cat->name = $goods_cat_item['name'];
- $goods_cat->pic_url = $goods_cat_item['pic_url'];
- $goods_cat->is_show = $goods_cat_item['is_show'];
- $goods_cat->big_pic_url = $goods_cat_item['big_pic_url'];
- $goods_cat->advert_pic = $goods_cat_item['advert_pic'];
- $goods_cat->advert_url = $goods_cat_item['advert_url'];
- $goods_cat->is_delete = $goods_cat_item['is_delete'];
- if (!$goods_cat->save()) {
- throw new \Exception(json_encode($goods_cat->errors, JSON_UNESCAPED_UNICODE));
- }
- $cat_cache[$id] = $goods_cat->id;
- (new StoreSyncExtLog())::handleData($fromStoreId, $toId, $id, $goods_cat->id, StoreSyncExtLog::TYPE_WORKER_CONFIG_GOODS_CAT);
- }
- return $cat_cache;
- } catch (\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- private function workerGoods($fromStoreId, $toId, $cat_cache) {
- $t = \Yii::$app->db->beginTransaction();
- try {
- $workGoodsCache = [];
- $worker_goods_list = WorkerGoodsExt::find()->where(['store_id' => $fromStoreId])->asArray()->all();
- foreach ($worker_goods_list as $goods_item) {
- $storeSyncExtLog = StoreSyncExtLog::findOne([
- 'from_store_id' => $fromStoreId,
- 'to_store_id' => $toId,
- 'type' => StoreSyncExtLog::TYPE_PRODUCT,
- 'from_id' => $goods_item['goods_id']
- ]);
- if ($storeSyncExtLog && !$storeSyncExtLog->to_id) {
- continue;
- }
- $goods_id = $storeSyncExtLog->to_id;
- $cat_id = $cat_cache[$goods_item['cat_id']];
- if (!empty($goods_id) && !empty($cat_id)) {
- $workGoodsId = $goods_item['id'];
- $workGoodsCache[$workGoodsId] = 0;
- unset($goods_item['id']);
- //判断是否为当前商城同步过此商品
- $storeSyncExtLog = StoreSyncExtLog::findOne([
- 'from_store_id' => $fromStoreId,
- 'to_store_id' => $toId,
- 'type' => StoreSyncExtLog::TYPE_WORKER_CONFIG_GOODS,
- 'from_id' => $workGoodsId
- ]);
- $worker_goods = WorkerGoodsExt::findOne($storeSyncExtLog->to_id ?? 0) ?: new WorkerGoodsExt();
- $worker_goods->attributes = $goods_item;
- $worker_goods->payment_type = $goods_item['payment_type'];
- $worker_goods->profit_base = $goods_item['profit_base'];
- $worker_goods->profit_max = $goods_item['profit_max'];
- $worker_goods->final_profit = $goods_item['profit_max'];
- $worker_goods->desc = $goods_item['desc'];
- $worker_goods->warn = $goods_item['warn'];
- $worker_goods->bind_worker = $goods_item['bind_worker'];
- $worker_goods->goods_id = $goods_id;
- $worker_goods->cat_id = $cat_id;
- $worker_goods->store_id = $toId;
- if (!$worker_goods->save()) {
- throw new \Exception(json_encode($worker_goods->errors, JSON_UNESCAPED_UNICODE));
- }
- $workGoodsCache[$workGoodsId] = $worker_goods->id;
- (new StoreSyncExtLog())::handleData($fromStoreId, $toId, $workGoodsId, $worker_goods->id, StoreSyncExtLog::TYPE_WORKER_CONFIG_GOODS);
- }
- }
- $t->commit();
- return $workGoodsCache;
- } catch (\Exception $e) {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- private function workerCat($fromStoreId, $toId) {
- try {
- $workerCatCache = [];
- $worker_cat_list = WorkerCat::find()->where(['store_id' => $fromStoreId])->asArray()->all();
- foreach ($worker_cat_list as $item) {
- $workerCatId = $item['id'];
- $workerCatCache[$workerCatId] = 0;
- unset($item['id']);
- //判断是否为当前商城同步过此商品
- $storeSyncExtLog = StoreSyncExtLog::findOne([
- 'from_store_id' => $fromStoreId,
- 'to_store_id' => $toId,
- 'type' => StoreSyncExtLog::TYPE_WORKER_CONFIG_CAT,
- 'from_id' => $workerCatId
- ]);
- $worker_cat = WorkerCat::findOne($storeSyncExtLog->to_id ?? 0) ?: new WorkerCat();
- $worker_cat->attributes = $item;
- $worker_cat->store_id = $toId;
- $worker_cat->created_at = time();
- $worker_cat->updated_at = time();
- $worker_cat->is_delete = $item['is_delete'];
- if (!$worker_cat->save()) {
- throw new \Exception(json_encode($worker_cat->errors, JSON_UNESCAPED_UNICODE));
- }
- $workerCatCache[$workerCatId] = $worker_cat->id;
- (new StoreSyncExtLog())::handleData($fromStoreId, $toId, $workerCatId, $worker_cat->id, StoreSyncExtLog::TYPE_WORKER_CONFIG_CAT);
- }
- return $workerCatCache;
- } catch (\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- //同步等级
- private function workerLevel($from_store_id, $to_store_id) {
- try {
- $workerLevelList = WorkerLevel::find()->where(['store_id' => $from_store_id, 'is_delete' => 0])->asArray()->all();
- foreach ($workerLevelList as $item) {
- $workerLevelId = $item['id'];
- $worker_level = WorkerLevel::findOne(['store_id' => $to_store_id, 'is_delete' => 0, 'level' => $item['level']]);
- if (!$worker_level) {
- $worker_level = new WorkerLevel();
- }
- unset($item['id']);
- $worker_level->attributes = $item;
- $worker_level->store_id = $to_store_id;
- if (!$worker_level->save()) {
- return [
- 'code' => 1,
- 'msg' => json_encode($worker_level->errors, JSON_UNESCAPED_UNICODE)
- ];
- };
- (new StoreSyncExtLog())::handleData($from_store_id, $to_store_id, $workerLevelId, $worker_level->id, StoreSyncExtLog::TYPE_WORKER_CONFIG_LEVEL);
- }
- return [
- 'code' => 0,
- 'msg' => '同步成功'
- ];
- } catch (\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- }
|