package tier2
|
|
|
|
import (
|
|
"fmt"
|
|
"leit.com/leit_seat_aps/db"
|
|
"leit.com/leit_seat_aps/glog"
|
|
"leit.com/leit_seat_aps/service"
|
|
"time"
|
|
)
|
|
|
|
// 将每日汇聚需求转换成批次订单
|
|
// 遍历未处理的需求,按照物料ID和时间点适配批次订单,如果不存在则新建
|
|
// 存在未计划,将数量变化更新到已有批次订单(增加情况更新到最后一个批次订单,减少情况,依次减少直至当日订单数量为0)
|
|
// 存在已计划,新增量独立创建批次订单,减少量不做处理
|
|
// 加载所有需要计算需求的物料主数据到字典
|
|
|
|
func RunBatchOrderGenerator() (err error) {
|
|
var (
|
|
matdict map[string]db.Pln_material
|
|
materialtab db.Pln_material
|
|
demandtab db.Pln_material_demand
|
|
demandtablst []db.Pln_material_demand
|
|
prevmat, prevday, mat, day string
|
|
bl_demand service.BL_Demand
|
|
bl_demandlst []service.BL_Demand
|
|
demandtypes []string
|
|
i int
|
|
ok bool
|
|
)
|
|
|
|
// 加载所需物料主数据
|
|
if matdict, err = LoadMaterialData(); err != nil {
|
|
return
|
|
}
|
|
demandtypes = make([]string, 2)
|
|
demandtypes[0] = "SEQ"
|
|
demandtypes[1] = "FIRM"
|
|
|
|
for {
|
|
// 加载所有未处理的需求
|
|
demandtab = db.Pln_material_demand{}
|
|
if demandtablst, err = demandtab.GetUnusedDemand(demandtypes); err != nil {
|
|
glog.InfoExtln("MRP",)
|
|
return
|
|
}
|
|
|
|
// 获取需要更新的物料需求
|
|
prevmat = ""
|
|
prevday = ""
|
|
for i = 0; i < len(demandtablst); i++ {
|
|
// 获取需求物料的主数据
|
|
if materialtab, ok = matdict[demandtablst[i].Materialid]; !ok {
|
|
fmt.Println("需求物料:", demandtablst[i].Materialid, "不存在!")
|
|
continue
|
|
}
|
|
|
|
mat = demandtablst[i].Materialid
|
|
day = demandtablst[i].Demanddate
|
|
|
|
if mat != prevmat || day != prevday {
|
|
bl_demand = service.BL_Demand{}
|
|
bl_demand.Matid = mat
|
|
bl_demand.Day = day
|
|
bl_demand.Materialtab = materialtab
|
|
bl_demandlst = append(bl_demandlst, bl_demand)
|
|
}
|
|
|
|
// 设置比较的前一个物料
|
|
prevmat = demandtablst[i].Materialid
|
|
prevday = demandtablst[i].Demanddate
|
|
}
|
|
|
|
// 遍历汇聚的批次需求,依次创建批次订单
|
|
for i = 0; i < len(bl_demandlst); i++ {
|
|
// 获取对应时段所有需求
|
|
if err = bl_demandlst[i].GenerateBatchOrder(); err != nil {
|
|
time.Sleep(time.Duration(1) * time.Second)
|
|
continue
|
|
}
|
|
}
|
|
|
|
time.Sleep(time.Duration(5) * time.Second)
|
|
}
|
|
|
|
return
|
|
}
|