蒼穹外賣--新增員工

代碼開發

package com.sky.controller.admin;import com.sky.constant.JwtClaimsConstant;
import com.sky.dto.EmployeeDTO;
import com.sky.dto.EmployeeLoginDTO;
import com.sky.entity.Employee;
import com.sky.properties.JwtProperties;
import com.sky.result.Result;
import com.sky.service.EmployeeService;
import com.sky.utils.JwtUtil;
import com.sky.vo.EmployeeLoginVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.Map;/*** 員工管理*/
@RestController
@RequestMapping("/admin/employee")
@Slf4j
@Api(tags = "員工相關接口")
public class EmployeeController {@Autowiredprivate EmployeeService employeeService;@Autowiredprivate JwtProperties jwtProperties;/*** 新增員工* @param employeeDTO* @return*/@PostMapping@ApiOperation("新增員工")public Result save(@RequestBody EmployeeDTO employeeDTO){log.info("新增員工{}", employeeDTO);employeeService.save(employeeDTO);return Result.success();}
}
package com.sky.service;import com.sky.dto.EmployeeDTO;
import com.sky.dto.EmployeeLoginDTO;
import com.sky.entity.Employee;public interface EmployeeService {/*** 新增員工* @param employeeDTO*/void save(EmployeeDTO employeeDTO);
}
package com.sky.service.impl;import com.sky.constant.MessageConstant;
import com.sky.constant.PasswordConstant;
import com.sky.constant.StatusConstant;
import com.sky.dto.EmployeeDTO;
import com.sky.dto.EmployeeLoginDTO;
import com.sky.entity.Employee;
import com.sky.exception.AccountLockedException;
import com.sky.exception.AccountNotFoundException;
import com.sky.exception.PasswordErrorException;
import com.sky.mapper.EmployeeMapper;
import com.sky.service.EmployeeService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;import java.time.LocalDateTime;@Slf4j
@Service
public class EmployeeServiceImpl implements EmployeeService {@Autowiredprivate EmployeeMapper employeeMapper;/*** 新增員工* @param employeeDTO*/@Overridepublic void save(EmployeeDTO employeeDTO) {Employee employee = new Employee();//        對象屬性拷貝BeanUtils.copyProperties(employeeDTO,employee);//        設置賬號狀態,默認正常狀態,1表示正常0表示禁用employee.setStatus(StatusConstant.ENABLE);//        設置密碼,默認密碼123456employee.setPassword(DigestUtils.md5DigestAsHex(PasswordConstant.DEFAULT_PASSWORD.getBytes()));//        設置創建時間和修改時間employee.setCreateTime(LocalDateTime.now());employee.setUpdateTime(LocalDateTime.now());//        設置創建人id和修改人id
//        TODO 后期需要修改為當前登錄用戶的idemployee.setCreateUser(10L);employee.setUpdateUser(10L);employeeMapper.insert(employee);}}
package com.sky.mapper;import com.sky.entity.Employee;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;@Mapper
public interface EmployeeMapper {/*** 插入員工數據* @param employee*/@Insert("insert into employee (name, username, password, phone, sex, id_number, status,"+"create_time, update_time, create_user, update_user) "+"values (#{name},#{username},#{password},#{phone},#{sex},#{idNumber},#{status},"+"#{createTime},#{updateTime},#{createUser},#{updateUser})")void insert(Employee employee);
}

功能測試

開發階段,后端測試主要以接口文檔測試為主。

先獲得登錄令牌:

通過接口文檔測試

通過前后端聯調測試

代碼完善

程序存在問題

1、錄入的用戶名已存在,拋出異常后沒有處理

2、新增員工時,創建人id和修改人id設置為了固定值

處理

拋出異常

1、先發現異常:把已存在的用戶名,在重新發送。

? ? ? ? idea顯示錯誤

java.sql.SQLIntegrityConstraintViolationException: 
Duplicate entry 'zhangsan' for key 'idx_username'

2、在全局異常處理器中添加該異常

package com.sky.handler;import com.sky.constant.MessageConstant;
import com.sky.exception.BaseException;
import com.sky.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;import java.sql.SQLIntegrityConstraintViolationException;/*** 全局異常處理器,處理項目中拋出的業務異常*/
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {/*** 捕獲業務異常* @param ex* @return*/@ExceptionHandlerpublic Result exceptionHandler(BaseException ex){log.error("異常信息:{}", ex.getMessage());return Result.error(ex.getMessage());}/*** 處理sql重復存在名異常*/@ExceptionHandlerpublic Result exceptionHandler(SQLIntegrityConstraintViolationException ex){
//        Duplicate entry 'zhangsan' for key 'idx_username'String message = ex.getMessage();if(message.contains("Duplicate entry")){String[] split = message.split(" ");
//            獲取用戶名String username = split[2];
//          String msg = username + "已存在";String msg = username + MessageConstant.ALREDY_EXISTS;return Result.error(msg);}else {
//          未知錯誤return Result.error(MessageConstant.UNKNOWN_ERROR);}}}

設置創建人id和修改人id

ThreadLocal 并不是一個Thread,而是Thread的局部變量。 ThreadLocal為每個線程提供單獨一份存儲空間,具有線程隔離的效果,只有在線程內才能獲取到對應的值,線程外則不能訪問。

ThreadLocal常用方法:

public void set(T value) ?? ?設置當前線程的線程局部變量的值

public T get() ?? ??? ?返回當前線程所對應的線程局部變量的值

public void remove() ? ? ? ?移除當前線程的線程局部變量

package com.sky.context;public class BaseContext {public static ThreadLocal<Long> threadLocal = new ThreadLocal<>();public static void setCurrentId(Long id) {threadLocal.set(id);}public static Long getCurrentId() {return threadLocal.get();}public static void removeCurrentId() {threadLocal.remove();}}

        employee.setCreateUser(BaseContext.getCurrentId());employee.setUpdateUser(BaseContext.getCurrentId());

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/42607.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42607.shtml
英文地址,請注明出處:http://en.pswp.cn/web/42607.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Springboot各個版本維護時間

Springboot各個版本維護時間

MQTT教程--服務器使用EMQX和客戶端使用MQTTX

什么是MQTT MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一種輕量級、基于發布-訂閱模式的消息傳輸協議&#xff0c;適用于資源受限的設備和低帶寬、高延遲或不穩定的網絡環境。它在物聯網應用中廣受歡迎&#xff0c;能夠實現傳感器、執行器和其它設備…

【Linux】shell基礎知識點(updating)

1.輸出重定向2.多命令批量執行&#xff08;; 、&&、 ||&#xff09;3.腳本不同方式執行的區別&#xff08;source、bash、sh、./&#xff09;4.理解環境變量5.export6.引號的使用last.命令相關 1.輸出重定向 3種數據流&#xff1a; stdin&#xff1a;標準輸入&#xf…

jmeter持續學習之----性能初級一些概念和指標

服務端為什么要進行性能測試 大量用戶下&#xff0c;系統能否穩定運行&#xff08;比較多&#xff09; 用于硬件服務器的選型 用于軟件技術的選型 性能測試關注的點 用戶角度:響應時間 資源占用:并發用戶數,TPS,資源占用(cpu,內存,JVM) 性能測試策略 基準測試:單用戶測試,對…

去了字節跳動,才知道年薪40W的測試有這么多?

最近脈脈職言區有一條討論火了&#xff1a; 哪家互聯網公司薪資最‘厲害’&#xff1f; 下面的評論多為字節跳動&#xff0c;還炸出了很多年薪40W的測試工程師 我只想問一句&#xff0c;現在的測試都這么有錢了嗎&#xff1f; 前幾天還有朋友說&#xff0c;從騰訊跳槽去了字節&…

8.8.8.8 IP地址的作用

在跟著韋東山老師的學習手冊中看見了關于8.8.8.8 IP用于檢測網絡狀態&#xff0c;然后搜索了關于此IP的相關作用如下&#xff1a; 公共DNS服務&#xff1a;8.8.8.8是Google提供的兩個公共DNS服務器地址之一&#xff08;另一個是8.8.4.4&#xff09;。DNS&#xff08;域名系統&a…

代碼隨想錄訓練營第三十天 452用最少數量的箭引爆氣球 435無重疊區間 763劃分字母區間

第一題&#xff1a; 原題鏈接&#xff1a;452. 用最少數量的箭引爆氣球 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;先根據每個元素的第一個值進行排序&#xff0c;然后從第一個元素開始遍歷&#xff0c;這里要注意我們初始化結果值的時候直接初始化為1&#x…

強化基石,引領未來:完善配套設施與提升服務水平

完善配套設施與提升服務水平對于產業園運營具有重要意義。它們不僅能夠提升園區的硬件環境和整體形象&#xff0c;增強園區的吸引力和競爭力&#xff1b;還能夠優化營商環境&#xff0c;降低企業運營成本&#xff0c;提高運營效率&#xff1b;同時推動園區創新&#xff0c;形成…

基于Java技術的網吧管理系統

你好呀&#xff0c;我是計算機學姐碼農小野&#xff01;如果有相關需求&#xff0c;可以私信聯系我。 開發語言&#xff1a;Java 數據庫&#xff1a;MySQL 技術&#xff1a;Java技術&#xff0c;B/S結構 工具&#xff1a;MyEclipse&#xff0c;MySQL 系統展示 首頁 個人中…

PDF轉Markdown的開源工具解析

Marker&#xff1a;PDF轉Markdown的開源工具解析 Marker是一個由VikParuchuri在GitHub上開發的開源項目&#xff0c;其核心功能是將PDF文件轉換為Markdown格式。以下是對Marker項目的詳細解析&#xff1a; 項目概述&#xff1a; 項目鏈接&#xff1a;https://github.com/VikP…

【技術追蹤】DiffuMatting:使用摳圖級別注釋合成任意對象(ECCV-2024)

萬物生&#xff1a;Diffusion與綠幕摳圖&#xff0c;影視領域的福音~ 論文&#xff1a;DiffuMatting: Synthesizing Arbitrary Objects with Matting-level Annotation 代碼&#xff1a;https://github.com/HUuxiaobin/DiffuMatting &#xff08;即將開源&#xff09; 0、摘要 …

2024年06月CCF-GESP編程能力等級認證C++編程一級真題解析

本文收錄于專欄《C等級認證CCF-GESP真題解析》&#xff0c;專欄總目錄&#xff1a;點這里。訂閱后可閱讀專欄內所有文章。 一、單選題&#xff08;每題 2 分&#xff0c;共 30 分&#xff09; 第 1 題 在C中&#xff0c;下列不可做變量的是( )。 A. five-Star B. five_star C…

(補充):java各種進制和文本、圖像、音頻在計算機中的存儲方式

文章目錄 前言一、進制1 逢幾進一2 常見進制在java中的表示3 進制中的轉換(1)任意進制轉十進制(2)十進制轉其他進制二、計算機中的存儲1 計算機的存儲規則(文本數據)(1)ASCII碼表(2)編碼規則的發展演化2 計算機的存儲規則(圖片數據)(1)分辨率、像素(2)黑白圖與灰度…

Knife4j的介紹與使用

目錄 一、簡單介紹1.1 簡介1.2 主要特點和功能&#xff1a; 二、使用步驟&#xff1a;2.1 添加依賴&#xff1a;2.2 yml數據源配置2.3 創建knife4j配置類2.4 注解的作用 最后 一、簡單介紹 1.1 簡介 Knife4j 是一款基于Swagger的開源文檔管理工具&#xff0c;主要用于生成和管…

Java客戶端調用SOAP方式的WebService服務實現方式分析

簡介 在多系統交互中&#xff0c;有時候需要以Java作為客戶端來調用SOAP方式的WebService服務&#xff0c;本文通過分析不同的調用方式&#xff0c;以Demo的形式&#xff0c;幫助讀者在生產實踐中選擇合適的調用方式。 本文JDK環境為JDK17。 結論 推薦使用Axis2或者Jaxws&#…

拆分pdf文件最簡單的方法,pdf怎么拆成一頁一張

在數字化的時代&#xff0c;pdf文件已經成為我們日常辦公、學習不可或缺的文檔格式。然而&#xff0c;有時候我們可能需要對一個大的pdf文件進行拆分&#xff0c;以方便管理和分享。那么&#xff0c;如何將一個pdf文件拆分成多個pdf呢&#xff1f;本文將為你推薦一種好用的拆分…

PLSQL Day4

--使用顯式游標更新行&#xff0c;對所有salesman增加500獎金&#xff1a; declare cursor s_cursor is select * from emp where job SALESMAN for update; begin for e_s in s_cursor loop update emp set comm nvl(comm,0)500 where current of s_cur…

AFT:Attention Free Transformer論文筆記

原文鏈接 2105.14103 (arxiv.org) 原文翻譯 Abstract 我們介紹了 Attention Free Transformer (AFT)&#xff0c;這是 Transformer [1] 的有效變體&#xff0c;它消除了點積自注意力的需要。在 AFT 層&#xff0c;鍵key和值value首先與一組學習的位置偏差position biases相結…

ubuntu22安裝Docker并配置

安裝Docker sudo apt install docker.io使用腳本自動安裝docker&#xff1a; curl -fsSL get.docker.com -o get-docker.sh sudo sh get-docker.sh --mirror Aliyun配置國內鏡像 /etc/docker/daemon.json 推薦配置&#xff1a; {"registry-mirrors": ["htt…

Lab1 論文 MapReduce

目錄 &#x1f339;前言 &#x1f985;2 Programming Model &#x1f33c;2.1 Example &#x1f33c;2.2 Types &#x1f33c;2.3 More Examples &#x1f985;3 Implementation(實現) &#x1f33c;3.1 ~ 3.3 &#x1f33c;3.4 ~ 3.6 &#x1f985;4 Refinemen…