Browse Source

Merge pull request 'uta版本修改 展望期' (#284) from feature_mps_2 into develop

Reviewed-on: http://101.201.121.115:3000/leo/LAPP_CHEERSSON_BACKEND/pulls/284
fix_searchHead
yehongyang 3 years ago
parent
commit
6b3a43c50b
5 changed files with 231 additions and 5 deletions
  1. +14
    -1
      conf/htm_log_config.yaml
  2. +3
    -1
      meta/ap/MpsSetting.meta.go
  3. +1
    -0
      models/ap/MpsSetting.model.go
  4. +212
    -3
      services/ap/implments/Balance.service.impl.go
  5. +1
    -0
      services/ap/implments/MpsSetting.service.impl.go

+ 14
- 1
conf/htm_log_config.yaml View File

@ -12,4 +12,17 @@ config:
- "time"
- "info"
- "request"
- "response"
- "response"
salesorder:
# 文件location
filename: ./log/salesOrder
filetype: html
default: "<style>.hr{width:100%;}table{width:100%;border:1;background:#FF9966;}table td{word-break: break-all;background-color:#fff;}.t_title{width:15%;}.time-val{width:30%;}.val{width:40%;font-weight: 700;}.info{width:75%;}</style>"
# 支持文件的最大个数
MaxAge: 30
info: "<table><tr><td class=\"t_title\">时间:</td><td class=\"time-val\">[time]</td><td class=\"t_title\">错误提示:</td><td class=\"val\">[info]</td></tr><tr><td>Request:</td><td class=\"info\" colspan=\"3\">[request]</td></tr><tr><td>Response:</td><td class=\"info\" colspan=\"3\">[response]</td></tr></table><hr></hr>"
replace:
- "time"
- "info"
- "request"
- "response"

+ 3
- 1
meta/ap/MpsSetting.meta.go View File

@ -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"})

+ 1
- 0
models/ap/MpsSetting.model.go View File

@ -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"`
}
/******************************************************************************


+ 212
- 3
services/ap/implments/Balance.service.impl.go View File

@ -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 {


+ 1
- 0
services/ap/implments/MpsSetting.service.impl.go View File

@ -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,
)


Loading…
Cancel
Save