1. 程式人生 > 資訊 >訊息稱三星 Galaxy Buds + 真無線耳機已停產

訊息稱三星 Galaxy Buds + 真無線耳機已停產

package cn.mrktech.bus.core;

import cn.mrktech.bus.config.KukaConfig;
import cn.mrktech.bus.domain.BusProduce;
import cn.mrktech.bus.models.CoreDataModel;
import cn.mrktech.bus.models.MachineModel;
import cn.mrktech.bus.models.dto.ProduceCellDTO;
import cn.mrktech.bus.service.IBusProduceService;
import cn.mrktech.common.utils.DateUtil;
import cn.mrktech.common.utils.DateUtils;
import cn.mrktech.common.utils.StringUtil;
import cn.mrktech.common.utils.http.HttpUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeoutException;

/**

  • 和MES的通訊介面,向MES傳送訂單完成和狀態變更資料
    */
    @Service
    public class SendToMESService {
    private static final Logger log = LoggerFactory.getLogger(SendToMESService.class);

    @Autowired
    private KukaConfig kukaConfig;
    @Autowired
    private IBusProduceService produceService;
    @Autowired
    private CoreDataModel coreDataModel;
    @Autowired
    private ThreadPoolTaskExecutor taskExecutor;

    /**

    • 傳送加工完成資料
    • 請求引數說明: 欄位名稱 欄位描述 資料型別
    • workOrderId 三級任務單號 string
    • machineId 裝置編號 string
    • fileId NC檔案 string
    • count 加工次數 int
    • startTime 開工時間 datetime
    • endTime 完工時間 datetime
    • 返回引數說明: 欄位名稱 欄位描述 資料型別
    • code string
    • msg string
    • 定時任務讀取資料庫,傳送成功後更新
      */

    @Scheduled(initialDelay = 30000, fixedDelay = 5000)
    public void sendOrderCompleteMsg(Long id){
    QueryWrapper wrapper = new QueryWrapper();
    wrapper.eq("send_flag", "0");
    if(id!=null){
    wrapper.gt(false,"id",id);
    }
    wrapper.last("limit 200");
    List ps = produceService.list(wrapper);
    if(psnull || ps.size()

    0){
    return ;
    }

     for (BusProduce p:ps
          ) {
         try {
             String requestUrl="http://"+kukaConfig.getMesHost()+":"+kukaConfig.getMesPort()+"/rest/mes/machine/work_order_finish";
             Map map=new HashMap();
             map.put("workOrderId",p.getWorkOrderId());
             map.put("machineId",p.getMachineId());
             map.put("fileId",p.getFileId());
             map.put("count",p.getCount());
             map.put("startTime", DateUtil.dateToString(p.getStartTime(),DateUtil.DEFAULT_DATETIME_FORMAT_SEC));
             map.put("endTime",DateUtil.dateToString(p.getEndTime(),DateUtil.DEFAULT_DATETIME_FORMAT_SEC));
             String s = JSON.toJSONString(map);
             String result = HttpUtils.sendJsonPost(requestUrl, s);
             if(StringUtil.isBlank(result)){
                 log.info("回傳加工完成通訊失敗:"+p.getId());
                 //請求失敗
                 continue;
             }
             JSONObject jsonObject = JSONObject.parseObject(result);
             if(jsonObject.containsKey("code") && "200".equals(jsonObject.getString("code"))){
                 p.setSendFlag("1");
                 produceService.updateById(p);
             }else{
                 log.info("回傳加工完成通訊返回失敗,返回資訊:"+result);
    
             }
         }catch (Exception e){
             log.error("回傳加工完成通訊異常:"+e.getMessage());
         }
     }
    

    }

    /**

    • 傳送雕刻機實時狀態 定時傳送,狀態變更時也傳送
    • 請求引數說明: 欄位名稱 欄位描述
    • machineId 裝置編碼
    • runningStatus 裝置狀態
    • type 傳送型別
    • errorCode 錯誤程式碼
    • errorMessage 錯誤資訊
    • sendTime 傳送時間
    • 返回引數說明: 欄位名稱 欄位描述
    • code
    • msg
    • @return
      */
      @Scheduled(initialDelay = 30000, fixedDelay = 300000)
      public void sendStatusSchedule(){
      Collection list = coreDataModel.getMachineMap().values();
      for (MachineModel model:list
      ) {
      sendMachineChangeMsg(model,false);
      }

    }

    public void sendMachineChangeMsg(MachineModel model,boolean isCHange){
    taskExecutor.execute(new Runnable() {
    @Override
    public void run() {
    String requestUrl="http://"+kukaConfig.getMesHost()+":"+kukaConfig.getMesPort()+"/rest/mes/machine/machine_status_collect";
    Map map=new ConcurrentHashMap();
    map.put("machineId",model.getMachineInfo().getMachineId());

                 if(model.isHasWarm() && model.getErrorList().size()>0){
                     map.put("runningStatus","3");
                     map.put("errorCode","雕刻機異常");
                     map.put("errorMessage",model.getErrorList().get(0));
                 }else{
                     switch (model.getState()){
                         case RUNNING:
                             map.put("runningStatus","1");
                             break;
                         case WAITING:
                             map.put("runningStatus","4");
                             break;
                         case STOPPED:
                             map.put("runningStatus","2");
                             break;
                         default:
                             map.put("runningStatus","2");
                             break;
                     }
                 }
    
                 map.put("type",isCHange?2:1);
                 map.put("sendTime",DateUtil.getCurrentTime(DateUtil.DEFAULT_DATETIME_FORMAT_SEC));
                 String s = JSON.toJSONString(map);
                 String result = HttpUtils.sendJsonPost(requestUrl, s);
                 if(StringUtil.isBlank(result)){
                     log.info("傳送裝置狀態通訊失敗:裝置id["+model.getKey()+"]裝置狀態["+model.getState()+"]");
                     return;
                 }
                 JSONObject jsonObject = JSONObject.parseObject(result);
                 if(!jsonObject.containsKey("code") || !"200".equals(jsonObject.getString("code"))){
                     log.info("傳送裝置狀態通訊返回失敗:裝置id["+model.getKey()+"]裝置狀態["+model.getState()+"];返回資訊:"+result);
                 }
         }
     });
    

    }

}