更新0919
This commit is contained in:
parent
4c78b8b9a2
commit
9dc4e188f0
@ -95,6 +95,7 @@ public class CarMain extends TenantBaseDO {
|
|||||||
* 下次年检日期
|
* 下次年检日期
|
||||||
*/
|
*/
|
||||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
|
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
|
||||||
|
@JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY, timezone = "GMT+8")
|
||||||
private LocalDateTime nextInspectionDate;
|
private LocalDateTime nextInspectionDate;
|
||||||
/**
|
/**
|
||||||
* 保险到期日期
|
* 保险到期日期
|
||||||
@ -157,4 +158,4 @@ public class CarMain extends TenantBaseDO {
|
|||||||
private BigDecimal shangye;
|
private BigDecimal shangye;
|
||||||
/** 车龄 */
|
/** 车龄 */
|
||||||
private Double carYear;
|
private Double carYear;
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@ import cn.iocoder.yudao.module.label.entity.BusiLabel;
|
|||||||
import cn.iocoder.yudao.module.label.service.BusiLabelService;
|
import cn.iocoder.yudao.module.label.service.BusiLabelService;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
@ -126,15 +127,17 @@ public class CarMainServiceImpl extends ServiceImpl<CarMainMapper, CarMain> impl
|
|||||||
}
|
}
|
||||||
//车俩品牌型号级联选择器返回值,第一位是品牌,第二位是型号
|
//车俩品牌型号级联选择器返回值,第一位是品牌,第二位是型号
|
||||||
List<String> brandAndModel = updateReqVO.getBrandAndModel();
|
List<String> brandAndModel = updateReqVO.getBrandAndModel();
|
||||||
// 插入
|
|
||||||
CarMain carMain = BeanUtils.toBean(updateReqVO, CarMain.class);
|
CarMain carMain = BeanUtils.toBean(updateReqVO, CarMain.class);
|
||||||
carMain.setCarBrand(brandAndModel.get(0));
|
if (CollectionUtils.isNotEmpty(brandAndModel)) {
|
||||||
//判断是否仅填入了品牌
|
// 插入
|
||||||
if (brandAndModel.size() > 1) {
|
carMain.setCarBrand(brandAndModel.get(0));
|
||||||
//填入了型号
|
//判断是否仅填入了品牌
|
||||||
carMain.setCarModel(brandAndModel.get(1));
|
if (brandAndModel.size() > 1) {
|
||||||
} else {
|
//填入了型号
|
||||||
carMain.setCarModel("");
|
carMain.setCarModel(brandAndModel.get(1));
|
||||||
|
} else {
|
||||||
|
carMain.setCarModel("");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//todo 计算下次保养时间,下次保养里程,下次年检时间,保险到期时间
|
//todo 计算下次保养时间,下次保养里程,下次年检时间,保险到期时间
|
||||||
baseMapper.updateById(carMain);
|
baseMapper.updateById(carMain);
|
||||||
@ -525,4 +528,4 @@ public class CarMainServiceImpl extends ServiceImpl<CarMainMapper, CarMain> impl
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -149,4 +149,4 @@
|
|||||||
</if>
|
</if>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
@ -93,7 +93,8 @@ public enum RecordTypeEnum {
|
|||||||
SK("sk", "收款"),
|
SK("sk", "收款"),
|
||||||
PICKCAR("pickcar", "接车"),
|
PICKCAR("pickcar", "接车"),
|
||||||
JSSQ("jssq", "结算申请"),
|
JSSQ("jssq", "结算申请"),
|
||||||
JSSP("jssp", "结算审批");
|
JSSP("jssp", "结算审批"),
|
||||||
|
QRSK("qrsk", "确认收款");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* code
|
* code
|
||||||
|
@ -762,6 +762,19 @@ public class DlRepairTicketsController {
|
|||||||
return CommonResult.ok();
|
return CommonResult.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author 许
|
||||||
|
* @Description 确认收款
|
||||||
|
* @Date 11:12 2025/9/18
|
||||||
|
* @Param [repairTicketsRespVO]
|
||||||
|
* @return cn.iocoder.yudao.framework.common.pojo.CommonResult<?>
|
||||||
|
**/
|
||||||
|
@PostMapping("/payConfirm")
|
||||||
|
public CommonResult<?> payConfirm(@RequestBody DlRepairTicketsRespVO repairTicketsRespVO) {
|
||||||
|
dlRepairTicketsService.payConfirm(repairTicketsRespVO);
|
||||||
|
return CommonResult.ok();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 格式化为百分比字符串
|
* 格式化为百分比字符串
|
||||||
* @param value 值
|
* @param value 值
|
||||||
|
@ -249,9 +249,12 @@ public class DlRepairTickets extends TenantBaseDO {
|
|||||||
private BigDecimal jiaoqiang;
|
private BigDecimal jiaoqiang;
|
||||||
/** 商业险保费 */
|
/** 商业险保费 */
|
||||||
private BigDecimal shangye;
|
private BigDecimal shangye;
|
||||||
|
|
||||||
/** 支付状态 字典(repair_pat_status) */
|
/** 支付状态 字典(repair_pat_status) */
|
||||||
private String payStatus;
|
private String payStatus;
|
||||||
|
/** 支付确认 0:未确认 1:已确认*/
|
||||||
|
private String payConfirm;
|
||||||
|
/** 支付确认备注 */
|
||||||
|
private String payConfirmRemark;
|
||||||
|
|
||||||
/** 更新时上传的图片 */
|
/** 更新时上传的图片 */
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
|
@ -337,4 +337,12 @@ public interface DlRepairTicketsService extends IService<DlRepairTickets> {
|
|||||||
* @return java.util.List<java.util.Map>
|
* @return java.util.List<java.util.Map>
|
||||||
**/
|
**/
|
||||||
Map<String, Object> getBossNumStatistics(String startDate, String endDate);
|
Map<String, Object> getBossNumStatistics(String startDate, String endDate);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author 许
|
||||||
|
* @Description 确认收款
|
||||||
|
* @Date 11:12 2025/9/18
|
||||||
|
* @Param [repairTicketsRespVO]
|
||||||
|
**/
|
||||||
|
void payConfirm(DlRepairTicketsRespVO repairTicketsRespVO);
|
||||||
}
|
}
|
||||||
|
@ -895,7 +895,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
|
|||||||
* @Param [startDate, endDate]
|
* @Param [startDate, endDate]
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Map<String, Object> getBossNumStatistics(String startDate, String endDate) {
|
public Map<String, Object> getBossNumStatistics(String startDate, String endDate) {
|
||||||
Map<String, Object> resultMap = new HashMap<>();
|
Map<String, Object> resultMap = new HashMap<>();
|
||||||
List<Map<String, Object>> statsList = new ArrayList<>();
|
List<Map<String, Object>> statsList = new ArrayList<>();
|
||||||
|
|
||||||
@ -915,17 +915,17 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
|
|||||||
// 进厂数(所有在范围内创建的)
|
// 进厂数(所有在范围内创建的)
|
||||||
Map<String, Long> newOrderStats = ticketsInRange.stream()
|
Map<String, Long> newOrderStats = ticketsInRange.stream()
|
||||||
.collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting()));
|
.collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting()));
|
||||||
statsList.add(createStatsNode("newOrderNum", "订单(进厂数)", newOrderStats));
|
statsList.add(createStatsNode("newOrderNum", "订单(进厂数)", newOrderStats, "jinchang"));
|
||||||
|
|
||||||
// 维修中(按 repairType 分组)
|
// 维修中(按 repairType 分组)
|
||||||
Map<String, Long> workingStats = ticketsInRange.stream()
|
Map<String, Long> workingStats = ticketsInRange.stream()
|
||||||
.filter(item -> TicketsStatusEnum.WORKING.getCode().equals(item.getTicketsStatus()))
|
.filter(item -> TicketsStatusEnum.WORKING.getCode().equals(item.getTicketsStatus()))
|
||||||
.collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting()));
|
.collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting()));
|
||||||
statsList.add(createStatsNode("workingNum", "维修中", workingStats));
|
statsList.add(createStatsNode("workingNum", "维修中", workingStats, "weixiuzhong"));
|
||||||
|
|
||||||
// 已竣工(通过 mapper 查询并按 repairType 分组)
|
// 已竣工(通过 mapper 查询并按 repairType 分组)
|
||||||
Map<String, Long> overStats = getOverStatsByRepairType(startDate, endDate);
|
Map<String, Long> overStats = getOverStatsByRepairType(startDate, endDate);
|
||||||
statsList.add(createStatsNode("overNum", "已竣工", overStats));
|
statsList.add(createStatsNode("overNum", "已竣工", overStats, "yijungong"));
|
||||||
|
|
||||||
// 竣工已结算
|
// 竣工已结算
|
||||||
|
|
||||||
@ -934,18 +934,18 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
|
|||||||
Map<String, Long> noPayStats = ticketsInRange.stream()
|
Map<String, Long> noPayStats = ticketsInRange.stream()
|
||||||
.filter(item -> noPayCodeList.contains(item.getTicketsStatus()))
|
.filter(item -> noPayCodeList.contains(item.getTicketsStatus()))
|
||||||
.collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting()));
|
.collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting()));
|
||||||
statsList.add(createStatsNode("noPayNum", "未结算", noPayStats));
|
statsList.add(createStatsNode("noPayNum", "未结算", noPayStats, "weijiesuan"));
|
||||||
|
|
||||||
// 已交车(通过 mapper 查询并按 repairType 分组)
|
// 已交车(通过 mapper 查询并按 repairType 分组)
|
||||||
Map<String, Long> giveCusStats = getGiveCusStatsByRepairType(startDate, endDate);
|
Map<String, Long> giveCusStats = getGiveCusStatsByRepairType(startDate, endDate);
|
||||||
statsList.add(createStatsNode("giveCusNum", "已交车", giveCusStats));
|
statsList.add(createStatsNode("giveCusNum", "已交车", giveCusStats, "yijiaoche"));
|
||||||
|
|
||||||
// 在厂(未交车且不是已完成状态 03)
|
// 在厂(未交车且不是已完成状态 03)
|
||||||
Map<String, Long> inCompanyStats = ticketsInRange.stream()
|
Map<String, Long> inCompanyStats = ticketsInRange.stream()
|
||||||
.filter(item -> "0".equals(item.getIsHandover()))
|
.filter(item -> "0".equals(item.getIsHandover()))
|
||||||
.filter(item -> !"03".equals(item.getTicketsStatus()))
|
.filter(item -> !"03".equals(item.getTicketsStatus()))
|
||||||
.collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting()));
|
.collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting()));
|
||||||
statsList.add(createStatsNode("inCompanyNum", "在厂", inCompanyStats));
|
statsList.add(createStatsNode("inCompanyNum", "在厂", inCompanyStats, "zaichang"));
|
||||||
|
|
||||||
// 添加到结果map
|
// 添加到结果map
|
||||||
resultMap.put("stats", statsList);
|
resultMap.put("stats", statsList);
|
||||||
@ -957,6 +957,24 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
|
|||||||
return resultMap;
|
return resultMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author 许
|
||||||
|
* @Description 确认收款
|
||||||
|
* @Date 11:12 2025/9/18
|
||||||
|
* @Param [repairTicketsRespVO]
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void payConfirm(DlRepairTicketsRespVO repairTicketsRespVO) {
|
||||||
|
// 修改主表 确认收款状态
|
||||||
|
update(Wrappers.<DlRepairTickets>lambdaUpdate()
|
||||||
|
.eq(DlRepairTickets::getId, repairTicketsRespVO.getId())
|
||||||
|
.set(DlRepairTickets::getPayConfirm, repairTicketsRespVO.getPayConfirm())
|
||||||
|
.set(StringUtils.isNotEmpty(repairTicketsRespVO.getPayConfirmRemark()),DlRepairTickets::getPayConfirmRemark, repairTicketsRespVO.getPayConfirmRemark()));
|
||||||
|
|
||||||
|
//添加记录
|
||||||
|
repairRecordsService.saveRepairRecord(repairTicketsRespVO.getId(), null, RecordTypeEnum.QRSK.getCode(), RecordTypeEnum.QRSK.getName(), null, null);
|
||||||
|
}
|
||||||
|
|
||||||
// 获取已完成工单按维修类型分组的统计(优化版本)
|
// 获取已完成工单按维修类型分组的统计(优化版本)
|
||||||
private Map<String, Long> getOverStatsByRepairType(String startDate, String endDate) {
|
private Map<String, Long> getOverStatsByRepairType(String startDate, String endDate) {
|
||||||
// 直接使用 mapper 查询已完成工单并按 repairType 分组
|
// 直接使用 mapper 查询已完成工单并按 repairType 分组
|
||||||
@ -1015,11 +1033,18 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
|
|||||||
return stats;
|
return stats;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 创建统计节点的辅助方法
|
/**
|
||||||
private Map<String, Object> createStatsNode(String code, String name, Map<String, Long> stats) {
|
* @Author 许
|
||||||
|
* @Description 创建统计节点
|
||||||
|
* @Date 11:13 2025/9/12
|
||||||
|
* @Param [code, name, stats, selectType] 统计项代码、名称、统计数据、选择类型
|
||||||
|
* @return java.util.Map<java.lang.String, java.lang.Object>
|
||||||
|
**/
|
||||||
|
private Map<String, Object> createStatsNode(String code, String name, Map<String, Long> stats, String selectType) {
|
||||||
Map<String, Object> node = new HashMap<>();
|
Map<String, Object> node = new HashMap<>();
|
||||||
node.put("code", code);
|
node.put("code", code);
|
||||||
node.put("name", name);
|
node.put("name", name);
|
||||||
|
node.put("selectType", selectType);
|
||||||
|
|
||||||
List<Map<String, Object>> children = stats.entrySet().stream()
|
List<Map<String, Object>> children = stats.entrySet().stream()
|
||||||
.map(entry -> {
|
.map(entry -> {
|
||||||
@ -2727,6 +2752,59 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Map<String, Object> getStatistics(DlRepairTicketsReqVO repairTicketsReqVO) {
|
public Map<String, Object> getStatistics(DlRepairTicketsReqVO repairTicketsReqVO) {
|
||||||
|
if (!RepairCons.TICKETS_WAITING.equals(repairTicketsReqVO.getSelectType())) {
|
||||||
|
if (("jinchang".equals(repairTicketsReqVO.getTicketsStatus()) ||
|
||||||
|
"yijungong".equals(repairTicketsReqVO.getTicketsStatus()) ||
|
||||||
|
"yijiaoche".equals(repairTicketsReqVO.getTicketsStatus())) && StringUtils.isNotEmpty(repairTicketsReqVO.getStartDate())) {
|
||||||
|
//如果是查询进场、已竣工、已交车三个状态,同时选了时间范围的,需要单独处理
|
||||||
|
String startDate = repairTicketsReqVO.getStartDate() + " 00:00:00";
|
||||||
|
String endDate = repairTicketsReqVO.getEndDate() + " 23:59:59";
|
||||||
|
List<String> idList = new ArrayList<>();
|
||||||
|
if ("yijungong".equals(repairTicketsReqVO.getTicketsStatus())) {
|
||||||
|
//已竣工
|
||||||
|
idList = repairTicketsMapper.selectTicketIdByParams(null, RecordTypeEnum.ZJ.getCode(), startDate, endDate);
|
||||||
|
} else if ("yijiaoche".equals(repairTicketsReqVO.getTicketsStatus())) {
|
||||||
|
//已交车
|
||||||
|
idList = repairTicketsMapper.selectTicketIdByParams(null, RecordTypeEnum.JC.getCode(), startDate, endDate);
|
||||||
|
} else {
|
||||||
|
//进厂
|
||||||
|
repairTicketsReqVO.setStartDate(startDate);
|
||||||
|
repairTicketsReqVO.setEndDate(endDate);
|
||||||
|
}
|
||||||
|
if (null != idList && !idList.isEmpty()) {
|
||||||
|
repairTicketsReqVO.setIdList(idList);
|
||||||
|
//时间查询条件置空
|
||||||
|
repairTicketsReqVO.setStartDate(null);
|
||||||
|
repairTicketsReqVO.setEndDate(null);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//否则查询时间不生效,按维修状态查
|
||||||
|
List<String> statusList = new ArrayList<>();
|
||||||
|
if ("weixiuzhong".equals(repairTicketsReqVO.getTicketsStatus())) {
|
||||||
|
//维修中
|
||||||
|
statusList.add(TicketsStatusEnum.WORKING.getCode());
|
||||||
|
} else if ("weijiesuan".equals(repairTicketsReqVO.getTicketsStatus())) {
|
||||||
|
//未结算
|
||||||
|
statusList = Arrays.asList("04", "05", "07", "01");
|
||||||
|
} else if ("zaichang".equals(repairTicketsReqVO.getTicketsStatus())) {
|
||||||
|
//在厂,就是没交车的,且不能是已作废和已完成的
|
||||||
|
repairTicketsReqVO.setIsHandover("0");
|
||||||
|
statusList = Arrays.asList("04", "05", "07", "01", "06", "02");
|
||||||
|
} else if ("jinchang".equals(repairTicketsReqVO.getTicketsStatus())) {
|
||||||
|
//进厂
|
||||||
|
statusList.add(TicketsStatusEnum.NO_WORK.getCode());
|
||||||
|
} else if ("yijungong".equals(repairTicketsReqVO.getTicketsStatus())) {
|
||||||
|
//已竣工
|
||||||
|
statusList = Arrays.asList("07", "01", "06", "02", "08");
|
||||||
|
} else if ("yijiaoche".equals(repairTicketsReqVO.getTicketsStatus())) {
|
||||||
|
//已交车
|
||||||
|
repairTicketsReqVO.setIsHandover("1");
|
||||||
|
}
|
||||||
|
if (!statusList.isEmpty()) {
|
||||||
|
repairTicketsReqVO.setStatusList(statusList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return baseMapper.getStatistics(repairTicketsReqVO);
|
return baseMapper.getStatistics(repairTicketsReqVO);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -61,4 +61,10 @@ public class DlRepairTicketsReqVO extends DlRepairTickets {
|
|||||||
|
|
||||||
/** 时间类型 */
|
/** 时间类型 */
|
||||||
private String timeType = "create";
|
private String timeType = "create";
|
||||||
|
|
||||||
|
/** 业务渠道 */
|
||||||
|
private String busiFrom;
|
||||||
|
|
||||||
|
/** 支付状态 receivable:应收款 receivedAmount:已收款 pendingAmount:代收款 */
|
||||||
|
private String payStatus;
|
||||||
}
|
}
|
||||||
|
@ -90,4 +90,5 @@ public class DlRepairTicketsRespVO extends DlRepairTickets {
|
|||||||
|
|
||||||
/** 结算时间 */
|
/** 结算时间 */
|
||||||
private LocalDateTime settlementTime;
|
private LocalDateTime settlementTime;
|
||||||
|
private String payTime;
|
||||||
}
|
}
|
||||||
|
@ -123,7 +123,8 @@
|
|||||||
GROUP BY drw.user_id,drr.ticket_id
|
GROUP BY drw.user_id,drr.ticket_id
|
||||||
ORDER BY value DESC
|
ORDER BY value DESC
|
||||||
</select>
|
</select>
|
||||||
<select id="listBusinessByCustomer" resultType="cn.iocoder.yudao.module.base.vo.QueryBusinessResp"
|
<select id="listBusinessByCustomer"
|
||||||
|
resultType="cn.iocoder.yudao.module.base.vo.QueryBusinessResp"
|
||||||
parameterType="cn.iocoder.yudao.module.base.vo.QueryBusinessReqVO">
|
parameterType="cn.iocoder.yudao.module.base.vo.QueryBusinessReqVO">
|
||||||
SELECT t.*
|
SELECT t.*
|
||||||
FROM (
|
FROM (
|
||||||
@ -138,105 +139,72 @@
|
|||||||
r.handle_name AS handleName,
|
r.handle_name AS handleName,
|
||||||
'repair' AS source,
|
'repair' AS source,
|
||||||
'维修' AS sourceStr,
|
'维修' AS sourceStr,
|
||||||
ROW_NUMBER() OVER (PARTITION BY c.id ORDER BY r.in_time DESC) AS rn
|
ROW_NUMBER() OVER (PARTITION BY c.id ORDER BY r.in_time DESC) AS rn,
|
||||||
|
COUNT(*) OVER (PARTITION BY c.id) AS consumeCount -- 新增字段:消费次数
|
||||||
FROM base_customer_main c
|
FROM base_customer_main c
|
||||||
JOIN dl_repair_tickets r ON c.id = r.user_id
|
JOIN dl_repair_tickets r ON c.id = r.user_id
|
||||||
|
LEFT JOIN dl_repair_titem t ON r.id = t.ticket_id
|
||||||
WHERE
|
WHERE
|
||||||
1 = 1 and c.deleted = 0
|
1 = 1
|
||||||
|
AND c.deleted = 0
|
||||||
<if test="reqVO.dateRange != null">
|
<if test="reqVO.dateRange != null">
|
||||||
AND r.in_time BETWEEN CONCAT(#{reqVO.dateRange[0]}, ' 00:00:00') AND CONCAT(#{reqVO.dateRange[1]}, ' 23:59:59')
|
AND r.in_time BETWEEN CONCAT(#{reqVO.dateRange[0]}, ' 00:00:00')
|
||||||
|
AND CONCAT(#{reqVO.dateRange[1]}, ' 23:59:59')
|
||||||
</if>
|
</if>
|
||||||
<if test="reqVO.search != null and reqVO.search != ''">
|
<if test="reqVO.search != null and reqVO.search != ''">
|
||||||
AND (c.cus_name LIKE CONCAT('%', #{reqVO.search}, '%')
|
AND (
|
||||||
|
c.cus_name LIKE CONCAT('%', #{reqVO.search}, '%')
|
||||||
OR c.phone_number LIKE CONCAT('%', #{reqVO.search}, '%')
|
OR c.phone_number LIKE CONCAT('%', #{reqVO.search}, '%')
|
||||||
OR r.ticket_no LIKE CONCAT('%', #{reqVO.search}, '%')
|
OR r.ticket_no LIKE CONCAT('%', #{reqVO.search}, '%')
|
||||||
|
OR t.item_name LIKE CONCAT('%', #{reqVO.search}, '%')
|
||||||
)
|
)
|
||||||
</if>
|
</if>
|
||||||
ORDER BY r.in_time DESC
|
ORDER BY r.in_time DESC
|
||||||
<!--
|
|
||||||
UNION ALL
|
|
||||||
|
|
||||||
SELECT
|
|
||||||
c.id AS customerId,
|
|
||||||
c.cus_name AS customerName,
|
|
||||||
c.phone_number AS customerPhone,
|
|
||||||
ri.id AS bizId,
|
|
||||||
NULL AS bizNo,
|
|
||||||
ri.rescue_type AS bizType,
|
|
||||||
ri.rescue_time AS bizTime,
|
|
||||||
'rescue' AS source,
|
|
||||||
ROW_NUMBER() OVER (PARTITION BY c.id ORDER BY ri.rescue_time DESC) AS rn
|
|
||||||
FROM base_customer_main c
|
|
||||||
JOIN rescue_info ri ON c.user_id = ri.user_id
|
|
||||||
WHERE
|
|
||||||
1 = 1 and c.deleted = 0
|
|
||||||
<if test="reqVO.dateRange != null">
|
|
||||||
AND ri.rescue_time BETWEEN #{reqVO.dateRange[0]} AND #{reqVO.dateRange[1]}
|
|
||||||
</if>
|
|
||||||
<if test="reqVO.search != null and reqVO.search != ''">
|
|
||||||
AND (c.cus_name LIKE CONCAT('%', #{reqVO.search}, '%')
|
|
||||||
OR c.phone_number LIKE CONCAT('%', #{reqVO.search}, '%')
|
|
||||||
)
|
|
||||||
</if>-->
|
|
||||||
) t
|
) t
|
||||||
WHERE t.rn = 1;
|
WHERE t.rn = 1;
|
||||||
</select>
|
</select>
|
||||||
<select id="listBusinessByCar" resultType="cn.iocoder.yudao.module.base.vo.QueryBusinessResp"
|
|
||||||
|
<select id="listBusinessByCar"
|
||||||
|
resultType="cn.iocoder.yudao.module.base.vo.QueryBusinessResp"
|
||||||
parameterType="cn.iocoder.yudao.module.base.vo.QueryBusinessReqVO">
|
parameterType="cn.iocoder.yudao.module.base.vo.QueryBusinessReqVO">
|
||||||
SELECT t.*
|
SELECT t.*
|
||||||
FROM (
|
FROM (
|
||||||
-- 维修工单
|
-- 维修工单
|
||||||
SELECT
|
SELECT
|
||||||
car.id AS carId,
|
car.id AS carId,
|
||||||
car.license_number carNum,
|
car.license_number AS carNum,
|
||||||
c.id AS customerId,
|
c.id AS customerId,
|
||||||
c.cus_name AS customerName,
|
c.cus_name AS customerName,
|
||||||
c.phone_number AS customerPhone,
|
c.phone_number AS customerPhone,
|
||||||
r.id AS bizId,
|
r.id AS bizId,
|
||||||
r.ticket_no AS bizNo,
|
r.ticket_no AS bizNo,
|
||||||
r.repair_type AS bizType,
|
r.repair_type AS bizType,
|
||||||
r.create_time AS bizTime,
|
r.create_time AS bizTime,
|
||||||
'repair' AS source,
|
'repair' AS source,
|
||||||
'维修' AS sourceStr,
|
'维修' AS sourceStr,
|
||||||
ROW_NUMBER() OVER (PARTITION BY car.id ORDER BY r.in_time DESC) AS rn
|
ROW_NUMBER() OVER (PARTITION BY car.id ORDER BY r.in_time DESC) AS rn,
|
||||||
|
COUNT(*) OVER (PARTITION BY car.id) AS consumeCount -- 新增字段:该车辆来过的次数
|
||||||
FROM base_car_main car
|
FROM base_car_main car
|
||||||
JOIN base_customer_car cc ON car.id = cc.car_id
|
INNER JOIN base_customer_car cc ON car.id = cc.car_id
|
||||||
JOIN base_customer_main c ON cc.cus_id = c.id
|
LEFT JOIN base_customer_main c ON cc.cus_id = c.id
|
||||||
JOIN dl_repair_tickets r ON c.id = r.user_id
|
INNER JOIN dl_repair_tickets r ON car.license_number = r.car_no
|
||||||
|
|
||||||
-- UNION ALL
|
|
||||||
--
|
|
||||||
-- -- 救援单
|
|
||||||
-- SELECT
|
|
||||||
-- car.id AS car_id,
|
|
||||||
-- car.license_number,
|
|
||||||
-- c.id AS customer_id,
|
|
||||||
-- c.cus_name,
|
|
||||||
-- c.phone_number,
|
|
||||||
-- ri.id AS biz_id,
|
|
||||||
-- NULL AS biz_no,
|
|
||||||
-- ri.rescue_type AS biz_type,
|
|
||||||
-- ri.rescue_time AS biz_time,
|
|
||||||
-- 'rescue' AS source,
|
|
||||||
-- ROW_NUMBER() OVER (PARTITION BY car.id ORDER BY ri.rescue_time DESC) AS rn
|
|
||||||
-- FROM base_car_main car
|
|
||||||
-- JOIN base_customer_car cc ON car.id = cc.car_id
|
|
||||||
-- JOIN base_customer_main c ON cc.cus_id = c.id
|
|
||||||
-- JOIN rescue_info ri ON c.id = ri.user_id
|
|
||||||
-- WHERE ri.rescue_time BETWEEN '2025-01-01 00:00:00' AND '2025-01-31 23:59:59'
|
|
||||||
) t
|
) t
|
||||||
WHERE t.rn = 1
|
WHERE t.rn = 1
|
||||||
<if test="reqVO.dateRange != null">
|
<if test="reqVO.dateRange != null">
|
||||||
AND t.bizTime BETWEEN CONCAT(#{reqVO.dateRange[0]}, ' 00:00:00') AND CONCAT( #{reqVO.dateRange[1]}, ' 23:59:59')
|
AND t.bizTime BETWEEN CONCAT(#{reqVO.dateRange[0]}, ' 00:00:00')
|
||||||
|
AND CONCAT(#{reqVO.dateRange[1]}, ' 23:59:59')
|
||||||
</if>
|
</if>
|
||||||
<if test="reqVO.search != null and reqVO.search != ''">
|
<if test="reqVO.search != null and reqVO.search != ''">
|
||||||
AND (t.customerName LIKE CONCAT('%', #{reqVO.search}, '%')
|
AND (
|
||||||
|
t.customerName LIKE CONCAT('%', #{reqVO.search}, '%')
|
||||||
OR t.customerPhone LIKE CONCAT('%', #{reqVO.search}, '%')
|
OR t.customerPhone LIKE CONCAT('%', #{reqVO.search}, '%')
|
||||||
OR t.carNum LIKE CONCAT('%', #{reqVO.search}, '%')
|
OR t.carNum LIKE CONCAT('%', #{reqVO.search}, '%')
|
||||||
)
|
)
|
||||||
</if>
|
</if>
|
||||||
|
GROUP BY t.carNum
|
||||||
ORDER BY t.bizTime DESC
|
ORDER BY t.bizTime DESC
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="pageByCustomerOrCar" resultType="cn.iocoder.yudao.module.base.vo.QueryTableResp">
|
<select id="pageByCustomerOrCar" resultType="cn.iocoder.yudao.module.base.vo.QueryTableResp">
|
||||||
SELECT drt.*, '维修' AS sourceStr
|
SELECT drt.*, '维修' AS sourceStr
|
||||||
FROM dl_repair_tickets drt
|
FROM dl_repair_tickets drt
|
||||||
|
@ -61,7 +61,10 @@
|
|||||||
<result property="jiaoqiang" column="jiaoqiang" />
|
<result property="jiaoqiang" column="jiaoqiang" />
|
||||||
<result property="shangye" column="shangye" />
|
<result property="shangye" column="shangye" />
|
||||||
<result property="payStatus" column="pay_status" />
|
<result property="payStatus" column="pay_status" />
|
||||||
|
<result property="payConfirm" column="pay_confirm" />
|
||||||
|
<result property="payConfirmRemark" column="pay_confirm_remark" />
|
||||||
<result property="settlementStr" column="settlementStr"/>
|
<result property="settlementStr" column="settlementStr"/>
|
||||||
|
<result property="payTime" column="pay_time"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<resultMap id="APPBaseResultMap" type="cn.iocoder.yudao.module.tickets.vo.DlRepairTicketsRespVO">
|
<resultMap id="APPBaseResultMap" type="cn.iocoder.yudao.module.tickets.vo.DlRepairTicketsRespVO">
|
||||||
@ -194,11 +197,12 @@
|
|||||||
SELECT * FROM dl_repair_booking WHERE tickets_id = #{id}
|
SELECT * FROM dl_repair_booking WHERE tickets_id = #{id}
|
||||||
</select>
|
</select>
|
||||||
<select id="getTicketsPage" resultMap="BaseResultMap">
|
<select id="getTicketsPage" resultMap="BaseResultMap">
|
||||||
SELECT drt.*
|
SELECT drt.*,rorder.pay_time AS pay_time
|
||||||
<if test="map.payStatus != null and map.payStatus != '' and map.payStatus == '01'">
|
<if test="map.payStatus != null and map.payStatus != '' and map.payStatus == '01'">
|
||||||
,drr.other_data AS settlementStr
|
,drr.other_data AS settlementStr
|
||||||
</if>
|
</if>
|
||||||
FROM dl_repair_tickets drt
|
FROM dl_repair_tickets drt
|
||||||
|
LEFT JOIN repair_order_info rorder ON rorder.goods_id = drt.id
|
||||||
<if test="map.payStatus != null and map.payStatus != '' and map.payStatus == '01'">
|
<if test="map.payStatus != null and map.payStatus != '' and map.payStatus == '01'">
|
||||||
LEFT JOIN dl_repair_records drr ON drt.id = drr.ticket_id AND drr.type = 'jssq'
|
LEFT JOIN dl_repair_records drr ON drt.id = drr.ticket_id AND drr.type = 'jssq'
|
||||||
</if>
|
</if>
|
||||||
@ -422,6 +426,8 @@
|
|||||||
ON drt.id = drti.ticket_id AND drti.deleted = '0' AND drti.item_type='01'
|
ON drt.id = drti.ticket_id AND drti.deleted = '0' AND drti.item_type='01'
|
||||||
LEFT JOIN dl_repair_worker drw
|
LEFT JOIN dl_repair_worker drw
|
||||||
ON FIND_IN_SET(drw.user_id, drti.repair_ids) > 0 AND drw.deleted = '0'
|
ON FIND_IN_SET(drw.user_id, drti.repair_ids) > 0 AND drw.deleted = '0'
|
||||||
|
LEFT JOIN repair_order_info roi
|
||||||
|
ON drt.ticket_no = roi.order_no AND roi.deleted = '0'
|
||||||
LEFT JOIN dl_repair_records drr
|
LEFT JOIN dl_repair_records drr
|
||||||
ON drr.ticket_id = drt.id AND drr.deleted = '0' AND drr.type = 'jssp'
|
ON drr.ticket_id = drt.id AND drr.deleted = '0' AND drr.type = 'jssp'
|
||||||
WHERE drt.deleted = '0' AND tickets_status!='03'
|
WHERE drt.deleted = '0' AND tickets_status!='03'
|
||||||
@ -475,9 +481,31 @@
|
|||||||
</foreach>
|
</foreach>
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
|
<!-- 收款状态 -->
|
||||||
|
<if test="map.payStatus != null and map.payStatus != ''">
|
||||||
|
<!-- -->
|
||||||
|
<!-- 应收款 -->
|
||||||
|
<if test="map.payStatus == 'receivable'">
|
||||||
|
AND drt.pay_status != '01'
|
||||||
|
</if>
|
||||||
|
<!-- 已收款 -->
|
||||||
|
<if test="map.payStatus == 'receivedAmount'">
|
||||||
|
AND drt.pay_status != '01' AND roi.pay_money IS NOT NULL
|
||||||
|
</if>
|
||||||
|
<!-- 代收款 -->
|
||||||
|
<if test="map.payStatus == 'pendingAmount'">
|
||||||
|
AND drt.pay_status != '01' AND roi.pay_money IS NULL
|
||||||
|
</if>
|
||||||
|
</if>
|
||||||
|
|
||||||
<!-- 客户来源 -->
|
<!-- 客户来源 -->
|
||||||
<if test="map.cusFrom != null and map.cusFrom!=''">
|
<if test="map.cusFrom != null and map.cusFrom!=''">
|
||||||
AND bcm.data_from = #{map.cusFrom}
|
AND (bcm.data_from = #{map.cusFrom} OR drt.busi_from = #{map.busiFrom})
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<!-- 业务渠道 -->
|
||||||
|
<if test="map.cusFrom != null and map.busiFrom!=''">
|
||||||
|
AND drt.busi_from = #{map.busiFrom}
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
<!-- 服务顾问 -->
|
<!-- 服务顾问 -->
|
||||||
@ -578,6 +606,10 @@
|
|||||||
</if>
|
</if>
|
||||||
LEFT JOIN dl_repair_worker drw
|
LEFT JOIN dl_repair_worker drw
|
||||||
ON FIND_IN_SET(drw.user_id, drti.repair_ids) > 0 AND drw.deleted = '0'
|
ON FIND_IN_SET(drw.user_id, drti.repair_ids) > 0 AND drw.deleted = '0'
|
||||||
|
LEFT JOIN dl_repair_records drr
|
||||||
|
ON drr.ticket_id = drt.id AND drr.deleted = '0' AND drr.type = 'jssp'
|
||||||
|
LEFT JOIN repair_order_info roi
|
||||||
|
ON drt.ticket_no = roi.order_no AND roi.deleted = '0'
|
||||||
WHERE drt.deleted = '0'
|
WHERE drt.deleted = '0'
|
||||||
AND drt.tickets_status != '03'
|
AND drt.tickets_status != '03'
|
||||||
|
|
||||||
@ -595,6 +627,33 @@
|
|||||||
)
|
)
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
|
<!-- 业务渠道 -->
|
||||||
|
<if test="map.cusFrom != null and map.busiFrom!=''">
|
||||||
|
AND drt.busi_from = #{map.busiFrom}
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<!-- 客户来源 -->
|
||||||
|
<if test="map.cusFrom != null and map.cusFrom!=''">
|
||||||
|
AND (bcm.data_from = #{map.cusFrom} OR drt.busi_from = #{map.busiFrom})
|
||||||
|
</if>
|
||||||
|
|
||||||
|
<!-- 收款状态 -->
|
||||||
|
<if test="map.payStatus != null and map.payStatus != ''">
|
||||||
|
<!-- -->
|
||||||
|
<!-- 应收款 -->
|
||||||
|
<if test="map.payStatus == 'receivable'">
|
||||||
|
AND drt.pay_status != '01'
|
||||||
|
</if>
|
||||||
|
<!-- 已收款 -->
|
||||||
|
<if test="map.payStatus == 'receivedAmount'">
|
||||||
|
AND drt.pay_status != '01' AND roi.pay_money IS NOT NULL
|
||||||
|
</if>
|
||||||
|
<!-- 代收款 -->
|
||||||
|
<if test="map.payStatus == 'pendingAmount'">
|
||||||
|
AND drt.pay_status != '01' AND roi.pay_money IS NULL
|
||||||
|
</if>
|
||||||
|
</if>
|
||||||
|
|
||||||
<if test="map.searchTimeArray != null and map.searchTimeArray.length > 0">
|
<if test="map.searchTimeArray != null and map.searchTimeArray.length > 0">
|
||||||
<if test="map.timeType == 'create'">
|
<if test="map.timeType == 'create'">
|
||||||
AND (drt.create_time BETWEEN CONCAT(#{map.searchTimeArray[0]}, ' 00:00:00') AND CONCAT(#{map.searchTimeArray[1]}, ' 23:59:59'))
|
AND (drt.create_time BETWEEN CONCAT(#{map.searchTimeArray[0]}, ' 00:00:00') AND CONCAT(#{map.searchTimeArray[1]}, ' 23:59:59'))
|
||||||
|
Loading…
Reference in New Issue
Block a user