WorkerConfigJob.php 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. <?php
  2. namespace app\jobs\storeSync;
  3. use app\models\StoreSyncExtLog;
  4. use app\models\WorkerCat;
  5. use app\models\WorkerGoodsCat;
  6. use app\models\WorkerGoodsExt;
  7. use app\models\WorkerLevel;
  8. use yii\base\BaseObject;
  9. use yii\queue\JobInterface;
  10. //服务人员
  11. class WorkerConfigJob extends BaseObject implements JobInterface
  12. {
  13. public array $to_store_id;
  14. public int $from_store_id;
  15. public function execute($queue)
  16. {
  17. // TODO: Implement execute() method.
  18. $from_store_id = $this->from_store_id;
  19. $to_store_id = $this->to_store_id;
  20. foreach ($to_store_id as $store_id_item) {
  21. //商品分类
  22. $cat_cache = $this->workerGoodsCat($from_store_id, $store_id_item);
  23. //商品列表
  24. $goods_result = $this->workerGoods($from_store_id, $store_id_item, $cat_cache);
  25. //服务分类
  26. $worker_cat_result = $this->workerCat($from_store_id, $store_id_item);
  27. //服务等级
  28. $worker_level_result = $this->workerLevel($from_store_id, $store_id_item);
  29. }
  30. }
  31. //商品分类
  32. private function workerGoodsCat($fromStoreId, $toId) {
  33. try {
  34. $cat_cache = [];
  35. $goods_cat_ = WorkerGoodsCat::find()->where(['store_id' => $fromStoreId])->asArray()->all();
  36. foreach ($goods_cat_ as $goods_cat_item) {
  37. $id = $goods_cat_item['id'];
  38. unset($goods_cat_item['id']);
  39. //判断是否为当前商城同步过此商品
  40. $storeSyncExtLog = StoreSyncExtLog::findOne([
  41. 'from_store_id' => $fromStoreId,
  42. 'to_store_id' => $toId,
  43. 'type' => StoreSyncExtLog::TYPE_WORKER_CONFIG_GOODS_CAT,
  44. 'from_id' => $id
  45. ]);
  46. $goods_cat = WorkerGoodsCat::findOne($storeSyncExtLog->to_id ?? 0) ?: new WorkerGoodsCat();
  47. $goods_cat->attributes = $goods_cat_item;
  48. $goods_cat->store_id = $toId;
  49. $goods_cat->created_at = time();
  50. $goods_cat->updated_at = time();
  51. $goods_cat->name = $goods_cat_item['name'];
  52. $goods_cat->pic_url = $goods_cat_item['pic_url'];
  53. $goods_cat->is_show = $goods_cat_item['is_show'];
  54. $goods_cat->big_pic_url = $goods_cat_item['big_pic_url'];
  55. $goods_cat->advert_pic = $goods_cat_item['advert_pic'];
  56. $goods_cat->advert_url = $goods_cat_item['advert_url'];
  57. $goods_cat->is_delete = $goods_cat_item['is_delete'];
  58. if (!$goods_cat->save()) {
  59. throw new \Exception(json_encode($goods_cat->errors, JSON_UNESCAPED_UNICODE));
  60. }
  61. $cat_cache[$id] = $goods_cat->id;
  62. (new StoreSyncExtLog())::handleData($fromStoreId, $toId, $id, $goods_cat->id, StoreSyncExtLog::TYPE_WORKER_CONFIG_GOODS_CAT);
  63. }
  64. return $cat_cache;
  65. } catch (\Exception $e) {
  66. return [
  67. 'code' => 1,
  68. 'msg' => $e->getMessage()
  69. ];
  70. }
  71. }
  72. private function workerGoods($fromStoreId, $toId, $cat_cache) {
  73. $t = \Yii::$app->db->beginTransaction();
  74. try {
  75. $workGoodsCache = [];
  76. $worker_goods_list = WorkerGoodsExt::find()->where(['store_id' => $fromStoreId])->asArray()->all();
  77. foreach ($worker_goods_list as $goods_item) {
  78. $storeSyncExtLog = StoreSyncExtLog::findOne([
  79. 'from_store_id' => $fromStoreId,
  80. 'to_store_id' => $toId,
  81. 'type' => StoreSyncExtLog::TYPE_PRODUCT,
  82. 'from_id' => $goods_item['goods_id']
  83. ]);
  84. if ($storeSyncExtLog && !$storeSyncExtLog->to_id) {
  85. continue;
  86. }
  87. $goods_id = $storeSyncExtLog->to_id;
  88. $cat_id = $cat_cache[$goods_item['cat_id']];
  89. if (!empty($goods_id) && !empty($cat_id)) {
  90. $workGoodsId = $goods_item['id'];
  91. $workGoodsCache[$workGoodsId] = 0;
  92. unset($goods_item['id']);
  93. //判断是否为当前商城同步过此商品
  94. $storeSyncExtLog = StoreSyncExtLog::findOne([
  95. 'from_store_id' => $fromStoreId,
  96. 'to_store_id' => $toId,
  97. 'type' => StoreSyncExtLog::TYPE_WORKER_CONFIG_GOODS,
  98. 'from_id' => $workGoodsId
  99. ]);
  100. $worker_goods = WorkerGoodsExt::findOne($storeSyncExtLog->to_id ?? 0) ?: new WorkerGoodsExt();
  101. $worker_goods->attributes = $goods_item;
  102. $worker_goods->payment_type = $goods_item['payment_type'];
  103. $worker_goods->profit_base = $goods_item['profit_base'];
  104. $worker_goods->profit_max = $goods_item['profit_max'];
  105. $worker_goods->final_profit = $goods_item['profit_max'];
  106. $worker_goods->desc = $goods_item['desc'];
  107. $worker_goods->warn = $goods_item['warn'];
  108. $worker_goods->bind_worker = $goods_item['bind_worker'];
  109. $worker_goods->goods_id = $goods_id;
  110. $worker_goods->cat_id = $cat_id;
  111. $worker_goods->store_id = $toId;
  112. if (!$worker_goods->save()) {
  113. throw new \Exception(json_encode($worker_goods->errors, JSON_UNESCAPED_UNICODE));
  114. }
  115. $workGoodsCache[$workGoodsId] = $worker_goods->id;
  116. (new StoreSyncExtLog())::handleData($fromStoreId, $toId, $workGoodsId, $worker_goods->id, StoreSyncExtLog::TYPE_WORKER_CONFIG_GOODS);
  117. }
  118. }
  119. $t->commit();
  120. return $workGoodsCache;
  121. } catch (\Exception $e) {
  122. $t->rollBack();
  123. return [
  124. 'code' => 1,
  125. 'msg' => $e->getMessage()
  126. ];
  127. }
  128. }
  129. private function workerCat($fromStoreId, $toId) {
  130. try {
  131. $workerCatCache = [];
  132. $worker_cat_list = WorkerCat::find()->where(['store_id' => $fromStoreId])->asArray()->all();
  133. foreach ($worker_cat_list as $item) {
  134. $workerCatId = $item['id'];
  135. $workerCatCache[$workerCatId] = 0;
  136. unset($item['id']);
  137. //判断是否为当前商城同步过此商品
  138. $storeSyncExtLog = StoreSyncExtLog::findOne([
  139. 'from_store_id' => $fromStoreId,
  140. 'to_store_id' => $toId,
  141. 'type' => StoreSyncExtLog::TYPE_WORKER_CONFIG_CAT,
  142. 'from_id' => $workerCatId
  143. ]);
  144. $worker_cat = WorkerCat::findOne($storeSyncExtLog->to_id ?? 0) ?: new WorkerCat();
  145. $worker_cat->attributes = $item;
  146. $worker_cat->store_id = $toId;
  147. $worker_cat->created_at = time();
  148. $worker_cat->updated_at = time();
  149. $worker_cat->is_delete = $item['is_delete'];
  150. if (!$worker_cat->save()) {
  151. throw new \Exception(json_encode($worker_cat->errors, JSON_UNESCAPED_UNICODE));
  152. }
  153. $workerCatCache[$workerCatId] = $worker_cat->id;
  154. (new StoreSyncExtLog())::handleData($fromStoreId, $toId, $workerCatId, $worker_cat->id, StoreSyncExtLog::TYPE_WORKER_CONFIG_CAT);
  155. }
  156. return $workerCatCache;
  157. } catch (\Exception $e) {
  158. return [
  159. 'code' => 1,
  160. 'msg' => $e->getMessage()
  161. ];
  162. }
  163. }
  164. //同步等级
  165. private function workerLevel($from_store_id, $to_store_id) {
  166. try {
  167. $workerLevelList = WorkerLevel::find()->where(['store_id' => $from_store_id, 'is_delete' => 0])->asArray()->all();
  168. foreach ($workerLevelList as $item) {
  169. $workerLevelId = $item['id'];
  170. $worker_level = WorkerLevel::findOne(['store_id' => $to_store_id, 'is_delete' => 0, 'level' => $item['level']]);
  171. if (!$worker_level) {
  172. $worker_level = new WorkerLevel();
  173. }
  174. unset($item['id']);
  175. $worker_level->attributes = $item;
  176. $worker_level->store_id = $to_store_id;
  177. if (!$worker_level->save()) {
  178. return [
  179. 'code' => 1,
  180. 'msg' => json_encode($worker_level->errors, JSON_UNESCAPED_UNICODE)
  181. ];
  182. };
  183. (new StoreSyncExtLog())::handleData($from_store_id, $to_store_id, $workerLevelId, $worker_level->id, StoreSyncExtLog::TYPE_WORKER_CONFIG_LEVEL);
  184. }
  185. return [
  186. 'code' => 0,
  187. 'msg' => '同步成功'
  188. ];
  189. } catch (\Exception $e) {
  190. return [
  191. 'code' => 1,
  192. 'msg' => $e->getMessage()
  193. ];
  194. }
  195. }
  196. }