Во-первых, если у каждого контейнера нет переменной веса, невозможно отследить индивидуальный вес. Даже если вы продолжаете обновлять вес в грузовиках, вы будете знать общий вес контейнеров, которого недостаточно. Особенно, если вы хотите разгрузить контейнеры. Я бы предложил этот подход
asset Container identified by containerId {
o String containerId regex=/[A-Z][A-Z][0-9][0-9][0-9]-[0-9][0-9]-[0-3][0-9]-[0-9][0-9]/
o String containerNumber
o Integer normalWeight range = [,100]
o Integer fragileWeight range = [,50]
--> Truck truck optional
}
asset Truck identified by truckId {
o String truckId
o Ownership ownershipType default="LEASED"
o Integer totalNormalWeight range default=0
o Integer totalFragileWeight range default=0
--> Container containersLoaded[] optional
}
Так что это позволит вам отслеживать вес каждого контейнера, а затем добавлять их, чтобы получить общее количество в грузовике. Переменная containersLoaded
позволит вам отслеживать загруженные контейнеры. Преимущество этого заключается в том, что вы можете точно уменьшить вес, если контейнер выгружен или разделен (что, я полагаю, будет частью потока пользователя)
function AssignTruck(containerTruckData) {
var myContainer; // store data from the promise
var myTruck;
console.log("ASSIGN TRUCK CALLED!");
var containerRegistry={}
var truckRegistry;
return getAssetRegistry('org.acme.interm.container.Container').then(function(registry){
containerRegistry = registry
return containerRegistry.get(containerTruckData.containerId);
}).then(function(container){
console.log("Got Container",container);
myContainer = container;
if(!container) throw new Error("Container : "+containerTruckData.containerId," Not Found!!!");
var factory = getFactory();
var relationship = factory.newRelationship('org.acme.interm.truck','Truck',containerTruckData.truckId);
container.truck = relationship;
return containerRegistry.update(container);
}).then(function() {
return getAssetRegistry('org.acme.interm.truck.Truck');
}).then(function (truckRegistry) {
truckRegistry = truckRegistry;
return truckRegistry.get(containerTruckData.truckId);
}).then(function (truck) {
truck.totalNormalWeight += myContainer.normalWeight;
truck.totalFragileWeight += myContainer.fragileWeight;
if (!truck.containersLoaded) {
truck.containersLoaded = [];
} else {
truck.containersLoaded.push(factory.newRelationship('org.acme.interm.container', 'Container', myContainer.containerId))
};
return truckRegistry.update(truck)
}).then(function(){
// Successful update
var event = getFactory().newEvent('org.acme.interm.container', 'TruckAssigned');
event.containerId = containerTruckData.containerId;
event.truckId = containerTruckData.truckId;
emit(event);
}).catch(function(error){
throw new Error(error);
});
}
Это должно сработать для вас. Теперь вы можете запросить грузовик и получить общий вес всех контейнеров, проверив переменные totalNormalWeight
и totalFragileWeight
. Вы также можете проверить массив containersLoaded
, чтобы получить список контейнеров. Чтобы получить индивидуальный вес контейнера, вы можете либо запросить контейнер и получить его вес, либо получить его непосредственно из переменной containersLoaded
.
Когда контейнеры должны быть удалены / выгружены из грузовика, вы можете получить их индивидуальный вес и вычесть их из общей суммы, и вывести соотношение из containersLoaded
.