@ -113,7 +113,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
public MesWorkOrder insert ( MesWorkOrder bean ) {
//校验产线与工位的关系
boolean relationResult = checkWorkCenterPartRelation ( bean . getWorkCenterCode ( ) , bean . getPartNo ( ) ) ;
if ( ! relationResult ) {
if ( ! relationResult & & ( StringUtil . isEmpty ( bean . getOrderFlag ( ) ) | | ! MesExtEnumUtil . ORDER_TYPE_IDENTIFICATION . P . getValue ( ) . equals ( bean . getOrderFlag ( ) ) ) ) {
MesException . throwMesBusiException ( String . format ( "工单产线【%s】与工单零件【%s】没有维护产线零件关系" , bean . getWorkCenterCode ( ) , bean . getPartNo ( ) ) ) ;
}
//获取相同类型 相同标识 生产序号最大值的
@ -305,11 +305,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
MesExtEnumUtil . ORDER_TYPE_IDENTIFICATION . S . getValue ( ) ,
MesExtEnumUtil . ORDER_TYPE_IDENTIFICATION . P . getValue ( ) ) ) ;
}
//获取生产版本
MesProductVersion mesProductVersion = getMesProductVersion ( item , mesWorkCenter ) ;
item . setProductVersion ( mesProductVersion . getProductVersion ( ) ) ;
//获取bom信息
List < MesBom > bomList = mesBomService . findMesBomByPartNoAndBomVersion ( item . getPartNo ( ) , item . getOrganizeCode ( ) , mesProductVersion . getAlternativePartList ( ) ) ;
//校验VIN号是否重复
if ( ! StringUtil . isEmpty ( item . getVinCode ( ) ) ) {
//校验vin号是否重复
ddlPackBean = DdlPackBean . getDdlPackBean ( item . getOrganizeCode ( ) ) ;
@ -320,11 +316,10 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
//排序工单数量为1
item . setQty ( 1d ) ;
// 是否自动发布
isAuto( item , saveMesWorkOrderToWms , bomList ) ;
// 发送工单给WMS
sendToWms( item , mesWorkCenter , saveMesWorkOrderToWms ) ;
} else if ( item . getWorkOrderType ( ) = = MesExtEnumUtil . ORDER_TYPE . UN_SORT . getValue ( ) ) {
ValidatorBean . checkNotNull ( item . getOrderFlag ( ) , "标识不能为空" ) ;
ValidatorBean . checkNotNull ( item . getProductVersion ( ) , "生产版本不能为空" ) ;
if ( Objects . isNull ( item . getQty ( ) ) | | item . getQty ( ) < = 0d ) {
MesException . throwMesBusiException ( "生产数量不能小于等于0" ) ;
}
@ -341,26 +336,25 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
, MesExtEnumUtil . ORDER_TYPE_IDENTIFICATION . N . getValue ( ) ,
MesExtEnumUtil . ORDER_TYPE_IDENTIFICATION . P . getValue ( ) ) ) ;
}
//校验物料生产版本是否存在
MesProductVersion mesProductVersion = checkMesProductVersion ( item ) ;
//获取bom信息
List < MesBom > bomList = mesBomService . findMesBomByPartNoAndBomVersion ( item . getPartNo ( ) , item . getOrganizeCode ( ) , mesProductVersion . getAlternativePartList ( ) ) ;
item . setWorkOrderStatus ( MesExtEnumUtil . ORDER_STATUS . RELEASE . getValue ( ) ) ;
//发送工单信息给WMS
saveMesWorkOrderToWms . addAll ( mesWorkOrderToWmsService . saveMesWorkOrderToWms ( item , bomList ) ) ;
//非试制单
if ( ! MesExtEnumUtil . ORDER_TYPE_IDENTIFICATION . P . getValue ( ) . equals ( item . getOrderFlag ( ) ) ) {
ValidatorBean . checkNotNull ( item . getProductVersion ( ) , "生产版本不能为空" ) ;
//校验物料生产版本是否存在
MesProductVersion mesProductVersion = checkMesProductVersion ( item ) ;
//获取bom信息
List < MesBom > bomList = mesBomService . findMesBomByPartNoAndBomVersion ( item . getPartNo ( ) , item . getOrganizeCode ( ) , mesProductVersion . getAlternativePartList ( ) ) ;
//发送工单信息给WMS
saveMesWorkOrderToWms . addAll ( mesWorkOrderToWmsService . saveMesWorkOrderToWms ( item , bomList ) ) ;
}
} else {
ValidatorBean . checkNotNull ( item . getPlanStartTime ( ) , "计划开始时间不能为空" ) ;
ValidatorBean . checkNotNull ( item . getPlanEndTime ( ) , "计划结束时间不能为空" ) ;
if ( Objects . isNull ( item . getQty ( ) ) | | item . getQty ( ) < = 0d ) {
MesException . throwMesBusiException ( "生产数量不能小于等于0" ) ;
}
//获取生产版本
MesProductVersion mesProductVersion = getMesProductVersion ( item , mesWorkCenter ) ;
item . setProductVersion ( mesProductVersion . getProductVersion ( ) ) ;
//获取bom信息
List < MesBom > bomList = mesBomService . findMesBomByPartNoAndBomVersion ( item . getPartNo ( ) , item . getOrganizeCode ( ) , mesProductVersion . getAlternativePartList ( ) ) ;
//是否自动发布
isAuto ( item , saveMesWorkOrderToWms , bomList ) ;
//发送工单给WMS
sendToWms ( item , mesWorkCenter , saveMesWorkOrderToWms ) ;
}
//物料名称不存在,从物料信息中获取
MesPartSap mesPart = iMesPartSapService . getMesPartSapByPartNo ( item . getPartNo ( ) , item . getOrganizeCode ( ) ) ;
@ -381,6 +375,20 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
}
private void sendToWms ( MesWorkOrder item , MesWorkCenter mesWorkCenter , List < MesWorkOrderToWms > saveMesWorkOrderToWms ) {
//非试制单
List < MesBom > bomList = null ;
if ( ! MesExtEnumUtil . ORDER_TYPE_IDENTIFICATION . P . getValue ( ) . equals ( item . getOrderFlag ( ) ) ) {
//获取生产版本
MesProductVersion mesProductVersion = getMesProductVersion ( item , mesWorkCenter ) ;
item . setProductVersion ( mesProductVersion . getProductVersion ( ) ) ;
//获取bom信息
bomList = mesBomService . findMesBomByPartNoAndBomVersion ( item . getPartNo ( ) , item . getOrganizeCode ( ) , mesProductVersion . getAlternativePartList ( ) ) ;
}
//是否自动发布
isAuto ( item , saveMesWorkOrderToWms , bomList ) ;
}
private void isAuto ( MesWorkOrder item , List < MesWorkOrderToWms > saveMesWorkOrderToWms , List < MesBom > bomList ) {
MesPartProdGroup mesPartProdGroup = null ;
if ( StringUtil . isEmpty ( item . getPartProdGroupCode ( ) ) ) {
@ -400,7 +408,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
if ( CommonEnumUtil . VALID = = mesPartProdGroup . getIsAutoRelease ( ) ) {
item . setWorkOrderStatus ( MesExtEnumUtil . ORDER_STATUS . RELEASE . getValue ( ) ) ;
//发送工单信息给WMS
saveMesWorkOrderToWms . addAll ( mesWorkOrderToWmsService . saveMesWorkOrderToWms ( item , bomList ) ) ;
if ( ! Objects . isNull ( bomList ) ) {
saveMesWorkOrderToWms . addAll ( mesWorkOrderToWmsService . saveMesWorkOrderToWms ( item , bomList ) ) ;
}
} else {
item . setWorkOrderStatus ( MesExtEnumUtil . ORDER_STATUS . CREATE . getValue ( ) ) ;
}
@ -868,6 +878,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
} else {
mesWorkOrderDb . setWorkOrderStatus ( MesExtEnumUtil . ORDER_STATUS . PROCESS . getValue ( ) ) ;
}
mesWorkOrderDb . setCompleteQty ( mesWorkOrderDb . getReportedQty ( ) ) ;
} else {
//报工调整数量加-
mesWorkOrderDb . setAdjustQty ( ( MathOperation . add ( mesWorkOrder . getNum ( ) , mesWorkOrderDb . getAdjustQty ( ) ) ) ) ;
@ -913,12 +924,27 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
double unCompleteQty = MathOperation . sub ( mesWorkOrder . getQty ( ) , mesWorkOrder . getReportedQty ( ) ) ;
mesWorkOrder . setUnCompleteQty ( unCompleteQty > 0 ? unCompleteQty : 0 ) ;
if ( mesWorkOrder . getReportedQty ( ) > mesWorkOrder . getQty ( ) ) {
MesException . throwMesBusiException ( "工单报工数量大于工单数量【%s】,不允许报工" , mesWorkOrder . getQty ( ) ) ;
//查询产线信息
DdlPackBean ddlPackBean = DdlPackBean . getDdlPackBean ( mesWorkOrder . getOrganizeCode ( ) ) ;
DdlPreparedPack . getStringEqualPack ( mesWorkOrder . getWorkCenterCode ( ) , "workCenterCode" , ddlPackBean ) ;
MesWorkCenter workCenter = mesWorkCenterRDao . getByProperty ( ddlPackBean ) ;
// 以下则是超工单逻辑
// 如果产线中没有配置超工单,则直接阻断
if ( ! Objects . equals ( CommonEnumUtil . TRUE_OR_FALSE . TRUE . getValue ( ) , workCenter . getIsCheckOrderQty ( ) ) ) {
MesException . throwMesBusiException ( "请检查工单数量,工单号[%s],工单数量[%s]报工数量[%s],且未配置超工单!" , mesWorkOrder . getWorkOrderNo ( ) , mesWorkOrder . getQty ( ) , mesWorkOrder . getReportedQty ( ) ) ;
}
// 如果配置了超工单,且比例已经超过了配置的超工单比例,也需要阻断
double rate = ( mesWorkOrder . getReportedQty ( ) - mesWorkOrder . getQty ( ) ) / mesWorkOrder . getQty ( ) ;
if ( rate > workCenter . getOrderRate ( ) ) {
MesException . throwMesBusiException ( "请检查工单数量,工单号[%s],工单数量[%s]报工数量[%s],配置了超工单,但超过了比例[%s]!" , mesWorkOrder . getWorkOrderNo ( ) , mesWorkOrder . getQty ( ) , mesWorkOrder . getReportedQty ( ) , workCenter . getOrderRate ( ) ) ;
}
mesWorkOrder . setWorkOrderStatus ( MesExtEnumUtil . ORDER_STATUS . COMPLETE . getValue ( ) ) ;
} else if ( Objects . equals ( mesWorkOrder . getReportedQty ( ) , mesWorkOrder . getQty ( ) ) ) {
mesWorkOrder . setWorkOrderStatus ( MesExtEnumUtil . ORDER_STATUS . COMPLETE . getValue ( ) ) ;
} else {
mesWorkOrder . setWorkOrderStatus ( MesExtEnumUtil . ORDER_STATUS . PROCESS . getValue ( ) ) ;
}
mesWorkOrder . setCompleteQty ( mesWorkOrder . getReportedQty ( ) ) ;
} else {
//报工调整数量加-
mesWorkOrder . setAdjustQty ( ( MathOperation . add ( mesWorkOrderNew . getNum ( ) , mesWorkOrder . getAdjustQty ( ) ) ) ) ;