You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

286 lines
9.4 KiB

using NFine.Application.WMS;
using NFine.Code;
using NFine.Data.Extensions;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Dynamic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace NFine.Web.Areas.WMS.Controllers
{
public class IntelligentDeviceIntegrationController : ControllerBase
{
IntelligentDeviceIntegrationApp App = new IntelligentDeviceIntegrationApp();
// GET: WMS/IntelligentDeviceIntegration
public ActionResult RegionalMaxNum()
{
return View();
}
public ActionResult RegionalMaxNumAdd()
{
return View();
}
public ActionResult LocationBindingCoordinate()
{
return View();
}
public ActionResult LocationBindingCoordinateAdd()
{
return View();
}
public ActionResult AGVKanBan()
{
return View();
}
//获取仓库
[HttpGet]
[HandlerAjaxOnly]
public ActionResult GetWarehouseID()
{
DataTable dt = App.GetWarehouseID();
return Content(dt.ToJson());
}
//根据仓库获取区域
[HttpGet]
[HandlerAjaxOnly]
public ActionResult GetRegion(string WHID)
{
DataTable dt = App.GetRegion(WHID);
return Content(dt.ToJson());
}
[HttpPost]
[HandlerAjaxOnly]
public ActionResult OperateICSCoordinate(string keyValue)
{
string msg = App.OperateICSCoordinate(keyValue);
if (!string.IsNullOrEmpty(msg))
{
return Error(msg);
}
else
{
return Success("操作成功!");
}
}
[HttpGet]
[HandlerAjaxOnly]
public ActionResult GetInfo(string ID)
{
DataTable ListData = App.GetInfo(ID);
var JsonData = new
{
rows = ListData,
};
return Content(JsonData.ToJson());
}
[HttpPost]
[HandlerAjaxOnly]
public ActionResult OperateICSCoordinateLandmark(string keyValue)
{
string msg = App.OperateICSCoordinateLandmark(keyValue);
if (!string.IsNullOrEmpty(msg))
{
return Error(msg);
}
else
{
return Success("操作成功!");
}
}
//[HttpPost]
//public JsonResult GetRegionRange(string WHID, string region)
//{
// DataTable ListData = App.GetRegionRange(WHID, region);
// if (ListData.Rows.Count > 0)
// {
// return Json(new { X = ListData.Rows[0]["X"].ToString(), Y = ListData.Rows[0]["Y"].ToString() }, JsonRequestBehavior.AllowGet);
// }
// return Json(new { X = 0, Y = 0 }, JsonRequestBehavior.AllowGet);
//}
//[HttpPost]
//public JsonResult GetLandmarkData(string WHID, string region)
//{
// DataTable ListData = App.GetLandmarkData(WHID, region);
// var result = new List<dynamic>();
// foreach (DataRow row in ListData.Rows)
// {
// dynamic item = new ExpandoObject();
// var dict = (IDictionary<string, object>)item;
// foreach (DataColumn column in ListData.Columns)
// {
// dict[column.ColumnName] = row[column];
// }
// result.Add(item);
// }
// return Json(result, JsonRequestBehavior.AllowGet);
//}
// AJAX接口:根据仓库+区域,获取坐标数据并渲染表格
[HttpPost]
public ActionResult GetWarehouseGrid(string whid, string region)
{
try
{
// 1. 查询 ICSCoordinate,获取 X、Y 最大值
string sql = @"SELECT X, Y FROM dbo.ICSCoordinate WHERE WHID = '"+ whid + "' AND Region = '"+ region + "'";
DataTable coordinateTable = SqlHelper.GetDataTableBySql(sql);
if (coordinateTable.Rows.Count == 0)
{
return Json(new { success = false, message = "未找到该仓库区域的坐标配置" });
}
DataRow coordinateRow = coordinateTable.Rows[0];
int maxX = Convert.ToInt32(coordinateRow["X"]);
int maxY = Convert.ToInt32(coordinateRow["Y"]);
// 2. 查询 ICSCoordinateLandmark,获取库位数据
//string sql2 = @"SELECT cl.X, cl.Y, cl.Landmark, cl.State, cl.LocationID, c.WHID, c.Region
// FROM dbo.ICSCoordinateLandmark cl
// JOIN dbo.ICSCoordinate c ON cl.X <= c.X AND cl.Y <= c.Y
// WHERE WHID = '" + whid + "' AND Region = '" + region + "' ";
string sql2 = @"select a.X, a.Y, a.Landmark, a.State, a.LocationID,c.WHID, c.Region ,d.LotNo,e.InvCode,f.InvName,g.InDate from ICSCoordinateLandmark a
left join dbo.ICSLocation b on a.LocationID=b.ID and a.WorkPoint=b.WorkPoint
left join ICSCoordinate c on b.WHID=c.WHID and b.Region = c.Region and a.WorkPoint=c.WorkPoint
left join ICSSmartDevice d on a.LocationID=d.LocationID and b.LocationCode=d.LocationCode and a.WorkPoint=d.WorkPoint
left join dbo.ICSInventoryLot e on d.LotNo=e.LotNo and a.WorkPoint=e.WorkPoint
left join dbo.ICSInventory f on e.InvCode=f.InvCode and a.WorkPoint=f.WorkPoint
left join dbo.ICSWareHouseLotInfo g on e.LotNo=g.LotNo and a.WorkPoint=g.WorkPoint
WHERE c.WHID = '" + whid + "' AND c.Region = '" + region + "' ";
DataTable landmarkTable = SqlHelper.GetDataTableBySql(sql2);
// 3. 构造返回给前端的数据
var result = new
{
success = true,
maxX = maxX,
maxY = maxY,
landmarks = landmarkTable.AsEnumerable().Select(row => new
{
X = row.Field<int>("X"),
Y = row.Field<int>("Y"),
LotNo = row.Field<string>("LotNo"),
InvCode = row.Field<string>("InvCode"),
InvName = row.Field<string>("InvName"),
InDate = row.IsNull("InDate")
? null
: row.Field<DateTime>("InDate").ToString("yyyy-MM-dd HH:mm:ss"),
State = row.Field<string>("State")
}).ToList()
};
return Json(result);
}
catch (Exception ex)
{
return Json(new { success = false, message = ex.Message });
}
}
[HttpPost]
/// <summary>
/// 文件上传到本地
/// </summary>
public string UploadFile(string Type)
{
try
{
HttpFileCollection hpFiles = System.Web.HttpContext.Current.Request.Files;
if (hpFiles != null && hpFiles.Count > 0)
{
string IsXls = System.IO.Path.GetExtension(hpFiles[0].FileName).ToString().ToLower();//System.IO.Path.GetExtension获得文件的扩展名
if (IsXls != ".xls" && IsXls != ".xlsx")
{
return "只可以选择Excel(.xls .xlsx)文件";//当选择的不是Excel文件时,返回
}
string filename = DateTime.Now.ToString("yyyyMMddhhmmss") + Guid.NewGuid() + IsXls; //获取Execle文件名 DateTime日期函数
string savePath = System.Web.HttpContext.Current.Server.MapPath("~\\File\\UPLoadFile\\" + filename);//Server.MapPath 获得虚拟服务器相对路径
int iLen = hpFiles[0].ContentLength;
if (Directory.Exists(savePath)) return "文件已存在";
byte[] bData = new byte[iLen];
hpFiles[0].InputStream.Read(bData, 0, iLen);
FileStream newFile = new FileStream(savePath, FileMode.OpenOrCreate);
newFile.Write(bData, 0, bData.Length);
newFile.Flush();
int _FileSizeTemp = hpFiles[0].ContentLength;
newFile.Close();
newFile.Dispose();
//bool del = false;
string mess = "";
mess = App.SetData_PR(savePath, Type);
if (System.IO.File.Exists(savePath))//删除文件
{
System.IO.File.Delete(savePath);
}
if (!string.IsNullOrEmpty(mess))
{
mess = "导入失败:" + mess;
}
else
{
mess = "导入成功!";
}
return mess;
}
else
{
return "获取文件失败";
}
}
catch (Exception ex)
{
return ex.ToString();
}
}
}
}