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

View File

@ -1,6 +1,6 @@
<%@ page import="java.nio.charset.StandardCharsets" %> <%@ page import="java.nio.charset.StandardCharsets" %>
<%@ page contentType="text/html;charset=UTF-8" %> <%@ page contentType="text/html;charset=UTF-8" %>
<%@include file="menu.jsp"%> <%@include file="menu.jsp" %>
<% response.setCharacterEncoding(StandardCharsets.UTF_8.name()); %> <% response.setCharacterEncoding(StandardCharsets.UTF_8.name()); %>
<% request.setCharacterEncoding(StandardCharsets.UTF_8.name()); %> <% request.setCharacterEncoding(StandardCharsets.UTF_8.name()); %>
@ -63,6 +63,7 @@
</div> </div>
</div> </div>
<<<<<<< HEAD
<!--Gruppenübersicht--> <!--Gruppenübersicht-->
<div class="col s12 m12"> <div class="col s12 m12">
<div id="group_overview" class="card white"> <div id="group_overview" class="card white">
@ -74,29 +75,27 @@
<table id="cluster_table"> <table id="cluster_table">
</table> </table>
</div> </div>
</div>
</div>
</div>
<!--Warenkorbanlyse--> <!--Warenkorbanlyse-->
<div id="shopping_card_analysis" class="col s12 m6"> <div id="shopping_card_analysis" class="col s12 m12">
<div class="card white"> <div class="card white">
<div class="card-content">
<div class="center"> <div class="center">
<span class="card-title center">Warenkorbanalyse</span> <span class="card-title center">Warenkorbanalyse</span>
</div> </div>
<div> <div class="card-content">
<p>Coming Soon</p> <table id="shopping_cart_table">
</div> </table>
>>>>>>> origin/SPM-24
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<!--Marketing-Cards--> <!--Marketing-Cards-->
<div id="marketing" class="row container"> <div id="marketing" class="row container">
<div class="row"> <div class="row">
<div class="col s12 m6"> <div class="col s12 m6">
<div id="marketing_tip_3" class="card white"> <div id="marketing_tip_3" class="card white">
@ -106,8 +105,12 @@
</div> </div>
<div> <div>
<p> <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. Werbung dient dazu, auf bestimmte Produkte, Angebote oder den Markt im
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. 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>
<br> <br>
Analysen, die für Werbung nützlich sein könnten: Analysen, die für Werbung nützlich sein könnten:
@ -125,8 +128,13 @@
</div> </div>
<div> <div>
<p> <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. Gibt es eine Produktgruppe, die sich besonders gut verkauft, so sollte unter
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. 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>
<br> <br>
Analysen, die bei der Sortimentswahl nützlich sein könnten: Analysen, die bei der Sortimentswahl nützlich sein könnten:
@ -146,9 +154,16 @@
</div> </div>
<div> <div>
<p> <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. Rabatte können z.B. an Tagen angeboten werden, an denen nur wenige Kunden
Des Weiteren können durch Rabatte weniger gut laufende Produkte in den Vordergrund gerückt du vergünstigt angeboten werden. erscheinen. Dadurch wird einerseits an dieses Tagen oder Uhrzeiten das
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. 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>
<br> <br>
Analysen, die zur Platzierung von Rabatten nützlich sein können: Analysen, die zur Platzierung von Rabatten nützlich sein können:
@ -166,7 +181,10 @@
</div> </div>
<div> <div>
<p> <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. 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>
<br> <br>
Analysen, die bei der Produktplatzierung hilfreich sein könnten: Analysen, die bei der Produktplatzierung hilfreich sein könnten:
@ -177,8 +195,7 @@
</div> </div>
</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); updateShoppingTimesChart(uuid);
updateTopFlopChart(uuid); updateTopFlopChart(uuid);
updateClusters(uuid) updateClusters(uuid)
updateShoppingCartTable(uuid);
//add new charts here. //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);
}