2024-05-29 18:21:05 +08:00
|
|
|
|
package com.youchain;
|
|
|
|
|
|
|
2024-06-24 15:58:49 +08:00
|
|
|
|
import com.youchain.basicdata.domain.BigItem;
|
2024-05-29 18:21:05 +08:00
|
|
|
|
import com.youchain.businessdata.domain.AgvTask;
|
2024-06-27 18:10:20 +08:00
|
|
|
|
import com.youchain.businessdata.domain.AsnDetail;
|
2024-06-24 15:58:49 +08:00
|
|
|
|
import com.youchain.businessdata.domain.GdDetail;
|
2024-06-27 18:10:20 +08:00
|
|
|
|
import com.youchain.businessdata.domain.PickDetail;
|
2024-05-29 18:21:05 +08:00
|
|
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
|
|
import org.springframework.boot.test.context.SpringBootTest;
|
2024-06-27 18:10:20 +08:00
|
|
|
|
|
2024-05-29 18:21:05 +08:00
|
|
|
|
import java.util.ArrayList;
|
2024-06-24 15:58:49 +08:00
|
|
|
|
import java.util.Arrays;
|
2024-05-29 18:21:05 +08:00
|
|
|
|
import java.util.List;
|
2024-06-24 15:58:49 +08:00
|
|
|
|
import java.util.Map;
|
2024-05-29 18:21:05 +08:00
|
|
|
|
import java.util.concurrent.ArrayBlockingQueue;
|
|
|
|
|
|
import java.util.concurrent.BlockingQueue;
|
2024-06-26 17:22:10 +08:00
|
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
2024-06-24 15:58:49 +08:00
|
|
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
|
|
import java.util.stream.Collectors;
|
2024-05-29 18:21:05 +08:00
|
|
|
|
|
|
|
|
|
|
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
|
|
|
|
|
public class EladminSystemApplicationTests {
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
|
public void contextLoads() {
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static void main(String[] args) {
|
2024-06-27 18:10:20 +08:00
|
|
|
|
PickDetail pickDetail1 = new PickDetail();
|
|
|
|
|
|
pickDetail1.setId(1L);
|
|
|
|
|
|
pickDetail1.setOrderQty(2d);
|
|
|
|
|
|
pickDetail1.setAllocatedQty(2d);
|
|
|
|
|
|
|
|
|
|
|
|
PickDetail pickDetail2 = new PickDetail();
|
|
|
|
|
|
pickDetail2.setId(2L);
|
|
|
|
|
|
pickDetail2.setOrderQty(2d);
|
|
|
|
|
|
pickDetail2.setAllocatedQty(2d);
|
|
|
|
|
|
|
|
|
|
|
|
PickDetail pickDetail3 = new PickDetail();
|
|
|
|
|
|
pickDetail3.setId(2L);
|
|
|
|
|
|
pickDetail3.setOrderQty(2d);
|
|
|
|
|
|
pickDetail3.setAllocatedQty(0d);
|
|
|
|
|
|
|
|
|
|
|
|
List<PickDetail> pickDetails = new ArrayList<>();
|
|
|
|
|
|
pickDetails.add(pickDetail1);
|
|
|
|
|
|
pickDetails.add(pickDetail2);
|
|
|
|
|
|
pickDetails.add(pickDetail3);
|
|
|
|
|
|
|
|
|
|
|
|
boolean allAllocated = pickDetails.stream()
|
|
|
|
|
|
.allMatch(detail -> detail.getOrderQty().equals(detail.getAllocatedQty()));
|
|
|
|
|
|
boolean anyAllocated = pickDetails.stream()
|
|
|
|
|
|
.anyMatch(detail -> detail.getOrderQty().equals(detail.getAllocatedQty()));
|
|
|
|
|
|
if (allAllocated){
|
|
|
|
|
|
System.out.println("全部已分配");
|
|
|
|
|
|
}else if(anyAllocated){
|
|
|
|
|
|
System.out.println("部分已分配");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-05-29 18:21:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private static final int MAX_TASK_COUNT = 4;
|
|
|
|
|
|
private static final long TIMEOUT_MS = 600000; // 10分钟,以毫秒为单位
|
|
|
|
|
|
private long lastTaskTime = System.currentTimeMillis();
|
2024-06-27 18:10:20 +08:00
|
|
|
|
private List<Integer> taskQueue = new ArrayList<>(MAX_TASK_COUNT);
|
2024-05-29 18:21:05 +08:00
|
|
|
|
|
2024-06-27 18:10:20 +08:00
|
|
|
|
void aa() {
|
2024-06-26 17:22:10 +08:00
|
|
|
|
List<Integer> list1 = Arrays.asList();
|
|
|
|
|
|
List<Integer> list2 = Arrays.asList();
|
|
|
|
|
|
|
|
|
|
|
|
List<Integer> list3 = new ArrayList<>(list1);
|
|
|
|
|
|
list3.addAll(list2);
|
|
|
|
|
|
|
|
|
|
|
|
System.out.println(list3); // 输出: [1, 2, 3, 4, 5]
|
|
|
|
|
|
|
2024-06-24 15:58:49 +08:00
|
|
|
|
/*double taoQty=2;//基础套数
|
|
|
|
|
|
double xTaoQty=3;//需求套数
|
|
|
|
|
|
double ckdQty=Math.ceil(xTaoQty/taoQty);//生成出库单数量
|
|
|
|
|
|
System.out.println(ckdQty);*/
|
|
|
|
|
|
|
2024-06-27 18:10:20 +08:00
|
|
|
|
GdDetail gdDetail = new GdDetail();
|
2024-06-24 15:58:49 +08:00
|
|
|
|
gdDetail.setBigItem(null);
|
|
|
|
|
|
gdDetail.setOrderType("DP");
|
|
|
|
|
|
|
2024-06-27 18:10:20 +08:00
|
|
|
|
GdDetail gdDetail2 = new GdDetail();
|
|
|
|
|
|
BigItem bigItem2 = new BigItem();
|
2024-06-24 15:58:49 +08:00
|
|
|
|
bigItem2.setCode("CT_001");
|
|
|
|
|
|
gdDetail2.setBigItem(bigItem2);
|
|
|
|
|
|
gdDetail2.setOrderType("CP");
|
|
|
|
|
|
gdDetail2.setBigItemQty(1d);
|
|
|
|
|
|
|
2024-06-27 18:10:20 +08:00
|
|
|
|
GdDetail gdDetail3 = new GdDetail();
|
|
|
|
|
|
BigItem bigItem3 = new BigItem();
|
2024-06-24 15:58:49 +08:00
|
|
|
|
bigItem3.setCode("CT_001");
|
|
|
|
|
|
gdDetail3.setBigItem(bigItem3);
|
|
|
|
|
|
gdDetail3.setOrderType("CP");
|
|
|
|
|
|
gdDetail3.setBigItemQty(2d);
|
|
|
|
|
|
|
2024-06-27 18:10:20 +08:00
|
|
|
|
GdDetail gdDetail4 = new GdDetail();
|
|
|
|
|
|
BigItem bigItem4 = new BigItem();
|
2024-06-24 15:58:49 +08:00
|
|
|
|
bigItem4.setCode("CT_002");
|
|
|
|
|
|
gdDetail4.setBigItem(bigItem4);
|
|
|
|
|
|
gdDetail4.setOrderType("CP");
|
|
|
|
|
|
gdDetail4.setBigItemQty(3d);
|
|
|
|
|
|
|
2024-06-27 18:10:20 +08:00
|
|
|
|
GdDetail gdDetail5 = new GdDetail();
|
|
|
|
|
|
BigItem bigItem5 = new BigItem();
|
2024-06-24 15:58:49 +08:00
|
|
|
|
bigItem5.setCode("CT_002");
|
|
|
|
|
|
gdDetail5.setBigItem(bigItem5);
|
|
|
|
|
|
gdDetail5.setOrderType("CP");
|
|
|
|
|
|
gdDetail5.setBigItemQty(4d);
|
|
|
|
|
|
|
2024-06-27 18:10:20 +08:00
|
|
|
|
List<GdDetail> list = new ArrayList<>();
|
2024-06-24 15:58:49 +08:00
|
|
|
|
list.add(gdDetail);
|
|
|
|
|
|
list.add(gdDetail2);
|
|
|
|
|
|
list.add(gdDetail3);
|
|
|
|
|
|
list.add(gdDetail4);
|
|
|
|
|
|
list.add(gdDetail5);
|
|
|
|
|
|
|
2024-06-27 18:10:20 +08:00
|
|
|
|
for (GdDetail gd : list) {
|
|
|
|
|
|
System.out.println("总集合:" + gd);
|
2024-06-24 15:58:49 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
List<GdDetail> cpList = list.stream()
|
|
|
|
|
|
.filter(gd -> "CP".equals(gd.getOrderType()))
|
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
|
|
List<GdDetail> dpList = list.stream()
|
|
|
|
|
|
.filter(gd -> "DP".equals(gd.getOrderType()))
|
|
|
|
|
|
.collect(Collectors.toList());
|
2024-06-27 18:10:20 +08:00
|
|
|
|
for (GdDetail gd : cpList) {
|
|
|
|
|
|
System.out.println("成品集合:" + gd);
|
2024-06-24 15:58:49 +08:00
|
|
|
|
}
|
2024-06-27 18:10:20 +08:00
|
|
|
|
for (GdDetail gd : dpList) {
|
|
|
|
|
|
System.out.println("单品集合:" + gd);
|
2024-06-24 15:58:49 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Map<String, List<GdDetail>> groupedByCode = cpList.stream()
|
|
|
|
|
|
.collect(Collectors.groupingBy(gd -> gd.getBigItem().getCode()));
|
|
|
|
|
|
groupedByCode.forEach((code, details) -> {
|
|
|
|
|
|
System.out.println("Code: " + code);
|
|
|
|
|
|
details.forEach(System.out::println);
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-05-29 18:21:05 +08:00
|
|
|
|
@Test
|
2024-06-27 18:10:20 +08:00
|
|
|
|
public void test() {
|
|
|
|
|
|
List<Integer> taskLists = new ArrayList<>();
|
2024-05-29 18:21:05 +08:00
|
|
|
|
taskLists.add(1);
|
|
|
|
|
|
taskLists.add(2);
|
|
|
|
|
|
taskLists.add(3);
|
|
|
|
|
|
taskLists.add(4);
|
|
|
|
|
|
taskLists.add(5);
|
|
|
|
|
|
taskLists.add(6);
|
|
|
|
|
|
|
2024-06-27 18:10:20 +08:00
|
|
|
|
for (Integer id : taskLists) {
|
2024-05-29 18:21:05 +08:00
|
|
|
|
try {
|
|
|
|
|
|
taskQueue.add(id);
|
|
|
|
|
|
if (taskQueue.size() >= MAX_TASK_COUNT) {
|
|
|
|
|
|
System.out.println("任务已满足,当前任务数:" + taskQueue.size());
|
|
|
|
|
|
taskQueue.clear();
|
|
|
|
|
|
lastTaskTime = System.currentTimeMillis();
|
|
|
|
|
|
} else if (System.currentTimeMillis() - lastTaskTime >= TIMEOUT_MS) {
|
|
|
|
|
|
System.out.println("超过10分钟未满足4个任务,当前任务数:" + taskQueue.size());
|
|
|
|
|
|
taskQueue.clear();
|
|
|
|
|
|
lastTaskTime = System.currentTimeMillis();
|
|
|
|
|
|
}
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
|
}
|
|
|
|
|
|
System.out.println(id);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|