| src/main/java/com/ruoyi/approve/service/impl/ApprovalInstanceServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/sales/vo/SalesLedgerExportVo.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/mapper/sales/SalesLedgerMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/ruoyi/approve/service/impl/ApprovalInstanceServiceImpl.java
@@ -184,6 +184,10 @@ if (approvalInstanceDto == null || approvalInstanceDto.getId() == null) { return false; } ApprovalInstance existing = this.getById(approvalInstanceDto.getId()); if (existing == null) { return false; } // 夿æ¯å¦ææ£å¨è¿è¡ç审æ¹ä»»å¡ï¼æåä¸å è®¸ä¿®æ¹ long pendingTaskCount = approvalTaskService.count( Wrappers.<ApprovalTask>lambdaQuery() @@ -194,10 +198,48 @@ if (pendingTaskCount > 0) { throw new ServiceException("该审æ¹åææ£å¨è¿è¡ç审æ¹ä»»å¡ï¼ä¸å 许修æ¹"); } // æªéè¿ä¸å½å没æå¾ å¤çèç¹ï¼è¯´ææµç¨å·²ç»æ¢ï¼å·²é©³åï¼ï¼ // ä¿®æ¹ä¿åå³è§ä¸ºéæ°æäº¤ï¼æµç¨ä»ç¬¬ä¸çº§éæ°å¼å§ boolean resubmit = !"APPROVED".equals(existing.getStatus()) && approveProcessConfigNodeUtils.getCurrentNode(existing.getId()) == null; if (resubmit) { // 软å 餿§çèç¹ä¸ä»»å¡ï¼å®¡æ¹è®°å½ä¿çï¼æ¶é´çº¿å å ï¼ LambdaUpdateWrapper<ApprovalInstanceNode> nodeUpdateWrapper = Wrappers.lambdaUpdate(); nodeUpdateWrapper.eq(ApprovalInstanceNode::getInstanceId, approvalInstanceDto.getId()) .eq(ApprovalInstanceNode::getDeleted, 0) .set(ApprovalInstanceNode::getDeleted, (byte) 1); approvalInstanceNodeService.update(nodeUpdateWrapper); LambdaUpdateWrapper<ApprovalTask> taskUpdateWrapper = Wrappers.lambdaUpdate(); taskUpdateWrapper.eq(ApprovalTask::getInstanceId, approvalInstanceDto.getId()) .eq(ApprovalTask::getDeleted, 0) .set(ApprovalTask::getDeleted, (byte) 1); approvalTaskService.update(taskUpdateWrapper); approvalInstanceDto.setStatus("PENDING"); approvalInstanceDto.setCurrentLevel(1); approvalInstanceDto.setFinishTime(null); approvalInstanceDto.setInstanceNo(existing.getInstanceNo()); approvalInstanceDto.setApplicantId(existing.getApplicantId()); approvalInstanceDto.setApplicantName(existing.getApplicantName()); } boolean updated = this.updateById(approvalInstanceDto); if (!updated) { return false; } if (resubmit) { // updateById å¿½ç¥ nullï¼finishTime éç¨æ¾å¼ set æè½æ¸ 空 this.update( Wrappers.<ApprovalInstance>lambdaUpdate() .eq(ApprovalInstance::getId, approvalInstanceDto.getId()) .set(ApprovalInstance::getFinishTime, null) ); // é建第ä¸çº§èç¹ä¸å®¡æ¹ä»»å¡ï¼å¹¶è¿½å 䏿¡å起审æ¹è®°å½ approveProcessConfigNodeUtils.createCurrentNodeAndTasks(approvalInstanceDto, true); sendApproveNotice(approvalInstanceDto, approveProcessConfigNodeUtils.getCurrentPendingTasks(approvalInstanceDto.getId())); } fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.APPROVAL_INSTANCE, approvalInstanceDto.getId(), approvalInstanceDto.getStorageBlobDTOs()); return true; } src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -15,8 +15,11 @@ import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.sales.dto.SalesLedgerDto; import com.ruoyi.sales.pojo.SalesLedger; import com.ruoyi.sales.pojo.SalesLedgerProduct; import com.ruoyi.sales.service.ICommonFileService; import com.ruoyi.sales.service.ISalesLedgerProductService; import com.ruoyi.sales.service.ISalesLedgerService; import com.ruoyi.sales.vo.SalesLedgerExportVo; import com.ruoyi.sales.vo.SalesLedgerVo; import io.swagger.annotations.ApiParam; import io.swagger.v3.oas.annotations.Operation; @@ -52,6 +55,7 @@ private ISalesLedgerService salesLedgerService; private ICommonFileService commonFileService; private final ISalesLedgerProductService salesLedgerProductService; private final FileUtil fileUtil; /** @@ -127,20 +131,35 @@ } /** * 导åºéå®å°è´¦å表 * 导åºéå®å°è´¦å表ã * ä¼ äº ids åªå¯¼å¾éçå°è´¦ï¼å¦åææç´¢æ¡ä»¶å¯¼åºå ¨é¨ï¼å¯¼åºå 容为ç¶é¡¹ï¼å°è´¦ï¼ä¸å项ï¼äº§åï¼åè¡ã */ @Log(title = "éå®å°è´¦", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, SalesLedgerDto salesLedgerDto) { Page page = new Page(-1,-1); IPage<SalesLedgerVo> salesLedgerIPage = listPage(page, salesLedgerDto); ExcelUtil<SalesLedgerVo> util = new ExcelUtil<SalesLedgerVo>(SalesLedgerVo.class); if(salesLedgerIPage == null){ util.exportExcel(response, new ArrayList<>(), "éå®å°è´¦æ°æ®"); return; Page page = new Page(-1, -1); IPage<SalesLedgerVo> salesLedgerIPage = salesLedgerService.selectSalesLedgerListPage(page, salesLedgerDto); List<SalesLedgerExportVo> rows = new ArrayList<>(); if (salesLedgerIPage != null && !CollectionUtils.isEmpty(salesLedgerIPage.getRecords())) { for (SalesLedgerVo ledger : salesLedgerIPage.getRecords()) { SalesLedgerExportVo row = SalesLedgerExportVo.fromLedger(ledger); SalesLedgerProduct productQuery = new SalesLedgerProduct(); productQuery.setSalesLedgerId(ledger.getId()); productQuery.setType(1); List<SalesLedgerProduct> products = salesLedgerProductService.selectSalesLedgerProductList(productQuery); if (!CollectionUtils.isEmpty(products)) { for (SalesLedgerProduct product : products) { row.addProduct(product); } } rows.add(row); } } List<SalesLedgerVo> list = salesLedgerIPage.getRecords(); util.exportExcel(response, list, "éå®å°è´¦æ°æ®"); ExcelUtil<SalesLedgerExportVo> util = new ExcelUtil<SalesLedgerExportVo>(SalesLedgerExportVo.class); util.exportExcel(response, rows, "éå®å°è´¦æ°æ®"); } /** src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
@@ -16,6 +16,10 @@ @Data public class SalesLedgerDto { private Long id; /** * å¯¼åºæ¶æå¾éçå°è´¦IDè¿æ»¤ï¼ä¸ºç©ºåææç´¢æ¡ä»¶å¯¼åºå ¨é¨ */ private List<Long> ids; private String salesContractNo; private String customerContractNo; private String projectName; src/main/java/com/ruoyi/sales/vo/SalesLedgerExportVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,114 @@ package com.ruoyi.sales.vo; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import com.ruoyi.sales.pojo.SalesLedger; import com.ruoyi.sales.pojo.SalesLedgerProduct; import lombok.Data; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * éå®å°è´¦å¯¼åºå¯¹è±¡ï¼ä¸»ä»è¡¨æ ¼ï¼ã * <p> * å°è´¦å段å纵ååå¹¶å± ä¸ï¼å³ä¾§åè¡å±å¼è¯¥å°è´¦ä¸ç产åæç»ï¼é¿å åºç°å¤§ç空ç½åå æ ¼ã * products å¿ é¡»æ¯æåä¸ä¸ªåæ®µï¼æ 产åçå°è´¦ä¸ä¼è¾åºäº§ååï¼è¥å ¶åé¢è¿æå段ä¼å¯¼è´åéä½ã */ @Data public class SalesLedgerExportVo { @Excel(name = "éå®ååå·", needMerge = true) private String salesContractNo; @Excel(name = "项ç®åç§°", needMerge = true) private String projectName; @Excel(name = "å½å ¥æ¥æ", width = 30, dateFormat = "yyyy-MM-dd", needMerge = true) private Date entryDate; @Excel(name = "ä¸å¡å", needMerge = true) private String salesman; @Excel(name = "客æ·åç§°", needMerge = true) private String customerName; @Excel(name = "å½å ¥äºº", needMerge = true) private String entryPersonName; @Excel(name = "ååéé¢", scale = 2, needMerge = true) private BigDecimal contractAmount; @Excel(name = "夿³¨", needMerge = true) private String remarks; @Excel(name = "产åæç»") private List<Item> products = new ArrayList<>(); @Data public static class Item { @Excel(name = "产å大类") private String productCategory; @Excel(name = "è§æ ¼åå·") private String specificationModel; @Excel(name = "åä½") private String unit; @Excel(name = "æ°é", cellType = Excel.ColumnType.NUMERIC) private BigDecimal quantity; @Excel(name = "å¾ åè´§æ°é", cellType = Excel.ColumnType.NUMERIC) private BigDecimal noQuantity; @Excel(name = "åè´§ç¶æ") private String shippingStatus; @Excel(name = "ç¨ç(%)", cellType = Excel.ColumnType.NUMERIC) private BigDecimal taxRate; @Excel(name = "å«ç¨åä»·(å )", scale = 2) private BigDecimal taxInclusiveUnitPrice; @Excel(name = "å«ç¨æ»ä»·(å )", scale = 2) private BigDecimal taxInclusiveTotalPrice; @Excel(name = "ä¸å«ç¨æ»ä»·(å )", scale = 2) private BigDecimal taxExclusiveTotalPrice; public static Item fromProduct(SalesLedgerProduct product) { Item item = new Item(); item.setProductCategory(product.getProductCategory()); item.setSpecificationModel(product.getSpecificationModel()); item.setUnit(product.getUnit()); item.setQuantity(product.getQuantity()); item.setNoQuantity(product.getNoQuantity()); item.setShippingStatus(product.getShippingStatus()); item.setTaxRate(product.getTaxRate()); item.setTaxInclusiveUnitPrice(product.getTaxInclusiveUnitPrice()); item.setTaxInclusiveTotalPrice(product.getTaxInclusiveTotalPrice()); item.setTaxExclusiveTotalPrice(product.getTaxExclusiveTotalPrice()); return item; } } public static SalesLedgerExportVo fromLedger(SalesLedger ledger) { SalesLedgerExportVo vo = new SalesLedgerExportVo(); vo.setSalesContractNo(ledger.getSalesContractNo()); vo.setProjectName(ledger.getProjectName()); vo.setEntryDate(ledger.getEntryDate()); vo.setSalesman(ledger.getSalesman()); vo.setCustomerName(ledger.getCustomerName()); vo.setEntryPersonName(ledger.getEntryPersonName()); vo.setContractAmount(ledger.getContractAmount()); vo.setRemarks(ledger.getRemarks()); return vo; } public void addProduct(SalesLedgerProduct product) { this.products.add(Item.fromProduct(product)); } } src/main/resources/mapper/sales/SalesLedgerMapper.xml
@@ -95,6 +95,12 @@ <if test="salesLedgerDto.entryDateEnd != null and salesLedgerDto.entryDateEnd != '' "> AND T1.entry_date <= DATE_FORMAT(#{salesLedgerDto.entryDateEnd},'%Y-%m-%d') </if> <if test="salesLedgerDto.ids != null and salesLedgerDto.ids.size() > 0"> AND T1.id IN <foreach collection="salesLedgerDto.ids" item="ledgerId" open="(" separator="," close=")"> #{ledgerId} </foreach> </if> </where> order by T1.entry_date desc </select>