王 垚
2021-01-11 00fd34bd2af438eaedf04a9ef9a47dc90feab788
预留释放修改 代码上传
1个文件已修改
127 ■■■■ 已修改文件
src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatform.cs 127 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatform.cs
@@ -104,11 +104,12 @@
                    {
                        this.View.ShowErrMessage(ex.Message.ToString());
                    }
                    finally {
                    finally
                    {
                        this.View.ShowMessage("操作成功!");
                    }
                }
                //预留
                if (e.BarItemKey.ToUpper() == "TBRESERVE")
@@ -1201,15 +1202,12 @@
            {
                FDayPlanWorkID += Convert.ToString(dr["FID"]) + ",";
            }
            FDayPlanWorkID = FDayPlanWorkID.Substring(0, FDayPlanWorkID.Length - 1);
            //提料计划预处理 清理提料计划单数据 更新采购订单提料计划数量
            sql = string.Format(@"
 
 exec [提料计划预处理] '{0}'
 ", FDayPlanWorkID.Replace(",", "-"));
            DBServiceHelper.Execute(Context, sql);
            //采购订单数据
            sql = @"
@@ -1224,7 +1222,6 @@
";
            List<PurchaseInventory> PurchaseInventory = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList<PurchaseInventory>();
            LogHelper.Info("采购订单数据" + sql);
            sql = string.Format(@"
 /*dialect*/
 SELECT T1.FID,FHMATERID,FHMASTERDATE,FHQTY,FCOMPLETECOUNT,FPRDMOMAINID,T2.FENTRYID,T1.FBILLNO, FNeedQty,(FLeadtime+FLeadTtime2)FFIXLEADTIME,t5.FMAXPOQTY,FJITBatch FMINPOQTY,FJITMATERIALGROUP,FJITMaterielDemand,FJITSafeStock,t3.FMATERIALID,t6.FNumber,FHQTY*FNeedQty NeedQty,FHPRDORGID FStockOrgId FROM  SC_WORKBILLSORTBILLMAIN T1 
@@ -1245,7 +1242,6 @@
            LogHelper.Info("提料数据" + sql);
            DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
            List<DayPlanPpbom> DayPlanPpbom = ds.ToModelList<DayPlanPpbom>();
            //所有物料的库存
            ds = DBServiceHelper.ExecuteDataSet(Context, @" /*dialect*/ select   sum(FBASEQTY)FBASEQTY,FMATERIALID,FStockOrgId from T_STK_Inventory group by FMATERIALID, FStockOrgId ");
            ListInventoryByStockOrgId = ds.ToModelList<PRD_Inventory>();
@@ -1794,15 +1790,12 @@
            {
                FDayPlanWorkID += Convert.ToString(dr["FID"]) + ",";
            }
            FDayPlanWorkID = FDayPlanWorkID.Substring(0, FDayPlanWorkID.Length - 1);
            //提料计划预处理 清理提料计划单数据 更新采购订单提料计划数量
            sql = string.Format(@"
  /*dialect*/
 exec [提料计划预处理] '{0}'
 ", FDayPlanWorkID.Replace(",", "-"));
            DBServiceHelper.Execute(Context, sql);
            //采购订单数据
            sql = @"
@@ -1817,7 +1810,6 @@
";
            List<PurchaseInventory> PurchaseInventory = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList<PurchaseInventory>();
            LogHelper.Info("采购订单数据" + sql);
            sql = string.Format(@"
 /*dialect*/
 SELECT T1.FID,FHMATERID,FHMASTERDATE,FHQTY,FCOMPLETECOUNT,FPRDMOMAINID,T2.FENTRYID,T1.FBILLNO, FNeedQty,(FLeadtime+FLeadTtime2)FFIXLEADTIME,t5.FMAXPOQTY,FJITBatch FMINPOQTY,FJITMATERIALGROUP,FJITMaterielDemand,FJITSafeStock,t3.FMATERIALID,t6.FNumber,FHQTY*FNeedQty NeedQty,FHPRDORGID FStockOrgId FROM  SC_WORKBILLSORTBILLMAIN T1 
@@ -1838,12 +1830,10 @@
            LogHelper.Info("提料数据" + 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 == "105773").ToList();
            LogHelper.Info("物料行数" + MaterialIDList.Count);
            //提料计划数据集临时存储集合
            List<PODemandPlanTemp> PODemandPlanTemp = new List<PODemandPlanTemp>();
            //sql集合 更新采购订单占用的提料计划数量
@@ -1851,16 +1841,23 @@
            //MaterialIDList = new List<string> { "105773" };
            foreach (var item in MaterialIDList)
            {
                LogHelper.Info(item.FMATERIALID.ToString());
                //当前物料没有采购订单时 直接跳出
                List<PurchaseInventory> _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId && x.FQTY > 0).ToList();
                if (_PurchaseInventory.Count == 0)
                {
                    LogHelper.Info("当前物料无采购信息:" + item.FMATERIALID + " 库存组织:" + item.FStockOrgId);
                    continue;
                }
                //LogHelper.Info(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;
                DateTime DATE = _DayPlanPpbom.FirstOrDefault().FHMASTERDATE;//第一个订货起始日期
                int i = 1;
                //记录在最小采购量需求下的日计划明细FentyrID
                List<int> FEntryIdList = new List<int>();
@@ -1874,22 +1871,22 @@
                        continue;
                    if (NeedQty >= FMINPOQTY)
                    {
                        /*修改前 判断方式
                        List<PurchaseInventory> _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId && x.FQTY > 0).ToList();
                        if (_PurchaseInventory.Count == 0)
                        {
                            NeedQty = 0;
                            break;
                        }
                        */
                        foreach (var Purchase in _PurchaseInventory)
                        {
                            LogHelper.Info("Purchase");
                            LogHelper.Info("物料:" + Purchase.FMATERIALID + ",数量:" + Purchase.FQTY);
                            //LogHelper.Info("Purchase");
                            //LogHelper.Info("物料:" + Purchase.FMATERIALID + ",数量:" + Purchase.FQTY);
                            if (Purchase.FQTY >= NeedQty)
                            {
                                List<int> mmm = new List<int>();
                                foreach (int id in FEntryIdList)
                                {
                                    mmm.Add(id);
                                    var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault();
                                    PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp
                                    {
@@ -1925,15 +1922,16 @@
                            }
                            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;
                                    decimal Qty = DayPlanPpbomls.NeedQty;//订单数量
                                    if (Qty > _NeedQty)
                                        Qty = _NeedQty;
                                        Qty = _NeedQty; //订单数量>采购订单数量 取采购订单
                                    _NeedQty = _NeedQty - DayPlanPpbomls.NeedQty;
                                    PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp
                                    {
@@ -1956,6 +1954,7 @@
                                        FStockOrgId = Purchase.FStockOrgId, //采购组织
                                        FORGNumber = Purchase.FORGNumber
                                    });
                                    //更新计划数量(剩余需要排的) 继续去计算下一个采购订单
                                    DayPlanPpbomls.NeedQty -= Qty;
                                    //更新采购订单
                                    sqlList.Add($"/*dialect*/ update t_PUR_POOrderEntry set FPODemandPlanCount = isnull(FPODemandPlanCount,0)+ '{Qty}' where FENTRYID = {Purchase.FENTRYID}");
@@ -1980,7 +1979,6 @@
                        }
                        NeedQty = 0;
                    }
                    #region 剩下不足时按最小采购批次生成
                    //剩下不足时按最小采购批次生成
                    //else if (i == _DayPlanPpbom.Count && NeedQty > 0)
@@ -1992,12 +1990,10 @@
                    //        NeedQty = 0;
                    //        break;
                    //    }
                    //    foreach (var Purchase in _PurchaseInventory)
                    //    {
                    //        if (Purchase.FQTY >= NeedQty)
                    //        {
                    //            List<int> mmm = new List<int>();
                    //            foreach (int id in FEntryIdList)
                    //            {
@@ -2014,14 +2010,12 @@
                    //                    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
                    //                });
                    //                //扣除日计划明细已被分配的数量
                    //                DayPlanPpbomls.NeedQty = 0;
@@ -2041,7 +2035,6 @@
                    //            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 > _NeedQty)
@@ -2058,25 +2051,19 @@
                    //                    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
                    //                });
                    //                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)
@@ -2085,14 +2072,12 @@
                    //                    }
                    //                    break;
                    //                }
                    //                mmm.Add(id);
                    //            }
                    //            foreach (var mm in mmm)
                    //            {
                    //                FEntryIdList.Remove(mm);
                    //            }
                    //        }
                    //    }
                    //    NeedQty = 0;
@@ -2101,30 +2086,22 @@
                    i++;
                }
            }
            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;
                string PurchseFNUMBER = item.PurchseFNUMBER;
                JObject model = new JObject();
                model.Add("FHDate", date);
                model.Add("FHRemark", "生产订单号:" + "测试呢呢");
                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)
                {
                    JObject FentityModel = new JObject();
                    FentityModel.Add("FHPURCHASEORGID", new JObject() { ["Fnumber"] = _item.FORGNumber });//采购组织
                    FentityModel.Add("FHMaterID", new JObject() { ["Fnumber"] = _item.FNumber });//物料
                    FentityModel.Add("FHQty", _item.FQty);//数量
                    FentityModel.Add("FHSourceInterID", _item.FID);//日计划工单FID
@@ -2155,17 +2132,10 @@
                var result = cloudClient.Save("paez_PODemandPlan", jsonRoot.ToString());
                JObject saveObj = JObject.Parse(result);
                string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                LogHelper.Info("最后");
                LogHelper.Info(jsonRoot.ToString());
                if (saveIsSuc == "TRUE")
                {
                }
                else
                {
                if (saveIsSuc != "TRUE")
                    LogHelper.Error(saveIsSuc);
                }
            }
            DBServiceHelper.ExecuteBatch(Context, sqlList);
            // var PODemandPlanList22 = PODemandPlanTemp.GroupBy(p => new   {p.FSUPPLIERID,     p.FHMASTERDATE }).ToList();
@@ -2187,7 +2157,14 @@
                Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity");
                //单据体信息转换为列表集合
                DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity);
                EntryGrid grid = this.View.GetControl<EntryGrid>("FEntity");
                DynamicObjectCollection filterResult = entityDataObjoct.Clone();
                filterResult.Clear();
                entityDataObjoct.Where(x => Convert.ToBoolean(x["FFOCUS"])).ToList().ForEach(x => filterResult.Add(x));
                if (filterResult.Count == 0)
                {
                    this.View.ShowMessage("请选择需要预留的单据!");
                    return;
                }
                //总库存 物料+库存组织+库存数量
                DataSet ds = DBServiceHelper.ExecuteDataSet(Context, @" 
/*dialect*/ 
@@ -2266,7 +2243,7 @@
                    }
                    sql = string.Format(@"/*dialect*/
--生产用料清单列表
SELECT T1.FID,T1.FBillNo,T1.FMOBillNO,T1.FMOEntrySeq,T1.FMoId,T1.FMaterialID,T1.FQty,FPRDORGID FStockOrgId,
SELECT T1.FID,T1.FBillNo,T2.FENTRYID,T1.FMOBillNO,T1.FMOEntrySeq,T1.FMoId,T1.FMaterialID,T1.FQty,FPRDORGID FStockOrgId,
T2.FMATERIALID FMATERIALID2,T4.FNumber,T2.FNeedQty,convert(decimal(18,2),FNeedQty/T1.FQty ) as dwyl,
t5.FBASEUNITID,t6.FSTOREUNITID,t7.FID FSTKID,t7.FOwnerID,t7.FOwnerTypeID,t7.FSTOCKID,t7.FBASEQTY
--,isnull(t3.FBASEQTY,0)FBASEQTY
@@ -2286,14 +2263,14 @@
                    foreach (DataRow dr in skDt.Rows)
                    {
                        LockStockArgs lockStockArgs = new LockStockArgs();
                        lockStockArgs.ObjectId = "SAL_SaleOrder";
                        lockStockArgs.BillId = Convert.ToString(current["FHMainSourceInterID"]); //生产订单ID
                        lockStockArgs.BillNo = Convert.ToString(current["FSCOrderNo"]);//生产订单号
                        lockStockArgs.FID = Convert.ToInt32(current["FHMainSourceInterID"]); //生产订单ID
                        lockStockArgs.ObjectId = "PRD_PPBOM"; //字段 FDEMANDFORMID = 'PRD_PPBOM'
                        lockStockArgs.BillId = dr["FID"].ToString(); //生产用料清单主表ID
                        lockStockArgs.BillDetailID = dr["FENTRYID"].ToString();//生产用料清单明细表ID
                        lockStockArgs.BillNo = dr["FBillNo"].ToString();//生产用料清单单据号
                        lockStockArgs.FEntryID = Convert.ToInt32(current["FHMainSourceEntryID"]); ;
                        lockStockArgs.FID = Convert.ToInt32(current["FHMainSourceInterID"]); //生产订单行ID
                        lockStockArgs.BaseQty = decimal.Parse(dr["FBASEQTY"].ToString());//基本单位数量
                        lockStockArgs.BaseUnitID = int.Parse(dr["FBASEUNITID"].ToString());//基本单位
                        lockStockArgs.BillDetailID = Convert.ToString(current["FHMainSourceEntryID"]);
                        lockStockArgs.FEntryID = Convert.ToInt32(current["FHMainSourceEntryID"]); ;
                        //lockStockArgs.Lot = Convert.ToString(current["FBatch"]); ;//批次 FBatch
                        lockStockArgs.MaterialID = long.Parse(dr["FMATERIALID2"].ToString());
                        lockStockArgs.OwnerID = long.Parse(dr["FOwnerID"].ToString());
@@ -2308,6 +2285,20 @@
                        list.Add(lockStockArgs);
                    }
                    var sa = StockServiceHelper.SaveLockInfo(Context, list, "Inv", false);
                    sql = @"/*dialect*/
                             update a set
                             FPARENTFORMID    ='PRD_MO',
                             FPARENTINTERID    =b.FMOID,
                             FPARENTENTRYID    =b.FMOENTRYID,
                             FPARENTBILLNO = b.FMOBILLNO,
                             FSRCFORMID = 'PRD_MO',
                             FSRCINTERID = b.FMOID,
                             FSRCENTRYID = b.FMOENTRYID,
                             FSRCBILLNO = b.FMOBILLNO
                             from T_PLN_RESERVELINK a
                             join T_PRD_PPBOM b on a.FDEMANDINTERID = b.FID
                             where a.FPARENTINTERID = '' and a.FPARENTENTRYID =''";
                    DBServiceHelper.Execute(Context, sql);
                    this.View.ShowMessage("操作成功!");
                }
            }
@@ -2330,13 +2321,23 @@
                DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity);
                DynamicObjectCollection filterResult = entityDataObjoct.Clone();
                filterResult.Clear();
                entityDataObjoct.Where(x => Convert.ToBoolean(x["FFOCUS"])).ToList().ForEach(x=> filterResult.Add(x));
                foreach (DynamicObject current in entityDataObjoct)
                entityDataObjoct.Where(x => Convert.ToBoolean(x["FFOCUS"])).ToList().ForEach(x => filterResult.Add(x));
                if (filterResult.Count == 0)
                {
                    this.View.ShowMessage("请选择需要预留的单据!");
                    return;
                }
                foreach (DynamicObject current in filterResult)
                {
                    if (Convert.ToString(current["FFOCUS"]) == "False")
                        continue;
                    string sql = string.Format(@"/*dialect*/ update Sc_WorkBillSortBillSub set FReservedCount = 0 where FID='{0}'", current["FDayPlanWorkID"].ToString());
                    DBServiceHelper.Execute(Context, sql);
                    //删除锁库表(不用更新库存 库存表没有更)
                    sql = string.Format(@"/*dialect*/
delete T_PLN_RESERVELINKENTRY where FID IN (SELECT FID FROM T_PLN_RESERVELINK WHERE FPARENTINTERID='{0}' AND FPARENTENTRYID='{1}')
delete T_PLN_RESERVELINK WHERE  FPARENTINTERID='{0}' AND FPARENTENTRYID='{1}'", Convert.ToString(current["FHMainSourceInterID"]), Convert.ToString(current["FHMainSourceEntryID"]));
                }
                this.View.ShowMessage("操作成功!");
            }