Commit c0685f23 authored by wuxiaoli's avatar wuxiaoli

聚物通资金admin后台接口

parent c0ba9dee
<?php
// +----------------------------------------------------------------------
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
// +----------------------------------------------------------------------
namespace Modules\Member\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\BaseController;
use Modules\Member\Services\PolymerService;
class Polymer extends BaseController{
/**
* @title 积分列表
*
* @param Request $request
* @param PolymerService $service
* @return void
*/
public function index(Request $request, PolymerService $service){
try {
$this->data['data'] = $service->getDataList($request);
} catch (\Exception $e) {
$this->data['code'] = 0;
$this->data['message'] = $e->getMessage();
}
return response()->json($this->data);
}
/**
* @title 添加积分
*
* @param Request $request
* @param PolymerService $service
* @return void
*/
public function add(Request $request, PolymerService $service){
try {
$this->data['data'] = $service->createPolymer(store_id: 0, order_id: 0, member_id: $request->input('member_id'), amount: $request->input('amount'), type: $request->input('type'), account_type: 'system', remark: $request->input('remark'));
} catch (\Exception $e) {
$this->data['code'] = 0;
$this->data['message'] = $e->getMessage();
}
return response()->json($this->data);
}
/**
* @title 修改积分
*
* @param Request $request
* @param PolymerService $service
* @return void
*/
public function edit(Request $request, PolymerService $service){
try {
$this->data['data'] = $service->update($request);
} catch (\Exception $e) {
$this->data['code'] = 0;
$this->data['message'] = $e->getMessage();
}
return response()->json($this->data);
}
/**
* @title 删除积分
*
* @param Request $request
* @param PolymerService $service
* @return void
*/
public function delete(Request $request, PolymerService $service){
try {
$this->data['data'] = $service->delete($request);
} catch (\Exception $e) {
$this->data['code'] = 0;
$this->data['message'] = $e->getMessage();
}
return response()->json($this->data);
}
}
\ No newline at end of file
<?php
// +----------------------------------------------------------------------
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
// +----------------------------------------------------------------------
namespace Modules\Member\Models;
use App\Models\BaseModel;
class MemberPolymer extends BaseModel {
protected $table = 'member_polymer';
protected $fillable = ['store_id', 'order_id', 'member_id', 'type', 'amount', 'bf_amount', 'af_amount', 'status', 'remark'];
// protected $hidden = ['deleted_at'];
public function member() {
return $this->belongsTo(Member::class, 'member_id', 'uid');
}
public function admin(){
return $this->belongsTo(\Modules\Auth\Models\Admin::class, 'member_id', 'uid');
}
public function order(){
return $this->belongsTo(\Modules\Order\Models\OrderItem::class, 'order_id', 'id');
}
}
<?php
// +----------------------------------------------------------------------
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
// +----------------------------------------------------------------------
namespace Modules\Member\Services;
use Modules\Member\Models\Member;
use Modules\Member\Models\MemberPolymer;
class PolymerService {
/**
* @title 获取会员列表
*
* @param [type] $request
* @return void
*/
public function getDataList($request){
$map = [];
$query = MemberPolymer::query();
if ($request->filled('store_id')) {
$map[] = ['store_id', '=', $request->input('store_id')];
}
if ($request->filled('member_id')) {
$map[] = ['member_id', '=', $request->input('member_id')];
}
if ($request->filled('is_user')) {
$map[] = ['member_id', '=', auth('api')->user()['uid']];
$query->whereIn('type', ['income', 'withdraw', 'transfer']);
}
$query->where($map)->orderBy('id', 'desc');
if ($request->filled('username')) {
$query->whereHas('member', function($query) use ($request){
$query->where('username', 'like', '%' . $request->input('username') . '%');
});
}
if ($request->filled('mobile')) {
$query->whereHas('member', function($query) use ($request){
$query->where('mobile', 'like', '%' . $request->input('mobile') . '%');
});
}
if ($request->filled('store_title')) {
$query->whereHas('store', function($query) use ($request){
$query->where('title', 'like', '%' . $request->input('store_title') . '%');
});
}
if ($request->filled('is_admin') && auth('admin')->user()) {
$map[] = ['member_id', '=', auth('admin')->user()['uid']];
$query->whereIn('type', ['service_income', 'service_withdraw', 'service_transfer']);
}else{
$query->whereIn('type', ['income', 'withdraw', 'transfer']);
}
if ($request->filled('type')) {
if (is_string($request->input('type'))){
$map[] = ['type', '=', $request->input('type')];
}else if (is_array($request->input('type'))){
$query->whereIn('type', $request->input('type'));
}
}
$query->where($map);
if($request->filled('page')){
$data = [
'total' => $query->count(),
'page' => $request->input('page', 1),
'data' => $query->offset($request->input('offset', 0))->limit($request->input('limit', 30))->get()->each(function($item){
if (in_array($item->type, ['income', 'withdraw'])){
$item->member = $item->member()->select(['uid', 'username', 'nickname', 'avatar'])->first();
}else if (in_array($item->type, ['service_income', 'service_withdraw'])){
$item->member = $item->admin()->select(['uid', 'username', 'nickname', 'avatar'])->first();
}else{
$item->member = $item->member()->select(['uid', 'username', 'nickname', 'avatar'])->first();
}
}),
];
}else{
$data = $query->limit($request->input('limit', 30))->get();
}
return $data;
}
/**
* @title 添加会员
*
* @param Request $request
* @param MemberService $service
* @return void
*/
public function createPolymer($store_id, $order_id, $member_id, $amount, $type, $account_type, $remark){
if($order_id != 0){
$polymer = MemberPolymer::where('order_id', '=', $order_id)->where('member_id', '=', $member_id)->where('type', '=', $type)->where('account_type', '=', $account_type)->first();
if($polymer){
return $polymer;
}
}
$member = Member::where('uid', $member_id)->first();
if(!$member){
return false;
}
$af_amount = $member['polymer_money'] ? (in_array($type, ['pay', 'transfer']) ? bcsub($member['polymer_money'], $amount) : bcadd($member['polymer_money'], $amount)) : $amount;
$bf_amount = $member['polymer_money'] ? $member['polymer_money'] : 0;
$data = [
'store_id' => $store_id,
'order_id' => $order_id,
'member_id' => $member_id,
'type' => $type,
'account_type' => $account_type,
'amount' => $amount,
'bf_amount' => $bf_amount,
'af_amount' => $af_amount,
'status' => 0,
'remark' => $remark,
];
if ($af_amount < 0){
throw new \Exception("会员积分余额不足!", 0);
}
if (in_array($type, ['pay', 'transfer'])){
$member->polymer_money = bcsub($member->polymer_money, $amount, 2);
}else{
$member->polymer_money = bcadd($member->polymer_money, $amount, 2);
}
$member->save();
$polymer = MemberPolymer::create($data);
return $polymer;
}
/**
* @title 修改会员
*
* @param Request $request
* @param MemberService $service
* @return void
*/
public function update($request){
$request->validate([
'title' => 'required|max:255',
'name' => 'required|max:255|alpha_dash:ascii|unique:member_level,name,' . $request->input('id'),
]);
try {
$polymer = MemberPolymer::findOrFail($request->input('id'));
} catch (\Throwable $th) {
throw new \Exception("会员不存在!", 1);
}
$data = [
'title'=> $request->input('title', ''),
'name' => $request->input('name', ''),
'icon' => $request->input('icon', ''),
'sort' => $request->input('sort', 0),
'status' => $request->input('status', 1),
'remark' => $request->input('remark', ''),
];
$polymer->update($data);
return $polymer;
}
public function delete($request){
if($request->filled('id')){
try {
$polymer = MemberPolymer::findOrFail($request->input('id'));
} catch (\Throwable $th) {
throw new \Exception("会员等级不存在!", 1);
}
$polymer->delete();
}
if($request->filled('ids')){
try {
$polymer = MemberPolymer::whereIn('id', $request->input('ids'));
$polymer->delete();
} catch (\Throwable $th) {
throw new \Exception($th->getMessage(), 1);
}
}
return $polymer;
}
}
......@@ -95,6 +95,26 @@ return new class extends Migration {
$table->collation = 'utf8mb4_unicode_ci';
$table->comment('会员积分表');
});
Schema::create('member_polymer', function (Blueprint $table) {
$table->id()->uniqid()->comment('主键id');
$table->unsignedBigInteger('member_id')->comment('会员id');
$table->unsignedBigInteger('order_id')->comment('订单ID');
$table->unsignedBigInteger('store_id')->comment('店铺ID');
$table->string('type', '20')->nullable()->comment('类型');
$table->string('account_type', '20')->nullable()->comment('账单类型');
$table->decimal('amount', total: 10, places: 2)->default(0)->comment('数量');
$table->decimal('bf_amount', total: 10, places: 2)->default(0)->comment('前数量');
$table->decimal('af_amount', total: 10, places: 2)->default(0)->comment('后数量');
$table->string('remark', 255)->nullable()->comment('备注');
$table->tinyInteger('status')->default(1)->comment('状态 0未用,1已核销');
$table->timestamp('created_at')->nullable()->comment('创建时间');
$table->timestamp('updated_at')->nullable()->comment('更新时间');
$table->engine = 'InnoDB';
$table->charset = 'utf8mb4';
$table->collation = 'utf8mb4_unicode_ci';
$table->comment('会员聚物通表');
});
Schema::create('member_bank', function (Blueprint $table) {
$table->id()->uniqid()->comment('主键id');
$table->unsignedBigInteger('member_id')->comment('会员id');
......@@ -124,6 +144,7 @@ return new class extends Migration {
Schema::dropIfExists('member_address');
Schema::dropIfExists('member_account');
Schema::dropIfExists('member_score');
Schema::dropIfExists('member_polymer');
Schema::dropIfExists('member_bank');
}
};
......@@ -36,6 +36,12 @@ Route::name('member.')->prefix('member')->middleware(['auth.check:admin'])->grou
Route::put('/edit', 'edit')->name('edit');
Route::delete('/delete', 'delete')->name('delete');
});
Route::controller(Modules\Member\Controllers\Admin\Polymer::class)->prefix('polymer')->name('polymer.')->group(function () {
Route::get('/index', 'index')->name('index');
Route::post('/add', 'add')->name('add');
Route::put('/edit', 'edit')->name('edit');
Route::delete('/delete', 'delete')->name('delete');
});
Route::controller(Modules\Member\Controllers\Admin\Promoter::class)->prefix('promoter')->name('promoter.')->group(function () {
Route::get('/index', 'index')->name('index');
Route::put('/audit', 'audit')->name('audit');
......
......@@ -21,6 +21,8 @@ return new class extends Migration {
$table->string('payment_remark')->nullable()->comment('收款备注');
$table->timestamp('created_at')->nullable()->comment('创建时间');
$table->timestamp('updated_at')->nullable()->comment('更新时间');
$table->decimal('polymer_money', total: 10, places: 2)->default(0)->comment('聚物通');
$table->string('pay_way')->nullable()->comment('付款方式');
$table->engine = 'InnoDB';
$table->charset = 'utf8mb4';
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment