|
@ -15,6 +15,7 @@ import ( |
|
|
model "leit.com/LAPP_CHEERSSON_BACKEND/models/ap" |
|
|
model "leit.com/LAPP_CHEERSSON_BACKEND/models/ap" |
|
|
model_base "leit.com/LAPP_CHEERSSON_BACKEND/models/base" |
|
|
model_base "leit.com/LAPP_CHEERSSON_BACKEND/models/base" |
|
|
"leit.com/LAPP_CHEERSSON_BACKEND/utils" |
|
|
"leit.com/LAPP_CHEERSSON_BACKEND/utils" |
|
|
|
|
|
logUtils "leit.com/LAPP_CHEERSSON_BACKEND/utils/log" |
|
|
"log" |
|
|
"log" |
|
|
"math" |
|
|
"math" |
|
|
"reflect" |
|
|
"reflect" |
|
@ -3358,6 +3359,7 @@ func (impl *BalanceServiceImplement) RefreshBalanceData(user *global.User) error |
|
|
|
|
|
|
|
|
timeNow := time.Now() |
|
|
timeNow := time.Now() |
|
|
var firstDemandList []model.ArticleDemand |
|
|
var firstDemandList []model.ArticleDemand |
|
|
|
|
|
|
|
|
for _, info := range demandLstLi { |
|
|
for _, info := range demandLstLi { |
|
|
resourceId := "" |
|
|
resourceId := "" |
|
|
MidBatchQuantity := 0 |
|
|
MidBatchQuantity := 0 |
|
@ -3483,7 +3485,16 @@ func (impl *BalanceServiceImplement) RefreshBalanceData(user *global.User) error |
|
|
if weekTimeNow.After(nowdemandWeek) { |
|
|
if weekTimeNow.After(nowdemandWeek) { |
|
|
continue |
|
|
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 { |
|
|
if nowdemandWeek.After(afterWeek) || nowdemandWeek == afterWeek { |
|
|
continue |
|
|
continue |
|
|
} |
|
|
} |
|
@ -3520,6 +3531,206 @@ func (impl *BalanceServiceImplement) RefreshBalanceData(user *global.User) error |
|
|
firstDemandList = append(firstDemandList, firstArticleDemand) |
|
|
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) |
|
|
keyArtIdMap := make(map[string]map[string]model.ArticleDemand) |
|
|
for _, v := range firstDemandList { |
|
|
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 { |
|
|
for artId, value1 := range keyArtIdMap { |
|
|
var beforeList []model.ArticleDemand |
|
|
var beforeList []model.ArticleDemand |
|
|
for _, value2 := range value1 { |
|
|
for _, value2 := range value1 { |
|
|