using Newtonsoft.Json;
|
using Newtonsoft.Json.Linq;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Threading;
|
using System.Web.Http;
|
|
using yunneiPda.EnumDefine;
|
using yunneiPda.Models;
|
using yunneiPda.orm;
|
|
namespace yunneiPda.Controllers
|
{
|
public class pdaController : ApiController
|
{
|
// public static yunneiWCS.IyunneiWcfClient wcsWcf = new yunneiWCS.IyunneiWcfClient();
|
//public yunneiPda.WCSserver.IyunneiWcfClient wcsWcf = new WCSserver.IyunneiWcfClient();
|
public static Mutex single = new Mutex();
|
/// <summary>
|
/// 下线站点号(包括缸体和缸盖的)
|
/// </summary>
|
List<string> stations = new List<string> { "GTD1", "GTD2", "GTD3", "GGDA1", "GGDA2", "GGDA3", "GGDB1", "GGDB2", "GGDB3" };
|
/// <summary>是否是缸体下线点
|
///
|
/// </summary>
|
List<string> stationsIsGT = new List<string> { "GTD1", "GTD2", "GTD3" };
|
/// <summary>
|
/// 缸盖上线站点号
|
/// </summary>
|
List<string> GGstations = new List<string> { "GGU1", "GGU2", "GGU3" };
|
/// <summary>
|
/// 缸体上线站点号
|
/// </summary>
|
List<string> GTstations = new List<string> { "GTU1", "GTU2", "GTU3", "GTU4", "GTU5" }; //增加旁路工位GTU4 GTU5 【Editby shaocx,2022-04-23】
|
/// <summary>测试通信
|
/// 测试通信
|
/// </summary>
|
/// <returns></returns>
|
[HttpGet]
|
public string test()
|
{
|
|
return "123";
|
}
|
/// <summary>用户登录
|
///
|
/// </summary>
|
/// <param name="value"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public resMsg<string> login([FromBody] user value)
|
{
|
resMsg<string> msg = new resMsg<string>();
|
List<string> qx = new List<string> { "缸体下线", "缸盖下线", "缸盖上线" };
|
try
|
{
|
if (value.userName == "pda")
|
{
|
if (value.passWord == "123456")
|
{
|
msg.status = 200;
|
msg.date = qx;
|
msg.name = "pda管理员";
|
}
|
else
|
{
|
msg.status = 400;
|
msg.msg = "密码错误";
|
}
|
}
|
else
|
{
|
msg.status = 400;
|
msg.msg = "无此用户";
|
}
|
}
|
catch (Exception)
|
{
|
|
}
|
return msg;
|
|
}
|
/// <summary>获取入库表单
|
///
|
/// </summary>
|
/// <param name="value">每页数量,第几页,1是缸体2是缸盖</param>
|
/// <returns></returns>
|
[HttpPost]
|
public resMsg<inStockOrder> GTcode([FromBody] paping value)
|
{
|
resMsg<inStockOrder> msg = new resMsg<inStockOrder>();
|
msg.status = 400;
|
try
|
{
|
using (dbmodel mod = new dbmodel())
|
{
|
|
List<inStockOrder> stock = mod.inStockOrder.Where(x => x.status < 4 && x.orderType == value.id).OrderByDescending(x => x.orderCodeId).ToList();
|
// List<inStockOrder> stock = mod.inStockOrder.ToList();
|
List<inStockOrder> fenyeRerult = new List<inStockOrder>();
|
if (stock.Count > 0)
|
{
|
#region MyRegion
|
msg.status = 200;
|
msg.total = stock.Count;
|
|
//假如每页数量 大于盘点数据
|
if (value.pagesize > stock.Count)
|
{
|
msg.date = stock;
|
}
|
else
|
{
|
#region 分页计算
|
int a = value.pagesize;
|
|
int b = value.pagenum;
|
int c = (int)Math.Ceiling((double)stock.Count / a);
|
int d = stock.Count % a;
|
int e = 0;
|
int f = a * (b - 1);
|
if (d != 0 && b == c)
|
{
|
e = d + f;
|
|
}
|
else
|
{
|
e = a + f;
|
}
|
|
|
|
for (int i = f; i < e; i++)
|
{
|
fenyeRerult.Add(stock[i]);
|
}
|
msg.date = fenyeRerult;
|
#endregion
|
|
}
|
#endregion
|
}
|
else
|
{
|
|
msg.total = 1;
|
msg.date = null;
|
msg.msg = "没有待执行数据";
|
}
|
|
|
}
|
}
|
catch (Exception ex)
|
{
|
msg.msg = "获取异常";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GTcode", ex.ToString());
|
}
|
LogTextHelper.BatchDeleteLog();
|
return msg;
|
}
|
|
#region PDA组盘操作
|
|
/// <summary>组盘,保存入库表单
|
///
|
/// </summary>
|
/// <param name="value"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public resMsg<string> saveInCode([FromBody] inStockEntity<serialNumbers> value)
|
{
|
resMsg<string> msg = new resMsg<string>();
|
msg.status = 400;
|
#region 验证参数
|
if (value == null)
|
{
|
msg.msg = "参数为空";
|
return msg;
|
}
|
else
|
{
|
if (value.dataList.Count < 1)
|
{
|
msg.msg = "入库数量为0";
|
return msg;
|
}
|
if (string.IsNullOrEmpty(value.productCode))
|
{
|
msg.msg = "物料编号为空";
|
return msg;
|
}
|
if (string.IsNullOrEmpty(value.station))
|
{
|
msg.msg = "站点号为空";
|
return msg;
|
}
|
var isTrans = SysGloble.TransStations.Contains(value.station);
|
if (isTrans)
|
{//说明是手动入库
|
if (!string.IsNullOrEmpty(value.toStieCode))
|
{
|
msg.msg = "手动入库时,目标站点必须为空";
|
return msg;
|
}
|
}
|
}
|
#endregion
|
try
|
{
|
using (dbmodel mod = new dbmodel())
|
{
|
#region 事务处理
|
using (var trans = mod.Database.BeginTransaction())
|
{
|
try
|
{
|
var errMsg = "";
|
|
#region 首先要请清除已经创建的 [Editby shaocx,2022-03-31]
|
if (value.orderCodeId > 0)
|
{
|
var exist_inStockOrder = mod.inStockOrder.Find(value.orderCodeId);
|
if (exist_inStockOrder != null)
|
{
|
mod.inStockOrder.Remove(exist_inStockOrder);
|
var exist_inStockOrderList = mod.inStockOrderList.Where(x => x.orderCodeId == value.orderCodeId).ToList();
|
if (exist_inStockOrderList != null && exist_inStockOrderList.Count > 0)
|
{
|
mod.inStockOrderList.RemoveRange(exist_inStockOrderList);
|
}
|
mod.SaveChanges();
|
}
|
else
|
{
|
msg.msg = "表单不存在";
|
return msg;
|
}
|
}
|
|
#endregion
|
|
//验证库存中是否有该托盘号或者是流水号的东西
|
//验证库存中是否有该托盘号的东西
|
var validateResult = MyExtend.ValidateContainerCodeIsExistStockForSalverCode(mod, value.containerCode, ref errMsg);
|
if (!validateResult)
|
{
|
msg.msg = errMsg;
|
return msg;
|
}
|
validateResult = MyExtend.ValidateSerialNumbersIsExistStockForSalverCode(mod, value, ref errMsg);
|
if (!validateResult)
|
{
|
msg.msg = errMsg;
|
return msg;
|
}
|
validateResult = MyExtend.ValidateContainerCodeIsExistInInStockOrderWithNewCreateStatus(mod, value.containerCode, ref errMsg);
|
if (!validateResult)
|
{
|
msg.msg = errMsg;
|
return msg;
|
}
|
validateResult = MyExtend.ValidateSerialNumbersIsExistInInStockOrderWithNewCreateStatus(mod, value, ref errMsg);
|
if (!validateResult)
|
{
|
msg.msg = errMsg;
|
return msg;
|
}
|
|
#region 组盘,保存入库表单,验证目标站点是否有库存 [EditBy shaocx,2022-02-06]
|
|
validateResult = MyExtend.ValidateIsExistStockWhenSaveInCode(mod, value, ref errMsg);
|
if (!validateResult)
|
{
|
msg.msg = errMsg;
|
return msg;
|
}
|
#endregion
|
|
#region 组盘,保存入库表单,验证目标站点是否允许创建任务 [EditBy shaocx,2022-02-06]
|
validateResult = MyExtend.ValidateIsAllowCreateTaskWhenSaveInCode(mod, value, ref errMsg);
|
if (!validateResult)
|
{
|
msg.msg = errMsg;
|
return msg;
|
}
|
#endregion
|
|
|
|
//bool isGT = stationsIsGT.Contains(value.station);//根据来源位置判断是否是缸体下线点
|
bool isGT = value.type == "body" ? true : false;//根据来源位置判断是否是缸体下线点
|
material _material = mod.material.FirstOrDefault(x => x.materialCode == value.productCode.Trim());
|
long materialId = 0;
|
if (_material == null)//不存在就创建一个物料
|
{
|
material newMaterial = new material();
|
newMaterial.materialCode = value.productCode.Trim();
|
newMaterial.materialName = "待更新";
|
newMaterial.materialType = isGT == false ? (int)materialType.缸体 : (int)materialType.缸盖;
|
newMaterial.createTime = DateTime.Now;
|
newMaterial.creator = "pda接口";
|
newMaterial.version = "";
|
mod.material.Add(newMaterial);
|
int resAdd = mod.SaveChanges();
|
if (resAdd > 0)
|
{
|
materialId = newMaterial.materialId;
|
}
|
}
|
if (value.dataList.Count > 0)
|
{
|
string TYPE = isGT == true ? "GTX" : "GGX";
|
inStockOrder addIn = new inStockOrder();
|
addIn.productCode = value.productCode.Trim();
|
addIn.productName = _material != null ? _material.materialName : "待更新";
|
addIn.quantity = value.dataList.Count;
|
addIn.supplier = value.supplier;//供应商
|
addIn.orderType = isGT == true ? 1 : 2;//1=缸体,2=缸盖
|
addIn.siteCode = value.station;
|
addIn.toStieCode = value.toStieCode;//,表示最终去往的站点,用于处理不走立体库,直接去天永上线点的逻辑 [EditBy shaocx,2022-02-06]
|
addIn.containerCode = value.containerCode;
|
//addIn.status = (int)taskStatus.新建;
|
addIn.status = (int)InStockOrderStatus.新建;
|
addIn.orderCode = TYPE + DateTime.Now.ToString("yyMMddHHmmssff");//入库单号,自己生成
|
addIn.createDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); ;
|
addIn.version = _material != null ? _material.version : "";// 机型 【EditBy shaocx,2022-01-17】
|
mod.inStockOrder.Add(addIn);
|
int ress = mod.SaveChanges();
|
if (ress == 1)
|
{
|
#region 保存流水明细
|
for (int i = 0; i < value.dataList.Count; i++)
|
{
|
inStockOrderList orderList = new inStockOrderList();
|
orderList.productCode = value.productCode.Trim();
|
orderList.productName = _material != null ? _material.materialName : "无此物料数据";
|
orderList.serialNumber = value.dataList[i].serialNumber;
|
orderList.orderCodeId = addIn.orderCodeId;
|
|
mod.inStockOrderList.Add(orderList);
|
}
|
|
ress = mod.SaveChanges();
|
if (ress == value.dataList.Count)
|
{
|
msg.status = 200;
|
|
}
|
else
|
{
|
msg.msg = "保存数据失败";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "saveInCode", "保存数据失败");
|
}
|
#endregion
|
}
|
else
|
{
|
msg.msg = "主表保存失败,请重试";
|
}
|
|
}
|
else
|
{
|
msg.msg = "流水号数量为零,请添加";
|
}
|
|
}
|
catch (Exception)
|
{
|
|
throw;
|
}
|
finally
|
{
|
if (msg.status != 200)
|
{
|
trans.Rollback();
|
}
|
else
|
{
|
trans.Commit();
|
}
|
}
|
}
|
#endregion
|
}
|
}
|
catch (Exception ex)
|
{
|
msg.status = 400;
|
msg.msg = "保存异常," + ex.Message;
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "saveInCode", JsonConvert.SerializeObject(ex));
|
}
|
|
return msg;
|
}
|
|
/// <summary>验证单个流水号是否正确
|
///
|
/// </summary>
|
/// <param name="value"></param>
|
/// <returns></returns>
|
[HttpGet]
|
public resMsg<string> validateSingalSerialNumber([FromUri] int orderCodeId, string serialNumber, string productCode)
|
{
|
resMsg<string> msg = new resMsg<string>();
|
msg.status = 400;
|
#region 验证参数
|
if (string.IsNullOrEmpty(serialNumber))
|
{
|
msg.msg = "流水号不能为空";
|
return msg;
|
}
|
if (string.IsNullOrEmpty(productCode))
|
{
|
msg.msg = "物料编码不能为空";
|
return msg;
|
}
|
#endregion
|
try
|
{
|
using (dbmodel mod = new dbmodel())
|
{
|
try
|
{
|
var errMsg = "";
|
|
//验证流水号是否在其他新建表单中
|
var validateResult = MyExtend.ValidateSingleSerialNumbersIsExistInInStockOrderWithNewCreateStatus(mod, orderCodeId, serialNumber, productCode, ref errMsg);
|
if (!validateResult)
|
{
|
msg.msg = errMsg;
|
return msg;
|
}
|
//验证流水号是否在库存里
|
validateResult = MyExtend.ValidateSingleSerialNumbersIsExistStockForSalverCode(mod, serialNumber, productCode, ref errMsg);
|
if (!validateResult)
|
{
|
msg.msg = errMsg;
|
return msg;
|
}
|
msg.status = 200;
|
return msg;
|
}
|
catch (Exception)
|
{
|
|
throw;
|
}
|
finally
|
{
|
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
msg.status = 400;
|
msg.msg = "验证异常," + ex.Message;
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "validateSingalSerialNumber", JsonConvert.SerializeObject(ex));
|
}
|
|
return msg;
|
}
|
|
/// <summary>获取组盘数据
|
///
|
/// </summary>
|
/// <param name="orderCodeId"></param>
|
/// <returns></returns>
|
[HttpGet]
|
public resSingleMsg<InStockOrderView> getInCode([FromUri] int orderCodeId)
|
{
|
resSingleMsg<InStockOrderView> msg = new resSingleMsg<InStockOrderView>();
|
msg.status = 400;
|
#region 验证参数
|
if (orderCodeId == 0)
|
{
|
msg.msg = "参数为空";
|
return msg;
|
}
|
#endregion
|
try
|
{
|
using (dbmodel mod = new dbmodel())
|
{
|
try
|
{
|
inStockOrder _inStockOrder = mod.inStockOrder.Find(orderCodeId);
|
if (_inStockOrder == null)
|
{
|
msg.msg = "没有找到组盘记录";
|
return msg;
|
}
|
|
InStockOrderView _InStockOrderView = new InStockOrderView();
|
|
_InStockOrderView.orderCodeId = _inStockOrder.orderCodeId;
|
_InStockOrderView.type = _inStockOrder.orderType == 1 ? "body" : "header";//1是缸体,2是缸盖
|
_InStockOrderView.containerCode = _inStockOrder.containerCode;
|
_InStockOrderView.productCode = _inStockOrder.productCode;
|
_InStockOrderView.materialName = _inStockOrder.productName;
|
_InStockOrderView.supplier = _inStockOrder.supplier;
|
_InStockOrderView.station = _inStockOrder.siteCode;
|
_InStockOrderView.toStieCode = _inStockOrder.toStieCode;
|
|
var _inStockOrderList = mod.inStockOrderList.Where(x => x.orderCodeId == _inStockOrder.orderCodeId).ToList();
|
if (_inStockOrderList != null && _inStockOrderList.Count > 0)
|
{
|
_InStockOrderView.quantity = _inStockOrderList.Count;
|
_InStockOrderView.dataList = new List<inStockOrderDetail>();
|
int index = 0;
|
_inStockOrderList.ForEach((item) =>
|
{
|
index++;
|
_InStockOrderView.dataList.Add(new inStockOrderDetail()
|
{
|
id = index,
|
serialNumber = item.serialNumber
|
});
|
});
|
}
|
|
msg.date = _InStockOrderView;
|
msg.status = 200;
|
return msg;
|
}
|
catch (Exception)
|
{
|
|
throw;
|
}
|
finally
|
{
|
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
msg.status = 400;
|
msg.msg = "保存异常," + ex.Message;
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "saveInCode", JsonConvert.SerializeObject(ex));
|
}
|
|
return msg;
|
}
|
|
#endregion
|
|
/// <summary>呼叫空托盘
|
///
|
/// </summary>
|
/// <param name="value">站点号(注意这些站点都是AGV的下线点)</param>
|
/// <returns></returns>
|
[HttpPost]
|
public resMsg<string> callEmpty([FromUri] string value)
|
{
|
resMsg<string> res = new resMsg<string>();
|
res.status = 400;
|
bool ishave = stations.Contains(value.Trim());
|
if (!ishave)
|
{
|
res.msg = MyExtend.GetFFZDHStr(value);
|
return res;
|
}
|
try
|
{
|
using (dbmodel mod = new dbmodel())
|
{
|
string station = value.Trim().Substring(0, 2);
|
|
if (station == "GT")
|
{
|
VproductStock outStock = mod.VproductStock.FirstOrDefault(x => x.materialCode == "GT-KTP" && x.isLock == false && x.enable == true);
|
if (outStock == null)
|
{
|
res.msg = "没有库存空托盘了";
|
return res;
|
}
|
task newTask = new task();
|
newTask.createListCode = "KT" + DateTime.Now.ToString("yyMMddHHmmss");
|
//newTask.taskType = (int)taskType.呼叫空托;
|
var _taskType = taskType.呼叫空托;
|
newTask.taskType = (int)_taskType;
|
newTask.taskTypeName = _taskType.ToString();
|
newTask.taskName = "缸体呼叫空托";
|
newTask.taskStatus = (int)taskStatus.未下发;
|
newTask.sourcePlace = outStock.positionName;
|
newTask.toPlace = value.Trim();
|
newTask.area = 1;
|
newTask.priority = 1;
|
newTask.materialCode = "GT-KTP";
|
newTask.materialName = "缸体空托盘";
|
newTask.quantity = 3;
|
newTask.createTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
newTask.supplier = outStock.supplier;//供应商 【EditBy shaocx,2022-01-15】
|
newTask.containerCode = outStock.containerCode;//托盘号 【EditBy shaocx,2022-01-15】
|
newTask.version = outStock.version;
|
newTask.creator = "PDA";
|
//记录PLC任务号和AGV任务号 【EditBy shaocx,2022-03-28】
|
MyExtendHelper.SetPlcTaskNoAgvTaskNo(ref newTask);
|
|
mod.task.Add(newTask);
|
outStock.isLock = true;
|
}
|
else
|
{
|
VproductStock outStock = mod.VproductStock.FirstOrDefault(x => x.materialCode == "GG-KTP" && x.isLock == false && x.enable == true);
|
if (outStock == null)
|
{
|
res.msg = "没有库存空托盘了";
|
return res;
|
}
|
task newTask = new task();
|
newTask.createListCode = "KG" + DateTime.Now.ToString("yyMMddHHmmss");
|
//newTask.taskType = (int)taskType.呼叫空托;
|
var _taskType = taskType.呼叫空托;
|
newTask.taskType = (int)_taskType;
|
newTask.taskTypeName = _taskType.ToString();
|
newTask.taskName = "缸盖呼叫空托";
|
newTask.taskStatus = (int)taskStatus.未下发;
|
newTask.sourcePlace = outStock.positionName;
|
newTask.toPlace = value.Trim();
|
newTask.area = 2;
|
newTask.priority = 1;
|
newTask.materialCode = "GG-KTP";
|
newTask.materialName = "缸盖空托盘";
|
newTask.quantity = 3;
|
newTask.createTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
newTask.supplier = outStock.supplier;//供应商 【EditBy shaocx,2022-01-15】
|
newTask.containerCode = outStock.containerCode;//托盘号 【EditBy shaocx,2022-01-15】
|
newTask.version = outStock.version;
|
newTask.creator = "PDA";
|
//记录PLC任务号和AGV任务号 【EditBy shaocx,2022-03-28】
|
MyExtendHelper.SetPlcTaskNoAgvTaskNo(ref newTask);
|
mod.task.Add(newTask);
|
outStock.isLock = true;
|
}
|
int SaveRes = mod.SaveChanges();
|
if (SaveRes < 1)
|
{
|
SaveRes = mod.SaveChanges();
|
if (SaveRes < 1)
|
{
|
res.status = 400;
|
res.msg = "保存数据失败";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "callEmpty", "保存数据失败");
|
}
|
else
|
{
|
res.status = 200;
|
}
|
}
|
else
|
{
|
res.status = 200;
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
res.status = 400;
|
res.msg = "保存异常";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "callEmtyp", ex.ToString());
|
}
|
return res;
|
}
|
|
|
#region 人工入空托盘
|
|
[HttpPost]
|
public resMsg<string> intoEmpty([FromUri] string sourcePositionName, string type, string containerCode)
|
{
|
resMsg<string> res = new resMsg<string>();
|
res.status = 400;
|
|
if (string.IsNullOrEmpty(sourcePositionName))
|
{
|
res.msg = "站点不能为空";
|
return res;
|
}
|
if (string.IsNullOrEmpty(type))
|
{
|
res.msg = "类型不能为空";
|
return res;
|
}
|
if (string.IsNullOrEmpty(containerCode))
|
{
|
res.msg = "托盘号不能为空";
|
return res;
|
}
|
|
taskType _taskType = default(taskType);
|
positionType _positionType = type == "body" ? positionType.缸体 : positionType.缸盖;
|
int AREA = (int)_positionType;
|
var taskName = _positionType.ToString();
|
var isTrans = SysGloble.TransStations.Contains(sourcePositionName);
|
if (isTrans)
|
{//说明起点是 输送线
|
_taskType = taskType.空托手动入库;
|
}
|
else
|
{
|
_taskType = taskType.空托下线入库;
|
}
|
|
taskName = taskName + _taskType.ToString();
|
try
|
{
|
using (dbmodel mod = new dbmodel())
|
{
|
var errMsg = "";
|
//验证库存中是否有该托盘号的东西
|
var validateResult = MyExtend.ValidateContainerCodeIsExistStockForSalverCode(mod, containerCode, ref errMsg);
|
if (!validateResult)
|
{
|
res.msg = errMsg;
|
return res;
|
}
|
string toplaceWithId = "";
|
using (yunneiPda.WCSserver.IyunneiWcfClient wcsWcf = new WCSserver.IyunneiWcfClient())
|
{
|
toplaceWithId = wcsWcf.findStock(AREA);//找空库位
|
}
|
if (toplaceWithId == "")
|
{
|
res.msg = "没有空库位";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "intoEmpty", AREA + "没有空库位");
|
return res;
|
}
|
long positionid = Convert.ToInt64(toplaceWithId.Split('/')[1]);
|
position toPosition = mod.position.FirstOrDefault(x => x.positionId == positionid);
|
position sourcePosition = mod.position.FirstOrDefault(x => x.positionName == sourcePositionName);
|
task newTask = new task();
|
if (_positionType == positionType.缸体)
|
{
|
newTask.createListCode = "KTRK" + DateTime.Now.ToString("yyMMddHHmmss");
|
newTask.taskType = (int)_taskType;
|
newTask.taskTypeName = _taskType.ToString();
|
newTask.taskName = taskName;
|
newTask.taskStatus = (int)taskStatus.未下发;
|
newTask.sourcePlace = sourcePositionName;
|
newTask.toPlace = toPosition.positionName;
|
newTask.area = 1;
|
newTask.priority = 1;
|
newTask.materialCode = "GT-KTP";
|
newTask.materialName = "缸体空托盘";
|
newTask.quantity = 3;
|
newTask.createTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
newTask.supplier = "";//供应商 【EditBy shaocx,2022-01-15】
|
newTask.containerCode = containerCode;//托盘号 【EditBy shaocx,2022-01-15】
|
newTask.version = "";
|
newTask.creator = "PDA";
|
//记录PLC任务号和AGV任务号 【EditBy shaocx,2022-03-28】
|
MyExtendHelper.SetPlcTaskNoAgvTaskNo(ref newTask);
|
mod.task.Add(newTask);
|
|
}
|
else
|
{
|
newTask.createListCode = "KGRK" + DateTime.Now.ToString("yyMMddHHmmss");
|
newTask.taskType = (int)_taskType;
|
newTask.taskTypeName = _taskType.ToString();
|
newTask.taskName = taskName;
|
newTask.taskStatus = (int)taskStatus.未下发;
|
newTask.sourcePlace = sourcePositionName;
|
newTask.toPlace = toPosition.positionName;
|
newTask.area = 2;
|
newTask.priority = 1;
|
newTask.materialCode = "GG-KTP";
|
newTask.materialName = "缸盖空托盘";
|
newTask.quantity = 3;
|
newTask.createTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
newTask.supplier = "";//供应商 【EditBy shaocx,2022-01-15】
|
newTask.containerCode = containerCode;//托盘号 【EditBy shaocx,2022-01-15】
|
newTask.version = "";
|
//记录PLC任务号和AGV任务号 【EditBy shaocx,2022-03-28】
|
MyExtendHelper.SetPlcTaskNoAgvTaskNo(ref newTask);
|
mod.task.Add(newTask);
|
}
|
|
//起点和终点锁定
|
PositionHandler.Lock(true, toPosition, "入空托盘", "PDA", newTask);
|
if (sourcePosition != null)
|
{
|
PositionHandler.Lock(true, sourcePosition, "入空托盘", "PDA", newTask);
|
}
|
|
int SaveRes = mod.SaveChanges();
|
if (SaveRes < 1)
|
{
|
SaveRes = mod.SaveChanges();
|
if (SaveRes < 1)
|
{
|
res.status = 400;
|
res.msg = "保存数据失败";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "intoEmpty", "保存数据失败");
|
}
|
else
|
{
|
res.status = 200;
|
}
|
}
|
else
|
{
|
res.status = 200;
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
res.status = 400;
|
res.msg = "保存异常," + ex.Message;
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "intoEmpty", ex.ToString());
|
}
|
return res;
|
}
|
|
#endregion
|
|
#region 人工增加空托盘库存
|
|
[HttpPost]
|
public resMsg<string> addEmptySalverStore([FromUri] string sourcePositionName, string type, string containerCode)
|
{
|
resMsg<string> res = new resMsg<string>();
|
res.status = 400;
|
|
if (string.IsNullOrEmpty(sourcePositionName))
|
{
|
res.msg = "站点不能为空";
|
return res;
|
}
|
if (string.IsNullOrEmpty(type))
|
{
|
res.msg = "类型不能为空";
|
return res;
|
}
|
if (string.IsNullOrEmpty(containerCode))
|
{
|
res.msg = "托盘号不能为空";
|
return res;
|
}
|
|
taskType _taskType = taskType.空托手动入库;
|
positionType _positionType = type == "body" ? positionType.缸体 : positionType.缸盖;
|
bool ishaveGG = false;
|
if (_positionType == positionType.缸盖)
|
{
|
ishaveGG = true;
|
}
|
|
try
|
{
|
using (dbmodel mod = new dbmodel())
|
{
|
var errMsg = "";
|
//验证库存中是否有该托盘号的东西
|
var validateResult = MyExtend.ValidateContainerCodeIsExistStockForSalverCode(mod, containerCode, ref errMsg);
|
if (!validateResult)
|
{
|
res.msg = errMsg;
|
return res;
|
}
|
|
position sourcePosition = mod.position.FirstOrDefault(x => x.positionName == sourcePositionName);
|
if (sourcePosition == null)
|
{
|
res.msg = $"根据{sourcePositionName}没有找到库位";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "addEmptySalverStore", res.msg);
|
return res;
|
}
|
var dbStock = mod.productStock.FirstOrDefault(x => x.positionId == sourcePosition.positionId);
|
if (dbStock != null)
|
{
|
res.msg = $"{sourcePositionName}库位上已经有库存了";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "addEmptySalverStore", res.msg);
|
return res;
|
}
|
productStock stock = new productStock();
|
stock.positionId = sourcePosition.positionId;
|
stock.createTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
stock.materialId = ishaveGG == true ? 3 : 4;//缸体4,缸盖3 固定不变的
|
stock.quantity = 3;//默认3个
|
stock.status = 1;
|
stock.taskType = (int)_taskType;//空托盘回库
|
stock.updateTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
stock.containerCode = containerCode;//增加托盘号赋值
|
mod.productStock.Add(stock);
|
|
|
|
int SaveRes = mod.SaveChanges();
|
if (SaveRes < 1)
|
{
|
SaveRes = mod.SaveChanges();
|
if (SaveRes < 1)
|
{
|
res.status = 400;
|
res.msg = "保存数据失败";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "addEmptySalverStore", "保存数据失败");
|
}
|
else
|
{
|
res.status = 200;
|
}
|
}
|
else
|
{
|
res.status = 200;
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
res.status = 400;
|
res.msg = "保存异常," + ex.Message;
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "addEmptySalverStore", ex.ToString());
|
}
|
return res;
|
}
|
|
#endregion
|
|
/// <summary>获取物料
|
///
|
/// </summary>
|
/// <param name="value">物料编号,空返回全部</param>
|
/// <returns></returns>
|
[HttpPost]
|
public resMsg<material> getMaterial([FromUri] string value)
|
{
|
resMsg<material> res = new resMsg<material>();
|
res.status = 400;
|
if (value == null)
|
{
|
res.msg = "参数不正确";
|
return res;
|
}
|
try
|
{
|
using (dbmodel mod = new dbmodel())
|
{
|
List<material> mat = null;
|
string aa = value.Trim();
|
if (aa == "''")
|
{
|
mat = mod.material.ToList();
|
}
|
else
|
{
|
mat = mod.material.Where(x => x.materialCode == value.Trim()).ToList();
|
}
|
|
if (mat != null)
|
{
|
res.status = 200;
|
res.total = mat.Count;
|
res.date = mat;
|
|
}
|
else
|
{
|
res.msg = "获取数据失败";
|
}
|
|
}
|
}
|
catch (Exception ex)
|
{
|
res.msg = "获取异常";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "getMaterial", ex.ToString());
|
}
|
return res;
|
}
|
|
|
/// <summary>获取任务列表
|
///
|
/// </summary>
|
/// <param name="value">每页数量,第几页,任务类型</param>
|
/// <returns></returns>aaaaa
|
[HttpPost]
|
public resMsg<task> getTask([FromBody] paping value)
|
{
|
resMsg<task> msg = new resMsg<task>();
|
msg.status = 400;
|
try
|
{
|
using (dbmodel mod = new dbmodel())
|
{
|
List<task> tasksList = new List<task>();
|
if (value.id > 0)
|
{
|
int taskType = value.id;
|
tasksList = mod.task.Where(x => x.taskStatus < 5 && x.taskType == taskType).ToList();
|
}
|
else
|
{
|
tasksList = mod.task.Where(x => x.taskStatus < 5).ToList();
|
}
|
|
if (tasksList.Count > 0)
|
{
|
msg.date = tasksList;
|
msg.status = 200;
|
msg.total = tasksList.Count;
|
}
|
else
|
{
|
msg.msg = "当前条件查询数据为空!";
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
msg.msg = "获取数据失败";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "getTask", ex.ToString());
|
}
|
return msg;
|
}
|
|
/// <summary>修改下线单状态,PDA上点击【下发任务】
|
///
|
/// </summary>
|
/// <param name="value"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public resMsg<string> changeOrderStatus([FromUri] string value)
|
{
|
resMsg<string> res = new resMsg<string>();
|
res.status = 400;
|
if (value == null || value == "")
|
{
|
res.msg = "参数不正确";
|
return res;
|
}
|
try
|
{
|
using (dbmodel mod = new dbmodel())
|
{
|
inStockOrder newTask = mod.inStockOrder.FirstOrDefault(x => x.orderCode == value);
|
if (newTask != null)
|
{
|
//newTask.status = 2;
|
newTask.status = (int)InStockOrderStatus.待下发;
|
int ress = mod.SaveChanges();
|
if (ress == 1)
|
{
|
res.status = 200;
|
}
|
else
|
{
|
res.status = 400;
|
res.msg = "保存数据失败";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "changeOrderStatus", "保存数据失败");
|
}
|
|
|
}
|
else
|
{
|
res.msg = "无此单号";
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
res.msg = "保存异常";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "changeOrderStatus", ex.ToString());
|
}
|
return res;
|
|
}
|
|
|
#region 天永机器人调用的接口
|
|
#region 原先的
|
|
///// <summary>缸盖上线
|
/////
|
///// </summary>
|
///// <param name="materialCode">物料编号</param>
|
///// <param name="station">站点号</param>
|
///// <returns></returns>
|
//[HttpPost]
|
//public resMsg<string> GGoutStock([FromUri]string materialCode, string station)
|
//{
|
// WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GGoutStock", "收到物料编号;" + materialCode + "收到站点号:" + station);
|
// resMsg<string> res = new resMsg<string>();
|
// res.status = 400;
|
// bool ishave = GGstations.Contains(station.Trim());
|
// if (!ishave)
|
// {
|
// res.msg = "非法站点号";
|
// return res;
|
// }
|
// try
|
// {
|
// using (dbmodel mod = new dbmodel())
|
// {
|
// VproductStock stationIsHave = mod.VproductStock.FirstOrDefault(x => x.positionName == station);
|
// if (stationIsHave != null)
|
// {
|
// res.msg = "上料点已经有货";
|
// return res;
|
// }
|
// //VproductStock OutStock = mod.VproductStock.OrderBy(x => x.createTime).FirstOrDefault(x => x.materialCode == materialCode.Trim()&&x.positionType==(byte)positionType.余料回库 && x.isLock == false && x.positionId < 461);
|
// string sourcePlace = "";
|
// //if (OutStock == null)
|
// //{
|
// VproductStock OutStock = mod.VproductStock.OrderBy(x => x.createTime).FirstOrDefault(x => x.materialCode == materialCode.Trim() && x.isLock == false && x.positionId < 461);
|
// if (OutStock == null)
|
// {
|
// res.msg = "库存无此物料";
|
// return res;
|
// }
|
|
// //}
|
// List<productStockList> stockSerialNumber = mod.productStockList.Where(x => x.stockId == OutStock.positionId).ToList();
|
// if (stockSerialNumber.Count < 1)
|
// {
|
// res.msg = "此库存无流水号明细";
|
// return res;
|
// }
|
// sourcePlace = OutStock.positionName;
|
// task newTask = new task();
|
// newTask.createListCode = "KGS" + DateTime.Now.ToString("yyMMddHHmmss");
|
|
// var _taskType = taskType.缸盖上线;
|
// newTask.taskType = (int)_taskType;
|
// newTask.taskTypeName = _taskType.ToString();
|
// newTask.taskName = "缸盖出库";
|
// newTask.taskStatus = (int)taskStatus.未下发;
|
// newTask.sourcePlace = sourcePlace;
|
// newTask.toPlace = station.Trim();
|
// newTask.middlePlace = "";
|
// newTask.area = 2;
|
// newTask.priority = 1;
|
// newTask.materialCode = OutStock.materialCode;
|
// newTask.materialName = OutStock.materialName;
|
// newTask.quantity = stockSerialNumber.Count;
|
// newTask.createTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
// newTask.sendMesed = 1;//1=未发送,2=发送成功,3=发送失败
|
// newTask.mesReply = "未发送";
|
// newTask.supplier = OutStock.supplier;//供应商 【EditBy shaocx,2022-01-15】
|
// newTask.containerCode = OutStock.containerCode;//托盘号 【EditBy shaocx,2022-01-15】
|
// mod.task.Add(newTask);
|
// outStockList outStockRecord = new outStockList();
|
// var _OutStockOrderStatus = OutStockOrderStatus.新建;
|
// outStockRecord.outStockOrderStatus = (int)_OutStockOrderStatus;
|
// outStockRecord.outStockOrderStatusName = _OutStockOrderStatus.ToString();
|
// outStockRecord.outStockOrder = newTask.createListCode;
|
// outStockRecord.materialName = OutStock.materialName;
|
// outStockRecord.materialCode = OutStock.materialCode;
|
// outStockRecord.quantity = stockSerialNumber.Count;
|
// outStockRecord.creator = outStockRecord.lastModifier = "装配上线点";
|
// outStockRecord.createTime = newTask.createTime;
|
// outStockRecord.LastModifyTime = DateTime.Now;
|
// outStockRecord.version = OutStock.version;//机型 【EditBy shaocx,2022-01-18】
|
// mod.outStockList.Add(outStockRecord);
|
|
// OutStock.isLock = true;
|
// int ress = mod.SaveChanges();
|
// if (ress > 0)
|
// {
|
// res.status = 200;
|
// res.total = (int)newTask.taskId;
|
// }
|
// else
|
// {
|
// res.status = 400;
|
// res.msg = "保存数据失败";
|
// WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GGoutStock", "保存数据失败");
|
// }
|
// }
|
// }
|
// catch (Exception ex)
|
// {
|
// res.status = 400;
|
// res.msg = "保存异常";
|
// WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GGoutStock", ex.ToString());
|
// }
|
// return res;
|
//}
|
///// <summary>缸体上线
|
/////
|
///// </summary>
|
///// <param name="materialCode">物料编号</param>
|
///// <param name="station">站点号</param>
|
///// <returns></returns>
|
//[HttpPost]
|
//public resMsg<string> GToutStock([FromUri]string materialCode, string station)
|
//{
|
// WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GToutStock", "收到物料编号;" + materialCode + "收到站点号:" + station);
|
// resMsg<string> res = new resMsg<string>();
|
// res.status = 400;
|
// bool ishave = GTstations.Contains(station.Trim());
|
// if (!ishave)
|
// {
|
// res.msg = "非法站点号";
|
// return res;
|
// }
|
// try
|
// {
|
// using (dbmodel mod = new dbmodel())
|
// {
|
// VproductStock stationIsHave = mod.VproductStock.FirstOrDefault(x => x.positionName == station);
|
// if (stationIsHave != null)
|
// {
|
// res.msg = "上料点已经有货";
|
// return res;
|
// }
|
// //VproductStock OutStock = mod.VproductStock.OrderBy(x => x.createTime).FirstOrDefault(x => x.materialCode == materialCode.Trim()&& x.positionType==(byte)positionType.余料回库&& x.isLock == false && x.positionId < 461);
|
// string sourcePlace = "";
|
// //if (OutStock == null)
|
// //{
|
// VproductStock OutStock = mod.VproductStock.OrderBy(x => x.createTime).FirstOrDefault(x => x.materialCode == materialCode.Trim() && x.isLock == false && x.positionId < 461);
|
// if (OutStock == null)
|
// {
|
// res.msg = "库存无此物料";
|
// return res;
|
// }
|
// //}
|
// List<productStockList> stockSerialNumber = mod.productStockList.Where(x => x.stockId == OutStock.positionId).ToList();
|
// if (stockSerialNumber.Count < 1)
|
// {
|
// res.msg = "此库存无流水号明细";
|
// return res;
|
// }
|
// sourcePlace = OutStock.positionName;
|
// task newTask = new task();
|
// newTask.createListCode = "KTS" + DateTime.Now.ToString("yyMMddHHmmss");
|
// var _taskType = taskType.缸体上线;
|
// newTask.taskType = (int)_taskType;
|
// newTask.taskTypeName = _taskType.ToString();
|
// newTask.taskName = "缸体出库";
|
// newTask.taskStatus = (int)taskStatus.未下发;
|
// newTask.sourcePlace = sourcePlace;
|
// newTask.middlePlace = "";
|
// newTask.toPlace = station.Trim();
|
// newTask.area = 1;
|
// newTask.priority = 1;
|
// newTask.materialCode = OutStock.materialCode;
|
// newTask.materialName = OutStock.materialName;
|
// newTask.quantity = stockSerialNumber.Count;
|
// newTask.createTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
// newTask.sendMesed = 1;//1=未发送,2=发送成功,3=发送失败
|
// newTask.mesReply = "未发送";
|
// newTask.supplier = OutStock.supplier;//供应商 【EditBy shaocx,2022-01-15】
|
// newTask.containerCode = OutStock.containerCode;//托盘号 【EditBy shaocx,2022-01-15】
|
// mod.task.Add(newTask);
|
// outStockList outStockRecord = new outStockList();
|
// outStockRecord.outStockOrder = newTask.createListCode;
|
// outStockRecord.materialName = OutStock.materialName;
|
// outStockRecord.materialCode = OutStock.materialCode;
|
// outStockRecord.quantity = stockSerialNumber.Count;
|
// outStockRecord.creator = "装配上线点";
|
// outStockRecord.createTime = newTask.createTime;
|
// outStockRecord.version = OutStock.version;//机型 【EditBy shaocx,2022-01-18】
|
// mod.outStockList.Add(outStockRecord);
|
// OutStock.isLock = true;
|
// int ress = mod.SaveChanges();
|
// if (ress > 0)
|
// {
|
// res.status = 200;
|
// res.total = (int)newTask.taskId;
|
// }
|
// else
|
// {
|
// res.status = 400;
|
// res.msg = "保存数据失败";
|
// WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GToutStock", "保存数据失败");
|
// }
|
// }
|
// }
|
// catch (Exception ex)
|
// {
|
// res.status = 400;
|
// res.msg = "保存异常";
|
// WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GToutStock", ex.ToString());
|
// }
|
// return res;
|
//}
|
|
#endregion
|
|
#region 现在的
|
|
/// <summary>缸盖上线
|
///
|
/// </summary>
|
/// <param name="materialCode">物料编号</param>
|
/// <param name="station">站点号</param>
|
/// <returns></returns>
|
[HttpPost]
|
public resMsg<string> GGoutStock([FromUri] string materialCode, string station)
|
{
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GGoutStock", "收到物料编号;" + materialCode + "收到站点号:" + station);
|
resMsg<string> res = new resMsg<string>();
|
res.status = 400;
|
res.msg = "";
|
bool ishave = GGstations.Contains(station.Trim());
|
if (!ishave)
|
{
|
res.msg = MyExtend.GetFFZDHStr(station);
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GGoutStock", "收到物料编号;" + materialCode + "收到站点号:" + station + ",接口返回:" + res.msg);
|
return res;
|
}
|
try
|
{
|
using (dbmodel mod = new dbmodel())
|
{
|
var mat = mod.material.Where(x => x.materialCode == materialCode).FirstOrDefault();
|
if (mat == null)
|
{
|
res.msg = "根据物料编码" + materialCode + "没有获取到物料信息";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GGoutStock", "收到物料编号;" + materialCode + "收到站点号:" + station + ",接口返回:" + res.msg);
|
return res;
|
}
|
|
VproductStock stationIsHave = mod.VproductStock.FirstOrDefault(x => x.positionName == station);
|
if (stationIsHave != null)
|
{
|
res.msg = "上料点已经有货";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GGoutStock", "收到物料编号;" + materialCode + "收到站点号:" + station + ",接口返回:" + res.msg);
|
return res;
|
}
|
//VproductStock OutStock = mod.VproductStock.OrderBy(x => x.createTime).FirstOrDefault(x => x.materialCode == materialCode.Trim()&&x.positionType==(byte)positionType.余料回库 && x.isLock == false && x.positionId < 461);
|
string sourcePlace = "";
|
//if (OutStock == null)
|
//{
|
//VproductStock OutStock = mod.VproductStock.OrderBy(x => x.createTime).FirstOrDefault(x => x.materialCode == materialCode.Trim() && x.isLock == false && x.positionId < 461);
|
//if (OutStock == null)
|
//{
|
// res.msg = "库存无此物料";
|
// return res;
|
//}
|
|
////}
|
//List<productStockList> stockSerialNumber = mod.productStockList.Where(x => x.stockId == OutStock.positionId).ToList();
|
//if (stockSerialNumber.Count < 1)
|
//{
|
// res.msg = "此库存无流水号明细";
|
// return res;
|
//}
|
//sourcePlace = OutStock.positionName;
|
|
var errMsg = "";//校验站点是否有任务占用 【Editby shaocx,2023-10-19】
|
var validateResult = MyExtend.CommonIsExistNoFinishedTask(mod, station.Trim(), ref errMsg);
|
if (!validateResult)
|
{
|
res.msg = errMsg;
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GGoutStock", "收到物料编号;" + materialCode + "收到站点号:" + station + ",接口返回:" + res.msg);
|
return res;
|
}
|
|
task newTask = new task();
|
newTask.createListCode = "KGS" + DateTime.Now.ToString("yyMMddHHmmss");
|
|
var _taskType = taskType.缸盖上线;
|
newTask.taskType = (int)_taskType;
|
newTask.taskTypeName = _taskType.ToString();
|
newTask.taskName = "缸盖出库";
|
newTask.taskStatus = (int)taskStatus.新建;
|
newTask.sourcePlace = sourcePlace;
|
newTask.toPlace = station.Trim();
|
newTask.middlePlace = "";
|
newTask.area = 2;
|
newTask.priority = 1;
|
newTask.materialCode = materialCode;
|
newTask.materialName = mat.materialName;
|
newTask.quantity = 0;
|
newTask.createTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
newTask.sendMesed = 1;//1=未发送,2=发送成功,3=发送失败
|
newTask.mesReply = "未发送";
|
newTask.supplier = "";//供应商 【EditBy shaocx,2022-01-15】
|
newTask.containerCode = "";//托盘号 【EditBy shaocx,2022-01-15】
|
newTask.version = mat.version;
|
newTask.creator = "PDA";
|
//记录PLC任务号和AGV任务号 【EditBy shaocx,2022-03-28】
|
MyExtendHelper.SetPlcTaskNoAgvTaskNo(ref newTask);
|
mod.task.Add(newTask);
|
outStockList outStockRecord = new outStockList();
|
var _OutStockOrderStatus = OutStockOrderStatus.新建;
|
outStockRecord.outStockOrderStatus = (int)_OutStockOrderStatus;
|
outStockRecord.outStockOrderStatusName = _OutStockOrderStatus.ToString();
|
outStockRecord.outStockOrder = newTask.createListCode;
|
outStockRecord.materialName = mat.materialName;
|
outStockRecord.materialCode = materialCode;
|
outStockRecord.quantity = 0;
|
outStockRecord.creator = outStockRecord.lastModifier = "装配上线点";
|
outStockRecord.createTime = newTask.createTime;
|
outStockRecord.LastModifyTime = DateTime.Now;
|
outStockRecord.version = "";//机型 【EditBy shaocx,2022-01-18】
|
mod.outStockList.Add(outStockRecord);
|
|
//OutStock.isLock = true;
|
int ress = mod.SaveChanges();
|
if (ress > 0)
|
{
|
res.status = 200;
|
res.total = (int)newTask.taskId;
|
}
|
else
|
{
|
res.status = 400;
|
res.msg = "保存数据失败";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GGoutStock", "保存数据失败");
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GGoutStock", "收到物料编号;" + materialCode + "收到站点号:" + station + ",接口返回:" + res.msg);
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
res.status = 400;
|
res.msg = "保存异常";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GGoutStock", "异常:" + ex.ToString());
|
}
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GGoutStock", "收到物料编号;" + materialCode + "收到站点号:" + station + ",接口返回:" + res.msg);
|
return res;
|
}
|
/// <summary>缸体上线
|
///
|
/// </summary>
|
/// <param name="materialCode">物料编号</param>
|
/// <param name="station">站点号</param>
|
/// <returns></returns>
|
[HttpPost]
|
public resMsg<string> GToutStock([FromUri] string materialCode, string station)
|
{
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GToutStock", "收到物料编号;" + materialCode + "收到站点号:" + station);
|
resMsg<string> res = new resMsg<string>();
|
res.status = 400;
|
res.msg = "";
|
bool ishave = GTstations.Contains(station.Trim());
|
if (!ishave)
|
{
|
res.msg = MyExtend.GetFFZDHStr(station);
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GToutStock", "收到物料编号;" + materialCode + "收到站点号:" + station + ",接口返回:" + res.msg);
|
return res;
|
}
|
try
|
{
|
using (dbmodel mod = new dbmodel())
|
{
|
var mat = mod.material.Where(x => x.materialCode == materialCode).FirstOrDefault();
|
if (mat == null)
|
{
|
res.msg = "根据物料编码" + materialCode + "没有获取到物料信息";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GToutStock", "收到物料编号;" + materialCode + "收到站点号:" + station + ",接口返回:" + res.msg);
|
return res;
|
}
|
|
VproductStock stationIsHave = mod.VproductStock.FirstOrDefault(x => x.positionName == station);
|
if (stationIsHave != null)
|
{
|
res.msg = "上料点已经有货";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GToutStock", "收到物料编号;" + materialCode + "收到站点号:" + station + ",接口返回:" + res.msg);
|
return res;
|
}
|
//VproductStock OutStock = mod.VproductStock.OrderBy(x => x.createTime).FirstOrDefault(x => x.materialCode == materialCode.Trim()&& x.positionType==(byte)positionType.余料回库&& x.isLock == false && x.positionId < 461);
|
string sourcePlace = "";
|
//if (OutStock == null)
|
//{
|
//VproductStock OutStock = mod.VproductStock.OrderBy(x => x.createTime).FirstOrDefault(x => x.materialCode == materialCode.Trim() && x.isLock == false && x.positionId < 461);
|
//if (OutStock == null)
|
//{
|
// res.msg = "库存无此物料";
|
// return res;
|
//}
|
////}
|
//List<productStockList> stockSerialNumber = mod.productStockList.Where(x => x.stockId == OutStock.positionId).ToList();
|
//if (stockSerialNumber.Count < 1)
|
//{
|
// res.msg = "此库存无流水号明细";
|
// return res;
|
//}
|
//sourcePlace = OutStock.positionName;
|
|
var errMsg = "";//校验站点是否有任务占用 【Editby shaocx,2023-10-19】
|
var validateResult = MyExtend.CommonIsExistNoFinishedTask(mod, station.Trim(), ref errMsg);
|
if (!validateResult)
|
{
|
res.msg = errMsg;
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GToutStock", "收到物料编号;" + materialCode + "收到站点号:" + station + ",接口返回:" + res.msg);
|
return res;
|
}
|
|
task newTask = new task();
|
newTask.createListCode = "KTS" + DateTime.Now.ToString("yyMMddHHmmss");
|
var _taskType = taskType.缸体上线;
|
if (station.Trim() == "GTU4" || station.Trim() == "GTU5")
|
{
|
_taskType = taskType.缸体上线去旁路工位;
|
}
|
newTask.taskType = (int)_taskType;
|
newTask.taskTypeName = _taskType.ToString();
|
newTask.taskName = "缸体出库";
|
newTask.taskStatus = (int)taskStatus.新建;
|
newTask.sourcePlace = sourcePlace;
|
newTask.middlePlace = "";
|
newTask.toPlace = station.Trim();
|
newTask.area = 1;
|
newTask.priority = 1;
|
newTask.materialCode = materialCode;
|
newTask.materialName = mat.materialName;
|
newTask.quantity = 0;
|
newTask.createTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
newTask.sendMesed = 1;//1=未发送,2=发送成功,3=发送失败
|
newTask.mesReply = "未发送";
|
newTask.supplier = "";//供应商 【EditBy shaocx,2022-01-15】
|
newTask.containerCode = "";//托盘号 【EditBy shaocx,2022-01-15】
|
newTask.version = mat.version;
|
newTask.creator = "PDA";
|
//记录PLC任务号和AGV任务号 【EditBy shaocx,2022-03-28】
|
MyExtendHelper.SetPlcTaskNoAgvTaskNo(ref newTask);
|
mod.task.Add(newTask);
|
outStockList outStockRecord = new outStockList();
|
outStockRecord.outStockOrder = newTask.createListCode;
|
outStockRecord.materialName = mat.materialName;
|
outStockRecord.materialCode = materialCode;
|
outStockRecord.quantity = 0;
|
outStockRecord.creator = "装配上线点";
|
outStockRecord.createTime = newTask.createTime;
|
outStockRecord.version = "";//机型 【EditBy shaocx,2022-01-18】
|
mod.outStockList.Add(outStockRecord);
|
//OutStock.isLock = true;
|
int ress = mod.SaveChanges();
|
if (ress > 0)
|
{
|
res.status = 200;
|
res.total = (int)newTask.taskId;
|
}
|
else
|
{
|
res.status = 400;
|
res.msg = "保存数据失败";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GToutStock", "保存数据失败");
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GToutStock", "收到物料编号;" + materialCode + "收到站点号:" + station + ",接口返回:" + res.msg);
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
res.status = 400;
|
res.msg = "保存异常";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GToutStock", "异常:" + ex.ToString());
|
}
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "GToutStock", "收到物料编号;" + materialCode + "收到站点号:" + station + ",接口返回:" + res.msg);
|
return res;
|
}
|
|
#endregion
|
|
// /// <summary>空托盘回库,该接口由天永机器人调用 【20240602最新版,改变接受天永接口,解决 productCode和serialNumber唯一性的问题】
|
// ///
|
// /// </summary>
|
// /// <param name="value"></param>
|
// /// <returns></returns>
|
// [HttpPost]
|
// public resMsg<string> EmptyBack([FromBody] EmptyBackEntity<inStockOrderList> value)
|
// {
|
// WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", "收到天永空托盘回库参数:" + JsonConvert.SerializeObject(value));
|
// resMsg<string> res = new resMsg<string>();
|
// res.status = 400;
|
// bool ishaveGG = GGstations.Contains(value.station.Trim());
|
// bool ishaveGT = GTstations.Contains(value.station.Trim());
|
// string taskname = "";
|
// string materialCode = "";
|
// string materialName = "";
|
// if (!ishaveGG && !ishaveGT)
|
// {
|
// res.msg = "非法站点号";
|
// WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", "非法站点号:" + value.station);
|
// return res;
|
// }
|
// try//findStorage
|
// {
|
// using (dbmodel mod = new dbmodel())
|
// {
|
// #region 增加日志 [EditBy shaocx,2022-03-27]
|
// var str_dataList = JsonConvert.SerializeObject(value.dataList);
|
// if (str_dataList.Length > 2000)
|
// {
|
// str_dataList = "";
|
// }
|
// var str_jsonStr = JsonConvert.SerializeObject(value);
|
// if (str_jsonStr.Length > 2000)
|
// {
|
// str_jsonStr = "";
|
// }
|
|
// System_TianYongEmptyBackLog _System_TianYongEmptyBackLog = new System_TianYongEmptyBackLog()
|
// {
|
// ID = Guid.NewGuid().ToString(),
|
// station = value.station,
|
// isMoveEmptyByHand = value.isMoveEmptyByHand.ToString(),
|
// dataList = str_dataList,
|
// jsonStr = str_jsonStr,
|
// Remark = "天永呼叫余料回库",
|
// CreateTime = DateTime.Now,
|
// Creator = "天永",
|
// };
|
// mod.System_TianYongEmptyBackLog.Add(_System_TianYongEmptyBackLog);
|
|
// #endregion
|
// string toplace = "";
|
// #region 判断是否空托回库并处理数据
|
// VproductStock stock = mod.VproductStock.FirstOrDefault(x => x.positionName == value.station);
|
|
// if (stock != null)
|
// {
|
// //判断如果是人工移走空托盘,就认为全部清了 【EditBy shaocx,2022-03-24】
|
// if (value.isMoveEmptyByHand)
|
// {
|
// #region 判断如果是人工移走空托盘,就认为全部清了 【EditBy shaocx,2022-03-24】
|
// //起点库位解锁、设置无货 【EditBy shaocx,2022-03-23】
|
// position _sourcePlace = mod.position.FirstOrDefault(x => x.positionName == value.station);
|
// PositionHandler.LockAndFree(false, false, _sourcePlace, "天永呼叫余料回库,起点库位解锁、设置无货", "天永", null);
|
// //删除库存
|
// List<productStockList> _productStockList = mod.productStockList.Where(x => x.stockId == stock.positionId).ToList();
|
// if (_productStockList != null && _productStockList.Count > 0)
|
// {
|
// foreach (var item in _productStockList)
|
// {
|
// mod.productStockList.Remove(item);
|
|
// StockClearLog _StockClearLog = new StockClearLog()
|
// {
|
// ID = Guid.NewGuid().ToString(),
|
// serialNumber = item.serialNumber,
|
// containerCode = stock.containerCode,
|
// materialCode = stock.materialCode,
|
// materialName = stock.materialName,
|
// positionName = stock.positionName,
|
// qty = stock.quantity,
|
// supplier = stock.supplier,
|
// version = stock.version,
|
// Remark = "天永呼叫余料回库,判断是人工移走空托盘,就认为清理库存",
|
// CreateTime = DateTime.Now,
|
// LastModifyTime = DateTime.Now,
|
// Creator = "天永",
|
// LastModifier = "天永",
|
// };
|
// mod.StockClearLog.Add(_StockClearLog);
|
// }
|
// }
|
// productStock _productStock = mod.productStock.Where(x => x.positionId == stock.positionId).FirstOrDefault();
|
// if (_productStock != null)
|
// {
|
// mod.productStock.Remove(_productStock);
|
// }
|
|
|
// int ress = mod.SaveChanges();
|
|
// #region 判断保存是否成功
|
// if (ress < 1)
|
// {
|
// res.msg = "保存数据失败";
|
// WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", "保存数据失败");
|
// }
|
// else
|
// {
|
// res.status = 200;
|
// res.total = 0;
|
|
// //注意:暂时不给天永推消息
|
// ////推送天永消息
|
// //using (yunneiPda.WCSserver.IyunneiWcfClient wcsWcf = new WCSserver.IyunneiWcfClient())
|
// //{
|
// // toplace = wcsWcf.safetySignalByPerson(AREA);
|
// //}
|
// }
|
|
// #endregion
|
|
// #endregion
|
// }
|
// else
|
// {//其他情况
|
// #region 其他情况
|
|
// ///当前库位的库存
|
// List<productStockList> cur_positionId_productStockList = mod.productStockList.Where(x => x.stockId == stock.positionId).ToList();
|
|
// List<inStockOrderList> serialTotal = new List<inStockOrderList>();//库存加多余的流水号集合
|
// List<inStockOrderList> lastSerial = new List<inStockOrderList>();//多余的流水号集合,留着写入数据库下次比对
|
// #region 转换天永发过来的数据
|
// for (int i = 0; i < value.dataList.Count; i++)
|
// {
|
// #region 原先的代码
|
// /*
|
// * {
|
// "station": "GGU1",
|
// "dataList": [
|
// {
|
// "serialNumber": "G10037092*GD405*2404230063"
|
// }
|
// ],
|
// "isMoveEmptyByHand": false
|
//}
|
// */
|
// string[] serials = value.dataList[i].serialNumber.Split('*');
|
// //value.materialCode = serials[0];
|
// //value.dataList[i].serialNumber = serials[2];
|
// serialTotal.Add(new inStockOrderList()
|
// {//记录 天永本次发过来的流水号(代表天永已经消耗了这些流水号)
|
// productCode = serials[0],
|
// serialNumber = serials[2]
|
// });
|
// #endregion
|
|
// }
|
// #endregion
|
|
// if (cur_positionId_productStockList.Count > 0)
|
// {
|
// int AREA = ishaveGG == true ? 3 : 2;
|
// using (yunneiPda.WCSserver.IyunneiWcfClient wcsWcf = new WCSserver.IyunneiWcfClient())
|
// {
|
// toplace = wcsWcf.findStock(AREA);//找空库位
|
// }
|
// if (toplace == "")
|
// {
|
// res.msg = "没有空库位";
|
// WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", "保存数据失败");
|
// return res;
|
// }
|
// // toplace = toplace.Split('/')[0];
|
// materialCode = cur_positionId_productStockList[0].productCode;
|
// materialName = cur_positionId_productStockList[0].productName;
|
// //移除天永发过来的流水号 在库存数据里有的
|
// System.Collections.Generic.List<serialNumberHistory> history = mod.serialNumberHistory.Where(x => x.area == AREA).ToList();
|
// if (history.Count > 0)
|
// {
|
// System.Collections.Generic.List<serialNumberHistory> willRemoveList = new System.Collections.Generic.List<serialNumberHistory>();
|
// for (int i = 0; i < history.Count; i++)
|
// {
|
// serialTotal.Add(new inStockOrderList()
|
// {
|
// serialNumber = history[i].serialNumber,
|
// productCode = history[i].productCode
|
// });
|
// willRemoveList.Add(history[i]);
|
// }
|
// if (willRemoveList.Count > 0)
|
// {
|
// mod.serialNumberHistory.RemoveRange(willRemoveList);
|
// }
|
// }
|
// //List<productStockList> isEmpty = serialNumber.Where(p => !value.dataList.Any(x => x
|
// // .serialNumber == p.serialNumber)).ToList();
|
// //List<string> sss = _productStockList.Select(x => x.serialNumber).ToList();
|
// //lastSerial = serialTotal.Except(sss).ToList();
|
// //原因是 天永每次发过来的,不一定非是本站点消耗的,需要wcs临时先记下来。
|
// List<string> sss = cur_positionId_productStockList.Select(x => (x.productCode + "_" + x.serialNumber)).ToList();
|
// lastSerial = serialTotal.Where(x => !sss.Contains((x.productCode + "_" + x.serialNumber))).ToList();
|
// if (lastSerial.Count > 0)
|
// {//寻找 wcs临时记下来有的,但是库存中没有的数据
|
// for (int i = 0; i < lastSerial.Count; i++)
|
// {
|
// serialNumberHistory newHistory = new serialNumberHistory();
|
// newHistory.area = AREA;
|
// newHistory.serialNumber = lastSerial[i].serialNumber;
|
// newHistory.productCode = lastSerial[i].productCode;
|
// newHistory.createTime = DateTime.Now;
|
// mod.serialNumberHistory.Add(newHistory);
|
// }
|
// }
|
// var query_serialTotal_list = serialTotal.Select(x => (x.productCode + "_" + x.serialNumber)).ToList();
|
// List<productStockList> isEmpty = cur_positionId_productStockList.Where(x => !query_serialTotal_list.Contains((x.productCode + "_" + x.serialNumber))).ToList();
|
|
// if (isEmpty.Count == 0)
|
// {
|
// #region 空托回库
|
// taskname = ishaveGG == true ? "缸盖空托回库" : "缸体空托回库";
|
// //清除库存
|
// productStock backStock = mod.productStock.FirstOrDefault(x => x.positionId == stock.positionId);
|
// if (backStock != null)
|
// {
|
// mod.productStock.Remove(backStock);
|
// }
|
// // mod.VproductStock.Remove(stock);
|
// foreach (var item in cur_positionId_productStockList)
|
// {
|
// mod.productStockList.Remove(item);
|
|
// StockClearLog _StockClearLog = new StockClearLog()
|
// {
|
// ID = Guid.NewGuid().ToString(),
|
// serialNumber = item.serialNumber,
|
// containerCode = stock.containerCode,
|
// materialCode = stock.materialCode,
|
// materialName = stock.materialName,
|
// positionName = stock.positionName,
|
// qty = stock.quantity,
|
// supplier = stock.supplier,
|
// version = stock.version,
|
// Remark = "天永呼叫余料回库,判断是空托回库,就认为清理库存",
|
// CreateTime = DateTime.Now,
|
// LastModifyTime = DateTime.Now,
|
// Creator = "天永",
|
// LastModifier = "天永",
|
// };
|
// mod.StockClearLog.Add(_StockClearLog);
|
// }
|
|
// #endregion
|
// }
|
// else//余料回库
|
// {
|
// #region 把数据同步 入库地址
|
// taskname = ishaveGG == true ? "缸盖余料回库" : "缸体余料回库";
|
// productStock backStock = mod.productStock.FirstOrDefault(x => x.positionId == stock.positionId);
|
// if (backStock != null)
|
// {
|
// backStock.positionId = Convert.ToInt64(toplace.Split('/')[1]);
|
// backStock.quantity = isEmpty.Count;
|
// backStock.updateTime = DateTime.Now;
|
|
|
// }
|
// long positionid = Convert.ToInt64(toplace.Split('/')[1]);
|
// position backPosition = mod.position.FirstOrDefault(x => x.positionId == positionid);
|
// if (backPosition != null)
|
// {
|
// backPosition.positionType = (byte)positionType.余料回库;
|
// }
|
// //stock.positionId = Convert.ToInt64(toplace.Split('/')[1]);
|
// //stock.quantity = serialNumber.Count;
|
// List<string> retainSerialNum = isEmpty.Select(x => x.serialNumber).ToList();
|
// foreach (var item in cur_positionId_productStockList)
|
// {
|
// if (!retainSerialNum.Contains(item.serialNumber))
|
// {
|
// mod.productStockList.Remove(item);//移除库存
|
|
// StockClearLog _StockClearLog = new StockClearLog()
|
// {
|
// ID = Guid.NewGuid().ToString(),
|
// serialNumber = item.serialNumber,
|
// containerCode = stock.containerCode,
|
// materialCode = stock.materialCode,
|
// materialName = stock.materialName,
|
// positionName = stock.positionName,
|
// qty = stock.quantity,
|
// supplier = stock.supplier,
|
// version = stock.version,
|
// Remark = "天永呼叫余料回库,判断是余料回库,就认为清理天永使用过的流水号",
|
// CreateTime = DateTime.Now,
|
// LastModifyTime = DateTime.Now,
|
// Creator = "天永",
|
// LastModifier = "天永",
|
// };
|
// mod.StockClearLog.Add(_StockClearLog);
|
// }
|
// else
|
// {
|
// item.stockId = Convert.ToInt64(toplace.Split('/')[1]);//toplace 返回的库位名称和ID 用/连接再一起
|
// }
|
// }
|
// #endregion
|
// }
|
|
|
|
// task newTask = new task();
|
// #region 写入任务
|
// newTask.createListCode = ishaveGG == true ? "KG" + DateTime.Now.ToString("yyMMddHHmmss") : "KT" + DateTime.Now.ToString("yyMMddHHmmss");
|
|
// var _taskStatus = default(taskStatus);
|
// var _taskType = default(taskType);
|
// if (value.station.Trim() == "GTU4" || value.station.Trim() == "GTU5")
|
// {//增加对旁路工位的判断 [EditBy shaocx,2022-05-04]
|
// _taskType = isEmpty.Count == 0 ? taskType.旁路工位缸体空托回库 : taskType.旁路工位缸体余料回库;
|
// _taskStatus = taskStatus.新建;
|
// newTask.isQueLiao = 0;
|
// }
|
// else
|
// {
|
// _taskType = isEmpty.Count == 0 ? taskType.空托回库 : taskType.余料回库;
|
// _taskStatus = taskStatus.未下发;
|
// }
|
|
// newTask.taskType = (int)_taskType;
|
// newTask.taskTypeName = _taskType.ToString();
|
// newTask.taskName = taskname;
|
// newTask.taskStatus = (int)_taskStatus;
|
// newTask.sourcePlace = value.station.Trim();
|
// newTask.middlePlace = "";
|
// newTask.toPlace = toplace.Split('/')[0];
|
// newTask.area = ishaveGG == true ? 2 : 1;
|
// newTask.priority = 1;
|
// newTask.materialCode = isEmpty.Count == 0 ? "" : materialCode;
|
// newTask.materialName = isEmpty.Count == 0 ? "" : materialName;
|
// newTask.quantity = isEmpty.Count == 0 ? 0 : isEmpty.Count;
|
// newTask.createTime = DateTime.Now;
|
// newTask.sendMesed = isEmpty.Count == 0 ? 0 : 1;//1=未发送,2=发送成功,3=发送失败,o是空托盘不参与对接
|
// newTask.mesReply = isEmpty.Count == 0 ? "" : "未发送";
|
// newTask.supplier = stock.supplier;//供应商 【EditBy shaocx,2022-01-15】
|
// newTask.containerCode = stock.containerCode;//托盘号 【EditBy shaocx,2022-01-15】
|
// newTask.version = stock.version;
|
// newTask.creator = "PDA";
|
// //记录PLC任务号和AGV任务号 【EditBy shaocx,2022-03-28】
|
// MyExtendHelper.SetPlcTaskNoAgvTaskNo(ref newTask);
|
// #endregion
|
// mod.task.Add(newTask);
|
|
// //起点库位解锁、设置无货 【EditBy shaocx,2022-03-23】
|
// position _sourcePlace = mod.position.FirstOrDefault(x => x.positionName == value.station);
|
// PositionHandler.LockAndFree(false, false, _sourcePlace, "天永呼叫余料回库,起点库位解锁、设置无货", "天永", newTask);
|
|
// int ress = mod.SaveChanges();
|
|
// #region 判断保存是否成功
|
// if (ress < 1)
|
// {
|
// ress = mod.SaveChanges();
|
// if (ress < 1)
|
// {
|
// ress = mod.SaveChanges();
|
// if (ress < 1)
|
// {
|
// res.msg = "保存数据失败";
|
// WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", "保存数据失败");
|
// }
|
// else
|
// {
|
// res.status = 200;
|
// }
|
// }
|
// else
|
// {
|
// res.status = 200;
|
// }
|
// }
|
// else
|
// {
|
// res.status = 200;
|
// res.total = (int)newTask.taskId;
|
// }
|
|
// #endregion
|
// }
|
// else
|
// {
|
// res.msg = "非法回库站点,库存没数据";
|
// }
|
|
// #endregion
|
// }
|
// }
|
// #endregion
|
// else
|
// {
|
// res.msg = value.station.Trim() + "这里没有数据,不能执行";
|
// }
|
// }
|
|
// }
|
// catch (Exception ex)
|
// {
|
// res.status = 400;
|
// res.msg = "保存异常";
|
// WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "callEmtyp", ex.ToString());
|
// }
|
// return res;
|
// }
|
|
|
/// <summary>空托盘回库,该接口由天永机器人调用 【20240717优化-解决表serialNumberHistory太大,接口慢的问题】
|
///
|
/// </summary>
|
/// <param name="value"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public resMsg<string> EmptyBack([FromBody] EmptyBackEntity<inStockOrderList> value)
|
{
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", "收到天永空托盘回库参数:" + JsonConvert.SerializeObject(value));
|
resMsg<string> res = new resMsg<string>();
|
res.status = 400;
|
res.msg = "";
|
bool ishaveGG = GGstations.Contains(value.station.Trim());
|
bool ishaveGT = GTstations.Contains(value.station.Trim());
|
string taskname = "";
|
string materialCode = "";
|
string materialName = "";
|
if (!ishaveGG && !ishaveGT)
|
{
|
res.msg = MyExtend.GetFFZDHStr(value.station);
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", res.msg);
|
return res;
|
//*/
|
}
|
try//findStorage
|
{
|
System.Collections.Generic.List<serialNumberHistory> db_history = new List<serialNumberHistory>();
|
//准备要清理的历史数据
|
List<serialNumberHistory> willDelete_serialNumberHistory_List = new List<serialNumberHistory>();
|
|
///当前库位的库存
|
List<productStockList> cur_positionId_productStockList = new List<productStockList>();
|
|
List<inStockOrderList> tianyongParams = new List<inStockOrderList>();//天永传递过来的参数集合
|
List<inStockOrderList> willInsert_tianyongParams = new List<inStockOrderList>();//准备要插入表 serialNumberHistory的数据
|
|
int AREA = ishaveGG == true ? 3 : 2;
|
|
#region 转换天永发过来的数据
|
for (int i = 0; i < value.dataList.Count; i++)
|
{
|
#region 原先的代码
|
/*
|
* {
|
"station": "GGU1",
|
"dataList": [
|
{
|
"serialNumber": "G10037092*GD405*2404230063"
|
}
|
],
|
"isMoveEmptyByHand": false
|
}
|
*/
|
string[] serials = value.dataList[i].serialNumber.Split('*');
|
if (serials.Length != 3)
|
{
|
res.msg = "格式不正确,必须是物料号*供应商*流水号";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", res.msg);
|
return res;
|
}
|
|
|
tianyongParams.Add(new inStockOrderList()
|
{//记录 天永本次发过来的流水号(代表天永已经消耗了这些流水号)
|
productCode = serials[0],
|
serialNumber = serials[2]
|
});
|
|
#endregion
|
|
}
|
#endregion
|
|
using (dbmodel mod = new dbmodel())
|
{
|
#region 增加日志 [EditBy shaocx,2022-03-27]
|
var str_dataList = JsonConvert.SerializeObject(value.dataList);
|
if (str_dataList.Length > 2000)
|
{
|
str_dataList = "";
|
}
|
var str_jsonStr = JsonConvert.SerializeObject(value);
|
if (str_jsonStr.Length > 2000)
|
{
|
str_jsonStr = "";
|
}
|
|
System_TianYongEmptyBackLog _System_TianYongEmptyBackLog = new System_TianYongEmptyBackLog()
|
{
|
ID = Guid.NewGuid().ToString(),
|
station = value.station,
|
isMoveEmptyByHand = value.isMoveEmptyByHand.ToString(),
|
dataList = str_dataList,
|
jsonStr = str_jsonStr,
|
Remark = "天永呼叫余料回库",
|
CreateTime = DateTime.Now,
|
Creator = "天永",
|
};
|
mod.System_TianYongEmptyBackLog.Add(_System_TianYongEmptyBackLog);
|
|
#endregion
|
|
#region 查询库存
|
|
db_history = mod.serialNumberHistory.ToList();
|
if (db_history.Count > 0)
|
{
|
var queryStr_db_history = db_history.Select(x => (x.productCode + "_" + x.serialNumber)).ToList();
|
//寻找表中有的,并且天永参数也有的,然后把天永参数移除
|
willInsert_tianyongParams = tianyongParams.Where(x => !queryStr_db_history.Contains((x.productCode + "_" + x.serialNumber))).ToList();
|
}
|
else
|
{
|
willInsert_tianyongParams = tianyongParams;
|
}
|
|
#endregion
|
|
string toplace = "";
|
#region 判断是否空托回库并处理数据
|
VproductStock stock = mod.VproductStock.FirstOrDefault(x => x.positionName == value.station);
|
|
if (stock != null)
|
{
|
///当前库位的库存
|
cur_positionId_productStockList = mod.productStockList.Where(x => x.stockId == stock.positionId).ToList();
|
|
//判断如果是人工移走空托盘,就认为全部清了 【EditBy shaocx,2022-03-24】
|
if (value.isMoveEmptyByHand)
|
{
|
#region 判断如果是人工移走空托盘,就认为全部清了 【EditBy shaocx,2022-03-24】
|
//起点库位解锁、设置无货 【EditBy shaocx,2022-03-23】
|
position _sourcePlace = mod.position.FirstOrDefault(x => x.positionName == value.station);
|
PositionHandler.LockAndFree(false, false, _sourcePlace, "天永呼叫余料回库,起点库位解锁、设置无货", "天永", null);
|
//删除库存
|
List<productStockList> _productStockList = mod.productStockList.Where(x => x.stockId == stock.positionId).ToList();
|
if (_productStockList != null && _productStockList.Count > 0)
|
{
|
foreach (var item in _productStockList)
|
{
|
mod.productStockList.Remove(item);
|
|
RemoveDataForDeleteProductStockList(item, db_history, ref willInsert_tianyongParams, ref willDelete_serialNumberHistory_List);
|
|
StockClearLog _StockClearLog = new StockClearLog()
|
{
|
ID = Guid.NewGuid().ToString(),
|
serialNumber = item.serialNumber,
|
containerCode = stock.containerCode,
|
materialCode = stock.materialCode,
|
materialName = stock.materialName,
|
positionName = stock.positionName,
|
qty = stock.quantity,
|
supplier = stock.supplier,
|
version = stock.version,
|
Remark = "天永呼叫余料回库,判断是人工移走空托盘,就认为清理库存",
|
CreateTime = DateTime.Now,
|
LastModifyTime = DateTime.Now,
|
Creator = "天永",
|
LastModifier = "天永",
|
};
|
mod.StockClearLog.Add(_StockClearLog);
|
}
|
}
|
productStock _productStock = mod.productStock.Where(x => x.positionId == stock.positionId).FirstOrDefault();
|
if (_productStock != null)
|
{
|
mod.productStock.Remove(_productStock);
|
}
|
|
CommnHandleDeletaData(mod, AREA, willInsert_tianyongParams, willDelete_serialNumberHistory_List);
|
|
CommonHandlerForEmptyBack(mod, res, null);
|
|
#endregion
|
}
|
else
|
{//其他情况
|
#region 其他情况
|
|
if (cur_positionId_productStockList.Count > 0)
|
{
|
|
using (yunneiPda.WCSserver.IyunneiWcfClient wcsWcf = new WCSserver.IyunneiWcfClient())
|
{
|
toplace = wcsWcf.findStock(AREA);//找空库位
|
}
|
if (toplace == "")
|
{
|
res.msg = "没有空库位";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", res.msg);
|
return res;
|
}
|
// toplace = toplace.Split('/')[0];
|
materialCode = cur_positionId_productStockList[0].productCode;
|
materialName = cur_positionId_productStockList[0].productName;
|
|
|
|
//原因是 天永每次发过来的,不一定非是本站点消耗的,需要wcs临时先记下来。
|
var query_serialTotal_list = db_history.Select(x => (x.productCode + "_" + x.serialNumber)).ToList();
|
query_serialTotal_list.AddRange(willInsert_tianyongParams.Select(x => (x.productCode + "_" + x.serialNumber)).ToList());
|
|
List<productStockList> isEmpty = cur_positionId_productStockList.Where(x => !query_serialTotal_list.Contains((x.productCode + "_" + x.serialNumber))).ToList();
|
|
if (isEmpty.Count == 0)
|
{
|
#region 空托回库
|
taskname = ishaveGG == true ? "缸盖空托回库" : "缸体空托回库";
|
//清除库存
|
productStock backStock = mod.productStock.FirstOrDefault(x => x.positionId == stock.positionId);
|
if (backStock != null)
|
{
|
mod.productStock.Remove(backStock);
|
}
|
|
foreach (var item in cur_positionId_productStockList)
|
{
|
mod.productStockList.Remove(item);//移除库存
|
|
RemoveDataForDeleteProductStockList(item, db_history, ref willInsert_tianyongParams, ref willDelete_serialNumberHistory_List);
|
|
|
|
StockClearLog _StockClearLog = new StockClearLog()
|
{
|
ID = Guid.NewGuid().ToString(),
|
serialNumber = item.serialNumber,
|
containerCode = stock.containerCode,
|
materialCode = stock.materialCode,
|
materialName = stock.materialName,
|
positionName = stock.positionName,
|
qty = stock.quantity,
|
supplier = stock.supplier,
|
version = stock.version,
|
Remark = "天永呼叫余料回库,判断是空托回库,就认为清理库存",
|
CreateTime = DateTime.Now,
|
LastModifyTime = DateTime.Now,
|
Creator = "天永",
|
LastModifier = "天永",
|
};
|
mod.StockClearLog.Add(_StockClearLog);
|
}
|
|
#endregion
|
}
|
else//余料回库
|
{
|
#region 把数据同步 入库地址
|
taskname = ishaveGG == true ? "缸盖余料回库" : "缸体余料回库";
|
productStock backStock = mod.productStock.FirstOrDefault(x => x.positionId == stock.positionId);
|
if (backStock != null)
|
{
|
backStock.positionId = Convert.ToInt64(toplace.Split('/')[1]);
|
backStock.quantity = isEmpty.Count;
|
backStock.updateTime = DateTime.Now;
|
|
|
}
|
long positionid = Convert.ToInt64(toplace.Split('/')[1]);
|
position backPosition = mod.position.FirstOrDefault(x => x.positionId == positionid);
|
if (backPosition != null)
|
{
|
backPosition.positionType = (byte)positionType.余料回库;
|
}
|
//stock.positionId = Convert.ToInt64(toplace.Split('/')[1]);
|
//stock.quantity = serialNumber.Count;
|
List<string> retainSerialNum = isEmpty.Select(x => x.serialNumber).ToList();
|
foreach (var item in cur_positionId_productStockList)
|
{
|
if (!retainSerialNum.Contains(item.serialNumber))
|
{
|
mod.productStockList.Remove(item);//移除库存
|
|
RemoveDataForDeleteProductStockList(item, db_history, ref willInsert_tianyongParams, ref willDelete_serialNumberHistory_List);
|
|
StockClearLog _StockClearLog = new StockClearLog()
|
{
|
ID = Guid.NewGuid().ToString(),
|
serialNumber = item.serialNumber,
|
containerCode = stock.containerCode,
|
materialCode = stock.materialCode,
|
materialName = stock.materialName,
|
positionName = stock.positionName,
|
qty = stock.quantity,
|
supplier = stock.supplier,
|
version = stock.version,
|
Remark = "天永呼叫余料回库,判断是余料回库,就认为清理天永使用过的流水号",
|
CreateTime = DateTime.Now,
|
LastModifyTime = DateTime.Now,
|
Creator = "天永",
|
LastModifier = "天永",
|
};
|
mod.StockClearLog.Add(_StockClearLog);
|
}
|
else
|
{
|
item.stockId = Convert.ToInt64(toplace.Split('/')[1]);//toplace 返回的库位名称和ID 用/连接再一起
|
}
|
}
|
#endregion
|
}
|
|
|
CommnHandleDeletaData(mod, AREA, willInsert_tianyongParams, willDelete_serialNumberHistory_List);
|
|
|
task newTask = new task();
|
#region 写入任务
|
newTask.createListCode = ishaveGG == true ? "KG" + DateTime.Now.ToString("yyMMddHHmmss") : "KT" + DateTime.Now.ToString("yyMMddHHmmss");
|
|
var _taskStatus = default(taskStatus);
|
var _taskType = default(taskType);
|
if (value.station.Trim() == "GTU4" || value.station.Trim() == "GTU5")
|
{//增加对旁路工位的判断 [EditBy shaocx,2022-05-04]
|
_taskType = isEmpty.Count == 0 ? taskType.旁路工位缸体空托回库 : taskType.旁路工位缸体余料回库;
|
_taskStatus = taskStatus.新建;
|
newTask.isQueLiao = 0;
|
}
|
else
|
{
|
_taskType = isEmpty.Count == 0 ? taskType.空托回库 : taskType.余料回库;
|
_taskStatus = taskStatus.未下发;
|
}
|
|
newTask.taskType = (int)_taskType;
|
newTask.taskTypeName = _taskType.ToString();
|
newTask.taskName = taskname;
|
newTask.taskStatus = (int)_taskStatus;
|
newTask.sourcePlace = value.station.Trim();
|
newTask.middlePlace = "";
|
newTask.toPlace = toplace.Split('/')[0];
|
newTask.area = ishaveGG == true ? 2 : 1;
|
newTask.priority = 1;
|
newTask.materialCode = isEmpty.Count == 0 ? "" : materialCode;
|
newTask.materialName = isEmpty.Count == 0 ? "" : materialName;
|
newTask.quantity = isEmpty.Count == 0 ? 0 : isEmpty.Count;
|
newTask.createTime = DateTime.Now;
|
newTask.sendMesed = isEmpty.Count == 0 ? 0 : 1;//1=未发送,2=发送成功,3=发送失败,o是空托盘不参与对接
|
newTask.mesReply = isEmpty.Count == 0 ? "" : "未发送";
|
newTask.supplier = stock.supplier;//供应商 【EditBy shaocx,2022-01-15】
|
newTask.containerCode = stock.containerCode;//托盘号 【EditBy shaocx,2022-01-15】
|
newTask.version = stock.version;
|
newTask.creator = "PDA";
|
//记录PLC任务号和AGV任务号 【EditBy shaocx,2022-03-28】
|
MyExtendHelper.SetPlcTaskNoAgvTaskNo(ref newTask);
|
#endregion
|
mod.task.Add(newTask);
|
|
//起点库位解锁、设置无货 【EditBy shaocx,2022-03-23】
|
position _sourcePlace = mod.position.FirstOrDefault(x => x.positionName == value.station);
|
PositionHandler.LockAndFree(false, false, _sourcePlace, "天永呼叫余料回库,起点库位解锁、设置无货", "天永", newTask);
|
|
CommonHandlerForEmptyBack(mod, res, newTask);
|
}
|
//增加对原先库存就是空托盘的处理 【EditBy shaocx,2024-10-12】
|
else if (stock.materialCode == "GG-KTP" || stock.materialCode == "GT-KTP")
|
{
|
using (yunneiPda.WCSserver.IyunneiWcfClient wcsWcf = new WCSserver.IyunneiWcfClient())
|
{
|
toplace = wcsWcf.findStock(AREA);//找空库位
|
}
|
if (toplace == "")
|
{
|
res.msg = "没有空库位";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", res.msg);
|
return res;
|
}
|
|
List<productStockList> isEmpty = new List<productStockList>();
|
#region 空托回库
|
taskname = ishaveGG == true ? "缸盖空托回库" : "缸体空托回库";
|
//清除库存
|
productStock backStock = mod.productStock.FirstOrDefault(x => x.positionId == stock.positionId);
|
if (backStock != null)
|
{
|
mod.productStock.Remove(backStock);
|
}
|
|
#endregion
|
|
|
CommnHandleDeletaData(mod, AREA, willInsert_tianyongParams, willDelete_serialNumberHistory_List);
|
|
|
task newTask = new task();
|
#region 写入任务
|
newTask.createListCode = ishaveGG == true ? "KG" + DateTime.Now.ToString("yyMMddHHmmss") : "KT" + DateTime.Now.ToString("yyMMddHHmmss");
|
|
var _taskStatus = default(taskStatus);
|
var _taskType = default(taskType);
|
if (value.station.Trim() == "GTU4" || value.station.Trim() == "GTU5")
|
{//增加对旁路工位的判断 [EditBy shaocx,2022-05-04]
|
_taskType = isEmpty.Count == 0 ? taskType.旁路工位缸体空托回库 : taskType.旁路工位缸体余料回库;
|
_taskStatus = taskStatus.新建;
|
newTask.isQueLiao = 0;
|
}
|
else
|
{
|
_taskType = isEmpty.Count == 0 ? taskType.空托回库 : taskType.余料回库;
|
_taskStatus = taskStatus.未下发;
|
}
|
|
newTask.taskType = (int)_taskType;
|
newTask.taskTypeName = _taskType.ToString();
|
newTask.taskName = taskname;
|
newTask.taskStatus = (int)_taskStatus;
|
newTask.sourcePlace = value.station.Trim();
|
newTask.middlePlace = "";
|
newTask.toPlace = toplace.Split('/')[0];
|
newTask.area = ishaveGG == true ? 2 : 1;
|
newTask.priority = 1;
|
newTask.materialCode = isEmpty.Count == 0 ? "" : materialCode;
|
newTask.materialName = isEmpty.Count == 0 ? "" : materialName;
|
newTask.quantity = isEmpty.Count == 0 ? 0 : isEmpty.Count;
|
newTask.createTime = DateTime.Now;
|
newTask.sendMesed = isEmpty.Count == 0 ? 0 : 1;//1=未发送,2=发送成功,3=发送失败,o是空托盘不参与对接
|
newTask.mesReply = isEmpty.Count == 0 ? "" : "未发送";
|
newTask.supplier = stock.supplier;//供应商 【EditBy shaocx,2022-01-15】
|
newTask.containerCode = stock.containerCode;//托盘号 【EditBy shaocx,2022-01-15】
|
newTask.version = stock.version;
|
newTask.creator = "PDA";
|
//记录PLC任务号和AGV任务号 【EditBy shaocx,2022-03-28】
|
MyExtendHelper.SetPlcTaskNoAgvTaskNo(ref newTask);
|
#endregion
|
mod.task.Add(newTask);
|
|
//起点库位解锁、设置无货 【EditBy shaocx,2022-03-23】
|
position _sourcePlace = mod.position.FirstOrDefault(x => x.positionName == value.station);
|
PositionHandler.LockAndFree(false, false, _sourcePlace, "天永呼叫余料回库,起点库位解锁、设置无货", "天永", newTask);
|
|
CommonHandlerForEmptyBack(mod, res, newTask);
|
}
|
else
|
{
|
res.msg = "非法回库站点,库存没数据";
|
}
|
|
#endregion
|
}
|
}
|
#endregion
|
else
|
{
|
res.msg = value.station.Trim() + "这里没有数据,不能执行";
|
}
|
}
|
|
}
|
catch (Exception ex)
|
{
|
res.status = 400;
|
res.msg = "保存异常";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", "异常:" + ex.ToString());
|
}
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", "接口返回:" + res.msg);
|
return res;
|
}
|
|
|
private void RemoveDataForDeleteProductStockList(productStockList item, System.Collections.Generic.List<serialNumberHistory> db_history,
|
ref List<inStockOrderList> willInsert_tianyongParams, ref List<serialNumberHistory> willDelete_serialNumberHistory_List)
|
{
|
//同时将表serialNumberHistory移除
|
var removeList = db_history.Where(x => (x.productCode + "_" + x.serialNumber) == (item.productCode + "_" + item.serialNumber)).ToList();
|
willDelete_serialNumberHistory_List.AddRange(removeList);
|
//同时清理 willInsert_tianyongParams
|
willInsert_tianyongParams = willInsert_tianyongParams.Where(x => (x.productCode + "_" + x.serialNumber) != (item.productCode + "_" + item.serialNumber)).ToList();
|
}
|
|
/// <summary>
|
/// 公共处理移除数据
|
/// </summary>
|
/// <param name="mod"></param>
|
/// <param name="AREA"></param>
|
/// <param name="willInsert_tianyongParams"></param>
|
/// <param name="willDelete_serialNumberHistory_List"></param>
|
private void CommnHandleDeletaData(dbmodel mod, int? AREA, List<inStockOrderList> willInsert_tianyongParams, List<serialNumberHistory> willDelete_serialNumberHistory_List)
|
{
|
//删除表 serialNumberHistory
|
if (willDelete_serialNumberHistory_List.Count > 0)
|
{
|
mod.serialNumberHistory.RemoveRange(willDelete_serialNumberHistory_List);
|
}
|
//新增表 serialNumberHistory
|
foreach (var item in willInsert_tianyongParams)
|
{
|
serialNumberHistory newHistory = new serialNumberHistory();
|
newHistory.area = AREA;
|
newHistory.serialNumber = item.serialNumber;
|
newHistory.productCode = item.productCode;
|
newHistory.createTime = DateTime.Now;
|
mod.serialNumberHistory.Add(newHistory);
|
}
|
|
}
|
|
private void CommonHandlerForEmptyBack(dbmodel mod, resMsg<string> res, task newTask)
|
{
|
int ress = mod.SaveChanges();
|
|
if (ress < 1)
|
{
|
res.msg = "保存数据失败";
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "EmptyBack", "保存数据失败");
|
}
|
else
|
{
|
res.status = 200;
|
//res.total = 0;
|
//要传递任务号 【Editby shaocx,2024-10-12】
|
if (newTask != null)
|
{
|
res.total = (int)newTask.taskId;
|
}
|
else
|
{
|
res.total = 0;
|
}
|
}
|
}
|
|
#endregion
|
|
#region AGV系统调用的接口
|
|
/// <summary>AGV进去离开安全信号,该接口由AGV系统不停的调用,直到返回允许为止
|
///
|
/// </summary>
|
/// <param name="station">站点号</param>
|
/// <param name="OutOrIn">1=进,2=出</param>
|
/// <returns></returns>
|
[HttpPost]
|
|
public bool safetySignal([FromUri] string station, int OutOrIn, string taskId)
|
{
|
bool isok = false;
|
try
|
{
|
using (yunneiPda.WCSserver.IyunneiWcfClient wcsWcf = new WCSserver.IyunneiWcfClient())
|
{
|
isok = wcsWcf.safetySignal(station, OutOrIn, taskId);//收到AGV的信号后,WCS要通知到天永机器人那边,说物料已经送到了。
|
}
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "safetySignal", "收到安全信号站点号:" + station + "1=进2=出:" + OutOrIn + "任务ID:" + taskId + "返回" + isok);
|
}
|
catch (Exception ex)
|
{
|
isok = false;
|
WZ.Useful.Commons.LogTextHelper.WriteLine("pdaController", "changeOrderStatus", ex.ToString());
|
}
|
return isok;
|
|
}
|
|
#endregion
|
}
|
public class user
|
{
|
/// <summary>
|
/// 用户名
|
/// </summary>
|
public string userName { get; set; }
|
/// <summary>
|
/// 密码
|
/// </summary>
|
public string passWord { get; set; }
|
}
|
}
|