Merge branch 'main' of ssh://192.168.1.205:9922/cf_devdept2/cf_imes_server

This commit is contained in:
lym
2024-09-14 16:31:52 +08:00
128 changed files with 1877 additions and 1772 deletions
-10
View File
@@ -376,16 +376,6 @@
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-opentracing</artifactId>
<version>${skywalking.version}</version>
<!-- <exclusions>-->
<!-- <exclusion>-->
<!-- <artifactId>opentracing-api</artifactId>-->
<!-- <groupId>io.opentracing</groupId>-->
<!-- </exclusion>-->
<!-- <exclusion>-->
<!-- <artifactId>opentracing-util</artifactId>-->
<!-- <groupId>io.opentracing</groupId>-->
<!-- </exclusion>-->
<!-- </exclusions>-->
</dependency>
<dependency>
<groupId>io.opentracing</groupId>
@@ -7,30 +7,27 @@ package com.cf.imes.framework.common.enums;
*
* @author 晨丰科技
*/
public interface WebFilterOrderEnum {
public class WebFilterOrderEnum {
int CORS_FILTER = Integer.MIN_VALUE;
public static int CORS_FILTER = Integer.MIN_VALUE;
int TRACE_FILTER = CORS_FILTER + 1;
public static int TRACE_FILTER = CORS_FILTER + 1;
int ENV_TAG_FILTER = TRACE_FILTER + 1;
public static int ENV_TAG_FILTER = TRACE_FILTER + 1;
int REQUEST_BODY_CACHE_FILTER = Integer.MIN_VALUE + 500;
public static int REQUEST_BODY_CACHE_FILTER = Integer.MIN_VALUE + 500;
// OrderedRequestContextFilter 默认为 -105,用于国际化上下文等等
int TENANT_CONTEXT_FILTER = - 104; // 需要保证在 ApiAccessLogFilter 前面
public static int TENANT_CONTEXT_FILTER = - 104; // 需要保证在 ApiAccessLogFilter 前面
int API_ACCESS_LOG_FILTER = -103; // 需要保证在 RequestBodyCacheFilter 后面
public static int API_ACCESS_LOG_FILTER = -103; // 需要保证在 RequestBodyCacheFilter 后面
int XSS_FILTER = -102; // 需要保证在 RequestBodyCacheFilter 后面
public static int XSS_FILTER = -102; // 需要保证在 RequestBodyCacheFilter 后面
// Spring Security Filter 默认为 -100,可见 org.springframework.boot.autoconfigure.security.SecurityProperties 配置属性类
int TENANT_SECURITY_FILTER = -99; // 需要保证在 Spring Security 过滤器后面
int FLOWABLE_FILTER = -98; // 需要保证在 Spring Security 过滤后面
int DEMO_FILTER = Integer.MAX_VALUE;
public static int TENANT_SECURITY_FILTER = -99; // 需要保证在 Spring Security 过滤器后面
public static int FLOWABLE_FILTER = -98; // 需要保证在 Spring Security 过滤后面
}
@@ -30,11 +30,12 @@ public interface GlobalErrorCodeConstants {
// ========== 服务端错误段 ==========
ErrorCode INTERNAL_SERVER_ERROR = new ErrorCode(500, "系统异常");
ErrorCode INTERNAL_SERVER_ERROR = new ErrorCode(500, "系统异常,请联系客服处理");
ErrorCode NOT_IMPLEMENTED = new ErrorCode(501, "功能未实现/未开启");
ErrorCode ERROR_CONFIGURATION = new ErrorCode(502, "错误的配置项");
ErrorCode ES_ERROR_UPDATE = new ErrorCode(503, "ES文档更新失败");
ErrorCode ES_ERROR_DELETE = new ErrorCode(504, "ES文档删除失败");
ErrorCode DATA_EXCEPTION_ERROR = new ErrorCode(505, "数据异常,请联系客服处理");
// ========== 自定义错误段 ==========
ErrorCode REPEATED_REQUESTS = new ErrorCode(900, "重复请求,请稍后重试"); // 重复请求
@@ -0,0 +1,49 @@
package com.cf.imes.framework.common.util.Assert;
import com.cf.imes.framework.common.exception.ErrorCode;
import org.springframework.util.ObjectUtils;
import java.util.List;
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
/**
* 断言工具类:用于代码抛出异常,提升代码的简洁度
*
* @author 晨丰科技
*/
public class AssertUtils {
/*
* 判断是否为空,可以不用if语句,简化代码
* */
public static void notEmpty(List<?> array, ErrorCode errorCode) {
if (ObjectUtils.isEmpty(array)) {
throw exception(errorCode);
}
}
public static void empty(List<?> array, ErrorCode errorCode) {
if (!ObjectUtils.isEmpty(array)) {
throw exception(errorCode);
}
}
public static void notEmpty(Object object, ErrorCode errorCode) {
if (object == null) {
throw exception(errorCode);
}
}
public static void notEmpty(List<?> array ,Object object, ErrorCode errorCode) {
if (object == null || ObjectUtils.isEmpty(array)) {
throw exception(errorCode);
}
}
}
@@ -1,13 +1,12 @@
package com.cf.imes.framework.common.util.encrypt;
import cn.hutool.core.util.CharsetUtil;
import lombok.extern.slf4j.Slf4j;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import java.security.GeneralSecurityException;
import javax.crypto.spec.GCMParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Base64;
@@ -23,7 +22,7 @@ public class AesUtils {
private static final String AES_ALG = "AES";
private static final String AES_CBC_PCK_ALG = "AES/CBC/PKCS5Padding";
private static final String DEFAULT_CIPHER_ALGORITHM = "AES/GCM/NoPadding";
/**
@@ -34,14 +33,14 @@ public class AesUtils {
* @return
* @throws Exception
*/
public static String decrypt(String content, String aesKey) {
public static String decrypt(String base64Content, String aesKey) {
try {
Cipher cipher = Cipher.getInstance(AES_CBC_PCK_ALG);
IvParameterSpec iv = new IvParameterSpec(initIv(AES_CBC_PCK_ALG));
cipher.init(Cipher.DECRYPT_MODE, generateKey(aesKey.getBytes()), iv);
byte[] cleanBytes = cipher.doFinal(Base64.getDecoder().decode(content.getBytes()));
return new String(cleanBytes, CharsetUtil.UTF_8);
byte[] content = Base64.getDecoder().decode(base64Content);
GCMParameterSpec params = new GCMParameterSpec(128, content, 0, 12);
Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, getSecretKey(aesKey), params);
byte[] decryptData = cipher.doFinal(content, 12, content.length - 12);
return new String(decryptData);
} catch (Exception e) {
log.error("[AesUtils][decrypt]解密失败:{}", e.getMessage(), e);
// nacos热发布配置,空字符串会导致nacos轮训刷新配置
@@ -56,44 +55,16 @@ public class AesUtils {
* @return
* @throws NoSuchAlgorithmException
*/
private static SecretKey generateKey(byte[] bytes) throws NoSuchAlgorithmException {
private static SecretKey getSecretKey(String key) throws NoSuchAlgorithmException {
// 生成随机数
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
// 设置随机数种子
random.setSeed(bytes);
random.setSeed(key.getBytes());
// aes算法生成器
KeyGenerator keyGen = KeyGenerator.getInstance(AES_ALG);
keyGen.init(128, random); // 使用128位的密钥
return keyGen.generateKey();
}
/**
* 初始向量的方法, 全部为0. 这里的写法适合于其它算法,针对AES算法的话,IV值一定是128位的(16字节).
*
* @param fullAlg
* @return
* @throws GeneralSecurityException
*/
private static byte[] initIv(String fullAlg) {
try {
Cipher cipher = Cipher.getInstance(fullAlg);
int blockSize = cipher.getBlockSize();
byte[] iv = new byte[blockSize];
for (int i = 0; i < blockSize; ++i) {
iv[i] = 0;
}
return iv;
} catch (Exception e) {
int blockSize = 16;
byte[] iv = new byte[blockSize];
for (int i = 0; i < blockSize; ++i) {
iv[i] = 0;
}
return iv;
}
SecretKey secretKey = keyGen.generateKey();
return new SecretKeySpec(secretKey.getEncoded(), AES_ALG);
}
}
@@ -2,7 +2,6 @@ package com.cf.imes.framework.common.util.json;
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;
import com.fasterxml.jackson.core.type.TypeReference;
@@ -144,7 +143,7 @@ public class JsonUtils {
}
public static <T> List<T> parseArray(String text, Class<T> clazz) {
if (StrUtil.isEmpty(text)) {
if (CharSequenceUtil.isEmpty(text)) {
return new ArrayList<>();
}
try {
@@ -156,7 +155,7 @@ public class JsonUtils {
}
public static <T> List<T> parseArray(String text, String path, Class<T> clazz) {
if (StrUtil.isEmpty(text)) {
if (CharSequenceUtil.isEmpty(text)) {
return null;
}
try {
@@ -1,6 +1,6 @@
package com.cf.imes.framework.common.util.number;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
/**
* 数字的工具类,补全 {@link cn.hutool.core.util.NumberUtil} 的功能
@@ -10,7 +10,7 @@ import cn.hutool.core.util.StrUtil;
public class NumberUtils {
public static Long parseLong(String str) {
return StrUtil.isNotEmpty(str) ? Long.valueOf(str) : null;
return CharSequenceUtil.isNotEmpty(str) ? Long.valueOf(str) : null;
}
/**
@@ -1,7 +1,7 @@
package com.cf.imes.framework.common.util.servlet;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.extra.servlet.ServletUtil;
import com.cf.imes.framework.common.util.json.JsonUtils;
import org.springframework.http.MediaType;
@@ -89,7 +89,7 @@ public class ServletUtils {
}
public static boolean isJsonRequest(ServletRequest request) {
return StrUtil.startWithIgnoreCase(request.getContentType(), MediaType.APPLICATION_JSON_VALUE);
return CharSequenceUtil.startWithIgnoreCase(request.getContentType(), MediaType.APPLICATION_JSON_VALUE);
}
public static String getBody(HttpServletRequest request) {
@@ -1,7 +1,7 @@
package com.cf.imes.framework.common.util.string;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import java.util.Arrays;
import java.util.Collection;
@@ -16,7 +16,7 @@ import java.util.stream.Collectors;
public class StrUtils {
public static String maxLength(CharSequence str, int maxLength) {
return StrUtil.maxLength(str, maxLength - 3); // -3 的原因,是该方法会补充 ... 恰好
return CharSequenceUtil.maxLength(str, maxLength - 3); // -3 的原因,是该方法会补充 ... 恰好
}
/**
@@ -28,12 +28,12 @@ public class StrUtils {
* @since 3.0.6
*/
public static boolean startWithAny(String str, Collection<String> prefixes) {
if (StrUtil.isEmpty(str) || ArrayUtil.isEmpty(prefixes)) {
if (CharSequenceUtil.isEmpty(str) || ArrayUtil.isEmpty(prefixes)) {
return false;
}
for (CharSequence suffix : prefixes) {
if (StrUtil.startWith(str, suffix, false)) {
if (CharSequenceUtil.startWith(str, suffix, false)) {
return true;
}
}
@@ -41,12 +41,12 @@ public class StrUtils {
}
public static List<Long> splitToLong(String value, CharSequence separator) {
long[] longs = StrUtil.splitToLong(value, separator);
long[] longs = CharSequenceUtil.splitToLong(value, separator);
return Arrays.stream(longs).boxed().collect(Collectors.toList());
}
public static List<Integer> splitToInteger(String value, CharSequence separator) {
int[] integers = StrUtil.splitToInt(value, separator);
int[] integers = CharSequenceUtil.splitToInt(value, separator);
return Arrays.stream(integers).boxed().collect(Collectors.toList());
}
@@ -58,7 +58,7 @@ public class StrUtils {
* @return 移除后的字符串
*/
public static String removeLineContains(String content, String sequence) {
if (StrUtil.isEmpty(content) || StrUtil.isEmpty(sequence)) {
if (CharSequenceUtil.isEmpty(content) || CharSequenceUtil.isEmpty(sequence)) {
return content;
}
return Arrays.stream(content.split("\n"))
@@ -34,7 +34,7 @@ public class InEnumCollectionValidator implements ConstraintValidator<InEnum, Co
// 校验不通过,自定义提示语句(因为,注解上的 value 是枚举类,无法获得枚举类的实际值)
context.disableDefaultConstraintViolation(); // 禁用默认的 message 的值
context.buildConstraintViolationWithTemplate(context.getDefaultConstraintMessageTemplate()
.replaceAll("\\{value}", CollUtil.join(list, ","))).addConstraintViolation(); // 重新添加错误提示语句
.replace("\\{value}", CollUtil.join(list, ","))).addConstraintViolation(); // 重新添加错误提示语句
return false;
}
@@ -36,7 +36,7 @@ public class InEnumValidator implements ConstraintValidator<InEnum, Integer> {
// 校验不通过,自定义提示语句(因为,注解上的 value 是枚举类,无法获得枚举类的实际值)
context.disableDefaultConstraintViolation(); // 禁用默认的 message 的值
context.buildConstraintViolationWithTemplate(context.getDefaultConstraintMessageTemplate()
.replaceAll("\\{value}", values.toString())).addConstraintViolation(); // 重新添加错误提示语句
.replace("\\{value}", values.toString())).addConstraintViolation(); // 重新添加错误提示语句
return false;
}
@@ -1,6 +1,6 @@
package com.cf.imes.framework.common.validation;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.cf.imes.framework.common.util.validation.ValidationUtils;
import javax.validation.ConstraintValidator;
@@ -8,14 +8,10 @@ import javax.validation.ConstraintValidatorContext;
public class MobileValidator implements ConstraintValidator<Mobile, String> {
@Override
public void initialize(Mobile annotation) {
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
// 如果手机号为空,默认不校验,即校验通过
if (StrUtil.isEmpty(value)) {
if (CharSequenceUtil.isEmpty(value)) {
return true;
}
// 校验手机
@@ -8,10 +8,6 @@ import javax.validation.ConstraintValidatorContext;
public class TelephoneValidator implements ConstraintValidator<Telephone, String> {
@Override
public void initialize(Telephone annotation) {
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
// 如果手机号为空,默认不校验,即校验通过
@@ -1,8 +1,8 @@
package com.cf.imes.framework.datapermission.core.rule.dept;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.cf.imes.framework.common.enums.UserTypeEnum;
import com.cf.imes.framework.common.util.collection.CollectionUtils;
import com.cf.imes.framework.common.util.json.JsonUtils;
@@ -147,7 +147,7 @@ public class DeptDataPermissionRule implements DataPermissionRule {
private Expression buildDeptExpression(String tableName, Alias tableAlias, Set<Long> deptIds) {
// 如果不存在配置,则无需作为条件
String columnName = deptColumns.get(tableName);
if (StrUtil.isEmpty(columnName)) {
if (CharSequenceUtil.isEmpty(columnName)) {
return null;
}
// 如果为空,则无条件
@@ -165,7 +165,7 @@ public class DeptDataPermissionRule implements DataPermissionRule {
return null;
}
String columnName = userColumns.get(tableName);
if (StrUtil.isEmpty(columnName)) {
if (CharSequenceUtil.isEmpty(columnName)) {
return null;
}
// 拼接条件
@@ -2,9 +2,8 @@ package com.cf.imes.framework.operatelog.core.aop;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.exceptions.ExceptionUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import com.cf.imes.framework.common.enums.UserTypeEnum;
import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.framework.common.util.json.JsonUtils;
import com.cf.imes.framework.common.util.monitor.TracerUtils;
@@ -172,15 +171,15 @@ public class OperateLogAspect {
if (operateLog != null) {
operateLogObj.setModule(operateLog.module());
}
if (StrUtil.isEmpty(operateLogObj.getModule())) {
if (CharSequenceUtil.isEmpty(operateLogObj.getModule())) {
Tag tag = getClassAnnotation(joinPoint, Tag.class);
if (tag != null) {
// 优先读取 @Tag 的 name 属性
if (StrUtil.isNotEmpty(tag.name())) {
if (CharSequenceUtil.isNotEmpty(tag.name())) {
operateLogObj.setModule(tag.name());
}
// 没有的话,读取 @API 的 description 属性
if (StrUtil.isEmpty(operateLogObj.getModule()) && ArrayUtil.isNotEmpty(tag.description())) {
if (CharSequenceUtil.isEmpty(operateLogObj.getModule()) && ArrayUtil.isNotEmpty(tag.description())) {
operateLogObj.setModule(tag.description());
}
}
@@ -189,7 +188,7 @@ public class OperateLogAspect {
if (operateLog != null) {
operateLogObj.setName(operateLog.name());
}
if (StrUtil.isEmpty(operateLogObj.getName()) && operation != null) {
if (CharSequenceUtil.isEmpty(operateLogObj.getName()) && operation != null) {
operateLogObj.setName(operation.summary());
}
// type 属性
@@ -2,7 +2,7 @@ package com.cf.imes.framework.organ.core.job;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.exceptions.ExceptionUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.cf.imes.framework.common.util.json.JsonUtils;
import com.cf.imes.framework.organ.core.service.OrganFrameworkService;
import com.cf.imes.framework.organ.core.util.OrganUtils;
@@ -51,7 +51,7 @@ public class OrganJobAspect {
} catch (Throwable e) {
results.put(organId, ExceptionUtil.getRootCauseMessage(e));
// 打印异常
XxlJobHelper.log(StrUtil.format("[多组织({}) 执行任务({}),发生异常:{}]",
XxlJobHelper.log(CharSequenceUtil.format("[多组织({}) 执行任务({}),发生异常:{}]",
organId, joinPoint.getSignature(), ExceptionUtils.getStackTrace(e)));
}
});
@@ -1,6 +1,6 @@
package com.cf.imes.framework.organ.core.mq.kafka;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
@@ -23,7 +23,7 @@ public class OrganKafkaEnvironmentPostProcessor implements EnvironmentPostProces
// 添加 OrganKafkaProducerInterceptor 拦截器
try {
String value = environment.getProperty(PROPERTY_KEY_INTERCEPTOR_CLASSES);
if (StrUtil.isEmpty(value)) {
if (CharSequenceUtil.isEmpty(value)) {
value = OrganKafkaProducerInterceptor.class.getName();
} else {
value += "," + OrganKafkaProducerInterceptor.class.getName();
@@ -1,6 +1,6 @@
package com.cf.imes.framework.organ.core.mq.redis;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.cf.imes.framework.mq.redis.core.interceptor.RedisMessageInterceptor;
import com.cf.imes.framework.mq.redis.core.message.AbstractRedisMessage;
import com.cf.imes.framework.organ.core.context.OrganContextHolder;
@@ -28,7 +28,7 @@ public class OrganRedisMessageInterceptor implements RedisMessageInterceptor {
@Override
public void consumeMessageBefore(AbstractRedisMessage message) {
String organIdStr = message.getHeader(HEADER_ORGAN_ID);
if (StrUtil.isNotEmpty(organIdStr)) {
if (CharSequenceUtil.isNotEmpty(organIdStr)) {
OrganContextHolder.setOrganId(Long.valueOf(organIdStr));
}
}
@@ -1,7 +1,7 @@
package com.cf.imes.framework.organ.core.mq.rocketmq;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.cf.imes.framework.organ.core.context.OrganContextHolder;
import org.apache.rocketmq.client.hook.ConsumeMessageContext;
import org.apache.rocketmq.client.hook.ConsumeMessageHook;
@@ -33,7 +33,7 @@ public class OrganRocketMQConsumeMessageHook implements ConsumeMessageHook {
Assert.isTrue(messages.size() == 1, "消息条数({})不正确", messages.size());
// 设置组织编号
String organId = messages.get(0).getUserProperty(HEADER_ORGAN_ID);
if (StrUtil.isNotEmpty(organId)) {
if (CharSequenceUtil.isNotEmpty(organId)) {
OrganContextHolder.setOrganId(Long.parseLong(organId));
}
}
@@ -4,7 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.http.HttpUtil;
import com.cf.imes.framework.common.util.json.JsonUtils;
import com.cf.imes.framework.common.util.object.ObjectUtils;
@@ -98,7 +98,7 @@ public abstract class AbstractAlipayPayClient extends AbstractPayClient<AlipayPa
status = PayOrderStatusRespEnum.REFUND.getStatus();
}
Assert.notNull(status, (Supplier<Throwable>) () -> {
throw new IllegalArgumentException(StrUtil.format("body({}) 的 trade_status 不正确", body));
throw new IllegalArgumentException(CharSequenceUtil.format("body({}) 的 trade_status 不正确", body));
});
return PayOrderRespDTO.of(status, bodyObj.get("trade_no"), bodyObj.get("seller_id"), parseTime(params.get("gmt_payment")),
bodyObj.get("out_trade_no"), body);
@@ -126,7 +126,7 @@ public abstract class AbstractAlipayPayClient extends AbstractPayClient<AlipayPa
// 2.2 解析订单的状态
Integer status = parseStatus(response.getTradeStatus());
Assert.notNull(status, () -> {
throw new IllegalArgumentException(StrUtil.format("body({}) 的 trade_status 不正确", response.getBody()));
throw new IllegalArgumentException(CharSequenceUtil.format("body({}) 的 trade_status 不正确", response.getBody()));
});
return PayOrderRespDTO.of(status, response.getTradeNo(), response.getBuyerUserId(), LocalDateTimeUtil.of(response.getSendPayDate()),
outTradeNo, response);
@@ -248,11 +248,11 @@ public abstract class AbstractAlipayPayClient extends AbstractPayClient<AlipayPa
Participant payeeInfo = new Participant();
payeeInfo.setIdentityType("ALIPAY_LOGON_ID");
String logonId = MapUtil.getStr(reqDTO.getPayeeInfo(), "ALIPAY_LOGON_ID");
if (StrUtil.isEmpty(logonId)) {
if (CharSequenceUtil.isEmpty(logonId)) {
throw exception0(BAD_REQUEST.getCode(), "支付包登录 ID 不能为空");
}
String accountName = MapUtil.getStr(reqDTO.getPayeeInfo(), "ALIPAY_ACCOUNT_NAME");
if (StrUtil.isEmpty(accountName)) {
if (CharSequenceUtil.isEmpty(accountName)) {
throw exception0(BAD_REQUEST.getCode(), "支付包账户名称不能为空");
}
payeeInfo.setIdentity(logonId); // 支付宝登录号
@@ -2,7 +2,7 @@ package com.cf.imes.framework.pay.core.client.impl.alipay;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.cf.imes.framework.pay.core.client.dto.order.PayOrderRespDTO;
import com.cf.imes.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO;
import com.cf.imes.framework.pay.core.enums.channel.PayChannelEnum;
@@ -37,7 +37,7 @@ public class AlipayBarPayClient extends AbstractAlipayPayClient {
@Override
public PayOrderRespDTO doUnifiedOrder(PayOrderUnifiedReqDTO reqDTO) throws AlipayApiException {
String authCode = MapUtil.getStr(reqDTO.getChannelExtras(), "auth_code");
if (StrUtil.isEmpty(authCode)) {
if (CharSequenceUtil.isEmpty(authCode)) {
throw exception0(BAD_REQUEST.getCode(), "条形码不能为空");
}
@@ -30,6 +30,7 @@ public class MockPayClient extends AbstractPayClient<NonePayClientConfig> {
@Override
protected void doInit() {
// nothing
}
@Override
@@ -5,7 +5,7 @@ import cn.hutool.core.codec.Base64;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.date.TemporalAccessorUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.cf.imes.framework.common.util.io.FileUtils;
import com.cf.imes.framework.common.util.object.ObjectUtils;
import com.cf.imes.framework.pay.core.client.dto.order.PayOrderRespDTO;
@@ -43,6 +43,12 @@ import static cn.hutool.core.date.DatePattern.*;
@Slf4j
public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientConfig> {
private static final String UNKOWN_API_VERSION_NOTIFICATION = "未知的 API 版本(%s)";
private static final String SUCCESS_CODE = "SUCCESS";
private static final String PROCESSING_STATUS_CODE = "PROCESSING";
protected WxPayService client;
public AbstractWxPayClient(Long channelId, String channelCode, WxPayClientConfig config) {
@@ -63,10 +69,10 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
if (Base64.isBase64(config.getKeyContent())) {
payConfig.setKeyPath(FileUtils.createTempFile(Base64.decode(config.getKeyContent())).getPath());
}
if (StrUtil.isNotEmpty(config.getPrivateKeyContent())) {
if (CharSequenceUtil.isNotEmpty(config.getPrivateKeyContent())) {
payConfig.setPrivateKeyPath(FileUtils.createTempFile(config.getPrivateKeyContent()).getPath());
}
if (StrUtil.isNotEmpty(config.getPrivateCertContent())) {
if (CharSequenceUtil.isNotEmpty(config.getPrivateCertContent())) {
payConfig.setPrivateCertPath(FileUtils.createTempFile(config.getPrivateCertContent()).getPath());
}
@@ -86,7 +92,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
case WxPayClientConfig.API_VERSION_V3:
return doUnifiedOrderV3(reqDTO);
default:
throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
throw new IllegalArgumentException(String.format(UNKOWN_API_VERSION_NOTIFICATION, config.getApiVersion()));
}
} catch (WxPayException e) {
String errorCode = getErrorCode(e);
@@ -157,7 +163,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
case WxPayClientConfig.API_VERSION_V3:
return doParseOrderNotifyV3(body);
default:
throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
throw new IllegalArgumentException(String.format(UNKOWN_API_VERSION_NOTIFICATION, config.getApiVersion()));
}
}
@@ -166,7 +172,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
WxPayOrderNotifyResult response = client.parseOrderNotifyResult(body);
// 2. 构建结果
// V2 微信支付的回调,只有 SUCCESS 支付成功、CLOSED 支付失败两种情况,无需像支付宝一样解析的比较复杂
Integer status = Objects.equals(response.getResultCode(), "SUCCESS") ?
Integer status = Objects.equals(response.getResultCode(), SUCCESS_CODE) ?
PayOrderStatusRespEnum.SUCCESS.getStatus() : PayOrderStatusRespEnum.CLOSED.getStatus();
return PayOrderRespDTO.of(status, response.getTransactionId(), response.getOpenid(), parseDateV2(response.getTimeEnd()),
response.getOutTradeNo(), body);
@@ -192,7 +198,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
case WxPayClientConfig.API_VERSION_V3:
return doGetOrderV3(outTradeNo);
default:
throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
throw new IllegalArgumentException(String.format(UNKOWN_API_VERSION_NOTIFICATION, config.getApiVersion()));
}
} catch (WxPayException e) {
if (ObjectUtils.equalsAny(e.getErrCode(), "ORDERNOTEXIST", "ORDER_NOT_EXIST")) {
@@ -237,7 +243,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
case "NOTPAY":
case "USERPAYING": // 支付中,等待用户输入密码(条码支付独有)
return PayOrderStatusRespEnum.WAITING.getStatus();
case "SUCCESS":
case SUCCESS_CODE:
return PayOrderStatusRespEnum.SUCCESS.getStatus();
case "REFUND":
return PayOrderStatusRespEnum.REFUND.getStatus();
@@ -246,7 +252,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
case "PAYERROR": // 支付失败(其它原因,如银行返回失败)
return PayOrderStatusRespEnum.CLOSED.getStatus();
default:
throw new IllegalArgumentException(StrUtil.format("未知的支付状态({})", tradeState));
throw new IllegalArgumentException(CharSequenceUtil.format("未知的支付状态({})", tradeState));
}
}
@@ -261,7 +267,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
case WxPayClientConfig.API_VERSION_V3:
return doUnifiedRefundV3(reqDTO);
default:
throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
throw new IllegalArgumentException(String.format(UNKOWN_API_VERSION_NOTIFICATION, config.getApiVersion()));
}
} catch (WxPayException e) {
String errorCode = getErrorCode(e);
@@ -283,7 +289,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
// 2.1 执行请求
WxPayRefundResult response = client.refundV2(request);
// 2.2 创建返回结果
if (Objects.equals("SUCCESS", response.getResultCode())) { // V2 情况下,不直接返回退款成功,而是等待异步通知
if (Objects.equals(SUCCESS_CODE, response.getResultCode())) { // V2 情况下,不直接返回退款成功,而是等待异步通知
return PayRefundRespDTO.waitingOf(response.getRefundId(),
reqDTO.getOutRefundNo(), response);
}
@@ -302,11 +308,11 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
// 2.1 执行请求
WxPayRefundV3Result response = client.refundV3(request);
// 2.2 创建返回结果
if (Objects.equals("SUCCESS", response.getStatus())) {
if (Objects.equals(SUCCESS_CODE, response.getStatus())) {
return PayRefundRespDTO.successOf(response.getRefundId(), parseDateV3(response.getSuccessTime()),
reqDTO.getOutRefundNo(), response);
}
if (Objects.equals("PROCESSING", response.getStatus())) {
if (Objects.equals(PROCESSING_STATUS_CODE, response.getStatus())) {
return PayRefundRespDTO.waitingOf(response.getRefundId(),
reqDTO.getOutRefundNo(), response);
}
@@ -321,7 +327,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
case WxPayClientConfig.API_VERSION_V3:
return parseRefundNotifyV3(body);
default:
throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
throw new IllegalArgumentException(String.format(UNKOWN_API_VERSION_NOTIFICATION, config.getApiVersion()));
}
}
@@ -330,7 +336,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
WxPayRefundNotifyResult response = client.parseRefundNotifyResult(body);
WxPayRefundNotifyResult.ReqInfo result = response.getReqInfo();
// 2. 构建结果
if (Objects.equals("SUCCESS", result.getRefundStatus())) {
if (Objects.equals(SUCCESS_CODE, result.getRefundStatus())) {
return PayRefundRespDTO.successOf(result.getRefundId(), parseDateV2B(result.getSuccessTime()),
result.getOutRefundNo(), response);
}
@@ -342,7 +348,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
WxPayRefundNotifyV3Result response = client.parseRefundNotifyV3Result(body, null);
WxPayRefundNotifyV3Result.DecryptNotifyResult result = response.getResult();
// 2. 构建结果
if (Objects.equals("SUCCESS", result.getRefundStatus())) {
if (Objects.equals(SUCCESS_CODE, result.getRefundStatus())) {
return PayRefundRespDTO.successOf(result.getRefundId(), parseDateV3(result.getSuccessTime()),
result.getOutRefundNo(), response);
}
@@ -358,7 +364,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
case WxPayClientConfig.API_VERSION_V3:
return doGetRefundV3(outTradeNo, outRefundNo);
default:
throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
throw new IllegalArgumentException(String.format(UNKOWN_API_VERSION_NOTIFICATION, config.getApiVersion()));
}
} catch (WxPayException e) {
if (ObjectUtils.equalsAny(e.getErrCode(), "REFUNDNOTEXIST", "RESOURCE_NOT_EXISTS")) {
@@ -380,7 +386,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
// 2.1 执行请求
WxPayRefundQueryResult response = client.refundQuery(request);
// 2.2 创建返回结果
if (!Objects.equals("SUCCESS", response.getResultCode())) {
if (!Objects.equals(SUCCESS_CODE, response.getResultCode())) {
return PayRefundRespDTO.waitingOf(null,
outRefundNo, response);
}
@@ -390,10 +396,10 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
return PayRefundRespDTO.failureOf(outRefundNo, response);
}
switch (refund.getRefundStatus()) {
case "SUCCESS":
case SUCCESS_CODE:
return PayRefundRespDTO.successOf(refund.getRefundId(), parseDateV2B(refund.getRefundSuccessTime()),
outRefundNo, response);
case "PROCESSING":
case PROCESSING_STATUS_CODE:
return PayRefundRespDTO.waitingOf(refund.getRefundId(),
outRefundNo, response);
case "CHANGE": // 退款到银行发现用户的卡作废或者冻结了,导致原路退款银行卡失败,资金回流到商户的现金帐号,需要商户人工干预,通过线下或者财付通转账的方式进行退款
@@ -412,10 +418,10 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
WxPayRefundQueryV3Result response = client.refundQueryV3(request);
// 2.2 创建返回结果
switch (response.getStatus()) {
case "SUCCESS":
case SUCCESS_CODE:
return PayRefundRespDTO.successOf(response.getRefundId(), parseDateV3(response.getSuccessTime()),
outRefundNo, response);
case "PROCESSING":
case PROCESSING_STATUS_CODE:
return PayRefundRespDTO.waitingOf(response.getRefundId(),
outRefundNo, response);
case "ABNORMAL": // 退款异常
@@ -453,20 +459,20 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
}
static String getErrorCode(WxPayException e) {
if (StrUtil.isNotEmpty(e.getErrCode())) {
if (CharSequenceUtil.isNotEmpty(e.getErrCode())) {
return e.getErrCode();
}
if (StrUtil.isNotEmpty(e.getCustomErrorMsg())) {
if (CharSequenceUtil.isNotEmpty(e.getCustomErrorMsg())) {
return "CUSTOM_ERROR";
}
return e.getReturnCode();
}
static String getErrorMessage(WxPayException e) {
if (StrUtil.isNotEmpty(e.getErrCode())) {
if (CharSequenceUtil.isNotEmpty(e.getErrCode())) {
return e.getErrCodeDes();
}
if (StrUtil.isNotEmpty(e.getCustomErrorMsg())) {
if (CharSequenceUtil.isNotEmpty(e.getCustomErrorMsg())) {
return e.getCustomErrorMsg();
}
return e.getReturnMsg();
@@ -40,6 +40,7 @@ public class DebugDingTalkSmsClient extends AbstractSmsClient {
@Override
protected void doInit() {
// nothing
}
@Override
@@ -1,8 +1,8 @@
package com.cf.imes.framework.es.core.service;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import co.elastic.clients.elasticsearch.ElasticsearchAsyncClient;
import co.elastic.clients.elasticsearch.ElasticsearchClient;
@@ -50,7 +50,7 @@ public class ESDocumentServiceImpl implements ESDocumentService {
document.setCreateTime(simpleDateFormat.format(date));
document.setUpdateTime(simpleDateFormat.format(date));
if (StrUtil.isBlank(document.getId())) {
if (CharSequenceUtil.isBlank(document.getId())) {
document.setId(snowflake.nextIdStr());
}
return elasticsearchClient.index(idx -> idx
@@ -77,7 +77,7 @@ public class ESDocumentServiceImpl implements ESDocumentService {
document.setUpdateTime(simpleDateFormat.format(date));
IndexRequest.Builder<Object> indexReqBuilder = new IndexRequest.Builder<>();
indexReqBuilder.index(idxName);
if (StrUtil.isBlank(idxId)) {
if (CharSequenceUtil.isBlank(idxId)) {
idxId = snowflake.nextIdStr();
}
indexReqBuilder.id(idxId);
@@ -94,7 +94,7 @@ public class ESDocumentServiceImpl implements ESDocumentService {
*/
@Override
public IndexResponse createByJson(String idxName, String idxId, String jsonContent) throws Exception {
if (StrUtil.isBlank(idxId)) {
if (CharSequenceUtil.isBlank(idxId)) {
idxId = snowflake.nextIdStr();
}
String finalIdxId = idxId;
@@ -136,7 +136,7 @@ public class ESDocumentServiceImpl implements ESDocumentService {
Date date = new Date();
LocalDateTime now = LocalDateTime.now();
documents.forEach(esDocument -> {
if (StrUtil.isBlank(esDocument.getId())) {
if (CharSequenceUtil.isBlank(esDocument.getId())) {
esDocument.setId(snowflake.nextIdStr());
}
esDocument.setCreator(loginUser.getNickname());
@@ -169,7 +169,7 @@ public class ESDocumentServiceImpl implements ESDocumentService {
Date date = new Date();
documents.forEach(esDocument -> {
// 假设esDocument有一个ID集。如果没有,则应该抛出异常或进行相应的处理。
if (StrUtil.isBlank(esDocument.getId())) {
if (CharSequenceUtil.isBlank(esDocument.getId())) {
throw new IllegalArgumentException("更新操作的文档ID不能为空");
}
esDocument.setUpdater(loginUser.getNickname());
@@ -1,6 +1,6 @@
package com.cf.imes.framework.env.config;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.cf.imes.framework.common.util.collection.SetUtils;
import com.cf.imes.framework.env.core.util.EnvUtils;
import org.springframework.boot.SpringApplication;
@@ -25,20 +25,20 @@ public class EnvEnvironmentPostProcessor implements EnvironmentPostProcessor {
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
// 0. 设置 ${HOST_NAME} 兜底的环境变量
String hostNameKey = StrUtil.subBetween(EnvUtils.HOST_NAME_VALUE, "{", "}");
String hostNameKey = CharSequenceUtil.subBetween(EnvUtils.HOST_NAME_VALUE, "{", "}");
if (!environment.containsProperty(hostNameKey)) {
environment.getSystemProperties().put(hostNameKey, EnvUtils.getHostName());
}
// 1.1 如果没有 chenfeng.env.tag 配置项,则不进行配置项的修改
String tag = EnvUtils.getTag(environment);
if (StrUtil.isEmpty(tag)) {
if (CharSequenceUtil.isEmpty(tag)) {
return;
}
// 1.2 需要修改的配置项
for (String targetTagKey : TARGET_TAG_KEYS) {
String targetTagValue = environment.getProperty(targetTagKey);
if (StrUtil.isNotEmpty(targetTagValue)) {
if (CharSequenceUtil.isNotEmpty(targetTagValue)) {
continue;
}
environment.getSystemProperties().put(targetTagKey, tag);
@@ -1,7 +1,7 @@
package com.cf.imes.framework.env.core.fegin;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.cf.imes.framework.common.util.collection.CollectionUtils;
import com.cf.imes.framework.env.core.context.EnvContextHolder;
import com.cf.imes.framework.env.core.util.EnvUtils;
@@ -51,7 +51,7 @@ public class EnvLoadBalancerClient implements ReactorServiceInstanceLoadBalancer
public Mono<Response<ServiceInstance>> choose(Request request) {
// 情况一,没有 tag 时,使用默认的 reactiveLoadBalancer 实现负载均衡
String tag = EnvContextHolder.getTag();
if (StrUtil.isEmpty(tag)) {
if (CharSequenceUtil.isEmpty(tag)) {
return Mono.from(reactiveLoadBalancer.choose(request));
}
@@ -1,6 +1,6 @@
package com.cf.imes.framework.env.core.fegin;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.cf.imes.framework.env.core.context.EnvContextHolder;
import com.cf.imes.framework.env.core.util.EnvUtils;
import feign.RequestInterceptor;
@@ -16,7 +16,7 @@ public class EnvRequestInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
String tag = EnvContextHolder.getTag();
if (StrUtil.isNotEmpty(tag)) {
if (CharSequenceUtil.isNotEmpty(tag)) {
EnvUtils.setTag(requestTemplate, tag);
}
}
@@ -1,6 +1,6 @@
package com.cf.imes.framework.env.core.web;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.cf.imes.framework.env.core.context.EnvContextHolder;
import com.cf.imes.framework.env.core.util.EnvUtils;
import org.springframework.web.filter.OncePerRequestFilter;
@@ -24,7 +24,7 @@ public class EnvWebFilter extends OncePerRequestFilter {
throws ServletException, IOException {
// 如果没有 tag,则走默认的流程
String tag = EnvUtils.getTag(request);
if (StrUtil.isEmpty(tag)) {
if (CharSequenceUtil.isEmpty(tag)) {
chain.doFilter(request, response);
return;
}
@@ -1,6 +1,6 @@
package com.cf.imes.framework.excel.core.util;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.EasyExcelFactory;
import com.alibaba.excel.converters.longconverter.LongStringConverter;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import org.springframework.web.multipart.MultipartFile;
@@ -32,7 +32,7 @@ public class ExcelUtils {
public static <T> void write(HttpServletResponse response, String filename, String sheetName,
Class<T> head, List<T> data) throws IOException {
// 输出 Excel
EasyExcel.write(response.getOutputStream(), head)
EasyExcelFactory.write(response.getOutputStream(), head)
.autoCloseStream(false) // 不要自动关闭,交给 Servlet 自己处理
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 基于 column 长度,自动适配。最大 255 宽度
.registerConverter(new LongStringConverter()) // 避免 Long 类型丢失精度
@@ -43,7 +43,7 @@ public class ExcelUtils {
}
public static <T> List<T> read(MultipartFile file, Class<T> head) throws IOException {
return EasyExcel.read(file.getInputStream(), head, null)
return EasyExcelFactory.read(file.getInputStream(), head, null)
.autoCloseStream(false) // 不要自动关闭,交给 Servlet 自己处理
.doReadAllSync();
}
@@ -1,6 +1,6 @@
package com.cf.imes.framework.file.core.client;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import lombok.extern.slf4j.Slf4j;
/**
@@ -63,7 +63,7 @@ public abstract class AbstractFileClient<Config extends FileClientConfig> implem
* @return URL 访问地址
*/
protected String formatFileUrl(String domain, String path) {
return StrUtil.format("{}/admin-api/infra/file/{}/get/{}", domain, getId(), path);
return CharSequenceUtil.format("{}/admin-api/infra/file/{}/get/{}", domain, getId(), path);
}
}
@@ -18,6 +18,7 @@ public class DBFileClient extends AbstractFileClient<DBFileClientConfig> {
@Override
protected void doInit() {
// nothing
}
@Override
@@ -1,8 +1,9 @@
package com.cf.imes.framework.file.core.client.ftp;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.ftp.Ftp;
import cn.hutool.extra.ftp.FtpException;
import cn.hutool.extra.ftp.FtpMode;
@@ -27,10 +28,10 @@ public class FtpFileClient extends AbstractFileClient<FtpFileClientConfig> {
@Override
protected void doInit() {
// 把配置的 \ 替换成 /, 如果路径配置 \a\test, 替换成 /a/test, 替换方法已经处理 null 情况
config.setBasePath(StrUtil.replace(config.getBasePath(), StrUtil.BACKSLASH, StrUtil.SLASH));
config.setBasePath(CharSequenceUtil.replace(config.getBasePath(), StrPool.BACKSLASH, StrPool.SLASH));
// ftp的路径是 / 结尾
if (!config.getBasePath().endsWith(StrUtil.SLASH)) {
config.setBasePath(config.getBasePath() + StrUtil.SLASH);
if (!config.getBasePath().endsWith(StrPool.SLASH)) {
config.setBasePath(config.getBasePath() + StrPool.SLASH);
}
// 初始化 Ftp 对象
this.ftp = new Ftp(config.getHost(), config.getPort(), config.getUsername(), config.getPassword(),
@@ -42,11 +43,11 @@ public class FtpFileClient extends AbstractFileClient<FtpFileClientConfig> {
// 执行写入
String filePath = getFilePath(path);
String fileName = FileUtil.getName(filePath);
String dir = StrUtil.removeSuffix(filePath, fileName);
String dir = CharSequenceUtil.removeSuffix(filePath, fileName);
ftp.reconnectIfTimeout();
boolean success = ftp.upload(dir, fileName, new ByteArrayInputStream(content));
if (!success) {
throw new FtpException(StrUtil.format("上传文件到目标目录 ({}) 失败", filePath));
throw new FtpException(CharSequenceUtil.format("上传文件到目标目录 ({}) 失败", filePath));
}
// 拼接返回路径
return super.formatFileUrl(config.getDomain(), path);
@@ -63,7 +64,7 @@ public class FtpFileClient extends AbstractFileClient<FtpFileClientConfig> {
public byte[] getContent(String path) {
String filePath = getFilePath(path);
String fileName = FileUtil.getName(filePath);
String dir = StrUtil.removeSuffix(filePath, fileName);
String dir = CharSequenceUtil.removeSuffix(filePath, fileName);
ByteArrayOutputStream out = new ByteArrayOutputStream();
ftp.reconnectIfTimeout();
ftp.download(dir, fileName, out);
@@ -1,7 +1,7 @@
package com.cf.imes.framework.tracer.core.aop;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.cf.imes.framework.tracer.core.annotation.BizTrace;
import com.cf.imes.framework.common.util.spring.SpringExpressionUtils;
import com.cf.imes.framework.tracer.core.util.TracerFrameworkUtils;
@@ -55,7 +55,7 @@ public class BizTraceAspect {
private String getOperationName(ProceedingJoinPoint joinPoint, BizTrace trace) {
// 自定义操作名
if (StrUtil.isNotEmpty(trace.operationName())) {
if (CharSequenceUtil.isNotEmpty(trace.operationName())) {
return BIZ_OPERATION_NAME_PREFIX + trace.operationName();
}
// 默认操作名,使用方法名
@@ -1,7 +1,7 @@
package com.cf.imes.framework.mq.redis.config;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.system.SystemUtil;
import com.cf.imes.framework.common.enums.DocumentEnum;
import com.cf.imes.framework.mq.redis.core.RedisMQTemplate;
@@ -162,9 +162,9 @@ public class ChenfengRedisMQConsumerAutoConfiguration {
Properties info = redisTemplate.execute((RedisCallback<Properties>) RedisServerCommands::info);
String version = MapUtil.getStr(info, "redis_version");
// 校验最低版本必须大于等于 5.0.0
int majorVersion = Integer.parseInt(StrUtil.subBefore(version, '.', false));
int majorVersion = Integer.parseInt(CharSequenceUtil.subBefore(version, '.', false));
if (majorVersion < 5) {
throw new IllegalStateException(StrUtil.format("您当前的 Redis 版本为 {},小于最低要求的 5.0.0 版本!" +
throw new IllegalStateException(CharSequenceUtil.format("您当前的 Redis 版本为 {},小于最低要求的 5.0.0 版本!" +
"请参考 {} 文档进行安装。", version, DocumentEnum.REDIS_INSTALL.getUrl()));
}
}
@@ -29,7 +29,7 @@ public class ChenfengDataSourceAutoConfiguration {
DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
// 提取 common.js 的配置路径
String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*";
String commonJsPattern = pattern.replaceAll("\\*", "js/common.js");
String commonJsPattern = pattern.replace("\\*", "js/common.js");
// 创建 DruidAdRemoveFilter Bean
FilterRegistrationBean<DruidAdRemoveFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new DruidAdRemoveFilter());
@@ -1,6 +1,6 @@
package com.cf.imes.framework.mybatis.config;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
import com.cf.imes.framework.mybatis.core.generator.SnowFlakeGenerator;
import com.cf.imes.framework.mybatis.core.handler.DefaultDBFieldHandler;
@@ -70,7 +70,7 @@ public class ChenfengMybatisAutoConfiguration {
}
}
// 找不到合适的 IKeyGenerator 实现类
throw new IllegalArgumentException(StrUtil.format("DbType{} 找不到合适的 IKeyGenerator 实现类", dbType));
throw new IllegalArgumentException(CharSequenceUtil.format("DbType{} 找不到合适的 IKeyGenerator 实现类", dbType));
}
}
@@ -1,6 +1,6 @@
package com.cf.imes.framework.mybatis.config;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.cf.imes.framework.common.util.collection.SetUtils;
import com.cf.imes.framework.mybatis.core.enums.SqlConstants;
import com.cf.imes.framework.mybatis.core.util.JdbcUtils;
@@ -70,7 +70,7 @@ public class IdTypeEnvironmentPostProcessor implements EnvironmentPostProcessor
public void setJobStoreDriverIfPresent(ConfigurableEnvironment environment, DbType dbType) {
String driverClass = environment.getProperty(QUARTZ_JOB_STORE_DRIVER_KEY);
if (StrUtil.isNotEmpty(driverClass)) {
if (CharSequenceUtil.isNotEmpty(driverClass)) {
return;
}
// 根据 dbType 类型,获取对应的 driverClass
@@ -88,18 +88,18 @@ public class IdTypeEnvironmentPostProcessor implements EnvironmentPostProcessor
break;
}
// 设置 driverClass 变量
if (StrUtil.isNotEmpty(driverClass)) {
if (CharSequenceUtil.isNotEmpty(driverClass)) {
environment.getSystemProperties().put(QUARTZ_JOB_STORE_DRIVER_KEY, driverClass);
}
}
public static DbType getDbType(ConfigurableEnvironment environment) {
String primary = environment.getProperty(DATASOURCE_DYNAMIC_KEY + "." + "primary");
if (StrUtil.isEmpty(primary)) {
if (CharSequenceUtil.isEmpty(primary)) {
return null;
}
String url = environment.getProperty(DATASOURCE_DYNAMIC_KEY + ".datasource." + primary + ".url");
if (StrUtil.isEmpty(url)) {
if (CharSequenceUtil.isEmpty(url)) {
return null;
}
return JdbcUtils.getDbType(url);
@@ -36,6 +36,6 @@ public class ChenfengDataSourceEncryptInitEvent implements DataSourceInitEvent {
*/
@Override
public void afterCreate(DataSource dataSource) {
// nothing
}
}
@@ -1,6 +1,6 @@
package com.cf.imes.framework.mybatis.core.handler;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.cf.imes.framework.common.util.json.JsonUtils;
import com.cf.imes.framework.mybatis.OAuth2AccessTokenDO;
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
@@ -137,7 +137,7 @@ public class DefaultDBFieldHandler implements MetaObjectHandler {
HttpServletRequest request = WebFrameworkUtils.getRequest();
// 1. 获得 Token。优先级:Header > Parameter
String token = request.getHeader(headerName);
if (StrUtil.isEmpty(token)) {
if (CharSequenceUtil.isEmpty(token)) {
token = request.getParameter(parameterName);
}
if (!StringUtils.hasText(token)) {
@@ -1,6 +1,6 @@
package com.cf.imes.framework.mybatis.core.util;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.collection.CollUtil;
import com.cf.imes.framework.common.pojo.PageParam;
import com.cf.imes.framework.common.pojo.SortingField;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
@@ -32,7 +32,7 @@ public class MyBatisUtils {
// 页码 + 数量
Page<T> page = new Page<>(pageParam.getPageNo(), pageParam.getPageSize());
// 排序字段
if (!CollectionUtil.isEmpty(sortingFields)) {
if (!CollUtil.isEmpty(sortingFields)) {
page.addOrder(sortingFields.stream().map(sortingField -> SortingField.ORDER_ASC.equals(sortingField.getOrder()) ?
OrderItem.asc(sortingField.getField()) : OrderItem.desc(sortingField.getField()))
.collect(Collectors.toList()));
@@ -1,6 +1,6 @@
package com.cf.imes.framework.idempotent.core.keyresolver.impl;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.crypto.SecureUtil;
import com.cf.imes.framework.idempotent.core.annotation.Idempotent;
import com.cf.imes.framework.idempotent.core.keyresolver.IdempotentKeyResolver;
@@ -18,7 +18,7 @@ public class DefaultIdempotentKeyResolver implements IdempotentKeyResolver {
@Override
public String resolver(JoinPoint joinPoint, Idempotent idempotent) {
String methodName = joinPoint.getSignature().toString();
String argsStr = StrUtil.join(",", joinPoint.getArgs());
String argsStr = CharSequenceUtil.join(",", joinPoint.getArgs());
return SecureUtil.md5(methodName + argsStr);
}
@@ -1,6 +1,6 @@
package com.cf.imes.framework.redis.config;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.StrPool;
import com.cf.imes.framework.redis.core.TimeoutRedisCacheManager;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.cache.CacheProperties;
@@ -44,10 +44,10 @@ public class ChenfengCacheAutoConfiguration {
config = config.computePrefixWith(cacheName -> {
String keyPrefix = cacheProperties.getRedis().getKeyPrefix();
if (StringUtils.hasText(keyPrefix)) {
keyPrefix = keyPrefix.lastIndexOf(StrUtil.COLON) == -1 ? keyPrefix + StrUtil.COLON : keyPrefix;
return keyPrefix + cacheName + StrUtil.COLON;
keyPrefix = keyPrefix.lastIndexOf(StrPool.COLON) == -1 ? keyPrefix + StrPool.COLON : keyPrefix;
return keyPrefix + cacheName + StrPool.COLON;
}
return cacheName + StrUtil.COLON;
return cacheName + StrPool.COLON;
});
// 设置使用 JSON 序列化方式
config = config.serializeValuesWith(
@@ -1,6 +1,6 @@
package com.cf.imes.framework.web.core.filter;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.cf.imes.framework.web.config.WebProperties;
import lombok.RequiredArgsConstructor;
import org.springframework.web.filter.OncePerRequestFilter;
@@ -20,7 +20,7 @@ public abstract class ApiRequestFilter extends OncePerRequestFilter {
@Override
protected boolean shouldNotFilter(HttpServletRequest request) {
// 只过滤 API 请求的地址
return !StrUtil.startWithAny(request.getRequestURI(), webProperties.getAdminApi().getPrefix(),
return !CharSequenceUtil.startWithAny(request.getRequestURI(), webProperties.getAdminApi().getPrefix(),
webProperties.getAppApi().getPrefix());
}
@@ -1,6 +1,6 @@
package com.cf.imes.framework.web.core.filter;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants;
import com.cf.imes.framework.common.pojo.CommonResult;
@@ -37,14 +37,14 @@ public class DataSourceFilter extends OncePerRequestFilter {
@Override
protected boolean shouldNotFilter(HttpServletRequest request) {
// 只过滤 API 请求的地址
return !StrUtil.startWithAny(request.getRequestURI(), webProperties.getAdminApi().getPrefix(),
return !CharSequenceUtil.startWithAny(request.getRequestURI(), webProperties.getAdminApi().getPrefix(),
webProperties.getAppApi().getPrefix());
}
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
String dataCode = request.getHeader(DATA_SOURCE_CODE);
if(StrUtil.isEmpty(dataCode)) {
if(CharSequenceUtil.isEmpty(dataCode)) {
//TODO 如果要严谨一点,应该再去校验一下token
ServletUtils.writeJSON(response, CommonResult.error(GlobalErrorCodeConstants.UNAUTHORIZED.getCode(), "访问令牌已过期"));
log.info("Let the user log in because there is no data-code! requestURI==>{}", request.getRequestURI());
@@ -1,6 +1,6 @@
package com.cf.imes.framework.web.core.filter;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.framework.common.util.servlet.ServletUtils;
import com.cf.imes.framework.web.core.util.WebFrameworkUtils;
@@ -22,7 +22,7 @@ public class DemoFilter extends OncePerRequestFilter {
@Override
protected boolean shouldNotFilter(HttpServletRequest request) {
String method = request.getMethod();
return !StrUtil.equalsAnyIgnoreCase(method, "POST", "PUT", "DELETE") // 写操作时,不进行过滤率
return !CharSequenceUtil.equalsAnyIgnoreCase(method, "POST", "PUT", "DELETE") // 写操作时,不进行过滤率
|| WebFrameworkUtils.getLoginUserId(request) == null; // 非登录用户时,不进行过滤
}
@@ -236,6 +236,10 @@ public class GlobalExceptionHandler {
return tableNotExistsResult;
}
// if(ex instanceof NullPointerException){
// return CommonResult.error(DATA_EXCEPTION_ERROR.getCode(), DATA_EXCEPTION_ERROR.getMsg());
// }
// 情况二:部分特殊的库的处理
if (Objects.equals("io.github.resilience4j.ratelimiter.RequestNotPermitted", ex.getClass().getName())) {
return requestNotPermittedExceptionHandler(req, ex);
@@ -1,6 +1,6 @@
package com.cf.imes.framework.websocket.core.handler;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.TypeUtil;
import com.cf.imes.framework.common.util.json.JsonUtils;
import com.cf.imes.framework.organ.core.util.OrganUtils;
@@ -60,7 +60,7 @@ public class JsonWebSocketMessageHandler extends TextWebSocketHandler {
log.error("[handleTextMessage][session({}) message({}) 解析为空]", session.getId(), message.getPayload());
return;
}
if (StrUtil.isEmpty(jsonMessage.getType())) {
if (CharSequenceUtil.isEmpty(jsonMessage.getType())) {
log.error("[handleTextMessage][session({}) message({}) 类型为空]", session.getId(), message.getPayload());
return;
}
@@ -1,7 +1,7 @@
package com.cf.imes.framework.websocket.core.sender;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.cf.imes.framework.common.util.json.JsonUtils;
import com.cf.imes.framework.websocket.core.message.JsonWebSocketMessage;
import com.cf.imes.framework.websocket.core.session.WebSocketSessionManager;
@@ -53,7 +53,7 @@ public abstract class AbstractWebSocketMessageSender implements WebSocketMessage
public void send(String sessionId, Integer userType, Long userId, String messageType, String messageContent) {
// 1. 获得 Session 列表
List<WebSocketSession> sessions = Collections.emptyList();
if (StrUtil.isNotEmpty(sessionId)) {
if (CharSequenceUtil.isNotEmpty(sessionId)) {
WebSocketSession session = sessionManager.getSession(sessionId);
if (session != null) {
sessions = Collections.singletonList(session);
@@ -1,17 +1,13 @@
package com.cf.imes.gateway.filter.security;
import cn.hutool.core.util.StrUtil;
import com.cf.imes.framework.common.core.KeyValue;
import cn.hutool.core.text.CharSequenceUtil;
import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.framework.common.util.cache.CacheUtils;
import com.cf.imes.framework.common.util.json.JsonUtils;
import com.cf.imes.gateway.util.SecurityFrameworkUtils;
import com.cf.imes.gateway.util.WebFrameworkUtils;
import com.cf.imes.module.system.api.oauth2.OAuth2TokenApi;
import com.cf.imes.module.system.api.oauth2.dto.OAuth2AccessTokenCheckRespDTO;
import com.fasterxml.jackson.core.type.TypeReference;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import org.springframework.cloud.client.loadbalancer.reactive.ReactorLoadBalancerExchangeFilterFunction;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
@@ -22,7 +18,6 @@ import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.time.Duration;
import java.util.Objects;
import java.util.function.Function;
@@ -53,23 +48,6 @@ public class TokenAuthenticationFilter implements GlobalFilter, Ordered {
private final WebClient webClient;
/**
* 登录用户的本地缓存
*
* key1:多组织的编号
* key2:访问令牌
*/
private final LoadingCache<KeyValue<Long, String>, LoginUser> loginUserCache = CacheUtils.buildAsyncReloadingCache(Duration.ofMinutes(1),
new CacheLoader<KeyValue<Long, String>, LoginUser>() {
@Override
public LoginUser load(KeyValue<Long, String> token) {
String body = checkAccessToken(token.getKey(), token.getValue()).block();
return buildUser(body);
}
});
public TokenAuthenticationFilter(ReactorLoadBalancerExchangeFilterFunction lbFunction) {
// Q:为什么不使用 OAuth2TokenApi 进行调用?
// A1Spring Cloud OpenFeign 官方未内置 Reactive 的支持 https://docs.spring.io/spring-cloud-openfeign/docs/current/reference/html/#reactive-support
@@ -85,7 +63,7 @@ public class TokenAuthenticationFilter implements GlobalFilter, Ordered {
// 情况一,如果没有 Token 令牌,则直接继续 filter
String token = SecurityFrameworkUtils.obtainAuthorization(exchange);
if (StrUtil.isEmpty(token)) {
if (CharSequenceUtil.isEmpty(token)) {
return chain.filter(exchange);
}
@@ -108,21 +86,11 @@ public class TokenAuthenticationFilter implements GlobalFilter, Ordered {
}
private Mono<LoginUser> getLoginUser(ServerWebExchange exchange, String token) {
//Long organId = organIdCache.getIfPresent(token);
// 从缓存中,获取 LoginUser
// 用token从checktoken api中获取当前用户
Long organId = WebFrameworkUtils.getOrganId(exchange);
KeyValue<Long, String> cacheKey = new KeyValue<Long, String>().setKey(organId).setValue(token);
LoginUser localUser = loginUserCache.getIfPresent(cacheKey);
if (localUser != null) {
return Mono.just(localUser);
}
// 缓存不存在,则请求远程服务
return checkAccessToken(organId, token).flatMap((Function<String, Mono<LoginUser>>) body -> {
LoginUser remoteUser = buildUser(body);
if (remoteUser != null) {
// 非空,则进行缓存
loginUserCache.put(cacheKey, remoteUser);
return Mono.just(remoteUser);
}
return Mono.empty();
@@ -32,6 +32,7 @@ public interface ErrorCodeConstants {
ErrorCode ORDER_NOT_NEW_ORDER = new ErrorCode(1_001_109_000, "生产单不为新单,清空无效");
ErrorCode ORDER_NOT_CANCEL = new ErrorCode(1_001_109_000, "生产单已排单,小板操作无效");
ErrorCode ORDER_CANCEL = new ErrorCode(1_001_109_000, "生产单未作废,还原无效");
ErrorCode ORDER_PLAN_ERROR = new ErrorCode(1_001_109_001, "选中删除对象有已开料板件,请联系管理员修改开料状态后再删除!");
// ========== 生产单 TODO 补充编号 ==========
ErrorCode MODULE_NOT_EXISTS = new ErrorCode(1_001_110_000, "模块不存在");
@@ -1,12 +1,13 @@
package com.cf.imes.module.executor.controller.admin.goods.vo;
import lombok.*;
import com.cf.imes.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.cf.imes.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static com.cf.imes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@@ -24,7 +25,7 @@ public class GoodsPageReqVO extends PageParam {
private Long rawGoodsId;
@Schema(description = "商品 ID", example = "243")
private Long goodsId;
private String goodsId;
@Schema(description = "商品名称", example = "晨丰")
private String goodsName;
@@ -1,14 +1,12 @@
package com.cf.imes.module.executor.controller.admin.goods.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import lombok.Data;
import java.math.BigDecimal;
import java.util.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 生产单商品 Response VO")
@Data
@@ -29,7 +27,7 @@ public class GoodsRespVO {
@Schema(description = "商品 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "243")
@ExcelProperty("商品 ID")
private Long goodsId;
private String goodsId;
@Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "晨丰")
@ExcelProperty("商品名称")
@@ -1,11 +1,9 @@
package com.cf.imes.module.executor.controller.admin.goods.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import lombok.Data;
import java.math.BigDecimal;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 生产单商品新增/修改 Request VO")
@Data
@@ -21,7 +19,7 @@ public class GoodsSaveReqVO {
private Long rawGoodsId;
@Schema(description = "商品 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "243")
private Long goodsId;
private String goodsId;
@Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "晨丰")
private String goodsName;
@@ -15,7 +15,7 @@ import java.math.BigDecimal;
public class OrderGoodsPlateRespVO implements Comparable<OrderGoodsPlateRespVO> {
@Schema(description = "商品 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "243")
private Long goodsId;
private String goodsId;
@Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "晨丰")
private String goodsName;
@@ -128,13 +128,5 @@ public class OptimizePlanController {
}
@DeleteMapping("/delete")
@Operation(summary = "ES批量删除测试")
@PreAuthorize("@ss.hasPermission('placeorder:delete')")
public CommonResult<String> deleteTest(@RequestParam("id") List<Long> id) {
return success(optimizePlanService.deleteTest(id));
}
}
@@ -44,7 +44,7 @@ public class PlanController {
@PostMapping("/create")
@Operation(summary = "创建排单")
@PreAuthorize("@ss.hasPermission('placeorder:create')")
public CommonResult<Map<Long,Long>> createPlan(@Validated(CreateGroup.class) @RequestBody PlanSaveReqVO createReqVO) {
public CommonResult<Map<String,Long>> createPlan(@Validated(CreateGroup.class) @RequestBody PlanSaveReqVO createReqVO) {
return success(planService.createPlan(createReqVO));
}
@@ -20,7 +20,7 @@ public class OrderIds {
@Schema(description = "商品ID-板材库对应的大板ID")
private Long goodsId;
private String goodsId;
@@ -37,7 +37,7 @@ public class NotPlanGoodsRespVO {
@Schema(description = "商品ID-板材库对应的大板ID")
private Long goodsId;
private String goodsId;
@Schema(description = "商品名称")
@@ -36,7 +36,7 @@ public class OptimizeRemainPlate {
@Schema(description = "商品ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long goodsId;
private String goodsId;
@@ -1,66 +0,0 @@
package com.cf.imes.module.executor.controller.admin.plan.saveOptimize;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
import static com.cf.imes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
import static com.cf.imes.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT;
@Data
@Schema(description = "优化后的生产单数据")
public class SaveOrderReqVO {
@Schema(description = "生产单id")
private Long orderId;
@Schema(description = "父id")
private Long parentNo;
@Schema(description = "自定义单号")
private String customOrderNo;
@Schema(description = "客户")
private String customer;
@Schema(description = "地址")
private String address;
@Schema(description = "客户电话")
private String phoneNumber;
@Schema(description = "经销商")
private String dealer;
@Schema(description = "经销商电话")
private String dealerPhoneNumber;
@Schema(description = "业务员")
private String salesman;
@Schema(description = "拆单员")
private String splitter;
@Schema(description = "备注")
private String remark;
@Schema(description = "交付日期")
@JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
private Date deliveryDate;
@Schema(description = "生产单类型,1主单 2子单")
private Integer type;
@Schema(description = "生产单排序号")
private Integer sort;
@Schema(description = "CAD数据类型,1CAD 2WebCAD 3Excel")
private Integer dataType;
@Schema(description = "订单状态,0未排单1已排单2生产中3加工完成4打包完成5入库完成6出库完成")
private Integer status;
}
@@ -30,7 +30,7 @@ public class GoodsReqVO {
private Long rawGoodsId;
@Schema(description = "商品 ID-大板的实际ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "243")
private Long goodsId;
private String goodsId;
@Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "晨丰")
private String goodsName;
@@ -25,7 +25,7 @@ public class NotPlanOrderPlateRespVO {
private List<OrderIds> orderIdList;
@Schema(description = "商品ID-板材库对应的大板ID")
private Long goodsId;
private String goodsId;
@Schema(description = "商品名称")
private String goodsName;
@@ -17,7 +17,7 @@ public class OrderGoodsResp {
@Schema(description = "生产单id")
private List<OrderIds> orderIds;
@Schema(description = "商品id-商品编号")
private Long goodsId;
private String goodsId;
@Schema(description = "商品名称")
private String goodsName;
@Schema(description = "商品材质")
@@ -57,7 +57,7 @@ public class OrderPageReqVOCopy extends PageParam {
// todo 目前商品ID的数据筛选只解决了非混单的情况(非混单,数据类型为Long即可,混单情况需要改变),混单数据筛选待解决
@Schema(description = "商品ID-板材库对应的大板ID")
private Long goodsId;
private String goodsId;
@Schema(description = "大板分类ID")
private List<Long> ids;
@@ -46,7 +46,7 @@ public class OrderRespVOCopy {
@Schema(description = "平方")
private BigDecimal area = new BigDecimal("0");
@Schema(description = "商品id")
private Long goodsId;
private String goodsId;
// @Schema(description = "商品名称")
// private String goodsName;
@@ -12,7 +12,7 @@ import java.math.BigDecimal;
public class PlanGoodsVO {
@Schema(description = "商品id")
private Long goodsId;
private String goodsId;
@Schema(description = "商品名称")
private String goodsName;
@Schema(description = "材质")
@@ -78,7 +78,7 @@ public class PlanSaveReqVO {
@Schema(description = "板材库大板id")
@NotNull
private Long goodsId;
private String goodsId;
@Schema(description = "余料板ID")
@NotNull
@@ -40,7 +40,7 @@ public class PlateDetialRespVO {
@Schema(description = "大板实际ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long goodsId;
private String goodsId;
@Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String goodsName;
@@ -26,7 +26,7 @@ public class PlateInfoVO {
@Schema(description = "板材库对应的大板ID-大板实际ID")
private Long goodsId;
private String goodsId;
@Schema(description = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板", requiredMode = Schema.RequiredMode.REQUIRED)
@@ -15,7 +15,7 @@ public class PlatePage {
@Schema(description = "生产单id")
private Long orderId;
@Schema(description = "商品id")
private Long goodsId;
private String goodsId;
@Schema(description = "板名称")
private String name;
@Schema(description = "商品名称")
@@ -50,7 +50,7 @@ public class OptimizationSavePlateReqVO {
@Schema(description = "商品ID-大板的实际ID")
private Long goodsId;
private String goodsId;
@Schema(description = "纹路类型,0 正纹 1 可翻转 2 反纹")
private Integer texture;
@@ -31,7 +31,7 @@ public class OptimizeBoardModelDO extends ESDocument {
@Schema(description = "大板的实际ID")
private Long goodsId;
private String goodsId;
@Schema(description = "生产单已优化小板数量")
@@ -165,6 +165,10 @@ public class PlateDO extends BaseDO {
* 是否造型
*/
private Boolean isRowHole;
/**
* 是否优化
*/
private Boolean isOptimized;
/**
* 排单过滤类型,1 有挖穿造型 2 有挖穿孔 4 有二维刀路 8 可叠
*/
@@ -9,7 +9,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.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;
import org.apache.ibatis.annotations.Mapper;
@@ -17,6 +16,7 @@ import org.apache.ibatis.annotations.Param;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
@@ -80,14 +80,9 @@ public interface GoodsMapper extends BaseMapperX<GoodsDO> {
void deletedById(@Param("ids") List<Long> ids, @Param("organId") Long organId);
IPage<OrderGoodsResp> selectGoods(@Param("page") IPage page, @Param("goodsIds") List<Long> goodsIds, @Param("organId") Long organId);
List<NotPlanGoodsRespVO> selectGoodsPlateList(@Param("goodIds") List<Long> goodIds,@Param("organId") Long organId);
default List<GoodsDO> selectListByGoodsId(Long goodsId, Long organId) {
default List<GoodsDO> selectListByGoodsId(String goodsId, Long organId) {
return selectList(new LambdaQueryWrapperX<GoodsDO>()
.eq(GoodsDO::getOrganId, organId)
.eq(GoodsDO::getDeleted, false)
@@ -112,7 +107,7 @@ public interface GoodsMapper extends BaseMapperX<GoodsDO> {
default List<GoodsDO> selectListByGoodsIdList(List<Long> goodsIds,List<Long> orderIds, Long organId) {
default List<GoodsDO> selectListByGoodsIdList(List<String> goodsIds,List<Long> orderIds, Long organId) {
return selectList(new LambdaQueryWrapperX<GoodsDO>()
.eq(GoodsDO::getOrganId, organId)
.eq(GoodsDO::getDeleted, false)
@@ -122,10 +117,10 @@ public interface GoodsMapper extends BaseMapperX<GoodsDO> {
}
List<GoodsDO> seleTestSQL(@Param("filed") String filed,@Param("goodsIds") List<Long> goodsIds ,@Param("organId") Long organId);
List<GoodsDO> seleTestSQL(@Param("filed") String filed,@Param("goodsIds") List<String> goodsIds ,@Param("organId") Long organId);
default GoodsDO selectGoodsId(Long orderId, Long goodsId, Long organId) {
default GoodsDO selectGoodsId(Long orderId, String goodsId, Long organId) {
return selectOne(new LambdaQueryWrapperX<GoodsDO>()
.eq(GoodsDO::getOrganId, organId)
.eq(GoodsDO::getDeleted, false)
@@ -135,11 +130,6 @@ public interface GoodsMapper extends BaseMapperX<GoodsDO> {
}
default PageResult<GoodsDO> selectTestSQL(OrderPageReqVOCopy pageReqVO) {
return selectPage(pageReqVO, new LambdaQueryWrapperX<GoodsDO>()
.eq(GoodsDO::getOrganId, getUserOrganId())
.orderByDesc(GoodsDO::getId));
}
IPage<OrderGoodsResp> selectOrderGoodsList(@Param("page") IPage page, @Param(Constants.WRAPPER) Wrapper<GoodsDO> wrapper);
@@ -204,4 +194,9 @@ public interface GoodsMapper extends BaseMapperX<GoodsDO> {
List<OrderRoomBodyList> selectNoPlanRoomBody(@Param("orderIds") List<Long> orderIds, @Param("organId") Long organId);
IPage<OrderRespVOCopy> selectOrderPlate(@Param("page") IPage page,@Param("organId") Long organId);
List<Long> selectPlanOrderList(@Param("orderId") Long orderId,@Param("roomIds") Set<Long> roomIds, @Param("bodyId") Long bodyId,@Param("organId") Long organId);
}
@@ -48,8 +48,8 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
// .leftJoin(OrderItemDO.class, OrderItemDO::getId, PlanItemDO::getItemId)
.leftJoin(OrderDO.class, OrderDO::getId, GoodsDO::getOrderId)
.like(OrderDO::getCustomer, reqVO.getCustomer())
.orderBy(true, true, PlanDO::getSort)
.orderByDesc(PlanDO::getUpdateTime)
// .orderBy(true, true, PlanDO::getSort)
.orderByDesc(PlanDO::getCreateTime)
);
}
@@ -68,8 +68,8 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
.betweenIfPresent(PlanDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(PlanDO::getOperator, reqVO.getOperator())
.betweenIfPresent(PlanDO::getProduceTime, reqVO.getProduceTime())
.orderBy(true, true, PlanDO::getSort)
.orderByDesc(PlanDO::getUpdateTime));
// .orderBy(true, true, PlanDO::getSort)
.orderByDesc(PlanDO::getCreateTime));
}
List<PlateOptimize> selectPlateListByPlanId(@Param("planId") Long planId, @Param("organId") Long organId);
@@ -107,11 +107,15 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
List<PlanDO> selectPlanIds(@Param("updateTime") String updateTime,@Param("sort") Long sort,@Param("organId") Long organId,@Param("planId") Long planId);
List<PlanDO> selectPlanIds(@Param("createTime") String createTime,@Param("sort") Long sort,@Param("organId") Long organId,@Param("planId") Long planId);
List<PlanDO> selectPlanIdsFalse(@Param("updateTime") String updateTime,@Param("sort") Long sort,@Param("organId") Long organId,@Param("planId") Long planId);
List<PlanDO> selectPlanIdsFalse(@Param("createTime") String createTime,@Param("sort") Long sort,@Param("organId") Long organId,@Param("planId") Long planId);
List<PlanDO> selectPlanStatus(@Param("planIds") List<Long> planIds,@Param("organId") Long organId);
// List<PlanDO> seleTestSQL(@Param("sql") String sql);
@@ -32,7 +32,7 @@ public interface OrderPlateStatisticsMapper extends BaseMapperX<PlateDO> {
* @param reqVO
* @return
*/
List<OrderGoodsPlateRespVO> selectTopTenPlateCountListGroupByOrderDate(@Param("goodsIds") List<Long> goodsIdList, @Param("req") OrderStatisticsReqVO reqVO);
List<OrderGoodsPlateRespVO> selectTopTenPlateCountListGroupByOrderDate(@Param("goodsIds") List<String> goodsIdList, @Param("req") OrderStatisticsReqVO reqVO);
/**
@@ -49,6 +49,6 @@ public interface OrderPlateStatisticsMapper extends BaseMapperX<PlateDO> {
* @param reqVO
* @return
*/
List<OrderGoodsPlateRespVO> selectTopTenPlateAreaListGroupByOrderDate(@Param("goodsIds") List<Long> goodsIdList, @Param("req") OrderStatisticsReqVO reqVO);
List<OrderGoodsPlateRespVO> selectTopTenPlateAreaListGroupByOrderDate(@Param("goodsIds") List<String> goodsIdList, @Param("req") OrderStatisticsReqVO reqVO);
}
@@ -201,10 +201,11 @@ public interface PlateMapper extends BaseMapperX<PlateDO> {
default List<PlateDO> selectPlateIdList(List<Long> goodsIdList, Long organId) {
default List<PlateDO> selectPlateIdList(List<Long> orderIds,List<Long> goodsIdList, Long organId) {
return selectList(new LambdaQueryWrapperX<PlateDO>()
.eq(PlateDO::getOrganId,organId)
.eq(PlateDO::getDeleted,false)
.inIfPresent(PlateDO::getOrderId,orderIds)
.inIfPresent(PlateDO::getGoodsId,goodsIdList)
.eq(PlateDO::getType, OrderPlateTypeEnum.SELFINCREASINGBOARD.getType())
.select(PlateDO::getId));
@@ -223,6 +224,14 @@ public interface PlateMapper extends BaseMapperX<PlateDO> {
}
List<PlatePage> selectNoPlanPlateList(@Param(Constants.WRAPPER) Wrapper<PlateDO> queryWrapperX2);
void updatePlateOptimized(@Param("orderIdList") List<Long> orderIdList,@Param("ids") List<Long> ids,@Param("organId") Long organId);
void updateNoPlateOptimized(@Param("orderIdList") List<Long> orderIdList,@Param("ids") List<Long> ids,@Param("organId") Long organId);
// List<PlateDO> selectTestSQL(@Param("sql") String sql);
@@ -5,7 +5,6 @@ import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.CuttingSta
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.SavePlanPlateResultReqVO;
import com.cf.imes.module.executor.controller.admin.plan.vo.AddRemainReqVO;
import com.cf.imes.module.executor.controller.admin.plan.vo.GetSourceDataReq;
import com.cf.imes.module.executor.controller.admin.plan.vo.OrderPageReqVOCopy;
import com.cf.imes.module.executor.controller.admin.plan.vo.PlateOptimize;
import com.cf.imes.module.executor.dal.dataobject.goods.OptimizeBoardModelDO;
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
@@ -18,7 +17,7 @@ public interface OptimizePlanService {
String ORDER_PLATE_MODEL = "imes_order_plate_model";
String ORDER_REMAIN_PLATE_MODEL = "imes_order_remain_plate_model";
String ORDER_REMAIN_PLATE_MODEL = "imes_order_optimize_plate_model";
List<PlateOptimize> getPlateListByPlanId(Long planId);
@@ -49,6 +48,4 @@ public interface OptimizePlanService {
List<OptimizeBoardModelDO> buildBoardByOrderIds(Collection<Long> orderIds, String index, Integer size);
String deleteTest(List<Long> id);
}
@@ -14,7 +14,6 @@ import com.cf.imes.framework.common.enums.PlanStatusEnum;
import com.cf.imes.framework.common.exception.ServiceException;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.es.core.service.ESDocumentService;
import com.cf.imes.framework.mybatis.core.query.MPJLambdaWrapperX;
import com.cf.imes.framework.security.core.LoginUser;
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderSource;
import com.cf.imes.module.executor.controller.admin.plan.bo.ProcessGroupList;
@@ -26,10 +25,8 @@ import com.cf.imes.module.executor.dal.dataobject.goods.CutedBoardInfo;
import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO;
import com.cf.imes.module.executor.dal.dataobject.goods.OptimizeBoardModelDO;
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO;
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO;
import com.cf.imes.module.executor.dal.dataobject.planitem.PlanItemDO;
import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
import com.cf.imes.module.executor.dal.dataobject.processStep.ProcessStepDO;
import com.cf.imes.module.executor.dal.dataobject.remainplaten.RemainPlateDO;
@@ -986,20 +983,6 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
@Override
public String deleteTest(List<Long> orderIds) {
Long a = 1801515154546884609L;
List<OptimizeBoardModelDO> optimizeBoardModelDOS = buildBoardByPlanId(a, ORDER_REMAIN_PLATE_MODEL, 999);
System.out.println("哈哈哈哈哈1 "+optimizeBoardModelDOS);
return null;
}
}
@@ -7,10 +7,15 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import com.cf.imes.framework.common.enums.OrderPackageStatusEnum;
import com.cf.imes.framework.common.pojo.PageParam;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.Assert.AssertUtils;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.mybatis.core.generator.SnowFlakeGenerator;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.framework.organ.core.context.OrganContextHolder;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
import com.cf.imes.module.executor.controller.admin.order.vo.order.*;
import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderBodyRespVO;
import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderRoomBodyRespVO;
@@ -19,6 +24,7 @@ import com.cf.imes.module.executor.controller.admin.orderParts.vo.OrderPartsResp
import com.cf.imes.module.executor.controller.admin.plan.vo.OrderRespVOCopy;
import com.cf.imes.module.executor.controller.admin.plate.vo.PlateRespVO;
import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO;
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO;
import com.cf.imes.module.executor.dal.dataobject.orderGroup.OrderGroupDO;
import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO;
@@ -29,6 +35,7 @@ import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
import com.cf.imes.module.executor.dal.dataobject.plate.PlateGoodDO;
import com.cf.imes.module.executor.dal.dataobject.rawgoods.RawGoodsDO;
import com.cf.imes.module.executor.dal.mysql.goods.GoodsMapper;
import com.cf.imes.module.executor.dal.mysql.order.OrderMapper;
import com.cf.imes.module.executor.dal.mysql.orderBody.OrderBodyMapper;
import com.cf.imes.module.executor.dal.mysql.orderGroup.OrderGroupMapper;
import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemMapper;
@@ -39,7 +46,7 @@ import com.cf.imes.module.executor.dal.mysql.plate.PlateMapper;
import com.cf.imes.module.executor.dal.mysql.rawgoods.RawGoodsMapper;
import com.cf.imes.module.executor.enums.OrderDeletedEnum;
import com.cf.imes.module.executor.enums.OrderStatusEnum;
import com.cf.imes.framework.common.enums.OrderPackageStatusEnum;
import com.cf.imes.module.executor.service.plan.PlanService;
import com.cf.imes.module.executor.util.deviseData.structure.PlateDetail;
import com.cf.imes.module.executor.util.fileConversion.admin.api.webcad.ApiDataAchieve;
import com.cf.imes.module.executor.util.fileConversion.admin.api.webcad.ApiTypeRealize;
@@ -48,22 +55,14 @@ import com.cf.imes.module.executor.util.fileConversion.admin.files.excel.OrderPl
import com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO.OrderXmlVO;
import com.cf.imes.module.executor.util.fileConversion.admin.files.xml.XmlTypeRealize;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.module.executor.dal.mysql.order.OrderMapper;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.time.*;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.*;
@@ -75,8 +74,6 @@ import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.e
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.*;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
/**
* 生产单表 order_{N} Service 实现类
*
@@ -140,9 +137,14 @@ public class OrderServiceImpl implements OrderService {
public static final String ORDER_PARTS_REMARK_MODEL = "imes_order_parts_remark_model";
String ORDER_REMAIN_PLATE_MODEL = "imes_order_optimize_plate_model";
@Resource
private XmlTypeRealize xmlTypeRealize;
@Resource
private PlanService planService;
@Override
public void updateOrder(OrderSaveReqVO updateReqVO) {
// 校验存在, 生产单未删除
@@ -241,7 +243,8 @@ public class OrderServiceImpl implements OrderService {
@Override
@Transactional(rollbackFor = Exception.class)
public void updateBodyDeletedByOrderId(Long orderId, Set<Long> roomIds, Long bodyId, Integer status) { // 要删除传1,还原传0
validateOrderStatus(orderId, getUserOrganId(), OrderDeletedEnum.NOT_DELETED.getStatus());
// 判断生产单的状态和生产单柜体对应的板擦是否已开料
List<Long> planIds = validateOrderStatus(orderId, roomIds, bodyId, getUserOrganId(), OrderDeletedEnum.NOT_DELETED.getStatus());
List<Long> bodyIds = new ArrayList<>();
Integer index = status == 1 ? 0 : 1;
@@ -293,7 +296,23 @@ public class OrderServiceImpl implements OrderService {
});
if (goodsIdDeleted.size() > 0) {
goodsMapper.updateDeletedById(goodsIdDeleted, status, getUserOrganId());
}
if(planIds != null) {
// 判断删除的柜体对应的板材是否和排单板材一样
List<GoodsDO> goodsDOS = goodsMapper.selectPlanGoodsListByPlanIdList(planIds, getUserOrganId());
// 一样,同时删除排单的信息
if(goodsDOS.isEmpty()){
planService.deletePlan(planIds);
}else {
// 只要有排单,不管删除的柜体的板材数和排单数一样,都要删除排单对应的优化数据(不用这种写法进行删除时,有时会报错,原因目前还没找到)
planService.deleteByPlanId(planIds, ORDER_REMAIN_PLATE_MODEL);
}
}
List<Long> partsList = orderPartsMapper.selectPartsIdListByBodyId(bodyIds, getUserOrganId(), orderId); // 配件
@@ -820,17 +839,28 @@ public class OrderServiceImpl implements OrderService {
return true;
}
// 判断生产单状态是否符合(开料之前状态判断)
private void validateOrderStatus(Long orderId, Long organId, Integer status) {
// 判断生产单状态是否符合(如果已开料,不允许删除)
private List<Long> validateOrderStatus(Long orderId,Set<Long> roomIds, Long bodyId, Long organId, Integer status) {
// 校验存在
OrderDO orderDO = orderMapper.selectOrderOne(orderId, organId);
if (orderDO == null)
throw exception(ORDER_NOT_EXISTS);
// 状态排除
if (!Objects.equals(orderDO.getStatus(), OrderStatusEnum.NEW_ORDER.getStatus()) &&
!Objects.equals(orderDO.getStatus(), OrderStatusEnum.SORTED.getStatus()) &&
!Objects.equals(orderDO.getStatus(), OrderStatusEnum.EMPTY.getStatus()))
throw exception(ORDER_NOT_CANCEL);
// 判断小板是否已开料,已开料不允许删除
List<Long> planIds = goodsMapper.selectPlanOrderList(orderId, roomIds, bodyId, organId);
if(!planIds.isEmpty()) {
List<PlanDO> planDOS = planMapper.selectPlanStatus(planIds, organId);
AssertUtils.empty(planDOS, ORDER_PLAN_ERROR);
// planService.deleteByPlanId(planIds, ORDER_REMAIN_PLATE_MODEL);
return planIds;
}
return null;
}
}
@@ -156,7 +156,9 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
seriesItem.put("name", orderStatusEnum.getDescription());
series.add(seriesItem);
}
// x轴时间区间字符串
resultMap.put(DATELIST_FIELD_NAME, dateList.stream().map(date -> generateDateRangeAxis(date, reqVO.getUnit())).toList());
// 类别:订单类型:数量数组
resultMap.put(SERIES_FIELD_NAME, series);
return resultMap;
@@ -176,26 +178,42 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
.sorted(Comparator.naturalOrder())
.collect(Collectors.groupingBy(OrderPlanStatisticsCountRespVO::getDate, LinkedHashMap::new, Collectors.toList()));
// 类别:单量数组
List<Map<String, Object>> series = new ArrayList<>();
Map<String, Object> orderSeriesItem = new HashMap<>();
Map<String, Object> planSeriesItem = new HashMap<>();
int[] orderCountArr = new int[dateList.size()];
int[] planCountArr = new int[dateList.size()];
// 遍历时间跨度列表,匹配数量存入数组,没有补0存入数组
for (String dateStr : dateList) {
int[] countArr = new int[2];
for (int i = 0; i < dateList.size(); i++) {
String dateStr = dateList.get(i);
// 存入生产单数量
Integer orderCount = Optional.ofNullable(orderRespMap.get(dateStr))
.map(list -> list.stream().findFirst().orElse(new OrderStatisticsStatusRespVO()))
.map(OrderStatisticsStatusRespVO::getOrderCount)
.orElse(0);
countArr[0] = orderCount;
orderCountArr[i] = orderCount;
// 存入排单数量
Integer planCount = Optional.ofNullable(planRespMap.get(dateStr))
.map(list -> list.stream().findFirst().orElse(new OrderPlanStatisticsCountRespVO()))
.map(OrderPlanStatisticsCountRespVO::getCount)
.orElse(0);
countArr[1] = planCount;
resultMap.put(generateDateRangeAxis(dateStr, reqVO.getUnit()), countArr);
planCountArr[i] = planCount;
}
orderSeriesItem.put("data", orderCountArr);
orderSeriesItem.put("name", "生产单单量");
planSeriesItem.put("data", planCountArr);
planSeriesItem.put("name", "排单单量");
series.add(orderSeriesItem);
series.add(planSeriesItem);
// x轴时间区间字符串
resultMap.put(DATELIST_FIELD_NAME, dateList.stream().map(date -> generateDateRangeAxis(date, reqVO.getUnit())).toList());
// 类别:类别:单量数组
resultMap.put(SERIES_FIELD_NAME, series);
return resultMap;
}
@@ -213,21 +231,37 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
.sorted(Comparator.naturalOrder())
.collect(Collectors.groupingBy(OrderPlanStatisticsAreaRespVO::getDate, LinkedHashMap::new, Collectors.toList()));
// 类别:平方数数组
List<Map<String, Object>> series = new ArrayList<>();
Map<String, Object> orderSeriesItem = new HashMap<>();
Map<String, Object> planSeriesItem = new HashMap<>();
BigDecimal[] orderAreaArr = new BigDecimal[dateList.size()];
BigDecimal[] planAreaArr = new BigDecimal[dateList.size()];
// 遍历时间跨度列表,匹配数量存入数组,没有补0存入数组
for (String dateStr : dateList) {
BigDecimal[] areaArr = new BigDecimal[2];
for (int i = 0; i < dateList.size(); i++) {
String dateStr = dateList.get(i);
// 存生产单面积
List<OrderStatisticsAreaRespVO> orderCountRespVOS = orderRespMap.get(dateStr);
areaArr[0] = orderCountRespVOS != null && !orderCountRespVOS.isEmpty() ? orderCountRespVOS.get(0).getAreaSum() : BigDecimal.ZERO;
orderAreaArr[i] = orderCountRespVOS != null && !orderCountRespVOS.isEmpty() ? orderCountRespVOS.get(0).getAreaSum() : BigDecimal.ZERO;
// 存排单面积
List<OrderPlanStatisticsAreaRespVO> planCountRespVOS = planRespMap.get(dateStr);
areaArr[1] = planCountRespVOS != null && !planCountRespVOS.isEmpty() ? planCountRespVOS.get(0).getAreaSum() : BigDecimal.ZERO;
resultMap.put(generateDateRangeAxis(dateStr, reqVO.getUnit()), areaArr);
planAreaArr[i] = planCountRespVOS != null && !planCountRespVOS.isEmpty() ? planCountRespVOS.get(0).getAreaSum() : BigDecimal.ZERO;
}
orderSeriesItem.put("data", orderAreaArr);
orderSeriesItem.put("name", "生产单平方数");
planSeriesItem.put("data", planAreaArr);
planSeriesItem.put("name", "排单平方数");
series.add(orderSeriesItem);
series.add(planSeriesItem);
// x轴时间区间字符串
resultMap.put(DATELIST_FIELD_NAME, dateList.stream().map(date -> generateDateRangeAxis(date, reqVO.getUnit())).toList());
// 类别:类别:平方数数组
resultMap.put(SERIES_FIELD_NAME, series);
return resultMap;
}
@@ -240,7 +274,7 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
List<String> dateList = getDateList(reqVO);
// 查询时间段内数量最多的小板,列出数量前10的goods_id
List<Long> topTenCountGoodsId = orderPlateStatisticsMapper.selectPlateCountList(reqVO).stream()
List<String> topTenCountGoodsId = orderPlateStatisticsMapper.selectPlateCountList(reqVO).stream()
.map(OrderGoodsPlateRespVO::getGoodsId)
.toList();
@@ -254,8 +288,8 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
// 获取所有商品{goodsId:respvo},根据top10排序
Map<Long, OrderGoodsPlateRespVO> goodsMap = new LinkedHashMap<>();
for (Long id : topTenCountGoodsId) {
Map<String, OrderGoodsPlateRespVO> goodsMap = new LinkedHashMap<>();
for (String id : topTenCountGoodsId) {
List<OrderGoodsPlateRespVO> list = orderGoodsPlateRespMap.values().stream()
.flatMap(List::stream)
.filter(vo -> vo.getGoodsId().equals(id))
@@ -268,7 +302,7 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
// 遍历所有goods_id
List<Map<String, Object>> series = new ArrayList<>();
for (Map.Entry<Long, OrderGoodsPlateRespVO> entry : goodsMap.entrySet()) {
for (Map.Entry<String, OrderGoodsPlateRespVO> entry : goodsMap.entrySet()) {
Map<String, Object> seriesItem = new HashMap<>();
int[] sumArr = new int[dateList.size()];
@@ -297,7 +331,10 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
seriesItem.put("name", goodsName);
series.add(seriesItem);
}
// x轴时间区间字符串
resultMap.put(DATELIST_FIELD_NAME, dateList.stream().map(date -> generateDateRangeAxis(date, reqVO.getUnit())).toList());
// 类别:大板信息:小板数量数组
resultMap.put(SERIES_FIELD_NAME, series);
return resultMap;
}
@@ -310,7 +347,7 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
List<String> dateList = getDateList(reqVO);
// 查询时间段内面积最多的小板,列出前10面积的goods_id
List<Long> topTenCountGoodsId = orderPlateStatisticsMapper.selectPlateAreaList(reqVO).stream()
List<String> topTenCountGoodsId = orderPlateStatisticsMapper.selectPlateAreaList(reqVO).stream()
.map(OrderGoodsPlateRespVO::getGoodsId)
.toList();
@@ -324,8 +361,8 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
// 获取所有商品{goodsId:respvo},根据top10排序
Map<Long, OrderGoodsPlateRespVO> goodsMap = new LinkedHashMap<>();
for (Long id : topTenCountGoodsId) {
Map<String, OrderGoodsPlateRespVO> goodsMap = new LinkedHashMap<>();
for (String id : topTenCountGoodsId) {
List<OrderGoodsPlateRespVO> list = orderGoodsPlateRespMap.values().stream()
.flatMap(List::stream)
.filter(vo -> vo.getGoodsId().equals(id))
@@ -338,7 +375,7 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
// 遍历所有goods_id
List<Map<String, Object>> series = new ArrayList<>();
for (Map.Entry<Long, OrderGoodsPlateRespVO> entry : goodsMap.entrySet()) {
for (Map.Entry<String, OrderGoodsPlateRespVO> entry : goodsMap.entrySet()) {
Map<String, Object> seriesItem = new HashMap<>();
BigDecimal[] areaArr = new BigDecimal[dateList.size()];
@@ -367,7 +404,10 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
seriesItem.put("name", goodsName);
series.add(seriesItem);
}
// x轴时间区间字符串
resultMap.put(DATELIST_FIELD_NAME, dateList.stream().map(date -> generateDateRangeAxis(date, reqVO.getUnit())).toList());
// 类别:大板信息:小板平方数数组
resultMap.put(SERIES_FIELD_NAME, series);
return resultMap;
}
@@ -402,13 +442,13 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
Map<String, Aggregate> goodsCountAggMap = response.aggregations();
Aggregate goodsCountAgg = goodsCountAggMap.get(ORDER_REMAIN_PLATE_MODEL_GOODS_GROUP_NAME);
List<Long> goodsIds = new ArrayList<>();
// 构建map{日期:{goodsId、count}}
List<String> goodsIds = new ArrayList<>();
// 构建map:日期:goodsId、count
Map<String, List<OrderGoodsPlateRespVO>> goodsDateGroupMap = new HashMap<>();
/**
* 获取数量最大前十的goodsId列表
*/
goodsCountAgg.lterms().buckets().array().forEach(e -> goodsIds.add(e.key()));
goodsCountAgg.sterms().buckets().array().forEach(e -> goodsIds.add(e.key().stringValue()));
if (CollUtil.isNotEmpty(goodsIds)) {
List<FieldValue> goodsIdFieldValueList = goodsIds.stream().map(FieldValue::of).toList();
@@ -433,12 +473,11 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
Aggregate goodsDateAgg = goodsDateCountAggMap.get(ORDER_REMAIN_PLATE_MODEL_GOODS_GROUP_NAME);
goodsDateAgg.lterms().buckets().array().forEach(goodsDateAggBucket -> {
Long goodsId = goodsDateAggBucket.key();
goodsDateAgg.sterms().buckets().array().forEach(goodsDateAggBucket -> {
// todo 目前没有发现好的es统计月周的方式,先把年月日查出来转周,后续优化
String dateStr = dateToWeekMonth(goodsDateAggBucket.aggregations().get("date_group").dateHistogram().buckets().array().get(0).keyAsString(), unit);
double goodsCount = goodsDateAggBucket.aggregations().get(ORDER_REMAIN_PLATE_MODEL_GOODS_COUNT_NAME).sum().value();
OrderGoodsPlateRespVO vo = OrderGoodsPlateRespVO.builder().goodsId(goodsId).orderDate(dateStr).orderCount((int) goodsCount).build();
OrderGoodsPlateRespVO vo = OrderGoodsPlateRespVO.builder().goodsId(goodsDateAggBucket.key().stringValue()).orderDate(dateStr).orderCount((int) goodsCount).build();
List<OrderGoodsPlateRespVO> orderGoodsPlateRespVOS = goodsDateGroupMap.get(dateStr);
if (ObjectUtil.isNotNull(orderGoodsPlateRespVOS)) {
orderGoodsPlateRespVOS.add(vo);
@@ -452,7 +491,7 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
// 遍历所有goods_id
List<Map<String, Object>> series = new ArrayList<>();
for (Long goodsId : goodsIds) {
for (String goodsId : goodsIds) {
Map<String, Object> seriesItem = new HashMap<>();
int[] countArr = new int[dateList.size()];
@@ -488,7 +527,10 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
seriesItem.put("name", goodsName);
series.add(seriesItem);
}
// x轴时间区间字符串
resultMap.put(DATELIST_FIELD_NAME, dateList.stream().map(date -> generateDateRangeAxis(date, unit)).toList());
// 类别:大板信息:大板数量数组
resultMap.put(SERIES_FIELD_NAME, series);
} catch (IOException e) {
log.error("[getBigPlateCountGroup][统计大板数量异常:{}]", e.getMessage(), e);
@@ -24,7 +24,7 @@ public interface PlanService {
* @param createReqVO 创建信息
* @return 编号
*/
Map<Long,Long> createPlan(@Valid PlanSaveReqVO createReqVO);
Map<String,Long> createPlan(@Valid PlanSaveReqVO createReqVO);
/**
* 更新生产单开料排单
@@ -82,4 +82,6 @@ public interface PlanService {
List<NotPlanOrderPlateRespVO> getOrderPlateList(OrderPageReqVOCopy pageReqVO);
List<NotPlanGoodsRespVO> getNotOptimizeGoodsList(NotPlanGoodsReqVO reqVO);
void deleteByPlanId(List<Long> planIds, String index);
}
@@ -109,7 +109,7 @@ public class PlanServiceImpl implements PlanService {
@Resource
private IdentifierGenerator identifierGenerator;
String ORDER_REMAIN_PLATE_MODEL = "imes_order_remain_plate_model";
String ORDER_REMAIN_PLATE_MODEL = "imes_order_optimize_plate_model";
@Resource
private ElasticsearchClient elasticsearchClient;
@@ -119,7 +119,7 @@ public class PlanServiceImpl implements PlanService {
@Override
@Transactional(rollbackFor = Exception.class)
public Map<Long,Long> createPlan(PlanSaveReqVO createReqVO) {
public Map<String,Long> createPlan(PlanSaveReqVO createReqVO) {
// todo 目前只考虑了非混单的情况,混单的情况待考虑
List<PlanSaveReqVO.Item> itemList = createReqVO.getItemList();
@@ -128,22 +128,30 @@ public class PlanServiceImpl implements PlanService {
List<GoodsDO> goodsDOS = new ArrayList<>();
// <大板实际ID,排单ID>
Map<Long,Long> goodsPlanId = new HashMap<>();
List<Long> ids = new ArrayList<>();
Map<Long, List<PlanSaveReqVO.Item>> groupedItems = itemList.stream()
List<Long> orderIdList = new ArrayList<>();
// <大板实际ID,排单ID>
Map<String,Long> goodsPlanId = new HashMap<>();
Map<String, List<PlanSaveReqVO.Item>> groupedItems = itemList.stream()
.collect(Collectors.groupingBy(PlanSaveReqVO.Item::getGoodsId));
for (Map.Entry<Long, List<PlanSaveReqVO.Item>> entry : groupedItems.entrySet()) {
for (Map.Entry<String, List<PlanSaveReqVO.Item>> entry : groupedItems.entrySet()) {
List<PlanSaveReqVO.Item> items = entry.getValue();
List<Long> orderIds = items.stream().map(PlanSaveReqVO.Item::getOrderId).distinct().toList();
orderIdList.addAll(orderIds);
// 创建计划
PlanDO plan = BeanUtils.toBean(createReqVO, PlanDO.class);
plan.setId(identifierGenerator.nextId(plan).longValue());
plan.setSort(0L);
String orderNos = items.stream().map(PlanSaveReqVO.Item::getOrderId).distinct().toList().toString();
String orderNos = orderIds.toString();
plan.setOrderNos(orderNos);
plan.setProduceTime(null);
@@ -155,6 +163,8 @@ public class PlanServiceImpl implements PlanService {
List<GoodsDO> goodsDOList = goodsMapper.selectPlanGoodsList(goodsIds, getUserOrganId()).stream().map(m -> m.setPlanId(plan.getId())).toList();
ids.addAll(goodsDOList.stream().map(GoodsDO::getId).toList());
goodsDOS.addAll(goodsDOList);
@@ -166,6 +176,7 @@ public class PlanServiceImpl implements PlanService {
goodsMapper.updateBatch(goodsDOS);
plateMapper.updatePlateOptimized(orderIdList,ids,getUserOrganId());
return goodsPlanId;
@@ -185,11 +196,11 @@ public class PlanServiceImpl implements PlanService {
if(!(updateReqVO.getItemList() == null)){
// todo 目前之解决非混单的情况,混单的情况待解决
Long goodsId = updateReqVO.getItemList().stream().map(PlanSaveReqVO.Item::getGoodsId).distinct().toList().get(0);
String goodsId = updateReqVO.getItemList().stream().map(PlanSaveReqVO.Item::getGoodsId).distinct().toList().get(0);
// todo 目前只解决非混单的情况
Long goodsIds = BeanUtils.toBean(goodsMapper.selectPlanGoods(plan.getId(), getUserOrganId()).stream().map(GoodsDO::getGoodsId).toList(), Long.class).get(0);
String goodsIds = goodsMapper.selectPlanGoods(plan.getId(), getUserOrganId()).stream().map(GoodsDO::getGoodsId).toList().get(0);
if(!goodsId.equals(goodsIds)){
throw exception(PLATE_ERROR);
@@ -200,12 +211,26 @@ public class PlanServiceImpl implements PlanService {
List<Long> ids = updateReqVO.getItemList().stream().map(PlanSaveReqVO.Item::getId).toList();
List<Long> orderIds = updateReqVO.getItemList().stream().map(PlanSaveReqVO.Item::getOrderId).toList();
// 修改新增的大板对应的板材为已优化
plateMapper.updatePlateOptimized(orderIds,ids,getUserOrganId());
List<GoodsDO> goodsDOS = new ArrayList<>(goodsMapper.selectPlanGoodsList(ids, getUserOrganId())
.stream().map(m -> m.setPlanId(plan.getId())).toList());
if (!updateReqVO.getDeleteIds().isEmpty()){
goodsDOS.addAll(goodsMapper.selectPlanGoodsList(updateReqVO.getDeleteIds(), getUserOrganId()).stream().map(m -> m.setPlanId(null)).toList());
List<GoodsDO> goodsDOList = goodsMapper.selectPlanGoodsList(updateReqVO.getDeleteIds(), getUserOrganId());
List<Long> goodsIdList = goodsDOList.stream().map(GoodsDO::getId).distinct().toList();
List<Long> orderIdList = goodsDOList.stream().map(GoodsDO::getOrderId).distinct().toList();
// 修改删除的大板对应的小板为未优化
plateMapper.updateNoPlateOptimized(orderIdList,goodsIdList,getUserOrganId());
goodsDOS.addAll(goodsDOList.stream().map(m -> m.setPlanId(null)).toList());
}
@@ -297,25 +322,25 @@ public class PlanServiceImpl implements PlanService {
}
// 删除排单信息,商品表里的 planId ES优化数据,更新排单对应的余料板的排单ID为0
// 删除排单信息, ES优化数据,更新排单对应的余料板的排单ID为0
planMapper.deleteBatchIds(ids);
// planItemMapper.delete(new LambdaQueryWrapperX<PlanItemDO>().in(PlanItemDO::getPlanId, ids));
goodsMapper.deletePlanGoods(ids,getUserOrganId());
remainPlateMapper.deletePlanRemainPlate(ids,getUserOrganId());
remainPlateMapper.deletePlanRemainPlate(ids,getUserOrganId());
// 排单对应的自增板的删除 todo 目前值解决了非混单的情况
List<OptimizeBoardModelDO> boardModelDOS = buildBoardByPlanIds(ids, ORDER_REMAIN_PLATE_MODEL, ids.size());
if(!boardModelDOS.isEmpty()) {
// List<Long> goodsIds = boardModelDOS.stream().map(OptimizeBoardModelDO::getGoodsId).toList();
// List<Long> goodsIdList = goodsMapper.selectListByGoodsIdList(goodsIds, orderIds, getUserOrganId()).stream().map(GoodsDO::getId).toList();
List<Long> goodsIdList = goodsMapper.selectPlanGoodsListByPlanIdList(ids, getUserOrganId()).stream().map(GoodsDO::getId).toList();
List<PlateDO> plateDOS = plateMapper.selectPlateIdList(goodsIdList, getUserOrganId());
if(!goodsIdList.isEmpty()) {
// 修改删除的大板对应的小板为未优化
plateMapper.updateNoPlateOptimized(orderIds, goodsIdList, getUserOrganId());
}
List<PlateDO> plateDOS = plateMapper.selectPlateIdList(orderIds,goodsIdList, getUserOrganId());
if(!plateDOS.isEmpty()) {
List<Long> plateIds = plateDOS.stream().map(PlateDO::getId).toList();
@@ -331,6 +356,9 @@ public class PlanServiceImpl implements PlanService {
}
// 删除商品表里的 planId
goodsMapper.deletePlanGoods(ids,getUserOrganId());
List<Long> orderIdList = new ArrayList<>();
List<Long> diff;
@@ -402,31 +430,6 @@ public class PlanServiceImpl implements PlanService {
return BeanUtils.toBean(planDO, PlanRespVO.class);
// MPJLambdaWrapper<OrderItemDO> wrapper = new MPJLambdaWrapperX<OrderItemDO>().select(OrderItemDO::getOrderId)
// .rightJoin(PlanItemDO.class, PlanItemDO::getItemId, OrderItemDO::getId)
// .isNotNull(OrderItemDO::getId);
// Set<Long> orderIds = orderItemMapper.selectJoinList(OrderItemDO.class, wrapper).stream().map(OrderItemDO::getOrderId).collect(Collectors.toSet());
//
// /*Set<Long> orderIds = planOrderMapper.selectList(new LambdaQueryWrapperX<PlanOrderDO>().eq(PlanOrderDO::getPlanId, planDO.getPlanNo()))
// .stream()
// .map(e -> e.getOrderId())
// .collect(Collectors.toSet());*/
// List<GoodsDO> goodsDOS = goodsMapper.selectList(new LambdaQueryWrapperX<GoodsDO>()
// .eq(GoodsDO::getOrganId,getUserOrganId())
// .in(GoodsDO::getOrderId, orderIds));
// List<PlateDO> plateDOS = plateMapper.selectList(new LambdaQueryWrapperX<PlateDO>()
// .eq(PlateDO::getOrganId,getUserOrganId())
// .in(PlateDO::getGoodsId, goodsDOS.stream().map(GoodsDO::getGoodsId).collect(Collectors.toSet())));
// List<PlateInfoVO> 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);
}
@@ -444,9 +447,9 @@ public class PlanServiceImpl implements PlanService {
List<PlanDO> plan = pageReqVO.getIsUp() ?
planMapper.selectPlanIds(planDO.getUpdateTime().toString(),planDO.getSort(), getUserOrganId(), planDO.getId()) :
planMapper.selectPlanIds(planDO.getCreateTime().toString(),planDO.getSort(), getUserOrganId(), planDO.getId()) :
planMapper.selectPlanIdsFalse(planDO.getUpdateTime().toString(),planDO.getSort(), getUserOrganId(), planDO.getId());
planMapper.selectPlanIdsFalse(planDO.getCreateTime().toString(),planDO.getSort(), getUserOrganId(), planDO.getId());
if (plan.isEmpty()) {
@@ -577,25 +580,28 @@ public class PlanServiceImpl implements PlanService {
PageDTO<OrderRespVOCopy> page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
List<Integer> statusList = new ArrayList<>();
List<Long> goodsIds = new ArrayList<>();
statusList.add(OrderStatusEnum.NEW_ORDER.getStatus());
statusList.add(OrderStatusEnum.IN_PRODUCTION.getStatus());
statusList.add(OrderStatusEnum.SORTED.getStatus());
// todo 修改排单数据筛选,目前只解决了非混单的情况,混单情况待解决
List<GoodsDO> goodsDOS = goodsMapper.selectListByGoodsId(pageReqVO.getGoodsId(), getUserOrganId());
if(pageReqVO.getGoodsId() != null) {
List<GoodsDO> goodsDOS = goodsMapper.selectListByGoodsId(pageReqVO.getGoodsId(), getUserOrganId());
goodsIds.addAll(goodsDOS.stream().map(GoodsDO::getId).toList());
}
QueryWrapperX<OrderDO> queryWrapperX = new QueryWrapperX<>();
queryWrapperX
.eq("o.organ_id",getUserOrganId())
.eq("o.deleted",false)
.in("o.status",statusList)
.eq("og.organ_id",getUserOrganId())
.eq("og.plan_id",0)
.eq("og.deleted",false)
// .eq("og.organ_id",getUserOrganId())
// .eq("og.plan_id",0)
// .eq("og.deleted",false)
// .isNull("opi.item_id")
// todo 修改排单数据筛选,目前只解决了非混单的情况,混单情况待解决
.inIfPresent("og.id",goodsDOS.isEmpty() ? null :goodsDOS.stream().map(GoodsDO::getId).toList())
.inIfPresent("og.id",goodsIds)
.inIfPresent("o.id",pageReqVO.getOrderIds())
.likeIfPresent("o.id", pageReqVO.getOrderId() != null ? pageReqVO.getOrderId().toString() : null)
.inIfPresent("og.id",pageReqVO.getIds())
@@ -609,8 +615,8 @@ public class PlanServiceImpl implements PlanService {
.eqIfPresent("op.is_door", pageReqVO.getIsDoor())
.betweenIfPresent("op.height", new BigDecimal[]{pageReqVO.getLongMinRang(), pageReqVO.getLongMaxRang()})
.betweenIfPresent("op.width", new BigDecimal[]{pageReqVO.getWidthMinRang(), pageReqVO.getWidthMaxRang()})
.groupBy("o.id", " o.order_date", "o.delivery_date", "o.customer", "o.address", "o.custom_order_no","o.status")
.having("count(op.id) != 0")
// .groupBy("o.id", " o.order_date", "o.delivery_date", "o.customer", "o.address", "o.custom_order_no","o.status")
// .having("count(op.id) != 0")
.orderByDesc("o.order_date");
String filterTypes = "";
@@ -627,12 +633,6 @@ public class PlanServiceImpl implements PlanService {
queryWrapperX.likeIfPresent("op.filter_type", insertSeparator(filterTypes));
// todo 目前修改一半,速度无法再进行特别的优化,需等后面修改表结构再进行优化
IPage<OrderRespVOCopy> orderRespVOCopies = orderMapper.selectOrderPage(page,queryWrapperX);
@@ -640,16 +640,34 @@ public class PlanServiceImpl implements PlanService {
return new PageResult<>();
}
// List<OrderRespVOCopy> records = orderRespVOCopies.getRecords();
//
// orderRespVOCopies.setRecords(records.stream().peek(m -> {
//
// m.setNum((int) m.getPlatePages().stream().map(PlatePage::getPlateId).count());
//
// m.setArea(m.getPlatePages().stream().map(PlatePage::getArea).reduce(BigDecimal.ZERO, BigDecimal::add));
// m.setPlatePages(null);
//
// }).toList());
List<OrderRespVOCopy> records = orderRespVOCopies.getRecords();
List<Long> orderIds = records.stream().map(OrderRespVOCopy::getOrderId).toList();
QueryWrapperX<PlateDO> queryWrapperX2 = new QueryWrapperX<>();
queryWrapperX2
.eq("organ_id",getUserOrganId())
.eq("deleted",false)
.in("order_id",orderIds)
.eq("is_optimized",false)
.inIfPresent("goods_id",goodsIds)
.inIfPresent("goods_id",pageReqVO.getIds())
.eqIfPresent("is_special_shaped", pageReqVO.getRectangle() != null ? false: null)
.eqIfPresent("is_special_shaped", pageReqVO.getSpecialShaped())
.eqIfPresent("is_sculpt", pageReqVO.getSculpt())
.eqIfPresent("is_door", pageReqVO.getIsDoor())
.betweenIfPresent("height", new BigDecimal[]{pageReqVO.getLongMinRang(), pageReqVO.getLongMaxRang()})
.betweenIfPresent("width", new BigDecimal[]{pageReqVO.getWidthMinRang(), pageReqVO.getWidthMaxRang()});
List<PlatePage> plateList = plateMapper.selectNoPlanPlateList(queryWrapperX2);
orderRespVOCopies.setRecords(records.stream().peek(m->{
m.setNum((int) plateList.stream().filter(f->f.getOrderId().equals(m.getOrderId())).map(PlatePage::getPlateId).count());
m.setArea(plateList.stream().filter(f->f.getOrderId().equals(m.getOrderId())).map(PlatePage::getArea).reduce(BigDecimal.ZERO,BigDecimal::add));
}).toList());
return new PageResult<>(orderRespVOCopies.getRecords(), orderRespVOCopies.getTotal());
@@ -796,9 +814,9 @@ public class PlanServiceImpl implements PlanService {
.eq("o.organ_id",getUserOrganId())
.eq("o.deleted",false)
.in("o.status",statusList)
.eq("og.organ_id",getUserOrganId())
.eq("og.plan_id",0)
.eq("og.deleted",false)
// .eq("og.organ_id",getUserOrganId())
// .eq("og.plan_id",0)
// .eq("og.deleted",false)
.inIfPresent("og.order_id", pageReqVO.getOrderIds())
.inIfPresent("og.id", pageReqVO.getIds())
@@ -834,9 +852,6 @@ public class PlanServiceImpl implements PlanService {
IPage<OrderGoodsResp> orderGoodsResps = orderMapper.selectOrderIds(page,queryWrapperX);
// IPage<OrderGoodsResp> orderGoodsResps = goodsMapper.selectOrderGoodsList(page, queryWrapperX);
if (CollectionUtil.isEmpty(orderGoodsResps.getRecords())) {
return new PageResult<>();
}
@@ -845,7 +860,8 @@ public class PlanServiceImpl implements PlanService {
List<OrderGoodsResp> records = orderGoodsResps.getRecords();
List<Long> goodsIdList = records.stream().map(OrderGoodsResp::getGoodsId).toList();
List<String> goodsIdList = records.stream().map(OrderGoodsResp::getGoodsId).toList();
queryWrapperX.in("og.goods_id", goodsIdList);
@@ -853,33 +869,12 @@ public class PlanServiceImpl implements PlanService {
List<OrderGoodsResp> goodsResp = orderMapper.selectGoodsListByGoodsId(queryWrapperX);
//
// Map<Long, List<OrderGoodsResp>> collect = records.stream().collect(Collectors.groupingBy(OrderGoodsResp::getGoodsId));
// for (OrderGoodsResp orderGoodsResp : goodsResp) {
//
// List<OrderGoodsResp> orderGoodsResps1 = collect.get(orderGoodsResp.getGoodsId());
//
//
// if (orderGoodsResps1 != null) {
// // 合并 otherObjectList 到 obj1 副本中
// orderGoodsResps1.get().addAll(obj2.getOtherObjectList());
// }
//
// }
for (OrderGoodsResp record : records) {
List<OrderIds> orderIdsList = new ArrayList<>();
List<List<OrderIds>> list = goodsResp.stream().filter(f -> f.getGoodsId().equals(record.getGoodsId())).map(OrderGoodsResp::getOrderIds).toList();
if(!list.isEmpty()){
orderIdsList = list.stream().flatMap(Collection::stream).toList();
@@ -887,24 +882,11 @@ public class PlanServiceImpl implements PlanService {
}
record.setOrderIds(orderIdsList);
}
orderGoodsResps.setRecords(records);
// for (Map.Entry<Long, List<OrderGoodsResp>> entry : collect.entrySet()) {
//
// List<List<OrderIds>> list = entry.getValue().stream().map(OrderGoodsResp::getOrderIds).toList();
//
// List<OrderIds> orderds = list.stream().flatMap(Collection::stream).toList();
//
// List<OrderGoodsResp> list1 = records.stream().filter(f -> f.getGoodsId().equals(entry.getKey())).map(m -> m.setOrderIds(orderds)).toList();
//
// orderGoodsResps.setRecords(list1);
//
// }
return new PageResult<>(orderGoodsResps.getRecords(), orderGoodsResps.getTotal());
@@ -969,6 +951,7 @@ public class PlanServiceImpl implements PlanService {
}
queryWrapperX.eq("og.organ_id",getUserOrganId())
.eq("og.deleted",false)
.in("og.plan_id", vo.getPlanIds())
.eqIfPresent("op.is_door", vo.getIsDoor())
.eqIfPresent("op.is_special_shaped", vo.getRectangle() != null ? false: null)
@@ -976,8 +959,7 @@ public class PlanServiceImpl implements PlanService {
.eqIfPresent("op.is_sculpt", vo.getSculpt())
.betweenIfPresent("op.width", new BigDecimal[]{vo.getWidthMinRang(), vo.getWidthMaxRang()})
.betweenIfPresent("op.height", new BigDecimal[]{vo.getLongMinRang(), vo.getLongMaxRang()})
.likeIfPresent("op.filter_type", insertSeparator(filterTypes))
.orderByDesc("op.order_id");
.likeIfPresent("op.filter_type", insertSeparator(filterTypes));
PageDTO<PlateResList> page = new PageDTO<>(vo.getPageNo(), vo.getPageSize());
@@ -1073,6 +1055,7 @@ public class PlanServiceImpl implements PlanService {
}
@Override
public void deleteByPlanId(List<Long> planIds, String index) {
List<FieldValue> fieldValues = planIds.stream().map(FieldValue::of).toList();
@@ -22,7 +22,6 @@ import com.cf.imes.module.executor.controller.admin.plate.vo.*;
import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO;
import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO;
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
import com.cf.imes.module.executor.dal.dataobject.planitem.PlanItemDO;
import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
import com.cf.imes.module.executor.dal.mysql.goods.GoodsMapper;
import com.cf.imes.module.executor.dal.mysql.orderBody.OrderBodyMapper;
@@ -48,7 +47,7 @@ import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConsta
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
import static com.cf.imes.module.executor.service.optimizeplan.OptimizePlanService.ORDER_PLATE_MODEL;
import static com.cf.imes.module.system.enums.ErrorCodeConstants.PLATE_NOT_EXISTS;
import static com.cf.imes.module.system.enums.ErrorCodeConstants.REMAIN_PLATE_NOT_EXISTS;
import static com.cf.imes.module.system.enums.ErrorCodeConstants.THE_CURRENT_BOARD_IS_NOT_SELECTED;
/**
@@ -114,7 +113,7 @@ public class PlateServiceImpl implements PlateService {
private void validatePlateExists(Long id) {
if (plateMapper.selectById(id) == null) {
throw exception(PLATE_NOT_EXISTS);
throw exception(REMAIN_PLATE_NOT_EXISTS);
}
}
@@ -268,7 +267,7 @@ public class PlateServiceImpl implements PlateService {
plateDO.setRemark(reqVO.getRemake1() +","+ reqVO.getRemake2());
plateDO.setHoleArrange(reqVO.getPlaceHole());
plateDO.setGoodsId(goodsId);
plateDO.setIsOptimized(true);
plateDO.setPlateNo((obtainingTime) + Long.toString(plateNo).substring(2));
plateDO.setArea(reqVO.getWidth().multiply(reqVO.getHeight()).movePointLeft(4).stripTrailingZeros());
@@ -304,19 +303,19 @@ public class PlateServiceImpl implements PlateService {
orderItemMapper.insertBatch(orderItemDOS);
List<PlanItemDO> planItemDOS = new ArrayList<>();
orderItemDOS.forEach(orderItemDO ->{
PlanItemDO planItemDO = PlanItemDO.builder()
.planId(reqVO.getPlanId())
.itemId(orderItemDO.getId())
.build();
planItemDOS.add(planItemDO);
});
// 排单明细表新增数据
planItemMapper.insertBatch(planItemDOS);
// List<PlanItemDO> planItemDOS = new ArrayList<>();
//
// orderItemDOS.forEach(orderItemDO ->{
//
// PlanItemDO planItemDO = PlanItemDO.builder()
// .planId(reqVO.getPlanId())
// .itemId(orderItemDO.getId())
// .build();
// planItemDOS.add(planItemDO);
// });
//
// // 排单明细表新增数据
// planItemMapper.insertBatch(planItemDOS);
return plateDOS.stream().map(PlateDO::getId).toList();
}
@@ -41,7 +41,7 @@
<update id="updateDeletedById">
UPDATE order_goods
SET deleted = #{deleted}
SET deleted = #{deleted},plan_id = 0
WHERE id IN
<foreach item="id" collection="ids" open="(" separator="," close=")">
#{id}
@@ -58,63 +58,6 @@
</delete>
<select id="selectGoods" resultType="com.cf.imes.module.executor.controller.admin.plan.vo.OrderGoodsResp" parameterType="map">
select distinct
c.goods_id as goodsId,
c.width as width,
c.height as height,
c.thickness as thickness,
c.goods_name as goodsName,
c.material as material,
c.color as color
from order_goods c
where
c.organ_id = 1
and c.goods_id in
<foreach item="goodsIds" collection="goodsIds" open="(" separator="," close=")">
#{goodsIds}
</foreach>
</select>
<select id="selectGoodsPlateList"
resultType="com.cf.imes.module.executor.controller.admin.plan.saveOptimize.NotPlanGoodsRespVO">
select distinct
og.goods_id,
og.height,
og.width,
og.color,
og.goods_name,
og.thickness,
og.spec,
count(distinct op.id) as plateNum
from order_goods og
left join order_plate op on og.id = op.goods_id and og.organ_id = op.organ_id
where og.organ_id = #{organId} and og.goods_id in
<foreach item="goodIds" collection="goodIds" open="(" separator="," close=")">
#{goodIds}
</foreach>
group by og.goods_id,og.height,og.width,og.color,og.goods_name,og.thickness,og.spec ;
</select>
<select id="seleTestSQL" resultType="java.util.Map">
@@ -359,6 +302,7 @@
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
where og.organ_id = #{organId}
and og.deleted = false
and og.plan_id in
<foreach collection="planIds" item="planIds" open="(" close=")" separator=",">
#{planIds}
@@ -422,6 +366,50 @@
</select>
<select id="selectOrderPlate"
resultType="com.cf.imes.module.executor.controller.admin.plan.vo.OrderRespVOCopy">
select distinct order_id,
create_time as updateTime
from order_goods
where organ_id = #{organId}
and deleted = false
and plan_id = 0
order by create_time;
</select>
<select id="selectPlanOrderList" resultType="java.lang.Long">
select distinct og.plan_id
from order_goods og
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
<where> og.organ_id = #{organId}
and og.deleted = false
and og.order_id = #{orderId}
<if test="bodyId !=null">
and oi.body_id = #{bodyId}
</if>
<if test="roomIds !=null">
and oi.room_id in
<foreach item="roomIds" collection="roomIds" open="(" separator="," close=")">
#{roomIds}
</foreach>
</if>
</where>
</select>
</mapper>
@@ -35,21 +35,17 @@
<select id="selectOrderPage" resultMap="OrderPageMap">
select distinct
o.id as orderId,
o.order_date as orderDate,
o.delivery_date as deliveryDate,
o.customer as customer,
o.address as address,
o.custom_order_no as defineId,
o.status as status,
count( op.id) as num ,
sum(op.area) as area
o.id as orderId,
o.order_date as orderDate,
o.delivery_date as deliveryDate,
o.customer as customer,
o.address as address,
o.custom_order_no as defineId,
o.status as status
from orders o
left join order_goods og on o.organ_id = og.organ_id and o.id = og.order_id
left join order_plate op on og.organ_id = op.organ_id and og.id = op.goods_id and og.deleted = op.deleted
join order_goods og on o.organ_id = og.organ_id and o.id = og.order_id and og.plan_id = 0 and o.deleted = og.deleted
join order_plate op on o.organ_id = op.organ_id and o.deleted = op.deleted and o.id = op.order_id and op.is_optimized = false
${ew.customSqlSegment}
@@ -57,70 +53,23 @@
</select>
<!-- <where>
a.deleted = false
<!-- select distinct
o.id as orderId,
o.order_date as orderDate,
o.delivery_date as deliveryDate,
o.customer as customer,
o.address as address,
o.custom_order_no as defineId,
o.status as status,
count( op.id) as num ,
sum(op.area) as area
and a.organ_id = #{organId}
from orders o
and ( a.status = 3 or a.status = 2 or a.status = 1 )
left join order_goods og on o.organ_id = og.organ_id and o.id = og.order_id
and opi.item_id is null
left join order_plate op on og.organ_id = op.organ_id and og.id = op.goods_id and og.deleted = op.deleted-->
<if test="pageReqVO.ids !=null">
and op.goods_id in
<foreach collection="pageReqVO.ids" item="pageReqVO.ids" open="(" close=")" separator=",">
#{pageReqVO.ids}
</foreach>
</if>
<if test="pageReqVO.orderId !=null">
and a.id like concat('%',#{pageReqVO.orderId},'%')
</if>
<if test="pageReqVO.consignee !=null">
and a.customer like concat('%',#{pageReqVO.consignee},'%')
</if>
<if test="pageReqVO.defaultId !=null">
and a.custom_order_no like concat('%',#{pageReqVO.defaultId},'%')
</if>
<if test="pageReqVO.consigneeAddress !=null">
and a.address like concat('%',#{pageReqVO.consigneeAddress},'%')
</if>
<if test="pageReqVO.createTime !=null">
between #{pageReqVO.createTime.[0]} and #{pageReqVO.createTime.[1]}
</if>
</where>
group by a.id, a.order_date, a.delivery_date, a.customer, a.address, a.custom_order_no,a.create_time,a.update_time,a.status
order by a.update_time desc ;-->
<!-- select distinct a.id
from `orders` a
left join order_item oi on a.id = oi.order_id and a.organ_id = oi.organ_id
inner join order_plate op on oi.plate_id = op.id and oi.organ_id = op.organ_id
${ew.customSqlSegment}-->
<!-- inner join order_goods og on op.goods_id = og.id and op.organ_id = og.organ_id
left join order_plan_item opi on oi.id = opi.item_id and oi.organ_id = opi.organ_id
-->
<select id="selectDynamicSqlString" resultType="java.util.Map">
${sqlStr}
</select>
@@ -305,8 +254,10 @@
og.spec
from orders o
left join order_goods og on o.organ_id = og.organ_id and o.id = og.order_id
left join order_plate op on og.organ_id = op.organ_id and og.id = op.goods_id and og.deleted = op.deleted
join order_goods og on o.organ_id = og.organ_id and o.id = og.order_id and og.plan_id = 0 and o.deleted = og.deleted
join order_plate op on o.organ_id = op.organ_id and o.deleted = op.deleted and o.id = op.order_id and op.is_optimized = false
${ew.customSqlSegment}
@@ -324,8 +275,10 @@
og.order_id as orderId,
og.id as id
from orders o
left join order_goods og on o.organ_id = og.organ_id and o.id = og.order_id
left join order_plate op on og.organ_id = op.organ_id and og.id = op.goods_id and og.deleted = op.deleted
join order_goods og on o.organ_id = og.organ_id and o.id = og.order_id and og.plan_id = 0 and o.deleted = og.deleted
join order_plate op on o.organ_id = op.organ_id and o.deleted = op.deleted and o.id = op.order_id and op.is_optimized = false
${ew.customSqlSegment}
@@ -183,11 +183,10 @@
select * from order_plan where
organ_id = #{organId}
and deleted = false
and update_time &gt;= #{updateTime}
and sort &lt;= #{sort}
and create_time &gt;= #{createTime}
and id != #{planId}
ORDER BY sort DESC, update_time
ORDER BY create_time
limit 1;
@@ -199,16 +198,30 @@
select * from order_plan where
organ_id = #{organId}
and deleted = false
and update_time &lt;= #{updateTime}
and sort &gt;= #{sort}
and create_time &lt;= #{createTime}
and id != #{planId}
ORDER BY sort , update_time desc
ORDER BY create_time desc
limit 1;
</select>
<select id="selectPlanStatus" resultType="com.cf.imes.module.executor.dal.dataobject.plan.PlanDO">
select id
from order_plan
where organ_id = #{organId}
and deleted = false
and id in
<foreach item="planIds" collection="planIds" open="(" separator="," close=")">
#{planIds}
</foreach>
and status !=0;
</select>
</mapper>
@@ -400,7 +400,7 @@
<update id="updateDeletedById">
UPDATE order_plate
SET deleted = #{deleted}
SET deleted = #{deleted},is_optimized = false
WHERE id IN
<if test="plateIds != null and plateIds.size() > 0">
<foreach item="plateId" collection="plateIds" open="(" separator="," close=")">
@@ -410,6 +410,7 @@
AND organ_id = #{organId} and order_id = #{orderId}
</update>
<delete id="deletedById">
DELETE FROM order_plate
WHERE id IN
@@ -865,4 +866,75 @@
</select>
<resultMap id="PlatePageMap" type="com.cf.imes.module.executor.controller.admin.plan.vo.PlatePage">
<result property="orderId" column="orderId"/>
<result property="plateId" column="plateId"/>
<result property="area" column="area"/>
</resultMap>
<select id="selectNoPlanPlateList" resultMap="PlatePageMap">
select
order_id as orderId,
id as plateId,
area as area
from order_plate
${ew.customSqlSegment}
</select>
<update id="updatePlateOptimized" parameterType="java.lang.Long">
update order_plate
set is_optimized = true
where organ_id = #{organId}
and deleted = false
and order_id in
<foreach item="orderIdList" collection="orderIdList" open="(" separator="," close=")">
#{orderIdList}
</foreach>
and goods_id in
<foreach item="ids" collection="ids" open="(" separator="," close=")">
#{ids}
</foreach>
and is_optimized = false
</update>
<update id="updateNoPlateOptimized">
update order_plate
set is_optimized = false
where organ_id = #{organId}
and deleted = false
and order_id in
<foreach item="orderIdList" collection="orderIdList" open="(" separator="," close=")">
#{orderIdList}
</foreach>
and goods_id in
<foreach item="ids" collection="ids" open="(" separator="," close=")">
#{ids}
</foreach>
and is_optimized = true
</update>
</mapper>
@@ -52,7 +52,7 @@ public class PackController {
@GetMapping("/getOrderPlate")
@Operation(summary = "查看生产订单对应的板材信息")
@Operation(summary = "查看生产订单对应的没有打包的板材信息")
@Parameter(name = "orderId", description = "生产单Id", required = true)
@PreAuthorize("@ss.hasPermission('manage:pack-palte:query')")
public CommonResult<List<PlateDetailsRespVO>> getOrderPlateList(@Valid @RequestParam("orderId") Long orderId) {
@@ -105,22 +105,6 @@ public class PackController {
// @GetMapping("/export")
// @Operation(summary = "导出缺板")
// @PreAuthorize("@ss.hasPermission('manage:pack:export')")
// @OperateLog(type = EXPORT)
// public void exportPlateExcel(@Valid OrderPartsReqVO pageReqVO,
// HttpServletResponse response) throws IOException {
// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
// List<PlateDetailsRespVO> list = productionStatusService.getMissingBoard(pageReqVO).getList();
// // 导出 Excel
// ExcelUtils.write(response, "缺板信息表.xlsx", "数据", PlateDetailsRespVO.class, list);
//
// }
@GetMapping("/getParts")
@Operation(summary = "查看配件列表")
@@ -202,11 +186,9 @@ public class PackController {
@GetMapping("/print")
@Operation(summary = "包裹订单打印")
@PreAuthorize("@ss.hasPermission('manage:pack:query')")
// @GetMapping("/print")
// @Operation(summary = "包裹订单打印")
// @PreAuthorize("@ss.hasPermission('manage:pack:query')")
public CommonResult<PrintOrderPackRespVO> printOrderPack (@Valid PrintOrderPackReqVO reqVO) {
return success(packService.printOrderPack(reqVO));
@@ -11,6 +11,9 @@ import lombok.ToString;
public class DeleteOtherPartsReqVO {
@Schema(description = "生产单号", requiredMode = Schema.RequiredMode.REQUIRED)
private Long orderId;
@Schema(description = "包裹Id", requiredMode = Schema.RequiredMode.REQUIRED)
private Long packageId;
@@ -1,7 +1,6 @@
package com.cf.imes.module.manage.controller.admin.pack.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.ToString;
@@ -11,6 +10,9 @@ import lombok.ToString;
@ToString(callSuper = true)
public class PackReqVO {
@Schema(description = "生产单ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long orderId;
@Schema(description = "包裹ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long packageId;
@@ -82,11 +82,12 @@ public class PackRespVO {
private Long totalPieceCount;
@Schema(description = "待处理量")
private Long pendingNum;
@Schema(description = "生产单对应的板材ID")
private List<Long> plateId;
// @Schema(description = "生产单对应的板件信息", requiredMode = Schema.RequiredMode.REQUIRED)
// List<PlateDetailsRespVO> plateDetailsRespVO;
@@ -2,17 +2,10 @@ package com.cf.imes.module.manage.controller.admin.query;
import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.framework.common.pojo.PageParam;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.excel.core.util.ExcelUtils;
import com.cf.imes.framework.operatelog.core.annotations.OperateLog;
import com.cf.imes.module.manage.controller.admin.pack.vo.OrderPartsReqVO;
import com.cf.imes.module.manage.controller.admin.pack.vo.PlateDetailsRespVO;
import com.cf.imes.module.manage.controller.admin.process.vo.ProcessRespVO;
import com.cf.imes.module.manage.controller.admin.query.vo.pack.OrderPackagePageReqVO;
import com.cf.imes.module.manage.controller.admin.query.vo.pack.OrderPackageVO;
import com.cf.imes.module.manage.controller.admin.query.vo.pack.PackageDetailsRespVO;
import com.cf.imes.module.manage.controller.admin.query.vo.pack.PrintOrderRespVO;
import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.*;
import com.cf.imes.module.manage.controller.admin.query.vo.salary.PriceRatePageReqVO;
@@ -30,14 +23,10 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
import static com.cf.imes.framework.common.pojo.CommonResult.success;
import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@Tag(name = "管理后台 - 生产查询")
@RestController
@@ -148,18 +137,6 @@ public class ProductionStatusController {
// @GetMapping("/queryPackageDetails")
// @Operation(summary = "查看包裹详情分页")
// @Parameter(name = "packId", description = "包裹Id", required = true)
// @PreAuthorize("@ss.hasPermission('manage:query:query')")
public CommonResult<List<PackageDetailsRespVO>> queryPackageDetails(@Valid @RequestParam("packId") Long packId){
return null;
// return CommonResult.success(productionStatusService.queryPackageDetails(packId));
}
@@ -177,20 +154,6 @@ public class ProductionStatusController {
// @GetMapping("/export")
// @Operation(summary = "导出缺板")
// @PreAuthorize("@ss.hasPermission('manage:query:export')")
// @OperateLog(type = EXPORT)
// public void exportPlateExcel(@Valid OrderPartsReqVO pageReqVO,
// HttpServletResponse response) throws IOException {
// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
// List<PlateDetailsRespVO> list = productionStatusService.getMissingBoard(pageReqVO).getList();
// // 导出 Excel
// ExcelUtils.write(response, "缺板信息表.xls", "数据", PlateDetailsRespVO.class, list);
//
// }
}
@@ -54,18 +54,20 @@ public interface OrderPackageMapper extends BaseMapperX<OrderPackageDO> {
default OrderPackageDO selectByPackId(Long packId,Long organId) {
return selectOne(new LambdaQueryWrapperX<OrderPackageDO>()
.eq(OrderPackageDO::getOrganId, organId)
.eq(OrderPackageDO::getDeleted,false)
.eqIfPresent(OrderPackageDO::getId, packId));
}
void updateParts(@Param("packageId") Long packageId, @Param("packageNo") Long packageNo);
void updateParts(@Param("packageId") Long packageId,@Param("orderId") Long orderId,@Param("organId") Long organId);
default List<OrderPackageDO> selectPackStatus(Long orderId,Long organId) {
return selectList(new LambdaQueryWrapperX<OrderPackageDO>()
.eq(OrderPackageDO::getOrganId,organId)
.eq(OrderPackageDO::getDeleted,false)
.eqIfPresent(OrderPackageDO::getOrderId, orderId));
}
@@ -73,6 +75,7 @@ public interface OrderPackageMapper extends BaseMapperX<OrderPackageDO> {
default List<OrderPackageDO> selectPackList(Long orderId,Long organId) {
return selectList(new LambdaQueryWrapperX<OrderPackageDO>()
.eq(OrderPackageDO::getOrganId,organId)
.eq(OrderPackageDO::getDeleted,false)
.eqIfPresent(OrderPackageDO::getOrderId, orderId)
.eqIfPresent(OrderPackageDO::getStatus, OrderPackageStatusEnum.UNPACKED.getStatus()));
}
@@ -1,11 +1,15 @@
package com.cf.imes.module.manage.dal.mysql.plate;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.module.manage.controller.admin.pack.vo.PackRespVO;
import com.cf.imes.module.manage.controller.admin.pack.vo.PlateDetailsRespVO;
import com.cf.imes.module.manage.controller.admin.patching.vo.PatchingDetailRespVO;
import com.cf.imes.module.manage.controller.admin.patching.vo.PatchingPlatePageReqVO;
import com.cf.imes.module.manage.controller.admin.process.vo.PlateDetails;
import com.cf.imes.module.manage.controller.admin.query.vo.pack.PackageDetailsRespVO;
import com.cf.imes.module.manage.dal.dataobject.plate.OrderPlateDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -45,4 +49,12 @@ public interface OrderPlateMapper extends BaseMapperX<OrderPlateDO> {
.likeIfPresent(OrderPlateDO::getPlateNo, plateNo.toString())
.select(OrderPlateDO::getId));
}
List<PackRespVO> selectPlateNum(@Param("orderIds") List<Long> orderIds,@Param("organId") Long organId);
List<PlateDetailsRespVO> selectOrderNoPackPlateList(@Param("orderId") Long orderId,@Param("organId") Long organId);
List<PlateDetailsRespVO> selectOrderPlateList(@Param("orderIds") List<Long> orderIds, @Param("organId") Long organId);
IPage<PackageDetailsRespVO> selectPackPlateList(@Param("page") IPage page, @Param("packageId") Long packageId, @Param("organId") Long organId);
}
@@ -3,12 +3,9 @@ package com.cf.imes.module.manage.dal.mysql.query;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.module.manage.controller.admin.pack.vo.OrderPlateDetailsRespVO;
import com.cf.imes.module.manage.controller.admin.pack.vo.PackRespVO;
import com.cf.imes.module.manage.controller.admin.pack.vo.PlateDetailsRespVO;
import com.cf.imes.module.manage.controller.admin.process.vo.PlateDetails;
import com.cf.imes.module.manage.controller.admin.process.vo.ProcessPlateReqVO;
import com.cf.imes.module.manage.controller.admin.query.vo.pack.PackageDetailsRespVO;
import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.OrderModuleVO;
import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.OrderPlateRespVO;
import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.PlatePageVO;
@@ -22,8 +19,6 @@ import java.util.List;
public interface OrderItemMapper extends BaseMapperX<OrderItemDO> {
List<PackageDetailsRespVO> selectByPackageId( @Param("packageId") Long packageId, @Param("organId") Long organId);
List<OrderModuleVO> selectCombinationName(Long orderNo);
@@ -31,61 +26,51 @@ public interface OrderItemMapper extends BaseMapperX<OrderItemDO> {
List<OrderPlateRespVO> selectPlateList(PlatePageVO pageReqVO);
List<PlateDetailsRespVO> selectOrderPlateList(@Param("orderNo") Long orderNo,@Param("organId") Long organId);
List<PlateDetailsRespVO> selectPrintPlateList(@Param("orderNo")Long orderNo,@Param("packageNo") Long packageNo, @Param("organId") Long organId);
void deleteOrderPack(@Param("packId") Long packId);
void deleteOrderPack(@Param("packId") Long packId,@Param("orderId") Long orderId,@Param("organId") Long organId);
void deleteOtherParts(@Param("partsId") Long partsId);
void deleteOtherParts(@Param("partsId") Long partsId,@Param("orderId") Long orderId,@Param("organId") Long organId);
void insertPackId(@Param("plateIdList") List<Long> plateIdList, @Param("packId") Long packId);
void insertPackId(@Param("plateIdList") List<Long> plateIdList, @Param("packId") Long packId,@Param("orderId") Long orderId,@Param("organId") Long organId);
void deletePackId(@Param("deletePlateIdList") List<Long> deletePlateIdList,@Param("packId") Long packId);
void deletePackId(@Param("deletePlateIdList") List<Long> deletePlateIdList,@Param("packId") Long packId,@Param("orderId") Long orderId,@Param("organId") Long organId);
void insertPartsId(@Param("packId") Long packId, @Param("addPartsIdList") List<Long> addPartsIdList);
String selectBodyName(@Param("plateId") Long plateId);
void insertPartsId(@Param("packId") Long packId, @Param("addPartsIdList") List<Long> addPartsIdList,@Param("orderId") Long orderId,@Param("organId") Long organId);
List<PlateDetails> selectByOrderId(@Param("reqVO") ProcessPlateReqVO reqVO, @Param("organId") Long organId );
OrderPlateDetailsRespVO selectOrderPlateDetails(@Param("orderId") Long orderId);
void insertParts(@Param("addPartsList") List<Long> addPartsList, @Param("packId")Long packId, @Param("orderId") Long orderId,@Param("organId") Long organId);
void insertParts(@Param("addPartsList") List<Long> addPartsList, @Param("packId")Long packId, @Param("orderNo") Long orderNo);
void deletePartsList(@Param("deletePartsList")List<Long> deletePartsList,@Param("packId") Long packId,@Param("orderNo") Long orderNo);
void deletePartsList(@Param("deletePartsList")List<Long> deletePartsList,@Param("packId") Long packId,@Param("orderId") Long orderId,@Param("organId") Long organId);
List<PlateDetails> selectPlateListByBodyIds( @Param("collect") List<Long> collect,@Param("orderId") Long orderId,@Param("userOrganId") Long userOrganId);
List<PlateDetailsRespVO> selectOrdersPlateList(@Param("orderIds") List<Long> orderIds, @Param("userOrganId") Long userOrganId);
default List<OrderItemDO> selectPackList(Long packId, Long organId) {
default List<OrderItemDO> selectPackList(Long packId,Long orderId ,Long organId) {
return selectList(new LambdaQueryWrapperX<OrderItemDO>()
.eq(OrderItemDO::getOrganId, organId)
.eqIfPresent(OrderItemDO::getOrderId,orderId)
.eqIfPresent(OrderItemDO::getPackageId, packId));
}
void deleteParts(@Param("packageId") Long packageId, @Param("partsIds") List<Long> partsIds);
void deleteParts(@Param("packageId") Long packageId,@Param("orderId") Long orderId ,@Param("partsIds") List<Long> partsIds,@Param("organId") Long organId);
void updateParts(@Param("partsId") Long partsId,@Param("packageId") Long packageId);
void updateParts(@Param("partsId") Long partsId,@Param("packageId") Long packageId,@Param("orderId") Long orderId,@Param("organId") Long organId);
default List<OrderItemDO> selectPackPlateList(Long orderId, Long organId) {
@@ -95,8 +80,6 @@ public interface OrderItemMapper extends BaseMapperX<OrderItemDO> {
}
List<PackRespVO> selectPlateNum(@Param("orderIds") List<Long> orderIds,@Param("organId") Long organId);
default List<OrderItemDO> selectPartsList(Long orderId, Long organId) {
@@ -2,13 +2,9 @@ package com.cf.imes.module.manage.dal.mysql.query;
import com.baomidou.mybatisplus.core.metadata.IPage;
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.manage.controller.admin.pack.vo.OrderPartsRespVO;
import com.cf.imes.module.manage.controller.admin.plate.vo.plate.PlatePageReqVO;
import com.cf.imes.module.manage.controller.admin.query.vo.pack.PackageDetailsRespVO;
import com.cf.imes.module.manage.dal.dataobject.plate.PlateDO;
import com.cf.imes.module.manage.dal.dataobject.query.OrderPartsNDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -26,16 +22,9 @@ public interface OrderPartsMapper extends BaseMapperX<OrderPartsNDO> {
void deleteOrderParts(@Param("partsIds") List<Long> partsIds);
void deleteOrderParts(@Param("partsIds") List<Long> partsIds,@Param("orderId") Long orderId,@Param("organId") Long organId);
default OrderPartsNDO selectOneParts(String otherPartsName,Long organId) {
return selectOne(new LambdaQueryWrapperX<OrderPartsNDO>()
.eq(OrderPartsNDO::getOrganId,organId)
.eqIfPresent(OrderPartsNDO::getName,otherPartsName));
}
void updateParts(@Param("partsId") Long partsId);
void updateParts(@Param("partsId") Long partsId,@Param("orderId") Long orderId,@Param("organId") Long organId);
}
@@ -8,6 +8,7 @@ import com.cf.imes.framework.common.enums.OrderPackageStatusEnum;
import com.cf.imes.framework.common.enums.OrderPackageTypeEnum;
import com.cf.imes.framework.common.enums.UserSettingTypeEnum;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.Assert.AssertUtils;
import com.cf.imes.framework.common.util.json.JsonUtils;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.mybatis.core.query.QueryWrapperX;
@@ -26,13 +27,13 @@ import com.cf.imes.module.manage.dal.mysql.pack.OrderBodyMapper;
import com.cf.imes.module.manage.dal.mysql.pack.OrderPackageMapper;
import com.cf.imes.module.manage.dal.mysql.pack.OrderPrepackagedMapper;
import com.cf.imes.module.manage.dal.mysql.plate.OrderPlateMapper;
import com.cf.imes.module.manage.dal.mysql.plate.PlateMapper;
import com.cf.imes.module.manage.dal.mysql.process.OrdersMapper;
import com.cf.imes.module.manage.dal.mysql.query.OrderItemMapper;
import com.cf.imes.module.manage.dal.mysql.query.OrderPartsMapper;
import com.cf.imes.module.manage.util.SnowflakeIdWorker3rd;
import com.cf.imes.module.system.api.setting.SettingApi;
import com.cf.imes.module.system.api.setting.dto.PackageConfigDTO;
import com.cf.imes.module.system.enums.ErrorCodeConstants;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -78,9 +79,6 @@ public class PackServiceImpl implements PackService {
@Resource
private OrdersMapper ordersMapper;
@Resource
private PlateMapper plateMapper;
@Resource
private SnowflakeIdWorker3rd idWorker;
@@ -105,18 +103,20 @@ public class PackServiceImpl implements PackService {
IPage<PackRespVO> packRespVOS = new PageDTO<>();
if(pageReqVO.getIsUp() != null){
if (pageReqVO.getIsUp() != null) {
OrderDO order = ordersMapper.selectById(pageReqVO.getOrderId());
// 判断是否为空
AssertUtils.notEmpty(order,ORDER_DATE_ERROR);
List<PackRespVO> packRespVOList = pageReqVO.getIsUp() ?
ordersMapper.selectOrderIds(order.getCreateTime().toString(), getUserOrganId(),order.getId()) :
ordersMapper.selectOrderIds(order.getCreateTime().toString(), getUserOrganId(), order.getId()) :
ordersMapper.selectOrderIdsFalse(order.getCreateTime().toString(), getUserOrganId(),order.getId());
ordersMapper.selectOrderIdsFalse(order.getCreateTime().toString(), getUserOrganId(), order.getId());
if(packRespVOList.isEmpty()){
throw exception(NO_PRODUCTION_ORDER_INFORMATION_AVAILABLE, pageReqVO.getIsUp() ?"" : "最后");
if (packRespVOList.isEmpty()) {
throw exception(NO_PRODUCTION_ORDER_INFORMATION_AVAILABLE, pageReqVO.getIsUp() ? "" : "最后");
}
packRespVOS.setRecords(packRespVOList);
@@ -125,7 +125,8 @@ public class PackServiceImpl implements PackService {
orderIds.addAll(packRespVOS.getRecords().stream().map(PackRespVO::getId).toList());
}else {
} else {
pageReqVO.setCustomer(insertSeparator(pageReqVO.getCustomer()));
pageReqVO.setCustomOrderNo(insertSeparator(pageReqVO.getCustomOrderNo()));
@@ -133,7 +134,7 @@ public class PackServiceImpl implements PackService {
// 查询查询分页
packRespVOS = ordersMapper.selectOrderIdList(page,pageReqVO, getUserOrganId());
packRespVOS = ordersMapper.selectOrderIdList(page, pageReqVO, getUserOrganId());
orderIds.addAll(packRespVOS.getRecords().stream().map(PackRespVO::getId).toList());
@@ -144,17 +145,29 @@ public class PackServiceImpl implements PackService {
// 查询板材的总量
List<PackRespVO> packRespVOList = orderItemMapper.selectPlateNum(orderIds,getUserOrganId());
List<PackRespVO> packRespVOList = orderPlateMapper.selectPlateNum(orderIds, getUserOrganId());
AssertUtils.notEmpty(packRespVOList, ErrorCodeConstants.ORDER_PLATE_ERROR);
for (PackRespVO packRespVO : packRespVOList) {
packRespVO.setTotalPieceCount((long) packRespVO.getPlateId().size());
packRespVO.setPlateId(null);
}
// 查询当前生产的包裹数量
List<PackRespVO> respVOS = orderPackageMapper.selectPackPage(orderIds,getUserOrganId());
List<PackRespVO> respVOS = orderPackageMapper.selectPackPage(orderIds, getUserOrganId());
// 查询当前生产单已经打包的板材数量
List<PackRespVO> plateNum = orderPackageMapper.selectPackPieceCount(orderIds, getUserOrganId());
for (PackRespVO packRespVO : plateNum) {
packRespVO.setPackPieceCount((long) packRespVO.getPlateId().size());
packRespVO.setPlateId(null);
}
for (PackRespVO record : packRespVOS.getRecords()) {
// 板材总数
@@ -178,21 +191,20 @@ public class PackServiceImpl implements PackService {
}
// 查看生产订单对应的板材信息
@Override
public List<PlateDetailsRespVO> getOrderPlateList(Long orderId) {
// 查询需要返回的其他信息
// OrderPlateDetailsRespVO orderPlateDetailsRespVO = orderItemMapper.selectOrderPlateDetails(orderId);
// orderPlateDetailsRespVO.setPendingNum(orderPlateDetailsRespVO.getPlateNum() - orderPlateDetailsRespVO.getPlateProcessedNum());
// 查询订单对应的板件信息
List<PlateDetailsRespVO> plateDetailsRespVOS = orderItemMapper.selectOrderPlateList(orderId,getUserOrganId());
List<PlateDetailsRespVO> plateDetailsRespVOS = orderPlateMapper.selectOrderNoPackPlateList(orderId, getUserOrganId());
if(plateDetailsRespVOS.isEmpty()){
return null;
}
for (PlateDetailsRespVO plateDetailsRespVO : plateDetailsRespVOS) {
String name = "";
if(!plateDetailsRespVO.getProcessGroupNameList().isEmpty()) {
if (!plateDetailsRespVO.getProcessGroupNameList().isEmpty()) {
for (GroupNameList groupNameList : plateDetailsRespVO.getProcessGroupNameList()) {
// 去除最后的逗号
name += groupNameList.getName() + ",";
@@ -214,17 +226,23 @@ public class PackServiceImpl implements PackService {
public List<PlateDetailsRespVO> getOrdersPlateList(List<Long> orderIds) {
List<PlateDetailsRespVO> plateDetailsRespVOS = orderItemMapper.selectOrdersPlateList(orderIds, getUserOrganId());
List<PlateDetailsRespVO> plateDetailsRespVOS = orderPlateMapper.selectOrderPlateList(orderIds,getUserOrganId());
if (plateDetailsRespVOS.isEmpty()) {
return null;
}
List<Long> packageIds = plateDetailsRespVOS.stream().map(PlateDetailsRespVO::getPackageId).distinct().toList();
List<OrderPackageDO> orderPackageDOS = new ArrayList<>();
if(!packageIds.isEmpty()) {
if (!packageIds.isEmpty()) {
orderPackageDOS = orderPackageMapper.selectBatchIds(packageIds);
}
for (PlateDetailsRespVO plateDetailsRespVO : plateDetailsRespVOS) {
String name = "";
if(!plateDetailsRespVO.getProcessGroupNameList().isEmpty()) {
if (!plateDetailsRespVO.getProcessGroupNameList().isEmpty()) {
for (GroupNameList groupNameList : plateDetailsRespVO.getProcessGroupNameList()) {
// 去除最后的逗号
name += groupNameList.getName() + ",";
@@ -245,7 +263,6 @@ public class PackServiceImpl implements PackService {
}
// 查看生产订单对应的包裹信息
@Override
public List<OrderPackageVO> getOrderPack(PackageDetailsReqVO reqVO) {
@@ -255,13 +272,8 @@ public class PackServiceImpl implements PackService {
OrderDO orderDO = ordersMapper.selectById(reqVO.getOrderId());
// for (OrderPackageVO orderPackageVO : orderPackageVOS) {
// orderPackageVO.setCustomOrderNo(orderDO.getCustomOrderNo());
// orderPackageVO.setCustomer(orderDO.getCustomer());
// orderPackageVO.setAddress(orderDO.getAddress());
// orderPackageVO.setDealer(orderDO.getDealer());
// orderPackageVO.setOrderRemark(orderDO.getRemark());
// }
// AssertUtils.notEmpty(orderPackageVOS,orderDO,ORDER_PLATE_ERROR);
return orderPackageVOS.stream().peek(m -> {
@@ -276,7 +288,6 @@ public class PackServiceImpl implements PackService {
}
@Override
public PageResult<OrderPackageVO> getPageOrderPack(PackageDetailsReqVO reqVO) {
@@ -284,13 +295,13 @@ public class PackServiceImpl implements PackService {
List<Long> packId = null;
if(reqVO.getPlateNo()!= null){
if (reqVO.getPlateNo() != null) {
List<Long> plateId = orderPlateMapper.selectplateByPlateNo(reqVO.getPlateNo(), reqVO.getOrderId(), getUserOrganId())
.stream().map(OrderPlateDO::getId).toList();
if(plateId.isEmpty()){
if (plateId.isEmpty()) {
return null;
}
@@ -301,17 +312,17 @@ public class PackServiceImpl implements PackService {
QueryWrapperX<OrderPackageDO> queryWrapperX = new QueryWrapperX<>();
queryWrapperX
.eq("o.organ_id",getUserOrganId())
.eq("o.deleted",false)
.eq("op.deleted",false)
.eq("o.id",reqVO.getOrderId())
.likeIfPresent("op.package_no",reqVO.getPackageNo())
.inIfPresent("op.id",packId)
.eq("o.organ_id", getUserOrganId())
.eq("o.deleted", false)
.eq("op.deleted", false)
.eq("o.id", reqVO.getOrderId())
.likeIfPresent("op.package_no", reqVO.getPackageNo())
.inIfPresent("op.id", packId)
.eqIfPresent("op.status", reqVO.getPackStatus())
.orderByDesc("op.create_time");
IPage<OrderPackageVO> orderPackageDOIPage = orderPackageMapper.selectByOrderNo(page,queryWrapperX);
IPage<OrderPackageVO> orderPackageDOIPage = orderPackageMapper.selectByOrderNo(page, queryWrapperX);
if (CollectionUtil.isEmpty(orderPackageDOIPage.getRecords())) {
@@ -324,17 +335,12 @@ public class PackServiceImpl implements PackService {
}
// 查看配件列表分页
@Override
public List<OrderPartsRespVO> getPartsList(OrderPartsReqVO reqVO) {
List<OrderPartsRespVO> orderPartsRespVOS = orderPartsMapper.selectPartsList(reqVO.getOrderId(),getUserOrganId());
List<OrderPartsRespVO> orderPartsRespVOS = orderPartsMapper.selectPartsList(reqVO.getOrderId(), getUserOrganId());
return orderPartsRespVOS;
@@ -352,7 +358,6 @@ public class PackServiceImpl implements PackService {
}
// 更新配件
@Override
@Transactional(rollbackFor = Exception.class)
@@ -360,7 +365,7 @@ public class PackServiceImpl implements PackService {
// 判断包裹ID是否为空,为空,走新增,不为空,走更新
if(reqVO.getPackId()==null){
if (reqVO.getPackId() == null) {
OrderPackageDO orderPackageDO = new OrderPackageDO();
orderPackageDO.setOrderId(reqVO.getOrderId());
@@ -369,12 +374,12 @@ public class PackServiceImpl implements PackService {
orderPackageDO.setStatus((OrderPackageStatusEnum.PACKAGED.getStatus()));
orderPackageMapper.insert(orderPackageDO);
// 生产单明细表新增包裹 ID
if(reqVO.getAddPartsIdList()!=null) {
orderItemMapper.insertPartsId( orderPackageDO.getId(),reqVO.getAddPartsIdList());
if (reqVO.getAddPartsIdList() != null) {
orderItemMapper.insertPartsId(orderPackageDO.getId(), reqVO.getAddPartsIdList(), reqVO.getOrderId(), getUserOrganId());
}
// 判断当前生产单的板材和配件是否已全部打包且当前生产单的包裹已全部封包
if(validateOrderPack(reqVO.getOrderId())){
if (validateOrderPack(reqVO.getOrderId())) {
updateOrderStatus(reqVO.getOrderId());
@@ -388,20 +393,20 @@ public class PackServiceImpl implements PackService {
OrderPackageDO orderPackageDO = orderPackageMapper.selectByPackId(reqVO.getPackId(), getUserOrganId());
List<OrderItemDO> orderItemDOS = orderItemMapper.selectPackList(reqVO.getPackId(), getUserOrganId());
List<Long> partsList = orderItemDOS.stream().map(m -> m.getPartsId()).collect(Collectors.toList());
List<OrderItemDO> orderItemDOS = orderItemMapper.selectPackList(reqVO.getPackId(), reqVO.getOrderId(), getUserOrganId());
List<Long> partsList = orderItemDOS.stream().map(OrderItemDO::getPartsId).toList();
// 如果此时删除的包裹配件数量等于查询出来的配件数量,且新增的板材数量不为0,更改包裹的类型
if(reqVO.getDeletePartsIdList().size() == partsList.size() && !reqVO.getAddPlateIdList().isEmpty()){
if (reqVO.getDeletePartsIdList().size() == partsList.size() && !reqVO.getAddPlateIdList().isEmpty()) {
// 删除生产单明细表件对应的包裹ID
orderItemMapper.deletePackId(reqVO.getDeletePartsIdList(), reqVO.getPackId());
// 删除生产单明细表件对应的包裹ID
orderItemMapper.deletePartsList(reqVO.getDeletePartsIdList(), reqVO.getPackId(), reqVO.getOrderId(), getUserOrganId());
// 生产单明细表配件新增对应的包裹ID
orderItemMapper.insertParts(reqVO.getAddPlateIdList(),reqVO.getPackId(),reqVO.getOrderId());
// 生产单明细表板材新增对应的包裹ID
orderItemMapper.insertPackId(reqVO.getAddPlateIdList(), reqVO.getPackId(), reqVO.getOrderId(), getUserOrganId());
// 更新包裹类型和包裹的状态
@@ -414,12 +419,12 @@ public class PackServiceImpl implements PackService {
// 生产明细表新增的配件ID
if(!reqVO.getAddPartsIdList().isEmpty()) {
orderItemMapper.insertParts(reqVO.getAddPartsIdList(), reqVO.getPackId(), reqVO.getOrderId());
if (!reqVO.getAddPartsIdList().isEmpty()) {
orderItemMapper.insertParts(reqVO.getAddPartsIdList(), reqVO.getPackId(), reqVO.getOrderId(), getUserOrganId());
}
// 生产明细表删除的配件ID
if(!reqVO.getDeletePartsIdList().isEmpty()) {
orderItemMapper.deletePartsList(reqVO.getDeletePartsIdList(), reqVO.getPackId(), reqVO.getOrderId());
if (!reqVO.getDeletePartsIdList().isEmpty()) {
orderItemMapper.deletePartsList(reqVO.getDeletePartsIdList(), reqVO.getPackId(), reqVO.getOrderId(), getUserOrganId());
}
orderPackageDO.setStatus(OrderPackageStatusEnum.PACKAGED.getStatus());
@@ -427,24 +432,22 @@ public class PackServiceImpl implements PackService {
// 判断当前生产单的板材和配件是否已全部打包且当前生产单的包裹已全部封包
if(validateOrderPack(reqVO.getOrderId())){
if (validateOrderPack(reqVO.getOrderId())) {
updateOrderStatus(reqVO.getOrderId());
}
return typeConversion(orderPackageDO);
}
// 拆包
@Override
public OrderPackRespVO unpacking(Long packageID) {
OrderPackageDO packageDO = orderPackageMapper.selectById(packageID);
packageDO.setStatus((OrderPackageStatusEnum.UNPACKED.getStatus()));
packageDO.setStatus(OrderPackageStatusEnum.UNPACKED.getStatus());
orderPackageMapper.updateById(packageDO);
return typeConversion(packageDO);
@@ -452,8 +455,6 @@ public class PackServiceImpl implements PackService {
}
// 更新包裹
@Override
@Transactional(rollbackFor = Exception.class)
@@ -461,7 +462,7 @@ public class PackServiceImpl implements PackService {
// 判断包裹ID是否为空,为空,走新增,不为空,走更新
if(packageVO.getPackId()==null){
if (packageVO.getPackId() == null) {
OrderPackageDO orderPackageDO = new OrderPackageDO();
orderPackageDO.setOrderId(packageVO.getOrderId());
@@ -471,11 +472,11 @@ public class PackServiceImpl implements PackService {
orderPackageDO.setRemark(packageVO.getRemark());
orderPackageMapper.insert(orderPackageDO);
// 生产单明细表新增包裹 ID
if(packageVO.getAddPlateIdList()!=null) {
orderItemMapper.insertPackId(packageVO.getAddPlateIdList(), orderPackageDO.getId());
if (packageVO.getAddPlateIdList() != null) {
orderItemMapper.insertPackId(packageVO.getAddPlateIdList(), orderPackageDO.getId(), packageVO.getOrderId(), getUserOrganId());
}
if(validateOrderPack(packageVO.getOrderId())){
if (validateOrderPack(packageVO.getOrderId())) {
updateOrderStatus(packageVO.getOrderId());
}
@@ -484,21 +485,20 @@ public class PackServiceImpl implements PackService {
OrderPackageDO orderPackageDO = orderPackageMapper.selectByPackId(packageVO.getPackId(), getUserOrganId());
List<OrderItemDO> orderItemDOS = orderItemMapper.selectPackList(packageVO.getPackId(), getUserOrganId());
List<Long> plateList = orderItemDOS.stream().map(m -> m.getPlateId()).collect(Collectors.toList());
// List<Long> partsList = orderItemDOS.stream().map(m -> m.getPartsId()).collect(Collectors.toList());
List<OrderItemDO> orderItemDOS = orderItemMapper.selectPackList(packageVO.getPackId(), packageVO.getOrderId(), getUserOrganId());
List<Long> plateList = orderItemDOS.stream().map(OrderItemDO::getPlateId).toList();
// 如果此时删除的包裹板材数量等于查询出来的板材数量,且新增的配件数量不为0,更改包裹的类型
if(packageVO.getDeletePlateIdList().size() == plateList.size() && !packageVO.getAddPartsIdList().isEmpty()){
if (packageVO.getDeletePlateIdList().size() == plateList.size() && !packageVO.getAddPartsIdList().isEmpty()) {
// 删除生产单明细表板件对应的包裹ID
orderItemMapper.deletePackId(packageVO.getDeletePlateIdList(), packageVO.getPackId());
orderItemMapper.deletePackId(packageVO.getDeletePlateIdList(), packageVO.getPackId(), packageVO.getOrderId(), getUserOrganId());
// 生产单明细表配件新增对应的包裹ID
orderItemMapper.insertParts(packageVO.getAddPartsIdList(),packageVO.getPackId(),packageVO.getOrderId());
orderItemMapper.insertParts(packageVO.getAddPartsIdList(), packageVO.getPackId(), packageVO.getOrderId(), getUserOrganId());
// 更新包裹类型和包裹的状态
@@ -511,13 +511,13 @@ public class PackServiceImpl implements PackService {
// 生产明细表新增包裹ID
if(!packageVO.getAddPlateIdList().isEmpty()) {
orderItemMapper.insertPackId(packageVO.getAddPlateIdList(), packageVO.getPackId());
if (!packageVO.getAddPlateIdList().isEmpty()) {
orderItemMapper.insertPackId(packageVO.getAddPlateIdList(), packageVO.getPackId(), packageVO.getOrderId(), getUserOrganId());
}
// 移除生产明细表中板件对应的包裹ID
if(!packageVO.getDeletePlateIdList().isEmpty()) {
orderItemMapper.deletePackId(packageVO.getDeletePlateIdList(), packageVO.getPackId());
if (!packageVO.getDeletePlateIdList().isEmpty()) {
orderItemMapper.deletePackId(packageVO.getDeletePlateIdList(), packageVO.getPackId(), packageVO.getOrderId(), getUserOrganId());
}
orderPackageDO.setStatus(OrderPackageStatusEnum.PACKAGED.getStatus());
@@ -525,7 +525,7 @@ public class PackServiceImpl implements PackService {
// 判断当前生产单的板材和配件是否已全部打包且当前生产单的包裹已全部封包
if(validateOrderPack(packageVO.getOrderId())){
if (validateOrderPack(packageVO.getOrderId())) {
// 修改生产单的打包状态
updateOrderStatus(packageVO.getOrderId());
@@ -538,53 +538,31 @@ public class PackServiceImpl implements PackService {
// 判断当前生产单的板材和配件是否已全部打包且当前生产单的包裹已全部封包
public Boolean validateOrderPack(Long orderId){
public Boolean validateOrderPack(Long orderId) {
List<OrderPackageDO> orderPackageDOS = orderPackageMapper.selectPackList(orderId, getUserOrganId());
if(!orderPackageDOS.isEmpty()){
if (!orderPackageDOS.isEmpty()) {
return false;
}
List<PlateAndPartIdList> plateAndPartIdLists = orderPackageMapper.selectOrderPack(orderId, getUserOrganId());
// List<Long> plateList = plateAndPartIdLists.stream().map(PlateAndPartIdList::getPlateId).toList();
//
// List<Long> partsList = plateAndPartIdLists.stream().map(PlateAndPartIdList::getPartsId).toList();
return plateAndPartIdLists.isEmpty() ;
return plateAndPartIdLists.isEmpty();
}
// 修改当前生产单的工序状态和生产单的状态
@Transactional(rollbackFor = Exception.class)
public void updateOrderStatus(Long orderId) {
public void updateOrderStatus(Long orderId) {
OrderDO orderDO = ordersMapper.selectById(orderId);
if(orderDO.getFinishTime() != null){
return;
}
// // 判断正确,修改当前生产单对应的打包的工序状态
// OrderProcessStepNDO orderProcessStepNDO = processStepMapper.selectOrderProcess(orderId, getUserOrganId(), ProcessProcessingTypeEnum.PACK.getNumber());
//
// if(orderProcessStepNDO == null){
// if(orderDO.getFinishTime() != null){
// return;
// }
//
//
// // 工序加工添加负责人
// String nickname = getLoginUser().getNickname();
//
//
// BigDecimal salary = productionProcessService.calculateSalary(orderProcessStepNDO.getId(), null);
//
// // 修改生产明细表和步骤表的工序状态
// processStepMapper.updateStatus(orderProcessStepNDO.getId(), nickname, salary);
//
// processStepItemMapper.updateStatus(orderProcessStepNDO.getId());
// 修改生产单的打包状态未已打包
orderDO.setPackaged(OrderPackageStatusEnum.PACKAGED.getStatus());
@@ -599,54 +577,50 @@ public class PackServiceImpl implements PackService {
@Override
public List<OrderPackRespVO> selectPack(Long orderId) {
List<OrderPackageDO> orderPackageDOS = orderPackageMapper.selectPackStatus(orderId,getUserOrganId());
// List<OrderPackageDO> collect = orderPackageDOS.stream().map(o -> o.setRemark(JsonUtils.unzipString(o.getRemark()))).collect(Collectors.toList());
return orderPackageDOS.stream().map(m -> typeConversion(m)).collect(Collectors.toList());
List<OrderPackageDO> orderPackageDOS = orderPackageMapper.selectPackStatus(orderId, getUserOrganId());
return orderPackageDOS.stream().map(m -> typeConversion(m)).collect(Collectors.toList());
}
// 包裹订单打印
@Override
public PrintOrderPackRespVO printOrderPack(PrintOrderPackReqVO reqVO) {
PrintOrderPackRespVO printOrderPackRespVO = ordersMapper.selectOrderPack(reqVO.getOrderId(), reqVO.getPackageNo(),getUserOrganId());
printOrderPackRespVO.setPlateList(orderItemMapper.selectPrintPlateList(reqVO.getOrderId(), reqVO.getPackageNo(),getUserOrganId()));
PrintOrderPackRespVO printOrderPackRespVO = ordersMapper.selectOrderPack(reqVO.getOrderId(), reqVO.getPackageNo(), getUserOrganId());
printOrderPackRespVO.setPlateList(orderItemMapper.selectPrintPlateList(reqVO.getOrderId(), reqVO.getPackageNo(), getUserOrganId()));
return printOrderPackRespVO;
}
// 删除包裹及其关联的包裹信息(删除全部)
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteOrderPack(PackReqVO reqVO) {
// 判断包裹的类型是否为其他类型,如果是,则删除其包裹信息
if (reqVO.getIsOther() == true) {
if (reqVO.getIsOther()) {
List<Long> partsIds = orderItemMapper.selectPackList(reqVO.getPackageId(), getUserOrganId())
.stream().map(m -> m.getPartsId())
List<Long> partsIds = orderItemMapper.selectPackList(reqVO.getPackageId(), reqVO.getOrderId(), getUserOrganId())
.stream().map(OrderItemDO::getPartsId)
.distinct()
.collect(Collectors.toList());
.toList();
orderPartsMapper.deleteOrderParts(partsIds);
orderPartsMapper.deleteOrderParts(partsIds, reqVO.getOrderId(), getUserOrganId());
orderPackageMapper.updateParts(reqVO.getPackageId(), reqVO.getPackageNo());
orderPackageMapper.updateParts(reqVO.getPackageId(), reqVO.getOrderId(), getUserOrganId());
orderItemMapper.deleteParts(reqVO.getPackageId(),partsIds);
orderItemMapper.deleteParts(reqVO.getPackageId(), reqVO.getOrderId(), partsIds, getUserOrganId());
return;
}
orderPackageMapper.updateParts(reqVO.getPackageId(),reqVO.getPackageNo());
orderPackageMapper.updateParts(reqVO.getPackageId(), reqVO.getOrderId(), getUserOrganId());
orderItemMapper.deleteOrderPack(reqVO.getPackageId());
orderItemMapper.deleteOrderPack(reqVO.getPackageId(), reqVO.getOrderId(), getUserOrganId());
}
@@ -656,11 +630,6 @@ public class PackServiceImpl implements PackService {
@Transactional(rollbackFor = Exception.class)
public OrderPackRespVO addNewOtherPack(OtherPackReqVO reqVO) {
// 判断配件名称是否重复
// OrderPartsNDO orderPartsNDO = orderPartsMapper.selectOneParts(reqVO.getName(),getUserOrganId());
// if (orderPartsNDO != null) {
// throw exception(THE_ACCESSORY_NAME_CANNOT_BE_DUPLICATED);
// }
// 配件表新增数据
OrderPartsNDO orderParts = BeanUtils.toBean(reqVO, OrderPartsNDO.class);
@@ -679,7 +648,7 @@ public class PackServiceImpl implements PackService {
orderPackageMapper.insert(orderPackageDO);
// 在生产单明细表中添加数据(生产单号,配件ID,包裹ID,部件数量(目前一直为1
// 在生产单明细表中添加数据(生产单号,配件ID,包裹ID,部件数量)
OrderItemDO orderItemDO = new OrderItemDO();
orderItemDO.setOrderId(reqVO.getOrderId());
orderItemDO.setPartsId(orderParts.getId());
@@ -698,15 +667,13 @@ public class PackServiceImpl implements PackService {
}
// 新增外部配件
@Override
@Transactional(rollbackFor = Exception.class)
public OrderPartsRespVO addNewOtherParts(OtherPackReqVO reqVO) {
OrderPackageDO orderPackageDO = orderPackageMapper.selectByPackNo(reqVO.getPackNo(),getUserOrganId());
if(orderPackageDO.getType()!= OrderPackageTypeEnum.OTHER_ACCESSORIES.getType().longValue()){
OrderPackageDO orderPackageDO = orderPackageMapper.selectByPackNo(reqVO.getPackNo(), getUserOrganId());
if (orderPackageDO.getType() != OrderPackageTypeEnum.OTHER_ACCESSORIES.getType().longValue()) {
throw exception(THE_CURRENT_PACKAGE_TYPE_IS_INCORRECT);
}
@@ -727,34 +694,28 @@ public class PackServiceImpl implements PackService {
// 在生产单明细表中新增数据
orderItemMapper.insert(orderItemDO);
return BeanUtils.toBean(orderParts,OrderPartsRespVO.class);
return BeanUtils.toBean(orderParts, OrderPartsRespVO.class);
}
// 删除包裹中的外部配件
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteOtherParts(DeleteOtherPartsReqVO reqVO) {
if(reqVO.getIsOtherParts()) {
if (reqVO.getIsOtherParts()) {
// 更新配件表中配件为逻辑删除
orderPartsMapper.updateParts(reqVO.getPartsId());
orderItemMapper.deleteOtherParts(reqVO.getPartsId());
orderPartsMapper.updateParts(reqVO.getPartsId(), reqVO.getOrderId(), getUserOrganId());
orderItemMapper.deleteOtherParts(reqVO.getPartsId(), reqVO.getOrderId(), getUserOrganId());
}
orderItemMapper.updateParts(reqVO.getPartsId(),reqVO.getPackageId());
orderItemMapper.updateParts(reqVO.getPartsId(), reqVO.getPackageId(), reqVO.getOrderId(), getUserOrganId());
}
// 新增配件-即新增一个包裹
@Override
@Transactional(rollbackFor = Exception.class)
@@ -767,15 +728,13 @@ public class PackServiceImpl implements PackService {
orderPackageDO.setPackageNo(generatePackageNo());
orderPackageMapper.insert(orderPackageDO);
orderItemMapper.insertPartsId(orderPackageDO.getId(), reqVO.getAddPartsIdList());
orderItemMapper.insertPartsId(orderPackageDO.getId(), reqVO.getAddPartsIdList(), reqVO.getOrderId(), getUserOrganId());
return typeConversion(orderPackageDO);
}
// 查询预打包优化信息
@Override
public String getPrePackInfo(Long orderId) {
@@ -784,7 +743,7 @@ public class PackServiceImpl implements PackService {
OrderPrepackagedDO orderPrepackagedDO = orderPrepackagedMapper.selectOrder(orderId, getUserOrganId());
if(orderPrepackagedDO == null){
if (orderPrepackagedDO == null) {
return null;
}
@@ -794,8 +753,6 @@ public class PackServiceImpl implements PackService {
}
// 保存优化后的预打包信息
@Override
@Transactional(rollbackFor = Exception.class)
@@ -819,7 +776,7 @@ public class PackServiceImpl implements PackService {
String optimizeInfo = reqVO.getOptimizeInfo();
// 自动打包,包裹表新增
if(autoPack){
if (autoPack) {
ArrayList<OrderPackageDO> orderPackageDOS = new ArrayList<>();
@@ -829,12 +786,13 @@ public class PackServiceImpl implements PackService {
JsonNode jsonNode = JsonUtils.parseTree(reqVO.getOptimizeInfo());
List<PrePackOptimizeInfo> asJsonObject = objectMapper.convertValue(jsonNode, new TypeReference<>() {});
List<PrePackOptimizeInfo> asJsonObject = objectMapper.convertValue(jsonNode, new TypeReference<>() {
});
asJsonObject.forEach(value ->{
asJsonObject.forEach(value -> {
value.getList().forEach(prePackOptimizeInfo ->{
value.getList().forEach(prePackOptimizeInfo -> {
String packageNo = generatePackageNo();
prePackOptimizeInfo.setName(packageNo);
@@ -844,7 +802,7 @@ public class PackServiceImpl implements PackService {
.orderId(reqVO.getOrderId())
.status(OrderPackageStatusEnum.PACKAGED.getStatus())
.build());
prePackOptimizeInfo.getList().forEach(plate ->{
prePackOptimizeInfo.getList().forEach(plate -> {
List<String> list = plate.getList().stream().map(PrePackOptimizeInfo.PrerPlateData::getPlateId).toList();
list.forEach(a -> packPlateNoLists.add(PackPlateList.builder()
.packNo(packageNo)
@@ -861,51 +819,32 @@ public class PackServiceImpl implements PackService {
List<OrderPackageDO> packageDOS = orderPackageMapper.selectPackStatus(reqVO.getOrderId(), getUserOrganId());
if(!packageDOS.isEmpty()){
if (!packageDOS.isEmpty()) {
// 删除除配件和其他配件外的所有包裹
orderPackageMapper.updateDelete(reqVO.getOrderId(),getUserOrganId());
orderPackageMapper.updateDelete(reqVO.getOrderId(), getUserOrganId());
}
// 包裹表新增包裹
orderPackageMapper.insertBatch(orderPackageDOS);
orderPackageDOS.forEach(a->
// 根据包裹编号查找包裹ID
orderPackageDOS.forEach(a ->
packPlateNoLists.stream().filter(f -> Objects.equals(f.getPackNo(), a.getPackageNo()))
.forEach(f -> f.setPackId(a.getId())));
List<OrderItemDO> orderItemDOS = orderItemMapper.selectPackPlateList(reqVO.getOrderId(), getUserOrganId());
// List<String> plateNo = packPlateNoLists.stream().map(PackPlateList::getPlateNo).toList();
//
//
// List<OrderPlateDO> orderPlateDOS = orderPlateMapper.selectPlateList(plateNo, getUserOrganId());
//
// if(orderPlateDOS.isEmpty()){
// System.out.println("当前板材数据为空");
//
// }
//
// orderPlateDOS.forEach(a->
// packPlateNoLists.stream().filter(f->Objects.equals(f.getPlateNo(), a.getPlateNo()))
// .forEach(f -> f.setPlateId(a.getId())));
//
//
// System.out.println("啊哈哈哈哈哈哈1 "+packPlateNoLists);
packPlateNoLists.forEach(a->
orderItemDOS.stream().filter(f->Objects.equals(f.getPlateId(), a.getPlateId()))
.forEach(f->f.setPackageId(a.getPackId())));
packPlateNoLists.forEach(a ->
orderItemDOS.stream().filter(f -> Objects.equals(f.getPlateId(), a.getPlateId()))
.forEach(f -> f.setPackageId(a.getPackId())));
orderItemMapper.updateBatch(orderItemDOS);
// 查询配件是否为空,为空,修改生产单的状态为已打包
List<OrderItemDO> orderItemDoPartsList = orderItemMapper.selectPartsList(reqVO.getOrderId(), getUserOrganId());
if(orderItemDoPartsList.isEmpty()) {
if (orderItemDoPartsList.isEmpty()) {
OrderDO orderDO = ordersMapper.selectById(reqVO.getOrderId());
orderDO.setPackaged(OrderPackageStatusEnum.PACKAGED.getStatus());
ordersMapper.updateById(orderDO);
@@ -916,7 +855,7 @@ public class PackServiceImpl implements PackService {
OrderPrepackagedDO orderPackOptimizeDO = orderPrepackagedMapper.selectOrder(reqVO.getOrderId(), getUserOrganId());
if(orderPackOptimizeDO ==null){
if (orderPackOptimizeDO == null) {
OrderPrepackagedDO prepackagedDO = new OrderPrepackagedDO();
prepackagedDO.setOrderId(reqVO.getOrderId());
@@ -932,84 +871,6 @@ public class PackServiceImpl implements PackService {
}
//
// @Override
// @Transactional(rollbackFor = Exception.class)
// public void saveOptimizeInfo(PrePackReqVO reqVO) {
// if (reqVO.getIsAutoPack()) {
// List<OrderPackageDO> orderPackageDOS = new ArrayList<>();
// List<PackPlateList> packPlateNoLists = new ArrayList<>();
//
// reqVO.getOptimizeInfo().values().parallelStream().forEach(value -> {
// value.forEach(prePackOptimizeInfo -> {
// String packageNo = generatePackageNo();
// List<String> list = prePackOptimizeInfo.getOptimizeData().stream().map(m -> m.getPlateNo()).collect(Collectors.toList());
//
// list.forEach(a -> packPlateNoLists.add(PackPlateList.builder()
// .packNo(packageNo)
// .plateNo(a)
// .build()));
//
// orderPackageDOS.add(OrderPackageDO.builder()
// .packageNo(packageNo)
// .type(OrderPackageTypeEnum.PLATE.getType())
// .orderId(reqVO.getOrderId())
// .status(OrderPackageStatusEnum.PACKAGED.getStatus())
// .build());
//
// prePackOptimizeInfo.setPackNo(packageNo);
// });
// });
//
// List<OrderPackageDO> packageDOS = orderPackageMapper.selectPackStatus(reqVO.getOrderId(), getUserOrganId());
//
// if (!packageDOS.isEmpty()) {
// orderPackageMapper.updateDelete(reqVO.getOrderId());
// }
//
// orderPackageMapper.insertBatch(orderPackageDOS);
//
// Map<String, Long> packageNoToIdMap = orderPackageDOS.stream().collect(Collectors.toMap(OrderPackageDO::getPackageNo, OrderPackageDO::getId));
//
// packPlateNoLists.forEach(f -> f.setPackId(packageNoToIdMap.get(f.getPackNo())));
//
// List<OrderItemDO> orderItemDOS = orderItemMapper.selectPackPlateList(reqVO.getOrderId(), getUserOrganId());
//
// List<String> plateNo = packPlateNoLists.stream().map(PackPlateList::getPlateNo).collect(Collectors.toList());
//
// List<OrderPlateDO> orderPlateDOS = orderPlateMapper.selectPlateList(plateNo, getUserOrganId());
//
// Map<String, Long> plateNoToIdMap = orderPlateDOS.stream().collect(Collectors.toMap(OrderPlateDO::getPlateNo, OrderPlateDO::getId));
//
// packPlateNoLists.forEach(f -> f.setPlateId(plateNoToIdMap.get(f.getPlateNo())));
//
// Map<Long, Long> plateIdToPackIdMap = packPlateNoLists.stream().collect(Collectors.toMap(PackPlateList::getPlateId, PackPlateList::getPackId));
//
// orderItemDOS.forEach(f -> f.setPackageId(plateIdToPackIdMap.get(f.getPlateId())));
//
// orderItemMapper.updateBatch(orderItemDOS);
// }
//
// String optimizeInfo = JsonUtils.toJsonString(reqVO.getOptimizeInfo());
//
// OrderPrepackagedDO orderPackOptimizeDO = orderPrepackagedMapper.selectOrder(reqVO.getOrderId(), getUserOrganId());
//
// if (orderPackOptimizeDO == null) {
// OrderPrepackagedDO newOrderPackOptimizeDO = new OrderPrepackagedDO();
// newOrderPackOptimizeDO.setOrderId(reqVO.getOrderId());
// newOrderPackOptimizeDO.setResult(JsonUtils.zipString(optimizeInfo));
// orderPrepackagedMapper.insert(newOrderPackOptimizeDO);
// return;
// }
//
// orderPackOptimizeDO.setResult(JsonUtils.zipString(optimizeInfo));
// orderPrepackagedMapper.updateById(orderPackOptimizeDO);
// }
// 日期格式转换
public static String convertTime(String input) {
@@ -1027,9 +888,8 @@ public class PackServiceImpl implements PackService {
}
// 生成包裹编号
private String generatePackageNo(){
private String generatePackageNo() {
long packNo = idWorker.nextId();
long obtainingTime = SnowflakeIdWorker3rd.obtainingTime();
@@ -1039,9 +899,8 @@ public class PackServiceImpl implements PackService {
}
// 类型转换
private OrderPackRespVO typeConversion(OrderPackageDO orderPackageDO){
private OrderPackRespVO typeConversion(OrderPackageDO orderPackageDO) {
return OrderPackRespVO.builder()
.id(orderPackageDO.getId())
.orderId(orderPackageDO.getOrderId())
@@ -1,32 +1,31 @@
package com.cf.imes.module.manage.service.plate;
import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.organ.core.aop.OrganIgnore;
import com.cf.imes.framework.organ.core.context.OrganContextHolder;
import com.cf.imes.module.manage.controller.admin.plate.vo.plate.PlateImportExcelVO;
import com.cf.imes.module.manage.controller.admin.plate.vo.plate.PlateImportRespVO;
import com.cf.imes.module.manage.controller.admin.plate.vo.plate.PlatePageReqVO;
import com.cf.imes.module.manage.controller.admin.plate.vo.plate.PlateSaveReqVO;
import com.cf.imes.module.manage.dal.dataobject.plate.PlateDO;
import com.cf.imes.module.manage.dal.mysql.plate.PlateMapper;
import com.cf.imes.module.system.api.organ.OrganApi;
import com.cf.imes.module.system.api.permission.PermissionApi;
import com.cf.imes.module.system.enums.ErrorCodeConstants;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import com.cf.imes.module.manage.dal.dataobject.plate.PlateDO;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.module.manage.dal.mysql.plate.PlateMapper;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
import static com.cf.imes.module.system.enums.ErrorCodeConstants.PLATE_NOT_EXISTS;
import static com.cf.imes.module.system.enums.ErrorCodeConstants.REMAIN_PLATE_NOT_EXISTS;
/**
* 板材信息表 plate_{N} Service 实现类
@@ -90,7 +89,7 @@ public class PlateServiceImpl implements PlateService {
private void validatePlateExists(Long id, Long organId) {
if (plateMapper.selectOneById(id, organId) == null) {
throw exception(PLATE_NOT_EXISTS);
throw exception(REMAIN_PLATE_NOT_EXISTS);
}
}

Some files were not shown because too many files have changed in this diff Show More