feat(可回溯): 重构
处理类型映射
This commit is contained in:
@@ -1,7 +0,0 @@
|
|||||||
package com.wabestway.recall;
|
|
||||||
|
|
||||||
public class Main {
|
|
||||||
public static void main(String[] args) {
|
|
||||||
System.out.println("Hello world!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package com.wabestway.recall.api.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class TraceRecord {
|
||||||
|
/**
|
||||||
|
* 业务订单ID
|
||||||
|
*/
|
||||||
|
private String orderId;
|
||||||
|
/**
|
||||||
|
* 产品编码
|
||||||
|
*/
|
||||||
|
private String supplierProductCode;
|
||||||
|
/**
|
||||||
|
* 产品名称
|
||||||
|
*/
|
||||||
|
private String supplierProductName;
|
||||||
|
/**
|
||||||
|
* 保单号
|
||||||
|
*/
|
||||||
|
private String policyNo;
|
||||||
|
/**
|
||||||
|
* 投保人名称
|
||||||
|
*/
|
||||||
|
private String holderName;
|
||||||
|
/**
|
||||||
|
* 投保人手机号
|
||||||
|
*/
|
||||||
|
private String holderPhone;
|
||||||
|
/**
|
||||||
|
* 保险公司名称
|
||||||
|
*/
|
||||||
|
private String supplierName;
|
||||||
|
/**
|
||||||
|
* 保单起始日期
|
||||||
|
*/
|
||||||
|
private String startDate;
|
||||||
|
/**
|
||||||
|
* 保单结束日期
|
||||||
|
*/
|
||||||
|
private String endDate;
|
||||||
|
}
|
||||||
@@ -11,24 +11,3 @@ public class TraceUpDTO {
|
|||||||
List<TraceRecord> records;
|
List<TraceRecord> records;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Data
|
|
||||||
class TraceRecord {
|
|
||||||
/** 业务订单ID */
|
|
||||||
private String orderId;
|
|
||||||
/** 产品编码 */
|
|
||||||
private String supplierProductCode;
|
|
||||||
/** 产品名称 */
|
|
||||||
private String supplierProductName;
|
|
||||||
/** 保单号 */
|
|
||||||
private String policyNo;
|
|
||||||
/** 投保人名称 */
|
|
||||||
private String holderName;
|
|
||||||
/** 投保人手机号 */
|
|
||||||
private String holderPhone;
|
|
||||||
/** 保险公司名称 */
|
|
||||||
private String supplierName;
|
|
||||||
/** 保单起始日期 */
|
|
||||||
private String startDate;
|
|
||||||
/** 保单结束日期 */
|
|
||||||
private String endDate;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -48,4 +48,6 @@ public interface RecallRecordDao extends BaseMapper<RecallRecordEntity> {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
RecallRecordVO queryRecallRecordById(@Param("id") String id);
|
RecallRecordVO queryRecallRecordById(@Param("id") String id);
|
||||||
|
|
||||||
|
List<RecallRecordVO> queryTraceRecords(@Param("traceId") String traceId);
|
||||||
}
|
}
|
||||||
|
|||||||
+40
-6
@@ -1,6 +1,10 @@
|
|||||||
package com.wabestway.recall.trace.handler;
|
package com.wabestway.recall.trace.handler;
|
||||||
|
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.wabestway.recall.trace.entity.RecallRecordEntity;
|
||||||
import com.wabestway.recall.trace.vo.RecallRecordVO;
|
import com.wabestway.recall.trace.vo.RecallRecordVO;
|
||||||
import org.apache.ibatis.type.JdbcType;
|
import org.apache.ibatis.type.JdbcType;
|
||||||
import org.apache.ibatis.type.MappedJdbcTypes;
|
import org.apache.ibatis.type.MappedJdbcTypes;
|
||||||
@@ -11,32 +15,62 @@ import java.sql.CallableStatement;
|
|||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@MappedTypes(value = {RecallRecordVO.class})
|
@MappedTypes(value = {List.class})
|
||||||
@MappedJdbcTypes(value = {JdbcType.LONGNVARCHAR})
|
@MappedJdbcTypes(value = {JdbcType.BLOB})
|
||||||
public class ListTypeHandler implements TypeHandler<List<String>> {
|
public class ListTypeHandler implements TypeHandler<List<String>> {
|
||||||
|
private ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setParameter(PreparedStatement ps, int i, List<String> strings, JdbcType jdbcType) throws SQLException {
|
public void setParameter(PreparedStatement ps, int i, List<String> strings, JdbcType jdbcType) throws SQLException {
|
||||||
ps.setString(i, String.join(",", strings));
|
String jsonStr = null;
|
||||||
|
try {
|
||||||
|
jsonStr = objectMapper.writeValueAsString(strings);
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
ps.setString(i, jsonStr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getResult(ResultSet rs, String s) throws SQLException {
|
public List<String> getResult(ResultSet rs, String s) throws SQLException {
|
||||||
String str = rs.getString(s);
|
String str = rs.getString(s);
|
||||||
return Arrays.asList(str.split(","));
|
List<String> newList = new ArrayList<>();
|
||||||
|
try {
|
||||||
|
newList = objectMapper.readValue(str, new TypeReference<List<String>>() {
|
||||||
|
});
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
return newList;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getResult(ResultSet rs, int i) throws SQLException {
|
public List<String> getResult(ResultSet rs, int i) throws SQLException {
|
||||||
String str = rs.getString(i);
|
String str = rs.getString(i);
|
||||||
return Arrays.asList(str.split(","));
|
List<String> newList = new ArrayList<>();
|
||||||
|
try {
|
||||||
|
newList = objectMapper.readValue(str, new TypeReference<List<String>>() {
|
||||||
|
});
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
return newList;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getResult(CallableStatement cs, int i) throws SQLException {
|
public List<String> getResult(CallableStatement cs, int i) throws SQLException {
|
||||||
String str = cs.getString(i);
|
String str = cs.getString(i);
|
||||||
return Arrays.asList(str.split(","));
|
List<String> newList = new ArrayList<>();
|
||||||
|
try {
|
||||||
|
newList = objectMapper.readValue(str, new TypeReference<List<String>>() {
|
||||||
|
});
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
return newList;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+7
@@ -44,5 +44,12 @@ public interface RecallRecordService extends IService<RecallRecordEntity> {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
RecallRecordVO queryRecallRecordById(String id);
|
RecallRecordVO queryRecallRecordById(String id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据traceId 查询列表
|
||||||
|
* @param traceId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<RecallRecordVO> queryTraceRecords(String traceId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -53,7 +53,7 @@ public class RecallOrderServiceImpl extends ServiceImpl<RecallOrderDao, RecallOr
|
|||||||
@Override
|
@Override
|
||||||
public RecallOrderEntity queryRecallOrderByTraceId(String traceId) {
|
public RecallOrderEntity queryRecallOrderByTraceId(String traceId) {
|
||||||
LambdaQueryWrapper<RecallOrderEntity> orderQuery = Wrappers.lambdaQuery();
|
LambdaQueryWrapper<RecallOrderEntity> orderQuery = Wrappers.lambdaQuery();
|
||||||
orderQuery.eq(RecallOrderEntity::getOrderId, traceId);
|
orderQuery.eq(RecallOrderEntity::getTraceId, traceId);
|
||||||
orderQuery.last("limit 1");
|
orderQuery.last("limit 1");
|
||||||
return baseMapper.selectOne(orderQuery);
|
return baseMapper.selectOne(orderQuery);
|
||||||
}
|
}
|
||||||
|
|||||||
+5
@@ -43,4 +43,9 @@ public class RecallRecordServiceImpl extends ServiceImpl<RecallRecordDao, Recall
|
|||||||
public RecallRecordVO queryRecallRecordById(String id ) {
|
public RecallRecordVO queryRecallRecordById(String id ) {
|
||||||
return baseMapper.queryRecallRecordById(id);
|
return baseMapper.queryRecallRecordById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<RecallRecordVO> queryTraceRecords(String traceId) {
|
||||||
|
return baseMapper.queryTraceRecords(traceId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -2,7 +2,10 @@
|
|||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
|
||||||
<mapper namespace="com.wabestway.recall.trace.dao.RecallRecordDao">
|
<mapper namespace="com.wabestway.recall.trace.dao.RecallRecordDao">
|
||||||
|
<resultMap id="queryOrderRecordMap" type="com.wabestway.recall.trace.vo.RecallRecordVO">
|
||||||
|
<result column="events" property="events"
|
||||||
|
typeHandler="com.wabestway.recall.trace.handler.ListTypeHandler"></result>
|
||||||
|
</resultMap>
|
||||||
<sql id="queryRecallRecordSql">
|
<sql id="queryRecallRecordSql">
|
||||||
t.id id,
|
t.id id,
|
||||||
t.product_code productCode,
|
t.product_code productCode,
|
||||||
@@ -114,4 +117,13 @@
|
|||||||
where t.id= #{recallRecord.id}
|
where t.id= #{recallRecord.id}
|
||||||
|
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
|
<select id="queryTraceRecords" resultMap="queryOrderRecordMap">
|
||||||
|
select
|
||||||
|
<include refid="queryRecallRecordSql"/>
|
||||||
|
from recall_record t
|
||||||
|
where t.trace_id = #{traceId}
|
||||||
|
order by t.create_time asc
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
+8
-6
@@ -15,7 +15,9 @@ import com.wabestway.recall.trace.entity.RecallOrderEntity;
|
|||||||
import com.wabestway.recall.trace.entity.RecallRecordEntity;
|
import com.wabestway.recall.trace.entity.RecallRecordEntity;
|
||||||
import com.wabestway.recall.trace.service.RecallOrderService;
|
import com.wabestway.recall.trace.service.RecallOrderService;
|
||||||
import com.wabestway.recall.trace.service.RecallRecordService;
|
import com.wabestway.recall.trace.service.RecallRecordService;
|
||||||
|
import com.wabestway.recall.trace.vo.RecallRecordVO;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import com.wabestway.recall.trace.dto.RecallOrderDTO;
|
import com.wabestway.recall.trace.dto.RecallOrderDTO;
|
||||||
import com.wabestway.recall.trace.vo.RecallOrderVO;
|
import com.wabestway.recall.trace.vo.RecallOrderVO;
|
||||||
@@ -55,13 +57,13 @@ public class RecallOrderApiServiceImpl implements RecallOrderApiService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResObj<RecallOrderVO> getRecallOrderByOrderId(String orderId) {
|
public ResObj<RecallOrderVO> getRecallOrderByOrderId(String orderId) {
|
||||||
RecallOrderVO recallOrderVO = recallOrderService.queryRecallOrderById(orderId);
|
RecallOrderVO recallOrderVO = new RecallOrderVO();
|
||||||
if (recallOrderVO != null) {
|
RecallOrderEntity recallOrderEntity = recallOrderService.queryRecallOrderByOrderId(orderId);
|
||||||
LambdaQueryWrapper<RecallRecordEntity> recordQuery = Wrappers.lambdaQuery();
|
if (recallOrderEntity != null) {
|
||||||
recordQuery.eq(RecallRecordEntity::getTraceId, recallOrderVO.getTraceId());
|
BeanUtils.copyProperties(recallOrderEntity, recallOrderVO);
|
||||||
recordQuery.orderByAsc(RecallRecordEntity::getCreateTime);
|
|
||||||
List<RecallRecordEntity> recordList = recallRecordService.getBaseMapper().selectList(recordQuery);
|
|
||||||
|
|
||||||
|
List<RecallRecordVO> recordList = recallRecordService.queryTraceRecords(recallOrderEntity.getTraceId());
|
||||||
|
log.info(JSON.toJSONString(recordList));
|
||||||
List<String> events = recordList.stream()
|
List<String> events = recordList.stream()
|
||||||
.flatMap(entity -> entity.getEvents().stream())
|
.flatMap(entity -> entity.getEvents().stream())
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|||||||
+14
-18
@@ -2,6 +2,7 @@ package com.wabestway.recall.trace.service.impl;
|
|||||||
|
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||||
import com.wabestway.commons.http.ResObj;
|
import com.wabestway.commons.http.ResObj;
|
||||||
import com.wabestway.recall.trace.dto.TraceDTO;
|
import com.wabestway.recall.trace.dto.TraceDTO;
|
||||||
import com.wabestway.recall.trace.entity.RecallOrderEntity;
|
import com.wabestway.recall.trace.entity.RecallOrderEntity;
|
||||||
@@ -14,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import com.wabestway.recall.trace.service.RecallRecordApiService;
|
import com.wabestway.recall.trace.service.RecallRecordApiService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@@ -33,18 +35,15 @@ public class RecallRecordApiServiceImpl implements RecallRecordApiService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResObj save(TraceDTO record) {
|
public ResObj save(TraceDTO record) {
|
||||||
String orderId = record.getOrderId();
|
Objects.requireNonNull(record);
|
||||||
String traceId = Optional.ofNullable(orderId)
|
|
||||||
.map(recallOrderService::queryRecallOrderByOrderId)
|
|
||||||
.map(RecallOrderEntity::getTraceId)
|
|
||||||
.orElse(UUID.randomUUID().toString().replace("-", ""));
|
|
||||||
log.info(traceId);
|
|
||||||
record.setTraceId(traceId);
|
|
||||||
boolean isLastEvent = record.isLast();
|
|
||||||
|
|
||||||
RecallOrderEntity order = Optional.ofNullable(orderId)
|
String orderId = StringUtils.isBlank(record.getOrderId()) ? UUID.randomUUID().toString().replace("-", "") : record.getOrderId();
|
||||||
.flatMap(id -> Optional.ofNullable(recallOrderService.queryRecallOrderByOrderId(id)))
|
|
||||||
.orElseGet(() -> {
|
String traceId = StringUtils.isBlank(record.getTraceId()) ? UUID.randomUUID().toString().replace("-", "") : record.getTraceId();
|
||||||
|
|
||||||
|
boolean isLastEvent = record.isLast();
|
||||||
|
RecallOrderEntity order = Optional.ofNullable(recallOrderService.queryRecallOrderByOrderId(orderId))
|
||||||
|
.orElseGet(() -> Optional.ofNullable(recallOrderService.queryRecallOrderByTraceId(traceId)).orElseGet(() -> {
|
||||||
RecallOrderEntity newOrder = new RecallOrderEntity();
|
RecallOrderEntity newOrder = new RecallOrderEntity();
|
||||||
newOrder.setId(UUID.randomUUID().toString().replace("-", ""));
|
newOrder.setId(UUID.randomUUID().toString().replace("-", ""));
|
||||||
newOrder.setOrderId(orderId);
|
newOrder.setOrderId(orderId);
|
||||||
@@ -60,19 +59,16 @@ public class RecallRecordApiServiceImpl implements RecallRecordApiService {
|
|||||||
newOrder.setCompleteDate(System.currentTimeMillis());
|
newOrder.setCompleteDate(System.currentTimeMillis());
|
||||||
}
|
}
|
||||||
recallOrderService.save(newOrder);
|
recallOrderService.save(newOrder);
|
||||||
|
|
||||||
record.setTraceId(traceId);
|
|
||||||
record.setOrderId(orderId);
|
|
||||||
return newOrder;
|
return newOrder;
|
||||||
});
|
}));
|
||||||
|
if (isLastEvent && !"1".equals(order.getComplete())) {
|
||||||
if (isLastEvent) {
|
|
||||||
order.setComplete("1");
|
order.setComplete("1");
|
||||||
order.setCompleteDate(System.currentTimeMillis());
|
order.setCompleteDate(System.currentTimeMillis());
|
||||||
order.setUpdateTime(System.currentTimeMillis());
|
order.setUpdateTime(System.currentTimeMillis());
|
||||||
recallOrderService.updateRecallOrderById(order);
|
recallOrderService.updateRecallOrderById(order);
|
||||||
}
|
}
|
||||||
|
record.setTraceId(traceId);
|
||||||
|
record.setOrderId(orderId);
|
||||||
RecallRecordEntity recallRecord = new RecallRecordEntity();
|
RecallRecordEntity recallRecord = new RecallRecordEntity();
|
||||||
BeanUtils.copyProperties(record, recallRecord);
|
BeanUtils.copyProperties(record, recallRecord);
|
||||||
recallRecord.setId(UUID.randomUUID().toString().replace("-", ""));
|
recallRecord.setId(UUID.randomUUID().toString().replace("-", ""));
|
||||||
|
|||||||
Reference in New Issue
Block a user