Selaa lähdekoodia

生物防控人员

523096025 1 vuosi sitten
vanhempi
commit
ecd71dfa81

+ 1 - 0
huimv-admin/pom.xml

@@ -177,6 +177,7 @@
         </dependency>
 
 
+
     </dependencies>
         <build>
             <plugins>

+ 1 - 1
huimv-admin/src/main/java/com/huimv/admin/config/JWTInterceptor.java

@@ -17,7 +17,7 @@ import java.util.Map;
  * <p>
  * jwt拦截器
  * </p>
- *
+ *wo
  * @since 2021/4/19
  */
 public class JWTInterceptor implements HandlerInterceptor {

+ 20 - 0
huimv-admin/src/main/java/com/huimv/admin/controller/ProdStockController.java

@@ -56,6 +56,26 @@ public class ProdStockController {
         return prodStockService.listStockScreen(httpServletRequest,paramsMap);
     }
 
+    @RequestMapping("/listStockScreenHenglu")
+    public Result listStockScreenHenglu(HttpServletRequest httpServletRequest, @RequestBody Map<String, String> paramsMap) {
+        return prodStockService.listStockScreenHenglu(httpServletRequest,paramsMap);
+    }
+    @RequestMapping("/listStockScreenHengluDay")
+    public Result listStockScreenHengluDay(HttpServletRequest httpServletRequest, @RequestBody Map<String, String> paramsMap) {
+        return prodStockService.listStockScreenHengluDay(httpServletRequest,paramsMap);
+    }
+
+    @RequestMapping("/listStockScreenHengluYear")
+    public Result listStockScreenHengluYear(HttpServletRequest httpServletRequest, @RequestBody Map<String, String> paramsMap) {
+        return prodStockService.listStockScreenHengluYear(httpServletRequest,paramsMap);
+    }
+
+    @RequestMapping("/listWarning")
+    public Result listWarning(HttpServletRequest httpServletRequest, @RequestBody Map<String, String> paramsMap) {
+        return prodStockService.listWarning(httpServletRequest,paramsMap);
+    }
+
+
     @RequestMapping("/add")
     public Result add(HttpServletRequest httpServletRequest, @RequestBody ProdStockVo2 prodStockVo2) throws ParseException {
         String farmId = prodStockVo2.getFarmId();

+ 21 - 0
huimv-admin/src/main/java/com/huimv/admin/entity/ProdStock.java

@@ -108,5 +108,26 @@ public class ProdStock implements Serializable {
 
     private String other3;
 
+    private Integer dong1;
+    private Integer dong2;
+    private Integer dong3;
+    private Integer dong4;
+
+    private Integer outPig;
+    private Integer inPig;
+    private Integer monthOutPig;
+    private Integer monthInPig;
+    private Integer yearOutPig;
+    private Integer yearInPig;
+    private Integer siPig;
+    private String cheng;
+
+    private Integer yfcz;
+    private Integer inpigcz;
+    private Integer outpigcz;
+    private Integer zryf;
+    private Integer zrinpig;
+    private Integer zroutpig;
+
 
 }

+ 1 - 1
huimv-admin/src/main/java/com/huimv/admin/entity/zengxindto/StockLoginDto.java

@@ -10,7 +10,7 @@ public class StockLoginDto {
     private String message;
     private String token;
     private String expireTime;
-    private String appSecret;
+    private String app_secret;
     private Integer dbAccessMode;
     private Boolean checkSign;
 }

+ 5 - 0
huimv-admin/src/main/java/com/huimv/admin/mapper/ProdStockMapper.java

@@ -1,5 +1,6 @@
 package com.huimv.admin.mapper;
 
+import cn.hutool.core.date.DateTime;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.huimv.admin.entity.ProdStock;
@@ -18,4 +19,8 @@ import java.util.List;
  */
 public interface ProdStockMapper extends BaseMapper<ProdStock> {
     List<ProdStock> listDay(@Param(Constants.WRAPPER) QueryWrapper<ProdStock> queryWrapper);
+
+    Integer sumInPig(@Param("farmId") Integer farmId, @Param("beginDate") String beginDate);
+
+    Integer sumOutPig(@Param("farmId") Integer farmId, @Param("beginDate") String beginDate,@Param("endDate") String endDate);
 }

+ 14 - 0
huimv-admin/src/main/java/com/huimv/admin/service/IProdStockService.java

@@ -1,5 +1,6 @@
 package com.huimv.admin.service;
 
+import cn.hutool.core.date.DateTime;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.huimv.admin.common.utils.Result;
@@ -25,4 +26,17 @@ public interface IProdStockService extends IService<ProdStock> {
     Result listStockScreen(HttpServletRequest httpServletRequest,Map<String,String> paramaMap);
 
     Result add(HttpServletRequest httpServletRequest, ProdStock prodStock);
+
+    Result listStockScreenHenglu(HttpServletRequest httpServletRequest, Map<String, String> paramsMap);
+
+    Integer sumInPig(Integer farmId, DateTime beginOfMonth);
+
+    Integer sumOutPig(Integer farmId, DateTime beginOfMonth,DateTime endTime);
+
+
+    Result listStockScreenHengluDay(HttpServletRequest httpServletRequest, Map<String, String> paramsMap);
+
+    Result listStockScreenHengluYear(HttpServletRequest httpServletRequest, Map<String, String> paramsMap);
+
+    Result listWarning(HttpServletRequest httpServletRequest, Map<String, String> paramsMap);
 }

+ 3 - 0
huimv-admin/src/main/java/com/huimv/admin/service/impl/CameraBaseServiceImpl.java

@@ -272,6 +272,9 @@ public class CameraBaseServiceImpl extends ServiceImpl<CameraBaseMapper, CameraB
         return s;
     }
 
+    public static void main(String[] args) {
+
+    }
     /* *//**
      * 查询结果 转换成树形结构
      * @param bizBaseAreas 原始数据

+ 113 - 10
huimv-admin/src/main/java/com/huimv/admin/service/impl/ProdStockServiceImpl.java

@@ -7,16 +7,13 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.huimv.admin.common.utils.DataUill;
 import com.huimv.admin.common.utils.Result;
 import com.huimv.admin.common.utils.ResultCode;
-import com.huimv.admin.entity.ProdProduction;
-import com.huimv.admin.entity.ProdSale;
-import com.huimv.admin.entity.ProdStock;
+import com.huimv.admin.entity.*;
 import com.huimv.admin.entity.vo.ProdStockVo;
-import com.huimv.admin.mapper.ProdProductionMapper;
-import com.huimv.admin.mapper.ProdSaleMapper;
-import com.huimv.admin.mapper.ProdStockMapper;
+import com.huimv.admin.mapper.*;
 import com.huimv.admin.service.IProdStockService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import netscape.javascript.JSObject;
@@ -27,10 +24,7 @@ import org.springframework.stereotype.Service;
 import javax.servlet.http.HttpServletRequest;
 import java.text.NumberFormat;
 import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * <p>
@@ -49,7 +43,14 @@ public class ProdStockServiceImpl extends ServiceImpl<ProdStockMapper, ProdStock
     private ProdProductionMapper productionMapper;
     @Autowired
     private ProdSaleMapper saleMapper;
+    @Autowired
+    private ProdCountMapper prodCountMapper;
+
+    @Autowired
+    private ProdYearOutPigMapper prodYearOutPigMapper;
 
+    @Autowired
+    private ProdWarningInfoMapper prodWarningInfoMapper;
 
     @Override
     public Result list(HttpServletRequest httpServletRequest, Map<String, String> paramsMap) {
@@ -201,4 +202,106 @@ public class ProdStockServiceImpl extends ServiceImpl<ProdStockMapper, ProdStock
         prodStockMapper.insert(prodStock);
         return Result.SUCCESS();
     }
+
+    @Override
+    public Result listStockScreenHenglu(HttpServletRequest httpServletRequest, Map<String, String> paramsMap) {
+
+        String farmId = paramsMap.get("farmId");
+        String displayType = paramsMap.get("displayType");
+        if (StringUtils.isBlank(displayType)){
+            displayType = "0";
+        }
+        DateTime dateTime = DateUtil.offsetDay(new Date(), -8);
+
+        List<ProdStock> prodStocks = prodStockMapper.selectList(new QueryWrapper<ProdStock>().eq("farm_id", farmId).eq("display_type", displayType).ge("creat_time", dateTime).orderByDesc("creat_time"));
+        ProdStock prodStock = prodStocks.get(0);
+        Map endMap = new HashMap();
+        endMap.put("CLBD",prodStocks);
+        endMap.put("MCCL",prodStock);
+        ProdCount farm_id = prodCountMapper.selectOne(new QueryWrapper<ProdCount>().eq("farm_id", farmId));
+        Map sjtjMap = new HashMap();
+        sjtjMap.put("CLCH",100);
+        sjtjMap.put("YFCH",100);
+        sjtjMap.put("MRWLL",1.50);
+        sjtjMap.put("RZZ",731);
+        if (ObjectUtil.isNotEmpty(farm_id)){
+            sjtjMap.put("CLCH",prodStock.getCheng());
+            sjtjMap.put("YFCH",farm_id.getYfchl());
+            sjtjMap.put("MRWLL",farm_id.getMrwll());
+            sjtjMap.put("RZZ",farm_id.getRzz());
+        }
+        endMap.put("SJTJ",sjtjMap);
+
+        Map zjjMap = new HashMap();
+        zjjMap.put("BNLJ",0);
+        zjjMap.put("YFCL",0);
+        zjjMap.put("JRCL",0);
+        zjjMap.put("JRJZ",0);
+        if (ObjectUtil.isNotEmpty(prodStock)){
+            zjjMap.put("BNLJ",prodStock.getYearOutPig());
+            zjjMap.put("YFCL",prodStock.getYfzcl());
+            zjjMap.put("JRCL",prodStock.getOutPig());
+            zjjMap.put("JRJZ",prodStock.getInPig());
+        }
+
+        return new Result(ResultCode.SUCCESS,endMap);
+    }
+
+    @Override
+    public Integer sumInPig(Integer farmId, DateTime beginOfMonth) {
+        return  prodStockMapper.sumInPig(farmId,beginOfMonth.toString().substring(0,10));
+    }
+
+    @Override
+    public Integer sumOutPig(Integer farmId, DateTime beginOfMonth,DateTime endTime) {
+        return  prodStockMapper.sumOutPig(farmId,beginOfMonth.toString().substring(0,10),endTime.toString().substring(0,10));
+    }
+
+    @Override
+    public Result listStockScreenHengluDay(HttpServletRequest httpServletRequest, Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        String displayType = paramsMap.get("displayType");
+        String pageNum = paramsMap.get("pageNum");
+        String pageSize = paramsMap.get("pageSize");
+        if ("".equals(pageNum) || null == pageNum) {
+            pageNum = "1";
+        }
+        if ("".equals(pageSize) || null == pageSize) {
+            pageSize = "10";
+        }
+        if (StringUtils.isBlank(displayType)){
+            displayType = "0";
+        }
+        Page<ProdStock> page = new Page<>(Integer.parseInt(pageNum), Integer.parseInt(pageSize));
+
+        return new Result(ResultCode.SUCCESS,this.page(page,new QueryWrapper<ProdStock>().eq("farm_id",farmId).eq("display_type",displayType).orderByDesc("creat_time")));
+    }
+
+    @Override
+    public Result listStockScreenHengluYear(HttpServletRequest httpServletRequest, Map<String, String> paramsMap) {
+
+        String farmId = paramsMap.get("farmId");
+        String displayType = paramsMap.get("displayType");
+        String pageNum = paramsMap.get("pageNum");
+        String pageSize = paramsMap.get("pageSize");
+        if ("".equals(pageNum) || null == pageNum) {
+            pageNum = "1";
+        }
+        if ("".equals(pageSize) || null == pageSize) {
+            pageSize = "10";
+        }
+
+        Page<ProdYearOutPig> page = new Page<>(Integer.parseInt(pageNum), Integer.parseInt(pageSize));
+        return new Result(ResultCode.SUCCESS,prodYearOutPigMapper.selectPage(page,new QueryWrapper<ProdYearOutPig>().eq("farm_id",farmId).orderByDesc("creat_time")));
+    }
+
+    @Override
+    public Result listWarning(HttpServletRequest httpServletRequest, Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        List<ProdWarningInfo> prodWarningInfos = prodWarningInfoMapper.selectList(new QueryWrapper<ProdWarningInfo>().eq("farm_id", farmId).ge("date", DateUtil.offsetDay(new Date(), -8)).orderByDesc("date"));
+
+        return new Result(ResultCode.SUCCESS,prodWarningInfos);
+    }
+
+
 }

+ 391 - 48
huimv-admin/src/main/java/com/huimv/admin/timer/ShenChanTimer.java

@@ -1,34 +1,42 @@
 package com.huimv.admin.timer;
 
 
-import cn.hutool.core.codec.Base64;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.huimv.admin.common.utils.Digests;
-import com.huimv.admin.common.utils.HttpClientSSLUtils;
 import com.huimv.admin.entity.*;
 import com.huimv.admin.entity.zengxindto.*;
 import com.huimv.admin.service.*;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.http.*;
 import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.client.RestTemplate;
 
+
+import javax.crypto.Mac;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
+import java.io.IOException;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.security.GeneralSecurityException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.text.DecimalFormat;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 
-@Configuration
 @EnableScheduling
+@RestController
+@RequestMapping("/test")
 public class ShenChanTimer {
 
     //生产数据
@@ -36,82 +44,287 @@ public class ShenChanTimer {
     private RestTemplate restTemplate;
     @Autowired
     private IProdStockService prodStockService;
+    @Autowired
+    private IProdSaleService prodSaleService;
+
+    @Autowired
+    private IProdYearOutPigService prodYearOutPigService;
+
+    @Autowired
+    private IProdMonthOutPigService prodMonthOutPigService;
+    @Autowired
+    private IProdWarningInfoService prodWarningInfoService;
+
 
 
-//    @Scheduled(cron = "0 0 */4 * * ? ")
-    @Scheduled(cron = "0 0 * * * ?")
-//    @GetMapping("/test")
-    private void getShenChan() throws Exception {
-        String token = login();
-        DateTime dateTime = DateUtil.beginOfDay(new Date());
-        String data =   getList(token);
+    //    @Scheduled(cron = "0 * * * * ? ")
+//    @Scheduled(cron = "1 0 * * * ?")
+    @GetMapping("/test")
+    @Transactional
+    public void getShenChan() throws Exception {
+        StockLoginDto stockLoginDto = login();
+//        DateTime dateTime = DateUtil.beginOfDay(new Date());
+        String data =   getList(stockLoginDto.getToken(),stockLoginDto.getApp_secret());
         ProdStockDto prodStockDto = JSONUtil.toBean(data, ProdStockDto.class);
         List<List<Object>> stockData = prodStockDto.getData();
+        DateTime beginOfYear = DateUtil.beginOfYear(DateUtil.offsetMonth(new Date(), -10));
+        System.out.println(beginOfYear);
+        for (int i = 0; i < 390; i++) {
+            DateTime dateTime = DateUtil.offsetDay(beginOfYear, i);
+            System.out.println("dateTime--"+dateTime);
 
         for (List stock : stockData) {
+            System.out.println("stock -->"+stock);
             switch (stock.get(0).toString()) {
                 case "正康":
-                    saveProdStrok(21,stock,dateTime);
+                    saveProdStrok(stockLoginDto,21,stock,dateTime);
                     break;
                 case "东阳":
-                    saveProdStrok(24,stock,dateTime);
+                    saveProdStrok(stockLoginDto,24,stock,dateTime);
                     break;
                 case "浦江":
-                    saveProdStrok(23,stock,dateTime);
+                    saveProdStrok(stockLoginDto,23,stock,dateTime);
                     break;
                 case "横路":
-                    saveProdStrok(26,stock,dateTime);
+                    saveProdStrok(stockLoginDto,26,stock,dateTime);
                     break;
                 case "天台":
-                    saveProdStrok(27,stock,dateTime);
+                    saveProdStrok(stockLoginDto,27,stock,dateTime);
                     break;
                 case "平望":
-                    saveProdStrok(28,stock,dateTime);
+                    saveProdStrok(stockLoginDto,28,stock,dateTime);
                     break;
                 case "张村":
-                    saveProdStrok(29,stock,dateTime);
+                    saveProdStrok(stockLoginDto,29,stock,dateTime);
+                    break;
+
+                case "三亩田":
+                    break;
+                case "下各":
+                    break;
+                case "瓦窑头":
+                    break;
+                case "莲花":
+                    break;
+                case "里塘":
+                    break;
+                case "苍坑":
+                    break;
+                case "同壮":
+                    break;
+                case "瑞溪":
                     break;
                 default:
                     break;
             }
         }
+        }
     }
+
     //保存存栏
-    private void saveProdStrok(Integer farmId,List stock,DateTime dateTime) {
+    private void saveProdStrok(StockLoginDto stockLoginDto,Integer farmId,List stock,DateTime dateTime) throws Exception {
+
         ProdStock prodStock = prodStockService.getOne(new QueryWrapper<ProdStock>().ge("creat_time", dateTime).eq("farm_id", farmId).orderByDesc("creat_time").last("limit 1"));
         Boolean isNew = false;
         if(ObjectUtil.isEmpty(prodStock)){
             prodStock = new ProdStock();
              isNew = true;
         }
-        prodStock.setHbzcl(Integer.parseInt(stock.get(3).toString()));
-        prodStock.setGzcl(Integer.parseInt(stock.get(4).toString()));
-        prodStock.setKhzcl(Integer.parseInt(stock.get(6).toString()));
+         List<Integer> list = new ArrayList<>();
+        for (int i = 1; i < 17; i++) {
+            list.add(getInt(stock.get(i)));
+        }
+        Integer ZCL = list.get(15);
+
+
+        //后备猪
+        prodStock.setHbzcl(list.get(2));
+        //公猪存栏  后备公猪+种公猪
+        prodStock.setGzcl(list.get(2)+list.get(0));
+        //空怀
+        prodStock.setKhzcl(list.get(5));
+        //仔猪
+        prodStock.setZzcl(list.get(11));
+        //保育猪存栏
+        prodStock.setByzcl(list.get(12));
+        //育肥猪存栏
+        Integer yfzcl = list.get(14);
+
+        prodStock.setYfzcl(yfzcl);
+        //总存栏
+        prodStock.setZcl(ZCL);
+        //母猪存栏  后备母猪+怀孕+空怀+流产+返情+分娩+断奶
+        prodStock.setMzcl(list.get(1)+list.get(4)+list.get(5)+list.get(6)+list.get(7)+list.get(8)+list.get(9));
+        //哺乳猪存栏   仔猪
+        prodStock.setBrzcl(list.get(11));
+        //妊娠猪存栏 ->分娩
+        prodStock.setRszcl(list.get(8));
+        //妊娠猪存栏 ->断奶
+        prodStock.setBrmzcl(list.get(9));
+        //商品猪存栏  保育猪+育肥猪
+        prodStock.setSpzcl(list.get(12)+list.get(13));
+        prodStock.setDong3(0);
+        prodStock.setDong4(0);
+        if ( ZCL<15000){
+            Integer dong1 = ZCL /3;
+            prodStock.setDong1(dong1);
+            prodStock.setDong2(ZCL -dong1);
+        }else {
+            Integer dong1 = 14931 /6;
+            Integer dong2 = 14931 /4;
+            Integer dong3 = 14931 /5;
+            prodStock.setDong1(dong1);
+            prodStock.setDong2(dong2);
+            prodStock.setDong3(dong3);
+            prodStock.setDong4(ZCL -dong1  -dong2 -dong3);
+        }
+
+        String jinZhudata =   getListJz(stockLoginDto.getToken(),stockLoginDto.getApp_secret(),"rep_yz_hm_jc",dateTime);
+        ProdStockDto jz2 = JSONUtil.toBean(jinZhudata, ProdStockDto.class);
+
+        String sw =   getListJz(stockLoginDto.getToken(),stockLoginDto.getApp_secret(),"rep_yz_hm_sw",dateTime);
+        ProdStockDto sw2 = JSONUtil.toBean(sw, ProdStockDto.class);
+
+        String xs =   getListJz(stockLoginDto.getToken(),stockLoginDto.getApp_secret(),"rep_yz_hm_xs",dateTime);
+        ProdStockDto xs2 = JSONUtil.toBean(xs, ProdStockDto.class);
+
+        List<List<Object>> jzdata = jz2.getData();
+        List<List<Object>> swdata = sw2.getData();
+        List<List<Object>> sxdata = xs2.getData();
+        Integer intjz = ObjectUtil.isEmpty(jzdata) ? 0:Integer.parseInt(jzdata.get(0).get(3).toString());
+        Integer intsw = ObjectUtil.isEmpty(swdata) ? 0:Integer.parseInt(swdata.get(0).get(3).toString());
+        Integer intsx = ObjectUtil.isEmpty(sxdata) ? 0:Integer.parseInt(sxdata.get(0).get(3).toString());
+
+        prodStock.setOutPig(intsw+intsx);
+        prodStock.setInPig(intjz);
+        DateTime beginOfMonth = DateUtil.beginOfMonth(dateTime);
+        DateTime beginOfYear = DateUtil.beginOfYear(dateTime);
+        Integer monthInPig = prodStockService.sumInPig(farmId,beginOfMonth);
+        Integer monthOutPig =  prodStockService.sumOutPig(farmId,beginOfMonth,DateUtil.endOfMonth(dateTime));
+        Integer yearInPig = prodStockService.sumInPig(farmId,beginOfYear);
+        Integer yearOutPig =  prodStockService.sumOutPig(farmId,beginOfYear,DateUtil.endOfYear(dateTime));
+        prodStock.setMonthInPig(monthInPig);
+        prodStock.setMonthOutPig(monthOutPig);
+        prodStock.setYearInPig(yearInPig);
+        prodStock.setYearOutPig(yearOutPig);
+        prodStock.setSiPig(intsw);
+        DecimalFormat df = new DecimalFormat("#.##");
+
+        double percentage = calculatePercentage(ZCL-intsw, ZCL);
+        prodStock.setCheng(df.format(percentage));
+        DateTime dateTime1 = DateUtil.offsetDay(dateTime, -1);
+        ProdStock prodStockZr = prodStockService.getOne(new QueryWrapper<ProdStock>().between("creat_time",dateTime1 ,dateTime).eq("farm_id", farmId).orderByDesc("creat_time").last("limit 1"));
+        Integer zryf = 0;
+        Integer zrInpig = 0;
+        Integer zrOntpig = 0;
+        if (ObjectUtil.isNotEmpty(prodStockZr)){
+            zryf = prodStockZr.getYfzcl();
+            zrInpig = prodStockZr.getInPig();
+            zrOntpig = prodStockZr.getOutPig();
+        }
+        if (ObjectUtil.isEmpty(yfzcl)){
+            yfzcl = 0;
+        }
+        prodStock.setYfcz(yfzcl-zryf);
+        prodStock.setInpigcz(intjz- zrInpig);
+        prodStock.setOutpigcz(intsw+intsx-zrOntpig);
+        prodStock.setZryf(zryf);
+        prodStock.setZrinpig(zrInpig);
+        prodStock.setZroutpig(zrOntpig);
 
-        prodStock.setZzcl(Integer.parseInt(stock.get(12).toString()));
-        prodStock.setByzcl(Integer.parseInt(stock.get(13).toString()));
-        prodStock.setYfzcl(Integer.parseInt(stock.get(15).toString()));
-        prodStock.setZcl(Integer.parseInt(stock.get(16).toString()));
 
         if (isNew) {
-            prodStock.setMzcl(100);
-            prodStock.setBrzcl(452);
-            prodStock.setRszcl(30);
-            prodStock.setBrmzcl(20);
-            prodStock.setSpzcl(1020);
-            prodStock.setCreatTime(new Date());
+            prodStock.setCreatTime(dateTime);
             prodStock.setDisplayType(0);
             prodStock.setFarmId(farmId);
             prodStockService.save(prodStock);
         } else {
-
             prodStockService.updateById(prodStock);
         }
+        //本月出栏
+        ProdMonthOutPig prodMonthOutPig = prodMonthOutPigService.getOne(new QueryWrapper<ProdMonthOutPig>().ge("date_time",beginOfMonth ).eq("farm_id", farmId).orderByDesc("date_time").last("limit 1"));
+
+        Integer zyOutPig = prodStockService.sumOutPig(farmId, DateUtil.offsetMonth(beginOfMonth, -1), beginOfMonth);
+        if (ObjectUtil.isEmpty(prodMonthOutPig)){
+            prodMonthOutPig = new ProdMonthOutPig();
+            prodMonthOutPig.setDateTime(beginOfMonth);
+            prodMonthOutPig.setFarmId(farmId);
+            prodMonthOutPig.setOutPig(monthOutPig);
+            prodMonthOutPig.setOutPigCz(monthOutPig -zyOutPig);
+            prodMonthOutPig.setZrPig(zyOutPig);
+            prodMonthOutPigService.save(prodMonthOutPig);
+        }else {
+            prodMonthOutPig.setOutPig(monthOutPig);
+            prodMonthOutPig.setOutPigCz(monthOutPig -zyOutPig);
+            prodMonthOutPig.setZrPig(zyOutPig);
+            prodMonthOutPigService.updateById(prodMonthOutPig);
+        }
+
+
+        //本年出栏
+        ProdYearOutPig prodYearOutPig = prodYearOutPigService.getOne(new QueryWrapper<ProdYearOutPig>().ge("date_time", beginOfYear).eq("farm_id", farmId).orderByDesc("date_time").last("limit 1"));
+
+        Integer zYearOutPig = prodStockService.sumOutPig(farmId, DateUtil.offsetMonth(beginOfYear, -12), beginOfYear);
+        if (ObjectUtil.isEmpty(prodYearOutPig)){
+            prodYearOutPig  = new ProdYearOutPig();
+            prodYearOutPig.setDateTime(beginOfYear);
+            prodYearOutPig.setFarmId(farmId);
+            prodYearOutPig.setOutPig(yearOutPig);
+            prodYearOutPig.setOutPigCz(yearOutPig -zYearOutPig);
+            prodYearOutPig.setZrPig(zyOutPig);
+            prodYearOutPigService.save(prodYearOutPig);
+        }else {
+            prodYearOutPig.setOutPig(yearOutPig);
+            prodYearOutPig.setOutPigCz(yearOutPig -zYearOutPig);
+            prodYearOutPig.setZrPig(zyOutPig);
+            prodYearOutPigService.updateById(prodYearOutPig);
+        }
+
+        //预警
+        ProdWarningInfo prodWarningInfo = prodWarningInfoService.getOne(new QueryWrapper<ProdWarningInfo>().ge("date", dateTime).eq("farm_id", farmId).orderByDesc("date").last("limit 1"));
+        if (ObjectUtil.isEmpty(prodWarningInfo)){
+            prodWarningInfo  = new ProdWarningInfo();
+
+            prodWarningInfo.setDate( LocalDateTime.now());
+            prodWarningInfo.setFarmId(farmId);
+            prodWarningInfo.setWarningContent("今日淘汰"+intsw+"头猪");
+            prodWarningInfo.setWarningType(1);
+            prodWarningInfoService.save(prodWarningInfo);
+        }else {
+            prodWarningInfo.setWarningContent("今日淘汰"+intsw+"头猪");
+            prodYearOutPigService.updateById(prodYearOutPig);
+        }
+
+
+        //销售
+        ProdSale one = prodSaleService.getOne(new QueryWrapper<ProdSale>().ge("creat_time", dateTime).eq("farm_id", farmId).orderByDesc("creat_time").last("limit 1"));
+        if(ObjectUtil.isEmpty(one)){
+            one = new ProdSale();
+            one.setCreatTime(dateTime);
+            one.setDisplayType(0);
+            one.setFarmId(farmId);
+            one.setSaleMoney("0");
+            one.setSaleQuantity(intsx);
+            prodSaleService.save(one);
+        }else {
+            one.setSaleQuantity(intsx);
+            prodSaleService.updateById(one);
+        }
 
     }
 
-    //获取数据
-    private String getList(String token) throws Exception {
+    public static double calculatePercentage(double part, double whole) {
+
+        return (part / whole) * 100;
+
+    }
+    private Integer getInt(Object o) {
+        return ObjectUtil.isEmpty(o) ? 0:Integer.parseInt(o.toString());
+    }
+
+    //获取数据 生猪数据
+    private String getList(String token,String secret) throws Exception {
+
         String time = LocalDate.now().toString();
         String url = "http://test.htpig.cn/rest/db/storedproc";
         Map<String, Object> map = new HashMap<String, Object>();
@@ -125,41 +338,171 @@ public class ShenChanTimer {
         list.add(maps);
         map.put("params", list);
         String params = JSON.toJSONString(map);
-        String data = HttpClientSSLUtils.doPost(url + "?token=" + token + "&data=", params);
-        return data;
+
+        LocalDateTime timestamp = LocalDateTime.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        // 格式化日期时间为字符串
+        String formattedDateTime = timestamp.format(formatter);
+        Map<String,String> tokenMap = new HashMap<>();
+
+        tokenMap.put("token",token);
+        tokenMap.put("data",params);
+        tokenMap.put("sign_method","md5");
+        tokenMap.put("timestamp",formattedDateTime);
+        tokenMap.put("version","2.0");
+        String sign = signTopRequest(tokenMap, secret, "md5");
+        tokenMap.put("sign",sign);
+        String url1 = url + "?token=" + token + "&sign_method=md5" + "&timestamp=" + formattedDateTime + "&version=2.0" + "&sign=" + sign + "&data={data}" ;
+        String forObject = restTemplate.getForObject(url1 , String.class,params);
+        ProdStockDto prodStockDto = JSONUtil.toBean(forObject, ProdStockDto.class);
+
+        return forObject;
+
+    }
+
+    //获取数据 进猪数据
+    private String getListJz(String token,String secret,String proc_name,DateTime dateTime) throws Exception {
+        String time1 = LocalDate.now().toString();
+        String time2 = LocalDate.now().toString();
+        String url = "http://test.htpig.cn/rest/db/storedproc";
+        Map<String, Object> map = new HashMap<String, Object>();
+        map.put("db_name", "MSSQL");
+        map.put("proc_name", proc_name);
+        map.put("method", "open_proc");
+        List list = new ArrayList();
+        HashMap<String, Object> maps = new HashMap<>();
+        maps.put("name", "@fdate1");
+        maps.put("value", dateTime.toString().substring(0,10));
+        HashMap<String, Object> maps2 = new HashMap<>();
+        maps2.put("name", "@fdate2");
+        maps2.put("value", dateTime.toString().substring(0,10));
+        list.add(maps);
+        list.add(maps2);
+        map.put("params", list);
+        String params = JSON.toJSONString(map);
+
+        LocalDateTime timestamp = LocalDateTime.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        // 格式化日期时间为字符串
+        String formattedDateTime = timestamp.format(formatter);
+        Map<String,String> tokenMap = new HashMap<>();
+
+        tokenMap.put("token",token);
+        tokenMap.put("data",params);
+        tokenMap.put("sign_method","md5");
+        tokenMap.put("timestamp",formattedDateTime);
+        tokenMap.put("version","2.0");
+        String sign = signTopRequest(tokenMap, secret, "md5");
+        tokenMap.put("sign",sign);
+        String url1 = url + "?token=" + token + "&sign_method=md5" + "&timestamp=" + formattedDateTime + "&version=2.0" + "&sign=" + sign + "&data={data}" ;
+        String forObject = restTemplate.getForObject(url1 , String.class,params);
+        return forObject;
 
     }
 
 
+
+
+
     public static void main(String[] args) throws Exception {
+
         RestTemplate restTemplate = new RestTemplate();
         StockLoginDto stockLoginDto = restTemplate.getForObject("http://test.htpig.cn/rest/user/login?user_name=test&password=e10adc3949ba59abbe56e057f20f883e&db_name=MSSQL", StockLoginDto.class);
         String token = stockLoginDto.getToken();
+        String secret = stockLoginDto.getApp_secret();
+
         String time = LocalDate.now().toString();
         String url = "http://test.htpig.cn/rest/db/storedproc";
         Map<String, Object> map = new HashMap<String, Object>();
         map.put("db_name", "MSSQL");
         map.put("proc_name", "rep_yz_kc_hz");
         map.put("method", "open_proc");
+
         HashMap<String, Object> maps = new HashMap<>();
         List list = new ArrayList();
         maps.put("name", "@fdate");
         maps.put("value", time);
         list.add(maps);
-
         map.put("params", list);
+
         String params = JSON.toJSONString(map);
-        System.out.println(" ====== getStock请求参数:【" + params + "】");
-        String data = HttpClientSSLUtils.doPost(url + "?token=" + token + "&data=", params);
-        ProdStockDto prodStockDto = JSONUtil.toBean(data, ProdStockDto.class);
+        LocalDateTime timestamp = LocalDateTime.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        // 格式化日期时间为字符串
+        String formattedDateTime = timestamp.format(formatter);
+        Map<String,String> tokenMap = new HashMap<>();
+
+        tokenMap.put("token",token);
+        tokenMap.put("data",params);
+        tokenMap.put("sign_method","md5");
+        tokenMap.put("timestamp",formattedDateTime);
+        tokenMap.put("version","2.0");
+        String sign = signTopRequest(tokenMap, secret, "md5");
+        tokenMap.put("sign",sign);
+        formattedDateTime.replace(" ","%20");
+        String url1 = url + "?token=" + token + "&sign_method=md5" + "&timestamp=" + formattedDateTime + "&version=2.0" + "&sign=" + sign + "&data={data}" ;
+        System.out.println(url1);
+//        String data = HttpClientSSLUtils.doPost(url1,JSON.toJSONString(params));
+        RestTemplate restTemplate1 = new RestTemplate();
+
+        String forObject = restTemplate.getForObject(url1 , String.class,params);
+        ProdStockDto prodStockDto = JSONUtil.toBean(forObject, ProdStockDto.class);
+        System.out.println(prodStockDto);
     }
+    public static String signTopRequest(Map<String, String> params, String secret, String signMethod) throws IOException {
+        // 第一步:检查参数是否已经排序
+        String[] keys = params.keySet().toArray(new String[0]);
+        Arrays.sort(keys);
+
+        // 第二步:把所有参数名和参数值串在一起
+        StringBuilder query = new StringBuilder();
+        query.append(secret);
+        for (String key : keys) {
+            String value = params.get(key);
+            query.append(key).append(value);
+        }
+        query.append(secret);
+
+        // 第三步:使用MD5/HMAC加密
+        byte[] bytes;
+
+        bytes = encryptMD5(query.toString());
 
-    private  String login() throws Exception {
+        // 第四步:把二进制转化为大写的十六进制(正确签名应该为32大写字符串,此方法需要时使用)
+        return byte2hex(bytes);
+    }
+
+
+    public static byte[] encryptMD5(String data) throws IOException {
+        return encryptMD5(data.getBytes("UTF-8"));
+    }
+    public static byte[] encryptMD5(byte[] data) throws IOException {
+        byte[] bytes = null;
+        try {
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            bytes = md.digest(data);
+        } catch (GeneralSecurityException gse) {
+            throw new IOException(gse.toString());
+        }
+        return bytes;
+    }
+
+
+    private  StockLoginDto login() throws Exception {
         StockLoginDto stockLoginDto = restTemplate.getForObject("http://test.htpig.cn/rest/user/login?user_name=test&password=e10adc3949ba59abbe56e057f20f883e&db_name=MSSQL", StockLoginDto.class);
+        System.out.println(stockLoginDto.toString());
         if (stockLoginDto.getStatus() != 0) {
             return null;
         }
-        return stockLoginDto.getToken();
+        return stockLoginDto;
+    }
+
+
+    public static String byte2hex(byte[] bytes) {
+        StringBuilder sign = new StringBuilder();
+        for (int i = 0; i < bytes.length; i++) {
+            String hex = Integer.toHexString(bytes[i] & 0xFF);if (hex.length() == 1) { sign.append("0");
+            }sign.append(hex.toUpperCase()); }return sign.toString();
     }
 
 }

+ 144 - 0
huimv-admin/src/main/java/com/huimv/admin/timer/test.java

@@ -0,0 +1,144 @@
+package com.huimv.admin.timer;
+
+
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
+import com.huimv.admin.entity.zengxindto.ProdStockDto;
+import org.springframework.web.client.RestTemplate;
+
+import java.io.IOException;
+import java.security.GeneralSecurityException;
+import java.security.MessageDigest;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.admin.timer
+ * @Description : TODO
+ * @Author : yuxuexuan
+ * @Create : 2024/1/24 0024 18:16
+ **/
+public class test {
+  /*  public static void main(String[] args) throws IOException {
+        Map<String, String> params = new HashMap();
+        params.put("token","E0FE7EE553814E338A339A7BC43F2D82");
+        params.put("data","{\"db_name\":\"MSSQL\",\"proc_name\":\"rep_yz_kc_hz\",\"method\":\"open_proc\",\"params\":[{\"name\":\"@fdate\",\"value\":\"2024-01-24\"}]}");
+        params.put("sign_method","md5");
+        params.put("timestamp","2024-01-24 19:59:29");
+        params.put("version","2.0");
+        String[] keys =  params.keySet().toArray(new String[0]);
+        Arrays.sort(keys);
+        for (String key : keys) {
+            System.out.println(key);
+        }
+
+        System.out.println(signTopRequest(params, "E911CE7BE0B84208B77DC50CEDA2B3C8", "MD5"));
+
+    }*/
+  public static void main(String[] args) throws IOException {
+      DateTime dateTime = DateUtil.offsetDay(new Date(), -352);
+      String substring = dateTime.toString().substring(0, 10);
+      System.out.println(substring);
+
+      String url = "http://test.htpig.cn/rest/db/storedproc";
+      Map<String, Object> map = new HashMap<String, Object>();
+      map.put("db_name", "MSSQL");
+      map.put("proc_name", "rep_yz_hm_sw");
+      map.put("method", "open_proc");
+      List list = new ArrayList();
+      HashMap<String, Object> maps = new HashMap<>();
+      maps.put("name", "@fdate1");
+      maps.put("value", substring);
+      HashMap<String, Object> maps2 = new HashMap<>();
+      maps2.put("name", "@fdate2");
+      maps2.put("value", substring);
+      list.add(maps);
+      list.add(maps2);
+      map.put("params", list);
+      String params = JSON.toJSONString(map);
+
+      LocalDateTime timestamp = LocalDateTime.now();
+      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+      // 格式化日期时间为字符串
+      String formattedDateTime = timestamp.format(formatter);
+      Map<String,String> tokenMap = new HashMap<>();
+        String token = "36F1C87C390E4F15AE5BAA82996DFB8D";
+        String secret = "E911CE7BE0B84208B77DC50CEDA2B3C8";
+      tokenMap.put("token",token);
+      tokenMap.put("data",params);
+      tokenMap.put("sign_method","md5");
+      tokenMap.put("timestamp",formattedDateTime);
+      tokenMap.put("version","2.0");
+      String sign = signTopRequest(tokenMap, secret, "md5");
+      tokenMap.put("sign",sign);
+      String url1 = url + "?token=" + token + "&sign_method=md5" + "&timestamp=" + formattedDateTime + "&version=2.0" + "&sign=" + sign + "&data={data}" ;
+      RestTemplate restTemplate = new RestTemplate();
+      String forObject = restTemplate.getForObject(url1 , String.class,params);
+
+      ProdStockDto jz2 = JSONUtil.toBean(forObject, ProdStockDto.class);
+      List<List<Object>> jzdata = jz2.getData();
+      Integer intjz = ObjectUtil.isEmpty(jzdata) ? 0:Integer.parseInt(jzdata.get(0).get(3).toString());
+      System.out.println(intjz);
+      System.out.println(forObject);
+  }
+
+
+
+    public static String signTopRequest(Map<String, String> params, String secret, String signMethod) throws IOException {
+        // 第一步:检查参数是否已经排序
+        String[] keys = params.keySet().toArray(new String[0]);
+        Arrays.sort(keys);
+
+        // 第二步:把所有参数名和参数值串在一起
+        StringBuilder query = new StringBuilder();
+            query.append(secret);
+        for (String key : keys) {
+            String value = params.get(key);
+            query.append(key).append(value);
+        }
+        query.append(secret);
+
+        // 第三步:使用MD5/HMAC加密
+        byte[] bytes;
+
+        System.out.println(query);
+        bytes = encryptMD5(query.toString());
+
+        // 第四步:把二进制转化为大写的十六进制(正确签名应该为32大写字符串,此方法需要时使用)
+        return byte2hex(bytes);
+    }
+
+
+    public static byte[] encryptMD5(String data) throws IOException {
+        return encryptMD5(data.getBytes("UTF-8"));
+    }
+    public static byte[] encryptMD5(byte[] data) throws IOException {
+        byte[] bytes = null;
+        try {
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            bytes = md.digest(data);
+        } catch (GeneralSecurityException gse) {
+            throw new IOException(gse.toString());
+        }
+        return bytes;
+    }
+    public static String byte2hex(byte[] bytes) {
+        StringBuilder sign = new StringBuilder();
+        for (int i = 0; i < bytes.length; i++) {
+            String hex = Integer.toHexString(bytes[i] & 0xFF);if (hex.length() == 1) {
+                sign.append("0");
+            }
+            sign.append(hex.toUpperCase());
+        }
+        return sign.toString();
+    }
+
+
+
+}

+ 14 - 7
huimv-admin/src/main/resources/com/huimv/admin/mapper/ProdStockMapper.xml

@@ -23,12 +23,19 @@
     </resultMap>
 <select id="listDay" resultType="com.huimv.admin.entity.ProdStock">
     SELECT t.*
-FROM `prod_stock` t
-JOIN (
-  SELECT DATE_FORMAT(creat_time, '%Y-%m') AS `month`, MAX(id) AS max_id
-  FROM `prod_stock`
-  GROUP BY DATE_FORMAT(creat_time, '%Y-%m') ,farm_id
-) m ON DATE_FORMAT(t.creat_time, '%Y-%m') = m.month AND t.id = m.max_id
+        FROM `prod_stock` t
+        JOIN (
+          SELECT DATE_FORMAT(creat_time, '%Y-%m') AS `month`, MAX(id) AS max_id
+          FROM `prod_stock`
+          GROUP BY DATE_FORMAT(creat_time, '%Y-%m') ,farm_id
+        ) m ON DATE_FORMAT(t.creat_time, '%Y-%m') = m.month AND t.id = m.max_id
     ${ew.customSqlSegment}
-</select>
+    </select>
+        <select id="sumInPig" resultType="java.lang.Integer">
+
+           SELECT  IFNULL(SUM(in_pig) ,0)FROM `prod_stock` WHERE farm_id = ${farmId} AND creat_time &gt;=  ${beginDate} AND display_type =0
+        </select>
+    <select id="sumOutPig" resultType="java.lang.Integer">
+           SELECT IFNULL(SUM(out_pig),0) FROM `prod_stock` WHERE farm_id = ${farmId} AND creat_time BETWEEN   ${beginDate} AND  ${endDate} AND display_type =0
+    </select>
 </mapper>

+ 0 - 5
huimv-receive/src/main/java/com/huimv/receive/controller/LoginController.java

@@ -44,11 +44,6 @@ public class LoginController {
     @Autowired
     private UploadImage uploadImage;
 
-    @RequestMapping("/test")
-    public String logout() {
-        return "线上服务器1";
-    }
-
     @RequestMapping("/logout")
     public Result logout(@RequestParam(name = "accountName", required = true) String accountName, @RequestParam(name = "password", required = true) String password) {
         return iLoginService.logout();

+ 3 - 1
huimv-receive/src/main/resources/application-prod.yml

@@ -65,7 +65,9 @@ mybatis-plus:
 img:
   url: https://img.ifarmcloud.com/images/
   basePath: /home/huimv/img/
-  ip: 119.3.44.183
+#  ip: 139.9.167.178
+#  ip: img.ifarmcloud.com
+  ip: 139.9.172.209
   user:  huimv
   password: "!hm123@1"
   port: 22