mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
Merge branch 'main' of ssh://192.168.1.205:9922/cf_devdept2/cf_imes_server
This commit is contained in:
+29
@@ -0,0 +1,29 @@
|
||||
package com.cf.imes.framework.common.enums;
|
||||
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum OrderPlateTypeEnum {
|
||||
|
||||
|
||||
LAYERBOARD(0, "层板"),
|
||||
RISER(1, "立板"),
|
||||
BACKBOARD(2, "背板"),
|
||||
SELFINCREASINGBOARD(3, "自增板");
|
||||
|
||||
private final Integer type;
|
||||
private String description;
|
||||
|
||||
public boolean equals(Integer status) {
|
||||
return this.type .equals(status) ;
|
||||
}
|
||||
|
||||
public boolean equals(OrderPlateTypeEnum enableStatusEnum) {
|
||||
return enableStatusEnum != null && enableStatusEnum.type .equals(this.getType()) ;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+5
-4
@@ -9,10 +9,11 @@ import lombok.Getter;
|
||||
public enum PlanStatusEnum {
|
||||
|
||||
|
||||
NEWORDER(0,"新单"),
|
||||
BOARDHASBEENAPPLIEDFOR(1,"板材已申请"),
|
||||
DURINGCUTTING(2,"开料中"),
|
||||
OPENEDMATERIAL(3,"已开料");
|
||||
NOCUTTING(0, "未开料"),
|
||||
|
||||
OPENING(1, "开料中"),
|
||||
|
||||
OPENED(2, "已开料");
|
||||
|
||||
private Integer status;
|
||||
private String scheduling;
|
||||
|
||||
+2
@@ -33,6 +33,8 @@ public interface GlobalErrorCodeConstants {
|
||||
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 REPEATED_REQUESTS = new ErrorCode(900, "重复请求,请稍后重试"); // 重复请求
|
||||
|
||||
+99
@@ -0,0 +1,99 @@
|
||||
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 java.security.NoSuchAlgorithmException;
|
||||
import java.security.SecureRandom;
|
||||
import java.util.Base64;
|
||||
|
||||
/**
|
||||
* AES对称加密工具
|
||||
*
|
||||
* @author Gqr
|
||||
* @since 2024/8/23 16:38
|
||||
*/
|
||||
@Slf4j
|
||||
public class AesUtils {
|
||||
|
||||
private static final String AES_ALG = "AES";
|
||||
|
||||
private static final String AES_CBC_PCK_ALG = "AES/CBC/PKCS5Padding";
|
||||
|
||||
|
||||
/**
|
||||
* 解密
|
||||
*
|
||||
* @param content
|
||||
* @param aesKey
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public static String decrypt(String content, 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);
|
||||
} catch (Exception e) {
|
||||
log.error("[AesUtils][decrypt]解密失败:{}", e.getMessage(), e);
|
||||
// nacos热发布配置,空字符串会导致nacos轮训刷新配置
|
||||
return "default";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成key
|
||||
*
|
||||
* @param bytes
|
||||
* @return
|
||||
* @throws NoSuchAlgorithmException
|
||||
*/
|
||||
private static SecretKey generateKey(byte[] bytes) throws NoSuchAlgorithmException {
|
||||
// 生成随机数
|
||||
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
|
||||
// 设置随机数种子
|
||||
random.setSeed(bytes);
|
||||
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
+5
-2
@@ -2,7 +2,9 @@ package com.cf.imes.framework.sms.config;
|
||||
|
||||
import com.cf.imes.framework.sms.core.client.SmsClientFactory;
|
||||
import com.cf.imes.framework.sms.core.client.impl.SmsClientFactoryImpl;
|
||||
import com.cf.imes.framework.sms.core.property.SmsProperties;
|
||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
|
||||
/**
|
||||
@@ -11,11 +13,12 @@ import org.springframework.context.annotation.Bean;
|
||||
* @author 晨丰科技
|
||||
*/
|
||||
@AutoConfiguration
|
||||
@EnableConfigurationProperties(SmsProperties.class)
|
||||
public class ChenfengSmsAutoConfiguration {
|
||||
|
||||
@Bean
|
||||
public SmsClientFactory smsClientFactory() {
|
||||
return new SmsClientFactoryImpl();
|
||||
public SmsClientFactory smsClientFactory(SmsProperties smsProperties) {
|
||||
return new SmsClientFactoryImpl(smsProperties);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
-8
@@ -14,14 +14,6 @@ import java.util.List;
|
||||
* @since 2021/1/25 14:14
|
||||
*/
|
||||
public interface SmsClient {
|
||||
|
||||
/**
|
||||
* 获得渠道编号
|
||||
*
|
||||
* @return 渠道编号
|
||||
*/
|
||||
Long getId();
|
||||
|
||||
/**
|
||||
* 发送消息
|
||||
*
|
||||
|
||||
+5
-13
@@ -1,6 +1,6 @@
|
||||
package com.cf.imes.framework.sms.core.client;
|
||||
|
||||
import com.cf.imes.framework.sms.core.property.SmsChannelProperties;
|
||||
import com.cf.imes.framework.sms.core.property.SmsProperties;
|
||||
|
||||
/**
|
||||
* 短信客户端的工厂接口
|
||||
@@ -9,15 +9,6 @@ import com.cf.imes.framework.sms.core.property.SmsChannelProperties;
|
||||
* @since 2021/1/28 14:01
|
||||
*/
|
||||
public interface SmsClientFactory {
|
||||
|
||||
/**
|
||||
* 获得短信 Client
|
||||
*
|
||||
* @param channelId 渠道编号
|
||||
* @return 短信 Client
|
||||
*/
|
||||
SmsClient getSmsClient(Long channelId);
|
||||
|
||||
/**
|
||||
* 获得短信 Client
|
||||
*
|
||||
@@ -27,10 +18,11 @@ public interface SmsClientFactory {
|
||||
SmsClient getSmsClient(String channelCode);
|
||||
|
||||
/**
|
||||
* 创建短信 Client
|
||||
* 获得短信 Client
|
||||
*
|
||||
* @param properties 配置对象
|
||||
* @param smsProperties 短信配置
|
||||
* @return 短信 Client
|
||||
*/
|
||||
void createOrUpdateSmsClient(SmsChannelProperties properties);
|
||||
SmsClient getSmsClient(SmsProperties smsProperties);
|
||||
|
||||
}
|
||||
|
||||
+9
@@ -40,4 +40,13 @@ public class SmsSendRespDTO {
|
||||
*/
|
||||
private String apiMsg;
|
||||
|
||||
/**
|
||||
* 短信发送的目标手机号
|
||||
*/
|
||||
private String mobile;
|
||||
|
||||
/**
|
||||
* 渠道编码
|
||||
*/
|
||||
private String channelCode;
|
||||
}
|
||||
|
||||
+12
-9
@@ -1,7 +1,7 @@
|
||||
package com.cf.imes.framework.sms.core.client.impl;
|
||||
|
||||
import com.cf.imes.framework.sms.core.client.SmsClient;
|
||||
import com.cf.imes.framework.sms.core.property.SmsChannelProperties;
|
||||
import com.cf.imes.framework.sms.core.property.SmsProperties;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
@@ -16,9 +16,9 @@ public abstract class AbstractSmsClient implements SmsClient {
|
||||
/**
|
||||
* 短信渠道配置
|
||||
*/
|
||||
protected volatile SmsChannelProperties properties;
|
||||
protected volatile SmsProperties properties;
|
||||
|
||||
public AbstractSmsClient(SmsChannelProperties properties) {
|
||||
public AbstractSmsClient(SmsProperties properties) {
|
||||
this.properties = properties;
|
||||
}
|
||||
|
||||
@@ -35,7 +35,15 @@ public abstract class AbstractSmsClient implements SmsClient {
|
||||
*/
|
||||
protected abstract void doInit();
|
||||
|
||||
public final void refresh(SmsChannelProperties properties) {
|
||||
/**
|
||||
* 配置是否发生改变
|
||||
*
|
||||
* @param properties
|
||||
* @return
|
||||
*/
|
||||
protected abstract boolean propChanged(SmsProperties properties);
|
||||
|
||||
public final void refresh(SmsProperties properties) {
|
||||
// 判断是否更新
|
||||
if (properties.equals(this.properties)) {
|
||||
return;
|
||||
@@ -46,9 +54,4 @@ public abstract class AbstractSmsClient implements SmsClient {
|
||||
this.init();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long getId() {
|
||||
return properties.getId();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+28
-39
@@ -1,5 +1,6 @@
|
||||
package com.cf.imes.framework.sms.core.client.impl;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.cf.imes.framework.sms.core.client.SmsClient;
|
||||
import com.cf.imes.framework.sms.core.client.SmsClientFactory;
|
||||
import com.cf.imes.framework.sms.core.client.impl.aliyun.AliyunSmsClient;
|
||||
@@ -7,11 +8,12 @@ import com.cf.imes.framework.sms.core.client.impl.debug.DebugDingTalkSmsClient;
|
||||
import com.cf.imes.framework.sms.core.client.impl.tencent.TencentSmsClient;
|
||||
import com.cf.imes.framework.sms.core.enums.SmsChannelEnum;
|
||||
import com.cf.imes.framework.sms.core.property.SmsChannelProperties;
|
||||
import com.cf.imes.framework.sms.core.property.SmsProperties;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
|
||||
@@ -22,14 +24,9 @@ import java.util.concurrent.ConcurrentMap;
|
||||
*/
|
||||
@Validated
|
||||
@Slf4j
|
||||
@Service
|
||||
public class SmsClientFactoryImpl implements SmsClientFactory {
|
||||
|
||||
/**
|
||||
* 短信客户端 Map
|
||||
* key:渠道编号,使用 {@link SmsChannelProperties#getId()}
|
||||
*/
|
||||
private final ConcurrentMap<Long, AbstractSmsClient> channelIdClients = new ConcurrentHashMap<>();
|
||||
|
||||
/**
|
||||
* 短信客户端 Map
|
||||
* key:渠道编码,使用 {@link SmsChannelProperties#getCode()} ()}
|
||||
@@ -39,21 +36,24 @@ public class SmsClientFactoryImpl implements SmsClientFactory {
|
||||
*/
|
||||
private final ConcurrentMap<String, AbstractSmsClient> channelCodeClients = new ConcurrentHashMap<>();
|
||||
|
||||
public SmsClientFactoryImpl() {
|
||||
// 初始化 channelCodeClients 集合
|
||||
Arrays.stream(SmsChannelEnum.values()).forEach(channel -> {
|
||||
// 创建一个空的 SmsChannelProperties 对象
|
||||
SmsChannelProperties properties = new SmsChannelProperties().setCode(channel.getCode())
|
||||
.setApiKey("default default").setApiSecret("default");
|
||||
// 创建 Sms 客户端
|
||||
AbstractSmsClient smsClient = createSmsClient(properties);
|
||||
channelCodeClients.put(channel.getCode(), smsClient);
|
||||
});
|
||||
public SmsClientFactoryImpl(SmsProperties smsProperties) {
|
||||
// 从配置初始化对应的client客户端
|
||||
AbstractSmsClient client = createSmsClient(smsProperties);
|
||||
client.init();
|
||||
channelCodeClients.put(smsProperties.getChannel(), client);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SmsClient getSmsClient(Long channelId) {
|
||||
return channelIdClients.get(channelId);
|
||||
public SmsClient getSmsClient(SmsProperties smsProperties) {
|
||||
String channel = smsProperties.getChannel();
|
||||
AbstractSmsClient client = channelCodeClients.get(channel);
|
||||
// 1、新的短信类型;2、配置改变
|
||||
if (ObjectUtil.isNull(client) || client.propChanged(smsProperties)) {
|
||||
client = this.createSmsClient(smsProperties);
|
||||
client.init();
|
||||
channelCodeClients.put(channel, client);
|
||||
}
|
||||
return client;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -61,30 +61,19 @@ public class SmsClientFactoryImpl implements SmsClientFactory {
|
||||
return channelCodeClients.get(channelCode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createOrUpdateSmsClient(SmsChannelProperties properties) {
|
||||
AbstractSmsClient client = channelIdClients.get(properties.getId());
|
||||
if (client == null) {
|
||||
client = this.createSmsClient(properties);
|
||||
client.init();
|
||||
channelIdClients.put(client.getId(), client);
|
||||
} else {
|
||||
client.refresh(properties);
|
||||
}
|
||||
}
|
||||
|
||||
private AbstractSmsClient createSmsClient(SmsChannelProperties properties) {
|
||||
SmsChannelEnum channelEnum = SmsChannelEnum.getByCode(properties.getCode());
|
||||
Assert.notNull(channelEnum, String.format("渠道类型(%s) 为空", channelEnum));
|
||||
private AbstractSmsClient createSmsClient(SmsProperties smsProperties) {
|
||||
String channel = smsProperties.getChannel();
|
||||
SmsChannelEnum channelEnum = SmsChannelEnum.getByCode(channel);
|
||||
Assert.notNull(channelEnum, String.format("渠道类型(%s) 为空", channel));
|
||||
// 创建客户端
|
||||
switch (channelEnum) {
|
||||
case ALIYUN: return new AliyunSmsClient(properties);
|
||||
case DEBUG_DING_TALK: return new DebugDingTalkSmsClient(properties);
|
||||
case TENCENT: return new TencentSmsClient(properties);
|
||||
case ALIYUN: return new AliyunSmsClient(smsProperties);
|
||||
case DEBUG_DING_TALK: return new DebugDingTalkSmsClient(smsProperties);
|
||||
case TENCENT: return new TencentSmsClient(smsProperties);
|
||||
}
|
||||
// 创建失败,错误日志 + 抛出异常
|
||||
log.error("[createSmsClient][配置({}) 找不到合适的客户端实现]", properties);
|
||||
throw new IllegalArgumentException(String.format("配置(%s) 找不到合适的客户端实现", properties));
|
||||
log.error("[createSmsClient][配置({}) 找不到合适的客户端实现]", smsProperties);
|
||||
throw new IllegalArgumentException(String.format("配置(%s) 找不到合适的客户端实现", smsProperties));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+22
-3
@@ -1,6 +1,8 @@
|
||||
package com.cf.imes.framework.sms.core.client.impl.aliyun;
|
||||
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.aliyuncs.auth.Credential;
|
||||
import com.cf.imes.framework.common.core.KeyValue;
|
||||
import com.cf.imes.framework.common.util.collection.MapUtils;
|
||||
import com.cf.imes.framework.common.util.json.JsonUtils;
|
||||
@@ -9,7 +11,6 @@ import com.cf.imes.framework.sms.core.client.dto.SmsSendRespDTO;
|
||||
import com.cf.imes.framework.sms.core.client.dto.SmsTemplateRespDTO;
|
||||
import com.cf.imes.framework.sms.core.client.impl.AbstractSmsClient;
|
||||
import com.cf.imes.framework.sms.core.enums.SmsTemplateAuditStatusEnum;
|
||||
import com.cf.imes.framework.sms.core.property.SmsChannelProperties;
|
||||
import com.aliyuncs.DefaultAcsClient;
|
||||
import com.aliyuncs.IAcsClient;
|
||||
import com.aliyuncs.dysmsapi.model.v20170525.QuerySmsTemplateRequest;
|
||||
@@ -18,6 +19,7 @@ import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
|
||||
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
|
||||
import com.aliyuncs.profile.DefaultProfile;
|
||||
import com.aliyuncs.profile.IClientProfile;
|
||||
import com.cf.imes.framework.sms.core.property.SmsProperties;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
@@ -56,7 +58,7 @@ public class AliyunSmsClient extends AbstractSmsClient {
|
||||
*/
|
||||
private volatile IAcsClient client;
|
||||
|
||||
public AliyunSmsClient(SmsChannelProperties properties) {
|
||||
public AliyunSmsClient(SmsProperties properties) {
|
||||
super(properties);
|
||||
Assert.notEmpty(properties.getApiKey(), "apiKey 不能为空");
|
||||
Assert.notEmpty(properties.getApiSecret(), "apiSecret 不能为空");
|
||||
@@ -68,6 +70,23 @@ public class AliyunSmsClient extends AbstractSmsClient {
|
||||
client = new DefaultAcsClient(profile);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean propChanged(SmsProperties properties) {
|
||||
DefaultAcsClient defaultAcsClient = (DefaultAcsClient) client;
|
||||
if (ObjectUtil.isNotNull(defaultAcsClient)) {
|
||||
Credential credential = defaultAcsClient.getProfile().getCredential();
|
||||
String accessKeyId = credential.getAccessKeyId();
|
||||
if (ObjectUtil.notEqual(properties.getApiKey(), accessKeyId)) {
|
||||
return true;
|
||||
}
|
||||
String accessSecret = credential.getAccessSecret();
|
||||
if (ObjectUtil.notEqual(properties.getApiSecret(), accessSecret)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SmsSendRespDTO sendSms(Long sendLogId, String mobile, String apiTemplateId,
|
||||
List<KeyValue<String, Object>> templateParams) throws Throwable {
|
||||
@@ -81,7 +100,7 @@ public class AliyunSmsClient extends AbstractSmsClient {
|
||||
// 执行请求
|
||||
SendSmsResponse response = client.getAcsResponse(request);
|
||||
return new SmsSendRespDTO().setSuccess(Objects.equals(response.getCode(), API_CODE_SUCCESS)).setSerialNo(response.getBizId())
|
||||
.setApiRequestId(response.getRequestId()).setApiCode(response.getCode()).setApiMsg(response.getMessage());
|
||||
.setApiRequestId(response.getRequestId()).setApiCode(response.getCode()).setApiMsg(response.getMessage()).setChannelCode(properties.getChannel());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+10
-4
@@ -3,6 +3,7 @@ package com.cf.imes.framework.sms.core.client.impl.debug;
|
||||
import cn.hutool.core.codec.Base64;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.core.text.CharSequenceUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.crypto.digest.DigestUtil;
|
||||
import cn.hutool.crypto.digest.HmacAlgorithm;
|
||||
@@ -15,7 +16,7 @@ import com.cf.imes.framework.sms.core.client.dto.SmsSendRespDTO;
|
||||
import com.cf.imes.framework.sms.core.client.dto.SmsTemplateRespDTO;
|
||||
import com.cf.imes.framework.sms.core.client.impl.AbstractSmsClient;
|
||||
import com.cf.imes.framework.sms.core.enums.SmsTemplateAuditStatusEnum;
|
||||
import com.cf.imes.framework.sms.core.property.SmsChannelProperties;
|
||||
import com.cf.imes.framework.sms.core.property.SmsProperties;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@@ -31,7 +32,7 @@ import java.util.Objects;
|
||||
*/
|
||||
public class DebugDingTalkSmsClient extends AbstractSmsClient {
|
||||
|
||||
public DebugDingTalkSmsClient(SmsChannelProperties properties) {
|
||||
public DebugDingTalkSmsClient(SmsProperties properties) {
|
||||
super(properties);
|
||||
Assert.notEmpty(properties.getApiKey(), "apiKey 不能为空");
|
||||
Assert.notEmpty(properties.getApiSecret(), "apiSecret 不能为空");
|
||||
@@ -41,6 +42,11 @@ public class DebugDingTalkSmsClient extends AbstractSmsClient {
|
||||
protected void doInit() {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean propChanged(SmsProperties properties) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SmsSendRespDTO sendSms(Long sendLogId, String mobile,
|
||||
String apiTemplateId, List<KeyValue<String, Object>> templateParams) throws Throwable {
|
||||
@@ -57,7 +63,7 @@ public class DebugDingTalkSmsClient extends AbstractSmsClient {
|
||||
Map<?, ?> responseObj = JsonUtils.parseObject(responseText, Map.class);
|
||||
String errorCode = MapUtil.getStr(responseObj, "errcode");
|
||||
return new SmsSendRespDTO().setSuccess(Objects.equals(errorCode, "0")).setSerialNo(StrUtil.uuid())
|
||||
.setApiCode(errorCode).setApiMsg(MapUtil.getStr(responseObj, "errorMsg"));
|
||||
.setApiCode(errorCode).setApiMsg(MapUtil.getStr(responseObj, "errorMsg")).setMobile(mobile).setChannelCode(properties.getChannel());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -75,7 +81,7 @@ public class DebugDingTalkSmsClient extends AbstractSmsClient {
|
||||
// 生成 sign
|
||||
String secret = properties.getApiSecret();
|
||||
String stringToSign = timestamp + "\n" + secret;
|
||||
byte[] signData = DigestUtil.hmac(HmacAlgorithm.HmacSHA256, StrUtil.bytes(secret)).digest(stringToSign);
|
||||
byte[] signData = DigestUtil.hmac(HmacAlgorithm.HmacSHA256, CharSequenceUtil.bytes(secret)).digest(stringToSign);
|
||||
String sign = Base64.encode(signData);
|
||||
// 构建最终 URL
|
||||
return String.format("https://oapi.dingtalk.com/%s?access_token=%s×tamp=%d&sign=%s",
|
||||
|
||||
+9
-4
@@ -10,7 +10,7 @@ import com.cf.imes.framework.sms.core.client.dto.SmsSendRespDTO;
|
||||
import com.cf.imes.framework.sms.core.client.dto.SmsTemplateRespDTO;
|
||||
import com.cf.imes.framework.sms.core.client.impl.AbstractSmsClient;
|
||||
import com.cf.imes.framework.sms.core.enums.SmsTemplateAuditStatusEnum;
|
||||
import com.cf.imes.framework.sms.core.property.SmsChannelProperties;
|
||||
import com.cf.imes.framework.sms.core.property.SmsProperties;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
@@ -56,7 +56,7 @@ public class TencentSmsClient extends AbstractSmsClient {
|
||||
|
||||
private SmsClient client;
|
||||
|
||||
public TencentSmsClient(SmsChannelProperties properties) {
|
||||
public TencentSmsClient(SmsProperties properties) {
|
||||
super(properties);
|
||||
Assert.notEmpty(properties.getApiSecret(), "apiSecret 不能为空");
|
||||
validateSdkAppId(properties);
|
||||
@@ -69,6 +69,11 @@ public class TencentSmsClient extends AbstractSmsClient {
|
||||
client = new SmsClient(credential, ENDPOINT);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean propChanged(SmsProperties properties) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 参数校验腾讯云的 SDK AppId
|
||||
*
|
||||
@@ -78,7 +83,7 @@ public class TencentSmsClient extends AbstractSmsClient {
|
||||
*
|
||||
* @param properties 配置
|
||||
*/
|
||||
private static void validateSdkAppId(SmsChannelProperties properties) {
|
||||
private static void validateSdkAppId(SmsProperties properties) {
|
||||
String combineKey = properties.getApiKey();
|
||||
Assert.notEmpty(combineKey, "apiKey 不能为空");
|
||||
String[] keys = combineKey.trim().split(" ");
|
||||
@@ -108,7 +113,7 @@ public class TencentSmsClient extends AbstractSmsClient {
|
||||
SendSmsResponse response = client.SendSms(request);
|
||||
SendStatus status = response.getSendStatusSet()[0];
|
||||
return new SmsSendRespDTO().setSuccess(Objects.equals(status.getCode(), API_CODE_SUCCESS)).setSerialNo(status.getSerialNo())
|
||||
.setApiRequestId(response.getRequestId()).setApiCode(status.getCode()).setApiMsg(status.getMessage());
|
||||
.setApiRequestId(response.getRequestId()).setApiCode(status.getCode()).setApiMsg(status.getMessage()).setChannelCode(properties.getChannel());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+76
@@ -0,0 +1,76 @@
|
||||
package com.cf.imes.framework.sms.core.property;
|
||||
|
||||
import com.cf.imes.framework.common.util.encrypt.AesUtils;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
|
||||
/**
|
||||
* @author Gqr
|
||||
* @since 2024/8/23 10:51
|
||||
*/
|
||||
@ConfigurationProperties(prefix = "chenfeng.sms")
|
||||
@Validated
|
||||
public class SmsProperties {
|
||||
|
||||
@Value("${chenfeng.encrypt.publicKey:}")
|
||||
private String publicKey;
|
||||
|
||||
/**
|
||||
* 短信渠道
|
||||
*/
|
||||
@NotEmpty(message = "短信渠道不能为空")
|
||||
private String channel;
|
||||
/**
|
||||
* 短信签名
|
||||
*/
|
||||
private String signature;
|
||||
/**
|
||||
* 短信 API 的账号
|
||||
*/
|
||||
@NotEmpty(message = "短信apiKey不能为空")
|
||||
private String apiKey;
|
||||
/**
|
||||
* 短信 API 的密钥
|
||||
*/
|
||||
@NotEmpty(message = "短信apiSecret不能为空")
|
||||
private String apiSecret;
|
||||
|
||||
public String getChannel() {
|
||||
return channel;
|
||||
}
|
||||
|
||||
public void setChannel(String channel) {
|
||||
this.channel = channel;
|
||||
}
|
||||
|
||||
public String getSignature() {
|
||||
return signature;
|
||||
}
|
||||
|
||||
public SmsProperties setSignature(String signature) {
|
||||
this.signature = AesUtils.decrypt(signature, publicKey);
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getApiKey() {
|
||||
return apiKey;
|
||||
}
|
||||
|
||||
|
||||
public SmsProperties setApiKey(String apiKey) {
|
||||
this.apiKey = AesUtils.decrypt(apiKey, publicKey);
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getApiSecret() {
|
||||
return apiSecret;
|
||||
}
|
||||
|
||||
public SmsProperties setApiSecret(String apiSecret) {
|
||||
this.apiSecret = AesUtils.decrypt(apiSecret, publicKey);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -7,7 +7,7 @@ import com.cf.imes.framework.sms.core.client.dto.SmsReceiveRespDTO;
|
||||
import com.cf.imes.framework.sms.core.client.dto.SmsSendRespDTO;
|
||||
import com.cf.imes.framework.sms.core.client.dto.SmsTemplateRespDTO;
|
||||
import com.cf.imes.framework.sms.core.enums.SmsTemplateAuditStatusEnum;
|
||||
import com.cf.imes.framework.sms.core.property.SmsChannelProperties;
|
||||
import com.cf.imes.framework.sms.core.property.SmsProperties;
|
||||
import com.cf.imes.framework.test.core.ut.BaseMockitoUnitTest;
|
||||
import com.aliyuncs.IAcsClient;
|
||||
import com.aliyuncs.dysmsapi.model.v20170525.QuerySmsTemplateRequest;
|
||||
@@ -37,7 +37,7 @@ import static org.mockito.Mockito.when;
|
||||
*/
|
||||
public class AliyunSmsClientTest extends BaseMockitoUnitTest {
|
||||
|
||||
private final SmsChannelProperties properties = new SmsChannelProperties()
|
||||
private final SmsProperties properties = new SmsProperties()
|
||||
.setApiKey(randomString()) // 随机一个 apiKey,避免构建报错
|
||||
.setApiSecret(randomString()) // 随机一个 apiSecret,避免构建报错
|
||||
.setSignature("晨丰科技");
|
||||
|
||||
+3
-3
@@ -9,7 +9,7 @@ import com.cf.imes.framework.sms.core.client.dto.SmsReceiveRespDTO;
|
||||
import com.cf.imes.framework.sms.core.client.dto.SmsSendRespDTO;
|
||||
import com.cf.imes.framework.sms.core.client.dto.SmsTemplateRespDTO;
|
||||
import com.cf.imes.framework.sms.core.enums.SmsTemplateAuditStatusEnum;
|
||||
import com.cf.imes.framework.sms.core.property.SmsChannelProperties;
|
||||
import com.cf.imes.framework.sms.core.property.SmsProperties;
|
||||
import com.cf.imes.framework.test.core.ut.BaseMockitoUnitTest;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.tencentcloudapi.sms.v20210111.SmsClient;
|
||||
@@ -39,7 +39,7 @@ import static org.mockito.Mockito.when;
|
||||
*/
|
||||
public class TencentSmsClientTest extends BaseMockitoUnitTest {
|
||||
|
||||
private final SmsChannelProperties properties = new SmsChannelProperties()
|
||||
private final SmsProperties properties = new SmsProperties()
|
||||
.setApiKey(randomString() + " " + randomString()) // 随机一个 apiKey,避免构建报错
|
||||
.setApiSecret(randomString()) // 随机一个 apiSecret,避免构建报错
|
||||
.setSignature("晨丰科技");
|
||||
@@ -64,7 +64,7 @@ public class TencentSmsClientTest extends BaseMockitoUnitTest {
|
||||
@Test
|
||||
public void testRefresh() {
|
||||
// 准备参数
|
||||
SmsChannelProperties p = new SmsChannelProperties()
|
||||
SmsProperties p = new SmsProperties()
|
||||
.setApiKey(randomString() + " " + randomString()) // 随机一个 apiKey,避免构建报错
|
||||
.setApiSecret(randomString()) // 随机一个 apiSecret,避免构建报错
|
||||
.setSignature("晨丰科技");
|
||||
|
||||
+1
-4
@@ -1,7 +1,6 @@
|
||||
package com.cf.imes.framework.es.core.service;
|
||||
|
||||
import cn.hutool.core.lang.Snowflake;
|
||||
import cn.hutool.core.lang.UUID;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
@@ -17,9 +16,6 @@ import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.format.DateTimeFormatterBuilder;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -146,6 +142,7 @@ public class ESDocumentServiceImpl implements ESDocumentService {
|
||||
esDocument.setCreator(loginUser.getNickname());
|
||||
esDocument.setCreateTime(simpleDateFormat.format(date));
|
||||
esDocument.setUpdater(loginUser.getNickname());
|
||||
esDocument.setOrganId(loginUser.getOrganId());
|
||||
|
||||
esDocument.setUpdateTime(simpleDateFormat.format(date));
|
||||
br.operations(op -> op.index(idx -> idx
|
||||
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
package com.cf.imes.framework.datasource.config;
|
||||
|
||||
import com.baomidou.dynamic.datasource.event.DataSourceInitEvent;
|
||||
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration;
|
||||
import com.cf.imes.framework.mybatis.core.event.ChenfengDataSourceEncryptInitEvent;
|
||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
|
||||
|
||||
/**
|
||||
* @author Gqr
|
||||
* @since 2024/8/26 18:20
|
||||
*/
|
||||
@AutoConfiguration
|
||||
@AutoConfigureBefore(DynamicDataSourceAutoConfiguration.class)
|
||||
public class ChenfengDataSourceEncryptConfiguration {
|
||||
@Bean
|
||||
@ConditionalOnProperty(name = "chenfeng.encrypt.enable", havingValue = "true")
|
||||
public DataSourceInitEvent getDataSourceInitEvent() {
|
||||
return new ChenfengDataSourceEncryptInitEvent();
|
||||
}
|
||||
}
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
package com.cf.imes.framework.mybatis.core.event;
|
||||
|
||||
import com.baomidou.dynamic.datasource.creator.DataSourceProperty;
|
||||
import com.baomidou.dynamic.datasource.event.DataSourceInitEvent;
|
||||
import com.cf.imes.framework.common.util.encrypt.AesUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
/**
|
||||
* @author Gqr
|
||||
* @since 2024/8/27 9:09
|
||||
*/
|
||||
public class ChenfengDataSourceEncryptInitEvent implements DataSourceInitEvent {
|
||||
@Value("${chenfeng.encrypt.publicKey:}")
|
||||
private String publicKey;
|
||||
|
||||
/**
|
||||
* 数据源创建前
|
||||
*
|
||||
* @param dataSourceProperty 数据源基础信息
|
||||
*/
|
||||
@Override
|
||||
public void beforeCreate(DataSourceProperty dataSourceProperty) {
|
||||
if (StringUtils.isNotEmpty(publicKey)) {
|
||||
dataSourceProperty.setUsername(AesUtils.decrypt(dataSourceProperty.getUsername(), publicKey));
|
||||
dataSourceProperty.setPassword(AesUtils.decrypt(dataSourceProperty.getPassword(), publicKey));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据源创建后
|
||||
*
|
||||
* @param dataSource 连接池
|
||||
*/
|
||||
@Override
|
||||
public void afterCreate(DataSource dataSource) {
|
||||
|
||||
}
|
||||
}
|
||||
+7
-1
@@ -1,10 +1,10 @@
|
||||
package com.cf.imes.framework.mybatis.core.query;
|
||||
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import com.cf.imes.framework.mybatis.core.enums.SqlConstants;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
|
||||
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||
import com.cf.imes.framework.mybatis.core.enums.SqlConstants;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -145,6 +145,12 @@ public class QueryWrapperX<T> extends QueryWrapper<T> {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public QueryWrapperX<T> isNotNull(String column) {
|
||||
super.isNotNull(column);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置只返回最后一条
|
||||
*
|
||||
|
||||
+3
-2
@@ -20,10 +20,11 @@ public class CompressStringTypeHandler extends StringTypeHandler {
|
||||
@Override
|
||||
public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType)
|
||||
throws SQLException {
|
||||
String compressString = null;
|
||||
if (StringUtils.isNotEmpty(parameter)) {
|
||||
String compressString = JsonUtils.zipString(parameter);
|
||||
ps.setString(i, compressString);
|
||||
compressString = JsonUtils.zipString(parameter);
|
||||
}
|
||||
ps.setString(i, compressString);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+1
@@ -1,2 +1,3 @@
|
||||
com.cf.imes.framework.datasource.config.ChenfengDataSourceEncryptConfiguration
|
||||
com.cf.imes.framework.datasource.config.ChenfengDataSourceAutoConfiguration
|
||||
com.cf.imes.framework.mybatis.config.ChenfengMybatisAutoConfiguration
|
||||
|
||||
+77
@@ -0,0 +1,77 @@
|
||||
package com.cf.imes.framework.redis.config;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.cf.imes.framework.common.util.encrypt.AesUtils;
|
||||
import org.redisson.config.ClusterServersConfig;
|
||||
import org.redisson.config.Config;
|
||||
import org.redisson.config.MasterSlaveServersConfig;
|
||||
import org.redisson.config.ReplicatedServersConfig;
|
||||
import org.redisson.config.SentinelServersConfig;
|
||||
import org.redisson.config.SingleServerConfig;
|
||||
import org.redisson.spring.starter.RedissonAutoConfigurationCustomizer;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* @author Gqr
|
||||
* @since 2024/8/27 9:46
|
||||
*/
|
||||
@AutoConfiguration
|
||||
public class ChenfengRedisEncryptAutoConfiguration {
|
||||
|
||||
@Value("${chenfeng.encrypt.publicKey:}")
|
||||
private String publicKey;
|
||||
|
||||
@Bean
|
||||
@ConditionalOnProperty(name = "chenfeng.encrypt.enable", havingValue = "true")
|
||||
public RedissonAutoConfigurationCustomizer redissonAutoConfigurationCustomizer() {
|
||||
return configuration -> {
|
||||
Config redissonConfig = new Config();
|
||||
BeanUtil.copyProperties(configuration, redissonConfig);
|
||||
|
||||
String password;
|
||||
SingleServerConfig singleServerConfig = redissonConfig.useSingleServer();
|
||||
if (singleServerConfig != null) {
|
||||
|
||||
password = singleServerConfig.getPassword();
|
||||
singleServerConfig.setPassword(
|
||||
StringUtils.isEmpty(password) ? null : AesUtils.decrypt(password, publicKey));
|
||||
return;
|
||||
}
|
||||
|
||||
MasterSlaveServersConfig masterSlaveServersConfig = redissonConfig.useMasterSlaveServers();
|
||||
if (masterSlaveServersConfig != null) {
|
||||
password = masterSlaveServersConfig.getPassword();
|
||||
masterSlaveServersConfig.setPassword(
|
||||
StringUtils.isEmpty(password) ? null : AesUtils.decrypt(password, publicKey));
|
||||
return;
|
||||
}
|
||||
|
||||
SentinelServersConfig sentinelServersConfig = redissonConfig.useSentinelServers();
|
||||
if (sentinelServersConfig != null) {
|
||||
password = sentinelServersConfig.getPassword();
|
||||
sentinelServersConfig.setPassword(
|
||||
StringUtils.isEmpty(password) ? null : AesUtils.decrypt(password, publicKey));
|
||||
return;
|
||||
}
|
||||
|
||||
ClusterServersConfig clusterServersConfig = redissonConfig.useClusterServers();
|
||||
if (clusterServersConfig != null) {
|
||||
password = clusterServersConfig.getPassword();
|
||||
clusterServersConfig.setPassword(
|
||||
StringUtils.isEmpty(password) ? null : AesUtils.decrypt(password, publicKey));
|
||||
return;
|
||||
}
|
||||
|
||||
ReplicatedServersConfig replicatedServersConfig = redissonConfig.useReplicatedServers();
|
||||
if (replicatedServersConfig != null) {
|
||||
password = replicatedServersConfig.getPassword();
|
||||
replicatedServersConfig.setPassword(
|
||||
StringUtils.isEmpty(password) ? null : AesUtils.decrypt(password, publicKey));
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
+1
@@ -1,2 +1,3 @@
|
||||
com.cf.imes.framework.redis.config.ChenfengRedisAutoConfiguration
|
||||
com.cf.imes.framework.redis.config.ChenfengRedisEncryptAutoConfiguration
|
||||
com.cf.imes.framework.redis.config.ChenfengCacheAutoConfiguration
|
||||
|
||||
+3
-7
@@ -1,6 +1,5 @@
|
||||
package com.cf.imes.framework.security.core.util;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.cf.imes.framework.common.exception.ServiceException;
|
||||
import com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants;
|
||||
import com.cf.imes.framework.security.core.LoginUser;
|
||||
@@ -44,7 +43,7 @@ public class SecurityFrameworkUtils {
|
||||
String headerName, String parameterName) {
|
||||
// 1. 获得 Token。优先级:Header > Parameter
|
||||
String token = request.getHeader(headerName);
|
||||
if (StrUtil.isEmpty(token)) {
|
||||
if (StringUtils.isEmpty(token)) {
|
||||
token = request.getParameter(parameterName);
|
||||
}
|
||||
if (!StringUtils.hasText(token)) {
|
||||
@@ -63,7 +62,7 @@ public class SecurityFrameworkUtils {
|
||||
public static Authentication getAuthentication() {
|
||||
SecurityContext context = SecurityContextHolder.getContext();
|
||||
if (context == null) {
|
||||
return null;
|
||||
throw new ServiceException(GlobalErrorCodeConstants.UNAUTHORIZED);
|
||||
}
|
||||
return context.getAuthentication();
|
||||
}
|
||||
@@ -90,10 +89,7 @@ public class SecurityFrameworkUtils {
|
||||
@Nullable
|
||||
public static Long getLoginUserId() {
|
||||
LoginUser loginUser = getLoginUser();
|
||||
if (loginUser == null) {
|
||||
throw new ServiceException(GlobalErrorCodeConstants.UNAUTHORIZED);
|
||||
}
|
||||
return loginUser.getId();
|
||||
return loginUser != null ? loginUser.getId() : null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+81
@@ -0,0 +1,81 @@
|
||||
package com.cf.imes.module.executor.api.goods.dto;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class GoodsDTO {
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
// 组织 ID
|
||||
private Long organId;
|
||||
|
||||
/**
|
||||
* 生产单号
|
||||
*/
|
||||
private Long orderId;
|
||||
/**
|
||||
* 设计端商品ID
|
||||
*/
|
||||
private String rawGoodsId;
|
||||
/**
|
||||
* 商品 ID
|
||||
*/
|
||||
private String goodsId;
|
||||
/**
|
||||
* 商品名称
|
||||
*/
|
||||
private String goodsName;
|
||||
/**
|
||||
* 材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板
|
||||
*/
|
||||
private String material;
|
||||
/**
|
||||
* 纹路 0 正纹 1 可翻转 2 反纹
|
||||
*/
|
||||
private Boolean texture;
|
||||
/**
|
||||
* 颜色
|
||||
*/
|
||||
private String color;
|
||||
/**
|
||||
* 宽度
|
||||
*/
|
||||
private BigDecimal width;
|
||||
/**
|
||||
* 高度
|
||||
*/
|
||||
private BigDecimal height;
|
||||
/**
|
||||
* 厚度
|
||||
*/
|
||||
private BigDecimal thickness;
|
||||
/**
|
||||
* 价格
|
||||
*/
|
||||
private BigDecimal price;
|
||||
/**
|
||||
* 品牌
|
||||
*/
|
||||
private String brand;
|
||||
/**
|
||||
* 规格
|
||||
*/
|
||||
private String spec;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 是否删除
|
||||
*/
|
||||
private Boolean deleted;
|
||||
|
||||
|
||||
}
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
package com.cf.imes.module.executor.api.plan.dto;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
|
||||
|
||||
@Data
|
||||
public class PlanDTO {
|
||||
|
||||
|
||||
/**
|
||||
* ID
|
||||
*/
|
||||
|
||||
private Long id;
|
||||
// 组织 ID
|
||||
|
||||
private Long organId;
|
||||
|
||||
/**
|
||||
* 排序优先级
|
||||
*/
|
||||
private Long sort;
|
||||
/**
|
||||
* 排单类型:1 混单排单,2 生产单排单
|
||||
*/
|
||||
private Integer type;
|
||||
/**
|
||||
* 排单状态:0 新单,1 板材已申请,2 开料中,3 已开料
|
||||
*/
|
||||
private Integer status;
|
||||
|
||||
/**
|
||||
* 机台 ID
|
||||
*/
|
||||
private Long machineId;
|
||||
/**
|
||||
* 计划时间
|
||||
*/
|
||||
private LocalDateTime planTime;
|
||||
/**
|
||||
* 生产单号
|
||||
*/
|
||||
private String orderNos;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 生产操作人
|
||||
*/
|
||||
private String operator;
|
||||
/**
|
||||
* 生产时间
|
||||
*/
|
||||
private LocalDateTime produceTime;
|
||||
|
||||
}
|
||||
+3
-1
@@ -11,12 +11,14 @@ public interface ErrorCodeConstants {
|
||||
// ========== 生产单开料排单
|
||||
ErrorCode PLAN_NOT_EXISTS = new ErrorCode(1_001_107_000, "生产单开料排单不存在");
|
||||
|
||||
ErrorCode PLAN_NOT_ALLOW_DELETE = new ErrorCode(1_001_107_001, "当前排单已开料不予许删除");
|
||||
ErrorCode PLAN_NOT_ALLOW_DELETE = new ErrorCode(1_001_107_001, "排单号:{},已开料不予许删除");
|
||||
|
||||
ErrorCode PLAN_NOT_ALLOW_CANCEL = new ErrorCode(1_001_107_002, "排单 新单 不予许作废");
|
||||
|
||||
ErrorCode LIST_CHANGES_ARE_PROHIBITED = new ErrorCode(1_001_107_003, "当前排单有板材已开料,禁止更改");
|
||||
|
||||
ErrorCode PLAN_ERROR = new ErrorCode(1_001_107_004, "{} 排单数据不存在");
|
||||
|
||||
// ========== 生产单商品 TODO 补充编号 ==========
|
||||
ErrorCode GOODS_NOT_EXISTS = new ErrorCode(1_001_108_000, "生产单商品不存在");
|
||||
|
||||
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
package com.cf.imes.module.executor.api.plan.vo;
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class OrderGroupRespVO {
|
||||
|
||||
|
||||
@Schema(description = "加工组ID")
|
||||
private Long id;
|
||||
|
||||
|
||||
|
||||
@Schema(description = "生产单号")
|
||||
private Long orderId;
|
||||
|
||||
|
||||
|
||||
@Schema(description = "柜体ID")
|
||||
private Long bodyId;
|
||||
|
||||
|
||||
|
||||
@Schema(description = "加工组类型")
|
||||
private String groupTypeName;
|
||||
|
||||
|
||||
|
||||
@Schema(description = "模块名称")
|
||||
private String name;
|
||||
|
||||
|
||||
|
||||
@Schema(description = "加工组宽度")
|
||||
private Double width;
|
||||
|
||||
|
||||
|
||||
@Schema(description = "加工组高度")
|
||||
private Double height;
|
||||
|
||||
|
||||
|
||||
@Schema(description = "加工组深度")
|
||||
private Double depth;
|
||||
|
||||
|
||||
@Schema(description = "加工组总数")
|
||||
private Integer groupNum;
|
||||
|
||||
}
|
||||
+1
-1
@@ -90,7 +90,7 @@ public class OrderStatisticsController {
|
||||
@GetMapping("/bigPlateCount/group")
|
||||
@Operation(summary = "大板数量分组统计")
|
||||
public CommonResult<Map<String, Object>> getBigPlateCount(@Valid OrderStatisticsReqVO reqVO) {
|
||||
return success(null);
|
||||
return success(orderStatisticsService.getBigPlateCountGroup(reqVO));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+32
-7
@@ -1,15 +1,17 @@
|
||||
package com.cf.imes.module.executor.controller.admin.plan;
|
||||
|
||||
import com.cf.imes.framework.common.pojo.CommonResult;
|
||||
import com.cf.imes.framework.operatelog.core.annotations.OperateLog;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderSource;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.CuttingStatusRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.SavePlanPlateResultReqVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
|
||||
import com.cf.imes.module.executor.controller.admin.plate.vo.PlateSaveReqVO;
|
||||
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.PlateOptimize;
|
||||
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
|
||||
import com.cf.imes.module.executor.service.optimizeplan.OptimizePlanService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Parameters;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
@@ -53,10 +55,15 @@ public class OptimizePlanController {
|
||||
|
||||
|
||||
@GetMapping("commit")
|
||||
@Operation(summary = "开始开料")
|
||||
@Operation(summary = "开料")
|
||||
@Parameters({
|
||||
@Parameter(name = "planId", description = "排单ID", required = true, example = "1024"),
|
||||
@Parameter(name = "goodsNo", description = "开料的大板编号", required = true, example = "1")
|
||||
})
|
||||
@PreAuthorize("@ss.hasPermission('placeorder:optimize')")
|
||||
public CommonResult<Boolean> commit(@RequestParam @Valid @NotNull(message = "排单id不能空") Long planId) {
|
||||
return CommonResult.success(optimizePlanService.commit(planId));
|
||||
public CommonResult<Boolean> commit(@RequestParam("planId") Long planId,@RequestParam("goodsNo") List<Long> goodsNo) {
|
||||
|
||||
return CommonResult.success(optimizePlanService.commit(planId,goodsNo));
|
||||
}
|
||||
|
||||
@GetMapping("/endCutting")
|
||||
@@ -67,14 +74,24 @@ public class OptimizePlanController {
|
||||
}
|
||||
|
||||
|
||||
@PutMapping("/updateCuttingStatus")
|
||||
@Operation(summary = "修改开料状态")
|
||||
@PreAuthorize("@ss.hasPermission('placeorder:optimize:updateCuttingStatus')")
|
||||
public CommonResult<Boolean> updateCuttingStatus(@RequestBody CuttingStatusRespVO respVO) {
|
||||
return success(optimizePlanService.updateCuttingStatus(respVO));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@GetMapping("/getOrderSource")
|
||||
@Operation(summary = "获取生产单源数据")
|
||||
@PreAuthorize("@ss.hasPermission('placeorder:optimize')")
|
||||
public CommonResult<OrderSource> getOrderSource(@Schema(description = "生产单id") @RequestParam(required = false) Long orderId,
|
||||
@Schema(description = "大板IDS-大板分类的IDS") @RequestParam(required = false) List<Long> ids,
|
||||
@Schema(description = "排单id") @RequestParam(required = false) Long planId,
|
||||
@Schema(description = "机台Id") @RequestParam("machineId") Long machineId
|
||||
) {
|
||||
return CommonResult.success(optimizePlanService.getOrderSource(orderId, planId, machineId));
|
||||
return CommonResult.success(optimizePlanService.getOrderSource(orderId, planId, machineId,ids));
|
||||
|
||||
}
|
||||
|
||||
@@ -111,5 +128,13 @@ 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));
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
+56
-31
@@ -1,30 +1,36 @@
|
||||
package com.cf.imes.module.executor.controller.admin.plan;
|
||||
|
||||
import com.cf.imes.framework.es.core.valid.CreateGroup;
|
||||
import com.cf.imes.framework.es.core.valid.UpdateGroup;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderRespVO;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import javax.validation.*;
|
||||
import javax.servlet.http.*;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import java.util.*;
|
||||
import java.io.IOException;
|
||||
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.pojo.CommonResult;
|
||||
import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||
import static com.cf.imes.framework.common.pojo.CommonResult.success;
|
||||
import com.cf.imes.framework.es.core.valid.CreateGroup;
|
||||
import com.cf.imes.framework.es.core.valid.UpdateGroup;
|
||||
import com.cf.imes.framework.excel.core.util.ExcelUtils;
|
||||
import com.cf.imes.framework.operatelog.core.annotations.OperateLog;
|
||||
import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.*;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderRoomBodyList;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.NotPlanGoodsReqVO;
|
||||
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.service.plan.PlanService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static com.cf.imes.framework.common.pojo.CommonResult.success;
|
||||
import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
|
||||
|
||||
@Tag(name = "管理后台 - 排单")
|
||||
@RestController
|
||||
@@ -38,7 +44,7 @@ public class PlanController {
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建排单")
|
||||
@PreAuthorize("@ss.hasPermission('placeorder:create')")
|
||||
public CommonResult<Long> createPlan(@Validated(CreateGroup.class) @RequestBody PlanSaveReqVO createReqVO) {
|
||||
public CommonResult<Map<Long,Long>> createPlan(@Validated(CreateGroup.class) @RequestBody PlanSaveReqVO createReqVO) {
|
||||
return success(planService.createPlan(createReqVO));
|
||||
}
|
||||
|
||||
@@ -52,16 +58,16 @@ public class PlanController {
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除排单")
|
||||
@Parameter(name = "id", description = "排单id", required = true)
|
||||
@Parameter(name = "ids", description = "排单ids", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('placeorder:delete')")
|
||||
public CommonResult<Boolean> deletePlan(@RequestParam("id") Long id) {
|
||||
return success(planService.deletePlan(id));
|
||||
public CommonResult<Boolean> deletePlan(@RequestParam("ids") List<Long> ids) {
|
||||
return success(planService.deletePlan(ids));
|
||||
}
|
||||
|
||||
@DeleteMapping("cancellation")
|
||||
@Operation(summary = "作废")
|
||||
@Parameter(name = "id", description = "排单id", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('executor:plan:delete')")
|
||||
// @DeleteMapping("cancellation")
|
||||
// @Operation(summary = "作废")
|
||||
// @Parameter(name = "id", description = "排单id", required = true)
|
||||
// @PreAuthorize("@ss.hasPermission('executor:plan:delete')")
|
||||
public CommonResult<Boolean> cancellation(@RequestParam("id") Long id) {
|
||||
return success(planService.cancellation(id));
|
||||
}
|
||||
@@ -106,12 +112,19 @@ public class PlanController {
|
||||
}
|
||||
|
||||
@GetMapping("getNotPlanOrderListPage")
|
||||
@Operation(summary = "获取未排单的板材生产单板材分页列表")
|
||||
@Operation(summary = "获取未排单的生产单分页列表")
|
||||
@PreAuthorize("@ss.hasPermission('placeorder:query')")
|
||||
public CommonResult<PageResult<OrderRespVOCopy>> getOrderPage(@Valid OrderPageReqVOCopy pageReqVO) {
|
||||
return success(planService.getOrderPage(pageReqVO));
|
||||
}
|
||||
|
||||
@GetMapping("getNotPlanOrderPlateList")
|
||||
@Operation(summary = "获取未排单的板材分页列表")
|
||||
@PreAuthorize("@ss.hasPermission('placeorder:query')")
|
||||
public CommonResult<List<NotPlanOrderPlateRespVO>> getOrderPlateList(@Valid OrderPageReqVOCopy pageReqVO) {
|
||||
return success(planService.getOrderPlateList(pageReqVO));
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("getNotPlanGoodsListPage")
|
||||
@Operation(summary = "获取未排单的大板板材分页列表")
|
||||
@@ -122,13 +135,14 @@ public class PlanController {
|
||||
|
||||
|
||||
|
||||
@GetMapping("getNotPlanPlateListPage")
|
||||
@Operation(summary = "获取未排单的板材分页列表")
|
||||
@PostMapping("getNotOptimizeGoodsList")
|
||||
@Operation(summary = "优化界面未排单的大板板材分页列表")
|
||||
@PreAuthorize("@ss.hasPermission('executor:plan:query')")
|
||||
public CommonResult<List<PlatePage>> getNotPlanPlateListPage(@Valid PlateReqPageVO pageVO) {
|
||||
return success(planService.getNotPlanPlateListPage(pageVO));
|
||||
public CommonResult<List<NotPlanGoodsRespVO>> getNotOptimizeGoodsList(@Valid @RequestBody NotPlanGoodsReqVO reqVO) {
|
||||
return success(planService.getNotOptimizeGoodsList(reqVO));
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("getNotPlanGoodsListPageByOrderId")
|
||||
@Operation(summary = "根据生产单id获取未排单的商品分页列表")
|
||||
@PreAuthorize("@ss.hasPermission('executor:plan:query')")
|
||||
@@ -180,4 +194,15 @@ public class PlanController {
|
||||
return success(planService.getPlateList(planIds));
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("getOrderRoomBodyList")
|
||||
@Operation(summary = "获取未排单的生产单的柜体和房间名称")
|
||||
@Parameter(name = "orderIds", description = "生产单ID", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('placeorder:orderlist')")
|
||||
public CommonResult<List<OrderRoomBodyList>> getOrderRoomBody(@Valid @RequestParam List<Long> orderIds) {
|
||||
|
||||
return success(planService.getOrderRoomBody(orderIds));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
package com.cf.imes.module.executor.controller.admin.plan.bo;
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class OrderBodyIds {
|
||||
|
||||
|
||||
@Schema(description = "柜体ID")
|
||||
private Long bodyId;
|
||||
|
||||
@Schema(description = "柜体名称")
|
||||
private String bodyName;
|
||||
|
||||
|
||||
}
|
||||
+3
-4
@@ -3,16 +3,15 @@ package com.cf.imes.module.executor.controller.admin.plan.bo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.Builder;
|
||||
|
||||
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
|
||||
public class OrderIds {
|
||||
|
||||
|
||||
@Schema(description = "大板ID")
|
||||
@Schema(description = "大板ID-大板分类的ID")
|
||||
private Long id;
|
||||
|
||||
|
||||
@@ -20,7 +19,7 @@ public class OrderIds {
|
||||
private Long orderId;
|
||||
|
||||
|
||||
@Schema(description = "商品ID")
|
||||
@Schema(description = "商品ID-板材库对应的大板ID")
|
||||
private Long goodsId;
|
||||
|
||||
|
||||
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package com.cf.imes.module.executor.controller.admin.plan.bo;
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class OrderRoomBodyList {
|
||||
|
||||
|
||||
@Schema(description = "生产单ID")
|
||||
private Long orderId;
|
||||
|
||||
|
||||
@Schema(description = "柜体房间信息")
|
||||
private List<OrderRoomIds> orderRoomIds;
|
||||
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
package com.cf.imes.module.executor.controller.admin.plan.bo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class OrderRoomIds {
|
||||
|
||||
|
||||
@Schema(description = "房间ID")
|
||||
private Long roomId;
|
||||
|
||||
@Schema(description = "房间名称")
|
||||
private String roomName;
|
||||
|
||||
@Schema(description = "柜体信息")
|
||||
private List<OrderBodyIds> orderBodyIds;
|
||||
|
||||
|
||||
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package com.cf.imes.module.executor.controller.admin.plan.saveOptimize;
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.ToString;
|
||||
|
||||
@Schema(description = "小板优化的数据信息")
|
||||
@Data
|
||||
@ToString(callSuper = true)
|
||||
public class BlockPlaceInfo {
|
||||
|
||||
|
||||
@Schema(description = "大板编号")
|
||||
private Long bi;
|
||||
|
||||
@Schema(description = "小板编号")
|
||||
private Long bo;
|
||||
|
||||
public BlockPlaceInfo(Long bi, Long bo) {
|
||||
this.bi = bi;
|
||||
this.bo = bo;
|
||||
}
|
||||
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package com.cf.imes.module.executor.controller.admin.plan.saveOptimize;
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class CuttingStatusRespVO {
|
||||
|
||||
|
||||
@Schema(description = "排单ID")
|
||||
private Long planId;
|
||||
|
||||
|
||||
@Schema(description = "取消开料的大板编号")
|
||||
private List<Long> goodsNo;
|
||||
|
||||
}
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
package com.cf.imes.module.executor.controller.admin.plan.saveOptimize;
|
||||
|
||||
|
||||
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderIds;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.ToString;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
@Schema(description = "管理后台 - 未排单的大板的数据信息")
|
||||
@Data
|
||||
@ToString(callSuper = true)
|
||||
public class NotPlanGoodsReqVO {
|
||||
|
||||
|
||||
// @Schema(description = "生产单ids")
|
||||
// private List<Long> orderIds;
|
||||
//
|
||||
// @Schema(description = "生产单的大板ids")
|
||||
// private List<Long> goodsIds;
|
||||
//
|
||||
//
|
||||
// @Schema(description = "板材库对应的大板ids")
|
||||
// private List<Long> plateGoodsIds;
|
||||
|
||||
|
||||
@Schema(description = "生产单和大板的信息")
|
||||
private List<OrderIds> orderIdList;
|
||||
|
||||
|
||||
@Schema(description = "排单类型:1 混单排单,2 生产单排单", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private Integer type;
|
||||
|
||||
|
||||
@Schema(description = "混单过滤条件")
|
||||
private List<Information> filter;
|
||||
|
||||
|
||||
@Valid
|
||||
@Data
|
||||
public static class Information {
|
||||
|
||||
@Schema(description = "材质")
|
||||
private Boolean material;
|
||||
|
||||
@Schema(description = "颜色")
|
||||
private Boolean color;
|
||||
|
||||
@Schema(description = "长*宽")
|
||||
private Boolean spec;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+87
@@ -0,0 +1,87 @@
|
||||
package com.cf.imes.module.executor.controller.admin.plan.saveOptimize;
|
||||
|
||||
|
||||
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderIds;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.ToString;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Data
|
||||
@ToString(callSuper = true)
|
||||
public class NotPlanGoodsRespVO {
|
||||
|
||||
|
||||
// @Schema(description = "生产单ids")
|
||||
// private List<Long> orderIds;
|
||||
//
|
||||
//
|
||||
// @Schema(description = "生产单的大板ids")
|
||||
// private List<Long> goodsIds;
|
||||
//
|
||||
//
|
||||
// @Schema(description = "板材库对应的大板ids")
|
||||
// private List<Long> plateGoodsIds;
|
||||
|
||||
|
||||
@Schema(description = "生产单和大板的信息")
|
||||
private List<OrderIds> orderIdList;
|
||||
|
||||
|
||||
|
||||
// @Schema(description = "余料板ID")
|
||||
// private List<Long> remainPlateIds;
|
||||
|
||||
|
||||
@Schema(description = "商品ID-板材库对应的大板ID")
|
||||
private Long goodsId;
|
||||
|
||||
|
||||
@Schema(description = "商品名称")
|
||||
private String goodsName;
|
||||
|
||||
|
||||
@Schema(description = "商品材质")
|
||||
private String material;
|
||||
|
||||
|
||||
@Schema(description = "商品颜色")
|
||||
private String color;
|
||||
|
||||
|
||||
@Schema(description = "商品纹路")
|
||||
private Boolean texture;
|
||||
|
||||
|
||||
// @Schema(description = "宽")
|
||||
// private BigDecimal width;
|
||||
//
|
||||
//
|
||||
// @Schema(description = "高")
|
||||
// private BigDecimal height;
|
||||
//
|
||||
//
|
||||
@Schema(description = "厚")
|
||||
private BigDecimal thickness;
|
||||
|
||||
|
||||
// @Schema(description = "面积")
|
||||
// private BigDecimal area;
|
||||
|
||||
|
||||
@Schema(description = "小板数量")
|
||||
private Integer plateNum;
|
||||
|
||||
|
||||
@Schema(description = "大板数量")
|
||||
private Integer goodsNum;
|
||||
|
||||
|
||||
@Schema(description = "尺寸规格")
|
||||
private String spec;
|
||||
|
||||
|
||||
}
|
||||
+4
-4
@@ -15,7 +15,7 @@ import static com.cf.imes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH
|
||||
public class GoodsReqVO {
|
||||
|
||||
|
||||
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "4109")
|
||||
@Schema(description = "主键-大板分类ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "4109")
|
||||
private Long id;
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ public class GoodsReqVO {
|
||||
@Schema(description = "设计端商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "832")
|
||||
private Long rawGoodsId;
|
||||
|
||||
@Schema(description = "商品 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "243")
|
||||
@Schema(description = "商品 ID-大板的实际ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "243")
|
||||
private Long goodsId;
|
||||
|
||||
@Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "晨丰")
|
||||
@@ -79,13 +79,13 @@ public class GoodsReqVO {
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
private LocalDateTime createTime;
|
||||
|
||||
|
||||
|
||||
@Schema(description = "更新时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] updateTime;
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
|
||||
|
||||
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
package com.cf.imes.module.executor.controller.admin.plan.vo;
|
||||
|
||||
|
||||
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderIds;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class NotPlanOrderPlateRespVO {
|
||||
|
||||
// @Schema(description = "生产单id")
|
||||
// private List<Long> orderId;
|
||||
//
|
||||
// @Schema(description = "生产单的大板ID-大板分类ID")
|
||||
// private List<Long> id;
|
||||
//
|
||||
// @Schema(description = "商品id-板材库对应的ID")
|
||||
// private Long goodsId;
|
||||
|
||||
|
||||
@Schema(description = "生产单和大板的信息")
|
||||
private List<OrderIds> orderIdList;
|
||||
|
||||
@Schema(description = "商品ID-板材库对应的大板ID")
|
||||
private Long goodsId;
|
||||
|
||||
@Schema(description = "商品名称")
|
||||
private String goodsName;
|
||||
|
||||
@Schema(description = "商品材质")
|
||||
private String material;
|
||||
|
||||
@Schema(description = "商品颜色")
|
||||
private String color;
|
||||
|
||||
@Schema(description = "宽")
|
||||
private BigDecimal width;
|
||||
|
||||
@Schema(description = "高")
|
||||
private BigDecimal height;
|
||||
|
||||
@Schema(description = "厚")
|
||||
private BigDecimal thickness;
|
||||
|
||||
@Schema(description = "商品纹路")
|
||||
private Boolean texture;
|
||||
|
||||
@Schema(description = "商品品牌")
|
||||
private String brand;
|
||||
|
||||
|
||||
}
|
||||
+4
-2
@@ -5,8 +5,6 @@ import com.cf.imes.module.executor.controller.admin.plan.bo.OrderIds;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@@ -32,6 +30,10 @@ public class OrderGoodsResp {
|
||||
private BigDecimal height;
|
||||
@Schema(description = "厚")
|
||||
private BigDecimal thickness;
|
||||
@Schema(description = "商品纹路")
|
||||
private Boolean texture;
|
||||
@Schema(description = "商品品牌")
|
||||
private String brand;
|
||||
@Schema(description = "面积")
|
||||
private BigDecimal area;
|
||||
|
||||
|
||||
+15
-11
@@ -3,12 +3,10 @@ package com.cf.imes.module.executor.controller.admin.plan.vo;
|
||||
import com.cf.imes.framework.common.pojo.PageParam;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import static com.cf.imes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
@@ -16,14 +14,12 @@ import static com.cf.imes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH
|
||||
/**
|
||||
* @author there
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
|
||||
@Data
|
||||
public class OrderPageReqVOCopy extends PageParam {
|
||||
|
||||
@Schema(description = "生产单id")
|
||||
private Long orderId;
|
||||
@Schema(description = "商品id")
|
||||
private String goodsId;
|
||||
@Schema(description = "自定义id")
|
||||
private String defaultId;
|
||||
@Schema(description = "客户")
|
||||
@@ -49,12 +45,6 @@ public class OrderPageReqVOCopy extends PageParam {
|
||||
@Schema(description = "创建时间", example = "[2022-07-01 00:00:00,2022-07-01 23:59:59]")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
/*@Schema(description = "交付日期开始时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime beginDate;
|
||||
@Schema(description = "交付日期结束时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime endDate;*/
|
||||
@Schema(description = "长 小范围")
|
||||
private BigDecimal longMinRang;
|
||||
@Schema(description = "长 大范围")
|
||||
@@ -64,4 +54,18 @@ public class OrderPageReqVOCopy extends PageParam {
|
||||
@Schema(description = "宽 大范围")
|
||||
private BigDecimal widthMaxRang;
|
||||
|
||||
|
||||
// todo 目前商品ID的数据筛选只解决了非混单的情况(非混单,数据类型为Long即可,混单情况需要改变),混单数据筛选待解决
|
||||
@Schema(description = "商品ID-板材库对应的大板ID")
|
||||
private Long goodsId;
|
||||
|
||||
@Schema(description = "大板分类ID")
|
||||
private List<Long> ids;
|
||||
@Schema(description = "房间ID")
|
||||
private List<Long> roomId;
|
||||
@Schema(description = "柜体ID")
|
||||
private List<Long> bodyId;
|
||||
@Schema(description = "生产单ids")
|
||||
private List<Long> orderIds;
|
||||
|
||||
}
|
||||
|
||||
+2
@@ -24,6 +24,8 @@ import static com.cf.imes.framework.common.util.date.DateUtils.*;
|
||||
public class OrderRespVOCopy {
|
||||
@Schema(description = "生产单id")
|
||||
private Long orderId;
|
||||
@Schema(description = "生产单状态")
|
||||
private Long status;
|
||||
@Schema(description = "自定义单号")
|
||||
private String defineId;
|
||||
@Schema(description = "客户")
|
||||
|
||||
+11
-4
@@ -1,10 +1,12 @@
|
||||
package com.cf.imes.module.executor.controller.admin.plan.vo;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
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.time.LocalDateTime;
|
||||
|
||||
import static com.cf.imes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
@@ -16,7 +18,12 @@ import static com.cf.imes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH
|
||||
public class PlanPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "排单号")
|
||||
private String id;
|
||||
private Long id;
|
||||
|
||||
|
||||
@Schema(description = "是否翻页-true:上,false:下")
|
||||
private Boolean isUp;
|
||||
|
||||
|
||||
@Schema(description = "排序优先级")
|
||||
private Integer sort;
|
||||
|
||||
+27
-14
@@ -1,13 +1,12 @@
|
||||
package com.cf.imes.module.executor.controller.admin.plan.vo;
|
||||
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderRespVO;
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.util.*;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import com.alibaba.excel.annotation.*;
|
||||
import java.util.List;
|
||||
|
||||
@Schema(description = "管理后台 - 生产单开料排单 Response VO")
|
||||
@Data
|
||||
@@ -18,10 +17,6 @@ public class PlanRespVO {
|
||||
@ExcelProperty("ID")
|
||||
private Long id;
|
||||
|
||||
// @Schema(description = "排单号", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
// @ExcelProperty("排单号")
|
||||
// private String planNo;
|
||||
|
||||
@Schema(description = "排序优先级", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("排序优先级")
|
||||
private Integer sort;
|
||||
@@ -34,9 +29,6 @@ public class PlanRespVO {
|
||||
@ExcelProperty("排单状态:0 新单,1 板材已申请,2 开料中,3 已开料")
|
||||
private Integer status;
|
||||
|
||||
// @Schema(description = "是否支付:0 否,1 是", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
// @ExcelProperty("是否支付:0 否,1 是")
|
||||
// private Boolean isPay;
|
||||
|
||||
@Schema(description = "机台 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "16707")
|
||||
@ExcelProperty("机台 ID")
|
||||
@@ -57,7 +49,7 @@ public class PlanRespVO {
|
||||
@Schema(description = "排单对应的生产单的信息", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private List<PlanOrderRespVO> orderList;
|
||||
|
||||
@Schema(description = "板材信息列表", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@Schema(description = "板材信息列表-大板信息", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private List<PlateInfoVO> plateInfoList;
|
||||
|
||||
@Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对")
|
||||
@@ -80,4 +72,25 @@ public class PlanRespVO {
|
||||
@ExcelProperty("生产时间")
|
||||
private LocalDateTime produceTime;
|
||||
|
||||
|
||||
@Schema(description = "优化大板片数")
|
||||
private Long optimizeGoodsCount;
|
||||
|
||||
|
||||
@Schema(description = "已开料的大板片数")
|
||||
private Long cutGoodsCount;
|
||||
|
||||
|
||||
@Schema(description = "总小板片数")
|
||||
private Long plateNum;
|
||||
|
||||
|
||||
@Schema(description = "未优化小板片数")
|
||||
private Long unOptimizePlateCount;
|
||||
|
||||
|
||||
@Schema(description = "已优化小板片数")
|
||||
private Long optimizePlateCount;
|
||||
|
||||
|
||||
}
|
||||
+21
-11
@@ -2,12 +2,13 @@ package com.cf.imes.module.executor.controller.admin.plan.vo;
|
||||
|
||||
import com.cf.imes.framework.es.core.valid.CreateGroup;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.*;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
@Schema(description = "管理后台 - 生产单开料排单新增/修改 Request VO")
|
||||
@Data
|
||||
@@ -18,7 +19,6 @@ public class PlanSaveReqVO {
|
||||
|
||||
|
||||
@Schema(description = "排序优先级", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
//@NotNull(groups = CreateGroup.class,message = "排序优先级不能为空")
|
||||
private Long sort;
|
||||
|
||||
@Schema(description = "排单类型:1 混单排单,2 生产单排单", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
||||
@@ -38,14 +38,10 @@ public class PlanSaveReqVO {
|
||||
@NotNull(message = "计划时间不能为空", groups = CreateGroup.class)
|
||||
private LocalDateTime planTime;
|
||||
|
||||
/*@Schema(description = "生产单id列表", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private List<Long> orderIds;*/
|
||||
|
||||
/*@Schema(description = "板件id列表")
|
||||
private List<Long> plateIds;*/
|
||||
|
||||
@Schema(description = "生产单id与商品id 列表",requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private List<Item> itemList;
|
||||
// @Schema(description = "余料板ID")
|
||||
// private List<Long> remainPlateIds;
|
||||
|
||||
|
||||
@Schema(description = "备注")
|
||||
@@ -59,6 +55,15 @@ public class PlanSaveReqVO {
|
||||
@NotNull(message = "生产时间不能为空", groups = CreateGroup.class)
|
||||
private LocalDateTime produceTime;
|
||||
|
||||
|
||||
@Schema(description = "生产单id与商品id 列表",requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private List<Item> itemList;
|
||||
|
||||
|
||||
@Schema(description = "去除的大板分类ID",requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private List<Long> deleteIds;
|
||||
|
||||
|
||||
@Valid
|
||||
@Data
|
||||
public static class Item {
|
||||
@@ -70,8 +75,13 @@ public class PlanSaveReqVO {
|
||||
@Schema(description = "生产单id")
|
||||
@NotNull
|
||||
private Long orderId;
|
||||
|
||||
@Schema(description = "板材库大板id")
|
||||
@NotNull
|
||||
private Long goodsId;
|
||||
|
||||
@Schema(description = "余料板ID")
|
||||
@NotNull
|
||||
private Long remainPlateId;
|
||||
}
|
||||
}
|
||||
+6
-3
@@ -13,7 +13,7 @@ import java.util.List;
|
||||
public class PlateDetialRespVO {
|
||||
|
||||
@Schema(description = "板件ID", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private Long id;
|
||||
private Long plateId;
|
||||
|
||||
|
||||
@Schema(description = "房间ID", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@@ -35,10 +35,13 @@ public class PlateDetialRespVO {
|
||||
private Long orderId;
|
||||
|
||||
|
||||
@Schema(description = "商品ID", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private Long goodsId;
|
||||
@Schema(description = "商品ID-大板分类ID", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private Long id;
|
||||
|
||||
|
||||
@Schema(description = "大板实例ID", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private Long goodsId;
|
||||
|
||||
@Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private String goodsName;
|
||||
|
||||
|
||||
+16
-2
@@ -1,14 +1,15 @@
|
||||
package com.cf.imes.module.executor.controller.admin.plan.vo;
|
||||
|
||||
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderIds;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author there
|
||||
@@ -18,6 +19,16 @@ import java.math.BigDecimal;
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class PlateInfoVO {
|
||||
|
||||
|
||||
@Schema(description = "生产单和大板的信息")
|
||||
private List<OrderIds> orderIdList;
|
||||
|
||||
|
||||
@Schema(description = "板材库对应的大板ID-大板实际ID")
|
||||
private Long goodsId;
|
||||
|
||||
|
||||
@Schema(description = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private String material;
|
||||
|
||||
@@ -40,7 +51,10 @@ public class PlateInfoVO {
|
||||
@Schema(description = "颜色")
|
||||
private String color;
|
||||
|
||||
@Schema(description = "数量")
|
||||
@Schema(description = "数量-大板对应的小板数量")
|
||||
private Integer count;
|
||||
|
||||
@Schema(description = "优化大板片数")
|
||||
private Long optimizeGoodsCount;
|
||||
|
||||
}
|
||||
|
||||
+1
-1
@@ -49,7 +49,7 @@ public class OptimizationSavePlateReqVO {
|
||||
private Integer type;
|
||||
|
||||
|
||||
@Schema(description = "商品ID")
|
||||
@Schema(description = "商品ID-大板的实际ID")
|
||||
private Long goodsId;
|
||||
|
||||
@Schema(description = "纹路类型,0 正纹 1 可翻转 2 反纹")
|
||||
|
||||
+13
-5
@@ -1,14 +1,14 @@
|
||||
package com.cf.imes.module.executor.controller.admin.plate.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.cf.imes.framework.common.pojo.PageParam;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.util.*;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import com.alibaba.excel.annotation.*;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Beal
|
||||
@@ -173,6 +173,14 @@ public class PlateRespVO extends PageParam {
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@Schema(description = "加工造型(槽)数")
|
||||
private Integer sculptNum;
|
||||
|
||||
|
||||
@Schema(description = "加工孔数")
|
||||
private Integer holeNum;
|
||||
|
||||
|
||||
@Schema(description = "板材颜色")
|
||||
private String color;
|
||||
|
||||
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
package com.cf.imes.module.executor.dal.dataobject.goods;
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Schema(description = "大板开料信息")
|
||||
public class CutedBoardInfo {
|
||||
|
||||
|
||||
@Schema(description = "已开料大板数量")
|
||||
private Long cutedBoardNumber;
|
||||
|
||||
|
||||
@Schema(description = "具体的开料大板编号")
|
||||
private List<Long> cutedBoardList;
|
||||
|
||||
|
||||
}
|
||||
+21
-1
@@ -2,6 +2,7 @@ package com.cf.imes.module.executor.dal.dataobject.goods;
|
||||
|
||||
|
||||
import com.cf.imes.framework.es.core.dal.ESDocument;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
@@ -9,6 +10,7 @@ import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Data
|
||||
@@ -23,7 +25,25 @@ public class OptimizeBoardModelDO extends ESDocument {
|
||||
|
||||
|
||||
@Schema(description = "生产单id")
|
||||
private Long orderId;
|
||||
@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
|
||||
private List<Long> orderId;
|
||||
|
||||
|
||||
@Schema(description = "大板的实际ID")
|
||||
private Long goodsId;
|
||||
|
||||
|
||||
@Schema(description = "生产单已优化小板数量")
|
||||
private Long placeBlockNumber;
|
||||
|
||||
|
||||
// 新的数据集需要去除
|
||||
@Schema(description = "排单优化的大板数量")
|
||||
private Long placeBoardNumber;
|
||||
|
||||
|
||||
@Schema(description = "已开料大板数据集")
|
||||
private CutedBoardInfo cutedBoardInfo;
|
||||
|
||||
|
||||
@Schema(description = "大板原长")
|
||||
|
||||
+4
-7
@@ -1,11 +1,8 @@
|
||||
package com.cf.imes.module.executor.dal.dataobject.orderGroup;
|
||||
|
||||
import com.cf.imes.framework.organ.core.db.OrganBaseDO;
|
||||
import lombok.*;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import lombok.*;
|
||||
|
||||
/**
|
||||
* 生产单加工组 DO
|
||||
@@ -51,15 +48,15 @@ public class OrderGroupDO extends BaseDO {
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 模块宽度
|
||||
* 加工组宽度
|
||||
*/
|
||||
private Double width;
|
||||
/**
|
||||
* 模块高度
|
||||
* 加工组高度
|
||||
*/
|
||||
private Double height;
|
||||
/**
|
||||
* 模块深度
|
||||
* 加工组深度
|
||||
*/
|
||||
private Double depth;
|
||||
/**
|
||||
|
||||
+4
-17
@@ -1,23 +1,10 @@
|
||||
package com.cf.imes.module.executor.dal.dataobject.plate;
|
||||
|
||||
import com.cf.imes.framework.organ.core.db.OrganBaseDO;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
|
||||
import lombok.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 生产单板件 DO
|
||||
@@ -55,7 +42,7 @@ public class PlateDO extends BaseDO {
|
||||
*/
|
||||
private String plateNo;
|
||||
/**
|
||||
* 板类型,0 层板 1 立板 2 背板
|
||||
* 板类型,0 层板 1 立板 2 背板 3 自增板
|
||||
*/
|
||||
private Integer type;
|
||||
/**
|
||||
|
||||
+55
-13
@@ -1,22 +1,21 @@
|
||||
package com.cf.imes.module.executor.dal.mysql.goods;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
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.saveOptimize.NotPlanGoodsRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.vo.GoodsReqVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.vo.OrderGoodsResp;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.vo.OrderPageReqVOCopy;
|
||||
import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.orderGroup.OrderGroupDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import com.cf.imes.module.executor.controller.admin.goods.vo.*;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
|
||||
|
||||
/**
|
||||
@@ -51,7 +50,7 @@ public interface GoodsMapper extends BaseMapperX<GoodsDO> {
|
||||
List<GoodsReqVO> selectGoodsList(@Param("orderId") Long orderId, @Param("organId") Long organId);
|
||||
|
||||
|
||||
List<GoodsReqVO> selectGoodsListByOrderIds(@Param("orderIds") List<Long> orderIds, @Param("organId") Long organId);
|
||||
List<GoodsReqVO> selectGoodsListByOrderIds(@Param("goodsIds") List<Long> goodsIds, @Param("organId") Long organId);
|
||||
|
||||
|
||||
// 单个修改删除状态
|
||||
@@ -82,12 +81,26 @@ public interface GoodsMapper extends BaseMapperX<GoodsDO> {
|
||||
IPage<OrderGoodsResp> selectGoods(@Param("page") IPage page, @Param("goodsIds") List<Long> goodsIds, @Param("organId") Long organId);
|
||||
|
||||
|
||||
default GoodsDO selectId(Long orderId, Long goodsId, Long organId) {
|
||||
return selectOne(new LambdaQueryWrapperX<GoodsDO>()
|
||||
// default GoodsDO selectId(Long orderId, Long goodsId, Long organId) {
|
||||
// return selectOne(new LambdaQueryWrapperX<GoodsDO>()
|
||||
// }
|
||||
// default List<GoodsDO> selectGoodsPlateList(List<Long> goodIds, Long organId) {
|
||||
// return selectList(new LambdaQueryWrapperX<GoodsDO>()
|
||||
// .eq(GoodsDO::getOrganId, organId)
|
||||
// .inIfPresent(GoodsDO::getOrderId, goodIds)
|
||||
// .select(GoodsDO::getGoodsId,GoodsDO::getGoodsName, GoodsDO::getMaterial, GoodsDO::getColor, GoodsDO::getTexture,GoodsDO::getThickness, GoodsDO::getSpec));
|
||||
// }
|
||||
|
||||
|
||||
List<NotPlanGoodsRespVO> selectGoodsPlateList(@Param("goodIds") List<Long> goodIds,@Param("organId") Long organId);
|
||||
|
||||
|
||||
default List<GoodsDO> selectListByGoodsId(Long goodsId, Long organId) {
|
||||
return selectList(new LambdaQueryWrapperX<GoodsDO>()
|
||||
.eq(GoodsDO::getOrganId, organId)
|
||||
.eq(GoodsDO::getOrderId, orderId)
|
||||
.eq(GoodsDO::getGoodsId, goodsId)
|
||||
.eq(GoodsDO::getDeleted, 0));
|
||||
.eq(GoodsDO::getDeleted, false)
|
||||
.eq(GoodsDO::getGoodsId, goodsId));
|
||||
|
||||
}
|
||||
|
||||
// 根据生产单删除
|
||||
@@ -101,4 +114,33 @@ public interface GoodsMapper extends BaseMapperX<GoodsDO> {
|
||||
return delete(new LambdaQueryWrapperX<GoodsDO>()
|
||||
.in(GoodsDO::getOrderId, orderId));
|
||||
}
|
||||
|
||||
|
||||
// List<GoodsDO> seleTestSQL(@Param("sql") String sql);
|
||||
|
||||
|
||||
|
||||
default List<GoodsDO> selectListByGoodsIdList(List<Long> goodsIds,List<Long> orderIds, Long organId) {
|
||||
return selectList(new LambdaQueryWrapperX<GoodsDO>()
|
||||
.eq(GoodsDO::getOrganId, organId)
|
||||
.eq(GoodsDO::getDeleted, false)
|
||||
.in(GoodsDO::getGoodsId, goodsIds)
|
||||
.in(GoodsDO::getOrderId, orderIds));
|
||||
|
||||
}
|
||||
|
||||
|
||||
List<GoodsDO> seleTestSQL(@Param("filed") String filed,@Param("goodsIds") List<Long> goodsIds ,@Param("organId") Long organId);
|
||||
|
||||
|
||||
default GoodsDO selectGoodsId(Long orderId, Long goodsId, Long organId) {
|
||||
return selectOne(new LambdaQueryWrapperX<GoodsDO>()
|
||||
.eq(GoodsDO::getOrganId, organId)
|
||||
.eq(GoodsDO::getDeleted, false)
|
||||
.eq(GoodsDO::getGoodsId, goodsId)
|
||||
.eq(GoodsDO::getOrderId, orderId)
|
||||
.select(GoodsDO::getId));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+37
-3
@@ -13,15 +13,15 @@ import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderCountPro
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderOverdueRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPageReqVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderIds;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.vo.OrderGoodsResp;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.vo.OrderPageReqVOCopy;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.vo.OrderRespVOCopy;
|
||||
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
|
||||
import com.cf.imes.module.executor.enums.OrderDeletedEnum;
|
||||
import com.cf.imes.module.executor.enums.OrderStatusEnum;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
|
||||
import javax.annotation.sql.DataSourceDefinition;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
@@ -90,6 +90,7 @@ public interface OrderMapper extends BaseMapperX<OrderDO> {
|
||||
|
||||
IPage<OrderRespVOCopy> selectOrderPage(@Param("page") IPage page, @Param(Constants.WRAPPER) Wrapper<OrderDO> wrapper);
|
||||
|
||||
// IPage<OrderRespVOCopy> selectOrderPage(@Param("page") IPage page,@Param("pageReqVO") OrderPageReqVOCopy pageReqVO, @Param("organId") Long organId);
|
||||
|
||||
Map<String, Object> selectDynamicSqlString(@Param("sqlStr") String sqlStr);
|
||||
|
||||
@@ -143,7 +144,7 @@ public interface OrderMapper extends BaseMapperX<OrderDO> {
|
||||
|
||||
List<OrderRespVOCopy> selectOrderListByIds(@Param("orderIds") List<OrderIds> orderIds, @Param("organId") Long organId);
|
||||
|
||||
List<Long> selectOrderIds(@Param(Constants.WRAPPER) Wrapper<OrderDO> wrapper);
|
||||
IPage<OrderGoodsResp> selectOrderIds(@Param("page") IPage page, @Param(Constants.WRAPPER) Wrapper<OrderDO> wrapper);
|
||||
|
||||
// 生产单预警统计
|
||||
List<OrderOverdueRespVO> selectOrderNear(@Param("today") LocalDateTime today, @Param("orderDate") LocalDateTime orderDate, @Param("organId") Long organId);
|
||||
@@ -214,4 +215,37 @@ public interface OrderMapper extends BaseMapperX<OrderDO> {
|
||||
.eq(OrderDO::getDeleted, OrderDeletedEnum.DELETED.getStatus())
|
||||
.lt(OrderDO::getUpdateTime, LocalDateTime.now().minusDays(30))).stream().map(OrderDO::getId).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
default int updateOrderListStatus(List<Long> orderIds, Integer status,Long organId) {
|
||||
return update(new LambdaUpdateWrapper<OrderDO>()
|
||||
.set(OrderDO::getStatus, status)
|
||||
.in(OrderDO::getId, orderIds)
|
||||
.eq(OrderDO::getDeleted, 0)
|
||||
.eq(OrderDO::getOrganId, organId));
|
||||
}
|
||||
|
||||
|
||||
|
||||
List<OrderDO> selectTestSQL(@Param("filed") String filed,@Param("orderIds") List<Long> orderIds,@Param("organId") Long organId);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
default List<OrderDO> selectOrderIdsList(OrderPageReqVOCopy pageReqVO, List<Integer> statusList, Long organId) {
|
||||
return selectList(new LambdaQueryWrapperX<OrderDO>()
|
||||
.eqIfPresent(OrderDO::getOrganId, organId)
|
||||
.eq(OrderDO::getDeleted, false)
|
||||
.in(OrderDO::getStatus,statusList)
|
||||
.likeIfPresent(OrderDO::getId,pageReqVO.getOrderId() != null ? pageReqVO.getOrderId().toString() : null)
|
||||
.inIfPresent(OrderDO::getId,pageReqVO.getOrderIds())
|
||||
.likeIfPresent(OrderDO::getCustomOrderNo,pageReqVO.getDefaultId())
|
||||
.likeIfPresent(OrderDO::getCustomer,pageReqVO.getConsignee())
|
||||
.likeIfPresent(OrderDO::getAddress,pageReqVO.getConsigneeAddress())
|
||||
.betweenIfPresent(OrderDO::getCreateTime,pageReqVO.getCreateTime())
|
||||
.select(OrderDO::getId));
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
+8
-5
@@ -6,13 +6,12 @@ import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisti
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsReqVO;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsStatusRespVO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
|
||||
import com.cf.imes.module.executor.enums.OrderDeletedEnum;
|
||||
import com.cf.imes.module.executor.enums.OrderStatusEnum;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -27,7 +26,7 @@ public interface OrderStatisticsMapper extends BaseMapperX<OrderDO> {
|
||||
*/
|
||||
default Integer selectOrderCount() {
|
||||
return Math.toIntExact(selectCount(new LambdaQueryWrapperX<OrderDO>()
|
||||
.eq(OrderDO::getDeleted, 0)));
|
||||
.eq(OrderDO::getDeleted, OrderDeletedEnum.NOT_DELETED.getStatus())));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -36,6 +35,7 @@ public interface OrderStatisticsMapper extends BaseMapperX<OrderDO> {
|
||||
*/
|
||||
default Integer selectOrderCountToday() {
|
||||
return Math.toIntExact(selectCount(new LambdaQueryWrapperX<OrderDO>()
|
||||
.eq(OrderDO::getDeleted, OrderDeletedEnum.NOT_DELETED.getStatus())
|
||||
.eq(OrderDO::getOrderDate, LocalDate.now())));
|
||||
|
||||
}
|
||||
@@ -46,7 +46,9 @@ public interface OrderStatisticsMapper extends BaseMapperX<OrderDO> {
|
||||
*/
|
||||
default Integer selectOrderCountTodayFinish() {
|
||||
return Math.toIntExact(selectCount(new LambdaQueryWrapperX<OrderDO>()
|
||||
.between(OrderDO::getFinishTime, LocalDateTime.of(LocalDate.now(), LocalTime.MIN), LocalDateTime.of(LocalDate.now(), LocalTime.MAX))));
|
||||
.eq(OrderDO::getDeleted, OrderDeletedEnum.NOT_DELETED.getStatus())
|
||||
.eq(OrderDO::getStatus, OrderStatusEnum.FINISH_PRODUCTION.getStatus())
|
||||
.eq(OrderDO::getFinishTime, LocalDate.now())));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -55,13 +57,14 @@ public interface OrderStatisticsMapper extends BaseMapperX<OrderDO> {
|
||||
*/
|
||||
default Integer selectOrderCountProduce() {
|
||||
return Math.toIntExact(selectCount(new LambdaQueryWrapperX<OrderDO>()
|
||||
.eq(OrderDO::getDeleted, OrderDeletedEnum.NOT_DELETED.getStatus())
|
||||
.eq(OrderDO::getStatus, OrderStatusEnum.IN_PRODUCTION.getStatus())));
|
||||
}
|
||||
|
||||
/**
|
||||
* 生产中生产平方数
|
||||
*
|
||||
* @param organId
|
||||
* @param
|
||||
* @return
|
||||
*/
|
||||
Integer selectOrderSquareProduce();
|
||||
|
||||
-6
@@ -4,18 +4,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderModuleRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderBodyRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderRoomBodyRespVO;
|
||||
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 org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Update;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
+26
-8
@@ -1,25 +1,18 @@
|
||||
package com.cf.imes.module.executor.dal.mysql.orderItem;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderModuleRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPlatesDetailRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.orderParts.vo.OrderPartsRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.OptimizeRemainPlate;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderRoomBodyList;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.PrintOrderPackReqVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plate.vo.PlateDetailReqVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plate.vo.PlateDetailRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plate.vo.PlateRespVO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.orderModuleExtra.OrderModuleExtraDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.remainplaten.RemainPlateDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Update;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
@@ -85,4 +78,29 @@ public interface OrderItemMapper extends BaseMapperX<OrderItemDO> {
|
||||
return delete(new LambdaQueryWrapperX<OrderItemDO>()
|
||||
.in(OrderItemDO::getOrderId, orderId));
|
||||
}
|
||||
|
||||
|
||||
List<OrderRoomBodyList> selectRoomBodyByOrderId( @Param("orderIds") List<Long> orderIds, @Param("organId") Long organId);
|
||||
|
||||
|
||||
|
||||
default List<OrderItemDO> selectPlateIdList(List<Long> plateIds, Long organId) {
|
||||
return selectList(new LambdaQueryWrapperX<OrderItemDO>()
|
||||
.eq(OrderItemDO::getOrganId,organId)
|
||||
.inIfPresent(OrderItemDO::getPlateId, plateIds)
|
||||
.select(OrderItemDO::getBodyId,OrderItemDO::getRoomId,OrderItemDO::getGroupId));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
default List<OrderItemDO> selectPartsList(List<Long> partIds, Long organId) {
|
||||
return selectList(new LambdaQueryWrapperX<OrderItemDO>()
|
||||
.eq(OrderItemDO::getOrganId,organId)
|
||||
.inIfPresent(OrderItemDO::getPlateId, partIds)
|
||||
.select(OrderItemDO::getNum));
|
||||
|
||||
}
|
||||
}
|
||||
+20
-5
@@ -1,19 +1,20 @@
|
||||
package com.cf.imes.module.executor.dal.mysql.orderParts;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
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.orderParts.vo.OrderPartsPageReqVO;
|
||||
import com.cf.imes.module.executor.controller.admin.orderParts.vo.OrderPartsRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.orderParts.vo.PartGoodsRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.PrintOrderPartsRespVO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.orderGroup.OrderGroupDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.orderParts.OrderPartsDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import com.cf.imes.module.executor.controller.admin.orderParts.vo.*;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
|
||||
|
||||
@@ -84,4 +85,18 @@ public interface OrderPartsMapper extends BaseMapperX<OrderPartsDO> {
|
||||
return delete(new LambdaQueryWrapperX<OrderPartsDO>()
|
||||
.in(OrderPartsDO::getOrderId, orderId));
|
||||
}
|
||||
|
||||
|
||||
List<OrderPartsDO> selectTestSql(@Param("filed") String filed,@Param("partIds") List<Long> partIds,@Param("organId") Long organId);
|
||||
|
||||
|
||||
|
||||
default List<OrderPartsDO> selectPartIds(List<Long> orderIds, Long organId) {
|
||||
return selectList(new LambdaQueryWrapperX<OrderPartsDO>()
|
||||
.eq(OrderPartsDO::getOrganId,organId)
|
||||
.eq(OrderPartsDO::getDeleted,false)
|
||||
.in(OrderPartsDO::getOrderId,orderIds)
|
||||
.select(OrderPartsDO::getId));
|
||||
}
|
||||
|
||||
}
|
||||
+19
-4
@@ -1,21 +1,21 @@
|
||||
package com.cf.imes.module.executor.dal.mysql.plan;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.cf.imes.framework.mybatis.core.query.MPJLambdaWrapperX;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsReqVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
|
||||
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.planitem.PlanItemDO;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
|
||||
|
||||
/**
|
||||
@@ -100,4 +100,19 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
|
||||
* @return
|
||||
*/
|
||||
List<OrderPlanStatisticsAreaRespVO> selectPlanAreaGroupByCreateTime(@Param("req") OrderStatisticsReqVO reqVO);
|
||||
|
||||
|
||||
List<PlanDO> seleTestSQL(@Param("filed") String filed,@Param("planId") Long planId,@Param("organId") Long organId);
|
||||
|
||||
|
||||
|
||||
List<PlanDO> selectPlanIds(@Param("updateTime") String updateTime,@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> seleTestSQL(@Param("sql") String sql);
|
||||
|
||||
}
|
||||
+2
-5
@@ -1,17 +1,14 @@
|
||||
package com.cf.imes.module.executor.dal.mysql.planitem;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.vo.PlanOrderRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.vo.PlateInfoVO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.planitem.PlanItemDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 生产单开料排单明细 Mapper
|
||||
*
|
||||
|
||||
+72
-6
@@ -1,23 +1,29 @@
|
||||
package com.cf.imes.module.executor.dal.mysql.plate;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||
import com.cf.imes.framework.common.enums.OrderPlateTypeEnum;
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
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.plan.bo.GoodsNum;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderIds;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
|
||||
import com.cf.imes.module.executor.controller.admin.plate.vo.PlateGoodsIdVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plate.vo.PlateGoodsRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plate.vo.PlatePageReqVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plate.vo.PlateRespVO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import com.cf.imes.module.executor.controller.admin.plate.vo.*;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
|
||||
|
||||
/**
|
||||
@@ -120,7 +126,9 @@ public interface PlateMapper extends BaseMapperX<PlateDO> {
|
||||
List<PlateGoodsIdVO> selectPlateGoodsListByList(@Param("plates") List<Long> goodsIdList, @Param("orderId") Long orderId, @Param("organId") Long organId);
|
||||
|
||||
|
||||
List<PlatePage> selectGoodsPage( @Param("orderIds") List<Long> orderIds, @Param("organId") Long organId);
|
||||
// List<NotPlanOrderPlateRespVO> selectGoodsPage( @Param("orderIds") List<Long> orderIds, @Param("organId") Long organId);
|
||||
|
||||
List<NotPlanOrderPlateRespVO> selectGoodsPage( @Param(Constants.WRAPPER) Wrapper<PlateDO> wrapper);
|
||||
|
||||
|
||||
IPage<OrderGoodsResp> selectGoodsList(@Param("page") IPage<OrderGoodsResp> page,@Param("goodsIds") List<Long> goodsIds,@Param("organId") Long organId);
|
||||
@@ -152,9 +160,67 @@ public interface PlateMapper extends BaseMapperX<PlateDO> {
|
||||
.eq(PlateDO::getOrganId, organId)
|
||||
.eqIfPresent(PlateDO::getOrderId, orderId));
|
||||
}
|
||||
|
||||
|
||||
|
||||
default List<PlateDO> selectGoodsPlateList(List<Long> goodIds, Long organId) {
|
||||
return selectList(new LambdaQueryWrapperX<PlateDO>()
|
||||
.eq(PlateDO::getOrganId,organId)
|
||||
.inIfPresent(PlateDO::getGoodsId, goodIds));
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
List<PlateDetialRespVO> selectPlateListByGoodIds(@Param("goodIds") List<Long> goodIds,@Param("organId") Long organId);
|
||||
|
||||
|
||||
List<PlateInfoVO> selectPlateArea(@Param("orderIdsList") List<OrderIds> orderIdsList,@Param("organId") Long organId);
|
||||
|
||||
|
||||
|
||||
default List<PlateDO> selectPlateByPlateNo(List<Long> plateNo, Long organId) {
|
||||
return selectList(new LambdaQueryWrapperX<PlateDO>()
|
||||
.eq(PlateDO::getOrganId,organId)
|
||||
.inIfPresent(PlateDO::getPlateNo, plateNo)
|
||||
.select(PlateDO::getOrderId));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
default List<PlateDO> selectPlateListByGoodsIds(List<Long> deleteIds, Long organId) {
|
||||
return selectList(new LambdaQueryWrapperX<PlateDO>()
|
||||
.eq(PlateDO::getOrganId,organId)
|
||||
.inIfPresent(PlateDO::getGoodsId, deleteIds)
|
||||
.select(PlateDO::getPlateNo));
|
||||
|
||||
}
|
||||
|
||||
|
||||
// 批量删除
|
||||
default int deleteBatch(Collection<?> orderId) {
|
||||
return delete(new LambdaQueryWrapperX<PlateDO>()
|
||||
.in(PlateDO::getOrderId, orderId));
|
||||
}
|
||||
|
||||
|
||||
List<PlateRespVO> selectTestSQL(@Param("filed") String filed, @Param("field2") String field2,@Param("goodsIdList") List<Long> goodsIdList,@Param("organId") Long organId);
|
||||
|
||||
|
||||
|
||||
default List<PlateDO> selectPlateIdList(List<Long> goodsIdList, Long organId) {
|
||||
return selectList(new LambdaQueryWrapperX<PlateDO>()
|
||||
.eq(PlateDO::getOrganId,organId)
|
||||
.eq(PlateDO::getDeleted,false)
|
||||
.inIfPresent(PlateDO::getGoodsId,goodsIdList)
|
||||
.eq(PlateDO::getType, OrderPlateTypeEnum.SELFINCREASINGBOARD.getType())
|
||||
.select(PlateDO::getId));
|
||||
|
||||
}
|
||||
|
||||
|
||||
// List<PlateDO> selectTestSQL(@Param("sql") String sql);
|
||||
|
||||
|
||||
}
|
||||
+6
-2
@@ -4,11 +4,10 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.OptimizeRemainPlate;
|
||||
import com.cf.imes.module.executor.controller.admin.remainplate.vo.RemainPlatePageReqVO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.processStep.ProcessStepDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.remainplaten.RemainPlateDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
@@ -59,4 +58,9 @@ public interface RemainPlateMapper extends BaseMapperX<RemainPlateDO> {
|
||||
.in(RemainPlateDO::getId, ids)
|
||||
.eq(RemainPlateDO::getOrganId, organId));
|
||||
}
|
||||
|
||||
List<RemainPlateDO> selectTestSQL(@Param("filed") String filed,@Param("planId") Long planId,@Param("organId") Long organId);
|
||||
|
||||
|
||||
// List<RemainPlateDO> selectTestSQL(@Param("sql") String sql);
|
||||
}
|
||||
|
||||
-32
@@ -1,32 +0,0 @@
|
||||
package com.cf.imes.module.executor.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
/**
|
||||
* 排单状态
|
||||
*
|
||||
* @author Gqr
|
||||
* @since 2024/6/7 14:25
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Getter
|
||||
public enum OrderPlanStatusEnum {
|
||||
NEW(0, "新单"),
|
||||
|
||||
APPLY(1, "板材已申请"),
|
||||
|
||||
OPENING(2, "开料中"),
|
||||
|
||||
OPENED(3, "已开料");
|
||||
|
||||
/**
|
||||
* 类型编码
|
||||
*/
|
||||
private final Integer code;
|
||||
|
||||
/**
|
||||
* 描述
|
||||
*/
|
||||
private final String desc;
|
||||
}
|
||||
+2
-1
@@ -5,6 +5,7 @@ import com.cf.imes.module.report.api.template.ReportTemplateApi;
|
||||
import com.cf.imes.module.system.api.application.ApplicationApi;
|
||||
import com.cf.imes.module.system.api.dataSource.DataSourceApi;
|
||||
import com.cf.imes.module.system.api.machine.MachineApi;
|
||||
import com.cf.imes.module.system.api.organ.OrganApi;
|
||||
import com.cf.imes.module.system.api.process.ProcessApi;
|
||||
import com.cf.imes.module.system.api.process.ProcessGroupApi;
|
||||
import com.cf.imes.module.system.api.user.AdminUserApi;
|
||||
@@ -17,6 +18,6 @@ import org.springframework.context.annotation.Configuration;
|
||||
*/
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@EnableFeignClients(clients = {AdminUserApi.class, MachineApi.class, DictDataApi.class,AdminUserApi.class,
|
||||
FileApi.class, ProcessGroupApi.class, FileApi.class, DataSourceApi.class, ApplicationApi.class, ProcessApi.class, ReportTemplateApi.class})
|
||||
FileApi.class, ProcessGroupApi.class, FileApi.class, DataSourceApi.class, ApplicationApi.class, ProcessApi.class, ReportTemplateApi.class, OrganApi.class})
|
||||
public class RpcConfiguration {
|
||||
}
|
||||
|
||||
+13
-6
@@ -1,10 +1,13 @@
|
||||
package com.cf.imes.module.executor.service.optimizeplan;
|
||||
|
||||
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderSource;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.CuttingStatusRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.SavePlanPlateResultReqVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
|
||||
import com.cf.imes.module.executor.dal.dataobject.goods.OptimizeBoardModelDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -18,19 +21,17 @@ public interface OptimizePlanService {
|
||||
|
||||
Boolean addRemain(AddRemainReqVO vo);
|
||||
|
||||
Boolean savePlanPlateResult(SavePlanPlateResult result);
|
||||
|
||||
Boolean commit(Long planId);
|
||||
Boolean commit(Long planId, List<Long> goodsNo);
|
||||
|
||||
Boolean updateCuttingStatus(CuttingStatusRespVO respVO);
|
||||
|
||||
Boolean endCutting(Long planId);
|
||||
|
||||
OptimizeParamResVO getOptimizeParam(Long planId);
|
||||
|
||||
OptimizeParamRespVO getOptimizePlanParam(Long planId);
|
||||
|
||||
Map<String, Object> getLabelDataSourceValue(GetSourceDataReq req);
|
||||
|
||||
OrderSource getOrderSource(Long orderId, Long planId, Long machineId);
|
||||
OrderSource getOrderSource(Long orderId, Long planId, Long machineId,List<Long> ids);
|
||||
|
||||
OrderSource getOrderSourceByOrderId(Long orderId);
|
||||
|
||||
@@ -41,4 +42,10 @@ public interface OptimizePlanService {
|
||||
|
||||
|
||||
List<OrderModelDO> getPlateModel(Long orderId);
|
||||
|
||||
List<OptimizeBoardModelDO> buildBoardByOrderIds(Collection<Long> orderIds, String index, Integer size);
|
||||
|
||||
|
||||
String deleteTest(List<Long> id);
|
||||
|
||||
}
|
||||
|
||||
+360
-199
@@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.lang.Snowflake;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import co.elastic.clients.elasticsearch.ElasticsearchClient;
|
||||
import co.elastic.clients.elasticsearch._types.FieldValue;
|
||||
import co.elastic.clients.elasticsearch.core.*;
|
||||
@@ -12,26 +11,20 @@ import co.elastic.clients.elasticsearch.core.search.Hit;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.cf.imes.framework.common.enums.OrderStatusEnum;
|
||||
import com.cf.imes.framework.common.enums.PlanStatusEnum;
|
||||
import com.cf.imes.framework.common.enums.ProcessProcessingTypeEnum;
|
||||
import com.cf.imes.framework.common.enums.RemainTypeEnum;
|
||||
import com.cf.imes.framework.common.exception.ServiceException;
|
||||
import com.cf.imes.framework.common.util.json.JsonUtils;
|
||||
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.LambdaQueryWrapperX;
|
||||
import com.cf.imes.framework.mybatis.core.query.MPJLambdaWrapperX;
|
||||
import com.cf.imes.framework.security.core.LoginUser;
|
||||
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderSource;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.bo.ProcessGroupList;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.bo.ProcessStepAreaIds;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.bo.ProcessStepSalaryIds;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.dto.Material;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.OptimizeRemainPlate;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.PrintOrderPackReqVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.PrintOrderPartsRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.SavePlanPlateResultReqVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.*;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
|
||||
import com.cf.imes.module.executor.controller.admin.plate.vo.PlateDetailVO;
|
||||
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;
|
||||
@@ -41,8 +34,6 @@ 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.OutlineDTO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.remainplaten.PointDTO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.remainplaten.RemainPlateDO;
|
||||
import com.cf.imes.module.executor.dal.mysql.goods.GoodsMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.order.OrderMapper;
|
||||
@@ -54,33 +45,32 @@ import com.cf.imes.module.executor.dal.mysql.processStep.ProcessStepMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.processStepItem.ProcessStepItemMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.remainplaten.RemainPlateMapper;
|
||||
import com.cf.imes.module.executor.enums.ErrorCodeConstants;
|
||||
import com.cf.imes.module.executor.util.RandomUtils;
|
||||
import com.cf.imes.module.executor.util.RectangleChecker;
|
||||
import com.cf.imes.module.infra.api.file.FileApi;
|
||||
import com.cf.imes.module.infra.api.file.dto.FileCreateReqDTO;
|
||||
import com.cf.imes.module.system.api.dataSource.DataSourceApi;
|
||||
import com.cf.imes.module.system.api.machine.MachineApi;
|
||||
import com.cf.imes.module.system.api.process.ProcessApi;
|
||||
import com.cf.imes.module.system.api.process.dto.ProcessDTO;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR;
|
||||
import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.UNKNOWN;
|
||||
import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.*;
|
||||
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.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
|
||||
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_NOT_EXISTS;
|
||||
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.PLAN_NOT_EXISTS;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import static com.cf.imes.module.system.enums.ErrorCodeConstants.INSUFFICIENT_PERMISSIONS;
|
||||
|
||||
/**
|
||||
* @author there
|
||||
@@ -163,55 +153,200 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean savePlanPlateResult(SavePlanPlateResult result) {
|
||||
return null;
|
||||
// PlanDO planDO = planMapper.selectById(result.getPlanId());
|
||||
// if (Objects.isNull(planDO)) {
|
||||
// throw exception(PLAN_NOT_EXISTS);
|
||||
// }
|
||||
// try {
|
||||
// String placeDateFileUrlSource = planDO.getPlaceDateFileUrl();
|
||||
// String placeOrderFileUrlSource = planDO.getPlaceOrderFileUrl();
|
||||
// if (StrUtil.isNotBlank(placeDateFileUrlSource)) {
|
||||
// fileApi.deleteFileByPath(placeDateFileUrlSource).checkError();
|
||||
// }
|
||||
// if (StrUtil.isNotBlank(placeOrderFileUrlSource)) {
|
||||
// fileApi.deleteFileByPath(placeOrderFileUrlSource).checkError();
|
||||
// }
|
||||
// FileCreateReqDTO fileCreateReqDTO = new FileCreateReqDTO();
|
||||
//
|
||||
// fileCreateReqDTO.setContent(result.getPlaceData().getBytes());
|
||||
// fileCreateReqDTO.setName(result.getPlaceData().getOriginalFilename());
|
||||
// String placeDateFileUrl = fileApi.createFile(fileCreateReqDTO).getCheckedData();
|
||||
//
|
||||
// fileCreateReqDTO.setContent(result.getPlaceOrder().getBytes());
|
||||
// fileCreateReqDTO.setName(result.getPlaceOrder().getOriginalFilename());
|
||||
// String placeOrderFileUrl = fileApi.createFile(fileCreateReqDTO).getCheckedData();
|
||||
//
|
||||
// PlanDO updateDO = PlanDO.builder()
|
||||
// .id(result.getPlanId())
|
||||
// .placeDateFileUrl(placeOrderFileUrl)
|
||||
// .placeOrderFileUrl(placeDateFileUrl)
|
||||
// .build();
|
||||
// planMapper.updateById(updateDO);
|
||||
//
|
||||
// } catch (IOException e) {
|
||||
// throw exception(UNKNOWN);
|
||||
// }
|
||||
// return Boolean.TRUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean commit(Long planId) {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean commit(Long planId, List<Long> goodsNo) {
|
||||
|
||||
PlanDO planDO = planMapper.selectById(planId);
|
||||
if (Objects.isNull(planDO)) {
|
||||
throw exception(PLAN_NOT_EXISTS);
|
||||
}
|
||||
planMapper.updateById(PlanDO.builder()
|
||||
.id(planId)
|
||||
.status(PlanStatusEnum.DURINGCUTTING.getStatus())
|
||||
.build());
|
||||
|
||||
|
||||
// todo 目前只解决了非混单的情况,混单情况待解决
|
||||
List<OptimizeBoardModelDO> optimizeBoardModelDOS = buildBoardByPlanId(planId, ORDER_REMAIN_PLATE_MODEL, 10);
|
||||
|
||||
OptimizeBoardModelDO optimizeBoardModelDO = optimizeBoardModelDOS.get(0);
|
||||
|
||||
List<Long> plateNo = new ArrayList<>();
|
||||
|
||||
// 创建一个列表存储 BlockPlaceInfo 对象,将优化的小板信息拿出,获取到小板编号,查询生产单,修改生产单的状态
|
||||
List<BlockPlaceInfo> outputList = new ArrayList<>();
|
||||
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
|
||||
try {
|
||||
// 解析 JSON 字符串
|
||||
JsonNode jsonArray = mapper.readTree(optimizeBoardModelDO.getBlockPlaceInfo());
|
||||
|
||||
// 遍历 JSON 数组并提取所需字段
|
||||
if (jsonArray.isArray()) {
|
||||
for (JsonNode jsonNode : jsonArray) {
|
||||
Long bi = jsonNode.get("bi").asLong();
|
||||
Long bo = jsonNode.get("bo").asLong();
|
||||
outputList.add(new BlockPlaceInfo(bi,bo));
|
||||
}
|
||||
}
|
||||
} catch (JsonProcessingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
for (Long goods : goodsNo) {
|
||||
plateNo.addAll(outputList.stream().filter(f -> f.getBi().equals(goods)).map(BlockPlaceInfo::getBo).distinct().toList());
|
||||
}
|
||||
|
||||
|
||||
|
||||
List<PlateDO> plateDOS = plateMapper.selectPlateByPlateNo(plateNo.stream().distinct().toList(), getUserOrganId());
|
||||
|
||||
|
||||
List<Long> orderIds = plateDOS.stream().map(PlateDO::getOrderId).distinct().toList();
|
||||
|
||||
|
||||
|
||||
// 修改生产单的状态
|
||||
orderMapper.updateOrderListStatus(orderIds,OrderStatusEnum.IN_PRODUCTION.getStatus(),getUserOrganId());
|
||||
|
||||
|
||||
CutedBoardInfo cutedBoardInfo = optimizeBoardModelDO.getCutedBoardInfo();
|
||||
|
||||
|
||||
// 获取原排单的开料大板数 + 新增的开料大板数
|
||||
long cutedBoardNumber = cutedBoardInfo.getCutedBoardNumber() ;
|
||||
|
||||
|
||||
cutedBoardNumber += goodsNo.size();
|
||||
|
||||
|
||||
// 获取原排单的已开料的大板编号
|
||||
List<Long> cutedBoardList = cutedBoardInfo.getCutedBoardList() == null ? new ArrayList<>() : cutedBoardInfo.getCutedBoardList();
|
||||
|
||||
|
||||
// 将新开料的大板编号添加到已开料的大板编号中
|
||||
cutedBoardList.addAll(goodsNo);
|
||||
|
||||
|
||||
// 将需要更新更新的数据更新到原数据中
|
||||
cutedBoardInfo.setCutedBoardNumber(cutedBoardNumber);
|
||||
cutedBoardInfo.setCutedBoardList(cutedBoardList);
|
||||
|
||||
|
||||
// 更新开料相关的数据
|
||||
HashMap<String, Object> objectObjectHashMap = new HashMap<>();
|
||||
objectObjectHashMap.put("cutedBoardInfo",cutedBoardInfo);
|
||||
|
||||
try {
|
||||
|
||||
esDocumentService.updateById(ORDER_REMAIN_PLATE_MODEL, optimizeBoardModelDO.getId(), HashMap.class, objectObjectHashMap);
|
||||
|
||||
}catch (IOException e) {
|
||||
log.error(e.getMessage());
|
||||
throw new ServiceException(ES_ERROR_UPDATE);
|
||||
}
|
||||
|
||||
if(cutedBoardNumber > 0){
|
||||
|
||||
planDO.setStatus(PlanStatusEnum.OPENING.getStatus());
|
||||
planMapper.updateById(planDO);
|
||||
|
||||
}
|
||||
|
||||
if(optimizeBoardModelDO.getBoardCount() == cutedBoardNumber){
|
||||
|
||||
planDO.setStatus(PlanStatusEnum.OPENED.getStatus());
|
||||
planDO.setProduceTime(LocalDateTime.now());
|
||||
|
||||
planMapper.updateById(planDO);
|
||||
|
||||
}
|
||||
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean updateCuttingStatus(CuttingStatusRespVO respVO) {
|
||||
|
||||
Long planId = respVO.getPlanId();
|
||||
List<Long> goodsNo = respVO.getGoodsNo();
|
||||
|
||||
// LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
||||
// assert loginUser != null;
|
||||
//
|
||||
// if(!loginUser.getIsSupAdmin()){
|
||||
//
|
||||
// throw exception(INSUFFICIENT_PERMISSIONS);
|
||||
//
|
||||
// }
|
||||
|
||||
PlanDO planDO = planMapper.selectById(planId);
|
||||
if (planDO == null) {
|
||||
throw exception(PLAN_NOT_EXISTS);
|
||||
}
|
||||
|
||||
// todo 目前只解决了非混单的情况,混单情况待解决
|
||||
List<OptimizeBoardModelDO> optimizeBoardModelDOS = buildBoardByPlanId(planId, ORDER_REMAIN_PLATE_MODEL, 99);
|
||||
|
||||
OptimizeBoardModelDO optimizeBoardModelDO = optimizeBoardModelDOS.get(0);
|
||||
|
||||
CutedBoardInfo cutedBoardInfo = optimizeBoardModelDO.getCutedBoardInfo() == null ? new CutedBoardInfo() : optimizeBoardModelDO.getCutedBoardInfo();
|
||||
|
||||
|
||||
if(cutedBoardInfo.getCutedBoardNumber() != null) {
|
||||
// 已经开料的大板信息
|
||||
List<Long> cutedBoardList = cutedBoardInfo.getCutedBoardList();
|
||||
// 开料的大板数量
|
||||
long cutedBoardNumber = cutedBoardInfo.getCutedBoardNumber();
|
||||
|
||||
// 移除取消开料的数据
|
||||
cutedBoardList.removeAll(goodsNo);
|
||||
// 减去取消开料的大板数量
|
||||
cutedBoardNumber -= (goodsNo.isEmpty() ? 0 : goodsNo.size());
|
||||
|
||||
|
||||
// 将需要更新更新的数据更新到原数据中
|
||||
cutedBoardInfo.setCutedBoardNumber(cutedBoardNumber);
|
||||
cutedBoardInfo.setCutedBoardList(cutedBoardList);
|
||||
|
||||
|
||||
// 更新开料相关的数据
|
||||
HashMap<String, Object> objectObjectHashMap = new HashMap<>();
|
||||
objectObjectHashMap.put("cutedBoardInfo", cutedBoardInfo);
|
||||
|
||||
try {
|
||||
|
||||
esDocumentService.updateById(ORDER_REMAIN_PLATE_MODEL, optimizeBoardModelDO.getId(), HashMap.class, objectObjectHashMap);
|
||||
|
||||
} catch (IOException e) {
|
||||
log.error(e.getMessage());
|
||||
throw new ServiceException(ES_ERROR_UPDATE);
|
||||
}
|
||||
|
||||
if(cutedBoardInfo.getCutedBoardNumber() == 0){
|
||||
|
||||
planDO.setStatus(PlanStatusEnum.NOCUTTING.getStatus());
|
||||
planDO.setProduceTime(null);
|
||||
planMapper.updateById(planDO);
|
||||
|
||||
}
|
||||
|
||||
if(planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus()) && cutedBoardInfo.getCutedBoardNumber() > 0 && cutedBoardInfo.getCutedBoardNumber() < optimizeBoardModelDO.getBoardCount() ){
|
||||
planDO.setStatus(PlanStatusEnum.OPENING.getStatus());
|
||||
planDO.setProduceTime(null);
|
||||
planMapper.updateById(planDO);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// todo 待确认,是否要达到这样的需求 : 生产单的状态也应该更改,如果大板变为未开料,生产单对应的状态应该变为已排单(这时取消开料对应的大板对应的生产单应该在其他排单中不存在,可修改)
|
||||
|
||||
|
||||
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
@@ -224,7 +359,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
}
|
||||
planMapper.updateById(PlanDO.builder()
|
||||
.id(planId)
|
||||
.status(PlanStatusEnum.OPENEDMATERIAL.getStatus())
|
||||
.status(PlanStatusEnum.OPENED.getStatus())
|
||||
.produceTime(LocalDateTime.now())
|
||||
.build());
|
||||
|
||||
@@ -281,93 +416,6 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public OptimizeParamResVO getOptimizeParam(Long planId) {
|
||||
//小板列表
|
||||
List<PlateParam> plates = plateMapper.selectPlateList(planId);
|
||||
//余料规格列表
|
||||
List<RemainPlateDO> remainPlateDOS = remainPlateMapper.selectList(new LambdaQueryWrapperX<RemainPlateDO>().eq(RemainPlateDO::getPlanId, planId));
|
||||
//余料板规格
|
||||
List<OptimizeParamResVO.RawSize> rawSizes = new ArrayList<>();
|
||||
List<Integer> remainPlateCount = new ArrayList<>();
|
||||
if (CollectionUtil.isNotEmpty(remainPlateDOS)) {
|
||||
Map<String, List<OutlineDTO>> map = remainPlateDOS.stream()
|
||||
.map(e -> OutlineDTO.builder()
|
||||
.list(JsonUtils.parseArray(e.getOutLineJson(), PointDTO.class))
|
||||
.length(e.getLength())
|
||||
.width(e.getWidth())
|
||||
.build()
|
||||
)
|
||||
.filter(e -> e.getList().size() == 4 && RectangleChecker.checkRectangle(e.getList()))
|
||||
.collect(Collectors.groupingBy(e -> e.getLength() + "," + e.getWidth()));
|
||||
map.entrySet().forEach(e -> {
|
||||
String[] split = e.getKey().split(",");
|
||||
BigDecimal length = new BigDecimal(split[0]);
|
||||
BigDecimal width = new BigDecimal(split[1]);
|
||||
List<OutlineDTO> outlines = e.getValue();
|
||||
rawSizes.add(OptimizeParamResVO.RawSize.builder()
|
||||
.length(length)
|
||||
.width(width)
|
||||
.x(new BigDecimal(outlines.get(0).getList().get(0).getX()))
|
||||
.y(new BigDecimal(outlines.get(0).getList().get(0).getY()))
|
||||
.build());
|
||||
remainPlateCount.add(outlines.size());
|
||||
});
|
||||
}
|
||||
|
||||
//大板规格
|
||||
/**
|
||||
* select * from order_goods a
|
||||
* left join order_plate b on a.goods_id = b.goods_id
|
||||
* left join order_item c on b.id = c.plate_id
|
||||
* left join order_plan_item d on c.id = d.item_id
|
||||
* where d.plan_id = 1769638780093857792
|
||||
*/
|
||||
MPJLambdaWrapper<GoodsDO> wrapper = new MPJLambdaWrapperX<GoodsDO>()
|
||||
.distinct()
|
||||
.select(GoodsDO::getId, GoodsDO::getWidth, GoodsDO::getHeight)
|
||||
.leftJoin(PlateDO.class, PlateDO::getGoodsId, GoodsDO::getGoodsId)
|
||||
.leftJoin(OrderItemDO.class, OrderItemDO::getPlanId, PlateDO::getPlateNo)
|
||||
.leftJoin(PlanItemDO.class, PlanItemDO::getItemId, OrderItemDO::getId)
|
||||
.eq(PlanItemDO::getPlanId, planId);
|
||||
|
||||
GoodsDO goodsDO = goodsMapper.selectJoinOne(GoodsDO.class, wrapper);
|
||||
rawSizes.add(OptimizeParamResVO.RawSize.builder()
|
||||
.width(goodsDO.getWidth())
|
||||
.length(goodsDO.getHeight())
|
||||
.x(new BigDecimal("0"))
|
||||
.y(new BigDecimal("0"))
|
||||
.build());
|
||||
return OptimizeParamResVO.builder()
|
||||
.plates(plates)
|
||||
.rawSizes(rawSizes)
|
||||
.remainPlateCount(remainPlateCount)
|
||||
.build();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public OptimizeParamRespVO getOptimizePlanParam(Long planId) {
|
||||
|
||||
OptimizeParamRespVO optimizePlanParam = planMapper.getOptimizePlanParam(planId);
|
||||
|
||||
if (Objects.isNull(optimizePlanParam)) {
|
||||
return RandomUtils.randomPojo(OptimizeParamRespVO.class);
|
||||
}
|
||||
//暂时先mock
|
||||
ArrayList<Material> list = new ArrayList<>();
|
||||
list.add(RandomUtils.randomPojo(Material.class));
|
||||
list.add(RandomUtils.randomPojo(Material.class));
|
||||
ArrayList<PlateDetailVO> plateDetailVOS = new ArrayList<>();
|
||||
plateDetailVOS.add(RandomUtils.randomPojo(PlateDetailVO.class));
|
||||
plateDetailVOS.add(RandomUtils.randomPojo(PlateDetailVO.class));
|
||||
plateDetailVOS.add(RandomUtils.randomPojo(PlateDetailVO.class));
|
||||
if (CollectionUtil.isNotEmpty(optimizePlanParam.getPlateList())) {
|
||||
optimizePlanParam.getPlateList().get(0).setPlateDetailList(plateDetailVOS);
|
||||
}
|
||||
optimizePlanParam.setMaterialList(list);
|
||||
return optimizePlanParam;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> getLabelDataSourceValue(GetSourceDataReq req) {
|
||||
@@ -383,9 +431,9 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public OrderSource getOrderSource(Long orderId, Long planId, Long machineId) {
|
||||
if (!Objects.isNull(orderId) && !Objects.isNull(planId)) {
|
||||
throw exception(154112, "生产单id与排单id只能传一个");
|
||||
public OrderSource getOrderSource(Long orderId, Long planId, Long machineId,List<Long> ids) {
|
||||
if (!Objects.isNull(orderId) && !Objects.isNull(planId) && !Objects.isNull(ids)) {
|
||||
throw exception(154112, "生产单id与排单id与大板分类ID只能传一个");
|
||||
}
|
||||
OrderSource orderSource;
|
||||
if (ObjectUtil.isNotNull(orderId)) {
|
||||
@@ -398,6 +446,11 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
orderSource.setMachineDTO(machineApi.getMachineDetail(machineId).getCheckedData());
|
||||
return orderSource;
|
||||
}
|
||||
if (ObjectUtil.isNotNull(ids)) {
|
||||
orderSource = getOrderSourceByGoodId(ids);
|
||||
orderSource.setMachineDTO(machineApi.getMachineDetail(machineId).getCheckedData());
|
||||
return orderSource;
|
||||
}
|
||||
throw exception(ErrorCodeConstants.SOURCE_NOT_EXITS_ERROR);
|
||||
|
||||
}
|
||||
@@ -476,7 +529,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
throw exception(PLAN_NOT_EXISTS);
|
||||
}
|
||||
MPJLambdaWrapper<OrderItemDO> wrapper = new MPJLambdaWrapperX<OrderItemDO>()
|
||||
.select(OrderItemDO::getOrderId)
|
||||
.select(OrderItemDO::getOrderId,OrderItemDO::getPlateId)
|
||||
.rightJoin(PlanItemDO.class, PlanItemDO::getItemId, OrderItemDO::getId)
|
||||
.eq(PlanItemDO::getPlanId, planId)
|
||||
.isNotNull(OrderItemDO::getId);
|
||||
@@ -488,9 +541,14 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
|
||||
// List<GoodsDO> goodsDOS = goodsMapper.selectList(new LambdaQueryWrapperX<GoodsDO>().in(GoodsDO::getOrderId, orderIds));
|
||||
|
||||
List<GoodsReqVO> goodsDOS = goodsMapper.selectGoodsListByOrderIds(orderIds,getUserOrganId());
|
||||
|
||||
List<PlateDetialRespVO> plateDOS = plateMapper.selectPlateDetialListByIds(orderIds,getUserOrganId());
|
||||
List<Long> plateIds = orderItemDOS.stream().map(OrderItemDO::getPlateId).distinct().toList();
|
||||
|
||||
List<Long> goodsIds = plateMapper.selectBatchIds(plateIds).stream().map(PlateDO::getGoodsId).distinct().toList();
|
||||
|
||||
List<GoodsReqVO> goodsDOS = goodsMapper.selectGoodsListByOrderIds(goodsIds,getUserOrganId());
|
||||
|
||||
List<PlateDetialRespVO> plateDOS = plateMapper.selectPlateDetialListByIds(plateIds,getUserOrganId());
|
||||
|
||||
for (PlateDetialRespVO plateDetailsRespVO : plateDOS) {
|
||||
String name = "";
|
||||
@@ -544,38 +602,102 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
}
|
||||
|
||||
|
||||
public OrderSource getOrderSourceByGoodId(List<Long> ids) {
|
||||
|
||||
// PlanDO planDO = planMapper.selectById(planId);
|
||||
// if (Objects.isNull(planDO)) {
|
||||
// throw exception(PLAN_NOT_EXISTS);
|
||||
// }
|
||||
|
||||
|
||||
// List<GoodsDO> goodsDOS = goodsMapper.selectBatchIds(goodIds);
|
||||
|
||||
List<GoodsReqVO> goodsReqVOS = goodsMapper.selectJoinList(GoodsReqVO.class, new MPJLambdaWrapperX<GoodsDO>()
|
||||
|
||||
.leftJoin(RemainPlateDO.class, RemainPlateDO::getGoodsId, GoodsDO::getId)
|
||||
.selectAll(GoodsDO.class)
|
||||
.selectAs(RemainPlateDO::getId,"remainId")
|
||||
.isNotNull(PlanItemDO::getId)
|
||||
.eq(GoodsDO::getOrganId, getUserOrganId())
|
||||
.in(GoodsDO::getId, ids));
|
||||
|
||||
|
||||
|
||||
List<Long> orderIds = goodsReqVOS.stream().map(GoodsReqVO::getOrderId).distinct().toList();
|
||||
|
||||
List<OrderDO> orderDOS = orderMapper.selectBatchIds(orderIds);
|
||||
|
||||
List<PlateDetialRespVO> plateDetialRespVOS = plateMapper.selectPlateListByGoodIds(ids, getUserOrganId());
|
||||
|
||||
|
||||
for (PlateDetialRespVO plateDetailsRespVO : plateDetialRespVOS) {
|
||||
String name = "";
|
||||
if(!plateDetailsRespVO.getProcessGroupLists().isEmpty()) {
|
||||
for (ProcessGroupList groupNameList : plateDetailsRespVO.getProcessGroupLists()) {
|
||||
// 去除最后的逗号
|
||||
name += groupNameList.getGroupName() + ",";
|
||||
|
||||
}
|
||||
name = name.substring(0, name.length() - 1);
|
||||
}
|
||||
|
||||
plateDetailsRespVO.setProcessGroupName(name);
|
||||
|
||||
plateDetailsRespVO.setGoodsId(goodsReqVOS
|
||||
.stream()
|
||||
.filter(f->f.getId().equals(plateDetailsRespVO.getId()))
|
||||
.map(GoodsReqVO::getGoodsId)
|
||||
.findAny().orElse(null));
|
||||
}
|
||||
|
||||
|
||||
// 造型数据的尺寸长度
|
||||
Integer orderModelSize = plateDetialRespVOS.size();
|
||||
|
||||
List<OrderModelDO> orderModelDOS = buildRespByOrderIds(orderIds, ORDER_PLATE_MODEL, orderModelSize);
|
||||
|
||||
|
||||
// // 查询生产单对应的配件信息
|
||||
// List<PrintOrderPartsRespVO> printOrderPartsRespVOS = orderPartsMapper.selectPartList(orderIds, getUserOrganId());
|
||||
//
|
||||
// // 查询生产单对应的包裹信息
|
||||
// List<PrintOrderPackReqVO> printOrderPackReqVOS = orderItemMapper.selectPackList(orderIds, getUserOrganId());
|
||||
|
||||
return OrderSource.builder()
|
||||
.orderList(orderDOS)
|
||||
.goodsList(goodsReqVOS)
|
||||
.plateList(plateDetialRespVOS)
|
||||
.plateModels(orderModelDOS)
|
||||
.build();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 保存优化后的数据
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void saveOptimizationResults(SavePlanPlateResultReqVO req) {
|
||||
|
||||
|
||||
// // 判断当前的大板数据是否已经优化,有优化,更新,没有,新增
|
||||
// if (req.getOptimizeBoardModelDOS().get(0).getIsOptimized().equals(true)) {
|
||||
// try {
|
||||
// // 更新大板的优化数据
|
||||
// BulkResponse bulkResponse = esDocumentService.bulkUpdate(ORDER_REMAIN_PLATE_MODEL, req.getOptimizeBoardModelDOS());
|
||||
// boolean errors = bulkResponse.errors();
|
||||
// if (errors) {
|
||||
// log.error(bulkResponse.items().toString());
|
||||
// throw new ServiceException(500, "未知异常");
|
||||
// }
|
||||
// } catch (Exception e) {
|
||||
// e.printStackTrace();
|
||||
// log.error(e.getMessage());
|
||||
// throw new RuntimeException(e);
|
||||
// }
|
||||
// }
|
||||
// else {
|
||||
// 先根据排单查找是否有优化数据,如果有,删除
|
||||
List<Long> planIds = req.getOptimizeBoardModelDOS().stream().map(OptimizeBoardModelDO::getPlanId).toList();
|
||||
|
||||
// 保存优化后的大板数据
|
||||
batchSaveBoardModel(req.getOptimizeBoardModelDOS());
|
||||
List<OptimizeBoardModelDO> optimizeBoardModelDOS = buildBoardByPlanIds(planIds, ORDER_REMAIN_PLATE_MODEL, planIds.size());
|
||||
if(!optimizeBoardModelDOS.isEmpty()){
|
||||
|
||||
// }
|
||||
deleteByPlanId(planIds,ORDER_REMAIN_PLATE_MODEL);
|
||||
|
||||
}
|
||||
|
||||
|
||||
// 保存优化后的大板数据
|
||||
batchSaveBoardModel(req.getOptimizeBoardModelDOS());
|
||||
|
||||
|
||||
if (CollectionUtil.isNotEmpty(req.getOptimizeRemainPlates())) {
|
||||
ArrayList<RemainPlateDO> remainPlateDOS = new ArrayList();
|
||||
ArrayList<RemainPlateDO> remainPlateDOS = new ArrayList<>();
|
||||
|
||||
for (OptimizeRemainPlate optimizeRemainPlate : req.getOptimizeRemainPlates()) {
|
||||
remainPlateDOS.add(RemainPlateDO.builder()
|
||||
@@ -603,16 +725,6 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
}
|
||||
|
||||
remainPlateMapper.updateBatch(remainPlateDOS);
|
||||
// for (RemainPlateDO remainPlateDO : remainPlateDOS) {
|
||||
//
|
||||
//// if(remainPlateDO.getId() != null){
|
||||
//// remainPlateMapper.insert(remainPlateDO);
|
||||
////
|
||||
//// }
|
||||
//
|
||||
// remainPlateMapper.updateById(remainPlateDO);
|
||||
//
|
||||
// }
|
||||
|
||||
|
||||
}
|
||||
@@ -622,24 +734,17 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
if (CollectionUtil.isNotEmpty(req.getAddPlateIds())) {
|
||||
|
||||
List<PlateDetialRespVO> addPlates = req.getPlateList().stream()
|
||||
.filter(m -> req.getAddPlateIds().contains(m.getId()))
|
||||
.map(m -> m.setId(null))
|
||||
.filter(m -> req.getAddPlateIds().contains(m.getPlateId()))
|
||||
.map(m -> m.setPlateId(null))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
|
||||
// List<Long> collect = req.getPlateList().stream().map(m -> m.getId()).collect(Collectors.toList());
|
||||
// List<Long> addPlateIds = req.getAddPlateIds().stream().filter(m -> !collect.contains(m)).collect(Collectors.toList());
|
||||
// List<PlateDetialRespVO> addPlates = req.getPlateList().stream()
|
||||
// .filter(m -> addPlateIds.contains(m.getId()))
|
||||
// .map(m->m.setId(null))
|
||||
// .collect(Collectors.toList());
|
||||
// 批量新增小板信息
|
||||
List<PlateDO> plateDOS = BeanUtils.toBean(addPlates, PlateDO.class);
|
||||
|
||||
plateMapper.insertBatch(plateDOS);
|
||||
|
||||
// 批量新增生产单明细表信息
|
||||
ArrayList<OrderItemDO> orderItemDOS = new ArrayList();
|
||||
ArrayList<OrderItemDO> orderItemDOS = new ArrayList<>();
|
||||
|
||||
for (PlateDetialRespVO plateDetialRespVO : req.getPlateList()) {
|
||||
orderItemDOS.add(OrderItemDO.builder()
|
||||
@@ -649,7 +754,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
// .groupId(Long.valueOf(plateDetialRespVO.getProcessGroupId()))
|
||||
.orderId(plateDetialRespVO.getOrderId())
|
||||
.type(1)
|
||||
.plateId(plateDetialRespVO.getId())
|
||||
.plateId(plateDetialRespVO.getPlateId())
|
||||
.build());
|
||||
}
|
||||
|
||||
@@ -782,7 +887,9 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
}
|
||||
}
|
||||
|
||||
private List<OptimizeBoardModelDO> buildBoardByOrderIds(Collection<Long> orderIds, String index, Integer size) {
|
||||
|
||||
@Override
|
||||
public List<OptimizeBoardModelDO> buildBoardByOrderIds(Collection<Long> orderIds, String index, Integer size) {
|
||||
List<FieldValue> fieldValues = orderIds.stream().map(FieldValue::of).toList();
|
||||
SearchRequest.Builder builder = new SearchRequest.Builder();
|
||||
builder.index(index);
|
||||
@@ -802,5 +909,59 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
}
|
||||
|
||||
|
||||
public List<OptimizeBoardModelDO> buildBoardByPlanIds(Collection<Long> planIds, String index, Integer size) {
|
||||
List<FieldValue> fieldValues = planIds.stream().map(FieldValue::of).toList();
|
||||
SearchRequest.Builder builder = new SearchRequest.Builder();
|
||||
builder.index(index);
|
||||
builder.size(size);
|
||||
builder.query(q -> q.terms(b -> b.field("planId").terms(e -> e.value(fieldValues))));
|
||||
try {
|
||||
SearchResponse<OptimizeBoardModelDO> search = elasticsearchClient.search(builder.build(), OptimizeBoardModelDO.class);
|
||||
List<Hit<OptimizeBoardModelDO>> hits = search.hits().hits();
|
||||
if (CollectionUtil.isNotEmpty(hits)) {
|
||||
return hits.stream().map(Hit::source).collect(Collectors.toList());
|
||||
}
|
||||
return new ArrayList<>();
|
||||
} catch (IOException e) {
|
||||
log.error(e.getMessage());
|
||||
throw new ServiceException(INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void deleteByPlanId(List<Long> planIds, String index) {
|
||||
List<FieldValue> fieldValues = planIds.stream().map(FieldValue::of).toList();
|
||||
|
||||
DeleteByQueryRequest.Builder builder = new DeleteByQueryRequest.Builder();
|
||||
builder.index(index);
|
||||
|
||||
builder.query(q -> q.terms(b -> b.field("planId").terms(e -> e.value(fieldValues))));
|
||||
|
||||
try {
|
||||
DeleteByQueryResponse response = elasticsearchClient.deleteByQuery(builder.build());
|
||||
log.info("Deleted {} documents with planId {}", response.deleted(), planIds);
|
||||
} catch (IOException e) {
|
||||
log.error("Error deleting documents with planId {}: {}", planIds, e.getMessage());
|
||||
throw new ServiceException(ES_ERROR_DELETE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@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;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
+8
@@ -72,4 +72,12 @@ public interface OrderStatisticsService {
|
||||
* @return
|
||||
*/
|
||||
Map<String, Object> getOrderPlateAreaGroup(OrderStatisticsReqVO reqVO);
|
||||
|
||||
/**
|
||||
* 大板数量分组统计
|
||||
*
|
||||
* @param reqVO
|
||||
* @return
|
||||
*/
|
||||
Map<String, Object> getBigPlateCountGroup(OrderStatisticsReqVO reqVO);
|
||||
}
|
||||
|
||||
+235
-28
@@ -1,24 +1,43 @@
|
||||
package com.cf.imes.module.executor.service.order;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import co.elastic.clients.elasticsearch.ElasticsearchClient;
|
||||
import co.elastic.clients.elasticsearch._types.FieldValue;
|
||||
import co.elastic.clients.elasticsearch._types.SortOrder;
|
||||
import co.elastic.clients.elasticsearch._types.aggregations.Aggregate;
|
||||
|
||||
import co.elastic.clients.elasticsearch._types.aggregations.CalendarInterval;
|
||||
import co.elastic.clients.elasticsearch._types.aggregations.DateHistogramAggregation;
|
||||
import co.elastic.clients.elasticsearch.core.SearchRequest;
|
||||
import co.elastic.clients.elasticsearch.core.SearchResponse;
|
||||
import co.elastic.clients.json.JsonData;
|
||||
import co.elastic.clients.util.NamedValue;
|
||||
import com.cf.imes.framework.common.enums.OrderStatusEnum;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderGoodsPlateRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsAreaRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsReqVO;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsStatusRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.vo.OrderPlanStatisticsAreaRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.vo.OrderPlanStatisticsCountRespVO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.plate.PlateGoodDO;
|
||||
import com.cf.imes.module.executor.dal.mysql.order.OrderStatisticsMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.plan.PlanMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.plate.OrderPlateStatisticsMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.plate.PlateGoodMapper;
|
||||
import com.cf.imes.module.executor.enums.OrderStatisticsUnit;
|
||||
import com.cf.imes.module.executor.service.optimizeplan.OptimizePlanService;
|
||||
import com.cf.imes.module.system.api.dict.DictDataApi;
|
||||
import com.cf.imes.module.system.api.dict.dto.DictDataRespDTO;
|
||||
import com.cf.imes.module.system.enums.DictTypeConstants;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
@@ -40,6 +59,7 @@ import java.util.stream.Collectors;
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
@Slf4j
|
||||
public class OrderStatisticsServiceImpl implements OrderStatisticsService {
|
||||
@Resource
|
||||
private OrderStatisticsMapper orderStatisticsMapper;
|
||||
@@ -53,9 +73,21 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
|
||||
@Resource
|
||||
private DictDataApi dictDataApi;
|
||||
|
||||
@Resource
|
||||
private PlateGoodMapper plateGoodMapper;
|
||||
|
||||
@Resource
|
||||
private ElasticsearchClient client;
|
||||
|
||||
// 常用的字段key
|
||||
private static final String DATELIST_FIELD_NAME = "dateList";
|
||||
private static final String SERIES_FIELD_NAME = "series";
|
||||
private static final String ORDER_REMAIN_PLATE_MODEL_CREATE_TIME_FIELDNAME = "createTime";
|
||||
private static final String ORDER_REMAIN_PLATE_MODEL_GOODS_GROUP_NAME = "goods_group";
|
||||
private static final String ORDER_REMAIN_PLATE_MODEL_GOODS_COUNT_NAME = "goods_count";
|
||||
private static final String DATE_TIME_FORMATTER_PATTERN_YEAR_MONTH = "yyyy-M";
|
||||
private static final String DATE_TIME_FORMATTER_PATTERN_YEAR_MONTH_DAY = "yyyy-M-d";
|
||||
private static final String ORDER_REMAIN_PLATE_MODEL_GOODS_ID_NAME = "goodsId";
|
||||
|
||||
@Override
|
||||
public Integer orderCount() {
|
||||
@@ -206,18 +238,19 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
|
||||
// 所有的日期集合
|
||||
List<String> dateList = getDateList(reqVO);
|
||||
|
||||
// 查询时间段内数量最多的小板,排序列出数量前10的goods_id
|
||||
// 查询时间段内数量最多的小板,列出数量前10的goods_id
|
||||
List<Long> topTenCountGoodsId = orderPlateStatisticsMapper.selectPlateCountList(reqVO).stream()
|
||||
.sorted(Comparator.comparingLong(OrderGoodsPlateRespVO::getOrderCount).reversed())
|
||||
.map(OrderGoodsPlateRespVO::getGoodsId)
|
||||
.limit(10)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
.toList();
|
||||
|
||||
// 前十goods_id基于时间分组
|
||||
Map<String, List<OrderGoodsPlateRespVO>> orderGoodsPlateRespMap = orderPlateStatisticsMapper.selectTopTenPlateCountListGroupByOrderDate(topTenCountGoodsId, reqVO).stream()
|
||||
.sorted(Comparator.naturalOrder())
|
||||
.collect(Collectors.groupingBy(OrderGoodsPlateRespVO::getOrderDate, LinkedHashMap::new, Collectors.toList()));
|
||||
Map<String, List<OrderGoodsPlateRespVO>> orderGoodsPlateRespMap = new HashMap<>();
|
||||
if (CollUtil.isNotEmpty(topTenCountGoodsId)) {
|
||||
orderGoodsPlateRespMap = orderPlateStatisticsMapper.selectTopTenPlateCountListGroupByOrderDate(topTenCountGoodsId, reqVO).stream()
|
||||
.sorted(Comparator.naturalOrder())
|
||||
.collect(Collectors.groupingBy(OrderGoodsPlateRespVO::getOrderDate, LinkedHashMap::new, Collectors.toList()));
|
||||
}
|
||||
|
||||
|
||||
// 获取所有商品{goodsId:respvo},根据top10排序
|
||||
Map<Long, OrderGoodsPlateRespVO> goodsMap = new LinkedHashMap<>();
|
||||
@@ -225,7 +258,7 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
|
||||
List<OrderGoodsPlateRespVO> list = orderGoodsPlateRespMap.values().stream()
|
||||
.flatMap(List::stream)
|
||||
.filter(vo -> vo.getGoodsId().equals(id))
|
||||
.collect(Collectors.toList());
|
||||
.toList();
|
||||
if (!list.isEmpty()) {
|
||||
// goodsId相同,其他属性任取
|
||||
goodsMap.put(id, list.get(0));
|
||||
@@ -277,18 +310,19 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
|
||||
// 所有的日期集合
|
||||
List<String> dateList = getDateList(reqVO);
|
||||
|
||||
// 查询时间段内面积最多的小板,排序列出前10面积的goods_id
|
||||
// 查询时间段内面积最多的小板,列出前10面积的goods_id
|
||||
List<Long> topTenCountGoodsId = orderPlateStatisticsMapper.selectPlateAreaList(reqVO).stream()
|
||||
.sorted(Comparator.comparing(OrderGoodsPlateRespVO::getOrderArea).reversed())
|
||||
.map(OrderGoodsPlateRespVO::getGoodsId)
|
||||
.limit(10)
|
||||
.collect(Collectors.toList());
|
||||
.toList();
|
||||
|
||||
Map<String, List<OrderGoodsPlateRespVO>> orderGoodsPlateRespMap = new HashMap<>();
|
||||
if (CollUtil.isNotEmpty(topTenCountGoodsId)) {
|
||||
// 前十goods_id基于时间分组
|
||||
orderGoodsPlateRespMap = orderPlateStatisticsMapper.selectTopTenPlateAreaListGroupByOrderDate(topTenCountGoodsId, reqVO).stream()
|
||||
.sorted(Comparator.naturalOrder())
|
||||
.collect(Collectors.groupingBy(OrderGoodsPlateRespVO::getOrderDate, LinkedHashMap::new, Collectors.toList()));
|
||||
}
|
||||
|
||||
// 前十goods_id基于时间分组
|
||||
Map<String, List<OrderGoodsPlateRespVO>> orderGoodsPlateRespMap = orderPlateStatisticsMapper.selectTopTenPlateAreaListGroupByOrderDate(topTenCountGoodsId, reqVO).stream()
|
||||
.sorted(Comparator.naturalOrder())
|
||||
.collect(Collectors.groupingBy(OrderGoodsPlateRespVO::getOrderDate, LinkedHashMap::new, Collectors.toList()));
|
||||
|
||||
// 获取所有商品{goodsId:respvo},根据top10排序
|
||||
Map<Long, OrderGoodsPlateRespVO> goodsMap = new LinkedHashMap<>();
|
||||
@@ -296,7 +330,7 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
|
||||
List<OrderGoodsPlateRespVO> list = orderGoodsPlateRespMap.values().stream()
|
||||
.flatMap(List::stream)
|
||||
.filter(vo -> vo.getGoodsId().equals(id))
|
||||
.collect(Collectors.toList());
|
||||
.toList();
|
||||
if (!list.isEmpty()) {
|
||||
// goodsId相同,其他属性任取
|
||||
goodsMap.put(id, list.get(0));
|
||||
@@ -341,6 +375,184 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> getBigPlateCountGroup(OrderStatisticsReqVO reqVO) {
|
||||
Map<String, Object> resultMap = new LinkedHashMap<>();
|
||||
Integer unit = reqVO.getUnit();
|
||||
|
||||
// 所有的日期集合
|
||||
List<String> dateList = getDateList(reqVO);
|
||||
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||
|
||||
SearchResponse<Map> response;
|
||||
try {
|
||||
// 查询创建时间段内,数量最多的goods_id前十
|
||||
SearchRequest searchRequest = new SearchRequest.Builder()
|
||||
.size(0)
|
||||
.index(OptimizePlanService.ORDER_REMAIN_PLATE_MODEL)
|
||||
.query(q -> q.range(r -> r.field(ORDER_REMAIN_PLATE_MODEL_CREATE_TIME_FIELDNAME)
|
||||
.gte(JsonData.of(reqVO.getCreateTime()[0].format(dateTimeFormatter)))
|
||||
.lte(JsonData.of(reqVO.getCreateTime()[1].format(dateTimeFormatter))))
|
||||
)
|
||||
.aggregations(ORDER_REMAIN_PLATE_MODEL_GOODS_GROUP_NAME,
|
||||
agg -> agg.terms(terms -> terms.field(ORDER_REMAIN_PLATE_MODEL_GOODS_ID_NAME).size(10).order(new NamedValue<>(ORDER_REMAIN_PLATE_MODEL_GOODS_COUNT_NAME, SortOrder.Desc)))
|
||||
.aggregations(ORDER_REMAIN_PLATE_MODEL_GOODS_COUNT_NAME, sumAgg -> sumAgg.sum(sum -> sum.field("boardCount")))
|
||||
)
|
||||
.build();
|
||||
|
||||
response = client.search(searchRequest, Map.class);
|
||||
|
||||
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}}
|
||||
Map<String, List<OrderGoodsPlateRespVO>> goodsDateGroupMap = new HashMap<>();
|
||||
/**
|
||||
* 获取数量最大前十的goodsId列表
|
||||
*/
|
||||
goodsCountAgg.lterms().buckets().array().forEach(e -> goodsIds.add(e.key()));
|
||||
|
||||
if (CollUtil.isNotEmpty(goodsIds)) {
|
||||
List<FieldValue> goodsIdFieldValueList = goodsIds.stream().map(FieldValue::of).toList();
|
||||
// 查询创建时间段内,数量最多的goods_id前十下的数据,按goods_id和日期分组
|
||||
SearchRequest dateGroupRequest = new SearchRequest.Builder()
|
||||
.size(0)
|
||||
.index(OptimizePlanService.ORDER_REMAIN_PLATE_MODEL)
|
||||
.query(q -> q.range(r -> r.field(ORDER_REMAIN_PLATE_MODEL_CREATE_TIME_FIELDNAME)
|
||||
.gte(JsonData.of(reqVO.getCreateTime()[0].format(dateTimeFormatter)))
|
||||
.lte(JsonData.of(reqVO.getCreateTime()[1].format(dateTimeFormatter))))
|
||||
)
|
||||
.query(q -> q.bool(b -> b.must(m -> m.terms(t -> t.field(ORDER_REMAIN_PLATE_MODEL_GOODS_ID_NAME).terms(tv -> tv.value(goodsIdFieldValueList))))))
|
||||
.query(q -> q.match(m -> m.field("organId").query(SecurityFrameworkUtils.getUserOrganId())))
|
||||
.aggregations(ORDER_REMAIN_PLATE_MODEL_GOODS_GROUP_NAME,
|
||||
agg -> agg.terms(terms -> terms.field(ORDER_REMAIN_PLATE_MODEL_GOODS_ID_NAME).order(new NamedValue<>(ORDER_REMAIN_PLATE_MODEL_GOODS_COUNT_NAME, SortOrder.Desc)))
|
||||
.aggregations("date_group", dateAgg -> dateAgg.dateHistogram(date -> getDateHistogram(unit, date.field(ORDER_REMAIN_PLATE_MODEL_CREATE_TIME_FIELDNAME))))
|
||||
.aggregations(ORDER_REMAIN_PLATE_MODEL_GOODS_COUNT_NAME, sumAgg -> sumAgg.sum(sum -> sum.field("boardCount")))
|
||||
)
|
||||
.build();
|
||||
response = client.search(dateGroupRequest, Map.class);
|
||||
Map<String, Aggregate> goodsDateCountAggMap = response.aggregations();
|
||||
Aggregate goodsDateAgg = goodsDateCountAggMap.get(ORDER_REMAIN_PLATE_MODEL_GOODS_GROUP_NAME);
|
||||
|
||||
|
||||
goodsDateAgg.lterms().buckets().array().forEach(goodsDateAggBucket -> {
|
||||
Long goodsId = goodsDateAggBucket.key();
|
||||
// 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();
|
||||
List<OrderGoodsPlateRespVO> orderGoodsPlateRespVOS = goodsDateGroupMap.get(dateStr);
|
||||
if (ObjectUtil.isNotNull(orderGoodsPlateRespVOS)) {
|
||||
orderGoodsPlateRespVOS.add(vo);
|
||||
} else {
|
||||
ArrayList<OrderGoodsPlateRespVO> goodsPlateRespVOS = new ArrayList<>();
|
||||
goodsPlateRespVOS.add(vo);
|
||||
goodsDateGroupMap.put(dateStr, goodsPlateRespVOS);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 遍历所有goods_id
|
||||
List<Map<String, Object>> series = new ArrayList<>();
|
||||
for (Long goodsId : goodsIds) {
|
||||
Map<String, Object> seriesItem = new HashMap<>();
|
||||
int[] countArr = new int[dateList.size()];
|
||||
|
||||
// 遍历完整的日期范围
|
||||
int index = 0;
|
||||
for (String dateStr : dateList) {
|
||||
// 查找匹配的goodsId
|
||||
List<OrderGoodsPlateRespVO> orderGoodsPlateRespVOS = goodsDateGroupMap.get(dateStr);
|
||||
int count = 0;
|
||||
if (orderGoodsPlateRespVOS != null) {
|
||||
count = orderGoodsPlateRespVOS.stream()
|
||||
.filter(respVO -> Objects.equals(goodsId, respVO.getGoodsId()))
|
||||
.map(OrderGoodsPlateRespVO::getOrderCount)
|
||||
.findFirst().orElse(0);
|
||||
}
|
||||
countArr[index++] = count;
|
||||
}
|
||||
|
||||
seriesItem.put("data", countArr);
|
||||
seriesItem.put("id", goodsId);
|
||||
// 材质-商品名称-颜色-纹理-宽-高-厚-品牌
|
||||
List<PlateGoodDO> plateGoodDOList = plateGoodMapper.selectList(new LambdaQueryWrapperX<PlateGoodDO>().eq(PlateGoodDO::getGoodsId, goodsId));
|
||||
if (CollUtil.isEmpty(plateGoodDOList)) {
|
||||
// 没有对应大板不展示
|
||||
log.error("[getBigPlateCountGroup][统计大板数量,查询大板{} 不存在]", goodsId);
|
||||
continue;
|
||||
}
|
||||
// 任意取一个类型
|
||||
PlateGoodDO plateGoodDO = plateGoodDOList.get(0);
|
||||
seriesItem.put("name", plateGoodDO.getMaterial() + "-" + plateGoodDO.getGoodsName() +
|
||||
"-" + plateGoodDO.getColor() + "-" + getTextureFromDict(plateGoodDO) + "-" + stripTrailingZeros(BigDecimal.valueOf(plateGoodDO.getWidth())) +
|
||||
"×" + stripTrailingZeros(BigDecimal.valueOf(plateGoodDO.getHeight())) + "×" + stripTrailingZeros(BigDecimal.valueOf(plateGoodDO.getThickness())) + "-" + plateGoodDO.getBrand());
|
||||
series.add(seriesItem);
|
||||
}
|
||||
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);
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据纹路枚举获取字典中纹路描述
|
||||
* @param plateGoodDO
|
||||
* @return
|
||||
*/
|
||||
private String getTextureFromDict(PlateGoodDO plateGoodDO) {
|
||||
// 获取纹路描述
|
||||
DictDataRespDTO grainDTO = dictDataApi.getDictData(DictTypeConstants.GRAIN_TYPE, String.valueOf(plateGoodDO.getTexture())).getData();
|
||||
if (ObjectUtil.isNotNull(grainDTO)) {
|
||||
return grainDTO.getLabel();
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 根据统计维度获取es分组的dateHistogram
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
private DateHistogramAggregation.Builder getDateHistogram(Integer unit, DateHistogramAggregation.Builder builder) {
|
||||
switch (OrderStatisticsUnit.fromValue(unit)) {
|
||||
case QUARTER:
|
||||
return builder.calendarInterval(CalendarInterval.Quarter).format("yyyy-Q");
|
||||
case MONTH:
|
||||
return builder.calendarInterval(CalendarInterval.Month).format(DATE_TIME_FORMATTER_PATTERN_YEAR_MONTH);
|
||||
case DAY, WEEK:
|
||||
default:
|
||||
return builder.calendarInterval(CalendarInterval.Day).format(DATE_TIME_FORMATTER_PATTERN_YEAR_MONTH_DAY);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 年月日转年月周
|
||||
*
|
||||
* @param dateStr
|
||||
* @return
|
||||
*/
|
||||
private String dateToWeekMonth(String dateStr, Integer unit) {
|
||||
if (OrderStatisticsUnit.WEEK.getValue().equals(unit)) {
|
||||
LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern(DATE_TIME_FORMATTER_PATTERN_YEAR_MONTH_DAY));
|
||||
// 年月
|
||||
String outDateStr = date.format(DateTimeFormatter.ofPattern(DATE_TIME_FORMATTER_PATTERN_YEAR_MONTH));
|
||||
// 计算从月份第一天到当前日期经过了多少周
|
||||
LocalDate monthStart = date.with(TemporalAdjusters.firstDayOfMonth());
|
||||
long weeksInMonth = ChronoUnit.WEEKS.between(monthStart, date) + 1;
|
||||
return outDateStr + "-" + weeksInMonth;
|
||||
}
|
||||
return dateStr;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 获取日期区间格式下的所有日期字符串
|
||||
* 1、reqVO设置机构id
|
||||
@@ -372,8 +584,8 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
|
||||
endTime = now;
|
||||
switch (OrderStatisticsUnit.fromValue(reqVO.getUnit())) {
|
||||
case QUARTER:
|
||||
// 从now往前的2年
|
||||
startTime = now.minusYears(2);
|
||||
// 从now往前的1年
|
||||
startTime = now.minusYears(1);
|
||||
break;
|
||||
case MONTH:
|
||||
// 包含now往前的12个月
|
||||
@@ -419,22 +631,17 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
|
||||
startDate = startDate.plusMonths(3);
|
||||
break;
|
||||
case MONTH:
|
||||
dateStr = startDate.format(DateTimeFormatter.ofPattern("yyyy-M"));
|
||||
dateStr = startDate.format(DateTimeFormatter.ofPattern(DATE_TIME_FORMATTER_PATTERN_YEAR_MONTH));
|
||||
// 加一月
|
||||
startDate = startDate.plusMonths(1);
|
||||
break;
|
||||
case WEEK:
|
||||
// 使用自定义格式表示月份
|
||||
dateStr = startDate.format(DateTimeFormatter.ofPattern("yyyy-M"));
|
||||
// 计算从月份第一天到当前日期经过了多少周
|
||||
LocalDate monthStart = startDate.with(TemporalAdjusters.firstDayOfMonth());
|
||||
long weeksInMonth = ChronoUnit.WEEKS.between(monthStart, startDate) + 1;
|
||||
dateStr = dateStr + "-" + weeksInMonth;
|
||||
dateStr = startDate.format(DateTimeFormatter.ofPattern("yyyy-M-W"));
|
||||
// 加一周
|
||||
startDate = startDate.plusWeeks(1);
|
||||
break;
|
||||
case DAY:
|
||||
dateStr = startDate.format(DateTimeFormatter.ofPattern("yyyy-M-d"));
|
||||
dateStr = startDate.format(DateTimeFormatter.ofPattern(DATE_TIME_FORMATTER_PATTERN_YEAR_MONTH_DAY));
|
||||
// 加一天
|
||||
startDate = startDate.plusDays(1);
|
||||
break;
|
||||
|
||||
+16
-9
@@ -1,12 +1,15 @@
|
||||
package com.cf.imes.module.executor.service.plan;
|
||||
|
||||
import java.util.*;
|
||||
import javax.validation.*;
|
||||
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderRoomBodyList;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.NotPlanGoodsReqVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.NotPlanGoodsRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 生产单开料排单 Service 接口
|
||||
@@ -21,7 +24,7 @@ public interface PlanService {
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Long createPlan(@Valid PlanSaveReqVO createReqVO);
|
||||
Map<Long,Long> createPlan(@Valid PlanSaveReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新生产单开料排单
|
||||
@@ -33,9 +36,9 @@ public interface PlanService {
|
||||
/**
|
||||
* 删除生产单开料排单
|
||||
*
|
||||
* @param id 编号
|
||||
* @param ids 编号
|
||||
*/
|
||||
Boolean deletePlan(Long id);
|
||||
Boolean deletePlan(List<Long> ids);
|
||||
|
||||
/**
|
||||
* 获得生产单开料排单
|
||||
@@ -75,5 +78,9 @@ public interface PlanService {
|
||||
List<PlateResList> getPlateList(List<Long> planIds);
|
||||
|
||||
|
||||
List<OrderRoomBodyList> getOrderRoomBody(List<Long> orderIds);
|
||||
|
||||
List<NotPlanOrderPlateRespVO> getOrderPlateList(OrderPageReqVOCopy pageReqVO);
|
||||
|
||||
List<NotPlanGoodsRespVO> getNotOptimizeGoodsList(NotPlanGoodsReqVO reqVO);
|
||||
}
|
||||
+597
-155
@@ -1,27 +1,39 @@
|
||||
package com.cf.imes.module.executor.service.plan;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import co.elastic.clients.elasticsearch.ElasticsearchClient;
|
||||
import co.elastic.clients.elasticsearch._types.FieldValue;
|
||||
import co.elastic.clients.elasticsearch.core.DeleteByQueryRequest;
|
||||
import co.elastic.clients.elasticsearch.core.DeleteByQueryResponse;
|
||||
import co.elastic.clients.elasticsearch.core.SearchRequest;
|
||||
import co.elastic.clients.elasticsearch.core.SearchResponse;
|
||||
import co.elastic.clients.elasticsearch.core.search.Hit;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
|
||||
import com.cf.imes.framework.common.enums.PlanFilterTypeEnum;
|
||||
import com.cf.imes.framework.common.enums.PlanStatusEnum;
|
||||
import com.cf.imes.framework.common.util.json.JsonUtils;
|
||||
import com.cf.imes.framework.common.exception.ServiceException;
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.cf.imes.framework.mybatis.core.query.MPJLambdaWrapperX;
|
||||
import com.cf.imes.framework.mybatis.core.query.QueryWrapperX;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.bo.GoodsNum;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderIds;
|
||||
import com.cf.imes.module.executor.controller.admin.plate.vo.PlateRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderRoomBodyList;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.BlockPlaceInfo;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.NotPlanGoodsReqVO;
|
||||
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 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.orderItem.OrderItemDO;
|
||||
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.mysql.goods.GoodsMapper;
|
||||
@@ -29,36 +41,37 @@ import com.cf.imes.module.executor.dal.mysql.module.ModuleMapper;
|
||||
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.orderItem.OrderItemMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.plan.PlanMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.planitem.PlanItemMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.plate.PlateMapper;
|
||||
import com.cf.imes.module.executor.enums.OrderStatusEnum;
|
||||
import com.cf.imes.module.executor.service.optimizeplan.OptimizePlanService;
|
||||
import com.cf.imes.module.system.api.machine.MachineApi;
|
||||
import com.cf.imes.module.system.api.machine.dto.CuttingRespDTO;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
|
||||
import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO;
|
||||
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.plan.PlanMapper;
|
||||
|
||||
import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.ES_ERROR_DELETE;
|
||||
import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR;
|
||||
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static com.cf.imes.framework.common.util.string.SearchUtil.insertSeparator;
|
||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
|
||||
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.*;
|
||||
import static com.cf.imes.framework.common.util.string.SearchUtil.insertSeparator;
|
||||
import static com.cf.imes.module.system.enums.ErrorCodeConstants.NO_PRODUCTION_ORDER_INFORMATION_AVAILABLE;
|
||||
import static com.cf.imes.module.system.enums.ErrorCodeConstants.THE_BOARD_HAS_BEEN_CUT_INTO_PIECES;
|
||||
|
||||
/**
|
||||
* 生产单开料排单 Service 实现类
|
||||
@@ -67,6 +80,7 @@ import static com.cf.imes.framework.common.util.string.SearchUtil.insertSeparato
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
@Slf4j
|
||||
public class PlanServiceImpl implements PlanService {
|
||||
|
||||
@Resource
|
||||
@@ -99,104 +113,276 @@ public class PlanServiceImpl implements PlanService {
|
||||
@Resource
|
||||
private IdentifierGenerator identifierGenerator;
|
||||
|
||||
String ORDER_REMAIN_PLATE_MODEL = "imes_order_remain_plate_model";
|
||||
|
||||
@Resource
|
||||
private ElasticsearchClient elasticsearchClient;
|
||||
|
||||
@Resource
|
||||
private OptimizePlanService optimizePlanService;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Long createPlan(PlanSaveReqVO createReqVO) {
|
||||
public Map<Long,Long> createPlan(PlanSaveReqVO createReqVO) {
|
||||
|
||||
// todo 目前只考虑了非混单的情况,混单的情况待考虑
|
||||
List<PlanSaveReqVO.Item> itemList = createReqVO.getItemList();
|
||||
// 插入
|
||||
long sort = System.currentTimeMillis();
|
||||
PlanDO plan = BeanUtils.toBean(createReqVO, PlanDO.class);
|
||||
// plan.setIsPay(Boolean.FALSE);
|
||||
plan.setSort(0L);
|
||||
// plan.setPlanNo(identifierGenerator.nextId(null).toString());
|
||||
String orderNos = itemList.stream().map(PlanSaveReqVO.Item::getOrderId).distinct().toList().toString();
|
||||
plan.setOrderNos(orderNos);
|
||||
plan.setProduceTime(null);
|
||||
planMapper.insert(plan);
|
||||
|
||||
// 修改对应的生产单的状态为 生产中
|
||||
List<Long> orderIds = JSON.parseArray(orderNos).toJavaList(Long.class);
|
||||
ArrayList<PlanDO> planDOS = new ArrayList<>();
|
||||
|
||||
List<GoodsNum> goodsNums = plateMapper.selectGoodsNum(orderIds, getUserOrganId());
|
||||
ArrayList<PlanItemDO> planItemDOS = new ArrayList<>();
|
||||
|
||||
for (Long orderId : orderIds) {
|
||||
Map<Long,Long> goodsPlanId = new HashMap<>();
|
||||
|
||||
// 传入的生产单的大板数量
|
||||
int size1 = itemList.stream().filter(f -> Objects.equals(f.getOrderId(), orderId)).map(PlanSaveReqVO.Item::getId).distinct().toList().size();
|
||||
// 当前生产单对应的大板数量
|
||||
List<Long> list = goodsNums.stream().filter(f -> Objects.equals(f.getOrderId(), orderId)).map(GoodsNum::getGoodsNum).toList();
|
||||
Map<Long, List<PlanSaveReqVO.Item>> groupedItems = itemList.stream()
|
||||
.collect(Collectors.groupingBy(PlanSaveReqVO.Item::getGoodsId));
|
||||
|
||||
|
||||
for (Map.Entry<Long, List<PlanSaveReqVO.Item>> entry : groupedItems.entrySet()) {
|
||||
|
||||
List<PlanSaveReqVO.Item> items = entry.getValue();
|
||||
|
||||
// 创建计划
|
||||
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();
|
||||
plan.setOrderNos(orderNos);
|
||||
plan.setProduceTime(null);
|
||||
|
||||
planDOS.add(plan);
|
||||
|
||||
goodsPlanId.put(entry.getKey(), plan.getId());
|
||||
|
||||
Set<Long> itemIds = plateMapper.selectBatchOrderIdsAndGoodsIds(items,getUserOrganId());
|
||||
|
||||
if (CollectionUtil.isNotEmpty(itemIds)) {
|
||||
|
||||
for (Long itemId : itemIds) {
|
||||
planItemDOS.add(PlanItemDO.builder()
|
||||
.planId(plan.getId())
|
||||
.itemId(itemId)
|
||||
.build());
|
||||
}
|
||||
|
||||
if(size1 == list.get(0)){
|
||||
OrderDO orderDO = orderMapper.selectById(orderId).setStatus(OrderStatusEnum.IN_PRODUCTION.getStatus());
|
||||
orderMapper.updateById(orderDO);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Long planId = plan.getId();
|
||||
planMapper.insertBatch(planDOS);
|
||||
|
||||
|
||||
Set<Long> itemIds = plateMapper.selectBatchOrderIdsAndGoodsIds(itemList,getUserOrganId());
|
||||
planItemMapper.insertBatch(planItemDOS);
|
||||
|
||||
if (CollectionUtil.isNotEmpty(itemIds)) {
|
||||
ArrayList<PlanItemDO> planItemDOS = new ArrayList<>();
|
||||
for (Long itemId : itemIds) {
|
||||
planItemDOS.add(PlanItemDO.builder()
|
||||
.planId(planId)
|
||||
.itemId(itemId)
|
||||
.build());
|
||||
}
|
||||
planItemMapper.insertBatch(planItemDOS);
|
||||
}
|
||||
// 返回
|
||||
return plan.getId();
|
||||
|
||||
return goodsPlanId;
|
||||
|
||||
//
|
||||
// // 插入
|
||||
// PlanDO plan = BeanUtils.toBean(createReqVO, PlanDO.class);
|
||||
// plan.setSort(0L);
|
||||
// String orderNos = itemList.stream().map(PlanSaveReqVO.Item::getOrderId).distinct().toList().toString();
|
||||
// plan.setOrderNos(orderNos);
|
||||
// plan.setProduceTime(null);
|
||||
// planMapper.insert(plan);
|
||||
//
|
||||
// // 修改对应的生产单的状态为 已排单
|
||||
// List<Long> orderIds = itemList.stream().map(PlanSaveReqVO.Item::getOrderId).toList();
|
||||
//
|
||||
// List<OrderDO> orderDOS = orderMapper.selectBatchIds(orderIds);
|
||||
//
|
||||
// List<OrderDO> orderDOList = orderDOS.stream().map(o -> o.setStatus(OrderStatusEnum.SORTED.getStatus())).toList();
|
||||
//
|
||||
// orderMapper.updateBatch(orderDOList);
|
||||
//
|
||||
// Long planId = plan.getId();
|
||||
//
|
||||
//
|
||||
// // 返回
|
||||
// return plan.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updatePlan(PlanSaveReqVO updateReqVO) {
|
||||
|
||||
// 校验存在
|
||||
validatePlanExists(updateReqVO.getId());
|
||||
validatePlanExists(updateReqVO.getId(),updateReqVO.getMachineId());
|
||||
// 更新
|
||||
PlanDO plan = BeanUtils.toBean(updateReqVO, PlanDO.class);
|
||||
|
||||
// 目前只解决非混单的情况
|
||||
if(!updateReqVO.getItemList().isEmpty()){
|
||||
|
||||
List<OptimizeBoardModelDO> optimizeBoardModelDOS = buildBoardByPlanId(plan.getId(), ORDER_REMAIN_PLATE_MODEL, 99);
|
||||
|
||||
OptimizeBoardModelDO optimizeBoardModelDO = optimizeBoardModelDOS.get(0);
|
||||
|
||||
List<Long> goodsNo = optimizeBoardModelDO.getCutedBoardInfo().getCutedBoardList();
|
||||
|
||||
List<Long> plateNo = new ArrayList<>();
|
||||
|
||||
// 创建一个列表存储 BlockPlaceInfo 对象,将优化的小板信息拿出,获取到小板编号,查询生产单,修改生产单的状态
|
||||
List<BlockPlaceInfo> outputList = new ArrayList<>();
|
||||
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
|
||||
try {
|
||||
// 解析 JSON 字符串
|
||||
JsonNode jsonArray = mapper.readTree(optimizeBoardModelDO.getBlockPlaceInfo());
|
||||
|
||||
// 遍历 JSON 数组并提取所需字段
|
||||
if (jsonArray.isArray()) {
|
||||
for (JsonNode jsonNode : jsonArray) {
|
||||
Long bi = jsonNode.get("bi").asLong();
|
||||
Long bo = jsonNode.get("bo").asLong();
|
||||
outputList.add(new BlockPlaceInfo(bi,bo));
|
||||
}
|
||||
}
|
||||
} catch (JsonProcessingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
for (Long goods : goodsNo) {
|
||||
plateNo.addAll(outputList.stream().filter(f -> f.getBi().equals(goods)).map(BlockPlaceInfo::getBo).distinct().toList());
|
||||
}
|
||||
|
||||
if(updateReqVO.getDeleteIds() != null) {
|
||||
|
||||
List<PlateDO> plateDOS = plateMapper.selectPlateListByGoodsIds(updateReqVO.getDeleteIds(), getUserOrganId());
|
||||
|
||||
List<Long> deletePlateNos = plateDOS.stream().map(PlateDO::getPlateNo).map(Long::valueOf).toList();
|
||||
|
||||
List<Long> plateNoCopyList = new ArrayList<>(plateNo);
|
||||
|
||||
// 使用retainAll方法保留 plateNo 中与 deletePlateNos 相同的元素
|
||||
plateNoCopyList.retainAll(deletePlateNos);
|
||||
|
||||
// 如果 plateNoCopyList 不为空,说明两个List有共同的元素
|
||||
boolean b = !plateNoCopyList.isEmpty();
|
||||
|
||||
if (b) {
|
||||
|
||||
throw exception(THE_BOARD_HAS_BEEN_CUT_INTO_PIECES);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
planMapper.updateById(plan);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean deletePlan(Long id) {
|
||||
public Boolean deletePlan(List<Long> ids) {
|
||||
// 校验存在
|
||||
PlanDO planDO = planMapper.selectById(id);
|
||||
if (planDO == null) {
|
||||
throw exception(PLAN_NOT_EXISTS);
|
||||
}
|
||||
if (planDO.getStatus().equals(PlanStatusEnum.DURINGCUTTING.getStatus()) || planDO.getStatus().equals(PlanStatusEnum.OPENEDMATERIAL.getStatus())) {
|
||||
throw exception(PLAN_NOT_ALLOW_DELETE);
|
||||
}
|
||||
// 删除
|
||||
planMapper.deleteById(id);
|
||||
/*planOrderMapper.delete(new LambdaQueryWrapperX<PlanOrderDO>().eq(PlanOrderDO::getPlanId, id));*/
|
||||
planItemMapper.delete(new LambdaQueryWrapperX<PlanItemDO>().eq(PlanItemDO::getPlanId, id));
|
||||
validatePlan(ids);
|
||||
|
||||
// 修改生产单的状态为待排单
|
||||
List<Long> orderIds = JSON.parseArray(planDO.getOrderNos()).toJavaList(Long.class);
|
||||
List<OrderDO> orderDOS = orderMapper.selectBatchIds(orderIds).stream().map(m -> m.setStatus(OrderStatusEnum.SORTED.getStatus())).collect(Collectors.toList());
|
||||
orderMapper.updateBatch(orderDOS);
|
||||
List<PlanDO> planDOS = planMapper.selectBatchIds(ids);
|
||||
|
||||
List<Long> orderIds = new ArrayList<>();
|
||||
for (PlanDO planDO : planDOS) {
|
||||
|
||||
orderIds.addAll(JSON.parseArray(planDO.getOrderNos()).toJavaList(Long.class));
|
||||
|
||||
}
|
||||
|
||||
// 删除排单信息,排单明细表信息,ES优化数据
|
||||
planMapper.deleteBatchIds(ids);
|
||||
planItemMapper.delete(new LambdaQueryWrapperX<PlanItemDO>().in(PlanItemDO::getPlanId, ids));
|
||||
|
||||
|
||||
// 排单对应的自增板的删除 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<PlateDO> plateDOS = plateMapper.selectPlateIdList(goodsIdList, getUserOrganId());
|
||||
if(!plateDOS.isEmpty()) {
|
||||
List<Long> plateIds = plateDOS.stream().map(PlateDO::getId).toList();
|
||||
|
||||
plateMapper.deleteBatchIds(plateIds);
|
||||
|
||||
orderItemMapper.delete(new LambdaQueryWrapperX<OrderItemDO>().in(OrderItemDO::getPlateId, plateIds));
|
||||
|
||||
}
|
||||
|
||||
|
||||
// 目前生产单的状态已经去除待排单,所以无需修改生产单的状态
|
||||
// List<OrderDO> orderDOS = orderMapper.selectBatchIds(orderIds).stream().map(m -> m.setStatus(OrderStatusEnum.SORTED.getStatus())).collect(Collectors.toList());
|
||||
// orderMapper.updateBatch(orderDOS);
|
||||
|
||||
|
||||
// 删除排单对应的优化生产数据
|
||||
deleteByPlanId(ids, ORDER_REMAIN_PLATE_MODEL);
|
||||
|
||||
}
|
||||
|
||||
List<Long> orderIdList = new ArrayList<>();
|
||||
|
||||
List<Long> diff;
|
||||
|
||||
// 根据生产单ID查询ES的优化数据
|
||||
List<OptimizeBoardModelDO> optimizeBoardModelDOS = optimizePlanService.buildBoardByOrderIds(orderIds, ORDER_REMAIN_PLATE_MODEL, 999);
|
||||
|
||||
if(optimizeBoardModelDOS.isEmpty()){
|
||||
|
||||
diff = new ArrayList<>(orderIds);
|
||||
|
||||
}else {
|
||||
optimizeBoardModelDOS.forEach(f -> orderIdList.addAll(f.getOrderId()));
|
||||
|
||||
// 已经删除的排单的生产单号和新查找的生生产单号对比,找出不同的部分
|
||||
diff = orderIds.stream().filter(f -> !orderIdList.contains(f)).toList();
|
||||
}
|
||||
|
||||
if(!diff.isEmpty()){
|
||||
|
||||
List<OrderDO> orderList = orderMapper.selectBatchIds(diff);
|
||||
|
||||
List<OrderDO> orderDOList = orderList.stream().map(m -> m.setStatus(OrderStatusEnum.NEW_ORDER.getStatus())).toList();
|
||||
|
||||
orderMapper.updateBatch(orderDOList);
|
||||
}
|
||||
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
private void validatePlanExists(Long id) {
|
||||
if (planMapper.selectById(id) == null) {
|
||||
|
||||
|
||||
private void validatePlanExists(Long id,Long machineId) {
|
||||
PlanDO planDO = planMapper.selectById(id);
|
||||
if ( planDO== null) {
|
||||
throw exception(PLAN_NOT_EXISTS);
|
||||
}
|
||||
|
||||
if(planDO.getStatus().equals(PlanStatusEnum.OPENING.getStatus()) && planDO.getMachineId().equals(machineId)){
|
||||
throw exception(LIST_CHANGES_ARE_PROHIBITED);
|
||||
}
|
||||
}
|
||||
|
||||
private void validatePlan(List<Long> ids) {
|
||||
|
||||
planMapper.selectPlanByOrderIds(ids);
|
||||
List<PlanDO> planDOS = planMapper.selectBatchIds(ids);
|
||||
|
||||
for (PlanDO planDO : planDOS) {
|
||||
if ( planDO== null) {
|
||||
throw exception(PLAN_NOT_EXISTS);
|
||||
}
|
||||
|
||||
if ( planDO.getStatus().equals(PlanStatusEnum.OPENING.getStatus()) || planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus()) ) {
|
||||
throw exception(PLAN_NOT_ALLOW_DELETE,planDO.getId());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -232,21 +418,76 @@ public class PlanServiceImpl implements PlanService {
|
||||
return respVO;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public PageResult<PlanRespVO> getPlanPage(PlanPageReqVO pageReqVO) {
|
||||
PageResult<PlanDO> planDOPageResult = planMapper.selectPage(pageReqVO);
|
||||
if (CollectionUtil.isEmpty(planDOPageResult.getList())) {
|
||||
return new PageResult<>();
|
||||
}
|
||||
Set<Long> macheineIds = planDOPageResult.getList().stream().map(PlanDO::getMachineId).collect(Collectors.toSet());
|
||||
List<CuttingRespDTO> machines = machineApi.list(macheineIds).getCheckedData();
|
||||
|
||||
PageResult<PlanDO> planDOPageResult = new PageResult<>();
|
||||
|
||||
|
||||
if(pageReqVO.getIsUp() != null) {
|
||||
|
||||
PlanDO planDO = planMapper.selectById(pageReqVO.getId());
|
||||
|
||||
|
||||
List<PlanDO> plan = pageReqVO.getIsUp() ?
|
||||
planMapper.selectPlanIds(planDO.getUpdateTime().toString(),planDO.getSort(), getUserOrganId(), planDO.getId()) :
|
||||
|
||||
planMapper.selectPlanIdsFalse(planDO.getUpdateTime().toString(),planDO.getSort(), getUserOrganId(), planDO.getId());
|
||||
|
||||
if (plan.isEmpty()) {
|
||||
|
||||
throw exception(NO_PRODUCTION_ORDER_INFORMATION_AVAILABLE, pageReqVO.getIsUp() ? "第" : "最后");
|
||||
}
|
||||
|
||||
planDOPageResult.setList(plan);
|
||||
|
||||
|
||||
}else {
|
||||
|
||||
planDOPageResult = planMapper.selectPage(pageReqVO);
|
||||
if (CollectionUtil.isEmpty(planDOPageResult.getList())) {
|
||||
return new PageResult<>();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Set<Long> machineIds = planDOPageResult.getList().stream().map(PlanDO::getMachineId).collect(Collectors.toSet());
|
||||
|
||||
List<Long> planIds = planDOPageResult.getList().stream().map(PlanDO::getId).collect(Collectors.toList());
|
||||
|
||||
|
||||
List<CuttingRespDTO> machines = machineApi.list(machineIds).getCheckedData();
|
||||
|
||||
|
||||
|
||||
List<PlateInfoVO> plateInfoVOS = planItemMapper.selectGoodsList(planIds,getUserOrganId());
|
||||
|
||||
List<OrderIds> orderIdsList = new ArrayList<>();
|
||||
|
||||
plateInfoVOS.forEach(f->
|
||||
orderIdsList.addAll(f.getOrderIdList()));
|
||||
|
||||
|
||||
List<PlateInfoVO> plateInfoVOList = plateMapper.selectPlateArea(orderIdsList, getUserOrganId());
|
||||
|
||||
|
||||
// todo 目前这种情况只解决没有混单的情况,混单情况待解决 (目前解决,数据正确性待测试)
|
||||
for (PlateInfoVO plateInfoVO : plateInfoVOS) {
|
||||
plateInfoVO.setArea(plateInfoVOList.stream()
|
||||
.filter(s->s.getGoodsId().equals(plateInfoVO.getGoodsId()))
|
||||
.map(PlateInfoVO::getArea)
|
||||
.reduce(BigDecimal.ZERO,BigDecimal::add));
|
||||
|
||||
// plateInfoVO.setOptimizeGoodsCount(plateInfoVOList.stream().filter(s->s.getGoodsId().equals(plateInfoVO.getGoodsId())).mapToLong(PlateInfoVO::getOptimizeGoodsCount).sum());
|
||||
}
|
||||
|
||||
|
||||
// 根据排单ID查询ES中的优化数据 todo 目前只解决无混单的情况,混单情况待解决
|
||||
List<OptimizeBoardModelDO> optimizeBoardModelDOS = buildBoardByPlanIds(planIds, ORDER_REMAIN_PLATE_MODEL, plateInfoVOS.size());
|
||||
|
||||
|
||||
// 获取排单对应的生产单的信息
|
||||
List<PlanOrderRespVO> planOrderRespVOS = planItemMapper.selectOrderList(planIds, getUserOrganId());
|
||||
@@ -256,14 +497,40 @@ public class PlanServiceImpl implements PlanService {
|
||||
|
||||
|
||||
planRespVOPageResult.getList().forEach(e -> {
|
||||
// 机台信息
|
||||
e.setMachineName(machines.stream()
|
||||
.filter(f -> Objects.equals(f.getId(), e.getMachineId()))
|
||||
.map(CuttingRespDTO::getName)
|
||||
.findAny()
|
||||
.orElse(null));
|
||||
// 板材信息列表
|
||||
e.setPlateInfoList(plateInfoVOS.stream()
|
||||
.filter(f -> Objects.equals(f.getPlanId(), e.getId()))
|
||||
.collect(Collectors.toList()));
|
||||
// todo 小板总数量目前只解决没有混单的情况时的小板数量,后续待加入混单情况 (目前解决,数据正确性待测试)
|
||||
e.setPlateNum(plateInfoVOS.stream()
|
||||
.filter(f -> Objects.equals(f.getPlanId(), e.getId()))
|
||||
.mapToLong(PlateInfoVO::getCount)
|
||||
.sum());
|
||||
// todo 大板优化数量目前只解决没有混单的情况时的小板数量,后续待加入混单情况 (目前解决,数据正确性待测试)
|
||||
e.setOptimizeGoodsCount(optimizeBoardModelDOS.stream()
|
||||
.filter(f -> Objects.equals(f.getPlanId(), e.getId()))
|
||||
// todo 目前兼容修改,新的需求不需要这个校验
|
||||
.mapToLong(m -> m.getBoardCount() == null ?0 : m.getBoardCount())
|
||||
.sum());
|
||||
// 大板开料数
|
||||
e.setCutGoodsCount(optimizeBoardModelDOS.stream()
|
||||
.filter(f->Objects.equals(f.getPlanId(), e.getId()))
|
||||
.mapToLong(m-> m.getCutedBoardInfo() == null ? 0 : m.getCutedBoardInfo().getCutedBoardNumber())
|
||||
.sum());
|
||||
// 小板优化数量
|
||||
e.setOptimizePlateCount(optimizeBoardModelDOS.stream()
|
||||
.filter(f->Objects.equals(f.getPlanId(), e.getId()))
|
||||
.mapToLong(m-> m.getPlaceBlockNumber() == null ? 0 : m.getPlaceBlockNumber())
|
||||
.sum());
|
||||
// 未优化小板数量
|
||||
e.setUnOptimizePlateCount(e.getPlateNum() - e.getOptimizePlateCount());
|
||||
// 生产单信息
|
||||
e.setOrderList(planOrderRespVOS.stream()
|
||||
.filter( f-> Objects.equals(f.getPlanId(), e.getId()))
|
||||
.collect(Collectors.toList()));
|
||||
@@ -276,25 +543,72 @@ public class PlanServiceImpl implements PlanService {
|
||||
public PageResult<OrderRespVOCopy> getOrderPage(OrderPageReqVOCopy pageReqVO) {
|
||||
PageDTO<OrderRespVOCopy> page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
|
||||
|
||||
List<Integer> statusList = 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());
|
||||
|
||||
// List<Long> orderIds = new ArrayList<>();
|
||||
// if(pageReqVO.getGoodsId() != null) {
|
||||
// List<GoodsDO> goodsDOS = goodsMapper.selectListByGoodsId(pageReqVO.getGoodsId(), getUserOrganId());
|
||||
// orderIds = goodsDOS.stream().map(GoodsDO::getOrderId).toList();
|
||||
// }
|
||||
|
||||
QueryWrapperX<OrderDO> queryWrapperX = new QueryWrapperX<>();
|
||||
queryWrapperX
|
||||
.eq("a.organ_id",getUserOrganId())
|
||||
.eq("a.status",OrderStatusEnum.SORTED.getStatus())
|
||||
// .eq("a.status",OrderStatusEnum.SORTED.getStatus())
|
||||
.eq("a.deleted",false)
|
||||
.in("a.status",statusList)
|
||||
.isNull("opi.item_id")
|
||||
// todo 修改排单数据筛选,目前只解决了非混单的情况,混单情况待解决
|
||||
.inIfPresent("op.goods_id",goodsDOS.isEmpty() ? null :goodsDOS.stream().map(GoodsDO::getId).toList())
|
||||
|
||||
.inIfPresent("a.id",pageReqVO.getOrderIds())
|
||||
.likeIfPresent("a.id", pageReqVO.getOrderId() != null ? pageReqVO.getOrderId().toString() : null)
|
||||
// .isNull("opi.item_id")
|
||||
.inIfPresent("op.goods_id",pageReqVO.getIds())
|
||||
.eqIfPresent("a.customer", pageReqVO.getConsignee())
|
||||
.eqIfPresent("a.custom_order_no", pageReqVO.getDefaultId())
|
||||
.eqIfPresent("a.address", pageReqVO.getConsigneeAddress())
|
||||
.betweenIfPresent("a.create_time", pageReqVO.getCreateTime())
|
||||
.eqIfPresent("op.is_special_shaped", pageReqVO.getRectangle() != null ? false: null)
|
||||
.eqIfPresent("op.is_special_shaped", pageReqVO.getSpecialShaped())
|
||||
.eqIfPresent("op.is_sculpt", pageReqVO.getSculpt())
|
||||
.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("a.id", " a.order_date", "a.delivery_date", "a.customer", "a.address", "a.custom_order_no","a.create_time","a.update_time")
|
||||
.orderByDesc("a.update_time");
|
||||
.groupBy("a.id", " a.order_date", "a.delivery_date", "a.customer", "a.address", "a.custom_order_no","a.create_time","a.update_time","a.status")
|
||||
.having("count(op.id) != 0")
|
||||
.orderByDesc("a.create_time");
|
||||
|
||||
|
||||
IPage<OrderRespVOCopy> orderRespVOCopies = orderMapper.selectOrderPage(page, queryWrapperX);
|
||||
|
||||
if (CollectionUtil.isEmpty(orderRespVOCopies.getRecords())) {
|
||||
return new PageResult<>();
|
||||
}
|
||||
|
||||
|
||||
return new PageResult<>(orderRespVOCopies.getRecords(), orderRespVOCopies.getTotal());
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<NotPlanOrderPlateRespVO> getOrderPlateList(OrderPageReqVOCopy pageReqVO) {
|
||||
|
||||
QueryWrapperX<PlateDO> queryWrapperX = new QueryWrapperX<>();
|
||||
queryWrapperX
|
||||
.eq("c.organ_id",getUserOrganId())
|
||||
.inIfPresent("c.order_id", pageReqVO.getOrderIds())
|
||||
.isNull("opi.item_id")
|
||||
.inIfPresent("oi.room_id",pageReqVO.getRoomId())
|
||||
.inIfPresent("oi.body_id",pageReqVO.getBodyId())
|
||||
.eqIfPresent("a.is_special_shaped", pageReqVO.getRectangle() != null ? false: null)
|
||||
.eqIfPresent("a.is_special_shaped", pageReqVO.getSpecialShaped())
|
||||
.eqIfPresent("a.is_sculpt", pageReqVO.getSculpt())
|
||||
.eqIfPresent("a.is_door", pageReqVO.getIsDoor())
|
||||
.betweenIfPresent("a.height", new BigDecimal[]{pageReqVO.getLongMinRang(), pageReqVO.getLongMaxRang()})
|
||||
.betweenIfPresent("a.width", new BigDecimal[]{pageReqVO.getWidthMinRang(), pageReqVO.getWidthMaxRang()})
|
||||
.groupBy("c.id", " c.order_id", "c.goods_name", "c.width", "c.height", "c.thickness","c.material","c.color","c.texture","c.goods_id");
|
||||
|
||||
String filterTypes = "";
|
||||
if (Objects.nonNull(pageReqVO.getHoleThrough()) && pageReqVO.getHoleThrough()) {
|
||||
filterTypes += PlanFilterTypeEnum.DIGGINGTHROUGHTHESHAPE.getType().toString();
|
||||
@@ -306,46 +620,89 @@ public class PlanServiceImpl implements PlanService {
|
||||
filterTypes += PlanFilterTypeEnum.TWODIMENSIONALCUTTINGPATH.getType().toString();
|
||||
}
|
||||
|
||||
queryWrapperX.likeIfPresent("op.filter_type", insertSeparator(filterTypes));
|
||||
queryWrapperX.likeIfPresent("a.filter_type", insertSeparator(filterTypes));
|
||||
|
||||
IPage<OrderRespVOCopy> orderRespVOCopies = orderMapper.selectOrderPage(page, queryWrapperX);
|
||||
// List<NotPlanOrderPlateRespVO> platePages = plateMapper.selectGoodsPage(pageReqVO.getOrderIds(),getUserOrganId()/*, orderRespVOCopy.getGoodsId()*/);
|
||||
|
||||
if (CollectionUtil.isEmpty(orderRespVOCopies.getRecords())) {
|
||||
return new PageResult<>();
|
||||
List<NotPlanOrderPlateRespVO> notPlanOrderPlateRespVOS = plateMapper.selectGoodsPage(queryWrapperX);
|
||||
|
||||
// todo 目前数据筛选只考虑了非混单的情况,混单情况待解决
|
||||
if(pageReqVO.getGoodsId() != null) {
|
||||
return notPlanOrderPlateRespVOS.stream().filter(f -> f.getGoodsId().equals(pageReqVO.getGoodsId())).toList();
|
||||
}
|
||||
|
||||
List<OrderRespVOCopy> records = orderRespVOCopies.getRecords();
|
||||
List<Long> orderIds = records.stream().map(m -> m.getOrderId()).collect(Collectors.toList());
|
||||
|
||||
|
||||
List<PlatePage> platePages = plateMapper.selectGoodsPage(orderIds,getUserOrganId()/*, orderRespVOCopy.getGoodsId()*/);
|
||||
return notPlanOrderPlateRespVOS;
|
||||
|
||||
|
||||
|
||||
List<OrderRespVOCopy> filteredRecords = records.stream()
|
||||
.filter(record -> {
|
||||
List<PlatePage> filteredPages = platePages.stream()
|
||||
.filter(f -> Objects.equals(f.getOrderId(), record.getOrderId()))
|
||||
.collect(Collectors.toList());
|
||||
if (filteredPages.isEmpty()) {
|
||||
return false; // 移除该记录
|
||||
} else {
|
||||
record.setPlatePages(filteredPages);
|
||||
return true; // 保留该记录
|
||||
}
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 处理后的 filteredRecords 将不包含过滤后的数据为空的 record
|
||||
orderRespVOCopies.setRecords(filteredRecords);
|
||||
|
||||
// orderRespVOCopies.setTotal(orderRespVOCopies.getRecords().size());
|
||||
// List<OrderRespVOCopy> filteredRecords = records.stream()
|
||||
// .filter(record -> {
|
||||
// List<PlatePage> filteredPages = platePages.stream()
|
||||
// .filter(f -> Objects.equals(f.getOrderId(), record.getOrderId()))
|
||||
// .collect(Collectors.toList());
|
||||
// if (filteredPages.isEmpty()) {
|
||||
// return false; // 移除该记录
|
||||
// } else {
|
||||
// record.setPlatePages(filteredPages);
|
||||
// return true; // 保留该记录
|
||||
// }
|
||||
// })
|
||||
// .collect(Collectors.toList());
|
||||
//
|
||||
// // 处理后的 filteredRecords 将不包含过滤后的数据为空的 record
|
||||
// orderRespVOCopies.setRecords(filteredRecords);
|
||||
//
|
||||
//// orderRespVOCopies.setTotal(orderRespVOCopies.getRecords().size());
|
||||
//
|
||||
//
|
||||
// return new PageResult<>(orderRespVOCopies.getRecords(), orderRespVOCopies.getTotal());
|
||||
|
||||
|
||||
return new PageResult<>(orderRespVOCopies.getRecords(), orderRespVOCopies.getTotal());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NotPlanGoodsRespVO> getNotOptimizeGoodsList(NotPlanGoodsReqVO reqVO) {
|
||||
|
||||
// 板材库对应的大板ID
|
||||
List<Long> plateGoodIds = reqVO.getOrderIdList().stream().map(OrderIds::getId).toList();
|
||||
|
||||
|
||||
List<NotPlanGoodsRespVO> notPlanGoodsRespVOS = goodsMapper.selectJoinList(NotPlanGoodsRespVO.class, new MPJLambdaWrapperX<GoodsDO>()
|
||||
|
||||
.leftJoin(PlateDO.class, PlateDO::getGoodsId, GoodsDO::getId)
|
||||
.selectCount(PlateDO::getId,"plateNum")
|
||||
.select(GoodsDO::getGoodsId, GoodsDO::getHeight, GoodsDO::getWidth, GoodsDO::getColor, GoodsDO::getGoodsName, GoodsDO::getThickness,GoodsDO::getSpec,GoodsDO::getMaterial,GoodsDO::getTexture)
|
||||
.isNotNull(PlanItemDO::getId)
|
||||
.eq(GoodsDO::getOrganId, getUserOrganId())
|
||||
.in(GoodsDO::getId, plateGoodIds)
|
||||
.groupBy(GoodsDO::getGoodsId, GoodsDO::getHeight, GoodsDO::getWidth, GoodsDO::getColor, GoodsDO::getGoodsName, GoodsDO::getThickness,GoodsDO::getSpec,GoodsDO::getMaterial,GoodsDO::getTexture));
|
||||
|
||||
|
||||
|
||||
// // 生产单对应的大板ID
|
||||
// List<Long> goodIds = reqVO.getOrderIdList().stream().map(OrderIds::getId).toList();
|
||||
//
|
||||
// // 查询板材库的大板信息
|
||||
// List<NotPlanGoodsRespVO> notPlanGoodsRespVOS = goodsMapper.selectGoodsPlateList(plateGoodIds, getUserOrganId());
|
||||
|
||||
// 查询小板数量
|
||||
// List<PlateDO> plateDOS = plateMapper.selectGoodsPlateNum(goodIds, getUserOrganId());
|
||||
|
||||
|
||||
// List<NotPlanGoodsRespVO> notPlanGoodsRespVOS = BeanUtils.toBean(goodsDOS, NotPlanGoodsRespVO.class);
|
||||
|
||||
for (NotPlanGoodsRespVO notPlanGoodsRespVO : notPlanGoodsRespVOS) {
|
||||
notPlanGoodsRespVO.setOrderIdList(reqVO.getOrderIdList()
|
||||
.stream()
|
||||
.filter(orderIds -> orderIds.getGoodsId().equals(notPlanGoodsRespVO.getGoodsId())).toList());
|
||||
|
||||
notPlanGoodsRespVO.setGoodsNum(notPlanGoodsRespVO.getOrderIdList().stream().map(OrderIds::getId).toList().size());
|
||||
|
||||
}
|
||||
|
||||
return notPlanGoodsRespVOS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -356,17 +713,24 @@ public class PlanServiceImpl implements PlanService {
|
||||
|
||||
PageDTO<OrderGoodsResp> page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
|
||||
|
||||
List<Integer> statusList = new ArrayList<>();
|
||||
statusList.add(OrderStatusEnum.NEW_ORDER.getStatus());
|
||||
statusList.add(OrderStatusEnum.IN_PRODUCTION.getStatus());
|
||||
statusList.add(OrderStatusEnum.SORTED.getStatus());
|
||||
|
||||
List<Long> orderIds = orderMapper.selectOrderIdsList(pageReqVO, statusList, getUserOrganId())
|
||||
.stream().map(OrderDO::getId).toList();
|
||||
|
||||
QueryWrapperX<OrderDO> queryWrapperX = new QueryWrapperX<>();
|
||||
queryWrapperX
|
||||
.eq("a.organ_id",getUserOrganId())
|
||||
.eq("a.status",OrderStatusEnum.SORTED.getStatus())
|
||||
.eq("a.deleted",false)
|
||||
.likeIfPresent("a.id", pageReqVO.getOrderId() != null ? pageReqVO.getOrderId().toString() : null)
|
||||
// .isNull("opi.item_id")
|
||||
.eqIfPresent("a.customer", pageReqVO.getConsignee())
|
||||
.eqIfPresent("a.custom_order_no", pageReqVO.getDefaultId())
|
||||
.eqIfPresent("a.address", pageReqVO.getConsigneeAddress())
|
||||
.betweenIfPresent("a.create_time", pageReqVO.getCreateTime())
|
||||
.eq("oi.organ_id",getUserOrganId())
|
||||
.eq("og.deleted",false)
|
||||
.inIfPresent("oi.order_id", orderIds)
|
||||
.isNull("opi.item_id")
|
||||
.isNotNull("og.id")
|
||||
|
||||
// todo 修改排单数据筛选,目前只解决了非混单的情况,混单情况待解决
|
||||
.eqIfPresent("og.goods_id",pageReqVO.getGoodsId())
|
||||
.eqIfPresent("op.is_special_shaped", pageReqVO.getRectangle() != null ? false: null)
|
||||
.eqIfPresent("op.is_special_shaped", pageReqVO.getSpecialShaped())
|
||||
.eqIfPresent("op.is_sculpt", pageReqVO.getSculpt())
|
||||
@@ -387,36 +751,45 @@ public class PlanServiceImpl implements PlanService {
|
||||
queryWrapperX.likeIfPresent("op.filter_type", insertSeparator(filterTypes));
|
||||
|
||||
|
||||
List<Long> orderIds = orderMapper.selectOrderIds(queryWrapperX);
|
||||
|
||||
if(orderIds.isEmpty()){
|
||||
return new PageResult<>();
|
||||
}
|
||||
// List<Long> orderIds = orderMapper.selectOrderIds(queryWrapperX);
|
||||
|
||||
|
||||
List<OrderIds> orderIdsList = plateMapper.selectOrderIds(orderIds,getUserOrganId());
|
||||
IPage<OrderGoodsResp> orderGoodsResps = orderMapper.selectOrderIds(page,queryWrapperX);
|
||||
|
||||
// if(orderIds.isEmpty()){
|
||||
// return new PageResult<>();
|
||||
// }
|
||||
//
|
||||
//
|
||||
// List<OrderIds> orderIdsList = plateMapper.selectOrderIds(orderIds,getUserOrganId());
|
||||
//
|
||||
//
|
||||
// List<Long> goodsList = orderIdsList.stream().map(OrderIds::getGoodsId).distinct().toList();
|
||||
//
|
||||
// // 修改排单时进行数据筛选,todo 目前只解决非混单情况
|
||||
// if(pageReqVO.getGoodsId() != null){
|
||||
//
|
||||
// goodsList = goodsList.stream().filter(f->f.equals(pageReqVO.getGoodsId())).toList();
|
||||
//
|
||||
// }
|
||||
//
|
||||
// IPage<OrderGoodsResp> orderGoodsResps = goodsMapper.selectGoods(page,goodsList, getUserOrganId());
|
||||
|
||||
|
||||
List<Long> goodsList = orderIdsList.stream().map(OrderIds::getGoodsId).distinct().toList();
|
||||
// List<OrderRespVOCopy> orderRespVOCopies = orderMapper.selectOrderListByIds(orderIdsList, getUserOrganId());
|
||||
|
||||
|
||||
IPage<OrderGoodsResp> orderGoodsResps = goodsMapper.selectGoods(page,goodsList, getUserOrganId());
|
||||
|
||||
|
||||
List<OrderRespVOCopy> orderRespVOCopies = orderMapper.selectOrderListByIds(orderIdsList, getUserOrganId());
|
||||
|
||||
|
||||
for (OrderGoodsResp record : orderGoodsResps.getRecords()) {
|
||||
record.setNum(orderRespVOCopies.stream().filter(e-> Objects.equals(e.getGoodsId(), record.getGoodsId())).
|
||||
mapToInt(OrderRespVOCopy::getNum).sum());
|
||||
|
||||
record.setArea(orderRespVOCopies.stream().filter(e-> Objects.equals(e.getGoodsId(), record.getGoodsId()))
|
||||
.map(OrderRespVOCopy::getArea)
|
||||
.reduce(BigDecimal.ZERO,BigDecimal::add));
|
||||
|
||||
record.setOrderIds(orderIdsList.stream().filter(e -> Objects.equals(e.getGoodsId(), record.getGoodsId())).collect(Collectors.toList()));
|
||||
record.setOrderList(orderRespVOCopies.stream().filter(e -> Objects.equals(e.getGoodsId(), record.getGoodsId())).collect(Collectors.toList()));
|
||||
}
|
||||
// for (OrderGoodsResp record : orderGoodsResps.getRecords()) {
|
||||
// record.setNum(orderRespVOCopies.stream().filter(e-> Objects.equals(e.getGoodsId(), record.getGoodsId())).
|
||||
// mapToInt(OrderRespVOCopy::getNum).sum());
|
||||
//
|
||||
// record.setArea(orderRespVOCopies.stream().filter(e-> Objects.equals(e.getGoodsId(), record.getGoodsId()))
|
||||
// .map(OrderRespVOCopy::getArea)
|
||||
// .reduce(BigDecimal.ZERO,BigDecimal::add));
|
||||
//
|
||||
// record.setOrderIds(orderIdsList.stream().filter(e -> Objects.equals(e.getGoodsId(), record.getGoodsId())).collect(Collectors.toList()));
|
||||
//// record.setOrderList(orderRespVOCopies.stream().filter(e -> Objects.equals(e.getGoodsId(), record.getGoodsId())).collect(Collectors.toList()));
|
||||
// }
|
||||
|
||||
|
||||
return new PageResult<>(orderGoodsResps.getRecords(), orderGoodsResps.getTotal());
|
||||
@@ -466,9 +839,9 @@ public class PlanServiceImpl implements PlanService {
|
||||
if (planDO == null) {
|
||||
throw exception(PLAN_NOT_EXISTS);
|
||||
}
|
||||
if (planDO.getStatus().equals(PlanStatusEnum.NEWORDER.getStatus()) || planDO.getStatus().equals(PlanStatusEnum.BOARDHASBEENAPPLIEDFOR.getStatus())) {
|
||||
throw exception(PLAN_NOT_ALLOW_CANCEL);
|
||||
}
|
||||
// if (planDO.getStatus().equals(PlanStatusEnum.NEWORDER.getStatus()) || planDO.getStatus().equals(PlanStatusEnum.BOARDHASBEENAPPLIEDFOR.getStatus())) {
|
||||
// throw exception(PLAN_NOT_ALLOW_CANCEL);
|
||||
// }
|
||||
Set<Long> itemIds = planItemMapper.selectList(new LambdaQueryWrapperX<PlanItemDO>()
|
||||
.eq(PlanItemDO::getOrganId,getUserOrganId())
|
||||
.eq(PlanItemDO::getPlanId, id))
|
||||
@@ -484,7 +857,7 @@ public class PlanServiceImpl implements PlanService {
|
||||
return null;
|
||||
}
|
||||
for (Long planId : vo.getPlanIds()) {
|
||||
validatePlanExists(planId);
|
||||
validatePlanExists(planId,null);
|
||||
}
|
||||
QueryWrapperX<PlateDO> queryWrapperX = new QueryWrapperX<>();
|
||||
|
||||
@@ -589,5 +962,74 @@ public class PlanServiceImpl implements PlanService {
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<OrderRoomBodyList> getOrderRoomBody(List<Long> orderIds) {
|
||||
|
||||
|
||||
List<OrderRoomBodyList> orderRoomBodyLists = orderItemMapper.selectRoomBodyByOrderId(orderIds, getUserOrganId());
|
||||
|
||||
|
||||
return orderRoomBodyLists;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void deleteByPlanId(List<Long> planIds, String index) {
|
||||
List<FieldValue> fieldValues = planIds.stream().map(FieldValue::of).toList();
|
||||
|
||||
DeleteByQueryRequest.Builder builder = new DeleteByQueryRequest.Builder();
|
||||
builder.index(index);
|
||||
|
||||
builder.query(q -> q.terms(b -> b.field("planId").terms(e -> e.value(fieldValues))));
|
||||
|
||||
try {
|
||||
DeleteByQueryResponse response = elasticsearchClient.deleteByQuery(builder.build());
|
||||
log.info("Deleted {} documents with planId {}", response.deleted(), planIds);
|
||||
} catch (IOException e) {
|
||||
log.error("Error deleting documents with planId {}: {}", planIds, e.getMessage());
|
||||
throw new ServiceException(ES_ERROR_DELETE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public List<OptimizeBoardModelDO> buildBoardByPlanIds(Collection<Long> planIds, String index, Integer size) {
|
||||
List<FieldValue> fieldValues = planIds.stream().map(FieldValue::of).toList();
|
||||
SearchRequest.Builder builder = new SearchRequest.Builder();
|
||||
builder.index(index);
|
||||
builder.size(size);
|
||||
builder.query(q -> q.terms(b -> b.field("planId").terms(e -> e.value(fieldValues))));
|
||||
try {
|
||||
SearchResponse<OptimizeBoardModelDO> search = elasticsearchClient.search(builder.build(), OptimizeBoardModelDO.class);
|
||||
List<Hit<OptimizeBoardModelDO>> hits = search.hits().hits();
|
||||
if (CollectionUtil.isNotEmpty(hits)) {
|
||||
return hits.stream().map(Hit::source).collect(Collectors.toList());
|
||||
}
|
||||
return new ArrayList<>();
|
||||
} catch (IOException e) {
|
||||
log.error(e.getMessage());
|
||||
throw new ServiceException(INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private List<OptimizeBoardModelDO> buildBoardByPlanId(Long planId, String index,Integer size) {
|
||||
SearchRequest.Builder builder = new SearchRequest.Builder();
|
||||
builder.index(index);
|
||||
builder.size(size);
|
||||
builder.query(q -> q.term(b -> b.field("planId").value(planId)));
|
||||
try {
|
||||
SearchResponse<OptimizeBoardModelDO> search = elasticsearchClient.search(builder.build(), OptimizeBoardModelDO.class);
|
||||
List<Hit<OptimizeBoardModelDO>> hits = search.hits().hits();
|
||||
if (CollectionUtil.isNotEmpty(hits)) {
|
||||
return hits.stream().map(Hit::source).collect(Collectors.toList());
|
||||
}
|
||||
return new ArrayList<>();
|
||||
} catch (IOException e) {
|
||||
log.error(e.getMessage());
|
||||
throw new ServiceException(INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+12
-24
@@ -1,6 +1,5 @@
|
||||
package com.cf.imes.module.executor.service.plate;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import co.elastic.clients.elasticsearch.ElasticsearchClient;
|
||||
@@ -13,57 +12,44 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
|
||||
import com.cf.imes.framework.common.exception.ServiceException;
|
||||
import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil;
|
||||
import com.cf.imes.framework.common.util.json.JsonUtils;
|
||||
import com.cf.imes.framework.es.core.service.ESDocumentService;
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||
import com.cf.imes.framework.mybatis.core.query.MPJLambdaWrapperX;
|
||||
import com.cf.imes.framework.security.core.LoginUser;
|
||||
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import com.cf.imes.module.executor.controller.admin.goods.vo.GoodsSaveReqVO;
|
||||
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.processStepItem.OrderProcessStepItemDO;
|
||||
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;
|
||||
import com.cf.imes.module.executor.dal.mysql.orderGroup.OrderGroupMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.planitem.PlanItemMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.plate.PlateMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.processStepItem.ProcessStepItemMapper;
|
||||
import com.cf.imes.module.executor.enums.OrderItemType;
|
||||
import com.cf.imes.module.executor.util.RandomUtils;
|
||||
import com.cf.imes.module.executor.util.fileConversion.admin.SnowflakeIdWorker3rd;
|
||||
import com.cf.imes.module.system.enums.ErrorCodeConstants;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.cf.imes.module.executor.controller.admin.plate.vo.*;
|
||||
import com.cf.imes.module.executor.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.executor.dal.mysql.plate.PlateMapper;
|
||||
|
||||
import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR;
|
||||
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.*;
|
||||
import static com.cf.imes.module.system.enums.ErrorCodeConstants.PLATE_NOT_EXISTS;
|
||||
import static com.cf.imes.module.system.enums.ErrorCodeConstants.THE_CURRENT_BOARD_IS_NOT_SELECTED;
|
||||
|
||||
/**
|
||||
* 生产单板件 Service 实现类
|
||||
@@ -267,6 +253,8 @@ public class PlateServiceImpl implements PlateService {
|
||||
|
||||
}
|
||||
|
||||
Long goodsId = goodsMapper.selectGoodsId(reqVO.getOrderId(), reqVO.getGoodsId(), getUserOrganId()).getId();
|
||||
|
||||
List<PlateDO> plateDOS = new ArrayList<>();
|
||||
|
||||
for (int i = 0; i < reqVO.getMultiple(); i++) {
|
||||
@@ -279,7 +267,7 @@ public class PlateServiceImpl implements PlateService {
|
||||
|
||||
plateDO.setRemark(reqVO.getRemake1() +","+ reqVO.getRemake2());
|
||||
plateDO.setHoleArrange(reqVO.getPlaceHole());
|
||||
plateDO.setGoodsId(reqVO.getGoodsId());
|
||||
plateDO.setGoodsId(goodsId);
|
||||
|
||||
plateDO.setPlateNo((obtainingTime) + Long.toString(plateNo).substring(2));
|
||||
|
||||
|
||||
+3
-1
@@ -160,5 +160,7 @@ chenfeng:
|
||||
send-maximum-quantity-per-day: 10
|
||||
begin-code: 9999 # 这里配置 9999 的原因是,测试方便。
|
||||
end-code: 9999 # 这里配置 9999 的原因是,测试方便。
|
||||
|
||||
encrypt:
|
||||
enable: false
|
||||
publicKey: cfimes
|
||||
debug: false
|
||||
|
||||
+35
-2
@@ -32,9 +32,9 @@
|
||||
orp.id as remainId
|
||||
from order_goods og
|
||||
left join order_remain_plate orp on og.id = orp.goods_id and og.organ_id = orp.organ_id
|
||||
where og.organ_id =#{organId} and og.deleted = false and og.order_id in
|
||||
where og.organ_id =#{organId} and og.deleted = false and og.id in
|
||||
|
||||
<foreach item="id" collection="orderIds" open="(" separator="," close=")">
|
||||
<foreach item="id" collection="goodsIds" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
|
||||
@@ -90,15 +90,48 @@
|
||||
|
||||
</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">
|
||||
|
||||
|
||||
select ${filed} from order_goods where organ_id = #{organId}
|
||||
and deleted = false
|
||||
and goods_id in
|
||||
|
||||
<foreach item="goodsIds" collection="goodsIds" open="(" separator="," close=")">
|
||||
#{goodsIds}
|
||||
</foreach>
|
||||
|
||||
</select>
|
||||
|
||||
|
||||
</mapper>
|
||||
+127
-11
@@ -3,29 +3,77 @@
|
||||
<mapper namespace="com.cf.imes.module.executor.dal.mysql.order.OrderMapper">
|
||||
|
||||
<select id="selectOrderPage" resultType="com.cf.imes.module.executor.controller.admin.plan.vo.OrderRespVOCopy">
|
||||
select distinct a.id as orderId, a.order_date, a.delivery_date, a.customer, a.address, a.custom_order_no as defineId,
|
||||
count(op.id) as num, sum(op.area) as area,a.update_time
|
||||
select distinct a.id as orderId, a.order_date, a.delivery_date, a.customer, a.address, a.custom_order_no as defineId,a.status,
|
||||
count(op.id) as num, sum(op.area) as area,a.update_time,a.create_time
|
||||
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
|
||||
left join order_plate op on oi.plate_id = op.id and oi.organ_id = op.organ_id
|
||||
left join order_plan_item opi on oi.id = opi.item_id and oi.organ_id = opi.organ_id
|
||||
|
||||
${ew.customSqlSegment}
|
||||
|
||||
|
||||
</select>
|
||||
|
||||
<select id="selectOrderIds" resultType="java.lang.Long">
|
||||
|
||||
<!-- <where>
|
||||
a.deleted = false
|
||||
|
||||
and a.organ_id = #{organId}
|
||||
|
||||
and ( a.status = 3 or a.status = 2 or a.status = 1 )
|
||||
|
||||
and opi.item_id is null
|
||||
|
||||
<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}
|
||||
|
||||
</select>
|
||||
|
||||
|
||||
|
||||
<!-- 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}-->
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -65,7 +113,6 @@
|
||||
</foreach>
|
||||
and o.organ_id = #{organId}
|
||||
and op.deleted = false
|
||||
and op.is_cancel = 0
|
||||
and og.goods_id in
|
||||
|
||||
<foreach collection="orderIds" item="orderIds" open="(" close=")" separator=",">
|
||||
@@ -166,4 +213,73 @@
|
||||
ORDER BY
|
||||
order_date;
|
||||
</select>
|
||||
|
||||
|
||||
<select id="selectTestSQL" resultType="java.util.Map">
|
||||
|
||||
|
||||
select ${filed} from orders
|
||||
where organ_id = #{organId}
|
||||
and deleted = false
|
||||
and id in
|
||||
<foreach collection="orderIds" item="orderIds" open="(" close=")" separator=",">
|
||||
#{orderIds}
|
||||
</foreach>
|
||||
|
||||
</select>
|
||||
|
||||
|
||||
<resultMap id="OrderGoodsMap" type="com.cf.imes.module.executor.controller.admin.plan.vo.OrderGoodsResp">
|
||||
|
||||
<result property="width" column="width"/>
|
||||
<result property="height" column="height"/>
|
||||
<result property="thickness" column="thickness"/>
|
||||
<result property="goodsName" column="goods_name"/>
|
||||
<result property="material" column="material"/>
|
||||
<result property="color" column="color"/>
|
||||
<result property="texture" column="texture"/>
|
||||
<result property="brand" column="brand"/>
|
||||
<result property="goodsId" column="goodsId"/>
|
||||
|
||||
<collection property="orderIds" ofType="com.cf.imes.module.executor.controller.admin.plan.bo.OrderIds" resultMap="OrderIdMap"/>
|
||||
|
||||
</resultMap>
|
||||
|
||||
|
||||
<resultMap id="OrderIdMap" type="com.cf.imes.module.executor.controller.admin.plan.bo.OrderIds">
|
||||
|
||||
<result property="orderId" column="orderId"/>
|
||||
<result property="id" column="id"/>
|
||||
<result property="goodsId" column="goodsId"/>
|
||||
|
||||
</resultMap>
|
||||
|
||||
|
||||
<select id="selectOrderIds" resultMap="OrderGoodsMap">
|
||||
|
||||
select distinct
|
||||
|
||||
og.order_id as orderId,
|
||||
og.id as id,
|
||||
og.goods_id as goodsId,
|
||||
|
||||
og.goods_name,
|
||||
og.color,
|
||||
og.material,
|
||||
og.texture,
|
||||
og.thickness,
|
||||
og.width,
|
||||
og.height,
|
||||
og.brand
|
||||
from order_item oi
|
||||
left join order_plan_item opi on oi.id = opi.item_id and oi.organ_id = opi.organ_id
|
||||
left join order_plate op on oi.plate_id = op.id and oi.organ_id = op.organ_id
|
||||
left join order_goods og on op.goods_id = og.id and op.organ_id = og.organ_id
|
||||
|
||||
${ew.customSqlSegment}
|
||||
|
||||
|
||||
|
||||
|
||||
</select>
|
||||
</mapper>
|
||||
+2
-2
@@ -3,8 +3,8 @@
|
||||
<mapper namespace="com.cf.imes.module.executor.dal.mysql.order.OrderStatisticsMapper">
|
||||
<select id="selectOrderSquareProduce" resultType="java.lang.Integer">
|
||||
SELECT SUM(op.area) as area FROM orders o
|
||||
LEFT JOIN order_plate op on op.order_id = o.id
|
||||
WHERE o.deleted = 0
|
||||
JOIN order_plate op on op.order_id = o.id
|
||||
WHERE o.deleted = 0 and o.status = 3;
|
||||
</select>
|
||||
|
||||
<sql id="dateFormat">
|
||||
|
||||
+49
@@ -207,6 +207,55 @@
|
||||
|
||||
|
||||
|
||||
<resultMap id="RoomBodyListMap" type="com.cf.imes.module.executor.controller.admin.plan.bo.OrderRoomBodyList">
|
||||
|
||||
<result property="orderId" column="orderId"/>
|
||||
|
||||
<collection property="orderRoomIds" ofType="com.cf.imes.module.executor.controller.admin.plan.bo.OrderRoomIds" resultMap="OrderRoomIdsMap"/>
|
||||
|
||||
</resultMap>
|
||||
|
||||
|
||||
<resultMap id="OrderRoomIdsMap" type="com.cf.imes.module.executor.controller.admin.plan.bo.OrderRoomIds">
|
||||
|
||||
<result property="roomId" column="roomId"/>
|
||||
<result property="roomName" column="roomName"/>
|
||||
|
||||
<collection property="orderBodyIds" ofType="com.cf.imes.module.executor.controller.admin.plan.bo.OrderBodyIds" resultMap="OrderBodyIdsMap"/>
|
||||
|
||||
</resultMap>
|
||||
|
||||
|
||||
<resultMap id="OrderBodyIdsMap" type="com.cf.imes.module.executor.controller.admin.plan.bo.OrderBodyIds">
|
||||
|
||||
<result property="bodyId" column="bodyId"/>
|
||||
<result property="bodyName" column="bodyName"/>
|
||||
|
||||
</resultMap>
|
||||
|
||||
|
||||
<select id="selectRoomBodyByOrderId"
|
||||
resultMap="RoomBodyListMap"
|
||||
parameterType="java.lang.Long">
|
||||
|
||||
select distinct
|
||||
oi.order_id as orderId,
|
||||
ob.id as bodyId,
|
||||
ob.name as bodyName,
|
||||
ob.room_id as roomId,
|
||||
ob.room_name as roomName
|
||||
from order_item oi
|
||||
left join order_plan_item opi on oi.id = opi.item_id and oi.organ_id = opi.organ_id
|
||||
left join order_body ob on oi.body_id = ob.id and oi.organ_id = ob.organ_id
|
||||
|
||||
where oi.organ_id = #{organId} and opi.item_id is null and oi.order_id in
|
||||
|
||||
<foreach item="orderIds" collection="orderIds" open="(" separator="," close=")">
|
||||
#{orderIds}
|
||||
</foreach>
|
||||
|
||||
|
||||
</select>
|
||||
|
||||
|
||||
</mapper>
|
||||
+18
@@ -121,4 +121,22 @@
|
||||
WHERE order_id = #{orderId} AND organ_id = #{organId} AND deleted = #{deleted}
|
||||
</select>
|
||||
|
||||
|
||||
|
||||
<select id="selectTestSql" resultType="com.cf.imes.module.executor.dal.dataobject.orderParts.OrderPartsDO">
|
||||
|
||||
|
||||
select distinct ${filed} from order_parts where
|
||||
organ_id = #{organId}
|
||||
|
||||
and deleted = false
|
||||
|
||||
and id in
|
||||
<foreach item="partIds" collection="partIds" open="(" separator="," close=")">
|
||||
#{partIds}
|
||||
</foreach>
|
||||
|
||||
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
+49
-7
@@ -140,8 +140,7 @@
|
||||
,CONCAT(YEAR(p.create_time), '-', MONTH(p.create_time), '-', DAY(p.create_time)) as date
|
||||
</if>
|
||||
from order_plan p
|
||||
where p.organ_id = #{req.organId}
|
||||
and p.create_time between #{req.createTime[0]} and #{req.createTime[1]}
|
||||
where p.create_time between #{req.createTime[0]} and #{req.createTime[1]}
|
||||
and p.deleted = 0
|
||||
group by date;
|
||||
</select>
|
||||
@@ -162,12 +161,55 @@
|
||||
,CONCAT(YEAR(p.create_time), '-', MONTH(p.create_time), '-', DAY(p.create_time)) as date
|
||||
</if>
|
||||
from order_plan p
|
||||
join order_plan_item opi on p.id = opi.plan_id and opi.organ_id = #{req.organId}
|
||||
join order_item oi on oi.id = opi.item_id and oi.organ_id = #{req.organId}
|
||||
join order_plate op on oi.plate_id = op.id and op.organ_id = #{req.organId}
|
||||
where p.organ_id = #{req.organId}
|
||||
and p.create_time between #{req.createTime[0]} and #{req.createTime[1]}
|
||||
join order_plan_item opi on p.id = opi.plan_id
|
||||
join order_item oi on oi.id = opi.item_id
|
||||
join order_plate op on oi.plate_id = op.id
|
||||
where p.create_time between #{req.createTime[0]} and #{req.createTime[1]}
|
||||
and p.deleted = 0
|
||||
group by date;
|
||||
</select>
|
||||
|
||||
<select id="seleTestSQL" resultType="java.util.Map">
|
||||
|
||||
|
||||
select ${filed} from order_plan where id = #{planId} and organ_id = #{organId} and deleted = false
|
||||
|
||||
|
||||
</select>
|
||||
|
||||
|
||||
<select id="selectPlanIds" resultType="com.cf.imes.module.executor.dal.dataobject.plan.PlanDO">
|
||||
|
||||
|
||||
select * from order_plan where
|
||||
organ_id = #{organId}
|
||||
and deleted = false
|
||||
and update_time >= #{updateTime}
|
||||
and sort <= #{sort}
|
||||
and id != #{planId}
|
||||
|
||||
ORDER BY sort DESC, update_time
|
||||
limit 1;
|
||||
|
||||
|
||||
</select>
|
||||
|
||||
|
||||
<select id="selectPlanIdsFalse" resultType="com.cf.imes.module.executor.dal.dataobject.plan.PlanDO">
|
||||
|
||||
select * from order_plan where
|
||||
organ_id = #{organId}
|
||||
and deleted = false
|
||||
and update_time <= #{updateTime}
|
||||
and sort >= #{sort}
|
||||
and id != #{planId}
|
||||
|
||||
ORDER BY sort , update_time desc
|
||||
limit 1;
|
||||
|
||||
|
||||
|
||||
</select>
|
||||
|
||||
|
||||
</mapper>
|
||||
+20
-4
@@ -13,8 +13,20 @@
|
||||
<result property="color" column="color"/>
|
||||
<result property="count" column="plateNum"/>
|
||||
<result property="area" column="area"/>
|
||||
<result property="goodsId" column="goodsId"/>
|
||||
|
||||
<collection property="orderIdList" ofType="com.cf.imes.module.executor.controller.admin.plan.bo.OrderIds" resultMap="OrderIdMap"/>
|
||||
|
||||
</resultMap>
|
||||
|
||||
<resultMap id="OrderIdMap" type="com.cf.imes.module.executor.controller.admin.plan.bo.OrderIds">
|
||||
|
||||
<result property="id" column="id"/>
|
||||
<result property="orderId" column="orderId"/>
|
||||
<result property="goodsId" column="goodsId"/>
|
||||
|
||||
</resultMap>
|
||||
|
||||
<select id="selectGoodsList" resultMap="GoodsListMap" parameterType="java.lang.Long">
|
||||
|
||||
|
||||
@@ -25,13 +37,15 @@
|
||||
og.height as height,
|
||||
og.thickness as thickness ,
|
||||
og.color as color,
|
||||
count(op.id) as plateNum,
|
||||
sum(op.area) as area
|
||||
og.goods_id as goodsId,
|
||||
og.order_id as orderId,
|
||||
og.id as id,
|
||||
count(distinct op.id) as plateNum
|
||||
|
||||
from order_plan_item opi
|
||||
left join order_item oi on opi.item_id = oi.id and opi.organ_id = oi.organ_id
|
||||
left join order_plate op on oi.plate_id = op.id and oi.organ_id = op.organ_id
|
||||
left join order_goods og on oi.order_id = og.order_id and oi.organ_id = og.organ_id
|
||||
left join order_goods og on op.goods_id = og.id and op.organ_id = og.organ_id
|
||||
|
||||
where opi.organ_id = #{organId}
|
||||
and
|
||||
@@ -40,7 +54,9 @@
|
||||
#{ids}
|
||||
</foreach>
|
||||
|
||||
group by planId,material,width,height,thickness,color;
|
||||
and og.goods_id !=0
|
||||
|
||||
group by planId,material,width,height,thickness,color,goodsId,orderId,id;
|
||||
|
||||
</select>
|
||||
|
||||
|
||||
+6
-6
@@ -6,12 +6,12 @@
|
||||
count(a.id) as orderCount
|
||||
from order_goods g
|
||||
left join order_plate a ON g.id = a.goods_id and a.deleted = 0
|
||||
left join orders o ON o.id = a.order_id and o.deleted = 0
|
||||
join orders o ON o.id = a.order_id and o.deleted = 0
|
||||
where g.deleted = 0
|
||||
and o.order_date between #{req.createTime[0]} and #{req.createTime[1]}
|
||||
group by g.goods_id
|
||||
having orderCount > 0
|
||||
order by null;
|
||||
order by orderCount desc
|
||||
limit 10;
|
||||
</select>
|
||||
|
||||
<select id="selectTopTenPlateCountListGroupByOrderDate" resultType="com.cf.imes.module.executor.controller.admin.order.vo.order.OrderGoodsPlateRespVO">
|
||||
@@ -40,7 +40,7 @@
|
||||
</if>
|
||||
FROM order_goods g
|
||||
LEFT JOIN order_plate a ON g.id = a.goods_id and a.deleted = 0
|
||||
LEFT JOIN orders o ON o.id = a.order_id and o.deleted = 0
|
||||
JOIN orders o ON o.id = a.order_id and o.deleted = 0
|
||||
WHERE g.deleted = 0
|
||||
AND o.order_date BETWEEN #{req.createTime[0]} AND #{req.createTime[1]}
|
||||
and g.goods_id in
|
||||
@@ -60,8 +60,8 @@
|
||||
where g.deleted = 0
|
||||
and o.order_date between #{req.createTime[0]} and #{req.createTime[1]}
|
||||
group by g.goods_id
|
||||
having orderArea > 0
|
||||
order by null;
|
||||
order by orderArea
|
||||
limit 10;
|
||||
</select>
|
||||
|
||||
<select id="selectTopTenPlateAreaListGroupByOrderDate"
|
||||
|
||||
+206
-14
@@ -123,9 +123,10 @@
|
||||
|
||||
<resultMap id="PlateDetialMap" type="com.cf.imes.module.executor.controller.admin.plan.vo.PlateDetialRespVO">
|
||||
|
||||
<result property="id" column="plateId"/>
|
||||
<result property="plateId" column="plateId"/>
|
||||
<result property="orderId" column="orderId"/>
|
||||
<result property="goodsId" column="goodsId"/>
|
||||
<result property="id" column="goodsId"/>
|
||||
<result property="goodsId" column="plateGoodsId"/>
|
||||
<result property="plateNo" column="plateNo"/>
|
||||
<result property="name" column="name"/>
|
||||
<result property="height" column="height"/>
|
||||
@@ -189,6 +190,7 @@
|
||||
op.plate_no as plateNo,
|
||||
op.type as type,
|
||||
op.goods_id as goodsId,
|
||||
ogs.goods_id as plateGoodsId,
|
||||
op.width as width,
|
||||
op.height as height,
|
||||
op.thickness as thickness,
|
||||
@@ -221,7 +223,6 @@
|
||||
op.remark as remark,
|
||||
op.filter_type as filterType,
|
||||
op.is_cancel as isCancel,
|
||||
|
||||
ogs.goods_name as goodsName,
|
||||
ob.id as bodyId,
|
||||
ob.room_id as roomId,
|
||||
@@ -252,6 +253,7 @@
|
||||
op.plate_no as plateNo,
|
||||
op.type as type,
|
||||
op.goods_id as goodsId,
|
||||
ogs.goods_id as plateGoodsId,
|
||||
op.width as width,
|
||||
op.height as height,
|
||||
op.thickness as thickness,
|
||||
@@ -284,7 +286,6 @@
|
||||
op.remark as remark,
|
||||
op.filter_type as filterType,
|
||||
op.is_cancel as isCancel,
|
||||
|
||||
ogs.goods_name as goodsName,
|
||||
ob.id as bodyId,
|
||||
ob.room_id as roomId,
|
||||
@@ -297,7 +298,7 @@
|
||||
join order_body ob on oi.body_id = ob.id and oi.organ_id = ob.organ_id
|
||||
left join order_group og on oi.group_id = og.id and oi.organ_id = og.organ_id
|
||||
|
||||
where op.organ_id = #{organId} and op.deleted = false and op.order_id in
|
||||
where op.organ_id = #{organId} and op.deleted = false and op.id in
|
||||
|
||||
<foreach collection="orderIds" item="orderIds" open="(" close=")" separator=",">
|
||||
|
||||
@@ -468,11 +469,11 @@
|
||||
</select>
|
||||
|
||||
|
||||
<select id="selectGoodsPage" resultType="com.cf.imes.module.executor.controller.admin.plan.vo.PlatePage">
|
||||
<!-- <select id="selectGoodsPage" resultType="com.cf.imes.module.executor.controller.admin.plan.vo.NotPlanOrderPlateRespVO">
|
||||
|
||||
|
||||
|
||||
select distinct b.id as orderId,
|
||||
select distinct c.order_id as orderId,
|
||||
c.id as goodsId,
|
||||
c.width,
|
||||
c.height,
|
||||
@@ -485,7 +486,7 @@
|
||||
|
||||
from order_plate a
|
||||
LEFT JOIN order_item oi on a.id = oi.plate_id and a.order_id = oi.order_id and a.organ_id = oi.organ_id
|
||||
LEFT JOIN `orders` b on a.order_id = b.id and a.organ_id = b.organ_id
|
||||
-- LEFT JOIN `orders` b on a.order_id = b.id and a.organ_id = b.organ_id
|
||||
LEFT JOIN order_goods c on a.goods_id = c.id and a.organ_id = c.organ_id
|
||||
left join order_plan_item opi on oi.id = opi.item_id and oi.organ_id = opi.organ_id
|
||||
where
|
||||
@@ -497,13 +498,65 @@
|
||||
#{orderIds}
|
||||
</foreach>
|
||||
|
||||
group by c.id,b.id ,c.goods_name,c.width,c.height,c.thickness, c.material, c.color;
|
||||
group by c.id,c.order_id ,c.goods_name,c.width,c.height,c.thickness, c.material, c.color;
|
||||
|
||||
</select>-->
|
||||
|
||||
<resultMap id="GoodsPageMap" type="com.cf.imes.module.executor.controller.admin.plan.vo.NotPlanOrderPlateRespVO">
|
||||
|
||||
|
||||
<result property="width" column="width"/>
|
||||
<result property="height" column="height"/>
|
||||
<result property="thickness" column="thickness"/>
|
||||
<result property="goodsName" column="goods_name"/>
|
||||
<result property="material" column="material"/>
|
||||
<result property="color" column="color"/>
|
||||
<result property="texture" column="texture"/>
|
||||
<result property="brand" column="brand"/>
|
||||
<result property="goodsId" column="goodsId"/>
|
||||
|
||||
<collection property="orderIdList" ofType="com.cf.imes.module.executor.controller.admin.plan.bo.OrderIds" resultMap="OrderIdMap"/>
|
||||
|
||||
</resultMap>
|
||||
|
||||
<resultMap id="OrderIdMap" type="com.cf.imes.module.executor.controller.admin.plan.bo.OrderIds">
|
||||
|
||||
<result property="orderId" column="orderId"/>
|
||||
<result property="id" column="id"/>
|
||||
<result property="goodsId" column="goodsId"/>
|
||||
|
||||
</resultMap>
|
||||
|
||||
|
||||
<select id="selectGoodsPage"
|
||||
resultMap="GoodsPageMap">
|
||||
|
||||
|
||||
select distinct
|
||||
c.texture,
|
||||
c.width,
|
||||
c.height,
|
||||
c.thickness,
|
||||
c.goods_name,
|
||||
c.material,
|
||||
c.color,
|
||||
c.brand,
|
||||
|
||||
c.order_id as orderId,
|
||||
c.id as id,
|
||||
c.goods_id as goodsId
|
||||
|
||||
from order_plate a
|
||||
LEFT JOIN order_item oi on a.id = oi.plate_id and a.order_id = oi.order_id and a.organ_id = oi.organ_id
|
||||
LEFT JOIN order_goods c on a.goods_id = c.id and a.organ_id = c.organ_id
|
||||
left join order_plan_item opi on oi.id = opi.item_id and oi.organ_id = opi.organ_id
|
||||
|
||||
${ew.customSqlSegment}
|
||||
|
||||
</select>
|
||||
|
||||
|
||||
|
||||
<resultMap id="GoodsList" type="com.cf.imes.module.executor.controller.admin.plan.vo.OrderGoodsResp">
|
||||
|
||||
<result property="goodsId" column="goodsId"/>
|
||||
@@ -536,7 +589,7 @@
|
||||
|
||||
from order_plate a
|
||||
LEFT JOIN order_item oi on a.id = oi.plate_id and a.order_id = oi.order_id and a.organ_id = oi.organ_id
|
||||
LEFT JOIN `orders` b on a.order_id = b.id and a.organ_id = b.organ_id
|
||||
-- LEFT JOIN `orders` b on a.order_id = b.id and a.organ_id = b.organ_id
|
||||
LEFT JOIN order_goods c on a.goods_id = c.id and a.organ_id = c.organ_id
|
||||
left join order_plan_item opi on oi.id = opi.item_id and oi.organ_id = opi.organ_id
|
||||
where
|
||||
@@ -564,13 +617,10 @@
|
||||
c.goods_id as goodsId
|
||||
from order_plate a
|
||||
LEFT JOIN order_item oi on a.id = oi.plate_id and a.order_id = oi.order_id and a.organ_id = oi.organ_id
|
||||
LEFT JOIN `orders` b on a.order_id = b.id and a.organ_id = b.organ_id
|
||||
LEFT JOIN order_goods c on a.goods_id = c.id and a.organ_id = c.organ_id
|
||||
left join order_plan_item opi on oi.id = opi.item_id and oi.organ_id = opi.organ_id
|
||||
where
|
||||
c.organ_id = #{organId}
|
||||
and a.is_cancel = 0
|
||||
and b.status = 2
|
||||
c.organ_id = #{organId}
|
||||
and a.deleted = false
|
||||
and opi.item_id is null
|
||||
and c.order_id in
|
||||
@@ -581,6 +631,28 @@
|
||||
</select>
|
||||
|
||||
|
||||
|
||||
<!-- select distinct
|
||||
a.order_id as orderId,
|
||||
c.id as id,
|
||||
c.goods_id as goodsId
|
||||
from order_plate a
|
||||
LEFT JOIN order_item oi on a.id = oi.plate_id and a.order_id = oi.order_id and a.organ_id = oi.organ_id
|
||||
LEFT JOIN `orders` b on a.order_id = b.id and a.organ_id = b.organ_id
|
||||
LEFT JOIN order_goods c on a.goods_id = c.id and a.organ_id = c.organ_id
|
||||
left join order_plan_item opi on oi.id = opi.item_id and oi.organ_id = opi.organ_id
|
||||
where
|
||||
c.organ_id = #{organId}
|
||||
and a.is_cancel = 0
|
||||
and b.status = 2
|
||||
and a.deleted = false
|
||||
and opi.item_id is null
|
||||
and c.order_id in
|
||||
<foreach collection="orderIds" item="orderIds" open="(" close=")" separator=",">
|
||||
#{orderIds}
|
||||
</foreach>
|
||||
order by a.order_id-->
|
||||
|
||||
<select id="selectGoodsNum" resultType="com.cf.imes.module.executor.controller.admin.plan.bo.GoodsNum">
|
||||
|
||||
|
||||
@@ -624,6 +696,126 @@
|
||||
<if test="bodyId != null">
|
||||
AND i.body_id = #{bodyId}
|
||||
</if>
|
||||
GROUP BY
|
||||
g.goods_id
|
||||
HAVING
|
||||
SUM(a.area) > 0
|
||||
ORDER BY
|
||||
orderArea DESC;
|
||||
</select>
|
||||
|
||||
|
||||
<select id="selectPlateListByGoodIds"
|
||||
resultMap="PlateDetialMap"
|
||||
resultType="java.lang.Long">
|
||||
|
||||
|
||||
select distinct
|
||||
oi.group_id as groupId,
|
||||
og.name as groupName,
|
||||
op.id as plateId,
|
||||
op.order_id as orderId,
|
||||
op.name as name,
|
||||
op.plate_no as plateNo,
|
||||
op.type as type,
|
||||
op.goods_id as goodsId,
|
||||
op.width as width,
|
||||
op.height as height,
|
||||
op.thickness as thickness,
|
||||
op.split_width as splitWidth,
|
||||
op.split_height as splitHeight,
|
||||
op.split_thickness as splitThickness,
|
||||
op.seal_left as sealLeft,
|
||||
op.seal_right as sealRight,
|
||||
op.seal_up as sealUp,
|
||||
op.seal_down as sealDown,
|
||||
op.area as area,
|
||||
op.texture as texture,
|
||||
op.hole_face as holeFace,
|
||||
op.hole_arrange as holeArrange,
|
||||
op.unregular_point_count as unregularPointCount,
|
||||
op.front_hole_count as frontHoleCount,
|
||||
op.back_hole_count as backHoleCount,
|
||||
op.side_hole_count as sideHoleCount,
|
||||
op.front_model_count as frontModelCount,
|
||||
op.back_model_count as backModelCount,
|
||||
op.is_door as isDoor,
|
||||
op.open_door_type as openDoorType,
|
||||
op.offset_x as offsetX,
|
||||
op.offset_y as offsetY,
|
||||
op.is_arc_across as isArcAcross,
|
||||
op.module_type_id as moduleTypeId,
|
||||
op.is_special_shaped as isSpecialShaped,
|
||||
op.is_sculpt as isSculpt,
|
||||
op.is_row_hole as hasHole,
|
||||
op.remark as remark,
|
||||
op.filter_type as filterType,
|
||||
op.is_cancel as isCancel,
|
||||
ob.id as bodyId,
|
||||
ob.room_id as roomId,
|
||||
ob.name as bodyName,
|
||||
ob.room_name as roomName,
|
||||
op.is_row_hole as hasHole
|
||||
|
||||
from order_plate op
|
||||
left join order_item oi on op.id = oi.plate_id and op.organ_id = oi.organ_id
|
||||
left join order_body ob on oi.body_id = ob.id and oi.organ_id = ob.organ_id
|
||||
left join order_group og on oi.group_id = og.id and oi.organ_id = og.organ_id
|
||||
|
||||
where op.organ_id = #{organId} and op.deleted = false and op.goods_id in
|
||||
|
||||
<foreach collection="goodIds" item="goodIds" open="(" close=")" separator=",">
|
||||
|
||||
#{goodIds}
|
||||
|
||||
</foreach>
|
||||
|
||||
|
||||
|
||||
</select>
|
||||
|
||||
<select id="selectPlateArea"
|
||||
resultType="com.cf.imes.module.executor.controller.admin.plan.vo.PlateInfoVO">
|
||||
|
||||
select
|
||||
og.goods_id as goodsId,
|
||||
-- count(distinct og.id) as optimizeGoodsCount,
|
||||
sum(op.area) as area
|
||||
|
||||
from order_plate op
|
||||
left join order_goods og on op.goods_id = og.id
|
||||
|
||||
where og.organ_id = #{organId} and og.goods_id in
|
||||
|
||||
<foreach collection="orderIdsList" item="orderIdsList" open="(" close=")" separator=",">
|
||||
(#{orderIdsList.goodsId})
|
||||
</foreach>
|
||||
|
||||
and og.order_id in
|
||||
|
||||
<foreach collection="orderIdsList" item="orderIdsList" open="(" close=")" separator=",">
|
||||
(#{orderIdsList.orderId})
|
||||
</foreach>
|
||||
|
||||
group by goodsId;
|
||||
|
||||
|
||||
|
||||
</select>
|
||||
|
||||
<select id="selectTestSQL" resultType="java.util.Map">
|
||||
|
||||
|
||||
select ${filed} from order_plate
|
||||
where organ_id = #{organId}
|
||||
and deleted = false
|
||||
and goods_id in
|
||||
<foreach collection="goodsIdList" item="goodsIdList" open="(" close=")" separator=",">
|
||||
#{goodsIdList}
|
||||
</foreach>
|
||||
|
||||
${field2}
|
||||
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||
<mapper namespace="com.cf.imes.module.executor.dal.mysql.remainplaten.RemainPlateMapper">
|
||||
|
||||
|
||||
<select id="selectTestSQL" resultType="java.util.Map">
|
||||
|
||||
|
||||
select ${filed} from order_remain_plate where organ_id = #{organId} and plan_id = #{planId} and deleted = false
|
||||
|
||||
|
||||
</select>
|
||||
</mapper>
|
||||
+12
-9
@@ -2,10 +2,7 @@ package com.cf.imes.module.manage.controller.admin.pack;
|
||||
|
||||
|
||||
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.excel.core.util.ExcelUtils;
|
||||
import com.cf.imes.framework.operatelog.core.annotations.OperateLog;
|
||||
import com.cf.imes.module.manage.controller.admin.pack.prePack.PrePackReqVO;
|
||||
import com.cf.imes.module.manage.controller.admin.pack.vo.*;
|
||||
import com.cf.imes.module.manage.controller.admin.query.vo.pack.OrderPackageVO;
|
||||
@@ -20,14 +17,10 @@ import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
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
|
||||
@@ -80,15 +73,25 @@ public class PackController {
|
||||
|
||||
|
||||
@GetMapping("/getOrderPack")
|
||||
@Operation(summary = "查看生产订单对应的包裹信息")
|
||||
@Operation(summary = "查看生产订单对应的包裹信息-未分页")
|
||||
@PreAuthorize("@ss.hasPermission('manage:pack:query')")
|
||||
public CommonResult<PageResult<OrderPackageVO>> getOrderPack(@Valid PackageDetailsReqVO reqVO) {
|
||||
public CommonResult<List<OrderPackageVO>> getOrderPack(@Valid PackageDetailsReqVO reqVO) {
|
||||
|
||||
return success(packService.getOrderPack(reqVO));
|
||||
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/getPageOrderPack")
|
||||
@Operation(summary = "查看生产订单对应的包裹信息-分页")
|
||||
@PreAuthorize("@ss.hasPermission('manage:pack:query')")
|
||||
public CommonResult<PageResult<OrderPackageVO>> getPageOrderPack(@Valid PackageDetailsReqVO reqVO) {
|
||||
|
||||
return success(packService.getPageOrderPack(reqVO));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@GetMapping("/queryPackageDetails")
|
||||
@Operation(summary = "查询包裹的详细信息")
|
||||
|
||||
+13
-4
@@ -1,13 +1,15 @@
|
||||
package com.cf.imes.module.manage.dal.mysql.pack;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||
import com.cf.imes.framework.common.enums.OrderPackageStatusEnum;
|
||||
import com.cf.imes.framework.common.enums.OrderPackageTypeEnum;
|
||||
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.PackageDetailsReqVO;
|
||||
import com.cf.imes.module.manage.controller.admin.pack.vo.PlateAndPartIdList;
|
||||
import com.cf.imes.module.manage.controller.admin.pack.vo.PlateDetailsRespVO;
|
||||
import com.cf.imes.module.manage.controller.admin.query.vo.pack.OrderPackageVO;
|
||||
@@ -29,8 +31,9 @@ public interface OrderPackageMapper extends BaseMapperX<OrderPackageDO> {
|
||||
// }
|
||||
|
||||
|
||||
IPage<OrderPackageVO> selectByOrderNo(@Param("page") IPage page, @Param("reqVO") PackageDetailsReqVO reqVO, @Param("organId") Long organId);
|
||||
// IPage<OrderPackageVO> selectByOrderNo(@Param("page") IPage page, @Param("reqVO") PackageDetailsReqVO reqVO,@Param("packId") List<Long> packId, @Param("organId") Long organId);
|
||||
|
||||
IPage<OrderPackageVO> selectByOrderNo(@Param("page") IPage page, @Param(Constants.WRAPPER) Wrapper<OrderPackageDO> wrapper);
|
||||
|
||||
default OrderPackageDO selectByPackNo(String packNo,Long organId) {
|
||||
return selectOne(new LambdaQueryWrapperX<OrderPackageDO>()
|
||||
@@ -81,10 +84,16 @@ public interface OrderPackageMapper extends BaseMapperX<OrderPackageDO> {
|
||||
|
||||
|
||||
// 删除当前生产单下所有的包裹
|
||||
default void updateDelete(Long orderId) {
|
||||
default void updateDelete(Long orderId,Long organId) {
|
||||
LambdaUpdateWrapper<OrderPackageDO> wrapper = new LambdaUpdateWrapper<OrderPackageDO>()
|
||||
.set(OrderPackageDO::getDeleted, true)
|
||||
.eq(OrderPackageDO::getOrderId, orderId);
|
||||
.eq(OrderPackageDO::getOrganId,organId)
|
||||
.eq(OrderPackageDO::getOrderId, orderId)
|
||||
.eq(OrderPackageDO::getType, OrderPackageTypeEnum.PLATE.getType());
|
||||
update(wrapper);
|
||||
}
|
||||
|
||||
|
||||
List<OrderPackageVO> selectPackListByOrderId(@Param("orderId") Long orderId,@Param("organId") Long organId);
|
||||
|
||||
}
|
||||
|
||||
+9
-2
@@ -3,10 +3,8 @@ package com.cf.imes.module.manage.dal.mysql.plate;
|
||||
|
||||
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.patching.vo.PatchingDetailReqVO;
|
||||
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.OrderPlateReqVO;
|
||||
import com.cf.imes.module.manage.controller.admin.process.vo.PlateDetails;
|
||||
import com.cf.imes.module.manage.dal.dataobject.plate.OrderPlateDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
@@ -38,4 +36,13 @@ public interface OrderPlateMapper extends BaseMapperX<OrderPlateDO> {
|
||||
.in(OrderPlateDO::getPlateNo, plateNo));
|
||||
|
||||
}
|
||||
|
||||
|
||||
default List<OrderPlateDO> selectplateByPlateNo(Long plateNo, Long orderId, Long organId) {
|
||||
return selectList(new LambdaQueryWrapperX<OrderPlateDO>()
|
||||
.eq(OrderPlateDO::getOrganId, organId)
|
||||
.eq(OrderPlateDO::getOrderId, orderId)
|
||||
.likeIfPresent(OrderPlateDO::getPlateNo, plateNo.toString())
|
||||
.select(OrderPlateDO::getId));
|
||||
}
|
||||
}
|
||||
|
||||
+13
-23
@@ -1,4 +1,4 @@
|
||||
package com.cf.imes.module.manage.dal.mysql.query;
|
||||
package com.cf.imes.module.manage.dal.mysql.process;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
@@ -9,17 +9,15 @@ import com.cf.imes.module.manage.controller.admin.pack.vo.PackPageReqVO;
|
||||
import com.cf.imes.module.manage.controller.admin.pack.vo.PackRespVO;
|
||||
import com.cf.imes.module.manage.controller.admin.pack.vo.PrintOrderPackRespVO;
|
||||
import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.OrderPlatePageReqVO;
|
||||
import com.cf.imes.module.manage.controller.admin.query.vo.pack.PrintOrderRespVO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.process.OrderDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
|
||||
|
||||
@Mapper
|
||||
public interface ProductionStatusMapper extends BaseMapperX<OrderDO> {
|
||||
public interface OrdersMapper extends BaseMapperX<OrderDO> {
|
||||
|
||||
|
||||
|
||||
default PageResult<OrderDO> selectProductionPage(OrderPlatePageReqVO pageReqVO) {
|
||||
@@ -38,32 +36,24 @@ public interface ProductionStatusMapper extends BaseMapperX<OrderDO> {
|
||||
|
||||
|
||||
|
||||
List<PackRespVO> selectOrderIds( @Param("createTime") String createTime, @Param("organId") Long organId, @Param("orderId") Long orderId);
|
||||
|
||||
|
||||
|
||||
PrintOrderRespVO selectPrintOrder(@Param("orderNo") Long orderNo,@Param("organId")Long organId);
|
||||
|
||||
|
||||
// default List<OrderDO> selectOrderIds(PackPageReqVO pageReqVO,Long organId) {
|
||||
// return selectList(new LambdaQueryWrapperX<OrderDO>()
|
||||
// .eq(OrderDO::getOrganId,organId)
|
||||
// .eqIfPresent(OrderDO::getId, pageReqVO.getOrderId())
|
||||
// .eqIfPresent(OrderDO::getCustomOrderNo, pageReqVO.getCustomOrderNo())
|
||||
// .likeIfPresent(OrderDO::getCustomer, pageReqVO.getCustomer())
|
||||
// .likeIfPresent(OrderDO::getAddress, pageReqVO.getAddress())
|
||||
// .eqIfPresent(OrderDO::getStatus, pageReqVO.getStatus())
|
||||
// .orderByDesc(OrderDO::getCreateTime));
|
||||
// }
|
||||
|
||||
IPage<PackRespVO> selectOrderPlate( @Param("page") IPage page, @Param("orderIds") List<Long> orderIds, @Param("organId") Long organId);
|
||||
List<PackRespVO> selectOrderIdsFalse( @Param("createTime") String createTime,@Param("organId") Long organId, @Param("orderId") Long orderId);
|
||||
|
||||
|
||||
|
||||
|
||||
PrintOrderPackRespVO selectOrderPack(@Param("orderNo")Long orderNo,@Param("packageNo") Long packageNo, @Param("organId") Long organId);
|
||||
IPage<PackRespVO> selectOrderPlate(@Param("page") IPage page, @Param("orderIds") List<Long> orderIds, @Param("organId") Long organId);
|
||||
|
||||
|
||||
|
||||
List<OrderDO> selectOrderIds(@Param("pageReqVO") PackPageReqVO pageReqVO,@Param("organId") Long organId);
|
||||
PrintOrderPackRespVO selectOrderPack(@Param("orderNo")Long orderNo, @Param("packageNo") Long packageNo, @Param("organId") Long organId);
|
||||
|
||||
|
||||
|
||||
IPage<PackRespVO> selectOrderIdList(@Param("page") IPage page, @Param("pageReqVO") PackPageReqVO pageReqVO, @Param("organId") Long organId);
|
||||
|
||||
|
||||
|
||||
}
|
||||
-42
@@ -1,42 +0,0 @@
|
||||
package com.cf.imes.module.manage.dal.mysql.process;
|
||||
|
||||
|
||||
|
||||
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.cf.imes.module.manage.controller.admin.patching.vo.PatchingPlatePageReqVO;
|
||||
import com.cf.imes.module.manage.controller.admin.patching.vo.PatchingPlateRespVO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.process.OrderDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 生产单表 order_{N} Mapper
|
||||
*
|
||||
* @author 晨丰科技
|
||||
*/
|
||||
@Mapper
|
||||
public interface ProductionProcessMapper extends BaseMapperX<OrderDO> {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
List<PatchingPlateRespVO> selectPatchingPlate(PatchingPlatePageReqVO pageReqVO);
|
||||
|
||||
|
||||
OrderDO selectOrderIds(@Param("createTime") String createTime, @Param("organId") Long organId, @Param("orderId") Long orderId);
|
||||
|
||||
OrderDO selectOrderIdsFalse(@Param("createTime") String createTime,@Param("organId") Long organId, @Param("orderId") Long orderId);
|
||||
|
||||
|
||||
// OrderDO selectOrderIds(@Param("orderId") Long orderId,@Param("organId") Long organId);
|
||||
//
|
||||
// OrderDO selectOrderIdsFalse(@Param("orderId") Long orderId,@Param("organId") Long userOrganId);
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
+23
-7
@@ -1,12 +1,11 @@
|
||||
package com.cf.imes.module.manage.dal.mysql.query;
|
||||
|
||||
|
||||
|
||||
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.*;
|
||||
import com.cf.imes.module.manage.controller.admin.process.vo.OrderPlateReqVO;
|
||||
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;
|
||||
@@ -14,13 +13,10 @@ import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.Orde
|
||||
import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.OrderPlateRespVO;
|
||||
import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.PlatePageVO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.query.OrderItemDO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.query.OrderPackageDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Mapper
|
||||
public interface OrderItemMapper extends BaseMapperX<OrderItemDO> {
|
||||
@@ -98,4 +94,24 @@ public interface OrderItemMapper extends BaseMapperX<OrderItemDO> {
|
||||
.eqIfPresent(OrderItemDO::getOrderId, orderId));
|
||||
}
|
||||
|
||||
|
||||
List<PackRespVO> selectPlateNum(@Param("orderIds") List<Long> orderIds,@Param("organId") Long organId);
|
||||
|
||||
|
||||
|
||||
default List<OrderItemDO> selectPartsList(Long orderId, Long organId) {
|
||||
return selectList(new LambdaQueryWrapperX<OrderItemDO>()
|
||||
.eq(OrderItemDO::getOrganId, organId)
|
||||
.eqIfPresent(OrderItemDO::getOrderId, orderId)
|
||||
.eq(OrderItemDO::getPackageId,0)
|
||||
.select(OrderItemDO::getPartsId));
|
||||
}
|
||||
|
||||
|
||||
default List<OrderItemDO> selectPackByPlateId(List<Long> plateId, Long organId) {
|
||||
return selectList(new LambdaQueryWrapperX<OrderItemDO>()
|
||||
.eq(OrderItemDO::getOrganId, organId)
|
||||
.inIfPresent(OrderItemDO::getPlateId, plateId)
|
||||
.select(OrderItemDO::getPackageId));
|
||||
}
|
||||
}
|
||||
|
||||
+3
-1
@@ -16,9 +16,11 @@ public interface PackService {
|
||||
|
||||
|
||||
// 查看生产订单对应的包裹信息
|
||||
PageResult<OrderPackageVO> getOrderPack(PackageDetailsReqVO reqVO);
|
||||
List<OrderPackageVO> getOrderPack(PackageDetailsReqVO reqVO);
|
||||
|
||||
|
||||
PageResult<OrderPackageVO> getPageOrderPack(PackageDetailsReqVO reqVO);
|
||||
|
||||
|
||||
// 查看生产订单对应的板材信息
|
||||
List<PlateDetailsRespVO> getOrderPlateList(Long orderId);
|
||||
|
||||
+105
-34
@@ -10,6 +10,7 @@ import com.cf.imes.framework.common.enums.UserSettingTypeEnum;
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
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;
|
||||
import com.cf.imes.module.manage.controller.admin.pack.prePack.PackPlateList;
|
||||
import com.cf.imes.module.manage.controller.admin.pack.prePack.PrePackOptimizeInfo;
|
||||
import com.cf.imes.module.manage.controller.admin.pack.prePack.PrePackReqVO;
|
||||
@@ -25,13 +26,10 @@ 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.process.ProcessStepItemMapper;
|
||||
import com.cf.imes.module.manage.dal.mysql.process.ProcessStepMapper;
|
||||
import com.cf.imes.module.manage.dal.mysql.process.ProductionProcessMapper;
|
||||
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.dal.mysql.query.ProductionStatusMapper;
|
||||
import com.cf.imes.module.manage.service.process.ProductionProcessServiceImpl;
|
||||
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;
|
||||
@@ -64,8 +62,6 @@ public class PackServiceImpl implements PackService {
|
||||
@Resource
|
||||
private OrderPackageMapper orderPackageMapper;
|
||||
|
||||
@Resource
|
||||
private ProductionStatusMapper productionStatusMapper;
|
||||
|
||||
@Resource
|
||||
private OrderItemMapper orderItemMapper;
|
||||
@@ -80,16 +76,11 @@ public class PackServiceImpl implements PackService {
|
||||
private OrderPlateMapper orderPlateMapper;
|
||||
|
||||
@Resource
|
||||
private ProcessStepMapper processStepMapper;
|
||||
private OrdersMapper ordersMapper;
|
||||
|
||||
@Resource
|
||||
private ProductionProcessServiceImpl productionProcessService;
|
||||
private PlateMapper plateMapper;
|
||||
|
||||
@Resource
|
||||
private ProcessStepItemMapper processStepItemMapper;
|
||||
|
||||
@Resource
|
||||
private ProductionProcessMapper productionProcessMapper;
|
||||
|
||||
@Resource
|
||||
private SnowflakeIdWorker3rd idWorker;
|
||||
@@ -110,48 +101,62 @@ public class PackServiceImpl implements PackService {
|
||||
|
||||
List<Long> orderIds = new ArrayList<>();
|
||||
|
||||
|
||||
IPage<PackRespVO> packRespVOS = new PageDTO<>();
|
||||
|
||||
|
||||
if(pageReqVO.getIsUp() != null){
|
||||
|
||||
OrderDO order = productionProcessMapper.selectById(pageReqVO.getOrderId());
|
||||
OrderDO order = ordersMapper.selectById(pageReqVO.getOrderId());
|
||||
|
||||
|
||||
OrderDO orderDO = pageReqVO.getIsUp() ?
|
||||
productionProcessMapper.selectOrderIds(order.getCreateTime().toString(), getUserOrganId(),order.getId()) :
|
||||
List<PackRespVO> packRespVOList = pageReqVO.getIsUp() ?
|
||||
ordersMapper.selectOrderIds(order.getCreateTime().toString(), getUserOrganId(),order.getId()) :
|
||||
|
||||
productionProcessMapper.selectOrderIdsFalse(order.getCreateTime().toString(), getUserOrganId(),order.getId());
|
||||
ordersMapper.selectOrderIdsFalse(order.getCreateTime().toString(), getUserOrganId(),order.getId());
|
||||
|
||||
if(orderDO == null){
|
||||
if(packRespVOList.isEmpty()){
|
||||
throw exception(NO_PRODUCTION_ORDER_INFORMATION_AVAILABLE, pageReqVO.getIsUp() ?"第" : "最后");
|
||||
}
|
||||
|
||||
orderIds.add(orderDO.getId());
|
||||
packRespVOS.setRecords(packRespVOList);
|
||||
|
||||
orderIds.addAll(packRespVOS.getRecords().stream().map(PackRespVO::getId).toList());
|
||||
|
||||
}else {
|
||||
|
||||
pageReqVO.setCustomer(insertSeparator(pageReqVO.getCustomer()));
|
||||
pageReqVO.setCustomOrderNo(insertSeparator(pageReqVO.getCustomOrderNo()));
|
||||
pageReqVO.setAddress(insertSeparator(pageReqVO.getAddress()));
|
||||
|
||||
// 根据生产状态查询生产单号
|
||||
// List<Long> orderIds = productionStatusMapper.selectOrderIds(pageReqVO, getUserOrganId()).stream().map(OrderDO::getId).toList();
|
||||
|
||||
orderIds.addAll(productionStatusMapper.selectOrderIds(pageReqVO, getUserOrganId()).stream().map(OrderDO::getId).toList());
|
||||
// 查询查询分页
|
||||
packRespVOS = ordersMapper.selectOrderIdList(page,pageReqVO, getUserOrganId());
|
||||
|
||||
orderIds.addAll(packRespVOS.getRecords().stream().map(PackRespVO::getId).toList());
|
||||
|
||||
if (orderIds.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// 查询打包首页分页数据信息,总的板件数量信息
|
||||
IPage<PackRespVO> packRespVOS = productionStatusMapper.selectOrderPlate(page,orderIds,getUserOrganId());
|
||||
|
||||
// 查询板材的总量
|
||||
List<PackRespVO> packRespVOList = orderItemMapper.selectPlateNum(orderIds,getUserOrganId());
|
||||
|
||||
|
||||
// 查询当前生产的包裹数量
|
||||
List<PackRespVO> respVOS = orderPackageMapper.selectPackPage(orderIds,getUserOrganId());
|
||||
|
||||
|
||||
// 查询当前生产单已经打包的板材数量
|
||||
List<PackRespVO> plateNum = orderPackageMapper.selectPackPieceCount(orderIds, getUserOrganId());
|
||||
|
||||
|
||||
for (PackRespVO record : packRespVOS.getRecords()) {
|
||||
|
||||
// 板材总数
|
||||
record.setTotalPieceCount(packRespVOList.stream().filter(f -> Objects.equals(f.getId(), record.getId())).mapToLong(PackRespVO::getTotalPieceCount).sum());
|
||||
// 已打包数
|
||||
record.setPackCount(respVOS.stream().filter(f -> Objects.equals(f.getId(), record.getId())).mapToLong(PackRespVO::getPackCount).sum());
|
||||
// 已打包片数
|
||||
@@ -238,13 +243,73 @@ public class PackServiceImpl implements PackService {
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 查看生产订单对应的包裹信息
|
||||
@Override
|
||||
public PageResult<OrderPackageVO> getOrderPack(PackageDetailsReqVO reqVO) {
|
||||
public List<OrderPackageVO> getOrderPack(PackageDetailsReqVO reqVO) {
|
||||
|
||||
|
||||
List<OrderPackageVO> orderPackageVOS = orderPackageMapper.selectPackListByOrderId(reqVO.getOrderId(), getUserOrganId());
|
||||
|
||||
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());
|
||||
// }
|
||||
|
||||
|
||||
return orderPackageVOS.stream().peek(m -> {
|
||||
m.setCustomOrderNo(orderDO.getCustomOrderNo());
|
||||
m.setCustomer(orderDO.getCustomer());
|
||||
m.setAddress(orderDO.getAddress());
|
||||
m.setDealer(orderDO.getDealer());
|
||||
m.setOrderRemark(orderDO.getRemark());
|
||||
}
|
||||
).toList();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public PageResult<OrderPackageVO> getPageOrderPack(PackageDetailsReqVO reqVO) {
|
||||
|
||||
PageDTO<OrderPackageVO> page = new PageDTO<>(reqVO.getPageNo(), reqVO.getPageSize());
|
||||
|
||||
IPage<OrderPackageVO> orderPackageDOIPage = orderPackageMapper.selectByOrderNo(page,reqVO, getUserOrganId());
|
||||
List<Long> packId = null;
|
||||
|
||||
if(reqVO.getPlateNo()!= null){
|
||||
|
||||
|
||||
List<Long> plateId = orderPlateMapper.selectplateByPlateNo(reqVO.getPlateNo(), reqVO.getOrderId(), getUserOrganId())
|
||||
.stream().map(OrderPlateDO::getId).toList();
|
||||
|
||||
if(plateId.isEmpty()){
|
||||
return null;
|
||||
}
|
||||
|
||||
packId = orderItemMapper.selectPackByPlateId(plateId, getUserOrganId()).stream().map(OrderItemDO::getPackageId).distinct().toList();
|
||||
|
||||
}
|
||||
|
||||
|
||||
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)
|
||||
.eqIfPresent("op.status", reqVO.getPackStatus())
|
||||
.orderByDesc("op.create_time");
|
||||
|
||||
|
||||
IPage<OrderPackageVO> orderPackageDOIPage = orderPackageMapper.selectByOrderNo(page,queryWrapperX);
|
||||
|
||||
|
||||
if (CollectionUtil.isEmpty(orderPackageDOIPage.getRecords())) {
|
||||
@@ -261,9 +326,6 @@ public class PackServiceImpl implements PackService {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 查看配件列表分页
|
||||
@Override
|
||||
public List<OrderPartsRespVO> getPartsList(OrderPartsReqVO reqVO) {
|
||||
@@ -497,7 +559,7 @@ public class PackServiceImpl implements PackService {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateOrderStatus(Long orderId) {
|
||||
|
||||
OrderDO orderDO = productionProcessMapper.selectById(orderId);
|
||||
OrderDO orderDO = ordersMapper.selectById(orderId);
|
||||
|
||||
if(orderDO.getFinishTime() != null){
|
||||
return;
|
||||
@@ -525,7 +587,7 @@ public class PackServiceImpl implements PackService {
|
||||
// 修改生产单的打包状态未已打包
|
||||
orderDO.setPackaged(OrderPackageStatusEnum.PACKAGED.getStatus());
|
||||
|
||||
productionProcessMapper.updateById(orderDO);
|
||||
ordersMapper.updateById(orderDO);
|
||||
|
||||
|
||||
}
|
||||
@@ -549,7 +611,7 @@ public class PackServiceImpl implements PackService {
|
||||
@Override
|
||||
public PrintOrderPackRespVO printOrderPack(PrintOrderPackReqVO reqVO) {
|
||||
|
||||
PrintOrderPackRespVO printOrderPackRespVO = productionStatusMapper.selectOrderPack(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;
|
||||
|
||||
@@ -799,7 +861,8 @@ public class PackServiceImpl implements PackService {
|
||||
|
||||
if(!packageDOS.isEmpty()){
|
||||
|
||||
orderPackageMapper.updateDelete(reqVO.getOrderId());
|
||||
// 删除除配件和其他配件外的所有包裹
|
||||
orderPackageMapper.updateDelete(reqVO.getOrderId(),getUserOrganId());
|
||||
|
||||
}
|
||||
|
||||
@@ -828,6 +891,14 @@ public class PackServiceImpl implements PackService {
|
||||
|
||||
orderItemMapper.updateBatch(orderItemDOS);
|
||||
|
||||
List<OrderItemDO> orderItemDoPartsList = orderItemMapper.selectPartsList(reqVO.getOrderId(), getUserOrganId());
|
||||
|
||||
if(orderItemDoPartsList.isEmpty()) {
|
||||
OrderDO orderDO = ordersMapper.selectById(reqVO.getOrderId());
|
||||
orderDO.setPackaged(OrderPackageStatusEnum.PACKAGED.getStatus());
|
||||
ordersMapper.updateById(orderDO);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
+3
-19
@@ -1,22 +1,15 @@
|
||||
package com.cf.imes.module.manage.service.patching;
|
||||
|
||||
|
||||
import com.alibaba.nacos.shaded.com.google.gson.Gson;
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.framework.common.util.json.JsonUtils;
|
||||
import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||
import com.cf.imes.module.manage.controller.admin.pack.vo.PlateDetailsRespVO;
|
||||
import com.cf.imes.module.manage.controller.admin.patching.vo.*;
|
||||
import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.OrderPlateRespVO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.patching.MachineDO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.patching.PatchDetailDO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.plate.OrderPlateDO;
|
||||
import com.cf.imes.module.manage.dal.mysql.patching.MachineMapper;
|
||||
import com.cf.imes.module.manage.dal.mysql.patching.PatchDetailMapper;
|
||||
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.ProductionProcessMapper;
|
||||
import com.cf.imes.module.manage.util.page.PageHelperUtil;
|
||||
import com.cf.imes.module.manage.dal.dataobject.patching.MachineDO;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -30,8 +23,7 @@ import java.util.List;
|
||||
public class PatchingPlateServiceImpl implements PatchingPlateService{
|
||||
|
||||
|
||||
@Resource
|
||||
private ProductionProcessMapper productionProcessMapper;
|
||||
|
||||
|
||||
@Resource
|
||||
private OrderPlateMapper orderPlateMapper;
|
||||
@@ -48,15 +40,7 @@ public class PatchingPlateServiceImpl implements PatchingPlateService{
|
||||
@Override
|
||||
public PageResult<PatchingPlateRespVO> patchingSearchPlate(PatchingPlatePageReqVO pageReqVO) {
|
||||
|
||||
|
||||
// 查询板件和订单的基础信息
|
||||
PageHelper.startPage(pageReqVO.getPageNo(), pageReqVO.getPageSize());
|
||||
List<PatchingPlateRespVO> patchingPlateRespVOS = productionProcessMapper.selectPatchingPlate(pageReqVO);
|
||||
|
||||
//
|
||||
PageInfo<PatchingPlateRespVO> pageInfo = new PageInfo<>(patchingPlateRespVOS);
|
||||
return PageHelperUtil.convertToPageResult(pageInfo);
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
|
||||
+13
-16
@@ -2,8 +2,6 @@ package com.cf.imes.module.manage.service.process;
|
||||
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.log.Log;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
|
||||
import com.cf.imes.framework.common.enums.OrderStatusEnum;
|
||||
@@ -15,15 +13,14 @@ import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||
import com.cf.imes.module.manage.controller.admin.process.vo.*;
|
||||
import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.OrderModuleVO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.pack.OrderBodyDO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.plate.OrderPlateDO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.plate.PlateDO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.process.OrderDO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.process.OrderProcessStepItemNDO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.process.OrderProcessStepNDO;
|
||||
import com.cf.imes.module.manage.dal.mysql.pack.OrderBodyMapper;
|
||||
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.*;
|
||||
import com.cf.imes.module.manage.dal.mysql.process.OrdersMapper;
|
||||
import com.cf.imes.module.manage.dal.mysql.process.ProcessStepItemMapper;
|
||||
import com.cf.imes.module.manage.dal.mysql.process.ProcessStepMapper;
|
||||
import com.cf.imes.module.manage.dal.mysql.query.OrderItemMapper;
|
||||
import com.cf.imes.module.system.api.process.ProcessApi;
|
||||
import com.cf.imes.module.system.enums.ErrorCodeConstants;
|
||||
@@ -35,7 +32,7 @@ import org.springframework.validation.annotation.Validated;
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.cf.imes.framework.common.util.string.SearchUtil.insertSeparator;
|
||||
@@ -73,7 +70,7 @@ public class ProductionProcessServiceImpl implements ProductionProcessService {
|
||||
private OrderPlateMapper orderPlateMapper;
|
||||
|
||||
@Resource
|
||||
private ProductionProcessMapper productionProcessMapper;
|
||||
private OrdersMapper ordersMapper;
|
||||
|
||||
|
||||
@Resource
|
||||
@@ -161,10 +158,10 @@ public class ProductionProcessServiceImpl implements ProductionProcessService {
|
||||
}
|
||||
// 当前工序已全部加工,修改生产单的状态为生产完成
|
||||
if(validateOrderStatus(processStepStatuses.getOrderId())){
|
||||
OrderDO orderDO = productionProcessMapper.selectById(processStepStatuses.getOrderId());
|
||||
OrderDO orderDO = ordersMapper.selectById(processStepStatuses.getOrderId());
|
||||
orderDO.setStatus(OrderStatusEnum.FINISH_PRODUCTION.getStatus());
|
||||
orderDO.setFinishTime(LocalDateTime.now());
|
||||
productionProcessMapper.updateById(orderDO);
|
||||
ordersMapper.updateById(orderDO);
|
||||
}
|
||||
|
||||
return;
|
||||
@@ -192,10 +189,10 @@ public class ProductionProcessServiceImpl implements ProductionProcessService {
|
||||
}
|
||||
// 当前工序已全部加工,修改生产单的状态为生产完成
|
||||
if(validateOrderStatus(processStepStatuses.getOrderId())){
|
||||
OrderDO orderDO = productionProcessMapper.selectById(processStepStatuses.getOrderId());
|
||||
OrderDO orderDO = ordersMapper.selectById(processStepStatuses.getOrderId());
|
||||
orderDO.setStatus(OrderStatusEnum.FINISH_PRODUCTION.getStatus());
|
||||
orderDO.setFinishTime(LocalDateTime.now());
|
||||
productionProcessMapper.updateById(orderDO);
|
||||
ordersMapper.updateById(orderDO);
|
||||
}
|
||||
return;
|
||||
|
||||
@@ -211,19 +208,19 @@ public class ProductionProcessServiceImpl implements ProductionProcessService {
|
||||
|
||||
// 判断当前工序的状态是否为打包类型,如果是,修改生产的状态为生产完成
|
||||
if(processStepStatuses.getType().equals(ProcessProcessingTypeEnum.PACK.getNumber())){
|
||||
OrderDO orderDO = productionProcessMapper.selectById(processStepStatuses.getOrderId());
|
||||
OrderDO orderDO = ordersMapper.selectById(processStepStatuses.getOrderId());
|
||||
orderDO.setStatus(OrderStatusEnum.FINISH_PRODUCTION.getStatus());
|
||||
orderDO.setFinishTime(LocalDateTime.now());
|
||||
productionProcessMapper.updateById(orderDO);
|
||||
ordersMapper.updateById(orderDO);
|
||||
return;
|
||||
}
|
||||
|
||||
// 当前工序已全部加工,修改生产单的状态为生产完成
|
||||
if(validateOrderStatus(processStepStatuses.getOrderId())){
|
||||
OrderDO orderDO = productionProcessMapper.selectById(processStepStatuses.getOrderId());
|
||||
OrderDO orderDO = ordersMapper.selectById(processStepStatuses.getOrderId());
|
||||
orderDO.setStatus(OrderStatusEnum.FINISH_PRODUCTION.getStatus());
|
||||
orderDO.setFinishTime(LocalDateTime.now());
|
||||
productionProcessMapper.updateById(orderDO);
|
||||
ordersMapper.updateById(orderDO);
|
||||
}
|
||||
|
||||
}catch (Exception e){
|
||||
|
||||
+11
-11
@@ -7,12 +7,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
|
||||
import com.cf.imes.framework.common.enums.OrderPackageTypeEnum;
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||
import com.cf.imes.module.manage.controller.admin.pack.vo.GroupNameList;
|
||||
import com.cf.imes.module.manage.controller.admin.pack.vo.OrderPartsReqVO;
|
||||
import com.cf.imes.module.manage.controller.admin.pack.vo.PackDetailsReqVO;
|
||||
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.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;
|
||||
@@ -21,11 +17,12 @@ import com.cf.imes.module.manage.controller.admin.query.vo.salary.PriceRatePageR
|
||||
import com.cf.imes.module.manage.controller.admin.query.vo.salary.PriceRateReqVO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.process.OrderDO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.process.OrderProcessStepNDO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.query.OrderPackageDO;
|
||||
import com.cf.imes.module.manage.dal.mysql.pack.OrderPackageMapper;
|
||||
import com.cf.imes.module.manage.dal.mysql.process.OrdersMapper;
|
||||
import com.cf.imes.module.manage.dal.mysql.process.ProcessStepItemMapper;
|
||||
import com.cf.imes.module.manage.dal.mysql.process.ProcessStepMapper;
|
||||
import com.cf.imes.module.manage.dal.mysql.query.*;
|
||||
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.page.PageHelperUtil;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
@@ -43,8 +40,7 @@ import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.ge
|
||||
@Validated
|
||||
public class ProductionStatusServiceImpl implements ProductionStatusService {
|
||||
|
||||
@Resource
|
||||
private ProductionStatusMapper productionStatusMapper;
|
||||
|
||||
|
||||
@Resource
|
||||
private ProcessStepMapper processStepMapper;
|
||||
@@ -56,6 +52,8 @@ public class ProductionStatusServiceImpl implements ProductionStatusService {
|
||||
@Resource
|
||||
private OrderPackageMapper orderPackageMapper;
|
||||
|
||||
@Resource
|
||||
private OrdersMapper ordersMapper;
|
||||
|
||||
@Resource
|
||||
private OrderItemMapper orderItemMapper;
|
||||
@@ -69,7 +67,7 @@ public class ProductionStatusServiceImpl implements ProductionStatusService {
|
||||
@Override
|
||||
public PageResult<OrderDO> getProductionPage(OrderPlatePageReqVO pageReqVO) {
|
||||
|
||||
return productionStatusMapper.selectProductionPage(pageReqVO);
|
||||
return ordersMapper.selectProductionPage(pageReqVO);
|
||||
|
||||
}
|
||||
|
||||
@@ -156,7 +154,7 @@ public class ProductionStatusServiceImpl implements ProductionStatusService {
|
||||
@Override
|
||||
public PageResult<OrderDO> queryPackage(OrderPlatePageReqVO pageReqVO) {
|
||||
|
||||
return productionStatusMapper.selectProductionPage(pageReqVO);
|
||||
return ordersMapper.selectProductionPage(pageReqVO);
|
||||
|
||||
}
|
||||
|
||||
@@ -235,7 +233,9 @@ public class ProductionStatusServiceImpl implements ProductionStatusService {
|
||||
@Override
|
||||
public PrintOrderRespVO printOrder(Long orderNo) {
|
||||
|
||||
return productionStatusMapper.selectPrintOrder(orderNo,getUserOrganId());
|
||||
// return productionStatusMapper.selectPrintOrder(orderNo,getUserOrganId());
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
|
||||
+112
-57
@@ -15,42 +15,69 @@
|
||||
resultMap="PackMap">
|
||||
|
||||
|
||||
select
|
||||
op.order_id as id,
|
||||
count(distinct op.id) as packCount
|
||||
|
||||
from order_package op
|
||||
join order_item oi on op.id = oi.package_id and op.organ_id = oi.organ_id
|
||||
select
|
||||
order_id as id,
|
||||
count(id) as packCount
|
||||
|
||||
from order_package
|
||||
|
||||
where
|
||||
oi.package_id != 0
|
||||
and op.organ_id = #{organId}
|
||||
and op.order_id in
|
||||
organ_id = #{organId}
|
||||
|
||||
and status !=0
|
||||
|
||||
and deleted = false
|
||||
|
||||
and order_id in
|
||||
<foreach item="id" collection="orderIds" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
group by op.order_id;
|
||||
|
||||
group by order_id
|
||||
|
||||
</select>
|
||||
|
||||
|
||||
<!-- select-->
|
||||
<!-- op.order_id as id,-->
|
||||
<!-- count(distinct op.id) as packCount-->
|
||||
|
||||
<!-- from order_package op-->
|
||||
<!-- join order_item oi on op.id = oi.package_id and op.organ_id = oi.organ_id-->
|
||||
<!-- where-->
|
||||
<!-- oi.package_id != 0-->
|
||||
<!-- and op.organ_id = #{organId}-->
|
||||
<!-- and op.order_id in-->
|
||||
<!-- <foreach item="id" collection="orderIds" open="(" separator="," close=")">-->
|
||||
<!-- #{id}-->
|
||||
<!-- </foreach>-->
|
||||
<!-- group by op.order_id;-->
|
||||
|
||||
<select id="selectPackPieceCount"
|
||||
parameterType="java.util.List"
|
||||
resultMap="PackMap">
|
||||
|
||||
select
|
||||
op.order_id as id,
|
||||
count(distinct oi.plate_id ) as packPieceCount
|
||||
select distinct
|
||||
|
||||
from order_package op
|
||||
join order_item oi on op.id = oi.package_id and op.organ_id = oi.organ_id
|
||||
op.order_id as id,
|
||||
count(distinct oi.plate_id ) as packPieceCount
|
||||
|
||||
where oi.package_id !=0
|
||||
from order_item oi
|
||||
join order_package op on oi.package_id = op.id and oi.organ_id = op.organ_id
|
||||
|
||||
where
|
||||
oi.organ_id = #{organId}
|
||||
|
||||
and oi.order_id in
|
||||
<foreach item="id" collection="orderIds" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
|
||||
and op.status != 0
|
||||
and oi.package_id !=0
|
||||
and oi.plate_id != 0
|
||||
and op.organ_id =#{organId}
|
||||
and op.order_id in
|
||||
<foreach item="id" collection="orderIds" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
|
||||
|
||||
group by op.order_id;
|
||||
|
||||
@@ -133,55 +160,60 @@
|
||||
|
||||
|
||||
<select id="selectByOrderNo"
|
||||
resultType="com.cf.imes.module.manage.controller.admin.query.vo.pack.OrderPackageVO"
|
||||
parameterType="map">
|
||||
resultType="com.cf.imes.module.manage.controller.admin.query.vo.pack.OrderPackageVO">
|
||||
|
||||
select distinct
|
||||
opn.id,
|
||||
opn.order_id,
|
||||
opn.package_no,
|
||||
opn.type,
|
||||
opn.status,
|
||||
opn.organ_id,
|
||||
opn.creator,
|
||||
opn.remark as packRemark,
|
||||
opn.updater,
|
||||
opn.update_time,
|
||||
opn.create_time,
|
||||
op.id,
|
||||
op.order_id,
|
||||
op.package_no,
|
||||
op.type,
|
||||
op.status,
|
||||
op.organ_id,
|
||||
op.creator,
|
||||
op.remark as packRemark,
|
||||
op.updater,
|
||||
op.update_time,
|
||||
op.create_time,
|
||||
o.custom_order_no,
|
||||
o.dealer,
|
||||
o.customer,
|
||||
o.address,
|
||||
o.remark as orderRemark
|
||||
from order_package opn
|
||||
join orders o on opn.order_id = o.id and opn.organ_id = o.organ_id
|
||||
join order_item oi on opn.id = oi.package_id and opn.organ_id = oi.organ_id
|
||||
left join order_plate op on oi.plate_id = op.id and oi.organ_id = op.organ_id
|
||||
|
||||
<where>
|
||||
|
||||
<if test="reqVO.orderId !=null">
|
||||
and opn.order_id = #{reqVO.orderId}
|
||||
</if>
|
||||
|
||||
<if test="reqVO.plateNo !=null ">
|
||||
and op.plate_no like concat('%', #{reqVO.plateNo},'%')
|
||||
</if>
|
||||
|
||||
<if test="reqVO.packStatus !=null ">
|
||||
and opn.status= #{reqVO.packStatus}
|
||||
</if>
|
||||
|
||||
<if test="reqVO.packageNo !=null and reqVO.packageNo != '' ">
|
||||
and opn.package_no like concat('%', #{reqVO.packageNo},'%')
|
||||
</if>
|
||||
|
||||
and opn.organ_id = #{organId}
|
||||
</where>
|
||||
from orders o
|
||||
left join order_package op on o.id = op.order_id and o.organ_id = op.organ_id
|
||||
|
||||
${ew.customSqlSegment}
|
||||
|
||||
</select>
|
||||
|
||||
<!-- <where>
|
||||
|
||||
o.organ_id = #{organId}
|
||||
|
||||
<if test="reqVO.orderId !=null">
|
||||
and o.id = #{reqVO.orderId}
|
||||
</if>
|
||||
|
||||
<if test="packId !=null">
|
||||
|
||||
and op.id in
|
||||
<foreach item="packId" collection="packId" open="(" separator="," close=")">
|
||||
#{packId}
|
||||
</foreach>
|
||||
|
||||
</if>
|
||||
|
||||
<if test="reqVO.packStatus !=null ">
|
||||
and op.status= #{reqVO.packStatus}
|
||||
</if>
|
||||
|
||||
<if test="reqVO.packageNo !=null and reqVO.packageNo != '' ">
|
||||
and op.package_no like concat('%', #{reqVO.packageNo},'%')
|
||||
</if>
|
||||
|
||||
</where>-->
|
||||
|
||||
<select id="selectOrderPack"
|
||||
resultType="com.cf.imes.module.manage.controller.admin.pack.vo.PlateAndPartIdList">
|
||||
|
||||
@@ -197,5 +229,28 @@
|
||||
</select>
|
||||
|
||||
|
||||
<select id="selectPackListByOrderId"
|
||||
resultType="com.cf.imes.module.manage.controller.admin.query.vo.pack.OrderPackageVO">
|
||||
|
||||
|
||||
select distinct
|
||||
id,
|
||||
order_id,
|
||||
package_no,
|
||||
type,
|
||||
status,
|
||||
organ_id,
|
||||
creator,
|
||||
remark as packRemark,
|
||||
updater,
|
||||
update_time,
|
||||
create_time
|
||||
|
||||
from order_package
|
||||
|
||||
where organ_id = #{organId} and order_id = #{orderId} and deleted = false
|
||||
|
||||
</select>
|
||||
|
||||
|
||||
</mapper>
|
||||
+81
-40
@@ -1,40 +1,64 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||
<mapper namespace="com.cf.imes.module.manage.dal.mysql.query.ProductionStatusMapper">
|
||||
<mapper namespace="com.cf.imes.module.manage.dal.mysql.process.OrdersMapper">
|
||||
|
||||
<resultMap id="printOrderMap" type="com.cf.imes.module.manage.controller.admin.query.vo.pack.PrintOrderRespVO">
|
||||
|
||||
<result property="orderNo" column="orderNo"/>
|
||||
<result property="customOrderNo" column="customOrderNo"/>
|
||||
<result property="dealer" column="dealer"/>
|
||||
<result property="address" column="address"/>
|
||||
<result property="customer" column="customer"/>
|
||||
<result property="customerPhone" column="customerPhone"/>
|
||||
<result property="packageQuantity" column="packageQuantity"/>
|
||||
|
||||
</resultMap>
|
||||
<select id="selectPrintOrder"
|
||||
parameterType="java.lang.Long"
|
||||
resultMap="printOrderMap">
|
||||
<select id="selectOrderIds" resultMap="PackMap">
|
||||
|
||||
select
|
||||
o.id as orderNo ,
|
||||
o.custom_order_no as customOrderNo,
|
||||
o.dealer as dealer,
|
||||
o.address as address,
|
||||
o.customer as customer,
|
||||
o.phone_number as customerPhone,
|
||||
count(opn.order_id) as packageQuantity
|
||||
|
||||
from `orders` o
|
||||
join order_package opn on o.id = opn.order_id and o.organ_id = opn.organ_id
|
||||
SELECT
|
||||
id as orderNo,
|
||||
custom_order_no as customOrderNo,
|
||||
dealer as dealer,
|
||||
dealer_phone_number as dealerPhoneNumber,
|
||||
order_date as orderDate,
|
||||
create_time as createTime,
|
||||
delivery_date as deliveryDate,
|
||||
customer as customer,
|
||||
phone_number as phoneNumber,
|
||||
address as address,
|
||||
salesman as salesman,
|
||||
splitter as splitter,
|
||||
packaged as packaged
|
||||
FROM orders
|
||||
WHERE organ_id = #{organId} and deleted = false and status != 0 and create_time >= #{createTime} and id != #{orderId}
|
||||
ORDER BY create_time
|
||||
LIMIT 1 ;
|
||||
|
||||
where o.id = #{orderNo} and opn.status <> 0 and o.organ_id = #{organId} ;
|
||||
|
||||
</select>
|
||||
|
||||
|
||||
|
||||
<select id="selectOrderIdsFalse" resultMap="PackMap">
|
||||
|
||||
|
||||
SELECT
|
||||
id as orderNo,
|
||||
custom_order_no as customOrderNo,
|
||||
dealer as dealer,
|
||||
dealer_phone_number as dealerPhoneNumber,
|
||||
order_date as orderDate,
|
||||
create_time as createTime,
|
||||
delivery_date as deliveryDate,
|
||||
customer as customer,
|
||||
phone_number as phoneNumber,
|
||||
address as address,
|
||||
salesman as salesman,
|
||||
splitter as splitter,
|
||||
packaged as packaged
|
||||
FROM orders
|
||||
WHERE organ_id = #{organId} and deleted = false and status != 0 and create_time <= #{createTime} and id != #{orderId}
|
||||
ORDER BY create_time desc
|
||||
LIMIT 1 ;
|
||||
|
||||
|
||||
</select>
|
||||
|
||||
|
||||
|
||||
|
||||
<resultMap id="PackMap" type="com.cf.imes.module.manage.controller.admin.pack.vo.PackRespVO">
|
||||
|
||||
<result property="id" column="orderNo"/>
|
||||
@@ -82,11 +106,11 @@
|
||||
join order_item oi on o.id = oi.order_id and o.organ_id = oi.organ_id
|
||||
|
||||
WHERE
|
||||
o.organ_id = #{organId} and
|
||||
o.id in
|
||||
<foreach item="id" collection="orderIds" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
o.organ_id = #{organId} and
|
||||
o.id in
|
||||
<foreach item="id" collection="orderIds" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
|
||||
group by orderNo,customOrderNo,dealer,deliveryDate,customer,phoneNumber,address,salesman,splitter,packaged,dealerPhoneNumber,orderDate,o.create_time
|
||||
|
||||
@@ -110,14 +134,14 @@
|
||||
resultMap="PrintMap">
|
||||
|
||||
select o.custom_order_no as customOrderNo,
|
||||
o.dealer as dealer,
|
||||
opn.id as packNo ,
|
||||
o.id as orderNo,
|
||||
o.address as address,
|
||||
((SELECT COUNT(t2.id) FROM order_package t2 WHERE t2.create_time <= opn.create_time and t2.order_id =#{orderNo})) as packNum
|
||||
o.dealer as dealer,
|
||||
opn.id as packNo ,
|
||||
o.id as orderNo,
|
||||
o.address as address,
|
||||
((SELECT COUNT(t2.id) FROM order_package t2 WHERE t2.create_time <= opn.create_time and t2.order_id =#{orderNo})) as packNum
|
||||
|
||||
from `orders` o
|
||||
join order_package opn on o.id = opn.order_id and o.organ_id = opn.organ_id
|
||||
join order_package opn on o.id = opn.order_id and o.organ_id = opn.organ_id
|
||||
|
||||
where opn.order_id =#{orderNo} and opn.id = #{packageNo} and opn.status <> 0 and opn.organ_id = #{organId}
|
||||
order by opn.create_time ;
|
||||
@@ -125,10 +149,25 @@
|
||||
</select>
|
||||
|
||||
|
||||
<select id="selectOrderIds" resultType="com.cf.imes.module.manage.dal.dataobject.process.OrderDO" parameterType="map">
|
||||
<select id="selectOrderIdList" resultMap="PackMap" parameterType="map">
|
||||
|
||||
|
||||
select * from orders
|
||||
select
|
||||
id as orderNo,
|
||||
custom_order_no as customOrderNo,
|
||||
dealer as dealer,
|
||||
dealer_phone_number as dealerPhoneNumber,
|
||||
order_date as orderDate,
|
||||
create_time as createTime,
|
||||
delivery_date as deliveryDate,
|
||||
customer as customer,
|
||||
phone_number as phoneNumber,
|
||||
address as address,
|
||||
salesman as salesman,
|
||||
splitter as splitter,
|
||||
packaged as packaged
|
||||
|
||||
from orders
|
||||
<where>
|
||||
|
||||
organ_id =#{organId}
|
||||
@@ -165,7 +204,9 @@
|
||||
|
||||
</select>
|
||||
|
||||
<!-- <if test="pageReqVO.status == true">
|
||||
and status in (4)
|
||||
</if>-->
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</mapper>
|
||||
-194
@@ -1,194 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||
<mapper namespace="com.cf.imes.module.manage.dal.mysql.process.ProductionProcessMapper">
|
||||
|
||||
|
||||
|
||||
|
||||
<resultMap id="PatchingPlateMap" type="com.cf.imes.module.manage.controller.admin.patching.vo.PatchingPlateRespVO">
|
||||
|
||||
<result property="groupId" column="groupId"/>
|
||||
<result property="orderId" column="orderId"/>
|
||||
<result property="customOrderId" column="customOrderId"/>
|
||||
<result property="customer" column="customer"/>
|
||||
<result property="address" column="address"/>
|
||||
<result property="orderStatus" column="orderStatus"/>
|
||||
<result property="plateName" column="plateName"/>
|
||||
<result property="plateNum" column="plateNum"/>
|
||||
<result property="thickness" column="thickness"/>
|
||||
<result property="material" column="material"/>
|
||||
<result property="color" column="color"/>
|
||||
|
||||
</resultMap>
|
||||
<select id="selectPatchingPlate"
|
||||
resultMap="PatchingPlateMap"
|
||||
parameterType="com.cf.imes.module.manage.controller.admin.patching.vo.PatchingPlatePageReqVO">
|
||||
|
||||
select
|
||||
DISTINCT
|
||||
p.goods_id,
|
||||
o.id as orderId,
|
||||
o.custom_order_no as customOrderId,
|
||||
o.customer as customer,
|
||||
o.address as address,
|
||||
o.status as orderStatus,
|
||||
oi.num as plateNum,
|
||||
<![CDATA[
|
||||
CONCAT(
|
||||
TRIM(TRAILING '.' from TRIM(TRAILING '0' FROM p.thickness)),'mm-',p.material,'-',p.color) AS plateName,
|
||||
]]>
|
||||
p.thickness as thickness,
|
||||
p.material as material,
|
||||
p.color as color
|
||||
|
||||
from `orders` o
|
||||
|
||||
join order_item oi on o.id = oi.order_id
|
||||
join order_plate op on oi.plate_id = op.id
|
||||
join plate p on op.goods_id = p.goods_id
|
||||
|
||||
<where>
|
||||
<choose>
|
||||
<!-- 挖穿,挖孔,二维刀路判断 -->
|
||||
<when test="isDigThrough == true">
|
||||
(op.filter_type = 1
|
||||
<if test="isDiggingHoles == true ">
|
||||
or op.filter_type = 2
|
||||
</if>
|
||||
<if test="is2DCuttingPath == true ">
|
||||
or op.filter_type = 4
|
||||
</if>)
|
||||
|
||||
<!-- 其他的判断 -->
|
||||
<if test="orderNo != null">
|
||||
and o.id = #{orderNo}
|
||||
</if>
|
||||
<if test="customOrderNo != null">
|
||||
and o.custom_order_no = #{customOrderNo}
|
||||
</if>
|
||||
<if test="customer != null">
|
||||
and o.customer = #{customer}
|
||||
</if>
|
||||
<if test="address != null">
|
||||
and o.address = #{address}
|
||||
</if>
|
||||
<if test="statusList != null">
|
||||
and o.status in
|
||||
<foreach item="id" collection="statusList" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="startTime != null and endTime != null">
|
||||
and o.update_time between #{startTime} and #{endTime}
|
||||
</if>
|
||||
|
||||
<if test="isRectangle == true ">
|
||||
and op.unregular_point_count = 0
|
||||
</if>
|
||||
|
||||
<if test="isSpecialShaped == true ">
|
||||
and op.unregular_point_count > 0
|
||||
</if>
|
||||
|
||||
<if test="isProfiling == true ">
|
||||
and front_model_count > 0 or op.back_hole_count > 0 or op.side_hole_count > 0
|
||||
</if>
|
||||
|
||||
<if test="isDoor == true ">
|
||||
and op.is_door = 1
|
||||
</if>
|
||||
|
||||
<!-- <if test="longRangeList != null and !longRangeList.isEmpty()">
|
||||
AND (
|
||||
<!– 根据 DataRangeList 中的属性进行条件判断 –>
|
||||
<foreach collection="longRangeList" item="range" separator=" OR ">
|
||||
(#{op.width} <= #{range.maxaa} AND #{op.width} >= #{range.minbb})
|
||||
</foreach>
|
||||
)
|
||||
</if>-->
|
||||
|
||||
|
||||
</when>
|
||||
<!-- 不传入挖穿等判断,走另一个判断逻辑 -->
|
||||
<otherwise>
|
||||
|
||||
<if test="orderNo != null">
|
||||
and o.id = #{orderNo}
|
||||
</if>
|
||||
<if test="customOrderNo != null">
|
||||
and o.custom_order_no = #{customOrderNo}
|
||||
</if>
|
||||
<if test="customer != null">
|
||||
and o.customer = #{customer}
|
||||
</if>
|
||||
<if test="address != null">
|
||||
and o.address = #{address}
|
||||
</if>
|
||||
<if test="statusList != null">
|
||||
and o.status in
|
||||
<foreach item="id" collection="statusList" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="startTime != null and endTime != null">
|
||||
and o.update_time between #{startTime} and #{endTime}
|
||||
</if>
|
||||
|
||||
<if test="isRectangle == true ">
|
||||
and op.unregular_point_count = 0
|
||||
</if>
|
||||
|
||||
<if test="isSpecialShaped == true ">
|
||||
and op.unregular_point_count > 0
|
||||
</if>
|
||||
|
||||
<if test="isProfiling == true ">
|
||||
and front_model_count > 0 or op.back_hole_count > 0 or op.side_hole_count > 0
|
||||
</if>
|
||||
|
||||
<if test="isDoor == true ">
|
||||
and op.is_door = 1
|
||||
</if>
|
||||
<!--
|
||||
<if test="longRangeList != null and !longRangeList.isEmpty()">
|
||||
AND
|
||||
<!– 根据 DataRangeList 中的属性进行条件判断 –>
|
||||
<foreach collection="longRangeList" item="range" open="(" separator="," close=")">
|
||||
op.width between #{range.minbb} AND #{range.maxaa}
|
||||
</foreach>
|
||||
|
||||
</if>-->
|
||||
|
||||
</otherwise>
|
||||
|
||||
</choose>
|
||||
|
||||
</where>
|
||||
|
||||
group by p.goods_id,orderId,customOrderId,customer,address,orderStatus,plateNum,plateName,thickness,material,color
|
||||
|
||||
</select>
|
||||
|
||||
<select id="selectOrderIds" resultType="com.cf.imes.module.manage.dal.dataobject.process.OrderDO">
|
||||
|
||||
SELECT * FROM orders
|
||||
WHERE organ_id = #{organId} and deleted = false and status != 0 and create_time > #{createTime} and id != #{orderId}
|
||||
ORDER BY create_time
|
||||
LIMIT 1 ;
|
||||
|
||||
|
||||
</select>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<select id="selectOrderIdsFalse" resultType="com.cf.imes.module.manage.dal.dataobject.process.OrderDO">
|
||||
|
||||
SELECT * FROM orders
|
||||
WHERE organ_id = #{organId} and deleted = false and status != 0 and create_time < #{createTime} and id != #{orderId}
|
||||
ORDER BY create_time desc
|
||||
LIMIT 1 ;
|
||||
|
||||
</select>
|
||||
</mapper>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user