王 垚
2022-09-14 54a976bab1ce8da78435bbdf8a651aa2d1af0898
nothing
9个文件已修改
3个文件已删除
1324 ■■■■■ 已修改文件
MES/src/BLL/Demo.BillView/Demo.BillView.csproj 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES/src/BLL/Demo.BillView/PRD/PODemandPlanListLoad.cs 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES/src/BLL/Demo.BillView/PRD/ProCompleteAnalysisDetails.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES/src/BLL/Demo.BillView/PRD/Pro_DayPlanAduit.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES/src/BLL/Demo.BillView/PRD/Pro_DayPlanBG.cs 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES/src/BLL/Demo.BillView/PRD/Pro_DayPlanDeleteVal.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES/src/BLL/Demo.BillView/PRD/Pro_DayPlanList.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES/src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatform.cs 769 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES/src/BLL/Demo.BillView/PRD/Pur_ReceiveByExcel.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES/src/BLL/Demo.BillView/PRD/SalOrderSaveVal.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES/src/BLL/Demo.TimedTaskPlugIn/Demo.TimedTaskPlugIn.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES/src/BLL/Demo.TimedTaskPlugIn/PRD/TLPlanTimeTaskYl.cs 360 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES/src/BLL/Demo.BillView/Demo.BillView.csproj
@@ -188,7 +188,6 @@
  <ItemGroup>
    <Compile Include="PRD\LogService.cs" />
    <Compile Include="PRD\PODemandPlanListFilter.cs" />
    <Compile Include="PRD\PODemandPlanListLoad.cs" />
    <Compile Include="PRD\ProductScheduleButtonClick.cs" />
    <Compile Include="PRD\ProductScheduleShowList.cs" />
    <Compile Include="PRD\ProTardinessDetails.cs" />
@@ -200,7 +199,6 @@
    <Compile Include="PRD\Pro_DayPlan.cs" />
    <Compile Include="PRD\Pro_DayPlanCheckSelectMenu.cs" />
    <Compile Include="PRD\Pro_DayPlanPushSCHB.cs" />
    <Compile Include="PRD\Pro_DayPlanBG.cs" />
    <Compile Include="PRD\Pro_ScDayImportMonth.cs" />
    <Compile Include="PRD\Pro_DayPlanAduit.cs" />
    <Compile Include="PRD\Pro_WorkBillPlatformMonth.cs" />
MES/src/BLL/Demo.BillView/PRD/PODemandPlanListLoad.cs
File was deleted
MES/src/BLL/Demo.BillView/PRD/ProCompleteAnalysisDetails.cs
@@ -114,7 +114,6 @@
                var entryRowIndex = this.Model.GetEntryCurrentRowIndex("FEntity");
                // 获取分录当前选中行中的物料数据包
                materialNumber = (this.Model.GetValue("FMateralDetailID", entryRowIndex) as DynamicObject)?["Number"].ToString();
                LogService.Write("FMateralDetailNumber:" + materialNumber);
                // 打开单据联查列表:以联查销售订单为例
                IRegularFilterParameter filterParameter = new ListRegularFilterParameter();
                filterParameter.Filter = string.Format(" FMaterialId.FNumber = '{0}' and FStockOrgId = '{1}'", materialNumber, Context.CurrentOrganizationInfo.ID);
MES/src/BLL/Demo.BillView/PRD/Pro_DayPlanAduit.cs
@@ -169,7 +169,6 @@
                            ["Model"] = model
                        };
                        CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
                        //LogService.Write("生产订单json:" + jsonRoot.ToString());
                        var _result = cloudClient.Save("PRD_MO", jsonRoot.ToString());
                        var _saveObj = JObject.Parse(_result);
                        var saveIsSuc = _saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
@@ -177,6 +176,7 @@
                        {
                            e.CancelOperation = true;
                            dictionary.Add(dr["FDAYPLANBILLNO"].ToString(), "生产订单生成失败," + _saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
                            LogService.Write("生产订单生成失败json" + jsonRoot.ToString());
                            //this.View.ShowErrMessage("生产订单生成失败," + _saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
                            continue;
                        }
@@ -295,7 +295,6 @@
                            ["IsAutoSubmitAndAudit"] = true,//自动调用提交和审核功能
                            ["Model"] = model
                        };
                        //LogService.Write("生产订单变更单json:" + jsonRoot.ToString());
                        _result = cloudClient.Save("PRD_MOChange", jsonRoot.ToString());
                        _saveObj = JObject.Parse(_result);
                        saveIsSuc = _saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
MES/src/BLL/Demo.BillView/PRD/Pro_DayPlanBG.cs
File was deleted
MES/src/BLL/Demo.BillView/PRD/Pro_DayPlanDeleteVal.cs
@@ -46,7 +46,6 @@
                foreach (var data in dataEntities)
                {
                    DynamicObject item = data.DataEntity;
                    //LogService.Write(item);
                    var FId = Convert.ToInt32(item["Id"].ToString());
                    var FBillNo = item["BillNo"].ToString();
                    var FMoEntryId = Convert.ToInt32(item["FMoEntryId"].ToString());
MES/src/BLL/Demo.BillView/PRD/Pro_DayPlanList.cs
@@ -432,7 +432,6 @@
                    ["Model"] = model
                };
                CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
                LogService.Write("生产订单json:" + jsonRoot.ToString());
                var _result = cloudClient.Save("PRD_MO", jsonRoot.ToString());
                var _saveObj = JObject.Parse(_result);
                var saveIsSuc = _saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
@@ -441,11 +440,8 @@
                    this.View.ShowErrMessage("生产订单生成失败," + _saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
                    return;
                }
                //LogService.Write(_saveObj);
                var fBillNo = _saveObj["Result"]["Number"].ToString();
                var fID = _saveObj["Result"]["Id"].ToString();
                //LogService.Write(_saveObj);
                //this.View.ShowMessage("生产订单生成成功,单号:" + fBillNo);
                //生成一张生产订单变更单
                model = new JObject();
MES/src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatform.cs
@@ -109,7 +109,6 @@
            base.BarItemClick(e);
            try
            {
                //LogService.Write("生产计划平台按钮:" + e.BarItemKey.ToUpper().ToString());
                if (e.BarItemKey.ToUpper() == "BTEXPORT")
                {
                    ExportExcel();
@@ -228,17 +227,6 @@
                if (e.BarItemKey.ToUpper() == "TB_TONGBU")
                {
                    TongBu();
                }
                //提料计划重算
                if (e.BarItemKey.ToUpper() == "TB_EXTRACTIONTL")
                {
                    ExtractionTLPLAN();
                }
                //要料计划重算
                if (e.BarItemKey.ToUpper() == "TB_EXTRACTIONYL")
                {
                    ExtractionYLPLAN();
                }
                //日计划用料清单
                if (e.BarItemKey.ToUpper() == "TB_DAYPLANBOM")
@@ -671,7 +659,6 @@
JOIN T_BAS_BILLTYPE_L B ON A.FBILLTYPEID =B.FBILLTYPEID
where FBILLFORMID in ('PRD_MO','SUB_SUBREQORDER')   AND b.FLOCALEID = 2052)t4 on t1.FBILLTYPE =t4.FBILLTYPEID
 WHERE T1.FBILLNO = '{2}'  AND T2.FMATERIALID = '{3}' AND T2.FSEQ = '{4}'", FTempName, FTempNameEntry, Convert.ToString(current["FSCOrderNo"]), Convert.ToString(current["FMatrailId_Id"]), Convert.ToString(current["FSRCBILLENTRYSEQ"]));
                        //LogService.Write(sql);
                        DataTable dt = new DataTable();
                        dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
                        if (dt.Rows.Count == 0)
@@ -1225,7 +1212,7 @@
                List<string> sqlList = new List<string>();
                DataTable insertDT = new DataTable();
                insertDT.TableName = "JIT_MOMaterReadysBill";
                insertDT.Columns.Add("FID", typeof(long));
                //insertDT.Columns.Add("FID", typeof(long));
                //insertDT.Columns.Add("FBILLNO", typeof(string));
                insertDT.Columns.Add("FDOCUMENTSTATUS", typeof(string));
                insertDT.Columns.Add("FHMAINICMOINTERIDR", typeof(long));
@@ -1259,7 +1246,7 @@
                foreach (var item in completeAnalysisTempModel)
                {
                    DataRow dr = insertDT.NewRow();
                    dr["FID"] = maxFid + jdtmmm;
                    //dr["FID"] = maxFid + jdtmmm;
                    //dr["FBILLNO"] = "";
                    dr["FDOCUMENTSTATUS"] = "A";
                    dr["FHMAINICMOINTERIDR"] = item.FHMainICMOInterIDr;
@@ -1299,10 +1286,10 @@
                DBServiceHelper.BulkInserts(this.Context, string.Empty, string.Empty, insertDT);
                LogService.Write("批量插入到数据库用时:" + sw.Elapsed);
                //执行完成后 更新日计划工单状态
                DBServiceHelper.Execute(Context, @"
/*dialect*/update Sc_WorkBillSortBillSub set FComplete = '未齐套' where FEntryID IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBill where isnull(FCOMPLETE,'未齐套') ='未齐套') and FID IN (" + fDayPlanFids + ") ");
                DBServiceHelper.Execute(Context, @"
/*dialect*/update Sc_WorkBillSortBillSub set FComplete = '齐套' where FEntryID NOT IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBill where isnull(FCOMPLETE,'未齐套') ='未齐套') and FID IN (" + fDayPlanFids + ") ");
//                DBServiceHelper.Execute(Context, @"
///*dialect*/update Sc_WorkBillSortBillSub set FComplete = '未齐套' where FEntryID IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBill where isnull(FCOMPLETE,'未齐套') ='未齐套') and FID IN (" + fDayPlanFids + ") ");
//                DBServiceHelper.Execute(Context, @"
///*dialect*/update Sc_WorkBillSortBillSub set FComplete = '齐套' where FEntryID NOT IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBill where isnull(FCOMPLETE,'未齐套') ='未齐套') and FID IN (" + fDayPlanFids + ") ");
                //释放齐套操作 避免多人同时进行齐套分析
                DBServiceHelper.Execute(Context, $"/*dialect*/ update T_PRD_QTFX set FSTATUS = 0 where FPRDORGID ={fPrdOrgId} and FSTATUS = 1 ");
                sw.Stop();//结束计时
@@ -1607,7 +1594,7 @@
                List<string> sqlList = new List<string>();
                DataTable insertDT = new DataTable();
                insertDT.TableName = "JIT_MOMaterReadysBillXn";
                insertDT.Columns.Add("FID", typeof(long));
                //insertDT.Columns.Add("FID", typeof(long));
                //insertDT.Columns.Add("FBILLNO", typeof(string));
                insertDT.Columns.Add("FDOCUMENTSTATUS", typeof(string));
                insertDT.Columns.Add("FHMAINICMOINTERIDR", typeof(long));
@@ -1641,7 +1628,7 @@
                foreach (var item in completeAnalysisTempModel)
                {
                    DataRow dr = insertDT.NewRow();
                    dr["FID"] = maxFid + jdtmmm;
                    //dr["FID"] = maxFid + jdtmmm;
                    //dr["FBILLNO"] = "";
                    dr["FDOCUMENTSTATUS"] = "A";
                    dr["FHMAINICMOINTERIDR"] = item.FHMainICMOInterIDr;
@@ -3660,746 +3647,6 @@
            else
            {
                this.View.ShowMessage("请勾选数据");
            }
        }
        /// <summary>
        /// 提料计划进度条
        /// </summary>
        [Obsolete]
        private void ExtractionTLPLAN()
        {
            // 显示一个进度显示界面:显示一个不停滚动的模拟进度
            // bUseTruePro参数:是否显示真实的进度。
            // bUseTruePro = false :
            // 显示一个不停滚动的模拟进度,与实际处理进度没有关联。
            // 此方案优点:实际处理代码无需计算进度
            // 此方案缺点:进度不准确,且进度页面不会自动关闭。
            // bUseTruePro = true: 进度界面显示真实进度
            // 此方案优点:进度真实
            // 此方案缺点:需要在处理代码中,不断的更新真实进度,更新语句
            // this.View.Session["ProcessRateValue"] = 100;
            // 特别说明,当进度更新到100时,进度界面会自动关闭
            // 本案例选用此方案
            var processForm = this.View.ShowProcessForm(
                new Action<FormResult>(t => { }),
                true,
                "正在生成,请稍候...");
            // 开启一个异步线程,处理引入功能
            // using Kingdee.BOS.KDThread;
            MainWorker.QuequeTask(() =>
            {
                var resuult = "";
                try
                {
                    // 需要捕获错误,以确保处理结束时,关闭进度滚动界面
                    // 引入功能实际处理函数
                    resuult = this.ExtractionTL();
                }
                finally
                {
                    // 确保标记进度已经到达100%
                    this.View.Session["ProcessRateValue"] = 100;
                    // 引入完毕,关闭进度显示页面
                    var processView = this.View.GetView(processForm.PageId);
                    if (processView != null)
                    {
                        processView.Close();
                        this.View.SendDynamicFormAction(processView);
                    }
                    this.View.ShowMessage(resuult);
                }
            },
            (t) => { });
        }
        /// <summary>
        /// 提料计划
        /// </summary>
        public string ExtractionTL()
        {
            try
            {
                var fProWorkShopId = (this.Model.GetValue("FProWorkShopId") as DynamicObject)?["Id"].ToString();
                var fPrdOrgId = (this.Model.GetValue("FPRDOrgId") as DynamicObject)?["Id"].ToString();
                if (String.IsNullOrEmpty(fProWorkShopId) || String.IsNullOrEmpty(fPrdOrgId))
                {
                    return "请选择组织生产车间";
                }
                LogService.Write($"车间:{fProWorkShopId},组织:{fPrdOrgId}");
                Stopwatch sw = new Stopwatch();
                sw.Start();//开始计时
                           //提料计划预处理 清理提料计划单数据 更新采购订单提料计划数量
                string sql = string.Format($"/*dialect*/exec PRD_TLPLANYCL '{fProWorkShopId}','{fPrdOrgId}'");
                DBServiceHelper.Execute(Context, sql);
                //采购订单数据 (剩余收料数量)
                sql = @"
 /*dialect*/
select t1.FID,t1.FBillNo,t2.FENTRYID,t1.FSUPPLIERID,t3.fnumber,t2.FMATERIALID,(t4.FREMAINRECEIVEQTY-t2.FPODemandPlanCount)FQTY
,FPurchaseOrgId FStockOrgId,t5.FNUMBER FORGNumber,FCloseStatus,FMRPCLOSESTATUS
,'' FXQD,t1.FCREATORID,t8.FName ,t1.FDate,tD.FDeliveryDate,'' F_QIMB_NOTE,t2.FNOTE,
isnull((select top 1 FLEADTIME +  FLEADTTIME2  from T_PRD_TLPlanConfig a
 join T_PRD_TLPlanConfigEntry b on a.FID =b.FID
 where a.FORGID = t1.FPurchaseOrgId and b.FSUPPLIERID = t1.FSUPPLIERID), 0)FFIXLEADTIME
    from t_PUR_POOrder t1
    join t_PUR_POOrderEntry t2 on t1.FID = t2.FID
join t_BD_Supplier t3 on t1.FSUPPLIERID = t3.FSUPPLIERID
join  T_PUR_POORDERENTRY_R t4 on t2.FENTRYID = t4.FENTRYID
join  T_PUR_POORDERENTRY_D tD on t2.FENTRYID = tD.FENTRYID
join T_ORG_Organizations t5 on t1.FPurchaseOrgId = t5.FORGID
join T_SEC_user t8 on t1.FCREATORID = t8.FuserId
where t4.FREMAINRECEIVEQTY-t2.FPODemandPlanCount>0
 and FCloseStatus in('A') and FMRPCLOSESTATUS in('A')
 and t1.FBillTypeID in('83d822ca3e374b4ab01e5dd46a0062bd','6d01d059713d42a28bb976c90a121142')
";
                LogService.Write("查询采购订单数据用时:" + sw.Elapsed);
                List<PurchaseInventory> PurchaseInventory = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList<PurchaseInventory>();
                ////LogHelper.Info("[提料计划准备阶段]可用采购订单数据sql:" + sql);
                sql = string.Format(@"
 /*dialect*/
SELECT T1.FID,FHMASTERDATE,T1.FENTRYID,t2.FHSeOrderBillNo as FXQD,T1.FBILLNO, FNEEDQTY,0 as FFIXLEADTIME
,FMAXPOQTY,0 as  FMINPOQTY,0 as FJITMATERIALGROUP,0 as FJITMATERIELDEMAND,0 as FJITSAFESTOCK,T1.FMATERIALID,T6.FNUMBER,NEEDQTY, FSTOCKORGID ,FERPCLSID
FROM   (
SELECT FHICMOINTERID FID,FHICMOENTRYID FENTRYID,FPLANDATE FHMASTERDATE,FLACKCOUNT NEEDQTY,FHMATERID FMATERIALID,FHSTOCKORGID FSTOCKORGID,FPRDBILLNO FBILLNO,FSUMPLANCOUNT FNEEDQTY FROM JIT_MOMATERREADYSBILL A
RIGHT JOIN (SELECT MAX(FID)FID FROM JIT_MOMATERREADYSBILL GROUP BY FHICMOENTRYID,FHMATERID) B ON A.FID = B.FID
)T1
JOIN Sc_WorkBillSortBillMain T2 ON T1.FID = T2.FID
JOIN T_BD_MATERIAL T6 ON T1.FMATERIALID = T6.FMATERIALID
JOIN T_BD_MATERIALBASE T4 ON T1.FMATERIALID = T4.FMATERIALID
JOIN T_BD_MATERIALPLAN T5 ON T1.FMATERIALID = T5.FMATERIALID
AND FERPCLSID IN ('1','3')
AND T1.NEEDQTY>0
AND T1.FENTRYID NOT IN (SELECT DISTINCT FHSOURCEENTRYID FROM CG_PODEMANDPLANBILLSUB)
AND T2.FHPRDORGID='{0}'
AND T2.FHWORKSHOPID = '{1}'
ORDER BY FHMASTERDATE
", fPrdOrgId, fProWorkShopId);
                ////LogHelper.Info("[提料计划准备阶段]需要提料数据sql:" + sql);
                DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
                List<DayPlanPpbom> DayPlanPpbom = ds.ToModelList<DayPlanPpbom>();
                //物料+库存组织分类
                var MaterialIDList = DayPlanPpbom.GroupBy(p => new { p.FMATERIALID, p.FStockOrgId }).Select(x => new PODemandPlanTemp { FMATERIALID = x.Key.FMATERIALID, FStockOrgId = x.Key.FStockOrgId }).ToList();
                //var _MaterialIDList = MaterialIDList.Where(p => p.FMATERIALID == "163165").ToList();
                //提料计划数据集临时存储集合
                List<PODemandPlanTemp> PODemandPlanTemp = new List<PODemandPlanTemp>();
                //sql集合 更新采购订单占用的提料计划数量
                List<string> sqlList = new List<string>();
                //MaterialIDList = new List<string> { "105773" };
                int i = 1;//用于进度条加载
                foreach (var item in MaterialIDList)
                {
                    this.View.Session["ProcessRateValue"] = Convert.ToInt32((Convert.ToDecimal(80) / MaterialIDList.Count) * i);
                    //当前物料没有采购订单时 直接跳出
                    List<PurchaseInventory> _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);
                        continue;
                    }
                    //当前物料和库存组织对应的需进行提料计划的数据
                    List<DayPlanPpbom> _DayPlanPpbom = DayPlanPpbom.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId).ToList();
                    //decimal FMINPOQTY = _DayPlanPpbom.FirstOrDefault().FMINPOQTY;//最小起订量
                    //double FFIXLEADTIME = _DayPlanPpbom.FirstOrDefault().FFIXLEADTIME;//提前期
                    //string FJITmaterialGroup = _DayPlanPpbom.FirstOrDefault().FJITmaterialGroup;//jit物料分类
                    //string FJITMaterielDemand = _DayPlanPpbom.FirstOrDefault().FJITMaterielDemand; //JIT物料需求供货周期
                    //string FJITSafeStock = _DayPlanPpbom.FirstOrDefault().FJITSafeStock; //JIT安全库存
                    decimal NeedQty = 0;
                    //DateTime DATE = _DayPlanPpbom.FirstOrDefault().FHMASTERDATE;//第一个订货起始日期
                    //记录在最小采购量需求下的日计划明细FentyrID
                    List<int> FEntryIdList = new List<int>();
                    foreach (var _item in _DayPlanPpbom)
                    {
                        _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.FBILLNO + ",当前物料明细无采购信息:" + item.FMATERIALID + " 库存组织:" + item.FStockOrgId);
                            break;
                        }
                        FEntryIdList.Add(_item.FENTRYID);
                        NeedQty += _item.NeedQty;
                        //增加一个销售订单号匹配的逻辑 优先循环
                        var PurchaseInventoryElse = _PurchaseInventory.Where(x => x.FXQD != _item.FXQD).OrderBy(x => x.FENTRYID).ToList();
                        foreach (var Purchase in PurchaseInventoryElse)
                        {
                            double _FFIXLEADTIME = Purchase.FFIXLEADTIME;//提前期
                            DateTime _DATE = Convert.ToDateTime(_item.FHMASTERDATE).AddDays(-_FFIXLEADTIME);
                            ////LogHelper.Info("采购订单号测试:" + Purchase.FBillNo);
                            ////LogHelper.Info("物料:" + Purchase.FMATERIALID + ",采购订单数量:" + Purchase.FQTY);
                            if (Purchase.FQTY >= NeedQty)
                            {
                                foreach (int id in FEntryIdList)
                                {
                                    var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault();
                                    PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp
                                    {
                                        FID = DayPlanPpbomls.FID,
                                        FHMASTERDATE = _DATE,
                                        FQty = DayPlanPpbomls.NeedQty,
                                        FBILLNO = DayPlanPpbomls.FBILLNO,
                                        FENTRYID = DayPlanPpbomls.FENTRYID,
                                        FMATERIALID = DayPlanPpbomls.FMATERIALID,
                                        FNumber = DayPlanPpbomls.FNumber,
                                        OLDDATE = DayPlanPpbomls.FHMASTERDATE,
                                        FFIXLEADTIME = _FFIXLEADTIME,
                                        FErpClsID = DayPlanPpbomls.FErpClsID,
                                        PurchseFID = Purchase.FID,
                                        PurchseFentryID = Purchase.FENTRYID,
                                        FSUPPLIERID = Purchase.FSUPPLIERID,
                                        PurchseFNUMBER = Purchase.FNUMBER,
                                        PurchseFBillNo = Purchase.FBillNo,
                                        PurchseFqty = Purchase.FQTY,
                                        FStockOrgId = Purchase.FStockOrgId, //采购组织
                                        FORGNumber = Purchase.FORGNumber,
                                        FXQD = Purchase.FXQD,
                                        FCREATORID = Purchase.FCREATORID,
                                        FName = Purchase.FName,
                                        FDate = Purchase.FDate,
                                        FDeliveryDate = Purchase.FDeliveryDate,
                                        F_QIMB_NOTE = Purchase.F_QIMB_NOTE,
                                        FNOTE = Purchase.FNOTE
                                    });
                                    //扣除日计划明细已被分配的数量
                                    DayPlanPpbomls.NeedQty = 0;
                                }
                                FEntryIdList.Clear();
                                //更新采购订单
                                sqlList.Add($"/*dialect*/ update t_PUR_POOrderEntry set FPODemandPlanCount  =isnull(FPODemandPlanCount,0)+  '{NeedQty}' where FENTRYID = {Purchase.FENTRYID}");
                                //扣除当前行对应采购订单数量
                                var ls = PurchaseInventory.Where(c => c.FENTRYID == Purchase.FENTRYID).FirstOrDefault();
                                ls.FQTY -= NeedQty;
                                break;
                            }
                            else
                            {
                                //更新总需求数量
                                NeedQty = NeedQty - Purchase.FQTY;
                                //采购订单数量
                                decimal _NeedQty = Purchase.FQTY;
                                List<int> mmm = new List<int>();
                                foreach (int id in FEntryIdList)
                                {
                                    var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault();
                                    decimal Qty = DayPlanPpbomls.NeedQty;//订单数量
                                                                         //if (Qty == 0)
                                                                         //    //LogHelper.Info("订单数量为0");
                                    if (Qty > _NeedQty)
                                        Qty = _NeedQty; //订单数量>采购订单数量 取采购订单
                                    //if (_NeedQty == 0)
                                    //    //LogHelper.Info("订单数量为0");
                                    _NeedQty = _NeedQty - Qty;
                                    PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp
                                    {
                                        FID = DayPlanPpbomls.FID,
                                        FHMASTERDATE = _DATE,
                                        FQty = Qty,
                                        FBILLNO = DayPlanPpbomls.FBILLNO,
                                        FENTRYID = DayPlanPpbomls.FENTRYID,
                                        FMATERIALID = DayPlanPpbomls.FMATERIALID,
                                        FNumber = DayPlanPpbomls.FNumber,
                                        OLDDATE = DayPlanPpbomls.FHMASTERDATE,
                                        FFIXLEADTIME = _FFIXLEADTIME,
                                        FErpClsID = DayPlanPpbomls.FErpClsID,
                                        PurchseFID = Purchase.FID,
                                        PurchseFentryID = Purchase.FENTRYID,
                                        FSUPPLIERID = Purchase.FSUPPLIERID,
                                        PurchseFNUMBER = Purchase.FNUMBER,
                                        PurchseFBillNo = Purchase.FBillNo,
                                        PurchseFqty = Purchase.FQTY,
                                        FStockOrgId = Purchase.FStockOrgId, //采购组织
                                        FORGNumber = Purchase.FORGNumber,
                                        FXQD = Purchase.FXQD,
                                        FCREATORID = Purchase.FCREATORID,
                                        FName = Purchase.FName,
                                        FDate = Purchase.FDate,
                                        FDeliveryDate = Purchase.FDeliveryDate,
                                        F_QIMB_NOTE = Purchase.F_QIMB_NOTE,
                                        FNOTE = Purchase.FNOTE
                                    });
                                    //更新计划数量(剩余需要排的) 继续去计算下一个采购订单
                                    DayPlanPpbomls.NeedQty -= Qty;
                                    //更新采购订单
                                    sqlList.Add($"/*dialect*/ update t_PUR_POOrderEntry set FPODemandPlanCount = isnull(FPODemandPlanCount,0)+ '{Qty}' where FENTRYID = {Purchase.FENTRYID}");
                                    //更新Model
                                    var ls = PurchaseInventory.Where(c => c.FENTRYID == Purchase.FENTRYID).FirstOrDefault();
                                    ls.FQTY -= Qty;
                                    if (_NeedQty <= 0)
                                    {
                                        foreach (var mm in mmm)
                                        {
                                            FEntryIdList.Remove(mm);
                                        }
                                        break;
                                    }
                                    mmm.Add(id);
                                }
                                //foreach (var mm in mmm)
                                //{
                                //    FEntryIdList.Remove(mm);
                                //}
                            }
                        }
                        if (NeedQty > 0)
                        {
                            LogHelper.Info("[提料计划开始]生产订单号:" + item.FBILLNO + ",当前物料:" + item.FMATERIALID + "需求数量:" + _item.NeedQty + " ,占用采购订单后数量剩余:" + NeedQty);
                        }
                        NeedQty = 0;
                    }
                    i++;
                }
                var PODemandPlanList = PODemandPlanTemp.GroupBy(p => new { p.PurchseFNUMBER, p.FHMASTERDATE }).Select(x => new PODemandPlanTemp { PurchseFNUMBER = x.Key.PurchseFNUMBER, FHMASTERDATE = x.Key.FHMASTERDATE }).ToList();
                LogService.Write("提料计划,数据准备完成,保存到Model实体 用时:" + sw.Elapsed + "总行数:" + PODemandPlanTemp.Count);
                //LogHelper.Info($"提料计划,数据准备完成,保存到Model实体,总行数:{PODemandPlanTemp.Count}");
                int tlmmm = 1;
                JArray FinalyResult = new JArray();
                foreach (var item in PODemandPlanList)
                {
                    this.View.Session["ProcessRateValue"] = 80 + Convert.ToInt32((Convert.ToDecimal(20) / PODemandPlanList.Count) * tlmmm);
                    DateTime date = item.FHMASTERDATE;
                    string PurchseFNUMBER = item.PurchseFNUMBER;
                    JObject model = new JObject();
                    model.Add("FHDate", date);
                    model.Add("FSettleCurrId", new JObject() { ["Fnumber"] = "PRE001" });
                    model.Add("FSupplierID", new JObject() { ["Fnumber"] = PurchseFNUMBER });
                    JArray Fentity = new JArray();
                    List<PODemandPlanTemp> _PODemandPlanList = PODemandPlanTemp.Where(x => x.FHMASTERDATE == date && x.PurchseFNUMBER == PurchseFNUMBER).ToList();
                    LogHelper.Info("测试listmodel:" + _PODemandPlanList[0].FORGNumber.ToString());
                    foreach (var _item in _PODemandPlanList)
                    {
                        if (!model.ToString().Contains("FHPURCHASEORGID"))
                            model.Add("FHPURCHASEORGID", new JObject() { ["Fnumber"] = _item.FORGNumber });
                        JObject FentityModel = new JObject();
                        FentityModel.Add("FHMaterID", new JObject() { ["Fnumber"] = _item.FNumber });//物料
                        FentityModel.Add("FHQty", _item.FQty);//数量
                        FentityModel.Add("FHSourceInterID", _item.FID);//日计划工单FID
                        FentityModel.Add("FHSourceEntryID", _item.FENTRYID);//日计划工单FENTRYID
                        FentityModel.Add("FHSourceBillNo", _item.FBILLNO);//日计划工单单号
                        FentityModel.Add("FHSourceBillType", "");//日计划工单类型
                        FentityModel.Add("FDayPlanDate", _item.OLDDATE);//日计划工单类型
                        FentityModel.Add("FHRelationQty", _item.PurchseFqty);//关联数量
                        FentityModel.Add("FFIXLEADTIME", _item.FFIXLEADTIME);//提前期
                        FentityModel.Add("FPURCHASEORGID", new JObject() { ["Fnumber"] = _item.FORGNumber });//采购组织
                        FentityModel.Add("FHPOOrderInterID", _item.PurchseFID);// 采购订单内码:FHPOOrderInterID
                        FentityModel.Add("FHPOOrderEntryID", _item.PurchseFentryID); //采购订单子内码:FHPOOrderEntryID
                        FentityModel.Add("FHPOOrderBillNo", _item.PurchseFBillNo); //采购订单号:FHPOOrderBillNo
                        FentityModel.Add("FERPCLSID", _item.FErpClsID); //发料方式
                        FentityModel.Add("FUnitID", new JObject() { ["Fnumber"] = "Pcs" }); //发料方式
                        FentityModel.Add("FSalOrderNo", _item.FXQD); //需求单号
                        FentityModel.Add("FCgddCreaterId", new JObject() { ["FUserID"] = _item.FCREATORID }); //采购员
                        FentityModel.Add("FCgDate", _item.FDate); //采购订单单据日期
                        FentityModel.Add("FCgDeliveryDate", _item.FDeliveryDate); //采购订单交货日期
                        FentityModel.Add("F_QIMB_NOTE", _item.F_QIMB_NOTE); //采购订单摘要
                        FentityModel.Add("FNOTE", _item.FNOTE); //采购订单表体备注
                        Fentity.Add(FentityModel);
                    }
                    model.Add("FEntity", Fentity);
                    FinalyResult.Add(model);
                    if ((tlmmm >= 20 || tlmmm == PODemandPlanList.Count) && (tlmmm % 20 == 0 || tlmmm == PODemandPlanList.Count))
                    {
                        //LogHelper.Info("提料计划新增批量执行,记录循环的当前条数" + tlmmm);
                        JObject jsonRoot = new JObject()
                        {
                            ["Creator"] = "",
                            ["NeedUpDateFields"] = new JArray(),
                            ["NeedReturnFields"] = new JArray(),
                            ["IsDeleteEntry"] = "false",
                            ["SubSystemId"] = "",
                            ["IsVerifyBaseDataField"] = "false",
                            ["Model"] = FinalyResult
                        };
                        LogService.Write(jsonRoot.ToString());
                        CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
                        var result = cloudClient.BatchSave("paez_PODemandPlan", jsonRoot.ToString());
                        JObject saveObj = JObject.Parse(result);
                        string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                        if (saveIsSuc != "TRUE")
                        {
                            this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
                        }
                        FinalyResult = new JArray();
                    }
                    tlmmm++;
                }
                LogService.Write("调用webapi 用时:" + sw.Elapsed + "总行数:" + PODemandPlanTemp.Count);
                sw.Stop();//结束计时
                DBServiceHelper.ExecuteBatch(Context, sqlList);
                return "操作成功";
            }
            catch (Exception ex)
            {
                LogService.Write("提料计划跳出:" + ex.Message.ToString());
                return ex.Message.ToString();
            }
        }
        /// <summary>
        /// 要料计划进度条
        /// </summary>
        [Obsolete]
        private void ExtractionYLPLAN()
        {
            // 显示一个进度显示界面:显示一个不停滚动的模拟进度
            // bUseTruePro参数:是否显示真实的进度。
            // bUseTruePro = false :
            // 显示一个不停滚动的模拟进度,与实际处理进度没有关联。
            // 此方案优点:实际处理代码无需计算进度
            // 此方案缺点:进度不准确,且进度页面不会自动关闭。
            // bUseTruePro = true: 进度界面显示真实进度
            // 此方案优点:进度真实
            // 此方案缺点:需要在处理代码中,不断的更新真实进度,更新语句
            // this.View.Session["ProcessRateValue"] = 100;
            // 特别说明,当进度更新到100时,进度界面会自动关闭
            // 本案例选用此方案
            var processForm = this.View.ShowProcessForm(
                new Action<FormResult>(t => { }),
                true,
                "正在生成,请稍候...");
            // 开启一个异步线程,处理引入功能
            // using Kingdee.BOS.KDThread;
            MainWorker.QuequeTask(() =>
            {
                var resuult = "";
                try
                {
                    // 需要捕获错误,以确保处理结束时,关闭进度滚动界面
                    // 引入功能实际处理函数
                    resuult = this.ExtractionYL();
                }
                finally
                {
                    // 确保标记进度已经到达100%
                    this.View.Session["ProcessRateValue"] = 100;
                    // 引入完毕,关闭进度显示页面
                    var processView = this.View.GetView(processForm.PageId);
                    if (processView != null)
                    {
                        processView.Close();
                        this.View.SendDynamicFormAction(processView);
                    }
                    this.View.ShowMessage(resuult);
                }
            },
            (t) => { });
        }
        /// <summary>
        /// 要料计划
        /// </summary>
        public string ExtractionYL()
        {
            try
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();//开始计时
                var fProWorkShopId = (this.Model.GetValue("FProWorkShopId") as DynamicObject)?["Id"].ToString();
                var fPrdOrgId = (this.Model.GetValue("FPRDOrgId") as DynamicObject)?["Id"].ToString();
                if (String.IsNullOrEmpty(fProWorkShopId) || String.IsNullOrEmpty(fPrdOrgId))
                {
                    //this.View.ShowErrMessage("请选择组织和生生产车间");
                    return "请选择组织和生生产车间";
                }
                string sql = string.Format($"/*dialect*/exec PRD_YLPLANYCL '{fProWorkShopId}','{fPrdOrgId}'");
                DBServiceHelper.Execute(Context, sql);
                //生产订单数据(取生产订单未入库数量)
                sql = @"
 /*DIALECT*/
SELECT T1.FID,T1.FBILLNO,T2.FENTRYID,T2.FWORKSHOPID AS FSUPPLIERID,T3.FNUMBER,T2.FMATERIALID,(TQ.FNOSTOCKINQTY-T2.FPODEMANDPLANCOUNT)FQTY
,T1.FPRDORGID FSTOCKORGID,T5.FNUMBER FORGNUMBER,'' FXQD,T1.FCREATORID,T8.FNAME ,T1.FDATE,'' AS F_QIMB_NOTE,'' AS FNOTE,0 AS FFIXLEADTIME
FROM T_PRD_MO T1
JOIN T_PRD_MOENTRY T2 ON T1.FID = T2.FID
JOIN T_PRD_MOENTRY_Q TQ ON T2.FENTRYID = TQ.FENTRYID
JOIN T_BD_DEPARTMENT T3 ON T2.FWORKSHOPID = T3.FDEPTID
JOIN T_ORG_ORGANIZATIONS T5 ON T1.FPRDORGID = T5.FORGID
JOIN T_SEC_USER T8 ON T1.FCREATORID = T8.FUSERID
WHERE TQ.FNOSTOCKINQTY-T2.FPODEMANDPLANCOUNT>0
";
                List<PurchaseInventory> PurchaseInventory = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList<PurchaseInventory>();
                sql = string.Format(@"
 /*dialect*/
SELECT T1.FID,FHMASTERDATE,T1.FENTRYID,t2.FHSeOrderBillNo as FXQD,T1.FBILLNO, FNEEDQTY,0 as FFIXLEADTIME
,FMAXPOQTY,0 as  FMINPOQTY,0 as FJITMATERIALGROUP,0 as FJITMATERIELDEMAND,0 as FJITSAFESTOCK,T1.FMATERIALID,T6.FNUMBER,NEEDQTY, FSTOCKORGID ,FERPCLSID
FROM   (
SELECT FHICMOINTERID FID,FHICMOENTRYID FENTRYID,FPLANDATE FHMASTERDATE,FLACKCOUNT NEEDQTY,FHMATERID FMATERIALID,FHSTOCKORGID FSTOCKORGID,FPRDBILLNO FBILLNO,FSUMPLANCOUNT FNEEDQTY FROM JIT_MOMATERREADYSBILL A
RIGHT JOIN (SELECT MAX(FID)FID FROM JIT_MOMATERREADYSBILL GROUP BY FHICMOENTRYID,FHMATERID) B ON A.FID = B.FID
)T1
JOIN Sc_WorkBillSortBillMain T2 ON T1.FID = T2.FID
JOIN T_BD_MATERIAL T6 ON T1.FMATERIALID = T6.FMATERIALID
JOIN T_BD_MATERIALBASE T4 ON T1.FMATERIALID = T4.FMATERIALID
JOIN T_BD_MATERIALPLAN T5 ON T1.FMATERIALID = T5.FMATERIALID
where FERPCLSID IN ('2')
AND T1.NEEDQTY>0
AND T1.FENTRYID NOT IN (SELECT DISTINCT FHSOURCEENTRYID FROM t_Prd_ProductPlanEntry)
AND T2.FHPRDORGID='{0}'
AND T2.FHWORKSHOPID = '{1}'
ORDER BY FHMASTERDATE
", fPrdOrgId, fProWorkShopId);
                DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
                List<DayPlanPpbom> DayPlanPpbom = ds.ToModelList<DayPlanPpbom>();
                //物料+库存组织分类
                var MaterialIDList = DayPlanPpbom.GroupBy(p => new { p.FMATERIALID, p.FStockOrgId }).Select(x => new PODemandPlanTemp { FMATERIALID = x.Key.FMATERIALID, FStockOrgId = x.Key.FStockOrgId }).ToList();
                var _MaterialIDList = MaterialIDList.Where(p => p.FMATERIALID == "163165").ToList();
                ////LogService.Write("[提料计划准备阶段]总物料行数" + MaterialIDList.Count);
                //提料计划数据集临时存储集合
                List<PODemandPlanTemp> PODemandPlanTemp = new List<PODemandPlanTemp>();
                //sql集合 更新采购订单占用的提料计划数量
                List<string> sqlList = new List<string>();
                //MaterialIDList = new List<string> { "105773" };
                int i = 1;//用于进度条加载
                foreach (var item in MaterialIDList)
                {
                    this.View.Session["ProcessRateValue"] = Convert.ToInt32((Convert.ToDecimal(80) / MaterialIDList.Count) * i);
                    //当前物料没有采购订单时 直接跳出
                    List<PurchaseInventory> _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId && x.FQTY > 0).OrderBy(x => x.FENTRYID).ToList();
                    if (_PurchaseInventory.Count == 0)
                    {
                        LogService.Write($"物料:{ item.FMATERIALID},需求单号:{item.FXQD},生产订单号:{item.FBILLNO},日计划工单FID:{item.FID}...未找到对应生产订单信息");
                        continue;
                    }
                    ////LogService.Write(item.FMATERIALID.ToString());
                    //当前物料和库存组织对应的需进行提料计划的数据
                    List<DayPlanPpbom> _DayPlanPpbom = DayPlanPpbom.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId).ToList();
                    //decimal FMINPOQTY = _DayPlanPpbom.FirstOrDefault().FMINPOQTY;//最小起订量
                    //double FFIXLEADTIME = _DayPlanPpbom.FirstOrDefault().FFIXLEADTIME;//提前期
                    //string FJITmaterialGroup = _DayPlanPpbom.FirstOrDefault().FJITmaterialGroup;//jit物料分类
                    //string FJITMaterielDemand = _DayPlanPpbom.FirstOrDefault().FJITMaterielDemand; //JIT物料需求供货周期
                    //string FJITSafeStock = _DayPlanPpbom.FirstOrDefault().FJITSafeStock; //JIT安全库存
                    decimal NeedQty = 0;
                    //DateTime DATE = _DayPlanPpbom.FirstOrDefault().FHMASTERDATE;//第一个订货起始日期
                    //记录在最小采购量需求下的日计划明细FentyrID
                    List<int> FEntryIdList = new List<int>();
                    foreach (var _item in _DayPlanPpbom)
                    {
                        var PurchaseInventory_scdd = _PurchaseInventory.Where(x => x.FQTY > 0).OrderBy(x => x.FENTRYID).ToList();
                        if (PurchaseInventory_scdd.Count == 0)
                        {
                            LogService.Write($"物料:{ _item.FMATERIALID},需求单号:{item.FXQD},生产订单号:{_item.FBILLNO},日计划工单FID:{_item.FID}...生产订单数量已被占用完");
                            break;
                        }
                        FEntryIdList.Add(_item.FENTRYID);
                        NeedQty += _item.NeedQty;
                        //增加一个销售订单号匹配的逻辑 优先循环
                        if (PurchaseInventory_scdd.Count > 0)
                        {
                            foreach (var Purchase in PurchaseInventory_scdd)
                            {
                                double _FFIXLEADTIME = Purchase.FFIXLEADTIME;//提前期
                                DateTime _DATE = Convert.ToDateTime(_item.FHMASTERDATE).AddDays(-_FFIXLEADTIME);
                                ////LogService.Write("采购订单号测试:" + Purchase.FBillNo);
                                ////LogService.Write("物料:" + Purchase.FMATERIALID + ",采购订单数量:" + Purchase.FQTY);
                                if (Purchase.FQTY >= NeedQty)
                                {
                                    foreach (int id in FEntryIdList)
                                    {
                                        var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault();
                                        PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp
                                        {
                                            FID = DayPlanPpbomls.FID,
                                            FHMASTERDATE = _DATE,
                                            FQty = DayPlanPpbomls.NeedQty,
                                            FBILLNO = DayPlanPpbomls.FBILLNO,
                                            FENTRYID = DayPlanPpbomls.FENTRYID,
                                            FMATERIALID = DayPlanPpbomls.FMATERIALID,
                                            FNumber = DayPlanPpbomls.FNumber,
                                            OLDDATE = DayPlanPpbomls.FHMASTERDATE,
                                            FFIXLEADTIME = _FFIXLEADTIME,
                                            FErpClsID = DayPlanPpbomls.FErpClsID,
                                            PurchseFID = Purchase.FID,
                                            PurchseFentryID = Purchase.FENTRYID,
                                            FSUPPLIERID = Purchase.FSUPPLIERID,
                                            PurchseFNUMBER = Purchase.FNUMBER,
                                            PurchseFBillNo = Purchase.FBillNo,
                                            PurchseFqty = Purchase.FQTY,
                                            FStockOrgId = Purchase.FStockOrgId, //采购组织
                                            FORGNumber = Purchase.FORGNumber,
                                            FXQD = Purchase.FXQD,
                                            FCREATORID = Purchase.FCREATORID,
                                            FName = Purchase.FName,
                                            FDate = Purchase.FDate,
                                            //FDeliveryDate = Purchase.FDeliveryDate,
                                            F_QIMB_NOTE = Purchase.F_QIMB_NOTE,
                                            FNOTE = Purchase.FNOTE
                                        });
                                        //扣除日计划明细已被分配的数量
                                        DayPlanPpbomls.NeedQty = 0;
                                    }
                                    FEntryIdList.Clear();
                                    //更新采购订单
                                    sqlList.Add($"/*dialect*/ update T_PRD_MOEntry set FPODemandPlanCount  =isnull(FPODemandPlanCount,0)+  '{NeedQty}' where FENTRYID = {Purchase.FENTRYID}");
                                    //扣除当前行对应采购订单数量
                                    var ls = PurchaseInventory.Where(c => c.FENTRYID == Purchase.FENTRYID).FirstOrDefault();
                                    ls.FQTY -= NeedQty;
                                    break;
                                }
                                else
                                {
                                    //更新总需求数量
                                    NeedQty = NeedQty - Purchase.FQTY;
                                    //采购订单数量
                                    decimal _NeedQty = Purchase.FQTY;
                                    List<int> mmm = new List<int>();
                                    foreach (int id in FEntryIdList)
                                    {
                                        var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault();
                                        decimal Qty = DayPlanPpbomls.NeedQty;//订单数量
                                                                             //if (Qty == 0)
                                                                             //    //LogService.Write("订单数量为0");
                                        if (Qty > _NeedQty)
                                            Qty = _NeedQty; //订单数量>采购订单数量 取采购订单
                                        //if (_NeedQty == 0)
                                        //    //LogService.Write("订单数量为0");
                                        _NeedQty = _NeedQty - Qty;
                                        PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp
                                        {
                                            FID = DayPlanPpbomls.FID,
                                            FHMASTERDATE = _DATE,
                                            FQty = Qty,
                                            FBILLNO = DayPlanPpbomls.FBILLNO,
                                            FENTRYID = DayPlanPpbomls.FENTRYID,
                                            FMATERIALID = DayPlanPpbomls.FMATERIALID,
                                            FNumber = DayPlanPpbomls.FNumber,
                                            OLDDATE = DayPlanPpbomls.FHMASTERDATE,
                                            FFIXLEADTIME = _FFIXLEADTIME,
                                            FErpClsID = DayPlanPpbomls.FErpClsID,
                                            PurchseFID = Purchase.FID,
                                            PurchseFentryID = Purchase.FENTRYID,
                                            FSUPPLIERID = Purchase.FSUPPLIERID,
                                            PurchseFNUMBER = Purchase.FNUMBER,
                                            PurchseFBillNo = Purchase.FBillNo,
                                            PurchseFqty = Purchase.FQTY,
                                            FStockOrgId = Purchase.FStockOrgId, //采购组织
                                            FORGNumber = Purchase.FORGNumber,
                                            FXQD = Purchase.FXQD,
                                            FCREATORID = Purchase.FCREATORID,
                                            FName = Purchase.FName,
                                            FDate = Purchase.FDate,
                                            //FDeliveryDate = Purchase.FDeliveryDate,
                                            F_QIMB_NOTE = Purchase.F_QIMB_NOTE,
                                            FNOTE = Purchase.FNOTE
                                        });
                                        //更新计划数量(剩余需要排的) 继续去计算下一个采购订单
                                        DayPlanPpbomls.NeedQty -= Qty;
                                        //更新采购订单
                                        sqlList.Add($"/*dialect*/ update T_PRD_MOEntry set FPODemandPlanCount = isnull(FPODemandPlanCount,0)+ '{Qty}' where FENTRYID = {Purchase.FENTRYID}");
                                        //更新Model
                                        var ls = PurchaseInventory.Where(c => c.FENTRYID == Purchase.FENTRYID).FirstOrDefault();
                                        ls.FQTY -= Qty;
                                        if (_NeedQty <= 0)
                                        {
                                            foreach (var mm in mmm)
                                            {
                                                FEntryIdList.Remove(mm);
                                            }
                                            break;
                                        }
                                        mmm.Add(id);
                                    }
                                }
                            }
                        }
                        //if (NeedQty > 0)
                        //{
                        //    LogService.Write("[要料计划]生产订单号:" + item.FBILLNO + ",当前物料:" + item.FMATERIALID + ",需求数量:" + _item.NeedQty + " ,占用采购订单后数量剩余:" + NeedQty);
                        //}
                        NeedQty = 0;
                    }
                    i++;
                }
                var PODemandPlanList = PODemandPlanTemp.GroupBy(p => new { p.PurchseFNUMBER, p.FHMASTERDATE }).Select(x => new PODemandPlanTemp { PurchseFNUMBER = x.Key.PurchseFNUMBER, FHMASTERDATE = x.Key.FHMASTERDATE }).ToList();
                int tlmmm = 1;
                JArray FinalyResult = new JArray();
                foreach (var item in PODemandPlanList)
                {
                    this.View.Session["ProcessRateValue"] = 80 + Convert.ToInt32((Convert.ToDecimal(20) / PODemandPlanList.Count) * tlmmm);
                    DateTime date = item.FHMASTERDATE;
                    string PurchseFNUMBER = item.PurchseFNUMBER;
                    JObject model = new JObject();
                    model.Add("FHDate", date);
                    model.Add("FSettleCurrId", new JObject() { ["Fnumber"] = "PRE001" });
                    model.Add("FSupplierID", new JObject() { ["Fnumber"] = PurchseFNUMBER });
                    JArray Fentity = new JArray();
                    List<PODemandPlanTemp> _PODemandPlanList = PODemandPlanTemp.Where(x => x.FHMASTERDATE == date && x.PurchseFNUMBER == PurchseFNUMBER).ToList();
                    foreach (var _item in _PODemandPlanList)
                    {
                        if (!model.ToString().Contains("FHPURCHASEORGID"))
                            model.Add("FHPURCHASEORGID", new JObject() { ["Fnumber"] = _item.FORGNumber });
                        JObject FentityModel = new JObject();
                        FentityModel.Add("FHMaterID", new JObject() { ["Fnumber"] = _item.FNumber });//物料
                        FentityModel.Add("FHQty", _item.FQty);//数量
                        FentityModel.Add("FHSourceInterID", _item.FID);//日计划工单FID
                        FentityModel.Add("FHSourceEntryID", _item.FENTRYID);//日计划工单FENTRYID
                        FentityModel.Add("FHSourceBillNo", _item.FBILLNO);//日计划工单单号
                        FentityModel.Add("FHSourceBillType", "");//日计划工单类型
                        FentityModel.Add("FDayPlanDate", _item.OLDDATE);//日计划工单类型
                        FentityModel.Add("FHRelationQty", _item.PurchseFqty);//关联数量
                        FentityModel.Add("FFIXLEADTIME", _item.FFIXLEADTIME);//提前期
                        FentityModel.Add("FPURCHASEORGID", new JObject() { ["Fnumber"] = _item.FORGNumber });//采购组织
                        FentityModel.Add("FHPOOrderInterID", _item.PurchseFID);// 采购订单内码:FHPOOrderInterID
                        FentityModel.Add("FHPOOrderEntryID", _item.PurchseFentryID); //采购订单子内码:FHPOOrderEntryID
                        FentityModel.Add("FHPOOrderBillNo", _item.PurchseFBillNo); //采购订单号:FHPOOrderBillNo
                        FentityModel.Add("FERPCLSID", _item.FErpClsID); //发料方式
                        FentityModel.Add("FUnitID", new JObject() { ["Fnumber"] = "Pcs" }); //发料方式
                        FentityModel.Add("FSalOrderNo", _item.FXQD); //需求单号
                        FentityModel.Add("FCgddCreaterId", new JObject() { ["FUserID"] = _item.FCREATORID }); //采购员
                        FentityModel.Add("FCgDate", _item.FDate); //采购订单单据日期
                                                                  //FentityModel.Add("FCgDeliveryDate", _item.FDeliveryDate); //采购订单交货日期
                        FentityModel.Add("F_QIMB_NOTE", _item.F_QIMB_NOTE); //采购订单摘要
                        FentityModel.Add("FNOTE", _item.FNOTE); //采购订单表体备注
                        Fentity.Add(FentityModel);
                    }
                    model.Add("FEntity", Fentity);
                    FinalyResult.Add(model);
                    if ((tlmmm >= 20 || tlmmm == PODemandPlanList.Count) && (tlmmm % 20 == 0 || tlmmm == PODemandPlanList.Count))
                    {
                        JObject jsonRoot = new JObject()
                        {
                            ["Creator"] = "",
                            ["NeedUpDateFields"] = new JArray(),
                            ["NeedReturnFields"] = new JArray(),
                            ["IsDeleteEntry"] = "false",
                            ["SubSystemId"] = "",
                            ["IsVerifyBaseDataField"] = "false",
                            ["Model"] = FinalyResult
                        };
                        CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
                        var result = cloudClient.BatchSave("bsv_ProductPlan", jsonRoot.ToString());
                        JObject saveObj = JObject.Parse(result);
                        string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                        if (saveIsSuc != "TRUE")
                        {
                            this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
                        }
                        FinalyResult = new JArray();
                    }
                    tlmmm++;
                }
                sw.Stop();//结束计时
                LogService.Write("要料计划执行完成 调用webapi 用时:" + sw.Elapsed + "总行数:" + PODemandPlanTemp.Count);
                DBServiceHelper.ExecuteBatch(Context, sqlList);
                return "操作成功";
            }
            catch (Exception ex)
            {
                LogService.Write(ex.Message.ToString());
                return ex.Message.ToString();
            }
        }
    }
MES/src/BLL/Demo.BillView/PRD/Pur_ReceiveByExcel.cs
@@ -352,7 +352,6 @@
                        };
                        CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
                        var result = cloudClient.Save("PUR_ReceiveBill", jsonRoot.ToString());
                        //LogService.Write("result"+ result);
                        JObject saveObj = JObject.Parse(result);
                        string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                        if (saveIsSuc == "TRUE")
MES/src/BLL/Demo.BillView/PRD/SalOrderSaveVal.cs
@@ -36,12 +36,10 @@
                //for循环,读取数据
                foreach (var data in dataEntities)
                {
                    //LogService.Write("校验器测试");
                    var FID = data.DataEntity["Id"]?.ToString();//日计划工单FID
                    var FPRDMOENTYID = Convert.ToInt32(data.DataEntity["FPRDMOENTYID"]?.ToString());//生产订单明细 FentryID
                    var FSRCBILLENTRYSEQ = data.DataEntity["FSRCBILLENTRYSEQ"]?.ToString();//生产订单明细行号
                    var FSCOrderNo = data.DataEntity["FSCOrderNo"]?.ToString(); //生产订单号
                    var FOrderQuantity = Convert.ToDecimal(data.DataEntity["FOrderQuantity"]?.ToString()); //生产订单总数
                    var FDayPlanQuantity = Convert.ToDecimal(data.DataEntity["FDayPlanQuantity"]?.ToString()); //日计划数量总量
                    var FMOENTRYID = Convert.ToInt32(data.DataEntity["FMOENTRYID"]?.ToString());//生产订单明细 FMOENTRYID(新)
@@ -50,9 +48,12 @@
                    if (FMOENTRYID == 0 || FMOENTRYID == FPRDMOENTYID)
                    {
                        //LogService.Write($"{FPRDMOENTYID},,{FSRCBILLENTRYSEQ},,{FSCOrderNo},,{FOrderQuantity},,{FOrderQuantity},,{FDayPlanQuantity},,,,");
                        var FOrderQuantity = DBServiceHelper.ExecuteScalar<decimal>(Context, "select Fqty from t_prd_moentry where fentryid ="+ FPRDMOENTYID.ToString(), 0);
                        string sql = $"select convert(decimal(18,2),sum(FDayPlanQuantity)) from Sc_WorkBillSortBillMain where FPRDMOENTYID = {FPRDMOENTYID} and (FMoEntryId = 0 or FMoEntryId = FPRDMOENTYID ) and FID <>{FID}";
                        decimal FOrderCount = DBServiceHelper.ExecuteScalar<decimal>(Context, sql, 0);
                        LogService.Write("sql:" + sql);
                        LogService.Write("FOrderCount:" + FOrderCount);
                        bool isSave = FOrderCount + FDayPlanQuantity > FOrderQuantity;
                        if (isSave)
                        {
@@ -87,8 +88,11 @@
        where FPRDMOENTYID ={0}   and FMOENTRYID in({0},0 )  
        and  FID <> {1}
        ) t1", FMOENTRYID, FID);
                        LogService.Write("_sql:"+ _sql);
                        //string sql = $"select convert(decimal(18,2),sum(FDayPlanQuantity)) from Sc_WorkBillSortBillMain where FMoEntryId = {FMOENTRYID}   and FID <>{FID}";
                        decimal FOrderCount = DBServiceHelper.ExecuteScalar<decimal>(Context, _sql, 0);
                        var FOrderQuantity = DBServiceHelper.ExecuteScalar<decimal>(Context, "select Fqty from t_prd_moentry where fentryid =" + FMOENTRYID.ToString(), 0);
                        //LogService.Write("FOrderCount:" + FOrderCount);
                        bool isSave = FOrderCount + FDayPlanQuantity > FOrderQuantity;
                        if (isSave)
                        {
MES/src/BLL/Demo.TimedTaskPlugIn/Demo.TimedTaskPlugIn.csproj
@@ -134,7 +134,6 @@
  <ItemGroup>
    <Compile Include="PRD\DayPlanAddTask.cs" />
    <Compile Include="PRD\TLPlanMessege.cs" />
    <Compile Include="PRD\TLPlanTimeTaskYl.cs" />
    <Compile Include="PRD\TLPlanTimeTaskByPurchase.cs" />
    <Compile Include="PRD\TLPlanTimeTask.cs" />
    <Compile Include="PRD\DayPlanPPBomBillTimeTask.cs" />
MES/src/BLL/Demo.TimedTaskPlugIn/PRD/TLPlanTimeTaskYl.cs
File was deleted