From bd74f59a411383e32eb17a69cc5a7ada1571023e Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期二, 02 六月 2026 12:06:18 +0800
Subject: [PATCH] Merge branch 'dev_New_pro' into dev_pro_山西_晋和园
---
src/main/java/com/ruoyi/approve/service/impl/ApprovalTemplateServiceImpl.java | 28 +++++++++
src/main/java/com/ruoyi/approve/bean/vo/ApprovalInstanceVo.java | 9 +++
src/main/java/com/ruoyi/approve/bean/vo/ApprovalTemplateVo.java | 3 +
src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java | 4
src/main/java/com/ruoyi/approve/bean/dto/ApprovalTemplateDto.java | 3 +
src/main/java/com/ruoyi/framework/config/ApplicationConfig.java | 94 +++++++++++++++++++++----------
src/main/java/com/ruoyi/approve/service/impl/ApprovalInstanceServiceImpl.java | 24 ++++++++
src/main/resources/application.yml | 3 +
src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java | 3
9 files changed, 138 insertions(+), 33 deletions(-)
diff --git a/src/main/java/com/ruoyi/approve/bean/dto/ApprovalTemplateDto.java b/src/main/java/com/ruoyi/approve/bean/dto/ApprovalTemplateDto.java
index 35952a5..668bc8c 100644
--- a/src/main/java/com/ruoyi/approve/bean/dto/ApprovalTemplateDto.java
+++ b/src/main/java/com/ruoyi/approve/bean/dto/ApprovalTemplateDto.java
@@ -1,6 +1,7 @@
package com.ruoyi.approve.bean.dto;
import com.ruoyi.approve.pojo.ApprovalTemplate;
+import com.ruoyi.basic.dto.StorageBlobDTO;
import lombok.Data;
import java.util.List;
@@ -9,4 +10,6 @@
public class ApprovalTemplateDto extends ApprovalTemplate {
private List<ApprovalTemplateNodeDto> nodes;
+
+ private List<StorageBlobDTO> storageBlobDTOs;
}
diff --git a/src/main/java/com/ruoyi/approve/bean/vo/ApprovalInstanceVo.java b/src/main/java/com/ruoyi/approve/bean/vo/ApprovalInstanceVo.java
index 552ed0a..41ad4e4 100644
--- a/src/main/java/com/ruoyi/approve/bean/vo/ApprovalInstanceVo.java
+++ b/src/main/java/com/ruoyi/approve/bean/vo/ApprovalInstanceVo.java
@@ -24,5 +24,14 @@
@Schema(description = "涓氬姟鍚嶇О")
private String businessName;
+ @Schema(description = "鎶ヤ环鍗曞彿")
+ private String quotationNo;
+
+ @Schema(description = "閲囪喘鍗曞彿")
+ private String purchaseContractNumber;
+
+ @Schema(description = "鍙戣揣鍗曞彿")
+ private String shippingNo;
+
private List<StorageBlobVO> storageBlobVOList;
}
diff --git a/src/main/java/com/ruoyi/approve/bean/vo/ApprovalTemplateVo.java b/src/main/java/com/ruoyi/approve/bean/vo/ApprovalTemplateVo.java
index 2793293..84a6904 100644
--- a/src/main/java/com/ruoyi/approve/bean/vo/ApprovalTemplateVo.java
+++ b/src/main/java/com/ruoyi/approve/bean/vo/ApprovalTemplateVo.java
@@ -1,6 +1,7 @@
package com.ruoyi.approve.bean.vo;
import com.ruoyi.approve.pojo.ApprovalTemplate;
+import com.ruoyi.basic.dto.StorageBlobVO;
import lombok.Data;
import java.util.List;
@@ -11,4 +12,6 @@
private List<ApprovalTemplateNodeVo> nodes;
private String createdUserName;
+
+ private List<StorageBlobVO> storageBlobDTOs;
}
diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApprovalInstanceServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApprovalInstanceServiceImpl.java
index 5c5e540..5da3984 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApprovalInstanceServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApprovalInstanceServiceImpl.java
@@ -105,6 +105,30 @@
}
records.forEach(vo -> {
vo.setBusinessName(TypeEnums.getLabelByValue(vo.getBusinessType()));
+
+ // 鏍规嵁涓氬姟绫诲瀷鏌ヨ瀵瑰簲鐨勫崟鍙�
+ if (vo.getBusinessType() != null && vo.getBusinessId() != null) {
+ if (TypeEnums.PURCHASE_APPROVAL.getCode().equals(vo.getBusinessType())) {
+ // 閲囪喘瀹℃壒 - 鏌ヨ閲囪喘鍗曞彿
+ PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(vo.getBusinessId());
+ System.out.println("涓氬姟绫诲瀷锛�" + purchaseLedger.getPurchaseContractNumber());
+ if (purchaseLedger != null) {
+ vo.setPurchaseContractNumber(purchaseLedger.getPurchaseContractNumber());
+ }
+ } else if (TypeEnums.QUOTATION_APPROVAL.getCode().equals(vo.getBusinessType())) {
+ // 鎶ヤ环瀹℃壒 - 鏌ヨ鎶ヤ环鍗曞彿
+ SalesQuotation salesQuotation = salesQuotationMapper.selectById(vo.getBusinessId());
+ if (salesQuotation != null) {
+ vo.setQuotationNo(salesQuotation.getQuotationNo());
+ }
+ } else if (TypeEnums.SHIPPING_APPROVAL.getCode().equals(vo.getBusinessType())) {
+ // 鍙戣揣瀹℃壒 - 鏌ヨ鍙戣揣鍗曞彿
+ ShippingInfo shippingInfo = shippingInfoMapper.selectById(vo.getBusinessId());
+ if (shippingInfo != null) {
+ vo.setShippingNo(shippingInfo.getShippingNo());
+ }
+ }
+ }
});
Long currentUserId = SecurityUtils.getUserId();
diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApprovalTemplateServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApprovalTemplateServiceImpl.java
index af5a774..a0b07d5 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApprovalTemplateServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApprovalTemplateServiceImpl.java
@@ -18,10 +18,15 @@
import com.ruoyi.approve.pojo.ApprovalTemplateNodeApprover;
import com.ruoyi.approve.service.ApprovalTemplateNodeService;
import com.ruoyi.approve.service.ApprovalTemplateService;
+import com.ruoyi.basic.dto.StorageBlobDTO;
+import com.ruoyi.basic.enums.ApplicationTypeEnum;
+import com.ruoyi.basic.enums.RecordTypeEnum;
+import com.ruoyi.basic.utils.FileUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
import java.util.Collections;
import java.util.Comparator;
@@ -43,6 +48,7 @@
private final ApprovalTemplateMapper approvalTemplateMapper;
private final ApprovalTemplateNodeService approvalTemplateNodeService;
private final ApprovalTemplateNodeApproverMapper approvalTemplateNodeApproverMapper;
+ private final FileUtil fileUtil;
@Override
public IPage<ApprovalTemplateVo> listPage(Page<ApprovalTemplateVo> page, ApprovalTemplateDto approvalTemplateDto) {
@@ -63,6 +69,11 @@
new LambdaQueryWrapper<ApprovalTemplateNodeApprover>()
.eq(ApprovalTemplateNodeApprover::getTemplateId, approvalTemplateDto.getId())
);
+ // 淇濆瓨闄勪欢
+ List<StorageBlobDTO> storageBlobDTOs = approvalTemplateDto.getStorageBlobDTOs();
+ if (!CollectionUtils.isEmpty(storageBlobDTOs)) {
+ fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.APPROVAL_TEMPLATE, approvalTemplateDto.getId(), storageBlobDTOs);
+ }
return approvalTemplateNodeService.saveApprovalTemplateNode(
approvalTemplateDto.getId(),
approvalTemplateDto.getNodes()
@@ -80,6 +91,16 @@
new LambdaQueryWrapper<ApprovalTemplateNodeApprover>()
.eq(ApprovalTemplateNodeApprover::getTemplateId, approvalTemplateDto.getId())
);
+ // 淇濆瓨闄勪欢锛堜細鍏堝垹闄ゆ棫闄勪欢锛�
+ List<StorageBlobDTO> storageBlobDTOs = approvalTemplateDto.getStorageBlobDTOs();
+ if (!CollectionUtils.isEmpty(storageBlobDTOs)) {
+ fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.APPROVAL_TEMPLATE, approvalTemplateDto.getId(), storageBlobDTOs);
+ } else {
+ // 濡傛灉鍓嶇浼犵┖鏁扮粍锛屽垹闄ゆ棫闄勪欢
+ fileUtil.deleteStorageAttachmentsByApplicationAndRecordTypeAndRecordId(
+ ApplicationTypeEnum.FILE, RecordTypeEnum.APPROVAL_TEMPLATE, approvalTemplateDto.getId()
+ );
+ }
return approvalTemplateNodeService.saveApprovalTemplateNode(
approvalTemplateDto.getId(),
approvalTemplateDto.getNodes()
@@ -107,6 +128,7 @@
new LambdaQueryWrapper<ApprovalTemplate>()
.eq(ApprovalTemplate::getDeleted, 0)
.eq(ApprovalTemplate::getEnabled, 1)
+ .notIn(ApprovalTemplate::getBusinessType, List.of(5L, 6L, 7L))
.orderByDesc(ApprovalTemplate::getTemplateType)
.orderByDesc(ApprovalTemplate::getId)
);
@@ -220,6 +242,12 @@
.collect(Collectors.toList());
templateVo.setNodes(nodeVos);
+ // 鏌ヨ闄勪欢
+ templateVo.setStorageBlobDTOs(
+ fileUtil.getStorageBlobVOsByApplicationAndRecordTypeAndRecordId(
+ ApplicationTypeEnum.FILE, RecordTypeEnum.APPROVAL_TEMPLATE, template.getId()
+ )
+ );
return templateVo;
}
diff --git a/src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java b/src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java
index 506a9d8..b0c01bb 100644
--- a/src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java
+++ b/src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java
@@ -201,7 +201,8 @@
ENTERPRISE_NEWS("enterprise_news"),
APPROVAL_INSTANCE("approval_instance"),
ACCOUNT_INVOICE_APPLICATION("account_invoice_application"),
- ACCOUNT_PURCHASE_INVOICE("account_purchase_invoice");
+ ACCOUNT_PURCHASE_INVOICE("account_purchase_invoice"),
+ APPROVAL_TEMPLATE("approval_template");
private final String type;
RecordTypeEnum(String type) { this.type = type; }
diff --git a/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java b/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java
index 66a00e7..2cc50ba 100644
--- a/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java
+++ b/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java
@@ -1,30 +1,64 @@
-package com.ruoyi.framework.config;
-
-import java.util.TimeZone;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.EnableAspectJAutoProxy;
-
-/**
- * 绋嬪簭娉ㄨВ閰嶇疆
- *
- * @author ruoyi
- */
-@Configuration
-// 琛ㄧず閫氳繃aop妗嗘灦鏆撮湶璇ヤ唬鐞嗗璞�,AopContext鑳藉璁块棶
-@EnableAspectJAutoProxy(exposeProxy = true)
-// 鎸囧畾瑕佹壂鎻忕殑Mapper绫荤殑鍖呯殑璺緞
-@MapperScan("com.ruoyi.**.mapper")
-public class ApplicationConfig
-{
- /**
- * 鏃跺尯閰嶇疆
- */
- @Bean
- public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization()
- {
- return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault());
- }
-}
+package com.ruoyi.framework.config;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.TimeZone;
+
+/**
+ * 绋嬪簭娉ㄨВ閰嶇疆
+ *
+ * @author ruoyi
+ */
+@Configuration
+// 琛ㄧず閫氳繃aop妗嗘灦鏆撮湶璇ヤ唬鐞嗗璞�,AopContext鑳藉璁块棶
+@EnableAspectJAutoProxy(exposeProxy = true)
+// 鎸囧畾瑕佹壂鎻忕殑Mapper绫荤殑鍖呯殑璺緞
+@MapperScan("com.ruoyi.**.mapper")
+public class ApplicationConfig {
+ /**
+ * 鏃跺尯閰嶇疆
+ */
+ @Bean
+ public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() {
+ return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault());
+ }
+
+ @Bean
+ public ObjectMapper objectMapper() {
+ ObjectMapper mapper = new ObjectMapper();
+ // 鍏ㄥ眬蹇界暐鏈煡瀛楁
+ mapper.configure(com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+ JavaTimeModule module = new JavaTimeModule();
+ // LocalDateTime锛氭敮鎸� yyyy-MM-dd HH:mm:ss
+ DateTimeFormatter dateTimeFormatter =
+ DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ module.addDeserializer(LocalDateTime.class,
+ new LocalDateTimeDeserializer(dateTimeFormatter));
+ module.addSerializer(LocalDateTime.class,
+ new LocalDateTimeSerializer(dateTimeFormatter));
+ // LocalDate锛氭敮鎸� yyyy-MM-dd
+ DateTimeFormatter dateFormatter =
+ DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ module.addDeserializer(LocalDate.class,
+ new LocalDateDeserializer(dateFormatter));
+ module.addSerializer(LocalDate.class,
+ new LocalDateSerializer(dateFormatter));
+ mapper.registerModule(module);
+ mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+ return mapper;
+ }
+}
diff --git a/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
index 15b56ea..4e6ff58 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
@@ -180,8 +180,8 @@
boolean save = this.add(req);
// 鍙戣揣瀹℃壒
ApprovalInstanceDto approvalInstance = new ApprovalInstanceDto();
- approvalInstance.setTemplateId(approvalTemplateMapper.selectOne(new LambdaQueryWrapper<ApprovalTemplate>().eq(ApprovalTemplate::getBusinessType,6L).orderByDesc(ApprovalTemplate::getId).last("LIMIT 1")).getId());
- approvalInstance.setTemplateName(approvalTemplateMapper.selectOne(new LambdaQueryWrapper<ApprovalTemplate>().eq(ApprovalTemplate::getBusinessType,6L).orderByDesc(ApprovalTemplate::getId).last("LIMIT 1")).getTemplateName());
+ approvalInstance.setTemplateId(approvalTemplateMapper.selectOne(new LambdaQueryWrapper<ApprovalTemplate>().eq(ApprovalTemplate::getBusinessType,7L).orderByDesc(ApprovalTemplate::getId).last("LIMIT 1")).getId());
+ approvalInstance.setTemplateName(approvalTemplateMapper.selectOne(new LambdaQueryWrapper<ApprovalTemplate>().eq(ApprovalTemplate::getBusinessType,7L).orderByDesc(ApprovalTemplate::getId).last("LIMIT 1")).getTemplateName());
approvalInstance.setBusinessId(req.getId());
approvalInstance.setBusinessType(7L);
approvalInstance.setCurrentLevel(1);
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 91c9a5a..93f19f3 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,5 +1,8 @@
# Spring閰嶇疆
spring:
+ jackson:
+ date-format: yyyy-MM-dd HH:mm:ss
+ time-zone: GMT+8
main:
allow-circular-references: true
profiles:
--
Gitblit v1.9.3