Commit 36251951 authored by hangjun83's avatar hangjun83

罗恩工具类更新

parent ba6f28e0
<?php
/*
* This file is part of the Jiannei/lumen-api-starter.
*
* (c) Jiannei <longjian.huang@foxmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace App\Http\Controllers\V1;
use App\Services\RhawnOrdersService;
use Illuminate\Http\Request;
use Jiannei\Enum\Laravel\Repositories\Enums\LogEnum;
use Jiannei\Response\Laravel\Support\Facades\Response;
use App\Http\Controllers\V1\Controller;
use App\Support\Traits\Helpers;
class RhawnOrdersController extends Controller
{
use Helpers;
protected $rhawnOrdersService = null;
public function __construct(RhawnOrdersService $rhawnOrdersService)
{
$this->rhawnOrdersService= $rhawnOrdersService;
}
/**
* 添加一个订单退货人任务
* @param Request $request
* @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
*/
public function addSorderRefundTask(Request $request)
{
$message = [
'name.required' => "任务名称必填",
'orderNo.required' => "订单号必填",
'itemId.required' => "订单购买项必填",
'pId.required' => "订单产品必选",
'handleFee.required' => "手续费费用必填",
'transferPre.required' => "是否转预存必选",
];
$this->validateRequest($request, $message);
try{
$order = $this->rhawnOrdersService->addSordersRefundTask($request);
return Response::success($order, '添加成功');
}catch(\Exception $exception){
return Response::fail($exception->getMessage(),500);
}
}
public function editSorderRefundTask(Request $request)
{
$message = [
'taskId.required' => "任务id必填",
'name.required' => "任务名称必填",
'orderNo.required' => "订单号必填",
'itemId.required' => "订单购买项必填",
'pId.required' => "订单产品必选",
'refundNums.required' => "退货数量必填",
'handleFee.required' => "手续费费用必填",
'transferPre.required' => "是否转预存必选",
];
$this->validateRequest($request, $message);
try{
$order = $this->rhawnOrdersService->addSordersRefundTask($request);
return Response::success($order, '编辑成功');
}catch(\Exception $exception){
return Response::fail($exception->getMessage(),500);
}
}
public function delSorderRefundTask(Request $request)
{
$message = [
'taskId.required' => "任务id必传",
];
$this->validateRequest($request, $message);
try{
$task = $this->rhawnOrdersService->delSorderRefundTask($request);
return Response::success($task, '操作成功');
}catch(\Exception $exception){
return Response::fail($exception->getMessage(),500);
}
}
/**
* 获取订单退货任务列表
* @param Request $request
* @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
*/
public function getSorderRefundTaskToPage(Request $request)
{
$message = [
'type.required' => "类型无效",
];
$this->validateRequest($request, $message);
try{
$task = $this->rhawnOrdersService->getSordersRefundTask($request);
return Response::success($task, '添加成功');
}catch(\Exception $exception){
return Response::fail($exception->getMessage(),500);
}
}
/**
* 获取库存数据
* @param Request $request
* @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
*/
public function getRhawnSordersStock(Request $request)
{
$message = [
'orderItemId.required' => "id必传",
];
$this->validateRequest($request, $message);
try{
$task = $this->rhawnOrdersService->getSordersStock($request);
return Response::success($this->formatKeysfromArray($task), '添加成功');
}catch(\Exception $exception){
return Response::fail($exception->getMessage(),500);
}
}
/**
* 执行罗恩退货任务
* @param Request $request
* @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
*/
public function execRhawnSorderRefundTask(Request $request)
{
$message = [
'taskId.required' => "任务id必填",
];
$this->validateRequest($request, $message);
try{
$this->rhawnOrdersService->execSordersRefundTask($request);
return Response::success([],'操作成功');
}catch(\Exception $exception){
return Response::fail($exception->getMessage(),500);
}
}
/**
* 查询订单详情
* @param Request $request
* @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
*/
public function getSordersDetail(Request $request)
{
$message = [
'orderNo.required' => "订单号必填",
];
$this->validateRequest($request, $message);
try{
$order = $this->rhawnOrdersService->getSorderDetail($request);
return Response::success($this->formatKeysfromArray($order), '更新成功');
}catch(\Exception $exception){
return Response::fail($exception->getMessage(),500);
}
}
public function getSorderRefundTaskLogsToPage(Request $request)
{
$message = [
'taskId.required' => "任务id必填",
];
$this->validateRequest($request, $message);
try{
$logs = $this->rhawnOrdersService->getRhawnSorderTaskLog($request);
return Response::success($this->formatKeysfromArray($logs), '操作成功');
}catch(\Exception $exception){
return Response::fail($exception->getMessage(),500);
}
}
public function getSorderDetailByTaskId(Request $request)
{
$message = [
'taskId.required' => "任务id必填",
];
$this->validateRequest($request, $message);
try{
$logs = $this->rhawnOrdersService->getRhawnSorderDetailByTaskId($request);
return Response::success($this->formatKeysfromArray($logs), '操作成功');
}catch(\Exception $exception){
return Response::fail($exception->getMessage(),500);
}
}
}
<?php
/*
* This file is part of the Jiannei/lumen-api-starter.
*
* (c) Jiannei <longjian.huang@foxmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace App\Jobs;
use App\Repositories\Contracts\RhawnSorderRefundRepository;
use App\Services\RhawnOrdersService;
use Illuminate\Support\Facades\DB;
class RhawnSorderRefundJob extends Job
{
protected $refundInfo;
public function __construct($refundInfo)
{
$this->refundInfo = $refundInfo;
}
/**
* Execute the job.
*/
public function handle()
{
try{
app(RhawnSorderRefundRepository::class)->update(['status' => 'running'],$this->refundInfo['id']);
$note = null;
$refundInfo = json_decode($this->refundInfo['exec_content']);
$service = app(RhawnOrdersService::class);
$service->sOrderRefund($refundInfo,$note);
//对任务进行更新
$update = [];
$update['status'] = 'finish';
$update['exec_nums'] = $this->refundInfo['exec_nums'] + 1;
$update['error_message'] = '';
if($note && count($note) > 0){
$update['error_message'] = json_encode($note,JSON_UNESCAPED_UNICODE);
}
}catch(\Exception $e){
//对任务进行更新
$update = [];
$update['status'] = 'error';
$update['error_message'] = $e->getMessage();
$update['exec_nums'] = intval($this->refundInfo['exec_nums'] + 1);
}
try{
$db = DB::connection('mysql');
$db->beginTransaction();
$update['updated_at'] = date('Y-m-d H:i:s',time());
app(RhawnSorderRefundRepository::class)->update($update,$this->refundInfo['id']);
$logInsert = [];
$logInsert['task_id'] = $this->refundInfo['id'];
if(isset($update['error_message']) && !empty($update['error_message'])){
$logInsert['content'] = $update['error_message'];
}else{
$logInsert['content'] = '执行完成';
}
$logInsert['created_at'] = date('Y-m-d H:i:s',time());
$logInsert['updated_at'] = date('Y-m-d H:i:s',time());
$db->table('task_log')->insertGetId($logInsert);
$db->commit();
}catch(\Exception $e){
$db->rollback();
throw $e;
}
}
}
...@@ -28,6 +28,9 @@ class RepositoryServiceProvider extends LumenRepositoryServiceProvider ...@@ -28,6 +28,9 @@ class RepositoryServiceProvider extends LumenRepositoryServiceProvider
'App\Repositories\Contracts\BhSoitemsRepository' => 'App\Repositories\Eloquent\BhSoitemsRepositoryEloquent', 'App\Repositories\Contracts\BhSoitemsRepository' => 'App\Repositories\Eloquent\BhSoitemsRepositoryEloquent',
'App\Repositories\Contracts\BhSorderRefundRepository' => 'App\Repositories\Eloquent\BhSorderRefundRepositoryEloquent', 'App\Repositories\Contracts\BhSorderRefundRepository' => 'App\Repositories\Eloquent\BhSorderRefundRepositoryEloquent',
'App\Repositories\Contracts\ToolsTaskRepository' => 'App\Repositories\Eloquent\ToolsTaskRepositoryEloquent', 'App\Repositories\Contracts\ToolsTaskRepository' => 'App\Repositories\Eloquent\ToolsTaskRepositoryEloquent',
'App\Repositories\Contracts\RhawnSordersRepository' => 'App\Repositories\Eloquent\RhawnSordersRepositoryEloquent',
'App\Repositories\Contracts\RhawnSoitemsRepository' => 'App\Repositories\Eloquent\RhawnSoitemsRepositoryEloquent',
'App\Repositories\Contracts\RhawnSorderRefundRepository' => 'App\Repositories\Eloquent\RhawnSorderRefundRepositoryEloquent',
]; ];
/** /**
......
<?php
/*
* This file is part of the Jiannei/lumen-api-starter.
*
* (c) Jiannei <longjian.huang@foxmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace App\Repositories\Contracts;
use Prettus\Repository\Contracts\RepositoryInterface;
/**
* Interface UserRepository.
*/
interface RhawnSoitemsRepository extends RepositoryInterface
{
}
<?php
/*
* This file is part of the Jiannei/lumen-api-starter.
*
* (c) Jiannei <longjian.huang@foxmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace App\Repositories\Contracts;
use Prettus\Repository\Contracts\RepositoryInterface;
/**
* Interface UserRepository.
*/
interface RhawnSorderRefundRepository extends RepositoryInterface
{
}
<?php
/*
* This file is part of the Jiannei/lumen-api-starter.
*
* (c) Jiannei <longjian.huang@foxmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace App\Repositories\Contracts;
use Prettus\Repository\Contracts\RepositoryInterface;
/**
* Interface UserRepository.
*/
interface RhawnSordersRepository extends RepositoryInterface
{
}
<?php
/*
* This file is part of the Jiannei/lumen-api-starter.
*
* (c) Jiannei <longjian.huang@foxmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace App\Repositories\Criteria;
use Illuminate\Database\Eloquent\Builder;
use App\Repositories\Criteria\Criteria;
class RhawnSorderRefundCriteria extends Criteria
{
protected function condition(Builder $query): void
{
if($this->request->has('type')){
$query->where('type', '=', $this->request->get('type'));
}
}
protected function after($model)
{
$model->orderbyDesc('id');
return $model;
}
}
<?php
namespace App\Repositories\Eloquent;
use App\Repositories\Contracts\RhawnSoitemsRepository;
use App\Repositories\Contracts\RhawnSordersRepository;
use App\Repositories\Criteria\RequestCriteria;
use App\Repositories\Eloquent\BaseRepository;
use App\Repositories\Models\RhawnSoitems;
use Prettus\Validator\Contracts\ValidatorInterface;
/**
* Class UserRepositoryEloquent.
*/
class RhawnSoitemsRepositoryEloquent extends BaseRepository implements RhawnSoitemsRepository
{
protected $fieldSearchable = [
];
/**
* Specify Model class name.
*
* @return string
*/
public function model()
{
return RhawnSoitems::class;
}
/**
* Boot up the repository, pushing criteria.
*
* @throws \Prettus\Repository\Exceptions\RepositoryException
*/
public function boot()
{
$this->pushCriteria(app(RequestCriteria::class));
}
/**
* 获取订单详情
* @param $orderId
* @return \Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection
*/
public function getSorderItemsDetailFromOrderId($orderId)
{
$order = app(RhawnSordersRepository::class)->find($orderId);
if(!$order){
throw new \LogicException('该订单不存在!',500);
}
//查询订单的详情
$soItems = RhawnSoitems::query()
->join('products','soitems.p_id','products.p_id')
->join('chemicals','products.c_id','chemicals.c_id')
->join('brands','products.b_id','brands.b_id')
->where('soitems.so_id',$order->so_id)->get();
return $soItems;
}
public function getSorderItemsDetailFromItemId($itemId,$pid=null)
{
//查询订单的详情
$soItems = RhawnSoitems::query()
->join('sorders','sorders.so_id','soitems.so_id')
->join('products','soitems.p_id','products.p_id')
->join('chemicals','products.c_id','chemicals.c_id')
->join('brands','products.b_id','brands.b_id')
->where('soitems.si_id',$itemId);
if(!is_null($pid)){
$soItems = $soItems->where('soitems.p_id',$pid);
}
$soItems = $soItems->get();
return $soItems;
}
/**
* 根据si_id获取订单明细项
* @param $si_id
* @return \Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection
*/
public function getSorderItemFromItemId($si_id)
{
$item = $this->find($si_id);
if(!$item){
throw new \LogicException('该订单项不存在!',500);
}
//查询订单的详情
$soItems = RhawnSoitems::query()
->join('products','soitems.p_id','products.p_id')
->where('soitems.si_id',$si_id)->get();
return $soItems;
}
public function getOrderItemsStockFromItemIds($id)
{
$item = $this->find($id);
if(!$item){
throw new \LogicException('该订单项不存在!',500);
}
//查询订单的详情
$soItemStock = RhawnSoitems::query()
->join('dpdetail','dpdetail.si_id','soitems.si_id')
->join('pstock','pstock.pstk_id','dpdetail.pstk_id')
->join('products','soitems.p_id','products.p_id')
->where('soitems.si_id',$id)
->where('si_if_cancel',0)
->where('dpdetail.dpd_invoiced','=',0)
->get();
return $soItemStock;
}
}
<?php
namespace App\Repositories\Eloquent;
use App\Repositories\Contracts\RhawnSorderRefundRepository;
use App\Repositories\Criteria\RequestCriteria;
use App\Repositories\Models\RhawnSorderRefund;
use App\Repositories\Eloquent\BaseRepository;
use Illuminate\Support\Facades\DB;
use Prettus\Validator\Contracts\ValidatorInterface;
/**
* Class UserRepositoryEloquent.
*/
class RhawnSorderRefundRepositoryEloquent extends BaseRepository implements RhawnSorderRefundRepository
{
protected $fieldSearchable = [
];
/**
* Specify Model class name.
*
* @return string
*/
public function model()
{
return RhawnSorderRefund::class;
}
/**
* Boot up the repository, pushing criteria.
*
* @throws \Prettus\Repository\Exceptions\RepositoryException
*/
public function boot()
{
$this->pushCriteria(app(RequestCriteria::class));
}
/**
* 添加退款任务
* @param $request
*/
public function addRefundTask($params)
{
if(empty($params)){
throw new \LogicException('参数为空!',500);
}
$task = [];
$task['name'] = $params['name'];
unset($params['name']);
$task['exec_content'] = json_encode($params);
$task['create_by'] = auth()->user()->id;
$task['status'] = 'notexec';
$task['type'] = 'rhawn_sorder_refund';
if(isset($params['task_id']) && !empty($params['task_id'])){
$id = $params['task_id'];
return $this->update($task,$id);
}else{
return $this->create($task);
}
}
public function delRefundTask($params)
{
if(empty($params)){
throw new \LogicException('参数为空!',500);
}
DB::beginTransaction();
try{
$this->delete($params['task_id']);
DB::table('task_log')
->where('task_id',$params['task_id'])
->delete();
DB::commit();
}catch(\Exception $e){
DB::rollback();
}
}
}
<?php
namespace App\Repositories\Eloquent;
use App\Repositories\Contracts\RhawnSordersRepository;
use App\Repositories\Criteria\RequestCriteria;
use App\Repositories\Models\RhawnSorders;
use App\Repositories\Eloquent\BaseRepository;
use Illuminate\Support\Facades\DB;
use Prettus\Validator\Contracts\ValidatorInterface;
/**
* Class UserRepositoryEloquent.
*/
class RhawnSordersRepositoryEloquent extends BaseRepository implements RhawnSordersRepository
{
protected $fieldSearchable = [
];
/**
* Specify Model class name.
*
* @return string
*/
public function model()
{
return RhawnSorders::class;
}
/**
* Boot up the repository, pushing criteria.
*
* @throws \Prettus\Repository\Exceptions\RepositoryException
*/
public function boot()
{
$this->pushCriteria(app(RequestCriteria::class));
}
/**
* 返回指定订单编号的订单信息
* @param $order_no
* @return mixed
*/
public function getSorderFromOrderNo($orderNo)
{
$where = [
'so_no' => $orderNo
];
return $this->findWhere($where)->first();
}
/**
* 获取订单详情
* @param $orderNo
* @return mixed
*/
public function getSorderItemsFromOrderNo($orderNo){
$soItems = $this
->join('soitems','soitems.so_id','sorders.so_id')
->where('sorders.so_no',$orderNo)->get();
return $soItems;
}
/**
* 获取订单相关信息(包括,产品,客户,品牌等)
* @param $so_id
* @return mixed
*/
public function getSorderDetailFromOrderId($so_id)
{
$sOrderInfo = $this
->join('customers','sorders.cus_id','customers.cus_id')
->where('sorders.so_id',$so_id)
->get();
if(!$sOrderInfo){
return ;
}
$sOrderInfo = current($sOrderInfo->toArray());
$items = DB::connection('bh_mysql')->table('soitems')
->join('products','soitems.p_id','products.p_id')
->join('chemicals','products.c_id','chemicals.c_id')
->join('brands','products.b_id','brands.b_id')
->where('soitems.so_id',$so_id)
->get();
if(!$items){
$sOrderInfo['items'] = [];
}
$sOrderInfo['items'] = $items->toArray();
return $sOrderInfo;
}
}
<?php
/*
* This file is part of the Jiannei/lumen-api-starter.
*
* (c) Jiannei <longjian.huang@foxmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace App\Repositories\Models;
class RhawnSoitems extends Model
{
// 销售订单
protected $table = 'soitems';
protected $connection = 'rhawn_mysql';
protected $primaryKey = 'si_id';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
];
protected $guarded = ['created_at', 'updated_at'];
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = [
];
/**
* update时不做自动更新时间操作
* @return null
*/
public function getUpdatedAtColumn()
{
return null;
}
public function getCreatedAtColumn()
{
return null;
}
}
\ No newline at end of file
<?php
/*
* This file is part of the Jiannei/lumen-api-starter.
*
* (c) Jiannei <longjian.huang@foxmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace App\Repositories\Models;
class RhawnSorderRefund extends Model
{
protected $table = 'tools_task';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'id','name','exec_content','status','error_message','type','exec_nums','create_by'
];
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = [
];
}
\ No newline at end of file
<?php
/*
* This file is part of the Jiannei/lumen-api-starter.
*
* (c) Jiannei <longjian.huang@foxmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace App\Repositories\Models;
class RhawnSorders extends Model
{
// 销售订单
protected $table = 'sorders';
protected $connection = 'rhawn_mysql';
protected $primaryKey = 'so_id';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
];
protected $guarded = ['created_at', 'updated_at'];
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = [
];
/**
* update时不做自动更新时间操作
* @return null
*/
public function getUpdatedAtColumn()
{
return null;
}
public function getCreatedAtColumn()
{
return null;
}
}
\ No newline at end of file
...@@ -222,7 +222,7 @@ class BhOrdersService ...@@ -222,7 +222,7 @@ class BhOrdersService
$user = AdminUsers::find($item['create_by']); $user = AdminUsers::find($item['create_by']);
$item['create_by'] = $user->username; $item['create_by'] = $user->username;
$item['content_string'] = implode(' . ',$contentArr); $item['content_string'] = implode('<br / >',$contentArr);
$item = array_merge($item,$execArr); $item = array_merge($item,$execArr);
return $item; return $item;
}); });
......
<?php
/*
* This file is part of the Jiannei/lumen-api-starter.
*
* (c) Jiannei <longjian.huang@foxmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace App\Services;
use App\Jobs\RhawnSorderRefundJob;
use App\Repositories\Contracts\BhPordersRepository;
use App\Repositories\Contracts\BhSordersRepository;
use App\Repositories\Contracts\RhawnSoitemsRepository;
use App\Repositories\Contracts\RhawnSorderRefundRepository;
use App\Repositories\Contracts\RhawnSordersRepository;
use App\Repositories\Contracts\ToolsTaskRepository;
use App\Repositories\Criteria\RhawnSorderRefundCriteria;
use App\Repositories\Enums\ResponseCodeEnum;
use App\Repositories\Models\AdminUsers;
use App\Support\Traits\Helpers;
use Illuminate\Support\Facades\DB;
class RhawnOrdersService
{
use Helpers;
/**
* 获取订单详情
* @param $request
*/
public function getSorderDetail($request)
{
$params = $this->formatKeysfromArray($request->all(),'toUnderScore');
if(!isset($params['order_no']) || empty($params['order_no'])){
throw new BadQueryStringException('订单编号错误',500);
}
$sOrder = app(RhawnSordersRepository::class)->getSorderFromOrderNo($params['order_no']);
if(!$sOrder){
throw new \LogicException('该订单编号不存在!',500);
}
//查询订单的详情
$soItems = app(RhawnSoitemsRepository::class)->getSorderItemsDetailFromOrderId($sOrder->so_id);
$soItems = $soItems->toArray();
$returnItem = [];
if($soItems){
foreach($soItems as $item){
$temp = [];
$temp['b_cn_name'] = $item['b_cn_name'];
$temp['p_code'] = $item['p_code'];
$temp['c_cas'] = $item['c_cas'];
$temp['p_cn_name'] = $item['p_cn_name'];
$temp['si_price'] = $item['si_price'];
$temp['si_discount'] = $item['si_discount'];
$temp['si_p_tod'] = $item['si_p_tod'];
$temp['si_num'] = $item['si_num'];
$temp['si_amount'] = $item['si_amount'];
$temp['si_vamount'] = $item['si_vamount'];
$temp['si_note'] = $item['si_notes'];
$temp['si_num'] = $item['si_num'];
$temp['p_id'] = $item['p_id'];
$temp['si_id'] = $item['si_id'];
$temp['so_no'] = $sOrder->so_no;
if($item['si_if_cancel'] == 0){
$returnItem[] = $temp;
}
}
}
return $returnItem;
}
/**
* 获取销售订单库存批次
* @param $request
*/
public function getSordersStock($request)
{
$params = $this->formatKeysfromArray($request->all(),'toUnderScore');
$repository = app(RhawnSoitemsRepository::class);
$result = $repository->getOrderItemsStockFromItemIds($params['order_item_id']);
$returnItemStock = [];
if($result && !empty($result)){
foreach($result as $res){
$temp = [];
$temp['dpd_num'] = $res['dpd_num'];
$temp['si_id'] = $res['si_id'];
$temp['pstk_id'] = $res['pstk_id'];
$temp['pstk_num'] = $res['pstk_num'];
$temp['pstk_no'] = $res['pstk_no'];
$returnItemStock[] = $temp;
}
}
return $returnItemStock;
}
public function addSordersRefundTask($request)
{
$params = $this->formatKeysfromArray($request->all(),'toUnderScore');
$sOrder = app(RhawnSordersRepository::class)->getSorderFromOrderNo($params['order_no']);
if(!$sOrder){
throw new \LogicException('该订单编号不存在!',500);
}
if(isset($params['task_id']) && !empty($params['task_id'])){
if(!app(RhawnSorderRefundRepository::class)->find($params['task_id'])){
throw new \LogicException('该任务不存在!',500);
}
}
if($params['transfer_pre'] == 'true'){
$params['transfer_pre'] = 1;
}else{
$params['transfer_pre'] = 0;
}
//先查询库存信息
$repository = app(RhawnSoitemsRepository::class);
$stockResult = $repository->getOrderItemsStockFromItemIds($params['item_id']);
if(empty($stockResult) || !$stockResult){
throw new \LogicException('订单明细id不存在!',500);
}
// 验证库存和发货数量
if(!empty($params['refund_nums'])){
$pstk_ids = $refundNums = [];
foreach (explode(',',$params['refund_nums']) as $num) {
$pstkArr = explode('|', $num);
$refundNums[$pstkArr[0]] = $pstkArr[1];
$pstk_ids[] = $pstkArr[0];
}
//分组查询发货数量
$dbConnect = DB::connection('rhawn_mysql');
$dpdSum = $dbConnect->table('dpdetail')
->whereIn('pstk_id', $pstk_ids)
->where('dpd_invoiced', '=', 0)
->groupBy('pstk_id')
->select(DB::raw("sum(dpd_num) as num"),)
->get();
if (!$dpdSum || empty($dpdSum)) {
throw new \LogicException('【' . implode(',', $pstk_ids) . '】对应的配货单数据不存在', 500);
}
if (count($dpdSum) < count($refundNums)) {
throw new \LogicException('需要退货的配送单不存在或已开票', 500);
}
collect($dpdSum)->map(function ($dpd) use ($refundNums) {
foreach ($refundNums as $num) {
if ($num > $dpd) {
throw new \LogicException('退货数量大于购买数量', 500);
}
}
});
}
return app(RhawnSorderRefundRepository::class)->addRefundTask($params);
}
/**
* 删除销售订单退货任务
* @param $request
* @return mixed
*/
public function delSorderRefundTask($request)
{
$params = $this->formatKeysfromArray($request->all(),'toUnderScore');
if(isset($params['task_id']) && !empty($params['task_id'])){
if(!app(RhawnSorderRefundRepository::class)->find($params['task_id'])){
throw new \LogicException('该任务不存在!',500);
}
}
return app(RhawnSorderRefundRepository::class)->delRefundTask($params);
}
/**
* 获取订单退货任务
* @param $request
* @return array
*/
public function getSordersRefundTask($request)
{
$params = $this->formatKeysfromArray($request->all(),'toUnderScore');
if(!$params['page_size'] || $params['page_size'] == 0){
$params['page_size'] = 10;
}
$repostiroy = app(RhawnSorderRefundRepository::class);
$repostiroy->pushCriteria(new RhawnSorderRefundCriteria($request));
$tasks = $repostiroy->customPaginate($params['page_size']);
if($tasks){
$allItems = collect($tasks['data'])->map(function($item){
$contentArr= [];
$execArr = json_decode($item['exec_content'],true);
foreach($execArr as $key => $content){
switch($key){
case 'order_no' : $contentArr[] = '【销售订单号】:'.$content; break;
case 'refund_nums' :
if(!empty($content)){
$nums = explode(',',$content);
$subContentArr = [];
foreach($nums as $k => $num){
$temp = explode('|',$num);
$subContentArr[] = '<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;【批号id】:'.$temp[0];
$subContentArr[] = '<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;【退货数量】:'.$temp[1];
}
$contentArr[] = '【现货退货数量】:'.implode("", $subContentArr); break;
}else{
$contentArr[] = '【现货退货数量】:0'; break;
}
case 'handle_fee' : $contentArr[] = '【手续费费用】:'.$content; break;
case 'item_id' : $contentArr[] = '【销售订单明细项】:'.$content; break;
case 'transfer_pre' :
$content = $content == '1' ? '是' : '否';
$contentArr[] = '【是否转预存】:'.$content; break;
case 'futures_num' :
$contentArr[] = '【期货退货数量】:'.$content; break;
}
}
$user = AdminUsers::find($item['create_by']);
$item['create_by'] = $user->username;
$item['content_string'] = implode('<br />',$contentArr);
$item = array_merge($item,$execArr);
return $item;
});
$tasks['data'] = $allItems->toArray();
$tasks = $this->formatKeysfromArray($tasks);
}
return $tasks;
}
/**
* 通过任务id获取销售订单任务详情
* @param $request
* @return array
*/
public function getRhawnSorderDetailByTaskId($request)
{
$params = $this->formatKeysfromArray($request->all(),'toUnderScore');
$task = app(RhawnSorderRefundRepository::class)->find($params['task_id']);
if(!$task){
throw new \LogicException('任务不存在!',500);
}
$task = $task->toArray();
$content = json_decode($task['exec_content'],true);
$pstkNums = [];
if(!empty($content['refund_nums'])){
foreach(explode(',',$content['refund_nums']) as $num){
$numArr = explode('|',$num);
$pstkNums[$numArr[0]] = $numArr[1];
}
}
//获取销售订单item数据
$result = app(RhawnSoitemsRepository::class)->getOrderItemsStockFromItemIds($content['item_id']);
$returnItemStock = [];
if($result && !empty($result)){
foreach($result as $res){
$temp = [];
$temp['dpd_num'] = $res['dpd_num'];
$temp['si_id'] = $res['si_id'];
$temp['pstk_id'] = $res['pstk_id'];
$temp['pstk_num'] = $res['pstk_num'];
$temp['pstk_no'] = $res['pstk_no'];
$temp['p_cn_name'] = $res['p_cn_name'];
$temp['refund_nums'] = $pstkNums[$res['pstk_id']];
$returnItemStock[] = $temp;
}
}
return $returnItemStock;
}
/**
* 手动执行脚本
* @param $request
*/
public function execSordersRefundTask($request)
{
$params = $this->formatKeysfromArray($request->all(),'toUnderScore');
$orderRefund = app(RhawnSorderRefundRepository::class)->find($params['task_id']);
$refundJob = (new RhawnSorderRefundJob($orderRefund->toArray()))->delay(100)->onQueue('slow');
app('Illuminate\Contracts\Bus\Dispatcher')->dispatch($refundJob);
}
/**
* 处理退货逻辑
* @param $refundInfo
*/
public function sOrderRefund($refundInfo,&$note)
{
$sOrder = app(RhawnSordersRepository::class)->getSorderItemsFromOrderNo($refundInfo->order_no);
if(!$sOrder){
throw new \LogicException('该订单号不存在!',500);
}
try{
$dbConnect = DB::connection('rhawn_mysql');
$dbConnect->beginTransaction();
// 处理订单退货项
foreach($sOrder->toArray() as $orderitem){
if($refundInfo->item_id == $orderitem['si_id']) {
// 先处理源数据
$currentPrice = floatval($orderitem['si_discount']);
$currentAmount = floatval($orderitem['si_amount']);
// 退货剩余数量
$numArr = !empty($refundInfo->refund_nums) ? explode(',', $refundInfo->refund_nums) : '';
$futuresNum = $refundInfo->futures_num && $refundInfo->futures_num > 0 ? $refundInfo->futures_num : 0 ;
// 预判断退货数量
if (!empty($numArr)) {
$pstk_ids = [];
$refundNums = [];
foreach ($numArr as $num) {
$pstkArr = explode('|', $num);
$refundNums[$pstkArr[0]] = $pstkArr[1];
$pstk_ids[] = $pstkArr[0];
}
//分组查询发货数量
$dpdSum = $dbConnect->table('dpdetail')
->whereIn('pstk_id', $pstk_ids)
->where('dpd_invoiced', '=', 0)
->groupBy('pstk_id')
->select(DB::raw("sum(dpd_num) as num"),)
->get();
if (!$dpdSum || empty($dpdSum)) {
throw new \LogicException('【' . implode(',', $pstk_ids) . '】对应的配货单数据不存在', 500);
}
if (count($dpdSum) < count($refundNums)) {
throw new \LogicException('需要退货的配送单不存在或已开票', 500);
}
collect($dpdSum)->map(function ($dpd) use ($refundNums) {
foreach ($refundNums as $num) {
if ($num > $dpd) {
throw new \LogicException('退货数量大于购买数量', 500);
}
}
});
}
// 如果是期货,强行初始一个数组执行一次
if($futuresNum > 0){
$refundNums[0] = $futuresNum;
}
if (!empty($refundNums)) {
foreach ($refundNums as $pstk_id => $num) {
$currentProcessNums = $num;
// 如果有期货数量优先处理
if ($futuresNum > 0) {
$currentProcessNums = $futuresNum;
}
//修改item数据项
$service = app(RhawnSoitemsRepository::class);
$soItem = $service->findWhere(['si_id' => $orderitem['si_id'], 'si_if_cancel' => 0]);
$soItem = current($soItem->toArray());
if (empty($soItem) || count($soItem) == 0) {
throw new \LogicException('购买项数据id:' . $orderitem['si_id'] . '数据不存在或已取消!', 500);
}
// 判断有期货的时候退货数量是否大于soitem的数量
if($futuresNum > 0 && $futuresNum > $soItem['si_assigned_num']){
throw new \LogicException('期货退货数量大于已分配数量', 500);
}
// 判断现货退货数量是否大于soitem的数量
if($num > ($soItem['si_num'] - $soItem['si_assigned_num'])){
throw new \LogicException('现货退货数量大于已分配数量', 500);
}
//更新原本数据
$updateArr = [];
$createArr = [];
$updatedItem = [];
//如果取消的是全部
if (($currentProcessNums - $orderitem['si_num']) == 0) {
// 如果需要手续费
if (isset($refundInfo->handle_fee) && $refundInfo->handle_fee > 0) {
$createArr = $soItem;
unset($createArr['si_id']);
$createArr['si_num'] = $orderitem['si_num'];
$createArr['si_assigned_num'] = $createArr['si_num'];
$createArr['si_amount'] = bcsub($orderitem['si_amount'], $refundInfo->handle_fee, 2);
$createArr['si_discount'] = bcdiv($createArr['si_amount'], $orderitem['si_num'], 2);
$updateArr['si_num'] = $currentProcessNums;
//$updateArr['si_assigned_num'] = $updateArr['si_num'];
$updateArr['si_amount'] = $refundInfo->handle_fee;
$updateArr['si_discount'] = bcdiv($updateArr['si_amount'], $currentProcessNums, 2);
} else {
$updatedItem['cancel_si_id'] = $orderitem['si_id'];
}
} // 部分退货
else {
if ($futuresNum > 0) {
$updateArr['si_num'] = $orderitem['si_num'] - $futuresNum;
$updateArr['si_assigned_num'] = $orderitem['si_assigned_num'] - $futuresNum;
} else {
$updateArr['si_num'] = bcsub($orderitem['si_num'], $currentProcessNums); // 如果数量只有1,且退货数量相等
//$updateArr['si_assigned_num'] = $updateArr['si_num'];
}
$updateArr['si_amount'] = bcmul(
$orderitem['si_discount'],
$updateArr['si_num'],
2
);
if (isset($refundInfo->handle_fee) && $refundInfo->handle_fee > 0) {
$updateArr['si_amount'] = bcadd($updateArr['si_amount'], $refundInfo->handle_fee, 2);
}
$updateArr['si_discount'] = bcdiv($updateArr['si_amount'], $updateArr['si_num'], 2);
// 新增
$createArr = $soItem;
unset($createArr['si_id']);
$createArr['si_num'] = $currentProcessNums;
if (isset($refundInfo->handle_fee) && floatval($refundInfo->handle_fee) > 0) {
$createArr['si_amount'] = abs(bcsub($currentAmount, $updateArr['si_amount'], 2));
$createArr['si_discount'] = bcdiv($createArr['si_amount'], $createArr['si_num'], 2);
} // 没有手续费的情况下
else {
$createArr['si_discount'] = $soItem['si_discount'];
$createArr['si_amount'] = bcmul($soItem['si_discount'], $currentProcessNums, 2);
}
$createArr['si_num'] = $currentProcessNums;
if ($futuresNum > 0) {
$createArr['si_assigned_num'] = 0;
} else {
$createArr['si_assigned_num'] = $createArr['si_num'];
}
if ($createArr['si_amount'] < 0) {
throw new \LogicException('手续费异常,处理失败!', 500);
}
}
if (!empty($updateArr)) {
$update = $service->update($updateArr, $soItem['si_id']);
$updatedItem['update'] = $update->toArray();
} else {
$updatedItem['update'] = $orderitem;
}
//判断是否能除尽
if (!empty($updateArr)) {
$amount = bcmul($updateArr['si_discount'], $updateArr['si_num'], 2);
if ($updateArr['si_amount'] != $amount) {
$note[] = 'si_id = ' . $soItem['si_id'] . '的数据有除不尽的情况,请手工处理';
}
}
if (!empty($createArr)) {
$newItem = $service->create($createArr);
$updatedItem['create'] = $newItem->toArray();
// 如果是部分退货
if ($currentProcessNums > 0 || ($currentProcessNums == 0 && $refundInfo->handle_fee > 0)) {
$updatedItem['cancel_si_id'] = $updatedItem['create']['si_id'];
}
} else {
$updatedItem['create'] = $soItem;
$updatedItem['cancel_si_id'] = $updatedItem['create']['si_id'];
}
$updatedItem['total'] = $currentAmount;
// 如果没有期货数量,dpdetail只处理现货数量
if ($futuresNum == 0) {
// 获取实际现货数量
$dpdDetail = $dbConnect->table('dpdetail')
->where('si_id', $orderitem['si_id'])
->where('pstk_id', $pstk_id)
->get()->first();
//$dpdDetail = $dpdDetail->toArray();
if($dpdDetail) {
// 更新当前记录
$dpUpdateArr = [];
$dpUpdateArr['dpd_num'] = $dpdDetail->dpd_num - $currentProcessNums;
$dpUpdateArr['dpd_amount'] = bcmul($updatedItem['update']['si_discount'], $dpUpdateArr['dpd_num'], 2);
$dbConnect->table('dpdetail')
->where('dpd_id',$dpdDetail->dpd_id)
->update($dpUpdateArr);
// 如果是部分退货
if ($currentProcessNums < $dpdDetail->dpd_num) {
//添加新的取消记录
$dpCreateArr = $dpdDetail;
unset($dpCreateArr->dpd_id);
$dpCreateArr->dpd_num = $currentProcessNums;
$dpCreateArr->dpd_amount = bcmul($updatedItem['create']['si_discount'], $currentProcessNums, 2);
$dpCreateArr->si_id = $updatedItem['create']['si_id'];
$dpId = $dbConnect->table('dpdetail')->insertGetId((array)$dpCreateArr);
}
}
}
//预存款和退款处理
$this->cancelAndTransPrePay($dbConnect, $updatedItem['cancel_si_id'], $refundInfo);
if ($currentProcessNums > 0) {
if ($futuresNum > 0) {
$futuresNum = 0;
}
$currentProcessNums = 0;
} else {
break;
}
}
}
}
}
$dbConnect->commit();
}catch(\Exception $e){
$dbConnect->rollBack();
throw $e;
}
}
/**
* 取消并转预存
* @param $db
* @param $si_id
*/
protected function cancelAndTransPrePay($db,$si_id,$refundInfo)
{
//获取订单明细项
$sOrderItem = app(RhawnSoitemsRepository::class)->getSorderItemFromItemId($si_id);
$sOrderItem = current($sOrderItem->toArray());
if($sOrderItem['si_if_cancel'] == 1){
throw new \LogicException('已经取消过了,请不要重复操作!',500);
}
$sOrderDetail = app(RhawnSordersRepository::class)->getSorderDetailFromOrderId($sOrderItem['so_id']);
if(!$sOrderDetail){
throw new \LogicException('数据不存在!',500);
}
$sOrderDetail['express'] = 0;
foreach($sOrderDetail['items'] as $k=>$v){
if($v->p_id == 0){
$sOrderDetail['express'] = $v->si_amount;
unset($sOrderDetail['items'][$k]);
}
}
/*if($sOrderDetail['so_pay_status'] == 0){
throw new \LogicException('未完成付款的订单不能取消转预存款!',500);
}*/
if($sOrderDetail['so_pay_status'] == 1){
throw new \LogicException('部分付款的订单不能取消明细,请联系管理员!',500);
}
if($sOrderItem['pi_id'] > 0){
//判断对应的采购订单明细是否已经取消
$pOrderItems = $db->table('poitems')
->join('porders','poitems.po_id','porders.po_id')
->where('poitems.pi_id',$sOrderItem['pi_id'])
->first();
if(!$pOrderItems){
throw new \LogicException('查询采购订单明细 ['.$sOrderItem['pi_id'].'] 数据不存在!',500);
}
if($pOrderItems->pi_status != 3 && $refundInfo->cancel_porder == 1){
throw new \LogicException('请先取消采购订单:'.$pOrderItems->po_no.'中的对应采购订单明细!');
}
}
if($sOrderItem['si_assigned_num'] > 0){
$dp_status = array();
$invoiced_amount = 0;
$dpdetailInfos = $db->table('dpdetail')
->join('dispatch','dpdetail.dp_id','dispatch.dp_id')
->where('dpdetail.si_id',$sOrderItem['si_id'])
->get();
if(!$dpdetailInfos){
throw new \LogicException('dpdetail ['.$sOrderItem['si_id'].'] 配货单数据不存在!',500);
}
foreach($dpdetailInfos as $k=>$v){
$dp_status[] = $v->dp_status;
$invoiced_amount += $v->dpd_invoiced;
}
if($invoiced_amount != 0){
throw new \LogicException('已经开过发票,不能取消!',500);
}
$dp_status = array_unique($dp_status);
if(in_array('0',$dp_status) || in_array('1',$dp_status)){
throw new \LogicException('请物流部配合处理至已发货状态,再做取消操作!',500);
}
}
// 具体处理退货并转预存
$si_cancel_time = 0;
$siAmountTotal = $db->table('soitems')
->where('so_id',$sOrderItem['so_id'])
->where('si_id','<>',$si_id)
->where('si_if_cancel',0)
->sum('si_amount');
$siAmountTotalPid = $db->table('soitems')
->where('so_id',$sOrderItem['so_id'])
->where('si_id','<>',$si_id)
->where('si_if_cancel',0)
->where('p_id','>',0)
->sum('si_amount');
$soItem = app(RhawnSoitemsRepository::class)->find($si_id);
if($soItem){
if($soItem['si_assigned_num']){
$dp = $db->table('dpdetail')->where('si_id',$si_id)->get();
$dp = $dp->toArray();
foreach($dp as $k=>$v){
if($v->dp_id == 0 && $v->stk_id > 0){
//清除已配货记录
$stock = $db->table('stock')->where('stk_id',$v['stk_id'])->get();
$stock = current($stock->toArray());
$stock_data = array();
$stock_data['stk_lock_num'] = $stock->stk_lock_num - $v->dpd_num;
if($stock_data['stk_lock_num'] < 0){
$stock_data['stk_lock_num'] = 0;
}
$db->table('stock')
->where('stk_id',$v->stk_id)
->update($stock_data);
$db->table('dpdetail')
->delete($v->dpd_id);
$si_assigned_num = $soItem['si_assigned_num'] - $v->dpd_num;
app(RhawnSoitemsRepository::class)->update(['si_patch_status'=>'0','si_assigned_num'=>$si_assigned_num],$si_id);
}
}
}
}
$customer = $db->table('customers')
->where('cus_id',$sOrderDetail['cus_id'])
->first();
//判断是否是最后一条非运费明细
$note = $sOrderDetail['so_no'].'取消明细:'.$soItem['p_code'];
if($siAmountTotalPid > 0){
$refund_amount = $soItem['si_amount'];
if($sOrderDetail['so_pay_status'] > 0){
// 退款
if($refundInfo->transfer_pre == 0){
$refund_data = [];
$refund_data['r_company'] = $customer->cus_company;
$refund_data['r_amount'] = $refund_amount;
$refund_data['r_ctime'] = time();
$refund_data['r_note'] = $note;
$refund_data['r_bank_account'] = '';
$refund_data['r_confirm_note'] = '';
$db->table('refund')->insertGetId($refund_data);
}else{
$prepaylog_data = [];
$prepaylog_data['cus_id'] = $sOrderDetail['cus_id'];
$prepaylog_data['prepaylog_amount'] = $refund_amount;
$prepaylog_data['prepaylog_note'] = $note;
$prepaylog_data['prepaylog_date'] = time();
$prepaylog_data['prepaylog_time'] = time();
$prepaylog_data['prepaylog_operator'] = auth()->user()->id;
$prepaylog_data['prepaylog_unpay'] = 0;
$prepaylog_data['prepaylog_if_abnormal'] = 0;
$prepaylog_data['prepaylog_if_deposit'] = 0;
$prepaylog_data['prepaylog_if_deal'] = 0;
$prepayId = $db->table('prepaylog')->insertGetId($prepaylog_data);
$sum = $db->table('prepaylog')
->where('cus_id',$sOrderDetail['cus_id'])
->sum('prepaylog_amount');
$db->table('customers')
->where('cus_id',$sOrderDetail['cus_id'])
->update(['cus_prepay' => $sum]);
$si_cancel_time = time();
}
}
app(RhawnSordersRepository::class)->update(['so_total'=>$siAmountTotal],$sOrderItem['so_id']);
app(RhawnSoitemsRepository::class)->update(['si_if_cancel'=>'1','si_cancel_time'=>$si_cancel_time],$si_id);
}else {
if($sOrderDetail['so_pay_status'] > 0){
//得到退款金额
$sOrder = app(BhSordersRepository::class)->find($sOrderItem['so_id']);
if (!$sOrder) {
throw new \LogicException('数据不存在!', 500);
}
$sOrder = $sOrder->toArray();
$refund_amount = $sOrder['so_total'];
if($refundInfo->transfer_pre == 0){
$refund_data = array();
$refund_data['r_company'] = $customer->cus_company;
$refund_data['r_amount'] = $refund_amount;
$refund_data['r_ctime'] = time();
$refund_data['r_note'] = $note;
$refund_data['r_bank_account'] = '';
$refund_data['r_confirm_note'] = '';
$db->table('refund')->insertGetId($refund_data);
}else{
$prepaylog_data = [];
$prepaylog_data['cus_id'] = $sOrderDetail['cus_id'];
$prepaylog_data['prepaylog_amount'] = $refund_amount;
$prepaylog_data['prepaylog_note'] = $note;
$prepaylog_data['prepaylog_date'] = time();
$prepaylog_data['prepaylog_time'] = time();
$prepaylog_data['prepaylog_operator'] = auth()->user()->id;
$prepaylog_data['prepaylog_unpay'] = 0;
$prepaylog_data['prepaylog_if_abnormal'] = 0;
$prepaylog_data['prepaylog_if_deposit'] = 0;
$prepaylog_data['prepaylog_if_deal'] = 0;
$prepayId = $db->table('prepaylog')->insertGetId($prepaylog_data);
$sum = $db->table('prepaylog')
->where('cus_id', $sOrderDetail['cus_id'])
->sum('prepaylog_amount');
$db->table('customers')
->where('cus_id', $sOrderDetail['cus_id'])
->update(['cus_prepay' => $sum]);
$si_cancel_time = time();
}
}
app(RhawnSordersRepository::class)->update(['so_review_status' => '3', 'so_total' => '0'], $sOrderItem['so_id']);
app(RhawnSoitemsRepository::class)->update(['si_if_cancel' => '1', 'si_cancel_time' => $si_cancel_time], $si_id);
}
$db->table('logs')->insertGetId(
['l_obj'=>$sOrderItem['so_id'],'l_type'=>'sorders_mng','l_op'=>'cancelsi','l_op_name'=>'取消明细','l_note'=>$note,'l_timestamp'=>time(),'u_id'=>auth()->user()->id]
);
return true;
}
public function getRhawnSorderTaskLog($request)
{
$params = $this->formatKeysfromArray($request->all(),'toUnderScore');
if(!isset($params['type']) || empty($params['type'])){
$params['type'] = 'rhaw_nsorder_refund';
}
$taskService = app(ToolsTaskRepository::class);
$taskLogsList = $taskService->getTaskLogsFromType($params['type'],$params['task_id']);
return $taskLogsList;
}
}
<?php
namespace App\Support\Traits;
use App\Repositories\Contracts\MenusRepository;
use App\Repositories\Models\AdminUsers;
use App\Services\RoleAndPermissionsService;
use App\Repositories\Models\Menus;
use Illuminate\Support\Str;
use Spatie\Permission\Models\Permission;
trait InitMenusAndPermission
{
protected $menusRepository = null;
public function __construct(MenusRepository $menusRepository)
{
$this->menusRepository = $menusRepository;
}
protected function initMenu($menus)
{
$menuModel = app(Menus::class);
foreach($menus as $menu){
$parentMenu = $menuModel->where('menu_name',$menu['parent_id'])->first();
if(!$parentMenu){
throw new \LogicException('上级菜单不存在!',500);
}
if('button' == $menu['menu_type']){
$permission = Permission::query()->where(['menu_id' => 0, 'sys_default' => 1,'guard_name' => config('auth.defaults.guard'), 'action' => $menu['action']])->first();
if(!$permission){
throw new \LogicException('按钮动作不存在!',500);
}
}
$filterParams = [];
collect($this->menusRepository->rules['create'])->map(function($rule,$key) use ($menu, &$filterParams){
if(isset($menu[$key]) && !empty($menu[$key])){
$filterParams[$key] = $menu[$key];
} else{
$filterParams[$key] = '';
}
});
$filterParams['parent_id'] = $parentMenu['id'];
$filterParams['menu_icon'] = $menu['menu_icon'];
$filterParams['component'] = $menu['component'];
$filterParams['created_by'] = 1;
$filterParams['status'] = intval($menu['status']);
$result = $this->menusRepository->create($filterParams);
if($result){
$permission = [];
$permission['name'] = $result['menu_name'];
$permission['menu_id'] = $result['id'];
if(isset($menu['menu_type']) && !empty($menu['menu_type']) && 'button' == $menu['menu_type']){
$permission['action'] = $menu['menu_name'];
$permission['permission_type'] = 'button';
}else{
$permission['permission_type'] = 'menu';
$permission['action'] = $menu['menu_name'].'_list';
}
$permission['sys_default'] = 0;
$permission['remark'] = $result['menu_name'].'的相关权限';
$permission['guard_name'] = config('auth.defaults.guard');
//增加对应的按钮权限
$permissionResult = Permission::create($permission);
if($permissionResult){
$user = app(AdminUsers::class)->where('id',1)->get()->first();
app(RoleAndPermissionsService::class)->assignRoleAndPermissionToUser($permissionResult, $user);
}
}
}
}
}
...@@ -76,6 +76,21 @@ return [ ...@@ -76,6 +76,21 @@ return [
'engine' => env('BH_DB_ENGINE', null), 'engine' => env('BH_DB_ENGINE', null),
'timezone' => env('BH_DB_TIMEZONE', '+00:00'), 'timezone' => env('BH_DB_TIMEZONE', '+00:00'),
], ],
'rhawn_mysql' => [
'driver' => 'mysql',
'host' => env('RHAWN_DB_HOST', '127.0.0.1'),
'port' => env('RHAWN_DB_PORT', 3306),
'database' => env('RHAWN_DB_DATABASE', 'forge'),
'username' => env('RHAWN_DB_USERNAME', 'forge'),
'password' => env('RHAWN_DB_PASSWORD', ''),
'unix_socket' => env('RHAWN_DB_SOCKET', ''),
'charset' => env('RHAWN_DB_CHARSET', 'utf8mb4'),
'collation' => env('RHAWN_DB_COLLATION', 'utf8mb4_unicode_ci'),
'prefix' => env('RHAWN_DB_PREFIX', ''),
'strict' => env('RHAWN_DB_STRICT_MODE', true),
'engine' => env('RHAWN_DB_ENGINE', null),
'timezone' => env('RHAWN_DB_TIMEZONE', '+00:00'),
],
'pgsql' => [ 'pgsql' => [
'driver' => 'pgsql', 'driver' => 'pgsql',
......
<?php
use App\Support\Traits\InitMenusAndPermission;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class RhSalesOrderRefundMenuSeeder extends Seeder
{
use InitMenusAndPermission;
public function run()
{
//$this->command->getOutput()->info('正在初始化菜单数据中.');
try {
DB::beginTransaction();
// 初始化菜单及权限
$menus = [
[
'menu_name' => 'rhawn_sorder_refund',
'title' => '罗恩销售订单退货',
'menu_path' => '/tools/rhawn-sorder-refund',
'parent_id' => 'tools',
'menu_type' => 'page',
'menu_icon' => 'ios-laptop',
'component' => 'tools/rhawn/sorders-refund',
'status' => 1,
'is_show' => 1,
'sys_default' => 1,
'sort' => 1.0,
'created_by' => 0,
'created_at' => '',
'updated_at' => '',
'action' => '',
],[
'menu_name' => 'rhawn_sorder_refund_add',
'title' => '添加任务',
'menu_path' => '#',
'parent_id' => 'rhawn_sorder_refund',
'menu_type' => 'button',
'menu_icon' => '#',
'component' => '#',
'status' => 1,
'is_show' => 1,
'sys_default' => 1,
'sort' => 1.0,
'created_by' => 0,
'created_at' => '',
'updated_at' => '',
'action' => 'add',
],[
'menu_name' => 'rhawn_sorder_refund_edit',
'title' => '编辑任务',
'menu_path' => '#',
'parent_id' => 'rhawn_sorder_refund',
'menu_type' => 'button',
'menu_icon' => '#',
'component' => '#',
'status' => 1,
'is_show' => 1,
'sys_default' => 1,
'sort' => 1.0,
'created_by' => 0,
'created_at' => '',
'updated_at' => '',
'action' => 'edit',
],[
'menu_name' => 'rhawn_sorder_refund_delete',
'title' => '删除任务',
'menu_path' => '#',
'parent_id' => 'rhawn_sorder_refund',
'menu_type' => 'button',
'menu_icon' => '#',
'component' => '#',
'status' => 1,
'is_show' => 1,
'sys_default' => 1,
'sort' => 1.0,
'created_by' => 0,
'created_at' => '',
'updated_at' => '',
'action' => 'delete',
],[
'menu_name' => 'rhawn_sorder_refund_execute',
'title' => '执行任务',
'menu_path' => '#',
'parent_id' => 'rhawn_sorder_refund',
'menu_type' => 'button',
'menu_icon' => '#',
'component' => '#',
'status' => 1,
'is_show' => 1,
'sys_default' => 1,
'sort' => 1.0,
'created_by' => 0,
'created_at' => '',
'updated_at' => '',
'action' => 'other',
],
];
$this->initMenu($menus);
DB::commit();
$this->command->getOutput()->info('菜单数据初始化成功.');
}catch(Exception $e){
$this->command->getOutput()->error('初始化菜单失败,原因:'.$e->getMessage());
DB::rollback();
}
}
}
...@@ -29,6 +29,17 @@ $api->version('v1', function($api) { ...@@ -29,6 +29,17 @@ $api->version('v1', function($api) {
$api->post('/adminapi/tools/bh/delSorderRefundTask', ['permission' => 'tools.bh.order.search', 'uses'=>'BhOrdersController@delSorderRefundTask']); $api->post('/adminapi/tools/bh/delSorderRefundTask', ['permission' => 'tools.bh.order.search', 'uses'=>'BhOrdersController@delSorderRefundTask']);
$api->post('/adminapi/tools/bh/getSorderDetailByTaskId', ['permission' => 'tools.bh.order.search', 'uses'=>'BhOrdersController@getSorderDetailByTaskId']); $api->post('/adminapi/tools/bh/getSorderDetailByTaskId', ['permission' => 'tools.bh.order.search', 'uses'=>'BhOrdersController@getSorderDetailByTaskId']);
// 罗恩销售订单
$api->post('/adminapi/tools/rhawn/addSorderRefundTask', ['permission' => 'tools.rhawn.order.add', 'uses'=>'RhawnOrdersController@addSorderRefundTask']);
$api->post('/adminapi/tools/rhawn/editSorderRefundTask', ['permission' => 'tools.rhawn.order.add', 'uses'=>'RhawnOrdersController@editSorderRefundTask']);
$api->post('/adminapi/tools/rhawn/getSordersDetail', ['permission' => 'tools.rhawn.order.search', 'uses'=>'RhawnOrdersController@getSordersDetail']);
$api->get('/adminapi/tools/rhawn/getRhawnSordersStock', ['permission' => 'tools.rhawn.order.search', 'uses'=>'RhawnOrdersController@getRhawnSordersStock']);
$api->get('/adminapi/tools/rhawn/getSorderRefundTask', ['permission' => 'tools.rhawn.order.search', 'uses'=>'RhawnOrdersController@getSorderRefundTaskToPage']);
$api->post('/adminapi/tools/rhawn/execRhawnSorderRefundTask', ['permission' => 'tools.rhawn.order.search', 'uses'=>'RhawnOrdersController@execRhawnSorderRefundTask']);
$api->get('/adminapi/tools/rhawn/getSorderRefundTaskLogs', ['permission' => 'tools.rhawn.order.search', 'uses'=>'RhawnOrdersController@getSorderRefundTaskLogsToPage']);
$api->post('/adminapi/tools/rhawn/delSorderRefundTask', ['permission' => 'tools.rhawn.order.search', 'uses'=>'RhawnOrdersController@delSorderRefundTask']);
$api->post('/adminapi/tools/rhawn/getSorderDetailByTaskId', ['permission' => 'tools.rhawn.order.search', 'uses'=>'RhawnOrdersController@getSorderDetailByTaskId']);
}); });
}); });
......
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