package com.oying.modules.sh.service.impl; import com.alibaba.fastjson2.JSON; import com.oying.exception.BadRequestException; import com.oying.modules.sh.domain.OrderOperationLog; import com.oying.modules.sh.domain.vo.OrderResponse; import com.oying.modules.sh.mapper.OrderMapper; import com.oying.utils.*; import com.oying.utils.enums.OrderStatusEnum; import lombok.RequiredArgsConstructor; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.oying.modules.sh.service.OrderOperationLogService; import com.oying.modules.sh.domain.dto.OrderOperationLogQueryCriteria; import com.oying.modules.sh.mapper.OrderOperationLogMapper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.sql.Timestamp; import java.util.List; import java.util.Map; import java.io.IOException; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.LinkedHashMap; /** * @author lixin * @description 服务实现 * @date 2025-06-11 **/ @Service @RequiredArgsConstructor public class OrderOperationLogServiceImpl extends ServiceImpl implements OrderOperationLogService { private final OrderOperationLogMapper orderOperationLogMapper; private final OrderMapper orderMapper; @Override public PageResult queryAll(OrderOperationLogQueryCriteria criteria, Page page) { return PageUtil.toPage(orderOperationLogMapper.findAll(criteria, page)); } @Override public List queryAll(OrderOperationLogQueryCriteria criteria) { return orderOperationLogMapper.findAll(criteria); } @Override public List getByOrderNum(String orderNum) { return orderOperationLogMapper.getByOrderNum(orderNum); } @Override @Transactional(rollbackFor = Exception.class) public synchronized void create(OrderResponse response, OrderStatusEnum statusEnum, String cardName) { String userType = ConstantsKey.BUYER; String username = null; Timestamp time = new Timestamp(System.currentTimeMillis()); switch (statusEnum) { 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())); } case ZERO: case ONE: case EIGHT: userType = ConstantsKey.BUYER; break; case TWO: 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.setOperationDescribe(OrderStatusEnum.ONE.getValue()); log1.setRemark(username + ":" + time + ">" + OrderStatusEnum.ONE.getValue() + ":" + response.getOrder().getOrderNum()); Map 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()); case FOUR: userType = ConstantsKey.MERCHANT; break; case THREE: orderMapper.updateRider(response.getOrder().getOrderNum(), SecurityUtils.getCurrentUserId(), SecurityUtils.getCurrentUsername(), cardName); case FIVE: case SIX: 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.setOperationDescribe(statusEnum.getValue()); log2.setRemark(username + ":" + time + ">" + statusEnum.getValue() + ":" + response.getOrder().getOrderNum()); Map 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()); statusEnum = OrderStatusEnum.EIGHT; break; default: } 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.setOperationDescribe(statusEnum.getValue()); resources.setRemark(username + ":" + time + ">" + statusEnum.getValue() + ":" + response.getOrder().getOrderNum()); Map map = new LinkedHashMap<>(); map.put("order", response.getOrder()); map.put("address", response.getAddress()); resources.setSnapshotData(JSON.toJSONString(map)); resources.setOperationTime(time); orderOperationLogMapper.insert(resources); orderMapper.updateOrderStatus(response.getOrder().getOrderNum(), statusEnum.getKey(), statusEnum.getValue()); } @Override @Transactional(rollbackFor = Exception.class) public void update(OrderOperationLog resources) { OrderOperationLog orderOperationLog = getById(resources.getLogId()); orderOperationLog.copy(resources); orderOperationLogMapper.updateById(orderOperationLog); } @Override @Transactional(rollbackFor = Exception.class) public void deleteAll(List ids) { orderOperationLogMapper.deleteBatchIds(ids); } @Override public void download(List all, HttpServletResponse response) throws IOException { List> list = new ArrayList<>(); for (OrderOperationLog orderOperationLog : all) { Map map = new LinkedHashMap<>(); map.put("用户账号", orderOperationLog.getUsername()); map.put("用户类型", orderOperationLog.getUserType()); map.put("用户操作", orderOperationLog.getOperation()); map.put("备注", orderOperationLog.getRemark()); map.put("操作时的订单快照", orderOperationLog.getSnapshotData()); map.put("操作时间", orderOperationLog.getOperationTime()); map.put("订单号", orderOperationLog.getOrderNum()); list.add(map); } FileUtil.downloadExcel(list, response); } }