pom.xml
@@ -224,6 +224,7 @@ <version>${poi.version}</version> </dependency> <!-- velocity代ç çæä½¿ç¨æ¨¡æ¿ --> <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> </project> 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; 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); } 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); } 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(); } 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(); } 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; } 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; } } 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); } } 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); } } 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))); } } 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; } 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; } 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; } 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); } 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 @@ } } } 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> 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> src/main/resources/static/report-template.docxBinary files differ