更新0919

This commit is contained in:
xyc 2025-09-19 10:20:42 +08:00
parent 4c78b8b9a2
commit 9dc4e188f0
12 changed files with 227 additions and 86 deletions

View File

@ -95,6 +95,7 @@ public class CarMain extends TenantBaseDO {
* 下次年检日期
*/
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
@JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY, timezone = "GMT+8")
private LocalDateTime nextInspectionDate;
/**
* 保险到期日期
@ -157,4 +158,4 @@ public class CarMain extends TenantBaseDO {
private BigDecimal shangye;
/** 车龄 */
private Double carYear;
}
}

View File

@ -22,6 +22,7 @@ import cn.iocoder.yudao.module.label.entity.BusiLabel;
import cn.iocoder.yudao.module.label.service.BusiLabelService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
@ -126,15 +127,17 @@ public class CarMainServiceImpl extends ServiceImpl<CarMainMapper, CarMain> impl
}
//车俩品牌型号级联选择器返回值第一位是品牌第二位是型号
List<String> brandAndModel = updateReqVO.getBrandAndModel();
// 插入
CarMain carMain = BeanUtils.toBean(updateReqVO, CarMain.class);
carMain.setCarBrand(brandAndModel.get(0));
//判断是否仅填入了品牌
if (brandAndModel.size() > 1) {
//填入了型号
carMain.setCarModel(brandAndModel.get(1));
} else {
carMain.setCarModel("");
if (CollectionUtils.isNotEmpty(brandAndModel)) {
// 插入
carMain.setCarBrand(brandAndModel.get(0));
//判断是否仅填入了品牌
if (brandAndModel.size() > 1) {
//填入了型号
carMain.setCarModel(brandAndModel.get(1));
} else {
carMain.setCarModel("");
}
}
//todo 计算下次保养时间下次保养里程下次年检时间保险到期时间
baseMapper.updateById(carMain);
@ -525,4 +528,4 @@ public class CarMainServiceImpl extends ServiceImpl<CarMainMapper, CarMain> impl
}
}
}

View File

@ -149,4 +149,4 @@
</if>
</select>
</mapper>
</mapper>

View File

@ -93,7 +93,8 @@ public enum RecordTypeEnum {
SK("sk", "收款"),
PICKCAR("pickcar", "接车"),
JSSQ("jssq", "结算申请"),
JSSP("jssp", "结算审批");
JSSP("jssp", "结算审批"),
QRSK("qrsk", "确认收款");
/**
* code

View File

@ -762,6 +762,19 @@ public class DlRepairTicketsController {
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

View File

@ -249,9 +249,12 @@ public class DlRepairTickets extends TenantBaseDO {
private BigDecimal jiaoqiang;
/** 商业险保费 */
private BigDecimal shangye;
/** 支付状态 字典repair_pat_status */
private String payStatus;
/** 支付确认 0:未确认 1:已确认*/
private String payConfirm;
/** 支付确认备注 */
private String payConfirmRemark;
/** 更新时上传的图片 */
@TableField(exist = false)

View File

@ -337,4 +337,12 @@ public interface DlRepairTicketsService extends IService<DlRepairTickets> {
* @return java.util.List<java.util.Map>
**/
Map<String, Object> getBossNumStatistics(String startDate, String endDate);
/**
* @Author
* @Description 确认收款
* @Date 11:12 2025/9/18
* @Param [repairTicketsRespVO]
**/
void payConfirm(DlRepairTicketsRespVO repairTicketsRespVO);
}

View File

@ -895,7 +895,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
* @Param [startDate, endDate]
*/
@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<>();
List<Map<String, Object>> statsList = new ArrayList<>();
@ -915,17 +915,17 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
// 进厂数所有在范围内创建的
Map<String, Long> newOrderStats = ticketsInRange.stream()
.collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting()));
statsList.add(createStatsNode("newOrderNum", "订单(进厂数)", newOrderStats));
statsList.add(createStatsNode("newOrderNum", "订单(进厂数)", newOrderStats, "jinchang"));
// 维修中 repairType 分组
Map<String, Long> workingStats = ticketsInRange.stream()
.filter(item -> TicketsStatusEnum.WORKING.getCode().equals(item.getTicketsStatus()))
.collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting()));
statsList.add(createStatsNode("workingNum", "维修中", workingStats));
statsList.add(createStatsNode("workingNum", "维修中", workingStats, "weixiuzhong"));
// 已竣工通过 mapper 查询并按 repairType 分组
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()
.filter(item -> noPayCodeList.contains(item.getTicketsStatus()))
.collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting()));
statsList.add(createStatsNode("noPayNum", "未结算", noPayStats));
statsList.add(createStatsNode("noPayNum", "未结算", noPayStats, "weijiesuan"));
// 已交车通过 mapper 查询并按 repairType 分组
Map<String, Long> giveCusStats = getGiveCusStatsByRepairType(startDate, endDate);
statsList.add(createStatsNode("giveCusNum", "已交车", giveCusStats));
statsList.add(createStatsNode("giveCusNum", "已交车", giveCusStats, "yijiaoche"));
// 在厂未交车且不是已完成状态 03
Map<String, Long> inCompanyStats = ticketsInRange.stream()
.filter(item -> "0".equals(item.getIsHandover()))
.filter(item -> !"03".equals(item.getTicketsStatus()))
.collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting()));
statsList.add(createStatsNode("inCompanyNum", "在厂", inCompanyStats));
statsList.add(createStatsNode("inCompanyNum", "在厂", inCompanyStats, "zaichang"));
// 添加到结果map
resultMap.put("stats", statsList);
@ -957,6 +957,24 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
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) {
// 直接使用 mapper 查询已完成工单并按 repairType 分组
@ -1015,11 +1033,18 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
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<>();
node.put("code", code);
node.put("name", name);
node.put("selectType", selectType);
List<Map<String, Object>> children = stats.entrySet().stream()
.map(entry -> {
@ -2727,6 +2752,59 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
*/
@Override
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);
}
}

View File

@ -61,4 +61,10 @@ public class DlRepairTicketsReqVO extends DlRepairTickets {
/** 时间类型 */
private String timeType = "create";
/** 业务渠道 */
private String busiFrom;
/** 支付状态 receivable应收款 receivedAmount已收款 pendingAmount代收款 */
private String payStatus;
}

View File

@ -90,4 +90,5 @@ public class DlRepairTicketsRespVO extends DlRepairTickets {
/** 结算时间 */
private LocalDateTime settlementTime;
private String payTime;
}

View File

@ -123,7 +123,8 @@
GROUP BY drw.user_id,drr.ticket_id
ORDER BY value DESC
</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">
SELECT t.*
FROM (
@ -138,105 +139,72 @@
r.handle_name AS handleName,
'repair' AS source,
'维修' 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
JOIN dl_repair_tickets r ON c.id = r.user_id
LEFT JOIN dl_repair_titem t ON r.id = t.ticket_id
WHERE
1 = 1 and c.deleted = 0
1 = 1
AND c.deleted = 0
<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 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 r.ticket_no LIKE CONCAT('%', #{reqVO.search}, '%')
OR t.item_name LIKE CONCAT('%', #{reqVO.search}, '%')
)
</if>
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
WHERE t.rn = 1;
</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">
SELECT t.*
FROM (
-- 维修工单
SELECT
car.id AS carId,
car.license_number carNum,
c.id AS customerId,
c.cus_name AS customerName,
c.phone_number AS customerPhone,
car.license_number AS carNum,
c.id AS customerId,
c.cus_name AS customerName,
c.phone_number AS customerPhone,
r.id AS bizId,
r.ticket_no AS bizNo,
r.repair_type AS bizType,
r.create_time AS bizTime,
'repair' AS source,
'维修' 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
JOIN base_customer_car cc ON car.id = cc.car_id
JOIN base_customer_main c ON cc.cus_id = c.id
JOIN dl_repair_tickets r ON c.id = r.user_id
-- 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'
INNER JOIN base_customer_car cc ON car.id = cc.car_id
LEFT JOIN base_customer_main c ON cc.cus_id = c.id
INNER JOIN dl_repair_tickets r ON car.license_number = r.car_no
) t
WHERE t.rn = 1
<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 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.carNum LIKE CONCAT('%', #{reqVO.search}, '%')
)
</if>
GROUP BY t.carNum
ORDER BY t.bizTime DESC
</select>
<select id="pageByCustomerOrCar" resultType="cn.iocoder.yudao.module.base.vo.QueryTableResp">
SELECT drt.*, '维修' AS sourceStr
FROM dl_repair_tickets drt

View File

@ -61,7 +61,10 @@
<result property="jiaoqiang" column="jiaoqiang" />
<result property="shangye" column="shangye" />
<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="payTime" column="pay_time"/>
</resultMap>
<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>
<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'">
,drr.other_data AS settlementStr
</if>
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'">
LEFT JOIN dl_repair_records drr ON drt.id = drr.ticket_id AND drr.type = 'jssq'
</if>
@ -422,6 +426,8 @@
ON drt.id = drti.ticket_id AND drti.deleted = '0' AND drti.item_type='01'
LEFT JOIN dl_repair_worker drw
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
ON drr.ticket_id = drt.id AND drr.deleted = '0' AND drr.type = 'jssp'
WHERE drt.deleted = '0' AND tickets_status!='03'
@ -475,9 +481,31 @@
</foreach>
</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!=''">
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>
<!-- 服务顾问 -->
@ -578,6 +606,10 @@
</if>
LEFT JOIN dl_repair_worker drw
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'
AND drt.tickets_status != '03'
@ -595,6 +627,33 @@
)
</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.timeType == 'create'">
AND (drt.create_time BETWEEN CONCAT(#{map.searchTimeArray[0]}, ' 00:00:00') AND CONCAT(#{map.searchTimeArray[1]}, ' 23:59:59'))