package com.huimv.admin.service.impl; import cn.hutool.core.codec.Base64; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.huimv.admin.common.utils.DataUill; import com.huimv.admin.common.utils.Result; import com.huimv.admin.common.utils.ResultCode; import com.huimv.admin.entity.BasePigpen; import com.huimv.admin.entity.EnvData; import com.huimv.admin.entity.EnvDevice; import com.huimv.admin.mapper.BasePigpenMapper; import com.huimv.admin.mapper.EnvDataMapper; import com.huimv.admin.mapper.EnvDeviceMapper; import com.huimv.admin.service.IEnvDeviceService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.client.RestTemplate; import javax.servlet.http.HttpServletRequest; import java.text.NumberFormat; import java.util.*; import java.util.concurrent.CopyOnWriteArrayList; import java.util.stream.Collectors; /** *

* 服务实现类 *

* * @author author * @since 2023-02-13 */ @Service public class EnvDeviceServiceImpl extends ServiceImpl implements IEnvDeviceService { @Autowired private EnvDeviceMapper envDeviceMapper; @Autowired private BasePigpenMapper basePigpenMapper; @Autowired private EnvDataMapper dataMapper; // @Autowired // private RestTemplate restTemplate; @Override public Result count(HttpServletRequest httpServletRequest, Map paramsMap) { String farmId = paramsMap.get("farmId"); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("farm_id", farmId); Integer count = envDeviceMapper.selectCount(queryWrapper); JSONObject jsonObject = new JSONObject(); if (count == 0) { jsonObject.put("DeviceCount", 0); jsonObject.put("OnDeviceCount", 0); jsonObject.put("OffDeviceCount", 0); jsonObject.put("OnDeviceRate", 0); } else { QueryWrapper queryWrapper1 = new QueryWrapper<>(); queryWrapper1.eq("device_status", 1); Integer count1 = envDeviceMapper.selectCount(queryWrapper1); Integer OffDeviceCount = count- count1; //创建一个数值格式化对象 NumberFormat numberFormat = NumberFormat.getInstance(); //设置精确到小数点后两位 numberFormat.setMaximumFractionDigits(2); String onDeviceRate = numberFormat.format((float)count1 / (float) count* 100) + "%"; jsonObject.put("DeviceCount", count); jsonObject.put("OnDeviceCount", count1); jsonObject.put("OffDeviceCount", OffDeviceCount); jsonObject.put("OnDeviceRate", onDeviceRate); } return new Result(ResultCode.SUCCESS, jsonObject); } @Override public Result list(HttpServletRequest httpServletRequest, Map paramsMap) { String farmId = paramsMap.get("farmId"); String pageSize = paramsMap.get("pageSize"); String pageNo = paramsMap.get("pageNo"); if (pageSize==null||pageSize=="") { pageSize = "10"; } if (pageNo==null||pageNo=="") { pageNo = "1"; } QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("farm_id", farmId); Page page = new Page(Integer.parseInt(pageNo),Integer.parseInt(pageSize)); return new Result(ResultCode.SUCCESS,envDeviceMapper.selectPage(page, queryWrapper)); } @Override public Result add(HttpServletRequest httpServletRequest, Map paramsMap) { String farmId = paramsMap.get("farmId"); String DeviceName = paramsMap.get("DeviceName"); String BuildLocation = paramsMap.get("BuildLocation"); String DeviceBrand = paramsMap.get("DeviceBrand"); String remark = paramsMap.get("remark"); if (remark == null || remark == "") { remark = null; } EnvDevice envDevice = new EnvDevice(); envDevice.setFarmId(Integer.parseInt(farmId)); envDevice.setDeviceName(DeviceName); envDevice.setBuildLocation(BuildLocation); envDevice.setDeviceBrand(DeviceBrand); envDevice.setRemark(remark); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("device_name", DeviceName).eq("farm_id",farmId); EnvDevice device = envDeviceMapper.selectOne(queryWrapper); if (ObjectUtil.isEmpty(device)) { envDeviceMapper.insert(envDevice); } else { return new Result(ResultCode.FAIL, "设备名称已存在"); } return new Result(ResultCode.SUCCESS,"添加成功"); } @Override public Result edit(HttpServletRequest httpServletRequest, Map paramsMap) { String farmId = paramsMap.get("farmId"); String id = paramsMap.get("id"); String DeviceName = paramsMap.get("DeviceName"); String BuildLocation = paramsMap.get("BuildLocation"); String DeviceBrand = paramsMap.get("DeviceBrand"); String remark = paramsMap.get("remark"); if (remark == null || remark == "") { remark = null; } QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("id", id); EnvDevice envDevice = envDeviceMapper.selectOne(queryWrapper); envDevice.setFarmId(Integer.parseInt(farmId)); envDevice.setDeviceName(DeviceName); envDevice.setDeviceBrand(DeviceBrand); envDevice.setBuildLocation(BuildLocation); envDevice.setRemark(remark); QueryWrapper queryWrapper1 = new QueryWrapper<>(); queryWrapper1.eq("device_name", DeviceName); if (ObjectUtil.isEmpty(envDeviceMapper.selectOne(queryWrapper1))) { envDeviceMapper.updateById(envDevice); } else { return new Result(ResultCode.FAIL, "设备名称已存在"); } return new Result(ResultCode.SUCCESS); } @Override public Result delete(HttpServletRequest httpServletRequest, Map paramsMap) { String farmId = paramsMap.get("farmId"); String id = paramsMap.get("id"); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("id", id).eq("farm_id", farmId); envDeviceMapper.delete(queryWrapper); return new Result(ResultCode.SUCCESS,"删除成功"); } @Override public Result listPigpen(HttpServletRequest httpServletRequest, Map paramsMap) { String farmId = paramsMap.get("farmId"); String id = paramsMap.get("id");//楼层id JSONArray jsonArray = new JSONArray(); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("farm_id", farmId); if (id == null || id == "") { queryWrapper.eq("parent_id", 3); } else { queryWrapper.like("other2", id); } List basePigpens = basePigpenMapper.selectList(queryWrapper);//得到栋舍单元 for (int i = 0; i < basePigpens.size(); i++) { /* QueryWrapper queryWrapper1 = new QueryWrapper<>(); queryWrapper1.eq("unit_name",basePigpens.get(i).getId()); EnvDevice envDevice = envDeviceMapper.selectOne(queryWrapper1);//找到栋舍绑定的设备,利用单元id*/ QueryWrapper queryWrapper2 = new QueryWrapper<>(); queryWrapper2.eq("unit_id",basePigpens.get(i).getId()).orderByDesc("create_time").last(" limit 1");//通过设备id来拿取数据 EnvData envData = dataMapper.selectOne(queryWrapper2); JSONObject jsonObject = new JSONObject(); if (ObjectUtil.isEmpty(envData)) { jsonObject.put("temp", 0);//温度 jsonObject.put("hum", 0);//湿度 jsonObject.put("location", basePigpens.get(i).getBuildName()); jsonObject.put("unit_id", 0);//单元id } else { jsonObject.put("temp", envData.getEnvTemp());//温度 jsonObject.put("hum", envData.getEnvHum());//湿度 jsonObject.put("location", basePigpens.get(i).getBuildName()); jsonObject.put("unit_id", envData.getUnitId());//单元id } jsonArray.add(jsonObject); } return new Result(ResultCode.SUCCESS,jsonArray); } @Override public Result listEnv(HttpServletRequest httpServletRequest, Map paramsMap) { String farmId = paramsMap.get("farmId"); String id = paramsMap.get("id");//单元id String type = paramsMap.get("type");//查询类型 String startTime = paramsMap.get("startTime"); String endTime = paramsMap.get("endTime"); if (type == null || type == "") { type = "1"; } QueryWrapper basePigpenQueryWrapper = new QueryWrapper<>(); basePigpenQueryWrapper.eq("farm_id", farmId).eq("id", id); BasePigpen basePigpen = basePigpenMapper.selectOne(basePigpenQueryWrapper); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("unit_id", id).eq("farm_id", farmId); Map map = new HashMap<>(); //自定义查询 if ("4".equals(type)) { startTime = startTime + " 00:00:00"; endTime = endTime + " 23:59:59"; queryWrapper.between("create_time", startTime, endTime); List envData = dataMapper.listDay(queryWrapper); map.put("location", basePigpen.getBuildName()); map.put("data", envData); } //本月 else if ("3".equals(type)) { Date timesMonthmorning = DataUill.getTimesMonthmorning(); queryWrapper.ge("create_time", timesMonthmorning); List envData = dataMapper.listDay(queryWrapper); map.put("location", basePigpen.getBuildName()); map.put("data", envData); } //本周 else if ("2".equals(type)) { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - 7); queryWrapper.ge("create_time",calendar.getTime()); List envData = dataMapper.listDay(queryWrapper); map.put("location", basePigpen.getBuildName()); map.put("data", envData); } //今日 else if ("1".equals(type)) { Date timesmorning = DataUill.getTimesmorning(); queryWrapper.ge("create_time", timesmorning); List envData = dataMapper.listDay(queryWrapper); map.put("location", basePigpen.getBuildName()); map.put("data", envData); } return new Result(ResultCode.SUCCESS,map); } @Override public Result listDeviceCount(HttpServletRequest httpServletRequest, Map paramsMap) { String farmId = paramsMap.get("farmId"); Integer offCount = 0; Integer onCount = 0; QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("farm_id", farmId).eq("parent_id", 0); List basePigpens = basePigpenMapper.selectList(queryWrapper);//得到所有的栋 JSONArray jsonArray = new JSONArray(); for (int i = 0; i < basePigpens.size(); i++) { QueryWrapper queryWrapper1 = new QueryWrapper<>(); queryWrapper1.like("other2", basePigpens.get(i).getId()); List basePigpens1 = basePigpenMapper.selectList(queryWrapper1);//得到所有的楼层 for (int j = 0; j < basePigpens1.size(); j++) { QueryWrapper deviceQueryWrapper = new QueryWrapper<>(); deviceQueryWrapper.eq("unit_id",basePigpens1.get(j).getId()); EnvDevice envDevice = envDeviceMapper.selectOne(deviceQueryWrapper); if (ObjectUtil.isNotEmpty(envDevice)) { if (envDevice.getDeviceStatus() == 0) { offCount++; } else { onCount++; } } } JSONObject jsonObject = new JSONObject(); jsonObject.put("location",basePigpens.get(i).getBuildName()); jsonObject.put("onDevice", onCount); jsonObject.put("offDevice", offCount); jsonArray.add(jsonObject); offCount = 0; onCount = 0; } return new Result(ResultCode.SUCCESS,jsonArray); } // @Override // @Transactional // public Result sync(Map params) throws Exception { // String farmId = params.get("farmId"); // //获取所有栏舍 // Map map = new HashMap(); // String s = HttpClientSSLUtils.doPost("https://yzwlw.loongk.com/mobile/login?username=江西增鑫&password=21218cca77804d2ba1922c33e0151105", JSON.toJSONString(map)); // System.out.println("登录带栏舍:"+s); // LoginDto loginDto = JSONUtil.toBean(s, LoginDto.class); // DataToken token = loginDto.getData().getToken(); // String encode = Base64.encode(token.getUserId() + "_" + token.getToken()); // HttpHeaders headers = new HttpHeaders(); // headers.add("Authorization",encode); // HttpEntity requestEntity = new HttpEntity<>(null, headers); // List shacks = loginDto.getData().getShacks(); // // 不能删除,需做比较 // List zengXinDeviceId = shacks.stream().map(DataShacks::getId).collect(Collectors.toList()); // List huatongDeviceId = envDeviceMapper.selectDeviceCodeByfarmId(Integer.parseInt(farmId)); // // CopyOnWriteArrayList zengXinDeviceIdCopy = ListUtil.toCopyOnWriteArrayList(zengXinDeviceId); // CopyOnWriteArrayList huatongDeviceIdCopy = ListUtil.toCopyOnWriteArrayList(huatongDeviceId); // //新增的设备 // zengXinDeviceIdCopy.removeAll(huatongDeviceId); // //新增 // if (zengXinDeviceIdCopy.size() >0){ // for (String deviceId : zengXinDeviceIdCopy) { // syncConfig(deviceId,requestEntity,farmId); // } // } // //需要删除的设备 // huatongDeviceIdCopy.removeAll(zengXinDeviceId); // if (huatongDeviceIdCopy.size() >0){ // this.remove(new QueryWrapper().in("device_code",huatongDeviceIdCopy)); // } // System.out.println("zengxin:"+zengXinDeviceIdCopy); // System.out.println(huatongDeviceIdCopy); // return new Result(10000,"同步成功",false); // } @Override public Result bandingUnitId(HttpServletRequest httpServletRequest, EnvDevice envDevice) { Integer unitId = envDevice.getUnitId(); int count = this.count(new QueryWrapper().eq("unit_id", unitId)); if (count>0){ return new Result(10001,"绑定失败,该栋舍已有设备",false); } this.updateById(envDevice); return new Result(10000,"绑定成功",true); } @Override public Result listPigpenAll(HttpServletRequest httpServletRequest, Map paramsMap) { String farmId = paramsMap.get("farmId"); List objects = new ArrayList<>(); List basePigpens = basePigpenMapper.selectList(new QueryWrapper().eq("farm_id", farmId).eq("f_type",3)); for (BasePigpen basePigpen : basePigpens) { Integer id = basePigpen.getId(); EnvData envData = dataMapper.selectOne(new QueryWrapper().eq("unit_id", id).orderByDesc("id").last("limit 1")); JSONObject jsonObject = new JSONObject(); if (ObjectUtil.isNotEmpty(envData)){ jsonObject.put("temp", envData.getEnvTemp());//温度 jsonObject.put("hum", envData.getEnvHum());//湿度 jsonObject.put("location", basePigpen.getBuildName()); jsonObject.put("unit_id", basePigpen.getId());//单元id }else { jsonObject.put("temp", 0);//温度 jsonObject.put("hum", 0);//湿度 jsonObject.put("location", basePigpen.getBuildName()); jsonObject.put("unit_id", basePigpen.getId());//单元id } objects.add(jsonObject); } return new Result(ResultCode.SUCCESS,objects); } // //添加新的设备 // private void syncConfig(String shackId,HttpEntity httpEntity,String farmId) { // try { // ResponseEntity exchangePeizhi = restTemplate.exchange("https://yzwlw.loongk.com/mobile/loadShackConfig/"+shackId, HttpMethod.GET, httpEntity, String.class); // String peizhibody = exchangePeizhi.getBody(); // ShackConfigDto shackConfigDto = JSONUtil.toBean(peizhibody, ShackConfigDto.class); // ShackConfigData data = shackConfigDto.getData(); // List sensors = data.getSensors(); // if (ObjectUtil.isNotEmpty(sensors)){ // EnvDevice envDevice =new EnvDevice(); // envDevice.setFarmId(Integer.parseInt(farmId)); // envDevice.setDeviceBrand("增鑫"); // envDevice.setDeviceCode(data.getId()); // envDevice.setDeviceName(data.getName()); // for (ShackConfigDataSensors sensor : sensors) { // if ("TEMPERATURE".equals(sensor.getType())){ // envDevice.setOhter1(sensor.getId()); // } // if ("HUMIDITY".equals(sensor.getType())){ // envDevice.setOhter2(sensor.getId()); // } // } // envDeviceMapper.insert(envDevice); // } // }catch (Exception e){ // System.out.println("设备同步异常:" + e +" deviceId"+shackId); // } // // } }