using System;
|
using System.Collections.Generic;
|
using Kingdee.BOS.Util;
|
using Kingdee.BOS.Core.Metadata;
|
using Kingdee.BOS.Core.Metadata.EntityElement;
|
using Kingdee.BOS.Core.DynamicForm.PlugIn;
|
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
|
using Kingdee.BOS.Orm.DataEntity;
|
using Kingdee.BOS.Contracts;
|
using Kingdee.BOS.App;
|
using Kingdee.BOS.Core.Metadata.FieldElement;
|
using System.ComponentModel;
|
using Kingdee.BOS.ServiceHelper;
|
using Kingdee.K3.SCM.App;
|
using System.Data;
|
using Newtonsoft.Json.Linq;
|
using ZD.Cloud.WebApi;
|
using Newtonsoft.Json;
|
using Kingdee.BOS.Core.DynamicForm;
|
using System.Linq;
|
using Demo.BillView.PRD;
|
|
namespace Demo.OperationService
|
{
|
[Description("[采购退料单-审核]服务插件]")]
|
[HotUpdate]
|
public class PUR_MRBAduit : AbstractOperationServicePlugIn
|
{
|
Dictionary<string, string> dictionary = new Dictionary<string, string>();
|
public override void OnPrepareOperationServiceOption(OnPrepareOperationServiceEventArgs e)
|
{
|
base.OnPrepareOperationServiceOption(e);
|
|
//为了在BeginOperationTransaction里检查数据抛出异常时
|
//只回滚当前单据的事务,这里设置为不支持批量事务,这样BOS会
|
//循环为每一张单据创建事务调用操作
|
e.SupportTransaction = true;
|
e.SurportBatchTransaction = false;
|
}
|
public override void OnPreparePropertys(PreparePropertysEventArgs e)
|
{
|
e.FieldKeys.Add("FSRCBillTypeId");
|
e.FieldKeys.Add("FPURMRBENTRY_FEntryID");
|
e.FieldKeys.Add("FRMREALQTY");
|
}
|
public override void BeginOperationTransaction(BeginOperationTransactionArgs e)
|
{
|
base.BeginOperationTransaction(e);
|
//Entity entity = this.BusinessInfo.GetEntity("FEntity");//获取明细信息
|
//foreach (var billObj in e.DataEntitys)
|
//{
|
// DynamicObjectCollection entryRows = billObj["FEntity"] as DynamicObjectCollection;
|
// foreach (var entryRow in entryRows)
|
// {
|
// var fentryId = entryRow["Id"].ToString();
|
// }
|
//}
|
}
|
/// <summary>
|
/// 审核后 反写提料计划单 退料数量
|
/// </summary>
|
/// <param name="e"></param>
|
public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
|
{
|
base.AfterExecuteOperationTransaction(e);
|
foreach (var billObj in e.DataEntitys)
|
{
|
DynamicObjectCollection entryRows = billObj["PUR_MRBENTRY"] as DynamicObjectCollection;
|
foreach (var entryRow in entryRows)
|
{
|
var fentryId = entryRow["Id"].ToString();
|
var fSrcbillTypeId = entryRow["SrcbillTypeId"].ToString();
|
var fRmrealQty = entryRow["RmrealQty"].ToString();
|
if (fSrcbillTypeId == "STK_InStock")
|
{
|
string sql = string.Format(@"
|
/*dialect*/
|
select t2.FRMREALQTY,t2.FSRCBILLTYPEID,t4.FTLENTRYID from T_PUR_MRBENTRY_LK t1
|
join T_PUR_MRBENTRY t2 on t1.FENTRYID =t2.FENTRYID
|
join T_STK_INSTOCKENTRY_LK t3 on t1.FSID = t3.FENTRYID
|
join T_PUR_RECEIVEENTRY t4 on t3.FSID =t4.FENTRYID
|
where t2.FSRCBILLTYPEID = 'STK_InStock'
|
and t2.FENTRYID = '{0}'
|
", fentryId);
|
DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
|
if (dt.Rows.Count == 1)
|
{
|
DataRow dr = dt.Rows[0];
|
if (Convert.ToInt32(dr["FTLENTRYID"]) == 0)
|
continue;
|
sql = $"/*dialect*/ update Cg_PODemandPlanBillSub set FRMREALQTY = FRMREALQTY + {fRmrealQty} where FEntryID = {dr["FTLENTRYID"]}";
|
DBServiceHelper.Execute(Context,sql);
|
sql = $"/*dialect*/ update T_PUR_MRBENTRY set FTLENTRYID = {dr["FTLENTRYID"]} where FEntryID = {fentryId}";
|
DBServiceHelper.Execute(Context, sql);
|
}
|
}
|
else if (fSrcbillTypeId == "PUR_ReceiveBill")
|
{
|
string sql = string.Format(@"
|
/*dialect*/
|
select t2.FRMREALQTY,t2.FSRCBILLTYPEID,t3.FTLENTRYID from T_PUR_MRBENTRY_LK t1
|
join T_PUR_MRBENTRY t2 on t1.FENTRYID =t2.FENTRYID
|
join T_PUR_RECEIVEENTRY t3 on t1.FSID =t3.FENTRYID
|
where t2.FSRCBILLTYPEID = 'PUR_ReceiveBill'
|
and t2.FENTRYID = '{0}'
|
", fentryId);
|
DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
|
if (dt.Rows.Count == 1)
|
{
|
DataRow dr = dt.Rows[0];
|
if (Convert.ToInt32(dr["FTLENTRYID"]) == 0)
|
continue;
|
sql = $"/*dialect*/ update Cg_PODemandPlanBillSub set FRMREALQTY = FRMREALQTY + {fRmrealQty} where FEntryID = {dr["FTLENTRYID"]}";
|
DBServiceHelper.Execute(Context, sql);
|
sql = $"/*dialect*/ update T_PUR_MRBENTRY set FTLENTRYID = {dr["FTLENTRYID"]} where FEntryID = {fentryId}";
|
DBServiceHelper.Execute(Context, sql);
|
}
|
}
|
}
|
}
|
foreach (var item in dictionary)
|
{
|
ResultMessage.dataError(this.OperationResult.OperateResult, item.Key, item.Value);
|
}
|
}
|
public static class ResultMessage
|
{/// <summary>
|
/// 修改提示信息
|
/// </summary>
|
/// <param name="operateResult"></param>
|
/// <param name="billno"></param>
|
public static void dataError(OperateResultCollection operateResult, string billno, string message)
|
{
|
OperateResult operate = operateResult.Where(n => n.Number == billno).First();
|
operate.Message = message;
|
operate.SuccessStatus = false;
|
operate.MessageType = MessageType.FatalError;
|
}
|
}
|
}
|
}
|