补正同步申请表数据到工单

This commit is contained in:
xiaofajia 2024-10-26 10:05:53 +08:00
parent 35e61c5321
commit 76226e7f67
2 changed files with 56 additions and 13 deletions

View File

@ -200,4 +200,13 @@ public interface DlRepairTicketsService extends IService<DlRepairTickets> {
* @param respVO 主要有两个参数主表ID,itemList(这个需要前端处理成子表的对象能接收的数据)
**/
void addItems(DlRepairTicketsRespVO respVO);
/**
* 用于同步一个工单的所有配件申请表的数据到维修工单主要针对已领取数量小于申请数量的情况
*
* @author 小李
* @date 9:52 2024/10/26
* @param id 维修工单ID
**/
boolean syncTicketWaresToTicket(String id);
}

View File

@ -679,6 +679,12 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
.setSql("now_repair_id = adviser_id")
.setSql("now_repair_name = adviser_name")
.eq(DlRepairTickets::getId, respVO.getId()));
// 因为目前的配件申请表在申请的时候就把配件加到工单中了但后续的领取并没有同步到工单所以如果这里是员工直接完成移交给服务顾问就需要同步一下
boolean flag = syncTicketWaresToTicket(respVO.getId());
if (!flag){
throw exception0(500, "系统异常");
}
} else {
repairWorkerService.sentMessage(Long.valueOf(tickets.getAdviserId()), message);
}
@ -805,13 +811,33 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
.setSql("now_repair_name = adviser_name")
.eq(DlRepairTickets::getId, respVO.getId())
);
boolean flag = syncTicketWaresToTicket(respVO.getId());
if (!flag){
throw exception0(500, "系统异常");
}
// 通知服务顾问
DlRepairTickets tickets = baseMapper.selectById(respVO.getId());
repairWorkerService.sentMessage(Long.valueOf(tickets.getAdviserId()), "您有新的工单可以出厂检验");
}
/**
* 用于同步一个工单的所有配件申请表的数据到维修工单主要针对已领取数量小于申请数量的情况
*
* @author 小李
* @date 9:52 2024/10/26
* @param id 维修工单ID
**/
@Override
public boolean syncTicketWaresToTicket(String id){
// 先查满足条件的申请表
ArrayList<String> status = new ArrayList<>();
status.add("01"); // 待审核
status.add("05"); // 已驳回
// 查工单所有已通过的配件申请单
List<DlTicketWares> list = ticketWaresService.list(new LambdaQueryWrapper<DlTicketWares>().and(item -> {
item.eq(DlTicketWares::getTicketId, respVO.getId())
item.eq(DlTicketWares::getTicketId, id)
.notIn(DlTicketWares::getStatus, status);
}));
// 查配件申请表的所有已领取数量小于申请数量的子表信息
@ -825,12 +851,12 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
// 查询工单子表三个查询条件属于那个工单属于配件类型属于需要改变的即申请表的已领取数量小于申请数量的
Set<String> waresId = twItems.stream().map(DlTwItem::getWaresId).collect(Collectors.toSet());
List<DlRepairTitem> items = titemService.list(new LambdaQueryWrapper<DlRepairTitem>().and(item -> {
item.eq(DlRepairTitem::getTicketId, respVO.getId())
item.eq(DlRepairTitem::getTicketId, id)
.eq(DlRepairTitem::getItemType, "02")
.in(DlRepairTitem::getPartId, waresId);
}));
// 同一个配件可能申请过多次属于是一个工单配件可能是对应多个申请表配件
List<DlRepairTitem> updateItems = items.stream().map(item -> {
List<DlRepairTitem> AllItems = items.stream().map(item -> {
DlRepairTitem titem = new DlRepairTitem();
titem.setId(item.getId());
List<DlTwItem> wares = twItems.stream().filter(i -> i.getWaresId().equals(item.getPartId())).collect(Collectors.toList());
@ -841,19 +867,27 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
return titem;
}).collect(Collectors.toList());
// 更新维修工单子表
titemService.updateBatchById(updateItems);
// 可能出现配件申请单审核通过了没有任何领取或全部退了的情况所以如果itemCount等于0直接把这个数据删掉
// 过滤出需要删除的数据
List<DlRepairTitem> delItems = AllItems.stream().filter(item -> item.getItemCount() == 0).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(delItems)){
// 删除需要删的
titemService.removeBatchByIds(delItems);
Set<String> delIds = delItems.stream().map(DlRepairTitem::getId).collect(Collectors.toSet());
// 得到需要改的
List<DlRepairTitem> updateItems = AllItems.stream().filter(item -> delIds.contains(item.getId())).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(updateItems)){
titemService.updateBatchById(updateItems);
}
}else {
// 没有需要删的就是全部都需要改
titemService.updateBatchById(AllItems);
}
// 重新计算维修工单
boolean flag = computeTicket(respVO.getId());
if (!flag){
throw exception0(500, "系统异常");
}
return computeTicket(id);
}
// 通知服务顾问
DlRepairTickets tickets = baseMapper.selectById(respVO.getId());
repairWorkerService.sentMessage(Long.valueOf(tickets.getAdviserId()), "您有新的工单可以出厂检验");
return true;
}
/**