|
package com.iailab.module.quality.service.impl;
|
|
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.core.metadata.IPage;
|
import com.iailab.framework.common.constant.Constant;
|
import com.iailab.common.dto.echarts.BarLineDTO;
|
import com.iailab.common.dto.echarts.SeriesItem;
|
import com.iailab.common.enums.CommonConstant;
|
import com.iailab.framework.common.page.PageData;
|
import com.iailab.framework.common.service.impl.BaseServiceImpl;
|
import com.iailab.framework.common.util.object.ConvertUtils;
|
import com.iailab.common.utils.DateUtils;
|
import com.iailab.common.utils.HttpsRequest;
|
import com.iailab.module.data.dto.FeignHttpApiDTO;
|
import com.iailab.module.data.api.IFeignDataApi;
|
import com.iailab.module.quality.dao.QualityQualityTrendDayDao;
|
import com.iailab.module.quality.dto.QualityQualityTrendDayDTO;
|
import com.iailab.module.quality.entity.QualityQualityTrendDayEntity;
|
import com.iailab.module.quality.service.QualityQualityTrendDayService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.StringUtils;
|
import javax.annotation.Resource;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.CollectionUtils;
|
|
import java.math.BigDecimal;
|
import java.text.SimpleDateFormat;
|
import java.time.LocalDate;
|
import java.time.format.DateTimeFormatter;
|
import java.util.*;
|
|
/**
|
* @author DongYukun
|
* @Description
|
* @createTime 2024年05月20日
|
*/
|
@Slf4j
|
@Service
|
public class QualityQualityTrendDayServiceImpl extends BaseServiceImpl<QualityQualityTrendDayDao, QualityQualityTrendDayEntity> implements QualityQualityTrendDayService {
|
|
private String HTTP_API_CODE = "Quality.QualityTrendDay";
|
|
@Resource
|
private IFeignDataApi feignDataApi;
|
|
@Resource
|
private HttpsRequest httpsRequest;
|
|
@Override
|
public PageData<QualityQualityTrendDayDTO> page(Map<String, Object> params) {
|
IPage<QualityQualityTrendDayEntity> page = baseDao.selectPage(
|
getPage(params, Constant.CREATE_DATE, false),
|
getWrapper(params)
|
);
|
return getPageData(page, QualityQualityTrendDayDTO.class);
|
}
|
|
private QueryWrapper<QualityQualityTrendDayEntity> getWrapper(Map<String, Object> params){
|
String rq = (String)params.get("rq");
|
|
QueryWrapper<QualityQualityTrendDayEntity> wrapper = new QueryWrapper<>();
|
wrapper.eq(StringUtils.isNotBlank(rq), "rq", rq)
|
.orderByAsc("rq");
|
|
return wrapper;
|
}
|
|
@Override
|
public QualityQualityTrendDayDTO get(String id) {
|
QualityQualityTrendDayEntity entity = baseDao.selectById(id);
|
|
return ConvertUtils.sourceToTarget(entity, QualityQualityTrendDayDTO.class);
|
}
|
|
@Override
|
public void save(QualityQualityTrendDayDTO dto) {
|
QualityQualityTrendDayEntity entity = ConvertUtils.sourceToTarget(dto, QualityQualityTrendDayEntity.class);
|
|
insert(entity);
|
}
|
|
@Override
|
public void update(QualityQualityTrendDayDTO dto) {
|
QualityQualityTrendDayEntity entity = ConvertUtils.sourceToTarget(dto, QualityQualityTrendDayEntity.class);
|
|
updateById(entity);
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void delete(String[] ids) {
|
baseDao.deleteBatchIds(Arrays.asList(ids));
|
}
|
|
@Override
|
public BarLineDTO barLine(String length,String type,String coal) {
|
|
BarLineDTO barLineDTO = new BarLineDTO();
|
List<SeriesItem> seriesItemList = new ArrayList<>();
|
List<Object[]> data = new ArrayList();
|
switch (type) {
|
case "sf":
|
//水分
|
this.list(coal).stream().forEach(
|
item->{
|
Object[] dataItem = new Object[2];
|
dataItem[0] = item.getRq();
|
dataItem[1] = item.getMt();
|
if(item.getMt()!=null){
|
data.add(dataItem);
|
}
|
barLineDTO.setValueName(coal+"水分");
|
}
|
);
|
break;
|
case "hf":
|
//灰分
|
this.list(coal).stream().forEach(
|
item->{
|
Object[] dataItem = new Object[2];
|
dataItem[0] = item.getRq();
|
dataItem[1] = item.getAd();
|
if(item.getAd()!=null){
|
data.add(dataItem);
|
}
|
barLineDTO.setValueName(coal+"灰分");
|
}
|
);
|
break;
|
case "lf":
|
//硫分
|
this.list(coal).stream().forEach(
|
item->{
|
Object[] dataItem = new Object[2];
|
dataItem[0] = item.getRq();
|
dataItem[1] = item.getSt();
|
if(item.getSt()!=null){
|
data.add(dataItem);
|
}
|
barLineDTO.setValueName(coal+"硫分");
|
}
|
);
|
break;
|
case "rz":
|
//热值
|
this.list(coal).stream().forEach(
|
item->{
|
Object[] dataItem = new Object[2];
|
dataItem[0] = item.getRq();
|
dataItem[1] = item.getQnet();
|
if(item.getQnet()!=null){
|
data.add(dataItem);
|
}
|
barLineDTO.setValueName(coal+"热值");
|
}
|
);
|
break;
|
default:
|
break;
|
}
|
|
SeriesItem seriesItem = new SeriesItem();
|
seriesItem.setData(data);
|
seriesItemList.add(seriesItem);
|
barLineDTO.setCategories(this.getLastMonthDates(Integer.parseInt(length)));
|
barLineDTO.setSeries(seriesItemList);
|
return barLineDTO;
|
}
|
|
@Override
|
public BigDecimal currentValue(String coal,String type) {
|
switch (type) {
|
case "sf":
|
//水分
|
QualityQualityTrendDayEntity sf = baseDao.selectOne(
|
new QueryWrapper<QualityQualityTrendDayEntity>()
|
.eq("rq",new SimpleDateFormat("yyyy-MM-dd").format(new Date()))
|
.eq("coal",coal)
|
);
|
if(sf != null){
|
return sf.getMt();
|
}
|
return null;
|
case "hf":
|
//灰分
|
QualityQualityTrendDayEntity hf = baseDao.selectOne(
|
new QueryWrapper<QualityQualityTrendDayEntity>()
|
.eq("rq",new SimpleDateFormat("yyyy-MM-dd").format(new Date()))
|
.eq("coal",coal)
|
);
|
if(hf != null){
|
return hf.getAd();
|
}
|
return null;
|
case "lf":
|
//硫分
|
QualityQualityTrendDayEntity lf = baseDao.selectOne(
|
new QueryWrapper<QualityQualityTrendDayEntity>()
|
.eq("rq",new SimpleDateFormat("yyyy-MM-dd").format(new Date()))
|
.eq("coal",coal)
|
);
|
if(lf != null){
|
return lf.getSt();
|
}
|
return null;
|
case "rz":
|
//热值
|
QualityQualityTrendDayEntity rz = baseDao.selectOne(
|
new QueryWrapper<QualityQualityTrendDayEntity>()
|
.eq("rq",new SimpleDateFormat("yyyy-MM-dd").format(new Date()))
|
.eq("coal",coal)
|
);
|
if(rz != null){
|
return rz.getQnet();
|
}
|
return null;
|
default:
|
break;
|
}
|
return null;
|
}
|
|
public List<String> getLastMonthDates(int length) {
|
List<String> dateList = new ArrayList<>();
|
LocalDate currentDate = LocalDate.now();
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
for (int i = length-1; i >= 0; i--) {
|
dateList.add(currentDate.minusDays(i).format(formatter));
|
}
|
|
return dateList;
|
}
|
|
public List<QualityQualityTrendDayEntity> list(String coal){
|
List<QualityQualityTrendDayEntity> prdDayProdList = baseDao.selectList(
|
new QueryWrapper<QualityQualityTrendDayEntity>()
|
.le("rq",new SimpleDateFormat("yyyy-MM-dd").format(new Date()))
|
.ge("rq",LocalDate.now().minusDays(29).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))
|
.eq("coal",coal)
|
.orderByAsc("rq")
|
);
|
return prdDayProdList;
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void syncData() {
|
Calendar calendar = Calendar.getInstance();
|
calendar.add(Calendar.DAY_OF_YEAR, -1);
|
String endDate = DateUtils.format(calendar.getTime());
|
calendar.add(Calendar.DAY_OF_YEAR, -10);
|
String startDate = DateUtils.format(calendar.getTime());
|
|
FeignHttpApiDTO apiDTO = feignDataApi.getHttpApi(HTTP_API_CODE);
|
Map<String, String> params = new HashMap<>();
|
String responseStr = httpsRequest.doGet(apiDTO.getUrl() + "&startDate=" + startDate + "&endDate=" + endDate, params, "utf-8", "");
|
JSONObject responseObj = JSON.parseObject(responseStr);
|
if (!CommonConstant.STA_TRUE.equals(responseObj.get("sta").toString())) {
|
log.info("接口异常");
|
}
|
JSONArray dataArray = responseObj.getJSONArray(CommonConstant.ZX_RES);
|
if (CollectionUtils.isEmpty(dataArray)) {
|
return;
|
}
|
for (int i = 0; i < dataArray.size(); i++) {
|
JSONObject dataItem = dataArray.getJSONObject(i);
|
String date = dataItem.getString("date");
|
JSONArray coalList = dataItem.getJSONArray("coalList");
|
this.deleteByDate(date);
|
List<QualityQualityTrendDayEntity> entities = coalList.toJavaList(QualityQualityTrendDayEntity.class);
|
entities.forEach(entity -> {
|
entity.setId(UUID.randomUUID().toString());
|
entity.setRq(date);
|
entity.setCreateDate(new Date());
|
entity.setUpdateDate(new Date());
|
insert(entity);
|
});
|
}
|
}
|
|
private void deleteByDate(String date) {
|
QueryWrapper<QualityQualityTrendDayEntity> wrapper = new QueryWrapper<>();
|
wrapper.eq(StringUtils.isNotBlank(date), "rq", date);
|
baseDao.delete(wrapper);
|
}
|
}
|