BuyAmountObserver.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. namespace bizHd\custom\observers;
  3. use bizHd\custom\classes\CustomClass;
  4. use bizHd\user\classes\UserIntegralClass;
  5. use yii\base\Behavior;
  6. use yii\db\ActiveRecord;
  7. use yii\db\AfterSaveEvent;
  8. use bizHd\user\classes\UserGrowthClass;
  9. use bizHd\custom\classes\UserBuyAmountClass;
  10. class BuyAmountObserver extends Behavior
  11. {
  12. public function events()
  13. {
  14. return [
  15. ActiveRecord::EVENT_AFTER_INSERT => 'onAfterSave',
  16. ActiveRecord::EVENT_AFTER_UPDATE => 'onAfterSave',
  17. ];
  18. }
  19. public function onAfterSave(AfterSaveEvent $event)
  20. {
  21. /** @var ActiveRecord $model */
  22. $model = $this->owner;
  23. if ($model->listend === false) { //根据总开关判断是否执行记录
  24. return;
  25. }
  26. $oldBuyAmount = array_key_exists('buyAmount',$event->changedAttributes) ? $event->changedAttributes['buyAmount'] : $model->getAttribute('buyAmount');
  27. $newBuyAmount = $model->getAttribute('buyAmount');
  28. if (bccomp($newBuyAmount, $oldBuyAmount, 2) === 0) {
  29. return;
  30. }
  31. $buyAmountDelta = bcsub($newBuyAmount, $oldBuyAmount, 2);
  32. $shopId = $model->getAttribute('shopId');
  33. $userId = $model->getAttribute('userId');
  34. $userName = $model->getAttribute('name');
  35. $relateId = $model->relateId;
  36. $relateType = $model->relateType;
  37. $eventRemark = isset($model->eventRemark) ? $model->eventRemark : '';
  38. $staffId = isset($model->staffId) ? (int) $model->staffId : 0;
  39. $staffName = isset($model->staffName) ? trim((string) $model->staffName) : '';
  40. //buyAmount变动记录
  41. $consumeData = [
  42. 'shopId' => $shopId,
  43. 'userId' => $userId,
  44. 'userName' => $userName,
  45. 'event' => $eventRemark,
  46. 'relateId' => $relateId,
  47. 'relateType' => $relateType,
  48. 'num' => $buyAmountDelta,
  49. 'buyAmount' => $newBuyAmount,
  50. 'staffId' => $staffId, //操作人(员工id)
  51. 'staffName' => $staffName, //员工名称
  52. 'createTime' => date('Y-m-d H:i:s'),
  53. ];
  54. UserBuyAmountClass::add($consumeData);
  55. // 判断是否执行记录成功值与积分
  56. if ($model->recordGrowthAndIntegral === false) {
  57. return;
  58. }
  59. $oldGrowth = array_key_exists('growth', $event->changedAttributes)
  60. ? $event->changedAttributes['growth']
  61. : $model->getAttribute('growth'); // changedAttributes 里没有 growth 时,说明这次更新没改 growth,这时直接取模型当前值即可(它就等于旧值)。
  62. $newGrowth = bcadd($oldGrowth, $buyAmountDelta, 2);
  63. $oldIntegral = array_key_exists('integral', $event->changedAttributes)
  64. ? $event->changedAttributes['integral']
  65. : $model->getAttribute('integral');
  66. $newIntegral = bcadd($oldIntegral, $buyAmountDelta, 2);
  67. $model::updateAll([
  68. 'growth' => $newGrowth,
  69. 'integral' => $newIntegral,
  70. ], ['id' => $model->getPrimaryKey()]);
  71. $mainId = $model->mainId;
  72. if ($mainId > 0) {
  73. $memberData = CustomClass::getCustomExpenseLevel($newGrowth, $mainId); // 设置等级多处需要同步修改的,请搜索:getCustomExpenseLevel
  74. $model::updateAll([
  75. 'member' => (int) ($memberData['level'] ?? 0),
  76. 'memberName' => (string) ($memberData['name'] ?? ''),
  77. ], ['id' => $model->getPrimaryKey()]);
  78. }else{
  79. throw new \Exception('mainId is required');
  80. }
  81. if ($buyAmountDelta == 0 || $buyAmountDelta == 0.00) {
  82. return;
  83. }
  84. $createTime = date('Y-m-d H:i:s');
  85. //成长值变动记录
  86. $growthData = [
  87. 'shopId' => $shopId,
  88. 'userId' => $userId,
  89. 'userName' => $userName,
  90. 'event' => $eventRemark !== '' ? $eventRemark : '累计消费变更同步成长值',
  91. 'relateId' => $relateId,
  92. 'relateType' => $relateType,
  93. 'num' => $buyAmountDelta,
  94. 'growth' => $newGrowth,
  95. 'staffId' => $staffId, //操作人(员工id)
  96. 'staffName' => $staffName, //员工名称
  97. 'createTime' => $createTime,
  98. ];
  99. UserGrowthClass::add($growthData);
  100. //积分变动记录
  101. $integralData = [
  102. 'shopId' => $shopId,
  103. 'userId' => $userId,
  104. 'userName' => $userName,
  105. 'event' => $eventRemark !== '' ? $eventRemark : '累计消费变更同步积分',
  106. 'relateId' => $relateId,
  107. 'relateType' => $relateType,
  108. 'num' => $buyAmountDelta,
  109. 'integral' => $newIntegral,
  110. 'staffId' => $staffId, //操作人(员工id)
  111. 'staffName' => $staffName, //员工名称
  112. 'createTime' => $createTime,
  113. ];
  114. UserIntegralClass::add($integralData);
  115. }
  116. }