Ver código fonte

更新密码

523096025 1 ano atrás
pai
commit
655f475d96
22 arquivos alterados com 612 adições e 9 exclusões
  1. 42 0
      huimv-admin/src/main/java/com/huimv/guowei/admin/controller/DeviceFarmConfigController.java
  2. 37 0
      huimv-admin/src/main/java/com/huimv/guowei/admin/entity/DeviceFarmConfig.java
  3. 16 0
      huimv-admin/src/main/java/com/huimv/guowei/admin/mapper/DeviceFarmConfigMapper.java
  4. 2 0
      huimv-admin/src/main/java/com/huimv/guowei/admin/mapper/EnvMoveCallMapper.java
  5. 1 0
      huimv-admin/src/main/java/com/huimv/guowei/admin/mapper/EnvRegularCallFeedingMapper.java
  6. 22 0
      huimv-admin/src/main/java/com/huimv/guowei/admin/service/IDeviceFarmConfigService.java
  7. 82 5
      huimv-admin/src/main/java/com/huimv/guowei/admin/service/impl/BaseDuckInfoServiceImpl.java
  8. 54 0
      huimv-admin/src/main/java/com/huimv/guowei/admin/service/impl/DeviceFarmConfigServiceImpl.java
  9. 0 1
      huimv-admin/src/main/java/com/huimv/guowei/admin/service/impl/RawDataServiceImpl.java
  10. 5 0
      huimv-admin/src/main/resources/com/huimv/guowei/admin/mapper/EnvMoveCallMapper.xml
  11. 6 0
      huimv-admin/src/main/resources/com/huimv/guowei/admin/mapper/EnvRegularCallFeedingMapper.xml
  12. 13 0
      huimv-admin/src/main/resources/mapper/DeviceFarmConfigMapper.xml
  13. 20 0
      input/src/main/java/com/huimv/input/controller/EnvRegularCallFeedingCopyController.java
  14. 86 0
      input/src/main/java/com/huimv/input/entity/EnvRegularCallFeedingCopy.java
  15. 16 0
      input/src/main/java/com/huimv/input/mapper/EnvRegularCallFeedingCopyMapper.java
  16. 29 0
      input/src/main/java/com/huimv/input/send/ConfigSenderHandler.java
  17. 24 0
      input/src/main/java/com/huimv/input/send/ConfigSendingScheduler.java
  18. 39 0
      input/src/main/java/com/huimv/input/send/DeviceConfigSender.java
  19. 60 3
      input/src/main/java/com/huimv/input/server/EnvInputServerHandler.java
  20. 16 0
      input/src/main/java/com/huimv/input/service/IEnvRegularCallFeedingCopyService.java
  21. 20 0
      input/src/main/java/com/huimv/input/service/impl/EnvRegularCallFeedingCopyServiceImpl.java
  22. 22 0
      input/src/main/resources/com/huimv/input/mapper/EnvRegularCallFeedingCopyMapper.xml

+ 42 - 0
huimv-admin/src/main/java/com/huimv/guowei/admin/controller/DeviceFarmConfigController.java

@@ -0,0 +1,42 @@
+package com.huimv.guowei.admin.controller;
+
+
+import com.huimv.guowei.admin.common.utils.Result;
+import com.huimv.guowei.admin.common.utils.ResultCode;
+import com.huimv.guowei.admin.entity.DeviceFarmConfig;
+import com.huimv.guowei.admin.service.IDeviceFarmConfigService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author author
+ * @since 2023-09-12
+ */
+@RestController
+@RequestMapping("/device-farm-config")
+public class DeviceFarmConfigController {
+
+    @Autowired
+    private IDeviceFarmConfigService deviceFarmConfigService;
+
+    @RequestMapping("/list")
+    public Result listById(HttpServletRequest httpServletRequest, @RequestBody Map<String, String> paramsMap) {
+        return deviceFarmConfigService.list(paramsMap);
+    }
+    @RequestMapping("/updateByFarmId")
+    public Result updateByFarmId(HttpServletRequest httpServletRequest, @RequestBody DeviceFarmConfig deviceFarmConfig) {
+
+        return new Result(ResultCode.SUCCESS,deviceFarmConfigService.updateById(deviceFarmConfig));
+    }
+
+}

+ 37 - 0
huimv-admin/src/main/java/com/huimv/guowei/admin/entity/DeviceFarmConfig.java

@@ -0,0 +1,37 @@
+package com.huimv.guowei.admin.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author author
+ * @since 2023-09-12
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("device_farm_config")
+public class DeviceFarmConfig implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    private Integer startHour;
+
+    private Integer endHour;
+
+    private Integer farmId;
+
+
+}

+ 16 - 0
huimv-admin/src/main/java/com/huimv/guowei/admin/mapper/DeviceFarmConfigMapper.java

@@ -0,0 +1,16 @@
+package com.huimv.guowei.admin.mapper;
+
+import com.huimv.guowei.admin.entity.DeviceFarmConfig;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author author
+ * @since 2023-09-12
+ */
+public interface DeviceFarmConfigMapper extends BaseMapper<DeviceFarmConfig> {
+
+}

+ 2 - 0
huimv-admin/src/main/java/com/huimv/guowei/admin/mapper/EnvMoveCallMapper.java

@@ -22,4 +22,6 @@ public interface EnvMoveCallMapper extends BaseMapper<EnvMoveCall> {
     List<EnvMoveCall> listDay(@Param(Constants.WRAPPER) QueryWrapper<EnvMoveCall> queryWrapper);
     List<EnvMoveCallVo> listScreen(@Param(Constants.WRAPPER) QueryWrapper<EnvMoveCall> queryWrapper);
     List<EnvMoveCallVo> listScreen2(@Param(Constants.WRAPPER) QueryWrapper<EnvMoveCall> queryWrapper);
+
+    String listScreen3(QueryWrapper<EnvMoveCall> queryWrapper);
 }

+ 1 - 0
huimv-admin/src/main/java/com/huimv/guowei/admin/mapper/EnvRegularCallFeedingMapper.java

@@ -44,4 +44,5 @@ public interface EnvRegularCallFeedingMapper extends BaseMapper<EnvRegularCallFe
 
     IPage<EnvRegularCallFeeding> listSelect(Page<EnvRegularCallFeeding> page, Date date,String farmId);
 
+    String listScreen3(QueryWrapper<Object> objectQueryWrapper);
 }

+ 22 - 0
huimv-admin/src/main/java/com/huimv/guowei/admin/service/IDeviceFarmConfigService.java

@@ -0,0 +1,22 @@
+package com.huimv.guowei.admin.service;
+
+import com.huimv.guowei.admin.common.utils.Result;
+import com.huimv.guowei.admin.entity.DeviceFarmConfig;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author author
+ * @since 2023-09-12
+ */
+public interface IDeviceFarmConfigService extends IService<DeviceFarmConfig> {
+
+    Result list(Map<String, String> paramsMap);
+
+    Object updateByFarmId(Map<String, String> paramsMap);
+}

+ 82 - 5
huimv-admin/src/main/java/com/huimv/guowei/admin/service/impl/BaseDuckInfoServiceImpl.java

@@ -386,13 +386,11 @@ public class BaseDuckInfoServiceImpl extends ServiceImpl<BaseDuckInfoMapper, Bas
         jsonObject.put("feedInfo", jsonArray);
         return new Result(ResultCode.SUCCESS, jsonObject);
     }
-
     @Override
-    public Result listDuckByScreen2(HttpServletRequest httpServletRequest, Map<String, String> paramsMap) {
+    public Result listDuckByScreen2(HttpServletRequest httpServletRequest, Map<String, String> paramsMap){
         String farmId = paramsMap.get("farmId");
         String duckNum = paramsMap.get("duckNum");
         DateTime dateTime = DateUtil.offsetDay(DateUtil.beginOfDay(new Date()), -7);
-
         JSONObject jsonObject = new JSONObject();
         List<EnvMoveCallVo> envMoveCallVoList = new ArrayList<>();
         QueryWrapper<EnvMoveCall> callQueryWrapper = new QueryWrapper<>();
@@ -420,87 +418,166 @@ public class BaseDuckInfoServiceImpl extends ServiceImpl<BaseDuckInfoMapper, Bas
                 System.out.println("这个是平均值的时间:"+envMoveCallVo.getCallDate());
                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                 String format = sdf.format(envMoveCallVo.getCallDate());
+
                 System.out.println("格式化后的时间:"+format);
+
                 String start= format + " 00:00:00";
+
                 String end= format + " 23:59:59";
+
                 QueryWrapper<EnvMoveCall> queryWrapper1 = new QueryWrapper<>();
+
                 queryWrapper1.eq("farm_id", farmId).eq("duck_num", duckNum)
+
                         .between("call_date",start,end)
+
                         .orderByDesc("id")
+
                         .last(" limit 1");
+
                 EnvMoveCall envMoveCall = moveCallMapper.selectOne(queryWrapper1);
+
                 if (ObjectUtil.isEmpty(envMoveCall)) {
+
                     moveCallVo.setDuckWeight(BigDecimal.ZERO);
+
                     moveCallVo.setCallDate(envMoveCallVo.getCallDate());
+
                 } else {
+
                     moveCallVo.setDuckWeight(envMoveCall.getDuckWeight());
+
                     moveCallVo.setCallDate(envMoveCallVo.getCallDate());
+
                 }
+
                 moveCallVo.setAvgWeight(envMoveCallVo.getAvgWeight());
+
                 envMoveCallVoList.add(moveCallVo);
-                 i++;
+
+                i++;
+
             }
+
             jsonObject.put("weight", envMoveCallVoList);
+
         }
 
 
+
+
+
         List<EnvRegularCallFeedingVo> feedingVoList = new ArrayList<>();
+
         QueryWrapper<EnvRegularCallFeeding> feedingQueryWrapper = new QueryWrapper<>();
+
         feedingQueryWrapper.eq("farm_id", farmId).eq("duck_num", duckNum);
+
         List<EnvRegularCallFeeding> feedings = feedingMapper.selectList(feedingQueryWrapper);
+
         if (feedings.size() == 0) {
+
             QueryWrapper<EnvRegularCallFeeding> queryWrapper1 = new QueryWrapper<>();
+
             queryWrapper1.eq("farm_id", farmId).eq("event_type", 0).ge("call_date",dateTime);
+
             List<EnvRegularCallFeedingVo> envRegularCallFeedingVos = feedingMapper.listScreen2(queryWrapper1);
+
             queryWrapper1.groupBy("duck_num");
+
             List<EnvRegularCallFeeding> list = feedingMapper.selectList(queryWrapper1);
+
             for (EnvRegularCallFeedingVo envRegularCallFeedingVo : envRegularCallFeedingVos) {
+
                 EnvRegularCallFeedingVo feedingVo = new EnvRegularCallFeedingVo();
+
                 BigDecimal value = BigDecimal.valueOf(envRegularCallFeedingVo.getDuckWeight());
+
                 BigDecimal decimal = BigDecimal.valueOf(list.size());
+
                 BigDecimal decimal1 = value.divide(decimal, 2);//pingjun
+
                 feedingVo.setAvgWeight(decimal1);
+
                 feedingVo.setDuckWeight(0);
+
                 feedingVo.setCallDate(envRegularCallFeedingVo.getCallDate());
+
                 feedingVoList.add(feedingVo);
+
             }
+
             jsonObject.put("feed", feedingVoList);
+
         } else {
+
             QueryWrapper<EnvRegularCallFeeding> queryWrapper1 = new QueryWrapper<>();
+
             queryWrapper1.eq("farm_id", farmId).eq("event_type", 0);
+
             queryWrapper1.groupBy("duck_num");
+
             List<EnvRegularCallFeeding> list = feedingMapper.selectList(queryWrapper1);
+
             QueryWrapper<EnvRegularCallFeeding> queryWrapper2 = new QueryWrapper<>();
+
             queryWrapper2.eq("farm_id",farmId).eq("duck_num",duckNum).eq("event_type", 0).ge("call_date",dateTime);
+
             List<EnvRegularCallFeedingVo> feedingVoList1 = feedingMapper.listScreen2(queryWrapper2);//某只鸭子的总采食量
+
             int i = 0;
+
             for (EnvRegularCallFeedingVo envRegularCallFeedingVo : feedingVoList1) {
+
                 Date callDate = envRegularCallFeedingVo.getCallDate();
+
                 System.out.println("这个是平均值的时间:"+callDate);
+
                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+
                 String format = sdf.format(callDate);
+
                 System.out.println("格式化后的时间:"+format);
+
                 String start= format + " 00:00:00";
+
                 String end= format + " 23:59:59";
+
                 QueryWrapper<EnvRegularCallFeeding> callFeedingQueryWrapper = new QueryWrapper<>();
+
                 callFeedingQueryWrapper.eq("farm_id", farmId).eq("event_type", 0).between("call_date", start, end);
 
+
+
                 callFeedingQueryWrapper.select("IFNULL(SUM(duck_weight),0) duckWeight");
+
                 EnvRegularCallFeeding feeding = feedingMapper.selectOne(callFeedingQueryWrapper);
+
                 EnvRegularCallFeedingVo feedingVo = new EnvRegularCallFeedingVo();
+
                 BigDecimal value = BigDecimal.valueOf(feeding.getDuckWeight());
+
                 BigDecimal decimal = BigDecimal.valueOf(list.size());
+
                 BigDecimal decimal1 = value.divide(decimal, 2);//pingjun
+
                 feedingVo.setAvgWeight(decimal1);
+
                 feedingVo.setDuckWeight(envRegularCallFeedingVo.getDuckWeight());
+
                 feedingVo.setCallDate(envRegularCallFeedingVo.getCallDate());
+
                 feedingVoList.add(feedingVo);
+
                 i++;
+
             }
             jsonObject.put("feed", feedingVoList);
-        }
 
+        }
         return new Result(ResultCode.SUCCESS, jsonObject);
+
     }
 
+
 }

+ 54 - 0
huimv-admin/src/main/java/com/huimv/guowei/admin/service/impl/DeviceFarmConfigServiceImpl.java

@@ -0,0 +1,54 @@
+package com.huimv.guowei.admin.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.huimv.guowei.admin.common.utils.Result;
+import com.huimv.guowei.admin.common.utils.ResultCode;
+import com.huimv.guowei.admin.entity.DeviceFarmConfig;
+import com.huimv.guowei.admin.mapper.DeviceFarmConfigMapper;
+import com.huimv.guowei.admin.service.IDeviceFarmConfigService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author author
+ * @since 2023-09-12
+ */
+@Service
+public class DeviceFarmConfigServiceImpl extends ServiceImpl<DeviceFarmConfigMapper, DeviceFarmConfig> implements IDeviceFarmConfigService {
+
+    @Override
+    public Result list(Map<String, String> paramsMap) {
+        String farmId = paramsMap.get("farmId");
+        List<DeviceFarmConfig> farm_id = this.list(new QueryWrapper<DeviceFarmConfig>().eq("farm_id", farmId));
+
+        if (ObjectUtil.isEmpty(farm_id)){
+            List list  =new ArrayList();
+            DeviceFarmConfig deviceFarmConfig = new DeviceFarmConfig();
+            deviceFarmConfig.setStartHour(6);
+            deviceFarmConfig.setEndHour(8);
+            deviceFarmConfig.setFarmId(Integer.parseInt(farmId));
+            this.save(deviceFarmConfig);
+            list.add(deviceFarmConfig);
+            deviceFarmConfig.setStartHour(15);
+            deviceFarmConfig.setEndHour(18);
+            this.save(deviceFarmConfig);
+            list.add(deviceFarmConfig);
+            return new Result(ResultCode.SUCCESS,list);
+        }
+        return new Result(ResultCode.SUCCESS,farm_id);
+    }
+
+    @Override
+    public Object updateByFarmId(Map<String, String> paramsMap) {
+        return null;
+    }
+}

+ 0 - 1
huimv-admin/src/main/java/com/huimv/guowei/admin/service/impl/RawDataServiceImpl.java

@@ -36,7 +36,6 @@ public class RawDataServiceImpl extends ServiceImpl<RawDataMapper, RawData> impl
         if (StringUtils.isBlank(deviceCode)){
             return new Result(10001,"称编码不能为空",false);
         }
-        System.out.println("ss");
         wrapper.eq("device_code",deviceCode);
         if (StringUtils.isBlank(startDate)){
             wrapper.ge("create_time", DateUtil.beginOfDay(new Date()));

+ 5 - 0
huimv-admin/src/main/resources/com/huimv/guowei/admin/mapper/EnvMoveCallMapper.xml

@@ -37,4 +37,9 @@
         GROUP BY DATE_FORMAT(call_date,'%Y-%m-%d')
         ORDER BY call_date ASC
     </select>
+    <select id="listScreen3" resultType="java.lang.String">
+
+         SELECT (IFNULL(SUM(duck_weight),'0')) 'duckWeight'  FROM `env_move_call`
+   ${ew.customSqlSegment}
+    </select>
 </mapper>

+ 6 - 0
huimv-admin/src/main/resources/com/huimv/guowei/admin/mapper/EnvRegularCallFeedingMapper.xml

@@ -126,4 +126,10 @@ from base_duck_info a LEFT JOIN
 where farm_id=#{farmId} and a.is_cage='0'
 ORDER BY b.callDate DESC
     </select>
+    <select id="listScreen3" resultType="java.lang.String">
+
+  SELECT (IFNULL(SUM(duck_weight),'0')) 'duckWeight'  FROM `env_regular_call_feeding`
+   ${ew.customSqlSegment}
+
+    </select>
 </mapper>

+ 13 - 0
huimv-admin/src/main/resources/mapper/DeviceFarmConfigMapper.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.huimv.guowei.admin.mapper.DeviceFarmConfigMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.huimv.guowei.admin.entity.DeviceFarmConfig">
+        <id column="id" property="id" />
+        <result column="start_hour" property="startHour" />
+        <result column="end_hour" property="endHour" />
+        <result column="farm_id" property="farmId" />
+    </resultMap>
+
+</mapper>

+ 20 - 0
input/src/main/java/com/huimv/input/controller/EnvRegularCallFeedingCopyController.java

@@ -0,0 +1,20 @@
+package com.huimv.input.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 固定电子秤 存放其它数据 前端控制器
+ * </p>
+ *
+ * @author author
+ * @since 2023-06-27
+ */
+@RestController
+@RequestMapping("/env-regular-call-feeding-copy")
+public class EnvRegularCallFeedingCopyController {
+
+}

+ 86 - 0
input/src/main/java/com/huimv/input/entity/EnvRegularCallFeedingCopy.java

@@ -0,0 +1,86 @@
+package com.huimv.input.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.Date;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 固定电子秤 存放其它数据
+ * </p>
+ *
+ * @author author
+ * @since 2023-06-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("env_regular_call_feeding_copy")
+public class EnvRegularCallFeedingCopy implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 设备名称
+     */
+    private String callName;
+
+    /**
+     * 设备编码
+     */
+    private String callCode;
+
+    /**
+     * 鸭只编号
+     */
+    private String duckNum;
+
+    /**
+     * 采食重量 克
+     */
+    private BigDecimal duckWeight;
+
+    /**
+     * 原始数据
+     */
+    private BigDecimal duckFeedingOriginal;
+
+    /**
+     * 称重日期
+     */
+    private Date callDate;
+
+    private Integer farmId;
+
+    /**
+     * 鸭只id
+     */
+    private Integer duckId;
+
+    /**
+     * 电量
+     */
+    private String battery;
+
+    private Integer unitId;
+
+    private String unitName;
+
+    /**
+     * 0采食,1加料,2其它
+     */
+    private Integer eventType;
+
+
+}

+ 16 - 0
input/src/main/java/com/huimv/input/mapper/EnvRegularCallFeedingCopyMapper.java

@@ -0,0 +1,16 @@
+package com.huimv.input.mapper;
+
+import com.huimv.input.entity.EnvRegularCallFeedingCopy;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 固定电子秤 存放其它数据 Mapper 接口
+ * </p>
+ *
+ * @author author
+ * @since 2023-06-27
+ */
+public interface EnvRegularCallFeedingCopyMapper extends BaseMapper<EnvRegularCallFeedingCopy> {
+
+}

+ 29 - 0
input/src/main/java/com/huimv/input/send/ConfigSenderHandler.java

@@ -0,0 +1,29 @@
+package com.huimv.input.send;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+
+public class ConfigSenderHandler extends ChannelInboundHandlerAdapter {
+
+    private final String configData;
+
+    public ConfigSenderHandler(String configData) {
+        this.configData = configData;
+    }
+
+    @Override
+    public void channelActive(ChannelHandlerContext ctx) throws Exception {
+        byte[] bytes = configData.getBytes();
+        ByteBuf buf = Unpooled.buffer(bytes.length);
+        buf.writeBytes(bytes);
+        ctx.writeAndFlush(buf);
+    }
+
+    @Override
+    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+        cause.printStackTrace();
+        ctx.close();
+    }
+}

+ 24 - 0
input/src/main/java/com/huimv/input/send/ConfigSendingScheduler.java

@@ -0,0 +1,24 @@
+package com.huimv.input.send;
+
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ConfigSendingScheduler {
+
+    private final DeviceConfigSender deviceConfigSender;
+
+    public ConfigSendingScheduler(DeviceConfigSender deviceConfigSender) {
+        this.deviceConfigSender = deviceConfigSender;
+    }
+
+    @Scheduled(cron = "0 * 1-2 * * ?")
+    public void sendConfigPeriodically() {
+        String deviceIpAddress = "设备IP地址";
+        int devicePort = 12345;
+        String configData = "要发送的配置数据";
+        
+        // 调用DeviceConfigSender的方法发送配置
+        deviceConfigSender.sendConfigToDevice(deviceIpAddress, devicePort, configData);
+    }
+}

+ 39 - 0
input/src/main/java/com/huimv/input/send/DeviceConfigSender.java

@@ -0,0 +1,39 @@
+package com.huimv.input.send;
+
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.*;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.stereotype.Component;
+
+@Component
+public class DeviceConfigSender {
+
+    public void sendConfigToDevice(String deviceIpAddress, int devicePort, String configData) {
+        EventLoopGroup group = new NioEventLoopGroup();
+        try {
+            Bootstrap bootstrap = new Bootstrap()
+                    .group(group)
+                    .channel(NioSocketChannel.class)
+                    .option(ChannelOption.TCP_NODELAY, true)
+                    .handler(new ChannelInitializer<SocketChannel>() {
+                        @Override
+                        protected void initChannel(SocketChannel ch) throws Exception {
+                            ChannelPipeline pipeline = ch.pipeline();
+                            // 在这里添加你的编码器和解码器
+                            // pipeline.addLast(new YourEncoder());
+                            // pipeline.addLast(new YourDecoder());
+                            pipeline.addLast(new ConfigSenderHandler(configData));
+                        }
+                    });
+
+            ChannelFuture future = bootstrap.connect(deviceIpAddress, devicePort).sync();
+            future.channel().closeFuture().sync();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            group.shutdownGracefully();
+        }
+    }
+}

+ 60 - 3
input/src/main/java/com/huimv/input/server/EnvInputServerHandler.java

@@ -1,5 +1,6 @@
 package com.huimv.input.server;
 
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -19,6 +20,7 @@ import java.io.IOException;
 import java.math.BigDecimal;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.LocalTime;
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -74,12 +76,61 @@ public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
         byte[] bytes = new byte[byteBuf.readableBytes()];
         byteBuf.readBytes(bytes);
         String str = ModBusUtils.bytes2HexString(bytes);
-        ctx.writeAndFlush("10001");
+
         System.out.println("收到的数据:"+str);
-        saveWeight(str,bytes);
+        if(str.length()>100){
+            saveWeight(str,bytes);
+        }else if (str.length()< 30 ){
+            ctx.writeAndFlush(Unpooled.copiedBuffer(hexStringToByteArray("550B02"+getDateX()+"0608070AAA")));
+        }
+        LocalTime currentTime = LocalTime.now();
+
+        // 定义一点和三点的时间
+        LocalTime startTime = LocalTime.of(1, 0);
+        LocalTime endTime = LocalTime.of(3, 0);
+
+        // 检查当前时间是否在一点到三点之间
+        if (isTimeInRange(currentTime, startTime, endTime)) {
+            ctx.writeAndFlush(Unpooled.copiedBuffer(hexStringToByteArray("550B02"+getDateX()+"0608070AAA")));
+        }
         System.out.println("保存成功");
+
     }
 
+    private  boolean isTimeInRange(LocalTime currentTime, LocalTime startTime, LocalTime endTime) {
+        return !currentTime.isBefore(startTime) && !currentTime.isAfter(endTime);
+    }
+    private static byte[] hexStringToByteArray(String hexString) {
+        int len = hexString.length();
+        byte[] dataBytes = new byte[len / 2];
+
+        for (int i = 0; i < len; i += 2) {
+            dataBytes[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4)
+                    + Character.digit(hexString.charAt(i + 1), 16));
+        }
+
+        return dataBytes;
+    }
+
+
+    public  String getDateX() {
+        Date date = new Date();
+        StringBuilder hexDateTimeBuilder = new StringBuilder();
+
+        hexDateTimeBuilder.append(String.format("%02X", DateUtil.year(date) - 2000))
+                .append(String.format("%02X", DateUtil.month(date) + 1))
+                .append(String.format("%02X", DateUtil.dayOfMonth(date)))
+                .append(String.format("%02X", DateUtil.hour(date, true)))
+                .append(String.format("%02X", DateUtil.minute(date)))
+                .append(String.format("%02X", DateUtil.second(date)));
+
+//        String hexDateTime =
+//        System.out.println(hexDateTime);
+        return  hexDateTimeBuilder.toString();
+    }
+
+
+
 
     public synchronized void saveWeight(String str, byte[] bytes) {
         String[] s = str.split(" ");
@@ -95,6 +146,11 @@ public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
 
         //获取上次一次数据
         RawData lastRawData = rawDataMapper.selectOne(new QueryWrapper<RawData>().eq("device_code", decId).orderByDesc("id").last("limit 1"));
+        if (ObjectUtil.isNotEmpty(lastRawData) && str.equals(lastRawData.getData())){
+            //相同数据直接退出
+            System.out.println("相同数据直接退出");
+            return;
+        }
         BigDecimal lastWeight =  new BigDecimal(0);
         if (ObjectUtil.isNotEmpty(lastRawData)){
             lastWeight = lastRawData.getLastWeight();
@@ -137,7 +193,8 @@ public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
             BigDecimal weight = new BigDecimal(Integer.parseInt(str1,16));
             if (flag){
                 //当时时间
-                Date thenTime = new Date(l - ((60-i)*10000));
+//                Date thenTime = new Date(l - ((60-i)*10000));
+                Date thenTime = new Date(l - ((60-i)*1000));
                 //
                 String str2 = "";
                 BigDecimal weight2 ;

+ 16 - 0
input/src/main/java/com/huimv/input/service/IEnvRegularCallFeedingCopyService.java

@@ -0,0 +1,16 @@
+package com.huimv.input.service;
+
+import com.huimv.input.entity.EnvRegularCallFeedingCopy;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 固定电子秤 存放其它数据 服务类
+ * </p>
+ *
+ * @author author
+ * @since 2023-06-27
+ */
+public interface IEnvRegularCallFeedingCopyService extends IService<EnvRegularCallFeedingCopy> {
+
+}

+ 20 - 0
input/src/main/java/com/huimv/input/service/impl/EnvRegularCallFeedingCopyServiceImpl.java

@@ -0,0 +1,20 @@
+package com.huimv.input.service.impl;
+
+import com.huimv.input.entity.EnvRegularCallFeedingCopy;
+import com.huimv.input.mapper.EnvRegularCallFeedingCopyMapper;
+import com.huimv.input.service.IEnvRegularCallFeedingCopyService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 固定电子秤 存放其它数据 服务实现类
+ * </p>
+ *
+ * @author author
+ * @since 2023-06-27
+ */
+@Service
+public class EnvRegularCallFeedingCopyServiceImpl extends ServiceImpl<EnvRegularCallFeedingCopyMapper, EnvRegularCallFeedingCopy> implements IEnvRegularCallFeedingCopyService {
+
+}

+ 22 - 0
input/src/main/resources/com/huimv/input/mapper/EnvRegularCallFeedingCopyMapper.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.huimv.input.mapper.EnvRegularCallFeedingCopyMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.huimv.input.entity.EnvRegularCallFeedingCopy">
+        <id column="id" property="id" />
+        <result column="call_name" property="callName" />
+        <result column="call_code" property="callCode" />
+        <result column="duck_num" property="duckNum" />
+        <result column="duck_weight" property="duckWeight" />
+        <result column="duck_feeding_original" property="duckFeedingOriginal" />
+        <result column="call_date" property="callDate" />
+        <result column="farm_id" property="farmId" />
+        <result column="duck_id" property="duckId" />
+        <result column="battery" property="battery" />
+        <result column="unit_id" property="unitId" />
+        <result column="unit_name" property="unitName" />
+        <result column="event_type" property="eventType" />
+    </resultMap>
+
+</mapper>