From 1be5dedf430a991c6cd806075f43720f910e290a Mon Sep 17 00:00:00 2001 From: "DESKTOP-4672LME\\Xu Tengfei" Date: Fri, 31 Dec 2021 23:37:47 +0800 Subject: [PATCH] =?UTF-8?q?uta=E7=89=88=E6=9C=AC=E4=BF=AE=E6=94=B9=20?= =?UTF-8?q?=E5=B1=95=E6=9C=9B=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/htm_log_config.yaml | 15 +- meta/ap/MpsSetting.meta.go | 4 +- models/ap/MpsSetting.model.go | 1 + services/ap/implments/Balance.service.impl.go | 215 +++++++++++++++++- .../ap/implments/MpsSetting.service.impl.go | 1 + 5 files changed, 231 insertions(+), 5 deletions(-) diff --git a/conf/htm_log_config.yaml b/conf/htm_log_config.yaml index a3f6a61..9c8c281 100644 --- a/conf/htm_log_config.yaml +++ b/conf/htm_log_config.yaml @@ -12,4 +12,17 @@ config: - "time" - "info" - "request" - - "response" \ No newline at end of file + - "response" + salesorder: + # 文件location + filename: ./log/salesOrder + filetype: html + default: "" + # 支持文件的最大个数 + MaxAge: 30 + info: "
时间:[time]错误提示:[info]
Request:[request]
Response:[response]

" + replace: + - "time" + - "info" + - "request" + - "response" \ No newline at end of file diff --git a/meta/ap/MpsSetting.meta.go b/meta/ap/MpsSetting.meta.go index b753af9..58f30cb 100644 --- a/meta/ap/MpsSetting.meta.go +++ b/meta/ap/MpsSetting.meta.go @@ -36,6 +36,7 @@ var MpsSetting_LastModify = grmi.NewField("LastModify", "[AP_MpsSetting].LastMod var MpsSetting_LastUser = grmi.NewField("LastUser", "[AP_MpsSetting].LastUser", "lastuser", grmi.TypeString) var MpsSetting_CreateTime = grmi.NewField("CreateTime", "[AP_MpsSetting].CreateTime", "createtime", grmi.TypeDateTime) var MpsSetting_SalesOrderFetchLeadTimeByDay = grmi.NewField("SalesOrderFetchLeadTimeByDay", "[AP_MpsSetting].SalesOrderFetchLeadTimeByDay", "salesorderfetchleadtimebyday", grmi.TypeInt) +var MpsSetting_DefaultLookAheadWeeks = grmi.NewField("DefaultLookAheadWeeks", "[AP_MpsSetting].DefaultLookAheadWeeks", "defaultlookaheadweeks", grmi.TypeInt) /****************************************************************************** * @@ -70,6 +71,7 @@ var MpsSetting = grmi.NewEntity( MpsSetting_LastUser.Name: MpsSetting_LastUser, MpsSetting_CreateTime.Name: MpsSetting_CreateTime, MpsSetting_SalesOrderFetchLeadTimeByDay.Name: MpsSetting_SalesOrderFetchLeadTimeByDay, + MpsSetting_DefaultLookAheadWeeks.Name: MpsSetting_DefaultLockWeeks, }, []string{"PlantNr"}, - []string{"Descr", "MpsRule", "MpsStartDaysDeviation", "MpsStartWeeksDeviation", "MpsStartMonthsDeviation", "UseCustDemandLockToggle", "DefaultLockDays", "DefaultLockWeeks", "DefaultLockMonths", "UseFixedStockCoverToggle", "DefaultMinCoverPeriod", "DefaultMaxCoverPeriod", "DefaultMinCoverPeriodType", "DefaultMaxCoverPeriodType", "LastUser","SalesOrderFetchLeadTimeByDay"}) + []string{"Descr", "MpsRule", "MpsStartDaysDeviation", "MpsStartWeeksDeviation", "MpsStartMonthsDeviation", "UseCustDemandLockToggle", "DefaultLockDays", "DefaultLockWeeks", "DefaultLockMonths", "UseFixedStockCoverToggle", "DefaultMinCoverPeriod", "DefaultMaxCoverPeriod", "DefaultMinCoverPeriodType", "DefaultMaxCoverPeriodType", "LastUser","SalesOrderFetchLeadTimeByDay","DefaultLookAheadWeeks"}) diff --git a/models/ap/MpsSetting.model.go b/models/ap/MpsSetting.model.go index 052799e..e64144a 100644 --- a/models/ap/MpsSetting.model.go +++ b/models/ap/MpsSetting.model.go @@ -40,6 +40,7 @@ type MpsSetting struct { LastUser string `xorm:"nvarchar(20) 'LastUser' not null" json:"AP_MpsSetting-LastUser"` CreateTime grmi.DateTime `xorm:"datetime 'CreateTime' not null created" json:"AP_MpsSetting-CreateTime"` SalesOrderFetchLeadTimeByDay int `xorm:"int 'SalesOrderFetchLeadTimeByDay' not null" json:"AP_MpsSetting-SalesOrderFetchLeadTimeByDay"` + DefaultLookAheadWeeks int `xorm:"int 'DefaultLookAheadWeeks' not null" json:"AP_MpsSetting-DefaultLookAheadWeeks"` } /****************************************************************************** diff --git a/services/ap/implments/Balance.service.impl.go b/services/ap/implments/Balance.service.impl.go index ab299ff..cceedc9 100644 --- a/services/ap/implments/Balance.service.impl.go +++ b/services/ap/implments/Balance.service.impl.go @@ -15,6 +15,7 @@ import ( model "leit.com/LAPP_CHEERSSON_BACKEND/models/ap" model_base "leit.com/LAPP_CHEERSSON_BACKEND/models/base" "leit.com/LAPP_CHEERSSON_BACKEND/utils" + logUtils "leit.com/LAPP_CHEERSSON_BACKEND/utils/log" "log" "math" "reflect" @@ -3358,6 +3359,7 @@ func (impl *BalanceServiceImplement) RefreshBalanceData(user *global.User) error timeNow := time.Now() var firstDemandList []model.ArticleDemand + for _, info := range demandLstLi { resourceId := "" MidBatchQuantity := 0 @@ -3483,7 +3485,16 @@ func (impl *BalanceServiceImplement) RefreshBalanceData(user *global.User) error if weekTimeNow.After(nowdemandWeek) { continue } - afterWeek := utils.WeekDayMondayZeroTs(timeNow.Add(time.Duration((int(MaxCoverPeriod)+lockWeeks)*24*7) * time.Hour)) + + //展望期 取最大 + maxWeeks := 0 + if int(MaxCoverPeriod)+lockWeeks > mpsSettingOne.DefaultLookAheadWeeks{ + maxWeeks = int(MaxCoverPeriod)+lockWeeks + }else{ + maxWeeks = mpsSettingOne.DefaultLookAheadWeeks + } + + afterWeek := utils.WeekDayMondayZeroTs(timeNow.Add(time.Duration(maxWeeks*24*7) * time.Hour)) if nowdemandWeek.After(afterWeek) || nowdemandWeek == afterWeek { continue } @@ -3520,6 +3531,206 @@ func (impl *BalanceServiceImplement) RefreshBalanceData(user *global.User) error firstDemandList = append(firstDemandList, firstArticleDemand) } + dao_SalesOrder := dal_base.NewSalesOrderDAO(session, user.PlantNr, user.UserId) + SalesOrderList ,err := dao_SalesOrder.Select([]grmi.Predicate{meta_base.SalesOrder_ProductType.NewPredicate(grmi.Equal, "DD")}, nil) + if err != nil { + session.Rollback() + return grmi.NewBusinessError("查询SalesOrder失败, error:" + err.Error()) + } + + for _, salesOrder := range SalesOrderList{ + resourceId := "" + MidBatchQuantity := 0 + demandWeekInt,demandYearInt, demandMonthInt := utils.WeekByDate(salesOrder.RecieveTime.Restore()) + demandWeek := strconv.Itoa(demandWeekInt) + for _, resource := range alldata_ArticleResource { + if salesOrder.ArtId == resource.ArtId { + resourceId = resource.ResourceId + break + } + } + if resourceId == "" { + for _, resource := range alldata_ArticleSecondResource { + if salesOrder.ArtId == resource.ArtId { + resourceId = resource.SecondaryResourceId + break + } + } + } + if resourceId == "" { + + //return grmi.NewBusinessError("缺少物料资源关联关系,物料 :" + salesOrder.ArtId) + message := make(map[string]string) + message["time"] = time.Now().Format("2006-01-02 03:04:05") + message["info"] = "订单编号:" + strings.Split(salesOrder.OrderId, "_")[1] + " 物料编号:" + salesOrder.ArtId + message["request"] = "主要资源不存在" + message["response"] = "" + fmt.Println(message["info"]) + logUtils.Write("salesorder",message,"") + continue + } + + //lockWeeks_article := 0 + isIn := false + for _, article := range alldata_Article { + if salesOrder.ArtId == article.ArtId { + MidBatchQuantity = article.MidBatchQuantity + //lockWeeks_article = int(article.DeliveryBuffer) + isIn = true + break + } + } + if !isIn{ + message := make(map[string]string) + message["time"] = time.Now().Format("2006-01-02 03:04:05") + message["info"] = "订单编号:" + strings.Split(salesOrder.OrderId, "_")[1] + " 物料编号:" + salesOrder.ArtId + message["request"] = "物料不存在" + message["response"] = "" + fmt.Println(message["info"]) + logUtils.Write("salesorder",message,"") + continue + } + if MidBatchQuantity == 0 { + MidBatchQuantity = 10 + } + + if len(demandWeek) == 1 { + demandWeek = "0" + demandWeek + } + + //demandKey := strconv.Itoa(info.DemandYear) + "." + demandWeek + "_" + resourceId + week, year, _ := utils.WeekByDate(salesOrder.RecieveTime.Restore()) + demandKey := fmt.Sprintf("%d.%02d", year, week) + + var customerIdLi []string + var customerLi []model_base.Customer + for _, CustArt := range alldata_CustArtlst{ + if salesOrder.ArtId == CustArt.ArtId{ + customerIdLi = append(customerIdLi, CustArt.CustomerId) + } + } + for _, customer := range customerIdLi { + for _, custInfo := range alldata_Customer{ + if custInfo.CustomerId == customer{ + customerLi = append(customerLi, custInfo) + } + } + } + //custArticleList, err := dao_CustArticle.Select([]grmi.Predicate{meta.CustArtlst_ArtId.NewPredicate(grmi.Equal, info.ArtId)}, nil) + //if err != nil { + // session.Rollback() + // return grmi.NewBusinessError(" error:" + err.Error()) + //} + + lockWeeks := 0 + //覆盖周期 + MinCoverPeriod, MaxCoverPeriod := 0.0, 0.0 + + for _, article := range alldata_Article{ + if article.ArtId == salesOrder.ArtId{ + lockWeeks = int(article.DeliveryBuffer) + break + } + } + + //todo + if lockWeeks == 0{ + if mpsSettingOne.UseCustDemandLockToggle { + for _, customer := range customerLi{ + if customer.LockWeeks > lockWeeks { + lockWeeks = customer.LockWeeks + } + } + + if lockWeeks == 0{ + lockWeeks = mpsSettingOne.DefaultLockWeeks + } + }else{ + lockWeeks = mpsSettingOne.DefaultLockWeeks + } + } + + + if lockWeeks == 0 { + return grmi.NewBusinessError( "未获取到吸收期:"+ salesOrder.ArtId) + } + + //var custArticleList []model.CustArtlst + //for _, custArticle := range alldata_CustArtlst{ + // if custArticle.ArtId == info.ArtId{ + // custArticleList = append(custArticleList, custArticle) + // } + //} + + if mpsSettingOne.UseFixedStockCoverToggle { + MinCoverPeriod = mpsSettingOne.DefaultMinCoverPeriod + MaxCoverPeriod = mpsSettingOne.DefaultMaxCoverPeriod + } else { + + //基于物料的吸收期 + 目标库存覆盖周数从MDS中抓取需求(包括预测、正式订单和独立订单) + for _, articleStockLevelInfo := range alldata_ArticleStockLevel { + if articleStockLevelInfo.ArtId == salesOrder.ArtId && articleStockLevelInfo.MinCoverPeriodType == "W" { + MinCoverPeriod = articleStockLevelInfo.MinCoverPeriod + } + if articleStockLevelInfo.ArtId == salesOrder.ArtId && articleStockLevelInfo.MaxCoverPeriodType == "W" { + MaxCoverPeriod = articleStockLevelInfo.MaxCoverPeriod + } + } + } + + //需求周期 + mps策略表偏离天数 > 当前时间+ 并且 需求周期 < (当前时间+吸收期+最大覆盖周期) + weekTimeNow := utils.WeekDayMondayZeroTs(timeNow) + nowdemandWeek := utils.WeekDayMondayZeroTs(salesOrder.RecieveTime.Restore()) + //weekTimeDemand := utils.WeekDayMondayZeroTs(demandWeek.Add(time.Duration(frontday*24*7) * time.Hour)) + if weekTimeNow.After(nowdemandWeek) { + continue + } + + //展望期 取最大 + maxWeeks := 0 + if int(MaxCoverPeriod)+lockWeeks > mpsSettingOne.DefaultLookAheadWeeks{ + maxWeeks = int(MaxCoverPeriod)+lockWeeks + }else{ + maxWeeks = mpsSettingOne.DefaultLookAheadWeeks + } + + afterWeek := utils.WeekDayMondayZeroTs(timeNow.Add(time.Duration(maxWeeks*24*7) * time.Hour)) + if nowdemandWeek.After(afterWeek) || nowdemandWeek == afterWeek { + continue + } + + firstArticleDemand := model.ArticleDemand{ + PlantNr: user.PlantNr, + ArtId: salesOrder.ArtId, + DemandKey: demandKey, + DemandPeriodType: "W", + CustomerId: salesOrder.CustomerId, + DemandDate: grmi.Date(salesOrder.RecieveTime), + DemandYear: demandYearInt, + DemandWeek: demandWeekInt, + DemandMonth: int(demandMonthInt), + ForecastDemandQty: 0, //预测需求 + OrderQty: 0, //订单需求 + OutSourcingQty: 0, //外购需求 + IndependentDemandQty: 0, //独立需求 + WipQty: 0, //在制量 + OpeningInventory: 0, //期初库存 + TargetInventory: 0, //目标库存 + MinInventory: 0, //最低库存 + NetDemandQty: 0, // 净生产量 mps + EndingInventory: 0, //期末库存 + + MidBatchQuantity: MidBatchQuantity, //每次削减量 + LockWeeks: lockWeeks, //前置期 + MinCoverPeriod: MinCoverPeriod, + MaxCoverPeriod: MaxCoverPeriod, + MinCoverPeriodType: "W", + ResourceId: resourceId, + } + + firstDemandList = append(firstDemandList, firstArticleDemand) + } + //聚合 keyArtIdMap := make(map[string]map[string]model.ArticleDemand) for _, v := range firstDemandList { @@ -3552,8 +3763,6 @@ func (impl *BalanceServiceImplement) RefreshBalanceData(user *global.User) error //} } - dao_SalesOrder := dal_base.NewSalesOrderDAO(session, user.PlantNr, user.UserId) - for artId, value1 := range keyArtIdMap { var beforeList []model.ArticleDemand for _, value2 := range value1 { diff --git a/services/ap/implments/MpsSetting.service.impl.go b/services/ap/implments/MpsSetting.service.impl.go index 896ab69..90a6d65 100644 --- a/services/ap/implments/MpsSetting.service.impl.go +++ b/services/ap/implments/MpsSetting.service.impl.go @@ -42,6 +42,7 @@ var DefaultConditionOfMpsSetting = grmi.NewCondition( meta.MpsSetting_LastUser.UrlParameterName: grmi.NewConditionItem(meta.MpsSetting_LastUser, grmi.Equal, false), meta.MpsSetting_CreateTime.UrlParameterName: grmi.NewConditionItem(meta.MpsSetting_CreateTime, grmi.Approximate, false), meta.MpsSetting_SalesOrderFetchLeadTimeByDay.UrlParameterName: grmi.NewConditionItem(meta.MpsSetting_SalesOrderFetchLeadTimeByDay, grmi.Equal, false), + meta.MpsSetting_DefaultLockWeeks.UrlParameterName: grmi.NewConditionItem(meta.MpsSetting_DefaultLockWeeks, grmi.Equal, false), }, nil, )