@ -138,6 +138,8 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
@Autowired
@Autowired
private ISysParamService iSysParamService ;
private ISysParamService iSysParamService ;
@Resource
@Resource
@Qualifier ( "threadPoolExecutor" )
@Qualifier ( "threadPoolExecutor" )
private ThreadPoolExecutor pool ;
private ThreadPoolExecutor pool ;
@ -232,6 +234,8 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
}
}
// 调用方法获取木箱料号:输入:子卷号、输出:木箱信息
// 调用方法获取木箱料号:输入:子卷号、输出:木箱信息
r . setBox_type ( "" ) ;
r . setBox_type ( "" ) ;
//
PdmBiOrderbominfo bomInfoDao = iPdmBiOrderbominfoService . getBiOrderbominfoByContainer ( r . getContainer_name ( ) ) ;
PdmBiOrderbominfo bomInfoDao = iPdmBiOrderbominfoService . getBiOrderbominfoByContainer ( r . getContainer_name ( ) ) ;
if ( ObjectUtil . isNotEmpty ( bomInfoDao ) ) {
if ( ObjectUtil . isNotEmpty ( bomInfoDao ) ) {
r . setBox_type ( bomInfoDao . getProductName ( ) ) ;
r . setBox_type ( bomInfoDao . getProductName ( ) ) ;
@ -329,11 +333,33 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
. map ( Integer : : parseInt )
. map ( Integer : : parseInt )
. max ( Integer : : compareTo )
. max ( Integer : : compareTo )
. orElse ( 0 ) + 1 ;
. orElse ( 0 ) + 1 ;
//木箱出库任务
outBox ( workIdList , containerNameList , deviceCode , maxBoxGroup , whereJson , totalWeight ) ;
outBox ( workIdList , containerNameList , deviceCode , maxBoxGroup , whereJson , totalWeight ) ;
List < Long > collect = ivtList . stream ( ) . map ( a - > a . getIvt_id ( ) ) . collect ( Collectors . toList ( ) ) ;
List < Long > collect = ivtList . stream ( ) . map ( a - > a . getIvt_id ( ) ) . collect ( Collectors . toList ( ) ) ;
packageinfoivtService . update ( new UpdateWrapper < BstIvtPackageinfoivt > ( )
packageinfoivtService . update ( new UpdateWrapper < BstIvtPackageinfoivt > ( )
. set ( "update_time" , DateUtil . now ( ) )
. set ( "update_time" , DateUtil . now ( ) )
. in ( "ivt_id" , collect ) ) ;
. in ( "ivt_id" , collect ) ) ;
List < PdmBiSubpackagerelation > subList = this . list ( new QueryWrapper < PdmBiSubpackagerelation > ( )
. eq ( "status" , "0" )
. in ( "container_name" , containerNameList ) ) ;
Set < String > containers = subList . stream ( ) . map ( PdmBiSubpackagerelation : : getContainer_name ) . collect ( Collectors . toSet ( ) ) ;
String boxSn = subList . get ( 0 ) . getPackage_box_sn ( ) ;
//子卷到装箱区
agvTransfer ( containers , deviceCode ) ;
PdmBiContainerinbound pdmBiContainerinbound = new PdmBiContainerinbound ( ) ;
pdmBiContainerinbound . setId ( org . nl . common . utils . IdUtil . getStringId ( ) ) ;
pdmBiContainerinbound . setContainer_name ( String . join ( "," , containerNameList ) ) ;
pdmBiContainerinbound . setBox ( boxSn ) ;
Boolean inbound = whereJson . getBoolean ( "inbound" ) ;
if ( inbound ! = null ) {
pdmBiContainerinbound . setInbound ( inbound ) ;
}
iPdmBiContainerinboundService . save ( pdmBiContainerinbound ) ;
}
}
@Override
@Override
@ -363,6 +389,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
throw new BadRequestException ( "子卷编码不能为空" ) ;
throw new BadRequestException ( "子卷编码不能为空" ) ;
}
}
String deviceCode = "ZXQ_1_1" ;
String deviceCode = "ZXQ_1_1" ;
/ * * 任务数校验按照现场情况
int count = taskService . count ( new QueryWrapper < SchBaseTask > ( )
int count = taskService . count ( new QueryWrapper < SchBaseTask > ( )
. eq ( "task_type" , "010908" )
. eq ( "task_type" , "010908" )
. eq ( "is_delete" , "0" )
. eq ( "is_delete" , "0" )
@ -373,7 +400,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
if ( count + count2 > 8 ) {
if ( count + count2 > 8 ) {
throw new BadRequestException ( "当前装箱区木箱任务已满,稍后再试" ) ;
throw new BadRequestException ( "当前装箱区木箱任务已满,稍后再试" ) ;
}
}
* * /
String [ ] split = containerName . split ( "," ) ;
String [ ] split = containerName . split ( "," ) ;
//理论毛重
//理论毛重
List < PdmBiSubpackagerelation > subList = this . list ( new QueryWrapper < PdmBiSubpackagerelation > ( )
List < PdmBiSubpackagerelation > subList = this . list ( new QueryWrapper < PdmBiSubpackagerelation > ( )
@ -383,7 +410,6 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
throw new BadRequestException ( "子卷包装信息与子卷不相符合" ) ;
throw new BadRequestException ( "子卷包装信息与子卷不相符合" ) ;
}
}
Set < String > collect = subList . stream ( ) . map ( PdmBiSubpackagerelation : : getPackage_box_sn ) . collect ( Collectors . toSet ( ) ) ;
Set < String > collect = subList . stream ( ) . map ( PdmBiSubpackagerelation : : getPackage_box_sn ) . collect ( Collectors . toSet ( ) ) ;
Set < String > containers = subList . stream ( ) . map ( PdmBiSubpackagerelation : : getContainer_name ) . collect ( Collectors . toSet ( ) ) ;
List < String > containerList = subList . stream ( ) . map ( PdmBiSubpackagerelation : : getContainer_name ) . collect ( Collectors . toList ( ) ) ;
List < String > containerList = subList . stream ( ) . map ( PdmBiSubpackagerelation : : getContainer_name ) . collect ( Collectors . toList ( ) ) ;
if ( collect . size ( ) = = 0 ) {
if ( collect . size ( ) = = 0 ) {
throw new BadRequestException ( "当前子卷还未进行装箱组盘操作" ) ;
throw new BadRequestException ( "当前子卷还未进行装箱组盘操作" ) ;
@ -394,89 +420,6 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
if ( subList . get ( 0 ) . getQuanlity_in_box ( ) . intValue ( ) ! = split . length ) {
if ( subList . get ( 0 ) . getQuanlity_in_box ( ) . intValue ( ) ! = split . length ) {
throw new BadRequestException ( "当前木箱" + subList . get ( 0 ) . getQuanlity_in_box ( ) + "要装箱的子卷" + split . length + "未装完" ) ;
throw new BadRequestException ( "当前木箱" + subList . get ( 0 ) . getQuanlity_in_box ( ) + "要装箱的子卷" + split . length + "未装完" ) ;
}
}
String boxSn = subList . get ( 0 ) . getPackage_box_sn ( ) ;
//查询木箱所在货位
WQLObject attrTab = WQLObject . getWQLObject ( "st_ivt_structattr" ) ;
JSONArray boxAttrs = attrTab . query ( "storagevehicle_code = '" + boxSn + "' and sect_id = '1748219897940414464'" ) . getResultJSONArray ( 0 ) ;
if ( boxAttrs . size ( ) = = 0 ) {
throw new BadRequestException ( "当前木箱" + boxSn + "库存信息查询不到,请确认" ) ;
}
JSONObject boxAttr = boxAttrs . getJSONObject ( 0 ) ;
List < SchBaseTask > hasTask = taskService . list ( new QueryWrapper < SchBaseTask > ( )
. select ( "point_code2" )
. eq ( "is_delete" , "0" )
. eq ( "point_code1" , boxAttr . getString ( "struct_code" ) )
. lt ( "task_status" , TaskStatusEnum . FINISHED . getCode ( ) ) ) ;
if ( ! CollectionUtils . isEmpty ( hasTask ) ) {
boolean zxq = hasTask . stream ( ) . map ( a - > a . getPoint_code2 ( ) ) . filter ( a - > a . contains ( "ZXQ" ) ) . findAny ( ) . isPresent ( ) ;
if ( zxq ) {
throw new BadRequestException ( "当前子卷正在执行装箱入库操作" ) ;
} else {
throw new BadRequestException ( "当前空木箱" + boxSn + "存在正在执行的任务,稍后再操作" ) ;
}
}
// 查询木箱对应的托盘号
JSONObject jsonVeExt = WQLObject . getWQLObject ( "md_pb_storagevehicleext" ) . query ( "pcsn = '" + boxSn + "'" )
. uniqueResult ( 0 ) ;
if ( ObjectUtil . isEmpty ( jsonVeExt ) ) {
throw new BadRequestException ( "此木箱没有绑定托盘号!" + boxSn ) ;
}
//子卷到装箱区
agvTransfer ( containers , deviceCode , boxSn ) ;
String task_group_id = null ;
if ( boxAttr . getString ( "zdepth" ) . equals ( IOSEnum . ZDEPTH_STRUCT . code ( "深" ) ) ) {
JSONObject 浅Attr = attrTab
. query ( "zdepth = '1' and row_num = '" + boxAttr . getString ( "row_num" ) + "' and col_num = '" + boxAttr . getString ( "col_num" ) + "' and layer_num = '" + boxAttr . getString ( "layer_num" ) + "'" )
. uniqueResult ( 0 ) ;
if ( ObjectUtil . isEmpty ( 浅Attr ) ) {
throw new BadRequestException ( boxAttr . getString ( "struct_code" ) + "对应浅货位信息不正确" ) ;
}
if ( ObjectUtil . isEmpty ( 浅Attr . getString ( "storagevehicle_code" ) ) ) {
if ( ! 浅Attr . getString ( "lock_type" ) . equals ( IOSEnum . LOCK_TYPE . code ( "未锁定" ) ) ) {
throw new BadRequestException ( "木箱货位" + boxAttr . getString ( "struct_code" ) + "的浅货位存在正在执行的任务" ) ;
}
} else {
if ( 浅Attr . getString ( "lock_type" ) . equals ( IOSEnum . LOCK_TYPE . code ( "未锁定" ) ) ) {
// 判断浅货位木箱和深货位木箱是否相同规格
task_group_id = outBoxManageService . createBoxMove ( 浅Attr ) ;
} else if ( 浅Attr . getString ( "lock_type" ) . equals ( IOSEnum . LOCK_TYPE . code ( "验箱出库锁" ) ) ) {
List < SchBaseTask > list = taskService . list ( new QueryWrapper < SchBaseTask > ( )
. eq ( "is_delete" , "0" )
. eq ( "point_code1" , 浅Attr . getString ( "struct_code" ) )
. lt ( "task_status" , TaskStatusEnum . FINISHED . getCode ( ) ) ) ;
if ( ! CollectionUtils . isEmpty ( list ) ) {
throw new BadRequestException ( "当前木箱所在货位" + boxAttr . getString ( "struct_code" ) + "对应浅货位存在任务" + 浅Attr . getString ( "task_code" ) ) ;
}
} else {
throw new BadRequestException ( "当前木箱所在货位" + boxAttr . getString ( "struct_code" ) + "对应浅货位存在任务" + 浅Attr . getString ( "task_code" ) ) ;
}
}
}
PdmBiContainerinbound pdmBiContainerinbound = new PdmBiContainerinbound ( ) ;
pdmBiContainerinbound . setId ( org . nl . common . utils . IdUtil . getStringId ( ) ) ;
pdmBiContainerinbound . setContainer_name ( containerName ) ;
pdmBiContainerinbound . setBox ( boxSn ) ;
Boolean inbound = param . getBoolean ( "inbound" ) ;
if ( inbound ! = null ) {
pdmBiContainerinbound . setInbound ( inbound ) ;
}
iPdmBiContainerinboundService . save ( pdmBiContainerinbound ) ;
// 生成任务
JSONObject jsonTaskParam = new JSONObject ( ) ;
jsonTaskParam . put ( "task_type" , "010704" ) ;
jsonTaskParam . put ( "start_device_code" , boxAttr . getString ( "struct_code" ) ) ;
jsonTaskParam . put ( "next_device_code" , deviceCode ) ;
jsonTaskParam . put ( "vehicle_code" , boxAttr . getString ( "storagevehicle_code" ) ) ;
jsonTaskParam . put ( "vehicle_code2" , jsonVeExt . getString ( "storagevehicle_code" ) ) ;
jsonTaskParam . put ( "task_group_id" , task_group_id ) ;
JSONObject request_param = new JSONObject ( ) ;
request_param . put ( "containerType" , boxAttr . getString ( "storagevehicle_type" ) ) ;
jsonTaskParam . put ( "request_param" , request_param . toString ( ) ) ;
// 锁定起点
boxAttr . put ( "lock_type" , IOSEnum . LOCK_TYPE . code ( "出库锁" ) ) ;
attrTab . update ( boxAttr ) ;
twoOutBoxTask . createTask ( jsonTaskParam ) ;
twoOutBoxTask . immediateNotifyAcs ( null ) ;
PdmProductSpecServiceImpl . doRecord ( SpecEnum . ZXRK , null , Boolean . TRUE , null , containerList ) ;
PdmProductSpecServiceImpl . doRecord ( SpecEnum . ZXRK , null , Boolean . TRUE , null , containerList ) ;
}
}
@ -492,7 +435,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
throw new BadRequestException ( "无选中子卷信息" ) ;
throw new BadRequestException ( "无选中子卷信息" ) ;
}
}
if ( ! packagerelationList . get ( 0 ) . getBox_type ( ) . equals ( whereJson . getString ( "checked" ) ) ) {
if ( ! packagerelationList . get ( 0 ) . getBox_type ( ) . equals ( whereJson . getString ( "checked" ) ) ) {
throw new BadRequestException ( "子卷订单bom 的木箱规格与所选木箱规格不一致,请重新操作" ) ;
throw new BadRequestException ( "分切计划 的木箱规格与所选木箱规格不一致,请重新操作" ) ;
}
}
//检查是否存在已分配规格的子卷号
//检查是否存在已分配规格的子卷号
if ( packagerelationList . stream ( )
if ( packagerelationList . stream ( )
@ -552,19 +495,22 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
updateWrapper . set ( "status" , "0" ) ;
updateWrapper . set ( "status" , "0" ) ;
updateWrapper . in ( "workorder_id" , workIdList ) ;
updateWrapper . in ( "workorder_id" , workIdList ) ;
pdmBiSubpackagerelationMapper . update ( null , updateWrapper ) ;
pdmBiSubpackagerelationMapper . update ( null , updateWrapper ) ;
//给MES传输子卷包装关系
String isOnMes = SpringContextHolder . getBean ( SysParamServiceImpl . class ) . findByCode ( "is_on_mes" ) . getValue ( ) ;
PdmProductSpecServiceImpl . doRecord ( SpecEnum . BZ , null , Boolean . TRUE , null , containerNameList . stream ( ) . collect ( Collectors . toList ( ) ) ) ;
if ( isOnMes . equals ( IOSEnum . IS_NOTANDYES . code ( "是" ) ) ) {
CompletableFuture . runAsync ( ( ) - > {
//给MES传输子卷包装关系
try {
PdmProductSpecServiceImpl . doRecord ( SpecEnum . BZ , null , Boolean . TRUE , null , containerNameList . stream ( ) . collect ( Collectors . toList ( ) ) ) ;
log . error ( "----回传子卷包装关系----" ) ;
CompletableFuture . runAsync ( ( ) - > {
String isConnect2 = SpringContextHolder . getBean ( SysParamServiceImpl . class ) . findByCode ( "IS_CONNECT_MES2" ) . getValue ( ) ;
try {
if ( "1" . equals ( isConnect2 ) ) {
log . error ( "----回传子卷包装关系----" ) ;
transferBoxPackageToMes ( false , whereJson , containerNameList , boxSn , weightTotal ) ;
String isConnect2 = SpringContextHolder . getBean ( SysParamServiceImpl . class ) . findByCode ( "IS_CONNECT_MES2" ) . getValue ( ) ;
if ( "1" . equals ( isConnect2 ) ) {
transferBoxPackageToMes ( false , whereJson , containerNameList , boxSn , weightTotal ) ;
}
} catch ( Exception e ) {
log . error ( "子卷装箱异常,transferBoxPackageToMes给MES传输子卷包装关系异常,木箱号为:" + boxSn + ",异常信息:" + e ) ;
}
}
} catch ( Exception e ) {
} , pool ) ;
log . error ( "子卷装箱异常,transferBoxPackageToMes给MES传输子卷包装关系异常,木箱号为:" + boxSn + ",异常信息:" + e ) ;
}
}
} , pool ) ;
}
}
/ * *
/ * *
@ -736,7 +682,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
}
}
}
}
protected void agvTransfer ( Set < String > containerNameList , String deviceCode , String boxSn ) {
protected void agvTransfer ( Set < String > containerNameList , String deviceCode ) {
//待检区点位
//待检区点位
List < BstIvtPackageinfoivt > djqPointList = packageinfoivtService
List < BstIvtPackageinfoivt > djqPointList = packageinfoivtService
. list ( new LambdaUpdateWrapper < BstIvtPackageinfoivt > ( )
. list ( new LambdaUpdateWrapper < BstIvtPackageinfoivt > ( )