Преглед на файлове

Merge remote-tracking branch 'origin/master'

oyq28 преди 1 година
родител
ревизия
4afa1aaeb2

+ 85 - 10
src/main/java/com/imcs/admin/common/collection/DeviceCollectionTaskJob.java

@@ -1,8 +1,10 @@
 package com.imcs.admin.common.collection;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.Snowflake;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
@@ -39,6 +41,18 @@ public class DeviceCollectionTaskJob {
     @Autowired
     private JdbcService jdbcService;
 
+    private static Snowflake snowflake = new Snowflake(1, 1, true);
+
+    /*
+            {
+            "mainProg": "",//主程序号
+            "actFeed": "", //进给速度
+            "spindleMagnification": "", //主轴倍率
+            "actSpindle": "", //主轴转速
+            "powerOnTime": "", //开机时长
+        }
+     */
+
     /**
      * 设备采集任务FANUC
      * FANUC
@@ -163,6 +177,8 @@ public class DeviceCollectionTaskJob {
      * @param ip
      */
     public void saveOrUpdateDeviceCollection(JSONObject returnJson,Object ip,String deviceType){
+        Map<String, Object> device = jdbcService.findOne("select * from a_device where ip = ? ", ip);
+
         //组装参数,更新设备采集表
         Object mainProg = returnJson.get("mainProg");
         JSONObject deviceInfo = new JSONObject();
@@ -185,7 +201,7 @@ public class DeviceCollectionTaskJob {
         Object actSpindle = deviceInfo.get("actSpindle");
         if(actFeed!=null || actSpindle !=null) {
             if(("0".equals(actFeed.toString()) || "NAN".equals(actFeed.toString()) || "null".equals(actFeed.toString()))
-                    && ("0".equals(actSpindle.toString()) || "NAN".equals(actSpindle.toString()) || "null".equals(actSpindle.toString()))){
+                    || ("0".equals(actSpindle.toString()) || "NAN".equals(actSpindle.toString()) || "null".equals(actSpindle.toString()))){
                 deviceInfo.putOnce("deviceWorkState","空闲");
             }else{
                 deviceInfo.putOnce("deviceWorkState","加工");
@@ -194,6 +210,8 @@ public class DeviceCollectionTaskJob {
             deviceInfo.putOnce("deviceWorkState","空闲");
         }
 
+        saveOrUpdateDeviceReportInfo(device.get("id"),deviceInfo.get("deviceWorkState").toString());
+
         Map<String, Object> deviceCollection = jdbcService.findOne("select * from device_collection where ip = ? ", ip);
 
         if(CollectionUtil.isNotEmpty(deviceCollection)){
@@ -202,7 +220,6 @@ public class DeviceCollectionTaskJob {
             jdbcService.update("更新",sql,deviceInfo.toString(), DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss"),deviceCollection.get("id"));
         }else{
             //新增
-            Map<String, Object> device = jdbcService.findOne("select * from a_device where ip = ? ", ip);
             if(CollectionUtil.isNotEmpty(device)){
                 Object deviceId = device.get("id");
                 String sql = "insert into device_collection (device_id,device_info,ip) values(?,?,?) ";
@@ -220,7 +237,7 @@ public class DeviceCollectionTaskJob {
 
         Map<String,Object> map = new HashMap<>();
         map.put("mainProg",returnJson.get("mainProg"));
-        map.put("actFeed",returnJson.get("actFeed"));
+        map.put("actFeed",returnJson.get("actFeed")); //主轴ijn
         map.put("spindleMagnification",returnJson.get("spindleMagnification"));
         map.put("actSpindle",returnJson.get("actSpindle"));
         map.put("powerOnTime",returnJson.get("powerOnTime"));
@@ -232,7 +249,7 @@ public class DeviceCollectionTaskJob {
         Date date = new Date();
         String nowDate = DateUtil.format(date, "yyyy-MM-dd");
 
-        Map<String, Object> deviceCollectionDetailInfoMap = jdbcService.findOne("select id,device_rate,today_earliest_power_on_time,detail_info,today_power_on_time from device_collection_detail where device_ip = ? and create_date = ?", ip,nowDate);
+        Map<String, Object> deviceCollectionDetailInfoMap = jdbcService.findOne("select id,device_rate,today_earliest_power_on_time,detail_info,today_power_on_time,today_work_time from device_collection_detail where device_ip = ? and create_date = ?", ip,nowDate);
 
         String detailInfo = "";
         if(CollectionUtil.isNotEmpty(deviceCollectionDetailInfoMap)){
@@ -270,6 +287,8 @@ public class DeviceCollectionTaskJob {
 
             //当日设备开机时长
             Object todayPowerOnTimeObj = deviceCollectionDetailInfoMap.get("todayPowerOnTime");
+            //当日设备工作时长
+            Object todayWorkTimeObj = deviceCollectionDetailInfoMap.get("todayWorkTime");
             //设备主轴利用率
             Object deviceRateObj = deviceCollectionDetailInfoMap.get("deviceRate");
 
@@ -278,19 +297,35 @@ public class DeviceCollectionTaskJob {
                 todayPowerOnTime = new BigDecimal(todayPowerOnTimeObj.toString());
             }
 
+            BigDecimal todayWorkTime = BigDecimal.ZERO;
+            if(!Objects.isNull(todayWorkTimeObj)){
+                todayWorkTime = new BigDecimal(todayWorkTimeObj.toString());
+            }
+
 
             BigDecimal deviceRate = BigDecimal.ZERO;
             if(!Objects.isNull(deviceRateObj)){
                 deviceRate = new BigDecimal(deviceRateObj.toString());
             }
-
-            if(!Objects.isNull(returnJson.get("deviceState")) && "在线".equals(returnJson.get("deviceState").toString())){
+            log.info("设备状态:{}",returnJson.get("deviceState"));
+            if(!Objects.isNull(returnJson.get("deviceState")) && "在线".equals(returnJson.get("deviceState").toString()) ){
                 BigDecimal currentPowerOnTime = new BigDecimal(powerOnTime.toString());
+                log.info("当前时间:{}",currentPowerOnTime);
                 if(hisPowerOnTime.compareTo(BigDecimal.ZERO) > 0  && currentPowerOnTime.compareTo(hisPowerOnTime) > 0){
                     // 间隔时间 = 当前开机总时长 - 最近的上一次采集开机总时长
                     BigDecimal intervalTime =  currentPowerOnTime.subtract(hisPowerOnTime);
                     //当日设备开机时长 = 当日设备开机时长 + 间隔时间
                     todayPowerOnTime = todayPowerOnTime.add(intervalTime);
+
+
+                    BigDecimal actFeed = Objects.isNull(returnJson.get("actFeed")) ? BigDecimal.ZERO : new BigDecimal(returnJson.get("actFeed").toString());
+                    BigDecimal actSpindle = Objects.isNull(returnJson.get("actSpindle")) ? BigDecimal.ZERO : new BigDecimal(returnJson.get("actSpindle").toString());
+                    log.info("actFeed:{},actSpindle:{},intervalTime:{}",
+                            returnJson.get("actFeed"),returnJson.get("actSpindle"),intervalTime);
+                    //进给速度和主轴转速同时>0 才是工作中
+                    if(actFeed.compareTo(BigDecimal.ZERO) > 0 && actSpindle.compareTo(BigDecimal.ZERO) > 0){
+                        todayWorkTime = todayWorkTime.add(intervalTime);
+                    }
                 }
 
                 String startDate = nowDate + " " + "00:00:00"; //默认早上0点
@@ -299,7 +334,13 @@ public class DeviceCollectionTaskJob {
                 long workhour = DateUtil.between(DateUtil.parse(startDate), date, DateUnit.MINUTE);//当天的实际工作时长(分钟)
 
                 BigDecimal sumBig = new BigDecimal(workhour);
-                deviceRate = todayPowerOnTime.divide(sumBig, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
+                //deviceRate = todayPowerOnTime.divide(sumBig, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
+                if(todayPowerOnTime.compareTo(BigDecimal.ZERO) > 0 && todayWorkTime.compareTo(BigDecimal.ZERO) > 0){
+                    deviceRate = todayWorkTime.divide(todayPowerOnTime, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
+
+                }else{
+                    deviceRate = BigDecimal.ZERO;
+                }
                 if(deviceRate.compareTo(new BigDecimal("100")) > 0){
                     deviceRate = new BigDecimal("100");
                 }
@@ -307,8 +348,8 @@ public class DeviceCollectionTaskJob {
             }
 
 
-            String sql = "update device_collection_detail set detail_info = ? , device_rate = ? , today_power_on_time = ? where id = ? ";
-            jdbcService.update("更新",sql,detailInfo, deviceRate,todayPowerOnTime,deviceCollectionDetailInfoMap.get("id"));
+            String sql = "update device_collection_detail set detail_info = ? , device_rate = ? , today_power_on_time = ? ,today_work_time = ? where id = ? ";
+            jdbcService.update("更新",sql,detailInfo, deviceRate,todayPowerOnTime,todayWorkTime,deviceCollectionDetailInfoMap.get("id"));
 
         }else{
             //新增
@@ -324,6 +365,40 @@ public class DeviceCollectionTaskJob {
         }
     }
 
+    public void saveOrUpdateDeviceReportInfo(Object deviceId,String deviceWorkState){
+
+        Map<String, Object> deviceReport = jdbcService.findOne("select * from device_report where device_id = ? order by create_time desc LIMIT 1 ", deviceId);
+
+        Date date = new Date();
+        if(CollectionUtil.isNotEmpty(deviceReport)){
+            //判断当前设备状态和表中存的数据状态是否一致
+            String hisDeviceWorkState = deviceReport.get("deviceState").toString();
+
+            if(!hisDeviceWorkState.equals(deviceWorkState)){
+                //不一致,状态变更
+
+
+                String startTimeStr = deviceReport.get("startTime").toString().replace("T"," ");
+                DateTime startTime = DateUtil.parse(startTimeStr, "yyyy-MM-dd HH:mm:ss");
+
+                long keepTime = DateUtil.between(startTime, date, DateUnit.MINUTE);
+
+                //更新
+                String updateSql = "update device_report set  end_time = ?,keep_time = ? ,create_time = ?  where id = ? ";
+                jdbcService.update("更新",updateSql, DateUtil.format(date,"yyyy-MM-dd HH:mm:ss"),keepTime,startTimeStr,deviceReport.get("id"));
+
+                //新增
+                String insertSql = "insert into device_report (id,device_id,start_time,device_state,create_time) values(?,?,?,?,?) ";
+                jdbcService.update(insertSql,snowflake.nextId(), deviceId,DateUtil.format(date,"yyyy-MM-dd HH:mm:ss"),deviceWorkState, DateUtil.format(date,"yyyy-MM-dd HH:mm:ss"));
+            }
+        }else{
+            //没有数据,新增
+            String insertSql = "insert into device_report (id,device_id,start_time,device_state,create_time) values(?,?,?,?,?) ";
+            jdbcService.update(insertSql,snowflake.nextId(), deviceId,DateUtil.format(date,"yyyy-MM-dd HH:mm:ss"),deviceWorkState, DateUtil.format(date,"yyyy-MM-dd HH:mm:ss"));
+
+        }
+    }
+
     public void deviceCollectionInfoWriteFile(JSONObject returnJson,Object ip) throws IOException {
         Date date = new Date();
         String nowDate = DateUtil.format(date, "yyyy-MM-dd");
@@ -392,7 +467,7 @@ public class DeviceCollectionTaskJob {
             e.printStackTrace();
             log.info("连接报错:{}",getMsg(e));
         }
-        //returnInfo = "{\"code\":0,\"result\":false,\"msg\":\"调用失败\",\"statusCode\":200,\"toolsInfo\":null,\"toolsData\":null,\"errorsInfo\":\"\",\"runDatasInfo\":\"\",\"deviceData\":null,\"mainProg\":null,\"actFeed\":null,\"spindleMagnification\":null,\"feedRateOvr\":null,\"actSpindle\":null,\"powerOnTime\":null,\"deviceState\":\"离线\"}";
+        //returnInfo = "{\"msg\":\"调用成功\",\"actFeed\":\"900\",\"code\":0,\"powerOnTime\":\"1544522\",\"deviceData\":null,\"feedRateOvr\":\"30\",\"mainProg\":\"111.PTP\",\"result\":true,\"toolsInfo\":null,\"runDatasInfo\":\"\",\"errorsInfo\":\"\",\"spindleMagnification\":\"78\",\"actSpindle\":\"1570\",\"deviceState\":\"在线\",\"toolsData\":null,\"statusCode\":200}";
         log.info("返回值:{}",returnInfo);
         return returnInfo;
     }

BIN
src/main/resources/static/admin/picture/device/未知.png