logistics/app/api/controller/ContractController.php

160 lines
7.2 KiB
PHP
Raw Normal View History

2023-08-29 17:19:11 +08:00
<?php
namespace app\api\controller;
use app\common\model\contract\Contract;
use app\common\model\platform\Platform;
use app\common\model\vehicle\Vehicle;
2023-09-07 09:39:32 +08:00
use app\common\model\vehicle\VehicleRent;
2023-08-31 01:19:57 +08:00
use think\facade\Db;
2023-08-29 17:19:11 +08:00
class ContractController extends BaseApiController
{
2023-09-07 09:39:32 +08:00
public array $notNeedLogin = ['signContract','contractUpdate','checkCarNum','getAvailableVehicles'];
2023-08-29 17:19:11 +08:00
public function signContract() {
//获取参数
2023-10-11 14:55:39 +08:00
$params = $this->request->post(['num','company_id','company_name','company_code','company_user','company_phone','company_email','cars_info','type']);
2023-08-29 17:19:11 +08:00
//验证参数
if(empty($params['num']) || empty($params['company_id']) || empty($params['company_name']) || empty($params['company_code']) || empty($params['company_user']) || empty($params['company_phone']) || empty($params['company_email'])){
return $this->fail('缺少必要参数');
}
//获取平台公司数据
$platform = Platform::find(1);
if(!$platform || $platform->isEmpty()){
return $this->fail('甲方公司不存在');
}
//设置数据
$data = [
'contract_no' => time(),
'company_a_name' => $platform['company_name'],
'company_a_code' => $platform['company_organization_code'],
'company_a_user' => $platform['company_user'],
'company_a_phone' => $platform['company_phone'],
'company_a_email' => $platform['company_email'],
'company_b_id' => $params['company_id'],
'company_b_name' => $params['company_name'],
'company_b_code' => $params['company_code'],
'company_b_user' => $params['company_user'],
'company_b_phone' => $params['company_phone'],
'company_b_email' => $params['company_email'],
'num' => $params['num'],
2023-10-11 14:55:39 +08:00
'cars_info' => isset($params['cars_info']) && !empty($params['cars_info']) ? $params['cars_info'] : null,
2023-10-12 10:45:42 +08:00
'type' => isset($params['type']) && !empty($params['type']) ? $params['type'] : 0,
2023-08-30 13:36:12 +08:00
'status' => 0,
2023-08-29 17:19:11 +08:00
'create_time' => time(),
'update_time' => time(),
];
2023-08-31 01:19:57 +08:00
Db::startTrans();
try {
2023-10-13 14:21:05 +08:00
$res1= Contract::create($data);
$data['contract_logistic_id'] = $res1->id;
Db::commit();
return $this->success('合同发起成功,等待审核',$data);
2023-08-31 01:19:57 +08:00
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return $this->fail($e->getMessage());
2023-08-29 17:19:11 +08:00
}
}
2023-09-07 09:39:32 +08:00
public function contractUpdate() {
2023-08-29 17:19:11 +08:00
//获取参数
$params = $this->request->post();
2023-09-07 09:39:32 +08:00
if(!isset($params['id']) || empty($params['id'])) {
2023-08-29 17:19:11 +08:00
return $this->fail('缺少必要参数');
}
2023-10-11 17:41:19 +08:00
$contract = Contract::where('id',$params['id'])->findOrEmpty();
if($contract->isEmpty()) {
2023-09-07 09:39:32 +08:00
return $this->fail('未找到相应数据');
}
if(isset($params['signing_timer']) && isset($params['status']) && $params['signing_timer'] == 2 && $params['status'] == 3){
//获取签约后的合同
$signContractFile = app(JunziqianController::class)->download_file($contract['contract_no']);
$params['contract_url'] = $signContractFile ?? '';
//获取租赁车辆
$cars = json_decode($contract['cars_info'], true);
$data = [];
2023-10-11 17:41:19 +08:00
//更新合同状态
2023-10-12 11:52:32 +08:00
$contract->where('id', $contract['id'])->save([
'signing_timer' => $params['signing_timer'],
'status' => $params['status'],
'contract_url' => $params['contract_url'],
2023-11-13 10:53:42 +08:00
'contract_evidence' => $params['contract_evidence'],
'update_time' => $params['update_time']
2023-10-12 11:52:32 +08:00
]);
2023-10-11 17:41:19 +08:00
if($contract['type'] == 0){
foreach($cars as $v){
2023-10-11 17:59:49 +08:00
$hasCar = VehicleRent::where('car_id',$v['id'])->findOrEmpty();
if($hasCar->isEmpty()){
$data[] = [
'car_id' => $v['id'],
'contract_id' => $contract['id'],
'company_id' => $contract['company_b_id'],
'company_name' => $contract['company_b_name'],
'company_user' => $contract['company_b_user'],
'company_phone' => $contract['company_b_phone'],
'create_time' => time(),
'status' => 0,
'use_user_id' => 0,
'use_user_name' => '',
'use_user_phone' => ''
];
}
2023-09-09 20:08:10 +08:00
}
2023-10-11 17:41:19 +08:00
$status = 2;
2023-10-12 11:17:45 +08:00
}else if($contract['type'] == 3) {
2023-10-11 17:41:19 +08:00
foreach($cars as $v){
2023-10-11 17:59:49 +08:00
$hasCar = VehicleRent::where('car_id',$v['id'])->findOrEmpty();
if($hasCar->isEmpty()){
$data[] = [
'car_id' => $v['id'],
'contract_id' => $contract['id'],
'company_id' => $contract['company_b_id'],
'company_name' => $contract['company_b_name'],
'company_user' => $contract['company_b_user'],
'company_phone' => $contract['company_b_phone'],
'create_time' => time(),
'status' => 2,
2023-10-12 11:52:32 +08:00
'use_user_id' =>$params['use_user_id'],
2023-10-11 17:59:49 +08:00
'use_user_name' =>$params['use_user_name'],
'use_user_phone' =>$params['use_user_phone'],
];
}
2023-09-07 09:39:32 +08:00
}
2023-10-11 17:41:19 +08:00
$status = 4;
2023-09-07 09:39:32 +08:00
}
2023-10-11 17:41:19 +08:00
//更新本地车辆状态
Vehicle::where('id','in',array_column($cars,'id'))->update(['status'=>$status]);
//添加车辆到租赁列表
(new VehicleRent()) -> saveAll($data);
return $this->success('更新成功1');
2023-09-07 09:39:32 +08:00
}
2023-10-11 17:41:19 +08:00
$contract->where('id', $contract['id'])->save($params);
2023-10-12 14:38:26 +08:00
if($contract['type'] == 0 && isset($params['cars_info']) && !empty($params['cars_info'])){
2023-10-11 17:41:19 +08:00
$cars = json_decode($params['cars_info'], true);
//更新本地车辆状态
Vehicle::where('id','in',array_column($cars,'id'))->update(['status'=>1]);
2023-09-07 09:39:32 +08:00
}
2023-10-11 17:41:19 +08:00
return $this->success('更新成功2');
2023-09-07 09:39:32 +08:00
}
public function checkCarNum() {
//获取参数
$num = $this->request->post('num');
if(empty($num)){
2023-09-07 10:08:23 +08:00
return $this->fail('物理系统车辆数量不足');
2023-09-07 09:39:32 +08:00
}
//获取车辆
$data = Vehicle::where('status',0)->where('type',0)->limit($num)->select();
//判断
if($data->count() < $num){
2023-09-07 10:08:23 +08:00
return $this->fail('物理系统车辆数量不足');
2023-09-07 09:39:32 +08:00
}
2023-09-07 10:08:23 +08:00
return $this->success('物理系统车辆数量充足');
2023-09-07 09:39:32 +08:00
}
public function getAvailableVehicles() {
$data = Vehicle::field('id,license')->where('status',0)->where('type',0)->select();
return $this->success('请求成功',$data->toArray());
2023-08-29 17:19:11 +08:00
}
}