|
@@ -1,8 +1,24 @@
|
|
|
package com.huimv.manager.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.huimv.manager.entity.BaseFarmInfoEntity;
|
|
|
+import com.huimv.manager.entity.DailyTabulateDataEntity;
|
|
|
+import com.huimv.manager.entity.EartagOffineEntity;
|
|
|
+import com.huimv.manager.entity.vo.EartagDataCountVo;
|
|
|
+import com.huimv.manager.mapper.BaseFarmInfoDao;
|
|
|
+import com.huimv.manager.mapper.DailyTabulateDataDao;
|
|
|
import com.huimv.manager.mapper.EartagDataDao;
|
|
|
+import com.huimv.manager.mapper.EartagOffineDao;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
-import java.util.Map;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.BigInteger;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
@@ -24,12 +40,208 @@ public class EartagDataServiceImpl extends ServiceImpl<EartagDataDao, EartagData
|
|
|
|
|
|
@Override
|
|
|
public PageUtils queryPage(Map<String, Object> params) {
|
|
|
- IPage<EartagDataEntity> page = this.page(
|
|
|
- new Query<EartagDataEntity>().getPage(params),
|
|
|
- new QueryWrapper<EartagDataEntity>()
|
|
|
- );
|
|
|
|
|
|
+
|
|
|
+ String time = (String)params.get("time");//采集时间
|
|
|
+ String farmName = (String)params.get("farmName");//牧场名称
|
|
|
+ String eartagNo = (String)params.get("eartagNo");//耳标号
|
|
|
+ String dayAge = (String)params.get("dayAge");//耳标号
|
|
|
+ String earTemp = (String)params.get("earTemp");//耳根温度
|
|
|
+ String envTemp = (String)params.get("envTemp");//环境温度
|
|
|
+ String bat = (String)params.get("bat");//电量
|
|
|
+ String rssi = (String)params.get("rssi");//信号强度
|
|
|
+ String pigpenName = (String)params.get("pigpenName");
|
|
|
+ String deviceCode = (String)params.get("deviceCode");
|
|
|
+
|
|
|
+ //TODO 多条件查询
|
|
|
+ QueryWrapper<EartagDataEntity> wrapper = new QueryWrapper<>();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ IPage<EartagDataEntity> page = this.page(new Query<EartagDataEntity>().getPage(params),wrapper);
|
|
|
return new PageUtils(page);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public List countByTime(Map<String, Object> params) {
|
|
|
+ String startTime = (String)params.get("startTime");
|
|
|
+ String endTime = (String) params.get("endTime");
|
|
|
+ String deviceCode = (String)params.get("deviceCode");
|
|
|
+
|
|
|
+
|
|
|
+ QueryWrapper<EartagDataEntity> wrapper = new QueryWrapper<>();
|
|
|
+ wrapper.eq("device_code",deviceCode);
|
|
|
+ wrapper.ge(StringUtils.isNotBlank(startTime),"time",startTime);
|
|
|
+ wrapper.le(StringUtils.isNotBlank(endTime),"time",endTime);
|
|
|
+ wrapper.groupBy("count_time");
|
|
|
+ List<EartagDataCountVo> list = baseMapper.countByTime(wrapper);
|
|
|
+
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private DailyTabulateDataDao dailyTabulateDataDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private EartagOffineDao eartagOffineDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private BaseFarmInfoDao baseFarmInfoDao;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void updateDailyData() {
|
|
|
+ QueryWrapper<BaseFarmInfoEntity> baseFarmInfoWrapper = new QueryWrapper<>();
|
|
|
+ List<BaseFarmInfoEntity> baseFarmInfoEntities = baseFarmInfoDao.selectList(baseFarmInfoWrapper);
|
|
|
+ for (BaseFarmInfoEntity baseFarmInfoEntity : baseFarmInfoEntities) {
|
|
|
+ String farmCode = baseFarmInfoEntity.getFarmCode();
|
|
|
+ //查询当日牧场下耳标数据
|
|
|
+ Date now = new Date();
|
|
|
+ QueryWrapper<EartagDataEntity> wrapper = new QueryWrapper<>();
|
|
|
+ wrapper.eq("farm_code",farmCode);
|
|
|
+ wrapper.ge("time", DateUtil.beginOfDay(now));
|
|
|
+ wrapper.groupBy("eartag_no");
|
|
|
+ List<EartagDataEntity> eartagDataEntities = baseMapper.selectList(wrapper);
|
|
|
+
|
|
|
+ //过滤
|
|
|
+ Set<String> nowSet = new HashSet();
|
|
|
+ for (EartagDataEntity eartagDataEntity : eartagDataEntities) {
|
|
|
+ nowSet.add(eartagDataEntity.getEartagNo());
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询昨日牧场下耳标数据
|
|
|
+ wrapper.clear();
|
|
|
+ wrapper.eq("farm_code",farmCode);
|
|
|
+ wrapper.le("time", DateUtil.beginOfDay(now));
|
|
|
+ wrapper.ge("time", DateUtil.offsetDay(DateUtil.beginOfDay(now),-1));
|
|
|
+ wrapper.groupBy("eartag_no");
|
|
|
+ List<EartagDataEntity> yesterdayEartagDataEntities = baseMapper.selectList(wrapper);
|
|
|
+
|
|
|
+ //过滤
|
|
|
+ Set<String> yesterdaySet = new HashSet();
|
|
|
+ for (EartagDataEntity eartagDataEntity : yesterdayEartagDataEntities) {
|
|
|
+ yesterdaySet.add(eartagDataEntity.getEartagNo());
|
|
|
+ }
|
|
|
+ Set<String> set = ObjectUtil.cloneByStream(nowSet);
|
|
|
+
|
|
|
+ //当日母猪总存栏
|
|
|
+ int allSow = nowSet.size();
|
|
|
+
|
|
|
+ //得到新增
|
|
|
+ nowSet.removeAll(yesterdaySet);
|
|
|
+ int newSow = nowSet.size();
|
|
|
+ //得到离线
|
|
|
+ yesterdaySet.removeAll(set);
|
|
|
+ int offSow = yesterdaySet.size();
|
|
|
+
|
|
|
+ //添加离线表
|
|
|
+ for (String eartagNo : yesterdaySet) {
|
|
|
+ wrapper.clear();
|
|
|
+ wrapper.eq("eartag_no",eartagNo);
|
|
|
+ wrapper.eq("farm_code",farmCode);
|
|
|
+ wrapper.orderByDesc("time");
|
|
|
+ EartagDataEntity dataEntity = baseMapper.selectList(wrapper).get(0);
|
|
|
+
|
|
|
+ EartagOffineEntity eartagOffineEntity = new EartagOffineEntity();
|
|
|
+ eartagOffineEntity.setEartagNo(eartagNo);
|
|
|
+ eartagOffineEntity.setFarmCode(farmCode);
|
|
|
+ eartagOffineEntity.setDeviceCode(dataEntity.getDeviceCode());
|
|
|
+ eartagOffineEntity.setLastDate(dataEntity.getTime());
|
|
|
+ eartagOffineEntity.setRegisterDate(now);
|
|
|
+ eartagOffineDao.insert(eartagOffineEntity);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //计算日龄
|
|
|
+ Integer totalRatio = eartagDataEntities.size();
|
|
|
+ Integer ratio1 = 0 ,ratio2 = 0,ratio3= 0,ratio4 = 0;
|
|
|
+ Integer stock1 = 0 ,stock2 = 0,stock3= 0,stock4 = 0;
|
|
|
+ for (EartagDataEntity eartagDataEntity : eartagDataEntities) {
|
|
|
+ Integer dayAge = eartagDataEntity.getDayAge2();
|
|
|
+ if (dayAge>250 && dayAge < 1000 ){
|
|
|
+ ratio1++;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (dayAge >=1000 && dayAge < 1700 ){
|
|
|
+ ratio2++;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (dayAge >= 1700 && dayAge < 2400 ){
|
|
|
+ ratio3++;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (dayAge >= 2400 ){
|
|
|
+ ratio4++;
|
|
|
+ }
|
|
|
+
|
|
|
+ Integer stage = eartagDataEntity.getStage();
|
|
|
+ if (stage== 1){
|
|
|
+ stock1++;
|
|
|
+ }
|
|
|
+ if (stage== 2){
|
|
|
+ stock2++;
|
|
|
+ }
|
|
|
+ if (stage== 3){
|
|
|
+ stock3++;
|
|
|
+ }
|
|
|
+ if (stage== 4){
|
|
|
+ stock4++;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ String ratioStr1 = CalculateUtil(BigDecimal.valueOf(ratio1), BigDecimal.valueOf(totalRatio));
|
|
|
+ String ratioStr2 = CalculateUtil(BigDecimal.valueOf(ratio2),BigDecimal.valueOf(totalRatio));
|
|
|
+ String ratioStr3 = CalculateUtil(BigDecimal.valueOf(ratio3),BigDecimal.valueOf(totalRatio));
|
|
|
+ String ratioStr4 = CalculateUtil(BigDecimal.valueOf(ratio4),BigDecimal.valueOf(totalRatio));
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ //新数据
|
|
|
+ QueryWrapper<DailyTabulateDataEntity> dailyWrapper = new QueryWrapper<>();
|
|
|
+ dailyWrapper.eq("statistic_date",DateUtil.beginOfDay(now));
|
|
|
+ dailyWrapper.eq("farm_code",farmCode);
|
|
|
+ DailyTabulateDataEntity dailyTabulateDataEntity = dailyTabulateDataDao.selectOne(dailyWrapper);
|
|
|
+ if (dailyTabulateDataEntity == null){
|
|
|
+ dailyTabulateDataEntity = new DailyTabulateDataEntity();
|
|
|
+ }
|
|
|
+ dailyTabulateDataEntity.setFarmCode(farmCode);
|
|
|
+ dailyTabulateDataEntity.setStockTotal(allSow);
|
|
|
+ dailyTabulateDataEntity.setStatisticDate(now);
|
|
|
+ dailyTabulateDataEntity.setStockNew(newSow);
|
|
|
+ dailyTabulateDataEntity.setOfflineNo(offSow);
|
|
|
+ dailyTabulateDataEntity.setRatio1(ratio1 +" ("+ratioStr1+")");
|
|
|
+ dailyTabulateDataEntity.setRatio2(ratio2 +" ("+ratioStr2+")");
|
|
|
+ dailyTabulateDataEntity.setRatio3(ratio3 +" ("+ratioStr3+")");
|
|
|
+ dailyTabulateDataEntity.setRatio4(ratio4 +" ("+ratioStr4+")");
|
|
|
+ dailyTabulateDataEntity.setStock1(stock1);
|
|
|
+ dailyTabulateDataEntity.setStock2(stock2);
|
|
|
+ dailyTabulateDataEntity.setStock3(stock3);
|
|
|
+ dailyTabulateDataEntity.setStock4(stock4);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if (dailyTabulateDataEntity.getId()==null){
|
|
|
+ dailyTabulateDataDao.insert(dailyTabulateDataEntity);
|
|
|
+ }else {
|
|
|
+ dailyTabulateDataDao.updateById(dailyTabulateDataEntity);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //计算百分比
|
|
|
+ public String CalculateUtil(BigDecimal a, BigDecimal b){
|
|
|
+ String percent =
|
|
|
+ b == null ? "-" :
|
|
|
+ b.compareTo(new BigDecimal(0)) == 0 ? "-":
|
|
|
+ a == null ? "0.00%" :
|
|
|
+ a.multiply(new BigDecimal(100)).divide(b,2,BigDecimal.ROUND_HALF_UP) + "%";
|
|
|
+ return percent;
|
|
|
+ }
|
|
|
}
|