|
|
|
@ -4,11 +4,15 @@ using Admin.Core.Model.Model_New;
|
|
|
|
|
using Admin.Core.Service;
|
|
|
|
|
using Aucma.Core.PLc;
|
|
|
|
|
using Aucma.Core.ProductOffLine;
|
|
|
|
|
using Aucma.Core.ProductOffLine.Models;
|
|
|
|
|
using log4net;
|
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
|
using Microsoft.IdentityModel.Logging;
|
|
|
|
|
using RestSharp;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Data;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading;
|
|
|
|
@ -32,14 +36,26 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
//public OffLineBusiness(){}
|
|
|
|
|
|
|
|
|
|
#region 变量定义
|
|
|
|
|
public static OffLineInfo TempOffLineInfo = new OffLineInfo();
|
|
|
|
|
public static OffLineInfo FDOffLineInfo = new OffLineInfo();
|
|
|
|
|
// 河南工厂编码
|
|
|
|
|
private static string Werks = "1301";
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region 接口引用
|
|
|
|
|
|
|
|
|
|
private static readonly log4net.ILog log = LogManager.GetLogger(typeof(OffLineBusiness));
|
|
|
|
|
private readonly IBaseOrderInfoServices _baseOrderInfoServices;
|
|
|
|
|
private readonly IProductPlanInfoServices? _productPlanInfoServices;
|
|
|
|
|
private readonly IProductOffLineServices? _productOffLineServices;
|
|
|
|
|
|
|
|
|
|
private readonly IBaseOrderInfoServices _baseOrderInfoServices = App.ServiceProvider.GetService<IBaseOrderInfoServices>();
|
|
|
|
|
private readonly IProductPlanInfoServices? _productPlanInfoServices = App.ServiceProvider.GetService<IProductPlanInfoServices>();
|
|
|
|
|
// 成品下线操作条码系统接口
|
|
|
|
|
private readonly IProductOffLineServices? _productOffLineServices = App.ServiceProvider.GetService<IProductOffLineServices>();
|
|
|
|
|
// 成品下线操作mes数据
|
|
|
|
|
private readonly IOffLineInfoServices? _offLineInfoServices = App.ServiceProvider.GetService<IOffLineInfoServices>();
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -66,55 +82,51 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
public OffLineBusiness()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
public void test()
|
|
|
|
|
public async void test()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
BaseOrderInfo order = await _baseOrderInfoServices.FirstAsync();
|
|
|
|
|
Console.WriteLine(order);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 扫描的条码处理
|
|
|
|
|
/// 处理条码
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="code"></param>
|
|
|
|
|
/// <param name="direction">扫码器方向</param>
|
|
|
|
|
private async void ReceiveCode(string code, int scannerNo)
|
|
|
|
|
{
|
|
|
|
|
//1.扫描的SN条码去条码系统查询GET_BARCODE_DATA 返回校验数据
|
|
|
|
|
// string result = await _productOffLineServices.QueryChecked(code);
|
|
|
|
|
string result = "Y@1104@16160030000000910780@000010034895@@ @000000@000000009000000807@BCD-160C,家电下乡@@BCD-160C@皓月白-家电下乡@161601300@160@1-00版@家电下乡产品@默认@2010-09-01";
|
|
|
|
|
// 如果校验失败,下发报警
|
|
|
|
|
if ("N".Equals(result.Substring(0, 1)))
|
|
|
|
|
private async void MaterialBarScanEvent(string code)//接收条码数据
|
|
|
|
|
{
|
|
|
|
|
sendPlcError();
|
|
|
|
|
// 刷新页面提示信息 result.Substring(2)
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
//2.查询到的数据分割处理,结果中用"@"号分隔,刷新页面显示并存到scada数据库(表待建)
|
|
|
|
|
string[] resultArray = result.Split('@');
|
|
|
|
|
// 输出结果
|
|
|
|
|
foreach (string item in resultArray)
|
|
|
|
|
//1.扫描的SN条码去条码系统校验
|
|
|
|
|
bool BackResult = await HandleMaterialBarCode(code.Trim()); //处理条码信息
|
|
|
|
|
TempOffLineInfo.ReadFlag = 0;
|
|
|
|
|
if (BackResult == true)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine(item);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// // 如果校验失败,下发报警
|
|
|
|
|
// if ("N".Equals(result.Substring(0, 1)))
|
|
|
|
|
//{
|
|
|
|
|
// sendPlcError();
|
|
|
|
|
// // 刷新页面提示信息 result.Substring(2)
|
|
|
|
|
// return false;
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//3.分垛A,B库逻辑(先左边读到的条码分A库,右边读到的B库==>预留分库逻辑)
|
|
|
|
|
|
|
|
|
|
//4.下发plc信号
|
|
|
|
|
bool flag = SendPlcPass(scannerNo);
|
|
|
|
|
if (!flag)
|
|
|
|
|
{
|
|
|
|
|
log.Error("获取plc反馈失败");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
Console.WriteLine(code);
|
|
|
|
|
return;
|
|
|
|
|
////4.下发plc信号
|
|
|
|
|
//bool flag = SendPlcPass();
|
|
|
|
|
//if (!flag)
|
|
|
|
|
//{
|
|
|
|
|
// log.Error("获取plc反馈失败");
|
|
|
|
|
// return;
|
|
|
|
|
//}
|
|
|
|
|
//Console.WriteLine(code);
|
|
|
|
|
//return;
|
|
|
|
|
//5.调条码系统保存入库接口SaveBarcodeInfo
|
|
|
|
|
string saveResult = await _productOffLineServices.SaveBarcodeInfo("333", "ILS_SORT", "11111", 1);
|
|
|
|
|
if (string.IsNullOrEmpty(saveResult) || "E".Equals(saveResult.Substring(0, 1)))
|
|
|
|
@ -157,6 +169,167 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 去条码系统查询校验并保存
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="BarCode"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public async Task<bool> HandleMaterialBarCode(string BarCode)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
TempOffLineInfo.ProductSNCode = BarCode.Trim(); //SN码
|
|
|
|
|
TempOffLineInfo.ProductScanTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
|
|
|
|
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[] FArrayList = result.Split('@');
|
|
|
|
|
if (FArrayList[0].ToUpper() == "Y") //查询数据成功
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
log.Info(BarCode + "成功返回验证信息:" + result);
|
|
|
|
|
#region 实体赋值
|
|
|
|
|
TempOffLineInfo.MsgInfo = "获取信息成功" + BarCode + " 返回值:" + FArrayList[0].ToUpper();
|
|
|
|
|
TempOffLineInfo.ProductFactoryCode = FArrayList[1];
|
|
|
|
|
TempOffLineInfo.ProductSNCode = FArrayList[2];
|
|
|
|
|
TempOffLineInfo.ProductOrderNo = DBToString(FArrayList[3]);
|
|
|
|
|
TempOffLineInfo.ProductSaleNo = DBToString(FArrayList[4]);
|
|
|
|
|
TempOffLineInfo.ProductSaleLineNo = DBToString(FArrayList[5]);
|
|
|
|
|
TempOffLineInfo.ProductCheckInfo = DBToString(FArrayList[6]); //验证组合
|
|
|
|
|
TempOffLineInfo.ProductCode = DBToString(FArrayList[7]);
|
|
|
|
|
TempOffLineInfo.ProductName = DBToString(FArrayList[8]); //产品描述
|
|
|
|
|
TempOffLineInfo.ProductType = FArrayList[9];
|
|
|
|
|
TempOffLineInfo.ProductModel = FArrayList[10]; //产品型号
|
|
|
|
|
TempOffLineInfo.ProductRemark = DBToString(FArrayList[11]);
|
|
|
|
|
TempOffLineInfo.ProductBarNo = FArrayList[12];
|
|
|
|
|
TempOffLineInfo.ProductMasterModel = FArrayList[13]; //产品主型号
|
|
|
|
|
TempOffLineInfo.ProductVersion = FArrayList[14];
|
|
|
|
|
TempOffLineInfo.ProductUseInfo = FArrayList[15];//产品用途
|
|
|
|
|
TempOffLineInfo.ProductCirculate = FArrayList[16];//流通特性
|
|
|
|
|
TempOffLineInfo.ProductCreateDate = FArrayList[17];
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
// 多码系统校验,是否需要待定,现场看情况
|
|
|
|
|
bool flag = TestBarCode(TempOffLineInfo);
|
|
|
|
|
if (!flag)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
log.Info(TempOffLineInfo.ProductSNCode + ", 多码验证通过!");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
log.Info(BarCode + "失败返回验证信息:" + FArrayList[1]);
|
|
|
|
|
#region 实体赋值
|
|
|
|
|
TempOffLineInfo.ProductDataFlag = true;
|
|
|
|
|
TempOffLineInfo.MsgAlarmFlag = true;
|
|
|
|
|
TempOffLineInfo.MsgInfo = "获取信息失败. " + BarCode + " 返回值:" + FArrayList[0].ToString();
|
|
|
|
|
TempOffLineInfo.ProductOrderNo = "";
|
|
|
|
|
TempOffLineInfo.ProductSaleNo = "";
|
|
|
|
|
TempOffLineInfo.ProductSaleLineNo = "";
|
|
|
|
|
TempOffLineInfo.ProductCheckInfo = ""; //验证组合
|
|
|
|
|
TempOffLineInfo.ProductCode = "";
|
|
|
|
|
TempOffLineInfo.ProductName = ""; //产品描述
|
|
|
|
|
TempOffLineInfo.ProductType = "";
|
|
|
|
|
TempOffLineInfo.ProductModel = ""; //产品型号
|
|
|
|
|
TempOffLineInfo.ProductRemark = "";
|
|
|
|
|
TempOffLineInfo.ProductBarNo = ""; ;
|
|
|
|
|
TempOffLineInfo.ProductMasterModel = ""; //产品主型号
|
|
|
|
|
TempOffLineInfo.ProductVersion = "";
|
|
|
|
|
TempOffLineInfo.ProductUseInfo = "";//产品用途
|
|
|
|
|
TempOffLineInfo.ProductCirculate = "";//流通特性
|
|
|
|
|
TempOffLineInfo.ProductCreateDate = "";
|
|
|
|
|
TempOffLineInfo.oneCode = "";
|
|
|
|
|
TempOffLineInfo.serialNumber = "";
|
|
|
|
|
TempOffLineInfo.rfid = "";
|
|
|
|
|
TempOffLineInfo.sim = "";
|
|
|
|
|
TempOffLineInfo.number1 = "";
|
|
|
|
|
#endregion
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
// mes查询订单数据, 异常处理:后期可能根据SN码查箱体码,查订单号并检查更新订单数据
|
|
|
|
|
BaseOrderInfo order = await _baseOrderInfoServices.FirstAsync(x => x.OrderCode == TempOffLineInfo.ProductOrderNo.Replace("0000", ""));
|
|
|
|
|
//2.上传条码系统
|
|
|
|
|
if (!string.IsNullOrEmpty(TempOffLineInfo.ProductOrderNo))
|
|
|
|
|
{
|
|
|
|
|
string strSave = await _productOffLineServices.SaveBarcodeInfo(BarCode.Trim(), "ILS_SORT", TempOffLineInfo.ProductOrderNo, 1);
|
|
|
|
|
if (!string.IsNullOrEmpty(strSave))
|
|
|
|
|
{
|
|
|
|
|
if (strSave == "Y")
|
|
|
|
|
{
|
|
|
|
|
log.Info(BarCode + "上传条码成功:" + strSave);
|
|
|
|
|
|
|
|
|
|
TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + ",上传条码成功" + strSave;
|
|
|
|
|
if (order != null)
|
|
|
|
|
{
|
|
|
|
|
TempOffLineInfo.OrderQty = order.OrderAmount;
|
|
|
|
|
TempOffLineInfo.ActQty = order.CompleteAmount;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
log.Info(BarCode + "上传条码失败:" + strSave);
|
|
|
|
|
TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + ",上传条码失败" + strSave;
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
if (TempOffLineInfo.ChkOut == true)
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
log.Info(BarCode + "条码重复,本地不存在,已上传中");
|
|
|
|
|
await _offLineInfoServices.AddAsync(TempOffLineInfo);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + ",生产单号异常";
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
TempOffLineInfo.MsgInfo = "获取产品条码异常:" + ex.Message;
|
|
|
|
|
TempOffLineInfo.MsgAlarmFlag = true;
|
|
|
|
|
|
|
|
|
|
log.Info(BarCode + "条码验证异常:" + ex.Message.ToString());
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
finally
|
|
|
|
|
{
|
|
|
|
|
TempOffLineInfo.ProductRefreshFlag = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region plc交互
|
|
|
|
|
private SemaphoreSlim semaphore = new SemaphoreSlim(0);
|
|
|
|
@ -298,5 +471,125 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region 工具方法
|
|
|
|
|
/// <summary>
|
|
|
|
|
///
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="refData"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public static string DBToString(object refData)
|
|
|
|
|
{
|
|
|
|
|
if (refData == null)
|
|
|
|
|
return "";
|
|
|
|
|
else
|
|
|
|
|
return refData == DBNull.Value ? "" : refData.ToString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 多码系统校验
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="TempOffLineInfo"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public bool TestBarCode(OffLineInfo TempOffLineInfo)
|
|
|
|
|
{
|
|
|
|
|
if (TempOffLineInfo.ProductCode.Replace("00000000", "") == "9002005518" || TempOffLineInfo.ProductCode.Replace("00000000", "") == "9002005517")
|
|
|
|
|
{
|
|
|
|
|
TempOffLineInfo.ProductRemark = "";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (TempOffLineInfo.ProductRemark != "")
|
|
|
|
|
{
|
|
|
|
|
log.Info(TempOffLineInfo.ProductSNCode + ", 验证组合:" + TempOffLineInfo.ProductRemark);
|
|
|
|
|
|
|
|
|
|
string strCheck = TempOffLineInfo.ProductRemark.Replace("wb", "");
|
|
|
|
|
|
|
|
|
|
Boolean blnY = strCheck.Contains("Y");
|
|
|
|
|
Boolean blnZ = strCheck.Contains("Z");
|
|
|
|
|
Boolean blnX = strCheck.Contains("X");
|
|
|
|
|
Boolean blnG = strCheck.Contains("G");
|
|
|
|
|
//Boolean blnC = strCheck.Contains("C");
|
|
|
|
|
|
|
|
|
|
int iCheck = 0;
|
|
|
|
|
|
|
|
|
|
if (blnY == true)
|
|
|
|
|
iCheck = iCheck + 1;
|
|
|
|
|
|
|
|
|
|
if (blnZ == true)
|
|
|
|
|
iCheck = iCheck + 1;
|
|
|
|
|
|
|
|
|
|
if (blnX == true)
|
|
|
|
|
iCheck = iCheck + 1;
|
|
|
|
|
|
|
|
|
|
if (blnG == true)
|
|
|
|
|
iCheck = iCheck + 1;
|
|
|
|
|
|
|
|
|
|
//if (blnC == true)
|
|
|
|
|
// iCheck = iCheck + 1;
|
|
|
|
|
|
|
|
|
|
//y一维码,公司条码 oneCode
|
|
|
|
|
//z资产号 serialNumber
|
|
|
|
|
//x芯片 rfid
|
|
|
|
|
//g模块信息 sim
|
|
|
|
|
//wb不需要验证
|
|
|
|
|
//c是摄像头码 number1
|
|
|
|
|
if (blnY == true && iCheck > 1)
|
|
|
|
|
{
|
|
|
|
|
if (blnY || blnZ || blnX || blnG) //|| blnC
|
|
|
|
|
{
|
|
|
|
|
var client = new RestClient("http://10.100.83.113/syong/test.php");
|
|
|
|
|
client.Timeout = -1;
|
|
|
|
|
var request = new RestRequest(Method.POST);
|
|
|
|
|
request.AlwaysMultipartFormData = true;
|
|
|
|
|
request.AddParameter("oneCode", TempOffLineInfo.ProductSNCode);
|
|
|
|
|
request.AddParameter("Werks", "2701");
|
|
|
|
|
request.AddParameter("mark", "YZX");
|
|
|
|
|
IRestResponse response = client.Execute(request);
|
|
|
|
|
Console.WriteLine(response.Content);
|
|
|
|
|
var chkInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<AucmaBarCodeModel>(response.Content);
|
|
|
|
|
|
|
|
|
|
TempOffLineInfo.oneCode = DBToString(chkInfo.oneCode);
|
|
|
|
|
TempOffLineInfo.serialNumber = DBToString(chkInfo.serialNumber);
|
|
|
|
|
TempOffLineInfo.rfid = DBToString(chkInfo.rfid);
|
|
|
|
|
TempOffLineInfo.sim = DBToString(chkInfo.sim);
|
|
|
|
|
TempOffLineInfo.number1 = DBToString(chkInfo.number1);
|
|
|
|
|
|
|
|
|
|
if (blnY == true && DBToString(chkInfo.oneCode) == "")
|
|
|
|
|
{
|
|
|
|
|
TempOffLineInfo.MsgInfo = "多码验证,公司条码验证失败";
|
|
|
|
|
log.Info(TempOffLineInfo.ProductSNCode + ", 多码验证,公司条码验证失败");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (blnZ == true && DBToString(chkInfo.serialNumber) == "")
|
|
|
|
|
{
|
|
|
|
|
TempOffLineInfo.MsgInfo = "多码验证,资产号验证失败";
|
|
|
|
|
log.Info(TempOffLineInfo.ProductSNCode + ", 多码验证,资产号验证失败");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (blnX == true && DBToString(chkInfo.rfid) == "")
|
|
|
|
|
{
|
|
|
|
|
TempOffLineInfo.MsgInfo = "多码验证,芯片验证失败";
|
|
|
|
|
log.Info(TempOffLineInfo.ProductSNCode + ", 多码验证,芯片验证失败");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (blnG == true && DBToString(chkInfo.sim) == "")
|
|
|
|
|
{
|
|
|
|
|
TempOffLineInfo.MsgInfo = "多码验证,模块信息验证失败";
|
|
|
|
|
log.Info(TempOffLineInfo.ProductSNCode + ", 多码验证,模块信息验证失败");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|