| | |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | | import com.google.gson.JsonSyntaxException; |
| | | import com.whyc.dto.A200ResDto; |
| | | import com.whyc.dto.Response; |
| | | import com.whyc.dto.ResultDto; |
| | | import com.whyc.dto.ResultA200Dto; |
| | | import com.whyc.factory.ThreadPoolExecutorFactory; |
| | | import com.whyc.mapper.DevA200TestparamMapper; |
| | | import com.whyc.mapper.DevInfMapper; |
| | | import com.whyc.pojo.db_lithium_ram_db.DevA200Testparam; |
| | | import com.whyc.pojo.db_lithium_ram_db.DevActmTestparam; |
| | | import com.whyc.pojo.db_lithium_ram_db.DevInf; |
| | | import com.whyc.util.ActionUtil; |
| | | import com.whyc.util.TestparamHttpUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.http.*; |
| | | 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 javax.annotation.Resource; |
| | | 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 DevInfMapper dinfMapper; |
| | | |
| | | @Resource |
| | | private RestTemplate restTemplate; |
| | | 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.last("limit 1"); |
| | | DevInf dinf=dinfMapper.selectOne(wrapper); |
| | | String url="http://"+dinf.getDevIp()+":8080/webService/getTestParameter"; |
| | | String results = restTemplate.postForObject(url, null, String.class); |
| | | ResultDto dto= ActionUtil.getGson().fromJson(results,ResultDto.class); |
| | | ResultA200Dto dto= getA200Dto(url); |
| | | if(dto.getCode().equals("200")){ |
| | | DevA200Testparam a200Param=new DevA200Testparam(); |
| | | copyA200DTO(dto.getData(),a200Param); |
| | |
| | | updateWrapper.eq("dev_id",devId); |
| | | mapper.update(a200Param,updateWrapper); |
| | | } |
| | | //System.out.println(results); |
| | | /*ResultDto dto= JSONObject.parseObject(results,ResultDto.class); |
| | | A200ResDto a200= JSONObject.parseObject(dto.getData().toString(),A200ResDto.class);*/ |
| | | //System.out.println(dto.toString()); |
| | | return dto; |
| | | } |
| | | |
| | | |
| | | //设置a200均衡仪参数 |
| | | public Response setA200Param(DevActmTestparam param) { |
| | | return new Response().set(1,true,"设置a200均衡仪参数"); |
| | | //设置a200一体机参数 |
| | | public Object setA200Param(A200ResDto param) { |
| | | QueryWrapper wrapper=new QueryWrapper(); |
| | | wrapper.eq("dev_id",param.getDevId()); |
| | | wrapper.last("limit 1"); |
| | | DevInf dinf=dinfMapper.selectOne(wrapper); |
| | | String url="http://"+dinf.getDevIp()+":8080/webService/setTestParameter"; |
| | | //将请求头部和参数合成一个请求 |
| | | MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>(); |
| | | String paramJson=JSONObject.toJSONString(param); |
| | | paramMap.add("testParameter",paramJson); |
| | | ResultA200Dto dto= (ResultA200Dto) TestparamHttpUtil.postforform_dataA200(restTemplate,url,paramMap); |
| | | return dto; |
| | | } |
| | | |
| | | //控制a200均衡仪 |
| | | public Response controllA200Param(int devId) { |
| | | return new Response().set(1,true,"控制a200均衡仪"); |
| | | //批量设置a200一体机参数 |
| | | public Object setA200ParamPl2(A200ResDto param) { |
| | | Map<Integer,Object> map=new HashMap<>(); |
| | | int size=param.getDevIds().size(); |
| | | try { |
| | | ThreadPoolExecutor poolExecutor = ThreadPoolExecutorFactory.getPoolExecutor(); |
| | | CountDownLatch latch = new CountDownLatch(size); |
| | | for (int i=0;i<size;i++) { |
| | | int finaldevId=param.getDevIds().get(i); |
| | | poolExecutor.execute(() -> { |
| | | 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 Response controllA200ParamPl(List<Integer> devIds) { |
| | | return new Response().set(1,true,"批量控制a200均衡仪"); |
| | | //批量设置a200一体机参数 |
| | | public Object setA200ParamPl(A200ResDto param) { |
| | | Map<Integer,Object> map=new HashMap<>(); |
| | | int size=param.getDevIds().size(); |
| | | for (int i=0;i<size;i++) { |
| | | int finaldevId=param.getDevIds().get(i); |
| | | param.setDevId(finaldevId); |
| | | ResultA200Dto dto= (ResultA200Dto) setA200Param(param); |
| | | map.put(finaldevId,dto); |
| | | } |
| | | return new Response().setII(1,true,map,"批量设置a200一体机参数"); |
| | | } |
| | | |
| | | //启动a200一体机放电/充电 |
| | | public Object startA200Param(int devId,int type) { |
| | | QueryWrapper wrapper=new QueryWrapper(); |
| | | wrapper.eq("dev_id",devId); |
| | | wrapper.last("limit 1"); |
| | | DevInf dinf=dinfMapper.selectOne(wrapper); |
| | | String url="http://"+dinf.getDevIp()+":8080/webService/startTest"; |
| | | //将请求头部和参数合成一个请求 |
| | | MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>(); |
| | | paramMap.add("testType",type);//1 放电,2 充电 |
| | | ResultA200Dto dto= (ResultA200Dto) TestparamHttpUtil.postforform_dataA200(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"); |
| | | DevInf dinf=dinfMapper.selectOne(wrapper); |
| | | String url="http://"+dinf.getDevIp()+":8080/webService/pauseTest"; |
| | | //将请求头部和参数合成一个请求 |
| | | MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>(); |
| | | paramMap.add("controlType",type);//1 暂停测试 ,2继续测试 |
| | | ResultA200Dto dto= (ResultA200Dto) TestparamHttpUtil.postforform_dataA200(restTemplate,url,paramMap); |
| | | return dto; |
| | | } |
| | | //停止a200一体机放电/充电 |
| | | public Object stopA200Param(int devId) { |
| | | QueryWrapper wrapper=new QueryWrapper(); |
| | | wrapper.eq("dev_id",devId); |
| | | wrapper.last("limit 1"); |
| | | DevInf dinf=dinfMapper.selectOne(wrapper); |
| | | String url="http://"+dinf.getDevIp()+":8080/webService/stopTest"; |
| | | ResultA200Dto dto= getA200Dto(url); |
| | | return dto; |
| | | } |
| | | |
| | | //批量启动a200一体机 |
| | | public Response startA200ParamPl2(List<Integer> devIds,int type) { |
| | | Map<Integer,Object> 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<Integer> devIds,int type) { |
| | | Map<Integer,Object> 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); |
| | | dinfMapper.update(null,wrapper); |
| | | map.put(devId,dto); |
| | | } |
| | | return new Response().setII(1,true,map,"批量控制a200一体机"); |
| | | } |
| | | |
| | | //批量停止a200一体机 |
| | | public Response stopA200ParamPl2(List<Integer> devIds) { |
| | | Map<Integer,Object> 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<Integer> devIds) { |
| | | Map<Integer,Object> 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<Integer> devIds,int type) { |
| | | Map<Integer,Object> 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); |
| | | dinfMapper.update(null,wrapper); |
| | | map.put(devId,dto); |
| | | } |
| | | return new Response().setII(1,true,map,"批量控制a200一体机"); |
| | | } |
| | | |
| | | //将dto拷贝至param |
| | |
| | | a200Param.setDischargeVoltage(dto.getDischargeVoltage()); |
| | | a200Param.setDischargeTime(dto.getDischargeTime()); |
| | | a200Param.setDischargeCapacity(dto.getDischargeCapacity()); |
| | | if(dto.isDischargeCapacityEnable()){ |
| | | if(dto.getIsDischargeCapacityEnable()){ |
| | | a200Param.setIsDischargeCapacityEnable(1); |
| | | }else{ |
| | | a200Param.setIsDischargeCapacityEnable(0); |
| | | } |
| | | a200Param.setMinBatteryVoltage(dto.getMinBatteryVoltage()); |
| | | if(dto.isMinBatteryVoltageEnable()){ |
| | | if(dto.getIsMinBatteryVoltageEnable()){ |
| | | a200Param.setIsMinBatteryVoltageEnable(1); |
| | | }else{ |
| | | a200Param.setIsMinBatteryVoltageEnable(0); |
| | |
| | | a200Param.setChargeStopCurrent(dto.getChargeStopCurrent()); |
| | | a200Param.setChargeTime(dto.getChargeTime()); |
| | | a200Param.setChargeCapacity(dto.getChargeCapacity()); |
| | | if(dto.isChargeCapacityEnable()){ |
| | | if(dto.getIsChargeCapacityEnable()){ |
| | | a200Param.setIsChargeCapacityEnable(1); |
| | | }else{ |
| | | a200Param.setIsChargeCapacityEnable(0); |
| | | } |
| | | |
| | | a200Param.setMaxBatteryVoltage(dto.getMaxBatteryVoltage()); |
| | | if(dto.isMaxBatteryVoltageEnable()){ |
| | | if(dto.getIsMaxBatteryVoltageEnable()){ |
| | | a200Param.setIsMaxBatteryVoltageEnable(1); |
| | | }else{ |
| | | a200Param.setIsMaxBatteryVoltageEnable(0); |