Compare commits

..

No commits in common. "bb6ee4618f4b4af684a4f0bb321a9ce4d8035e9c" and "5924aea9da5a6cc8a3eb8cc18d7cfbeb23ecc648" have entirely different histories.

View File

@ -341,13 +341,13 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
/** /**
* 获得一个工单的详细信息 * 获得一个工单的详细信息
* *
* @param id 工单ID * @param id 工单ID
* @param ifApp 是否是APP发起的查询 * @param ifApp 是否是APP发起的查询
* @author 小李 * @author 小李
* @date 16:05 2024/9/21 * @date 16:05 2024/9/21
**/ **/
@Override @Override
public DlRepairTicketsRespVO getTicketsById(String id, Boolean ifApp) { public DlRepairTicketsRespVO getTicketsById(String id,Boolean ifApp) {
// 查工单主表 // 查工单主表
DlRepairTickets dlRepairTickets = baseMapper.selectById(id); DlRepairTickets dlRepairTickets = baseMapper.selectById(id);
DlRepairTicketsRespVO result = BeanUtil.toBean(dlRepairTickets, DlRepairTicketsRespVO.class); DlRepairTicketsRespVO result = BeanUtil.toBean(dlRepairTickets, DlRepairTicketsRespVO.class);
@ -374,44 +374,44 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
} }
result.setProjects(projects); result.setProjects(projects);
if (ifApp) { if(ifApp){
//app的逻辑 //app的逻辑
List<AppWaresGroupVO> waresGroupList = new ArrayList<>(); List<AppWaresGroupVO> waresGroupList = new ArrayList<>();
//查这个工单的配件 //查这个工单的配件
List<DlRepairTitemReqVO> waresList = repairTitemMapper.selectByTicketId(id); List<DlRepairTitemReqVO> waresList = repairTitemMapper.selectByTicketId(id);
if (CollectionUtil.isNotEmpty(waresList)) { if (CollectionUtil.isNotEmpty(waresList)) {
//先过滤出itenTypeId为null或空或者itemTypeName为null或空的为单独一个组 //先过滤出itenTypeId为null或空或者itemTypeName为null或空的为单独一个组
List<DlRepairTitemReqVO> nullList = waresList.stream().filter(item -> StringUtils.isEmpty(item.getItemTypeId()) || StringUtils.isEmpty(item.getItemTypeName())).collect(Collectors.toList()); List<DlRepairTitemReqVO> nullList = waresList.stream().filter(item->StringUtils.isEmpty(item.getItemTypeId()) || StringUtils.isEmpty(item.getItemTypeName())).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(nullList)) { if (CollectionUtil.isNotEmpty(nullList)) {
AppWaresGroupVO waresGroupVO = new AppWaresGroupVO(); AppWaresGroupVO waresGroupVO = new AppWaresGroupVO();
waresGroupVO.setWares(nullList); waresGroupVO.setWares(nullList);
waresGroupVO.setGroupName("未知分组"); waresGroupVO.setGroupName("未知分组");
waresGroupVO.setNums(nullList.size()); waresGroupVO.setNums(nullList.size());
waresGroupVO.setTotalAmount(nullList.stream().peek(item -> { waresGroupVO.setTotalAmount(nullList.stream().peek(item->{
if (null == item.getItemMoney()) { if(null==item.getItemMoney()){
item.setItemMoney(new BigDecimal(0)); item.setItemMoney(new BigDecimal(0));
} }
}).map(DlRepairTitem::getItemMoney).reduce(BigDecimal.ZERO, BigDecimal::add)); }).map(DlRepairTitem::getItemMoney).reduce(BigDecimal.ZERO,BigDecimal::add));
waresGroupList.add(waresGroupVO); waresGroupList.add(waresGroupVO);
} }
//过滤出有分类的进行分组 //过滤出有分类的进行分组
Map<String, List<DlRepairTitemReqVO>> groupListMap = waresList.stream().filter(item -> StringUtils.isNotEmpty(item.getItemTypeId()) && StringUtils.isNotEmpty(item.getItemTypeName())).collect(Collectors.groupingBy(DlRepairTitem::getItemTypeId)); Map<String,List<DlRepairTitemReqVO>> groupListMap = waresList.stream().filter(item->StringUtils.isNotEmpty(item.getItemTypeId()) && StringUtils.isNotEmpty(item.getItemTypeName())).collect(Collectors.groupingBy(DlRepairTitem::getItemTypeId));
for (String key : groupListMap.keySet()) { for (String key:groupListMap.keySet()){
AppWaresGroupVO waresGroupVO = new AppWaresGroupVO(); AppWaresGroupVO waresGroupVO = new AppWaresGroupVO();
waresGroupVO.setWares(groupListMap.get(key)); waresGroupVO.setWares(groupListMap.get(key));
waresGroupVO.setGroupName(groupListMap.get(key).get(0).getItemTypeName()); waresGroupVO.setGroupName(groupListMap.get(key).get(0).getItemTypeName());
waresGroupVO.setGroupId(key); waresGroupVO.setGroupId(key);
waresGroupVO.setNums(groupListMap.get(key).size()); waresGroupVO.setNums(groupListMap.get(key).size());
waresGroupVO.setTotalAmount(groupListMap.get(key).stream().peek(item -> { waresGroupVO.setTotalAmount(groupListMap.get(key).stream().peek(item->{
if (null == item.getItemMoney()) { if(null==item.getItemMoney()){
item.setItemMoney(new BigDecimal(0)); item.setItemMoney(new BigDecimal(0));
} }
}).map(DlRepairTitem::getItemMoney).reduce(BigDecimal.ZERO, BigDecimal::add)); }).map(DlRepairTitem::getItemMoney).reduce(BigDecimal.ZERO,BigDecimal::add));
waresGroupList.add(waresGroupVO); waresGroupList.add(waresGroupVO);
} }
} }
result.setWaresGroupList(waresGroupList); result.setWaresGroupList(waresGroupList);
} else { }else{
// 取配件----原有逻辑-电脑端 // 取配件----原有逻辑-电脑端
List<DlRepairTitemReqVO> wares = items.stream().filter(item -> item.getItemType().equals("02")).collect(Collectors.toList()); List<DlRepairTitemReqVO> wares = items.stream().filter(item -> item.getItemType().equals("02")).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(wares)) { if (CollectionUtil.isNotEmpty(wares)) {
@ -1453,47 +1453,47 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
* @date 11:30 2024/10/24 * @date 11:30 2024/10/24
**/ **/
@Override @Override
public Map<String, Long> getBossNum(String selectType, String startDate, String endDate) { public Map<String, Long> getBossNum(String selectType,String startDate,String endDate) {
Map<String, Long> rtnMap = new HashMap<>(); Map<String, Long> rtnMap = new HashMap<>();
//维修中---当前这一时刻 //维修中---当前这一时刻
long workingNum = 0; long workingNum = 0;
//在厂数--当前这一时刻 //在厂数--当前这一时刻
long inCompanyNum = 0; long inCompanyNum = 0;
//进场数 //进场数
long newOrderNum = 0; long newOrderNum=0;
//已完成 //已完成
long overNum = 0; long overNum=0;
//已交车 //已交车
long giveCusNum = 0; long giveCusNum=0;
List<DlRepairTickets> repairTickets = this.list(); List<DlRepairTickets> repairTickets = this.list();
if (!repairTickets.isEmpty()) { if (!repairTickets.isEmpty()) {
workingNum = repairTickets.stream().filter(item -> TicketsStatusEnum.WORKING.getCode().equals(item.getTicketsStatus())).count(); workingNum = repairTickets.stream().filter(item -> TicketsStatusEnum.WORKING.getCode().equals(item.getTicketsStatus())).count();
inCompanyNum = repairTickets.stream().filter(item -> TicketsStatusEnum.NO_PAY.getCode().equals(item.getTicketsStatus())).count(); inCompanyNum = repairTickets.stream().filter(item -> TicketsStatusEnum.NO_PAY.getCode().equals(item.getTicketsStatus())).count();
LocalDateTime currentTime = LocalDateTime.now(); LocalDateTime currentTime = LocalDateTime.now();
if ("today".equals(selectType)) { if("today".equals(selectType)){
String nowDayStr = DateUtil.formatDate(new Date()); String nowDayStr = DateUtil.formatDate(new Date());
//查当日进厂数已完成已交车 //查当日进厂数已完成已交车
newOrderNum = repairTickets.stream().filter(item -> item.getCreateTime().toLocalDate().equals(currentTime.toLocalDate())).count(); newOrderNum = repairTickets.stream().filter(item -> item.getCreateTime().toLocalDate().equals(currentTime.toLocalDate())).count();
//查当日已完成的总检完成的 //查当日已完成的总检完成的
overNum = repairTicketsMapper.selectCountByParams(nowDayStr, RecordTypeEnum.ZJ.getCode(), null, null); overNum = repairTicketsMapper.selectCountByParams(nowDayStr,RecordTypeEnum.ZJ.getCode(),null,null);
//查当日已交车的已结算的 //查当日已交车的已结算的
giveCusNum = repairTicketsMapper.selectCountByParams(nowDayStr, RecordTypeEnum.JS.getCode(), null, null); giveCusNum = repairTicketsMapper.selectCountByParams(nowDayStr,RecordTypeEnum.JS.getCode(),null,null);
} else if ("all".equals(selectType)) { }else if("all".equals(selectType)){
//查累计进厂数已完成已交车 //查累计进厂数已完成已交车
newOrderNum = repairTickets.size(); newOrderNum = repairTickets.size();
//查累计已完成的总检完成的 //查累计已完成的总检完成的
overNum = repairTicketsMapper.selectCountByParams(null, RecordTypeEnum.ZJ.getCode(), null, null); overNum = repairTicketsMapper.selectCountByParams(null,RecordTypeEnum.ZJ.getCode(),null,null);
//查累计已交车的已结算的 //查累计已交车的已结算的
giveCusNum = repairTicketsMapper.selectCountByParams(null, RecordTypeEnum.JS.getCode(), null, null); giveCusNum = repairTicketsMapper.selectCountByParams(null,RecordTypeEnum.JS.getCode(),null,null);
} else { }else {
//查某个时间范围内进厂数已完成已交车 //查某个时间范围内进厂数已完成已交车
LocalDateTime startTime = LocalDateTime.parse(startDate + " 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); LocalDateTime startTime = LocalDateTime.parse(startDate+" 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
LocalDateTime endTime = LocalDateTime.parse(endDate + " 23:59:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); LocalDateTime endTime = LocalDateTime.parse(endDate+" 23:59:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
newOrderNum = repairTickets.stream().filter(item -> item.getCreateTime().isAfter(startTime) && item.getCreateTime().isBefore(endTime)).count(); newOrderNum = repairTickets.stream().filter(item -> item.getCreateTime().isAfter(startTime) && item.getCreateTime().isBefore(endTime)).count();
//查某区间范围内已完成的总检完成的 //查某区间范围内已完成的总检完成的
overNum = repairTicketsMapper.selectCountByParams(null, RecordTypeEnum.ZJ.getCode(), startDate + " 00:00:00", endDate + " 23:59:59"); overNum = repairTicketsMapper.selectCountByParams(null,RecordTypeEnum.ZJ.getCode(), startDate+" 00:00:00", endDate+" 23:59:59");
//查某区间范围内已交车的已结算的 //查某区间范围内已交车的已结算的
giveCusNum = repairTicketsMapper.selectCountByParams(null, RecordTypeEnum.JS.getCode(), startDate + " 00:00:00", endDate + " 23:59:59"); giveCusNum = repairTicketsMapper.selectCountByParams(null,RecordTypeEnum.JS.getCode(), startDate+" 00:00:00", endDate+" 23:59:59");
} }
} }
rtnMap.put("workingNum", workingNum); rtnMap.put("workingNum", workingNum);
@ -1565,7 +1565,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
throw exception0(500, "工单中有项目或配件没有设置价格,请服务顾问填写项目价格,仓库填写配件价格"); throw exception0(500, "工单中有项目或配件没有设置价格,请服务顾问填写项目价格,仓库填写配件价格");
} }
// 如果有为0的那就提示让操作人选择 // 如果有为0的那就提示让操作人选择
if (item.getItemPrice().equals(new BigDecimal("0.00"))) { if (item.getItemPrice().equals(new BigDecimal("0.00"))){
return false; return false;
} }
} }
@ -1582,67 +1582,70 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
@Override @Override
@DSTransactional @DSTransactional
public boolean computeTicket(String ticketId) { public boolean computeTicket(String ticketId) {
// 取主表 // 查子表
DlRepairTickets tickets = baseMapper.selectById(ticketId); List<DlRepairTitem> list = titemService.list(new LambdaQueryWrapper<DlRepairTitem>().eq(DlRepairTitem::getTicketId, ticketId));
// 取子表 // 计算子表
List<DlRepairTitem> titems = titemService.list(new LambdaQueryWrapper<DlRepairTitem>().eq(DlRepairTitem::getTicketId, ticketId)); if (CollectionUtil.isEmpty(list)) {
if (CollectionUtil.isEmpty(titems)) {
throw exception0(500, "没有项目、配件或其他"); throw exception0(500, "没有项目、配件或其他");
} }
// 计算子表 List<DlRepairTitem> updateItems = list.stream().map(item -> {
Map<String, BigDecimal> titemsMap = titems.stream().collect(Collectors.toMap( DlRepairTitem titem = new DlRepairTitem();
DlRepairTitem::getId, titem.setId(item.getId());
item -> { // 取出折扣
BigDecimal discount = item.getItemDiscount() == null ? BigDecimal.ONE : item.getItemDiscount(); BigDecimal discount = item.getItemDiscount() == null ? new BigDecimal("1") : item.getItemDiscount();
BigDecimal itemPrice = item.getItemPrice() == null ? BigDecimal.ZERO : item.getItemPrice(); BigDecimal itemPrice = item.getItemPrice() == null ? BigDecimal.ZERO : item.getItemPrice();
return itemPrice.multiply(BigDecimal.valueOf(item.getItemCount())).multiply(discount); titem.setItemMoney(itemPrice.multiply(BigDecimal.valueOf(item.getItemCount())).multiply(discount));
} return titem;
)); }).collect(Collectors.toList());
titems.forEach(item -> { // 更新
item.setItemMoney(titemsMap.get(item.getId())); titemService.updateBatchById(updateItems);
});
titemService.updateBatchById(titems);
// 计算主表 // 计算主表
// 总数量 // 查新的子表信息
tickets.setCount(titems.stream().mapToInt(DlRepairTitem::getItemCount).sum()); List<DlRepairTitem> newList = titemService.list(new LambdaQueryWrapper<DlRepairTitem>().eq(DlRepairTitem::getTicketId, ticketId));
// 各类总价 DlRepairTickets tickets = new DlRepairTickets();
Map<String, BigDecimal> typePrice = titems.stream() // 计算子项总数
.collect(Collectors.groupingBy(DlRepairTitem::getItemType, int count = newList.stream().mapToInt(DlRepairTitem::getItemCount).sum();
Collectors.mapping(DlRepairTitem::getItemMoney, tickets.setId(ticketId);
Collectors.reducing(BigDecimal.ZERO, BigDecimal::add)))); tickets.setCount(count);
BigDecimal itemTotalPrice = new BigDecimal("0"); // 分类计算各自的总价和最终工单总价
for (Map.Entry<String, BigDecimal> entry : typePrice.entrySet()) { Map<String, List<DlRepairTitem>> map = newList.stream().collect(Collectors.groupingBy(DlRepairTitem::getItemType));
itemTotalPrice = itemTotalPrice.add(entry.getValue()); // 01项目02配件03其他
switch (entry.getKey()){ tickets.setTotalPrice(BigDecimal.ZERO);
case "01": map.forEach((k, v) -> {
tickets.setProjectPrice(entry.getValue()); BigDecimal reduce = v.stream().map(DlRepairTitem::getItemMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
break; tickets.setTotalPrice(tickets.getTotalPrice().add(reduce));
case "02": if (k.equals("01")) {
tickets.setPartPrice(entry.getValue()); tickets.setProjectPrice(reduce);
break; } else if (k.equals("02")) {
case "03": tickets.setPartPrice(reduce);
tickets.setOtherPrice(entry.getValue()); } else if (k.equals("03")) {
break; tickets.setOtherPrice(reduce);
} }
} });
// 其他费用
// 工单总价还需要变把其他新加的费用也需要算上
// 查主表
DlRepairTickets oldTicket = baseMapper.selectById(ticketId);
// 管理费 // 管理费
BigDecimal managerMoney = ObjectUtil.isNotEmpty(tickets.getManagerMoney()) ? tickets.getManagerMoney() : new BigDecimal("0"); BigDecimal managerMoney = ObjectUtil.isNotEmpty(oldTicket.getManagerMoney()) ? oldTicket.getManagerMoney() : new BigDecimal("0");
// 救援费 // 救援费
BigDecimal rescueMoney = ObjectUtil.isNotEmpty(tickets.getRescueMoney()) ? tickets.getRescueMoney() : new BigDecimal("0"); BigDecimal rescueMoney = ObjectUtil.isNotEmpty(oldTicket.getRescueMoney()) ? oldTicket.getRescueMoney() : new BigDecimal("0");
// 三包费 // 三包费
BigDecimal threePackMoney = ObjectUtil.isNotEmpty(tickets.getThreePackMoney()) ? tickets.getThreePackMoney() : new BigDecimal("0"); BigDecimal threePackMoney = ObjectUtil.isNotEmpty(oldTicket.getThreePackMoney()) ? oldTicket.getThreePackMoney() : new BigDecimal("0");
// 定损费 // 定损费
BigDecimal confirmFaultMoney = ObjectUtil.isNotEmpty(tickets.getConfirmFaultMoney()) ? tickets.getConfirmFaultMoney() : new BigDecimal("0"); BigDecimal confirmFaultMoney = ObjectUtil.isNotEmpty(oldTicket.getConfirmFaultMoney()) ? oldTicket.getConfirmFaultMoney() : new BigDecimal("0");
tickets.setTotalPrice(itemTotalPrice.add(managerMoney).add(rescueMoney).add(threePackMoney).add(confirmFaultMoney)); tickets.setTotalPrice(tickets.getTotalPrice().add(managerMoney).add(rescueMoney).add(threePackMoney).add(confirmFaultMoney));
// 更新订单 // 因为订单是在工单创建的时候就新增了后面加的配件之类的金额没有同步到订单这里同步一下
RepairOrderInfo orderInfo = repairOrderInfoService.getOne(new LambdaQueryWrapper<RepairOrderInfo>().eq(RepairOrderInfo::getGoodsId, ticketId)); RepairOrderInfo orderInfo = repairOrderInfoService.getOne(new LambdaQueryWrapper<RepairOrderInfo>().eq(RepairOrderInfo::getGoodsId, ticketId));
orderInfo.setGoodsPrice(tickets.getTotalPrice()); RepairOrderInfo newOrderInfo = new RepairOrderInfo();
orderInfo.setPayMoney(tickets.getTotalPrice()); newOrderInfo.setId(orderInfo.getId());
repairOrderInfoService.updateById(orderInfo); // 更新商品原价和实付金额
newOrderInfo.setGoodsPrice(tickets.getTotalPrice());
newOrderInfo.setPayMoney(tickets.getTotalPrice());
repairOrderInfoService.updateById(newOrderInfo);
return baseMapper.updateById(tickets) > 0; return baseMapper.updateById(tickets) > 0;
} }
@ -1826,12 +1829,12 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
/** /**
* 根据工单ID查客户和车辆信息 * 根据工单ID查客户和车辆信息
* *
* @param id id
* @author 小李 * @author 小李
* @date 19:07 2024/11/18 * @date 19:07 2024/11/18
* @param id id
**/ **/
@Override @Override
public CustomerAndCarVO getCusAndCarById(String id) { public CustomerAndCarVO getCusAndCarById(String id){
// 查工单 // 查工单
DlRepairTickets tickets = baseMapper.selectById(id); DlRepairTickets tickets = baseMapper.selectById(id);
// 查用户 // 查用户