perf: 优化新增订单逻辑;去掉自增ID 采用默认的雪花ID生成主键;
This commit is contained in:
parent
eecaeda7dc
commit
ab5dbd8901
@ -805,4 +805,24 @@ public class RedisUtils {
|
|||||||
public Long decrement(String key) {
|
public Long decrement(String key) {
|
||||||
return redisTemplate.opsForValue().decrement(key);
|
return redisTemplate.opsForValue().decrement(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 原子自增操作
|
||||||
|
*
|
||||||
|
* @param key Redis key
|
||||||
|
* @param digits 自增数的位数(如5位数)
|
||||||
|
* @return 格式化后的字符串
|
||||||
|
*/
|
||||||
|
public String increase(String key, int digits) {
|
||||||
|
Long incr = redisTemplate.opsForValue().increment(key);
|
||||||
|
if (incr == null) {
|
||||||
|
throw new RuntimeException("Redis increment failed.");
|
||||||
|
}
|
||||||
|
// 设置过期时间(可选),例如每天的 key 在第二天自动过期
|
||||||
|
if (incr == 1) {
|
||||||
|
// 可选:设置 key 的过期时间,例如 24 小时后自动过期
|
||||||
|
redisTemplate.expire(key, 24, TimeUnit.HOURS);
|
||||||
|
}
|
||||||
|
return String.format("%0" + digits + "d", incr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,8 @@ import cn.hutool.core.util.StrUtil;
|
|||||||
import com.aircraft.modules.order.domain.OrderDetail;
|
import com.aircraft.modules.order.domain.OrderDetail;
|
||||||
import com.aircraft.modules.order.domain.OrderMain;
|
import com.aircraft.modules.order.domain.OrderMain;
|
||||||
import com.aircraft.modules.order.domain.OrderOperator;
|
import com.aircraft.modules.order.domain.OrderOperator;
|
||||||
|
import com.aircraft.modules.order.domain.constant.OrderConstant;
|
||||||
|
import com.aircraft.modules.order.domain.constant.OrderRedisConstant;
|
||||||
import com.aircraft.modules.order.domain.dto.AddOrderDTO;
|
import com.aircraft.modules.order.domain.dto.AddOrderDTO;
|
||||||
import com.aircraft.modules.order.domain.dto.AddOrderTaskDTO;
|
import com.aircraft.modules.order.domain.dto.AddOrderTaskDTO;
|
||||||
import com.aircraft.modules.order.domain.dto.OrderMainPageQueryDTO;
|
import com.aircraft.modules.order.domain.dto.OrderMainPageQueryDTO;
|
||||||
@ -17,10 +19,15 @@ import com.aircraft.modules.order.service.IOrderDetailService;
|
|||||||
import com.aircraft.modules.order.service.IOrderMainService;
|
import com.aircraft.modules.order.service.IOrderMainService;
|
||||||
import com.aircraft.modules.order.service.IOrderOperatorService;
|
import com.aircraft.modules.order.service.IOrderOperatorService;
|
||||||
import com.aircraft.modules.system.domain.AttachmentMaterial;
|
import com.aircraft.modules.system.domain.AttachmentMaterial;
|
||||||
|
import com.aircraft.modules.system.domain.EmEmployees;
|
||||||
|
import com.aircraft.modules.system.domain.EmScenic;
|
||||||
import com.aircraft.modules.system.domain.enums.AttachmentMaterialBusinessTypeEnum;
|
import com.aircraft.modules.system.domain.enums.AttachmentMaterialBusinessTypeEnum;
|
||||||
|
import com.aircraft.modules.system.service.EmScenicService;
|
||||||
import com.aircraft.modules.system.service.IAttachmentMaterialService;
|
import com.aircraft.modules.system.service.IAttachmentMaterialService;
|
||||||
import com.aircraft.utils.PageResult;
|
import com.aircraft.utils.PageResult;
|
||||||
|
import com.aircraft.utils.RedisUtils;
|
||||||
import com.aircraft.utils.SecurityUtils;
|
import com.aircraft.utils.SecurityUtils;
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.security.core.userdetails.UserDetails;
|
import org.springframework.security.core.userdetails.UserDetails;
|
||||||
@ -29,6 +36,8 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -51,6 +60,10 @@ public class OrderBiz {
|
|||||||
private IAttachmentMaterialService attachmentMaterialService;
|
private IAttachmentMaterialService attachmentMaterialService;
|
||||||
@Resource
|
@Resource
|
||||||
private IOrderDetailService orderDetailService;
|
private IOrderDetailService orderDetailService;
|
||||||
|
@Resource
|
||||||
|
private EmScenicService emScenicService;
|
||||||
|
@Resource
|
||||||
|
private RedisUtils redisUtils;
|
||||||
|
|
||||||
public List<OrderMainPageQueryVO> queryAll(OrderMainPageQueryDTO pageQueryDTO) {
|
public List<OrderMainPageQueryVO> queryAll(OrderMainPageQueryDTO pageQueryDTO) {
|
||||||
UserDetails currentUser = SecurityUtils.getCurrentUser();
|
UserDetails currentUser = SecurityUtils.getCurrentUser();
|
||||||
@ -77,11 +90,10 @@ public class OrderBiz {
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void addOrder(AddOrderDTO addOrderDTO) {
|
public void addOrder(AddOrderDTO addOrderDTO) {
|
||||||
|
|
||||||
// TODO 获取当前登录用户(飞行端用户)
|
// 获取当前登录用户(飞行端用户)
|
||||||
UserDetails currentUser = SecurityUtils.getCurrentUser();
|
EmEmployees emEmployees = JSON.parseObject(SecurityUtils.getCurrentEmployee(), EmEmployees.class);
|
||||||
// 发起人ID
|
// 发起人ID
|
||||||
Long orderInitiatorId = SecurityUtils.getCurrentUserId();
|
Long orderInitiatorId = emEmployees.getId();
|
||||||
|
|
||||||
// 新增订单
|
// 新增订单
|
||||||
OrderMain orderMain = orderMainService.addOrder(buildOrderParam(addOrderDTO, orderInitiatorId));
|
OrderMain orderMain = orderMainService.addOrder(buildOrderParam(addOrderDTO, orderInitiatorId));
|
||||||
// 构建保存操作人信息
|
// 构建保存操作人信息
|
||||||
@ -105,13 +117,22 @@ public class OrderBiz {
|
|||||||
* @return {@link OrderMain}
|
* @return {@link OrderMain}
|
||||||
*/
|
*/
|
||||||
private OrderMain buildOrderParam(AddOrderDTO addOrderDTO, Long orderInitiatorId) {
|
private OrderMain buildOrderParam(AddOrderDTO addOrderDTO, Long orderInitiatorId) {
|
||||||
// TODO 生成订单编号《待优化 年月日+时分秒 +五位随机数Redis进行自增》
|
|
||||||
String orderNO = "JS" + System.currentTimeMillis();
|
// 生成订单编号《年月日 + 五位数字 Redis 进行自增》
|
||||||
|
String datePrefix = LocalDateTime.now().format(DateTimeFormatter.ofPattern(OrderConstant.DATE_PREFIX));
|
||||||
|
String serialNumber = redisUtils.increase(OrderRedisConstant.ORDER_NO_PREFIX
|
||||||
|
+ datePrefix, OrderConstant.ORDER_NO_SEQUENCE);
|
||||||
|
String orderNO = OrderConstant.ORDER_NO_PREFIX+ datePrefix + serialNumber;
|
||||||
|
|
||||||
|
// 逗号分隔成字符串存储
|
||||||
List<Long> routeIds = addOrderDTO.getRouteIds();
|
List<Long> routeIds = addOrderDTO.getRouteIds();
|
||||||
// 逗号分隔成字符串
|
|
||||||
String routeIdsStr = CollectionUtil.join(routeIds, StrUtil.COMMA);
|
String routeIdsStr = CollectionUtil.join(routeIds, StrUtil.COMMA);
|
||||||
// TODO 根据重量计算总金额<取自金额配置表 待完善>
|
|
||||||
BigDecimal amount = addOrderDTO.getCargoWeight().multiply(new BigDecimal("0.01"));
|
// 根据景区ID 获取对应的 KG金额, 计算出金额 = 重量 * 金额
|
||||||
|
EmScenic scenic = emScenicService.obtainScenicById(addOrderDTO.getAttractionId());
|
||||||
|
BigDecimal price = scenic.getPrice();
|
||||||
|
BigDecimal amount = addOrderDTO.getCargoWeight().multiply(price);
|
||||||
|
|
||||||
OrderMain orderMain = new OrderMain();
|
OrderMain orderMain = new OrderMain();
|
||||||
orderMain.setOrderNo(orderNO);
|
orderMain.setOrderNo(orderNO);
|
||||||
orderMain.setOrderInitiatorId(orderInitiatorId);
|
orderMain.setOrderInitiatorId(orderInitiatorId);
|
||||||
|
@ -14,6 +14,7 @@ import io.swagger.annotations.ApiOperation;
|
|||||||
import io.swagger.annotations.ApiParam;
|
import io.swagger.annotations.ApiParam;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
@ -45,7 +46,7 @@ public class OrderMainController {
|
|||||||
|
|
||||||
@ApiOperation("新增订单")
|
@ApiOperation("新增订单")
|
||||||
@PostMapping("/addOrder")
|
@PostMapping("/addOrder")
|
||||||
public ResponseEntity<Object> addOrder(AddOrderDTO addOrderDTO) {
|
public ResponseEntity<Object> addOrder(@RequestBody @Validated AddOrderDTO addOrderDTO) {
|
||||||
orderBiz.addOrder(addOrderDTO);
|
orderBiz.addOrder(addOrderDTO);
|
||||||
return new ResponseEntity<>(HttpStatus.OK);
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,12 @@
|
|||||||
package com.aircraft.modules.order.domain;
|
package com.aircraft.modules.order.domain;
|
||||||
|
|
||||||
import cn.hutool.core.date.DateTime;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
|
||||||
import com.aircraft.base.BaseEntity;
|
import com.aircraft.base.BaseEntity;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@ -29,7 +26,7 @@ public class OrderDetail extends BaseEntity {
|
|||||||
/**
|
/**
|
||||||
* 主键ID
|
* 主键ID
|
||||||
*/
|
*/
|
||||||
@TableId(value = "id", type = IdType.AUTO)
|
@ApiModelProperty(value = "主键ID")
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
package com.aircraft.modules.order.domain;
|
package com.aircraft.modules.order.domain;
|
||||||
|
|
||||||
import com.aircraft.base.BaseEntity;
|
import com.aircraft.base.BaseEntity;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
@ -28,7 +27,7 @@ public class OrderMain extends BaseEntity {
|
|||||||
/**
|
/**
|
||||||
* ID主键
|
* ID主键
|
||||||
*/
|
*/
|
||||||
@TableId(value = "id", type = IdType.AUTO)
|
@ApiModelProperty(value = "主键ID")
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
package com.aircraft.modules.order.domain;
|
package com.aircraft.modules.order.domain;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import com.aircraft.base.BaseEntity;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
@ -22,7 +20,7 @@ public class OrderOperator{
|
|||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@TableId(value = "id", type = IdType.AUTO)
|
@ApiModelProperty(value = "主键ID")
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2,10 +2,9 @@ package com.aircraft.modules.order.domain;
|
|||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
|
||||||
import com.aircraft.base.BaseEntity;
|
import com.aircraft.base.BaseEntity;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
@ -27,7 +26,7 @@ public class SettlementDetail extends BaseEntity {
|
|||||||
/**
|
/**
|
||||||
* ID主键
|
* ID主键
|
||||||
*/
|
*/
|
||||||
@TableId(value = "id", type = IdType.AUTO)
|
@ApiModelProperty(value = "主键ID")
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
package com.aircraft.modules.order.domain;
|
package com.aircraft.modules.order.domain;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
|
||||||
import com.aircraft.base.BaseEntity;
|
import com.aircraft.base.BaseEntity;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
@ -26,7 +25,7 @@ public class SettlementMain extends BaseEntity {
|
|||||||
/**
|
/**
|
||||||
* 主键ID
|
* 主键ID
|
||||||
*/
|
*/
|
||||||
@TableId(value = "id", type = IdType.AUTO)
|
@ApiModelProperty(value = "主键ID")
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -0,0 +1,27 @@
|
|||||||
|
package com.aircraft.modules.order.domain.constant;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单管理常量
|
||||||
|
*
|
||||||
|
* @author chenxiky
|
||||||
|
* @version 1.0.0
|
||||||
|
* @since 2025/7/19
|
||||||
|
*/
|
||||||
|
public class OrderConstant {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单编号常量
|
||||||
|
*/
|
||||||
|
public static final String ORDER_NO_PREFIX = "JS";
|
||||||
|
/**
|
||||||
|
* 年月日
|
||||||
|
*/
|
||||||
|
public static final String DATE_PREFIX = "yyyyMMdd";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单编号序列
|
||||||
|
*/
|
||||||
|
public static final Integer ORDER_NO_SEQUENCE = 5;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package com.aircraft.modules.order.domain.constant;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工单管理 Redis 常量
|
||||||
|
* @author chenxiky
|
||||||
|
* @version 1.0.0
|
||||||
|
* @since 2025/7/19
|
||||||
|
*/
|
||||||
|
public class OrderRedisConstant {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* redis 订单编号前缀 key
|
||||||
|
*/
|
||||||
|
public static final String ORDER_NO_PREFIX = "fly_order_no";
|
||||||
|
}
|
@ -49,4 +49,11 @@ public interface EmScenicService extends IService<EmScenic> {
|
|||||||
@Transactional
|
@Transactional
|
||||||
void countByAreaIdToUpdate();
|
void countByAreaIdToUpdate();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据ID获取对应的景区信息
|
||||||
|
*
|
||||||
|
* @param id 主键
|
||||||
|
* @return {@link EmScenic}
|
||||||
|
*/
|
||||||
|
EmScenic obtainScenicById(Long id);
|
||||||
}
|
}
|
||||||
|
@ -86,6 +86,11 @@ public class EmScenicServiceImpl extends ServiceImpl<EmScenicMapper, EmScenic> i
|
|||||||
areaService.updateBatchById(organizations);
|
areaService.updateBatchById(organizations);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EmScenic obtainScenicById(Long id) {
|
||||||
|
return this.getById(id);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构建查询
|
* 构建查询
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user