| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- <?php
- namespace bizHd\custom\observers;
- use bizHd\custom\classes\CustomClass;
- use bizHd\user\classes\UserIntegralClass;
- use yii\base\Behavior;
- use yii\db\ActiveRecord;
- use yii\db\AfterSaveEvent;
- use bizHd\user\classes\UserGrowthClass;
- use bizHd\custom\classes\UserBuyAmountClass;
- class BuyAmountObserver extends Behavior
- {
- public function events()
- {
- return [
- ActiveRecord::EVENT_AFTER_INSERT => '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);
- }
- }
|