贾荣国
3 years ago
5 changed files with 5 additions and 197 deletions
@ -1,194 +0,0 @@ |
|||||
using System; |
|
||||
using System.Collections.Generic; |
|
||||
using System.Linq; |
|
||||
using Win_in.Sfs.Scp.v1.Domain.Asns; |
|
||||
using Win_in.Sfs.Scp.WebApi.Asns; |
|
||||
|
|
||||
namespace Win_in.Sfs.Scp.WebApi.Console |
|
||||
{ |
|
||||
public class AsnFactory |
|
||||
{ |
|
||||
public ASN_X12_856_3060 CreateAsnX128563060(TB_ASN scpAsn,List<TS_BARCODE> barcodes) |
|
||||
{ |
|
||||
|
|
||||
var asnCode = scpAsn.AsnBillNum; |
|
||||
var senderId = scpAsn.VendId; |
|
||||
var receiverId = "IACNA_ID"; |
|
||||
var shipTime = scpAsn.ShipTime ?? DateTime.Now; |
|
||||
|
|
||||
var envType = ISA.EnvType.P; |
|
||||
var authorization = ""; |
|
||||
var security = ""; |
|
||||
//初始化ASN单
|
|
||||
var asn = CreateAsn(asnCode,senderId,receiverId,shipTime,envType,authorization,security); |
|
||||
|
|
||||
var functionalGroupCode = "123456789"; |
|
||||
//初始化功能组
|
|
||||
var functionalGroup = CreateFunctionalGroup(senderId,receiverId,shipTime,functionalGroupCode); |
|
||||
|
|
||||
var shipNoticeCode = "0001"; |
|
||||
var datetimeType = "011"; |
|
||||
//初始化发货单
|
|
||||
var shipNotice = CreateShipNotice(shipNoticeCode,functionalGroupCode,shipTime,datetimeType); |
|
||||
|
|
||||
var gValue = 0; |
|
||||
var gUom = "KG"; |
|
||||
var nValue = 0; |
|
||||
var nUom = "KG"; |
|
||||
var routeSequenceCode = "B"; |
|
||||
var identificationCode = "PSTV"; |
|
||||
var mode = "LT"; |
|
||||
var equipmentCode = "TL"; |
|
||||
var equipmentNumber = "123456";//TODO 车牌号
|
|
||||
//初始化发货明细
|
|
||||
var shipment = CreateShipment(shipNotice,gValue,gUom,nValue,nUom,routeSequenceCode,identificationCode,mode, |
|
||||
equipmentCode,equipmentNumber,functionalGroupCode,functionalGroupCode,senderId,receiverId); |
|
||||
|
|
||||
|
|
||||
//计算与添加托盘和尾箱
|
|
||||
var palletCodes = barcodes.Select(p => p.Extend2).Distinct().ToList(); |
|
||||
foreach (var palletCode in palletCodes) |
|
||||
{ |
|
||||
var palletBarcodes = barcodes.Where(p => p.Extend2==palletCode).ToList(); |
|
||||
|
|
||||
var items = new List<Item>(); |
|
||||
var group = palletBarcodes |
|
||||
.GroupBy(p => new { p.PartCode, p.Qty, p.Batch, p.PoUnit, p.PoBillNum,p.PackQty}) |
|
||||
.Select(p => new |
|
||||
{ |
|
||||
p.Key.PartCode, |
|
||||
p.Key.Qty, |
|
||||
p.Key.Batch, |
|
||||
p.Key.PoUnit, |
|
||||
p.Key.PoBillNum, |
|
||||
p.Key.PackQty, |
|
||||
Labels = p.Select(p=>p.BarCode).ToList() |
|
||||
}) |
|
||||
.ToList(); |
|
||||
|
|
||||
foreach (var b in group) |
|
||||
{ |
|
||||
var accumQty = 0;//TODO 如何计算
|
|
||||
var loadQty = b.Labels.Count; |
|
||||
var unitQty = b.PackQty; |
|
||||
var item = CreateItem(b.PartCode, loadQty * unitQty, b.PoUnit, accumQty, b.PoBillNum, loadQty, unitQty,b.Labels); |
|
||||
items.Add(item); |
|
||||
} |
|
||||
|
|
||||
//如果托标签为空,当作尾箱处理
|
|
||||
if (string.IsNullOrEmpty(palletCode)) |
|
||||
{ |
|
||||
foreach (var item in items) |
|
||||
{ |
|
||||
shipment.AddOrphanItem(shipNotice,item); |
|
||||
} |
|
||||
} |
|
||||
//添加托盘
|
|
||||
else |
|
||||
{ |
|
||||
var tare = CreateTare(palletCode); |
|
||||
shipment.AddTare(shipNotice,tare); |
|
||||
foreach (var item in items) |
|
||||
{ |
|
||||
tare.AddItem(shipNotice, item); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
|
|
||||
//TODO 如何获取包装代码,或者规则是什么?
|
|
||||
var packagingCode = "PLT90"; |
|
||||
//装载量需要在添加托盘和尾箱后再计算
|
|
||||
var loadingQty = shipment.Tares.Count+shipment.OrphanItems.Count; |
|
||||
shipment.SetTD1(packagingCode, loadingQty); |
|
||||
|
|
||||
shipNotice |
|
||||
.AddShipment(shipment) //添加发货明细
|
|
||||
.SetCTT() //设置发货单汇总
|
|
||||
.SetSE(shipNoticeCode); //设置发货明细结尾
|
|
||||
//添加发货单
|
|
||||
functionalGroup |
|
||||
.AddShipNotice(shipNotice) |
|
||||
.SetGE(functionalGroupCode); |
|
||||
//添加功能组
|
|
||||
asn |
|
||||
.AddFunctionGroup(functionalGroup) |
|
||||
.SetIEA(asnCode); |
|
||||
return asn; |
|
||||
} |
|
||||
|
|
||||
private ASN_X12_856_3060 CreateAsn(string asnCode, string senderId, string receiverId, DateTime datetime, |
|
||||
ISA.EnvType envType = ISA.EnvType.P, string authorization = "", string security = "") |
|
||||
{ |
|
||||
var asn = new ASN_X12_856_3060(); |
|
||||
asn.SetISA(asnCode, senderId, receiverId, datetime, envType, authorization, security); |
|
||||
return asn; |
|
||||
} |
|
||||
|
|
||||
private FunctionalGroup CreateFunctionalGroup(string senderId, string receiverId, DateTime datetime, |
|
||||
string functionalGroupCode) |
|
||||
{ |
|
||||
var functionGroup = new FunctionalGroup(); |
|
||||
functionGroup.SetGS(senderId, receiverId, datetime, functionalGroupCode); |
|
||||
return functionGroup; |
|
||||
} |
|
||||
|
|
||||
private ShipNotice CreateShipNotice(string shipNoticeCode, string noticeNumber, DateTime datetime, |
|
||||
string datetimeType="011", string purpose = "00") |
|
||||
{ |
|
||||
var shipNotice = new ShipNotice(); |
|
||||
shipNotice |
|
||||
.SetST(shipNoticeCode) |
|
||||
.SetBSN(noticeNumber, datetime, purpose) |
|
||||
.SetDTM(datetime, datetimeType); |
|
||||
shipNotice.AddSegment(4); |
|
||||
return shipNotice; |
|
||||
} |
|
||||
|
|
||||
private Shipment CreateShipment(ShipNotice shipNotice, decimal gValue, string gUom, decimal nValue, string nUom, |
|
||||
string routeSequenceCode, string identificationCode, string mode, string equipmentCode, |
|
||||
string equipmentNumber, string bmRefValue, string pkRefValue, string senderId, string receiverId) |
|
||||
{ |
|
||||
var shipment = new Shipment(); |
|
||||
shipment |
|
||||
.SetHL() |
|
||||
.SetMEA_G(gValue, gUom) |
|
||||
.SetMEA_N(nValue, nUom) |
|
||||
.SetTD5(routeSequenceCode, identificationCode, mode) |
|
||||
.SetTD3(equipmentCode, equipmentNumber) |
|
||||
.SetREF_BM(bmRefValue) |
|
||||
.SetREF_PK(pkRefValue) |
|
||||
.SetN1_SF(senderId) |
|
||||
.SetN1_ST(receiverId) |
|
||||
; |
|
||||
shipNotice.AddSegment(10); |
|
||||
|
|
||||
return shipment; |
|
||||
} |
|
||||
|
|
||||
private Tare CreateTare(string tareLabelCode) |
|
||||
{ |
|
||||
var tare = new Tare(); |
|
||||
tare.SetHL() |
|
||||
.SetREF_LS(tareLabelCode); |
|
||||
|
|
||||
return tare; |
|
||||
} |
|
||||
|
|
||||
private Item CreateItem(string itemCode, decimal qty, string uom, int accumQty, |
|
||||
string poNumber, int loadQty, decimal unitQty, Dictionary<string,string> itemLabelCodes) |
|
||||
{ |
|
||||
|
|
||||
var item = new Item(); |
|
||||
item.SetHL() |
|
||||
.SetLIN(itemCode) |
|
||||
.SetSN1(qty, uom, accumQty) |
|
||||
.SetPRF(poNumber) |
|
||||
.SetCLD(loadQty, unitQty) |
|
||||
.SetREF_LS_LTs(itemLabelCodes); |
|
||||
return item; |
|
||||
} |
|
||||
|
|
||||
|
|
||||
} |
|
||||
} |
|
Loading…
Reference in new issue