1. 问题分析
pc打单卡顿,分析调用的webapi 执行方法,
根据批次号获取单品多件:GetOneMultiBatchPack() ,sql 缺少索引,已添加 索引:
IX_RB_EUAgencyLabel_Setting_CustomerID_OrderSourceID,
开会讨论后优化的方案如下面2.2:
PC打单 客户端执行步骤:
1.获取单个包裹信息GetPackageInfo(productNoInputValue)
2.生成包裹实例AddNewPackage()
3.设置包裹已拣货PackageSetPick(,1.统计快捷打单 2.批量统计打单)
4.DeleteLableFolder(LabelFolderName) 预下载PDF文件夹名字
5.打印结束UI操作:PrintFinishUiAction()
6.扫描到批次内的产品,成功出面单,播放提示音1 _voiceService.PlayAudio()
服务端webapi执行步骤:
单品单件:
打单扫描批次:ScanPrintBatchNo()
1 根据打单批次查询数据:ScanBatchNumberNew()
根据商户号获取参数配置:GetCustomerSetting()
根据批次号获取单品单件:GetOneOneBatchPack()
根据批次号获取单品多件:GetOneMultiBatchPack() 根据批次号获取单品多件
根据批次号获取多品多件 二次分拣不打印面单
判断用户是否开启一品多位IsOpenOneProductMorePosition():SELECT * FROM dbo.RB_Customer_Setting(NOLOCK) WHERE CustomerID = {0}
根据包裹ID批量获取库存操作明细:GetStockOperateDetailByPackageID()
返回查询结果
产品条码:PrintProductNo()
1. 获取单个包裹信息GetPackageInfo()
1生成过滤包裹列表GetFilterPackageIds()
2扫描产品:ScanProductNo()=ScanProductBarCode()
获取 产品包裹
3获取产品模型 包裹GetProductModel():单品多件、二次分拣、单品单件、多品多件、包裹复核、二次分拣异常包裹,分别使用采购唯一码、系统sku、自定义sku、下单唯一码获取产品模型
根据采购单条码查询SKU:GetSKUByID():select SKU from RB_Procurement_Detail (nolock) where ID=7428642 and CustomerID=1 ,查询一个sku 很快
根据自定义SKU查询SKU:GetSKUByClientSKU():select SKU from rb_product (nolock) where ClientSKU='GX12442260396' and CustomerID=1,查询一个sku 很快
得到一个对象实体RB_Product
2.解决方案
2.1 添加索引的sql:
SELECT pop.ID ,
pop.CustomerID ,
pop.MergerPackageNo ,
pop.TrackNumber ,
pop.TurnNumber,
pop.LogisticsOrderNo ,
pop.PackageState ,
pop.SystemWeight ,
pop.PrintBatchNo ,
pop.TransportID ,
pop.GetPackageTraceTime,
pop.PrintType,
popd.SKU ,
pop.PickingPersonName,
popd.DeclarationName ,
popd.DeclarationNameCN ,
p.ClientSKU ,
p.ProductName ,
p.ProductNameCN ,
popd.ProductNum ,
p.ImageUrl,
p.WithBattery,
oi.OrderSourceID,
oi.ClientOrderCode,
oi.ShipMemo,
ISNULL(pop.GetTrackNumberTime, oi.SaveTrackNumbersTime) TrackNumberTime,
oi.OrderSourceID,
t.PrintType TransportPrintType,
t.TransportState,
t.TrackingNumberValidDays,
oi.OrderStatus,
oi.OrderState,
os.OrderSourceType,
pop.Country Shorthand,
ISNULL(api.Transport_API_Class, -1) Transport_API_Class,
t.AllowPrint,
t.AllowLogistPrint,
pop.PrintAddressState,
pa.ToDeliveryPackNoteMemo,
oi.AmazonShipmentId,
coun.IsEuropeanUnion,
p.IsNeedCeCertification ,
es.ID AS OuerOrderSourceID,
pop.IsStockOrderWithPackage,
es.IsPrintSelfShipLable,
es.IsPrintStockOrderShipLable
FROM RB_Procurement_Order_Package pop ( NOLOCK )
INNER JOIN RB_Procurement_Order_Package_Detail popd ( NOLOCK ) ON pop.CustomerID = popd.CustomerID
AND pop.ID = popd.PackageID
INNER JOIN dbo.RB_Product p ( NOLOCK ) ON p.CustomerID = pop.CustomerID
AND p.SKU = popd.SKU
INNER JOIN dbo.RB_OrderInfo oi ( NOLOCK ) ON pop.MergerPackageNo = oi.OrderCode
AND oi.CustomerID = pop.CustomerID
INNER JOIN RB_Transport t(NOLOCK) ON t.CustomerID=pop.CustomerID AND t.ID=pop.TransportID
INNER JOIN RB_Transport_API api ( NOLOCK ) ON t.Transport_API_ID = api.ID
AND t.CustomerID = api.CustomerID
LEFT JOIN RB_OrderSource os ( NOLOCK ) ON os.CustomerID = pop.CustomerID
AND os.ID = oi.OrderSourceID
LEFT JOIN RB_Product_Admin pa ( NOLOCK ) ON pa.SKU = p.SKU
AND pa.CustomerID = pop.CustomerID
Left JOIN E_Country coun ( NOLOCK ) on pop.Country =coun.Shorthand
LEFT JOIN RB_EUAgencyLabel_Setting es (nolock) on
oi.CustomerID=es.CustomerID and oi.OrderSourceID=es.OrderSourceID
WHERE pop.CustomerID = @CustomerID
AND popd.ProductNum > 1
AND pop.PrintTime >= @PrintTime
AND pop.PrintType = @PrintType
AND pop.WareHouseID = @WareHouseID
AND pop.PrintBatchNo = @PrintBatchNo
AND pop.PackageState =@PackageState
AND pop.PrintAddressState=0
AND oi.OrderStatus = 0
{0}
AND pop.SKUNumberWithPackage = 1
AND pop.ProductNumberWithPackage > 1
AND popd.SKU = @SKU
2.2 PC 打单优化点:
1.添加日志记录api执行时间;7.20
2.添加日志记录面单下载执行时间;下载面单服务;7.26
3. 异步处理更新包裹状态(redis,实时落盘);7.30
参考 2.2 PC 打单优化点 优化改造