@ -4,19 +4,36 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesShippingKanbanCfgService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesShippingKanbanCfgModel ;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesShippingKanbanViewModel ;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords ;
import cn.estsh.i3plus.mes.pcn.util.DateUtil ;
import cn.estsh.i3plus.platform.common.convert.ConvertBean ;
import cn.estsh.i3plus.platform.common.tool.TimeTool ;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean ;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil ;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack ;
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup ;
import cn.estsh.i3plus.pojo.mes.bean.seres.MesCimSeresJisVinOverPoint ;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingListDetail ;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingKanbanCfg ;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingKanbanCfgDetail ;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement ;
import cn.estsh.i3plus.pojo.mes.repository.MesPartShippingGroupRepository ;
import cn.estsh.i3plus.pojo.mes.repository.MesShippingKanbanCfgDetailRepository ;
import cn.estsh.i3plus.pojo.mes.repository.MesShippingKanbanCfgRepository ;
import cn.estsh.i3plus.pojo.mes.repository.seres.IMesCimSeresJisVinOverPointRepository ;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil ;
import cn.hutool.core.date.DateTime ;
import cn.hutool.core.date.LocalDateTimeUtil ;
import cn.hutool.core.util.NumberUtil ;
import cn.hutool.core.util.StrUtil ;
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.stereotype.Service ;
import org.springframework.util.CollectionUtils ;
import org.springframework.util.StringUtils ;
import javax.persistence.EntityManager ;
import javax.persistence.Query ;
import java.math.BigDecimal ;
import java.math.RoundingMode ;
import java.util.* ;
import java.util.stream.Collectors ;
@ -26,25 +43,49 @@ public class MesShippingKanbanCfgServiceImpl implements IMesShippingKanbanCfgSer
private MesShippingKanbanCfgRepository shippingKanbanCfgRDao ;
@Autowired
private MesShippingKanbanCfgDetailRepository shippingKanbanCfgDetailRDao ;
@Autowired
private MesPartShippingGroupRepository partShippingGroupRDao ;
@Autowired
private IMesCimSeresJisVinOverPointRepository vinOverPointRDao ;
@Autowired
private EntityManager entityManager ;
@Override
public MesShippingKanbanCfgModel queryShippingKanbanCfg ( String organizeCode ) {
MesShippingKanbanCfgModel model = new MesShippingKanbanCfgModel ( ) ;
DdlPackBean packBean = DdlPackBean . getDdlPackBean ( organizeCode ) ;
MesShippingKanbanCfg kanbanCfg = shippingKanbanCfgRDao . getByProperty ( packBean ) ;
model . setConfig ( kanbanCfg ) ;
if ( kanbanCfg ! = null ) {
DdlPackBean detailPackBean = DdlPackBean . getDdlPackBean ( organizeCode ) ;
DdlPreparedPack . getNumEqualPack ( kanbanCfg . getId ( ) , "configID" , packBean ) ;
List < MesShippingKanbanCfgDetail > details = shippingKanbanCfgDetailRDao . findByHqlWhere ( detailPackBean ) ;
model . setDetails ( details ) ;
} else {
kanbanCfg = new MesShippingKanbanCfg ( ) ;
}
model . setConfig ( kanbanCfg ) ;
if ( model . getDetails ( ) = = null ) {
model . setDetails ( new ArrayList < > ( ) ) ;
}
Map < String , MesShippingKanbanCfgDetail > cfgDetailMap = model . getDetails ( ) . stream ( ) . collect ( Collectors . toMap ( MesShippingKanbanCfgDetail : : getDetailCode , v - > v ) ) ;
for ( MesExtEnumUtil . SHIPPING_KANBAN_DETAIL_INDEX index : MesExtEnumUtil . SHIPPING_KANBAN_DETAIL_INDEX . values ( ) ) {
if ( cfgDetailMap . containsKey ( index . getValue ( ) ) ) {
continue ;
}
MesShippingKanbanCfgDetail detail = new MesShippingKanbanCfgDetail ( ) ;
detail . setConfigID ( kanbanCfg . getId ( ) ) ;
detail . setDetailCode ( index . getValue ( ) ) ;
detail . setDetailName ( index . getDescription ( ) ) ;
detail . setIsShow ( CommonEnumUtil . TRUE_OR_FALSE . TRUE . getValue ( ) ) ;
model . getDetails ( ) . add ( detail ) ;
}
return model ;
}
@Override
public void saveShippingKanbanCfg ( String organizeCode , MesShippingKanbanCfgModel request ) {
public void saveShippingKanbanCfg ( MesShippingKanbanCfgModel request , String organizeCode , String username ) {
if ( request . getConfig ( ) = = null ) {
return ;
}
@ -53,6 +94,8 @@ public class MesShippingKanbanCfgServiceImpl implements IMesShippingKanbanCfgSer
DdlPackBean packBean = DdlPackBean . getDdlPackBean ( organizeCode ) ;
MesShippingKanbanCfg oldCfg = shippingKanbanCfgRDao . getByProperty ( packBean ) ;
if ( oldCfg = = null ) {
cfg . setOrganizeCode ( organizeCode ) ;
ConvertBean . serviceModelInitialize ( cfg , username ) ;
oldCfg = shippingKanbanCfgRDao . insert ( cfg ) ;
} else {
oldCfg . setShippingGroupCode ( cfg . getShippingGroupCode ( ) ) ;
@ -65,6 +108,7 @@ public class MesShippingKanbanCfgServiceImpl implements IMesShippingKanbanCfgSer
oldCfg . setCustStartShift ( cfg . getCustStartShift ( ) ) ;
oldCfg . setInterStartShift ( cfg . getInterStartShift ( ) ) ;
oldCfg . setCustJph ( cfg . getCustJph ( ) ) ;
ConvertBean . serviceModelUpdate ( oldCfg , username ) ;
shippingKanbanCfgRDao . update ( oldCfg ) ;
shippingKanbanCfgDetailRDao . deleteByProperties ( new String [ ] { "organizeCode" , "configID" } ,
@ -73,7 +117,10 @@ public class MesShippingKanbanCfgServiceImpl implements IMesShippingKanbanCfgSer
if ( ! CollectionUtils . isEmpty ( request . getDetails ( ) ) ) {
for ( MesShippingKanbanCfgDetail detail : request . getDetails ( ) ) {
detail . setId ( null ) ;
detail . setConfigID ( oldCfg . getId ( ) ) ;
detail . setOrganizeCode ( oldCfg . getOrganizeCode ( ) ) ;
ConvertBean . serviceModelInitialize ( detail , username ) ;
shippingKanbanCfgDetailRDao . insert ( detail ) ;
}
}
@ -84,13 +131,17 @@ public class MesShippingKanbanCfgServiceImpl implements IMesShippingKanbanCfgSer
List < MesShippingKanbanViewModel > viewModels = new ArrayList < > ( ) ;
Map < String , MesShippingKanbanCfgDetail > cfgDetailMap = null ;
MesShippingKanbanCfgModel cfgModel = queryShippingKanbanCfg ( organizeCode ) ;
if ( cfgModel ! = null & & ! CollectionUtils . isEmpty ( cfgModel . getDetails ( ) ) ) {
MesShippingKanbanCfg cfg = cfgModel ! = null ? cfgModel . getConfig ( ) : null ;
if ( cfg = = null ) {
return viewModels ;
}
if ( ! CollectionUtils . isEmpty ( cfgModel . getDetails ( ) ) ) {
cfgDetailMap = cfgModel . getDetails ( ) . stream ( ) . collect ( Collectors . toMap ( MesShippingKanbanCfgDetail : : getDetailCode , v - > v ) ) ;
}
for ( MesExtEnumUtil . SHIPPING_KANBAN_DETAIL_INDEX index : MesExtEnumUtil . SHIPPING_KANBAN_DETAIL_INDEX . values ( ) ) {
MesShippingKanbanCfgDetail cfgDetail = cfgDetailMap ! = null ? cfgDetailMap . get ( index . getValue ( ) ) : null ;
if ( cfgDetail = = null | | cfgDetail . getIsShow ( ) = = null | | ! cfgDetail . getIsShow ( ) | | cfgDetail . getOrderNumber ( ) = = null ) {
if ( cfgDetail = = null | | cfgDetail . getIsShow ( ) = = null | | cfgDetail . getIsShow ( ) ! = CommonEnumUtil . TRUE_OR_FALSE . TRUE . getValue ( ) | | cfgDetail . getOrderNumber ( ) = = null ) {
continue ;
}
@ -111,54 +162,837 @@ public class MesShippingKanbanCfgServiceImpl implements IMesShippingKanbanCfgSer
List < String > values = null ;
switch ( index ) {
case CLIENT_STOCK_QTY :
values = getClientStockQty ( cfg Detail) ;
values = getClientStockQty ( cfg , cfg Detail) ;
break ;
case WAIT_SHIPPING_QTY :
values = getWaitShippingQty ( cfg Detail) ;
values = getWaitShippingQty ( cfg , cfg Detail) ;
break ;
case CP_WAIT_SHIPPING_QTY :
values = getCPWaitShippingQty ( cfg , cfgDetail ) ;
break ;
case WAIT_PRODUCT_QTY :
values = getWaitProductQty ( cfg , cfgDetail ) ;
break ;
case LAST_SHIPPING_TIME :
values = getLastShippingTime ( cfg , cfgDetail ) ;
break ;
case CP_LAST_SHIPPING_TIME :
values = getCPLastShippingTime ( cfg , cfgDetail ) ;
break ;
case NEXT_SHIPPING_TIME :
values = getNextShippingTime ( cfg , cfgDetail ) ;
break ;
case TREE_STOP_WARNING :
values = getTreeStopWarning ( cfg , cfgDetail ) ;
break ;
case SHIPPING_VIN :
values = getShippingVin ( cfg , cfgDetail ) ;
break ;
case CP_SHIPPING_VIN :
values = getCPShippingVin ( cfg , cfgDetail ) ;
break ;
case TODAY_ONLINE :
values = getTodayOnline ( cfg , cfgDetail ) ;
break ;
case TODAY_SHIPPING :
values = getTodayShipping ( cfg , cfgDetail ) ;
break ;
case TODAY_CAR :
values = getTodayCar ( cfg , cfgDetail ) ;
break ;
case CLIENT_JPH :
values = getClientJPH ( cfg , cfgDetail ) ;
break ;
case PRODUCT_JPH :
values = getProductJPH ( cfg , cfgDetail ) ;
break ;
}
if ( values = = null ) {
values = new ArrayList < > ( ) ;
}
model . setValues ( values ) ;
model . setColor ( getColor ( cfgDetail , values ) ) ;
viewModels . add ( model ) ;
}
viewModels . sort ( Comparator . comparing ( MesShippingKanbanViewModel : : getOrderNumber ) ) ;
return viewModels ;
}
private List < String > getClientStockQty ( MesShippingKanbanCfgDetail cfgDetail ) {
private String getColor ( MesShippingKanbanCfgDetail cfgDetail , List < String > values ) {
if ( CollectionUtils . isEmpty ( values ) ) {
return cfgDetail . getDefaultColor ( ) ;
}
if ( ! StringUtils . isEmpty ( cfgDetail . getRangValueLess ( ) ) ) {
String rangValue = cfgDetail . getRangValueLess ( ) ;
for ( String value : values ) {
if ( StringUtils . isEmpty ( value ) ) {
continue ;
}
if ( NumberUtil . isNumber ( value ) ) {
if ( Integer . parseInt ( value ) < Integer . parseInt ( rangValue ) ) {
return cfgDetail . getRangColorLess ( ) ;
}
} else {
if ( value . compareTo ( rangValue ) < 0 ) {
return cfgDetail . getRangColorLess ( ) ;
}
}
}
}
if ( ! StringUtils . isEmpty ( cfgDetail . getRangValueMore ( ) ) ) {
String rangValue = cfgDetail . getRangValueMore ( ) ;
for ( String value : values ) {
if ( StringUtils . isEmpty ( value ) ) {
continue ;
}
if ( NumberUtil . isNumber ( value ) ) {
if ( Integer . parseInt ( value ) > = Integer . parseInt ( rangValue ) ) {
return cfgDetail . getRangColorMore ( ) ;
}
} else {
if ( value . compareTo ( rangValue ) > = 0 ) {
return cfgDetail . getRangColorMore ( ) ;
}
}
}
}
return cfgDetail . getDefaultColor ( ) ;
}
private List < MesPartShippingGroup > getShippingGroups ( MesShippingKanbanCfg cfg ) {
List < MesPartShippingGroup > shippingGroups = new ArrayList < > ( ) ;
if ( StringUtils . isEmpty ( cfg . getShippingGroupCode ( ) ) ) {
return shippingGroups ;
}
List < String > strShippingGroupList = Arrays . asList ( cfg . getShippingGroupCode ( ) . split ( "," ) ) ;
if ( CollectionUtils . isEmpty ( strShippingGroupList ) ) {
return shippingGroups ;
}
DdlPackBean packBean = DdlPackBean . getDdlPackBean ( cfg . getOrganizeCode ( ) ) ;
DdlPreparedPack . getInPackList ( strShippingGroupList , "shippingGroupCode" , packBean ) ;
return partShippingGroupRDao . findByHqlWhere ( packBean ) ;
}
private String getShippingVin ( String organizeCode , List < String > shippingGroupCodes , List < Integer > status ) {
StringBuilder hql = new StringBuilder ( ) ;
hql . append ( "select sd.vin" ) ;
hql . append ( " from MesShippingOrderManagement s inner join MesShippingOrderManagementDetail sd on s.id = sd.pid and sd.organizeCode = :organizeCode and sd.isDeleted=:isDeleted and sd.isValid=:isValid " ) ;
hql . append ( " and s.status in (:status) " ) ;
hql . append ( " and s.shippingGroupCode in (:shippingGroupCode) " ) ;
hql . append ( " ORDER BY sd.id desc" ) ;
return entityManager . createQuery ( hql . toString ( ) , String . class )
. setParameter ( "organizeCode" , organizeCode )
. setParameter ( "isValid" , CommonEnumUtil . VALID )
. setParameter ( "isDeleted" , CommonEnumUtil . FALSE )
. setParameter ( "status" , status )
. setParameter ( "shippingGroupCode" , shippingGroupCodes )
. setMaxResults ( 1 )
. getSingleResult ( ) ;
}
/ * *
* 最 新 下 线 的 排 序 发 运 单 客 户 流 水 号
* @param organizeCode
* @param shippingGroupCodes
* @return
* /
private String getMaxOffNumber ( String organizeCode , List < String > shippingGroupCodes ) {
String vinCode = getShippingVin ( organizeCode , shippingGroupCodes , Arrays . asList ( MesExtEnumUtil . SHIPPING_ORDER_STATUS . SHIPPED . getValue ( ) , MesExtEnumUtil . SHIPPING_ORDER_STATUS . LOADING . getValue ( ) ) ) ;
StringBuilder offNumberHql = new StringBuilder ( ) ;
offNumberHql . append ( "select max(serialNumber) from " + MesCimSeresJisVinOverPoint . class . getName ( ) ) ;
offNumberHql . append ( " where organizeCode = :organizeCode and isDeleted = :isDeleted and isValid = :isValid " ) ;
offNumberHql . append ( " and vin = :vin " ) ;
return entityManager . createQuery ( offNumberHql . toString ( ) , String . class )
. setParameter ( "organizeCode" , organizeCode )
. setParameter ( "isValid" , CommonEnumUtil . VALID )
. setParameter ( "isDeleted" , CommonEnumUtil . FALSE )
. setParameter ( "vin" , vinCode )
. getSingleResult ( ) ;
}
private List < String > getClientStockQty ( MesShippingKanbanCfg cfg , MesShippingKanbanCfgDetail cfgDetail ) {
List < String > values = new ArrayList < > ( ) ;
List < String > strShippingGroupList = Arrays . asList ( cfg . getShippingGroupCode ( ) . split ( "," ) ) ;
if ( CollectionUtils . isEmpty ( strShippingGroupList ) ) {
return values ;
}
// 获取赛力斯上线的最新流水号
String onNumber = "" ;
if ( ! StringUtils . isEmpty ( cfg . getOnlinePoint ( ) ) ) {
StringBuilder onNumberHql = new StringBuilder ( ) ;
onNumberHql . append ( "select max(serialNumber) from " + MesCimSeresJisVinOverPoint . class . getName ( ) ) ;
onNumberHql . append ( " where organizeCode = :organizeCode and isDeleted = :isDeleted and isValid = :isValid " ) ;
onNumberHql . append ( " and overPoint = :overPoint " ) ;
onNumber = entityManager . createQuery ( onNumberHql . toString ( ) , String . class )
. setParameter ( "organizeCode" , cfg . getOrganizeCode ( ) )
. setParameter ( "isValid" , CommonEnumUtil . VALID )
. setParameter ( "isDeleted" , CommonEnumUtil . FALSE )
. setParameter ( "overPoint" , cfg . getOnlinePoint ( ) )
. getSingleResult ( ) ;
}
if ( StringUtils . isEmpty ( onNumber ) ) {
onNumber = "0" ;
}
String offNumber = getMaxOffNumber ( cfg . getOrganizeCode ( ) , strShippingGroupList ) ;
if ( StringUtils . isEmpty ( offNumber ) ) {
offNumber = "0" ;
}
int adjustValue = cfg . getAdjustValue ( ) ! = null ? cfg . getAdjustValue ( ) : 0 ;
int result = Integer . parseInt ( offNumber ) - Integer . parseInt ( onNumber ) + adjustValue ;
values . add ( String . valueOf ( result ) ) ;
return values ;
}
private List < String > getWaitShippingQty ( MesShippingKanbanCfg cfg , MesShippingKanbanCfgDetail cfgDetail ) {
List < String > values = new ArrayList < > ( ) ;
List < String > strShippingGroupList = Arrays . asList ( cfg . getShippingGroupCode ( ) . split ( "," ) ) ;
if ( CollectionUtils . isEmpty ( strShippingGroupList ) ) {
return values ;
}
if ( strShippingGroupList . stream ( ) . anyMatch ( s - > s . contains ( "CK" ) ) ) {
// 获获取精排信息点的流水号
String refinedPointNumber = "" ;
if ( ! StringUtils . isEmpty ( cfg . getRefinedPoint ( ) ) ) {
StringBuilder refinedPointHql = new StringBuilder ( ) ;
refinedPointHql . append ( "select max(serialNumber) from " + MesCimSeresJisVinOverPoint . class . getName ( ) ) ;
refinedPointHql . append ( " where organizeCode = :organizeCode and isDeleted = :isDeleted and isValid = :isValid " ) ;
refinedPointHql . append ( " and overPoint = :overPoint " ) ;
refinedPointNumber = entityManager . createQuery ( refinedPointHql . toString ( ) , String . class )
. setParameter ( "organizeCode" , cfg . getOrganizeCode ( ) )
. setParameter ( "isValid" , CommonEnumUtil . VALID )
. setParameter ( "isDeleted" , CommonEnumUtil . FALSE )
. setParameter ( "overPoint" , cfg . getRefinedPoint ( ) )
. getSingleResult ( ) ;
}
if ( StringUtils . isEmpty ( refinedPointNumber ) ) {
refinedPointNumber = "0" ;
}
String offNumber = getMaxOffNumber ( cfg . getOrganizeCode ( ) , strShippingGroupList ) ;
if ( StringUtils . isEmpty ( offNumber ) ) {
offNumber = "0" ;
}
int result = Integer . parseInt ( refinedPointNumber ) - Integer . parseInt ( offNumber ) ;
values . add ( String . valueOf ( result ) ) ;
} else {
StringBuilder hql = new StringBuilder ( ) ;
hql . append ( "select new Map(s.shippingGroupCode as shippingGroupCode, COUNT(sd.id) as COUNT)" ) ;
hql . append ( " from MesShippingOrderManagement s inner join MesShippingOrderManagementDetail sd on s.id = sd.pid and sd.organizeCode = :organizeCode and sd.isDeleted=:isDeleted and sd.isValid=:isValid " ) ;
hql . append ( " and s.status = :status " ) ;
hql . append ( " and s.shippingGroupCode in (:shippingGroupCode) " ) ;
hql . append ( " group by s.shippingGroupCode" ) ;
List < Map > ddd = entityManager . createQuery ( hql . toString ( ) )
. setParameter ( "organizeCode" , cfg . getOrganizeCode ( ) )
. setParameter ( "isValid" , CommonEnumUtil . VALID )
. setParameter ( "isDeleted" , CommonEnumUtil . FALSE )
. setParameter ( "status" , MesExtEnumUtil . SHIPPING_ORDER_STATUS . SHIPPED . getValue ( ) )
. setParameter ( "shippingGroupCode" , strShippingGroupList )
. getResultList ( ) ;
Map < String , String > shippingGroupCount = new HashMap < > ( ) ;
if ( ! CollectionUtils . isEmpty ( ddd ) ) {
for ( Map dd : ddd ) {
shippingGroupCount . put ( dd . get ( "shippingGroupCode" ) . toString ( ) , dd . get ( "COUNT" ) . toString ( ) ) ;
}
}
for ( String shippingGroupCode : strShippingGroupList ) {
values . add ( shippingGroupCount . getOrDefault ( shippingGroupCode , "0" ) ) ;
}
}
return values ;
}
private List < String > getCPWaitShippingQty ( MesShippingKanbanCfg cfg , MesShippingKanbanCfgDetail cfgDetail ) {
List < String > values = new ArrayList < > ( ) ;
List < String > strShippingGroupList = Arrays . asList ( cfg . getShippingGroupCode ( ) . split ( "," ) ) ;
if ( CollectionUtils . isEmpty ( strShippingGroupList ) ) {
return values ;
}
if ( strShippingGroupList . stream ( ) . anyMatch ( s - > s . contains ( "CK" ) ) ) {
// 获获取精排信息点的流水号
String refinedPointNumber = "" ;
if ( ! StringUtils . isEmpty ( cfg . getRefinedPoint ( ) ) ) {
StringBuilder refinedPointHql = new StringBuilder ( ) ;
refinedPointHql . append ( "select max(serialNumber) from " + MesCimSeresJisVinOverPoint . class . getName ( ) ) ;
refinedPointHql . append ( " where organizeCode = :organizeCode and isDeleted = :isDeleted and isValid = :isValid " ) ;
refinedPointHql . append ( " and overPoint = :overPoint " ) ;
refinedPointNumber = entityManager . createQuery ( refinedPointHql . toString ( ) , String . class )
. setParameter ( "organizeCode" , cfg . getOrganizeCode ( ) )
. setParameter ( "isValid" , CommonEnumUtil . VALID )
. setParameter ( "isDeleted" , CommonEnumUtil . FALSE )
. setParameter ( "overPoint" , cfg . getRefinedPoint ( ) )
. getSingleResult ( ) ;
}
if ( StringUtils . isEmpty ( refinedPointNumber ) ) {
refinedPointNumber = "0" ;
}
strShippingGroupList = strShippingGroupList . stream ( ) . filter ( s - > s . contains ( "CK" ) ) . collect ( Collectors . toList ( ) ) ;
String offNumber = getMaxOffNumber ( cfg . getOrganizeCode ( ) , strShippingGroupList ) ;
if ( StringUtils . isEmpty ( offNumber ) ) {
offNumber = "0" ;
}
int result = Integer . parseInt ( refinedPointNumber ) - Integer . parseInt ( offNumber ) ;
values . add ( String . valueOf ( result ) ) ;
} else {
values . add ( "0" ) ;
}
return values ;
}
/ * *
* 待 生 产 / 装 箱 数 量
* @param cfg
* @param cfgDetail
* @return
* /
private List < String > getWaitProductQty ( MesShippingKanbanCfg cfg , MesShippingKanbanCfgDetail cfgDetail ) {
List < String > values = new ArrayList < > ( ) ;
List < String > strShippingGroupList = Arrays . asList ( cfg . getShippingGroupCode ( ) . split ( "," ) ) ;
if ( CollectionUtils . isEmpty ( strShippingGroupList ) ) {
return values ;
}
if ( strShippingGroupList . stream ( ) . anyMatch ( s - > s . contains ( "CK" ) ) ) {
values . add ( "0" ) ;
} else {
// 获获取精排信息点的流水号
String refinedPointNumber = "" ;
if ( ! StringUtils . isEmpty ( cfg . getRefinedPoint ( ) ) ) {
StringBuilder refinedPointHql = new StringBuilder ( ) ;
refinedPointHql . append ( "select max(serialNumber) from " + MesCimSeresJisVinOverPoint . class . getName ( ) ) ;
refinedPointHql . append ( " where organizeCode = :organizeCode and isDeleted = :isDeleted and isValid = :isValid " ) ;
refinedPointHql . append ( " and overPoint = :overPoint " ) ;
refinedPointNumber = entityManager . createQuery ( refinedPointHql . toString ( ) , String . class )
. setParameter ( "organizeCode" , cfg . getOrganizeCode ( ) )
. setParameter ( "isValid" , CommonEnumUtil . VALID )
. setParameter ( "isDeleted" , CommonEnumUtil . FALSE )
. setParameter ( "overPoint" , cfg . getRefinedPoint ( ) )
. getSingleResult ( ) ;
}
if ( StringUtils . isEmpty ( refinedPointNumber ) ) {
refinedPointNumber = "0" ;
}
StringBuilder hql = new StringBuilder ( ) ;
hql . append ( "select new Map(s.shippingGroupCode as shippingGroupCode, max(sd.custInfoSeq) as custInfoSeq)" ) ;
hql . append ( " from MesShippingOrderManagement s inner join MesShippingOrderManagementDetail sd on s.id = sd.pid and sd.organizeCode = :organizeCode and sd.isDeleted=:isDeleted and sd.isValid=:isValid " ) ;
hql . append ( " and s.status in (:status) " ) ;
hql . append ( " and s.shippingGroupCode in (:shippingGroupCode) " ) ;
hql . append ( " group by s.shippingGroupCode" ) ;
List < Map > ddd = entityManager . createQuery ( hql . toString ( ) )
. setParameter ( "organizeCode" , cfg . getOrganizeCode ( ) )
. setParameter ( "isValid" , CommonEnumUtil . VALID )
. setParameter ( "isDeleted" , CommonEnumUtil . FALSE )
. setParameter ( "status" , Arrays . asList ( MesExtEnumUtil . SHIPPING_ORDER_STATUS . SHIPPED . getValue ( ) , MesExtEnumUtil . SHIPPING_ORDER_STATUS . LOADING . getValue ( ) ) )
. setParameter ( "shippingGroupCode" , strShippingGroupList )
. getResultList ( ) ;
Map < String , String > shippingGroupCount = new HashMap < > ( ) ;
if ( ! CollectionUtils . isEmpty ( ddd ) ) {
for ( Map dd : ddd ) {
Object custInfoSeq = dd . get ( "custInfoSeq" ) ;
if ( custInfoSeq ! = null ) {
shippingGroupCount . put ( dd . get ( "shippingGroupCode" ) . toString ( ) , custInfoSeq . toString ( ) ) ;
}
}
}
for ( String shippingGroupCode : strShippingGroupList ) {
if ( shippingGroupCount . containsKey ( shippingGroupCode ) ) {
values . add ( Integer . parseInt ( refinedPointNumber ) - Integer . parseInt ( shippingGroupCount . get ( shippingGroupCode ) ) + "" ) ;
} else {
values . add ( "0" ) ;
}
}
}
return values ;
}
/ * *
* 距 离 上 一 次 发 运 时 间 ( Min )
* @param cfg
* @param cfgDetail
* @return
* /
private List < String > getLastShippingTime ( MesShippingKanbanCfg cfg , MesShippingKanbanCfgDetail cfgDetail ) {
List < String > values = new ArrayList < > ( ) ;
List < String > strShippingGroupList = Arrays . asList ( cfg . getShippingGroupCode ( ) . split ( "," ) ) ;
if ( CollectionUtils . isEmpty ( strShippingGroupList ) ) {
return values ;
}
if ( strShippingGroupList . stream ( ) . anyMatch ( s - > s . contains ( "CK" ) ) ) {
StringBuilder hql = new StringBuilder ( ) ;
hql . append ( "select max(s.endScanTime)" ) ;
hql . append ( " from MesShippingOrderManagement s inner join MesShippingOrderManagementDetail sd on s.id = sd.pid and sd.organizeCode = :organizeCode and sd.isDeleted=:isDeleted and sd.isValid=:isValid " ) ;
hql . append ( " and s.status in (:status) " ) ;
hql . append ( " and s.shippingGroupCode in (:shippingGroupCode) " ) ;
String strScanEndTime = entityManager . createQuery ( hql . toString ( ) , String . class )
. setParameter ( "organizeCode" , cfg . getOrganizeCode ( ) )
. setParameter ( "isValid" , CommonEnumUtil . VALID )
. setParameter ( "isDeleted" , CommonEnumUtil . FALSE )
. setParameter ( "status" , Arrays . asList ( MesExtEnumUtil . SHIPPING_ORDER_STATUS . SHIPPED . getValue ( ) , MesExtEnumUtil . SHIPPING_ORDER_STATUS . LOADING . getValue ( ) ) )
. setParameter ( "shippingGroupCode" , strShippingGroupList )
. getSingleResult ( ) ;
if ( ! StringUtils . isEmpty ( strScanEndTime ) ) {
Date scanEndTime = DateUtil . parse ( strScanEndTime ) ;
values . add ( DateUtil . formatDate ( DateUtil . SHORT_FORMAT_HOUR , scanEndTime ) ) ;
}
} else {
StringBuilder hql = new StringBuilder ( ) ;
hql . append ( "select new Map(s.shippingGroupCode as shippingGroupCode, max(l.endScanTime) as endScanTime)" ) ;
hql . append ( " from MesLoadingList l inner join MesLoadingListDetail ld on l.id = ld.pid inner join MesShippingOrderManagement s on s.id = ld.shippingId and l.organizeCode = :organizeCode and l.isDeleted=:isDeleted and l.isValid=:isValid " ) ;
hql . append ( " and l.status in (:status) " ) ;
hql . append ( " and s.shippingGroupCode in (:shippingGroupCode) " ) ;
hql . append ( " group by s.shippingGroupCode" ) ;
List < Map > ddd = entityManager . createQuery ( hql . toString ( ) )
. setParameter ( "organizeCode" , cfg . getOrganizeCode ( ) )
. setParameter ( "isValid" , CommonEnumUtil . VALID )
. setParameter ( "isDeleted" , CommonEnumUtil . FALSE )
. setParameter ( "status" , Arrays . asList ( MesExtEnumUtil . LOADING_ORDER_STATUS . LOADED . getValue ( ) , MesExtEnumUtil . LOADING_ORDER_STATUS . SHIPPING . getValue ( ) ) )
. setParameter ( "shippingGroupCode" , strShippingGroupList )
. getResultList ( ) ;
Map < String , String > shippingGroupCount = new HashMap < > ( ) ;
if ( ! CollectionUtils . isEmpty ( ddd ) ) {
for ( Map dd : ddd ) {
Object endScanTime = dd . get ( "endScanTime" ) ;
if ( endScanTime ! = null ) {
shippingGroupCount . put ( dd . get ( "shippingGroupCode" ) . toString ( ) , endScanTime . toString ( ) ) ;
}
}
}
for ( String shippingGroupCode : strShippingGroupList ) {
if ( shippingGroupCount . containsKey ( shippingGroupCode ) ) {
String strScanEndTime = shippingGroupCount . get ( shippingGroupCode ) ;
if ( ! StringUtils . isEmpty ( strScanEndTime ) ) {
Date scanEndTime = DateUtil . parse ( strScanEndTime ) ;
values . add ( DateUtil . formatDate ( DateUtil . SHORT_FORMAT_HOUR , scanEndTime ) ) ;
}
} else {
values . add ( "" ) ;
}
}
}
return values ;
}
private List < String > getCPLastShippingTime ( MesShippingKanbanCfg cfg , MesShippingKanbanCfgDetail cfgDetail ) {
List < String > values = new ArrayList < > ( ) ;
DdlPackBean packBean = DdlPackBean . getDdlPackBean ( cfg . getOrganizeCode ( ) ) ;
List < MesPartShippingGroup > shippingGroups = partShippingGroupRDao . findByHqlWhere ( packBean ) ;
if ( CollectionUtils . isEmpty ( shippingGroups ) ) {
return values ;
}
List < String > strShippingGroupList = shippingGroups . stream ( ) . map ( MesPartShippingGroup : : getShippingGroupCode ) . collect ( Collectors . toList ( ) ) ;
if ( strShippingGroupList . stream ( ) . anyMatch ( s - > s . contains ( "CK" ) ) ) {
strShippingGroupList = strShippingGroupList . stream ( ) . filter ( s - > s . contains ( "CK" ) ) . collect ( Collectors . toList ( ) ) ;
StringBuilder hql = new StringBuilder ( ) ;
hql . append ( "select max(s.endScanTime)" ) ;
hql . append ( " from MesShippingOrderManagement s inner join MesShippingOrderManagementDetail sd on s.id = sd.pid and sd.organizeCode = :organizeCode and sd.isDeleted=:isDeleted and sd.isValid=:isValid " ) ;
hql . append ( " and s.status in (:status) " ) ;
hql . append ( " and s.shippingGroupCode in (:shippingGroupCode) " ) ;
String strScanEndTime = entityManager . createQuery ( hql . toString ( ) , String . class )
. setParameter ( "organizeCode" , cfg . getOrganizeCode ( ) )
. setParameter ( "isValid" , CommonEnumUtil . VALID )
. setParameter ( "isDeleted" , CommonEnumUtil . FALSE )
. setParameter ( "status" , Arrays . asList ( MesExtEnumUtil . SHIPPING_ORDER_STATUS . SHIPPED . getValue ( ) , MesExtEnumUtil . SHIPPING_ORDER_STATUS . LOADING . getValue ( ) ) )
. setParameter ( "shippingGroupCode" , strShippingGroupList )
. getSingleResult ( ) ;
if ( ! StringUtils . isEmpty ( strScanEndTime ) ) {
Date scanEndTime = DateUtil . parse ( strScanEndTime ) ;
values . add ( DateUtil . formatDate ( DateUtil . SHORT_FORMAT_HOUR , scanEndTime ) ) ;
}
} else {
values . add ( "0" ) ;
}
return values ;
}
/ * *
* 下 一 车 最 晚 发 运 时 间
* @param cfg
* @param cfgDetail
* @return
* /
private List < String > getNextShippingTime ( MesShippingKanbanCfg cfg , MesShippingKanbanCfgDetail cfgDetail ) {
List < String > values = new ArrayList < > ( ) ;
Date nowTime = DateUtil . now ( ) ;
//获取客户端库存
List < String > clientStockValue = getClientStockQty ( cfg , cfgDetail ) ;
if ( StringUtils . isEmpty ( clientStockValue ) ) {
return values ;
}
//获取客户JPH
List < String > customerJPHValue = getClientJPH ( cfg , cfgDetail ) ;
if ( CollectionUtils . isEmpty ( customerJPHValue ) ) {
return values ;
}
double clientStock = Double . parseDouble ( clientStockValue . get ( 0 ) ) ;
double customerJPH = Double . parseDouble ( customerJPHValue . get ( 0 ) ) ;
//获取在途时间
int onTheWayDate = cfg . getOnWayDate ( ) ! = null ? cfg . getOnWayDate ( ) : 0 ;
//客户端库存除以客户JPH
double customerJPHInt = clientStock / customerJPH ;
BigDecimal b = new BigDecimal ( customerJPHInt ) ;
customerJPHInt = b . setScale ( 1 , RoundingMode . HALF_UP ) . doubleValue ( ) ;
int minutes = ( int ) ( customerJPHInt * 60 ) ;
Date newDate = DateUtil . addMinutes ( nowTime , minutes - onTheWayDate ) ;
values . add ( DateUtil . formatDate ( DateUtil . BASE_FORMAT3 , newDate ) ) ;
return values ;
}
/ * *
* 三 级 停 线 预 警 ( Min )
* @param cfg
* @param cfgDetail
* @return
* /
private List < String > getTreeStopWarning ( MesShippingKanbanCfg cfg , MesShippingKanbanCfgDetail cfgDetail ) {
List < String > values = new ArrayList < > ( ) ;
//获取客户端库存
List < String > nextShippingTimeValue = getNextShippingTime ( cfg , cfgDetail ) ;
if ( StringUtils . isEmpty ( nextShippingTimeValue ) ) {
return values ;
}
Date nowTime = DateUtil . parse ( DateUtil . formatDate ( DateUtil . BASE_FORMAT3 , DateUtil . now ( ) ) , DateUtil . BASE_FORMAT3 ) ;
Date nextShippingTime = DateUtil . parse ( nextShippingTimeValue . get ( 0 ) , DateUtil . BASE_FORMAT3 ) ;
long minutes = DateUtil . minutesBetweenTwoTime ( nextShippingTime , nowTime ) ;
values . add ( String . valueOf ( minutes ) ) ;
return values ;
}
private List < String > getShippingVin ( MesShippingKanbanCfg cfg , MesShippingKanbanCfgDetail cfgDetail ) {
List < String > values = new ArrayList < > ( ) ;
List < String > strShippingGroupList = Arrays . asList ( cfg . getShippingGroupCode ( ) . split ( "," ) ) ;
if ( CollectionUtils . isEmpty ( strShippingGroupList ) ) {
return values ;
}
if ( strShippingGroupList . stream ( ) . anyMatch ( s - > s . contains ( "CK" ) ) ) {
StringBuilder hql = new StringBuilder ( ) ;
hql . append ( "select sd.custInfoSeq" ) ;
hql . append ( " from MesShippingOrderManagement s inner join MesShippingOrderManagementDetail sd on s.id = sd.pid and sd.organizeCode = :organizeCode and sd.isDeleted=:isDeleted and sd.isValid=:isValid " ) ;
hql . append ( " and s.status in (:status) " ) ;
hql . append ( " and s.shippingGroupCode in (:shippingGroupCode) " ) ;
hql . append ( " ORDER BY sd.id DESC" ) ;
Long custInfoSeq = entityManager . createQuery ( hql . toString ( ) , Long . class )
. setParameter ( "organizeCode" , cfg . getOrganizeCode ( ) )
. setParameter ( "isValid" , CommonEnumUtil . VALID )
. setParameter ( "isDeleted" , CommonEnumUtil . FALSE )
. setParameter ( "status" , Arrays . asList ( MesExtEnumUtil . SHIPPING_ORDER_STATUS . SHIPPED . getValue ( ) , MesExtEnumUtil . SHIPPING_ORDER_STATUS . LOADING . getValue ( ) ) )
. setParameter ( "shippingGroupCode" , strShippingGroupList )
. getSingleResult ( ) ;
String strCustInfoSeq = custInfoSeq ! = null ? Long . toString ( custInfoSeq ) : "" ;
if ( strCustInfoSeq . length ( ) > = 6 ) {
values . add ( strCustInfoSeq . substring ( strCustInfoSeq . length ( ) - 6 ) ) ;
} else {
values . add ( strCustInfoSeq ) ;
}
} else {
StringBuilder hql = new StringBuilder ( ) ;
hql . append ( "select new Map(s.shippingGroupCode as shippingGroupCode, max(sd.custInfoSeq) as custInfoSeq)" ) ;
hql . append ( " from MesLoadingList l inner join MesLoadingListDetail ld on l.id = ld.pid inner join MesShippingOrderManagement s on s.id = ld.shippingId inner join MesShippingOrderManagementDetail sd on s.id = sd.pid and l.organizeCode = :organizeCode and l.isDeleted=:isDeleted and l.isValid=:isValid " ) ;
hql . append ( " and l.status in (:status) " ) ;
hql . append ( " and s.shippingGroupCode in (:shippingGroupCode) " ) ;
hql . append ( " group by s.shippingGroupCode" ) ;
List < Map > ddd = entityManager . createQuery ( hql . toString ( ) )
. setParameter ( "organizeCode" , cfg . getOrganizeCode ( ) )
. setParameter ( "isValid" , CommonEnumUtil . VALID )
. setParameter ( "isDeleted" , CommonEnumUtil . FALSE )
. setParameter ( "status" , Arrays . asList ( MesExtEnumUtil . LOADING_ORDER_STATUS . LOADED . getValue ( ) , MesExtEnumUtil . LOADING_ORDER_STATUS . SHIPPING . getValue ( ) ) )
. setParameter ( "shippingGroupCode" , strShippingGroupList )
. getResultList ( ) ;
Map < String , String > shippingGroupCount = new HashMap < > ( ) ;
if ( ! CollectionUtils . isEmpty ( ddd ) ) {
for ( Map dd : ddd ) {
Object custInfoSeq = dd . get ( "custInfoSeq" ) ;
if ( custInfoSeq ! = null ) {
shippingGroupCount . put ( dd . get ( "shippingGroupCode" ) . toString ( ) , custInfoSeq . toString ( ) ) ;
}
}
}
for ( String shippingGroupCode : strShippingGroupList ) {
if ( shippingGroupCount . containsKey ( shippingGroupCode ) ) {
String strCustInfoSeq = shippingGroupCount . get ( shippingGroupCode ) ;
if ( StringUtils . isEmpty ( strCustInfoSeq ) ) {
strCustInfoSeq = "0" ;
}
if ( strCustInfoSeq . length ( ) > = 6 ) {
values . add ( strCustInfoSeq . substring ( strCustInfoSeq . length ( ) - 6 ) ) ;
} else {
values . add ( strCustInfoSeq ) ;
}
} else {
values . add ( "0" ) ;
}
}
}
return values ;
}
private List < String > getCPShippingVin ( MesShippingKanbanCfg cfg , MesShippingKanbanCfgDetail cfgDetail ) {
List < String > values = new ArrayList < > ( ) ;
DdlPackBean packBean = DdlPackBean . getDdlPackBean ( cfg . getOrganizeCode ( ) ) ;
List < MesPartShippingGroup > shippingGroups = partShippingGroupRDao . findByHqlWhere ( packBean ) ;
if ( CollectionUtils . isEmpty ( shippingGroups ) ) {
return values ;
}
List < String > strShippingGroupList = shippingGroups . stream ( ) . map ( MesPartShippingGroup : : getShippingGroupCode ) . collect ( Collectors . toList ( ) ) ;
if ( strShippingGroupList . stream ( ) . anyMatch ( s - > s . contains ( "CK" ) ) ) {
strShippingGroupList = strShippingGroupList . stream ( ) . filter ( s - > s . contains ( "CK" ) ) . collect ( Collectors . toList ( ) ) ;
StringBuilder hql = new StringBuilder ( ) ;
hql . append ( "select sd.custInfoSeq" ) ;
hql . append ( " from MesShippingOrderManagement s inner join MesShippingOrderManagementDetail sd on s.id = sd.pid and sd.organizeCode = :organizeCode and sd.isDeleted=:isDeleted and sd.isValid=:isValid " ) ;
hql . append ( " and s.status in (:status) " ) ;
hql . append ( " and s.shippingGroupCode in (:shippingGroupCode) " ) ;
hql . append ( " ORDER BY sd.id DESC" ) ;
Long custInfoSeq = entityManager . createQuery ( hql . toString ( ) , Long . class )
. setParameter ( "organizeCode" , cfg . getOrganizeCode ( ) )
. setParameter ( "isValid" , CommonEnumUtil . VALID )
. setParameter ( "isDeleted" , CommonEnumUtil . FALSE )
. setParameter ( "status" , Arrays . asList ( MesExtEnumUtil . SHIPPING_ORDER_STATUS . SHIPPED . getValue ( ) , MesExtEnumUtil . SHIPPING_ORDER_STATUS . LOADING . getValue ( ) ) )
. setParameter ( "shippingGroupCode" , strShippingGroupList )
. getSingleResult ( ) ;
String strCustInfoSeq = custInfoSeq ! = null ? Long . toString ( custInfoSeq ) : "" ;
if ( strCustInfoSeq . length ( ) > = 6 ) {
values . add ( strCustInfoSeq . substring ( strCustInfoSeq . length ( ) - 6 ) ) ;
} else {
values . add ( strCustInfoSeq ) ;
}
} else {
values . add ( "0" ) ;
}
return values ;
}
/ * *
* 当 天 上 线 数
* @param cfg
* @param cfgDetail
* @return
* /
private List < String > getTodayOnline ( MesShippingKanbanCfg cfg , MesShippingKanbanCfgDetail cfgDetail ) {
List < String > values = new ArrayList < > ( ) ;
if ( StringUtils . isEmpty ( cfg . getCustStartShift ( ) ) | | StringUtils . isEmpty ( cfg . getOnlinePoint ( ) ) ) {
return values ;
}
String startDateTime = "" ;
String endDateTime = "" ;
Date nowTime = DateUtil . now ( ) ;
Date configTime = DateUtil . parse ( cfg . getCustStartShift ( ) , DateUtil . SHORT_FORMAT_HOUR ) ;
Date currentTime = DateUtil . parse ( DateUtil . formatDate ( DateUtil . SHORT_FORMAT_HOUR , nowTime ) , DateUtil . SHORT_FORMAT_HOUR ) ;
if ( ! configTime . after ( currentTime ) ) {
startDateTime = DateUtil . formatDate ( DateUtil . SHORT_FORMAT , nowTime ) + " " + cfg . getCustStartShift ( ) ;
endDateTime = DateUtil . formatDate ( DateUtil . SHORT_FORMAT , DateUtil . addDays ( nowTime , 1 ) ) + " " + cfg . getCustStartShift ( ) ;
} else {
//小于配置时间, 如凌晨1点则跨天, 需将当前时间减一天
startDateTime = DateUtil . formatDate ( DateUtil . SHORT_FORMAT , DateUtil . addDays ( nowTime , - 1 ) ) + " " + cfg . getCustStartShift ( ) ;
endDateTime = DateUtil . formatDate ( DateUtil . SHORT_FORMAT , nowTime ) + " " + cfg . getCustStartShift ( ) ;
}
StringBuilder onNumberHql = new StringBuilder ( ) ;
onNumberHql . append ( "select count(1) from " + MesCimSeresJisVinOverPoint . class . getName ( ) ) ;
onNumberHql . append ( " where organizeCode = :organizeCode and isDeleted = :isDeleted and isValid = :isValid " ) ;
onNumberHql . append ( " and overPoint = :overPoint " ) ;
onNumberHql . append ( " and createDatetime BETWEEN :startDateTime AND :endDateTime " ) ;
Long onNumber = entityManager . createQuery ( onNumberHql . toString ( ) , Long . class )
. setParameter ( "organizeCode" , cfg . getOrganizeCode ( ) )
. setParameter ( "isValid" , CommonEnumUtil . VALID )
. setParameter ( "isDeleted" , CommonEnumUtil . FALSE )
. setParameter ( "overPoint" , cfg . getOnlinePoint ( ) )
. setParameter ( "startDateTime" , startDateTime )
. setParameter ( "endDateTime" , endDateTime )
. getSingleResult ( ) ;
values . add ( String . valueOf ( onNumber ! = null ? onNumber : 0 ) ) ;
return values ;
}
/ * *
* 当 天 发 运 数
* @param cfg
* @param cfgDetail
* @return
* /
private List < String > getTodayShipping ( MesShippingKanbanCfg cfg , MesShippingKanbanCfgDetail cfgDetail ) {
List < String > values = new ArrayList < > ( ) ;
List < String > strShippingGroupList = Arrays . asList ( cfg . getShippingGroupCode ( ) . split ( "," ) ) ;
if ( CollectionUtils . isEmpty ( strShippingGroupList ) | | StringUtils . isEmpty ( cfg . getInterStartShift ( ) ) ) {
return values ;
}
String startDateTime = "" ;
String endDateTime = "" ;
Date nowTime = DateUtil . now ( ) ;
Date configTime = DateUtil . parse ( cfg . getInterStartShift ( ) , DateUtil . SHORT_FORMAT_HOUR ) ;
Date currentTime = DateUtil . parse ( DateUtil . formatDate ( DateUtil . SHORT_FORMAT_HOUR , nowTime ) , DateUtil . SHORT_FORMAT_HOUR ) ;
if ( ! configTime . after ( currentTime ) ) {
startDateTime = DateUtil . formatDate ( DateUtil . SHORT_FORMAT , nowTime ) + " " + cfg . getInterStartShift ( ) ;
endDateTime = DateUtil . formatDate ( DateUtil . SHORT_FORMAT , DateUtil . addDays ( nowTime , 1 ) ) + " " + cfg . getCustStartShift ( ) ;
} else {
//小于配置时间, 如凌晨1点则跨天, 需将当前时间减一天
startDateTime = DateUtil . formatDate ( DateUtil . SHORT_FORMAT , DateUtil . addDays ( nowTime , - 1 ) ) + " " + cfg . getCustStartShift ( ) ;
endDateTime = DateUtil . formatDate ( DateUtil . SHORT_FORMAT , nowTime ) + " " + cfg . getInterStartShift ( ) ;
}
StringBuilder hql = new StringBuilder ( ) ;
hql . append ( "select new Map(s.shippingGroupCode as shippingGroupCode, count(sd.id) as totalCount)" ) ;
hql . append ( " from MesShippingOrderManagement s inner join MesShippingOrderManagementDetail sd on s.id = sd.pid and sd.organizeCode = :organizeCode and sd.isDeleted=:isDeleted and sd.isValid=:isValid " ) ;
hql . append ( " and s.status in (:status) " ) ;
hql . append ( " and s.modifyDatetime BETWEEN :startDateTime AND :endDateTime " ) ;
hql . append ( " and s.shippingGroupCode in (:shippingGroupCode) " ) ;
hql . append ( " group by s.shippingGroupCode" ) ;
List < Map > ddd = entityManager . createQuery ( hql . toString ( ) )
. setParameter ( "organizeCode" , cfg . getOrganizeCode ( ) )
. setParameter ( "isValid" , CommonEnumUtil . VALID )
. setParameter ( "isDeleted" , CommonEnumUtil . FALSE )
. setParameter ( "status" , Arrays . asList ( MesExtEnumUtil . SHIPPING_ORDER_STATUS . SHIPPED . getValue ( ) , MesExtEnumUtil . SHIPPING_ORDER_STATUS . LOADING . getValue ( ) ) )
. setParameter ( "startDateTime" , startDateTime )
. setParameter ( "endDateTime" , endDateTime )
. setParameter ( "shippingGroupCode" , strShippingGroupList )
. getResultList ( ) ;
Map < String , String > shippingGroupCount = new HashMap < > ( ) ;
if ( ! CollectionUtils . isEmpty ( ddd ) ) {
for ( Map dd : ddd ) {
Object totalCount = dd . get ( "totalCount" ) ;
if ( totalCount ! = null ) {
shippingGroupCount . put ( dd . get ( "shippingGroupCode" ) . toString ( ) , totalCount . toString ( ) ) ;
}
}
}
for ( String shippingGroupCode : strShippingGroupList ) {
values . add ( shippingGroupCount . getOrDefault ( shippingGroupCode , "0" ) ) ;
}
return values ;
}
/ * *
* 当 天 装 车 数
* @param cfg
* @param cfgDetail
* @return
* /
private List < String > getTodayCar ( MesShippingKanbanCfg cfg , MesShippingKanbanCfgDetail cfgDetail ) {
List < String > values = new ArrayList < > ( ) ;
List < String > strShippingGroupList = Arrays . asList ( cfg . getShippingGroupCode ( ) . split ( "," ) ) ;
if ( CollectionUtils . isEmpty ( strShippingGroupList ) | | StringUtils . isEmpty ( cfg . getInterStartShift ( ) ) ) {
return values ;
}
String startDateTime = "" ;
String endDateTime = "" ;
Date nowTime = DateUtil . now ( ) ;
Date configTime = DateUtil . parse ( cfg . getInterStartShift ( ) , DateUtil . SHORT_FORMAT_HOUR ) ;
Date currentTime = DateUtil . parse ( DateUtil . formatDate ( DateUtil . SHORT_FORMAT_HOUR , nowTime ) , DateUtil . SHORT_FORMAT_HOUR ) ;
if ( ! configTime . after ( currentTime ) ) {
startDateTime = DateUtil . formatDate ( DateUtil . SHORT_FORMAT , nowTime ) + " " + cfg . getInterStartShift ( ) ;
endDateTime = DateUtil . formatDate ( DateUtil . SHORT_FORMAT , DateUtil . addDays ( nowTime , 1 ) ) + " " + cfg . getCustStartShift ( ) ;
} else {
//小于配置时间, 如凌晨1点则跨天, 需将当前时间减一天
startDateTime = DateUtil . formatDate ( DateUtil . SHORT_FORMAT , DateUtil . addDays ( nowTime , - 1 ) ) + " " + cfg . getCustStartShift ( ) ;
endDateTime = DateUtil . formatDate ( DateUtil . SHORT_FORMAT , nowTime ) + " " + cfg . getInterStartShift ( ) ;
}
StringBuilder hql = new StringBuilder ( ) ;
hql . append ( "select new Map(s.shippingGroupCode as shippingGroupCode, sum(sd.planQty) as totalCount)" ) ;
hql . append ( " from MesLoadingList l inner join MesLoadingListDetail ld on l.id = ld.pid inner join MesShippingOrderManagement s on s.id = ld.shippingId inner join MesShippingOrderManagementDetail sd on s.id = sd.pid and l.organizeCode = :organizeCode and l.isDeleted=:isDeleted and l.isValid=:isValid " ) ;
hql . append ( " and l.status = :status " ) ;
hql . append ( " and l.modifyDatetime BETWEEN :startDateTime AND :endDateTime " ) ;
hql . append ( " and s.shippingGroupCode in (:shippingGroupCode) " ) ;
hql . append ( " group by s.shippingGroupCode " ) ;
List < Map > ddd = entityManager . createQuery ( hql . toString ( ) )
. setParameter ( "organizeCode" , cfg . getOrganizeCode ( ) )
. setParameter ( "isValid" , CommonEnumUtil . VALID )
. setParameter ( "isDeleted" , CommonEnumUtil . FALSE )
. setParameter ( "status" , MesExtEnumUtil . LOADING_ORDER_STATUS . SHIPPING . getValue ( ) )
. setParameter ( "startDateTime" , startDateTime )
. setParameter ( "endDateTime" , endDateTime )
. setParameter ( "shippingGroupCode" , strShippingGroupList )
. getResultList ( ) ;
Map < String , String > shippingGroupCount = new HashMap < > ( ) ;
if ( ! CollectionUtils . isEmpty ( ddd ) ) {
for ( Map dd : ddd ) {
Object totalCount = dd . get ( "totalCount" ) ;
if ( totalCount ! = null ) {
shippingGroupCount . put ( dd . get ( "shippingGroupCode" ) . toString ( ) , totalCount . toString ( ) ) ;
}
}
}
for ( String shippingGroupCode : strShippingGroupList ) {
values . add ( shippingGroupCount . getOrDefault ( shippingGroupCode , "0" ) ) ;
}
return values ;
}
/ * *
* 客 户 端 JPH
* @param cfg
* @param cfgDetail
* @return
* /
private List < String > getClientJPH ( MesShippingKanbanCfg cfg , MesShippingKanbanCfgDetail cfgDetail ) {
List < String > values = new ArrayList < > ( ) ;
List < String > strShippingGroupList = Arrays . asList ( cfg . getShippingGroupCode ( ) . split ( "," ) ) ;
if ( CollectionUtils . isEmpty ( strShippingGroupList ) ) {
return values ;
}
Date nowTime = DateUtil . now ( ) ;
Date prevHourTime = DateUtil . addMinutes ( nowTime , - 60 ) ;
StringBuilder offNumberHql = new StringBuilder ( ) ;
offNumberHql . append ( "select count(1) from " + MesCimSeresJisVinOverPoint . class . getName ( ) ) ;
offNumberHql . append ( " where organizeCode = :organizeCode and isDeleted = :isDeleted and isValid = :isValid " ) ;
offNumberHql . append ( " and createDatetime BETWEEN :startDateTime AND :endDateTime " ) ;
offNumberHql . append ( " and overPoint = :overPoint " ) ;
Long vpCount = entityManager . createQuery ( offNumberHql . toString ( ) , Long . class )
. setParameter ( "organizeCode" , cfg . getOrganizeCode ( ) )
. setParameter ( "isValid" , CommonEnumUtil . VALID )
. setParameter ( "isDeleted" , CommonEnumUtil . FALSE )
. setParameter ( "startDateTime" , DateUtil . formatDate ( nowTime ) )
. setParameter ( "endDateTime" , DateUtil . formatDate ( prevHourTime ) )
. setParameter ( "overPoint" , cfg . getOnlinePoint ( ) )
. getSingleResult ( ) ;
if ( vpCount = = null | | Objects . equals ( vpCount , 0 L ) ) {
values . add ( cfg . getCustJph ( ) ) ;
} else {
values . add ( vpCount . toString ( ) ) ;
}
return values ;
}
private List < String > getWaitShippingQty ( MesShippingKanbanCfgDetail cfgDetail ) {
/ * *
* 生 产 JPH
* @param cfg
* @param cfgDetail
* @return
* /
private List < String > getProductJPH ( MesShippingKanbanCfg cfg , MesShippingKanbanCfgDetail cfgDetail ) {
List < String > values = new ArrayList < > ( ) ;
List < String > strShippingGroupList = Arrays . asList ( cfg . getShippingGroupCode ( ) . split ( "," ) ) ;
if ( CollectionUtils . isEmpty ( strShippingGroupList ) ) {
return values ;
}
Date nowTime = DateUtil . now ( ) ;
Date prevHourTime = DateUtil . addMinutes ( nowTime , - 60 ) ;
return values ;
}
}