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

  1. package tier2
  2. import (
  3. "fmt"
  4. "leit.com/leit_seat_aps/db"
  5. "leit.com/leit_seat_aps/glog"
  6. "leit.com/leit_seat_aps/service"
  7. "time"
  8. )
  9. // 将每日汇聚需求转换成批次订单
  10. // 遍历未处理的需求,按照物料ID和时间点适配批次订单,如果不存在则新建
  11. // 存在未计划,将数量变化更新到已有批次订单(增加情况更新到最后一个批次订单,减少情况,依次减少直至当日订单数量为0)
  12. // 存在已计划,新增量独立创建批次订单,减少量不做处理
  13. // 加载所有需要计算需求的物料主数据到字典
  14. func RunBatchOrderGenerator() (err error) {
  15. var (
  16. matdict map[string]db.Pln_material
  17. materialtab db.Pln_material
  18. demandtab db.Pln_material_demand
  19. demandtablst []db.Pln_material_demand
  20. prevmat, prevday, mat, day string
  21. bl_demand service.BL_Demand
  22. bl_demandlst []service.BL_Demand
  23. demandtypes []string
  24. i int
  25. ok bool
  26. )
  27. // 加载所需物料主数据
  28. if matdict, err = LoadMaterialData(); err != nil {
  29. return
  30. }
  31. demandtypes = make([]string, 2)
  32. demandtypes[0] = "SEQ"
  33. demandtypes[1] = "FIRM"
  34. for {
  35. // 加载所有未处理的需求
  36. demandtab = db.Pln_material_demand{}
  37. if demandtablst, err = demandtab.GetUnusedDemand(demandtypes); err != nil {
  38. glog.InfoExtln("MRP",)
  39. return
  40. }
  41. // 获取需要更新的物料需求
  42. prevmat = ""
  43. prevday = ""
  44. for i = 0; i < len(demandtablst); i++ {
  45. // 获取需求物料的主数据
  46. if materialtab, ok = matdict[demandtablst[i].Materialid]; !ok {
  47. fmt.Println("需求物料:", demandtablst[i].Materialid, "不存在!")
  48. continue
  49. }
  50. mat = demandtablst[i].Materialid
  51. day = demandtablst[i].Demanddate
  52. if mat != prevmat || day != prevday {
  53. bl_demand = service.BL_Demand{}
  54. bl_demand.Matid = mat
  55. bl_demand.Day = day
  56. bl_demand.Materialtab = materialtab
  57. bl_demandlst = append(bl_demandlst, bl_demand)
  58. }
  59. // 设置比较的前一个物料
  60. prevmat = demandtablst[i].Materialid
  61. prevday = demandtablst[i].Demanddate
  62. }
  63. // 遍历汇聚的批次需求,依次创建批次订单
  64. for i = 0; i < len(bl_demandlst); i++ {
  65. // 获取对应时段所有需求
  66. if err = bl_demandlst[i].GenerateBatchOrder(); err != nil {
  67. time.Sleep(time.Duration(1) * time.Second)
  68. continue
  69. }
  70. }
  71. time.Sleep(time.Duration(5) * time.Second)
  72. }
  73. return
  74. }