From 15fe19f4afa3bd506261c4c60e8685d7279f5438 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期五, 08 八月 2025 14:17:36 +0800
Subject: [PATCH] 财务管理模块--报表调整+质量模块调整(展示检验项,生成报告,与不合格进行关联)
---
src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java | 180 ++++++++++++++---
src/main/resources/static/report-template.docx | 0
src/main/java/com/ruoyi/account/service/AccountExpenseService.java | 5
src/main/java/com/ruoyi/quality/controller/QualityTestStandardController.java | 11 +
src/main/resources/mapper/account/AccountExpenseMapper.xml | 14 +
src/main/java/com/ruoyi/quality/service/IQualityInspectService.java | 11
src/main/resources/mapper/account/AccountIncomeMapper.xml | 13 +
src/main/java/com/ruoyi/account/mapper/AccountExpenseMapper.java | 1
src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java | 43 ++-
pom.xml | 9
src/main/java/com/ruoyi/quality/pojo/QualityInspect.java | 5
src/main/java/com/ruoyi/common/utils/HackLoopTableRenderPolicy.java | 154 +++++++++++++++
src/main/java/com/ruoyi/quality/controller/QualityInspectController.java | 33 ++
src/main/java/com/ruoyi/account/mapper/AccountIncomeMapper.java | 1
src/main/java/com/ruoyi/account/dto/AccountDto3.java | 21 +
src/main/java/com/ruoyi/quality/pojo/QualityInspectParam.java | 4
src/main/java/com/ruoyi/account/service/AccountIncomeService.java | 5
src/main/java/com/ruoyi/account/service/impl/AccountIncomeServiceImpl.java | 46 ++--
src/main/java/com/ruoyi/quality/dto/QualityInspectDto.java | 26 ++
19 files changed, 486 insertions(+), 96 deletions(-)
diff --git a/pom.xml b/pom.xml
index 5518a5e..c802315 100644
--- a/pom.xml
+++ b/pom.xml
@@ -224,6 +224,7 @@
<version>${poi.version}</version>
</dependency>
+
<!-- velocity浠g爜鐢熸垚浣跨敤妯℃澘 -->
<dependency>
<groupId>org.apache.velocity</groupId>
@@ -282,6 +283,12 @@
<version>${okhttp.version}</version>
</dependency>
+ <dependency>
+ <groupId>com.deepoove</groupId>
+ <artifactId>poi-tl</artifactId>
+ <version>1.12.2</version>
+ </dependency>
+
</dependencies>
<build>
@@ -322,4 +329,4 @@
</pluginRepository>
</pluginRepositories>
-</project>
\ No newline at end of file
+</project>
diff --git a/src/main/java/com/ruoyi/account/dto/AccountDto3.java b/src/main/java/com/ruoyi/account/dto/AccountDto3.java
index 4792b65..33b4b8e 100644
--- a/src/main/java/com/ruoyi/account/dto/AccountDto3.java
+++ b/src/main/java/com/ruoyi/account/dto/AccountDto3.java
@@ -4,12 +4,10 @@
import java.io.Serializable;
import java.math.BigDecimal;
-import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
/**
- * 璐㈠姟绠$悊--璐㈠姟鎶ヨ〃骞存煡璇�
+ * 璐㈠姟绠$悊--璐㈠姟鎶ヨ〃(绫诲瀷)
*/
@Data
@@ -17,14 +15,23 @@
/**
- * 鏈堜唤
+ * 绫诲瀷
*/
- private List<String> month;
+ private String typeName;
+
/**
- * 鍚勭被鍨嬮噾棰�
+ * 鐧惧垎鍗犳瘮
*/
- private Map<String, List<AccountDto2>> accountType;
+ private BigDecimal proportion;
+
+
+
+ /**
+ * 閲戦
+ */
+ private List<BigDecimal> account;
+
diff --git a/src/main/java/com/ruoyi/account/mapper/AccountExpenseMapper.java b/src/main/java/com/ruoyi/account/mapper/AccountExpenseMapper.java
index b534736..8b6a644 100644
--- a/src/main/java/com/ruoyi/account/mapper/AccountExpenseMapper.java
+++ b/src/main/java/com/ruoyi/account/mapper/AccountExpenseMapper.java
@@ -23,4 +23,5 @@
List<AccountDto2> report(@Param("dateQueryDto") DateQueryDto dateQueryDto);
+ BigDecimal report1(@Param("dateQueryDto") DateQueryDto dateQueryDto, @Param("dictValue") String dictValue);
}
diff --git a/src/main/java/com/ruoyi/account/mapper/AccountIncomeMapper.java b/src/main/java/com/ruoyi/account/mapper/AccountIncomeMapper.java
index 1d4db3d..76a3c55 100644
--- a/src/main/java/com/ruoyi/account/mapper/AccountIncomeMapper.java
+++ b/src/main/java/com/ruoyi/account/mapper/AccountIncomeMapper.java
@@ -22,4 +22,5 @@
List<AccountIncome> accountIncomeExport(@Param("accountIncome") AccountIncome accountIncome);
List<AccountDto2> report(@Param("dateQueryDto") DateQueryDto dateQueryDto);
+ BigDecimal report1(@Param("dateQueryDto") DateQueryDto dateQueryDto, @Param("dictValue") String dictValue);
}
diff --git a/src/main/java/com/ruoyi/account/service/AccountExpenseService.java b/src/main/java/com/ruoyi/account/service/AccountExpenseService.java
index 8f67074..71fd214 100644
--- a/src/main/java/com/ruoyi/account/service/AccountExpenseService.java
+++ b/src/main/java/com/ruoyi/account/service/AccountExpenseService.java
@@ -4,12 +4,13 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.account.dto.AccountDto;
+import com.ruoyi.account.dto.AccountDto2;
import com.ruoyi.account.dto.AccountDto3;
import com.ruoyi.account.pojo.AccountExpense;
-import com.ruoyi.account.pojo.AccountIncome;
import com.ruoyi.dto.DateQueryDto;
import javax.servlet.http.HttpServletResponse;
+import java.util.List;
public interface AccountExpenseService extends IService<AccountExpense> {
@@ -19,5 +20,5 @@
AccountDto report(DateQueryDto dateQueryDto);
- AccountDto3 reportExpense();
+ List<AccountDto3> reportExpense();
}
diff --git a/src/main/java/com/ruoyi/account/service/AccountIncomeService.java b/src/main/java/com/ruoyi/account/service/AccountIncomeService.java
index 8c128a8..fc30cda 100644
--- a/src/main/java/com/ruoyi/account/service/AccountIncomeService.java
+++ b/src/main/java/com/ruoyi/account/service/AccountIncomeService.java
@@ -3,11 +3,12 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.account.dto.AccountDto2;
import com.ruoyi.account.dto.AccountDto3;
-import com.ruoyi.account.pojo.AccountFile;
import com.ruoyi.account.pojo.AccountIncome;
import javax.servlet.http.HttpServletResponse;
+import java.util.List;
public interface AccountIncomeService extends IService<AccountIncome> {
@@ -16,5 +17,5 @@
void accountIncomeExport(HttpServletResponse response, AccountIncome accountIncome);
- AccountDto3 reportIncome();
+ List<AccountDto3> reportIncome();
}
diff --git a/src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java b/src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java
index 7871fb4..37c2f7c 100644
--- a/src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java
+++ b/src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java
@@ -9,14 +9,14 @@
import com.ruoyi.account.dto.AccountDto2;
import com.ruoyi.account.dto.AccountDto3;
import com.ruoyi.account.mapper.AccountExpenseMapper;
-import com.ruoyi.account.mapper.AccountFileMapper;
import com.ruoyi.account.mapper.AccountIncomeMapper;
import com.ruoyi.account.pojo.AccountExpense;
import com.ruoyi.account.pojo.AccountIncome;
import com.ruoyi.account.service.AccountExpenseService;
-import com.ruoyi.account.service.AccountIncomeService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.dto.DateQueryDto;
+import com.ruoyi.project.system.domain.SysDictData;
+import com.ruoyi.project.system.mapper.SysDictDataMapper;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
@@ -36,6 +36,8 @@
private AccountExpenseMapper accountExpenseMapper;
private AccountIncomeMapper accountIncomeMapper;
+
+ private SysDictDataMapper sysDictDataMapper;
//鍒嗛〉鏌ヨ
@@ -88,26 +90,29 @@
//璐㈠姟鎶ヨ〃骞存煡璇�
@Override
- public AccountDto3 reportExpense() {
- AccountDto3 accountDto3 = new AccountDto3();
+ public List<AccountDto3> reportExpense() {
+ List<AccountDto3> accountDto3s = new ArrayList<>();
+ //鍏堟煡璇㈡敹鍏ョ被鍨嬫湁鍝簺
+ List<SysDictData> incomeTypes = sysDictDataMapper.selectDictDataByType("expense_types");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
int currentYear = LocalDate.now().getYear(); // 鑾峰彇褰撳墠骞翠唤锛堝2025锛�
- List<String> months = new ArrayList<>();
- Map<String, List<AccountDto2>> map = new HashMap<>();
- for (int i = 1; i <= 12; i++) {
- months.add(i + "鏈�");
- // 褰撴湀绗竴澶╋細骞翠唤涓哄綋鍓嶅勾锛屾湀浠戒负i锛屾棩鏈熶负1
- LocalDate firstDay = LocalDate.of(currentYear, i, 1);
- DateQueryDto dateQueryDto = new DateQueryDto();
- dateQueryDto.setEntryDateStart(firstDay.format(formatter));
- // 褰撴湀鏈�鍚庝竴澶╋細绗竴澶╃殑鏈堜唤鐨勬渶鍚庝竴澶�
- dateQueryDto.setEntryDateEnd(firstDay.plusMonths(1).minusDays(1).format(formatter));
- List<AccountDto2> report = accountExpenseMapper.report(dateQueryDto);
- map.put(i + "鏈�",report);
+ for (SysDictData incomeType : incomeTypes) {
+ AccountDto3 accountDto3 = new AccountDto3();
+ accountDto3.setTypeName(incomeType.getDictLabel());//绫诲瀷
+ List<BigDecimal> account=new ArrayList<>();
+ for (int i = 1; i <= 12; i++) {
+ // 褰撴湀绗竴澶╋細骞翠唤涓哄綋鍓嶅勾锛屾湀浠戒负i锛屾棩鏈熶负1
+ LocalDate firstDay = LocalDate.of(currentYear, i, 1);
+ DateQueryDto dateQueryDto = new DateQueryDto();
+ dateQueryDto.setEntryDateStart(firstDay.format(formatter));
+ // 褰撴湀鏈�鍚庝竴澶╋細绗竴澶╃殑鏈堜唤鐨勬渶鍚庝竴澶�
+ dateQueryDto.setEntryDateEnd(firstDay.plusMonths(1).minusDays(1).format(formatter));
+ account.add(accountExpenseMapper.report1(dateQueryDto,incomeType.getDictValue()));
+ }
+ accountDto3.setAccount(account);//绫诲瀷
+ accountDto3s.add(accountDto3);
}
- accountDto3.setMonth(months);
- accountDto3.setAccountType(map);
- return accountDto3;
+ return accountDto3s;
}
diff --git a/src/main/java/com/ruoyi/account/service/impl/AccountIncomeServiceImpl.java b/src/main/java/com/ruoyi/account/service/impl/AccountIncomeServiceImpl.java
index 0439103..66fb6e4 100644
--- a/src/main/java/com/ruoyi/account/service/impl/AccountIncomeServiceImpl.java
+++ b/src/main/java/com/ruoyi/account/service/impl/AccountIncomeServiceImpl.java
@@ -6,19 +6,18 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.account.dto.AccountDto2;
import com.ruoyi.account.dto.AccountDto3;
-import com.ruoyi.account.mapper.AccountFileMapper;
import com.ruoyi.account.mapper.AccountIncomeMapper;
-import com.ruoyi.account.pojo.AccountFile;
import com.ruoyi.account.pojo.AccountIncome;
-import com.ruoyi.account.service.AccountFileService;
import com.ruoyi.account.service.AccountIncomeService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.dto.DateQueryDto;
-import com.ruoyi.quality.pojo.QualityInspect;
+import com.ruoyi.project.system.domain.SysDictData;
+import com.ruoyi.project.system.mapper.SysDictDataMapper;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
@@ -31,6 +30,8 @@
public class AccountIncomeServiceImpl extends ServiceImpl<AccountIncomeMapper, AccountIncome> implements AccountIncomeService {
private AccountIncomeMapper accountIncomeMapper;
+
+ private SysDictDataMapper sysDictDataMapper;
//鍒嗛〉鏌ヨ
@@ -49,25 +50,28 @@
//璐㈠姟鎶ヨ〃骞存煡璇�
@Override
- public AccountDto3 reportIncome() {
- AccountDto3 accountDto3 = new AccountDto3();
+ public List<AccountDto3> reportIncome() {
+ List<AccountDto3> accountDto3s = new ArrayList<>();
+ //鍏堟煡璇㈡敹鍏ョ被鍨嬫湁鍝簺
+ List<SysDictData> incomeTypes = sysDictDataMapper.selectDictDataByType("income_types");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
int currentYear = LocalDate.now().getYear(); // 鑾峰彇褰撳墠骞翠唤锛堝2025锛�
- List<String> months = new ArrayList<>();
- Map<String, List<AccountDto2>> map = new HashMap<>();
- for (int i = 1; i <= 12; i++) {
- months.add(i + "鏈�");
- // 褰撴湀绗竴澶╋細骞翠唤涓哄綋鍓嶅勾锛屾湀浠戒负i锛屾棩鏈熶负1
- LocalDate firstDay = LocalDate.of(currentYear, i, 1);
- DateQueryDto dateQueryDto = new DateQueryDto();
- dateQueryDto.setEntryDateStart(firstDay.format(formatter));
- // 褰撴湀鏈�鍚庝竴澶╋細绗竴澶╃殑鏈堜唤鐨勬渶鍚庝竴澶�
- dateQueryDto.setEntryDateEnd(firstDay.plusMonths(1).minusDays(1).format(formatter));
- List<AccountDto2> report = accountIncomeMapper.report(dateQueryDto);
- map.put(i + "鏈�",report);
+ for (SysDictData incomeType : incomeTypes) {
+ AccountDto3 accountDto3 = new AccountDto3();
+ accountDto3.setTypeName(incomeType.getDictLabel());//绫诲瀷
+ List<BigDecimal> account=new ArrayList<>();
+ for (int i = 1; i <= 12; i++) {
+ // 褰撴湀绗竴澶╋細骞翠唤涓哄綋鍓嶅勾锛屾湀浠戒负i锛屾棩鏈熶负1
+ LocalDate firstDay = LocalDate.of(currentYear, i, 1);
+ DateQueryDto dateQueryDto = new DateQueryDto();
+ dateQueryDto.setEntryDateStart(firstDay.format(formatter));
+ // 褰撴湀鏈�鍚庝竴澶╋細绗竴澶╃殑鏈堜唤鐨勬渶鍚庝竴澶�
+ dateQueryDto.setEntryDateEnd(firstDay.plusMonths(1).minusDays(1).format(formatter));
+ account.add(accountIncomeMapper.report1(dateQueryDto,incomeType.getDictValue()));
+ }
+ accountDto3.setAccount(account);//绫诲瀷
+ accountDto3s.add(accountDto3);
}
- accountDto3.setMonth(months);
- accountDto3.setAccountType(map);
- return accountDto3;
+ return accountDto3s;
}
}
diff --git a/src/main/java/com/ruoyi/common/utils/HackLoopTableRenderPolicy.java b/src/main/java/com/ruoyi/common/utils/HackLoopTableRenderPolicy.java
new file mode 100644
index 0000000..4bb0daa
--- /dev/null
+++ b/src/main/java/com/ruoyi/common/utils/HackLoopTableRenderPolicy.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright 2014-2020 Sayi
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.ruoyi.common.utils;
+
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.exception.RenderException;
+import com.deepoove.poi.policy.RenderPolicy;
+import com.deepoove.poi.render.compute.RenderDataCompute;
+import com.deepoove.poi.render.processor.DocumentProcessor;
+import com.deepoove.poi.resolver.TemplateResolver;
+import com.deepoove.poi.template.ElementTemplate;
+import com.deepoove.poi.template.MetaTemplate;
+import com.deepoove.poi.template.run.RunTemplate;
+import com.deepoove.poi.util.ReflectionUtils;
+import com.deepoove.poi.util.TableTools;
+import org.apache.poi.xwpf.usermodel.*;
+import org.apache.xmlbeans.XmlCursor;
+import org.apache.xmlbeans.XmlObject;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVMerge;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
+
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Hack for loop table row
+ *
+ * @author
+ *
+ */
+public class HackLoopTableRenderPolicy implements RenderPolicy {
+
+ private String prefix;
+ private String suffix;
+ private boolean onSameLine;
+
+ public HackLoopTableRenderPolicy() {
+ this(false);
+ }
+
+ public HackLoopTableRenderPolicy(boolean onSameLine) {
+ this("[", "]", onSameLine);
+ }
+
+ public HackLoopTableRenderPolicy(String prefix, String suffix) {
+ this(prefix, suffix, false);
+ }
+
+ public HackLoopTableRenderPolicy(String prefix, String suffix, boolean onSameLine) {
+ this.prefix = prefix;
+ this.suffix = suffix;
+ this.onSameLine = onSameLine;
+ }
+
+ @Override
+ public void render(ElementTemplate eleTemplate, Object data, XWPFTemplate template) {
+ RunTemplate runTemplate = (RunTemplate) eleTemplate;
+ XWPFRun run = runTemplate.getRun();
+ try {
+ if (!TableTools.isInsideTable(run)) {
+ throw new IllegalStateException(
+ "The template tag " + runTemplate.getSource() + " must be inside a table");
+ }
+ XWPFTableCell tagCell = (XWPFTableCell) ((XWPFParagraph) run.getParent()).getBody();
+ XWPFTable table = tagCell.getTableRow().getTable();
+ run.setText("", 0);
+
+ int templateRowIndex = getTemplateRowIndex(tagCell);
+ if (null != data && data instanceof Iterable) {
+ Iterator<?> iterator = ((Iterable<?>) data).iterator();
+ XWPFTableRow templateRow = table.getRow(templateRowIndex);
+ int insertPosition = templateRowIndex;
+
+ TemplateResolver resolver = new TemplateResolver(template.getConfig().copy(prefix, suffix));
+ boolean firstFlag = true;
+ while (iterator.hasNext()) {
+ insertPosition = templateRowIndex++;
+ XWPFTableRow nextRow = table.insertNewTableRow(insertPosition);
+ setTableRow(table, templateRow, insertPosition);
+
+ // double set row
+ XmlCursor newCursor = templateRow.getCtRow().newCursor();
+ newCursor.toPrevSibling();
+ XmlObject object = newCursor.getObject();
+ nextRow = new XWPFTableRow((CTRow) object, table);
+ if (!firstFlag) {
+ // update VMerge cells for non-first row
+ List<XWPFTableCell> tableCells = nextRow.getTableCells();
+ for (XWPFTableCell cell : tableCells) {
+ CTTcPr tcPr = TableTools.getTcPr(cell);
+ CTVMerge vMerge = tcPr.getVMerge();
+ if (null == vMerge) continue;
+ if (STMerge.RESTART == vMerge.getVal()) {
+ vMerge.setVal(STMerge.CONTINUE);
+ }
+ }
+ } else {
+ firstFlag = false;
+ }
+ setTableRow(table, nextRow, insertPosition);
+
+ RenderDataCompute dataCompute = template.getConfig().getRenderDataComputeFactory()
+ .newCompute(iterator.next());
+ List<XWPFTableCell> cells = nextRow.getTableCells();
+ cells.forEach(cell -> {
+ List<MetaTemplate> templates = resolver.resolveBodyElements(cell.getBodyElements());
+ new DocumentProcessor(template, resolver, dataCompute).process(templates);
+ });
+ }
+ }
+
+ table.removeRow(templateRowIndex);
+ afterloop(table, data);
+ } catch (Exception e) {
+ throw new RenderException("HackLoopTable for " + eleTemplate + "error: " + e.getMessage(), e);
+ }
+ }
+
+ private int getTemplateRowIndex(XWPFTableCell tagCell) {
+ XWPFTableRow tagRow = tagCell.getTableRow();
+ return onSameLine ? getRowIndex(tagRow) : (getRowIndex(tagRow) + 1);
+ }
+
+ protected void afterloop(XWPFTable table, Object data) {
+ }
+
+ @SuppressWarnings("unchecked")
+ private void setTableRow(XWPFTable table, XWPFTableRow templateRow, int pos) {
+ List<XWPFTableRow> rows = (List<XWPFTableRow>) ReflectionUtils.getValue("tableRows", table);
+ rows.set(pos, templateRow);
+ table.getCTTbl().setTrArray(pos, templateRow.getCtRow());
+ }
+
+ private int getRowIndex(XWPFTableRow row) {
+ List<XWPFTableRow> rows = row.getTable().getRows();
+ return rows.indexOf(row);
+ }
+
+}
diff --git a/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java b/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java
index 717044e..0daeba8 100644
--- a/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java
+++ b/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.quality.dto.QualityInspectDto;
import com.ruoyi.quality.pojo.QualityInspect;
import com.ruoyi.quality.pojo.QualityInspectFile;
import com.ruoyi.quality.pojo.QualityInspectParam;
@@ -37,12 +38,12 @@
/**
* 鏂板
- * @param qualityInspect
+ * @param qualityInspectDto
* @return
*/
@PostMapping("/add")
- public AjaxResult add(@RequestBody QualityInspect qualityInspect) {
- return AjaxResult.success(qualityInspectService.add(qualityInspect));
+ public AjaxResult add(@RequestBody QualityInspectDto qualityInspectDto) {
+ return AjaxResult.success(qualityInspectService.add(qualityInspectDto));
}
/**
@@ -72,17 +73,17 @@
*/
@GetMapping("/{id}")
public AjaxResult QualityInspectDetail(@PathVariable("id") Integer id) {
- return AjaxResult.success(qualityInspectService.getById(id));
+ return AjaxResult.success(qualityInspectService.getDetailById(id));
}
/**
* 淇敼
- * @param qualityInspect
+ * @param qualityInspectDto
* @return
*/
@PostMapping("/update")
- public AjaxResult update(@RequestBody QualityInspect qualityInspect) {
- return AjaxResult.success(qualityInspectService.updateQualityInspect(qualityInspect));
+ public AjaxResult update(@RequestBody QualityInspectDto qualityInspectDto) {
+ return AjaxResult.success(qualityInspectService.updateQualityInspect(qualityInspectDto));
}
/**
@@ -106,5 +107,23 @@
qualityInspectService.qualityInspectExport(response, qualityInspect);
}
+ /**
+ * 鎻愪氦
+ * @param id
+ * @return
+ */
+ @PostMapping("/submit")
+ public AjaxResult submit(Integer id) {
+ return AjaxResult.success(qualityInspectService.submit(id));
+ }
+ /**
+ * 涓嬭浇
+ * @param response
+ * @param id
+ */
+ @PostMapping("/down")
+ public void down(HttpServletResponse response,Integer id) {
+ qualityInspectService.down(response, id);
+ }
}
diff --git a/src/main/java/com/ruoyi/quality/controller/QualityTestStandardController.java b/src/main/java/com/ruoyi/quality/controller/QualityTestStandardController.java
index 47701e2..5a47d92 100644
--- a/src/main/java/com/ruoyi/quality/controller/QualityTestStandardController.java
+++ b/src/main/java/com/ruoyi/quality/controller/QualityTestStandardController.java
@@ -1,5 +1,6 @@
package com.ruoyi.quality.controller;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.quality.pojo.QualityTestStandard;
@@ -89,5 +90,15 @@
qualityTestStandardService.qualityTestStandardListPageExport(response, qualityTestStandard);
}
+ /**
+ * 璇︽儏
+ * @param productId
+ * @return
+ */
+ @GetMapping("/{productId}")
+ public AjaxResult QualityInspectDetail(@PathVariable("productId") Integer productId) {
+ return AjaxResult.success(qualityTestStandardService.list(Wrappers.<QualityTestStandard>lambdaQuery().eq(QualityTestStandard::getProductId,productId)));
+ }
+
}
diff --git a/src/main/java/com/ruoyi/quality/dto/QualityInspectDto.java b/src/main/java/com/ruoyi/quality/dto/QualityInspectDto.java
new file mode 100644
index 0000000..9bd4ca9
--- /dev/null
+++ b/src/main/java/com/ruoyi/quality/dto/QualityInspectDto.java
@@ -0,0 +1,26 @@
+package com.ruoyi.quality.dto;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.dto.DateQueryDto;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.quality.pojo.QualityInspect;
+import com.ruoyi.quality.pojo.QualityInspectParam;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+//璐ㄩ噺妫�楠屾柊澧炵紪杈戝弬鏁�
+@Data
+public class QualityInspectDto extends QualityInspect implements Serializable {
+
+ //妫�楠岄」鐩�
+ private List<QualityInspectParam> qualityInspectParams;
+
+}
diff --git a/src/main/java/com/ruoyi/quality/pojo/QualityInspect.java b/src/main/java/com/ruoyi/quality/pojo/QualityInspect.java
index 5aa0219..e1b2e6a 100644
--- a/src/main/java/com/ruoyi/quality/pojo/QualityInspect.java
+++ b/src/main/java/com/ruoyi/quality/pojo/QualityInspect.java
@@ -133,5 +133,10 @@
@TableField(fill = FieldFill.INSERT)
private Long tenantId;
+ /**
+ * 绫诲埆(0:鏈彁浜�;1:宸叉彁浜�)
+ */
+ private Integer inspectState;
+
}
diff --git a/src/main/java/com/ruoyi/quality/pojo/QualityInspectParam.java b/src/main/java/com/ruoyi/quality/pojo/QualityInspectParam.java
index 6d7bc97..91092d2 100644
--- a/src/main/java/com/ruoyi/quality/pojo/QualityInspectParam.java
+++ b/src/main/java/com/ruoyi/quality/pojo/QualityInspectParam.java
@@ -84,5 +84,9 @@
@TableField(fill = FieldFill.INSERT)
private Long tenantId;
+ // 瀵煎嚭浣跨敤
+ @TableField(select = false, exist = false)
+ private Integer index;
+
}
diff --git a/src/main/java/com/ruoyi/quality/service/IQualityInspectService.java b/src/main/java/com/ruoyi/quality/service/IQualityInspectService.java
index 73396a4..1dcba08 100644
--- a/src/main/java/com/ruoyi/quality/service/IQualityInspectService.java
+++ b/src/main/java/com/ruoyi/quality/service/IQualityInspectService.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.quality.dto.QualityInspectDto;
import com.ruoyi.quality.pojo.QualityInspect;
import com.ruoyi.staff.pojo.StaffJoinLeaveRecord;
import com.ruoyi.staff.pojo.StaffOnJob;
@@ -13,11 +14,17 @@
public interface IQualityInspectService extends IService<QualityInspect> {
- int add(QualityInspect qualityInspect);
+ int add(QualityInspectDto qualityInspectDto);
- int updateQualityInspect(QualityInspect qualityInspect);
+ int updateQualityInspect(QualityInspectDto qualityInspectDto);
IPage<QualityInspect> qualityInspectListPage(Page page, QualityInspect qualityInspect);
void qualityInspectExport(HttpServletResponse response, QualityInspect qualityInspect);
+
+ QualityInspectDto getDetailById(Integer id);
+
+ int submit(Integer id);
+
+ void down(HttpServletResponse response, Integer id);
}
diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
index 22055fc..b2633a8 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -2,17 +2,25 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.HackLoopTableRenderPolicy;
import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.quality.dto.QualityInspectDto;
import com.ruoyi.quality.mapper.QualityInspectMapper;
import com.ruoyi.quality.mapper.QualityInspectParamMapper;
import com.ruoyi.quality.mapper.QualityTestStandardMapper;
+import com.ruoyi.quality.mapper.QualityUnqualifiedMapper;
import com.ruoyi.quality.pojo.QualityInspect;
import com.ruoyi.quality.pojo.QualityInspectParam;
import com.ruoyi.quality.pojo.QualityTestStandard;
+import com.ruoyi.quality.pojo.QualityUnqualified;
import com.ruoyi.quality.service.IQualityInspectParamService;
import com.ruoyi.quality.service.IQualityInspectService;
import com.ruoyi.staff.mapper.StaffJoinLeaveRecordMapper;
@@ -26,6 +34,10 @@
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
@@ -40,48 +52,144 @@
private QualityTestStandardMapper qualityTestStandardMapper;
+ private QualityUnqualifiedMapper qualityUnqualifiedMapper;
+
@Override
- public int add(QualityInspect qualityInspect) {
- String[] ignoreProperties = {"id"};//鎺掗櫎id灞炴��
- //鏍规嵁浜у搧id鏌ヨ鎸囨爣缁存姢瀵瑰簲鏂板妫�楠屽弬鏁�
- List<QualityTestStandard> qualityTestStandards = qualityTestStandardMapper.selectList(Wrappers.<QualityTestStandard>lambdaQuery()
- .eq(QualityTestStandard::getProductId, qualityInspect.getProductId()));
- if (qualityTestStandards.size()>0){
- qualityInspectMapper.insert(qualityInspect);
- List<QualityInspectParam> qualityInspectParams = qualityTestStandards.stream().map(qualityTestStandard -> {
- QualityInspectParam qualityInspectParam = new QualityInspectParam();
- BeanUtils.copyProperties(qualityTestStandard, qualityInspectParam,ignoreProperties);
- qualityInspectParam.setInspectId(qualityInspect.getId());
- return qualityInspectParam;
- }).collect(Collectors.toList());
- qualityInspectParamService.saveBatch(qualityInspectParams);
- }else{
- throw new BaseException("璇ヤ骇鍝佹病鏈夌淮鎶ゆ楠屾寚鏍�,璇锋鏌�!!!!!!!!");
+ public int add(QualityInspectDto qualityInspectDto) {
+ QualityInspect qualityInspect = new QualityInspect();
+ BeanUtils.copyProperties(qualityInspectDto,qualityInspect);
+ qualityInspect.setInspectState(0);//榛樿鏈彁浜�
+ qualityInspectMapper.insert(qualityInspect);
+ for (QualityInspectParam qualityInspectParam : qualityInspectDto.getQualityInspectParams()) {
+ qualityInspectParam.setInspectId(qualityInspect.getId());
}
+ qualityInspectParamService.saveBatch(qualityInspectDto.getQualityInspectParams());
+// String[] ignoreProperties = {"id"};//鎺掗櫎id灞炴��
+// //鏍规嵁浜у搧id鏌ヨ鎸囨爣缁存姢瀵瑰簲鏂板妫�楠屽弬鏁�
+// List<QualityTestStandard> qualityTestStandards = qualityTestStandardMapper.selectList(Wrappers.<QualityTestStandard>lambdaQuery()
+// .eq(QualityTestStandard::getProductId, qualityInspect.getProductId()));
+// if (qualityTestStandards.size()>0){
+//
+// List<QualityInspectParam> qualityInspectParams = qualityTestStandards.stream().map(qualityTestStandard -> {
+// QualityInspectParam qualityInspectParam = new QualityInspectParam();
+// BeanUtils.copyProperties(qualityTestStandard, qualityInspectParam,ignoreProperties);
+// qualityInspectParam.setInspectId(qualityInspect.getId());
+// return qualityInspectParam;
+// }).collect(Collectors.toList());
+// qualityInspectParamService.saveBatch(qualityInspectParams);
+// }else{
+// throw new BaseException("璇ヤ骇鍝佹病鏈夌淮鎶ゆ楠屾寚鏍�,璇锋鏌�!!!!!!!!");
+// }
return 0;
}
@Override
- public int updateQualityInspect(QualityInspect qualityInspect) {
- String[] ignoreProperties = {"id"};//鎺掗櫎id灞炴��
- //鍏堝垹闄ゆ墍鏈夋楠屽弬鏁板啀鏂板
- qualityInspectParamService.remove(Wrappers.<QualityInspectParam>lambdaQuery()
- .eq(QualityInspectParam::getInspectId,qualityInspect.getId()));
- //鏍规嵁浜у搧id鏌ヨ鎸囨爣缁存姢瀵瑰簲鏂板妫�楠屽弬鏁�
- List<QualityTestStandard> qualityTestStandards = qualityTestStandardMapper.selectList(Wrappers.<QualityTestStandard>lambdaQuery()
- .eq(QualityTestStandard::getProductId, qualityInspect.getProductId()));
- if (qualityTestStandards.size()>0){
- List<QualityInspectParam> qualityInspectParams = qualityTestStandards.stream().map(qualityTestStandard -> {
- QualityInspectParam qualityInspectParam = new QualityInspectParam();
- BeanUtils.copyProperties(qualityTestStandard, qualityInspectParam,ignoreProperties);
- qualityInspectParam.setInspectId(qualityInspect.getId());
- return qualityInspectParam;
- }).collect(Collectors.toList());
- qualityInspectParamService.saveBatch(qualityInspectParams);
- }else{
- throw new BaseException("璇ヤ骇鍝佹病鏈夌淮鎶ゆ楠屾寚鏍�,璇锋鏌�!!!!!!!!");
+ public QualityInspectDto getDetailById(Integer id) {
+ QualityInspect qualityInspect = qualityInspectMapper.selectById(id);
+ List<QualityInspectParam> qualityInspectParams = qualityInspectParamService.list(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, id));
+ QualityInspectDto qualityInspectDto = new QualityInspectDto();
+ BeanUtils.copyProperties(qualityInspect,qualityInspectDto);
+ qualityInspectDto.setQualityInspectParams(qualityInspectParams);
+ return qualityInspectDto;
+ }
+
+ //鎻愪氦
+ @Override
+ public int submit(Integer id) {
+ QualityInspect qualityInspect = qualityInspectMapper.selectById(id);
+ /*鍒ゆ柇涓嶅悎鏍�*/
+ if (ObjectUtils.isNotNull(qualityInspect.getCheckResult()) && qualityInspect.getCheckResult().equals("涓嶅悎鏍�")){
+ QualityUnqualified qualityUnqualified = new QualityUnqualified();
+ BeanUtils.copyProperties(qualityInspect,qualityUnqualified);
+ qualityUnqualified.setInspectState(0);//寰呭鐞�
+ List<QualityInspectParam> inspectParams = qualityInspectParamService.list(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, id));
+ String text = inspectParams.stream().map(QualityInspectParam::getParameterItem).collect(Collectors.joining(","));
+ qualityUnqualified.setDefectivePhenomena(text+"杩欎簺鎸囨爣涓瓨鍦ㄤ笉鍚堟牸");//涓嶅悎鏍肩幇璞�
+ qualityUnqualifiedMapper.insert(qualityUnqualified);
}
- return qualityInspectMapper.updateById(qualityInspect);
+ qualityInspect.setInspectState(1);//宸叉彁浜�
+ return qualityInspectMapper.updateById(qualityInspect);
+ }
+
+ /*鐢熸垚妫�楠屾姤鍛�*/
+ @Override
+ public void down(HttpServletResponse response, Integer id) {
+ QualityInspect inspect = qualityInspectMapper.selectById(id);
+ String inspectType="";
+ switch (inspect.getInspectType()){
+ case 0:
+ inspectType="鍘熸潗鏂欐楠�";
+ break;
+ case 1:
+ inspectType="杩囩▼妫�楠�";
+ break;
+ case 2:
+ inspectType="鍑哄巶妫�楠�";
+ break;
+ }
+ List<QualityInspectParam> paramList = qualityInspectParamService.list(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, id));
+ int index = 1;
+ for (QualityInspectParam detail : paramList) {
+ detail.setIndex(index);
+ index++;
+ }
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/report-template.docx");
+ Configure configure = Configure.builder()
+ .bind("paramList", new HackLoopTableRenderPolicy())
+ .build();
+ String finalInspectType = inspectType;
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("inspect", inspect);
+ put("inspectType", finalInspectType);
+ put("paramList", paramList);
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ "妫�楠屾姤鍛�", "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ inputStream.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+
+ @Override
+ public int updateQualityInspect(QualityInspectDto qualityInspectDto) {
+ if (qualityInspectDto.getQualityInspectParams().size()>0) {
+ qualityInspectParamService.updateBatchById(qualityInspectDto.getQualityInspectParams());
+ }
+ QualityInspect qualityInspect = new QualityInspect();
+ BeanUtils.copyProperties(qualityInspectDto,qualityInspect);
+ return qualityInspectMapper.updateById(qualityInspect);
+
+// String[] ignoreProperties = {"id"};//鎺掗櫎id灞炴��
+// //鍏堝垹闄ゆ墍鏈夋楠屽弬鏁板啀鏂板
+// qualityInspectParamService.remove(Wrappers.<QualityInspectParam>lambdaQuery()
+// .eq(QualityInspectParam::getInspectId,qualityInspect.getId()));
+// //鏍规嵁浜у搧id鏌ヨ鎸囨爣缁存姢瀵瑰簲鏂板妫�楠屽弬鏁�
+// List<QualityTestStandard> qualityTestStandards = qualityTestStandardMapper.selectList(Wrappers.<QualityTestStandard>lambdaQuery()
+// .eq(QualityTestStandard::getProductId, qualityInspect.getProductId()));
+// if (qualityTestStandards.size()>0){
+// List<QualityInspectParam> qualityInspectParams = qualityTestStandards.stream().map(qualityTestStandard -> {
+// QualityInspectParam qualityInspectParam = new QualityInspectParam();
+// BeanUtils.copyProperties(qualityTestStandard, qualityInspectParam,ignoreProperties);
+// qualityInspectParam.setInspectId(qualityInspect.getId());
+// return qualityInspectParam;
+// }).collect(Collectors.toList());
+// qualityInspectParamService.saveBatch(qualityInspectParams);
+// }else{
+// throw new BaseException("璇ヤ骇鍝佹病鏈夌淮鎶ゆ楠屾寚鏍�,璇锋鏌�!!!!!!!!");
+// }
+// return qualityInspectMapper.updateById(qualityInspect);
}
@Override
@@ -106,4 +214,6 @@
}
}
+
+
}
diff --git a/src/main/resources/mapper/account/AccountExpenseMapper.xml b/src/main/resources/mapper/account/AccountExpenseMapper.xml
index 909f372..fff6020 100644
--- a/src/main/resources/mapper/account/AccountExpenseMapper.xml
+++ b/src/main/resources/mapper/account/AccountExpenseMapper.xml
@@ -56,4 +56,18 @@
group by expense_type
</select>
+ <select id="report1" resultType="java.math.BigDecimal">
+ SELECT
+ sum(expense_money) account
+ FROM account_expense ai
+ where
+ expense_type=#{dictValue}
+ <if test="dateQueryDto.entryDateStart != null and dateQueryDto.entryDateStart != '' ">
+ AND expense_date >= DATE_FORMAT(#{dateQueryDto.entryDateStart},'%Y-%m-%d')
+ </if>
+ <if test="dateQueryDto.entryDateEnd != null and dateQueryDto.entryDateEnd != '' ">
+ AND expense_date <= DATE_FORMAT(#{dateQueryDto.entryDateEnd},'%Y-%m-%d')
+ </if>
+ </select>
+
</mapper>
diff --git a/src/main/resources/mapper/account/AccountIncomeMapper.xml b/src/main/resources/mapper/account/AccountIncomeMapper.xml
index bfb6d73..1cb49b9 100644
--- a/src/main/resources/mapper/account/AccountIncomeMapper.xml
+++ b/src/main/resources/mapper/account/AccountIncomeMapper.xml
@@ -56,4 +56,17 @@
</if>
group by income_type
</select>
+ <select id="report1" resultType="java.math.BigDecimal">
+ SELECT
+ sum(income_money) account
+ FROM account_income ai
+ where
+ income_type=#{dictValue}
+ <if test="dateQueryDto.entryDateStart != null and dateQueryDto.entryDateStart != '' ">
+ AND income_date >= DATE_FORMAT(#{dateQueryDto.entryDateStart},'%Y-%m-%d')
+ </if>
+ <if test="dateQueryDto.entryDateEnd != null and dateQueryDto.entryDateEnd != '' ">
+ AND income_date <= DATE_FORMAT(#{dateQueryDto.entryDateEnd},'%Y-%m-%d')
+ </if>
+ </select>
</mapper>
diff --git a/src/main/resources/static/report-template.docx b/src/main/resources/static/report-template.docx
new file mode 100644
index 0000000..0bc9746
--- /dev/null
+++ b/src/main/resources/static/report-template.docx
Binary files differ
--
Gitblit v1.9.3