SJA APS后端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
2.5 KiB

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
}