|
|
|
@ -6,18 +6,27 @@ import cn.hutool.core.date.DateUtil;
|
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
|
|
import com.dsic.gj_erp.bean.ResultBean;
|
|
|
|
|
import com.dsic.gj_erp.bean.jcsj.DmBom;
|
|
|
|
|
import com.dsic.gj_erp.bean.jcsj.EmGcrl;
|
|
|
|
|
import com.dsic.gj_erp.bean.jhgk.DmSygd;
|
|
|
|
|
import com.dsic.gj_erp.bean.jhgk.DmSygdMx;
|
|
|
|
|
import com.dsic.gj_erp.bean.jhgk.DmZrcjh;
|
|
|
|
|
import com.dsic.gj_erp.bean.jhgk.dto.Kwdto;
|
|
|
|
|
import com.dsic.gj_erp.mapper.jcsj.DmBomMapper;
|
|
|
|
|
import com.dsic.gj_erp.mapper.jcsj.EmGcrlMapper;
|
|
|
|
|
import com.dsic.gj_erp.mapper.jhgk.DmSygdMapper;
|
|
|
|
|
import com.dsic.gj_erp.mapper.jhgk.DmSygdMxMapper;
|
|
|
|
|
import com.dsic.gj_erp.mapper.jhgk.DmZrcjhMapper;
|
|
|
|
|
import com.dsic.gj_erp.service.jhgk.DmSygdMxService;
|
|
|
|
|
import com.dsic.gj_erp.service.jhgk.DmSygdService;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.function.Function;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -35,10 +44,21 @@ public class DmSygdMxServiceImpl extends ServiceImpl<DmSygdMxMapper, DmSygdMx> i
|
|
|
|
|
private DmZrcjhMapper zrcjhMapper;
|
|
|
|
|
@Resource
|
|
|
|
|
private DmBomMapper bomMapper;
|
|
|
|
|
@Resource
|
|
|
|
|
private EmGcrlMapper gcrlMapper;
|
|
|
|
|
@Resource
|
|
|
|
|
private DmSygdService sygdService;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 中日程分解
|
|
|
|
|
* 根据中日程信息,提取相应的BOM数据,合并到套料图级别
|
|
|
|
|
* 默认提取未来3个月信息
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional
|
|
|
|
|
public Map sygdPC(){
|
|
|
|
|
Map map2= new HashMap();
|
|
|
|
|
//1.接下来3个月的 中日程 数据
|
|
|
|
|
// List<DmZrcjh> zrcjhs= zrcjhMapper.selectList(new QueryWrapper<DmZrcjh>()
|
|
|
|
|
// .select("DC_CH,DC_PL,gjks,gjjs_dz,gjjs_xz,jsq_tlt,jsq_lqb,dhqd")
|
|
|
|
@ -60,12 +80,24 @@ public class DmSygdMxServiceImpl extends ServiceImpl<DmSygdMxMapper, DmSygdMx> i
|
|
|
|
|
"2023/08/31")
|
|
|
|
|
.groupBy("DC_CH,DC_PL,gjks,gjjs_dz,gjjs_xz,jsq_tlt,jsq_lqb,dhqd")
|
|
|
|
|
);
|
|
|
|
|
//2.用中日程中的 船号 批量 ,在BOM中找明细
|
|
|
|
|
List<DmSygdMx> mxList=new ArrayList<>();
|
|
|
|
|
List<DmZrcjh> no_tlt=new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
//2.如果未来3个月信息内的船号、批号,已经排产过,那么根据船号、批号删除,重新排
|
|
|
|
|
int i= this.count(new QueryWrapper<DmSygdMx>()
|
|
|
|
|
.eq("dc_ch",zrcjhs.get(0).getDcCh())
|
|
|
|
|
.eq("dc_pl",zrcjhs.get(0).getDcPl())
|
|
|
|
|
);
|
|
|
|
|
if (i>0){
|
|
|
|
|
for (DmZrcjh z:zrcjhs){
|
|
|
|
|
this.remove(new QueryWrapper<DmSygdMx>()
|
|
|
|
|
.eq("dc_ch",z.getDcCh())
|
|
|
|
|
.eq("dc_pl",z.getDcPl()));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//3.用中日程中的 船号 批量 ,在BOM中找明细
|
|
|
|
|
List<DmSygdMx> mxList=new ArrayList<>();
|
|
|
|
|
List<DmZrcjh> no_tlt=new ArrayList<>();//在BOM中没有对应数据的中日程信息
|
|
|
|
|
for (DmZrcjh zrcjh : zrcjhs) {
|
|
|
|
|
//②BOM中对应数据是否齐全
|
|
|
|
|
//②BOM中对应数据
|
|
|
|
|
List<DmBom> bomList= bomMapper.selectList(new QueryWrapper<DmBom>()
|
|
|
|
|
.select("dcch,sjch,pl,tzbh,lqlb,zl,wpgg,wpcz,kw,hxcd,qgcd,\n" +
|
|
|
|
|
"pklx,pkcd,qbs,dmcd,ljsl")
|
|
|
|
@ -81,85 +113,42 @@ public class DmSygdMxServiceImpl extends ServiceImpl<DmSygdMxMapper, DmSygdMx> i
|
|
|
|
|
bomToMx(zrcjh,bomList,mxList,"",zrcjh.getDcCh());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Map map2= new HashMap();
|
|
|
|
|
//根据有无套料图 分组 ,没有套料图的 获取船号list
|
|
|
|
|
Map<String,List<DmZrcjh>> map=no_tlt.stream().collect(Collectors.groupingBy(DmZrcjh::getDcCh));
|
|
|
|
|
if (map.size()>0){
|
|
|
|
|
//4.1 将没有BOM信息的中日程的船号,去重,返回前端,手动选择目标船只
|
|
|
|
|
if (no_tlt.size()>0){
|
|
|
|
|
Map<String,List<DmZrcjh>> map=no_tlt.stream().collect(Collectors.groupingBy(DmZrcjh::getDcCh));
|
|
|
|
|
List<DmSygdMx> no_tlt_ch=new ArrayList<>();
|
|
|
|
|
for (String s:map.keySet()){
|
|
|
|
|
DmSygdMx m=new DmSygdMx();
|
|
|
|
|
m.setDcCh(s);
|
|
|
|
|
no_tlt_ch.add(m);
|
|
|
|
|
}
|
|
|
|
|
//BOM中有套料图的船
|
|
|
|
|
//可作为目标船只的船
|
|
|
|
|
List<DmBom> haveTltBoms= bomMapper.selectList(new QueryWrapper<DmBom>()
|
|
|
|
|
.select("dcch")
|
|
|
|
|
.eq("cs",3)
|
|
|
|
|
.groupBy("dcch"));
|
|
|
|
|
|
|
|
|
|
map2.put("no_tlt",no_tlt);
|
|
|
|
|
map2.put("no_tlt_ch",no_tlt_ch);
|
|
|
|
|
map2.put("haveTltBoms",haveTltBoms);
|
|
|
|
|
}else {
|
|
|
|
|
//4.2 如果BOM中数据齐全,直接排产
|
|
|
|
|
ypc(mxList);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//3.给明细排产
|
|
|
|
|
|
|
|
|
|
//4.明细数据 统计到主表中 数据返回到前端页面
|
|
|
|
|
|
|
|
|
|
map2.put("mxList",mxList);
|
|
|
|
|
return map2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<DmSygdMx> saveByDcch(HashMap<String, List<Object>> map) {
|
|
|
|
|
List<DmZrcjh> zrcjhs = BeanUtil.copyToList(map.get("no_tlt"), DmZrcjh.class);
|
|
|
|
|
List<DmSygdMx> mxList= BeanUtil.copyToList(map.get("mxList"),DmSygdMx.class);
|
|
|
|
|
List<DmSygdMx> no_tlt_ch= BeanUtil.copyToList(map.get("no_tlt_ch"),DmSygdMx.class);
|
|
|
|
|
|
|
|
|
|
//1.
|
|
|
|
|
for (DmZrcjh z:zrcjhs){
|
|
|
|
|
for (DmSygdMx mx:no_tlt_ch){
|
|
|
|
|
if (z.getDcCh().equals(mx.getDcCh())){
|
|
|
|
|
List<DmBom> bomList= bomMapper.selectList(new QueryWrapper<DmBom>()
|
|
|
|
|
.select("dcch,sjch,pl,tzbh,lqlb,zl,wpgg,wpcz,kw,hxcd,qgcd,\n" +
|
|
|
|
|
"pklx,pkcd,qbs,dmcd,ljsl")
|
|
|
|
|
.eq("dcch",mx.getDcCh1())
|
|
|
|
|
.eq("pl",z.getDcPl().length()<3?"0"+z.getDcPl():z.getDcPl())
|
|
|
|
|
.eq("cs",3)
|
|
|
|
|
.groupBy("dcch,sjch,pl,tzbh,lqlb,zl,wpgg,wpcz,kw,hxcd,qgcd,\n" +
|
|
|
|
|
"pklx,pkcd,qbs,dmcd,ljsl")
|
|
|
|
|
);
|
|
|
|
|
if(bomList.size()<1){
|
|
|
|
|
DmSygdMx mx1=new DmSygdMx();
|
|
|
|
|
zrcToMx(z,mx1);
|
|
|
|
|
mxList.add(mx1);
|
|
|
|
|
}else {
|
|
|
|
|
bomToMx(z,bomList,mxList,mx.getDcCh1(),"");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ypc(mxList);
|
|
|
|
|
|
|
|
|
|
return mxList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void zrcToMx(DmZrcjh zrcjh, DmSygdMx m){
|
|
|
|
|
m.setDcCh(zrcjh.getDcCh());
|
|
|
|
|
m.setDcPl(zrcjh.getDcPl());
|
|
|
|
|
m.setDcFd(zrcjh.getDcFd());
|
|
|
|
|
m.setGjks(zrcjh.getGjks());
|
|
|
|
|
m.setGjjsDz(zrcjh.getGjjsDz());
|
|
|
|
|
m.setGjjsXz(zrcjh.getGjjsXz());
|
|
|
|
|
m.setJsqTlt(zrcjh.getJsqTlt());
|
|
|
|
|
m.setJsqLqb(zrcjh.getJsqLqb());
|
|
|
|
|
m.setDhqd(zrcjh.getDhqd());
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
public List<DmSygdMx> bomToMx(DmZrcjh zrcjh,List<DmBom> list,List<DmSygdMx> mxList,String mbch,String dcch){
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
*使用中日程、BOM信息,给明细赋值
|
|
|
|
|
* @param zrcjh 中日程对象
|
|
|
|
|
* @param list BOM信息
|
|
|
|
|
* @param mxList 明细信息
|
|
|
|
|
* @param mbch 目标船只
|
|
|
|
|
* @param dcch 本船号
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public void bomToMx(DmZrcjh zrcjh,List<DmBom> list,List<DmSygdMx> mxList,String mbch,String dcch){
|
|
|
|
|
for (DmBom b:list){
|
|
|
|
|
DmSygdMx mx=new DmSygdMx();
|
|
|
|
|
zrcToMx(zrcjh,mx);
|
|
|
|
@ -209,66 +198,379 @@ public class DmSygdMxServiceImpl extends ServiceImpl<DmSygdMxMapper, DmSygdMx> i
|
|
|
|
|
mx.setDcCh2(dcch);
|
|
|
|
|
mx.setDcCh1(mbch);
|
|
|
|
|
mx.setGxsj(DateUtil.now());
|
|
|
|
|
//todo
|
|
|
|
|
if(b.getZl().equals("1110")){
|
|
|
|
|
mx.setJssj(mx.getGjjsDz());
|
|
|
|
|
}
|
|
|
|
|
if(b.getZl().equals("1010")){
|
|
|
|
|
mx.setJssj(mx.getGjjsXz());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (b.getZl().equals("4230")){//焊接机器人肘板
|
|
|
|
|
mx.setJssj(mx.getGjjsXz());
|
|
|
|
|
}
|
|
|
|
|
if (b.getZl().equals("1120")){//TODO 光电 暂时按最小时间排
|
|
|
|
|
if (mx.getGjjsXz().compareTo(mx.getGjjsDz())>0)
|
|
|
|
|
mx.setJssj(mx.getGjjsXz());
|
|
|
|
|
else
|
|
|
|
|
mx.setJssj(mx.getGjjsDz());
|
|
|
|
|
}
|
|
|
|
|
mxList.add(mx);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return mxList;
|
|
|
|
|
/**
|
|
|
|
|
* 使用中日程信息,给明细赋值
|
|
|
|
|
* @param zrcjh
|
|
|
|
|
* @param m
|
|
|
|
|
*/
|
|
|
|
|
public void zrcToMx(DmZrcjh zrcjh, DmSygdMx m){
|
|
|
|
|
m.setDcCh(zrcjh.getDcCh());
|
|
|
|
|
m.setDcPl(zrcjh.getDcPl());
|
|
|
|
|
m.setDcFd(zrcjh.getDcFd());
|
|
|
|
|
m.setGjks(zrcjh.getGjks());
|
|
|
|
|
m.setGjjsDz(zrcjh.getGjjsDz());
|
|
|
|
|
m.setGjjsXz(zrcjh.getGjjsXz());
|
|
|
|
|
m.setJsqTlt(zrcjh.getJsqTlt());
|
|
|
|
|
m.setJsqLqb(zrcjh.getJsqLqb());
|
|
|
|
|
m.setDhqd(zrcjh.getDhqd());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 根据选择的目标船只,查询数据,为本船只赋值
|
|
|
|
|
* @param map
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public List<DmSygdMx> saveByDcch(HashMap<String, List<Object>> map) {
|
|
|
|
|
List<DmZrcjh> zrcjhs = BeanUtil.copyToList(map.get("no_tlt"), DmZrcjh.class);
|
|
|
|
|
List<DmSygdMx> mxList= BeanUtil.copyToList(map.get("mxList"),DmSygdMx.class);
|
|
|
|
|
List<DmSygdMx> no_tlt_ch= BeanUtil.copyToList(map.get("no_tlt_ch"),DmSygdMx.class);
|
|
|
|
|
|
|
|
|
|
//1.根据选择的目标船只,查询数据,为本船只赋值
|
|
|
|
|
for (DmZrcjh z:zrcjhs){
|
|
|
|
|
for (DmSygdMx mx:no_tlt_ch){
|
|
|
|
|
if (z.getDcCh().equals(mx.getDcCh())){
|
|
|
|
|
List<DmBom> bomList= bomMapper.selectList(new QueryWrapper<DmBom>()
|
|
|
|
|
.select("dcch,sjch,pl,tzbh,lqlb,zl,wpgg,wpcz,kw,hxcd,qgcd,\n" +
|
|
|
|
|
"pklx,pkcd,qbs,dmcd,ljsl")
|
|
|
|
|
.eq("dcch",mx.getDcCh1())
|
|
|
|
|
.eq("pl",z.getDcPl().length()<3?"0"+z.getDcPl():z.getDcPl())
|
|
|
|
|
.eq("cs",3)
|
|
|
|
|
.groupBy("dcch,sjch,pl,tzbh,lqlb,zl,wpgg,wpcz,kw,hxcd,qgcd,\n" +
|
|
|
|
|
"pklx,pkcd,qbs,dmcd,ljsl")
|
|
|
|
|
);
|
|
|
|
|
if(bomList.size()<1){
|
|
|
|
|
DmSygdMx mx1=new DmSygdMx();
|
|
|
|
|
zrcToMx(z,mx1);
|
|
|
|
|
mxList.add(mx1);
|
|
|
|
|
}else {
|
|
|
|
|
bomToMx(z,bomList,mxList,mx.getDcCh1(),"");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//2.排产
|
|
|
|
|
ypc(mxList);
|
|
|
|
|
mxList =mxList.stream().sorted(Comparator.comparing(DmSygdMx::getJssj,Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());
|
|
|
|
|
return mxList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 预排产,根据套料图号及跨位
|
|
|
|
|
* @param list
|
|
|
|
|
*/
|
|
|
|
|
public void ypc(List<DmSygdMx> list){
|
|
|
|
|
//排序
|
|
|
|
|
list =list.stream().sorted(Comparator.comparing(DmSygdMx::getJssj,Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());
|
|
|
|
|
//上料
|
|
|
|
|
list.forEach(l->{
|
|
|
|
|
//1.根据钢加结束时间排序,决定生产顺序
|
|
|
|
|
list =list.stream().sorted(Comparator.comparing(DmSygdMx::getJssj,Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());
|
|
|
|
|
//2.未来3个月的工厂日历信息
|
|
|
|
|
List<EmGcrl> gcrlList= gcrlMapper.selectList(new QueryWrapper<EmGcrl>()
|
|
|
|
|
.eq("xxr","1")
|
|
|
|
|
.between("gl",
|
|
|
|
|
"2023/08/01",
|
|
|
|
|
"2023/08/31")
|
|
|
|
|
.orderByAsc("gl"));
|
|
|
|
|
//3.预排产
|
|
|
|
|
//TODO 假设:上料产能22张/小时,每天8小时工作时间;又套料图需当天完成
|
|
|
|
|
for (int i = 0; i < gcrlList.size(); i++) {
|
|
|
|
|
for (int j = 0; j < (8*22); j++) {
|
|
|
|
|
int index=(8*22)*i+j;
|
|
|
|
|
if (list.size()>index){
|
|
|
|
|
// if (list.get(index).getLx().equals("B")){
|
|
|
|
|
//1抛
|
|
|
|
|
list.get(index).setPwrq(gcrlList.get(i).getGl());
|
|
|
|
|
list.get(index).setSlrq(gcrlList.get(i).getGl());
|
|
|
|
|
list.get(index).setHxrq(gcrlList.get(i).getGl());
|
|
|
|
|
list.get(index).setQgrq(gcrlList.get(i).getGl());
|
|
|
|
|
// }else {
|
|
|
|
|
// //2抛
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
}else {
|
|
|
|
|
j=(8*22);
|
|
|
|
|
i=gcrlList.size();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
this.saveBatch(list);
|
|
|
|
|
// 校平
|
|
|
|
|
//抛丸
|
|
|
|
|
|
|
|
|
|
//根据跨位分组
|
|
|
|
|
Map<String,List<DmSygdMx>> groupByKw=list.stream().collect(Collectors.groupingBy(x->Optional.ofNullable(x.getKw()).orElse("0") ));
|
|
|
|
|
// Map<String,List<DmSygdMx>> groupByKw=list.stream().collect(Collectors.groupingBy(x->Optional.ofNullable(x.getKw()).orElse("0") ));
|
|
|
|
|
// 7 1跨平直大板
|
|
|
|
|
List<DmSygdMx> k1pz=groupByKw.get("7");
|
|
|
|
|
//排产
|
|
|
|
|
k1pz.forEach(k->{
|
|
|
|
|
//上料 校平 抛丸 理料 划线 切割 坡口 打磨
|
|
|
|
|
// List<DmSygdMx> k1pz=groupByKw.get("7");
|
|
|
|
|
// k1pz =k1pz.stream().sorted(Comparator.comparing(DmSygdMx::getPwrq,Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());
|
|
|
|
|
// //排产
|
|
|
|
|
// 划线 切割 坡口 打磨
|
|
|
|
|
// k1pz.forEach(k->{
|
|
|
|
|
// k.setHxrq(k.getPwrq());
|
|
|
|
|
// k.setQgry(k.getPwrq());
|
|
|
|
|
// });
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
// 8 1跨进线板
|
|
|
|
|
List<DmSygdMx> k1jx=groupByKw.get("8");
|
|
|
|
|
// 11 2跨T型材腹板
|
|
|
|
|
List<DmSygdMx> k2tf=groupByKw.get("11");
|
|
|
|
|
// 5 2跨T型材面板
|
|
|
|
|
List<DmSygdMx> k2tm=groupByKw.get("5");
|
|
|
|
|
// 9 2跨超长超宽板
|
|
|
|
|
List<DmSygdMx> k2c=groupByKw.get("9");
|
|
|
|
|
// 10 2跨超长超宽曲板
|
|
|
|
|
List<DmSygdMx> k2cq=groupByKw.get("10");
|
|
|
|
|
// 12 2跨激光切割板
|
|
|
|
|
List<DmSygdMx> k2j=groupByKw.get("12");
|
|
|
|
|
// 14 3跨厚板
|
|
|
|
|
List<DmSygdMx> k3h=groupByKw.get("14");
|
|
|
|
|
// 6 3跨平铁
|
|
|
|
|
List<DmSygdMx> k3p=groupByKw.get("6");
|
|
|
|
|
// 13 3跨曲板
|
|
|
|
|
List<DmSygdMx> k3q=groupByKw.get("13");
|
|
|
|
|
// 15 4跨普通板
|
|
|
|
|
List<DmSygdMx> k4p=groupByKw.get("15");
|
|
|
|
|
// 16 7跨型板
|
|
|
|
|
List<DmSygdMx> k7x=groupByKw.get("16");
|
|
|
|
|
// 17 光电
|
|
|
|
|
List<DmSygdMx> gd=groupByKw.get("17");
|
|
|
|
|
//// 8 1跨进线板
|
|
|
|
|
// List<DmSygdMx> k1jx=groupByKw.get("8");
|
|
|
|
|
//// 11 2跨T型材腹板
|
|
|
|
|
// List<DmSygdMx> k2tf=groupByKw.get("11");
|
|
|
|
|
//// 5 2跨T型材面板
|
|
|
|
|
// List<DmSygdMx> k2tm=groupByKw.get("5");
|
|
|
|
|
//// 9 2跨超长超宽板
|
|
|
|
|
// List<DmSygdMx> k2c=groupByKw.get("9");
|
|
|
|
|
//// 10 2跨超长超宽曲板
|
|
|
|
|
// List<DmSygdMx> k2cq=groupByKw.get("10");
|
|
|
|
|
//// 12 2跨激光切割板
|
|
|
|
|
// List<DmSygdMx> k2j=groupByKw.get("12");
|
|
|
|
|
//// 14 3跨厚板
|
|
|
|
|
// List<DmSygdMx> k3h=groupByKw.get("14");
|
|
|
|
|
//// 6 3跨平铁
|
|
|
|
|
// List<DmSygdMx> k3p=groupByKw.get("6");
|
|
|
|
|
//// 13 3跨曲板
|
|
|
|
|
// List<DmSygdMx> k3q=groupByKw.get("13");
|
|
|
|
|
//// 15 4跨普通板
|
|
|
|
|
// List<DmSygdMx> k4p=groupByKw.get("15");
|
|
|
|
|
//// 16 7跨型板
|
|
|
|
|
// List<DmSygdMx> k7x=groupByKw.get("16");
|
|
|
|
|
//// 17 光电
|
|
|
|
|
// List<DmSygdMx> gd=groupByKw.get("17");
|
|
|
|
|
|
|
|
|
|
System.out.println(groupByKw);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 提取跨位信息
|
|
|
|
|
* @param list
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public List<Kwdto> getKwList(List<DmSygdMx> list){
|
|
|
|
|
//1.将明细信息,按照跨位分组
|
|
|
|
|
Map<String,List<DmSygdMx>> map=list.stream().collect(Collectors.groupingBy(x->Optional.ofNullable(x.getKw()).orElse("0") ));
|
|
|
|
|
List<Kwdto> kwdtoList=new ArrayList<>();
|
|
|
|
|
//2.按照日期,统计每个跨位信息
|
|
|
|
|
for (String kw:map.keySet()){
|
|
|
|
|
//根据上料日期分组
|
|
|
|
|
Map<String,List<DmSygdMx>> map1=map.get(kw).stream().collect(Collectors.groupingBy(x->Optional.ofNullable(x.getSlrq()).orElse("0") ));
|
|
|
|
|
for (String rq:map1.keySet()){
|
|
|
|
|
Kwdto kwdto=new Kwdto();
|
|
|
|
|
kwdto.setRq(rq);
|
|
|
|
|
kwdto.setKw(kw);
|
|
|
|
|
List<DmSygdMx> list1=map1.get(rq);
|
|
|
|
|
kwdto.setTlt_sl(list1.size());
|
|
|
|
|
BigDecimal hx_cd=new BigDecimal(0);
|
|
|
|
|
BigDecimal qg_cd=new BigDecimal(0);
|
|
|
|
|
for (DmSygdMx mx:list1){
|
|
|
|
|
hx_cd=hx_cd.add(ObjectUtil.isEmpty(mx.getHxcd())?new BigDecimal(0):mx.getHxcd());
|
|
|
|
|
qg_cd=qg_cd.add(ObjectUtil.isEmpty(mx.getQgcd())?new BigDecimal(0):mx.getQgcd());
|
|
|
|
|
}
|
|
|
|
|
kwdto.setHx_cd(hx_cd);
|
|
|
|
|
kwdto.setQg_cd(qg_cd);
|
|
|
|
|
kwdtoList.add(kwdto);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
kwdtoList=kwdtoList.stream().sorted(Comparator.comparing(Kwdto::getRq,Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());
|
|
|
|
|
return kwdtoList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 生成3月滚动计划
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public ResultBean tqSygd(){
|
|
|
|
|
//1.查询未来3个月明细信息
|
|
|
|
|
//测试
|
|
|
|
|
// List<DmSygdMx> list=null;
|
|
|
|
|
List<DmSygdMx> list= this.list(new QueryWrapper<DmSygdMx>()
|
|
|
|
|
.between("gjks",
|
|
|
|
|
"2023/08/01",
|
|
|
|
|
"2023/08/31")
|
|
|
|
|
);
|
|
|
|
|
if (ObjectUtil.isEmpty(list)||list.size()<1){
|
|
|
|
|
return new ResultBean(null);
|
|
|
|
|
}
|
|
|
|
|
//根据船号+批量分组
|
|
|
|
|
Map<String,List<DmSygdMx>> map=list.stream().collect(Collectors.groupingBy(x->x.getDcCh()+x.getDcPl()));
|
|
|
|
|
List<DmSygd> sygdList=new ArrayList<>();
|
|
|
|
|
for (String key:map.keySet()){
|
|
|
|
|
DmSygd sygd=new DmSygd();
|
|
|
|
|
List<DmSygdMx> mxList=map.get(key);
|
|
|
|
|
sygd.setDcCh(mxList.get(0).getDcCh());
|
|
|
|
|
sygd.setDcPl(mxList.get(0).getDcPl());
|
|
|
|
|
sygd.setDcFd(mxList.get(0).getDcFd());
|
|
|
|
|
sygd.setGjjsDz(mxList.get(0).getGjjsDz());
|
|
|
|
|
sygd.setGjjsXz(mxList.get(0).getGjjsXz());
|
|
|
|
|
sygd.setJsqTlt(mxList.get(0).getJsqTlt());
|
|
|
|
|
sygd.setJsqLqb(mxList.get(0).getJsqLqb());
|
|
|
|
|
sygd.setTltSl(mxList.size());
|
|
|
|
|
sygd.setSlSl(mxList.size());
|
|
|
|
|
sygd.setPwSl(mxList.size());
|
|
|
|
|
//跨位信息
|
|
|
|
|
Map<String,List<DmSygdMx>> kwMap=map.get(key).stream().collect(Collectors.groupingBy(x->Optional.ofNullable(x.getKw()).orElse("0") ));
|
|
|
|
|
for (String kw:kwMap.keySet()){
|
|
|
|
|
//组立信息
|
|
|
|
|
Map<String,List<DmSygdMx>> zlMap=kwMap.get(kw).stream().collect(Collectors.groupingBy(x->Optional.ofNullable(x.getZl()).orElse("0") ));
|
|
|
|
|
for (String zl:zlMap.keySet()){
|
|
|
|
|
//跨位、组立下,多张套料图的最开始加工时间,最后加工时间;(上料日期)
|
|
|
|
|
List<DmSygdMx> kssj= zlMap.get(zl).stream().sorted(Comparator.comparing(DmSygdMx::getSlrq,Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());
|
|
|
|
|
List<DmSygdMx> jssj= zlMap.get(zl).stream().sorted(Comparator.comparing(DmSygdMx::getSlrq,Comparator.nullsLast(Comparator.naturalOrder())).reversed()).collect(Collectors.toList());
|
|
|
|
|
String sj=kssj.get(0).getSlrq()+" - "+jssj.get(0).getSlrq();
|
|
|
|
|
|
|
|
|
|
if (kw.equals("7")){//1跨平直大板
|
|
|
|
|
if(zl.equals("1110")){//大组
|
|
|
|
|
sygd.setN1ad(kssj.size());
|
|
|
|
|
sygd.setN1adSj(sj);
|
|
|
|
|
}
|
|
|
|
|
if(zl.equals("1010")) {//小组
|
|
|
|
|
sygd.setN1ax(kssj.size());
|
|
|
|
|
sygd.setN1axSj(sj);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (kw.equals("8")){//1跨进线板
|
|
|
|
|
sygd.setN1ld(kssj.size());
|
|
|
|
|
sygd.setN1ldSj(sj);
|
|
|
|
|
}
|
|
|
|
|
if (kw.equals("5")){//2跨T型材面板
|
|
|
|
|
if(zl.equals("1110")){//大组
|
|
|
|
|
sygd.setS2td(kssj.size());
|
|
|
|
|
sygd.setS2tdSj(sj);
|
|
|
|
|
}
|
|
|
|
|
if(zl.equals("1010")) {//小组
|
|
|
|
|
sygd.setS2tx(kssj.size());
|
|
|
|
|
sygd.setS2txSj(sj);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
if (kw.equals("9")){//2跨超长超宽板
|
|
|
|
|
if(zl.equals("1110")){//大组
|
|
|
|
|
sygd.setN2bd(kssj.size());
|
|
|
|
|
sygd.setN2bdSj(sj);
|
|
|
|
|
}
|
|
|
|
|
if(zl.equals("1010")) {//小组
|
|
|
|
|
sygd.setN2bx(kssj.size());
|
|
|
|
|
sygd.setN2bxSj(sj);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (kw.equals("10")){//2跨超长超宽曲板
|
|
|
|
|
if(zl.equals("1110")){//大组
|
|
|
|
|
sygd.setN2cd(kssj.size());
|
|
|
|
|
sygd.setN2cdSj(sj);
|
|
|
|
|
}
|
|
|
|
|
if(zl.equals("1010")) {//小组
|
|
|
|
|
sygd.setN2cx(kssj.size());
|
|
|
|
|
sygd.setN2cxSj(sj);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (kw.equals("11")){//2跨T型材腹板
|
|
|
|
|
if(zl.equals("1110")){//大组
|
|
|
|
|
sygd.setN2td(kssj.size());
|
|
|
|
|
sygd.setN2tdSj(sj);
|
|
|
|
|
}
|
|
|
|
|
if(zl.equals("1010")) {//小组
|
|
|
|
|
sygd.setN2tx(kssj.size());
|
|
|
|
|
sygd.setN2txSj(sj);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (kw.equals("12")){//2跨激光切割板
|
|
|
|
|
if(zl.equals("1110")){//大组
|
|
|
|
|
sygd.setN2jd(kssj.size());
|
|
|
|
|
sygd.setN2jdSj(sj);
|
|
|
|
|
}
|
|
|
|
|
if(zl.equals("1010")) {//小组
|
|
|
|
|
sygd.setN2jx(kssj.size());
|
|
|
|
|
sygd.setN2jxSj(sj);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
if (kw.equals("14")){//3跨厚板
|
|
|
|
|
if(zl.equals("1110")){//大组
|
|
|
|
|
sygd.setN3hd(kssj.size());
|
|
|
|
|
sygd.setN3hdSj(sj);
|
|
|
|
|
}
|
|
|
|
|
if(zl.equals("1010")) {//小组
|
|
|
|
|
sygd.setN3hx(kssj.size());
|
|
|
|
|
sygd.setN3hxSj(sj);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
if (kw.equals("6")){//3跨平铁
|
|
|
|
|
if(zl.equals("1110")){//大组
|
|
|
|
|
sygd.setS3pd(kssj.size());
|
|
|
|
|
sygd.setS3pdSj(sj);
|
|
|
|
|
}
|
|
|
|
|
if(zl.equals("1010")) {//小组
|
|
|
|
|
sygd.setS3px(kssj.size());
|
|
|
|
|
sygd.setS3pxSj(sj);
|
|
|
|
|
}
|
|
|
|
|
if(zl.equals("4230")) {//焊接机器人肘板
|
|
|
|
|
sygd.setS3xx(kssj.size());
|
|
|
|
|
sygd.setS3xxSj(sj);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
if (kw.equals("13")){//3跨曲板
|
|
|
|
|
if(zl.equals("1110")){//大组
|
|
|
|
|
sygd.setN3cd(kssj.size());
|
|
|
|
|
sygd.setN3cdSj(sj);
|
|
|
|
|
}
|
|
|
|
|
if(zl.equals("1010")) {//小组
|
|
|
|
|
sygd.setN3cx(kssj.size());
|
|
|
|
|
sygd.setN3cxSj(sj);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (kw.equals("15")){//4跨普通板
|
|
|
|
|
if(zl.equals("1110")){//大组
|
|
|
|
|
sygd.setN4pd(kssj.size());
|
|
|
|
|
sygd.setN4pdSj(sj);
|
|
|
|
|
}
|
|
|
|
|
if(zl.equals("1010")) {//小组
|
|
|
|
|
sygd.setN4px(kssj.size());
|
|
|
|
|
sygd.setN4pxSj(sj);
|
|
|
|
|
}
|
|
|
|
|
if(zl.equals("4230")) {//焊接机器人肘板
|
|
|
|
|
sygd.setN4xx(kssj.size());
|
|
|
|
|
sygd.setN4xxSj(sj);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
if (kw.equals("16")){//7跨型板
|
|
|
|
|
if(zl.equals("1110")){//大组
|
|
|
|
|
//todo 型材米数
|
|
|
|
|
// sygd.setX7xd(kssj.size());
|
|
|
|
|
sygd.setX7xdSj(sj);
|
|
|
|
|
}
|
|
|
|
|
if(zl.equals("1010")) {//小组
|
|
|
|
|
// sygd.setX7xx(kssj.size());
|
|
|
|
|
sygd.setX7xxSj(sj);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(kw.equals("17")) {//光电
|
|
|
|
|
sygd.setN8gx(kssj.size());
|
|
|
|
|
sygd.setN8gxSj(sj);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//1跨 板数 加工 时间
|
|
|
|
|
//1跨 板数 加工 时间
|
|
|
|
|
}
|
|
|
|
|
sygdList.add(sygd);
|
|
|
|
|
}
|
|
|
|
|
sygdList = sygdList.stream().sorted(Comparator.comparing(DmSygd::getDcCh).thenComparing(DmSygd::getDcPl)).collect(Collectors.toList());
|
|
|
|
|
sygdService.saveBatch(sygdList);
|
|
|
|
|
return new ResultBean(sygdList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|