|
|
@ -412,107 +412,6 @@ public class DataFactory {
|
|
|
|
return map.get(dcch);
|
|
|
|
return map.get(dcch);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static void 排产() {
|
|
|
|
|
|
|
|
套料图所占工序的资源.clear();
|
|
|
|
|
|
|
|
List<排产结果> list = 排产.list;
|
|
|
|
|
|
|
|
List<DmBom> 强占记录 = new ArrayList<>();
|
|
|
|
|
|
|
|
list.clear();
|
|
|
|
|
|
|
|
List<DmSygdxq> 按需求日期排序的钢料需求 = getBean(DmSygdxqService.class).getXqWithBom(from, to);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
按需求日期排序的钢料需求.forEach(钢料需求 -> {
|
|
|
|
|
|
|
|
钢料需求.getBomList().forEach(bom -> {
|
|
|
|
|
|
|
|
Arrays.stream(Constant.工序.values()).forEach(gx -> {
|
|
|
|
|
|
|
|
if (StrUtil.isEmpty(gx.getCode())) return;
|
|
|
|
|
|
|
|
//todo 由于工序code存在多个值的情况,这里需要抽象套料图工序,修改后同时可支持多线程运算
|
|
|
|
|
|
|
|
Optional<String> first = 套料图工序对应关系.keySet().stream()
|
|
|
|
|
|
|
|
.filter(it -> it.startsWith(bom.getKw() + bom.getZl()))
|
|
|
|
|
|
|
|
.filter(it -> gx.getCode().contains(it.split("_")[1])).findFirst();
|
|
|
|
|
|
|
|
first.ifPresent(_code -> {
|
|
|
|
|
|
|
|
if (ObjUtil.isNotEmpty(套料图工序对应关系.get(_code))) {
|
|
|
|
|
|
|
|
Integer cd = Constant.工序CD.get(gx);
|
|
|
|
|
|
|
|
DateTime parse = DateUtil.parse(钢料需求.getXzglxq(), "yyyy/MM/dd");
|
|
|
|
|
|
|
|
DateTime dateTime = DateUtil.offsetDay(parse, cd);
|
|
|
|
|
|
|
|
资源 _资源 = 提取资源(dateTime);
|
|
|
|
|
|
|
|
//除切割工序外默认需求数量都是1
|
|
|
|
|
|
|
|
//todo 如果是切割工序需要获取切割长度
|
|
|
|
|
|
|
|
double 需求数量 = bom.getTlsl().doubleValue();
|
|
|
|
|
|
|
|
Optional.of(_资源).ifPresent(it -> {
|
|
|
|
|
|
|
|
工序产能 工序产能 = null;
|
|
|
|
|
|
|
|
资源 资源 = 套料图所占工序的资源.get(bom.getTzbh());
|
|
|
|
|
|
|
|
if (资源 != null) {
|
|
|
|
|
|
|
|
工序产能 = 资源.get工序产能MAP().get(gx);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (工序产能 != null && 工序产能.get资源占用图纸表().contains(bom.getTzbh())) {
|
|
|
|
|
|
|
|
bom.set所在资源(it);
|
|
|
|
|
|
|
|
Optional<设备> _设备 = 工序产能.获取已占用设备(bom.getTzbh());
|
|
|
|
|
|
|
|
_设备.ifPresent(bom::set所在设备);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
工序产能 = it.get工序产能MAP().get(gx);
|
|
|
|
|
|
|
|
Optional<设备> _设备 = 工序产能.获取可占用设备(需求数量);
|
|
|
|
|
|
|
|
工序产能 final工序产能 = 工序产能;
|
|
|
|
|
|
|
|
_设备.ifPresent(tmp -> {
|
|
|
|
|
|
|
|
bom.set所在设备(tmp);
|
|
|
|
|
|
|
|
tmp.占用设备(bom.getTzbh(), 需求数量);
|
|
|
|
|
|
|
|
bom.set所在资源(it);
|
|
|
|
|
|
|
|
final工序产能.占用资源(bom.getTzbh(), 需求数量);
|
|
|
|
|
|
|
|
套料图所占工序的资源.put(bom.getTzbh(), it);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//没有可用资源是全局搜索可用资源,进行排产
|
|
|
|
|
|
|
|
if (bom.get所在设备() == null) {
|
|
|
|
|
|
|
|
Optional<资源> 可用资源 = 搜索可用资源(gx, DateUtil.parse(from, "yyyy/MM/dd"), parse, 需求数量);
|
|
|
|
|
|
|
|
可用资源.ifPresent(tmp资源 -> {
|
|
|
|
|
|
|
|
工序产能 _工序产能 = tmp资源.get工序产能MAP().get(gx);
|
|
|
|
|
|
|
|
Optional<设备> _设备 = _工序产能.获取可占用设备(0);
|
|
|
|
|
|
|
|
_设备.ifPresent(tmp -> {
|
|
|
|
|
|
|
|
tmp.占用设备(bom.getTzbh(), 需求数量);
|
|
|
|
|
|
|
|
bom.set所在设备(tmp);
|
|
|
|
|
|
|
|
_工序产能.占用资源(bom.getTzbh(), 需求数量);
|
|
|
|
|
|
|
|
bom.set所在资源(tmp资源);
|
|
|
|
|
|
|
|
套料图所占工序的资源.put(bom.getTzbh(), tmp资源);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//没有可用资源放入月末(强占),待手工调整
|
|
|
|
|
|
|
|
if (bom.get所在设备() == null) {
|
|
|
|
|
|
|
|
强占记录.add(bom);
|
|
|
|
|
|
|
|
资源 tmp资源 = 提取资源(DateUtil.endOfMonth(DateUtil.parse(钢料需求.getXzglxq(), "yyyy/MM/dd")));
|
|
|
|
|
|
|
|
工序产能 _工序产能 = tmp资源.get工序产能MAP().get(gx);
|
|
|
|
|
|
|
|
Optional<设备> _设备 = _工序产能.get设备().values().stream().findAny();
|
|
|
|
|
|
|
|
bom.set所在设备(_设备.orElse(null));
|
|
|
|
|
|
|
|
bom.set所在资源(tmp资源);
|
|
|
|
|
|
|
|
_工序产能.占用资源(bom.getTzbh(), 0);
|
|
|
|
|
|
|
|
套料图所占工序的资源.put(bom.getTzbh(), tmp资源);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
// Manager.排产结果=按需求日期排序的钢料需求;
|
|
|
|
|
|
|
|
//========调试打印===========
|
|
|
|
|
|
|
|
资源池.forEach((day,item)->{
|
|
|
|
|
|
|
|
System.out.println("====打印资源===");
|
|
|
|
|
|
|
|
System.out.println(day);
|
|
|
|
|
|
|
|
Map<Constant.工序, 工序产能> 工序产能MAP = item.get工序产能MAP();
|
|
|
|
|
|
|
|
工序产能MAP.forEach((工序,工序产能)->{
|
|
|
|
|
|
|
|
if (工序产能.get资源占用图纸表().size()>0){
|
|
|
|
|
|
|
|
System.out.println("工序:"+工序);
|
|
|
|
|
|
|
|
if ("2024/06/03".equals(day)){
|
|
|
|
|
|
|
|
System.out.println(工序产能.get资源占用图纸表());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
System.out.println("工序产能:"+工序产能.get资源占用图纸表().size());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
System.out.println("====打印资源完成===");
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
System.out.println(强占记录.size());
|
|
|
|
|
|
|
|
//========调试打印结束===========
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static Optional<资源> 搜索可用资源(Constant.工序 工序,Date 搜索起始日期,Date 搜索截止日期, double 需求数量){
|
|
|
|
public static Optional<资源> 搜索可用资源(Constant.工序 工序,Date 搜索起始日期,Date 搜索截止日期, double 需求数量){
|
|
|
|
return 资源池.values().stream().filter(资源->{
|
|
|
|
return 资源池.values().stream().filter(资源->{
|
|
|
|
工序产能 工序产能 = 资源.get工序产能MAP().get(工序);
|
|
|
|
工序产能 工序产能 = 资源.get工序产能MAP().get(工序);
|
|
|
|