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 implements QualityQualityTrendDayService { private String HTTP_API_CODE = "Quality.QualityTrendDay"; @Resource private IFeignDataApi feignDataApi; @Resource private HttpsRequest httpsRequest; @Override public PageData page(Map params) { IPage page = baseDao.selectPage( getPage(params, Constant.CREATE_DATE, false), getWrapper(params) ); return getPageData(page, QualityQualityTrendDayDTO.class); } private QueryWrapper getWrapper(Map params){ String rq = (String)params.get("rq"); QueryWrapper 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 seriesItemList = new ArrayList<>(); List 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() .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() .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() .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() .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 getLastMonthDates(int length) { List 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 list(String coal){ List prdDayProdList = baseDao.selectList( new QueryWrapper() .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 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 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 wrapper = new QueryWrapper<>(); wrapper.eq(StringUtils.isNotBlank(date), "rq", date); baseDao.delete(wrapper); } }