using Kingdee.BOS.App.Data; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Util; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; namespace GZ.LJY000.Biori.SAL_OUTSTOCK { [HotUpdate, Description("销售出库单审核/反审核操作")] public class OperationEventPlugInEx : AbstractOperationServicePlugIn { public override void OnPreparePropertys(PreparePropertysEventArgs e) { base.OnPreparePropertys(e); e.FieldKeys.Add("FRowType"); e.FieldKeys.Add("FPackBillNo"); e.FieldKeys.Add("FPackBillSeq"); e.FieldKeys.Add("FPackBillEntryId"); e.FieldKeys.Add("FRealQty"); } 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 List(); foreach (var data in dataEntitys) { foreach (var item in data["SAL_OUTSTOCKENTRY"] as DynamicObjectCollection) { var packBillNo = item["FPackBillNo"]; var rowType = item["RowType"].ToString(); if (!packBillNo.IsNullOrEmpty() && rowType.Equals("Parent")) { sqlL.Add($" SELECT '{packBillNo}' AS FBILLNO , {item["RealQty"]} AS QTY "); } } } if (isInStock) DoComputePackgeInStockQty(sqlL); else DoComputePackgeOutStockQty(sqlL); } /// /// 入库操作 /// /// 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; } } } }