870 lines
40 KiB
PHP
870 lines
40 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\VehicleBuyRecord;
|
||
|
use app\common\model\vehicle\VehicleRent;
|
||
|
use think\facade\Db;
|
||
|
|
||
|
class VehicleController extends BaseApiController
|
||
|
{
|
||
|
//镇街公司想物流平台申请租赁车辆
|
||
|
public function setContractByTownCompany()
|
||
|
{
|
||
|
//获取参数 测试1111
|
||
|
$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'])->whereNotIn('type','1,2')->count();
|
||
|
//申请中的车辆
|
||
|
$applyCar = VehicleContract::field('num')->where('company_b_id',$this->userInfo['company_id'])->where('status','in','-1,0,1,2')->sum('num');
|
||
|
//自有车辆数量
|
||
|
$selfCar = VehicleContract::field('id')->where('company_a_id',$this->userInfo['company_id'])->where('type',1)->where('status','in','-1,0,1,2,3')->sum('num');
|
||
|
//购买车辆数量
|
||
|
//获取下面的小组服务公司
|
||
|
$villageCompanys = Contract::field('party_b')->where('party_a',$this->userInfo['company_id'])->where('signing_timer',2)->select()->toArray();
|
||
|
$buyCar = 0;
|
||
|
foreach ($villageCompanys as $v) {
|
||
|
$aa = VehicleContract::field('id')->where('company_b_id',$v['party_b'])->where('type',3)->where('status','in','-1,0,1,2,3')->findOrEmpty();
|
||
|
if(!$aa->isEmpty()){
|
||
|
$buyCar += 1;
|
||
|
}
|
||
|
}
|
||
|
//可在租车辆
|
||
|
$doubleRentCar = max($villageCompany - $rentCar - $applyCar - $selfCar - $buyCar,0);
|
||
|
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'] != 41){
|
||
|
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)->findOrEmpty();
|
||
|
if($contract->isEmpty()){
|
||
|
return $this->fail('未找到签约镇街公司');
|
||
|
}
|
||
|
$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($party_a['company_type'] != 41){
|
||
|
return $this->fail('不能与非镇街公司签约');
|
||
|
}
|
||
|
if($party_a['is_contract'] != 1){
|
||
|
return $this->fail('当前镇街公司未签约');
|
||
|
}
|
||
|
//判断是否申请过
|
||
|
$vehicleContract = VehicleContract::where('company_b_id',$this->userInfo['company_id'])->whereNotIn('type','2,3')->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();
|
||
|
$vehicleContract['cars_info'] = json_decode($vehicleContract['cars_info'],true);
|
||
|
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'] != 41){
|
||
|
return $this->fail('非镇街公司不能访问');
|
||
|
}
|
||
|
//获取小组服务公司申请信息
|
||
|
$vehicleContract_pre = VehicleContract::where('company_a_id',$company['id'])->where('status','in','-1,0,1,2')->where('type','<>',2)->limit(4)->order('create_time desc')->select()->toArray();
|
||
|
$vehicleContract = [];
|
||
|
foreach ($vehicleContract_pre as $v) {
|
||
|
$vehicleBuy = VehicleBuyRecord::where('contract_id',$v['id'])->findOrEmpty();
|
||
|
if($vehicleBuy->isEmpty()){
|
||
|
$vehicleContract[] = $v;
|
||
|
}
|
||
|
}
|
||
|
//获取车辆列表
|
||
|
$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'])->whereNotIn('type','1,2')->count();
|
||
|
//申请中的车辆
|
||
|
$applyCar = VehicleContract::field('num')->where('company_b_id',$company['id'])->where('status','in','-1,0,1,2')->sum('num');
|
||
|
//自有车辆数量
|
||
|
$selfCar = VehicleContract::field('id')->where('company_a_id',$company['id'])->where('type',1)->where('status','in','-1,0,1,2,3')->sum('num');
|
||
|
//购买车辆数量
|
||
|
//获取下面的小组服务公司
|
||
|
$villageCompanys = Contract::field('party_b')->where('party_a',$company['id'])->where('signing_timer',2)->select()->toArray();
|
||
|
$buyCar = 0;
|
||
|
foreach ($villageCompanys as $v) {
|
||
|
$aa = VehicleContract::field('id')->where('company_b_id',$v['party_b'])->where('type',3)->where('status','in','-1,0,1,2,3')->findOrEmpty();
|
||
|
if(!$aa->isEmpty()){
|
||
|
$buyCar += 1;
|
||
|
}
|
||
|
}
|
||
|
//可在租车辆
|
||
|
$doubleRentCar = max($villageCompany - $rentCar - $applyCar - $selfCar - $buyCar,0);
|
||
|
//设置数据
|
||
|
$data = [
|
||
|
'apply' => $vehicleContract,
|
||
|
'car_list' => $vehicleRentCars,
|
||
|
'monitor_num' => $villageCompany,
|
||
|
'rent_num' => $rentCar,
|
||
|
'can_rent_num' => intval($doubleRentCar),
|
||
|
'self_num' => $selfCar,
|
||
|
'buy_num' => $buyCar,
|
||
|
'apply_num' => $applyCar
|
||
|
];
|
||
|
//返回
|
||
|
return $this->success('请求成功',$data);
|
||
|
}
|
||
|
|
||
|
public function villageCompanyIndex() {
|
||
|
//获取公司信息
|
||
|
$company = Company::field('id,master_name as user_name,master_phone as user_phone,company_name,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('非小组公司不能访问');
|
||
|
}
|
||
|
//获取购买车辆记录
|
||
|
$buyCarRent = VehicleBuyRecord::where('company_id',$company['id'])->where('status','<>',4)->findOrEmpty();
|
||
|
if($buyCarRent->isEmpty()){
|
||
|
$data = VehicleContract::where('company_b_id',$company['id'])->where('type','<>',2)->order('id desc')->findOrEmpty();
|
||
|
}else{
|
||
|
$data = $buyCarRent;
|
||
|
$data['status'] = 0;
|
||
|
$data['type'] = 0;
|
||
|
}
|
||
|
//获取签约合同
|
||
|
return $this->success('请求成功',$data->toArray());
|
||
|
}
|
||
|
|
||
|
//车辆详情
|
||
|
public function vehicleInfo() {
|
||
|
$id = $this->request->get('car_id');
|
||
|
//获取数据
|
||
|
if(!empty($id) && $id != 'undefined'){
|
||
|
$data = VehicleRent::where('car_id',$id)->where('status',2)->findOrEmpty();
|
||
|
}else{
|
||
|
$data = VehicleRent::where('rent_company_id',$this->userInfo['company_id'])->where('status',2)->findOrEmpty();
|
||
|
}
|
||
|
if($data->isEmpty()){
|
||
|
return $this->fail('数据不存在');
|
||
|
}
|
||
|
$data['mileage'] = 0;
|
||
|
$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='.$data['car_id']);
|
||
|
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'] != 41){
|
||
|
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();
|
||
|
if($zjCompany->isEmpty()){
|
||
|
return $this->fail('未获取到小组服务公司签约的镇街公司');
|
||
|
}
|
||
|
//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)->where('type','<>',1)->where('type','<>',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))]);
|
||
|
foreach($result['data'] as $k => $v){
|
||
|
$result['data'][$k]['checked'] = [];
|
||
|
}
|
||
|
//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();
|
||
|
if($zjCompany->isEmpty()){
|
||
|
return $this->fail('签约镇街公司不存在');
|
||
|
}
|
||
|
//判断购买车辆中是否包含镇街公司租赁的车辆
|
||
|
$car_ids = array_column($cars,'id');
|
||
|
$zjRentCars = VehicleRent::field('car_id as id,car_license as license')->where('company_id',$zjCompany['party_a'])->where('car_id','in',$car_ids)->where('status',0)->where('type',0)->select();
|
||
|
//判断小组服务公司是否租车或者有自有车辆
|
||
|
$xzRentCars = VehicleRent::where('rent_company_id',$xzCompany['id'])->where('status','in','1,2')->where('type','<>',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']);
|
||
|
}
|
||
|
//如果没有租赁车俩和上传自有车辆,但有购买镇街公司租赁的车辆 则发起镇街公司与平台公司的解约合同
|
||
|
if($xzRentCars->isEmpty() && !$zjRentCars->isEmpty()){
|
||
|
$zjCompanyInfo = Company::field('id,company_name,master_name,master_phone,master_email,organization_code')->where('id',$zjCompany['party_a'])->findOrEmpty();
|
||
|
//发送解约合同给物流系统
|
||
|
$curl_result = curl_post(env('project.logistic_domain').'/api/signContract',[],[
|
||
|
'num' => count($zjRentCars),
|
||
|
'company_id' => $zjCompanyInfo['id'],
|
||
|
'company_name' => $zjCompanyInfo['company_name'],
|
||
|
'company_code' => $zjCompanyInfo['organization_code'],
|
||
|
'company_user' => $zjCompanyInfo['master_name'],
|
||
|
'company_phone' => $zjCompanyInfo['master_phone'],
|
||
|
'company_email' => $zjCompanyInfo['master_email'],
|
||
|
'cars_info' => json_encode($zjRentCars),
|
||
|
'type' => 2
|
||
|
]);
|
||
|
if(empty($curl_result)){
|
||
|
return $this->fail('null return from logistic');
|
||
|
}
|
||
|
if($curl_result['code'] == 0){
|
||
|
return $this->fail($curl_result['msg'].' from logistic');
|
||
|
}
|
||
|
//生成本地合同
|
||
|
$res = VehicleContract::create($curl_result['data']);
|
||
|
//生成关联记录
|
||
|
VehicleBuyRecord::create([
|
||
|
'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),
|
||
|
'num' => count($cars),
|
||
|
'status' => 3,
|
||
|
'contract_id' => $res->id,
|
||
|
'create_time' => time()
|
||
|
]);
|
||
|
//更改本地车辆状态
|
||
|
VehicleRent::where('car_id','in',$car_ids)->update(['status'=>1]);
|
||
|
}
|
||
|
//如果有租赁车俩和上传自有车辆,但没有购买镇街公司租赁的车辆 则先向镇街公司发起解约合同
|
||
|
if(!$xzRentCars->isEmpty() && $zjRentCars->isEmpty()){
|
||
|
//获取镇街公司信息
|
||
|
$zjCompanyInfo = Company::field('id,company_name,master_name,master_phone,master_email,organization_code')->where('id',$zjCompany['party_a'])->findOrEmpty();
|
||
|
//生成本地解约合同
|
||
|
$res = VehicleContract::create([
|
||
|
'contract_no' => time(),
|
||
|
'contract_logistic_id' => 0,
|
||
|
'company_a_id' => $zjCompanyInfo['id'],
|
||
|
'company_a_name' => $zjCompanyInfo['company_name'],
|
||
|
'company_a_code' => $zjCompanyInfo['organization_code'],
|
||
|
'company_a_user' => $zjCompanyInfo['master_name'],
|
||
|
'company_a_phone' => $zjCompanyInfo['master_phone'],
|
||
|
'company_a_email' => $zjCompanyInfo['master_email'],
|
||
|
'company_b_id' => $xzCompany['id'],
|
||
|
'company_b_name' => $xzCompany['company_name'],
|
||
|
'company_b_code' => $xzCompany['organization_code'],
|
||
|
'company_b_user' => $xzCompany['master_name'],
|
||
|
'company_b_phone' => $xzCompany['master_phone'],
|
||
|
'company_b_email' => $xzCompany['master_email'],
|
||
|
'num' =>1,
|
||
|
'cars_info' => json_encode([['id'=>$xzRentCars['car_id'],'license'=>$xzRentCars['car_license']]]),
|
||
|
'type' => 2,
|
||
|
'status' => 0,
|
||
|
'create_time' => time(),
|
||
|
'update_time' => time(),
|
||
|
]);
|
||
|
//生成关联记录
|
||
|
if($xzRentCars['type'] == 0){
|
||
|
$status = 2;
|
||
|
}else{
|
||
|
$status = 1;
|
||
|
}
|
||
|
VehicleBuyRecord::create([
|
||
|
'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),
|
||
|
'num' => count($cars),
|
||
|
'status' => $status,
|
||
|
'contract_id' => $res->id,
|
||
|
'create_time' => time()
|
||
|
]);
|
||
|
}
|
||
|
//如果有租赁车俩和上传自有车辆,也有购买镇街公司租赁的车辆 则先向镇街公司发起解约合同,再由镇街公司向平台公司发起解约合同
|
||
|
if(!$xzRentCars->isEmpty() && !$zjRentCars->isEmpty()){
|
||
|
//获取镇街公司信息
|
||
|
$zjCompanyInfo = Company::field('id,company_name,master_name,master_phone,master_email,organization_code')->where('id',$zjCompany['party_a'])->findOrEmpty();
|
||
|
//生成本地解约合同
|
||
|
$res = VehicleContract::create([
|
||
|
'contract_no' => time(),
|
||
|
'contract_logistic_id' => 0,
|
||
|
'company_a_id' => $zjCompanyInfo['id'],
|
||
|
'company_a_name' => $zjCompanyInfo['company_name'],
|
||
|
'company_a_code' => $zjCompanyInfo['organization_code'],
|
||
|
'company_a_user' => $zjCompanyInfo['master_name'],
|
||
|
'company_a_phone' => $zjCompanyInfo['master_phone'],
|
||
|
'company_a_email' => $zjCompanyInfo['master_email'],
|
||
|
'company_b_id' => $xzCompany['id'],
|
||
|
'company_b_name' => $xzCompany['company_name'],
|
||
|
'company_b_code' => $xzCompany['organization_code'],
|
||
|
'company_b_user' => $xzCompany['master_name'],
|
||
|
'company_b_phone' => $xzCompany['master_phone'],
|
||
|
'company_b_email' => $xzCompany['master_email'],
|
||
|
'num' =>1,
|
||
|
'cars_info' => json_encode([['id'=>$xzRentCars['car_id'],'license'=>$xzRentCars['car_license']]]),
|
||
|
'type' => 2,
|
||
|
'status' => 0,
|
||
|
'create_time' => time(),
|
||
|
'update_time' => time(),
|
||
|
]);
|
||
|
//生成关联记录
|
||
|
VehicleBuyRecord::create([
|
||
|
'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),
|
||
|
'num' => count($cars),
|
||
|
'status' => 2,
|
||
|
'contract_id' => $res->id,
|
||
|
'create_time' => time()
|
||
|
]);
|
||
|
}
|
||
|
//更新物流系统
|
||
|
curl_post(env('project.logistic_domain').'/api/Vehicle/updateVehicleStatusToBuy',[],['car_ids'=>implode(',',$car_ids)]);
|
||
|
return $this->success('合同发起成功,等待审核 from task');
|
||
|
}
|
||
|
}
|