Sanjel Domain Model - Sanjel-Energy-Services/eService_WorkItems GitHub Wiki

Enterprise Master Data Domain Model

classDiagram
class Employee
class BonusPosition
Employee "1..*" --> "0..1"BonusPosition
Loading

RigJob Oriented Domain Model

classDiagram
class JobDesign {
<<Program>>
}
class JobDesignPumpingJobSection
class ServicePoint
class JobType
class RigJob
class Rig
class BinInformation {
 BlendChemical
 Quantity
 WorkingServicePoint
}
class Bin
RigJob-->Rig
RigJob..>JobDesignPumpingJobSection
JobDesign "1"*-->"1..*" JobDesignPumpingJobSection
RigJob-->JobType
JobDesignPumpingJobSection-->JobType
RigJob-->ServicePoint
Rig "1" <-- "0..*" BinInformation
BinInformation "1"-->"1" Bin
Loading

Entity Explanation

  • JobDesign: Entity is renamed for concept Program to avoid potential naming conflict with system reserved name
  • JobDesginPumpingJobSection: It contains information as per Job Type. It will provide the information for each Job (RigJob or EstimateJob)

Blend Request Oriented Domain Model

classDiagram
class JobDesign {
<<Program>>
+ProgramId
+ProgramRevision
}
class JobDesignPumpingJobSection
class JobDesignBlendSection
class CallSheetBlendSection
class BlendSection {
+Id
+BlendCategory
+NeedTest
+Yield
+SackWeight
+MixWater
}
class CallSheet{
+Id
}
class BlendChemical {
+IsAirborneHarzard
+NeedFlush
+Yield
}
class RigJob {
+CallSheetNumber
+JobDateTime
+ClientRpresentative
+ServicePoint
+JobType
+Rig
WellLocation
}
class BatchRequest { 
<<ProductHaulLoad>>
+ProgramId
+CallSheetId
+BlendCategory
+BlendSectionId
+BaseBlendWeight
+TotalBlendWeight
}
class BinInformation {
+PodIndex
}
class Bin
class BulkPlant {
<<Rig>>
}
class Customer
class BlendCut
class LabSample
class BinLoadHistory
BlendSection<|--JobDesignBlendSection
BlendSection<|--CallSheetBlendSection
RigJob-->Rig
CallSheet..>JobDesignPumpingJobSection
RigJob<-->CallSheet : equivalence
CallSheet "1"*-->"1..*" CallSheetBlendSection: Need these blend
JobDesign "1"*-->"1..*" JobDesignPumpingJobSection: Need these blend
JobDesignPumpingJobSection "1"*-->"1..*" JobDesignBlendSection
Rig "1" <-- "0..*" BinInformation
BulkPlant --|> Rig
BinInformation "*"-->"1" Bin
BatchRequest --> BlendChemical
BlendChemical..>BlendSection : Gerenerated From
CallSheet <.. BatchRequest
BatchRequest --> BulkPlant : Blended By
BatchRequest-->BinInformation : Load To
Customer<--RigJob
BatchRequest"1..*" --> "1"BlendSection: Mixed in batches
BatchRequest"1" <-- "1..*"BlendCut
BlendCut"1" <-- "1..*"BlendSample 
LabSample "1"-->"1"BlendSample
BinLoadHistory ..> BinInformation
Loading

Product Haul Oriented Domain Model

classDiagram
class Bin
class ProductHaul
class BatchRequest {
<<ProductHaulLoad>>
+ BlendTestingStatus
}
class RigJobSanjelCrewSection
class RigJobThirdPartyCrewSection
class SanjelCrewSchedule
class ThirdPartyCrewSchedule
class UnitSchedule
class WorkerSchedule
class RigJob {
+ ServicePoint
}
class SanjelCrew
class ThirdPartyCrew
class RigJobCrewSection
class Employee
class TruckUnit
class ShippingLoadSheet {
+ Rig
+ CallSheetNumber
+ Client
+ ClientRep
+ Destination
+ BlendDescription
+ BlendShippingStatus
+ IsGoWithCrew
}
class PodLoad {
+ PodIndex
+ LoadAmount
}
class BlendUnloadSheet {
+Weight
}
class BinInformation {
+BatchRequestId
}
class Rig
class BulkPlant
ProductHaul"0..1"<--"1..*" BatchRequest
SanjelCrew o-- TruckUnit
SanjelCrew o-- Employee
RigJobCrewSection "0..*" -->"0..1"RigJob
RigJobCrewSection "0..*" -->"0..1"ProductHaul
RigJobThirdPartyCrewSection "1"<--"1"ThirdPartyCrewSchedule
RigJobSanjelCrewSection "1..*"-->"1"SanjelCrew
RigJobThirdPartyCrewSection "1..*" -->"1"ThirdPartyCrew
RigJobCrewSection<|--RigJobSanjelCrewSection
RigJobCrewSection<|--RigJobThirdPartyCrewSection
UnitSchedule"1..*"-->"1"TruckUnit
WorkerSchedule"1..*"-->"1"Employee
SanjelCrewSchedule *--> UnitSchedule
SanjelCrewSchedule *--> WorkerSchedule
BatchRequest"Destination"-->"0..1"BinInformation
ProductHaul *--> ShippingLoadSheet
ProductHaul *--> PodLoad
PodLoad --> ShippingLoadSheet
ShippingLoadSheet"SourceStorage"-->"0..1"BinInformation
ShippingLoadSheet *-- BlendUnloadSheet
ShippingLoadSheet --> BatchRequest
BlendUnloadSheet "DestinationStorage"-->BinInformation
BinInformation -->BatchRequest
RigJob"1..*"-->"1"Rig
BulkPlant --|> Rig
BinInformation"*"-->Rig
BinInformation-->Bin

Loading

BinInformation Oriented Domain Model

classDiagram
class ServicePoint
class Rig
class BinInformation {
 BlendChemical
 Quantity
 WorkingServicePoint
 PodIndex
 Capacity
 LastProductHaulLoadId
 BlendTestingStatus
 BinStatus
 Quatity
 Volume
}
class Bin{
PodCount
}
class BlendChemical
class ProductHaulLoad {
<<BlendRequest>>
Id
BlendTestingStatus
IsAirborneHazard
}
Rig "1" <-- "0..*" BinInformation: Working In
BinInformation "*"-->"1" Bin: Per Pod
BinInformation --> BlendChemical: Contains
BinInformation-->ServicePoint: Assign To
ProductHaulLoad-->BlendChemical: Load To Bin
BinInformation..>ProductHaulLoad
Loading

BinStatus definition is not 100% right now.

Schedule Oriented Domain Model

classDiagram
class RigJobSanjelCrewSection
class RigJobThirdPartyCrewSection
class SanjelCrewSchedule
class ThirdPartyCrewSchedule
class UnitSchedule
class WorkerSchedule
class RigJob
class SanjelCrew
class ThirdPartyCrew
class RigJobCrewSection
class Employee
class TruckUnit
class ProductHaul
class RotationTemplate
class ShippingLoadSheet
SanjelCrew o-- TruckUnit
SanjelCrew o-- Employee
RigJobCrewSection "0..*" -->"0..1"RigJob
RigJobCrewSection "0..*" -->"0..1"ProductHaul
RigJobSanjelCrewSection" 1"<--"1"SanjelCrewSchedule
RigJobThirdPartyCrewSection "1"<--"1"ThirdPartyCrewSchedule
RigJobSanjelCrewSection "1..*"-->"1"SanjelCrew
RigJobThirdPartyCrewSection "1..*" -->"1"ThirdPartyCrew
RigJobCrewSection<|--RigJobSanjelCrewSection
RigJobCrewSection<|--RigJobThirdPartyCrewSection
UnitSchedule"1..*"-->"1"TruckUnit
WorkerSchedule"1..*"-->"1"Employee
SanjelCrewSchedule *--> UnitSchedule
SanjelCrewSchedule *--> WorkerSchedule
WorkerSchedule-->"0..1"RotationTemplate
ProductHaul "1" *--> ShippingLoadSheet
Loading

Bulker Crew Status Alignment

Crew Working Cycle (Bulker Crew Log)

stateDiagram-V2
state has_next_Load_Requested <<choice>>
state will_be_off_duty <<choice>>
state is_bulker_loaded <<choice>>
OffDuty-->LoadRequested: Product Haul is assigend
LoadRequested-->Called: Crew is good to go, call Driver
Called--> is_bulker_loaded: Is bulker loaded?
	is_bulker_loaded --> Loading: No
	is_bulker_loaded --> Loaded: Yes
state OnDuty {
	Enroute-->OnLocation: Crew is on location
	OnLocation-->OnWayIn: Crew is on way in
	OnWayIn-->Returned: Crew arrives bulk plant
	has_next_Load_Requested-->Loading: Yes
	Returned-->will_be_off_duty: Will crew be off duty?
	has_next_Load_Requested-->Returned: No 
	will_be_off_duty-->has_next_Load_Requested:No, has next product haul scheduled?
	Loading-->Loaded: Bulker is loaded
	Loaded-->Enroute: Crew leaves bulk plant
}
will_be_off_duty-->OffDuty: Yes
OffDuty-->Down: Set crew down
Loading

Product Haul Working Cycle (Shipping status)

stateDiagram-v2
[*]-->Scheduled
Scheduled-->Loaded:BPAVS has Loaded the bulker
Loaded-->InProgress:Crew assignemnt is set Enroute
InProgress-->OnLocation: Set as OnLocation on either RigBoard or DRB
OnLocation-->[*]
Scheduled-->[Deleted]:Canceled
Loaded-->[Deleted]:Canceled
Loading

Crew Assignment Life Cycle

stateDiagram-v2
[*]-->Scheduled
Scheduled-->Loading:Blend is loading to the bulker
Loading-->Loaded: Blend has Loaded in the bulker
Loaded-->EnRoute:Crew assignemnt is set Enroute while depature on DRB
EnRoute-->OnLocation:Set as OnLocation on either RigBoard or DRB
OnLocation-->OnWayIn:Set as OnWayIn on DRB
OnWayIn-->Returned:Set as Returened on DRB while return
Returned-->NextAssignment: If next haul available,  
Returned-->LogoffDuty: Set as OffDuty
Scheduled-->Removed: Assignment is Canceled.
Loading-->Removed: Assignment is Canceled.
Loaded-->Removed: Assignment is Canceled.
Loading

Sales forecast Model

classDiagram
class SalesProject {
	- ClientCompany: ClientCompany
	- District: ServicePoint
	- ServiceLIne: ServiceLine
	- Rig: Rig
	- Area: string
	- StartTime: DateTime 
	- EndTime: DateTime
	- ProgramId: string
	- WellCount: int
	- StringCount: int
	- CmtStringCount: int
	- Frequency: int
	- EstimatedRevenue: double
	- SalesRepresentative: Emplyee
	- Comments: string
	- Status: SalesProjectStatus
	- ApprovalStatus: SalesProjectApporvalStaus
	- SpecialtyProducts: List~SalesSpecialtyProduct~
	- DrillDays: int
}
class SalesProjectStatus {
	- Bid
	- Potential
	- SecondCall
	- Won
	- Lost
}
<<Enum>> SalesProjectStatus
class SalesProjectApporvalStaus {
	- Draft
	- Pending
	- Approved
	- Complete
}
<<Enum>> SalesProjectApporvalStaus
class DrillOrder {
	- CementingOrders: List~JobOrder~
	- Ordinal: int
        - WellCount: int
        - ProgramId: string
}
class JobOrder{
	- JobType: JobType
	- EsitmateRevenue: double
	- Ordinal: int
}
class SalesSpecialtyProduct {
	- Product: Product
}
SalesProject-->SalesProjectApporvalStaus
SalesProject-->SalesProjectStatus
SalesProject *--> DrillOrder
DrillOrder *--> JobOrder
SalesProject *-->SalesSpecialtyProduct
Loading

Model Update History

Model Update History

Entity Definition Explanation

TruckUnit

TruckUnit master data contains all vehichles in Sanjel, they are categorized by main type and sub type. Truck Units are named in certain naming convention which is consistent today.

Category Main Type Main Type Id Sub Type Sub Type Id Naming
Pumper Trailer ROLLING STOCK TRAILER 2 SCM Twin 205 445###
B-train ROLLING STOCK TRAILER 2 B-Train 15 446###L
Bulker Trailer ROLLING STOCK TRAILER 2 Cement Bulk Transpor 101 446###
B-train ROLLING STOCK TRAILER 2 B-Train - Pup 280 446###P
Pumper Tractor ROLLING STOCK TRACTOR 1 Tandem - Tractor 276 745###
Bulker Trailer ROLLING STOCK BODY JOB 5 Cement Bulk Transpor 61 746501
Bulker Tractor ROLLING STOCK TRACTOR 1 Tandem - Tractor 276 746###
Pumper ROLLING STOCK BODY JOB 5 C & A 62 740###
Pumper ROLLING STOCK BODY JOB 5 SCM Single 238 740###
Pickup LIGHT DUTY VEHICLES 4 1/2 Ton | 3/4 Ton | 1 Ton 93 | 94 | 95 20####
Bulker Trailer ROLLING STOCK TRAILER 2 4000 Porta Bulker 27 449###
Pumper ROLLING STOCK BODY JOB 5 Low Rate Pump 71
Pumper ROLLING STOCK TRAILER 2 SCM Twin HHP 288
Pumper FIELD SUPPORT EQUIPMENT 3 Other Support Equipm 291

Entity Status Reference

Call Sheet & Job

    public enum EServiceEntityStatus
    {
        [EnumMember] [Description("Empty")] Empty = 0x0,
        [EnumMember] [Description("Ready")] Ready = 0x1,
        [EnumMember] [Description("In Progress")] InProgress = 0x2,
        [EnumMember] [Description("Transmitted")] Transmitted = 0x3,
        [EnumMember] [Description("Canceled")] Canceled = 0x4,
        [EnumMember] [Description("Locked")] Locked = 0x5,
        [EnumMember] [Description("In Route")] InRoute = 0x6,
        [EnumMember] [Description("Assembled")] Assembled = 0x7,
        [EnumMember] [Description("Received")] Received = 0x8,  
        [EnumMember] [Description("PreTransmitted")] PreTransmitted = 0x9,
        [EnumMember] [Description("Deleted")] Deleted = 0xA,
        [EnumMember] [Description("Pending")] Pending = 0xB,
        [EnumMember] [Description("Confirmed")] Confirmed = 0xC,
        [EnumMember] [Description("Scheduled")] Scheduled = 0xD,
        [EnumMember] [Description("Dispatched")] Dispatched = 0xE,
        [EnumMember] [Description("Completed")] Completed = 0xF,
        [EnumMember] [Description("Alerted")] Alerted = 0x10,
        [EnumMember] [Description("Expired")] Expired = 0x11,
       
        [EnumMember] [Description("Awaiting Approval")] AwaitingApproval = 0x200,
        [EnumMember] [Description("Approving")] Approving = 0x400,
        [EnumMember] [Description("Approved")] Approved = 0x800,

        [EnumMember] [Description("Exception")] Exception = 0x1000,
        [EnumMember] [Description("Succeed")] Succeed = 0x2000,
        [EnumMember] [Description("Failed")] Failed = 0x4000,
    }

RigJob

	public enum JobLifeStatus
	{
		[EnumMember]
		[Description("None")]
		None = 0,
		
		[EnumMember]
		[Description("Alerted")]
		Alerted = 1,
		
		[EnumMember]
		[Description("Pending")]
		Pending = 2,
		
		[EnumMember]
		[Description("Confirmed")]
		Confirmed = 3,
		
		[EnumMember]
		[Description("Scheduled")]
		Scheduled = 4,
		
		[EnumMember]
		[Description("Dispatched")]
		Dispatched = 5,
		
		[EnumMember]
		[Description("Canceled")]
		Canceled = 6,
		
		[EnumMember]
		[Description("InProgress")]
		InProgress = 7,
		
		[EnumMember]
		[Description("Completed")]
		Completed = 8,
		
		[EnumMember]
		[Description("Deleted")]
		Deleted = 9,
		
	}

Product Haul

	public enum ProductHaulStatus
	{
		[EnumMember]
		[Description("Empty")]
		Empty = 0,
		
		[EnumMember]
		[Description("Pending")]
		Pending = 1,
		
		[EnumMember]
		[Description("Scheduled")]
		Scheduled = 2,
		
		[EnumMember]
		[Description("In Progress")]
		InProgress = 3,
		
		[EnumMember]
		[Description("On Location")]
		OnLocation = 4,
		
		[EnumMember]
		[Description("Loading")]
		Loading = 5,
		
		[EnumMember]
		[Description("Loaded")]
		Loaded = 6,
		
		[EnumMember]
		[Description("Returned")]
		Returned = 7,
		
	}

Product Haul Load (Blend Request)

	public enum ProductHaulLoadStatus
	{
		[EnumMember]
		[Description("Empty")]
		Empty = 0,
		
		[EnumMember]
		[Description("Scheduled")]
		Scheduled = 1,
		
		[EnumMember]
		[Description("OnLocation")]
		OnLocation = 2,
		
		[EnumMember]
		[Description("Blending")]
		Blending = 3,
		
		[EnumMember]
		[Description("BlendCompleted")]
		BlendCompleted = 4,
		
		[EnumMember]
		[Description("Loaded")]
		Loaded = 5,
		
		[EnumMember]
		[Description("HaulScheduled")]
		HaulScheduled = 6,
		
		[EnumMember]
		[Description("Stored")]
		Stored = 7,
		
		[EnumMember]
		[Description("JobCanceled")]
		JobCanceled = 8,
		
		[EnumMember]
		[Description("Recycled")]
		Recycled = 9,
		
		[EnumMember]
		[Description("FaultBlend")]
		FaultBlend = 10,
		
		[EnumMember]
		[Description("GoodToUse")]
		GoodToUse = 11,
		
		[EnumMember]
		[Description("Reblended")]
		Reblended = 12,
		
		[EnumMember]
		[Description("Ready")]
		Ready = 13,
		
		[EnumMember]
		[Description("PartialHaulScheduled")]
		PartialHaulScheduled = 14,
		
		[EnumMember]
		[Description("BpoConfirmed")]
		BpoConfirmed = 15,
		
		[EnumMember]
		[Description("BlendingCanCommence")]
		BlendingCanCommence = 16,

Shipping Load Sheet

	public enum ShippingStatus
	{
		[EnumMember]
		[Description("Empty")]
		Empty = 0,
		
		[EnumMember]
		[Description("Scheduled")]
		Scheduled = 1,
		
		[EnumMember]
		[Description("Loaded")]
		Loaded = 2,
		
		[EnumMember]
		[Description("OnLocation")]
		OnLocation = 3,
		
	}

RigJobCrewSection (Job Assignment)

	public enum RigJobCrewSectionStatus
	{
		[EnumMember]
		[Description("Assigned")]
		Assigned = 1,
		
		[EnumMember]
		[Description("Scheduled")]
		Scheduled = 2,
		
		[EnumMember]
		[Description("Removed")]
		Removed = 3,
		
		[EnumMember]
		[Description("Called")]
		Called = 4,
		
		[EnumMember]
		[Description("Log On Duty")]
		LogOnDuty = 5,
		
		[EnumMember]
		[Description("Log Off Duty")]
		LogOffDuty = 6,
		
		[EnumMember]
		[Description("Loading")]
		Loading = 7,
		
		[EnumMember]
		[Description("Loaded")]
		Loaded = 8,
		
		[EnumMember]
		[Description("En Route")]
		EnRoute = 9,
		
		[EnumMember]
		[Description("On Location")]
		OnLocation = 10,
		
		[EnumMember]
		[Description("On Way In")]
		OnWayIn = 11,
		
		[EnumMember]
		[Description("Returned")]
		Returned = 12,
		
	}

BulkerCrewLog

	public enum BulkerCrewStatus
	{
		[EnumMember]
		[Description("None")]
		None = 0,
		
		[EnumMember]
		[Description("Off Duty")]
		OffDuty = 1,
		
		[EnumMember]
		[Description("En Route")]
		EnRoute = 2,
		
		[EnumMember]
		[Description("Called")]
		Called = 3,
		
		[EnumMember]
		[Description("On Way In")]
		OnWayIn = 4,
		
		[EnumMember]
		[Description("GTG")]
		GoodToGo = 5,
		
		[EnumMember]
		[Description("Load Requested")]
		LoadRequested = 6,
		
		[EnumMember]
		[Description("Down")]
		Down = 7,
		
		[EnumMember]
		[Description("On Location")]
		OnLocation = 8,
		
		[EnumMember]
		[Description("Returned")]
		Returned = 9,
		
		[EnumMember]
		[Description("Loaded")]
		Loaded = 10,
		
		[EnumMember]
		[Description("Loading")]
		Loading = 11,
		
	}

BlendShippingStatus (Blend Request needs it)

	public enum BlendShippingStatus
	{
		[EnumMember]
		[Description("Empty")]
		Empty = 0,
		
		[EnumMember]
		[Description("HaulScheduled")]
		HaulScheduled = 1,
		
		[EnumMember]
		[Description("ParitialHaulScheduled")]
		ParitialHaulScheduled = 2,
		
		[EnumMember]
		[Description("OnLocation")]
		OnLocation = 3,
		
	}

中文翻译

企业主数据域模型

classDiagram
class Employee
class BonusPosition
Employee "1..*" --> "0..1"BonusPosition
Loading

钻井作业导向领域模型

classDiagram
class JobDesign {
<<Program>>
}
class JobDesignPumpingJobSection
class ServicePoint
class JobType
class RigJob
class Rig
class BinInformation {
 BlendChemical
 Quantity
 WorkingServicePoint
}
class Bin
RigJob-->Rig
RigJob..>JobDesignPumpingJobSection
JobDesign "1"*-->"1..*" JobDesignPumpingJobSection
RigJob-->JobType
JobDesignPumpingJobSection-->JobType
RigJob-->ServicePoint
Rig "1" <-- "0..*" BinInformation
BinInformation "1"-->"1" Bin
Loading

实体解释

  • JobDesign: 实体被重命名为Program概念,以避免与系统保留名称的潜在命名冲突
  • JobDesginPumpingJobSection: 根据作业类型包含信息。它将为每个作业(RigJob或EstimateJob)提供信息

搅拌请求导向领域模型

classDiagram
class JobDesign {
<<Program>>
+ProgramId
+ProgramRevision
}
class JobDesignPumpingJobSection
class JobDesignBlendSection
class CallSheetBlendSection
class BlendSection {
+Id
+BlendCategory
+NeedTest
+Yield
+SackWeight
+MixWater
}
class CallSheet{
+Id
}
class BlendChemical {
+IsAirborneHarzard
+NeedFlush
+Yield
}
class RigJob {
+CallSheetNumber
+JobDateTime
+ClientRpresentative
+ServicePoint
+JobType
+Rig
WellLocation
}
class BatchRequest {
<<ProductHaulLoad>>
+ProgramId
+CallSheetId
+BlendCategory
+BlendSectionId
+BaseBlendWeight
+TotalBlendWeight
}
class BinInformation {
+PodIndex
}
class Bin
class BulkPlant {
<<Rig>>
}
class Customer
class BlendCut
class LabSample
class BinLoadHistory
BlendSection<|--JobDesignBlendSection
BlendSection<|--CallSheetBlendSection
RigJob-->Rig
CallSheet..>JobDesignPumpingJobSection
RigJob<-->CallSheet : 等价
CallSheet "1"*-->"1..*" CallSheetBlendSection: 需要这些搅拌
JobDesign "1"*-->"1..*" JobDesignPumpingJobSection: 需要这些搅拌
JobDesignPumpingJobSection "1"*-->"1..*" JobDesignBlendSection
Rig "1" <-- "0..*" BinInformation
BulkPlant --|> Rig
BinInformation "*"-->"1" Bin
BatchRequest --> BlendChemical
BlendChemical..>BlendSection : 由此生成
CallSheet <.. BatchRequest
BatchRequest --> BulkPlant : 由此搅拌
BatchRequest-->BinInformation : 加载到
Customer<--RigJob
BatchRequest"1..*" --> "1"BlendSection: 分批混合
BatchRequest"1" <-- "1..*"BlendCut
BlendCut"1" <-- "1..*"BlendSample
LabSample "1"-->"1"BlendSample
BinLoadHistory ..> BinInformation
Loading

产品运输导向领域模型

classDiagram
class Bin
class ProductHaul
class BatchRequest {
<<ProductHaulLoad>>
+ BlendTestingStatus
}
class RigJobSanjelCrewSection
class RigJobThirdPartyCrewSection
class SanjelCrewSchedule
class ThirdPartyCrewSchedule
class UnitSchedule
class WorkerSchedule
class RigJob {
+ ServicePoint
}
class SanjelCrew
class ThirdPartyCrew
class RigJobCrewSection
class Employee
class TruckUnit
class ShippingLoadSheet {
+ Rig
+ CallSheetNumber
+ Client
+ ClientRep
+ Destination
+ BlendDescription
+ BlendShippingStatus
+ IsGoWithCrew
}
class PodLoad {
+ PodIndex
+ LoadAmount
}
class BlendUnloadSheet {
+Weight
}
class BinInformation {
+BatchRequestId
}
class Rig
class BulkPlant
ProductHaul"0..1"<--"1..*" BatchRequest
SanjelCrew o-- TruckUnit
SanjelCrew o-- Employee
RigJobCrewSection "0..*" -->"0..1"RigJob
RigJobCrewSection "0..*" -->"0..1"ProductHaul
RigJobThirdPartyCrewSection "1"<--"1"ThirdPartyCrewSchedule
RigJobSanjelCrewSection "1..*"-->"1"SanjelCrew
RigJobThirdPartyCrewSection "1..*" -->"1"ThirdPartyCrew
RigJobCrewSection<|--RigJobSanjelCrewSection
RigJobCrewSection<|--RigJobThirdPartyCrewSection
UnitSchedule"1..*"-->"1"TruckUnit
WorkerSchedule"1..*"-->"1"Employee
SanjelCrewSchedule *--> UnitSchedule
SanjelCrewSchedule *--> WorkerSchedule
BatchRequest"Destination"-->"0..1"BinInformation
ProductHaul *--> ShippingLoadSheet
ProductHaul *--> PodLoad
PodLoad --> ShippingLoadSheet
ShippingLoadSheet"SourceStorage"-->"0..1"BinInformation
ShippingLoadSheet *-- BlendUnloadSheet
ShippingLoadSheet --> BatchRequest
BlendUnloadSheet "DestinationStorage"-->BinInformation
BinInformation -->BatchRequest
RigJob"1..*"-->"1"Rig
BulkPlant --|> Rig
BinInformation"*"-->Rig
BinInformation-->Bin
Loading

储仓信息导向领域模型

classDiagram
class ServicePoint
class Rig
class BinInformation {
 BlendChemical
 Quantity
 WorkingServicePoint
 PodIndex
 Capacity
 LastProductHaulLoadId
 BlendTestingStatus
 BinStatus
 Quatity
 Volume
}
class Bin{
PodCount
}
class BlendChemical
class ProductHaulLoad {
<<BlendRequest>>
Id
BlendTestingStatus
IsAirborneHazard
}
Rig "1" <-- "0..*" BinInformation: 工作于
BinInformation "*"-->"1" Bin: 每个Pod
BinInformation --> BlendChemical: 包含
BinInformation-->ServicePoint: 分配给
ProductHaulLoad-->BlendChemical: 加载到储仓
BinInformation..>ProductHaulLoad
Loading

BinStatus的定义目前还不是100%正确。

调度导向领域模型

classDiagram
class RigJobSanjelCrewSection
class RigJobThirdPartyCrewSection
class SanjelCrewSchedule
class ThirdPartyCrewSchedule
class UnitSchedule
class WorkerSchedule
class RigJob
class SanjelCrew
class ThirdPartyCrew
class RigJobCrewSection
class Employee
class TruckUnit
class ProductHaul
class RotationTemplate
class ShippingLoadSheet
SanjelCrew o-- TruckUnit
SanjelCrew o-- Employee
RigJobCrewSection "0..*" -->"0..1"RigJob
RigJobCrewSection "0..*" -->"0..1"ProductHaul
RigJobSanjelCrewSection" 1"<--"1"SanjelCrewSchedule
RigJobThirdPartyCrewSection "1"<--"1"ThirdPartyCrewSchedule
RigJobSanjelCrewSection "1..*"-->"1"SanjelCrew
RigJobThirdPartyCrewSection "1..*" -->"1"ThirdPartyCrew
RigJobCrewSection<|--RigJobSanjelCrewSection
RigJobCrewSection<|--RigJobThirdPartyCrewSection
UnitSchedule"1..*"-->"1"TruckUnit
WorkerSchedule"1..*"-->"1"Employee
SanjelCrewSchedule *--> UnitSchedule
SanjelCrewSchedule *--> WorkerSchedule
WorkerSchedule-->"0..1"RotationTemplate
ProductHaul "1" *--> ShippingLoadSheet
Loading

散装罐车人员状态对齐

人员工作周期(散装罐车人员日志)

stateDiagram-V2
state has_next_Load_Requested <<choice>>
state will_be_off_duty <<choice>>
state is_bulker_loaded <<choice>>
OffDuty-->LoadRequested: 产品运输已分配
LoadRequested-->Called: 人员准备就绪,呼叫司机
Called--> is_bulker_loaded: 散装罐车已装载?
	is_bulker_loaded --> Loading: 否
	is_bulker_loaded --> Loaded: 是
state OnDuty {
	Enroute-->OnLocation: 人员到达现场
	OnLocation-->OnWayIn: 人员正在返回
	OnWayIn-->Returned: 人员抵达散装工厂
	has_next_Load_Requested-->Loading: 是
	Returned-->will_be_off_duty: 人员将要下班?
	has_next_Load_Requested-->Returned: 否
	will_be_off_duty-->has_next_Load_Requested:否,已安排下一次产品运输?
	Loading-->Loaded: 散装罐车已装载
	Loaded-->Enroute: 人员离开散装工厂
}
will_be_off_duty-->OffDuty: 是
OffDuty-->Down: 设置人员休息
Loading

产品运输工作周期(装运状态)

stateDiagram-v2
[*]-->Scheduled
Scheduled-->Loaded:BPAVS已装载散装罐车
Loaded-->InProgress:人员分配设置为在路上
InProgress-->OnLocation: 在RigBoard或DRB上设置为现场
OnLocation-->[*]
Scheduled-->[Deleted]:已取消
Loaded-->[Deleted]:已取消
Loading

人员分配生命周期

stateDiagram-v2
[*]-->Scheduled
Scheduled-->Loading:搅拌正在装载到散装罐车
Loading-->Loaded: 搅拌已装载到散装罐车
Loaded-->EnRoute:在DRB上离站时人员分配设置为在路上
EnRoute-->OnLocation:在RigBoard或DRB上设置为现场
OnLocation-->OnWayIn:在DRB上设置为正在返回
OnWayIn-->Returned:返回时在DRB上设置为已返回
Returned-->NextAssignment: 如果有下一次运输可用
Returned-->LogoffDuty: 设置为下班
Scheduled-->Removed: 分配已取消
Loading-->Removed: 分配已取消
Loaded-->Removed: 分配已取消
Loading

销售预测模型

classDiagram
class SalesProject {
	- ClientCompany: ClientCompany
	- District: ServicePoint
	- ServiceLIne: ServiceLine
	- Rig: Rig
	- Area: string
	- StartTime: DateTime
	- EndTime: DateTime
	- ProgramId: string
	- WellCount: int
	- StringCount: int
	- CmtStringCount: int
	- Frequency: int
	- EstimatedRevenue: double
	- SalesRepresentative: Emplyee
	- Comments: string
	- Status: SalesProjectStatus
	- ApprovalStatus: SalesProjectApporvalStaus
	- SpecialtyProducts: List~SalesSpecialtyProduct~
	- DrillDays: int
}
class SalesProjectStatus {
	- Bid
	- Potential
	- SecondCall
	- Won
	- Lost
}
<<Enum>> SalesProjectStatus
class SalesProjectApporvalStaus {
	- Draft
	- Pending
	- Approved
	- Complete
}
<<Enum>> SalesProjectApporvalStaus
class DrillOrder {
	- CementingOrders: List~JobOrder~
	- Ordinal: int
        - WellCount: int
        - ProgramId: string
}
class JobOrder{
	- JobType: JobType
	- EsitmateRevenue: double
	- Ordinal: int
}
class SalesSpecialtyProduct {
	- Product: Product
}
SalesProject-->SalesProjectApporvalStaus
SalesProject-->SalesProjectStatus
SalesProject *--> DrillOrder
DrillOrder *--> JobOrder
SalesProject *-->SalesSpecialtyProduct
Loading

模型更新历史

模型更新历史

实体定义解释

TruckUnit(车辆单元)

TruckUnit主数据包含Sanjel中的所有车辆,它们按主要类型和子类型进行分类。车辆单元根据目前一致的特定命名约定进行命名。

类别 主类型 主类型Id 子类型 子类型Id 命名
Pumper Trailer ROLLING STOCK TRAILER 2 SCM Twin 205 445###
B-train ROLLING STOCK TRAILER 2 B-Train 15 446###L
Bulker Trailer ROLLING STOCK TRAILER 2 Cement Bulk Transpor 101 446###
B-train ROLLING STOCK TRAILER 2 B-Train - Pup 280 446###P
Pumper Tractor ROLLING STOCK TRACTOR 1 Tandem - Tractor 276 745###
Bulker Trailer ROLLING STOCK BODY JOB 5 Cement Bulk Transpor 61 746501
Bulker Tractor ROLLING STOCK TRACTOR 1 Tandem - Tractor 276 746###
Pumper ROLLING STOCK BODY JOB 5 C & A 62 740###
Pumper ROLLING STOCK BODY JOB 5 SCM Single 238 740###
Pickup LIGHT DUTY VEHICLES 4 1/2 Ton | 3/4 Ton | 1 Ton 93 | 94 | 95 20####
Bulker Trailer ROLLING STOCK TRAILER 2 4000 Porta Bulker 27 449###
Pumper ROLLING STOCK BODY JOB 5 Low Rate Pump 71
Pumper ROLLING STOCK TRAILER 2 SCM Twin HHP 288
Pumper FIELD SUPPORT EQUIPMENT 3 Other Support Equipm 291

实体状态参考

调度单与作业

    public enum EServiceEntityStatus
    {
        [EnumMember] [Description("空")] Empty = 0x0,
        [EnumMember] [Description("就绪")] Ready = 0x1,
        [EnumMember] [Description("进行中")] InProgress = 0x2,
        [EnumMember] [Description("已传输")] Transmitted = 0x3,
        [EnumMember] [Description("已取消")] Canceled = 0x4,
        [EnumMember] [Description("已锁定")] Locked = 0x5,
        [EnumMember] [Description("在途中")] InRoute = 0x6,
        [EnumMember] [Description("已组装")] Assembled = 0x7,
        [EnumMember] [Description("已接收")] Received = 0x8,
        [EnumMember] [Description("预传输")] PreTransmitted = 0x9,
        [EnumMember] [Description("已删除")] Deleted = 0xA,
        [EnumMember] [Description("待定")] Pending = 0xB,
        [EnumMember] [Description("已确认")] Confirmed = 0xC,
        [EnumMember] [Description("已调度")] Scheduled = 0xD,
        [EnumMember] [Description("已派遣")] Dispatched = 0xE,
        [EnumMember] [Description("已完成")] Completed = 0xF,
        [EnumMember] [Description("已提醒")] Alerted = 0x10,
        [EnumMember] [Description("已过期")] Expired = 0x11,

        [EnumMember] [Description("等待审批")] AwaitingApproval = 0x200,
        [EnumMember] [Description("审批中")] Approving = 0x400,
        [EnumMember] [Description("已批准")] Approved = 0x800,

        [EnumMember] [Description("异常")] Exception = 0x1000,
        [EnumMember] [Description("成功")] Succeed = 0x2000,
        [EnumMember] [Description("失败")] Failed = 0x4000,
    }

钻井作业

	public enum JobLifeStatus
	{
		[EnumMember]
		[Description("无")]
		None = 0,

		[EnumMember]
		[Description("已提醒")]
		Alerted = 1,

		[EnumMember]
		[Description("待定")]
		Pending = 2,

		[EnumMember]
		[Description("已确认")]
		Confirmed = 3,

		[EnumMember]
		[Description("已调度")]
		Scheduled = 4,

		[EnumMember]
		[Description("已派遣")]
		Dispatched = 5,

		[EnumMember]
		[Description("已取消")]
		Canceled = 6,

		[EnumMember]
		[Description("进行中")]
		InProgress = 7,

		[EnumMember]
		[Description("已完成")]
		Completed = 8,

		[EnumMember]
		[Description("已删除")]
		Deleted = 9,

	}

产品运输

	public enum ProductHaulStatus
	{
		[EnumMember]
		[Description("空")]
		Empty = 0,

		[EnumMember]
		[Description("待定")]
		Pending = 1,

		[EnumMember]
		[Description("已调度")]
		Scheduled = 2,

		[EnumMember]
		[Description("进行中")]
		InProgress = 3,

		[EnumMember]
		[Description("现场")]
		OnLocation = 4,

		[EnumMember]
		[Description("装载中")]
		Loading = 5,

		[EnumMember]
		[Description("已装载")]
		Loaded = 6,

		[EnumMember]
		[Description("已返回")]
		Returned = 7,

	}

产品运输装载(搅拌请求)

	public enum ProductHaulLoadStatus
	{
		[EnumMember]
		[Description("空")]
		Empty = 0,

		[EnumMember]
		[Description("已调度")]
		Scheduled = 1,

		[EnumMember]
		[Description("现场")]
		OnLocation = 2,

		[EnumMember]
		[Description("搅拌中")]
		Blending = 3,

		[EnumMember]
		[Description("搅拌完成")]
		BlendCompleted = 4,

		[EnumMember]
		[Description("已装载")]
		Loaded = 5,

		[EnumMember]
		[Description("运输已调度")]
		HaulScheduled = 6,

		[EnumMember]
		[Description("已存储")]
		Stored = 7,

		[EnumMember]
		[Description("作业已取消")]
		JobCanceled = 8,

		[EnumMember]
		[Description("已回收")]
		Recycled = 9,

		[EnumMember]
		[Description("搅拌故障")]
		FaultBlend = 10,

		[EnumMember]
		[Description("可使用")]
		GoodToUse = 11,

		[EnumMember]
		[Description("已重新搅拌")]
		Reblended = 12,

		[EnumMember]
		[Description("就绪")]
		Ready = 13,

		[EnumMember]
		[Description("部分运输已调度")]
		PartialHaulScheduled = 14,

		[EnumMember]
		[Description("BPO已确认")]
		BpoConfirmed = 15,

		[EnumMember]
		[Description("可以开始搅拌")]
		BlendingCanCommence = 16,

装运装载单

	public enum ShippingStatus
	{
		[EnumMember]
		[Description("空")]
		Empty = 0,

		[EnumMember]
		[Description("已调度")]
		Scheduled = 1,

		[EnumMember]
		[Description("已装载")]
		Loaded = 2,

		[EnumMember]
		[Description("现场")]
		OnLocation = 3,

	}

RigJobCrewSection(作业分配)

	public enum RigJobCrewSectionStatus
	{
		[EnumMember]
		[Description("已分配")]
		Assigned = 1,

		[EnumMember]
		[Description("已调度")]
		Scheduled = 2,

		[EnumMember]
		[Description("已移除")]
		Removed = 3,

		[EnumMember]
		[Description("已呼叫")]
		Called = 4,

		[EnumMember]
		[Description("登记上班")]
		LogOnDuty = 5,

		[EnumMember]
		[Description("登记下班")]
		LogOffDuty = 6,

		[EnumMember]
		[Description("装载中")]
		Loading = 7,

		[EnumMember]
		[Description("已装载")]
		Loaded = 8,

		[EnumMember]
		[Description("在途中")]
		EnRoute = 9,

		[EnumMember]
		[Description("现场")]
		OnLocation = 10,

		[EnumMember]
		[Description("正在返回")]
		OnWayIn = 11,

		[EnumMember]
		[Description("已返回")]
		Returned = 12,

	}

BulkerCrewLog(散装罐车人员日志)

	public enum BulkerCrewStatus
	{
		[EnumMember]
		[Description("无")]
		None = 0,

		[EnumMember]
		[Description("下班")]
		OffDuty = 1,

		[EnumMember]
		[Description("在途中")]
		EnRoute = 2,

		[EnumMember]
		[Description("已呼叫")]
		Called = 3,

		[EnumMember]
		[Description("正在返回")]
		OnWayIn = 4,

		[EnumMember]
		[Description("准备就绪")]
		GoodToGo = 5,

		[EnumMember]
		[Description("已请求装载")]
		LoadRequested = 6,

		[EnumMember]
		[Description("休息")]
		Down = 7,

		[EnumMember]
		[Description("现场")]
		OnLocation = 8,

		[EnumMember]
		[Description("已返回")]
		Returned = 9,

		[EnumMember]
		[Description("已装载")]
		Loaded = 10,

		[EnumMember]
		[Description("装载中")]
		Loading = 11,

	}

BlendShippingStatus(搅拌请求需要它)

	public enum BlendShippingStatus
	{
		[EnumMember]
		[Description("空")]
		Empty = 0,

		[EnumMember]
		[Description("运输已调度")]
		HaulScheduled = 1,

		[EnumMember]
		[Description("部分运输已调度")]
		ParitialHaulScheduled = 2,

		[EnumMember]
		[Description("现场")]
		OnLocation = 3,

	}
⚠️ **GitHub.com Fallback** ⚠️