Browse Source

2025年2月18日17:15:42

纪新园 10 months ago
parent
commit
d80bb63959

+ 10 - 7
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java

@@ -400,7 +400,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		if (select == null) {
 			throw new SecurityException("未查到相关数据,操作失败");
 		}
-		if (ObjectUtils.isNotNull(delivery.getVersion())){
+		if (ObjectUtils.isNotNull(delivery.getVersion())) {
 			Integer version = delivery.getVersion();
 			if (!select.getVersion().equals(version)) {
 				throw new RuntimeException("数据已被修改,请返回列表重新操作");
@@ -590,7 +590,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		if (select == null) {
 			throw new SecurityException("未查到相关数据,操作失败");
 		}
-		if (ObjectUtils.isNotNull(delivery.getVersion())){
+		if (ObjectUtils.isNotNull(delivery.getVersion())) {
 			Integer version = delivery.getVersion();
 			if (!select.getVersion().equals(version)) {
 				throw new RuntimeException("数据已被修改,请返回列表重新操作");
@@ -754,7 +754,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		if (select == null) {
 			throw new SecurityException("未查到相关数据,操作失败");
 		}
-		if (ObjectUtils.isNotNull(delivery.getVersion())){
+		if (ObjectUtils.isNotNull(delivery.getVersion())) {
 			Integer version = delivery.getVersion();
 			if (!select.getVersion().equals(version)) {
 				throw new RuntimeException("数据已被修改,请返回列表重新操作");
@@ -1303,18 +1303,21 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 				JdTenant jdTenant = getJdTenant(accountName, select.getTenantId());
 				if (jdTenant != null) {
 					//测试账套-工厂发货生成凭证
+					DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+					LocalDateTime now = LocalDateTime.now();
 					try {
-						System.out.println("生成凭证数据:" + finalBrand + " / " + accountName + " / " + finalCorpName + " / " + finalCorpNumber + " / " + finalWareHouse + " / " + finalAcoount + " / " + orderNo);
+						System.err.println("生成凭证数据:" + finalBrand + " / " + accountName + " / " + finalCorpName + " / " + finalCorpNumber + " / " + finalWareHouse + " / " + finalAcoount + " / " + orderNo);
 						Delivery details = this.testTakeGoodsSaveVoucher(finalBrand, select, accountName, finalCorpName, finalCorpNumber, finalWareHouse, finalAcoount, orderNo);
 						if (ObjectUtils.isNotNull(details)) {
+							System.err.println("=============生成凭证成功后-" + details.getVoucherNo() + "==============");
+							System.err.println("=============生成凭证成功时间-" + now.format(formatter) + "==============");
 							delivery.setVoucherStatus("1");
 							delivery.setVoucherNo(details.getVoucherNo());
 							delivery.setVoucherId(details.getVoucherId());
 							baseMapper.updateById(delivery);
 						}
 					} catch (RuntimeException exception) {
-						LocalDateTime now = LocalDateTime.now();
-						DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+						System.err.println("=============生成凭证失败-" + now.format(formatter) + "==============");
 						String formatted = now.format(formatter);
 						Message sendMessage = new Message();
 						sendMessage.setParameter(select.getId() + "");
@@ -1434,7 +1437,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		if (select == null) {
 			throw new SecurityException("未查到相关数据,操作失败");
 		}
-		if (ObjectUtils.isNotNull(delivery.getVersion())){
+		if (ObjectUtils.isNotNull(delivery.getVersion())) {
 			Integer version = delivery.getVersion();
 			if (!select.getVersion().equals(version)) {
 				throw new RuntimeException("数据已被修改,请返回列表重新操作");

+ 113 - 0
blade-service/blade-deliver-goods/src/main/resources/log/logback-dev.xml

@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds">
+    <!-- 自定义参数监听 -->
+    <contextListener class="org.springblade.core.log.listener.LoggerStartupListener"/>
+    <springProperty scope="context" name="springAppName" source="spring.application.name"/>
+
+    <!-- 彩色日志依赖的渲染类 -->
+    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
+    <conversionRule conversionWord="wex"
+                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
+    <conversionRule conversionWord="wEx"
+                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
+    <!-- 彩色日志格式 -->
+    <property name="CONSOLE_LOG_PATTERN"
+              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
+    <!-- 控制台输出 -->
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+            <charset>utf8</charset>
+        </encoder>
+    </appender>
+
+    <if condition='property("ELK_MODE").toUpperCase().contains("TRUE")'>
+        <then>
+            <!-- 推送日志至elk -->
+            <appender name="STDOUT_LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
+                <destination>${DESTINATION}</destination>
+                <!-- 日志输出编码 -->
+                <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
+                    <providers>
+                        <timestamp>
+                            <timeZone>UTC</timeZone>
+                        </timestamp>
+                        <pattern>
+                            <pattern>
+                                {
+                                "traceId": "%X{traceId}",
+                                "requestId": "%X{requestId}",
+                                "accountId": "%X{accountId}",
+                                "tenantId": "%X{tenantId}",
+                                "logLevel": "%level",
+                                "serviceName": "${springAppName:-SpringApp}",
+                                "pid": "${PID:-}",
+                                "thread": "%thread",
+                                "class": "%logger{40}",
+                                "line":"%L",
+                                "message": "%message"
+                                }
+                            </pattern>
+                        </pattern>
+                        <mdc/>
+                        <stackTrace/>
+                    </providers>
+                </encoder>
+            </appender>
+        </then>
+    </if>
+
+    <!-- 日志输出级别 -->
+    <root level="ERROR">
+        <appender-ref ref="STDOUT"/>
+        <appender-ref ref="${STDOUT_APPENDER}"/>
+    </root>
+
+    <logger name="net.sf.ehcache" level="ERROR"/>
+    <logger name="druid.sql" level="ERROR"/>
+
+
+    <!-- MyBatis log configure -->
+    <logger name="com.apache.ibatis" level="ERROR"/>
+    <logger name="org.mybatis.spring" level="ERROR"/>
+    <logger name="java.sql.Connection" level="ERROR"/>
+    <logger name="java.sql.Statement" level="ERROR"/>
+    <logger name="java.sql.PreparedStatement" level="ERROR"/>
+
+    <!-- 减少部分debug日志 -->
+    <logger name="druid.sql" level="ERROR"/>
+    <logger name="org.apache.shiro" level="ERROR"/>
+    <logger name="org.mybatis.spring" level="ERROR"/>
+    <logger name="org.springframework" level="ERROR"/>
+    <logger name="org.springframework.context" level="ERROR"/>
+    <logger name="org.springframework.beans" level="ERROR"/>
+    <logger name="com.baomidou.mybatisplus" level="ERROR"/>
+    <logger name="org.apache.ibatis.io" level="ERROR"/>
+    <logger name="org.apache.velocity" level="ERROR"/>
+    <logger name="org.eclipse.jetty" level="ERROR"/>
+    <logger name="io.undertow" level="ERROR"/>
+    <logger name="org.xnio.nio" level="ERROR"/>
+    <logger name="org.thymeleaf" level="ERROR"/>
+    <logger name="springfox.documentation" level="ERROR"/>
+    <logger name="org.hibernate.validator" level="ERROR"/>
+    <logger name="com.netflix.loadbalancer" level="ERROR"/>
+    <logger name="com.netflix.hystrix" level="ERROR"/>
+    <logger name="com.netflix.zuul" level="ERROR"/>
+    <logger name="de.codecentric" level="ERROR"/>
+    <!-- cache ERROR -->
+    <logger name="net.sf.ehcache" level="ERROR"/>
+    <logger name="org.springframework.cache" level="ERROR"/>
+    <!-- cloud -->
+    <logger name="org.apache.http" level="ERROR"/>
+    <logger name="com.netflix.discovery" level="ERROR"/>
+    <logger name="com.netflix.eureka" level="ERROR"/>
+    <!-- 业务日志 -->
+    <Logger name="org.springblade" level="ERROR"/>
+    <Logger name="org.springblade.core.tenant" level="ERROR"/>
+    <Logger name="org.springblade.core.version" level="ERROR"/>
+
+    <!-- 减少nacos日志 -->
+    <logger name="com.alibaba.nacos" level="ERROR"/>
+
+
+</configuration>

+ 151 - 0
blade-service/blade-deliver-goods/src/main/resources/log/logback-prod.xml

@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds">
+    <!-- 自定义参数监听 -->
+    <contextListener class="org.springblade.core.log.listener.LoggerStartupListener"/>
+    <springProperty scope="context" name="springAppName" source="spring.application.name"/>
+
+    <!-- 彩色日志依赖的渲染类 -->
+    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
+    <conversionRule conversionWord="wex"
+                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
+    <conversionRule conversionWord="wEx"
+                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
+    <!-- 彩色日志格式 -->
+    <property name="CONSOLE_LOG_PATTERN"
+              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
+    <!-- 控制台输出 -->
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+            <charset>utf8</charset>
+        </encoder>
+    </appender>
+
+    <!-- 生成日志文件 -->
+    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件输出的文件名 -->
+            <FileNamePattern>target/blade/log/info-%d{yyyy-MM-dd}.log</FileNamePattern>
+        </rollingPolicy>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>%n%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] [%logger{50}] %n%-5level: %msg%n</pattern>
+        </encoder>
+        <!-- 打印日志级别 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>INFO</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 生成日志文件 -->
+    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件输出的文件名 -->
+            <FileNamePattern>target/blade/log/error-%d{yyyy-MM-dd}.log</FileNamePattern>
+        </rollingPolicy>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>%n%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] [%logger{50}] %n%-5level: %msg%n</pattern>
+        </encoder>
+        <!-- 打印日志级别 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>ERROR</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <if condition='property("ELK_MODE").toUpperCase().contains("TRUE")'>
+        <then>
+            <!-- 推送日志至elk -->
+            <appender name="INFO_LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
+                <destination>${DESTINATION}</destination>
+                <!-- 日志输出编码 -->
+                <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
+                    <providers>
+                        <timestamp>
+                            <timeZone>UTC</timeZone>
+                        </timestamp>
+                        <pattern>
+                            <pattern>
+                                {
+                                "traceId": "%X{traceId}",
+                                "requestId": "%X{requestId}",
+                                "accountId": "%X{accountId}",
+                                "tenantId": "%X{tenantId}",
+                                "logLevel": "%level",
+                                "serviceName": "${springAppName:-SpringApp}",
+                                "pid": "${PID:-}",
+                                "thread": "%thread",
+                                "class": "%logger{40}",
+                                "line":"%L",
+                                "message": "%message"
+                                }
+                            </pattern>
+                        </pattern>
+                        <mdc/>
+                        <stackTrace/>
+                    </providers>
+                </encoder>
+                <!-- 打印日志级别 -->
+                <filter class="ch.qos.logback.classic.filter.LevelFilter">
+                    <level>INFO</level>
+                    <onMatch>ACCEPT</onMatch>
+                    <onMismatch>DENY</onMismatch>
+                </filter>
+            </appender>
+
+            <!-- 推送日志至elk -->
+            <appender name="ERROR_LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
+                <destination>${DESTINATION}</destination>
+                <!-- 日志输出编码 -->
+                <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
+                    <providers>
+                        <timestamp>
+                            <timeZone>UTC</timeZone>
+                        </timestamp>
+                        <pattern>
+                            <pattern>
+                                {
+                                "traceId": "%X{traceId}",
+                                "requestId": "%X{requestId}",
+                                "accountId": "%X{accountId}",
+                                "tenantId": "%X{tenantId}",
+                                "logLevel": "%level",
+                                "serviceName": "${springAppName:-SpringApp}",
+                                "pid": "${PID:-}",
+                                "thread": "%thread",
+                                "class": "%logger{40}",
+                                "line":"%L",
+                                "message": "%message"
+                                }
+                            </pattern>
+                        </pattern>
+                        <mdc/>
+                        <stackTrace/>
+                    </providers>
+                </encoder>
+                <!-- 打印日志级别 -->
+                <filter class="ch.qos.logback.classic.filter.LevelFilter">
+                    <level>ERROR</level>
+                    <onMatch>ACCEPT</onMatch>
+                    <onMismatch>DENY</onMismatch>
+                </filter>
+            </appender>
+        </then>
+    </if>
+
+    <!-- 日志输出级别 -->
+    <root level="ERROR">
+        <appender-ref ref="STDOUT"/>
+        <appender-ref ref="${INFO_APPENDER}"/>
+        <appender-ref ref="${ERROR_APPENDER}"/>
+    </root>
+
+    <logger name="net.sf.ehcache" level="ERROR"/>
+    <logger name="druid.sql" level="ERROR"/>
+
+    <!-- 减少nacos日志 -->
+    <logger name="com.alibaba.nacos" level="ERROR"/>
+
+</configuration>

+ 151 - 0
blade-service/blade-deliver-goods/src/main/resources/log/logback-test.xml

@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds">
+    <!-- 自定义参数监听 -->
+    <contextListener class="org.springblade.core.log.listener.LoggerStartupListener"/>
+    <springProperty scope="context" name="springAppName" source="spring.application.name"/>
+
+    <!-- 彩色日志依赖的渲染类 -->
+    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
+    <conversionRule conversionWord="wex"
+                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
+    <conversionRule conversionWord="wEx"
+                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
+    <!-- 彩色日志格式 -->
+    <property name="CONSOLE_LOG_PATTERN"
+              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
+    <!-- 控制台输出 -->
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+            <charset>utf8</charset>
+        </encoder>
+    </appender>
+
+    <!-- 生成日志文件 -->
+    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件输出的文件名 -->
+            <FileNamePattern>target/blade/log/info-%d{yyyy-MM-dd}.log</FileNamePattern>
+        </rollingPolicy>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>%n%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] [%logger{50}] %n%-5level: %msg%n</pattern>
+        </encoder>
+        <!-- 打印日志级别 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>INFO</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 生成日志文件 -->
+    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件输出的文件名 -->
+            <FileNamePattern>target/blade/log/error-%d{yyyy-MM-dd}.log</FileNamePattern>
+        </rollingPolicy>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>%n%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] [%logger{50}] %n%-5level: %msg%n</pattern>
+        </encoder>
+        <!-- 打印日志级别 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>ERROR</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <if condition='property("ELK_MODE").toUpperCase().contains("TRUE")'>
+        <then>
+            <!-- 推送日志至elk -->
+            <appender name="INFO_LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
+                <destination>${DESTINATION}</destination>
+                <!-- 日志输出编码 -->
+                <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
+                    <providers>
+                        <timestamp>
+                            <timeZone>UTC</timeZone>
+                        </timestamp>
+                        <pattern>
+                            <pattern>
+                                {
+                                "traceId": "%X{traceId}",
+                                "requestId": "%X{requestId}",
+                                "accountId": "%X{accountId}",
+                                "tenantId": "%X{tenantId}",
+                                "logLevel": "%level",
+                                "serviceName": "${springAppName:-SpringApp}",
+                                "pid": "${PID:-}",
+                                "thread": "%thread",
+                                "class": "%logger{40}",
+                                "line":"%L",
+                                "message": "%message"
+                                }
+                            </pattern>
+                        </pattern>
+                        <mdc/>
+                        <stackTrace/>
+                    </providers>
+                </encoder>
+                <!-- 打印日志级别 -->
+                <filter class="ch.qos.logback.classic.filter.LevelFilter">
+                    <level>INFO</level>
+                    <onMatch>ACCEPT</onMatch>
+                    <onMismatch>DENY</onMismatch>
+                </filter>
+            </appender>
+
+            <!-- 推送日志至elk -->
+            <appender name="ERROR_LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
+                <destination>${DESTINATION}</destination>
+                <!-- 日志输出编码 -->
+                <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
+                    <providers>
+                        <timestamp>
+                            <timeZone>UTC</timeZone>
+                        </timestamp>
+                        <pattern>
+                            <pattern>
+                                {
+                                "traceId": "%X{traceId}",
+                                "requestId": "%X{requestId}",
+                                "accountId": "%X{accountId}",
+                                "tenantId": "%X{tenantId}",
+                                "logLevel": "%level",
+                                "serviceName": "${springAppName:-SpringApp}",
+                                "pid": "${PID:-}",
+                                "thread": "%thread",
+                                "class": "%logger{40}",
+                                "line":"%L",
+                                "message": "%message"
+                                }
+                            </pattern>
+                        </pattern>
+                        <mdc/>
+                        <stackTrace/>
+                    </providers>
+                </encoder>
+                <!-- 打印日志级别 -->
+                <filter class="ch.qos.logback.classic.filter.LevelFilter">
+                    <level>ERROR</level>
+                    <onMatch>ACCEPT</onMatch>
+                    <onMismatch>DENY</onMismatch>
+                </filter>
+            </appender>
+        </then>
+    </if>
+
+    <!-- 日志输出级别 -->
+    <root level="ERROR">
+        <appender-ref ref="STDOUT"/>
+        <appender-ref ref="${INFO_APPENDER}"/>
+        <appender-ref ref="${ERROR_APPENDER}"/>
+    </root>
+
+    <logger name="net.sf.ehcache" level="ERROR"/>
+    <logger name="druid.sql" level="ERROR"/>
+
+    <!-- 减少nacos日志 -->
+    <logger name="com.alibaba.nacos" level="ERROR"/>
+
+</configuration>

+ 2 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/BillsController.java

@@ -187,6 +187,8 @@ public class BillsController extends BladeController {
 			.eq(ObjectUtils.isNotNull(bills.getBusinessType()), Bills::getBusinessType, bills.getBusinessType())
 			.eq(ObjectUtils.isNotNull(bills.getSeaType()), Bills::getSeaType, bills.getSeaType())
 			.eq(ObjectUtils.isNotNull(bills.getBillStatus()), Bills::getBillStatus, bills.getBillStatus())
+			.eq(ObjectUtils.isNotNull(bills.getStlDrStatusDescr()), Bills::getStlDrStatusDescr, bills.getStlDrStatusDescr())
+			.eq(ObjectUtils.isNotNull(bills.getStlCrStatusDescr()), Bills::getStlCrStatusDescr, bills.getStlCrStatusDescr())
 			.eq(ObjectUtils.isNotNull(bills.getAccountStatus()), Bills::getAccountStatus, bills.getAccountStatus())
 			.eq(ObjectUtils.isNotNull(bills.getStatus()), Bills::getStatus, bills.getStatus());
 		if ("SE".equals(bills.getBusinessType())) {

+ 3 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/TradeBillsController.java

@@ -93,8 +93,11 @@ public class TradeBillsController extends BladeController {
 		lambdaQueryWrapper.eq(Bills::getIsDeleted, 0)
 			.eq(Bills::getTenantId, AuthUtil.getTenantId())
 			.eq(ObjectUtils.isNotNull(bills.getBillingStatus()), Bills::getBillingStatus, bills.getBillingStatus())
+			.eq(ObjectUtils.isNotNull(bills.getStlDrStatusDescr()), Bills::getStlDrStatusDescr, bills.getStlDrStatusDescr())
+			.eq(ObjectUtils.isNotNull(bills.getStlCrStatusDescr()), Bills::getStlCrStatusDescr, bills.getStlCrStatusDescr())
 			.like(ObjectUtils.isNotNull(bills.getBillNo()), Bills::getBillNo, bills.getBillNo())
 			.like(ObjectUtils.isNotNull(bills.getMblno()), Bills::getMblno, bills.getMblno())
+			.like(ObjectUtils.isNotNull(bills.getHblno()), Bills::getHblno, bills.getHblno())
 			.like(ObjectUtils.isNotNull(bills.getRefno()), Bills::getRefno, bills.getRefno())
 			.like(ObjectUtils.isNotNull(bills.getMnotify2CntyCode()), Bills::getMnotify2CntyCode, bills.getMnotify2CntyCode())
 			.like(ObjectUtils.isNotNull(bills.getMnotify2CntyName()), Bills::getMnotify2CntyName, bills.getMnotify2CntyName())

+ 1 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java

@@ -887,6 +887,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		waitingBox.setQuantity(detail.getQuantity().subtract(detail.getCfsQuantity()));
 		waitingBox.setGrossWeight(detail.getGrossWeight().subtract(detail.getCfsGrossWeight()));
 		waitingBox.setMeasurement(detail.getMeasurement().subtract(detail.getCfsMeasurement()));
+		waitingBox.setPodEnName(detail.getDestinationName());
 		waitingBoxList.add(waitingBox);
 		detail.setWaitingBoxList(waitingBoxList);
 		detail.setFeeCenterListC(feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()

+ 59 - 15
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java

@@ -3052,7 +3052,51 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 					throw new RuntimeException("商品:" + goodsDesc.getCname() + ",请选择批次号");
 				}
 				//管理批次号
-				PjStockDesc stockOne = null;
+				List<PjStockDesc> stockDescList = new ArrayList<>();
+				if (ObjectUtil.isNotEmpty(goodsDesc.getWhether()) && "1".equals(goodsDesc.getWhether())) {
+					stockDescList = pjStockDescList.stream()
+						.filter(e -> e.getGoodsId().equals(item.getGoodsId())
+							&& e.getDot().equals(item.getDot())).collect(Collectors.toList());
+				} else {
+					stockDescList = pjStockDescList.stream()
+						.filter(e -> e.getGoodsId().equals(item.getGoodsId())
+							&& ObjectUtils.isNull(e.getDot())).collect(Collectors.toList());
+				}
+				if (!stockDescList.isEmpty()) {
+					BigDecimal redeemNum = item.getSendNum().subtract(item.getOutGoodsTotalShipNum());
+					item.setRedeemNum(redeemNum);
+					BigDecimal balanceQuantityFinancing = stockDescList.stream().map(PjStockDesc::getBalanceQuantityFinancing)
+						.reduce(BigDecimal.ZERO, BigDecimal::add);
+					if (balanceQuantityFinancing.compareTo(redeemNum) < 0) {
+						throw new RuntimeException("商品:" + goodsDesc.getCname() + "剩余融资库存小于融资单剩余融资数量");
+					}
+					BigDecimal count = redeemNum;
+					for (PjStockDesc s : stockDescList) {
+						if (new BigDecimal("0.00").compareTo(count) == 0) {
+							break;
+						} else {
+							if (s.getBalanceQuantityFinancing().compareTo(count) >= 0) {
+								BigDecimal sub = s.getBalanceQuantityFinancing().subtract(count);
+								s.setBalanceQuantityHave(s.getBalanceQuantityHave().add(count));
+								s.setBalanceQuantityFinancing(sub);
+								count = new BigDecimal("0.00");
+							} else if (s.getBalanceQuantityFinancing().compareTo(count) < 0) {
+								BigDecimal sub = count.subtract(s.getBalanceQuantityFinancing());
+								s.setBalanceQuantityHave(s.getBalanceQuantityHave().add(s.getBalanceQuantityFinancing()));
+								s.setBalanceQuantityFinancing(new BigDecimal("0.00"));
+								count = sub;
+							}
+							s.setVersion(s.getVersion());
+							pjStockDescArrayList.add(s);
+						}
+					}
+					if (new BigDecimal("0.00").compareTo(count) != 0) {
+						throw new RuntimeException("赎回失败,请联系管理员");
+					}
+				} else {
+					throw new RuntimeException("商品:" + goodsDesc.getCname() + "未查到库存账");
+				}
+				/*PjStockDesc stockOne = null;
 				if (ObjectUtil.isNotEmpty(goodsDesc.getWhether()) && "1".equals(goodsDesc.getWhether())) {
 					stockOne = pjStockDescList.stream()
 						.filter(e -> e.getGoodsId().equals(item.getGoodsId())
@@ -3074,7 +3118,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 					pjStockDescArrayList.add(stockOne);
 				} else {
 					throw new RuntimeException("商品:" + goodsDesc.getCname() + "未查到库存账");
-				}
+				}*/
 			}
 			orderItemsService.saveOrUpdateBatch(orderItemsList);
 			if (!pjStockDescArrayList.isEmpty()) {
@@ -4665,14 +4709,14 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 						.in("pid", brandIds).eq("is_deleted", 0));
 				}
 				for (PjOrderItems item : orderItems) {
-					if (ObjectUtils.isNotNull(item.getUrl())){
+					if (ObjectUtils.isNotNull(item.getUrl())) {
 						List<PjGoodsFiles> filesList = new ArrayList<>();
 						PjGoodsFiles files = new PjGoodsFiles();
 						files.setUrl(item.getUrl());
 						files.setVersion("0");
 						filesList.add(files);
 						item.setGoodsFilesList(filesList);
-					}else{
+					} else {
 						if (!goodsFilesList.isEmpty()) {
 							item.setGoodsFilesList(goodsFilesList.stream()
 								.filter(e -> e.getPid().equals(item.getGoodsId()))
@@ -5510,7 +5554,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 					}
 				});
 				String stata = sysClient.getParamService("whether.open.share");
-				if (!productLaunchListNew.isEmpty() && "1".equals(stata)){
+				if (!productLaunchListNew.isEmpty() && "1".equals(stata)) {
 					sharePutOnShelvesService.updateShareInventory(productLaunchListNew);
 				}
 			}
@@ -5815,7 +5859,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 					}
 				});
 				String stata = sysClient.getParamService("whether.open.share");
-				if (!productLaunchListNew.isEmpty() && "1".equals(stata)){
+				if (!productLaunchListNew.isEmpty() && "1".equals(stata)) {
 					sharePutOnShelvesService.updateShareInventory(productLaunchListNew);
 				}
 			}
@@ -5966,14 +6010,14 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 					.in("pid", brandIds).eq("is_deleted", 0));
 			}
 			for (PjOrderItems item : orderItems) {
-				if (ObjectUtils.isNotNull(item.getUrl())){
+				if (ObjectUtils.isNotNull(item.getUrl())) {
 					List<PjGoodsFiles> filesList = new ArrayList<>();
 					PjGoodsFiles files = new PjGoodsFiles();
 					files.setUrl(item.getUrl());
 					files.setVersion("0");
 					filesList.add(files);
 					item.setGoodsFilesList(filesList);
-				}else{
+				} else {
 					if (!goodsFilesList.isEmpty()) {
 						item.setGoodsFilesList(goodsFilesList.stream()
 							.filter(e -> e.getPid().equals(item.getGoodsId()))
@@ -6086,8 +6130,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 			auditProecessDTO.setCorpId(declare.getCustomerId());
 			if ("1".equals(status) && !pjOrderShareList.isEmpty()) {
 				List<Long> ids = pjOrderListNew.stream().map(PjOrder::getId).collect(Collectors.toList());
-				for (PjOrder item : pjOrderShareList){
-					if (!ids.contains(item.getId())){
+				for (PjOrder item : pjOrderShareList) {
+					if (!ids.contains(item.getId())) {
 						pjOrderListNew.add(item);
 					}
 				}
@@ -6176,8 +6220,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 			BigDecimal integral = new BigDecimal("0.00");
 			for (PjOrderItems e : list) {
 				PjGoodsDesc goodsDesc = pjGoodsDescList.stream().filter(item -> item.getId().equals(e.getGoodsId())).findFirst().orElse(null);
-				if (goodsDesc != null&& new BigDecimal("0.00").compareTo(goodsDesc.getIntegral()) != 0) {
-					integral= integral.add(goodsDesc.getIntegral().multiply(e.getGoodsNum()));
+				if (goodsDesc != null && new BigDecimal("0.00").compareTo(goodsDesc.getIntegral()) != 0) {
+					integral = integral.add(goodsDesc.getIntegral().multiply(e.getGoodsNum()));
 					corpsDesc.setPointsBalance(corpsDesc.getPointsBalance().subtract(goodsDesc.getIntegral().multiply(e.getGoodsNum())));
 				}
 			}
@@ -6337,7 +6381,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 										productLaunchListNew.add(e);
 									});
 									String stata = sysClient.getParamService("whether.open.share");
-									if (!productLaunchListNew.isEmpty() && "1".equals(stata)){
+									if (!productLaunchListNew.isEmpty() && "1".equals(stata)) {
 										sharePutOnShelvesService.updateShareInventory(productLaunchListNew);
 									}
 								}
@@ -6349,7 +6393,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				}
 				orderItemsService.updateBatchById(list);
 			}
-			if ("额度支付".equals(order.getBusinessSource())){
+			if ("额度支付".equals(order.getBusinessSource())) {
 				corpsDesc.setLimitAmount(corpsDesc.getLimitAmount().add(order.getTotalMoney()));
 				corpsDescMapper.updateById(corpsDesc);
 			}
@@ -6395,7 +6439,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 							item.setPaymentAmountTl(new BigDecimal("0.00"));
 							order.setActualPaymentStatus(4);
 						}
-						if (new BigDecimal("0.00").compareTo(integral) != 0){
+						if (new BigDecimal("0.00").compareTo(integral) != 0) {
 							PjIntegralDetail integralDetail = new PjIntegralDetail();
 							integralDetail.setCreateTime(new Date());
 							integralDetail.setCreateUserName(AuthUtil.getUserName());

+ 4 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/impl/ShipServiceImpl.java

@@ -941,11 +941,15 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 				order.setLogisticsCorpId(ship.getLogisticsCorpId());
 				order.setLogisticsCorpName(ship.getLogisticsCorpName());
 				order.setExpressNo(ship.getExpressNo());
+				System.err.println("=============出库完成-"+order.getOrdNo()+"==============");
 				if (goodsNum.compareTo(sendNum) == 0) {//数量等于发货数量修改销售订单状态
+					System.err.println("=============数量等于发货数量-"+order.getOrdNo()+"==============");
 					order.setDeliveryBusinesDate(new Date());
+					System.err.println("=============出库时间赋值-"+order.getDeliveryBusinesDate()+"==============");
 					order.setStatus(OrderTypeEnum.SHIPED.getType());
 					order.setXcxStatus(OrderTypeEnum.GOODSRECEIVED.getType());
 					orderMapper.updateById(order);
+					System.err.println("=============出库时间修改成功后-"+order.getDeliveryBusinesDate()+"==============");
 				} else {
 					order.setStorageId(ship.getStorageId());
 					order.setStorageName(ship.getStorageName());