@ -13,11 +13,14 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper ;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl ;
import lombok.SneakyThrows ;
import org.nl.b_lms.pdm.storagevehicleext.service.IMdPbStoragevehicleextService ;
import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation ;
import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelationrecord ;
import org.nl.b_lms.pdm.subpackagerelation.service.IPdmBiSubpackagerelationrecordService ;
import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService ;
import org.nl.b_lms.pdm_manage.enums.SUBEnum ;
import org.nl.b_lms.sch.point.dao.SchBasePoint ;
import org.nl.b_lms.sch.point.service.IschBasePointService ;
import org.nl.b_lms.sch.task.dao.SchBaseTask ;
import org.nl.b_lms.sch.task.service.IschBaseTaskService ;
import org.nl.b_lms.sch.tasks.TwoExcepionalMoveTask ;
@ -41,7 +44,9 @@ import org.nl.b_lms.storage_manage.ios.service.iostorInv.dto.InventoryQueryParam
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.InBussManageService ;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBussManageService ;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.TwoInBussManageService ;
import org.nl.b_lms.storage_manage.md.service.MdPbMeasureunitService ;
import org.nl.b_lms.storage_manage.st.service.StIvtSectattrService ;
import org.nl.b_lms.storage_manage.st.service.StIvtStructattrService ;
import org.nl.b_lms.storage_manage.st.service.StIvtStructivtService ;
import org.nl.common.utils.IdUtil ;
import org.nl.common.utils.SecurityUtils ;
@ -50,6 +55,7 @@ import org.nl.common.utils.CodeUtil;
import org.nl.modules.wql.WQL ;
import org.nl.modules.wql.core.bean.WQLObject ;
import org.nl.system.service.param.ISysParamService ;
import org.nl.system.service.param.dao.Param ;
import org.nl.wms.basedata.st.service.StorattrService ;
import org.nl.wms.basedata.st.service.dto.StorattrDto ;
import org.nl.wms.pda.mps.eum.RegionTypeEnum ;
@ -151,6 +157,8 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
@Autowired
private StIvtStructivtService structivtService ;
@Autowired
private StIvtStructattrService structattrService ;
@Autowired
private IschBaseTaskService ischBaseTaskService ;
@Autowired
private IpdmBiSubpackagerelationService subpackagerelationService ;
@ -158,7 +166,12 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
private IPdmBiSubpackagerelationrecordService subpackagerelationrecordService ;
@Autowired
private StIvtSectattrService sectattrService ;
@Autowired
private ISysParamService paramService ;
@Autowired
private IMdPbStoragevehicleextService mdPbStoragevehicleextService ;
@Autowired
private IschBasePointService ischBasePointService ;
@Override
@Transactional
public String insertMst ( JSONObject whereJson ) {
@ -201,7 +214,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
// 插入明细
iStIvtIostorinvdtlService . insertOutDtl ( rows , mstDao . getIostorinv_id ( ) ) ;
return mstDao . getIostorinv_id ( ) . toString ( ) ;
return mstDao . getIostorinv_id ( ) ;
}
@Override
@ -247,7 +260,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
* 1 . 有销售订单号 : 用销售订单号 、 物料去找这批物料最早入库的木箱
* 2 . 没有销售订单号 , 有子卷号 : 固定出某个木箱
* /
StIvtIostorinv mstDao = this . getById ( whereJson . getLongValue ( "iostorinv_id" ) ) ;
StIvtIostorinv mstDao = this . getById ( whereJson . getString ( "iostorinv_id" ) ) ;
// 如果是发货出库则判断运费和物流公司不能为空
if ( mstDao . getBill_type ( ) . equals ( IOSEnum . OUT_TYPE . code ( "发货出库" ) ) ) {
@ -675,8 +688,6 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
@Override
public void allSetPoint ( JSONObject whereJson ) {
// 任务表
WQLObject taskService = WQLObject . getWQLObject ( "sch_base_task" ) ;
// 获取出库单据
StIvtIostorinv mstDao = this . getById ( whereJson . getString ( "iostorinv_id" ) ) ;
@ -695,9 +706,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
boxCheck ( whereJson . getString ( "iostorinv_id" ) ) ;
//判断是否有正在执行中的任务
List < JSONObject > arr2 = taskService . query ( "handle_class = '" + TwoOutTask . class . getName ( ) + "' and task_status < '" + TaskStatusEnum . FINISHED . getCode ( ) + "' and is_delete ='0'" )
. getResultJSONArray ( 0 ) . toJavaList ( JSONObject . class ) ;
List < JSONObject > arr2 = ischBaseTaskService . getTaskingByHandleClassToObject ( TwoOutTask . class . getName ( ) ) ;
Map < String , List < JSONObject > > taskGroup = arr2 . stream ( )
. collect ( Collectors . groupingBy ( row - > row . getString ( "task_group_id" ) ) ) ;
@ -727,7 +736,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
}
for ( List < JSONObject > disLikeList : groupingDisMap . values ( ) ) {
// 调用任务生成处理
// 调用任务生成处理 (有移库直接下发去做,最后返回出库仓位数组)
List < JSONObject > taskMangeList = createTaskMange2 ( disLikeList , mstDao . getIostorinv_id ( ) . toString ( ) , allTransactionConsumer ) ;
// 创建任务并下发一组任务
@ -738,10 +747,8 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
return arr ;
} , new JSONArray ( ) ) ;
// 下发任务:判断当前单据是否有正在执行的的任务
JSONArray disArr = taskService . query ( "table_fk = '" + mstDao . getIostorinv_id ( ) . toString ( ) + "' and is_delete = '0' and task_status = '" + TaskStatusEnum . EXECUTING . getCode ( ) + "'" )
. getResultJSONArray ( 0 ) ;
if ( ObjectUtil . isEmpty ( disArr ) ) {
List < JSONObject > disArr = ischBaseTaskService . getTaskingByFk ( mstDao . getIostorinv_id ( ) ) ;
if ( CollectionUtil . isEmpty ( disArr ) ) {
TwoOutTask twoOutTask = new TwoOutTask ( ) ;
twoOutTask . immediateNotifyAcs ( null ) ;
}
@ -1292,27 +1299,22 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
* @return List < JSONObject > 生成任务的集合
* /
private List < JSONObject > createTaskMange2 ( List < JSONObject > disLikeList , String iostorinv_id , Consumer < String > allTransactionConsumer ) {
// 仓位表
WQLObject attrTab = WQLObject . getWQLObject ( "st_ivt_structattr" ) ;
// 获取仓位集合
String structCodeIn = disLikeList . stream ( )
List < String > structCodes = disLikeList . stream ( )
. map ( row - > row . getString ( "struct_code" ) )
. distinct ( ) . collect ( Collectors . joining ( "','" ) ) ;
List < JSONObject > attrList = attrTab . query ( "struct_code IN ('" + structCodeIn + "')" )
. getResultJSONArray ( 0 ) . toJavaList ( JSONObject . class ) ;
. distinct ( ) . collect ( Collectors . toList ( ) ) ;
List < JSONObject > attrList = structattrService . getAttributeByCodesToObject ( structCodes ) ;
/ *
* 判断是否被阻挡
* /
// 获取所在排所有仓位
String rowIn = attrList . stream ( )
List < String > rows = attrList . stream ( )
. map ( row - > row . getString ( "row_num" ) )
. distinct ( ) . collect ( Collectors . joining ( "','" ) ) ;
. distinct ( ) . collect ( Collectors . toList ( ) ) ;
List < JSONObject > attrRowList = attrTab . query ( "stor_id = '" + IOSEnum . STOR_ID . code ( "二期" ) + "' AND row_num IN ('" + rowIn + "')" )
. getResultJSONArray ( 0 ) . toJavaList ( JSONObject . class ) ;
List < JSONObject > attrRowList = structattrService . getRowsAttributeToObject ( IOSEnum . STOR_ID . code ( "二期" ) , rows ) ;
// 需移库仓位集合
List < JSONObject > needMoveAttrList = new ArrayList < > ( ) ;
@ -1540,8 +1542,11 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
flag = false ;
} else {
// 为空:判断此木箱是否有任务
JSONObject jsonTask = taskService . query ( "vehicle_code = '" + jsonLow . getString ( "storagevehicle_code" ) + "' and task_status <> '07' and is_delete = '0'" ) . uniqueResult ( 0 ) ;
LambdaQueryWrapper < SchBaseTask > taskLam = new LambdaQueryWrapper < > ( ) ;
taskLam . eq ( SchBaseTask : : getVehicle_code , jsonLow . getString ( "storagevehicle_code" ) )
. ne ( SchBaseTask : : getTask_status , "07" )
. eq ( SchBaseTask : : getIs_delete , "0" ) ;
JSONObject jsonTask = ischBaseTaskService . getTaskObject ( taskLam ) ;
if ( ObjectUtil . isNotEmpty ( jsonTask ) ) {
flag = false ;
}
@ -1767,27 +1772,19 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
}
/ * *
* 创建任务
* 创建任务 ( 通过仓位集合创建 )
* @param taskMangeList : 仓位集合
* @param disLikeList : 分配明细集合
* @param point_code : 终点
* /
private void createTask2 ( List < JSONObject > taskMangeList , List < JSONObject > disLikeList , String point_code , Consumer < String > allTransactionConsumer ) {
// 任务表
WQLObject taskService = WQLObject . getWQLObject ( "sch_base_task" ) ;
// 点位表
WQLObject schBasePointService = WQLObject . getWQLObject ( "sch_base_point" ) ;
// 载具扩展属性表
WQLObject extTab = WQLObject . getWQLObject ( "md_pb_storagevehicleext" ) ;
// 查询异常货位任务集合
String TaskCodeIn = taskMangeList . stream ( )
List < String > taskIds = taskMangeList . stream ( )
. filter ( row - > row . getString ( "lock_type" ) . equals ( IOSEnum . LOCK_TYPE . code ( "出库异常锁" ) ) )
. map ( row - > row . getString ( "task_code" ) )
. distinct ( ) . collect ( Collectors . joining ( "','" ) ) ;
. distinct ( ) . collect ( Collectors . toList ( ) ) ;
List < JSONObject > taskList = taskService . query ( "task_id IN ('" + TaskCodeIn + "') and is_delete = '0'" )
. getResultJSONArray ( 0 ) . toJavaList ( JSONObject . class ) ;
List < SchBaseTask > taskList = ischBaseTaskService . getTaskByIds ( taskIds , true ) ;
// 任务组标识
String task_group_id = IdUtil . getStringId ( ) ;
@ -1797,12 +1794,10 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
// 是否自动下发
String is_auto_issue = IOSEnum . IS_SEND . code ( "是" ) ;
WQLObject paramTab = WQLObject . getWQLObject ( "sys_param" ) ;
JSONObject jsonParam = paramTab . query ( "code = 'one_or_two_struct'" ) . uniqueResult ( 0 ) ;
Param oneOrTwoStruct = paramService . findByCode ( "one_or_two_struct" ) ;
String flag = "0" ;
if ( ObjectUtil . isNotEmpty ( jsonParam ) ) {
flag = jsonParam . getString ( "value" ) ;
if ( ObjectUtil . isNotEmpty ( oneOrTwoStruct ) ) {
flag = oneOrTwoStruct . getValue ( ) ;
}
for ( int i = 0 ; i < taskMangeList . size ( ) ; i + + ) {
JSONObject json = taskMangeList . get ( i ) ;
@ -1835,14 +1830,13 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
* 完成 : 生成完成任务的point_code2 当做起点的任务
* 未完成 : 只更新分配明细状态为生成
* /
JSONObject jsonTask = taskList . stream ( )
. filter ( row - > row . getString ( "task_id" ) . equals ( json . getString ( "task_code" ) ) )
. collect ( Collectors . toList ( ) ) . get ( 0 ) ;
SchBaseTask jsonTask = taskList . stream ( )
. filter ( row - > row . getTask_id ( ) . equals ( json . getString ( "task_code" ) ) )
. findFirst ( ) . orElse ( null ) ;
// 完成
if ( jsonTask . getString ( "task_status" ) . equals ( TaskStatusEnum . FINISHED . getCode ( ) ) ) {
start_device_code = jsonTask . getString ( "point_code2" ) ;
if ( TaskStatusEnum . FINISHED . getCode ( ) . equals ( jsonTask . getTask_status ( ) ) ) {
start_device_code = jsonTask . getPoint_code2 ( ) ;
is_auto_issue = IOSEnum . IS_SEND . code ( "否" ) ;
} else {
// 未完成:只更新分配明细状态不更新任务id
@ -1853,15 +1847,14 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
iStIvtIostorinvdisService . updateBatchById ( disDaoList ) ;
// 标记任务
jsonTask . put ( "is_auto_issue" , IOSEnum . IS_SEND . code ( "否" ) ) ;
t askService. update ( jsonTask ) ;
jsonTask . setIs_auto_issue ( IOSEnum . IS_SEND . code ( "否" ) ) ;
ischBaseT askService. updateById ( jsonTask ) ;
continue ;
}
}
// 查询木箱对应的载具
JSONObject jsonVeExt = extTab . query ( "pcsn = '" + json . getString ( "storagevehicle_code" ) + "'" )
. uniqueResult ( 0 ) ;
JSONObject jsonVeExt = mdPbStoragevehicleextService . getOneByPcsnToObject ( json . getString ( "storagevehicle_code" ) ) ;
if ( ObjectUtil . isEmpty ( jsonVeExt ) ) {
throw new BadRequestException ( "此木箱没有绑定托盘号!" + json . getString ( "storagevehicle_code" ) ) ;
}
@ -1898,15 +1891,15 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
String task_id = twoOutTask . createTask ( jsonTaskParam ) ;
// 更新分配明细
JSONObject jsonP oint = schBasePointService . query ( "point_code = '" + end_device_code + "'" ) . uniqueResult ( 0 ) ;
if ( ObjectUtil . isEmpty ( jsonP oint) ) {
SchBasePoint p oint = i schBasePointService. findByCode ( end_device_code ) ;
if ( ObjectUtil . isEmpty ( p oint) ) {
throw new BadRequestException ( "出库点位不存在:" + end_device_code ) ;
}
disDaoList . forEach ( row - > {
row . setWork_status ( IOSEnum . WORK_STATUS . code ( "生成" ) ) ;
row . setTask_id ( task_id ) ;
row . setPoint_id ( jsonPoint . getString ( "point_id" ) ) ;
row . setPoint_id ( point . getPoint_id ( ) ) ;
} ) ;
iStIvtIostorinvdisService . updateBatchById ( disDaoList ) ;
}