@@ -67,6 +67,9 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource ;
import java.lang.reflect.Method ;
import java.time.LocalDate ;
import java.time.LocalDateTime ;
import java.time.format.DateTimeFormatter ;
import java.util.* ;
import java.util.concurrent.TimeUnit ;
import java.util.stream.Collectors ;
@@ -1790,14 +1793,16 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
// 这个情况是有agv任务在搬去待检区或管制区的路上, 还没有更新任务状态; 需要查询是否有这种任务, 等这个任务更新完后,
// 再补发之前创建的输送线到满轴缓存位任务;
log . info ( " 二楼到一楼, 成品子卷到达一楼输送线, sendProductToFirstFloor--------------------------: " + whereJson . toString ( ) ) ;
JSONObject result = new JSONObject ( ) ;
if ( StringUtils . isBlank ( whereJson . getString ( " device_code " ) ) | | StringUtils . isBlank ( whereJson . getString ( " material_barcode " ) ) ) {
throw new BadRequestException ( " 接口sendProductToFirstFloor, 目标站点或子卷号参数为空! " ) ;
}
if ( whereJson . getString ( " device_code " ) . equals ( " null " ) | | whereJson . getString ( " material_barcode " ) . equals ( " null " ) ) {
throw new BadRequestException ( " 接口sendProductToFirstFloor, 目标站点或子卷号参数为null! " ) ;
}
RLock lock = redissonClient . getLock ( whereJson . getString ( " material_barcode " ) ) ;
String containerName = whereJson . getString ( " material_barcode " ) ;
JSONObject result = new JSONObject ( ) ;
result . put ( " data " , containerName ) ;
RLock lock = redissonClient . getLock ( containerName ) ;
boolean tryLock = lock . tryLock ( 0 , TimeUnit . SECONDS ) ;
try {
if ( tryLock ) {
@@ -1807,10 +1812,12 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
. orderByAsc ( BstIvtPackageinfoivt : : getSort_seq ) ) ;
List < BstIvtPackageinfoivt > mzPointList = bstIvtPackageinfoivtList . stream ( )
. filter ( r - > PackageInfoIvtEnum . POINT_STATUS . code ( " 满轴缓存位 " ) . equals ( r . getPoint_status ( ) )
& & PackageInfoIvtEnum . IVT_STATUS . code ( " 空 " ) . equals ( r . getIvt_status ( ) ) ) . collect ( Collectors . toList ( ) ) ;
& & PackageInfoIvtEnum . IVT_STATUS . code ( " 空 " ) . equals ( r . getIvt_status ( ) ) )
. sorted ( Comparator . comparing ( BstIvtPackageinfoivt : : getSort_seq ) . reversed ( ) ) . collect ( Collectors . toList ( ) ) ;
JSONObject jo = new JSONObject ( ) ;
jo . put ( " acs_task_type " , PackageInfoIvtEnum . ACS_TASK_TYPE . code ( " 桁架任务 " ) ) ;
jo . put ( " vehicle_code " , whereJson . getString ( " material_barcode " ) ) ;
jo . put ( " vehicle_code " , containerName ) ;
//2.创建输送线->满轴位桁架任务,
String point_code1 = whereJson . getString ( " device_code " ) ;
jo . put ( " point_code1 " , point_code1 ) ;
@@ -1820,56 +1827,30 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
List < BstIvtPackageinfoivt > kzjPointList = bstIvtPackageinfoivtList . stream ( )
. filter ( r - > PackageInfoIvtEnum . POINT_STATUS . code ( " 空载具缓存位 " ) . equals ( r . getPoint_status ( ) )
& & PackageInfoIvtEnum . IVT_STATUS . code ( " 空载具 " ) . equals ( r . getIvt_status ( ) ) )
. sorted ( Comparator . comparing ( BstIvtPackageinfoivt : : getSort_seq ) . reversed ( ) ). collect ( Collectors . toList ( ) ) ;
. sorted ( Comparator . comparing ( BstIvtPackageinfoivt : : getSort_seq ) ) . collect ( Collectors . toList ( ) ) ;
//空载具缓存位有空载具,桁架取空载具从外到里取空载具,升序
if ( CollectionUtils . isNotEmpty ( kzjPointList ) ) {
// 创建前先判断是否有已创建相同 任务
List < SchBaseTask > existTaskList = getExistTasks ( PackageInfoIvtEnum . TASK_TYPE . code ( " 输送线四个点任务 " ) ) ;
if ( CollectionUtils . isEmpty ( existTaskList ) ) {
jo . put ( " point_code3 " , kzjPointList . get ( 0 ) . getPoint_code ( ) ) ;
//终点为输送线点位
jo . put ( " point_code4 " , whereJson . getString ( " device_code " ) ) ;
jo . put ( " task_type " , PackageInfoIvtEnum . TASK_TYPE . code ( " 输送线四个点任务 " ) ) ;
jo . put ( " is_send " , true ) ;
mzhcwTask . createTask ( jo ) ;
}
//创建输送线四个点 任务
return createTask ( containerName , jo , kzjPointList . get ( 0 ) . getPoint_code ( ) , whereJson . getString ( " device_code " ) ) ;
} else {
//如果空载具缓存位确少空载具, 创建输送线->满轴缓存位两个点任务
List < SchBaseTask > existTaskList = getExist Tasks ( PackageInfoIvtEnum . TASK_TYPE . code ( " 输送线->满轴缓存位 " ) ) ;
if ( CollectionUtils . isEmpty ( existTaskList ) ) {
jo . put ( " task_type " , PackageInfoIvtEnum . TASK_TYPE . code ( " 输送线->满轴缓存位 " ) ) ;
jo . put ( " is_send " , true ) ;
mzhcwTask . createTask ( jo ) ;
}
//空载具缓存位缺少空载具,下发一个确定终点的空载具缓存位->输送线任务
List < SchBaseTask > existTasks = getExistTasks ( PackageInfoIvtEnum . TASK_TYPE . code ( " 放空(空载具缓存位->输送线) " ) ) ;
if ( CollectionUtils . isEmpty ( existTasks ) ) {
JSONObject jo1 = new JSONObject ( ) ;
//创建确定终点任务
jo1 . put ( " acs_task_type " , PackageInfoIvtEnum . ACS_TASK_TYPE . code ( " 桁架任务 " ) ) ;
jo1 . put ( " task_type " , PackageInfoIvtEnum . TASK_TYPE . code ( " 放空(空载具缓存位->输送线) " ) ) ;
jo1 . put ( " point_code2 " , " NBJ1002 " ) ;
jo1 . put ( " task_status " , TaskStatusEnum . SURE_END . getCode ( ) ) ;
jo1 . put ( " is_send " , false ) ;
ssxDjwTask . createTask ( jo1 ) ;
}
//创建输送线->满轴缓存位两个点任务
return create Task2 ( containerName , jo ) ;
}
result . put ( " status " , HttpStatus . OK . value ( ) ) ;
result . put ( " message " , " 反馈成功! " ) ;
} else {
// 如果满轴位没有可用的空点位,先创建一个桁架任务但是不下发,等这边空出来点位,判断是否有这种桁架任务然后补发;
// List< SchBaseTask> existTaskList = getExistTasks( PackageInfoIvtEnum. TASK_TYPE.code("输送线->满轴缓存位")) ;
// // 如果有就不创建,没有就创建
// if ( CollectionUtils. isEmpty( existTaskList)) {
// //只确定起点NBJ1002
// JSONObject jo2 = new JSONObject() ;
// jo2.put(" acs_task_type", PackageInfoIvtEnum. ACS_TASK_TYPE.code("桁架任务")) ;
// jo2.put("task_type", PackageInfoIvtEnum. TASK_TYPE.code("输送线->满轴缓存位")) ;
// jo2.put("point_code1", "NBJ1002") ;
// jo.put("task_status", TaskStatusEnum. SURE_START. getCode()) ;
// jo2.put("is_send", false) ;
// mzhcwTask. createTask(jo2) ;
// }
//如果满轴位没有可用的空点位,先创建一个桁架任务但是不下发,等这边空出来点位,判断是否有这种桁架任务然后补发;
List < SchBaseTask> existTaskList = getExistTasks( PackageInfoIvtEnum. TASK_TYPE. code ( " 输送线->满轴缓存位 " ) , containerName ) ;
//如果有就不创建,没有就创建
if ( CollectionUtils. isEmpty( existTaskList) ) {
//只确定起点NBJ1002
JSONObject jo2 = new JSONObject( ) ;
jo2 . put ( " acs_task_type" , PackageInfoIvtEnum. ACS_TASK_TYPE. code ( " 桁架任务 " ) ) ;
jo2 . put ( " task_type " , PackageInfoIvtEnum. TASK_TYPE. code ( " 输送线->满轴缓存位 " ) ) ;
jo2 . put ( " point_code1 " , " NBJ1002 " ) ;
jo . put ( " task_status " , TaskStatusEnum. SURE_START. getCode( ) ) ;
jo2. put ( " is_send " , false ) ;
mzhcwTask. createTask( jo2 ) ;
}
result . put ( " data " , containerName ) ;
result . put ( " status " , HttpStatus . BAD_REQUEST . value ( ) ) ;
result . put ( " message " , " 满轴缓存位暂无空位! " ) ;
}
@@ -1886,6 +1867,61 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
return result ;
}
private JSONObject createTask2 ( String containerName , JSONObject jo ) {
JSONObject result = new JSONObject ( ) ;
result . put ( " data " , containerName ) ;
//如果空载具缓存位确少空载具,创建输送线->满轴缓存位两个点任务
List < SchBaseTask > existTaskList = getExistTasks ( PackageInfoIvtEnum . TASK_TYPE . code ( " 输送线->满轴缓存位 " ) ) ;
List < SchBaseTask > existTaskList1 = getExistTasks ( PackageInfoIvtEnum . TASK_TYPE . code ( " 输送线->满轴缓存位 " ) , containerName ) ;
if ( CollectionUtils . isEmpty ( existTaskList1 ) ) {
jo . put ( " task_type " , PackageInfoIvtEnum . TASK_TYPE . code ( " 输送线->满轴缓存位 " ) ) ;
jo . put ( " is_send " , true ) ;
mzhcwTask . createTask ( jo ) ;
//空载具缓存位缺少空载具,下发一个确定终点的空载具缓存位->输送线任务
List < SchBaseTask > existTasks = getExistTasks ( PackageInfoIvtEnum . TASK_TYPE . code ( " 放空(空载具缓存位->输送线) " ) ) ;
List < SchBaseTask > existTask1 = getExistTasks ( PackageInfoIvtEnum . TASK_TYPE . code ( " 放空(空载具缓存位->输送线) " ) , containerName ) ;
if ( CollectionUtils . isEmpty ( existTask1 ) ) {
JSONObject jo1 = new JSONObject ( ) ;
//创建确定终点任务
jo1 . put ( " acs_task_type " , PackageInfoIvtEnum . ACS_TASK_TYPE . code ( " 桁架任务 " ) ) ;
jo1 . put ( " task_type " , PackageInfoIvtEnum . TASK_TYPE . code ( " 放空(空载具缓存位->输送线) " ) ) ;
jo1 . put ( " point_code2 " , " NBJ1002 " ) ;
jo1 . put ( " vehicle_code " , containerName ) ;
jo1 . put ( " task_status " , TaskStatusEnum . SURE_END . getCode ( ) ) ;
jo1 . put ( " is_send " , false ) ;
ssxDjwTask . createTask ( jo1 ) ;
}
result . put ( " status " , HttpStatus . OK . value ( ) ) ;
result . put ( " message " , " 反馈成功! " ) ;
} else {
result . put ( " status " , HttpStatus . BAD_REQUEST . value ( ) ) ;
result . put ( " message " , " 该子卷号: " + containerName + " 桁架任务已存在,二楼下一楼存在相同子卷号,请检查! " ) ;
}
return result ;
}
private JSONObject createTask ( String containerName , JSONObject jo , String pointCode3 , String pointCode4 ) {
JSONObject result = new JSONObject ( ) ;
result . put ( " data " , containerName ) ;
// 创建前先判断是否有已创建相同任务
List < SchBaseTask > existTaskList = getExistTasks ( PackageInfoIvtEnum . TASK_TYPE . code ( " 输送线四个点任务 " ) ) ;
List < SchBaseTask > existTaskList1 = getExistTasks ( PackageInfoIvtEnum . TASK_TYPE . code ( " 输送线四个点任务 " ) , containerName ) ;
if ( CollectionUtils . isEmpty ( existTaskList1 ) ) {
jo . put ( " point_code3 " , pointCode3 ) ;
//终点为输送线点位
jo . put ( " point_code4 " , pointCode4 ) ;
jo . put ( " task_type " , PackageInfoIvtEnum . TASK_TYPE . code ( " 输送线四个点任务 " ) ) ;
jo . put ( " is_send " , true ) ;
mzhcwTask . createTask ( jo ) ;
result . put ( " status " , HttpStatus . OK . value ( ) ) ;
result . put ( " message " , " 反馈成功! " ) ;
} else {
result . put ( " status " , HttpStatus . BAD_REQUEST . value ( ) ) ;
result . put ( " message " , " 该子卷号: " + containerName + " 桁架任务已存在,二楼下一楼存在相同子卷号,请检查! " ) ;
}
return result ;
}
private List < SchBaseTask > getExistTasks ( String taskType ) {
return taskService . list ( new LambdaUpdateWrapper < SchBaseTask > ( )
. eq ( SchBaseTask : : getTask_type , taskType )
@@ -1893,6 +1929,17 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
. eq ( SchBaseTask : : getIs_delete , IOSEnum . IS_NOTANDYES . code ( " 否 " ) ) ) ;
}
private List < SchBaseTask > getExistTasks ( String taskType , String containerName ) {
String startTime = LocalDate . now ( ) . atStartOfDay ( ) . format ( DateTimeFormatter . ofPattern ( " yyyy-MM-dd HH:mm:ss " ) ) ;
return taskService . list ( new LambdaQueryWrapper < SchBaseTask > ( )
. eq ( SchBaseTask : : getTask_type , taskType )
. eq ( SchBaseTask : : getVehicle_code , containerName )
. gt ( SchBaseTask : : getCreate_time , startTime )
. eq ( SchBaseTask : : getIs_delete , IOSEnum . IS_NOTANDYES . code ( " 否 " ) )
) ;
}
@Override
@Transactional ( rollbackFor = Exception . class )
@@ -2423,4 +2470,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
point . update ( jsonParam , " region_code = 'ZC01' AND block_num = ' " + block_num + " ' AND row_num = ' " + row_num + " ' AND layer_num = '1' " ) ;
}
@Override
public JSONObject actionFinishRequest2 ( JSONObject param ) {
return slitterService . acsActionFinishRequestToRelease ( param ) ;
}
}