package com.template.services.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.template.mapper.ElectricEquipmentMapper;
import com.template.model.pojo.ElectricEquipment;
import com.template.services.ElectricEquipmentService;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
import java.math.BigDecimal;
import java.util.ArrayList;
/**
*
* 服务实现类
*
*
* @author ceshi
* @since 2024-04-01
*/
@Service
public class ElectricEquipmentServiceImpl extends ServiceImpl implements ElectricEquipmentService {
/**
* 获取所有房间的电表设备
*/
// @Scheduled(cron = "0 34 * * * ? ")
// 1
@Transactional(rollbackFor = Exception.class)//1
public void getHouseNumberEquipment() {
String url = "http://172.16.20.87/api/wechat/main/meterQuery?meterType=1";
RestTemplate restTemplate = new RestTemplate();
String forObject = restTemplate.getForObject(url, String.class);
JSONObject jsonObject = JSONObject.parseObject(forObject);
// System.out.println("jsonObject = " + jsonObject);
JSONArray meterObj = jsonObject.getJSONArray("meterObj");
ArrayList electricEquipments = new ArrayList<>();
for (int i = 0; i < meterObj.size(); i++) {
JSONObject jsonObject1 = meterObj.getJSONObject(i);
// ElectricEquipment electricEquipment = new ElectricEquipment();
// electricEquipment.setMeterId(jsonObject1.getString("meterId"));
// electricEquipment.setRoomId(jsonObject1.getString("roomId"));
// electricEquipment.setRoomNum(jsonObject1.getString("roomNum"));
// electricEquipment.setMeterName(jsonObject1.getString("meterName"));
// electricEquipments.add(electricEquipment);
String roomNum = jsonObject1.getString("roomNum");
String roomId = jsonObject1.getString("roomId");
LambdaQueryWrapper wrapper=new LambdaQueryWrapper<>();
wrapper/*.eq(ElectricEquipment::getRoomNum,roomNum)*/
.eq(ElectricEquipment::getRoomId,roomId);
ElectricEquipment electricEquipment = this.getOne(wrapper);
if (ObjectUtils.isEmpty(electricEquipment)) {
electricEquipment=new ElectricEquipment();
// electricEquipment.setRoomNum(roomNum);
electricEquipment.setRoomId(roomId);
}
electricEquipment.setRoomNum(roomNum);
electricEquipment.setMeterId(jsonObject1.getString("meterId"));
electricEquipment.setMeterName(jsonObject1.getString("meterName"));
electricEquipments.add(electricEquipment);
}
System.out.println("electricEquipments.size() = " + electricEquipments.size());
System.out.println("meterObj.size() = " + meterObj.size());
this.saveOrUpdateBatch(electricEquipments);
}
// 计算电费
@Override
public JSONObject roomCostRecord(String roomId, String beginTime, String endTime) {
JSONObject objectElectric = new JSONObject();
String url = "http://172.16.20.87/api/wechat/main/roomCostRecord?roomId=" + roomId + "&beginTime=" + beginTime + "&endTime=" + endTime + "&pageNumber=1&pageSize=1000&dataType=0&costType=0";
RestTemplate restTemplate = new RestTemplate();
String forObject = restTemplate.getForObject(url, String.class);
JSONObject jsonObject = JSONObject.parseObject(forObject);
JSONArray costObj = jsonObject.getJSONArray("costObj");
BigDecimal bigDecimalCost = new BigDecimal(0);
BigDecimal bigDecimalConsume = new BigDecimal(0);
if (ObjectUtils.isEmpty(costObj) && costObj.size() <= 0) {
objectElectric.put("cost", bigDecimalCost);
objectElectric.put("consume", bigDecimalConsume);
return objectElectric;
}
for (int i = 0; i < costObj.size(); i++) {
JSONObject jsonObject1 = costObj.getJSONObject(i);
BigDecimal costTotal = jsonObject1.getBigDecimal("costTotal");
BigDecimal consumeTotal = jsonObject1.getBigDecimal("consumeTotal");
bigDecimalCost = bigDecimalCost.add(costTotal);
bigDecimalConsume = bigDecimalConsume.add(consumeTotal);
}
objectElectric.put("cost", bigDecimalCost);
objectElectric.put("consume", bigDecimalConsume);
return objectElectric;
}
/**
* 远程开电
*
* @param electricEquipmentId
* @return
*/
@Override
public Boolean openMeterControl(String electricEquipmentId) {
ElectricEquipment electricEquipment = this.getById(electricEquipmentId);
if (ObjectUtils.isEmpty(electricEquipment)) {
return false;
}
String meterId = electricEquipment.getMeterId();
String url = "http://172.16.20.87/api/wechat/main/meterControl?meterId=" + meterId + "&ifOpen=Y&meterType=1";
RestTemplate restTemplate = new RestTemplate();
String forObject = restTemplate.getForObject(url, String.class);
JSONObject jsonObject = JSONObject.parseObject(forObject);
JSONArray meterObj = jsonObject.getJSONArray("meterObj");
Boolean state = false;
for (int i = 0; i < meterObj.size(); i++) {
JSONObject object = meterObj.getJSONObject(i);
String meterId1 = object.getString("meterId");
String opState = object.getString("opState");
if ("Y".equals(opState)) {
state = true;
}
}
return state;
}
/**
* 关电
*
* @param electricEquipmentId
* @return
*/
@Override
public Boolean closeMeterControl(String electricEquipmentId) {
ElectricEquipment electricEquipment = this.getById(electricEquipmentId);
if (ObjectUtils.isEmpty(electricEquipment)) {
return false;
}
String meterId = electricEquipment.getMeterId();
String url = "http://172.16.20.87/api/wechat/main/meterControl?meterId=" + meterId + "&ifOpen=N&meterType=1";
RestTemplate restTemplate = new RestTemplate();
String forObject = restTemplate.getForObject(url, String.class);
JSONObject jsonObject = JSONObject.parseObject(forObject);
JSONArray meterObj = jsonObject.getJSONArray("meterObj");
Boolean state = false;
for (int i = 0; i < meterObj.size(); i++) {
JSONObject object = meterObj.getJSONObject(i);
String meterId1 = object.getString("meterId");
String opState = object.getString("opState");
if ("Y".equals(opState)) {
state = true;
}
}
return state;
}
// @Scheduled(cron = "0 55 * * * ? ")
public void test() {
// JSONObject jsonObject = roomCostRecord("H1", "2024-04-02 08:10:10", "2024-04-03 07:00:00");
// System.out.println("jsonObject = " + jsonObject);
Boolean aBoolean = openMeterControl("2");
System.out.println("aBoolean = " + aBoolean);
}
}