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);
// }
//
// }
}