|
|
@@ -1,5 +1,6 @@
|
|
|
package org.springblade.salesPart.smartLargeScreenApi.service.impl;
|
|
|
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import org.springblade.salesPart.brand.service.IBrandDescService;
|
|
|
import org.springblade.salesPart.corps.service.ICorpsDescService;
|
|
|
@@ -7,8 +8,10 @@ import org.springblade.salesPart.entity.*;
|
|
|
import org.springblade.salesPart.order.service.IOrderItemsService;
|
|
|
import org.springblade.salesPart.order.service.IOrderService;
|
|
|
import org.springblade.salesPart.smartLargeScreenApi.dto.BrandSort;
|
|
|
+import org.springblade.salesPart.smartLargeScreenApi.dto.MonthlySalesTrend;
|
|
|
import org.springblade.salesPart.smartLargeScreenApi.dto.WarehouseSort;
|
|
|
import org.springblade.salesPart.smartLargeScreenApi.service.ApiService;
|
|
|
+import org.springblade.salesPart.stock.service.IStockDescService;
|
|
|
import org.springblade.salesPart.storage.service.IStorageDescService;
|
|
|
import org.springblade.system.feign.ISysClient;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
@@ -38,6 +41,8 @@ public class ApiServiceImpl implements ApiService {
|
|
|
|
|
|
private final ICorpsDescService corpsDescService;
|
|
|
|
|
|
+ private final IStockDescService stockDescService;
|
|
|
+
|
|
|
@Override
|
|
|
public Map<String, Object> getTotalYear(String year) {
|
|
|
String tenantId = sysClient.getTenantIds("whether.financing");
|
|
|
@@ -253,4 +258,396 @@ public class ApiServiceImpl implements ApiService {
|
|
|
mapList.add(map);
|
|
|
return mapList;
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> monthAverageSingleTireProfit(String tenantId) {
|
|
|
+ List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
|
|
|
+ List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ if (!orderList.isEmpty()) {
|
|
|
+ BigDecimal amount = orderList.stream().map(PjOrder::getGrossProfit).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal goodsNum = orderList.stream().map(PjOrder::getGoodsTotalNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", amount.divide(goodsNum, 2, RoundingMode.HALF_UP));
|
|
|
+ } else {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", "0");
|
|
|
+ }
|
|
|
+ mapList.add(map);
|
|
|
+ return mapList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> averageSingleTireShippingFee(String tenantId) {
|
|
|
+ String data = sysClient.getParamServiceShippingFee(tenantId, "large.screen.average.freight");
|
|
|
+ List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ if (ObjectUtils.isNotNull(data)) {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", data);
|
|
|
+ } else {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", "0");
|
|
|
+ }
|
|
|
+ mapList.add(map);
|
|
|
+ return mapList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> inventoryTireQuantity(String tenantId) {
|
|
|
+ List<PjStockDesc> stockDescList = stockDescService.selectPjStockDescList(tenantId);
|
|
|
+ List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ if (!stockDescList.isEmpty()) {
|
|
|
+ BigDecimal balanceQuantity = stockDescList.stream().map(PjStockDesc::getBalanceQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", balanceQuantity);
|
|
|
+ } else {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", "0");
|
|
|
+ }
|
|
|
+ mapList.add(map);
|
|
|
+ return mapList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> highestProfit(String tenantId) {
|
|
|
+ List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
|
|
|
+ List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ if (!orderList.isEmpty()) {
|
|
|
+ List<PjOrder> orders = orderList.stream()
|
|
|
+ .sorted(Comparator.comparing(PjOrder::getGrossProfit).reversed())
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", orders.get(0).getGrossProfit());
|
|
|
+ } else {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", "0");
|
|
|
+ }
|
|
|
+ mapList.add(map);
|
|
|
+ return mapList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> lowestProfitMargin(String tenantId) {
|
|
|
+ List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
|
|
|
+ List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ if (!orderList.isEmpty()) {
|
|
|
+ List<PjOrder> orders = orderList.stream()
|
|
|
+ .sorted(Comparator.comparing(PjOrder::getGrossProfit))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", orders.get(0).getGrossProfit());
|
|
|
+ } else {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", "0");
|
|
|
+ }
|
|
|
+ mapList.add(map);
|
|
|
+ return mapList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> operatingProfit(String tenantId) {
|
|
|
+ List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
|
|
|
+ List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ if (!orderList.isEmpty()) {
|
|
|
+ BigDecimal amount = orderList.stream().map(PjOrder::getGrossProfit).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", amount);
|
|
|
+ } else {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", "0");
|
|
|
+ }
|
|
|
+ mapList.add(map);
|
|
|
+ return mapList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> inventoryTireCost(String tenantId) {
|
|
|
+ List<PjStockDesc> stockDescList = stockDescService.selectPjStockDescList(tenantId);
|
|
|
+ List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ if (!stockDescList.isEmpty()) {
|
|
|
+ BigDecimal inventoryAmount = stockDescList.stream().map(PjStockDesc::getInventoryAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", inventoryAmount);
|
|
|
+ } else {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", "0");
|
|
|
+ }
|
|
|
+ mapList.add(map);
|
|
|
+ return mapList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> inventoryTurnoverRate(String tenantId) {
|
|
|
+ List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", "0");
|
|
|
+ mapList.add(map);
|
|
|
+ return mapList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> salesTask(String tenantId) {
|
|
|
+ String data = sysClient.getParamServiceShippingFee(tenantId, "sales.task");
|
|
|
+ List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ if (ObjectUtils.isNotNull(data)) {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", data);
|
|
|
+ } else {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", "0");
|
|
|
+ }
|
|
|
+ mapList.add(map);
|
|
|
+ return mapList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> salesPerformance(String tenantId) {
|
|
|
+ List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
|
|
|
+ List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ if (!orderList.isEmpty()) {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", orderList.size());
|
|
|
+ } else {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", "0");
|
|
|
+ }
|
|
|
+ mapList.add(map);
|
|
|
+ return mapList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> salesPerformanceProportion(String tenantId) {
|
|
|
+ String data = sysClient.getParamServiceShippingFee(tenantId, "sales.task");
|
|
|
+ List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
|
|
|
+ List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ if (!orderList.isEmpty()) {
|
|
|
+ if (ObjectUtils.isNotNull(data)) {
|
|
|
+ BigDecimal total = new BigDecimal(data);
|
|
|
+ BigDecimal complete = new BigDecimal(orderList.size());
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", complete.divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")));
|
|
|
+ } else {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", "100");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", "0");
|
|
|
+ }
|
|
|
+ mapList.add(map);
|
|
|
+ return mapList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> tyreQuantityTask(String tenantId) {
|
|
|
+ String data = sysClient.getParamServiceShippingFee(tenantId, "tyre.quantity.task");
|
|
|
+ List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ if (ObjectUtils.isNotNull(data)) {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", data);
|
|
|
+ } else {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", "0");
|
|
|
+ }
|
|
|
+ mapList.add(map);
|
|
|
+ return mapList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> tyreQuantityPerformance(String tenantId) {
|
|
|
+ List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
|
|
|
+ List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ if (!orderList.isEmpty()) {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", orderList.stream().map(PjOrder::getGoodsTotalNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ } else {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", "0");
|
|
|
+ }
|
|
|
+ mapList.add(map);
|
|
|
+ return mapList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> tyreQuantityProportion(String tenantId) {
|
|
|
+ String data = sysClient.getParamServiceShippingFee(tenantId, "tyre.quantity.task");
|
|
|
+ List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
|
|
|
+ List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ if (!orderList.isEmpty()) {
|
|
|
+ if (ObjectUtils.isNotNull(data)) {
|
|
|
+ BigDecimal total = new BigDecimal(data);
|
|
|
+ BigDecimal complete = orderList.stream().map(PjOrder::getGoodsTotalNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", complete.divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")));
|
|
|
+ } else {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", "100");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", "0");
|
|
|
+ }
|
|
|
+ mapList.add(map);
|
|
|
+ return mapList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> storeTransactionTask(String tenantId) {
|
|
|
+ String data = sysClient.getParamServiceShippingFee(tenantId, "store.transaction.task");
|
|
|
+ List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ if (ObjectUtils.isNotNull(data)) {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", data);
|
|
|
+ } else {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", "0");
|
|
|
+ }
|
|
|
+ mapList.add(map);
|
|
|
+ return mapList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> storeTransactionQuantity(String tenantId) {
|
|
|
+ List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
|
|
|
+ List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ if (!orderList.isEmpty()) {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", orderList.stream().map(PjOrder::getCustomerId).distinct().count());
|
|
|
+ } else {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", "0");
|
|
|
+ }
|
|
|
+ mapList.add(map);
|
|
|
+ return mapList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> storeTransactionProportion(String tenantId) {
|
|
|
+ String data = sysClient.getParamServiceShippingFee(tenantId, "store.transaction.task");
|
|
|
+ List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
|
|
|
+ List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ if (!orderList.isEmpty()) {
|
|
|
+ if (ObjectUtils.isNotNull(data)) {
|
|
|
+ BigDecimal total = new BigDecimal(data);
|
|
|
+ BigDecimal complete = new BigDecimal(orderList.stream().map(PjOrder::getCustomerId).distinct().count());
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", complete.divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")));
|
|
|
+ } else {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", "100");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", "0");
|
|
|
+ }
|
|
|
+ mapList.add(map);
|
|
|
+ return mapList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> singleDaySalesMaximum(String tenantId) {
|
|
|
+ List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
|
|
|
+ List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ if (!orderList.isEmpty()) {
|
|
|
+ List<PjOrder> orders = orderList.stream()
|
|
|
+ .sorted(Comparator.comparing(PjOrder::getSalesAmount).reversed())
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", orders.get(0).getSalesAmount());
|
|
|
+ } else {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", "0");
|
|
|
+ }
|
|
|
+ mapList.add(map);
|
|
|
+ return mapList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> singleDaySalesMinimum(String tenantId) {
|
|
|
+ List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
|
|
|
+ List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ if (!orderList.isEmpty()) {
|
|
|
+ List<PjOrder> orders = orderList.stream()
|
|
|
+ .sorted(Comparator.comparing(PjOrder::getSalesAmount))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", orders.get(0).getSalesAmount());
|
|
|
+ } else {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", "0");
|
|
|
+ }
|
|
|
+ mapList.add(map);
|
|
|
+ return mapList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> averageDailySalesVolume(String tenantId) {
|
|
|
+ List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
|
|
|
+ List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ if (!orderList.isEmpty()) {
|
|
|
+ BigDecimal amount = orderList.stream().map(PjOrder::getSalesAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", amount.divide(new BigDecimal(orderList.size()), 2, RoundingMode.HALF_UP));
|
|
|
+ } else {
|
|
|
+ map.put("name", "");
|
|
|
+ map.put("value", "0");
|
|
|
+ }
|
|
|
+ mapList.add(map);
|
|
|
+ return mapList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> monthlySalesTrend(String tenantId) {
|
|
|
+ List<PjOrder> orderList = orderService.selectPjOrderList(tenantId, "2");
|
|
|
+ List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
+ if (!orderList.isEmpty()){
|
|
|
+ List<MonthlySalesTrend> list = new ArrayList<>();
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ for (PjOrder item : orderList) {
|
|
|
+ MonthlySalesTrend detail = new MonthlySalesTrend();
|
|
|
+ detail.setAmount(item.getSalesAmount());
|
|
|
+ calendar.setTime(item.getBusinesDate());
|
|
|
+ detail.setDate(calendar.get(Calendar.DAY_OF_MONTH));
|
|
|
+ list.add(detail);
|
|
|
+ }
|
|
|
+ List<MonthlySalesTrend> salesTrendList = list.stream()
|
|
|
+ .sorted(Comparator.comparing(MonthlySalesTrend::getDate))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ List<Integer> day = salesTrendList.stream().map(MonthlySalesTrend::getDate).distinct().collect(Collectors.toList());
|
|
|
+ for (Integer item : day) {
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("x", item);
|
|
|
+ map.put("y", salesTrendList.stream().filter(e-> e.getDate().equals(item))
|
|
|
+ .map(MonthlySalesTrend::getAmount).max(BigDecimal::compareTo));
|
|
|
+ map.put("z", salesTrendList.stream().filter(e-> e.getDate().equals(item))
|
|
|
+ .map(MonthlySalesTrend::getAmount).min(BigDecimal::compareTo));
|
|
|
+ mapList.add(map);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return mapList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> corpTop(String tenantId) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
}
|