|
|
- package service
-
- import (
- "leit.com/aps_engine/models"
- "strconv"
- "time"
- )
-
- // 订单工序对象
- type OperationSrv struct{
- OperationNr int // 工序号
- SplitNr int // 工序拆分号
- OrderId string // 订单号
- SchedStatus int // 在内存中的调度状态:0:未调度;1:已调度
- Status int // 工序状态
- WorkPlaceGrpNr int // 对应资源组号
- WorkPlaceNr int // 计划工位号
- PlanQty float32
-
- ToolGrpNr int
- PlanToolNr int
- PlanWorkPlaceNr int
-
- SetupDuration time.Duration // 换型工时
- SetupStartTime time.Time // 换型开始
- SetupEndTime time.Time // 换型结束
-
- PlanDuration time.Duration // 计划工时
- PlanStartTime time.Time // 计划生产开始
- PlanEndTime time.Time // 计划生产结束
-
- PostDuration time.Duration // 后处理工时
- PostStartTime time.Time // 计划后处理开始
- PostEndTime time.Time // 计划后处理结束
-
- PrevOpDict map[string]OperationRelSrv // 前工序
- NextOpDict map[string]OperationRelSrv // 后工序
- AttributeDict map[int]OpAttributeSrv // 工序分配的属性
- ToolDemandDict map[int]OpToolDemandSrv // 工序的工具需求
- ArtDemandDict map[string]OpArticleDemandSrv // 工序的物料需求
- SkillDemandDict map[int]OpSkillDemandSrv // 工序的技能需求
- SecResDemandDict map[int]OpSecResourceDemandSrv // 工序的次要资源需求
- ArtYieldDict map[string]OpArticleYieldSrv // 工序的物料产出
- }
-
- // 工序分配的属性,用于匹配计划设备
- type OpAttributeSrv struct {
- AttributeNr int
-
- }
-
- // 工序的工具需求
- type OpToolDemandSrv struct {
- ToolGrpNr int
- ReqQty float32
- Operation *OperationSrv
- }
- // 工序的物料需求
- type OpArticleDemandSrv struct {
- ArtId string
- ReqQty float32
- Operation *OperationSrv
- }
- // 工序的物料产出(中间品)
- type OpArticleYieldSrv struct {
- ArtId string
- YieldQty float32
- Operation *OperationSrv
- }
- // 工序的技能需求
- type OpSkillDemandSrv struct {
- SkillNr int
- ReqQty float32
- Operation *OperationSrv
- DemandPeriod string // 需求时段:SETUP / PROD / AFTERPROCESS
- }
- // 工序的次要资源需求
- type OpSecResourceDemandSrv struct {
- ResourceNr int
- ReqQty float32
- Operation *OperationSrv
- DemandPeriod string // 需求时段:SETUP / PROD / AFTERPROCESS
- }
-
- // 获取工序键值:工序号-工序拆分号
- func(ops *OperationSrv)GetOpKey()(string){
- return strconv.Itoa(ops.OperationNr) + "-" + strconv.Itoa(ops.SplitNr)
- }
-
- // 获取工序键值:工序号-工序拆分号
- func(ops *OperationSrv)GetOrdOpKey()(string){
- return ops.OrderId + "-" + strconv.Itoa(ops.OperationNr) + "-" + strconv.Itoa(ops.SplitNr)
- }
-
- // 初始化
- func(ops *OperationSrv)Init(){
- ops.PrevOpDict = make(map[string]OperationRelSrv)
- ops.NextOpDict = make(map[string]OperationRelSrv)
- ops.AttributeDict = make(map[int]OpAttributeSrv)
- ops.ToolDemandDict = make(map[int]OpToolDemandSrv)
- ops.SkillDemandDict = make(map[int]OpSkillDemandSrv)
- ops.ArtDemandDict = make(map[string]OpArticleDemandSrv)
- ops.SecResDemandDict= make(map[int]OpSecResourceDemandSrv)
- ops.ArtYieldDict = make(map[string]OpArticleYieldSrv)
- }
-
- // 创建工序对象
- func(ops *OperationSrv)Create(optab models.OmWooperation){
- var (
- optooltab models.OmWooperationtoollst
- oparttab models.OmWooperationartlst
- opyieldtab models.OmWooperationyieldlst
- oprestab models.OmWooperationresourcelst
- opskilltab models.OmWooperationskilllst
- optoolsrv OpToolDemandSrv
- opskillsrv OpSkillDemandSrv
- opartsrv OpArticleDemandSrv
- opressrv OpSecResourceDemandSrv
- opyieldsrv OpArticleYieldSrv
- )
-
- ops.OrderId = optab.Workorderid
- ops.OperationNr = optab.Operationnr
- ops.SplitNr = optab.Splitnr
- ops.WorkPlaceGrpNr = optab.Workplacegrpnr
- ops.WorkPlaceNr = optab.Workplacenr
- ops.PrevOpDict = make(map[string]OperationRelSrv)
- ops.NextOpDict = make(map[string]OperationRelSrv)
- ops.AttributeDict = make(map[int]OpAttributeSrv)
- ops.ToolDemandDict = make(map[int]OpToolDemandSrv)
- ops.SkillDemandDict = make(map[int]OpSkillDemandSrv)
- ops.ArtDemandDict = make(map[string]OpArticleDemandSrv)
- ops.SecResDemandDict= make(map[int]OpSecResourceDemandSrv)
- ops.ArtYieldDict = make(map[string]OpArticleYieldSrv)
-
- // 加载工具需求
- for _, optooltab = range optab.Toollst {
- optoolsrv = OpToolDemandSrv{Operation: ops}
- optoolsrv.ToolGrpNr = optooltab.Toolgrpnr
- optoolsrv.ReqQty = optooltab.Planqty
- ops.ToolDemandDict[optoolsrv.ToolGrpNr] = optoolsrv
- }
- // 加载物料需求
- for _, oparttab = range optab.Artlst {
- opartsrv = OpArticleDemandSrv{Operation: ops}
- opartsrv.ArtId = oparttab.Artid
- opartsrv.ReqQty = oparttab.Planqty
- ops.ArtDemandDict[opartsrv.ArtId] = opartsrv
- }
- // 加载物料产出
- for _, opyieldtab = range optab.Yieldlst {
- opyieldsrv = OpArticleYieldSrv{Operation: ops}
- opyieldsrv.ArtId = opyieldtab.Artid
- opyieldsrv.YieldQty = opyieldtab.Planqty
- ops.ArtYieldDict[opartsrv.ArtId] = opyieldsrv
- }
- // 加载技能需求,需要区分需求时段
- for _, opskilltab = range optab.Skilllst {
- opskillsrv = OpSkillDemandSrv{Operation: ops}
- opskillsrv.SkillNr = opskilltab.Skillnr
- opskillsrv.ReqQty = opskilltab.Planqty
- opskillsrv.DemandPeriod = opskilltab.Opdemandperiod
- }
- // 加载次要资源需求,需要区分需求时段
- for _, oprestab = range optab.Resourcelst {
- opressrv = OpSecResourceDemandSrv{Operation: ops}
- opressrv.ResourceNr = oprestab.Resourcenr
- opressrv.ReqQty = oprestab.Planqty
- opressrv.DemandPeriod = oprestab.Opdemandperiod
- }
- }
-
- // 获取任务计划开始事件
- func(ops *OperationSrv)GetPlanStartEvent(t time.Time)(SchedEvent){
- var(
- opet OperationEvent
- )
-
- opet = OperationEvent{TriggerTime: t, EventType: EVENT_OBJ_OPTASK, Event: EVENT_TASK_PLANBEG}
- opet.OrderId = ops.OrderId
- opet.OperationNr = ops.OperationNr
- opet.SplitNr = ops.SplitNr
-
- return SchedEvent(opet)
- }
-
- // 获取任务计划结束事件
- func(ops *OperationSrv)GetPlanEndEvent(t time.Time)(SchedEvent){
- var(
- opet OperationEvent
- )
-
- opet = OperationEvent{TriggerTime: t, EventType: EVENT_OBJ_OPTASK, Event: EVENT_TASK_PLANEND}
- opet.OrderId = ops.OrderId
- opet.OperationNr = ops.OperationNr
- opet.SplitNr = ops.SplitNr
-
- return SchedEvent(opet)
- }
|