opt:越南富佳优化

This commit is contained in:
2025-11-14 16:48:09 +08:00
parent 18c973dd8c
commit 05aa167def
17 changed files with 773 additions and 71 deletions

View File

@@ -0,0 +1,268 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="web" name="Web">
<configuration>
<webroots />
</configuration>
</facet>
<facet type="Spring" name="Spring">
<configuration />
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy:3.0.9" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-ant:3.0.9" level="project" />
<orderEntry type="library" name="Maven: org.apache.ant:ant:1.10.11" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.ant:ant-junit:1.10.11" level="project" />
<orderEntry type="module-library">
<library name="Maven: com.sun:tools:1.8.0">
<CLASSES>
<root url="jar://C:/Program Files/Java/jdk1.8.0_121/jre/../lib/tools.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.ant:ant-launcher:1.10.11" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.ant:ant-antlr:1.10.11" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-astbuilder:3.0.9" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-cli-picocli:3.0.9" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: info.picocli:picocli:4.6.1" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-console:3.0.9" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-datetime:3.0.9" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-docgenerator:3.0.9" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: com.thoughtworks.qdox:qdox:1.12.1" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-groovydoc:3.0.9" level="project" />
<orderEntry type="library" name="Maven: com.github.javaparser:javaparser-core:3.23.0" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-groovysh:3.0.9" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: jline:jline:2.14.6" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-jmx:3.0.9" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-json:3.0.9" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-jsr223:3.0.9" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-macro:3.0.9" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-nio:3.0.9" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-servlet:3.0.9" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-sql:3.0.9" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-swing:3.0.9" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-templates:3.0.9" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-test:3.0.9" level="project" />
<orderEntry type="library" name="Maven: junit:junit:4.13.2" level="project" />
<orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:2.2" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-test-junit5:3.0.9" level="project" />
<orderEntry type="library" name="Maven: org.junit.jupiter:junit-jupiter-api:5.8.2" level="project" />
<orderEntry type="library" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.junit.platform:junit-platform-launcher:1.8.2" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.junit.platform:junit-platform-engine:1.8.2" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.junit.platform:junit-platform-commons:1.8.2" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.8.2" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-testng:3.0.9" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.testng:testng:7.4.0" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: com.beust:jcommander:1.78" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.webjars:jquery:3.5.1" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-xml:3.0.9" level="project" />
<orderEntry type="library" name="Maven: com.github.oshi:oshi-core:5.8.5" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.32" level="project" />
<orderEntry type="library" name="Maven: net.java.dev.jna:jna:5.6.0" level="project" />
<orderEntry type="library" name="Maven: net.java.dev.jna:jna-platform:5.6.0" level="project" />
<orderEntry type="library" name="Maven: net.coobird:thumbnailator:0.4.8" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpasyncclient:4.1.4" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.15" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore-nio:4.4.15" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.13" level="project" />
<orderEntry type="library" name="Maven: org.fusesource.jansi:jansi:1.9" level="project" />
<orderEntry type="library" name="Maven: cn.hutool:hutool-all:5.7.14" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi:4.0.0" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.15" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:4.0.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-compress:1.18" level="project" />
<orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.04" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:4.0.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:3.0.1" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.3.2" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.6.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.6.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.6.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.6.2" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.9" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.9" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.17.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.17.0" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.32" level="project" />
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
<orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.29" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.6.2" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.1" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.1" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.13.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.6.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.56" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.56" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.56" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.14" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.14" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.14" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.14" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.14" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.14" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.6.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.6.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.6.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.6.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.4.7" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:2.4.7" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:9.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.21.0" level="project" />
<orderEntry type="library" name="Maven: org.hamcrest:hamcrest:2.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.8.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.8.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:4.0.0" level="project" />
<orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.11.22" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.11.22" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:3.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-junit-jupiter:4.0.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.14" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.14" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.3.14" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.8.4" level="project" />
<orderEntry type="library" name="Maven: cn.dev33:sa-token-spring-boot-starter:1.31.0" level="project" />
<orderEntry type="library" name="Maven: cn.dev33:sa-token-servlet:1.31.0" level="project" />
<orderEntry type="library" name="Maven: cn.dev33:sa-token-jwt:1.31.0" level="project" />
<orderEntry type="library" name="Maven: cn.dev33:sa-token-core:1.31.0" level="project" />
<orderEntry type="library" name="Maven: cn.hutool:hutool-jwt:5.8.5" level="project" />
<orderEntry type="library" name="Maven: cn.hutool:hutool-json:5.8.5" level="project" />
<orderEntry type="library" name="Maven: cn.hutool:hutool-core:5.8.5" level="project" />
<orderEntry type="library" name="Maven: cn.hutool:hutool-crypto:5.8.5" level="project" />
<orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt-impl:0.11.1" level="project" />
<orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt-api:0.11.1" level="project" />
<orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt-jackson:0.11.1" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.13.1" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.13.1" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.13.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.lucene:lucene-core:8.2.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.lucene:lucene-highlighter:8.2.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.lucene:lucene-memory:8.2.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.lucene:lucene-queries:8.2.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.lucene:lucene-analyzers-common:8.2.0" level="project" />
<orderEntry type="library" name="Maven: com.github.magese:ik-analyzer:8.2.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.lucene:lucene-analyzers-smartcn:8.2.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.lucene:lucene-queryparser:8.2.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.lucene:lucene-sandbox:8.2.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:2.6.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.3.14" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.12.0" level="project" />
<orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.20" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.22" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid:1.1.22" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.6.2" level="project" />
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.22" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.83" level="project" />
<orderEntry type="library" name="Maven: cn.dev33:sa-token-dao-redis:1.31.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.6.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.6.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.6.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.6.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.3.14" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.3.14" level="project" />
<orderEntry type="library" name="Maven: io.lettuce:lettuce-core:6.1.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.4.0" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.4.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.6.2" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:4.0.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.3.14" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-generator:3.4.0" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.4.0" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.4.0" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.4.0" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.5" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.5" level="project" />
<orderEntry type="library" name="Maven: com.github.whvcse:easy-captcha:1.6.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.velocity:velocity-engine-core:2.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-freemarker:2.6.2" level="project" />
<orderEntry type="library" name="Maven: org.freemarker:freemarker:2.3.31" level="project" />
<orderEntry type="library" name="Maven: commons-configuration:commons-configuration:1.9" level="project" />
<orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1.1" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:guava:29.0-jre" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
<orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
<orderEntry type="library" name="Maven: org.checkerframework:checker-qual:2.11.1" level="project" />
<orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.4" level="project" />
<orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-websocket:2.6.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-messaging:5.3.14" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-websocket:5.3.14" level="project" />
<orderEntry type="library" name="Maven: org.redisson:redisson-spring-boot-starter:3.16.4" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-actuator:2.6.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-actuator-autoconfigure:2.6.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-actuator:2.6.2" level="project" />
<orderEntry type="library" name="Maven: io.micrometer:micrometer-core:1.8.1" level="project" />
<orderEntry type="library" name="Maven: org.hdrhistogram:HdrHistogram:2.1.12" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.latencyutils:LatencyUtils:2.0.3" level="project" />
<orderEntry type="library" name="Maven: org.redisson:redisson:3.16.4" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-common:4.1.72.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.72.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.72.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.72.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.72.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-resolver-dns:4.1.72.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-codec-dns:4.1.72.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.72.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-tcnative-classes:2.0.46.Final" level="project" />
<orderEntry type="library" name="Maven: javax.cache:cache-api:1.1.1" level="project" />
<orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.4.13" level="project" />
<orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
<orderEntry type="library" name="Maven: io.reactivex.rxjava3:rxjava:3.0.12" level="project" />
<orderEntry type="library" name="Maven: org.jboss.marshalling:jboss-marshalling:2.0.11.Final" level="project" />
<orderEntry type="library" name="Maven: org.jboss.marshalling:jboss-marshalling-river:2.0.11.Final" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.1" level="project" />
<orderEntry type="library" name="Maven: org.jodd:jodd-bean:5.1.6" level="project" />
<orderEntry type="library" name="Maven: org.jodd:jodd-core:5.1.6" level="project" />
<orderEntry type="library" name="Maven: org.redisson:redisson-spring-data-25:3.16.4" level="project" />
<orderEntry type="library" name="Maven: nl.sdkall:language-all:0.0.1" level="project" />
<orderEntry type="library" name="Maven: org.quartz-scheduler:quartz:2.3.2" level="project" />
<orderEntry type="library" name="Maven: com.mchange:mchange-commons-java:0.2.15" level="project" />
<orderEntry type="library" name="Maven: com.yomahub:tlog-all-spring-boot-starter:1.5.0" level="project" />
<orderEntry type="library" name="Maven: com.yomahub:tlog-spring-boot-configuration:1.5.0" level="project" />
<orderEntry type="library" name="Maven: com.yomahub:tlog-dubbo:1.5.0" level="project" />
<orderEntry type="library" name="Maven: com.yomahub:tlog-core:1.5.0" level="project" />
<orderEntry type="library" name="Maven: org.dom4j:dom4j:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.javassist:javassist:3.22.0-GA" level="project" />
<orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.7" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:QLExpress:3.2.0" level="project" />
<orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.8.2" level="project" />
<orderEntry type="library" name="Maven: com.yomahub:tlog-dubbox:1.5.0" level="project" />
<orderEntry type="library" name="Maven: com.yomahub:tlog-feign:1.5.0" level="project" />
<orderEntry type="library" name="Maven: com.yomahub:tlog-webroot:1.5.0" level="project" />
<orderEntry type="library" name="Maven: com.yomahub:tlog-gateway:1.5.0" level="project" />
<orderEntry type="library" name="Maven: com.yomahub:tlog-webflux:1.5.0" level="project" />
<orderEntry type="library" name="Maven: com.yomahub:tlog-common:1.5.0" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:transmittable-thread-local:2.12.2" level="project" />
<orderEntry type="library" name="Maven: com.yomahub:tlog-httpclient:1.5.0" level="project" />
<orderEntry type="library" name="Maven: com.yomahub:tlog-okhttp:1.5.0" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.14.9" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okio:okio:1.17.2" level="project" />
<orderEntry type="library" name="Maven: com.yomahub:tlog-hutool-http:1.5.0" level="project" />
<orderEntry type="library" name="Maven: com.yomahub:tlog-forest:1.5.0" level="project" />
<orderEntry type="library" name="Maven: com.yomahub:tlog-rest-template:1.5.0" level="project" />
<orderEntry type="library" name="Maven: com.yomahub:tlog-task:1.5.0" level="project" />
<orderEntry type="library" name="Maven: com.yomahub:tlog-xxl-job:1.5.0" level="project" />
</component>
</module>

View File

@@ -136,10 +136,17 @@
<if test="param.material_code != null and param.material_code != ''">
AND
(mater.material_code LIKE #{param.material_code} or
mater.material_name LIKE #{param.material_code} )
(mater.material_code LIKE CONCAT('%', #{param.material_code} , '%') or
mater.material_name LIKE CONCAT('%', #{param.material_code} , '%'))
</if>
<if test="param.storagevehicle_code != null and param.storagevehicle_code != ''">
AND
ext.storagevehicle_code LIKE CONCAT('%', #{param.storagevehicle_code} , '%')
</if>
<if test="param.pcsn != null and param.pcsn != ''">
AND
ext.pcsn LIKE #{param.pcsn}

View File

@@ -1,6 +1,5 @@
package org.nl.wms.decision_manage.service.strategyConfig.decisioner.impl.base;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.nl.common.exception.BadRequestException;
@@ -16,8 +15,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import java.util.ArrayList;
import java.util.List;
/*
* @author ZZQ
@@ -50,7 +49,7 @@ public class FIFORuleHandler extends Decisioner<StrategyStructMaterialVO, Strate
, "order_by", "gro.update_time asc, gro.qty asc")
);
if (ObjectUtils.isEmpty(vechielDtos)) {
throw new BadRequestException(LangBehavior.language("decision_manage.fifo_rule_inventory_shortage"));
throw new BadRequestException(LangBehavior.language("wms.decision_manage.fifo_rule_inventory_shortage"));
}
List<StrategyStructMaterialVO> divStruct = new ArrayList<>();
for (StructattrVechielDto vechielDto : vechielDtos) {

View File

@@ -35,9 +35,10 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* <p>
@@ -261,9 +262,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
"该任务申请托盘["+vehicle_code+"]为空,无法申请任务!");
}
//判断该子托盘是否存在未完成任务
Integer sub_tray_lists = iSchBaseTaskService.findUnFinishTasksBySub_tray(vehicle_code);
Assert.isFalse(sub_tray_lists>0,
"该任务申请托盘["+vehicle_code+"]已存在未完成的任务,无法申请任务!");
// Integer sub_tray_lists = iSchBaseTaskService.findUnFinishTasksBySub_tray(vehicle_code);
// Assert.isFalse(sub_tray_lists>0,
// "该任务申请托盘["+vehicle_code+"]已存在未完成的任务,无法申请任务!");
//todo 仅生成任务,不生成单据
// 校验数据
@@ -275,44 +276,39 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
throw new BadRequestException(LangBehavior.language("pda_manage.start_point_not_exist"));
}
//查询是否有执行中的点位
//找到空点位正在执行的任务
List<SchBaseTask> taskingSchBaseTaskList = iSchBaseTaskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO)
.le(SchBaseTask::getTask_status, TaskStatus.EXECUTING.getCode()));
List<String> pointList = Optional.ofNullable(taskingSchBaseTaskList)
.orElse(Collections.emptyList())
.stream()
.flatMap(task -> Stream.of(task.getPoint_code1(), task.getPoint_code2()))
.filter(Objects::nonNull)
.collect(Collectors.toList());
//计算终点点位
List<Structattr> end_point_code_list = iStructattrService.list(new LambdaUpdateWrapper<Structattr>()
.eq(Structattr::getSect_code,"FJError")
.eq(Structattr::getIs_used, 1)
.isNull(Structattr::getStoragevehicle_code)
.notIn(CollectionUtils.isNotEmpty(pointList),Structattr::getStruct_code,pointList)
.eq(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.orderByDesc(Structattr::getUpdate_time));
.orderByDesc(Structattr::getUpdate_time)
.last("LIMIT 1"));
if(CollectionUtils.isEmpty(end_point_code_list)){
throw new BadRequestException(LangBehavior.language("pda_manage.end_point_not_exist"));
}
// 校验终点
Structattr end_point = end_point_code_list.get(0);
//查询是否有执行中的点位
//找到空点位正在执行的任务
List<SchBaseTask> taskingSchBaseTaskList = iSchBaseTaskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO)
.and(wp -> wp
.eq(SchBaseTask::getPoint_code1, end_point.getStruct_code())
.or()
.eq(SchBaseTask::getPoint_code2, end_point.getStruct_code())
.or()
.eq(SchBaseTask::getPoint_code1, start_point.getStruct_code())
.or()
.eq(SchBaseTask::getPoint_code2, start_point.getStruct_code())
)
.le(SchBaseTask::getTask_status, TaskStatus.EXECUTING.getCode()));
if (CollectionUtils.isNotEmpty(taskingSchBaseTaskList)) {
throw new BadRequestException(LangBehavior.language("pda_manage.ongoing_task_at_point"));
}
start_point.setLock_type(IOSEnum.LOCK_TYPE.code("其他锁"));
iStructattrService.updateById(start_point);
end_point.setLock_type(IOSEnum.LOCK_TYPE.code("其他锁"));
iStructattrService.updateById(end_point);
start_point.setLock_type(IOSEnum.LOCK_TYPE.code("其他锁"));
iStructattrService.updateById(start_point);
end_point.setLock_type(IOSEnum.LOCK_TYPE.code("其他锁"));
iStructattrService.updateById(end_point);
// 创建任务
JSONObject task = new JSONObject();
task.put("config_code", IOSConstant.ACS_ERROR_TASK);

View File

@@ -16,6 +16,8 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import static org.nl.common.utils.ValidationUtil.assertNotBlankJson;
/**
* 手持出库管理
*
@@ -64,6 +66,26 @@ public class PdaIosOutController {
return new ResponseEntity<>(pdaIosOutService.callMaterialConfirm(whereJson), HttpStatus.OK);
}
/**
* 出库分拣提交
*/
@PostMapping("/outSortingSubmit")
@Log("出库分拣提交")
public ResponseEntity<Object> outSortingSubmit(@RequestBody JSONObject whereJson) {
assertNotBlankJson(whereJson, "请求参数不能为空", "out_struct_code", "out_vehicle_code","return_vehicle_code");
return new ResponseEntity<>(pdaIosOutService.outSortingSubmit(whereJson), HttpStatus.OK);
}
/**
* 出库分拣
*/
@PostMapping("/getOutAndReturnNumByReturnVehicleCode")
@Log("根据回库托盘码获取回库数量和出库数量")
public ResponseEntity<Object> getOutAndReturnNumByReturnVehicleCode(@RequestBody JSONObject whereJson) {
assertNotBlankJson(whereJson, "请求参数不能为空", "return_vehicle_code");
return new ResponseEntity<>(pdaIosOutService.getOutAndReturnNumByReturnVehicleCode(whereJson), HttpStatus.OK);
}
/**
* 出库确认获取物料明细

View File

@@ -23,6 +23,16 @@ public interface PdaIosOutService {
*/
PdaResponse getDtl(JSONObject whereJson);
/**
* 获取库存明细
*
* @param whereJson {
* vehicle_code 载具码
* }
* @return PdaResponse
*/
JSONObject getOutAndReturnNumByReturnVehicleCode(JSONObject whereJson);
/**
* 获取物料库存明细
@@ -58,5 +68,17 @@ public interface PdaIosOutService {
*/
JSONObject callMaterialConfirm(JSONObject whereJson);
/**
* 出库分拣提交
*
* @param whereJson {
* return_vehicle_code 载具码
* out_vehicle_code 点位编码,
* out_struct_code: 楼层
* }
* @return PdaResponse
*/
JSONObject outSortingSubmit(JSONObject whereJson);
}

View File

@@ -6,26 +6,43 @@ import cn.hutool.http.HttpStatus;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.IdUtil;
import org.nl.language.LangBehavior;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.SecurityUtils;
import org.nl.config.SpringContextHolder;
import org.nl.language.LangBehavior;
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
import org.nl.wms.basedata_manage.service.IBsrealStorattrService;
import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService;
import org.nl.wms.basedata_manage.service.ISectattrService;
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.*;
import org.nl.wms.basedata_manage.service.dao.BsrealStorattr;
import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase;
import org.nl.wms.basedata_manage.service.dao.Sectattr;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper;
import org.nl.wms.basedata_manage.service.dto.StrategyStructParam;
import org.nl.wms.pda_manage.ios_manage.service.PdaIosOutService;
import org.nl.wms.pda_manage.util.PdaResponse;
import org.nl.wms.sch_manage.enums.StatusEnum;
import org.nl.wms.sch_manage.enums.TaskEnum;
import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBasePointService;
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.util.tasks.MovePointTask;
import org.nl.wms.sch_manage.service.util.tasks.StOutTask;
import org.nl.wms.warehouse_manage.enums.IOSConstant;
import org.nl.wms.warehouse_manage.enums.IOSEnum;
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
import org.nl.wms.warehouse_manage.service.IOutBillService;
import org.nl.wms.warehouse_manage.service.dao.GroupPlate;
import org.nl.wms.warehouse_manage.service.dao.IOStorInv;
import org.nl.wms.warehouse_manage.service.dao.IOStorInvDis;
@@ -34,11 +51,14 @@ import org.nl.wms.warehouse_manage.service.dao.mapper.IOStorInvDisMapper;
import org.nl.wms.warehouse_manage.service.dao.mapper.IOStorInvDtlMapper;
import org.nl.wms.warehouse_manage.service.dao.mapper.IOStorInvMapper;
import org.nl.wms.warehouse_manage.service.dao.mapper.MdPbGroupplateMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
import java.math.BigDecimal;
import java.util.*;
import static org.nl.wms.warehouse_manage.enums.IOSEnum.GROUP_PLATE_STATUS;
@@ -62,6 +82,16 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
*/
@Autowired
private ISchBasePointService iSchBasePointService;
@Resource
private ISectattrService iSectattrService;
/**
* 仓库实物表服务
*/
@Autowired
private IBsrealStorattrService iBsrealStorattrService;
/**
* 出入库单主表
*/
@@ -73,12 +103,21 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
*/
@Autowired
private IMdMeMaterialbaseService iMdMeMaterialbaseService;
@Resource
private IOutBillService outBillService;
/**
* 载具扩展属性服务
*/
@Resource
private MdPbStoragevehicleextMapper mdPbStoragevehicleextMapper;
@Resource
private IMdPbGroupplateService iMdPbGroupplateService;
@Autowired
private ISchBaseTaskService schBaseTaskService;
/**
* 仓位服务
*/
@@ -102,6 +141,41 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
return PdaResponse.requestParamOk(mdPbStoragevehicleextMapper.getIosDtl(whereJson));
}
@Override
public JSONObject getOutAndReturnNumByReturnVehicleCode(JSONObject whereJson) {
if(StringUtils.isBlank(whereJson.getString("return_vehicle_code"))){
throw new BadRequestException("未传入载具编码");
}
List<GroupPlate> groupPlates = iMdPbGroupplateService.list(new QueryWrapper<GroupPlate>()
.eq("storagevehicle_code", whereJson.getString("return_vehicle_code"))
.eq("status", IOSEnum.GROUP_PLATE_STATUS.code("入库")));
if(CollectionUtils.isEmpty(groupPlates)){
throw new BadRequestException("回库托盘码"+whereJson.getString("return_vehicle_code")+"不存在,请核对!");
}
List<Structattr> structattrList = iStructattrService.list(new LambdaUpdateWrapper<Structattr>()
.eq(Structattr::getSect_code,"FJOutboundSorting")
.eq(Structattr::getIs_used, 1)
.eq(Structattr::getStoragevehicle_code, whereJson.getString("return_vehicle_code"))
);
if(CollectionUtils.isEmpty(structattrList)){
throw new BadRequestException("回库托盘码"+whereJson.getString("return_vehicle_code")+"在分拣库区不存在,请核对!");
}
Map<String,String> outMap = new HashMap<>();
outMap.put("out_num",groupPlates.get(0).getFrozen_qty().toString());
outMap.put("return_num",(groupPlates.get(0).getQty().subtract(groupPlates.get(0).getFrozen_qty())).toString());
JSONObject ret = new JSONObject();
ret.put("status", String.valueOf(HttpStatus.HTTP_OK));
ret.put("message","查询成功");
ret.put("data",outMap);
return ret;
}
@Override
public JSONObject getMaterialDtl(JSONObject whereJson) {
@@ -205,6 +279,196 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
return ret;
}
@Override
@Transactional
public JSONObject outSortingSubmit(JSONObject whereJson) {
String return_vehicle_code = whereJson.getString("return_vehicle_code");
String out_vehicle_code = whereJson.getString("out_vehicle_code");
String out_struct_code = whereJson.getString("out_struct_code");
List<Structattr> structattrList = iStructattrService.list(new LambdaUpdateWrapper<Structattr>()
.eq(Structattr::getStoragevehicle_code, return_vehicle_code)
.eq(Structattr::getSect_code,"FJOutboundSorting"));
if(CollectionUtils.isEmpty(structattrList)){
throw new BadRequestException("回库点位,请核对");
}
Structattr structattr = structattrList.get(0);
//找到空点位正在执行的任务
List<SchBaseTask> taskingSchBaseTaskList = schBaseTaskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO)
.and(wp -> wp
.eq(SchBaseTask::getPoint_code1, out_struct_code)
.or()
.eq(SchBaseTask::getPoint_code2, out_struct_code)
.or()
.eq(SchBaseTask::getVehicle_code, out_vehicle_code)
.or()
.eq(SchBaseTask::getVehicle_code, return_vehicle_code)
)
.le(SchBaseTask::getTask_status, TaskStatus.EXECUTING.getCode()));
if (CollectionUtils.isNotEmpty(taskingSchBaseTaskList)) {
throw new BadRequestException(LangBehavior.language("pda_manage.ongoing_task_at_point"));
}
//根据旧的托盘查找组盘表
List<GroupPlate> groupPlates = iMdPbGroupplateService.list(new QueryWrapper<GroupPlate>()
.eq("storagevehicle_code", whereJson.getString("return_vehicle_code"))
.eq("status", IOSEnum.GROUP_PLATE_STATUS.code("入库")));
if(CollectionUtils.isEmpty(groupPlates)){
throw new BadRequestException("回库托盘码"+whereJson.getString("return_vehicle_code")+"不存在,请核对!");
}
GroupPlate newGroupPlate = new GroupPlate();
//插入新的组盘表
BeanUtils.copyProperties(groupPlates.get(0),newGroupPlate);
newGroupPlate.setGroup_id(IdUtil.getStringId());
newGroupPlate.setStoragevehicle_code(out_vehicle_code);
newGroupPlate.setQty(newGroupPlate.getFrozen_qty());
//判断是否存在这个托盘
List<GroupPlate> outGroupPlates = iMdPbGroupplateService.list(new QueryWrapper<GroupPlate>()
.eq("storagevehicle_code", whereJson.getString("out_vehicle_code"))
.eq("status", IOSEnum.GROUP_PLATE_STATUS.code("入库")));
if(CollectionUtils.isNotEmpty(outGroupPlates)){
throw new BadRequestException("出库托盘码"+whereJson.getString("out_vehicle_code")+"重复,请核对!");
}
iMdPbGroupplateService.save(newGroupPlate);
//修改旧的组盘表的数量
GroupPlate oldGroupPlate = groupPlates.get(0);
oldGroupPlate.setQty(oldGroupPlate.getQty().subtract(oldGroupPlate.getFrozen_qty()));
oldGroupPlate.setFrozen_qty(new BigDecimal(0));
iMdPbGroupplateService.updateById(oldGroupPlate);
//1、下发一个回去任务通过接口查询回库点位
JSONObject lock_map = new JSONObject();
lock_map.put("struct_code", structattr.getStruct_code());
lock_map.put("lock_type", IOSEnum.LOCK_TYPE.code("入库锁"));
iStructattrService.updateStatusByCode("0", lock_map);
JSONObject jsonTask = new JSONObject();
jsonTask.put("config_code", IOSConstant.MOVE_POINT_CONFIG_TASK);
jsonTask.put("point_code1", structattr.getStruct_code());
//计算
// 查询所有库区
// 查询所有库区
List<Sectattr> allSects = iSectattrService.list(new LambdaQueryWrapper<>(Sectattr.class)
.eq(Sectattr::getIs_delete,"0")
.eq(Sectattr::getSect_code,"FJ01")
.ne(Sectattr::getSect_code,"SSX")
.ne(Sectattr::getSect_code,"FJOutboundSorting")
.ne(Sectattr::getSect_code,"FJError")
.ne(Sectattr::getSect_code,"FJWaitingMaterial"));
if (CollectionUtils.isEmpty(allSects)) {
throw new BadRequestException(LangBehavior.language("warehouse_manage.cannot_find_available_sector"));
}
// 判断库区货位占有率
Map<Sectattr, BigDecimal> sectOccupancyRateMap = new HashMap<>();
for (Sectattr sect : allSects) {
BigDecimal occupancyRate = iStructattrService.calculateSectOccupancyRate(sect.getSect_code());
sectOccupancyRateMap.put(sect, occupancyRate);
}
JSONObject dis_form = new JSONObject();
// 选择占有率小的库区
Optional<Map.Entry<Sectattr, BigDecimal>> minEntry = sectOccupancyRateMap.entrySet().stream()
.min(Map.Entry.comparingByValue());
if (minEntry.isPresent()) {
dis_form.put("sect_id", minEntry.get().getKey().getSect_id());
dis_form.put("stor_id", minEntry.get().getKey().getStor_id());
dis_form.put("sect_code", minEntry.get().getKey().getSect_id());
dis_form.put("stor_code", minEntry.get().getKey().getStor_id());
} else {
throw new BadRequestException(LangBehavior.language("warehouse_manage.cannot_select_suitable_sector"));
}
BsrealStorattr stor = iBsrealStorattrService.findById(dis_form.getString("stor_code"));
Sectattr sect = iSectattrService.findById(dis_form.getString("sect_code"));
MdMeMaterialbase mdMeMaterialbase = iMdMeMaterialbaseService.getByCode(oldGroupPlate.getMaterial_id());
List<Structattr> structattrs = iStructattrService.inBoundSectDiv(
StrategyStructParam.builder()
.ioType(StatusEnum.STRATEGY_TYPE.code("入库"))
.sect_code(sect.getSect_code())
.stor_code(stor.getStor_code())
.material_code(mdMeMaterialbase.getMaterial_code())
.qty(oldGroupPlate.getQty())
.pcsn(oldGroupPlate.getPcsn())
.build());
Structattr struct = structattrs.get(0);
lock_map = new JSONObject();
lock_map.put("struct_code", struct.getStruct_code());
lock_map.put("lock_type", IOSEnum.LOCK_TYPE.code("入库锁"));
iStructattrService.updateStatusByCode("0", lock_map);
jsonTask.put("point_code2", struct.getStruct_code());
jsonTask.put("vehicle_code", oldGroupPlate.getStoragevehicle_code());
jsonTask.put("Priority", TaskEnum.ACS_PRIORITY.code("1"));
MovePointTask movePointTask = SpringContextHolder.getBean("MovePointTask");
String task_id = movePointTask.create(jsonTask);
//2、下发出库任务需要将旧托盘
//需要修改IOS分配表看一下三张表是否都需要修改、 出库区的当前托盘码,需要加锁,需要修改分配表的库区出库点位需要更新TASKID
//需要修改IOS分配表看一下三张表是否都需要修改、 需要修改分配表的库区出库点位需要更新TASKID
List<IOStorInvDis> disList = ioStorInvDisMapper.selectList(
new QueryWrapper<IOStorInvDis>().lambda()
.eq(IOStorInvDis::getStoragevehicle_code, oldGroupPlate.getStoragevehicle_code()
)
.eq(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("生成")
)
);
if(CollectionUtils.isEmpty(disList)){
throw new BadRequestException("托盘编码为空");
}
IOStorInvDis updateDis = disList.get(0);
lock_map = new JSONObject();
lock_map.put("struct_code", out_struct_code);
lock_map.put("lock_type", IOSEnum.LOCK_TYPE.code("出库锁"));
iStructattrService.updateStatusByCode("0", lock_map);
JSONObject task_form = new JSONObject();
task_form.put("task_type", "STOutTask");
task_form.put("TaskCode",CodeUtil.getNewCode("TASK_CODE"));
task_form.put("PickingLocation", out_struct_code);
task_form.put("PlacedLocation", updateDis.getPoint_code());
task_form.put("floor_code",updateDis.getFloor_code());
task_form.put("vehicle_code", out_vehicle_code);
StOutTask stOutTask = SpringContextHolder.getBean("STOutTask");
String out_task_id = stOutTask.create(task_form);
Structattr outStructattr = iStructattrService.getByCode(out_struct_code);
updateDis.setSect_id(outStructattr.getSect_id());
updateDis.setSect_code(outStructattr.getSect_code());
updateDis.setSect_name(outStructattr.getSect_name());
updateDis.setStruct_id(outStructattr.getStruct_id());
updateDis.setStruct_code(outStructattr.getStruct_code());
updateDis.setStruct_name(outStructattr.getStruct_name());
updateDis.setTask_id(out_task_id);
updateDis.setStoragevehicle_code(out_vehicle_code);
ioStorInvDisMapper.updateById(updateDis);
JSONObject ret = new JSONObject();
ret.put("status", String.valueOf(HttpStatus.HTTP_OK));
ret.put("message","提交成功");
ret.put("data",null);
return ret;
}
private String createOutBills(JSONObject whereJson) {
String now = DateUtil.now();
String currentUserId = SecurityUtils.getCurrentUserId();

View File

@@ -4,7 +4,9 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpStatus;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.apache.commons.collections4.CollectionUtils;
import org.nl.common.exception.BadRequestException;
import org.nl.language.LangBehavior;
import org.nl.wms.basedata_manage.service.IStructattrService;
@@ -39,12 +41,22 @@ public class PdaSchPointServiceImpl implements PdaSchPointService {
public JSONObject getPoint(JSONObject whereJson) {
// 载具号
List<JSONObject> list = stIvtMoveinvdtlMapper.querydtl(whereJson);
JSONObject ret = new JSONObject();
if(CollectionUtils.isEmpty(list)){
List<Structattr> structattrList = iStructattrService.list(new LambdaUpdateWrapper<Structattr>()
.eq(Structattr::getStruct_code, whereJson.getString("struct_code")));
if (CollectionUtils.isNotEmpty(structattrList)){
JSONObject jsonObject = new JSONObject();
jsonObject.put("group_id","1");
jsonObject.put("storagevehicle_code",structattrList.get(0).getStoragevehicle_code());
list.add(jsonObject);
}
}
ret.put("data",list);
ret.put("status", String.valueOf(HttpStatus.HTTP_OK));
ret.put("message","查询成功");
ret.put("data",list);
return ret;
return ret;
}
@Override
@Transactional
@@ -107,7 +119,7 @@ public class PdaSchPointServiceImpl implements PdaSchPointService {
throw new BadRequestException(LangBehavior.language("pda_manage.point_not_found", struct_code));
}
if(ObjectUtil.isEmpty(struct.getStoragevehicle_code())){
throw new BadRequestException(LangBehavior.language("pda_manage.point_no_vehicle_need_unbind", struct_code, vehicle_code));
throw new BadRequestException(LangBehavior.language("pda_manage.point_no_vehicle_need_unbind", struct_code, ""));
}
iStructattrService.update(

View File

@@ -179,6 +179,9 @@
<if test="query.search != null and query.search != ''">
and form_data LIKE '%${query.search}%'
</if>
<if test="query.vehicle_code != null and query.vehicle_code != ''">
and vehicle_code LIKE '%${query.vehicle_code}%'
</if>
<if test="query.form_type != null and query.form_type != ''">
and form_type = #{query.form_type}
</if>

View File

@@ -26,6 +26,7 @@ public class FormDataQuery extends BaseQuery<PmFormData> {
private String[] status;
private String start_time;
private String end_time;
private String vehicle_code;
private Map<String,String> form_query;
@Override

View File

@@ -7,14 +7,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.apache.commons.collections4.CollectionUtils;
import org.nl.common.exception.BadRequestException;
import org.nl.config.language.LangProcess;
import org.nl.common.utils.SecurityUtils;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.language.LangBehavior;
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBaseRegion;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.AcsTaskDto;

View File

@@ -57,6 +57,11 @@ public class IOSConstant {
*/
public final static String MOVE_CONFIG_TASK = "MoveTask";
/**
* 移库点位任务类编码
*/
public final static String MOVE_POINT_CONFIG_TASK = "MovePointTask";
/**
* 余料回库任务类编码
*/

View File

@@ -12,35 +12,35 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.collections4.CollectionUtils;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.config.language.LangProcess;
import org.nl.language.LangBehavior;
import org.nl.config.SpringContextHolder;
import org.nl.language.LangBehavior;
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
import org.nl.wms.basedata_manage.service.IBsrealStorattrService;
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleextService;
import org.nl.wms.basedata_manage.service.ISectattrService;
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.BsrealStorattr;
import org.nl.wms.basedata_manage.service.dao.Sectattr;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper;
import org.nl.wms.basedata_manage.service.dto.MdPbStoragevehicleextDto;
import org.nl.wms.basedata_manage.service.dto.StrategyStructMaterialVO;
import org.nl.wms.basedata_manage.service.dto.StrategyStructParam;
import org.nl.wms.basedata_manage.service.dto.StructattrChangeDto;
import org.nl.wms.pm_manage.service.IPmFormDataService;
import org.nl.wms.pm_manage.service.dao.PmFormData;
import org.nl.wms.pm_manage.service.dao.mapper.PmFormDataMapper;
import org.nl.wms.sch_manage.enums.TaskEnum;
import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.dao.mapper.SchBasePointMapper;
import org.nl.wms.sch_manage.service.util.tasks.MovePointTask;
import org.nl.wms.sch_manage.service.util.tasks.StOutTask;
import org.nl.wms.warehouse_manage.enums.IOSConstant;
import org.nl.wms.warehouse_manage.enums.IOSEnum;
@@ -53,10 +53,8 @@ import org.nl.wms.warehouse_manage.service.dao.IOStorInvDtl;
import org.nl.wms.warehouse_manage.service.dao.mapper.IOStorInvDisMapper;
import org.nl.wms.warehouse_manage.service.dao.mapper.IOStorInvDtlMapper;
import org.nl.wms.warehouse_manage.service.dao.mapper.IOStorInvMapper;
import org.nl.wms.warehouse_manage.service.dao.mapper.MdPbGroupplateMapper;
import org.nl.wms.warehouse_manage.service.dto.IOStorInvDisDto;
import org.nl.wms.warehouse_manage.service.dto.IOStorInvDtlDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -437,14 +435,19 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
lock_map.put("inv_type", ioStorInv.getBill_type());
lock_map.put("lock_type", IOSEnum.LOCK_TYPE.code("出库锁"));
iStructattrService.updateStatusByCode("0",lock_map);
//更新组盘表冻结数量状态
iMdPbGroupPlateService.update(new LambdaUpdateWrapper<GroupPlate>()
.set(GroupPlate::getFrozen_qty, outAllocation.getFrozen_qty())
.set(GroupPlate::getUpdate_time, now)
.eq(GroupPlate::getStoragevehicle_code, outAllocation.getStoragevehicle_code())
.eq(GroupPlate::getPcsn, outAllocation.getPcsn())
.eq(GroupPlate::getMaterial_id, outAllocation.getMaterial_id())
.eq(GroupPlate::getStatus,IOSEnum.GROUP_PLATE_STATUS.code("入库")));
//更新库存 加冻结减可用
List<JSONObject> updateIvtList = new ArrayList<>();
JSONObject jsonIvt = new JSONObject();
jsonIvt.put("type", IOSConstant.UPDATE_IVT_TYPE_ADD_FROZEN);
jsonIvt.put("storagevehicle_code", outAllocation.getStoragevehicle_code());
jsonIvt.put("material_id", outAllocation.getMaterial_id());
jsonIvt.put("pcsn",outAllocation.getPcsn());
jsonIvt.put("qty_unit_id", dtl.getQty_unit_id());
jsonIvt.put("qty_unit_name", dtl.getQty_unit_name());
jsonIvt.put("change_qty", outAllocation.getFrozen_qty());
updateIvtList.add(jsonIvt);
iMdPbGroupPlateService.updateIvt(updateIvtList);
//生成分配明细
ioStorInvDisMapper.insert(ioStorInvDis);
allocation_canuse_qty = allocation_canuse_qty.add(outAllocation.getFrozen_qty());
@@ -994,17 +997,61 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
task_form.put("floor_code",floor_code);
task_form.put("vehicle_code", ioStorInvDis.getStoragevehicle_code());
StOutTask stOutTask = SpringContextHolder.getBean("STOutTask");
String task_id = stOutTask.create(task_form);
iMdPbGroupPlateService.update(new LambdaUpdateWrapper<GroupPlate>()
.set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"))
.set(GroupPlate::getUpdate_time, DateUtil.now())
.eq(GroupPlate::getStoragevehicle_code, ioStorInvDis.getStoragevehicle_code()));
//分配明细表更新任务相关数据
//通过托盘编码查询,如果冻结数<总数,则表明需要去分拣区
List<GroupPlate> groupPlates = iMdPbGroupPlateService.list(new QueryWrapper<GroupPlate>()
.eq("storagevehicle_code", ioStorInvDis.getStoragevehicle_code())
.eq("status",IOSEnum.GROUP_PLATE_STATUS.code("入库")));
if(CollectionUtils.isEmpty(groupPlates)){
throw new BadRequestException("找不到托盘"+ioStorInvDis.getStoragevehicle_code());
}
if(groupPlates.get(0).getQty().compareTo(ioStorInvDis.getPlan_qty())>0) {
ioStorInvDis.setIs_issued(BaseDataEnum.IS_YES_NOT.code(""));
}
String task_id ="";
if(BaseDataEnum.IS_YES_NOT.code("").equals(ioStorInvDis.getIs_issued())) {
StOutTask stOutTask = SpringContextHolder.getBean("STOutTask");
task_id = stOutTask.create(task_form);
}
else { //如果出库数量和托盘数量不相同,则移库到分拣区
MovePointTask movePointTask = SpringContextHolder.getBean("MovePointTask");
task_form.put("config_code", IOSConstant.MOVE_POINT_CONFIG_TASK);
task_form.put("point_code1",ioStorInvDis.getStruct_code());
//通过方法计算
//todo
List<Structattr> structattrList = iStructattrService.list(new LambdaUpdateWrapper<Structattr>()
.eq(Structattr::getSect_code,"FJOutboundSorting")
.eq(Structattr::getIs_used, 1)
.isNull(Structattr::getStoragevehicle_code)
.eq(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.orderByDesc(Structattr::getUpdate_time));
if(CollectionUtils.isEmpty(structattrList)){
throw new BadRequestException("出库分拣区库位不足,请先清理后再执行");
}
JSONObject lock_map = new JSONObject();
lock_map.put("struct_code", structattrList.get(0).getStruct_code());
lock_map.put("lock_type", IOSEnum.LOCK_TYPE.code("入库锁"));
iStructattrService.updateStatusByCode("0", lock_map);
task_form.put("point_code2",structattrList.get(0).getStruct_code());
task_form.put("vehicle_code", ioStorInvDis.getStoragevehicle_code());
task_form.put("Priority", TaskEnum.ACS_PRIORITY.code("1"));
task_id = movePointTask.create(task_form);
}
IOStorInvDis dis = new IOStorInvDis();
dis.setIostorinvdis_id(ioStorInvDis.getIostorinvdis_id());
//分配明细表更新任务相关数据
dis.setPoint_code(point_code);
dis.setWork_status(IOSEnum.INBILL_DIS_STATUS.code("生成"));
dis.setTask_id(task_id);
dis.setIs_issued(BaseDataEnum.IS_YES_NOT.code(""));
dis.setPoint_code(point_code);
dis.setFloor_code(floor_code);
ioStorInvDisMapper.updateById(dis);
}

View File

@@ -18,7 +18,6 @@ import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.config.SpringContextHolder;
import org.nl.config.language.LangProcess;
import org.nl.language.LangBehavior;
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
import org.nl.wms.basedata_manage.service.IBsrealStorattrService;
@@ -872,7 +871,11 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
// 查询所有库区
List<Sectattr> allSects = iSectattrService.list(new LambdaQueryWrapper<>(Sectattr.class)
.eq(Sectattr::getIs_delete,"0")
.ne(Sectattr::getSect_code,"SSX"));
.eq(Sectattr::getSect_code,"FJ01")
.ne(Sectattr::getSect_code,"SSX")
.ne(Sectattr::getSect_code,"FJOutboundSorting")
.ne(Sectattr::getSect_code,"FJError")
.ne(Sectattr::getSect_code,"FJWaitingMaterial"));
if (CollectionUtils.isEmpty(allSects)) {
throw new BadRequestException(LangBehavior.language("warehouse_manage.cannot_find_available_sector"));
}

View File

@@ -928,7 +928,33 @@ var config = {
"task_code": "任务号"
},
"outbill": {
"outbound_weight":"出库重量",
"edit_out_bill":"出库单编辑",
"out_detail":"出库明细",
"quantity":"数量",
"material_list":"用料清单物料",
"manual_add_material":"手工添加物料",
"divide_allocation":"出库分配",
"outbound_details":"出库明细",
"allocation_area":"分配库区",
"allocation_all":"全部分配",
"cancel_all":"全部取消",
"auto_allocation":"自动分配",
"auto_cancel":"自动取消",
"manual_allocation":"手工分配",
"set_all":"一键设置",
"assigned_qty":"已分配重量",
"unassigned_qty":"未分配重量",
"allocation_details":"分配明细",
"to_be_allocated":"待分配",
"allocated":"已分配",
"outbound_point":"出库点",
"target_floor":"目的楼层",
"vehicle_material_details":"载具物料明细",
"allocation_success":"分配成功",
"please_select_point":"请先选择站点",
"please_select_floor":"请先选择楼层",
"set_success":"设置成功",
"warehouse_area":"库区",
"auto_allocate_location":"自动分配货位",
"allocate_location":"分配货位",
@@ -1053,6 +1079,14 @@ var config = {
"operation": "操作"
},
"common": {
"Close":"关闭",
"material_code":"物料编码",
"material_name":"物料名称",
"vehicle_code":"托盘号",
"position_code":"仓位编码",
"position_name":"仓位名称",
"storage_time":"入库时间",
"task_code":"任务号",
"status": "状态",
"unit":"单位",
"all":"全部",

View File

@@ -69,6 +69,17 @@
class="filter-item"
/>
</el-form-item>
<el-form-item :label="$t('wms.pm_manage.form_data.vehicle_code')">
<el-input
v-model="query.vehicle_code"
clearable
style="width: 250px"
size="mini"
:placeholder="$t('wms.pm_manage.form_data.vehicle_code')"
prefix-icon="el-icon-search"
class="filter-item"
/>
</el-form-item>
<el-form-item :label="$t('wms.pm_manage.form_data.form_date')" prop="analyseData">
<el-date-picker
v-model="query.datepick"
@@ -172,7 +183,7 @@
:data="crud.data"
>
<el-table-column type="selection" width="55" />
<el-table-column prop="code" :label="$t('wms.pm_manage.form_data.code')" show-overflow-tooltip width="120">
<el-table-column prop="code" :label="$t('wms.pm_manage.form_data.code')" show-overflow-tooltip width="160">
<template slot-scope="scope">
<el-link v-if="scope.row.hasChildren" type="warning" @click="toView(scope.row)">{{
scope.row.code
@@ -183,12 +194,12 @@
</el-table-column>
<el-table-column show-overflow-tooltip prop="form_type" min-width="120" :formatter="bill_typeFormat" :label="$t('wms.pm_manage.form_data.form_type')" />
<el-table-column show-overflow-tooltip prop="stor_name" min-width="120" :label="$t('wms.pm_manage.form_data.warehouse')" />
<el-table-column prop="qty" :label="$t('wms.pm_manage.form_data.form_material_qty')" show-overflow-tooltip />
<el-table-column prop="qty" :label="$t('wms.pm_manage.form_data.form_material_qty')" show-overflow-tooltip width="120" />
<el-table-column prop="actual_qty" :label="$t('wms.pm_manage.form_data.actual_qty')" show-overflow-tooltip width="120" />
<el-table-column prop="vehicle_code" :label="$t('wms.pm_manage.form_data.vehicle_code')" show-overflow-tooltip width="220" />
<el-table-column prop="material_code" :label="$t('wms.pm_manage.form_data.material_code')" show-overflow-tooltip :min-width="flexWidth('material_code',crud.data,'物料编码')" />
<el-table-column prop="material_name" :label="$t('wms.pm_manage.form_data.material_name')" show-overflow-tooltip :min-width="flexWidth('material_name',crud.data,'物料名称')" />
<el-table-column prop="material_spec" :label="$t('wms.pm_manage.form_data.material_spec')" show-overflow-tooltip :min-width="flexWidth('material_spec',crud.data,'物料规格')" />
<el-table-column prop="vehicle_code" :label="$t('wms.pm_manage.form_data.vehicle_code')" show-overflow-tooltip width="220" />
<el-table-column prop="pcsn" :label="$t('wms.pm_manage.form_data.pcsn')" show-overflow-tooltip width="120" />
<el-table-column prop="unit_name" :label="$t('wms.pm_manage.form_data.unit')" show-overflow-tooltip width="120" />
<el-table-column prop="source_form_date" :label="$t('wms.pm_manage.form_data.source_form_date')" show-overflow-tooltip width="120" />

View File

@@ -52,6 +52,16 @@
class="filter-item"
/>
</el-form-item>
<el-form-item :label="$t('wms.statement.structivt.vehicle_number')">
<el-input
v-model="query.storagevehicle_code"
clearable
size="small"
:placeholder="$t('wms.statement.structivt.vehicle_number')"
style="width: 200px;"
class="filter-item"
/>
</el-form-item>
<rrOperation :crud="crud" />
</el-form>
</div>
@@ -82,10 +92,10 @@
<el-table-column prop="struct_name" :label="$t('wms.statement.structivt.location_name')" :min-width="flexWidth('struct_name',crud.data,'仓位名称')" />
<el-table-column prop="stor_name" :label="$t('wms.statement.structivt.warehouse')" :min-width="flexWidth('stor_name',crud.data,'仓库')" />
<el-table-column prop="sect_name" :label="$t('wms.statement.structivt.warehouse_area')" :min-width="flexWidth('sect_name',crud.data,'库区')" />
<el-table-column prop="storagevehicle_code" :label="$t('wms.statement.structivt.vehicle_number')" :min-width="flexWidth('storagevehicle_code',crud.data,'载具号')" />
<el-table-column prop="material_code" :label="$t('wms.statement.structivt.material_code')" :min-width="flexWidth('material_code',crud.data,'物料编码')" />
<el-table-column prop="material_name" :label="$t('wms.statement.structivt.material_name')" :min-width="flexWidth('material_name',crud.data,'物料名称')" />
<el-table-column prop="pcsn" :label="$t('wms.statement.structivt.batch_number')" :min-width="flexWidth('pcsn',crud.data,'批次号')" />
<el-table-column prop="storagevehicle_code" :label="$t('wms.statement.structivt.vehicle_number')" :min-width="flexWidth('storagevehicle_code',crud.data,'载具号')" />
<el-table-column prop="qty" :label="$t('wms.statement.structivt.stock_quantity')" :formatter="crud.formatNum3" :min-width="100" />
<el-table-column prop="frozen_qty" :label="$t('wms.statement.structivt.frozen_quantity')" :formatter="crud.formatNum3" :min-width="100" />
<el-table-column prop="qty_unit_name" :label="$t('wms.statement.structivt.measurement_unit')" :min-width="flexWidth('qty_unit_name',crud.data,'计量单位')" />