作者 郭文星

123

... ... @@ -29,6 +29,7 @@ class Order extends Backend
parent::_initialize();
$this->model = new \app\admin\model\Order;
$this->view->assign("isPayList", $this->model->getIsPayList());
$this->view->assign("typeList", $this->model->gettypeList());
}
... ... @@ -235,6 +236,8 @@ class Order extends Backend
$row['pay_type']="微信";
}elseif($row['pay_type']=="offlinepay"){
$row['pay_type']="线下";
}elseif($row['pay_type']=="background"){
$row['pay_type']="后台下单";
}
$route=Db::name("route")->find($row['route_id']);
$row['route_name']=$route['name'];
... ... @@ -271,4 +274,101 @@ class Order extends Backend
return $res;
}
}
/**
* 检查是否有新订单
* @return void
*/
public function chackordershow(){
$res=Db::name("order")->where("is_show",0)->select();
$isreturn=0;
if(!empty($res)){
$isreturn=1;
$updateres=Db::name("order")->where("is_show",0)->update(["is_show"=>1]);
return $isreturn;
}else{
return $isreturn;
}
}
/**
* 添加
*
* @return string
* @throws \think\Exception
*/
public function add()
{
if (false === $this->request->isPost()) {
return $this->view->fetch();
}
$params = $this->request->post('row/a');
if (empty($params)) {
$this->error(__('Parameter %s can not be empty', ''));
}
$params = $this->preExcludeFields($params);
$params['pay_type']="background";
$params['is_pay']=1;
$driver=Db::name("driver")->where("id",$params['driver_id'])->find();
$params['driver_name']=$driver['name'];
$params['order_no']=$this->getOrderSn();
if ($this->dataLimit && $this->dataLimitFieldAutoFill) {
$params[$this->dataLimitField] = $this->auth->id;
}
$result = false;
Db::startTrans();
try {
//是否采用模型验证
if ($this->modelValidate) {
$name = str_replace("\\model\\", "\\validate\\", get_class($this->model));
$validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.add' : $name) : $this->modelValidate;
$this->model->validateFailException()->validate($validate);
}
$passenger=Db::name("passenger")->insertGetId(['name'=>$params['user_name'],'IDcard'=>$params['IDcard'],'phone'=>$params['phone']]);
$params['passengers']=$passenger;
//判断总表
$time = strtotime(date("Y-m-d", time()));
$order_review = Db::name("order_review")
->where("car_id", $params['car_id'])
->where("route_id", $params['route_id'])
->where("driver_id", $params['driver_id'])
->where("createtime", ">", $time)
->find();
if (!$order_review) {
$order_review_id = Db::name("order_review")
->insertGetId([
"car_id" => $params['car_id'],
"route_id" => $params['route_id'],
"driver_id" => $params['driver_id'],
"type" => 1,
"order_status" => 1,
"createtime" => time()
]);
} else {
$order_review_id = $order_review['id'];
}
$params['order_review_id']=$order_review_id;
$result = $this->model->allowField(true)->save($params);
Db::commit();
} catch (ValidateException|PDOException|Exception $e) {
Db::rollback();
$this->error($e->getMessage());
}
if ($result === false) {
$this->error(__('No rows were inserted'));
}
$this->success();
}
function getOrderSn()
{
$orderid = date("YmdHis") . mt_rand(1000, 999999);
$odcks = \think\Db::name('order')
->where(['order_no' => $orderid])
->find();
while (!empty($odcks)) {
$orderid = date("YmdHis") . mt_rand(1000, 999999);
}
return $orderid;
}
}
\ No newline at end of file
... ...
... ... @@ -12,25 +12,31 @@ return [
'Type' => '订单类型',
'Type 1' => '计票',
'Type 2' => '城际',
'Type 3' => '包车',
'Pay_type' => '支付类型',
'passenger' => '乘车人信息',
'Pay_type wxpay' => '微信支付',
'Pay_type offlinepay' => '线下支付',
'Pay_type background' => '后台下单',
'Type 3' => '包车',
'Starting_point' => '出发位置',
'End_point' => '到达位置',
'Car_id' => '订单车辆',
'User_id' => '乘车人',
'User_name' => '乘车人姓名',
'Driver_id' => '运行路线',
'Driver_name' => '运行路线名称',
'Route_id' => '选择线路',
'Driver_id' => '司机名称',
//'Driver_name' => '运行路线名称',
'phone' => '联系电话',
'route_name' => '线路名称',
'Pay_time' => '支付时间',
'Refund_time' => '退款时间',
'Reservation_time' => '预约时间',
'Create_time' => '创建时间',
'IDcard' => '身份证',
'Driver.name' => '司机名称',
'Car.license_plate' => '车牌号',
'Starting_point' => '出发位置',
'end_point' => '结束位置',
'User.username' => '用户名'
];
... ...
... ... @@ -38,6 +38,11 @@ class Order extends Model
return ['1' => __('Is_pay 1'), '2' => __('Is_pay 2'), '3' => __('Is_pay 3')];
}
public function gettypeList()
{
return ['1' => __('Type 1'), '2' => __('Type 2'), '3' => __('Type 3')];
}
public function getIsPayTextAttr($value, $data)
{
... ...
... ... @@ -266,6 +266,19 @@
}// 使用ajax交互,那么后端返回的数据会被data接收,不在直接影响整个浏览器页面
})
$.ajax({ // 定义ajax发送请求
url: 'order/chackordershow', // 请求发送的地址 有三种填写方式,与form标签的action一致
method: 'post', // 请求发送的方式
success: function (data) { // 异步等待,当后端响应成功会回调执行匿名函数,并将数据传递给data参数
console.log("chackordershowchackordershowchackordershowchackordershow")
console.log(data)
if(data>0){
var audio = new Audio('/ttsmaker-file-2024-6-11-12-0-51.mp3');
audio.play();
}
}// 使用ajax交互,那么后端返回的数据会被data接收,不在直接影响整个浏览器页面
})
$.ajax({ // 定义ajax发送请求
url: 'order/notselectedorder', // 请求发送的地址 有三种填写方式,与form标签的action一致
... ...
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Order_no')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-order_no" class="form-control" name="row[order_no]" type="text">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Price')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-price" class="form-control" step="0.01" name="row[price]" type="number">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Is_pay')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-is_pay" class="form-control selectpicker" name="row[is_pay]">
{foreach name="isPayList" item="vo"}
<option value="{$key}" {in name="key" value=""}selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Car_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-car_id" data-rule="required" data-source="car/index" class="form-control selectpage" name="row[car_id]" type="text" value="">
<input id="c-car_id" data-rule="required" data-source="car/index" class="form-control selectpage" data-field="license_plate" name="row[car_id]" type="text" value="">
</div>
</div>
<div class="form-group">
... ... @@ -43,15 +26,51 @@
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Phone')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-phone" class="form-control" name="row[phone]" type="text">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('IDcard')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-IDcard" class="form-control" name="row[IDcard]" type="text">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Driver_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-driver_id" data-rule="required" data-source="driver/index" class="form-control selectpage" name="row[driver_id]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Driver_name')}:</label>
<label class="control-label col-xs-12 col-sm-2">{:__('Route_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-driver_name" class="form-control" name="row[driver_name]" type="text">
<input id="c-route_id" data-rule="required" data-source="route/index" class="form-control selectpage" name="row[route_id]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Type')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-type" class="form-control selectpicker" name="row[type]">
{foreach name="typeList" item="vo"}
<option value="{$key}" {in name="key" value=""}selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Starting_point')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-starting_point" class="form-control" name="row[starting_point]" type="text">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('End_point')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-end_point" class="form-control" name="row[end_point]" type="text">
</div>
</div>
<div class="form-group">
... ... @@ -72,6 +91,12 @@
<input id="c-create_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[create_time]" type="text" value="{:date('Y-m-d H:i:s')}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Reservation_time')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-reservation_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[reservation_time]" type="text" value="{:date('Y-m-d H:i:s')}">
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
... ...
... ... @@ -199,7 +199,6 @@ if (!function_exists('getOrderSn')) {
* @throws \think\exception\DbException
*/
function refundSendMessage($order_id){
print_r($$order_id);return;
$order=\think\Db::name("order")->find($order_id);
$wxxcxpush=new WxxcxPush();
$user=new User();
... ...
... ... @@ -1646,11 +1646,58 @@ class Car extends Base
/**
*
*司机退款
* @return void
*/
public function drivercancelorder(){
$order_id = $this->request->param("order_id");
$id = $this->request->param("order_id");
//查询订单
$order = Db::name("order")->where("id", $id)->find();
if ($order['is_pay'] == 1) {
if ($order['order_status'] != 1) {
$this->error("该订单无法退款");
}
if ($order['pay_type'] == "offlinepay") {
$relogs['update_time'] = time();
$relogs['is_pay'] = 4;
$relogs['refund_time'] = time();
$rs2 = Db::name('order')
->where(['id' => $order['id']])
->update($relogs);
}
//$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')) {
refundSendMessage($id);//发送订阅消息
//退款成功,更新退款记录
$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
... ...
... ... @@ -57,7 +57,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'template'], function
{
field: 'pay_type',
title: __('Pay_type'),
searchList: {"wxpay": __('Pay_type wxpay'), "offlinepay": __('Pay_type offlinepay')},
searchList: {"wxpay": __('Pay_type wxpay'), "offlinepay": __('Pay_type offlinepay'), "background": __('Pay_type background')},
formatter: Table.api.formatter.normal
},
{
... ... @@ -121,6 +121,13 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'template'], function
confirm: function (row) {
return "确认退款"
},
visible: function (row) {
//未生成过计划的数据就显示按钮
if (row.is_pay == 1 ) {
return true;
}
return false;
},
url: 'order/refund?id={id}',
},
... ...