|
|
- 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
- }
|