Browse Source

完善功能

gorden 9 months ago
parent
commit
a2a8c8cfd7

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

@@ -0,0 +1,108 @@
+<?php
+
+namespace app\admin\controller\member;
+
+use app\admin\validate\member\RuleAddedValidate;
+use app\admin\validate\member\RulePricingValidate;
+use app\controller\Curd;
+use app\model\MemberQuota;
+use app\model\RuleAdded;
+use app\model\RulePricing;
+use app\model\SysSerial;
+use support\exception\BusinessException;
+use support\Request;
+use support\Response;
+
+class QuotaController extends Curd
+{
+    public function __construct()
+    {
+        $this->model = new MemberQuota();
+//        $this->validate = true;
+//        $this->validateClass = new RuleAddedValidate();
+    }
+
+    public function select(Request $request): Response
+    {
+        [$where, $format, $limit, $field, $order] = $this->selectInput($request);
+        $order = $request->get('order', 'desc');
+        $field = $field ?? 'member_quota_addtimes';
+        $query = $this->doSelect($where, $field, $order);
+        return $this->doFormat($query, $format, $limit);
+    }
+
+    protected function doSelect(array $where, string $field = null, string $order = 'desc')
+    {
+        $model = $this->model->with([
+            'member' => function ($query) {
+                $query->select('member_id', 'member_mobile');
+            },
+            'cert' => function ($query) {
+                $query->select('join_cert_member_id', 'member_cert_name');
+            },
+            'component'=>function($query){
+                $query->select('rule_added_component_id', 'rule_added_component_name');
+            }
+        ]);
+        foreach ($where as $column => $value) {
+            if (is_array($value)) {
+                if ($value[0] === 'like' || $value[0] === 'not like') {
+                    $model = $model->where($column, $value[0], "%$value[1]%");
+                } elseif (in_array($value[0], ['>', '=', '<', '<>'])) {
+                    $model = $model->where($column, $value[0], $value[1]);
+                } elseif ($value[0] == 'in' && !empty($value[1])) {
+                    $valArr = $value[1];
+                    if (is_string($value[1])) {
+                        $valArr = explode(",", trim($value[1]));
+                    }
+                    $model = $model->whereIn($column, $valArr);
+                } elseif ($value[0] == 'not in' && !empty($value[1])) {
+                    $valArr = $value[1];
+                    if (is_string($value[1])) {
+                        $valArr = explode(",", trim($value[1]));
+                    }
+                    $model = $model->whereNotIn($column, $valArr);
+                } elseif ($value[0] == 'null') {
+                    $model = $model->whereNull($column);
+                } elseif ($value[0] == 'not null') {
+                    $model = $model->whereNotNull($column);
+                } elseif ($value[0] !== '' || $value[1] !== '') {
+                    $model = $model->whereBetween($column, $value);
+                }
+            } else {
+                $model = $model->where($column, $value);
+            }
+        }
+        if ($field) {
+            $model = $model->orderBy($field, $order);
+        }
+        return $model;
+    }
+
+//    protected function insertInput(Request $request): array
+//    {
+//        $data = $this->inputFilter($request->post());
+//        $data['rule_added_id'] = "RA" . str_pad(SysSerial::getSerial(), 16, '0', STR_PAD_LEFT) . random_string(6, 'up');
+//
+//        return $data;
+//    }
+
+    protected function updateInput(Request $request): array
+    {
+        $primary_key = $this->model->getKeyName();
+        $id = $request->post($primary_key);
+        $data = $this->inputFilter($request->post());
+//        if (!empty($data['rule_pricing_goods_json'])) {
+//            $data['rule_pricing_goods_json'] = json_encode(explode(',', $data['rule_pricing_goods_json']));
+//        } else {
+//            $data['rule_pricing_goods_json'] = '[]';
+//        }
+        $model = $this->model->find($id);
+        if (!$model) {
+            throw new BusinessException('记录不存在', 2);
+        }
+        unset($data[$primary_key]);
+        return [$id, $data];
+    }
+
+}

+ 59 - 0
app/admin/controller/member/RoleController.php

@@ -5,7 +5,10 @@ namespace app\admin\controller\member;
 use app\admin\validate\member\RoleValidate;
 use app\controller\Curd;
 use app\model\MemberRole;
+use app\model\RuleAdded;
+use app\model\RulePricing;
 use app\model\SysSerial;
+use support\exception\BusinessException;
 use support\Request;
 use support\Response;
 
@@ -68,12 +71,68 @@ class RoleController extends Curd
         return $model;
     }
 
+    protected function afterQuery($items)
+    {
+        foreach ($items as &$item) {
+            if (!empty($item->member_role_rule_json)) {
+                $ruleJson = json_decode($item->member_role_rule_json, true);
+                if (!empty($ruleJson['pricing'])){
+                    $item->join_member_role_rule_pricing_id = $ruleJson['pricing'];
+                    $item->pricingName = RulePricing::where('rule_pricing_id',$ruleJson['pricing'])->value('rule_pricing_name');
+                }
+                if(!empty($ruleJson['added'])){
+                    $item->join_member_role_added_id = $ruleJson['added'];
+                    $item->addedName = RuleAdded::where('rule_added_id',$ruleJson['added'])->value('rule_added_name');
+                }
+            }
+        }
+
+        return $items;
+    }
+
     protected function insertInput(Request $request): array
     {
         $data = $this->inputFilter($request->post());
         $data['member_role_id'] = "MR" . str_pad(SysSerial::getSerial(), 16, '0', STR_PAD_LEFT) . random_string(6, 'up');
 
+        $data['member_role_rule_json'] = json_encode([
+            'pricing' => $request->post('join_member_role_rule_pricing_id'),
+            'added' => $request->post('join_member_role_added_id'),
+        ]);
         return $data;
     }
 
+
+    protected function updateInput(Request $request): array
+    {
+        $params = $request->post();
+
+        $primary_key = $this->model->getKeyName();
+        $id = $request->post($primary_key);
+        $data = $this->inputFilter($params);
+        $model = $this->model->find($id);
+        if (!$model) {
+            throw new BusinessException('记录不存在', 2);
+        }
+
+        if (!empty($model->member_role_rule_json)) {
+            $ruleJson = json_encode($model->member_role_rule_json, true);
+            if (isset($params['join_member_role_rule_pricing_id'])) {
+                $ruleJson['pricing'] = $params['join_member_role_rule_pricing_id'];
+            }
+            if (isset($params['join_member_role_added_id'])) {
+                $ruleJson['added'] = $params['join_member_role_added_id'];
+            }
+            $data['member_role_rule_json'] = json_encode($ruleJson);
+        }else{
+            $data['member_role_rule_json'] = json_encode([
+                'pricing'=>$params['join_member_role_rule_pricing_id'] ?? '',
+                'added'=>$params['join_member_role_added_id'] ?? ''
+            ]);
+        }
+
+        unset($data[$primary_key]);
+        return [$id, $data];
+    }
+
 }

+ 53 - 0
app/admin/controller/member/RuleAddedComponentController.php

@@ -0,0 +1,53 @@
+<?php
+
+namespace app\admin\controller\member;
+
+use app\admin\validate\member\RuleAddedValidate;
+use app\admin\validate\member\RulePricingValidate;
+use app\controller\Curd;
+use app\model\RuleAdded;
+use app\model\RuleAddedComponent;
+use app\model\RulePricing;
+use app\model\SysSerial;
+use support\exception\BusinessException;
+use support\Request;
+use support\Response;
+
+class RuleAddedComponentController extends Curd
+{
+    public function __construct()
+    {
+        $this->model = new RuleAddedComponent();
+//        $this->validate = true;
+//        $this->validateClass = new RuleAddedValidate();
+    }
+
+    public function select(Request $request): Response
+    {
+        [$where, $format, $limit, $field, $order] = $this->selectInput($request);
+        $order = $request->get('order', 'desc');
+        $field = $field ?? 'rule_added_component_addtimes';
+        $query = $this->doSelect($where, $field, $order);
+        return $this->doFormat($query, $format, $limit);
+    }
+
+
+//    protected function updateInput(Request $request): array
+//    {
+//        $primary_key = $this->model->getKeyName();
+//        $id = $request->post($primary_key);
+//        $data = $this->inputFilter($request->post());
+//        if (!empty($data['rule_pricing_goods_json'])) {
+//            $data['rule_pricing_goods_json'] = json_encode(explode(',', $data['rule_pricing_goods_json']));
+//        } else {
+//            $data['rule_pricing_goods_json'] = '[]';
+//        }
+//        $model = $this->model->find($id);
+//        if (!$model) {
+//            throw new BusinessException('记录不存在', 2);
+//        }
+//        unset($data[$primary_key]);
+//        return [$id, $data];
+//    }
+
+}

+ 69 - 0
app/admin/controller/member/RuleAddedController.php

@@ -0,0 +1,69 @@
+<?php
+
+namespace app\admin\controller\member;
+
+use app\admin\validate\member\RuleAddedValidate;
+use app\admin\validate\member\RulePricingValidate;
+use app\controller\Curd;
+use app\model\RuleAdded;
+use app\model\RulePricing;
+use app\model\SysSerial;
+use support\exception\BusinessException;
+use support\Request;
+use support\Response;
+
+class RuleAddedController extends Curd
+{
+    public function __construct()
+    {
+        $this->model = new RuleAdded();
+        $this->validate = true;
+        $this->validateClass = new RuleAddedValidate();
+    }
+
+    public function select(Request $request): Response
+    {
+        [$where, $format, $limit, $field, $order] = $this->selectInput($request);
+        $order = $request->get('order', 'desc');
+        $field = $field ?? 'rule_added_addtimes';
+        $query = $this->doSelect($where, $field, $order);
+        return $this->doFormat($query, $format, $limit);
+    }
+
+    public function selectList(Request $request)
+    {
+        $data = $this->model->where('rule_added_status', 'ACTIVED')
+            ->select('rule_added_id', 'rule_added_name')
+            ->get()
+            ->toArray();
+
+        return json_success('', $data);
+    }
+
+    protected function insertInput(Request $request): array
+    {
+        $data = $this->inputFilter($request->post());
+        $data['rule_added_id'] = "RA" . str_pad(SysSerial::getSerial(), 16, '0', STR_PAD_LEFT) . random_string(6, 'up');
+
+        return $data;
+    }
+
+    protected function updateInput(Request $request): array
+    {
+        $primary_key = $this->model->getKeyName();
+        $id = $request->post($primary_key);
+        $data = $this->inputFilter($request->post());
+        if (!empty($data['rule_pricing_goods_json'])) {
+            $data['rule_pricing_goods_json'] = json_encode(explode(',', $data['rule_pricing_goods_json']));
+        } else {
+            $data['rule_pricing_goods_json'] = '[]';
+        }
+        $model = $this->model->find($id);
+        if (!$model) {
+            throw new BusinessException('记录不存在', 2);
+        }
+        unset($data[$primary_key]);
+        return [$id, $data];
+    }
+
+}

+ 26 - 0
app/admin/validate/member/RuleAddedValidate.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace app\admin\validate\member;
+
+use support\Validate;
+
+class RuleAddedValidate extends Validate
+{
+    protected $rule = [
+        'rule_added_id|ID' => 'require|alphaDash',
+        'rule_added_classify|归类' => 'max:32',
+        'rule_added_status|状态' => 'in:ACTIVED,DISABLED',
+        'rule_added_category|分类' => 'max:32',
+        'rule_added_name|规则名称' => 'require|max:64',
+        'rule_added_goods_diff|重复产品处理' => 'in:SUM,REPLACE,NONE',
+        'rule_added_sort|排序' => 'integer',
+        'rule_added_groupby|分组' => 'max:32',
+    ];
+
+    protected $message = [];
+
+    protected $scene = [
+        'add' => ['rule_added_classify', 'rule_added_status', 'rule_added_category', 'rule_added_name', 'rule_added_goods_diff', 'rule_added_sort', 'rule_added_groupby'],
+        'update' => ['rule_added_id', 'rule_added_classify', 'rule_added_status', 'rule_added_category', 'rule_added_name', 'rule_added_goods_diff', 'rule_added_sort', 'rule_added_groupby']
+    ];
+}

+ 41 - 0
app/model/MemberQuota.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace app\model;
+
+use DateTimeInterface;
+use support\Model;
+
+class MemberQuota extends Model
+{
+    protected $table = 'member_quota';
+
+    protected $primaryKey = 'member_quota_id';
+
+    protected $keyType = 'string';
+
+    protected $dateFormat = 'U';
+
+    const CREATED_AT = 'member_quota_addtimes';
+
+    const UPDATED_AT = null;
+
+    protected function serializeDate(DateTimeInterface $date)
+    {
+        return $date->format('Y-m-d H:i:s');
+    }
+
+    public function member()
+    {
+        return $this->hasOne(Member::class, 'member_id', 'join_quota_member_id');
+    }
+
+    public function cert()
+    {
+        return $this->hasOne(MemberCert::class, 'join_cert_member_id', 'join_quota_member_id');
+    }
+
+    public function component()
+    {
+        return $this->hasOne(RuleAddedComponent::class, 'rule_added_component_id', 'join_member_rule_added_component_id');
+    }
+}

+ 26 - 0
app/model/RuleAdded.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace app\model;
+
+use DateTimeInterface;
+use support\Model;
+
+class RuleAdded extends Model
+{
+    protected $table = 'rule_added';
+
+    protected $primaryKey = 'rule_added_id';
+
+    protected $keyType = 'string';
+
+    protected $dateFormat = 'U';
+
+    const CREATED_AT = 'rule_added_addtimes';
+
+    const UPDATED_AT = null;
+
+    protected function serializeDate(DateTimeInterface $date)
+    {
+        return $date->format('Y-m-d H:i:s');
+    }
+}

+ 24 - 0
app/model/RuleAddedComponent.php

@@ -0,0 +1,24 @@
+<?php
+
+namespace app\model;
+
+use DateTimeInterface;
+use support\Model;
+
+class RuleAddedComponent extends Model
+{
+    protected $table = 'rule_added_component';
+
+    protected $primaryKey = 'rule_added_component_id';
+
+    protected $dateFormat = 'U';
+
+    const CREATED_AT = 'rule_added_component_addtimes';
+
+    const UPDATED_AT = null;
+
+    protected function serializeDate(DateTimeInterface $date)
+    {
+        return $date->format('Y-m-d H:i:s');
+    }
+}

+ 21 - 0
route/admin.php

@@ -614,6 +614,27 @@ Route::group('/admin', function () {
             Route::post('/update', [\app\admin\controller\member\RoleController::class, 'update']);
             Route::delete('/delete', [\app\admin\controller\member\RoleController::class, 'delete']);
         });
+        /* 增值包-主记录 */
+        Route::group('/ruleAdded', function () {
+            Route::get('/list', [\app\admin\controller\member\RuleAddedController::class, 'select']);
+            Route::post('/add', [\app\admin\controller\member\RuleAddedController::class, 'insert']);
+            Route::post('/update', [\app\admin\controller\member\RuleAddedController::class, 'update']);
+            Route::delete('/delete', [\app\admin\controller\member\RuleAddedController::class, 'delete']);
+        });
+        /* 增值包-组件 */
+        Route::group('/ruleAddedComponent', function () {
+            Route::get('/list', [\app\admin\controller\member\RuleAddedComponentController::class, 'select']);
+            Route::post('/add', [\app\admin\controller\member\RuleAddedComponentController::class, 'insert']);
+            Route::post('/update', [\app\admin\controller\member\RuleAddedComponentController::class, 'update']);
+            Route::delete('/delete', [\app\admin\controller\member\RuleAddedComponentController::class, 'delete']);
+        });
+        /* 会员额度明细 */
+        Route::group('/quota', 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::delete('/delete', [\app\admin\controller\member\QuotaController::class, 'delete']);
+        });
     });
     /* 营销管理 */
     Route::group('/marketing', function () {