Browse Source

完善功能

gorden 9 months ago
parent
commit
82b6b9fee6

+ 48 - 0
app/admin/controller/content/ApartmentController.php

@@ -0,0 +1,48 @@
+<?php
+
+namespace app\admin\controller\content;
+
+use app\controller\Curd;
+use app\model\Content;
+use support\exception\BusinessException;
+use support\Request;
+use support\Response;
+
+class ApartMentController extends Curd
+{
+    public function __construct()
+    {
+        $this->model = new Content();
+    }
+
+    public function info(Request $request): Response
+    {
+        $data = $this->model->where('content_category', 'APARTMENT')->first();
+
+        if (!empty($data->content_config_json)){
+            $data->content_config_json = json_decode($data->content_config_json);
+        }
+
+        return json_success('', $data);
+    }
+
+    protected function updateInput(Request $request): array
+    {
+        $primary_key = $this->model->getKeyName();
+        $id = $request->post($primary_key);
+
+        $params = $request->post();
+        if (is_array($params['content_config_json'])){
+            $params['content_config_json'] = json_encode(array_filter($params['content_config_json'],function ($value){
+                return ($value != '' && $value != ' ' && $value != null);
+            }), JSON_UNESCAPED_UNICODE);
+        }
+        $data = $this->inputFilter($params);
+        $model = $this->model->find($id);
+        if (!$model) {
+            throw new BusinessException('记录不存在', 2);
+        }
+        unset($data[$primary_key]);
+        return [$id, $data];
+    }
+}

+ 19 - 9
app/admin/controller/member/BenefitController.php

@@ -2,6 +2,7 @@
 
 namespace app\admin\controller\member;
 
+use app\admin\service\order\OrderService;
 use app\controller\Curd;
 use app\model\Appointment;
 use app\model\Member;
@@ -114,14 +115,14 @@ class BenefitController extends Curd
         if ($benefit->member_benefit_limit_count - $benefit->member_benefit_used_count < $nbr) {
             return json_fail('可核销数量不足');
         }
-        $member = Member::find($memberId);
-        $mobile = $member->member_mobile;
-        $key = "SMS:CODE:QUOTA:" . $mobile;
-        $redisCode = Redis::get($key);
-        if ($redisCode != $code) {
-            return json_fail("验证码错误,请重新输入");
-        }
-        Redis::del($key);
+        // $member = Member::find($memberId);
+        // $mobile = $member->member_mobile;
+        // $key = "SMS:CODE:QUOTA:" . $mobile;
+        // $redisCode = Redis::get($key);
+        // if ($redisCode != $code) {
+        //     return json_fail("验证码错误,请重新输入");
+        // }
+        // Redis::del($key);
         if (!$times) {
             $times = date('Y-m-d H:i:s');
         } else {
@@ -134,6 +135,14 @@ class BenefitController extends Curd
             $benefit->member_benefit_used_count = $benefit->member_benefit_used_count + $nbr;
             $benefit->save();
             // 记录核销
+            $params = [
+                'dept_premises_id' => $request->post('dept_premises_id'),
+                'order_remark'=>$request->post('remark'),
+                'write_off_member_id' => $request->post('write_off_member_id'),
+                'join_order_member_id' => $memberId
+            ];
+            $writeOffData = OrderService::generateWriteOffData($params);
+
             $appointments = Appointment::where('join_appointment_member_benefit_id', $benefitId)
                 ->where('appointment_status', 'INIT')
                 ->limit($nbr)
@@ -144,7 +153,8 @@ class BenefitController extends Curd
                     'appointment_datetime' => $times,
                     'appointment_apply_datetime' => $times,
                     'appointment_doing_datetime' => $times,
-                    'appointment_done_datetime' => $times
+                    'appointment_done_datetime' => $times,
+                    'appointment_done_json' => json_encode($writeOffData)
                 ]);
             }
 

+ 23 - 0
app/admin/controller/member/MemberController.php

@@ -6,6 +6,7 @@ use app\admin\service\member\MemberService;
 use app\admin\validate\member\MemberValidate;
 use app\model\Family;
 use app\model\FamilyMember;
+use app\model\Member;
 use app\model\MemberAccount;
 use app\model\PayDetail;
 use support\Db;
@@ -41,6 +42,28 @@ class MemberController
         return json_success('', $data);
     }
 
+    public function selectWriteOffMember()
+    {
+        $members = Member::with([
+            'cert' => function ($query) {
+                $query->select('join_cert_member_id', 'member_cert_name');
+            }
+        ])->whereRaw("JSON_EXTRACT(`member_json`, '$.user') IS NOT NULL")
+            ->select('member_id', 'member_mobile', 'member_json')
+            ->get()
+            ->toArray();
+        foreach ($members as &$member) {
+            $member['member_json'] = json_decode($member['member_json'], true);
+            $member['username'] = $member['member_mobile'];
+            $member['user_id'] = $member['member_json']['user'] ? $member['member_json']['user']['user_id'] : '';
+            if (isset($member['cert']['member_cert_name'])) {
+                $member['username'] = $member['cert']['member_cert_name'] . '-' . $member['username'];
+            }
+        }
+
+        return json_success('', $members);
+    }
+
     public function selectFamilyMemberList(Request $request)
     {
         $keywords = $request->get('keywords');

+ 30 - 23
app/admin/controller/member/QuotaController.php

@@ -2,6 +2,7 @@
 
 namespace app\admin\controller\member;
 
+use app\admin\service\added\AddedService;
 use app\admin\validate\member\RuleAddedValidate;
 use app\admin\validate\member\RulePricingValidate;
 use app\controller\Curd;
@@ -53,7 +54,7 @@ class QuotaController extends Curd
             $id = "'".$id."'";
         }
 
-        $rows = MemberQuota::select('join_quota_member_id', 'join_member_rule_added_component_id', Db::raw('MAX(member_quota_addtimes) as new_addtimes'))
+        $rows = MemberQuota::select('join_quota_member_id', 'join_member_rule_added_component_id', Db::raw('MAX(`member_quota_addtimes`) as `new_addtimes`'))
 
 //            ->when(!empty($memberIds), function ($query) use ($placeholders,$pars) {
 //                $query->whereRaw("join_quota_member_id in ($placeholders))", $pars);
@@ -68,7 +69,10 @@ class QuotaController extends Curd
         $sql = sprintf($sql, ...$bindings);
         $total = MemberQuota::from(Db::raw("({$sql}) t"))->count();
 
-        $rows = MemberQuota::from(Db::raw("({$sql}) t"))->orderByDesc('new_addtimes')->forPage($page, $pageSize)
+        $rows = MemberQuota::from(Db::raw("({$sql}) t"))
+            ->orderBy('new_addtimes','desc')
+            // ->orderByDesc('new_addtimes')
+            ->forPage($page, $pageSize)
             ->get()
             ->toArray();
         foreach ($rows as &$row) {
@@ -201,6 +205,7 @@ class QuotaController extends Curd
         ])->where('join_quota_member_id', $memberId)
             ->where('join_member_rule_added_component_id', $componentId)
             ->where('member_quota_status', 'USED')
+            ->orderBy('member_quota_used_json->charge->charge_write_off_time','desc')
             ->get();
 
         return json_success('', $quotas);
@@ -216,11 +221,12 @@ class QuotaController extends Curd
      */
     public function writeOff(Request $request)
     {
-        $memberId = $request->post('member_id', []);
-        $componentId = $request->post('component_id', []);
-        $nbr = $request->post('nbr');
-        $times = $request->post('times', '');
-        $code = $request->post('sms_code', '');
+        $params = $request->post();
+        $memberId = $params['member_id'] ?? [];
+        $componentId = $params['component_id'] ?? [];
+        $nbr = $params['nbr'];
+        $times = $params['times'] ??  '';
+        $code = $params['sms_code'] ?? '';
 
         if (!$memberId || !$componentId) {
             return json_fail("参数异常");
@@ -236,30 +242,31 @@ class QuotaController extends Curd
             return json_fail("可核销数量不足");
         }
 
-        $member = Member::find(current($memberId));
-        $mobile = $member->member_mobile;
-        $key = "SMS:CODE:QUOTA:" . $mobile;
-        $redisCode = Redis::get($key);
-        if ($redisCode != $code) {
-            return json_fail("验证码错误,请重新输入");
-        }
-        Redis::del($key);
+        // $member = Member::find(current($memberId));
+        // $mobile = $member->member_mobile;
+        // $key = "SMS:CODE:QUOTA:" . $mobile;
+        // $redisCode = Redis::get($key);
+        // if ($redisCode != $code) {
+        //     return json_fail("验证码错误,请重新输入");
+        // }
+        // Redis::del($key);
 
         if (!$times) {
-            $times = date('Y-m-d H:i:s');
+            $params['times'] = date('Y-m-d H:i:s');
         } else {
-            $times = date('Y-m-d H:i:s', strtotime($times));
+            $params['times'] = date('Y-m-d H:i:s', strtotime($times));
         }
 
         try {
+            // 生成核销数据
+            $writeOffData = AddedService::generateWriteOffData($params);
             foreach ($quotas as $quota) {
-                $extend = [];
-                if (!empty($quota['member_quota_extend_json'])) {
-                    $extend = json_decode($quota['member_quota_extend_json'], true);
-                }
-                $extend['writeOffTime'] = $times;
+                $writeOffData['member_quota_id'] = $quota['member_quota_id'];
 
-                MemberQuota::where('member_quota_id', $quota['member_quota_id'])->update(['member_quota_status' => 'USED', 'member_quota_extend_json' => $extend]);
+                MemberQuota::where('member_quota_id', $quota['member_quota_id'])->update([
+                    'member_quota_status' => 'USED', 
+                    'member_quota_used_json' => json_encode($writeOffData)
+                ]);
             }
 
         } catch (\Exception $e) {

+ 17 - 3
app/admin/controller/notify/RechargeController.php

@@ -39,9 +39,23 @@ class RechargeController
         }
     }
 
-//    public function paySuccess(Request $request)
-//    {
-//        $id = $request->post('pay_id', null);
+    /*
+    public function paySuccess(Request $request)
+    {
+        $data = $request->post();
+        if (is_json($data)) {
+            $data = json_decode($data, true);
+        }
+        if (!$data['pay_id']) {
+            return json_fail('参数异常');
+        }
+
+        $payDetail = PayDetail::find($data['pay_id']);
+        if (!$payDetail || $payDetail->pay_status != 'SUCCESS') {
+            return json_fail("支付状态异常");
+        }
+     */
+
     public function paySuccess($id)
     {
         if (!$id) {

+ 19 - 3
app/admin/controller/order/WholeController.php

@@ -2,6 +2,7 @@
 
 namespace app\admin\controller\order;
 
+use app\admin\service\order\OrderService;
 use app\admin\validate\coupon\CouponValidate;
 use app\admin\validate\device\DeviceValidate;
 use app\admin\validate\order\OrderExpressValidate;
@@ -18,7 +19,9 @@ use app\model\Order;
 use app\model\OrderExpress;
 use app\model\OrderSheet;
 use app\model\PayDetail;
+use app\model\Premises;
 use app\model\Supplier;
+use app\model\SysDept;
 use app\model\SysSerial;
 use support\Db;
 use support\exception\BusinessException;
@@ -221,6 +224,7 @@ class WholeController extends Curd
                 $account->member_account_expend = $account->member_account_expend + $params['order_sheet_pay'];
                 $account->save();
             }
+
             $goods = Goods::where('goods_id', $params['join_sheet_goods_id'])
                 ->select('goods_id', 'goods_name', 'goods_classify')
                 ->first();
@@ -229,6 +233,12 @@ class WholeController extends Curd
             }
             $goods = $goods->toArray();
 
+            $writeOffDate = [];
+            // 服务已完成,生成核销数据
+            if($params['order_status_system'] == 'DONE' && in_array($goods['goods_classify'],['SERVICE','PACKAGE'])){
+                $writeOffDate = OrderService::generateWriteOffData($params);
+            }
+
             $params['orderId'] = 'OD' . date('YmdHis') . random_string(6, 'up');
             $params['orderGroupId'] = 'OD' . date('YmdHis') . random_string(6, 'up');
             $params['benefitId'] = 'BF' . date('YmdHis') . random_string(6, 'up');
@@ -246,7 +256,7 @@ class WholeController extends Curd
                 for ($i = 0; $i < intval($params['order_sheet_num']); $i++) {
                     $params['appointmentId'] = 'AP' . date('YmdHis') . random_string(6, 'up');
                     // 入预约记录
-                    $this->insertAppointment($params);
+                    $this->insertAppointment($params,$writeOffDate);
                 }
                 $goods['skuId'] = $params['join_sheet_goods_sku_id'];
                 $goods['category'] = 'SERVICE';
@@ -272,7 +282,7 @@ class WholeController extends Curd
                     for ($i = 0; $i < intval($params['order_sheet_num']); $i++) {
                         $params['appointmentId'] = 'AP' . date('YmdHis') . random_string(8, 'up');
                         // 入预约记录
-                        $this->insertAppointment($params);
+                        $this->insertAppointment($params,$writeOffDate);
                     }
                     $goods['goods_id'] = $component['join_component_goods_id'];
                     $goods['goods_name'] = $component['goods']['goods_name'];
@@ -351,6 +361,7 @@ class WholeController extends Curd
                 'order_sheet_price' => $params['order_sheet_price'],
                 'order_sheet_amount' => $params['order_sheet_amount'],
                 'order_sheet_pay' => $params['order_sheet_pay'],
+                'order_sheet_remark'=>$params['order_remark'] ?? '',
                 'order_sheet_addtimes' => time()
             ];
             OrderSheet::insert($data);
@@ -379,6 +390,7 @@ class WholeController extends Curd
                 'pay_amount' => $params['order_sheet_pay'],
                 'pay_prepayid' => 0,
                 'pay_paytimes' => date('Y-m-d H:i:s'),
+                'pay_remark'=>$params['order_remark'] ?? '',
                 'pay_addtimes' => time()
             ];
 
@@ -397,7 +409,7 @@ class WholeController extends Curd
      * @return void
      * @throws BusinessException
      */
-    public function insertAppointment($params)
+    public function insertAppointment($params,$writeOffDate)
     {
         try {
             $data = [
@@ -411,6 +423,9 @@ class WholeController extends Curd
                 'appointment_status' => $params['order_status_system'] == 'DONE' ? 'DONE' : 'INIT',
                 'appointment_category' => 'NORMAL',
                 'appointment_addtimes' => time(),
+                'appointment_done_datetime'=>$params['order_status_system'] == 'DONE' ? date('Y-m-d H:i:s') : '',
+                'appointment_remark' => $params['order_remark'] ?? '',
+                'appointment_done_json' => $params['order_status_system'] == 'DONE' && $writeOffDate ? json_encode($writeOffDate) : []
             ];
             Appointment::insert($data);
         } catch (\Exception $e) {
@@ -444,6 +459,7 @@ class WholeController extends Curd
                 'member_benefit_name' => $goods['goods_name'],
                 'member_benefit_limit_count' => $params['order_sheet_num'],
                 'member_benefit_used_count' => $params['order_status_system'] == 'DONE' ? $params['order_sheet_num'] : 0,
+                'member_benefit_remark' => $params['order_remark'] ?? '',
                 'member_benefit_addtimes' => time()
             ];
             MemberBenefit::insert($data);

+ 12 - 0
app/admin/controller/sys_manage/CategoryController.php

@@ -46,6 +46,18 @@ class CategoryController extends Curd
         return $this->doFormat($query, $format, 1000);
     }
 
+    public function afterQuery($items){
+        $categoryDatas = [];
+        foreach($items as &$item){
+            $categorys = SysCategory::where('category_super_path','like',$item->category_super_path.'%')->paginate(1000)->items();
+            $categoryDatas = array_merge($categorys,$categoryDatas);
+        }
+
+        $items = array_merge($items,$categoryDatas);
+
+        return $items;
+    }
+
     protected function formatTree($items): Response
     {
         $format_items = [];

+ 52 - 0
app/admin/service/added/AddedService.php

@@ -0,0 +1,52 @@
+<?php
+
+namespace app\admin\service\added;
+
+use app\model\Member;
+use app\model\RuleAddedComponent;
+use app\model\SysDept;
+
+class AddedService{
+    public static function generateWriteOffData($params){
+        /*
+        {
+            "charge": {
+                "charge_amount": 1,
+                "charge_content": "",
+                "charge_user_id": "UR202404281156462unjhlct",
+                "charge_premises": "万悦康养"
+            },
+            "member_id": "MR20240320105229O2MGKG",
+            "quota_code": "8636686902",
+            "rule_added_id": "RA0000000000000059LRGB8R",
+            "member_role_id": "MR0000000000000058ZAZVBF",
+            "member_quota_id": "MQ20240604175800GDW66M",
+            "rule_added_component_id": "4",
+            "rule_added_component_classify": "SERVICE"
+        }
+        */
+        // $premises = SysDept::where('dept_id',);
+        $component = RuleAddedComponent::where('rule_added_component_id',$params['component_id'])
+            ->select('rule_added_component_id','join_component_rule_added_id','rule_added_component_classify')
+            ->first();
+        $member = Member::where('member_id',$params['member_id'])
+            ->select('member_id','join_member_role_id')
+            ->first();
+
+        return [
+            'charge'=>[
+                'charge_amount'=>1,
+                'charge_content'=>$params['remark'] ?? '',
+                'charge_user_id'=>$params['write_off_member_id'],
+                'charge_premises'=>$params['dept_premises_id'],
+                'charge_write_off_time'=>$params['times']
+            ],
+            'member_id'=>$params['member_id'],
+            'quota_code'=>random_string(10,'number'),
+            'rule_added_id' => $component->join_component_rule_added_id,
+            'member_role_id'=>$member->join_member_role_id,
+            'rule_added_component_id'=>$params['component_id'],
+            'rule_added_component_classify'=>$component->rule_added_component_classify ?? '',
+        ];
+    }
+}

+ 14 - 1
app/admin/service/goods/GoodsService.php

@@ -400,7 +400,10 @@ class GoodsService
             ->when($keywords != '', function ($query) use ($keywords) {
                 $query->where('goods_name', 'like', "%" . $keywords . "%");
             })
-            ->select('goods_id', 'goods_name', 'goods_sales_price', 'join_goods_category_id')
+            ->when($goodsClassify != '', function ($query) use ($goodsClassify) {
+                $query->where('goods_classify', $goodsClassify);
+            })
+            ->select('goods_id', 'goods_name', 'goods_sales_price', 'join_goods_category_id','goods_attribute_json')
             ->get()
             ->toArray();
 
@@ -424,6 +427,16 @@ class GoodsService
             } else {
                 $good['sku'] = [];
             }
+            $good['premisses'] = [];
+            if(!empty($good['goods_attribute_json'])){
+                $attributeJson = json_decode($good['goods_attribute_json'],true);
+                if (isset($attributeJson['premisses'])){
+                    $premisses = SysDept::whereIn('dept_id',$attributeJson['premisses'])
+                    ->select('dept_id','dept_name')
+                    ->get();
+                    $good['premisses'] = $premisses;
+                }
+            }
         }
 
         return json_success('', $goods);

+ 13 - 0
app/admin/service/order/OrderService.php

@@ -4,6 +4,7 @@ namespace app\admin\service\order;
 
 use app\model\Order;
 use app\model\OrderSheet;
+use app\model\SysDept;
 use support\Db;
 use support\Redis;
 
@@ -64,4 +65,16 @@ class OrderService
             Db::rollBack();
         }
     }
+
+    public static function generateWriteOffData($params) {
+        return [
+            'charge'=>[
+                'charge_amount'=>1,
+                'charge_content'=>$params['order_remark'] ?? '',
+                'charge_user_id'=>$params['write_off_member_id'],
+                'charge_premises'=>$params['dept_premises_id'],
+            ],
+            'member_id'=>$params['join_order_member_id']
+        ];
+    }
 }

+ 5 - 0
route/admin.php

@@ -216,6 +216,10 @@ Route::group('/admin', function () {
             Route::get('/info', [\app\admin\controller\sys_manage\FinanceController::class, 'info']);
             Route::post('/update', [\app\admin\controller\sys_manage\FinanceController::class, 'update']);
         });
+        Route::group('/apartment', function () {
+            Route::get('/info', [\app\admin\controller\content\ApartMentController::class, 'info']);
+            Route::post('/update', [\app\admin\controller\content\ApartMentController::class, 'update']);
+        });
         Route::group('/banner', function () {
             Route::get('/list', [\app\admin\controller\sys_manage\BannerController::class, 'select']);
             Route::post('/add', [\app\admin\controller\sys_manage\BannerController::class, 'insert']);
@@ -546,6 +550,7 @@ Route::group('/admin', function () {
         // 用户管理
         Route::group('', function () {
             Route::get('/selectList', [\app\admin\controller\member\MemberController::class, 'selectList']);
+            Route::get('/selectWriteOffMember', [\app\admin\controller\member\MemberController::class, 'selectWriteOffMember']);
             Route::get('/selectFamilyMemberList', [\app\admin\controller\member\MemberController::class, 'selectFamilyMemberList']);
             Route::get('/balanceInfo', [\app\admin\controller\member\MemberController::class, 'balanceInfo']);
             Route::get('/pointInfo', [\app\admin\controller\member\MemberController::class, 'pointInfo']);