using System; using System.Collections.Generic; using Kingdee.BOS.Util; 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 System.ComponentModel; using Kingdee.BOS.ServiceHelper; using System.Data; using Newtonsoft.Json.Linq; using ZD.Cloud.WebApi; using Newtonsoft.Json; using Kingdee.BOS.Core.DynamicForm; using System.Linq; using RestSharp; using zymes_Project.Utility; namespace zymes_Project.OperationService { [Description("[税率-审核]服务插件]")] [HotUpdate] public class zymes_RealessTaxRate : AbstractOperationServicePlugIn { Dictionary dictionary = new Dictionary(); public override void OnPrepareOperationServiceOption(OnPrepareOperationServiceEventArgs e) { base.OnPrepareOperationServiceOption(e); //为了在BeginOperationTransaction里检查数据抛出异常时 //只回滚当前单据的事务,这里设置为不支持批量事务,这样BOS会 //循环为每一张单据创建事务调用操作 e.SupportTransaction = true; //e.SurportBatchTransaction = false; } public override void OnPreparePropertys(PreparePropertysEventArgs e) { base.OnPreparePropertys(e); e.FieldKeys.Add("FEntity"); e.FieldKeys.Add("FEntity_FEntryID"); } public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) { base.AfterExecuteOperationTransaction(e); Entity entity = this.BusinessInfo.GetEntity("FEntity");//获取明细信息 foreach (var billObj in e.DataEntitys) { var forgName = Context.CurrentOrganizationInfo.Name; //if (!forgName.Contains("杭州斯莫尔磁性材料有限公司")) // continue; var id = billObj["Id"].ToString(); string sql = string.Empty; sql = $@" /*dialect*/ select a.FID as HItemID,a.FNumber as HNumber,l.FName as HName,a.FNumber as HShortNumber,0 as HParentID ,1 as HLevel,'true' as HEndFlag,case when a.FFORBIDSTATUS='A' then 'false' else 'true' end as HStopflag,'CLD-ERP导入' as HRemark,'' HHelpCode,'未检测' as HUseFlag,a.FCREATEDATE as HMakeTime ,'' HMakeEmp,'' HCheckEmp,a.FAPPROVEDATE HCheckTime,'' HModifyEmp,a.FMODIFYDATE HModifyTime,'' HStopEmp,a.FUSEORGID as HUSEORGID,a.FCREATEORGID as HCREATEORGID ,o.FNUMBER as HOrganNumber from T_BD_TAXRATE a with(nolock) inner join T_BD_TAXRATE_L l with(nolock) on a.FID=l.FID and FLOCALEID=2052 left join T_ORG_Organizations o with(nolock) on a.FUSEORGID=o.FORGID Where a.FID='{id}'"; DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; if (dt.Rows.Count == 0) { LogService.Write("税率同步异常:" + sql); continue; } string HOrganNumber = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "HOrganNumber"); LogService.Write("组织:" + HOrganNumber); //获取税率的使用组织 DataTable dataTable = LogService.Get_DisPlayOrg(Context, HOrganNumber); if (dataTable.Rows.Count == 0) continue; if (dataTable.Rows[0]["FISNEEDPUSH"].ToString() == "0") continue; string http = dataTable.Rows[0]["F_RCZU_MesIp"].ToString(); DataRow dr = dt.Rows[0]; JObject model = new JObject(); foreach (DataColumn column in dt.Columns) { model.Add(column.ColumnName, dr[column.ColumnName].ToString()); } JObject _jsonRoot = new JObject() { ["model"] = model }; //LogService.Write("税率同步示例JsonConvert.SerializeObject(_jsonRoot):" + JsonConvert.SerializeObject(_jsonRoot)); //LogService.Write("税率同步示例:" + _jsonRoot); //string clientUrl = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "ClientUrl");//K/3 Cloud 业务站点地址 var client = new RestSharp.RestClient(http); var requestPost = new RestRequest("Gy_TaxRate/SaveGy_TaxRateListApi", Method.POST); requestPost.AddParameter("application/json", JsonConvert.SerializeObject(_jsonRoot), ParameterType.RequestBody); IRestResponse responsePost = client.Execute(requestPost); var contentPost = responsePost.Content; if (!contentPost.Contains("成功")) { LogService.Write("税率同步异常,POST方式获取结果," + billObj["Id"] + "," + responsePost.ErrorMessage); LogService.Write("税率同步异常,POST," + "Gy_TaxRate/SaveGy_TaxRateListApi"); LogService.Write("税率同步异常,JsonConvert.SerializeObject(_jsonRoot)," + JsonConvert.SerializeObject(_jsonRoot)); } }; foreach (var item in dictionary) { ResultMessage.dataError(this.OperationResult.OperateResult, item.Key, item.Value); } } public static class ResultMessage {/// /// 修改提示信息 /// /// /// 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; } } } }