完成订单重构

This commit is contained in:
xman 2025-06-01 15:46:01 +08:00
parent 6d69f99d5a
commit 37a39dbe5d
4 changed files with 112 additions and 17 deletions

View File

@ -5,6 +5,7 @@ namespace app\admin\controller\orders;
use app\admin\model\Order;
use app\admin\model\OrderDispatch;
use app\admin\model\OrderDispatchLog;
use app\admin\model\Worker;
use app\common\controller\Backend;
use app\common\Logic\OrderLogic;
use think\Db;
@ -253,12 +254,17 @@ class Dispatch2 extends Backend
$this->view->assign('row', $row);
$this->view->assign('order', $order);
$this->view->assign('action','finish');
$workerRate = Worker::where('id',$row->worker_id)->value('rate');
$this->view->assign('rate', $workerRate);
return $this->view->fetch('edit');
}
$params = $this->request->post('row/a');
if (empty($params)) {
$orderParsms = $this->request->post('order/a');
if (empty($params) || empty($orderParsms)) {
$this->error(__('Parameter %s can not be empty', ''));
}
@ -285,19 +291,43 @@ class Dispatch2 extends Backend
$params['status'] = OrderDispatch::STATUS_FINISH;
$params['finish_time'] = date('Y-m-d H:i:s');
$params['follow'] = 2;
$params['material_cost'] = $orderParsms['material_cost'];
if($row->admin_id == 0){
$params['admin_id'] = $this->auth->id;
$params['admin_user'] = $this->auth->admin_user;
$order->dispatch_admin_id = $this->auth->id;
$order->save();
$orderParsms['dispatch_admin_id'] = $this->auth->id;
}
$result = $row->allowField(true)->save($params);
//计算价格
$data = [
'online_amount_last' => $row->online_total, //线上尾款
'offline_amount' => $row->total, //线下尾款
'cost' => $orderParsms['cost'],
'cost_rate' => $orderParsms['cost_rate'],
'offline_amount_type'=> $row->offline_total_type,
];
if($row->type == 1){ //手动
$data['status'] = Order::STATUS_AUDITING;
}else{
$data['status'] = Order::STATUS_CHECKING;
}
$data = array_merge($data,$orderParsms);
$last_amount = bcadd($data['online_amount_last'],$data['offline_amount'],2);
$cost = bcadd($data['cost'],$data['material_cost'],2);
$data['total'] = bcadd($order->online_amount,$last_amount,2);
$data['real_amount'] = $data['total'];
$data['performance'] = bcsub($data['real_amount'],$cost,2);
$order->allowField(true)->save($data);
//修改订单状态
$OrderLogic = new OrderLogic();
$OrderLogic -> dispachFinishAfter($row,['role'=>1,'auth'=>$this->auth,'remark'=>'后台完成任务,操作人:'.$this->auth->nickname]);
$OrderLogic -> dispachFinishAfter($row,['role'=>1,'auth'=>$this->auth,'remark'=>'后台完成任务,操作人:'.$this->auth->nickname],true);
Db::commit();
} catch (ValidateException | PDOException | Exception $e) {
Db::rollback();

View File

@ -69,7 +69,6 @@
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('当前进度')}:</label>
<div class="col-xs-12 col-sm-8">
@ -78,6 +77,8 @@
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('线上预付')}:</label>
<div class="col-xs-12 col-sm-8">
@ -172,6 +173,51 @@
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('师傅提点(%)')}:</label>
<div class="col-xs-12 col-sm-8">
<input data-rule="required" name="order[cost_rate]" type="number" min="0" max="100" step="1" class="form-control" value="{$rate|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('师傅提成')}:</label>
<div class="col-xs-12 col-sm-8">
<input data-rule="required" name="order[cost]" type="number" min="0" max="100" step="1" class="form-control" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('分成备注')}:</label>
<div class="col-xs-12 col-sm-8">
<input data-rule="required" name="order[cost_remark]" type="text" class="form-control" value="{$order.cost_remark}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('材料成本(¥)')}:</label>
<div class="col-xs-12 col-sm-8">
<input data-rule="required" name="order[material_cost]" min="1" step="0.01" type="number" class="form-control" value="{$order.material_cost}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('材料凭证')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="c-material_images" class="form-control" size="50" value="{$order.material_images}" name="order[material_images]" type="text">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="faupload-material_images" class="btn btn-danger faupload" data-input-id="c-material_images" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp,image/webp" data-multiple="true" data-preview-id="p-material_images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-material_images" class="btn btn-primary fachoose" data-input-id="c-material_images" data-mimetype="image/*" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-material_images"></span>
</div>
<ul class="row list-inline faupload-preview" id="p-material_images"></ul>
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>

View File

@ -36,12 +36,19 @@ class OrderLogic
* @throws ModelNotFoundException
* @throws Exception
*/
public function dispachFinishAfter(OrderDispatch $orderDispatch,$roleInfo=[]): void
public function dispachFinishAfter(OrderDispatch $orderDispatch,$roleInfo=[],$byAdmin=false): void
{
$order = $this->OrderModel->where('id',$orderDispatch->order_id)->find();
if($order->status != Order::STATUS_DISPATCHED){
throw new Exception('订单状态不允许当前操作');
if(!$byAdmin){
if($order->status != Order::STATUS_DISPATCHED){
throw new Exception('订单状态不允许当前操作');
}
}else{
if(in_array($order->status ,[Order::STATUS_FINISHED,Order::STATUS_CANCEL])) {
throw new Exception('订单状态不允许当前操作');
}
}
$orderUpdate = [
@ -50,15 +57,16 @@ class OrderLogic
$orderDispatch->follow = 2; //结束跟进
$orderDispatch->save();
if($orderDispatch->is_receipt == 1){ //要收款,计算确认尾款
$offline_amount = $orderDispatch->total;
$total = bcadd($order->online_amount,$offline_amount,2);
$orderUpdate['offline_amount'] = $offline_amount;
$orderUpdate['total'] = $total;
//$orderUpdate['offline_amount_type'] = $orderDispatch->offline_total_type;
if(!$byAdmin){
if($orderDispatch->is_receipt == 1){ //要收款,计算确认尾款
$offline_amount = $orderDispatch->total;
$total = bcadd($order->online_amount,$offline_amount,2);
$orderUpdate['offline_amount'] = $offline_amount;
$orderUpdate['total'] = $total;
//$orderUpdate['offline_amount_type'] = $orderDispatch->offline_total_type;
}
$order->allowField(true)->save($orderUpdate);
}
$order->allowField(true)->save($orderUpdate);
$params['role'] = $roleInfo['role'];
$params['auth'] = $roleInfo['auth'];
$params['order']= $order;

View File

@ -129,12 +129,23 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'echarts', 'echarts-t
const headers = response[0];
const units = ['元', '%', '%', '']; // 如果你有单位可以一起拼接
// 如果 response 没有实际数据(只有表头),则补一行空数据
let datasetSource = response;
if (response.length <= 1) {
// 构造一个“暂无数据”的空行,数量与 headers 相同
const emptyRow = [ '暂无数据' ];
for (let i = 1; i < headers.length; i++) {
emptyRow.push(0);
}
datasetSource = [ headers, emptyRow ];
}
var barChart = Echarts.init(document.getElementById('bar-chart'), 'walden');
var option = {
legend: {},
tooltip: {},
dataset: {
source: response
source: datasetSource
},
xAxis: {
type: 'category',