package com.whyc.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.whyc.dto.*; import com.whyc.factory.ThreadPoolExecutorFactory; import com.whyc.mapper.DevActmTestParamMapper; import com.whyc.mapper.DevLithiumInfMapper; import com.whyc.pojo.db_lithium_ram_db.DevActmTestParam; import com.whyc.pojo.db_lithium_ram_db.DevLithiumInf; 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.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 DevActmTestParamService { @Autowired(required = false) private DevActmTestParamMapper mapper; @Autowired(required = false) private DevLithiumInfMapper devLithiumInfMapper; private final RestTemplate restTemplate; @Autowired public DevActmTestParamService(RestTemplate restTemplate) { this.restTemplate = restTemplate; } //读取Actm一体机参数 public Object getActmParam(int devId,int index) { 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"; //将请求头部和参数合成一个请求 MultiValueMap paramMap = new LinkedMultiValueMap<>(); paramMap.add("batteryStorageIndex",index); ResultActmBaseDto dto= TestParamHttpUtil.postForFormDataActm(restTemplate,url,paramMap); if(dto.getCode().equals("200")){ DevActmTestParam actmParam=new DevActmTestParam(); ResultActmDto ActmDto = (ResultActmDto) dto; copyActmDTO(ActmDto.getData(),actmParam); actmParam.setDevId(devId); UpdateWrapper updateWrapper=new UpdateWrapper(); updateWrapper.eq("dev_id",devId); mapper.update(actmParam,updateWrapper); } return dto; } //设置Actm均衡仪参数 public ResultActmBaseDto setActmParam(ActmResDto 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<>(); paramMap.add("batteryStorageIndex",param.getBatteryStorageIndex()); paramMap.add("moduleCode",param.getModuleCode()); paramMap.add("workMode",param.getWorkMode()); paramMap.add("batteryType",param.getBatteryType()); paramMap.add("batteryNumber",param.getBatteryNumber()); paramMap.add("ntcCount",param.getNtcCount()); paramMap.add("testBatteryArray",param.getTestBatteryArray()); paramMap.add("voltage",param.getVoltage()); paramMap.add("current",param.getCurrent()); ResultActmBaseDto dto= TestParamHttpUtil.postForFormDataActm(restTemplate,url,paramMap); return dto; } //批量设置Actm均衡仪参数 public Object setActmParamPl2(ActmResDto param) { Map map=new HashMap<>(); int size=param.getDevIds().size(); try { ThreadPoolExecutor poolExecutor = ThreadPoolExecutorFactory.getPoolExecutor(); CountDownLatch latch = new CountDownLatch(size); for (Integer devId:param.getDevIds()) { poolExecutor.execute(() -> { param.setDevId(devId); ResultActmBaseDto dto = setActmParam(param); map.put(devId,dto); latch.countDown(); }); } latch.await(10, TimeUnit.MINUTES); } catch (InterruptedException e) { e.printStackTrace(); } return new Response().setII(1,true,map,"批量设置Actm均衡仪参数"); } //批量设置Actm均衡仪参数 public Object setActmParamPl(ActmResDto param) { Map map=new HashMap<>(); for (Integer devId:param.getDevIds()) { param.setDevId(devId); ResultActmBaseDto dto= setActmParam(param); map.put(devId,dto); } return new Response().setII(1,true,map,"批量设置Actm均衡仪参数"); } //启动,暂停,继续,停止actm均衡仪 public ResultActmBaseDto controlActmParam(int devId,int index,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"; //将请求头部和参数合成一个请求 MultiValueMap paramMap = new LinkedMultiValueMap<>(); switch (type){ case 1:url=url+"/startTest";break; //启动 case 2:url=url+"/pauseTest";break; //暂停 case 3:url=url+"/continueTest";break; //继续 case 4:url=url+"/stopTest";break; //停止 } paramMap.add("batteryStorageIndex",index); ResultActmBaseDto dto= TestParamHttpUtil.postForFormDataActm(restTemplate,url,paramMap); return dto; } //批量控制Actm均衡仪 public Response controlActmParamPl2(List actmPlContDtos) { Map map=new HashMap<>(); try { ThreadPoolExecutor poolExecutor = ThreadPoolExecutorFactory.getPoolExecutor(); CountDownLatch latch = new CountDownLatch(actmPlContDtos.size()); for (ActmPlContDto actmPlContDto:actmPlContDtos) { poolExecutor.execute(() -> { ResultActmBaseDto dto= controlActmParam(actmPlContDto.getDevId(),actmPlContDto.getIndex(),actmPlContDto.getType()); map.put(actmPlContDto.getDevId(),dto); latch.countDown(); }); } latch.await(10, TimeUnit.MINUTES); } catch (InterruptedException e) { e.printStackTrace(); } return new Response().set(1,true,"批量设置Actm均衡仪参数"); } //批量控制Actm均衡仪 public Response controlActmParamPl(List devIds, int index, int type) { Map map=new HashMap<>(); for (Integer devId:devIds) { ResultActmBaseDto dto= controlActmParam(devId,index,type); if(type==1){ 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,"批量控制Actm均衡仪"); } //将dto拷贝至param private void copyActmDTO(Object data, DevActmTestParam actmParam) { ActmResDto dto= (ActmResDto) data; actmParam.setBatteryStorageIndex(dto.getBatteryStorageIndex()); actmParam.setModuleCode(dto.getModuleCode()); actmParam.setWorkMode(dto.getWorkMode()); actmParam.setBatteryType(dto.getBatteryType()); actmParam.setBatteryNumber(dto.getBatteryNumber()); actmParam.setNtcCount(dto.getNtcCount()); actmParam.setTestBatteryArray(dto.getTestBatteryArray()); actmParam.setVoltage(dto.getVoltage()); actmParam.setCurrent(dto.getCurrent()); actmParam.setMaxBatteryNumber(dto.getMaxBatteryNumber()); actmParam.setMaxNtcCount(dto.getMaxNtcCount()); } //设置电池组数与电池节数 public ResultActmBaseDto setActmBatteryStorageNumber(ActmResDto 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/setBatteryStorageNumber"; //将请求头部和参数合成一个请求 MultiValueMap paramMap = new LinkedMultiValueMap<>(); paramMap.add("batteryStorageNumber",param.getBatteryStorageNumber()); paramMap.add("batteryNumber",param.getBatteryNumber()); ResultActmBaseDto dto= TestParamHttpUtil.postForFormDataActm(restTemplate,url,paramMap); return dto; } //批量设设置电池组数与电池节数 public Object setActmBatteryStorageNumberPl(ActmResDto param) { Map map=new HashMap<>(); int size=param.getDevIds().size(); for (Integer devId:param.getDevIds()) { param.setDevId(devId); ResultActmBaseDto dto= setActmBatteryStorageNumber(param); map.put(devId,dto); } return new Response().setII(1,true,map,"批量设设置电池组数与电池节数"); } }