springboot+vue之实现后端员工的新增

一、实现逻辑

Controller接收来自前端的请求,再通过调用Service层的add()方法,实现员工的新增。

二、具体实现之基础准备

1、编写员工新增请求 EmployeeAddReq.java

@Getter
@Setter
@ApiModel(value = "新增员工模型")
public class EmployeeAddReq {
    /**
     * 登录账户
     */
    @Pattern(regexp = "^1[3|4|5|7|8][0-9]{9}$",message = "账号格式为手机,只支持13\14\15\17\18")
    @NotBlank(message = "登录账户不能为空")
    @ApiModelProperty(value = "登录账户")
    private String loginName;

    /**
     * 登录密码
     */
    @NotBlank(message = "登录密码不能为空")
    @ApiModelProperty(value = "登录密码")
    @Length(min = 4,max = 30,message = "密码要在4-30个字符之间")
    private String loginPwd;

    /**
     * 确认密码
     */
    @ApiModelProperty(value = "确认密码")
    private String loginPwdConfirm;

    /**
     * 性别(0 女 1 男)
     */
    @NotBlank(message = "性别不能为空")
    @ApiModelProperty(value = "性别(0 女 1 男)")
    private String gender;

    /**
     * 状态(1停用,0正常)
     */
    @NotBlank(message = "状态不能为空")
    @ApiModelProperty(value = "状态(1停用,0正常)")
    private String status;

    /**
     * 头像
     */
    @NotBlank(message = "头像不能为空")
    @ApiModelProperty(value = "头像")
    private String avatar;

}

备注:手机号的正则表达式可以在网上搜,任意更改。同时,新增需要使用NotBlank注解进行非空校验。

2、统一响应模型 R.java

@Getter
@Setter
public class R<T>{
    private Integer code;
    private String msg;
    private T data;


    public synchronized static <T> R<T> build(AckCode statusEnum) {
        return build(statusEnum, null);
    }

    public synchronized static <T> R<T> build(AckCode ackCode, T data) {
        R<T> res = new R<>();
        res.setCode(ackCode.getCode());
        res.setMsg(ackCode.getMsg());
        res.setData(data);
        return res;
    }

    public synchronized static <T> R<T> build(AckCode ackCode, T data, String msg) {
        R<T> res = new R<>();
        res.setCode(ackCode.getCode());
        res.setMsg(msg);
        res.setData(data);
        return res;
    }

    public synchronized static <T> R<T> ok() {
        return build(AckCode.SUCCESS, null);
    }

    public synchronized static <T> R<T> okHasData(T data) {
        return build(AckCode.SUCCESS, data);
    }

}

3、返回消息内容枚举 AckCode.java

@NoArgsConstructor
@AllArgsConstructor
public enum AckCode {

        /**
         * 通用提示
         **/
    COMMON_FRE_OPERATION(203, "服务器频繁,请重试"),
    RATE_LIMATE(201,"访问过于频繁,请稍候再试"),
    DATABASE_ERROR(204,"数据库操作失败"),
    JSON_CONVERT_ERROR(205,"JSON序列化失败"),
    VALIDATE_UNIQUE_ERROR(206,"数据唯一性的验证错误"),

    /*-----Basic-----*/
    SUCCESS(200, "ok"),
    EXISTS_VALUE(506,"该值已被使用"),
    EXISTS_VALUE_ACCOUNT(507,"账户已被使用"),
    EXISTS_VALUE_EMAIL(508,"邮箱已被使用"),
    EXISTS_VALUE_PHONE(509,"手机号已被使用"),

    FAIL(500, "fail"),
    SYSTEM_PARAM_FAIL(400, "参数错误"),
    SYSTEM_TOKEN_FAIL(401, "会话无效,请重新登录"),
    SYSTEM_SIGNATURE_FAIL(402, "签名错误"),
    SYSTEM_DATA_FAIL(500, "系统数据异常"),
    SYSTEM_SERVER_BUSY(501, "服务器繁忙"),
    SYSTEM_SERVER_MAINTAINING(503, "系统维护中"),
    NOT_FOUND_DATA(504, "查询不到数据"),
    NO_PERMISSION_TO_ACCESS(505, "只有管理员才有访问该请求的权限"),
    PERMISSION_NOT_NULL(506,"RequiredPermission权限标识不允许为空"),
    PERMISSION_NOT_ACCESS(507,"没有权限访问该接口"),
    PERMISSION_NOT_STATE_EDIT(508,"没有权限修改用户状态"),
    PERMISSION_NOT_PASSWORD_EDIT(508,"没有权限修改密码"),
    PERMISSION_NOT_ACCESS_CATEGORY(509,"没有权限访问其它商家的数据"),


    /*-------------------登录-------------------*/
    LOGIN_URL_ERROR(600, "登录回调路径错误"),
    JPUSH_LOGIN_ERROR(601, "极光登录失败,请重新登录"),
    ALIYUN_LOGIN_ERROR(602, "阿里云登录失败,请重新登录"),
    GENDER_TYPE_ERROR(603, "性别类型错误"),
    DEVICE_NOT_EXIST(604, "设备不存在"),
    DEVICE_REGISTER_TOO_MUCH(605, "一个设备只能注册10个账号"),
//    LOGIN_BANNED(606, "账号ID:*已被锁定,请联系客服。\n客服QQ:80056867"),
    LOGIN_BANNED(606, "您的账号因违规操作现已被%s,如有疑问,请联系客服!客服QQ:80056867"),
    WITHDRAW_BANNED(607, "提现受限,请联系客服"),
    LOG_OFF(608, "您账号已经注销"),
    DEVICE_BANNED(609, "帐号异常:*已被锁定,请联系客服。\n客服QQ:80056867"),
    APPLE_EXPIRED(610, "token过期"),
    APPLE_ILLEGAL(611, "token非法"),
    APPLE_FAIL(612, "token验证失败"),
    INVITATION_CODE_ERROR(613, "邀请码不正确"),
    TOKEN_FAIL(614,"令牌过期"),
    USERNAME_NOT_BLANK(615,"用户名不能为空"),
    PASSWORD_NOT_BLANK(616,"密码不能为空"),
    CODE_NOT_BLANK(617,"验证码不能为空"),
    CODEUUID_NOT_BLANK(618,"验证码标识不能为空"),
    CODE_NOT_FOUND(620,"验证码过期,请重新获取"),
    CODE_ERROR(621,"验证码错误"),
    TOKEN_NOT_BLANK(619,"令牌不能为空"),
    ACCOUNT_LOGIN_OTHER_DEVICES(622,"该账号在其它地方登录"),

    /*-----User (StartCode: 1000)--------------*/
    USER_PASSWORD_ERROR(1000, "密码错误"),
    USER_NOT_FOUND(1001, "用户不存在"),
    USER_HAS_ACCOUNT(1016, "该账户已存在"),
    USER_PAY_ACCOUNT_IS_BIND(1017, "支付账户已绑定"),
    USER_LOGIN_ACCOUNT_IS_BIND(1018, "该登录账户已绑定"),
    USER_ACCOUNT_AUTH_EXCEPTION(1019, "认证查询异常,接口调用失败"),
    USER_PAY_IS_FAIL(1020, "支付失败"),
    USER_PAY_IS_EXCEPTION(1021, "支付异常"),
    USER_WITHDRAW_LIMIT(1022, "提现受限"),
    USER_ACCOUNT_IS_NOT_BIND(1023, "支付账户未绑定"),
    USER_ACCOUNT_IS_NOT_FOUND(1024, "未找到支付账户"),
    USER_PARAM_IS_NOT_NULL(1025, "参数不能为空"),
    USER_ACCOUNT_UPDATE_COUNT_LIMIT(1026, "账户修改次数当月达到上限"),
    USER_FIRST_CHARGE_COUNT_LIMIT(1027, "首充已达上限"),
    USER_WITHDRAW_STATUS_ERROR(1028, "只有未审核的才能进行操作哟"),
    USER_VIOLATION(1034, "用户涉嫌违规"),
    USER_IS_NOT_MAN(1035, "抱歉您不是男用户"),
    USER_LOG_OFF(1036, "用户已注销"),
    USER_FACE_VERIFY(1037, "您已真人认证"),
    USER_BANNED(1038, "该用户已被封禁"),
	FAMILY_SHARE_LINK_IS_EXPIRE(1114, "家族分享链接已过期"),
	LOGIN_ACCOUNT_PASSWORD_ERROR(1115, "账号或密码错误"),
	LOGIN_PASSWORD_ERROR(1116, "密码错误"),
	LOGIN_PASSWORD_INVALID(1117, "密码不正确"),
	SET_PASSWORD_INVALID(1118, "两次输入密码不一致"),
	OLD_PASSWORD_NOTNULL(1119, "原密码不能为空"),
	OLD_PASSWORD_INVALID(1120, "原密码不正确"),
	OLD_PASSWORD_ERROR(1121, "原密码错误"),
	PHONE_NUMBER_SET_ACCOUNT_INVALID(1122, "该手机号码已经被其他用户绑定"),
	PLEASE_BIND_PHONE_NUMBER(1123, "请先绑定手机号码"),
	PHONE_NUMBER_NOTNULL(1124, "手机号码不能为空"),
	PASSWORD_VERIFY_FAILED(1125, "密码必须是6~16位的数字、字母组合"),
	BUY_LIMIT(1126, "购买受限"),
    TOKEN_SAVE_ERROR(1127,"保留令牌失败"),
    USERNAME_PASSWORD_ERROR(1128,"用户名或密码错误"),
    NOT_MODIFY_OTHER_USER(1129,"你不允许修改别人的数据"),
    PHONE_NUMBER_ERROR(1130, "手机号码格式不正确,只支持(13|14|15|17|18|19)开头的"),
    USERNAME_EXISTS_MOBILE(1131,"用户名存在,要使用手机号再次协助认证"),
    MOBILE_ERROR(1132,"登录的手机号错误"),
    USER_UPDATE_TOKEN_ERROR(1133,"更新数据库的令牌失败")



    private Integer code;

    private String msg;

    /**
     * 获取所有回复码
     *
     * @return
     */
    public static LinkedHashMap<Integer, String> getArrayMessage() {
        LinkedHashMap<Integer, String> responseMessages = new LinkedHashMap<>();
        for (AckCode statusEnum : AckCode.values()) {
            responseMessages.put(statusEnum.code, statusEnum.msg);
        }
        return responseMessages;
    }

    public Integer getCode() {
        return code;
    }


    public String getMsg() {
        return msg;
    }


}

三、具体逻辑实现

1、Controller层

接收前端的请求,判断两次密码是否输的一致,如果不是一致的,直接返回消息,提示两次输入密码不一致,如果一致就调用add方法实现新增,如果新增成功则用200表示,否则提示数据库操作失败,即新增失败!

@RestController
@RequestMapping(value = "/api/employee")
@Api(tags = "后台-员工Api")
public class EmployeeController {
    @Autowired
    private EmployeeService employeeService;

    @ApiOperation(value = "新增")
    @PostMapping
    public R add(@RequestBody @Valid EmployeeAddReq req){
        if (!req.getLoginPwd().equals(req.getLoginPwdConfirm())){
            return R.build(AckCode.SET_PASSWORD_INVALID);
        }
        boolean result=this.employeeService.add(req);
        return result?R.ok():R.build(AckCode.DATABASE_ERROR);
    }

}

2、Service层 

1)EmployeeService.java

    /**
     * 员工新增
     * @param req
     * @return
     */
    boolean add(EmployeeAddReq req);

2)EmployeeServiceImpl.java

逻辑:通过LambdaQueryWrapper构建查询条件来验证账号(手机号)的唯一性(即账号是否已经存在),在账号不存在的情况下,实现新增操作。

    /**
     * 新增
     * @param req
     * @return
     */
    @Override
    public boolean add(EmployeeAddReq req) {
        //验证手机唯一性 select count(0) from employee where login_name=?
        //构建一个查询语句 相当于select * from employee
        LambdaQueryWrapper<Employee> queryWrapper=new LambdaQueryWrapper<>();
        //构建一个查询条件 where login_name=req.loginName?
        queryWrapper.eq(Employee::getLoginName,req.getLoginName());
        //计算个数
        Long count = super.baseMapper.selectCount(queryWrapper);
        if (count.intValue()>0){
            throw new ServiceException(AckCode.EXISTS_VALUE_ACCOUNT);
        }
        Employee employee = new Employee();
        //对象值copy
        BeanUtils.copyProperties(req,employee);

        employee.setRoot("0");

        employee.setCreateTime(new Date());
        employee.setCreateBy("管理员");

        //密码要加密
        String md5Pwd= BCrypt.hashpw(req.getLoginPwd());
        employee.setLoginPwd(md5Pwd);

        return super.save(employee);

    }

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值