@@ -2,10 +2,8 @@ package org.nl.wms.sch.tasks;
import cn.hutool.core.date.DateUtil ;
import cn.hutool.core.util.IdUtil ;
import cn.hutool.core.util.NumberUtil ;
import cn.hutool.core.util.ObjectUtil ;
import cn.hutool.core.util.StrUtil ;
import com.alibaba.fastjson.JSON ;
import com.alibaba.fastjson.JSONArray ;
import com.alibaba.fastjson.JSONObject ;
import lombok.RequiredArgsConstructor ;
@@ -15,16 +13,11 @@ import org.nl.modules.common.utils.SecurityUtils;
import org.nl.modules.system.util.CodeUtil ;
import org.nl.modules.wql.WQL ;
import org.nl.modules.wql.core.bean.WQLObject ;
import org.nl.modules.wql.util.SpringContextHolder ;
import org.nl.wms.sch.manage.AbstractAcsTask ;
import org.nl.wms.sch.manage.TaskStatusEnum ;
import org.nl.wms.sch.service.PointService ;
import org.nl.wms.sch.service.dto.PointDto ;
import org.springframework.stereotype.Service ;
import org.springframework.transaction.annotation.Transactional ;
import java.math.BigDecimal ;
@Service
@RequiredArgsConstructor
@Slf4j
@@ -64,25 +57,38 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask {
jsonTask . put ( " update_time " , DateUtil . now ( ) ) ;
taskTab . update ( jsonTask ) ;
PointService point = SpringContextHolder . getBean ( PointService . class ) ;
// 校验起点是否存在
PointDto point_code1 = point . findByCode ( jsonTask . getString ( " point_code1 " ) ) ;
if ( ObjectUtil . isEmpty ( point_code1 ) ) throw new BadRequestException ( " 未找到可用点位: " + point_code1 ) ;
// 校验终点是否存在
PointDto point_code2 = point . findByCode ( jsonTask . getString ( " point_code2 " ) ) ;
if ( ObjectUtil . isEmpty ( point_code1 ) ) throw new BadRequestException ( " 未找到可用点位: " + point_code2 ) ;
// 1.更新点位数量 2.解锁点位
int vehicle_qty = JSONObject . parseObject ( JSON . toJSONString ( point_code1 ) ) . getIntValue ( " vehicle_qty " ) ;
BigDecimal vehicle_qty_point = NumberUtil . sub ( Str ing . valueOf ( vehicle_qty ) , String . valueOf ( 1 ) ) ;
point_code1 . setVehicle_qty ( vehicle_qty_point ) ;
if ( StrUtil . equals ( vehicle_qty_point . toString ( ) , " 0 " ) ) {
point_code1 . setPoint_status ( " 00 " ) ;
point_code1 . setVehicle_type ( " " ) ;
String end_ point_code = jsonTask . getString ( " point_code2 " ) ;
String start_point_code = jsonTask . getString ( " point_code1 " ) ;
JSONObject endPoint = pointTab . query ( " point_code = ' " + end_point_code + " ' " ) . uniqueResult ( 0 ) ;
//从空托盘缓存B区或养生A区搬运到叠盘架
if ( StrUtil . equals ( " DPJQB01 " , endPoint . getString ( " region_code " ) ) ) {
//解锁起点
JSONObject startPoint = new JSONObject ( ) ;
startPoint . put ( " lock_type " , " 00 " ) ;
startPoint . put ( " point_status " , " 1 " ) ;
startPoint . put ( " update_time " , DateUtil . now ( ) ) ;
pointTab . update ( startPo int , " point_code = ' " + start_point_code + " ' " ) ;
//更新终点点位状态
endPoint . put ( " point_status " , " 2 " ) ;
endPoint . put ( " lock_type " , " 00 " ) ;
endPoint . put ( " vehicle_qty " , jsonTask . getString ( " vehicle_qty " ) ) ;
endPoint . put ( " vehicle_type " , jsonTask . getString ( " vehicle_type " ) ) ;
endPoint . put ( " update_time " , DateUtil . now ( ) ) ;
pointTab . update ( endPoint ) ;
} else {
JSONObject startPoint = pointTab . query ( " point_code = ' " + start_point_code + " ' " ) . uniqueResult ( 0 ) ;
Integer vehicle_qty = startPoint . getInteger ( " vehicle_qty " ) ;
int after_qty = vehicle_qty - 1 ;
startPoint . put ( " lock_type " , " 00 " ) ;
startPoint . put ( " vehicle_qty " , after_qty ) ;
if ( after_qty > 0 ) {
startPoint . put ( " point_status " , " 2 " ) ;
} else {
startPoint . put ( " point_status " , " 1 " ) ;
}
startPoint . put ( " update_time " , DateUtil . now ( ) ) ;
pointTab . update ( startPoint , " point_code = ' " + start_point_code + " ' " ) ;
}
point_code1 . setLock_type ( " 00 " ) ;
pointTab . update ( JSONObject . parseObject ( JSON . toJSONString ( point_code1 ) ) ) ;
}
}
@@ -91,48 +97,90 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask {
WQLObject taskTab = WQLObject . getWQLObject ( " SCH_BASE_Task " ) ;
WQLObject pointTab = WQLObject . getWQLObject ( " sch_base_point " ) ;
JSONArray taskArr = taskTab . query ( " is_delete = '0' and handle_class = ' " + this . THIS_CLASS + " ' and task_status <> ' " + TaskStatusEnum . FINISHE D. getCode ( ) + " ' " ) . getResultJSONArray ( 0 ) ;
JSONArray taskArr = taskTab . query ( " is_delete = '0' and handle_class = ' " + this . THIS_CLASS + " ' and task_status = ' " + TaskStatusEnum . SURE_EN D. getCode ( ) + " ' " ) . getResultJSONArray ( 0 ) ;
for ( int i = 0 ; i < taskArr . size ( ) ; i + + ) {
// 创建任务
JSONObject jsonTask = taskArr . getJSONObject ( i ) ;
String vehicle_type = jsonTask . getString ( " vehicle_type " ) ;
//判断叠盘位是否有任务
JSONObject taskObj = taskTab . query ( " is_delete='0' and task_type=' " + jsonTask . getString ( " gjxsqkp " ) + " ' and task_status <>' " + TaskStatusEnum . FINISHED . getCode ( ) + " ' " ) . uniqueResult ( 0 ) ;
if ( ObjectUtil . isNotEmpty ( taskObj ) ) {
jsonTask . put ( " task_status " , TaskStatusEnum . SURE_END . getCode ( ) ) ;
jsonTask . put ( " point_code1 " , " " ) ;
} else { //叠盘架无执行中的AGV任务
String vehicle_type = jsonTask . getString ( " vehicle_type " ) ;
//判断叠盘架 是否有载具
JSONObject dpjPoint = point Tab. query ( " is_used ='1' and lock_typ e='00 ' and is_delete='0' and region_code='DPJQB01' and vehicle_qty >0 and can_vehicle_type like '% " + vehicle_type + " %' " ) . uniqueResult ( 0 ) ;
if ( ObjectUtil . isNotEmpty ( dpjPoint ) ) {
jsonTask . put ( " task_status " , TaskStatusEnum . START_AND_POINT . getCode ( ) ) ;
jsonTask . put ( " point_code1 " , dpjPoint . getString ( " point_code " ) ) ;
//锁住点位
dpjPoint . put ( " lock_type " , " 01 " ) ;
pointTab . update ( dpjPoint ) ;
} else { //去缓存位和养生A区找
JSONObject whereParam = new JSONObject ( ) ;
whereParam . put ( " flag " , " 1 " ) ;
whereParam . put ( " vehicle_type " , jsonTask . getString ( " vehicle_type " ) ) ;
JSONObject outJsonObj = WQL . getWO ( " ST_VEHICLE_OUT_01 " ) . addParamMap ( whereParam ) . process ( ) . uniqueResult ( 0 ) ;
jsonTask . put ( " task_status " , TaskStatusEnum . START_AND_POINT . getCode ( ) ) ;
jsonTask . put ( " point_code1 " , outJsonObj . getString ( " point_code " ) ) ;
//锁住点位
dpjPoint . put ( " lock_type " , " 01 " ) ;
pointTab . update ( outJsonObj ) ;
}
//判断叠盘位 是否有另外任务
JSONObject taskObj = task Tab. query ( " is_delet e='0' and handle_class=' " + this . THIS_CLASS + " ' and task_status <>' " + TaskStatusEnum . FINISHED . getCode ( ) + " ' and task_id <> " + jsonTask . getLong ( " task_id " ) ) . uniqueResult ( 0 ) ;
if ( ObjectUtil . isNotEmpty ( taskObj ) ) continue ;
//判断叠盘架是否有载具
JSONObject dpjPoint = pointTab . query ( " is_used ='1' and lock_type='00' and is_delete='0' and region_code='DPJQB01' and vehicle_qty >0 and can_vehicle_type like '% " + vehicle_type + " %' " ) . uniqueResult ( 0 ) ;
if ( ObjectUtil . isNotEmpty ( dpjPoint ) ) {
jsonTask . put ( " task_status " , TaskStatusEnum . START_AND_POINT . getCode ( ) ) ;
jsonTask . put ( " point_code1 " , dpjPoint . getString ( " point_code " ) ) ;
jsonTask . put ( " update_time " , DateUtil . now ( ) ) ;
taskTab . update ( jsonTask ) ;
//锁住点位
dpjPoint . put ( " lock_type " , " 01 " ) ;
pointTab . update ( dpjPoint ) ;
} else {
//查找叠盘架编码
JSONObject dpjPoint1 = pointTab . query ( " is_delete='0' and region_code='DPJQB01' and can_vehicle_type like '% " + vehicle_type + " %' " ) . uniqueResult ( 0 ) ;
//叠盘架无载具:1-判断是否有在执行中的堆叠任务, 有则等堆叠任务完成以后再去, 否则去去缓存位和养生A区找
JSONObject ddTask = taskTab . query ( " is_delete='0' and point_code2 = ' " + dpjPoint1 . getString ( " point_code " ) + " ' " ) . uniqueResult ( 0 ) ;
if ( ObjectUtil . isNotEmpty ( ddTask ) ) continue ;
//去缓存位和养生A区找,生成到叠盘架的任务
JSONObject whereParam = new JSONObject ( ) ;
whereParam . put ( " flag " , " 1 " ) ;
whereParam . put ( " vehicle_type " , '%' + jsonTask . getString ( " vehicle_type " ) + " % " ) ;
JSONObject outJsonObj = WQL . getWO ( " ST_VEHICLE_OUT_01 " ) . addParamMap ( whereParam ) . process ( ) . uniqueResult ( 0 ) ;
// 空托盘缓存货架或者养生A区------>叠盘架B区
JSONObject param = new JSONObject ( ) ;
Long task_id = IdUtil . getSnowflake ( 1 , 1 ) . nextId ( ) ;
Long task_group_id = IdUtil . getSnowflake ( 1 , 1 ) . nextId ( ) ;
param . put ( " task_id " , task_id ) ;
param . put ( " task_code " , CodeUtil . getNewCode ( " TASK_CODE " ) ) ;
param . put ( " vehicle_type " , vehicle_type ) ;
param . put ( " priority " , 100 ) ;
param . put ( " handle_class " , THIS_CLASS ) ;
param . put ( " task_type " , " kzj " ) ;
param . put ( " task_status " , TaskStatusEnum . START_AND_POINT . getCode ( ) ) ;
param . put ( " task_group_id " , task_group_id ) ;
param . put ( " sort_seq " , 1 ) ;
param . put ( " point_code1 " , outJsonObj . getString ( " point_code " ) ) ;
param . put ( " point_code2 " , dpjPoint1 . getString ( " point_code " ) ) ;
param . put ( " create_name " , SecurityUtils . getCurrentUsername ( ) ) ;
param . put ( " create_id " , SecurityUtils . getCurrentUserId ( ) ) ;
param . put ( " create_time " , DateUtil . now ( ) ) ;
taskTab . insert ( param ) ;
//锁住起点
outJsonObj . put ( " lock_type " , " 01 " ) ;
pointTab . update ( outJsonObj ) ;
this . renotifyAcs ( String . valueOf ( task_id ) ) ;
jsonTask . put ( " task_status " , TaskStatusEnum . START_AND_POINT . getCode ( ) ) ;
jsonTask . put ( " point_code1 " , outJsonObj . getString ( " point_code " ) ) ;
jsonTask . put ( " sort_seq " , 2 ) ;
jsonTask . put ( " task_group_id " , task_group_id ) ;
jsonTask . put ( " remark " , " 叠盘架无载具! " ) ;
taskTab . update ( jsonTask ) ;
//锁住点位
dpjPoint1 . put ( " lock_type " , " 01 " ) ;
pointTab . update ( outJsonObj ) ;
}
}
}
@Override
@Transactional ( rollbackFor = Exception . class )
public String createTask ( JSONObject form ) {
WQLObject taskTab = WQLObject . getWQLObject ( " SCH_BASE_Task " ) ;
String end_point_code = form . getString ( " point_code2 " ) ;
String vehicle_type = form . getString ( " vehicle_type " ) ;