1.临时提交

master
董哲奇 2 years ago
parent 63f940a69c
commit 56a4f65267

@ -412,107 +412,6 @@ public class DataFactory {
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 需求数量){
return 资源池.values().stream().filter(资源->{
工序产能 工序产能 = 资源.get工序产能MAP().get(工序);

Loading…
Cancel
Save