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 }