Module Server : MAJ code suite à l'utilisation de la clss LigthweightSale dans les requêtes; MAJ code suite à la suppression des attributs de type Date

This commit is contained in:
Notmoo-PC\Notmoo 2017-11-05 21:32:18 +01:00
parent aa8122ef12
commit 6b7de9a97c
4 changed files with 54 additions and 7 deletions

View File

@ -7,6 +7,7 @@ import com.pqt.core.entities.messages.MessageType;
import com.pqt.core.entities.product.LightweightProduct; import com.pqt.core.entities.product.LightweightProduct;
import com.pqt.core.entities.product.Product; import com.pqt.core.entities.product.Product;
import com.pqt.core.entities.product.ProductUpdate; import com.pqt.core.entities.product.ProductUpdate;
import com.pqt.core.entities.sale.LightweightSale;
import com.pqt.core.entities.sale.Sale; import com.pqt.core.entities.sale.Sale;
import com.pqt.core.entities.server_config.ServerConfig; import com.pqt.core.entities.server_config.ServerConfig;
import com.pqt.core.entities.user_account.Account; import com.pqt.core.entities.user_account.Account;
@ -87,7 +88,7 @@ public class SimpleMessageHandler implements IMessageHandler {
manager.supportForConnectedAccounts(MessageType.QUERY_SALE, (message)->{ manager.supportForConnectedAccounts(MessageType.QUERY_SALE, (message)->{
Map<String, String> fields = new HashMap<>(); Map<String, String> fields = new HashMap<>();
try { try {
long saleId = saleService.submitSale(messageToolFactory.getObjectParser(Sale.class).parse(message.getField("sale"))); long saleId = saleService.submitSale(messageToolFactory.getObjectParser(LightweightSale.class).parse(message.getField("lightweight_sale")));
fields.put("saleId", Long.toString(saleId)); fields.put("saleId", Long.toString(saleId));
return new Message(MessageType.ACK_SALE, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, fields); return new Message(MessageType.ACK_SALE, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, fields);
}catch(NullPointerException e){ }catch(NullPointerException e){

View File

@ -1,5 +1,6 @@
package com.pqt.server.module.sale; package com.pqt.server.module.sale;
import com.pqt.core.entities.sale.LightweightSale;
import com.pqt.core.entities.sale.Sale; import com.pqt.core.entities.sale.Sale;
/** /**
@ -18,6 +19,8 @@ public interface ISaleDao {
long submitSale(Sale sale); long submitSale(Sale sale);
Sale convert(LightweightSale lwSale);
boolean isSaleRevertSupported(); boolean isSaleRevertSupported();
boolean submitSaleRevert(long id); boolean submitSaleRevert(long id);
} }

View File

@ -1,6 +1,7 @@
package com.pqt.server.module.sale; package com.pqt.server.module.sale;
import com.pqt.core.entities.product.Product; import com.pqt.core.entities.product.Product;
import com.pqt.core.entities.sale.LightweightSale;
import com.pqt.core.entities.sale.Sale; import com.pqt.core.entities.sale.Sale;
import com.pqt.server.module.stock.StockService; import com.pqt.server.module.stock.StockService;
import com.pqt.server.tools.FileUtil; import com.pqt.server.tools.FileUtil;
@ -10,7 +11,10 @@ import org.apache.commons.io.input.ReversedLinesFileReader;
import java.io.*; import java.io.*;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map;
/** /**
* Implémentation de l'interface {@link ISaleDao} utilisant un fichier comme moyen pour assurer la persistance des * Implémentation de l'interface {@link ISaleDao} utilisant un fichier comme moyen pour assurer la persistance des
@ -55,11 +59,26 @@ public class NoRevertFileSaleDao implements ISaleDao {
long saleId = nextSaleId; long saleId = nextSaleId;
stockService.applySale(new SaleContent(sale)); stockService.applySale(new SaleContent(sale));
logSale(sale, saleId); logSale(sale, new Date(), saleId);
generateNextSaleId(); generateNextSaleId();
return saleId; return saleId;
} }
public Sale convert(LightweightSale lwSale){
Map<Product, Integer> products = new HashMap<>();
lwSale.getProducts().keySet()
.forEach(pId->{
Product p = stockService.getProduct(pId);
if(p!=null)
products.put(p, lwSale.getProducts().get(pId));
});
if(products.keySet().size()!=lwSale.getProducts().keySet().size())
return null;
return new Sale(lwSale.getId(), products, lwSale.getOrderedWith(), lwSale.getOrderedBy(), lwSale.getOrderedFor(), lwSale.getType(), lwSale.getStatus());
}
private void generateNextSaleId() { private void generateNextSaleId() {
nextSaleId++; nextSaleId++;
} }
@ -111,24 +130,24 @@ public class NoRevertFileSaleDao implements ISaleDao {
throw new UnsupportedOperationException("Le revert de commandes n'est pas supporté"); throw new UnsupportedOperationException("Le revert de commandes n'est pas supporté");
} }
private void logSale(Sale sale, long saleId){ private void logSale(Sale sale, Date date, long saleId){
try(FileOutputStream fos = new FileOutputStream(SALE_LOG_FILE_NAME); try(FileOutputStream fos = new FileOutputStream(SALE_LOG_FILE_NAME);
PrintWriter pw = new PrintWriter(fos)){ PrintWriter pw = new PrintWriter(fos)){
pw.append(renderer.render(sale, saleId)); pw.append(renderer.render(sale, date, saleId));
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
private ISaleRenderer getRenderer(){ private ISaleRenderer getRenderer(){
return(sale, id)->{ return(sale, date, id)->{
StringBuffer sb = new StringBuffer("\n#").append(id).append("\n"); StringBuffer sb = new StringBuffer("\n#").append(id).append("\n");
String separator = "-----"; String separator = "-----";
DateFormat dateFormat = new SimpleDateFormat("<dd/ww/yyyy - HH:mm:ss>"); DateFormat dateFormat = new SimpleDateFormat("<dd/ww/yyyy - HH:mm:ss>");
sb.append("type : ").append(sale.getType().name()).append("\n"); sb.append("type : ").append(sale.getType().name()).append("\n");
sb.append("at : ").append(dateFormat.format(sale.getOrderedAt())).append("\n"); sb.append("at : ").append(dateFormat.format(date)).append("\n");
if(sale.getOrderedBy()!=null) if(sale.getOrderedBy()!=null)
sb.append("by : ").append(sale.getOrderedBy().getUsername()).append("(").append(sale.getOrderedBy().getPermissionLevel().name()).append(")").append("\n"); sb.append("by : ").append(sale.getOrderedBy().getUsername()).append("(").append(sale.getOrderedBy().getPermissionLevel().name()).append(")").append("\n");
if(sale.getOrderedFor()!=null) if(sale.getOrderedFor()!=null)
@ -145,6 +164,6 @@ public class NoRevertFileSaleDao implements ISaleDao {
} }
private interface ISaleRenderer{ private interface ISaleRenderer{
String render(Sale sale, long saleId); String render(Sale sale, Date date, long saleId);
} }
} }

View File

@ -1,11 +1,16 @@
package com.pqt.server.module.sale; package com.pqt.server.module.sale;
import com.pqt.core.entities.product.Product;
import com.pqt.core.entities.sale.LightweightSale;
import com.pqt.core.entities.sale.Sale; import com.pqt.core.entities.sale.Sale;
import com.pqt.server.module.sale.listeners.ISaleFirerer; import com.pqt.server.module.sale.listeners.ISaleFirerer;
import com.pqt.server.module.sale.listeners.ISaleListener; import com.pqt.server.module.sale.listeners.ISaleListener;
import com.pqt.server.module.sale.listeners.SimpleSaleFirerer; import com.pqt.server.module.sale.listeners.SimpleSaleFirerer;
import com.pqt.server.module.stock.StockService; import com.pqt.server.module.stock.StockService;
import java.util.HashMap;
import java.util.Map;
//TODO ajouter logs //TODO ajouter logs
/** /**
@ -47,6 +52,25 @@ public class SaleService {
return id; return id;
} }
/**
* Soumet une commande au service pour validation. Si la commande est validée, les stocks seront débités et
* l'identifiant de la commande sera renvoyé. Si la commande n'est pas validée, la valeur {@value -1} sera renvoyée
* et les stocks resterons inchangés.
* <p/>
* Les produits de la commande seront récupéré automatiquement via le service de stocks en se basant sur les id
* présent dans {@code sale}. Si un id ne correspond pas à un produit, la totalité de la commande sera refusée.
*
* @param lwSale commande à valider
* @return l'identifiant positif non-nul attribué à la commande si elle est validée, {@value -1} sinon.
*/
public long submitSale(LightweightSale lwSale) {
Sale sale = dao.convert(lwSale);
if(sale!=null)
return submitSale(sale);
return -1;
}
/** /**
* Détermine si le rollback de commande est supporté par la configuration actuelle du serveur ou non. * Détermine si le rollback de commande est supporté par la configuration actuelle du serveur ou non.
* <p/> * <p/>