'onAfterSave', ActiveRecord::EVENT_AFTER_UPDATE => 'onAfterSave', ]; } public function onAfterSave(AfterSaveEvent $event) { /** @var ActiveRecord $model */ $model = $this->owner; if ($model->listend === false) { //根据总开关判断是否执行记录 return; } $oldBuyAmount = array_key_exists('buyAmount',$event->changedAttributes) ? $event->changedAttributes['buyAmount'] : $model->getAttribute('buyAmount'); $newBuyAmount = $model->getAttribute('buyAmount'); if (bccomp($newBuyAmount, $oldBuyAmount, 2) === 0) { return; } $buyAmountDelta = bcsub($newBuyAmount, $oldBuyAmount, 2); $shopId = $model->getAttribute('shopId'); $userId = $model->getAttribute('userId'); $userName = $model->getAttribute('name'); $relateId = $model->relateId; $relateType = $model->relateType; $eventRemark = isset($model->eventRemark) ? $model->eventRemark : ''; $staffId = isset($model->staffId) ? (int) $model->staffId : 0; $staffName = isset($model->staffName) ? trim((string) $model->staffName) : ''; //buyAmount变动记录 $consumeData = [ 'shopId' => $shopId, 'userId' => $userId, 'userName' => $userName, 'event' => $eventRemark, 'relateId' => $relateId, 'relateType' => $relateType, 'num' => $buyAmountDelta, 'buyAmount' => $newBuyAmount, 'staffId' => $staffId, //操作人(员工id) 'staffName' => $staffName, //员工名称 'createTime' => date('Y-m-d H:i:s'), ]; UserBuyAmountClass::add($consumeData); // 判断是否执行记录成功值与积分 if ($model->recordGrowthAndIntegral === false) { return; } $oldGrowth = array_key_exists('growth', $event->changedAttributes) ? $event->changedAttributes['growth'] : $model->getAttribute('growth'); // changedAttributes 里没有 growth 时,说明这次更新没改 growth,这时直接取模型当前值即可(它就等于旧值)。 $newGrowth = bcadd($oldGrowth, $buyAmountDelta, 2); $oldIntegral = array_key_exists('integral', $event->changedAttributes) ? $event->changedAttributes['integral'] : $model->getAttribute('integral'); $newIntegral = bcadd($oldIntegral, $buyAmountDelta, 2); $model::updateAll([ 'growth' => $newGrowth, 'integral' => $newIntegral, ], ['id' => $model->getPrimaryKey()]); $mainId = $model->mainId; if ($mainId > 0) { $memberData = CustomClass::getCustomExpenseLevel($newGrowth, $mainId); // 设置等级多处需要同步修改的,请搜索:getCustomExpenseLevel $model::updateAll([ 'member' => (int) ($memberData['level'] ?? 0), 'memberName' => (string) ($memberData['name'] ?? ''), ], ['id' => $model->getPrimaryKey()]); }else{ throw new \Exception('mainId is required'); } if ($buyAmountDelta == 0 || $buyAmountDelta == 0.00) { return; } $createTime = date('Y-m-d H:i:s'); //成长值变动记录 $growthData = [ 'shopId' => $shopId, 'userId' => $userId, 'userName' => $userName, 'event' => $eventRemark !== '' ? $eventRemark : '累计消费变更同步成长值', 'relateId' => $relateId, 'relateType' => $relateType, 'num' => $buyAmountDelta, 'growth' => $newGrowth, 'staffId' => $staffId, //操作人(员工id) 'staffName' => $staffName, //员工名称 'createTime' => $createTime, ]; UserGrowthClass::add($growthData); //积分变动记录 $integralData = [ 'shopId' => $shopId, 'userId' => $userId, 'userName' => $userName, 'event' => $eventRemark !== '' ? $eventRemark : '累计消费变更同步积分', 'relateId' => $relateId, 'relateType' => $relateType, 'num' => $buyAmountDelta, 'integral' => $newIntegral, 'staffId' => $staffId, //操作人(员工id) 'staffName' => $staffName, //员工名称 'createTime' => $createTime, ]; UserIntegralClass::add($integralData); } }