| | |
| | | using Kingdee.BOS.Core; |
| | | using Kingdee.BOS.ServiceHelper; |
| | | using System.Data; |
| | | using ZD.Cloud.Logger; |
| | | |
| | | using Newtonsoft.Json.Linq; |
| | | using System; |
| | | using Kingdee.BOS.Util; |
| | |
| | | using ZD.Cloud.WebApi; |
| | | using Demo.Model.Model; |
| | | using Demo.Model.Model.PODemandPlan; |
| | | using System.Diagnostics; |
| | | |
| | | using System.Collections.Generic; |
| | | using ZD.Share.Common; |
| | | using ZD.Cloud.Logger; |
| | | |
| | | namespace Demo.TimedTaskPlugIn.PRD |
| | | { |
| | |
| | | DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; |
| | | if (dt.Rows.Count > 0) |
| | | { |
| | | Stopwatch sw = new Stopwatch(); |
| | | sw.Start(); |
| | | Extraction(); |
| | | sqlList.Add($"/*dialect*/ update sc_TLPLANZXJH set FZXDATE = getdate(), FISZX = 1 where FISZX = 0 "); |
| | | DBServiceHelper.ExecuteBatch(Context, sqlList); |
| | | LogHelper.Info("提料计划时长:" + sw.Elapsed); |
| | | sw.Stop(); |
| | | } |
| | | } |
| | | catch (System.Exception ex) |
| | | { |
| | | LogHelper.Error(ex.Message.ToString()); |
| | | //LogHelper.Error(ex.Message.ToString()); |
| | | } |
| | | } |
| | | |
| | | public void Extraction() |
| | | { |
| | | LogHelper.Info("[生产订单缺料生成提料计划--准备阶段]:开始执行提料计划逻辑"); |
| | | //LogHelper.Info("[生产订单缺料生成提料计划--准备阶段]:开始执行提料计划逻辑"); |
| | | try |
| | | { |
| | | //Stopwatch sw = new Stopwatch(); |
| | |
| | | exec [提料计划预处理] |
| | | "); |
| | | DBServiceHelper.Execute(Context, sql); |
| | | //LogHelper.Info("[提料计划准备阶段]提料计划预处理sql:" + sql); |
| | | ////LogHelper.Info("[提料计划准备阶段]提料计划预处理sql:" + sql); |
| | | //采购订单数据 |
| | | sql = @" |
| | | /*dialect*/ |
| | |
| | | and t1.FBillTypeID in('83d822ca3e374b4ab01e5dd46a0062bd','6d01d059713d42a28bb976c90a121142') |
| | | "; |
| | | List<PurchaseInventory> PurchaseInventory = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList<PurchaseInventory>(); |
| | | //LogHelper.Info("[提料计划准备阶段]可用采购订单数据sql:" + sql); |
| | | ////LogHelper.Info("[提料计划准备阶段]可用采购订单数据sql:" + sql); |
| | | sql = string.Format(@" |
| | | /*dialect*/ |
| | | SELECT T1.FID,FHMASTERDATE,t1.FEntryID,T1.FBILLNO, FNeedQty,(FLeadtime+FLeadTtime2)FFIXLEADTIME,t5.FMAXPOQTY,FJITBatch FMINPOQTY,FJITMATERIALGROUP,FJITMaterielDemand,FJITSafeStock,t1.FMATERIALID,t6.FNumber,NeedQty, FStockOrgId ,FErpClsID |
| | |
| | | AND T1.FID in (select distinct FDAYPLANID from sc_TLPLANZXJH where FISZX = 0) |
| | | order by FHMASTERDATE |
| | | "); |
| | | //LogHelper.Info("[提料计划准备阶段]需要提料数据sql:" + sql); |
| | | ////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(); |
| | | //LogHelper.Info("[提料计划准备阶段]总物料行数" + MaterialIDList.Count); |
| | | ////LogHelper.Info("[提料计划准备阶段]总物料行数" + MaterialIDList.Count); |
| | | //提料计划数据集临时存储集合 |
| | | List<PODemandPlanTemp> PODemandPlanTemp = new List<PODemandPlanTemp>(); |
| | | //sql集合 更新采购订单占用的提料计划数量 |
| | |
| | | LogHelper.Info("[提料计划开始]当前物料无采购信息:" + item.FMATERIALID + " 库存组织:" + item.FStockOrgId); |
| | | continue; |
| | | } |
| | | //LogHelper.Info(item.FMATERIALID.ToString()); |
| | | ////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;//最小起订量 |
| | |
| | | _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId && x.FQTY > 0).OrderBy(x => x.FENTRYID).ToList(); |
| | | if (_PurchaseInventory.Count == 0) |
| | | { |
| | | //LogHelper.Info("[提料计划开始]当前物料明细无采购信息:" + item.FMATERIALID + " 库存组织:" + item.FStockOrgId); |
| | | ////LogHelper.Info("[提料计划开始]当前物料明细无采购信息:" + item.FMATERIALID + " 库存组织:" + item.FStockOrgId); |
| | | break; |
| | | } |
| | | |
| | |
| | | FEntryIdList.Add(_item.FENTRYID); |
| | | NeedQty += _item.NeedQty; |
| | | |
| | | //LogHelper.Info("记录明细id:" + _item.FENTRYID + ""); |
| | | //LogHelper.Info("总需求量:" + NeedQty + ""); |
| | | //LogHelper.Info("最小起订量:" + FMINPOQTY + ""); |
| | | ////LogHelper.Info("记录明细id:" + _item.FENTRYID + ""); |
| | | ////LogHelper.Info("总需求量:" + NeedQty + ""); |
| | | ////LogHelper.Info("最小起订量:" + FMINPOQTY + ""); |
| | | if (NeedQty <= FMINPOQTY) |
| | | { |
| | | LogHelper.Info("[提料计划]当前物料明细无采购信息:" + item.FMATERIALID + ",数量:" + NeedQty + ",最小起订量:" + FMINPOQTY + ""); |
| | | //LogHelper.Info("[提料计划]当前物料明细无采购信息:" + item.FMATERIALID + ",数量:" + NeedQty + ",最小起订量:" + FMINPOQTY + ""); |
| | | } |
| | | |
| | | if ((FJITmaterialGroup == "总量控制规格类" || FJITmaterialGroup == "订单专用个性类") && FEntryIdList.Count < Convert.ToInt32(FJITMaterielDemand) && i < _DayPlanPpbom.Count) //订单专用个性类 |
| | |
| | | //{ |
| | | foreach (var Purchase in _PurchaseInventory) |
| | | { |
| | | //LogHelper.Info("采购订单号测试:" + Purchase.FBillNo); |
| | | //LogHelper.Info("物料:" + Purchase.FMATERIALID + ",采购订单数量:" + Purchase.FQTY); |
| | | ////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(); |
| | | decimal Qty = DayPlanPpbomls.NeedQty;//订单数量 |
| | | //if (Qty == 0) |
| | | // LogHelper.Info("订单数量为0"); |
| | | // //LogHelper.Info("订单数量为0"); |
| | | if (Qty > _NeedQty) |
| | | Qty = _NeedQty; //订单数量>采购订单数量 取采购订单 |
| | | |
| | | //if (_NeedQty == 0) |
| | | // LogHelper.Info("订单数量为0"); |
| | | // //LogHelper.Info("订单数量为0"); |
| | | |
| | | _NeedQty = _NeedQty - Qty; |
| | | PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp |
| | |
| | | } |
| | | 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(); |
| | | LogHelper.Info($"提料计划,数据准备完成,保存到Model实体,总行数:{PODemandPlanTemp.Count}"); |
| | | //LogHelper.Info($"提料计划,数据准备完成,保存到Model实体,总行数:{PODemandPlanTemp.Count}"); |
| | | int tlmmm = 1; |
| | | JArray FinalyResult = new JArray(); |
| | | foreach (var item in PODemandPlanList) |
| | |
| | | FinalyResult.Add(model); |
| | | if ((tlmmm >= 20 || tlmmm == PODemandPlanList.Count) && (tlmmm % 20 == 0 || tlmmm == PODemandPlanList.Count)) |
| | | { |
| | | LogHelper.Info("提料计划新增批量执行,记录循环的当前条数" + tlmmm); |
| | | //LogHelper.Info("提料计划新增批量执行,记录循环的当前条数" + tlmmm); |
| | | JObject jsonRoot = new JObject() |
| | | { |
| | | ["Creator"] = "", |
| | |
| | | string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); |
| | | if (saveIsSuc != "TRUE") |
| | | { |
| | | LogHelper.Error(jsonRoot.ToString()); |
| | | //LogHelper.Error(jsonRoot.ToString()); |
| | | } |
| | | FinalyResult = new JArray(); |
| | | } |
| | | tlmmm++; |
| | | } |
| | | //sw.Stop();//结束计时 |
| | | //LogHelper.Info("提料计划执行完成,运行总时长:" + sw.Elapsed); |
| | | ////LogHelper.Info("提料计划执行完成,运行总时长:" + sw.Elapsed); |
| | | DBServiceHelper.ExecuteBatch(Context, sqlList); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.Info("提料计划跳出:" + ex.Message.ToString()); |
| | | //LogHelper.Info("提料计划跳出:" + ex.Message.ToString()); |
| | | } |
| | | // var PODemandPlanList22 = PODemandPlanTemp.GroupBy(p => new {p.FSUPPLIERID, p.FHMASTERDATE }).ToList(); |
| | | } |