using Kingdee.BOS.App.Data; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Util; using Kingdee.K3.BD.NewCode.Core.Utils; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; namespace GZ.LJY000.Biori.STK_MisDelivery { [HotUpdate, Description("其他出库单服务操作插件")] public class OperationEventPlugInEx : AbstractOperationServicePlugIn { public override void OnPreparePropertys(PreparePropertysEventArgs e) { base.OnPreparePropertys(e); e.FieldKeys.Add("FPackBillNo"); e.FieldKeys.Add("FPackBillSeq"); e.FieldKeys.Add("FPackBillEntryId"); e.FieldKeys.Add("FQty"); } public override void OnAddValidators(AddValidatorsEventArgs e) { base.OnAddValidators(e); if (this.FormOperation.OperationId == 1) { //添加检查校验器: var validator = new VaildatorEventPlugInEx();//新增的校验器 validator.EntityKey = "FEntity"; e.Validators.Add(validator);//添加校验器 } } public override void EndOperationTransaction(EndOperationTransactionArgs e) { base.EndOperationTransaction(e); //保存8 提交9 审核1 反审核26 删除3 if (this.FormOperation.OperationId == 1) { DoComputePackgeQty(e.DataEntitys, false); } else if (this.FormOperation.OperationId == 26) { DoComputePackgeQty(e.DataEntitys, true); } } /// /// /// /// /// private void DoComputePackgeQty(DynamicObject[] dataEntitys, bool isInStock) { var dataEntityList = new List(); var sqlL = new Dictionary(); //# ! 装管公式(毫升):管数 = 数量 / 装管量(ml) / 1.05 //# ! 装管公式(微升):管数 = 数量 / 装管量(ml) / 1000 / 1.05 foreach (var data in dataEntitys) { foreach (var item in data["BillEntry"] as DynamicObjectCollection) { var packBillNo = item["FPackBillNo"].ToString(); if (!packBillNo.IsNullOrEmpty()) { if (sqlL.ContainsKey(packBillNo)) continue; sqlL.Add(packBillNo, $" SELECT '{packBillNo}' AS FBILLNO , {item["Qty"]} AS QTY "); } } } if (isInStock) DoComputePackgeInStockQty(sqlL.Values.ToList()); else DoComputePackgeOutStockQty(sqlL.Values.ToList()); } /// /// 入库操作 /// /// private void DoComputePackgeInStockQty(List sqlL) { if (sqlL.Any()) { var updSqlL = $@"/*dialect*/ WITH #基础数据 AS ( {string.Join(" UNION ALL ", sqlL)} ) UPDATE t0 SET t0.FQTY = t0.FQTY + t1.QTY ,t0.FOUTSTOCKQTY = t0.FOUTSTOCKQTY - t1.QTY FROM T_PRD_PACKAGEINSTOCK t0 INNER JOIN #基础数据 t1 on t1.FBILLNO = t0.FBILLNO WHERE 1 = 1 AND t0.FDOCUMENTSTATUS = 'C' "; //更新组装单信 var resData = DBUtils.Execute(this.Context, updSqlL); return; } } /// /// 出库操作 /// /// private void DoComputePackgeOutStockQty(List sqlL) { if (sqlL.Any()) { var updSqlL = $@"/*dialect*/ WITH #基础数据 AS ( {string.Join(" UNION ALL ", sqlL)} ) UPDATE t0 SET t0.FQTY = t0.FQTY - t1.QTY ,t0.FOUTSTOCKQTY = t0.FOUTSTOCKQTY + t1.QTY FROM T_PRD_PACKAGEINSTOCK t0 INNER JOIN #基础数据 t1 on t1.FBILLNO = t0.FBILLNO WHERE 1 = 1 AND t0.FDOCUMENTSTATUS = 'C' AND (t0.FQTY - t1.QTY) >= 0 "; //更新组装单信 var resData = DBUtils.Execute(this.Context, updSqlL); return; } } } }