package com.xiaopeng.vehicleConvoy.util; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.xiaopeng.api.dto.account.UcUserInfo; import com.xiaopeng.api.dto.vehicleConvoy.VehicleTemperatureDto; import com.xiaopeng.api.feignClient.account.UserResourcesClient; import com.xiaopeng.api.feignClient.operation.XpOfficialPartnerClient; import com.xiaopeng.api.model.operation.XpOfficialPartner; import com.xiaopeng.api.model.order.XpOrder; import com.xiaopeng.api.vo.operation.OfficialPartnerResult; import com.xiaopeng.api.vo.vehicleConvoy.VehicleStateVo; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.exception.ServiceException; import com.xiaopeng.vehicleConvoy.model.vo.UnlockVehicleDoorVo; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.Map; /** * 合作商工具类 */ @Component public class OfficialPartnerUtil { @Resource private XpOfficialPartnerClient officialPartnerClient; @Resource private UserResourcesClient userResourcesClient; /** * 解锁车门 后备箱控制 * @param officialPartnerId * @param vo * @param doorType * @return */ public R unlockVehicleDoor(Integer officialPartnerId, UnlockVehicleDoorVo vo, String doorType) { XpOfficialPartner xpOfficialPartner = officialPartnerClient.getOfficialPartner(officialPartnerId).getData(); String url = ""; if("door".equals(doorType)){ url = xpOfficialPartner.getDoorControlUrl(); }else{ url = xpOfficialPartner.getTrunkControlUrl(); } HttpRequest post = HttpUtil.createPost(url); post.body(JSON.toJSONString(vo)); HttpResponse execute = post.execute(); if(!execute.isOk()){ throw new ServiceException("[" + xpOfficialPartner.getName() + "]调用合作商接口失败-车门控制接口"); } OfficialPartnerResult officialPartnerResult = JSON.parseObject(execute.body(), OfficialPartnerResult.class); if(0 == officialPartnerResult.getCode()){ return R.ok(); } throw new ServiceException("[" + xpOfficialPartner.getName() + "]" + officialPartnerResult.getMsg()); } /** * 查询后备箱状态 * @param officialPartnerId * @param vin * @return status 0 关闭 1 打开 */ public R queryVehicleDoorStatus(Integer officialPartnerId, String vin) { XpOfficialPartner xpOfficialPartner = officialPartnerClient.getOfficialPartner(officialPartnerId).getData(); HttpRequest post = HttpUtil.createPost(xpOfficialPartner.getTrunkControlQueryUrl()); Map param = new HashMap<>(); param.put("vin", vin); post.body(JSON.toJSONString(param)); HttpResponse execute = post.execute(); if(!execute.isOk()){ throw new ServiceException("[" + xpOfficialPartner.getName() + "]调用合作商接口失败-查询后备箱状态接口"); } OfficialPartnerResult officialPartnerResult = JSON.parseObject(execute.body(), OfficialPartnerResult.class); if(0 == officialPartnerResult.getCode()){ String string = officialPartnerResult.getData().toString(); JSONObject jsonObject = JSON.parseObject(string); return R.ok(jsonObject.getInteger("status")); } throw new ServiceException("[" + xpOfficialPartner.getName() + "]" + officialPartnerResult.getMsg()); } /** * 设置空调温度 * @param officialPartnerId * @param vin * @param degree 温度值 * @return */ public R setAirConditioningTemperature(Integer officialPartnerId, String vin, Float degree) { XpOfficialPartner xpOfficialPartner = officialPartnerClient.getOfficialPartner(officialPartnerId).getData(); HttpRequest post = HttpUtil.createPost(xpOfficialPartner.getAirConditioningControlUrl()); Map param = new HashMap<>(); param.put("vin", vin); param.put("degree", degree); post.body(JSON.toJSONString(param)); HttpResponse execute = post.execute(); if(!execute.isOk()){ throw new ServiceException("[" + xpOfficialPartner.getName() + "]调用合作商接口失败-设置空调温度接口"); } OfficialPartnerResult officialPartnerResult = JSON.parseObject(execute.body(), OfficialPartnerResult.class); if(0 == officialPartnerResult.getCode()){ return R.ok(); } throw new ServiceException("[" + xpOfficialPartner.getName() + "]" + officialPartnerResult.getMsg()); } /** * 查询空调温度 * @param officialPartnerId * @param vin * @return */ public R getAirConditioningTemperature(Integer officialPartnerId, String vin) { XpOfficialPartner xpOfficialPartner = officialPartnerClient.getOfficialPartner(officialPartnerId).getData(); HttpRequest post = HttpUtil.createPost(xpOfficialPartner.getAirConditioningQueryUrl()); Map param = new HashMap<>(); param.put("vin", vin); post.body(JSON.toJSONString(param)); HttpResponse execute = post.execute(); if(!execute.isOk()){ throw new ServiceException("[" + xpOfficialPartner.getName() + "]调用合作商接口失败-查询空调温度接口"); } OfficialPartnerResult officialPartnerResult = JSON.parseObject(execute.body(), OfficialPartnerResult.class); if(0 == officialPartnerResult.getCode()){ JSONObject jsonObject = JSON.parseObject(officialPartnerResult.getData().toString()); String vin1 = jsonObject.getString("vin"); Double degree = jsonObject.getDouble("degree"); Integer switchStatus = jsonObject.getInteger("switchStatus"); VehicleTemperatureDto vehicleTemperatureDto = new VehicleTemperatureDto(); vehicleTemperatureDto.setVin(vin1); Map stateMap = new HashMap<>(); VehicleStateVo hvacInnerTemp = new VehicleStateVo(); hvacInnerTemp.setValue(degree.toString()); stateMap.put("hvacInnerTemp", hvacInnerTemp); vehicleTemperatureDto.setStateMap(stateMap); return R.ok(vehicleTemperatureDto); } throw new ServiceException("[" + xpOfficialPartner.getName() + "]" + officialPartnerResult.getMsg()); } /** * 推送新的订单给合作商 * @param officialPartnerId * @return */ public R queryVehicleAirConditionerSwitch(Integer officialPartnerId, String vin) { XpOfficialPartner xpOfficialPartner = officialPartnerClient.getOfficialPartner(officialPartnerId).getData(); HttpRequest post = HttpUtil.createPost(xpOfficialPartner.getAirConditioningQueryUrl()); Map param = new HashMap<>(); param.put("vin", vin); post.body(JSON.toJSONString(param)); HttpResponse execute = post.execute(); if(!execute.isOk()){ throw new ServiceException("[" + xpOfficialPartner.getName() + "]调用合作商接口失败-查询开关状态接口"); } OfficialPartnerResult officialPartnerResult = JSON.parseObject(execute.body(), OfficialPartnerResult.class); if(0 == officialPartnerResult.getCode()){ JSONObject jsonObject = JSON.parseObject(officialPartnerResult.getData().toString()); String vin1 = jsonObject.getString("vin"); //车辆vin Double degree = jsonObject.getDouble("degree"); //温度 Integer switchStatus = jsonObject.getInteger("switchStatus"); // 0=关闭 1=打开 return R.ok(switchStatus); } throw new ServiceException("[" + xpOfficialPartner.getName() + "]" + officialPartnerResult.getMsg()); } }