当前位置:首页 / 文章测试 / java练习2

java练习2

开始打字练习

@Component

public class QueryMerchantBalanceRemote extends BaseRemoteService<QueryMerchantBalanceReq, QueryMerchantBalanceResp,

MerchantBalanceReq, ResultRes<MerchantBalanceDetail>> {

@Autowired

private SettlementAccountService settlementAccountService;

@Override

protected MerchantBalanceReq parseRequest(QueryMerchantBalanceReq request) {

MerchantBalanceReq merchantBalanceReq = new MerchantBalanceReq();

merchantBalanceReq.setProviderCode(request.getProviderCode());

return merchantBalanceReq;

}

@Override

protected QueryMerchantBalanceResp fromRemoteResponse(ResultRes<MerchantBalanceDetail> remoteResp) {

if (!remoteResp.isSuccess()) {

throw new RemoteException(ResEnum.API_ERROR);

}

QueryMerchantBalanceResp resp = new QueryMerchantBalanceResp();

resp.setAccountBalance(remoteResp.getData().getAccountBalance());

resp.setActiveAccountBalance(remoteResp.getData().getActiveAccountBalance());

resp.setFreezeAccountBalance(remoteResp.getData().getFreezeAccountBalance());

return resp;

}

@Override

protected ResultRes<MerchantBalanceDetail> processCore(MerchantBalanceReq remoteRequest) throws Exception {

return settlementAccountService.queryMerchantBalance(remoteRequest);

}

@Override

protected String getServiceName() {

return "settlementAccount";

}

@Override

protected String getApiName() {

return "queryMerchantBalance";

}

}

@Component

@RequiredArgsConstructor

@Log4j2

public class OrderRepository extends ServiceImpl<OrderInfoDoMapper, OrderInfoDo> {

private final OrderExtInfoDoRepository orderExtInfoDoRepository;

private final OrderStatusChangeFLowRepository orderStatusChangeFLowRepository;

private final OrderFlowRepository orderFlowRepository;

private final OrderFlowDetailRepository orderFlowDetailRepository;

private final OrderDetailRepository orderDetailRepository;

/**

* 初始化订单信息

* @param createOrderContext 创单上下文

*/

public void saveInitOrder(CreateOrderContext createOrderContext) {

// 订单信息

OrderInfoDo orderInfoDo = OrderServiceHelper.buildOrderInfo(createOrderContext.getDeviceInfo(),

createOrderContext.getAliPaymentRes(), createOrderContext.getStoreInfo(),

createOrderContext.getUserInfoRes(), null, 0);

this.save(orderInfoDo);

createOrderContext.setOrderInfoDo(orderInfoDo);

// 新增订单额外信息

OrderExtInfoDO orderExtInfoDO = OrderServiceHelper.buildOrderExtInfoDO(orderInfoDo, createOrderContext.getDeviceInfo(),

createOrderContext.getStoreInfo());

orderExtInfoDoRepository.save(orderExtInfoDO);

// 增加订单流水信息 TODO

}

// TODO 增加动作原因和actcion

public void updateOrderStatus(OrderInfoDo orderInfoDo, OrderStatusEnum orderStatusEnum,

PayOrderStsEnum payOrderStsEnum, OrderStatusChangeEvent event) {

// 更新订单状态

Integer oriStatus = orderInfoDo.getStatus();

orderInfoDo.setUuid(orderInfoDo.getUuid());

orderInfoDo.setStatus(orderStatusEnum.getCode());

orderInfoDo.setLastUpdatedTime(LocalDateTime.now());

if(payOrderStsEnum != null){

orderInfoDo.setPayOrderStatus(payOrderStsEnum.getCode());

}

this.updateById(orderInfoDo);

// 插入状态变更流水

OrderStatusChangeFLowDo orderStatusChangeFLowDo = new OrderStatusChangeFLowDo();

orderStatusChangeFLowDo.setOrderCode(orderInfoDo.getOrderCode());

orderStatusChangeFLowDo.setOrderUuid(orderInfoDo.getUuid());

orderStatusChangeFLowDo.setPreStatus(String.valueOf(orderInfoDo.getStatus()));

orderStatusChangeFLowDo.setAfterStatus(String.valueOf(orderStatusEnum.getCode()));

orderStatusChangeFLowDo.setChangeReason(event.name());

orderStatusChangeFLowDo.setChangeAction(event.name());

orderStatusChangeFLowDo.initCreate();

orderStatusChangeFLowRepository.save(orderStatusChangeFLowDo);

log.info("订单状态变更结束,由: {}, 变更为: {}", oriStatus, orderStatusEnum.getCode());

}

public void updateOrderStatusToFinish(OrderInfoDo orderInfoDo, LocalDateTime paySuccessTime, String payChannelProduct,

String flowUuid, String payId) {

// 更新订单状态

OrderInfoDo orderInfoDoUpdater = new OrderInfoDo();

orderInfoDoUpdater.setUuid(orderInfoDo.getUuid());

if(orderInfoDo.getStatus().equals(OrderStatusEnum.UN_PAY.getCode())) {

orderInfoDoUpdater.setStatus(OrderStatusEnum.FINISH_PAY.getCode());

} else if (orderInfoDo.getStatus().equals(OrderStatusEnum.TO_MANUAL_FIX.getCode())) {

orderInfoDoUpdater.setStatus(OrderStatusEnum.MANUAL_FIXED.getCode());

}

orderInfoDoUpdater.setLastUpdatedTime(LocalDateTime.now());

orderInfoDoUpdater.setPayTime(paySuccessTime);

orderInfoDoUpdater.setPayChannelProduct(payChannelProduct);

orderInfoDoUpdater.setLastUpdatedTime(LocalDateTime.now());

orderInfoDoUpdater.setPayOrderStatus(PayOrderStsEnum.FINISH_PAY.getCode());

this.updateById(orderInfoDoUpdater);

OrderFlowDo orderFlowDoUpdater = new OrderFlowDo();

orderFlowDoUpdater.setUuid(flowUuid);

orderFlowDoUpdater.setOperationFinishTime(paySuccessTime);

orderFlowDoUpdater.setPayId(payId);

orderFlowDoUpdater.setFlowStatus(OrderFlowStatusEnum.FINISH_PAY.getCode());

orderFlowDoUpdater.setLastUpdatedTime(LocalDateTime.now());

orderFlowDoUpdater.setPayChannelProduct(payChannelProduct);

orderFlowRepository.updateById(orderFlowDoUpdater);

// 插入状态变更流水 TODO

OrderStatusChangeFLowDo orderStatusChangeFLowDo = new OrderStatusChangeFLowDo();

orderStatusChangeFLowDo.setOrderCode(orderInfoDo.getOrderCode());

orderStatusChangeFLowDo.setOrderUuid(orderInfoDo.getUuid());

orderStatusChangeFLowDo.setPreStatus(String.valueOf(orderInfoDo.getStatus()));

orderStatusChangeFLowDo.setAfterStatus(String.valueOf(OrderStatusEnum.FINISH_PAY.getCode()));

orderStatusChangeFLowDo.setChangeReason(OrderStatusChangeEvent.PAY_CALLBACK_SUCCESS.name());

orderStatusChangeFLowDo.setChangeAction(OrderStatusChangeEvent.PAY_CALLBACK_SUCCESS.name());

orderStatusChangeFLowDo.initCreate();

orderStatusChangeFLowRepository.save(orderStatusChangeFLowDo);

}

public OrderInfoDo findByOrderCode(String orderCode){

return this.lambdaQuery().eq(OrderInfoDo::getOrderCode, orderCode).eq(OrderInfoDo::getSts, StsEnum.ACTIVE.getValue()).one();

}

public Page<OrderInfoDo> queryListPage(OrderListQueryReq req){

LambdaQueryChainWrapper<OrderInfoDo> queryCdt = this.lambdaQuery().eq(OrderInfoDo::getSts, StsEnum.ACTIVE.getValue());

Page<OrderInfoDo> page = Page.of(req.getPageNum(), req.getPageSize());

List<Integer> payOrderStsLists = PayOrderStsEnum.getListByPreCode(req.getType());

queryCdt.in(req.getType() != null && req.getType() != 1

&& !CollectionUtils.isEmpty(payOrderStsLists),

OrderInfoDo::getPayOrderStatus, payOrderStsLists);

queryCdt.eq(StrUtil.isNotBlank(req.getUserUuid()),

OrderInfoDo::getUserUuid, req.getUserUuid());

queryCdt.eq(StrUtil.isNotBlank(req.getProviderCode()),

OrderInfoDo::getProviderCode, req.getProviderCode());

queryCdt.eq(StrUtil.isNotBlank(req.getDeviceUuid()),

OrderInfoDo::getDeviceUuid, req.getDeviceUuid());

queryCdt.in(!CollectionUtils.isEmpty(req.getStoreUuids()),

OrderInfoDo::getStoreUuid, req.getStoreUuids());

queryCdt.eq(StrUtil.isNotBlank(req.getOrderCode()),

OrderInfoDo::getOrderCode, req.getOrderCode());

queryCdt.ge(Objects.nonNull(req.getBeginTime()), BaseModel::getCreatedTime, req.getBeginTime());

queryCdt.le(Objects.nonNull(req.getEndTime()), BaseModel::getCreatedTime, req.getEndTime());

queryCdt.ne(OrderInfoDo::getStatus, OrderStatusEnum.CANCEL.getCode());

queryCdt.orderByDesc(OrderInfoDo::getCreatedTime);

return queryCdt.page(page);

}

public OrderFlowDo saveRefund(OrderTypeEnum orderTypeEnum, RefundContext refundContext, OrderInfoDo orderInfoDo) {

Integer refundMoneyPool = refundContext.getReq().getRefundTotalPrice();

Map<String, OrderRefundItemReq> refundItemMap = Optional.ofNullable(refundContext.getReq().getRefunds()).

map(s -> s.stream().collect(Collectors.toMap(OrderRefundItemReq::getGoodsUuid, Function.identity()))).orElse(new HashMap<>());

// 生成退款单和明细

OrderFlowDo orderFlowDo = OrderServiceHelper.buildInitOrderFlowDo(orderInfoDo, orderTypeEnum,

refundMoneyPool, refundMoneyPool, OrderFlowStatusEnum.TO_REFUND, 0, 0);

// 商品列表不为空并且是修正的退款需要存储修正详情

List<OrderFlowDetailDo> orderFlowDetailDos = new ArrayList<>();

if(OrderTypeEnum.FIX_ORDER_REFUND.getCode().equals(orderFlowDo.getOrderType())){

OrderAmendmentUtil.getConfigExt(refundContext.getOldDetails(), refundContext.getNewDetails(), orderFlowDo, orderFlowDetailDos);

log.info(" refund money : {}", JsonUtil.toJson(orderFlowDetailDos));

}else {

Map<String, OrderDetailDo> oldMap = refundContext.getOldDetails().stream().

collect(Collectors.toMap(OrderDetailDo::getGoodsUuid, Function.identity()));

refundItemMap.forEach((key, value) -> {

OrderDetailDo orderDetailDo = oldMap.get(key);

OrderFlowDetailDo orderFlowDetailDo = OrderServiceHelper.buildinitOrderFlowDetailDo(-value.getRefundMoney(),

orderDetailDo.getBasePrice(), orderFlowDo, 0, value.getGoodsUuid(), orderDetailDo.getTemplateUuid(), 0);

log.info("refund only refund money : {}", JsonUtil.toJson(orderFlowDetailDo));

orderFlowDetailDos.add(orderFlowDetailDo);

});

}

// 数据存储层

orderFlowRepository.save(orderFlowDo);

if(!CollectionUtils.isEmpty(orderFlowDetailDos)) {

orderFlowDetailRepository.saveBatch(orderFlowDetailDos);

}

if(!OrderTypeEnum.FIX_ORDER_REFUND.getCode().equals(orderFlowDo.getOrderType())) {

this.updateOrderStatus(orderInfoDo, OrderStatusEnum.TO_REFUND, PayOrderStsEnum.TO_REFUND, OrderStatusChangeEvent.REFUND);

}else {

this.updateOrderStatus(orderInfoDo, OrderStatusEnum.TO_MANUAL_REFUND, PayOrderStsEnum.TO_REFUND, OrderStatusChangeEvent.FIX);

}

return orderFlowDo;

}

public void updateOrderInfoAndSaveDetail(PayOrderContext payOrderContext, OrderCalFeeDTO orderCalFeeDTO, OrderInfoDo orderInfoDo) {

Integer oldStatus = orderInfoDo.getStatus();

orderInfoDo.setDealtBy(OrderDealtByEnum.getByCode(payOrderContext.getRequest().getIdentifySource()).getCode());

orderInfoDo.setStatus(OrderStatusEnum.IDENTIFIED.getCode());

orderInfoDo.setPayOrderStatus(PayOrderStsEnum.DOING.getCode());

orderInfoDo.setTotalMoney(orderCalFeeDTO.getTotalMoney());

orderInfoDo.setActualMoney(orderCalFeeDTO.getActualMoney());

orderInfoDo.setCouponMoney(orderCalFeeDTO.getCouponMoney());

orderInfoDo.setActivityMoney(orderCalFeeDTO.getActivityMoney());

orderInfoDo.initUpdate();

// 更新订单额外信息

OrderExtInfoDO orderExtInfoDO = new OrderExtInfoDO();

orderExtInfoDO.setId(orderInfoDo.getOrderCode());

orderExtInfoDO.setAlgorithmResultReturnTime(LocalDateTime.now());

orderExtInfoDO.setCreditPayRequestTime(LocalDateTime.now());

orderExtInfoDO.setRequestId(payOrderContext.getRequest().getRequestId());

orderExtInfoDO.setLastUpdatedTime(LocalDateTime.now());

// OrderFlowDo

OrderFlowDo orderFlowDo = OrderServiceHelper.getOrderFlowDoBYOrderInfoAndCal(orderInfoDo, orderCalFeeDTO, OrderTypeEnum.BUY);

// 订单明细

Map<String, OrderGoodsPriceItemBean> priceDetailMap = MoreObjects.firstNonNull(orderCalFeeDTO.getPriceDetail(), new HashMap<>());

List<OrderGoodsPriceItemBean> priceItems = new ArrayList<>(priceDetailMap.values());

List<OrderDetailDo> orderDetailDos = new ArrayList<>();

List<OrderFlowDetailDo> orderFlowDetailDos = new ArrayList<>();

for (OrderGoodsPriceItemBean priceItem : priceItems) {

OrderDetailDo detailDo = OrderServiceHelper.buildOrderDetailDo(orderInfoDo, priceItem,

payOrderContext.getDeviceRpcVo().getTemplateUuid(), priceItem.getGoodsName());

OrderFlowDetailDo orderFlowDetailDo = OrderServiceHelper.buildOrderFlowDetailDo(orderInfoDo,

priceItem, payOrderContext.getDeviceRpcVo().getTemplateUuid(), orderFlowDo);

orderDetailDos.add(detailDo);

orderFlowDetailDos.add(orderFlowDetailDo);

}

this.updateById(orderInfoDo);

orderExtInfoDoRepository.updateById(orderExtInfoDO);

orderDetailRepository.saveBatch(orderDetailDos);

orderFlowRepository.save(orderFlowDo);

orderFlowDetailRepository.saveBatch(orderFlowDetailDos);

// 插入状态变更流水

OrderStatusChangeFLowDo orderStatusChangeFLowDo = new OrderStatusChangeFLowDo();

orderStatusChangeFLowDo.setOrderCode(orderInfoDo.getOrderCode());

orderStatusChangeFLowDo.setOrderUuid(orderInfoDo.getUuid());

orderStatusChangeFLowDo.setPreStatus(String.valueOf(oldStatus));

orderStatusChangeFLowDo.setAfterStatus(String.valueOf(orderInfoDo.getStatus()));

orderStatusChangeFLowDo.setChangeReason(OrderStatusChangeEvent.FINISH_IDENTIFY.name());

orderStatusChangeFLowDo.setChangeAction(OrderStatusChangeEvent.FINISH_IDENTIFY.name());

orderStatusChangeFLowDo.initCreate();

orderStatusChangeFLowRepository.save(orderStatusChangeFLowDo);

payOrderContext.setOrderDetailExtDtoList(OrderServiceHelper.buildOrderExt(orderDetailDos));

payOrderContext.setOrderFlowDo(orderFlowDo);

log.info("算费和扣减库存结束保存后保存订单结束,orderCode: {}", orderInfoDo.getOrderCode());

}

}

声明:以上文章均为用户自行发布,仅供打字交流使用,不代表本站观点,本站不承担任何法律责任,特此声明!如果有侵犯到您的权利,请及时联系我们删除。