|
|
|
@ -108,6 +108,7 @@ public class DmSygdMxServiceImpl extends ServiceImpl<DmSygdMxMapper, DmSygdMx> i
|
|
|
|
|
List<DmSygdMx> mxList = baseMapper.getMx(begin, end);
|
|
|
|
|
//todo 排产
|
|
|
|
|
ypc(mxList);
|
|
|
|
|
this.saveBatch(mxList);
|
|
|
|
|
baseMapper.setParent(begin, end);
|
|
|
|
|
ResultBean r = new ResultBean(mxList);
|
|
|
|
|
r.setSuccess(true);
|
|
|
|
@ -120,7 +121,7 @@ public class DmSygdMxServiceImpl extends ServiceImpl<DmSygdMxMapper, DmSygdMx> i
|
|
|
|
|
* @param list
|
|
|
|
|
*/
|
|
|
|
|
public void ypc(List<DmSygdMx> list) {
|
|
|
|
|
Map<String, List<DmSygdMx>> mxMap = list.stream().filter(l->StrUtil.isNotEmpty(l.getTzbh())).collect(Collectors.groupingBy(l -> l.getKw() + l.getZl()));
|
|
|
|
|
// Map<String, List<DmSygdMx>> mxMap = list.stream().filter(l->StrUtil.isNotEmpty(l.getTzbh())).collect(Collectors.groupingBy(l -> l.getKw() + l.getZl()));
|
|
|
|
|
ComputePlan c=ComputePlan.instance();
|
|
|
|
|
c.computeRealCapacity();
|
|
|
|
|
Map<String,List<RealCapacity>> rel=c.getRealCapacityMap();
|
|
|
|
@ -129,18 +130,13 @@ public class DmSygdMxServiceImpl extends ServiceImpl<DmSygdMxMapper, DmSygdMx> i
|
|
|
|
|
List<EmSbcnp> sbcnp =c.getSbcnList();
|
|
|
|
|
Map<String, List<EmSbcnp>> cnMap = sbcnp.stream().collect(Collectors.groupingBy(l -> l.getTzbh() + l.getZl()));
|
|
|
|
|
|
|
|
|
|
for (String ljkey : mxMap.keySet()) {
|
|
|
|
|
//对应加工顺序
|
|
|
|
|
List<EmSbcnp> jgsxList= cnMap.get(ljkey);
|
|
|
|
|
//加工板材
|
|
|
|
|
List<DmSygdMx> mxs = mxMap.get(ljkey);
|
|
|
|
|
if (ObjectUtil.isEmpty(jgsxList)||jgsxList.size()<1 ){
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
mxs.forEach(l->{
|
|
|
|
|
list.forEach(l->{
|
|
|
|
|
List<EmSbcnp> jgsxList= cnMap.get(l.getKw()+l.getZl());
|
|
|
|
|
if (ObjectUtil.isNotEmpty(jgsxList)&&jgsxList.size()>0 ){
|
|
|
|
|
jggx(rel,l,jgsxList);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -154,42 +150,42 @@ public class DmSygdMxServiceImpl extends ServiceImpl<DmSygdMxMapper, DmSygdMx> i
|
|
|
|
|
for (EmSbcnp cn : list) {
|
|
|
|
|
//上料
|
|
|
|
|
if (cn.getGx().equals("19")) {
|
|
|
|
|
date=xhcn(rel,l.getKw(),cn.getGx(),1, date);
|
|
|
|
|
date=xhcn(rel,cn.getSbbh(),cn.getGx(),1, date);
|
|
|
|
|
l.setSlrq(date);
|
|
|
|
|
}
|
|
|
|
|
//抛丸
|
|
|
|
|
if (cn.getGx().equals("20")) {
|
|
|
|
|
date=xhcn(rel,l.getKw(),cn.getGx(),1, date);
|
|
|
|
|
date=xhcn(rel,cn.getSbbh(),cn.getGx(),1, date);
|
|
|
|
|
l.setPwrq(date);
|
|
|
|
|
}
|
|
|
|
|
//理料
|
|
|
|
|
if (cn.getGx().equals("21")) {
|
|
|
|
|
date=xhcn(rel,l.getKw(),cn.getGx(),1, date);
|
|
|
|
|
date=xhcn(rel,cn.getSbbh(),cn.getGx(),1, date);
|
|
|
|
|
l.setLlrq(date);
|
|
|
|
|
}
|
|
|
|
|
// 划线
|
|
|
|
|
if ("01,02".indexOf(cn.getGx()) > -1) {
|
|
|
|
|
date=xhcn(rel,l.getKw(),cn.getGx(),l.getHxcd(), date);
|
|
|
|
|
if ("01,02".indexOf(cn.getGx()) > -1 && l.getHxcd()>0) {
|
|
|
|
|
date=xhcn(rel,cn.getSbbh(),cn.getGx(),l.getHxcd(), date);
|
|
|
|
|
l.setHxrq(date);
|
|
|
|
|
}
|
|
|
|
|
//切割
|
|
|
|
|
if ("03,04,05,06,07".indexOf(cn.getGx()) > -1) {
|
|
|
|
|
date=xhcn(rel,l.getKw(),cn.getGx(),l.getQgcd(), date);
|
|
|
|
|
if ("03,04,05,06,07".indexOf(cn.getGx()) > -1 && l.getQgcd()>0) {
|
|
|
|
|
date=xhcn(rel,cn.getSbbh(),cn.getGx(),l.getQgcd(), date);
|
|
|
|
|
l.setQgrq(date);
|
|
|
|
|
}
|
|
|
|
|
// 坡口
|
|
|
|
|
if (ObjectUtil.isNotEmpty(l.getPkcd()) && ("08,10".indexOf(cn.getGx()) > 0)) {
|
|
|
|
|
date=xhcn(rel,l.getKw(),cn.getGx(),l.getPkcd(), date);
|
|
|
|
|
date=xhcn(rel,cn.getSbbh(),cn.getGx(),l.getPkcd(), date);
|
|
|
|
|
l.setPkrq(date);
|
|
|
|
|
}
|
|
|
|
|
// 打磨
|
|
|
|
|
if (ObjectUtil.isNotEmpty(l.getDmcd()) && ("16,13".indexOf(cn.getGx()) > 0)) {
|
|
|
|
|
date=xhcn(rel,l.getKw(),cn.getGx(),l.getDmcd(), date);
|
|
|
|
|
date=xhcn(rel,cn.getSbbh(),cn.getGx(),l.getDmcd(), date);
|
|
|
|
|
l.setDmrq(date);
|
|
|
|
|
}
|
|
|
|
|
// 曲 (个)
|
|
|
|
|
if (StrUtil.isNotEmpty(l.getQbs()) && cn.getGx().equals("18")) {
|
|
|
|
|
date=xhcn(rel,l.getKw(),cn.getGx(),l.getLjsl(), date);
|
|
|
|
|
date=xhcn(rel,cn.getSbbh(),cn.getGx(),l.getLjsl(), date);
|
|
|
|
|
l.setQjgrq(date);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -200,19 +196,19 @@ public class DmSygdMxServiceImpl extends ServiceImpl<DmSygdMxMapper, DmSygdMx> i
|
|
|
|
|
/**
|
|
|
|
|
* 消耗产能
|
|
|
|
|
* @param rel 实际产能,默认未来三个月
|
|
|
|
|
* @param tzbh 设备产能(tzbh);三月滚动需求(kw)
|
|
|
|
|
* @param sbbh 设备编号
|
|
|
|
|
* @param gx 工序
|
|
|
|
|
* @param gzl 工作量
|
|
|
|
|
* @param kssj 上一道工序的加工时间
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public String xhcn(Map<String,List<RealCapacity>> rel,String tzbh,String gx,double gzl ,String kssj){
|
|
|
|
|
public String xhcn(Map<String,List<RealCapacity>> rel,String sbbh,String gx,double gzl ,String kssj){
|
|
|
|
|
String jgsj="";
|
|
|
|
|
if (gzl==0)return jgsj;
|
|
|
|
|
for (String date:rel.keySet()){
|
|
|
|
|
if (date.compareTo(kssj)>=0||StrUtil.isEmpty(kssj)){
|
|
|
|
|
for (RealCapacity l:rel.get(date)){
|
|
|
|
|
if (l.getTzbh().equals(tzbh)&&l.getGx().equals(gx)){
|
|
|
|
|
if (l.getDeviceName().equals(sbbh)&&l.getGx().equals(gx)){
|
|
|
|
|
if (l.getCapacity()>=gzl){
|
|
|
|
|
int index = rel.get(date).indexOf(l);
|
|
|
|
|
l.setCapacity(l.getCapacity()-gzl);
|
|
|
|
@ -340,7 +336,7 @@ public class DmSygdMxServiceImpl extends ServiceImpl<DmSygdMxMapper, DmSygdMx> i
|
|
|
|
|
.eq("nf", year)
|
|
|
|
|
.ne("zl", 0)
|
|
|
|
|
.between("yf", begin, end));
|
|
|
|
|
List<Xbjhdto> xbjhdtoList = BeanUtil.copyToList(xbjhs, Xbjhdto.class);
|
|
|
|
|
List<Xbjhdto> xbjhdtos = BeanUtil.copyToList(xbjhs, Xbjhdto.class);
|
|
|
|
|
|
|
|
|
|
//3.根据月份和船号分组
|
|
|
|
|
Map<String, List<DmSygdMx>> monthAndCh = list.stream()
|
|
|
|
@ -348,7 +344,7 @@ public class DmSygdMxServiceImpl extends ServiceImpl<DmSygdMxMapper, DmSygdMx> i
|
|
|
|
|
.collect(Collectors.groupingBy(x -> x.getJssj().substring(5, 7) + x.getDcCh()));
|
|
|
|
|
|
|
|
|
|
//4.
|
|
|
|
|
xbjhdtoList.forEach(dmXbjh -> {
|
|
|
|
|
xbjhdtos.forEach(dmXbjh -> {
|
|
|
|
|
for (String ch : monthAndCh.keySet()) {
|
|
|
|
|
if (dmXbjh.getDcCh().equals(monthAndCh.get(ch).get(0).getDcCh())
|
|
|
|
|
&& dmXbjh.getYf().equals(monthAndCh.get(ch).get(0).getJssj().substring(5, 7))) {
|
|
|
|
@ -365,6 +361,31 @@ public class DmSygdMxServiceImpl extends ServiceImpl<DmSygdMxMapper, DmSygdMx> i
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
List<Xbjhdto> xbjhdtoList=new ArrayList<>(xbjhdtos);
|
|
|
|
|
for (String ch : monthAndCh.keySet()) {
|
|
|
|
|
Xbjhdto dmXbjh=new Xbjhdto();
|
|
|
|
|
for (Xbjhdto xbjhdto : xbjhdtos) {
|
|
|
|
|
if (!(xbjhdto.getDcCh().equals(monthAndCh.get(ch).get(0).getDcCh())
|
|
|
|
|
&& xbjhdto.getYf().equals(monthAndCh.get(ch).get(0).getJssj().substring(5, 7)))) {
|
|
|
|
|
Double shzl = 0.0;
|
|
|
|
|
for (DmSygdMx mx : monthAndCh.get(ch)) {
|
|
|
|
|
shzl = shzl + (Objects.isNull(mx.getBcshzl()) ? 0.0 : mx.getBcshzl());
|
|
|
|
|
}
|
|
|
|
|
shzl = Double.valueOf(String.format("%.2f", Objects.isNull(shzl) ? shzl : shzl / 1000.0));
|
|
|
|
|
dmXbjh.setTlt_zl(shzl);
|
|
|
|
|
dmXbjh.setXczl(Double.valueOf(String.format("%.2f", shzl - dmXbjh.getZl())));
|
|
|
|
|
dmXbjh.setMxList(monthAndCh.get(ch));
|
|
|
|
|
dmXbjh.setDcCh(monthAndCh.get(ch).get(0).getDcCh());
|
|
|
|
|
dmXbjh.setYf(monthAndCh.get(ch).get(0).getJssj().substring(5, 7));
|
|
|
|
|
dmXbjh.setNf(monthAndCh.get(ch).get(0).getJssj().substring(0, 4));//2024/04/05
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (dmXbjh.getTlt_zl()>0){
|
|
|
|
|
xbjhdtoList.add(dmXbjh);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
Map<String, List<Xbjhdto>> yf = xbjhdtoList.stream()
|
|
|
|
|
.filter(mx -> Objects.nonNull(mx.getDcCh())) // group by 的字段不能有null值
|
|
|
|
|
.collect(Collectors.groupingBy(x -> x.getYf()));
|
|
|
|
|