This commit is contained in:
xuyuncong 2025-11-20 11:28:54 +08:00
parent e3b4c77229
commit a6e9c21e6a
4 changed files with 173 additions and 12 deletions

View File

@ -182,7 +182,7 @@ public class InspectionMallPartnersController extends BaseController {
Map<String, Object> stringObjectMap = orderInfoService.workOrderData(query);
rows.add(CollUtil.newArrayList("公示价格汇总:", "", String.valueOf(Double.parseDouble(stringObjectMap.get("goodsPriceSum").toString()) / 100d) + "", "实付金额汇总:", "", String.valueOf(Double.parseDouble(stringObjectMap.get("payMoneySum").toString()) / 100d) + ""));
rows.add(CollUtil.newArrayList("车牌号", "检测车型", "检测类型", "业务渠道", "客户来源", "经办人", "承保公司", "交强到期时间", "商业到期时间", "公示价格", "实收金额", "优惠金额","付款时间", "客户手机号", "支付方式", "开始时间", "结束时间", "检测结果", "出纳是否确认"));
rows.add(CollUtil.newArrayList("车牌号", "检测车型", "检测类型", "业务渠道", "客户来源", "经办人", "承保公司", "交强到期时间", "商业到期时间", "公示价格", "实收金额", "优惠金额", "付款时间", "客户名称", "客户手机号", "支付方式", "收款账号", "开始时间", "结束时间", "检测结果", "出纳是否确认"));
List<DictDataDO> sysDictData = dictDataService.getDictDataListByDictType("pay_type");
@ -226,8 +226,8 @@ public class InspectionMallPartnersController extends BaseController {
.toString(), ObjectUtil.isEmpty(item.getRealPayMoney()) ? "暂未支付" : BigDecimal.valueOf(item.getRealPayMoney())
.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP)
.toString(), ObjectUtil.isEmpty(item.getReduceMoney()) ? "" : BigDecimal.valueOf(item.getReduceMoney())
.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP).toString(),ObjectUtil.isEmpty(item.getPayTime()) ? "暂未支付" : DateUtil.format(item.getPayTime(), "yyyy-MM-dd hh:mm"),
Optional.ofNullable(item.getBuyPhone()).orElse(""), payTypeStr, ObjectUtil.isEmpty(item.getStartTime()) ? "" : DateUtil.format(item.getStartTime(), "yyyy-MM-dd hh:mm"), ObjectUtil.isEmpty(item.getEndTime()) ? "" : DateUtil.format(item.getEndTime(), "yyyy-MM-dd hh:mm"), isPassStr, cashier));
.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP).toString(), ObjectUtil.isEmpty(item.getPayTime()) ? "暂未支付" : DateUtil.format(item.getPayTime(), "yyyy-MM-dd hh:mm"),
Optional.ofNullable(item.getBuyName()).orElse(""), Optional.ofNullable(item.getBuyPhone()).orElse(""), payTypeStr, Optional.ofNullable(item.getReceivablesAccount()).orElse(""), ObjectUtil.isEmpty(item.getStartTime()) ? "" : DateUtil.format(item.getStartTime(), "yyyy-MM-dd hh:mm"), ObjectUtil.isEmpty(item.getEndTime()) ? "" : DateUtil.format(item.getEndTime(), "yyyy-MM-dd hh:mm"), isPassStr, cashier));
}
// 创建 ExcelWriter

View File

@ -769,7 +769,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
AND ins.recheck_count != 0 AND ins.recheck_count IS NOT NULL
</if>
<if test="query.payStatus == 0">
and (oi.pay_money is null OR oi.pay_type = 'sz')
and (oi.pay_money is null OR oi.pay_type = 'sz') and (oi.cashier_confirm = 0 OR oi.cashier_confirm IS NULL )
</if>
<if test="query.payStatus == 1">
and oi.pay_time is not null AND oi.pay_type != 'sz'

View File

@ -212,7 +212,7 @@ public class DlRepairTickets extends TenantBaseDO {
private String isPickCar;
/** 工单当前施工人id */
private String nowRepairId;
private Long nowRepairId;
/** 工单当前施工人name */
private String nowRepairName;

View File

@ -1264,6 +1264,15 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
// 查询当前工单的完成记录构建 repairItemId -> 完成记录 映射
Map<String, RepairRecords> finishedRecordMap = buildFinishedRecordMap(ticketId, items);
// 查询特殊项目完成状态
boolean zjFinished = hasRecordType(ticketId, RecordTypeEnum.ZJ.getCode()); // 总检
boolean skFinished = hasRecordType(ticketId, RecordTypeEnum.SK.getCode()); // 收款
// 服务顾问相关的完成状态
boolean jsgdFinished = hasRecordType(ticketId, RecordTypeEnum.JSGD.getCode()); // 结束工单出厂检验
boolean jcFinished = hasRecordType(ticketId, RecordTypeEnum.JC.getCode()); // 交车
boolean jssqFinished = hasRecordType(ticketId, RecordTypeEnum.JSSQ.getCode()); // 结算申请
// 当前工单涉及到的维修工人用于获取工种/班组
List<RepairWorker> workers = repairWorkerService.listByTicketId(ticketId);
if (CollectionUtil.isEmpty(workers)) {
@ -1351,6 +1360,9 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
}
}
// 处理特殊固定班组和项目总检班组财务班组和服务顾问班组
handleSpecialTeams(progressMap, teamItemsMap, ticketId, zjFinished, skFinished, jsgdFinished, jcFinished, jssqFinished);
// 计算完成率并返回列表
List<TicketTeamProgressWithItemsVO> resultList = new ArrayList<>();
for (TicketTeamProgressWithItemsVO vo : progressMap.values()) {
@ -1374,6 +1386,154 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
return resultList;
}
/**
* 处理特殊班组和项目总检班组财务班组和服务顾问班组
*
* @param progressMap 班组进度映射
* @param teamItemsMap 班组项目列表映射
* @param ticketId 工单ID
* @param zjFinished 总检完成状态
* @param skFinished 收款完成状态
* @param jsgdFinished 出厂检验完成状态
* @param jcFinished 交车完成状态
* @param jssqFinished 结算申请完成状态
*/
private void handleSpecialTeams(Map<String, TicketTeamProgressWithItemsVO> progressMap,
Map<String, List<DlRepairTitemRespVO>> teamItemsMap,
String ticketId, boolean zjFinished, boolean skFinished,
boolean jsgdFinished, boolean jcFinished, boolean jssqFinished) {
// 处理总检班组
String zjWorkType = "zj"; // 总检班组编码
String zjWorkTypeName = "总检"; // 总检班组名称
TicketTeamProgressWithItemsVO zjTeamVO = progressMap.get(zjWorkType);
if (zjTeamVO == null) {
zjTeamVO = new TicketTeamProgressWithItemsVO();
zjTeamVO.setWorkType(zjWorkType);
zjTeamVO.setWorkTypeName(zjWorkTypeName);
zjTeamVO.setTotalItems(0);
zjTeamVO.setFinishedItems(0);
zjTeamVO.setCompletionRate(BigDecimal.ZERO);
progressMap.put(zjWorkType, zjTeamVO);
teamItemsMap.put(zjWorkType, new ArrayList<>());
}
// 创建总检审核项目
DlRepairTitemRespVO zjItemVO = new DlRepairTitemRespVO();
zjItemVO.setId("zj");
zjItemVO.setTicketId(ticketId);
zjItemVO.setItemName("总检审核");
zjItemVO.setItemType("01");
zjItemVO.setFinished(zjFinished);
// 添加总检审核项目到总检班组
teamItemsMap.get(zjWorkType).add(zjItemVO);
zjTeamVO.setTotalItems(zjTeamVO.getTotalItems() + 1);
if (zjFinished) {
zjTeamVO.setFinishedItems(zjTeamVO.getFinishedItems() + 1);
}
// 处理财务班组
String skWorkType = "sk"; // 财务班组编码
String skWorkTypeName = "财务"; // 财务班组名称
TicketTeamProgressWithItemsVO skTeamVO = progressMap.get(skWorkType);
if (skTeamVO == null) {
skTeamVO = new TicketTeamProgressWithItemsVO();
skTeamVO.setWorkType(skWorkType);
skTeamVO.setWorkTypeName(skWorkTypeName);
skTeamVO.setTotalItems(0);
skTeamVO.setFinishedItems(0);
skTeamVO.setCompletionRate(BigDecimal.ZERO);
progressMap.put(skWorkType, skTeamVO);
teamItemsMap.put(skWorkType, new ArrayList<>());
}
// 创建收款项目
DlRepairTitemRespVO skItemVO = new DlRepairTitemRespVO();
skItemVO.setId("sk");
skItemVO.setTicketId(ticketId);
skItemVO.setItemName("收款");
skItemVO.setItemType("01");
skItemVO.setFinished(skFinished);
// 添加收款项目到财务班组
teamItemsMap.get(skWorkType).add(skItemVO);
skTeamVO.setTotalItems(skTeamVO.getTotalItems() + 1);
if (skFinished) {
skTeamVO.setFinishedItems(skTeamVO.getFinishedItems() + 1);
}
// 处理服务顾问班组
String fwgwWorkType = "fwgw"; // 服务顾问班组编码
String fwgwWorkTypeName = "服务顾问"; // 服务顾问班组名称
TicketTeamProgressWithItemsVO fwgwTeamVO = progressMap.get(fwgwWorkType);
if (fwgwTeamVO == null) {
fwgwTeamVO = new TicketTeamProgressWithItemsVO();
fwgwTeamVO.setWorkType(fwgwWorkType);
fwgwTeamVO.setWorkTypeName(fwgwWorkTypeName);
fwgwTeamVO.setTotalItems(0);
fwgwTeamVO.setFinishedItems(0);
fwgwTeamVO.setCompletionRate(BigDecimal.ZERO);
progressMap.put(fwgwWorkType, fwgwTeamVO);
teamItemsMap.put(fwgwWorkType, new ArrayList<>());
}
// 创建出厂检验项目
DlRepairTitemRespVO jsgdItemVO = new DlRepairTitemRespVO();
jsgdItemVO.setId("jsgd");
jsgdItemVO.setTicketId(ticketId);
jsgdItemVO.setItemName("出厂检验");
jsgdItemVO.setItemType("01");
jsgdItemVO.setFinished(jsgdFinished);
// 创建交车项目
DlRepairTitemRespVO jcItemVO = new DlRepairTitemRespVO();
jcItemVO.setId("jc");
jcItemVO.setTicketId(ticketId);
jcItemVO.setItemName("交车");
jcItemVO.setItemType("01");
jcItemVO.setFinished(jcFinished);
// 创建结算项目
DlRepairTitemRespVO jssqItemVO = new DlRepairTitemRespVO();
jssqItemVO.setId("jssq");
jssqItemVO.setTicketId(ticketId);
jssqItemVO.setItemName("结算");
jssqItemVO.setItemType("01");
jssqItemVO.setFinished(jssqFinished);
// 添加服务顾问项目到服务顾问班组
teamItemsMap.get(fwgwWorkType).add(jsgdItemVO);
teamItemsMap.get(fwgwWorkType).add(jcItemVO);
teamItemsMap.get(fwgwWorkType).add(jssqItemVO);
fwgwTeamVO.setTotalItems(fwgwTeamVO.getTotalItems() + 3);
if (jsgdFinished) {
fwgwTeamVO.setFinishedItems(fwgwTeamVO.getFinishedItems() + 1);
}
if (jcFinished) {
fwgwTeamVO.setFinishedItems(fwgwTeamVO.getFinishedItems() + 1);
}
if (jssqFinished) {
fwgwTeamVO.setFinishedItems(fwgwTeamVO.getFinishedItems() + 1);
}
}
/**
* 检查工单是否存在指定类型的记录
*
* @param ticketId 工单ID
* @param type 记录类型
* @return 是否存在该类型记录
*/
private boolean hasRecordType(String ticketId, String type) {
return repairRecordsService.count(Wrappers.<RepairRecords>lambdaQuery()
.eq(RepairRecords::getTicketId, ticketId)
.eq(RepairRecords::getType, type)) > 0;
}
/**
* 根据工单ID和班组统计该班组下工时项目完成情况
*
@ -1588,6 +1748,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
Map<String, Object> node = new HashMap<>();
node.put("code", code);
node.put("name", name);
node.put("selectType", selectType);
if (ifShowChildren) {
@ -2649,7 +2810,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
// repairTicketsReqVO.setIsFinish("1");
} else if (userRoleCode.equals(RepairRoleEnum.INSPECTION.getCode())) {
// 总检
repairTicketsReqVO.setNowRepairId(loginUserId.toString());
repairTicketsReqVO.setNowRepairId(loginUserId);
// 因为完成状态需要在交车之后所以注掉这个
// repairTicketsReqVO.setIsFinish("0");
} else {
@ -3238,7 +3399,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
List<DlRepairTickets> updateTickets = result.stream().map(item -> {
DlRepairTickets ticket = new DlRepairTickets();
ticket.setId(item.getId());
ticket.setNowRepairId(item.getAdviserId());
ticket.setNowRepairId(Long.valueOf(item.getAdviserId()));
ticket.setNowRepairName(item.getAdviserName());
return ticket;
}).collect(Collectors.toList());