Files
GateDge2023_ljy/07.珠海英搏尔/GZ.LJY000.Enpower/STK_MISCELLANEOUS/BillEventPlugInEx.cs
PastSaid 3d15fd4b7e a
2025-01-01 08:21:58 +08:00

172 lines
6.8 KiB
C#

using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kingdee.BOS;
using Kingdee.BOS.Util;
using Kingdee.BOS.Core;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Core.Metadata.EntityElement;
using System.ComponentModel;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS.Core.Metadata.Operation;
using System.Runtime.Remoting.Contexts;
using System.Security.Cryptography;
namespace GZ.LJY000.Enpower.STK_MISCELLANEOUS
{
[HotUpdate, Description("其他入库批号获取")]
public class BillEventPlugInEx : AbstractDynamicFormPlugIn
{
public override void DataChanged(DataChangedEventArgs e)
{
base.DataChanged(e);
if (DoDetection())
{
var stockDirectObj = this.View.Model.GetValue("FStockDirect");
var stockDirectVal = stockDirectObj == null ? "" : stockDirectObj.ToString();
if (stockDirectVal.Equals("GENERAL"))
{
if (e.Field.Key.ToUpper().Equals("FDATE"))
{
var details = this.View.BusinessInfo.GetEntity("FEntity");
if (details != null)
{
var entrys = this.View.Model.GetEntityDataObject(details);
if (entrys != null && entrys.Count > 0)
{
var dateValue = e.NewValue.ToString();
if (dateValue.IsNullOrEmptyOrWhiteSpace())
return;
var tableSqlL = new List<string>();
foreach (var entry in entrys)
{
var rowIndex = this.View.Model.GetRowIndex(details, entry);
var materialObjValue = entry["MaterialId_Id"];
var materialValue = materialObjValue == null ? 0 : materialObjValue.Long2Int();
tableSqlL.Add($" SELECT {materialValue} AS 'FMATERIALID',{rowIndex} rowIdx ");
}
if (tableSqlL.Any())
GetPrdLot(dateValue, string.Join(" UNION ", tableSqlL));
}
}
}
if (e.Field.Key.ToUpper().Equals("FMATERIALID"))
{
var dateObj = this.View.Model.GetValue("FDate");
var dateValue = dateObj == null ? "" : dateObj.ToString();
//this.View.Model.SetValue("FLOT", "002", 0);
var materialId = e.NewValue.Long2Int();
if (materialId > 0 && !dateValue.IsNullOrEmptyOrWhiteSpace())
GetPrdLot(dateValue, string.Join(" UNION ", $" SELECT {materialId} AS 'FMATERIALID',{e.Row} rowIdx "));
}
}
}
}
public override void AfterCreateNewEntryRow(CreateNewEntryEventArgs e)
{
base.AfterCreateNewEntryRow(e);
}
private bool DoDetection()
{
var orgObj = this.View.Model.GetValue("FStockOrgId") as DynamicObject;
if (this.Context.DBId.ToLower().Equals("66eec1c506d225"))
return true;
if (orgObj["Id"].Long2Int() == 1)
return true;
return false;
}
/// <summary>
/// 获取批号
/// </summary>
/// <param name="dateTime"></param>
/// <param name="tableSql"></param>
private void GetPrdLot(string dateTime, string tableSql)
{
var sqlL = $@"/*dialect*/
DECLARE @date datetime
SET @date = '{dateTime}'
;WITH #基础数据 AS (
{tableSql}
)
SELECT tt.*,t1.*
FROM #基础数据 tt
INNER JOIN T_BD_MATERIALSTOCK t0s on tt.FMATERIALID = t0s.FMATERIALID AND t0s.FISBATCHMANAGE = 1
CROSS APPLY (
SELECT TOP 1 tt.FBILLNO,tt.FMATERIALID,tt.FREALQTY,tt.FLOT,tt.FLOT_TEXT,tt.Seq,ROW_NUMBER()OVER (ORDER BY tt.FREALQTY DESC,tt.FCREATEDATE DESC) RN
FROM (
SELECT TOP 10 t0.FBILLNO,t0e.FMATERIALID,t0e.FREALQTY,t0e.FLOT,t1.FBILLNO FLOT_TEXT,0 Seq,t0.FCREATEDATE
FROM T_PRD_INSTOCK t0
INNER JOIN T_PRD_INSTOCKENTRY t0e on t0.FID = t0e.FID
INNER JOIN T_PRD_INSTOCKENTRY_LK t0e_lk on t0e_lk.FENTRYID = t0e.FENTRYID AND t0e_lk.FSTABLENAME = 'T_PRD_MOENTRY'
INNER JOIN T_PRD_MO t1 on t1.FID = t0e_lk.FSBILLID
INNER JOIN T_BD_MATERIALBASE t1b on t1b.FMATERIALID = t0e.FMATERIALID AND t1b.FERPCLSID = '2'
WHERE 1=1 AND t0e.FLOT != 0
AND t0e.FMATERIALID = tt.FMATERIALID
AND t0.FCREATEDATE <= @date
ORDER BY t0.FCREATEDATE DESC
UNION ALL
SELECT TOP 10 t0.FBILLNO,t0e.FMATERIALID,t0e.FREALQTY,t0e.FLOT,t2.FBILLNO,0 Seq,t0.FCREATEDATE
FROM T_STK_INSTOCK t0
INNER JOIN T_STK_INSTOCKENTRY t0e on t0.FID = t0e.FID
INNER JOIN T_STK_INSTOCKENTRY_LK t0e_lk on t0e_lk.FENTRYID = t0e.FENTRYID AND t0e_lk.FSTABLENAME = 't_PUR_POOrderEntry'
INNER JOIN T_PUR_POORDERENTRY_LK t1e_lk on t1e_lk.FENTRYID = t0e_lk.FSID AND t1e_lk.FSTABLENAME = 'T_SUB_REQORDERENTRY'
INNER JOIN T_SUB_REQORDER t2 on t2.FID = t1e_lk.FSBILLID
INNER JOIN T_BD_MATERIALBASE t1b on t1b.FMATERIALID = t0e.FMATERIALID AND t1b.FERPCLSID = '3'
WHERE 1=1
AND t0.FBUSINESSTYPE = 'WW'
AND t0e.FLOT != 0
AND t0e.FMATERIALID = tt.FMATERIALID
AND t0.FCREATEDATE <= @date
ORDER BY t0.FCREATEDATE DESC
UNION ALL
SELECT '',0,0,0,RIGHT(CONVERT(varchar(100),CONVERT(int, CONVERT(VARCHAR(6),@date,112)) * 100 + DATEPART(ISO_WEEK, @date)),6),1 Seq,@date
) tt
--ORDER BY tt.FREALQTY DESC,tt.Seq ASC
) t1
";
var res = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL);
if (res != null && res.Count > 0)
{
LotField field = this.View.Model.BillBusinessInfo.GetField("FLOT") as LotField;
foreach (var item in res)
{
if (field.InputModel == LotField.Enum_InputModel.OnlySelect)
{
this.View.Model.SetValue("FLOT", item["FLOT"].Long2Int(), item["rowIdx"].Long2Int());
}
else
{
//this.View.Model.SetValue("FLOT", item["FLOT_TEXT"].ToString(), item["rowIdx"].Long2Int());
this.View.Model.SetValue("FLOT", item["FLOT_TEXT"].ToString(), item["rowIdx"].Long2Int());
}
}
//this.View.UpdateView("FLOT");
}
}
}
}