@ -6,11 +6,13 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil ;
import cn.hutool.core.util.ObjectUtil ;
import cn.hutool.core.util.StrUtil ;
import cn.hutool.core.util.StrUtil ;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper ;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper ;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper ;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl ;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl ;
import com.dsic.gj_erp.bean.ResultBean ;
import com.dsic.gj_erp.bean.ResultBean ;
import com.dsic.gj_erp.bean.jcsj.DmBom ;
import com.dsic.gj_erp.bean.jcsj.DmBom ;
import com.dsic.gj_erp.bean.jcsj.DmCzplpNew ;
import com.dsic.gj_erp.bean.jcsj.DmCzplpNew ;
import com.dsic.gj_erp.bean.jcsj.EmGcrl ;
import com.dsic.gj_erp.bean.jcsj.EmGcrl ;
import com.dsic.gj_erp.bean.jcsj.excel.PlExcel ;
import com.dsic.gj_erp.bean.jhgk.* ;
import com.dsic.gj_erp.bean.jhgk.* ;
import com.dsic.gj_erp.bean.jhgk.dto.* ;
import com.dsic.gj_erp.bean.jhgk.dto.* ;
import com.dsic.gj_erp.mapper.jcsj.DmBomMapper ;
import com.dsic.gj_erp.mapper.jcsj.DmBomMapper ;
@ -22,6 +24,7 @@ import com.dsic.gj_erp.service.jhgk.DmSygdMxService;
import com.dsic.gj_erp.service.jhgk.DmSygdService ;
import com.dsic.gj_erp.service.jhgk.DmSygdService ;
import com.dsic.gj_erp.service.jhgk.DmTzjhService ;
import com.dsic.gj_erp.service.jhgk.DmTzjhService ;
import com.dsic.gj_erp.service.jhgk.DmXbjhService ;
import com.dsic.gj_erp.service.jhgk.DmXbjhService ;
import org.apache.commons.lang3.StringUtils ;
import org.springframework.beans.BeanUtils ;
import org.springframework.beans.BeanUtils ;
import org.springframework.stereotype.Service ;
import org.springframework.stereotype.Service ;
import org.springframework.transaction.annotation.Transactional ;
import org.springframework.transaction.annotation.Transactional ;
@ -42,293 +45,62 @@ import java.util.stream.Collectors;
@Service
@Service
public class DmSygdMxServiceImpl extends ServiceImpl < DmSygdMxMapper , DmSygdMx > implements DmSygdMxService {
public class DmSygdMxServiceImpl extends ServiceImpl < DmSygdMxMapper , DmSygdMx > implements DmSygdMxService {
@Resource
private DmZrcjhMapper zrcjhMapper ;
@Resource
private DmBomMapper bomMapper ;
@Resource
@Resource
private EmGcrlMapper gcrlMapper ;
private EmGcrlMapper gcrlMapper ;
@Resource
@Resource
private DmSygdService sygdService ;
private DmSygdService sygdService ;
@Resource
@Resource
private DmCzplpNewService plService ;
@Resource
private DmXbjhService xbService ;
private DmXbjhService xbService ;
@Resource
@Resource
private DmTzjhService tzjhService ;
private DmTzjhService tzjhService ;
@Resource
private DmSygdMxLjServiceImpl ljService ;
/ * *
/ * *
* 中日 程 分 解
* 三月 滚 动 需 求 期 排 产
* 根据 中 日 程 信 息 , 提 取 相 应 的 BOM 数 据 , 合 并 到 套 料 图 级 别
* 滚动 需 求 期 信 息 , 提 取 相 应 的 BOM 数 据 , 后 合 并 到 套 料 图 级 别
* 默 认 提 取 未 来 3 个 月 信 息
* 默 认 提 取 未 来 3 个 月 信 息
*
* @return
* @return
* /
* /
@Override
@Override
@Transactional
@Transactional
public Map sygdPC ( ) {
public Map sygdPC ( ) {
Map map2 = new HashMap ( ) ;
List < DmSygdMxLj > ljList = baseMapper . getLjxx ( ) ;
//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")
// .between("gjjs_dz",
// "(SELECT CONVERT(varchar(10),DATEADD(m,1,DATEADD(dd,-DAY(GETDATE())+1,GETDATE())),111))",
// "(Select CONVERT(varchar(10), eomonth(GETDATE(),3), 111))").or()
// .between("gjjs_dz",
// "(SELECT CONVERT(varchar(10),DATEADD(m,1,DATEADD(dd,-DAY(GETDATE())+1,GETDATE())),111))",
// "(Select CONVERT(varchar(10), eomonth(GETDATE(),3), 111))")
// .groupBy("DC_CH,DC_PL,gjks,gjjs_dz,gjjs_xz,jsq_tlt,jsq_lqb,dhqd")
// );
//TODO 需测试
List < DmZrcjh > zrcjhs = zrcjhMapper . selectList ( new QueryWrapper < DmZrcjh > ( )
. select ( "DC_CH,stuff( ( SELECT ' ' + c.DC_FD FROM dm_zrcjh c WHERE c.DC_CH=dm_zrcjh.DC_CH and c.DC_PL=dm_zrcjh.DC_PL FOR xml path ( '' ) ), 1, 1, '' ) AS dcFd," +
"DC_PL,gjks,gjjs_dz,gjjs_xz,jsq_tlt,jsq_lqb,dhqd,SUM(zl) as zl" )
. between ( "gjjs_dz" ,
"2023/08/01" ,
"2023/08/31" )
. or ( )
. between ( "gjjs_xz" ,
"2023/08/01" ,
"2023/08/31" )
. groupBy ( "DC_CH,DC_PL,gjks,gjjs_dz,gjjs_xz,jsq_tlt,jsq_lqb,dhqd" )
) ;
if ( zrcjhs . size ( ) < 1 ) { map2 . put ( "message" , "请导入中日程!" ) ; return map2 ; }
List < DmZrcjh > zrcjhsNew = new ArrayList < > ( ) ;
//TODO 2.如果要重新排产,应当先根据 船号、批量 删除对应数父级状态为编制数据,及对应明细数据
for ( DmZrcjh zrc : zrcjhs ) {
//有父级数据的
if ( sygdService . remove ( new QueryWrapper < DmSygd > ( )
. eq ( "DC_CH" , zrc . getDcCh ( ) )
. eq ( "DC_PL" , zrc . getDcPl ( ) )
. eq ( "gd_zt" , "0" ) //编辑
) ) {
this . remove ( new QueryWrapper < DmSygdMx > ( )
. eq ( "dc_ch" , zrc . getDcCh ( ) )
. eq ( "dc_pl" , zrc . getDcPl ( ) ) ) ;
zrcjhsNew . add ( zrc ) ;
} else {
//无父级数据的
this . remove ( new QueryWrapper < DmSygdMx > ( )
. eq ( "dc_ch" , zrc . getDcCh ( ) )
. eq ( "dc_pl" , zrc . getDcPl ( ) )
. last ( "and parent_id is null" ) ) ;
zrcjhsNew . add ( zrc ) ;
}
}
if ( zrcjhsNew . size ( ) < 1 ) {
//todo 保存前判断是否有,已排完的数据
map2 . put ( "message" , "无可排产数据" ) ;
return map2 ;
}
//3.用中日程中的 船号 批量 , 在BOM中找明细
List < DmSygdMx > mxList = new ArrayList < > ( ) ;
List < DmZrcjh > no_tlt = new ArrayList < > ( ) ; //在BOM中没有对应数据的中日程信息
for ( DmZrcjh zrcjh : zrcjhsNew ) {
//TODO ②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" )
. eq ( "dcch" , zrcjh . getDcCh ( ) )
. eq ( "pl" , zrcjh . getDcPl ( ) . length ( ) < 3 ? "0" + zrcjh . getDcPl ( ) : zrcjh . 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 ) {
ljService . saveBatch ( ljList ) ;
no_tlt . add ( zrcjh ) ;
} else {
bomToMx ( zrcjh , bomList , mxList , "" , zrcjh . getDcCh ( ) ) ;
}
}
//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 ) ;
}
//可作为目标船只的船
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 ) ;
}
map2 . put ( "mxList" , mxList ) ;
return map2 ;
}
/ * *
List < DmSygdMx > mxList = baseMapper . getMx ( ) ;
* 使 用 中 日 程 、 BOM 信 息 , 给 明 细 赋 值
mxList . forEach ( l - > {
* @param zrcjh 中 日 程 对 象
if ( StrUtil . isNotEmpty ( l . getWpgg ( ) ) ) {
* @param list BOM 信 息
String [ ] wpgg = l . getWpgg ( ) . split ( "\\*" ) ;
* @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 ) ;
if ( StrUtil . isNotEmpty ( b . getZl ( ) ) ) {
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 ( ) ) ;
}
} else {
if ( mx . getGjjsXz ( ) . compareTo ( mx . getGjjsDz ( ) ) > 0 )
mx . setJssj ( mx . getGjjsDz ( ) ) ;
else
mx . setJssj ( mx . getGjjsXz ( ) ) ;
}
if ( mx . getJssj ( ) . compareTo ( "2023/08/01" ) < 0 | | mx . getJssj ( ) . compareTo ( "2023/08/31" ) > 0 ) {
break ;
}
// 7850 kg 密度 计算重量
String [ ] wpgg = b . getWpgg ( ) . split ( "\\*" ) ;
Double c = 0.0 ;
Double c = 0.0 ;
if ( wpgg . length = = 3 ) {
if ( wpgg . length = = 3 ) {
//立方米
//立方米
Double d = Double . parseDouble ( wpgg [ 0 ] ) * Double . parseDouble ( wpgg [ 1 ] ) * Double . parseDouble ( wpgg [ 2 ] ) / 1000000000.0 ;
Double d = Double . parseDouble ( wpgg [ 0 ] ) * Double . parseDouble ( wpgg [ 1 ] ) * Double . parseDouble ( wpgg [ 2 ] ) / 1000000000.0 ;
//密度7.85t/m3
//密度7.85t/m3
c = d * 7.85 ;
c = d * 7850 ;
}
mx . setBcshzl ( c ) ;
mx . setZl ( b . getZl ( ) ) ;
mx . setTzbh ( b . getTzbh ( ) ) ;
mx . setLqlb ( b . getLqlb ( ) ) ;
mx . setLx ( b . getTzbh ( ) . substring ( 4 , 5 ) . equals ( "X" ) ? "X" : "B" ) ;
mx . setWpgg ( b . getWpgg ( ) ) ;
mx . setWpxh ( b . getWpcz ( ) ) ;
//型材米数
mx . setLjsl ( b . getLjsl ( ) ) ;
//区域
// mx.setQy();
mx . setKw ( b . getKw ( ) ) ;
//上料日期
//上料人员
//矫正标识
//矫正设备
//矫正人员
mx . setPw ( b . getPw ( ) ) ;
//抛丸设备
//抛丸人员
//抛丸日期
mx . setHxcd ( b . getHxcd ( ) ) ;
//划线空程
//划线设备
//划线人员
//划线日期
mx . setQgcd ( b . getQgcd ( ) ) ;
//切割空程
//切割设备
//切割人员
//切割日期
mx . setPklx ( b . getPklx ( ) ) ;
// mx.setPkcd(b.getPkcd());
//坡口设备
//坡口人员
//坡口日期
mx . setQbs ( b . getQbs ( ) ) ;
//曲加工设备
//曲加工人员
//曲加工日期
// mx.setDmcd(b.getDmcd());
//打磨设备
//打磨人员
//打磨日期
mx . setDcCh2 ( dcch ) ;
mx . setDcCh1 ( mbch ) ;
mx . setGxsj ( DateUtil . now ( ) ) ;
mxList . add ( mx ) ;
}
}
l . setBcshzl ( Double . valueOf ( String . format ( "%.2f" , c ) ) ) ;
}
}
} ) ;
this . saveBatch ( mxList ) ;
baseMapper . setParent ( ) ;
/ * *
//todo 排产
* 使 用 中 日 程 信 息 , 给 明 细 赋 值
* @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 . setBcshzl ( zrcjh . getZl ( ) ) ;
m . setGjjsDz ( zrcjh . getGjjsDz ( ) ) ;
m . setGjjsXz ( zrcjh . getGjjsXz ( ) ) ;
m . setJsqTlt ( zrcjh . getJsqTlt ( ) ) ;
m . setJsqLqb ( zrcjh . getJsqLqb ( ) ) ;
m . setDhqd ( zrcjh . getDhqd ( ) ) ;
}
/ * *
Map map2 = new HashMap ( ) ;
* 根 据 选 择 的 目 标 船 只 , 查 询 数 据 , 为 本 船 只 赋 值
map2 . put ( "mxList" , mxList ) ;
* @param map
return map2 ;
* @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
* @param list
* /
* /
public void ypc ( List < DmSygdMx > list ) {
public void ypc ( List < DmSygdMx > list ) {
@ -361,8 +133,222 @@ public class DmSygdMxServiceImpl extends ServiceImpl<DmSygdMxMapper, DmSygdMx> i
this . saveBatch ( list ) ;
this . saveBatch ( list ) ;
}
}
/ * *
* 提 取 线 表 信 息
*
* @param list
* @return
* /
@Override
public List < Xbjhdto > getXBList ( List < DmSygdMx > list , String year , String begin , String end ) {
//
//线表 年月 船号 重量
//批量表重量 中日程重量
//明细 按船号 月份 分组 计算重量 排产重量
List < DmXbjh > xbjhs = xbService . list ( new QueryWrapper < DmXbjh > ( )
. eq ( "nf" , year )
. ne ( "zl" , 0 )
. between ( "yf" , begin , end ) ) ;
List < Xbjhdto > xbjhdtoList = BeanUtil . copyToList ( xbjhs , Xbjhdto . class ) ;
//3.根据月份和船号分组
Map < String , List < DmSygdMx > > monthAndCh = list . stream ( )
. filter ( mx - > Objects . nonNull ( mx . getJssj ( ) ) ) // group by 的字段不能有null值
. collect ( Collectors . groupingBy ( x - > x . getJssj ( ) . substring ( 5 , 7 ) + x . getDcCh ( ) ) ) ;
//4.
xbjhdtoList . 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 ) ) ) {
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 ) ) ;
}
}
} ) ;
Map < String , List < Xbjhdto > > yf = xbjhdtoList . stream ( )
. filter ( mx - > Objects . nonNull ( mx . getDcCh ( ) ) ) // group by 的字段不能有null值
. collect ( Collectors . groupingBy ( x - > x . getYf ( ) ) ) ;
List < Xbjhdto > list1 = new ArrayList < > ( ) ;
for ( String month : yf . keySet ( ) ) {
Double tlt_zl = 0.0 ;
Double zl = 0.0 ;
List < Xbjhdto > y = yf . get ( month ) ;
for ( Xbjhdto l : y ) {
tlt_zl = tlt_zl + l . getTlt_zl ( ) ;
zl = zl + l . getZl ( ) ;
}
list1 . addAll ( yf . get ( month ) ) ;
Xbjhdto xbjhdto = new Xbjhdto ( ) ;
xbjhdto . setDcCh ( "合计" ) ;
xbjhdto . setXczl ( Double . valueOf ( String . format ( "%.2f" , tlt_zl - zl ) ) ) ;
xbjhdto . setTlt_zl ( tlt_zl ) ;
xbjhdto . setZl ( zl ) ;
xbjhdto . setYf ( month ) ;
xbjhdto . setNf ( y . get ( 0 ) . getNf ( ) ) ;
list1 . add ( xbjhdto ) ;
}
list1 = list1 . stream ( )
. sorted ( Comparator . comparing ( Xbjhdto : : getYf ) ) . collect ( Collectors . toList ( ) ) ;
return list1 ;
}
/ * *
* 提 取 批 量 表 信 息
*
* @return
* /
@Override
public List < Pldto > getPl ( String begin , String end ) {
String beginTime_lj = ljService . getOne ( new QueryWrapper < DmSygdMxLj > ( )
. select ( "top 1 xzglxq " )
. inSql ( "parent_id " , " SELECT dm_sygd_mx.id from dm_sygd_mx WHERE dm_sygd_mx.jssj BETWEEN '" + begin + "' and '" + end + "'" )
. orderByAsc ( "xzglxq" ) ) . getXzglxq ( ) ;
String endTime_lj = ljService . getOne ( new QueryWrapper < DmSygdMxLj > ( )
. select ( "top 1 xzglxq " )
. inSql ( "parent_id " , " SELECT dm_sygd_mx.id from dm_sygd_mx WHERE dm_sygd_mx.jssj BETWEEN '" + begin + "' and '" + end + "'" )
. orderByDesc ( "xzglxq" ) ) . getXzglxq ( ) ;
List < Pldto > pldtoList = baseMapper . getPl ( beginTime_lj , endTime_lj ) ;
return pldtoList ;
}
/ * *
* 提 取 跨 位 信 息
*
* @param
* @return
* /
@Override
public List < Kwdto > getKwList ( List < DmSygdMx > list , String begin , String end ) {
List < Kwdto > kwdtoList = baseMapper . getkw ( begin , end ) ;
kwdtoList . forEach ( l - > {
l . setMxList ( list . stream ( ) . filter (
m - > m . getDcCh ( ) . equals ( l . getCh ( ) )
& & m . getDcPl ( ) . equals ( l . getPl ( ) )
& & ( StrUtil . hasEmpty ( m . getKw ( ) , l . getKw ( ) ) ? true : m . getKw ( ) . equals ( l . getKw ( ) ) )
& & m . getJssj ( ) . substring ( 0 , 7 ) . equals ( l . getYf ( ) )
) . collect ( Collectors . toList ( ) ) ) ;
// l.setMxList(
// this.list(new QueryWrapper<DmSygdMx>().eq("dc_ch", l.getCh())
// .eq("dc_pl", l.getPl())
// .eq(StrUtil.isNotEmpty(l.getKw()),"kw", l.getKw())
// .eq("substring(dm_sygd_mx.jssj, 0, 8)", l.getYf())
// .orderByAsc("jssj")));
} ) ;
return kwdtoList ;
}
public List < Kwdto > getKwList_n ( List < DmSygdMx > list ) {
//1.将明细信息,按照跨位分组
Map < String , List < DmSygdMx > > map = list . stream ( ) . collect ( Collectors . groupingBy ( x - > Optional . ofNullable ( x . getKw ( ) ) . orElse ( "" ) ) ) ;
List < Kwdto > kwdtoList = new ArrayList < > ( ) ;
//2.按照日期,统计每个跨位信息
for ( String kw : map . keySet ( ) ) {
//TODO 根据上料日期分组
Map < String , List < DmSygdMx > > map1 = map . get ( kw ) . stream ( ) . collect ( Collectors . groupingBy ( x - > Optional . ofNullable ( x . getSlrq ( ) ) . orElse ( "无法" ) ) ) ;
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);
kwdto . setMxList ( list1 ) ;
kwdtoList . add ( kwdto ) ;
}
}
// kwdtoList = kwdtoList.stream().sorted(Comparator.comparing(Kwdto::getRq, Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());
return kwdtoList ;
}
/ * *
* 提 取 图 纸 信 息
*
* @param list
* @return
* /
@Override
public List < Tzjhdto > getTZList ( List < DmSygdMx > list ) {
//图纸计划 dmTzjh 船号 批量
List < Tzjhdto > tzjhdtos = new ArrayList < > ( ) ;
Map < String , List < DmSygdMx > > map = list . stream ( ) . collect ( Collectors . groupingBy ( mx - > mx . getDcCh ( ) + mx . getDcPl ( ) ) ) ;
for ( String key : map . keySet ( ) ) {
List < DmSygdMx > list1 = map . get ( key ) . stream ( ) . sorted ( Comparator . comparing ( DmSygdMx : : getSlrq , Comparator . nullsLast ( Comparator . naturalOrder ( ) ) ) ) . collect ( Collectors . toList ( ) ) ;
DmTzjh tzjh = tzjhService . getOne ( new QueryWrapper < DmTzjh > ( )
. select ( "DC_CH,DC_PL,xfq_lqb,jsq_lqb,xfq_tlt,jsq_tlt,stuff( ( SELECT ' ' + c.DC_FD FROM dm_tzjh c WHERE c.DC_CH=dm_tzjh.DC_CH and c.DC_PL=dm_tzjh.DC_PL FOR xml path ( '' ) ), 1, 1, '' ) AS dcFd" )
. eq ( "DC_CH" , list1 . get ( 0 ) . getDcCh ( ) )
. eq ( "DC_PL" , list1 . get ( 0 ) . getDcPl ( ) )
. groupBy ( "DC_CH,DC_PL,xfq_lqb,jsq_lqb,xfq_tlt,jsq_tlt" ) ) ;
if ( ObjectUtil . isNotEmpty ( tzjh ) ) {
Tzjhdto tzjhdto = new Tzjhdto ( ) ;
BeanUtils . copyProperties ( tzjh , tzjhdto ) ;
tzjhdto . setTzxqq ( list1 . get ( 0 ) . getSlrq ( ) ) ; //todo 使用上料日期作为需求期
tzjhdto . setMxList ( list1 ) ;
tzjhdtos . add ( tzjhdto ) ;
}
}
tzjhdtos = tzjhdtos . stream ( ) . sorted ( Comparator . comparing ( Tzjhdto : : getTzxqq , Comparator . nullsLast ( Comparator . naturalOrder ( ) ) ) ) . collect ( Collectors . toList ( ) ) ;
return tzjhdtos ;
}
/ * *
* 提 取 到 货 信 息
*
* @param list
* @return
* /
@Override
public List < Dhdto > getDhList ( List < DmSygdMx > list ) {
//船号 批量 订单号
// Map<String, List<DmSygdMx>> map = list.stream()
// .filter(mx -> Objects.nonNull(mx.getDhqd()))
// .collect(Collectors.groupingBy(mx -> mx.getDcCh() + mx.getDcPl() + mx.getDhqd()));
//
List < Dhdto > list1 = new ArrayList < > ( ) ;
// for (String key : map.keySet()) {
// for (DmSygdMx mx : map.get(key)) {
// Dhdto dhdto = new Dhdto();
// List<DmSygdMx> mxs = new ArrayList<>();
// dhdto.setDcCh(mx.getDcCh());
// dhdto.setDcPl(mx.getDcPl());
// dhdto.setDhqd(mx.getDhqd());
// String[] str = mx.getWpgg().split("\\*");
// dhdto.setWphd(str[0]);
// dhdto.setWpkd(str[1]);
// dhdto.setWpcd(str[2]);
// dhdto.setRkxh(mx.getWpxh());
// dhdto.setGcxqq(mx.getSlrq());
// dhdto = baseMapper.getDhsl(dhdto);
// mxs.add(mx);
// dhdto.setMxList(mxs);
// list1.add(dhdto);
// }
// }
//以list为主
return list1 ;
}
/ * *
/ * *
* 生 成 3 月 滚 动 计 划
* 生 成 3 月 滚 动 计 划
*
* @return
* @return
* /
* /
@Transactional
@Transactional
@ -387,10 +373,6 @@ public class DmSygdMxServiceImpl extends ServiceImpl<DmSygdMxMapper, DmSygdMx> i
sygd . setDcCh ( mxList . get ( 0 ) . getDcCh ( ) ) ;
sygd . setDcCh ( mxList . get ( 0 ) . getDcCh ( ) ) ;
sygd . setDcPl ( mxList . get ( 0 ) . getDcPl ( ) ) ;
sygd . setDcPl ( mxList . get ( 0 ) . getDcPl ( ) ) ;
sygd . setDcFd ( mxList . get ( 0 ) . getDcFd ( ) ) ;
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 . setTltSl ( mxList . size ( ) ) ;
sygd . setSlSl ( mxList . size ( ) ) ;
sygd . setSlSl ( mxList . size ( ) ) ;
sygd . setPwSl ( mxList . size ( ) ) ;
sygd . setPwSl ( mxList . size ( ) ) ;
@ -548,193 +530,4 @@ public class DmSygdMxServiceImpl extends ServiceImpl<DmSygdMxMapper, DmSygdMx> i
sygdService . saveBatch ( sygdList ) ;
sygdService . saveBatch ( sygdList ) ;
return new ResultBean ( sygdList ) ;
return new ResultBean ( sygdList ) ;
}
}
/ * *
* 提 取 跨 位 信 息
* @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 ( "" ) ) ) ;
List < Kwdto > kwdtoList = new ArrayList < > ( ) ;
//2.按照日期,统计每个跨位信息
for ( String kw : map . keySet ( ) ) {
//TODO 根据上料日期分组
Map < String , List < DmSygdMx > > map1 = map . get ( kw ) . stream ( ) . collect ( Collectors . groupingBy ( x - > Optional . ofNullable ( x . getSlrq ( ) ) . orElse ( "无法" ) ) ) ;
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 ) ;
kwdto . setMxList ( list1 ) ;
kwdtoList . add ( kwdto ) ;
}
}
kwdtoList = kwdtoList . stream ( ) . sorted ( Comparator . comparing ( Kwdto : : getRq , Comparator . nullsLast ( Comparator . naturalOrder ( ) ) ) ) . collect ( Collectors . toList ( ) ) ;
return kwdtoList ;
}
/ * *
* 提 取 线 表 信 息
* @param list
* @return
* /
@Override
public List < Xbjhdto > getXBList ( List < DmSygdMx > list ) {
//
//线表 年月 船号 重量
//批量表重量 中日程重量
//明细 按船号 月份 分组 计算重量 排产重量
//1.根据上料时间 从近到远排序
list = list . stream ( )
. filter ( mx - > Objects . nonNull ( mx . getSlrq ( ) ) )
. sorted ( Comparator . comparing ( DmSygdMx : : getSlrq , Comparator . nullsLast ( Comparator . naturalOrder ( ) ) ) ) . collect ( Collectors . toList ( ) ) ;
//2.时间范围内线表计划数据
String year = list . get ( 0 ) . getSlrq ( ) . substring ( 0 , 4 ) ;
String begin = list . get ( 0 ) . getSlrq ( ) . substring ( 5 , 7 ) ;
String end = list . get ( list . size ( ) - 1 ) . getSlrq ( ) . substring ( 5 , 7 ) ;
List < DmXbjh > xbjhs = xbService . list ( new QueryWrapper < DmXbjh > ( )
. eq ( "nf" , year )
. between ( "yf" , begin , end ) ) ;
List < Xbjhdto > xbjhdtoList = BeanUtil . copyToList ( xbjhs , Xbjhdto . class ) ;
//3.根据月份和船号分组
Map < String , List < DmSygdMx > > monthAndCh = list . stream ( )
. filter ( mx - > Objects . nonNull ( mx . getSlrq ( ) ) ) // group by 的字段不能有null值
. collect ( Collectors . groupingBy ( x - > x . getSlrq ( ) . substring ( 5 , 7 ) + x . getDcCh ( ) ) ) ;
//4.
xbjhdtoList . 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 ) . getSlrq ( ) . substring ( 5 , 7 ) ) ) {
Double shzl = 0.0 ;
for ( DmSygdMx mx : monthAndCh . get ( ch ) ) {
shzl = shzl + mx . getBcshzl ( ) ;
}
dmXbjh . setTlt_zl ( shzl ) ;
dmXbjh . setMxList ( monthAndCh . get ( ch ) ) ;
}
}
} ) ;
xbjhdtoList = xbjhdtoList . stream ( )
. filter ( xb - > Objects . nonNull ( xb . getTlt_zl ( ) ) )
. sorted ( Comparator . comparing ( Xbjhdto : : getYf ) ) . collect ( Collectors . toList ( ) ) ;
return xbjhdtoList ;
}
/ * *
* 提 取 批 量 表 信 息
* @param list
* @return
* /
@Override
public List < Pldto > getPl ( List < DmSygdMx > list ) {
//根据船号 批量 对应
//钢加大组结束期 钢加小组结束期 钢加开始
//list 按船号 批量 分段 大小组 分组,排序
List < Pldto > list1 = new ArrayList ( ) ;
Map < String , List < DmSygdMx > > map = list . stream ( ) . collect ( Collectors . groupingBy ( mx - > mx . getDcCh ( ) + mx . getDcPl ( ) + mx . getDcFd ( ) ) ) ;
for ( String key : map . keySet ( ) ) {
DmSygdMx mx = map . get ( key ) . get ( 0 ) ; //TODO 测试数据
Pldto pl = new Pldto ( ) ;
//小分段
DmCzplpNew czplp = plService . getOne ( new QueryWrapper < DmCzplpNew > ( )
. select ( "DC_CH,DC_PL,stuff( ( SELECT ' ' + c.DC_FD FROM dm_czplp_new c WHERE c.DC_CH=dm_czplp_new.DC_CH and c.DC_PL=dm_czplp_new.DC_PL FOR xml path ( '' ) ), 1, 1, '' ) AS dcFd,dzjsq,xzjsq" )
. eq ( "DC_CH" , mx . getDcCh ( ) )
. eq ( "DC_PL" , mx . getDcPl ( ) )
. groupBy ( "DC_CH,DC_PL,dzjsq,xzjsq" )
) ;
if ( ObjectUtil . isNotEmpty ( czplp ) ) {
BeanUtils . copyProperties ( czplp , pl ) ;
pl . setGjks_pc ( mx . getGjks ( ) ) ; //TODO 中日程数据
pl . setJsq_dz_pc ( mx . getGjjsDz ( ) ) ; //TODO 中日程数据
pl . setJsq_xz_pc ( mx . getGjjsXz ( ) ) ; //TODO 中日程数据
pl . setMxList ( map . get ( key ) ) ;
list1 . add ( pl ) ;
}
//大组 结束期
//小组 结束期
}
list1 = list1 . stream ( ) . sorted ( Comparator . comparing ( x - > x . getDcCh ( ) + x . getDcPl ( ) + x . getJsq_dz_pc ( ) + x . getJsq_xz_pc ( ) , Comparator . nullsLast ( Comparator . naturalOrder ( ) ) ) ) . collect ( Collectors . toList ( ) ) ;
return list1 ;
}
/ * *
* 提 取 图 纸 信 息
* @param list
* @return
* /
@Override
public List < Tzjhdto > getTZList ( List < DmSygdMx > list ) {
//图纸计划 dmTzjh 船号 批量
List < Tzjhdto > tzjhdtos = new ArrayList < > ( ) ;
Map < String , List < DmSygdMx > > map = list . stream ( ) . collect ( Collectors . groupingBy ( mx - > mx . getDcCh ( ) + mx . getDcPl ( ) ) ) ;
for ( String key : map . keySet ( ) ) {
List < DmSygdMx > list1 = map . get ( key ) . stream ( ) . sorted ( Comparator . comparing ( DmSygdMx : : getSlrq , Comparator . nullsLast ( Comparator . naturalOrder ( ) ) ) ) . collect ( Collectors . toList ( ) ) ;
DmTzjh tzjh = tzjhService . getOne ( new QueryWrapper < DmTzjh > ( )
. select ( "DC_CH,DC_PL,xfq_lqb,jsq_lqb,xfq_tlt,jsq_tlt,stuff( ( SELECT ' ' + c.DC_FD FROM dm_tzjh c WHERE c.DC_CH=dm_tzjh.DC_CH and c.DC_PL=dm_tzjh.DC_PL FOR xml path ( '' ) ), 1, 1, '' ) AS dcFd" )
. eq ( "DC_CH" , list1 . get ( 0 ) . getDcCh ( ) )
. eq ( "DC_PL" , list1 . get ( 0 ) . getDcPl ( ) )
. groupBy ( "DC_CH,DC_PL,xfq_lqb,jsq_lqb,xfq_tlt,jsq_tlt" ) ) ;
if ( ObjectUtil . isNotEmpty ( tzjh ) ) {
Tzjhdto tzjhdto = new Tzjhdto ( ) ;
BeanUtils . copyProperties ( tzjh , tzjhdto ) ;
tzjhdto . setTzxqq ( list1 . get ( 0 ) . getSlrq ( ) ) ; //todo 使用上料日期作为需求期
tzjhdto . setMxList ( list1 ) ;
tzjhdtos . add ( tzjhdto ) ;
}
}
tzjhdtos = tzjhdtos . stream ( ) . sorted ( Comparator . comparing ( Tzjhdto : : getTzxqq , Comparator . nullsLast ( Comparator . naturalOrder ( ) ) ) ) . collect ( Collectors . toList ( ) ) ;
return tzjhdtos ;
}
/ * *
* 提 取 到 货 信 息
* @param list
* @return
* /
@Override
public List < Dhdto > getDhList ( List < DmSygdMx > list ) {
//船号 批量 订单号
Map < String , List < DmSygdMx > > map = list . stream ( )
. filter ( mx - > Objects . nonNull ( mx . getDhqd ( ) ) )
. collect ( Collectors . groupingBy ( mx - > mx . getDcCh ( ) + mx . getDcPl ( ) + mx . getDhqd ( ) ) ) ;
List < Dhdto > list1 = new ArrayList < > ( ) ;
for ( String key : map . keySet ( ) ) {
for ( DmSygdMx mx : map . get ( key ) ) {
Dhdto dhdto = new Dhdto ( ) ;
List < DmSygdMx > mxs = new ArrayList < > ( ) ;
dhdto . setDcCh ( mx . getDcCh ( ) ) ;
dhdto . setDcPl ( mx . getDcPl ( ) ) ;
dhdto . setDhqd ( mx . getDhqd ( ) ) ;
String [ ] str = mx . getWpgg ( ) . split ( "\\*" ) ;
dhdto . setWphd ( str [ 0 ] ) ;
dhdto . setWpkd ( str [ 1 ] ) ;
dhdto . setWpcd ( str [ 2 ] ) ;
dhdto . setRkxh ( mx . getWpxh ( ) ) ;
dhdto . setGcxqq ( mx . getSlrq ( ) ) ;
dhdto = baseMapper . getDhsl ( dhdto ) ;
mxs . add ( mx ) ;
dhdto . setMxList ( mxs ) ;
list1 . add ( dhdto ) ;
}
}
//以list为主
return list1 ;
}
}
}