@StreamListener(value = OrderProcessor.INPUT)
public void receive(OrderResponse response) {
log.info(" CustomerController.receive 客户模块接收订单消费 : response:[{}]", response);
if (Constant.SYSTEM_ID == response.getStatus()) {
service.updateCustomerAmount(response);
}
}
void updateCustomerAmount(OrderResponse response);
@Override
public void updateCustomerAmount(OrderResponse response) {
long companyId = response.getCompanyId();
log.info("updateCustomerAmount 公司ID:companyId [{}]", companyId);
long customerId = response.getCustomerId();
log.info("updateCustomerAmount 客户ID:customerId [{}]", customerId);
List<CustomerPoJo> list =
list(
query ->
query
.getConditions()
.eq(CustomerPoJo::getCompanyId, companyId)
.eq(CustomerPoJo::getId, customerId),
CustomerPoJo.class);
log.info("updateCustomerAmount list条数 [{}]", list.size());
if (list.size() > 0) {
CustomerPoJo customerPoJo = list.get(0);
log.info("updateCustomerAmount 客户对象:customerPoJo [{}]", customerPoJo);
List<SubOrderResponse> subOrders = response.getSubOrders();
long totalAmount = 0;
for (SubOrderResponse order : subOrders) {
totalAmount += order.getTotalAmount();
}
log.info("updateCustomerAmount 消费金额:totalAmount [{}]", totalAmount);
long sumAmount = customerPoJo.getSumAmount() + totalAmount;
log.info("updateCustomerAmount 累计消费金额:sumAmount [{}]", sumAmount);
customerPoJo.setSumAmount(sumAmount);
int sumQuantity = customerPoJo.getSumQuantity() + 1;
log.info("updateCustomerAmount 累计消费次数:sumQuantity [{}]", sumQuantity);
customerPoJo.setSumQuantity(sumQuantity);
if (sumQuantity > 0) {
long averageAmount = sumAmount / sumQuantity;
log.info("updateCustomerAmount 客单价:averageAmount [{}]", averageAmount);
customerPoJo.setAverageAmount(averageAmount);
repository.updateById(customerPoJo);
}
}
}