chenhaozhe
2025-10-20 c21409a7b5e4dfe355e01fe0e1748766d3032ce9
Merge branch 'master' of http://101.37.171.70:10101/r/simoer_jiekou

# Conflicts:
# zymes/zymes_Project.csproj
5个文件已添加
1个文件已修改
885 ■■■■■ 已修改文件
zymes/OperationService/zymes_RealessEntrustOrderBill.cs 217 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zymes/OperationService/zymes_RealessProperty.cs 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zymes/OperationService/zymes_RealessSeOutStockBack.cs 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zymes/OperationService/zymes_RealessSellOut.cs 163 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zymes/OperationService/zymes_RealessWW_PPBomBill.cs 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zymes/zymes_Project.csproj 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zymes/OperationService/zymes_RealessEntrustOrderBill.cs
New file
@@ -0,0 +1,217 @@
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_RealessEntrustOrderBill : 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)
        {
            base.OnPreparePropertys(e);
            e.FieldKeys.Add("FEntity");
            e.FieldKeys.Add("FEntity_FEntryID");
            e.FieldKeys.Add("OrderEntity");
            e.FieldKeys.Add("OrderEntity_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;
                LogService.Write("开始同步");
                var id = billObj["Id"].ToString();
                LogService.Write($"id为{id}");
                string sql = string.Empty;
                sql = $@"
                /*dialect*/
                select a.FID HInterID,a.FENTRYID HEntryID,a.FMATERIALID HMaterID,isnull(a.FUnitID,0) HUnitID,a.FQTY HQty
                ,0 HPrice,0 HTaxPrice,0 HDiscountRate,0 HRelTaxPrice
                ,0 HMoney,0 HTaxRate,0 HTaxMoney,0 HLineTotal,0 HlineTotalBB,getdate() HDate,0 HInStockQty, 0 HInvoiceQty
                ,isnull(aa.FSALEORDERNO,'') HSeOrderBillNo,isnull(aa.FSALEORDERID,0) HSeOrderInterID,isnull(aa.FSALEORDERENTRYID,0) HSeOrderEntryID
                ,isnull(aa.FSRCBILLID,0) HSourceInterID,isnull(aa.FSRCBILLENTRYID,0) HSourceEntryID,isnull(aa.FSRCBILLNO,'') HSourceBillNo,'' HSourceBillType
                ,0 HRelationQty,'' HBatChNo,isnull(a.FAUXPROPID,0) HAuxPropID,isnull(a.FMTONo,'') HMTONo,'' HPlanMode,'CLOUD导入' HRemark
                ,a.FID HERPInterID,a.FEntryID HERPEntryID,isnull(a.FBOMID,0) HBomID,isnull(a.FSTOCKID,0) HWhID,0 HSPID
                ,isnull(aa.FPURORDERNO,'') HPOORderBillNo,isnull(aa.FPURORDERENTRYSEQ,0) HPOOrderSEQ
                from T_SUB_REQORDERENTRY a with(nolock)
                inner join T_SUB_REQORDERENTRY_A aa with(nolock) on a.FID=aa.FID and a.FENTRYID=aa.FENTRYID
                where a.FID={id}
                   select a.FID HInterID,year(a.FDate) HYear,month(a.FDate) HPeriod,'1601' HBillType,'1601' HBillSubType,a.FDate HDate
                ,a.FBillNo HBillNo ,case when isnull(a.FAPPROVERID,0)=0 then 1 else 2 end HBillStatus
                ,'' HAddress,0 HSSID,a.FDATE HSSDate,0 HSupID,0 HCurID
                ,0 HExRate,0 HEmpID,0 HManagerID,0 HDeptID,'' HExplanation,'CLOUD导入' HRemark,a.FBillNo HInnerBillNo
                ,isnull(us1.FNAME,'') HMaker,a.FCREATEDATE HMakeDate,isnull(us2.FNAME,'') HChecker,a.FAPPROVEDATE HCheckDate
                ,isnull(us3.FNAME,'') HUpDater,a.FMODIFYDATE HUpDateDate,isnull(us4.FNAME,'') HDeleteMan,a.FCANCELDATE HDeleteDate
                ,a.FID HERPInterID,isnull(a.FBILLTYPE,'') HERPBillType,isnull(a.FSUBORGID,0) HSUBORGID,oo.FNUMBER
                from T_SUB_REQORDER a with(nolock)
                left join T_SEC_user us1 with(nolock) on a.FCREATORID=us1.FUSERID
                left join T_SEC_user us2 with(nolock) on a.FAPPROVERID=us2.FUSERID
                left join T_SEC_user us3 with(nolock) on a.FMODIFIERID=us3.FUSERID
                left join T_SEC_user us4 with(nolock) on a.FCANCELER=us4.FUSERID
                left join  T_ORG_Organizations oo on oo.FORGID=a.FSUBORGID
                where a.FID={id}
                select a.FID HInterID,a.FEntryID,a.FMATERIALID,a.FUnitID,a.FNEEDQTY,a.FNEEDQTY,isnull(C.FStockID,0),isnull(pl.FMEMO,'')
                ,a.FSUBREQID HSourceInterID,a.FSUBREQENTRYID HSourceEntryID,isnull(a.FSUBREQBILLNO,'') HSourceBillNo,'' HSourceBillType
                ,0 HICMOInterID,0 HICMOEntryID,'' HICMOBillNo
                ,isnull(C.FCHILDSUPPLYORGID,0),isnull(C.FSUPPLYORG,0),isnull(C.FGROUPBYOWNERID,0),isnull(C.FSRCTRANSORGID,0),isnull(C.FGROUPBYOWNERID,0),isnull(C.FOWNERID,0),isnull(C.FOWNERTYPEID,'')
                ,q.FSELPICKEDQTY-q.FSELPRCDRETURNQTY,q.FSELTRANSLATEQTY,isnull(a.FAUXPROPID,0),isnull(C.FLOT_TEXT,''),isnull(a.FMTONo,''),0,a.FID,a.FEntryID
                ,q.FSELPICKEDQTY-q.FSELPRCDRETURNQTY
                ,isnull(a.FPROCESSID,0),isnull(a.FBASEUNITID,0),isnull(a.FPROJECTNO,''),isnull(a.FOPERID,0),isnull(a.FSEQ,0)
                ,isnull(c.FSTOCKSTATUSID,0),isnull(c.FRESERVETYPE,'')
                from T_SUB_PPBOMEntry a with(nolock)
                inner join T_SUB_PPBOMENTRY_C C with(nolock) on A.FENTRYID=C.FENTRYID
                inner join  T_SUB_PPBOMENTRY_Q Q with(nolock) on A.FENTRYID=Q.FENTRYID
                left join  T_SUB_PPBOMENTRY_L pl with(nolock) on pl.FENTRYID=a.FENTRYID and pl.FLOCALEID=2052
                left join T_SUB_PPBOMENTRY_LK l with(nolock) on a.FENTRYID=l.FENTRYID
                where a.FID={id}
                select a.FID HInterID,year(a.FCREATEDate),month(a.FCREATEDate),'1604','1604',a.FCREATEDate
                ,a.FbillNo,case when isnull(a.FAPPROVERID,0)=0 then 1 else 2 end HBillStatus,a.FSUBREQID,a.FSUBREQENTRYID,isnull(a.FSUBBILLNO,''),a.FSUBREQENTRYSEQ
                ,a.FMATERIALID,a.FUNITID,a.FQTY,isnull(a.FSUPPLIERID,0),0 HDEPTID
                ,isnull(us1.FNAME,''),a.FCREATEDATE,isnull(us2.FNAME,''),a.FAPPROVEDATE,isnull(us3.FNAME,''),a.FMODIFYDATE
                ,isnull(a.FSALEORDERNO,''),isnull(a.FSALEORDERID,0),isnull(a.FSALEORDERENTRYID,0),isnull(a.FSALEORDERENTRYSEQ,0)
                ,a.FSUBORGID,a.FSUBORGID,isnull(a.FPARENTOWNERID,0),isnull(a.FPARENTOWNERTYPEID,'')
                ,a.FID,'WWPPBOM' HERPBillType,isnull(a.FSETTLEORGID,0),isnull(a.FREQSRC,'')
                from  T_SUB_PPBOM a with(nolock)
                left join  T_SEC_user us1 with(nolock) on a.FCREATORID=us1.FUSERID
                left join  T_SEC_user us2 with(nolock) on a.FAPPROVERID=us2.FUSERID
                left join  T_SEC_user us3 with(nolock) on a.FMODIFIERID=us3.FUSERID
                where a.FID={id}
";
                DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
                DataTable maindt = ds.Tables[1];
                DataTable subdt = ds.Tables[0];
                DataTable mainOrder = ds.Tables[3];//用料清单主表
                DataTable mainOrdersub = ds.Tables[2];//用料清单子表
                if (maindt.Rows.Count == 0 || subdt.Rows.Count == 0 || mainOrder.Rows.Count == 0 )
                {
                    LogService.Write("委外订单同步异常:" + sql);
                    LogService.Write($"委外主表{maindt.Rows.Count},委外子表{subdt.Rows.Count},用料主{mainOrder.Rows.Count},用料子{mainOrdersub.Rows.Count}" );
                    continue;
                }
                LogService.Write($"委外主表{maindt.Rows.Count},委外子表{subdt.Rows.Count},用料主{mainOrder.Rows.Count},用料子{mainOrdersub.Rows.Count}");
                //获取创建委外订单的使用组织
                DataTable dataTable = LogService.Get_DisPlayOrg(Context, maindt.Rows[0]["FNUMBER"].ToString());
                if (dataTable.Rows.Count == 0)
                    continue;
                if (dataTable.Rows[0]["FISNEEDPUSH"].ToString() == "0")
                    continue;
                string http = dataTable.Rows[0]["F_RCZU_MesIp"].ToString();
                JArray array = new JArray();//明细表
                foreach (DataRow dr in subdt.Rows)
                {
                    JObject fentrymodel = new JObject();
                    foreach (DataColumn column in subdt.Columns)
                    {
                        fentrymodel.Add(column.ColumnName, dr[column.ColumnName].ToString());
                    }
                    array.Add(fentrymodel);
                }
                JObject model = new JObject();//主表
                DataRow maindr = maindt.Rows[0];
                foreach (DataColumn column in maindt.Columns)
                {
                    model.Add(column.ColumnName, maindr[column.ColumnName].ToString());
                }
                model.Add("HENTRY", array);
                JArray ppbomArray = new JArray();
                foreach (DataRow dr in mainOrdersub.Rows)
                {
                    JObject fentrymodel = new JObject();
                    foreach (DataColumn column in mainOrdersub.Columns)
                    {
                        fentrymodel.Add(column.ColumnName, dr[column.ColumnName].ToString());
                    }
                    ppbomArray.Add(fentrymodel);
                }
                // 构建用料清单主表
                JObject ppbomModel = new JObject();
                DataRow ppbomMainDr = mainOrder.Rows[0];
                foreach (DataColumn column in mainOrder.Columns)
                {
                    ppbomModel.Add(column.ColumnName, ppbomMainDr[column.ColumnName].ToString());
                }
                ppbomModel.Add("HENTRY", ppbomArray);
                JObject jsonRoot = new JObject()
                {
                    ["model"] = model,
                    ["ppbomModel"] = ppbomModel
                };
                LogService.Write("发送的JSON数据: " + JsonConvert.SerializeObject(jsonRoot));
                // 构建用料清单明细表
                var client = new RestSharp.RestClient(http);
                //新增
                var requestPost = new RestRequest("WW_EntrustOrderBill/SaveWW_EntrustOrderBillListApi", 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," +   "Cg_POOrderBill/Cg_POOrderBillSaveApi");
                    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
        {/// <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;
            }
        }
    }
}
zymes/OperationService/zymes_RealessProperty.cs
New file
@@ -0,0 +1,146 @@
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_RealessProperty : 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)
        {
            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");//获取明细信息
            LogService.Write("进入辅助属性保存方法");
            //todo 金蝶表中没有组织字段,唯一的组织字段在T_BAS_ASSISTANTDATAENTRY中,然后不匹配,现在暂时定的100038来获取API的路径地址
            //子表插入
            foreach (var billObj in e.DataEntitys)
            {
                var forgName = Context.CurrentOrganizationInfo.Name;
                var id = billObj["Id"].ToString();
                string sql = string.Empty;
                LogService.Write($"id为{id}");
                sql = $@"
                select DISTINCT f.FID as HItemID,a.FNUMBER as HNumber,a.FNUMBER HShortNumber,b.FDATAVALUE as HName,0 as HParentID
                ,1 as HLevel,1 as HEndFlag,case when a.FFORBIDSTATUS='A' then 0 else 1 end HStopflag,'CLD-ERP导入' as HRemark,'已使用' HUseFlag,getdate() as HMakeTime,100038 as HUSEORGID,100038 HCREATEORGID,0 HPropertyTypeID,'' as  HHelpCode,f.FID HERPItemID,oo.FORGFORMID
                from T_BD_FLEXAUXPROPERTY p with(nolock)
                inner join T_BAS_ASSISTANTDATAENTRY a with(nolock) on p.FVALUESOURCE=a.FID
                inner join T_BAS_ASSISTANTDATAENTRY_L b with(nolock) on a.FENTRYID=b.FENTRYID
                inner join (select distinct min(FID) FID,FF100002 from T_BD_FLEXSITEMDETAILV with(nolock) group by FF100002) as f on a.FENTRYID=f.FF100002
                left join  T_ORG_Organizations oo on oo.FORGID='100038'
                left JOIN T_BD_FLEXAUXPROPERTYENTITY tb on tb.FID=f.FID
                where b.FLOCALEID=2052
                and a.FFORBIDSTATUS='A'  and tb.FENTRYID={id}
                select DISTINCT b.FENTRYID HItemID ,b.FENTRYID HERPItemID, f.FID HAuxpuID,a.FMATERIALID HMaterID,b.FISDEFAULT HISDefault,b.FISDISABLE HStopflag,b.FDISPLAYSEQ HSno
                from T_BD_AUXPTYVALUE a with(nolock)
                inner join T_BD_AUXPTYVALUEENTITY b with(nolock) on a.FAUXPTYVALUEID=b.FAUXPTYVALUEID
                inner join T_BD_FLEXSITEMDETAILV f with(nolock) on b.FAUXPTYID=f.FF100002
                left JOIN T_BD_FLEXAUXPROPERTYENTITY tb on tb.FID=f.FID
                where  tb.FENTRYID={id}
                ";
                //                Where f.FID = {id}                Where f.FID = {id}
                DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
                DataTable dtDetail = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[1];
                if (dt.Rows.Count == 0)
                {
                    LogService.Write("辅助属性同步异常:" + sql);
                    continue;
                }
                //获取辅助属性的使用组织
                //DataTable dataTable = LogService.Get_DisPlayOrg(Context, dt.Rows[0]["FORGFORMID"].ToString());
                DataTable dataTable = LogService.Get_DisPlayOrg(Context, "101.2");
                if (dataTable.Rows.Count == 0)
                    continue;
                if (dataTable.Rows[0]["FISNEEDPUSH"].ToString() == "0")
                    continue;
                if (dataTable.Rows.Count == 0 || dataTable.Rows[0]["F_RCZU_MesIp"] == null || string.IsNullOrEmpty(dataTable.Rows[0]["F_RCZU_MesIp"].ToString()))
                {
                    LogService.Write("MES IP地址配置为空或不存在");
                    continue;
                }
                string http = dataTable.Rows[0]["F_RCZU_MesIp"].ToString();
                LogService.Write($"MES IP地址配置: {http}");
                LogService.Write("组织过滤已过");
                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
                };
                var client = new RestSharp.RestClient(http);
                LogService.Write("进入api");
                var requestPost = new RestRequest("Gy_Property/SaveGy_PropertyListApi", 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_Property/SaveGy_PropertyListApi");
                    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
        {/// <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;
            }
        }
    }
}
zymes/OperationService/zymes_RealessSeOutStockBack.cs
New file
@@ -0,0 +1,187 @@
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_RealessSeOutStockBack : 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)
        {
            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 id = billObj["Id"].ToString();
                LogService.Write("退货通知单同步id:" + id);
                string sql = string.Empty;
                sql = $@"
                /*dialect*/
                select
                    a.FID as HInterID,year(a.FDate) as HYear,month(a.FDate) as HPeriod,
                    '1403' as HBillType,'1403' as HBillSubType,a.FDate as HDate,a.FbillNo as HBillNo,
                    case when isnull(a.FAPPROVERID,0)=0 then 1 else 2 end as HBillStatus,
                    a.FRETCUSTID as HCusID,a.FSTOCKERID as HManagerID,
                    isnull(a.FSALEDEPTID,0) as HDeptID,'CLD导入' as HRemark,
                    a.FRECEIVEADDRESS as HAddress,0 as HSSID,0 as HCurID,0 as HWHID,1 as HExRate,
                    a.FSALESMANID as HEmpID,'' as HExplanation,'' as HInnerBillNo,a.FSALEORGID as HSALEORGID,
                    a.FRETORGID as HDELIVERYORGID,isnull(a.FOWNERID,0) as HOWNERID,isnull(a.FOWNERTYPEID,'') as HOWNERTYPEID,
                    isnull(us1.FNAME,'') as HMaker,a.FCREATEDATE as HMakeDate,
                    isnull(us2.FNAME,'') as HChecker,a.FAPPROVEDATE as HCheckDate,
                    isnull(us3.FNAME,'') as HUpDater,a.FMODIFYDATE as HUpDateDate,
                    isnull(us4.FNAME,'') as HDeleteMan,a.FCANCELDATE as HDeleteDate,
                    a.FID as HERPInterID,a.FBILLTYPEID as HERPBillType,a.FSETTLECUSID as HSETTLECUSID,
                    a.FPAYCUSID as HPAYCUSID,a.FRECEIVECUSID as HRECEIVECUSID,a.FSALEGROUPID as HSALEGROUPID,
                    a.FHEADLOCID as HHEADLOCID,a.FRECCONTACTID as HRECCONTACTID,a.FRETURNREASON as HRETURNREASON,
                    a.FRETDEPTID as HRETDEPTID,a.FDESCRIPTION as HDESCRIPTION,a.FBUSINESSTYPE as HBUSINESSTYPE,o.FNUMBER HOrganNumber
                from T_SAL_RETURNNOTICE a with(nolock)
                 left join T_ORG_Organizations  o with (nolock) on a.FSALEORGID = o.FORGID
                left join T_SEC_user us1 with(nolock) on a.FCREATORID=us1.FUSERID
                left join T_SEC_user us2 with(nolock) on a.FAPPROVERID=us2.FUSERID
                left join T_SEC_user us3 with(nolock) on a.FMODIFIERID=us3.FUSERID
                left join T_SEC_user us4 with(nolock) on a.FCANCELLERID=us4.FUSERID
                where a.FID={id}
                select
                    a.FID as HInterID,a.FEntryID as HEntryID,a.FMATERIALID as HMaterID,a.FUnitID as HUnitID,
                    a.FQty as HQty,isnull(f.FPRICE,0) as HPrice,0 as HMoney,0 as HTaxMoney,
                    isnull(f.FTAXPRICE,0) as HTaxPrice,isnull(a.FSTOCKID,0) as HWHID,'CLOUD导入' as HRemark,
                    isnull(L.FSBILLID,0) as HSourceInterID,isnull(L.FSID,0) as HSourceEntryID,isnull(a.FSRCBILLNO,'') as HSourceBillNo,
                    a.FSRCTYPE as HSourceBillType,0 as HSeOrderInterID,a.FSOENTRYID as HSeOrderEntryID,a.FORDERNO as HSeORderBillNo,
                    a.FOWNERID as HOWNERID,a.FOWNERTYPEID as HOWNERTYPEID,isnull(fin.FSETTLEORGID,0) as HSETTLEORGID,
                    a.FJOINRETQTY as HRelationQty,a.FAUXPROPID as HAuxPropID,a.FLot_TEXT as HBatchNO,isnull(a.FMTONo,'') as HMTONo,
                    a.FID as HERPInterID,a.FEntryID as HERPEntryID,a.FSOBILLTYPEID as HSOBILLTYPEID,a.FRMTYPE as HRMTYPE,
                    a.FSTOCKUNITID as HSTOCKUNITID,a.FBASEUNITID as HBASEUNITID,a.FDELIVERYDATE as HDELIVERYDATE,
                    a.FDESCRIPTION as HDESCRIPTION,isnull(a.FMAPID,'') as HMAPID,e.FPARENTMATID as HPARENTMATID,
                    case when e.FISRETURNCHECK is null then 'false'when e.FISRETURNCHECK = 1 then 'true' else 'false' end as HISRETURNCHECK,e.FROWTYPE as HROWTYPE,e.FROWID as HROWID,e.FPARENTROWID as HPARENTROWID,
                    isnull(f.FTAXCOMBINATION,0) as HTAXCOMBINATION,isnull(f.FPRICEUNITID,0) as HPRICEUNITID,
                    isnull(f.FTaxRate,0) as HTaxRate,isnull(f.FPRICECOEFFICIENT,0) as HPRICECOEFFICIENT,
                    isnull(f.FSYSPRICE,0) as HSYSPRICE,isnull(f.FLIMITDOWNPRICE,0) as HLIMITDOWNPRICE,
                    isnull(f.FDISCOUNTRATE,0) as HDISCOUNTRATE,case when f.FISFREE is null then 'false'when f.FISFREE = 1 then 'true' else 'false' end as HISFREE,
                    isnull(fin.FSETTLETYPEID,0) as HSETTLETYPEID,isnull(fin.FCHAGECONDITION,0) as HCHAGECONDITION,
                    isnull(fin.FSETTLECURRID,0) as HSETTLECURRID,isnull(fin.FLOCALCURRID,0) as HLOCALCURRID,
                    isnull(fin.FEXCHANGETYPEID,0) as HEXCHANGETYPEID,case when fin.FISINCLUDEDTAX is null then 'false'when fin.FISINCLUDEDTAX = 1 then 'true' else 'false' end as HISINCLUDEDTAX,
                   case when fin.FISPRICEEXCLUDETAX is null then 'false'when fin.FISPRICEEXCLUDETAX = 1 then 'true' else 'false' end as HISPRICEEXCLUDETAX,isnull(tax.FTAXRATEID,0) as HTAXRATEID,
                    isnull(tax.FTAXRATE,0) as HTaxRate_TAX,isnull(tax.FTAXAMOUNT,0) as HTAXAMOUNT_TAX,
                    isnull(tax.FCOSTPERCENT,0) as HCOSTPERCENT,isnull(tax.FCOSTAMOUNT,0) as HCOSTAMOUNT,
                    case when tax.FVAT is null then 'false'when tax.FVAT = 1 then 'true' else 'false' end as HVAT,
                    case when tax.FSELLERWITHHOLDING is null then 'false'when tax.FSELLERWITHHOLDING = 1 then 'true' else 'false' end as HSELLERWITHHOLDING,
                    case when tax.FBUYERWITHHOLDING is null then 'false'when tax.FBUYERWITHHOLDING = 1 then 'true' else 'false' end as HBUYERWITHHOLDING,a.FEXPUNIT as HEXPUNIT,
                    a.FEXPPERIOD as HEXPPERIOD,isnull(a.FPRODUCEDATE,'1900-01-01 00:00:00.000') as HProduceDate,isnull(a.FEXPIRYDATE,'1900-01-01 00:00:00.000') as HExpiryDate
                from T_SAL_RETURNNOTICEENTRY a with(nolock)
                inner join T_SAL_RETURNNOTICEENTRY_E e with(nolock) on a.FENTRYID=e.FENTRYID
                left join T_SAL_RETURNNOTICEENTRY_F f with(nolock) on a.FID=f.FID and a.FENTRYID=f.FENTRYID
                left join T_SAL_RETURNNOTICEENTRY_LK L with(nolock) on a.FENTRYID=L.FENTRYID
                left join T_SAL_RETURNNOTICEFIN fin with(nolock) on a.FENTRYID=fin.FENTRYID
                left join T_SAL_RETURNNOTICEENTRYTAX tax with(nolock) on a.FID=tax.FDETAILID and a.FENTRYID=tax.FENTRYID
                where a.FID={id}
                    ";
                LogService.Write("退货通知单:" +  sql);
                DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
                DataTable maindt = ds.Tables[0];
                DataTable subdt = ds.Tables[1];
                if (maindt.Rows.Count == 0 || subdt.Rows.Count == 0)
                {
                    LogService.Write("退货通知单同步异常:" + sql);
                    continue;
                }
                //获取创建销售订单的使用组织
                DataTable dataTable = LogService.Get_DisPlayOrg(Context, maindt.Rows[0]["HOrganNumber"].ToString());
                if (dataTable.Rows.Count == 0)
                    continue;
                if (dataTable.Rows[0]["FISNEEDPUSH"].ToString() == "0")
                    continue;
                string http = dataTable.Rows[0]["F_RCZU_MesIp"].ToString();
                JArray array = new JArray();//明细表
                foreach (DataRow dr in subdt.Rows)
                {
                    JObject fentrymodel = new JObject();
                    foreach (DataColumn column in subdt.Columns)
                    {
                        fentrymodel.Add(column.ColumnName, dr[column.ColumnName].ToString());
                    }
                    array.Add(fentrymodel);
                }
                JObject model = new JObject();//主表
                DataRow maindr = maindt.Rows[0];
                foreach (DataColumn column in maindt.Columns)
                {
                    model.Add(column.ColumnName, maindr[column.ColumnName].ToString());
                }
                model.Add("HENTRY", array);
                JObject jsonRoot = new JObject()
                {
                    ["model"] = model
                };
                LogService.Write("退货通知单同步数据:" + model);
                var client = new RestSharp.RestClient(http);
                //新增
                var requestPost = new RestRequest("Xs_SeOutStockBackBill/SaveXs_SeOutStockBackBillApi", 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," + "Xs_SeOutStockBackBill/SaveXs_SeOutStockBackBillApi");
                    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
        {/// <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;
            }
        }
    }
}
zymes/OperationService/zymes_RealessSellOut.cs
New file
@@ -0,0 +1,163 @@
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_RealessSellOut : 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)
        {
            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 id = billObj["Id"].ToString();
                LogService.Write("销售出库单同步id:" + id);
                string sql = string.Empty;
                sql = $@"
                /*dialect*/
                select a.FID as HInterID,year(a.FDATE) as HYear,month(a.FDATE) as HPeriod,a.FBILLNO as HBillNo,'1205' as HBillType,
                    '1205' as HBillSubType,'' as HMainSourceBillType,a.FDATE as HDate,a.FCustomerID as HSupID,0 as HWHID,
                    0 as HSCWHID,0 as HEmpID,0 as HManagerID,0 as HSecManagerID,isnull(a.FSTOCKERID, 0) as HKeeperID,
                    isnull(a.FDeliveryDeptID, 0) as HDeptID,0 as HCurID,'' as HSeOrderBillNo,'CLD导入' as HExplanation,'' as HRemark,
                    '' as HInnerBillNo,'false' as HRedBlueFlag,case when a.FAPPROVERID = 0 then 1 else 2 end as HBillStatus,
                    isnull(us1.FNAME, '') as HMaker,a.FCREATEDATE as HMakeDate,isnull(us2.FNAME, '') as HChecker,
                    a.FAPPROVEDATE as HCheckDate,isnull(us3.FNAME, '') as HUpDater,a.FMODIFYDATE as HUpDateDate,
                    isnull(us4.FNAME, '') as HDeleteMan,a.FCANCELDATE as HDeleteDate,isnull(a.FOWNERID, 0) as HOWNERID,
                    a.FOWNERTYPEID as HOWNERTYPEID,a.FID as HERPInterID,a.FBillTypeID as HERPBillType,a.FBILLNO as HERPBillNo,
                    isnull(FSALEORGID, 0) as HPRDORGID,isnull(a.FSTOCKORGID, 0) as HSTOCKORGID,o.FNUMBER HOrganNumber
                from T_SAL_OUTSTOCK a with(nolock)
                left join T_ORG_Organizations  o with (nolock) on a.FSALEORGID = o.FORGID
                left join T_SEC_user us1 with(nolock) on a.FCREATORID = us1.FUSERID
                left join T_SEC_user us2 with(nolock) on a.FAPPROVERID = us2.FUSERID
                left join T_SEC_user us3 with(nolock) on a.FMODIFIERID = us3.FUSERID
                left join T_SEC_user us4 with(nolock) on a.FCANCELLERID = us4.FUSERID
                where a.FID ={id}
                select
                    a.FID as HInterID,a.FEntryID as HEntryID,a.FMTONO as HMTONo,0 as HPlanMode,'' as HRemark,'' as HExpressNumber,
                    a.FMATERIALID as HMaterID,isnull(a.FUNITID, 0) as HUnitID,a.FLOT_TEXT as HBatchNo,isnull(a.FAUXPROPID, 0) as HPropertyID,
                    isnull(a.FSTOCKID, 0) as HWHID,isnull(a.FSTOCKLOCID, 0) as HSPID,0 as HSCWHID,0 as HSCSPID,
                    a.FMustQty as HQtyMust,a.FRealQty as HQty,b.FPRICE as HPrice,b.FAMOUNT as HMoney,b.FPRICE as HTaxPrice,1 as HTaxRate,
                    b.FAMOUNT as HTaxMoney,c.FReturnQty as HRelationQty,0 as HRelationMoney,0 as HSourceInterID,0 as HSourceEntryID,
                    isnull(c.FSrcBillNo, '') as HSourceBillNo,'' as HSourceBillType,a.FID as HERPInterID,a.FEntryID as HERPEntryID,
                    '' as HERPBillNo_Sub,0 as HPOOrderInterID,0 as HPOOrderEntryID,'' as HPOOrderBillNo,0 as HSeOrderInterID,
                    isnull(c.FSOEntryId, 0) as HSeOrderEntryID,'' as HSeOrderBillNo,0 as HICMOInterID,0 as HICMOEntryID,'' as HICMOBillNo,
                    0 as HWWOrderInterID,0 as HWWOrderEntryID,'' as HWWOrderBillNo,isnull(a.FPRODUCEDATE,'1900-01-01 00:00:00.000') as HProduceDate,
                    isnull(a.FEXPIRYDATE,'1900-01-01 00:00:00.000') as HExpiryDate,isnull(a.FOWNERID, 0) as HOWNERID,isnull(a.FOWNERTYPEID, '') as HOWNERTYPEID,
                    isnull(a.FKEEPERID, 0) as HKEEPERID,isnull(a.FKEEPERTYPEID, '') as HKEEPERTYPEID
                from T_SAL_OUTSTOCKENTRY a with(nolock)
                left join T_SAL_OUTSTOCKENTRY_F b with(nolock) on a.FID = b.FID and a.FENTRYID = b.FENTRYID
                left join T_SAL_OUTSTOCKENTRY_R c with(nolock) on a.FID = c.FID and a.FENTRYID = c.FENTRYID
                where a.FID = {id}
                    ";
                LogService.Write("销售出库单:" +  sql);
                DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
                DataTable maindt = ds.Tables[0];
                DataTable subdt = ds.Tables[1];
                if (maindt.Rows.Count == 0 || subdt.Rows.Count == 0)
                {
                    LogService.Write("销售出库单同步异常:" + sql);
                    continue;
                }
                //获取创建销售订单的使用组织
                DataTable dataTable = LogService.Get_DisPlayOrg(Context, maindt.Rows[0]["HOrganNumber"].ToString());
                if (dataTable.Rows.Count == 0)
                    continue;
                if (dataTable.Rows[0]["FISNEEDPUSH"].ToString() == "0")
                    continue;
                string http = dataTable.Rows[0]["F_RCZU_MesIp"].ToString();
                JArray array = new JArray();//明细表
                foreach (DataRow dr in subdt.Rows)
                {
                    JObject fentrymodel = new JObject();
                    foreach (DataColumn column in subdt.Columns)
                    {
                        fentrymodel.Add(column.ColumnName, dr[column.ColumnName].ToString());
                    }
                    array.Add(fentrymodel);
                }
                JObject model = new JObject();//主表
                DataRow maindr = maindt.Rows[0];
                foreach (DataColumn column in maindt.Columns)
                {
                    model.Add(column.ColumnName, maindr[column.ColumnName].ToString());
                }
                model.Add("HENTRY", array);
                JObject jsonRoot = new JObject()
                {
                    ["model"] = model
                };
                LogService.Write("销售出库单同步数据:" + model);
                var client = new RestSharp.RestClient(http);
                //新增
                var requestPost = new RestRequest("Kf_SellOutBill/SaveKf_SellOutBillApi", 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," + "Kf_SellOutBill/SaveKf_SellOutBillApi");
                    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
        {/// <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;
            }
        }
    }
}
zymes/OperationService/zymes_RealessWW_PPBomBill.cs
New file
@@ -0,0 +1,167 @@
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_RealessWW_PPBomBill : 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)
        {
            base.OnPreparePropertys(e);
            e.FieldKeys.Add("FEntity");
            e.FieldKeys.Add("FEntity_FEntryID");
            e.FieldKeys.Add("OrderEntity");
            e.FieldKeys.Add("OrderEntity_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;
                LogService.Write("开始同步");
                var id = billObj["Id"].ToString();
                LogService.Write($"id为{id}");
                string sql = string.Empty;
                sql = $@"
                /*dialect*/
                select a.FID HInterID,a.FEntryID,a.FMATERIALID,a.FUnitID,a.FNEEDQTY,a.FNEEDQTY,isnull(C.FStockID,0),isnull(pl.FMEMO,'')
                ,a.FSUBREQID HSourceInterID,a.FSUBREQENTRYID HSourceEntryID,isnull(a.FSUBREQBILLNO,'') HSourceBillNo,'' HSourceBillType
                ,0 HICMOInterID,0 HICMOEntryID,'' HICMOBillNo
                ,isnull(C.FCHILDSUPPLYORGID,0),isnull(C.FSUPPLYORG,0),isnull(C.FGROUPBYOWNERID,0),isnull(C.FSRCTRANSORGID,0),isnull(C.FGROUPBYOWNERID,0),isnull(C.FOWNERID,0),isnull(C.FOWNERTYPEID,'')
                ,q.FSELPICKEDQTY-q.FSELPRCDRETURNQTY,q.FSELTRANSLATEQTY,isnull(a.FAUXPROPID,0),isnull(C.FLOT_TEXT,''),isnull(a.FMTONo,''),0,a.FID,a.FEntryID
                ,q.FSELPICKEDQTY-q.FSELPRCDRETURNQTY
                ,isnull(a.FPROCESSID,0),isnull(a.FBASEUNITID,0),isnull(a.FPROJECTNO,''),isnull(a.FOPERID,0),isnull(a.FSEQ,0)
                ,isnull(c.FSTOCKSTATUSID,0),isnull(c.FRESERVETYPE,'')
                from T_SUB_PPBOMEntry a with(nolock)
                inner join T_SUB_PPBOMENTRY_C C with(nolock) on A.FENTRYID=C.FENTRYID
                inner join  T_SUB_PPBOMENTRY_Q Q with(nolock) on A.FENTRYID=Q.FENTRYID
                left join  T_SUB_PPBOMENTRY_L pl with(nolock) on pl.FENTRYID=a.FENTRYID and pl.FLOCALEID=2052
                left join T_SUB_PPBOMENTRY_LK l with(nolock) on a.FENTRYID=l.FENTRYID
                where a.FID={id}
                select a.FID HInterID,year(a.FCREATEDate),month(a.FCREATEDate),'1604','1604',a.FCREATEDate
                ,a.FbillNo,case when isnull(a.FAPPROVERID,0)=0 then 1 else 2 end HBillStatus,a.FSUBREQID,a.FSUBREQENTRYID,isnull(a.FSUBBILLNO,''),a.FSUBREQENTRYSEQ
                ,a.FMATERIALID,a.FUNITID,a.FQTY,isnull(a.FSUPPLIERID,0),0 HDEPTID
                ,isnull(us1.FNAME,''),a.FCREATEDATE,isnull(us2.FNAME,''),a.FAPPROVEDATE,isnull(us3.FNAME,''),a.FMODIFYDATE
                ,isnull(a.FSALEORDERNO,''),isnull(a.FSALEORDERID,0),isnull(a.FSALEORDERENTRYID,0),isnull(a.FSALEORDERENTRYSEQ,0)
                ,a.FSUBORGID,a.FSUBORGID,isnull(a.FPARENTOWNERID,0),isnull(a.FPARENTOWNERTYPEID,'')
                ,a.FID,'WWPPBOM' HERPBillType,isnull(a.FSETTLEORGID,0),isnull(a.FREQSRC,'')
                from  T_SUB_PPBOM a with(nolock)
                left join  T_SEC_user us1 with(nolock) on a.FCREATORID=us1.FUSERID
                left join  T_SEC_user us2 with(nolock) on a.FAPPROVERID=us2.FUSERID
                left join  T_SEC_user us3 with(nolock) on a.FMODIFIERID=us3.FUSERID
                left join  T_ORG_Organizations oo on oo.FORGID=a.FSUBORGID
                where a.FID={id}
                select oo.FNUMBER from T_SUB_PPBOM a left join  T_ORG_Organizations oo on oo.FORGID=a.FSUBORGID where a.FID={id}
";
                DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
                DataTable maindt = ds.Tables[1];
                DataTable subdt = ds.Tables[0];
                DataTable ORgdt = ds.Tables[2];
                if (maindt.Rows.Count == 0 || subdt.Rows.Count == 0  )
                {
                    LogService.Write("委外用料清单同步异常:" + sql);
                    continue;
                }
                //获取创建委外用料清单的使用组织
                DataTable dataTable = LogService.Get_DisPlayOrg(Context, ORgdt.Rows[0]["FNUMBER"].ToString());
                if (dataTable.Rows.Count == 0)
                    continue;
                if (dataTable.Rows[0]["FISNEEDPUSH"].ToString() == "0")
                    continue;
                string http = dataTable.Rows[0]["F_RCZU_MesIp"].ToString();
                JArray array = new JArray();//明细表
                foreach (DataRow dr in subdt.Rows)
                {
                    JObject fentrymodel = new JObject();
                    foreach (DataColumn column in subdt.Columns)
                    {
                        fentrymodel.Add(column.ColumnName, dr[column.ColumnName].ToString());
                    }
                    array.Add(fentrymodel);
                }
                JObject model = new JObject();//主表
                DataRow maindr = maindt.Rows[0];
                foreach (DataColumn column in maindt.Columns)
                {
                    model.Add(column.ColumnName, maindr[column.ColumnName].ToString());
                }
                model.Add("HENTRY", array);
                JObject jsonRoot = new JObject()
                {
                    ["model"] = model
                };
                var client = new RestSharp.RestClient(http);
                //新增
                var requestPost = new RestRequest("WW_PPBomBillController/SaveWW_PPBomBillApi", 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," + "WW_PPBomBillController/SaveWW_PPBomBillApi");
                    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
        {/// <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;
            }
        }
    }
}
zymes/zymes_Project.csproj
@@ -133,10 +133,14 @@
    <Compile Include="OperationService\zymes_RealessOperatorGroup.cs" />
    <Compile Include="OperationService\zymes_RealessPurPrice.cs" />
    <Compile Include="OperationService\zymes_RealessOperator.cs" />
    <Compile Include="OperationService\zymes_RealessSeOutStockBack.cs" />
    <Compile Include="OperationService\zymes_RealessSellOut.cs" />
    <Compile Include="OperationService\zymes_RealessUnitConvertRate.cs" />
    <Compile Include="OperationService\zymes_RealessPrdInStock.cs" />
    <Compile Include="OperationService\zymes_RealessPrdReceive.cs" />
    <Compile Include="OperationService\zymes_RealessPurInStock.cs" />
     <Compile Include="OperationService\zymes_RealessWW_PPBomBill.cs" />
    <Compile Include="OperationService\zymes_RealessEntrustOrderBill.cs" />
    <Compile Include="OperationService\zymes_RealessRateType.cs" />
    <Compile Include="OperationService\zymes_RealessDepartment.cs" />
    <Compile Include="OperationService\zymes_RealessBom.cs" />
@@ -154,6 +158,7 @@
    <Compile Include="OperationService\zymes_RealessStock.cs" />
    <Compile Include="OperationService\zymes_RealessCustomer.cs" />
    <Compile Include="OperationService\zymes_RealessPaymentCondition.cs" />
    <Compile Include="OperationService\zymes_RealessProperty.cs" />
    <Compile Include="OperationService\zymes_RealessTaxMIX.cs" />
    <Compile Include="OperationService\zymes_RealessTaxRate.cs" />
    <Compile Include="OperationService\zymes_RealessSupplier.cs" />