Задать вопрос

Как вынести значения с колонки в таблице на постгрес и просуммировать?

Есть сервер на Spring и база данных на PostgreSQL, а так же есть две таблицы[с полями] production[id, prodname, prodcount], admin_productions[id, adminproductname, adminproducttotal]. В admin_productions админ добавляет товары, а в production добавляются название и количество изготовленного товара. Нужно сделать так:
select prodcount from production inner join admin_productions on production.prodname = admin_productions.adminproductname


вот ссылка на гитхаб
и как-то просуммировать prodcount и показать в терминале хоть

Еще одна проблема в том что prodcount хранится как String и нужно сделать Integer
и отразить ReportController
  • Вопрос задан
  • 72 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
blrmyfc
@blrmyfc Автор вопроса
скрещивая костыли и свои возможности я получил вот такое, теперь мне нужно, чтобы это было более менее удобно, мб их объединить в один класс
package com.example.beton.controller;

import com.example.beton.domain.AdminProductions;
import com.example.beton.domain.Production;
import com.example.beton.domain.Sales;
import com.example.beton.repos.AdminProductRepo;
import com.example.beton.repos.ProductionRepo;
import com.example.beton.repos.SaleRepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

import java.lang.reflect.Array;
import java.util.List;
import java.util.Map;

@Controller
public class ReportController {
    @Autowired
    private SaleRepo saleRepo;

    @Autowired
    private AdminProductRepo adminProductRepo;

    @Autowired
    private ProductionRepo productionRepo;

    @GetMapping("/report")
    public String getShowReports(Map<String, Object> model){
//        производимые продукты
        String[] adminProductArray = new String[20];
//        массив количества производимых товаров
        Integer[] prices = new Integer[20];
//        массив проданных товаров
        Integer[] salecount = new Integer[20];
//        массив цен на проданные изделия
        Double[] saletotal = new Double[20];

        /*##############################################*/
        /*############## сверху Массивы ################*/
        /*##############################################*/


//        Получение списка производимых продуктов
        Integer count = 0;
        Iterable<AdminProductions> adminprod = adminProductRepo.findAll();
        for (AdminProductions admprd : adminprod){
            adminProductArray[count] = admprd.getAdminproductname();
            count++;
        }

//        Получение количества производимых продуктов
        Integer i = 0;
        for (String ad : adminProductArray) {
            Integer prCount=0;

            if (ad!=null){
                Iterable<Production> prod = productionRepo.findByProdname(ad);

                for (Production pr : prod) {
                    prCount += Integer.parseInt(pr.getProdcount());
                }
                prices[i] = prCount;
//                System.out.println(ad +" : "+ prCount);
                i++;
            }
        }

//        Получение количества проданных товаров
        Integer j = 0;
        for (String sp : adminProductArray) {
            Integer slCount=0;

            if (sp!=null && !sp.equals("Количество не указано")){
                Iterable<Sales> sales = saleRepo.findBySalename(sp);

                for (Sales sl : sales) {
                    slCount += Integer.parseInt(sl.getSalecount());
                }
                salecount[j] = slCount;
//                System.out.println(sp +" : "+ slCount);
                j++;
            }
        }

//        Получение цен на проданные товары
        Integer foo = 0;
        for (String st : adminProductArray) {
            Double stCount = 0.0;

            if (st!=null){
                Iterable<Sales> salestotal = saleRepo.findBySaletotal(st);

                for (Sales slt : salestotal) {
//                    stCount += Double.parseDouble(slt.getSaletotal());
                    System.out.println(slt.getSalename());
                }
                saletotal[foo] = stCount;
//                System.out.println(st +" : "+ stCount);
                foo++;
            }
        }

        model.put("ad", adminProductArray);
        model.put("prc", prices);
        model.put("slcnts", salecount);
        model.put("sattls", saletotal);

        return "report";
    }
    @GetMapping("/reportsuper")
    public String superShowReport(Map<String, Object> model){
        return "superreport";
    }
}


package com.example.beton.repos;

import com.example.beton.domain.Production;
import org.springframework.data.repository.CrudRepository;

import java.util.List;

public interface ProductionRepo extends CrudRepository<Production, Integer> {
    List<Production> findByProdname(String prodname);
}


<#import "parts/common.ftlh" as c>

<@c.page>

<div class="container">
    <div class="row">
        <div class="col-lg-2 col-md-2 col-sm-2 col-2">
            <#list ad as a>
                <#if a??>
                    <p>${a}</p>
                </#if>
            </#list>
        </div>
        <div class="col-lg-1 col-md-1 col-sm-1 col-1">
            <#list prc as pr>
                <#if pr??>
                    <p>${pr} шт.</p>
                </#if>
            </#list>
        </div>
        <div class="col-lg-1 col-md-1 col-sm-1 col-1">
            <#list slcnts as slcnt>
                <#if slcnt??>
                    <p>${slcnt} шт.</p>
                </#if>
            </#list>
        </div>
        <div class="col-lg-1 col-md-1 col-sm-1 col-1">
             <#list sattls as sattl>
                <#if sattl??>
                    <p>${sattl} руб.</p>
                </#if>
             </#list>
        </div>
        <div class="col-lg-1 col-md-1 col-sm-1 col-1"></div>
        <div class="col-lg-1 col-md-1 col-sm-1 col-1"></div>
        <div class="col-lg-1 col-md-1 col-sm-1 col-1"></div>
        <div class="col-lg-1 col-md-1 col-sm-1 col-1"></div>
        <div class="col-lg-1 col-md-1 col-sm-1 col-1"></div>
        <div class="col-lg-1 col-md-1 col-sm-1 col-1"></div>
        <div class="col-lg-1 col-md-1 col-sm-1 col-1"></div>
    </div>
</div>
    </tbody>
</table>

</@c.page>


Но хотелось бы что бы это через iterable, что бы не открывать каждый раз list на фримаркере
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
alexfilus
@alexfilus
Senior backend developer
1. Если в поле хранится число, то в качестве типа стоит использовать число. По ряду причин.
2.
select sum(prodcount::int) as cnt 
from production 
inner join admin_productions on production.prodname = admin_productions.adminproductname

3. Этот вопрос никак к сложным не относится.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы