Jelajahi Sumber

feature:
1、修复工厂新增不了的问题
2、时间戳计算

yingjian.wu 3 bulan lalu
induk
melakukan
a536e88250

+ 4 - 5
src/main/java/com/qlm/controller/jinzai/ProdBatchController.java

@@ -128,13 +128,13 @@ public class ProdBatchController extends CommonController {
             fromSql.append(" inner join t_jz_device tjd on tdd.device_id = tjd.id");
             fromSql.append(" left join t_factory tf on tjd.factory_id = tf.id");
             fromSql.append(" left join t_workshop tw on tjd.workshop_id = tw.id");
-            fromSql.append(" left join t_jz_product tjp on tdd.product_id = tjp.id");
+            fromSql.append(" left join t_jz_item tjp on tdd.product_sku = tjp.sku");
             List<Object> params = new ArrayList<>();
             if (deviceId != null) {
                 fromSql.append(" where tdd.device_id = ?");
                 params.add(deviceId);
             }
-            Page<Record> paginate = Db.paginate(pageNumber, pageSize, "select tdd.*,tjd.id as deviceId, tjd.device_no as deviceNo,tjd.desc as device_name, tf.factory_name, tw.workshop_name, tjp.product_name", fromSql.toString(), params.toArray());
+            Page<Record> paginate = Db.paginate(pageNumber, pageSize, "select tdd.*,tjd.id as deviceId, tjd.device_no as deviceNo,tjd.desc as device_name, tf.factory_name, tw.workshop_name, tjp.item_name as product_name", fromSql.toString(), params.toArray());
             if (paginate == null) {
                 renderJson(ApiResponse.success(new PageResult<>(0, pageNumber, pageSize, new ArrayList<>())));
                 return;
@@ -169,13 +169,12 @@ public class ProdBatchController extends CommonController {
                 if (result) {
                     apiResponse.setMsg("刷新成功");
                     apiResponse.setCode(0);
-                    Thread.sleep(3000);
-                    StringBuilder sql = new StringBuilder("select tjd.*,tdd.id as deviceId,tdd.device_no as deviceNo, tdd.desc as device_name, tf.factory_name, tw.workshop_name, tjp.product_name");
+                    StringBuilder sql = new StringBuilder("select tjd.*,tdd.id as deviceId,tdd.device_no as deviceNo, tdd.desc as device_name, tf.factory_name, tw.workshop_name, tjp.item_name as product_name");
                     sql.append(" from t_jz_device tdd");
                     sql.append(" inner join t_device_detail tjd on tdd.id = tjd.device_id");
                     sql.append(" left join t_factory tf on tdd.factory_id = tf.id");
                     sql.append(" left join t_workshop tw on tdd.workshop_id = tw.id");
-                    sql.append(" left join t_jz_product tjp on tjd.product_id = tjp.id");
+                    sql.append(" left join t_jz_item tjp on tjd.product_sku = tjp.sku");
                     sql.append(" where tdd.id = ?");
                     record = Db.findFirst(sql.toString(), deviceId);
                     DeviceMonitorRecordDto deviceMonitorRecordDto = convertRecordToDeviceMonitorRecordDto(record);

+ 24 - 32
src/main/java/com/qlm/netty/handler/NettyServerHandler.java

@@ -78,7 +78,6 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter {
         String topic = nettyMessage.getTopic();
         String deviceNo = nettyMessage.getDeviceNo();
         String messageId = nettyMessage.getMessageId();
-        String commandType = nettyMessage.getCommandType();
 
         // 将会话与会话管理器关联
         if (deviceNo != null && !deviceNo.isEmpty()) {
@@ -100,9 +99,6 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter {
                     handleDeviceActiveReport(ctx, nettyMessage);
                     break;
                 case COMMAND_DOWNLOAD_RESPONSE:
-                    if(commandType.equals(DEVICE_INFO_REPORT.getCode())){
-                        handleDeviceInfoResponse(ctx, nettyMessage);
-                    }
                     break;
                 case COMMON_RESPONSE:
                     handleCommonResponse(ctx, nettyMessage);
@@ -113,6 +109,7 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter {
                     sendResponse(ctx, messageId, deviceNo, 1, "未支持的消息主题", null,NettyTopic.COMMON_RESPONSE.getCode());
                     break;
             }
+            handleDeviceInfoResponse(ctx, nettyMessage);
         } catch (IllegalArgumentException e) {
             logger.error("处理消息异常: {}", e.getMessage());
             sendResponse(ctx, messageId, deviceNo, 2, "处理消息异常: " + e.getMessage(), null,NettyTopic.COMMON_RESPONSE.getCode());
@@ -278,37 +275,32 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter {
      * 处理设备信息响应,计算通信延迟
      */
     private void handleDeviceInfoResponse(ChannelHandlerContext ctx, NettyMessage message) {
-        Long sendTime = ctx.channel().attr(NettyAttributes.REQUEST_SEND_TIME).get();
-        if (sendTime != null) {
-            long delay = System.currentTimeMillis() - sendTime;
-            ctx.channel().attr(NettyAttributes.COMMUNICATION_DELAY).set(delay);
-            logger.info("设备信息响应延迟: {}ms,消息ID: {}", delay, message.getMessageId());
-            
-            // 获取设备ID
-            String deviceId = message.getDeviceNo();
-            if (deviceId != null) {
-                try {
-                    // 查询设备是否存在
-                    Record device = Db.findFirst("select * from t_jz_device where device_no = ?", deviceId);
-                    if (device != null) {
-                        // 查询设备详细信息
-                        Record deviceDetail = Db.findFirst("select * from t_device_detail where device_id = ?", WxUtil.getInt("id", device));
-                        if (deviceDetail != null) {
-                            // 更新设备延迟信息
-                            deviceDetail.set("network_delay", delay);
-                            deviceDetail.set("updated_time", new Date());
-                            Db.update("t_device_detail", "device_id", deviceDetail);
-                        }
+        // 获取设备ID
+        String deviceId = message.getDeviceNo();
+        long timestamp = message.getTimestamp();
+        //如何判断timestamp 时间有没有值
+        if (timestamp == 0) {
+            return;
+        }
+        long delay = System.currentTimeMillis()-timestamp;
+        if (deviceId != null) {
+            try {
+                // 查询设备是否存在
+                Record device = Db.findFirst("select * from t_jz_device where device_no = ?", deviceId);
+                if (device != null) {
+                    // 查询设备详细信息
+                    Record deviceDetail = Db.findFirst("select * from t_device_detail where device_id = ?", WxUtil.getInt("id", device));
+                    if (deviceDetail != null) {
+                        // 更新设备延迟信息
+                        deviceDetail.set("network_delay", delay);
+                        deviceDetail.set("updated_time", new Date());
+                        Db.update("t_device_detail", "device_id", deviceDetail);
                     }
-                } catch (Exception e) {
-                    logger.error("保存通信延迟信息失败: {}", e.getMessage());
                 }
+            } catch (Exception e) {
+                logger.error("保存通信延迟信息失败: {}", e.getMessage());
             }
         }
-        
-        // 发送响应
-        sendResponse(ctx, message.getMessageId(), message.getDeviceNo(), 
-                   0, "设备信息接收成功", null, NettyTopic.COMMON_RESPONSE.getCode());
     }
     
     /**
@@ -337,7 +329,7 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter {
         Record deviceDetail = Db.findFirst("select * from t_device_detail where device_id = ?", deviceId);
         Record deviceDetailDb = new Record();
         deviceDetailDb.set("device_id", deviceId);
-        deviceDetailDb.set("product_id", data.getProductId());
+        deviceDetailDb.set("product_sku", data.getProductSku());
         deviceDetailDb.set("cpu_usage", data.getCpuUsage());
         deviceDetailDb.set("memory_usage", data.getMemoryUsage());
         deviceDetailDb.set("disk_free", data.getDiskFreeSpace());

+ 0 - 2
src/main/java/com/qlm/netty/manager/DeviceSessionManager.java

@@ -80,8 +80,6 @@ public class DeviceSessionManager {
                 NettyMessage message = new NettyMessage(topic, deviceId, data);
                 message.setCommandType(commandType);
                 ctx.writeAndFlush(JSON.toJSONString(message));
-                //记录发送时间键值
-                ctx.channel().attr(NettyAttributes.REQUEST_SEND_TIME).set(System.currentTimeMillis());
                 logger.debug("向设备 {} 发送消息,主题: {}", deviceId, topic);
                 return true;
             } catch (Exception e) {

+ 6 - 6
src/main/java/com/qlm/netty/model/IndustrialControlData.java

@@ -20,9 +20,9 @@ public class IndustrialControlData implements Serializable {
     private String diskFreeSpace;
 
     /**
-     * 产品ID
+     * 产品KSU
      */
-    private String productId;
+    private String productSku;
 
     /**
      * 正在进行的生产任务数量
@@ -68,12 +68,12 @@ public class IndustrialControlData implements Serializable {
         this.diskFreeSpace = diskFreeSpace;
     }
 
-    public String getProductId() {
-        return productId;
+    public String getProductSku() {
+        return productSku;
     }
 
-    public void setProductId(String productId) {
-        this.productId = productId;
+    public void setProductSku(String productSku) {
+        this.productSku = productSku;
     }
 
     public String getProductionTaskCount() {

+ 1 - 1
src/main/webapp/page/jinzai/factory_add.jsp

@@ -407,7 +407,7 @@
         };
 
         $.ajax({
-            url: id != null ? '${ctx}/factory/update' :'${ctx}/factory/save',
+            url: id && id !== '' ? '${ctx}/factory/update' :'${ctx}/factory/save',
             type: 'POST',
             data: JSON.stringify(formData),
             contentType: 'application/json',