王 垚
2021-02-16 211bb749ab809dab4276c66a5d23bb5ea053ba8f
nothing
11个文件已修改
4个文件已添加
1724 ■■■■■ 已修改文件
src/BLL/Demo.BillView/Demo.BillView.csproj 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_DayPlan.cs 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_DayPlanPushSCHB.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_DayPlanPushZJDB.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_DayPlanPushZJDB2.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_MaterialRequisitionAuditDayPlan.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_PPBomSave.cs 266 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_PPBomSubmit.cs 292 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_SCLLSH.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_TlPush.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_TlPushAudit.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatform.cs 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_ZJDBSH.cs 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/SAL_SaleOrderSplitBill.cs 840 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Model/Demo.Model/Model/DayPlanMaterial.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/Demo.BillView.csproj
@@ -46,6 +46,9 @@
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Users\14027\Desktop\最新版bin文件3.16\Kingdee.BOS.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.BOS.App">
      <HintPath>..\..\..\..\..\办公\K3Cloud\WebSite\bin\Kingdee.BOS.App.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.BOS.App.Core, Version=7.6.2003.9, Culture=neutral, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Users\14027\Desktop\最新版bin文件3.16\Kingdee.BOS.App.Core.dll</HintPath>
@@ -219,13 +222,16 @@
    <Compile Include="PRD\ProTardinessDetails.cs" />
    <Compile Include="PRD\ProCompleteAnalysisMateriel.cs" />
    <Compile Include="PRD\ProCompleteAnalysisDetails.cs" />
    <Compile Include="PRD\Pro_DayPlan.cs" />
    <Compile Include="PRD\Pro_DayPlanCheckSelectMenu.cs" />
    <Compile Include="PRD\Pro_DayPlanPushSCHB.cs" />
    <Compile Include="PRD\Pro_PPBomSubmit.cs" />
    <Compile Include="PRD\Pro_SCHBFSH.cs" />
    <Compile Include="PRD\Pro_SCLLFSH.cs" />
    <Compile Include="PRD\Pro_SCHBSH.cs" />
    <Compile Include="PRD\Pro_SCLLSH.cs" />
    <Compile Include="PRD\Pro_RjhylqdDatachange.cs" />
    <Compile Include="PRD\Pro_PPBomSave.cs" />
    <Compile Include="PRD\Pro_WorkBillPlatformXNQT.cs" />
    <Compile Include="PRD\Pro_ShowParameter.cs" />
    <Compile Include="PRD\Pro_ZJDBSH.cs" />
src/BLL/Demo.BillView/PRD/Pro_DayPlan.cs
New file
@@ -0,0 +1,150 @@
using Kingdee.BOS;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo.BillView.PRD
{
    [Description("[日计划工单] 表单插件"), HotUpdate]
    public class Pro_DayPlan : AbstractBillPlugIn
    {
        public override void BarItemClick(BarItemClickEventArgs e)
        {
            base.BarItemClick(e);
            try
            {
                if (e.BarItemKey.ToUpper() == "TBDAYPLANMENU")
                {
                    string pageId = Guid.NewGuid().ToString();
                    ListShowParameter showParameter = new ListShowParameter();
                    showParameter.FormId = "Paez_Sc_WorkBillAutoSortBill";
                    showParameter.PageId = pageId;
                    showParameter.UseOrgId = this.Context.CurrentOrganizationInfo.ID;
                    showParameter.IsLookUp = true;
                    this.View.ShowForm(showParameter);
                    this.View.ShowForm(showParameter, delegate (FormResult result)
                    {
                        object returnData = result.ReturnData;
                        if (returnData is ListSelectedRowCollection)
                        {
                            ListSelectedRowCollection listSelectedRowCollection = returnData as ListSelectedRowCollection;
                            if (listSelectedRowCollection != null)
                            {
                                DynamicObjectDataRow datarow = (DynamicObjectDataRow)listSelectedRowCollection[0].DataRow;
                                this.View.Model.SetValue("FMATERIALID", datarow.DynamicObject["FHMaterID_Id"].ToString());
                                this.View.Model.SetValue("FPROORDERNO", datarow.DynamicObject["FSCOrderNo"].ToString());
                                this.View.Model.SetValue("FQty", datarow.DynamicObject["FHOrderNeedQty"].ToString());
                                this.View.Model.SetValue("FDayPlanFID", datarow.DynamicObject["FID"].ToString());
                                this.View.Model.SetValue("FDayPlanFentryID", datarow.DynamicObject["t1_FENTRYID"].ToString());
                                this.View.Model.SetValue("FSourceBillNo", datarow.DynamicObject["FBillNo"].ToString());
                                this.View.Model.SetValue("FSourceBillType", datarow.DynamicObject["FBillTypeID"].ToString());
                            }
                        }
                    });
                }
            }
            catch (Exception ex)
            {
                this.View.ShowErrMessage(ex.Message.ToString());
            }
        }
        public override void EntryBarItemClick(BarItemClickEventArgs e)
        {
            base.EntryBarItemClick(e);
            if (e.BarItemKey.ToUpper() == "TBROWCLOSE")
            {
                int[] selectedIndexsR = this.View.GetControl<EntryGrid>("FEntity").GetSelectedRows();        //单据体数据    
                Array.Sort(selectedIndexsR);
                DynamicObjectCollection selectedRowsDy = this.Model.DataObject["FEntity"] as DynamicObjectCollection;        //选中行数据   
                DynamicObject selectedRow;
                StringBuilder result = new StringBuilder();
                List<string> sqlList = new List<string>();
                foreach (var item in selectedIndexsR)
                {
                    selectedRow = selectedRowsDy[item];
                    string sql = string.Format(@"
/*dialect*/
select isnull(c.FRealQty,0)FRealQty from Sc_WorkBillSortBillSub a
left join T_PRD_MORPTENTRY b on a.FEntryID = b.FDAYPLANFID
left join T_PRD_INSTOCKENTRY c on b.FENTRYID = c.FSrcEntryId
where a.FEntryID in ({0})", selectedRow["Id"]);
                    decimal FRealQty = DBServiceHelper.ExecuteScalar<decimal>(Context, sql, 0);
                    if (FRealQty == 0)
                    {
                        result.Append($"分录行:{selectedRow["Seq"]},日计划明细未下推生成生产入库单\r\n");
                        continue;
                    }
                    sql = string.Format(@"
/*dialect*/
select count(*)res from Sc_WorkBillSortBillSub a
left join Sc_DayPlanPPBomBillMain b on a.FEntryID = b.FDayPlanFID
left join Sc_DayPlanPPBomBillSub c on b.FID = c.FID
where a.FEntryID in ({0})
and FISSUETYPE in (1, 2)
and FDwyl * {1} < FPickedQty", selectedRow["Id"], FRealQty);
                    decimal Count = DBServiceHelper.ExecuteScalar<decimal>(Context, sql, 0);
                    if (Count > 0)
                    {
                        result.Append($"分录行:{selectedRow["Seq"]},下游领料单的已领料数小于入库的标准用量\r\n");
                        continue;
                    }
                    sql = string.Format(@"
/*dialect*/
update Sc_WorkBillSortBillSub set
FInStockCount = {0},
FNotInStockCount = FHQty - {0},
FHEntryCloseDate = getdate(),
FHCloseTypeSub = 1
where FEntryID={1}", FRealQty, selectedRow["Id"]);
                    sqlList.Add(sql);
                }
                DBServiceHelper.ExecuteBatch(Context, sqlList);
                this.View.Refresh();
                if (string.IsNullOrEmpty(result.ToString()))
                    this.View.ShowMessage("操作成功");
                else
                    this.View.ShowErrMessage(result.ToString());
            }
            else if (e.BarItemKey.ToUpper() == "TBROWCANCELCLOSE")
            {
                int[] selectedIndexsR = this.View.GetControl<EntryGrid>("FEntity").GetSelectedRows();        //单据体数据    
                Array.Sort(selectedIndexsR);
                DynamicObjectCollection selectedRowsDy = this.Model.DataObject["FEntity"] as DynamicObjectCollection;        //选中行数据   
                DynamicObject selectedRow;
                List<string> sqlList = new List<string>();
                foreach (var item in selectedIndexsR)
                {
                    selectedRow = selectedRowsDy[item];
                    string sql = string.Format(@"
/*dialect*/
update Sc_WorkBillSortBillSub set
FInStockCount = 0,
FNotInStockCount =0,
FHEntryCloseDate = null,
FHCloseTypeSub = 0
where FEntryID={0}", selectedRow["Id"]);
                    sqlList.Add(sql);
                }
                DBServiceHelper.ExecuteBatch(Context, sqlList);
                this.View.Refresh();
                this.View.ShowMessage("操作成功");
            }
        }
    }
}
src/BLL/Demo.BillView/PRD/Pro_DayPlanPushSCHB.cs
@@ -145,7 +145,7 @@
                }
            }
            // 为新建的源单关联信息,设置内码
            IDBService dbService = ServiceHelper.GetService<IDBService>();
            IDBService dbService =Kingdee.K3.SCM.App.ServiceHelper.GetService<IDBService>();
            dbService.AutoSetPrimaryKey(this.Context, allNewLinkRows.ToArray(), linkEntry.DynamicObjectType);
        }
@@ -188,7 +188,7 @@
        /// <returns></returns>
        private DynamicObject[] LoadPurchaseOrder(HashSet<string> poBillNos)
        {
            IViewService viewService = ServiceHelper.GetService<IViewService>();
            IViewService viewService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IViewService>();
            string formId = "PRD_MO";
            // 指定需要加载的用料清单字段
@@ -238,7 +238,7 @@
        /// <returns></returns>
        private string GetPOEntryTableNumber()
        {
            IBusinessFlowService bfMetaService = ServiceHelper.GetService<IBusinessFlowService>();
            IBusinessFlowService bfMetaService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IBusinessFlowService>();
            var tableDefine = bfMetaService.LoadTableDefine(this.Context, POFormId, "FTreeEntity");
            return tableDefine.TableNumber;
        }
src/BLL/Demo.BillView/PRD/Pro_DayPlanPushZJDB.cs
@@ -141,7 +141,7 @@
                }
            }
            // 为新建的源单关联信息,设置内码
            IDBService dbService = ServiceHelper.GetService<IDBService>();
            IDBService dbService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IDBService>();
            dbService.AutoSetPrimaryKey(this.Context, allNewLinkRows.ToArray(), linkEntry.DynamicObjectType);
        }
@@ -186,7 +186,7 @@
        /// <returns></returns>
        private DynamicObject[] LoadPurchaseOrder(HashSet<string> poBillNos)
        {
            IViewService viewService = ServiceHelper.GetService<IViewService>();
            IViewService viewService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IViewService>();
            string formId = "PRD_PPBOM";
            // 指定需要加载的用料清单字段
@@ -239,7 +239,7 @@
        /// <returns></returns>
        private string GetPOEntryTableNumber()
        {
            IBusinessFlowService bfMetaService = ServiceHelper.GetService<IBusinessFlowService>();
            IBusinessFlowService bfMetaService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IBusinessFlowService>();
            var tableDefine = bfMetaService.LoadTableDefine(this.Context, POFormId, "FEntity");
            return tableDefine.TableNumber;
        }
src/BLL/Demo.BillView/PRD/Pro_DayPlanPushZJDB2.cs
@@ -143,7 +143,7 @@
                }
            }
            // 为新建的源单关联信息,设置内码
            IDBService dbService = ServiceHelper.GetService<IDBService>();
            IDBService dbService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IDBService>();
            dbService.AutoSetPrimaryKey(this.Context, allNewLinkRows.ToArray(), linkEntry.DynamicObjectType);
        }
@@ -179,7 +179,7 @@
        /// <returns></returns>
        private DynamicObject[] LoadPurchaseOrder(HashSet<string> poBillNos)
        {
            IViewService viewService = ServiceHelper.GetService<IViewService>();
            IViewService viewService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IViewService>();
            string formId = "Paez_Sc_DayPlanPPBomBill";
            // 指定需要加载的销售订单字段
@@ -230,7 +230,7 @@
        /// <returns></returns>
        private string GetPOEntryTableNumber()
        {
            IBusinessFlowService bfMetaService = ServiceHelper.GetService<IBusinessFlowService>();
            IBusinessFlowService bfMetaService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IBusinessFlowService>();
            var tableDefine = bfMetaService.LoadTableDefine(this.Context, POFormId, "FEntity");
            return tableDefine.TableNumber;
        }
src/BLL/Demo.BillView/PRD/Pro_MaterialRequisitionAuditDayPlan.cs
@@ -145,7 +145,7 @@
                }
            }
            // 为新建的源单关联信息,设置内码
            IDBService dbService = ServiceHelper.GetService<IDBService>();
            IDBService dbService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IDBService>();
            dbService.AutoSetPrimaryKey(this.Context, allNewLinkRows.ToArray(), linkEntry.DynamicObjectType);
        }
        /// <summary>
@@ -185,7 +185,7 @@
        /// <returns></returns>
        private DynamicObject[] LoadPurchaseOrder(HashSet<string> poBillNos)
        {
            IViewService viewService = ServiceHelper.GetService<IViewService>();
            IViewService viewService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IViewService>();
            string formId = "PRD_PPBOM";
            // 指定需要加载的销售订单字段
@@ -237,7 +237,7 @@
        /// <returns></returns>
        private string GetPOEntryTableNumber()
        {
            IBusinessFlowService bfMetaService = ServiceHelper.GetService<IBusinessFlowService>();
            IBusinessFlowService bfMetaService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IBusinessFlowService>();
            var tableDefine = bfMetaService.LoadTableDefine(this.Context, POFormId, "FEntity");
            return tableDefine.TableNumber;
        }
src/BLL/Demo.BillView/PRD/Pro_PPBomSave.cs
New file
@@ -0,0 +1,266 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Newtonsoft.Json.Linq;
using ZD.Cloud.Logger;
using ZD.Cloud.WebApi;
using Demo.Model.Model;
using System.Diagnostics;
using System.Linq;
using Kingdee.BOS.Core.Bill.PlugIn.Args;
namespace Demo.BillView.PRD
{
    /// <summary>
    /// 生产用料清单保存 刷新日计划用料清单数据
    /// </summary>
    [Description("生产用料清单保存表单插件")]
    [Kingdee.BOS.Util.HotUpdate]
    public class Pro_PPBomSave : AbstractBillPlugIn
    {
        CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
        public override void AfterSave(AfterSaveEventArgs e)
        {
            base.AfterSave(e);
            try
            {
                string a;
                string sql = "";
                //var FID = this.View.Model.GetPKValue();
                var fBillNo = this.View.Model.GetValue("FBILLNO");
                Stopwatch sw = new Stopwatch();
                sw.Start();//开始计时
                LogHelper.Info("生成日计划用料清单准备数据");
                //锁定的日计划不生成
                try
                {
                    //变更 先去删除调整过的数据
                    sql = $"/*dialect*/ exec deleteDayPlanPpbomBillSub '{fBillNo}'";
                    DBServiceHelper.Execute(Context, sql);
                    sql = string.Format(@"
/*dialect*/
  select t1.FID,t1.FSEQ FDayPlanFSEQ,t1.FEntryID,T2.FBILLNO AS FDayPlanFBILLNO,t3.FMATERIALID,T5.FNUMBER,t1.FHMASTERDATE,t1.FHQTY,t4.FMATERIALID FMATERIALID2,T6.FNUMBER FNUMBER2,T7.FNUMBER FUNITNUMBER,t4.FNumerator,t4.FDenominator,convert(decimal(18,2),(t4.FNumerator/t4.FDenominator) *t1.FHQTY) FHQtyMust,T4.FUnitID,t8.FNUMBER FUNITNUMBER2,T3.FID FPPBOM,T4.FENTRYID FPPBOMENTRYID,isnull(T9.FBillNo,'')FBillNo,t10.FNUMBER FORGNUMBER,t11.FNUMBER FHSOURCENUMBER,FSCRAPRATE,t4.FFIXSCRAPQTY,T9.FID AS DayPlanFID,t2.FSCORDERNO,
t3.FMOENTRYID,t3.FBILLNO FPPBOMBILLNO,T4.FSEQ,tc.FOWNERTYPEID,tc.FOWNERID,tc.FEntrustPickOrgId,torg.FNUMBER as FORGNUMBER,t3.FMOID,Tc.FIssueType,t4.FMaterialType,t12.FEntryID
as FDayPlanPpbomFEntryId
FROM Sc_WorkBillSortBillSub t1
JOIN Sc_WorkBillSortBillMAIN t2 on t1.FID = t2.FID
JOIN T_PRD_PPBOM T3 on T2.FPRDMOMAINID=t3.FMOID AND T2.FPRDMOENTYID=T3.FMOENTRYID
JOIN T_PRD_PPBOMENTRY T4 ON T3.FID=T4.FID
JOIN T_PRD_PPBOMENTRY_C Tc ON T4.FENTRYID=Tc.FENTRYID
join T_ORG_Organizations torg ON tc.FOWNERID = torg.FORGID
JOIN T_BD_MATERIAL T5 ON T3.FMATERIALID=T5.FMATERIALID
JOIN T_BD_MATERIAL T6 ON T4.FMATERIALID=T6.FMATERIALID
LEFT JOIN T_BD_UNIT T7 ON T3.FUNITID = T7.FUNITID
LEFT JOIN T_BD_UNIT T8 ON T4.FUNITID = T8.FUNITID
 LEFT JOIN Sc_DayPlanPPBomBillMain T9 ON T1.FEntryID=T9.FDayPlanFID
 LEFT join Sc_DayPlanPPBomBillSub t12 on t9.FID=t12.FID and T4.FENTRYID=t12.FHPPBomEntryID
 LEFT join T_ORG_Organizations t10 on t2.FHPRDORGID = t10.FORGID
 LEFT join T_ENG_WORKCENTER t11 on t2.FHSOURCEID = t11.FID
 WHERE T4.FMustQty>0
and T3.FBILLNO='{0}'
", fBillNo);
                    LogHelper.Info("生成日计划用料清单准备数据sql:" + sql);
                    DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
                    DataTable dt = ds.Tables[0];
                    List<DayPlanMaterial> DayPlanMaterial = new List<DayPlanMaterial>();
                    if (dt.Rows.Count > 0)
                    {
                        foreach (DataRow dr in dt.Rows)
                        {
                            DayPlanMaterial.Add(new Demo.Model.Model.DayPlanMaterial
                            {
                                FID = dr["DayPlanFID"].ToString(),
                                FEntryID = dr["FEntryID"].ToString(),
                                FHDate = DateTime.Now.ToString(),
                                FOrgId = dr["FORGNUMBER"].ToString(),
                                FHMaterID = dr["FNUMBER"].ToString(),
                                FHWorkDate = dr["FHMASTERDATE"].ToString(),
                                FHQty = dr["FHQTY"].ToString(),
                                FHUnitID = dr["FUNITNUMBER"].ToString(),
                                FDayPlanFID = dr["FEntryID"].ToString(),
                                FHMaterSubID = dr["FNUMBER2"].ToString(),
                                FHUnitSubID = dr["FUNITNUMBER2"].ToString(),
                                FHQtyMust = dr["FHQtyMust"].ToString(),
                                FHQtySub = dr["FHQtyMust"].ToString(),
                                FHPPBomInterID = dr["FPPBOM"].ToString(),
                                FHPPBomEntryID = dr["FPPBOMENTRYID"].ToString(),
                                FHSourceID = dr["FHSOURCENUMBER"].ToString(),
                                FNumerator = dr["FNumerator"].ToString(),
                                FDenominator = dr["FDenominator"].ToString(),
                                FFIXSCRAPQTY = dr["FFIXSCRAPQTY"].ToString(),
                                FHQtyScrap = dr["FSCRAPRATE"].ToString(),
                                FMOBILLNO = dr["FSCORDERNO"].ToString(),
                                FMOENTRYID = dr["FMOENTRYID"].ToString(),
                                FPPBOMBILLNO = dr["FPPBOMBILLNO"].ToString(),
                                FPPBOMFSEQ = dr["FSEQ"].ToString(),
                                FOwnerTypeId = dr["FOWNERTYPEID"].ToString(),
                                FOwnerID = dr["FORGNUMBER"].ToString(),
                                FEntrustPickOrgId = dr["FORGNUMBER"].ToString(),
                                FMOID = dr["FMOID"].ToString(),
                                FIssueType = dr["FIssueType"].ToString(),
                                FMaterialType = dr["FMaterialType"].ToString(),
                                FDayPlanFSEQ = dr["FDayPlanFSEQ"].ToString(),
                                FDayPlanFBILLNO = dr["FDayPlanFBILLNO"].ToString(),
                                FDayPlanPpbomFEntryId = dr["FDayPlanPpbomFEntryId"].ToString(),
                            });
                        }
                        LogHelper.Info($"日计划用料清单,数据准备完成,保存到Model实体,总行数:{DayPlanMaterial.Count},耗时:" + sw.Elapsed);
                        var fidList = DayPlanMaterial.Select(x => x.FEntryID).Distinct().ToList();
                        int i = 1;
                        JArray Fentity = new JArray();
                        foreach (var item in fidList)
                        {
                            var _DayPlanMaterial = DayPlanMaterial.Where(x => x.FEntryID == item).ToList();
                            JObject model = new JObject();
                            if (!string.IsNullOrEmpty(_DayPlanMaterial[0].FID))
                                model.Add("FID", _DayPlanMaterial[0].FID);
                            model.Add("FHDate", DateTime.Now);
                            model.Add("FOrgId", new JObject() { ["Fnumber"] = _DayPlanMaterial[0].FOrgId });//发料组织
                            model.Add("FHMaterID", new JObject() { ["Fnumber"] = _DayPlanMaterial[0].FHMaterID });//物料
                            model.Add("FHWorkDate", _DayPlanMaterial[0].FHWorkDate);//日工单日期 FHWorkDate
                            model.Add("FHQty", _DayPlanMaterial[0].FHQty);//主产品数量:FHQty
                            model.Add("FHUnitID", new JObject() { ["Fnumber"] = _DayPlanMaterial[0].FHUnitID });//单位:FHUnitID
                            model.Add("FDayPlanFID", _DayPlanMaterial[0].FDayPlanFID);//日计划工单内码
                            model.Add("FDayPlanFSEQ", _DayPlanMaterial[0].FDayPlanFSEQ);//日计划工单明细行号
                            model.Add("FDayPlanFBillNo", _DayPlanMaterial[0].FDayPlanFBILLNO);//日计划工单单据编号
                            JArray Entry = new JArray();
                            foreach (var _item in _DayPlanMaterial)
                            {
                                JObject ModelEnty = new JObject();
                                ModelEnty.Add("FHMaterSubID", new JObject() { ["Fnumber"] = _item.FHMaterSubID });//子物料FHMaterSubID
                                ModelEnty.Add("FHUnitSubID", new JObject() { ["Fnumber"] = _item.FHUnitSubID });//单位FHUnitSubID
                                ModelEnty.Add("FHQtyMust", _item.FHQtyMust);//应发数量FHQtyMust
                                ModelEnty.Add("FHQtySub", _item.FHQtySub);//数量FHQtySub
                                ModelEnty.Add("FHPPBomInterID", _item.FHPPBomInterID);//用料清单主内码FHPPBomInterID
                                ModelEnty.Add("FHPPBomEntryID", _item.FHPPBomEntryID);//用料清单子内码FHPPBomEntryID
                                ModelEnty.Add("FHSourceID", new JObject() { ["Fnumber"] = _item.FHSourceID });//生产资源FHSourceID
                                ModelEnty.Add("FNumerator", _item.FNumerator);//分母
                                ModelEnty.Add("FDenominator", _item.FDenominator);//分子
                                ModelEnty.Add("FDwyl", Convert.ToDecimal(_item.FNumerator) / Convert.ToDecimal(_item.FDenominator));//单位用料
                                ModelEnty.Add("FFIXSCRAPQTY", _item.FFIXSCRAPQTY);//固定损耗
                                ModelEnty.Add("FHQtyScrap", _item.FHQtyScrap);//变动损耗率%
                                ModelEnty.Add("FMOBILLNO", _item.FMOBILLNO);//
                                ModelEnty.Add("FMOENTRYIDINT", _item.FMOENTRYID);//
                                ModelEnty.Add("FPPBOMBILLNO", _item.FPPBOMBILLNO);//
                                ModelEnty.Add("FPPBOMFSEQINT", _item.FPPBOMFSEQ);//
                                ModelEnty.Add("FOwnerTypeId", _item.FOwnerTypeId);//
                                ModelEnty.Add("FOwnerID", new JObject() { ["Fnumber"] = _item.FOwnerID });//
                                ModelEnty.Add("FEntrustPickOrgId", new JObject() { ["Fnumber"] = _item.FEntrustPickOrgId });//
                                ModelEnty.Add("FMOID", _item.FMOID);//
                                ModelEnty.Add("FISSUETYPE", _item.FIssueType);//
                                ModelEnty.Add("FMaterialType", _item.FMaterialType);//
                                if (!string.IsNullOrEmpty(_item.FDayPlanPpbomFEntryId))
                                    ModelEnty.Add("FEntryId", _item.FDayPlanPpbomFEntryId);//
                                Entry.Add(ModelEnty);
                            }
                            model.Add("FEntity", Entry);
                            Fentity.Add(model);
                            if ((i >= 20 || i == fidList.Count) && (i % 20 == 0 || i == fidList.Count))
                            {
                                LogHelper.Info("日计划用料清单批量执行,记录循环的当前条数" + i);
                                JObject jsonRoot = new JObject()
                                {
                                    ["Creator"] = "",
                                    ["NeedUpDateFields"] = new JArray(),
                                    ["NeedReturnFields"] = new JArray(),
                                    ["SubSystemId"] = "",
                                    ["IsVerifyBaseDataField"] = "false",
                                    ["IsDeleteEntry"] = "false",
                                    ["Model"] = Fentity
                                };
                                CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
                                var result = cloudClient.BatchSave("Paez_Sc_DayPlanPPBomBill", jsonRoot.ToString());
                                JObject saveObj = JObject.Parse(result);
                                string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                                if (saveIsSuc == "TRUE")
                                {
                                    var Success = saveObj["Result"]["ResponseStatus"]["SuccessEntitys"].ToString().TrimStart('{').TrimEnd('}');
                                    var allList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(Success);
                                    List<string> ls = new List<string>();
                                    foreach (var it in allList)
                                    {
                                        it.TryGetValue("Id", out string value);
                                        ls.Add(value);
                                    }
                                    var resultAA = String.Join(",", ls.ToArray());
                                    string resSql = string.Format(@"/*dialect*/ update Sc_WorkBillSortBillSub set Sc_WorkBillSortBillSub.FDAYPLANPPBOMBILLNO = Sc_DayPlanPPBomBillMain.FBILLNO from Sc_WorkBillSortBillSub   join Sc_DayPlanPPBomBillMain   on Sc_WorkBillSortBillSub.FEntryID = Sc_DayPlanPPBomBillMain.FDayPlanFID where Sc_DayPlanPPBomBillMain.FID in ({0})", resultAA);
                                    DBServiceHelper.Execute(Context, resSql);
                                    //JArray array = JArray.Parse(m);
                                    //for (int mm = 0; mm < array.Count; mm++)
                                    //{
                                    //    JObject b = JObject.Parse(array[mm].ToString());
                                    //    var id = b["ID"].ToString();
                                    //}
                                }
                                if (saveIsSuc != "TRUE")
                                {
                                    LogHelper.Error("日计划用料清单列表生成失败:" + jsonRoot.ToString());
                                    this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
                                }
                                Fentity = new JArray();
                            }
                            i++;
                        }
                    }
                    sw.Stop();//结束计时
                    LogHelper.Info("生成日计划用料清单运行总时长:" + sw.Elapsed);
                }
                catch (Exception ex)
                {
                    LogHelper.Error("日计划用料清单+" + ex.Message.ToString());
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public override void BeforeSave(BeforeSaveEventArgs e)
        {
            base.BeforeSave(e);
            var fBillNo = this.View.Model.GetValue("FBILLNO");
            string sql = string.Format(@"
/*dialect*/
select T9.FBILLNO,t12.FSEQ,t4.FMATERIALID,t6.FNUMBER ,convert(decimal(18,2),(t4.FNumerator/t4.FDenominator) *t1.FHQTY) FQty ,FPickedQty from
Sc_WorkBillSortBillSub t1
JOIN Sc_WorkBillSortBillMAIN t2 on t1.FID = t2.FID
JOIN T_PRD_PPBOM T3 on T2.FPRDMOMAINID=t3.FMOID AND T2.FPRDMOENTYID=T3.FMOENTRYID
JOIN T_PRD_PPBOMENTRY T4 ON T3.FID=T4.FID
JOIN T_BD_MATERIAL T6 ON T4.FMATERIALID=T6.FMATERIALID
 LEFT JOIN Sc_DayPlanPPBomBillMain T9 ON T1.FEntryID=T9.FDayPlanFID
 LEFT join Sc_DayPlanPPBomBillSub t12 on t9.FID=t12.FID and T4.FENTRYID=t12.FHPPBomEntryID
 WHERE T4.FMustQty>0
and T3.FBILLNO='{0}'
and convert(decimal(18,2),(t4.FNumerator/t4.FDenominator) *t1.FHQTY)< t12.FPickedQty", fBillNo);
            DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
            string result = "保存失败,修改后将要更新的日计划用料清单数据低于领料或调拨数量";
            if (dt.Rows.Count > 0)
            {
                foreach (DataRow dr in dt.Rows)
                {
                    result += $"日计划用料清单单号:{dr["FBILLNO"].ToString()},分录行号:{dr["FSEQ"]}对应的物料编码{dr["FNUMBER"]}";
                }
                this.View.ShowErrMessage(result);
            }
        }
    }
}
src/BLL/Demo.BillView/PRD/Pro_PPBomSubmit.cs
New file
@@ -0,0 +1,292 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Newtonsoft.Json.Linq;
using ZD.Cloud.Logger;
using ZD.Cloud.WebApi;
using Demo.Model.Model;
using System.Diagnostics;
using System.Linq;
using Kingdee.BOS.Core.Bill.PlugIn.Args;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
namespace Demo.BillView.PRD
{
    /// <summary>
    /// 生产用料清单提交 刷新日计划用料清单数据
    /// </summary>
    [Description("生产用料清单提交服务插件")]
    [Kingdee.BOS.Util.HotUpdate]
    public class Pro_PPBomSubmit : AbstractOperationServicePlugIn
    {
        CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
        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("FID");
            e.FieldKeys.Add("FBillNo");
        }
        public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
        {
            base.AfterExecuteOperationTransaction(e);
            try
            {
                string sql = "";
                var fBillNo = "";
                foreach (var select in e.SelectedRows)
                {
                    fBillNo = select["Billno"].ToString();
                    if (dictionary.ContainsKey(fBillNo))
                        continue;
                    //变更 先去删除调整过的数据
                    sql = $"/*dialect*/ exec deleteDayPlanPpbomBillSub '{fBillNo}'";
                    DBServiceHelper.Execute(Context, sql);
                    sql = string.Format(@"
/*dialect*/
  select t1.FID,t1.FSEQ FDayPlanFSEQ,t1.FEntryID,T2.FBILLNO AS FDayPlanFBILLNO,t3.FMATERIALID,T5.FNUMBER,t1.FHMASTERDATE,t1.FHQTY,t4.FMATERIALID FMATERIALID2,T6.FNUMBER FNUMBER2,T7.FNUMBER FUNITNUMBER,t4.FNumerator,t4.FDenominator,convert(decimal(18,2),(t4.FNumerator/t4.FDenominator) *t1.FHQTY) FHQtyMust,T4.FUnitID,t8.FNUMBER FUNITNUMBER2,T3.FID FPPBOM,T4.FENTRYID FPPBOMENTRYID,isnull(T9.FBillNo,'')FBillNo,t10.FNUMBER FORGNUMBER,t11.FNUMBER FHSOURCENUMBER,FSCRAPRATE,t4.FFIXSCRAPQTY,T9.FID AS DayPlanFID,t2.FSCORDERNO,
t3.FMOENTRYID,t3.FBILLNO FPPBOMBILLNO,T4.FSEQ,tc.FOWNERTYPEID,tc.FOWNERID,tc.FEntrustPickOrgId,torg.FNUMBER as FORGNUMBER,t3.FMOID,Tc.FIssueType,t4.FMaterialType,t12.FEntryID
as FDayPlanPpbomFEntryId
FROM Sc_WorkBillSortBillSub t1
JOIN Sc_WorkBillSortBillMAIN t2 on t1.FID = t2.FID
JOIN T_PRD_PPBOM T3 on T2.FPRDMOMAINID=t3.FMOID AND T2.FPRDMOENTYID=T3.FMOENTRYID
JOIN T_PRD_PPBOMENTRY T4 ON T3.FID=T4.FID
JOIN T_PRD_PPBOMENTRY_C Tc ON T4.FENTRYID=Tc.FENTRYID
join T_ORG_Organizations torg ON tc.FOWNERID = torg.FORGID
JOIN T_BD_MATERIAL T5 ON T3.FMATERIALID=T5.FMATERIALID
JOIN T_BD_MATERIAL T6 ON T4.FMATERIALID=T6.FMATERIALID
LEFT JOIN T_BD_UNIT T7 ON T3.FUNITID = T7.FUNITID
LEFT JOIN T_BD_UNIT T8 ON T4.FUNITID = T8.FUNITID
 LEFT JOIN Sc_DayPlanPPBomBillMain T9 ON T1.FEntryID=T9.FDayPlanFID
 LEFT join Sc_DayPlanPPBomBillSub t12 on t9.FID=t12.FID and T4.FENTRYID=t12.FHPPBomEntryID
 LEFT join T_ORG_Organizations t10 on t2.FHPRDORGID = t10.FORGID
 LEFT join T_ENG_WORKCENTER t11 on t2.FHSOURCEID = t11.FID
 WHERE T4.FMustQty>0
and T3.FBILLNO='{0}'
", fBillNo);
                    LogHelper.Info("生成日计划用料清单准备数据sql:" + sql);
                    DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
                    DataTable dt = ds.Tables[0];
                    List<DayPlanMaterial> DayPlanMaterial = new List<DayPlanMaterial>();
                    if (dt.Rows.Count > 0)
                    {
                        foreach (DataRow dr in dt.Rows)
                        {
                            DayPlanMaterial.Add(new Demo.Model.Model.DayPlanMaterial
                            {
                                FID = dr["DayPlanFID"].ToString(),
                                FEntryID = dr["FEntryID"].ToString(),
                                FHDate = DateTime.Now.ToString(),
                                FOrgId = dr["FORGNUMBER"].ToString(),
                                FHMaterID = dr["FNUMBER"].ToString(),
                                FHWorkDate = dr["FHMASTERDATE"].ToString(),
                                FHQty = dr["FHQTY"].ToString(),
                                FHUnitID = dr["FUNITNUMBER"].ToString(),
                                FDayPlanFID = dr["FEntryID"].ToString(),
                                FHMaterSubID = dr["FNUMBER2"].ToString(),
                                FHUnitSubID = dr["FUNITNUMBER2"].ToString(),
                                FHQtyMust = dr["FHQtyMust"].ToString(),
                                FHQtySub = dr["FHQtyMust"].ToString(),
                                FHPPBomInterID = dr["FPPBOM"].ToString(),
                                FHPPBomEntryID = dr["FPPBOMENTRYID"].ToString(),
                                FHSourceID = dr["FHSOURCENUMBER"].ToString(),
                                FNumerator = dr["FNumerator"].ToString(),
                                FDenominator = dr["FDenominator"].ToString(),
                                FFIXSCRAPQTY = dr["FFIXSCRAPQTY"].ToString(),
                                FHQtyScrap = dr["FSCRAPRATE"].ToString(),
                                FMOBILLNO = dr["FSCORDERNO"].ToString(),
                                FMOENTRYID = dr["FMOENTRYID"].ToString(),
                                FPPBOMBILLNO = dr["FPPBOMBILLNO"].ToString(),
                                FPPBOMFSEQ = dr["FSEQ"].ToString(),
                                FOwnerTypeId = dr["FOWNERTYPEID"].ToString(),
                                FOwnerID = dr["FORGNUMBER"].ToString(),
                                FEntrustPickOrgId = dr["FORGNUMBER"].ToString(),
                                FMOID = dr["FMOID"].ToString(),
                                FIssueType = dr["FIssueType"].ToString(),
                                FMaterialType = dr["FMaterialType"].ToString(),
                                FDayPlanFSEQ = dr["FDayPlanFSEQ"].ToString(),
                                FDayPlanFBILLNO = dr["FDayPlanFBILLNO"].ToString(),
                                FDayPlanPpbomFEntryId = dr["FDayPlanPpbomFEntryId"].ToString(),
                            });
                        }
                        var fidList = DayPlanMaterial.Select(x => x.FEntryID).Distinct().ToList();
                        int i = 1;
                        JArray Fentity = new JArray();
                        foreach (var item in fidList)
                        {
                            var _DayPlanMaterial = DayPlanMaterial.Where(x => x.FEntryID == item).ToList();
                            JObject model = new JObject();
                            if (!string.IsNullOrEmpty(_DayPlanMaterial[0].FID))
                                model.Add("FID", _DayPlanMaterial[0].FID);
                            model.Add("FHDate", DateTime.Now);
                            model.Add("FOrgId", new JObject() { ["Fnumber"] = _DayPlanMaterial[0].FOrgId });//发料组织
                            model.Add("FHMaterID", new JObject() { ["Fnumber"] = _DayPlanMaterial[0].FHMaterID });//物料
                            model.Add("FHWorkDate", _DayPlanMaterial[0].FHWorkDate);//日工单日期 FHWorkDate
                            model.Add("FHQty", _DayPlanMaterial[0].FHQty);//主产品数量:FHQty
                            model.Add("FHUnitID", new JObject() { ["Fnumber"] = _DayPlanMaterial[0].FHUnitID });//单位:FHUnitID
                            model.Add("FDayPlanFID", _DayPlanMaterial[0].FDayPlanFID);//日计划工单内码
                            model.Add("FDayPlanFSEQ", _DayPlanMaterial[0].FDayPlanFSEQ);//日计划工单明细行号
                            model.Add("FDayPlanFBillNo", _DayPlanMaterial[0].FDayPlanFBILLNO);//日计划工单单据编号
                            JArray Entry = new JArray();
                            foreach (var _item in _DayPlanMaterial)
                            {
                                JObject ModelEnty = new JObject();
                                ModelEnty.Add("FHMaterSubID", new JObject() { ["Fnumber"] = _item.FHMaterSubID });//子物料FHMaterSubID
                                ModelEnty.Add("FHUnitSubID", new JObject() { ["Fnumber"] = _item.FHUnitSubID });//单位FHUnitSubID
                                ModelEnty.Add("FHQtyMust", _item.FHQtyMust);//应发数量FHQtyMust
                                ModelEnty.Add("FHQtySub", _item.FHQtySub);//数量FHQtySub
                                ModelEnty.Add("FHPPBomInterID", _item.FHPPBomInterID);//用料清单主内码FHPPBomInterID
                                ModelEnty.Add("FHPPBomEntryID", _item.FHPPBomEntryID);//用料清单子内码FHPPBomEntryID
                                ModelEnty.Add("FHSourceID", new JObject() { ["Fnumber"] = _item.FHSourceID });//生产资源FHSourceID
                                ModelEnty.Add("FNumerator", _item.FNumerator);//分母
                                ModelEnty.Add("FDenominator", _item.FDenominator);//分子
                                ModelEnty.Add("FDwyl", Convert.ToDecimal(_item.FNumerator) / Convert.ToDecimal(_item.FDenominator));//单位用料
                                ModelEnty.Add("FFIXSCRAPQTY", _item.FFIXSCRAPQTY);//固定损耗
                                ModelEnty.Add("FHQtyScrap", _item.FHQtyScrap);//变动损耗率%
                                ModelEnty.Add("FMOBILLNO", _item.FMOBILLNO);//
                                ModelEnty.Add("FMOENTRYIDINT", _item.FMOENTRYID);//
                                ModelEnty.Add("FPPBOMBILLNO", _item.FPPBOMBILLNO);//
                                ModelEnty.Add("FPPBOMFSEQINT", _item.FPPBOMFSEQ);//
                                ModelEnty.Add("FOwnerTypeId", _item.FOwnerTypeId);//
                                ModelEnty.Add("FOwnerID", new JObject() { ["Fnumber"] = _item.FOwnerID });//
                                ModelEnty.Add("FEntrustPickOrgId", new JObject() { ["Fnumber"] = _item.FEntrustPickOrgId });//
                                ModelEnty.Add("FMOID", _item.FMOID);//
                                ModelEnty.Add("FISSUETYPE", _item.FIssueType);//
                                ModelEnty.Add("FMaterialType", _item.FMaterialType);//
                                if (!string.IsNullOrEmpty(_item.FDayPlanPpbomFEntryId))
                                    ModelEnty.Add("FEntryId", _item.FDayPlanPpbomFEntryId);//
                                Entry.Add(ModelEnty);
                            }
                            model.Add("FEntity", Entry);
                            Fentity.Add(model);
                            if ((i >= 20 || i == fidList.Count) && (i % 20 == 0 || i == fidList.Count))
                            {
                                JObject jsonRoot = new JObject()
                                {
                                    ["Creator"] = "",
                                    ["NeedUpDateFields"] = new JArray(),
                                    ["NeedReturnFields"] = new JArray(),
                                    ["SubSystemId"] = "",
                                    ["IsVerifyBaseDataField"] = "false",
                                    ["IsDeleteEntry"] = "false",
                                    ["Model"] = Fentity
                                };
                                CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
                                var result = cloudClient.BatchSave("Paez_Sc_DayPlanPPBomBill", jsonRoot.ToString());
                                JObject saveObj = JObject.Parse(result);
                                string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                                if (saveIsSuc == "TRUE")
                                {
                                    var Success = saveObj["Result"]["ResponseStatus"]["SuccessEntitys"].ToString().TrimStart('{').TrimEnd('}');
                                    var allList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(Success);
                                    List<string> ls = new List<string>();
                                    foreach (var it in allList)
                                    {
                                        it.TryGetValue("Id", out string value);
                                        ls.Add(value);
                                    }
                                    var resultAA = String.Join(",", ls.ToArray());
                                    string resSql = string.Format(@"/*dialect*/ update Sc_WorkBillSortBillSub set Sc_WorkBillSortBillSub.FDAYPLANPPBOMBILLNO = Sc_DayPlanPPBomBillMain.FBILLNO from Sc_WorkBillSortBillSub   join Sc_DayPlanPPBomBillMain   on Sc_WorkBillSortBillSub.FEntryID = Sc_DayPlanPPBomBillMain.FDayPlanFID where Sc_DayPlanPPBomBillMain.FID in ({0})", resultAA);
                                    DBServiceHelper.Execute(Context, resSql);
                                }
                                if (saveIsSuc != "TRUE")
                                {
                                    LogHelper.Error("日计划用料清单列表生成失败:" + jsonRoot.ToString());
                                    //this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
                                }
                                Fentity = new JArray();
                            }
                            i++;
                        }
                    }
                }
                foreach (var item in dictionary)
                {
                    ResultMessage.dataError(this.OperationResult.OperateResult, item.Key, item.Value);
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error("日计划用料清单列表生成失败:" + ex.Message.ToString());
            }
        }
        public override void BeginOperationTransaction(BeginOperationTransactionArgs e)
        {
            base.BeginOperationTransaction(e);
            try
            {
                var fBillNo = "";
                var sql = "";
                string result = "保存失败,提交后将要更新的日计划用料清单数量少于领料或调拨数量,";
                foreach (var select in e.DataEntitys)
                {
                    fBillNo = select["Billno"].ToString();
                    sql = string.Format(@"
/*dialect*/
select T9.FBILLNO,t12.FSEQ,t4.FMATERIALID,t6.FNUMBER ,convert(decimal(18,2),(t4.FNumerator/t4.FDenominator) *t1.FHQTY) FQty ,FPickedQty from
Sc_WorkBillSortBillSub t1
JOIN Sc_WorkBillSortBillMAIN t2 on t1.FID = t2.FID
JOIN T_PRD_PPBOM T3 on T2.FPRDMOMAINID=t3.FMOID AND T2.FPRDMOENTYID=T3.FMOENTRYID
JOIN T_PRD_PPBOMENTRY T4 ON T3.FID=T4.FID
JOIN T_BD_MATERIAL T6 ON T4.FMATERIALID=T6.FMATERIALID
 LEFT JOIN Sc_DayPlanPPBomBillMain T9 ON T1.FEntryID=T9.FDayPlanFID
 LEFT join Sc_DayPlanPPBomBillSub t12 on t9.FID=t12.FID and T4.FENTRYID=t12.FHPPBomEntryID
 WHERE T4.FMustQty>0
and T3.FBILLNO='{0}'
and convert(decimal(18,2),(t4.FNumerator/t4.FDenominator) *t1.FHQTY)< t12.FPickedQty", fBillNo);
                    DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
                    if (dt.Rows.Count > 0)
                    {
                        e.CancelOperation = true;
                        foreach (DataRow dr in dt.Rows)
                        {
                            result += $"日计划用料清单单号:{dr["FBILLNO"].ToString()},分录行号:{dr["FSEQ"]},物料编码{dr["FNUMBER"]}";
                        }
                        dictionary.Add(fBillNo, result);
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error("日计划用料清单列表生成失败:" + ex.Message.ToString());
            }
        }
        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;
            }
        }
    }
}
src/BLL/Demo.BillView/PRD/Pro_SCLLSH.cs
@@ -34,6 +34,7 @@
            e.FieldKeys.Add("FBaseJoinQty");
            e.FieldKeys.Add("FDayPlanBillNo");
            e.FieldKeys.Add("FDayPlanFentryId");
            e.FieldKeys.Add("FBaseActualQty");
        }
        /// <summary>
        ///反审核 反更新日计划用料清单领料数量
@@ -52,12 +53,11 @@
                            as DynamicObjectCollection;
                foreach (var entryRow in entryRows)
                {
                    //生产用料清单为空时
                    if (Convert.ToString(entryRow["FDayPlanBillNo"]) == "")
                        continue;
                    string fentryId = entryRow["FDayPlanFentryId"].ToString();
                    sql = string.Format($"/*dialect*/update Sc_DayPlanPPBomBillSub set  FPickedQty = (select sum(FBaseActualQty) from T_PRD_PICKMTRLDATA where FDayPlanFentryId = {fentryId})where FEntryID = {fentryId} ");
                    LogHelper.Info("领料单的日计划用料清单ID:" + fentryId);
                    if (fentryId == "0")
                        continue;
                    sql = string.Format($"/*dialect*/update Sc_DayPlanPPBomBillSub set  FPickedQty = FPickedQty + {Convert.ToDecimal(entryRow["BaseActualQty"])} where FEntryID = {fentryId} ");
                    //LogHelper.Info("领料单的日计划用料清单ID:" + fentryId);
                    sqlList.Add(sql);
                }
            }
src/BLL/Demo.BillView/PRD/Pro_TlPush.cs
@@ -138,7 +138,7 @@
                            ["IsDeleteEntry"] = "false",
                            ["SubSystemId"] = "",
                            ["IsVerifyBaseDataField"] = "false",
                           // ["IsAutoSubmitAndAudit"] = true,//自动调用提交和审核功能
                            // ["IsAutoSubmitAndAudit"] = true,//自动调用提交和审核功能
                            ["Model"] = model
                        };
src/BLL/Demo.BillView/PRD/Pro_TlPushAudit.cs
@@ -124,7 +124,7 @@
                }
            }
            // 为新建的源单关联信息,设置内码
            IDBService dbService = ServiceHelper.GetService<IDBService>();
            IDBService dbService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IDBService>();
            dbService.AutoSetPrimaryKey(this.Context, allNewLinkRows.ToArray(), linkEntry.DynamicObjectType);
        }
@@ -135,7 +135,7 @@
        /// <returns></returns>
        private DynamicObject[] LoadPurchaseOrder(HashSet<string> poBillNos)
        {
            IViewService viewService = ServiceHelper.GetService<IViewService>();
            IViewService viewService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IViewService>();
            string formId = "paez_PODemandPlan";
            // 指定需要加载的销售订单字段
@@ -185,7 +185,7 @@
        /// <returns></returns>
        private string GetPOEntryTableNumber()
        {
            IBusinessFlowService bfMetaService = ServiceHelper.GetService<IBusinessFlowService>();
            IBusinessFlowService bfMetaService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IBusinessFlowService>();
            var tableDefine = bfMetaService.LoadTableDefine(this.Context, POFormId, "FEntity");
            return tableDefine.TableNumber;
        }
src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatform.cs
@@ -1037,7 +1037,6 @@
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();//开始计时
                LogHelper.Info("齐套分析开始准备数据:" + sw.Elapsed);
                //清空齐套临时表
                DBServiceHelper.Execute(Context, "/*dialect*/  delete JIT_MOMaterReadysBill ");
                //更新状态
@@ -1109,9 +1108,9 @@
                int i = 1;
                //创建字典 用于储存物料 + 占用数量
                Dictionary<string, decimal> occupyDic = new Dictionary<string, decimal>();
                LogHelper.Info("齐套分析准备数据完成:" + sw.Elapsed);
                foreach (var item in DatePlanList)
                {
                    //筛选出当日计划数据
                    var _BomList = BomList.Where(x => x.FHMASTERDATE == item.FHMASTERDATE && x.FPRDMOENTYID == item.FPRDMOENTYID).ToList();
                    foreach (var _item in _BomList)
@@ -1127,7 +1126,6 @@
                            decimal _fLackCount = _item.PlanCount > sjkcList.FBASEQTY ? (_item.PlanCount - sjkcList.FBASEQTY) : 0;//缺料数量
                            foreach (var Inventory in _ListInventory)
                            {
                                if (need == 0)
                                    break;
                                decimal fCompleteCount = need >= Inventory.FBASEQTY ? Inventory.FBASEQTY : need;//齐套数量
@@ -1848,7 +1846,7 @@
                string sql = string.Format(@"
/*dialect*/
 select t1.FID,t1.FSEQ FDayPlanFSEQ,t1.FEntryID,T2.FBILLNO AS FDayPlanFBILLNO,t3.FMATERIALID,T5.FNUMBER,t1.FHMASTERDATE,t1.FHQTY,t4.FMATERIALID FMATERIALID2,T6.FNUMBER FNUMBER2,T7.FNUMBER FUNITNUMBER,FNumerator,FDenominator,convert(decimal(18,2),(FNumerator/FDenominator) *t1.FHQTY) FHQtyMust,T4.FUnitID,t8.FNUMBER FUNITNUMBER2,T3.FID FPPBOM,T4.FENTRYID FPPBOMENTRYID,isnull(T9.FBillNo,'')FBillNo,t10.FNUMBER FORGNUMBER,t11.FNUMBER FHSOURCENUMBER,FSCRAPRATE,FFIXSCRAPQTY,T9.FID AS DayPlanFID,t2.FSCORDERNO,
t3.FMOENTRYID,t3.FBILLNO FPPBOMBILLNO,T4.FSEQ,tc.FOWNERTYPEID,tc.FOWNERID,tc.FEntrustPickOrgId,torg.FNUMBER as FORGNUMBER,t3.FMOID,FIssueType,FMaterialType
t3.FMOENTRYID,t3.FBILLNO FPPBOMBILLNO,T4.FSEQ,tc.FOWNERTYPEID,tc.FOWNERID,tc.FEntrustPickOrgId,torg.FNUMBER as FORGNUMBER,t3.FMOID,FIssueType,FMaterialType,td.FNUMBER as FWORKSHOPID
FROM Sc_WorkBillSortBillSub t1
JOIN Sc_WorkBillSortBillMAIN t2 on t1.FID = t2.FID
JOIN T_PRD_PPBOM T3 on T2.FPRDMOMAINID=t3.FMOID AND T2.FPRDMOENTYID=T3.FMOENTRYID
@@ -1862,10 +1860,16 @@
 LEFT JOIN Sc_DayPlanPPBomBillMain T9 ON T1.FEntryID=T9.FDayPlanFID
 LEFT join T_ORG_Organizations t10 on t2.FHPRDORGID = t10.FORGID
 LEFT join T_ENG_WORKCENTER t11 on t2.FHSOURCEID = t11.FID
 WHERE t1.FHQTY>0
 and t9.FID not in(
 select distinct FID from  Sc_DayPlanPPBomBillSub WHERE FTranslateQty >0 or FPickedQty >0
 )
 left join T_BD_DEPARTMENT td on t3.FWORKSHOPID=td.FDEPTID
 WHERE t1.FEntryID not in
(
select distinct FDAYPLANFID from Sc_DayPlanPPBomBillMain where FID IN (
select distinct FDAYPLANFID from T_PRD_PICKMTRLDATA)
)
and T4.FMustQty>0
-- (
-- select  FDayPlanFID FROM Sc_DayPlanPPBomBillMain WHERE FID IN ( select distinct FID from  Sc_DayPlanPPBomBillSub WHERE FTranslateQty >0 or FPickedQty >0)
-- )
"
);
                LogHelper.Info("生成日计划用料清单准备数据sql:" + sql);
@@ -1909,7 +1913,8 @@
                            FIssueType = dr["FIssueType"].ToString(),
                            FMaterialType = dr["FMaterialType"].ToString(),
                            FDayPlanFSEQ = dr["FDayPlanFSEQ"].ToString(),
                            FDayPlanFBILLNO = dr["FDayPlanFBILLNO"].ToString()
                            FDayPlanFBILLNO = dr["FDayPlanFBILLNO"].ToString(),
                            FWORKSHOPID = dr["FWORKSHOPID"].ToString()
                        });
                    }
                    LogHelper.Info($"日计划用料清单,数据准备完成,保存到Model实体,总行数:{DayPlanMaterial.Count},耗时:" + sw.Elapsed);
@@ -1959,7 +1964,8 @@
                            ModelEnty.Add("FMOID", _item.FMOID);//  
                            ModelEnty.Add("FISSUETYPE", _item.FIssueType);//  
                            ModelEnty.Add("FMaterialType", _item.FMaterialType);//  
                                                                                // ModelEnty.Add("FSEQ", FSEQ);//
                            ModelEnty.Add("FWORKSHOPID", new JObject() { ["Fnumber"] = _item.FWORKSHOPID });//
                            Entry.Add(ModelEnty);
                            FSEQ++;
@@ -1997,13 +2003,7 @@
                                var resultAA = String.Join(",", ls.ToArray());
                                string resSql = string.Format(@"/*dialect*/ update Sc_WorkBillSortBillSub set Sc_WorkBillSortBillSub.FDAYPLANPPBOMBILLNO = Sc_DayPlanPPBomBillMain.FBILLNO from Sc_WorkBillSortBillSub   join Sc_DayPlanPPBomBillMain   on Sc_WorkBillSortBillSub.FEntryID = Sc_DayPlanPPBomBillMain.FDayPlanFID where Sc_DayPlanPPBomBillMain.FID in ({0})", resultAA);
                                DBServiceHelper.Execute(Context, resSql);
                                //JArray array = JArray.Parse(m);
                                //for (int mm = 0; mm < array.Count; mm++)
                                //{
                                //    JObject b = JObject.Parse(array[mm].ToString());
                                //    var id = b["ID"].ToString();
                                //}
                            }
                            if (saveIsSuc != "TRUE")
                            {
@@ -2137,7 +2137,7 @@
                        _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId && x.FQTY > 0).OrderBy(x => x.FENTRYID).ToList();
                        if (_PurchaseInventory.Count == 0)
                        {
                            LogHelper.Info("[提料计划开始]当前物料明细无采购信息:" + item.FMATERIALID + " 库存组织:" + item.FStockOrgId);
                            //LogHelper.Info("[提料计划开始]当前物料明细无采购信息:" + item.FMATERIALID + " 库存组织:" + item.FStockOrgId);
                            break;
                        }
@@ -2161,7 +2161,7 @@
                        //{
                        foreach (var Purchase in _PurchaseInventory)
                        {
                            LogHelper.Info("采购订单号测试:" + Purchase.FBillNo);
                            //LogHelper.Info("采购订单号测试:" + Purchase.FBillNo);
                            //LogHelper.Info("物料:" + Purchase.FMATERIALID + ",采购订单数量:" + Purchase.FQTY);
                            if (Purchase.FQTY >= NeedQty)
                            {
src/BLL/Demo.BillView/PRD/Pro_ZJDBSH.cs
@@ -12,10 +12,15 @@
using System.ComponentModel;
using Kingdee.BOS.ServiceHelper;
using Kingdee.K3.SCM.App;
using System.Diagnostics;
using ZD.Cloud.Logger;
using System.Data;
using Kingdee.BOS;
using Kingdee.BOS.App.Data;
namespace Demo.DynamicForm.PRD
{
    [Description("[直接调拨单-审核]按钮功能]")]
    [HotUpdate]
    public class Pro_ZJDBSH : AbstractOperationServicePlugIn
@@ -34,9 +39,41 @@
            e.FieldKeys.Add("FBaseJoinQty");
            e.FieldKeys.Add("FDayPlanBillNo");
            e.FieldKeys.Add("FDayPlanFentryId");
            e.FieldKeys.Add("FBaseQty");
        }
        ///// <summary>
        /////反审核 反更新日计划用料清单调拨数量
        ///// </summary>
        ///// <param name="e"></param>
        //public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
        //{
        //    base.AfterExecuteOperationTransaction(e);
        //    Stopwatch sw = new Stopwatch();
        //    sw.Start();//开始计时
        //    List<string> sqlList = new List<string>();
        //    string sql = "";
        //    //审核时更新生产用料清单表明细调拨数量
        //    Entity entity = this.BusinessInfo.GetEntity("FBillEntry");//获取明细信息
        //    foreach (var billObj in e.SelectedRows)
        //    {
        //        DynamicObjectCollection entryRows = entity.DynamicProperty.GetValue(billObj.DataEntity)
        //                    as DynamicObjectCollection;
        //        foreach (var entryRow in entryRows)
        //        {
        //            //生产用料清单为空时
        //            if (Convert.ToString(entryRow["FDayPlanBillNo"]) == "")
        //                continue;
        //            string fentryId = entryRow["FDayPlanFentryId"].ToString();
        //            sql = string.Format($"/*dialect*/update Sc_DayPlanPPBomBillSub set  FTranslateQty + = {Convert.ToDecimal(entryRow["FBaseQty"])} where FEntryID = { fentryId} ");
        //            sqlList.Add(sql);
        //        }
        //    }
        //    DBServiceHelper.ExecuteBatch(Context, sqlList);
        //    sw.Stop();//结束计时
        //    LogHelper.Info("生成日计划用料清单运行总时长:" + sw.Elapsed);
        //}
        /// <summary>
        ///反审核 反更新日计划用料清单调拨数量
        ///反审核 反更新日计划用料清单调拨数量
        /// </summary>
        /// <param name="e"></param>
        public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
@@ -44,23 +81,54 @@
            base.AfterExecuteOperationTransaction(e);
            List<string> sqlList = new List<string>();
            string sql = "";
            //审核时更新生产用料清单表明细调拨数量
            Entity entity = this.BusinessInfo.GetEntity("FBillEntry");//获取明细信息
            //审核时更新日计划用料清单表明细调拨数量
            foreach (var billObj in e.SelectedRows)
            {
                DynamicObjectCollection entryRows = entity.DynamicProperty.GetValue(billObj.DataEntity)
                            as DynamicObjectCollection;
                foreach (var entryRow in entryRows)
                {
                    //生产用料清单为空时
                    if (Convert.ToString(entryRow["FDayPlanBillNo"]) == "")
                        continue;
                    string fentryId = entryRow["FDayPlanFentryId"].ToString();
                    sql = string.Format($"/*dialect*/update Sc_DayPlanPPBomBillSub set  FTranslateQty = (select sum(FBaseQty) from T_STK_STKTRANSFERINENTRY where FDayPlanFentryId = { fentryId})where FEntryID = { fentryId} ");
                    //if (fentryId == "0")
                    //    continue;
                    sql = string.Format($"/*dialect*/update Sc_DayPlanPPBomBillSub set  FTranslateQty  = FTranslateQty+{Convert.ToDecimal(entryRow["BaseQty"])} where FEntryID = { fentryId} ");
                    sqlList.Add(sql);
                }
            }
            DBServiceHelper.ExecuteBatch(Context, sqlList);
        }
        private void BatchUpdate()
        {
            // 定义一个DataTable:存储待更新的数据
            DataTable dt = new DataTable();
            dt.TableName = "JD_t_Cust_Entry100001";
            var idCol = dt.Columns.Add("FID");
            idCol.DataType = typeof(long);
            var billNoCol = dt.Columns.Add("FBillNo");
            billNoCol.DataType = typeof(string);
            // 灌入测试数据
            dt.BeginLoadData(); // 执行此方法,可以提升灌入数据性能
            for (int i = 1; i <= 10; i++)
            {
                dt.LoadDataRow(new object[] { i, i.ToString() }, true);
            }
            dt.EndLoadData(); // 灌入数据结束
                              // 准备批量更新服务参数
                              // tableName : 待更新的物理表格名
                              // dt : 待更新的数据
            BatchSqlParam batchUpdateParam = new BatchSqlParam("JD_t_Cust_Entry100001", dt);
            // 设置匹配字段:即DataTable中的数据,与物理表格以那个字段进行匹配
            // 匹配字段可以添加多个
            // columnName: DataTable中的列名
            // fieldName : 物料表格中匹配的字段名
            batchUpdateParam.AddWhereExpression("FID", KDDbType.Int64, "FID");
            // 设置待更新的字段
            // columnName: DataTable中的列名
            // fieldName : 对应的物料表格字段名
            batchUpdateParam.AddSetExpression("FBillNo", KDDbType.String, "FBillNo");
            // 执行批量更新
            DBUtils.BatchUpdate(this.Context, batchUpdateParam);
        }
    }
}
src/BLL/Demo.BillView/PRD/SAL_SaleOrderSplitBill.cs
New file
@@ -0,0 +1,840 @@
using Demo.Common.Untility;
using Demo.Model.Log;
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.ServiceHelper;
using Kingdee.BOS.Util;
using Kingdee.BOS.WebApi.Client;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using ZD.Cloud.Logger;
using ZD.Cloud.WebApi;
namespace Demo.OperationService.SCM.SAL_SaleOrder
{
    [HotUpdate]
    [Description("销售订单审核拆单")]
    public class SAL_SaleOrderSplitBill : AbstractOperationServicePlugIn
    {
        private void CreateQkForm(AfterExecuteOperationTransaction e)
        {
            var client = KingdeeClient.ApiLogin(Context);
            foreach (var data in e.DataEntitys)
            {
                var billNo = data.GetValue<string>("BillNo");
                LogService.WriteAsync("SAL_SaleOrderSplitBill=>"+billNo);
                if (data.GetValue<bool>("FIsSplitBill") || data.GetValue<string>("RedBule") == "1") continue;
                //LogService.WriteAsync($"BillNo={billNo},FIsSplitBill={data.GetValue<bool>("FIsSplitBill")},FISLAST={data.GetValue<bool>("FISLAST")},RedBule={data.GetValue<string>("RedBule")}");
                var id = data.GetValue<int>("Id");
                //如果单据已经是_A,在审核时候直接跳过执行
                if (billNo.EndsWith("_A")) continue;
                var sql = $"Exec V_FilterSaleOrder @id={id}";
                var table = DBServiceHelper.ExecuteDataSet(this.Context, sql).Tables[0];
                LogService.WriteAsync(table);
                if (table.Rows.Count == 0) continue;
                string sql3 = $"select top 1 F_YQN_ZDR,FNOTE from T_SAL_ORDER WHERE FID={id}";
                var table3 = DBServiceHelper.ExecuteDataSet(this.Context, sql3).Tables[0];
                var model = new
                {
                    FBillTypeID = new
                    {
                        FNUMBER = Context.DBId == "5ffd9795291fb7" ? "XSDD01_SYS" : "XSDD101_SYS"
                    },
                    FDate = DateTime.Now,
                    FSaleOrgId = new
                    {
                        FNumber = "100"
                    },
                    FCustId = new
                    {
                        FNumber = "AR07000000022"
                    },
                    FReceiveId = new
                    {
                        FNumber = "AR07000000022"
                    },
                    FSaleGroupId = new
                    {
                        FNumber = "100002"
                    },
                    FSalerId = new
                    {
                        FNumber = "D080190016"
                    },
                    //FLinkPhone= "13757508209",
                    FSettleId = new
                    {
                        FNumber = "AR07000000022"
                    },
                    FChargeId = new
                    {
                        FNumber = "AR07000000022"
                    },
                    F_zzzz_Assistant = new
                    {
                        FNumber = "087"
                    },
                    FPAYCUSTOMER = new
                    {
                        FNUMBER = "AR07000000022"
                    },
                    FISGUARANTEE = true,
                    FBillNo = $"{billNo}_A",
                    F_YQN_ZDR = table3.Rows.Count == 0 ? string.Empty : table3.Rows[0][0],//制单人
                    FNOTE = table3.Rows.Count == 0 ? string.Empty : table3.Rows[0][1],//整单摘要
                    FSaleOrderEntry = table.AsEnumerable().Select(row => new
                    {
                        FSUBMATERIALNUMBER = new
                        {
                            FNumber = Context.DBId == "5ffd9795291fb7" ? "CSCS0001" : "F9900000000"
                        },
                        FRowType = "Standard",
                        FDeliveryDate = DateTime.Now,
                        FStockOrgId = new
                        {
                            FNumber = "100"
                        },
                        FSettleOrgIds = new
                        {
                            FNumber = "100"
                        },
                        FSupplyOrgId = new
                        {
                            FNumber = "100"
                        },
                        FOwnerTypeId = "BD_OwnerOrg",
                        FOwnerId = new
                        {
                            FNumber = "100"
                        },
                        FReserveType = "1",
                        FOUTLMTUNIT = "SAL",
                        FMaterialId = new
                        {
                            FNumber = row["MaterialNo"]
                        },
                        F_YQN_DYXH = "CS001",
                        FSOSTOCKID = new
                        {
                            FNumber = row["FStockNo"]
                        },
                        FLot = new
                        {
                            FNumber = row["LotNo"]
                        },
                        FLOT_TEXT=row["FLotName"],
                        FQty = row["Qty"]
                    })
                };
                LogService.WriteAsync(model);
                var restlt = client.Save("SAL_SaleOrder", JsonConvert.SerializeObject(new { Model = model }));
                LogService.WriteAsync(restlt);
                var response = JsonConvert.DeserializeObject<KingdeeResponse2>(restlt);
                if (response.Result.ResponseStatus.IsSuccess)
                {
                    var ids = JsonConvert.SerializeObject(new { Ids = response.Result.ResponseStatus.SuccessEntitys[0].Id });
                    LogService.WriteAsync(ids);
                    var r = client.Submit("SAL_SaleOrder", ids);
                    LogService.WriteAsync(r);
                    r = client.Audit("SAL_SaleOrder", ids);
                }
                foreach (var item in this.OperationResult.OperateResult)
                {
                    if (item.PKValue?.ToString() == id.ToString())
                    {
                        item.Message += response.Result.ResponseStatus.IsSuccess ? $"生成墙咔领料单据{billNo}_A" : $"{billNo}生成强卡领料单据失败:{JsonConvert.SerializeObject(response.Result.ResponseStatus.Errors.Select(x => x.Message + ";"))}";
                    }
                }
            }
        }
        public override void OnPreparePropertys(PreparePropertysEventArgs e)
        {
            base.OnPreparePropertys(e);
            #region 字段信息加载
            e.FieldKeys.Add("FOrderEntryPlan");
            e.FieldKeys.Add("FIsSplitBill");
            e.FieldKeys.Add("FOverOrgTransDirect");
            e.FieldKeys.Add("FExchangeTypeId");
            e.FieldKeys.Add("FIsIncludedTax");
            e.FieldKeys.Add("FSettleModeId");
            e.FieldKeys.Add("FIsPriceExcludeTax");
            e.FieldKeys.Add("FRecConditionId");
            e.FieldKeys.Add("FSettleCurrId");
            e.FieldKeys.Add("FIsSplitBill");
            e.FieldKeys.Add("F_zzzz_CheckBox2");
            e.FieldKeys.Add("F_zzzz_Text7");
            e.FieldKeys.Add("FCollectionTime");
            e.FieldKeys.Add("F_zzzz_Assistant");
            e.FieldKeys.Add("FDifferenceAmount");
            e.FieldKeys.Add("F_zzzz_Text8");
            e.FieldKeys.Add("FLCLSituation");
            e.FieldKeys.Add("FCustInvioce");
            e.FieldKeys.Add("FPAYCUSTOMER");
            e.FieldKeys.Add("FWEBANKACCOUNT");
            e.FieldKeys.Add("FHEADLOCID");
            e.FieldKeys.Add("FIsMobile");
            e.FieldKeys.Add("FNote");
            e.FieldKeys.Add("FISINIT");
            e.FieldKeys.Add("FChargeId");
            e.FieldKeys.Add("FReceiveContact");
            e.FieldKeys.Add("FSettleId");
            e.FieldKeys.Add("FReceiveAddress");
            e.FieldKeys.Add("FLinkPhone");
            e.FieldKeys.Add("FSalerId");
            e.FieldKeys.Add("FSaleGroupId");
            e.FieldKeys.Add("FSaleDeptId");
            e.FieldKeys.Add("FReceiveId");
            e.FieldKeys.Add("FCOLLECTBALANCEAMOUNT");
            e.FieldKeys.Add("FCustId");
            e.FieldKeys.Add("FSaleOrgId");
            e.FieldKeys.Add("FDate");
            e.FieldKeys.Add("FBillTypeID");
            e.FieldKeys.Add("FRowType");
            e.FieldKeys.Add("FMaterialId");
            e.FieldKeys.Add("FSUBMATERIALNUMBER");
            e.FieldKeys.Add("FMapId");
            e.FieldKeys.Add("FUnitID");
            e.FieldKeys.Add("FQty");
            e.FieldKeys.Add("FPrice");
            e.FieldKeys.Add("FTaxPrice");
            e.FieldKeys.Add("F_zzzz_Decimal4");
            e.FieldKeys.Add("FLot");
            e.FieldKeys.Add("FIsFree");
            e.FieldKeys.Add("FEntryTaxRate");
            e.FieldKeys.Add("FDeliveryDate");
            e.FieldKeys.Add("FStockOrgId");
            e.FieldKeys.Add("FSettleOrgIds");
            e.FieldKeys.Add("FSupplyOrgId");
            e.FieldKeys.Add("FOwnerTypeId");
            e.FieldKeys.Add("FOwnerId");
            e.FieldKeys.Add("FEntryNote");
            e.FieldKeys.Add("FReserveType");
            e.FieldKeys.Add("F_zzzz_Text9");
            e.FieldKeys.Add("FPriceBaseQty");
            e.FieldKeys.Add("FStockUnitID");
            e.FieldKeys.Add("FStockQty");
            e.FieldKeys.Add("FStockBaseQty");
            e.FieldKeys.Add("FOUTLMTUNIT");
            e.FieldKeys.Add("FOutLmtUnitID");
            e.FieldKeys.Add("FISMRP");
            e.FieldKeys.Add("FLOCKSTOCK");
            e.FieldKeys.Add("F_zzzz_Combo1");
            e.FieldKeys.Add("F_zzzz_CheckBox");
            e.FieldKeys.Add("F_zzzz_Text");
            e.FieldKeys.Add("F_zzzz_Assistant2");
            e.FieldKeys.Add("F_zzzz_Decimal7");
            e.FieldKeys.Add("F_zzzz_Decimal8");
            e.FieldKeys.Add("FSpecialOffer");
            e.FieldKeys.Add("FMESScheduling");
            e.FieldKeys.Add("FMESScheduling");
            e.FieldKeys.Add("FIsUnsalablePrd");
            e.FieldKeys.Add("FPlanProdDate");
            e.FieldKeys.Add("FQitao");
            e.FieldKeys.Add("FOrderEntryPlan");
            e.FieldKeys.Add("FDetailLocId");
            e.FieldKeys.Add("FDetailLocAddress");
            e.FieldKeys.Add("FPlanDate");
            e.FieldKeys.Add("FTransportLeadTime");
            e.FieldKeys.Add("FPlanQty");
            e.FieldKeys.Add("FCOLLECTIONNO");
            e.FieldKeys.Add("FOtherARBillNo");
            e.FieldKeys.Add("F_YQN_ZDR");
            e.FieldKeys.Add("FCreatorId");
            e.FieldKeys.Add("FISGuarantee");
            e.FieldKeys.Add("F_zzzz_DDBZ");
            e.FieldKeys.Add("F_YQN_CSHDDBH");
            e.FieldKeys.Add("FCreatorId");
            e.FieldKeys.Add("FModifierId");
            e.FieldKeys.Add("F_YQN_DYXH");
            e.FieldKeys.Add("F_YQN_GYS");
            e.FieldKeys.Add("F_YQN_CGY1");
            e.FieldKeys.Add("FFIRSTPRINTTIME");
            e.FieldKeys.Add("F_ZZZZ_PRINTTIMES");
            e.FieldKeys.Add("F_zzzz_PrintDateTime");
            e.FieldKeys.Add("FFirstTime");
            e.FieldKeys.Add("FLastTime");
            e.FieldKeys.Add("FPrintCount");
            e.FieldKeys.Add("FIsNeedCheck");
            e.FieldKeys.Add("FISCASHSALE");
            e.FieldKeys.Add("F_ZZZZ_QIAO");
            e.FieldKeys.Add("F_ZZZZ_OEM");
            e.FieldKeys.Add("FPushPrdPlan");
            e.FieldKeys.Add("FLotTxt");
            e.FieldKeys.Add("F_zzzz_Decimal");
            e.FieldKeys.Add("F_zzzz_Decimal1");
            e.FieldKeys.Add("F_zzzz_Assistant3");
            e.FieldKeys.Add("F_zzzz_Assistant4");
            e.FieldKeys.Add("F_zzzz_Assistant6");
            e.FieldKeys.Add("F_zzzz_Assistant7");
            e.FieldKeys.Add("F_zzzz_Assistant8");
            e.FieldKeys.Add("F_zzzz_Assistant9");
            e.FieldKeys.Add("FLossParam");
            e.FieldKeys.Add("F_zzzz_Decimal5");
            e.FieldKeys.Add("F_zzzz_Text1");
            e.FieldKeys.Add("F_zzzz_Assistant1");
            e.FieldKeys.Add("FSOStockId");
            e.FieldKeys.Add("F_zzzz_FLBZ");
            e.FieldKeys.Add("F_zzzz_WBBZ");
            e.FieldKeys.Add("FISLAST");
            e.FieldKeys.Add("F_zzzz_CQFS");
            e.FieldKeys.Add("F_zzzz_MLKD");
            e.FieldKeys.Add("F_zzzz_BGD");
            e.FieldKeys.Add("F_zzzz_BKD");
            e.FieldKeys.Add("F_zzzz_DDSL");
            e.FieldKeys.Add("F_CUT_TIME");
            e.FieldKeys.Add("F_BZ_TIME");
            e.FieldKeys.Add("F_loss_backup");
            e.FieldKeys.Add("FIsCustomerProvide");
            e.FieldKeys.Add("FISREFRESHLOT");
            e.FieldKeys.Add("F_zzzz_WBBZ1");
            e.FieldKeys.Add("FSaleQty");
            e.FieldKeys.Add("FTotalAmount");
            e.FieldKeys.Add("FLotEmptyDate");
            e.FieldKeys.Add("FSaleOutLot");
            e.FieldKeys.Add("FIsClose");
            e.FieldKeys.Add("FIsStatistics");
            e.FieldKeys.Add("F_zzzz_CheckBox1");
            e.FieldKeys.Add("F_zzzz_Text3");
            e.FieldKeys.Add("F_zzzz_Text4");
            e.FieldKeys.Add("F_zzzz_Text5");
            e.FieldKeys.Add("F_zzzz_Text10");
            e.FieldKeys.Add("F_zzzz_Text11");
            e.FieldKeys.Add("F_zzzz_Integer");
            e.FieldKeys.Add("FParentDateTime");
            e.FieldKeys.Add("FChildrenDatetime");
            e.FieldKeys.Add("FSplitSBillNo");
            e.FieldKeys.Add("FIsNeedAllSend");
            e.FieldKeys.Add("F_XSDD_PGBZ");
            e.FieldKeys.Add("F_XSDD_PGSJ");
            #endregion
        }
        public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
        {
            base.AfterExecuteOperationTransaction(e);
            CreateQkForm(e);
            var srcDatas = e.SelectedRows;
            //// 使用webapi引用组件Kingdee.BOS.WebApi.Client.dll,进行单据处理
            //K3CloudApiClient client = new K3CloudApiClient("http://localhost/k3Cloud/");
            ////var loginResult = client.ValidateLogin("5fe40ecc0b7bf2", "Administrator", "888888", 2052);//本地环境
            //var loginResult = client.ValidateLogin("5f56ea565892f4", "Administrator", "ycy123", 2052);//正式环境
            //var resultType = JObject.Parse(loginResult)["LoginResultType"].Value<int>();
            ////登录结果类型等于1,代表登录成功
            //if (resultType == 1)
            //{
            CloudClient client = new CloudClient("http://localhost/k3Cloud/");
            WriteLog.SAL_SaleOrderSplitBill("订单审核拆单", "API登录成功");
            Dictionary<string, string> dictionary = new Dictionary<string, string>();
            foreach (var srcData in srcDatas)
            {
                //string billno = srcData["BillNo"].ToString();//单据编号
                //string UnAuditResult = client.UnAudit("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":['" + billno + "'],\"Ids\":\"\",\"InterationFlags\":\"\",\"NetworkCtrl\":\"\"}");
                //JObject UnAuditResultObj = JObject.Parse(UnAuditResult);
                //if (UnAuditResultObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() == "TRUE")
                //{
                //    string DeleteResult = client.Delete("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":['" + billno + "'],\"Ids\":\"\",\"NetworkCtrl\":\"\"}");
                //}
                bool curr = false;
                string idlist = string.Empty;//暂存单据集合
                string savejsonlist = string.Empty;//暂存单据保存JSON
                string billno = srcData["BillNo"].ToString();//单据编号
                bool IsSplitBill = bool.Parse(srcData["FIsSplitBill"].ToString());//是否拆单
                if (IsSplitBill)
                {
                    try
                    {
                        WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "符合拆单条件:" + billno);
                        string sql = $@"/*dialect*/SELECT B.FQitao
                                    FROM dbo.T_SAL_ORDER A(NOLOCK)
                                    JOIN dbo.T_SAL_ORDERENTRY B(NOLOCK) ON B.FID = A.FID
                                    WHERE A.FBILLNO='{billno}'
                                    GROUP BY B.FQitao";
                        DataTable data = DBServiceHelper.ExecuteDataSet(this.Context, sql).Tables[0];
                        //拆单
                        for (int i = 0; i < data.Rows.Count; i++)
                        {
                            WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "进入拆单循环");
                            #region 拼接表头
                            string SplitBillNo = billno + "-" + (i + 1);//拆单单号
                            StringBuilder sJson = new StringBuilder();
                            sJson.Append("{");
                            sJson.Append("\"NeedUpDateFields\": [],");
                            sJson.Append("\"NeedReturnFields\": [],");
                            sJson.Append("\"IsDeleteEntry\": \"true\",");
                            sJson.Append("\"SubSystemId\": \"\",");
                            sJson.Append("\"IsVerifyBaseDataField\": \"true\",");
                            sJson.Append("\"IsEntryBatchFill\": \"true\",");
                            sJson.Append("\"ValidateFlag\": \"true\",");
                            sJson.Append("\"NumberSearch\": \"true\",");
                            sJson.Append("\"InterationFlags\": \"\",");
                            sJson.Append("\"Model\": {");
                            sJson.Append("\"FID\": 0,");
                            sJson.Append("\"FBillTypeID\": {\"FNUMBER\": \"" + ((srcData["BillTypeID"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                            sJson.Append("\"FDate\": \"" + (srcData["Date"]?.ToString() ?? "") + "\",");
                            sJson.Append("\"FSaleOrgId\": {\"FNumber\": \"" + ((srcData["SaleOrgId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                            sJson.Append("\"FCustId\": {\"FNumber\": \"" + ((srcData["CustId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                            sJson.Append("\"FBillNo\": \"" + SplitBillNo + "\",");
                            sJson.Append("\"FCOLLECTBALANCEAMOUNT\": " + (srcData["COLLECTBALANCEAMOUNT"]?.ToString() ?? "0") + ",");
                            sJson.Append("\"FReceiveId\": {\"FNumber\": \"" + ((srcData["ReceiveId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                            sJson.Append("\"FSaleDeptId\": {\"FNumber\": \"" + ((srcData["SaleDeptId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                            sJson.Append("\"FSaleGroupId\": {\"FNumber\": \"" + ((srcData["SaleGroupId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                            sJson.Append("\"FSalerId\": {\"FNumber\": \"" + ((srcData["SalerId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                            sJson.Append("\"FSettleId\": {\"FNumber\": \"" + ((srcData["SettleId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                            sJson.Append("\"FReceiveContact\": {\"FNumber\": \"" + ((srcData["ReceiveContact"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                            sJson.Append("\"FChargeId\": {\"FNumber\": \"" + ((srcData["ChargeId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                            sJson.Append("\"FISINIT\": \"" + (srcData["ISINIT"]?.ToString() ?? "False") + "\",");
                            sJson.Append("\"FISGuarantee\": \"" + (srcData["ISGuarantee"]?.ToString() ?? "false") + "\",");
                            if ((srcData["F_YQN_ZDR"]?.ToString() ?? "") == "")
                            {
                                sJson.Append("\"F_YQN_ZDR\": \"" + ((srcData["CreatorId"] as DynamicObject)?["Name"].ToString() ?? "") + "\",");
                            }
                            else
                            {
                                sJson.Append("\"F_YQN_ZDR\": \"" + (srcData["F_YQN_ZDR"]?.ToString() ?? "") + "\",");
                            }
                            sJson.Append("\"FISCASHSALE\": \"" + (srcData["ISCASHSALE"]?.ToString() ?? "false") + "\",");
                            sJson.Append("\"FIsNeedCheck\": \"True\",");
                            sJson.Append("\"FISLAST\": \"False\",");
                            sJson.Append("\"FFIRSTPRINTTIME\": \"" + (srcData["FFIRSTPRINTTIME"]?.ToString() ?? "") + "\",");
                            sJson.Append("\"F_zzzz_PrintDateTime\": \"" + (srcData["F_zzzz_PrintDateTime"]?.ToString() ?? "") + "\",");
                            sJson.Append("\"F_ZZZZ_PRINTTIMES\": " + (srcData["F_ZZZZ_PRINTTIMES"]?.ToString() ?? "0") + ",");
                            sJson.Append("\"FFirstTime\": \"" + (srcData["FFirstTime"]?.ToString() ?? "") + "\",");
                            sJson.Append("\"FLastTime\": \"" + (srcData["FLastTime"]?.ToString() ?? "") + "\",");
                            sJson.Append("\"FPrintCount\": " + (srcData["FPrintCount"]?.ToString() ?? "0") + ",");
                            sJson.Append("\"F_YQN_CSHDDBH\": \"" + (srcData["F_YQN_CSHDDBH"]?.ToString() ?? "") + "\",");
                            sJson.Append("\"FCOLLECTIONNO\": \"" + (srcData["COLLECTIONNO"]?.ToString() ?? "") + "\",");
                            sJson.Append("\"FOtherARBillNo\": \"" + (srcData["OtherARBillNo"]?.ToString() ?? "") + "\",");
                            sJson.Append("\"FNote\": \"" + (srcData["Note"]?.ToString() ?? "") + "\",");
                            sJson.Append("\"FIsMobile\": \"" + (srcData["IsMobile"]?.ToString() ?? "false") + "\",");
                            sJson.Append("\"FHEADLOCID\": {\"FNUMBER\": \"" + ((srcData["HEADLOCID"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                            sJson.Append("\"FWEBANKACCOUNT\": {\"FNUMBER\": \"" + ((srcData["WEBANKACCOUNT"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                            sJson.Append("\"FPAYCUSTOMER\": {\"FNUMBER\": \"" + ((srcData["PAYCUSTOMER"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                            sJson.Append("\"FCustInvioce\": {\"FNUMBER\": \"" + ((srcData["CustInvioce"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                            sJson.Append("\"FLCLSituation\": \"" + (srcData["LCLSituation"]?.ToString() ?? "") + "\",");
                            sJson.Append("\"F_zzzz_Text8\": \"" + (srcData["F_zzzz_Text8"]?.ToString() ?? "") + "\",");
                            //sJson.Append("\"FDifferenceAmount\": " + (srcData["FDifferenceAmount"]?.ToString() ?? "0") + ",");
                            sJson.Append("\"FCollectionTime\": \"" + (srcData["CollectionTime"]?.ToString() ?? "") + "\",");
                            sJson.Append("\"F_zzzz_CheckBox2\": \"" + (srcData["F_zzzz_CheckBox2"]?.ToString() ?? "") + "\",");
                            sJson.Append("\"FIsSplitBill\": \"false\",");
                            sJson.Append("\"F_zzzz_Assistant\": {\"FNumber\": \"" + ((srcData["F_zzzz_Assistant"] as DynamicObject)?["FNumber"].ToString() ?? "") + "\"},");
                            sJson.Append("\"FLinkPhone\": \"" + (srcData["FLinkPhone"]?.ToString() ?? "") + "\",");
                            sJson.Append("\"FReceiveAddress\": \"" + (srcData["ReceiveAddress"]?.ToString() ?? "") + "\",");
                            sJson.Append("\"F_zzzz_Text7\": \"" + (srcData["F_zzzz_Text7"]?.ToString() ?? "") + "\",");
                            sJson.Append("\"FCreatorId\": {\"FUserID\": " + (srcData["CreatorId_Id"]?.ToString() ?? "0") + "},");
                            sJson.Append("\"FModifierId\": {\"FUserID\": " + (srcData["ModifierId_Id"]?.ToString() ?? "0") + "},");
                            sJson.Append("\"F_zzzz_FLBZ\": \"" + (srcData["F_zzzz_FLBZ"]?.ToString() ?? "") + "\",");
                            sJson.Append("\"F_zzzz_WBBZ\": \"" + (srcData["F_zzzz_WBBZ"]?.ToString() ?? "") + "\",");
                            sJson.Append("\"FIsStatistics\": \"True\",");
                            string no = billno;
                            string bno = string.Empty;
                            if ((no.IndexOf("_") == -1 ? 99999 : no.IndexOf("_")) > (no.IndexOf("-") == -1 ? 99999 : no.IndexOf("-")))
                            {
                                bno = no.Substring(0, no.IndexOf("-"));
                            }
                            else if ((no.IndexOf("_") == -1 ? 99999 : no.IndexOf("_")) < (no.IndexOf("-") == -1 ? 99999 : no.IndexOf("-")))
                            {
                                bno = no.Substring(0, no.IndexOf("_"));
                            }
                            else if ((no.IndexOf("_") == -1 ? 99999 : no.IndexOf("_")) == (no.IndexOf("-") == -1 ? 99999 : no.IndexOf("-")))
                            {
                                bno = no;
                            }
                            sJson.Append("\"FSplitSBillNo\": \""+ bno + "\",");
                            sJson.Append("\"FIsNeedAllSend\": \"" + (srcData["FIsNeedAllSend"]?.ToString() ?? "false") + "\",");
                            sJson.Append("\"F_zzzz_CheckBox1\": \"" + (srcData["F_zzzz_CheckBox1"]?.ToString() ?? "false") + "\",");
                            sJson.Append("\"FIsCustomerProvide\": \"" + (srcData["FIsCustomerProvide"]?.ToString() ?? "false") + "\",");
                            DynamicObjectCollection SaleDataFinance = srcData["SaleOrderFinance"] as DynamicObjectCollection;//财务明细
                            sJson.Append("\"FSaleOrderFinance\":");
                            sJson.Append("{");
                            sJson.Append("\"FSettleCurrId\": {\"FNumber\": \"" + ((SaleDataFinance[0]["SettleCurrId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                            sJson.Append("\"FRecConditionId\": {\"FNumber\": \"" + ((SaleDataFinance[0]["RecConditionId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                            sJson.Append("\"FIsPriceExcludeTax\": \"" + (SaleDataFinance[0]["IsPriceExcludeTax"]?.ToString() ?? "false") + "\",");
                            sJson.Append("\"FSettleModeId\": {\"FNumber\": \"" + ((SaleDataFinance[0]["SettleModeId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                            sJson.Append("\"FIsIncludedTax\": \"" + (SaleDataFinance[0]["IsIncludedTax"]?.ToString() ?? "false") + "\",");
                            sJson.Append("\"FExchangeTypeId\": {\"FNumber\": \"" + ((SaleDataFinance[0]["ExchangeTypeId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                            sJson.Append("\"FOverOrgTransDirect\": \"" + (SaleDataFinance[0]["OverOrgTransDirect"]?.ToString() ?? "false") + "\"");
                            sJson.Append("},");
                            sJson.Append("\"FSaleOrderEntry\": [");
                            #endregion
                            WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "表头JSON处理完");
                            //拆明细
                            DynamicObjectCollection SaleData = srcData["SaleOrderEntry"] as DynamicObjectCollection;//订单明细
                            string sqldtl = $@"/*dialect*/SELECT B.FSEQ
                                        FROM dbo.T_SAL_ORDER A(NOLOCK)
                                        JOIN dbo.T_SAL_ORDERENTRY B(NOLOCK) ON B.FID = A.FID
                                        WHERE A.FBILLNO='{billno}' AND B.FQitao='{data.Rows[i]["FQitao"]}'";
                            WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "表体拼接sql执行语句:" + sqldtl);
                            DataTable datadtl = DBServiceHelper.ExecuteDataSet(this.Context, sqldtl).Tables[0];
                            for (int j = 0; j < datadtl.Rows.Count; j++)
                            {
                                WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "表体循环开始");
                                int fseq = int.Parse(datadtl.Rows[j]["FSEQ"].ToString());
                                sJson.Append("{");
                                sJson.Append("\"FRowType\": \"" + (SaleData[fseq - 1]["RowType"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"FMapId\": {\"FName\": \"" + ((SaleData[fseq - 1]["MapId"] as DynamicObject)?["Name"].ToString() ?? "") + "\"},");
                                //sJson.Append("\"FSUBMATERIALNUMBER\": {\"FName\": \"" + ((SaleData[fseq - 1]["SUBMATERIALNUMBER"] as DynamicObject)?["Name"].ToString() ?? "") + "\"},");
                                sJson.Append("\"FSUBMATERIALNUMBER\": {\"FNUMBER\": \"" + ((SaleData[fseq - 1]["SUBMATERIALNUMBER"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                                //sJson.Append("\"FMaterialId\": {\"FName\": \"" + ((SaleData[fseq - 1]["MaterialId"] as DynamicObject)?["Name"].ToString() ?? "") + "\"},");
                                sJson.Append("\"FMaterialId\": {\"FNUMBER\": \"" + ((SaleData[fseq - 1]["MaterialId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                                sJson.Append("\"FUnitID\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["UnitID"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                                //sJson.Append("\"FPrice\": " + (SaleData[fseq - 1]["Price"]?.ToString() ?? "0") + ",");
                                sJson.Append("\"F_zzzz_Decimal4\": " + (SaleData[fseq - 1]["F_zzzz_Decimal4"]?.ToString() ?? "0") + ",");
                                sJson.Append("\"FIsFree\": \"" + (SaleData[fseq - 1]["IsFree"]?.ToString() ?? "false") + "\",");
                                sJson.Append("\"FEntryTaxRate\": " + (SaleData[fseq - 1]["TaxRate"]?.ToString() ?? "0") + ",");
                                sJson.Append("\"FDeliveryDate\": \"" + (SaleData[fseq - 1]["DeliveryDate"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"FStockOrgId\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["StockOrgId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                                sJson.Append("\"FSettleOrgIds\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["SettleOrgId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                                sJson.Append("\"FSupplyOrgId\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["SupplyOrgId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                                sJson.Append("\"FOwnerTypeId\": \"" + (SaleData[fseq - 1]["OwnerTypeId"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"FOwnerId\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["OwnerId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                                sJson.Append("\"FReserveType\": \"" + (SaleData[fseq - 1]["ReserveType"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"F_zzzz_Text9\": \" " + (SaleData[fseq - 1]["F_zzzz_Text9"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"FPriceBaseQty\": " + (SaleData[fseq - 1]["PriceBaseQty"]?.ToString() ?? "0") + ",");
                                sJson.Append("\"FStockUnitID\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["StockUnitID"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                                sJson.Append("\"FStockQty\": " + (SaleData[fseq - 1]["StockQty"]?.ToString() ?? "0") + ",");
                                sJson.Append("\"FStockBaseQty\": " + (SaleData[fseq - 1]["StockBaseQty"]?.ToString() ?? "0") + ",");
                                sJson.Append("\"F_zzzz_DDBZ\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["F_zzzz_DDBZ"] as DynamicObject)?["FNumber"].ToString() ?? "") + "\"},");
                                sJson.Append("\"FOUTLMTUNIT\": \"" + (SaleData[fseq - 1]["OUTLMTUNIT"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"FOutLmtUnitID\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["OutLmtUnitID"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                                sJson.Append("\"FISMRP\": \"" + (SaleData[fseq - 1]["FISMRP"]?.ToString() ?? "false") + "\",");
                                sJson.Append("\"FLOCKSTOCK\": \"" + (SaleData[fseq - 1]["LOCKSTOCK"]?.ToString() ?? "false") + "\",");
                                sJson.Append("\"F_zzzz_CheckBox\": \"" + (SaleData[fseq - 1]["F_zzzz_CheckBox"]?.ToString() ?? "false") + "\",");
                                sJson.Append("\"FPushPrdPlan\": \"" + (SaleData[fseq - 1]["FPushPrdPlan"]?.ToString() ?? "false") + "\",");
                                //sJson.Append("\"F_zzzz_CheckBox1\": \"" + (SaleData[fseq - 1]["F_zzzz_CheckBox1"]?.ToString() ?? "false") + "\",");
                                //sJson.Append("\"F_zzzz_Combo7\": \"" + (SaleData[fseq - 1]["F_zzzz_Combo7"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"F_zzzz_BKD\": " + (SaleData[fseq - 1]["F_zzzz_BKD"]?.ToString() ?? "0") + ",");
                                sJson.Append("\"F_zzzz_BGD\": " + (SaleData[fseq - 1]["F_zzzz_BGD"]?.ToString() ?? "0") + ",");
                                sJson.Append("\"F_zzzz_MLKD\": " + (SaleData[fseq - 1]["F_zzzz_MLKD"]?.ToString() ?? "0") + ",");
                                sJson.Append("\"F_zzzz_CQFS\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["F_zzzz_CQFS"] as DynamicObject)?["FNumber"].ToString() ?? "") + "\"},");
                                sJson.Append("\"F_zzzz_DDSL\": " + (SaleData[fseq - 1]["F_zzzz_DDSL"]?.ToString() ?? "0") + ",");
                                sJson.Append("\"F_ZZZZ_OEM\": \"" + (SaleData[fseq - 1]["F_ZZZZ_OEM"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"F_ZZZZ_QIAO\": \"" + (SaleData[fseq - 1]["F_ZZZZ_QIAO"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"F_YQN_DYXH\": \"" + (SaleData[fseq - 1]["F_YQN_DYXH"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"F_YQN_GYS\": \"" + (SaleData[fseq - 1]["F_YQN_GYS"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"F_YQN_CGY1\": \"" + (SaleData[fseq - 1]["F_YQN_CGY1"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"F_zzzz_Text\": \"" + (SaleData[fseq - 1]["F_zzzz_Text"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"F_zzzz_Assistant2\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["F_zzzz_Assistant2"] as DynamicObject)?["FNumber"].ToString() ?? "") + "\"},");
                                sJson.Append("\"F_zzzz_Decimal7\": " + (SaleData[fseq - 1]["F_zzzz_Decimal7"]?.ToString() ?? "0") + ",");
                                sJson.Append("\"F_zzzz_Decimal8\": " + (SaleData[fseq - 1]["F_zzzz_Decimal8"]?.ToString() ?? "0") + ",");
                                sJson.Append("\"FSpecialOffer\": \"" + (SaleData[fseq - 1]["SpecialOffer"]?.ToString() ?? "false") + "\",");
                                sJson.Append("\"FIsClose\": \"" + (SaleData[fseq - 1]["FIsClose"]?.ToString() ?? "A") + "\",");
                                sJson.Append("\"FMESScheduling\": \"" + (SaleData[fseq - 1]["FMESScheduling"]?.ToString() ?? "false") + "\",");
                                sJson.Append("\"FIsUnsalablePrd\": \"" + (SaleData[fseq - 1]["IsUnsalablePrd"]?.ToString() ?? "false") + "\",");
                                sJson.Append("\"FPlanProdDate\": \"" + (SaleData[fseq - 1]["PlanProdDate"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"FISREFRESHLOT\": \"" + (SaleData[fseq - 1]["FISREFRESHLOT"]?.ToString() ?? "false") + "\",");
                                sJson.Append("\"F_zzzz_Assistant3\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["F_zzzz_Assistant3"] as DynamicObject)?["FNumber"].ToString() ?? "") + "\"},");
                                sJson.Append("\"F_zzzz_Assistant4\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["F_zzzz_Assistant4"] as DynamicObject)?["FNumber"].ToString() ?? "") + "\"},");
                                sJson.Append("\"F_zzzz_Assistant6\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["F_zzzz_Assistant6"] as DynamicObject)?["FNumber"].ToString() ?? "") + "\"},");
                                sJson.Append("\"F_zzzz_Assistant7\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["F_zzzz_Assistant7"] as DynamicObject)?["FNumber"].ToString() ?? "") + "\"},");
                                sJson.Append("\"F_zzzz_Assistant8\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["F_zzzz_Assistant8"] as DynamicObject)?["FNumber"].ToString() ?? "") + "\"},");
                                sJson.Append("\"F_zzzz_Assistant9\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["F_zzzz_Assistant9"] as DynamicObject)?["FNumber"].ToString() ?? "") + "\"},");
                                sJson.Append("\"F_zzzz_Assistant1\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["F_zzzz_Assistant1"] as DynamicObject)?["FNumber"].ToString() ?? "") + "\"},");
                                sJson.Append("\"F_zzzz_Decimal\": " + (SaleData[fseq - 1]["F_zzzz_Decimal"]?.ToString() ?? "0") + ",");
                                sJson.Append("\"F_zzzz_Decimal1\": " + (SaleData[fseq - 1]["F_zzzz_Decimal1"]?.ToString() ?? "0") + ",");
                                sJson.Append("\"F_zzzz_Decimal5\": " + (SaleData[fseq - 1]["F_zzzz_Decimal5"]?.ToString() ?? "0") + ",");
                                sJson.Append("\"F_XSDD_PGBZ\": \"" + (SaleData[fseq - 1]["F_XSDD_PGBZ"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"F_XSDD_PGSJ\": \"" + (SaleData[fseq - 1]["F_XSDD_PGSJ"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"F_zzzz_Text1\": \"" + (SaleData[fseq - 1]["F_zzzz_Text1"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"F_zzzz_WBBZ1\": \"" + (SaleData[fseq - 1]["F_zzzz_WBBZ1"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"FSaleQty\": " + (SaleData[fseq - 1]["FSaleQty"]?.ToString() ?? "0") + ",");
                                sJson.Append("\"FTotalAmount\": " + (SaleData[fseq - 1]["FTotalAmount"]?.ToString() ?? "0") + ",");
                                sJson.Append("\"FLossParam\": " + (SaleData[fseq - 1]["LossParam"]?.ToString() ?? "0") + ",");
                                sJson.Append("\"FEntryNote\": \"" + (SaleData[fseq - 1]["Note"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"F_BZ_TIME\": \"" + (SaleData[fseq - 1]["F_BZ_TIME"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"F_CUT_TIME\": \"" + (SaleData[fseq - 1]["F_CUT_TIME"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"F_loss_backup\": " + (SaleData[fseq - 1]["F_loss_backup"]?.ToString() ?? "0") + ",");
                                sJson.Append("\"FSOStockId\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["SOStockId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                                //sJson.Append("\"FQitao\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["FQitao"] as DynamicObject)?["FNumber"].ToString() ?? "") + "\"},");
                                sJson.Append("\"FQty\": " + (SaleData[fseq - 1]["Qty"]?.ToString() ?? "0") + ",");
                                sJson.Append("\"FLot\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["Lot"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                                sJson.Append("\"FTaxPrice\": " + (SaleData[fseq - 1]["TaxPrice"]?.ToString() ?? "0") + ",");
                                sJson.Append("\"FLotEmptyDate\": \"" + (SaleData[fseq - 1]["FLotEmptyDate"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"FSaleOutLot\": \"" + (SaleData[fseq - 1]["FSaleOutLot"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"F_zzzz_Text3\": \"" + (SaleData[fseq - 1]["F_zzzz_Text3"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"F_zzzz_Text4\": \"" + (SaleData[fseq - 1]["F_zzzz_Text4"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"F_zzzz_Text5\": \"" + (SaleData[fseq - 1]["F_zzzz_Text5"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"F_zzzz_Text10\": \"" + (SaleData[fseq - 1]["F_zzzz_Text10"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"F_zzzz_Text11\": \"" + (SaleData[fseq - 1]["F_zzzz_Text11"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"F_zzzz_Integer\": \"" + (SaleData[fseq - 1]["F_zzzz_Integer"]?.ToString() ?? "0") + "\",");
                                sJson.Append("\"FParentDateTime\": \"" + (SaleData[fseq - 1]["FParentDateTime"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"FChildrenDatetime\": \"" + (SaleData[fseq - 1]["FChildrenDatetime"]?.ToString() ?? "") + "\",");
                                sJson.Append("\"FLotTxt\": \"" + (SaleData[fseq - 1]["FLotTxt"]?.ToString() ?? "0") + "\"");
                                //sJson.Append("\"FLotTxt\": \"" + (SaleData[fseq - 1]["FLotTxt"]?.ToString() ?? "0") + "\",");
                                //报错未查出原因,暂拿掉交货明细表体20210302
                                //DynamicObjectCollection SaleDataPlan = SaleData[fseq - 1]["OrderEntryPlan"] as DynamicObjectCollection;
                                //sJson.Append("\"FOrderEntryPlan\": [{");
                                //sJson.Append("\"FDetailLocId\": {\"FNumber\": \"" + ((SaleDataPlan[0]["DetailLocId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},");
                                //sJson.Append("\"FDetailLocAddress\": \"" + (SaleDataPlan[0]["DetailLocAddress"]?.ToString() ?? "") + "\",");
                                //sJson.Append("\"FPlanDate\": \"" + (SaleDataPlan[0]["PlanDate"]?.ToString() ?? "") + "\",");
                                //sJson.Append("\"FTransportLeadTime\": " + (SaleDataPlan[0]["TransportLeadTime"]?.ToString() ?? "") + ",");
                                //sJson.Append("\"FPlanQty\": " + (SaleDataPlan[0]["PlanQty"]?.ToString() ?? "0") + "}]");
                                sJson.Append("}");
                                if (j != datadtl.Rows.Count - 1)
                                {
                                    sJson.Append(",");
                                }
                                WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "表体循环结束");
                            }
                            sJson.Append("]");
                            //sJson.Append("\"FSaleOrderPlan\": [");
                            //sJson.Append("{");
                            //sJson.Append("\"FNeedRecAdvance\": " + SaleData[fseq - 1]["RowType"].ToString() + ",");
                            //sJson.Append("\"FRecAdvanceRate\": " + SaleData[fseq - 1]["RowType"].ToString() + ",");
                            //sJson.Append("\"FRecAdvanceAmount\": " + SaleData[fseq - 1]["RowType"].ToString() + ",");
                            //sJson.Append("\"FIsOutStockByRecamount\": " + SaleData[fseq - 1]["RowType"].ToString() + "");
                            //sJson.Append("}");
                            //sJson.Append("]");
                            sJson.Append("}");
                            sJson.Append("}");
                            WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "表体JSON处理结束,单据JSON:" + sJson.ToString());
                            JObject aa = JObject.Parse(JObject.Parse(sJson.ToString())["Model"].ToString());
                            savejsonlist += aa.ToString() + ",";
                            #region 第一版
                            ////暂存处理
                            //string DraftResult = client.Draft("SAL_SaleOrder", sJson.ToString());
                            //WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "表体JSON处理结束,暂存结果:" + DraftResult);
                            //JObject DraftResultObj = JObject.Parse(DraftResult);
                            //if (DraftResultObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() == "TRUE")
                            //{
                            //    JObject aa = JObject.Parse(JObject.Parse(sJson.ToString())["Model"].ToString());
                            //    aa["FID"] = DraftResultObj["Result"]["Id"].ToString();
                            //    savejsonlist += aa.ToString() + ",";
                            //    idlist += DraftResultObj["Result"]["Id"].ToString() + ",";
                            //    //LogHelper.Info("订单审核拆单json:"+ aa.ToString());
                            //}
                            //else//暂存失败则删除当前单据拆出来的所有暂存单据,并且跳出当前拆单单据,进行下一个拆单处理
                            //{
                            //    idlist = idlist.Substring(0, idlist.Length - 1);
                            //    string deletemessage = client.Delete("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":[],\"Ids\":\"" + idlist + "\",\"NetworkCtrl\":\"\"}");
                            //    WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "暂存失败,删除原订单拆单结果:" + deletemessage);
                            //    dictionary.Add(billno, DraftResultObj["Result"]["ResponseStatus"]["Errors"].ToString());
                            //    curr = true;
                            //    break;
                            //}
                            #endregion
                        }
                        string successNo = string.Empty;
                        savejsonlist = savejsonlist.Substring(0, savejsonlist.Length - 1);
                        WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "批量保存JSON:" + "{\"NumberSearch\":\"true\",\"ValidateFlag\":\"true\",\"IsDeleteEntry\":\"true\",\"IsEntryBatchFill\":\"true\",\"NeedUpDateFields\":[],\"NeedReturnFields\":[],\"SubSystemId\":\"\",\"InterationFlags\":\"\",\"Model\":[" + savejsonlist.Replace("\r", "").Replace("\n", "") + "],\"BatchCount\":" + data.Rows.Count.ToString() + "}");
                        string message = client.BatchSave("SAL_SaleOrder", "{\"NumberSearch\":\"true\",\"ValidateFlag\":\"true\",\"IsDeleteEntry\":\"true\",\"IsEntryBatchFill\":\"true\",\"NeedUpDateFields\":[],\"NeedReturnFields\":[],\"SubSystemId\":\"\",\"InterationFlags\":\"\",\"Model\":[" + savejsonlist.Replace("\r", "").Replace("\n", "") + "],\"BatchCount\":" + data.Rows.Count.ToString() + "}");
                        WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "批量保存结果:" + message);
                        JObject messageObj = JObject.Parse(message);
                        for (int i = 0; i < messageObj["Result"]["ResponseStatus"]["SuccessEntitys"].ToList().Count; i++)
                        {
                            successNo += messageObj["Result"]["ResponseStatus"]["SuccessEntitys"][i]["Id"].ToString() + ",";
                        }
                        if (successNo.Length > 0)
                        {
                            successNo = successNo.Substring(0, successNo.Length - 1);
                        }
                        if (messageObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() == "TRUE")
                        {
                            string UnAuditResult = client.UnAudit("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":['" + billno + "'],\"Ids\":\"\",\"InterationFlags\":\"\",\"NetworkCtrl\":\"\"}");
                            WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "反审核结果:" + UnAuditResult);
                            JObject UnAuditResultObj = JObject.Parse(UnAuditResult);
                            if (UnAuditResultObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() == "TRUE")
                            {
                                WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "删除原单开始时间:" + DateTime.Now.ToString());
                                string DeleteResult = client.Delete("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":['" + billno + "'],\"Ids\":\"\",\"NetworkCtrl\":\"\"}");
                                WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "删除原单结束时间" + DateTime.Now.ToString());
                                WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "删除结果:" + DeleteResult);
                                JObject DeleteResultObj = JObject.Parse(DeleteResult);
                                if (DeleteResultObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() == "TRUE")
                                {
                                    sql = $@"/*dialect*/UPDATE  A
                                            SET A.FIsStatistics=0
                                            FROM dbo.T_SAL_ORDER A
                                            WHERE A.FID IN ({successNo})";
                                    int rows = DBServiceHelper.Execute(this.Context, sql);
                                    WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "更新是否统计结果:" + rows);
                                    WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "批量提交开始时间" + DateTime.Now.ToString());
                                    string mes = client.Submit("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":[],\"Ids\":\"" + successNo + "\",\"SelectedPostId\":0,\"NetworkCtrl\":\"\"}");
                                    WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "批量提交结束时间" + DateTime.Now.ToString());
                                    WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "批量提交结果:" + mes);
                                    WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "批量审核开始时间" + DateTime.Now.ToString());
                                    string mess = client.Audit("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":[],\"Ids\":\"" + successNo + "\",\"InterationFlags\":\"\",\"NetworkCtrl\":\"\"}");
                                    WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "批量审核结束时间" + DateTime.Now.ToString());
                                    WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "批量审核结果:" + mess);
                                    //dictionary.Add(billno, "拆单成功!");
                                }
                                else
                                {
                                    if (successNo.Length > 0)
                                    {
                                        string deletestr = client.Delete("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":[],\"Ids\":\"" + successNo + "\",\"NetworkCtrl\":\"\"}");
                                        WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "原单删除失败--拆单成功的单据删除结果:" + deletestr);
                                        dictionary.Add(billno, "拆单失败,详细原因:原单删除失败!");
                                    }
                                }
                            }
                            else
                            {
                                if (successNo.Length > 0)
                                {
                                    string unaduitstr = client.Delete("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":[],\"Ids\":\"" + successNo + "\",\"NetworkCtrl\":\"\"}");
                                    WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "原单反审核失败--拆单成功的单据删除结果:" + unaduitstr);
                                    dictionary.Add(billno, "拆单失败,详细原因:原单反审核失败!");
                                }
                            }
                        }
                        else
                        {
                            if (successNo.Length > 0)
                            {
                                string spiltstr = client.Delete("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":[],\"Ids\":\"" + successNo + "\",\"NetworkCtrl\":\"\"}");
                                WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "原单拆单失败--拆单成功的单据删除结果:" + spiltstr);
                                dictionary.Add(billno, "拆单失败,详细原因:原单拆单失败!");
                            }
                        }
                        #region 第一版
                        //if (curr)
                        //{
                        //    string UnAuditResult = client.UnAudit("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":['" + billno + "'],\"Ids\":\"\",\"InterationFlags\":\"\",\"NetworkCtrl\":\"\"}");
                        //    WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "拆单暂存失败,进行原单反审核:" + UnAuditResult);
                        //}
                        //else
                        //{
                        //    savejsonlist = savejsonlist.Substring(0, savejsonlist.Length - 1);
                        //    idlist = idlist.Substring(0, idlist.Length - 1);
                        //    WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "JSON:" + savejsonlist);
                        //    //拆单暂存完后删除原单据,在对暂存单据进行保存
                        //    string UnAuditResult = client.UnAudit("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":['" + billno + "'],\"Ids\":\"\",\"InterationFlags\":\"\",\"NetworkCtrl\":\"\"}");
                        //    WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "反审核结果:" + UnAuditResult);
                        //    JObject UnAuditResultObj = JObject.Parse(UnAuditResult);
                        //    if (UnAuditResultObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() == "TRUE")
                        //    {
                        //        string DeleteResult = client.Delete("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":['" + billno + "'],\"Ids\":\"\",\"NetworkCtrl\":\"\"}");
                        //        WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "删除结果:" + DeleteResult);
                        //        JObject DeleteResultObj = JObject.Parse(DeleteResult);
                        //        if (DeleteResultObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() == "TRUE")
                        //        {
                        //            string message = client.BatchSave("SAL_SaleOrder", "{\"NumberSearch\":\"true\",\"ValidateFlag\":\"true\",\"IsDeleteEntry\":\"true\",\"IsEntryBatchFill\":\"true\",\"NeedUpDateFields\":[],\"NeedReturnFields\":[],\"SubSystemId\":\"\",\"InterationFlags\":\"\",\"Model\":[" + savejsonlist.Replace("\r", "").Replace("\n", "") + "],\"BatchCount\":" + data.Rows.Count.ToString() + "}");
                        //            WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "批量保存结果:" + message);
                        //            JObject messageObj = JObject.Parse(message);
                        //            if (messageObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() == "TRUE")
                        //            {
                        //                string str = $@"/*dialect*/UPDATE A
                        //                                SET A.FLOT=A.FLotTxt,A.FLOT_TEXT=ISNULL(C.FNAME,'')
                        //                                FROM dbo.T_SAL_ORDERENTRY A(NOLOCK)
                        //                                JOIN dbo.T_SAL_ORDER B(NOLOCK) ON B.FID = A.FID
                        //                                JOIN T_BD_LOTMASTER_L C(NOLOCK) ON C.FLOTID=A.FLotTxt
                        //                                WHERE B.FBILLNO LIKE '%{billno}%'";
                        //                DBServiceHelper.Execute(this.Context, str);
                        //                string mes = client.Submit("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":[],\"Ids\":\"" + idlist + "\",\"SelectedPostId\":0,\"NetworkCtrl\":\"\"}");
                        //                WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "批量提交结果:" + mes);
                        //                string mess = client.Audit("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":[],\"Ids\":\"" + idlist + "\",\"InterationFlags\":\"\",\"NetworkCtrl\":\"\"}");
                        //                WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "批量审核结果:" + mess);
                        //                //dictionary.Add(billno, messageObj["Result"]["ResponseStatus"]["SuccessEntitys"].ToString());
                        //            }
                        //            else
                        //            {
                        //                dictionary.Add(billno, messageObj["Result"]["ResponseStatus"]["Errors"].ToString());
                        //            }
                        //        }
                        //        else
                        //        {
                        //            client.Delete("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":[],\"Ids\":\"" + idlist + "\",\"NetworkCtrl\":\"\"}");
                        //        }
                        //    }
                        //    else
                        //    {
                        //        client.Delete("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":[],\"Ids\":\"" + idlist + "\",\"NetworkCtrl\":\"\"}");
                        //    }
                        //}
                        #endregion
                    }
                    catch (Exception ex)
                    {
                        WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "异常信息:" + JsonConvert.SerializeObject(ex));
                        throw new Exception(ex.Message);
                    }
                }
                WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "截止时间:" + DateTime.Now.ToString());
            }
            //对拆单结果进行提示
            foreach (var item in dictionary)
            {
                ResultMessage.dataError(this.OperationResult.OperateResult, item.Key, "拆单信息:" + item.Value);
            }
            //}
            //else
            //{
            //    throw new Exception("金蝶API登录失败!详细原因:1.检查密码是否调整,调整请联系金蝶开发人员。2.请检查网络状况!");
            //}
        }
        public static class ResultMessage
        {/// <summary>
         /// 修改提示信息
         /// </summary>
         /// <param name="operateResult"></param>
         /// <param name="billno"></param>
         /// <param name="message"></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.Normal;
            }
        }
    }
}
src/Model/Demo.Model/Model/DayPlanMaterial.cs
@@ -110,5 +110,13 @@
        /// </summary>
        public string FDayPlanFBILLNO { get; set; }
        /// <summary>
        /// FDayPlanPpbomFEntryId
        /// 日计划用料清单FentryID
        /// </summary>
        public string FDayPlanPpbomFEntryId { get; set; }
        public string FWORKSHOPID { get; set; }
    }
}