作者 郭文星

123

... ... @@ -51,17 +51,17 @@ class Car extends Backend
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
$list = $this->model
->with(['route','driver'])
->with(['driver','route'])
->where($where)
->order($sort, $order)
->paginate($limit);
foreach ($list as $row) {
$row->visible(['id','car_model','reservation_time','license_plate','seat','colour','driver_license_img','driving_license_img','start_time','create_time']);
$row->visible(['route']);
$row->getRelation('route')->visible(['name']);
$row->visible(['id','car_model','license_plate','seat','colour','driver_license_img','driving_license_img','reservation_time','start_time','create_time']);
$row->visible(['driver']);
$row->getRelation('driver')->visible(['name']);
$row->visible(['route']);
$row->getRelation('route')->visible(['name']);
}
$result = array("total" => $list->total(), "rows" => $list->items());
... ...
... ... @@ -13,6 +13,6 @@ return [
'Reservation_time' => '预约时间',
'Start_time' => '发车时间',
'Create_time' => '创建时间',
'Route.name' => '线路名称',
'Driver.name' => '司机名称'
'Driver.name' => '司机名称',
'Route.name' => '线路名称'
];
... ...
... ... @@ -25,6 +25,7 @@ class Car extends Model
// 追加属性
protected $append = [
'reservation_time_text',
'start_time_text',
'create_time_text'
];
... ... @@ -34,6 +35,13 @@ class Car extends Model
public function getReservationTimeTextAttr($value, $data)
{
$value = $value ? $value : (isset($data['reservation_time']) ? $data['reservation_time'] : '');
return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
}
public function getStartTimeTextAttr($value, $data)
{
$value = $value ? $value : (isset($data['start_time']) ? $data['start_time'] : '');
... ... @@ -47,6 +55,11 @@ class Car extends Model
return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
}
protected function setReservationTimeAttr($value)
{
return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
}
protected function setStartTimeAttr($value)
{
return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
... ... @@ -58,14 +71,14 @@ class Car extends Model
}
public function route()
public function driver()
{
return $this->belongsTo('Route', 'route_id', 'id', [], 'LEFT')->setEagerlyType(0);
return $this->belongsTo('Driver', 'driver_id', 'id', [], 'LEFT')->setEagerlyType(0);
}
public function driver()
public function route()
{
return $this->belongsTo('Driver', 'driver_id', 'id', [], 'LEFT')->setEagerlyType(0);
return $this->belongsTo('Route', 'route_id', 'id', [], 'LEFT')->setEagerlyType(0);
}
}
... ...
... ... @@ -39,29 +39,13 @@
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Driver_license_img')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="c-driver_license_img" class="form-control" size="50" name="row[driver_license_img]" type="text">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="faupload-driver_license_img" class="btn btn-danger faupload" data-input-id="c-driver_license_img" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp,image/webp" data-multiple="false" data-preview-id="p-driver_license_img"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-driver_license_img" class="btn btn-primary fachoose" data-input-id="c-driver_license_img" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-driver_license_img"></span>
</div>
<ul class="row list-inline faupload-preview" id="p-driver_license_img"></ul>
<input id="c-driver_license_img" class="form-control" name="row[driver_license_img]" type="text">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Driving_license_img')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="c-driving_license_img" class="form-control" size="50" name="row[driving_license_img]" type="text">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="faupload-driving_license_img" class="btn btn-danger faupload" data-input-id="c-driving_license_img" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp,image/webp" data-multiple="false" data-preview-id="p-driving_license_img"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-driving_license_img" class="btn btn-primary fachoose" data-input-id="c-driving_license_img" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-driving_license_img"></span>
</div>
<ul class="row list-inline faupload-preview" id="p-driving_license_img"></ul>
<input id="c-driving_license_img" class="form-control" name="row[driving_license_img]" type="text">
</div>
</div>
<div class="form-group">
... ... @@ -73,7 +57,7 @@
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Start_time')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-start_time" class="form-control datetimepicker" data-date-format="HH:mm" data-use-current="true" name="row[start_time]" type="text" value="{:date('H:i')}">
<input id="c-start_time" class="form-control datetimepicker" data-date-format=" HH:mm" data-use-current="true" name="row[start_time]" type="text" value="{:date('H:i')}">
</div>
</div>
<div class="form-group">
... ...
... ... @@ -39,29 +39,13 @@
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Driver_license_img')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="c-driver_license_img" class="form-control" size="50" name="row[driver_license_img]" type="text" value="{$row.driver_license_img|htmlentities}">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="faupload-driver_license_img" class="btn btn-danger faupload" data-input-id="c-driver_license_img" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp,image/webp" data-multiple="false" data-preview-id="p-driver_license_img"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-driver_license_img" class="btn btn-primary fachoose" data-input-id="c-driver_license_img" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-driver_license_img"></span>
</div>
<ul class="row list-inline faupload-preview" id="p-driver_license_img"></ul>
<input id="c-driver_license_img" class="form-control" name="row[driver_license_img]" type="text" value="{$row.driver_license_img|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Driving_license_img')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="c-driving_license_img" class="form-control" size="50" name="row[driving_license_img]" type="text" value="{$row.driving_license_img|htmlentities}">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="faupload-driving_license_img" class="btn btn-danger faupload" data-input-id="c-driving_license_img" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp,image/webp" data-multiple="false" data-preview-id="p-driving_license_img"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-driving_license_img" class="btn btn-primary fachoose" data-input-id="c-driving_license_img" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-driving_license_img"></span>
</div>
<ul class="row list-inline faupload-preview" id="p-driving_license_img"></ul>
<input id="c-driving_license_img" class="form-control" name="row[driving_license_img]" type="text" value="{$row.driving_license_img|htmlentities}">
</div>
</div>
<div class="form-group">
... ...
... ... @@ -262,4 +262,55 @@ class Car extends Base
return $this->success($content);
}
/**
* 退款接口
* @param $id
* @return void
* @throws \think\Exception
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
* @throws \think\exception\PDOException
*/
public function refund($id){
$id=$this->request->param("id");
//查询订单
$order=Db::name("order")->where("id",$id)->find();
if($order['is_pay']==1){
$this->error("该订单无法退款");
//拼接退款参数
$pay_fee = $order['price'];
$refund_fee = $pay_fee;
$order_sn = $order['order_no'];
$pay_type = 'wechat';
$reason = '订单退款';
$notifyurl = 'https://wyc.tenyes.cn/api/index/refundNotifyx';//退款回调地址
//直接调用退款方法传参即可
$response = \addons\epay\library\Service::submitRefund($pay_fee, $refund_fee, $order_sn, getRefundSn($order['user_id']), $pay_type, $reason, $notifyurl, '', 'miniapp');
$response = json_encode($response);
$response = json_decode($response, true);
file_put_contents("pcl_repay_v2.log", date("Y-m-d H:i:s") . "::" . json_encode($response, JSON_UNESCAPED_UNICODE) . PHP_EOL, FILE_APPEND);
if (!empty($response['return_code'] == 'SUCCESS')) {
//退款成功,更新退款记录
$relogs['update_time'] = time();
$relogs['is_pay'] = 3;
$relogs['out_refund_no'] = $response['out_refund_no'];
$relogs['refund_time'] = time();
$rs2 = Db::name('order')
->where(['id' => $order['id']])
->update($relogs);
} else {
$this->error('退款失败');
}
$this->success("退款成功");
}else{
$relogs['is_pay'] = 4;
$rs2 = Db::name('order')
->where(['id' => $order['id']])
->update($relogs);
$this->success("取消成功");
}
}
}
\ No newline at end of file
... ...
... ... @@ -34,10 +34,11 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
{field: 'colour', title: __('Colour'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
{field: 'driver_license_img', title: __('Driver_license_img'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},
{field: 'driving_license_img', title: __('Driving_license_img'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},
{field: 'route.name', title: __('Route.name'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
{field: 'driver.name', title: __('Driver.name'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
{field: 'reservation_time', title: __('Reservation_time'),operate:'RANGE', addclass:'datetimerange',datetimeFormat:"HH:mm", autocomplete:false, formatter: Table.api.formatter.datetime},
{field: 'start_time', title: __('Start_time'),operate:'RANGE', addclass:'datetimerange',datetimeFormat:"HH:mm", autocomplete:false, formatter: Table.api.formatter.datetime},
{field: 'create_time', title: __('Create_time'),operate:'RANGE', addclass:'datetimerange',datetimeFormat:"HH:mm", autocomplete:false, formatter: Table.api.formatter.datetime},
{field: 'driver.name', title: __('Driver.name'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
{field: 'route.name', title: __('Route.name'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
{field: 'create_time', title: __('Create_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
]
... ...