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.Product;
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.server_config.ServerConfig;
import com.pqt.core.entities.user_account.Account;
@ -87,7 +88,7 @@ public class SimpleMessageHandler implements IMessageHandler {
manager.supportForConnectedAccounts(MessageType.QUERY_SALE, (message)->{
Map<String, String> fields = new HashMap<>();
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));
return new Message(MessageType.ACK_SALE, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, fields);
}catch(NullPointerException e){

View File

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

View File

@ -1,6 +1,7 @@
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.server.module.stock.StockService;
import com.pqt.server.tools.FileUtil;
@ -10,7 +11,10 @@ import org.apache.commons.io.input.ReversedLinesFileReader;
import java.io.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
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
@ -55,11 +59,26 @@ public class NoRevertFileSaleDao implements ISaleDao {
long saleId = nextSaleId;
stockService.applySale(new SaleContent(sale));
logSale(sale, saleId);
logSale(sale, new Date(), saleId);
generateNextSaleId();
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() {
nextSaleId++;
}
@ -111,24 +130,24 @@ public class NoRevertFileSaleDao implements ISaleDao {
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);
PrintWriter pw = new PrintWriter(fos)){
pw.append(renderer.render(sale, saleId));
pw.append(renderer.render(sale, date, saleId));
} catch (IOException e) {
e.printStackTrace();
}
}
private ISaleRenderer getRenderer(){
return(sale, id)->{
return(sale, date, id)->{
StringBuffer sb = new StringBuffer("\n#").append(id).append("\n");
String separator = "-----";
DateFormat dateFormat = new SimpleDateFormat("<dd/ww/yyyy - HH:mm:ss>");
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)
sb.append("by : ").append(sale.getOrderedBy().getUsername()).append("(").append(sale.getOrderedBy().getPermissionLevel().name()).append(")").append("\n");
if(sale.getOrderedFor()!=null)
@ -145,6 +164,6 @@ public class NoRevertFileSaleDao implements ISaleDao {
}
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;
import com.pqt.core.entities.product.Product;
import com.pqt.core.entities.sale.LightweightSale;
import com.pqt.core.entities.sale.Sale;
import com.pqt.server.module.sale.listeners.ISaleFirerer;
import com.pqt.server.module.sale.listeners.ISaleListener;
import com.pqt.server.module.sale.listeners.SimpleSaleFirerer;
import com.pqt.server.module.stock.StockService;
import java.util.HashMap;
import java.util.Map;
//TODO ajouter logs
/**
@ -47,6 +52,25 @@ public class SaleService {
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.
* <p/>