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(); 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; } /// /// 获取批号 /// /// /// 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"); } } } }