@ -49,6 +49,7 @@ import org.springblade.scheduling.scheduling.mapper.WorkOrderMapper;
import org.springblade.scheduling.scheduling.service.* ;
import org.springblade.scheduling.scheduling.vo.SameTroughVO ;
import org.springblade.scheduling.pojo.vo.WorkOrderVO ;
import org.springblade.scheduling.scheduling.vo.WorkPlanVO ;
import org.springframework.beans.factory.annotation.Value ;
import org.springframework.stereotype.Service ;
import org.springframework.transaction.annotation.Transactional ;
@ -184,10 +185,10 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
} ) ;
//初始化作业中心
List < WorkCenterEntity > workCenterList = workCenterService . list ( ) ;
Map < Long , String > workCenterMap = workCenterList . stream ( ) . collect ( Collectors . toMap ( BaseEntity : : getId , WorkCenterEntity : : getWcName ) ) ;
Map < Long , String > workCenterMap = workCenterList . stream ( ) . collect ( Collectors . toMap ( BaseEntity : : getId , WorkCenterEntity : : getWcName ) ) ;
//初始化工艺能力
List < CraftAbilityEntity > craftAbilityList = craftAbilityService . list ( ) ;
Map < Long , String > craftAbilityMap = craftAbilityList . stream ( ) . collect ( Collectors . toMap ( BaseEntity : : getId , CraftAbilityEntity : : getCaName ) ) ;
Map < Long , String > craftAbilityMap = craftAbilityList . stream ( ) . collect ( Collectors . toMap ( BaseEntity : : getId , CraftAbilityEntity : : getCaName ) ) ;
//初始化烧结温度曲线
List < SintTempCurveEntity > sintList = sintTempCurveService . list ( ) ;
Map < Long , List < SintTempCurveEntity > > sintMap = sintList . stream ( ) . collect ( Collectors . groupingBy ( SintTempCurveEntity : : getProcessId ) ) ;
@ -220,7 +221,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
new LinkedBlockingQueue < > ( ) ,
r - > new Thread ( r , "scheduling-thread-" + System . currentTimeMillis ( ) ) ) ;
map . forEach ( ( workcenter , orders ) - > {
threadPool . execute ( ( ) - > allocateResources ( orders , personAbilityMap , mainProducerMap , planMap , processMap , sintMap , workCenterMap , craftAbilityMap ) ) ;
threadPool . execute ( ( ) - > allocateResources ( orders , personAbilityMap , mainProducerMap , planMap , processMap , sintMap , workCenterMap , craftAbilityMap ) ) ;
} ) ;
}
@ -229,15 +230,15 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
@Override
public List < WorkOrderDto > schedulingBoard ( WorkOrderDto workOrder ) {
List < WorkOrderDto > list = baseMapper . selectWorkOrderList ( workOrder ) ;
String yesterday = DateFormatUtils . format ( DateUtils . addDays ( new Date ( ) , - 1 ) , "yyyy-MM-dd" ) ;
String twodaysAgo = DateFormatUtils . format ( DateUtils . addDays ( new Date ( ) , - 2 ) , "yyyy-MM-dd" ) ;
String threeDaysAgo = DateFormatUtils . format ( DateUtils . addDays ( new Date ( ) , - 3 ) , "yyyy-MM-dd" ) ;
String yesterday = DateFormatUtils . format ( DateUtils . addDays ( new Date ( ) , - 1 ) , "yyyy-MM-dd" ) ;
String twodaysAgo = DateFormatUtils . format ( DateUtils . addDays ( new Date ( ) , - 2 ) , "yyyy-MM-dd" ) ;
String threeDaysAgo = DateFormatUtils . format ( DateUtils . addDays ( new Date ( ) , - 3 ) , "yyyy-MM-dd" ) ;
list . forEach ( item - > {
if ( ( yesterday . equals ( item . getReceiveTime ( ) ) | | twodaysAgo . equals ( item . getReceiveTime ( ) ) ) & & ! "5" . equals ( item . getPlanStatus ( ) ) & & ! "3" . equals ( item . getPlanStatus ( ) ) ) {
if ( ( yesterday . equals ( item . getReceiveTime ( ) ) | | twodaysAgo . equals ( item . getReceiveTime ( ) ) ) & & ! "5" . equals ( item . getPlanStatus ( ) ) & & ! "3" . equals ( item . getPlanStatus ( ) ) ) {
item . setRemindStatus ( "1" ) ;
}
try {
if ( DateUtils . parseDate ( threeDaysAgo , "yyyy-MM-dd" ) . compareTo ( DateUtils . parseDate ( item . getReceiveTime ( ) , "yyyy-MM-dd" ) ) > 0 & & ! "5" . equals ( item . getPlanStatus ( ) ) & & ! "3" . equals ( item . getPlanStatus ( ) ) ) {
if ( DateUtils . parseDate ( threeDaysAgo , "yyyy-MM-dd" ) . compareTo ( DateUtils . parseDate ( item . getReceiveTime ( ) , "yyyy-MM-dd" ) ) > 0 & & ! "5" . equals ( item . getPlanStatus ( ) ) & & ! "3" . equals ( item . getPlanStatus ( ) ) ) {
item . setRemindStatus ( "2" ) ;
}
} catch ( ParseException e ) {
@ -246,22 +247,46 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
item . setPriorityAps ( YieldOrderEnum . getName ( Integer . parseInt ( item . getPriorityAps ( ) ) ) ) ;
} ) ;
Map < String , List < WorkOrderDto > > woCodeGroup = list . stream ( ) . collect ( Collectors . groupingBy ( WorkOrderDto : : getWoCode ) ) ;
//默认不展示所有工序都完成的订单
if ( StringUtils . isEmpty ( workOrder . getBatchNo ( ) ) ) {
woCodeGroup = woCodeGroup . entrySet ( ) . stream ( )
. filter ( entry - > {
// 检查当前分组是否存在至少一个status≠5的元素
return entry . getValue ( ) . stream ( ) . anyMatch ( dto - > ! "5" . equals ( dto . getPlanStatus ( ) ) ) ;
} )
. collect ( Collectors . toMap ( Map . Entry : : getKey , Map . Entry : : getValue ) ) ;
}
//根据工序名称过滤订单
if ( StringUtils . isNotEmpty ( workOrder . getProcessName ( ) ) ) {
woCodeGroup = woCodeGroup . entrySet ( ) . stream ( )
. filter ( entry - > {
return entry . getValue ( ) . stream ( )
. anyMatch ( dto - > workOrder . getProcessName ( ) . equals ( dto . getProcessName ( ) ) ) ;
} )
. collect ( Collectors . toMap (
Map . Entry : : getKey ,
Map . Entry : : getValue ,
( oldValue , newValue ) - > oldValue ,
LinkedHashMap : : new
) ) ;
}
List < WorkOrderDto > resultList = new ArrayList < > ( ) ;
for ( Map . Entry < String , List < WorkOrderDto > > entry : woCodeGroup . entrySet ( ) ) {
if ( StringUtils . isNotEmpty ( workOrder . getProcessName ( ) ) ) {
//根据工序名称过滤订单
/ * if ( StringUtils . isNotEmpty ( workOrder . getProcessName ( ) ) ) {
List < WorkOrderDto > list1 = entry . getValue ( ) ;
List < String > processNameList = list1 . stream ( ) . map ( WorkOrderDto : : getProcessName ) . collect ( Collectors . toList ( ) ) ;
if ( processNameList . contains ( workOrder . getProcessName ( ) ) ) {
if ( processNameList . contains ( workOrder . getProcessName ( ) ) ) {
WorkOrderDto workOrderDto = new WorkOrderDto ( ) ;
String woCode = entry . getKey ( ) ;
workOrderDto . setWoCode ( woCode ) ;
workOrderDto . setWorkOrderList ( entry . getValue ( ) ) ;
resultList . add ( workOrderDto ) ;
continue ;
} else {
} else {
continue ;
}
}
} * /
WorkOrderDto workOrderDto = new WorkOrderDto ( ) ;
String woCode = entry . getKey ( ) ;
workOrderDto . setWoCode ( woCode ) ;
@ -316,35 +341,35 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
return baseMapper . selectTeam ( ) ;
}
@Override
public List < String > selectEquip ( ) {
return baseMapper . selectEquip ( ) ;
}
@Override
public List < SchedulingBoardExcel > exportSchedulingBoard ( WorkOrderDto workOrder ) {
return baseMapper . exportSchedulingBoard ( workOrder ) ;
}
@Override
public void receiveDispatcherFromOldMes ( Long id , Long userId ) {
WorkOrderEntity workOrder = new WorkOrderEntity ( ) ;
workOrder . setId ( id ) ;
workOrder . setDispatcher ( userId ) ;
updateById ( workOrder ) ;
}
void calculateCr ( List < YieldOrderEntity > list ) {
//查询订单下的工序,计算cr值
for ( YieldOrderEntity entity : list ) {
List < YieldOrderCraftEntity > craftList = yieldOrderCraftService . list ( Wrappers . < YieldOrderCraftEntity > lambdaQuery ( ) . eq ( YieldOrderCraftEntity : : getYoId , entity . getId ( ) ) ) ;
//定义订单总工时
BigDecimal total = new BigDecimal ( 0 ) ;
for ( YieldOrderCraftEntity craftEntity : craftList ) {
total = total . add ( craftEntity . getHourQuota ( ) ) ;
}
//换算成天
total = total . divide ( BigDecimal . valueOf ( 1440 ) , 2 , RoundingMode . HALF_UP ) ;
@Override
public List < String > selectEquip ( ) {
return baseMapper . selectEquip ( ) ;
}
@Override
public List < SchedulingBoardExcel > exportSchedulingBoard ( WorkOrderDto workOrder ) {
return baseMapper . exportSchedulingBoard ( workOrder ) ;
}
@Override
public void receiveDispatcherFromOldMes ( Long id , Long userId ) {
WorkOrderEntity workOrder = new WorkOrderEntity ( ) ;
workOrder . setId ( id ) ;
workOrder . setDispatcher ( userId ) ;
updateById ( workOrder ) ;
}
void calculateCr ( List < YieldOrderEntity > list ) {
//查询订单下的工序,计算cr值
for ( YieldOrderEntity entity : list ) {
List < YieldOrderCraftEntity > craftList = yieldOrderCraftService . list ( Wrappers . < YieldOrderCraftEntity > lambdaQuery ( ) . eq ( YieldOrderCraftEntity : : getYoId , entity . getId ( ) ) ) ;
//定义订单总工时
BigDecimal total = new BigDecimal ( 0 ) ;
for ( YieldOrderCraftEntity craftEntity : craftList ) {
total = total . add ( craftEntity . getHourQuota ( ) ) ;
}
//换算成天
total = total . divide ( BigDecimal . valueOf ( 1440 ) , 2 , RoundingMode . HALF_UP ) ;
if ( total . compareTo ( new BigDecimal ( 0 ) ) = = 0 ) {
entity . setCrValue ( new BigDecimal ( 0 ) ) ;
continue ;
@ -392,7 +417,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
. map ( ppsId - > processMap . get ( ppsId ) )
. filter ( chineseName - > chineseName ! = null & & ! chineseName . isEmpty ( ) )
. collect ( Collectors . joining ( "," ) ) ;
order . setErrorInfo ( "工序信息不完整,工序:" + errorInfo + "未匹配作业中心" ) ;
order . setErrorInfo ( "工序信息不完整,工序:" + errorInfo + "未匹配作业中心" ) ;
order . setStatus ( YieldOrderEnum . STATUS_PROCESS_ERROR . getCode ( ) ) ;
yieldOrderService . updateById ( order ) ;
continue ;
@ -403,32 +428,32 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
//判断是否有公共工序已经处理了,如果有则重新定义workPlanList,获取公共工序的最后结束时间和当前时间做比较,取大的作为上一道工序结束时间
if ( planMap . containsKey ( order . getYoCode ( ) ) ) {
workPlanList = planMap . get ( order . getYoCode ( ) ) ;
prevProcessEnd = prevProcessEnd . compareTo ( workPlanList . get ( workPlanList . size ( ) - 1 ) . getEndTime ( ) ) > 0 ? prevProcessEnd : workPlanList . get ( workPlanList . size ( ) - 1 ) . getEndTime ( ) ;
prevProcessEnd = prevProcessEnd . compareTo ( workPlanList . get ( workPlanList . size ( ) - 1 ) . getPlan EndTime ( ) ) > 0 ? prevProcessEnd : workPlanList . get ( workPlanList . size ( ) - 1 ) . getPlan EndTime ( ) ;
}
//处理外协工序,外协可能多个工序连续的,共享开始结束时间
Map < Long , List < YieldOrderCraftEntity > > outSourceMap = craftList . stream ( ) . filter ( item - > item . getIsOutsource ( ) = = true ) . collect ( Collectors . groupingBy ( YieldOrderCraftEntity : : getOcId ) ) ;
Map < Long , String > ppsIdMap = new HashMap < > ( ) ;
Map < Long , List < YieldOrderCraftEntity > > outSourceMap = craftList . stream ( ) . filter ( item - > item . getIsOutsource ( ) = = true ) . collect ( Collectors . groupingBy ( YieldOrderCraftEntity : : getOcId ) ) ;
Map < Long , String > ppsIdMap = new HashMap < > ( ) ;
for ( Map . Entry < Long , List < YieldOrderCraftEntity > > entry : outSourceMap . entrySet ( ) ) {
String ppsIdStr = entry . getValue ( ) . stream ( )
. map ( entity - > String . valueOf ( entity . getPpsId ( ) ) ) // long → String
// 等价写法:.map(entity -> Long.toString(entity.getPpsId()))
. collect ( Collectors . joining ( "," ) ) ; // 逗号分隔拼接
ppsIdMap . put ( entry . getKey ( ) , ppsIdStr ) ;
ppsIdMap . put ( entry . getKey ( ) , ppsIdStr ) ;
}
for ( int i = 0 ; i < craftList . size ( ) ; i + + ) {
YieldOrderCraftEntity craft = craftList . get ( i ) ;
//如果是外协的话,去查询外协工序时间,若未查询到先默认3天,跳过该工序的排产
if ( craft . getIsOutsource ( ) ) {
if ( craft . getIsOutsource ( ) ) {
String ppsIdStr = ppsIdMap . get ( craft . getOcId ( ) ) ;
OutsourceProcessEntity outsourceProcess = outsourceProcessService . getOne ( Wrappers . < OutsourceProcessEntity > lambdaQuery ( ) . eq ( OutsourceProcessEntity : : getProcessId , ppsIdStr ) ) ;
OutsourceProcessEntity outsourceProcess = outsourceProcessService . getOne ( Wrappers . < OutsourceProcessEntity > lambdaQuery ( ) . eq ( OutsourceProcessEntity : : getProcessId , ppsIdStr ) ) ;
BigDecimal totalTime = new BigDecimal ( 0 ) ;
if ( outsourceProcess ! = null ) {
if ( outsourceProcess ! = null ) {
//外协多工序需要把时间平分,方便处理
prevProcessEnd = prevProcessEnd . plusMinutes ( ( long ) ( ( double ) outsourceProcess . getDays ( ) / ppsIdStr . split ( "," ) . length * 24 * 60 ) ) ;
totalTime = totalTime . add ( BigDecimal . valueOf ( ( long ) ( ( double ) outsourceProcess . getDays ( ) / ppsIdStr . split ( "," ) . length * 24 * 60 ) ) ) ;
} else {
prevProcessEnd = prevProcessEnd . plusMinutes ( ( long ) ( ( double ) outsourceProcess . getDays ( ) / ppsIdStr . split ( "," ) . length * 24 * 60 ) ) ;
totalTime = totalTime . add ( BigDecimal . valueOf ( ( long ) ( ( double ) outsourceProcess . getDays ( ) / ppsIdStr . split ( "," ) . length * 24 * 60 ) ) ) ;
} else {
prevProcessEnd = prevProcessEnd . plusDays ( 3 ) ;
totalTime = totalTime . add ( BigDecimal . valueOf ( 3 * 24 * 60 ) ) ;
totalTime = totalTime . add ( BigDecimal . valueOf ( 3 * 24 * 60 ) ) ;
}
WorkPlanEntity workPlan = new WorkPlanEntity ( ) ;
workPlan . setWoId ( order . getId ( ) ) ;
@ -445,21 +470,21 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
workPlan . setScrapQty ( 0 ) ;
workPlan . setOcId ( craft . getOcId ( ) ) ;
workPlanList . add ( workPlan ) ;
} else {
} else {
if ( "设备" . equals ( mainProducerMap . get ( craft . getPpsId ( ) ) ) ) {
//热表同槽
Boolean isSameTrough = sameTrough ( order , craft , prevProcessEnd , workPlanList ) ;
Boolean isSameTrough = sameTrough ( order , craft , prevProcessEnd , workPlanList ) ;
//同槽就不需要继续匹配了
if ( isSameTrough ) {
if ( isSameTrough ) {
continue ;
}
String glassCodeStr = null ;
Map < String , Object > sameFurnaceMap = new HashMap < > ( ) ;
Map < String , Object > sameFurnaceMap = new HashMap < > ( ) ;
//烧结同炉
if ( sintMap . containsKey ( craft . getPpsId ( ) ) ) {
sameFurnaceMap = sameFurnace ( order , craft , workPlanList , prevProcessEnd , glassCodeStr , sintMap ) ;
if ( sintMap . containsKey ( craft . getPpsId ( ) ) ) {
sameFurnaceMap = sameFurnace ( order , craft , workPlanList , prevProcessEnd , glassCodeStr , sintMap ) ;
//同炉的话就不用走下面的匹配了,直接下一工序
if ( sameFurnaceMap . get ( "isSameFurnace" ) . toString ( ) = = "true" ) {
if ( sameFurnaceMap . get ( "isSameFurnace" ) . toString ( ) = = "true" ) {
continue ;
}
}
@ -467,7 +492,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
//根据作业中心查询所有设备
List < EquipAbilityEntity > equipAbilityList = equipAbilityService . list ( Wrappers . < EquipAbilityEntity > lambdaQuery ( ) . in ( EquipAbilityEntity : : getWorkCenterId , craft . getWorkCenterId ( ) ) . eq ( EquipAbilityEntity : : getCraftId , craft . getCaId ( ) ) ) ;
if ( CollectionUtils . isEmpty ( equipAbilityList ) ) {
order . setErrorInfo ( "作业中心:" + workCenterMap . get ( craft . getWorkCenterId ( ) ) + ",工艺:" + craftAbilityMap . get ( craft . getCaId ( ) ) + ",工序:" + processMap . get ( craft . getPpsId ( ) ) + ",未匹配到对应的设备能力" ) ;
order . setErrorInfo ( "作业中心:" + workCenterMap . get ( craft . getWorkCenterId ( ) ) + ",工艺:" + craftAbilityMap . get ( craft . getCaId ( ) ) + ",工序:" + processMap . get ( craft . getPpsId ( ) ) + ",未匹配到对应的设备能力" ) ;
order . setStatus ( YieldOrderEnum . STATUS_PROCESS_ERROR . getCode ( ) ) ;
yieldOrderService . updateById ( order ) ;
isSchecuding = false ;
@ -526,11 +551,11 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
} else {
//生成车间订单
WorkPlanEntity workPlan = new WorkPlanEntity ( ) ;
workPlan . setStartTime ( equipResource . getStartTime ( ) ) ;
workPlan . setPlan StartTime ( equipResource . getStartTime ( ) ) ;
if ( "0" . equals ( equipResource . getEquipType ( ) ) ) {
workPlan . setEndTime ( equipResource . getStartTime ( ) . plusMinutes ( equipResource . getStandardTime ( ) . longValue ( ) ) ) ;
workPlan . setPlan EndTime ( equipResource . getStartTime ( ) . plusMinutes ( equipResource . getStandardTime ( ) . longValue ( ) ) ) ;
} else {
workPlan . setEndTime ( equipResource . getEndTime ( ) ) ;
workPlan . setPlan EndTime ( equipResource . getEndTime ( ) ) ;
}
workPlan . setWorkQty ( order . getYpQty ( ) ) ;
workPlan . setCaId ( craft . getCaId ( ) ) ;
@ -544,7 +569,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
workPlan . setQualifiedQty ( 0 ) ;
workPlan . setUnqualifiedQty ( 0 ) ;
workPlan . setScrapQty ( 0 ) ;
workPlan . setHourQuota ( BigDecimal . valueOf ( ChronoUnit . MINUTES . between ( workPlan . getStartTime ( ) , workPlan . getEndTime ( ) ) ) ) ;
workPlan . setHourQuota ( BigDecimal . valueOf ( ChronoUnit . MINUTES . between ( workPlan . getPlan StartTime ( ) , workPlan . getPlan EndTime ( ) ) ) ) ;
workPlan . setEquipCode ( equipResource . getEquipCode ( ) ) ;
workPlan . setEquipName ( equipResource . getEquipName ( ) ) ;
workPlan . setEquipResourceId ( equipResource . getId ( ) ) ;
@ -552,7 +577,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
//更新剩余产能
equipResource . setRestCapacity ( equipResource . getRestCapacity ( ) . subtract ( capacity ) ) ;
equipResource . setIsUsed ( "1" ) ;
if ( ( order . getYieldType ( ) = = 2 | | order . getYieldType ( ) = = 3 ) & & sameFurnaceMap . get ( "glassCode" ) ! = null ) {
if ( ( order . getYieldType ( ) = = 2 | | order . getYieldType ( ) = = 3 ) & & sameFurnaceMap . get ( "glassCode" ) ! = null ) {
equipResource . setGlassCode ( sameFurnaceMap . get ( "glassCode" ) . toString ( ) ) ;
}
@ -574,8 +599,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
equipResourceService . update ( equipResource1 , updateWrapper ) ;
//当前工序的结束时间作为下一工序的开始时间
prevProcessEnd = workPlan . getEndTime ( ) ;
dateTime = workPlan . getEndTime ( ) ;
prevProcessEnd = workPlan . getPlan EndTime ( ) ;
dateTime = workPlan . getPlan EndTime ( ) ;
isOccupied = true ;
break ;
}
@ -596,20 +621,20 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
WorkPlanEntity workPlan = new WorkPlanEntity ( ) ;
BigDecimal totalTime = new BigDecimal ( 0 ) ;
PersonAbilityEntity ability = personAbilityMap . get ( craft . getWorkCenterId ( ) + "-" + craft . getPpsId ( ) + "-" + craft . getCaId ( ) ) ;
log . info ( "人员能力是:" + craft . getWorkCenterId ( ) + "-" + craft . getPpsId ( ) + "-" + craft . getCaId ( ) ) ;
log . info ( "人员能力是:" + craft . getWorkCenterId ( ) + "-" + craft . getPpsId ( ) + "-" + craft . getCaId ( ) ) ;
//镀后检验和镀后接收先按半小时计算
if ( ability ! = null ) {
if ( "镀后检验" . equals ( ability . getProcessName ( ) ) | | "镀后接收" . equals ( ability . getProcessName ( ) ) ) {
totalTime = BigDecimal . valueOf ( 30 ) ;
workPlan . setStartTime ( prevProcessEnd . plusMinutes ( 30 ) ) ;
workPlan . setEndTime ( prevProcessEnd . plusMinutes ( 60 ) ) ;
workPlan . setPlan StartTime ( prevProcessEnd . plusMinutes ( 30 ) ) ;
workPlan . setPlan EndTime ( prevProcessEnd . plusMinutes ( 60 ) ) ;
if ( "镀后接收" . equals ( ability . getProcessName ( ) ) ) {
workPlan . setMakeTeam ( Long . valueOf ( 64 ) ) ;
}
if ( "镀后检验" . equals ( ability . getProcessName ( ) ) ) {
workPlan . setMakeTeam ( Long . valueOf ( 65 ) ) ;
}
prevProcessEnd = workPlan . getEndTime ( ) ;
prevProcessEnd = workPlan . getPlan EndTime ( ) ;
} else {
if ( "0" . equals ( ability . getType ( ) ) ) {
totalTime = totalTime . add ( BigDecimal . valueOf ( order . getYpQty ( ) ) . multiply ( ability . getStandardTime ( ) ) . add ( ability . getPrepareTime ( ) ) ) ;
@ -624,20 +649,20 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
. eq ( PersonResourceEntity : : getCraftId , craft . getCaId ( ) )
. le ( PersonResourceEntity : : getStartTime , prevProcessEnd )
. ge ( PersonResourceEntity : : getEndTime , prevProcessEnd ) ) ;
if ( CollectionUtils . isNotEmpty ( personResourceList ) ) {
if ( CollectionUtils . isNotEmpty ( personResourceList ) ) {
workPlan . setMakeTeam ( personResourceList . get ( 0 ) . getTeamId ( ) ) ;
}
//需要人员资质的指定到人
if ( StringUtils . isNotEmpty ( ability . getProductIdent ( ) )
if ( StringUtils . isNotEmpty ( ability . getProductIdent ( ) )
& & StringUtils . isNotEmpty ( order . getProductIdent ( ) )
& & ability . getProductIdent ( ) . equals ( order . getProductIdent ( ) )
& & workPlan . getMakeTeam ( ) ! = null ) {
List < String > memberList = baseMapper . selectTeamMember ( workPlan . getMakeTeam ( ) , ability . getCertificateId ( ) ) ;
if ( CollectionUtils . isNotEmpty ( memberList ) ) {
& & workPlan . getMakeTeam ( ) ! = null ) {
List < String > memberList = baseMapper . selectTeamMember ( workPlan . getMakeTeam ( ) , ability . getCertificateId ( ) ) ;
if ( CollectionUtils . isNotEmpty ( memberList ) ) {
workPlan . setTeamMembers ( memberList . stream ( ) . collect ( Collectors . joining ( "," ) ) ) ;
}
}
} else {
} else {
prevProcessEnd = prevProcessEnd . plusMinutes ( 30 ) ;
totalTime = BigDecimal . valueOf ( 30 ) ;
}
@ -660,7 +685,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
//未匹配到设备和人力资源,将工序状态改为6,标识为未排产
craft . setStatus ( YieldOrderEnum . STATUS_PROCESS_ERROR . getCode ( ) ) ;
yieldOrderCraftService . updateById ( craft ) ;
log . info ( "未匹配到设备和人力资源的工序是:" + craft . getPpsId ( ) ) ;
log . info ( "未匹配到设备和人力资源的工序是:" + craft . getPpsId ( ) ) ;
}
}
@ -682,8 +707,10 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
workOrder . setBatchNo ( order . getBatchNo ( ) ) ;
workOrder . setYoId ( order . getId ( ) ) ;
workOrder . setMakeQty ( order . getYpQty ( ) ) ;
workOrder . setPlanStartDate ( workPlanList . get ( 0 ) . getStartTime ( ) = = null ? null : workPlanList . get ( 0 ) . getStartTime ( ) . truncatedTo ( ChronoUnit . DAYS ) . toString ( ) . substring ( 0 , 10 ) ) ;
workOrder . setPlanEndDate ( workPlanList . get ( workPlanList . size ( ) - 1 ) . getEndTime ( ) = = null ? null : workPlanList . get ( workPlanList . size ( ) - 1 ) . getEndTime ( ) . truncatedTo ( ChronoUnit . DAYS ) . toString ( ) . substring ( 0 , 10 ) ) ;
workOrder . setPlanStartDate ( workPlanList . get ( 0 ) . getPlanStartTime ( ) = = null ? null : workPlanList . get ( 0 ) . getPlanStartTime ( ) . truncatedTo ( ChronoUnit . DAYS ) . toString ( ) . substring ( 0 , 10 ) ) ;
workOrder . setPlanEndDate ( workPlanList . get ( workPlanList . size ( ) - 1 ) . getPlanEndTime ( ) = = null ? null : workPlanList . get ( workPlanList . size ( ) - 1 ) . getPlanEndTime ( ) . truncatedTo ( ChronoUnit . DAYS ) . toString ( ) . substring ( 0 , 10 ) ) ;
workOrder . setPlanStartTime ( workPlanList . get ( 0 ) . getPlanStartTime ( ) = = null ? null : workPlanList . get ( 0 ) . getPlanStartTime ( ) ) ;
workOrder . setPlanEndTime ( workPlanList . get ( workPlanList . size ( ) - 1 ) . getPlanEndTime ( ) = = null ? null : workPlanList . get ( workPlanList . size ( ) - 1 ) . getPlanEndTime ( ) ) ;
workOrder . setInventoryQty ( 0 ) ;
workOrder . setRunStatus ( 2 ) ;
workOrder . setPickingStatus ( 0 ) ;
@ -700,9 +727,9 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
workOrder . setPartCode ( order . getPartCode ( ) ) ;
workOrder . setDemandDate ( order . getDemandDate ( ) ) ;
//调度员是主工序加工班组的调度员
if ( workPlanList . get ( 0 ) . getMakeTeam ( ) ! = null ) {
if ( workPlanList . get ( 0 ) . getMakeTeam ( ) ! = null ) {
TeamSetEntity teamSet = teamSetService . getById ( workPlanList . get ( 0 ) . getMakeTeam ( ) ) ;
if ( teamSet ! = null ) {
if ( teamSet ! = null ) {
workOrder . setDispatcher ( teamSet . getDispatcher ( ) ) ;
}
}
@ -772,13 +799,13 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
int startIndex = - 1 ;
int endIndex = - 1 ;
for ( int i = 0 ; i < workPlanList . size ( ) ; i + + ) {
if ( workPlanList . get ( i ) . getStartTime ( ) ! = null ) {
if ( workPlanList . get ( i ) . getPlan StartTime ( ) ! = null ) {
startIndex = i ;
break ;
}
}
for ( int i = workPlanList . size ( ) - 1 ; i > 0 ; i - - ) {
if ( workPlanList . get ( i ) . getEndTime ( ) ! = null ) {
if ( workPlanList . get ( i ) . getPlan EndTime ( ) ! = null ) {
endIndex = i ;
break ;
}
@ -790,13 +817,13 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
WorkPlanEntity next = workPlanList . get ( i + 1 ) ; // 下一个计划(当前计划的后续计划)
// 当前计划的结束时间 = 下一个计划的开始时间
LocalDateTime currentEnd = next . getStartTime ( ) ;
LocalDateTime currentEnd = next . getPlan StartTime ( ) ;
// 当前计划的开始时间 = 结束时间 - 加工时间
LocalDateTime currentStart = currentEnd . minusMinutes ( current . getHourQuota ( ) . longValue ( ) ) ;
// 赋值给当前计划
current . setStartTime ( currentStart ) ;
current . setEndTime ( currentEnd ) ;
current . setPlan StartTime ( currentStart ) ;
current . setPlan EndTime ( currentEnd ) ;
current . setMakeTeam ( next . getMakeTeam ( ) ) ;
}
}
@ -807,40 +834,40 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
WorkPlanEntity prev = workPlanList . get ( i - 1 ) ; // 上一个计划(当前计划的前置计划)
// 当前计划的开始时间 = 上一个计划的结束时间
LocalDateTime currentStart = prev . getEndTime ( ) ;
LocalDateTime currentStart = prev . getPlan EndTime ( ) ;
// 当前计划的结束时间 = 开始时间 + 加工时间
LocalDateTime currentEnd = currentStart . plusMinutes ( current . getHourQuota ( ) . longValue ( ) ) ;
// 赋值给当前计划
current . setStartTime ( currentStart ) ;
current . setEndTime ( currentEnd ) ;
current . setPlan StartTime ( currentStart ) ;
current . setPlan EndTime ( currentEnd ) ;
current . setMakeTeam ( prev . getMakeTeam ( ) ) ;
}
}
//特殊处理,一个作业中心只有人力资源的情况
for ( int i = 0 ; i < list . size ( ) ; i + + ) {
if ( list . get ( i ) . getStartTime ( ) = = null & & list . get ( i ) . getEndTime ( ) = = null ) {
if ( i ! = 0 & & list . get ( i - 1 ) . getEndTime ( ) ! = null ) {
list . get ( i ) . setStartTime ( list . get ( i - 1 ) . getEndTime ( ) ) ;
list . get ( i ) . setEndTime ( list . get ( i ) . getStartTime ( ) . plusMinutes ( list . get ( i ) . getHourQuota ( ) . longValue ( ) ) ) ;
for ( int i = 0 ; i < list . size ( ) ; i + + ) {
if ( list . get ( i ) . getPlan StartTime ( ) = = null & & list . get ( i ) . getPlan EndTime ( ) = = null ) {
if ( i ! = 0 & & list . get ( i - 1 ) . getPlan EndTime ( ) ! = null ) {
list . get ( i ) . setPlan StartTime ( list . get ( i - 1 ) . getPlan EndTime ( ) ) ;
list . get ( i ) . setPlan EndTime ( list . get ( i ) . getPlan StartTime ( ) . plusMinutes ( list . get ( i ) . getHourQuota ( ) . longValue ( ) ) ) ;
continue ;
}
if ( i ! = list . size ( ) - 1 & & list . get ( i + 1 ) . getStartTime ( ) ! = null ) {
list . get ( i ) . setEndTime ( list . get ( i + 1 ) . getStartTime ( ) ) ;
list . get ( i ) . setStartTime ( list . get ( i ) . getEndTime ( ) . minusMinutes ( list . get ( i ) . getHourQuota ( ) . longValue ( ) ) ) ;
if ( i ! = list . size ( ) - 1 & & list . get ( i + 1 ) . getPlan StartTime ( ) ! = null ) {
list . get ( i ) . setPlan EndTime ( list . get ( i + 1 ) . getPlan StartTime ( ) ) ;
list . get ( i ) . setPlan StartTime ( list . get ( i ) . getPlan EndTime ( ) . minusMinutes ( list . get ( i ) . getHourQuota ( ) . longValue ( ) ) ) ;
}
}
}
//判断是否所有数据都没有开始结束时间,说明订单只有人力资源匹配
boolean isEmpty = list . stream ( ) . allMatch ( item - > Objects . isNull ( item . getStartTime ( ) )
& & Objects . isNull ( item . getEndTime ( ) ) ) ;
if ( isEmpty ) {
boolean isEmpty = list . stream ( ) . allMatch ( item - > Objects . isNull ( item . getPlan StartTime ( ) )
& & Objects . isNull ( item . getPlan EndTime ( ) ) ) ;
if ( isEmpty ) {
//上一道工序结束时间
LocalDateTime prevProcessEnd = LocalDateTime . now ( ) ;
for ( int i = 0 ; i < list . size ( ) ; i + + ) {
list . get ( i ) . setStartTime ( prevProcessEnd ) ;
list . get ( i ) . setEndTime ( prevProcessEnd . plusMinutes ( list . get ( i ) . getHourQuota ( ) . longValue ( ) ) ) ;
prevProcessEnd = list . get ( i ) . getEndTime ( ) ;
for ( int i = 0 ; i < list . size ( ) ; i + + ) {
list . get ( i ) . setPlan StartTime ( prevProcessEnd ) ;
list . get ( i ) . setPlan EndTime ( prevProcessEnd . plusMinutes ( list . get ( i ) . getHourQuota ( ) . longValue ( ) ) ) ;
prevProcessEnd = list . get ( i ) . getPlan EndTime ( ) ;
}
}
@ -1089,8 +1116,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
equipResource . setIsUsed ( "1" ) ;
equipResourceService . updateById ( equipResource ) ;
WorkPlanEntity workPlan = new WorkPlanEntity ( ) ;
workPlan . setStartTime ( equipResource . getStartTime ( ) ) ;
workPlan . setEndTime ( equipResource . getStartTime ( ) . plusMinutes ( equipResource . getStandardTime ( ) . longValue ( ) ) ) ;
workPlan . setPlan StartTime ( equipResource . getStartTime ( ) ) ;
workPlan . setPlan EndTime ( equipResource . getStartTime ( ) . plusMinutes ( equipResource . getStandardTime ( ) . longValue ( ) ) ) ;
workPlan . setWorkQty ( order . getYpQty ( ) ) ;
workPlan . setCaId ( craft . getCaId ( ) ) ;
workPlan . setPpsId ( craft . getPpsId ( ) ) ;
@ -1103,7 +1130,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
workPlan . setQualifiedQty ( 0 ) ;
workPlan . setUnqualifiedQty ( 0 ) ;
workPlan . setScrapQty ( 0 ) ;
workPlan . setHourQuota ( BigDecimal . valueOf ( ChronoUnit . MINUTES . between ( workPlan . getStartTime ( ) , workPlan . getEndTime ( ) ) ) ) ;
workPlan . setHourQuota ( BigDecimal . valueOf ( ChronoUnit . MINUTES . between ( workPlan . getPlan StartTime ( ) , workPlan . getPlan EndTime ( ) ) ) ) ;
workPlan . setEquipCode ( equipResource . getEquipCode ( ) ) ;
workPlan . setEquipName ( equipResource . getEquipName ( ) ) ;
workPlan . setEquipResourceId ( equipResource . getId ( ) ) ;
@ -1180,113 +1207,113 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
}
}
public Boolean sameTrough ( YieldOrderEntity order , YieldOrderCraftEntity craft , LocalDateTime dateTime , List < WorkPlanEntity > workPlanList ) {
public Boolean sameTrough ( YieldOrderEntity order , YieldOrderCraftEntity craft , LocalDateTime dateTime , List < WorkPlanEntity > workPlanList ) {
Boolean isSameTrough = false ;
SameTroughEntity sameTrough = sameTroughService . getOne ( Wrappers . < SameTroughEntity > lambdaQuery ( )
. eq ( SameTroughEntity : : getWorkCenterId , craft . getWorkCenterId ( ) )
. eq ( SameTroughEntity : : getCraftId , craft . getCaId ( ) )
. eq ( SameTroughEntity : : getProcessId , craft . getPpsId ( ) ) ) ;
if ( sameTrough ! = null ) {
SameTroughEntity sameTrough = sameTroughService . getOne ( Wrappers . < SameTroughEntity > lambdaQuery ( )
. eq ( SameTroughEntity : : getWorkCenterId , craft . getWorkCenterId ( ) )
. eq ( SameTroughEntity : : getCraftId , craft . getCaId ( ) )
. eq ( SameTroughEntity : : getProcessId , craft . getPpsId ( ) ) ) ;
if ( sameTrough ! = null ) {
//查询是否有已经排产的计划
List < WorkPlanEntity > workPlanOldList = workPlanService . list ( Wrappers . < WorkPlanEntity > lambdaQuery ( )
. eq ( WorkPlanEntity : : getWorkCenterId , craft . getWorkCenterId ( ) )
. eq ( WorkPlanEntity : : getCaId , craft . getCaId ( ) )
. eq ( WorkPlanEntity : : getPpsId , craft . getPpsId ( ) )
. ge ( WorkPlanEntity : : getStartTime , dateTime ) . orderByAsc ( WorkPlanEntity : : getStartTime ) ) ;
if ( CollectionUtils . isNotEmpty ( workPlanOldList ) ) {
. eq ( WorkPlanEntity : : getWorkCenterId , craft . getWorkCenterId ( ) )
. eq ( WorkPlanEntity : : getCaId , craft . getCaId ( ) )
. eq ( WorkPlanEntity : : getPpsId , craft . getPpsId ( ) )
. ge ( WorkPlanEntity : : getPlan StartTime , dateTime ) . orderByAsc ( WorkPlanEntity : : getPlan StartTime ) ) ;
if ( CollectionUtils . isNotEmpty ( workPlanOldList ) ) {
//总生产量
BigDecimal sumCapacity = order . getYpArea ( ) . multiply ( BigDecimal . valueOf ( order . getYpQty ( ) ) ) ;
//可能有多个订单符合要求,按照车间订单、时间分组排序
Map < Long , List < WorkPlanEntity > > workPlanMap = workPlanOldList . stream ( ) . collect ( Collectors . groupingBy ( WorkPlanEntity : : getWoId ) ) ;
for ( Map . Entry < Long , List < WorkPlanEntity > > entry : workPlanMap . entrySet ( ) ) {
Map < Long , List < WorkPlanEntity > > workPlanMap = workPlanOldList . stream ( ) . collect ( Collectors . groupingBy ( WorkPlanEntity : : getWoId ) ) ;
for ( Map . Entry < Long , List < WorkPlanEntity > > entry : workPlanMap . entrySet ( ) ) {
List < WorkPlanEntity > planList = entry . getValue ( ) ;
Boolean isEnough = true ;
List < Long > resourceList = new ArrayList < > ( ) ;
for ( WorkPlanEntity workPlan : planList ) {
if ( workPlan . getEquipResourceId ( ) ! = null ) {
for ( WorkPlanEntity workPlan : planList ) {
if ( workPlan . getEquipResourceId ( ) ! = null ) {
EquipResourceEntity equipResource = equipResourceService . getById ( workPlan . getEquipResourceId ( ) ) ;
//判断剩余产能是否满足总产能
if ( sumCapacity . compareTo ( equipResource . getRestCapacity ( ) ) > 0 ) {
if ( sumCapacity . compareTo ( equipResource . getRestCapacity ( ) ) > 0 ) {
isEnough = false ;
resourceList . clear ( ) ;
break ;
} else {
} else {
resourceList . add ( workPlan . getEquipResourceId ( ) ) ;
}
}
}
//如果产能满足,再判断是否满足同槽条件
if ( isEnough ) {
if ( isEnough ) {
WorkOrderEntity workOrder = this . getById ( workPlanOldList . get ( 0 ) . getWoId ( ) ) ;
YieldOrderEntity yieldOrderEntity = yieldOrderService . getById ( workOrder . getYoId ( ) ) ;
List < YieldOrderCraftEntity > orderCraftList = yieldOrderCraftService . list ( Wrappers . < YieldOrderCraftEntity > lambdaQuery ( )
. eq ( YieldOrderCraftEntity : : getYoId , yieldOrderEntity . getId ( ) )
. eq ( YieldOrderCraftEntity : : getPpsId , craft . getPpsId ( ) )
. eq ( YieldOrderCraftEntity : : getCaId , craft . getCaId ( ) )
. eq ( YieldOrderCraftEntity : : getWorkCenterId , craft . getWorkCenterId ( ) ) ) ;
. eq ( YieldOrderCraftEntity : : getYoId , yieldOrderEntity . getId ( ) )
. eq ( YieldOrderCraftEntity : : getPpsId , craft . getPpsId ( ) )
. eq ( YieldOrderCraftEntity : : getCaId , craft . getCaId ( ) )
. eq ( YieldOrderCraftEntity : : getWorkCenterId , craft . getWorkCenterId ( ) ) ) ;
SameTroughVO voNew = sameTroughService . selectSameTroughInfo ( craft . getId ( ) ) ;
SameTroughVO voOld = sameTroughService . selectSameTroughInfo ( orderCraftList . get ( 0 ) . getId ( ) ) ;
//根据同槽因素进行比对
Boolean isSameTrough2 = true ;
//键位
if ( "1" . equals ( sameTrough . getKeyBinding ( ) ) & & voNew . getPartCode ( ) . equals ( voOld . getPartCode ( ) ) & & StringUtils . isNotEmpty ( voNew . getKeyBinding ( ) ) & & StringUtils . isNotEmpty ( voOld . getKeyBinding ( ) ) & & ! voNew . getKeyBinding ( ) . equals ( voOld . getKeyBinding ( ) ) ) {
if ( "1" . equals ( sameTrough . getKeyBinding ( ) ) & & voNew . getPartCode ( ) . equals ( voOld . getPartCode ( ) ) & & StringUtils . isNotEmpty ( voNew . getKeyBinding ( ) ) & & StringUtils . isNotEmpty ( voOld . getKeyBinding ( ) ) & & ! voNew . getKeyBinding ( ) . equals ( voOld . getKeyBinding ( ) ) ) {
isSameTrough2 = false ;
}
//生产厂家
if ( "1" . equals ( sameTrough . getProducter ( ) ) & & voNew . getPartCode ( ) . equals ( voOld . getPartCode ( ) ) & & StringUtils . isNotEmpty ( voNew . getProducter ( ) ) & & StringUtils . isNotEmpty ( voOld . getProducter ( ) ) & & ! voNew . getProducter ( ) . equals ( voOld . getProducter ( ) ) ) {
if ( "1" . equals ( sameTrough . getProducter ( ) ) & & voNew . getPartCode ( ) . equals ( voOld . getPartCode ( ) ) & & StringUtils . isNotEmpty ( voNew . getProducter ( ) ) & & StringUtils . isNotEmpty ( voOld . getProducter ( ) ) & & ! voNew . getProducter ( ) . equals ( voOld . getProducter ( ) ) ) {
isSameTrough2 = false ;
}
//检验编号
if ( "1" . equals ( sameTrough . getInspectionCode ( ) ) & & voNew . getPartCode ( ) . equals ( voOld . getPartCode ( ) ) & & StringUtils . isNotEmpty ( voNew . getInspectionCode ( ) ) & & StringUtils . isNotEmpty ( voOld . getInspectionCode ( ) ) & & ! voNew . getInspectionCode ( ) . equals ( voOld . getInspectionCode ( ) ) ) {
if ( "1" . equals ( sameTrough . getInspectionCode ( ) ) & & voNew . getPartCode ( ) . equals ( voOld . getPartCode ( ) ) & & StringUtils . isNotEmpty ( voNew . getInspectionCode ( ) ) & & StringUtils . isNotEmpty ( voOld . getInspectionCode ( ) ) & & ! voNew . getInspectionCode ( ) . equals ( voOld . getInspectionCode ( ) ) ) {
isSameTrough2 = false ;
}
//材料
if ( "1" . equals ( sameTrough . getMaterial ( ) ) & & StringUtils . isNotEmpty ( voNew . getMaterial ( ) ) & & StringUtils . isNotEmpty ( voOld . getMaterial ( ) ) & & ! voNew . getMaterial ( ) . equals ( voOld . getMaterial ( ) ) ) {
if ( "1" . equals ( sameTrough . getMaterial ( ) ) & & StringUtils . isNotEmpty ( voNew . getMaterial ( ) ) & & StringUtils . isNotEmpty ( voOld . getMaterial ( ) ) & & ! voNew . getMaterial ( ) . equals ( voOld . getMaterial ( ) ) ) {
isSameTrough2 = false ;
}
//厚度
if ( "1" . equals ( sameTrough . getThickness ( ) ) & & StringUtils . isNotEmpty ( voNew . getThickness ( ) ) & & StringUtils . isNotEmpty ( voOld . getThickness ( ) ) & & ! voNew . getThickness ( ) . equals ( voOld . getThickness ( ) ) ) {
if ( "1" . equals ( sameTrough . getThickness ( ) ) & & StringUtils . isNotEmpty ( voNew . getThickness ( ) ) & & StringUtils . isNotEmpty ( voOld . getThickness ( ) ) & & ! voNew . getThickness ( ) . equals ( voOld . getThickness ( ) ) ) {
isSameTrough2 = false ;
}
//钝化
if ( "1" . equals ( sameTrough . getPassivation ( ) ) ) {
if ( StringUtils . isNotEmpty ( voNew . getPlate ( ) )
if ( "1" . equals ( sameTrough . getPassivation ( ) ) ) {
if ( StringUtils . isNotEmpty ( voNew . getPlate ( ) )
& & StringUtils . isNotEmpty ( voOld . getPlate ( ) )
& & ( ( voNew . getPlate ( ) . contains ( "不钝化" )
& & ! voOld . getPlate ( ) . contains ( "不钝化" ) )
| | ( voOld . getPlate ( ) . contains ( "不钝化" )
& & ! voNew . getPlate ( ) . contains ( "不钝化" ) ) ) ) {
& & ! voNew . getPlate ( ) . contains ( "不钝化" ) ) ) ) {
isSameTrough2 = false ;
}
}
//硬度
if ( "1" . equals ( sameTrough . getHardness ( ) ) & & StringUtils . isNotEmpty ( voNew . getHardness ( ) ) & & StringUtils . isNotEmpty ( voOld . getHardness ( ) ) & & ! voNew . getHardness ( ) . equals ( voOld . getHardness ( ) ) ) {
if ( "1" . equals ( sameTrough . getHardness ( ) ) & & StringUtils . isNotEmpty ( voNew . getHardness ( ) ) & & StringUtils . isNotEmpty ( voOld . getHardness ( ) ) & & ! voNew . getHardness ( ) . equals ( voOld . getHardness ( ) ) ) {
isSameTrough2 = false ;
}
//生产标识
if ( "1" . equals ( sameTrough . getProductIdent ( ) ) ) {
List < String > highIdentList = Arrays . asList ( new String [ ] { "JHT" , "JI" , "JIX" , "YH" , "CC" , "SATA" } ) ;
if ( StringUtils . isNotEmpty ( order . getProductIdent ( ) ) & & highIdentList . contains ( order . getProductIdent ( ) ) ) {
if ( "1" . equals ( sameTrough . getProductIdent ( ) ) ) {
List < String > highIdentList = Arrays . asList ( new String [ ] { "JHT" , "JI" , "JIX" , "YH" , "CC" , "SATA" } ) ;
if ( StringUtils . isNotEmpty ( order . getProductIdent ( ) ) & & highIdentList . contains ( order . getProductIdent ( ) ) ) {
isSameTrough2 = false ;
}
if ( ! ( voNew . getPartCode ( ) . equals ( voOld . getPartCode ( ) )
if ( ! ( voNew . getPartCode ( ) . equals ( voOld . getPartCode ( ) )
& & StringUtils . isNotEmpty ( voNew . getProductIdent ( ) )
& & StringUtils . isNotEmpty ( voOld . getProductIdent ( ) )
& & voNew . getProductIdent ( ) . equals ( voOld . getProductIdent ( ) ) ) ) {
isSameTrough2 = false ;
& & voNew . getProductIdent ( ) . equals ( voOld . getProductIdent ( ) ) ) ) {
isSameTrough2 = false ;
}
}
if ( isSameTrough2 ) {
for ( Long resourceId : resourceList ) {
if ( isSameTrough2 ) {
for ( Long resourceId : resourceList ) {
EquipResourceEntity equipResource = equipResourceService . getById ( resourceId ) ;
//生成车间订单
WorkPlanEntity workPlan = new WorkPlanEntity ( ) ;
workPlan . setStartTime ( equipResource . getStartTime ( ) ) ;
workPlan . setPlan StartTime ( equipResource . getStartTime ( ) ) ;
if ( "0" . equals ( equipResource . getEquipType ( ) ) ) {
workPlan . setEndTime ( equipResource . getStartTime ( ) . plusMinutes ( equipResource . getStandardTime ( ) . longValue ( ) ) ) ;
workPlan . setPlan EndTime ( equipResource . getStartTime ( ) . plusMinutes ( equipResource . getStandardTime ( ) . longValue ( ) ) ) ;
} else {
workPlan . setEndTime ( equipResource . getEndTime ( ) ) ;
workPlan . setPlan EndTime ( equipResource . getEndTime ( ) ) ;
}
workPlan . setWorkQty ( order . getYpQty ( ) ) ;
workPlan . setCaId ( craft . getCaId ( ) ) ;
@ -1300,7 +1327,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
workPlan . setQualifiedQty ( 0 ) ;
workPlan . setUnqualifiedQty ( 0 ) ;
workPlan . setScrapQty ( 0 ) ;
workPlan . setHourQuota ( BigDecimal . valueOf ( ChronoUnit . MINUTES . between ( workPlan . getStartTime ( ) , workPlan . getEndTime ( ) ) ) ) ;
workPlan . setHourQuota ( BigDecimal . valueOf ( ChronoUnit . MINUTES . between ( workPlan . getPlan StartTime ( ) , workPlan . getPlan EndTime ( ) ) ) ) ;
workPlan . setEquipCode ( equipResource . getEquipCode ( ) ) ;
workPlan . setEquipName ( equipResource . getEquipName ( ) ) ;
workPlan . setEquipResourceId ( equipResource . getId ( ) ) ;
@ -1319,10 +1346,11 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
}
return isSameTrough ;
}
public Map < String , Object > sameFurnace ( YieldOrderEntity order , YieldOrderCraftEntity craft , List < WorkPlanEntity > workPlanList , LocalDateTime prevProcessEnd , String glassCodeStr , Map < Long , List < SintTempCurveEntity > > sintMap ) {
Map < String , Object > map = new HashMap < > ( ) ;
public Map < String , Object > sameFurnace ( YieldOrderEntity order , YieldOrderCraftEntity craft , List < WorkPlanEntity > workPlanList , LocalDateTime prevProcessEnd , String glassCodeStr , Map < Long , List < SintTempCurveEntity > > sintMap ) {
Map < String , Object > map = new HashMap < > ( ) ;
Boolean isSameFurnace = false ;
if ( order . getYieldType ( ) = = YieldOrderEnum . YIELD_TYPE_2 . getCode ( ) | | order . getYieldType ( ) = = YieldOrderEnum . YIELD_TYPE_3 . getCode ( ) ) { //烧结订单
if ( order . getYieldType ( ) = = YieldOrderEnum . YIELD_TYPE_2 . getCode ( ) | | order . getYieldType ( ) = = YieldOrderEnum . YIELD_TYPE_3 . getCode ( ) ) { //烧结订单
//获取当前工序的所有温度曲线
List < SintTempCurveEntity > sintList = sintMap . get ( craft . getPpsId ( ) ) ;
List < List < String > > sintMaterialList = new ArrayList < > ( ) ;
@ -1332,44 +1360,44 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
PartEntity part = new PartEntity ( ) ;
part . setPartCode ( order . getPartCode ( ) ) ;
List < PartEntity > childPartList = partService . selectChildPart ( part ) ;
if ( CollectionUtils . isNotEmpty ( childPartList ) ) {
if ( CollectionUtils . isNotEmpty ( childPartList ) ) {
//获取子件的所有玻璃粉牌号
List < String > materialList = childPartList . stream ( ) . filter ( item - > StringUtils . isNotEmpty ( item . getMaterial ( ) ) ) . map ( PartEntity : : getMaterial ) . collect ( Collectors . toList ( ) ) ;
List < String > maxMatchList = null ;
int maxCount = 0 ;
for ( List < String > glassCodeList : sintMaterialList ) {
for ( List < String > glassCodeList : sintMaterialList ) {
int currentCount = ( int ) glassCodeList . stream ( ) . filter ( materialList : : contains ) . count ( ) ;
if ( currentCount > maxCount ) {
maxCount = currentCount ;
maxMatchList = glassCodeList ;
}
}
if ( maxMatchList ! = null ) {
if ( maxMatchList ! = null ) {
glassCodeStr = maxMatchList . stream ( ) . collect ( Collectors . joining ( "," ) ) ;
map . put ( "glassCode" , glassCodeStr ) ;
log . info ( "订单:" + order . getYoCode ( ) + ",温度曲线是:" + glassCodeStr ) ;
map . put ( "glassCode" , glassCodeStr ) ;
log . info ( "订单:" + order . getYoCode ( ) + ",温度曲线是:" + glassCodeStr ) ;
}
}
//包含说明之前有过这个温度曲线的订单
//根据当前时间查询包含玻璃粉牌号的设备资源
List < EquipResourceEntity > equipResourceList = equipResourceService . list ( Wrappers . < EquipResourceEntity > lambdaQuery ( )
. eq ( EquipResourceEntity : : getWorkCenterId , craft . getWorkCenterId ( ) )
. eq ( EquipResourceEntity : : getCraftId , craft . getCaId ( ) )
. ge ( EquipResourceEntity : : getStartTime , prevProcessEnd )
. eq ( EquipResourceEntity : : getGlassCode , glassCodeStr ) ) ;
if ( CollectionUtils . isNotEmpty ( equipResourceList ) ) {
. eq ( EquipResourceEntity : : getWorkCenterId , craft . getWorkCenterId ( ) )
. eq ( EquipResourceEntity : : getCraftId , craft . getCaId ( ) )
. ge ( EquipResourceEntity : : getStartTime , prevProcessEnd )
. eq ( EquipResourceEntity : : getGlassCode , glassCodeStr ) ) ;
if ( CollectionUtils . isNotEmpty ( equipResourceList ) ) {
//计算生产所需产能,需将m2换算成dm2
BigDecimal sumCapacity = order . getYpArea ( ) . multiply ( BigDecimal . valueOf ( order . getYpQty ( ) ) ) ;
for ( EquipResourceEntity equipResource : equipResourceList ) {
if ( equipResource . getRestCapacity ( ) . compareTo ( sumCapacity ) > 0 ) {
for ( EquipResourceEntity equipResource : equipResourceList ) {
if ( equipResource . getRestCapacity ( ) . compareTo ( sumCapacity ) > 0 ) {
//生成车间订单
WorkPlanEntity workPlan = new WorkPlanEntity ( ) ;
workPlan . setStartTime ( equipResource . getStartTime ( ) ) ;
workPlan . setPlan StartTime ( equipResource . getStartTime ( ) ) ;
if ( "0" . equals ( equipResource . getEquipType ( ) ) ) {
workPlan . setEndTime ( equipResource . getStartTime ( ) . plusMinutes ( equipResource . getStandardTime ( ) . longValue ( ) ) ) ;
workPlan . setPlan EndTime ( equipResource . getStartTime ( ) . plusMinutes ( equipResource . getStandardTime ( ) . longValue ( ) ) ) ;
} else {
workPlan . setEndTime ( equipResource . getEndTime ( ) ) ;
workPlan . setPlan EndTime ( equipResource . getEndTime ( ) ) ;
}
workPlan . setWorkQty ( order . getYpQty ( ) ) ;
workPlan . setCaId ( craft . getCaId ( ) ) ;
@ -1383,7 +1411,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
workPlan . setQualifiedQty ( 0 ) ;
workPlan . setUnqualifiedQty ( 0 ) ;
workPlan . setScrapQty ( 0 ) ;
workPlan . setHourQuota ( BigDecimal . valueOf ( ChronoUnit . MINUTES . between ( workPlan . getStartTime ( ) , workPlan . getEndTime ( ) ) ) ) ;
workPlan . setHourQuota ( BigDecimal . valueOf ( ChronoUnit . MINUTES . between ( workPlan . getPlan StartTime ( ) , workPlan . getPlan EndTime ( ) ) ) ) ;
workPlan . setEquipCode ( equipResource . getEquipCode ( ) ) ;
workPlan . setEquipName ( equipResource . getEquipName ( ) ) ;
workPlan . setEquipResourceId ( equipResource . getId ( ) ) ;
@ -1399,7 +1427,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
}
}
map . put ( "isSameFurnace" , isSameFurnace ) ;
map . put ( "isSameFurnace" , isSameFurnace ) ;
return map ;
}
@ -1412,22 +1440,63 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
@Override
public void saveWorkOrderFromBak ( String cardNo ) {
Map < String , Object > paramMap = new HashMap < > ( ) ;
paramMap . put ( "cardNo" , cardNo ) ;
paramMap . put ( "cardNo" , cardNo ) ;
// 恢复老mes排产数据
String url = oldMesUrl + saveWorkOrderFromBak ;
try {
HttpUtil . post ( url + "/" + cardNo , paramMap ) ;
HttpUtil . post ( url + "/" + cardNo , paramMap ) ;
} catch ( Exception e ) {
log . error ( "恢复老mes排产数据报错:" + e . getMessage ( ) ) ;
log . error ( "恢复老mes排产数据报错:" + e . getMessage ( ) ) ;
e . printStackTrace ( ) ;
}
List < String > cardNoList = Arrays . asList ( cardNo . split ( "," ) ) ;
List < YieldOrderEntity > orderList = yieldOrderService . list ( Wrappers . < YieldOrderEntity > lambdaQuery ( ) . in ( YieldOrderEntity : : getCardNo , cardNoList ) ) ;
orderList . forEach ( item - > {
List < YieldOrderEntity > orderList = yieldOrderService . list ( Wrappers . < YieldOrderEntity > lambdaQuery ( ) . in ( YieldOrderEntity : : getCardNo , cardNoList ) ) ;
orderList . forEach ( item - > {
item . setStatus ( YieldOrderEnum . STATUS_RECOVER . getCode ( ) ) ;
yieldOrderService . updateById ( item ) ;
} ) ;
}
@Override
public IPage < WorkPlanVO > selectQuaExecuteAnalysisPage ( IPage < WorkPlanVO > page , WorkPlanVO workPlan ) {
if ( StringUtils . isNotEmpty ( workPlan . getStartTime ( ) ) ) {
workPlan . setStartTime ( workPlan . getStartTime ( ) + " 00:00:00" ) ;
}
if ( StringUtils . isNotEmpty ( workPlan . getEndTime ( ) ) ) {
workPlan . setEndTime ( workPlan . getEndTime ( ) + " 23:59:59" ) ;
}
List < WorkPlanVO > list = baseMapper . selectQuaExecuteAnalysisPage ( page , workPlan ) ;
return page . setRecords ( list ) ;
}
@Override
public List < WorkPlanVO > selectCenterExecuteList ( WorkPlanVO workPlan ) {
List < WorkPlanVO > list = baseMapper . selectCenterExecuteList ( workPlan ) ;
if ( CollectionUtils . isNotEmpty ( list ) ) {
for ( WorkPlanVO vo : list ) {
vo . setEarlyStartCountRate ( vo . getEarlyStartCount ( ) = = 0 ? "0" : Double . parseDouble ( String . format ( "%.2f" , ( double ) vo . getEarlyStartCount ( ) / vo . getTotalOrderCount ( ) ) ) * 100 + "%" ) ;
vo . setOnTimeStartCountRate ( vo . getOnTimeStartCount ( ) = = 0 ? "0" : Double . parseDouble ( String . format ( "%.2f" , ( double ) vo . getOnTimeStartCount ( ) / vo . getTotalOrderCount ( ) ) ) * 100 + "%" ) ;
vo . setDelayStartCountRate ( vo . getDelayStartCount ( ) = = 0 ? "0" : Double . parseDouble ( String . format ( "%.2f" , ( double ) vo . getDelayStartCount ( ) / vo . getTotalOrderCount ( ) ) ) * 100 + "%" ) ;
vo . setEarlyFinishCountRate ( vo . getEarlyFinishCount ( ) = = 0 ? "0" : Double . parseDouble ( String . format ( "%.2f" , ( double ) vo . getEarlyFinishCount ( ) / vo . getTotalOrderCount ( ) ) ) * 100 + "%" ) ;
vo . setOnTimeFinishCountRate ( vo . getOnTimeFinishCount ( ) = = 0 ? "0" : Double . parseDouble ( String . format ( "%.2f" , ( double ) vo . getOnTimeFinishCount ( ) / vo . getTotalOrderCount ( ) ) ) * 100 + "%" ) ;
vo . setDelayFinishCountRate ( vo . getDelayFinishCount ( ) = = 0 ? "0" : Double . parseDouble ( String . format ( "%.2f" , ( double ) vo . getDelayFinishCount ( ) / vo . getTotalOrderCount ( ) ) ) * 100 + "%" ) ;
}
}
return list ;
}
@Override
public IPage < WorkPlanVO > selectOrderExecuteDetailPage ( IPage < WorkPlanVO > page , WorkPlanVO workPlan ) {
if ( StringUtils . isNotEmpty ( workPlan . getStartTime ( ) ) ) {
workPlan . setStartTime ( workPlan . getStartTime ( ) + " 00:00:00" ) ;
}
if ( StringUtils . isNotEmpty ( workPlan . getEndTime ( ) ) ) {
workPlan . setEndTime ( workPlan . getEndTime ( ) + " 23:59:59" ) ;
}
List < WorkPlanVO > list = baseMapper . selectOrderExecuteDetailPage ( page , workPlan ) ;
return page . setRecords ( list ) ;
}
}