|
|
|
@ -24,7 +24,7 @@ using System.Threading.Tasks;
|
|
|
|
|
namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 入库业务逻辑
|
|
|
|
|
/// 成品下线业务逻辑
|
|
|
|
|
/// </summary>
|
|
|
|
|
public class OffLineBusiness
|
|
|
|
|
{
|
|
|
|
@ -93,35 +93,13 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
|
|
|
|
|
public async void test()
|
|
|
|
|
{
|
|
|
|
|
string tt = "Y@1104@16160030000000910780@000010034895@@ @000000@000000009000000807@BCD-160C,家电下乡@@BCD-160C@皓月白-家电下乡@161601300@160@1-00版@家电下乡产品@默认@2010-09-01";
|
|
|
|
|
string[] FArrayList = tt.Split('@');
|
|
|
|
|
if (FArrayList[0].ToUpper() == "Y") //查询数据成功
|
|
|
|
|
// string tt = "Y@1104@16160030000000910780@000010034895@@ @000000@000000009000004899@BCD-160C,家电下乡@@BCD-160C@皓月白-家电下乡@161601300@160@1-00版@家电下乡产品@默认@2010-09-01";
|
|
|
|
|
Task.Run(() =>
|
|
|
|
|
{
|
|
|
|
|
#region 实体赋值
|
|
|
|
|
TempOffLineInfo1.ProductFactoryCode = FArrayList[1];
|
|
|
|
|
TempOffLineInfo1.ProductSNCode = FArrayList[2];
|
|
|
|
|
TempOffLineInfo1.ProductOrderNo = DBToString(FArrayList[3]);
|
|
|
|
|
TempOffLineInfo1.ProductSaleNo = DBToString(FArrayList[4]);
|
|
|
|
|
TempOffLineInfo1.ProductSaleLineNo = DBToString(FArrayList[5]);
|
|
|
|
|
TempOffLineInfo1.ProductCheckInfo = DBToString(FArrayList[6]); //验证组合
|
|
|
|
|
TempOffLineInfo1.ProductCode = DBToString(FArrayList[7]);
|
|
|
|
|
TempOffLineInfo1.ProductName = DBToString(FArrayList[8]); //产品描述
|
|
|
|
|
TempOffLineInfo1.ProductType = FArrayList[9];
|
|
|
|
|
TempOffLineInfo1.ProductModel = FArrayList[10]; //产品型号
|
|
|
|
|
TempOffLineInfo1.ProductRemark = DBToString(FArrayList[11]);
|
|
|
|
|
TempOffLineInfo1.ProductBarNo = FArrayList[12];
|
|
|
|
|
TempOffLineInfo1.ProductMasterModel = FArrayList[13]; //产品主型号
|
|
|
|
|
TempOffLineInfo1.ProductVersion = FArrayList[14];
|
|
|
|
|
TempOffLineInfo1.ProductUseInfo = FArrayList[15];//产品用途
|
|
|
|
|
TempOffLineInfo1.ProductCirculate = FArrayList[16];//流通特性
|
|
|
|
|
TempOffLineInfo1.ProductCreateDate = FArrayList[17];
|
|
|
|
|
#endregion
|
|
|
|
|
TempOffLineInfo1.ProductScanTime = System.DateTime.Now;
|
|
|
|
|
TempOffLineInfo1.number1 = "111";
|
|
|
|
|
// OffLineInfo info11 = MapperTwo(TempOffLineInfo);
|
|
|
|
|
// int a = await _offLineInfoServices.AddAsync(info11);
|
|
|
|
|
// Console.WriteLine(a);
|
|
|
|
|
}
|
|
|
|
|
Thread.Sleep(5000);
|
|
|
|
|
MaterialBarScanEvent("32160030000000910780", "192.168.1.19");
|
|
|
|
|
// MaterialBarScanEvent("33160030000000910780", "192.168.1.20");
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 处理条码
|
|
|
|
@ -130,30 +108,50 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
/// <param name="direction">扫码器方向</param>
|
|
|
|
|
public async void MaterialBarScanEvent(string code,string scannerIp)//接收条码数据
|
|
|
|
|
{
|
|
|
|
|
int ScannerNo = scannerIp== Appsettings.app("Middleware", "Scanner1", "Ip") ? 1:2 ; // 确定是哪个扫码器
|
|
|
|
|
|
|
|
|
|
bool BackResult = false;
|
|
|
|
|
if (ScannerNo==1)
|
|
|
|
|
Task.Run(async () =>
|
|
|
|
|
{
|
|
|
|
|
//1.扫描的SN条码去条码系统校验
|
|
|
|
|
BackResult = await HandleMaterialBarCode(code.Trim(), TempOffLineInfo1); //扫码器1
|
|
|
|
|
// 2.更新mes数据库
|
|
|
|
|
await updateMesData(TempOffLineInfo1);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
BackResult = await HandleMaterialBarCode(code.Trim(), TempOffLineInfo2); //扫码器2
|
|
|
|
|
// 2.更新mes数据库
|
|
|
|
|
await updateMesData(TempOffLineInfo1);
|
|
|
|
|
}
|
|
|
|
|
if (BackResult == true)
|
|
|
|
|
{
|
|
|
|
|
log.Info(String.Format("订单号{0} 订单数量{1}", TempOffLineInfo1.ProductOrderNo, TempOffLineInfo1.OrderQty));
|
|
|
|
|
// 先查询分垛方向A或者B
|
|
|
|
|
string direction = getDirectioneEvent?.Invoke(TempOffLineInfo1.ProductCode);
|
|
|
|
|
DownLoadPassFlag(ScannerNo,direction); //下发plc放行信号,分垛AB库
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
int ScannerNo = scannerIp == Appsettings.app("Middleware", "Scanner1", "Ip") ? 1 : 2; // 确定是哪个扫码器
|
|
|
|
|
string materialType = "";
|
|
|
|
|
bool BackResult = false;
|
|
|
|
|
if (ScannerNo == 1)
|
|
|
|
|
{
|
|
|
|
|
//1.扫描的SN条码去条码系统校验
|
|
|
|
|
BackResult = await HandleMaterialBarCode(code.Trim(), TempOffLineInfo1); //扫码器1
|
|
|
|
|
materialType = TempOffLineInfo1.ProductCode;
|
|
|
|
|
if (!BackResult)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// 2.更新mes数据库
|
|
|
|
|
BackResult = await updateMesData(TempOffLineInfo1);
|
|
|
|
|
log.Info(String.Format("订单号{0} 订单数量{1}", TempOffLineInfo1.ProductOrderNo, TempOffLineInfo1.OrderQty));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
BackResult = await HandleMaterialBarCode(code.Trim(), TempOffLineInfo2); //扫码器2
|
|
|
|
|
materialType = TempOffLineInfo2.ProductCode;
|
|
|
|
|
if (!BackResult)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// 2.更新mes数据库
|
|
|
|
|
BackResult = await updateMesData(TempOffLineInfo2);
|
|
|
|
|
log.Info(String.Format("订单号{0} 订单数量{1}", TempOffLineInfo2.ProductOrderNo, TempOffLineInfo2.OrderQty));
|
|
|
|
|
}
|
|
|
|
|
if (BackResult == true)
|
|
|
|
|
{
|
|
|
|
|
// 先查询分垛方向A或者B
|
|
|
|
|
string direction = getDirectioneEvent?.Invoke(materialType);
|
|
|
|
|
bool plcResult = DownLoadPassFlag(ScannerNo, direction); //下发plc放行信号,分垛AB库
|
|
|
|
|
if (plcResult == false)
|
|
|
|
|
{
|
|
|
|
|
sendPlcError();
|
|
|
|
|
}
|
|
|
|
|
log.Info("plc放行反馈成功");
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 条码验证成功后,更新mes数据库 成品下线表,订单表等等
|
|
|
|
@ -164,7 +162,6 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
// TempOffLineInfo.ProductRefreshFlag = true;
|
|
|
|
|
OffLineInfo info11 = MapperTwo(TempOffLineInfo);
|
|
|
|
|
// 添加成品下线表
|
|
|
|
|
await _offLineInfoServices.AddAsync(info11);
|
|
|
|
@ -172,8 +169,8 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
////6.更新mes 数据库完成数量和时间(BASE_ORDERINFO,PRODUCT_PLANINFO) 注意:查询的字段可能需要修改,确保数据一致
|
|
|
|
|
|
|
|
|
|
////6.1截取订单号去查询更新BASE_ORDERINFO,全放到service处理
|
|
|
|
|
//string orderCode = "11215484";
|
|
|
|
|
//List<BaseOrderInfo> orders = await _baseOrderInfoServices.QueryAsync(x => x.OrderCode == orderCode);
|
|
|
|
|
|
|
|
|
|
List<BaseOrderInfo> orders = await _baseOrderInfoServices.QueryAsync(x => x.OrderCode == TempOffLineInfo.ProductOrderNo);
|
|
|
|
|
//BaseOrderInfo order = orders.FirstOrDefault();
|
|
|
|
|
//if (order.CompleteAmount == 0)
|
|
|
|
|
//{
|
|
|
|
@ -217,37 +214,37 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
/// <param name="BarCode"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public async Task<bool> HandleMaterialBarCode(string BarCode,TempInfo TempOffLineInfo)
|
|
|
|
|
{
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
TempOffLineInfo.ProductSNCode = BarCode.Trim(); //SN码
|
|
|
|
|
TempOffLineInfo.ProductScanTime = System.DateTime.Now;
|
|
|
|
|
|
|
|
|
|
TempOffLineInfo.ProductOrderNo = "";
|
|
|
|
|
Thread.Sleep(10000);
|
|
|
|
|
TempOffLineInfo.ProductSNCode = BarCode.Trim(); //产品SN条码*1
|
|
|
|
|
TempOffLineInfo.ProductScanTime = System.DateTime.Now; // 扫码时间*2
|
|
|
|
|
TempOffLineInfo.ProductOrderNo = "";
|
|
|
|
|
log.Info("条码验证开始:" + BarCode);
|
|
|
|
|
|
|
|
|
|
//1.查询条码系统
|
|
|
|
|
string result = await _productOffLineServices.QueryChecked(BarCode);
|
|
|
|
|
// string result = "Y@1104@16160030000000910780@000010034895@@ @000000@000000009000000807@BCD-160C,家电下乡@@BCD-160C@皓月白-家电下乡@161601300@160@1-00版@家电下乡产品@默认@2010-09-01";
|
|
|
|
|
// string result = await _productOffLineServices.QueryChecked(BarCode);
|
|
|
|
|
string result = "Y@1104@16160030000000910780@000010034895@@ @000000@000000009000004899@BCD-160C,家电下乡@@BCD-160C@test皓月白-家电下乡@161601300@160@1-00版@家电下乡产品@默认@2010-09-01";
|
|
|
|
|
|
|
|
|
|
//查询到的数据分割处理,结果中用"@"号分隔,刷新页面显示
|
|
|
|
|
string[] FArrayList = result.Split('@');
|
|
|
|
|
//查询到的数据分割处理,结果中用"@"号分隔,刷新页面显示
|
|
|
|
|
string[] FArrayList = result.Split('@');
|
|
|
|
|
if (FArrayList[0].ToUpper() == "Y") //查询数据成功
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
log.Info(BarCode + "成功返回验证信息:" + result);
|
|
|
|
|
|
|
|
|
|
#region 实体赋值
|
|
|
|
|
TempOffLineInfo.MsgInfo = "获取信息成功" + BarCode + " 返回值:" + FArrayList[0].ToUpper();
|
|
|
|
|
TempOffLineInfo.MsgInfo = "获取信息成功" + BarCode + " 返回值:" + FArrayList[0].ToUpper(); // 提示信息*7
|
|
|
|
|
TempOffLineInfo.ProductFactoryCode = FArrayList[1];
|
|
|
|
|
TempOffLineInfo.ProductSNCode = FArrayList[2];
|
|
|
|
|
TempOffLineInfo.ProductOrderNo = DBToString(FArrayList[3]).Replace("0000", "");
|
|
|
|
|
TempOffLineInfo.ProductOrderNo = DBToString(FArrayList[3]).Replace("0000", ""); // 订单编号*4
|
|
|
|
|
TempOffLineInfo.ProductSaleNo = DBToString(FArrayList[4]);
|
|
|
|
|
TempOffLineInfo.ProductSaleLineNo = DBToString(FArrayList[5]);
|
|
|
|
|
TempOffLineInfo.ProductCheckInfo = DBToString(FArrayList[6]); //验证组合
|
|
|
|
|
TempOffLineInfo.ProductCode = DBToString(FArrayList[7]).Replace("00000000", "");
|
|
|
|
|
TempOffLineInfo.ProductName = DBToString(FArrayList[8]); //产品描述
|
|
|
|
|
TempOffLineInfo.ProductType = FArrayList[9];
|
|
|
|
|
TempOffLineInfo.ProductModel = FArrayList[10]; //产品型号
|
|
|
|
|
TempOffLineInfo.ProductModel = FArrayList[10]; //产品型号*3
|
|
|
|
|
TempOffLineInfo.ProductRemark = DBToString(FArrayList[11]);
|
|
|
|
|
TempOffLineInfo.ProductBarNo = FArrayList[12];
|
|
|
|
|
TempOffLineInfo.ProductMasterModel = FArrayList[13]; //产品主型号
|
|
|
|
@ -256,7 +253,8 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
TempOffLineInfo.ProductCirculate = FArrayList[16];//流通特性
|
|
|
|
|
TempOffLineInfo.ProductCreateDate = FArrayList[17];
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
//界面刷新
|
|
|
|
|
TempOffLineInfo.ProductRefreshFlag = true;
|
|
|
|
|
// 多码系统校验,是否需要待定,现场看情况
|
|
|
|
|
// bool flag = TestBarCode(TempOffLineInfo);
|
|
|
|
|
// if (!flag)
|
|
|
|
@ -268,8 +266,8 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
log.Info(BarCode + "失败返回验证信息:" + FArrayList[1]);
|
|
|
|
|
|
|
|
|
|
#region 实体赋值
|
|
|
|
|
// TempOffLineInfo.ProductDataFlag = true;
|
|
|
|
|
TempOffLineInfo.MsgAlarmFlag = true;
|
|
|
|
|
TempOffLineInfo.MsgInfo = "获取信息失败. " + BarCode + " 返回值:" + FArrayList[0].ToString();
|
|
|
|
|
TempOffLineInfo.ProductOrderNo = "";
|
|
|
|
@ -293,6 +291,8 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
TempOffLineInfo.sim = "";
|
|
|
|
|
TempOffLineInfo.number1 = "";
|
|
|
|
|
#endregion
|
|
|
|
|
//界面刷新
|
|
|
|
|
TempOffLineInfo.ProductRefreshFlag = true;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
// mes查询订单数据, 异常处理:后期可能根据SN码查箱体码,查订单号并检查更新订单数据
|
|
|
|
@ -300,18 +300,21 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
//2.上传条码系统
|
|
|
|
|
if (!string.IsNullOrEmpty(TempOffLineInfo.ProductOrderNo))
|
|
|
|
|
{
|
|
|
|
|
string strSave = await _productOffLineServices.SaveBarcodeInfo(BarCode.Trim(), "ILS_SORT", TempOffLineInfo.ProductOrderNo, 1);
|
|
|
|
|
if (!string.IsNullOrEmpty(strSave))
|
|
|
|
|
// string strSave = await _productOffLineServices.SaveBarcodeInfo(BarCode.Trim(), "ILS_SORT", TempOffLineInfo.ProductOrderNo, 1);
|
|
|
|
|
string strSave = "Y";
|
|
|
|
|
if (!string.IsNullOrEmpty(strSave))
|
|
|
|
|
{
|
|
|
|
|
if (strSave == "Y")
|
|
|
|
|
{
|
|
|
|
|
log.Info(BarCode + "上传条码成功:" + strSave);
|
|
|
|
|
|
|
|
|
|
TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + ",上传条码成功" + strSave;
|
|
|
|
|
if (order != null)
|
|
|
|
|
TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + ",上传条码成功";
|
|
|
|
|
//界面刷新
|
|
|
|
|
TempOffLineInfo.ProductRefreshFlag = true;
|
|
|
|
|
if (order != null)
|
|
|
|
|
{
|
|
|
|
|
TempOffLineInfo.OrderQty = order.OrderAmount;
|
|
|
|
|
TempOffLineInfo.ActQty = order.CompleteAmount;
|
|
|
|
|
TempOffLineInfo.OrderQty = order.OrderAmount; // 订单数量*5
|
|
|
|
|
TempOffLineInfo.ActQty = order.CompleteAmount; // 订单已上传*6
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
@ -319,40 +322,53 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
{
|
|
|
|
|
log.Info(BarCode + "上传条码失败:" + strSave);
|
|
|
|
|
TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + ",上传条码失败" + strSave;
|
|
|
|
|
if (strSave.Contains("条码重复"))
|
|
|
|
|
{
|
|
|
|
|
//界面刷新
|
|
|
|
|
TempOffLineInfo.ProductRefreshFlag = true;
|
|
|
|
|
if (strSave.Contains("条码重复"))
|
|
|
|
|
{
|
|
|
|
|
// 查询本地数据库是否有数据
|
|
|
|
|
OffLineInfo offLineInfo = await _offLineInfoServices.FirstAsync(x => x.ProductSNCode == BarCode);
|
|
|
|
|
if (offLineInfo != null)
|
|
|
|
|
{
|
|
|
|
|
log.Info(BarCode + "条码重复,本地已存在");
|
|
|
|
|
TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + ",上传条码失败" + strSave + "上传日期:" + DBToString(offLineInfo.ProductScanTime);
|
|
|
|
|
log.Info(BarCode + "条码重复,本地已存在,放行");
|
|
|
|
|
TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + "条码重复,本地已存在,放行";
|
|
|
|
|
//界面刷新
|
|
|
|
|
TempOffLineInfo.ProductRefreshFlag = true;
|
|
|
|
|
return true;
|
|
|
|
|
// chkout:条码重复是否允许放行
|
|
|
|
|
if (TempOffLineInfo.ChkOut == true)
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
//if (TempOffLineInfo.ChkOut == true)
|
|
|
|
|
//{
|
|
|
|
|
// return true;
|
|
|
|
|
//}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
log.Info(BarCode + "条码重复,本地不存在,已上传中");
|
|
|
|
|
|
|
|
|
|
OffLineInfo info11 = MapperTwo(TempOffLineInfo);
|
|
|
|
|
await _offLineInfoServices.AddAsync(info11);
|
|
|
|
|
}
|
|
|
|
|
log.Info(BarCode + "条码重复,本地不存在,已插入,放行");
|
|
|
|
|
OffLineInfo info11 = MapperTwo(TempOffLineInfo);
|
|
|
|
|
await _offLineInfoServices.AddAsync(info11);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
TempOffLineInfo.MsgAlarmFlag = false;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + ",条码系统保存接口异常";
|
|
|
|
|
TempOffLineInfo.MsgAlarmFlag = true;
|
|
|
|
|
//界面刷新
|
|
|
|
|
TempOffLineInfo.ProductRefreshFlag = true;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + ",生产单号异常";
|
|
|
|
|
TempOffLineInfo.MsgAlarmFlag = true;
|
|
|
|
|
//界面刷新
|
|
|
|
|
TempOffLineInfo.ProductRefreshFlag = true;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -360,14 +376,11 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
{
|
|
|
|
|
TempOffLineInfo.MsgInfo = "获取产品条码异常:" + ex.Message;
|
|
|
|
|
TempOffLineInfo.MsgAlarmFlag = true;
|
|
|
|
|
|
|
|
|
|
//界面刷新
|
|
|
|
|
TempOffLineInfo.ProductRefreshFlag = true;
|
|
|
|
|
log.Info(BarCode + "条码验证异常:" + ex.Message.ToString());
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
finally
|
|
|
|
|
{
|
|
|
|
|
TempOffLineInfo.ProductRefreshFlag = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#region plc交互
|
|
|
|
@ -402,7 +415,7 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
// 往plc写入放行信号
|
|
|
|
|
obj.plc.WriteInt32("D202", 1);
|
|
|
|
|
}
|
|
|
|
|
DateTime targetTime = DateTime.Now.AddSeconds(8);
|
|
|
|
|
DateTime targetTime = DateTime.Now.AddSeconds(60);
|
|
|
|
|
// 等待plc反馈信号
|
|
|
|
|
while (true)
|
|
|
|
|
{
|
|
|
|
|