From ab5dbd8901ffe1a3865b414ff7c86e7a9e4f0ccf Mon Sep 17 00:00:00 2001 From: chenxiky <2868613334@qq.com> Date: Sat, 19 Jul 2025 18:14:08 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E9=80=BB=E8=BE=91=EF=BC=9B=E5=8E=BB=E6=8E=89?= =?UTF-8?q?=E8=87=AA=E5=A2=9EID=20=E9=87=87=E7=94=A8=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E7=9A=84=E9=9B=AA=E8=8A=B1ID=E7=94=9F=E6=88=90=E4=B8=BB?= =?UTF-8?q?=E9=94=AE=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/aircraft/utils/RedisUtils.java | 20 ++++++++++ .../aircraft/modules/order/biz/OrderBiz.java | 39 ++++++++++++++----- .../order/controller/OrderMainController.java | 3 +- .../modules/order/domain/OrderDetail.java | 7 +--- .../modules/order/domain/OrderMain.java | 5 +-- .../modules/order/domain/OrderOperator.java | 6 +-- .../order/domain/SettlementDetail.java | 5 +-- .../modules/order/domain/SettlementMain.java | 5 +-- .../order/domain/constant/OrderConstant.java | 27 +++++++++++++ .../domain/constant/OrderRedisConstant.java | 15 +++++++ .../system/service/EmScenicService.java | 7 ++++ .../service/impl/EmScenicServiceImpl.java | 5 +++ 12 files changed, 116 insertions(+), 28 deletions(-) create mode 100644 aircraft-system/src/main/java/com/aircraft/modules/order/domain/constant/OrderConstant.java create mode 100644 aircraft-system/src/main/java/com/aircraft/modules/order/domain/constant/OrderRedisConstant.java diff --git a/aircraft-common/src/main/java/com/aircraft/utils/RedisUtils.java b/aircraft-common/src/main/java/com/aircraft/utils/RedisUtils.java index 406f01b..c0d0c7a 100644 --- a/aircraft-common/src/main/java/com/aircraft/utils/RedisUtils.java +++ b/aircraft-common/src/main/java/com/aircraft/utils/RedisUtils.java @@ -805,4 +805,24 @@ public class RedisUtils { public Long decrement(String 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); + } } diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/biz/OrderBiz.java b/aircraft-system/src/main/java/com/aircraft/modules/order/biz/OrderBiz.java index f92e64b..26d0fce 100644 --- a/aircraft-system/src/main/java/com/aircraft/modules/order/biz/OrderBiz.java +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/biz/OrderBiz.java @@ -5,6 +5,8 @@ import cn.hutool.core.util.StrUtil; import com.aircraft.modules.order.domain.OrderDetail; import com.aircraft.modules.order.domain.OrderMain; 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.AddOrderTaskDTO; 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.IOrderOperatorService; 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.service.EmScenicService; import com.aircraft.modules.system.service.IAttachmentMaterialService; import com.aircraft.utils.PageResult; +import com.aircraft.utils.RedisUtils; import com.aircraft.utils.SecurityUtils; +import com.alibaba.fastjson.JSON; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.core.userdetails.UserDetails; @@ -29,6 +36,8 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; @@ -51,6 +60,10 @@ public class OrderBiz { private IAttachmentMaterialService attachmentMaterialService; @Resource private IOrderDetailService orderDetailService; + @Resource + private EmScenicService emScenicService; + @Resource + private RedisUtils redisUtils; public List queryAll(OrderMainPageQueryDTO pageQueryDTO) { UserDetails currentUser = SecurityUtils.getCurrentUser(); @@ -77,11 +90,10 @@ public class OrderBiz { @Transactional(rollbackFor = Exception.class) public void addOrder(AddOrderDTO addOrderDTO) { - // TODO 获取当前登录用户(飞行端用户) - UserDetails currentUser = SecurityUtils.getCurrentUser(); + // 获取当前登录用户(飞行端用户) + EmEmployees emEmployees = JSON.parseObject(SecurityUtils.getCurrentEmployee(), EmEmployees.class); // 发起人ID - Long orderInitiatorId = SecurityUtils.getCurrentUserId(); - + Long orderInitiatorId = emEmployees.getId(); // 新增订单 OrderMain orderMain = orderMainService.addOrder(buildOrderParam(addOrderDTO, orderInitiatorId)); // 构建保存操作人信息 @@ -105,13 +117,22 @@ public class OrderBiz { * @return {@link OrderMain} */ 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 routeIds = addOrderDTO.getRouteIds(); - // 逗号分隔成字符串 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.setOrderNo(orderNO); orderMain.setOrderInitiatorId(orderInitiatorId); diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/controller/OrderMainController.java b/aircraft-system/src/main/java/com/aircraft/modules/order/controller/OrderMainController.java index 7e1047d..52fe97f 100644 --- a/aircraft-system/src/main/java/com/aircraft/modules/order/controller/OrderMainController.java +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/controller/OrderMainController.java @@ -14,6 +14,7 @@ import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -45,7 +46,7 @@ public class OrderMainController { @ApiOperation("新增订单") @PostMapping("/addOrder") - public ResponseEntity addOrder(AddOrderDTO addOrderDTO) { + public ResponseEntity addOrder(@RequestBody @Validated AddOrderDTO addOrderDTO) { orderBiz.addOrder(addOrderDTO); return new ResponseEntity<>(HttpStatus.OK); } diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/domain/OrderDetail.java b/aircraft-system/src/main/java/com/aircraft/modules/order/domain/OrderDetail.java index 4ff9be1..d711d39 100644 --- a/aircraft-system/src/main/java/com/aircraft/modules/order/domain/OrderDetail.java +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/domain/OrderDetail.java @@ -1,15 +1,12 @@ package com.aircraft.modules.order.domain; -import cn.hutool.core.date.DateTime; import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.IdType; import com.aircraft.base.BaseEntity; -import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import java.math.BigDecimal; -import java.time.LocalDateTime; /** *

@@ -29,7 +26,7 @@ public class OrderDetail extends BaseEntity { /** * 主键ID */ - @TableId(value = "id", type = IdType.AUTO) + @ApiModelProperty(value = "主键ID") private Long id; /** diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/domain/OrderMain.java b/aircraft-system/src/main/java/com/aircraft/modules/order/domain/OrderMain.java index 0f4a534..9ce8450 100644 --- a/aircraft-system/src/main/java/com/aircraft/modules/order/domain/OrderMain.java +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/domain/OrderMain.java @@ -1,9 +1,8 @@ package com.aircraft.modules.order.domain; import com.aircraft.base.BaseEntity; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; @@ -28,7 +27,7 @@ public class OrderMain extends BaseEntity { /** * ID主键 */ - @TableId(value = "id", type = IdType.AUTO) + @ApiModelProperty(value = "主键ID") private Long id; /** diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/domain/OrderOperator.java b/aircraft-system/src/main/java/com/aircraft/modules/order/domain/OrderOperator.java index f4b005d..6107e64 100644 --- a/aircraft-system/src/main/java/com/aircraft/modules/order/domain/OrderOperator.java +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/domain/OrderOperator.java @@ -1,9 +1,7 @@ package com.aircraft.modules.order.domain; import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.IdType; -import com.aircraft.base.BaseEntity; -import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; @@ -22,7 +20,7 @@ public class OrderOperator{ private static final long serialVersionUID = 1L; - @TableId(value = "id", type = IdType.AUTO) + @ApiModelProperty(value = "主键ID") private Long id; /** diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/domain/SettlementDetail.java b/aircraft-system/src/main/java/com/aircraft/modules/order/domain/SettlementDetail.java index 571612c..9885887 100644 --- a/aircraft-system/src/main/java/com/aircraft/modules/order/domain/SettlementDetail.java +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/domain/SettlementDetail.java @@ -2,10 +2,9 @@ package com.aircraft.modules.order.domain; import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.IdType; import com.aircraft.base.BaseEntity; import java.util.Date; -import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; @@ -27,7 +26,7 @@ public class SettlementDetail extends BaseEntity { /** * ID主键 */ - @TableId(value = "id", type = IdType.AUTO) + @ApiModelProperty(value = "主键ID") private Long id; /** diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/domain/SettlementMain.java b/aircraft-system/src/main/java/com/aircraft/modules/order/domain/SettlementMain.java index 08b256f..e734eb2 100644 --- a/aircraft-system/src/main/java/com/aircraft/modules/order/domain/SettlementMain.java +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/domain/SettlementMain.java @@ -1,10 +1,9 @@ package com.aircraft.modules.order.domain; import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.IdType; import com.aircraft.base.BaseEntity; import java.util.Date; -import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; @@ -26,7 +25,7 @@ public class SettlementMain extends BaseEntity { /** * 主键ID */ - @TableId(value = "id", type = IdType.AUTO) + @ApiModelProperty(value = "主键ID") private Long id; /** diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/domain/constant/OrderConstant.java b/aircraft-system/src/main/java/com/aircraft/modules/order/domain/constant/OrderConstant.java new file mode 100644 index 0000000..07e55ba --- /dev/null +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/domain/constant/OrderConstant.java @@ -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; + + +} diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/domain/constant/OrderRedisConstant.java b/aircraft-system/src/main/java/com/aircraft/modules/order/domain/constant/OrderRedisConstant.java new file mode 100644 index 0000000..c745644 --- /dev/null +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/domain/constant/OrderRedisConstant.java @@ -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"; +} diff --git a/aircraft-system/src/main/java/com/aircraft/modules/system/service/EmScenicService.java b/aircraft-system/src/main/java/com/aircraft/modules/system/service/EmScenicService.java index 6cb8fdd..067351d 100644 --- a/aircraft-system/src/main/java/com/aircraft/modules/system/service/EmScenicService.java +++ b/aircraft-system/src/main/java/com/aircraft/modules/system/service/EmScenicService.java @@ -49,4 +49,11 @@ public interface EmScenicService extends IService { @Transactional void countByAreaIdToUpdate(); + /** + * 根据ID获取对应的景区信息 + * + * @param id 主键 + * @return {@link EmScenic} + */ + EmScenic obtainScenicById(Long id); } diff --git a/aircraft-system/src/main/java/com/aircraft/modules/system/service/impl/EmScenicServiceImpl.java b/aircraft-system/src/main/java/com/aircraft/modules/system/service/impl/EmScenicServiceImpl.java index 09e0472..0331bdf 100644 --- a/aircraft-system/src/main/java/com/aircraft/modules/system/service/impl/EmScenicServiceImpl.java +++ b/aircraft-system/src/main/java/com/aircraft/modules/system/service/impl/EmScenicServiceImpl.java @@ -86,6 +86,11 @@ public class EmScenicServiceImpl extends ServiceImpl i areaService.updateBatchById(organizations); } + @Override + public EmScenic obtainScenicById(Long id) { + return this.getById(id); + } + /** * 构建查询 *