物流项目话术(1.5w字精选)

物流项目的分类

ccbedf9d45604d55b618568b1997c728.png

技术架构图(面试时面试官会要求你画出技术架构图)

087875f7fd95461fb9d7a7c89d8734c4.png

功能结构图

937716a1a6f64e8e9a9a98f0bbc7a9b6.png

业务功能流程

f33269263e334860be6f0d85a4157bdf.png

流程说明:

  • 用户在【用户端】下单后,生成订单

  • 系统会根据订单生成【取件任务】,快递员上门取件后成功后生成【运单】

  • 用户对订单进行支付,会产生【交易单】

  • 快件开始运输,会经历起始营业部、分拣中心、转运中心、分拣中心、终点营业部之间的转运运输,在此期间会有多个【运输任务】

  • 到达终点网点后,系统会生成【派件任务】,快递员进行派件作业

  • 最后,用户将进行签收或拒收操作

 微服务调度关系

918935537d614c719c4f026557e177df.png

项目搭建提问

 在公司中使用几台服务器?

服务器这块我不是很清楚,因为我们是个大公司,在公司中我们的运维已经搭好了cicd的环境,我们后端人员主要使用jenkins发布写好的微服务模块。

权限认证步骤 

流程图:

066caa15865947a5b7718d565dedab9d.png

数据校验

数据校验使用@Validated。(可以使用在方法,方法参数,类 上)

DTO类的数据校验 

47789826643c407ab643efa7912b2a0d.png

 Controller层中的方法

9a3313776dec4019aca015846791a205.png

为了使得DTO类中的校验注解生效,我们需要在controller中添加@Validated。

但是即使在contrller中设置了对应的注解,校验还是不会生效,为了使得注解生效,这里在方法参数位置添加@Validated注解。

7957dcd489fc42e9b6f65fa0d97bccf2.png

 在该项目中为了方便开发,直接使用aop进行环绕通知,自动设置@Validated。

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.sl.transport.common.exception.SLException;
import com.sl.transport.common.util.AspectUtil;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * 请求参数校验切面,统一对Controller中@RequestBody映射的对象进行校验,在Controller方法中无需单独处理
 * 通过aop保证对应参数的中的校验注解可以生效
 * 该切面的作用就是自动在方法参数上添加@validated
 */
@Aspect //思想aop
@Slf4j
@EnableAspectJAutoProxy
@Component
public class ValidatedAspect {

    @Resource
    private Validator validator;

    @Around("execution(* com.sl..controller.*Controller.*(..))") //设置前面切面为:每个Controller层中对应的每个方法,这里使用环绕通知
    public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        // 获取@RequestBody映射的对象
        Object body = AspectUtil.getBody(proceedingJoinPoint); //这里就是获取Controller方法中对应的参数
        // 不为空的body进行拦截校验
        //方法中的参数不为空就说明我们需要进行数据校验
        if (!ObjectUtil.isEmpty(body)) {
            // 进行校验
            Set<ConstraintViolation<Object>> validateResult = validator.validate(body); //就等于在对应的方法参数上添加@Validated注解
            if (CollUtil.isNotEmpty(validateResult)) {
                //没有通过校验,抛出异常,由统一异常处理机制进行处理,响应400
                String info = JSONUtil.toJsonStr(validateResult.stream()
                        .map(ConstraintViolation::getMessage).collect(Collectors.toList()));
                throw new SLException(info, HttpStatus.BAD_REQUEST.value());
            }
        }
        //校验通过,执行原方法
        return proceedingJoinPoint.proceed(proceedingJoinPoint.getArgs());
    }

}

全局异常处理

 问:你们是怎么处理异常的呢?

答: 在我们日常开发中,我,我们会创建一个全局的异常拦截器,通过使用@RestControllerAdvice , 创建一个全局异常处理类

通过@ExceptionHandler(对应的异常类)创建一个个处理对应异常类型的方法,最终返回友好的信息给前端。

微服务实现共享配置

对应的配置为下:

#设置共享配置所在的名字空间
#shared-config的值是一个数组
每个共享配配置需要设置:dataId, 分组
spring:
  cloud:
    nacos:
      config:
        namespace: ecae68ba-7b43-4473-a980-4ddeb6157bdc
        shared-configs: #共享配置
          - data-id: shared-spring-
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值