Selaa lähdekoodia

优化定时器:计算农户的可售和非可售生物资产。

zhuoning 2 vuotta sitten
vanhempi
commit
64a147dbee

+ 4 - 0
huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/mapper/FarmerAssetMapper.java

@@ -22,4 +22,8 @@ public interface FarmerAssetMapper extends BaseMapper<FarmerAsset> {
     BigDecimal getPigWeightByDayage(@Param("days") long days);
 
     List<FarmerAsset> getAssetByMonth(@Param("months") int months,@Param("farmCode") String farmerId);
+
+    List<FarmerAsset> getPigWeight();
+
+    FarmerAsset getAssetByFarmerIdAndYearAndMonth(@Param("farmerId") Integer farmerId,@Param("year") String year,@Param("month") String month);
 }

+ 3 - 0
huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/mapper/FarmerDayageWeightMapper.java

@@ -3,6 +3,8 @@ package com.huimv.eartag2.manage2.mapper;
 import com.huimv.eartag2.manage2.pojo.FarmerDayageWeight;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
+import java.util.List;
+
 /**
  * <p>
  *  Mapper 接口
@@ -13,4 +15,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface FarmerDayageWeightMapper extends BaseMapper<FarmerDayageWeight> {
 
+    List<FarmerDayageWeight> getAllDayageWeight();
 }

+ 6 - 0
huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/mapper/xml/FarmerAssetMapper.xml

@@ -25,5 +25,11 @@
     <select id="getAssetByMonth" resultType="com.huimv.eartag2.manage2.pojo.FarmerAsset" parameterType="int">
         SELECT * FROM farmer_asset WHERE farm_code=${farmCode} ORDER BY YEAR DESC,MONTH DESC LIMIT ${months}
     </select>
+    <select id="getPigWeight" resultType="com.huimv.eartag2.manage2.pojo.FarmerAsset">
+        SELECT * FROM farmer_dayage_weight
+    </select>
+    <select id="getAssetByFarmerIdAndYearAndMonth" resultType="com.huimv.eartag2.manage2.pojo.FarmerAsset">
+        SELECT * FROM farmer_asset WHERE farm_code=${farmerId} AND year=${year} AND month=${month}
+    </select>
 
 </mapper>

+ 3 - 0
huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/mapper/xml/FarmerDayageWeightMapper.xml

@@ -14,5 +14,8 @@
     <sql id="Base_Column_List">
         id, start_dayage, end_dayage, weight
     </sql>
+    <select id="getAllDayageWeight" resultType="com.huimv.eartag2.manage2.pojo.FarmerDayageWeight">
+        SELECT * FROM farmer_dayage_weight
+    </select>
 
 </mapper>

+ 87 - 55
huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/schedule/EartagTask.java

@@ -5,23 +5,19 @@ import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.huimv.eartag2.manage2.mapper.BaseFarmerMapper;
-import com.huimv.eartag2.manage2.mapper.EartagDeviceRegisterMapper;
-import com.huimv.eartag2.manage2.mapper.EartagEartagRegister2Mapper;
-import com.huimv.eartag2.manage2.mapper.EartagResetMapper;
-import com.huimv.eartag2.manage2.pojo.BaseFarmer;
-import com.huimv.eartag2.manage2.pojo.EartagDeviceRegister;
-import com.huimv.eartag2.manage2.pojo.EartagEartagRegister2;
-import com.huimv.eartag2.manage2.pojo.SysBaseConfig;
+import com.huimv.eartag2.manage2.mapper.*;
+import com.huimv.eartag2.manage2.pojo.*;
 import com.huimv.eartag2.manage2.service.EartagDeviceRegisterService;
 import com.huimv.eartag2.manage2.service.IEartagService;
 import com.huimv.eartag2.manage2.service.SysBaseConfigService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.Scheduled;
 
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.sql.Timestamp;
 import java.text.ParseException;
 import java.util.Date;
@@ -54,22 +50,27 @@ public class EartagTask {
     private BaseFarmerMapper baseFarmerMapper;
     @Autowired
     private EartagDeviceRegisterMapper eartagDeviceRegisterMapper;
+    @Autowired
+    private FarmerAssetMapper farmerAssetMapper;
+    @Value("${farmer.pig.price}")
+    private String pigPrice;
+    @Autowired
+    private FarmerDayageWeightMapper farmerDayageWeightMapper;
 
     /**
-     * @Method      : countEartagOnlineTimes
+     * @Method : countEartagOnlineTimes
      * @Description : 判断耳标离线状态
-     * @Params      : []
-     * @Return      : void
-     *
-     * @Author      : ZhuoNing
-     * @Date        : 2022/8/20
-     * @Time        : 19:35
+     * @Params : []
+     * @Return : void
+     * @Author : ZhuoNing
+     * @Date : 2022/8/20
+     * @Time : 19:35
      */
     // 10分钟
     @Scheduled(cron = "0 0/10 * * * ? ")
     private void countEartagOnlineTimes() throws IOException, ParseException {
         Timestamp nowTimestamp = new Timestamp(new java.util.Date().getTime());
-        System.out.println("时间戳="+nowTimestamp);
+//        System.out.println("时间戳="+nowTimestamp);
 
 //        ExecutorService service = Executors.newFixedThreadPool(5);
 //        ExecutorService service = Executors.newSingleThreadExecutor();
@@ -81,40 +82,39 @@ public class EartagTask {
 
 
     /**
-     * @Method      : updateDevice
+     * @Method : updateDevice
      * @Description : 判断设备离线状态
-     * @Params      : []
-     * @Return      : void
-     *
-     * @Author      : ZhuoNing
-     * @Date        : 2022/8/20
-     * @Time        : 19:36
+     * @Params : []
+     * @Return : void
+     * @Author : ZhuoNing
+     * @Date : 2022/8/20
+     * @Time : 19:36
      */
     // 5分钟
     @Scheduled(cron = "0 0/5 * * * ? ")
-    private void updateDevice()  {
+    private void updateDevice() {
         SysBaseConfig baseConfig = baseConfigService.getById(60);
 
         String configValueStr = baseConfig.getConfigValue();
-        if (StringUtils.isNotBlank(configValueStr)){
+        if (StringUtils.isNotBlank(configValueStr)) {
             int configValueInt = Integer.parseInt(configValueStr);
             DateTime dateTime = DateUtil.offsetMinute(new Date(), -configValueInt);
 
             UpdateWrapper<EartagDeviceRegister> wrapper = new UpdateWrapper<>();
-            wrapper.ge("last_time",dateTime);
+            wrapper.ge("last_time", dateTime);
             EartagDeviceRegister deviceRegister = new EartagDeviceRegister();
             //未离线
             deviceRegister.setActiveStatus(1);
             deviceRegister.setDeviceStatus(1);
-            deviceRegisterService.update(deviceRegister,wrapper);
+            deviceRegisterService.update(deviceRegister, wrapper);
 
             //离线
             deviceRegister.setActiveStatus(2);
             deviceRegister.setDeviceStatus(0);
             wrapper.clear();
-            wrapper.le("last_time",dateTime);
-            deviceRegisterService.update(deviceRegister,wrapper);
-        }else {
+            wrapper.le("last_time", dateTime);
+            deviceRegisterService.update(deviceRegister, wrapper);
+        } else {
             System.out.println("未设置定时时长");
         }
 
@@ -122,48 +122,80 @@ public class EartagTask {
     }
 
     @Scheduled(cron = "0/5 * * * * ? ")
-    private void countAssetInEveryMonth()  {
-        com.huimv.eartag2.common.utils.DateUtil dateUtil = new com.huimv.eartag2.common.utils.DateUtil();
-        String month = dateUtil.getThisMonth();
-//        eartagResetMapper.
-//        eartagEartagRegister2Mapper.get
+    private void countAssetInEveryMonth() throws ParseException {
         //--读取所有农户和采集器
         List<BaseFarmer> baseFarmerList = baseFarmerMapper.getFarmer();
-
         //--用采集器读取所有数据计算可售和不可售资源
-        for(BaseFarmer baseFarmer:baseFarmerList){
-            //--
+        for (BaseFarmer baseFarmer : baseFarmerList) {
+            //--计算每个农户的生物资产
             _countAssetByFarmer(baseFarmer);
         }
-
-        System.out.println("month="+month);
     }
 
     //--
-    private void _countAssetByFarmer(BaseFarmer baseFarmer) {
+    private void _countAssetByFarmer(BaseFarmer baseFarmer) throws ParseException {
         //------------------------------------------------------------------------
-        // 读取采集器
-        // 根据采集器读取所有耳标
-        // 对读取耳标进行计算可售和非可售,并归到当月
+        // 读取采集器.
+        // 根据采集器读取所有耳标.
+        // 对读取耳标进行计算可售和非可售,并归到当月.
         //------------------------------------------------------------------------
 
+        com.huimv.eartag2.common.utils.DateUtil dateUtil = new com.huimv.eartag2.common.utils.DateUtil();
         Integer farmerId = baseFarmer.getId();
-        System.out.println("farmerId="+farmerId);
         //--读取采集器
         String deviceCode = eartagDeviceRegisterMapper.getDeviceIdByFarmerId(String.valueOf(farmerId));
-        System.out.println("deviceCode="+deviceCode);
+        java.sql.Date todayDate = new java.sql.Date(new java.util.Date().getTime());
         //--读取注册耳标
         List<EartagEartagRegister2> eartagEartagRegister2List = eartagEartagRegister2Mapper.getEartagByDeviceCode(deviceCode);
-        System.out.println("eartagEartagRegister2List.size=============="+eartagEartagRegister2List.size());
-        for(EartagEartagRegister2 eartagEartagRegister2:eartagEartagRegister2List){
-            System.out.println(""+eartagEartagRegister2.getCreateDate());
+        String year = dateUtil.getThisYear();
+        String month = dateUtil.getThisMonth();
+        if(eartagEartagRegister2List.size()>0){
+            //--
+            List<FarmerDayageWeight> farmerDayageWeightList = farmerDayageWeightMapper.getAllDayageWeight();
+            BigDecimal availTotalBd = new BigDecimal(0);
+            BigDecimal unavailTotalBd = new BigDecimal(0);
+            for (EartagEartagRegister2 eartagEartagRegister2 : eartagEartagRegister2List) {
+                long diff = todayDate.getTime() - eartagEartagRegister2.getCreateDate().getTime();
+                long days = diff / (1000 * 60 * 60 * 24);
+                if (days < 180) {
+                    for (FarmerDayageWeight farmerDayageWeight : farmerDayageWeightList) {
+                        if (farmerDayageWeight.getStartDayage() <= days && days <= farmerDayageWeight.getEndDayage()) {
+                            availTotalBd = availTotalBd.add(farmerDayageWeight.getWeight().multiply(new BigDecimal(pigPrice)).setScale(2, BigDecimal.ROUND_HALF_UP));
+                            break;
+                        }
+                    }
+                } else if (180 <= days && days < 210) {
+                    for (FarmerDayageWeight farmerDayageWeight : farmerDayageWeightList) {
+                        if (farmerDayageWeight.getStartDayage() <= days && days <= farmerDayageWeight.getEndDayage()) {
+                            unavailTotalBd = unavailTotalBd.add(farmerDayageWeight.getWeight().multiply(new BigDecimal(pigPrice)).setScale(2, BigDecimal.ROUND_HALF_UP));
+                            break;
+                        }
+                    }
+                }
+            }
+            //--保存生物资产
+            saveFarmerAsset(farmerId, year, month, availTotalBd, unavailTotalBd);
+        }else{
+            saveFarmerAsset(farmerId, year, month, new BigDecimal(0), new BigDecimal(0));
         }
+    }
 
-
-//        System.out.println("deviceCodeList.size="+deviceCodeList.size());
-//        for(int a=0;a<deviceCodeList.size();a++)
-//        {
-//            System.out.println(""+deviceCodeList.get(a)+"");
-//        }
+    //--保存生物资产
+    private void saveFarmerAsset(Integer farmerId, String year, String month, BigDecimal availTotalBd, BigDecimal unavailTotalBd) {
+        //--
+        FarmerAsset farmerAsset = farmerAssetMapper.getAssetByFarmerIdAndYearAndMonth(farmerId, year, month);
+        if (farmerAsset == null) {
+            FarmerAsset farmerAssetEntity = new FarmerAsset();
+            farmerAssetEntity.setFarmCode(String.valueOf(farmerId));
+            farmerAssetEntity.setYear(Integer.parseInt(year));
+            farmerAssetEntity.setMonth(Integer.parseInt(month));
+            farmerAssetEntity.setAvailAsset(availTotalBd);
+            farmerAssetEntity.setUnavailAsset(unavailTotalBd);
+            farmerAssetMapper.insert(farmerAssetEntity);
+        } else {
+            farmerAsset.setAvailAsset(availTotalBd);
+            farmerAsset.setUnavailAsset(unavailTotalBd);
+            farmerAssetMapper.updateById(farmerAsset);
+        }
     }
 }

+ 0 - 3
huimv-eartag2-platform/huimv-eartag2-manage2/src/main/java/com/huimv/eartag2/manage2/service/impl/FarmerAssetServiceImpl.java

@@ -113,7 +113,6 @@ public class FarmerAssetServiceImpl extends ServiceImpl<FarmerAssetMapper, Farme
     private JSONObject _getlastBatchAdoptPig(String deviceCode) throws ParseException {
         //{获取最后一条记录create_date日期}
         Date createDate = eartagEartagRegister2Mapper.getLastBatchCreateDate(deviceCode);
-        System.out.println("createDate="+createDate);
         if(createDate == null){
             log.error("该采集器["+deviceCode+"]没有耳标注册数据.");
             return null;
@@ -123,11 +122,9 @@ public class FarmerAssetServiceImpl extends ServiceImpl<FarmerAssetMapper, Farme
             if(eartagEartagRegister2List.size()>0){
                 long diff = dateUtil.getTodayDate().getTime()-createDate.getTime();
                 long days = diff / (1000 * 60 * 60 * 24);
-                System.out.println("days="+days);
                 //读取重量
                 BigDecimal weightBd = farmerAssetMapper.getPigWeightByDayage(days);
                 BigDecimal planValue = weightBd.multiply(new BigDecimal(pigPrice)).multiply(new BigDecimal(eartagEartagRegister2List.size())).setScale(2,BigDecimal.ROUND_HALF_UP);
-                System.out.println("planValue="+planValue);
                 JSONObject outJo = new JSONObject();
                 outJo.put("adoptTime",dateUtil.formatDateText(createDate));
                 outJo.put("husbandryTime",days);

+ 16 - 2
huimv-eartag2-platform/huimv-eartag2-manage2/src/test/java/com/huimv/eartag2/manage2/service/IEartagServiceTest.java

@@ -1,5 +1,6 @@
 package com.huimv.eartag2.manage2.service;
 
+import com.huimv.eartag2.common.utils.DateUtil;
 import com.huimv.eartag2.manage2.service.impl.EartagServiceImpl;
 import com.huimv.eartag2.manage2.service.impl.FarmerAssetServiceImpl;
 import org.junit.Test;
@@ -9,8 +10,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import java.text.ParseException;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
 
 /**
  * @Project : huimv.shiwan
@@ -40,4 +40,18 @@ public class IEartagServiceTest {
         map.put("farmerId","6");
         farmerAssetService.getAssetStatistics(map);
     }
+
+    @Test
+    public void test3() throws ParseException {
+        Date date=new Date();//取时间
+        Calendar calendar = new GregorianCalendar();
+        calendar.setTime(date);
+        calendar.add(calendar.DATE,-185);//把日期往后增加一天.整数往后推,负数往前移动
+        date = calendar.getTime();
+        DateUtil dateUtil = new DateUtil();
+        String d1 = dateUtil.formatDateText(calendar.getTime());
+        System.out.println("d1="+d1);
+
+
+    }
 }