Compare commits
2 Commits
9ad2938003
...
77c3c07a21
Author | SHA1 | Date | |
---|---|---|---|
77c3c07a21 | |||
2bc0e0eca2 |
@ -44,12 +44,12 @@ public class OmTeamApplicationController extends BaseController
|
|||||||
public TableDataInfo listByOm(OmTeamApplication omTeamApplication)
|
public TableDataInfo listByOm(OmTeamApplication omTeamApplication)
|
||||||
{
|
{
|
||||||
startPage();
|
startPage();
|
||||||
// if(StringUtils.isEmpty(omTeamApplication.getContacts())){
|
if(StringUtils.isEmpty(omTeamApplication.getContacts())){
|
||||||
// omTeamApplication.setContacts(IdUtils.fastSimpleUUID());
|
omTeamApplication.setContacts(IdUtils.fastSimpleUUID());
|
||||||
// }
|
}
|
||||||
// if(StringUtils.isEmpty(omTeamApplication.getTelephone())){
|
if(StringUtils.isEmpty(omTeamApplication.getTelephone())){
|
||||||
// omTeamApplication.setTelephone(IdUtils.fastSimpleUUID());
|
omTeamApplication.setTelephone(IdUtils.fastSimpleUUID());
|
||||||
// }
|
}
|
||||||
List<OmTeamApplication> list = omTeamApplicationService.selectOmTeamApplicationList(omTeamApplication);
|
List<OmTeamApplication> list = omTeamApplicationService.selectOmTeamApplicationList(omTeamApplication);
|
||||||
return getDataTable(list);
|
return getDataTable(list);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,49 @@
|
|||||||
|
package com.inspur.web.controller.order;
|
||||||
|
|
||||||
|
import com.inspur.common.annotation.Log;
|
||||||
|
import com.inspur.common.core.controller.BaseController;
|
||||||
|
import com.inspur.common.core.domain.AjaxResult;
|
||||||
|
import com.inspur.common.core.page.TableDataInfo;
|
||||||
|
import com.inspur.common.enums.BusinessType;
|
||||||
|
import com.inspur.common.utils.poi.ExcelUtil;
|
||||||
|
import com.inspur.order.domain.OmOrderInfo;
|
||||||
|
import com.inspur.order.service.IOmOrderAnalysisService;
|
||||||
|
import com.inspur.order.service.IOmOrderInfoService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 运维订单信息数据分析Controller
|
||||||
|
*
|
||||||
|
* @author zhanghan11
|
||||||
|
* @date 2024-04-16
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/order/analysis")
|
||||||
|
public class OmOrderAnalysisController extends BaseController {
|
||||||
|
@Autowired
|
||||||
|
private IOmOrderAnalysisService omOrderAnalysisService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询运维订单信息列表
|
||||||
|
*/
|
||||||
|
@PreAuthorize("@ss.hasPermi('order:analysis:query')")
|
||||||
|
@GetMapping("/orderDataAnalysis")
|
||||||
|
public AjaxResult orderDataAnalysis() {
|
||||||
|
return AjaxResult.success(omOrderAnalysisService.orderDataAnalysis());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分析报告下载
|
||||||
|
*/
|
||||||
|
@PreAuthorize("@ss.hasPermi('order:analysis:query')")
|
||||||
|
@PostMapping("/downloadReport")
|
||||||
|
public void fileDownload(HttpServletResponse response, HttpServletRequest request) {
|
||||||
|
omOrderAnalysisService.downloadReport(response);
|
||||||
|
}
|
||||||
|
}
|
@ -35,6 +35,17 @@
|
|||||||
<artifactId>httpclient</artifactId>
|
<artifactId>httpclient</artifactId>
|
||||||
<version>4.5.13</version>
|
<version>4.5.13</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.poi</groupId>
|
||||||
|
<artifactId>poi-ooxml</artifactId>
|
||||||
|
<version>5.0.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jfree</groupId>
|
||||||
|
<artifactId>jfreechart</artifactId>
|
||||||
|
<version>1.5.0</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
@ -0,0 +1,39 @@
|
|||||||
|
package com.inspur.order.mapper;
|
||||||
|
|
||||||
|
import com.inspur.order.domain.OmOrderCollect;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单收藏Mapper接口
|
||||||
|
*
|
||||||
|
* @author inspur
|
||||||
|
* @date 2024-04-22
|
||||||
|
*/
|
||||||
|
public interface OmOrderAnalysisMapper
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 查询总订单数量和金额
|
||||||
|
*
|
||||||
|
* @param tenantId 租户ID
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Map<String,Object> selectCountAndAmount(String tenantId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据类型查询订单数量和金额
|
||||||
|
*
|
||||||
|
* @param tenantId 租户ID
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public List<Map<String, Object>> selectCountAndAmountByType(String tenantId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据实际查询订单数量和金额
|
||||||
|
*
|
||||||
|
* @param tenantId 租户ID
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public List<Map<String,Object>> selectCountAndAmountByDate(String tenantId);
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
package com.inspur.order.service;
|
||||||
|
|
||||||
|
import com.inspur.order.domain.OmOrderCollect;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单分析Service接口
|
||||||
|
*
|
||||||
|
* @author inspur
|
||||||
|
* @date 2024-04-22
|
||||||
|
*/
|
||||||
|
public interface IOmOrderAnalysisService
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 查询分析数据
|
||||||
|
*
|
||||||
|
* @return 分析数据
|
||||||
|
*/
|
||||||
|
public Map<String,Object> orderDataAnalysis();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据报告下载
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void downloadReport(HttpServletResponse response);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,274 @@
|
|||||||
|
package com.inspur.order.service.impl;
|
||||||
|
|
||||||
|
import com.inspur.common.utils.SecurityUtils;
|
||||||
|
import com.inspur.order.mapper.OmOrderAnalysisMapper;
|
||||||
|
import com.inspur.order.service.IOmOrderAnalysisService;
|
||||||
|
import com.inspur.order.utils.OmConstant;
|
||||||
|
import org.apache.commons.math3.optim.InitialGuess;
|
||||||
|
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
|
||||||
|
import org.apache.poi.util.Units;
|
||||||
|
import org.apache.poi.xwpf.usermodel.XWPFDocument;
|
||||||
|
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
|
||||||
|
import org.apache.poi.xwpf.usermodel.XWPFRun;
|
||||||
|
import org.jfree.chart.ChartFactory;
|
||||||
|
import org.jfree.chart.ChartUtils;
|
||||||
|
import org.jfree.chart.JFreeChart;
|
||||||
|
import org.jfree.chart.StandardChartTheme;
|
||||||
|
import org.jfree.chart.plot.PlotOrientation;
|
||||||
|
import org.jfree.data.category.DefaultCategoryDataset;
|
||||||
|
import org.jfree.data.general.DefaultPieDataset;
|
||||||
|
import org.jfree.data.xy.XYSeries;
|
||||||
|
import org.jfree.data.xy.XYSeriesCollection;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.*;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单收藏Service业务层处理
|
||||||
|
*
|
||||||
|
* @author inspur
|
||||||
|
* @date 2024-04-22
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class OmOrderAnalysisServiceImpl implements IOmOrderAnalysisService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private OmOrderAnalysisMapper omOrderAnalysisMapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询分析数据
|
||||||
|
*
|
||||||
|
* @return 分析数据
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> orderDataAnalysis() {
|
||||||
|
Map<String, Object> map = new HashMap<>();
|
||||||
|
// 订单总数据
|
||||||
|
Map<String, Object> orderMap = omOrderAnalysisMapper.selectCountAndAmount(SecurityUtils.getTenantId());
|
||||||
|
map.put("orderMap", orderMap);
|
||||||
|
// 分时间订单金额
|
||||||
|
map.put("dateOrderMap", getDateData());
|
||||||
|
// 分类订单数据
|
||||||
|
List<Map<String, Object>> typeOrderMap = omOrderAnalysisMapper.selectCountAndAmountByType(SecurityUtils.getTenantId());
|
||||||
|
map.put("typeOrderMap", typeOrderMap);
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<String, Object> getDateData() {
|
||||||
|
Map<String, Object> typeOrderMap = new HashMap<>();
|
||||||
|
List<Map<String, Object>> list = omOrderAnalysisMapper.selectCountAndAmountByDate(SecurityUtils.getTenantId());
|
||||||
|
// 获取最近三年
|
||||||
|
// 今年
|
||||||
|
int thisYear = LocalDate.now().getYear();
|
||||||
|
// 去年
|
||||||
|
int lastYear = LocalDate.now().minusYears(1).getYear();
|
||||||
|
// 前年
|
||||||
|
int theYearBeafor = LocalDate.now().minusYears(2).getYear();
|
||||||
|
// 初始化数据
|
||||||
|
List<Object> numList1 = new ArrayList<>();
|
||||||
|
List<Object> numList2 = new ArrayList<>();
|
||||||
|
List<Object> numList3 = new ArrayList<>();
|
||||||
|
List<Object> amountList1 = new ArrayList<>();
|
||||||
|
List<Object> amountList2 = new ArrayList<>();
|
||||||
|
List<Object> amountList3 = new ArrayList<>();
|
||||||
|
// 进行初始化
|
||||||
|
for (String month : OmConstant.MONTH_ARRAY) {
|
||||||
|
numList1.add(0);
|
||||||
|
numList2.add(0);
|
||||||
|
numList3.add(0);
|
||||||
|
amountList1.add(0.00);
|
||||||
|
amountList2.add(0.00);
|
||||||
|
amountList3.add(0.00);
|
||||||
|
}
|
||||||
|
// 数据变量处理
|
||||||
|
for (Map<String, Object> map : list) {
|
||||||
|
int year = Integer.parseInt(String.valueOf(map.get("date_year")));
|
||||||
|
if (year == thisYear) {
|
||||||
|
numList1.set(Integer.parseInt(String.valueOf(map.get("date_month"))) - 1, map.get("num"));
|
||||||
|
amountList1.set(Integer.parseInt(String.valueOf(map.get("date_month"))) - 1, map.get("amount"));
|
||||||
|
}
|
||||||
|
if (year == lastYear) {
|
||||||
|
numList2.set(Integer.parseInt(String.valueOf(map.get("date_month"))) - 1, map.get("num"));
|
||||||
|
amountList2.set(Integer.parseInt(String.valueOf(map.get("date_month"))) - 1, map.get("amount"));
|
||||||
|
}
|
||||||
|
if (year == theYearBeafor) {
|
||||||
|
numList3.set(Integer.parseInt(String.valueOf(map.get("date_month"))) - 1, map.get("num"));
|
||||||
|
amountList3.set(Integer.parseInt(String.valueOf(map.get("date_month"))) - 1, map.get("amount"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Map<String, Object> numMap = new HashMap<>();
|
||||||
|
Map<String, Object> amountMap = new HashMap<>();
|
||||||
|
numMap.put(thisYear + "", numList1);
|
||||||
|
numMap.put(lastYear + "", numList2);
|
||||||
|
numMap.put(theYearBeafor + "", numList3);
|
||||||
|
amountMap.put(thisYear + "", amountList1);
|
||||||
|
amountMap.put(lastYear + "", amountList2);
|
||||||
|
amountMap.put(theYearBeafor + "", amountList3);
|
||||||
|
typeOrderMap.put("numMap", numMap);
|
||||||
|
typeOrderMap.put("amountMap", amountMap);
|
||||||
|
typeOrderMap.put("year", new int[]{theYearBeafor, lastYear, thisYear});
|
||||||
|
typeOrderMap.put("month", OmConstant.MONTH_ARRAY);
|
||||||
|
return typeOrderMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据报告下载
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void downloadReport(HttpServletResponse response) {
|
||||||
|
Map<String, Object> map = orderDataAnalysis();
|
||||||
|
// 创建图表
|
||||||
|
JFreeChart dateNumChart = createLineChart((Map<String, Object>) map.get("dateOrderMap"), "近三年月订单数统计", "num");
|
||||||
|
JFreeChart dateAmountChart = createLineChart((Map<String, Object>) map.get("dateOrderMap"), "近三年月订单金额统计", "amount");
|
||||||
|
JFreeChart typeNumChart = createPieChart((List<Map<String, Object>>) map.get("typeOrderMap"), "年度订单数量业务类型分布", "num");
|
||||||
|
JFreeChart typeAmountChart = createPieChart((List<Map<String, Object>>) map.get("typeOrderMap"), "年度订单金额业务类型分布", "amount");
|
||||||
|
// 将图表渲染为BufferedImage
|
||||||
|
BufferedImage dateNumChartImage = dateNumChart.createBufferedImage(800, 600);
|
||||||
|
BufferedImage dateAmountChartImage = dateAmountChart.createBufferedImage(800, 600);
|
||||||
|
BufferedImage typeNumChartImage = typeNumChart.createBufferedImage(800, 600);
|
||||||
|
BufferedImage typeAmountChartImage = typeAmountChart.createBufferedImage(800, 600);
|
||||||
|
// 插入图片到Word文档
|
||||||
|
XWPFDocument doc = new XWPFDocument();
|
||||||
|
XWPFParagraph p = doc.createParagraph();
|
||||||
|
XWPFRun r = p.createRun();
|
||||||
|
// 将BufferedImage转换为字节数组
|
||||||
|
try {
|
||||||
|
ByteArrayOutputStream dateNumChartBaos = new ByteArrayOutputStream();
|
||||||
|
ImageIO.write(dateNumChartImage, "png", dateNumChartBaos);
|
||||||
|
byte[] dateNumChartBytes = dateNumChartBaos.toByteArray();
|
||||||
|
|
||||||
|
ByteArrayOutputStream dateAmountChartBaos = new ByteArrayOutputStream();
|
||||||
|
ImageIO.write(dateNumChartImage, "png", dateAmountChartBaos);
|
||||||
|
byte[] dateAmountChartBytes = dateAmountChartBaos.toByteArray();
|
||||||
|
|
||||||
|
ByteArrayOutputStream typeNumChartBaos = new ByteArrayOutputStream();
|
||||||
|
ImageIO.write(dateNumChartImage, "png", typeNumChartBaos);
|
||||||
|
byte[] typeNumChartBytes = typeNumChartBaos.toByteArray();
|
||||||
|
|
||||||
|
ByteArrayOutputStream typeAmountChartBaos = new ByteArrayOutputStream();
|
||||||
|
ImageIO.write(dateNumChartImage, "png", typeAmountChartBaos);
|
||||||
|
byte[] typeAmountChartBytes = typeAmountChartBaos.toByteArray();
|
||||||
|
|
||||||
|
r.addPicture(new ByteArrayInputStream(dateNumChartBytes), XWPFDocument.PICTURE_TYPE_PNG, "dateNumChart", Units.toEMU(500), Units.toEMU(500)); // 设置图片大小和位置
|
||||||
|
r.addPicture(new ByteArrayInputStream(dateAmountChartBytes), XWPFDocument.PICTURE_TYPE_PNG, "dateAmountChart", Units.toEMU(500), Units.toEMU(500)); // 设置图片大小和位置
|
||||||
|
r.addPicture(new ByteArrayInputStream(typeNumChartBytes), XWPFDocument.PICTURE_TYPE_PNG,"typeNumChart", Units.toEMU(500), Units.toEMU(500)); // 设置图片大小和位置
|
||||||
|
r.addPicture(new ByteArrayInputStream(typeAmountChartBytes), XWPFDocument.PICTURE_TYPE_PNG, "typeAmountChart", Units.toEMU(500), Units.toEMU(500)); // 设置图片大小和位置
|
||||||
|
} catch (InvalidFormatException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 文档下载
|
||||||
|
//设置响应信息
|
||||||
|
response.setContentType("application/octet-stream");
|
||||||
|
// filename为文件下载后保存的文件名,可自行设置,但是注意文件名后缀,要和原来的保持一致
|
||||||
|
response.setHeader("Content-Disposition", "attachment;");
|
||||||
|
response.setCharacterEncoding("utf-8");
|
||||||
|
OutputStream out = null;
|
||||||
|
try {
|
||||||
|
out = response.getOutputStream();
|
||||||
|
ByteArrayOutputStream docOut = new ByteArrayOutputStream();
|
||||||
|
doc.write(docOut);
|
||||||
|
byte[] bytes = docOut.toByteArray();
|
||||||
|
// 输出到客户端
|
||||||
|
if (bytes != null) {
|
||||||
|
out.write(bytes);
|
||||||
|
}
|
||||||
|
// 清理资源
|
||||||
|
doc.close();
|
||||||
|
docOut.close();
|
||||||
|
out.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private JFreeChart createLineChart(Map<String, Object> map, String title, String type) {
|
||||||
|
XYSeriesCollection dataset = new XYSeriesCollection();
|
||||||
|
String yLabel = "";
|
||||||
|
int[] year = (int[]) map.get("year");
|
||||||
|
for (int yearItem : year) {
|
||||||
|
XYSeries series = new XYSeries(yearItem + "");
|
||||||
|
Map<String, Object> dataMap = new HashMap<>();
|
||||||
|
switch (type) {
|
||||||
|
case "num":
|
||||||
|
dataMap = (Map<String, Object>) map.get("numMap");
|
||||||
|
yLabel = "数量";
|
||||||
|
break;
|
||||||
|
case "amount":
|
||||||
|
dataMap = (Map<String, Object>) map.get("amountMap");
|
||||||
|
yLabel = "金额";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
List<String> list = (List<String>) dataMap.get(yearItem + "");
|
||||||
|
if (!list.isEmpty()) {
|
||||||
|
for (int i = 0; i < 12; i++) {
|
||||||
|
switch (type) {
|
||||||
|
case "num":
|
||||||
|
series.add(i + 1, Integer.parseInt(String.valueOf(list.get(i))));
|
||||||
|
break;
|
||||||
|
case "amount":
|
||||||
|
series.add(i + 1, Double.parseDouble(String.valueOf(list.get(i))));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dataset.addSeries(series);
|
||||||
|
}
|
||||||
|
StandardChartTheme sct = new StandardChartTheme("CN");
|
||||||
|
sct.setExtraLargeFont(new Font("隶书", Font.BOLD, 20));
|
||||||
|
sct.setRegularFont(new Font("隶书", Font.BOLD, 20));
|
||||||
|
sct.setLargeFont(new Font("隶书", Font.BOLD, 20));
|
||||||
|
ChartFactory.setChartTheme(sct);
|
||||||
|
return ChartFactory.createXYLineChart(
|
||||||
|
title, // 图表标题
|
||||||
|
"月份", // x轴标签
|
||||||
|
yLabel, // y轴标签
|
||||||
|
dataset, // 数据集
|
||||||
|
PlotOrientation.VERTICAL, // 图表方向
|
||||||
|
true, // 是否显示图例
|
||||||
|
true, // 是否生成工具提示
|
||||||
|
false // 是否生成URL链接
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private JFreeChart createPieChart(List<Map<String, Object>> list, String title, String type) {
|
||||||
|
StandardChartTheme sct = new StandardChartTheme("CN");
|
||||||
|
sct.setExtraLargeFont(new Font("隶书", Font.BOLD, 20));
|
||||||
|
sct.setRegularFont(new Font("隶书", Font.BOLD, 20));
|
||||||
|
sct.setLargeFont(new Font("隶书", Font.BOLD, 20));
|
||||||
|
ChartFactory.setChartTheme(sct);
|
||||||
|
DefaultPieDataset dataset = new DefaultPieDataset();
|
||||||
|
for (Map<String, Object> map : list) {
|
||||||
|
switch (type) {
|
||||||
|
case "num":
|
||||||
|
dataset.setValue(String.valueOf(map.get("type")), Integer.parseInt(String.valueOf(map.get("num"))));
|
||||||
|
break;
|
||||||
|
case "amount":
|
||||||
|
dataset.setValue(String.valueOf(map.get("type")), Double.parseDouble(String.valueOf(map.get("amount"))));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ChartFactory.createPieChart(title, dataset,
|
||||||
|
true, true, true);
|
||||||
|
}
|
||||||
|
}
|
@ -119,4 +119,8 @@ public class OmConstant {
|
|||||||
*/
|
*/
|
||||||
public static final String PLAN_STATUS_COMPLETE_OPERATION="4";
|
public static final String PLAN_STATUS_COMPLETE_OPERATION="4";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 月份列表
|
||||||
|
*/
|
||||||
|
public static final String [] MONTH_ARRAY =new String[] {"1","2","3","4","5","6","7","8","9","10","11","12"};
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,42 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper
|
||||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.inspur.order.mapper.OmOrderAnalysisMapper">
|
||||||
|
|
||||||
|
<select id="selectCountAndAmount" resultType="map" parameterType="string">
|
||||||
|
SELECT COUNT(0) totalNum,
|
||||||
|
IFNULL(ROUND(SUM(service_fees), 2), 0) totalAmount,
|
||||||
|
(SELECT COUNT(0) FROM `sys_user` WHERE tenant_id = #{tenantId} AND del_flag = '0') totalPerson
|
||||||
|
FROM `om_order_quotation`
|
||||||
|
WHERE tenant_id = #{tenantId}
|
||||||
|
</select>
|
||||||
|
<select id="selectCountAndAmountByType" resultType="map" parameterType="string">
|
||||||
|
SELECT d.dict_label type,
|
||||||
|
IFNULL(s.num, 0) num,
|
||||||
|
ROUND(IFNULL(s.amount, 0), 2) amount
|
||||||
|
FROM (SELECT dict_label, dict_value FROM `sys_dict_data` WHERE dict_type = 'om_business_type') d
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT i.business_type,
|
||||||
|
COUNT(0) num,
|
||||||
|
SUM(q.service_fees) amount
|
||||||
|
FROM (SELECT *
|
||||||
|
FROM `om_order_quotation`
|
||||||
|
WHERE tenant_id = #{tenantId} AND YEAR (create_time) = YEAR (SYSDATE())) q
|
||||||
|
LEFT JOIN `om_order_info` i ON q.order_id = i.order_id
|
||||||
|
GROUP BY i.business_type ) s
|
||||||
|
ON d.dict_value = s.business_type
|
||||||
|
</select>
|
||||||
|
<select id="selectCountAndAmountByDate" resultType="map" parameterType="string">
|
||||||
|
SELECT DATE_FORMAT(create_time, '%Y-%m') AS date_year_month,
|
||||||
|
COUNT(0) num,
|
||||||
|
(YEAR (create_time)) AS date_year,
|
||||||
|
(MONTH (create_time)) AS date_month,
|
||||||
|
ROUND(SUM(service_fees), 2) amount
|
||||||
|
FROM `om_order_quotation`
|
||||||
|
WHERE tenant_id = #{tenantId}
|
||||||
|
AND (YEAR (create_time))
|
||||||
|
> (YEAR (SYSDATE()) - 3)
|
||||||
|
GROUP BY date_year_month
|
||||||
|
</select>
|
||||||
|
</mapper>
|
9
inspur-ui/src/api/order/analysis.js
Normal file
9
inspur-ui/src/api/order/analysis.js
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import request from "@/utils/request";
|
||||||
|
|
||||||
|
// 分析数据查询
|
||||||
|
export function getData() {
|
||||||
|
return request({
|
||||||
|
url: "/order/analysis/orderDataAnalysis",
|
||||||
|
method: "get",
|
||||||
|
});
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
@ -270,7 +270,7 @@
|
|||||||
<span>{{ parseTime(scope.row.serviceEndTime, '{y}-{m}-{d} {h}:{mi}:{s}') }}</span>
|
<span>{{ parseTime(scope.row.serviceEndTime, '{y}-{m}-{d} {h}:{mi}:{s}') }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<!-- <el-table-column
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
label="状态"
|
label="状态"
|
||||||
align="center"
|
align="center"
|
||||||
@ -282,7 +282,7 @@
|
|||||||
:value="scope.row.status"
|
:value="scope.row.status"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column> -->
|
||||||
<el-table-column
|
<el-table-column
|
||||||
label="操作"
|
label="操作"
|
||||||
align="center"
|
align="center"
|
||||||
|
@ -102,7 +102,7 @@
|
|||||||
:gutter="10"
|
:gutter="10"
|
||||||
class="mb8"
|
class="mb8"
|
||||||
>
|
>
|
||||||
<el-col :span="1.5">
|
<!-- <el-col :span="1.5">
|
||||||
<el-button
|
<el-button
|
||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
@ -111,7 +111,7 @@
|
|||||||
@click="handleAdd"
|
@click="handleAdd"
|
||||||
v-hasPermi="['order:info:add']"
|
v-hasPermi="['order:info:add']"
|
||||||
>新增</el-button>
|
>新增</el-button>
|
||||||
</el-col>
|
</el-col> -->
|
||||||
<!-- <el-col :span="1.5">
|
<!-- <el-col :span="1.5">
|
||||||
<el-button
|
<el-button
|
||||||
type="danger"
|
type="danger"
|
||||||
|
Loading…
Reference in New Issue
Block a user