Browse Source

同比

feature_msd
娄文智 3 years ago
parent
commit
1e5f64ef46
1 changed files with 161 additions and 70 deletions
  1. +161
    -70
      services/ap/implments/CustDemandVerHead.service.impl.go

+ 161
- 70
services/ap/implments/CustDemandVerHead.service.impl.go View File

@ -1268,7 +1268,7 @@ func (impl *CustDemandVerHeadServiceImplement) DeviationAnalysis(user *global.Us
custDao := basedal.NewCustomerDAO(session, user.PlantNr, user.UserId)
result := new(model.CustomerDeviation)
data := make([]model.CustomerDeviationDetailItem, 0)
perData := make([]model.PerCustomerDeviationDetailItem, 0)
perData := model.PerCustomerDeviationDetailItem{}
var versionIds []string
if len(versionId) > 0 {
versionIds = strings.Split(strings.TrimSpace(versionId), ",")
@ -1318,94 +1318,185 @@ func (impl *CustDemandVerHeadServiceImplement) DeviationAnalysis(user *global.Us
key := v.CustomerId + "_" + v.VersionId
mapDetailData[key] = append(mapDetailData[key], v)
}
//第二步: 查询对应的需求数量,如果长度不够,用0补齐
for k, details := range mapDetailData {
temLen := 0
var allWeeks []string
var temDemandDate time.Time
info := strings.Split(k, "_")
one := model.CustomerDeviationDetailItem{}
one.CustomerId = info[0]
one.VersionId = info[1]
one.PeriodOnPeriodUpperLimit = tInfo.PeriodOnPeriodUpperLimit
one.PeriodOverPeriodLowerLimit = tInfo.PeriodOverPeriodLowerLimit
if len(versionIds) == 1 && searchType == "seq" {
//第二步: 查询对应的需求数量,如果长度不够,用0补齐
for k, details := range mapDetailData {
temLen := 0
var allWeeks []string
var temDemandDate time.Time
info := strings.Split(k, "_")
one := model.CustomerDeviationDetailItem{}
one.CustomerId = info[0]
one.VersionId = info[1]
one.PeriodOnPeriodUpperLimit = tInfo.PeriodOnPeriodUpperLimit
one.PeriodOverPeriodLowerLimit = tInfo.PeriodOverPeriodLowerLimit
perOne := model.PerCustomerDeviationDetailItem{}
perOne.CustomerId = info[0]
perOne.VersionId = info[1]
perOne.PeriodOnPeriodUpperLimit = tInfo.PeriodOnPeriodUpperLimit
perOne.PeriodOverPeriodLowerLimit = tInfo.PeriodOverPeriodLowerLimit
perOne := model.PerCustomerDeviationDetailItem{}
perOne.CustomerId = info[0]
perOne.VersionId = info[1]
perOne.PeriodOnPeriodUpperLimit = tInfo.PeriodOnPeriodUpperLimit
perOne.PeriodOverPeriodLowerLimit = tInfo.PeriodOverPeriodLowerLimit
mapWeeks := make(map[string]int)
for _, vv := range details {
if temLen > lenData {
continue
mapWeeks := make(map[string]int)
for _, vv := range details {
if temLen > lenData {
continue
}
key := utils.ValueToString(vv.DemandYear, "") + "." + utils.ValueToString(vv.DemandWeek, "")
val, ok := mapWeeks[key]
if !ok {
temLen++
mapWeeks[key] = utils.ValueToInt(vv.DemandQty, 0)
allWeeks = append(allWeeks, key)
} else {
mapWeeks[key] = val + utils.ValueToInt(vv.DemandQty, 0)
}
weekDate, err := time.Parse("2006-01-02", vv.DemandDate.ToString())
if err != nil {
return nil, err
}
temDemandDate = weekDate
}
key := utils.ValueToString(vv.DemandYear, "") + "." + utils.ValueToString(vv.DemandWeek, "")
val, ok := mapWeeks[key]
if !ok {
temLen++
mapWeeks[key] = utils.ValueToInt(vv.DemandQty, 0)
allWeeks = append(allWeeks, key)
} else {
mapWeeks[key] = val + utils.ValueToInt(vv.DemandQty, 0)
//不足的周,用空位补齐
lenInfo := lenData - temLen
if lenInfo > 0 {
for k := 0; k < lenInfo; k++ {
weekDate := temDemandDate.AddDate(0, 0, 7*(k+1))
year, _, _ := weekDate.Date()
week := utils.WeekByDate(weekDate)
key := utils.ValueToString(year, "") + "." + utils.ValueToString(week, "")
allWeeks = append(allWeeks, key)
}
}
weekDate, err := time.Parse("2006-01-02", vv.DemandDate.ToString())
if err != nil {
return nil, err
pevNum := 0
items := make(map[string]int, 0)
peritems := make(map[string]float64, 0)
//排序
sort.Strings(allWeeks)
for kkk, vvv := range allWeeks {
key := vvv
val, ok := mapWeeks[key]
if ok {
if kkk == 0 {
pevNum = val
}
items[key] = val
if pevNum == 0 {
peritems[key] = 0
} else {
num := (float64(val) - float64(pevNum)) / float64(pevNum)
peritems[key] = utils.Decimal(num*100, 2)
}
pevNum = val
} else {
items[key] = 0
peritems[key] = 0
pevNum = 0
}
}
temDemandDate = weekDate
one.Item = items
one.SortKeys = allWeeks
data = append(data, one)
perOne.Item = peritems
perOne.SortKeys = allWeeks
perData = perOne
}
} else {
if len(versionIds) != 2 {
return result, errors.New("请选择两个版本比较!")
}
//第二步: 查询对应的需求数量,如果长度不够,用0补齐
for k, details := range mapDetailData {
temLen := 0
var allWeeks []string
var temDemandDate time.Time
info := strings.Split(k, "_")
one := model.CustomerDeviationDetailItem{}
one.CustomerId = info[0]
one.VersionId = info[1]
one.PeriodOnPeriodUpperLimit = tInfo.PeriodOnPeriodUpperLimit
one.PeriodOverPeriodLowerLimit = tInfo.PeriodOverPeriodLowerLimit
//不足的周,用空位补齐
lenInfo := lenData - temLen
if lenInfo > 0 {
for k := 0; k < lenInfo; k++ {
weekDate := temDemandDate.AddDate(0, 0, 7*(k+1))
year, _, _ := weekDate.Date()
week := utils.WeekByDate(weekDate)
key := utils.ValueToString(year, "") + "." + utils.ValueToString(week, "")
allWeeks = append(allWeeks, key)
mapWeeks := make(map[string]int)
for _, vv := range details {
if temLen > lenData {
continue
}
key := utils.ValueToString(vv.DemandYear, "") + "." + utils.ValueToString(vv.DemandWeek, "")
val, ok := mapWeeks[key]
if !ok {
temLen++
mapWeeks[key] = utils.ValueToInt(vv.DemandQty, 0)
allWeeks = append(allWeeks, key)
} else {
mapWeeks[key] = val + utils.ValueToInt(vv.DemandQty, 0)
}
weekDate, err := time.Parse("2006-01-02", vv.DemandDate.ToString())
if err != nil {
return nil, err
}
temDemandDate = weekDate
}
}
pevNum := 0
items := make(map[string]int, 0)
peritems := make(map[string]float64, 0)
//排序
sort.Strings(allWeeks)
for kkk, vvv := range allWeeks {
key := vvv
val, ok := mapWeeks[key]
if ok {
if kkk == 0 {
pevNum = val
//不足的周,用空位补齐
lenInfo := lenData - temLen
if lenInfo > 0 {
for k := 0; k < lenInfo; k++ {
weekDate := temDemandDate.AddDate(0, 0, 7*(k+1))
year, _, _ := weekDate.Date()
week := utils.WeekByDate(weekDate)
key := utils.ValueToString(year, "") + "." + utils.ValueToString(week, "")
allWeeks = append(allWeeks, key)
}
items[key] = val
if pevNum == 0 {
peritems[key] = 0
}
items := make(map[string]int, 0)
//排序
sort.Strings(allWeeks)
for _, vvv := range allWeeks {
key := vvv
val, ok := mapWeeks[key]
if ok {
items[key] = val
} else {
num := (float64(val)-float64(pevNum)) / float64(pevNum)
peritems[key] = utils.Decimal(num*100, 2)
items[key] = 0
}
pevNum = val
}
one.Item = items
one.SortKeys = allWeeks
data = append(data, one)
}
perData.SortKeys = data[0].SortKeys
perData.PeriodOverPeriodLowerLimit = data[0].PeriodOverPeriodLowerLimit
perData.PeriodOnPeriodUpperLimit = data[0].PeriodOnPeriodUpperLimit
itemMap1 := data[0].Item
itemMap2 := data[1].Item
ItemMap := make(map[string]float64)
for _, vvvv := range perData.SortKeys {
key := vvvv
val1, ok1 := itemMap1[key]
val2, ok2 := itemMap2[key]
if !ok1 || !ok2 {
ItemMap[key] = 0
}
if val1 == 0 {
ItemMap[key] = 0
} else {
items[key] = 0
peritems[key] = 0
pevNum = 0
num := (float64(val2) - float64(val1)) / float64(val1)
ItemMap[key] = utils.Decimal(num*100, 2)
}
}
one.Item = items
one.SortKeys = allWeeks
data = append(data, one)
perOne.Item = peritems
perOne.SortKeys = allWeeks
perData = append(perData, perOne)
perData.Item = ItemMap
}
result.CustomerDeviationDetailItem = data
result.PerCustomerDeviationDetailItem = perData
result.PerCustomerDeviationDetailItem = append(result.PerCustomerDeviationDetailItem,perData)
return result, nil
}
/******************************************************************************
*
* @Reference leit.com/LAPP_CHEERSSON_BACKEND/services/ap/CustDemandVerHeadService.CompareVersionInfoByArtcle


Loading…
Cancel
Save