Toggle navigation
Toggle navigation
This project
Loading...
Sign in
jiujian
/
client-customer-order-service
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
wangyingyang
2024-11-22 14:51:24 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
b55441421be72d2cbbeb32b1042606d28bfe0c60
b5544142
1 parent
ff8e9a8f
update order
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
367 additions
and
32 deletions
src/main/java/com/tianting/infoloop/config/MybatisPlusConfig.java
src/main/java/com/tianting/infoloop/model/db/OrderDb.java
src/main/java/com/tianting/infoloop/model/db/OrderDetailDb.java
src/main/java/com/tianting/infoloop/model/dto/CustomerNoticeDto.java
src/main/java/com/tianting/infoloop/model/dto/MealDetailJson.java
src/main/java/com/tianting/infoloop/service/grpc/OrderGrpcService.java
src/main/java/com/tianting/infoloop/service/impl/OrderDbServiceImpl.java
src/main/java/com/tianting/infoloop/service/impl/OrderDetailDbServiceImpl.java
src/main/java/com/tianting/infoloop/utils/DbToProtoUtil.java
src/main/java/com/tianting/infoloop/utils/GenericBeanToProtoListConverter.java
src/main/java/com/tianting/infoloop/utils/MysqlTypeTransferUtil.java
src/main/java/com/tianting/infoloop/utils/ProtoBeanUtil.java
src/main/java/com/tianting/infoloop/config/MybatisPlusConfig.java
View file @
b554414
...
...
@@ -88,4 +88,9 @@ public class MybatisPlusConfig {
return
new
MybatisPlusSqlInjector
();
}
@Bean
public
MysqlTypeTransferUtil
mysqlTypeTransferUtil
()
{
return
new
MysqlTypeTransferUtil
();
}
}
...
...
src/main/java/com/tianting/infoloop/model/db/OrderDb.java
View file @
b554414
...
...
@@ -15,6 +15,7 @@ import lombok.experimental.Accessors;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
import
org.apache.ibatis.type.JdbcType
;
/**
* order DB
...
...
@@ -153,6 +154,7 @@ public class OrderDb extends Model<OrderDb> implements Serializable {
* "doctors":["String"]
* }
*/
@TableField
(
jdbcType
=
JdbcType
.
OTHER
)
private
JsonNode
customerNoticeJson
;
/**
* 是否删除;0:未删除,1:已删除
...
...
src/main/java/com/tianting/infoloop/model/db/OrderDetailDb.java
View file @
b554414
...
...
@@ -14,6 +14,7 @@ import java.time.LocalDateTime;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
import
org.apache.ibatis.type.JdbcType
;
/**
* order detail DB
...
...
@@ -76,6 +77,7 @@ public class OrderDetailDb extends Model<OrderDetailDb> implements Serializable
* "allergies": [] //过敏源
* }
*/
@TableField
(
jdbcType
=
JdbcType
.
OTHER
)
private
JsonNode
mealDetailJson
;
/**
* 是否删除;0:未删除,1:已删除
...
...
src/main/java/com/tianting/infoloop/model/dto/CustomerNoticeDto.java
0 → 100644
View file @
b554414
package
com
.
tianting
.
infoloop
.
model
.
dto
;
import
java.util.List
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public
class
CustomerNoticeDto
{
private
List
<
String
>
avoids
;
private
List
<
String
>
doctors
;
}
\ No newline at end of file
src/main/java/com/tianting/infoloop/model/dto/MealDetailJson.java
0 → 100644
View file @
b554414
package
com
.
tianting
.
infoloop
.
model
.
dto
;
import
java.util.List
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public
class
MealDetailJson
{
private
String
basicMaterials
;
private
List
<
String
>
tastes
;
private
List
<
String
>
efficacies
;
private
List
<
String
>
dockers
;
private
String
energy
;
private
String
fat
;
private
String
protein
;
private
String
carbohydrate
;
private
List
<
String
>
allergies
;
private
List
<
String
>
avoids
;
private
List
<
String
>
skus
;
}
src/main/java/com/tianting/infoloop/service/grpc/OrderGrpcService.java
View file @
b554414
...
...
@@ -57,6 +57,8 @@ import com.tianting.infoloop.model.db.OrderOperationRecordDb;
import
com.tianting.infoloop.service.OrderDbService
;
import
com.tianting.infoloop.service.OrderDetailDbService
;
import
com.tianting.infoloop.service.OrderOperationRecordDbService
;
import
com.tianting.infoloop.utils.DbToProtoUtil
;
import
com.tianting.infoloop.utils.GenericBeanToProtoListConverter
;
import
com.tianting.infoloop.utils.ProtoBeanUtil
;
import
io.grpc.Status
;
import
io.grpc.stub.StreamObserver
;
...
...
@@ -120,8 +122,10 @@ public class OrderGrpcService extends ClientCustomerOrderServiceRpcGrpc.ClientCu
try
{
final
var
list
=
orderDbService
.
getOrdersByCustomerId
(
request
.
getCustomerId
());
if
(!
list
.
isEmpty
())
{
builder
.
addAllResponses
(
ProtoBeanUtil
.
beanListToProtoList
(
list
,
SingleClientCustomerOrderRpcResponse
.
class
));
// final var allResponses = ProtoBeanUtil.beanListToProtoList(list,
// SingleClientCustomerOrderRpcResponse.class);
final
var
allResponses
=
DbToProtoUtil
.
orderDbListToProtoList
(
list
);
builder
.
addAllResponses
(
allResponses
);
}
}
catch
(
final
Exception
e
)
{
log
.
error
(
"getClientCustomerOrdersByCustomerId error;"
,
e
);
...
...
@@ -139,7 +143,8 @@ public class OrderGrpcService extends ClientCustomerOrderServiceRpcGrpc.ClientCu
try
{
final
var
data
=
orderDbService
.
getById
(
request
.
getId
());
if
(
data
!=
null
)
{
builder
.
setResponse
(
ProtoBeanUtil
.
beanToProto
(
data
,
SingleClientCustomerOrderRpcResponse
.
class
));
// builder.setResponse(ProtoBeanUtil.beanToProto(data, SingleClientCustomerOrderRpcResponse.class));
builder
.
setResponse
(
DbToProtoUtil
.
orderDbToProto
(
data
));
}
}
catch
(
final
Exception
e
)
{
log
.
error
(
"getClientCustomerOrderById error;"
,
e
);
...
...
@@ -162,7 +167,8 @@ public class OrderGrpcService extends ClientCustomerOrderServiceRpcGrpc.ClientCu
}
final
var
list
=
orderDbService
.
listByIds
(
request
.
getIdsList
());
if
(!
list
.
isEmpty
())
{
builder
.
addAllResponses
(
ProtoBeanUtil
.
beanListToProtoList
(
list
,
SingleClientCustomerOrderRpcResponse
.
class
));
// builder.addAllResponses(ProtoBeanUtil.beanListToProtoList(list, SingleClientCustomerOrderRpcResponse.class));
builder
.
addAllResponses
(
DbToProtoUtil
.
orderDbListToProtoList
(
list
));
}
}
catch
(
final
Exception
e
)
{
log
.
error
(
"getClientCustomerOrdersByIds error;"
,
e
);
...
...
@@ -186,11 +192,13 @@ public class OrderGrpcService extends ClientCustomerOrderServiceRpcGrpc.ClientCu
queryWrapper
.
eq
(
OrderDb:
:
getEnterpriseId
,
request
.
getEnterpriseId
());
queryWrapper
.
eq
(
OrderDb:
:
getClientId
,
request
.
getClientId
());
queryWrapper
.
eq
(
OrderDb:
:
getStatus
,
request
.
getStatusValue
());
queryWrapper
.
orderByDesc
(
OrderDb:
:
getCreatedAt
);
final
var
result
=
orderDbService
.
page
(
page
,
queryWrapper
);
builder
.
setTotal
(
result
.
getTotal
());
builder
.
setPages
(
result
.
getPages
());
if
(!
result
.
getRecords
().
isEmpty
())
{
builder
.
addAllResponses
(
ProtoBeanUtil
.
beanListToProtoList
(
result
.
getRecords
(),
SingleClientCustomerOrderRpcResponse
.
class
));
// builder.addAllResponses(ProtoBeanUtil.beanListToProtoList(result.getRecords(), SingleClientCustomerOrderRpcResponse.class));
builder
.
addAllResponses
(
DbToProtoUtil
.
orderDbListToProtoList
(
result
.
getRecords
()));
}
}
catch
(
final
Exception
e
)
{
log
.
error
(
"queryClientCustomerOrdersByPagination error;"
,
e
);
...
...
@@ -298,9 +306,11 @@ public class OrderGrpcService extends ClientCustomerOrderServiceRpcGrpc.ClientCu
if
(
request
.
getShouldFilterIsRead
())
{
queryWrapper
.
eq
(
OrderDb:
:
getIsRead
,
request
.
getIsRead
());
}
queryWrapper
.
orderByDesc
(
OrderDb:
:
getCreatedAt
);
final
var
list
=
orderDbService
.
list
(
queryWrapper
);
if
(!
list
.
isEmpty
())
{
builder
.
addAllResponses
(
ProtoBeanUtil
.
beanListToProtoList
(
list
,
SingleClientCustomerOrderRpcResponse
.
class
));
// builder.addAllResponses(ProtoBeanUtil.beanListToProtoList(list, SingleClientCustomerOrderRpcResponse.class));
builder
.
addAllResponses
(
DbToProtoUtil
.
orderDbListToProtoList
(
list
));
}
}
catch
(
final
Exception
e
)
{
log
.
error
(
"queryTestExampleDbByCondition error;"
,
e
);
...
...
@@ -391,7 +401,8 @@ public class OrderGrpcService extends ClientCustomerOrderServiceRpcGrpc.ClientCu
try
{
final
var
data
=
orderDetailDbService
.
getById
(
request
.
getId
());
if
(
data
!=
null
)
{
builder
.
setResponse
(
ProtoBeanUtil
.
beanToProto
(
data
,
SingleClientCustomerOrderDetailRpcResponse
.
class
));
// builder.setResponse(ProtoBeanUtil.beanToProto(data, SingleClientCustomerOrderDetailRpcResponse.class));
builder
.
setResponse
(
DbToProtoUtil
.
orderDetailDbToProto
(
data
));
}
}
catch
(
final
Exception
e
)
{
log
.
error
(
"getClientCustomerOrderDetailById error;"
,
e
);
...
...
@@ -416,7 +427,8 @@ public class OrderGrpcService extends ClientCustomerOrderServiceRpcGrpc.ClientCu
}
final
var
list
=
orderDetailDbService
.
listByIds
(
request
.
getIdsList
());
if
(!
list
.
isEmpty
())
{
builder
.
addAllResponses
(
ProtoBeanUtil
.
beanListToProtoList
(
list
,
SingleClientCustomerOrderDetailRpcResponse
.
class
));
// builder.addAllResponses(ProtoBeanUtil.beanListToProtoList(list, SingleClientCustomerOrderDetailRpcResponse.class));
builder
.
addAllResponses
(
DbToProtoUtil
.
orderDetailDbListToProtoList
(
list
));
}
}
catch
(
final
Exception
e
)
{
log
.
error
(
"getClientCustomerOrderDetailsByIds error;"
,
e
);
...
...
@@ -442,7 +454,8 @@ public class OrderGrpcService extends ClientCustomerOrderServiceRpcGrpc.ClientCu
}
final
var
list
=
orderDetailDbService
.
getOrderDetailsByOrderIds
(
request
);
if
(!
list
.
isEmpty
())
{
builder
.
addAllResponses
(
ProtoBeanUtil
.
beanListToProtoList
(
list
,
SingleClientCustomerOrderDetailRpcResponse
.
class
));
// builder.addAllResponses(ProtoBeanUtil.beanListToProtoList(list, SingleClientCustomerOrderDetailRpcResponse.class));
builder
.
addAllResponses
(
DbToProtoUtil
.
orderDetailDbListToProtoList
(
list
));
}
}
catch
(
final
Exception
e
)
{
log
.
error
(
"getClientCustomerOrderDetailsByIds error;"
,
e
);
...
...
src/main/java/com/tianting/infoloop/service/impl/OrderDbServiceImpl.java
View file @
b554414
...
...
@@ -16,6 +16,8 @@ import com.infoloop.tianting.clientcustomerorderservice.UpdateClientCustomerOrde
import
com.tianting.infoloop.mapper.OrderDbMapper
;
import
com.tianting.infoloop.model.db.OrderDb
;
import
com.tianting.infoloop.model.db.OrderDetailDb
;
import
com.tianting.infoloop.model.dto.CustomerNoticeDto
;
import
com.tianting.infoloop.model.dto.MealDetailJson
;
import
com.tianting.infoloop.service.OrderDbService
;
import
com.tianting.infoloop.service.OrderDetailDbService
;
import
com.tianting.infoloop.utils.exception.ErrorCodeConstants
;
...
...
@@ -98,9 +100,12 @@ public class OrderDbServiceImpl extends ServiceImpl<OrderDbMapper, OrderDb> impl
if
(
createOrderRpcRequest
.
getCreation
().
getShouldCreateRemark
())
{
orderDb
.
setRemark
(
createOrderRpcRequest
.
getCreation
().
getRemark
());
}
if
(
createOrderRpcRequest
.
getCreation
().
getShouldCreateCustomerNoticeJson
())
{
ObjectMapper
objectMapper
=
new
ObjectMapper
();
JsonNode
notice
=
objectMapper
.
valueToTree
(
createOrderRpcRequest
.
getCreation
().
getCustomerNoticeJson
());
if
(
createOrderRpcRequest
.
getCreation
().
getShouldCreateCustomerNoticeJson
())
{
JsonNode
notice
=
objectMapper
.
valueToTree
(
CustomerNoticeDto
.
builder
()
.
avoids
(
createOrderRpcRequest
.
getCreation
().
getCustomerNoticeJson
().
getAvoidsList
())
.
doctors
(
createOrderRpcRequest
.
getCreation
().
getCustomerNoticeJson
().
getDoctorsList
())
.
build
());
orderDb
.
setCustomerNoticeJson
(
notice
);
}
LocalDateTime
mealTime
=
Instant
.
ofEpochMilli
(
createOrderRpcRequest
.
getCreation
().
getMealTime
())
...
...
@@ -149,7 +154,19 @@ public class OrderDbServiceImpl extends ServiceImpl<OrderDbMapper, OrderDb> impl
}
orderDetailDb
.
setNotServe
(
false
);
if
(
detailCreation
.
getShouldCreateMealDetailJson
())
{
// orderDetailDb.setMealDetailJson(objectMapper.valueToTree(detailCreation.getMealDetailJson()));
orderDetailDb
.
setMealDetailJson
(
objectMapper
.
valueToTree
(
MealDetailJson
.
builder
()
.
allergies
(
detailCreation
.
getMealDetailJson
().
getAllergiesList
())
.
avoids
(
detailCreation
.
getMealDetailJson
().
getAvoidsList
())
.
basicMaterials
(
detailCreation
.
getMealDetailJson
().
getBasicMaterials
())
.
carbohydrate
(
detailCreation
.
getMealDetailJson
().
getCarbohydrate
())
.
dockers
(
detailCreation
.
getMealDetailJson
().
getDockersList
())
.
efficacies
(
detailCreation
.
getMealDetailJson
().
getEfficaciesList
())
.
energy
(
detailCreation
.
getMealDetailJson
().
getEnergy
())
.
fat
(
detailCreation
.
getMealDetailJson
().
getFat
())
.
protein
(
detailCreation
.
getMealDetailJson
().
getProtein
())
.
skus
(
detailCreation
.
getMealDetailJson
().
getSkusList
())
.
tastes
(
detailCreation
.
getMealDetailJson
().
getTastesList
())
.
build
()));
//detailCreation.getMealDetailJson()
}
return
orderDetailDb
;
})
...
...
@@ -308,7 +325,10 @@ public class OrderDbServiceImpl extends ServiceImpl<OrderDbMapper, OrderDb> impl
orderDb
.
setRemark
(
creation
.
getRemark
());
}
if
(
creation
.
getShouldCreateCustomerNoticeJson
())
{
JsonNode
notice
=
objectMapper
.
valueToTree
(
creation
.
getCustomerNoticeJson
());
JsonNode
notice
=
objectMapper
.
valueToTree
(
CustomerNoticeDto
.
builder
()
.
avoids
(
creation
.
getCustomerNoticeJson
().
getAvoidsList
())
.
doctors
(
creation
.
getCustomerNoticeJson
().
getDoctorsList
())
.
build
());
orderDb
.
setCustomerNoticeJson
(
notice
);
}
LocalDateTime
mealTime
=
Instant
.
ofEpochMilli
(
creation
.
getMealTime
())
...
...
@@ -356,7 +376,19 @@ public class OrderDbServiceImpl extends ServiceImpl<OrderDbMapper, OrderDb> impl
}
orderDetailDb
.
setNotServe
(
false
);
if
(
detailCreation
.
getShouldCreateMealDetailJson
())
{
orderDetailDb
.
setMealDetailJson
(
objectMapper
.
valueToTree
(
detailCreation
.
getMealDetailJson
()));
orderDetailDb
.
setMealDetailJson
(
objectMapper
.
valueToTree
(
MealDetailJson
.
builder
()
.
allergies
(
detailCreation
.
getMealDetailJson
().
getAllergiesList
())
.
avoids
(
detailCreation
.
getMealDetailJson
().
getAvoidsList
())
.
basicMaterials
(
detailCreation
.
getMealDetailJson
().
getBasicMaterials
())
.
carbohydrate
(
detailCreation
.
getMealDetailJson
().
getCarbohydrate
())
.
dockers
(
detailCreation
.
getMealDetailJson
().
getDockersList
())
.
efficacies
(
detailCreation
.
getMealDetailJson
().
getEfficaciesList
())
.
energy
(
detailCreation
.
getMealDetailJson
().
getEnergy
())
.
fat
(
detailCreation
.
getMealDetailJson
().
getFat
())
.
protein
(
detailCreation
.
getMealDetailJson
().
getProtein
())
.
skus
(
detailCreation
.
getMealDetailJson
().
getSkusList
())
.
tastes
(
detailCreation
.
getMealDetailJson
().
getTastesList
())
.
build
()));
}
return
orderDetailDb
;
})
...
...
@@ -377,7 +409,8 @@ public class OrderDbServiceImpl extends ServiceImpl<OrderDbMapper, OrderDb> impl
QueryWrapper
<
OrderDb
>
wrapper
=
new
QueryWrapper
<>();
wrapper
.
eq
(
"customerId"
,
customerId
)
.
orderByDesc
(
"createdAt"
);
return
orderDbMapper
.
selectList
(
wrapper
);
final
var
res
=
orderDbMapper
.
selectList
(
wrapper
);
return
res
;
}
@Override
...
...
@@ -462,7 +495,10 @@ public class OrderDbServiceImpl extends ServiceImpl<OrderDbMapper, OrderDb> impl
}
ObjectMapper
objectMapper
=
new
ObjectMapper
();
if
(
updateOrderRequest
.
getModification
().
getShouldUpdateCustomerNoticeJson
())
{
orderDb
.
setCustomerNoticeJson
(
objectMapper
.
valueToTree
(
updateOrderRequest
.
getModification
().
getCustomerNoticeJson
()));
orderDb
.
setCustomerNoticeJson
(
objectMapper
.
valueToTree
(
CustomerNoticeDto
.
builder
()
.
avoids
(
updateOrderRequest
.
getModification
().
getCustomerNoticeJson
().
getAvoidsList
())
.
doctors
(
updateOrderRequest
.
getModification
().
getCustomerNoticeJson
().
getDoctorsList
())
.
build
()));
}
if
(
updateOrderRequest
.
getModification
().
getShouldUpdateIsRead
())
{
orderDb
.
setIsRead
(
updateOrderRequest
.
getModification
().
getIsRead
());
...
...
@@ -557,7 +593,10 @@ public class OrderDbServiceImpl extends ServiceImpl<OrderDbMapper, OrderDb> impl
}
ObjectMapper
objectMapper
=
new
ObjectMapper
();
if
(
modification
.
getShouldUpdateCustomerNoticeJson
())
{
orderDb
.
setCustomerNoticeJson
(
objectMapper
.
valueToTree
(
modification
.
getCustomerNoticeJson
()));
orderDb
.
setCustomerNoticeJson
(
objectMapper
.
valueToTree
(
CustomerNoticeDto
.
builder
()
.
avoids
(
modification
.
getCustomerNoticeJson
().
getAvoidsList
())
.
doctors
(
modification
.
getCustomerNoticeJson
().
getDoctorsList
())
.
build
()));
}
if
(
modification
.
getShouldUpdateIsRead
())
{
orderDb
.
setIsRead
(
modification
.
getIsRead
());
...
...
src/main/java/com/tianting/infoloop/service/impl/OrderDetailDbServiceImpl.java
View file @
b554414
...
...
@@ -17,6 +17,7 @@ import com.tianting.infoloop.mapper.OrderDbMapper;
import
com.tianting.infoloop.mapper.OrderDetailMapper
;
import
com.tianting.infoloop.model.db.OrderDb
;
import
com.tianting.infoloop.model.db.OrderDetailDb
;
import
com.tianting.infoloop.model.dto.MealDetailJson
;
import
com.tianting.infoloop.service.OrderDetailDbService
;
import
com.tianting.infoloop.utils.ProtoBeanUtil
;
import
com.tianting.infoloop.utils.exception.ErrorCodeConstants
;
...
...
@@ -67,7 +68,19 @@ public class OrderDetailDbServiceImpl extends ServiceImpl<OrderDetailMapper, Ord
}
orderDetailDb
.
setNotServe
(
false
);
if
(
createOrderDetailRequest
.
getCreation
().
getShouldCreateMealDetailJson
())
{
orderDetailDb
.
setMealDetailJson
(
objectMapper
.
valueToTree
(
createOrderDetailRequest
.
getCreation
().
getMealDetailJson
()));
orderDetailDb
.
setMealDetailJson
(
objectMapper
.
valueToTree
(
MealDetailJson
.
builder
()
.
allergies
(
createOrderDetailRequest
.
getCreation
().
getMealDetailJson
().
getAllergiesList
())
.
avoids
(
createOrderDetailRequest
.
getCreation
().
getMealDetailJson
().
getAvoidsList
())
.
basicMaterials
(
createOrderDetailRequest
.
getCreation
().
getMealDetailJson
().
getBasicMaterials
())
.
carbohydrate
(
createOrderDetailRequest
.
getCreation
().
getMealDetailJson
().
getCarbohydrate
())
.
dockers
(
createOrderDetailRequest
.
getCreation
().
getMealDetailJson
().
getDockersList
())
.
efficacies
(
createOrderDetailRequest
.
getCreation
().
getMealDetailJson
().
getEfficaciesList
())
.
energy
(
createOrderDetailRequest
.
getCreation
().
getMealDetailJson
().
getEnergy
())
.
fat
(
createOrderDetailRequest
.
getCreation
().
getMealDetailJson
().
getFat
())
.
protein
(
createOrderDetailRequest
.
getCreation
().
getMealDetailJson
().
getProtein
())
.
skus
(
createOrderDetailRequest
.
getCreation
().
getMealDetailJson
().
getSkusList
())
.
tastes
(
createOrderDetailRequest
.
getCreation
().
getMealDetailJson
().
getTastesList
())
.
build
()));
}
boolean
res
=
this
.
save
(
orderDetailDb
);
if
(!
res
)
{
...
...
@@ -80,8 +93,6 @@ public class OrderDetailDbServiceImpl extends ServiceImpl<OrderDetailMapper, Ord
public
List
<
OrderDetailDb
>
batchCreateOrderDetailDb
(
BatchCreateClientCustomerOrderDetailsRpcRequest
batchCreateOrderDetailsRequest
)
{
ObjectMapper
objectMapper
=
new
ObjectMapper
();
// objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CAMEL_CASE);
// objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
var
list
=
batchCreateOrderDetailsRequest
.
getCreationsList
().
stream
()
.
map
(
creation
->
{
OrderDetailDb
orderDetailDb
=
new
OrderDetailDb
();
...
...
@@ -110,14 +121,19 @@ public class OrderDetailDbServiceImpl extends ServiceImpl<OrderDetailMapper, Ord
orderDetailDb
.
setAdjustSkuRemark
(
creation
.
getAdjustSkuRemark
());
}
if
(
creation
.
getShouldCreateMealDetailJson
())
{
// final JsonNode a;
// try {
// a = objectMapper.readTree(ProtoBeanUtil.protoToJson(creation.getMealDetailJson()));
// orderDetailDb.setMealDetailJson(a);
// System.out.println(a);
// } catch (JsonProcessingException e) {
// e.printStackTrace();
// }
orderDetailDb
.
setMealDetailJson
(
objectMapper
.
valueToTree
(
MealDetailJson
.
builder
()
.
allergies
(
creation
.
getMealDetailJson
().
getAllergiesList
())
.
avoids
(
creation
.
getMealDetailJson
().
getAvoidsList
())
.
basicMaterials
(
creation
.
getMealDetailJson
().
getBasicMaterials
())
.
carbohydrate
(
creation
.
getMealDetailJson
().
getCarbohydrate
())
.
dockers
(
creation
.
getMealDetailJson
().
getDockersList
())
.
efficacies
(
creation
.
getMealDetailJson
().
getEfficaciesList
())
.
energy
(
creation
.
getMealDetailJson
().
getEnergy
())
.
fat
(
creation
.
getMealDetailJson
().
getFat
())
.
protein
(
creation
.
getMealDetailJson
().
getProtein
())
.
skus
(
creation
.
getMealDetailJson
().
getSkusList
())
.
tastes
(
creation
.
getMealDetailJson
().
getTastesList
())
.
build
()));
}
return
orderDetailDb
;
})
...
...
@@ -162,8 +178,19 @@ public class OrderDetailDbServiceImpl extends ServiceImpl<OrderDetailMapper, Ord
}
if
(
updateOrderDetailRequest
.
getModification
().
getShouldUpdateMealDetailJson
())
{
ObjectMapper
objectMapper
=
new
ObjectMapper
();
orderDetailDb
.
setMealDetailJson
(
objectMapper
.
valueToTree
(
updateOrderDetailRequest
.
getModification
().
getMealDetailJson
()));
orderDetailDb
.
setMealDetailJson
(
objectMapper
.
valueToTree
(
MealDetailJson
.
builder
()
.
allergies
(
updateOrderDetailRequest
.
getModification
().
getMealDetailJson
().
getAllergiesList
())
.
avoids
(
updateOrderDetailRequest
.
getModification
().
getMealDetailJson
().
getAvoidsList
())
.
basicMaterials
(
updateOrderDetailRequest
.
getModification
().
getMealDetailJson
().
getBasicMaterials
())
.
carbohydrate
(
updateOrderDetailRequest
.
getModification
().
getMealDetailJson
().
getCarbohydrate
())
.
dockers
(
updateOrderDetailRequest
.
getModification
().
getMealDetailJson
().
getDockersList
())
.
efficacies
(
updateOrderDetailRequest
.
getModification
().
getMealDetailJson
().
getEfficaciesList
())
.
energy
(
updateOrderDetailRequest
.
getModification
().
getMealDetailJson
().
getEnergy
())
.
fat
(
updateOrderDetailRequest
.
getModification
().
getMealDetailJson
().
getFat
())
.
protein
(
updateOrderDetailRequest
.
getModification
().
getMealDetailJson
().
getProtein
())
.
skus
(
updateOrderDetailRequest
.
getModification
().
getMealDetailJson
().
getSkusList
())
.
tastes
(
updateOrderDetailRequest
.
getModification
().
getMealDetailJson
().
getTastesList
())
.
build
()));
}
return
orderDetailMapper
.
updateById
(
orderDetailDb
)
>
0
;
}
...
...
@@ -203,7 +230,19 @@ public class OrderDetailDbServiceImpl extends ServiceImpl<OrderDetailMapper, Ord
}
if
(
modification
.
getShouldUpdateMealDetailJson
())
{
ObjectMapper
objectMapper
=
new
ObjectMapper
();
orderDetailDb
.
setMealDetailJson
(
objectMapper
.
valueToTree
(
modification
.
getMealDetailJson
()));
orderDetailDb
.
setMealDetailJson
(
objectMapper
.
valueToTree
(
MealDetailJson
.
builder
()
.
allergies
(
modification
.
getMealDetailJson
().
getAllergiesList
())
.
avoids
(
modification
.
getMealDetailJson
().
getAvoidsList
())
.
basicMaterials
(
modification
.
getMealDetailJson
().
getBasicMaterials
())
.
carbohydrate
(
modification
.
getMealDetailJson
().
getCarbohydrate
())
.
dockers
(
modification
.
getMealDetailJson
().
getDockersList
())
.
efficacies
(
modification
.
getMealDetailJson
().
getEfficaciesList
())
.
energy
(
modification
.
getMealDetailJson
().
getEnergy
())
.
fat
(
modification
.
getMealDetailJson
().
getFat
())
.
protein
(
modification
.
getMealDetailJson
().
getProtein
())
.
skus
(
modification
.
getMealDetailJson
().
getSkusList
())
.
tastes
(
modification
.
getMealDetailJson
().
getTastesList
())
.
build
()));
}
return
orderDetailDb
;
}).
collect
(
Collectors
.
toList
());
...
...
src/main/java/com/tianting/infoloop/utils/DbToProtoUtil.java
0 → 100644
View file @
b554414
This diff is collapsed. Click to expand it.
src/main/java/com/tianting/infoloop/utils/GenericBeanToProtoListConverter.java
0 → 100644
View file @
b554414
package
com
.
tianting
.
infoloop
.
utils
;
import
com.fasterxml.jackson.databind.JsonNode
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.google.protobuf.Message
;
import
com.google.protobuf.util.JsonFormat
;
import
java.lang.reflect.Constructor
;
import
java.lang.reflect.Field
;
import
java.time.Instant
;
import
java.time.LocalDateTime
;
import
java.time.ZoneOffset
;
import
java.util.ArrayList
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.Map
;
public
class
GenericBeanToProtoListConverter
{
// 将Java Bean列表转换为对应的ProtoBuf消息列表
public
static
<
M
,
T
extends
Message
>
List
<
T
>
beanListToProtoList
(
List
<
M
>
beanSourceList
,
Class
<
T
>
protoBean
)
{
List
<
T
>
resultList
=
new
ArrayList
<>();
try
{
for
(
M
bean
:
beanSourceList
)
{
// 创建ProtoBuf消息实例
Constructor
<
T
>
declaredConstructor
;
try
{
declaredConstructor
=
protoBean
.
getDeclaredConstructor
();
declaredConstructor
.
setAccessible
(
true
);
T
instance
=
declaredConstructor
.
newInstance
();
// 将Java Bean的各个字段值设置到ProtoBuf消息实例中
setProtoFieldsFromBean
(
bean
,
instance
,
true
);
resultList
.
add
(
instance
);
}
catch
(
NoSuchMethodException
e
)
{
// 如果没有无参构造函数,尝试查找其他构造函数并传入合适参数(这里假设可以传入空参数列表创建实例,实际可能需根据具体情况调整)
Constructor
<?>[]
constructors
=
protoBean
.
getConstructors
();
if
(
constructors
.
length
>
0
)
{
declaredConstructor
=
(
Constructor
<
T
>)
constructors
[
0
];
declaredConstructor
.
setAccessible
(
true
);
T
instance
=
declaredConstructor
.
newInstance
();
// 将Java Bean的各个字段值设置到ProtoBuf消息实例中
setProtoFieldsFromBean
(
bean
,
instance
,
true
);
resultList
.
add
(
instance
);
}
else
{
throw
new
IllegalArgumentException
(
"ProtoBuf消息类型 "
+
protoBean
.
getName
()
+
" 没有可用的构造函数来创建实例"
,
e
);
}
}
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
// 根据具体需求,可在这里进行更详细的错误处理,比如抛出特定的转换失败异常给调用者等
throw
new
RuntimeException
(
"Java Bean列表转换为ProtoBuf消息列表失败"
,
e
);
}
return
resultList
;
}
// 将Java Bean的各个字段值设置到ProtoBuf消息实例中
private
static
<
M
,
T
extends
Message
>
void
setProtoFieldsFromBean
(
M
bean
,
T
protoInstance
,
boolean
ignoreUnknownFields
)
throws
Exception
{
// 获取Java Bean的所有字段
Field
[]
beanFields
=
bean
.
getClass
().
getDeclaredFields
();
for
(
Field
beanField
:
beanFields
)
{
beanField
.
setAccessible
(
true
);
// 获取ProtoBuf消息实例中对应的字段
Field
protoField
;
try
{
protoField
=
protoInstance
.
getClass
().
getDeclaredField
(
beanField
.
getName
());
protoField
.
setAccessible
(
true
);
}
catch
(
NoSuchFieldException
e
)
{
if
(
ignoreUnknownFields
)
{
continue
;
}
else
{
throw
e
;
}
}
// 获取Java Bean字段的值
Object
beanFieldValue
=
beanField
.
get
(
bean
);
if
(
beanFieldValue
!=
null
)
{
if
(
beanFieldValue
instanceof
JsonNode
)
{
// 处理JsonNode类型的字段
JsonNode
jsonNodeValue
=
(
JsonNode
)
beanFieldValue
;
// 创建对应的嵌套ProtoBuf消息实例(假设是嵌套消息类型,这里以通用的处理方式为例)
Constructor
<?>
nestedProtoConstructor
=
protoField
.
getType
().
getDeclaredConstructor
();
nestedProtoConstructor
.
setAccessible
(
true
);
Object
nestedProtoInstance
=
nestedProtoConstructor
.
newInstance
();
// 设置嵌套ProtoBuf消息实例的字段值(这里假设嵌套消息类型有类似的处理逻辑,具体根据实际情况而定)
setProtoFieldsFromBean
(
jsonNodeValue
,
nestedProtoInstance
,
ignoreUnknownFields
);
// 将设置好的嵌套ProtoBuf消息实例设置到ProtoBuf消息实例的对应字段中
protoField
.
set
(
protoInstance
,
nestedProtoInstance
);
}
else
if
(
beanFieldValue
instanceof
LocalDateTime
)
{
// 处理LocalDateTime类型的字段,将其转换为时间戳(毫秒)后设置到ProtoBuf消息实例中
LocalDateTime
localDateTimeValue
=
(
LocalDateTime
)
beanFieldValue
;
long
timestamp
=
localDateTimeValue
.
toInstant
(
ZoneOffset
.
UTC
).
toEpochMilli
();
protoField
.
set
(
protoInstance
,
timestamp
);
}
else
if
(
beanFieldValue
instanceof
Integer
)
{
// 处理Integer类型字段,直接设置到ProtoBuf消息实例对应字段
protoField
.
set
(
protoInstance
,
(
Integer
)
beanFieldValue
);
}
else
if
(
beanFieldValue
instanceof
String
)
{
// 处理String类型字段,直接设置到ProtoBuf消息实例对应字段
protoField
.
set
(
protoInstance
,
(
String
)
beanFieldValue
);
}
else
if
(
beanFieldValue
instanceof
Boolean
)
{
// 处理Boolean类型字段,直接设置到ProtoBuf消息实例对应字段
protoField
.
set
(
protoInstance
,
(
Boolean
)
beanFieldValue
);
}
else
if
(
beanFieldValue
instanceof
Long
)
{
// 处理Long类型字段,直接设置到ProtoBuf消息实例对应字段
protoField
.
set
(
protoInstance
,
(
Long
)
beanFieldValue
);
}
else
{
// 对于其他未明确处理的类型,尝试通过其toString方法转换为字符串后设置(可能需要根据具体类型进一步优化)
protoField
.
set
(
protoInstance
,
beanFieldValue
.
toString
());
}
}
else
{
// 如果Java Bean字段的值为null,将ProtoBuf消息实例的对应字段也设置为null
protoField
.
set
(
protoInstance
,
null
);
}
}
}
// 将JsonNode的值设置到对应的ProtoBuf消息实例(这里假设是嵌套消息类型,以通用处理方式为例)
private
static
void
setProtoFieldsFromBean
(
JsonNode
jsonNode
,
Object
protoInstance
,
boolean
ignoreUnknownFields
)
throws
Exception
{
// 获取JsonNode的所有字段
Iterator
<
Map
.
Entry
<
String
,
JsonNode
>>
jsonNodeFields
=
jsonNode
.
fields
();
while
(
jsonNodeFields
.
hasNext
())
{
Map
.
Entry
<
String
,
JsonNode
>
entry
=
jsonNodeFields
.
next
();
String
fieldName
=
entry
.
getKey
();
JsonNode
fieldValue
=
entry
.
getValue
();
// 获取ProtoBuf消息实例中对应的字段
Field
protoField
;
try
{
protoField
=
protoInstance
.
getClass
().
getDeclaredField
(
fieldName
);
protoField
.
setAccessible
(
true
);
}
catch
(
NoSuchFieldException
e
)
{
if
(
ignoreUnknownFields
)
{
continue
;
}
else
{
throw
e
;
}
}
if
(
fieldValue
!=
null
)
{
if
(
fieldValue
instanceof
JsonNode
)
{
// 递归处理嵌套的JsonNode类型的字段
Constructor
<?>
nestedProtoConstructor
=
protoField
.
getType
().
getDeclaredConstructor
();
nestedProtoConstructor
.
setAccessible
(
true
);
Object
nestedProtoInstance
=
nestedProtoInstance
=
nestedProtoConstructor
.
newInstance
();
setProtoFieldsFromBean
((
JsonNode
)
fieldValue
,
nestedProtoInstance
,
ignoreUnknownFields
);
protoField
.
set
(
protoInstance
,
nestedProtoInstance
);
}
else
{
// 将非JsonNode类型的值设置到ProtoBuf消息实例的对应字段中
protoField
.
set
(
protoInstance
,
fieldValue
.
asText
());
}
}
else
{
// 如果JsonNode字段的值为null,将ProtoBuf消息实例的对应字段也设置为null
protoField
.
set
(
protoInstance
,
null
);
}
}
}
}
\ No newline at end of file
src/main/java/com/tianting/infoloop/utils/MysqlTypeTransferUtil.java
View file @
b554414
...
...
@@ -8,7 +8,12 @@ import java.sql.CallableStatement;
import
java.sql.PreparedStatement
;
import
java.sql.ResultSet
;
import
java.sql.SQLException
;
import
org.apache.ibatis.type.MappedJdbcTypes
;
import
org.apache.ibatis.type.MappedTypes
;
@MappedTypes
(
JsonNode
.
class
)
// 定义这个类型处理器对应的JDBC类型为OTHER(因为JSON数据在这种情况下没有直接对应的标准JDBC类型)
@MappedJdbcTypes
(
JdbcType
.
OTHER
)
public
class
MysqlTypeTransferUtil
extends
BaseTypeHandler
<
JsonNode
>
{
private
static
final
ObjectMapper
objectMapper
=
new
ObjectMapper
();
...
...
src/main/java/com/tianting/infoloop/utils/ProtoBeanUtil.java
View file @
b554414
package
com
.
tianting
.
infoloop
.
utils
;
import
cn.hutool.core.date.LocalDateTimeUtil
;
import
com.fasterxml.jackson.databind.JsonNode
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.google.gson.Gson
;
import
com.google.gson.GsonBuilder
;
import
com.google.gson.TypeAdapter
;
...
...
@@ -159,7 +161,24 @@ public class ProtoBeanUtil {
return
LocalDate
.
ofInstant
(
Instant
.
ofEpochMilli
(
Long
.
parseLong
(
in
.
nextString
())),
DateFormatterConstants
.
CHINA_ZONE
);
}
}
).
create
();
)
// .registerTypeAdapter(JsonNode.class, new TypeAdapter<JsonNode>() {
// private final ObjectMapper objectMapper = new ObjectMapper();
// @Override
// public void write(JsonWriter out, JsonNode value) throws IOException {
// if (value!= null) {
// out.value(value.toString());
// } else {
// out.nullValue();
// }
// }
//
// @Override
// public JsonNode read(JsonReader in) throws IOException {
// return objectMapper.readValue(in.nextString(), JsonNode.class);
// }
// })
.
create
();
return
gson
;
}
...
...
Please
register
or
login
to post a comment