@@ -5101,6 +5101,373 @@ public class CheckOutBillServiceImpl implements CheckOutBillService {
}*/
}
@Override
@Transactional ( rollbackFor = Exception . class )
public void confirmOrder ( JSONObject form ) {
//出库分配表
WQLObject wo_dis = WQLObject . getWQLObject ( " ST_IVT_IOStorInvDis " ) ;
//出库明细表
WQLObject wo_dtl = WQLObject . getWQLObject ( " ST_IVT_IOStorInvDtl " ) ;
//出库主表
WQLObject wo_mst = WQLObject . getWQLObject ( " ST_IVT_IOStorInv " ) ;
// 任务表
WQLObject taskTab = WQLObject . getWQLObject ( " sch_base_task " ) ;
// 子卷包装关系表
WQLObject subTab = WQLObject . getWQLObject ( " pdm_bi_subpackagerelation " ) ;
//包装关系出入库记录表
WQLObject sub_record = WQLObject . getWQLObject ( " pdm_bi_subpackagerelationrecord " ) ;
String iostorinv_id = form . getString ( " iostorinv_id " ) ;
String currentUserId = SecurityUtils . getCurrentUserId ( ) ;
String nickName = SecurityUtils . getCurrentNickName ( ) ;
String now = DateUtil . now ( ) ;
//查询主表信息
JSONObject jo_mst = wo_mst . query ( " iostorinv_id = ' " + iostorinv_id + " ' " ) . uniqueResult ( 0 ) ;
if ( ObjectUtil . isEmpty ( jo_mst ) ) {
throw new BadRequestException ( " 未查到相关出库单 " ) ;
}
//判断分配明细中是否有未生成状态的分配明细
JSONArray disArr = wo_dis . query ( " iostorinv_id = ' " + iostorinv_id + " ' and work_status = '00' " ) . getResultJSONArray ( 0 ) ;
if ( ObjectUtil . isNotEmpty ( disArr ) ) {
throw new BadRequestException ( " 有未生成状态的分配明细,不允许强制确认 " ) ;
}
// 查询是否有未完成的任务
List < JSONObject > isTaskEmp = WQL . getWO ( " QST_IVT_CHECKOUTBILL " )
. addParam ( " flag " , " 555 " )
. addParam ( " iostorinv_id " , iostorinv_id )
. process ( )
. getResultJSONArray ( 0 )
. toJavaList ( JSONObject . class ) ;
if ( ObjectUtil . isNotEmpty ( isTaskEmp ) ) {
// 拼接字符串
String box_no = isTaskEmp . stream ( )
. map ( row - > row . getString ( " box_no " ) )
. distinct ( )
. collect ( Collectors . joining ( " , " ) ) ;
throw new BadRequestException ( " 请先完成载具对应的出库任务: " + box_no ) ;
}
//查询生成和未分配完的明细
JSONArray dtls = WQL . getWO ( " QST_IVT_CHECKOUTBILL " )
. addParam ( " flag " , " 2 " )
. addParam ( " bill_status " , " 50 " )
. addParam ( " iostorinv_id " , iostorinv_id )
. process ( )
. getResultJSONArray ( 0 ) ;
if ( dtls . size ( ) ! = 0 ) {
for ( int i = 0 ; i < dtls . size ( ) ; i + + ) {
JSONObject dtl = dtls . getJSONObject ( i ) ;
HashMap < String , String > map_dtl = new HashMap < > ( ) ;
//更新明细状态
map_dtl . put ( " bill_status " , " 99 " ) ;
wo_dtl . update ( map_dtl , " iostorinvdtl_id=' " + dtl . getString ( " iostorinvdtl_id " ) + " ' " ) ;
}
}
HashMap < String , String > map_mst = new HashMap < > ( ) ;
map_mst . put ( " bill_status " , " 99 " ) ;
map_mst . put ( " confirm_optid " , currentUserId + " " ) ;
map_mst . put ( " confirm_optname " , nickName ) ;
map_mst . put ( " confirm_time " , now ) ;
//更新主表状态
wo_mst . update ( map_mst , " iostorinv_id = ' " + iostorinv_id + " ' " ) ;
//查询需要更新库存的分配记录
JSONArray diss = WQL . getWO ( " QST_IVT_CHECKOUTBILL " )
. addParam ( " flag " , " 55 " )
. addParam ( " iostorinv_id " , iostorinv_id )
. process ( )
. getResultJSONArray ( 0 ) ;
for ( int i = 0 ; i < diss . size ( ) ; i + + ) {
JSONObject dis = diss . getJSONObject ( i ) ;
// 判断是否是主存区的仓位, 是否发超期
if ( " ZC01,ZZ01 " . contains ( dis . getString ( " sect_code " ) ) ) {
if ( jo_mst . getString ( " is_overdue " ) . equals ( " 1 " ) ) {
// 不发超期
if ( ! dis . getString ( " is_overdue " ) . equals ( " 1 " ) ) {
continue ;
}
} else {
continue ;
}
}
double plan_qty = dis . getDoubleValue ( " plan_qty " ) ;
double real_qty = dis . getDoubleValue ( " real_qty " ) ;
//未出部分,按取消分配处理
if ( Double . compare ( real_qty , plan_qty ) ! = 0 ) {
dis . put ( " change_qty " , plan_qty - real_qty ) ;
dis . put ( " bill_type_scode " , jo_mst . getString ( " bill_type " ) ) ;
dis . put ( " inv_id " , iostorinv_id ) ;
dis . put ( " bill_code " , jo_mst . getString ( " bill_code " ) ) ;
dis . put ( " bill_table " , " ST_IVT_IOStorInv " ) ;
storPublicService . IOStor ( dis , " 12 " ) ;
}
//更新已出库重量
if ( real_qty ! = 0 ) {
dis . put ( " change_qty " , real_qty ) ;
dis . put ( " bill_type_scode " , jo_mst . getString ( " bill_type " ) ) ;
dis . put ( " inv_id " , iostorinv_id ) ;
dis . put ( " bill_code " , jo_mst . getString ( " bill_code " ) ) ;
dis . put ( " bill_table " , " ST_IVT_IOStorInv " ) ;
if ( jo_mst . getString ( " is_overdue " ) . equals ( " 1 " ) ) {
if ( dis . getString ( " is_overdue " ) . equals ( " 1 " ) ) {
storPublicService . IOStor ( dis , " 12 " ) ;
} else {
storPublicService . IOStor ( dis , " 21 " ) ;
}
} else {
storPublicService . IOStor ( dis , " 21 " ) ;
}
}
// 更新分配明细执行状态为 - 99
JSONObject jsonDis = wo_dis . query ( " iostorinvdis_id = ' " + dis . getString ( " iostorinvdis_id " ) + " ' " ) . uniqueResult ( 0 ) ;
jsonDis . put ( " work_status " , " 99 " ) ;
wo_dis . update ( jsonDis ) ;
if ( jo_mst . getString ( " is_overdue " ) . equals ( " 1 " ) ) {
if ( dis . getString ( " is_overdue " ) . equals ( " 1 " ) ) {
// 解锁起点
JSONObject from_start = new JSONObject ( ) ;
from_start . put ( " struct_id " , dis . getString ( " struct_id " ) ) ;
from_start . put ( " lock_type " , " 1 " ) ;
from_start . put ( " is_overdue " , dis . getString ( " is_overdue " ) ) ;
from_start . put ( " storagevehicle_code " , dis . getString ( " box_no " ) ) ;
storPublicService . updateStructAndPoint ( from_start ) ;
continue ;
}
}
// 更新子卷包装关系表 状态 - 3
JSONObject jsonSub = subTab . query ( " container_name = ' " + dis . getString ( " pcsn " ) + " ' and package_box_sn = ' " + dis . getString ( " box_no " ) + " ' and status = '2' " ) . uniqueResult ( 0 ) ;
if ( ObjectUtil . isEmpty ( jsonSub ) )
//查询对应的包装关系出入库记录表
{
jsonSub = sub_record . query ( " container_name = ' " + dis . getString ( " pcsn " ) + " ' and package_box_sn = ' " + dis . getString ( " box_no " ) + " ' and status = '2' AND bill_code = ' " + jo_mst . getString ( " bill_code " ) + " ' " ) . uniqueResult ( 0 ) ;
}
if ( ObjectUtil . isEmpty ( jsonSub ) ) {
throw new BadRequestException ( " 此子卷不存在或不为入库状态: " + dis . getString ( " pcsn " ) ) ;
}
// 如果是拆分入库则将包装关系改为生成状态
if ( " 1005 " . equals ( jo_mst . getString ( " bill_type " ) ) | | ( " 1009 " . equals ( jo_mst . getString ( " bill_type " ) ) ) ) {
jsonSub . put ( " status " , " 0 " ) ;
} else {
jsonSub . put ( " status " , " 3 " ) ;
}
if ( jo_mst . getString ( " bill_type " ) . equals ( " 1011 " ) ) {
// 更新子卷包装净重
double net_weight = NumberUtil . sub ( jsonSub . getDoubleValue ( " net_weight " ) , plan_qty ) ;
jsonSub . put ( " net_weight " , net_weight ) ;
if ( net_weight < = 0 ) {
jsonSub . put ( " status " , " 3 " ) ;
} else {
jsonSub . put ( " status " , " 2 " ) ;
}
}
subTab . update ( jsonSub ) ;
// 解锁起点
JSONObject from_start = new JSONObject ( ) ;
from_start . put ( " struct_id " , dis . getString ( " struct_id " ) ) ;
from_start . put ( " lock_type " , " 1 " ) ;
from_start . put ( " is_overdue " , dis . getString ( " is_overdue " ) ) ;
if ( jo_mst . getString ( " is_overdue " ) . equals ( " 1 " ) ) {
if ( dis . getString ( " is_overdue " ) . equals ( " 1 " ) ) {
from_start . put ( " storagevehicle_code " , dis . getString ( " box_no " ) ) ;
} else {
from_start . put ( " storagevehicle_code " , " " ) ;
}
} else {
from_start . put ( " storagevehicle_code " , " " ) ;
}
if ( jo_mst . getString ( " bill_type " ) . equals ( " 1011 " ) ) {
// 判断此木箱下的所有子卷净重是否为0, 如果为0则清空载具
List < JSONObject > packageList = subTab . query ( " package_box_sn = ' " + jsonSub . getString ( " package_box_sn " ) + " ' " )
. getResultJSONArray ( 0 ) . toJavaList ( JSONObject . class ) ;
boolean is_zero = packageList . stream ( )
. allMatch ( row - > row . getDoubleValue ( " net_weight " ) < = 0 ) ;
if ( is_zero ) {
from_start . put ( " storagevehicle_code " , " " ) ;
} else {
from_start . put ( " bill_type " , " 1011 " ) ;
from_start . put ( " storagevehicle_code " , jsonSub . getString ( " package_box_sn " ) ) ;
}
}
storPublicService . updateStructAndPoint ( from_start ) ;
//插入包装关系出入库记录表
jsonSub . put ( " bill_code " , jo_mst . getString ( " bill_code " ) ) ;
jsonSub . put ( " bill_id " , jo_mst . getString ( " iostorinv_id " ) ) ;
jsonSub . put ( " bill_type " , jo_mst . getString ( " bill_type " ) ) ;
jsonSub . put ( " io_type " , " 1 " ) ;
jsonSub . put ( " insert_time " , DateUtil . now ( ) ) ;
jsonSub . put ( " record_id " , IdUtil . getSnowflake ( 1 , 1 ) . nextId ( ) ) ;
sub_record . insert ( jsonSub ) ;
// 更新对应任务为完成
JSONObject jsonTask = taskTab . query ( " task_id = ' " + jsonDis . getString ( " task_id " ) + " ' and task_status < '07' " ) . uniqueResult ( 0 ) ;
if ( ObjectUtil . isNotEmpty ( jsonTask ) ) {
jsonTask . put ( " task_status " , TaskStatusEnum . FINISHED . getCode ( ) ) ;
taskTab . update ( jsonTask ) ;
}
}
JSONObject out_jo = WQLObject . getWQLObject ( " ST_IVT_IOStorInv " ) . query ( " iostorinv_id = ' " + iostorinv_id + " ' " ) . uniqueResult ( 0 ) ;
if ( " 1004 " . equals ( out_jo . getString ( " bill_type " ) ) ) {
//调拨出库自动生成调拨入库单
WQLObject dtl_wql = WQLObject . getWQLObject ( " st_ivt_iostorinvdtl " ) ;
WQLObject mst_wql = WQLObject . getWQLObject ( " ST_IVT_IOStorInv " ) ;
WQLObject dis_wql = WQLObject . getWQLObject ( " ST_IVT_IOStorInvDis " ) ;
//校验主表状态为生成
if ( ! " 99 " . equals ( out_jo . getString ( " bill_status " ) ) ) {
throw new BadRequestException ( " 主表状态必须为完成! " ) ;
}
JSONObject mst_row = mst_wql . query ( " iostorinv_id = ' " + iostorinv_id + " ' " ) . uniqueResult ( 0 ) ;
JSONArray dis_rows = new JSONArray ( ) ;
if ( jo_mst . getString ( " is_overdue " ) . equals ( " 1 " ) ) {
dis_rows = dis_wql . query ( " iostorinv_id = ' " + iostorinv_id + " ' and is_overdue = '0' " ) . getResultJSONArray ( 0 ) ;
} else {
dis_rows = dis_wql . query ( " iostorinv_id = ' " + iostorinv_id + " ' " ) . getResultJSONArray ( 0 ) ;
}
//生成手工入库单
String new_iostorinv_id = IdUtil . getSnowflake ( 1 , 1 ) . nextId ( ) + " " ;
String bill_code = CodeUtil . getNewCode ( " IO_CODE " ) ;
jo_mst . put ( " iostorinv_id " , new_iostorinv_id ) ;
jo_mst . put ( " bill_code " , bill_code ) ;
jo_mst . put ( " io_type " , " 0 " ) ;
jo_mst . put ( " bill_type " , " 0004 " ) ;
jo_mst . put ( " buss_type " , ( ( String ) jo_mst . get ( " bill_type " ) ) . substring ( 0 , 4 ) ) ;
//查询移入仓库的信息
JSONObject in_stor = WQLObject . getWQLObject ( " st_ivt_bsrealstorattr " ) . query ( " stor_id = ' " + out_jo . getString ( " out_stor_id " ) + " ' " ) . uniqueResult ( 0 ) ;
if ( ObjectUtil . isEmpty ( in_stor ) ) {
throw new BadRequestException ( " 未查询到对应的移入仓库信息! " ) ;
}
jo_mst . put ( " stor_id " , in_stor . getString ( " stor_id " ) ) ;
jo_mst . put ( " stor_code " , in_stor . getString ( " stor_code " ) ) ;
jo_mst . put ( " stor_name " , in_stor . getString ( " stor_name " ) ) ;
jo_mst . put ( " bill_status " , " 30 " ) ;
jo_mst . put ( " input_optid " , currentUserId + " " ) ;
jo_mst . put ( " input_optname " , nickName ) ;
jo_mst . put ( " input_time " , now ) ;
jo_mst . put ( " update_optid " , currentUserId + " " ) ;
jo_mst . put ( " update_optname " , nickName ) ;
jo_mst . put ( " update_time " , now ) ;
jo_mst . put ( " out_stor_id " , out_jo . getString ( " stor_id " ) ) ;
double total_qty = 0 . 00 ;
for ( int i = 0 ; i < dis_rows . size ( ) ; i + + ) {
//插入明细表
String iostorinvdtl_id = IdUtil . getSnowflake ( 1 , 1 ) . nextId ( ) + " " ;
JSONObject dis_row = dis_rows . getJSONObject ( i ) ;
//查询对应的出库单明细
JSONObject dtl_row = dtl_wql . query ( " iostorinvdtl_id = ' " + dis_row . getString ( " iostorinvdtl_id " ) + " ' " ) . uniqueResult ( 0 ) ;
dis_row . put ( " iostorinvdtl_id " , iostorinvdtl_id ) ;
dis_row . put ( " iostorinv_id " , new_iostorinv_id ) ;
dis_row . put ( " seq_no " , i + 1 ) ;
dis_row . put ( " bill_status " , " 30 " ) ;
dis_row . put ( " real_qty " , " 0 " ) ;
dis_row . put ( " vbeln " , dtl_row . getString ( " vbeln " ) ) ;
dis_row . put ( " source_billdtl_id " , dtl_row . getString ( " iostorinvdtl_id " ) ) ;
dis_row . put ( " source_bill_type " , mst_row . getString ( " bill_type " ) ) ;
dis_row . put ( " source_bill_code " , dtl_row . getString ( " source_bill_code " ) ) ;
dis_row . put ( " source_bill_table " , " ST_IVT_IOStorInvDtl " ) ;
dis_row . put ( " assign_qty " , dis_row . getString ( " plan_qty " ) ) ;
dis_row . put ( " unassign_qty " , " 0 " ) ;
//插入调拨明细表
dtl_wql . insert ( dis_row ) ;
dis_row . put ( " iostorinvdis_id " , IdUtil . getSnowflake ( 1 , 1 ) . nextId ( ) ) ;
dis_row . put ( " seq_no " , 1 ) ;
dis_row . put ( " sect_id " , " " ) ;
dis_row . put ( " sect_code " , " " ) ;
dis_row . put ( " sect_name " , " " ) ;
dis_row . put ( " struct_id " , " " ) ;
dis_row . put ( " struct_code " , " " ) ;
dis_row . put ( " struct_name " , " " ) ;
dis_row . put ( " work_status " , " 00 " ) ;
dis_row . put ( " real_qty " , " 0 " ) ;
dis_row . put ( " point_id " , " " ) ;
dis_row . put ( " task_id " , " " ) ;
//插入分配表
dis_wql . insert ( dis_row ) ;
total_qty = NumberUtil . add ( total_qty , dis_row . getDoubleValue ( " plan_qty " ) ) ;
//将包装关系中对应的记录状态改为包装
HashMap < String , String > map = new HashMap < > ( ) ;
map . put ( " status " , " 1 " ) ;
WQLObject . getWQLObject ( " PDM_BI_SubPackageRelation " ) . update ( map , " package_box_SN = ' " + dis_row . getString ( " box_no " ) + " ' AND status = '3' " ) ;
}
// 查询所有明细并计算实际重量
List < JSONObject > dtlList = dtl_wql . query ( " iostorinv_id = ' " + iostorinv_id + " ' " )
. getResultJSONArray ( 0 ) . toJavaList ( JSONObject . class ) ;
double assign_qty = dtlList . stream ( )
. map ( row - > row . getDoubleValue ( " assign_qty " ) )
. reduce ( Double : : sum ) . orElse ( 0 . 00 ) ;
jo_mst . put ( " detail_count " , dis_rows . size ( ) ) ;
// jo_mst.put("total_qty", total_qty);
jo_mst . put ( " total_qty " , assign_qty ) ;
mst_wql . insert ( jo_mst ) ;
}
if ( " 1003 " . equals ( out_jo . getString ( " bill_type " ) ) | | " 1006 " . equals ( out_jo . getString ( " bill_type " ) ) ) {
//如果为返检出库或者改切出库删除对应的包装关系
JSONArray dis_rows = new JSONArray ( ) ;
if ( jo_mst . getString ( " is_overdue " ) . equals ( " 1 " ) ) {
dis_rows = WQLObject . getWQLObject ( " ST_IVT_IOStorInvDis " ) . query ( " iostorinv_id = ' " + iostorinv_id + " ' and is_overdue = '0' " ) . getResultJSONArray ( 0 ) ;
} else {
dis_rows = WQLObject . getWQLObject ( " ST_IVT_IOStorInvDis " ) . query ( " iostorinv_id = ' " + iostorinv_id + " ' " ) . getResultJSONArray ( 0 ) ;
}
for ( int i = 0 ; i < dis_rows . size ( ) ; i + + ) {
JSONObject dis_row = dis_rows . getJSONObject ( i ) ;
String sect_code = dis_row . getString ( " sect_code " ) ;
JSONObject sect_jo = WQLObject . getWQLObject ( " st_ivt_sectattr " ) . query ( " sect_code = ' " + sect_code + " ' " ) . uniqueResult ( 0 ) ;
if ( ObjectUtil . isEmpty ( sect_jo ) ) {
throw new BadRequestException ( " 未查询到对应的库区! " ) ;
}
//如果是虚拟区的出库, 直接把包装关系删除; 如果为立库的包装关系, 将解绑删除标识置为1。当发货区解绑时, 删除包装关系
String pcsn = dis_row . getString ( " pcsn " ) ;
if ( " 09 " . equals ( sect_jo . getString ( " sect_type_attr " ) ) ) {
WQLObject . getWQLObject ( " pdm_bi_subpackagerelation " ) . delete ( " container_name = ' " + pcsn + " ' " ) ;
} else {
HashMap < String , String > map = new HashMap < > ( ) ;
map . put ( " need_delete " , " 1 " ) ;
WQLObject . getWQLObject ( " pdm_bi_subpackagerelation " ) . update ( map , " container_name = ' " + pcsn + " ' " ) ;
}
}
}
}
@Override
@Transactional ( rollbackFor = Exception . class )
public void issueTask ( JSONObject whereJson ) {
@@ -5136,75 +5503,163 @@ public class CheckOutBillServiceImpl implements CheckOutBillService {
WQLObject wo_mst = WQLObject . getWQLObject ( " st_ivt_iostorinv " ) ;
//任务表
WQLObject wo_Task = WQLObject . getWQLObject ( " SCH_BASE_Task " ) ;
String task_id = whereJson . getString ( " task_id " ) ;
//子卷包装关系表
WQLObject subTab = WQLObject . getWQLObject ( " pdm_bi_subpackagerelation " ) ;
//包装关系出入库记录表
WQLObject sub_record = WQLObject . getWQLObject ( " pdm_bi_subpackagerelationrecord " ) ;
String currentUserId = SecurityUtils . getCurrentUserId ( ) ;
String nickName = SecurityUtils . getCurrentNickName ( ) ;
String now = DateUtil . now ( ) ;
// 查询任务对应的分配明细
JSONArray disJsonArr = WQL . getWO ( " QST_IVT_CHECKOUTBILL " )
. addParam ( " flag " , " 55 " )
. addParam ( " task_id " , whereJson . getString ( " task_id " ) )
. process ( ) . getResultJSONArray ( 0 ) ;
JSONObject task = wo_Task . query ( " task_status<>'07' and task_id=' " + task_id + " ' " ) . uniqueResult ( 0 ) ;
// 查询主表
JSONObject jo_mst = wo_mst . query ( " iostorinv_id = ' " + disJsonArr . getJSONObject ( 0 ) . getString ( " iostorinv_id " ) + " ' " ) . uniqueResult ( 0 ) ;
String iostorinv_id = jo_mst . getString ( " iostorinv_id " ) ;
i f ( task = = null ) {
throw new BadRequestException ( " 查询不到操作的任务记录! " ) ;
}
for ( int i = 0 ; i < disJsonArr . size ( ) ; i + + ) {
JSONObject dis = disJsonArr . getJSONObject ( i ) ;
// 判断此任务是否有任务组
String task_group_id = task . getString ( " task_group_id " ) ;
if ( ObjectUtil . isNotEmpty ( task_group_id ) ) {
// 上一个任务组顺序号
String sort_seq_last = NumberUtil . sub ( task . getString ( " sort_seq " ) , " 1 " ) . toString ( ) ;
double plan_qty = dis . getDoubleValue ( " plan_qty " ) ;
double real_qty = dis . getDoubleValue ( " real_qty " ) ;
JSONObject jsonTaskLast = wo_Task . query ( " task_group_id = ' " + task_group_id + " ' and sort_seq = ' " + sort_seq_last + " ' and task_status <> '07' " ) . uniqueResult ( 0 ) ;
// if (ObjectUtil.isNotEmpty(jsonTaskLast)) throw new BadRequestException("请先完成" + jsonTaskLast.getString("task_code") + "的任务!");
}
//未出部分,按取消分配处理
if ( Double . compare ( real_qty , plan_qty ) ! = 0 ) {
dis . put ( " change_qty " , plan_qty - real_qty ) ;
dis . put ( " bill_type_scode " , jo_mst . getString ( " bill_type " ) ) ;
dis . put ( " inv_id " , iostorinv_id ) ;
dis . put ( " bill_code " , jo_mst . getString ( " bill_code " ) ) ;
dis . put ( " bill_table " , " ST_IVT_IOStorInv " ) ;
storPublicService . IOStor ( dis , " 12 " ) ;
}
//更新已出库重量
if ( real_qty ! = 0 ) {
dis . put ( " change_qty " , real_qty ) ;
dis . put ( " bill_type_scode " , jo_mst . getString ( " bill_type " ) ) ;
dis . put ( " inv_id " , iostorinv_id ) ;
dis . put ( " bill_code " , jo_mst . getString ( " bill_code " ) ) ;
dis . put ( " bill_table " , " ST_IVT_IOStorInv " ) ;
JSONObject dtljo = wo_dis . query ( " task_id=' " + task_id + " ' " ) . uniqueResult ( 0 ) ;
whereJson . put ( " iostorinv_id " , dtljo . getString ( " iostorinv_id " ) ) ;
JSONObject mst_jo = wo_mst . query ( " iostorinv_id = ' " + dtljo . getString ( " iostorinv_id " ) + " ' " ) . uniqueResult ( 0 ) ;
if ( ObjectUtil . isEmpty ( mst_jo ) ) {
throw new BadRequestException ( " 未查询到对应的出库单据! " ) ;
} else {
if ( " 1003 " . equals ( m st_jo . getString ( " bill_type " ) ) | | " 1006 " . equals ( mst_jo . getString ( " bill_type " ) ) ) {
HashMap < String , String > map = new HashMap < > ( ) ;
map . put ( " need_delete " , " 1 " ) ;
WQLObject . getWQLObject ( " pdm_bi_subpackagerelation " ) . update ( map , " package_box_sn = ' " + task . getString ( " vehicle_code " ) + " ' " ) ;
JSONArray rows = WQLObject . getWQLObject ( " pdm_bi_subpackagerelation " ) . query ( " package_box_sn = ' " + task . getString ( " vehicle_code " ) + " ' " ) . getResultJSONArray ( 0 ) ;
for ( int i = 0 ; i < rows . size ( ) ; i + + ) {
JSONObject row = rows . getJSONObject ( i ) ;
//插入包装关系出入库记录表
row . put ( " bill_code " , mst_jo . getString ( " bill_code " ) ) ;
row . put ( " bill_id " , mst_jo . getString ( " iostorinv_id " ) ) ;
row . put ( " bill_type " , mst_jo . getString ( " bill_type " ) ) ;
row . put ( " io_type " , " 1 " ) ;
row . put ( " insert_time " , DateUtil . now ( ) ) ;
row . put ( " record_id " , IdUtil . getSnowflake ( 1 , 1 ) . nextId ( ) ) ;
WQLObject . getWQLObject ( " pdm_bi_subpackagerelationrecord " ) . insert ( row ) ;
if ( jo_mst . getString ( " is_overdue " ) . equals ( " 1 " ) ) {
if ( dis . getString ( " is_overdue " ) . equals ( " 1 " ) ) {
storPublicService . IOStor ( dis , " 12 " ) ;
} else {
storPublicService . IOStor ( dis , " 21 " ) ;
}
} else {
storPublicService . IOStor ( dis , " 21 " ) ;
}
}
// 更新分配明细执行状态为 - 99
JSONObject jsonDis = wo_dis . query ( " iostorinvdis_id = ' " + dis . getString ( " iostorinvdis_id " ) + " ' " ) . uniqueResult ( 0 ) ;
jsonDis . put ( " work_status " , " 99 " ) ;
wo_dis . update ( jsonDis ) ;
if ( jo_mst . getString ( " is_overdue " ) . equals ( " 1 " ) ) {
if ( dis . getString ( " is_overdue " ) . equals ( " 1 " ) ) {
continue ;
}
}
// 更新子卷包装关系表 状态 - 3
JSONObject jsonSub = subTab . query ( " container_name = ' " + dis . getString ( " pcsn " ) + " ' and package_box_sn = ' " + dis . getString ( " box_no " ) + " ' and status = '2' " ) . uniqueResult ( 0 ) ;
if ( ObjectUtil . isEmpty ( jsonSub ) )
//查询对应的包装关系出入库记录表
{
jsonSub = sub_record . query ( " container_name = ' " + dis . getString ( " pcsn " ) + " ' and package_box_sn = ' " + dis . getString ( " box_no " ) + " ' and status = '2' AND bill_code = ' " + jo_mst . getString ( " bill_code " ) + " ' " ) . uniqueResult ( 0 ) ;
}
if ( ObjectUtil . isEmpty ( jsonSub ) ) {
throw new BadRequestException ( " 此子卷不存在或不为入库状态: " + dis . getString ( " pcsn " ) ) ;
}
// 如果是拆分入库则将包装关系改为生成状态
if ( " 1005 " . equals ( jo_mst . getString ( " bill_type " ) ) | | ( " 1009 " . equals ( jo_mst . getString ( " bill_type " ) ) ) ) {
jsonSub . put ( " status " , " 0 " ) ;
} else {
jsonSub . put ( " status " , " 3 " ) ;
}
if ( jo_mst . getString ( " bill_type " ) . equals ( " 1011 " ) ) {
// 更新子卷包装净重
double net_weight = NumberUtil . sub ( jsonSub . getDoubleValue ( " net_weight " ) , plan_qty ) ;
jsonSub . put ( " net_weight " , net_weight ) ;
if ( net_weight < = 0 ) {
jsonSub . put ( " status " , " 3 " ) ;
} else {
jsonSub . put ( " status " , " 2 " ) ;
}
}
subTab . update ( jsonSub ) ;
// 解锁起点
JSONObject from_start = new JSONObject ( ) ;
from_start . put ( " struct_id " , dis . getString ( " struct_id " ) ) ;
from_start . put ( " lock_type " , " 1 " ) ;
from_start . put ( " is_overdue " , dis . getString ( " is_overdue " ) ) ;
if ( jo_mst . getString ( " is_overdue " ) . equals ( " 1 " ) ) {
if ( dis . getString ( " is_overdue " ) . equals ( " 1 " ) ) {
from_start . put ( " storagevehicle_code " , dis . getString ( " box_no " ) ) ;
} else {
from_start . put ( " storagevehicle_code " , " " ) ;
}
} else {
from_start . put ( " storagevehicle_code " , " " ) ;
}
if ( jo_mst . getString ( " bill_type " ) . equals ( " 1011 " ) ) {
// 判断此木箱下的所有子卷净重是否为0, 如果为0则清空载具
List < JSONObject > packageList = subTab . query ( " package_box_sn = ' " + jsonSub . getString ( " package_box_sn " ) + " ' " )
. getResultJSONArray ( 0 ) . toJavaList ( JSONObject . class ) ;
boolean is_zero = packageList . stream ( )
. allMatch ( row - > row . getDoubleValue ( " net_weight " ) < = 0 ) ;
if ( is_zero ) {
from_start . put ( " storagevehicle_code " , " " ) ;
} else {
from_start . put ( " bill_type " , " 1011 " ) ;
from_start . put ( " storagevehicle_code " , jsonSub . getString ( " package_box_sn " ) ) ;
}
}
storPublicService . updateStructAndPoint ( from_start ) ;
//插入包装关系出入库记录表
jsonSub . put ( " bill_code " , jo_mst . getString ( " bill_code " ) ) ;
jsonSub . put ( " bill_id " , jo_mst . getString ( " iostorinv_id " ) ) ;
jsonSub . put ( " bill_type " , jo_mst . getString ( " bill_type " ) ) ;
jsonSub . put ( " io_type " , " 1 " ) ;
jsonSub . put ( " insert_time " , DateUtil . now ( ) ) ;
jsonSub . put ( " record_id " , IdUtil . getSnowflake ( 1 , 1 ) . nextId ( ) ) ;
sub_record . insert ( jsonSub ) ;
}
HashMap < String , String > map = new HashMap < > ( ) ;
map . put ( " task_status " , TaskStatusEnum . FINISHED . getCode ( ) ) ;
map . put ( " finished_type " , " 01 " ) ;
map . put ( " update_optid " , currentUserId + " " ) ;
map . put ( " update_optname " , n ickName) ;
map . put ( " update_time " , now ) ;
map . put ( " update_optid " , Se curityUtils . getCur rentUserId( ) + " " ) ;
map . put ( " update_optname " , SecurityUtils . getCurrentN ickName( ) );
map . put ( " update_time " , DateUtil . now ( ) ) ;
//更新任务为完成
wo_Task . update ( map , " task_id=' " + task_id + " ' " ) ;
wo_Task . update ( map , " task_id=' " + whereJson . getString ( " task_id" ) + " ' " ) ;
// 查询此任务下所有的分配明细
JSONArray disArr = wo_dis . query ( " task_id=' " + task_id + " ' " ) . getResultJSONArray ( 0 ) ;
JSONArray disArr = wo_dis . query ( " task_id=' " + whereJson . getString ( " task_id" ) + " ' " ) . getResultJSONArray ( 0 ) ;
for ( int i = 0 ; i < disArr . size ( ) ; i + + ) {
JSONObject jsonDis = disArr . getJSONObject ( i ) ;
JSONObject json = disArr . getJSONObject ( i ) ;
// 更新分配明细为完成
jsonDis . put ( " work_status " , " 99 " ) ;
wo_dis . update ( jsonDis ) ;
json . put ( " work_status " , " 99 " ) ;
wo_dis . update ( json ) ;
// 判断此明细下是否还有未完成的分配明细
JSONObject jsonDtl = wo_dtl . query ( " iostorinvdtl_id = ' " + jsonDis . getString ( " iostorinvdtl_id " ) + " ' " ) . uniqueResult ( 0 ) ;
JSONObject jsonDtl = wo_dtl . query ( " iostorinvdtl_id = ' " + json . getString ( " iostorinvdtl_id " ) + " ' " ) . uniqueResult ( 0 ) ;
JSONArray disArr2 = wo_dis . query ( " iostorinvdtl_id = ' " + jsonDtl . getString ( " iostorinvdtl_id " ) + " ' and work_status <> '99' " ) . getResultJSONArray ( 0 ) ;
if ( ObjectUtil . isEmpty ( disArr2 ) ) {
// 更新明细为完成
@@ -5214,9 +5669,9 @@ public class CheckOutBillServiceImpl implements CheckOutBillService {
}
//判断是否还有未完成的明细
JSONArray ja = wo_dtl . query ( " bill_status<>'99' and iostorinv_id=' " + whereJson . getString ( " iostorinv_id " ) + " ' " ) . getResultJSONArray ( 0 ) ;
JSONArray ja = wo_dtl . query ( " bill_status<>'99' and iostorinv_id=' " + disArr . getJSONObject ( 0 ) . getString ( " iostorinv_id " ) + " ' " ) . getResultJSONArray ( 0 ) ;
if ( ja . size ( ) = = 0 ) {
this . confirm( whereJson ) ;
this . confirmOrder ( jo_mst ) ;
}
}