From 875a14f2b739c5b1d11e46755a591923740bfb0e Mon Sep 17 00:00:00 2001 From: BrandWang Date: Tue, 9 May 2023 11:03:31 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=8F=AF=E5=9B=9E=E6=BA=AF):=20=E9=87=8D?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 处理类型映射 --- .../main/java/com/wabestway/recall/Main.java | 7 --- .../wabestway/recall/api/dto/TraceRecord.java | 43 +++++++++++++++++ .../wabestway/recall/api/dto/TraceUpDTO.java | 21 --------- .../recall/trace/dao/RecallRecordDao.java | 2 + .../recall/trace/handler/ListTypeHandler.java | 46 ++++++++++++++++--- .../trace/service/RecallRecordService.java | 7 +++ .../service/impl/RecallOrderServiceImpl.java | 2 +- .../service/impl/RecallRecordServiceImpl.java | 5 ++ .../mapper/trace/RecallRecordDao.xml | 32 +++++++++---- .../impl/RecallOrderApiServiceImpl.java | 14 +++--- .../impl/RecallRecordApiServiceImpl.java | 32 ++++++------- 11 files changed, 142 insertions(+), 69 deletions(-) delete mode 100644 afis-recall-api/src/main/java/com/wabestway/recall/Main.java create mode 100644 afis-recall-api/src/main/java/com/wabestway/recall/api/dto/TraceRecord.java diff --git a/afis-recall-api/src/main/java/com/wabestway/recall/Main.java b/afis-recall-api/src/main/java/com/wabestway/recall/Main.java deleted file mode 100644 index f7b6cb1..0000000 --- a/afis-recall-api/src/main/java/com/wabestway/recall/Main.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.wabestway.recall; - -public class Main { - public static void main(String[] args) { - System.out.println("Hello world!"); - } -} \ No newline at end of file diff --git a/afis-recall-api/src/main/java/com/wabestway/recall/api/dto/TraceRecord.java b/afis-recall-api/src/main/java/com/wabestway/recall/api/dto/TraceRecord.java new file mode 100644 index 0000000..67a88df --- /dev/null +++ b/afis-recall-api/src/main/java/com/wabestway/recall/api/dto/TraceRecord.java @@ -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; +} diff --git a/afis-recall-api/src/main/java/com/wabestway/recall/api/dto/TraceUpDTO.java b/afis-recall-api/src/main/java/com/wabestway/recall/api/dto/TraceUpDTO.java index 5156a34..64e0f81 100644 --- a/afis-recall-api/src/main/java/com/wabestway/recall/api/dto/TraceUpDTO.java +++ b/afis-recall-api/src/main/java/com/wabestway/recall/api/dto/TraceUpDTO.java @@ -11,24 +11,3 @@ public class TraceUpDTO { List 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; -} diff --git a/afis-recall-service/src/main/java/com/wabestway/recall/trace/dao/RecallRecordDao.java b/afis-recall-service/src/main/java/com/wabestway/recall/trace/dao/RecallRecordDao.java index 7e295f8..09391ce 100644 --- a/afis-recall-service/src/main/java/com/wabestway/recall/trace/dao/RecallRecordDao.java +++ b/afis-recall-service/src/main/java/com/wabestway/recall/trace/dao/RecallRecordDao.java @@ -48,4 +48,6 @@ public interface RecallRecordDao extends BaseMapper { * @return */ RecallRecordVO queryRecallRecordById(@Param("id") String id); + + List queryTraceRecords(@Param("traceId") String traceId); } diff --git a/afis-recall-service/src/main/java/com/wabestway/recall/trace/handler/ListTypeHandler.java b/afis-recall-service/src/main/java/com/wabestway/recall/trace/handler/ListTypeHandler.java index f18d010..9100d6f 100644 --- a/afis-recall-service/src/main/java/com/wabestway/recall/trace/handler/ListTypeHandler.java +++ b/afis-recall-service/src/main/java/com/wabestway/recall/trace/handler/ListTypeHandler.java @@ -1,6 +1,10 @@ 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 org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.MappedJdbcTypes; @@ -11,32 +15,62 @@ import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; -@MappedTypes(value = {RecallRecordVO.class}) -@MappedJdbcTypes(value = {JdbcType.LONGNVARCHAR}) +@MappedTypes(value = {List.class}) +@MappedJdbcTypes(value = {JdbcType.BLOB}) public class ListTypeHandler implements TypeHandler> { + private ObjectMapper objectMapper = new ObjectMapper(); + @Override public void setParameter(PreparedStatement ps, int i, List 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 public List getResult(ResultSet rs, String s) throws SQLException { String str = rs.getString(s); - return Arrays.asList(str.split(",")); + List newList = new ArrayList<>(); + try { + newList = objectMapper.readValue(str, new TypeReference>() { + }); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + return newList; } @Override public List getResult(ResultSet rs, int i) throws SQLException { String str = rs.getString(i); - return Arrays.asList(str.split(",")); + List newList = new ArrayList<>(); + try { + newList = objectMapper.readValue(str, new TypeReference>() { + }); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + return newList; } @Override public List getResult(CallableStatement cs, int i) throws SQLException { String str = cs.getString(i); - return Arrays.asList(str.split(",")); + List newList = new ArrayList<>(); + try { + newList = objectMapper.readValue(str, new TypeReference>() { + }); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + return newList; } } diff --git a/afis-recall-service/src/main/java/com/wabestway/recall/trace/service/RecallRecordService.java b/afis-recall-service/src/main/java/com/wabestway/recall/trace/service/RecallRecordService.java index 7c9b966..c0f8644 100644 --- a/afis-recall-service/src/main/java/com/wabestway/recall/trace/service/RecallRecordService.java +++ b/afis-recall-service/src/main/java/com/wabestway/recall/trace/service/RecallRecordService.java @@ -44,5 +44,12 @@ public interface RecallRecordService extends IService { * @return */ RecallRecordVO queryRecallRecordById(String id); + + /** + * 根据traceId 查询列表 + * @param traceId + * @return + */ + List queryTraceRecords(String traceId); } diff --git a/afis-recall-service/src/main/java/com/wabestway/recall/trace/service/impl/RecallOrderServiceImpl.java b/afis-recall-service/src/main/java/com/wabestway/recall/trace/service/impl/RecallOrderServiceImpl.java index a5e9b4c..76dca8d 100644 --- a/afis-recall-service/src/main/java/com/wabestway/recall/trace/service/impl/RecallOrderServiceImpl.java +++ b/afis-recall-service/src/main/java/com/wabestway/recall/trace/service/impl/RecallOrderServiceImpl.java @@ -53,7 +53,7 @@ public class RecallOrderServiceImpl extends ServiceImpl orderQuery = Wrappers.lambdaQuery(); - orderQuery.eq(RecallOrderEntity::getOrderId, traceId); + orderQuery.eq(RecallOrderEntity::getTraceId, traceId); orderQuery.last("limit 1"); return baseMapper.selectOne(orderQuery); } diff --git a/afis-recall-service/src/main/java/com/wabestway/recall/trace/service/impl/RecallRecordServiceImpl.java b/afis-recall-service/src/main/java/com/wabestway/recall/trace/service/impl/RecallRecordServiceImpl.java index f5f2bf0..8ce5cd8 100644 --- a/afis-recall-service/src/main/java/com/wabestway/recall/trace/service/impl/RecallRecordServiceImpl.java +++ b/afis-recall-service/src/main/java/com/wabestway/recall/trace/service/impl/RecallRecordServiceImpl.java @@ -43,4 +43,9 @@ public class RecallRecordServiceImpl extends ServiceImpl queryTraceRecords(String traceId) { + return baseMapper.queryTraceRecords(traceId); + } } \ No newline at end of file diff --git a/afis-recall-service/src/main/resources/mapper/trace/RecallRecordDao.xml b/afis-recall-service/src/main/resources/mapper/trace/RecallRecordDao.xml index 19067eb..6e00ba3 100644 --- a/afis-recall-service/src/main/resources/mapper/trace/RecallRecordDao.xml +++ b/afis-recall-service/src/main/resources/mapper/trace/RecallRecordDao.xml @@ -2,7 +2,10 @@ - + + + t.id id, t.product_code productCode, @@ -18,11 +21,11 @@ - select + select - from recall_record t - where 1 = 1 + from recall_record t + where 1 = 1 and t.id = #{recallRecordDTO.id} @@ -79,10 +82,10 @@ @@ -114,4 +117,13 @@ where t.id= #{recallRecord.id} + + + \ No newline at end of file diff --git a/afis-recall-web/src/main/java/com/wabestway/recall/trace/service/impl/RecallOrderApiServiceImpl.java b/afis-recall-web/src/main/java/com/wabestway/recall/trace/service/impl/RecallOrderApiServiceImpl.java index c4cd0a7..f147b59 100644 --- a/afis-recall-web/src/main/java/com/wabestway/recall/trace/service/impl/RecallOrderApiServiceImpl.java +++ b/afis-recall-web/src/main/java/com/wabestway/recall/trace/service/impl/RecallOrderApiServiceImpl.java @@ -15,7 +15,9 @@ import com.wabestway.recall.trace.entity.RecallOrderEntity; import com.wabestway.recall.trace.entity.RecallRecordEntity; import com.wabestway.recall.trace.service.RecallOrderService; import com.wabestway.recall.trace.service.RecallRecordService; +import com.wabestway.recall.trace.vo.RecallRecordVO; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import com.wabestway.recall.trace.dto.RecallOrderDTO; import com.wabestway.recall.trace.vo.RecallOrderVO; @@ -55,13 +57,13 @@ public class RecallOrderApiServiceImpl implements RecallOrderApiService { @Override public ResObj getRecallOrderByOrderId(String orderId) { - RecallOrderVO recallOrderVO = recallOrderService.queryRecallOrderById(orderId); - if (recallOrderVO != null) { - LambdaQueryWrapper recordQuery = Wrappers.lambdaQuery(); - recordQuery.eq(RecallRecordEntity::getTraceId, recallOrderVO.getTraceId()); - recordQuery.orderByAsc(RecallRecordEntity::getCreateTime); - List recordList = recallRecordService.getBaseMapper().selectList(recordQuery); + RecallOrderVO recallOrderVO = new RecallOrderVO(); + RecallOrderEntity recallOrderEntity = recallOrderService.queryRecallOrderByOrderId(orderId); + if (recallOrderEntity != null) { + BeanUtils.copyProperties(recallOrderEntity, recallOrderVO); + List recordList = recallRecordService.queryTraceRecords(recallOrderEntity.getTraceId()); + log.info(JSON.toJSONString(recordList)); List events = recordList.stream() .flatMap(entity -> entity.getEvents().stream()) .collect(Collectors.toList()); diff --git a/afis-recall-web/src/main/java/com/wabestway/recall/trace/service/impl/RecallRecordApiServiceImpl.java b/afis-recall-web/src/main/java/com/wabestway/recall/trace/service/impl/RecallRecordApiServiceImpl.java index 0d7ed1a..4013ab8 100644 --- a/afis-recall-web/src/main/java/com/wabestway/recall/trace/service/impl/RecallRecordApiServiceImpl.java +++ b/afis-recall-web/src/main/java/com/wabestway/recall/trace/service/impl/RecallRecordApiServiceImpl.java @@ -2,6 +2,7 @@ package com.wabestway.recall.trace.service.impl; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.wabestway.commons.http.ResObj; import com.wabestway.recall.trace.dto.TraceDTO; 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 org.springframework.stereotype.Service; +import java.util.Objects; import java.util.Optional; import java.util.UUID; @@ -33,18 +35,15 @@ public class RecallRecordApiServiceImpl implements RecallRecordApiService { @Override public ResObj save(TraceDTO record) { - String orderId = record.getOrderId(); - 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(); + Objects.requireNonNull(record); - RecallOrderEntity order = Optional.ofNullable(orderId) - .flatMap(id -> Optional.ofNullable(recallOrderService.queryRecallOrderByOrderId(id))) - .orElseGet(() -> { + String orderId = StringUtils.isBlank(record.getOrderId()) ? UUID.randomUUID().toString().replace("-", "") : record.getOrderId(); + + 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(); newOrder.setId(UUID.randomUUID().toString().replace("-", "")); newOrder.setOrderId(orderId); @@ -60,19 +59,16 @@ public class RecallRecordApiServiceImpl implements RecallRecordApiService { newOrder.setCompleteDate(System.currentTimeMillis()); } recallOrderService.save(newOrder); - - record.setTraceId(traceId); - record.setOrderId(orderId); return newOrder; - }); - - if (isLastEvent) { + })); + if (isLastEvent && !"1".equals(order.getComplete())) { order.setComplete("1"); order.setCompleteDate(System.currentTimeMillis()); order.setUpdateTime(System.currentTimeMillis()); recallOrderService.updateRecallOrderById(order); } - + record.setTraceId(traceId); + record.setOrderId(orderId); RecallRecordEntity recallRecord = new RecallRecordEntity(); BeanUtils.copyProperties(record, recallRecord); recallRecord.setId(UUID.randomUUID().toString().replace("-", ""));