xin
2025-08-27 4efde34fdc23c22456742a08d3b18b8f5697ba3b
oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderOperationLogServiceImpl.java
@@ -1,6 +1,10 @@
package com.oying.modules.sh.service.impl;
import com.alibaba.fastjson2.JSON;
import com.oying.exception.BadRequestException;
import com.oying.modules.message.common.MesTypeEnum;
import com.oying.modules.message.common.MsgStatusEnum;
import com.oying.modules.message.service.MesMsgRecordService;
import com.oying.modules.sh.domain.OrderOperationLog;
import com.oying.modules.sh.domain.vo.OrderResponse;
import com.oying.modules.sh.mapper.OrderMapper;
@@ -34,6 +38,7 @@
    private final OrderOperationLogMapper orderOperationLogMapper;
    private final OrderMapper orderMapper;
    private final MesMsgRecordService mesMsgRecordService;
    @Override
    public PageResult<OrderOperationLog> queryAll(OrderOperationLogQueryCriteria criteria, Page<Object> page) {
@@ -46,45 +51,140 @@
    }
    @Override
    public List<OrderOperationLog> getByOrderNum(String orderNum) {
        return orderOperationLogMapper.getByOrderNum(orderNum);
    public List<OrderOperationLog> getByOrderNum(String orderNum, String type) {
        return orderOperationLogMapper.getByOrderNum(orderNum, type);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void create(OrderResponse response, OrderStatusEnum statusEnum) {
    public synchronized void create(OrderResponse response, OrderStatusEnum statusEnum, String cardName) {
        String userType = ConstantsKey.BUYER;
        String username = null;
        Timestamp time = new Timestamp(System.currentTimeMillis());
        MsgStatusEnum msgStatusEnum = null;
        switch (statusEnum) {
            case ZERO:
            case ONE:
            case EIGHT:
            case NINE:
            case TEN:
                userType = ConstantsKey.BUYER;
                break;
            case TWO:
            case FOUR:
                userType = ConstantsKey.MERCHANT;
                username = response.getOrder().getUsername();
                OrderOperationLog log1 = new OrderOperationLog();
                log1.setOrderNum(response.getOrder().getOrderNum());
                log1.setUsername(username);
                log1.setUserType(userType);
                log1.setOperation(OrderStatusEnum.ONE.getKey());
                log1.setOperationType(OrderStatusEnum.ONE.getCode());
                log1.setOperationDescribe(OrderStatusEnum.ONE.getValue());
                log1.setRemark(username + ":" + time + ">" + OrderStatusEnum.ONE.getValue() + ":" + response.getOrder().getOrderNum());
                Map<String, Object> map1 = new LinkedHashMap<>();
                response.getOrder().setOrderStatus(OrderStatusEnum.ONE.getKey());
                response.getOrder().setOrderStatusDescribe(OrderStatusEnum.ONE.getValue());
                map1.put("order", response.getOrder());
                map1.put("address", response.getAddress());
                log1.setSnapshotData(JSON.toJSONString(map1));
                log1.setOperationTime(time);
                orderOperationLogMapper.insert(log1);
                response.getOrder().setOrderStatus(OrderStatusEnum.TWO.getKey());
                response.getOrder().setOrderStatusDescribe(OrderStatusEnum.TWO.getValue());
                msgStatusEnum = MsgStatusEnum.MERCHANT_ACCEPTED;
                userType = ConstantsKey.BUYER;
                break;
            case THREE:
            case FIVE:
            case SIX:
            case SEVEN:
                msgStatusEnum = MsgStatusEnum.MERCHANT_PREPARED;
                userType = ConstantsKey.BUYER;
                break;
            case FOUR:
                orderMapper.updateRider(response.getOrder().getOrderNum(), SecurityUtils.getCurrentUserId(), SecurityUtils.getCurrentUsername(), cardName);
                msgStatusEnum = MsgStatusEnum.RIDER_PENDING_ACCEPTANCE;
                userType = ConstantsKey.RIDER;
                break;
            case FIVE:
                msgStatusEnum = MsgStatusEnum.RIDER_ARRIVED;
                userType = ConstantsKey.RIDER;
                break;
            case SIX:
                msgStatusEnum = MsgStatusEnum.RIDER_PICKED_UP;
                userType = ConstantsKey.RIDER;
                break;
            case SEVEN:
                userType = ConstantsKey.RIDER;
                username = SecurityUtils.getCurrentUsername();
                OrderOperationLog log2 = new OrderOperationLog();
                log2.setOrderNum(response.getOrder().getOrderNum());
                log2.setUsername(username);
                log2.setUserType(userType);
                log2.setOperation(statusEnum.getKey());
                log2.setOperationType(statusEnum.getCode());
                log2.setOperationDescribe(statusEnum.getValue());
                log2.setRemark(username + ":" + time + ">" + statusEnum.getValue() + ":" + response.getOrder().getOrderNum());
                Map<String, Object> map2 = new LinkedHashMap<>();
                map2.put("order", response.getOrder());
                map2.put("address", response.getAddress());
                log2.setSnapshotData(JSON.toJSONString(map2));
                log2.setOperationTime(time);
                orderOperationLogMapper.insert(log2);
                orderMapper.updateOrderStatus(response.getOrder().getOrderNum(), statusEnum.getKey(), statusEnum.getValue());
                msgStatusEnum = MsgStatusEnum.BUYER_ORDER_DELIVERED;
                statusEnum = OrderStatusEnum.EIGHT;
                break;
            case EIGHT:
                msgStatusEnum = MsgStatusEnum.BUYER_ORDER_COMPLETED;
                userType = ConstantsKey.BUYER;
                break;
            case NINE:
                if (response.getOrder().getOrderStatus().equals(OrderStatusEnum.NINE.getKey())) {
                    throw new BadRequestException("订单已取消");
                }
                if (response.getOrder().getOrderStatus() > OrderStatusEnum.TWO.getKey()) {
                    throw new BadRequestException(OrderStatusEnum.getValue(response.getOrder().getOrderStatus()));
                }
                msgStatusEnum = MsgStatusEnum.RIDER_ORDER_CANCELLED;
                userType = ConstantsKey.BUYER;
                break;
            case ELEVEN:
                userType = ConstantsKey.MERCHANT;
                orderMapper.updateOrderStatus(response.getOrder().getOrderNum(), OrderStatusEnum.EIGHT.getKey(), OrderStatusEnum.EIGHT.getValue());
                break;
            case TWELVE:
                userType = ConstantsKey.BUYER;
                orderMapper.updateOrderStatus(response.getOrder().getOrderNum(), statusEnum.getKey(), statusEnum.getValue());
                break;
            case THIRTEEN:
                userType = ConstantsKey.MERCHANT;
                break;
            case FOURTEEN:
                userType = ConstantsKey.MERCHANT;
                orderMapper.updateOrderStatus(response.getOrder().getOrderNum(), statusEnum.getKey(), statusEnum.getValue());
                break;
            case FIFTEEN:
                userType = ConstantsKey.BUYER;
                orderMapper.updateOrderStatus(response.getOrder().getOrderNum(), OrderStatusEnum.EIGHT.getKey(), OrderStatusEnum.EIGHT.getValue());
                break;
            default:
                throw new BadRequestException("状态错误");
        }
        String username = SecurityUtils.getCurrentUsername();
        Timestamp time = new Timestamp(System.currentTimeMillis());
        if (username == null) {
            username = SecurityUtils.getCurrentUsername();
        }
        OrderOperationLog resources = new OrderOperationLog();
        resources.setOrderNum(response.getOrder().getOrderNum());
        resources.setUsername(username);
        resources.setUserType(userType);
        resources.setOperation(statusEnum.getKey());
        resources.setOperationType(statusEnum.getCode());
        resources.setOperationDescribe(statusEnum.getValue());
        resources.setRemark(username + ":" + time + ">" + statusEnum.getValue() + ":" + response.getOrder().getOrderNum());
        resources.setSnapshotData(JSON.toJSONString(response));
        Map<String, Object> map = new LinkedHashMap<>();
        map.put("order", response.getOrder());
        map.put("address", response.getAddress());
        resources.setSnapshotData(JSON.toJSONString(map));
        resources.setOperationTime(time);
        orderOperationLogMapper.insert(resources);
        if (msgStatusEnum != null){
            mesMsgRecordService.insertOrderMsg(response.getOrder(), msgStatusEnum, MesTypeEnum.ORDER);
        }
        orderMapper.updateOrderStatus(response.getOrder().getOrderNum(), statusEnum.getKey(), statusEnum.getValue());
    }