@ -9,22 +9,20 @@ import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor ;
import lombok.RequiredArgsConstructor ;
import lombok.extern.slf4j.Slf4j ;
import lombok.extern.slf4j.Slf4j ;
import org.apache.commons.lang3.StringUtils ;
import org.apache.commons.lang3.StringUtils ;
import org.nl.config.ConfigParam ;
import org.nl.modules.common.exception.BadRequestException ;
import org.nl.modules.common.exception.BadRequestException ;
import org.nl.modules.common.utils.SecurityUtils ;
import org.nl.modules.common.utils.SecurityUtils ;
import org.nl.modules.system.util.CodeUtil ;
import org.nl.modules.system.util.CodeUtil ;
import org.nl.modules.wql.WQL ;
import org.nl.modules.wql.WQL ;
import org.nl.modules.wql.core.bean.WQLObject ;
import org.nl.modules.wql.core.bean.WQLObject ;
import org.nl.wms.sch.SchTaskDto ;
import org.nl.wms.sch.SchTaskDto ;
import org.nl.wms.sch.manage.AbstractAcsTask ;
import org.nl.wms.sch.manage.* ;
import org.nl.wms.sch.manage.TaskStatusEnum ;
import org.nl.wms.sch.tasks.AcsTaskDto ;
import org.nl.wms.sch.tasks.AcsTaskDto ;
import org.nl.wms.sch.tasks.PointUpdateUtil ;
import org.nl.wms.util.IdUtil ;
import org.nl.wms.util.IdUtil ;
import org.springframework.stereotype.Service ;
import org.springframework.stereotype.Service ;
import org.springframework.transaction.annotation.Transactional ;
import java.util.* ;
import java.util.* ;
import java.util.function.BiConsumer ;
import java.util.function.Predicate ;
/ * *
/ * *
* @author : lyd
* @author : lyd
@ -36,8 +34,6 @@ import java.util.function.Predicate;
@Slf4j
@Slf4j
public class YzjCallMaterialTask extends AbstractAcsTask {
public class YzjCallMaterialTask extends AbstractAcsTask {
private final String THIS_CLASS = YzjCallMaterialTask . class . getName ( ) ;
private final String THIS_CLASS = YzjCallMaterialTask . class . getName ( ) ;
//start point,[endpoint1,endpoin2]
public static Map < String , String > YZJ_OLD_POINT = new HashMap < > ( ) ;
/ * *
/ * *
* 添加任务进行下发
* 添加任务进行下发
*
*
@ -87,7 +83,7 @@ public class YzjCallMaterialTask extends AbstractAcsTask {
// 物料点
// 物料点
JSONObject material_point = pointTab . query ( "point_code = '" + taskObj . getString ( "point_code1" ) + "'" ) . uniqueResult ( 0 ) ;
JSONObject material_point = pointTab . query ( "point_code = '" + taskObj . getString ( "point_code1" ) + "'" ) . uniqueResult ( 0 ) ;
//任务取消
//任务取消
if ( StrUtil . equals ( status , "0" ) ) {
if ( StrUtil . equals ( status , UpdateTaskStatusEnum . CANCEL . getCode ( ) ) ) {
// 取消删除任务
// 取消删除任务
if ( StrUtil . equals ( taskObj . getString ( "task_status" ) , TaskStatusEnum . FINISHED . getCode ( ) ) ) {
if ( StrUtil . equals ( taskObj . getString ( "task_status" ) , TaskStatusEnum . FINISHED . getCode ( ) ) ) {
throw new BadRequestException ( "已完成不能取消!" ) ;
throw new BadRequestException ( "已完成不能取消!" ) ;
@ -96,12 +92,13 @@ public class YzjCallMaterialTask extends AbstractAcsTask {
taskObj . put ( "remark" , "已取消" ) ;
taskObj . put ( "remark" , "已取消" ) ;
taskTab . update ( taskObj ) ;
taskTab . update ( taskObj ) ;
// 点位解锁
if ( ObjectUtil . isEmpty ( material_point ) ) return ;
material_point . put ( "lock_type" , "1" ) ;
// 解锁
material_point . put ( "lock_type" , PointEnum . LOCK_TYPE_FALSE . getCode ( ) ) ;
pointTab . update ( material_point ) ;
pointTab . update ( material_point ) ;
}
}
if ( "1" . equals ( status ) ) {
if ( UpdateTaskStatusEnum . EXECUTION . getCode ( ) . equals ( status ) ) {
// 更新任务状态为执行中
// 更新任务状态为执行中
taskObj . put ( "task_status" , TaskStatusEnum . EXECUTING . getCode ( ) ) ;
taskObj . put ( "task_status" , TaskStatusEnum . EXECUTING . getCode ( ) ) ;
taskObj . put ( "update_time" , DateUtil . now ( ) ) ;
taskObj . put ( "update_time" , DateUtil . now ( ) ) ;
@ -109,52 +106,38 @@ public class YzjCallMaterialTask extends AbstractAcsTask {
taskTab . update ( taskObj ) ;
taskTab . update ( taskObj ) ;
}
}
if ( StrUtil . equals ( status , "2" ) ) {
if ( StrUtil . equals ( status , UpdateTaskStatusEnum . FORCEFINISH . getCode ( ) ) ) {
// 更改任务状态为完成
// 更改任务状态为完成
taskObj . put ( "task_status" , TaskStatusEnum . FINISHED . getCode ( ) ) ;
taskObj . put ( "task_status" , TaskStatusEnum . FINISHED . getCode ( ) ) ;
taskObj . put ( "update_time" , DateUtil . now ( ) ) ;
taskObj . put ( "update_time" , DateUtil . now ( ) ) ;
taskTab . update ( taskObj ) ;
taskTab . update ( taskObj ) ;
if ( ObjectUtil . isEmpty ( material_point ) ) return ;
JSONObject requestObj = task . getJSONObject ( "request_param" ) ;
JSONObject requestObj = task . getJSONObject ( "request_param" ) ;
// 区域出入表【st_ivt_regionIO】
插入区域表 : {
WQLObject regionIoTab = WQLObject . getWQLObject ( "st_ivt_regionIO" ) ;
//区域出入表【st_ivt_regionIO】
JSONObject regionIoObj = new JSONObject ( ) ;
WQLObject regionIoTab = WQLObject . getWQLObject ( "st_ivt_regionIO" ) ;
regionIoObj . put ( "iostorinv_id" , IdUtil . getLongId ( ) ) ;
JSONObject regionIoObj = new JSONObject ( ) ;
regionIoObj . put ( "bill_code" , CodeUtil . getNewCode ( "IN_STORE_CODE" ) ) ;
regionIoObj . put ( "iostorinv_id" , IdUtil . getLongId ( ) ) ;
regionIoObj . put ( "buss_date" , DateUtil . today ( ) ) ;
regionIoObj . put ( "bill_code" , CodeUtil . getNewCode ( "IN_STORE_CODE" ) ) ;
regionIoObj . put ( "io_type" , RegionIOEnum . IO_TYPE_OUT . getCode ( ) ) ; // 出库
regionIoObj . put ( "buss_date" , DateUtil . today ( ) ) ;
regionIoObj . put ( "region_id" , material_point . getString ( "region_id" ) ) ;
regionIoObj . put ( "io_type" , "2" ) ; // 出库
regionIoObj . put ( "region_code" , material_point . getString ( "region_code" ) ) ;
regionIoObj . put ( "region_id" , material_point . getString ( "region_id" ) ) ;
regionIoObj . put ( "region_name" , material_point . getString ( "region_name" ) ) ;
regionIoObj . put ( "region_code" , material_point . getString ( "region_code" ) ) ;
regionIoObj . put ( "material_id" , taskObj . getString ( "material_id" ) ) ;
regionIoObj . put ( "region_name" , material_point . getString ( "region_name" ) ) ;
regionIoObj . put ( "vehicle_code" , taskObj . getString ( "vehicle_code" ) ) ;
regionIoObj . put ( "material_id" , taskObj . getString ( "material_id" ) ) ;
regionIoObj . put ( "qty" , requestObj . getString ( "qty" ) ) ;
regionIoObj . put ( "vehicle_code" , taskObj . getString ( "vehicle_code" ) ) ;
regionIoObj . put ( "bill_status" , RegionIOEnum . BILL_STATUS_FINISH . getCode ( ) ) ;
regionIoObj . put ( "qty" , requestObj . getString ( "qty" ) ) ;
regionIoObj . put ( "start_point_code" , taskObj . getString ( "point_code1" ) ) ;
regionIoObj . put ( "bill_status" , "3" ) ;
regionIoObj . put ( "end_point_code" , taskObj . getString ( "point_code2" ) ) ;
regionIoObj . put ( "start_point_code" , taskObj . getString ( "point_code1" ) ) ;
regionIoObj . put ( "create_mode" , RegionIOEnum . CREATE_MODE_ACS . getCode ( ) ) ;
regionIoObj . put ( "end_point_code" , taskObj . getString ( "point_code2" ) ) ;
regionIoObj . put ( "pcsn" , DateUtil . format ( DateUtil . parse ( DateUtil . today ( ) ) , "yyyyMMdd" ) ) ;
regionIoObj . put ( "create_mode" , "2" ) ;
regionIoObj . put ( "create_id" , SecurityUtils . getCurrentUserId ( ) ) ;
regionIoObj . put ( "pcsn" , DateUtil . format ( DateUtil . parse ( DateUtil . today ( ) ) , "yyyyMMdd" ) ) ;
regionIoObj . put ( "create_name" , SecurityUtils . getCurrentNickName ( ) ) ;
regionIoObj . put ( "create_id" , SecurityUtils . getCurrentUserId ( ) ) ;
regionIoObj . put ( "create_time" , DateUtil . now ( ) ) ;
regionIoObj . put ( "create_name" , SecurityUtils . getCurrentNickName ( ) ) ;
regionIoTab . insert ( regionIoObj ) ;
regionIoObj . put ( "create_time" , DateUtil . now ( ) ) ;
regionIoTab . insert ( regionIoObj ) ;
}
//完成后
//完成后
// 物料点位解锁 并设置空位
// 物料点位解锁 并设置空位
material_point . put ( "lock_type" , "1" ) ;
PointUpdateUtil . clearPoint ( material_point . getString ( "point_code" ) ) ;
material_point . put ( "point_status" , "1" ) ;
material_point . put ( "task_id" , "" ) ;
material_point . put ( "pcsn" , "" ) ;
material_point . put ( "ivt_qty" , "0" ) ;
material_point . put ( "material_id" , "" ) ;
material_point . put ( "instorage_time" , "" ) ;
material_point . put ( "is_full" , "2" ) ;
material_point . put ( "standing_time" , "0" ) ;
material_point . put ( "vehicle_type" , "" ) ;
material_point . put ( "vehicle_code" , "" ) ;
pointTab . update ( material_point ) ;
}
}
}
}
@ -181,20 +164,21 @@ public class YzjCallMaterialTask extends AbstractAcsTask {
String device_code = pointTab . query ( "point_code = '" + point_code2 + "'" ) . uniqueResult ( 0 ) . getString ( "device_code" ) ;
String device_code = pointTab . query ( "point_code = '" + point_code2 + "'" ) . uniqueResult ( 0 ) . getString ( "device_code" ) ;
JSONObject workOrderObj = workOrderTab . query ( "device_code = '" + device_code + "' and order_status = '3' and is_delete ='0'" ) . uniqueResult ( 0 ) ;
JSONObject workOrderObj = workOrderTab . query ( "device_code = '" + device_code + "' and order_status = '3' and is_delete ='0'" ) . uniqueResult ( 0 ) ;
if ( ObjectUtil . isEmpty ( workOrderObj ) ) throw new BadRequestException ( "该设备当前未生产或者已删除" ) ;
if ( ObjectUtil . isEmpty ( workOrderObj ) ) throw new BadRequestException ( "该设备当前未生产或者已删除" ) ;
String oldMatSendPoint = ConfigParam . YZJ_OLD_POINT . get ( point_code2 ) ; //旧料盅终点
if ( StringUtils . isNotEmpty ( oldMatSendPoint ) ) {
point_code2 = oldMatSendPoint ;
}
SchTaskDto dto = SchTaskDto . builder ( )
SchTaskDto dto = SchTaskDto . builder ( )
. task_id ( IdUtil . getLongId ( ) )
. task_id ( IdUtil . getLongId ( ) )
. task_code ( CodeUtil . getNewCode ( "TASK_CODE" ) )
. task_code ( CodeUtil . getNewCode ( "TASK_CODE" ) )
. task_type ( "task_type" )
. task_type ( "task_type" )
. task_name ( "压制机叫料" )
. task_name ( "压制机叫料" )
. material_qty ( qty )
. material_qty ( qty )
. acs_task_type ( "2" )
. vehicle_type ( workOrderObj . getString ( "is_new" ) )
. workorder_id ( workOrderObj . getLong ( "workorder_id" ) )
. task_status ( TaskStatusEnum . SURE_END . getCode ( ) )
. task_status ( TaskStatusEnum . SURE_END . getCode ( ) )
. point_code2 ( point_code2 )
. point_code2 ( point_code2 )
. vehicle_code ( vehicle_code )
. vehicle_code ( vehicle_code )
. material_info_id ( workOrderObj . getLong ( "workorder_id" ) )
. vehicle_type ( workOrderObj . getString ( "vehicle_type" ) )
. workorder_id ( workOrderObj . getLong ( "workorder_id" ) )
. material_id ( workOrderObj . getLong ( "material_id" ) )
. material_id ( workOrderObj . getLong ( "material_id" ) )
. vehicle_type ( vehicle_type )
. vehicle_type ( vehicle_type )
. handle_class ( THIS_CLASS )
. handle_class ( THIS_CLASS )
@ -216,25 +200,39 @@ public class YzjCallMaterialTask extends AbstractAcsTask {
* @created 2020年6月12日 下午6 : 01 : 30
* @created 2020年6月12日 下午6 : 01 : 30
* /
* /
@Override
@Override
@Transactional ( rollbackFor = Exception . class )
public void findStartPoint ( ) {
public void findStartPoint ( ) {
/ *
/ * *
* 根据业务找对应的起点 , 直接到困料货架获取
* 根据业务找对应的起点 , 直接到困料货架获取
* 如果是普通压制机 : 区分新旧物料 、 新料有对接位 , 旧料需要查找放到哪个旧盅货架
* 如果是液压机 : 手持呼叫 , 到困料货架查找相同物料的料盅 ( 这里只能是新料盅 )
* /
* /
WQLObject taskTab = WQLObject . getWQLObject ( "SCH_BASE_Task" ) ; // 任务表
WQLObject taskTab = WQLObject . getWQLObject ( "SCH_BASE_Task" ) ; // 任务表
WQLObject pointTab = WQLObject . getWQLObject ( "sch_base_point" ) ; // 点位表
WQLObject pointTab = WQLObject . getWQLObject ( "sch_base_point" ) ; // 点位表
WQLObject workOrderTab = WQLObject . getWQLObject ( "PDM_BD_WorkOrder" ) ; // 工单表
WQLObject workOrderTab = WQLObject . getWQLObject ( "PDM_BD_WorkOrder" ) ; // 工单表
WQLObject deviceTab = WQLObject . getWQLObject ( "PDM_BI_Device" ) ; // 设备表
JSONArray taskArr = taskTab . query ( "handle_class = '" + THIS_CLASS + "'and is_delete = '0' and task_status = '" + TaskStatusEnum . SURE_END . getCode ( ) + "'" ) . getResultJSONArray ( 0 ) ;
JSONArray taskArr = taskTab . query ( "handle_class = '" + THIS_CLASS + "'and is_delete = '0' and task_status = '" + TaskStatusEnum . SURE_END . getCode ( ) + "'" ) . getResultJSONArray ( 0 ) ;
for ( int i = 0 ; i < taskArr . size ( ) ; i + + ) {
for ( int i = 0 ; i < taskArr . size ( ) ; i + + ) {
JSONObject taskObj = taskArr . getJSONObject ( i ) ;
JSONObject taskObj = taskArr . getJSONObject ( i ) ;
// 获取工单
// point_code2是对应的上料点
String point_code2 = taskObj . getString ( "point_code2" ) ;
String point_code2 = taskObj . getString ( "point_code2" ) ;
String device_code = pointTab . query ( "point_code = '" + point_code2 + "'" ) . uniqueResult ( 0 ) . getString ( "device_code" ) ;
JSONObject point = pointTab . query ( "point_code = '" + point_code2 + "'" ) . uniqueResult ( 0 ) ;
String device_code = point . getString ( "device_code" ) ;
JSONObject workOrderObj = workOrderTab . query ( "device_code = '" + device_code + "' and order_status = '3' and is_delete ='0'" ) . uniqueResult ( 0 ) ;
// 获取工单
JSONObject workOrderObj = workOrderTab . query ( "workorder_id = '" + taskObj . getString ( "workorder_id" ) + "'" ) . uniqueResult ( 0 ) ;
JSONObject deviceObj = deviceTab . query ( "device_code = '" + device_code + "'" ) . uniqueResult ( 0 ) ;
if ( deviceObj . getString ( "device_model" ) . equals ( "3" ) ) { // 普通压制机:区分新旧物料
// 新物料終点不用修改
if ( workOrderObj . getString ( "is_new" ) . equals ( WorkOrderEnum . IS_OLD_MATERIAL . getCode ( ) ) ) { // 旧物料
// 查找该设备对应的旧盅位
JSONObject endPoint = pointTab . query ( "region_code = 'KLHJ' AND point_type = '4' AND device_code LIKE '%" +
point_code2 + "%' AND point_status = '1' AND is_used = '1' AND is_delete = '0' AND lock_type = '1'" ) . uniqueResult ( 0 ) ;
point_code2 = endPoint . getString ( "point_code" ) ; // 未锁的旧盅货架位
}
}
String material_id = taskObj . getString ( "material_id" ) ;
String material_id = taskObj . getString ( "material_id" ) ;
String vehicle_type = taskObj . getString ( "vehicle_type" ) ;
JSONObject queryParam = new JSONObject ( ) ;
JSONObject queryParam = new JSONObject ( ) ;
queryParam . put ( "flag" , "1" ) ;
queryParam . put ( "flag" , "1" ) ;
queryParam . put ( "material_id" , material_id ) ;
queryParam . put ( "material_id" , material_id ) ;
@ -243,23 +241,22 @@ public class YzjCallMaterialTask extends AbstractAcsTask {
JSONObject json1 = WQL . getWO ( "QSCH_yzjCallMaterial_01" ) . addParamMap ( queryParam ) . process ( ) . uniqueResult ( 0 ) ;
JSONObject json1 = WQL . getWO ( "QSCH_yzjCallMaterial_01" ) . addParamMap ( queryParam ) . process ( ) . uniqueResult ( 0 ) ;
if ( ObjectUtil . isNotEmpty ( json1 ) ) {
if ( ObjectUtil . isNotEmpty ( json1 ) ) {
// 拿到点位
// 拿到点位
JSONObject material_point = pointTab . query ( "point_id = '" + json1 . getString ( "point_id" ) + "' and lock_type = '1' " ) . uniqueResult ( 0 ) ;
JSONObject material_point = pointTab . query ( "point_id = '" + json1 . getString ( "point_id" ) + "'" ) . uniqueResult ( 0 ) ;
if ( ObjectUtil . isEmpty ( material_point ) ) throw new BadRequestException ( "数据错误,请校验!" ) ;
if ( ObjectUtil . isEmpty ( material_point ) ) throw new BadRequestException ( "数据错误,请校验!" ) ;
// 物料点位上锁
// 物料点位上锁
material_point . put ( "lock_type" , "2" ) ;
material_point . put ( "lock_type" , PointEnum . LOCK_TYPE_TRUE . getCode ( ) ) ;
material_point . put ( "task_id" , taskObj . getString ( "task_id" ) ) ;
pointTab . update ( material_point ) ;
pointTab . update ( material_point ) ;
taskObj . put ( "point_code2" , point_code2 ) ;
taskObj . put ( "point_code1" , material_point . getString ( "point_code" ) ) ;
taskObj . put ( "point_code1" , material_point . getString ( "point_code" ) ) ;
taskObj . put ( "task_status" , TaskStatusEnum . START_AND_POINT . getCode ( ) ) ;
taskObj . put ( "task_status" , TaskStatusEnum . START_AND_POINT . getCode ( ) ) ;
taskObj . put ( "acs_task_type" , "2" ) ;
taskObj . put ( "update_time" , DateUtil . now ( ) ) ;
taskObj . put ( "update_time" , DateUtil . now ( ) ) ;
taskTab . update ( taskObj ) ;
} else {
} else {
taskObj . put ( "remark" , "困料货架无所需物料" ) ;
taskObj . put ( "remark" , "困料货架无所需物料" ) ;
taskObj . put ( "update_time" , DateUtil . now ( ) ) ;
taskObj . put ( "update_time" , DateUtil . now ( ) ) ;
taskTab . update ( taskObj ) ;
}
}
taskTab . update ( taskObj ) ;
}
}
}
}