using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Linq; using System.Text; using BGP.K3.GSP.Business.PlugIn.Template; using BGP.K3.GSP.Contracts; using BGP.K3.GSP.Core.Text; using Kingdee.BOS; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using Kingdee.K3.Core.BD; namespace GZ.BGP.K3.GSP.Business.PlugIn.StorageAndMaintenance { [Description("GSP药品养护计划表单插件")] public class DrugMaintPlanEdits : AbstractGspBillPlugIn { public override string FEntityKey => "FENTITY"; public override string FEntityorm => "T_BGP_MAINTEPLANB"; public override string Materialidorm => "F_BGP_MATERIALNO"; public override string MaterialidKey => "F_BGP_MATERIALNO"; public override string LOTorm => "F_BGP_BATCHNO"; public override string LOTKey => "F_BGP_BATCHNO"; public override string ProduceDateorm => "F_BGP_PRODUCTDATE"; public override string ApprovalNoMKey => "F_BGP_APPROVALNOM"; public override string ApprovalNoKey => "F_BGP_APPROVALNOALL"; public override bool ISadd => false; public override bool ISback => true; public override DynamicObject RequestOrg => Model.GetValue("F_BGP_OrgId") as DynamicObject; public override string DeptFieldKey => "F_BGP_Department"; public override string EmpFieldKey => "F_BGP_Staff"; public override void BarItemClick(BarItemClickEventArgs e) { _ = e.BarItemKey; DynamicObject dataObject = Model.DataObject; string barItemKey; if ((barItemKey = e.BarItemKey) == null || !(barItemKey == "tbButtonComDraw")) { return; } DynamicObject dynamicObject = dataObject["F_BGP_OrgId"] as DynamicObject; string leadtime = Model.GetValue("F_BGP_LeadTime").ToString(); if (dynamicObject == null) { return; } DynamicObjectCollection dynamicObjectCollection = ReceivableDetail1(base.Context, dynamicObject[0], leadtime); Entity entity = base.View.BusinessInfo.GetEntity("FEntity"); base.View.Model.GetEntityDataObject(entity); for (int num = Model.GetEntryRowCount(entity.Key) - 1; num > -1; num--) { base.View.Model.DeleteEntryRow("FEntity", num); } int count = dynamicObjectCollection.Count; if (count < 1) { base.View.ShowNotificationMessage("无可提取数据!"); } else { List list = new List(); for (int i = 0; i < count; i++) { if (!list.Contains(dynamicObjectCollection[i]["F_BGP_INVENTORYID"].ToString())) { list.Add(dynamicObjectCollection[i]["F_BGP_INVENTORYID"].ToString()); base.View.Model.CreateNewEntryRow("FEntity"); base.View.Model.SetValue("F_BGP_MaterialNo", dynamicObjectCollection[i]["FMaterialId"], i); base.View.InvokeFieldUpdateService("FMaterialId", i); base.View.Model.SetValue("F_BGP_Warehouse", dynamicObjectCollection[i]["FSTOCKID"], i); base.View.Model.SetValue("F_BGP_Inventory", dynamicObjectCollection[i]["FBaseQty"], i); base.View.Model.SetValue("F_BGP_BatchNo", dynamicObjectCollection[i]["FLot"], i); base.View.Model.SetValue("F_BGP_Positions", dynamicObjectCollection[i]["FStockLocId"], i); base.View.Model.SetValue("F_BGP_OverTime", dynamicObjectCollection[i]["overday"], i); if (ConvertExtensionMethods.Pstring(dynamicObjectCollection[i]["F_BGP_ShouldMainteDate"]) != "0001-01-01 00:00:00") { base.View.Model.SetValue("F_BGP_ShouldMainteDate", dynamicObjectCollection[i]["F_BGP_ShouldMainteDate"], i); } base.View.Model.SetValue("F_BGP_MeasuringUnit", dynamicObjectCollection[i]["FStockUnitId"], i); base.View.Model.SetValue("F_BGP_UNITID", dynamicObjectCollection[i]["FBaseUnitId"], i); if (ConvertExtensionMethods.Pstring(dynamicObjectCollection[i]["F_BGP_MAINTEPLANDATE"]) != "0001-01-01 00:00:00") { base.View.Model.SetValue("F_BGP_MAINTEPLANDATE", dynamicObjectCollection[i]["F_BGP_MAINTEPLANDATE"], i); } base.View.Model.SetValue("F_BGP_MAINTECN", dynamicObjectCollection[i]["FBaseQty"], i); if (ConvertExtensionMethods.Pstring(dynamicObjectCollection[i]["FPRODUCEDATE"]) != "0001-01-01 00:00:00") { base.View.Model.SetValue("F_BGP_ProductDate", dynamicObjectCollection[i]["FPRODUCEDATE"], i); } if (ConvertExtensionMethods.Pstring(dynamicObjectCollection[i]["FEXPIRYDATE"]) != "0001-01-01 00:00:00") { base.View.Model.SetValue("F_BGP_EffDate", dynamicObjectCollection[i]["FEXPIRYDATE"], i); } base.View.Model.SetValue("F_BGP_BaseQty", dynamicObjectCollection[i]["FBaseQty"], i); base.View.Model.SetValue("F_BGP_InventoryState", dynamicObjectCollection[i]["FStockStatusId"], i); base.View.Model.SetValue("F_BGP_OwnerTypeId", dynamicObjectCollection[i]["FOwnerTypeId"], i); base.View.Model.SetValue("F_BGP_OwnerId", dynamicObjectCollection[i]["FOwnerId"], i); base.View.Model.SetValue("F_BGP_KeeperTypeId", dynamicObjectCollection[i]["FKeeperTypeId"], i); base.View.Model.SetValue("F_BGP_KeeperId", dynamicObjectCollection[i]["FKeeperId"], i); base.View.Model.SetValue("F_BGP_AuxPropId", dynamicObjectCollection[i]["FAuxPropId"], i); base.View.Model.SetValue("F_BGP_SecUnitId", dynamicObjectCollection[i]["FSecUnitId"], i); base.View.Model.SetValue("F_BGP_SecQty", dynamicObjectCollection[i]["FSecQty"], i); base.View.Model.SetValue("F_BGP_MaintDate", dynamicObjectCollection[i]["Maintdate"], i); base.View.Model.SetValue("F_BGP_INVENTORYID", dynamicObjectCollection[i]["F_BGP_INVENTORYID"], i); } } } base.View.UpdateView("F_BGP_MaterialNo"); base.View.UpdateView("FEntity"); } public override void EntryBarItemClick(BarItemClickEventArgs e) { string text; if ((text = e.BarItemKey.ToUpper()) != null && text == "TBLOTCR_BGP") { UpdateMaintDt(); } } public void UpdateMaintDt() { if (!(Model.DataObject["F_BGP_OrgId"] is DynamicObject dynamicObject)) { return; } StringBuilder stringBuilder = new StringBuilder(); SqlParam[] array = new SqlParam[1] { new SqlParam("@FORG", KDDbType.String, dynamicObject[0]) }; stringBuilder.Append($" SELECT *from T_STK_INVENTORY where FSTOCKORGID=@FORG "); DynamicObjectCollection source = DBServiceHelper.ExecuteDynamicObject(base.Context, stringBuilder.ToString(), null, null, CommandType.Text, array); Entity entity = base.View.BusinessInfo.GetEntity("FEntity"); DynamicObjectCollection subEntityRows = base.View.Model.GetEntityDataObject(entity); Model.GetEntryRowCount(entity.Key); List lidy = new List(); List liin = new List(); int num = 0; int num2 = 0; foreach (DynamicObject item in subEntityRows) { DynamicObject dynamicObject2 = source.Where((DynamicObject p) => p["fid"].ToString() == ConvertExtensionMethods.Pstring(item["F_BGP_INVENTORYID"])).FirstOrDefault(); if (dynamicObject2 != null && ConvertExtensionMethods.Pdecimal(dynamicObject2["FBASEQTY"]) < ConvertExtensionMethods.Pdecimal(item["F_BGP_BaseQty"]) - ConvertExtensionMethods.Pdecimal(item["F_BGP_BaseMaintQty"])) { lidy.Add(dynamicObject2); liin.Add(num2); num++; } num2++; } if (num > 0) { base.View.ShowMessage("检验结果有" + num + "笔的库存数量已经小于是否需要自动校正数量,并留存变更记录,且自动下推(【是】=执行/【否】=取消)", MessageBoxOptions.YesNo, delegate (MessageBoxResult result) { if (result == MessageBoxResult.Yes) { UpdateDt(liin, subEntityRows, lidy); } }); } else { base.View.ShowMessage("检验结果库存数量数据正常,无需调整"); } } public void UpdateDt(List liseq, DynamicObjectCollection subEntityRows, List lidy) { int num = Model.GetEntryRowCount("F_BGP_FChangeRecord"); IMaintInventoryService maintInventoryService = GspServiceFactory.GetMaintInventoryService(base.Context); Dictionary dictionary = new Dictionary(); foreach (int item in liseq) { base.View.Model.CreateNewEntryRow("F_BGP_FChangeRecord"); DynamicObject dynamicObject = lidy.Where((DynamicObject p) => p["fid"].ToString() == subEntityRows[item]["F_BGP_INVENTORYID"].ToString()).FirstOrDefault(); base.View.Model.SetValue("F_BGP_MaterialNoCR", subEntityRows[item]["F_BGP_MaterialNo"], num); base.View.Model.SetValue("F_BGP_UnitIDCR", subEntityRows[item]["F_BGP_MeasuringUnit"], num); base.View.Model.SetValue("F_BGP_MainteCnOLD", subEntityRows[item]["F_BGP_MainteCn"], num); base.View.Model.SetValue("F_BGP_InventoryOld", subEntityRows[item]["F_BGP_Inventory"], num); base.View.Model.SetValue("F_BGP_UnitICR", subEntityRows[item]["F_BGP_UnitID"], num); base.View.Model.SetValue("F_BGP_BaseQtyOld", subEntityRows[item]["F_BGP_BaseQty"], num); base.View.Model.SetValue("F_BGP_DateCR", DateTime.Now, num); base.View.Model.SetValue("F_BGP_INVENTORYIDCR", subEntityRows[item]["F_BGP_INVENTORYID"], num); decimal num2 = ConvertExtensionMethods.Pdecimal(dynamicObject["FBaseQty"]); decimal num3 = ConvertExtensionMethods.Pdecimal(subEntityRows[item]["F_BGP_BaseMaintQty"]); decimal num4 = num2 + num3; decimal num5 = maintInventoryService.ExchangeUnitQty(base.Context, ConvertExtensionMethods.Pint64(subEntityRows[item]["F_BGP_MaterialNo_id"]), ConvertExtensionMethods.Pint64(subEntityRows[item]["F_BGP_MaterialNo_id"]), ConvertExtensionMethods.Pint64(subEntityRows[item]["F_BGP_UnitID_id"]), ConvertExtensionMethods.Pint64(subEntityRows[item]["F_BGP_MeasuringUnit_id"]), num4, ref dictionary); base.View.Model.SetValue("F_BGP_BaseQtyNew", num4, num); base.View.Model.SetValue("F_BGP_InventoryNew", num4, num); base.View.Model.SetValue("F_BGP_MainteCnNew", num5, num); base.View.Model.SetValue("F_BGP_MainteCn", num5, item); base.View.Model.SetValue("F_BGP_Inventory", num4, item); base.View.Model.SetValue("F_BGP_BaseQty", num4, item); num++; } BusinessDataServiceHelper.Save(base.Context, base.View.BusinessInfo, base.View.Model.DataObject); base.View.ShowMessage("更新完毕"); } public static DynamicObjectCollection ReceivableDetail1(Context cxt, object fOrg, string leadtime) { StringBuilder stringBuilder = new StringBuilder(); SqlParam[] array = new SqlParam[1] { new SqlParam("@FORG", KDDbType.String, fOrg) }; stringBuilder.Append($@" SELECT t0.fid F_BGP_INVENTORYID ,t0.FSTOCKID,t1.FMaterialId,t0.FLot,t0.FStockUnitId,t0.FBaseUnitId ,t0.FQty,t0.FBaseQty,t0.FStockStatusId,t0.FStockLocId ,DATEDIFF(DAY,t3.Maintdate,GETDATE()) - t2.F_BGP_DAY + 1 overday ,DATEADD(DAY,(t2.F_BGP_DAY + 0.7),t3.Maintdate) as F_BGP_ShouldMainteDate ,ISNULL(t3.FPRODUCEDATE,t0.FPRODUCEDATE) FPRODUCEDATE ,ISNULL(t3.FEXPIRYDATE,t0.FEXPIRYDATE) FEXPIRYDATE ,GETDATE() F_BGP_MAINTEPLANDATE,FOwnerTypeId,FOwnerId,FKeeperTypeId,FKeeperId ,FStockStatusId,FAuxPropId,FSecQty,FSecUnitId,t3.Maintdate FROM T_STK_INVENTORY t0 INNER JOIN T_BD_MATERIAL t1 on t0.FMATERIALID = t1.FMASTERID AND t0.FSTOCKORGID = t1.FUSEORGID INNER JOIN T_BGP_MaintainType t2 on t1.F_BGP_MAINTAINCLASS = t2.FID AND t2.FNUMBER = '01' INNER JOIN ( SELECT ISNULL(t3.F_BGP_MaintDate,t3.FInStockDate) Maintdate,t3.FLOTID,t3.FPRODUCEDATE,t3.FEXPIRYDATE FROM T_BD_LOTMASTER t3 ) t3 on t3.FLOTID=t0.FLot WHERE 1 = 1 AND DATEDIFF(DAY,t3.Maintdate ,GETDATE()) > t2.F_BGP_DAY - {leadtime} AND t0.FSTOCKORGID = @FORG AND FBaseQty > 0 AND t1.FDOCUMENTSTATUS='C' AND FStockStatusId = 10000 AND NOT EXISTS ( SELECT 1 FROM T_BGP_MaintePlanB t4 WHERE t4.F_BGP_BaseQty > t4.F_BGP_BaseMaintQty AND t4.F_BGP_INVENTORYID= t0.fid ) ORDER BY F_BGP_DosageForm,FSTOCKID,FMaterialId "); return DBServiceHelper.ExecuteDynamicObject(cxt, stringBuilder.ToString(), null, null, CommandType.Text, array); } } }