gorden пре 7 месеци
родитељ
комит
f9830dfece

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

@@ -255,6 +255,16 @@ class MemberController
         return MemberService::info($memberId);
     }
 
+    public function welfareInfo(Request $request)
+    {
+        $memberId = $request->get('member_id', '');
+        if (!$memberId) {
+            return json_fail("参数错误");
+        }
+
+        return MemberService::welfareInfo($request);
+    }
+
     public function balanceInfo(Request $request)
     {
         $memberId = $request->get('member_id', '');

+ 57 - 8
app/admin/controller/order/PayDetailController.php

@@ -6,6 +6,7 @@ use app\admin\controller\notify\RechargeController;
 use app\controller\Curd;
 use app\model\Goods;
 use app\model\GoodsSku;
+use app\model\MemberAccount;
 use app\model\Order;
 use app\model\OrderSheet;
 use app\model\PayDetail;
@@ -104,6 +105,9 @@ class PayDetailController extends Curd
         return json_success('', $orderSheet);
     }
 
+    /**
+     * 余额账户充值
+     */
     public function insertRecharge(Request $request): Response
     {
         if ($this->validate && !$this->validateClass->scene('add')->check($request->post())) {
@@ -133,6 +137,46 @@ class PayDetailController extends Curd
         return json_success('success');
     }
 
+    
+    /**
+     * 福利账户充值
+     */
+    public function insertRechargeWelfare(Request $request): Response
+    {
+        if ($this->validate && !$this->validateClass->scene('add')->check($request->post())) {
+            return json_fail($this->validateClass->getError());
+        }
+
+        $password = $request->post('recharge_password','');
+        if(!$password || $password != '123456'){
+            return json_fail('充值密码错误');
+        }
+
+        try {
+            Db::beginTransaction();
+            $data = $this->insertRechargeInput($request);
+            $data['pay_prepayid'] = 'WELFARE';
+            
+            $this->doInsert($data);
+
+            // 金额累加到福利账户
+            $memberAccount = MemberAccount::where('join_account_member_id',$data['join_pay_member_id'])->where('member_account_classify','WELFARE')->first();
+            $memberAccount->member_account_income = $memberAccount->member_account_income + $data['pay_amount'];
+            $memberAccount->member_account_surplus = $memberAccount->member_account_surplus + $data['pay_amount'];
+            $memberAccount->save();
+
+            Db::commit();
+        } catch (BusinessException $customException) {
+            Db::rollBack();
+            return json_fail($customException->getMessage());
+        } catch (\Exception $e) {
+            Db::rollBack();
+            dump($e->getMessage());
+            return json_fail('数据写入失败11');
+        }
+        return json_success('success');
+    }
+
     /**
      * @Desc
      * @Author Gorden
@@ -148,10 +192,13 @@ class PayDetailController extends Curd
         $data = $this->inputFilter($params);
         $goods = Goods::find($params['goods_id']);
         $extendJson = [];
-        if (!$params['is_custom']) {
+        // if (!$params['is_custom']) {
             try {
                 Db::beginTransaction();
-                $data['pay_amount'] = $goods->goods_sales_price;
+                if (!$params['is_custom']){
+                    $data['pay_amount'] = $goods->goods_sales_price;
+                }
+                
 
                 $orderId = "OD" . date("YmdHis") . random_string(6, 'up');
                 $orderGroupId = "OD" . date("YmdHis") . random_string(6, 'up');
@@ -177,7 +224,7 @@ class PayDetailController extends Curd
                     'join_sheet_order_id' => $orderId,
                     'join_sheet_goods_id' => $params['goods_id'],
                     'join_sheet_goods_sku_id' => $sku ? $sku->goods_sku_id : 0,
-                    'order_sheet_status' => 'PAYING',
+                    'order_sheet_status' => 'DONE',
                     'order_sheet_category' => 'NORMAL',
                     'order_sheet_num' => 1,
                     'order_sheet_price' => $data['pay_amount'],
@@ -201,15 +248,17 @@ class PayDetailController extends Curd
             $rate = 0;
             if (!empty($goods->goods_attribute_json)) {
                 $attributeJson = json_decode($goods->goods_attribute_json, true);
-                $rate = $attributeJson['added'] ? $attributeJson['added']['nbr'] : 0;
+                if (isset($attributeJson['added'])){
+                    $rate = $attributeJson['added'] ? $attributeJson['added']['nbr'] : 0;
+                }
             }
 
             $extendJson['added_amount'] = number_format($data['pay_amount'] * $rate, 2, '.', '');
             $extendJson['added_rate'] = $rate;
-        } else {
-//            $extendJson['notify'] = 'success';
-            $extendJson['is_custom'] = $params['is_custom'];
-        }
+//         } else {
+// //            $extendJson['notify'] = 'success';
+//             $extendJson['is_custom'] = $params['is_custom'];
+//         }
         $data['pay_extend_json'] = json_encode($extendJson);
         $data['pay_paytimes'] = date('Y-m-d H:i:s', strtotime($data['pay_paytimes']));
         $data['pay_prepayid'] = 0;

+ 119 - 1
app/admin/service/member/MemberService.php

@@ -95,7 +95,15 @@ class MemberService
             $account = [];
             if (!empty($row['account'])) {
                 foreach ($row['account'] as $item) {
-                    if ($item['member_account_classify'] == 'POINTS') {
+                    if ($item['member_account_classify'] == 'WELFARE') {
+                        $account['welfare'] = [
+                            'member_account_name' => $item['member_account_name'],
+                            'member_account_income' => $item['member_account_income'],
+                            'member_account_expend' => $item['member_account_expend'],
+                            'member_account_surplus' => $item['member_account_surplus'],
+                            'member_account_added' => $item['member_account_added'],
+                        ];
+                    } else if ($item['member_account_classify'] == 'POINTS') {
                         $account['points'] = [
                             'member_account_name' => $item['member_account_name'],
                             'member_account_income' => $item['member_account_income'],
@@ -271,6 +279,115 @@ class MemberService
         return json_success('', $member);
     }
 
+    public static function welfareInfo(Request $request)
+    {
+        $memberId = $request->get('member_id', '');
+        $page = $request->get('page', 1);
+        $pageSize = $request->get('pageSize', 20);
+
+        $account = MemberAccount::where('join_account_member_id', $memberId)
+            ->where('member_account_classify', 'WELFARE')
+            ->first();
+        $balance = $account->member_account_surplus + $account->member_account_added;
+
+        $info = PayDetail::where(function ($query) use ($memberId) {
+            $query->where('join_pay_member_id', $memberId)
+                // ->whereIn('pay_prepayid', ['W06', 'A01'])
+                ->where('pay_category', 'RECHARGE')
+                ->where('pay_prepayid','WELFARE')
+                ->where('pay_status', 'SUCCESS');
+        })->orWhere(function ($query) use ($memberId) {
+            $query->where('join_pay_member_id', $memberId)
+                ->where('pay_prepayid','like', '%WELFARE%')
+                ->where('pay_status', 'SUCCESS');
+        })->orderByDesc('pay_addtimes')
+            ->get()
+            ->toArray();
+        $data = [];
+        foreach ($info as $key => $item) {
+            $categoryIds = [];
+            if(!empty($item['join_pay_order_id'])){
+                $orderIds = Order::where('order_groupby', $item['join_pay_order_id'])->pluck('order_id');
+                $goodsIds = OrderSheet::whereIn('join_sheet_order_id', $orderIds)->pluck('join_sheet_goods_id');
+                $categoryIds = Goods::whereIn('goods_id', $goodsIds)->pluck('join_goods_category_id');
+            }
+            
+
+            $categoryName = [];
+            foreach ($categoryIds as $id) {
+                $category = SysCategory::where('category_id', $id)->first();
+                if (!empty($category->category_super_path)) {
+                    $path = explode('#', $category->category_super_path);
+                    $ids = array_filter($path);
+                    $categoryName[] = SysCategory::where('category_id', current($ids))->value('category_name');
+                } else {
+                    $categoryName[] = $category->category_name;
+                }
+            }
+            $item['goods_category'] = implode(',', array_unique($categoryName));
+
+            if (in_array($item['pay_category'], ['RECHARGE', 'REFUND'])) {
+                $item['balance_type'] = 'add';
+            } else {
+                $item['balance_type'] = 'cut';
+            }
+            if ($key == 0 && in_array($item['pay_category'], ['RECHARGE', 'REFUND'])) {
+                if (!empty($item['pay_extend_json'])) {
+                    $extendJson = json_decode($item['pay_extend_json'], true);
+                    if (!isset($extendJson['added_amount'])) {
+                        $extendJson['added_amount'] = 0;
+                    }
+                    if (isset($extendJson['added_amount']) && floatval($extendJson['added_amount']) > 0) {
+                        $data[] = [
+                            'join_pay_member_id' => $item['join_pay_member_id'],
+                            'pay_addtimes' => $item['pay_addtimes'],
+                            'pay_amount' => $extendJson['added_amount'],
+                            'pay_category' => 'ADDED',
+                            'balance' => number_format($balance, 2, '.', ''),
+                            'balance_type' => 'add',
+                        ];
+                    }
+                    $balance = $balance - $extendJson['added_amount'];
+                }
+
+                $item['balance'] = number_format($balance, 2, '.', '');
+                $balance = $balance - $item['pay_amount'];
+                $data[] = $item;
+                continue;
+            }
+
+            if (in_array($item['pay_category'], ['RECHARGE', 'REFUND'])) {
+                if (!empty($item['pay_extend_json'])) {
+                    $extendJson = json_decode($item['pay_extend_json'], true);
+                    if (isset($extendJson['added_amount']) && floatval($extendJson['added_amount']) > 0) {
+                        $data[] = [
+                            'join_pay_member_id' => $item['join_pay_member_id'],
+                            'pay_addtimes' => $item['pay_addtimes'],
+                            'pay_amount' => $extendJson['added_amount'],
+                            'pay_category' => 'ADDED',
+                            'balance' => number_format($balance, 2, '.', ''),
+                            'balance_type' => 'add',
+                        ];
+                        $balance = $balance - $extendJson['added_amount'];
+                    }
+                }
+                $item['balance'] = number_format($balance, 2, '.', '');
+                $balance = $balance - $item['pay_amount'];
+            } else {
+                $item['balance'] = number_format($balance, 2, '.', '');
+                $balance = $balance + $item['pay_amount'];
+            }
+
+            $data[] = $item;
+        }
+
+        $total = count($data);
+        $start = ($page-1)*$pageSize;
+        $rows = array_slice($data,$start,$pageSize);
+
+        return json_success('', compact('rows', 'page', 'pageSize', 'total'));
+    }
+
     public static function balanceInfo(Request $request)
     {
         $memberId = $request->get('member_id', '');
@@ -286,6 +403,7 @@ class MemberService
             $query->where('join_pay_member_id', $memberId)
                 // ->whereIn('pay_prepayid', ['W06', 'A01'])
                 ->where('pay_category', 'RECHARGE')
+                ->where('pay_prepayid','<>','WELFARE')
                 ->where('pay_status', 'SUCCESS');
         })->orWhere(function ($query) use ($memberId) {
             $query->where('join_pay_member_id', $memberId)

+ 85 - 0
app/command/WelfareAccountCommand.php

@@ -0,0 +1,85 @@
+<?php
+
+namespace app\command;
+
+use app\model\Member;
+use app\model\MemberAccount;
+use app\model\PayDetail;
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class WelfareAccountCommand extends Command
+{
+
+    protected static $defaultName = 'WelfareAccountCommand';
+    protected static $defaultDescription = 'WelfareAccountCommand';
+
+    /**
+     * @return void
+     */
+    protected function configure()
+    {
+        $this->addArgument('name', InputArgument::OPTIONAL, '余额账户转福利账户');
+    }
+
+
+    protected function execute(InputInterface $input, OutputInterface $output): int
+    {
+        $members = Member::select('member_id', 'member_classify')->get()->toArray();
+        foreach ($members as $member) {
+            if (!MemberAccount::where('join_account_member_id', $member['member_id'])->where('member_account_classify', 'WELFARE')->exists()) {
+                if (!$this->generateWelfareAccount($member['member_id'])) {
+                    echo "会员【" . $member['member_id'] . "】跳过\n";
+                    continue;
+                }
+            }
+            if ($member['member_classify'] != 'EMPLOY') {
+                Member::where('member_id', $member['member_id'])->update(['member_classify' => 'EMPLOY']);
+            }
+            // 改所有的充值记录
+            PayDetail::where('join_pay_member_id', $member['member_id'])->where('pay_category', 'RECHARGE')->update(['pay_prepayid' => 'WELFARE']);
+
+            // 改所有的付款记录
+            PayDetail::where('join_pay_member_id', $member['member_id'])->where('pay_prepayid', $member['member_id'] . '-CASH')->update(['pay_prepayid' => $member['member_id'] . '-WELFARE']);
+
+            // 余额账户清空
+           MemberAccount::where('join_account_member_id', $member['member_id'])->where('member_account_classify', 'CASH')->update([
+               'member_account_income' => 0,
+               'member_account_expend' => 0,
+               'member_account_surplus' => 0,
+               'member_account_added' => 0,
+
+           ]);
+
+            echo "会员【" . $member['member_id'] . "】已处理完成\n";
+        }
+
+        return self::SUCCESS;
+    }
+
+    private function generateWelfareAccount($memberId)
+    {
+        $cashAccount = MemberAccount::where('join_account_member_id', $memberId)->where('member_account_classify', 'CASH')->first();
+        if (!$cashAccount) {
+            return false;
+        }
+
+        MemberAccount::insert([
+            'join_account_member_id' => $memberId,
+            'member_account_classify' => 'WELFARE',
+            'member_account_status' => 'ACTIVED',
+            'member_account_category' => 'NORMAL',
+            'member_account_nbr' => $memberId . '-WELFARE',
+            'member_account_name' => '福利账户',
+            'member_account_income' => $cashAccount->member_account_income,
+            'member_account_expend' => $cashAccount->member_account_expend,
+            'member_account_surplus' => $cashAccount->member_account_surplus,
+            'member_account_added' => $cashAccount->member_account_added,
+            'member_account_addtimes' => time()
+        ]);
+
+        return true;
+    }
+}

+ 2 - 0
route/admin.php

@@ -612,6 +612,7 @@ Route::group('/admin', function () {
             Route::get('/selectWriteOffMember', [\app\admin\controller\member\MemberController::class, 'selectWriteOffMember']);
             Route::get('/selectFamilyMemberList', [\app\admin\controller\member\MemberController::class, 'selectFamilyMemberList']);
             Route::get('/selectMemberAllQuota', [\app\admin\controller\member\MemberController::class, 'selectMemberAllQuota']);
+            Route::get('/welfareInfo', [\app\admin\controller\member\MemberController::class, 'welfareInfo']);
             Route::get('/balanceInfo', [\app\admin\controller\member\MemberController::class, 'balanceInfo']);
             Route::get('/pointInfo', [\app\admin\controller\member\MemberController::class, 'pointInfo']);
             Route::get('/list', [\app\admin\controller\member\MemberController::class, 'list']);
@@ -868,6 +869,7 @@ Route::group('/admin', function () {
             Route::get('/list', [\app\admin\controller\order\PayDetailController::class, 'select']);
             Route::get('/goodsOrder',[\app\admin\controller\order\PayDetailController::class,'goodsOrder']);
             Route::post('/insertRecharge',[\app\admin\controller\order\PayDetailController::class,'insertRecharge']);
+            Route::post('/insertRechargeWelfare',[\app\admin\controller\order\PayDetailController::class,'insertRechargeWelfare']);
 //            Route::get('/info', [\app\admin\controller\order\AppointmentController::class, 'info']);
         });
     });