using Apache.NMS.ActiveMQ.Commands;
|
using Rhea.Common;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Security.Cryptography;
|
using System.Text;
|
using System.Threading.Tasks;
|
using Tiger.IBusiness;
|
using Tiger.Model;
|
using Tiger.Model.Minsun;
|
|
namespace Tiger.Business.WMS
|
{
|
public class ReceiptInfo : IReceiptInfo
|
{
|
/// <summary>
|
/// T100调用WMS返回收货单信息
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
public ApiAction GetReceiptInfo(iReceiptParam input)
|
{
|
ApiAction response = new ApiAction();
|
try
|
{
|
DbClient db = Business.Biz.Db;
|
switch (input.StrongHoid)
|
{
|
case "TXXC":
|
case "XCTC":
|
//db = Biz.DataSource["Main"].Client;
|
//break;
|
case "XCSJ":
|
case "DGXC":
|
//db = Biz.DataSource["DGXC"].Client;
|
//break;
|
case "AHXC":
|
|
db = Biz.DataSource["WMS57"].Client;
|
break;
|
}
|
List<iReceiptInfo> list = new List<iReceiptInfo>();
|
var entity_h = db.Queryable<BIZ_SRM_DLVY>().Where(x => x.DELIVERY_NO == input.DeliveryNo).IncludesAllFirstLayer().First();
|
if (entity_h == null)
|
{
|
response.IsSuccessed = false;
|
response.Message = $"送货单[{input.DeliveryNo}]在WMS系统中查不到记录!";
|
return response;
|
}
|
if (entity_h.STATUS == 4)
|
{
|
response.IsSuccessed = false;
|
response.Message = $"送货单[{input.DeliveryNo}]状态为作废,不能收货!";
|
return response;
|
}
|
if (entity_h != null)
|
{
|
var _vender = entity_h.SUPP_CODE;
|
foreach (var item in entity_h.Dtls)
|
{
|
var pmdt004 = item.BATCH_NUMBER; // (item.poLineNo ?? "1").Split('-').Length > 2 ? (item.poLineNo ?? "1").Split('-')[2] : (item.poLineNo ?? "1");
|
var receiptInfo = new iReceiptInfo
|
{
|
BillCode = item.ERP_PO_NO,
|
lineNumber = item.PO_LINE_NO.ToString(), //!string.IsNullOrEmpty(item.extendN01) ? item.extendN01 : item.lineNo.ToString(),
|
SupplierCode = _vender,
|
ItemNumber = item.LINE_NO.ToString(), //!string.IsNullOrEmpty(item.extendN01) ? item.lineNo.ToString() : (item.poLineNo ?? "1").Split('-')[0], 采购单项次
|
SeqNumber = "1",
|
BatchOrder = pmdt004.ToString(),
|
ItemCode = item.ITEM_CODE,
|
Qty = item.QTY.ToString()
|
};
|
list.Add(receiptInfo);
|
}
|
}
|
response.Data = list;
|
response.Message = $"送货单[{input.DeliveryNo}]明细信息获取成功";
|
}
|
catch (Exception ex)
|
{
|
response.GetResponse().CatchExceptionWithLog(ex);
|
}
|
return response;
|
}
|
|
/// <summary>
|
/// 到货单生成接口 清点系统 --> wms,新数据库
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
public ApiAction GenerateReceipt(iReceiptInput input)
|
{
|
var action = new ApiAction();
|
try
|
{
|
DbClient db = Biz.DataSource["WMS57"].Client;
|
//待提交数据按来源单号分组(ASN/PO)
|
var dlvys = input.iReceipts
|
.Select(p => p.DeliveryNo)
|
.Distinct()
|
.ToList();
|
List<BIZ_ERP_RECEIPT> receiptHeaders = new List<BIZ_ERP_RECEIPT>();
|
List<BIZ_ERP_RECEIPT_DTL> detailList = new List<BIZ_ERP_RECEIPT_DTL>();
|
List<BIZ_ERP_RECEIPT_SN> receiptScans = new List<BIZ_ERP_RECEIPT_SN>();
|
List<Detail> details = new List<Detail>();
|
List<BIZ_ERP_IQC> iqcHeaders = new List<BIZ_ERP_IQC>();
|
List<WMS_ITEM_HIS> ItemHistorys = new List<WMS_ITEM_HIS>();
|
List<WMS_ITEM_PKG> ItemPkgs = new List<WMS_ITEM_PKG>();
|
List<WMS_ITEM> items = db.Queryable<WMS_ITEM>().Where(x => dlvys.Contains(x.TRANS_NO)).ToList();
|
|
bool isIQCOk = true;
|
string OrgCode = input.StrongHold;
|
var usercode = "00000";
|
switch (input.CompanyCode)
|
{
|
case "XCQX":
|
usercode = "LX0001";
|
break;
|
|
case "XCHF":
|
usercode = "AA0001";
|
break;
|
|
case "XCTH":
|
//usercode = "AA0001";
|
break;
|
|
case "XCTX":
|
usercode = "TA0001";
|
break;
|
}
|
|
//所有送货单
|
var srmDlvys = db.Queryable<BIZ_SRM_DLVY>().Where(x => dlvys.Contains(x.DELIVERY_NO)).IncludesAllFirstLayer().ToList();
|
if (srmDlvys == null)
|
{
|
action.IsSuccessed = false;
|
action.LocaleMsg = Biz.L($"SRM中查不到明细");
|
return action;
|
}
|
foreach (var srmDlvy in srmDlvys.OrderBy(o => o.DELIVERY_NO))
|
{
|
//Logger.Interface.Info($"送货单[{srcBill.Key}]总数[{asnBarcodeList.Count}],扫描总数[{input.iReceipts.Where(x => x.DeliveryNo == srcBill.Key).ToList().Count}]");
|
|
// 生成收料单
|
//新建单据
|
Result ruleResult = Biz.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
|
};
|
|
var supplyCode = "";
|
//创建收货单明细
|
nBillHeader.SUPPLIERCODE = srmDlvy.SUPP_CODE;
|
foreach (var item in srmDlvy.Dtls.OrderBy(o => o.PO_LINE_NO))
|
{
|
//供应商代码
|
supplyCode = srmDlvy.SUPP_CODE;
|
//插入单据明细行
|
if (!detailList.Where(x => x.BILLLINE == item.PO_LINE_NO.ToString()).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 = Biz.CodeRule["IQC001"].Generate("IQC");
|
if (!iqcResult.IsSuccessed)
|
{
|
throw new Exception(iqcResult.ExceptionMsg.Message);
|
}
|
iqcHeaders.Add(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,
|
});
|
}
|
//到货明细
|
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单号和状态
|
foreach (var scanTemp in input.iReceipts.Where(x => x.DeliveryNo == srmDlvy.DELIVERY_NO).ToList())
|
{
|
BIZ_ERP_RECEIPT_SN scanObj = new BIZ_ERP_RECEIPT_SN
|
{
|
BILLCODE = billcode,
|
BILLLINE = "SHReceipt",
|
SOURCETYPE = (int)WMS_RECEIPT_H.SourceType.Asn,
|
ITEM_CODE = scanTemp.MaterialCode,
|
SN = scanTemp.SmallBarcode,
|
META_SN = scanTemp.SCAN_BARCODE,
|
CARTON = scanTemp.BigBarcode,
|
PALLET = scanTemp.OuterBarcode,
|
SUPPLIERCODE = scanTemp.innerVendorCode,
|
DATECODE = DateTime.Now,
|
SCANQTY = scanTemp.SCANQTY,
|
STATUS = WMS_ITEM.STATUSs.WaitTest.GetValue(),
|
AUTH_ORG = OrgCode,
|
DELIVERY_NO = srmDlvy.DELIVERY_NO, //送货单据
|
};
|
receiptScans.Add(scanObj);
|
}
|
|
//更新库存表
|
foreach (var wi in items.Where(x => x.TRANS_NO == srmDlvy.DELIVERY_NO))
|
{
|
wi.STATUS = WMS_ITEM.STATUSs.WaitTest.GetValue();
|
wi.TRANS_CODE = nameof(BIZ_ERP_RECEIPT);
|
wi.TRANS_NO = billcode;
|
wi.SOURCE_CODE = nameof(srmDlvy);
|
wi.SOURCE_ORDER = srmDlvy.DELIVERY_NO;
|
wi.AUTH_ORG = OrgCode;
|
|
WMS_ITEM_HIS his = new WMS_ITEM_HIS(wi, $"自购来料清点,到货单[{billcode}],送货单[{srmDlvy.DELIVERY_NO}]");
|
ItemHistorys.Add(his);
|
}
|
|
//调用T100接口生成到货单
|
var ret = ErpT100.GenerateCustReceipt(new CustReceiptInputParameter
|
{
|
parameter = new Parameter<Detail>
|
{
|
pmds000 = "1",
|
pmdsdocno = "3438",
|
pmdsdocdt = DateTime.Now.ToString("yyyy-MM-dd"), //"2023-04-26", //当天时间
|
pmds002 = usercode, //用户ID
|
pmds003 = "",
|
pmds007 = supplyCode, //"C0006", //供应商代码
|
pmds010 = srmDlvy.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)
|
{
|
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}],送货单号[{srmDlvy.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;
|
action.Message = $"到货单[{ret.payload.std_data.parameter.docno}],当前用户[{usercode}],返回的信息:{retIns.payload.std_data.execution.description}"; ;
|
}
|
}
|
receiptHeaders.Add(nBillHeader);
|
|
#endregion 生成送检单
|
}
|
else //失败
|
{
|
action.IsSuccessed = false;
|
action.Message = $"当前用户[{usercode}],送货单号[{srmDlvy.DELIVERY_NO}],到货单号[{billcode}],返回的信息:{ret.payload.std_data.execution.description}";
|
return action;
|
}
|
}
|
db = Biz.DataSource["WMS57"].Client;
|
//保存到数据库
|
var dbTran = db.UseTran(() =>
|
{
|
if (receiptHeaders.Any())
|
{
|
db.Insertable(receiptHeaders, usercode).ExecuteCommand();
|
}
|
if (detailList.Any())
|
{
|
db.Insertable(detailList, usercode).ExecuteCommand();
|
}
|
if (receiptScans.Any())
|
{
|
db.Insertable(receiptScans, usercode).ExecuteCommand();
|
}
|
if (action.IsSuccessed && isIQCOk)
|
{
|
db.Insertable(iqcHeaders).ExecuteCommand();
|
}
|
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();
|
db.Insertable(ItemHistorys, usercode).ExecuteCommand();
|
});
|
if (!dbTran.IsSuccess)
|
{
|
action.GetResponse().CatchException(dbTran.ErrorException, $"到货单生成异常");
|
}
|
action.LocaleMsg = Biz.L($"到货单和送检单生成成功!");
|
return action;
|
}
|
catch (Exception ex)
|
{
|
return action.GetResponse().CatchException(ex, $"到货单生成异常");
|
}
|
}
|
}
|
}
|