using Rhea.Common;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Tiger.IBusiness;
using Tiger.Model;
namespace Tiger.Business.WMS.Transaction
{
///
/// 来料入库清点事务
///
public class InReceipt : WMSTransactionBase, IInReceipt
{
public IInReceipt Init(string id, string userCode, string apiHost, string orgCode)
{
TransID = id;
UserCode = userCode;
ApiHost = apiHost;
OrgCode = orgCode;
Logger.Console.Info($"Start {this.GetType().Name} Transaction[ID: {TransID}]");
return this;
}
#region Propertys & Variables
public string UserCode { get; set; }
public static long UserId { get; set; }
public string VenderCode { get; set; }
public string SecondVenderCode { get; set; }
public string WarehouseCode { get; set; }
public string WarehouseName { get; set; }
public string OrgCode { get; set; }
public string CustomsNo { get; set; }
public Inventory inv { get; set; }
public List suppliers { get; set; }
#endregion Propertys & Variables
#region Functions
///
/// 扫描物料并复核,如果物料已经完成移库则货架上亮灯提醒储位
///
public async Task ScanItem(BaseInput input)
{
var action = new ApiAction();
try
{
if (string.IsNullOrEmpty(input.SN))
{
action.IsSuccessed = false;
action.LocaleMsg = Biz.L("WMS.InReceipt.ScanItem.SnEmptyFailure", input.SN);
return action;
}
input.AuthOption.OrgCode = input.AuthOption.OrgCode.IsNullOrEmpty() ? input.AuthOption.CurOrg : input.AuthOption.OrgCode;
#region 报关单号判断
if (input.AuthOption.OrgCode == "YTXC" && string.IsNullOrWhiteSpace(CustomsNo))
{
if (string.IsNullOrWhiteSpace(input.SN))
{
action.IsSuccessed = false;
action.LocaleMsg = Biz.L($"盐田据点请扫描报关单号二维码!");
return action;
}
var customsNo = input.SN.Replace(",", ",").Trim();
if (customsNo.Split(",").Length != 2)
{
action.IsSuccessed = false;
action.LocaleMsg = Biz.L($"报关单号格式错误,请确认格式是否为【报关单号,核算清单号】!");
return action;
}
CustomsNo = input.SN;
action.Data = new IncomingMatStorage
{
sn = CustomsNo,
IsCustomsNo = true
};
action.IsSuccessed = true;
action.LocaleMsg = Biz.L($"报关单号二维码扫描成功");
return action;
}
#endregion 报关单号判断
//解析条码
Result result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, false);
if (result.Flag != Result.Flags.Success)
{
action.IsSuccessed = false;
action.LocaleMsg = result.LocaleMsg;
return action;
}
inv = result.Data;
#region 判断当前条码对应的SRM状态
var srmData = Biz.Db.Queryable((a, b) => new object[]
{
JoinType.Inner,a.DELIVERY_NO == b.DELIVERY_NO
}).Where((a, b) => a.SMALL_SN == inv.Barcode.SN || a.OUTER_SN == inv.Barcode.SN)
.Select((a, b) => new { a.DELIVERY_NO, b.STATUS }).First();
if (srmData != null && srmData?.STATUS == 4)
{
action.IsSuccessed = false;
action.LocaleMsg = Biz.L($"当前条码:{input.SN}\t对应的单据:{srmData?.DELIVERY_NO}\t状态已作废,拒绝作废");
return action;
}
#endregion 判断当前条码对应的SRM状态
//#region 来料清点增加有效期管控
//var VALIDITY_DAYS = inv.ItemInfo?.VALIDITY_DAYS;// 有效期
//var DepositDays = inv.ItemInfo?.DepositDays;// 预存期
//var codes = string.Empty;
//var code2s = string.Empty;
//foreach (var item in inv.Items)
//{
// if (VALIDITY_DAYS != 0 && DepositDays != 0)
// {
// if (item.PROD_DATE.AddDays(VALIDITY_DAYS.ToDouble()).AddDays(item.PostponeDays.ToDouble()) < DateTime.Now)
// {
// codes += item.SN + ",";
// item.REMARK = "有效期超期";
// item.IsAllowOverdue = "N";
// }
// if (VALIDITY_DAYS - (DateTime.Now - item.PROD_DATE).Days < DepositDays)
// {
// code2s += item.SN + ",";
// item.REMARK = string.IsNullOrWhiteSpace(item.REMARK)? "预存期超期" : item.REMARK + ",预存期超期";
// item.IsAllowOverdue = "N";
// }
// }
//}
//if (!string.IsNullOrWhiteSpace(codes) || !string.IsNullOrWhiteSpace(code2s))
//{
// action.IsSuccessed = false;
// action.LocaleMsg = Biz.L($"物料{inv.ItemInfo?.ITEM_CODE},条码:{codes}\t超有效期 {VALIDITY_DAYS},或条码{code2s}\t超预存期{DepositDays}");
// var DB = Biz.DataSource["WMS57"].Client;
// var ids = inv.Items.Where(i => i.IsAllowOverdue == "N").Select(i => i.ID).Distinct().ToList();// 获取所有需要更新的数据ID
// //DB.Updateable(i => new WMS_ITEM() { IsAllowOverdue = "N" ,REMARK = }).Where(i => ids.Contains(i.ID)).ExecuteCommand();
// DB.Updateable(inv.Items).ExecuteCommand();
// return action;
//}
//#endregion 来料清点增加有效期管控
if (string.IsNullOrEmpty(inv.ItemInfo?.ITEM_CODE))
{
action.IsSuccessed = false;
action.LocaleMsg = Biz.L("WMS.InReceipt.ScanItem.NotFound", inv.ItemInfo?.ITEM_CODE);
return action;
}
if (!inv.isExists)
{
action.IsSuccessed = false;
action.LocaleMsg = Biz.L("条码[{0}]不存在于系统中", inv.SN); //Biz.L("WMS.InReceipt.ScanItem.NotExist", inv.SN); //条码[{0}]不存在于系统中
return action;
}
if (inv.CurPkg.AUTH_ORG != input.AuthOption.CurOrg)
{
action.IsSuccessed = false;
action.LocaleMsg = Biz.L($"条码据点[{inv.CurPkg.AUTH_ORG}]和当前登录的据点[{input.AuthOption.CurOrg}]不一样,请重新选择据点");
return action;
}
//验证条码是否已做过清点
var nLogs = Biz.Db.Queryable().Where(t => inv.Items.Select(q => q.SN).Contains(t.SN) && t.STATUS >= WMS_ITEM.STATUSs.Counted.GetValue()).Any();
if (nLogs)
{
action.IsSuccessed = false;
action.LocaleMsg = Biz.L("条码已清点", inv.SN); //Biz.L("WMS.CustSupChk.ScanItem.BarcodeCounted", inv.SN);
return action;
}
//物料验证
if (inv.ItemInfo.IsNullOrEmpty() || inv.ItemInfo.IS_ACTIVE == "N")
{
action.IsSuccessed = false;
action.LocaleMsg = Biz.L("WMS.ProdMReq.ScanItem.ItemCodeNotExistsOrNotActive", inv.ItemInfo.ITEM_CODE.IsNullOrEmpty(inv.Barcode.ItemCode));
return action;
}
//var srmEntity = Biz.Db.Queryable().Where(t => t.SMALL_BARCODE == inv.SN || t.BIG_BARCODE == inv.SN || t.OUTER_BARCODE == inv.SN).ToList();
//if (srmEntity == null)
//{
// action.IsSuccessed = false;
// action.LocaleMsg = Biz.L("WMS.InReceipt.ScanItem.NotExist", inv.SN); //条码[{0}]不存在于系统中
// return action;
//}
OrgCode = input.AuthOption.CurOrg;
var ponoList = inv.Items.Select(x => x.SOURCE_ORDER).Distinct().ToList();
var poList = Biz.Db.Queryable().Where(t => ponoList.Contains(t.BILLCODE.ToUpper())).Select(x => x.BILLCODE).Distinct().ToList();
if (ponoList.Count() != poList.Count)
{
action.IsSuccessed = false;
action.LocaleMsg = Biz.L("送货单对应的采购单不存在", string.Join(",", ponoList.Except(poList))); //Biz.L("WMS.InReceipt.ScanItem.PoNotExist", string.Join(",", ponoList.Except(poList))); //送货单对应的采购单不存在
return action;
}
var model = new BIZ_ERP_CUSTOMS()
{
AUTH_ORG = input.AuthOption.CurOrg,
CREATE_USER = UserCode,
OrderNo = UserCode,
Barcodes = inv.SN,
CustomsNo = CustomsNo.Replace(",", ",").Trim().Split(',')[0],
AccountingNo = CustomsNo.Replace(",", ",").Trim().Split(',')[1],
CountsType = BIZ_ERP_CUSTOMS.CountsEnum.Incoming
};
//循环包装下所有最小包装条码,批量清点
List snList = new();
foreach (var item in inv.Items)
{
var scanResult = new BIZ_ERP_RECEIPT_SN
{
ID = Guid.NewGuid().ToString(),
SN = item.SN,
BILLCODE = UserCode,
ITEM_CODE = item.ITEM_CODE,
SCANQTY = item.QTY,
DATECODE = item.PROD_DATE,
CARTON = item.CARTON_NO,
PALLET = item.PALLET_NO,
SUPPLIERCODE = item.SUPP_CODE,
UNIT = item.UNIT,
STATUS = WMS_ITEM.STATUSs.Counted.GetValue(),
AUTH_ORG = OrgCode,
DELIVERY_NO = item.TRANS_NO, //送货单据
BILLLINE = item.TRANS_LINE,
META_SN = input.SN,
//CREATE_USER = UserCode
};
snList.Add(scanResult);
}
//保存到数据库
var db = Business.Biz.Db;
var dbTran = db.UseTran(() =>
{
var x = db.Storageable(snList, UserCode)
.SplitUpdate(x => x.Any(t => t.GHOST_ROW == false))
.WhereColumns(t => new { t.SN })
.SplitInsert(t => true)
.ToStorage();
x.AsInsertable.ExecuteCommand();
if (model != null)
{
db.Insertable(model).ExecuteCommand();
}
});
if (!dbTran.IsSuccess)
{
Logger.Default.Fatal(dbTran.ErrorException, "Database transaction save exception");
this.Close(!dbTran.IsSuccess);
throw dbTran.ErrorException;
}
action.Data = snList;
action.LocaleMsg = Biz.L("WMS.InReceipt.ScanItem.CountSuccess", input.SN);
}
catch (Exception ex)
{
//取消当前操作
action.CatchExceptionWithLog(ex, $"扫描物料[{input.SN}]复核异常");
action.LocaleMsg = Biz.L("WMS.InReceipt.ScanItem.ScanException", input.SN);
}
return await Task.FromResult(action);
}
//
/// 生成物料入库单据
///
///
///
public async Task SubmitInvBill()
{
var action = new ApiAction();
bool isIQCOk = true;
try
{
//获取当前用户所有已清点、未制单的条码数据
var nScannedBarcodes = Biz.Db.Queryable().Where(t =>
t.STATUS == WMS_ITEM.STATUSs.Counted.GetValue()
&& t.BILLCODE == UserCode
&& t.AUTH_ORG == OrgCode).ToList();
if (!nScannedBarcodes.Any())
{
action.IsSuccessed = false;
action.LocaleMsg = Biz.L("没有可以提交的清点数据"); //Biz.L("WMS.InReceipt.ScanItem.NotDataToSubmit"); //$"没有可以提交的清点数据";
return action;
}
var sns = nScannedBarcodes.Select(i => i.SN).Distinct().ToList();
var customsData = Biz.Db.Queryable().Where(i => sns.Contains(i.Barcodes.Substring(1))).First();
// 查找送货单列表
var dlvys = nScannedBarcodes.Select(x => x.DELIVERY_NO).Distinct().ToList();
//所有送货单
var srmDlvys = Biz.Db.Queryable().Where(x => dlvys.Contains(x.DELIVERY_NO)).IncludesAllFirstLayer().ToList();
//查询是否清点完成
if (srmDlvys.Sum(s => s.SnList.Sum(q => q.QTY)) != nScannedBarcodes.Sum(s => s.SCANQTY))
{
#region 获取单号明细
var orderList = new List();
var srmDlvyCount = srmDlvys.Select(i => i.DELIVERY_NO).Distinct().ToList();
for (int i = 0; i < srmDlvyCount.Count(); i++)
{
var orderno = srmDlvyCount[i];
var srmCount = srmDlvys.Where(i => i.DELIVERY_NO == orderno).Sum(i => i.SnList.Sum(m => m.QTY));// 单号数量
var scanCount = nScannedBarcodes.Where(i => i.DELIVERY_NO == orderno).Sum(i => i.SCANQTY);
if (srmCount != scanCount)
{
orderList.Add(orderno);
}
}
#endregion 获取单号明细
action.IsSuccessed = false;
//action.LocaleMsg = Biz.L("清点数量不对");// Biz.L("WMS.InReceipt.ScanItem.CheckingDataToSubmit"); //$"清点数量不对";
action.LocaleMsg = Biz.L($"{string.Join(",", orderList)}该送货单未清点完成有送货单号");
return action;
}
// 查询条码清点表所有仓库代码
//var nWarehouseCodes = nScannedBarcodes.Select(x => x.WarehouseCode).Distinct().ToList();
////新建单据
//Result ruleResult = Cache.CodeRule["R001"].Generate("RE");
//if (!ruleResult.IsSuccessed)
//{
// throw new Exception(ruleResult.ExceptionMsg.Message);
//}
//var billcode = ruleResult.Data.ToString();
//var nBillHeader = new BIZ_ERP_RECEIPT
//{
// BILLCODE = billcode,
// BILLDATE = DateTime.Now.Date,
// //WAREHOUSECODE = WarehouseCode,
// STATUS = BIZ_ERP_RECEIPT.STATUSs.WORKING.GetValue(),
// //SUPPLIERCODE = nScannedBarcodes[0].SUPPLIERCODE,
// AUTH_ORG = OrgCode
//};
List detailList = new List();
List iqcHeaders = new List();
List ItemHistorys = new List();
List ItemPkgs = new List();
List nBillHeaders = new List();
List items = Biz.Db.Queryable().Where(x => dlvys.Contains(x.TRANS_NO)).ToList();
List> res = srmDlvys.OrderBy(o => o.DELIVERY_NO).Select(q => new Result(Result.Flags.Success, q)).ToList();
// 按照送货单列表处理单据明细
foreach (var resDtl in res)
{
//新建单据
Result ruleResult = Cache.CodeRule["R001"].Generate("RE");
if (!ruleResult.IsSuccessed)
{
throw new Exception(ruleResult.ExceptionMsg.Message);
}
List iqcHeaders_n = new List();
var billcode = ruleResult.Data.ToString();
var nBillHeader = new BIZ_ERP_RECEIPT
{
BILLCODE = billcode,
BILLDATE = DateTime.Now.Date,
//WAREHOUSECODE = WarehouseCode,
DELIVERY_NO = resDtl.Data.DELIVERY_NO,
STATUS = BIZ_ERP_RECEIPT.STATUSs.WORKING.GetValue(),
//SUPPLIERCODE = nScannedBarcodes[0].SUPPLIERCODE,
AUTH_ORG = OrgCode
};
nBillHeaders.Add(nBillHeader);
var supplyCode = "";
List details = new List();
//创建收货单明细
nBillHeader.SUPPLIERCODE = resDtl.Data.SUPP_CODE;
foreach (var item in resDtl.Data.Dtls.OrderBy(o => o.PO_LINE_NO))
{
//供应商代码
supplyCode = resDtl.Data.SUPP_CODE;
//插入单据明细行
if (!detailList.Where(x => x.BILLLINE == item.PO_LINE_NO.ToString() && x.BILLCODE == billcode).Any())
{
detailList.Add(new BIZ_ERP_RECEIPT_DTL
{
WAREHOUSECODE = WarehouseCode,
BILLCODE = billcode,
BILLID = Guid.NewGuid().ToString("N"),
BILLLINE = item.PO_LINE_NO.ToString(),
LINESTATUS = BIZ_ERP_RECEIPT.STATUSs.WORKING.GetValue(),
ITEM_CODE = item.ITEM_CODE,
UNITCODE = item.UNIT,
QTYPASS = 0,
INSTOCKQTY = 0,
RETURNQTY = 0,
PRINTQTY = 0,
ISGIVEAWAY = false,
SOURCETYPE = nameof(BIZ_SRM_DLVY),
SOURCECODE = item.DELIVERY_NO,
SOURCELINE = item.PO_LINE_NO.ToString(),
AUTH_ORG = OrgCode,
QTY = item.QTY
});
Result iqcResult = Cache.CodeRule["IQC001"].Generate("IQC");
if (!iqcResult.IsSuccessed)
{
throw new Exception(iqcResult.ExceptionMsg.Message);
}
var iqc = new BIZ_ERP_IQC
{
BILLCODE = iqcResult.Data.ToString(),
SOURCETYPE = (int)BIZ_ERP_IQC.BillType.CustSupplyInStock,
SOURCECODE = billcode,
SOURCELINE = item.PO_LINE_NO.ToString(),
PONO = item.ERP_PO_NO,
POLINE = item.LINE_NO.ToString(),
MEASURE = "Y",
AUTH_ORG = OrgCode,
QCTIMES = 0,
QCSTATUS = (int)BIZ_ERP_IQC.QCSTATUSs.Finished, /*(int)IqcManagementSides.QCStatus.UnFinish,*/
QCRESULT = (int)BIZ_ERP_IQC.QCRESULTs.Wait,
QCREVIEW = (int)BIZ_ERP_IQC.QCReview.UnReview,
QCLEVEL = 11,
ITEM_CODE = item.ITEM_CODE,
RECEIVEQTY = item.QTY
//ReceiveQty = detail.Qty,
};
//保存数据库
//iqcHeaders.Add(iqc);
//推送检单
iqcHeaders_n.Add(iqc);
}
//到货明细
if (!details.Where(x => x.pmdtseq == item.PO_LINE_NO.ToString()).Any())
{
details.Add(new Detail
{
pmdtseq = item.PO_LINE_NO.ToString(),
pmdt001 = item.ERP_PO_NO, //lineNumber
pmdt002 = item.LINE_NO.ToString(), //itemNumber
pmdt003 = "1",
pmdt004 = item.BATCH_NUMBER,
pmdt006 = item.ITEM_CODE, //"K7015AA016141",
//pmdt018 = "创米科技",
pmdt020 = item.QTY.ToString(), //"100.00000",
pmdtud011 = "0"
});
}
}
//更新SN单号和状态
var snList = nScannedBarcodes.Where(x => x.DELIVERY_NO == resDtl.Data.DELIVERY_NO).ToList();
if (snList != null)
{
foreach (var ent in snList)
{
ent.BILLCODE = billcode;
ent.STATUS = WMS_ITEM.STATUSs.WaitTest.GetValue();
}
}
//更新库存表
foreach (var wi in items.Where(x => x.TRANS_NO == resDtl.Data.DELIVERY_NO))
{
wi.STATUS = WMS_ITEM.STATUSs.WaitTest.GetValue();
wi.TRANS_CODE = nameof(BIZ_ERP_RECEIPT);
wi.TRANS_NO = billcode;
wi.SOURCE_CODE = nameof(resDtl.Data);
wi.SOURCE_ORDER = resDtl.Data.DELIVERY_NO;
wi.AUTH_ORG = OrgCode;
WMS_ITEM_HIS his = new WMS_ITEM_HIS(wi, $"自购来料清点,到货单[{billcode}],送货单[{resDtl.Data.DELIVERY_NO}]");
ItemHistorys.Add(his);
}
//调用T100接口生成到货单
var ret = ErpT100.GenerateCustReceipt(new CustReceiptInputParameter
{
parameter = new Parameter
{
pmds000 = "1",
pmdsdocno = "3438",
pmdsdocdt = DateTime.Now.ToString("yyyy-MM-dd"), //"2023-04-26", //当天时间
pmds002 = UserCode == "admin" ? "00000" : UserCode, //用户ID
pmds003 = "",
pmds007 = supplyCode, //"C0006", //供应商代码
pmdsud003 = customsData.CustomsNo, // 报关单号
pmdsud004 = customsData.AccountingNo,// 核放清单号
pmds010 = resDtl.Data.DELIVERY_NO, //"测试客供料无采购收货", //送货单号
//pmdsud001 = SecondVenderCode, //"CM017", //二级供应编号
detail = details,
},
datakey = new Datakey
{
EntId = "88",
CompanyId = OrgCode
}
});
if (ret.payload.std_data.execution.code == "0") //成功
{
nBillHeader.ERP_BILL_CODE = ret.payload.std_data.parameter.docno;
action.Message += $"{action.Message.IsNullOrEmpty("", ";")}{ret.payload.std_data.execution.description},返回的收货单号:[{ret.payload.std_data.parameter.docno}]";
#region 生成送检单
foreach (var item in iqcHeaders_n)
{
var retIns = ErpT100.GenerateInspection(new InsInputParameter
{
parameter = new InsParameter
{
pmdsdocno = ret.payload.std_data.parameter.docno,
pmdsdocdt = DateTime.Now.ToString("yyyy-MM-dd"),
pmdtseq = item.SOURCELINE.ToString(),
pmdt020 = item.RECEIVEQTY.ToString(),
qcbadocno = "3701",
},
datakey = new Datakey
{
EntId = "88",
CompanyId = OrgCode
}
});
isIQCOk &= retIns.payload.std_data.execution.code == "0";
if (retIns.payload.std_data.execution.code != "0")
{
action.IsSuccessed = false;
action.Message += $"返回到货单[{ret.payload.std_data.parameter.docno}],当前用户[{UserCode}],送货单号[{resDtl.Data.DELIVERY_NO}],到货单号[{billcode}],返回的信息:{retIns.payload.std_data.execution.description}";
}
else
{
var receipDtl = detailList.Where(q => q.BILLCODE == item.SOURCECODE && q.BILLLINE == item.SOURCELINE).FirstOrDefault();
if (!receipDtl.IsNullOrEmpty())
{
receipDtl.ERP_BILL_CODE = retIns.payload.std_data.parameter.docno;
}
item.ERP_BILL_CODE = retIns.payload.std_data.parameter.docno;
//保存数据库
iqcHeaders.Add(item);
action.Message += $"到货单[{ret.payload.std_data.parameter.docno}],当前用户[{UserCode}],返回的信息:{retIns.payload.std_data.execution.description}"; ;
}
}
#endregion 生成送检单
}
else //失败
{
//if (ret.payload.std_data.execution.code != "wms100")
//{
action.IsSuccessed = false;
action.Message += $"当前用户[{UserCode}],返回的信息:{ret.payload.std_data.execution.description}";
resDtl.Flag = Result.Flags.Failed;
//}
//else
//{
// foreach (var item in nScannedBarcodes)
// {
// item.STATUS = 30;
// }
// foreach (var item in items)
// {
// item.STATUS = 30;
// item.TRANS_NO = billcode;
// }
// foreach (var item in ItemHistorys)
// {
// item.STATUS = 30;
// }
// foreach (var item in detailList)
// {
// item.ERP_BILL_CODE = ret.payload.std_data.parameter.docno;
// }
//}
//resDtl.Message += $"当前用户[{UserCode}],送货单号[{resDtl.Data.DELIVERY_NO}],到货单号[{billcode}],返回的信息:{ret.payload.std_data.execution.description}";
//return action;
}
}
//保存到数据库
var db = Business.Biz.Db;
var dbTran = db.UseTran(() =>
{
// 插入单据表头
nBillHeaders = nBillHeaders.Where(q => res.Any(s => s.Flag == Result.Flags.Success && s.Data.DELIVERY_NO == q.DELIVERY_NO)).ToList();
db.Insertable(nBillHeaders, UserCode).ExecuteCommand();
Logger.Interface.Info($"入库单{nBillHeaders.Select(q => q.BILLCODE).ToList()}保存成功");
detailList = detailList.Where(q => res.Any(s => s.Flag == Result.Flags.Success && s.Data.DELIVERY_NO == q.SOURCECODE)).ToList();
db.Insertable(detailList, UserCode).ExecuteCommand();
nScannedBarcodes = nScannedBarcodes.Where(q => res.Any(s => s.Flag == Result.Flags.Success && s.Data.DELIVERY_NO == q.DELIVERY_NO)).ToList();
db.Updateable(nScannedBarcodes, UserCode).UpdateColumns(x => new { x.UPDATE_USER, x.UPDATE_TIME, x.BILLCODE, x.STATUS }).ExecuteCommand();
Logger.Interface.Info($"入库单条码{nScannedBarcodes.Select(q => q.SN).ToList()}保存成功");
//if (isIQCOk)
{
iqcHeaders = iqcHeaders.Where(s => res.Any(q => q.IsSuccessed && q.Data.Dtls.Any(d => d.ERP_PO_NO == s.PONO && d.PO_LINE_NO.ToString() == s.SOURCELINE))).ToList();
db.Insertable(iqcHeaders, UserCode).ExecuteCommand();
action.Message += $"{action.Message.IsNullOrEmpty("", ";")}生成采购收货单和送检单成功";
}
items = items.Where(q => res.Any(s => s.Flag == Result.Flags.Success && s.Data.DELIVERY_NO == q.SOURCE_ORDER)).ToList();
db.Updateable(items, UserCode).UpdateColumns(x => new { x.UPDATE_USER, x.UPDATE_TIME, x.STATUS, x.TRANS_CODE, x.TRANS_NO, x.TRANS_LINE, x.SOURCE_CODE, x.SOURCE_ORDER }).ExecuteCommand();
ItemHistorys = ItemHistorys.Where(q => res.Any(s => s.Flag == Result.Flags.Success && s.Data.DELIVERY_NO == q.SOURCE_ORDER)).ToList();
db.Insertable(ItemHistorys, UserCode).ExecuteCommand();
});
if (!dbTran.IsSuccess)
{
Logger.Default.Fatal(dbTran.ErrorException, "Database transaction save exception");
this.Close(!dbTran.IsSuccess);
throw dbTran.ErrorException;
}
}
catch (System.Exception ex)
{
return action.CatchExceptionWithLog(ex, Biz.L("系统异常"));
}
return action;
}
///
/// 删除当前用户的已扫记录(缓存表)
///
///
public async Task DeleteAllScannedBarcode()
{
var action = new ApiAction();
try
{
await Biz.Db.Deleteable(x =>
x.STATUS == WMS_ITEM.STATUSs.Counted.GetValue()
&& x.BILLCODE == UserCode).ExecuteCommandAsync();
}
catch (System.Exception ex)
{
}
return action;
}
///
/// 删除当前用户的已扫单个记录
///
///
public async Task DeleteScannedBarcode(CustSupplyInInput input)
{
var action = new ApiAction();
try
{
if (WarehouseCode.IsNullOrEmpty())
{
action.IsSuccessed = false;
action.Message = $"空,无法删除已清点条码";
return action;
}
else
{
await Biz.Db.Deleteable(x => x.SN == input.SN).ExecuteCommandAsync();
}
}
catch (System.Exception ex)
{
}
return action;
}
///
/// 获取已清点的物料汇总
///
///
public async Task> GetScannedMaterialSummarys()
{
var query = Biz.Db.Queryable()
.Where(t => t.STATUS == WMS_ITEM.STATUSs.Counted.GetValue()
&& t.BILLCODE == UserCode
&& t.AUTH_ORG == OrgCode)
.ToList();
return await Task.FromResult(new PageAble()
{
data = query,
totals = query.Count(),
});
}
///
/// 查询物料对应的条码
///
///
///
public async Task> GetScannedMaterialDetailBarcodes(string MaterialCode)
{
var query = await Biz.Db.Queryable((t, m) =>
new JoinQueryInfos(
JoinType.Left, t.ITEM_CODE == m.ITEM_CODE
))
.Where((t, m) => t.CREATE_USER == UserCode
//&& t.WAREHOUSECODE.ToUpper() == WarehouseCode.ToUpper()
&& t.STATUS == WMS_ITEM.STATUSs.Counted.GetValue()
&& t.ITEM_CODE.ToUpper() == MaterialCode.ToUpper()
&& t.BILLCODE == UserCode
&& t.AUTH_ORG == OrgCode)
.Select((t, m) => new Model.Minsun.CustSupplyCheckDetail
{
Barcode = t.SN,
BarcodeQty = t.SCANQTY,
Unit = m.UNIT
})
.ToListAsync();
return new PageAble()
{
data = query,
totals = query.Count(),
};
}
#endregion Functions
public override bool Close(bool needSaveHistoryLog = false)
{
//保存操作日志
this.IsFinished = true;
return IsFinished ? base.Close(needSaveHistoryLog) : IsFinished;
}
}//endClass
}