PiolotTH_ReportFrom/Services/JixiaoKanBanService.cs

416 lines
14 KiB
C#
Raw Normal View History

2025-08-21 21:28:37 +08:00
using Kingdee.BOS;
using Kingdee.BOS.App;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Kingdee.BOS.ServiceHelper;
namespace GZ_LTHReportForms.Services
{
public class JixiaoKanBanService
{
/// <summary>
/// 金蝶上下文类
/// </summary>
private Context ctx;
/// <summary>
/// 临时表列表
/// </summary>
private Dictionary<string, string> tempTableDict;
/// <summary>
/// 临时表服务
/// </summary>
private TempTableService tempTableService;
public JixiaoKanBanService(Context ctx)
{
this.ctx = ctx;
tempTableService = new TempTableService(ctx);
tempTableDict = new Dictionary<string, string>();
}
public void DeleteTempTable()
{
foreach (var item in tempTableDict.Values)
{
tempTableService.DropTempTable(item);
}
}
/// <summary>
/// 获取当期变更单
/// </summary>
/// <param name="startDate"></param>
/// <param name="endDate"></param>
/// <returns></returns>
public string GetThisDateChangedSaleOrder(DateTime startDate, DateTime endDate)
{
var ThisYearChange = tempTableService.CreateTempTable();
this.tempTableDict.Add("ThisYearChange", ThisYearChange);
var sql = $@"/*dialect*/SELECT
MAX(t1.FID) ChangeOrderId, -- ID
t1.FPKIDX
INTO {ThisYearChange}
FROM
T_SAL_XORDER t1
INNER JOIN T_SAL_XORDERFIN t1fin ON t1.FID = t1fin.FID
WHERE
1 = 1
AND t1fin.FISACTIVE = 'B'
AND t1fin.FACTIVEDATE >= {startDate.ToString("yyyy-MM-dd")}
AND t1fin.FACTIVEDATE <= {endDate.ToString("yyyy-MM-dd")}
GROUP BY
t1.FPKIDX;
";
DBServiceHelper.Execute(ctx, sql);
return ThisYearChange;
}
/// <summary>
/// 获取往期变更单
/// </summary>
/// <param name="startDate"></param>
/// <returns></returns>
public string GetLastDateChangedSaleOrder(DateTime startDate)
{
var LastYearChange = tempTableService.CreateTempTable();
this.tempTableDict.Add("LastYearChange", LastYearChange);
var sql = $@"/*dialect*/SELECT
MAX(t1.FID) ChangeOrderId, -- ID
t1.FPKIDX
INTO {LastYearChange}
FROM
T_SAL_XORDER t1
INNER JOIN T_SAL_XORDERFIN t1fin ON t1.FID = t1fin.FID
WHERE
1 = 1
AND t1fin.FISACTIVE = 'B'
AND t1fin.FACTIVEDATE <= {startDate.ToString("yyyy-MM-dd")}
GROUP BY
t1.FPKIDX;
";
DBServiceHelper.Execute(ctx, sql);
return LastYearChange;
}
/// <summary>
/// 获取需要排除的销售订单
/// </summary>
/// <returns></returns>
public string GetExcludeOrder()
{
var ExcludeOrder = tempTableService.CreateTempTable();
this.tempTableDict.Add("ExcludeOrder", ExcludeOrder);
var sql = $@"/*dialect*/SELECT
A.FID AS 'FID' --,a.FSALERID,
INTO {ExcludeOrder}
FROM
T_SAL_ORDER A --
INNER JOIN T_ORG_ORGANIZATIONS_L B ON A.FSALEORGID = B.FORGID --
INNER JOIN T_BD_CUSTOMER_L C ON C.FCUSTID = A.FCUSTID
AND C.FLOCALEID = 2052 --
LEFT JOIN V_BD_SALESMAN_L L ON L.fid = A.FSALERID
LEFT JOIN T_PerformanceSharing M ON M.FSOURCEBILLNO = A.FBILLNO
AND M.FDOCUMENTSTATUS = 'C' --
LEFT JOIN T_PerformanceSharingEntry N ON N.FID = M.FID --
LEFT JOIN V_BD_SALESMAN_L O ON O.fid = N.FSALEID
LEFT JOIN ERPTOHR.HYHRV3.dbo.v_erp_empinfo ACO ON ACO. = O.FNAME --
LEFT JOIN ERPTOHR.HYHRV3.dbo.v_erp_empinfo ACL ON ACL. = L.FNAME --
WHERE
A.FSALEORGID = 100302 -- =
AND (
ACO. = ''
OR ACL. = ''
OR C.FNAME IN ('', '') --
OR (
C.FCUSTID = 1150173
AND (
ACO. = ''
OR ACL. = ''
)
) --1150173
OR L.FNAME = ''
OR A.FID IN (110185, 207800) --
)
";
DBServiceHelper.Execute(ctx, sql);
return ExcludeOrder;
}
/// <summary>
/// 全组织根据日期显示订单金额(当期)
/// </summary>
/// <param name="startDate"></param>
/// <param name="endDate"></param>
/// <returns></returns>
public string GetThisDateOrderAmount(DateTime startDate, DateTime endDate)
{
var ThisYearChange = tempTableDict["ThisYearChange"];
var ExcludeOrder = tempTableDict["ExcludeOrder"];
var ThisDateOrderAmount = tempTableService.CreateTempTable();
tempTableDict.Add("ThisDateOrderAmount", ThisDateOrderAmount);
var sql = $@"/*dialect*/SELECT
A.FBILLNO,
A.FSALEORGID AS FSALEORGID,
CASE
WHEN ISNULL (O.FNAME, '') = '' THEN ACL.
ELSE ACO.
END AS 'F_SBU',
CASE
WHEN ISNULL (O.FNAME, '') = '' THEN ACL.
ELSE ACO.
END AS 'F_MXQY',
CASE
WHEN ISNULL (O.FNAME, '') = '' THEN L.FNAME
ELSE O.FNAME
END AS '',
CASE
WHEN n.FSHARERATE IS NULL THEN CASE
WHEN t1.ChangeOrderId IS NULL THEN ROUND(A.F_AMOUNTSTAR, 10)
ELSE ROUND(t1fen.FBILLALLAMOUNT_LC, 10)
END
ELSE CASE
WHEN t1.ChangeOrderId IS NULL THEN ROUND(A.F_AMOUNTSTAR * (n.FSHARERATE / 100), 10)
ELSE ROUND(
t1fen.FBILLALLAMOUNT_LC * (n.FSHARERATE / 100),
10
)
END
END AS ''
INTO {ThisDateOrderAmount}
FROM
T_SAL_ORDER A --
INNER JOIn T_SAL_ORDERFIN A_FIN on A.FID = A_FIN.FID --
LEFT JOIN {ThisYearChange} t1 on t1.FPKIDX = A.FID --
LEFT JOIN T_SAL_XORDERFIN t1fen on t1.ChangeOrderId = t1fen.FID --
LEFT JOIN V_BD_SALESMAN_L L ON L.fid = A.FSALERID
left JOIN T_PerformanceSharing M ON M.FSOURCEBILLNO = A.FBILLNO
AND M.FDOCUMENTSTATUS = 'C'
left JOIN T_PerformanceSharingEntry N ON N.FID = M.FID
LEFT JOIN V_BD_SALESMAN_L O ON O.fid = N.FSALEID
LEFT JOIN ERPTOHR.HYHRV3.dbo.v_erp_empinfo ACO ON ACO. = O.FNAME
AND ISNULL (ACO., '') != '' --
LEFT JOIN ERPTOHR.HYHRV3.dbo.v_erp_empinfo ACL ON ACL. = L.FNAME
AND ISNULL (ACL., '') != '' --
WHERE
1 = 1
AND A.FAPPROVEDATE >= {startDate.ToString("yyyy-MM-dd")} --
AND A.FAPPROVEDATE < {endDate.AddDays(1).ToString("yyyy-MM-dd")} --
AND A.FDocumentStatus = 'C'
AND A.FManualClose <> '1'
AND A.FID NOT IN (
SELECT
FID
FROM
{ExcludeOrder}
)
AND A.F_contractnumber NOT LIKE 'Z%'
";
DBServiceHelper.Execute(ctx, sql);
return ThisDateOrderAmount;
}
/// <summary>
/// 查询全组织根据往期日期显示订单金额
/// </summary>
/// <param name="startDate"></param>
/// <returns></returns>
public string GetLastDateOrderAmount(DateTime startDate)
{
var ThisYearChange = tempTableDict["ThisYearChange"];
var LastYearChange = tempTableDict["LastYearChange"];
var ExcludeOrder = tempTableDict["ExcludeOrder"];
var LastDateOrderAmount = tempTableService.CreateTempTable();
tempTableDict.Add("LastDateOrderAmount", LastDateOrderAmount);
var sql = $@"/*dialect*/SELECT
A.FBILLNO,
A.FSALEORGID AS FSALEORGID,
CASE
WHEN ISNULL (O.FNAME, '') = '' THEN ACL.
ELSE ACO.
END AS 'F_SBU',
CASE
WHEN ISNULL (O.FNAME, '') = '' THEN ACL.
ELSE ACO.
END AS 'F_MXQY',
CASE
WHEN ISNULL (O.FNAME, '') = '' THEN L.FNAME
ELSE O.FNAME
END AS '',
CASE
WHEN n.FSHARERATE IS NULL THEN CASE
WHEN t2fen.FBILLALLAMOUNT_LC IS NULL THEN t1fen.FBILLALLAMOUNT_LC - A.F_AMOUNTSTAR
ELSE t1fen.FBILLALLAMOUNT_LC - t2fen.FBILLALLAMOUNT_LC
END
ELSE CASE
WHEN t1.ChangeOrderId IS NULL THEN ROUND(
t1fen.FBILLALLAMOUNT_LC - A.F_AMOUNTSTAR * (n.FSHARERATE / 100),
10
)
ELSE ROUND(
t1fen.FBILLALLAMOUNT_LC - t2fen.FBILLALLAMOUNT_LC * (n.FSHARERATE / 100),
10
)
END
END AS ''
INTO {LastDateOrderAmount}
FROM
T_SAL_ORDER A --
INNER JOIn T_SAL_ORDERFIN A_FIN on A.FID = A_FIN.FID --
INNER JOIN {ThisYearChange} t1 on t1.FPKIDX = A.FID --
LEFT JOIN T_SAL_XORDERFIN t1fen on t1.ChangeOrderId = t1fen.FID --
LEFT JOIN {LastYearChange} t2 on t1.FPKIDX = A.FID --
LEFT JOIN T_SAL_XORDERFIN t2fen on t2.ChangeOrderId = t2fen.FID --
LEFT JOIN V_BD_SALESMAN_L L ON L.fid = A.FSALERID
left JOIN T_PerformanceSharing M ON M.FSOURCEBILLNO = A.FBILLNO
AND M.FDOCUMENTSTATUS = 'C'
left JOIN T_PerformanceSharingEntry N ON N.FID = M.FID
LEFT JOIN V_BD_SALESMAN_L O ON O.fid = N.FSALEID
LEFT JOIN ERPTOHR.HYHRV3.dbo.v_erp_empinfo ACO ON ACO. = O.FNAME
AND ISNULL (ACO., '') != ''
LEFT JOIN ERPTOHR.HYHRV3.dbo.v_erp_empinfo ACL ON ACL. = L.FNAME
AND ISNULL (ACL., '') != ''
WHERE
1 = 1
AND A.FAPPROVEDATE < {startDate.ToString("yyyy-MM-dd")} --
AND A.FDocumentStatus = 'C'
AND A.FManualClose <> '1'
AND A.FID NOT IN (
SELECT
FID
FROM
{ExcludeOrder}
)
AND A.F_contractnumber NOT LIKE 'Z%'
";
DBServiceHelper.Execute(ctx, sql);
return LastDateOrderAmount;
}
public string GetThisDateSumAmount()
{
var ThisDateOrderAmount = tempTableDict["ThisDateOrderAmount"];
var LastDateOrderAmount = tempTableDict["LastDateOrderAmount"];
var SumAmount = tempTableService.CreateTempTable();
var ThisDateOrderAmountTemp = tempTableService.CreateTempTable();
var LastDateOrderAmountTemp = tempTableService.CreateTempTable();
var YJMB = tempTableService.CreateTempTable();
tempTableDict.Add("SumAmount", SumAmount);
tempTableDict.Add("ThisDateOrderAmountTemp", ThisDateOrderAmountTemp);
tempTableDict.Add("LastDateOrderAmountTemp", LastDateOrderAmountTemp);
tempTableDict.Add("YJMB", YJMB);
var sql1 = $@"/*dialect*/SELECT
F_SBU,
F_MXQY,
,
(
SELECT
ISNULL (SUM(), 0)
FROM
{ThisDateOrderAmount}
WHERE
FSALEORGID = '100302'
) _万元,
(
SELECT
ISNULL (SUM(), 0)
FROM
{ThisDateOrderAmount}
WHERE
FSALEORGID = '100303'
) _万元,
(
SELECT
ISNULL (SUM(), 0)
FROM
{ThisDateOrderAmount}
WHERE
FSALEORGID = '100305'
) _万元,
(
SELECT
ISNULL (SUM(), 0)
FROM
{ThisDateOrderAmount}
WHERE
FSALEORGID = '438223'
) _万元,
(
SELECT
ISNULL (SUM(), 0)
FROM
{ThisDateOrderAmount}
WHERE
FSALEORGID = '438224'
) _万元,
(
SELECT
ISNULL (SUM(), 0)
FROM
{ThisDateOrderAmount}
WHERE
FSALEORGID = '1467475'
) _万元
INTO {ThisDateOrderAmountTemp}
FROM
{ThisDateOrderAmount} t1
GROUP BY
F_SBU,
F_MXQY,
";
DBServiceHelper.Execute(ctx, sql1);
var sql2 = $@"/*dialect*/SELECT
F_SBU,
F_MXQY,
,
SUM() INTO {LastDateOrderAmountTemp}
FROM
{LastDateOrderAmount} t1
GROUP BY
F_SBU,
F_MXQY,
";
DBServiceHelper.Execute(ctx, sql2);
var sql3 = $@"/*dialect*/SELECT
FORMAT (A.F_VRYF_Date_83g, 'yyyy') AS '',
C.FNAME AS '',
B.FPerformanceTargets AS '_万元',
B.FPAYMENTSUM AS '_万元'
INTO {YJMB}
FROM
MBBA_t_Cust100002 A
INNER JOIN MBBA_t_Cust_Entry100003 B ON A.FID = B.FID
INNEr JOIN V_BD_SALESMAN_L C ON C.fid = B.FNAME
WHERE
FORMAT (A.F_VRYF_Date_83g, 'yyyy') = '{2025}'
";
DBServiceHelper.Execute(ctx, sql3);
var sql = $@"/*dialect*/SELECT
t1.*,
t2. _万元,
t3.,
t3._万元 _万元,
t3._万元,
_万元 + _万元 + _万元 + _万元 + _万元 + _万元 + AS _万元
INTO {SumAmount}
FROM
{ThisDateOrderAmountTemp} t1
LEFT JOIN {LastDateOrderAmountTemp} t2 ON t1.F_SBU = t2.F_SBU
AND t1.F_MXQY = t2.F_MXQY
AND t1. = t2.
LEFT JOIN {YJMB} t3 ON t1. = t3.
";
DBServiceHelper.Execute(ctx, sql);
return SumAmount;
}
}
}