Quellcode durchsuchen

Merge branch 'dev' of http://git.huaml.com/zhh/huahuibao into dev

shish vor 2 Monaten
Ursprung
Commit
7d4babb6b7

+ 12 - 2
app-hd/controllers/MemberLevelController.php

@@ -91,7 +91,17 @@ class MemberLevelController extends BaseController
                 $level = $v['level'] ?? 1;
                 $name = $v['name'] ?? '会员';
                 $amount = $v['amount'] ?? 0;
-                $discount = floatval($v['discount'] ?? 10);
+                $discount = $v['discount'] ?? 10;
+                if ($discount === '') {
+                    $discount = 10;
+                }
+                if (!is_numeric($discount)) {
+                    util::fail('请输入有效的折扣');
+                }
+                $discount = floatval($discount);
+                if ($discount <= 0 || $discount > 10) {
+                    util::fail('折扣必须大于0且不超过10');
+                }
                 $birthdayBenefit = mb_substr(trim($v['birthdayBenefit'] ?? ''), 0, 50);
                 $benefitDesc = mb_substr(trim($v['benefitDesc'] ?? ''), 0, 500);
                 $it = [
@@ -134,4 +144,4 @@ class MemberLevelController extends BaseController
         }
     }
 
-}
+}

+ 23 - 3
app-mall/controllers/UserController.php

@@ -3,6 +3,7 @@
 namespace mall\controllers;
 
 use biz\shop\classes\ShopExtClass;
+use bizHd\birthday\classes\BirthdayGiftClass;
 use bizHd\custom\classes\CustomClass;
 use bizHd\wx\classes\WxOpenClass;
 use bizMall\message\services\SmsService;
@@ -72,7 +73,7 @@ class UserController extends BaseController
             util::fail('农历没有31号');
         }
         $user = $this->user;
-        if ($user->birthdaySet == 1 && getenv('YII_ENV') != 'dev') {
+        if (getenv('YII_ENV') != 'dev' && $user->birthdaySet == 1) {
             util::fail('你已经设置过了');
         }
         if ($lunar == 1) {
@@ -99,8 +100,9 @@ class UserController extends BaseController
         $user->birthdayTime = $birthdayTime;
         $user->birthdaySet = 1;
         $user->save();
-        $userId = $user->id;
-        $customList = \bizMall\custom\classes\CustomClass::getAllByCondition(['userId' => $userId], null, '*', null, true);
+
+        // 同步变更客户表(xhCustom)中的数据
+        $customList = \bizMall\custom\classes\CustomClass::getAllByCondition(['userId' => $user->id], null, '*', null, true);
         if (!empty($customList)) {
             foreach ($customList as $custom) {
                 $custom->lunar = $lunar;
@@ -111,6 +113,24 @@ class UserController extends BaseController
                 $custom->save();
             }
         }
+
+        // 同步变更生日赠礼记录表(xhBirthdayGift)中的数据(只更新当年年份的,往年的不去修改)
+        $birthdayGiftList = BirthdayGiftClass::getAllByCondition(['userId' => $user->id, 'year' => date("Y")], null, '*', null, true);
+        if (!empty($birthdayGiftList)) {
+            foreach ($birthdayGiftList as $birthdayGift) {
+                list($giftBirthdayMonth, $giftBirthdayDate) = BirthdayGiftClass::convertBirthdayMonthDay(
+                    $lunar,
+                    $birthdayMonth,
+                    $birthdayDate
+                );
+                $birthdayGift->lunar = $lunar;
+                $birthdayGift->birthdayMonth = $giftBirthdayMonth;
+                $birthdayGift->birthdayDate = $giftBirthdayDate;
+                $birthdayGift->birthdayDisplay = BirthdayGiftClass::formatBirthdayDisplay($custom, $giftBirthdayMonth, $giftBirthdayDate);
+                $birthdayGift->save();
+            }
+        }
+        
         util::complete('修改成功');
     }
 

+ 33 - 6
biz-hd/birthday/classes/BirthdayGiftClass.php

@@ -12,6 +12,7 @@ use common\components\noticeUtil;
 use common\components\printUtil;
 use common\components\ChuanglanSmsApi;
 use common\components\util;
+use Overtrue\ChineseCalendar\Calendar;
 use PhpAmqpLib\Wire\AMQPTable;
 use Yii;
 use yii\db\IntegrityException;
@@ -114,15 +115,35 @@ class BirthdayGiftClass extends BaseClass
         return null;
     }
 
-    public static function formatBirthdayDisplay($custom)
+    public static function convertBirthdayMonthDay($lunar, $birthdayMonth, $birthdayDate, $year = null)
+    {
+        $birthdayMonth = intval($birthdayMonth);
+        $birthdayDate = intval($birthdayDate);
+        if (intval($lunar) != 1) {
+            return [$birthdayMonth, $birthdayDate];
+        }
+
+        try {
+            $calendar = new Calendar();
+            $result = $calendar->lunar($year ?: date('Y'), $birthdayMonth, $birthdayDate);
+        } catch (\InvalidArgumentException $e) {
+            util::fail($e->getMessage());
+        }
+
+        return [intval($result['gregorian_month']), intval($result['gregorian_day'])];
+    }
+
+    public static function formatBirthdayDisplay($custom, $birthdayMonth, $birthdayDate)
     {
         $m = intval($custom->birthdayMonth ?? 0);
         $d = intval($custom->birthdayDate ?? 0);
         if ($m <= 0 || $d <= 0) {
             return '';
         }
-        $prefix = intval($custom->lunar ?? 0) == 1 ? '农历 ' : '';
-        return $prefix . $m . '月' . $d . '日';
+        if (intval($custom->lunar ?? 0) == 1) {
+            return $birthdayMonth . '月' . $birthdayDate . '日' . ' (农历 ' . $m . '月' . $d . '日)';
+        }
+        return $m . '月' . $d . '日';
     }
 
     /**
@@ -281,6 +302,12 @@ class BirthdayGiftClass extends BaseClass
         $hdId = $hd->id ?? 0;
         $birthdayTime = intval($custom->birthdayTime);
         $status = $birthdayTime > 0 ? self::STATUS_PENDING_NOTIFY : self::STATUS_NO_BIRTHDAY;
+        list($birthdayMonth, $birthdayDate) = self::convertBirthdayMonthDay(
+            $custom->lunar,
+            $custom->birthdayMonth,
+            $custom->birthdayDate,
+            $year
+        );
         $data = [
             'mainId' => $mainId,
             'shopId' => $shopId,
@@ -291,10 +318,10 @@ class BirthdayGiftClass extends BaseClass
             'member' => $member,
             'memberName' => $custom->memberName ?? '',
             'giftName' => $giftName,
-            'birthdayMonth' => intval($custom->birthdayMonth),
-            'birthdayDate' => intval($custom->birthdayDate),
+            'birthdayMonth' => $birthdayMonth,
+            'birthdayDate' => $birthdayDate,
             'lunar' => intval($custom->lunar),
-            'birthdayDisplay' => self::formatBirthdayDisplay($custom),
+            'birthdayDisplay' => self::formatBirthdayDisplay($custom, $birthdayMonth, $birthdayDate),
         ];
         if (empty($gift)) {
             $data['status'] = $status;

+ 37 - 12
biz-hd/custom/classes/CustomClass.php

@@ -6,6 +6,7 @@ use biz\wx\classes\WxMessageClass;
 use bizHd\balance\classes\BalanceChangeClass;
 use bizHd\balance\classes\BalanceGiveChangeClass;
 use bizHd\balance\classes\BalancePayChangeClass;
+use bizHd\birthday\classes\BirthdayGiftClass;
 use bizHd\member\classes\MemberChangeClass;
 use bizHd\member\classes\MemberLevelClass;
 use bizHd\order\classes\OrderClass;
@@ -77,7 +78,7 @@ class CustomClass extends BaseClass
         if (getenv('YII_ENV') != 'dev' && $user->birthdaySet == 1) {
             util::fail('客户已填写,不能修改');
         }
-        //用户自己没有设置过生日,直接改
+
         $custom->lunar = $lunar;
         $custom->birthdayDate = $birthdayDate;
         $custom->birthdayMonth = $birthdayMonth;
@@ -91,6 +92,22 @@ class CustomClass extends BaseClass
         $user->birthday = $birthday;
         $user->birthdayTime = $birthdayTime;
         $user->save();
+
+        // 同步变更生日赠礼记录表(xhBirthdayGift)中的数据(只更新当年年份的,往年的不去修改)
+        $birthdayGift = BirthdayGiftClass::getByCondition(['userId'=>$user->id, 'shopId'=>$shopId, 'year'=>date("Y")], true);
+        if (!empty($birthdayGift)) {
+            list($giftBirthdayMonth, $giftBirthdayDate) = BirthdayGiftClass::convertBirthdayMonthDay(
+                $lunar,
+                $birthdayMonth,
+                $birthdayDate
+            );
+            $birthdayGift->lunar = $lunar;
+            $birthdayGift->birthdayMonth = $giftBirthdayMonth;
+            $birthdayGift->birthdayDate = $giftBirthdayDate;
+            $birthdayGift->birthdayDisplay = BirthdayGiftClass::formatBirthdayDisplay($custom, $giftBirthdayMonth, $giftBirthdayDate);
+            $birthdayGift->save();
+        }
+
         return $custom;
     }
 
@@ -266,7 +283,7 @@ class CustomClass extends BaseClass
         $current = $levelData[$newLevel] ?? [];
         $before = $levelData[$oldLevel] ?? [];
         $beforeName = $before['name'] ?? '普通客户';
-        $discount = $current['discount'] ?? 1;
+        $discount = $current['discount'] ?? 10;
         $memberName = $current['name'] ?? '';
         $oldGrowth = $custom->growth;
 
@@ -963,8 +980,8 @@ class CustomClass extends BaseClass
     {
         $shopId = $data['shopId'];
         $mainId = $data['mainId'];
-        $customs = self::getAllByCondition(['shopId' => $shopId], null, 'id, name, hdId, userId, buyAmount, growth, member, memberName', null, true);
-        $levelDatas = MemberLevelClass::getAllByCondition(['mainId' => $mainId], 'amount DESC', 'id, name, level, amount');
+        $customs = self::getAllByCondition(['shopId' => $shopId], null, 'id, name, hdId, userId, buyAmount, growth, member, memberName, discount', null, true);
+        $levelDatas = MemberLevelClass::getAllByCondition(['mainId' => $mainId], 'amount DESC', 'id, name, level, amount, discount');
         if (!empty($customs) && !empty($levelDatas)) {
             foreach ($customs as $c) {
                 // $buyAmount = 0;
@@ -979,9 +996,7 @@ class CustomClass extends BaseClass
 
                 // 根据 growth 设置等级
                 $memberData = self::getCustomExpenseLevel($c->growth, $mainId, $levelDatas); // 设置等级多处需要同步修改的,请搜索:getCustomExpenseLevel
-                $newMember = intval($memberData['level']);
-                $customMember = $c->member;
-                if ($customMember != $newMember) {
+                if ($c->member != $memberData['level'] || $c->memberName != $memberData['name']) {
                     $hdId = $c->hdId;
                     $hd = HdClass::getById($hdId, true);
 
@@ -1007,10 +1022,20 @@ class CustomClass extends BaseClass
                         'staffName' => '',
                     ];
                     MemberChangeClass::add($change);
+                }
+                $c->member = $memberData['level'];
+                $c->memberName = $memberData['name'];
+                $c->discount = bcdiv(floatval($memberData['discount']), 10, 1);
+                $c->save();
 
-                    $c->member = $memberData['level'];
-                    $c->memberName = $memberData['name'];
-                    $c->save();
+                if (!empty($c->hdId)) {
+                    $hd = HdClass::getById($c->hdId, true);
+                    if (!empty($hd)) {
+                        $hd->member = $memberData['level'];
+                        $hd->memberName = $memberData['name'];
+                        $hd->discount = $newDiscount;
+                        $hd->save();
+                    }
                 }
 
                 // 更新客户所对应花店的消费金额
@@ -1024,7 +1049,7 @@ class CustomClass extends BaseClass
     public static function getCustomExpenseLevel($growth, $mainId, $levelDatas=[])
     {
         if (empty($levelDatas)) {
-            $levelDatas = MemberLevelClass::getAllByCondition(['mainId' => $mainId], 'amount DESC', 'id, name, level, amount');
+            $levelDatas = MemberLevelClass::getAllByCondition(['mainId' => $mainId], 'amount DESC', 'id, name, level, amount, discount');
         }
         foreach ($levelDatas as $data) {
             if ($growth >= $data['amount']) {
@@ -1032,6 +1057,6 @@ class CustomClass extends BaseClass
             }
         }
 
-        return ['level'=>0, 'name'=>''];
+        return ['level'=>0, 'name'=>'', 'discount'=>10];
     }
 }

+ 1 - 0
biz-hd/custom/observers/BuyAmountObserver.php

@@ -86,6 +86,7 @@ class BuyAmountObserver extends Behavior
             $model::updateAll([
                 'member' => (int) ($memberData['level'] ?? 0),
                 'memberName' => (string) ($memberData['name'] ?? ''),
+                'discount' => bcdiv(floatval($memberData['discount']), 10, 1)
             ], ['id' => $model->getPrimaryKey()]);
         }else{
             throw new \Exception('mainId is required');

+ 1 - 0
biz-hd/deduct/classes/DeductClass.php

@@ -172,6 +172,7 @@ class DeductClass extends BaseClass
             CustomClass::updateById($customId, [
                 'member' => (int) ($memberData['level'] ?? 0),
                 'memberName' => (string) ($memberData['name'] ?? ''),
+                'discount' => bcdiv(floatval($memberData['discount']), 10, 1)
             ]);
         }
 

+ 8 - 1
biz-hd/order/services/OrderService.php

@@ -242,6 +242,13 @@ class OrderService extends BaseService
         $totalPrice = bcsub($totalPrice, $hbAmount, 2);
 
         $modifyPrice = isset($data['modifyPrice']) && $data['modifyPrice'] > 0 ? $data['modifyPrice'] : 0;
+        $memberDiscount = $custom->discount ?? 10;
+        if (is_numeric($memberDiscount) && $memberDiscount > 0 && $memberDiscount < 10 && $modifyPrice > 0) {
+            $modifyPrice = bcdiv(bcmul($modifyPrice, $memberDiscount, 3), 10, 2);
+            if (bccomp($modifyPrice, '0', 2) <= 0) {
+                $modifyPrice = 0.01;
+            }
+        }
         //优惠
         if ($modifyPrice < $totalPrice) {
             $data['discountType'] = dict::getDict('discountType', 'discount');
@@ -542,4 +549,4 @@ class OrderService extends BaseService
         return ['price' => $discountPrice, 'discountType' => $discountType, 'discountAmount' => $discountAmount];
     }
 
-}
+}

+ 1 - 0
biz-hd/recharge/classes/RechargeClass.php

@@ -285,6 +285,7 @@ class RechargeClass extends BaseClass
             CustomClass::updateById($customId, [
                 'member' => (int) ($memberData['level'] ?? 0),
                 'memberName' => (string) ($memberData['name'] ?? ''),
+                'discount' => bcdiv(floatval($memberData['discount']), 10, 1)
             ]);
         }
         $custom->save();