@ -9,6 +9,7 @@ import cn.iocoder.yudao.common.SoStatusEnum;
import cn.iocoder.yudao.common.TicketsItemStatusEnum ;
import cn.iocoder.yudao.framework.security.core.LoginUser ;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils ;
import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils ;
import cn.iocoder.yudao.module.base.entity.RepairWorker ;
import cn.iocoder.yudao.module.base.service.RepairRecordsService ;
import cn.iocoder.yudao.module.base.service.RepairWorkerService ;
@ -138,7 +139,6 @@ public class DlTicketWaresServiceImpl extends ServiceImpl<DlTicketWaresMapper, D
}
} else if ( userRoleCode . equals ( RepairRoleEnum . WAREHOUSE . getCode ( ) ) ) {
/ / 维修仓库管理员
reqVO . setStatus ( null ) ;
reqVO . setUserRole ( 5 ) ;
} else {
return null ;
@ -212,7 +212,8 @@ public class DlTicketWaresServiceImpl extends ServiceImpl<DlTicketWaresMapper, D
. map ( item - > {
DlTwItem twItem = BeanUtil . toBean ( item , DlTwItem . class ) ;
twItem . setTwId ( ticketWares . getId ( ) ) ;
twItem . setWaresStatus ( " 0 " ) ;
twItem . setWaresStatus ( " " ) ;
twItem . setWaresAlreadyCount ( 0 ) ;
return twItem ;
} ) . collect ( Collectors . toList ( ) ) ;
if ( CollectionUtil . isEmpty ( list ) ) {
@ -260,115 +261,87 @@ public class DlTicketWaresServiceImpl extends ServiceImpl<DlTicketWaresMapper, D
@Override
@DSTransactional
public void auditTicketWares ( DlTicketWaresRespVO respVO ) {
/ / 设置单据状态
/ / 配件申请单id
String mainId = respVO . getId ( ) ;
/ / 单据状态 02 通过 05驳回
/ / 取出前端传的单据状态 , 这里是前端传的 , 只有两个 , 01通过 , 02驳回
String status = respVO . getStatus ( ) ;
/ / 配件信息
List < DlRepairTitem > repairItemList = respVO . getWares ( ) ;
DlTicketWares updateObj = this . getById ( mainId ) ;
String ticketMainId = updateObj . getTicketId ( ) ;
updateObj . setStatus ( status ) ;
this . updateById ( updateObj ) ;
/ / 如果是通过并且是领料就还需要把配件信息加入到工单中
if ( ObjectUtil . isNotEmpty ( status ) & & status . equals ( " 02 " ) ) {
/ / 更新维修工单
if ( null ! = respVO . getRepairWaresList ( ) ) {
repairItemList = new ArrayList < > ( ) ;
/ / 走的是更新配件库价格
Map < String , BigDecimal > updateMap = respVO . getRepairWaresList ( ) . stream ( ) . collect ( Collectors . toMap ( RepairWares : : getId , RepairWares : : getPrice ) ) ;
/ / 更新配件库的价格
List < RepairWares > updateWaresList = new ArrayList < > ( ) ;
/ / 去库里面查需要的配件
LambdaQueryWrapper < DlTwItem > queryWrapper = new LambdaQueryWrapper < DlTwItem > ( )
. eq ( DlTwItem : : getTwId , mainId ) ;
List < DlTwItem > applyList = twItemService . list ( queryWrapper ) ;
if ( ! applyList . isEmpty ( ) ) {
/ / 查配件库
List < RepairWares > waresList = repairWaresService . listByIds ( applyList . stream ( ) . map ( DlTwItem : : getWaresId ) . collect ( Collectors . toList ( ) ) ) ;
Map < String , RepairWares > waresMap = waresList . stream ( ) . collect ( Collectors . toMap ( RepairWares : : getId , Function . identity ( ) ) ) ;
/ / 组装工单子表数据
for ( DlTwItem item : applyList ) {
DlRepairTitem repairTitem = new DlRepairTitem ( ) ;
repairTitem . setTicketId ( ticketMainId ) ;
repairTitem . setItemCount ( item . getWaresCount ( ) ) ;
repairTitem . setItemName ( item . getWaresName ( ) ) ;
repairTitem . setItemUnit ( waresMap . get ( item . getWaresId ( ) ) . getUnit ( ) ) ;
/ / 取前端传过来的销售价格
repairTitem . setItemPrice ( updateMap . get ( item . getId ( ) ) ) ;
/ / 默认不打折为1
repairTitem . setItemDiscount ( new BigDecimal ( 1 ) ) ;
repairTitem . setItemMoney ( new BigDecimal ( repairTitem . getItemCount ( ) ) . multiply ( repairTitem . getItemPrice ( ) ) ) ;
/ / 类型是配件
repairTitem . setItemType ( " 02 " ) ;
repairTitem . setPartId ( item . getWaresId ( ) ) ;
repairTitem . setItemStatus ( TicketsItemStatusEnum . WAITING_RECEIVE . getCode ( ) ) ;
repairItemList . add ( repairTitem ) ;
/ / 组装配件库更新价格
RepairWares update = new RepairWares ( ) ;
update . setId ( item . getWaresId ( ) ) ;
update . setPrice ( updateMap . get ( item . getId ( ) ) ) ;
updateWaresList . add ( update ) ;
}
}
if ( ! updateWaresList . isEmpty ( ) ) {
repairWaresService . updateBatchById ( updateWaresList ) ;
}
}
/ / 更新维修工单子表 - - - - 需要合并相同的配件 , 故修改
/ / 先查维修工单的子表中的配件相关的信息
List < DlRepairTitem > oldTitem = repairTitemService . list ( new LambdaQueryWrapper < DlRepairTitem > ( ) . and ( i - > i . eq ( DlRepairTitem : : getTicketId , ticketMainId ) . eq ( DlRepairTitem : : getItemType , " 02 " ) ) ) ;
/ / 过滤出新申请的配件里面有没有已经存在于工单子表的
List < String > waresIds = oldTitem . stream ( ) . map ( DlRepairTitem : : getPartId ) . collect ( Collectors . toList ( ) ) ;
List < DlRepairTitem > already = repairItemList . stream ( ) . filter ( item - > waresIds . contains ( item . getPartId ( ) ) ) . collect ( Collectors . toList ( ) ) ;
/ / 更新已经存在的配件
if ( CollectionUtil . isNotEmpty ( already ) ) {
List < DlRepairTitem > updateItems = new ArrayList < > ( ) ;
already . forEach ( item - > {
DlRepairTitem titem = oldTitem . stream ( ) . filter ( i - > i . getPartId ( ) . equals ( item . getPartId ( ) ) ) . findFirst ( ) . orElse ( null ) ;
if ( titem ! = null ) {
DlRepairTitem newItem = new DlRepairTitem ( ) ;
newItem . setId ( titem . getId ( ) ) ;
newItem . setItemCount ( titem . getItemCount ( ) + item . getItemCount ( ) ) ;
/ / 如果设置了折扣就用 , 没有就是1
BigDecimal itemDiscount = titem . getItemDiscount ( ) = = null ? new BigDecimal ( 1 ) : titem . getItemDiscount ( ) ;
/ / titem取价格 、 newItem取数量
newItem . setItemMoney ( titem . getItemPrice ( ) . multiply ( BigDecimal . valueOf ( newItem . getItemCount ( ) ) ) . multiply ( itemDiscount ) ) ;
updateItems . add ( newItem ) ;
}
} ) ;
if ( CollectionUtil . isNotEmpty ( updateItems ) ) {
repairTitemService . updateBatchById ( updateItems ) ;
}
}
/ / 新增维修工单中没有的配件
List < DlRepairTitem > newItems = repairItemList . stream ( ) . filter ( item - > ! waresIds . contains ( item . getPartId ( ) ) ) . collect ( Collectors . toList ( ) ) ;
newItems . forEach ( item - > {
/ / 主表id
item . setTicketId ( ticketMainId ) ;
/ / 类型为配件
item . setItemType ( " 02 " ) ;
/ / 状态为未领料
item . setItemStatus ( TicketsItemStatusEnum . WAITING_RECEIVE . getCode ( ) ) ;
} ) ;
repairTitemService . saveBatch ( newItems ) ;
/ / 重新计算工单
boolean flag = repairTicketsService . computeTicket ( ticketMainId ) ;
if ( ! flag ) {
throw exception0 ( 500 , " 系统异常 " ) ;
}
/ / 更新仓库
if ( CollectionUtil . isNotEmpty ( repairItemList ) ) {
List < RepairWares > updateWares = repairItemList . stream ( ) . map ( item - > {
RepairWares wares = new RepairWares ( ) ;
wares . setId ( item . getPartId ( ) ) ;
wares . setPrice ( item . getItemPrice ( ) ) ;
return wares ;
/ / 取出前端操作的配件申请表的子项id
List < String > twItemIds = respVO . getItems ( ) . stream ( ) . map ( DlTwItem : : getId ) . collect ( Collectors . toList ( ) ) ;
/ / 查所有的子项
List < DlTwItem > twItems = twItemService . listByIds ( twItemIds ) ;
/ / 取所有的配件信息
List < String > wareIds = twItems . stream ( ) . map ( DlTwItem : : getWaresId ) . collect ( Collectors . toList ( ) ) ;
List < RepairWares > repairWares = repairWaresService . listByIds ( wareIds ) ;
/ / 更新配件申请表子表
List < DlTwItem > newTwitems = twItemIds . stream ( ) . map ( item - > {
DlTwItem twItem = new DlTwItem ( ) ;
twItem . setId ( item ) ;
twItem . setWaresStatus ( status . equals ( " 01 " ) ? " 1 " : " 0 " ) ;
twItem . setHandleId ( SecurityFrameworkUtils . getLoginUserId ( ) ) ;
twItem . setHandleName ( SecurityFrameworkUtils . getLoginUserNickname ( ) ) ;
return twItem ;
} ) . collect ( Collectors . toList ( ) ) ;
repairWaresService . updateBatchById ( updateWares ) ;
twItemService . updateBatchById ( newTwitems ) ;
/ / 更新配件申请主表
List < DlTwItem > allTwitems = twItemService . list ( new LambdaQueryWrapper < DlTwItem > ( ) . in ( DlTwItem : : getTwId , respVO . getId ( ) ) ) ;
List < DlTwItem > passTwitems = allTwitems . stream ( ) . filter ( item - > item . getWaresStatus ( ) . equals ( " 1 " ) | | item . getWaresStatus ( ) . equals ( " 0 " ) ) . collect ( Collectors . toList ( ) ) ;
boolean isStatus = CollectionUtil . isNotEmpty ( passTwitems ) & & passTwitems . size ( ) = = allTwitems . size ( ) ;
if ( isStatus ) {
baseMapper . update ( new LambdaUpdateWrapper < DlTicketWares > ( ) . set ( DlTicketWares : : getStatus , " 02 " ) . eq ( DlTicketWares : : getId , respVO . getId ( ) ) ) ;
}
/ / 更新维修工单子表
if ( status . equals ( " 01 " ) ) {
DlTicketWares ticketWares = baseMapper . selectById ( respVO . getId ( ) ) ;
List < DlRepairTitem > titems = repairTitemService . list ( new LambdaQueryWrapper < DlRepairTitem > ( ) . and ( i - > {
i . in ( DlRepairTitem : : getTicketId , ticketWares . getTicketId ( ) )
. eq ( DlRepairTitem : : getItemType , " 02 " ) ;
} ) ) ;
/ / 要修改的
List < DlRepairTitem > updateTitems = titems . stream ( ) . filter ( item - > wareIds . contains ( item . getPartId ( ) ) ) . collect ( Collectors . toList ( ) ) ;
/ / 修改
if ( CollectionUtil . isNotEmpty ( updateTitems ) ) {
List < DlRepairTitem > newTitems = updateTitems . stream ( ) . map ( item - > {
DlRepairTitem titem = new DlRepairTitem ( ) ;
titem . setId ( item . getId ( ) ) ;
DlTwItem twItem = allTwitems . stream ( ) . filter ( i - > i . getWaresId ( ) . equals ( item . getPartId ( ) ) ) . findFirst ( ) . orElse ( null ) ;
if ( twItem ! = null ) {
titem . setItemCount ( item . getItemCount ( ) + twItem . getWaresCount ( ) ) ;
titem . setItemMoney ( item . getItemPrice ( ) . multiply ( BigDecimal . valueOf ( titem . getItemCount ( ) ) ) . multiply ( item . getItemDiscount ( ) ) ) ;
}
return titem ;
} ) . collect ( Collectors . toList ( ) ) ;
repairTitemService . updateBatchById ( newTitems ) ;
}
/ / 要新增的
if ( updateTitems . size ( ) < wareIds . size ( ) ) {
List < String > titemIds = updateTitems . stream ( ) . map ( DlRepairTitem : : getPartId ) . collect ( Collectors . toList ( ) ) ;
List < RepairWares > newWares = repairWares . stream ( ) . filter ( item - > ! titemIds . contains ( item . getId ( ) ) ) . collect ( Collectors . toList ( ) ) ;
/ / 新增
List < DlRepairTitem > newTitems = newWares . stream ( ) . map ( item - > {
DlRepairTitem titem = new DlRepairTitem ( ) ;
titem . setTicketId ( ticketWares . getTicketId ( ) ) ;
titem . setItemType ( " 02 " ) ;
titem . setItemName ( item . getName ( ) ) ;
DlTwItem twItem = allTwitems . stream ( ) . filter ( i - > i . getWaresId ( ) . equals ( item . getId ( ) ) ) . findFirst ( ) . orElse ( null ) ;
titem . setItemCount ( twItem ! = null ? twItem . getWaresCount ( ) : 0 ) ;
titem . setItemUnit ( item . getUnit ( ) ) ;
titem . setItemPrice ( item . getPrice ( ) ! = null ? item . getPrice ( ) : BigDecimal . ZERO ) ;
titem . setItemDiscount ( BigDecimal . ONE ) ;
titem . setItemMoney ( titem . getItemPrice ( ) . multiply ( BigDecimal . valueOf ( titem . getItemCount ( ) ) ) . multiply ( titem . getItemDiscount ( ) ) ) ;
titem . setRepairIds ( String . valueOf ( ticketWares . getRepairId ( ) ) ) ;
titem . setRepairNames ( ticketWares . getRepairName ( ) ) ;
titem . setSaleId ( ticketWares . getAdviserId ( ) ) ;
titem . setSaleName ( ticketWares . getAdviserName ( ) ) ;
titem . setPartId ( item . getId ( ) ) ;
titem . setItemStatus ( " 04 " ) ;
titem . setRemark ( twItem ! = null ? twItem . getRemark ( ) : null ) ;
return titem ;
} ) . collect ( Collectors . toList ( ) ) ;
repairTitemService . saveBatch ( newTitems ) ;
}
/ / 更新维修工单主表
boolean flag = repairTicketsService . computeTicket ( ticketWares . getTicketId ( ) ) ;
if ( ! flag ) {
throw exception0 ( 500 , " 重新计算工单错误 " ) ;
}
/ / 发送通过的消息给仓库
@ -378,14 +351,12 @@ public class DlTicketWaresServiceImpl extends ServiceImpl<DlTicketWaresMapper, D
ids . forEach ( id - > repairWorkerService . sentMessage ( id , " 您有新的配件申请单需要处理 " ) ) ;
}
}
/ / 如果是驳回 , 通知维修工
if ( status . equals ( " 05 " ) ) {
/ / 发送没有通过的消息给员工
/ / 通知维修工
DlTicketWares ticketWares = baseMapper . selectById ( respVO . getId ( ) ) ;
repairWorkerService . sentMessage ( ticketWares . getRepairId ( ) , " 您 的配件申请单被驳回了" ) ;
}
repairWorkerService . sentMessage ( ticketWares . getRepairId ( ) , " 您有新的配件申请单 " + ( status . equals ( " 01 " ) ? " 审批通过了 " : " 被驳回了 " ) ) ;
/ / 插入记录
repairRecordsService . saveRepairRecord ( respVO . getTicketId ( ) , null , RecordTypeEnum . SPPJSQD . getCode ( ) , " 审批配件申请单 " , null ) ;
repairRecordsService . saveRepairRecord ( respVO . getTicketId ( ) , null , RecordTypeEnum . SPPJSQD . getCode ( ) , " 审批配件申请单 " , null ) ;
}
/ * *
@ -450,14 +421,14 @@ public class DlTicketWaresServiceImpl extends ServiceImpl<DlTicketWaresMapper, D
} ) ) ;
/ / 要操作的库存数据
List < RepairWares > wares = repairWaresService . list ( new LambdaQueryWrapper < RepairWares > ( ) . in ( RepairWares : : getId , respVO . getRepairSois ( ) . stream ( ) . map ( DlRepairSoi : : getGoodsId ) . collect ( Collectors . toList ( ) ) ) ) ;
Map < String , String > waresNameMap = wares . stream ( ) . collect ( Collectors . toMap ( RepairWares : : getId , RepairWares : : getName ) ) ;
String remarkStr = " " ;
for ( DlRepairSoi item : respVO . getRepairSois ( ) ) {
Map < String , String > waresNameMap = wares . stream ( ) . collect ( Collectors . toMap ( RepairWares : : getId , RepairWares : : getName ) ) ;
String remarkStr = " " ;
for ( DlRepairSoi item : respVO . getRepairSois ( ) ) {
/ / 组装通知领取配件的文字
if ( ! " " . equals ( remarkStr ) ) {
remarkStr + = " ; " ;
if ( ! " " . equals ( remarkStr ) ) {
remarkStr + = " ; " ;
}
remarkStr + = waresNameMap . get ( item . getGoodsId ( ) ) + " x " + item . getGoodsCount ( ) ;
remarkStr + = waresNameMap . get ( item . getGoodsId ( ) ) + " x " + item . getGoodsCount ( ) ;
}
if ( type . equals ( " 02 " ) ) { / / 领料
/ / 构造新数据
@ -472,8 +443,8 @@ public class DlTicketWaresServiceImpl extends ServiceImpl<DlTicketWaresMapper, D
Integer waresAlreadyCount = item . getWaresAlreadyCount ( ) = = null ? 0 : item . getWaresAlreadyCount ( ) ;
/ / 取本来的已领取数量 + 本次要领取的数量
dlTwItem . setWaresAlreadyCount ( repairSoi . getGoodsCount ( ) + waresAlreadyCount ) ;
/ / 如果已领取数量等于申请数量 , 那这个配件就是领料完了 , 为01已领料 , 反之不变
dlTwItem . setWaresStatus ( item . getWaresCount ( ) . equals ( dlTwItem . getWaresAlreadyCount ( ) ) ? " 01 " : item . getWaresStatus ( ) ) ;
/ / 如果已领取数量等于申请数量 , 那这个配件就是领料完了 , 为01已领料 , 反之不变 - - - - 这里不变了
/ / dlTwItem . setWaresStatus ( item . getWaresCount ( ) . equals ( dlTwItem . getWaresAlreadyCount ( ) ) ? " 01 " : item . getWaresStatus ( ) ) ;
} ) ;
return dlTwItem ;
} ) . collect ( Collectors . toList ( ) ) ;
@ -501,8 +472,8 @@ public class DlTicketWaresServiceImpl extends ServiceImpl<DlTicketWaresMapper, D
/ / 取本来的已领取数量 - 本次要退料的数量
dlTwItem . setWaresAlreadyCount ( item . getWaresAlreadyCount ( ) - repairSoi . getGoodsCount ( ) ) ;
/ / dlTwItem . setWaresStatus ( repairSoi . getGoodsCount ( ) . equals ( item . getWaresCount ( ) ) ? " 04 " : item . getWaresStatus ( ) ) ;
/ / 如果可领料数量等于申请数量 , 那这个配件就是退料完了 , 为03已退料 , 反之不变
dlTwItem . setWaresStatus ( item . getWaresCount ( ) . equals ( dlTwItem . getWaresAlreadyCount ( ) ) ? " 1 " : " 0 " ) ;
/ / 如果可领料数量等于申请数量 , 那这个配件就是退料完了 , 为03已退料 , 反之不变 - - - 这里也不变了
/ / dlTwItem . setWaresStatus ( item . getWaresCount ( ) . equals ( dlTwItem . getWaresAlreadyCount ( ) ) ? " 1 " : " 0 " ) ;
} ) ;
return dlTwItem ;
} ) . collect ( Collectors . toList ( ) ) ;
@ -542,8 +513,8 @@ public class DlTicketWaresServiceImpl extends ServiceImpl<DlTicketWaresMapper, D
/ / }
/ / 插入记录
/ / 最后记录操作日志 - - 创建工单
repairRecordsService . saveRepairRecord ( respVO . getTicketId ( ) , null , " 02 " . equals ( type ) ? RecordTypeEnum . TZLL . getCode ( ) : RecordTypeEnum . TZTL . getCode ( ) ,
( " 02 " . equals ( type ) ? " 通知领料 " : " 通知退料 " ) + " ,配件明细: " + remarkStr , null ) ;
repairRecordsService . saveRepairRecord ( respVO . getTicketId ( ) , null , " 02 " . equals ( type ) ? RecordTypeEnum . TZLL . getCode ( ) : RecordTypeEnum . TZTL . getCode ( ) ,
( " 02 " . equals ( type ) ? " 通知领料 " : " 通知退料 " ) + " ,配件明细: " + remarkStr , null ) ;
/ / 通知维修工
/ / 查维修工的userId
repairWorkerService . sentMessage ( respVO . getRepairId ( ) , type . equals ( " 02 " ) ? " 您有新的领料单需要确认 " : " 您有新的退料单需要确认 " ) ;
@ -559,7 +530,6 @@ public class DlTicketWaresServiceImpl extends ServiceImpl<DlTicketWaresMapper, D
@Override
@DSTransactional
public void repairPassTicketWares ( DlTicketWaresRespVO respVO ) {
/ / todo
/ / / / 更新领料申请子表
/ / twItemService . updateBatchById ( respVO . getItems ( ) ) ;
/ / / / 更新领料申请表