王 垚
2020-11-18 8e68896d21f1da755d3b7610f33b8e7cee376099
代码上传
2个文件已修改
325 ■■■■ 已修改文件
src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatform.cs 310 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Model/Demo.Model/Model/PODemandPlan/PODemandPlanTemp.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatform.cs
@@ -481,10 +481,15 @@
            {
                var ls = ListInventory.Where(c => c.FMATERIALID == t.FMATERIALID2).FirstOrDefault();
                if (ls == null)
                {
                    list.Add(0);
                    continue;
                }
                SumGetComplete = Math.Floor(ls.FBASEQTY / (t.FNeedQty / t.FQty));
                list.Add(SumGetComplete);
            }
            //没有物料的库存信息
            SumGetComplete = list.Min();
            if (SumGetComplete > SumPlan)//系统可生产最大齐套数大于计划需求量时,取计划
@@ -808,11 +813,6 @@
        public void Extraction3()
        {
            //采购订单数据
            string sql = @"select t1.FID,t1.FBillNo,t2.FENTRYID,t1.FSUPPLIERID,t3.fnumber,t2.FMATERIALID,t2.FQTY 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";
            List<PurchaseInventory> PurchaseInventory = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList<PurchaseInventory>();
            //获取单据体信息
            Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity");
@@ -832,70 +832,114 @@
                    FDayPlanWorkID += Convert.ToString(current["FDayPlanWorkID"]) + ",";
                }
            }
            FDayPlanWorkID = FDayPlanWorkID.Substring(0, FDayPlanWorkID.Length - 1);
            //提料计划预处理 清理提料计划单数据 更新采购订单提料计划数量
            string sql = string.Format(@"
 /*dialect*/
 exec [提料计划预处理] '{0}'
 ", FDayPlanWorkID.Replace(",", "-"));
            DBServiceHelper.Execute(Context, sql);
            //采购订单数据
            sql = @"select t1.FID,t1.FBillNo,t2.FENTRYID,t1.FSUPPLIERID,t3.fnumber,t2.FMATERIALID,(t2.FQTY-t2.FPODemandPlanCount)FQTY 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
where t2.FQTY-t2.FPODemandPlanCount>0
";
            List<PurchaseInventory> PurchaseInventory = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList<PurchaseInventory>();
            sql = string.Format(@"
/*dialect*/
 /*dialect*/
 SELECT T1.FID,FHMATERID,FHMASTERDATE,FHQTY,FCOMPLETECOUNT,FPRDMOMAINID,T2.FENTRYID,T1.FBILLNO, FNeedQty,t5.FFIXLEADTIME,t5.FMAXPOQTY,t5.FMINPOQTY,t3.FMATERIALID,t6.FNumber,FHQTY*FNeedQty NeedQty  FROM  SC_WORKBILLSORTBILLMAIN T1 
JOIN SC_WORKBILLSORTBILLSUB T2 ON T1.FID=T2.FID
LEFT JOIN(SELECT FID, max(FMoId)FMoId,MAX(FENTRYID) FENTRYID, SUM(convert(decimal(18, 2), FBASENUMERATOR / FBASEDENOMINATOR))FNeedQty, FMATERIALID from T_PRD_PPBOMENTRY
group by FMATERIALID, FID) T3 on T1.FPRDMOMAINID = t3.FMoId
LEFT JOIN(SELECT T1.FID,max(t2.FMATERIALID)FMATERIALIDMAIN, max(t2.FMoId)FMoId,MAX(FENTRYID) FENTRYID, SUM(convert(decimal(18, 2), FBASENUMERATOR / FBASEDENOMINATOR))FNeedQty, T1.FMATERIALID from T_PRD_PPBOMENTRY  T1
JOIN T_PRD_PPBOM   T2 on t1.FID = t2.FID
group by T1.FMATERIALID, T1.FID) T3 on T1.FPRDMOMAINID = t3.FMoId  and T1.FHMATERID = t3.FMATERIALIDMAIN
JOIN T_BD_MATERIAL T6 ON T3.FMATERIALID = T6.FMATERIALID
join t_BD_MaterialBase t4 on t3.FMATERIALID = t4.FMATERIALID
join t_BD_MaterialPlan t5 on t3.FMATERIALID = t5.FMATERIALID
WHERE  DATEDIFF(D,GETDATE(),FHMASTERDATE) >=0
AND FPLANCOUNT>FCOMPLETECOUNT
AND FERPCLSID=1
AND T1.FID='{0}'", FDayPlanWorkID);
AND FERPCLSID=1
AND T2.FENTRYID not in (select distinct FHSOURCEENTRYID from CG_PODEMANDPLANBILLSUB where FHSOURCEINTERID IN ({0}))
AND T1.FID in ({0})
order by FHMASTERDATE
", FDayPlanWorkID);
            DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
            List<DayPlanPpbom> DayPlanPpbom = ds.ToModelList<DayPlanPpbom>();
            //物料集合 由物料去分组
            List<string> MaterialIDList = DayPlanPpbom.Select(x => x.FMATERIALID).Distinct().ToList();
            //提料计划数据集
            //提料计划数据集临时存储集合
            List<PODemandPlanTemp> PODemandPlanTemp = new List<PODemandPlanTemp>();
            //sql集合 更新采购订单占用的提料计划数量
            List<string> sqlList = new List<string>();
            foreach (string item in MaterialIDList)
            {
                List<DayPlanPpbom> _DayPlanPpbom = DayPlanPpbom.Where(x => x.FMATERIALID == item).ToList();
                decimal FMINPOQTY = _DayPlanPpbom.FirstOrDefault().FMINPOQTY;//最小起订量
                double FFIXLEADTIME = _DayPlanPpbom.FirstOrDefault().FFIXLEADTIME;//提前期
                decimal NeedQty = 0;
                DateTime DATE = _DayPlanPpbom.FirstOrDefault().FHMASTERDATE;
                int i = 1;
                //记录在最小采购量需求下的日计划明细FentyrID
                List<int> FEntryIdList = new List<int>();
                foreach (var _item in _DayPlanPpbom)
                {
                    if (NeedQty == 0)
                        DATE = Convert.ToDateTime(_item.FHMASTERDATE);
                        DATE = Convert.ToDateTime(_item.FHMASTERDATE).AddDays(-FFIXLEADTIME);
                    FEntryIdList.Add(_item.FENTRYID);
                    NeedQty += _item.NeedQty;
                    if (NeedQty >= FMINPOQTY)
                    {
                        List<PurchaseInventory> _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item && x.FQTY > 0).ToList();
                        if (_PurchaseInventory.Count == 0)
                            continue;
                        {
                            NeedQty = 0;
                            break;
                        }
                        foreach (var Purchase in _PurchaseInventory)
                        {
                            if (Purchase.FQTY >= NeedQty)
                            {
                                PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp
                                List<int> mmm = new List<int>();
                                foreach (int id in FEntryIdList)
                                {
                                    FID = _item.FID,
                                    FHMASTERDATE = DATE,
                                    FQty = NeedQty,
                                    FBILLNO = _item.FBILLNO,
                                    FENTRYID = _item.FENTRYID,
                                    FMATERIALID = _item.FMATERIALID,
                                    FNumber = _item.FNumber,
                                    mmm.Add(id);
                                    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,
                                    PurchseFID = Purchase.FID,
                                    PurchseFentryID = Purchase.FENTRYID,
                                    FSUPPLIERID = Purchase.FSUPPLIERID,
                                    PurchseFNUMBER = Purchase.FNUMBER,
                                    PurchseFBillNo = Purchase.FBillNo
                                        PurchseFID = Purchase.FID,
                                        PurchseFentryID = Purchase.FENTRYID,
                                        FSUPPLIERID = Purchase.FSUPPLIERID,
                                        PurchseFNUMBER = Purchase.FNUMBER,
                                        PurchseFBillNo = Purchase.FBillNo,
                                        PurchseFqty = Purchase.FQTY
                                });
                                    });
                                    //扣除日计划明细已被分配的数量
                                    var _ls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault();
                                    _ls.NeedQty = 0;
                                }
                                FEntryIdList.Clear();
                                //更新采购订单
                                sqlList.Add($"/*dialect*/ update t_PUR_POOrderEntry set FPODemandPlanCount += '{NeedQty}' where FENTRYID = {Purchase.FENTRYID}");
                                //扣除当前行对应采购订单数量
                                var ls = PurchaseInventory.Where(c => c.FENTRYID == Purchase.FENTRYID).FirstOrDefault();
                                ls.FQTY -= NeedQty;
@@ -903,60 +947,117 @@
                            }
                            else
                            {
                                PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp
                                decimal _NeedQty = Purchase.FQTY;
                                List<int> mmm = new List<int>();
                                foreach (int id in FEntryIdList)
                                {
                                    FID = _item.FID,
                                    FHMASTERDATE = DATE,
                                    FQty = Purchase.FQTY,
                                    FBILLNO = _item.FBILLNO,
                                    FENTRYID = _item.FENTRYID,
                                    FMATERIALID = _item.FMATERIALID,
                                    FNumber = _item.FNumber,
                                    PurchseFID = Purchase.FID,
                                    PurchseFentryID = Purchase.FENTRYID,
                                    FSUPPLIERID = Purchase.FSUPPLIERID,
                                    PurchseFNUMBER = Purchase.FNUMBER,
                                    PurchseFBillNo = Purchase.FBillNo
                                    var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault();
                                    decimal Qty = DayPlanPpbomls.NeedQty;
                                    if (Qty > _NeedQty)
                                        Qty = _NeedQty;
                                    _NeedQty = _NeedQty - DayPlanPpbomls.NeedQty;
                                    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,
                                });
                                        PurchseFID = Purchase.FID,
                                        PurchseFentryID = Purchase.FENTRYID,
                                        FSUPPLIERID = Purchase.FSUPPLIERID,
                                        PurchseFNUMBER = Purchase.FNUMBER,
                                        PurchseFBillNo = Purchase.FBillNo,
                                        PurchseFqty = Purchase.FQTY
                                    });
                                    //更新采购订单
                                    sqlList.Add($"/*dialect*/ update t_PUR_POOrderEntry set FPODemandPlanCount += '{Purchase.FQTY}' where FENTRYID = {Purchase.FENTRYID}");
                                    //更新Model
                                    var ls = PurchaseInventory.Where(c => c.FENTRYID == Purchase.FENTRYID ).FirstOrDefault();
                                    ls.FQTY = 0;
                                    var _ls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault();
                                    _ls.NeedQty -= Qty;
                                    if (_NeedQty < 0)
                                    {
                                        foreach (var mm in mmm)
                                        {
                                            FEntryIdList.Remove(mm);
                                        }
                                        break;
                                    }
                                    NeedQty = NeedQty - Qty;
                                    mmm.Add(id);
                                }
                                foreach (var mm in mmm)
                                {
                                    FEntryIdList.Remove(mm);
                                }
                                NeedQty = NeedQty - Purchase.FQTY;
                                var ls = PurchaseInventory.Where(c => c.FENTRYID == Purchase.FENTRYID).FirstOrDefault();
                                ls.FQTY = 0;
                            }
                        }
                        NeedQty = 0;
                    }
                    //剩下不足时按最小采购批次生成
                    else if (i == _DayPlanPpbom.Count)
                    else if (i == _DayPlanPpbom.Count && NeedQty > 0)
                    {
                        NeedQty = FMINPOQTY;
                        List<PurchaseInventory> _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item && x.FQTY > 0).ToList();
                        if (_PurchaseInventory.Count == 0)
                            continue;
                        {
                            NeedQty = 0;
                            break;
                        }
                        foreach (var Purchase in _PurchaseInventory)
                        {
                            if (Purchase.FQTY >= NeedQty)
                            {
                                PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp
                                List<int> mmm = new List<int>();
                                foreach (int id in FEntryIdList)
                                {
                                    FID = _item.FID,
                                    FHMASTERDATE = DATE,
                                    FQty = NeedQty,
                                    FBILLNO = _item.FBILLNO,
                                    FENTRYID = _item.FENTRYID,
                                    FMATERIALID = _item.FMATERIALID,
                                    FNumber = _item.FNumber,
                                    mmm.Add(id);
                                    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,
                                    PurchseFID = Purchase.FID,
                                    PurchseFentryID = Purchase.FENTRYID,
                                    FSUPPLIERID = Purchase.FSUPPLIERID,
                                    PurchseFNUMBER = Purchase.FNUMBER,
                                    PurchseFBillNo = Purchase.FBillNo
                                        PurchseFID = Purchase.FID,
                                        PurchseFentryID = Purchase.FENTRYID,
                                        FSUPPLIERID = Purchase.FSUPPLIERID,
                                        PurchseFNUMBER = Purchase.FNUMBER,
                                        PurchseFBillNo = Purchase.FBillNo,
                                        PurchseFqty = Purchase.FQTY
                                });
                                    });
                                    //扣除日计划明细已被分配的数量
                                    var _ls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault();
                                    _ls.NeedQty = 0;
                                }
                                FEntryIdList.Clear();
                                //更新采购订单
                                sqlList.Add($"/*dialect*/ update t_PUR_POOrderEntry set FPODemandPlanCount += '{NeedQty}' where FENTRYID = {Purchase.FENTRYID}");
                                //扣除当前行对应采购订单数量
                                var ls = PurchaseInventory.Where(c => c.FENTRYID == Purchase.FENTRYID).FirstOrDefault();
                                ls.FQTY -= NeedQty;
@@ -964,28 +1065,67 @@
                            }
                            else
                            {
                                PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp
                                decimal _NeedQty = Purchase.FQTY;
                                List<int> mmm = new List<int>();
                                foreach (int id in FEntryIdList)
                                {
                                    FID = _item.FID,
                                    FHMASTERDATE = DATE,
                                    FQty = Purchase.FQTY,
                                    FBILLNO = _item.FBILLNO,
                                    FENTRYID = _item.FENTRYID,
                                    FMATERIALID = _item.FMATERIALID,
                                    FNumber = _item.FNumber,
                                    PurchseFID = Purchase.FID,
                                    PurchseFentryID = Purchase.FENTRYID,
                                    FSUPPLIERID = Purchase.FSUPPLIERID,
                                    PurchseFNUMBER = Purchase.FNUMBER,
                                    PurchseFBillNo = Purchase.FBillNo
                                    var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault();
                                    decimal Qty = DayPlanPpbomls.NeedQty;
                                    if (Qty > _NeedQty)
                                        Qty = _NeedQty;
                                    _NeedQty = _NeedQty - DayPlanPpbomls.NeedQty;
                                    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,
                                });
                                        PurchseFID = Purchase.FID,
                                        PurchseFentryID = Purchase.FENTRYID,
                                        FSUPPLIERID = Purchase.FSUPPLIERID,
                                        PurchseFNUMBER = Purchase.FNUMBER,
                                        PurchseFBillNo = Purchase.FBillNo,
                                        PurchseFqty = Purchase.FQTY
                                    });
                                    //更新采购订单
                                    sqlList.Add($"/*dialect*/ update t_PUR_POOrderEntry set FPODemandPlanCount += '{Purchase.FQTY}' where FENTRYID = {Purchase.FENTRYID}");
                                    //更新Model
                                    var ls = PurchaseInventory.Where(c => c.FENTRYID == Purchase.FENTRYID).FirstOrDefault();
                                    ls.FQTY = 0;
                                    var _ls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault();
                                    _ls.NeedQty -= Qty;
                                    if (_NeedQty < 0)
                                    {
                                        foreach (var mm in mmm)
                                        {
                                            FEntryIdList.Remove(mm);
                                        }
                                        break;
                                    }
                                    NeedQty = NeedQty - Qty;
                                    mmm.Add(id);
                                }
                                foreach (var mm in mmm)
                                {
                                    FEntryIdList.Remove(mm);
                                }
                                NeedQty = NeedQty - Purchase.FQTY;
                                var ls = PurchaseInventory.Where(c => c.FENTRYID == Purchase.FENTRYID).FirstOrDefault();
                                ls.FQTY = 0;
                            }
                        }
                        NeedQty = 0;
                    }
@@ -993,7 +1133,11 @@
                }
            }
            var PODemandPlanList = PODemandPlanTemp.GroupBy(p => new PODemandPlanTemp { PurchseFNUMBER = p.PurchseFNUMBER, FHMASTERDATE = p.FHMASTERDATE }).Select(x => new PODemandPlanTemp { PurchseFNUMBER = x.Key.PurchseFNUMBER, FHMASTERDATE = x.Key.FHMASTERDATE }).ToList();
            var PODemandPlanList222 = PODemandPlanTemp.GroupBy(p => new PODemandPlanTemp { PurchseFNUMBER = p.PurchseFNUMBER, FHMASTERDATE = p.FHMASTERDATE }).Select(x => new PODemandPlanTemp { PurchseFNUMBER = x.Key.PurchseFNUMBER, FHMASTERDATE = x.Key.FHMASTERDATE }).ToList();
            var PODemandPlanList = PODemandPlanTemp.GroupBy(p => new { p.PurchseFNUMBER, p.FHMASTERDATE }).Select(x => new PODemandPlanTemp { PurchseFNUMBER = x.Key.PurchseFNUMBER, FHMASTERDATE = x.Key.FHMASTERDATE }).ToList();
            foreach (var item in PODemandPlanList)
            {
                DateTime date = item.FHMASTERDATE;
@@ -1015,6 +1159,9 @@
                    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("FHPOOrderInterID", _item.PurchseFID);// 采购订单内码:FHPOOrderInterID
                    FentityModel.Add("FHPOOrderEntryID", _item.PurchseFentryID); //采购订单子内码:FHPOOrderEntryID
@@ -1048,6 +1195,7 @@
                }
            }
            DBServiceHelper.ExecuteBatch(Context, sqlList);
            this.View.ShowMessage("操作成功");
            // var PODemandPlanList22 = PODemandPlanTemp.GroupBy(p => new   {p.FSUPPLIERID,     p.FHMASTERDATE }).ToList();
        }
src/Model/Demo.Model/Model/PODemandPlan/PODemandPlanTemp.cs
@@ -69,5 +69,20 @@
        /// </summary>
        public string PurchseFNUMBER { get; set; }
        /// <summary>
        /// 日计划日期
        /// </summary>
        public DateTime OLDDATE { get; set; }
        /// <summary>
        /// 采购订单数量
        /// </summary>
        public decimal PurchseFqty { get; set; }
        /// <summary>
        /// 提前期
        /// </summary>
        public double FFIXLEADTIME { get; set; }
    }
}