package com.studenthotel.services.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mysql.cj.util.LogUtils;
import com.studenthotel.model.pojo.ColdWater;
import com.studenthotel.mapper.ColdWaterMapper;
import com.studenthotel.model.pojo.Dorm;
import com.studenthotel.services.ColdWaterService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.studenthotel.services.DormService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import java.math.BigDecimal;
import java.util.List;
/**
*
* 服务实现类
*
*
* @author liu
* @since 2023-06-07
*/
@Service
public class ColdWaterServiceImpl extends ServiceImpl implements ColdWaterService {
@Autowired
DormService dormService;
private static String url = "https://jtishfw.ncjti.edu.cn/jxch-smartmp/HotWaters/cwaterMonthlist.action";
private Integer page = 1;
private Integer size = 8;
// 每月1号每20分钟运行一次
// @Scheduled(cron = "0/20 * * 1 * ? ")
@Scheduled(cron = "0 0/1 * * * ? ")
public void autoQueryOrder() {
Page dPage = new Page<>(page, size);
LambdaQueryWrapper wrapper=new LambdaQueryWrapper<>();
IPage dormPage = dormService.page(dPage,wrapper);
List records = dormPage.getRecords();
long pages = dormPage.getPages();
for (Dorm dorm : records) {
if (dorm.getDom() != null) {
try {
this.getColdWater(dorm.getDom());
} catch (Exception e) {
e.printStackTrace();
}
}
}
if (page <= pages) {
//将当前计数器的页码信息赋值给page
page += 1;
} else {
page -= 1;
}
}
public void getColdWater(String dormNumber) {
String token="AqwxcdAxs4212pomk231qsxssaz";
MultiValueMap map = new LinkedMultiValueMap<>();
// dormNumber="墨轩湖校区"+dormNumber;
map.add("dom", dormNumber);
map.add("page", 1);
map.add("rows", 10);
// map.add("token",token);
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.set("token",token);
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
HttpEntity> request = new HttpEntity<>(map, headers);
ResponseEntity responseEntity = restTemplate.postForEntity(url, request, String.class);
JSONObject jsonObj = JSON.parseObject(responseEntity.getBody());
// rows为数组
JSONArray jsonArray = jsonObj.getJSONArray("rows");
if (ObjectUtils.isNotEmpty(jsonArray)) {
// 0 2 4 6 7 8
JSONObject jsonMap = jsonArray.getJSONObject(8);
if (jsonMap != null) {
ColdWater coldWater = new ColdWater();
String dom = jsonMap.get("dom").toString();
coldWater.setDom(dom);
String build = jsonMap.getString("build");
coldWater.setBuild(build);
Double totalMoney = Double.valueOf(jsonMap.get("totalMoney").toString());
Double totalPower = Double.valueOf(jsonMap.get("totalPower").toString());
BigDecimal bg = new BigDecimal(totalMoney);
BigDecimal bg2 = new BigDecimal(totalPower);
/**
* 参数:
newScale - 要返回的 BigDecimal 值的标度。
roundingMode - 要应用的舍入模式。
返回:
一个 BigDecimal,其标度为指定值,其非标度值可以通过此 BigDecimal 的非标度值乘以或除以十的适当次幂来确定。
*/
double f1 = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
double f2 = bg2.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
coldWater.setTotalMoney(f1);
coldWater.setTotalPower(f2);
String dateTime = jsonMap.get("dataTime").toString();
coldWater.setDataTime(dateTime);
Boolean exists = chackColdWaterActive(dom, dateTime);
if (!exists) {
coldWater.setDeleted(0L);
this.save(coldWater);
}
}
}
}
/**
* 通过宿舍号和时间判断该数据是否已添加
*
* @param dom
* @param dateTime
* @return
*/
public Boolean chackColdWaterActive(String dom, String dateTime) {
LambdaQueryWrapper query = new LambdaQueryWrapper<>();
query.eq(ColdWater::getDataTime, dateTime)
.eq(ColdWater::getDom, dom);
int count = this.count(query);
if (count>0) {
return true;
}
return false;
}
}