refactor(order): 合并 OrderService 和 OrderSwapBatteryService 接口
- 将 OrderSwapBatteryService 接口中的方法合并到 OrderService 接口 - 更新 OrderServiceImpl 实现类,添加新合并的方法实现 - 修改相关的控制器和 Feign 客户端接口,以适应新的 OrderService 接口 - 删除了未使用的 OrderSwapBatteryService 接口文件
This commit is contained in:
parent
805be30f64
commit
ac525609f6
@ -1,8 +1,10 @@
|
||||
package com.evotech.hd.cloud.controller.order;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.evotech.hd.cloud.entity.order.Order;
|
||||
import com.evotech.hd.cloud.entity.vo.NativePayVO;
|
||||
import com.evotech.hd.cloud.service.OrderService;
|
||||
import com.evotech.hd.cloud.service.OrderSwapBatteryService;
|
||||
import com.evotech.hd.common.core.Dto.Result;
|
||||
import com.evotech.hd.common.core.Dto.order.OrderListVo;
|
||||
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep;
|
||||
@ -14,6 +16,7 @@ import io.swagger.v3.oas.annotations.Hidden;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import org.springdoc.core.annotations.ParameterObject;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
@ -25,10 +28,12 @@ import java.util.List;
|
||||
@RestController
|
||||
@RequestMapping("/order/swap")
|
||||
public class OrderSwapBatteryController {
|
||||
|
||||
|
||||
@Resource
|
||||
private OrderService orderService;
|
||||
|
||||
private OrderSwapBatteryService orderSwapBatteryService;
|
||||
|
||||
|
||||
@Operation(summary = "查询")
|
||||
@GetMapping("/list")
|
||||
@ -36,28 +41,28 @@ public class OrderSwapBatteryController {
|
||||
public Result<Page<OrderListVo>> list(@ParameterObject PageListSwapOrderRequest plsor) {
|
||||
return orderService.pageList(plsor);
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "查询公司订单")
|
||||
@GetMapping("/listcompanyorder")
|
||||
@ApiOperationSupport(order = 8)
|
||||
@Hidden
|
||||
@Deprecated
|
||||
public Result<List<OrderSwapBattery>> listByCompany(@ParameterObject PageListSwapOrderRequest plsor) {
|
||||
return orderSwapBatteryService.listByCompany(plsor);
|
||||
public Result<List<Order>> listByCompany(@ParameterObject PageListSwapOrderRequest plsor) {
|
||||
return orderService.listByCompany(plsor);
|
||||
}
|
||||
|
||||
@Operation(summary = "查询换电步骤")
|
||||
@GetMapping("/step/list")
|
||||
@ApiOperationSupport(order = 9)
|
||||
public Result<List<OrderSwapBatteryStep>> listStep(@NotBlank String orderNo) {
|
||||
return orderSwapBatteryService.listStep(orderNo);
|
||||
return orderService.listStep(orderNo);
|
||||
}
|
||||
|
||||
@Operation(summary = "费用计算")
|
||||
@PostMapping({"/cost"})
|
||||
@ApiOperationSupport(order = 9)
|
||||
public Result<String> calculateCost(@NotBlank @RequestParam OrderSwapBattery osb) {
|
||||
return orderSwapBatteryService.calculateCost(osb);
|
||||
public Result<String> calculateCost(@NotBlank @RequestParam Order osb) {
|
||||
return orderService.calculateCost(osb);
|
||||
}
|
||||
|
||||
|
||||
@ -65,7 +70,7 @@ public class OrderSwapBatteryController {
|
||||
@PostMapping({"/wallet/pay"})
|
||||
@ApiOperationSupport(order = 11)
|
||||
public Result<String> walletPay(@RequestParam String orderNo, String wuid, String uname) {
|
||||
return orderSwapBatteryService.walletPay(orderNo, wuid, uname);
|
||||
return orderService.walletPay(orderNo, wuid, uname);
|
||||
}
|
||||
|
||||
|
||||
@ -82,21 +87,21 @@ public class OrderSwapBatteryController {
|
||||
@PostMapping({"/wechat/nativepay"})
|
||||
@ApiOperationSupport(order = 13)
|
||||
public Result<String> companyNativePay(@RequestBody NativePayVO prePay) {
|
||||
return orderSwapBatteryService.companyNativePay(prePay);
|
||||
return orderService.companyNativePay(prePay);
|
||||
}
|
||||
|
||||
@Operation(summary = "扫码支付订单查询状态")
|
||||
@GetMapping("/paystatus/query")
|
||||
@ApiOperationSupport(order = 14)
|
||||
public Result<String> orderQuery(String outTradeNo) {
|
||||
return orderSwapBatteryService.orderQuery(outTradeNo);
|
||||
return orderService.orderQuery(outTradeNo);
|
||||
}
|
||||
|
||||
@Operation(summary = "站端取消订单")
|
||||
@PostMapping("/pre/cancelOrder")
|
||||
@ApiOperationSupport(order = 15)
|
||||
public Result<Integer> cancelOrder(@NotNull String orderNo) {
|
||||
return orderSwapBatteryService.cancelOrder(orderNo, null);
|
||||
return orderService.cancelOrder(orderNo, null);
|
||||
}
|
||||
@Operation(summary = "开始换电")
|
||||
@PostMapping("/startSwap")
|
||||
@ -108,14 +113,14 @@ public class OrderSwapBatteryController {
|
||||
@PostMapping("/getStartSwap")
|
||||
@ApiOperationSupport(order = 17)
|
||||
public Result<BatterySwapResponse> getStartSwap(@RequestParam String wuid, String orderId) {
|
||||
return orderSwapBatteryService.getStartSwap(wuid,orderId);
|
||||
return orderService.getStartSwap(wuid,orderId);
|
||||
}
|
||||
|
||||
@Operation(summary = "未完成订单查询:plateNum")
|
||||
@GetMapping("/checkList")
|
||||
@ApiOperationSupport(order = 18)
|
||||
public Result<Integer> checkList(@ParameterObject PageListSwapOrderRequest plsor) {
|
||||
return orderSwapBatteryService.checkList(plsor);
|
||||
return orderService.checkList(plsor);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -3,10 +3,17 @@ package com.evotech.hd.cloud.service;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.evotech.hd.cloud.entity.order.Order;
|
||||
import com.evotech.hd.cloud.entity.vo.NativePayVO;
|
||||
import com.evotech.hd.common.core.Dto.Result;
|
||||
import com.evotech.hd.common.core.Dto.order.OrderListVo;
|
||||
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre;
|
||||
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep;
|
||||
import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse;
|
||||
import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 订单接口
|
||||
@ -42,4 +49,26 @@ public interface OrderService extends IService<Order> {
|
||||
* 开始换电
|
||||
*/
|
||||
public Result<Boolean> startSwap(String wuid, String orderId);
|
||||
/***
|
||||
* 查询公司订单
|
||||
*/
|
||||
Result<List<Order>> listByCompany(PageListSwapOrderRequest plsor);
|
||||
/***
|
||||
* 查询换电步骤
|
||||
*/
|
||||
Result<List<OrderSwapBatteryStep>> listStep(@NotBlank String orderNo);
|
||||
/*
|
||||
个人账户余额支付
|
||||
*/
|
||||
Result<String> walletPay(String orderNo, String wuid, String uname);
|
||||
|
||||
Result<String> companyNativePay(NativePayVO prePay);
|
||||
|
||||
Result<String> orderQuery(String outTradeNo);
|
||||
|
||||
Result<Integer> cancelOrder(@NotNull String orderNo,Integer status);
|
||||
|
||||
Result<Integer> checkList(PageListSwapOrderRequest plsor);
|
||||
|
||||
Result<BatterySwapResponse> getStartSwap(String wuid, String orderId);
|
||||
}
|
||||
|
||||
@ -28,7 +28,7 @@ public interface OrderSwapBatteryService {
|
||||
|
||||
// public Result<List<OrderSwapBattery>> list(PageListSwapOrderRequest plsor);
|
||||
|
||||
// public Result<List<OrderSwapBattery>> listByCompany(PageListSwapOrderRequest plsor);
|
||||
public Result<List<OrderSwapBattery>> listByCompany(PageListSwapOrderRequest plsor);
|
||||
|
||||
public Result<List<OrderSwapBatteryStep>> listStep(String orderNo);
|
||||
|
||||
|
||||
@ -2,39 +2,52 @@ package com.evotech.hd.cloud.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONConfig;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.evotech.hd.cloud.dao.OrderDao;
|
||||
import com.evotech.hd.cloud.dao.OrderDetailDao;
|
||||
import com.evotech.hd.cloud.dao.*;
|
||||
import com.evotech.hd.cloud.entity.order.Order;
|
||||
import com.evotech.hd.cloud.entity.order.OrderDetail;
|
||||
import com.evotech.hd.cloud.entity.vo.NativePayVO;
|
||||
import com.evotech.hd.cloud.mqtt.enums.MqttMessageTypeEnum;
|
||||
import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum;
|
||||
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
|
||||
import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
|
||||
import com.evotech.hd.cloud.mqtt.message.dto.newer.req.battery.BatterySwapReq;
|
||||
import com.evotech.hd.cloud.service.OrderService;
|
||||
import com.evotech.hd.cloud.service.TaxPointService;
|
||||
import com.evotech.hd.cloud.service.TradeService;
|
||||
import com.evotech.hd.cloud.service.WalletAccountService;
|
||||
import com.evotech.hd.cloud.service.rpc.WechatService;
|
||||
import com.evotech.hd.cloud.utils.CommonUtil;
|
||||
import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent;
|
||||
import com.evotech.hd.common.core.Dto.Result;
|
||||
import com.evotech.hd.common.core.Dto.order.OrderListVo;
|
||||
import com.evotech.hd.common.core.constant.HDConstant;
|
||||
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre;
|
||||
import com.evotech.hd.common.core.entity.cloud.*;
|
||||
import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse;
|
||||
import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest;
|
||||
import com.evotech.hd.common.core.enums.CodeMsg;
|
||||
import com.evotech.hd.common.core.enums.OrderStatusEnums;
|
||||
import com.evotech.hd.common.core.enums.PayTypeEnums;
|
||||
import com.evotech.hd.common.core.enums.TradeTypeEnums;
|
||||
import com.evotech.hd.common.web.util.EnumUtils;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.integration.channel.DirectChannel;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.Date;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
@ -50,154 +63,388 @@ import java.util.function.Function;
|
||||
@Service
|
||||
@Slf4j
|
||||
public class OrderServiceImpl extends BaseServiceImpl<OrderDao, Order, OrderListVo> implements OrderService {
|
||||
@Resource
|
||||
private OrderDetailDao orderDetailDao;
|
||||
@Resource
|
||||
private SwapOrderBasicFeeComponent orderBasicFeeComponent;
|
||||
|
||||
@Resource
|
||||
private OrderDetailDao orderDetailDao;
|
||||
@Resource
|
||||
private SwapOrderBasicFeeComponent orderBasicFeeComponent;
|
||||
@Autowired
|
||||
private DirectChannel errorChannel;
|
||||
@Resource
|
||||
private VehicleInfoDao vehicleInfoDao;
|
||||
@Resource
|
||||
private OrderDao orderDao;
|
||||
@Resource
|
||||
private OrderSwapBatteryStepDao orderSwapBatteryStepDao;
|
||||
@Resource
|
||||
private WalletAccountDao walletAccountDao;
|
||||
@Resource
|
||||
private TradeService tradeService;
|
||||
@Resource
|
||||
private WalletAccountService walletAccountService;
|
||||
@Resource
|
||||
TaxPointService taxPointService;
|
||||
@Resource
|
||||
private WechatService wechatService;
|
||||
@Resource
|
||||
private OrderSwapBatteryPreDao orderSwapBatteryPreDao;
|
||||
|
||||
@Override
|
||||
public Result<Page<OrderListVo>> pageList(PageListSwapOrderRequest plsor) {
|
||||
|
||||
return new Result<Page<OrderListVo>>().success(selectPage(new Page<Order>(plsor.getPageNo(), plsor.getPageSize()), new LambdaQueryWrapper<Order>()
|
||||
.eq(StringUtils.isNotEmpty(plsor.getOrderNo()), Order::getOrderNo, plsor.getOrderNo())
|
||||
.eq(StringUtils.isNotEmpty(plsor.getPlateNum()), Order::getPlateNum, plsor.getPlateNum())
|
||||
.ge(ObjectUtils.isNotEmpty(plsor.getOrderTimeBegin()), Order::getOrderTime, plsor.getOrderTimeBegin())
|
||||
.le(ObjectUtils.isNotEmpty(plsor.getOrderTimeEnd()), Order::getOrderTime, plsor.getOrderTimeEnd())
|
||||
.eq(StringUtils.isNotEmpty(plsor.getStationCode()), Order::getStationCode, plsor.getStationCode())
|
||||
.eq(StringUtils.isNotEmpty(plsor.getTradeNo()), Order::getNotifyOrderNo, plsor.getTradeNo())
|
||||
.ne(Order::getDelFlag, 1)
|
||||
.orderByDesc(Order::getOrderTime), new Function<Order, OrderListVo>() {
|
||||
@Override
|
||||
public OrderListVo apply(Order order) {
|
||||
OrderListVo vo = new OrderListVo();
|
||||
BeanUtils.copyProperties(order, vo);
|
||||
return vo;
|
||||
}
|
||||
}));
|
||||
return new Result<Page<OrderListVo>>().success(selectPage(new Page<Order>(plsor.getPageNo(), plsor.getPageSize()), new LambdaQueryWrapper<Order>()
|
||||
.eq(StringUtils.isNotEmpty(plsor.getOrderNo()), Order::getOrderNo, plsor.getOrderNo())
|
||||
.eq(StringUtils.isNotEmpty(plsor.getPlateNum()), Order::getPlateNum, plsor.getPlateNum())
|
||||
.ge(ObjectUtils.isNotEmpty(plsor.getOrderTimeBegin()), Order::getOrderTime, plsor.getOrderTimeBegin())
|
||||
.le(ObjectUtils.isNotEmpty(plsor.getOrderTimeEnd()), Order::getOrderTime, plsor.getOrderTimeEnd())
|
||||
.eq(StringUtils.isNotEmpty(plsor.getStationCode()), Order::getStationCode, plsor.getStationCode())
|
||||
.eq(StringUtils.isNotEmpty(plsor.getTradeNo()), Order::getNotifyOrderNo, plsor.getTradeNo())
|
||||
.ne(Order::getDelFlag, 1)
|
||||
.orderByDesc(Order::getOrderTime), new Function<Order, OrderListVo>() {
|
||||
@Override
|
||||
public OrderListVo apply(Order order) {
|
||||
OrderListVo vo = new OrderListVo();
|
||||
BeanUtils.copyProperties(order, vo);
|
||||
return vo;
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<String> calculateCost(Order order) {
|
||||
//查询详情数据, 检查详情相关数据是否存在
|
||||
OrderDetail orderDetail = orderDetailDao.selectOne(new LambdaQueryWrapper<OrderDetail>().eq(OrderDetail::getOrderId, order.getPkId()), false);
|
||||
if(ObjectUtils.isEmpty(orderDetail)){
|
||||
return new Result<String>().error("当前订单没有订单详情,无法处理");
|
||||
}
|
||||
// 2. 检查数据
|
||||
if (orderDetail.getServiceFee() == null || orderDetail.getUnitPrice() == null) {
|
||||
orderDetail = orderBasicFeeComponent.orderBasicFee(order, orderDetail);
|
||||
if (orderDetail.getServiceFee() == null || orderDetail.getUnitPrice() == null) {
|
||||
return new Result<String>().error("订单费用标准异常!");
|
||||
}
|
||||
}
|
||||
// 2. 检查消耗量
|
||||
if (orderDetail.getElectricityQuantity() == null) {
|
||||
orderDetail = orderBasicFeeComponent.calculateElectricityQuantity(order, orderDetail);
|
||||
if (orderDetail.getElectricityQuantity() == null) {
|
||||
return new Result<String>().error("订单消费统计信息异常!");
|
||||
}
|
||||
}
|
||||
// 3. 选择费用计算方式 计算费用, 这里计算出来直接就是分
|
||||
BigDecimal orderFee = new BigDecimal(orderDetail.getUnitPrice()).multiply(new BigDecimal(orderDetail.getElectricityQuantity())).setScale(0, RoundingMode.HALF_UP);
|
||||
//订单价格
|
||||
orderDetail.setOrderFee(orderFee.intValue());
|
||||
// 4. 跟新订单
|
||||
order.setOrderAmount(orderFee.add(new BigDecimal(orderDetail.getServiceFee())).intValue());
|
||||
order.setStatus(OrderStatusEnums.TOPAY.getCode());
|
||||
getBaseMapper().updateById(order);
|
||||
//更新订单详情
|
||||
orderDetailDao.updateById(orderDetail);
|
||||
return new Result<String>().success("");
|
||||
}
|
||||
@Override
|
||||
public Result<String> calculateCost(Order order) {
|
||||
//查询详情数据, 检查详情相关数据是否存在
|
||||
OrderDetail orderDetail = orderDetailDao.selectOne(new LambdaQueryWrapper<OrderDetail>().eq(OrderDetail::getOrderId, order.getPkId()), false);
|
||||
if (ObjectUtils.isEmpty(orderDetail)) {
|
||||
return new Result<String>().error("当前订单没有订单详情,无法处理");
|
||||
}
|
||||
// 2. 检查数据
|
||||
if (orderDetail.getServiceFee() == null || orderDetail.getUnitPrice() == null) {
|
||||
orderDetail = orderBasicFeeComponent.orderBasicFee(order, orderDetail);
|
||||
if (orderDetail.getServiceFee() == null || orderDetail.getUnitPrice() == null) {
|
||||
return new Result<String>().error("订单费用标准异常!");
|
||||
}
|
||||
}
|
||||
// 2. 检查消耗量
|
||||
if (orderDetail.getElectricityQuantity() == null) {
|
||||
orderDetail = orderBasicFeeComponent.calculateElectricityQuantity(order, orderDetail);
|
||||
if (orderDetail.getElectricityQuantity() == null) {
|
||||
return new Result<String>().error("订单消费统计信息异常!");
|
||||
}
|
||||
}
|
||||
// 3. 选择费用计算方式 计算费用, 这里计算出来直接就是分
|
||||
BigDecimal orderFee = new BigDecimal(orderDetail.getUnitPrice()).multiply(new BigDecimal(orderDetail.getElectricityQuantity())).setScale(0, RoundingMode.HALF_UP);
|
||||
//订单价格
|
||||
orderDetail.setOrderFee(orderFee.intValue());
|
||||
// 4. 跟新订单
|
||||
order.setOrderAmount(orderFee.add(new BigDecimal(orderDetail.getServiceFee())).intValue());
|
||||
order.setStatus(OrderStatusEnums.TOPAY.getCode());
|
||||
getBaseMapper().updateById(order);
|
||||
//更新订单详情
|
||||
orderDetailDao.updateById(orderDetail);
|
||||
return new Result<String>().success("");
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Result<Boolean> updateStatus(String orderNo, Integer status) {
|
||||
//根据订单编码查询此订单
|
||||
Order order = getBaseMapper().selectOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, orderNo));
|
||||
if (order == null) {
|
||||
return new Result<Boolean>().error("订单不存在", false);
|
||||
}
|
||||
// 2.如果当前是关闭状态, 检查当前订单是否只是创建状态, 如果不是创建状态, 返回无法关闭
|
||||
if (OrderStatusEnums.CANCLE.getCode().equals(status) && !OrderStatusEnums.CREATE.getCode().equals(order.getStatus())) {
|
||||
return new Result<Boolean>().error("当前状态不允许关闭,订单状态:" + EnumUtils.getEnumPropertyValue(OrderStatusEnums.class, order.getStatus()), false);
|
||||
}
|
||||
order.setStatus(status);
|
||||
order.setUpdateTime(new Date());
|
||||
// 3.更新订单状态
|
||||
if (getBaseMapper().updateById(order) > 0) {
|
||||
return new Result<Boolean>().success(true);
|
||||
} else {
|
||||
return new Result<Boolean>().error((OrderStatusEnums.CANCLE.getCode().equals(status) ? "取消订单失败" : "订单状态调整失败"), false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<Boolean> updateStatus(String orderNo, Integer status) {
|
||||
//根据订单编码查询此订单
|
||||
Order order = getBaseMapper().selectOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, orderNo));
|
||||
if (order == null) {
|
||||
return new Result<Boolean>().error("订单不存在", false);
|
||||
}
|
||||
// 2.如果当前是关闭状态, 检查当前订单是否只是创建状态, 如果不是创建状态, 返回无法关闭
|
||||
if (OrderStatusEnums.CANCLE.getCode().equals(status) && !OrderStatusEnums.CREATE.getCode().equals(order.getStatus())) {
|
||||
return new Result<Boolean>().error("当前状态不允许关闭,订单状态:" + EnumUtils.getEnumPropertyValue(OrderStatusEnums.class, order.getStatus()), false);
|
||||
}
|
||||
order.setStatus(status);
|
||||
order.setUpdateTime(new Date());
|
||||
// 3.更新订单状态
|
||||
if (getBaseMapper().updateById(order) > 0){
|
||||
return new Result<Boolean>().success(true);
|
||||
}else{
|
||||
return new Result<Boolean>().error((OrderStatusEnums.CANCLE.getCode().equals(status) ? "取消订单失败" : "订单状态调整失败"), false);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<Order> addOrderByPre(OrderSwapBatteryPre orderSwapBatteryPre) {
|
||||
// 生成订单
|
||||
Order order = new Order();
|
||||
order.setOrderNo(CommonUtil.swapBatteryOrderNo(orderSwapBatteryPre.getStationCode()));
|
||||
order.setOrderPreId(orderSwapBatteryPre.getPkId());
|
||||
@Override
|
||||
public Result<Order> addOrderByPre(OrderSwapBatteryPre orderSwapBatteryPre) {
|
||||
// 生成订单
|
||||
Order order = new Order();
|
||||
order.setOrderNo(CommonUtil.swapBatteryOrderNo(orderSwapBatteryPre.getStationCode()));
|
||||
order.setOrderPreId(orderSwapBatteryPre.getPkId());
|
||||
// order.setP(osbp.getPhone());
|
||||
order.setPreWechatId(orderSwapBatteryPre.getUcode());
|
||||
order.setPreName(orderSwapBatteryPre.getUname());
|
||||
order.setPlateNum(orderSwapBatteryPre.getPlateNum());
|
||||
order.setOrderTime(new Date());
|
||||
order.setOrderType(HDConstant.OrderConstant.ORDER_TYPE_SWAP);
|
||||
order.setStatus(OrderStatusEnums.CREATE.getCode());
|
||||
order.setStationCode(orderSwapBatteryPre.getStationCode());
|
||||
order.setStationName(orderSwapBatteryPre.getStationName());
|
||||
// TODO 查询换电站信息,拿到计费方式,计费信息在充电结束时, 计算
|
||||
order.setPreWechatId(orderSwapBatteryPre.getUcode());
|
||||
order.setPreName(orderSwapBatteryPre.getUname());
|
||||
order.setPlateNum(orderSwapBatteryPre.getPlateNum());
|
||||
order.setOrderTime(new Date());
|
||||
order.setOrderType(HDConstant.OrderConstant.ORDER_TYPE_SWAP);
|
||||
order.setStatus(OrderStatusEnums.CREATE.getCode());
|
||||
order.setStationCode(orderSwapBatteryPre.getStationCode());
|
||||
order.setStationName(orderSwapBatteryPre.getStationName());
|
||||
// TODO 查询换电站信息,拿到计费方式,计费信息在充电结束时, 计算
|
||||
// osb = orderBasicFeeComponent.orderBasicFee(osb);
|
||||
return (save(order) ? new Result<Order>().success(order) : new Result<Order>().error("订单生成异常",null));
|
||||
}
|
||||
return (save(order) ? new Result<Order>().success(order) : new Result<Order>().error("订单生成异常", null));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<Boolean> startSwap(String wuid, String orderId) {
|
||||
if (StringUtils.isBlank(wuid) || StringUtils.isBlank(orderId)) {
|
||||
log.warn("换电请求参数无效, wuid: {}, orderId: {}", wuid, orderId);
|
||||
return new Result<Boolean>().error("换电请求参数无效");
|
||||
}
|
||||
@Override
|
||||
public Result<Boolean> startSwap(String wuid, String orderId) {
|
||||
if (StringUtils.isBlank(wuid) || StringUtils.isBlank(orderId)) {
|
||||
log.warn("换电请求参数无效, wuid: {}, orderId: {}", wuid, orderId);
|
||||
return new Result<Boolean>().error("换电请求参数无效");
|
||||
}
|
||||
|
||||
// 获取用户订单
|
||||
Order order= getBaseMapper().selectById(orderId);
|
||||
if (ObjectUtils.isEmpty(order)) {
|
||||
log.warn("未找到符合条件的订单, 用户ID: {}, 订单id: {}", wuid, orderId);
|
||||
return new Result<Boolean>().error("未找到符合条件的订单");
|
||||
}
|
||||
// 获取用户订单
|
||||
Order order = getBaseMapper().selectById(orderId);
|
||||
if (ObjectUtils.isEmpty(order)) {
|
||||
log.warn("未找到符合条件的订单, 用户ID: {}, 订单id: {}", wuid, orderId);
|
||||
return new Result<Boolean>().error("未找到符合条件的订单");
|
||||
}
|
||||
|
||||
try {
|
||||
log.info("开始处理换电请求, 订单编号: {}, 用户ID: {}", order.getOrderNo(), wuid);
|
||||
// 构建换电请求消息
|
||||
BatterySwapReq batterySwapReq = new BatterySwapReq();
|
||||
batterySwapReq.setOrderNo(order.getOrderNo());
|
||||
batterySwapReq.setMsg("换电开始");
|
||||
try {
|
||||
log.info("开始处理换电请求, 订单编号: {}, 用户ID: {}", order.getOrderNo(), wuid);
|
||||
// 构建换电请求消息
|
||||
BatterySwapReq batterySwapReq = new BatterySwapReq();
|
||||
batterySwapReq.setOrderNo(order.getOrderNo());
|
||||
batterySwapReq.setMsg("换电开始");
|
||||
|
||||
// 设置消息主题和头部信息
|
||||
MessageTopic topic = new MessageTopic();
|
||||
topic.setDataDirection("M2S");
|
||||
topic.setMessageType(MqttMessageTypeEnum.REQUEST.getType());
|
||||
// 设置消息主题和头部信息
|
||||
MessageTopic topic = new MessageTopic();
|
||||
topic.setDataDirection("M2S");
|
||||
topic.setMessageType(MqttMessageTypeEnum.REQUEST.getType());
|
||||
|
||||
MqttMessageHeader header = new MqttMessageHeader();
|
||||
header.setFunction(RequestFunctionTypesEnum.FUN_STARTSWAP.getFunction());
|
||||
header.setTimeStamp(DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMATTER));
|
||||
MqttMessageHeader header = new MqttMessageHeader();
|
||||
header.setFunction(RequestFunctionTypesEnum.FUN_STARTSWAP.getFunction());
|
||||
header.setTimeStamp(DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMATTER));
|
||||
|
||||
// 发送消息给站端
|
||||
messageUtilService.publishAESMessage(topic, header, JSONUtil.parseObj(batterySwapReq, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN)));
|
||||
// 发送消息给站端
|
||||
messageUtilService.publishAESMessage(topic, header, JSONUtil.parseObj(batterySwapReq, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN)));
|
||||
|
||||
log.info("换电开始消息发送成功, 订单编号: {}", order.getOrderNo());
|
||||
return new Result<Boolean>().success(true);
|
||||
log.info("换电开始消息发送成功, 订单编号: {}", order.getOrderNo());
|
||||
return new Result<Boolean>().success(true);
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("处理换电请求时发生异常, 订单编号: {}, 用户ID: {}", order.getOrderNo(), wuid, e);
|
||||
return new Result<Boolean>().error("系统处理换电请求时发生异常");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("处理换电请求时发生异常, 订单编号: {}, 用户ID: {}", order.getOrderNo(), wuid, e);
|
||||
return new Result<Boolean>().error("系统处理换电请求时发生异常");
|
||||
}
|
||||
|
||||
return Result<Boolean>().success(true);
|
||||
}
|
||||
return Result < Boolean > ().success(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<List<Order>> listByCompany(PageListSwapOrderRequest orderRequest) {
|
||||
if (!StringUtils.isBlank(orderRequest.getCcode())) {
|
||||
return null;
|
||||
}
|
||||
if (orderRequest.getOrderTimeBegin() == null || orderRequest.getOrderTimeEnd() == null) {
|
||||
return null;
|
||||
}
|
||||
Page<Order> page = new Page<>(orderRequest.getPageNo(), orderRequest.getPageSize());
|
||||
List<VehicleInfo> vehicleList = vehicleInfoDao.selectList(new QueryWrapper<VehicleInfo>().eq("ccode", orderRequest.getCcode()));
|
||||
if (vehicleList.isEmpty()) {
|
||||
return new Result<List<Order>>().error("未发现该公司车辆");
|
||||
}
|
||||
//查询车辆信息
|
||||
List<String> plateNumList = vehicleList.stream().map(VehicleInfo::getPlateNum).toList();
|
||||
page = orderDao.selectPage(page, new QueryWrapper<Order>()
|
||||
.in("plate_num", plateNumList)
|
||||
.in(StringUtils.isBlank(orderRequest.getStatus()), "status", orderRequest.getStatus())
|
||||
.ge("order_time", orderRequest.getOrderTimeBegin())
|
||||
//疑问 换电开始时间和结束时间 跟谁比较
|
||||
.le("order_time", orderRequest.getOrderTimeEnd())
|
||||
.ne("del_flag", 1)
|
||||
.orderByDesc("pk_id")
|
||||
);
|
||||
if (page.getRecords().isEmpty()) {
|
||||
return new Result<List<Order>>().error(CodeMsg.DATABASE_RESULT_NULL);
|
||||
}
|
||||
return new Result<List<Order>>().success(page);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<List<OrderSwapBatteryStep>> listStep(String orderNo) {
|
||||
List<OrderSwapBatteryStep> orderList = orderSwapBatteryStepDao.selectList(new QueryWrapper<OrderSwapBatteryStep>()
|
||||
.eq("order_no", orderNo));
|
||||
if (orderList.isEmpty()) {
|
||||
return new Result<List<OrderSwapBatteryStep>>().error(CodeMsg.DATABASE_RESULT_NULL);
|
||||
}
|
||||
return new Result<List<OrderSwapBatteryStep>>().success(orderList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<String> walletPay(String orderNo, String wuid, String uname) {
|
||||
Order order = orderDao.selectOne(new QueryWrapper<Order>().eq("order_no", orderNo));
|
||||
if (!Objects.equals(order.getStatus(), OrderStatusEnums.TOPAY.getCode())) {
|
||||
return new Result<String>().error("订单异常!");
|
||||
}
|
||||
if (order.getOrderAmount() < 1) {
|
||||
return new Result<String>().error("订单金额异常!");
|
||||
}
|
||||
WalletAccount wallet = walletAccountDao.selectOne(new QueryWrapper<WalletAccount>().eq("owner_id", wuid));
|
||||
if (wallet == null) {
|
||||
return new Result<String>().error("钱包账户异常!");
|
||||
}
|
||||
if (wallet.getTotalAmount() < order.getOrderAmount()) {
|
||||
return new Result<String>().error("钱包余额不足!");
|
||||
}
|
||||
//添加交易
|
||||
TradeDetail trade = new TradeDetail();
|
||||
//trade.setOutTradeNo(CommonUtil.payTradeNo(2));
|
||||
trade.setTrader(uname);
|
||||
trade.setTraderCode(wuid);
|
||||
trade.setTradeType(TradeTypeEnums.PAYORDER.getCode());
|
||||
trade.setOrderCount(1);
|
||||
trade.setOrderNo(orderNo);
|
||||
trade.setTradeAmount(order.getOrderAmount());
|
||||
trade.setPayType(PayTypeEnums.WALLET.getCode());
|
||||
trade.setPayResult("SUCCESS");
|
||||
trade.setPayer(wuid);
|
||||
trade.setWallet(wallet.getCode());
|
||||
trade.setPayTime(new Date());
|
||||
tradeService.add(trade);
|
||||
//添加钱包账户明细
|
||||
WalletAccountDetail wad = new WalletAccountDetail();
|
||||
wad.setPreTotalAmount(wallet.getTotalAmount());
|
||||
wad.setPreRechargeAmount(wallet.getRechargeAmount());
|
||||
wad.setPreGiftAmount(0);
|
||||
wad.setTradeRechargeAmount(-order.getOrderAmount());
|
||||
wad.setTradeGiftAmount(0);
|
||||
wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount());
|
||||
wad.setCode(wallet.getCode());
|
||||
wad.setTradeType(trade.getTradeType());
|
||||
wad.setTradeNo(trade.getOutTradeNo());
|
||||
|
||||
wad.setAfterTotalAmount(wad.getPreTotalAmount() - Math.abs(wad.getTradeTotalAmount()));
|
||||
wad.setAfterRechargeAmount(wad.getPreRechargeAmount() - Math.abs(wad.getTradeRechargeAmount()));
|
||||
wallet.setGiftAmount(wad.getPreGiftAmount() - Math.abs(wad.getTradeGiftAmount()));
|
||||
walletAccountService.addDetail(wad);
|
||||
|
||||
wallet.setTotalAmount(wad.getAfterTotalAmount());
|
||||
wallet.setRechargeAmount(wad.getAfterRechargeAmount());
|
||||
wallet.setUptime(new Date());
|
||||
walletAccountDao.updateById(wallet);
|
||||
// 修改订单状态
|
||||
order.setStatus(OrderStatusEnums.FINISH.getCode());
|
||||
//交易编码
|
||||
//order.setTradeNo(trade.getOutTradeNo());
|
||||
order.setUpdateTime(new Date());
|
||||
orderDao.updateById(order);
|
||||
log.info("订单支付成功, 订单编号: {}", order.getOrderNo());
|
||||
//税点信息记录
|
||||
try {
|
||||
taxPointService.addTaxPoint(order.getPkId(), order.getOrderNo(), Double.valueOf(order.getOrderAmount()), order.getStationCode());
|
||||
} catch (Exception e) {
|
||||
log.error("生成税点信息异常,订单信息{}; 异常信息{}", JSON.toJSONString(order), e.getMessage());
|
||||
}
|
||||
return new Result<String>().success("OK");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<String> companyNativePay(NativePayVO prePay) {
|
||||
return wechatService.wechatNativePay(prePay);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<String> orderQuery(String outTradeNo) {
|
||||
return wechatService.orderQuery(2, outTradeNo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<Integer> cancelOrder(String orderNo, Integer status) {
|
||||
Order order = orderDao.selectOne(new QueryWrapper<Order>().eq("order_no", orderNo));
|
||||
|
||||
// 1. 查看订单是否存在
|
||||
if (order == null) {
|
||||
return new Result<Integer>().error("订单不存在");
|
||||
}
|
||||
if (!Arrays.asList(3, 4, 5, 6, 7).contains(order.getStatus())) {
|
||||
return new Result<Integer>().error("当前状态不允许取消,订单状态:" + order.getStatus());
|
||||
}
|
||||
order.setPkId(order.getPkId());
|
||||
order.setStatus(9);
|
||||
order.setUpdateTime(new Date());
|
||||
int i = orderDao.updateById(order);
|
||||
if (i == 1) {
|
||||
return new Result<Integer>().success(i);
|
||||
} else {
|
||||
return new Result<Integer>().error("取消换电订单失败");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<Integer> checkList(PageListSwapOrderRequest plsor) {
|
||||
Page<Order> page = new Page<Order>(plsor.getPageNo(), plsor.getPageSize());
|
||||
List<Integer> statusList = new ArrayList<>();
|
||||
String strs = "1,2,3,4,5,6";
|
||||
if (StringUtils.isBlank(strs)) {//订单状态"已完成"之前的状态
|
||||
statusList = Arrays.asList(strs.split(",")).stream().map(Integer::valueOf).toList();
|
||||
}
|
||||
page = orderDao.selectPage(page, new QueryWrapper<Order>()
|
||||
.eq(StringUtils.isBlank(plsor.getOrderNo()), "order_no", plsor.getOrderNo())
|
||||
.eq(StringUtils.isBlank(plsor.getPlateNum()), "plate_num", plsor.getPlateNum())
|
||||
.in(!statusList.isEmpty(), "status", statusList)
|
||||
.ge(plsor.getOrderTimeBegin() != null, "order_time", plsor.getOrderTimeBegin())
|
||||
.le(plsor.getOrderTimeEnd() != null, "order_time", plsor.getOrderTimeEnd())
|
||||
.eq(StringUtils.isBlank(plsor.getStationCode()), "station_code", plsor.getStationCode())
|
||||
.like(StringUtils.isBlank(plsor.getStationName()), "station_name", plsor.getStationName())
|
||||
.eq(StringUtils.isBlank(plsor.getUserId()), "order_pre_uid", plsor.getUserId())
|
||||
.eq(StringUtils.isBlank(plsor.getTradeNo()), "trade_no", plsor.getTradeNo())
|
||||
.ne("del_flag", 1)
|
||||
.orderByDesc("pk_id"));
|
||||
if (!page.getRecords().isEmpty()) {
|
||||
return new Result<Integer>().error("该车辆有未结算的订单,请确认后重试!");
|
||||
}
|
||||
Page<OrderSwapBatteryPre> page1 = new Page<OrderSwapBatteryPre>(plsor.getPageNo(), plsor.getPageSize());
|
||||
page1 = orderSwapBatteryPreDao.selectPage(page1, new QueryWrapper<OrderSwapBatteryPre>()
|
||||
.eq(StringUtils.isBlank("1"), "status", "1")
|
||||
.eq(StringUtils.isBlank(plsor.getPlateNum()), "plate_num", plsor.getPlateNum())
|
||||
.orderByDesc("pk_id"));
|
||||
if (!page1.getRecords().isEmpty()) {
|
||||
return new Result<Integer>().error("该车辆有预约成功的订单,请处理后重试!");
|
||||
}
|
||||
|
||||
return new Result<Integer>().success(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<BatterySwapResponse> getStartSwap(String wuid, String orderId) {
|
||||
// 参数校验
|
||||
if (StrUtil.isBlank(wuid) || StrUtil.isBlank(orderId)) {
|
||||
log.warn("获取换电状态参数无效, wuid: {}, orderId: {}", wuid, orderId);
|
||||
return new Result<BatterySwapResponse>().error("参数无效");
|
||||
}
|
||||
return new Result<BatterySwapResponse>().error("参数无效");
|
||||
// 获取用户订单
|
||||
Order orderSwap = orderDao.selectById(orderId);
|
||||
if (orderSwap == null) {
|
||||
log.warn("未找到符合条件的订单, 用户ID: {}, 订单id: {}", wuid, orderId);
|
||||
return new Result<BatterySwapResponse>().error("未找到符合条件的订单");
|
||||
}
|
||||
try {
|
||||
// 从 Redis 中获取换电信息
|
||||
String redisKey = "battery:" + orderSwap.getOrderNo();
|
||||
/* Object o = redisUtil.get(redisKey);
|
||||
if (ObjectUtil.isEmpty(o)) {
|
||||
log.info("未收到换电成功信息, 订单编号: {}", orderSwap.getOrderNo());
|
||||
return new Result<BatterySwapResponse>().error("未收到换电成功信息");
|
||||
}*/
|
||||
// 将获取到的 JSON 字符串转换为 BatterySwapResponse 对象
|
||||
BatterySwapResponse response = JSONUtil.toBean(o.toString(), BatterySwapResponse.class);
|
||||
if (response == null) {
|
||||
log.error("换电响应数据解析失败, 订单编号: {}", orderSwap.getOrderNo());
|
||||
return new Result<BatterySwapResponse>().error("换电响应数据解析失败");
|
||||
}
|
||||
if (response.getCode() == 1) {
|
||||
log.info("换电成功, 订单编号: {}", orderSwap.getOrderNo());
|
||||
return new Result<BatterySwapResponse>().success(response);
|
||||
} else {
|
||||
log.warn("换电失败, 订单编号: {}, 错误信息: {}", orderSwap.getOrderNo(), response.getMsg());
|
||||
return new Result<BatterySwapResponse>().error(response.getMsg());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("获取换电状态时发生异常, 订单编号: {}", orderSwap.getOrderNo(), e);
|
||||
return new Result<BatterySwapResponse>().error("系统获取换电状态时发生异常");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
package com.evotech.hd.cloud.service.rpc;
|
||||
|
||||
import com.evotech.hd.cloud.entity.order.Order;
|
||||
import com.evotech.hd.cloud.entity.vo.NativePayVO;
|
||||
import com.evotech.hd.common.core.Dto.Result;
|
||||
import com.evotech.hd.common.core.Dto.request.template.AlarmTemplateDto;
|
||||
import com.evotech.hd.common.core.Dto.request.template.StopServerTemplateDto;
|
||||
import com.evotech.hd.common.core.entity.Result;
|
||||
import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery;
|
||||
|
||||
|
||||
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre;
|
||||
import com.evotech.hd.common.core.entity.cloud.TradeDetail;
|
||||
import org.springdoc.core.annotations.ParameterObject;
|
||||
@ -17,36 +19,36 @@ import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
@FeignClient(name = "${WECHAT-SERVER-API-NAME}", path = "${WECHAT-SERVER-API-PATH}")
|
||||
public interface WechatService {
|
||||
|
||||
|
||||
@GetMapping(value = "/xcx/qrcode/get2",
|
||||
consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
|
||||
public String getQRCode2(@RequestParam String path, @RequestParam String width, @RequestParam String env_version);
|
||||
|
||||
|
||||
|
||||
|
||||
@GetMapping(value = "/xcx/qrcode/create2",
|
||||
consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
|
||||
public String createQRCode2(@RequestParam String path, @RequestParam String width);
|
||||
|
||||
|
||||
@PostMapping(value = "/gzh/msg/send/preorder2",
|
||||
consumes = {MediaType.APPLICATION_JSON_VALUE})
|
||||
public Result<String> preOrderMessage(@RequestBody OrderSwapBatteryPre osbp);
|
||||
|
||||
|
||||
@PostMapping(value = "/gzh/msg/send/order",
|
||||
consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
|
||||
public Result<String> orderMessage(@ParameterObject OrderSwapBattery osb, @RequestParam Integer templateType);
|
||||
|
||||
public Result<String> orderMessage(@ParameterObject Order osb, @RequestParam Integer templateType);
|
||||
|
||||
@PostMapping(value = "/gzh/msg/send/order2",
|
||||
consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
|
||||
public Result<String> orderMessage2(@RequestParam Integer id, @RequestParam Integer templateType);
|
||||
|
||||
|
||||
@PostMapping(value = "/gzh/msg/send/recharge",
|
||||
consumes = {MediaType.APPLICATION_JSON_VALUE})
|
||||
public Result<String> rechargeMessage(@RequestBody TradeDetail trade, @RequestParam Integer money);
|
||||
|
||||
|
||||
@PostMapping(value = "/wechatpay/native/prepay",
|
||||
consumes = {MediaType.APPLICATION_JSON_VALUE})
|
||||
public Result<String> wechatNativePay(@RequestBody NativePayVO prePay);
|
||||
|
||||
public com.evotech.hd.common.core.Dto.Result<String> wechatNativePay(@RequestBody NativePayVO prePay);
|
||||
|
||||
@GetMapping(value = "/wechatpay/native/order/query",
|
||||
consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
|
||||
public Result<String> orderQuery(@RequestParam Integer type, @RequestParam String outTradeNo);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user