package com.whyc.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.whyc.dto.A200ResDto; import com.whyc.dto.Response; import com.whyc.dto.ResultA200Dto; import com.whyc.factory.ThreadPoolExecutorFactory; import com.whyc.mapper.DevA200TestParamMapper; import com.whyc.mapper.DevLithiumInfMapper; import com.whyc.pojo.db_lithium_ram_db.DevA200TestParam; import com.whyc.pojo.db_lithium_ram_db.DevLithiumInf; import com.whyc.util.ActionUtil; import com.whyc.util.JsonUtil; import com.whyc.util.TestParamHttpUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @Service public class DevA200TestParamService { @Autowired(required = false) private DevA200TestParamMapper mapper; @Autowired(required = false) private DevLithiumInfMapper devLithiumInfMapper; private final RestTemplate restTemplate; @Autowired public DevA200TestParamService(RestTemplate restTemplate) { this.restTemplate = restTemplate; } //批量处理发送接口请求 public ResultA200Dto getA200Dto(String url){ ResultA200Dto dto= null; String results =null; try { results = restTemplate.postForObject(url, null, String.class); } catch (RestClientException e) { results=" {\n" + " \"code\": \"205\",\n" + " \"msg\": \"接口调用出错\",\n" + " \"data\": null,\n" + " \"count\": 0\n" + " }"; }finally { dto = ActionUtil.getGson().fromJson(results, ResultA200Dto.class); } return dto; } //读取a200一体机参数 public Object getA200Param(int devId) { QueryWrapper wrapper=new QueryWrapper(); wrapper.eq("dev_id",devId); wrapper.last("limit 1"); DevLithiumInf dinf= devLithiumInfMapper.selectOne(wrapper); String url="http://"+dinf.getDevIp()+":8080/webService/getTestParameter"; ResultA200Dto dto= getA200Dto(url); if(dto.getCode().equals("200")){ DevA200TestParam a200Param=new DevA200TestParam(); copyA200DTO(dto.getData(),a200Param); a200Param.setDevId(devId); a200Param.setReturnCode(Integer.parseInt(dto.getCode())); UpdateWrapper updateWrapper=new UpdateWrapper(); updateWrapper.eq("dev_id",devId); mapper.update(a200Param,updateWrapper); } return dto; } //设置a200一体机参数 public Object setA200Param(A200ResDto param) { QueryWrapper wrapper=new QueryWrapper(); wrapper.eq("dev_id",param.getDevId()); wrapper.last("limit 1"); DevLithiumInf dinf= devLithiumInfMapper.selectOne(wrapper); String url="http://"+dinf.getDevIp()+":8080/webService/setTestParameter"; //将请求头部和参数合成一个请求 MultiValueMap paramMap = new LinkedMultiValueMap<>(); //param转json字符串 String paramJson = JsonUtil.getGson().toJson(param); paramMap.add("testParameter",paramJson); ResultA200Dto dto= (ResultA200Dto) TestParamHttpUtil.postForFormDataA200(restTemplate,url,paramMap); return dto; } //批量设置a200一体机参数 public Object setA200ParamPl2(A200ResDto param) { Map map=new HashMap<>(); int size=param.getDevIds().size(); try { ThreadPoolExecutor poolExecutor = ThreadPoolExecutorFactory.getPoolExecutor(); CountDownLatch latch = new CountDownLatch(size); for (int i=0;i { int finalIIdevId=finaldevId; param.setDevId(finalIIdevId); ResultA200Dto dto= (ResultA200Dto) setA200Param(param); map.put(finalIIdevId,dto); latch.countDown(); }); } latch.await(4, TimeUnit.MINUTES); } catch (InterruptedException e) { e.printStackTrace(); } return new Response().setII(1,true,map,"批量设置a200一体机参数"); } //批量设置a200一体机参数 public Object setA200ParamPl(A200ResDto param) { Map map=new HashMap<>(); int size=param.getDevIds().size(); for (int i=0;i paramMap = new LinkedMultiValueMap<>(); paramMap.add("testType",type); ResultA200Dto dto= (ResultA200Dto) TestParamHttpUtil.postForFormDataA200(restTemplate,url,paramMap); return dto; } //a200一体机暂停/继续 public Object pauseA200Param(int devId, int type) { QueryWrapper wrapper=new QueryWrapper(); wrapper.eq("dev_id",devId); wrapper.last("limit 1"); DevLithiumInf dinf= devLithiumInfMapper.selectOne(wrapper); String url="http://"+dinf.getDevIp()+":8080/webService/pauseTest"; //将请求头部和参数合成一个请求 MultiValueMap paramMap = new LinkedMultiValueMap<>(); paramMap.add("controlType",type);//1 暂停测试 ,2继续测试 ResultA200Dto dto= (ResultA200Dto) TestParamHttpUtil.postForFormDataA200(restTemplate,url,paramMap); return dto; } //停止a200一体机放电/充电 public Object stopA200Param(int devId) { QueryWrapper wrapper=new QueryWrapper(); wrapper.eq("dev_id",devId); wrapper.last("limit 1"); DevLithiumInf dinf= devLithiumInfMapper.selectOne(wrapper); String url="http://"+dinf.getDevIp()+":8080/webService/stopTest"; ResultA200Dto dto= getA200Dto(url); return dto; } //批量启动a200一体机 public Response startA200ParamPl2(List devIds,int type) { Map map=new HashMap<>(); try { ThreadPoolExecutor poolExecutor = ThreadPoolExecutorFactory.getPoolExecutor(); CountDownLatch latch = new CountDownLatch(devIds.size()); for (int devId:devIds) { poolExecutor.execute(() -> { ResultA200Dto dto= (ResultA200Dto) startA200Param(devId,type); map.put(devId,dto); latch.countDown(); }); } latch.await(10, TimeUnit.MINUTES); } catch (InterruptedException e) { e.printStackTrace(); } return new Response().set(1,true,"批量控制a200一体机"); } //批量启动a200一体机 public Response startA200ParamPl(List devIds,int type) { Map map=new HashMap<>(); for (int devId:devIds) { ResultA200Dto dto= (ResultA200Dto) startA200Param(devId,type); UpdateWrapper wrapper=new UpdateWrapper(); wrapper.eq("dev_id",devId); wrapper.set("batch_state",1); devLithiumInfMapper.update(null,wrapper); map.put(devId,dto); } return new Response().setII(1,true,map,"批量控制a200一体机"); } //批量停止a200一体机 public Response stopA200ParamPl2(List devIds) { Map map=new HashMap<>(); try { ThreadPoolExecutor poolExecutor = ThreadPoolExecutorFactory.getPoolExecutor(); CountDownLatch latch = new CountDownLatch(devIds.size()); for (int devId:devIds) { poolExecutor.execute(() -> { ResultA200Dto dto= (ResultA200Dto) stopA200Param(devId); map.put(devId,dto); latch.countDown(); }); } latch.await(10, TimeUnit.MINUTES); } catch (InterruptedException e) { e.printStackTrace(); } return new Response().set(1,true,"批量停止a200一体机"); } //批量停止a200一体机 public Response stopA200ParamPl(List devIds) { Map map=new HashMap<>(); for (int devId:devIds) { ResultA200Dto dto= (ResultA200Dto) stopA200Param(devId); map.put(devId,dto); } return new Response().setII(1,true,map,"批量停止a200一体机"); } //批量暂停/继续启动a200一体机 public Response pauseA200ParamPl(List devIds,int type) { Map map=new HashMap<>(); for (int devId:devIds) { ResultA200Dto dto= (ResultA200Dto) pauseA200Param(devId,type); UpdateWrapper wrapper=new UpdateWrapper(); wrapper.eq("dev_id",devId); wrapper.set("batch_state",1); devLithiumInfMapper.update(null,wrapper); map.put(devId,dto); } return new Response().setII(1,true,map,"批量控制a200一体机"); } //将dto拷贝至param private void copyA200DTO(Object data, DevA200TestParam a200Param) { A200ResDto dto= (A200ResDto) data; a200Param.setBatteryName(dto.getBatteryName()); a200Param.setNominalCapacity(dto.getNominalCapacity()); a200Param.setBatteryType(dto.getBatteryType()); a200Param.setBatteryNumber(dto.getBatteryNumber()); a200Param.setDiffBatteryVoltage(dto.getDiffBatteryVoltage()); a200Param.setDischargeCurrent(dto.getDischargeCurrent()); a200Param.setDischargeVoltage(dto.getDischargeVoltage()); a200Param.setDischargeTime(dto.getDischargeTime()); a200Param.setDischargeCapacity(dto.getDischargeCapacity()); if(dto.getIsDischargeCapacityEnable()){ a200Param.setIsDischargeCapacityEnable(1); }else{ a200Param.setIsDischargeCapacityEnable(0); } a200Param.setMinBatteryVoltage(dto.getMinBatteryVoltage()); if(dto.getIsMinBatteryVoltageEnable()){ a200Param.setIsMinBatteryVoltageEnable(1); }else{ a200Param.setIsMinBatteryVoltageEnable(0); } a200Param.setChargeVoltage(dto.getChargeVoltage()); a200Param.setChargeProtectVoltage(dto.getChargeProtectVoltage()); a200Param.setChargeCurrent(dto.getChargeCurrent()); a200Param.setChargeStopCurrent(dto.getChargeStopCurrent()); a200Param.setChargeTime(dto.getChargeTime()); a200Param.setChargeCapacity(dto.getChargeCapacity()); if(dto.getIsChargeCapacityEnable()){ a200Param.setIsChargeCapacityEnable(1); }else{ a200Param.setIsChargeCapacityEnable(0); } a200Param.setMaxBatteryVoltage(dto.getMaxBatteryVoltage()); if(dto.getIsMaxBatteryVoltageEnable()){ a200Param.setIsMaxBatteryVoltageEnable(1); }else{ a200Param.setIsMaxBatteryVoltageEnable(0); } a200Param.setChargePower(dto.getChargePower()); a200Param.setBatteryTemperatureProtect(dto.getBatteryTemperatureProtect()); } }