diff --git a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/enums/CommonStatusEnum.java b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/enums/CommonStatusEnum.java index 9be2626f4..b2e00363e 100644 --- a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/enums/CommonStatusEnum.java +++ b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/enums/CommonStatusEnum.java @@ -1,11 +1,11 @@ package com.cf.imes.framework.common.enums; -import cn.hutool.core.util.ObjUtil; import com.cf.imes.framework.common.core.IntArrayValuable; import lombok.AllArgsConstructor; import lombok.Getter; import java.util.Arrays; +import java.util.Objects; /** * 通用状态枚举 @@ -36,11 +36,11 @@ public enum CommonStatusEnum implements IntArrayValuable { } public static boolean isEnable(Integer status) { - return ObjUtil.equal(ENABLE.status, status); + return Objects.equals(ENABLE.status, status); } public static boolean isDisable(Integer status) { - return ObjUtil.equal(DISABLE.status, status); + return Objects.equals(DISABLE.status, status); } } diff --git a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/collection/ArrayUtils.java b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/collection/ArrayUtils.java index 2666a323e..ab8a78432 100644 --- a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/collection/ArrayUtils.java +++ b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/collection/ArrayUtils.java @@ -1,6 +1,6 @@ package com.cf.imes.framework.common.util.collection; -import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.IterUtil; import cn.hutool.core.util.ArrayUtil; @@ -8,8 +8,6 @@ import java.util.Collection; import java.util.function.Consumer; import java.util.function.Function; -import static com.cf.imes.framework.common.util.collection.CollectionUtils.convertList; - /** * Array 工具类 * @@ -42,7 +40,7 @@ public class ArrayUtils { @SuppressWarnings("unchecked") public static T[] toArray(Collection from) { - if (CollectionUtil.isEmpty(from)) { + if (CollUtil.isEmpty(from)) { return (T[]) (new Object[0]); } return ArrayUtil.toArray(from, (Class) IterUtil.getElementType(from.iterator())); diff --git a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/collection/CollectionUtils.java b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/collection/CollectionUtils.java index 834d8d032..baa5407e2 100644 --- a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/collection/CollectionUtils.java +++ b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/collection/CollectionUtils.java @@ -254,7 +254,7 @@ public class CollectionUtils { } public static T getFirst(List from) { - return !CollectionUtil.isEmpty(from) ? from.get(0) : null; + return !CollUtil.isEmpty(from) ? from.get(0) : null; } public static T findFirst(List from, Predicate predicate) { diff --git a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/collection/MapUtils.java b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/collection/MapUtils.java index 579456af6..6a5a923d3 100644 --- a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/collection/MapUtils.java +++ b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/collection/MapUtils.java @@ -1,7 +1,6 @@ package com.cf.imes.framework.common.util.collection; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.collection.CollectionUtil; import com.cf.imes.framework.common.core.KeyValue; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; @@ -30,7 +29,7 @@ public class MapUtils { List result = new ArrayList<>(); keys.forEach(k -> { Collection values = multimap.get(k); - if (CollectionUtil.isEmpty(values)) { + if (CollUtil.isEmpty(values)) { return; } result.addAll(values); diff --git a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/http/HttpUtils.java b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/http/HttpUtils.java index 28c954326..08d42e397 100644 --- a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/http/HttpUtils.java +++ b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/http/HttpUtils.java @@ -3,8 +3,8 @@ package com.cf.imes.framework.common.util.http; import cn.hutool.core.codec.Base64; import cn.hutool.core.map.TableMap; import cn.hutool.core.net.url.UrlBuilder; +import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.ReflectUtil; -import cn.hutool.core.util.StrUtil; import org.springframework.util.StringUtils; import org.springframework.web.util.UriComponents; import org.springframework.web.util.UriComponentsBuilder; @@ -104,11 +104,11 @@ public class HttpUtils { String clientSecret; // 先从 Header 中获取 String authorization = request.getHeader("Authorization"); - authorization = StrUtil.subAfter(authorization, "Basic ", true); + authorization = CharSequenceUtil.subAfter(authorization, "Basic ", true); if (StringUtils.hasText(authorization)) { authorization = Base64.decodeStr(authorization); - clientId = StrUtil.subBefore(authorization, ":", false); - clientSecret = StrUtil.subAfter(authorization, ":", false); + clientId = CharSequenceUtil.subBefore(authorization, ":", false); + clientSecret = CharSequenceUtil.subAfter(authorization, ":", false); // 再从 Param 中获取 } else { clientId = request.getParameter("client_id"); @@ -116,7 +116,7 @@ public class HttpUtils { } // 如果两者非空,则返回 - if (StrUtil.isNotEmpty(clientId) && StrUtil.isNotEmpty(clientSecret)) { + if (CharSequenceUtil.isNotEmpty(clientId) && CharSequenceUtil.isNotEmpty(clientSecret)) { return new String[]{clientId, clientSecret}; } return null; diff --git a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/io/FileUtils.java b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/io/FileUtils.java index 726739395..b83ec9580 100644 --- a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/io/FileUtils.java +++ b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/io/FileUtils.java @@ -3,8 +3,8 @@ package com.cf.imes.framework.common.util.io; import cn.hutool.core.io.FileTypeUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.file.FileNameUtil; +import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.digest.DigestUtil; import lombok.SneakyThrows; @@ -73,9 +73,9 @@ public class FileUtils { public static String generatePath(byte[] content, String originalName) { String sha256Hex = DigestUtil.sha256Hex(content); // 情况一:如果存在 name,则优先使用 name 的后缀 - if (StrUtil.isNotBlank(originalName)) { + if (CharSequenceUtil.isNotBlank(originalName)) { String extName = FileNameUtil.extName(originalName); - return StrUtil.isBlank(extName) ? sha256Hex : sha256Hex + "." + extName; + return CharSequenceUtil.isBlank(extName) ? sha256Hex : sha256Hex + "." + extName; } // 情况二:基于 content 计算 return sha256Hex + '.' + FileTypeUtil.getType(new ByteArrayInputStream(content)); diff --git a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/json/JsonUtils.java b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/json/JsonUtils.java index af9944763..31c0bd586 100644 --- a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/json/JsonUtils.java +++ b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/json/JsonUtils.java @@ -1,6 +1,7 @@ package com.cf.imes.framework.common.util.json; -import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.core.util.PrimitiveArrayUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.fasterxml.jackson.annotation.JsonInclude; @@ -68,7 +69,7 @@ public class JsonUtils { } public static T parseObject(String text, Class clazz) { - if (StrUtil.isEmpty(text)) { + if (CharSequenceUtil.isEmpty(text)) { return null; } try { @@ -80,7 +81,7 @@ public class JsonUtils { } public static T parseObject(String text, String path, Class clazz) { - if (StrUtil.isEmpty(text)) { + if (CharSequenceUtil.isEmpty(text)) { return null; } try { @@ -94,7 +95,7 @@ public class JsonUtils { } public static T parseObject(String text, Type type) { - if (StrUtil.isEmpty(text)) { + if (CharSequenceUtil.isEmpty(text)) { return null; } try { @@ -115,14 +116,14 @@ public class JsonUtils { * @return 对象 */ public static T parseObject2(String text, Class clazz) { - if (StrUtil.isEmpty(text)) { + if (CharSequenceUtil.isEmpty(text)) { return null; } return JSONUtil.toBean(text, clazz); } public static T parseObject(byte[] bytes, Class clazz) { - if (ArrayUtil.isEmpty(bytes)) { + if (PrimitiveArrayUtil.isEmpty(bytes)) { return null; } try { diff --git a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/pinyin/PinYinUtils.java b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/pinyin/PinYinUtils.java index ef231afd4..76522a0cb 100644 --- a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/pinyin/PinYinUtils.java +++ b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/pinyin/PinYinUtils.java @@ -1,11 +1,15 @@ package com.cf.imes.framework.common.util.pinyin; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ArrayUtil; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; +import java.util.Arrays; + /** * @author there */ @@ -52,7 +56,10 @@ public class PinYinUtils { for (int i = 0; i < newChar.length; i++) { if (newChar[i] > 128) { try { - pinyinStr += PinyinHelper.toHanyuPinyinStringArray(newChar[i], defaultFormat)[0].charAt(0); + String[] hanyuPinyinStringArray = PinyinHelper.toHanyuPinyinStringArray(newChar[i], defaultFormat); + if (ArrayUtil.isNotEmpty(hanyuPinyinStringArray)) { + pinyinStr += hanyuPinyinStringArray[0].charAt(0); + } } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } diff --git a/cf-framework/cf-spring-boot-starter-elasticsearch/src/main/java/com/cf/imes/framework/es/config/ChenfengElasticsearchAutoConfiguration.java b/cf-framework/cf-spring-boot-starter-elasticsearch/src/main/java/com/cf/imes/framework/es/config/ChenfengElasticsearchAutoConfiguration.java index 48a4b2a63..6c4b9752f 100644 --- a/cf-framework/cf-spring-boot-starter-elasticsearch/src/main/java/com/cf/imes/framework/es/config/ChenfengElasticsearchAutoConfiguration.java +++ b/cf-framework/cf-spring-boot-starter-elasticsearch/src/main/java/com/cf/imes/framework/es/config/ChenfengElasticsearchAutoConfiguration.java @@ -4,16 +4,42 @@ import co.elastic.clients.elasticsearch.ElasticsearchAsyncClient; import co.elastic.clients.elasticsearch.ElasticsearchClient; import co.elastic.clients.json.jackson.JacksonJsonpMapper; import co.elastic.clients.transport.rest_client.RestClientTransport; +import com.cf.imes.framework.common.util.encrypt.AesUtils; import com.cf.imes.framework.es.core.service.ESDocumentService; import com.cf.imes.framework.es.core.service.ESDocumentServiceImpl; +import lombok.extern.slf4j.Slf4j; import org.apache.http.HttpHost; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.CredentialsProvider; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.conn.ssl.NoopHostnameVerifier; +import org.apache.http.impl.client.BasicCredentialsProvider; +import org.apache.http.impl.nio.client.HttpAsyncClientBuilder; +import org.apache.http.ssl.SSLContextBuilder; +import org.apache.http.ssl.SSLContexts; import org.elasticsearch.client.RestClient; +import org.elasticsearch.client.RestClientBuilder; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; +import org.springframework.core.io.ClassPathResource; import org.springframework.util.StringUtils; +import javax.net.ssl.SSLContext; +import java.io.IOException; +import java.io.InputStream; +import java.security.KeyManagementException; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.Certificate; +import java.security.cert.CertificateException; +import java.security.cert.CertificateFactory; + /** * @author there @@ -21,20 +47,19 @@ import org.springframework.util.StringUtils; @AutoConfiguration @ConditionalOnClass(ElasticsearchClient.class) @EnableConfigurationProperties(EsProperties.class) +@Slf4j public class ChenfengElasticsearchAutoConfiguration { - //超时时间设置 - public static final int DEFAULT_CONNECT_TIMEOUT_MILLIS = 10000; - public static final int DEFAULT_SOCKET_TIMEOUT_MILLIS = 300000; - public static final int DEFAULT_CONNECT_REQUEST_TIMEOUT_MILLIS = 1000; + @Value("${chenfeng.encrypt.publicKey:}") + private String publicKey; /** * 同步方式 * */ @Bean - public ElasticsearchClient elasticsearchClient(EsProperties properties) { - return new ElasticsearchClient(getTransport(properties.getUris())); + public ElasticsearchClient elasticsearchClient(RestClientTransport transport) { + return new ElasticsearchClient(transport); } /** @@ -42,44 +67,110 @@ public class ChenfengElasticsearchAutoConfiguration { * */ @Bean - public ElasticsearchAsyncClient elasticsearchAsyncClient(EsProperties properties) { - return new ElasticsearchAsyncClient(getTransport(properties.getUris())); + public ElasticsearchAsyncClient elasticsearchAsyncClient(RestClientTransport transport) { + return new ElasticsearchAsyncClient(transport); } @Bean - private ESDocumentService esDocumentService(ElasticsearchClient elasticsearchClient, ElasticsearchAsyncClient elasticsearchAsyncClient) { + public ESDocumentService esDocumentService(ElasticsearchClient elasticsearchClient, ElasticsearchAsyncClient elasticsearchAsyncClient) { return new ESDocumentServiceImpl(elasticsearchClient, elasticsearchAsyncClient); } /** * 获取客户端 RestClientTransport */ - private RestClientTransport getTransport(String hosts){ - HttpHost[] httpHosts = toHttpHost(hosts); - RestClient restClient = getRestClient(httpHosts); - return new RestClientTransport(restClient, new JacksonJsonpMapper()); + @Bean + public RestClientTransport getTransport(RestClient client){ + return new RestClientTransport(client, new JacksonJsonpMapper()); } + /** * 获取客户端RestClient - * @param httpHosts http数组 + * chenfeng.encrypt.enable:true + * + * @param properties es配置 */ - private RestClient getRestClient(HttpHost[] httpHosts){ - return RestClient.builder(httpHosts).setRequestConfigCallback(requestConfigBuilder -> { - requestConfigBuilder.setConnectTimeout(DEFAULT_CONNECT_TIMEOUT_MILLIS); - requestConfigBuilder.setSocketTimeout(DEFAULT_SOCKET_TIMEOUT_MILLIS); - requestConfigBuilder.setConnectionRequestTimeout(DEFAULT_CONNECT_REQUEST_TIMEOUT_MILLIS); + @Bean + @ConditionalOnProperty(name = "chenfeng.encrypt.enable", havingValue = "true") + public RestClient getAuthRestClient(EsProperties properties) { + // 配置账号密码 + final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); + credentialsProvider.setCredentials(AuthScope.ANY, + new UsernamePasswordCredentials(AesUtils.decrypt(properties.getUsername(), publicKey), AesUtils.decrypt(properties.getPassword(), publicKey))); + RestClientBuilder.HttpClientConfigCallback httpClientConfigCallback = httpClientBuilder -> { + // 设置账号密码、连接信息 + HttpAsyncClientBuilder httpAsyncClientBuilder = httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider) + .setDefaultRequestConfig(RequestConfig.custom() + .setConnectTimeout(properties.getConnectionTimeout().toSecondsPart()) + .setSocketTimeout(properties.getSocketTimeout().toSecondsPart()) + .setConnectionRequestTimeout(properties.getConnectionRequestTimeout().toSecondsPart()) + .build()); + if (properties.isSecurityHttpSslEnable()) { + // 开启ssl配置连接证书 + httpAsyncClientBuilder.setSSLContext(buildSSLContext()).setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE); + } + return httpAsyncClientBuilder; + }; + return RestClient.builder(toHttpHost(properties.getUris(), properties.isSecurityHttpSslEnable())).setHttpClientConfigCallback(httpClientConfigCallback).build(); + } + + /** + * 获取客户端RestClient(默认) + * chenfeng.encrypt.enable:false或者缺省 + * + * @param properties es配置 + */ + @Bean + @ConditionalOnProperty(name = "chenfeng.encrypt.enable", havingValue = "false", matchIfMissing = true) + public RestClient getRestClient(EsProperties properties) { + return RestClient.builder(toHttpHost(properties.getUris(), properties.isSecurityHttpSslEnable())).setRequestConfigCallback(requestConfigBuilder -> { + requestConfigBuilder.setConnectTimeout(properties.getConnectionTimeout().toSecondsPart()); + requestConfigBuilder.setSocketTimeout(properties.getSocketTimeout().toSecondsPart()); + requestConfigBuilder.setConnectionRequestTimeout(properties.getConnectionRequestTimeout().toSecondsPart()); return requestConfigBuilder; }).build(); } /** - * 解析配置的字符串hosts,转为HttpHost对象数组 + * 构建ssl请求信息 + * + * @return */ - private HttpHost[] toHttpHost(String hosts) { + private SSLContext buildSSLContext() { + SSLContext sslContext = null; + try { + ClassPathResource resource = new ClassPathResource("http_ca.crt"); + CertificateFactory factory = CertificateFactory.getInstance("X.509"); + Certificate trustedCa; + try (InputStream is = resource.getInputStream()) { + trustedCa = factory.generateCertificate(is); + } + KeyStore trustStore = KeyStore.getInstance("pkcs12"); + trustStore.load(null, null); + trustStore.setCertificateEntry("ca", trustedCa); + SSLContextBuilder sslContextBuilder = SSLContexts.custom() + .loadTrustMaterial(trustStore, null); + sslContext = sslContextBuilder.build(); + } catch (CertificateException | IOException | KeyStoreException | NoSuchAlgorithmException | + KeyManagementException e) { + log.error("ES连接认证失败", e); + } + return sslContext; + } + + + /** + * 解析域名 + * + * @param hosts 域名字符串 + * @param isSslEnable 是否开启ssl + * @return + */ + private HttpHost[] toHttpHost(String hosts, boolean isSslEnable) { if (!StringUtils.hasLength(hosts)) { - throw new RuntimeException("invalid elasticsearch configuration. elasticsearch.hosts不能为空!"); + throw new IllegalArgumentException("invalid elasticsearch configuration. elasticsearch.hosts不能为空!"); } // 多个IP逗号隔开 String[] hostArray = hosts.split(","); @@ -87,14 +178,9 @@ public class ChenfengElasticsearchAutoConfiguration { HttpHost httpHost; for (int i = 0; i < hostArray.length; i++) { String[] strings = hostArray[i].split(":"); - httpHost = new HttpHost(strings[0], Integer.parseInt(strings[1]), "http"); + httpHost = new HttpHost(strings[0], Integer.parseInt(strings[1]), isSslEnable ? "https" : "http"); httpHosts[i] = httpHost; } - return httpHosts; } - - - - } diff --git a/cf-framework/cf-spring-boot-starter-elasticsearch/src/main/java/com/cf/imes/framework/es/config/EsProperties.java b/cf-framework/cf-spring-boot-starter-elasticsearch/src/main/java/com/cf/imes/framework/es/config/EsProperties.java index 8030fc5d3..5dfd0a99f 100644 --- a/cf-framework/cf-spring-boot-starter-elasticsearch/src/main/java/com/cf/imes/framework/es/config/EsProperties.java +++ b/cf-framework/cf-spring-boot-starter-elasticsearch/src/main/java/com/cf/imes/framework/es/config/EsProperties.java @@ -2,12 +2,46 @@ package com.cf.imes.framework.es.config; import org.springframework.boot.context.properties.ConfigurationProperties; +import java.time.Duration; + /** * es环境配置 * @author there */ @ConfigurationProperties(prefix = "spring.elasticsearch") public class EsProperties { + private String uris; + + /** + * Username for authentication with Elasticsearch. + */ + private String username; + + /** + * Password for authentication with Elasticsearch. + */ + private String password; + + /** + * Connection timeout used when communicating with Elasticsearch. + */ + private Duration connectionTimeout = Duration.ofSeconds(10); + + /** + * Socket timeout used when communicating with Elasticsearch. + */ + private Duration socketTimeout = Duration.ofSeconds(30); + + + private Duration connectionRequestTimeout = Duration.ofSeconds(1); + + /** + * Prefix added to the path of every request sent to Elasticsearch. + */ + private String pathPrefix; + + private boolean securityHttpSslEnable = false; + public String getUris() { return uris; } @@ -16,5 +50,59 @@ public class EsProperties { this.uris = uris; } - private String uris; + public String getUsername() { + return this.username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return this.password; + } + + public void setPassword(String password) { + this.password = password; + } + + public Duration getConnectionTimeout() { + return this.connectionTimeout; + } + + public void setConnectionTimeout(Duration connectionTimeout) { + this.connectionTimeout = connectionTimeout; + } + + public Duration getSocketTimeout() { + return this.socketTimeout; + } + + public void setSocketTimeout(Duration socketTimeout) { + this.socketTimeout = socketTimeout; + } + + public String getPathPrefix() { + return this.pathPrefix; + } + + public void setPathPrefix(String pathPrefix) { + this.pathPrefix = pathPrefix; + } + + public boolean isSecurityHttpSslEnable() { + return securityHttpSslEnable; + } + + public void setSecurityHttpSslEnable(boolean securityHttpSslEnable) { + this.securityHttpSslEnable = securityHttpSslEnable; + } + + public Duration getConnectionRequestTimeout() { + return connectionRequestTimeout; + } + + public void setConnectionRequestTimeout(Duration connectionRequestTimeout) { + this.connectionRequestTimeout = connectionRequestTimeout; + } } diff --git a/cf-framework/cf-spring-boot-starter-mybatis/src/main/java/com/cf/imes/framework/datasource/config/ChenfengDataSourceEncryptConfiguration.java b/cf-framework/cf-spring-boot-starter-mybatis/src/main/java/com/cf/imes/framework/datasource/config/ChenfengDataSourceEncryptConfiguration.java index 5fa1cd56c..fe12fc47f 100644 --- a/cf-framework/cf-spring-boot-starter-mybatis/src/main/java/com/cf/imes/framework/datasource/config/ChenfengDataSourceEncryptConfiguration.java +++ b/cf-framework/cf-spring-boot-starter-mybatis/src/main/java/com/cf/imes/framework/datasource/config/ChenfengDataSourceEncryptConfiguration.java @@ -15,9 +15,9 @@ import org.springframework.context.annotation.Bean; */ @AutoConfiguration @AutoConfigureBefore(DynamicDataSourceAutoConfiguration.class) +@ConditionalOnProperty(name = "chenfeng.encrypt.enable", havingValue = "true") public class ChenfengDataSourceEncryptConfiguration { @Bean - @ConditionalOnProperty(name = "chenfeng.encrypt.enable", havingValue = "true") public DataSourceInitEvent getDataSourceInitEvent() { return new ChenfengDataSourceEncryptInitEvent(); } diff --git a/cf-framework/cf-spring-boot-starter-redis/src/main/java/com/cf/imes/framework/redis/config/ChenfengRedisEncryptAutoConfiguration.java b/cf-framework/cf-spring-boot-starter-redis/src/main/java/com/cf/imes/framework/redis/config/ChenfengRedisEncryptAutoConfiguration.java index f1cd7435b..490d1ad50 100644 --- a/cf-framework/cf-spring-boot-starter-redis/src/main/java/com/cf/imes/framework/redis/config/ChenfengRedisEncryptAutoConfiguration.java +++ b/cf-framework/cf-spring-boot-starter-redis/src/main/java/com/cf/imes/framework/redis/config/ChenfengRedisEncryptAutoConfiguration.java @@ -20,13 +20,13 @@ import org.springframework.util.StringUtils; * @since 2024/8/27 9:46 */ @AutoConfiguration +@ConditionalOnProperty(name = "chenfeng.encrypt.enable", havingValue = "true") public class ChenfengRedisEncryptAutoConfiguration { @Value("${chenfeng.encrypt.publicKey:}") private String publicKey; @Bean - @ConditionalOnProperty(name = "chenfeng.encrypt.enable", havingValue = "true") public RedissonAutoConfigurationCustomizer redissonAutoConfigurationCustomizer() { return configuration -> { Config redissonConfig = new Config(); diff --git a/cf-framework/cf-spring-boot-starter-security/src/main/java/com/cf/imes/framework/security/core/util/SecurityFrameworkUtils.java b/cf-framework/cf-spring-boot-starter-security/src/main/java/com/cf/imes/framework/security/core/util/SecurityFrameworkUtils.java index 4f26f0557..32a9caa1e 100644 --- a/cf-framework/cf-spring-boot-starter-security/src/main/java/com/cf/imes/framework/security/core/util/SecurityFrameworkUtils.java +++ b/cf-framework/cf-spring-boot-starter-security/src/main/java/com/cf/imes/framework/security/core/util/SecurityFrameworkUtils.java @@ -1,5 +1,6 @@ package com.cf.imes.framework.security.core.util; +import cn.hutool.core.util.ObjectUtil; import com.cf.imes.framework.common.exception.ServiceException; import com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants; import com.cf.imes.framework.security.core.LoginUser; @@ -132,4 +133,14 @@ public class SecurityFrameworkUtils { return loginUser.getOrganId(); } + + /** + * 当前用户是否超级管理员 + * + * @return + */ + public static boolean isSuperAdmin() { + LoginUser loginUser = getLoginUser(); + return ObjectUtil.isNotNull(loginUser) && loginUser.getIsSupAdmin(); + } } diff --git a/cf-module-infra/cf-module-infra-biz/src/main/resources/application.yaml b/cf-module-infra/cf-module-infra-biz/src/main/resources/application.yaml index 8041c9902..3f27b6988 100644 --- a/cf-module-infra/cf-module-infra-biz/src/main/resources/application.yaml +++ b/cf-module-infra/cf-module-infra-biz/src/main/resources/application.yaml @@ -157,5 +157,7 @@ chenfeng: - infra_job_log - infra_job_log - infra_data_source_config - + encrypt: + enable: false + publicKey: cfimes debug: false diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/PlanController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/PlanController.java index 34650b42c..fdac20122 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/PlanController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/PlanController.java @@ -64,14 +64,6 @@ public class PlanController { return success(planService.deletePlan(ids)); } -// @DeleteMapping("cancellation") -// @Operation(summary = "作废") -// @Parameter(name = "id", description = "排单id", required = true) -// @PreAuthorize("@ss.hasPermission('executor:plan:delete')") - public CommonResult cancellation(@RequestParam("id") Long id) { - return success(planService.cancellation(id)); - } - @GetMapping("/get") @Operation(summary = "获得排单") diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/saveOptimize/PrintOrderPackReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/saveOptimize/PrintOrderPackReqVO.java index 94a8e74b8..97b601ae3 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/saveOptimize/PrintOrderPackReqVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/saveOptimize/PrintOrderPackReqVO.java @@ -4,6 +4,8 @@ package com.cf.imes.module.executor.controller.admin.plan.saveOptimize; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.util.List; + @Schema(description = "管理后台 - 生产单包裹信息") @Data public class PrintOrderPackReqVO { @@ -14,7 +16,7 @@ public class PrintOrderPackReqVO { @Schema(description = "板材ID") - private Long plateId; + private List plateId; @Schema(description = "包裹编号") @@ -26,7 +28,7 @@ public class PrintOrderPackReqVO { @Schema(description = "包裹数量") - private Long packNum; + private Integer packNum; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/goods/GoodsMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/goods/GoodsMapper.java index efc83d2d5..5d185759e 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/goods/GoodsMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/goods/GoodsMapper.java @@ -8,6 +8,7 @@ import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.cf.imes.module.executor.controller.admin.goods.vo.GoodsPageReqVO; +import com.cf.imes.module.executor.controller.admin.plan.bo.OrderRoomBodyList; import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.NotPlanGoodsRespVO; import com.cf.imes.module.executor.controller.admin.plan.vo.*; import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO; @@ -82,16 +83,6 @@ public interface GoodsMapper extends BaseMapperX { IPage selectGoods(@Param("page") IPage page, @Param("goodsIds") List goodsIds, @Param("organId") Long organId); -// default GoodsDO selectId(Long orderId, Long goodsId, Long organId) { -// return selectOne(new LambdaQueryWrapperX() -// } -// default List selectGoodsPlateList(List goodIds, Long organId) { -// return selectList(new LambdaQueryWrapperX() -// .eq(GoodsDO::getOrganId, organId) -// .inIfPresent(GoodsDO::getOrderId, goodIds) -// .select(GoodsDO::getGoodsId,GoodsDO::getGoodsName, GoodsDO::getMaterial, GoodsDO::getColor, GoodsDO::getTexture,GoodsDO::getThickness, GoodsDO::getSpec)); -// } - List selectGoodsPlateList(@Param("goodIds") List goodIds,@Param("organId") Long organId); @@ -182,4 +173,35 @@ public interface GoodsMapper extends BaseMapperX { IPage selectPlanGoodsListByPlanId(@Param("page") IPage page, @Param(Constants.WRAPPER) Wrapper wrapper); + + List selectGoodsAndRemainPlate(@Param("ids") List ids,@Param("organId") Long organId); + + + IPage selectNoPlanOrderList(@Param("page") IPage page, @Param(Constants.WRAPPER) Wrapper wrapper); + + + + default int deletePlanGoods(List ids, Long organId) { + return update(new LambdaUpdateWrapper() + .set(GoodsDO::getPlanId, 0) + .eq(GoodsDO::getOrganId, organId) + .in(GoodsDO::getPlanId, ids)); + } + + + + default List selectPlanGoodsListByPlanIdList(List planIds, Long organId) { + return selectList(new LambdaQueryWrapperX() + .eq(GoodsDO::getOrganId, organId) + .eq(GoodsDO::getDeleted, false) + .in(GoodsDO::getPlanId,planIds) + .select(GoodsDO::getGoodsId,GoodsDO::getId,GoodsDO::getOrderId)); + + } + + + List selectPlateListByPlanId(@Param("planIds") List planIds, @Param("organId") Long organId); + + + List selectNoPlanRoomBody(@Param("orderIds") List orderIds, @Param("organId") Long organId); } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/order/OrderMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/order/OrderMapper.java index 4048dfcb8..b4fab3faa 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/order/OrderMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/order/OrderMapper.java @@ -251,4 +251,14 @@ public interface OrderMapper extends BaseMapperX { List selectGoodsListByGoodsId(@Param(Constants.WRAPPER) QueryWrapperX queryWrapperX); + + + default List selectNoPlanOrderList(Long organId, List statusList) { + return selectList(new LambdaQueryWrapperX() + .eqIfPresent(OrderDO::getOrganId, organId) + .eq(OrderDO::getDeleted, false) + .in(OrderDO::getStatus,statusList) + .select(OrderDO::getId)); + + } } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderBody/OrderBodyMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderBody/OrderBodyMapper.java index 281e508ec..4223189fe 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderBody/OrderBodyMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderBody/OrderBodyMapper.java @@ -131,10 +131,11 @@ public interface OrderBodyMapper extends BaseMapperX { - default List selectOrderBodyList(List bodyIds, Long organId) { + default List selectOrderBodyList(List bodyIds,List orderIds, Long organId) { return selectList(new LambdaQueryWrapperX() .eq(OrderBodyDO::getOrganId, organId) .eq(OrderBodyDO::getDeleted,false) + .in(OrderBodyDO::getOrderId,orderIds) .in(OrderBodyDO::getId, bodyIds) .select(OrderBodyDO::getId,OrderBodyDO::getName,OrderBodyDO::getRoomName)); } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderItem/OrderItemMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderItem/OrderItemMapper.java index c3aafb300..d28854a03 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderItem/OrderItemMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderItem/OrderItemMapper.java @@ -5,7 +5,6 @@ import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPlatesDetailRespVO; import com.cf.imes.module.executor.controller.admin.orderParts.vo.OrderPartsRespVO; -import com.cf.imes.module.executor.controller.admin.plan.bo.OrderRoomBodyList; import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.PrintOrderPackReqVO; import com.cf.imes.module.executor.controller.admin.plan.vo.OrderRespVOCopy; import com.cf.imes.module.executor.controller.admin.plate.vo.PlateDetailReqVO; @@ -60,7 +59,7 @@ public interface OrderItemMapper extends BaseMapperX { void deleteByPlateId(@Param("deletePlateIds") List deletePlateIds); - List selectPackList(@Param("orderIds") List orderIds, @Param("organId") Long organId); + List selectPackList(@Param("ids") List ids, @Param("organId") Long organId); default int deleteByBodyId(Long bodyId, Long organId) { @@ -81,8 +80,6 @@ public interface OrderItemMapper extends BaseMapperX { } - List selectRoomBodyByOrderId( @Param("orderIds") List orderIds, @Param("organId") Long organId); - default List selectPlateIdList(List plateIds, Long organId) { @@ -108,15 +105,6 @@ public interface OrderItemMapper extends BaseMapperX { IPage selectTestNum(@Param("page") IPage page,@Param("organId") Long organId); - - default List selectOrderPlateList(List plateIds, Long organId) { - return selectList(new LambdaQueryWrapperX() - .eq(OrderItemDO::getOrganId,organId) - .inIfPresent(OrderItemDO::getPlateId, plateIds) - .select(OrderItemDO::getBodyId,OrderItemDO::getRoomId,OrderItemDO::getGroupId,OrderItemDO::getPlateId)); - - } - - + List selectOrderPlateList(@Param("orderId") Long orderId,@Param("organId") Long organId); } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plate/PlateMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plate/PlateMapper.java index 91fbe697b..a6e0366eb 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plate/PlateMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plate/PlateMapper.java @@ -120,7 +120,6 @@ public interface PlateMapper extends BaseMapperX { List selectPlateIdListByBodyId(@Param("bodyId") Long bodyId, @Param("organId") Long organId); - List selectPlateListByPlanId(@Param("planIds") List planIds, @Param("organId") Long organId); // 根据需要删除的小板id查找具体信息 List selectPlateGoodsListByList(@Param("plates") List goodsIdList, @Param("orderId") Long orderId, @Param("organId") Long organId); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/remainplaten/RemainPlateMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/remainplaten/RemainPlateMapper.java index 51a56abdb..9c16c2d76 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/remainplaten/RemainPlateMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/remainplaten/RemainPlateMapper.java @@ -62,5 +62,14 @@ public interface RemainPlateMapper extends BaseMapperX { List selectTestSQL(@Param("filed") String filed,@Param("planId") Long planId,@Param("organId") Long organId); + + default int deletePlanRemainPlate(List ids, Long organId) { + return update(new LambdaUpdateWrapper() + .set(RemainPlateDO::getPlanId, 0) + .eq(RemainPlateDO::getOrganId, organId) + .in(RemainPlateDO::getPlanId, ids)); + } + + // List selectTestSQL(@Param("sql") String sql); } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanServiceImpl.java index 97957e57e..c1fb9f0ba 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanServiceImpl.java @@ -468,13 +468,8 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { OrderSource orderSource = new OrderSource(); -// List goodsDOS = goodsMapper.selectList(new LambdaQueryWrapperX() -// .eq(GoodsDO::getOrderId, orderId) -// ); - List goodsDOS = goodsMapper.selectGoodsList(orderId,getUserOrganId()); -// PlanDO planDO = planMapper.selectByOrderId(orderId); List plateDOS = plateMapper.selectPlateDetialList(orderId,getUserOrganId()); @@ -493,14 +488,6 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { } -// for (PlateDetialRespVO plateDetailsRespVO : plateDOS) { -// for (ProcessGroupList groupNameList : plateDetailsRespVO.getProcessGroupLists()) { -// plateDetailsRespVO.setProcessGroupName(groupNameList.getGroupName()); -// } -// -// } - - // 造型数据的尺寸长度 Integer orderModelSize = plateDOS.size(); @@ -515,13 +502,29 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { List optimizeBoardModelDOS = buildBoardByOrderId(orderId, ORDER_REMAIN_PLATE_MODEL, boardSize); + // 查询生产单对应的配件信息 + List printOrderPartsRespVOS = orderPartsMapper.selectPartList(Collections.singletonList(orderId), getUserOrganId()); + + + // 查询生产单对应的包裹信息 + List printOrderPackReqVOS = orderItemMapper.selectOrderPlateList(orderId, getUserOrganId()); + + + // 统计每个订单的包装数量 + printOrderPackReqVOS + .stream() + .filter(f->f + .getOrderId().equals(orderId)) + .forEach(f->f.setPackNum(printOrderPackReqVOS.stream().filter(e -> e.getOrderId().equals(orderId)).map(PrintOrderPackReqVO::getPackId).toList().size())); + -// orderSource.setPlan(planDO); orderSource.setOrderList(Collections.singletonList(orderDO)); orderSource.setPlateList(plateDOS); orderSource.setGoodsList(goodsDOS); orderSource.setPlateModels(orderModelDOS); orderSource.setOptimizeBoardModelDOS(optimizeBoardModelDOS); + orderSource.setOrderPartsRespVOS(printOrderPartsRespVOS); + orderSource.setOrderPackReqVOS(printOrderPackReqVOS); return orderSource; } @@ -547,27 +550,27 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { List plateDetialRespVOS = plateMapper.selectPlateListByGoodsIds(ids, getUserOrganId()); - List bodyIds = plateDetialRespVOS.stream().map(PlateDetialRespVO::getBodyId).distinct().toList(); - - - List orderBodyDOS = orderBodyMapper.selectOrderBodyList(bodyIds, getUserOrganId()); - - - List detialRespVOS = new ArrayList<>(); - - - for (OrderBodyDO orderBodyDO : orderBodyDOS) { - - detialRespVOS.addAll(plateDetialRespVOS.stream().filter(f -> f.getBodyId().equals(orderBodyDO.getId())).peek(m -> { - m.setBodyName(orderBodyDO.getName()); - m.setRoomName(orderBodyDO.getRoomName()); - }).toList()); - - } +// List bodyIds = plateDetialRespVOS.stream().map(PlateDetialRespVO::getBodyId).distinct().toList(); +// +// +// List orderBodyDOS = orderBodyMapper.selectOrderBodyList(bodyIds,orderIds, getUserOrganId()); +// +// +//// List detialRespVOS = new ArrayList<>(); +// +// +// for (OrderBodyDO orderBodyDO : orderBodyDOS) { +// +// plateDetialRespVOS.stream().filter(f -> f.getBodyId().equals(orderBodyDO.getId())).forEach(m -> { +// m.setBodyName(orderBodyDO.getName()); +// m.setRoomName(orderBodyDO.getRoomName()); +// }); +// +// } - for (PlateDetialRespVO plateDetailsRespVO : detialRespVOS) { + for (PlateDetialRespVO plateDetailsRespVO : plateDetialRespVOS) { String name = ""; if(!plateDetailsRespVO.getProcessGroupLists().isEmpty()) { for (ProcessGroupList groupNameList : plateDetailsRespVO.getProcessGroupLists()) { @@ -579,17 +582,17 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { } plateDetailsRespVO.setProcessGroupName(name); - plateDetailsRespVO.setGoodsId(goodsDOS - .stream() - .filter(f->f.getId().equals(plateDetailsRespVO.getId())) - .map(GoodsReqVO::getGoodsId) - .findAny().orElse(null)); +// plateDetailsRespVO.setGoodsId(goodsDOS +// .stream() +// .filter(f->f.getId().equals(plateDetailsRespVO.getId())) +// .map(GoodsReqVO::getGoodsId) +// .findAny().orElse(null)); - plateDetailsRespVO.setGoodsName(goodsDOS - .stream() - .filter(f->f.getId().equals(plateDetailsRespVO.getId())) - .map(GoodsReqVO::getGoodsName) - .findAny().orElse(null)); +// plateDetailsRespVO.setGoodsName(goodsDOS +// .stream() +// .filter(f->f.getId().equals(plateDetailsRespVO.getId())) +// .map(GoodsReqVO::getGoodsName) +// .findAny().orElse(null)); } @@ -599,7 +602,10 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { // 造型数据的尺寸长度 Integer orderModelSize = plateDetialRespVOS.size(); - List orderModelDOS = buildRespByOrderIds(orderIds, ORDER_PLATE_MODEL, orderModelSize); + // 需要查询小板造型信息的板材ID + List plateIds = plateDetialRespVOS.stream().map(PlateDetialRespVO::getPlateId).toList(); + + List orderModelDOS = buildRespByPlateIds(plateIds, orderModelSize); // 大板数据的尺寸长度 @@ -617,7 +623,18 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { List printOrderPartsRespVOS = orderPartsMapper.selectPartList(orderIds, getUserOrganId()); // 查询生产单对应的包裹信息 - List printOrderPackReqVOS = orderItemMapper.selectPackList(orderIds, getUserOrganId()); + List printOrderPackReqVOS = orderItemMapper.selectPackList(ids, getUserOrganId()); + + for (Long orderId : orderIds) { + + // 统计每个订单的包装数量 + printOrderPackReqVOS + .stream() + .filter(f->f.getOrderId().equals(orderId)) + .forEach(f->f.setPackNum(printOrderPackReqVOS.stream().filter(e -> e.getOrderId().equals(orderId)).map(PrintOrderPackReqVO::getPackId).toList().size())); + + } + return OrderSource.builder() .orderList(orderDOS) @@ -635,24 +652,8 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { public OrderSource getOrderSourceByGoodId(List ids) { -// PlanDO planDO = planMapper.selectById(planId); -// if (Objects.isNull(planDO)) { -// throw exception(PLAN_NOT_EXISTS); -// } - - -// List goodsDOS = goodsMapper.selectBatchIds(goodIds); - - List goodsReqVOS = goodsMapper.selectJoinList(GoodsReqVO.class, new MPJLambdaWrapperX() - - .leftJoin(RemainPlateDO.class, RemainPlateDO::getGoodsId, GoodsDO::getId) - .selectAll(GoodsDO.class) - .selectAs(RemainPlateDO::getId,"remainId") - .isNotNull(PlanItemDO::getId) - .eq(GoodsDO::getOrganId, getUserOrganId()) - .in(GoodsDO::getId, ids)); - + List goodsReqVOS = goodsMapper.selectGoodsAndRemainPlate(ids, getUserOrganId()); List orderIds = goodsReqVOS.stream().map(GoodsReqVO::getOrderId).distinct().toList(); @@ -662,26 +663,23 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { List plateDetialRespVOS = plateMapper.selectPlateListByGoodsIds(ids, getUserOrganId()); - List bodyIds = plateDetialRespVOS.stream().map(PlateDetialRespVO::getBodyId).distinct().toList(); +// List bodyIds = plateDetialRespVOS.stream().map(PlateDetialRespVO::getBodyId).distinct().toList(); +// +// +// List orderBodyDOS = orderBodyMapper.selectOrderBodyList(bodyIds,orderIds, getUserOrganId()); +// +// +// for (OrderBodyDO orderBodyDO : orderBodyDOS) { +// +// plateDetialRespVOS.stream().filter(f -> f.getBodyId().equals(orderBodyDO.getId())).forEach(m -> { +// m.setBodyName(orderBodyDO.getName()); +// m.setRoomName(orderBodyDO.getRoomName()); +// }); +// +// } - List orderBodyDOS = orderBodyMapper.selectOrderBodyList(bodyIds, getUserOrganId()); - - - List detialRespVOS = new ArrayList<>(); - - - for (OrderBodyDO orderBodyDO : orderBodyDOS) { - - detialRespVOS.addAll(plateDetialRespVOS.stream().filter(f -> f.getBodyId().equals(orderBodyDO.getId())).peek(m -> { - m.setBodyName(orderBodyDO.getName()); - m.setRoomName(orderBodyDO.getRoomName()); - }).toList()); - - } - - - for (PlateDetialRespVO plateDetailsRespVO : detialRespVOS) { + for (PlateDetialRespVO plateDetailsRespVO : plateDetialRespVOS) { String name = ""; if(!plateDetailsRespVO.getProcessGroupLists().isEmpty()) { for (ProcessGroupList groupNameList : plateDetailsRespVO.getProcessGroupLists()) { @@ -694,25 +692,22 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { plateDetailsRespVO.setProcessGroupName(name); - plateDetailsRespVO.setGoodsId(goodsReqVOS - .stream() - .filter(f->f.getId().equals(plateDetailsRespVO.getId())) - .map(GoodsReqVO::getGoodsId) - .findAny().orElse(null)); +// // todo 这样写混单时同样适用,后面加混单后这里不用修改 +// plateDetailsRespVO.setGoodsId(goodsReqVOS +// .stream() +// .filter(f->f.getId().equals(plateDetailsRespVO.getId())) +// .map(GoodsReqVO::getGoodsId) +// .findAny().orElse(null)); } // 造型数据的尺寸长度 Integer orderModelSize = plateDetialRespVOS.size(); - List orderModelDOS = buildRespByOrderIds(orderIds, ORDER_PLATE_MODEL, orderModelSize); + // 需要查询的小板造型信息的板材ID + List plateIds = plateDetialRespVOS.stream().map(PlateDetialRespVO::getPlateId).toList(); - -// // 查询生产单对应的配件信息 -// List printOrderPartsRespVOS = orderPartsMapper.selectPartList(orderIds, getUserOrganId()); -// -// // 查询生产单对应的包裹信息 -// List printOrderPackReqVOS = orderItemMapper.selectPackList(orderIds, getUserOrganId()); + List orderModelDOS = buildRespByPlateIds(plateIds, orderModelSize); return OrderSource.builder() .orderList(orderDOS) @@ -748,25 +743,25 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { batchSaveBoardModel(req.getOptimizeBoardModelDOS()); - // 保存余料板的数据 - if (CollectionUtil.isNotEmpty(req.getOptimizeRemainPlates())) { - - List remainPlateDoS = BeanUtils.toBean(req.getOptimizeRemainPlates(), RemainPlateDO.class) - .stream() - .map(m -> m.setUseType(1)) - .map(m -> m.setOutLineJson("")).toList(); - - - List insertPlateDoS = remainPlateDoS.stream().filter(f -> f.getId() == null).toList(); - - List updatePlateDoS = remainPlateDoS.stream().filter(f -> f.getId() != null).toList(); - - Boolean aBoolean = insertPlateDoS.isEmpty() ? null : remainPlateMapper.insertBatch(insertPlateDoS); - - Boolean bBoolean = updatePlateDoS.isEmpty() ? null : remainPlateMapper.updateBatch(updatePlateDoS); - - - } +// // 保存余料板的数据 +// if (CollectionUtil.isNotEmpty(req.getOptimizeRemainPlates())) { +// +// List remainPlateDoS = BeanUtils.toBean(req.getOptimizeRemainPlates(), RemainPlateDO.class) +// .stream() +// .map(m -> m.setUseType(1)) +// .map(m -> m.setOutLineJson("")).toList(); +// +// +// List insertPlateDoS = remainPlateDoS.stream().filter(f -> f.getId() == null).toList(); +// +// List updatePlateDoS = remainPlateDoS.stream().filter(f -> f.getId() != null).toList(); +// +// Boolean aBoolean = insertPlateDoS.isEmpty() ? null : remainPlateMapper.insertBatch(insertPlateDoS); +// +// Boolean bBoolean = updatePlateDoS.isEmpty() ? null : remainPlateMapper.updateBatch(updatePlateDoS); +// +// +// } @@ -832,12 +827,12 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { } - private List buildRespByOrderIds(Collection orderIds, String index, Integer size) { - List fieldValues = orderIds.stream().map(FieldValue::of).toList(); + private List buildRespByPlateIds(Collection plateIds, Integer size) { + List fieldValues = plateIds.stream().map(FieldValue::of).toList(); SearchRequest.Builder builder = new SearchRequest.Builder(); - builder.index(index); + builder.index(OptimizePlanService.ORDER_PLATE_MODEL); builder.size(size); - builder.query(q -> q.terms(b -> b.field("orderId").terms(e -> e.value(fieldValues)))); + builder.query(q -> q.terms(b -> b.field("plateId").terms(e -> e.value(fieldValues)))); try { SearchResponse search = elasticsearchClient.search(builder.build(), OrderModelDO.class); List> hits = search.hits().hits(); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanService.java index 4f13cf6c7..4fa8a8353 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanService.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanService.java @@ -65,7 +65,6 @@ public interface PlanService { Boolean addPlate(AddPlateReq req); - Boolean cancellation(Long id); PageResult getPlateByPlanId(GetPlateByPlanIdVO vo); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanServiceImpl.java index c7dcec725..d1f238546 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanServiceImpl.java @@ -9,7 +9,6 @@ import co.elastic.clients.elasticsearch.core.SearchRequest; import co.elastic.clients.elasticsearch.core.SearchResponse; import co.elastic.clients.elasticsearch.core.search.Hit; import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; @@ -43,11 +42,11 @@ import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemMapper; import com.cf.imes.module.executor.dal.mysql.plan.PlanMapper; import com.cf.imes.module.executor.dal.mysql.planitem.PlanItemMapper; import com.cf.imes.module.executor.dal.mysql.plate.PlateMapper; +import com.cf.imes.module.executor.dal.mysql.remainplaten.RemainPlateMapper; import com.cf.imes.module.executor.enums.OrderStatusEnum; import com.cf.imes.module.executor.service.optimizeplan.OptimizePlanService; import com.cf.imes.module.system.api.machine.MachineApi; import com.cf.imes.module.system.api.machine.dto.CuttingRespDTO; -import com.github.yulichang.wrapper.MPJLambdaWrapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -56,7 +55,6 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.io.IOException; import java.math.BigDecimal; -import java.math.RoundingMode; import java.util.*; import java.util.stream.Collectors; @@ -105,6 +103,9 @@ public class PlanServiceImpl implements PlanService { @Resource private OrderBodyMapper orderBodyMapper; + @Resource + private RemainPlateMapper remainPlateMapper; + @Resource private IdentifierGenerator identifierGenerator; @@ -127,6 +128,7 @@ public class PlanServiceImpl implements PlanService { List goodsDOS = new ArrayList<>(); + // <大板实际ID,排单ID> Map goodsPlanId = new HashMap<>(); Map> groupedItems = itemList.stream() @@ -149,24 +151,12 @@ public class PlanServiceImpl implements PlanService { goodsPlanId.put(entry.getKey(), plan.getId()); -// Set itemIds = plateMapper.selectBatchOrderIdsAndGoodsIds(items,getUserOrganId()); - List goodsIds = items.stream().map(PlanSaveReqVO.Item::getId).toList(); List goodsDOList = goodsMapper.selectPlanGoodsList(goodsIds, getUserOrganId()).stream().map(m -> m.setPlanId(plan.getId())).toList(); goodsDOS.addAll(goodsDOList); -// if (CollectionUtil.isNotEmpty(itemIds)) { -// -// for (Long itemId : itemIds) { -// planItemDOS.add(PlanItemDO.builder() -// .planId(plan.getId()) -// .itemId(itemId) -// .build()); -// } -// -// } } @@ -179,29 +169,6 @@ public class PlanServiceImpl implements PlanService { return goodsPlanId; -// -// // 插入 -// PlanDO plan = BeanUtils.toBean(createReqVO, PlanDO.class); -// plan.setSort(0L); -// String orderNos = itemList.stream().map(PlanSaveReqVO.Item::getOrderId).distinct().toList().toString(); -// plan.setOrderNos(orderNos); -// plan.setProduceTime(null); -// planMapper.insert(plan); -// -// // 修改对应的生产单的状态为 已排单 -// List orderIds = itemList.stream().map(PlanSaveReqVO.Item::getOrderId).toList(); -// -// List orderDOS = orderMapper.selectBatchIds(orderIds); -// -// List orderDOList = orderDOS.stream().map(o -> o.setStatus(OrderStatusEnum.SORTED.getStatus())).toList(); -// -// orderMapper.updateBatch(orderDOList); -// -// Long planId = plan.getId(); -// -// -// // 返回 -// return plan.getId(); } @Override @@ -224,7 +191,7 @@ public class PlanServiceImpl implements PlanService { // todo 目前只解决非混单的情况 Long goodsIds = BeanUtils.toBean(goodsMapper.selectPlanGoods(plan.getId(), getUserOrganId()).stream().map(GoodsDO::getGoodsId).toList(), Long.class).get(0); - if(goodsId.equals(goodsIds)){ + if(!goodsId.equals(goodsIds)){ throw exception(PLATE_ERROR); } @@ -238,7 +205,7 @@ public class PlanServiceImpl implements PlanService { if (!updateReqVO.getDeleteIds().isEmpty()){ - goodsDOS.addAll(goodsMapper.selectPlanGoodsList(ids, getUserOrganId()).stream().map(m -> m.setPlanId(null)).toList()); + goodsDOS.addAll(goodsMapper.selectPlanGoodsList(updateReqVO.getDeleteIds(), getUserOrganId()).stream().map(m -> m.setPlanId(null)).toList()); } @@ -252,8 +219,8 @@ public class PlanServiceImpl implements PlanService { planMapper.updateById(plan); -// -// // todo 目前只解决非混单的情况,混单的情况待解决,这个逻辑目前应该不用,排单是否开料判断了,可保留,万一以后需求更改 + +// // todo 目前只解决非混单的情况,混单的情况待解决,这个逻辑目前应该不用(这个逻辑用于判断大板下的小板是否开料,后期应该可用于混单时增加的判断),排单是否开料判断了,可保留,万一以后需求更改 // if(!updateReqVO.getItemList().isEmpty()){ // // List optimizeBoardModelDOS = buildBoardByPlanId(plan.getId(), ORDER_REMAIN_PLATE_MODEL, 10); @@ -330,18 +297,23 @@ public class PlanServiceImpl implements PlanService { } - // 删除排单信息,排单明细表信息,ES优化数据 + // 删除排单信息,商品表里的 planId , ES优化数据,更新排单对应的余料板的排单ID为0 planMapper.deleteBatchIds(ids); - planItemMapper.delete(new LambdaQueryWrapperX().in(PlanItemDO::getPlanId, ids)); +// planItemMapper.delete(new LambdaQueryWrapperX().in(PlanItemDO::getPlanId, ids)); + goodsMapper.deletePlanGoods(ids,getUserOrganId()); + remainPlateMapper.deletePlanRemainPlate(ids,getUserOrganId()); + // 排单对应的自增板的删除 todo 目前值解决了非混单的情况 List boardModelDOS = buildBoardByPlanIds(ids, ORDER_REMAIN_PLATE_MODEL, ids.size()); if(!boardModelDOS.isEmpty()) { - List goodsIds = boardModelDOS.stream().map(OptimizeBoardModelDO::getGoodsId).toList(); +// List goodsIds = boardModelDOS.stream().map(OptimizeBoardModelDO::getGoodsId).toList(); - List goodsIdList = goodsMapper.selectListByGoodsIdList(goodsIds, orderIds, getUserOrganId()).stream().map(GoodsDO::getId).toList(); +// List goodsIdList = goodsMapper.selectListByGoodsIdList(goodsIds, orderIds, getUserOrganId()).stream().map(GoodsDO::getId).toList(); + + List goodsIdList = goodsMapper.selectPlanGoodsListByPlanIdList(ids, getUserOrganId()).stream().map(GoodsDO::getId).toList(); List plateDOS = plateMapper.selectPlateIdList(goodsIdList, getUserOrganId()); if(!plateDOS.isEmpty()) { @@ -354,11 +326,6 @@ public class PlanServiceImpl implements PlanService { } - // 目前生产单的状态已经去除待排单,所以无需修改生产单的状态 -// List orderDOS = orderMapper.selectBatchIds(orderIds).stream().map(m -> m.setStatus(OrderStatusEnum.SORTED.getStatus())).collect(Collectors.toList()); -// orderMapper.updateBatch(orderDOS); - - // 删除排单对应的优化生产数据 deleteByPlanId(ids, ORDER_REMAIN_PLATE_MODEL); @@ -402,7 +369,7 @@ public class PlanServiceImpl implements PlanService { throw exception(PLAN_NOT_EXISTS); } - if(planDO.getStatus().equals(PlanStatusEnum.OPENING.getStatus()) && planDO.getMachineId().equals(machineId)){ + if(planDO.getStatus().equals(PlanStatusEnum.OPENING.getStatus()) || planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus())){ throw exception(LIST_CHANGES_ARE_PROHIBITED); } } @@ -426,34 +393,41 @@ public class PlanServiceImpl implements PlanService { @Override public PlanRespVO getPlan(Long id) { - PlanDO planDO = planMapper.selectById(id); - MPJLambdaWrapper wrapper = new MPJLambdaWrapperX().select(OrderItemDO::getOrderId) - .rightJoin(PlanItemDO.class, PlanItemDO::getItemId, OrderItemDO::getId) - .isNotNull(OrderItemDO::getId); - Set orderIds = orderItemMapper.selectJoinList(OrderItemDO.class, wrapper).stream().map(OrderItemDO::getOrderId).collect(Collectors.toSet()); - /*Set orderIds = planOrderMapper.selectList(new LambdaQueryWrapperX().eq(PlanOrderDO::getPlanId, planDO.getPlanNo())) - .stream() - .map(e -> e.getOrderId()) - .collect(Collectors.toSet());*/ - PlanRespVO respVO = BeanUtils.toBean(planDO, PlanRespVO.class); - List goodsDOS = goodsMapper.selectList(new LambdaQueryWrapperX() - .eq(GoodsDO::getOrganId,getUserOrganId()) - .in(GoodsDO::getOrderId, orderIds)); - List plateDOS = plateMapper.selectList(new LambdaQueryWrapperX() - .eq(PlateDO::getOrganId,getUserOrganId()) - .in(PlateDO::getGoodsId, goodsDOS.stream().map(GoodsDO::getGoodsId).collect(Collectors.toSet()))); - List plateInfoVOS = goodsDOS.stream().map(e -> PlateInfoVO.builder() - .material(e.getMaterial()) - .width(e.getWidth()) - .height(e.getHeight()) - .thickness(e.getThickness()) - .area(e.getHeight().multiply(e.getWidth()).setScale(2, RoundingMode.HALF_UP)) - .count(plateDOS.stream().filter(f -> Objects.equals(f.getGoodsId(), e.getGoodsId())).collect(Collectors.toSet()).size()) - .build()) - .collect(Collectors.toList()); - respVO.setPlateInfoList(plateInfoVOS); - return respVO; + PlanDO planDO = planMapper.selectById(id); + + if ( planDO== null) { + throw exception(PLAN_NOT_EXISTS); + } + + return BeanUtils.toBean(planDO, PlanRespVO.class); + +// MPJLambdaWrapper wrapper = new MPJLambdaWrapperX().select(OrderItemDO::getOrderId) +// .rightJoin(PlanItemDO.class, PlanItemDO::getItemId, OrderItemDO::getId) +// .isNotNull(OrderItemDO::getId); +// Set orderIds = orderItemMapper.selectJoinList(OrderItemDO.class, wrapper).stream().map(OrderItemDO::getOrderId).collect(Collectors.toSet()); +// +// /*Set orderIds = planOrderMapper.selectList(new LambdaQueryWrapperX().eq(PlanOrderDO::getPlanId, planDO.getPlanNo())) +// .stream() +// .map(e -> e.getOrderId()) +// .collect(Collectors.toSet());*/ +// List goodsDOS = goodsMapper.selectList(new LambdaQueryWrapperX() +// .eq(GoodsDO::getOrganId,getUserOrganId()) +// .in(GoodsDO::getOrderId, orderIds)); +// List plateDOS = plateMapper.selectList(new LambdaQueryWrapperX() +// .eq(PlateDO::getOrganId,getUserOrganId()) +// .in(PlateDO::getGoodsId, goodsDOS.stream().map(GoodsDO::getGoodsId).collect(Collectors.toSet()))); +// List plateInfoVOS = goodsDOS.stream().map(e -> PlateInfoVO.builder() +// .material(e.getMaterial()) +// .width(e.getWidth()) +// .height(e.getHeight()) +// .thickness(e.getThickness()) +// .area(e.getHeight().multiply(e.getWidth()).setScale(2, RoundingMode.HALF_UP)) +// .count(plateDOS.stream().filter(f -> Objects.equals(f.getGoodsId(), e.getGoodsId())).collect(Collectors.toSet()).size()) +// .build()) +// .collect(Collectors.toList()); +// respVO.setPlateInfoList(plateInfoVOS); + } @@ -542,8 +516,8 @@ public class PlanServiceImpl implements PlanService { // 根据排单ID查询ES中的优化数据 todo 目前只解决无混单的情况,混单情况待解决 List optimizeBoardModelDOS = buildBoardByPlanIds(planIds, ORDER_REMAIN_PLATE_MODEL, infoVOList.size()); - for (OptimizeBoardModelDO optimizeBoardModelDO : optimizeBoardModelDOS) { - } +// for (OptimizeBoardModelDO optimizeBoardModelDO : optimizeBoardModelDOS) { +// } // 获取排单对应的生产单的信息 List planOrderRespVOS = planItemMapper.selectOrderList(planIds, getUserOrganId()); @@ -972,24 +946,6 @@ public class PlanServiceImpl implements PlanService { return Boolean.TRUE; } - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean cancellation(Long id) { - PlanDO planDO = planMapper.selectById(id); - if (planDO == null) { - throw exception(PLAN_NOT_EXISTS); - } -// if (planDO.getStatus().equals(PlanStatusEnum.NEWORDER.getStatus()) || planDO.getStatus().equals(PlanStatusEnum.BOARDHASBEENAPPLIEDFOR.getStatus())) { -// throw exception(PLAN_NOT_ALLOW_CANCEL); -// } - Set itemIds = planItemMapper.selectList(new LambdaQueryWrapperX() - .eq(PlanItemDO::getOrganId,getUserOrganId()) - .eq(PlanItemDO::getPlanId, id)) - .stream().map(PlanItemDO::getItemId) - .collect(Collectors.toSet()); - plateMapper.update(new LambdaUpdateWrapper().in(PlateDO::getId, itemIds).set(PlateDO::getIsCancel, Boolean.TRUE)); - return Boolean.TRUE; - } @Override public PageResult getPlateByPlanId(GetPlateByPlanIdVO vo) { @@ -1046,6 +1002,7 @@ public class PlanServiceImpl implements PlanService { MPJLambdaWrapperX lambdaWrapperX = new MPJLambdaWrapperX<>(); lambdaWrapperX.leftJoin(GoodsDO.class, GoodsDO::getOrderId, OrderDO::getId) .eq(GoodsDO::getOrganId,getUserOrganId()) + .eq(GoodsDO::getDeleted,false) .eq(GoodsDO::getPlanId, pageReqVO.getPlanId()) .distinct(); @@ -1090,7 +1047,7 @@ public class PlanServiceImpl implements PlanService { public List getPlateList(List planIds) { - List plateResLists = plateMapper.selectPlateListByPlanId(planIds, getUserOrganId()); + List plateResLists = goodsMapper.selectPlateListByPlanId(planIds, getUserOrganId()); Set bodyIds = plateResLists.stream().map(PlateResList::getBodyId).collect(Collectors.toSet()); if (CollectionUtil.isNotEmpty(bodyIds)) { @@ -1110,10 +1067,7 @@ public class PlanServiceImpl implements PlanService { public List getOrderRoomBody(List orderIds) { - List orderRoomBodyLists = orderItemMapper.selectRoomBodyByOrderId(orderIds, getUserOrganId()); - - - return orderRoomBodyLists; + return goodsMapper.selectNoPlanRoomBody(orderIds,getUserOrganId()); } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/goods/GoodsMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/goods/GoodsMapper.xml index 8afc79103..d5d8bbc91 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/goods/GoodsMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/goods/GoodsMapper.xml @@ -231,7 +231,7 @@ from order_goods og - left join order_plate op on og.organ_id = op.organ_id and og.id = op.goods_id and og.deleted = op.deleted + left join order_plate op on og.organ_id = op.organ_id and og.order_id = op.order_id and og.id = op.goods_id and og.deleted = op.deleted where og.organ_id = #{organId} @@ -288,8 +288,8 @@ oi.body_id from order_goods og - left join order_plate op on og.organ_id = op.organ_id and og.id = op.goods_id and og.deleted = op.deleted - left join order_item oi on op.organ_id = oi.organ_id and op.id = oi.plate_id + left join order_plate op on og.organ_id = op.organ_id and og.order_id = op.order_id and og.id = op.goods_id and og.deleted = op.deleted + left join order_item oi on op.organ_id = oi.organ_id and op.order_id = oi.order_id and op.id = oi.plate_id ${ew.customSqlSegment} @@ -297,4 +297,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderItem/OrderItemMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderItem/OrderItemMapper.xml index e1269539b..37c1f5ad3 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderItem/OrderItemMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderItem/OrderItemMapper.xml @@ -173,106 +173,42 @@ - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderParts/OrderPartsMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderParts/OrderPartsMapper.xml index 10a1fd005..faf6a1d0a 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderParts/OrderPartsMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderParts/OrderPartsMapper.xml @@ -101,11 +101,12 @@ op.name, op.order_id from order_parts op - join order_item oi on op.id = oi.parts_id and op.organ_id = oi.organ_id - join order_body ob on oi.body_id = ob.id and oi.organ_id = ob.organ_id - where op.organ_id = #{organId} - and op.order_id in + left join order_item oi on op.organ_id = oi.organ_id and op.order_id = oi.order_id and op.id = oi.parts_id + left join order_body ob on oi.organ_id = ob.organ_id and oi.order_id = ob.order_id and oi.body_id = ob.id + where op.organ_id = #{organId} + and op.deleted = false + and op.order_id in #{orderIds} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plan/PlanMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plan/PlanMapper.xml index 6f9bff1be..18d4a1146 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plan/PlanMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plan/PlanMapper.xml @@ -161,9 +161,8 @@ ,CONCAT(YEAR(p.create_time), '-', MONTH(p.create_time), '-', DAY(p.create_time)) as date from order_plan p - join order_plan_item opi on p.id = opi.plan_id - join order_item oi on oi.id = opi.item_id - join order_plate op on oi.plate_id = op.id + join order_goods g on g.plan_id = p.id + join order_plate op on op.goods_id = g.id where p.create_time between #{req.createTime[0]} and #{req.createTime[1]} and p.deleted = 0 group by date; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/PlateMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/PlateMapper.xml index 35437ea15..465f40be0 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/PlateMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/PlateMapper.xml @@ -231,11 +231,12 @@ op.is_row_hole as hasHole from order_plate op - join order_goods ogs on op.goods_id = ogs.id and op.organ_id = ogs.organ_id - join order_item oi on op.id = oi.plate_id and op.organ_id = oi.organ_id - join order_body ob on oi.body_id = ob.id and oi.organ_id = ob.organ_id - left join order_group og on oi.group_id = og.id and oi.organ_id = og.organ_id - where op.order_id =#{orderId} and op.organ_id = #{organId} and op.deleted = false + left join order_goods ogs on op.organ_id = ogs.organ_id and op.order_id = ogs.order_id and op.goods_id = ogs.id + left join order_item oi on op.organ_id = oi.organ_id and op.order_id = oi.order_id and op.id = oi.plate_id + left join order_group og on oi.organ_id = og.organ_id and oi.order_id = og.order_id and oi.group_id = og.id + left join order_body ob on oi.organ_id = ob.organ_id and oi.order_id = ob.order_id and oi.body_id = ob.id + + where op.organ_id = #{organId} and op.deleted = false and op.order_id = #{orderId} @@ -431,27 +432,6 @@ - -