From 61cd8da46195e98f3acaf1586956c1d7f2234070 Mon Sep 17 00:00:00 2001
From: zhanghl <253316343@qq.com>
Date: 星期四, 17 四月 2025 18:45:25 +0800
Subject: [PATCH] 增加日志表基础代码
---
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPartRouteStatServiceImpl.java | 200 ++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 168 insertions(+), 32 deletions(-)
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPartRouteStatServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPartRouteStatServiceImpl.java
index cada14b..010cb9d 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPartRouteStatServiceImpl.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPartRouteStatServiceImpl.java
@@ -1,20 +1,35 @@
package com.aps.core.service.impl;
+import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.*;
+import java.util.stream.Collectors;
+import com.aps.common.core.utils.poi.ExcelUtil;
import com.aps.common.core.utils.uuid.IdUtils;
import com.aps.common.core.web.domain.AjaxResult;
+import com.aps.core.domain.ApsPartPlan;
import com.aps.core.domain.ApsResourceDateStat;
+import com.aps.core.domain.ApsResourceGroup;
import com.aps.core.mapper.ApsResourceGroupMapper;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.util.IOUtils;
+import org.apache.poi.xssf.streaming.SXSSFCell;
+import org.apache.poi.xssf.streaming.SXSSFRow;
+import org.apache.poi.xssf.streaming.SXSSFSheet;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.aps.core.mapper.ApsPartRouteStatMapper;
import com.aps.core.domain.ApsPartRouteStat;
import com.aps.core.service.IApsPartRouteStatService;
+import org.springframework.transaction.annotation.Transactional;
import static java.util.stream.Collectors.groupingBy;
@@ -24,12 +39,17 @@
* @author zhl
* @date 2025-04-11
*/
+@Slf4j
@Service
public class ApsPartRouteStatServiceImpl implements IApsPartRouteStatService
{
+
@Autowired
private ApsPartRouteStatMapper apsPartRouteStatMapper;
+ @Autowired
private ApsResourceGroupMapper resourceGroupMapper;
+ @Autowired
+ private ApsResourceGroupMapper apsResourceGroupMapper;
/**
* 鏌ヨ闆朵欢缁熻琛�
@@ -109,13 +129,14 @@
/**
* 鏌ヨ闆朵欢宸ュ簭骞舵洿鏂拌鍒掑紑宸ユ棩鏈�
* */
+ @Transactional
+ @Override
public void updatePartRoutPlanDate() {
List<ApsPartRouteStat> tempList = apsPartRouteStatMapper.selectPartRoutStat();
/*瀵箃empList 鎸夌収 workOrderNo 杩涜鍒嗙粍*/
Map<String, List<ApsPartRouteStat>> groupByWorkOrderNo = tempList.stream().collect(groupingBy(ApsPartRouteStat::getWorkOrderNo));
/*鏈璁$畻鎵规鍙�*/
String batchNum = IdUtils.fastSimpleUUID();
- apsPartRouteStatMapper.deleteLastBatch(batchNum);
for (Map.Entry<String, List<ApsPartRouteStat>> entry : groupByWorkOrderNo.entrySet()) {
/*鍙栧嚭姣忎釜闆朵欢宸ュ崟鐨勫伐鑹鸿矾绾夸俊鎭�*/
List<ApsPartRouteStat> apsPartRouteStatList = entry.getValue();
@@ -124,7 +145,7 @@
/*涓存椂淇濆瓨 涓婁竴閬撳伐搴忕殑宸ュ簭鎬诲伐鏃�*/
ApsPartRouteStat last=null;
for (int i = 0; i <apsPartRouteStatList.size(); i++) {
- ApsPartRouteStat stat = apsPartRouteStatList.get(0);
+ ApsPartRouteStat stat = apsPartRouteStatList.get(i);
/*鍒ゆ柇褰撳墠宸ュ簭 褰撳墠宸ュ簭鍙湁涓�鏉�*/
if (stat.getCurrentProcessNumber().equals(stat.getRoadProcessNumber())) {
/* 瀵� stat.getProcessPlanStartDay() 鍜屽綋鍓嶆棩鏈� 杩涜瀵规瘮锛屽彧瀵规瘮鍒版棩锛屼笉鐢ㄧ鍗佸垎绉�*/
@@ -133,7 +154,7 @@
}
}
/*鏈紑宸ュ伐搴忕殑璁″垝寮�宸ユ棩=涓婁竴閬撳伐搴忕殑璁″垝寮�宸ユ棩+涓婁竴閬撳伐搴忕殑宸ュ簭鎬诲伐鏃躲��*/
- if (stat.getCurrentProcessNumber().compareTo(stat.getRoadProcessNumber()) > 0) {
+ if (stat.getCurrentProcessNumber().compareTo(stat.getRoadProcessNumber()) < 0) {
if (last != null) {
stat.setProcessPlanStartDay(last.getProcessPlanStartDay().plusHours(last.getProcessTotalTime()));
}
@@ -152,39 +173,154 @@
@Override
public AjaxResult selectResourceDateStat() {
/*鏌ュ嚭鎵�鏈夌粺璁$殑鏁版嵁*/
+ AjaxResult result = new AjaxResult(200, "鐢熸垚鎴愬姛");
List<ApsResourceDateStat> list = apsPartRouteStatMapper.selectResourceDateStat();
- /*姹傚嚭璁″垝鐨勬渶澶ф椂闂达紝娌℃湁 璁剧疆涓哄綋鍓嶆椂闂�+15澶�*/
- ApsResourceDateStat apsResourceDateStat = list.stream().max(Comparator.comparing(ApsResourceDateStat::getPlanDay)).orElse(null);
- LocalDate maxPlanDay = LocalDate.now().plus(15, ChronoUnit.DAYS);
- if(apsResourceDateStat!=null){
- maxPlanDay=apsResourceDateStat.getPlanDay();
- }
- /*缁勭粐鍑烘棩鏈熻〃澶�*/
- List<String> planDays = new ArrayList<>();
- LocalDate startDay = LocalDate.now();
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
- while (startDay .isBefore( maxPlanDay)){
- planDays.add(startDay.format(formatter));
- startDay=startDay.plus(1,ChronoUnit.DAYS);
- }
- /*鏍规嵁鏃ユ湡琛ㄥご鐨勯『搴忥紝缁勭粐鍑烘瘡涓棩鏈熶笅鐨勭粺璁¢」鐩�*/
- List<ApsResourceDateStat> targetList = new ArrayList<>();
- for (String planDay : planDays) {
- ApsResourceDateStat apsResourceDateStat1 = list.stream()
- .filter(item -> item.getPlanDay().equals(LocalDate.parse(planDay, formatter)))
- .findFirst().orElse(null);
- if(apsResourceDateStat1!=null){
- targetList.add(apsResourceDateStat1);
- }else{
- ApsResourceDateStat apsResourceDateStat2 = new ApsResourceDateStat();
- apsResourceDateStat2.setPlanDay( LocalDate.parse(planDay, formatter));
- targetList.add(apsResourceDateStat2);
+ List<ApsResourceGroup> resourceGroupList = apsResourceGroupMapper.selectApsResourceGroupList(new ApsResourceGroup());
+ if (!list.isEmpty()) {
+ /*姹傚嚭璁″垝鐨勬渶澶ф椂闂达紝娌℃湁 璁剧疆涓哄綋鍓嶆椂闂�+15澶�*/
+ ApsResourceDateStat apsResourceDateStat = list.stream().max(Comparator.comparing(ApsResourceDateStat::getPlanDay)).orElse(null);
+ LocalDate maxPlanDay = LocalDate.now().plus(15, ChronoUnit.DAYS);
+ if (apsResourceDateStat != null) {
+ maxPlanDay = apsResourceDateStat.getPlanDay();
}
+ /*缁勭粐鍑烘棩鏈熻〃澶�*/
+ List<String> planDays = new ArrayList<>();
+ LocalDate startDay = LocalDate.now();
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ while (!startDay.isAfter(maxPlanDay)) {
+ planDays.add(startDay.format(formatter));
+ startDay = startDay.plus(1, ChronoUnit.DAYS);
+ }
+ /*缁勭粐鍑哄垪澶存暟鎹�*/
+
+ /*鍑嗗璧勬簮缁勪俊鎭�*/
+ List<Map<String, List<ApsResourceDateStat>>> targetList = new ArrayList<>();
+ resourceGroupList.forEach(resourceGroup -> {
+ String resourceName=resourceGroup.getResourceGroupName();
+ /*鏍规嵁鏃ユ湡琛ㄥご鐨勯『搴忥紝缁勭粐鍑烘瘡涓棩鏈熶笅鐨勭粺璁¢」鐩�*/
+ Map<String, List<ApsResourceDateStat>> maps = new HashMap<>(Map.of());
+ List<ApsResourceDateStat> currentDaysResouces=new ArrayList<>();
+ for (String planDay : planDays) {
+ /*鏌ユ壘褰撳墠璁″垝鏃ユ湡涓嬬殑鎵�鏈夎祫婧愮粍鐨勬暟鎹�*/
+ Optional<ApsResourceDateStat> first = list.stream()
+ .filter(item ->
+ item.getPlanDay().equals(LocalDate.parse(planDay, formatter))
+ && item.getResourceGroupName().equals(resourceName)
+ ).collect(Collectors.toList()).stream().findFirst();
+ if(first.isPresent()){
+ currentDaysResouces.add(first.get());
+ }
+ else {
+ ApsResourceDateStat empty = new ApsResourceDateStat();
+ empty.setPlanDay(LocalDate.parse(planDay, formatter));
+ empty.setDesignTimes(resourceGroup.getDevicesQuantity().intValue()*resourceGroup.getTheoryHours().intValue());
+ empty.setRequireTimes(0);
+ empty.setResourceName(resourceName);
+ empty.setResourceGroupName(resourceName);
+ empty.setCapacityLoad(BigDecimal.ZERO);
+ currentDaysResouces.add(empty);
+ }
+ };
+ maps.put(resourceName, currentDaysResouces);
+ targetList.add(maps);
+ });
+ result.put("planTitle", planDays);
+ result.put("planTable", targetList);
}
- AjaxResult result=new AjaxResult(200,"鐢熸垚鎴愬姛")
- .put("planTitle",planDays)
- .put("planTable",targetList);
return result;
}
+ @Override
+ public void exportExcel(HttpServletResponse response) {
+ SXSSFWorkbook wb = new SXSSFWorkbook(500);
+ wb.createSheet();
+ wb.setSheetName(0, "闆朵欢缁熻琛�");
+ response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+ response.setCharacterEncoding("utf-8");
+
+ Map<String, CellStyle> styles = createStyles(wb);
+ CellStyle title = styles.get("title");
+ try
+ {
+
+ AjaxResult stat = selectResourceDateStat();
+ List<String> days = (List<String>) stat.get("planTitle");
+ List<Map<String, List<ApsResourceDateStat>>> table= (List<Map<String, List<ApsResourceDateStat>>>) stat.get("planTable");
+ SXSSFSheet sheet = wb.getSheetAt(0);
+ /*濉啓鏃ユ湡鍒� 鍜� 宸ユ椂鍒�*/
+ SXSSFRow rowDay = sheet.createRow(0);
+ SXSSFRow rowTitle = sheet.createRow(1);
+
+ SXSSFCell daytitle = rowDay.createCell(0);
+ daytitle.setCellValue("鏃ユ湡");
+ daytitle.setCellStyle(title);
+ SXSSFCell titleCell = rowTitle.createCell(0);
+ titleCell.setCellValue("璧勬簮缁�");
+ titleCell.setCellStyle(title);
+
+ for (int i = 0; i < days.size(); i++) {
+ SXSSFCell dateCell = rowDay.createCell(i * 3 + 1);
+ SXSSFCell designHoursCell = rowTitle.createCell(i * 3 + 1);
+ SXSSFCell requireHoursCell = rowTitle.createCell(i * 3 + 2);
+ SXSSFCell loadCell = rowTitle.createCell(i * 3 + 3);
+ dateCell.setCellValue(days.get(i));
+ designHoursCell.setCellValue("璁捐宸ユ椂");
+ requireHoursCell.setCellValue("闇�姹傚伐鏃�");
+ loadCell.setCellValue("浜ц兘璐熻嵎");
+ /*set cell style*/
+ dateCell.setCellStyle(title);
+ designHoursCell.setCellStyle(title);
+ requireHoursCell.setCellStyle(title);
+ loadCell.setCellStyle(title);
+
+ /*鍚堝苟鏃ユ湡鍗曞厓鏍�*/
+ sheet.addMergedRegion( new CellRangeAddress(0, 0, i*3+1, i*3+3));
+ }
+ for (int i = 0; i < table.size(); i++) {
+ Map<String, List<ApsResourceDateStat>> resourceList = table.get(i);
+ /*鍒涘缓鏁版嵁琛�*/
+ SXSSFRow dataRow = sheet.createRow(i+2);
+ for( Map.Entry<String, List<ApsResourceDateStat>> entry : resourceList.entrySet()){
+ String resourceName = entry.getKey();
+ List<ApsResourceDateStat> resourceDateStats = entry.getValue();
+ dataRow.createCell(0).setCellValue(resourceName);
+ for (int j = 0; j < resourceDateStats.size(); j++) {
+ ApsResourceDateStat apsResourceDateStat = resourceDateStats.get(j);
+ dataRow.createCell(j*3+1).setCellValue(apsResourceDateStat.getDesignTimes());
+ dataRow.createCell(j*3+2).setCellValue(apsResourceDateStat.getRequireTimes());
+ dataRow.createCell(j*3+3).setCellValue(apsResourceDateStat.getCapacityLoad().doubleValue()+"%");
+ }
+ }
+
+ }
+ wb.write(response.getOutputStream());
+ }
+ catch (Exception e)
+ {
+ log.error("瀵煎嚭Excel寮傚父{}", e.getMessage());
+ }
+ finally
+ {
+ IOUtils.closeQuietly(wb);
+ }
+
+ }
+ private Map<String,CellStyle> createStyles(SXSSFWorkbook wb)
+ {
+ Map<String,CellStyle> styles=new HashMap<>();
+ CellStyle style = wb.createCellStyle();
+ style.setAlignment(HorizontalAlignment.CENTER);
+ style.setVerticalAlignment(VerticalAlignment.CENTER);
+ Font titleFont = wb.createFont();
+ titleFont.setFontName("Arial");
+ titleFont.setFontHeightInPoints((short) 12);
+ titleFont.setBold(true);
+ style.setFont(titleFont);
+ DataFormat dataFormat = wb.createDataFormat();
+ style.setDataFormat(dataFormat.getFormat("@"));
+ styles.put("title", style);
+ return styles;
+ }
+
+
}
--
Gitblit v1.9.3