using HH.WCS.Mobox3.NFLZ.device;
using HH.WCS.Mobox3.NFLZ.process;
using HH.WCS.Mobox3.NFLZ.util;
using HH.WCS.Mobox3.NFLZ.wms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using static System.Runtime.CompilerServices.RuntimeHelpers;
namespace HH.WCS.Mobox3.NFLZ.core
{
///
/// 定时轮询任务
///
internal class Monitor
{
internal static void CheckThirdOutWork() {
//第三方读中间表
//var db= new SqlHelper().GetInstance("中间表的sql连接字符串");
// db.Queryable
//读到了出库单,插入到我们的表
}
internal static void CheckOutWork() {
//读自己的中间表,我们自己的表有表有个字段计数,计数小于最大值,继续出库,一次生成一条任务
}
internal static void CheckDevice() {
//检测输送线状态
S7Helper.ReadStr("plc1", 100, 1, 8);
S7Helper.ReadBit("plc1", 101, 1, 2);
S7Helper.ReadInt("plc1", 102, 1, 6);
//1 设备plc的ip deviceNo 自动建立连接
//2 设备对应的通讯项和线体类型(输送线入口、输送线出口、提升机的入口。。。。)起始读的偏移地址,写的偏移地址
//{ "deviceNo":"5","code":"9001","location":"F1CJ-SSX1-01","writeAddr900":0,"writeAddr905":-1,"writeAddr710":0,"readAddr901":2,"readAddr902":0,"lineType":1},
//3 通讯项自动读plc,读到的数据根据lineType做处理,自动创建任务或者更新任务状态(创建一个设备动作或任务动作,如果是任务动作有个线程去读)
}
///
/// 瓶盖转运
///
internal static void BottleBlankTransportation()
{
var db = new SqlHelper().GetInstance();
var jbwInfo = Settings.areaInfos.Where(a => a.areaName == "瓶盖入库接驳位" && a.enable == 1).FirstOrDefault();
if(jbwInfo != null)
{
var locInfo = db.Queryable().Where(a => a.S_AREA_CODE == jbwInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "无").Includes(a => a.LocCntrRel).First();
if(locInfo != null)
{
LogHelper.Info($"【瓶盖转运】瓶坯接驳位查询到需入库的瓶坯,货位编码:{locInfo.S_CODE}");
if(locInfo.LocCntrRel != null)
{
//创建作业
WMSHelper.CreateOpTask(locInfo.S_CODE, "", "入库", "瓶盖转运", locInfo.LocCntrRel.S_CNTR_CODE,"瓶盖");
}
else
{
LogHelper.Info($"【瓶盖转运】当前货位未绑定托盘码,货位编码:{locInfo.S_CODE}");
}
}
}
else
{
LogHelper.Info("【瓶盖转运】瓶坯接驳位未配置");
}
}
///
/// 半成品工单监控
///
///
internal static void BCPWorkSurveillance()
{
//判断当前半成品工单是否有执行中的任务,如果没有,则讲线边库的物料入库
var db = new SqlHelper().GetInstance();
var workList = db.Queryable().Where(a => a.S_WorkState == "执行中").ToList();
if(workList.Count == 0)
{
var taskInfo = db.Queryable().Where(a => a.S_TYPE == "接驳位移库" && a.S_B_STATE != "完成" && a.S_B_STATE != "取消" && a.S_B_STATE != "卸货完成" && a.S_B_STATE != "开始卸货" && a.S_B_STATE != "取货完成").First();
if(taskInfo == null)
{
var areaInfo = Settings.areaInfos.Where(a => (a.areaName == "瓶坯非即产即用" || a.areaName == "瓶坯即产即用A") && a.enable == 1).ToList();
if (areaInfo.Count > 0)
{
foreach (var a in areaInfo)
{
var locInfo = db.Queryable().Where(b => b.S_AREA_CODE == a.areaCode && b.N_CURRENT_NUM > 0 && b.S_LOCK_STATE == "无").Includes(b => b.LocCntrRel).First();
if (locInfo != null)
{
//创建作业
WMSHelper.CreateOpTask(locInfo.S_CODE, "", "入库", "接驳位移库", locInfo.LocCntrRel.S_CNTR_CODE);
}
}
}
var areaInfoTwo = Settings.areaInfos.Where(a => a.areaName == "瓶坯即产即用B" && a.enable == 1).First();
if (areaInfoTwo != null)
{
var locInfo = db.Queryable().Where(a => a.S_AREA_CODE == areaInfoTwo.areaCode && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).Includes(a => a.LocCntrRel).ToList();
if(locInfo.Count > 0)
{
foreach(var a in locInfo)
{
if(a.S_LOCK_STATE == "无")
{
//创建作业
WMSHelper.CreateOpTask(a.S_CODE, "", "入库", "接驳位移库", a.LocCntrRel.S_CNTR_CODE,"瓶坯");
break;
}
}
}
}
}
}
}
}
}