Merge remote-tracking branch 'origin/SPM-24'

This commit is contained in:
Johannes Theiner 2019-05-28 16:40:06 +02:00
commit f15ea28af3
6 changed files with 232 additions and 105 deletions

View File

@ -0,0 +1,11 @@
package de.hsel.spm.baudas.web;
public class Columns {
private String col1; //NOPMD
private String col2; //NOPMD
public Columns(String col1, String col2){
this.col1 = col1;
this.col2 = col2;
}
}

View File

@ -0,0 +1,64 @@
package de.hsel.spm.baudas.web;
import com.google.gson.Gson;
import de.hsel.spm.baudas.analysis.ShoppingCart;
import org.jetbrains.annotations.NotNull;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;
import java.util.*;
/**
* Changes data to readable format for table
*
* @author Karsten Eden
* @version 0.1
* @since 0.1
*/
@WebServlet("/shopping_cart")
public class ShoppingCartDiagram extends HttpServlet {
private static final long serialVersionUID = 5026732432605473505L;
protected void doGet(@NotNull HttpServletRequest req, @NotNull HttpServletResponse resp) throws IOException {
req.setCharacterEncoding(StandardCharsets.UTF_8.name());
resp.setCharacterEncoding(StandardCharsets.UTF_8.name());
resp.setContentType("application/json");
PrintWriter out = resp.getWriter();
Gson gson = new Gson();
List<Columns> colList = new ArrayList<>();
if (req.getParameter("id") == null) {
out.print(gson.toJson(colList));
return;
}
UUID uuid = UUID.fromString(req.getParameter("id"));
File file = Data.get(uuid);
ShoppingCart cart = new ShoppingCart(file);
Map<List<String>, List<String>> result = new HashMap<>();
result = cart.getResult();
List<String> col1 = new ArrayList<>();
List<String> col2 = new ArrayList<>();
for(Map.Entry<List<String>, List<String>> entry : result.entrySet()){
col1.add(entry.getKey().toString());
col2.add(entry.getValue().toString());
}
for(int i = 0; i < col1.size(); i++ ){
colList.add(new Columns(col1.get(i).replaceAll("\\[", "").replaceAll("\\]", ""), col2.get(i).replaceAll("\\[", "").replaceAll("\\]", "")));
}
out.print(gson.toJson(colList));
}
}

View File

@ -4,7 +4,6 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.bundle.min.js"
integrity="sha256-xKeoJ50pzbUGkpQxDYHD7o7hxe0LaOGeguUidbq6vis=" crossorigin="anonymous"></script>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<%@include file="theming.jsp"%>
@ -13,9 +12,7 @@
<script src="js/shopping_times.js"></script>
<script src="js/top_flop.js"></script>
<script src="js/clusters.js"></script>
<%--<script src="js/sold_articles.js"></script>--%>
<script src="js/shopping_cart.js"></script>
<!--Ende Skriptbereich-->
</body>

View File

@ -1,6 +1,6 @@
<%@ page import="java.nio.charset.StandardCharsets" %>
<%@ page contentType="text/html;charset=UTF-8" %>
<%@include file="menu.jsp"%>
<%@include file="menu.jsp" %>
<% response.setCharacterEncoding(StandardCharsets.UTF_8.name()); %>
<% request.setCharacterEncoding(StandardCharsets.UTF_8.name()); %>
@ -63,6 +63,7 @@
</div>
</div>
<<<<<<< HEAD
<!--Gruppenübersicht-->
<div class="col s12 m12">
<div id="group_overview" class="card white">
@ -74,111 +75,127 @@
<table id="cluster_table">
</table>
</div>
</div>
</div>
</div>
<!--Warenkorbanlyse-->
<div id="shopping_card_analysis" class="col s12 m6">
<div class="card white">
<div class="card-content">
<div class="center">
<span class="card-title center">Warenkorbanalyse</span>
</div>
<div>
<p>Coming Soon</p>
</div>
</div>
</div>
</div>
</div>
<!--Marketing-Cards-->
<div id="marketing" class="row container">
<div class="row">
<div class="col s12 m6">
<div id="marketing_tip_3" class="card white">
<div class="card-content">
<div class="center">
<span class="card-title center">Werbung</span>
<!--Warenkorbanlyse-->
<div id="shopping_card_analysis" class="col s12 m12">
<div class="card white">
<div class="center">
<span class="card-title center">Warenkorbanalyse</span>
</div>
<div class="card-content">
<table id="shopping_cart_table">
</table>
>>>>>>> origin/SPM-24
</div>
</div>
<div>
<p>
Werbung dient dazu, auf bestimmte Produkte, Angebote oder den Markt im Allgemeinen aufmerksam zu machen. Sie kann über verschiedene Wege verbreitet werden, etwa das Internet, Zeitungsannoncen oder auch per TV/Radio.
Im Gegensatz zu Rabatten (die zeitabhängig am besten funktionieren) ist Werbung stark von der Zielgruppe abhängig. Insbesondere in der Kombination mit anderen Marketingmaßnahmen kann sie so ihre volle Wirkung entfalten.
<br>
<br>
Analysen, die für Werbung nützlich sein könnten:
Clusteranalyse, Wochenübersicht, Verkaufszahlen
</p>
</div>
</div>
<!--Marketing-Cards-->
<div id="marketing" class="row container">
<div class="row">
<div class="col s12 m6">
<div id="marketing_tip_3" class="card white">
<div class="card-content">
<div class="center">
<span class="card-title center">Werbung</span>
</div>
<div>
<p>
Werbung dient dazu, auf bestimmte Produkte, Angebote oder den Markt im
Allgemeinen aufmerksam zu machen. Sie kann über verschiedene Wege verbreitet
werden, etwa das Internet, Zeitungsannoncen oder auch per TV/Radio.
Im Gegensatz zu Rabatten (die zeitabhängig am besten funktionieren) ist Werbung
stark von der Zielgruppe abhängig. Insbesondere in der Kombination mit anderen
Marketingmaßnahmen kann sie so ihre volle Wirkung entfalten.
<br>
<br>
Analysen, die für Werbung nützlich sein könnten:
Clusteranalyse, Wochenübersicht, Verkaufszahlen
</p>
</div>
</div>
</div>
</div>
<div class="col s12 m6">
<div id="marketing_tip_4" class="card white">
<div class="card-content">
<div class="center">
<span class="card-title center">Sortimentsveränderung</span>
</div>
<div>
<p>
Gibt es eine Produktgruppe, die sich besonders gut verkauft, so sollte unter
Umständen über die Erweiterung des Sortiments innerhalb dieser Gruppe
nachgedacht werden.
Im Umkehrschluss dazu bietet sich an, schlecht verkaufte Produkte, welche keinen
hohen Gewinn abwerfen aus dem täglichen Verkaufsgeschäft wieder zu entfernen.
Dies verringert die Bildung von „Ladenhütern“ und schafft Platz für neue, sich
besser verkaufende Produkte.
<br>
<br>
Analysen, die bei der Sortimentswahl nützlich sein könnten:
Verkaufszahlen, Clusterübersicht
</p>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col s12 m6">
<div id="marketing_tip_1" class="card white">
<div class="card-content">
<div class="center">
<span class="card-title center">Rabatt</span>
</div>
<div>
<p>
Rabatte können z.B. an Tagen angeboten werden, an denen nur wenige Kunden
erscheinen. Dadurch wird einerseits an dieses Tagen oder Uhrzeiten das
Kaufverhalten angeregt, als auch der Andrang an anderen reduziert. Dies dient
insbesondere der Entzerrung des zeitabhängigen Kaufverhaltens.
Des Weiteren können durch Rabatte weniger gut laufende Produkte in den
Vordergrund gerückt du vergünstigt angeboten werden.
Zusätzlich dazu können sich gut verkaufende Produkte mit einem (vermeintlich)
verringerten Preis versehen werden. Dies kann beim Kunden den „inneren
Schnäppchenjäger“ wecken und dafür sorgen, dass er sich dieses gute Angebot
nicht entgehen lassen kann.
<br>
<br>
Analysen, die zur Platzierung von Rabatten nützlich sein können:
Wochenübersicht, Einkaufszeiten, Verkaufszahlen
</p>
</div>
</div>
</div>
</div>
<div class="col s12 m6">
<div id="marketing_tip_2" class="card white">
<div class="card-content">
<div class="center">
<span class="card-title center">Produktplatzierung </span>
</div>
<div>
<p>
Es gibt bestimmte Produkte, die werden häufig zusammen erworben. Sind diese
Produkte quer durch den Laden verstreut, so müssen die Kunden zusätzlich zu
ihren Wunschprodukten auch an anderen Auslagen vorbei und die Anzahl an
Spontankäufen eben jener weiteren Produkte steigt.
<br>
<br>
Analysen, die bei der Produktplatzierung hilfreich sein könnten:
Warenkorbsanalyse, Verkaufszahlen
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col s12 m6">
<div id="marketing_tip_4" class="card white">
<div class="card-content">
<div class="center">
<span class="card-title center">Sortimentsveränderung</span>
</div>
<div>
<p>
Gibt es eine Produktgruppe, die sich besonders gut verkauft, so sollte unter Umständen über die Erweiterung des Sortiments innerhalb dieser Gruppe nachgedacht werden.
Im Umkehrschluss dazu bietet sich an, schlecht verkaufte Produkte, welche keinen hohen Gewinn abwerfen aus dem täglichen Verkaufsgeschäft wieder zu entfernen. Dies verringert die Bildung von „Ladenhütern“ und schafft Platz für neue, sich besser verkaufende Produkte.
<br>
<br>
Analysen, die bei der Sortimentswahl nützlich sein könnten:
Verkaufszahlen, Clusterübersicht
</p>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col s12 m6">
<div id="marketing_tip_1" class="card white">
<div class="card-content">
<div class="center">
<span class="card-title center">Rabatt</span>
</div>
<div>
<p>
Rabatte können z.B. an Tagen angeboten werden, an denen nur wenige Kunden erscheinen. Dadurch wird einerseits an dieses Tagen oder Uhrzeiten das Kaufverhalten angeregt, als auch der Andrang an anderen reduziert. Dies dient insbesondere der Entzerrung des zeitabhängigen Kaufverhaltens.
Des Weiteren können durch Rabatte weniger gut laufende Produkte in den Vordergrund gerückt du vergünstigt angeboten werden.
Zusätzlich dazu können sich gut verkaufende Produkte mit einem (vermeintlich) verringerten Preis versehen werden. Dies kann beim Kunden den „inneren Schnäppchenjäger“ wecken und dafür sorgen, dass er sich dieses gute Angebot nicht entgehen lassen kann.
<br>
<br>
Analysen, die zur Platzierung von Rabatten nützlich sein können:
Wochenübersicht, Einkaufszeiten, Verkaufszahlen
</p>
</div>
</div>
</div>
</div>
<div class="col s12 m6">
<div id="marketing_tip_2" class="card white">
<div class="card-content">
<div class="center">
<span class="card-title center">Produktplatzierung </span>
</div>
<div>
<p>
Es gibt bestimmte Produkte, die werden häufig zusammen erworben. Sind diese Produkte quer durch den Laden verstreut, so müssen die Kunden zusätzlich zu ihren Wunschprodukten auch an anderen Auslagen vorbei und die Anzahl an Spontankäufen eben jener weiteren Produkte steigt.
<br>
<br>
Analysen, die bei der Produktplatzierung hilfreich sein könnten:
Warenkorbsanalyse, Verkaufszahlen
</p>
</div>
</div>
</div>
</div>
</div>
</div>
<%@include file="footer.jsp"%>
<%@include file="footer.jsp" %>

View File

@ -40,6 +40,7 @@ function updateAll(uuid) {
updateShoppingTimesChart(uuid);
updateTopFlopChart(uuid);
updateClusters(uuid)
updateShoppingCartTable(uuid);
//add new charts here.
}

View File

@ -0,0 +1,37 @@
let shopping_cart_result;
function updateShoppingCartTable(id) {
if(typeof id !== 'undefined') {
request('shopping_cart', id).then(function (data) {
shopping_cart_result = data;
drawShoppingCartTable();
});
}else request('shopping_cart_result').then(function(data) {
shopping_cart_result = data;
drawShoppingCartTable();
});
}
function drawShoppingCartTable(){
let table = document.getElementById("shopping_cart_table");
while(table.hasChildNodes()){
table.removeChild(table.firstChild);
}
let row = $("<thead>");
row.append("<tr>");
row.append("<th>Artikel</th>");
row.append("<th>Wird häufig zusammen gekauft mit</th>")
row.append("</tr>");
row.append("</thead>");
row.append("<tbody>");
for (x in shopping_cart_result){
row.append("<tr>");
row.append("<td>" + shopping_cart_result[x].col1 + "</td>");
row.append("<td>" + shopping_cart_result[x].col2 + "</td>");
row.append("</tr>");
}
row.append("</tbody>");
$("#shopping_cart_table").append(row);
}