using HH.WCS.QingXigongchang.core;
using HH.WCS.QingXigongchang.device;
using HH.WCS.QingXigongchang.process;
using HH.WCS.QingXigongchang.util;
using HH.WCS.QingXigongchang.wms;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Text.RegularExpressions;
using System.Threading;
using System.Web.Http;
using System.Web.Http.Results;
using static HH.WCS.QingXigongchang.api.ApiHelper;
using static HH.WCS.QingXigongchang.api.ApiModel;
using static HH.WCS.QingXigongchang.process.DeviceProcess;
using static HH.WCS.QingXigongchang.util.HttpHelper;
using Monitor = HH.WCS.QingXigongchang.core.Monitor;
namespace HH.WCS.QingXigongchang.api
{
///
/// 第三方调用的接口
///
[RoutePrefix("api")]
public class WmsController : System.Web.Http.ApiController
{
//[HttpPost]
//public SimpleResult AddTask(AddTaskModel model) {
// ApiHelper.AddTask(model);
// return new SimpleResult();
//}
//已经改用mobox上lua脚本处理
//[HttpPost]
//[Route("CleanReport")]
//public SimpleResult CleanReport(LocationModel model) {
// LogHelper.Debug("CleanReport Request:" + JsonConvert.SerializeObject(model));
// return ApiHelper.CleanReport(model);
//}
[HttpPost]
[Route("ResetDevice")]
public SimpleResult ResetDevice(DeviceModel model)
{
LogHelper.Info("ResetDevice Request:" + JsonConvert.SerializeObject(model));
return ApiHelper.ResetDevice(model);
}
///
/// 锁一排
///
///
///
///
[HttpGet]
[Route("LockRow")]
public SimpleResult LockRow(string area, int row)
{
SimpleResult result = new SimpleResult();
List rows = new List();
var areas = area?.Split(':').ToList();
var index = 0;
if (areas.Count() > 1) //KKQ split count =1
{
area = areas[0];
index = 1;
areas.RemoveAt(0);
rows = Array.ConvertAll(areas.ToArray(), s => int.Parse(s)).ToList();
}
else
{
if (index < 1 && row == 0)
{
result.resultCode = 2;
result.resultMsg = $"库区排不可为空;";
return result;
}
rows.Add(row);
}
if (rows.Count == 0)
{
result.resultCode = 2;
result.resultMsg = $"库区排不可为空;";
return result;
}
return ApiHelper.Outgo1(area, rows);
}
[HttpGet]
[Route("ClearLoc")]
public SimpleResult ClearLoc(string area, int row)
{
SimpleResult result = new SimpleResult() { resultCode = 0 };
if (string.IsNullOrEmpty(area) || row < 1)
{
result.resultCode = 2;
result.resultMsg = $"库区排不可为空;";
return result;
}
return ApiHelper.clearLoc(area, new List { row });
}
[HttpGet]
[Route("LockR")]
public SimpleResult LockR(string area, int row)
{
SimpleResult result = new SimpleResult() { resultCode = 0 };
if (string.IsNullOrEmpty(area) || row < 1)
{
result.resultCode = 2;
result.resultMsg = $"库区排不可为空;";
return result;
}
return ApiHelper.clearloc(area, new List { row });
}
[HttpGet]
[Route("unLockR")]
public SimpleResult unLockR(string area, int row)
{
SimpleResult result = new SimpleResult() { resultCode = 0 };
if (string.IsNullOrEmpty(area) || row < 1)
{
result.resultCode = 2;
result.resultMsg = $"库区排不可为空;";
return result;
}
return ApiHelper.unlockrow(area, new List { row });
}
[HttpGet]
[Route("unLockRow")]
public SimpleResult unLockRow(string area, int row)
{
List rows = new List();
var areas = area?.Split(':').ToList();
var index = 0;
if (areas.Count() > 1) //KKQ split count =1
{
area = areas[0];
index = 1;
areas.RemoveAt(0);
rows = Array.ConvertAll(areas.ToArray(), s => int.Parse(s)).ToList();
}
else
{
SimpleResult result = new SimpleResult();
if (index < 1 && row == 0)
{
result.resultCode = 2;
result.resultMsg = $"库区排不可为空;";
return result;
}
rows.Add(row);
}
return ApiHelper.Outgo2(area, rows);
}
///
/// 绑定单个
///
///
///
///
[HttpGet]
[Route("BindLoc")]
public SimpleResult BindLoc(string loc, string IsJCJY)
{
SimpleResult res;
try
{
res = ApiHelper.Outgo3("---货位有库区。 。----", IsJCJY, loc);
}
catch (Exception ex)
{
res = new SimpleResult() { resultCode = 2, resultMsg = ex.Message };
}
return res;
}
[HttpGet]
[Route("RunOrder")]
public SimpleResult RunOrder(string WorkNo)
{
LogHelper.Info("RunOrder" + WorkNo);
SimpleResult res = new SimpleResult() { resultCode = 0, resultMsg = "" };
try
{
var Order = WCSHelper.GetWorkOrderByOrderNo(WorkNo);
if (Order == null)
return new SimpleResult() { resultCode = -1, resultMsg = "工单号不存在!" };
var sdvi = Settings.GetDeviceInfoList().Find(x => x.deviceName == Order.SQL_PLineNo);
if (sdvi == null)
return new SimpleResult() { resultCode = -1, resultMsg = "工单对应的产线号DeviceInfo不存在!" };
for (var i = 0; i < sdvi.location.Length; i++)
{
PlcHelper.SendHex(sdvi.address, "3F00" + (i + 1) + "0" + "0d0a");
}
}
catch (Exception ex)
{
res = new SimpleResult() { resultCode = -1, resultMsg = ex.Message };
}
return res;
}
///
/// 成品绑定。
///
/// 货位。
/// 产线号 ,.防止因为后期增加多个产线 -
///
[HttpGet]
[Route("BindCP")]
public SimpleResult BindLocCP(string loc, string LineNo, string arco)
{
SimpleResult res;
try
{
res = ApiHelper.BindCp(loc, LineNo, arco);
}
catch (Exception ex)
{
res = new SimpleResult() { resultCode = -1, resultMsg = ex.Message };
}
return res;
}
///
/// 绑定 货位所在aroc 成品用
///
///
///
///
///
[HttpGet]
[Route("BindLoc2")]
public SimpleResult BindLoc2(string loc, string btype, string arco)
{
SimpleResult res;
try
{
res = ApiHelper.Outgo31(loc, btype, arco);
}
catch (Exception ex)
{
res = new SimpleResult() { resultCode = 2, resultMsg = ex.Message };
}
return res;
}
///
/// 瓶坯。 满眶入库,转绑满眶出库。
///
///
///
///
[HttpPost]
[Route("BindLoc3")]
public SimpleResult BindLoc3(dynamic ooo)
{
var loc = ooo.loc.ToString();
var LineNo = ooo.LineNo.ToString();
string ItemCode = ooo.ItemCode.ToString();
LogHelper.Info("BindLoc3" + JsonConvert.SerializeObject(ooo));
if (string.IsNullOrEmpty(ItemCode) || string.IsNullOrEmpty(LineNo))
{
return SimpleResult.Error($"物料{ItemCode} 或 产线{LineNo} 不能空。");
}
SimpleResult res;
try
{
if (!ItemCode.Contains("纸箱"))
{
var item = ContainerHelper.GetItem(ItemCode);
if (item == null) { return SimpleResult.Error(ItemCode + "数据不存在"); }
ItemCode = item.S_ITEM_CODE;
}
res = ApiHelper.Outgo33(loc, LineNo + ">" + ItemCode);
}
catch (Exception ex)
{
res = new SimpleResult() { resultCode = 2, resultMsg = ex.Message };
}
return res;
}
///
/// 空筐解绑。
///
///
///
///
[HttpPost]
[Route("unBindLoc3")]
public SimpleResult unBindLoc3(dynamic ooo)
{
var loc = ooo.loc.ToString();
LogHelper.Info("unBindLoc3" + JsonConvert.SerializeObject(ooo));
if (string.IsNullOrEmpty(loc))
{
return SimpleResult.Error($"参数:{loc} 不能空。");
}
SimpleResult res;
try
{
res = ApiHelper.unOutgo33(loc);
}
catch (Exception ex)
{
res = new SimpleResult() { resultCode = 2, resultMsg = ex.Message };
}
return res;
}
///
/// 瓶坯 空 满 即产 绑定。
///
/// 货位
/// area row col one
/// J 即产 F 非即产
///
[HttpPost]
[Route("PPBindLocs")]
public SimpleResult PPBindLocs(dynamic ooo)
{
string loc = ooo.loc.ToString();
string arco = ooo.arco.ToString();
string item = ooo.item.ToString();
if (string.IsNullOrEmpty(item))
{
return SimpleResult.Error($"物料{item} 找不到物料");
}
SimpleResult res;
try
{
res = ApiHelper.Outgo34(loc, "", arco, item);
}
catch (Exception ex)
{
res = new SimpleResult() { resultCode = 2, resultMsg = ex.Message };
}
return res;
}
[HttpGet]
[Route("PPunBindLocs")]
public SimpleResult unPPBindLocs(string loc, string arco)
{
SimpleResult res;
try
{
res = ApiHelper.Outgo34(loc, "", arco, "", false);
}
catch (Exception ex)
{
res = new SimpleResult() { resultCode = 2, resultMsg = ex.Message };
}
return res;
}
[HttpGet]
[Route("unBindLoc")]
public SimpleResult unBindLoc(string loc, string arco)
{
return ApiHelper.unOutgo3("--- 不用传。----", loc, arco);
}
///
/// 按列绑定
///
///
///
///
[HttpGet]
[Route("BindLocs")]
public SimpleResult BindLocs(string area, string col)
{
SimpleResult result = new SimpleResult();
List rows = new List();
var areas = area?.Split(':').ToList();
var index = 0;
if (areas.Count() > 1) //KKQ split count =1
{
area = areas[0];
index = 1;
areas.RemoveAt(0);
rows = Array.ConvertAll(areas.ToArray(), s => int.Parse(s)).ToList();
}
else
{
if (index < 1 && string.IsNullOrEmpty(col))
{
result.resultCode = 2;
result.resultMsg = $"库区列不可为空;";
return result;
}
rows.Add(Convert.ToInt32(col));
}
//KKQ:1:2:3
return ApiHelper.Outgo4(area, rows);
}
[HttpGet]
[Route("GetAREACount")]
public SimpleResult GetAREACount(string area, int count)
{
List strl = new List();
IEnumerable Li = from x in Settings.GetDeviceInfoList()
where x.deviceType == 8
select x;
Dictionary dic = new Dictionary();
foreach (Settings.deviceInfo i in Li)
{
ApiModel.SimpleResult r = ApiHelper.GetAREACount(i.deviceNo[0]);
string no = i.deviceNo[0];
if (!string.IsNullOrEmpty(Regex.Match(no, "^[1-9]+").Groups[0].Value))
{
no = "o" + no;
}
dic.Add(no, r.resultCode);
}
//dic.Add("o1PPMK", 1);
//dic.Add("o2PPMK", 2);
//dic.Add("o3PPMK", 3);
//dic.Add("o4PPMK", 4);
//dic.Add("o5PPMK", 5);
//dic.Add("o6PPMK", 6);
return new ApiModel.SimpleResult
{
resultCode = 1,
result = new List