王 垚
2020-12-14 ddc23c8a38e7df3c294ca3227793ef717beb6580
JIT分析更改后代码上传
9个文件已修改
2个文件已添加
520 ■■■■ 已修改文件
.editorconfig 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ProductizationTemplate.sln 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/ProCompleteAnalysisDetails.cs 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/ProCompleteAnalysisMateriel.cs 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_ScDayImport.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatform.cs 221 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Model/Demo.Model/Demo.Model.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Model/Demo.Model/Model/CompleteAnalysisTempModel.cs 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Model/Demo.Model/Model/PRD_Inventory.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Model/Demo.Model/Model/PRD_PPBOM.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/ProductizationTemplate/ProductizationTemplate.csproj 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.editorconfig
New file
@@ -0,0 +1,4 @@
[*.cs]
# IDE0055: 修正格式
dotnet_diagnostic.IDE0055.severity = none
ProductizationTemplate.sln
@@ -43,6 +43,11 @@
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Demo.TimedTaskPlugIn", "src\BLL\Demo.TimedTaskPlugIn\Demo.TimedTaskPlugIn.csproj", "{3B5437EE-F19C-4B69-90A4-88866841337B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{20A267C5-DE2B-4929-B29B-E3A16670E30E}"
    ProjectSection(SolutionItems) = preProject
        .editorconfig = .editorconfig
    EndProjectSection
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|Any CPU = Debug|Any CPU
src/BLL/Demo.BillView/PRD/ProCompleteAnalysisDetails.cs
@@ -24,7 +24,6 @@
        public override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            if (this.View.OpenParameter.GetCustomParameter("FHMainICMOInterID") == null)
            {
                SearchList();
@@ -33,47 +32,32 @@
            {
                if (did)
                    return;
                string FHMainICMOInterIDr = this.View.OpenParameter.GetCustomParameter("FHMainICMOInterID").ToString();//主生产订单主内码
                string FHMainICMOEntryID = this.View.OpenParameter.GetCustomParameter("FHMainICMOEntryID").ToString();// 主生产订单子内码
                string FHICMOInterID = this.View.OpenParameter.GetCustomParameter("FHICMOInterID").ToString();//日计划订单主内码
                //string FMatrailId_Id = this.View.OpenParameter.GetCustomParameter("FMatrailId_Id").ToString();
                //string FBillNo = this.View.OpenParameter.GetCustomParameter("FBillNo").ToString();
                string sql = string.Format(@"/*dialect*/select * from JIT_MOMaterReadysBill where FHMainICMOInterIDr ='{0}' and FHMainICMOEntryID ='{1}' and FHICMOInterID='{2}' and FIDENTIFICAT=1 ", FHMainICMOInterIDr, FHMainICMOEntryID, FHICMOInterID);
                string sql = string.Format(@"/*dialect*/select * from JIT_MOMaterReadysBill where FHMainICMOInterIDr ='{0}' and FHMainICMOEntryID ='{1}' and FHICMOInterID='{2}' ", FHMainICMOInterIDr, FHMainICMOEntryID, FHICMOInterID);
                DataTable dt = DBServiceHelper.ExecuteDataSet(this.Context, sql).Tables[0];
                if (dt.Rows.Count > 0)
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        /*
                        计划发料数量 = 计划总数量 * 单位用料
                        齐套数量 = 齐套数 * 单位用料(考虑分层级* 父级)
                        缺料数量 = 1 - 2
                        是否齐套 = 缺料 < 0 ?
                        */
                        decimal FPlanIssueCount = Convert.ToDecimal(dt.Rows[i]["FSumPlanCount"]) * Convert.ToDecimal(dt.Rows[i]["FUNITDOSAGE"]);//计划发料数量
                        decimal FCompleteCount = Convert.ToDecimal(dt.Rows[i]["FCompleteCount"]) * Convert.ToDecimal(dt.Rows[i]["FUNITDOSAGE"]);//齐套数量
                        decimal FLackCount = FPlanIssueCount - FCompleteCount;//缺料数量
                        this.Model.CreateNewEntryRow("FEntity");
                        this.Model.SetValue("FSEQ", i + 1, i);//序号
                        this.Model.SetValue("FMateralDetailId", dt.Rows[i]["FHMATERID"], i);
                        this.Model.SetValue("FPlanIssueCount", FPlanIssueCount, i);//计划发料数量
                        this.Model.SetValue("FCompleteCount", FCompleteCount, i);//齐套数量
                        this.Model.SetValue("FLackCount", FLackCount, i);//缺料数量
                        this.Model.SetValue("FPlanIssueCount", dt.Rows[i]["FSumPlanCount"], i);//计划发料数量
                        this.Model.SetValue("FCompleteCount", dt.Rows[i]["FCompleteCount"], i);//齐套数量
                        this.Model.SetValue("FLackCount", dt.Rows[i]["FLackCount"], i);//缺料数量
                        this.Model.SetValue("FPassableCount", dt.Rows[i]["FHLeftQty"].ToString(), i);//可用数量   
                        this.Model.SetValue("FMateralCount", dt.Rows[i]["FHLeftQty"].ToString(), i);//物料数量   
                        this.Model.SetValue("FCompleteDetailStatus", FLackCount > 0 ? "未齐套" : "齐套", i);//是否齐套
                        this.Model.SetValue("FCompleteDetailStatus", dt.Rows[i]["FComPlete"].ToString(), i);//是否齐套
                        this.Model.SetValue("FHMainICMOInterIDr", dt.Rows[i]["FHMainICMOInterIDr"].ToString(), i);//生产订单内码   
                        this.Model.SetValue("FPRDBillNo", dt.Rows[i]["FPRDBillNo"].ToString(), i);//生产订单内码   
                        this.Model.SetValue("FPlanDate", dt.Rows[i]["FPlanDate"].ToString(), i);//日计划日期
                    }
                }
                did = true;
            }
        }
        public override void BarItemClick(BarItemClickEventArgs e)
        {
            base.BarItemClick(e);
@@ -93,19 +77,15 @@
            base.EntityRowClick(e);
            DynamicFormShowParameter formPa = new DynamicFormShowParameter();
            formPa.FormId = "paez_CompleteAnalysisMateriel";
            /* jsonModel.Add("FHMainICMOInterID", FMainInterID);//主生产订单主内码
             jsonModel.Add("FHMainICMOEntryID", FMainEntryID);//主生产订单子内码
             jsonModel.Add("FHICMOInterID", FDayPlanWorkID);//日计划订单主内码
            current["FMatrailId_Id"].ToString(), current["FHMainSourceInterID"].ToString(), current["FHMainSourceEntryID"].ToString(), current["FDayPlanWorkID"].ToString())
            */
            formPa.CustomParams.Add("FHMainICMOInterIDr", Convert.ToString(this.View.Model.GetValue("FHMainICMOInterIDr", e.Row).ToString()));
            formPa.CustomParams.Add("FMatrailId", Convert.ToString((this.View.Model.GetValue("FMateralDetailId", e.Row) as DynamicObject)["Id"].ToString()));
            this.View.ShowForm(formPa);
        }
        /// <summary>
        /// 查询事件
        /// </summary>
@@ -118,10 +98,10 @@
select FSumPlanCount*FUNITDOSAGE as FPlanIssueCountS,FCompleteCount*FUNITDOSAGE FCompleteCountS,(FSumPlanCount-FCompleteCount)*FUNITDOSAGE FLackCountS,case when FSumPlanCount>FCompleteCount then '未齐套' else '齐套' end CompleteStatus,
t2.FBillNo PRDBillNo,
t1.* from JIT_MOMaterReadysBill T1
JOIN T_PRD_MO t2 on t1.FHMainICMOInterIDr=t2.FID where FIDENTIFICAT=1
JOIN T_PRD_MO t2 on t1.FHMainICMOInterIDr=t2.FID
)AS T 
";
            sql = string.Format(@"/*dialect*/select * from JIT_MOMaterReadysBill");
            //物料
            if ((this.Model.GetValue("FMateralId") as DynamicObject) != null)
            {
@@ -153,18 +133,18 @@
                    this.Model.CreateNewEntryRow("FEntity");
                    this.Model.SetValue("FSEQ", i + 1, i);//序号
                    this.Model.SetValue("FMateralDetailId", dt.Rows[i]["FHMATERID"], i);
                    this.Model.SetValue("FPlanIssueCount", dt.Rows[i]["FPlanIssueCountS"], i);//计划发料数量
                    this.Model.SetValue("FCompleteCount", dt.Rows[i]["FCompleteCountS"], i);//齐套数量
                    this.Model.SetValue("FLackCount", dt.Rows[i]["FLackCountS"], i);//缺料数量
                    this.Model.SetValue("FPlanIssueCount", dt.Rows[i]["FSumPlanCount"], i);//计划发料数量
                    this.Model.SetValue("FCompleteCount", dt.Rows[i]["FCompleteCount"], i);//齐套数量
                    this.Model.SetValue("FLackCount", dt.Rows[i]["FLackCount"], i);//缺料数量
                    this.Model.SetValue("FPassableCount", dt.Rows[i]["FHLeftQty"].ToString(), i);//可用数量   
                    this.Model.SetValue("FMateralCount", dt.Rows[i]["FHLeftQty"].ToString(), i);//物料数量   
                    this.Model.SetValue("FCompleteDetailStatus", dt.Rows[i]["CompleteStatus"].ToString(), i);//是否齐套
                    this.Model.SetValue("FCompleteDetailStatus", dt.Rows[i]["FComPlete"].ToString(), i);//是否齐套
                    this.Model.SetValue("FHMainICMOInterIDr", dt.Rows[i]["FHMainICMOInterIDr"].ToString(), i);//生产订单内码   
                    this.Model.SetValue("FPRDBillNo", dt.Rows[i]["FPRDBillNo"].ToString(), i);//生产订单内码   
                    this.Model.SetValue("FPlanDate", dt.Rows[i]["FPlanDate"].ToString(), i);//日计划日期
                }
            }
            this.View.UpdateView();
            did = true;
        }
    }
src/BLL/Demo.BillView/PRD/ProCompleteAnalysisMateriel.cs
@@ -23,11 +23,9 @@
    {
        bool did = false;
        string FMatrailId = "";
        public override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            if (this.View.OpenParameter.GetCustomParameter("FHMainICMOInterIDr") == null)
            {
                SearchList();
@@ -38,47 +36,32 @@
                    return;
                string FHMainICMOInterIDr = this.View.OpenParameter.GetCustomParameter("FHMainICMOInterIDr").ToString();//主生产订单主内码
                FMatrailId = this.View.OpenParameter.GetCustomParameter("FMatrailId").ToString();//物料
                //string FBillNo = this.View.OpenParameter.GetCustomParameter("FBillNo").ToString();
                string sql = string.Format(@"/*dialect*/select a.*,b.FBILLNO FBILLNOs from JIT_MOMaterReadysBill a  
                                        left join T_PRD_MO b on a.FHMainICMOInterIDr=b.FID
                                        where FHMainICMOInterIDr ='{0}' and FIDENTIFICAT=2 and FHMATERID ='{1}'", FHMainICMOInterIDr, FMatrailId);
                sql = string.Format(@"/*dialect*/select a.*,b.FBILLNO FBILLNOs from JIT_MOMaterReadysBill a  
                                        left join T_PRD_MO b on a.FHMainICMOInterIDr=b.FID
                                        where     FIDENTIFICAT=2 and FHMATERID ='{0}'", FMatrailId);
                                        where   FHMATERID ='{0}'", FMatrailId);
                DataTable dt = DBServiceHelper.ExecuteDataSet(this.Context, sql).Tables[0];
                if (dt.Rows.Count > 0)
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        /*
                        计划发料数量 = 计划总数量 * 单位用料
                        齐套数量 = 齐套数 * 单位用料(考虑分层级* 父级)
                        缺料数量 = 1 - 2
                        是否齐套 = 缺料 < 0 ?
                        */
                        decimal FPlanIssueCount = Convert.ToDecimal(dt.Rows[i]["FSumPlanCount"]) * Convert.ToDecimal(dt.Rows[i]["FUNITDOSAGE"]);//计划发料数量
                        decimal FCompleteCount = Convert.ToDecimal(dt.Rows[i]["FCompleteCount"]) * Convert.ToDecimal(dt.Rows[i]["FUNITDOSAGE"]);//齐套数量
                        decimal FLackCount = FPlanIssueCount - FCompleteCount;//缺料数量
                        this.Model.CreateNewEntryRow("FEntity");
                        this.Model.SetValue("FSEQ", i + 1, i);//序号
                        this.Model.SetValue("FMateralDetailId", dt.Rows[i]["FHMATERID"], i);
                        this.Model.SetValue("FScOrderNoDetail", dt.Rows[i]["FBILLNOs"], i);//生产订单号
                        this.Model.SetValue("FOccupyCount", dt.Rows[i]["FHUseQty"], i);//
                        this.Model.SetValue("FScOrderNoDetail", dt.Rows[i]["FBILLNOs"], i);//生产订单号
                        this.Model.SetValue("FOccupyCount", dt.Rows[i]["FCompleteCount"], i);//
                        this.Model.SetValue("FCurrentCount", dt.Rows[i]["FHStockQty"], i);//当前库存情况  
                        this.Model.SetValue("FOrgId", dt.Rows[i]["FHStockOrgID"], i);//库存组织  
                        this.Model.SetValue("FOwnerTypeId", dt.Rows[i]["FOwnerTypeId"], i);//货主类型  
                        this.Model.SetValue("FOwnerId", dt.Rows[i]["FOwnerId"], i);//货主  
                        this.Model.SetValue("FPlanDate", dt.Rows[i]["FPlanDate"].ToString(), i);//日计划日期
                    }
                }
                did = true;
            }
        }
        /// <summary>
@@ -86,19 +69,16 @@
        /// </summary>
        public void SearchList()
        {
            string sqlwhere = " and 1=1";
            string sqlwhere = " where 1=1";
            string sql = string.Format(@"/*dialect*/select a.*,b.FBILLNO FBILLNOs from JIT_MOMaterReadysBill a  
                                        left join T_PRD_MO b on a.FHMainICMOInterIDr=b.FID where FIDENTIFICAT=2
                                        left join T_PRD_MO b on a.FHMainICMOInterIDr=b.FID
                                         ");
            //生产订单号
            string PRDBillNo = Convert.ToString(this.Model.GetValue("FScOrderNo"));
            if (!string.IsNullOrEmpty(PRDBillNo))
                sqlwhere += $" and FPRDBillNo='{PRDBillNo}'";
            if (FMatrailId != "")
                sqlwhere += $" and FHMATERID='{FMatrailId}'";
            sql += sqlwhere;
            DataTable dt = DBServiceHelper.ExecuteDataSet(this.Context, sql).Tables[0];
            this.Model.DeleteEntryData("FEntity");
@@ -106,38 +86,23 @@
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    /*
                        计划发料数量 = 计划总数量 * 单位用料
                        齐套数量 = 齐套数 * 单位用料(考虑分层级* 父级)
                        缺料数量 = 1 - 2
                        是否齐套 = 缺料 < 0 ?
                        */
                    decimal FPlanIssueCount = Convert.ToDecimal(dt.Rows[i]["FSumPlanCount"]) * Convert.ToDecimal(dt.Rows[i]["FUNITDOSAGE"]);//计划发料数量
                    decimal FCompleteCount = Convert.ToDecimal(dt.Rows[i]["FCompleteCount"]) * Convert.ToDecimal(dt.Rows[i]["FUNITDOSAGE"]);//齐套数量
                    decimal FLackCount = FPlanIssueCount - FCompleteCount;//缺料数量
                    this.Model.CreateNewEntryRow("FEntity");
                    this.Model.SetValue("FSEQ", i + 1, i);//序号
                    this.Model.SetValue("FMateralDetailId", dt.Rows[i]["FHMATERID"], i);
                    this.Model.SetValue("FScOrderNoDetail", dt.Rows[i]["FBILLNOs"], i);//生产订单号
                    this.Model.SetValue("FOccupyCount", dt.Rows[i]["FHUseQty"], i);//
                    this.Model.SetValue("FOccupyCount", dt.Rows[i]["FCompleteCount"], i);//
                    this.Model.SetValue("FCurrentCount", dt.Rows[i]["FHStockQty"], i);//当前库存情况  
                    this.Model.SetValue("FOrgId", dt.Rows[i]["FHStockOrgID"], i);//库存组织  
                    this.Model.SetValue("FOwnerTypeId", dt.Rows[i]["FOwnerTypeId"], i);//库存组织  
                    this.Model.SetValue("FOrgId", dt.Rows[i]["FHStockOrgID"], i);//库存组织  
                    this.Model.SetValue("FOwnerTypeId", dt.Rows[i]["FOwnerTypeId"], i);//货主类型  
                    this.Model.SetValue("FOwnerId", dt.Rows[i]["FOwnerId"], i);//货主  
                    this.Model.SetValue("FPlanDate", dt.Rows[i]["FPlanDate"].ToString(), i);//日计划日期
                }
            }
            this.View.UpdateView();
            did = true;
        }
        public override void BarItemClick(BarItemClickEventArgs e)
        {
            base.BarItemClick(e);
src/BLL/Demo.BillView/PRD/Pro_ScDayImport.cs
@@ -147,9 +147,9 @@
                            this.Model.SetItemValueByNumber("FResourcesId", dt.Rows[i][4].ToString(), i);
                            //  this.Model.SetValue("FMatrailId", dt.Rows[i][5].ToString(), i);
                            this.Model.SetItemValueByNumber("FMatrailId", dt.Rows[i][5].ToString(), i);
                            this.Model.SetValue("FMatrailName", dt.Rows[i][6].ToString(), i);
                            this.Model.SetValue("FModel", dt.Rows[i][7].ToString(), i);
                            this.Model.SetValue("FUnit", dt.Rows[i][8].ToString(), i);
                            //  this.Model.SetValue("FMatrailName", dt.Rows[i][6].ToString(), i);
                            // this.Model.SetValue("FModel", dt.Rows[i][7].ToString(), i);
                            // this.Model.SetValue("FUnit", dt.Rows[i][8].ToString(), i);
                            this.Model.SetValue("FBatch", dt.Rows[i][9].ToString(), i);
                            this.Model.SetValue("FSalOrderCount", dt.Rows[i][10].ToString(), i);
                            this.Model.SetValue("FCompleteSetCount", dt.Rows[i][12].ToString(), i);
src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatform.cs
@@ -25,6 +25,7 @@
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
@@ -95,7 +96,8 @@
                if (e.BarItemKey.ToUpper() == "TBCOMPLETE")
                {
                    COMPLETEMAIN();
                    CompleteSetAnalysis();
                    //COMPLETEMAIN();
                    //  COMPLETE();
                }
                //提料计划
@@ -122,7 +124,7 @@
        /// <summary>
        /// 行双击 跳出齐套分析明细列表
        /// </summary>
        /// <param name="e"></param>
        /// <param name="e"></param>
        public override void EntityRowDoubleClick(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.EntityRowClickEventArgs e)
        {
            var m = e.Row;
@@ -515,7 +517,6 @@
                        else
                        {
                            grid.SetForecolor("FT" + "" + i + "", "#FF0000", m);
                        }
                    }
@@ -544,7 +545,7 @@
        /// <param name="FMainInterID"> 生产订单主码</param>
        /// <param name="FMainEntryID"> 生产订单子码</param>
        /// <param name="FDayPlanWorkID"> 日计划工单FID</param>
        /// <param name="FDayPlanWorkID"> 计划总数量</param>
        /// <param name="SumPlan"> 计划总数量</param>
        /// <param name="FStockOrgId"> 库存组织</param>
        /// <returns></returns>
        public string SumGetComplete(string FMATERIALID, string FMainInterID, string FMainEntryID, string FDayPlanWorkID, decimal SumPlan, string FStockOrgId)
@@ -755,6 +756,204 @@
        ///齐套分析
        public void CompleteSetAnalysis()
        {
            Stopwatch sw = new Stopwatch();
            sw.Start();//开始计时
            //获取当前即时库存 按照物料+库存组织+货主+库存数量
            DataSet ds = DBServiceHelper.ExecuteDataSet(Context, @"
/*dialect*/
  select  isnull(a.FBASEQTY,0)-ISNULL(b.FHUseQty,0) FBASEQTY,T1.FStockOrgId,T1.FMATERIALID,a.FOWNERID,c.FNUMBER from
(
select a.FHPRDORGID FStockOrgId,T2.FMATERIALID from SC_WORKBILLSORTBILLMAIN a
join SC_WORKBILLSORTBILLSub b on a.FID = b.FID
join T_PRD_PPBOM T1 on a.FPRDMOMAINID = t1.FMoId and a.FPRDMOENTYID = t1.FMOENTRYID
LEFT JOIN(select FID,FMATERIALID from T_PRD_PPBOMENTRY
group by FMATERIALID,FID) T2 on T1.FID = t2.FID
group by a.FHPRDORGID,T2.FMATERIALID
) T1
LEFT JOIN T_STK_Inventory a on T1.FStockOrgId = a.FStockOrgId and T1.FMATERIALID =a.FMATERIALID
LEFT JOIN JIT_MOMaterReadysBill B ON T1.FStockOrgId = b.FHSTOCKORGID and T1.FMATERIALID =b.FHMATERID and a.FOwnerId = b.FOwnerId
LEFT join T_ORG_Organizations c on a.FOWNERID = c.FORGID
where isnull(a.FBASEQTY,0)-ISNULL(b.FHUseQty,0)>0
");
            ListInventory = ds.ToModelList<PRD_Inventory>();
            //总库存 物料+库存组织+库存数量
            ds = DBServiceHelper.ExecuteDataSet(Context, @"
/*dialect*/
 select  sum(isnull(a.FBASEQTY,0)-ISNULL(b.FHUseQty,0))FBASEQTY,T1.FStockOrgId,T1.FMATERIALID from
(
select a.FHPRDORGID FStockOrgId,T2.FMATERIALID from SC_WORKBILLSORTBILLMAIN a
join SC_WORKBILLSORTBILLSub b on a.FID = b.FID
join T_PRD_PPBOM T1 on a.FPRDMOMAINID = t1.FMoId and a.FPRDMOENTYID = t1.FMOENTRYID
LEFT JOIN(select FID,FMATERIALID from T_PRD_PPBOMENTRY
group by FMATERIALID,FID) T2 on T1.FID = t2.FID
group by a.FHPRDORGID,T2.FMATERIALID
) T1
LEFT JOIN T_STK_Inventory a on T1.FStockOrgId = a.FStockOrgId and T1.FMATERIALID =a.FMATERIALID
LEFT JOIN JIT_MOMaterReadysBill B ON T1.FStockOrgId = b.FHSTOCKORGID and T1.FMATERIALID =b.FHMATERID
group by T1.FStockOrgId,T1.FMATERIALID
");
            ListInventoryByStockOrgId = ds.ToModelList<PRD_Inventory>();
            //需要齐套分析的数据
            string sql = @"
/*dialect*/
select a.FPRDMOMAINID,a.FPRDMOENTYID,a.FID,b.FEntryID,a.FHPRDORGID FStockOrgId,t5.FNUMBER as OrgFnumber,a.FHOrderLev,b.FHQTY,b.FHMASTERDATE,T1.FBillNo,T1.FMOBillNO,T1.FMOEntrySeq,T1.FMoId,T1.FMaterialID,T1.FQty,
T2.FMATERIALID FMATERIALID2, T4.FNumber,T2.FNeedQty,FNeedQty/FQty dwyl,FHQTY*(FNeedQty/FQty) PlanCount  from SC_WORKBILLSORTBILLMAIN a
join SC_WORKBILLSORTBILLSub b on a.FID = b.FID
join T_PRD_PPBOM T1 on a.FPRDMOMAINID = t1.FMoId and a.FPRDMOENTYID = t1.FMOENTRYID
LEFT JOIN(select FID, MAX(FENTRYID) FENTRYID, SUM(FNeedQty) FNeedQty, FMATERIALID from T_PRD_PPBOMENTRY
group by FMATERIALID, FID ) T2 on T1.FID = t2.FID
 --LEFT JOIN T_STK_Inventory T3 on t2.FMATERIALID = t3.FMATERIALID
JOIN T_BD_MATERIAL T4 on T2.FMATERIALID = T4.FMATERIALID
JOIN T_ORG_Organizations t5 on a.FHPRDORGID = t5.FORGID
--where FPRDMOMAINID = 100010
ORDER BY b.FHMASTERDATE,a.FHOrderLev  ";
            ds = DBServiceHelper.ExecuteDataSet(Context, sql);
            List<PRD_PPBOM> BomList = ds.ToModelList<PRD_PPBOM>();
            //日计划+生产订单子表编码ID
            var DatePlanList = BomList.GroupBy(p => new { p.FHMASTERDATE, p.FPRDMOENTYID }).Select(x => new PRD_PPBOM { FHMASTERDATE = x.Key.FHMASTERDATE, FPRDMOENTYID = x.Key.FPRDMOENTYID }).ToList();
            //CompleteAnalysisTempModel 用于存储临时需要插入数据
            List<CompleteAnalysisTempModel> completeAnalysisTempModel = new List<CompleteAnalysisTempModel>();
            foreach (var item in DatePlanList)
            {
                //筛选出当日计划数据
                var _BomList = BomList.Where(x => x.FHMASTERDATE == item.FHMASTERDATE && x.FPRDMOENTYID == item.FPRDMOENTYID).ToList();
                foreach (var _item in _BomList)
                {
                    //该日计划物料需要数
                    decimal need = _item.PlanCount;
                    //实际总库存
                    decimal sjkc = 0;
                    var sjkcList = ListInventoryByStockOrgId.Where(x => x.FMATERIALID == _item.FMATERIALID2 && x.FStockOrgId == _item.FStockOrgId).FirstOrDefault();
                    sjkc = sjkcList.FBASEQTY;
                    //真正需要取计算的数量(拆分货主)
                    //货主匹配
                    List<PRD_Inventory> _ListInventory = ListInventory.Where(c => c.FMATERIALID == _item.FMATERIALID2 && c.FStockOrgId == _item.FStockOrgId && c.FBASEQTY > 0).ToList();
                    if (_ListInventory.Count > 0)
                    {
                        foreach (var Inventory in _ListInventory)
                        {
                            if (need == 0)
                                break;
                            decimal fCompleteCount = need >= Inventory.FBASEQTY ? Inventory.FBASEQTY : need;//齐套数量
                            decimal fLackCount = _item.PlanCount - fCompleteCount;//缺料数量
                            completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel
                            {
                                FHMainICMOInterIDr = _item.FPRDMOMAINID,
                                FHMainICMOEntryID = _item.FPRDMOENTYID,
                                FHICMOInterID = _item.FID.ToString(),
                                FHICMOEntryID = _item.FEntryID.ToString(),
                                FHMaterID = _item.FNumber,
                                FHStockOrgID = _item.OrgFnumber,
                                FHPRDORGID = _item.OrgFnumber,
                                FPRDBillNo = _item.FMOBillNO,
                                FOwnerTypeId = "BD_OwnerOrg",
                                FOwnerId = Inventory.Fnumber,
                                FUnitDosage = _item.dwyl.ToString(),//单位用量
                                FSumPlanCount = _item.PlanCount.ToString(),//计划总数量
                                FCompleteCount = fCompleteCount, //齐套数量
                                FLackCount = fLackCount,//缺料数量
                                FHStockQty = sjkcList.FBASEQTY,//即时库存
                                FHLeftQty = sjkcList.FBASEQTY,//可用数量
                                FComPlete = fLackCount > 0 ? "未齐套" : "齐套",
                                FPlanDate = item.FHMASTERDATE // 日计划日期
                            });
                            //扣减总库存数量
                            sjkcList.FBASEQTY = sjkc - fCompleteCount > 0 ? sjkc - fCompleteCount : 0;
                            need = need >= Inventory.FBASEQTY ? need - Inventory.FBASEQTY : 0;
                        }
                    }
                    else
                    {
                        completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel
                        {
                            FHMainICMOInterIDr = _item.FPRDMOMAINID,
                            FHMainICMOEntryID = _item.FPRDMOENTYID,
                            FHICMOInterID = _item.FID.ToString(),
                            FHICMOEntryID = _item.FEntryID.ToString(),
                            FHMaterID = _item.FNumber,
                            FHStockOrgID = _item.OrgFnumber,
                            FHPRDORGID = _item.OrgFnumber,
                            FPRDBillNo = _item.FMOBillNO,
                            FOwnerTypeId = "BD_OwnerOrg",
                            FUnitDosage = _item.dwyl.ToString(),//单位用量
                            FSumPlanCount = _item.PlanCount.ToString(),//计划总数量
                            FCompleteCount = 0, //齐套数量
                            FLackCount = _item.PlanCount,//缺料数量
                            FHStockQty = 0,//即时库存
                            FHLeftQty = 0,//可用数量
                            FComPlete = "未齐套",
                            FPlanDate = item.FHMASTERDATE // 日计划日期
                        });
                    }
                }
            }
            foreach (var item in completeAnalysisTempModel)
            {
                JObject jsonRoot = new JObject();
                jsonRoot.Add("Creator", "");
                jsonRoot.Add("NeedUpDateFields", new JArray());
                jsonRoot.Add("NeedReturnFields", new JArray());
                jsonRoot.Add("IsDeleteEntry", "true");
                jsonRoot.Add("SubSystemId", "");
                jsonRoot.Add("IsVerifyBaseDataField", "");
                JObject jsonModel = new JObject();
                jsonModel.Add("FHMainICMOInterIDr", item.FHMainICMOInterIDr);
                jsonModel.Add("FHMainICMOEntryID", item.FHMainICMOEntryID);
                jsonModel.Add("FHICMOInterID", item.FHICMOInterID);
                jsonModel.Add("FHICMOEntryID", item.FHICMOEntryID);
                jsonModel.Add("FHMaterID", new JObject() { ["FNUMBER"] = item.FHMaterID });
                jsonModel.Add("FHUseQty", item.FHUseQty);
                jsonModel.Add("FHStockOrgID", new JObject() { ["FNUMBER"] = item.FHStockOrgID });
                jsonModel.Add("FHStockQty", item.FHStockQty);
                jsonModel.Add("FHLeftQty", item.FHLeftQty);
                jsonModel.Add("FHPRDORGID", new JObject() { ["FNUMBER"] = item.FHStockOrgID });
                jsonModel.Add("FUnitDosage", item.FUnitDosage);
                jsonModel.Add("FSumPlanCount", item.FSumPlanCount);
                jsonModel.Add("FCompleteCount", item.FCompleteCount);
                jsonModel.Add("FPRDBillNo", item.FPRDBillNo);
                jsonModel.Add("FOwnerTypeId", item.FOwnerTypeId);
                jsonModel.Add("FComPlete", item.FComPlete);
                jsonModel.Add("FPlanDate", item.FPlanDate);
                if (item.FOwnerId != null)
                    jsonModel.Add("FOwnerId", new JObject() { ["FNUMBER"] = item.FOwnerId });
                jsonRoot.Add("Model", jsonModel);
                CloudClient cloudClient = new CloudClient("http://localhost/K3Cloud/");
                var result = cloudClient.Save("paez_CompleteAnalysisTemp", jsonRoot.ToString());
                JObject saveObj = JObject.Parse(result);
                string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                if (saveIsSuc != "TRUE")
                {
                    LogHelper.Error(jsonRoot.ToString());
                }
            }
            //执行完成后 更新日计划工单状态
            DBServiceHelper.Execute(Context, @"
/*dialect*/update Sc_WorkBillSortBillSub set FComplete = '不齐套' where FEntryID IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBill where isnull(FCOMPLETE,'未齐套') ='未齐套')
");
            sw.Stop();//结束计时
            LogHelper.Info("运行总时长:" + sw.Elapsed);
        }
        /// <summary>
        /// 查询
        /// </summary>
@@ -808,6 +1007,7 @@
                DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
                DateTime DateNow = DateTime.Now;//获取当前日期
                this.Model.DeleteEntryData("FEntity");
                EntryGrid grid = this.View.GetControl<EntryGrid>("FEntity");
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    this.Model.CreateNewEntryRow("FEntity");
@@ -840,6 +1040,7 @@
                    sql = @"/*dialect*/SELECT * FROM Sc_WorkBillSortBillSub WHERE DATEDIFF(D,GETDATE(),FHMASTERDATE)>=0 and FID=" + dt.Rows[i]["FID"].ToString();
                    DataTable _dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
                    foreach (DataRow dr in _dt.Rows)
                    {
                        /*
@@ -855,6 +1056,8 @@
                        this.Model.SetValue("FT" + getDay.Days.ToString(), dr["FHQTY"].ToString(), i);//日计划工单FID
                        if (dr["FHLockedSub"].ToString() == "1")
                            this.View.GetFieldEditor("FT" + getDay.Days.ToString(), i).Enabled = false; //单据体行锁定字段
                    }
@@ -876,6 +1079,16 @@
                        if (dr["FHLockedSub"].ToString() == "1")
                            this.View.GetFieldEditor("FT" + getDay.Days.ToString(), j).Enabled = false; //单据体行锁定字段
                        if (dr["FCOMPLETE"].ToString() == "未齐套")
                        {
                            this.View.GetFieldEditor("FT" + getDay.Days.ToString(), j).Enabled = false; //单据体行锁定字段
                            grid.SetForecolor("FT" + "" + getDay.Days.ToString() + "", "#FF0000", j);
                        }
                        else
                        {
                            this.View.GetFieldEditor("FT" + getDay.Days.ToString(), j).Enabled = false; //单据体行锁定字段
                            grid.SetForecolor("FT" + "" + getDay.Days.ToString() + "", "#00FF00", j);
                        }
                    }
                }
src/Model/Demo.Model/Demo.Model.csproj
@@ -45,6 +45,7 @@
    <Compile Include="Entity\SCM\SAL_SaleOrder.cs" />
    <Compile Include="Infrastructure\IBillHead.cs" />
    <Compile Include="Infrastructure\IBillEntry.cs" />
    <Compile Include="Model\CompleteAnalysisTempModel.cs" />
    <Compile Include="Model\PODemandPlan\DayPlanPpbom.cs" />
    <Compile Include="Model\PODemandPlan\PODemandPlanTemp.cs" />
    <Compile Include="Model\PODemandPlan\PurchaseInventory.cs" />
src/Model/Demo.Model/Model/CompleteAnalysisTempModel.cs
New file
@@ -0,0 +1,128 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo.Model.Model
{
    public class CompleteAnalysisTempModel
    {
        // "FHMainICMOInterIDr": 1,
        //"FHMainICMOEntryID": 1,
        //"FHICMOInterID": 1,
        //"FHICMOEntryID": 1,
        //"FHMaterID": {
        //    "FNUMBER": "CCCCC"
        //},
        //"FHUseQty": 100.0,
        //"FHStockOrgID": {
        //    "FNumber": "100"
        //},
        //"FHStockQty": 200.0,
        //"FHLeftQty": 200.0,
        //"FHPRDORGID": {
        //    "FNumber": "100"
        //},
        //"FUnitDosage": 20.0,
        //"FSumPlanCount": 500.0,
        //"FCompleteCount": 500,
        //"FPRDBillNo": "1008611",
        //"FOwnerTypeId": "BD_OwnerOrg",
        //"FIdentificat": "2"
        /// <summary>
        /// 主生产订单主内码:FHMainICMOInterIDr
        /// </summary>
        public string FHMainICMOInterIDr { get; set; }
        /// <summary>
        ///  主生产订单子内码:FHMainICMOEntryID
        /// </summary>
        public string FHMainICMOEntryID { get; set; }
        /// <summary>
        ///  日计划订单主内码:FHICMOInterID
        /// </summary>
        public string FHICMOInterID { get; set; }
        /// <summary>
        ///  日计划订单子内码:FHICMOEntryID
        /// </summary>
        public string FHICMOEntryID { get; set; }
        /// <summary>
        ///  子件物料:FHMaterID
        /// </summary>
        public string FHMaterID { get; set; }
        /// <summary>
        ///  库存组织:FHStockOrgID
        /// </summary>
        public string FHStockOrgID { get; set; }
        /// <summary>
        ///生产组织:FHPRDORGID
        /// </summary>
        public string FHPRDORGID { get; set; }
        /// <summary>
        /// 生产订单号:FPRDBillNo
        /// </summary>
        public string FPRDBillNo { get; set; }
        /// <summary>
        /// 标识
        /// </summary>
        public string FIdentificat { get; set; }
        /// <summary>
        ///  货主名称:FOwnerName
        /// </summary>
        public string FOwnerName { get; set; }
        /// <summary>
        ///  货主编码:FOwnerId
        /// </summary>
        public string FOwnerId { get; set; }
        /// <summary>
        /// 货主类型:FOwnerTypeId
        /// </summary>
        public string FOwnerTypeId { get; set; }
        /// <summary>
        /// 齐套状态
        /// </summary>
        public string FComPlete { get; set; }
        /// <summary>
        ///  数量
        /// </summary>
        public string FHUseQty { get; set; }
        /// <summary>
        ///  及时库存数量:FHStockQty
        /// </summary>
        public decimal FHStockQty { get; set; }
        /// <summary>
        ///可用数量:FHLeftQty
        /// </summary>
        public decimal FHLeftQty { get; set; }
        /// <summary>
        /// 缺料数量
        /// </summary>
        public decimal FLackCount { get; set; }
        /// <summary>
        /// 单位用量:FUnitDosage
        /// </summary>
        public string FUnitDosage { get; set; }
        /// <summary>
        /// 计划总数量:FSumPlanCount
        /// </summary>
        public string FSumPlanCount { get; set; }
        /// <summary>
        /// 齐套数量:FCompleteCount q
        /// </summary>
        public decimal FCompleteCount { get; set; }
        /// <summary>
        /// 日计划日期
        /// </summary>
        public DateTime FPlanDate { get; set; }
    }
}
src/Model/Demo.Model/Model/PRD_Inventory.cs
@@ -29,5 +29,10 @@
        /// 库存货主
        /// </summary>
        public string FOwnerId { get; set; }
        /// <summary>
        /// 货主编码
        /// </summary>
        public string Fnumber { get; set; }
    }
}
src/Model/Demo.Model/Model/PRD_PPBOM.cs
@@ -13,9 +13,13 @@
    {
        /// <summary>
        /// 主键
        /// 日计划工单FID
        /// </summary>
        public long FID { get; set; }
        /// <summary>
        /// 日计划明细FEntryID
        /// </summary>
        public long FEntryID { get; set; }
        /// <summary>
        /// 生产用料清单单号
        /// </summary>
@@ -53,6 +57,50 @@
        /// </summary>
        public decimal FBASEQTY { get; set; }
        /// <summary>
        /// 生产订单主码
        /// </summary>
        public string FPRDMOMAINID { get; set; }
        /// <summary>
        /// 生产订单子码
        /// </summary>
        public string FPRDMOENTYID { get; set; }
        /// <summary>
        /// 日计划数量
        /// </summary>
        public string FHQTY { get; set; }
        /// <summary>
        /// 日计划日期
        /// </summary>
        public DateTime FHMASTERDATE { get; set; }
        /// <summary>
        /// 订单等级
        /// </summary>
        public string FHOrderLev { get; set; }
        /// <summary>
        /// 库存组织
        /// </summary>
        public string FStockOrgId { get; set; }
        /// <summary>
        /// 组织名称
        /// </summary>
        public string OrgFnumber { get; set; }
        /// <summary>
        /// 单位用量
        /// </summary>
        public decimal dwyl { get; set; }
        /// <summary>
        /// 预计消耗用量
        /// </summary>
        public decimal PlanCount { get; set; }
    }
}
src/ProductizationTemplate/ProductizationTemplate.csproj
@@ -169,6 +169,9 @@
    <Compile Include="Untity\XhHttpClient.cs" />
  </ItemGroup>
  <ItemGroup>
    <None Include="..\..\.editorconfig">
      <Link>.editorconfig</Link>
    </None>
    <None Include="app.config" />
    <None Include="Config\kdapi.config" />
    <None Include="packages.config" />