2023-12-27 14:06:33 +08:00
< ? php
// +----------------------------------------------------------------------
// | likeadmin快速开发前后端分离管理后台( PHP版)
// +----------------------------------------------------------------------
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
// | 开源版本可自由商用, 可去除界面版权logo
// | gitee下载: https://gitee.com/likeshop_gitee/likeadmin
// | github下载: https://github.com/likeshop-github/likeadmin
// | 访问官网: https://www.likeadmin.cn
// | likeadmin团队 版权所有 拥有最终解释权
// +----------------------------------------------------------------------
// | author: likeadminTeam
// +----------------------------------------------------------------------
namespace app\api\controller ;
use app\api\logic\IndexLogic ;
use app\common\logic\RedisLogic ;
use app\common\model\Company ;
use app\common\model\company\CompanyProperty ;
use app\common\model\contract\Contract ;
use app\common\model\contract\ShopContract ;
use app\common\model\contract\VehicleContract ;
use app\common\model\ShopMerchant ;
use app\common\model\vehicle\VehicleBuyRecord ;
use app\common\model\vehicle\VehicleRent ;
use Symfony\Component\HttpClient\HttpClient ;
use think\cache\driver\Redis ;
use think\facade\Db ;
use think\facade\Log ;
2024-01-25 10:48:00 +08:00
use think\Model ;
2023-12-27 14:06:33 +08:00
use think\model\Pivot ;
use think\response\Json ;
/**
* index
* Class IndexController
* @ package app\api\controller
*/
class IndexController extends BaseApiController
{
2024-01-25 10:48:00 +08:00
public array $notNeedLogin = [ 'index' , 'config' , 'policy' , 'decorate' , 'notifyUrl' , 'notifyProperty' ,
'notifyAuthentication' , 'notifyVehicleContractUpdate' , 'townCarRent' , 'systemCarRent' , 'selfCarRent' ,
2024-01-27 17:21:44 +08:00
'cancelRent' , 'buyCar' , 'vehicleCarList' , 'addVillagerInfo' , 'getVillagerInfo' , 'editVillagerInfo' ];
2023-12-27 14:06:33 +08:00
/**
* @ notes 首页数据
* @ return Json
* @ throws \think\db\exception\DataNotFoundException
* @ throws \think\db\exception\DbException
* @ throws \think\db\exception\ModelNotFoundException
* @ author 段誉
* @ date 2022 / 9 / 21 19 : 15
*/
public function index ()
{
$result = IndexLogic :: getIndexData ();
return $this -> data ( $result );
}
/**
* @ notes 全局配置
* @ return Json
* @ throws \think\db\exception\DataNotFoundException
* @ throws \think\db\exception\DbException
* @ throws \think\db\exception\ModelNotFoundException
* @ author 段誉
* @ date 2022 / 9 / 21 19 : 41
*/
public function config ()
{
$parmas = $this -> request -> param ();
$group_id = $this -> userInfo ? $this -> userInfo [ 'group_id' ] : 1 ;
$result = IndexLogic :: getConfigData ( $group_id , $parmas );
return $this -> data ( $result );
}
/**
* @ notes 政策协议
* @ return Json
* @ author 段誉
* @ date 2022 / 9 / 20 20 : 00
*/
public function policy ()
{
$type = $this -> request -> get ( 'type/s' , '' );
$result = IndexLogic :: getPolicyByType ( $type );
return $this -> data ( $result );
}
/**
* @ notes 装修信息
* @ return Json
* @ author 段誉
* @ date 2022 / 9 / 21 18 : 37
*/
public function decorate ()
{
$id = $this -> request -> get ( 'id/d' );
$result = IndexLogic :: getDecorate ( $id );
return $this -> data ( $result );
}
/**签约回调 */
public function notifyUrl ()
{
$a = Request () -> get ();
if ( $a ) {
$find = Db :: name ( 'contract' ) -> where ( 'id' , $a [ 'id' ]) -> find ();
if ( $find ) {
if ( $find [ 'signing_timer' ] == 0 ) {
Db :: name ( 'contract' ) -> where ( 'id' , $a [ 'id' ]) -> update ([ 'signing_timer' => 1 ]);
return json ([ 'success' => true , 'msg' => '成功' ]);
} else if ( $find [ 'signing_timer' ] == 1 ) {
Db :: name ( 'contract' ) -> where ( 'id' , $a [ 'id' ]) -> update ([ 'status' => 1 , 'signing_timer' => 2 ]);
if ( $find [ 'type' ] == 1 ) {
Db :: name ( 'company' ) -> where ( 'id' , $find [ 'party_a' ]) -> update ([ 'status' => 1 , 'is_contract' => 1 ]);
Db :: name ( 'company' ) -> where ( 'id' , $find [ 'party_b' ]) -> update ([ 'status' => 1 , 'is_contract' => 1 ]);
} else {
Db :: name ( 'company' ) -> where ( 'id' , $find [ 'party_a' ]) -> update ([ 'status' => 1 , 'is_contract' => 1 ]);
Db :: name ( 'user' ) -> where ( 'id' , $find [ 'party_b' ]) -> update ([ 'is_contract' => 1 ]);
}
}
}
}
return json ([ 'success' => true , 'msg' => '成功' ]);
}
/**商户合同签约回调 */
public function shopContractNotifyUrl ()
{
$a = Request () -> param ();
Log :: info ([ '商户合同签约回调' , $a ]);
// 获取合同详情
if ( $a ) {
$find = Db :: name ( 'shop_contract' ) -> where ( 'id' , $a [ 'id' ]) -> find ();
if ( $find ) {
// 合同一方已签约
if ( $find [ 'signing_timer' ] == 0 ) {
Db :: name ( 'shop_contract' ) -> where ( 'id' , $a [ 'id' ]) -> update ([ 'signing_timer' => 1 ]);
return json ([ 'success' => true , 'msg' => '成功' ]);
} else if ( $find [ 'signing_timer' ] == 1 ) {
// 合同另一方已签约,修改合同状态,修改公司状态
Db :: name ( 'shop_contract' ) -> where ( 'id' , $a [ 'id' ]) -> update ([ 'status' => 1 , 'signing_timer' => 2 ]);
Db :: name ( 'shop_merchant' ) -> where ( 'id' , $find [ 'party_a' ]) -> update ([ 'status' => 1 , 'is_contract' => 1 ]);
Db :: name ( 'shop_merchant' ) -> where ( 'id' , $find [ 'party_b' ]) -> update ([ 'status' => 1 , 'is_contract' => 1 ]);
// 通知商城,商户签约完成
$shopMerchant = ShopMerchant :: find ([ 'id' => $find [ 'party_b' ]]);
$requestUtil = HttpClient :: create () -> request ( 'POST' , env ( 'url.shop_prefix' ) . '/api/merchant/syncStatus/' . $shopMerchant [ 'mer_intention_id' ], [
'body' => [ 'status' => 1 ]
]);
Log :: info ([ '商户合同签约回调-商城响应' , env ( 'url.shop_prefix' ) . '/api/merchant/syncStatus/' . $shopMerchant [ 'mer_intention_id' ]]);
Log :: info ([ '商户合同签约回调-商城响应' , $requestUtil -> getContent ()]);
}
}
}
return json ([ 'success' => true , 'msg' => '成功' ]);
}
//镇街车辆租赁回调
public function townCarRent () {
$id = Request () -> get ( 'id' );
if ( empty ( $id )){
return json ([ 'success' => false , 'msg' => '缺少参数' ]);
}
//获取合同数据
$contract = VehicleContract :: where ( 'id' , $id ) -> find ();
if ( empty ( $contract )) {
return json ([ 'success' => false , 'msg' => '获取数据失败' ]);
}
if ( $contract [ 'status' ] != 2 ){
return json ([ 'success' => false , 'msg' => '合同状态错误' ]);
}
if ( $contract [ 'signing_timer' ] == 0 ) {
//更新本地合同状态
$updateLocalRes = VehicleContract :: where ( 'id' , $contract [ 'id' ]) -> update ([ 'signing_timer' => 1 ]);
//更新远程
$updateSverRes = curl_post ( env ( 'project.logistic_domain' ) . '/api/contractUpdate' ,[],[
'id' => $contract [ 'contract_logistic_id' ],
'signing_timer' => 1 ,
'update_time' => time ()
]);
if ( ! $updateLocalRes || $updateSverRes [ 'code' ] == 0 ){
return json ([ 'success' => false , 'msg' => '更新失败' ]);
}
return json ([ 'success' => true , 'msg' => '成功' ]);
} else if ( $contract [ 'signing_timer' ] == 1 ){
//获取签约后的合同
$signContractFile = app ( JunziqianController :: class ) -> downloadVehicleContractFile ( $contract [ 'contract_no' ]);
$signContractFile = $signContractFile ? ? '' ;
//获取签约后的证据
$signContractEvidenceToPartyA = app ( JunziqianController :: class ) -> downloadVehicleContractEvidence ( $contract [ 'contract_no' ], $contract [ 'company_a_name' ], $contract [ 'company_a_code' ]);
$signContractEvidenceToPartyA = $signContractEvidenceToPartyA ? ? '' ;
$signContractEvidenceToPartyB = app ( JunziqianController :: class ) -> downloadVehicleContractEvidence ( $contract [ 'contract_no' ], $contract [ 'company_b_name' ], $contract [ 'company_b_code' ]);
$signContractEvidenceToPartyB = $signContractEvidenceToPartyB ? ? '' ;
$contractEvidence = json_encode ([
'party_a' => $signContractEvidenceToPartyA ,
'party_b' => $signContractEvidenceToPartyB
]);
//更新本地合同状态
$updateLocalRes = VehicleContract :: where ( 'id' , $contract [ 'id' ]) -> update ([ 'signing_timer' => 2 , 'status' => 3 , 'contract_url' => $signContractFile , 'contract_evidence' => $contractEvidence ]);
//将车辆加入到本地租赁列表
$cars = json_decode ( $contract [ 'cars_info' ], true );
$data = [];
foreach ( $cars as $k => $v ) {
$hasCar = VehicleRent :: where ( 'car_id' , $v [ 'id' ]) -> findOrEmpty ();
if ( $hasCar -> isEmpty ()){
$data [ $k ][ 'contract_id' ] = $contract [ 'id' ];
$data [ $k ][ 'company_id' ] = $contract [ 'company_b_id' ];
$data [ $k ][ 'car_id' ] = $v [ 'id' ];
$data [ $k ][ 'car_license' ] = $v [ 'license' ];
$data [ $k ][ 'type' ] = 0 ;
$data [ $k ][ 'status' ] = 0 ;
$data [ $k ][ 'rent_contract_id' ] = 0 ;
$data [ $k ][ 'rent_company_id' ] = 0 ;
$data [ $k ][ 'rent_time' ] = 0 ;
$data [ $k ][ 'create_time' ] = strtotime ( $contract [ 'create_time' ]);
}
}
$vehicleRent = new VehicleRent ();
$vehicleRent -> saveAll ( $data );
//更新远程
$updateSverRes = curl_post ( env ( 'project.logistic_domain' ) . '/api/contractUpdate' ,[],[
'id' => $contract [ 'contract_logistic_id' ],
'signing_timer' => 2 ,
'status' => 3 ,
'contract_url' => $signContractFile ,
'contract_evidence' => $contractEvidence ,
'update_time' => time ()
]);
if ( ! $updateLocalRes || $updateSverRes [ 'code' ] == 0 ){
return json ([ 'success' => false , 'msg' => '更新失败' ]);
} else {
return json ([ 'success' => true , 'msg' => '更新成功' ]);
}
}
return json ([ 'success' => true , 'msg' => '更新成功@' ]);
}
//系统车辆租赁回来
public function systemCarRent ()
{
//获取参数
$id = $this -> request -> get ( 'id' );
if ( empty ( $id )) {
return json ([ 'success' => false , 'msg' => '失败1.1' ]);
}
//获取合同数据
$contract = VehicleContract :: where ( 'id' , $id ) -> find ();
if ( empty ( $contract )) {
return json ([ 'success' => false , 'msg' => '失败1.2' ]);
}
if ( $contract [ 'type' ] != 0 ) {
return json ([ 'success' => false , 'msg' => '失败1.3' ]);
}
if ( $contract [ 'status' ] != 2 ) {
return json ([ 'success' => false , 'msg' => '失败1.4' ]);
}
//判断签约方
if ( $contract [ 'signing_timer' ] == 0 ) {
//更新合同的签约次数
$res = VehicleContract :: where ( 'id' , $id ) -> update ([ 'signing_timer' => 1 ]);
if ( ! $res ) {
return json ([ 'success' => false , 'msg' => '失败1.5' ]);
}
return json ([ 'success' => true , 'msg' => '成功' ]);
} else if ( $contract [ 'signing_timer' ] == 1 ) {
//获取签约后的合同
$signContractFile = app ( JunziqianController :: class ) -> downloadVehicleContractFile ( $contract [ 'contract_no' ]);
$signContractFile = $signContractFile ? ? '' ;
//获取签约后的证据
$signContractEvidenceToPartyA = app ( JunziqianController :: class ) -> downloadVehicleContractEvidence ( $contract [ 'contract_no' ], $contract [ 'company_a_name' ], $contract [ 'company_a_code' ]);
$signContractEvidenceToPartyA = $signContractEvidenceToPartyA ? ? '' ;
$signContractEvidenceToPartyB = app ( JunziqianController :: class ) -> downloadVehicleContractEvidence ( $contract [ 'contract_no' ], $contract [ 'company_b_name' ], $contract [ 'company_b_code' ]);
$signContractEvidenceToPartyB = $signContractEvidenceToPartyB ? ? '' ;
$contractEvidence = json_encode ([
'party_a' => $signContractEvidenceToPartyA ,
'party_b' => $signContractEvidenceToPartyB
]);
//更改合同状态
VehicleContract :: where ( 'id' , $id ) -> update ([ 'signing_timer' => 2 , 'status' => 3 , 'contract_url' => $signContractFile , 'contract_evidence' => $contractEvidence ]);
//添加车辆到租赁列表
$vehicle = json_decode ( $contract [ 'cars_info' ], true );
VehicleRent :: where ( 'car_id' , $vehicle [ 0 ][ 'id' ]) -> update ([
'status' => 2 ,
'rent_contract_id' => $contract [ 'id' ],
'rent_company_id' => $contract [ 'company_b_id' ],
'rent_time' => time (),
]);
$party_b = Company :: where ( 'id' , $contract [ 'company_b_id' ]) -> find ();
//通知物流系统跟新
curl_post ( env ( 'project.logistic_domain' ) . '/api/updateVehicleRent' , [], [
'car_id' => $vehicle [ 0 ][ 'id' ],
'use_user_id' => $party_b [ 'user_id' ],
'use_user_name' => $party_b [ 'master_name' ],
'use_user_phone' => $party_b [ 'master_phone' ]
]);
return json ([ 'success' => true , 'msg' => '成功' ]);
} else {
return json ([ 'success' => true , 'msg' => '成功' ]);
}
}
//自有车辆租赁回答
public function selfCarRent ()
{
//获取参数
$id = $this -> request -> get ( 'id' );
if ( empty ( $id )) {
return json ([ 'success' => false , 'msg' => '失败2.1' ]);
}
//获取合同数据
$contract = VehicleContract :: where ( 'id' , $id ) -> find ();
if ( empty ( $contract )) {
return json ([ 'success' => false , 'msg' => '失败2.2' ]);
}
if ( $contract [ 'type' ] != 1 ) {
return json ([ 'success' => false , 'msg' => '失败2.3' ]);
}
if ( $contract [ 'status' ] != 2 ) {
return json ([ 'success' => false , 'msg' => '失败2.4' ]);
}
//判断签约方
if ( $contract [ 'signing_timer' ] == 0 ) {
$res = VehicleContract :: where ( 'id' , $id ) -> update ([ 'signing_timer' => 1 ]);
if ( ! $res ) {
return json ([ 'success' => false , 'msg' => '失败2.5' ]);
}
return json ([ 'success' => true , 'msg' => '成功' ]);
} else if ( $contract [ 'signing_timer' ] == 1 ) {
//添加车辆到物流系统
$vehicle = json_decode ( $contract [ 'cars_info' ], true );
$curl_res = curl_post ( env ( 'project.logistic_domain' ) . '/api/addSelfCar' , [], [
'license' => $vehicle [ 0 ][ 'license' ],
'pic' => $vehicle [ 0 ][ 'pic' ],
'company_id' => $contract [ 'company_a_id' ],
'company_name' => $contract [ 'company_a_name' ],
'company_user' => $contract [ 'company_a_user' ],
'company_phone' => $contract [ 'company_a_phone' ],
]);
if ( ! $curl_res || $curl_res [ 'code' ] == 0 ) {
return json ([ 'success' => false , 'msg' => '失败2.6' ]);
}
$cars_info = json_encode ([[ 'id' => $curl_res [ 'data' ][ 'car_id' ], 'license' => $vehicle [ 0 ][ 'license' ]]]);
//获取签约后的合同
$signContractFile = app ( JunziqianController :: class ) -> downloadVehicleContractFile ( $contract [ 'contract_no' ]);
$signContractFile = $signContractFile ? ? '' ;
//获取签约后的证据
$signContractEvidenceToPartyA = app ( JunziqianController :: class ) -> downloadVehicleContractEvidence ( $contract [ 'contract_no' ], $contract [ 'company_a_name' ], $contract [ 'company_a_code' ]);
$signContractEvidenceToPartyA = $signContractEvidenceToPartyA ? ? '' ;
$signContractEvidenceToPartyB = app ( JunziqianController :: class ) -> downloadVehicleContractEvidence ( $contract [ 'contract_no' ], $contract [ 'company_b_name' ], $contract [ 'company_b_code' ]);
$signContractEvidenceToPartyB = $signContractEvidenceToPartyB ? ? '' ;
$contractEvidence = json_encode ([
'party_a' => $signContractEvidenceToPartyA ,
'party_b' => $signContractEvidenceToPartyB
]);
VehicleContract :: where ( 'id' , $id ) -> update ([ 'cars_info' => $cars_info , 'update_time' => time (), 'signing_timer' => 2 , 'status' => 3 , 'contract_url' => $signContractFile , 'contract_evidence' => $contractEvidence ]);
VehicleRent :: create ([
'car_id' => $curl_res [ 'data' ][ 'car_id' ],
'contract_id' => $contract [ 'id' ],
'company_id' => $contract [ 'company_a_id' ],
'car_license' => $vehicle [ 0 ][ 'license' ],
'status' => 2 ,
'rent_time' => time (),
'rent_contract_id' => $contract [ 'id' ],
'rent_company_id' => $contract [ 'company_b_id' ],
'create_time' => time (),
'type' => 1
]);
$car_id = $curl_res [ 'data' ][ 'car_id' ];
$party_b = Company :: where ( 'id' , $contract [ 'company_b_id' ]) -> find ();
//通知物流系统跟新
curl_post ( env ( 'project.logistic_domain' ) . '/api/updateVehicleRent' , [], [
'car_id' => $car_id ,
'use_user_id' => $party_b [ 'user_id' ],
'use_user_name' => $party_b [ 'master_name' ],
'use_user_phone' => $party_b [ 'master_phone' ]
]);
return json ([ 'success' => true , 'msg' => '成功' ]);
} else {
return json ([ 'success' => true , 'msg' => '成功' ]);
}
}
//解除合同回调
public function cancelRent ()
{
//获取参数
$id = $this -> request -> get ( 'id' );
if ( empty ( $id )) {
return json ([ 'success' => false , 'msg' => '失败3.1' ]);
}
//获取合同数据
$contract = VehicleContract :: where ( 'id' , $id ) -> find ();
if ( empty ( $contract )) {
return json ([ 'success' => false , 'msg' => '失败3.2' ]);
}
if ( $contract [ 'type' ] != 2 ) {
return json ([ 'success' => false , 'msg' => '失败3.3' ]);
}
if ( $contract [ 'status' ] != 2 ) {
return json ([ 'success' => false , 'msg' => '失败3.4' ]);
}
if ( $contract [ 'signing_timer' ] == 0 ) {
$res = VehicleContract :: where ( 'id' , $id ) -> update ([ 'signing_timer' => 1 ]);
if ( ! $res ) {
return json ([ 'success' => false , 'msg' => '失败3.5' ]);
}
return json ([ 'success' => true , 'msg' => '成功' ]);
} else if ( $contract [ 'signing_timer' ] == 1 ) {
//获取签约后的合同
$signContractFile = app ( JunziqianController :: class ) -> downloadVehicleContractFile ( $contract [ 'contract_no' ]);
$signContractFile = $signContractFile ? ? '' ;
//获取签约后的证据
$signContractEvidenceToPartyA = app ( JunziqianController :: class ) -> downloadVehicleContractEvidence ( $contract [ 'contract_no' ], $contract [ 'company_a_name' ], $contract [ 'company_a_code' ]);
$signContractEvidenceToPartyA = $signContractEvidenceToPartyA ? ? '' ;
$signContractEvidenceToPartyB = app ( JunziqianController :: class ) -> downloadVehicleContractEvidence ( $contract [ 'contract_no' ], $contract [ 'company_b_name' ], $contract [ 'company_b_code' ]);
$signContractEvidenceToPartyB = $signContractEvidenceToPartyB ? ? '' ;
$contractEvidence = json_encode ([
'party_a' => $signContractEvidenceToPartyA ,
'party_b' => $signContractEvidenceToPartyB
]);
$cars = json_decode ( $contract [ 'cars_info' ], true );
$cars_ids = array_column ( $cars , 'id' );
//更改合同状态
VehicleContract :: where ( 'id' , $id ) -> update ([ 'signing_timer' => 2 , 'status' => 3 , 'contract_url' => $signContractFile , 'contract_evidence' => $contractEvidence ]);
if ( ! empty ( $contract [ 'contract_logistic_id' ])){
curl_post ( env ( 'project.logistic_domain' ) . '/api/contractUpdate' ,[],[
'id' => $contract [ 'contract_logistic_id' ],
'signing_timer' => 2 ,
'status' => 3 ,
'contract_url' => $signContractFile ,
'contract_evidence' => $contractEvidence ,
'update_time' => time ()
]);
}
//判断合同是否存在购买记录表中
$vehicleBuyRecord = VehicleBuyRecord :: where ( 'contract_id' , $contract [ 'id' ]) -> findOrEmpty ();
if ( ! $vehicleBuyRecord -> isEmpty ()){
//小组公司与镇街公司解约
if ( $vehicleBuyRecord [ 'status' ] == 1 ){
//获取租赁车辆信息
$rentCarsInfo = VehicleRent :: where ( 'car_id' , $cars_ids [ 0 ]) -> findOrEmpty ();
if ( $rentCarsInfo [ 'type' ] == 0 ){
//修改租赁车俩状态
VehicleRent :: where ( 'id' , $rentCarsInfo [ 'id' ]) -> update ([ 'status' => 0 , 'rent_company_id' => 0 , 'rent_contract_id' => 0 , 'rent_time' => 0 ]);
}
if ( $rentCarsInfo [ 'type' ] == 1 ){
//修改租赁车俩状态
VehicleRent :: where ( 'id' , $rentCarsInfo [ 'id' ]) -> delete ();
}
//删除原合同
VehicleContract :: where ( 'id' , $rentCarsInfo [ 'rent_contract_id' ]) -> delete ();
//修改物流系统车辆租赁信息
curl_post ( env ( 'project.logistic_domain' ) . '/api/Vehicle/delRentUseInfo' , [], [
'car_id' => $cars_ids [ 0 ]
]);
//发送购买合同给物流系统
$curl_result = curl_post ( env ( 'project.logistic_domain' ) . '/api/signContract' ,[],[
'num' => $vehicleBuyRecord [ 'num' ],
'company_id' => $vehicleBuyRecord [ 'company_id' ],
'company_name' => $vehicleBuyRecord [ 'company_name' ],
'company_code' => $vehicleBuyRecord [ 'company_code' ],
'company_user' => $vehicleBuyRecord [ 'company_user' ],
'company_phone' => $vehicleBuyRecord [ 'company_phone' ],
'company_email' => $vehicleBuyRecord [ 'company_email' ],
'cars_info' => $vehicleBuyRecord [ 'cars_info' ],
'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' ]);
VehicleBuyRecord :: where ( 'id' , $vehicleBuyRecord [ 'id' ]) -> update ([ 'status' => 4 ]);
return json ([ 'success' => true , 'msg' => '成功' ]);
}
//小组公司与镇街公司解约,然后镇街公司与平台公司解约
if ( $vehicleBuyRecord [ 'status' ] == 2 ){
//获取租赁车辆信息
$rentCarsInfo = VehicleRent :: where ( 'car_id' , $cars_ids [ 0 ]) -> findOrEmpty ();
if ( $rentCarsInfo [ 'type' ] == 0 ){
//修改租赁车俩状态
VehicleRent :: where ( 'id' , $rentCarsInfo [ 'id' ]) -> update ([ 'status' => 0 , 'rent_company_id' => 0 , 'rent_contract_id' => 0 , 'rent_time' => 0 ]);
}
if ( $rentCarsInfo [ 'type' ] == 1 ){
//修改租赁车俩状态
VehicleRent :: where ( 'id' , $rentCarsInfo [ 'id' ]) -> delete ();
}
//删除原合同
VehicleContract :: where ( 'id' , $rentCarsInfo [ 'rent_contract_id' ]) -> delete ();
//修改物流系统车辆租赁信息
curl_post ( env ( 'project.logistic_domain' ) . '/api/Vehicle/delRentUseInfo' , [], [
'car_id' => $cars_ids [ 0 ]
]);
//获取镇街公司信息
$zjCompany = Company :: where ( 'id' , $rentCarsInfo [ 'company_id' ]) -> findOrEmpty ();
//判断购买车辆中是否包含镇街公司租赁的车辆
$car_ids = array_column ( json_decode ( $vehicleBuyRecord [ 'cars_info' ], true ), 'id' );
$zjRentCars = VehicleRent :: field ( 'car_id as id,car_license as license' ) -> where ( 'company_id' , $zjCompany [ 'id' ]) -> where ( 'car_id' , 'in' , $car_ids ) -> where ( 'status' , 0 ) -> where ( 'type' , 0 ) -> select ();
//发送镇公司与平台公司的解约合同
$curl_result = curl_post ( env ( 'project.logistic_domain' ) . '/api/signContract' ,[],[
'num' => count ( $zjRentCars ),
'company_id' => $zjCompany [ 'id' ],
'company_name' => $zjCompany [ 'company_name' ],
'company_code' => $zjCompany [ 'organization_code' ],
'company_user' => $zjCompany [ 'master_name' ],
'company_phone' => $zjCompany [ 'master_phone' ],
'company_email' => $zjCompany [ '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 :: where ( 'id' , $vehicleBuyRecord [ 'id' ]) -> update ([ 'status' => 3 , 'contract_id' => $res -> id ]);
return json ([ 'success' => true , 'msg' => '成功' ]);
}
//镇街公司与平台公司解约
if ( $vehicleBuyRecord [ 'status' ] == 3 ){
//删除本地租赁信息
VehicleRent :: where ( 'car_id' , 'in' , $cars_ids ) -> delete ();
//删除物流系统租赁信息
curl_post ( env ( 'project.logistic_domain' ) . '/api/cancelRent' , [], [
'car_ids' => implode ( ',' , $cars_ids )
]);
//发送购买合同给物流系统
$curl_result = curl_post ( env ( 'project.logistic_domain' ) . '/api/signContract' ,[],[
'num' => $vehicleBuyRecord [ 'num' ],
'company_id' => $vehicleBuyRecord [ 'company_id' ],
'company_name' => $vehicleBuyRecord [ 'company_name' ],
'company_code' => $vehicleBuyRecord [ 'company_code' ],
'company_user' => $vehicleBuyRecord [ 'company_user' ],
'company_phone' => $vehicleBuyRecord [ 'company_phone' ],
'company_email' => $vehicleBuyRecord [ 'company_email' ],
'cars_info' => $vehicleBuyRecord [ 'cars_info' ],
'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' ]);
VehicleBuyRecord :: where ( 'id' , $vehicleBuyRecord [ 'id' ]) -> update ([ 'status' => 4 ]);
return json ([ 'success' => true , 'msg' => '成功' ]);
}
} else {
//更改租赁列表车辆状态
$vehicle = json_decode ( $contract [ 'cars_info' ], true );
//获取租赁车辆信息
$vehicleRentInfo = VehicleRent :: where ( 'car_id' , $vehicle [ 0 ][ 'id' ]) -> find ();
//更新原始合同类型
VehicleContract :: where ( 'id' , $vehicleRentInfo [ 'rent_contract_id' ]) -> delete ();
VehicleRent :: where ( 'car_id' , $vehicle [ 0 ][ 'id' ]) -> delete ();
//通知物流系统跟新
curl_post ( env ( 'project.logistic_domain' ) . '/api/Vehicle/delRentUseInfo' , [], [
'car_id' => $vehicle [ 0 ][ 'id' ]
]);
return json ([ 'success' => true , 'msg' => '成功' ]);
}
} else {
return json ([ 'success' => true , 'msg' => '成功' ]);
}
}
//购买合同回调
public function buyCar () {
//获取参数
$id = $this -> request -> get ( 'id' );
if ( empty ( $id )) {
return json ([ 'success' => false , 'msg' => '失败4.1' ]);
}
//获取合同数据
$contract = VehicleContract :: where ( 'id' , $id ) -> find ();
if ( empty ( $contract )) {
return json ([ 'success' => false , 'msg' => '失败4.2' ]);
}
if ( $contract [ 'type' ] != 3 ) {
return json ([ 'success' => false , 'msg' => '失败4.3' ]);
}
if ( $contract [ 'status' ] != 2 ) {
return json ([ 'success' => false , 'msg' => '失败4.4' ]);
}
if ( $contract [ 'signing_timer' ] == 0 ) {
$res = VehicleContract :: where ( 'id' , $id ) -> update ([ 'signing_timer' => 1 ]);
if ( ! $res ) {
return json ([ 'success' => false , 'msg' => '失败4.5' ]);
}
return json ([ 'success' => true , 'msg' => '成功' ]);
} else if ( $contract [ 'signing_timer' ] == 1 ) {
//获取签约后的合同
$signContractFile = app ( JunziqianController :: class ) -> downloadVehicleContractFile ( $contract [ 'contract_no' ]);
$signContractFile = $signContractFile ? ? '' ;
//获取签约后的证据
$signContractEvidenceToPartyA = app ( JunziqianController :: class ) -> downloadVehicleContractEvidence ( $contract [ 'contract_no' ], $contract [ 'company_a_name' ], $contract [ 'company_a_code' ]);
$signContractEvidenceToPartyA = $signContractEvidenceToPartyA ? ? '' ;
$signContractEvidenceToPartyB = app ( JunziqianController :: class ) -> downloadVehicleContractEvidence ( $contract [ 'contract_no' ], $contract [ 'company_b_name' ], $contract [ 'company_b_code' ]);
$signContractEvidenceToPartyB = $signContractEvidenceToPartyB ? ? '' ;
$contractEvidence = json_encode ([
'party_a' => $signContractEvidenceToPartyA ,
'party_b' => $signContractEvidenceToPartyB
]);
//更新本地合同状态
$updateLocalRes = VehicleContract :: where ( 'id' , $contract [ 'id' ]) -> update ([ 'signing_timer' => 2 , 'status' => 3 , 'contract_url' => $signContractFile , 'contract_evidence' => $contractEvidence ]);
//判断是否有监管车辆
$jgCars = VehicleRent :: where ( 'rent_company_id' , $contract [ 'company_b_id' ]) -> where ( 'status' , 2 ) -> where ( 'type' , 2 ) -> findOrEmpty ();
if ( $jgCars -> isEmpty ()){
//获取镇街公司信息
$zjCompany = Contract :: field ( 'party_a' ) -> where ( 'party_b' , $contract [ 'company_b_id' ]) -> where ( 'signing_timer' , 2 ) -> findOrEmpty ();
//将车辆加入到本地租赁列表
$cars = json_decode ( $contract [ 'cars_info' ], true );
//写入数据
$data = [
'car_id' => $cars [ 0 ][ 'id' ],
'car_license' => $cars [ 0 ][ 'license' ],
'type' => 2 ,
'status' => 2 ,
'company_id' => $zjCompany [ 'party_a' ],
'rent_time' => time (),
'rent_company_id' => $contract [ 'company_b_id' ],
'contract_id' => $contract [ 'id' ],
'create_time' => time ()
];
$vehicleRent = new VehicleRent ();
$vehicleRent -> save ( $data );
}
//获取签约公司信息
$compay = Company :: where ( 'id' , $contract [ 'company_b_id' ]) -> findOrEmpty ();
//更新远程
$updateSverRes = curl_post ( env ( 'project.logistic_domain' ) . '/api/contractUpdate' ,[],[
'id' => $contract [ 'contract_logistic_id' ],
'signing_timer' => 2 ,
'status' => 3 ,
'contract_url' => $signContractFile ,
'contract_evidence' => $contractEvidence ,
'use_user_id' => $compay [ 'user_id' ],
'use_user_name' => $compay [ 'master_name' ],
'use_user_phone' => $compay [ 'master_phone' ],
'update_time' => time ()
]);
if ( ! $updateLocalRes || $updateSverRes [ 'code' ] == 0 ){
return json ([ 'success' => false , 'msg' => '更新失败' ]);
} else {
return json ([ 'success' => true , 'msg' => '更新成功' ]);
}
} else {
return json ([ 'success' => true , 'msg' => '成功' ]);
}
}
//车辆租赁签约合同状态更改
public function notifyVehicleContractUpdate ()
{
if ( ! $this -> request -> isPost ()) {
return $this -> fail ( '请求方式错误' );
}
$param = $this -> request -> post ();
if ( empty ( $param [ 'contract_logistic_id' ])) {
return $this -> fail ( '缺少必要参数' );
}
$model = VehicleContract :: where ( 'contract_logistic_id' , $param [ 'contract_logistic_id' ]) -> find ();
if ( empty ( $model )) {
return $this -> fail ( '数据不存在' );
}
$cars = json_decode ( $model [ 'cars_info' ], true );
$result = $model -> where ( 'id' , $model [ 'id' ]) -> save ( $param );
if ( $result && isset ( $param [ 'status' ]) && $param [ 'status' ] == 3 ) {
$data = [];
foreach ( $cars as $k => $v ) {
$hasCar = VehicleRent :: where ( 'car_id' , $v [ 'id' ]) -> findOrEmpty ();
if ( $hasCar -> isEmpty ()) {
$data [ $k ][ 'car_id' ] = $v [ 'id' ];
$data [ $k ][ 'car_license' ] = $v [ 'license' ];
$data [ $k ][ 'type' ] = 0 ;
$data [ $k ][ 'status' ] = 0 ;
$data [ $k ][ 'company_id' ] = $model [ 'company_b_id' ];
$data [ $k ][ 'rent_time' ] = 0 ;
$data [ $k ][ 'rent_company_id' ] = 0 ;
$data [ $k ][ 'contract_id' ] = $model [ 'id' ];
$data [ $k ][ 'create_time' ] = strtotime ( $model [ 'create_time' ]);
}
}
$vehicleRent = new VehicleRent ();
$vehicleRent -> saveAll ( $data );
}
//返回
return $result ? $this -> success ( '更新成功' ) : $this -> fail ( '更新失败' );
}
/**
* 资产回调
*/
public function notifyProperty ()
{
$parmas = Request () -> post ();
if ( $parmas ) {
if ( ! isset ( $parmas [ 'company_id' ]) || $parmas [ 'company_id' ] < 0 ) {
return json ([ 'success' => false , 'msg' => '公司id不能为空' ]);
}
if ( ! isset ( $parmas [ 'object_id' ])) {
return json ([ 'success' => false , 'msg' => '对象id不能为空' ]);
}
$data = [];
$object_id = explode ( ',' , $parmas [ 'object_id' ]);
foreach ( $object_id as $k => $v ) {
if ( $v > 0 ) {
$data [ $k ][ 'company_id' ] = $parmas [ 'company_id' ];
$data [ $k ][ 'object_id' ] = $v ;
$data [ $k ][ 'type' ] = 1 ;
}
}
if ( count ( $data ) <= 0 ) {
return json ([ 'success' => false , 'msg' => '失败' ]);
}
$res = CompanyProperty :: insertAll ( $data );
if ( $res ) {
return json ([ 'success' => true , 'msg' => '成功' ]);
} else {
return json ([ 'success' => false , 'msg' => '失败' ]);
}
}
return json ([ 'success' => false , 'msg' => '失败,没有参数' ]);
}
/**
* 认证回调
*/
public function notifyAuthentication ()
{
$parmas = Request () -> param ();
Log :: info ([ '认证回调:' , $parmas ]);
try {
$data = json_decode ( $parmas [ 'data' ], true );
if ( $data [ 'status' ] == 2 ){
return json ([ 'success' => false , 'msg' => '失败' ]);
}
if ( $parmas ) {
// 商城系统商户入驻
if ( isset ( $parmas [ 'type' ]) && $parmas [ 'type' ] == 'shop_merchant' ) {
Db :: name ( 'company_form' ) -> where ( 'master_email' , $data [ 'emailOrMobile' ]) -> update ([ 'type' => 1 ]);
$this -> shopMerchantCall ( $parmas );
return json ([ 'success' => true , 'msg' => '成功' ]);
} else {
$data = json_decode ( $parmas [ 'data' ], true );
// 成功回调标记
$redis = RedisLogic :: getInstance ();
$cache = $redis -> get ( 'authentication_company_id_' . $parmas [ 'id' ]);
if ( ! empty ( $cache )) {
$cacheData = json_decode ( $cache , true );
$cacheData [ 'is_callback' ] = 1 ;
$redis -> set ( 'authentication_company_id_' . $parmas [ 'id' ], json_encode ( $cacheData ));
}
if ( $data [ 'status' ] == 1 ){
Company :: where ( 'id' , $parmas [ 'id' ]) -> update ([ 'is_authentication' => 1 ]);
}
if ( $data [ 'status' ] == 2 ){
// 记录认证失败原因
Db :: name ( 'company_authentication_fail_log' ) -> insert ([ 'company_id' => $parmas [ 'id' ], 'fail_reason' => $data [ 'msg' ], 'create_time' => time ()]);
Company :: where ( 'id' , $parmas [ 'id' ]) -> update ([ 'is_contract' => 0 ]);
}
return json ([ 'success' => true , 'msg' => '成功' ]);
}
}
} catch ( \Exception $e ) {
Log :: error ( '认证回调错误569:' . $e -> getMessage ());
}
return json ([ 'success' => false , 'msg' => '失败,没有参数' ]);
}
private function shopMerchantCall ( $parmas )
{
$shopMerchant = ShopMerchant :: find ([ 'id' , $parmas [ 'id' ]]);
Log :: error ( $shopMerchant );
if ( $shopMerchant == null ){
// Log::error(['没有商户580:',$parmas]);
return json ([ 'success' => false , 'msg' => '认证回调错误' ]);
}
$data = json_decode ( $parmas [ 'data' ], true );
if ( $data [ 'status' ] == 1 ){
if ( $data [ 'organizationRegNo' ] != $shopMerchant [ 'organization_code' ]){
Log :: error ([ '认证回调错误586:' , $parmas ]);
return json ([ 'success' => false , 'msg' => '认证回调错误' ]);
}
$shopMerchant -> save ([ 'is_authentication' => 1 ]);
// 生成合同
$createContractData = [
'id' => $parmas [ 'id' ],
'party_a' => 1 ,
'party_a_name' => '泸州市海之农科技有限公司' ,
'party_b' => $parmas [ 'id' ],
'party_b_name' => $shopMerchant -> company_name ,
'contract_type' => 22 ,
];
$model = new ShopContract ();
$model -> contract_no = time ();
$model -> create_time = time ();
$model -> check_status = 1 ;
$model -> update_time = time ();
$model -> setAttrs ( $createContractData );
$res = $model -> save ( $createContractData );
}
if ( $data [ 'status' ] == 2 ){
// 记录认证失败原因
Db :: name ( 'company_authentication_fail_log' ) -> insert ([ 'company_id' => $parmas [ 'id' ], 'log_type' => 3 , 'fail_reason' => $data [ 'msg' ], 'create_time' => time ()]);
}
}
2024-01-25 10:48:00 +08:00
public function addVillagerInfo ()
{
$params = $this -> request -> post ();
2024-01-27 18:08:37 +08:00
$params [ 'house_rent_info' ] = $params [ 'house_rent_info' ];
$params [ 'land_rent_info' ] = $params [ 'land_rent_info' ];
$params [ 'product_info' ] = $params [ 'product_info' ];
$params [ 'idle_asset_rent_info' ] = $params [ 'idle_asset_rent_info' ];
$params [ 'house_decoration_construction' ] = $params [ 'house_decoration_construction' ];
2024-01-25 10:48:00 +08:00
$params [ 'create_time' ] = time ();
$params [ 'update_time' ] = time ();
$model = Db :: name ( 'villager_information' ) -> insertGetId ( $params );
return $this -> success ( '添加成功' );
}
2024-01-27 16:13:47 +08:00
public function getVillagerInfo ()
{
$shopUserId = $this -> request -> get ( 'shop_user_id' );
2024-01-27 17:28:26 +08:00
$detail = Db :: name ( 'villager_information' ) -> where ( 'shop_user_id' , $shopUserId ) -> findOrEmpty ();
2024-01-27 16:13:47 +08:00
return $this -> success ( '成功' , $detail );
}
public function editVillagerInfo ()
{
$params = $this -> request -> post ();
2024-01-27 18:08:37 +08:00
$params [ 'house_rent_info' ] = $params [ 'house_rent_info' ];
$params [ 'land_rent_info' ] = $params [ 'land_rent_info' ];
$params [ 'product_info' ] = $params [ 'product_info' ];
$params [ 'idle_asset_rent_info' ] = $params [ 'idle_asset_rent_info' ];
$params [ 'house_decoration_construction' ] = $params [ 'house_decoration_construction' ];
2024-01-27 16:13:47 +08:00
Db :: name ( 'villager_information' ) -> where ( 'shop_user_id' , $params [ 'shop_user_id' ]) -> update ( $params );
return $this -> success ( '更新成功' );
}
2023-12-27 14:06:33 +08:00
}