720 lines
32 KiB
PHP
720 lines
32 KiB
PHP
<?php
|
||
|
||
namespace app\api\controller;
|
||
|
||
use app\common\enum\notice\NoticeEnum;
|
||
use app\common\model\Company;
|
||
use app\common\model\contract\Contract;
|
||
use app\common\model\contract\VehicleContract;
|
||
use app\common\model\vehicle\VehicleRent;
|
||
use think\facade\Db;
|
||
|
||
class VehicleController extends BaseApiController
|
||
{
|
||
//镇街公司想物流平台申请租赁车辆
|
||
public function setContractByTownCompany()
|
||
{
|
||
//获取参数
|
||
$params = $this->request->post(['num']);
|
||
//验证参数
|
||
if(empty($params['num'])){
|
||
return $this->fail('缺少必要参数');
|
||
}
|
||
//获取该公司已签约的小组服务公司数量
|
||
$villageCompany = Contract::field('id')->where('party_a',$this->userInfo['company_id'])->where('signing_timer',2)->count();
|
||
//已经租赁车辆
|
||
$rentCar = VehicleRent::field('id')->where('company_id',$this->userInfo['company_id'])->where('type','<>', 1)->count();
|
||
//申请中的车辆
|
||
$applyCar = VehicleContract::field('num')->where('company_b_id',$this->userInfo['company_id'])->where('status','in','-1,0,1,2')->sum('num');
|
||
//自有车辆数量
|
||
$selfCar = VehicleRent::field('id')->where('company_id',$this->userInfo['company_id'])->where('status','<>',3)->where('type',1)->count();
|
||
//可在租车辆
|
||
$doubleRentCar = $villageCompany - $rentCar - $applyCar - $selfCar;
|
||
if($params['num'] > $doubleRentCar ){
|
||
return $this->fail('数量超过可再租车辆数');
|
||
}
|
||
//判断物流车辆
|
||
$checkNum = curl_post(env('project.logistic_domain').'/api/checkCarNum',[],['num'=>$params['num']]);
|
||
if($checkNum == null){
|
||
return $this->fail('检查车辆数量错误');
|
||
}
|
||
if($checkNum['code'] == 0){
|
||
return $this->fail($checkNum['msg']);
|
||
}
|
||
//查找乙方公司信息
|
||
$party_b = Company::field('id,company_name,organization_code,master_name,master_phone,master_email,company_type')->where('id',$this->userInfo['company_id'])->find();
|
||
if(empty($party_b)) {
|
||
return $this->fail('数据不存在');
|
||
}
|
||
//判断是否是镇街公司
|
||
if($party_b['company_type'] != 16){
|
||
return ['code'=>0,'msg'=>'非镇街公司不能签约'];
|
||
}
|
||
//发送生成合同给物流信息
|
||
$curl_result = curl_post(env('project.logistic_domain').'/api/signContract',[],[
|
||
'num' => $params['num'],
|
||
'company_id' => $party_b['id'],
|
||
'company_name' => $party_b['company_name'],
|
||
'company_code' => $party_b['organization_code'],
|
||
'company_user' => $party_b['master_name'],
|
||
'company_phone' => $party_b['master_phone'],
|
||
'company_email' => $party_b['master_email'],
|
||
]);
|
||
if(empty($curl_result)){
|
||
return $this->fail('null return from logistic');
|
||
}
|
||
if($curl_result['code'] == 0){
|
||
return $this->fail($curl_result['msg'].' from logistic');
|
||
}
|
||
Db::startTrans();
|
||
try {
|
||
$create_result = VehicleContract::create($curl_result['data']);
|
||
if($create_result->id){
|
||
Db::commit();
|
||
return $this->success('合同发起成功,等待审核 from task');
|
||
}else{
|
||
Db::rollback();
|
||
return $this->success('合同发起失败,请稍后重试 from task');
|
||
}
|
||
} catch (\Exception $e) {
|
||
Db::rollback();
|
||
return $this->fail($e->getMessage().' from task');
|
||
}
|
||
}
|
||
|
||
//镇街公司生成小组服务公司租赁合同
|
||
public function setContractByVillageCompany(){
|
||
//获取参数
|
||
$params = $this->request->post(['id','car_id']);
|
||
if(empty($params['id'])){
|
||
return $this->fail('缺少必要参数');
|
||
}
|
||
//获取数据
|
||
$vehicleContract = VehicleContract::where('id',$params['id'])->find();
|
||
if(empty($vehicleContract)){
|
||
return $this->fail('未找到数据');
|
||
}
|
||
if($this->userInfo['company_id'] != $vehicleContract['company_a_id']){
|
||
return $this->fail('数据错误');
|
||
}
|
||
if($vehicleContract['status'] != -1) {
|
||
return $this->fail('数据状态错误');
|
||
}
|
||
if($vehicleContract['type'] == 0){
|
||
if(empty($params['car_id'])){
|
||
return $this->fail('缺少参数car_id');
|
||
}
|
||
}
|
||
if($vehicleContract['type'] == 0){
|
||
$car = VehicleRent::field('car_id as id,car_license as license')->where('car_id',$params['car_id'])->find();
|
||
if(empty($car)){
|
||
return $this->fail('车辆数据有误');
|
||
}
|
||
$json = json_encode($car->toArray());
|
||
//更改车辆状态
|
||
VehicleRent::where('car_id',$params['car_id'])->update(['status'=>1]);
|
||
//更改状态
|
||
$result = VehicleContract::where('id',$params['id'])->update(['status'=>0,'cars_info'=>$json,'update_time'=>time()]);
|
||
}else{
|
||
//更改状态
|
||
$result = VehicleContract::where('id',$params['id'])->update(['status'=>0,'update_time'=>time()]);
|
||
}
|
||
//返回数据
|
||
if($result){
|
||
return $this->success('合同生成成功,等待风控部审核');
|
||
}else{
|
||
return $this->fail('合同生成失败,请稍后重试');
|
||
}
|
||
}
|
||
|
||
//镇街公司发起合同
|
||
public function initiatingRentCarContract() {
|
||
//获取参数
|
||
$params = $this->request->post(['id']);
|
||
if(empty($params['id'])){
|
||
return $this->fail('缺少必要参数');
|
||
}
|
||
//获取数据
|
||
$contract = VehicleContract::where('id',$params['id'])->find();
|
||
if(empty($contract)){
|
||
return $this->fail('数据不存在');
|
||
}
|
||
if($contract['status'] != 1){
|
||
return $this->fail('合同状态错误');
|
||
}
|
||
$signData = [
|
||
'name' => $contract['company_a_name'] . '的合同',
|
||
'signatories' => [
|
||
['fullName' => $contract['company_a_name'], 'identityType' => 12, 'identityCard' => $contract['company_a_code'], 'email' => $contract['company_a_email'], 'noNeedVerify' => 1, 'signLevel' => 1],
|
||
['fullName' => $contract['company_b_name'], 'identityType' => 12, 'identityCard' => $contract['company_b_code'], 'email' => $contract['company_b_email'], 'noNeedVerify' => 1, 'signLevel' => 1]
|
||
],
|
||
'url' => $contract['file']
|
||
];
|
||
$notify_url = '';
|
||
if($contract['type'] == 0){
|
||
$notify_url = env('project.website_domain').'/api/index/systemCarRent';
|
||
}elseif($contract['type'] == 1){
|
||
$notify_url = env('project.website_domain').'/api/index/selfCarRent';
|
||
}elseif($contract['type'] == 2){
|
||
$notify_url = env('project.website_domain').'/api/index/cancelRent';
|
||
}
|
||
$signRes = app(JunziqianController::class)->VehicleRentSigning($signData, $params['id'],$notify_url);
|
||
if ($signRes->success) {
|
||
$contract->save([
|
||
'id' => $contract['id'],
|
||
'contract_no' => $signRes->data,
|
||
'status' => 2
|
||
]);
|
||
if($contract['type'] == 2){
|
||
$smsTitle = '《解约合同》';
|
||
}else{
|
||
$smsTitle = '《租赁合同》';
|
||
}
|
||
$this->sendSms($params['id'],$smsTitle);
|
||
return $this->success('合同发送成功');
|
||
} else {
|
||
return $this->fail($signRes->msg);
|
||
}
|
||
}
|
||
|
||
public function sendSmsAgain() {
|
||
//获取参数
|
||
$id = $this->request->post('id');
|
||
if(empty($id)){
|
||
return $this->fail('参数错误');
|
||
}
|
||
//获取数据
|
||
$contract = VehicleContract::where('id',$id)->find();
|
||
if(empty($contract)){
|
||
return $this->fail('数据错误');
|
||
}
|
||
if($contract['type'] == 2){
|
||
$smsTitle = '《解约合同》';
|
||
}else{
|
||
$smsTitle = '《租赁合同》';
|
||
}
|
||
$this->sendSms($id,$smsTitle);
|
||
return $this->success('发送成功');
|
||
}
|
||
|
||
//小组服务公司租赁申请
|
||
public function rentApply() {
|
||
//验证请求类型
|
||
if(!$this->request->isPost()){
|
||
return $this->fail('请求类型错误');
|
||
}
|
||
//获取参数
|
||
$params = $this->request->post(['type','license','pic']);
|
||
if(!isset($params['type'])){
|
||
return $this->fail('缺少必要参数');
|
||
}
|
||
if($params['type'] == 1){
|
||
if(empty($params['license']) || empty($params['pic'])){
|
||
return $this->fail('缺少必要参数');
|
||
}
|
||
}
|
||
//获取当前公司信息
|
||
$party_b = Company::field('id,company_name,master_name,master_phone,master_email,is_contract,organization_code,company_type')->where('id',$this->userInfo['company_id'])->find();
|
||
if(empty($party_b)){
|
||
return $this->fail('账号异常');
|
||
}
|
||
if($party_b['company_type'] != 18){
|
||
return $this->fail('非小组服务公司不能申请');
|
||
}
|
||
if($party_b['is_contract'] != 1){
|
||
return $this->fail('当前小组服务公司未签约');
|
||
}
|
||
//获取签约信息
|
||
$contract = Contract::where('party_b',$this->userInfo['company_id'])->where('signing_timer',2)->find();
|
||
$party_a = Company::field('id,company_name,master_name,master_phone,master_email,is_contract,organization_code,company_type')->where('id',$contract['party_a'])->find();
|
||
if(empty($contract) || empty($party_a)){
|
||
return $this->fail('未找到签约镇街公司');
|
||
}
|
||
if($party_a['company_type'] != 16){
|
||
return $this->fail('不能与非镇街公司签约');
|
||
}
|
||
if($party_a['is_contract'] != 1){
|
||
return $this->fail('当前镇街公司未签约');
|
||
}
|
||
//判断是否申请过
|
||
$vehicleContract = VehicleContract::where('company_b_id',$this->userInfo['company_id'])->where('type','<>',2)->whereNotIn('status','4,5,6')->find();
|
||
if(!empty($vehicleContract)){
|
||
return $this->fail('请勿重复申请');
|
||
}
|
||
if($params['type'] == 1){
|
||
$cars_info = json_encode(['license'=>$params['license'],'pic'=>$params['pic']]);
|
||
$car_type = 1;
|
||
}else{
|
||
$cars_info = null;
|
||
$car_type = 0;
|
||
}
|
||
//设置数据
|
||
$data = [
|
||
'contract_logistic_id' => 0,
|
||
'contract_no' => time(),
|
||
'company_a_id' => $party_a['id'],
|
||
'company_a_name' => $party_a['company_name'],
|
||
'company_a_code' => $party_a['organization_code'],
|
||
'company_a_user' => $party_a['master_name'],
|
||
'company_a_phone' => $party_a['master_phone'],
|
||
'company_a_email' => $party_a['master_email'],
|
||
'company_b_id' => $party_b['id'],
|
||
'company_b_name' => $party_b['company_name'],
|
||
'company_b_code' => $party_b['organization_code'],
|
||
'company_b_user' => $party_b['master_name'],
|
||
'company_b_phone' => $party_b['master_phone'],
|
||
'company_b_email' => $party_b['master_email'],
|
||
'cars_info' => $cars_info,
|
||
'num' => 1,
|
||
'type' => $car_type,
|
||
'status' => -1,
|
||
'create_time' => time(),
|
||
'update_time' => time()
|
||
];
|
||
//写入数据
|
||
$result = VehicleContract::create($data);
|
||
if($result){
|
||
return $this->success('申请成功,待镇街公司审核');
|
||
}else{
|
||
return $this->fail('申请失败,请稍后重试');
|
||
}
|
||
}
|
||
|
||
//镇街公司驳回小组服务公司的租赁申请
|
||
public function rejectRentApply() {
|
||
//验证请求类型
|
||
if(!$this->request->isPost()){
|
||
return $this->fail('请求类型错误');
|
||
}
|
||
//获取参数
|
||
$params = $this->request->post(['id','content']);
|
||
if(empty($params['id']) || empty($params['content'])){
|
||
return $this->fail('缺少必要参数');
|
||
}
|
||
//获取数据
|
||
$vehicleContract = VehicleContract::where('id',$params['id'])->find();
|
||
if(empty($vehicleContract)){
|
||
return $this->fail('未查找到数据');
|
||
}
|
||
if($vehicleContract['company_a_id'] != $this->userInfo['company_id']){
|
||
return $this->fail('数据不匹配');
|
||
}
|
||
//判断合同类型
|
||
if($vehicleContract['type'] == 2){
|
||
Db::startTrans();
|
||
try{
|
||
//查找原合同
|
||
$car = json_decode($vehicleContract['cars_info'],true);
|
||
$carRentInfo = VehicleRent::where('car_id',$car['id'])->findOrEmpty();
|
||
$oldVehicleContractUpdate = VehicleContract::where('id',$carRentInfo['contract_id'])->update(['status'=>3]);
|
||
//更新
|
||
$result = VehicleContract::where('id',$params['id'])->update([
|
||
'status' => 4,
|
||
'reject_message' => $params['content']
|
||
]);
|
||
if($oldVehicleContractUpdate && $result){
|
||
Db::commit();
|
||
return $this->success('驳回成功');
|
||
}else{
|
||
Db::rollback();
|
||
return $this->fail('驳回失败');
|
||
}
|
||
}catch (\Exception $e) {
|
||
Db::rollback();
|
||
return $this->fail($e->getMessage());
|
||
}
|
||
}else{
|
||
//更新
|
||
$result = VehicleContract::where('id',$params['id'])->update([
|
||
'status' => 4,
|
||
'reject_message' => $params['content']
|
||
]);
|
||
if($result){
|
||
return $this->success('驳回成功');
|
||
}else{
|
||
return $this->fail('驳回失败');
|
||
}
|
||
}
|
||
}
|
||
|
||
//镇街公司收到的小组服务公司租赁申请列表
|
||
public function rentApplyList() {
|
||
|
||
$data = VehicleContract::where('company_a_id',$this->userInfo['company_id'])->where('status','<>',4)->select();
|
||
return $this->success('请求成功',$data->toArray());
|
||
}
|
||
|
||
//小组服务公司租赁申请详情
|
||
public function rentApplyInfo() {
|
||
//获取参数
|
||
$id = $this->request->get('id');
|
||
if(empty($id)){
|
||
return $this->fail('缺少必要参数');
|
||
}
|
||
//获取数据
|
||
$vehicleContract = VehicleContract::where('id',$id)->find();
|
||
if(empty($vehicleContract)){
|
||
return $this->fail('获取数据失败');
|
||
}
|
||
if($vehicleContract['company_a_id'] != $this->userInfo['company_id']){
|
||
return $this->fail('数据不匹配');
|
||
}
|
||
$vehicleRentCars = VehicleRent::where('company_id',$vehicleContract['company_a_id'])->where('status',0)->select()->toArray();
|
||
$data = [
|
||
'vehicleContract' => $vehicleContract->toArray(),
|
||
'vehicleRentCars' => $vehicleRentCars
|
||
];
|
||
return $this->success('请求成功',$data);
|
||
}
|
||
|
||
//镇街公司车辆管理首页
|
||
public function townCompanyVehicleIndex() {
|
||
//获取公司信息
|
||
$company = Company::where('id',$this->userInfo['company_id'])->find();
|
||
if(empty($company)){
|
||
return $this->fail('数据错误');
|
||
}
|
||
if($company['company_type'] != 16){
|
||
return $this->fail('非镇街公司不能访问');
|
||
}
|
||
//获取小组服务公司申请信息
|
||
$vehicleContract = VehicleContract::where('company_a_id',$company['id'])->where('status','in','-1,0,1,2')->limit(4)->order('create_time desc')->select()->toArray();
|
||
//获取车辆列表
|
||
$vehicleRentCars = VehicleRent::where('company_id',$company['id'])->where('status','in','0,1,2')->select()->each(function($item){
|
||
if($item['status'] == 2){
|
||
$item['rent_user'] = Company::field('company_name,master_name as user_name,master_phone as user_phone,province,city,area,street,village,brigade')->where('id',$item['rent_company_id'])->find()->append(['province_name', 'city_name', 'area_name', 'street_name', 'village_name','brigade_name']);
|
||
}
|
||
})->toArray();
|
||
//获取该公司已签约的小组服务公司数量
|
||
$villageCompany = Contract::field('id')->where('party_a',$company['id'])->where('signing_timer',2)->count();
|
||
//已经租赁车辆
|
||
$rentCar = VehicleRent::field('id')->where('company_id',$company['id'])->where('type','<>', 1)->count();
|
||
//申请中的车辆
|
||
$applyCar = VehicleContract::field('num')->where('company_b_id',$company['id'])->where('status','in','-1,0,1,2')->sum('num');
|
||
//自有车辆数量
|
||
$selfCar = VehicleRent::field('id')->where('company_id',$company['id'])->where('status','<>',3)->where('type',1)->count();
|
||
//可在租车辆
|
||
$doubleRentCar = $villageCompany - $rentCar - $applyCar - $selfCar;
|
||
//设置数据
|
||
$data = [
|
||
'apply' => $vehicleContract,
|
||
'car_list' => $vehicleRentCars,
|
||
'monitor_num' => $villageCompany,
|
||
'rent_num' => $rentCar,
|
||
'can_rent_num' => intval($doubleRentCar),
|
||
'self_num' => $selfCar,
|
||
'apply_num' => $applyCar
|
||
];
|
||
//返回
|
||
return $this->success('请求成功',$data);
|
||
}
|
||
|
||
public function villageCompanyIndex() {
|
||
//获取公司信息
|
||
$company = Company::field('id,company_type,province,city,area,street,village,brigade')->where('id',$this->userInfo['company_id'])->find()->append(['province_name', 'city_name', 'area_name', 'street_name', 'village_name','brigade_name']);
|
||
if(empty($company)){
|
||
return $this->fail('数据错误');
|
||
}
|
||
if($company['company_type'] != 18 ){
|
||
return $this->fail('非小组公司不能访问');
|
||
}
|
||
//获取申请信息
|
||
$vehicleContract = VehicleContract::where('company_b_id',$company['id'])->where('type','<>',2)->order('id desc')->findOrEmpty();
|
||
if($vehicleContract['status'] == 3){
|
||
if(!empty($vehicleContract['cars_info'])){
|
||
$vehicleContract['cars_info'] = json_decode($vehicleContract['cars_info'],true);
|
||
if(!empty($vehicleContract['cars_info'])){
|
||
$arr = $vehicleContract['cars_info'];
|
||
$arr['mileage'] = 0;
|
||
$position = curl_get(env('project.logistic_domain').'/api/getCarLocal?car_id='.$arr['id']);
|
||
if($position && $position['code'] == 1){
|
||
$arr['lon'] = $position['data']['lon'];
|
||
$arr['lat'] = $position['data']['lat'];
|
||
}
|
||
$vehicleContract['cars_info'] = $arr;
|
||
}
|
||
}
|
||
$vehicleContract['province'] = $company['province_name'];
|
||
$vehicleContract['city'] = $company['city_name'];
|
||
$vehicleContract['area'] = $company['area_name'];
|
||
$vehicleContract['street'] = $company['street_name'];
|
||
$vehicleContract['village'] = $company['village_name'];
|
||
$vehicleContract['brigade'] = $company['brigade_name'];
|
||
}
|
||
//返回数据
|
||
return $this->success('请求成功',$vehicleContract->toArray());
|
||
}
|
||
|
||
//车辆详情
|
||
public function vehicleInfo() {
|
||
//获取参数
|
||
$carId = $this->request->get('car_id');
|
||
if(empty($carId)){
|
||
return $this->fail('缺少必要参数');
|
||
}
|
||
//获取数据
|
||
$data = VehicleRent::where('car_id',$carId)->find();
|
||
if(empty($data)){
|
||
return $this->fail('数据错误');
|
||
}
|
||
$data['mileage'] = 0;
|
||
if($data['status'] == 2){
|
||
$data['company'] = Company::field('company_name,master_name as user_name,master_phone as user_phone,province,city,area,street,village,brigade')->where('id',$data['rent_company_id'])->find()->append(['province_name', 'city_name', 'area_name', 'street_name', 'village_name','brigade_name']);
|
||
//获取合同
|
||
$data['contract'] = VehicleContract::field('id,contract_no,contract_url,file,status,create_time,update_time')->where('id',$data['contract_id'])->findOrEmpty();
|
||
}
|
||
//当前坐标位置
|
||
$position = curl_get(env('project.logistic_domain').'/api/getCarLocal?car_id='.$carId);
|
||
if($position && $position['code'] == 1){
|
||
$data['position'] = $position['data'];
|
||
}else{
|
||
$data['position'] = [];
|
||
}
|
||
return $this->success('请求成功',$data->toArray());
|
||
}
|
||
|
||
public function vehicleTrack() {
|
||
//获取参数
|
||
$params = $this->request->post(['car_id','start_time','end_time']);
|
||
if(empty($params['car_id']) || empty($params['start_time']) || empty($params['end_time'])){
|
||
return $this->fail('缺少必要参数');
|
||
}
|
||
//获取轨迹
|
||
$url = env('project.logistic_domain').'/api/getCarHistory?car_id='.$params['car_id'].'&start_time='.$params['start_time'].'&end_time='.$params['end_time'];
|
||
$result = curl_get($url);
|
||
$data = [];
|
||
foreach($result['data'] as $k => $v){
|
||
$data[$k]['latitude'] = $v['lat'];
|
||
$data[$k]['longitude'] = $v['lon'];
|
||
}
|
||
return $this->success('success',$data);
|
||
}
|
||
|
||
public function cancelContract() {
|
||
//获取参数
|
||
$params = $this->request->post(['car_id']);
|
||
if(empty($params['car_id'])){
|
||
return $this->fail('参数错误');
|
||
}
|
||
//获取车辆信息
|
||
$carInfo = VehicleRent::where('car_id',$params['car_id'])->where('type',1)->find();
|
||
if(empty($carInfo)){
|
||
return $this->fail('车辆信息错误');
|
||
}
|
||
if($carInfo['rent_company_id'] != $this->userInfo['company_id']){
|
||
return $this->fail('当前公司与车辆信息不匹配');
|
||
}
|
||
//获取原签约信息
|
||
$contract = VehicleContract::where('id',$carInfo['contract_id'])->where('status',3)->find();
|
||
if(empty($contract)){
|
||
return $this->fail('原签约信息错误');
|
||
}
|
||
//获取甲方公司信息
|
||
$party_a = Company::where('id',$carInfo['company_id'])->find();
|
||
if(empty($party_a)){
|
||
return $this->fail('甲方公司信息错误');
|
||
}
|
||
//获取乙方公司信息
|
||
$party_b = Company::where('id',$this->userInfo['company_id'])->find();
|
||
if(empty($party_b)){
|
||
return $this->fail('乙方公司信息错误');
|
||
}
|
||
//判断是否申请过
|
||
$vehicleContract = VehicleContract::where('company_b_id',$this->userInfo['company_id'])->where('type',3)->where('status','<>',4)->find();
|
||
if(!empty($vehicleContract)){
|
||
return $this->fail('请勿重复申请');
|
||
}
|
||
//设置数据
|
||
$data = [
|
||
'contract_logistic_id' => 0,
|
||
'contract_no' => time(),
|
||
'company_a_id' => $party_a['id'],
|
||
'company_a_name' => $party_a['company_name'],
|
||
'company_a_code' => $party_a['organization_code'],
|
||
'company_a_user' => $party_a['master_name'],
|
||
'company_a_phone' => $party_a['master_phone'],
|
||
'company_a_email' => $party_a['master_email'],
|
||
'company_b_id' => $party_b['id'],
|
||
'company_b_name' => $party_b['company_name'],
|
||
'company_b_code' => $party_b['organization_code'],
|
||
'company_b_user' => $party_b['master_name'],
|
||
'company_b_phone' => $party_b['master_phone'],
|
||
'company_b_email' => $party_b['master_email'],
|
||
'cars_info' => json_encode(['id'=>$carInfo['car_id'],'license'=>$carInfo['car_license']]),
|
||
'num' => 1,
|
||
'type' => 2,
|
||
'status' => -1,
|
||
'create_time' => time(),
|
||
'update_time' => time(),
|
||
'old_file' => $contract['contract_url'],
|
||
];
|
||
Db::startTrans();
|
||
try{
|
||
//写入数据
|
||
$new_result = VehicleContract::create($data);
|
||
//修改原合同状态
|
||
$old_result = VehicleContract::where('id',$contract['id'])->update(['status'=>5]);
|
||
if($new_result && $old_result){
|
||
Db::commit();
|
||
return $this->success('申请成功,待镇街公司审核');
|
||
}else{
|
||
Db::rollback();
|
||
return $this->fail('申请失败,请稍后重试');
|
||
}
|
||
}catch (\Exception $e) {
|
||
Db::rollback();
|
||
return $this->fail($e->getMessage());
|
||
}
|
||
}
|
||
|
||
public function townCompanyContractList() {
|
||
//获取公司信息
|
||
$company = Company::where('id',$this->userInfo['company_id'])->find();
|
||
if(empty($company)){
|
||
return $this->fail('请求错误');
|
||
}
|
||
if($company['company_type'] != 16){
|
||
return $this->fail('非镇街公司不能访问');
|
||
}
|
||
$data = VehicleContract::field('id,contract_no,contract_url,status,create_time,update_time')->where('contract_logistic_id',0)->where('company_b_id',$company['id'])->select();
|
||
return $this->success('请求成功',$data->toArray());
|
||
}
|
||
|
||
public function sendSms($id,$title) {
|
||
//获取合同数据
|
||
$contract = VehicleContract::where('id',$id)->find();
|
||
if ($contract && !$contract->isEmpty() && $contract['file'] != '') {
|
||
//发送短信
|
||
$data = [
|
||
//甲方
|
||
[
|
||
"applyNo" => $contract['contract_no'],
|
||
"fullName" => $contract['company_a_name'],
|
||
"identityCard" => $contract['company_a_code'],
|
||
"identityType" => 12,
|
||
"master_phone" => $contract['company_a_phone'],
|
||
"type"=>"party_a"
|
||
],
|
||
//乙方
|
||
[
|
||
"applyNo" => $contract['contract_no'],
|
||
"fullName" => $contract['company_b_name'],
|
||
"identityCard" => $contract['company_b_code'],
|
||
"identityType" => 12,
|
||
"master_phone" => $contract['company_b_phone'],
|
||
"type"=>"party_b"
|
||
|
||
],
|
||
];
|
||
|
||
$url = [];
|
||
foreach ($data as $v) {
|
||
$res = app(JunziqianController::class)->SigningLink($v);
|
||
if (!$res->success) {
|
||
return false;
|
||
}
|
||
if ($v['type'] == 'party_a') {
|
||
$url['party_a'] =$res->data;
|
||
} else {
|
||
$url['party_b'] =$res->data;
|
||
}
|
||
//发送短信
|
||
$sms = [
|
||
'mobile' => $v['master_phone'],
|
||
'name' => $v['fullName'],
|
||
'type' => $title,
|
||
'code' => 'api/Hetong/info?id='.$id.'&type='.$v['type'],
|
||
'scene' => 'WQ'
|
||
];
|
||
$scene = NoticeEnum::getSceneByTag($sms['scene']);
|
||
if (empty($scene)) {
|
||
throw new \Exception('场景值异常');
|
||
}
|
||
event('Notice', [
|
||
'scene_id' => $scene,
|
||
'params' => $sms
|
||
]);
|
||
}
|
||
VehicleContract::where('id', $id)->update(['url' => json_encode($url)]);
|
||
return true;
|
||
}else{
|
||
return false;
|
||
}
|
||
}
|
||
|
||
//获取空闲车辆列表
|
||
public function getFreeCars(): \think\response\Json
|
||
{
|
||
//1、获取当前登录用户信息并判断其公司是否是小组服务公司
|
||
$xzCompany = Company::field('id,company_type')->where('id',$this->userInfo['company_id'])->findOrEmpty();
|
||
if($xzCompany->isEmpty() || $xzCompany['company_type'] != 18){
|
||
return $this->fail('当前用户非小组服务公司');
|
||
}
|
||
//2、获取小组服务公司签约的镇街公司
|
||
$zjCompany = Contract::field('party_a')->where('party_b',$this->userInfo['company_id'])->where('signing_timer',2)->findOrEmpty();
|
||
//3、获取镇街公司向平台租赁的且未二次租赁给小组公司的车辆
|
||
$zjRentCars = VehicleRent::field('car_id')->where('company_id',$zjCompany['party_a'])->where('status',0)->select()->toArray();
|
||
$zjRentCars = array_column($zjRentCars,'car_id');
|
||
//4、获取小组公司自己租赁的车辆
|
||
$xzRentCars = VehicleRent::field('car_id')->where('company_id',$zjCompany['party_a'])->where('rent_company_id',$xzCompany['id'])->where('status',2)->select()->toArray();
|
||
$xzRentCars = array_column($xzRentCars,'car_id');
|
||
//5、获取平台未出租的车辆
|
||
$result = curl_post(env('project.logistic_domain').'/api/Vehicle/getFreeCars',[],['ids'=>implode(',',array_merge($zjRentCars,$xzRentCars))]);
|
||
//6、返回
|
||
return $this->success('success',$result['data']);
|
||
}
|
||
|
||
//申请购车
|
||
public function buyCars() {
|
||
//验证请求类型
|
||
if(!$this->request->isPost()){
|
||
return $this->fail('请求类型错误');
|
||
}
|
||
//1、获取购买车辆的id参数
|
||
$cars = $this->request->post('cars');
|
||
$cars = json_decode($cars,true);
|
||
if(empty($cars)){
|
||
return $this->fail('参数错误');
|
||
}
|
||
//获取小组服务公司信息
|
||
$xzCompany = Company::field('id,company_name,master_name,master_phone,master_email,organization_code,company_type')->where('id',$this->userInfo['company_id'])->findOrEmpty();
|
||
if($xzCompany->isEmpty() || $xzCompany['company_type'] != 18){
|
||
return $this->fail('当前用户非小组服务公司');
|
||
}
|
||
//获取镇街公司信息
|
||
$zjCompany = Contract::field('party_a')->where('party_b',$this->userInfo['company_id'])->where('signing_timer',2)->findOrEmpty();
|
||
//判断购买车辆中是否包含镇街公司租赁的车辆
|
||
$car_ids = array_column($cars,'id');
|
||
$zjRentCars = VehicleRent::field('car_id,car_license')->where('company_id',$zjCompany['party_a'])->where('car_id','in',$car_ids)->select();
|
||
//判断小组服务公司是否租车或者有自有车辆
|
||
$xzRentCars = VehicleRent::where('rent_company_id',$xzCompany['id'])->where('status','in','1,2')->findOrEmpty();
|
||
//如果没有租赁车俩和上传自有车辆,也没有购买镇街公司租赁的车辆 则直接发起购买合同
|
||
if($xzRentCars->isEmpty() && $zjRentCars->isEmpty()){
|
||
//发送生成合同给物流系统
|
||
$curl_result = curl_post(env('project.logistic_domain').'/api/signContract',[],[
|
||
'num' => count($cars),
|
||
'company_id' => $xzCompany['id'],
|
||
'company_name' => $xzCompany['company_name'],
|
||
'company_code' => $xzCompany['organization_code'],
|
||
'company_user' => $xzCompany['master_name'],
|
||
'company_phone' => $xzCompany['master_phone'],
|
||
'company_email' => $xzCompany['master_email'],
|
||
'cars_info' => json_encode($cars),
|
||
'type' => 3
|
||
]);
|
||
if(empty($curl_result)){
|
||
return $this->fail('null return from logistic');
|
||
}
|
||
if($curl_result['code'] == 0){
|
||
return $this->fail($curl_result['msg'].' from logistic');
|
||
}
|
||
//生成本地合同
|
||
VehicleContract::create($curl_result['data']);
|
||
return $this->success('合同发起成功,等待审核 from task'
|
||
);
|
||
}
|
||
//2、判断当前小组服务公司是否租赁车辆,如果已经租赁车辆,则发起与镇街公司解除租赁关系的合同申请 =》如果解除合同签约成功将当前车辆状态重置为未出租,然后进行第三步
|
||
//3、如果当前小组服务公司没有租赁车辆,则判断购买的车辆中是否有镇街公司租赁的车辆,如果有,则发起镇街公司与平台公司的解除合同 =》 当解除合同签约成功,
|
||
//4、如果当前小组服务公司没有租赁车辆且购买的车辆中不包含镇街公司租赁的车辆,则直接发起与平台公司的购车合同
|
||
}
|
||
} |