98 lines
3.8 KiB
C#
Raw Normal View History

2025-12-12 14:46:03 +08:00
using Kingdee.BOS;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Gatedge.K3.Pilot.PlugIn.Services.DBService
{
public class SalOutStockDAL : BaseDAL
{
public SalOutStockDAL(Context context) : base(context)
{
}
/// <summary>
/// 获取销售出库单的订单数据
/// </summary>
/// <param name="entryId"></param>
/// <returns></returns>
public DynamicObjectCollection GetSalOutStockSrcPO(int entryId)
{
var sql = $@"/*dialect*/
WITH # AS (
SELECT t0.FBILLNO AS ''
,t0.FDATE AS ''
,t0e.FENTRYID AS 'ID'
,t0e.FREALQTY AS ''
,SUM(t0e.FREALQTY) OVER (PARTITION BY t3e.FENTRYID) ''
,t1.FBILLNO AS ''
,t1e.FENTRYID AS 'ID'
,t1e.FQTY AS ''
,t2.FBILLNO AS ''
,t2e.FENTRYID AS 'ID'
,t2e.FQTY AS ''
,t3.FBILLNO AS ''
,t3.FDATE AS ''
,t3e.FSEQ AS ''
,t3e.FID AS ''
,t3e.FENTRYID AS ''
,t3e.FQTY AS ''
,ISNULL(t4.FACTRECEIVEQTY,0) AS ''
,ISNULL(t4.FREALQTY,0) ''
--INTO #
FROM T_SAL_OUTSTOCK t0
INNER JOIN T_SAL_OUTSTOCKENTRY t0e on t0e.FID = t0.FID
INNER JOIN T_SAL_OUTSTOCKENTRY_LK t0e_lk on t0e.FENTRYID = t0e_lk.FENTRYID
AND t0e_lk.FSTABLENAME = 'T_SAL_DELIVERYNOTICEENTRY'
INNER JOIN T_SAL_DELIVERYNOTICE t1 on t1.FID = t0e_lk.FSBILLID
INNER JOIN T_SAL_DELIVERYNOTICEENTRY t1e on t1.FID = t1e.FID AND t0e_lk.FSBILLID = t1e.FID AND t0e_lk.FSID = t1e.FENTRYID
INNER JOIN T_SAL_DELIVERYNOTICEENTRY_LK t1e_lk on t1e.FENTRYID = t1e_lk.FENTRYID
AND t1e_lk.FSTABLENAME = 'T_SAL_ORDERENTRY'
INNER JOIN T_SAL_ORDER t2 on t2.FID = t1e_lk.FSBILLID
INNER JOIN T_SAL_ORDERENTRY t2e on t1e_lk.FSBILLID = t2e.FID AND t1e_lk.FSID = t2e.FENTRYID
INNER JOIN T_SAL_ORDERENTRY_LK t2e_lk on t2e.FENTRYID = t2e_lk.FENTRYID
AND t2e_lk.FSTABLENAME = 't_PUR_POOrderEntry'
INNER JOIN T_PUR_POORDER t3 on t2e_lk.FSBILLID = t3.FID
INNER JOIN T_PUR_POORDERENTRY t3e on t3.FID = t3e.FID AND t2e_lk.FSBILLID = t3e.FID AND t2e_lk.FSID = t3e.FENTRYID
AND t3e.FMRPCLOSESTATUS = 'A'
INNER JOIN T_PUR_POORDERENTRY_LK t3e_lk on t3e_lk.FENTRYID = t3e.FENTRYID
OUTER APPLY (
SELECT SUM(t4e.FACTRECEIVEQTY) 'FACTRECEIVEQTY',SUM(ISNULL(t5.FREALQTY,0)) 'FREALQTY'
--,STRING_AGG(t4e.FENTRYID,';') 'ID'
--,STRING_AGG(ISNULL(t5.FREALQTY,0),';') ''
FROM T_PUR_RECEIVE t4
INNER JOIN T_PUR_RECEIVEENTRY t4e on t4e.FID = t4.FID
INNER JOIN T_PUR_RECEIVEENTRY_LK t4e_lk on t4e_lk.FENTRYID = t4e.FENTRYID
AND t4e_lk.FSTABLENAME = 'T_PUR_POORDERENTRY'
OUTER APPLY (
SELECT t5e_lk.FSID,SUM(t5e.FREALQTY) 'FREALQTY'
FROM T_STK_INSTOCK t5
INNER JOIN T_STK_INSTOCKENTRY t5e on t5.fID = t5e.FID
INNER JOIN T_STK_INSTOCKENTRY_LK t5e_lk on t5e_lk.FENTRYID = t5e.FENTRYID
AND t5e_lk.FSTABLENAME = 'T_PUR_RECEIVEENTRY'
WHERE t5e_lk.FSBILLID = t4e.FID AND t5e_lk.FSID = t4e.FENTRYID
GROUP BY t5e_lk.FSID
) t5
WHERE t3e.FENTRYID = t4e_lk.FSID AND t3e.FID = t4e_lk.FSBILLID
GROUP BY t4e_lk.FSID
) t4
WHERE t3.FCLOSESTATUS = 'A'
)
SELECT t0.*
FROM # t0
WHERE 1 = 1
AND t0.ID = {entryId}
ORDER BY t0.,t0.,t0.,t0.ID
";
return DBServiceHelper.ExecuteDynamicObject(this.Context, sql);
}
}
}