基於Java+Springmvc+vue+element員工資訊管理系統詳細設計

語言: CN / TW / HK

theme: github

持續創作,加速成長!這是我參與「掘金日新計劃 · 6 月更文挑戰」的第2天,點選檢視活動詳情

前言介紹:

系統管理也都將通過計算機進行整體智慧化操作,對於企業員工考勤管理系統所牽扯的管理及資料儲存都是非常多的,這給管理者的工作帶來了巨大的挑戰,面對大量的資訊,傳統的管理系統,都是通過筆記的方式進行詳細資訊的統計,後來出現電腦,通過電腦輸入軟體將紙質的資訊統計到電腦上,這種方式比較傳統,而且想要統計資料資訊比較麻煩,還受時間和空間的影響,所以為此開發了企業員工考勤管理系統;為使用者提供了方便管理平臺,方便管理員檢視及維護,並且可以通過需求進行裝置資訊內容的編輯及維護等;對於使用者而言,可以隨時進行檢視企業員工資訊,管理員可以足不出戶就可以獲取到系統的資料資訊等,而且還能節省使用者很多時間,所以開發企業員工考勤管理系統給管理者帶來了很大的方便,同時也方便管理員對使用者資訊進行處理。

本論文企業員工考勤管理系統主要牽扯到的程式,資料庫與計算機技術等。覆蓋知識面大,可以大大的提高系統人員工作效率。

系統設計:

系統功能分析和描述

使用企業員工考勤管理系統系統的使用者分管理員和員工兩個角色的許可權子模組。

管理員所能使用的功能主要有首頁、個人中心、員工管理、企業部門管理、年度考勤管理、每日考勤管理、請假資訊管理、工資資訊管理、調動資訊管理、管理員管理等。

員工所能使用的功能主要有首頁、個人中心、企業部門管理、年度考勤管理、每日考勤管理、請假資訊管理、工資資訊管理、調動資訊管理等。

系統UML用例分析

管理員用例

管理員登入後可進行首頁、個人中心、員工管理、企業部門管理、年度考勤管理、每日考勤管理、請假資訊管理、工資資訊管理、調動資訊管理、管理員管理,管理員使用者的用例如圖3-1所示。

​編輯

員工用例

員工登入後可進行首頁、個人中心、企業部門管理、年度考勤管理、每日考勤管理、請假資訊管理、工資資訊管理、調動資訊管理,員工用例如圖3-2所示。

​編輯

系統功能結構如圖所示。

​編輯

功能截圖:

使用者登入: 管理員通過使用者名稱和密碼,密碼填寫完成後選則提交,如圖5-1所示。管理員登入成功後進入到系統操作介面,可以對首頁、個人中心、員工管理、企業部門管理、年度考勤管理、每日考勤管理、請假資訊管理、工資資訊管理、調動資訊管理、管理員管理等功能模組進行相對應操作

​編輯

員工管理: 通過列表可以獲取索引、工號、密碼、姓名、性別、頭像、部門、職位、電話等資訊,進行調動、工資、修改或刪除操作

​編輯

員工工資資訊:

​編輯

部門管理: 通過列表可以獲取索引、部門名稱、部門主管、部門人數、部門職責、日期等資訊,進行詳情、修改或刪除操作

​編輯

考勤管理: 通過列表可以獲取索引、名稱、年份、工號、姓名、部門、職位、遲到次數、早退次數、請假次數、曠工次數等資訊,進行詳情、修改或刪除操作

​編輯

​編輯

​編輯

請假管理: 通過列表可以獲取索引、名稱、請假日期、請假天數、請假內容、工號、姓名、部門、職位、稽核回覆、稽核狀態、稽核等資訊,進行詳情、修改或刪除操作

​編輯

請假稽核:

​編輯

工資管理: 通過列表可以獲取索引、名稱、工號、姓名、部門、職位、基本工資、加班工資、福利、社保、扣費、實發工資、日期、是否支付等資訊,進行詳情、修改或刪除操作

​編輯

工資統計報表:

​編輯

調動管理: 通過列表可以獲取索引、名稱、工號、姓名、部門、職位、調動日期、調動理由等資訊

​編輯

普通使用者: 員工點選後臺進入到系統操作介面,可以對首頁、個人中心、企業部門管理、年度考勤管理、每日考勤管理、請假資訊管理、工資資訊管理、調動資訊管理等功能模組進行相應操作

​編輯

資料設計:

資料庫設計原則

每個資料庫的應用它們都是和區分開的,當執行到一定的程式當中,它就會與自己相關的協議與客戶端進行通訊。那麼這個系統就會對使這些資料進行連線。當我們選擇哪個橋段的時候,接下來就會簡單的敘述這個資料庫是如何來建立的。當點選完成按鈕的時候就會自動在對話方塊內彈出資料來源的名稱,在進行點選下一步即可,直接在輸入相對應的身份驗證和登入密碼。

企業員工考勤管理系統的資料流程:

​編輯

企業部門管理實體E-R圖,如圖所示。

​編輯

工資資訊管理E-R圖,如圖所示。

​編輯

主要程式碼:

檔案圖片上傳:

```java / * 上傳檔案對映表 */ @RestController @RequestMapping("file") @SuppressWarnings({"unchecked","rawtypes"}) public class FileController{ @Autowired private ConfigService configService; / * 上傳檔案 / @RequestMapping("/upload") public R upload(@RequestParam("file") MultipartFile file, String type,HttpServletRequest request) throws Exception { if (file.isEmpty()) { throw new EIException("上傳檔案不能為空"); } String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1); String fileName = new Date().getTime()+"."+fileExt; File dest = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+fileName); file.transferTo(dest); / * 如果使用idea或者eclipse重啟專案,發現之前上傳的圖片或者檔案丟失,將下面一行程式碼註釋開啟 * 請將以下的"D:\ssmpiv99\src\main\webapp\upload"替換成你本地專案的upload路徑, * 並且專案路徑不能存在中文、空格等特殊字元 / // FileUtils.copyFile(dest, new File("D:\ssmpiv99\src\main\webapp\upload"+"/"+fileName)); /修改了路徑以後請將該行最前面的//註釋去掉/ if(StringUtils.isNotBlank(type) && type.equals("1")) { ConfigEntity configEntity = configService.selectOne(new EntityWrapper().eq("name", "faceFile")); if(configEntity==null) { configEntity = new ConfigEntity(); configEntity.setName("faceFile"); configEntity.setValue(fileName); } else { configEntity.setValue(fileName); } configService.insertOrUpdate(configEntity); } return R.ok().put("file", fileName); }

/**
 * 下載檔案
 */
@IgnoreAuth
@RequestMapping("/download")
public void download(@RequestParam String fileName, HttpServletRequest request, HttpServletResponse response) {
    try {
        File file = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+fileName);
        if (file.exists()) {
            response.reset();
            response.setHeader("Content-Disposition", "attachment; filename="" + fileName+""");
            response.setHeader("Cache-Control", "no-cache");
            response.setHeader("Access-Control-Allow-Credentials", "true");
            response.setContentType("application/octet-stream; charset=UTF-8");
            IOUtils.write(FileUtils.readFileToByteArray(file), response.getOutputStream());
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
}

} ```

使用者相關controller:

```java /* * 員工 * 後端介面 * @author * @email * @date 2022-03-15 19:41:08 / @RestController @RequestMapping("/yuangong") public class YuangongController { @Autowired private YuangongService yuangongService;

@Autowired
private TokenService tokenService;

/**
 * 登入
 */
@IgnoreAuth
@RequestMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
    YuangongEntity user = yuangongService.selectOne(new EntityWrapper<YuangongEntity>().eq("gonghao", username));
    if(user==null || !user.getMima().equals(password)) {
        return R.error("賬號或密碼不正確");
    }
    String token = tokenService.generateToken(user.getId(), username,"yuangong",  "員工" );
    return R.ok().put("token", token);
}

/**
 * 註冊
 */
@IgnoreAuth
@RequestMapping("/register")
public R register(@RequestBody YuangongEntity yuangong){
    //ValidatorUtils.validateEntity(yuangong);
    YuangongEntity user = yuangongService.selectOne(new EntityWrapper<YuangongEntity>().eq("gonghao", yuangong.getGonghao()));
    if(user!=null) {
        return R.error("註冊使用者已存在");
    }
    Long uId = new Date().getTime();
    yuangong.setId(uId);
    yuangongService.insert(yuangong);
    return R.ok();
}


/**
 * 退出
 */
@RequestMapping("/logout")
public R logout(HttpServletRequest request) {
    request.getSession().invalidate();
    return R.ok("退出成功");
}

/**
 * 獲取使用者的session使用者資訊
 */
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request){
    Long id = (Long)request.getSession().getAttribute("userId");
    YuangongEntity user = yuangongService.selectById(id);
    return R.ok().put("data", user);
}

/**
 * 密碼重置
 */
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request){
    YuangongEntity user = yuangongService.selectOne(new EntityWrapper<YuangongEntity>().eq("gonghao", username));
    if(user==null) {
        return R.error("賬號不存在");
    }
    user.setMima("123456");
    yuangongService.updateById(user);
    return R.ok("密碼已重置為:123456");
}


/**
 * 後端列表
 */
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,YuangongEntity yuangong, 
    HttpServletRequest request){

    EntityWrapper<YuangongEntity> ew = new EntityWrapper<YuangongEntity>();
    PageUtils page = yuangongService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yuangong), params), params));
    return R.ok().put("data", page);
}

/**
 * 前端列表
 */
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,YuangongEntity yuangong, 
    HttpServletRequest request){
    EntityWrapper<YuangongEntity> ew = new EntityWrapper<YuangongEntity>();
    PageUtils page = yuangongService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yuangong), params), params));
    return R.ok().put("data", page);
}

/**
 * 列表
 */
@RequestMapping("/lists")
public R list( YuangongEntity yuangong){
    EntityWrapper<YuangongEntity> ew = new EntityWrapper<YuangongEntity>();
    ew.allEq(MPUtil.allEQMapPre( yuangong, "yuangong")); 
    return R.ok().put("data", yuangongService.selectListView(ew));
}

 /**
 * 查詢
 */
@RequestMapping("/query")
public R query(YuangongEntity yuangong){
    EntityWrapper< YuangongEntity> ew = new EntityWrapper< YuangongEntity>();
    ew.allEq(MPUtil.allEQMapPre( yuangong, "yuangong")); 
    YuangongView yuangongView =  yuangongService.selectView(ew);
    return R.ok("查詢員工成功").put("data", yuangongView);
}

/**
 * 後端詳情
 */
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
    YuangongEntity yuangong = yuangongService.selectById(id);
    return R.ok().put("data", yuangong);
}

/**
 * 前端詳情
 */
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
    YuangongEntity yuangong = yuangongService.selectById(id);
    return R.ok().put("data", yuangong);
}




/**
 * 後端儲存
 */
@RequestMapping("/save")
public R save(@RequestBody YuangongEntity yuangong, HttpServletRequest request){
    yuangong.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    //ValidatorUtils.validateEntity(yuangong);
    YuangongEntity user = yuangongService.selectOne(new EntityWrapper<YuangongEntity>().eq("gonghao", yuangong.getGonghao()));
    if(user!=null) {
        return R.error("使用者已存在");
    }

    yuangong.setId(new Date().getTime());
    yuangongService.insert(yuangong);
    return R.ok();
}

/**
 * 前端儲存
 */
@RequestMapping("/add")
public R add(@RequestBody YuangongEntity yuangong, HttpServletRequest request){
    yuangong.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    //ValidatorUtils.validateEntity(yuangong);
    YuangongEntity user = yuangongService.selectOne(new EntityWrapper<YuangongEntity>().eq("gonghao", yuangong.getGonghao()));
    if(user!=null) {
        return R.error("使用者已存在");
    }

    yuangong.setId(new Date().getTime());
    yuangongService.insert(yuangong);
    return R.ok();
}

/**
 * 修改
 */
@RequestMapping("/update")
public R update(@RequestBody YuangongEntity yuangong, HttpServletRequest request){
    //ValidatorUtils.validateEntity(yuangong);
    yuangongService.updateById(yuangong);//全部更新
    return R.ok();
}


/**
 * 刪除
 */
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
    yuangongService.deleteBatchIds(Arrays.asList(ids));
    return R.ok();
}

/**
 * 提醒介面
 */
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
                     @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
    map.put("column", columnName);
    map.put("type", type);

    if(type.equals("2")) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar c = Calendar.getInstance();
        Date remindStartDate = null;
        Date remindEndDate = null;
        if(map.get("remindstart")!=null) {
            Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
            c.setTime(new Date()); 
            c.add(Calendar.DAY_OF_MONTH,remindStart);
            remindStartDate = c.getTime();
            map.put("remindstart", sdf.format(remindStartDate));
        }
        if(map.get("remindend")!=null) {
            Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
            c.setTime(new Date());
            c.add(Calendar.DAY_OF_MONTH,remindEnd);
            remindEndDate = c.getTime();
            map.put("remindend", sdf.format(remindEndDate));
        }
    }

    Wrapper<YuangongEntity> wrapper = new EntityWrapper<YuangongEntity>();
    if(map.get("remindstart")!=null) {
        wrapper.ge(columnName, map.get("remindstart"));
    }
    if(map.get("remindend")!=null) {
        wrapper.le(columnName, map.get("remindend"));
    }


    int count = yuangongService.selectCount(wrapper);
    return R.ok().put("count", count);
}

} ```

資料庫連線配置:

jdbc_url=jdbc:mysql://127.0.0.1:3306/ssmuw3c9_1?useUnicode=true&characterEncoding=UTF-8&tinyInt1isBit=false jdbc_username=root jdbc_password=123456

論文參考:

​編輯

原始碼獲取:

大家點贊、收藏、關注、評論啦 、檢視👇🏻👇🏻👇🏻主頁獲取聯絡方式👇🏻👇🏻👇🏻

打卡 文章 更新 253/  365天

「其他文章」