瀏覽代碼

完善功能

gorden 9 月之前
父節點
當前提交
fc59e15a62

+ 36 - 0
app/admin/controller/member/QuotaController.php

@@ -10,6 +10,7 @@ use app\model\MemberQuota;
 use app\model\RuleAdded;
 use app\model\RulePricing;
 use app\model\SysSerial;
+use support\Redis;
 use support\exception\BusinessException;
 use support\Request;
 use support\Response;
@@ -121,4 +122,39 @@ class QuotaController extends Curd
         return [$id, $data];
     }
 
+    public function writeOff(Request $request)
+    {
+        $quotaIds = $request->post('quota_id', []);
+        $code = $request->post('sms_code', '');
+
+        $quotas = MemberQuota::whereIn('member_quota_id', $quotaIds)->get()->toArray();
+        $memberIds = array_column($quotas, 'join_quota_member_id');
+
+        if (count(array_unique($memberIds)) > 1) {
+            return json_fail("不可以同时核销多个会员权益");
+        }
+
+        $status = array_column($quotas, 'member_quota_status');
+        if (in_array('USED', $status)) {
+            return json_fail('存在已核销的权益,请去除后重试');
+        }
+
+        $member = Member::find(current($memberIds));
+        $mobile = $member->member_mobile;
+        $key = "SMS:CODE:QUOTA:" . $mobile;
+        $redisCode = Redis::get($key);
+        dump($code, $redisCode);
+        if ($redisCode != $code) {
+            return json_fail("验证码错误,请重新输入");
+        }
+
+        try {
+            MemberQuota::whereIn('member_quota_id', $quotaIds)->update(['member_quota_status' => 'USED']);
+        } catch (\Exception $e) {
+            return json_fail("核销失败");
+        }
+
+        return json_success("核销成功");
+    }
+
 }

+ 52 - 0
app/admin/controller/sms/SmsController.php

@@ -0,0 +1,52 @@
+<?php
+
+namespace app\admin\controller\sms;
+
+use app\model\Member;
+use app\model\MemberQuota;
+use support\Redis;
+use support\Request;
+use Hhink\WebmanSms\Sms;
+
+class SmsController
+{
+    const KEY_PREFIX = 'SMS:CODE:';
+
+    public function sendSmsCodeByQuota(Request $request)
+    {
+        $quotaIds = $request->post('quota_id', []);
+        if (!$quotaIds) {
+            return json_fail("参数异常");
+        }
+
+        $quotas = MemberQuota::whereIn('member_quota_id', $quotaIds)->get()->toArray();
+        $memberIds = array_column($quotas, 'join_quota_member_id');
+
+        if (count(array_unique($memberIds)) > 1) {
+            return json_fail("不可以同时核销多个会员权益");
+        }
+
+        try {
+            $member = Member::find(current($memberIds));
+            $mobile = $member->member_mobile;
+
+            $code = random_string(6, 'number');
+            $key = self::KEY_PREFIX . 'QUOTA:' . $mobile;
+            Redis::set($key, $code);
+            Redis::expire($key, 600);
+
+            Sms::app()->send(15910622969, [
+                'template' => 'SMS_240865706',
+                'data' => [
+                    'code' => $code
+                ],
+            ]);
+
+        } catch (\Exception $e) {
+            dump($e->getMessage());
+        }
+
+
+        return json_success('success');
+    }
+}

+ 3 - 3
app/admin/validate/member/RoleValidate.php

@@ -9,7 +9,7 @@ class RoleValidate extends Validate
     protected $rule = [
         'member_role_id|ID' => 'require|alphaDash',
         'join_member_role_category_id|系统分类' => 'integer',
-        'join_member_role_rule_pricing_id|计价规则' => 'alphaDash',
+//        'join_member_role_rule_pricing_id|计价规则' => 'alphaDash',
         'member_role_status|状态' => 'in:ACTIVED,DISABLED',
         'member_role_category|等级分类' => 'max:32',
         'member_role_name|等级名称' => 'require|max:64',
@@ -22,9 +22,9 @@ class RoleValidate extends Validate
     protected $message = [];
 
     protected $scene = [
-        'add' => ['join_member_role_category_id', 'join_member_role_rule_pricing_id', 'member_role_status', 'member_role_category',
+        'add' => ['join_member_role_category_id', 'member_role_status', 'member_role_category',
             'member_role_name', 'member_role_range_begin', 'member_role_range_end', 'member_role_sort', 'member_role_groupby'],
-        'update' => ['member_role_id', 'join_member_role_category_id', 'join_member_role_rule_pricing_id', 'member_role_status', 'member_role_category',
+        'update' => ['member_role_id', 'join_member_role_category_id', 'member_role_status', 'member_role_category',
             'member_role_name', 'member_role_range_begin', 'member_role_range_end', 'member_role_sort', 'member_role_groupby'],
     ];
 }

+ 2 - 2
app/admin/validate/sys_manage/DeptValidate.php

@@ -11,8 +11,8 @@ class DeptValidate extends Validate
         'dept_super_id|上级' => 'require|integer',
         'dept_status|状态' => 'require|in:ACTIVED,DISABLED',
         'dept_category|分类' => 'require|in:职能部门,财务部门,仓库货仓,外延部门,营业场所,其他',
-        'dept_code|编号' => 'require|alphaDash',
-        'dept_city|所在城市' => 'require',
+        'dept_code|编号' => 'alphaDash',
+        'dept_city|省市县区' => 'require',
         'dept_name|名称' => 'require',
         'dept_telephone|联系电话' => 'mobile',
         'dept_position|坐标' => 'regex:/^[0-9\.\,]+$/',

+ 3 - 1
composer.json

@@ -37,7 +37,9 @@
     "symfony/translation": "^5.4",
     "tinywan/jwt": "^1.9.1",
     "tinywan/storage": "^1.0",
-    "workerman/crontab": "^1.0"
+    "workerman/crontab": "^1.0",
+    "overtrue/easy-sms": "^2.6",
+    "hhink/webman-sms": "^1.0"
   },
   "suggest": {
     "ext-event": "For better performance. "

+ 32 - 0
config/plugin/hhink/webman-sms/app.php

@@ -0,0 +1,32 @@
+<?php
+
+use Overtrue\EasySms\Strategies\OrderStrategy;
+
+return [
+    'enable' => true,
+
+    // HTTP 请求的超时时间(秒)
+    'timeout' => 5.0,
+
+    // 默认发送配置
+    'default' => [
+        // 网关调用策略,默认:顺序调用
+        'strategy' => OrderStrategy::class,
+
+        // 默认可用的发送网关
+        'gateways' => [
+            'aliyun',
+        ],
+    ],
+    // 可用的网关配置
+    'gateways' => [
+        'errorlog' => [
+            'file' => '/tmp/easy-sms.log',
+        ],
+        'aliyun' => [
+            'access_key_id' => 'LTAI4Ff7ZPSG4XWj7pEhMQBB',
+            'access_key_secret' => 'LTAI4Ff7ZPSG4XWj7pEhMQBB kmXJO9JH33XDstQxEBAmr08bjhsN19',
+            'sign_name' => '万悦悦享家',
+        ],
+    ],
+];

+ 4 - 0
route/admin.php

@@ -11,6 +11,9 @@ Route::group('/admin', function () {
     })->middleware([
         \app\middleware\AdminAuthCheck::class
     ]);
+    Route::group('/sms', function () {
+        Route::post('/quotaWriteOffCode', [\app\admin\controller\sms\SmsController::class, 'sendSmsCodeByQuota']);
+    });
     /* 鉴权 */
     Route::group('/auth', function () {
         Route::post('/login', [\app\admin\controller\auth\AuthController::class, 'login']);
@@ -642,6 +645,7 @@ Route::group('/admin', function () {
             Route::get('/list', [\app\admin\controller\member\QuotaController::class, 'select']);
             Route::post('/add', [\app\admin\controller\member\QuotaController::class, 'insert']);
             Route::post('/update', [\app\admin\controller\member\QuotaController::class, 'update']);
+            Route::post('/writeOff', [\app\admin\controller\member\QuotaController::class, 'writeOff']);
             Route::delete('/delete', [\app\admin\controller\member\QuotaController::class, 'delete']);
         });
     });