| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- <?php
- namespace addons\OperationCenter\common\services;
- use addons\OperationCenter\common\models\Level;
- use addons\OperationCenter\common\models\MallOrder;
- use addons\OperationCenter\common\models\UpgradeLog;
- use addons\OperationCenter\common\models\UserCenter;
- use common\enums\AddonsEnum;
- use common\logic\common\BuyGoodsUpgrade;
- use common\logic\common\ConditionUpgrade;
- use Exception;
- use Yii;
- /**
- * UpgradeService
- * @package addons\OperationCenter\common\services
- */
- class UpgradeService extends BaseService
- {
- /**
- * 支付完成
- */
- const PAY = 0;
- /**
- * 订单完成
- */
- const FINISH = 1;
- /**
- * @var MallOrder
- */
- protected $order;
- /**
- * @var array
- */
- protected $upgradeLevel;
- /**
- * @var int
- */
- protected $isFinish;
- /**
- * @var array[Level]
- */
- protected $levelLists;
- /**
- * @return void
- */
- public function initLevel(MallOrder $order, int $is_finish)
- {
- $this->order = $order;
- $this->isFinish = $is_finish;
- }
- /**
- * 检测升级
- *
- * @param MallOrder $order
- * @return void
- */
- public function checkUpgrade(MallOrder $order, int $is_finish = 0)
- {
- /* // 触发购物升级
- $order = $order->toArray();
- $upgrade = new BuyGoodsUpgrade();
- $buy_uid = $upgrade->execute(
- AddonsEnum::ADDONS_NAME_OPERATION_CENTER, (new UserCenter()), (new Level()), $order
- );
- if (!empty($buy_uid)) $upgrade_uids[] = $buy_uid;
- // 触发条件升级
- $cond_upgrade = new ConditionUpgrade();
- $cond_uids = $cond_upgrade->execute(
- AddonsEnum::ADDONS_NAME_OPERATION_CENTER, (new UserCenter()), (new Level()), $order
- ); */
- $this->initLevel($order, $is_finish);
- // 购买商品升级
- $this->setUpgradeLevel(
- $this->checkBuyGoodsUpgrade(),
- UpgradeLog::GOODS
- );
- // 满足条件升级
- $this->setUpgradeLevel(
- $this->checkConditionUpgrade(),
- UpgradeLog::CONDITION
- );
- $this->upgradeLevel();
- }
- /**
- * 购买商品
- *
- * @return Level|false
- */
- public function checkBuyGoodsUpgrade()
- {
- $center = $this->order->center;
- if (empty($center)) return false;
- // 等级
- $levels = $this->getLevels($center);
- // 订单详情
- $details = $this->order->detail;
- foreach ($details as $detail) {
- foreach ($levels as $item) {
- /**
- * @var Level
- */
- $item = $item;
- if (
- // 开启自动升级
- $item->hasUpgrade() &&
- // 开启购物升级
- $item->openGoodsUpgrade() &&
- // 是否订单完成 或者支付完成
- $item->buyGoodsType($this->isFinish) &&
- // 是否指定商品
- $item->isUpgradeGoods($detail->goods_id)
- ) {
- return $item;
- }
- }
- }
- return false;
- }
- /**
- * 条件
- *
- * @return Level|false
- */
- public function checkConditionUpgrade()
- {
- return false;
- }
- /**
- * @param UserCenter $center
- * @return array
- */
- protected function getLevels(UserCenter $center)
- {
- if (!empty($this->levelList)) return $this->levelList;
- return Level::getLevelByGtLevel($this->mall_id, $center->level);
- }
- /**
- * 设置Level
- *
- * @param Level|false $level
- * @return void
- */
- protected function setUpgradeLevel($level, int $type)
- {
- $this->upgradeLevel[$type] = $level;
- }
- /**
- * 获取升级
- *
- * @return array
- */
- protected function getUpgradeLevel()
- {
- $level = null;
- $type = null;
- foreach ($this->upgradeLevel as $level1) {
- foreach ($this->upgradeLevel as $type => $level2) {
- if ($level2 && ($level1 == false)) {
- $level = $level2;
- $type = $type;
- }
- if ($level2 && $level1 && $level2->level > $level1->level) {
- $level = $level2;
- $type = $type;
- }
- }
- }
- return [$level, $type];
- }
- /**
- * 升级
- *
- * @return void
- */
- protected function upgradeLevel()
- {
- list($level, $type) = $this->getUpgradeLevel();
- if ($level) {
- /**
- * @var UserCenter
- */
- $center = $this->order->center;
- $t = Yii::$app->db->beginTransaction();
- try {
- $center->setLevel($level);
- UpgradeLog::addUpgradeLog(
- $this->mall_id, $center->user_id, $level->id, $type
- );
- } catch (Exception $e) {
- $t->rollBack();
- Yii::error('升级失败, 订单ID: %s', $this->order->id);
- }
- $t->commit();
- }
- }
- }
|