commit 948fed4a7cef86256773cfce4950168713322761 Author: lhb <495598773@qq.com> Date: Sun May 4 11:02:42 2025 +0800 棣栨鎻愪氦 diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..ff1bed4 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..fec7c80 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..52b9706 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..a8fc129 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..745a757 --- /dev/null +++ b/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2018 evo + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/bin/clean.bat b/bin/clean.bat new file mode 100644 index 0000000..24c0974 --- /dev/null +++ b/bin/clean.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [信息] 清理工程target生成路径。 +echo. + +%~d0 +cd %~dp0 + +cd .. +call mvn clean + +pause \ No newline at end of file diff --git a/bin/package.bat b/bin/package.bat new file mode 100644 index 0000000..c693ec0 --- /dev/null +++ b/bin/package.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [信息] 打包Web工程,生成war/jar包文件。 +echo. + +%~d0 +cd %~dp0 + +cd .. +call mvn clean package -Dmaven.test.skip=true + +pause \ No newline at end of file diff --git a/bin/run.bat b/bin/run.bat new file mode 100644 index 0000000..41efbd0 --- /dev/null +++ b/bin/run.bat @@ -0,0 +1,14 @@ +@echo off +echo. +echo [信息] 使用Jar命令运行Web工程。 +echo. + +cd %~dp0 +cd ../ruoyi-admin/target + +set JAVA_OPTS=-Xms256m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m + +java -jar %JAVA_OPTS% ruoyi-admin.jar + +cd bin +pause \ No newline at end of file diff --git a/evo-admin/pom.xml b/evo-admin/pom.xml new file mode 100644 index 0000000..bb9724a --- /dev/null +++ b/evo-admin/pom.xml @@ -0,0 +1,229 @@ + + + + evo + com.evo + 3.8.8 + + 4.0.0 + jar + evo-tech + + + web鏈嶅姟鍏ュ彛 + + + + + + + org.springframework.boot + spring-boot-devtools + true + + + + + io.springfox + springfox-boot-starter + + + + + io.swagger + swagger-models + 1.6.2 + + + + + mysql + mysql-connector-java + + + + + org.springframework.boot + spring-boot-starter-web + + + + + org.springframework.boot + spring-boot-starter-aop + + + + + com.alibaba + druid-spring-boot-starter + + + + + com.github.oshi + oshi-core + + + + + org.apache.velocity + velocity-engine-core + + + + + org.springframework + spring-context-support + + + + + org.springframework + spring-web + + + + + org.springframework.boot + spring-boot-starter-security + + + + + com.github.pagehelper + pagehelper-spring-boot-starter + + + + + org.springframework.boot + spring-boot-starter-validation + + + + + org.apache.commons + commons-lang3 + + + + + com.fasterxml.jackson.core + jackson-databind + + + + + com.alibaba.fastjson2 + fastjson2 + + + + + commons-io + commons-io + + + + + org.apache.poi + poi-ooxml + + + + + com.itextpdf + itextpdf + 5.5.13 + + + + org.apache.pdfbox + fontbox + 2.0.9 + + + + + org.yaml + snakeyaml + + + + + io.jsonwebtoken + jjwt + + + + + javax.xml.bind + jaxb-api + + + + + org.springframework.boot + spring-boot-starter-data-redis + + + + + org.apache.commons + commons-pool2 + + + + + eu.bitwalker + UserAgentUtils + + + + + javax.servlet + javax.servlet-api + + + + + org.springframework.boot + spring-boot-starter-websocket + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + 2.5.15 + + true + + + + + repackage + + + + + + org.apache.maven.plugins + maven-war-plugin + 3.1.0 + + false + ${project.artifactId} + + + + ${project.artifactId} + + + diff --git a/evo-admin/src/main/java/com/evo/EvoApplication.java b/evo-admin/src/main/java/com/evo/EvoApplication.java new file mode 100644 index 0000000..76686d8 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/EvoApplication.java @@ -0,0 +1,22 @@ +package com.evo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.scheduling.annotation.EnableScheduling; + +/** + * 鍚姩绋嬪簭 + * + * @author evo + */ +@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) +@EnableScheduling +public class EvoApplication +{ + public static void main(String[] args) + { + SpringApplication.run(EvoApplication.class, args); + System.out.println("(鈾モ棤鈥库棤)锞夛緸 ***************************************************************************************************************************** ERP 鍚姩鎴愬姛 ************************************************************************************************************************ 醿(麓凇`醿)锞 \n"); + } +} diff --git a/evo-admin/src/main/java/com/evo/EvoServletInitializer.java b/evo-admin/src/main/java/com/evo/EvoServletInitializer.java new file mode 100644 index 0000000..7361190 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/EvoServletInitializer.java @@ -0,0 +1,18 @@ +package com.evo; + +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; + +/** + * web瀹瑰櫒涓繘琛岄儴缃 + * + * @author evo + */ +public class EvoServletInitializer extends SpringBootServletInitializer +{ + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) + { + return application.sources(EvoApplication.class); + } +} diff --git a/evo-admin/src/main/java/com/evo/attendance/controller/PunchTheClockController.java b/evo-admin/src/main/java/com/evo/attendance/controller/PunchTheClockController.java new file mode 100644 index 0000000..4fd9f82 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/controller/PunchTheClockController.java @@ -0,0 +1,62 @@ +package com.evo.attendance.controller; + +import com.evo.attendance.service.PunchTheClockService; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import javax.annotation.Resource; + + +@RestController +@RequestMapping("/api/v1") +public class PunchTheClockController { + + @Resource + private PunchTheClockService punchTheClockService; + + /** + * 鍒疯劯鑾峰彇鎵撳崱鎸夐挳鏉冮檺 + * sn 璁惧鍙 + * type 璁惧璇嗗埆绫诲瀷 + * user_id 鐢ㄦ埛id + * card 浜哄憳淇℃伅涓殑鍗″彿 + * confidence 浜鸿劯绠楁硶璇嗗埆鍒扮殑鐩歌瘑搴 + * temperature 娴嬮噺鍒扮殑娓╁害锛屾湭寮鍚祴娓╃殑璁惧涓虹┖ + * + * 鍝嶅簲锛 Result 杩斿洖璇锋眰绫诲瀷锛0锛氬彲浠ユ墦鍗★紝鍏跺畠鍊艰〃绀烘棤娉曟墦鍗 + * Msg 瀵瑰簲 Result 鐨勭姸鎬侊紝鍙负绌 + * Content 璇嗗埆鍚庤繑鍥炵殑璇︾粏淇℃伅 + * button 9浣嶉暱搴︾殑瀛楃涓诧紝0 琛ㄧず涓嶅彲浠ョ偣鍑 1 琛ㄧず鍙互鐐瑰嚮 + * + * String sn,String type,String userId,String card,String confidence + */ + @RequestMapping("/verify_user") + public String verifyUser(@RequestBody String json){ + return punchTheClockService.returnMessage(json); + } + + /** + * 鐢ㄦ埛鐐瑰嚮鎵撳崱鎸夐挳鍚庤姹傜殑鎺ュ彛 + * sn 璁惧鍙 + * user_id 浜哄憳id + * user_name 鐢ㄦ埛鍚 + * user_type 鐢ㄦ埛绫诲瀷锛屽搴斾笅鍙戜汉鍛樻椂鐨 user_type + * card_number 鍗″彿 + * recog_type 璇嗗埆绫诲瀷: face - 涓轰汉鑴歌瘑鍒 銆乧ard - 鍒峰崱寮闂紝浜鸿劯鎴栧崱妯″紡 + * recog_time 璇嗗埆鏃堕棿(鏃堕棿鏍煎紡yyyy-MM-dd HH:mm:ss) + * photo 璇嗗埆鐓х墖锛屾湇鍔$鏀跺埌鍚庤浆鎹㈡垚鍥剧墖姝ラ璇锋煡鐪 2銆佹湇鍔¤鑼 - 鐓х墖瑙g爜娴佺▼ + * body_temperature 浣撴俯 + * confidence 閫氳繃鐨勭疆淇″害 + * button 1~9 琛ㄧず鐐瑰嚮鐨勬槸绗嚑涓寜閽 + * + * 鍝嶅簲锛歊esult 杩斿洖璇锋眰绫诲瀷锛0鎴愬姛锛屽叾瀹冨け璐 + * Msg 瀵瑰簲 Result 鐨勬枃鏈俊鎭 + * + * String sn,String userId,String userName,String userType,String cardNumber,String recog_type,String recog_time,String photo,String body_temperature,String confidence,String button + */ + @RequestMapping("/record/face") + public String face(@RequestBody String json){ + return punchTheClockService.recordFace(json); + } + +} diff --git a/evo-admin/src/main/java/com/evo/attendance/controller/RzAbnormalController.java b/evo-admin/src/main/java/com/evo/attendance/controller/RzAbnormalController.java new file mode 100644 index 0000000..2c86127 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/controller/RzAbnormalController.java @@ -0,0 +1,106 @@ +package com.evo.attendance.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import com.evo.attendance.domain.RzAbnormalDetail; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.enums.BusinessType; +import com.evo.attendance.domain.RzAbnormal; +import com.evo.attendance.service.IRzAbnormalService; +import com.evo.common.utils.poi.ExcelUtil; +import com.evo.common.core.page.TableDataInfo; + +/** + * 鑰冨嫟寮傚父Controller + * + * @author evo + * @date 2025-03-10 + */ +@RestController +@RequestMapping("/attendance/abnormal") +public class RzAbnormalController extends BaseController +{ + @Autowired + private IRzAbnormalService rzAbnormalService; + + /** + * 鏌ヨ鑰冨嫟寮傚父鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('attendance:abnormal:list')") + @GetMapping("/list") + public TableDataInfo list(RzAbnormal rzAbnormal) + { + startPage(); + List list = rzAbnormalService.selectRzAbnormalList(rzAbnormal); + return getDataTable(list); + } + + /** + * 瀵煎嚭鑰冨嫟寮傚父鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('attendance:abnormal:export')") + @Log(title = "鑰冨嫟寮傚父", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, RzAbnormal rzAbnormal) + { + List list = rzAbnormalService.selectRzAbnormalList(rzAbnormal); + ExcelUtil util = new ExcelUtil(RzAbnormal.class); + util.exportExcel(response, list, "鑰冨嫟寮傚父鏁版嵁"); + } + + /** + * 鑾峰彇鑰冨嫟寮傚父璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('attendance:abnormal:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(rzAbnormalService.selectRzAbnormalById(id)); + } + + /** + * 淇敼鑰冨嫟寮傚父 + */ + @PreAuthorize("@ss.hasPermi('attendance:abnormal:edit')") + @Log(title = "鑰冨嫟寮傚父", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody RzAbnormal rzAbnormal) + { + return toAjax(rzAbnormalService.updateRzAbnormal(rzAbnormal)); + } + + /** + * 鍒犻櫎鑰冨嫟寮傚父 + */ + @PreAuthorize("@ss.hasPermi('attendance:abnormal:remove')") + @Log(title = "鑰冨嫟寮傚父", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public AjaxResult remove(@PathVariable Long id) + { + return toAjax(rzAbnormalService.deleteRzAbnormalById(id)); + } + + /** + * 寮傚父璇︽儏 + * @param rzAbnormal + * @return + */ + @GetMapping("/listAbnormalDetails") + public List listAbnormalDetails(RzAbnormal rzAbnormal) + { + return rzAbnormalService.listAbnormalDetails(rzAbnormal); + } +} diff --git a/evo-admin/src/main/java/com/evo/attendance/controller/RzAbnormalDetailController.java b/evo-admin/src/main/java/com/evo/attendance/controller/RzAbnormalDetailController.java new file mode 100644 index 0000000..002924b --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/controller/RzAbnormalDetailController.java @@ -0,0 +1,93 @@ +package com.evo.attendance.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.enums.BusinessType; +import com.evo.attendance.domain.RzAbnormalDetail; +import com.evo.attendance.service.IRzAbnormalDetailService; +import com.evo.common.utils.poi.ExcelUtil; +import com.evo.common.core.page.TableDataInfo; + +/** + * 鑰冨嫟寮傚父璇︽儏Controller + * + * @author evo + * @date 2025-03-10 + */ +@RestController +@RequestMapping("/attendance/abnormalDetail") +public class RzAbnormalDetailController extends BaseController +{ + @Autowired + private IRzAbnormalDetailService rzAbnormalDetailService; + + /** + * 鏌ヨ鑰冨嫟寮傚父璇︽儏鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('attendance:abnormalDetail:list')") + @GetMapping("/list") + public TableDataInfo list(RzAbnormalDetail rzAbnormalDetail) + { + startPage(); + List list = rzAbnormalDetailService.selectRzAbnormalDetailList(rzAbnormalDetail); + return getDataTable(list); + } + + /** + * 瀵煎嚭鑰冨嫟寮傚父璇︽儏鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('attendance:abnormalDetail:export')") + @Log(title = "鑰冨嫟寮傚父璇︽儏", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, RzAbnormalDetail rzAbnormalDetail) + { + List list = rzAbnormalDetailService.selectRzAbnormalDetailList(rzAbnormalDetail); + ExcelUtil util = new ExcelUtil(RzAbnormalDetail.class); + util.exportExcel(response, list, "鑰冨嫟寮傚父璇︽儏鏁版嵁"); + } + + /** + * 鑾峰彇鑰冨嫟寮傚父璇︽儏璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('attendance:abnormalDetail:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(rzAbnormalDetailService.selectRzAbnormalDetailById(id)); + } + + /** + * 淇敼鑰冨嫟寮傚父璇︽儏 + */ + @PreAuthorize("@ss.hasPermi('attendance:abnormalDetail:edit')") + @Log(title = "鑰冨嫟寮傚父璇︽儏", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody RzAbnormalDetail rzAbnormalDetail) + { + return toAjax(rzAbnormalDetailService.updateRzAbnormalDetail(rzAbnormalDetail)); + } + + /** + * 鍒犻櫎鑰冨嫟寮傚父璇︽儏 + */ + @PreAuthorize("@ss.hasPermi('attendance:abnormalDetail:remove')") + @Log(title = "鑰冨嫟寮傚父璇︽儏", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public AjaxResult remove(@PathVariable Long id) + { + return toAjax(rzAbnormalDetailService.deleteRzAbnormalDetailById(id)); + } +} diff --git a/evo-admin/src/main/java/com/evo/attendance/controller/RzAttendanceController.java b/evo-admin/src/main/java/com/evo/attendance/controller/RzAttendanceController.java new file mode 100644 index 0000000..f0633c6 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/controller/RzAttendanceController.java @@ -0,0 +1,105 @@ +package com.evo.attendance.controller; + +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.poi.ExcelUtil; +import com.evo.attendance.domain.RzAttendance; +import com.evo.attendance.service.IRzAttendanceService; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鑰冨嫟璁板綍Controller + * + * @author chenyj + * @date 2024-09-05 + */ +@RestController +@RequestMapping("/attendance/attendance") +public class RzAttendanceController extends BaseController +{ + @Resource + private IRzAttendanceService rzAttendanceService; + + /** + * 鏌ヨ鑰冨嫟璁板綍鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('attendance:attendance:list')") + @GetMapping("/list") + public TableDataInfo list(RzAttendance rzAttendance) + { + startPage(); + List list = rzAttendanceService.selectRzAttendanceList(rzAttendance); + return getDataTable(list); + } + + /** + * 瀵煎嚭鑰冨嫟璁板綍鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('attendance:attendance:export')") + @Log(title = "鑰冨嫟璁板綍", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, RzAttendance rzAttendance) + { + List list = rzAttendanceService.selectRzAttendanceList(rzAttendance); + ExcelUtil util = new ExcelUtil(RzAttendance.class); + util.exportExcel(response, list, "鑰冨嫟璁板綍"); + } + + /** + * 鑾峰彇鑰冨嫟璁板綍璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('attendance:attendance:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(rzAttendanceService.selectRzAttendanceById(id)); + } + + /** + * 淇敼鑰冨嫟璁板綍 + */ + @PreAuthorize("@ss.hasPermi('attendance:attendance:edit')") + @Log(title = "鑰冨嫟璁板綍", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody RzAttendance rzAttendance) + { + return toAjax(rzAttendanceService.updateRzAttendance(rzAttendance)); + } + + /** + * 姣忔棩涓婄彮鎵撳崱缁熻 + * @return + */ + @GetMapping(value = "/attendenceCount") + public int attendenceCount() + { + return rzAttendanceService.attendenceCount(); + } + + /** + * 鎵归噺淇敼鑰冨嫟璁板綍 + */ + @PreAuthorize("@ss.hasPermi('attendance:attendance:edit')") + @Log(title = "鑰冨嫟璁板綍", businessType = BusinessType.UPDATE) + @PutMapping(value = "/updateBatchAttendance") + public AjaxResult updateBatchAttendance(@RequestBody RzAttendance rzAttendance) + { + return rzAttendanceService.updateBatchAttendance(rzAttendance); + } + + @GetMapping("/listAttendanceByParams") + public TableDataInfo listAttendanceByParams(RzAttendance rzAttendance) + { + startPage(); + List list = rzAttendanceService.listAttendanceByParams(rzAttendance); + return getDataTable(list); + } + +} diff --git a/evo-admin/src/main/java/com/evo/attendance/controller/RzAttendanceStatisticalController.java b/evo-admin/src/main/java/com/evo/attendance/controller/RzAttendanceStatisticalController.java new file mode 100644 index 0000000..6b66b90 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/controller/RzAttendanceStatisticalController.java @@ -0,0 +1,96 @@ +package com.evo.attendance.controller; + +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.poi.ExcelUtil; +import com.evo.attendance.domain.RzAttendanceStatistical; +import com.evo.attendance.service.IRzAttendanceStatisticalService; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鑰冨嫟缁熻Controller + * + * @author chenyj + * @date 2024-09-05 + */ +@RestController +@RequestMapping("/attendance/statistical") +public class RzAttendanceStatisticalController extends BaseController +{ + @Resource + private IRzAttendanceStatisticalService rzAttendanceStatisticalService; + + /** + * 鏌ヨ鑰冨嫟缁熻鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('attendance:statistical:list')") + @GetMapping("/list") + public TableDataInfo list(RzAttendanceStatistical rzAttendanceStatistical) + { + startPage(); + List list = rzAttendanceStatisticalService.selectRzAttendanceStatisticalList(rzAttendanceStatistical); + return getDataTable(list); + } + + /** + * 瀵煎嚭鑰冨嫟缁熻鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('attendance:statistical:export')") + @Log(title = "鑰冨嫟缁熻", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, RzAttendanceStatistical rzAttendanceStatistical) + { + List list = rzAttendanceStatisticalService.selectRzAttendanceStatisticalList(rzAttendanceStatistical); + ExcelUtil util = new ExcelUtil(RzAttendanceStatistical.class); + util.exportExcel(response, list, "鑰冨嫟缁熻鏁版嵁"); + } + + /** + * 鑾峰彇鑰冨嫟缁熻璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('attendance:statistical:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(rzAttendanceStatisticalService.selectRzAttendanceStatisticalById(id)); + } + + /** + * 淇敼鑰冨嫟缁熻 + */ + @PreAuthorize("@ss.hasPermi('attendance:statistical:edit')") + @Log(title = "鑰冨嫟缁熻", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody RzAttendanceStatistical rzAttendanceStatistical) + { + return toAjax(rzAttendanceStatisticalService.updateRzAttendanceStatistical(rzAttendanceStatistical)); + } + + /** + * 鏍℃鏁版嵁 + */ + @PreAuthorize("@ss.hasPermi('attendance:statistics:correct')") + @RequestMapping(value = "correct") + public AjaxResult correct(@RequestBody RzAttendanceStatistical rzAttendanceStatistical) + { + return rzAttendanceStatisticalService.correct(rzAttendanceStatistical); + } + + @PreAuthorize("@ss.hasPermi('attendance:statistics:import')") + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file) throws Exception + { + ExcelUtil util = new ExcelUtil(RzAttendanceStatistical.class); + List attList = util.importExcel(file.getInputStream()); + return rzAttendanceStatisticalService.importRzAttendanceStatistical(attList); + } + +} diff --git a/evo-admin/src/main/java/com/evo/attendance/controller/RzSpecialAttendanceController.java b/evo-admin/src/main/java/com/evo/attendance/controller/RzSpecialAttendanceController.java new file mode 100644 index 0000000..5145407 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/controller/RzSpecialAttendanceController.java @@ -0,0 +1,104 @@ +package com.evo.attendance.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import com.evo.attendance.domain.RzSpecialAttendance; +import com.evo.attendance.service.IRzSpecialAttendanceService; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.poi.ExcelUtil; +import com.evo.common.core.page.TableDataInfo; + +/** + * 鍔犵彮鑰冨嫟璁板綍Controller + * + * @author evo + * @date 2025-04-15 + */ +@RestController +@RequestMapping("/attendance/specialAttendance") +public class RzSpecialAttendanceController extends BaseController +{ + @Autowired + private IRzSpecialAttendanceService rzSpecialAttendanceService; + + /** + * 鏌ヨ鍔犵彮鑰冨嫟璁板綍鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('attendance:specialAttendance:list')") + @GetMapping("/list") + public TableDataInfo list(RzSpecialAttendance rzSpecialAttendance) + { + startPage(); + List list = rzSpecialAttendanceService.selectRzSpecialAttendanceList(rzSpecialAttendance); + return getDataTable(list); + } + + /** + * 瀵煎嚭鍔犵彮鑰冨嫟璁板綍鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('attendance:specialAttendance:export')") + @Log(title = "鍔犵彮鑰冨嫟璁板綍", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, RzSpecialAttendance rzSpecialAttendance) + { + List list = rzSpecialAttendanceService.selectRzSpecialAttendanceList(rzSpecialAttendance); + ExcelUtil util = new ExcelUtil(RzSpecialAttendance.class); + util.exportExcel(response, list, "鍔犵彮鑰冨嫟璁板綍鏁版嵁"); + } + + /** + * 鑾峰彇鍔犵彮鑰冨嫟璁板綍璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('attendance:specialAttendance:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(rzSpecialAttendanceService.selectRzSpecialAttendanceById(id)); + } + + /** + * 鏂板鍔犵彮鑰冨嫟璁板綍 + */ + @PreAuthorize("@ss.hasPermi('attendance:specialAttendance:add')") + @Log(title = "鍔犵彮鑰冨嫟璁板綍", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody RzSpecialAttendance rzSpecialAttendance) + { + return toAjax(rzSpecialAttendanceService.insertRzSpecialAttendance(rzSpecialAttendance)); + } + + /** + * 淇敼鍔犵彮鑰冨嫟璁板綍 + */ + @PreAuthorize("@ss.hasPermi('attendance:specialAttendance:edit')") + @Log(title = "鍔犵彮鑰冨嫟璁板綍", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody RzSpecialAttendance rzSpecialAttendance) + { + return toAjax(rzSpecialAttendanceService.updateRzSpecialAttendance(rzSpecialAttendance)); + } + + /** + * 鍒犻櫎鍔犵彮鑰冨嫟璁板綍 + */ + @PreAuthorize("@ss.hasPermi('attendance:specialAttendance:remove')") + @Log(title = "鍔犵彮鑰冨嫟璁板綍", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public AjaxResult remove(@PathVariable Long id) + { + return toAjax(rzSpecialAttendanceService.deleteRzSpecialAttendanceById(id)); + } +} diff --git a/evo-admin/src/main/java/com/evo/attendance/controller/RzSpecialOverTimeController.java b/evo-admin/src/main/java/com/evo/attendance/controller/RzSpecialOverTimeController.java new file mode 100644 index 0000000..52b3851 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/controller/RzSpecialOverTimeController.java @@ -0,0 +1,104 @@ +package com.evo.attendance.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import com.evo.attendance.domain.RzSpecialOverTime; +import com.evo.attendance.service.IRzSpecialOverTimeService; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.poi.ExcelUtil; +import com.evo.common.core.page.TableDataInfo; + +/** + * 鐗规畩鍔犵彮绠$悊Controller + * + * @author evo + * @date 2025-04-16 + */ +@RestController +@RequestMapping("/attendance/specialTime") +public class RzSpecialOverTimeController extends BaseController +{ + @Autowired + private IRzSpecialOverTimeService rzSpecialOverTimeService; + + /** + * 鏌ヨ鐗规畩鍔犵彮绠$悊鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('attendance:specialTime:list')") + @GetMapping("/list") + public TableDataInfo list(RzSpecialOverTime rzSpecialOverTime) + { + startPage(); + List list = rzSpecialOverTimeService.selectRzSpecialOverTimeList(rzSpecialOverTime); + return getDataTable(list); + } + + /** + * 瀵煎嚭鐗规畩鍔犵彮绠$悊鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('attendance:specialTime:export')") + @Log(title = "鐗规畩鍔犵彮绠$悊", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, RzSpecialOverTime rzSpecialOverTime) + { + List list = rzSpecialOverTimeService.selectRzSpecialOverTimeList(rzSpecialOverTime); + ExcelUtil util = new ExcelUtil(RzSpecialOverTime.class); + util.exportExcel(response, list, "鐗规畩鍔犵彮绠$悊鏁版嵁"); + } + + /** + * 鑾峰彇鐗规畩鍔犵彮绠$悊璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('attendance:specialTime:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(rzSpecialOverTimeService.selectRzSpecialOverTimeById(id)); + } + + /** + * 鏂板鐗规畩鍔犵彮绠$悊 + */ + @PreAuthorize("@ss.hasPermi('attendance:specialTime:add')") + @Log(title = "鐗规畩鍔犵彮绠$悊", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody RzSpecialOverTime rzSpecialOverTime) + { + return toAjax(rzSpecialOverTimeService.insertRzSpecialOverTime(rzSpecialOverTime)); + } + + /** + * 淇敼鐗规畩鍔犵彮绠$悊 + */ + @PreAuthorize("@ss.hasPermi('attendance:specialTime:edit')") + @Log(title = "鐗规畩鍔犵彮绠$悊", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody RzSpecialOverTime rzSpecialOverTime) + { + return toAjax(rzSpecialOverTimeService.updateRzSpecialOverTime(rzSpecialOverTime)); + } + + /** + * 鍒犻櫎鐗规畩鍔犵彮绠$悊 + */ + @PreAuthorize("@ss.hasPermi('attendance:specialTime:remove')") + @Log(title = "鐗规畩鍔犵彮绠$悊", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public AjaxResult remove(@PathVariable Long id) + { + return toAjax(rzSpecialOverTimeService.deleteRzSpecialOverTimeById(id)); + } +} diff --git a/evo-admin/src/main/java/com/evo/attendance/domain/RzAbnormal.java b/evo-admin/src/main/java/com/evo/attendance/domain/RzAbnormal.java new file mode 100644 index 0000000..eebb7c7 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/domain/RzAbnormal.java @@ -0,0 +1,152 @@ +package com.evo.attendance.domain; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; + +/** + * 鑰冨嫟寮傚父瀵硅薄 rz_abnormal + * + * @author evo + * @date 2025-03-10 + */ +public class RzAbnormal extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭ID */ + private Long id; + + /** 閮ㄩ棬 */ + @Excel(name = "閮ㄩ棬") + private Long deptId; + + private String deptName; + + /** 鍛樺伐ID */ + @Excel(name = "鍛樺伐ID") + private Long userId; + + /** 鍛樺伐濮撳悕 */ + @Excel(name = "鍛樺伐濮撳悕") + private String name; + + /** 鏈堜唤 */ + @JsonFormat(pattern = "yyyy-MM") + @Excel(name = "鏈堜唤", width = 30, dateFormat = "yyyy-MM") + private Date month; + + /** 娆℃暟 */ + @Excel(name = "娆℃暟") + private Long number; + + /** 閲戦 */ + @Excel(name = "閲戦") + private BigDecimal money; + + /** 鍒犻櫎鏍囪瘑 */ + private String delFlag; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + public Long getDeptId() + { + return deptId; + } + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setName(String name) + { + this.name = name; + } + + public String getName() + { + return name; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public Date getMonth() { + return month; + } + + public void setMonth(Date month) { + this.month = month; + } + + public void setNumber(Long number) + { + this.number = number; + } + + public Long getNumber() + { + return number; + } + public void setMoney(BigDecimal money) + { + this.money = money; + } + + public BigDecimal getMoney() + { + return money; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("deptId", getDeptId()) + .append("userId", getUserId()) + .append("name", getName()) + .append("month", getMonth()) + .append("number", getNumber()) + .append("money", getMoney()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/attendance/domain/RzAbnormalDetail.java b/evo-admin/src/main/java/com/evo/attendance/domain/RzAbnormalDetail.java new file mode 100644 index 0000000..c667dec --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/domain/RzAbnormalDetail.java @@ -0,0 +1,146 @@ +package com.evo.attendance.domain; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; + +/** + * 鑰冨嫟寮傚父璇︽儏瀵硅薄 rz_abnormal_detail + * + * @author evo + * @date 2025-03-10 + */ +public class RzAbnormalDetail extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭ID */ + private Long id; + + /** 寮傚父ID */ + @Excel(name = "寮傚父ID") + private Long abnormalId; + + /** 鍛樺伐濮撳悕 */ + @Excel(name = "鍛樺伐濮撳悕") + private String name; + + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鑰冨嫟鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date clockDate; + + private String clockType; + + public Date getClockDate() { + return clockDate; + } + + public void setClockDate(Date clockDate) { + this.clockDate = clockDate; + } + + /** 鎵撳崱鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "鎵撳崱鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date abnormalTime; + + /** 婵鍔遍噾棰 */ + @Excel(name = "婵鍔遍噾棰") + private BigDecimal money; + + /** 鍒犻櫎鏍囪瘑 */ + private String delFlag; + private String remarks; + + public String getClockType() { + return clockType; + } + + public void setClockType(String clockType) { + this.clockType = clockType; + } + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + + public Long getAbnormalId() { + return abnormalId; + } + + public void setAbnormalId(Long abnormalId) { + this.abnormalId = abnormalId; + } + + public void setName(String name) + { + this.name = name; + } + + public String getName() + { + return name; + } + public void setAbnormalTime(Date abnormalTime) + { + this.abnormalTime = abnormalTime; + } + + public Date getAbnormalTime() + { + return abnormalTime; + } + public void setMoney(BigDecimal money) + { + this.money = money; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public BigDecimal getMoney() + { + return money; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("abnormalId", getAbnormalId()) + .append("name", getName()) + .append("abnormalTime", getAbnormalTime()) + .append("money", getMoney()) + .append("remarks", getRemarks()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateTime", getUpdateTime()) + .append("updateBy", getUpdateBy()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/attendance/domain/RzAttendance.java b/evo-admin/src/main/java/com/evo/attendance/domain/RzAttendance.java new file mode 100644 index 0000000..6a4fe07 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/domain/RzAttendance.java @@ -0,0 +1,242 @@ +package com.evo.attendance.domain; + +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 鑰冨嫟璁板綍瀵硅薄 rz_attendance + * + * @author chenyj + * @date 2024-09-05 + */ +public class RzAttendance extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭 */ + private Long id; + + /** 缁熻id */ + private Long staffId; + + /** 鍛樺伐濮撳悕 */ + @Excel(name = "鍛樺伐濮撳悕") + private String name; + + /** 鎵灞為儴闂 */ + @Excel(name = "鎵灞為儴闂") + private String deptName; + private Long deptId; + + /** 鑰冨嫟鏃ユ湡 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鑰冨嫟鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd") + private Date attendanceDate; + + /** 鑰冨嫟瑙勫垯 */ + @Excel(name = "鑰冨嫟瑙勫垯") + private String rules; + + private String ycsFlag; + private String ycxFlag; + + /** 涓婄彮鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "涓婄彮鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date workStartTime; + + /** 涓嬬彮鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "涓嬬彮鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date workEndTime; + + /** 宸ヤ綔鏃堕暱 */ + @Excel(name = "宸ヤ綔鏃堕暱") + private BigDecimal workSum; + @Excel(name = "鑰冨嫟鏃堕暱") + private BigDecimal workHours; + /** 澶滅彮娆℃暟 */ + private int nightNumber; + + /** 涓彮娆℃暟 */ + private int middleShiftNumber; + + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鍒犻櫎鏍囪瘑 */ + private String delFlag; + + public String getYcsFlag() { + return ycsFlag; + } + + public void setYcsFlag(String ycsFlag) { + this.ycsFlag = ycsFlag; + } + + public String getYcxFlag() { + return ycxFlag; + } + + public void setYcxFlag(String ycxFlag) { + this.ycxFlag = ycxFlag; + } + + public Long getStaffId() { + return staffId; + } + + public void setStaffId(Long staffId) { + this.staffId = staffId; + } + + public BigDecimal getWorkHours() { + return workHours; + } + + public void setWorkHours(BigDecimal workHours) { + this.workHours = workHours; + } + + public int getNightNumber() { + return nightNumber; + } + + public void setNightNumber(int nightNumber) { + this.nightNumber = nightNumber; + } + + public int getMiddleShiftNumber() { + return middleShiftNumber; + } + + public void setMiddleShiftNumber(int middleShiftNumber) { + this.middleShiftNumber = middleShiftNumber; + } + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setName(String name) + { + this.name = name; + } + + public String getName() + { + return name; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public void setAttendanceDate(Date attendanceDate) + { + this.attendanceDate = attendanceDate; + } + + public Date getAttendanceDate() + { + return attendanceDate; + } + public void setRules(String rules) + { + this.rules = rules; + } + + public String getRules() + { + return rules; + } + public void setWorkStartTime(Date workStartTime) + { + this.workStartTime = workStartTime; + } + + public Date getWorkStartTime() + { + return workStartTime; + } + public void setWorkEndTime(Date workEndTime) + { + this.workEndTime = workEndTime; + } + + public Date getWorkEndTime() + { + return workEndTime; + } + public void setWorkSum(BigDecimal workSum) + { + this.workSum = workSum; + } + + public BigDecimal getWorkSum() + { + return workSum; + } + public void setRemarks(String remarks) + { + this.remarks = remarks; + } + + public String getRemarks() + { + return remarks; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("name", getName()) + .append("deptName", getDeptId()) + .append("attendanceDate", getAttendanceDate()) + .append("rules", getRules()) + .append("workStartTime", getWorkStartTime()) + .append("workEndTime", getWorkEndTime()) + .append("workSum", getWorkSum()) + .append("remarks", getRemarks()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/attendance/domain/RzAttendanceDetail.java b/evo-admin/src/main/java/com/evo/attendance/domain/RzAttendanceDetail.java new file mode 100644 index 0000000..b4e83f8 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/domain/RzAttendanceDetail.java @@ -0,0 +1,140 @@ +package com.evo.attendance.domain; + +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.Date; + +/** + * 鑰冨嫟鏄庣粏瀵硅薄 rz_attendance_detail + * + * @author chenyj + * @date 2024-09-14 + */ +public class RzAttendanceDetail extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭 */ + private Long id; + + /** 鐢ㄦ埛id */ + @Excel(name = "鐢ㄦ埛id") + private Long staffId; + + /** 濮撳悕 */ + @Excel(name = "濮撳悕") + private String name; + + /** 璁惧缂栧彿 */ + @Excel(name = "璁惧缂栧彿") + private String equipmentCode; + + /** 鎸夐挳绫诲瀷 */ + @Excel(name = "鎸夐挳绫诲瀷") + private String buttonType; + + /** 鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date dateTime; + + /** 鍛ㄥ叚鏍囪瘑 */ + private String remark; + + /** 鍒犻櫎鏍囪 */ + private String delFlag; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setStaffId(Long staffId) + { + this.staffId = staffId; + } + + public Long getStaffId() + { + return staffId; + } + public void setName(String name) + { + this.name = name; + } + + public String getName() + { + return name; + } + public void setEquipmentCode(String equipmentCode) + { + this.equipmentCode = equipmentCode; + } + + public String getEquipmentCode() + { + return equipmentCode; + } + public void setButtonType(String buttonType) + { + this.buttonType = buttonType; + } + + public String getButtonType() + { + return buttonType; + } + public void setDateTime(Date dateTime) + { + this.dateTime = dateTime; + } + + public Date getDateTime() + { + return dateTime; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("staffId", getStaffId()) + .append("name", getName()) + .append("equipmentCode", getEquipmentCode()) + .append("buttonType", getButtonType()) + .append("dateTime", getDateTime()) + .append("remark", getRemark()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/attendance/domain/RzAttendanceStatistical.java b/evo-admin/src/main/java/com/evo/attendance/domain/RzAttendanceStatistical.java new file mode 100644 index 0000000..2196fe8 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/domain/RzAttendanceStatistical.java @@ -0,0 +1,282 @@ +package com.evo.attendance.domain; + +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * 鑰冨嫟缁熻瀵硅薄 rz_attendance_statistical + * + * @author chenyj + * @date 2024-09-05 + */ +public class RzAttendanceStatistical extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭 */ + @Excel(name = "涓婚敭ID") + private Long id; + + /** 鍛樺伐ID */ + private Long staffId; + + /** 鎵灞炴湀浠 */ + @Excel(name = "鎵灞炴湀浠", width = 30, dateFormat = "yyyy-MM") + @JsonFormat(pattern = "yyyy-MM") + private Date month; + + /** 鎵灞為儴闂 */ + private Long deptId; + + private List deptIds; + @Excel(name = "鎵灞為儴闂") + private String deptName; + + /** 鍛樺伐濮撳悕 */ + @Excel(name = "鍛樺伐濮撳悕") + private String name; + + /** 搴斿嚭鍕(灏忔椂) */ + @Excel(name = "搴斿嚭鍕(灏忔椂)") + private BigDecimal shouldAttendance; + + /** 瀹炲嚭鍕(灏忔椂) */ + @Excel(name = "瀹炲嚭鍕(灏忔椂)") + private BigDecimal realAttendance; + + /** 鎵撳崱鏃堕暱(灏忔椂) */ + @Excel(name = "鎵撳崱鏃堕暱(灏忔椂)") + private BigDecimal essentialAttendance; + + /** 鍔犵彮鏃堕暱(灏忔椂) */ + @Excel(name = "鍔犵彮鏃堕暱(灏忔椂)") + private BigDecimal workOvertimeNumber; + + /** 璇峰亣鏃堕暱(灏忔椂) */ + @Excel(name = "璇峰亣鏃堕暱(灏忔椂)") + private BigDecimal absenteeism; + + /** 璇峰亣鏃堕暱(灏忔椂) */ + @Excel(name = "鐗规畩鍔犵彮(灏忔椂)") + private BigDecimal overTimeHours; + + /** 杩熷埌娆℃暟 */ + @Excel(name = "寮傚父娆℃暟") + private Long lateNumber; + + /** 鏃╅娆℃暟 */ + //@Excel(name = "鏃╅娆℃暟") + private Long leaveEarly; + + /** 缂哄崱娆℃暟 */ + //@Excel(name = "缂哄崱娆℃暟") + private Long lessNumber; + + /** 澶滅彮娆℃暟 */ + @Excel(name = "澶滅彮娆℃暟") + private Long nightNumber; + + /** 涓彮娆℃暟 */ + @Excel(name = "涓彮娆℃暟") + private Long middleShiftNumber; + + /** 鍒犻櫎鏍囪瘑 */ + private String delFlag; + + public BigDecimal getOverTimeHours() { + return overTimeHours; + } + + public void setOverTimeHours(BigDecimal overTimeHours) { + this.overTimeHours = overTimeHours; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public List getDeptIds() { + return deptIds; + } + + public void setDeptIds(List deptIds) { + this.deptIds = deptIds; + } + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setStaffId(Long staffId) + { + this.staffId = staffId; + } + + public Long getStaffId() + { + return staffId; + } + public void setMonth(Date month) + { + this.month = month; + } + + public Date getMonth() + { + return month; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public void setName(String name) + { + this.name = name; + } + + public String getName() + { + return name; + } + public void setShouldAttendance(BigDecimal shouldAttendance) + { + this.shouldAttendance = shouldAttendance; + } + + public BigDecimal getShouldAttendance() + { + return shouldAttendance; + } + public void setRealAttendance(BigDecimal realAttendance) + { + this.realAttendance = realAttendance; + } + + public BigDecimal getRealAttendance() + { + return realAttendance; + } + public void setEssentialAttendance(BigDecimal essentialAttendance) + { + this.essentialAttendance = essentialAttendance; + } + + public BigDecimal getEssentialAttendance() + { + return essentialAttendance; + } + public void setWorkOvertimeNumber(BigDecimal workOvertimeNumber) + { + this.workOvertimeNumber = workOvertimeNumber; + } + + public BigDecimal getWorkOvertimeNumber() + { + return workOvertimeNumber; + } + public void setAbsenteeism(BigDecimal absenteeism) + { + this.absenteeism = absenteeism; + } + + public BigDecimal getAbsenteeism() + { + return absenteeism; + } + public void setLateNumber(Long lateNumber) + { + this.lateNumber = lateNumber; + } + + public Long getLateNumber() + { + return lateNumber; + } + public void setLeaveEarly(Long leaveEarly) + { + this.leaveEarly = leaveEarly; + } + + public Long getLeaveEarly() + { + return leaveEarly; + } + public void setLessNumber(Long lessNumber) + { + this.lessNumber = lessNumber; + } + + public Long getLessNumber() + { + return lessNumber; + } + public void setNightNumber(Long nightNumber) + { + this.nightNumber = nightNumber; + } + + public Long getNightNumber() + { + return nightNumber; + } + public void setMiddleShiftNumber(Long middleShiftNumber) + { + this.middleShiftNumber = middleShiftNumber; + } + + public Long getMiddleShiftNumber() + { + return middleShiftNumber; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("staffId", getStaffId()) + .append("month", getMonth()) + .append("deptId", getDeptId()) + .append("name", getName()) + .append("shouldAttendance", getShouldAttendance()) + .append("realAttendance", getRealAttendance()) + .append("essentialAttendance", getEssentialAttendance()) + .append("workOvertimeNumber", getWorkOvertimeNumber()) + .append("absenteeism", getAbsenteeism()) + .append("lateNumber", getLateNumber()) + .append("leaveEarly", getLeaveEarly()) + .append("lessNumber", getLessNumber()) + .append("nightNumber", getNightNumber()) + .append("middleShiftNumber", getMiddleShiftNumber()) + .append("delFlag", getDelFlag()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/attendance/domain/RzSpecialAttendance.java b/evo-admin/src/main/java/com/evo/attendance/domain/RzSpecialAttendance.java new file mode 100644 index 0000000..431eb19 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/domain/RzSpecialAttendance.java @@ -0,0 +1,172 @@ +package com.evo.attendance.domain; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; + +/** + * 鍔犵彮鑰冨嫟璁板綍瀵硅薄 rz_special_attendance + * + * @author evo + * @date 2025-04-15 + */ +public class RzSpecialAttendance extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭 */ + private Long id; + + /** 鍛樺伐ID */ + @Excel(name = "鍛樺伐ID") + private Long staffId; + + /** 鍛樺伐濮撳悕 */ + @Excel(name = "鍛樺伐濮撳悕") + private String name; + + /** 鎵灞為儴闂 */ + @Excel(name = "鎵灞為儴闂") + private Long deptId; + + /** 鑰冨嫟鏃ユ湡 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鑰冨嫟鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd") + private Date attendanceDate; + + /** 涓婄彮鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "涓婄彮鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date workStartTime; + + /** 涓嬬彮鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "涓嬬彮鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date workEndTime; + + /** 鑰冨嫟鏃堕暱 */ + @Excel(name = "鑰冨嫟鏃堕暱") + private BigDecimal workHours; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鍒犻櫎鏍囪瘑 */ + private String delFlag; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setStaffId(Long staffId) + { + this.staffId = staffId; + } + + public Long getStaffId() + { + return staffId; + } + public void setName(String name) + { + this.name = name; + } + + public String getName() + { + return name; + } + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + public Long getDeptId() + { + return deptId; + } + public void setAttendanceDate(Date attendanceDate) + { + this.attendanceDate = attendanceDate; + } + + public Date getAttendanceDate() + { + return attendanceDate; + } + public void setWorkStartTime(Date workStartTime) + { + this.workStartTime = workStartTime; + } + + public Date getWorkStartTime() + { + return workStartTime; + } + public void setWorkEndTime(Date workEndTime) + { + this.workEndTime = workEndTime; + } + + public Date getWorkEndTime() + { + return workEndTime; + } + public void setWorkHours(BigDecimal workHours) + { + this.workHours = workHours; + } + + public BigDecimal getWorkHours() + { + return workHours; + } + public void setRemarks(String remarks) + { + this.remarks = remarks; + } + + public String getRemarks() + { + return remarks; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("staffId", getStaffId()) + .append("name", getName()) + .append("deptId", getDeptId()) + .append("attendanceDate", getAttendanceDate()) + .append("workStartTime", getWorkStartTime()) + .append("workEndTime", getWorkEndTime()) + .append("workHours", getWorkHours()) + .append("remarks", getRemarks()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/attendance/domain/RzSpecialOverTime.java b/evo-admin/src/main/java/com/evo/attendance/domain/RzSpecialOverTime.java new file mode 100644 index 0000000..58a5d38 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/domain/RzSpecialOverTime.java @@ -0,0 +1,135 @@ +package com.evo.attendance.domain; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; + +/** + * 鐗规畩鍔犵彮绠$悊瀵硅薄 rz_special_over_time + * + * @author evo + * @date 2025-04-16 + */ +public class RzSpecialOverTime extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭ID */ + private Long id; + + /** 鍛樺伐ID */ + @Excel(name = "鍛樺伐ID") + private Long userId; + + /** 閮ㄩ棬 */ + private Long deptId; + @Excel(name = "閮ㄩ棬") + private String deptName; + /** 鍛樺伐濮撳悕 */ + @Excel(name = "鍛樺伐濮撳悕") + private String name; + + /** 鍔犵彮鏈堜唤锛堝埌鏈堬級 */ + @Excel(name = "鍔犵彮鏈堜唤", readConverterExp = "鍒=鏈") + @JsonFormat(pattern = "yyyy-MM") + private Date overDate; + + /** 鍔犵彮鏃堕暱锛堝皬鏃讹級 */ + @Excel(name = "鍔犵彮鏃堕暱", readConverterExp = "灏=鏃") + private BigDecimal sickHours; + + /** 鍒犻櫎鏍囪瘑 */ + private String delFlag; + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + public Long getDeptId() + { + return deptId; + } + public void setName(String name) + { + this.name = name; + } + + public String getName() + { + return name; + } + + public Date getOverDate() { + return overDate; + } + + public void setOverDate(Date overDate) { + this.overDate = overDate; + } + + public void setSickHours(BigDecimal sickHours) + { + this.sickHours = sickHours; + } + + public BigDecimal getSickHours() + { + return sickHours; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("userId", getUserId()) + .append("deptId", getDeptId()) + .append("name", getName()) + .append("sickHours", getSickHours()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/attendance/domain/vo/RzAttendanceData.java b/evo-admin/src/main/java/com/evo/attendance/domain/vo/RzAttendanceData.java new file mode 100644 index 0000000..fae71ce --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/domain/vo/RzAttendanceData.java @@ -0,0 +1,19 @@ +package com.evo.attendance.domain.vo; + +public class RzAttendanceData { + + private String button; + + public String getButton() { + return button; + } + + public void setButton(String button) { + this.button = button; + } + + @Override + public String toString() { + return "RzAttendanceData [button=" + button + "]"; + } +} diff --git a/evo-admin/src/main/java/com/evo/attendance/domain/vo/RzAttendanceVo.java b/evo-admin/src/main/java/com/evo/attendance/domain/vo/RzAttendanceVo.java new file mode 100644 index 0000000..0108026 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/domain/vo/RzAttendanceVo.java @@ -0,0 +1,30 @@ +package com.evo.attendance.domain.vo; + +public class RzAttendanceVo { + + private int Result; + private String Msg; + private RzAttendanceData Content; + public int getResult() { + return Result; + } + public void setResult(int result) { + Result = result; + } + public String getMsg() { + return Msg; + } + public void setMsg(String msg) { + Msg = msg; + } + public RzAttendanceData getContent() { + return Content; + } + public void setContent(RzAttendanceData content) { + Content = content; + } + @Override + public String toString() { + return "RzAttendanceVo [Result=" + Result + ", Msg=" + Msg + ", Content=" + Content + "]"; + } +} diff --git a/evo-admin/src/main/java/com/evo/attendance/mapper/RzAbnormalDetailMapper.java b/evo-admin/src/main/java/com/evo/attendance/mapper/RzAbnormalDetailMapper.java new file mode 100644 index 0000000..2e2c912 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/mapper/RzAbnormalDetailMapper.java @@ -0,0 +1,52 @@ +package com.evo.attendance.mapper; + +import java.util.List; +import com.evo.attendance.domain.RzAbnormalDetail; + +/** + * 鑰冨嫟寮傚父璇︽儏Mapper鎺ュ彛 + * + * @author evo + * @date 2025-03-10 + */ +public interface RzAbnormalDetailMapper +{ + /** + * 鏌ヨ鑰冨嫟寮傚父璇︽儏 + * + * @param id 鑰冨嫟寮傚父璇︽儏涓婚敭 + * @return 鑰冨嫟寮傚父璇︽儏 + */ + public RzAbnormalDetail selectRzAbnormalDetailById(Long id); + + /** + * 鏌ヨ鑰冨嫟寮傚父璇︽儏鍒楄〃 + * + * @param rzAbnormalDetail 鑰冨嫟寮傚父璇︽儏 + * @return 鑰冨嫟寮傚父璇︽儏闆嗗悎 + */ + public List selectRzAbnormalDetailList(RzAbnormalDetail rzAbnormalDetail); + + /** + * 鏂板鑰冨嫟寮傚父璇︽儏 + * + * @param rzAbnormalDetail 鑰冨嫟寮傚父璇︽儏 + * @return 缁撴灉 + */ + public int insertRzAbnormalDetail(RzAbnormalDetail rzAbnormalDetail); + + /** + * 淇敼鑰冨嫟寮傚父璇︽儏 + * + * @param rzAbnormalDetail 鑰冨嫟寮傚父璇︽儏 + * @return 缁撴灉 + */ + public int updateRzAbnormalDetail(RzAbnormalDetail rzAbnormalDetail); + + /** + * 鏌ヨ鑰冨嫟寮傚父璇︽儏 + * @return 鑰冨嫟寮傚父璇︽儏 + */ + public List selectRzAbnormalDetailByAbnormalId(Long abnormalId); + +} diff --git a/evo-admin/src/main/java/com/evo/attendance/mapper/RzAbnormalMapper.java b/evo-admin/src/main/java/com/evo/attendance/mapper/RzAbnormalMapper.java new file mode 100644 index 0000000..fb9270f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/mapper/RzAbnormalMapper.java @@ -0,0 +1,55 @@ +package com.evo.attendance.mapper; + +import java.util.Date; +import java.util.List; +import com.evo.attendance.domain.RzAbnormal; +import org.apache.ibatis.annotations.Param; + +/** + * 鑰冨嫟寮傚父Mapper鎺ュ彛 + * + * @author evo + * @date 2025-03-10 + */ +public interface RzAbnormalMapper +{ + /** + * 鏌ヨ鑰冨嫟寮傚父 + * + * @param id 鑰冨嫟寮傚父涓婚敭 + * @return 鑰冨嫟寮傚父 + */ + public RzAbnormal selectRzAbnormalById(Long id); + + /** + * 鏌ヨ鑰冨嫟寮傚父鍒楄〃 + * + * @param rzAbnormal 鑰冨嫟寮傚父 + * @return 鑰冨嫟寮傚父闆嗗悎 + */ + public List selectRzAbnormalList(RzAbnormal rzAbnormal); + + /** + * 鏂板鑰冨嫟寮傚父 + * + * @param rzAbnormal 鑰冨嫟寮傚父 + * @return 缁撴灉 + */ + public int insertRzAbnormal(RzAbnormal rzAbnormal); + + /** + * 淇敼鑰冨嫟寮傚父 + * + * @param rzAbnormal 鑰冨嫟寮傚父 + * @return 缁撴灉 + */ + public int updateRzAbnormal(RzAbnormal rzAbnormal); + + /** + * 鏌ヨ褰撴湀杩熷埌鎯呭喌 + * @param userId + * @return + */ + public RzAbnormal selectRzAbnormalByUserId(@Param("userId") Long userId,@Param("month") Date month); + +} diff --git a/evo-admin/src/main/java/com/evo/attendance/mapper/RzAttendanceDetailMapper.java b/evo-admin/src/main/java/com/evo/attendance/mapper/RzAttendanceDetailMapper.java new file mode 100644 index 0000000..9882e8f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/mapper/RzAttendanceDetailMapper.java @@ -0,0 +1,53 @@ +package com.evo.attendance.mapper; + +import com.evo.attendance.domain.RzAttendanceDetail; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +/** + * 鑰冨嫟鏄庣粏Mapper鎺ュ彛 + * + * @author chenyj + * @date 2024-09-14 + */ +public interface RzAttendanceDetailMapper +{ + + /** + * 鏌ヨ鍛樺伐鏈鍚庝竴娆℃墦鍗℃槑缁 锛屾寜閽垏鎹娇鐢 + * + * @param staffId + * @return 鑰冨嫟鏄庣粏闆嗗悎 + */ + public RzAttendanceDetail selectLastRzAttendanceDetail(@Param("staffId") Long staffId); + + /** + * 鏂板鑰冨嫟鏄庣粏 + * + * @param rzAttendanceDetail 鑰冨嫟鏄庣粏 + * @return 缁撴灉 + */ + public int insertRzAttendanceDetail(RzAttendanceDetail rzAttendanceDetail); + + /** + * 淇敼鑰冨嫟鏄庣粏 + * @param rzAttendanceDetail + * @return + */ + public int updateRzAttendanceDetail(RzAttendanceDetail rzAttendanceDetail); + + /** + * 鏌ヨ鍛樺伐鏈鍚庝竴娆′笂鐝墦鍗 璁$畻宸ユ椂 + * + * @param staffId + * @return 鑰冨嫟鏄庣粏闆嗗悎 + */ + public default RzAttendanceDetail selectRzAttendanceDetailByStaffId(@Param("staffId") Long staffId) { + return null; + } + + public List selectRzAttendanceDetailByMonth(Date date); + +} diff --git a/evo-admin/src/main/java/com/evo/attendance/mapper/RzAttendanceMapper.java b/evo-admin/src/main/java/com/evo/attendance/mapper/RzAttendanceMapper.java new file mode 100644 index 0000000..1cde57b --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/mapper/RzAttendanceMapper.java @@ -0,0 +1,83 @@ +package com.evo.attendance.mapper; + +import com.evo.attendance.domain.RzAttendance; +import org.apache.ibatis.annotations.Param; +import java.util.Date; +import java.util.List; + +/** + * 鑰冨嫟璁板綍Mapper鎺ュ彛 + * + * @author chenyj + * @date 2024-09-05 + */ +public interface RzAttendanceMapper +{ + /** + * 鏌ヨ鑰冨嫟璁板綍 + * + * @param id 鑰冨嫟璁板綍涓婚敭 + * @return 鑰冨嫟璁板綍 + */ + public RzAttendance selectRzAttendanceById(Long id); + + /** + * 鏌ヨ鑰冨嫟璁板綍鍒楄〃 + * + * @param rzAttendance 鑰冨嫟璁板綍 + * @return 鑰冨嫟璁板綍闆嗗悎 + */ + public List selectRzAttendanceList(RzAttendance rzAttendance); + /** + * 淇敼鑰冨嫟璁板綍 + * + * @param rzAttendance 鑰冨嫟璁板綍 + * @return 缁撴灉 + */ + public int updateRzAttendance(RzAttendance rzAttendance); + /** + * 鏍规嵁缁熻ID鍜屾椂闂存煡璇㈠綋澶╃殑鎵撳崱璁板綍 + * @param date + * @return + */ + public RzAttendance queryNowDayAttendanceByStatisticalIdAndDate(@Param("staffId") Long staffId,@Param("date") Date date); + /** + * 姣忔棩涓婄彮鎵撳崱缁熻 + * @return + */ + public List attendenceCount(); + /** + * 鏍规嵁鍛樺伐ID鏌ヨ鏈鍚庝竴娆¤冨嫟涓婄彮璁板綍 + * + * @param staffId 鑰冨嫟缁熻ID + * @return 鑰冨嫟璁板綍 + */ + public RzAttendance selectLastRzAttendanceByStaffId(Long staffId); + /** + * 鏌ヨ鍛樺伐鐨勮冨嫟(鏍规嵁鏈堜唤) + * @param staffId + * @return + */ + public List queryMonthAttendanceByStaffId(@Param("staffId") Long staffId,@Param("date") Date date); + /** + * 鏌ヨ鑰冨嫟璁板綍鍒楄〃 + * + * @param rzAttendance 鑰冨嫟璁板綍 + * @return 鑰冨嫟璁板綍闆嗗悎 + */ + public List listAttendanceByParams(RzAttendance rzAttendance); + /** + * 鎵归噺鏂板鑰冨嫟璁板綍 + * + * @param list 鑰冨嫟璁板綍 + * @return 缁撴灉 + */ + public int insertBatchRzAttendance(List list); + + /** + * 鏌ヨ褰撳ぉ鐨勮冨嫟 + * @return + */ + public List currentDateAllAttendance(); + +} diff --git a/evo-admin/src/main/java/com/evo/attendance/mapper/RzAttendanceStatisticalMapper.java b/evo-admin/src/main/java/com/evo/attendance/mapper/RzAttendanceStatisticalMapper.java new file mode 100644 index 0000000..52b1372 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/mapper/RzAttendanceStatisticalMapper.java @@ -0,0 +1,62 @@ +package com.evo.attendance.mapper; + +import com.evo.attendance.domain.RzAttendanceStatistical; +import org.apache.ibatis.annotations.Param; +import java.util.Date; +import java.util.List; + +/** + * 鑰冨嫟缁熻Mapper鎺ュ彛 + * + * @author chenyj + * @date 2024-09-05 + */ +public interface RzAttendanceStatisticalMapper +{ + /** + * 鏌ヨ鑰冨嫟缁熻 + * + * @param id 鑰冨嫟缁熻涓婚敭 + * @return 鑰冨嫟缁熻 + */ + public RzAttendanceStatistical selectRzAttendanceStatisticalById(Long id); + + /** + * 鏌ヨ鑰冨嫟缁熻鍒楄〃 + * + * @param rzAttendanceStatistical 鑰冨嫟缁熻 + * @return 鑰冨嫟缁熻闆嗗悎 + */ + public List selectRzAttendanceStatisticalList(RzAttendanceStatistical rzAttendanceStatistical); + + /** + * 鏂板鑰冨嫟缁熻 + * + * @param rzAttendanceStatistical 鑰冨嫟缁熻 + * @return 缁撴灉 + */ + public int insertRzAttendanceStatistical(RzAttendanceStatistical rzAttendanceStatistical); + + /** + * 淇敼鑰冨嫟缁熻 + * + * @param rzAttendanceStatistical 鑰冨嫟缁熻 + * @return 缁撴灉 + */ + public int updateRzAttendanceStatistical(RzAttendanceStatistical rzAttendanceStatistical); + + /** + * 鏍规嵁鍛樺伐ID锛屾椂闂存煡璇㈢粺璁′俊鎭 + * @param staffId + * @param month + * @return + */ + public RzAttendanceStatistical getRzAttendanceStatisticalByDateAndName(@Param("staffId") Long staffId,@Param("month") Date month); + + /** + * 鏌ヨ鑰冨嫟鏈堢殑鑰冨嫟缁熻淇℃伅 * + * @return 鑰冨嫟缁熻闆嗗悎 + */ + public List queryStatisticalByMonth(Date month); + +} diff --git a/evo-admin/src/main/java/com/evo/attendance/mapper/RzSpecialAttendanceMapper.java b/evo-admin/src/main/java/com/evo/attendance/mapper/RzSpecialAttendanceMapper.java new file mode 100644 index 0000000..97e1397 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/mapper/RzSpecialAttendanceMapper.java @@ -0,0 +1,51 @@ +package com.evo.attendance.mapper; + +import com.evo.attendance.domain.RzSpecialAttendance; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +/** + * 鍔犵彮鑰冨嫟璁板綍Mapper鎺ュ彛 + * + * @author evo + * @date 2025-04-15 + */ +public interface RzSpecialAttendanceMapper +{ + /** + * 鏌ヨ鍔犵彮鑰冨嫟璁板綍 + * + * @param id 鍔犵彮鑰冨嫟璁板綍涓婚敭 + * @return 鍔犵彮鑰冨嫟璁板綍 + */ + public RzSpecialAttendance selectRzSpecialAttendanceById(Long id); + + /** + * 鏌ヨ鍔犵彮鑰冨嫟璁板綍鍒楄〃 + * + * @param rzSpecialAttendance 鍔犵彮鑰冨嫟璁板綍 + * @return 鍔犵彮鑰冨嫟璁板綍闆嗗悎 + */ + public List selectRzSpecialAttendanceList(RzSpecialAttendance rzSpecialAttendance); + + /** + * 鏂板鍔犵彮鑰冨嫟璁板綍 + * + * @param rzSpecialAttendance 鍔犵彮鑰冨嫟璁板綍 + * @return 缁撴灉 + */ + public int insertRzSpecialAttendance(RzSpecialAttendance rzSpecialAttendance); + + /** + * 淇敼鍔犵彮鑰冨嫟璁板綍 + * + * @param rzSpecialAttendance 鍔犵彮鑰冨嫟璁板綍 + * @return 缁撴灉 + */ + public int updateRzSpecialAttendance(RzSpecialAttendance rzSpecialAttendance); + + public RzSpecialAttendance selectRzSpecialAttendanceByuserIdAndDate(@Param("staffId") Long staffId,@Param("date") Date date); + +} diff --git a/evo-admin/src/main/java/com/evo/attendance/mapper/RzSpecialOverTimeMapper.java b/evo-admin/src/main/java/com/evo/attendance/mapper/RzSpecialOverTimeMapper.java new file mode 100644 index 0000000..ce32cf2 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/mapper/RzSpecialOverTimeMapper.java @@ -0,0 +1,51 @@ +package com.evo.attendance.mapper; + +import com.evo.attendance.domain.RzSpecialOverTime; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +/** + * 鐗规畩鍔犵彮绠$悊Mapper鎺ュ彛 + * + * @author evo + * @date 2025-04-16 + */ +public interface RzSpecialOverTimeMapper +{ + /** + * 鏌ヨ鐗规畩鍔犵彮绠$悊 + * + * @param id 鐗规畩鍔犵彮绠$悊涓婚敭 + * @return 鐗规畩鍔犵彮绠$悊 + */ + public RzSpecialOverTime selectRzSpecialOverTimeById(Long id); + + /** + * 鏌ヨ鐗规畩鍔犵彮绠$悊鍒楄〃 + * + * @param rzSpecialOverTime 鐗规畩鍔犵彮绠$悊 + * @return 鐗规畩鍔犵彮绠$悊闆嗗悎 + */ + public List selectRzSpecialOverTimeList(RzSpecialOverTime rzSpecialOverTime); + + /** + * 鏂板鐗规畩鍔犵彮绠$悊 + * + * @param rzSpecialOverTime 鐗规畩鍔犵彮绠$悊 + * @return 缁撴灉 + */ + public int insertRzSpecialOverTime(RzSpecialOverTime rzSpecialOverTime); + + /** + * 淇敼鐗规畩鍔犵彮绠$悊 + * + * @param rzSpecialOverTime 鐗规畩鍔犵彮绠$悊 + * @return 缁撴灉 + */ + public int updateRzSpecialOverTime(RzSpecialOverTime rzSpecialOverTime); + + public RzSpecialOverTime selectRzSpecialOverTimeByUserIdAndDate(@Param("userId") Long userId,@Param("date") Date date); + +} diff --git a/evo-admin/src/main/java/com/evo/attendance/service/IRzAbnormalDetailService.java b/evo-admin/src/main/java/com/evo/attendance/service/IRzAbnormalDetailService.java new file mode 100644 index 0000000..0e6b3ce --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/service/IRzAbnormalDetailService.java @@ -0,0 +1,51 @@ +package com.evo.attendance.service; + +import java.util.List; +import com.evo.attendance.domain.RzAbnormalDetail; + +/** + * 鑰冨嫟寮傚父璇︽儏Service鎺ュ彛 + * + * @author evo + * @date 2025-03-10 + */ +public interface IRzAbnormalDetailService +{ + /** + * 鏌ヨ鑰冨嫟寮傚父璇︽儏 + * + * @param id 鑰冨嫟寮傚父璇︽儏涓婚敭 + * @return 鑰冨嫟寮傚父璇︽儏 + */ + public RzAbnormalDetail selectRzAbnormalDetailById(Long id); + + /** + * 鏌ヨ鑰冨嫟寮傚父璇︽儏鍒楄〃 + * + * @param rzAbnormalDetail 鑰冨嫟寮傚父璇︽儏 + * @return 鑰冨嫟寮傚父璇︽儏闆嗗悎 + */ + public List selectRzAbnormalDetailList(RzAbnormalDetail rzAbnormalDetail); + + /** + * 鏂板鑰冨嫟寮傚父璇︽儏 + * @return 缁撴灉 + */ + public void insertRzAbnormalDetail(); + + /** + * 淇敼鑰冨嫟寮傚父璇︽儏 + * + * @param rzAbnormalDetail 鑰冨嫟寮傚父璇︽儏 + * @return 缁撴灉 + */ + public int updateRzAbnormalDetail(RzAbnormalDetail rzAbnormalDetail); + + /** + * 鍒犻櫎鑰冨嫟寮傚父璇︽儏淇℃伅 + * + * @param id 鑰冨嫟寮傚父璇︽儏涓婚敭 + * @return 缁撴灉 + */ + public int deleteRzAbnormalDetailById(Long id); +} diff --git a/evo-admin/src/main/java/com/evo/attendance/service/IRzAbnormalService.java b/evo-admin/src/main/java/com/evo/attendance/service/IRzAbnormalService.java new file mode 100644 index 0000000..912f086 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/service/IRzAbnormalService.java @@ -0,0 +1,52 @@ +package com.evo.attendance.service; + +import java.util.List; +import com.evo.attendance.domain.RzAbnormal; +import com.evo.attendance.domain.RzAbnormalDetail; + +/** + * 鑰冨嫟寮傚父Service鎺ュ彛 + * + * @author evo + * @date 2025-03-10 + */ +public interface IRzAbnormalService +{ + /** + * 鏌ヨ鑰冨嫟寮傚父 + * + * @param id 鑰冨嫟寮傚父涓婚敭 + * @return 鑰冨嫟寮傚父 + */ + public RzAbnormal selectRzAbnormalById(Long id); + + /** + * 鏌ヨ鑰冨嫟寮傚父鍒楄〃 + * + * @param rzAbnormal 鑰冨嫟寮傚父 + * @return 鑰冨嫟寮傚父闆嗗悎 + */ + public List selectRzAbnormalList(RzAbnormal rzAbnormal); + + /** + * 淇敼鑰冨嫟寮傚父 + * + * @param rzAbnormal 鑰冨嫟寮傚父 + * @return 缁撴灉 + */ + public int updateRzAbnormal(RzAbnormal rzAbnormal); + + /** + * 鍒犻櫎鑰冨嫟寮傚父淇℃伅 + * + * @param id 鑰冨嫟寮傚父涓婚敭 + * @return 缁撴灉 + */ + public int deleteRzAbnormalById(Long id); + /** + * 寮傚父璇︽儏 + * @param rzAbnormal + * @return + */ + public List listAbnormalDetails(RzAbnormal rzAbnormal); +} diff --git a/evo-admin/src/main/java/com/evo/attendance/service/IRzAttendanceService.java b/evo-admin/src/main/java/com/evo/attendance/service/IRzAttendanceService.java new file mode 100644 index 0000000..3187688 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/service/IRzAttendanceService.java @@ -0,0 +1,55 @@ +package com.evo.attendance.service; + +import com.evo.common.core.domain.AjaxResult; +import com.evo.attendance.domain.RzAttendance; +import java.util.List; + +/** + * 鑰冨嫟璁板綍Service鎺ュ彛 + * + * @author chenyj + * @date 2024-09-05 + */ +public interface IRzAttendanceService +{ + /** + * 鏌ヨ鑰冨嫟璁板綍 + * + * @param id 鑰冨嫟璁板綍涓婚敭 + * @return 鑰冨嫟璁板綍 + */ + public RzAttendance selectRzAttendanceById(Long id); + /** + * 鏌ヨ鑰冨嫟璁板綍鍒楄〃 + * + * @param rzAttendance 鑰冨嫟璁板綍 + * @return 鑰冨嫟璁板綍闆嗗悎 + */ + public List selectRzAttendanceList(RzAttendance rzAttendance); + /** + * 淇敼鑰冨嫟璁板綍 + * + * @param rzAttendance 鑰冨嫟璁板綍 + * @return 缁撴灉 + */ + public int updateRzAttendance(RzAttendance rzAttendance); + /** + * 姣忔棩涓婄彮鎵撳崱缁熻 + * @return + */ + public int attendenceCount(); + /** + * 鎵归噺淇敼鑰冨嫟璁板綍 + * + * @param rzAttendance 鑰冨嫟璁板綍 + * @return 缁撴灉 + */ + public AjaxResult updateBatchAttendance(RzAttendance rzAttendance); + /** + * 鏌ヨ鑰冨嫟璁板綍鍒楄〃 + * + * @param rzAttendance 鑰冨嫟璁板綍 + * @return 鑰冨嫟璁板綍闆嗗悎 + */ + public List listAttendanceByParams(RzAttendance rzAttendance); +} diff --git a/evo-admin/src/main/java/com/evo/attendance/service/IRzAttendanceStatisticalService.java b/evo-admin/src/main/java/com/evo/attendance/service/IRzAttendanceStatisticalService.java new file mode 100644 index 0000000..2c8fdbf --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/service/IRzAttendanceStatisticalService.java @@ -0,0 +1,50 @@ +package com.evo.attendance.service; + +import com.evo.attendance.domain.RzAttendanceStatistical; +import com.evo.common.core.domain.AjaxResult; +import java.util.List; + +/** + * 鑰冨嫟缁熻Service鎺ュ彛 + * + * @author chenyj + * @date 2024-09-05 + */ +public interface IRzAttendanceStatisticalService +{ + /** + * 鏌ヨ鑰冨嫟缁熻 + * + * @param id 鑰冨嫟缁熻涓婚敭 + * @return 鑰冨嫟缁熻 + */ + public RzAttendanceStatistical selectRzAttendanceStatisticalById(Long id); + + /** + * 鏌ヨ鑰冨嫟缁熻鍒楄〃 + * + * @param rzAttendanceStatistical 鑰冨嫟缁熻 + * @return 鑰冨嫟缁熻闆嗗悎 + */ + public List selectRzAttendanceStatisticalList(RzAttendanceStatistical rzAttendanceStatistical); + + /** + * 淇敼鑰冨嫟缁熻 + * + * @param rzAttendanceStatistical 鑰冨嫟缁熻 + * @return 缁撴灉 + */ + public int updateRzAttendanceStatistical(RzAttendanceStatistical rzAttendanceStatistical); + /** + * 鏍℃鏁版嵁 + * @return + */ + public AjaxResult correct(RzAttendanceStatistical rzAttendanceStatisticals); + + /** + * 鎵归噺瀵煎叆鑰冨嫟缁熻 + * @param list + * @return + */ + public AjaxResult importRzAttendanceStatistical(List list); +} diff --git a/evo-admin/src/main/java/com/evo/attendance/service/IRzSpecialAttendanceService.java b/evo-admin/src/main/java/com/evo/attendance/service/IRzSpecialAttendanceService.java new file mode 100644 index 0000000..0e9a2da --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/service/IRzSpecialAttendanceService.java @@ -0,0 +1,54 @@ +package com.evo.attendance.service; + +import com.evo.attendance.domain.RzSpecialAttendance; + +import java.util.List; + +/** + * 鍔犵彮鑰冨嫟璁板綍Service鎺ュ彛 + * + * @author evo + * @date 2025-04-15 + */ +public interface IRzSpecialAttendanceService +{ + /** + * 鏌ヨ鍔犵彮鑰冨嫟璁板綍 + * + * @param id 鍔犵彮鑰冨嫟璁板綍涓婚敭 + * @return 鍔犵彮鑰冨嫟璁板綍 + */ + public RzSpecialAttendance selectRzSpecialAttendanceById(Long id); + + /** + * 鏌ヨ鍔犵彮鑰冨嫟璁板綍鍒楄〃 + * + * @param rzSpecialAttendance 鍔犵彮鑰冨嫟璁板綍 + * @return 鍔犵彮鑰冨嫟璁板綍闆嗗悎 + */ + public List selectRzSpecialAttendanceList(RzSpecialAttendance rzSpecialAttendance); + + /** + * 鏂板鍔犵彮鑰冨嫟璁板綍 + * + * @param rzSpecialAttendance 鍔犵彮鑰冨嫟璁板綍 + * @return 缁撴灉 + */ + public int insertRzSpecialAttendance(RzSpecialAttendance rzSpecialAttendance); + + /** + * 淇敼鍔犵彮鑰冨嫟璁板綍 + * + * @param rzSpecialAttendance 鍔犵彮鑰冨嫟璁板綍 + * @return 缁撴灉 + */ + public int updateRzSpecialAttendance(RzSpecialAttendance rzSpecialAttendance); + + /** + * 鍒犻櫎鍔犵彮鑰冨嫟璁板綍淇℃伅 + * + * @param id 鍔犵彮鑰冨嫟璁板綍涓婚敭 + * @return 缁撴灉 + */ + public int deleteRzSpecialAttendanceById(Long id); +} diff --git a/evo-admin/src/main/java/com/evo/attendance/service/IRzSpecialOverTimeService.java b/evo-admin/src/main/java/com/evo/attendance/service/IRzSpecialOverTimeService.java new file mode 100644 index 0000000..c26a8cd --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/service/IRzSpecialOverTimeService.java @@ -0,0 +1,53 @@ +package com.evo.attendance.service; + +import com.evo.attendance.domain.RzSpecialOverTime; +import java.util.List; + +/** + * 鐗规畩鍔犵彮绠$悊Service鎺ュ彛 + * + * @author evo + * @date 2025-04-16 + */ +public interface IRzSpecialOverTimeService +{ + /** + * 鏌ヨ鐗规畩鍔犵彮绠$悊 + * + * @param id 鐗规畩鍔犵彮绠$悊涓婚敭 + * @return 鐗规畩鍔犵彮绠$悊 + */ + public RzSpecialOverTime selectRzSpecialOverTimeById(Long id); + + /** + * 鏌ヨ鐗规畩鍔犵彮绠$悊鍒楄〃 + * + * @param rzSpecialOverTime 鐗规畩鍔犵彮绠$悊 + * @return 鐗规畩鍔犵彮绠$悊闆嗗悎 + */ + public List selectRzSpecialOverTimeList(RzSpecialOverTime rzSpecialOverTime); + + /** + * 鏂板鐗规畩鍔犵彮绠$悊 + * + * @param rzSpecialOverTime 鐗规畩鍔犵彮绠$悊 + * @return 缁撴灉 + */ + public int insertRzSpecialOverTime(RzSpecialOverTime rzSpecialOverTime); + + /** + * 淇敼鐗规畩鍔犵彮绠$悊 + * + * @param rzSpecialOverTime 鐗规畩鍔犵彮绠$悊 + * @return 缁撴灉 + */ + public int updateRzSpecialOverTime(RzSpecialOverTime rzSpecialOverTime); + + /** + * 鍒犻櫎鐗规畩鍔犵彮绠$悊淇℃伅 + * + * @param id 鐗规畩鍔犵彮绠$悊涓婚敭 + * @return 缁撴灉 + */ + public int deleteRzSpecialOverTimeById(Long id); +} diff --git a/evo-admin/src/main/java/com/evo/attendance/service/PunchTheClockService.java b/evo-admin/src/main/java/com/evo/attendance/service/PunchTheClockService.java new file mode 100644 index 0000000..293e64b --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/service/PunchTheClockService.java @@ -0,0 +1,14 @@ +package com.evo.attendance.service; + +public interface PunchTheClockService { + + /** + * 鍒疯劯鑾峰彇鎵撳崱鎸夐挳鏉冮檺 + */ + public String returnMessage(String json); + /** + * 鐢ㄦ埛鐐瑰嚮鎵撳崱鎸夐挳鍚庤姹傜殑鎺ュ彛 + */ + public String recordFace(String json); + +} diff --git a/evo-admin/src/main/java/com/evo/attendance/service/impl/PunchTheClockServiceImpl.java b/evo-admin/src/main/java/com/evo/attendance/service/impl/PunchTheClockServiceImpl.java new file mode 100644 index 0000000..62aa1d3 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/service/impl/PunchTheClockServiceImpl.java @@ -0,0 +1,559 @@ +package com.evo.attendance.service.impl; + +import com.alibaba.fastjson2.JSONObject; +import com.evo.attendance.domain.*; +import com.evo.attendance.mapper.*; +import com.evo.common.constant.Constants; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.StringUtils; +import com.evo.equipment.domain.EqImages; +import com.evo.equipment.mapper.EqImagesMapper; +import com.evo.attendance.domain.vo.RzAttendanceData; +import com.evo.attendance.domain.vo.RzAttendanceVo; +import com.evo.attendance.service.PunchTheClockService; +import com.evo.personnelMatters.domain.EqOverStaff; +import com.evo.personnelMatters.domain.RzOverTime; +import com.evo.personnelMatters.domain.RzOverTimeDetail; +import com.evo.personnelMatters.domain.SpecialOverTime; +import com.evo.personnelMatters.mapper.BsOverTimeMapper; +import com.evo.personnelMatters.mapper.EqOverStaffMapper; +import com.evo.personnelMatters.mapper.RzOverTimeDetailMapper; +import com.evo.personnelMatters.mapper.RzOverTimeMapper; +import com.evo.system.domain.SysStaff; +import com.evo.system.mapper.SysStaffDetailMapper; +import com.evo.system.mapper.SysStaffMapper; +import com.evo.utils.DateUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.Date; + + +@Service +public class PunchTheClockServiceImpl implements PunchTheClockService { + + @Resource + private EqImagesMapper eqImagesMapper; //鐓х墖绠$悊 + @Resource + private RzAttendanceMapper rzAttendanceMapper; //鑰冨嫟璁板綍 + @Resource + private RzAttendanceDetailMapper rzAttendanceDetailMapper; //鎵撳崱鏄庣粏 + @Resource + private SysStaffMapper sysStaffMapper; //鍛樺伐淇℃伅 + @Resource + private SysStaffDetailMapper sysStaffDetailMapper; //鍛樺伐璇︽儏 + @Resource + private RzOverTimeDetailMapper rzOverTimeDetailMapper; //鍔犵彮璇︽儏 + @Resource + private RzOverTimeMapper rzOverTimeMapper; //鍔犵彮缁熻 + @Resource + private RzAttendanceStatisticalMapper rzAttendanceStatisticalMapper; //鎵撳崱缁熻 + @Resource + private RzSpecialAttendanceMapper rzSpecialAttendanceMapper; + @Resource + private EqOverStaffMapper eqOverStaffMapper; + @Resource + private BsOverTimeMapper bsOverTimeMapper; + @Resource + private RzSpecialOverTimeMapper rzSpecialOverTimeMapper; + /** + * 鍒疯劯鑾峰彇鎵撳崱鎸夐挳鏉冮檺 + * sn 璁惧鍙 + * type 璁惧璇嗗埆绫诲瀷 + * user_id 鐢ㄦ埛id + * card 浜哄憳淇℃伅涓殑鍗″彿 + * confidence 浜鸿劯绠楁硶璇嗗埆鍒扮殑鐩歌瘑搴 + * temperature 娴嬮噺鍒扮殑娓╁害锛屾湭寮鍚祴娓╃殑璁惧涓虹┖ + * + * 鍝嶅簲锛 Result 杩斿洖璇锋眰绫诲瀷锛0锛氬彲浠ユ墦鍗★紝鍏跺畠鍊艰〃绀烘棤娉曟墦鍗 + * Msg 瀵瑰簲 Result 鐨勭姸鎬侊紝鍙负绌 + * Content 璇嗗埆鍚庤繑鍥炵殑璇︾粏淇℃伅 + * button 9浣嶉暱搴︾殑瀛楃涓诧紝0 琛ㄧず涓嶅彲浠ョ偣鍑 1 琛ㄧず鍙互鐐瑰嚮 + * + * String sn,String type,String userId,String card,String confidence + */ + @Override + public String returnMessage(String json){ + //瑙f瀽鏀跺埌鐨勬暟鎹 + JSONObject jsonObject = JSONObject.parseObject(json); + String userId = jsonObject.getString("user_id"); + //闇瑕佹帹閫佺殑鏁版嵁 + String message = ""; + //闇瑕佽繑鍥炵殑瀵硅薄 + RzAttendanceVo cardV = new RzAttendanceVo(); + RzAttendanceData cardD = new RzAttendanceData(); + String sn = jsonObject.getString("sn"); + if(com.evo.equipment.constant.Constants.EQ_DEVICE_OVER_TIME_CODE.equals(sn)){ + boolean flag = DateUtil.isSaturday(new Date(),1); + if(flag){ + cardV.setResult(1); + cardV.setMsg("{\"Result\":1,\"Msg\":\"鍛ㄦ棩涓嶈兘鎵撳崱\"}"); + cardD.setButton("000000000"); + cardV.setContent(cardD); + //Java瀵硅薄杞崲鎴怞SON瀛楃涓 + message = JSONObject.toJSONString(cardV); + return message; + } + EqOverStaff eqOverStaff = eqOverStaffMapper.selectEqOverStaffByUserId(Long.valueOf(userId)); + if(StringUtils.isNull(eqOverStaff)){ + cardV.setResult(1); + cardV.setMsg("{\"Result\":1,\"Msg\":\"楠岃瘉澶辫触,鏈缃冨嫟鏉冮檺\"}"); + cardD.setButton("000000000"); + cardV.setContent(cardD); + //Java瀵硅薄杞崲鎴怞SON瀛楃涓 + message = JSONObject.toJSONString(cardV); + return message; + } + RzSpecialAttendance rzSpecialAttendance = rzSpecialAttendanceMapper.selectRzSpecialAttendanceByuserIdAndDate(Long.valueOf(userId),new Date()); + if(StringUtils.isNull(rzSpecialAttendance)){ + cardV.setResult(0); + cardV.setMsg("楠岃瘉閫氳繃"); + cardD.setButton("111100000"); + cardV.setContent(cardD); + //Java瀵硅薄杞崲鎴怞SON瀛楃涓 + message = JSONObject.toJSONString(cardV); + }else{ + cardV.setResult(0); + cardV.setMsg("楠岃瘉閫氳繃"); + cardD.setButton("000011000"); + cardV.setContent(cardD); + //Java瀵硅薄杞崲鎴怞SON瀛楃涓 + message = JSONObject.toJSONString(cardV); + } + return message; + } + //鏍规嵁ID鏌ヨ鍦ㄨ亴鍛樺伐淇℃伅 + SysStaff sysStaff = sysStaffMapper.selectSysStaffByUserId(Long.valueOf(userId)); + //鍛樺伐涓嶅瓨鍦紝璇存槑绂昏亴娌℃湁鎵撳崱鏉冮檺 + if(StringUtils.isNull(sysStaff)){ + cardV.setResult(1); + cardV.setMsg("{\"Result\":1,\"Msg\":\"楠岃瘉澶辫触,鏈缃冨嫟鏉冮檺\"}"); + cardD.setButton("000000000"); + cardV.setContent(cardD); + //Java瀵硅薄杞崲鎴怞SON瀛楃涓 + message = JSONObject.toJSONString(cardV); + return message; + } + //鏍规嵁id鏌ヨ褰撳墠鍛樺伐涓嶆槸鍛樺伐鍒楄〃涓殑浜猴紝杩斿洖鎻愮ず + EqImages userImg = eqImagesMapper.selectEqImagesByStaffId(Long.valueOf(userId)); + if(StringUtils.isNull(userImg)){ + cardV.setResult(1); + cardV.setMsg("{\"Result\":1,\"Msg\":\"楠岃瘉澶辫触,鏈缃冨嫟鏉冮檺\"}"); + cardD.setButton("000000000"); + cardV.setContent(cardD); + //Java瀵硅薄杞崲鎴怞SON瀛楃涓 + message = JSONObject.toJSONString(cardV); + return message; + } + //鏌ヨ鍛樺伐鐨勬渶鍚庝竴娆℃墦鍗 鎸夐挳鍒囨崲 + RzAttendanceDetail rzAttendanceDetail = rzAttendanceDetailMapper.selectLastRzAttendanceDetail(Long.valueOf(userId)); + //鍒ゆ柇鏈鍚庝竴娆℃墦鍗′负涓嬬彮鍗℃垨娌℃湁鎵撳崱璁板綍锛屽垯鎵撳崱涓轰笂鐝崱 + if(StringUtils.isNull(rzAttendanceDetail) || "涓嬬彮鍗".equals(rzAttendanceDetail.getButtonType()) || "鎾ら攢".equals(rzAttendanceDetail.getButtonType())){ + //濡傛灉鏈鍚庝竴鏉℃暟鎹殑鍗$被鍨嬩负涓嬬彮鍗★紝鍒欒繑鍥炰笂鐝崱鍜屽姞鐝崱鏉冮檺 + cardV.setResult(0); + cardV.setMsg("楠岃瘉閫氳繃"); + cardD.setButton("111100000"); + cardV.setContent(cardD); + //Java瀵硅薄杞崲鎴怞SON瀛楃涓 + message = JSONObject.toJSONString(cardV); + }else{ + cardV.setResult(0); + cardV.setMsg("楠岃瘉閫氳繃"); + cardD.setButton("000011000"); + cardV.setContent(cardD); + //Java瀵硅薄杞崲鎴怞SON瀛楃涓 + message = JSONObject.toJSONString(cardV); + } + return message; + } + /** + * 鐢ㄦ埛鐐瑰嚮鎵撳崱鎸夐挳鍚庤姹傜殑鎺ュ彛 + * sn 璁惧鍙 + * user_id 浜哄憳id + * user_name 鐢ㄦ埛鍚 + * user_type 鐢ㄦ埛绫诲瀷锛屽搴斾笅鍙戜汉鍛樻椂鐨 user_type + * card_number 鍗″彿 + * recog_type 璇嗗埆绫诲瀷: face - 涓轰汉鑴歌瘑鍒 銆乧ard - 鍒峰崱寮闂紝浜鸿劯鎴栧崱妯″紡 + * recog_time 璇嗗埆鏃堕棿(鏃堕棿鏍煎紡yyyy-MM-dd HH:mm:ss) + * photo 璇嗗埆鐓х墖锛屾湇鍔$鏀跺埌鍚庤浆鎹㈡垚鍥剧墖姝ラ璇锋煡鐪 2銆佹湇鍔¤鑼 - 鐓х墖瑙g爜娴佺▼ + * body_temperature 浣撴俯 + * confidence 閫氳繃鐨勭疆淇″害 + * button 1~9 琛ㄧず鐐瑰嚮鐨勬槸绗嚑涓寜閽 + * + * 鍝嶅簲锛歊esult 杩斿洖璇锋眰绫诲瀷锛0鎴愬姛锛屽叾瀹冨け璐 + * Msg 瀵瑰簲 Result 鐨勬枃鏈俊鎭 + * + * String sn,String userId,String userName,String userType,String cardNumber,String recog_type,String recog_time,String photo,String body_temperature,String confidence,String button + */ + @Override + @Transactional + public String recordFace(String json){ + //瑙f瀽鏀跺埌鐨勬暟鎹 + JSONObject jsonObject = JSONObject.parseObject(json); + String userId = jsonObject.getString("user_id"); + String sn = jsonObject.getString("sn"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd"); + Date date = null; //鎵撳崱鏃堕棿 + try{ + date = sdf.parse(jsonObject.getString("recog_time")); + }catch (Exception e){ + e.printStackTrace(); + return "{\"Result\":1,\"Msg\":\"鎵撳崱澶辫触\"}"; + } + String rules = ""; //鎵撳崱瑙勫垯 + String button = jsonObject.getString("button"); + switch (button){ + case "1": + rules = "涓婄彮鍗★紙鍗曠彮鍒讹級"; + break; + case "2": + rules = "涓婄彮鍗★紙鍙岀彮鍒讹級"; + break; + case "3": + rules = "涓婄彮鍗★紙涓夌彮鍒讹級"; + break; + case "4": + rules = "鍔犵彮鍗"; + break; + case "5": + rules = "涓嬬彮鍗"; + break; + default: + rules = "鎾ら攢"; + break; + } + + //鍒ゆ柇鏄墦鐗规畩鍔犵彮鍗 + if(com.evo.equipment.constant.Constants.EQ_DEVICE_OVER_TIME_CODE.equals(sn)){ + RzSpecialAttendance rzSpecialAttendance = null; + SysStaff sysStaff = sysStaffMapper.selectSysStaffByUserId(Long.valueOf(userId)); + if("1".equals(button) || "2".equals(button) || "3".equals(button) || "6".equals(button)){ + return "{\"Result\":1,\"Msg\":\"鏃犳晥鎵撳崱\"}"; + } + if("4".equals(button)){ + rzSpecialAttendance = new RzSpecialAttendance(); + rzSpecialAttendance.setAttendanceDate(new Date()); + rzSpecialAttendance.setStaffId(Long.valueOf(userId)); + rzSpecialAttendance.setName(sysStaff.getName()); + rzSpecialAttendance.setWorkStartTime(date); + rzSpecialAttendance.setDeptId(sysStaff.getDeptId()); + rzSpecialAttendance.setDelFlag("0"); + rzSpecialAttendance.setCreateBy("admin"); + rzSpecialAttendance.setCreateTime(new Date()); + rzSpecialAttendanceMapper.insertRzSpecialAttendance(rzSpecialAttendance); + + RzSpecialOverTime rzSpecialOverTime = rzSpecialOverTimeMapper.selectRzSpecialOverTimeByUserIdAndDate(rzSpecialAttendance.getStaffId(),rzSpecialAttendance.getAttendanceDate()); + if(StringUtils.isNull(rzSpecialOverTime)){ + rzSpecialOverTime = new RzSpecialOverTime(); + rzSpecialOverTime.setUserId(Long.valueOf(userId)); + rzSpecialOverTime.setName(sysStaff.getName()); + rzSpecialOverTime.setDeptId(sysStaff.getDeptId()); + rzSpecialOverTime.setDelFlag("0"); + rzSpecialOverTime.setOverDate(date); + rzSpecialOverTime.setCreateTime(new Date()); + rzSpecialOverTime.setCreateBy("admin"); + rzSpecialOverTimeMapper.insertRzSpecialOverTime(rzSpecialOverTime); + } + return "{\"Result\":0,\"Msg\":\"鎵撳崱鎴愬姛\"}"; + }else { + rzSpecialAttendance = rzSpecialAttendanceMapper.selectRzSpecialAttendanceByuserIdAndDate(Long.valueOf(userId),new Date()); + rzSpecialAttendance.setWorkEndTime(date); + SpecialOverTime specialOverTime = bsOverTimeMapper.selectSpecialOverTimeById(); + try{ + Date overDate_s = sdf.parse(sdfd.format(rzSpecialAttendance.getWorkStartTime())+" "+specialOverTime.getWorkStart()); + Date overDate_e = sdf.parse(sdfd.format(date)+" "+specialOverTime.getWorkEnd()); + + Long minutes = 0l; + if(overDate_s.after(rzSpecialAttendance.getWorkStartTime()) && overDate_e.before(date)){ + minutes = (overDate_e.getTime() - overDate_s.getTime())/1000/60; + }else { + if(overDate_s.before(rzSpecialAttendance.getWorkStartTime()) && overDate_e.after(date)){ + minutes = (date.getTime() - rzSpecialAttendance.getWorkStartTime().getTime())/1000/60; + }else{ + if(overDate_e.after(date)){ + minutes = (date.getTime() - overDate_s.getTime())/1000/60; + }else { + minutes = (overDate_e.getTime() - rzSpecialAttendance.getWorkStartTime().getTime())/1000/60; + } + } + } + if(minutes >= 180){ + rzSpecialAttendance.setWorkHours(new BigDecimal(3)); + }else if(minutes >= 120){ + rzSpecialAttendance.setWorkHours(new BigDecimal(2)); + } + rzSpecialAttendanceMapper.updateRzSpecialAttendance(rzSpecialAttendance); + + RzSpecialOverTime rzSpecialOverTime = rzSpecialOverTimeMapper.selectRzSpecialOverTimeByUserIdAndDate(rzSpecialAttendance.getStaffId(),rzSpecialAttendance.getAttendanceDate()); + rzSpecialOverTime.setSickHours(rzSpecialOverTime.getSickHours().add(rzSpecialAttendance.getWorkHours())); + rzSpecialOverTimeMapper.updateRzSpecialOverTime(rzSpecialOverTime); + + RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzSpecialAttendance.getStaffId(),rzSpecialAttendance.getAttendanceDate()); + if(StringUtils.isNull(rzAttendanceStatistical.getOverTimeHours())){ + rzAttendanceStatistical.setOverTimeHours(new BigDecimal(0.0)); + } + rzAttendanceStatistical.setOverTimeHours(rzAttendanceStatistical.getOverTimeHours().add(rzSpecialAttendance.getWorkHours())); + rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical); + return "{\"Result\":0,\"Msg\":\"鎵撳崱鎴愬姛\"}"; + }catch (Exception e){ + e.printStackTrace(); + return "{\"Result\":1,\"Msg\":\"鎵撳崱澶辫触\"}"; + } + } + } + + //鏍规嵁ID鏌ヨ鍛樺伐淇℃伅 ,鍒ゆ柇鍛樺伐鏄惁瀛樺湪锛屼笉瀛樺湪杩斿洖澶辫触 + SysStaff sysStaff = sysStaffMapper.selectSysStaffByUserId(Long.valueOf(userId));//鎵撳崱璁板綍淇℃伅 + if(sysStaff == null){ + return "{\"Result\":1,\"Msg\":\"楠岃瘉澶辫触,鏈缃冨嫟鏉冮檺\"}"; + } + //鑾峰彇鍛樺伐鐨勫伐浣滄椂闀 + EqImages eqImages = eqImagesMapper.selectEqImagesByStaffId(Long.valueOf(userId)); + //鎵撳崱鏄庣粏 + RzAttendanceDetail attendanceDetail = new RzAttendanceDetail(); + //鎵撳崱鏄庣粏琛ㄤ腑鎻掑叆鏁版嵁 + attendanceDetail.setButtonType(rules); + attendanceDetail.setName(sysStaff.getName()); + attendanceDetail.setDateTime(date); + attendanceDetail.setDelFlag(Constants.DELETE_FLAG_0); + attendanceDetail.setStaffId(Long.valueOf(userId)); + attendanceDetail.setEquipmentCode(sn); + attendanceDetail.setCreateTime(new Date()); + int i = rzAttendanceDetailMapper.insertRzAttendanceDetail(attendanceDetail); + if(i < 1){ + return "{\"Result\":1,\"Msg\":\"鎵撳崱澶辫触\"}"; + } + //鑰冨嫟鍔犵彮缁熻 + RzOverTime rzOverTime = null; + RzOverTimeDetail rzOverTimeDetail = null; + + //鎵撶殑鏄姞鐝崱锛屽姞鐝垪琛ㄤ腑濉啓鏁版嵁 + if("4".equals(button)){ + //鍒ゆ柇鎵撳崱鏈堟槸鍚︾粺璁¤繃鍔犵彮 + rzOverTime = rzOverTimeMapper.selectRzOverTimeByNameAndMonth(Long.valueOf(userId),date); + if(rzOverTime == null){ + rzOverTime = new RzOverTime(); + rzOverTime.setUserId(Long.valueOf(userId)); + rzOverTime.setOverHours(new BigDecimal("0.0")); + rzOverTime.setDeptId(sysStaff.getDeptId()); + rzOverTime.setName(sysStaff.getName()); + rzOverTime.setOverTimeMonth(date); + rzOverTime.setDelFlag(Constants.DELETE_FLAG_0); + rzOverTime.setCreateBy("admin"); + rzOverTime.setCreateTime(DateUtils.getNowDate()); + i = rzOverTimeMapper.insertRzOverTime(rzOverTime); + if(i < 1){ + return "{\"Result\":1,\"Msg\":\"鎵撳崱澶辫触\"}"; + } + } + rzOverTimeDetail = new RzOverTimeDetail(); + rzOverTimeDetail.setOverTimeId(rzOverTime.getId()); + rzOverTimeDetail.setOverTimeStart(date); + rzOverTimeDetail.setName(sysStaff.getName()); + rzOverTimeDetail.setDelFlag(Constants.DELETE_FLAG_0); + rzOverTimeDetail.setCreateBy("admin"); + rzOverTimeDetail.setCreateTime(DateUtils.getNowDate()); + i = rzOverTimeDetailMapper.insertRzOverTimeDetail(rzOverTimeDetail); + if(i < 1){ + return "{\"Result\":1,\"Msg\":\"鎵撳崱澶辫触\"}"; + } + return "{\"Result\":0,\"Msg\":\"鎵撳崱鎴愬姛\"}"; + } + + //鍛樺伐鑰冨嫟璁板綍 + RzAttendance attendance = rzAttendanceMapper.queryNowDayAttendanceByStatisticalIdAndDate(Long.valueOf(userId),date); + //鍒ゆ柇鏄挙閿鍗 + if("6".equals(button)){ + attendance.setRules(""); + i = rzAttendanceMapper.updateRzAttendance(attendance); + if(i < 1){ + return "{\"Result\":1,\"Msg\":\"鎵撳崱澶辫触\"}"; + } + return "{\"Result\":0,\"Msg\":\"鎵撳崱鎴愬姛\"}"; + } + + //鍒ゆ柇鏄笂鐝崱 + if("1".equals(button) || "2".equals(button) || "3".equals(button)){ + if(StringUtils.isNotNull(attendance.getWorkStartTime())){ + attendance.setRules(rules); + }else{ + attendance.setRules(rules); + attendance.setWorkStartTime(date); + } + try{ + //鍒ゆ柇涓夌涓婄彮鍗 + Date db_pre = sdf.parse(sdfd.format(date) + " 08:30:00"); + Date sb_pre = sdf.parse(sdfd.format(date) + " 17:00:00"); + Date sbz_pre = sdf.parse(sdfd.format(date) + " 20:30:00"); + if("涓婄彮鍗★紙鍗曠彮鍒讹級".equals(rules) && date.after(db_pre) + || ("涓婄彮鍗★紙鍙岀彮鍒讹級".equals(rules) && ((date.after(db_pre) && date.getHours() < 12) || (date.after(sb_pre) && date.getHours() <21))) + || ("涓婄彮鍗★紙涓夌彮鍒讹級".equals(rules) && ((date.after(db_pre) && date.getHours() < 12) || (date.after(sbz_pre) && date.getHours() < 24)))){ + attendance.setYcsFlag("1"); + } + }catch (Exception e){ + e.printStackTrace(); + } + i = rzAttendanceMapper.updateRzAttendance(attendance); + if(i < 1){ + return "{\"Result\":1,\"Msg\":\"鎵撳崱澶辫触\"}"; + } + return "{\"Result\":0,\"Msg\":\"鎵撳崱鎴愬姛\"}"; + } + + // 鏌ヨ鍛樺伐鐨勬渶鍚庝竴娆′笂鐝墦鍗′俊鎭 + RzAttendanceDetail rzAttendanceDetail = rzAttendanceDetailMapper.selectRzAttendanceDetailByStaffId(Long.valueOf(userId)); + + //涓嬬彮鍗 + //鏈鍚庝竴娆℃墦鍗′负鍔犵彮鍗 璺ㄦ湀鍔犵彮鎸変笂涓湀鍔犵彮璁$畻 + if("鍔犵彮鍗".equals(rzAttendanceDetail.getButtonType())){ + //淇敼鍔犵彮鎵撳崱璁板綍 鏍规嵁鍛樺伐ID鍜屾椂闂存煡鎵 缁熻鏁版嵁 + rzOverTime = rzOverTimeMapper.selectRzOverTimeByNameAndMonth(Long.valueOf(userId),rzAttendanceDetail.getDateTime()); + //鏌ユ壘鍔犵彮璇︽儏 鍔犵彮缁熻ID鍜屽姞鐝紑濮嬫椂闂 + rzOverTimeDetail = rzOverTimeDetailMapper.queryRzOverTimeDetailByDateAndOverId(rzOverTime.getId(),rzAttendanceDetail.getDateTime()); + rzOverTimeDetail.setOverTimeEnd(date); + //璁$畻鍔犵彮鏃堕暱 灏忔椂 + double hours = (rzOverTimeDetail.getOverTimeEnd().getTime() - rzOverTimeDetail.getOverTimeStart().getTime())/1000/60/60; + if(hours > 4){ + rzOverTimeDetail.setOverTimeHours(BigDecimal.valueOf(4)); + }else{ + rzOverTimeDetail.setOverTimeHours(BigDecimal.valueOf(hours)); + } + + i = rzOverTimeDetailMapper.updateRzOverTimeDetail(rzOverTimeDetail); + if(i < 1){ + return "{\"Result\":1,\"Msg\":\"鎵撳崱澶辫触\"}"; + } + //鍔犵彮淇敼缁熻 + rzOverTime.setOverHours(rzOverTime.getOverHours().add(rzOverTimeDetail.getOverTimeHours())); + i = rzOverTimeMapper.updateRzOverTime(rzOverTime); + if(i < 1){ + return "{\"Result\":1,\"Msg\":\"鎵撳崱澶辫触\"}"; + } + //鍙嶅啓鑰冨嫟姹囨 + RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(Long.valueOf(userId),rzOverTime.getOverTimeMonth()); + rzAttendanceStatistical.setWorkOvertimeNumber(rzOverTime.getOverHours()); + i = rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical); + if(i < 1){ + return"{\"Result\":1,\"Msg\":\"鎵撳崱澶辫触\"}"; + } + return "{\"Result\":0,\"Msg\":\"鎵撳崱鎴愬姛\"}"; + } + + BigDecimal res = new BigDecimal("0.0"); //璁板綍宸ユ椂 + //璁$畻宸ユ椂 + Long hours = (date.getTime() - rzAttendanceDetail.getDateTime().getTime())/1000/60/60; + //鍒ゆ柇涓嶆槸褰撳ぉ鐨勪笅鐝崱 + if(StringUtils.isNull(attendance.getWorkStartTime())){ + //鏈鍚庝竴娆′笂鐝崱鎵撳崱鏃堕棿 + attendance = rzAttendanceMapper.selectLastRzAttendanceByStaffId(Long.valueOf(userId)); + //鍒ゆ柇鏄崟鐝紝鍙岀彮锛岃繕鏄笁鐝 + if("涓婄彮鍗★紙涓夌彮鍒讹級".equals(attendance.getRules())){ + if(hours >= eqImages.getHours().longValue() -1){ + res = eqImages.getHours(); + }else if(hours >= 5){ + res = new BigDecimal(6); + } + //鍒ゆ柇鎵撳崱鏃堕棿, 娣诲姞澶滅彮娆℃暟 鎵撳崱鏃堕棿鍦ㄦ櫄涓7鐐逛互鍚 + if(hours > 8 && attendance.getWorkStartTime().getHours() > 18){ + attendance.setNightNumber(1); + } + }else if("涓婄彮鍗★紙鍙岀彮鍒讹級".equals(attendance.getRules())){ + if(hours >= 7.5){ + res = new BigDecimal("8"); + }else if(hours >= 3.5){ + res = new BigDecimal(4); + } + //鍒ゆ柇鎵撳崱鏃堕棿, 娣诲姞涓彮娆℃暟 鎵撳崱鏃堕棿鍦ㄤ笅鍗3鐐逛互鍚 + if(hours > 6.5 && attendance.getWorkStartTime().getHours() > 15){ + attendance.setMiddleShiftNumber(1); + } + }else{ + if(hours >= 8){ + res = new BigDecimal("8"); + }else if(hours >= 3){ + res = new BigDecimal(4); + } + } + }else{ + try{ + if("涓婄彮鍗★紙鍗曠彮鍒讹級".equals(rzAttendanceDetail.getButtonType())){ + if(attendance.getWorkStartTime().getTime() - sdf.parse(sdfd.format(date) + " 08:30:00").getTime() > 1000*60*+60 + || sdf.parse(sdfd.format(date) + " 17:30:00").getTime() - date.getTime() > 1000*60*+60){ + if(hours >= 3){ + res = new BigDecimal("4"); + } + }else{ + if(hours >= 8){ + res = new BigDecimal("8.0"); + }else if(hours >= 4){ + res = new BigDecimal(4); + } + } + }else if("涓婄彮鍗★紙鍙岀彮鍒讹級".equals(rzAttendanceDetail.getButtonType())){ + if(attendance.getWorkStartTime().getTime() - sdf.parse(sdfd.format(date) + " 08:30:00").getTime() > 1000*60*+60 + || sdf.parse(sdfd.format(date) + " 17:30:00").getTime() - date.getTime() > 1000*60*+60){ + if(hours >= 4){ + res = new BigDecimal("4"); + } + }else{ + if(hours >= 8){ + res = new BigDecimal("8.0"); + }else if(hours >= 4){ + res = new BigDecimal(4); + } + } + }else if("涓婄彮鍗★紙涓夌彮鍒讹級".equals(rzAttendanceDetail.getButtonType())){ + if(attendance.getWorkStartTime().getTime() - sdf.parse(sdfd.format(date) + " 08:30:00").getTime() > 1000*60*+60 + || sdf.parse(sdfd.format(date) + " 20:30:00").getTime() - date.getTime() > 1000*60*+60){ + if(hours >= 5){ + res = new BigDecimal("6"); + } + }else{ + if(hours >= eqImages.getHours().longValue()-1){ + res = eqImages.getHours(); + }else if(hours >= 5){ + res = new BigDecimal(6); + } + } + } + }catch (Exception e){ + + } + } + try{ + //涓嬬彮鍗″紓甯 + Date db_pre = sdf.parse(sdfd.format(date) + " 08:30:00"); + Date sb_pre = sdf.parse(sdfd.format(date) + " 17:00:00"); + Date db_pre_2 = sdf.parse(sdfd.format(date) + " 17:30:00"); + Date sbz_pre = sdf.parse(sdfd.format(date) + " 20:30:00"); + Date sbz_pre_2 = sdf.parse(sdfd.format(date) + " 01:30:00"); + if(("涓婄彮鍗★紙鍗曠彮鍒讹級".equals(rzAttendanceDetail.getButtonType()) && date.before(db_pre_2)) + || ("涓婄彮鍗★紙鍙岀彮鍒讹級".equals(rzAttendanceDetail.getButtonType()) + && ((date.before(sb_pre) && date.after(db_pre)) || ((date.before(sbz_pre_2)) && date.after(sb_pre)))) + || ("涓婄彮鍗★紙涓夌彮鍒讹級".equals(rzAttendanceDetail.getButtonType()) && ((date.before(sbz_pre) && date.getHours() > 14) || date.before(db_pre)))){ + attendance.setYcxFlag("1"); + } + }catch (Exception e){ + e.printStackTrace(); + } + //淇敼鎵撳崱璁板綍 + attendance.setWorkEndTime(date); + attendance.setWorkSum(res); + i = rzAttendanceMapper.updateRzAttendance(attendance); + if(i < 1){ + return "{\"Result\":1,\"Msg\":\"鎵撳崱澶辫触\"}"; + } + //鍙嶅啓鑰冨嫟姹囨 + RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(Long.valueOf(userId),attendance.getAttendanceDate()); + rzAttendanceStatistical.setRealAttendance(rzAttendanceStatistical.getRealAttendance().add(attendance.getWorkSum())); + i = rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical); + if(i < 1){ + return"{\"Result\":1,\"Msg\":\"鎵撳崱澶辫触\"}"; + } + return "{\"Result\":0,\"Msg\":\"鎵撳崱鎴愬姛\"}"; + } + +} diff --git a/evo-admin/src/main/java/com/evo/attendance/service/impl/RzAbnormalDetailServiceImpl.java b/evo-admin/src/main/java/com/evo/attendance/service/impl/RzAbnormalDetailServiceImpl.java new file mode 100644 index 0000000..498e2fc --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/service/impl/RzAbnormalDetailServiceImpl.java @@ -0,0 +1,176 @@ +package com.evo.attendance.service.impl; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; +import com.evo.attendance.domain.RzAbnormal; +import com.evo.attendance.domain.RzAttendance; +import com.evo.attendance.domain.RzAttendanceStatistical; +import com.evo.attendance.mapper.RzAbnormalMapper; +import com.evo.attendance.mapper.RzAttendanceMapper; +import com.evo.attendance.mapper.RzAttendanceStatisticalMapper; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.personnelMatters.domain.RzHoliday; +import com.evo.personnelMatters.mapper.RzHolidayMapper; +import com.evo.utils.DateUtil; +import org.springframework.stereotype.Service; +import com.evo.attendance.mapper.RzAbnormalDetailMapper; +import com.evo.attendance.domain.RzAbnormalDetail; +import com.evo.attendance.service.IRzAbnormalDetailService; +import javax.annotation.Resource; + +/** + * 鑰冨嫟寮傚父璇︽儏Service涓氬姟灞傚鐞 + * + * @author evo + * @date 2025-03-10 + */ +@Service +public class RzAbnormalDetailServiceImpl implements IRzAbnormalDetailService +{ + @Resource + private RzAbnormalDetailMapper rzAbnormalDetailMapper; + @Resource + private RzAttendanceMapper rzAttendanceMapper; //鑰冨嫟淇℃伅 + @Resource + private RzAbnormalMapper rzAbnormalMapper; //寮傚父姹囨 + @Resource + private RzHolidayMapper rzHolidayMapper; //鑺傚亣鏃 + @Resource + private RzAttendanceStatisticalMapper rzAttendanceStatisticalMapper; //鑰冨嫟缁熻 + /** + * 鏌ヨ鑰冨嫟寮傚父璇︽儏 + * + * @param id 鑰冨嫟寮傚父璇︽儏涓婚敭 + * @return 鑰冨嫟寮傚父璇︽儏 + */ + @Override + public RzAbnormalDetail selectRzAbnormalDetailById(Long id) + { + return rzAbnormalDetailMapper.selectRzAbnormalDetailById(id); + } + + /** + * 鏌ヨ鑰冨嫟寮傚父璇︽儏鍒楄〃 + * + * @param rzAbnormalDetail 鑰冨嫟寮傚父璇︽儏 + * @return 鑰冨嫟寮傚父璇︽儏 + */ + @Override + public List selectRzAbnormalDetailList(RzAbnormalDetail rzAbnormalDetail) + { + return rzAbnormalDetailMapper.selectRzAbnormalDetailList(rzAbnormalDetail); + } + + /** + * 鏂板鑰冨嫟寮傚父璇︽儏 + * @return 缁撴灉 + */ + @Override + public void insertRzAbnormalDetail(){ + List res_list = rzAttendanceMapper.currentDateAllAttendance(); + try{ + RzAbnormalDetail rzAbnormalDetail = null; + //鏌ヨ鑺傚亣鏃 + List h_list = rzHolidayMapper.selectRzHolidayList(null); + //鍒ゆ柇鏄惁鏄妭鍋囨棩 + int flag = 0; + for (RzHoliday rzHoliday : h_list) { + if(rzHoliday.getHoliday().compareTo(res_list.get(0).getAttendanceDate()) == 0){ + flag = 1; + break; + } + } + for (RzAttendance rzAttendance : res_list) { + //鍒ゆ柇鏄惁鏄懆鏃 + if(DateUtil.isSaturday(rzAttendance.getAttendanceDate(),1) || flag == 1){ + //鍒ゆ柇鏈墦鍗 + if(rzAttendance.getWorkStartTime() == null){ + rzAttendance.setRemarks("鍏紤"); + rzAttendanceMapper.updateRzAttendance(rzAttendance); + continue; + } + rzAttendance.setRemarks("鍔犵彮"); + rzAttendanceMapper.updateRzAttendance(rzAttendance); + continue; + } + //鍒ゆ柇浠婂ぉ娌℃湁鎵撳崱 + if("1".equals(rzAttendance.getYcsFlag()) || "1".equals(rzAttendance.getYcxFlag()) + || rzAttendance.getWorkStartTime() == null || rzAttendance.getWorkEndTime() == null){ + //鍒ゆ柇鍛樺伐褰撴湀鏄惁宸茬粡鏈夎繜鍒 + RzAbnormal rzAbnormal = rzAbnormalMapper.selectRzAbnormalByUserId(rzAttendance.getStaffId(),new Date()); + if(StringUtils.isNull(rzAbnormal)){ + rzAbnormal = new RzAbnormal(); + rzAbnormal.setDeptId(rzAttendance.getDeptId()); + rzAbnormal.setUserId(rzAttendance.getStaffId()); + rzAbnormal.setName(rzAttendance.getName()); + rzAbnormal.setNumber(0l); + rzAbnormal.setMoney(BigDecimal.valueOf(0)); + rzAbnormal.setMonth(new Date()); + rzAbnormal.setDelFlag("0"); + rzAbnormalMapper.insertRzAbnormal(rzAbnormal); + } + rzAbnormalDetail = new RzAbnormalDetail(); + rzAbnormalDetail.setAbnormalId(rzAbnormal.getId()); + rzAbnormalDetail.setName(rzAttendance.getName()); + rzAbnormalDetail.setClockDate(rzAttendance.getAttendanceDate()); + if("1".equals(rzAttendance.getYcxFlag())){ + rzAbnormalDetail.setAbnormalTime(rzAttendance.getWorkEndTime()); + rzAbnormalDetail.setClockType("涓嬬彮鍗"); + }else if("1".equals(rzAttendance.getYcsFlag())){ + rzAbnormalDetail.setAbnormalTime(rzAttendance.getWorkStartTime()); + rzAbnormalDetail.setClockType("涓婄彮鍗"); + }else if(rzAttendance.getWorkStartTime() == null){ + rzAbnormalDetail.setClockType("鏈墦鍗"); + }else{ + rzAbnormalDetail.setClockType("鏈墦涓嬬彮鍗"); + } + rzAbnormalDetail.setDelFlag("0"); + rzAbnormalDetailMapper.insertRzAbnormalDetail(rzAbnormalDetail); + //鍙嶅啓姹囨 + rzAbnormal.setNumber(rzAbnormal.getNumber() + 1); + rzAbnormalMapper.updateRzAbnormal(rzAbnormal); + //鍙嶅啓缁熻 + RzAttendanceStatistical attendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzAttendance.getStaffId(),rzAttendance.getAttendanceDate()); + attendanceStatistical.setLateNumber(attendanceStatistical.getLateNumber() + 1); + rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(attendanceStatistical); + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + + /** + * 淇敼鑰冨嫟寮傚父璇︽儏 + * + * @param rzAbnormalDetail 鑰冨嫟寮傚父璇︽儏 + * @return 缁撴灉 + */ + @Override + public int updateRzAbnormalDetail(RzAbnormalDetail rzAbnormalDetail) + { + rzAbnormalDetail.setUpdateTime(DateUtils.getNowDate()); + rzAbnormalDetail.setUpdateBy(SecurityUtils.getUsername()); + return rzAbnormalDetailMapper.updateRzAbnormalDetail(rzAbnormalDetail); + } + + + /** + * 鍒犻櫎鑰冨嫟寮傚父璇︽儏淇℃伅 + * + * @param id 鑰冨嫟寮傚父璇︽儏涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteRzAbnormalDetailById(Long id) + { + RzAbnormalDetail rzAbnormalDetail = rzAbnormalDetailMapper.selectRzAbnormalDetailById(id); + rzAbnormalDetail.setUpdateTime(DateUtils.getNowDate()); + rzAbnormalDetail.setUpdateBy(SecurityUtils.getUsername()); + rzAbnormalDetail.setDelFlag("1"); + return rzAbnormalDetailMapper.updateRzAbnormalDetail(rzAbnormalDetail); + } +} diff --git a/evo-admin/src/main/java/com/evo/attendance/service/impl/RzAbnormalServiceImpl.java b/evo-admin/src/main/java/com/evo/attendance/service/impl/RzAbnormalServiceImpl.java new file mode 100644 index 0000000..a9b4304 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/service/impl/RzAbnormalServiceImpl.java @@ -0,0 +1,105 @@ +package com.evo.attendance.service.impl; + +import java.util.ArrayList; +import java.util.List; +import com.evo.attendance.domain.RzAbnormalDetail; +import com.evo.attendance.mapper.RzAbnormalDetailMapper; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.SecurityUtils; +import com.evo.system.mapper.SysDeptMapper; +import org.springframework.stereotype.Service; +import com.evo.attendance.mapper.RzAbnormalMapper; +import com.evo.attendance.domain.RzAbnormal; +import com.evo.attendance.service.IRzAbnormalService; +import javax.annotation.Resource; + +/** + * 鑰冨嫟寮傚父Service涓氬姟灞傚鐞 + * + * @author evo + * @date 2025-03-10 + */ +@Service +public class RzAbnormalServiceImpl implements IRzAbnormalService +{ + @Resource + private RzAbnormalMapper rzAbnormalMapper; + @Resource + private SysDeptMapper deptMapper; //閮ㄩ棬 + @Resource + private RzAbnormalDetailMapper rzAbnormalDetailMapper; //寮傚父璇︽儏 + + /** + * 鏌ヨ鑰冨嫟寮傚父 + * + * @param id 鑰冨嫟寮傚父涓婚敭 + * @return 鑰冨嫟寮傚父 + */ + @Override + public RzAbnormal selectRzAbnormalById(Long id) + { + return rzAbnormalMapper.selectRzAbnormalById(id); + } + + /** + * 鏌ヨ鑰冨嫟寮傚父鍒楄〃 + * + * @param rzAbnormal 鑰冨嫟寮傚父 + * @return 鑰冨嫟寮傚父 + */ + @Override + public List selectRzAbnormalList(RzAbnormal rzAbnormal) + { + List res = rzAbnormalMapper.selectRzAbnormalList(rzAbnormal); + for (RzAbnormal re : res) { + re.setDeptName(deptMapper.selectDeptById(re.getDeptId()).getDeptName()); + } + return res; + } + + /** + * 淇敼鑰冨嫟寮傚父 + * + * @param rzAbnormal 鑰冨嫟寮傚父 + * @return 缁撴灉 + */ + @Override + public int updateRzAbnormal(RzAbnormal rzAbnormal) + { + rzAbnormal.setUpdateTime(DateUtils.getNowDate()); + rzAbnormal.setUpdateBy(SecurityUtils.getUsername()); + return rzAbnormalMapper.updateRzAbnormal(rzAbnormal); + } + + /** + * 鍒犻櫎鑰冨嫟寮傚父淇℃伅 + * + * @param id 鑰冨嫟寮傚父涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteRzAbnormalById(Long id) + { + RzAbnormal rzAbnormal = rzAbnormalMapper.selectRzAbnormalById(id); + rzAbnormal.setUpdateTime(DateUtils.getNowDate()); + rzAbnormal.setUpdateBy(SecurityUtils.getUsername()); + rzAbnormal.setDelFlag("1"); + return rzAbnormalMapper.updateRzAbnormal(rzAbnormal); + } + + /** + * 寮傚父璇︽儏 + * @param rzAbnormal + * @return + */ + @Override + public List listAbnormalDetails(RzAbnormal rzAbnormal){ + List res_list = new ArrayList(); + RzAbnormal abnormal = rzAbnormalMapper.selectRzAbnormalByUserId(rzAbnormal.getUserId(),rzAbnormal.getMonth()); + if(abnormal == null){ + return res_list; + } + res_list = rzAbnormalDetailMapper.selectRzAbnormalDetailByAbnormalId(abnormal.getId()); + return res_list; + } +} diff --git a/evo-admin/src/main/java/com/evo/attendance/service/impl/RzAttendanceServiceImpl.java b/evo-admin/src/main/java/com/evo/attendance/service/impl/RzAttendanceServiceImpl.java new file mode 100644 index 0000000..576d4c6 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/service/impl/RzAttendanceServiceImpl.java @@ -0,0 +1,192 @@ +package com.evo.attendance.service.impl; + +import com.evo.common.annotation.DataScope; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.domain.entity.SysDept; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.SecurityUtils; +import com.evo.attendance.domain.RzAttendance; +import com.evo.attendance.mapper.RzAttendanceMapper; +import com.evo.attendance.mapper.RzAttendanceStatisticalMapper; +import com.evo.attendance.service.IRzAttendanceService; +import com.evo.common.utils.StringUtils; +import com.evo.system.mapper.SysDeptMapper; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +/** + * 鑰冨嫟璁板綍Service涓氬姟灞傚鐞 + * + * @author chenyj + * @date 2024-09-05 + */ +@Service +public class RzAttendanceServiceImpl implements IRzAttendanceService +{ + @Resource + private RzAttendanceMapper rzAttendanceMapper; + @Resource + private SysDeptMapper deptMapper; //閮ㄩ棬 + @Resource + private RzAttendanceStatisticalMapper rzAttendanceStatisticalMapper; //鑰冨嫟姹囨 + + /** + * 鏌ヨ鑰冨嫟璁板綍 + * + * @param id 鑰冨嫟璁板綍涓婚敭 + * @return 鑰冨嫟璁板綍 + */ + @Override + public RzAttendance selectRzAttendanceById(Long id) + { + return rzAttendanceMapper.selectRzAttendanceById(id); + } + + /** + * 鏌ヨ鑰冨嫟璁板綍鍒楄〃 + * + * @param rzAttendance 鑰冨嫟璁板綍 + * @return 鑰冨嫟璁板綍 + */ + @DataScope(deptAlias = "d") + @Override + public List selectRzAttendanceList(RzAttendance rzAttendance) + { + List res_list = rzAttendanceMapper.selectRzAttendanceList(rzAttendance); + for (RzAttendance attendance : res_list) { + SysDept sysDept = deptMapper.selectDeptById(attendance.getDeptId()); + attendance.setDeptName(sysDept.getDeptName()); + if(attendance.getAttendanceDate().before(new Date())){ + if(attendance.getWorkStartTime() == null && attendance.getWorkEndTime() == null){ + attendance.setYcsFlag("1"); + } + } + } + return res_list; + } + + /** + * 淇敼鑰冨嫟璁板綍 + * + * @param rzAttendance 鑰冨嫟璁板綍 + * @return 缁撴灉 + */ + @Override + public int updateRzAttendance(RzAttendance rzAttendance) + { + //鍒ゆ柇鑰冨嫟鏃堕棿 + Long sj = (rzAttendance.getWorkEndTime().getTime() - rzAttendance.getWorkStartTime().getTime())/1000/60/60; + if(sj >= 8){ + rzAttendance.setWorkSum(new BigDecimal(8)); + }else if(sj >= 4){ + rzAttendance.setWorkSum(new BigDecimal(4)); + } + rzAttendance.setYcsFlag("0"); + rzAttendance.setYcxFlag("0"); + rzAttendance.setUpdateBy(SecurityUtils.getUsername()); + rzAttendance.setUpdateTime(DateUtils.getNowDate()); + return rzAttendanceMapper.updateRzAttendance(rzAttendance); + } + + /** + * 姣忔棩涓婄彮鎵撳崱缁熻 + * @return + */ + @Override + public int attendenceCount(){ + List list = rzAttendanceMapper.attendenceCount(); + return list.size(); + } + + /** + * 鎵归噺淇敼鑰冨嫟璁板綍 + * + * @param rzAttendance 鑰冨嫟璁板綍 + * @return 缁撴灉 + */ + @Override + public AjaxResult updateBatchAttendance(RzAttendance rzAttendance){ + if(StringUtils.isNull(rzAttendance.getAttendanceDate())){ + return AjaxResult.error("璇烽夋嫨鎵归噺淇敼鐨勬椂闂达紒锛"); + } + //鏍规嵁鏃堕棿鏌ヨ鎵撳崱淇℃伅 + List list = rzAttendanceMapper.selectRzAttendanceList(rzAttendance); + //鑾峰彇褰撳ぉ12鐐圭殑鏃堕棿鍜8锛30鐨勬椂闂 + SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date mid_date = null; + Date pre_date = null; + try{ + String str_pre = sdfd.format(rzAttendance.getAttendanceDate()) + " 08:30:00"; + pre_date = sdft.parse(str_pre); + String str_mid = sdfd.format(rzAttendance.getAttendanceDate()) + " 12:00:00"; + mid_date = sdft.parse(str_mid); + }catch (Exception e){ + e.printStackTrace(); + } + //寰幆鍒ゆ柇鎵撳崱鏃堕棿锛屼慨鏀规墦鍗℃椂闂 + for (RzAttendance attendance : list) { + //鍒ゆ柇涓婄彮鎵撳崱鏃堕棿瀛樺湪锛屼笖灏忎簬12鐐瑰苟涓斿ぇ浜庢棭涓8锛30 + if(attendance.getWorkStartTime() != null && attendance.getWorkStartTime().before(mid_date) && attendance.getWorkStartTime().after(pre_date)){ + //鍒ゆ柇娌℃湁鎵撳崱涓嬬彮鍗 + if(attendance.getWorkEndTime() == null){ + attendance.setWorkStartTime(pre_date); + attendance.setYcsFlag("0"); + rzAttendanceMapper.updateRzAttendance(attendance); + continue; + } + BigDecimal old = attendance.getWorkSum(); + //璁$畻涓婄彮鐨勬椂闂 + Long fz = (attendance.getWorkEndTime().getTime() - attendance.getWorkStartTime().getTime())/1000/60; + Double xs = fz/60.0; + BigDecimal res = new BigDecimal("0.0"); + //鍗曠彮鍒 + if("涓婄彮鍗★紙鍗曠彮鍒讹級".equals(attendance.getRules())){ + if(xs > 9){ + res = new BigDecimal("8.0"); + }else if(xs > 4.5){ + res = BigDecimal.valueOf(xs - 1); + }else if(xs > 1){ + res = BigDecimal.valueOf(xs); + } + }else if("涓婄彮鍗★紙鍙岀彮鍒讹級".equals(attendance.getRules())){ + if(xs > 8.5){ + res = new BigDecimal("8.0"); + }else if(xs > 1){ + res = BigDecimal.valueOf(xs); + } + }else{ + if(xs > 12){ + res = new BigDecimal("11.0"); + }else if(xs <= 1){ + res = new BigDecimal("0.0"); + }else{ + res = BigDecimal.valueOf(xs - 1); + } + } + attendance.setWorkStartTime(pre_date); + attendance.setYcsFlag("0"); + attendance.setWorkSum(res); + int i = rzAttendanceMapper.updateRzAttendance(attendance); + if(i < 1){ + continue; + } + } + } + return AjaxResult.success(); + } + /** + * 鏌ヨ鑰冨嫟璁板綍鍒楄〃 + * + * @param rzAttendance 鑰冨嫟璁板綍 + * @return 鑰冨嫟璁板綍闆嗗悎 + */ + public List listAttendanceByParams(RzAttendance rzAttendance){ + return rzAttendanceMapper.listAttendanceByParams(rzAttendance); + } + +} diff --git a/evo-admin/src/main/java/com/evo/attendance/service/impl/RzAttendanceStatisticalServiceImpl.java b/evo-admin/src/main/java/com/evo/attendance/service/impl/RzAttendanceStatisticalServiceImpl.java new file mode 100644 index 0000000..ad57736 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/service/impl/RzAttendanceStatisticalServiceImpl.java @@ -0,0 +1,136 @@ +package com.evo.attendance.service.impl; + +import com.evo.attendance.domain.RzAttendance; +import com.evo.attendance.mapper.RzAttendanceMapper; +import com.evo.common.annotation.DataScope; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.domain.entity.SysDept; +import com.evo.common.utils.DateUtils; +import com.evo.attendance.domain.RzAttendanceStatistical; +import com.evo.attendance.mapper.RzAttendanceStatisticalMapper; +import com.evo.attendance.service.IRzAttendanceStatisticalService; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.personnelMatters.domain.RzOverTime; +import com.evo.personnelMatters.mapper.RzOverTimeMapper; +import com.evo.system.mapper.SysDeptMapper; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.List; + +/** + * 鑰冨嫟缁熻Service涓氬姟灞傚鐞 + * + * @author chenyj + * @date 2024-09-05 + */ +@Service +public class RzAttendanceStatisticalServiceImpl implements IRzAttendanceStatisticalService +{ + @Resource + private RzAttendanceStatisticalMapper rzAttendanceStatisticalMapper; + @Resource + private SysDeptMapper deptMapper; //閮ㄩ棬 + @Resource + private RzAttendanceMapper rzAttendanceMapper; //鎵撳崱璁板綍 + @Resource + private RzOverTimeMapper rzOverTimeMapper; + /** + * 鏌ヨ鑰冨嫟缁熻 + * + * @param id 鑰冨嫟缁熻涓婚敭 + * @return 鑰冨嫟缁熻 + */ + @Override + public RzAttendanceStatistical selectRzAttendanceStatisticalById(Long id) + { + return rzAttendanceStatisticalMapper.selectRzAttendanceStatisticalById(id); + } + /** + * 鏌ヨ鑰冨嫟缁熻鍒楄〃 + * + * @param rzAttendanceStatistical 鑰冨嫟缁熻 + * @return 鑰冨嫟缁熻 + */ + @Override + @DataScope(deptAlias = "d") + public List selectRzAttendanceStatisticalList(RzAttendanceStatistical rzAttendanceStatistical) + { + List res_list = rzAttendanceStatisticalMapper.selectRzAttendanceStatisticalList(rzAttendanceStatistical); + for (RzAttendanceStatistical attendanceStatistical : res_list) { + SysDept sysDept = deptMapper.selectDeptById(attendanceStatistical.getDeptId()); + attendanceStatistical.setDeptName(sysDept.getDeptName()); + } + return res_list; + } + /** + * 淇敼鑰冨嫟缁熻 + * + * @param rzAttendanceStatistical 鑰冨嫟缁熻 + * @return 缁撴灉 + */ + @Override + public int updateRzAttendanceStatistical(RzAttendanceStatistical rzAttendanceStatistical) + { + rzAttendanceStatistical.setRealAttendance(rzAttendanceStatistical.getEssentialAttendance().add(rzAttendanceStatistical.getWorkOvertimeNumber())); + rzAttendanceStatistical.setUpdateTime(DateUtils.getNowDate()); + rzAttendanceStatistical.setUpdateBy(SecurityUtils.getUsername()); + return rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical); + } + + /** + * 鏍℃鏁版嵁 + * @return + */ + @Override + public AjaxResult correct(RzAttendanceStatistical rzAttendanceStatistical) { + if (StringUtils.isNull(rzAttendanceStatistical) || StringUtils.isNull(rzAttendanceStatistical.getMonth())) { + return AjaxResult.error("璇疯緭鍏ユ牎姝f棩鏈燂紒锛"); + } + //鏌ヨ鏉′欢鏈堢粺璁$殑鏁版嵁 + List ms_list = rzAttendanceStatisticalMapper.queryStatisticalByMonth(rzAttendanceStatistical.getMonth()); + //璁$畻鎵撳崱姹囨昏〃 + for (RzAttendanceStatistical attendanceStatistical : ms_list) { + //鍒濆鍖栨墦鍗¤褰 + attendanceStatistical.setEssentialAttendance(new BigDecimal("0.0")); + attendanceStatistical.setWorkOvertimeNumber(new BigDecimal("0.0")); + attendanceStatistical.setMiddleShiftNumber(0l); + attendanceStatistical.setNightNumber(0l); + //鏌ヨ鎵撳崱璁板綍 + RzAttendance rzAttendance = new RzAttendance(); + rzAttendance.setAttendanceDate(rzAttendanceStatistical.getMonth()); + rzAttendance.setStaffId(attendanceStatistical.getStaffId()); + List at_list = rzAttendanceMapper.listAttendanceByParams(rzAttendance); + for (RzAttendance attendance : at_list) { + attendanceStatistical.setEssentialAttendance(attendanceStatistical.getEssentialAttendance().add(attendance.getWorkSum())); + attendanceStatistical.setMiddleShiftNumber(attendanceStatistical.getMiddleShiftNumber() + attendance.getMiddleShiftNumber()); + attendanceStatistical.setNightNumber(attendanceStatistical.getNightNumber() + attendance.getNightNumber()); + } + //鑾峰彇鍔犵彮鏁版嵁 + RzOverTime rzOverTime = rzOverTimeMapper.selectRzOverTimeByNameAndMonth(attendanceStatistical.getStaffId(),rzAttendanceStatistical.getMonth()); + if(StringUtils.isNotNull(rzOverTime)){ + attendanceStatistical.setWorkOvertimeNumber(rzOverTime.getOverHours()); + } + attendanceStatistical.setRealAttendance(attendanceStatistical.getEssentialAttendance().add(attendanceStatistical.getWorkOvertimeNumber())); + rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(attendanceStatistical) ; + } + return AjaxResult.success(); + } + + /** + * 鎵归噺瀵煎叆鑰冨嫟缁熻 + * @param list + * @return + */ + @Override + public AjaxResult importRzAttendanceStatistical(List list){ + if(list == null || list.size() == 0){ + return AjaxResult.error("瀵煎叆鏁版嵁涓虹┖锛侊紒"); + } + for (RzAttendanceStatistical rzAttendanceStatistical : list) { + rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical); + } + return AjaxResult.success("瀵煎叆鏁版嵁鎴愬姛锛侊紒"); + } +} diff --git a/evo-admin/src/main/java/com/evo/attendance/service/impl/RzSpecialAttendanceServiceImpl.java b/evo-admin/src/main/java/com/evo/attendance/service/impl/RzSpecialAttendanceServiceImpl.java new file mode 100644 index 0000000..dcdd65a --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/service/impl/RzSpecialAttendanceServiceImpl.java @@ -0,0 +1,134 @@ +package com.evo.attendance.service.impl; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +import com.evo.attendance.domain.RzAttendanceStatistical; +import com.evo.attendance.domain.RzSpecialAttendance; +import com.evo.attendance.domain.RzSpecialOverTime; +import com.evo.attendance.mapper.RzAttendanceStatisticalMapper; +import com.evo.attendance.mapper.RzSpecialAttendanceMapper; +import com.evo.attendance.mapper.RzSpecialOverTimeMapper; +import com.evo.attendance.service.IRzSpecialAttendanceService; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.SecurityUtils; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; + +/** + * 鍔犵彮鑰冨嫟璁板綍Service涓氬姟灞傚鐞 + * + * @author evo + * @date 2025-04-15 + */ +@Service +public class RzSpecialAttendanceServiceImpl implements IRzSpecialAttendanceService +{ + @Resource + private RzSpecialAttendanceMapper rzSpecialAttendanceMapper; + @Resource + private RzSpecialOverTimeMapper rzSpecialOverTimeMapper; + @Resource + private RzAttendanceStatisticalMapper rzAttendanceStatisticalMapper; + /** + * 鏌ヨ鍔犵彮鑰冨嫟璁板綍 + * + * @param id 鍔犵彮鑰冨嫟璁板綍涓婚敭 + * @return 鍔犵彮鑰冨嫟璁板綍 + */ + @Override + public RzSpecialAttendance selectRzSpecialAttendanceById(Long id) + { + return rzSpecialAttendanceMapper.selectRzSpecialAttendanceById(id); + } + + /** + * 鏌ヨ鍔犵彮鑰冨嫟璁板綍鍒楄〃 + * + * @param rzSpecialAttendance 鍔犵彮鑰冨嫟璁板綍 + * @return 鍔犵彮鑰冨嫟璁板綍 + */ + @Override + public List selectRzSpecialAttendanceList(RzSpecialAttendance rzSpecialAttendance) + { + return rzSpecialAttendanceMapper.selectRzSpecialAttendanceList(rzSpecialAttendance); + } + + /** + * 鏂板鍔犵彮鑰冨嫟璁板綍 + * + * @param rzSpecialAttendance 鍔犵彮鑰冨嫟璁板綍 + * @return 缁撴灉 + */ + @Override + public int insertRzSpecialAttendance(RzSpecialAttendance rzSpecialAttendance) + { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + try{ + rzSpecialAttendance.setAttendanceDate(sdf.parse(sdf.format(rzSpecialAttendance.getWorkStartTime()))); + }catch (Exception e){ + e.printStackTrace(); + } + rzSpecialAttendance.setCreateTime(new Date()); + rzSpecialAttendance.setCreateBy(SecurityUtils.getUsername()); + rzSpecialAttendance.setDelFlag("0"); + rzSpecialAttendance.setCreateTime(DateUtils.getNowDate()); + rzSpecialAttendanceMapper.insertRzSpecialAttendance(rzSpecialAttendance); + + RzSpecialOverTime rzSpecialOverTime = rzSpecialOverTimeMapper.selectRzSpecialOverTimeByUserIdAndDate(rzSpecialAttendance.getStaffId(),rzSpecialAttendance.getAttendanceDate()); + rzSpecialOverTime.setSickHours(rzSpecialOverTime.getSickHours().add(rzSpecialAttendance.getWorkHours())); + rzSpecialOverTimeMapper.updateRzSpecialOverTime(rzSpecialOverTime); + + RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzSpecialAttendance.getStaffId(),rzSpecialAttendance.getAttendanceDate()); + rzAttendanceStatistical.setOverTimeHours(rzAttendanceStatistical.getOverTimeHours().add(rzSpecialAttendance.getWorkHours())); + return rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical); + } + + /** + * 淇敼鍔犵彮鑰冨嫟璁板綍 + * + * @param rzSpecialAttendance 鍔犵彮鑰冨嫟璁板綍 + * @return 缁撴灉 + */ + @Override + public int updateRzSpecialAttendance(RzSpecialAttendance rzSpecialAttendance) + { + RzSpecialAttendance old = rzSpecialAttendanceMapper.selectRzSpecialAttendanceById(rzSpecialAttendance.getId()); + rzSpecialAttendance.setUpdateBy(SecurityUtils.getUsername()); + rzSpecialAttendance.setUpdateTime(DateUtils.getNowDate()); + rzSpecialAttendanceMapper.updateRzSpecialAttendance(rzSpecialAttendance); + + RzSpecialOverTime rzSpecialOverTime = rzSpecialOverTimeMapper.selectRzSpecialOverTimeByUserIdAndDate(rzSpecialAttendance.getStaffId(),rzSpecialAttendance.getAttendanceDate()); + rzSpecialOverTime.setSickHours(rzSpecialOverTime.getSickHours().add(rzSpecialAttendance.getWorkHours()).subtract(old.getWorkHours())); + rzSpecialOverTimeMapper.updateRzSpecialOverTime(rzSpecialOverTime); + + RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzSpecialAttendance.getStaffId(),rzSpecialAttendance.getAttendanceDate()); + rzAttendanceStatistical.setOverTimeHours(rzAttendanceStatistical.getOverTimeHours().add(rzSpecialAttendance.getWorkHours()).subtract(old.getWorkHours())); + return rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical); + } + + /** + * 鍒犻櫎鍔犵彮鑰冨嫟璁板綍淇℃伅 + * + * @param id 鍔犵彮鑰冨嫟璁板綍涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteRzSpecialAttendanceById(Long id) + { + RzSpecialAttendance rzSpecialAttendance = rzSpecialAttendanceMapper.selectRzSpecialAttendanceById(id); + rzSpecialAttendance.setUpdateBy(SecurityUtils.getUsername()); + rzSpecialAttendance.setUpdateTime(DateUtils.getNowDate()); + rzSpecialAttendance.setDelFlag("1"); + rzSpecialAttendanceMapper.updateRzSpecialAttendance(rzSpecialAttendance); + + RzSpecialOverTime rzSpecialOverTime = rzSpecialOverTimeMapper.selectRzSpecialOverTimeByUserIdAndDate(rzSpecialAttendance.getStaffId(),rzSpecialAttendance.getAttendanceDate()); + rzSpecialOverTime.setSickHours(rzSpecialOverTime.getSickHours().subtract(rzSpecialAttendance.getWorkHours())); + rzSpecialOverTimeMapper.updateRzSpecialOverTime(rzSpecialOverTime); + + RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzSpecialAttendance.getStaffId(),rzSpecialAttendance.getAttendanceDate()); + rzAttendanceStatistical.setOverTimeHours(rzAttendanceStatistical.getOverTimeHours().subtract(rzSpecialAttendance.getWorkHours())); + return rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical); + } +} diff --git a/evo-admin/src/main/java/com/evo/attendance/service/impl/RzSpecialOverTimeServiceImpl.java b/evo-admin/src/main/java/com/evo/attendance/service/impl/RzSpecialOverTimeServiceImpl.java new file mode 100644 index 0000000..e51235a --- /dev/null +++ b/evo-admin/src/main/java/com/evo/attendance/service/impl/RzSpecialOverTimeServiceImpl.java @@ -0,0 +1,104 @@ +package com.evo.attendance.service.impl; + +import java.util.Date; +import java.util.List; +import com.evo.attendance.domain.RzSpecialOverTime; +import com.evo.attendance.mapper.RzSpecialOverTimeMapper; +import com.evo.attendance.service.IRzSpecialOverTimeService; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.SecurityUtils; +import com.evo.system.mapper.SysDeptMapper; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; + +/** + * 鐗规畩鍔犵彮绠$悊Service涓氬姟灞傚鐞 + * + * @author evo + * @date 2025-04-16 + */ +@Service +public class RzSpecialOverTimeServiceImpl implements IRzSpecialOverTimeService +{ + @Resource + private RzSpecialOverTimeMapper rzSpecialOverTimeMapper; + @Resource + private SysDeptMapper deptMapper; + + /** + * 鏌ヨ鐗规畩鍔犵彮绠$悊 + * + * @param id 鐗规畩鍔犵彮绠$悊涓婚敭 + * @return 鐗规畩鍔犵彮绠$悊 + */ + @Override + public RzSpecialOverTime selectRzSpecialOverTimeById(Long id) + { + return rzSpecialOverTimeMapper.selectRzSpecialOverTimeById(id); + } + + /** + * 鏌ヨ鐗规畩鍔犵彮绠$悊鍒楄〃 + * + * @param rzSpecialOverTime 鐗规畩鍔犵彮绠$悊 + * @return 鐗规畩鍔犵彮绠$悊 + */ + @Override + public List selectRzSpecialOverTimeList(RzSpecialOverTime rzSpecialOverTime) + { + List reslut = rzSpecialOverTimeMapper.selectRzSpecialOverTimeList(rzSpecialOverTime); + for (RzSpecialOverTime specialOverTime : reslut) { + specialOverTime.setDeptName(deptMapper.selectDeptById(specialOverTime.getDeptId()).getDeptName()); + } + return reslut; + } + + /** + * 鏂板鐗规畩鍔犵彮绠$悊 + * + * @param rzSpecialOverTime 鐗规畩鍔犵彮绠$悊 + * @return 缁撴灉 + */ + @Override + public int insertRzSpecialOverTime(RzSpecialOverTime rzSpecialOverTime) + { + //鏍规嵁鐢ㄦ埛ID鏌ヨ鐢ㄦ埛鍚嶇О + + rzSpecialOverTime.setCreateTime(new Date()); + rzSpecialOverTime.setCreateBy(SecurityUtils.getUsername()); + rzSpecialOverTime.setDelFlag("0"); + rzSpecialOverTime.setCreateTime(DateUtils.getNowDate()); + return rzSpecialOverTimeMapper.insertRzSpecialOverTime(rzSpecialOverTime); + } + + /** + * 淇敼鐗规畩鍔犵彮绠$悊 + * + * @param rzSpecialOverTime 鐗规畩鍔犵彮绠$悊 + * @return 缁撴灉 + */ + @Override + public int updateRzSpecialOverTime(RzSpecialOverTime rzSpecialOverTime) + { + rzSpecialOverTime.setUpdateTime(new Date()); + rzSpecialOverTime.setUpdateBy(SecurityUtils.getUsername()); + rzSpecialOverTime.setUpdateTime(DateUtils.getNowDate()); + return rzSpecialOverTimeMapper.updateRzSpecialOverTime(rzSpecialOverTime); + } + + /** + * 鍒犻櫎鐗规畩鍔犵彮绠$悊淇℃伅 + * + * @param id 鐗规畩鍔犵彮绠$悊涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteRzSpecialOverTimeById(Long id) + { + RzSpecialOverTime rzSpecialOverTime = rzSpecialOverTimeMapper.selectRzSpecialOverTimeById(id); + rzSpecialOverTime.setDelFlag("1"); + rzSpecialOverTime.setUpdateTime(new Date()); + rzSpecialOverTime.setUpdateBy(SecurityUtils.getUsername()); + return rzSpecialOverTimeMapper.updateRzSpecialOverTime(rzSpecialOverTime); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/annotation/Anonymous.java b/evo-admin/src/main/java/com/evo/common/annotation/Anonymous.java new file mode 100644 index 0000000..ec3a210 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/annotation/Anonymous.java @@ -0,0 +1,19 @@ +package com.evo.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 鍖垮悕璁块棶涓嶉壌鏉冩敞瑙 + * + * @author evo + */ +@Target({ ElementType.METHOD, ElementType.TYPE }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Anonymous +{ +} diff --git a/evo-admin/src/main/java/com/evo/common/annotation/DataScope.java b/evo-admin/src/main/java/com/evo/common/annotation/DataScope.java new file mode 100644 index 0000000..19b3b4b --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/annotation/DataScope.java @@ -0,0 +1,33 @@ +package com.evo.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 鏁版嵁鏉冮檺杩囨护娉ㄨВ + * + * @author evo + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DataScope +{ + /** + * 閮ㄩ棬琛ㄧ殑鍒悕 + */ + public String deptAlias() default ""; + + /** + * 鐢ㄦ埛琛ㄧ殑鍒悕 + */ + public String userAlias() default ""; + + /** + * 鏉冮檺瀛楃锛堢敤浜庡涓鑹插尮閰嶇鍚堣姹傜殑鏉冮檺锛夐粯璁ゆ牴鎹潈闄愭敞瑙ss鑾峰彇锛屽涓潈闄愮敤閫楀彿鍒嗛殧寮鏉 + */ + public String permission() default ""; +} diff --git a/evo-admin/src/main/java/com/evo/common/annotation/DataSource.java b/evo-admin/src/main/java/com/evo/common/annotation/DataSource.java new file mode 100644 index 0000000..44008cf --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/annotation/DataSource.java @@ -0,0 +1,28 @@ +package com.evo.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import com.evo.common.enums.DataSourceType; + +/** + * 鑷畾涔夊鏁版嵁婧愬垏鎹㈡敞瑙 + * + * 浼樺厛绾э細鍏堟柟娉曪紝鍚庣被锛屽鏋滄柟娉曡鐩栦簡绫讳笂鐨勬暟鎹簮绫诲瀷锛屼互鏂规硶鐨勪负鍑嗭紝鍚﹀垯浠ョ被涓婄殑涓哄噯 + * + * @author evo + */ +@Target({ ElementType.METHOD, ElementType.TYPE }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +public @interface DataSource +{ + /** + * 鍒囨崲鏁版嵁婧愬悕绉 + */ + public DataSourceType value() default DataSourceType.MASTER; +} diff --git a/evo-admin/src/main/java/com/evo/common/annotation/Excel.java b/evo-admin/src/main/java/com/evo/common/annotation/Excel.java new file mode 100644 index 0000000..1e58bbc --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/annotation/Excel.java @@ -0,0 +1,192 @@ +package com.evo.common.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.math.BigDecimal; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.IndexedColors; +import com.evo.common.utils.poi.ExcelHandlerAdapter; + +/** + * 鑷畾涔夊鍑篍xcel鏁版嵁娉ㄨВ + * + * @author evo + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface Excel +{ + /** + * 瀵煎嚭鏃跺湪excel涓帓搴 + */ + public int sort() default Integer.MAX_VALUE; + + /** + * 瀵煎嚭鍒癊xcel涓殑鍚嶅瓧. + */ + public String name() default ""; + + /** + * 鏃ユ湡鏍煎紡, 濡: yyyy-MM-dd + */ + public String dateFormat() default ""; + + /** + * 濡傛灉鏄瓧鍏哥被鍨嬶紝璇疯缃瓧鍏哥殑type鍊 (濡: sys_user_sex) + */ + public String dictType() default ""; + + /** + * 璇诲彇鍐呭杞〃杈惧紡 (濡: 0=鐢,1=濂,2=鏈煡) + */ + public String readConverterExp() default ""; + + /** + * 鍒嗛殧绗︼紝璇诲彇瀛楃涓茬粍鍐呭 + */ + public String separator() default ","; + + /** + * BigDecimal 绮惧害 榛樿:-1(榛樿涓嶅紑鍚疊igDecimal鏍煎紡鍖) + */ + public int scale() default -1; + + /** + * BigDecimal 鑸嶅叆瑙勫垯 榛樿:BigDecimal.ROUND_HALF_EVEN + */ + public int roundingMode() default BigDecimal.ROUND_HALF_EVEN; + + /** + * 瀵煎嚭鏃跺湪excel涓瘡涓垪鐨勯珮搴 + */ + public double height() default 14; + + /** + * 瀵煎嚭鏃跺湪excel涓瘡涓垪鐨勫搴 + */ + public double width() default 16; + + /** + * 鏂囧瓧鍚庣紑,濡% 90 鍙樻垚90% + */ + public String suffix() default ""; + + /** + * 褰撳间负绌烘椂,瀛楁鐨勯粯璁ゅ + */ + public String defaultValue() default ""; + + /** + * 鎻愮ず淇℃伅 + */ + public String prompt() default ""; + + /** + * 璁剧疆鍙兘閫夋嫨涓嶈兘杈撳叆鐨勫垪鍐呭. + */ + public String[] combo() default {}; + + /** + * 鏄惁浠庡瓧鍏歌鏁版嵁鍒癱ombo,榛樿涓嶈鍙,濡傝鍙栭渶瑕佽缃甦ictType娉ㄨВ. + */ + public boolean comboReadDict() default false; + + /** + * 鏄惁闇瑕佺旱鍚戝悎骞跺崟鍏冩牸,搴斿闇姹:鍚湁list闆嗗悎鍗曞厓鏍) + */ + public boolean needMerge() default false; + + /** + * 鏄惁瀵煎嚭鏁版嵁,搴斿闇姹:鏈夋椂鎴戜滑闇瑕佸鍑轰竴浠芥ā鏉,杩欐槸鏍囬闇瑕佷絾鍐呭闇瑕佺敤鎴锋墜宸ュ~鍐. + */ + public boolean isExport() default true; + + /** + * 鍙︿竴涓被涓殑灞炴у悕绉,鏀寔澶氱骇鑾峰彇,浠ュ皬鏁扮偣闅斿紑 + */ + public String targetAttr() default ""; + + /** + * 鏄惁鑷姩缁熻鏁版嵁,鍦ㄦ渶鍚庤拷鍔犱竴琛岀粺璁℃暟鎹诲拰 + */ + public boolean isStatistics() default false; + + /** + * 瀵煎嚭绫诲瀷锛0鏁板瓧 1瀛楃涓 2鍥剧墖锛 + */ + public ColumnType cellType() default ColumnType.STRING; + + /** + * 瀵煎嚭鍒楀ご鑳屾櫙棰滆壊 + */ + public IndexedColors headerBackgroundColor() default IndexedColors.GREY_50_PERCENT; + + /** + * 瀵煎嚭鍒楀ご瀛椾綋棰滆壊 + */ + public IndexedColors headerColor() default IndexedColors.WHITE; + + /** + * 瀵煎嚭鍗曞厓鏍艰儗鏅鑹 + */ + public IndexedColors backgroundColor() default IndexedColors.WHITE; + + /** + * 瀵煎嚭鍗曞厓鏍煎瓧浣撻鑹 + */ + public IndexedColors color() default IndexedColors.BLACK; + + /** + * 瀵煎嚭瀛楁瀵归綈鏂瑰紡 + */ + public HorizontalAlignment align() default HorizontalAlignment.CENTER; + + /** + * 鑷畾涔夋暟鎹鐞嗗櫒 + */ + public Class handler() default ExcelHandlerAdapter.class; + + /** + * 鑷畾涔夋暟鎹鐞嗗櫒鍙傛暟 + */ + public String[] args() default {}; + + /** + * 瀛楁绫诲瀷锛0锛氬鍑哄鍏ワ紱1锛氫粎瀵煎嚭锛2锛氫粎瀵煎叆锛 + */ + Type type() default Type.ALL; + + public enum Type + { + ALL(0), EXPORT(1), IMPORT(2); + private final int value; + + Type(int value) + { + this.value = value; + } + + public int value() + { + return this.value; + } + } + + public enum ColumnType + { + NUMERIC(0), STRING(1), IMAGE(2), TEXT(3); + private final int value; + + ColumnType(int value) + { + this.value = value; + } + + public int value() + { + return this.value; + } + } +} diff --git a/evo-admin/src/main/java/com/evo/common/annotation/Excels.java b/evo-admin/src/main/java/com/evo/common/annotation/Excels.java new file mode 100644 index 0000000..88d043f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/annotation/Excels.java @@ -0,0 +1,18 @@ +package com.evo.common.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Excel娉ㄨВ闆 + * + * @author evo + */ +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface Excels +{ + public Excel[] value(); +} diff --git a/evo-admin/src/main/java/com/evo/common/annotation/Log.java b/evo-admin/src/main/java/com/evo/common/annotation/Log.java new file mode 100644 index 0000000..0a4414e --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/annotation/Log.java @@ -0,0 +1,51 @@ +package com.evo.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import com.evo.common.enums.BusinessType; +import com.evo.common.enums.OperatorType; + +/** + * 鑷畾涔夋搷浣滄棩蹇楄褰曟敞瑙 + * + * @author evo + * + */ +@Target({ ElementType.PARAMETER, ElementType.METHOD }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Log +{ + /** + * 妯″潡 + */ + public String title() default ""; + + /** + * 鍔熻兘 + */ + public BusinessType businessType() default BusinessType.OTHER; + + /** + * 鎿嶄綔浜虹被鍒 + */ + public OperatorType operatorType() default OperatorType.MANAGE; + + /** + * 鏄惁淇濆瓨璇锋眰鐨勫弬鏁 + */ + public boolean isSaveRequestData() default true; + + /** + * 鏄惁淇濆瓨鍝嶅簲鐨勫弬鏁 + */ + public boolean isSaveResponseData() default true; + + /** + * 鎺掗櫎鎸囧畾鐨勮姹傚弬鏁 + */ + public String[] excludeParamNames() default {}; +} diff --git a/evo-admin/src/main/java/com/evo/common/annotation/RateLimiter.java b/evo-admin/src/main/java/com/evo/common/annotation/RateLimiter.java new file mode 100644 index 0000000..4c28dcb --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/annotation/RateLimiter.java @@ -0,0 +1,40 @@ +package com.evo.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import com.evo.common.constant.CacheConstants; +import com.evo.common.enums.LimitType; + +/** + * 闄愭祦娉ㄨВ + * + * @author evo + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RateLimiter +{ + /** + * 闄愭祦key + */ + public String key() default CacheConstants.RATE_LIMIT_KEY; + + /** + * 闄愭祦鏃堕棿,鍗曚綅绉 + */ + public int time() default 60; + + /** + * 闄愭祦娆℃暟 + */ + public int count() default 100; + + /** + * 闄愭祦绫诲瀷 + */ + public LimitType limitType() default LimitType.DEFAULT; +} diff --git a/evo-admin/src/main/java/com/evo/common/annotation/RepeatSubmit.java b/evo-admin/src/main/java/com/evo/common/annotation/RepeatSubmit.java new file mode 100644 index 0000000..7207fce --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/annotation/RepeatSubmit.java @@ -0,0 +1,31 @@ +package com.evo.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 鑷畾涔夋敞瑙i槻姝㈣〃鍗曢噸澶嶆彁浜 + * + * @author evo + * + */ +@Inherited +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RepeatSubmit +{ + /** + * 闂撮殧鏃堕棿(ms)锛屽皬浜庢鏃堕棿瑙嗕负閲嶅鎻愪氦 + */ + public int interval() default 5000; + + /** + * 鎻愮ず娑堟伅 + */ + public String message() default "涓嶅厑璁搁噸澶嶆彁浜わ紝璇风◢鍊欏啀璇"; +} diff --git a/evo-admin/src/main/java/com/evo/common/annotation/Sensitive.java b/evo-admin/src/main/java/com/evo/common/annotation/Sensitive.java new file mode 100644 index 0000000..35a1c0c --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/annotation/Sensitive.java @@ -0,0 +1,24 @@ +package com.evo.common.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.evo.common.config.serializer.SensitiveJsonSerializer; +import com.evo.common.enums.DesensitizedType; + +/** + * 鏁版嵁鑴辨晱娉ㄨВ + * + * @author evo + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +@JacksonAnnotationsInside +@JsonSerialize(using = SensitiveJsonSerializer.class) +public @interface Sensitive +{ + DesensitizedType desensitizedType(); +} diff --git a/evo-admin/src/main/java/com/evo/common/config/EvoConfig.java b/evo-admin/src/main/java/com/evo/common/config/EvoConfig.java new file mode 100644 index 0000000..44cfc15 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/config/EvoConfig.java @@ -0,0 +1,111 @@ +package com.evo.common.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * 璇诲彇椤圭洰鐩稿叧閰嶇疆 + * + * @author evo + */ +@Component +@ConfigurationProperties(prefix = "evo") +public class EvoConfig +{ + /** 椤圭洰鍚嶇О */ + private String name; + + /** 鐗堟湰 */ + private String version; + + /** 鐗堟潈骞翠唤 */ + private String copyrightYear; + + /** 涓婁紶璺緞 */ + private static String profile; + + /** 鑾峰彇鍦板潃寮鍏 */ + private static boolean addressEnabled; + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + public String getVersion() + { + return version; + } + + public void setVersion(String version) + { + this.version = version; + } + + public String getCopyrightYear() + { + return copyrightYear; + } + + public void setCopyrightYear(String copyrightYear) + { + this.copyrightYear = copyrightYear; + } + + public static String getProfile() + { + return profile; + } + + public void setProfile(String profile) + { + EvoConfig.profile = profile; + } + + public static boolean isAddressEnabled() + { + return addressEnabled; + } + + public void setAddressEnabled(boolean addressEnabled) + { + EvoConfig.addressEnabled = addressEnabled; + } + + /** + * 鑾峰彇瀵煎叆涓婁紶璺緞 + */ + public static String getImportPath() + { + return getProfile() + "/import"; + } + + /** + * 鑾峰彇澶村儚涓婁紶璺緞 + */ + public static String getAvatarPath() + { + return getProfile() + "/avatar"; + } + + /** + * 鑾峰彇涓嬭浇璺緞 + */ + public static String getDownloadPath() + { + return getProfile() + "/download/"; + } + + /** + * 鑾峰彇涓婁紶璺緞 + */ + public static String getUploadPath() + { + return getProfile() + "/upload"; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/config/SwaggerConfig.java b/evo-admin/src/main/java/com/evo/common/config/SwaggerConfig.java new file mode 100644 index 0000000..2f00287 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/config/SwaggerConfig.java @@ -0,0 +1,124 @@ +package com.evo.common.config; + +import java.util.ArrayList; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import io.swagger.annotations.ApiOperation; +import io.swagger.models.auth.In; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.ApiKey; +import springfox.documentation.service.AuthorizationScope; +import springfox.documentation.service.Contact; +import springfox.documentation.service.SecurityReference; +import springfox.documentation.service.SecurityScheme; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spi.service.contexts.SecurityContext; +import springfox.documentation.spring.web.plugins.Docket; + +/** + * Swagger2鐨勬帴鍙i厤缃 + * + * @author evo + */ +@Configuration +public class SwaggerConfig +{ + /** 绯荤粺鍩虹閰嶇疆 */ + @Autowired + private EvoConfig EvoConfig; + + /** 鏄惁寮鍚痵wagger */ + @Value("${swagger.enabled}") + private boolean enabled; + + /** 璁剧疆璇锋眰鐨勭粺涓鍓嶇紑 */ + @Value("${swagger.pathMapping}") + private String pathMapping; + + /** + * 鍒涘缓API + */ + @Bean + public Docket createRestApi() + { + return new Docket(DocumentationType.OAS_30) + // 鏄惁鍚敤Swagger + .enable(enabled) + // 鐢ㄦ潵鍒涘缓璇PI鐨勫熀鏈俊鎭紝灞曠ず鍦ㄦ枃妗g殑椤甸潰涓紙鑷畾涔夊睍绀虹殑淇℃伅锛 + .apiInfo(apiInfo()) + // 璁剧疆鍝簺鎺ュ彛鏆撮湶缁橲wagger灞曠ず + .select() + // 鎵弿鎵鏈夋湁娉ㄨВ鐨刟pi锛岀敤杩欑鏂瑰紡鏇寸伒娲 + .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) + // 鎵弿鎸囧畾鍖呬腑鐨剆wagger娉ㄨВ + // .apis(RequestHandlerSelectors.basePackage("com.evo.project.tool.swagger")) + // 鎵弿鎵鏈 .apis(RequestHandlerSelectors.any()) + .paths(PathSelectors.any()) + .build() + /* 璁剧疆瀹夊叏妯″紡锛宻wagger鍙互璁剧疆璁块棶token */ + .securitySchemes(securitySchemes()) + .securityContexts(securityContexts()) + .pathMapping(pathMapping); + } + + /** + * 瀹夊叏妯″紡锛岃繖閲屾寚瀹歵oken閫氳繃Authorization澶磋姹傚ご浼犻 + */ + private List securitySchemes() + { + List apiKeyList = new ArrayList(); + apiKeyList.add(new ApiKey("Authorization", "Authorization", In.HEADER.toValue())); + return apiKeyList; + } + + /** + * 瀹夊叏涓婁笅鏂 + */ + private List securityContexts() + { + List securityContexts = new ArrayList<>(); + securityContexts.add( + SecurityContext.builder() + .securityReferences(defaultAuth()) + .operationSelector(o -> o.requestMappingPattern().matches("/.*")) + .build()); + return securityContexts; + } + + /** + * 榛樿鐨勫畨鍏ㄤ笂寮曠敤 + */ + private List defaultAuth() + { + AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); + AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; + authorizationScopes[0] = authorizationScope; + List securityReferences = new ArrayList<>(); + securityReferences.add(new SecurityReference("Authorization", authorizationScopes)); + return securityReferences; + } + + /** + * 娣诲姞鎽樿淇℃伅 + */ + private ApiInfo apiInfo() + { + // 鐢ˋpiInfoBuilder杩涜瀹氬埗 + return new ApiInfoBuilder() + // 璁剧疆鏍囬 + .title("鏍囬锛氫紛鐗圭鐞嗙郴缁焈鎺ュ彛鏂囨。") + // 鎻忚堪 + .description("鎻忚堪锛氱敤浜庣鐞嗛泦鍥㈡棗涓嬪叕鍙哥殑浜哄憳淇℃伅,鍏蜂綋鍖呮嫭XXX,XXX妯″潡...") + // 浣滆呬俊鎭 + .contact(new Contact(EvoConfig.getName(), null, null)) + // 鐗堟湰 + .version("鐗堟湰鍙:" + EvoConfig.getVersion()) + .build(); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/config/serializer/SensitiveJsonSerializer.java b/evo-admin/src/main/java/com/evo/common/config/serializer/SensitiveJsonSerializer.java new file mode 100644 index 0000000..43776ba --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/config/serializer/SensitiveJsonSerializer.java @@ -0,0 +1,67 @@ +package com.evo.common.config.serializer; + +import java.io.IOException; +import java.util.Objects; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.BeanProperty; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.ContextualSerializer; +import com.evo.common.annotation.Sensitive; +import com.evo.common.core.domain.model.LoginUser; +import com.evo.common.enums.DesensitizedType; +import com.evo.common.utils.SecurityUtils; + +/** + * 鏁版嵁鑴辨晱搴忓垪鍖栬繃婊 + * + * @author evo + */ +public class SensitiveJsonSerializer extends JsonSerializer implements ContextualSerializer +{ + private DesensitizedType desensitizedType; + + @Override + public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException + { + if (desensitization()) + { + gen.writeString(desensitizedType.desensitizer().apply(value)); + } + else + { + gen.writeString(value); + } + } + + @Override + public JsonSerializer createContextual(SerializerProvider prov, BeanProperty property) + throws JsonMappingException + { + Sensitive annotation = property.getAnnotation(Sensitive.class); + if (Objects.nonNull(annotation) && Objects.equals(String.class, property.getType().getRawClass())) + { + this.desensitizedType = annotation.desensitizedType(); + return this; + } + return prov.findValueSerializer(property.getType(), property); + } + + /** + * 鏄惁闇瑕佽劚鏁忓鐞 + */ + private boolean desensitization() + { + try + { + LoginUser securityUser = SecurityUtils.getLoginUser(); + // 绠$悊鍛樹笉鑴辨晱 + return !securityUser.getUser().isAdmin(); + } + catch (Exception e) + { + return true; + } + } +} diff --git a/evo-admin/src/main/java/com/evo/common/constant/CacheConstants.java b/evo-admin/src/main/java/com/evo/common/constant/CacheConstants.java new file mode 100644 index 0000000..6f8774f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/constant/CacheConstants.java @@ -0,0 +1,44 @@ +package com.evo.common.constant; + +/** + * 缂撳瓨鐨刱ey 甯搁噺 + * + * @author evo + */ +public class CacheConstants +{ + /** + * 鐧诲綍鐢ㄦ埛 redis key + */ + public static final String LOGIN_TOKEN_KEY = "login_tokens:"; + + /** + * 楠岃瘉鐮 redis key + */ + public static final String CAPTCHA_CODE_KEY = "captcha_codes:"; + + /** + * 鍙傛暟绠$悊 cache key + */ + public static final String SYS_CONFIG_KEY = "sys_config:"; + + /** + * 瀛楀吀绠$悊 cache key + */ + public static final String SYS_DICT_KEY = "sys_dict:"; + + /** + * 闃查噸鎻愪氦 redis key + */ + public static final String REPEAT_SUBMIT_KEY = "repeat_submit:"; + + /** + * 闄愭祦 redis key + */ + public static final String RATE_LIMIT_KEY = "rate_limit:"; + + /** + * 鐧诲綍璐︽埛瀵嗙爜閿欒娆℃暟 redis key + */ + public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:"; +} diff --git a/evo-admin/src/main/java/com/evo/common/constant/Constants.java b/evo-admin/src/main/java/com/evo/common/constant/Constants.java new file mode 100644 index 0000000..fa46e89 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/constant/Constants.java @@ -0,0 +1,120 @@ +package com.evo.common.constant; + +import java.math.BigDecimal; +import java.util.Locale; +import io.jsonwebtoken.Claims; + +/** + * 閫氱敤甯搁噺淇℃伅 + * + * @author evo + */ +public class Constants +{ + /** + * UTF-8 瀛楃闆 + */ + public static final String UTF8 = "UTF-8"; + /** + * GBK 瀛楃闆 + */ + public static final String GBK = "GBK"; + /** + * 绯荤粺璇█ + */ + public static final Locale DEFAULT_LOCALE = Locale.SIMPLIFIED_CHINESE; + /** + * www涓诲煙 + */ + public static final String WWW = "www."; + /** + * http璇锋眰 + */ + public static final String HTTP = "http://"; + /** + * https璇锋眰 + */ + public static final String HTTPS = "https://"; + /** + * 閫氱敤鎴愬姛鏍囪瘑 + */ + public static final String SUCCESS = "0"; + /** + * 閫氱敤澶辫触鏍囪瘑 + */ + public static final String FAIL = "1"; + /** + * 鐧诲綍鎴愬姛 + */ + public static final String LOGIN_SUCCESS = "Success"; + /** + * 娉ㄩ攢 + */ + public static final String LOGOUT = "Logout"; + /** + * 娉ㄥ唽 + */ + public static final String REGISTER = "Register"; + /** + * 鐧诲綍澶辫触 + */ + public static final String LOGIN_FAIL = "Error"; + /** + * 鎵鏈夋潈闄愭爣璇 + */ + public static final String ALL_PERMISSION = "*:*:*"; + /** + * 绠$悊鍛樿鑹叉潈闄愭爣璇 + */ + public static final String SUPER_ADMIN = "admin"; + /** + * 瑙掕壊鏉冮檺鍒嗛殧绗 + */ + public static final String ROLE_DELIMETER = ","; + /** + * 鏉冮檺鏍囪瘑鍒嗛殧绗 + */ + public static final String PERMISSION_DELIMETER = ","; + /** + * 浠ょ墝 + */ + public static final String TOKEN = "token"; + /** + * 浠ょ墝鍓嶇紑 + */ + public static final String TOKEN_PREFIX = "Bearer "; + /** + * 浠ょ墝鍓嶇紑 + */ + public static final String LOGIN_USER_KEY = "login_user_key"; + /** + * 璧勬簮鏄犲皠璺緞 鍓嶇紑 + */ + public static final String RESOURCE_PREFIX = "/profile"; + /** + * 鑷姩璇嗗埆json瀵硅薄鐧藉悕鍗曢厤缃紙浠呭厑璁歌В鏋愮殑鍖呭悕锛岃寖鍥磋秺灏忚秺瀹夊叏锛 + */ + public static final String[] JSON_WHITELIST_STR = { "org.springframework", "com.evo" }; + + /** + * 涓氬姟鍙傛暟 + */ + public static final String DELETE_FLAG_0 = "0"; //娣诲姞淇℃伅 + public static final String DELETE_FLAG_1 = "1"; //鍒犻櫎淇℃伅 + public static final String JOB_STATIS_0 = "0"; //鍛樺伐 璇曠敤 + public static final String SYS_COMPANY = "sys_company"; //鍏徃绠绉 + public static final String SYS_CONTRACT = "sys_contract"; //鍚堝悓骞撮檺 + public static final String SYS_LEVEL = "sys_level"; //瀛﹀巻 + public static final String SYS_WORK_STATUS = "sys_worker_status"; //鍦ㄨ亴鐘舵 + public static final String SYS_RESTAUTANT = "sys_restaurant"; //椁愰ギ瀛楀吀绫诲瀷鍙傛暟 + public static final String SEIZE_A_SEAT_0 = "0"; //鍗犱綅绗 + public static final String SEIZE_A_SEAT_1 = "00"; //鍗犱綅绗 + public static final String SEIZE_A_SEAT_2 = "000"; //鍗犱綅绗 + public static final String SYS_SENIORITY_SUBSIDIES = "50"; //宸ラ緞琛ュ姪 + public static final String SYS_CONTRACT_0 = "50"; //涓骞存湡鍚堝悓琛ュ姪 + public static final String SYS_CONTRACT_1 = "150"; //涓夊勾鏈熷悎鍚岃ˉ鍔 + public static final String SYS_SOCIAL_SUBSIDIES = "400"; //鏂板啘鍚堢ぞ淇濊ˉ鍔 + public static final String SUBSIDY_PROPORTION = "0.05"; //璇峰亣琛ュ姪鎵i櫎姣斾緥 + public static final String SUBSIDY_PERIOD = "0.80"; //璇曠敤鏈熷伐璧 + public static final String SUBSIDY_PERIOD_1 = "0.20"; //璇曠敤鏈熷伐璧勭殑浣欑櫨鍒嗘瘮 +} diff --git a/evo-admin/src/main/java/com/evo/common/constant/GenConstants.java b/evo-admin/src/main/java/com/evo/common/constant/GenConstants.java new file mode 100644 index 0000000..4e2cb2a --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/constant/GenConstants.java @@ -0,0 +1,117 @@ +package com.evo.common.constant; + +/** + * 浠g爜鐢熸垚閫氱敤甯搁噺 + * + * @author evo + */ +public class GenConstants +{ + /** 鍗曡〃锛堝鍒犳敼鏌ワ級 */ + public static final String TPL_CRUD = "crud"; + + /** 鏍戣〃锛堝鍒犳敼鏌ワ級 */ + public static final String TPL_TREE = "tree"; + + /** 涓诲瓙琛紙澧炲垹鏀规煡锛 */ + public static final String TPL_SUB = "sub"; + + /** 鏍戠紪鐮佸瓧娈 */ + public static final String TREE_CODE = "treeCode"; + + /** 鏍戠埗缂栫爜瀛楁 */ + public static final String TREE_PARENT_CODE = "treeParentCode"; + + /** 鏍戝悕绉板瓧娈 */ + public static final String TREE_NAME = "treeName"; + + /** 涓婄骇鑿滃崟ID瀛楁 */ + public static final String PARENT_MENU_ID = "parentMenuId"; + + /** 涓婄骇鑿滃崟鍚嶇О瀛楁 */ + public static final String PARENT_MENU_NAME = "parentMenuName"; + + /** 鏁版嵁搴撳瓧绗︿覆绫诲瀷 */ + public static final String[] COLUMNTYPE_STR = { "char", "varchar", "nvarchar", "varchar2" }; + + /** 鏁版嵁搴撴枃鏈被鍨 */ + public static final String[] COLUMNTYPE_TEXT = { "tinytext", "text", "mediumtext", "longtext" }; + + /** 鏁版嵁搴撴椂闂寸被鍨 */ + public static final String[] COLUMNTYPE_TIME = { "datetime", "time", "date", "timestamp" }; + + /** 鏁版嵁搴撴暟瀛楃被鍨 */ + public static final String[] COLUMNTYPE_NUMBER = { "tinyint", "smallint", "mediumint", "int", "number", "integer", + "bit", "bigint", "float", "double", "decimal" }; + + /** 椤甸潰涓嶉渶瑕佺紪杈戝瓧娈 */ + public static final String[] COLUMNNAME_NOT_EDIT = { "id", "create_by", "create_time", "del_flag" }; + + /** 椤甸潰涓嶉渶瑕佹樉绀虹殑鍒楄〃瀛楁 */ + public static final String[] COLUMNNAME_NOT_LIST = { "id", "create_by", "create_time", "del_flag", "update_by", + "update_time" }; + + /** 椤甸潰涓嶉渶瑕佹煡璇㈠瓧娈 */ + public static final String[] COLUMNNAME_NOT_QUERY = { "id", "create_by", "create_time", "del_flag", "update_by", + "update_time", "remark" }; + + /** Entity鍩虹被瀛楁 */ + public static final String[] BASE_ENTITY = { "createBy", "createTime", "updateBy", "updateTime", "remark" }; + + /** Tree鍩虹被瀛楁 */ + public static final String[] TREE_ENTITY = { "parentName", "parentId", "orderNum", "ancestors", "children" }; + + /** 鏂囨湰妗 */ + public static final String HTML_INPUT = "input"; + + /** 鏂囨湰鍩 */ + public static final String HTML_TEXTAREA = "textarea"; + + /** 涓嬫媺妗 */ + public static final String HTML_SELECT = "select"; + + /** 鍗曢夋 */ + public static final String HTML_RADIO = "radio"; + + /** 澶嶉夋 */ + public static final String HTML_CHECKBOX = "checkbox"; + + /** 鏃ユ湡鎺т欢 */ + public static final String HTML_DATETIME = "datetime"; + + /** 鍥剧墖涓婁紶鎺т欢 */ + public static final String HTML_IMAGE_UPLOAD = "imageUpload"; + + /** 鏂囦欢涓婁紶鎺т欢 */ + public static final String HTML_FILE_UPLOAD = "fileUpload"; + + /** 瀵屾枃鏈帶浠 */ + public static final String HTML_EDITOR = "editor"; + + /** 瀛楃涓茬被鍨 */ + public static final String TYPE_STRING = "String"; + + /** 鏁村瀷 */ + public static final String TYPE_INTEGER = "Integer"; + + /** 闀挎暣鍨 */ + public static final String TYPE_LONG = "Long"; + + /** 娴偣鍨 */ + public static final String TYPE_DOUBLE = "Double"; + + /** 楂樼簿搴﹁绠楃被鍨 */ + public static final String TYPE_BIGDECIMAL = "BigDecimal"; + + /** 鏃堕棿绫诲瀷 */ + public static final String TYPE_DATE = "Date"; + + /** 妯$硦鏌ヨ */ + public static final String QUERY_LIKE = "LIKE"; + + /** 鐩哥瓑鏌ヨ */ + public static final String QUERY_EQ = "EQ"; + + /** 闇瑕 */ + public static final String REQUIRE = "1"; +} diff --git a/evo-admin/src/main/java/com/evo/common/constant/HttpStatus.java b/evo-admin/src/main/java/com/evo/common/constant/HttpStatus.java new file mode 100644 index 0000000..e3d3e58 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/constant/HttpStatus.java @@ -0,0 +1,94 @@ +package com.evo.common.constant; + +/** + * 杩斿洖鐘舵佺爜 + * + * @author evo + */ +public class HttpStatus +{ + /** + * 鎿嶄綔鎴愬姛 + */ + public static final int SUCCESS = 200; + + /** + * 瀵硅薄鍒涘缓鎴愬姛 + */ + public static final int CREATED = 201; + + /** + * 璇锋眰宸茬粡琚帴鍙 + */ + public static final int ACCEPTED = 202; + + /** + * 鎿嶄綔宸茬粡鎵ц鎴愬姛锛屼絾鏄病鏈夎繑鍥炴暟鎹 + */ + public static final int NO_CONTENT = 204; + + /** + * 璧勬簮宸茶绉婚櫎 + */ + public static final int MOVED_PERM = 301; + + /** + * 閲嶅畾鍚 + */ + public static final int SEE_OTHER = 303; + + /** + * 璧勬簮娌℃湁琚慨鏀 + */ + public static final int NOT_MODIFIED = 304; + + /** + * 鍙傛暟鍒楄〃閿欒锛堢己灏戯紝鏍煎紡涓嶅尮閰嶏級 + */ + public static final int BAD_REQUEST = 400; + + /** + * 鏈巿鏉 + */ + public static final int UNAUTHORIZED = 401; + + /** + * 璁块棶鍙楅檺锛屾巿鏉冭繃鏈 + */ + public static final int FORBIDDEN = 403; + + /** + * 璧勬簮锛屾湇鍔℃湭鎵惧埌 + */ + public static final int NOT_FOUND = 404; + + /** + * 涓嶅厑璁哥殑http鏂规硶 + */ + public static final int BAD_METHOD = 405; + + /** + * 璧勬簮鍐茬獊锛屾垨鑰呰祫婧愯閿 + */ + public static final int CONFLICT = 409; + + /** + * 涓嶆敮鎸佺殑鏁版嵁锛屽獟浣撶被鍨 + */ + public static final int UNSUPPORTED_TYPE = 415; + + /** + * 绯荤粺鍐呴儴閿欒 + */ + public static final int ERROR = 500; + + /** + * 鎺ュ彛鏈疄鐜 + */ + public static final int NOT_IMPLEMENTED = 501; + + /** + * 绯荤粺璀﹀憡娑堟伅 + */ + public static final int WARN = 601; +} diff --git a/evo-admin/src/main/java/com/evo/common/constant/ScheduleConstants.java b/evo-admin/src/main/java/com/evo/common/constant/ScheduleConstants.java new file mode 100644 index 0000000..09293b7 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/constant/ScheduleConstants.java @@ -0,0 +1,50 @@ +package com.evo.common.constant; + +/** + * 浠诲姟璋冨害閫氱敤甯搁噺 + * + * @author evo + */ +public class ScheduleConstants +{ + public static final String TASK_CLASS_NAME = "TASK_CLASS_NAME"; + + /** 鎵ц鐩爣key */ + public static final String TASK_PROPERTIES = "TASK_PROPERTIES"; + + /** 榛樿 */ + public static final String MISFIRE_DEFAULT = "0"; + + /** 绔嬪嵆瑙﹀彂鎵ц */ + public static final String MISFIRE_IGNORE_MISFIRES = "1"; + + /** 瑙﹀彂涓娆℃墽琛 */ + public static final String MISFIRE_FIRE_AND_PROCEED = "2"; + + /** 涓嶈Е鍙戠珛鍗虫墽琛 */ + public static final String MISFIRE_DO_NOTHING = "3"; + + public enum Status + { + /** + * 姝e父 + */ + NORMAL("0"), + /** + * 鏆傚仠 + */ + PAUSE("1"); + + private String value; + + private Status(String value) + { + this.value = value; + } + + public String getValue() + { + return value; + } + } +} diff --git a/evo-admin/src/main/java/com/evo/common/constant/UserConstants.java b/evo-admin/src/main/java/com/evo/common/constant/UserConstants.java new file mode 100644 index 0000000..3de5de4 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/constant/UserConstants.java @@ -0,0 +1,78 @@ +package com.evo.common.constant; + +/** + * 鐢ㄦ埛甯搁噺淇℃伅 + * + * @author evo + */ +public class UserConstants +{ + /** + * 骞冲彴鍐呯郴缁熺敤鎴风殑鍞竴鏍囧織 + */ + public static final String SYS_USER = "SYS_USER"; + + /** 姝e父鐘舵 */ + public static final String NORMAL = "0"; + + /** 寮傚父鐘舵 */ + public static final String EXCEPTION = "1"; + + /** 鐢ㄦ埛灏佺鐘舵 */ + public static final String USER_DISABLE = "1"; + + /** 瑙掕壊灏佺鐘舵 */ + public static final String ROLE_DISABLE = "1"; + + /** 閮ㄩ棬姝e父鐘舵 */ + public static final String DEPT_NORMAL = "0"; + + /** 閮ㄩ棬鍋滅敤鐘舵 */ + public static final String DEPT_DISABLE = "1"; + + /** 瀛楀吀姝e父鐘舵 */ + public static final String DICT_NORMAL = "0"; + + /** 鏄惁涓虹郴缁熼粯璁わ紙鏄級 */ + public static final String YES = "Y"; + + /** 鏄惁鑿滃崟澶栭摼锛堟槸锛 */ + public static final String YES_FRAME = "0"; + + /** 鏄惁鑿滃崟澶栭摼锛堝惁锛 */ + public static final String NO_FRAME = "1"; + + /** 鑿滃崟绫诲瀷锛堢洰褰曪級 */ + public static final String TYPE_DIR = "M"; + + /** 鑿滃崟绫诲瀷锛堣彍鍗曪級 */ + public static final String TYPE_MENU = "C"; + + /** 鑿滃崟绫诲瀷锛堟寜閽級 */ + public static final String TYPE_BUTTON = "F"; + + /** Layout缁勪欢鏍囪瘑 */ + public final static String LAYOUT = "Layout"; + + /** ParentView缁勪欢鏍囪瘑 */ + public final static String PARENT_VIEW = "ParentView"; + + /** InnerLink缁勪欢鏍囪瘑 */ + public final static String INNER_LINK = "InnerLink"; + + /** 鏍¢獙鏄惁鍞竴鐨勮繑鍥炴爣璇 */ + public final static boolean UNIQUE = true; + public final static boolean NOT_UNIQUE = false; + + /** + * 鐢ㄦ埛鍚嶉暱搴﹂檺鍒 + */ + public static final int USERNAME_MIN_LENGTH = 2; + public static final int USERNAME_MAX_LENGTH = 20; + + /** + * 瀵嗙爜闀垮害闄愬埗 + */ + public static final int PASSWORD_MIN_LENGTH = 5; + public static final int PASSWORD_MAX_LENGTH = 20; +} diff --git a/evo-admin/src/main/java/com/evo/common/core/controller/BaseController.java b/evo-admin/src/main/java/com/evo/common/core/controller/BaseController.java new file mode 100644 index 0000000..3d8a32b --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/core/controller/BaseController.java @@ -0,0 +1,202 @@ +package com.evo.common.core.controller; + +import java.beans.PropertyEditorSupport; +import java.util.Date; +import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.evo.common.constant.HttpStatus; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.domain.model.LoginUser; +import com.evo.common.core.page.PageDomain; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.core.page.TableSupport; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.PageUtils; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.sql.SqlUtil; + +/** + * web灞傞氱敤鏁版嵁澶勭悊 + * + * @author evo + */ +public class BaseController +{ + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + /** + * 灏嗗墠鍙颁紶閫掕繃鏉ョ殑鏃ユ湡鏍煎紡鐨勫瓧绗︿覆锛岃嚜鍔ㄨ浆鍖栦负Date绫诲瀷 + */ + @InitBinder + public void initBinder(WebDataBinder binder) + { + // Date 绫诲瀷杞崲 + binder.registerCustomEditor(Date.class, new PropertyEditorSupport() + { + @Override + public void setAsText(String text) + { + setValue(DateUtils.parseDate(text)); + } + }); + } + + /** + * 璁剧疆璇锋眰鍒嗛〉鏁版嵁 + */ + protected void startPage() + { + PageUtils.startPage(); + } + + /** + * 璁剧疆璇锋眰鎺掑簭鏁版嵁 + */ + protected void startOrderBy() + { + PageDomain pageDomain = TableSupport.buildPageRequest(); + if (StringUtils.isNotEmpty(pageDomain.getOrderBy())) + { + String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy()); + PageHelper.orderBy(orderBy); + } + } + + /** + * 娓呯悊鍒嗛〉鐨勭嚎绋嬪彉閲 + */ + protected void clearPage() + { + PageUtils.clearPage(); + } + + /** + * 鍝嶅簲璇锋眰鍒嗛〉鏁版嵁 + */ + @SuppressWarnings({ "rawtypes", "unchecked" }) + protected TableDataInfo getDataTable(List list) + { + TableDataInfo rspData = new TableDataInfo(); + rspData.setCode(HttpStatus.SUCCESS); + rspData.setMsg("鏌ヨ鎴愬姛"); + rspData.setRows(list); + rspData.setTotal(new PageInfo(list).getTotal()); + return rspData; + } + + /** + * 杩斿洖鎴愬姛 + */ + public AjaxResult success() + { + return AjaxResult.success(); + } + + /** + * 杩斿洖澶辫触娑堟伅 + */ + public AjaxResult error() + { + return AjaxResult.error(); + } + + /** + * 杩斿洖鎴愬姛娑堟伅 + */ + public AjaxResult success(String message) + { + return AjaxResult.success(message); + } + + /** + * 杩斿洖鎴愬姛娑堟伅 + */ + public AjaxResult success(Object data) + { + return AjaxResult.success(data); + } + + /** + * 杩斿洖澶辫触娑堟伅 + */ + public AjaxResult error(String message) + { + return AjaxResult.error(message); + } + + /** + * 杩斿洖璀﹀憡娑堟伅 + */ + public AjaxResult warn(String message) + { + return AjaxResult.warn(message); + } + + /** + * 鍝嶅簲杩斿洖缁撴灉 + * + * @param rows 褰卞搷琛屾暟 + * @return 鎿嶄綔缁撴灉 + */ + protected AjaxResult toAjax(int rows) + { + return rows > 0 ? AjaxResult.success() : AjaxResult.error(); + } + + /** + * 鍝嶅簲杩斿洖缁撴灉 + * + * @param result 缁撴灉 + * @return 鎿嶄綔缁撴灉 + */ + protected AjaxResult toAjax(boolean result) + { + return result ? success() : error(); + } + + /** + * 椤甸潰璺宠浆 + */ + public String redirect(String url) + { + return StringUtils.format("redirect:{}", url); + } + + /** + * 鑾峰彇鐢ㄦ埛缂撳瓨淇℃伅 + */ + public LoginUser getLoginUser() + { + return SecurityUtils.getLoginUser(); + } + + /** + * 鑾峰彇鐧诲綍鐢ㄦ埛id + */ + public Long getUserId() + { + return getLoginUser().getUserId(); + } + + /** + * 鑾峰彇鐧诲綍閮ㄩ棬id + */ + public Long getDeptId() + { + return getLoginUser().getDeptId(); + } + + /** + * 鑾峰彇鐧诲綍鐢ㄦ埛鍚 + */ + public String getUsername() + { + return getLoginUser().getUsername(); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/core/domain/AjaxResult.java b/evo-admin/src/main/java/com/evo/common/core/domain/AjaxResult.java new file mode 100644 index 0000000..aa29a7e --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/core/domain/AjaxResult.java @@ -0,0 +1,216 @@ +package com.evo.common.core.domain; + +import java.util.HashMap; +import java.util.Objects; +import com.evo.common.constant.HttpStatus; +import com.evo.common.utils.StringUtils; + +/** + * 鎿嶄綔娑堟伅鎻愰啋 + * + * @author evo + */ +public class AjaxResult extends HashMap +{ + private static final long serialVersionUID = 1L; + + /** 鐘舵佺爜 */ + public static final String CODE_TAG = "code"; + + /** 杩斿洖鍐呭 */ + public static final String MSG_TAG = "msg"; + + /** 鏁版嵁瀵硅薄 */ + public static final String DATA_TAG = "data"; + + /** + * 鍒濆鍖栦竴涓柊鍒涘缓鐨 AjaxResult 瀵硅薄锛屼娇鍏惰〃绀轰竴涓┖娑堟伅銆 + */ + public AjaxResult() + { + } + + /** + * 鍒濆鍖栦竴涓柊鍒涘缓鐨 AjaxResult 瀵硅薄 + * + * @param code 鐘舵佺爜 + * @param msg 杩斿洖鍐呭 + */ + public AjaxResult(int code, String msg) + { + super.put(CODE_TAG, code); + super.put(MSG_TAG, msg); + } + + /** + * 鍒濆鍖栦竴涓柊鍒涘缓鐨 AjaxResult 瀵硅薄 + * + * @param code 鐘舵佺爜 + * @param msg 杩斿洖鍐呭 + * @param data 鏁版嵁瀵硅薄 + */ + public AjaxResult(int code, String msg, Object data) + { + super.put(CODE_TAG, code); + super.put(MSG_TAG, msg); + if (StringUtils.isNotNull(data)) + { + super.put(DATA_TAG, data); + } + } + + /** + * 杩斿洖鎴愬姛娑堟伅 + * + * @return 鎴愬姛娑堟伅 + */ + public static AjaxResult success() + { + return AjaxResult.success("鎿嶄綔鎴愬姛"); + } + + /** + * 杩斿洖鎴愬姛鏁版嵁 + * + * @return 鎴愬姛娑堟伅 + */ + public static AjaxResult success(Object data) + { + return AjaxResult.success("鎿嶄綔鎴愬姛", data); + } + + /** + * 杩斿洖鎴愬姛娑堟伅 + * + * @param msg 杩斿洖鍐呭 + * @return 鎴愬姛娑堟伅 + */ + public static AjaxResult success(String msg) + { + return AjaxResult.success(msg, null); + } + + /** + * 杩斿洖鎴愬姛娑堟伅 + * + * @param msg 杩斿洖鍐呭 + * @param data 鏁版嵁瀵硅薄 + * @return 鎴愬姛娑堟伅 + */ + public static AjaxResult success(String msg, Object data) + { + return new AjaxResult(HttpStatus.SUCCESS, msg, data); + } + + /** + * 杩斿洖璀﹀憡娑堟伅 + * + * @param msg 杩斿洖鍐呭 + * @return 璀﹀憡娑堟伅 + */ + public static AjaxResult warn(String msg) + { + return AjaxResult.warn(msg, null); + } + + /** + * 杩斿洖璀﹀憡娑堟伅 + * + * @param msg 杩斿洖鍐呭 + * @param data 鏁版嵁瀵硅薄 + * @return 璀﹀憡娑堟伅 + */ + public static AjaxResult warn(String msg, Object data) + { + return new AjaxResult(HttpStatus.WARN, msg, data); + } + + /** + * 杩斿洖閿欒娑堟伅 + * + * @return 閿欒娑堟伅 + */ + public static AjaxResult error() + { + return AjaxResult.error("鎿嶄綔澶辫触"); + } + + /** + * 杩斿洖閿欒娑堟伅 + * + * @param msg 杩斿洖鍐呭 + * @return 閿欒娑堟伅 + */ + public static AjaxResult error(String msg) + { + return AjaxResult.error(msg, null); + } + + /** + * 杩斿洖閿欒娑堟伅 + * + * @param msg 杩斿洖鍐呭 + * @param data 鏁版嵁瀵硅薄 + * @return 閿欒娑堟伅 + */ + public static AjaxResult error(String msg, Object data) + { + return new AjaxResult(HttpStatus.ERROR, msg, data); + } + + /** + * 杩斿洖閿欒娑堟伅 + * + * @param code 鐘舵佺爜 + * @param msg 杩斿洖鍐呭 + * @return 閿欒娑堟伅 + */ + public static AjaxResult error(int code, String msg) + { + return new AjaxResult(code, msg, null); + } + + /** + * 鏄惁涓烘垚鍔熸秷鎭 + * + * @return 缁撴灉 + */ + public boolean isSuccess() + { + return Objects.equals(HttpStatus.SUCCESS, this.get(CODE_TAG)); + } + + /** + * 鏄惁涓鸿鍛婃秷鎭 + * + * @return 缁撴灉 + */ + public boolean isWarn() + { + return Objects.equals(HttpStatus.WARN, this.get(CODE_TAG)); + } + + /** + * 鏄惁涓洪敊璇秷鎭 + * + * @return 缁撴灉 + */ + public boolean isError() + { + return Objects.equals(HttpStatus.ERROR, this.get(CODE_TAG)); + } + + /** + * 鏂逛究閾惧紡璋冪敤 + * + * @param key 閿 + * @param value 鍊 + * @return 鏁版嵁瀵硅薄 + */ + @Override + public AjaxResult put(String key, Object value) + { + super.put(key, value); + return this; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/core/domain/BaseEntity.java b/evo-admin/src/main/java/com/evo/common/core/domain/BaseEntity.java new file mode 100644 index 0000000..e5b294a --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/core/domain/BaseEntity.java @@ -0,0 +1,118 @@ +package com.evo.common.core.domain; + +import java.io.Serializable; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; + +/** + * Entity鍩虹被 + * + * @author evo + */ +public class BaseEntity implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 鎼滅储鍊 */ + @JsonIgnore + private String searchValue; + + /** 鍒涘缓鑰 */ + private String createBy; + + /** 鍒涘缓鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** 鏇存柊鑰 */ + private String updateBy; + + /** 鏇存柊鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + /** 澶囨敞 */ + private String remark; + + /** 璇锋眰鍙傛暟 */ + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private Map params; + + public String getSearchValue() + { + return searchValue; + } + + public void setSearchValue(String searchValue) + { + this.searchValue = searchValue; + } + + public String getCreateBy() + { + return createBy; + } + + public void setCreateBy(String createBy) + { + this.createBy = createBy; + } + + public Date getCreateTime() + { + return createTime; + } + + public void setCreateTime(Date createTime) + { + this.createTime = createTime; + } + + public String getUpdateBy() + { + return updateBy; + } + + public void setUpdateBy(String updateBy) + { + this.updateBy = updateBy; + } + + public Date getUpdateTime() + { + return updateTime; + } + + public void setUpdateTime(Date updateTime) + { + this.updateTime = updateTime; + } + + public String getRemark() + { + return remark; + } + + public void setRemark(String remark) + { + this.remark = remark; + } + + public Map getParams() + { + if (params == null) + { + params = new HashMap<>(); + } + return params; + } + + public void setParams(Map params) + { + this.params = params; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/core/domain/R.java b/evo-admin/src/main/java/com/evo/common/core/domain/R.java new file mode 100644 index 0000000..7a46b12 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/core/domain/R.java @@ -0,0 +1,115 @@ +package com.evo.common.core.domain; + +import java.io.Serializable; +import com.evo.common.constant.HttpStatus; + +/** + * 鍝嶅簲淇℃伅涓讳綋 + * + * @author evo + */ +public class R implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 鎴愬姛 */ + public static final int SUCCESS = HttpStatus.SUCCESS; + + /** 澶辫触 */ + public static final int FAIL = HttpStatus.ERROR; + + private int code; + + private String msg; + + private T data; + + public static R ok() + { + return restResult(null, SUCCESS, "鎿嶄綔鎴愬姛"); + } + + public static R ok(T data) + { + return restResult(data, SUCCESS, "鎿嶄綔鎴愬姛"); + } + + public static R ok(T data, String msg) + { + return restResult(data, SUCCESS, msg); + } + + public static R fail() + { + return restResult(null, FAIL, "鎿嶄綔澶辫触"); + } + + public static R fail(String msg) + { + return restResult(null, FAIL, msg); + } + + public static R fail(T data) + { + return restResult(data, FAIL, "鎿嶄綔澶辫触"); + } + + public static R fail(T data, String msg) + { + return restResult(data, FAIL, msg); + } + + public static R fail(int code, String msg) + { + return restResult(null, code, msg); + } + + private static R restResult(T data, int code, String msg) + { + R apiResult = new R<>(); + apiResult.setCode(code); + apiResult.setData(data); + apiResult.setMsg(msg); + return apiResult; + } + + public int getCode() + { + return code; + } + + public void setCode(int code) + { + this.code = code; + } + + public String getMsg() + { + return msg; + } + + public void setMsg(String msg) + { + this.msg = msg; + } + + public T getData() + { + return data; + } + + public void setData(T data) + { + this.data = data; + } + + public static Boolean isError(R ret) + { + return !isSuccess(ret); + } + + public static Boolean isSuccess(R ret) + { + return R.SUCCESS == ret.getCode(); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/core/domain/TreeEntity.java b/evo-admin/src/main/java/com/evo/common/core/domain/TreeEntity.java new file mode 100644 index 0000000..8f668e7 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/core/domain/TreeEntity.java @@ -0,0 +1,79 @@ +package com.evo.common.core.domain; + +import java.util.ArrayList; +import java.util.List; + +/** + * Tree鍩虹被 + * + * @author evo + */ +public class TreeEntity extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鐖惰彍鍗曞悕绉 */ + private String parentName; + + /** 鐖惰彍鍗旾D */ + private Long parentId; + + /** 鏄剧ず椤哄簭 */ + private Integer orderNum; + + /** 绁栫骇鍒楄〃 */ + private String ancestors; + + /** 瀛愰儴闂 */ + private List children = new ArrayList<>(); + + public String getParentName() + { + return parentName; + } + + public void setParentName(String parentName) + { + this.parentName = parentName; + } + + public Long getParentId() + { + return parentId; + } + + public void setParentId(Long parentId) + { + this.parentId = parentId; + } + + public Integer getOrderNum() + { + return orderNum; + } + + public void setOrderNum(Integer orderNum) + { + this.orderNum = orderNum; + } + + public String getAncestors() + { + return ancestors; + } + + public void setAncestors(String ancestors) + { + this.ancestors = ancestors; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/core/domain/TreeSelect.java b/evo-admin/src/main/java/com/evo/common/core/domain/TreeSelect.java new file mode 100644 index 0000000..ee8cf75 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/core/domain/TreeSelect.java @@ -0,0 +1,77 @@ +package com.evo.common.core.domain; + +import java.io.Serializable; +import java.util.List; +import java.util.stream.Collectors; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.evo.common.core.domain.entity.SysDept; +import com.evo.common.core.domain.entity.SysMenu; + +/** + * Treeselect鏍戠粨鏋勫疄浣撶被 + * + * @author evo + */ +public class TreeSelect implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 鑺傜偣ID */ + private Long id; + + /** 鑺傜偣鍚嶇О */ + private String label; + + /** 瀛愯妭鐐 */ + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private List children; + + public TreeSelect() + { + + } + + public TreeSelect(SysDept dept) + { + this.id = dept.getDeptId(); + this.label = dept.getDeptName(); + this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + public TreeSelect(SysMenu menu) + { + this.id = menu.getMenuId(); + this.label = menu.getMenuName(); + this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + public Long getId() + { + return id; + } + + public void setId(Long id) + { + this.id = id; + } + + public String getLabel() + { + return label; + } + + public void setLabel(String label) + { + this.label = label; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/core/domain/entity/SysDept.java b/evo-admin/src/main/java/com/evo/common/core/domain/entity/SysDept.java new file mode 100644 index 0000000..6215bca --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/core/domain/entity/SysDept.java @@ -0,0 +1,171 @@ +package com.evo.common.core.domain.entity; + +import java.util.ArrayList; +import java.util.List; +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.evo.common.core.domain.BaseEntity; + +/** + * 閮ㄩ棬琛 sys_dept + * + * @author evo + */ +public class SysDept extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 閮ㄩ棬ID */ + private Long deptId; + + /** 鐖堕儴闂↖D */ + private Long parentId; + + /** 绁栫骇鍒楄〃 */ + private String ancestors; + + /** 閮ㄩ棬鍚嶇О */ + private String deptName; + + /** 璐熻矗浜 */ + private String leader; + + /** 鑱旂郴鐢佃瘽 */ + private String phone; + + /** 閮ㄩ棬鐘舵:0姝e父,1鍋滅敤 */ + private String status; + + /** 鍒犻櫎鏍囧織锛0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛 */ + private String delFlag; + + /** 鐖堕儴闂ㄥ悕绉 */ + private String parentName; + + /** 瀛愰儴闂 */ + private List children = new ArrayList(); + + public Long getDeptId() + { + return deptId; + } + + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + public Long getParentId() + { + return parentId; + } + + public void setParentId(Long parentId) + { + this.parentId = parentId; + } + + public String getAncestors() + { + return ancestors; + } + + public void setAncestors(String ancestors) + { + this.ancestors = ancestors; + } + + @NotBlank(message = "閮ㄩ棬鍚嶇О涓嶈兘涓虹┖") + @Size(min = 0, max = 30, message = "閮ㄩ棬鍚嶇О闀垮害涓嶈兘瓒呰繃30涓瓧绗") + public String getDeptName() + { + return deptName; + } + + public void setDeptName(String deptName) + { + this.deptName = deptName; + } + public String getLeader() + { + return leader; + } + + public void setLeader(String leader) + { + this.leader = leader; + } + + @Size(min = 0, max = 11, message = "鑱旂郴鐢佃瘽闀垮害涓嶈兘瓒呰繃11涓瓧绗") + public String getPhone() + { + return phone; + } + + public void setPhone(String phone) + { + this.phone = phone; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getDelFlag() + { + return delFlag; + } + + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getParentName() + { + return parentName; + } + + public void setParentName(String parentName) + { + this.parentName = parentName; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("deptId", getDeptId()) + .append("parentId", getParentId()) + .append("ancestors", getAncestors()) + .append("deptName", getDeptName()) + .append("leader", getLeader()) + .append("phone", getPhone()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/core/domain/entity/SysDictData.java b/evo-admin/src/main/java/com/evo/common/core/domain/entity/SysDictData.java new file mode 100644 index 0000000..2824747 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/core/domain/entity/SysDictData.java @@ -0,0 +1,176 @@ +package com.evo.common.core.domain.entity; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.evo.common.annotation.Excel; +import com.evo.common.annotation.Excel.ColumnType; +import com.evo.common.constant.UserConstants; +import com.evo.common.core.domain.BaseEntity; + +/** + * 瀛楀吀鏁版嵁琛 sys_dict_data + * + * @author evo + */ +public class SysDictData extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 瀛楀吀缂栫爜 */ + @Excel(name = "瀛楀吀缂栫爜", cellType = ColumnType.NUMERIC) + private Long dictCode; + + /** 瀛楀吀鎺掑簭 */ + @Excel(name = "瀛楀吀鎺掑簭", cellType = ColumnType.NUMERIC) + private Long dictSort; + + /** 瀛楀吀鏍囩 */ + @Excel(name = "瀛楀吀鏍囩") + private String dictLabel; + + /** 瀛楀吀閿 */ + @Excel(name = "瀛楀吀閿") + private String dictValue; + + /** 瀛楀吀绫诲瀷 */ + @Excel(name = "瀛楀吀绫诲瀷") + private String dictType; + + /** 鏍峰紡灞炴э紙鍏朵粬鏍峰紡鎵╁睍锛 */ + private String cssClass; + + /** 琛ㄦ牸瀛楀吀鏍峰紡 */ + private String listClass; + + /** 鏄惁榛樿锛圷鏄 N鍚︼級 */ + @Excel(name = "鏄惁榛樿", readConverterExp = "Y=鏄,N=鍚") + private String isDefault; + + /** 鐘舵侊紙0姝e父 1鍋滅敤锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=姝e父,1=鍋滅敤") + private String status; + + public Long getDictCode() + { + return dictCode; + } + + public void setDictCode(Long dictCode) + { + this.dictCode = dictCode; + } + + public Long getDictSort() + { + return dictSort; + } + + public void setDictSort(Long dictSort) + { + this.dictSort = dictSort; + } + + @NotBlank(message = "瀛楀吀鏍囩涓嶈兘涓虹┖") + @Size(min = 0, max = 100, message = "瀛楀吀鏍囩闀垮害涓嶈兘瓒呰繃100涓瓧绗") + public String getDictLabel() + { + return dictLabel; + } + + public void setDictLabel(String dictLabel) + { + this.dictLabel = dictLabel; + } + + @NotBlank(message = "瀛楀吀閿间笉鑳戒负绌") + @Size(min = 0, max = 100, message = "瀛楀吀閿奸暱搴︿笉鑳借秴杩100涓瓧绗") + public String getDictValue() + { + return dictValue; + } + + public void setDictValue(String dictValue) + { + this.dictValue = dictValue; + } + + @NotBlank(message = "瀛楀吀绫诲瀷涓嶈兘涓虹┖") + @Size(min = 0, max = 100, message = "瀛楀吀绫诲瀷闀垮害涓嶈兘瓒呰繃100涓瓧绗") + public String getDictType() + { + return dictType; + } + + public void setDictType(String dictType) + { + this.dictType = dictType; + } + + @Size(min = 0, max = 100, message = "鏍峰紡灞炴ч暱搴︿笉鑳借秴杩100涓瓧绗") + public String getCssClass() + { + return cssClass; + } + + public void setCssClass(String cssClass) + { + this.cssClass = cssClass; + } + + public String getListClass() + { + return listClass; + } + + public void setListClass(String listClass) + { + this.listClass = listClass; + } + + public boolean getDefault() + { + return UserConstants.YES.equals(this.isDefault); + } + + public String getIsDefault() + { + return isDefault; + } + + public void setIsDefault(String isDefault) + { + this.isDefault = isDefault; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("dictCode", getDictCode()) + .append("dictSort", getDictSort()) + .append("dictLabel", getDictLabel()) + .append("dictValue", getDictValue()) + .append("dictType", getDictType()) + .append("cssClass", getCssClass()) + .append("listClass", getListClass()) + .append("isDefault", getIsDefault()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/core/domain/entity/SysDictType.java b/evo-admin/src/main/java/com/evo/common/core/domain/entity/SysDictType.java new file mode 100644 index 0000000..6eadb98 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/core/domain/entity/SysDictType.java @@ -0,0 +1,96 @@ +package com.evo.common.core.domain.entity; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.evo.common.annotation.Excel; +import com.evo.common.annotation.Excel.ColumnType; +import com.evo.common.core.domain.BaseEntity; + +/** + * 瀛楀吀绫诲瀷琛 sys_dict_type + * + * @author evo + */ +public class SysDictType extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 瀛楀吀涓婚敭 */ + @Excel(name = "瀛楀吀涓婚敭", cellType = ColumnType.NUMERIC) + private Long dictId; + + /** 瀛楀吀鍚嶇О */ + @Excel(name = "瀛楀吀鍚嶇О") + private String dictName; + + /** 瀛楀吀绫诲瀷 */ + @Excel(name = "瀛楀吀绫诲瀷") + private String dictType; + + /** 鐘舵侊紙0姝e父 1鍋滅敤锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=姝e父,1=鍋滅敤") + private String status; + + public Long getDictId() + { + return dictId; + } + + public void setDictId(Long dictId) + { + this.dictId = dictId; + } + + @NotBlank(message = "瀛楀吀鍚嶇О涓嶈兘涓虹┖") + @Size(min = 0, max = 100, message = "瀛楀吀绫诲瀷鍚嶇О闀垮害涓嶈兘瓒呰繃100涓瓧绗") + public String getDictName() + { + return dictName; + } + + public void setDictName(String dictName) + { + this.dictName = dictName; + } + + @NotBlank(message = "瀛楀吀绫诲瀷涓嶈兘涓虹┖") + @Size(min = 0, max = 100, message = "瀛楀吀绫诲瀷绫诲瀷闀垮害涓嶈兘瓒呰繃100涓瓧绗") + @Pattern(regexp = "^[a-z][a-z0-9_]*$", message = "瀛楀吀绫诲瀷蹇呴』浠ュ瓧姣嶅紑澶达紝涓斿彧鑳戒负锛堝皬鍐欏瓧姣嶏紝鏁板瓧锛屼笅婊戠嚎锛") + public String getDictType() + { + return dictType; + } + + public void setDictType(String dictType) + { + this.dictType = dictType; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("dictId", getDictId()) + .append("dictName", getDictName()) + .append("dictType", getDictType()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/core/domain/entity/SysMenu.java b/evo-admin/src/main/java/com/evo/common/core/domain/entity/SysMenu.java new file mode 100644 index 0000000..3160c27 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/core/domain/entity/SysMenu.java @@ -0,0 +1,274 @@ +package com.evo.common.core.domain.entity; + +import java.util.ArrayList; +import java.util.List; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.evo.common.core.domain.BaseEntity; + +/** + * 鑿滃崟鏉冮檺琛 sys_menu + * + * @author evo + */ +public class SysMenu extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鑿滃崟ID */ + private Long menuId; + + /** 鑿滃崟鍚嶇О */ + private String menuName; + + /** 鐖惰彍鍗曞悕绉 */ + private String parentName; + + /** 鐖惰彍鍗旾D */ + private Long parentId; + + /** 鏄剧ず椤哄簭 */ + private Integer orderNum; + + /** 璺敱鍦板潃 */ + private String path; + + /** 缁勪欢璺緞 */ + private String component; + + /** 璺敱鍙傛暟 */ + private String query; + + /** 璺敱鍚嶇О锛岄粯璁ゅ拰璺敱鍦板潃鐩稿悓鐨勯┘宄版牸寮忥紙娉ㄦ剰锛氬洜涓簐ue3鐗堟湰鐨剅outer浼氬垹闄ゅ悕绉扮浉鍚岃矾鐢憋紝涓洪伩鍏嶅悕瀛楃殑鍐茬獊锛岀壒娈婃儏鍐靛彲浠ヨ嚜瀹氫箟锛 */ + private String routeName; + + /** 鏄惁涓哄閾撅紙0鏄 1鍚︼級 */ + private String isFrame; + + /** 鏄惁缂撳瓨锛0缂撳瓨 1涓嶇紦瀛橈級 */ + private String isCache; + + /** 绫诲瀷锛圡鐩綍 C鑿滃崟 F鎸夐挳锛 */ + private String menuType; + + /** 鏄剧ず鐘舵侊紙0鏄剧ず 1闅愯棌锛 */ + private String visible; + + /** 鑿滃崟鐘舵侊紙0姝e父 1鍋滅敤锛 */ + private String status; + + /** 鏉冮檺瀛楃涓 */ + private String perms; + + /** 鑿滃崟鍥炬爣 */ + private String icon; + + /** 瀛愯彍鍗 */ + private List children = new ArrayList(); + + public Long getMenuId() + { + return menuId; + } + + public void setMenuId(Long menuId) + { + this.menuId = menuId; + } + + @NotBlank(message = "鑿滃崟鍚嶇О涓嶈兘涓虹┖") + @Size(min = 0, max = 50, message = "鑿滃崟鍚嶇О闀垮害涓嶈兘瓒呰繃50涓瓧绗") + public String getMenuName() + { + return menuName; + } + + public void setMenuName(String menuName) + { + this.menuName = menuName; + } + + public String getParentName() + { + return parentName; + } + + public void setParentName(String parentName) + { + this.parentName = parentName; + } + + public Long getParentId() + { + return parentId; + } + + public void setParentId(Long parentId) + { + this.parentId = parentId; + } + + @NotNull(message = "鏄剧ず椤哄簭涓嶈兘涓虹┖") + public Integer getOrderNum() + { + return orderNum; + } + + public void setOrderNum(Integer orderNum) + { + this.orderNum = orderNum; + } + + @Size(min = 0, max = 200, message = "璺敱鍦板潃涓嶈兘瓒呰繃200涓瓧绗") + public String getPath() + { + return path; + } + + public void setPath(String path) + { + this.path = path; + } + + @Size(min = 0, max = 200, message = "缁勪欢璺緞涓嶈兘瓒呰繃255涓瓧绗") + public String getComponent() + { + return component; + } + + public void setComponent(String component) + { + this.component = component; + } + + public String getQuery() + { + return query; + } + + public void setQuery(String query) + { + this.query = query; + } + + public String getRouteName() + { + return routeName; + } + + public void setRouteName(String routeName) + { + this.routeName = routeName; + } + + public String getIsFrame() + { + return isFrame; + } + + public void setIsFrame(String isFrame) + { + this.isFrame = isFrame; + } + + public String getIsCache() + { + return isCache; + } + + public void setIsCache(String isCache) + { + this.isCache = isCache; + } + + @NotBlank(message = "鑿滃崟绫诲瀷涓嶈兘涓虹┖") + public String getMenuType() + { + return menuType; + } + + public void setMenuType(String menuType) + { + this.menuType = menuType; + } + + public String getVisible() + { + return visible; + } + + public void setVisible(String visible) + { + this.visible = visible; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + @Size(min = 0, max = 100, message = "鏉冮檺鏍囪瘑闀垮害涓嶈兘瓒呰繃100涓瓧绗") + public String getPerms() + { + return perms; + } + + public void setPerms(String perms) + { + this.perms = perms; + } + + public String getIcon() + { + return icon; + } + + public void setIcon(String icon) + { + this.icon = icon; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("menuId", getMenuId()) + .append("menuName", getMenuName()) + .append("parentId", getParentId()) + .append("orderNum", getOrderNum()) + .append("path", getPath()) + .append("component", getComponent()) + .append("query", getQuery()) + .append("routeName", getRouteName()) + .append("isFrame", getIsFrame()) + .append("IsCache", getIsCache()) + .append("menuType", getMenuType()) + .append("visible", getVisible()) + .append("status ", getStatus()) + .append("perms", getPerms()) + .append("icon", getIcon()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/core/domain/entity/SysRole.java b/evo-admin/src/main/java/com/evo/common/core/domain/entity/SysRole.java new file mode 100644 index 0000000..b8ded83 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/core/domain/entity/SysRole.java @@ -0,0 +1,241 @@ +package com.evo.common.core.domain.entity; + +import java.util.Set; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.evo.common.annotation.Excel; +import com.evo.common.annotation.Excel.ColumnType; +import com.evo.common.core.domain.BaseEntity; + +/** + * 瑙掕壊琛 sys_role + * + * @author evo + */ +public class SysRole extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 瑙掕壊ID */ + @Excel(name = "瑙掕壊搴忓彿", cellType = ColumnType.NUMERIC) + private Long roleId; + + /** 瑙掕壊鍚嶇О */ + @Excel(name = "瑙掕壊鍚嶇О") + private String roleName; + + /** 瑙掕壊鏉冮檺 */ + @Excel(name = "瑙掕壊鏉冮檺") + private String roleKey; + + /** 瑙掕壊鎺掑簭 */ + @Excel(name = "瑙掕壊鎺掑簭") + private Integer roleSort; + + /** 鏁版嵁鑼冨洿锛1锛氭墍鏈夋暟鎹潈闄愶紱2锛氳嚜瀹氫箟鏁版嵁鏉冮檺锛3锛氭湰閮ㄩ棬鏁版嵁鏉冮檺锛4锛氭湰閮ㄩ棬鍙婁互涓嬫暟鎹潈闄愶紱5锛氫粎鏈汉鏁版嵁鏉冮檺锛 */ + @Excel(name = "鏁版嵁鑼冨洿", readConverterExp = "1=鎵鏈夋暟鎹潈闄,2=鑷畾涔夋暟鎹潈闄,3=鏈儴闂ㄦ暟鎹潈闄,4=鏈儴闂ㄥ強浠ヤ笅鏁版嵁鏉冮檺,5=浠呮湰浜烘暟鎹潈闄") + private String dataScope; + + /** 鑿滃崟鏍戦夋嫨椤规槸鍚﹀叧鑱旀樉绀猴紙 0锛氱埗瀛愪笉浜掔浉鍏宠仈鏄剧ず 1锛氱埗瀛愪簰鐩稿叧鑱旀樉绀猴級 */ + private boolean menuCheckStrictly; + + /** 閮ㄩ棬鏍戦夋嫨椤规槸鍚﹀叧鑱旀樉绀猴紙0锛氱埗瀛愪笉浜掔浉鍏宠仈鏄剧ず 1锛氱埗瀛愪簰鐩稿叧鑱旀樉绀 锛 */ + private boolean deptCheckStrictly; + + /** 瑙掕壊鐘舵侊紙0姝e父 1鍋滅敤锛 */ + @Excel(name = "瑙掕壊鐘舵", readConverterExp = "0=姝e父,1=鍋滅敤") + private String status; + + /** 鍒犻櫎鏍囧織锛0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛 */ + private String delFlag; + + /** 鐢ㄦ埛鏄惁瀛樺湪姝よ鑹叉爣璇 榛樿涓嶅瓨鍦 */ + private boolean flag = false; + + /** 鑿滃崟缁 */ + private Long[] menuIds; + + /** 閮ㄩ棬缁勶紙鏁版嵁鏉冮檺锛 */ + private Long[] deptIds; + + /** 瑙掕壊鑿滃崟鏉冮檺 */ + private Set permissions; + + public SysRole() + { + + } + + public SysRole(Long roleId) + { + this.roleId = roleId; + } + + public Long getRoleId() + { + return roleId; + } + + public void setRoleId(Long roleId) + { + this.roleId = roleId; + } + + public boolean isAdmin() + { + return isAdmin(this.roleId); + } + + public static boolean isAdmin(Long roleId) + { + return roleId != null && 1L == roleId; + } + + @NotBlank(message = "瑙掕壊鍚嶇О涓嶈兘涓虹┖") + @Size(min = 0, max = 30, message = "瑙掕壊鍚嶇О闀垮害涓嶈兘瓒呰繃30涓瓧绗") + public String getRoleName() + { + return roleName; + } + + public void setRoleName(String roleName) + { + this.roleName = roleName; + } + + @NotBlank(message = "鏉冮檺瀛楃涓嶈兘涓虹┖") + @Size(min = 0, max = 100, message = "鏉冮檺瀛楃闀垮害涓嶈兘瓒呰繃100涓瓧绗") + public String getRoleKey() + { + return roleKey; + } + + public void setRoleKey(String roleKey) + { + this.roleKey = roleKey; + } + + @NotNull(message = "鏄剧ず椤哄簭涓嶈兘涓虹┖") + public Integer getRoleSort() + { + return roleSort; + } + + public void setRoleSort(Integer roleSort) + { + this.roleSort = roleSort; + } + + public String getDataScope() + { + return dataScope; + } + + public void setDataScope(String dataScope) + { + this.dataScope = dataScope; + } + + public boolean isMenuCheckStrictly() + { + return menuCheckStrictly; + } + + public void setMenuCheckStrictly(boolean menuCheckStrictly) + { + this.menuCheckStrictly = menuCheckStrictly; + } + + public boolean isDeptCheckStrictly() + { + return deptCheckStrictly; + } + + public void setDeptCheckStrictly(boolean deptCheckStrictly) + { + this.deptCheckStrictly = deptCheckStrictly; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getDelFlag() + { + return delFlag; + } + + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public boolean isFlag() + { + return flag; + } + + public void setFlag(boolean flag) + { + this.flag = flag; + } + + public Long[] getMenuIds() + { + return menuIds; + } + + public void setMenuIds(Long[] menuIds) + { + this.menuIds = menuIds; + } + + public Long[] getDeptIds() + { + return deptIds; + } + + public void setDeptIds(Long[] deptIds) + { + this.deptIds = deptIds; + } + + public Set getPermissions() + { + return permissions; + } + + public void setPermissions(Set permissions) + { + this.permissions = permissions; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("roleId", getRoleId()) + .append("roleName", getRoleName()) + .append("roleKey", getRoleKey()) + .append("roleSort", getRoleSort()) + .append("dataScope", getDataScope()) + .append("menuCheckStrictly", isMenuCheckStrictly()) + .append("deptCheckStrictly", isDeptCheckStrictly()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/core/domain/entity/SysUser.java b/evo-admin/src/main/java/com/evo/common/core/domain/entity/SysUser.java new file mode 100644 index 0000000..b56b3d7 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/core/domain/entity/SysUser.java @@ -0,0 +1,311 @@ +package com.evo.common.core.domain.entity; + +import java.util.Date; +import java.util.List; +import javax.validation.constraints.*; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.evo.common.annotation.Excel; +import com.evo.common.annotation.Excel.ColumnType; +import com.evo.common.annotation.Excel.Type; +import com.evo.common.annotation.Excels; +import com.evo.common.core.domain.BaseEntity; +import com.evo.common.xss.Xss; + +/** + * 鐢ㄦ埛瀵硅薄 sys_user + * + * @author evo + */ +public class SysUser extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鐢ㄦ埛ID */ + @Excel(name = "鐢ㄦ埛搴忓彿", type = Type.EXPORT, cellType = ColumnType.NUMERIC, prompt = "鐢ㄦ埛缂栧彿") + private Long userId; + + /** 閮ㄩ棬ID */ + @Excel(name = "閮ㄩ棬缂栧彿", type = Type.IMPORT) + private Long deptId; + + /** 鐢ㄦ埛璐﹀彿 */ + @Excel(name = "鐧诲綍鍚嶇О") + private String userName; + + /** 鐢ㄦ埛鏄电О */ + @Excel(name = "鐢ㄦ埛鍚嶇О") + private String nickName; + + /** 鐢ㄦ埛閭 */ + @Excel(name = "鐢ㄦ埛閭") + private String email; + + /** 鎵嬫満鍙风爜 */ + @Excel(name = "鎵嬫満鍙风爜", cellType = ColumnType.TEXT) + private String phonenumber; + + /** 鐢ㄦ埛鎬у埆 */ + @Excel(name = "鐢ㄦ埛鎬у埆", readConverterExp = "0=鐢,1=濂,2=鏈煡") + private String sex; + + /** 鐢ㄦ埛澶村儚 */ + private String avatar; + + /** 瀵嗙爜 */ + private String password; + + /** 甯愬彿鐘舵侊紙0姝e父 1鍋滅敤锛 */ + @Excel(name = "甯愬彿鐘舵", readConverterExp = "0=姝e父,1=鍋滅敤") + private String status; + + /** 鍒犻櫎鏍囧織锛0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛 */ + private String delFlag; + + /** 鏈鍚庣櫥褰旾P */ + @Excel(name = "鏈鍚庣櫥褰旾P", type = Type.EXPORT) + private String loginIp; + + /** 鏈鍚庣櫥褰曟椂闂 */ + @Excel(name = "鏈鍚庣櫥褰曟椂闂", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT) + private Date loginDate; + + /** 閮ㄩ棬瀵硅薄 */ + @Excels({ + @Excel(name = "閮ㄩ棬鍚嶇О", targetAttr = "deptName", type = Type.EXPORT), + @Excel(name = "閮ㄩ棬璐熻矗浜", targetAttr = "leader", type = Type.EXPORT) + }) + private SysDept dept; + + /** 瑙掕壊瀵硅薄 */ + private List roles; + + /** 瑙掕壊缁 */ + private Long[] roleIds; + + /** 瑙掕壊ID */ + private Long roleId; + + public SysUser() + { + + } + + public SysUser(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public boolean isAdmin() + { + return isAdmin(this.userId); + } + + public static boolean isAdmin(Long userId) + { + return userId != null && 1L == userId; + } + + public Long getDeptId() + { + return deptId; + } + + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + @Xss(message = "鐢ㄦ埛鏄电О涓嶈兘鍖呭惈鑴氭湰瀛楃") + @Size(min = 0, max = 30, message = "鐢ㄦ埛鏄电О闀垮害涓嶈兘瓒呰繃30涓瓧绗") + public String getNickName() + { + return nickName; + } + + public void setNickName(String nickName) + { + this.nickName = nickName; + } + + @Xss(message = "鐢ㄦ埛璐﹀彿涓嶈兘鍖呭惈鑴氭湰瀛楃") + @NotBlank(message = "鐢ㄦ埛璐﹀彿涓嶈兘涓虹┖") + @Size(min = 0, max = 30, message = "鐢ㄦ埛璐﹀彿闀垮害涓嶈兘瓒呰繃30涓瓧绗") + public String getUserName() + { + return userName; + } + + public void setUserName(String userName) + { + this.userName = userName; + } + + @Email(message = "閭鏍煎紡涓嶆纭") + @Size(min = 0, max = 50, message = "閭闀垮害涓嶈兘瓒呰繃50涓瓧绗") + public String getEmail() + { + return email; + } + + public void setEmail(String email) + { + this.email = email; + } + + @Size(min = 0, max = 11, message = "鎵嬫満鍙风爜闀垮害涓嶈兘瓒呰繃11涓瓧绗") + public String getPhonenumber() + { + return phonenumber; + } + + public void setPhonenumber(String phonenumber) + { + this.phonenumber = phonenumber; + } + + public String getSex() + { + return sex; + } + + public void setSex(String sex) + { + this.sex = sex; + } + + public String getAvatar() + { + return avatar; + } + + public void setAvatar(String avatar) + { + this.avatar = avatar; + } + + public String getPassword() + { + return password; + } + + public void setPassword(String password) + { + this.password = password; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getDelFlag() + { + return delFlag; + } + + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getLoginIp() + { + return loginIp; + } + + public void setLoginIp(String loginIp) + { + this.loginIp = loginIp; + } + + public Date getLoginDate() + { + return loginDate; + } + + public void setLoginDate(Date loginDate) + { + this.loginDate = loginDate; + } + + public SysDept getDept() + { + return dept; + } + + public void setDept(SysDept dept) + { + this.dept = dept; + } + + public List getRoles() + { + return roles; + } + + public void setRoles(List roles) + { + this.roles = roles; + } + + public Long[] getRoleIds() + { + return roleIds; + } + + public void setRoleIds(Long[] roleIds) + { + this.roleIds = roleIds; + } + + public Long getRoleId() + { + return roleId; + } + + public void setRoleId(Long roleId) + { + this.roleId = roleId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("deptId", getDeptId()) + .append("userName", getUserName()) + .append("nickName", getNickName()) + .append("email", getEmail()) + .append("phonenumber", getPhonenumber()) + .append("sex", getSex()) + .append("avatar", getAvatar()) + .append("password", getPassword()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("loginIp", getLoginIp()) + .append("loginDate", getLoginDate()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .append("dept", getDept()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/core/domain/model/LoginBody.java b/evo-admin/src/main/java/com/evo/common/core/domain/model/LoginBody.java new file mode 100644 index 0000000..5c92cf3 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/core/domain/model/LoginBody.java @@ -0,0 +1,69 @@ +package com.evo.common.core.domain.model; + +/** + * 鐢ㄦ埛鐧诲綍瀵硅薄 + * + * @author evo + */ +public class LoginBody +{ + /** + * 鐢ㄦ埛鍚 + */ + private String username; + + /** + * 鐢ㄦ埛瀵嗙爜 + */ + private String password; + + /** + * 楠岃瘉鐮 + */ + private String code; + + /** + * 鍞竴鏍囪瘑 + */ + private String uuid; + + public String getUsername() + { + return username; + } + + public void setUsername(String username) + { + this.username = username; + } + + public String getPassword() + { + return password; + } + + public void setPassword(String password) + { + this.password = password; + } + + public String getCode() + { + return code; + } + + public void setCode(String code) + { + this.code = code; + } + + public String getUuid() + { + return uuid; + } + + public void setUuid(String uuid) + { + this.uuid = uuid; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/core/domain/model/LoginUser.java b/evo-admin/src/main/java/com/evo/common/core/domain/model/LoginUser.java new file mode 100644 index 0000000..37f106b --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/core/domain/model/LoginUser.java @@ -0,0 +1,266 @@ +package com.evo.common.core.domain.model; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.evo.common.core.domain.entity.SysUser; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; +import java.util.Collection; +import java.util.Set; + +/** + * 鐧诲綍鐢ㄦ埛韬唤鏉冮檺 + * + * @author evo + */ +public class LoginUser implements UserDetails +{ + private static final long serialVersionUID = 1L; + + /** + * 鐢ㄦ埛ID + */ + private Long userId; + + /** + * 閮ㄩ棬ID + */ + private Long deptId; + + /** + * 鐢ㄦ埛鍞竴鏍囪瘑 + */ + private String token; + + /** + * 鐧诲綍鏃堕棿 + */ + private Long loginTime; + + /** + * 杩囨湡鏃堕棿 + */ + private Long expireTime; + + /** + * 鐧诲綍IP鍦板潃 + */ + private String ipaddr; + + /** + * 鐧诲綍鍦扮偣 + */ + private String loginLocation; + + /** + * 娴忚鍣ㄧ被鍨 + */ + private String browser; + + /** + * 鎿嶄綔绯荤粺 + */ + private String os; + + /** + * 鏉冮檺鍒楄〃 + */ + private Set permissions; + + /** + * 鐢ㄦ埛淇℃伅 + */ + private SysUser user; + + public LoginUser() + { + } + + public LoginUser(SysUser user, Set permissions) + { + this.user = user; + this.permissions = permissions; + } + + public LoginUser(Long userId, Long deptId, SysUser user, Set permissions) + { + this.userId = userId; + this.deptId = deptId; + this.user = user; + this.permissions = permissions; + } + + public Long getUserId() + { + return userId; + } + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getDeptId() + { + return deptId; + } + + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + public String getToken() + { + return token; + } + + public void setToken(String token) + { + this.token = token; + } + + @JSONField(serialize = false) + @Override + public String getPassword() + { + return user.getPassword(); + } + + @Override + public String getUsername() + { + return user.getUserName(); + } + + /** + * 璐︽埛鏄惁鏈繃鏈,杩囨湡鏃犳硶楠岃瘉 + */ + @JSONField(serialize = false) + @Override + public boolean isAccountNonExpired() + { + return true; + } + + /** + * 鎸囧畾鐢ㄦ埛鏄惁瑙i攣,閿佸畾鐨勭敤鎴锋棤娉曡繘琛岃韩浠介獙璇 + * + * @return + */ + @JSONField(serialize = false) + @Override + public boolean isAccountNonLocked() + { + return true; + } + + /** + * 鎸囩ず鏄惁宸茶繃鏈熺殑鐢ㄦ埛鐨勫嚟鎹(瀵嗙爜),杩囨湡鐨勫嚟鎹槻姝㈣璇 + * + * @return + */ + @JSONField(serialize = false) + @Override + public boolean isCredentialsNonExpired() + { + return true; + } + + /** + * 鏄惁鍙敤 ,绂佺敤鐨勭敤鎴蜂笉鑳借韩浠介獙璇 + * + * @return + */ + @JSONField(serialize = false) + @Override + public boolean isEnabled() + { + return true; + } + + public Long getLoginTime() + { + return loginTime; + } + + public void setLoginTime(Long loginTime) + { + this.loginTime = loginTime; + } + + public String getIpaddr() + { + return ipaddr; + } + + public void setIpaddr(String ipaddr) + { + this.ipaddr = ipaddr; + } + + public String getLoginLocation() + { + return loginLocation; + } + + public void setLoginLocation(String loginLocation) + { + this.loginLocation = loginLocation; + } + + public String getBrowser() + { + return browser; + } + + public void setBrowser(String browser) + { + this.browser = browser; + } + + public String getOs() + { + return os; + } + + public void setOs(String os) + { + this.os = os; + } + + public Long getExpireTime() + { + return expireTime; + } + + public void setExpireTime(Long expireTime) + { + this.expireTime = expireTime; + } + + public Set getPermissions() + { + return permissions; + } + + public void setPermissions(Set permissions) + { + this.permissions = permissions; + } + + public SysUser getUser() + { + return user; + } + + public void setUser(SysUser user) + { + this.user = user; + } + + @Override + public Collection getAuthorities() + { + return null; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/core/domain/model/RegisterBody.java b/evo-admin/src/main/java/com/evo/common/core/domain/model/RegisterBody.java new file mode 100644 index 0000000..0b1d0be --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/core/domain/model/RegisterBody.java @@ -0,0 +1,11 @@ +package com.evo.common.core.domain.model; + +/** + * 鐢ㄦ埛娉ㄥ唽瀵硅薄 + * + * @author evo + */ +public class RegisterBody extends LoginBody +{ + +} diff --git a/evo-admin/src/main/java/com/evo/common/core/page/PageDomain.java b/evo-admin/src/main/java/com/evo/common/core/page/PageDomain.java new file mode 100644 index 0000000..4c75dfd --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/core/page/PageDomain.java @@ -0,0 +1,101 @@ +package com.evo.common.core.page; + +import com.evo.common.utils.StringUtils; + +/** + * 鍒嗛〉鏁版嵁 + * + * @author evo + */ +public class PageDomain +{ + /** 褰撳墠璁板綍璧峰绱㈠紩 */ + private Integer pageNum; + + /** 姣忛〉鏄剧ず璁板綍鏁 */ + private Integer pageSize; + + /** 鎺掑簭鍒 */ + private String orderByColumn; + + /** 鎺掑簭鐨勬柟鍚慸esc鎴栬卆sc */ + private String isAsc = "asc"; + + /** 鍒嗛〉鍙傛暟鍚堢悊鍖 */ + private Boolean reasonable = true; + + public String getOrderBy() + { + if (StringUtils.isEmpty(orderByColumn)) + { + return ""; + } + return StringUtils.toUnderScoreCase(orderByColumn) + " " + isAsc; + } + + public Integer getPageNum() + { + return pageNum; + } + + public void setPageNum(Integer pageNum) + { + this.pageNum = pageNum; + } + + public Integer getPageSize() + { + return pageSize; + } + + public void setPageSize(Integer pageSize) + { + this.pageSize = pageSize; + } + + public String getOrderByColumn() + { + return orderByColumn; + } + + public void setOrderByColumn(String orderByColumn) + { + this.orderByColumn = orderByColumn; + } + + public String getIsAsc() + { + return isAsc; + } + + public void setIsAsc(String isAsc) + { + if (StringUtils.isNotEmpty(isAsc)) + { + // 鍏煎鍓嶇鎺掑簭绫诲瀷 + if ("ascending".equals(isAsc)) + { + isAsc = "asc"; + } + else if ("descending".equals(isAsc)) + { + isAsc = "desc"; + } + this.isAsc = isAsc; + } + } + + public Boolean getReasonable() + { + if (StringUtils.isNull(reasonable)) + { + return Boolean.TRUE; + } + return reasonable; + } + + public void setReasonable(Boolean reasonable) + { + this.reasonable = reasonable; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/core/page/TableDataInfo.java b/evo-admin/src/main/java/com/evo/common/core/page/TableDataInfo.java new file mode 100644 index 0000000..46a2d102 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/core/page/TableDataInfo.java @@ -0,0 +1,85 @@ +package com.evo.common.core.page; + +import java.io.Serializable; +import java.util.List; + +/** + * 琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄 + * + * @author evo + */ +public class TableDataInfo implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 鎬昏褰曟暟 */ + private long total; + + /** 鍒楄〃鏁版嵁 */ + private List rows; + + /** 娑堟伅鐘舵佺爜 */ + private int code; + + /** 娑堟伅鍐呭 */ + private String msg; + + /** + * 琛ㄦ牸鏁版嵁瀵硅薄 + */ + public TableDataInfo() + { + } + + /** + * 鍒嗛〉 + * + * @param list 鍒楄〃鏁版嵁 + * @param total 鎬昏褰曟暟 + */ + public TableDataInfo(List list, int total) + { + this.rows = list; + this.total = total; + } + + public long getTotal() + { + return total; + } + + public void setTotal(long total) + { + this.total = total; + } + + public List getRows() + { + return rows; + } + + public void setRows(List rows) + { + this.rows = rows; + } + + public int getCode() + { + return code; + } + + public void setCode(int code) + { + this.code = code; + } + + public String getMsg() + { + return msg; + } + + public void setMsg(String msg) + { + this.msg = msg; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/core/page/TableSupport.java b/evo-admin/src/main/java/com/evo/common/core/page/TableSupport.java new file mode 100644 index 0000000..a1d747d --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/core/page/TableSupport.java @@ -0,0 +1,56 @@ +package com.evo.common.core.page; + +import com.evo.common.core.text.Convert; +import com.evo.common.utils.ServletUtils; + +/** + * 琛ㄦ牸鏁版嵁澶勭悊 + * + * @author evo + */ +public class TableSupport +{ + /** + * 褰撳墠璁板綍璧峰绱㈠紩 + */ + public static final String PAGE_NUM = "pageNum"; + + /** + * 姣忛〉鏄剧ず璁板綍鏁 + */ + public static final String PAGE_SIZE = "pageSize"; + + /** + * 鎺掑簭鍒 + */ + public static final String ORDER_BY_COLUMN = "orderByColumn"; + + /** + * 鎺掑簭鐨勬柟鍚 "desc" 鎴栬 "asc". + */ + public static final String IS_ASC = "isAsc"; + + /** + * 鍒嗛〉鍙傛暟鍚堢悊鍖 + */ + public static final String REASONABLE = "reasonable"; + + /** + * 灏佽鍒嗛〉瀵硅薄 + */ + public static PageDomain getPageDomain() + { + PageDomain pageDomain = new PageDomain(); + pageDomain.setPageNum(Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1)); + pageDomain.setPageSize(Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10)); + pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN)); + pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC)); + pageDomain.setReasonable(ServletUtils.getParameterToBool(REASONABLE)); + return pageDomain; + } + + public static PageDomain buildPageRequest() + { + return getPageDomain(); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/core/redis/RedisCache.java b/evo-admin/src/main/java/com/evo/common/core/redis/RedisCache.java new file mode 100644 index 0000000..ff18910 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/core/redis/RedisCache.java @@ -0,0 +1,268 @@ +package com.evo.common.core.redis; + +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.BoundSetOperations; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ValueOperations; +import org.springframework.stereotype.Component; + +/** + * spring redis 宸ュ叿绫 + * + * @author evo + **/ +@SuppressWarnings(value = { "unchecked", "rawtypes" }) +@Component +public class RedisCache +{ + @Autowired + public RedisTemplate redisTemplate; + + /** + * 缂撳瓨鍩烘湰鐨勫璞★紝Integer銆丼tring銆佸疄浣撶被绛 + * + * @param key 缂撳瓨鐨勯敭鍊 + * @param value 缂撳瓨鐨勫 + */ + public void setCacheObject(final String key, final T value) + { + redisTemplate.opsForValue().set(key, value); + } + + /** + * 缂撳瓨鍩烘湰鐨勫璞★紝Integer銆丼tring銆佸疄浣撶被绛 + * + * @param key 缂撳瓨鐨勯敭鍊 + * @param value 缂撳瓨鐨勫 + * @param timeout 鏃堕棿 + * @param timeUnit 鏃堕棿棰楃矑搴 + */ + public void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit) + { + redisTemplate.opsForValue().set(key, value, timeout, timeUnit); + } + + /** + * 璁剧疆鏈夋晥鏃堕棿 + * + * @param key Redis閿 + * @param timeout 瓒呮椂鏃堕棿 + * @return true=璁剧疆鎴愬姛锛沠alse=璁剧疆澶辫触 + */ + public boolean expire(final String key, final long timeout) + { + return expire(key, timeout, TimeUnit.SECONDS); + } + + /** + * 璁剧疆鏈夋晥鏃堕棿 + * + * @param key Redis閿 + * @param timeout 瓒呮椂鏃堕棿 + * @param unit 鏃堕棿鍗曚綅 + * @return true=璁剧疆鎴愬姛锛沠alse=璁剧疆澶辫触 + */ + public boolean expire(final String key, final long timeout, final TimeUnit unit) + { + return redisTemplate.expire(key, timeout, unit); + } + + /** + * 鑾峰彇鏈夋晥鏃堕棿 + * + * @param key Redis閿 + * @return 鏈夋晥鏃堕棿 + */ + public long getExpire(final String key) + { + return redisTemplate.getExpire(key); + } + + /** + * 鍒ゆ柇 key鏄惁瀛樺湪 + * + * @param key 閿 + * @return true 瀛樺湪 false涓嶅瓨鍦 + */ + public Boolean hasKey(String key) + { + return redisTemplate.hasKey(key); + } + + /** + * 鑾峰緱缂撳瓨鐨勫熀鏈璞° + * + * @param key 缂撳瓨閿 + * @return 缂撳瓨閿煎搴旂殑鏁版嵁 + */ + public T getCacheObject(final String key) + { + ValueOperations operation = redisTemplate.opsForValue(); + return operation.get(key); + } + + /** + * 鍒犻櫎鍗曚釜瀵硅薄 + * + * @param key + */ + public boolean deleteObject(final String key) + { + return redisTemplate.delete(key); + } + + /** + * 鍒犻櫎闆嗗悎瀵硅薄 + * + * @param collection 澶氫釜瀵硅薄 + * @return + */ + public boolean deleteObject(final Collection collection) + { + return redisTemplate.delete(collection) > 0; + } + + /** + * 缂撳瓨List鏁版嵁 + * + * @param key 缂撳瓨鐨勯敭鍊 + * @param dataList 寰呯紦瀛樼殑List鏁版嵁 + * @return 缂撳瓨鐨勫璞 + */ + public long setCacheList(final String key, final List dataList) + { + Long count = redisTemplate.opsForList().rightPushAll(key, dataList); + return count == null ? 0 : count; + } + + /** + * 鑾峰緱缂撳瓨鐨刲ist瀵硅薄 + * + * @param key 缂撳瓨鐨勯敭鍊 + * @return 缂撳瓨閿煎搴旂殑鏁版嵁 + */ + public List getCacheList(final String key) + { + return redisTemplate.opsForList().range(key, 0, -1); + } + + /** + * 缂撳瓨Set + * + * @param key 缂撳瓨閿 + * @param dataSet 缂撳瓨鐨勬暟鎹 + * @return 缂撳瓨鏁版嵁鐨勫璞 + */ + public BoundSetOperations setCacheSet(final String key, final Set dataSet) + { + BoundSetOperations setOperation = redisTemplate.boundSetOps(key); + Iterator it = dataSet.iterator(); + while (it.hasNext()) + { + setOperation.add(it.next()); + } + return setOperation; + } + + /** + * 鑾峰緱缂撳瓨鐨剆et + * + * @param key + * @return + */ + public Set getCacheSet(final String key) + { + return redisTemplate.opsForSet().members(key); + } + + /** + * 缂撳瓨Map + * + * @param key + * @param dataMap + */ + public void setCacheMap(final String key, final Map dataMap) + { + if (dataMap != null) { + redisTemplate.opsForHash().putAll(key, dataMap); + } + } + + /** + * 鑾峰緱缂撳瓨鐨凪ap + * + * @param key + * @return + */ + public Map getCacheMap(final String key) + { + return redisTemplate.opsForHash().entries(key); + } + + /** + * 寰Hash涓瓨鍏ユ暟鎹 + * + * @param key Redis閿 + * @param hKey Hash閿 + * @param value 鍊 + */ + public void setCacheMapValue(final String key, final String hKey, final T value) + { + redisTemplate.opsForHash().put(key, hKey, value); + } + + /** + * 鑾峰彇Hash涓殑鏁版嵁 + * + * @param key Redis閿 + * @param hKey Hash閿 + * @return Hash涓殑瀵硅薄 + */ + public T getCacheMapValue(final String key, final String hKey) + { + HashOperations opsForHash = redisTemplate.opsForHash(); + return opsForHash.get(key, hKey); + } + + /** + * 鑾峰彇澶氫釜Hash涓殑鏁版嵁 + * + * @param key Redis閿 + * @param hKeys Hash閿泦鍚 + * @return Hash瀵硅薄闆嗗悎 + */ + public List getMultiCacheMapValue(final String key, final Collection hKeys) + { + return redisTemplate.opsForHash().multiGet(key, hKeys); + } + + /** + * 鍒犻櫎Hash涓殑鏌愭潯鏁版嵁 + * + * @param key Redis閿 + * @param hKey Hash閿 + * @return 鏄惁鎴愬姛 + */ + public boolean deleteCacheMapValue(final String key, final String hKey) + { + return redisTemplate.opsForHash().delete(key, hKey) > 0; + } + + /** + * 鑾峰緱缂撳瓨鐨勫熀鏈璞″垪琛 + * + * @param pattern 瀛楃涓插墠缂 + * @return 瀵硅薄鍒楄〃 + */ + public Collection keys(final String pattern) + { + return redisTemplate.keys(pattern); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/core/text/CharsetKit.java b/evo-admin/src/main/java/com/evo/common/core/text/CharsetKit.java new file mode 100644 index 0000000..84c5500 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/core/text/CharsetKit.java @@ -0,0 +1,86 @@ +package com.evo.common.core.text; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import com.evo.common.utils.StringUtils; + +/** + * 瀛楃闆嗗伐鍏风被 + * + * @author evo + */ +public class CharsetKit +{ + /** ISO-8859-1 */ + public static final String ISO_8859_1 = "ISO-8859-1"; + /** UTF-8 */ + public static final String UTF_8 = "UTF-8"; + /** GBK */ + public static final String GBK = "GBK"; + + /** ISO-8859-1 */ + public static final Charset CHARSET_ISO_8859_1 = Charset.forName(ISO_8859_1); + /** UTF-8 */ + public static final Charset CHARSET_UTF_8 = Charset.forName(UTF_8); + /** GBK */ + public static final Charset CHARSET_GBK = Charset.forName(GBK); + + /** + * 杞崲涓篊harset瀵硅薄 + * + * @param charset 瀛楃闆嗭紝涓虹┖鍒欒繑鍥為粯璁ゅ瓧绗﹂泦 + * @return Charset + */ + public static Charset charset(String charset) + { + return StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset); + } + + /** + * 杞崲瀛楃涓茬殑瀛楃闆嗙紪鐮 + * + * @param source 瀛楃涓 + * @param srcCharset 婧愬瓧绗﹂泦锛岄粯璁SO-8859-1 + * @param destCharset 鐩爣瀛楃闆嗭紝榛樿UTF-8 + * @return 杞崲鍚庣殑瀛楃闆 + */ + public static String convert(String source, String srcCharset, String destCharset) + { + return convert(source, Charset.forName(srcCharset), Charset.forName(destCharset)); + } + + /** + * 杞崲瀛楃涓茬殑瀛楃闆嗙紪鐮 + * + * @param source 瀛楃涓 + * @param srcCharset 婧愬瓧绗﹂泦锛岄粯璁SO-8859-1 + * @param destCharset 鐩爣瀛楃闆嗭紝榛樿UTF-8 + * @return 杞崲鍚庣殑瀛楃闆 + */ + public static String convert(String source, Charset srcCharset, Charset destCharset) + { + if (null == srcCharset) + { + srcCharset = StandardCharsets.ISO_8859_1; + } + + if (null == destCharset) + { + destCharset = StandardCharsets.UTF_8; + } + + if (StringUtils.isEmpty(source) || srcCharset.equals(destCharset)) + { + return source; + } + return new String(source.getBytes(srcCharset), destCharset); + } + + /** + * @return 绯荤粺瀛楃闆嗙紪鐮 + */ + public static String systemCharset() + { + return Charset.defaultCharset().name(); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/core/text/Convert.java b/evo-admin/src/main/java/com/evo/common/core/text/Convert.java new file mode 100644 index 0000000..3855e61 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/core/text/Convert.java @@ -0,0 +1,1010 @@ +package com.evo.common.core.text; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.RoundingMode; +import java.nio.ByteBuffer; +import java.nio.charset.Charset; +import java.text.NumberFormat; +import java.util.Set; +import com.evo.common.utils.StringUtils; +import org.apache.commons.lang3.ArrayUtils; + +/** + * 绫诲瀷杞崲鍣 + * + * @author evo + */ +public class Convert +{ + /** + * 杞崲涓哄瓧绗︿覆
+ * 濡傛灉缁欏畾鐨勫间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊 + * @return 缁撴灉 + */ + public static String toStr(Object value, String defaultValue) + { + if (null == value) + { + return defaultValue; + } + if (value instanceof String) + { + return (String) value; + } + return value.toString(); + } + + /** + * 杞崲涓哄瓧绗︿覆
+ * 濡傛灉缁欏畾鐨勫间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊null
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static String toStr(Object value) + { + return toStr(value, null); + } + + /** + * 杞崲涓哄瓧绗
+ * 濡傛灉缁欏畾鐨勫间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊 + * @return 缁撴灉 + */ + public static Character toChar(Object value, Character defaultValue) + { + if (null == value) + { + return defaultValue; + } + if (value instanceof Character) + { + return (Character) value; + } + + final String valueStr = toStr(value, null); + return StringUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0); + } + + /** + * 杞崲涓哄瓧绗
+ * 濡傛灉缁欏畾鐨勫间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊null
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Character toChar(Object value) + { + return toChar(value, null); + } + + /** + * 杞崲涓篵yte
+ * 濡傛灉缁欏畾鐨勫间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊 + * @return 缁撴灉 + */ + public static Byte toByte(Object value, Byte defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Byte) + { + return (Byte) value; + } + if (value instanceof Number) + { + return ((Number) value).byteValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Byte.parseByte(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 杞崲涓篵yte
+ * 濡傛灉缁欏畾鐨勫间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊null
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Byte toByte(Object value) + { + return toByte(value, null); + } + + /** + * 杞崲涓篠hort
+ * 濡傛灉缁欏畾鐨勫间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊 + * @return 缁撴灉 + */ + public static Short toShort(Object value, Short defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Short) + { + return (Short) value; + } + if (value instanceof Number) + { + return ((Number) value).shortValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Short.parseShort(valueStr.trim()); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 杞崲涓篠hort
+ * 濡傛灉缁欏畾鐨勫间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊null
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Short toShort(Object value) + { + return toShort(value, null); + } + + /** + * 杞崲涓篘umber
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊 + * @return 缁撴灉 + */ + public static Number toNumber(Object value, Number defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Number) + { + return (Number) value; + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return NumberFormat.getInstance().parse(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 杞崲涓篘umber
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊null
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Number toNumber(Object value) + { + return toNumber(value, null); + } + + /** + * 杞崲涓篿nt
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊 + * @return 缁撴灉 + */ + public static Integer toInt(Object value, Integer defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Integer) + { + return (Integer) value; + } + if (value instanceof Number) + { + return ((Number) value).intValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Integer.parseInt(valueStr.trim()); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 杞崲涓篿nt
+ * 濡傛灉缁欏畾鐨勫间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊null
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Integer toInt(Object value) + { + return toInt(value, null); + } + + /** + * 杞崲涓篒nteger鏁扮粍
+ * + * @param str 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Integer[] toIntArray(String str) + { + return toIntArray(",", str); + } + + /** + * 杞崲涓篖ong鏁扮粍
+ * + * @param str 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Long[] toLongArray(String str) + { + return toLongArray(",", str); + } + + /** + * 杞崲涓篒nteger鏁扮粍
+ * + * @param split 鍒嗛殧绗 + * @param split 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Integer[] toIntArray(String split, String str) + { + if (StringUtils.isEmpty(str)) + { + return new Integer[] {}; + } + String[] arr = str.split(split); + final Integer[] ints = new Integer[arr.length]; + for (int i = 0; i < arr.length; i++) + { + final Integer v = toInt(arr[i], 0); + ints[i] = v; + } + return ints; + } + + /** + * 杞崲涓篖ong鏁扮粍
+ * + * @param split 鍒嗛殧绗 + * @param str 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Long[] toLongArray(String split, String str) + { + if (StringUtils.isEmpty(str)) + { + return new Long[] {}; + } + String[] arr = str.split(split); + final Long[] longs = new Long[arr.length]; + for (int i = 0; i < arr.length; i++) + { + final Long v = toLong(arr[i], null); + longs[i] = v; + } + return longs; + } + + /** + * 杞崲涓篠tring鏁扮粍
+ * + * @param str 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static String[] toStrArray(String str) + { + if (StringUtils.isEmpty(str)) + { + return new String[] {}; + } + return toStrArray(",", str); + } + + /** + * 杞崲涓篠tring鏁扮粍
+ * + * @param split 鍒嗛殧绗 + * @param split 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static String[] toStrArray(String split, String str) + { + return str.split(split); + } + + /** + * 杞崲涓簂ong
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊 + * @return 缁撴灉 + */ + public static Long toLong(Object value, Long defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Long) + { + return (Long) value; + } + if (value instanceof Number) + { + return ((Number) value).longValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + // 鏀寔绉戝璁℃暟娉 + return new BigDecimal(valueStr.trim()).longValue(); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 杞崲涓簂ong
+ * 濡傛灉缁欏畾鐨勫间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊null
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Long toLong(Object value) + { + return toLong(value, null); + } + + /** + * 杞崲涓篸ouble
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊 + * @return 缁撴灉 + */ + public static Double toDouble(Object value, Double defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Double) + { + return (Double) value; + } + if (value instanceof Number) + { + return ((Number) value).doubleValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + // 鏀寔绉戝璁℃暟娉 + return new BigDecimal(valueStr.trim()).doubleValue(); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 杞崲涓篸ouble
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊null
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Double toDouble(Object value) + { + return toDouble(value, null); + } + + /** + * 杞崲涓篎loat
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊 + * @return 缁撴灉 + */ + public static Float toFloat(Object value, Float defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Float) + { + return (Float) value; + } + if (value instanceof Number) + { + return ((Number) value).floatValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Float.parseFloat(valueStr.trim()); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 杞崲涓篎loat
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊null
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Float toFloat(Object value) + { + return toFloat(value, null); + } + + /** + * 杞崲涓篵oolean
+ * String鏀寔鐨勫间负锛歵rue銆乫alse銆亂es銆乷k銆乶o锛1,0 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊 + * @return 缁撴灉 + */ + public static Boolean toBool(Object value, Boolean defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Boolean) + { + return (Boolean) value; + } + String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + valueStr = valueStr.trim().toLowerCase(); + switch (valueStr) + { + case "true": + case "yes": + case "ok": + case "1": + return true; + case "false": + case "no": + case "0": + return false; + default: + return defaultValue; + } + } + + /** + * 杞崲涓篵oolean
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊null
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Boolean toBool(Object value) + { + return toBool(value, null); + } + + /** + * 杞崲涓篍num瀵硅薄
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * + * @param clazz Enum鐨凜lass + * @param value 鍊 + * @param defaultValue 榛樿鍊 + * @return Enum + */ + public static > E toEnum(Class clazz, Object value, E defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (clazz.isAssignableFrom(value.getClass())) + { + @SuppressWarnings("unchecked") + E myE = (E) value; + return myE; + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Enum.valueOf(clazz, valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 杞崲涓篍num瀵硅薄
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊null
+ * + * @param clazz Enum鐨凜lass + * @param value 鍊 + * @return Enum + */ + public static > E toEnum(Class clazz, Object value) + { + return toEnum(clazz, value, null); + } + + /** + * 杞崲涓築igInteger
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊 + * @return 缁撴灉 + */ + public static BigInteger toBigInteger(Object value, BigInteger defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof BigInteger) + { + return (BigInteger) value; + } + if (value instanceof Long) + { + return BigInteger.valueOf((Long) value); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return new BigInteger(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 杞崲涓築igInteger
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊null
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static BigInteger toBigInteger(Object value) + { + return toBigInteger(value, null); + } + + /** + * 杞崲涓築igDecimal
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊 + * @return 缁撴灉 + */ + public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof BigDecimal) + { + return (BigDecimal) value; + } + if (value instanceof Long) + { + return new BigDecimal((Long) value); + } + if (value instanceof Double) + { + return BigDecimal.valueOf((Double) value); + } + if (value instanceof Integer) + { + return new BigDecimal((Integer) value); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return new BigDecimal(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 杞崲涓築igDecimal
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static BigDecimal toBigDecimal(Object value) + { + return toBigDecimal(value, null); + } + + /** + * 灏嗗璞¤浆涓哄瓧绗︿覆
+ * 1銆丅yte鏁扮粍鍜孊yteBuffer浼氳杞崲涓哄搴斿瓧绗︿覆鐨勬暟缁 2銆佸璞℃暟缁勪細璋冪敤Arrays.toString鏂规硶 + * + * @param obj 瀵硅薄 + * @return 瀛楃涓 + */ + public static String utf8Str(Object obj) + { + return str(obj, CharsetKit.CHARSET_UTF_8); + } + + /** + * 灏嗗璞¤浆涓哄瓧绗︿覆
+ * 1銆丅yte鏁扮粍鍜孊yteBuffer浼氳杞崲涓哄搴斿瓧绗︿覆鐨勬暟缁 2銆佸璞℃暟缁勪細璋冪敤Arrays.toString鏂规硶 + * + * @param obj 瀵硅薄 + * @param charsetName 瀛楃闆 + * @return 瀛楃涓 + */ + public static String str(Object obj, String charsetName) + { + return str(obj, Charset.forName(charsetName)); + } + + /** + * 灏嗗璞¤浆涓哄瓧绗︿覆
+ * 1銆丅yte鏁扮粍鍜孊yteBuffer浼氳杞崲涓哄搴斿瓧绗︿覆鐨勬暟缁 2銆佸璞℃暟缁勪細璋冪敤Arrays.toString鏂规硶 + * + * @param obj 瀵硅薄 + * @param charset 瀛楃闆 + * @return 瀛楃涓 + */ + public static String str(Object obj, Charset charset) + { + if (null == obj) + { + return null; + } + + if (obj instanceof String) + { + return (String) obj; + } + else if (obj instanceof byte[]) + { + return str((byte[]) obj, charset); + } + else if (obj instanceof Byte[]) + { + byte[] bytes = ArrayUtils.toPrimitive((Byte[]) obj); + return str(bytes, charset); + } + else if (obj instanceof ByteBuffer) + { + return str((ByteBuffer) obj, charset); + } + return obj.toString(); + } + + /** + * 灏哹yte鏁扮粍杞负瀛楃涓 + * + * @param bytes byte鏁扮粍 + * @param charset 瀛楃闆 + * @return 瀛楃涓 + */ + public static String str(byte[] bytes, String charset) + { + return str(bytes, StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset)); + } + + /** + * 瑙g爜瀛楄妭鐮 + * + * @param data 瀛楃涓 + * @param charset 瀛楃闆嗭紝濡傛灉姝ゅ瓧娈典负绌猴紝鍒欒В鐮佺殑缁撴灉鍙栧喅浜庡钩鍙 + * @return 瑙g爜鍚庣殑瀛楃涓 + */ + public static String str(byte[] data, Charset charset) + { + if (data == null) + { + return null; + } + + if (null == charset) + { + return new String(data); + } + return new String(data, charset); + } + + /** + * 灏嗙紪鐮佺殑byteBuffer鏁版嵁杞崲涓哄瓧绗︿覆 + * + * @param data 鏁版嵁 + * @param charset 瀛楃闆嗭紝濡傛灉涓虹┖浣跨敤褰撳墠绯荤粺瀛楃闆 + * @return 瀛楃涓 + */ + public static String str(ByteBuffer data, String charset) + { + if (data == null) + { + return null; + } + + return str(data, Charset.forName(charset)); + } + + /** + * 灏嗙紪鐮佺殑byteBuffer鏁版嵁杞崲涓哄瓧绗︿覆 + * + * @param data 鏁版嵁 + * @param charset 瀛楃闆嗭紝濡傛灉涓虹┖浣跨敤褰撳墠绯荤粺瀛楃闆 + * @return 瀛楃涓 + */ + public static String str(ByteBuffer data, Charset charset) + { + if (null == charset) + { + charset = Charset.defaultCharset(); + } + return charset.decode(data).toString(); + } + + // ----------------------------------------------------------------------- 鍏ㄨ鍗婅杞崲 + /** + * 鍗婅杞叏瑙 + * + * @param input String. + * @return 鍏ㄨ瀛楃涓. + */ + public static String toSBC(String input) + { + return toSBC(input, null); + } + + /** + * 鍗婅杞叏瑙 + * + * @param input String + * @param notConvertSet 涓嶆浛鎹㈢殑瀛楃闆嗗悎 + * @return 鍏ㄨ瀛楃涓. + */ + public static String toSBC(String input, Set notConvertSet) + { + char[] c = input.toCharArray(); + for (int i = 0; i < c.length; i++) + { + if (null != notConvertSet && notConvertSet.contains(c[i])) + { + // 璺宠繃涓嶆浛鎹㈢殑瀛楃 + continue; + } + + if (c[i] == ' ') + { + c[i] = '\u3000'; + } + else if (c[i] < '\177') + { + c[i] = (char) (c[i] + 65248); + + } + } + return new String(c); + } + + /** + * 鍏ㄨ杞崐瑙 + * + * @param input String. + * @return 鍗婅瀛楃涓 + */ + public static String toDBC(String input) + { + return toDBC(input, null); + } + + /** + * 鏇挎崲鍏ㄨ涓哄崐瑙 + * + * @param text 鏂囨湰 + * @param notConvertSet 涓嶆浛鎹㈢殑瀛楃闆嗗悎 + * @return 鏇挎崲鍚庣殑瀛楃 + */ + public static String toDBC(String text, Set notConvertSet) + { + char[] c = text.toCharArray(); + for (int i = 0; i < c.length; i++) + { + if (null != notConvertSet && notConvertSet.contains(c[i])) + { + // 璺宠繃涓嶆浛鎹㈢殑瀛楃 + continue; + } + + if (c[i] == '\u3000') + { + c[i] = ' '; + } + else if (c[i] > '\uFF00' && c[i] < '\uFF5F') + { + c[i] = (char) (c[i] - 65248); + } + } + String returnString = new String(c); + + return returnString; + } + + /** + * 鏁板瓧閲戦澶у啓杞崲 鍏堝啓涓畬鏁寸殑鐒跺悗灏嗗闆舵嬀鏇挎崲鎴愰浂 + * + * @param n 鏁板瓧 + * @return 涓枃澶у啓鏁板瓧 + */ + public static String digitUppercase(double n) + { + String[] fraction = { "瑙", "鍒" }; + String[] digit = { "闆", "澹", "璐", "鍙", "鑲", "浼", "闄", "鏌", "鎹", "鐜" }; + String[][] unit = { { "鍏", "涓", "浜" }, { "", "鎷", "浣", "浠" } }; + + String head = n < 0 ? "璐" : ""; + n = Math.abs(n); + + String s = ""; + for (int i = 0; i < fraction.length; i++) + { + // 浼樺寲double璁$畻绮惧害涓㈠け闂 + BigDecimal nNum = new BigDecimal(n); + BigDecimal decimal = new BigDecimal(10); + BigDecimal scale = nNum.multiply(decimal).setScale(2, RoundingMode.HALF_EVEN); + double d = scale.doubleValue(); + s += (digit[(int) (Math.floor(d * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(闆.)+", ""); + } + if (s.length() < 1) + { + s = "鏁"; + } + int integerPart = (int) Math.floor(n); + + for (int i = 0; i < unit[0].length && integerPart > 0; i++) + { + String p = ""; + for (int j = 0; j < unit[1].length && n > 0; j++) + { + p = digit[integerPart % 10] + unit[1][j] + p; + integerPart = integerPart / 10; + } + s = p.replaceAll("(闆.)*闆$", "").replaceAll("^$", "闆") + unit[0][i] + s; + } + return head + s.replaceAll("(闆.)*闆跺厓", "鍏").replaceFirst("(闆.)+", "").replaceAll("(闆.)+", "闆").replaceAll("^鏁$", "闆跺厓鏁"); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/core/text/StrFormatter.java b/evo-admin/src/main/java/com/evo/common/core/text/StrFormatter.java new file mode 100644 index 0000000..4fd85e7 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/core/text/StrFormatter.java @@ -0,0 +1,92 @@ +package com.evo.common.core.text; + +import com.evo.common.utils.StringUtils; + +/** + * 瀛楃涓叉牸寮忓寲 + * + * @author evo + */ +public class StrFormatter +{ + public static final String EMPTY_JSON = "{}"; + public static final char C_BACKSLASH = '\\'; + public static final char C_DELIM_START = '{'; + public static final char C_DELIM_END = '}'; + + /** + * 鏍煎紡鍖栧瓧绗︿覆
+ * 姝ゆ柟娉曞彧鏄畝鍗曞皢鍗犱綅绗 {} 鎸夌収椤哄簭鏇挎崲涓哄弬鏁
+ * 濡傛灉鎯宠緭鍑 {} 浣跨敤 \\杞箟 { 鍗冲彲锛屽鏋滄兂杈撳嚭 {} 涔嬪墠鐨 \ 浣跨敤鍙岃浆涔夌 \\\\ 鍗冲彲
+ * 渚嬶細
+ * 閫氬父浣跨敤锛歠ormat("this is {} for {}", "a", "b") -> this is a for b
+ * 杞箟{}锛 format("this is \\{} for {}", "a", "b") -> this is \{} for a
+ * 杞箟\锛 format("this is \\\\{} for {}", "a", "b") -> this is \a for b
+ * + * @param strPattern 瀛楃涓叉ā鏉 + * @param argArray 鍙傛暟鍒楄〃 + * @return 缁撴灉 + */ + public static String format(final String strPattern, final Object... argArray) + { + if (StringUtils.isEmpty(strPattern) || StringUtils.isEmpty(argArray)) + { + return strPattern; + } + final int strPatternLength = strPattern.length(); + + // 鍒濆鍖栧畾涔夊ソ鐨勯暱搴︿互鑾峰緱鏇村ソ鐨勬ц兘 + StringBuilder sbuf = new StringBuilder(strPatternLength + 50); + + int handledPosition = 0; + int delimIndex;// 鍗犱綅绗︽墍鍦ㄤ綅缃 + for (int argIndex = 0; argIndex < argArray.length; argIndex++) + { + delimIndex = strPattern.indexOf(EMPTY_JSON, handledPosition); + if (delimIndex == -1) + { + if (handledPosition == 0) + { + return strPattern; + } + else + { // 瀛楃涓叉ā鏉垮墿浣欓儴鍒嗕笉鍐嶅寘鍚崰浣嶇锛屽姞鍏ュ墿浣欓儴鍒嗗悗杩斿洖缁撴灉 + sbuf.append(strPattern, handledPosition, strPatternLength); + return sbuf.toString(); + } + } + else + { + if (delimIndex > 0 && strPattern.charAt(delimIndex - 1) == C_BACKSLASH) + { + if (delimIndex > 1 && strPattern.charAt(delimIndex - 2) == C_BACKSLASH) + { + // 杞箟绗︿箣鍓嶈繕鏈変竴涓浆涔夌锛屽崰浣嶇渚濇棫鏈夋晥 + sbuf.append(strPattern, handledPosition, delimIndex - 1); + sbuf.append(Convert.utf8Str(argArray[argIndex])); + handledPosition = delimIndex + 2; + } + else + { + // 鍗犱綅绗﹁杞箟 + argIndex--; + sbuf.append(strPattern, handledPosition, delimIndex - 1); + sbuf.append(C_DELIM_START); + handledPosition = delimIndex + 1; + } + } + else + { + // 姝e父鍗犱綅绗 + sbuf.append(strPattern, handledPosition, delimIndex); + sbuf.append(Convert.utf8Str(argArray[argIndex])); + handledPosition = delimIndex + 2; + } + } + } + // 鍔犲叆鏈鍚庝竴涓崰浣嶇鍚庢墍鏈夌殑瀛楃 + sbuf.append(strPattern, handledPosition, strPattern.length()); + + return sbuf.toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/enums/BusinessStatus.java b/evo-admin/src/main/java/com/evo/common/enums/BusinessStatus.java new file mode 100644 index 0000000..3222533 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/enums/BusinessStatus.java @@ -0,0 +1,20 @@ +package com.evo.common.enums; + +/** + * 鎿嶄綔鐘舵 + * + * @author evo + * + */ +public enum BusinessStatus +{ + /** + * 鎴愬姛 + */ + SUCCESS, + + /** + * 澶辫触 + */ + FAIL, +} diff --git a/evo-admin/src/main/java/com/evo/common/enums/BusinessType.java b/evo-admin/src/main/java/com/evo/common/enums/BusinessType.java new file mode 100644 index 0000000..6b7d3c0 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/enums/BusinessType.java @@ -0,0 +1,59 @@ +package com.evo.common.enums; + +/** + * 涓氬姟鎿嶄綔绫诲瀷 + * + * @author evo + */ +public enum BusinessType +{ + /** + * 鍏跺畠 + */ + OTHER, + + /** + * 鏂板 + */ + INSERT, + + /** + * 淇敼 + */ + UPDATE, + + /** + * 鍒犻櫎 + */ + DELETE, + + /** + * 鎺堟潈 + */ + GRANT, + + /** + * 瀵煎嚭 + */ + EXPORT, + + /** + * 瀵煎叆 + */ + IMPORT, + + /** + * 寮洪 + */ + FORCE, + + /** + * 鐢熸垚浠g爜 + */ + GENCODE, + + /** + * 娓呯┖鏁版嵁 + */ + CLEAN, +} diff --git a/evo-admin/src/main/java/com/evo/common/enums/DataSourceType.java b/evo-admin/src/main/java/com/evo/common/enums/DataSourceType.java new file mode 100644 index 0000000..578705d --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/enums/DataSourceType.java @@ -0,0 +1,19 @@ +package com.evo.common.enums; + +/** + * 鏁版嵁婧 + * + * @author evo + */ +public enum DataSourceType +{ + /** + * 涓诲簱 + */ + MASTER, + + /** + * 浠庡簱 + */ + SLAVE +} diff --git a/evo-admin/src/main/java/com/evo/common/enums/DesensitizedType.java b/evo-admin/src/main/java/com/evo/common/enums/DesensitizedType.java new file mode 100644 index 0000000..8878f86 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/enums/DesensitizedType.java @@ -0,0 +1,59 @@ +package com.evo.common.enums; + +import java.util.function.Function; +import com.evo.common.utils.DesensitizedUtil; + +/** + * 鑴辨晱绫诲瀷 + * + * @author evo + */ +public enum DesensitizedType +{ + /** + * 濮撳悕锛岀2浣嶆槦鍙锋浛鎹 + */ + USERNAME(s -> s.replaceAll("(\\S)\\S(\\S*)", "$1*$2")), + + /** + * 瀵嗙爜锛屽叏閮ㄥ瓧绗﹂兘鐢*浠f浛 + */ + PASSWORD(DesensitizedUtil::password), + + /** + * 韬唤璇侊紝涓棿10浣嶆槦鍙锋浛鎹 + */ + ID_CARD(s -> s.replaceAll("(\\d{4})\\d{10}(\\d{4})", "$1** **** ****$2")), + + /** + * 鎵嬫満鍙凤紝涓棿4浣嶆槦鍙锋浛鎹 + */ + PHONE(s -> s.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2")), + + /** + * 鐢靛瓙閭锛屼粎鏄剧ず绗竴涓瓧姣嶅拰@鍚庨潰鐨勫湴鍧鏄剧ず锛屽叾浠栨槦鍙锋浛鎹 + */ + EMAIL(s -> s.replaceAll("(^.)[^@]*(@.*$)", "$1****$2")), + + /** + * 閾惰鍗″彿锛屼繚鐣欐渶鍚4浣嶏紝鍏朵粬鏄熷彿鏇挎崲 + */ + BANK_CARD(s -> s.replaceAll("\\d{15}(\\d{3})", "**** **** **** **** $1")), + + /** + * 杞︾墝鍙风爜锛屽寘鍚櫘閫氳溅杈嗐佹柊鑳芥簮杞﹁締 + */ + CAR_LICENSE(DesensitizedUtil::carLicense); + + private final Function desensitizer; + + DesensitizedType(Function desensitizer) + { + this.desensitizer = desensitizer; + } + + public Function desensitizer() + { + return desensitizer; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/enums/HttpMethod.java b/evo-admin/src/main/java/com/evo/common/enums/HttpMethod.java new file mode 100644 index 0000000..26d2e77 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/enums/HttpMethod.java @@ -0,0 +1,36 @@ +package com.evo.common.enums; + +import java.util.HashMap; +import java.util.Map; +import org.springframework.lang.Nullable; + +/** + * 璇锋眰鏂瑰紡 + * + * @author evo + */ +public enum HttpMethod +{ + GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE; + + private static final Map mappings = new HashMap<>(16); + + static + { + for (HttpMethod httpMethod : values()) + { + mappings.put(httpMethod.name(), httpMethod); + } + } + + @Nullable + public static HttpMethod resolve(@Nullable String method) + { + return (method != null ? mappings.get(method) : null); + } + + public boolean matches(String method) + { + return (this == resolve(method)); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/enums/LimitType.java b/evo-admin/src/main/java/com/evo/common/enums/LimitType.java new file mode 100644 index 0000000..86b7c6a --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/enums/LimitType.java @@ -0,0 +1,20 @@ +package com.evo.common.enums; + +/** + * 闄愭祦绫诲瀷 + * + * @author evo + */ + +public enum LimitType +{ + /** + * 榛樿绛栫暐鍏ㄥ眬闄愭祦 + */ + DEFAULT, + + /** + * 鏍规嵁璇锋眰鑰匢P杩涜闄愭祦 + */ + IP +} diff --git a/evo-admin/src/main/java/com/evo/common/enums/OperatorType.java b/evo-admin/src/main/java/com/evo/common/enums/OperatorType.java new file mode 100644 index 0000000..5dd84ea --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/enums/OperatorType.java @@ -0,0 +1,24 @@ +package com.evo.common.enums; + +/** + * 鎿嶄綔浜虹被鍒 + * + * @author evo + */ +public enum OperatorType +{ + /** + * 鍏跺畠 + */ + OTHER, + + /** + * 鍚庡彴鐢ㄦ埛 + */ + MANAGE, + + /** + * 鎵嬫満绔敤鎴 + */ + MOBILE +} diff --git a/evo-admin/src/main/java/com/evo/common/enums/UserStatus.java b/evo-admin/src/main/java/com/evo/common/enums/UserStatus.java new file mode 100644 index 0000000..17c6474 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/enums/UserStatus.java @@ -0,0 +1,30 @@ +package com.evo.common.enums; + +/** + * 鐢ㄦ埛鐘舵 + * + * @author evo + */ +public enum UserStatus +{ + OK("0", "姝e父"), DISABLE("1", "鍋滅敤"), DELETED("2", "鍒犻櫎"); + + private final String code; + private final String info; + + UserStatus(String code, String info) + { + this.code = code; + this.info = info; + } + + public String getCode() + { + return code; + } + + public String getInfo() + { + return info; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/exception/CustomException.java b/evo-admin/src/main/java/com/evo/common/exception/CustomException.java new file mode 100644 index 0000000..2f42fd9 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/exception/CustomException.java @@ -0,0 +1,43 @@ +package com.evo.common.exception; + +/** + * 鑷畾涔夊紓甯 + * + * @author ruoyi + */ +public class CustomException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + private Integer code; + + private String message; + + public CustomException(String message) + { + this.message = message; + } + + public CustomException(String message, Integer code) + { + this.message = message; + this.code = code; + } + + public CustomException(String message, Throwable e) + { + super(message, e); + this.message = message; + } + + @Override + public String getMessage() + { + return message; + } + + public Integer getCode() + { + return code; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/exception/DemoModeException.java b/evo-admin/src/main/java/com/evo/common/exception/DemoModeException.java new file mode 100644 index 0000000..4a1d0d9 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/exception/DemoModeException.java @@ -0,0 +1,15 @@ +package com.evo.common.exception; + +/** + * 婕旂ず妯″紡寮傚父 + * + * @author evo + */ +public class DemoModeException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + public DemoModeException() + { + } +} diff --git a/evo-admin/src/main/java/com/evo/common/exception/GlobalException.java b/evo-admin/src/main/java/com/evo/common/exception/GlobalException.java new file mode 100644 index 0000000..b723744 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/exception/GlobalException.java @@ -0,0 +1,58 @@ +package com.evo.common.exception; + +/** + * 鍏ㄥ眬寮傚父 + * + * @author evo + */ +public class GlobalException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + /** + * 閿欒鎻愮ず + */ + private String message; + + /** + * 閿欒鏄庣粏锛屽唴閮ㄨ皟璇曢敊璇 + * + * 鍜 {@link CommonResult#getDetailMessage()} 涓鑷寸殑璁捐 + */ + private String detailMessage; + + /** + * 绌烘瀯閫犳柟娉曪紝閬垮厤鍙嶅簭鍒楀寲闂 + */ + public GlobalException() + { + } + + public GlobalException(String message) + { + this.message = message; + } + + public String getDetailMessage() + { + return detailMessage; + } + + public GlobalException setDetailMessage(String detailMessage) + { + this.detailMessage = detailMessage; + return this; + } + + @Override + public String getMessage() + { + return message; + } + + public GlobalException setMessage(String message) + { + this.message = message; + return this; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/exception/ServiceException.java b/evo-admin/src/main/java/com/evo/common/exception/ServiceException.java new file mode 100644 index 0000000..27496c6 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/exception/ServiceException.java @@ -0,0 +1,74 @@ +package com.evo.common.exception; + +/** + * 涓氬姟寮傚父 + * + * @author evo + */ +public final class ServiceException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + /** + * 閿欒鐮 + */ + private Integer code; + + /** + * 閿欒鎻愮ず + */ + private String message; + + /** + * 閿欒鏄庣粏锛屽唴閮ㄨ皟璇曢敊璇 + * + * 鍜 {@link CommonResult#getDetailMessage()} 涓鑷寸殑璁捐 + */ + private String detailMessage; + + /** + * 绌烘瀯閫犳柟娉曪紝閬垮厤鍙嶅簭鍒楀寲闂 + */ + public ServiceException() + { + } + + public ServiceException(String message) + { + this.message = message; + } + + public ServiceException(String message, Integer code) + { + this.message = message; + this.code = code; + } + + public String getDetailMessage() + { + return detailMessage; + } + + @Override + public String getMessage() + { + return message; + } + + public Integer getCode() + { + return code; + } + + public ServiceException setMessage(String message) + { + this.message = message; + return this; + } + + public ServiceException setDetailMessage(String detailMessage) + { + this.detailMessage = detailMessage; + return this; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/exception/UtilException.java b/evo-admin/src/main/java/com/evo/common/exception/UtilException.java new file mode 100644 index 0000000..628847b --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/exception/UtilException.java @@ -0,0 +1,26 @@ +package com.evo.common.exception; + +/** + * 宸ュ叿绫诲紓甯 + * + * @author evo + */ +public class UtilException extends RuntimeException +{ + private static final long serialVersionUID = 8247610319171014183L; + + public UtilException(Throwable e) + { + super(e.getMessage(), e); + } + + public UtilException(String message) + { + super(message); + } + + public UtilException(String message, Throwable throwable) + { + super(message, throwable); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/exception/base/BaseException.java b/evo-admin/src/main/java/com/evo/common/exception/base/BaseException.java new file mode 100644 index 0000000..4097b25 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/exception/base/BaseException.java @@ -0,0 +1,97 @@ +package com.evo.common.exception.base; + +import com.evo.common.utils.MessageUtils; +import com.evo.common.utils.StringUtils; + +/** + * 鍩虹寮傚父 + * + * @author evo + */ +public class BaseException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + /** + * 鎵灞炴ā鍧 + */ + private String module; + + /** + * 閿欒鐮 + */ + private String code; + + /** + * 閿欒鐮佸搴旂殑鍙傛暟 + */ + private Object[] args; + + /** + * 閿欒娑堟伅 + */ + private String defaultMessage; + + public BaseException(String module, String code, Object[] args, String defaultMessage) + { + this.module = module; + this.code = code; + this.args = args; + this.defaultMessage = defaultMessage; + } + + public BaseException(String module, String code, Object[] args) + { + this(module, code, args, null); + } + + public BaseException(String module, String defaultMessage) + { + this(module, null, null, defaultMessage); + } + + public BaseException(String code, Object[] args) + { + this(null, code, args, null); + } + + public BaseException(String defaultMessage) + { + this(null, null, null, defaultMessage); + } + + @Override + public String getMessage() + { + String message = null; + if (!StringUtils.isEmpty(code)) + { + message = MessageUtils.message(code, args); + } + if (message == null) + { + message = defaultMessage; + } + return message; + } + + public String getModule() + { + return module; + } + + public String getCode() + { + return code; + } + + public Object[] getArgs() + { + return args; + } + + public String getDefaultMessage() + { + return defaultMessage; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/exception/file/FileException.java b/evo-admin/src/main/java/com/evo/common/exception/file/FileException.java new file mode 100644 index 0000000..ad02157 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/exception/file/FileException.java @@ -0,0 +1,19 @@ +package com.evo.common.exception.file; + +import com.evo.common.exception.base.BaseException; + +/** + * 鏂囦欢淇℃伅寮傚父绫 + * + * @author evo + */ +public class FileException extends BaseException +{ + private static final long serialVersionUID = 1L; + + public FileException(String code, Object[] args) + { + super("file", code, args, null); + } + +} diff --git a/evo-admin/src/main/java/com/evo/common/exception/file/FileNameLengthLimitExceededException.java b/evo-admin/src/main/java/com/evo/common/exception/file/FileNameLengthLimitExceededException.java new file mode 100644 index 0000000..9933240 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/exception/file/FileNameLengthLimitExceededException.java @@ -0,0 +1,16 @@ +package com.evo.common.exception.file; + +/** + * 鏂囦欢鍚嶇О瓒呴暱闄愬埗寮傚父绫 + * + * @author evo + */ +public class FileNameLengthLimitExceededException extends FileException +{ + private static final long serialVersionUID = 1L; + + public FileNameLengthLimitExceededException(int defaultFileNameLength) + { + super("upload.filename.exceed.length", new Object[] { defaultFileNameLength }); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/exception/file/FileSizeLimitExceededException.java b/evo-admin/src/main/java/com/evo/common/exception/file/FileSizeLimitExceededException.java new file mode 100644 index 0000000..12b6468 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/exception/file/FileSizeLimitExceededException.java @@ -0,0 +1,16 @@ +package com.evo.common.exception.file; + +/** + * 鏂囦欢鍚嶅ぇ灏忛檺鍒跺紓甯哥被 + * + * @author evo + */ +public class FileSizeLimitExceededException extends FileException +{ + private static final long serialVersionUID = 1L; + + public FileSizeLimitExceededException(long defaultMaxSize) + { + super("upload.exceed.maxSize", new Object[] { defaultMaxSize }); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/exception/file/FileUploadException.java b/evo-admin/src/main/java/com/evo/common/exception/file/FileUploadException.java new file mode 100644 index 0000000..fa3ec23 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/exception/file/FileUploadException.java @@ -0,0 +1,61 @@ +package com.evo.common.exception.file; + +import java.io.PrintStream; +import java.io.PrintWriter; + +/** + * 鏂囦欢涓婁紶寮傚父绫 + * + * @author evo + */ +public class FileUploadException extends Exception +{ + + private static final long serialVersionUID = 1L; + + private final Throwable cause; + + public FileUploadException() + { + this(null, null); + } + + public FileUploadException(final String msg) + { + this(msg, null); + } + + public FileUploadException(String msg, Throwable cause) + { + super(msg); + this.cause = cause; + } + + @Override + public void printStackTrace(PrintStream stream) + { + super.printStackTrace(stream); + if (cause != null) + { + stream.println("Caused by:"); + cause.printStackTrace(stream); + } + } + + @Override + public void printStackTrace(PrintWriter writer) + { + super.printStackTrace(writer); + if (cause != null) + { + writer.println("Caused by:"); + cause.printStackTrace(writer); + } + } + + @Override + public Throwable getCause() + { + return cause; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/exception/file/InvalidExtensionException.java b/evo-admin/src/main/java/com/evo/common/exception/file/InvalidExtensionException.java new file mode 100644 index 0000000..3e9a5b4 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/exception/file/InvalidExtensionException.java @@ -0,0 +1,80 @@ +package com.evo.common.exception.file; + +import java.util.Arrays; + +/** + * 鏂囦欢涓婁紶 璇紓甯哥被 + * + * @author evo + */ +public class InvalidExtensionException extends FileUploadException +{ + private static final long serialVersionUID = 1L; + + private String[] allowedExtension; + private String extension; + private String filename; + + public InvalidExtensionException(String[] allowedExtension, String extension, String filename) + { + super("鏂囦欢[" + filename + "]鍚庣紑[" + extension + "]涓嶆纭紝璇蜂笂浼" + Arrays.toString(allowedExtension) + "鏍煎紡"); + this.allowedExtension = allowedExtension; + this.extension = extension; + this.filename = filename; + } + + public String[] getAllowedExtension() + { + return allowedExtension; + } + + public String getExtension() + { + return extension; + } + + public String getFilename() + { + return filename; + } + + public static class InvalidImageExtensionException extends InvalidExtensionException + { + private static final long serialVersionUID = 1L; + + public InvalidImageExtensionException(String[] allowedExtension, String extension, String filename) + { + super(allowedExtension, extension, filename); + } + } + + public static class InvalidFlashExtensionException extends InvalidExtensionException + { + private static final long serialVersionUID = 1L; + + public InvalidFlashExtensionException(String[] allowedExtension, String extension, String filename) + { + super(allowedExtension, extension, filename); + } + } + + public static class InvalidMediaExtensionException extends InvalidExtensionException + { + private static final long serialVersionUID = 1L; + + public InvalidMediaExtensionException(String[] allowedExtension, String extension, String filename) + { + super(allowedExtension, extension, filename); + } + } + + public static class InvalidVideoExtensionException extends InvalidExtensionException + { + private static final long serialVersionUID = 1L; + + public InvalidVideoExtensionException(String[] allowedExtension, String extension, String filename) + { + super(allowedExtension, extension, filename); + } + } +} diff --git a/evo-admin/src/main/java/com/evo/common/exception/job/TaskException.java b/evo-admin/src/main/java/com/evo/common/exception/job/TaskException.java new file mode 100644 index 0000000..32bb85f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/exception/job/TaskException.java @@ -0,0 +1,34 @@ +package com.evo.common.exception.job; + +/** + * 璁″垝绛栫暐寮傚父 + * + * @author evo + */ +public class TaskException extends Exception +{ + private static final long serialVersionUID = 1L; + + private Code code; + + public TaskException(String msg, Code code) + { + this(msg, code, null); + } + + public TaskException(String msg, Code code, Exception nestedEx) + { + super(msg, nestedEx); + this.code = code; + } + + public Code getCode() + { + return code; + } + + public enum Code + { + TASK_EXISTS, NO_TASK_EXISTS, TASK_ALREADY_STARTED, UNKNOWN, CONFIG_ERROR, TASK_NODE_NOT_AVAILABLE + } +} diff --git a/evo-admin/src/main/java/com/evo/common/exception/user/BlackListException.java b/evo-admin/src/main/java/com/evo/common/exception/user/BlackListException.java new file mode 100644 index 0000000..ca14eb5 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/exception/user/BlackListException.java @@ -0,0 +1,16 @@ +package com.evo.common.exception.user; + +/** + * 榛戝悕鍗旾P寮傚父绫 + * + * @author evo + */ +public class BlackListException extends UserException +{ + private static final long serialVersionUID = 1L; + + public BlackListException() + { + super("login.blocked", null); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/exception/user/CaptchaException.java b/evo-admin/src/main/java/com/evo/common/exception/user/CaptchaException.java new file mode 100644 index 0000000..5712a53 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/exception/user/CaptchaException.java @@ -0,0 +1,16 @@ +package com.evo.common.exception.user; + +/** + * 楠岃瘉鐮侀敊璇紓甯哥被 + * + * @author evo + */ +public class CaptchaException extends UserException +{ + private static final long serialVersionUID = 1L; + + public CaptchaException() + { + super("user.jcaptcha.error", null); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/exception/user/CaptchaExpireException.java b/evo-admin/src/main/java/com/evo/common/exception/user/CaptchaExpireException.java new file mode 100644 index 0000000..2c512cc --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/exception/user/CaptchaExpireException.java @@ -0,0 +1,16 @@ +package com.evo.common.exception.user; + +/** + * 楠岃瘉鐮佸け鏁堝紓甯哥被 + * + * @author evo + */ +public class CaptchaExpireException extends UserException +{ + private static final long serialVersionUID = 1L; + + public CaptchaExpireException() + { + super("user.jcaptcha.expire", null); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/exception/user/UserException.java b/evo-admin/src/main/java/com/evo/common/exception/user/UserException.java new file mode 100644 index 0000000..8fdc15a --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/exception/user/UserException.java @@ -0,0 +1,18 @@ +package com.evo.common.exception.user; + +import com.evo.common.exception.base.BaseException; + +/** + * 鐢ㄦ埛淇℃伅寮傚父绫 + * + * @author evo + */ +public class UserException extends BaseException +{ + private static final long serialVersionUID = 1L; + + public UserException(String code, Object[] args) + { + super("user", code, args, null); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/exception/user/UserNotExistsException.java b/evo-admin/src/main/java/com/evo/common/exception/user/UserNotExistsException.java new file mode 100644 index 0000000..5c81982 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/exception/user/UserNotExistsException.java @@ -0,0 +1,16 @@ +package com.evo.common.exception.user; + +/** + * 鐢ㄦ埛涓嶅瓨鍦ㄥ紓甯哥被 + * + * @author evo + */ +public class UserNotExistsException extends UserException +{ + private static final long serialVersionUID = 1L; + + public UserNotExistsException() + { + super("user.not.exists", null); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/exception/user/UserPasswordNotMatchException.java b/evo-admin/src/main/java/com/evo/common/exception/user/UserPasswordNotMatchException.java new file mode 100644 index 0000000..6b173a8 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/exception/user/UserPasswordNotMatchException.java @@ -0,0 +1,16 @@ +package com.evo.common.exception.user; + +/** + * 鐢ㄦ埛瀵嗙爜涓嶆纭垨涓嶇鍚堣鑼冨紓甯哥被 + * + * @author evo + */ +public class UserPasswordNotMatchException extends UserException +{ + private static final long serialVersionUID = 1L; + + public UserPasswordNotMatchException() + { + super("user.password.not.match", null); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/exception/user/UserPasswordRetryLimitExceedException.java b/evo-admin/src/main/java/com/evo/common/exception/user/UserPasswordRetryLimitExceedException.java new file mode 100644 index 0000000..04e04cd --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/exception/user/UserPasswordRetryLimitExceedException.java @@ -0,0 +1,16 @@ +package com.evo.common.exception.user; + +/** + * 鐢ㄦ埛閿欒鏈澶ф鏁板紓甯哥被 + * + * @author evo + */ +public class UserPasswordRetryLimitExceedException extends UserException +{ + private static final long serialVersionUID = 1L; + + public UserPasswordRetryLimitExceedException(int retryLimitCount, int lockTime) + { + super("user.password.retry.limit.exceed", new Object[] { retryLimitCount, lockTime }); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/filter/PropertyPreExcludeFilter.java b/evo-admin/src/main/java/com/evo/common/filter/PropertyPreExcludeFilter.java new file mode 100644 index 0000000..5663e60 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/filter/PropertyPreExcludeFilter.java @@ -0,0 +1,24 @@ +package com.evo.common.filter; + +import com.alibaba.fastjson2.filter.SimplePropertyPreFilter; + +/** + * 鎺掗櫎JSON鏁忔劅灞炴 + * + * @author evo + */ +public class PropertyPreExcludeFilter extends SimplePropertyPreFilter +{ + public PropertyPreExcludeFilter() + { + } + + public PropertyPreExcludeFilter addExcludes(String... filters) + { + for (int i = 0; i < filters.length; i++) + { + this.getExcludes().add(filters[i]); + } + return this; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/filter/RepeatableFilter.java b/evo-admin/src/main/java/com/evo/common/filter/RepeatableFilter.java new file mode 100644 index 0000000..dc81bdf --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/filter/RepeatableFilter.java @@ -0,0 +1,52 @@ +package com.evo.common.filter; + +import java.io.IOException; +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import org.springframework.http.MediaType; +import com.evo.common.utils.StringUtils; + +/** + * Repeatable 杩囨护鍣 + * + * @author evo + */ +public class RepeatableFilter implements Filter +{ + @Override + public void init(FilterConfig filterConfig) throws ServletException + { + + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException + { + ServletRequest requestWrapper = null; + if (request instanceof HttpServletRequest + && StringUtils.startsWithIgnoreCase(request.getContentType(), MediaType.APPLICATION_JSON_VALUE)) + { + requestWrapper = new RepeatedlyRequestWrapper((HttpServletRequest) request, response); + } + if (null == requestWrapper) + { + chain.doFilter(request, response); + } + else + { + chain.doFilter(requestWrapper, response); + } + } + + @Override + public void destroy() + { + + } +} diff --git a/evo-admin/src/main/java/com/evo/common/filter/RepeatedlyRequestWrapper.java b/evo-admin/src/main/java/com/evo/common/filter/RepeatedlyRequestWrapper.java new file mode 100644 index 0000000..02c50df --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/filter/RepeatedlyRequestWrapper.java @@ -0,0 +1,76 @@ +package com.evo.common.filter; + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import com.evo.common.utils.http.HttpHelper; +import com.evo.common.constant.Constants; + +/** + * 鏋勫缓鍙噸澶嶈鍙杋nputStream鐨剅equest + * + * @author evo + */ +public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper +{ + private final byte[] body; + + public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException + { + super(request); + request.setCharacterEncoding(Constants.UTF8); + response.setCharacterEncoding(Constants.UTF8); + + body = HttpHelper.getBodyString(request).getBytes(Constants.UTF8); + } + + @Override + public BufferedReader getReader() throws IOException + { + return new BufferedReader(new InputStreamReader(getInputStream())); + } + + @Override + public ServletInputStream getInputStream() throws IOException + { + final ByteArrayInputStream bais = new ByteArrayInputStream(body); + return new ServletInputStream() + { + @Override + public int read() throws IOException + { + return bais.read(); + } + + @Override + public int available() throws IOException + { + return body.length; + } + + @Override + public boolean isFinished() + { + return false; + } + + @Override + public boolean isReady() + { + return false; + } + + @Override + public void setReadListener(ReadListener readListener) + { + + } + }; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/filter/XssFilter.java b/evo-admin/src/main/java/com/evo/common/filter/XssFilter.java new file mode 100644 index 0000000..f54e703 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/filter/XssFilter.java @@ -0,0 +1,75 @@ +package com.evo.common.filter; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import com.evo.common.utils.StringUtils; +import com.evo.common.enums.HttpMethod; + +/** + * 闃叉XSS鏀诲嚮鐨勮繃婊ゅ櫒 + * + * @author evo + */ +public class XssFilter implements Filter +{ + /** + * 鎺掗櫎閾炬帴 + */ + public List excludes = new ArrayList<>(); + + @Override + public void init(FilterConfig filterConfig) throws ServletException + { + String tempExcludes = filterConfig.getInitParameter("excludes"); + if (StringUtils.isNotEmpty(tempExcludes)) + { + String[] urls = tempExcludes.split(","); + for (String url : urls) + { + excludes.add(url); + } + } + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException + { + HttpServletRequest req = (HttpServletRequest) request; + HttpServletResponse resp = (HttpServletResponse) response; + if (handleExcludeURL(req, resp)) + { + chain.doFilter(request, response); + return; + } + XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper((HttpServletRequest) request); + chain.doFilter(xssRequest, response); + } + + private boolean handleExcludeURL(HttpServletRequest request, HttpServletResponse response) + { + String url = request.getServletPath(); + String method = request.getMethod(); + // GET DELETE 涓嶈繃婊 + if (method == null || HttpMethod.GET.matches(method) || HttpMethod.DELETE.matches(method)) + { + return true; + } + return StringUtils.matches(url, excludes); + } + + @Override + public void destroy() + { + + } +} diff --git a/evo-admin/src/main/java/com/evo/common/filter/XssHttpServletRequestWrapper.java b/evo-admin/src/main/java/com/evo/common/filter/XssHttpServletRequestWrapper.java new file mode 100644 index 0000000..52b25ed --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/filter/XssHttpServletRequestWrapper.java @@ -0,0 +1,111 @@ +package com.evo.common.filter; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import org.apache.commons.io.IOUtils; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.html.EscapeUtil; + +/** + * XSS杩囨护澶勭悊 + * + * @author evo + */ +public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper +{ + /** + * @param request + */ + public XssHttpServletRequestWrapper(HttpServletRequest request) + { + super(request); + } + + @Override + public String[] getParameterValues(String name) + { + String[] values = super.getParameterValues(name); + if (values != null) + { + int length = values.length; + String[] escapesValues = new String[length]; + for (int i = 0; i < length; i++) + { + // 闃瞲ss鏀诲嚮鍜岃繃婊ゅ墠鍚庣┖鏍 + escapesValues[i] = EscapeUtil.clean(values[i]).trim(); + } + return escapesValues; + } + return super.getParameterValues(name); + } + + @Override + public ServletInputStream getInputStream() throws IOException + { + // 闈瀓son绫诲瀷锛岀洿鎺ヨ繑鍥 + if (!isJsonRequest()) + { + return super.getInputStream(); + } + + // 涓虹┖锛岀洿鎺ヨ繑鍥 + String json = IOUtils.toString(super.getInputStream(), "utf-8"); + if (StringUtils.isEmpty(json)) + { + return super.getInputStream(); + } + + // xss杩囨护 + json = EscapeUtil.clean(json).trim(); + byte[] jsonBytes = json.getBytes("utf-8"); + final ByteArrayInputStream bis = new ByteArrayInputStream(jsonBytes); + return new ServletInputStream() + { + @Override + public boolean isFinished() + { + return true; + } + + @Override + public boolean isReady() + { + return true; + } + + @Override + public int available() throws IOException + { + return jsonBytes.length; + } + + @Override + public void setReadListener(ReadListener readListener) + { + } + + @Override + public int read() throws IOException + { + return bis.read(); + } + }; + } + + /** + * 鏄惁鏄疛son璇锋眰 + * + * @param request + */ + public boolean isJsonRequest() + { + String header = super.getHeader(HttpHeaders.CONTENT_TYPE); + return StringUtils.startsWithIgnoreCase(header, MediaType.APPLICATION_JSON_VALUE); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/Arith.java b/evo-admin/src/main/java/com/evo/common/utils/Arith.java new file mode 100644 index 0000000..a0c50ac --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/Arith.java @@ -0,0 +1,114 @@ +package com.evo.common.utils; + +import java.math.BigDecimal; +import java.math.RoundingMode; + +/** + * 绮剧‘鐨勬诞鐐规暟杩愮畻 + * + * @author evo + */ +public class Arith +{ + + /** 榛樿闄ゆ硶杩愮畻绮惧害 */ + private static final int DEF_DIV_SCALE = 10; + + /** 杩欎釜绫讳笉鑳藉疄渚嬪寲 */ + private Arith() + { + } + + /** + * 鎻愪緵绮剧‘鐨勫姞娉曡繍绠椼 + * @param v1 琚姞鏁 + * @param v2 鍔犳暟 + * @return 涓や釜鍙傛暟鐨勫拰 + */ + public static double add(double v1, double v2) + { + BigDecimal b1 = new BigDecimal(Double.toString(v1)); + BigDecimal b2 = new BigDecimal(Double.toString(v2)); + return b1.add(b2).doubleValue(); + } + + /** + * 鎻愪緵绮剧‘鐨勫噺娉曡繍绠椼 + * @param v1 琚噺鏁 + * @param v2 鍑忔暟 + * @return 涓や釜鍙傛暟鐨勫樊 + */ + public static double sub(double v1, double v2) + { + BigDecimal b1 = new BigDecimal(Double.toString(v1)); + BigDecimal b2 = new BigDecimal(Double.toString(v2)); + return b1.subtract(b2).doubleValue(); + } + + /** + * 鎻愪緵绮剧‘鐨勪箻娉曡繍绠椼 + * @param v1 琚箻鏁 + * @param v2 涔樻暟 + * @return 涓や釜鍙傛暟鐨勭Н + */ + public static double mul(double v1, double v2) + { + BigDecimal b1 = new BigDecimal(Double.toString(v1)); + BigDecimal b2 = new BigDecimal(Double.toString(v2)); + return b1.multiply(b2).doubleValue(); + } + + /** + * 鎻愪緵锛堢浉瀵癸級绮剧‘鐨勯櫎娉曡繍绠楋紝褰撳彂鐢熼櫎涓嶅敖鐨勬儏鍐垫椂锛岀簿纭埌 + * 灏忔暟鐐逛互鍚10浣嶏紝浠ュ悗鐨勬暟瀛楀洓鑸嶄簲鍏ャ + * @param v1 琚櫎鏁 + * @param v2 闄ゆ暟 + * @return 涓や釜鍙傛暟鐨勫晢 + */ + public static double div(double v1, double v2) + { + return div(v1, v2, DEF_DIV_SCALE); + } + + /** + * 鎻愪緵锛堢浉瀵癸級绮剧‘鐨勯櫎娉曡繍绠椼傚綋鍙戠敓闄や笉灏界殑鎯呭喌鏃讹紝鐢眘cale鍙傛暟鎸 + * 瀹氱簿搴︼紝浠ュ悗鐨勬暟瀛楀洓鑸嶄簲鍏ャ + * @param v1 琚櫎鏁 + * @param v2 闄ゆ暟 + * @param scale 琛ㄧず琛ㄧず闇瑕佺簿纭埌灏忔暟鐐逛互鍚庡嚑浣嶃 + * @return 涓や釜鍙傛暟鐨勫晢 + */ + public static double div(double v1, double v2, int scale) + { + if (scale < 0) + { + throw new IllegalArgumentException( + "The scale must be a positive integer or zero"); + } + BigDecimal b1 = new BigDecimal(Double.toString(v1)); + BigDecimal b2 = new BigDecimal(Double.toString(v2)); + if (b1.compareTo(BigDecimal.ZERO) == 0) + { + return BigDecimal.ZERO.doubleValue(); + } + return b1.divide(b2, scale, RoundingMode.HALF_UP).doubleValue(); + } + + /** + * 鎻愪緵绮剧‘鐨勫皬鏁颁綅鍥涜垗浜斿叆澶勭悊銆 + * @param v 闇瑕佸洓鑸嶄簲鍏ョ殑鏁板瓧 + * @param scale 灏忔暟鐐瑰悗淇濈暀鍑犱綅 + * @return 鍥涜垗浜斿叆鍚庣殑缁撴灉 + */ + public static double round(double v, int scale) + { + if (scale < 0) + { + throw new IllegalArgumentException( + "The scale must be a positive integer or zero"); + } + BigDecimal b = new BigDecimal(Double.toString(v)); + BigDecimal one = BigDecimal.ONE; + return b.divide(one, scale, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/DateUtils.java b/evo-admin/src/main/java/com/evo/common/utils/DateUtils.java new file mode 100644 index 0000000..7babefd --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/DateUtils.java @@ -0,0 +1,191 @@ +package com.evo.common.utils; + +import java.lang.management.ManagementFactory; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.util.Date; +import org.apache.commons.lang3.time.DateFormatUtils; + +/** + * 鏃堕棿宸ュ叿绫 + * + * @author evo + */ +public class DateUtils extends org.apache.commons.lang3.time.DateUtils +{ + public static String YYYY = "yyyy"; + + public static String YYYY_MM = "yyyy-MM"; + + public static String YYYY_MM_DD = "yyyy-MM-dd"; + + public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; + + public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; + + private static String[] parsePatterns = { + "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", + "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", + "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"}; + + /** + * 鑾峰彇褰撳墠Date鍨嬫棩鏈 + * + * @return Date() 褰撳墠鏃ユ湡 + */ + public static Date getNowDate() + { + return new Date(); + } + + /** + * 鑾峰彇褰撳墠鏃ユ湡, 榛樿鏍煎紡涓簓yyy-MM-dd + * + * @return String + */ + public static String getDate() + { + return dateTimeNow(YYYY_MM_DD); + } + + public static final String getTime() + { + return dateTimeNow(YYYY_MM_DD_HH_MM_SS); + } + + public static final String dateTimeNow() + { + return dateTimeNow(YYYYMMDDHHMMSS); + } + + public static final String dateTimeNow(final String format) + { + return parseDateToStr(format, new Date()); + } + + public static final String dateTime(final Date date) + { + return parseDateToStr(YYYY_MM_DD, date); + } + + public static final String parseDateToStr(final String format, final Date date) + { + return new SimpleDateFormat(format).format(date); + } + + public static final Date dateTime(final String format, final String ts) + { + try + { + return new SimpleDateFormat(format).parse(ts); + } + catch (ParseException e) + { + throw new RuntimeException(e); + } + } + + /** + * 鏃ユ湡璺緞 鍗冲勾/鏈/鏃 濡2018/08/08 + */ + public static final String datePath() + { + Date now = new Date(); + return DateFormatUtils.format(now, "yyyy/MM/dd"); + } + + /** + * 鏃ユ湡璺緞 鍗冲勾/鏈/鏃 濡20180808 + */ + public static final String dateTime() + { + Date now = new Date(); + return DateFormatUtils.format(now, "yyyyMMdd"); + } + + /** + * 鏃ユ湡鍨嬪瓧绗︿覆杞寲涓烘棩鏈 鏍煎紡 + */ + public static Date parseDate(Object str) + { + if (str == null) + { + return null; + } + try + { + return parseDate(str.toString(), parsePatterns); + } + catch (ParseException e) + { + return null; + } + } + + /** + * 鑾峰彇鏈嶅姟鍣ㄥ惎鍔ㄦ椂闂 + */ + public static Date getServerStartDate() + { + long time = ManagementFactory.getRuntimeMXBean().getStartTime(); + return new Date(time); + } + + /** + * 璁$畻鐩稿樊澶╂暟 + */ + public static int differentDaysByMillisecond(Date date1, Date date2) + { + return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24))); + } + + /** + * 璁$畻鏃堕棿宸 + * + * @param endDate 鏈鍚庢椂闂 + * @param startTime 寮濮嬫椂闂 + * @return 鏃堕棿宸紙澶/灏忔椂/鍒嗛挓锛 + */ + public static String timeDistance(Date endDate, Date startTime) + { + long nd = 1000 * 24 * 60 * 60; + long nh = 1000 * 60 * 60; + long nm = 1000 * 60; + // long ns = 1000; + // 鑾峰緱涓や釜鏃堕棿鐨勬绉掓椂闂村樊寮 + long diff = endDate.getTime() - startTime.getTime(); + // 璁$畻宸灏戝ぉ + long day = diff / nd; + // 璁$畻宸灏戝皬鏃 + long hour = diff % nd / nh; + // 璁$畻宸灏戝垎閽 + long min = diff % nd % nh / nm; + // 璁$畻宸灏戠//杈撳嚭缁撴灉 + // long sec = diff % nd % nh % nm / ns; + return day + "澶" + hour + "灏忔椂" + min + "鍒嗛挓"; + } + + /** + * 澧炲姞 LocalDateTime ==> Date + */ + public static Date toDate(LocalDateTime temporalAccessor) + { + ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault()); + return Date.from(zdt.toInstant()); + } + + /** + * 澧炲姞 LocalDate ==> Date + */ + public static Date toDate(LocalDate temporalAccessor) + { + LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0)); + ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault()); + return Date.from(zdt.toInstant()); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/DesensitizedUtil.java b/evo-admin/src/main/java/com/evo/common/utils/DesensitizedUtil.java new file mode 100644 index 0000000..265b828 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/DesensitizedUtil.java @@ -0,0 +1,49 @@ +package com.evo.common.utils; + +/** + * 鑴辨晱宸ュ叿绫 + * + * @author evo + */ +public class DesensitizedUtil +{ + /** + * 瀵嗙爜鐨勫叏閮ㄥ瓧绗﹂兘鐢*浠f浛锛屾瘮濡傦細****** + * + * @param password 瀵嗙爜 + * @return 鑴辨晱鍚庣殑瀵嗙爜 + */ + public static String password(String password) + { + if (StringUtils.isBlank(password)) + { + return StringUtils.EMPTY; + } + return StringUtils.repeat('*', password.length()); + } + + /** + * 杞︾墝涓棿鐢*浠f浛锛屽鏋滄槸閿欒鐨勮溅鐗岋紝涓嶅鐞 + * + * @param carLicense 瀹屾暣鐨勮溅鐗屽彿 + * @return 鑴辨晱鍚庣殑杞︾墝 + */ + public static String carLicense(String carLicense) + { + if (StringUtils.isBlank(carLicense)) + { + return StringUtils.EMPTY; + } + // 鏅氳溅鐗 + if (carLicense.length() == 7) + { + carLicense = StringUtils.hide(carLicense, 3, 6); + } + else if (carLicense.length() == 8) + { + // 鏂拌兘婧愯溅鐗 + carLicense = StringUtils.hide(carLicense, 3, 7); + } + return carLicense; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/DictUtils.java b/evo-admin/src/main/java/com/evo/common/utils/DictUtils.java new file mode 100644 index 0000000..01ffc8f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/DictUtils.java @@ -0,0 +1,239 @@ +package com.evo.common.utils; + +import java.util.Collection; +import java.util.List; +import com.alibaba.fastjson2.JSONArray; +import com.evo.common.constant.CacheConstants; +import com.evo.common.core.domain.entity.SysDictData; +import com.evo.common.core.redis.RedisCache; +import com.evo.common.utils.spring.SpringUtils; + +/** + * 瀛楀吀宸ュ叿绫 + * + * @author evo + */ +public class DictUtils +{ + /** + * 鍒嗛殧绗 + */ + public static final String SEPARATOR = ","; + + /** + * 璁剧疆瀛楀吀缂撳瓨 + * + * @param key 鍙傛暟閿 + * @param dictDatas 瀛楀吀鏁版嵁鍒楄〃 + */ + public static void setDictCache(String key, List dictDatas) + { + SpringUtils.getBean(RedisCache.class).setCacheObject(getCacheKey(key), dictDatas); + } + + /** + * 鑾峰彇瀛楀吀缂撳瓨 + * + * @param key 鍙傛暟閿 + * @return dictDatas 瀛楀吀鏁版嵁鍒楄〃 + */ + public static List getDictCache(String key) + { + JSONArray arrayCache = SpringUtils.getBean(RedisCache.class).getCacheObject(getCacheKey(key)); + if (StringUtils.isNotNull(arrayCache)) + { + return arrayCache.toList(SysDictData.class); + } + return null; + } + + /** + * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏稿艰幏鍙栧瓧鍏告爣绛 + * + * @param dictType 瀛楀吀绫诲瀷 + * @param dictValue 瀛楀吀鍊 + * @return 瀛楀吀鏍囩 + */ + public static String getDictLabel(String dictType, String dictValue) + { + if (StringUtils.isEmpty(dictValue)) + { + return StringUtils.EMPTY; + } + return getDictLabel(dictType, dictValue, SEPARATOR); + } + + /** + * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏告爣绛捐幏鍙栧瓧鍏稿 + * + * @param dictType 瀛楀吀绫诲瀷 + * @param dictLabel 瀛楀吀鏍囩 + * @return 瀛楀吀鍊 + */ + public static String getDictValue(String dictType, String dictLabel) + { + if (StringUtils.isEmpty(dictLabel)) + { + return StringUtils.EMPTY; + } + return getDictValue(dictType, dictLabel, SEPARATOR); + } + + /** + * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏稿艰幏鍙栧瓧鍏告爣绛 + * + * @param dictType 瀛楀吀绫诲瀷 + * @param dictValue 瀛楀吀鍊 + * @param separator 鍒嗛殧绗 + * @return 瀛楀吀鏍囩 + */ + public static String getDictLabel(String dictType, String dictValue, String separator) + { + StringBuilder propertyString = new StringBuilder(); + List datas = getDictCache(dictType); + if (StringUtils.isNull(datas)) + { + return StringUtils.EMPTY; + } + if (StringUtils.containsAny(separator, dictValue)) + { + for (SysDictData dict : datas) + { + for (String value : dictValue.split(separator)) + { + if (value.equals(dict.getDictValue())) + { + propertyString.append(dict.getDictLabel()).append(separator); + break; + } + } + } + } + else + { + for (SysDictData dict : datas) + { + if (dictValue.equals(dict.getDictValue())) + { + return dict.getDictLabel(); + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏告爣绛捐幏鍙栧瓧鍏稿 + * + * @param dictType 瀛楀吀绫诲瀷 + * @param dictLabel 瀛楀吀鏍囩 + * @param separator 鍒嗛殧绗 + * @return 瀛楀吀鍊 + */ + public static String getDictValue(String dictType, String dictLabel, String separator) + { + StringBuilder propertyString = new StringBuilder(); + List datas = getDictCache(dictType); + if (StringUtils.isNull(datas)) + { + return StringUtils.EMPTY; + } + if (StringUtils.containsAny(separator, dictLabel)) + { + for (SysDictData dict : datas) + { + for (String label : dictLabel.split(separator)) + { + if (label.equals(dict.getDictLabel())) + { + propertyString.append(dict.getDictValue()).append(separator); + break; + } + } + } + } + else + { + for (SysDictData dict : datas) + { + if (dictLabel.equals(dict.getDictLabel())) + { + return dict.getDictValue(); + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 鏍规嵁瀛楀吀绫诲瀷鑾峰彇瀛楀吀鎵鏈夊 + * + * @param dictType 瀛楀吀绫诲瀷 + * @return 瀛楀吀鍊 + */ + public static String getDictValues(String dictType) + { + StringBuilder propertyString = new StringBuilder(); + List datas = getDictCache(dictType); + if (StringUtils.isNull(datas)) + { + return StringUtils.EMPTY; + } + for (SysDictData dict : datas) + { + propertyString.append(dict.getDictValue()).append(SEPARATOR); + } + return StringUtils.stripEnd(propertyString.toString(), SEPARATOR); + } + + /** + * 鏍规嵁瀛楀吀绫诲瀷鑾峰彇瀛楀吀鎵鏈夋爣绛 + * + * @param dictType 瀛楀吀绫诲瀷 + * @return 瀛楀吀鍊 + */ + public static String getDictLabels(String dictType) + { + StringBuilder propertyString = new StringBuilder(); + List datas = getDictCache(dictType); + if (StringUtils.isNull(datas)) + { + return StringUtils.EMPTY; + } + for (SysDictData dict : datas) + { + propertyString.append(dict.getDictLabel()).append(SEPARATOR); + } + return StringUtils.stripEnd(propertyString.toString(), SEPARATOR); + } + + /** + * 鍒犻櫎鎸囧畾瀛楀吀缂撳瓨 + * + * @param key 瀛楀吀閿 + */ + public static void removeDictCache(String key) + { + SpringUtils.getBean(RedisCache.class).deleteObject(getCacheKey(key)); + } + + /** + * 娓呯┖瀛楀吀缂撳瓨 + */ + public static void clearDictCache() + { + Collection keys = SpringUtils.getBean(RedisCache.class).keys(CacheConstants.SYS_DICT_KEY + "*"); + SpringUtils.getBean(RedisCache.class).deleteObject(keys); + } + + /** + * 璁剧疆cache key + * + * @param configKey 鍙傛暟閿 + * @return 缂撳瓨閿甼ey + */ + public static String getCacheKey(String configKey) + { + return CacheConstants.SYS_DICT_KEY + configKey; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/ExceptionUtil.java b/evo-admin/src/main/java/com/evo/common/utils/ExceptionUtil.java new file mode 100644 index 0000000..6419a15 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/ExceptionUtil.java @@ -0,0 +1,39 @@ +package com.evo.common.utils; + +import java.io.PrintWriter; +import java.io.StringWriter; +import org.apache.commons.lang3.exception.ExceptionUtils; + +/** + * 閿欒淇℃伅澶勭悊绫汇 + * + * @author evo + */ +public class ExceptionUtil +{ + /** + * 鑾峰彇exception鐨勮缁嗛敊璇俊鎭 + */ + public static String getExceptionMessage(Throwable e) + { + StringWriter sw = new StringWriter(); + e.printStackTrace(new PrintWriter(sw, true)); + return sw.toString(); + } + + public static String getRootErrorMessage(Exception e) + { + Throwable root = ExceptionUtils.getRootCause(e); + root = (root == null ? e : root); + if (root == null) + { + return ""; + } + String msg = root.getMessage(); + if (msg == null) + { + return "null"; + } + return StringUtils.defaultString(msg); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/LogUtils.java b/evo-admin/src/main/java/com/evo/common/utils/LogUtils.java new file mode 100644 index 0000000..c7357e9 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/LogUtils.java @@ -0,0 +1,18 @@ +package com.evo.common.utils; + +/** + * 澶勭悊骞惰褰曟棩蹇楁枃浠 + * + * @author evo + */ +public class LogUtils +{ + public static String getBlock(Object msg) + { + if (msg == null) + { + msg = ""; + } + return "[" + msg.toString() + "]"; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/MessageUtils.java b/evo-admin/src/main/java/com/evo/common/utils/MessageUtils.java new file mode 100644 index 0000000..ca3883a --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/MessageUtils.java @@ -0,0 +1,26 @@ +package com.evo.common.utils; + +import org.springframework.context.MessageSource; +import org.springframework.context.i18n.LocaleContextHolder; +import com.evo.common.utils.spring.SpringUtils; + +/** + * 鑾峰彇i18n璧勬簮鏂囦欢 + * + * @author evo + */ +public class MessageUtils +{ + /** + * 鏍规嵁娑堟伅閿拰鍙傛暟 鑾峰彇娑堟伅 濮旀墭缁檚pring messageSource + * + * @param code 娑堟伅閿 + * @param args 鍙傛暟 + * @return 鑾峰彇鍥介檯鍖栫炕璇戝 + */ + public static String message(String code, Object... args) + { + MessageSource messageSource = SpringUtils.getBean(MessageSource.class); + return messageSource.getMessage(code, args, LocaleContextHolder.getLocale()); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/PageUtils.java b/evo-admin/src/main/java/com/evo/common/utils/PageUtils.java new file mode 100644 index 0000000..28f6086 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/PageUtils.java @@ -0,0 +1,35 @@ +package com.evo.common.utils; + +import com.github.pagehelper.PageHelper; +import com.evo.common.core.page.PageDomain; +import com.evo.common.core.page.TableSupport; +import com.evo.common.utils.sql.SqlUtil; + +/** + * 鍒嗛〉宸ュ叿绫 + * + * @author evo + */ +public class PageUtils extends PageHelper +{ + /** + * 璁剧疆璇锋眰鍒嗛〉鏁版嵁 + */ + public static void startPage() + { + PageDomain pageDomain = TableSupport.buildPageRequest(); + Integer pageNum = pageDomain.getPageNum(); + Integer pageSize = pageDomain.getPageSize(); + String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy()); + Boolean reasonable = pageDomain.getReasonable(); + PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable); + } + + /** + * 娓呯悊鍒嗛〉鐨勭嚎绋嬪彉閲 + */ + public static void clearPage() + { + PageHelper.clearPage(); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/SecurityUtils.java b/evo-admin/src/main/java/com/evo/common/utils/SecurityUtils.java new file mode 100644 index 0000000..63b0e5b --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/SecurityUtils.java @@ -0,0 +1,178 @@ +package com.evo.common.utils; + +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.util.PatternMatchUtils; +import com.evo.common.constant.Constants; +import com.evo.common.constant.HttpStatus; +import com.evo.common.core.domain.entity.SysRole; +import com.evo.common.core.domain.model.LoginUser; +import com.evo.common.exception.ServiceException; + +/** + * 瀹夊叏鏈嶅姟宸ュ叿绫 + * + * @author evo + */ +public class SecurityUtils +{ + + /** + * 鐢ㄦ埛ID + **/ + public static Long getUserId() + { + try + { + return getLoginUser().getUserId(); + } + catch (Exception e) + { + throw new ServiceException("鑾峰彇鐢ㄦ埛ID寮傚父", HttpStatus.UNAUTHORIZED); + } + } + + /** + * 鑾峰彇閮ㄩ棬ID + **/ + public static Long getDeptId() + { + try + { + return getLoginUser().getDeptId(); + } + catch (Exception e) + { + throw new ServiceException("鑾峰彇閮ㄩ棬ID寮傚父", HttpStatus.UNAUTHORIZED); + } + } + + /** + * 鑾峰彇鐢ㄦ埛璐︽埛 + **/ + public static String getUsername() + { + try + { + return getLoginUser().getUsername(); + } + catch (Exception e) + { + throw new ServiceException("鑾峰彇鐢ㄦ埛璐︽埛寮傚父", HttpStatus.UNAUTHORIZED); + } + } + + /** + * 鑾峰彇鐢ㄦ埛 + **/ + public static LoginUser getLoginUser() + { + try + { + return (LoginUser) getAuthentication().getPrincipal(); + } + catch (Exception e) + { + throw new ServiceException("鑾峰彇鐢ㄦ埛淇℃伅寮傚父", HttpStatus.UNAUTHORIZED); + } + } + + /** + * 鑾峰彇Authentication + */ + public static Authentication getAuthentication() + { + return SecurityContextHolder.getContext().getAuthentication(); + } + + /** + * 鐢熸垚BCryptPasswordEncoder瀵嗙爜 + * + * @param password 瀵嗙爜 + * @return 鍔犲瘑瀛楃涓 + */ + public static String encryptPassword(String password) + { + BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); + return passwordEncoder.encode(password); + } + + /** + * 鍒ゆ柇瀵嗙爜鏄惁鐩稿悓 + * + * @param rawPassword 鐪熷疄瀵嗙爜 + * @param encodedPassword 鍔犲瘑鍚庡瓧绗 + * @return 缁撴灉 + */ + public static boolean matchesPassword(String rawPassword, String encodedPassword) + { + BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); + return passwordEncoder.matches(rawPassword, encodedPassword); + } + + /** + * 鏄惁涓虹鐞嗗憳 + * + * @param userId 鐢ㄦ埛ID + * @return 缁撴灉 + */ + public static boolean isAdmin(Long userId) + { + return userId != null && 1L == userId; + } + + /** + * 楠岃瘉鐢ㄦ埛鏄惁鍏峰鏌愭潈闄 + * + * @param permission 鏉冮檺瀛楃涓 + * @return 鐢ㄦ埛鏄惁鍏峰鏌愭潈闄 + */ + public static boolean hasPermi(String permission) + { + return hasPermi(getLoginUser().getPermissions(), permission); + } + + /** + * 鍒ゆ柇鏄惁鍖呭惈鏉冮檺 + * + * @param authorities 鏉冮檺鍒楄〃 + * @param permission 鏉冮檺瀛楃涓 + * @return 鐢ㄦ埛鏄惁鍏峰鏌愭潈闄 + */ + public static boolean hasPermi(Collection authorities, String permission) + { + return authorities.stream().filter(StringUtils::hasText) + .anyMatch(x -> Constants.ALL_PERMISSION.equals(x) || PatternMatchUtils.simpleMatch(x, permission)); + } + + /** + * 楠岃瘉鐢ㄦ埛鏄惁鎷ユ湁鏌愪釜瑙掕壊 + * + * @param role 瑙掕壊鏍囪瘑 + * @return 鐢ㄦ埛鏄惁鍏峰鏌愯鑹 + */ + public static boolean hasRole(String role) + { + List roleList = getLoginUser().getUser().getRoles(); + Collection roles = roleList.stream().map(SysRole::getRoleKey).collect(Collectors.toSet()); + return hasRole(roles, role); + } + + /** + * 鍒ゆ柇鏄惁鍖呭惈瑙掕壊 + * + * @param roles 瑙掕壊鍒楄〃 + * @param role 瑙掕壊 + * @return 鐢ㄦ埛鏄惁鍏峰鏌愯鑹叉潈闄 + */ + public static boolean hasRole(Collection roles, String role) + { + return roles.stream().filter(StringUtils::hasText) + .anyMatch(x -> Constants.SUPER_ADMIN.equals(x) || PatternMatchUtils.simpleMatch(x, role)); + } + +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/ServletUtils.java b/evo-admin/src/main/java/com/evo/common/utils/ServletUtils.java new file mode 100644 index 0000000..8615b43 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/ServletUtils.java @@ -0,0 +1,218 @@ +package com.evo.common.utils; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import javax.servlet.ServletRequest; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import com.evo.common.constant.Constants; +import com.evo.common.core.text.Convert; + +/** + * 瀹㈡埛绔伐鍏风被 + * + * @author evo + */ +public class ServletUtils +{ + /** + * 鑾峰彇String鍙傛暟 + */ + public static String getParameter(String name) + { + return getRequest().getParameter(name); + } + + /** + * 鑾峰彇String鍙傛暟 + */ + public static String getParameter(String name, String defaultValue) + { + return Convert.toStr(getRequest().getParameter(name), defaultValue); + } + + /** + * 鑾峰彇Integer鍙傛暟 + */ + public static Integer getParameterToInt(String name) + { + return Convert.toInt(getRequest().getParameter(name)); + } + + /** + * 鑾峰彇Integer鍙傛暟 + */ + public static Integer getParameterToInt(String name, Integer defaultValue) + { + return Convert.toInt(getRequest().getParameter(name), defaultValue); + } + + /** + * 鑾峰彇Boolean鍙傛暟 + */ + public static Boolean getParameterToBool(String name) + { + return Convert.toBool(getRequest().getParameter(name)); + } + + /** + * 鑾峰彇Boolean鍙傛暟 + */ + public static Boolean getParameterToBool(String name, Boolean defaultValue) + { + return Convert.toBool(getRequest().getParameter(name), defaultValue); + } + + /** + * 鑾峰緱鎵鏈夎姹傚弬鏁 + * + * @param request 璇锋眰瀵硅薄{@link ServletRequest} + * @return Map + */ + public static Map getParams(ServletRequest request) + { + final Map map = request.getParameterMap(); + return Collections.unmodifiableMap(map); + } + + /** + * 鑾峰緱鎵鏈夎姹傚弬鏁 + * + * @param request 璇锋眰瀵硅薄{@link ServletRequest} + * @return Map + */ + public static Map getParamMap(ServletRequest request) + { + Map params = new HashMap<>(); + for (Map.Entry entry : getParams(request).entrySet()) + { + params.put(entry.getKey(), StringUtils.join(entry.getValue(), ",")); + } + return params; + } + + /** + * 鑾峰彇request + */ + public static HttpServletRequest getRequest() + { + return getRequestAttributes().getRequest(); + } + + /** + * 鑾峰彇response + */ + public static HttpServletResponse getResponse() + { + return getRequestAttributes().getResponse(); + } + + /** + * 鑾峰彇session + */ + public static HttpSession getSession() + { + return getRequest().getSession(); + } + + public static ServletRequestAttributes getRequestAttributes() + { + RequestAttributes attributes = RequestContextHolder.getRequestAttributes(); + return (ServletRequestAttributes) attributes; + } + + /** + * 灏嗗瓧绗︿覆娓叉煋鍒板鎴风 + * + * @param response 娓叉煋瀵硅薄 + * @param string 寰呮覆鏌撶殑瀛楃涓 + */ + public static void renderString(HttpServletResponse response, String string) + { + try + { + response.setStatus(200); + response.setContentType("application/json"); + response.setCharacterEncoding("utf-8"); + response.getWriter().print(string); + } + catch (IOException e) + { + e.printStackTrace(); + } + } + + /** + * 鏄惁鏄疉jax寮傛璇锋眰 + * + * @param request + */ + public static boolean isAjaxRequest(HttpServletRequest request) + { + String accept = request.getHeader("accept"); + if (accept != null && accept.contains("application/json")) + { + return true; + } + + String xRequestedWith = request.getHeader("X-Requested-With"); + if (xRequestedWith != null && xRequestedWith.contains("XMLHttpRequest")) + { + return true; + } + + String uri = request.getRequestURI(); + if (StringUtils.inStringIgnoreCase(uri, ".json", ".xml")) + { + return true; + } + + String ajax = request.getParameter("__ajax"); + return StringUtils.inStringIgnoreCase(ajax, "json", "xml"); + } + + /** + * 鍐呭缂栫爜 + * + * @param str 鍐呭 + * @return 缂栫爜鍚庣殑鍐呭 + */ + public static String urlEncode(String str) + { + try + { + return URLEncoder.encode(str, Constants.UTF8); + } + catch (UnsupportedEncodingException e) + { + return StringUtils.EMPTY; + } + } + + /** + * 鍐呭瑙g爜 + * + * @param str 鍐呭 + * @return 瑙g爜鍚庣殑鍐呭 + */ + public static String urlDecode(String str) + { + try + { + return URLDecoder.decode(str, Constants.UTF8); + } + catch (UnsupportedEncodingException e) + { + return StringUtils.EMPTY; + } + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/StringUtils.java b/evo-admin/src/main/java/com/evo/common/utils/StringUtils.java new file mode 100644 index 0000000..0ff7cf5 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/StringUtils.java @@ -0,0 +1,684 @@ +package com.evo.common.utils; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.springframework.util.AntPathMatcher; +import com.evo.common.constant.Constants; +import com.evo.common.core.text.StrFormatter; + +/** + * 瀛楃涓插伐鍏风被 + * + * @author evo + */ +public class StringUtils extends org.apache.commons.lang3.StringUtils +{ + /** 绌哄瓧绗︿覆 */ + private static final String NULLSTR = ""; + + /** 涓嬪垝绾 */ + private static final char SEPARATOR = '_'; + + /** 鏄熷彿 */ + private static final char ASTERISK = '*'; + + /** + * 鑾峰彇鍙傛暟涓嶄负绌哄 + * + * @param value defaultValue 瑕佸垽鏂殑value + * @return value 杩斿洖鍊 + */ + public static T nvl(T value, T defaultValue) + { + return value != null ? value : defaultValue; + } + + /** + * * 鍒ゆ柇涓涓狢ollection鏄惁涓虹┖锛 鍖呭惈List锛孲et锛孮ueue + * + * @param coll 瑕佸垽鏂殑Collection + * @return true锛氫负绌 false锛氶潪绌 + */ + public static boolean isEmpty(Collection coll) + { + return isNull(coll) || coll.isEmpty(); + } + + /** + * * 鍒ゆ柇涓涓狢ollection鏄惁闈炵┖锛屽寘鍚獿ist锛孲et锛孮ueue + * + * @param coll 瑕佸垽鏂殑Collection + * @return true锛氶潪绌 false锛氱┖ + */ + public static boolean isNotEmpty(Collection coll) + { + return !isEmpty(coll); + } + + /** + * * 鍒ゆ柇涓涓璞℃暟缁勬槸鍚︿负绌 + * + * @param objects 瑕佸垽鏂殑瀵硅薄鏁扮粍 + ** @return true锛氫负绌 false锛氶潪绌 + */ + public static boolean isEmpty(Object[] objects) + { + return isNull(objects) || (objects.length == 0); + } + + /** + * * 鍒ゆ柇涓涓璞℃暟缁勬槸鍚﹂潪绌 + * + * @param objects 瑕佸垽鏂殑瀵硅薄鏁扮粍 + * @return true锛氶潪绌 false锛氱┖ + */ + public static boolean isNotEmpty(Object[] objects) + { + return !isEmpty(objects); + } + + /** + * * 鍒ゆ柇涓涓狹ap鏄惁涓虹┖ + * + * @param map 瑕佸垽鏂殑Map + * @return true锛氫负绌 false锛氶潪绌 + */ + public static boolean isEmpty(Map map) + { + return isNull(map) || map.isEmpty(); + } + + /** + * * 鍒ゆ柇涓涓狹ap鏄惁涓虹┖ + * + * @param map 瑕佸垽鏂殑Map + * @return true锛氶潪绌 false锛氱┖ + */ + public static boolean isNotEmpty(Map map) + { + return !isEmpty(map); + } + + /** + * * 鍒ゆ柇涓涓瓧绗︿覆鏄惁涓虹┖涓 + * + * @param str String + * @return true锛氫负绌 false锛氶潪绌 + */ + public static boolean isEmpty(String str) + { + return isNull(str) || NULLSTR.equals(str.trim()); + } + + /** + * * 鍒ゆ柇涓涓瓧绗︿覆鏄惁涓洪潪绌轰覆 + * + * @param str String + * @return true锛氶潪绌轰覆 false锛氱┖涓 + */ + public static boolean isNotEmpty(String str) + { + return !isEmpty(str); + } + + /** + * * 鍒ゆ柇涓涓璞℃槸鍚︿负绌 + * + * @param object Object + * @return true锛氫负绌 false锛氶潪绌 + */ + public static boolean isNull(Object object) + { + return object == null; + } + + /** + * * 鍒ゆ柇涓涓璞℃槸鍚﹂潪绌 + * + * @param object Object + * @return true锛氶潪绌 false锛氱┖ + */ + public static boolean isNotNull(Object object) + { + return !isNull(object); + } + + /** + * * 鍒ゆ柇涓涓璞℃槸鍚︽槸鏁扮粍绫诲瀷锛圝ava鍩烘湰鍨嬪埆鐨勬暟缁勶級 + * + * @param object 瀵硅薄 + * @return true锛氭槸鏁扮粍 false锛氫笉鏄暟缁 + */ + public static boolean isArray(Object object) + { + return isNotNull(object) && object.getClass().isArray(); + } + + /** + * 鍘荤┖鏍 + */ + public static String trim(String str) + { + return (str == null ? "" : str.trim()); + } + + /** + * 鏇挎崲鎸囧畾瀛楃涓茬殑鎸囧畾鍖洪棿鍐呭瓧绗︿负"*" + * + * @param str 瀛楃涓 + * @param startInclude 寮濮嬩綅缃紙鍖呭惈锛 + * @param endExclude 缁撴潫浣嶇疆锛堜笉鍖呭惈锛 + * @return 鏇挎崲鍚庣殑瀛楃涓 + */ + public static String hide(CharSequence str, int startInclude, int endExclude) + { + if (isEmpty(str)) + { + return NULLSTR; + } + final int strLength = str.length(); + if (startInclude > strLength) + { + return NULLSTR; + } + if (endExclude > strLength) + { + endExclude = strLength; + } + if (startInclude > endExclude) + { + // 濡傛灉璧峰浣嶇疆澶т簬缁撴潫浣嶇疆锛屼笉鏇挎崲 + return NULLSTR; + } + final char[] chars = new char[strLength]; + for (int i = 0; i < strLength; i++) + { + if (i >= startInclude && i < endExclude) + { + chars[i] = ASTERISK; + } + else + { + chars[i] = str.charAt(i); + } + } + return new String(chars); + } + + /** + * 鎴彇瀛楃涓 + * + * @param str 瀛楃涓 + * @param start 寮濮 + * @return 缁撴灉 + */ + public static String substring(final String str, int start) + { + if (str == null) + { + return NULLSTR; + } + + if (start < 0) + { + start = str.length() + start; + } + + if (start < 0) + { + start = 0; + } + if (start > str.length()) + { + return NULLSTR; + } + + return str.substring(start); + } + + /** + * 鎴彇瀛楃涓 + * + * @param str 瀛楃涓 + * @param start 寮濮 + * @param end 缁撴潫 + * @return 缁撴灉 + */ + public static String substring(final String str, int start, int end) + { + if (str == null) + { + return NULLSTR; + } + + if (end < 0) + { + end = str.length() + end; + } + if (start < 0) + { + start = str.length() + start; + } + + if (end > str.length()) + { + end = str.length(); + } + + if (start > end) + { + return NULLSTR; + } + + if (start < 0) + { + start = 0; + } + if (end < 0) + { + end = 0; + } + + return str.substring(start, end); + } + + /** + * 鍒ゆ柇鏄惁涓虹┖锛屽苟涓斾笉鏄┖鐧藉瓧绗 + * + * @param str 瑕佸垽鏂殑value + * @return 缁撴灉 + */ + public static boolean hasText(String str) + { + return (str != null && !str.isEmpty() && containsText(str)); + } + + private static boolean containsText(CharSequence str) + { + int strLen = str.length(); + for (int i = 0; i < strLen; i++) + { + if (!Character.isWhitespace(str.charAt(i))) + { + return true; + } + } + return false; + } + + /** + * 鏍煎紡鍖栨枃鏈, {} 琛ㄧず鍗犱綅绗
+ * 姝ゆ柟娉曞彧鏄畝鍗曞皢鍗犱綅绗 {} 鎸夌収椤哄簭鏇挎崲涓哄弬鏁
+ * 濡傛灉鎯宠緭鍑 {} 浣跨敤 \\杞箟 { 鍗冲彲锛屽鏋滄兂杈撳嚭 {} 涔嬪墠鐨 \ 浣跨敤鍙岃浆涔夌 \\\\ 鍗冲彲
+ * 渚嬶細
+ * 閫氬父浣跨敤锛歠ormat("this is {} for {}", "a", "b") -> this is a for b
+ * 杞箟{}锛 format("this is \\{} for {}", "a", "b") -> this is \{} for a
+ * 杞箟\锛 format("this is \\\\{} for {}", "a", "b") -> this is \a for b
+ * + * @param template 鏂囨湰妯℃澘锛岃鏇挎崲鐨勯儴鍒嗙敤 {} 琛ㄧず + * @param params 鍙傛暟鍊 + * @return 鏍煎紡鍖栧悗鐨勬枃鏈 + */ + public static String format(String template, Object... params) + { + if (isEmpty(params) || isEmpty(template)) + { + return template; + } + return StrFormatter.format(template, params); + } + + /** + * 鏄惁涓篽ttp(s)://寮澶 + * + * @param link 閾炬帴 + * @return 缁撴灉 + */ + public static boolean ishttp(String link) + { + return StringUtils.startsWithAny(link, Constants.HTTP, Constants.HTTPS); + } + + /** + * 瀛楃涓茶浆set + * + * @param str 瀛楃涓 + * @param sep 鍒嗛殧绗 + * @return set闆嗗悎 + */ + public static final Set str2Set(String str, String sep) + { + return new HashSet(str2List(str, sep, true, false)); + } + + /** + * 瀛楃涓茶浆list + * + * @param str 瀛楃涓 + * @param sep 鍒嗛殧绗 + * @param filterBlank 杩囨护绾┖鐧 + * @param trim 鍘绘帀棣栧熬绌虹櫧 + * @return list闆嗗悎 + */ + public static final List str2List(String str, String sep, boolean filterBlank, boolean trim) + { + List list = new ArrayList(); + if (StringUtils.isEmpty(str)) + { + return list; + } + + // 杩囨护绌虹櫧瀛楃涓 + if (filterBlank && StringUtils.isBlank(str)) + { + return list; + } + String[] split = str.split(sep); + for (String string : split) + { + if (filterBlank && StringUtils.isBlank(string)) + { + continue; + } + if (trim) + { + string = string.trim(); + } + list.add(string); + } + + return list; + } + + /** + * 鍒ゆ柇缁欏畾鐨刢ollection鍒楄〃涓槸鍚﹀寘鍚暟缁刟rray 鍒ゆ柇缁欏畾鐨勬暟缁刟rray涓槸鍚﹀寘鍚粰瀹氱殑鍏冪礌value + * + * @param collection 缁欏畾鐨勯泦鍚 + * @param array 缁欏畾鐨勬暟缁 + * @return boolean 缁撴灉 + */ + public static boolean containsAny(Collection collection, String... array) + { + if (isEmpty(collection) || isEmpty(array)) + { + return false; + } + else + { + for (String str : array) + { + if (collection.contains(str)) + { + return true; + } + } + return false; + } + } + + /** + * 鏌ユ壘鎸囧畾瀛楃涓叉槸鍚﹀寘鍚寚瀹氬瓧绗︿覆鍒楄〃涓殑浠绘剰涓涓瓧绗︿覆鍚屾椂涓插拷鐣ュぇ灏忓啓 + * + * @param cs 鎸囧畾瀛楃涓 + * @param searchCharSequences 闇瑕佹鏌ョ殑瀛楃涓叉暟缁 + * @return 鏄惁鍖呭惈浠绘剰涓涓瓧绗︿覆 + */ + public static boolean containsAnyIgnoreCase(CharSequence cs, CharSequence... searchCharSequences) + { + if (isEmpty(cs) || isEmpty(searchCharSequences)) + { + return false; + } + for (CharSequence testStr : searchCharSequences) + { + if (containsIgnoreCase(cs, testStr)) + { + return true; + } + } + return false; + } + + /** + * 椹煎嘲杞笅鍒掔嚎鍛藉悕 + */ + public static String toUnderScoreCase(String str) + { + if (str == null) + { + return null; + } + StringBuilder sb = new StringBuilder(); + // 鍓嶇疆瀛楃鏄惁澶у啓 + boolean preCharIsUpperCase = true; + // 褰撳墠瀛楃鏄惁澶у啓 + boolean curreCharIsUpperCase = true; + // 涓嬩竴瀛楃鏄惁澶у啓 + boolean nexteCharIsUpperCase = true; + for (int i = 0; i < str.length(); i++) + { + char c = str.charAt(i); + if (i > 0) + { + preCharIsUpperCase = Character.isUpperCase(str.charAt(i - 1)); + } + else + { + preCharIsUpperCase = false; + } + + curreCharIsUpperCase = Character.isUpperCase(c); + + if (i < (str.length() - 1)) + { + nexteCharIsUpperCase = Character.isUpperCase(str.charAt(i + 1)); + } + + if (preCharIsUpperCase && curreCharIsUpperCase && !nexteCharIsUpperCase) + { + sb.append(SEPARATOR); + } + else if ((i != 0 && !preCharIsUpperCase) && curreCharIsUpperCase) + { + sb.append(SEPARATOR); + } + sb.append(Character.toLowerCase(c)); + } + + return sb.toString(); + } + + /** + * 鏄惁鍖呭惈瀛楃涓 + * + * @param str 楠岃瘉瀛楃涓 + * @param strs 瀛楃涓茬粍 + * @return 鍖呭惈杩斿洖true + */ + public static boolean inStringIgnoreCase(String str, String... strs) + { + if (str != null && strs != null) + { + for (String s : strs) + { + if (str.equalsIgnoreCase(trim(s))) + { + return true; + } + } + } + return false; + } + + /** + * 灏嗕笅鍒掔嚎澶у啓鏂瑰紡鍛藉悕鐨勫瓧绗︿覆杞崲涓洪┘宄板紡銆傚鏋滆浆鎹㈠墠鐨勪笅鍒掔嚎澶у啓鏂瑰紡鍛藉悕鐨勫瓧绗︿覆涓虹┖锛屽垯杩斿洖绌哄瓧绗︿覆銆 渚嬪锛欻ELLO_WORLD->HelloWorld + * + * @param name 杞崲鍓嶇殑涓嬪垝绾垮ぇ鍐欐柟寮忓懡鍚嶇殑瀛楃涓 + * @return 杞崲鍚庣殑椹煎嘲寮忓懡鍚嶇殑瀛楃涓 + */ + public static String convertToCamelCase(String name) + { + StringBuilder result = new StringBuilder(); + // 蹇熸鏌 + if (name == null || name.isEmpty()) + { + // 娌″繀瑕佽浆鎹 + return ""; + } + else if (!name.contains("_")) + { + // 涓嶅惈涓嬪垝绾匡紝浠呭皢棣栧瓧姣嶅ぇ鍐 + return name.substring(0, 1).toUpperCase() + name.substring(1); + } + // 鐢ㄤ笅鍒掔嚎灏嗗師濮嬪瓧绗︿覆鍒嗗壊 + String[] camels = name.split("_"); + for (String camel : camels) + { + // 璺宠繃鍘熷瀛楃涓蹭腑寮澶淬佺粨灏剧殑涓嬫崲绾挎垨鍙岄噸涓嬪垝绾 + if (camel.isEmpty()) + { + continue; + } + // 棣栧瓧姣嶅ぇ鍐 + result.append(camel.substring(0, 1).toUpperCase()); + result.append(camel.substring(1).toLowerCase()); + } + return result.toString(); + } + + /** + * 椹煎嘲寮忓懡鍚嶆硶 + * 渚嬪锛歶ser_name->userName + */ + public static String toCamelCase(String s) + { + if (s == null) + { + return null; + } + if (s.indexOf(SEPARATOR) == -1) + { + return s; + } + s = s.toLowerCase(); + StringBuilder sb = new StringBuilder(s.length()); + boolean upperCase = false; + for (int i = 0; i < s.length(); i++) + { + char c = s.charAt(i); + + if (c == SEPARATOR) + { + upperCase = true; + } + else if (upperCase) + { + sb.append(Character.toUpperCase(c)); + upperCase = false; + } + else + { + sb.append(c); + } + } + return sb.toString(); + } + + /** + * 鏌ユ壘鎸囧畾瀛楃涓叉槸鍚﹀尮閰嶆寚瀹氬瓧绗︿覆鍒楄〃涓殑浠绘剰涓涓瓧绗︿覆 + * + * @param str 鎸囧畾瀛楃涓 + * @param strs 闇瑕佹鏌ョ殑瀛楃涓叉暟缁 + * @return 鏄惁鍖归厤 + */ + public static boolean matches(String str, List strs) + { + if (isEmpty(str) || isEmpty(strs)) + { + return false; + } + for (String pattern : strs) + { + if (isMatch(pattern, str)) + { + return true; + } + } + return false; + } + + /** + * 鍒ゆ柇url鏄惁涓庤鍒欓厤缃: + * ? 琛ㄧず鍗曚釜瀛楃; + * * 琛ㄧず涓灞傝矾寰勫唴鐨勪换鎰忓瓧绗︿覆锛屼笉鍙法灞傜骇; + * ** 琛ㄧず浠绘剰灞傝矾寰; + * + * @param pattern 鍖归厤瑙勫垯 + * @param url 闇瑕佸尮閰嶇殑url + * @return + */ + public static boolean isMatch(String pattern, String url) + { + AntPathMatcher matcher = new AntPathMatcher(); + return matcher.match(pattern, url); + } + + @SuppressWarnings("unchecked") + public static T cast(Object obj) + { + return (T) obj; + } + + /** + * 鏁板瓧宸﹁竟琛ラ綈0锛屼娇涔嬭揪鍒版寚瀹氶暱搴︺傛敞鎰忥紝濡傛灉鏁板瓧杞崲涓哄瓧绗︿覆鍚庯紝闀垮害澶т簬size锛屽垯鍙繚鐣 鏈鍚巗ize涓瓧绗︺ + * + * @param num 鏁板瓧瀵硅薄 + * @param size 瀛楃涓叉寚瀹氶暱搴 + * @return 杩斿洖鏁板瓧鐨勫瓧绗︿覆鏍煎紡锛岃瀛楃涓蹭负鎸囧畾闀垮害銆 + */ + public static final String padl(final Number num, final int size) + { + return padl(num.toString(), size, '0'); + } + + /** + * 瀛楃涓插乏琛ラ綈銆傚鏋滃師濮嬪瓧绗︿覆s闀垮害澶т簬size锛屽垯鍙繚鐣欐渶鍚巗ize涓瓧绗︺ + * + * @param s 鍘熷瀛楃涓 + * @param size 瀛楃涓叉寚瀹氶暱搴 + * @param c 鐢ㄤ簬琛ラ綈鐨勫瓧绗 + * @return 杩斿洖鎸囧畾闀垮害鐨勫瓧绗︿覆锛岀敱鍘熷瓧绗︿覆宸﹁ˉ榻愭垨鎴彇寰楀埌銆 + */ + public static final String padl(final String s, final int size, final char c) + { + final StringBuilder sb = new StringBuilder(size); + if (s != null) + { + final int len = s.length(); + if (s.length() <= size) + { + for (int i = size - len; i > 0; i--) + { + sb.append(c); + } + sb.append(s); + } + else + { + return s.substring(len - size, len); + } + } + else + { + for (int i = size; i > 0; i--) + { + sb.append(c); + } + } + return sb.toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/Threads.java b/evo-admin/src/main/java/com/evo/common/utils/Threads.java new file mode 100644 index 0000000..59b18f3 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/Threads.java @@ -0,0 +1,99 @@ +package com.evo.common.utils; + +import java.util.concurrent.CancellationException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 绾跨▼鐩稿叧宸ュ叿绫. + * + * @author evo + */ +public class Threads +{ + private static final Logger logger = LoggerFactory.getLogger(Threads.class); + + /** + * sleep绛夊緟,鍗曚綅涓烘绉 + */ + public static void sleep(long milliseconds) + { + try + { + Thread.sleep(milliseconds); + } + catch (InterruptedException e) + { + return; + } + } + + /** + * 鍋滄绾跨▼姹 + * 鍏堜娇鐢╯hutdown, 鍋滄鎺ユ敹鏂颁换鍔″苟灏濊瘯瀹屾垚鎵鏈夊凡瀛樺湪浠诲姟. + * 濡傛灉瓒呮椂, 鍒欒皟鐢╯hutdownNow, 鍙栨秷鍦╳orkQueue涓璓ending鐨勪换鍔,骞朵腑鏂墍鏈夐樆濉炲嚱鏁. + * 濡傛灉浠嶇劧瓒呮檪锛屽墖寮峰埗閫鍑. + * 鍙﹀鍦╯hutdown鏃剁嚎绋嬫湰韬璋冪敤涓柇鍋氫簡澶勭悊. + */ + public static void shutdownAndAwaitTermination(ExecutorService pool) + { + if (pool != null && !pool.isShutdown()) + { + pool.shutdown(); + try + { + if (!pool.awaitTermination(120, TimeUnit.SECONDS)) + { + pool.shutdownNow(); + if (!pool.awaitTermination(120, TimeUnit.SECONDS)) + { + logger.info("Pool did not terminate"); + } + } + } + catch (InterruptedException ie) + { + pool.shutdownNow(); + Thread.currentThread().interrupt(); + } + } + } + + /** + * 鎵撳嵃绾跨▼寮傚父淇℃伅 + */ + public static void printException(Runnable r, Throwable t) + { + if (t == null && r instanceof Future) + { + try + { + Future future = (Future) r; + if (future.isDone()) + { + future.get(); + } + } + catch (CancellationException ce) + { + t = ce; + } + catch (ExecutionException ee) + { + t = ee.getCause(); + } + catch (InterruptedException ie) + { + Thread.currentThread().interrupt(); + } + } + if (t != null) + { + logger.error(t.getMessage(), t); + } + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/bean/BeanUtils.java b/evo-admin/src/main/java/com/evo/common/utils/bean/BeanUtils.java new file mode 100644 index 0000000..738eadf --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/bean/BeanUtils.java @@ -0,0 +1,110 @@ +package com.evo.common.utils.bean; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Bean 宸ュ叿绫 + * + * @author evo + */ +public class BeanUtils extends org.springframework.beans.BeanUtils +{ + /** Bean鏂规硶鍚嶄腑灞炴у悕寮濮嬬殑涓嬫爣 */ + private static final int BEAN_METHOD_PROP_INDEX = 3; + + /** * 鍖归厤getter鏂规硶鐨勬鍒欒〃杈惧紡 */ + private static final Pattern GET_PATTERN = Pattern.compile("get(\\p{javaUpperCase}\\w*)"); + + /** * 鍖归厤setter鏂规硶鐨勬鍒欒〃杈惧紡 */ + private static final Pattern SET_PATTERN = Pattern.compile("set(\\p{javaUpperCase}\\w*)"); + + /** + * Bean灞炴у鍒跺伐鍏锋柟娉曘 + * + * @param dest 鐩爣瀵硅薄 + * @param src 婧愬璞 + */ + public static void copyBeanProp(Object dest, Object src) + { + try + { + copyProperties(src, dest); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + + /** + * 鑾峰彇瀵硅薄鐨剆etter鏂规硶銆 + * + * @param obj 瀵硅薄 + * @return 瀵硅薄鐨剆etter鏂规硶鍒楄〃 + */ + public static List getSetterMethods(Object obj) + { + // setter鏂规硶鍒楄〃 + List setterMethods = new ArrayList(); + + // 鑾峰彇鎵鏈夋柟娉 + Method[] methods = obj.getClass().getMethods(); + + // 鏌ユ壘setter鏂规硶 + + for (Method method : methods) + { + Matcher m = SET_PATTERN.matcher(method.getName()); + if (m.matches() && (method.getParameterTypes().length == 1)) + { + setterMethods.add(method); + } + } + // 杩斿洖setter鏂规硶鍒楄〃 + return setterMethods; + } + + /** + * 鑾峰彇瀵硅薄鐨刧etter鏂规硶銆 + * + * @param obj 瀵硅薄 + * @return 瀵硅薄鐨刧etter鏂规硶鍒楄〃 + */ + + public static List getGetterMethods(Object obj) + { + // getter鏂规硶鍒楄〃 + List getterMethods = new ArrayList(); + // 鑾峰彇鎵鏈夋柟娉 + Method[] methods = obj.getClass().getMethods(); + // 鏌ユ壘getter鏂规硶 + for (Method method : methods) + { + Matcher m = GET_PATTERN.matcher(method.getName()); + if (m.matches() && (method.getParameterTypes().length == 0)) + { + getterMethods.add(method); + } + } + // 杩斿洖getter鏂规硶鍒楄〃 + return getterMethods; + } + + /** + * 妫鏌ean鏂规硶鍚嶄腑鐨勫睘鎬у悕鏄惁鐩哥瓑銆
+ * 濡俫etName()鍜宻etName()灞炴у悕涓鏍凤紝getName()鍜宻etAge()灞炴у悕涓嶄竴鏍枫 + * + * @param m1 鏂规硶鍚1 + * @param m2 鏂规硶鍚2 + * @return 灞炴у悕涓鏍疯繑鍥瀟rue锛屽惁鍒欒繑鍥瀎alse + */ + + public static boolean isMethodPropEquals(String m1, String m2) + { + return m1.substring(BEAN_METHOD_PROP_INDEX).equals(m2.substring(BEAN_METHOD_PROP_INDEX)); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/bean/BeanValidators.java b/evo-admin/src/main/java/com/evo/common/utils/bean/BeanValidators.java new file mode 100644 index 0000000..202097d --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/bean/BeanValidators.java @@ -0,0 +1,24 @@ +package com.evo.common.utils.bean; + +import java.util.Set; +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; +import javax.validation.Validator; + +/** + * bean瀵硅薄灞炴ч獙璇 + * + * @author evo + */ +public class BeanValidators +{ + public static void validateWithException(Validator validator, Object object, Class... groups) + throws ConstraintViolationException + { + Set> constraintViolations = validator.validate(object, groups); + if (!constraintViolations.isEmpty()) + { + throw new ConstraintViolationException(constraintViolations); + } + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/file/FileTypeUtils.java b/evo-admin/src/main/java/com/evo/common/utils/file/FileTypeUtils.java new file mode 100644 index 0000000..4d4c9dc --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/file/FileTypeUtils.java @@ -0,0 +1,76 @@ +package com.evo.common.utils.file; + +import java.io.File; +import org.apache.commons.lang3.StringUtils; + +/** + * 鏂囦欢绫诲瀷宸ュ叿绫 + * + * @author evo + */ +public class FileTypeUtils +{ + /** + * 鑾峰彇鏂囦欢绫诲瀷 + *

+ * 渚嬪: evo.txt, 杩斿洖: txt + * + * @param file 鏂囦欢鍚 + * @return 鍚庣紑锛堜笉鍚".") + */ + public static String getFileType(File file) + { + if (null == file) + { + return StringUtils.EMPTY; + } + return getFileType(file.getName()); + } + + /** + * 鑾峰彇鏂囦欢绫诲瀷 + *

+ * 渚嬪: evo.txt, 杩斿洖: txt + * + * @param fileName 鏂囦欢鍚 + * @return 鍚庣紑锛堜笉鍚".") + */ + public static String getFileType(String fileName) + { + int separatorIndex = fileName.lastIndexOf("."); + if (separatorIndex < 0) + { + return ""; + } + return fileName.substring(separatorIndex + 1).toLowerCase(); + } + + /** + * 鑾峰彇鏂囦欢绫诲瀷 + * + * @param photoByte 鏂囦欢瀛楄妭鐮 + * @return 鍚庣紑锛堜笉鍚".") + */ + public static String getFileExtendName(byte[] photoByte) + { + String strFileExtendName = "JPG"; + if ((photoByte[0] == 71) && (photoByte[1] == 73) && (photoByte[2] == 70) && (photoByte[3] == 56) + && ((photoByte[4] == 55) || (photoByte[4] == 57)) && (photoByte[5] == 97)) + { + strFileExtendName = "GIF"; + } + else if ((photoByte[6] == 74) && (photoByte[7] == 70) && (photoByte[8] == 73) && (photoByte[9] == 70)) + { + strFileExtendName = "JPG"; + } + else if ((photoByte[0] == 66) && (photoByte[1] == 77)) + { + strFileExtendName = "BMP"; + } + else if ((photoByte[1] == 80) && (photoByte[2] == 78) && (photoByte[3] == 71)) + { + strFileExtendName = "PNG"; + } + return strFileExtendName; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/file/FileUploadUtils.java b/evo-admin/src/main/java/com/evo/common/utils/file/FileUploadUtils.java new file mode 100644 index 0000000..7cc3b12 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/file/FileUploadUtils.java @@ -0,0 +1,232 @@ +package com.evo.common.utils.file; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Paths; +import java.util.Objects; +import org.apache.commons.io.FilenameUtils; +import org.springframework.web.multipart.MultipartFile; +import com.evo.common.config.EvoConfig; +import com.evo.common.constant.Constants; +import com.evo.common.exception.file.FileNameLengthLimitExceededException; +import com.evo.common.exception.file.FileSizeLimitExceededException; +import com.evo.common.exception.file.InvalidExtensionException; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.uuid.Seq; + +/** + * 鏂囦欢涓婁紶宸ュ叿绫 + * + * @author evo + */ +public class FileUploadUtils +{ + /** + * 榛樿澶у皬 50M + */ + public static final long DEFAULT_MAX_SIZE = 50 * 1024 * 1024L; + + /** + * 榛樿鐨勬枃浠跺悕鏈澶ч暱搴 100 + */ + public static final int DEFAULT_FILE_NAME_LENGTH = 100; + + /** + * 榛樿涓婁紶鐨勫湴鍧 + */ + private static String defaultBaseDir = EvoConfig.getProfile(); + + public static void setDefaultBaseDir(String defaultBaseDir) + { + FileUploadUtils.defaultBaseDir = defaultBaseDir; + } + + public static String getDefaultBaseDir() + { + return defaultBaseDir; + } + + /** + * 浠ラ粯璁ら厤缃繘琛屾枃浠朵笂浼 + * + * @param file 涓婁紶鐨勬枃浠 + * @return 鏂囦欢鍚嶇О + * @throws Exception + */ + public static final String upload(MultipartFile file) throws IOException + { + try + { + return upload(getDefaultBaseDir(), file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); + } + catch (Exception e) + { + throw new IOException(e.getMessage(), e); + } + } + + /** + * 鏍规嵁鏂囦欢璺緞涓婁紶 + * + * @param baseDir 鐩稿搴旂敤鐨勫熀鐩綍 + * @param file 涓婁紶鐨勬枃浠 + * @return 鏂囦欢鍚嶇О + * @throws IOException + */ + public static final String upload(String baseDir, MultipartFile file) throws IOException + { + try + { + return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); + } + catch (Exception e) + { + throw new IOException(e.getMessage(), e); + } + } + + /** + * 鏂囦欢涓婁紶 + * + * @param baseDir 鐩稿搴旂敤鐨勫熀鐩綍 + * @param file 涓婁紶鐨勬枃浠 + * @param allowedExtension 涓婁紶鏂囦欢绫诲瀷 + * @return 杩斿洖涓婁紶鎴愬姛鐨勬枃浠跺悕 + * @throws FileSizeLimitExceededException 濡傛灉瓒呭嚭鏈澶уぇ灏 + * @throws FileNameLengthLimitExceededException 鏂囦欢鍚嶅お闀 + * @throws IOException 姣斿璇诲啓鏂囦欢鍑洪敊鏃 + * @throws InvalidExtensionException 鏂囦欢鏍¢獙寮傚父 + */ + public static final String upload(String baseDir, MultipartFile file, String[] allowedExtension) + throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException, + InvalidExtensionException + { + int fileNamelength = Objects.requireNonNull(file.getOriginalFilename()).length(); + if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) + { + throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH); + } + + assertAllowed(file, allowedExtension); + + String fileName = extractFilename(file); + + String absPath = getAbsoluteFile(baseDir, fileName).getAbsolutePath(); + file.transferTo(Paths.get(absPath)); + return getPathFileName(baseDir, fileName); + } + + /** + * 缂栫爜鏂囦欢鍚 + */ + public static final String extractFilename(MultipartFile file) + { + return StringUtils.format("{}/{}_{}.{}", DateUtils.datePath(), + FilenameUtils.getBaseName(file.getOriginalFilename()), Seq.getId(Seq.uploadSeqType), getExtension(file)); + } + + public static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException + { + File desc = new File(uploadDir + File.separator + fileName); + + if (!desc.exists()) + { + if (!desc.getParentFile().exists()) + { + desc.getParentFile().mkdirs(); + } + } + return desc; + } + + public static final String getPathFileName(String uploadDir, String fileName) throws IOException + { + int dirLastIndex = EvoConfig.getProfile().length() + 1; + String currentDir = StringUtils.substring(uploadDir, dirLastIndex); + return Constants.RESOURCE_PREFIX + "/" + currentDir + "/" + fileName; + } + + /** + * 鏂囦欢澶у皬鏍¢獙 + * + * @param file 涓婁紶鐨勬枃浠 + * @return + * @throws FileSizeLimitExceededException 濡傛灉瓒呭嚭鏈澶уぇ灏 + * @throws InvalidExtensionException + */ + public static final void assertAllowed(MultipartFile file, String[] allowedExtension) + throws FileSizeLimitExceededException, InvalidExtensionException + { + long size = file.getSize(); + if (size > DEFAULT_MAX_SIZE) + { + throw new FileSizeLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024); + } + + String fileName = file.getOriginalFilename(); + String extension = getExtension(file); + if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension)) + { + if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION) + { + throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension, + fileName); + } + else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION) + { + throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension, + fileName); + } + else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION) + { + throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension, + fileName); + } + else if (allowedExtension == MimeTypeUtils.VIDEO_EXTENSION) + { + throw new InvalidExtensionException.InvalidVideoExtensionException(allowedExtension, extension, + fileName); + } + else + { + throw new InvalidExtensionException(allowedExtension, extension, fileName); + } + } + } + + /** + * 鍒ゆ柇MIME绫诲瀷鏄惁鏄厑璁哥殑MIME绫诲瀷 + * + * @param extension + * @param allowedExtension + * @return + */ + public static final boolean isAllowedExtension(String extension, String[] allowedExtension) + { + for (String str : allowedExtension) + { + if (str.equalsIgnoreCase(extension)) + { + return true; + } + } + return false; + } + + /** + * 鑾峰彇鏂囦欢鍚嶇殑鍚庣紑 + * + * @param file 琛ㄥ崟鏂囦欢 + * @return 鍚庣紑鍚 + */ + public static final String getExtension(MultipartFile file) + { + String extension = FilenameUtils.getExtension(file.getOriginalFilename()); + if (StringUtils.isEmpty(extension)) + { + extension = MimeTypeUtils.getExtension(Objects.requireNonNull(file.getContentType())); + } + return extension; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/file/FileUtils.java b/evo-admin/src/main/java/com/evo/common/utils/file/FileUtils.java new file mode 100644 index 0000000..6288e8d --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/file/FileUtils.java @@ -0,0 +1,291 @@ +package com.evo.common.utils.file; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.ArrayUtils; +import com.evo.common.config.EvoConfig; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.uuid.IdUtils; +import org.apache.commons.io.FilenameUtils; + +/** + * 鏂囦欢澶勭悊宸ュ叿绫 + * + * @author evo + */ +public class FileUtils +{ + public static String FILENAME_PATTERN = "[a-zA-Z0-9_\\-\\|\\.\\u4e00-\\u9fa5]+"; + + /** + * 杈撳嚭鎸囧畾鏂囦欢鐨刡yte鏁扮粍 + * + * @param filePath 鏂囦欢璺緞 + * @param os 杈撳嚭娴 + * @return + */ + public static void writeBytes(String filePath, OutputStream os) throws IOException + { + FileInputStream fis = null; + try + { + File file = new File(filePath); + if (!file.exists()) + { + throw new FileNotFoundException(filePath); + } + fis = new FileInputStream(file); + byte[] b = new byte[1024]; + int length; + while ((length = fis.read(b)) > 0) + { + os.write(b, 0, length); + } + } + catch (IOException e) + { + throw e; + } + finally + { + IOUtils.close(os); + IOUtils.close(fis); + } + } + + /** + * 鍐欐暟鎹埌鏂囦欢涓 + * + * @param data 鏁版嵁 + * @return 鐩爣鏂囦欢 + * @throws IOException IO寮傚父 + */ + public static String writeImportBytes(byte[] data) throws IOException + { + return writeBytes(data, EvoConfig.getImportPath()); + } + + /** + * 鍐欐暟鎹埌鏂囦欢涓 + * + * @param data 鏁版嵁 + * @param uploadDir 鐩爣鏂囦欢 + * @return 鐩爣鏂囦欢 + * @throws IOException IO寮傚父 + */ + public static String writeBytes(byte[] data, String uploadDir) throws IOException + { + FileOutputStream fos = null; + String pathName = ""; + try + { + String extension = getFileExtendName(data); + pathName = DateUtils.datePath() + "/" + IdUtils.fastUUID() + "." + extension; + File file = FileUploadUtils.getAbsoluteFile(uploadDir, pathName); + fos = new FileOutputStream(file); + fos.write(data); + } + finally + { + IOUtils.close(fos); + } + return FileUploadUtils.getPathFileName(uploadDir, pathName); + } + + /** + * 鍒犻櫎鏂囦欢 + * + * @param filePath 鏂囦欢 + * @return + */ + public static boolean deleteFile(String filePath) + { + boolean flag = false; + File file = new File(filePath); + // 璺緞涓烘枃浠朵笖涓嶄负绌哄垯杩涜鍒犻櫎 + if (file.isFile() && file.exists()) + { + flag = file.delete(); + } + return flag; + } + + /** + * 鏂囦欢鍚嶇О楠岃瘉 + * + * @param filename 鏂囦欢鍚嶇О + * @return true 姝e父 false 闈炴硶 + */ + public static boolean isValidFilename(String filename) + { + return filename.matches(FILENAME_PATTERN); + } + + /** + * 妫鏌ユ枃浠舵槸鍚﹀彲涓嬭浇 + * + * @param resource 闇瑕佷笅杞界殑鏂囦欢 + * @return true 姝e父 false 闈炴硶 + */ + public static boolean checkAllowDownload(String resource) + { + // 绂佹鐩綍涓婅烦绾у埆 + if (StringUtils.contains(resource, "..")) + { + return false; + } + + // 妫鏌ュ厑璁镐笅杞界殑鏂囦欢瑙勫垯 + if (ArrayUtils.contains(MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, FileTypeUtils.getFileType(resource))) + { + return true; + } + + // 涓嶅湪鍏佽涓嬭浇鐨勬枃浠惰鍒 + return false; + } + + /** + * 涓嬭浇鏂囦欢鍚嶉噸鏂扮紪鐮 + * + * @param request 璇锋眰瀵硅薄 + * @param fileName 鏂囦欢鍚 + * @return 缂栫爜鍚庣殑鏂囦欢鍚 + */ + public static String setFileDownloadHeader(HttpServletRequest request, String fileName) throws UnsupportedEncodingException + { + final String agent = request.getHeader("USER-AGENT"); + String filename = fileName; + if (agent.contains("MSIE")) + { + // IE娴忚鍣 + filename = URLEncoder.encode(filename, "utf-8"); + filename = filename.replace("+", " "); + } + else if (agent.contains("Firefox")) + { + // 鐏嫄娴忚鍣 + filename = new String(fileName.getBytes(), "ISO8859-1"); + } + else if (agent.contains("Chrome")) + { + // google娴忚鍣 + filename = URLEncoder.encode(filename, "utf-8"); + } + else + { + // 鍏跺畠娴忚鍣 + filename = URLEncoder.encode(filename, "utf-8"); + } + return filename; + } + + /** + * 涓嬭浇鏂囦欢鍚嶉噸鏂扮紪鐮 + * + * @param response 鍝嶅簲瀵硅薄 + * @param realFileName 鐪熷疄鏂囦欢鍚 + */ + public static void setAttachmentResponseHeader(HttpServletResponse response, String realFileName) throws UnsupportedEncodingException + { + String percentEncodedFileName = percentEncode(realFileName); + + StringBuilder contentDispositionValue = new StringBuilder(); + contentDispositionValue.append("attachment; filename=") + .append(percentEncodedFileName) + .append(";") + .append("filename*=") + .append("utf-8''") + .append(percentEncodedFileName); + + response.addHeader("Access-Control-Expose-Headers", "Content-Disposition,download-filename"); + response.setHeader("Content-disposition", contentDispositionValue.toString()); + response.setHeader("download-filename", percentEncodedFileName); + } + + /** + * 鐧惧垎鍙风紪鐮佸伐鍏锋柟娉 + * + * @param s 闇瑕佺櫨鍒嗗彿缂栫爜鐨勫瓧绗︿覆 + * @return 鐧惧垎鍙风紪鐮佸悗鐨勫瓧绗︿覆 + */ + public static String percentEncode(String s) throws UnsupportedEncodingException + { + String encode = URLEncoder.encode(s, StandardCharsets.UTF_8.toString()); + return encode.replaceAll("\\+", "%20"); + } + + /** + * 鑾峰彇鍥惧儚鍚庣紑 + * + * @param photoByte 鍥惧儚鏁版嵁 + * @return 鍚庣紑鍚 + */ + public static String getFileExtendName(byte[] photoByte) + { + String strFileExtendName = "jpg"; + if ((photoByte[0] == 71) && (photoByte[1] == 73) && (photoByte[2] == 70) && (photoByte[3] == 56) + && ((photoByte[4] == 55) || (photoByte[4] == 57)) && (photoByte[5] == 97)) + { + strFileExtendName = "gif"; + } + else if ((photoByte[6] == 74) && (photoByte[7] == 70) && (photoByte[8] == 73) && (photoByte[9] == 70)) + { + strFileExtendName = "jpg"; + } + else if ((photoByte[0] == 66) && (photoByte[1] == 77)) + { + strFileExtendName = "bmp"; + } + else if ((photoByte[1] == 80) && (photoByte[2] == 78) && (photoByte[3] == 71)) + { + strFileExtendName = "png"; + } + return strFileExtendName; + } + + /** + * 鑾峰彇鏂囦欢鍚嶇О /profile/upload/2022/04/16/evo.png -- evo.png + * + * @param fileName 璺緞鍚嶇О + * @return 娌℃湁鏂囦欢璺緞鐨勫悕绉 + */ + public static String getName(String fileName) + { + if (fileName == null) + { + return null; + } + int lastUnixPos = fileName.lastIndexOf('/'); + int lastWindowsPos = fileName.lastIndexOf('\\'); + int index = Math.max(lastUnixPos, lastWindowsPos); + return fileName.substring(index + 1); + } + + /** + * 鑾峰彇涓嶅甫鍚庣紑鏂囦欢鍚嶇О /profile/upload/2022/04/16/evo.png -- evo + * + * @param fileName 璺緞鍚嶇О + * @return 娌℃湁鏂囦欢璺緞鍜屽悗缂鐨勫悕绉 + */ + public static String getNameNotSuffix(String fileName) + { + if (fileName == null) + { + return null; + } + String baseName = FilenameUtils.getBaseName(fileName); + return baseName; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/file/ImageUtils.java b/evo-admin/src/main/java/com/evo/common/utils/file/ImageUtils.java new file mode 100644 index 0000000..5251f58 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/file/ImageUtils.java @@ -0,0 +1,98 @@ +package com.evo.common.utils.file; + +import java.io.ByteArrayInputStream; +import java.io.FileInputStream; +import java.io.InputStream; +import java.net.URL; +import java.net.URLConnection; +import java.util.Arrays; +import org.apache.poi.util.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.evo.common.config.EvoConfig; +import com.evo.common.constant.Constants; +import com.evo.common.utils.StringUtils; + +/** + * 鍥剧墖澶勭悊宸ュ叿绫 + * + * @author evo + */ +public class ImageUtils +{ + private static final Logger log = LoggerFactory.getLogger(ImageUtils.class); + + public static byte[] getImage(String imagePath) + { + InputStream is = getFile(imagePath); + try + { + return IOUtils.toByteArray(is); + } + catch (Exception e) + { + log.error("鍥剧墖鍔犺浇寮傚父 {}", e); + return null; + } + finally + { + IOUtils.closeQuietly(is); + } + } + + public static InputStream getFile(String imagePath) + { + try + { + byte[] result = readFile(imagePath); + result = Arrays.copyOf(result, result.length); + return new ByteArrayInputStream(result); + } + catch (Exception e) + { + log.error("鑾峰彇鍥剧墖寮傚父 {}", e); + } + return null; + } + + /** + * 璇诲彇鏂囦欢涓哄瓧鑺傛暟鎹 + * + * @param url 鍦板潃 + * @return 瀛楄妭鏁版嵁 + */ + public static byte[] readFile(String url) + { + InputStream in = null; + try + { + if (url.startsWith("http")) + { + // 缃戠粶鍦板潃 + URL urlObj = new URL(url); + URLConnection urlConnection = urlObj.openConnection(); + urlConnection.setConnectTimeout(30 * 1000); + urlConnection.setReadTimeout(60 * 1000); + urlConnection.setDoInput(true); + in = urlConnection.getInputStream(); + } + else + { + // 鏈満鍦板潃 + String localPath = EvoConfig.getProfile(); + String downloadPath = localPath + StringUtils.substringAfter(url, Constants.RESOURCE_PREFIX); + in = new FileInputStream(downloadPath); + } + return IOUtils.toByteArray(in); + } + catch (Exception e) + { + log.error("鑾峰彇鏂囦欢璺緞寮傚父 {}", e); + return null; + } + finally + { + IOUtils.closeQuietly(in); + } + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/file/MimeTypeUtils.java b/evo-admin/src/main/java/com/evo/common/utils/file/MimeTypeUtils.java new file mode 100644 index 0000000..f9d830c --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/file/MimeTypeUtils.java @@ -0,0 +1,59 @@ +package com.evo.common.utils.file; + +/** + * 濯掍綋绫诲瀷宸ュ叿绫 + * + * @author evo + */ +public class MimeTypeUtils +{ + public static final String IMAGE_PNG = "image/png"; + + public static final String IMAGE_JPG = "image/jpg"; + + public static final String IMAGE_JPEG = "image/jpeg"; + + public static final String IMAGE_BMP = "image/bmp"; + + public static final String IMAGE_GIF = "image/gif"; + + public static final String[] IMAGE_EXTENSION = { "bmp", "gif", "jpg", "jpeg", "png" }; + + public static final String[] FLASH_EXTENSION = { "swf", "flv" }; + + public static final String[] MEDIA_EXTENSION = { "swf", "flv", "mp3", "wav", "wma", "wmv", "mid", "avi", "mpg", + "asf", "rm", "rmvb" }; + + public static final String[] VIDEO_EXTENSION = { "mp4", "avi", "rmvb" }; + + public static final String[] DEFAULT_ALLOWED_EXTENSION = { + // 鍥剧墖 + "bmp", "gif", "jpg", "jpeg", "png", + // word excel powerpoint + "doc", "docx", "xls", "xlsx", "ppt", "pptx", "html", "htm", "txt", + // 鍘嬬缉鏂囦欢 + "rar", "zip", "gz", "bz2", + // 瑙嗛鏍煎紡 + "mp4", "avi", "rmvb", + // pdf + "pdf" }; + + public static String getExtension(String prefix) + { + switch (prefix) + { + case IMAGE_PNG: + return "png"; + case IMAGE_JPG: + return "jpg"; + case IMAGE_JPEG: + return "jpeg"; + case IMAGE_BMP: + return "bmp"; + case IMAGE_GIF: + return "gif"; + default: + return ""; + } + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/html/EscapeUtil.java b/evo-admin/src/main/java/com/evo/common/utils/html/EscapeUtil.java new file mode 100644 index 0000000..79c4132 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/html/EscapeUtil.java @@ -0,0 +1,167 @@ +package com.evo.common.utils.html; + +import com.evo.common.utils.StringUtils; + +/** + * 杞箟鍜屽弽杞箟宸ュ叿绫 + * + * @author evo + */ +public class EscapeUtil +{ + public static final String RE_HTML_MARK = "(<[^<]*?>)|(<[\\s]*?/[^<]*?>)|(<[^<]*?/[\\s]*?>)"; + + private static final char[][] TEXT = new char[64][]; + + static + { + for (int i = 0; i < 64; i++) + { + TEXT[i] = new char[] { (char) i }; + } + + // special HTML characters + TEXT['\''] = "'".toCharArray(); // 鍗曞紩鍙 + TEXT['"'] = """.toCharArray(); // 鍙屽紩鍙 + TEXT['&'] = "&".toCharArray(); // &绗 + TEXT['<'] = "<".toCharArray(); // 灏忎簬鍙 + TEXT['>'] = ">".toCharArray(); // 澶т簬鍙 + } + + /** + * 杞箟鏂囨湰涓殑HTML瀛楃涓哄畨鍏ㄧ殑瀛楃 + * + * @param text 琚浆涔夌殑鏂囨湰 + * @return 杞箟鍚庣殑鏂囨湰 + */ + public static String escape(String text) + { + return encode(text); + } + + /** + * 杩樺師琚浆涔夌殑HTML鐗规畩瀛楃 + * + * @param content 鍖呭惈杞箟绗︾殑HTML鍐呭 + * @return 杞崲鍚庣殑瀛楃涓 + */ + public static String unescape(String content) + { + return decode(content); + } + + /** + * 娓呴櫎鎵鏈塇TML鏍囩锛屼絾鏄笉鍒犻櫎鏍囩鍐呯殑鍐呭 + * + * @param content 鏂囨湰 + * @return 娓呴櫎鏍囩鍚庣殑鏂囨湰 + */ + public static String clean(String content) + { + return new HTMLFilter().filter(content); + } + + /** + * Escape缂栫爜 + * + * @param text 琚紪鐮佺殑鏂囨湰 + * @return 缂栫爜鍚庣殑瀛楃 + */ + private static String encode(String text) + { + if (StringUtils.isEmpty(text)) + { + return StringUtils.EMPTY; + } + + final StringBuilder tmp = new StringBuilder(text.length() * 6); + char c; + for (int i = 0; i < text.length(); i++) + { + c = text.charAt(i); + if (c < 256) + { + tmp.append("%"); + if (c < 16) + { + tmp.append("0"); + } + tmp.append(Integer.toString(c, 16)); + } + else + { + tmp.append("%u"); + if (c <= 0xfff) + { + // issue#I49JU8@Gitee + tmp.append("0"); + } + tmp.append(Integer.toString(c, 16)); + } + } + return tmp.toString(); + } + + /** + * Escape瑙g爜 + * + * @param content 琚浆涔夌殑鍐呭 + * @return 瑙g爜鍚庣殑瀛楃涓 + */ + public static String decode(String content) + { + if (StringUtils.isEmpty(content)) + { + return content; + } + + StringBuilder tmp = new StringBuilder(content.length()); + int lastPos = 0, pos = 0; + char ch; + while (lastPos < content.length()) + { + pos = content.indexOf("%", lastPos); + if (pos == lastPos) + { + if (content.charAt(pos + 1) == 'u') + { + ch = (char) Integer.parseInt(content.substring(pos + 2, pos + 6), 16); + tmp.append(ch); + lastPos = pos + 6; + } + else + { + ch = (char) Integer.parseInt(content.substring(pos + 1, pos + 3), 16); + tmp.append(ch); + lastPos = pos + 3; + } + } + else + { + if (pos == -1) + { + tmp.append(content.substring(lastPos)); + lastPos = content.length(); + } + else + { + tmp.append(content.substring(lastPos, pos)); + lastPos = pos; + } + } + } + return tmp.toString(); + } + + public static void main(String[] args) + { + String html = ""; + String escape = EscapeUtil.escape(html); + // String html = "ipt>alert(\"XSS\")ipt>"; + // String html = "<123"; + // String html = "123>"; + System.out.println("clean: " + EscapeUtil.clean(html)); + System.out.println("escape: " + escape); + System.out.println("unescape: " + EscapeUtil.unescape(escape)); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/html/HTMLFilter.java b/evo-admin/src/main/java/com/evo/common/utils/html/HTMLFilter.java new file mode 100644 index 0000000..bb0463c --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/html/HTMLFilter.java @@ -0,0 +1,570 @@ +package com.evo.common.utils.html; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * HTML杩囨护鍣紝鐢ㄤ簬鍘婚櫎XSS婕忔礊闅愭偅銆 + * + * @author evo + */ +public final class HTMLFilter +{ + /** + * regex flag union representing /si modifiers in php + **/ + private static final int REGEX_FLAGS_SI = Pattern.CASE_INSENSITIVE | Pattern.DOTALL; + private static final Pattern P_COMMENTS = Pattern.compile("", Pattern.DOTALL); + private static final Pattern P_COMMENT = Pattern.compile("^!--(.*)--$", REGEX_FLAGS_SI); + private static final Pattern P_TAGS = Pattern.compile("<(.*?)>", Pattern.DOTALL); + private static final Pattern P_END_TAG = Pattern.compile("^/([a-z0-9]+)", REGEX_FLAGS_SI); + private static final Pattern P_START_TAG = Pattern.compile("^([a-z0-9]+)(.*?)(/?)$", REGEX_FLAGS_SI); + private static final Pattern P_QUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)=([\"'])(.*?)\\2", REGEX_FLAGS_SI); + private static final Pattern P_UNQUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)(=)([^\"\\s']+)", REGEX_FLAGS_SI); + private static final Pattern P_PROTOCOL = Pattern.compile("^([^:]+):", REGEX_FLAGS_SI); + private static final Pattern P_ENTITY = Pattern.compile("&#(\\d+);?"); + private static final Pattern P_ENTITY_UNICODE = Pattern.compile("&#x([0-9a-f]+);?"); + private static final Pattern P_ENCODE = Pattern.compile("%([0-9a-f]{2});?"); + private static final Pattern P_VALID_ENTITIES = Pattern.compile("&([^&;]*)(?=(;|&|$))"); + private static final Pattern P_VALID_QUOTES = Pattern.compile("(>|^)([^<]+?)(<|$)", Pattern.DOTALL); + private static final Pattern P_END_ARROW = Pattern.compile("^>"); + private static final Pattern P_BODY_TO_END = Pattern.compile("<([^>]*?)(?=<|$)"); + private static final Pattern P_XML_CONTENT = Pattern.compile("(^|>)([^<]*?)(?=>)"); + private static final Pattern P_STRAY_LEFT_ARROW = Pattern.compile("<([^>]*?)(?=<|$)"); + private static final Pattern P_STRAY_RIGHT_ARROW = Pattern.compile("(^|>)([^<]*?)(?=>)"); + private static final Pattern P_AMP = Pattern.compile("&"); + private static final Pattern P_QUOTE = Pattern.compile("\""); + private static final Pattern P_LEFT_ARROW = Pattern.compile("<"); + private static final Pattern P_RIGHT_ARROW = Pattern.compile(">"); + private static final Pattern P_BOTH_ARROWS = Pattern.compile("<>"); + + // @xxx could grow large... maybe use sesat's ReferenceMap + private static final ConcurrentMap P_REMOVE_PAIR_BLANKS = new ConcurrentHashMap<>(); + private static final ConcurrentMap P_REMOVE_SELF_BLANKS = new ConcurrentHashMap<>(); + + /** + * set of allowed html elements, along with allowed attributes for each element + **/ + private final Map> vAllowed; + /** + * counts of open tags for each (allowable) html element + **/ + private final Map vTagCounts = new HashMap<>(); + + /** + * html elements which must always be self-closing (e.g. "") + **/ + private final String[] vSelfClosingTags; + /** + * html elements which must always have separate opening and closing tags (e.g. "") + **/ + private final String[] vNeedClosingTags; + /** + * set of disallowed html elements + **/ + private final String[] vDisallowed; + /** + * attributes which should be checked for valid protocols + **/ + private final String[] vProtocolAtts; + /** + * allowed protocols + **/ + private final String[] vAllowedProtocols; + /** + * tags which should be removed if they contain no content (e.g. "" or "") + **/ + private final String[] vRemoveBlanks; + /** + * entities allowed within html markup + **/ + private final String[] vAllowedEntities; + /** + * flag determining whether comments are allowed in input String. + */ + private final boolean stripComment; + private final boolean encodeQuotes; + /** + * flag determining whether to try to make tags when presented with "unbalanced" angle brackets (e.g. "" + * becomes " text "). If set to false, unbalanced angle brackets will be html escaped. + */ + private final boolean alwaysMakeTags; + + /** + * Default constructor. + */ + public HTMLFilter() + { + vAllowed = new HashMap<>(); + + final ArrayList a_atts = new ArrayList<>(); + a_atts.add("href"); + a_atts.add("target"); + vAllowed.put("a", a_atts); + + final ArrayList img_atts = new ArrayList<>(); + img_atts.add("src"); + img_atts.add("width"); + img_atts.add("height"); + img_atts.add("alt"); + vAllowed.put("img", img_atts); + + final ArrayList no_atts = new ArrayList<>(); + vAllowed.put("b", no_atts); + vAllowed.put("strong", no_atts); + vAllowed.put("i", no_atts); + vAllowed.put("em", no_atts); + + vSelfClosingTags = new String[] { "img" }; + vNeedClosingTags = new String[] { "a", "b", "strong", "i", "em" }; + vDisallowed = new String[] {}; + vAllowedProtocols = new String[] { "http", "mailto", "https" }; // no ftp. + vProtocolAtts = new String[] { "src", "href" }; + vRemoveBlanks = new String[] { "a", "b", "strong", "i", "em" }; + vAllowedEntities = new String[] { "amp", "gt", "lt", "quot" }; + stripComment = true; + encodeQuotes = true; + alwaysMakeTags = false; + } + + /** + * Map-parameter configurable constructor. + * + * @param conf map containing configuration. keys match field names. + */ + @SuppressWarnings("unchecked") + public HTMLFilter(final Map conf) + { + + assert conf.containsKey("vAllowed") : "configuration requires vAllowed"; + assert conf.containsKey("vSelfClosingTags") : "configuration requires vSelfClosingTags"; + assert conf.containsKey("vNeedClosingTags") : "configuration requires vNeedClosingTags"; + assert conf.containsKey("vDisallowed") : "configuration requires vDisallowed"; + assert conf.containsKey("vAllowedProtocols") : "configuration requires vAllowedProtocols"; + assert conf.containsKey("vProtocolAtts") : "configuration requires vProtocolAtts"; + assert conf.containsKey("vRemoveBlanks") : "configuration requires vRemoveBlanks"; + assert conf.containsKey("vAllowedEntities") : "configuration requires vAllowedEntities"; + + vAllowed = Collections.unmodifiableMap((HashMap>) conf.get("vAllowed")); + vSelfClosingTags = (String[]) conf.get("vSelfClosingTags"); + vNeedClosingTags = (String[]) conf.get("vNeedClosingTags"); + vDisallowed = (String[]) conf.get("vDisallowed"); + vAllowedProtocols = (String[]) conf.get("vAllowedProtocols"); + vProtocolAtts = (String[]) conf.get("vProtocolAtts"); + vRemoveBlanks = (String[]) conf.get("vRemoveBlanks"); + vAllowedEntities = (String[]) conf.get("vAllowedEntities"); + stripComment = conf.containsKey("stripComment") ? (Boolean) conf.get("stripComment") : true; + encodeQuotes = conf.containsKey("encodeQuotes") ? (Boolean) conf.get("encodeQuotes") : true; + alwaysMakeTags = conf.containsKey("alwaysMakeTags") ? (Boolean) conf.get("alwaysMakeTags") : true; + } + + private void reset() + { + vTagCounts.clear(); + } + + // --------------------------------------------------------------- + // my versions of some PHP library functions + public static String chr(final int decimal) + { + return String.valueOf((char) decimal); + } + + public static String htmlSpecialChars(final String s) + { + String result = s; + result = regexReplace(P_AMP, "&", result); + result = regexReplace(P_QUOTE, """, result); + result = regexReplace(P_LEFT_ARROW, "<", result); + result = regexReplace(P_RIGHT_ARROW, ">", result); + return result; + } + + // --------------------------------------------------------------- + + /** + * given a user submitted input String, filter out any invalid or restricted html. + * + * @param input text (i.e. submitted by a user) than may contain html + * @return "clean" version of input, with only valid, whitelisted html elements allowed + */ + public String filter(final String input) + { + reset(); + String s = input; + + s = escapeComments(s); + + s = balanceHTML(s); + + s = checkTags(s); + + s = processRemoveBlanks(s); + + // s = validateEntities(s); + + return s; + } + + public boolean isAlwaysMakeTags() + { + return alwaysMakeTags; + } + + public boolean isStripComments() + { + return stripComment; + } + + private String escapeComments(final String s) + { + final Matcher m = P_COMMENTS.matcher(s); + final StringBuffer buf = new StringBuffer(); + if (m.find()) + { + final String match = m.group(1); // (.*?) + m.appendReplacement(buf, Matcher.quoteReplacement("")); + } + m.appendTail(buf); + + return buf.toString(); + } + + private String balanceHTML(String s) + { + if (alwaysMakeTags) + { + // + // try and form html + // + s = regexReplace(P_END_ARROW, "", s); + // 涓嶈拷鍔犵粨鏉熸爣绛 + s = regexReplace(P_BODY_TO_END, "<$1>", s); + s = regexReplace(P_XML_CONTENT, "$1<$2", s); + + } + else + { + // + // escape stray brackets + // + s = regexReplace(P_STRAY_LEFT_ARROW, "<$1", s); + s = regexReplace(P_STRAY_RIGHT_ARROW, "$1$2><", s); + + // + // the last regexp causes '<>' entities to appear + // (we need to do a lookahead assertion so that the last bracket can + // be used in the next pass of the regexp) + // + s = regexReplace(P_BOTH_ARROWS, "", s); + } + + return s; + } + + private String checkTags(String s) + { + Matcher m = P_TAGS.matcher(s); + + final StringBuffer buf = new StringBuffer(); + while (m.find()) + { + String replaceStr = m.group(1); + replaceStr = processTag(replaceStr); + m.appendReplacement(buf, Matcher.quoteReplacement(replaceStr)); + } + m.appendTail(buf); + + // these get tallied in processTag + // (remember to reset before subsequent calls to filter method) + final StringBuilder sBuilder = new StringBuilder(buf.toString()); + for (String key : vTagCounts.keySet()) + { + for (int ii = 0; ii < vTagCounts.get(key); ii++) + { + sBuilder.append(""); + } + } + s = sBuilder.toString(); + + return s; + } + + private String processRemoveBlanks(final String s) + { + String result = s; + for (String tag : vRemoveBlanks) + { + if (!P_REMOVE_PAIR_BLANKS.containsKey(tag)) + { + P_REMOVE_PAIR_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?>")); + } + result = regexReplace(P_REMOVE_PAIR_BLANKS.get(tag), "", result); + if (!P_REMOVE_SELF_BLANKS.containsKey(tag)) + { + P_REMOVE_SELF_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?/>")); + } + result = regexReplace(P_REMOVE_SELF_BLANKS.get(tag), "", result); + } + + return result; + } + + private static String regexReplace(final Pattern regex_pattern, final String replacement, final String s) + { + Matcher m = regex_pattern.matcher(s); + return m.replaceAll(replacement); + } + + private String processTag(final String s) + { + // ending tags + Matcher m = P_END_TAG.matcher(s); + if (m.find()) + { + final String name = m.group(1).toLowerCase(); + if (allowed(name)) + { + if (!inArray(name, vSelfClosingTags)) + { + if (vTagCounts.containsKey(name)) + { + vTagCounts.put(name, vTagCounts.get(name) - 1); + return ""; + } + } + } + } + + // starting tags + m = P_START_TAG.matcher(s); + if (m.find()) + { + final String name = m.group(1).toLowerCase(); + final String body = m.group(2); + String ending = m.group(3); + + // debug( "in a starting tag, name='" + name + "'; body='" + body + "'; ending='" + ending + "'" ); + if (allowed(name)) + { + final StringBuilder params = new StringBuilder(); + + final Matcher m2 = P_QUOTED_ATTRIBUTES.matcher(body); + final Matcher m3 = P_UNQUOTED_ATTRIBUTES.matcher(body); + final List paramNames = new ArrayList<>(); + final List paramValues = new ArrayList<>(); + while (m2.find()) + { + paramNames.add(m2.group(1)); // ([a-z0-9]+) + paramValues.add(m2.group(3)); // (.*?) + } + while (m3.find()) + { + paramNames.add(m3.group(1)); // ([a-z0-9]+) + paramValues.add(m3.group(3)); // ([^\"\\s']+) + } + + String paramName, paramValue; + for (int ii = 0; ii < paramNames.size(); ii++) + { + paramName = paramNames.get(ii).toLowerCase(); + paramValue = paramValues.get(ii); + + // debug( "paramName='" + paramName + "'" ); + // debug( "paramValue='" + paramValue + "'" ); + // debug( "allowed? " + vAllowed.get( name ).contains( paramName ) ); + + if (allowedAttribute(name, paramName)) + { + if (inArray(paramName, vProtocolAtts)) + { + paramValue = processParamProtocol(paramValue); + } + params.append(' ').append(paramName).append("=\\\"").append(paramValue).append("\\\""); + } + } + + if (inArray(name, vSelfClosingTags)) + { + ending = " /"; + } + + if (inArray(name, vNeedClosingTags)) + { + ending = ""; + } + + if (ending == null || ending.length() < 1) + { + if (vTagCounts.containsKey(name)) + { + vTagCounts.put(name, vTagCounts.get(name) + 1); + } + else + { + vTagCounts.put(name, 1); + } + } + else + { + ending = " /"; + } + return "<" + name + params + ending + ">"; + } + else + { + return ""; + } + } + + // comments + m = P_COMMENT.matcher(s); + if (!stripComment && m.find()) + { + return "<" + m.group() + ">"; + } + + return ""; + } + + private String processParamProtocol(String s) + { + s = decodeEntities(s); + final Matcher m = P_PROTOCOL.matcher(s); + if (m.find()) + { + final String protocol = m.group(1); + if (!inArray(protocol, vAllowedProtocols)) + { + // bad protocol, turn into local anchor link instead + s = "#" + s.substring(protocol.length() + 1); + if (s.startsWith("#//")) + { + s = "#" + s.substring(3); + } + } + } + + return s; + } + + private String decodeEntities(String s) + { + StringBuffer buf = new StringBuffer(); + + Matcher m = P_ENTITY.matcher(s); + while (m.find()) + { + final String match = m.group(1); + final int decimal = Integer.decode(match).intValue(); + m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal))); + } + m.appendTail(buf); + s = buf.toString(); + + buf = new StringBuffer(); + m = P_ENTITY_UNICODE.matcher(s); + while (m.find()) + { + final String match = m.group(1); + final int decimal = Integer.valueOf(match, 16).intValue(); + m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal))); + } + m.appendTail(buf); + s = buf.toString(); + + buf = new StringBuffer(); + m = P_ENCODE.matcher(s); + while (m.find()) + { + final String match = m.group(1); + final int decimal = Integer.valueOf(match, 16).intValue(); + m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal))); + } + m.appendTail(buf); + s = buf.toString(); + + s = validateEntities(s); + return s; + } + + private String validateEntities(final String s) + { + StringBuffer buf = new StringBuffer(); + + // validate entities throughout the string + Matcher m = P_VALID_ENTITIES.matcher(s); + while (m.find()) + { + final String one = m.group(1); // ([^&;]*) + final String two = m.group(2); // (?=(;|&|$)) + m.appendReplacement(buf, Matcher.quoteReplacement(checkEntity(one, two))); + } + m.appendTail(buf); + + return encodeQuotes(buf.toString()); + } + + private String encodeQuotes(final String s) + { + if (encodeQuotes) + { + StringBuffer buf = new StringBuffer(); + Matcher m = P_VALID_QUOTES.matcher(s); + while (m.find()) + { + final String one = m.group(1); // (>|^) + final String two = m.group(2); // ([^<]+?) + final String three = m.group(3); // (<|$) + // 涓嶆浛鎹㈠弻寮曞彿涓"锛岄槻姝son鏍煎紡鏃犳晥 regexReplace(P_QUOTE, """, two) + m.appendReplacement(buf, Matcher.quoteReplacement(one + two + three)); + } + m.appendTail(buf); + return buf.toString(); + } + else + { + return s; + } + } + + private String checkEntity(final String preamble, final String term) + { + + return ";".equals(term) && isValidEntity(preamble) ? '&' + preamble : "&" + preamble; + } + + private boolean isValidEntity(final String entity) + { + return inArray(entity, vAllowedEntities); + } + + private static boolean inArray(final String s, final String[] array) + { + for (String item : array) + { + if (item != null && item.equals(s)) + { + return true; + } + } + return false; + } + + private boolean allowed(final String name) + { + return (vAllowed.isEmpty() || vAllowed.containsKey(name)) && !inArray(name, vDisallowed); + } + + private boolean allowedAttribute(final String name, final String paramName) + { + return allowed(name) && (vAllowed.isEmpty() || vAllowed.get(name).contains(paramName)); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/http/HttpHelper.java b/evo-admin/src/main/java/com/evo/common/utils/http/HttpHelper.java new file mode 100644 index 0000000..e85f072 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/http/HttpHelper.java @@ -0,0 +1,55 @@ +package com.evo.common.utils.http; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import javax.servlet.ServletRequest; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 閫氱敤http宸ュ叿灏佽 + * + * @author evo + */ +public class HttpHelper +{ + private static final Logger LOGGER = LoggerFactory.getLogger(HttpHelper.class); + + public static String getBodyString(ServletRequest request) + { + StringBuilder sb = new StringBuilder(); + BufferedReader reader = null; + try (InputStream inputStream = request.getInputStream()) + { + reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + String line = ""; + while ((line = reader.readLine()) != null) + { + sb.append(line); + } + } + catch (IOException e) + { + LOGGER.warn("getBodyString鍑虹幇闂锛"); + } + finally + { + if (reader != null) + { + try + { + reader.close(); + } + catch (IOException e) + { + LOGGER.error(ExceptionUtils.getMessage(e)); + } + } + } + return sb.toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/http/HttpUtils.java b/evo-admin/src/main/java/com/evo/common/utils/http/HttpUtils.java new file mode 100644 index 0000000..93935e1 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/http/HttpUtils.java @@ -0,0 +1,274 @@ +package com.evo.common.utils.http; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.ConnectException; +import java.net.SocketTimeoutException; +import java.net.URL; +import java.net.URLConnection; +import java.nio.charset.StandardCharsets; +import java.security.cert.X509Certificate; +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSession; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.evo.common.constant.Constants; +import com.evo.common.utils.StringUtils; + +/** + * 閫氱敤http鍙戦佹柟娉 + * + * @author evo + */ +public class HttpUtils +{ + private static final Logger log = LoggerFactory.getLogger(HttpUtils.class); + + /** + * 鍚戞寚瀹 URL 鍙戦丟ET鏂规硶鐨勮姹 + * + * @param url 鍙戦佽姹傜殑 URL + * @return 鎵浠h〃杩滅▼璧勬簮鐨勫搷搴旂粨鏋 + */ + public static String sendGet(String url) + { + return sendGet(url, StringUtils.EMPTY); + } + + /** + * 鍚戞寚瀹 URL 鍙戦丟ET鏂规硶鐨勮姹 + * + * @param url 鍙戦佽姹傜殑 URL + * @param param 璇锋眰鍙傛暟锛岃姹傚弬鏁板簲璇ユ槸 name1=value1&name2=value2 鐨勫舰寮忋 + * @return 鎵浠h〃杩滅▼璧勬簮鐨勫搷搴旂粨鏋 + */ + public static String sendGet(String url, String param) + { + return sendGet(url, param, Constants.UTF8); + } + + /** + * 鍚戞寚瀹 URL 鍙戦丟ET鏂规硶鐨勮姹 + * + * @param url 鍙戦佽姹傜殑 URL + * @param param 璇锋眰鍙傛暟锛岃姹傚弬鏁板簲璇ユ槸 name1=value1&name2=value2 鐨勫舰寮忋 + * @param contentType 缂栫爜绫诲瀷 + * @return 鎵浠h〃杩滅▼璧勬簮鐨勫搷搴旂粨鏋 + */ + public static String sendGet(String url, String param, String contentType) + { + StringBuilder result = new StringBuilder(); + BufferedReader in = null; + try + { + String urlNameString = StringUtils.isNotBlank(param) ? url + "?" + param : url; + log.info("sendGet - {}", urlNameString); + URL realUrl = new URL(urlNameString); + URLConnection connection = realUrl.openConnection(); + connection.setRequestProperty("accept", "*/*"); + connection.setRequestProperty("connection", "Keep-Alive"); + connection.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"); + connection.connect(); + in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType)); + String line; + while ((line = in.readLine()) != null) + { + result.append(line); + } + log.info("recv - {}", result); + } + catch (ConnectException e) + { + log.error("璋冪敤HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e); + } + catch (SocketTimeoutException e) + { + log.error("璋冪敤HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e); + } + catch (IOException e) + { + log.error("璋冪敤HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e); + } + catch (Exception e) + { + log.error("璋冪敤HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e); + } + finally + { + try + { + if (in != null) + { + in.close(); + } + } + catch (Exception ex) + { + log.error("璋冪敤in.close Exception, url=" + url + ",param=" + param, ex); + } + } + return result.toString(); + } + + /** + * 鍚戞寚瀹 URL 鍙戦丳OST鏂规硶鐨勮姹 + * + * @param url 鍙戦佽姹傜殑 URL + * @param param 璇锋眰鍙傛暟锛岃姹傚弬鏁板簲璇ユ槸 name1=value1&name2=value2 鐨勫舰寮忋 + * @return 鎵浠h〃杩滅▼璧勬簮鐨勫搷搴旂粨鏋 + */ + public static String sendPost(String url, String param) + { + PrintWriter out = null; + BufferedReader in = null; + StringBuilder result = new StringBuilder(); + try + { + log.info("sendPost - {}", url); + URL realUrl = new URL(url); + URLConnection conn = realUrl.openConnection(); + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"); + conn.setRequestProperty("Accept-Charset", "UTF-8"); + conn.setRequestProperty("contentType", "UTF-8"); + conn.setDoOutput(true); + conn.setDoInput(true); + out = new PrintWriter(conn.getOutputStream()); + out.print(param); + out.flush(); + in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8)); + String line; + while ((line = in.readLine()) != null) + { + result.append(line); + } + log.info("recv - {}", result); + } + catch (ConnectException e) + { + log.error("璋冪敤HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e); + } + catch (SocketTimeoutException e) + { + log.error("璋冪敤HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e); + } + catch (IOException e) + { + log.error("璋冪敤HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e); + } + catch (Exception e) + { + log.error("璋冪敤HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e); + } + finally + { + try + { + if (out != null) + { + out.close(); + } + if (in != null) + { + in.close(); + } + } + catch (IOException ex) + { + log.error("璋冪敤in.close Exception, url=" + url + ",param=" + param, ex); + } + } + return result.toString(); + } + + public static String sendSSLPost(String url, String param) + { + StringBuilder result = new StringBuilder(); + String urlNameString = url + "?" + param; + try + { + log.info("sendSSLPost - {}", urlNameString); + SSLContext sc = SSLContext.getInstance("SSL"); + sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom()); + URL console = new URL(urlNameString); + HttpsURLConnection conn = (HttpsURLConnection) console.openConnection(); + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"); + conn.setRequestProperty("Accept-Charset", "utf-8"); + conn.setRequestProperty("contentType", "utf-8"); + conn.setDoOutput(true); + conn.setDoInput(true); + + conn.setSSLSocketFactory(sc.getSocketFactory()); + conn.setHostnameVerifier(new TrustAnyHostnameVerifier()); + conn.connect(); + InputStream is = conn.getInputStream(); + BufferedReader br = new BufferedReader(new InputStreamReader(is)); + String ret = ""; + while ((ret = br.readLine()) != null) + { + if (ret != null && !"".equals(ret.trim())) + { + result.append(new String(ret.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8)); + } + } + log.info("recv - {}", result); + conn.disconnect(); + br.close(); + } + catch (ConnectException e) + { + log.error("璋冪敤HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e); + } + catch (SocketTimeoutException e) + { + log.error("璋冪敤HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e); + } + catch (IOException e) + { + log.error("璋冪敤HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e); + } + catch (Exception e) + { + log.error("璋冪敤HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e); + } + return result.toString(); + } + + private static class TrustAnyTrustManager implements X509TrustManager + { + @Override + public void checkClientTrusted(X509Certificate[] chain, String authType) + { + } + + @Override + public void checkServerTrusted(X509Certificate[] chain, String authType) + { + } + + @Override + public X509Certificate[] getAcceptedIssuers() + { + return new X509Certificate[] {}; + } + } + + private static class TrustAnyHostnameVerifier implements HostnameVerifier + { + @Override + public boolean verify(String hostname, SSLSession session) + { + return true; + } + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/ip/AddressUtils.java b/evo-admin/src/main/java/com/evo/common/utils/ip/AddressUtils.java new file mode 100644 index 0000000..f56f7ce --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/ip/AddressUtils.java @@ -0,0 +1,56 @@ +package com.evo.common.utils.ip; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.evo.common.config.EvoConfig; +import com.evo.common.constant.Constants; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.http.HttpUtils; + +/** + * 鑾峰彇鍦板潃绫 + * + * @author evo + */ +public class AddressUtils +{ + private static final Logger log = LoggerFactory.getLogger(AddressUtils.class); + + // IP鍦板潃鏌ヨ + public static final String IP_URL = "http://whois.pconline.com.cn/ipJson.jsp"; + + // 鏈煡鍦板潃 + public static final String UNKNOWN = "XX XX"; + + public static String getRealAddressByIP(String ip) + { + // 鍐呯綉涓嶆煡璇 + if (IpUtils.internalIp(ip)) + { + return "鍐呯綉IP"; + } + if (EvoConfig.isAddressEnabled()) + { + try + { + String rspStr = HttpUtils.sendGet(IP_URL, "ip=" + ip + "&json=true", Constants.GBK); + if (StringUtils.isEmpty(rspStr)) + { + log.error("鑾峰彇鍦扮悊浣嶇疆寮傚父 {}", ip); + return UNKNOWN; + } + JSONObject obj = JSON.parseObject(rspStr); + String region = obj.getString("pro"); + String city = obj.getString("city"); + return String.format("%s %s", region, city); + } + catch (Exception e) + { + log.error("鑾峰彇鍦扮悊浣嶇疆寮傚父 {}", ip); + } + } + return UNKNOWN; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/ip/IpUtils.java b/evo-admin/src/main/java/com/evo/common/utils/ip/IpUtils.java new file mode 100644 index 0000000..9485b86 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/ip/IpUtils.java @@ -0,0 +1,382 @@ +package com.evo.common.utils.ip; + +import java.net.InetAddress; +import java.net.UnknownHostException; +import javax.servlet.http.HttpServletRequest; +import com.evo.common.utils.ServletUtils; +import com.evo.common.utils.StringUtils; + +/** + * 鑾峰彇IP鏂规硶 + * + * @author evo + */ +public class IpUtils +{ + public final static String REGX_0_255 = "(25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)"; + // 鍖归厤 ip + public final static String REGX_IP = "((" + REGX_0_255 + "\\.){3}" + REGX_0_255 + ")"; + public final static String REGX_IP_WILDCARD = "(((\\*\\.){3}\\*)|(" + REGX_0_255 + "(\\.\\*){3})|(" + REGX_0_255 + "\\." + REGX_0_255 + ")(\\.\\*){2}" + "|((" + REGX_0_255 + "\\.){3}\\*))"; + // 鍖归厤缃戞 + public final static String REGX_IP_SEG = "(" + REGX_IP + "\\-" + REGX_IP + ")"; + + /** + * 鑾峰彇瀹㈡埛绔疘P + * + * @return IP鍦板潃 + */ + public static String getIpAddr() + { + return getIpAddr(ServletUtils.getRequest()); + } + + /** + * 鑾峰彇瀹㈡埛绔疘P + * + * @param request 璇锋眰瀵硅薄 + * @return IP鍦板潃 + */ + public static String getIpAddr(HttpServletRequest request) + { + if (request == null) + { + return "unknown"; + } + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getHeader("X-Forwarded-For"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getHeader("X-Real-IP"); + } + + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getRemoteAddr(); + } + + return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : getMultistageReverseProxyIp(ip); + } + + /** + * 妫鏌ユ槸鍚︿负鍐呴儴IP鍦板潃 + * + * @param ip IP鍦板潃 + * @return 缁撴灉 + */ + public static boolean internalIp(String ip) + { + byte[] addr = textToNumericFormatV4(ip); + return internalIp(addr) || "127.0.0.1".equals(ip); + } + + /** + * 妫鏌ユ槸鍚︿负鍐呴儴IP鍦板潃 + * + * @param addr byte鍦板潃 + * @return 缁撴灉 + */ + private static boolean internalIp(byte[] addr) + { + if (StringUtils.isNull(addr) || addr.length < 2) + { + return true; + } + final byte b0 = addr[0]; + final byte b1 = addr[1]; + // 10.x.x.x/8 + final byte SECTION_1 = 0x0A; + // 172.16.x.x/12 + final byte SECTION_2 = (byte) 0xAC; + final byte SECTION_3 = (byte) 0x10; + final byte SECTION_4 = (byte) 0x1F; + // 192.168.x.x/16 + final byte SECTION_5 = (byte) 0xC0; + final byte SECTION_6 = (byte) 0xA8; + switch (b0) + { + case SECTION_1: + return true; + case SECTION_2: + if (b1 >= SECTION_3 && b1 <= SECTION_4) + { + return true; + } + case SECTION_5: + switch (b1) + { + case SECTION_6: + return true; + } + default: + return false; + } + } + + /** + * 灏咺Pv4鍦板潃杞崲鎴愬瓧鑺 + * + * @param text IPv4鍦板潃 + * @return byte 瀛楄妭 + */ + public static byte[] textToNumericFormatV4(String text) + { + if (text.length() == 0) + { + return null; + } + + byte[] bytes = new byte[4]; + String[] elements = text.split("\\.", -1); + try + { + long l; + int i; + switch (elements.length) + { + case 1: + l = Long.parseLong(elements[0]); + if ((l < 0L) || (l > 4294967295L)) + { + return null; + } + bytes[0] = (byte) (int) (l >> 24 & 0xFF); + bytes[1] = (byte) (int) ((l & 0xFFFFFF) >> 16 & 0xFF); + bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 2: + l = Integer.parseInt(elements[0]); + if ((l < 0L) || (l > 255L)) + { + return null; + } + bytes[0] = (byte) (int) (l & 0xFF); + l = Integer.parseInt(elements[1]); + if ((l < 0L) || (l > 16777215L)) + { + return null; + } + bytes[1] = (byte) (int) (l >> 16 & 0xFF); + bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 3: + for (i = 0; i < 2; ++i) + { + l = Integer.parseInt(elements[i]); + if ((l < 0L) || (l > 255L)) + { + return null; + } + bytes[i] = (byte) (int) (l & 0xFF); + } + l = Integer.parseInt(elements[2]); + if ((l < 0L) || (l > 65535L)) + { + return null; + } + bytes[2] = (byte) (int) (l >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 4: + for (i = 0; i < 4; ++i) + { + l = Integer.parseInt(elements[i]); + if ((l < 0L) || (l > 255L)) + { + return null; + } + bytes[i] = (byte) (int) (l & 0xFF); + } + break; + default: + return null; + } + } + catch (NumberFormatException e) + { + return null; + } + return bytes; + } + + /** + * 鑾峰彇IP鍦板潃 + * + * @return 鏈湴IP鍦板潃 + */ + public static String getHostIp() + { + try + { + return InetAddress.getLocalHost().getHostAddress(); + } + catch (UnknownHostException e) + { + } + return "127.0.0.1"; + } + + /** + * 鑾峰彇涓绘満鍚 + * + * @return 鏈湴涓绘満鍚 + */ + public static String getHostName() + { + try + { + return InetAddress.getLocalHost().getHostName(); + } + catch (UnknownHostException e) + { + } + return "鏈煡"; + } + + /** + * 浠庡绾у弽鍚戜唬鐞嗕腑鑾峰緱绗竴涓潪unknown IP鍦板潃 + * + * @param ip 鑾峰緱鐨処P鍦板潃 + * @return 绗竴涓潪unknown IP鍦板潃 + */ + public static String getMultistageReverseProxyIp(String ip) + { + // 澶氱骇鍙嶅悜浠g悊妫娴 + if (ip != null && ip.indexOf(",") > 0) + { + final String[] ips = ip.trim().split(","); + for (String subIp : ips) + { + if (false == isUnknown(subIp)) + { + ip = subIp; + break; + } + } + } + return StringUtils.substring(ip, 0, 255); + } + + /** + * 妫娴嬬粰瀹氬瓧绗︿覆鏄惁涓烘湭鐭ワ紝澶氱敤浜庢娴婬TTP璇锋眰鐩稿叧 + * + * @param checkString 琚娴嬬殑瀛楃涓 + * @return 鏄惁鏈煡 + */ + public static boolean isUnknown(String checkString) + { + return StringUtils.isBlank(checkString) || "unknown".equalsIgnoreCase(checkString); + } + + /** + * 鏄惁涓篒P + */ + public static boolean isIP(String ip) + { + return StringUtils.isNotBlank(ip) && ip.matches(REGX_IP); + } + + /** + * 鏄惁涓篒P锛屾垨 *涓洪棿闅旂殑閫氶厤绗﹀湴鍧 + */ + public static boolean isIpWildCard(String ip) + { + return StringUtils.isNotBlank(ip) && ip.matches(REGX_IP_WILDCARD); + } + + /** + * 妫娴嬪弬鏁版槸鍚﹀湪ip閫氶厤绗﹂噷 + */ + public static boolean ipIsInWildCardNoCheck(String ipWildCard, String ip) + { + String[] s1 = ipWildCard.split("\\."); + String[] s2 = ip.split("\\."); + boolean isMatchedSeg = true; + for (int i = 0; i < s1.length && !s1[i].equals("*"); i++) + { + if (!s1[i].equals(s2[i])) + { + isMatchedSeg = false; + break; + } + } + return isMatchedSeg; + } + + /** + * 鏄惁涓虹壒瀹氭牸寮忓:鈥10.10.10.1-10.10.10.99鈥濈殑ip娈靛瓧绗︿覆 + */ + public static boolean isIPSegment(String ipSeg) + { + return StringUtils.isNotBlank(ipSeg) && ipSeg.matches(REGX_IP_SEG); + } + + /** + * 鍒ゆ柇ip鏄惁鍦ㄦ寚瀹氱綉娈典腑 + */ + public static boolean ipIsInNetNoCheck(String iparea, String ip) + { + int idx = iparea.indexOf('-'); + String[] sips = iparea.substring(0, idx).split("\\."); + String[] sipe = iparea.substring(idx + 1).split("\\."); + String[] sipt = ip.split("\\."); + long ips = 0L, ipe = 0L, ipt = 0L; + for (int i = 0; i < 4; ++i) + { + ips = ips << 8 | Integer.parseInt(sips[i]); + ipe = ipe << 8 | Integer.parseInt(sipe[i]); + ipt = ipt << 8 | Integer.parseInt(sipt[i]); + } + if (ips > ipe) + { + long t = ips; + ips = ipe; + ipe = t; + } + return ips <= ipt && ipt <= ipe; + } + + /** + * 鏍¢獙ip鏄惁绗﹀悎杩囨护涓茶鍒 + * + * @param filter 杩囨护IP鍒楄〃,鏀寔鍚庣紑'*'閫氶厤,鏀寔缃戞濡:`10.10.10.1-10.10.10.99` + * @param ip 鏍¢獙IP鍦板潃 + * @return boolean 缁撴灉 + */ + public static boolean isMatchedIp(String filter, String ip) + { + if (StringUtils.isEmpty(filter) || StringUtils.isEmpty(ip)) + { + return false; + } + String[] ips = filter.split(";"); + for (String iStr : ips) + { + if (isIP(iStr) && iStr.equals(ip)) + { + return true; + } + else if (isIpWildCard(iStr) && ipIsInWildCardNoCheck(iStr, ip)) + { + return true; + } + else if (isIPSegment(iStr) && ipIsInNetNoCheck(iStr, ip)) + { + return true; + } + } + return false; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/poi/ExcelHandlerAdapter.java b/evo-admin/src/main/java/com/evo/common/utils/poi/ExcelHandlerAdapter.java new file mode 100644 index 0000000..c911b71 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/poi/ExcelHandlerAdapter.java @@ -0,0 +1,24 @@ +package com.evo.common.utils.poi; + +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Workbook; + +/** + * Excel鏁版嵁鏍煎紡澶勭悊閫傞厤鍣 + * + * @author evo + */ +public interface ExcelHandlerAdapter +{ + /** + * 鏍煎紡鍖 + * + * @param value 鍗曞厓鏍兼暟鎹 + * @param args excel娉ㄨВargs鍙傛暟缁 + * @param cell 鍗曞厓鏍煎璞 + * @param wb 宸ヤ綔绨垮璞 + * + * @return 澶勭悊鍚庣殑鍊 + */ + Object format(Object value, String[] args, Cell cell, Workbook wb); +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/poi/ExcelUtil.java b/evo-admin/src/main/java/com/evo/common/utils/poi/ExcelUtil.java new file mode 100644 index 0000000..2733761 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/poi/ExcelUtil.java @@ -0,0 +1,1812 @@ +package com.evo.common.utils.poi; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.ParameterizedType; +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Comparator; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import java.util.stream.Collectors; +import javax.servlet.http.HttpServletResponse; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.RegExUtils; +import org.apache.commons.lang3.reflect.FieldUtils; +import org.apache.poi.hssf.usermodel.HSSFClientAnchor; +import org.apache.poi.hssf.usermodel.HSSFPicture; +import org.apache.poi.hssf.usermodel.HSSFPictureData; +import org.apache.poi.hssf.usermodel.HSSFShape; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ooxml.POIXMLDocumentPart; +import org.apache.poi.ss.usermodel.BorderStyle; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.ss.usermodel.CellType; +import org.apache.poi.ss.usermodel.ClientAnchor; +import org.apache.poi.ss.usermodel.DataFormat; +import org.apache.poi.ss.usermodel.DataValidation; +import org.apache.poi.ss.usermodel.DataValidationConstraint; +import org.apache.poi.ss.usermodel.DataValidationHelper; +import org.apache.poi.ss.usermodel.DateUtil; +import org.apache.poi.ss.usermodel.Drawing; +import org.apache.poi.ss.usermodel.FillPatternType; +import org.apache.poi.ss.usermodel.Font; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.IndexedColors; +import org.apache.poi.ss.usermodel.Name; +import org.apache.poi.ss.usermodel.PictureData; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.VerticalAlignment; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.WorkbookFactory; +import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.ss.util.CellRangeAddressList; +import org.apache.poi.util.IOUtils; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.apache.poi.xssf.usermodel.XSSFClientAnchor; +import org.apache.poi.xssf.usermodel.XSSFDataValidation; +import org.apache.poi.xssf.usermodel.XSSFDrawing; +import org.apache.poi.xssf.usermodel.XSSFPicture; +import org.apache.poi.xssf.usermodel.XSSFShape; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.evo.common.annotation.Excel; +import com.evo.common.annotation.Excel.ColumnType; +import com.evo.common.annotation.Excel.Type; +import com.evo.common.annotation.Excels; +import com.evo.common.config.EvoConfig; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.text.Convert; +import com.evo.common.exception.UtilException; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.DictUtils; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.file.FileTypeUtils; +import com.evo.common.utils.file.FileUtils; +import com.evo.common.utils.file.ImageUtils; +import com.evo.common.utils.reflect.ReflectUtils; + +/** + * Excel鐩稿叧澶勭悊 + * + * @author evo + */ +public class ExcelUtil +{ + private static final Logger log = LoggerFactory.getLogger(ExcelUtil.class); + + public static final String FORMULA_REGEX_STR = "=|-|\\+|@"; + + public static final String[] FORMULA_STR = { "=", "-", "+", "@" }; + + /** + * 鐢ㄤ簬dictType灞炴ф暟鎹瓨鍌紝閬垮厤閲嶅鏌ョ紦瀛 + */ + public Map sysDictMap = new HashMap(); + + /** + * Excel sheet鏈澶ц鏁帮紝榛樿65536 + */ + public static final int sheetSize = 65536; + + /** + * 宸ヤ綔琛ㄥ悕绉 + */ + private String sheetName; + + /** + * 瀵煎嚭绫诲瀷锛圗XPORT:瀵煎嚭鏁版嵁锛汭MPORT锛氬鍏ユā鏉匡級 + */ + private Type type; + + /** + * 宸ヤ綔钖勫璞 + */ + private Workbook wb; + + /** + * 宸ヤ綔琛ㄥ璞 + */ + private Sheet sheet; + + /** + * 鏍峰紡鍒楄〃 + */ + private Map styles; + + /** + * 瀵煎叆瀵煎嚭鏁版嵁鍒楄〃 + */ + private List list; + + /** + * 娉ㄨВ鍒楄〃 + */ + private List fields; + + /** + * 褰撳墠琛屽彿 + */ + private int rownum; + + /** + * 鏍囬 + */ + private String title; + + /** + * 鏈澶ч珮搴 + */ + private short maxHeight; + + /** + * 鍚堝苟鍚庢渶鍚庤鏁 + */ + private int subMergedLastRowNum = 0; + + /** + * 鍚堝苟鍚庡紑濮嬭鏁 + */ + private int subMergedFirstRowNum = 1; + + /** + * 瀵硅薄鐨勫瓙鍒楄〃鏂规硶 + */ + private Method subMethod; + + /** + * 瀵硅薄鐨勫瓙鍒楄〃灞炴 + */ + private List subFields; + + /** + * 缁熻鍒楄〃 + */ + private Map statistics = new HashMap(); + + /** + * 鏁板瓧鏍煎紡 + */ + private static final DecimalFormat DOUBLE_FORMAT = new DecimalFormat("######0.00"); + + /** + * 瀹炰綋瀵硅薄 + */ + public Class clazz; + + /** + * 闇瑕佹帓闄ゅ垪灞炴 + */ + public String[] excludeFields; + + public ExcelUtil(Class clazz) + { + this.clazz = clazz; + } + + /** + * 闅愯棌Excel涓垪灞炴 + * + * @param fields 鍒楀睘鎬у悕 绀轰緥[鍗曚釜"name"/澶氫釜"id","name"] + * @throws Exception + */ + public void hideColumn(String... fields) + { + this.excludeFields = fields; + } + + public void init(List list, String sheetName, String title, Type type) + { + if (list == null) + { + list = new ArrayList(); + } + this.list = list; + this.sheetName = sheetName; + this.type = type; + this.title = title; + createExcelField(); + createWorkbook(); + createTitle(); + createSubHead(); + } + + /** + * 鍒涘缓excel绗竴琛屾爣棰 + */ + public void createTitle() + { + if (StringUtils.isNotEmpty(title)) + { + subMergedFirstRowNum++; + subMergedLastRowNum++; + int titleLastCol = this.fields.size() - 1; + if (isSubList()) + { + titleLastCol = titleLastCol + subFields.size() - 1; + } + Row titleRow = sheet.createRow(rownum == 0 ? rownum++ : 0); + titleRow.setHeightInPoints(30); + Cell titleCell = titleRow.createCell(0); + titleCell.setCellStyle(styles.get("title")); + titleCell.setCellValue(title); + sheet.addMergedRegion(new CellRangeAddress(titleRow.getRowNum(), titleRow.getRowNum(), titleRow.getRowNum(), titleLastCol)); + } + } + + /** + * 鍒涘缓瀵硅薄鐨勫瓙鍒楄〃鍚嶇О + */ + public void createSubHead() + { + if (isSubList()) + { + subMergedFirstRowNum++; + subMergedLastRowNum++; + Row subRow = sheet.createRow(rownum); + int excelNum = 0; + for (Object[] objects : fields) + { + Excel attr = (Excel) objects[1]; + Cell headCell1 = subRow.createCell(excelNum); + headCell1.setCellValue(attr.name()); + headCell1.setCellStyle(styles.get(StringUtils.format("header_{}_{}", attr.headerColor(), attr.headerBackgroundColor()))); + excelNum++; + } + int headFirstRow = excelNum - 1; + int headLastRow = headFirstRow + subFields.size() - 1; + if (headLastRow > headFirstRow) + { + sheet.addMergedRegion(new CellRangeAddress(rownum, rownum, headFirstRow, headLastRow)); + } + rownum++; + } + } + + /** + * 瀵筫xcel琛ㄥ崟榛樿绗竴涓储寮曞悕杞崲鎴恖ist + * + * @param is 杈撳叆娴 + * @return 杞崲鍚庨泦鍚 + */ + public List importExcel(InputStream is) + { + List list = null; + try + { + list = importExcel(is, 0); + } + catch (Exception e) + { + log.error("瀵煎叆Excel寮傚父{}", e.getMessage()); + throw new UtilException(e.getMessage()); + } + finally + { + IOUtils.closeQuietly(is); + } + return list; + } + + /** + * 瀵筫xcel琛ㄥ崟榛樿绗竴涓储寮曞悕杞崲鎴恖ist + * + * @param is 杈撳叆娴 + * @param titleNum 鏍囬鍗犵敤琛屾暟 + * @return 杞崲鍚庨泦鍚 + */ + public List importExcel(InputStream is, int titleNum) throws Exception + { + return importExcel(StringUtils.EMPTY, is, titleNum); + } + + /** + * 瀵筫xcel琛ㄥ崟鎸囧畾琛ㄦ牸绱㈠紩鍚嶈浆鎹㈡垚list + * + * @param sheetName 琛ㄦ牸绱㈠紩鍚 + * @param titleNum 鏍囬鍗犵敤琛屾暟 + * @param is 杈撳叆娴 + * @return 杞崲鍚庨泦鍚 + */ + public List importExcel(String sheetName, InputStream is, int titleNum) throws Exception + { + this.type = Type.IMPORT; + this.wb = WorkbookFactory.create(is); + List list = new ArrayList(); + // 濡傛灉鎸囧畾sheet鍚,鍒欏彇鎸囧畾sheet涓殑鍐呭 鍚﹀垯榛樿鎸囧悜绗1涓猻heet + Sheet sheet = StringUtils.isNotEmpty(sheetName) ? wb.getSheet(sheetName) : wb.getSheetAt(0); + if (sheet == null) + { + throw new IOException("鏂囦欢sheet涓嶅瓨鍦"); + } + boolean isXSSFWorkbook = !(wb instanceof HSSFWorkbook); + Map pictures; + if (isXSSFWorkbook) + { + pictures = getSheetPictures07((XSSFSheet) sheet, (XSSFWorkbook) wb); + } + else + { + pictures = getSheetPictures03((HSSFSheet) sheet, (HSSFWorkbook) wb); + } + // 鑾峰彇鏈鍚庝竴涓潪绌鸿鐨勮涓嬫爣锛屾瘮濡傛昏鏁颁负n锛屽垯杩斿洖鐨勪负n-1 + int rows = sheet.getLastRowNum(); + if (rows > 0) + { + // 瀹氫箟涓涓猰ap鐢ㄤ簬瀛樻斁excel鍒楃殑搴忓彿鍜宖ield. + Map cellMap = new HashMap(); + // 鑾峰彇琛ㄥご + Row heard = sheet.getRow(titleNum); + for (int i = 0; i < heard.getPhysicalNumberOfCells(); i++) + { + Cell cell = heard.getCell(i); + if (StringUtils.isNotNull(cell)) + { + String value = this.getCellValue(heard, i).toString(); + cellMap.put(value, i); + } + else + { + cellMap.put(null, i); + } + } + // 鏈夋暟鎹椂鎵嶅鐞 寰楀埌绫荤殑鎵鏈塮ield. + List fields = this.getFields(); + Map fieldsMap = new HashMap(); + for (Object[] objects : fields) + { + Excel attr = (Excel) objects[1]; + Integer column = cellMap.get(attr.name()); + if (column != null) + { + fieldsMap.put(column, objects); + } + } + for (int i = titleNum + 1; i <= rows; i++) + { + // 浠庣2琛屽紑濮嬪彇鏁版嵁,榛樿绗竴琛屾槸琛ㄥご. + Row row = sheet.getRow(i); + // 鍒ゆ柇褰撳墠琛屾槸鍚︽槸绌鸿 + if (isRowEmpty(row)) + { + continue; + } + T entity = null; + for (Map.Entry entry : fieldsMap.entrySet()) + { + Object val = this.getCellValue(row, entry.getKey()); + + // 濡傛灉涓嶅瓨鍦ㄥ疄渚嬪垯鏂板缓. + entity = (entity == null ? clazz.newInstance() : entity); + // 浠巑ap涓緱鍒板搴斿垪鐨刦ield. + Field field = (Field) entry.getValue()[0]; + Excel attr = (Excel) entry.getValue()[1]; + // 鍙栧緱绫诲瀷,骞舵牴鎹璞$被鍨嬭缃. + Class fieldType = field.getType(); + if (String.class == fieldType) + { + String s = Convert.toStr(val); + if (StringUtils.endsWith(s, ".0")) + { + val = StringUtils.substringBefore(s, ".0"); + } + else + { + String dateFormat = field.getAnnotation(Excel.class).dateFormat(); + if (StringUtils.isNotEmpty(dateFormat)) + { + val = parseDateToStr(dateFormat, val); + } + else + { + val = Convert.toStr(val); + } + } + } + else if ((Integer.TYPE == fieldType || Integer.class == fieldType) && StringUtils.isNumeric(Convert.toStr(val))) + { + val = Convert.toInt(val); + } + else if ((Long.TYPE == fieldType || Long.class == fieldType) && StringUtils.isNumeric(Convert.toStr(val))) + { + val = Convert.toLong(val); + } + else if (Double.TYPE == fieldType || Double.class == fieldType) + { + val = Convert.toDouble(val); + } + else if (Float.TYPE == fieldType || Float.class == fieldType) + { + val = Convert.toFloat(val); + } + else if (BigDecimal.class == fieldType) + { + val = Convert.toBigDecimal(val); + } + else if (Date.class == fieldType) + { + if (val instanceof String) + { + val = DateUtils.parseDate(val); + } + else if (val instanceof Double) + { + val = DateUtil.getJavaDate((Double) val); + } + } + else if (Boolean.TYPE == fieldType || Boolean.class == fieldType) + { + val = Convert.toBool(val, false); + } + if (StringUtils.isNotNull(fieldType)) + { + String propertyName = field.getName(); + if (StringUtils.isNotEmpty(attr.targetAttr())) + { + propertyName = field.getName() + "." + attr.targetAttr(); + } + if (StringUtils.isNotEmpty(attr.readConverterExp())) + { + val = reverseByExp(Convert.toStr(val), attr.readConverterExp(), attr.separator()); + } + else if (StringUtils.isNotEmpty(attr.dictType())) + { + if (!sysDictMap.containsKey(attr.dictType() + val)) + { + String dictValue = reverseDictByExp(Convert.toStr(val), attr.dictType(), attr.separator()); + sysDictMap.put(attr.dictType() + val, dictValue); + } + val = sysDictMap.get(attr.dictType() + val); + } + else if (!attr.handler().equals(ExcelHandlerAdapter.class)) + { + val = dataFormatHandlerAdapter(val, attr, null); + } + else if (ColumnType.IMAGE == attr.cellType() && StringUtils.isNotEmpty(pictures)) + { + PictureData image = pictures.get(row.getRowNum() + "_" + entry.getKey()); + if (image == null) + { + val = ""; + } + else + { + byte[] data = image.getData(); + val = FileUtils.writeImportBytes(data); + } + } + ReflectUtils.invokeSetter(entity, propertyName, val); + } + } + list.add(entity); + } + } + return list; + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @param list 瀵煎嚭鏁版嵁闆嗗悎 + * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О + * @return 缁撴灉 + */ + public AjaxResult exportExcel(List list, String sheetName) + { + return exportExcel(list, sheetName, StringUtils.EMPTY); + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @param list 瀵煎嚭鏁版嵁闆嗗悎 + * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О + * @param title 鏍囬 + * @return 缁撴灉 + */ + public AjaxResult exportExcel(List list, String sheetName, String title) + { + this.init(list, sheetName, title, Type.EXPORT); + return exportExcel(); + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @param response 杩斿洖鏁版嵁 + * @param list 瀵煎嚭鏁版嵁闆嗗悎 + * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О + * @return 缁撴灉 + */ + public void exportExcel(HttpServletResponse response, List list, String sheetName) + { + exportExcel(response, list, sheetName, StringUtils.EMPTY); + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @param response 杩斿洖鏁版嵁 + * @param list 瀵煎嚭鏁版嵁闆嗗悎 + * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О + * @param title 鏍囬 + * @return 缁撴灉 + */ + public void exportExcel(HttpServletResponse response, List list, String sheetName, String title) + { + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + this.init(list, sheetName, title, Type.EXPORT); + exportExcel(response); + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О + * @return 缁撴灉 + */ + public AjaxResult importTemplateExcel(String sheetName) + { + return importTemplateExcel(sheetName, StringUtils.EMPTY); + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О + * @param title 鏍囬 + * @return 缁撴灉 + */ + public AjaxResult importTemplateExcel(String sheetName, String title) + { + this.init(null, sheetName, title, Type.IMPORT); + return exportExcel(); + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О + * @return 缁撴灉 + */ + public void importTemplateExcel(HttpServletResponse response, String sheetName) + { + importTemplateExcel(response, sheetName, StringUtils.EMPTY); + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О + * @param title 鏍囬 + * @return 缁撴灉 + */ + public void importTemplateExcel(HttpServletResponse response, String sheetName, String title) + { + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + this.init(null, sheetName, title, Type.IMPORT); + exportExcel(response); + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @return 缁撴灉 + */ + public void exportExcel(HttpServletResponse response) + { + try + { + writeSheet(); + wb.write(response.getOutputStream()); + } + catch (Exception e) + { + log.error("瀵煎嚭Excel寮傚父{}", e.getMessage()); + } + finally + { + IOUtils.closeQuietly(wb); + } + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @return 缁撴灉 + */ + public AjaxResult exportExcel() + { + OutputStream out = null; + try + { + writeSheet(); + String filename = encodingFilename(sheetName); + out = new FileOutputStream(getAbsoluteFile(filename)); + wb.write(out); + return AjaxResult.success(filename); + } + catch (Exception e) + { + log.error("瀵煎嚭Excel寮傚父{}", e.getMessage()); + throw new UtilException("瀵煎嚭Excel澶辫触锛岃鑱旂郴缃戠珯绠$悊鍛橈紒"); + } + finally + { + IOUtils.closeQuietly(wb); + IOUtils.closeQuietly(out); + } + } + + /** + * 鍒涘缓鍐欏叆鏁版嵁鍒癝heet + */ + public void writeSheet() + { + // 鍙栧嚭涓鍏辨湁澶氬皯涓猻heet. + int sheetNo = Math.max(1, (int) Math.ceil(list.size() * 1.0 / sheetSize)); + for (int index = 0; index < sheetNo; index++) + { + createSheet(sheetNo, index); + + // 浜х敓涓琛 + Row row = sheet.createRow(rownum); + int column = 0; + // 鍐欏叆鍚勪釜瀛楁鐨勫垪澶村悕绉 + for (Object[] os : fields) + { + Field field = (Field) os[0]; + Excel excel = (Excel) os[1]; + if (Collection.class.isAssignableFrom(field.getType())) + { + for (Field subField : subFields) + { + Excel subExcel = subField.getAnnotation(Excel.class); + this.createHeadCell(subExcel, row, column++); + } + } + else + { + this.createHeadCell(excel, row, column++); + } + } + if (Type.EXPORT.equals(type)) + { + fillExcelData(index, row); + addStatisticsRow(); + } + } + } + + /** + * 濉厖excel鏁版嵁 + * + * @param index 搴忓彿 + * @param row 鍗曞厓鏍艰 + */ + @SuppressWarnings("unchecked") + public void fillExcelData(int index, Row row) + { + int startNo = index * sheetSize; + int endNo = Math.min(startNo + sheetSize, list.size()); + int rowNo = (1 + rownum) - startNo; + for (int i = startNo; i < endNo; i++) + { + rowNo = isSubList() ? (i > 1 ? rowNo + 1 : rowNo + i) : i + 1 + rownum - startNo; + row = sheet.createRow(rowNo); + // 寰楀埌瀵煎嚭瀵硅薄. + T vo = (T) list.get(i); + Collection subList = null; + if (isSubList()) + { + if (isSubListValue(vo)) + { + subList = getListCellValue(vo); + subMergedLastRowNum = subMergedLastRowNum + subList.size(); + } + else + { + subMergedFirstRowNum++; + subMergedLastRowNum++; + } + } + int column = 0; + for (Object[] os : fields) + { + Field field = (Field) os[0]; + Excel excel = (Excel) os[1]; + if (Collection.class.isAssignableFrom(field.getType()) && StringUtils.isNotNull(subList)) + { + boolean subFirst = false; + for (Object obj : subList) + { + if (subFirst) + { + rowNo++; + row = sheet.createRow(rowNo); + } + List subFields = FieldUtils.getFieldsListWithAnnotation(obj.getClass(), Excel.class); + int subIndex = 0; + for (Field subField : subFields) + { + if (subField.isAnnotationPresent(Excel.class)) + { + subField.setAccessible(true); + Excel attr = subField.getAnnotation(Excel.class); + this.addCell(attr, row, (T) obj, subField, column + subIndex); + } + subIndex++; + } + subFirst = true; + } + this.subMergedFirstRowNum = this.subMergedFirstRowNum + subList.size(); + } + else + { + this.addCell(excel, row, vo, field, column++); + } + } + } + } + + /** + * 鍒涘缓琛ㄦ牸鏍峰紡 + * + * @param wb 宸ヤ綔钖勫璞 + * @return 鏍峰紡鍒楄〃 + */ + private Map createStyles(Workbook wb) + { + // 鍐欏叆鍚勬潯璁板綍,姣忔潯璁板綍瀵瑰簲excel琛ㄤ腑鐨勪竴琛 + Map styles = new HashMap(); + CellStyle style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + Font titleFont = wb.createFont(); + titleFont.setFontName("Arial"); + titleFont.setFontHeightInPoints((short) 16); + titleFont.setBold(true); + style.setFont(titleFont); + DataFormat dataFormat = wb.createDataFormat(); + style.setDataFormat(dataFormat.getFormat("@")); + styles.put("title", style); + + style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setBorderRight(BorderStyle.THIN); + style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderLeft(BorderStyle.THIN); + style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderTop(BorderStyle.THIN); + style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderBottom(BorderStyle.THIN); + style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + Font dataFont = wb.createFont(); + dataFont.setFontName("Arial"); + dataFont.setFontHeightInPoints((short) 10); + style.setFont(dataFont); + styles.put("data", style); + + style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + Font totalFont = wb.createFont(); + totalFont.setFontName("Arial"); + totalFont.setFontHeightInPoints((short) 10); + style.setFont(totalFont); + styles.put("total", style); + + styles.putAll(annotationHeaderStyles(wb, styles)); + + styles.putAll(annotationDataStyles(wb)); + + return styles; + } + + /** + * 鏍规嵁Excel娉ㄨВ鍒涘缓琛ㄦ牸澶存牱寮 + * + * @param wb 宸ヤ綔钖勫璞 + * @return 鑷畾涔夋牱寮忓垪琛 + */ + private Map annotationHeaderStyles(Workbook wb, Map styles) + { + Map headerStyles = new HashMap(); + for (Object[] os : fields) + { + Excel excel = (Excel) os[1]; + String key = StringUtils.format("header_{}_{}", excel.headerColor(), excel.headerBackgroundColor()); + if (!headerStyles.containsKey(key)) + { + CellStyle style = wb.createCellStyle(); + style.cloneStyleFrom(styles.get("data")); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setFillForegroundColor(excel.headerBackgroundColor().index); + style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + Font headerFont = wb.createFont(); + headerFont.setFontName("Arial"); + headerFont.setFontHeightInPoints((short) 10); + headerFont.setBold(true); + headerFont.setColor(excel.headerColor().index); + style.setFont(headerFont); + // 璁剧疆琛ㄦ牸澶村崟鍏冩牸鏂囨湰褰㈠紡 + DataFormat dataFormat = wb.createDataFormat(); + style.setDataFormat(dataFormat.getFormat("@")); + headerStyles.put(key, style); + } + } + return headerStyles; + } + + /** + * 鏍规嵁Excel娉ㄨВ鍒涘缓琛ㄦ牸鍒楁牱寮 + * + * @param wb 宸ヤ綔钖勫璞 + * @return 鑷畾涔夋牱寮忓垪琛 + */ + private Map annotationDataStyles(Workbook wb) + { + Map styles = new HashMap(); + for (Object[] os : fields) + { + Field field = (Field) os[0]; + Excel excel = (Excel) os[1]; + if (Collection.class.isAssignableFrom(field.getType())) + { + ParameterizedType pt = (ParameterizedType) field.getGenericType(); + Class subClass = (Class) pt.getActualTypeArguments()[0]; + List subFields = FieldUtils.getFieldsListWithAnnotation(subClass, Excel.class); + for (Field subField : subFields) + { + Excel subExcel = subField.getAnnotation(Excel.class); + annotationDataStyles(styles, subField, subExcel); + } + } + else + { + annotationDataStyles(styles, field, excel); + } + } + return styles; + } + + /** + * 鏍规嵁Excel娉ㄨВ鍒涘缓琛ㄦ牸鍒楁牱寮 + * + * @param styles 鑷畾涔夋牱寮忓垪琛 + * @param field 灞炴у垪淇℃伅 + * @param excel 娉ㄨВ淇℃伅 + */ + public void annotationDataStyles(Map styles, Field field, Excel excel) + { + String key = StringUtils.format("data_{}_{}_{}_{}", excel.align(), excel.color(), excel.backgroundColor(), excel.cellType()); + if (!styles.containsKey(key)) + { + CellStyle style = wb.createCellStyle(); + style.setAlignment(excel.align()); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setBorderRight(BorderStyle.THIN); + style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderLeft(BorderStyle.THIN); + style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderTop(BorderStyle.THIN); + style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderBottom(BorderStyle.THIN); + style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + style.setFillForegroundColor(excel.backgroundColor().getIndex()); + Font dataFont = wb.createFont(); + dataFont.setFontName("Arial"); + dataFont.setFontHeightInPoints((short) 10); + dataFont.setColor(excel.color().index); + style.setFont(dataFont); + if (ColumnType.TEXT == excel.cellType()) + { + DataFormat dataFormat = wb.createDataFormat(); + style.setDataFormat(dataFormat.getFormat("@")); + } + styles.put(key, style); + } + } + + /** + * 鍒涘缓鍗曞厓鏍 + */ + public Cell createHeadCell(Excel attr, Row row, int column) + { + // 鍒涘缓鍒 + Cell cell = row.createCell(column); + // 鍐欏叆鍒椾俊鎭 + cell.setCellValue(attr.name()); + setDataValidation(attr, row, column); + cell.setCellStyle(styles.get(StringUtils.format("header_{}_{}", attr.headerColor(), attr.headerBackgroundColor()))); + if (isSubList()) + { + // 濉厖榛樿鏍峰紡锛岄槻姝㈠悎骞跺崟鍏冩牸鏍峰紡澶辨晥 + sheet.setDefaultColumnStyle(column, styles.get(StringUtils.format("data_{}_{}_{}_{}", attr.align(), attr.color(), attr.backgroundColor(), attr.cellType()))); + if (attr.needMerge()) + { + sheet.addMergedRegion(new CellRangeAddress(rownum - 1, rownum, column, column)); + } + } + return cell; + } + + /** + * 璁剧疆鍗曞厓鏍间俊鎭 + * + * @param value 鍗曞厓鏍煎 + * @param attr 娉ㄨВ鐩稿叧 + * @param cell 鍗曞厓鏍间俊鎭 + */ + public void setCellVo(Object value, Excel attr, Cell cell) + { + if (ColumnType.STRING == attr.cellType() || ColumnType.TEXT == attr.cellType()) + { + String cellValue = Convert.toStr(value); + // 瀵逛簬浠讳綍浠ヨ〃杈惧紡瑙﹀彂瀛楃 =-+@寮澶寸殑鍗曞厓鏍硷紝鐩存帴浣跨敤tab瀛楃浣滀负鍓嶇紑锛岄槻姝SV娉ㄥ叆銆 + if (StringUtils.startsWithAny(cellValue, FORMULA_STR)) + { + cellValue = RegExUtils.replaceFirst(cellValue, FORMULA_REGEX_STR, "\t$0"); + } + if (value instanceof Collection && StringUtils.equals("[]", cellValue)) + { + cellValue = StringUtils.EMPTY; + } + cell.setCellValue(StringUtils.isNull(cellValue) ? attr.defaultValue() : cellValue + attr.suffix()); + } + else if (ColumnType.NUMERIC == attr.cellType()) + { + if (StringUtils.isNotNull(value)) + { + cell.setCellValue(StringUtils.contains(Convert.toStr(value), ".") ? Convert.toDouble(value) : Convert.toInt(value)); + } + } + else if (ColumnType.IMAGE == attr.cellType()) + { + ClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, (short) cell.getColumnIndex(), cell.getRow().getRowNum(), (short) (cell.getColumnIndex() + 1), cell.getRow().getRowNum() + 1); + String imagePath = Convert.toStr(value); + if (StringUtils.isNotEmpty(imagePath)) + { + byte[] data = ImageUtils.getImage(imagePath); + getDrawingPatriarch(cell.getSheet()).createPicture(anchor, + cell.getSheet().getWorkbook().addPicture(data, getImageType(data))); + } + } + } + + /** + * 鑾峰彇鐢诲竷 + */ + public static Drawing getDrawingPatriarch(Sheet sheet) + { + if (sheet.getDrawingPatriarch() == null) + { + sheet.createDrawingPatriarch(); + } + return sheet.getDrawingPatriarch(); + } + + /** + * 鑾峰彇鍥剧墖绫诲瀷,璁剧疆鍥剧墖鎻掑叆绫诲瀷 + */ + public int getImageType(byte[] value) + { + String type = FileTypeUtils.getFileExtendName(value); + if ("JPG".equalsIgnoreCase(type)) + { + return Workbook.PICTURE_TYPE_JPEG; + } + else if ("PNG".equalsIgnoreCase(type)) + { + return Workbook.PICTURE_TYPE_PNG; + } + return Workbook.PICTURE_TYPE_JPEG; + } + + /** + * 鍒涘缓琛ㄦ牸鏍峰紡 + */ + public void setDataValidation(Excel attr, Row row, int column) + { + if (attr.name().indexOf("娉細") >= 0) + { + sheet.setColumnWidth(column, 6000); + } + else + { + // 璁剧疆鍒楀 + sheet.setColumnWidth(column, (int) ((attr.width() + 0.72) * 256)); + } + if (StringUtils.isNotEmpty(attr.prompt()) || attr.combo().length > 0 || attr.comboReadDict()) + { + String[] comboArray = attr.combo(); + if (attr.comboReadDict()) + { + if (!sysDictMap.containsKey("combo_" + attr.dictType())) + { + String labels = DictUtils.getDictLabels(attr.dictType()); + sysDictMap.put("combo_" + attr.dictType(), labels); + } + String val = sysDictMap.get("combo_" + attr.dictType()); + comboArray = StringUtils.split(val, DictUtils.SEPARATOR); + } + if (comboArray.length > 15 || StringUtils.join(comboArray).length() > 255) + { + // 濡傛灉涓嬫媺鏁板ぇ浜15鎴栧瓧绗︿覆闀垮害澶т簬255锛屽垯浣跨敤涓涓柊sheet瀛樺偍锛岄伩鍏嶇敓鎴愮殑妯℃澘涓嬫媺鍊艰幏鍙栦笉鍒 + setXSSFValidationWithHidden(sheet, comboArray, attr.prompt(), 1, 100, column, column); + } + else + { + // 鎻愮ず淇℃伅鎴栧彧鑳介夋嫨涓嶈兘杈撳叆鐨勫垪鍐呭. + setPromptOrValidation(sheet, comboArray, attr.prompt(), 1, 100, column, column); + } + } + } + + /** + * 娣诲姞鍗曞厓鏍 + */ + public Cell addCell(Excel attr, Row row, T vo, Field field, int column) + { + Cell cell = null; + try + { + // 璁剧疆琛岄珮 + row.setHeight(maxHeight); + // 鏍规嵁Excel涓缃儏鍐靛喅瀹氭槸鍚﹀鍑,鏈変簺鎯呭喌闇瑕佷繚鎸佷负绌,甯屾湜鐢ㄦ埛濉啓杩欎竴鍒. + if (attr.isExport()) + { + // 鍒涘缓cell + cell = row.createCell(column); + if (isSubListValue(vo) && getListCellValue(vo).size() > 1 && attr.needMerge()) + { + CellRangeAddress cellAddress = new CellRangeAddress(subMergedFirstRowNum, subMergedLastRowNum, column, column); + sheet.addMergedRegion(cellAddress); + } + cell.setCellStyle(styles.get(StringUtils.format("data_{}_{}_{}_{}", attr.align(), attr.color(), attr.backgroundColor(), attr.cellType()))); + + // 鐢ㄤ簬璇诲彇瀵硅薄涓殑灞炴 + Object value = getTargetValue(vo, field, attr); + String dateFormat = attr.dateFormat(); + String readConverterExp = attr.readConverterExp(); + String separator = attr.separator(); + String dictType = attr.dictType(); + if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value)) + { + cell.setCellValue(parseDateToStr(dateFormat, value)); + } + else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils.isNotNull(value)) + { + cell.setCellValue(convertByExp(Convert.toStr(value), readConverterExp, separator)); + } + else if (StringUtils.isNotEmpty(dictType) && StringUtils.isNotNull(value)) + { + if (!sysDictMap.containsKey(dictType + value)) + { + String lable = convertDictByExp(Convert.toStr(value), dictType, separator); + sysDictMap.put(dictType + value, lable); + } + cell.setCellValue(sysDictMap.get(dictType + value)); + } + else if (value instanceof BigDecimal && -1 != attr.scale()) + { + cell.setCellValue((((BigDecimal) value).setScale(attr.scale(), attr.roundingMode())).doubleValue()); + } + else if (!attr.handler().equals(ExcelHandlerAdapter.class)) + { + cell.setCellValue(dataFormatHandlerAdapter(value, attr, cell)); + } + else + { + // 璁剧疆鍒楃被鍨 + setCellVo(value, attr, cell); + } + addStatisticsData(column, Convert.toStr(value), attr); + } + } + catch (Exception e) + { + log.error("瀵煎嚭Excel澶辫触{}", e); + } + return cell; + } + + /** + * 璁剧疆 POI XSSFSheet 鍗曞厓鏍兼彁绀烘垨閫夋嫨妗 + * + * @param sheet 琛ㄥ崟 + * @param textlist 涓嬫媺妗嗘樉绀虹殑鍐呭 + * @param promptContent 鎻愮ず鍐呭 + * @param firstRow 寮濮嬭 + * @param endRow 缁撴潫琛 + * @param firstCol 寮濮嬪垪 + * @param endCol 缁撴潫鍒 + */ + public void setPromptOrValidation(Sheet sheet, String[] textlist, String promptContent, int firstRow, int endRow, + int firstCol, int endCol) + { + DataValidationHelper helper = sheet.getDataValidationHelper(); + DataValidationConstraint constraint = textlist.length > 0 ? helper.createExplicitListConstraint(textlist) : helper.createCustomConstraint("DD1"); + CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol); + DataValidation dataValidation = helper.createValidation(constraint, regions); + if (StringUtils.isNotEmpty(promptContent)) + { + // 濡傛灉璁剧疆浜嗘彁绀轰俊鎭垯榧犳爣鏀句笂鍘绘彁绀 + dataValidation.createPromptBox("", promptContent); + dataValidation.setShowPromptBox(true); + } + // 澶勭悊Excel鍏煎鎬ч棶棰 + if (dataValidation instanceof XSSFDataValidation) + { + dataValidation.setSuppressDropDownArrow(true); + dataValidation.setShowErrorBox(true); + } + else + { + dataValidation.setSuppressDropDownArrow(false); + } + sheet.addValidationData(dataValidation); + } + + /** + * 璁剧疆鏌愪簺鍒楃殑鍊煎彧鑳借緭鍏ラ鍒剁殑鏁版嵁,鏄剧ず涓嬫媺妗嗭紙鍏煎瓒呭嚭涓瀹氭暟閲忕殑涓嬫媺妗嗭級. + * + * @param sheet 瑕佽缃殑sheet. + * @param textlist 涓嬫媺妗嗘樉绀虹殑鍐呭 + * @param promptContent 鎻愮ず鍐呭 + * @param firstRow 寮濮嬭 + * @param endRow 缁撴潫琛 + * @param firstCol 寮濮嬪垪 + * @param endCol 缁撴潫鍒 + */ + public void setXSSFValidationWithHidden(Sheet sheet, String[] textlist, String promptContent, int firstRow, int endRow, int firstCol, int endCol) + { + String hideSheetName = "combo_" + firstCol + "_" + endCol; + Sheet hideSheet = wb.createSheet(hideSheetName); // 鐢ㄤ簬瀛樺偍 涓嬫媺鑿滃崟鏁版嵁 + for (int i = 0; i < textlist.length; i++) + { + hideSheet.createRow(i).createCell(0).setCellValue(textlist[i]); + } + // 鍒涘缓鍚嶇О锛屽彲琚叾浠栧崟鍏冩牸寮曠敤 + Name name = wb.createName(); + name.setNameName(hideSheetName + "_data"); + name.setRefersToFormula(hideSheetName + "!$A$1:$A$" + textlist.length); + DataValidationHelper helper = sheet.getDataValidationHelper(); + // 鍔犺浇涓嬫媺鍒楄〃鍐呭 + DataValidationConstraint constraint = helper.createFormulaListConstraint(hideSheetName + "_data"); + // 璁剧疆鏁版嵁鏈夋晥鎬у姞杞藉湪鍝釜鍗曞厓鏍间笂,鍥涗釜鍙傛暟鍒嗗埆鏄細璧峰琛屻佺粓姝㈣銆佽捣濮嬪垪銆佺粓姝㈠垪 + CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol); + // 鏁版嵁鏈夋晥鎬у璞 + DataValidation dataValidation = helper.createValidation(constraint, regions); + if (StringUtils.isNotEmpty(promptContent)) + { + // 濡傛灉璁剧疆浜嗘彁绀轰俊鎭垯榧犳爣鏀句笂鍘绘彁绀 + dataValidation.createPromptBox("", promptContent); + dataValidation.setShowPromptBox(true); + } + // 澶勭悊Excel鍏煎鎬ч棶棰 + if (dataValidation instanceof XSSFDataValidation) + { + dataValidation.setSuppressDropDownArrow(true); + dataValidation.setShowErrorBox(true); + } + else + { + dataValidation.setSuppressDropDownArrow(false); + } + + sheet.addValidationData(dataValidation); + // 璁剧疆hiddenSheet闅愯棌 + wb.setSheetHidden(wb.getSheetIndex(hideSheet), true); + } + + /** + * 瑙f瀽瀵煎嚭鍊 0=鐢,1=濂,2=鏈煡 + * + * @param propertyValue 鍙傛暟鍊 + * @param converterExp 缈昏瘧娉ㄨВ + * @param separator 鍒嗛殧绗 + * @return 瑙f瀽鍚庡 + */ + public static String convertByExp(String propertyValue, String converterExp, String separator) + { + StringBuilder propertyString = new StringBuilder(); + String[] convertSource = converterExp.split(","); + for (String item : convertSource) + { + String[] itemArray = item.split("="); + if (StringUtils.containsAny(propertyValue, separator)) + { + for (String value : propertyValue.split(separator)) + { + if (itemArray[0].equals(value)) + { + propertyString.append(itemArray[1] + separator); + break; + } + } + } + else + { + if (itemArray[0].equals(propertyValue)) + { + return itemArray[1]; + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 鍙嶅悜瑙f瀽鍊 鐢=0,濂=1,鏈煡=2 + * + * @param propertyValue 鍙傛暟鍊 + * @param converterExp 缈昏瘧娉ㄨВ + * @param separator 鍒嗛殧绗 + * @return 瑙f瀽鍚庡 + */ + public static String reverseByExp(String propertyValue, String converterExp, String separator) + { + StringBuilder propertyString = new StringBuilder(); + String[] convertSource = converterExp.split(","); + for (String item : convertSource) + { + String[] itemArray = item.split("="); + if (StringUtils.containsAny(propertyValue, separator)) + { + for (String value : propertyValue.split(separator)) + { + if (itemArray[1].equals(value)) + { + propertyString.append(itemArray[0] + separator); + break; + } + } + } + else + { + if (itemArray[1].equals(propertyValue)) + { + return itemArray[0]; + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 瑙f瀽瀛楀吀鍊 + * + * @param dictValue 瀛楀吀鍊 + * @param dictType 瀛楀吀绫诲瀷 + * @param separator 鍒嗛殧绗 + * @return 瀛楀吀鏍囩 + */ + public static String convertDictByExp(String dictValue, String dictType, String separator) + { + return DictUtils.getDictLabel(dictType, dictValue, separator); + } + + /** + * 鍙嶅悜瑙f瀽鍊煎瓧鍏稿 + * + * @param dictLabel 瀛楀吀鏍囩 + * @param dictType 瀛楀吀绫诲瀷 + * @param separator 鍒嗛殧绗 + * @return 瀛楀吀鍊 + */ + public static String reverseDictByExp(String dictLabel, String dictType, String separator) + { + return DictUtils.getDictValue(dictType, dictLabel, separator); + } + + /** + * 鏁版嵁澶勭悊鍣 + * + * @param value 鏁版嵁鍊 + * @param excel 鏁版嵁娉ㄨВ + * @return + */ + public String dataFormatHandlerAdapter(Object value, Excel excel, Cell cell) + { + try + { + Object instance = excel.handler().newInstance(); + Method formatMethod = excel.handler().getMethod("format", new Class[] { Object.class, String[].class, Cell.class, Workbook.class }); + value = formatMethod.invoke(instance, value, excel.args(), cell, this.wb); + } + catch (Exception e) + { + log.error("涓嶈兘鏍煎紡鍖栨暟鎹 " + excel.handler(), e.getMessage()); + } + return Convert.toStr(value); + } + + /** + * 鍚堣缁熻淇℃伅 + */ + private void addStatisticsData(Integer index, String text, Excel entity) + { + if (entity != null && entity.isStatistics()) + { + Double temp = 0D; + if (!statistics.containsKey(index)) + { + statistics.put(index, temp); + } + try + { + temp = Double.valueOf(text); + } + catch (NumberFormatException e) + { + } + statistics.put(index, statistics.get(index) + temp); + } + } + + /** + * 鍒涘缓缁熻琛 + */ + public void addStatisticsRow() + { + if (statistics.size() > 0) + { + Row row = sheet.createRow(sheet.getLastRowNum() + 1); + Set keys = statistics.keySet(); + Cell cell = row.createCell(0); + cell.setCellStyle(styles.get("total")); + cell.setCellValue("鍚堣"); + + for (Integer key : keys) + { + cell = row.createCell(key); + cell.setCellStyle(styles.get("total")); + cell.setCellValue(DOUBLE_FORMAT.format(statistics.get(key))); + } + statistics.clear(); + } + } + + /** + * 缂栫爜鏂囦欢鍚 + */ + public String encodingFilename(String filename) + { + filename = UUID.randomUUID() + "_" + filename + ".xlsx"; + return filename; + } + + /** + * 鑾峰彇涓嬭浇璺緞 + * + * @param filename 鏂囦欢鍚嶇О + */ + public String getAbsoluteFile(String filename) + { + String downloadPath = EvoConfig.getDownloadPath() + filename; + File desc = new File(downloadPath); + if (!desc.getParentFile().exists()) + { + desc.getParentFile().mkdirs(); + } + return downloadPath; + } + + /** + * 鑾峰彇bean涓殑灞炴у + * + * @param vo 瀹炰綋瀵硅薄 + * @param field 瀛楁 + * @param excel 娉ㄨВ + * @return 鏈缁堢殑灞炴у + * @throws Exception + */ + private Object getTargetValue(T vo, Field field, Excel excel) throws Exception + { + Object o = field.get(vo); + if (StringUtils.isNotEmpty(excel.targetAttr())) + { + String target = excel.targetAttr(); + if (target.contains(".")) + { + String[] targets = target.split("[.]"); + for (String name : targets) + { + o = getValue(o, name); + } + } + else + { + o = getValue(o, target); + } + } + return o; + } + + /** + * 浠ョ被鐨勫睘鎬х殑get鏂规硶鏂规硶褰㈠紡鑾峰彇鍊 + * + * @param o + * @param name + * @return value + * @throws Exception + */ + private Object getValue(Object o, String name) throws Exception + { + if (StringUtils.isNotNull(o) && StringUtils.isNotEmpty(name)) + { + Class clazz = o.getClass(); + Field field = clazz.getDeclaredField(name); + field.setAccessible(true); + o = field.get(o); + } + return o; + } + + /** + * 寰楀埌鎵鏈夊畾涔夊瓧娈 + */ + private void createExcelField() + { + this.fields = getFields(); + this.fields = this.fields.stream().sorted(Comparator.comparing(objects -> ((Excel) objects[1]).sort())).collect(Collectors.toList()); + this.maxHeight = getRowHeight(); + } + + /** + * 鑾峰彇瀛楁娉ㄨВ淇℃伅 + */ + public List getFields() + { + List fields = new ArrayList(); + List tempFields = new ArrayList<>(); + tempFields.addAll(Arrays.asList(clazz.getSuperclass().getDeclaredFields())); + tempFields.addAll(Arrays.asList(clazz.getDeclaredFields())); + for (Field field : tempFields) + { + if (!ArrayUtils.contains(this.excludeFields, field.getName())) + { + // 鍗曟敞瑙 + if (field.isAnnotationPresent(Excel.class)) + { + Excel attr = field.getAnnotation(Excel.class); + if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) + { + field.setAccessible(true); + fields.add(new Object[] { field, attr }); + } + if (Collection.class.isAssignableFrom(field.getType())) + { + subMethod = getSubMethod(field.getName(), clazz); + ParameterizedType pt = (ParameterizedType) field.getGenericType(); + Class subClass = (Class) pt.getActualTypeArguments()[0]; + this.subFields = FieldUtils.getFieldsListWithAnnotation(subClass, Excel.class); + } + } + + // 澶氭敞瑙 + if (field.isAnnotationPresent(Excels.class)) + { + Excels attrs = field.getAnnotation(Excels.class); + Excel[] excels = attrs.value(); + for (Excel attr : excels) + { + if (!ArrayUtils.contains(this.excludeFields, field.getName() + "." + attr.targetAttr()) + && (attr != null && (attr.type() == Type.ALL || attr.type() == type))) + { + field.setAccessible(true); + fields.add(new Object[] { field, attr }); + } + } + } + } + } + return fields; + } + + /** + * 鏍规嵁娉ㄨВ鑾峰彇鏈澶ц楂 + */ + public short getRowHeight() + { + double maxHeight = 0; + for (Object[] os : this.fields) + { + Excel excel = (Excel) os[1]; + maxHeight = Math.max(maxHeight, excel.height()); + } + return (short) (maxHeight * 20); + } + + /** + * 鍒涘缓涓涓伐浣滅翱 + */ + public void createWorkbook() + { + this.wb = new SXSSFWorkbook(500); + this.sheet = wb.createSheet(); + wb.setSheetName(0, sheetName); + this.styles = createStyles(wb); + } + + /** + * 鍒涘缓宸ヤ綔琛 + * + * @param sheetNo sheet鏁伴噺 + * @param index 搴忓彿 + */ + public void createSheet(int sheetNo, int index) + { + // 璁剧疆宸ヤ綔琛ㄧ殑鍚嶇О. + if (sheetNo > 1 && index > 0) + { + this.sheet = wb.createSheet(); + this.createTitle(); + wb.setSheetName(index, sheetName + index); + } + } + + /** + * 鑾峰彇鍗曞厓鏍煎 + * + * @param row 鑾峰彇鐨勮 + * @param column 鑾峰彇鍗曞厓鏍煎垪鍙 + * @return 鍗曞厓鏍煎 + */ + public Object getCellValue(Row row, int column) + { + if (row == null) + { + return row; + } + Object val = ""; + try + { + Cell cell = row.getCell(column); + if (StringUtils.isNotNull(cell)) + { + if (cell.getCellType() == CellType.NUMERIC || cell.getCellType() == CellType.FORMULA) + { + val = cell.getNumericCellValue(); + if (DateUtil.isCellDateFormatted(cell)) + { + val = DateUtil.getJavaDate((Double) val); // POI Excel 鏃ユ湡鏍煎紡杞崲 + } + else + { + if ((Double) val % 1 != 0) + { + val = new BigDecimal(val.toString()); + } + else + { + val = new DecimalFormat("0").format(val); + } + } + } + else if (cell.getCellType() == CellType.STRING) + { + val = cell.getStringCellValue(); + } + else if (cell.getCellType() == CellType.BOOLEAN) + { + val = cell.getBooleanCellValue(); + } + else if (cell.getCellType() == CellType.ERROR) + { + val = cell.getErrorCellValue(); + } + + } + } + catch (Exception e) + { + return val; + } + return val; + } + + /** + * 鍒ゆ柇鏄惁鏄┖琛 + * + * @param row 鍒ゆ柇鐨勮 + * @return + */ + private boolean isRowEmpty(Row row) + { + if (row == null) + { + return true; + } + for (int i = row.getFirstCellNum(); i < row.getLastCellNum(); i++) + { + Cell cell = row.getCell(i); + if (cell != null && cell.getCellType() != CellType.BLANK) + { + return false; + } + } + return true; + } + + /** + * 鑾峰彇Excel2003鍥剧墖 + * + * @param sheet 褰撳墠sheet瀵硅薄 + * @param workbook 宸ヤ綔绨垮璞 + * @return Map key:鍥剧墖鍗曞厓鏍肩储寮曪紙1_1锛塖tring锛寁alue:鍥剧墖娴丳ictureData + */ + public static Map getSheetPictures03(HSSFSheet sheet, HSSFWorkbook workbook) + { + Map sheetIndexPicMap = new HashMap(); + List pictures = workbook.getAllPictures(); + if (!pictures.isEmpty()) + { + for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) + { + HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor(); + if (shape instanceof HSSFPicture) + { + HSSFPicture pic = (HSSFPicture) shape; + int pictureIndex = pic.getPictureIndex() - 1; + HSSFPictureData picData = pictures.get(pictureIndex); + String picIndex = anchor.getRow1() + "_" + anchor.getCol1(); + sheetIndexPicMap.put(picIndex, picData); + } + } + return sheetIndexPicMap; + } + else + { + return sheetIndexPicMap; + } + } + + /** + * 鑾峰彇Excel2007鍥剧墖 + * + * @param sheet 褰撳墠sheet瀵硅薄 + * @param workbook 宸ヤ綔绨垮璞 + * @return Map key:鍥剧墖鍗曞厓鏍肩储寮曪紙1_1锛塖tring锛寁alue:鍥剧墖娴丳ictureData + */ + public static Map getSheetPictures07(XSSFSheet sheet, XSSFWorkbook workbook) + { + Map sheetIndexPicMap = new HashMap(); + for (POIXMLDocumentPart dr : sheet.getRelations()) + { + if (dr instanceof XSSFDrawing) + { + XSSFDrawing drawing = (XSSFDrawing) dr; + List shapes = drawing.getShapes(); + for (XSSFShape shape : shapes) + { + if (shape instanceof XSSFPicture) + { + XSSFPicture pic = (XSSFPicture) shape; + XSSFClientAnchor anchor = pic.getPreferredSize(); + CTMarker ctMarker = anchor.getFrom(); + String picIndex = ctMarker.getRow() + "_" + ctMarker.getCol(); + sheetIndexPicMap.put(picIndex, pic.getPictureData()); + } + } + } + } + return sheetIndexPicMap; + } + + /** + * 鏍煎紡鍖栦笉鍚岀被鍨嬬殑鏃ユ湡瀵硅薄 + * + * @param dateFormat 鏃ユ湡鏍煎紡 + * @param val 琚牸寮忓寲鐨勬棩鏈熷璞 + * @return 鏍煎紡鍖栧悗鐨勬棩鏈熷瓧绗 + */ + public String parseDateToStr(String dateFormat, Object val) + { + if (val == null) + { + return ""; + } + String str; + if (val instanceof Date) + { + str = DateUtils.parseDateToStr(dateFormat, (Date) val); + } + else if (val instanceof LocalDateTime) + { + str = DateUtils.parseDateToStr(dateFormat, DateUtils.toDate((LocalDateTime) val)); + } + else if (val instanceof LocalDate) + { + str = DateUtils.parseDateToStr(dateFormat, DateUtils.toDate((LocalDate) val)); + } + else + { + str = val.toString(); + } + return str; + } + + /** + * 鏄惁鏈夊璞$殑瀛愬垪琛 + */ + public boolean isSubList() + { + return StringUtils.isNotNull(subFields) && subFields.size() > 0; + } + + /** + * 鏄惁鏈夊璞$殑瀛愬垪琛紝闆嗗悎涓嶄负绌 + */ + public boolean isSubListValue(T vo) + { + return StringUtils.isNotNull(subFields) && subFields.size() > 0 && StringUtils.isNotNull(getListCellValue(vo)) && getListCellValue(vo).size() > 0; + } + + /** + * 鑾峰彇闆嗗悎鐨勫 + */ + public Collection getListCellValue(Object obj) + { + Object value; + try + { + value = subMethod.invoke(obj, new Object[] {}); + } + catch (Exception e) + { + return new ArrayList(); + } + return (Collection) value; + } + + /** + * 鑾峰彇瀵硅薄鐨勫瓙鍒楄〃鏂规硶 + * + * @param name 鍚嶇О + * @param pojoClass 绫诲璞 + * @return 瀛愬垪琛ㄦ柟娉 + */ + public Method getSubMethod(String name, Class pojoClass) + { + StringBuffer getMethodName = new StringBuffer("get"); + getMethodName.append(name.substring(0, 1).toUpperCase()); + getMethodName.append(name.substring(1)); + Method method = null; + try + { + method = pojoClass.getMethod(getMethodName.toString(), new Class[] {}); + } + catch (Exception e) + { + log.error("鑾峰彇瀵硅薄寮傚父{}", e.getMessage()); + } + return method; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/poi/ExcelUtilSs.java b/evo-admin/src/main/java/com/evo/common/utils/poi/ExcelUtilSs.java new file mode 100644 index 0000000..c607cd5 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/poi/ExcelUtilSs.java @@ -0,0 +1,1040 @@ +package com.evo.common.utils.poi; + +import com.evo.common.annotation.Excel; +import com.evo.common.annotation.Excel.ColumnType; +import com.evo.common.annotation.Excel.Type; +import com.evo.common.annotation.Excels; +import com.evo.common.config.EvoConfig; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.text.Convert; +import com.evo.common.exception.CustomException; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.reflect.ReflectUtils; +import org.apache.poi.hssf.usermodel.HSSFDateUtil; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.ss.util.CellRangeAddressList; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.apache.poi.xssf.usermodel.XSSFDataValidation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.*; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * Excel鐩稿叧澶勭悊 + * + * @author ruoyi + */ +public class ExcelUtilSs{ + private static final Logger log = LoggerFactory.getLogger(ExcelUtil.class); + + /** + * Excel sheet鏈澶ц鏁帮紝榛樿65536 + */ + public static final int sheetSize = 65536; + + /** + * 宸ヤ綔琛ㄥ悕绉 + */ + private String sheetName; + + /** + * 宸ヤ綔琛ㄦ爣棰 + */ + private String title; + + /** + * 宸ヤ綔琛ㄨ〃灏 + */ + private String footer; + + /** + * 鍚勪釜閮ㄩ棬宸ヤ綔琛ㄥ悕绉 + */ + private List sheetNameList; + + /** + * 瀵煎嚭绫诲瀷锛圗XPORT:瀵煎嚭鏁版嵁锛汭MPORT锛氬鍏ユā鏉匡級 + */ + private Type type; + + /** + * 宸ヤ綔钖勫璞 + */ + private Workbook wb; + + /** + * 宸ヤ綔琛ㄥ璞 + */ + private Sheet sheet; + + /** + * 鏍峰紡鍒楄〃 + */ + private Map styles; + + /** + * 瀵煎叆瀵煎嚭鏁版嵁鍒楄〃 + */ + private List list; + + /** + * 瀵煎叆瀵煎嚭鍚勪釜閮ㄩ棬鏁版嵁鍒楄〃 + */ + private List> lists; + + /** + * 娉ㄨВ鍒楄〃 + */ + private List fields; + + /** + * 瀹炰綋瀵硅薄 + */ + public Class clazz; + + public ExcelUtilSs(Class clazz) + { + this.clazz = clazz; + } + + // 榛樿鍗曞厓鏍煎唴瀹逛负鏁板瓧鏃舵牸寮 + private static DecimalFormat df = new DecimalFormat("0"); + // 榛樿鍗曞厓鏍兼牸寮忓寲鏃ユ湡瀛楃涓 + private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + // 鏍煎紡鍖栨暟瀛 + private static DecimalFormat nf = new DecimalFormat("0.00"); + + public void init(List list,List> lists, String sheetName,List sheetNameList,String title,String footer, Type type){ + if (list == null){ + list = new ArrayList(); + } + if(sheetNameList == null){ + sheetNameList = new ArrayList(); + } + this.list = list; + this.lists = lists; + this.sheetName = sheetName; + this.sheetNameList = sheetNameList; + this.title = title; + this.footer = footer; + this.type = type; + createExcelField(); + createWorkbook(); + } + + /** + * 瀵筫xcel琛ㄥ崟榛樿绗竴涓储寮曞悕杞崲鎴恖ist + * + * @param is 杈撳叆娴 + * @return 杞崲鍚庨泦鍚 + */ + public List importExcel(InputStream is) throws Exception + { + return importExcel(StringUtils.EMPTY, is); + } + + /** + * 瀵筫xcel琛ㄥ崟鎸囧畾琛ㄦ牸绱㈠紩鍚嶈浆鎹㈡垚list + * + * @param sheetName 琛ㄦ牸绱㈠紩鍚 + * @param is 杈撳叆娴 + * @return 杞崲鍚庨泦鍚 + */ + public List importExcel(String sheetName, InputStream is) throws Exception + { + this.type = Type.IMPORT; + this.wb = WorkbookFactory.create(is); + List list = new ArrayList(); + Sheet sheet = null; + if (StringUtils.isNotEmpty(sheetName)) + { + // 濡傛灉鎸囧畾sheet鍚,鍒欏彇鎸囧畾sheet涓殑鍐呭. + sheet = wb.getSheet(sheetName); + } + else + { + // 濡傛灉浼犲叆鐨剆heet鍚嶄笉瀛樺湪鍒欓粯璁ゆ寚鍚戠1涓猻heet. + sheet = wb.getSheetAt(0); + } + + if (sheet == null) + { + throw new IOException("鏂囦欢sheet涓嶅瓨鍦"); + } + + int rows = sheet.getPhysicalNumberOfRows(); + + if (rows > 0) + { + // 瀹氫箟涓涓猰ap鐢ㄤ簬瀛樻斁excel鍒楃殑搴忓彿鍜宖ield. + Map cellMap = new HashMap(); + // 鑾峰彇琛ㄥご + Row heard = sheet.getRow(0); + for (int i = 0; i < heard.getPhysicalNumberOfCells(); i++) + { + Cell cell = heard.getCell(i); + if (StringUtils.isNotNull(cell)) + { + String value = this.getCellValue(heard, i).toString(); + cellMap.put(value, i); + } + else + { + cellMap.put(null, i); + } + } + // 鏈夋暟鎹椂鎵嶅鐞 寰楀埌绫荤殑鎵鏈塮ield. + Field[] allFields = clazz.getDeclaredFields(); + // 瀹氫箟涓涓猰ap鐢ㄤ簬瀛樻斁鍒楃殑搴忓彿鍜宖ield. + Map fieldsMap = new HashMap(); + for (int col = 0; col < allFields.length; col++) + { + Field field = allFields[col]; + Excel attr = field.getAnnotation(Excel.class); + if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) + { + // 璁剧疆绫荤殑绉佹湁瀛楁灞炴у彲璁块棶. + field.setAccessible(true); + Integer column = cellMap.get(attr.name()); + fieldsMap.put(column, field); + } + } + for (int i = 1; i < rows; i++) + { + // 浠庣2琛屽紑濮嬪彇鏁版嵁,榛樿绗竴琛屾槸琛ㄥご. + Row row = sheet.getRow(i); + T entity = null; + for (Map.Entry entry : fieldsMap.entrySet()) + { + Object val = this.getCellValue(row, entry.getKey()); + + // 濡傛灉涓嶅瓨鍦ㄥ疄渚嬪垯鏂板缓. + entity = (entity == null ? clazz.newInstance() : entity); + // 浠巑ap涓緱鍒板搴斿垪鐨刦ield. + Field field = fieldsMap.get(entry.getKey()); + // 鍙栧緱绫诲瀷,骞舵牴鎹璞$被鍨嬭缃. + Class fieldType = field.getType(); + if (String.class == fieldType) + { + String s = Convert.toStr(val); + if (StringUtils.endsWith(s, ".0")) + { + val = StringUtils.substringBefore(s, ".0"); + } + else + { + val = Convert.toStr(val); + } + } + else if ((Integer.TYPE == fieldType) || (Integer.class == fieldType)) + { + val = Convert.toInt(val); + } + else if ((Long.TYPE == fieldType) || (Long.class == fieldType)) + { + val = Convert.toLong(val); + } + else if ((Double.TYPE == fieldType) || (Double.class == fieldType)) + { + val = Convert.toDouble(val); + } + else if ((Float.TYPE == fieldType) || (Float.class == fieldType)) + { + val = Convert.toFloat(val); + } + else if (BigDecimal.class == fieldType) + { + val = Convert.toBigDecimal(val); + } + else if (Date.class == fieldType) + { + if (val instanceof String) + { + val = DateUtils.parseDate(val); + } + else if (val instanceof Double) + { + val = DateUtil.getJavaDate((Double) val); + } + } + if (StringUtils.isNotNull(fieldType)) + { + Excel attr = field.getAnnotation(Excel.class); + String propertyName = field.getName(); + if (StringUtils.isNotEmpty(attr.targetAttr())) + { + propertyName = field.getName() + "." + attr.targetAttr(); + } + else if (StringUtils.isNotEmpty(attr.readConverterExp())) + { + val = reverseByExp(String.valueOf(val), attr.readConverterExp()); + } + ReflectUtils.invokeSetter(entity, propertyName, val); + } + } + list.add(entity); + } + } + return list; + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @param list 瀵煎嚭鏁版嵁闆嗗悎 + * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О + * @return 缁撴灉 + */ + public AjaxResult exportExcel(List list, List> lists, String sheetName, List sheetNameList, String title, String footer){ + this.init(list,lists,sheetName,sheetNameList,title,footer,Type.EXPORT); + return exportExcel(); + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @return 缁撴灉 + */ + public AjaxResult exportExcel(){ + OutputStream out = null; + try{ + // 鍙栧嚭涓鍏辨湁澶氬皯涓猻heet. + double sheetNo = 0; + sheetNo = sheetNameList.size(); + for (int index = 0; index <= sheetNo; index++){ + createSheet(sheetNo, index); + //sheet1鍜屽悗杈圭殑sheet琛ㄥご涓嶄竴鑷达紝鎵浠ラ渶瑕佸垎寮澶勭悊 + // 浜х敓涓琛 + Row row = sheet.createRow(0); + sheet.addMergedRegion(new CellRangeAddress(0,0,0,25)); + for(int i = 0; i<26; i++){ + Cell cell = row.createCell(i); + cell.setCellStyle(styles.get("title")); + } + Row row2 = sheet.getRow(0); + Cell cell = row2.getCell(0); + if(index == 0){ + cell.setCellValue(this.title+"("+this.sheetName+")"); + }else{ + cell.setCellValue(this.title+"("+this.sheetNameList.get(index-1)+")"); + } + int column = 0; + // 鍐欏叆鍚勪釜瀛楁鐨勫垪澶村悕绉 + row = sheet.createRow(1); + // 鍐欏叆鍚勪釜瀛楁鐨勫垪澶村悕绉 + //褰搃ndex涓0鏃,榛樿鏄涓涓猻heet,闇瑕佹妸list[1]濮撳悕鍒楀垹鎺 + List fields2 = new ArrayList<>(); + fields2.addAll(fields); + for (int i = 0; i < fields2.size();i++){ + Object[] os = fields2.get(i); + Excel excel = (Excel) os[1]; + this.createCell(excel, row, column++,index); + } + // 浜х敓涓琛 + Row rows = sheet.createRow(list.size()+3); + sheet.addMergedRegion(new CellRangeAddress(list.size()+3,list.size()+3,0,25)); + for(int i = 0; i<26; i++){ + Cell cells = rows.createCell(i); + cells.setCellStyle(styles.get("footer")); + } + Row rows2 = sheet.getRow(list.size()+3); + Cell cells = rows2.getCell(0); + cells.setCellValue(this.footer); + + if (Type.EXPORT.equals(type)){ + fillExcelData(index, row); + } + } + String filename = encodingFilename(sheetName); + out = new FileOutputStream(getAbsoluteFile(filename)); + wb.write(out); + return AjaxResult.success(filename); + }catch (Exception e){ + log.error("瀵煎嚭Excel寮傚父{}", e.getMessage()); + throw new CustomException("瀵煎嚭Excel澶辫触锛岃鑱旂郴缃戠珯绠$悊鍛橈紒"); + } + finally{ + if (wb != null) + { + try + { + wb.close(); + } + catch (IOException e1) + { + e1.printStackTrace(); + } + } + if (out != null) + { + try + { + out.close(); + } + catch (IOException e1) + { + e1.printStackTrace(); + } + } + } + } + + /** + * 濉厖excel鏁版嵁 + * + * @param index 搴忓彿 + * @param row 鍗曞厓鏍艰 + */ + public void fillExcelData(int index, Row row){ + int startNo = 0; + int endNo = 0; + if(index == 0){ + startNo = index * sheetSize; + endNo = Math.min(startNo + sheetSize, list.size()); + } else{ + endNo = Math.min(startNo + sheetSize, lists.get(index-1).size()); + } + for (int i = startNo; i < endNo; i++){ + row = sheet.createRow(i + 2 - startNo); + // 寰楀埌瀵煎嚭瀵硅薄. + T vo = (T) list.get(i); + int column = 0; + //褰搃ndex涓0鏃,榛樿鏄涓涓猻heet,闇瑕佹妸list[1]濮撳悕鍒楀垹鎺 + List fields2 = new ArrayList<>(); + fields2.addAll(fields); + for (Object[] os : fields2){ + Field field = (Field) os[0]; + Excel excel = (Excel) os[1]; + // 璁剧疆瀹炰綋绫荤鏈夊睘鎬у彲璁块棶 + field.setAccessible(true); + this.addCell(excel, row, vo, field, column++,index); + } + } + } + + /** + * 鍒涘缓琛ㄦ牸鏍峰紡 + * + * @param wb 宸ヤ綔钖勫璞 + * @return 鏍峰紡鍒楄〃 + */ + private Map createStyles(Workbook wb) + { + // 鍐欏叆鍚勬潯璁板綍,姣忔潯璁板綍瀵瑰簲excel琛ㄤ腑鐨勪竴琛 + Map styles = new HashMap(); + CellStyle style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setBorderRight(BorderStyle.THIN); + style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderLeft(BorderStyle.THIN); + style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderTop(BorderStyle.THIN); + style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderBottom(BorderStyle.THIN); + style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + Font dataFont = wb.createFont(); + dataFont.setFontName("瀹嬩綋"); + dataFont.setFontHeightInPoints((short) 10); + style.setFont(dataFont); +// style.setWrapText(true);//鑷姩鎹㈣ + styles.put("data", style); + + style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + Font dataFonts = wb.createFont(); + dataFont.setFontName("瀹嬩綋"); + dataFont.setFontHeightInPoints((short) 9); + style.setFont(dataFonts); + styles.put("datas", style); + + style = wb.createCellStyle(); + style.cloneStyleFrom(styles.get("data")); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); +// style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex()); +// style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + Font headerFont = wb.createFont(); + headerFont.setFontName("瀹嬩綋"); + headerFont.setFontHeightInPoints((short) 11); +// headerFont.setBold(true); +// headerFont.setColor(IndexedColors.WHITE.getIndex()); + style.setFont(headerFont); + style.setWrapText(true);//鑷姩鎹㈣ + styles.put("header", style); + + style = wb.createCellStyle(); + style.cloneStyleFrom(styles.get("datas")); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + Font footerFont = wb.createFont(); + footerFont.setFontName("瀹嬩綋"); + footerFont.setFontHeightInPoints((short) 12); + style.setFont(footerFont); + styles.put("footer", style); + + style = wb.createCellStyle(); + style.cloneStyleFrom(styles.get("data")); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + Font titleFont = wb.createFont(); + titleFont.setFontName("瀹嬩綋"); + titleFont.setFontHeightInPoints((short) 18); + style.setFont(titleFont); + styles.put("title", style); + + return styles; + } + + /** + * 鍒涘缓鍗曞厓鏍 + */ + public Cell createCell(Excel attr, Row row, int column,int index){ + // 鍒涘缓鍒 + Cell cell = row.createCell(column); + // 鍐欏叆鍒椾俊鎭 + cell.setCellValue(attr.name()); + setDataValidation(attr, row, column,index); + cell.setCellStyle(styles.get("header")); + return cell; + } + + /** + * 璁剧疆鍗曞厓鏍间俊鎭 + * + * @param value 鍗曞厓鏍煎 + * @param attr 娉ㄨВ鐩稿叧 + * @param cell 鍗曞厓鏍间俊鎭 + */ + public void setCellVo(Object value, Excel attr, Cell cell) + { + if (ColumnType.STRING == attr.cellType()) + { + cell.setCellType(CellType.NUMERIC); + cell.setCellValue(StringUtils.isNull(value) ? attr.defaultValue() : value + attr.suffix()); + } + else if (ColumnType.NUMERIC == attr.cellType()) + { + cell.setCellType(CellType.NUMERIC); + cell.setCellValue(Integer.parseInt(value + "")); + } + } + + /** + * 鍒涘缓琛ㄦ牸鏍峰紡 + */ + public void setDataValidation(Excel attr, Row row, int column,int index){ + if(index == 0){ + if (attr.name().indexOf("娉細") >= 0){ + sheet.setColumnWidth(column, 6000); + }else{ + if(column==0){ + // 璁剧疆鍒楀 + sheet.setColumnWidth(column, (int) ((attr.width()) * 120)); + }else if(column==2||column==3||column==4||column==6||column==7||column==9||column==11){ + // 璁剧疆鍒楀 + sheet.setColumnWidth(column, (int) ((attr.width()) * 115)); + }else{ + // 璁剧疆鍒楀 + sheet.setColumnWidth(column, (int) ((attr.width()) * 130)); + } + row.setHeight((short) (attr.height() * 50)); + } + // 濡傛灉璁剧疆浜嗘彁绀轰俊鎭垯榧犳爣鏀句笂鍘绘彁绀. + if (StringUtils.isNotEmpty(attr.prompt())){ + // 杩欓噷榛樿璁句簡2-101鍒楁彁绀. + setXSSFPrompt(sheet, "", attr.prompt(), 1, 100, column, column); + } + // 濡傛灉璁剧疆浜哻ombo灞炴у垯鏈垪鍙兘閫夋嫨涓嶈兘杈撳叆 + if (attr.combo().length > 0){ + // 杩欓噷榛樿璁句簡2-101鍒楀彧鑳介夋嫨涓嶈兘杈撳叆. + setXSSFValidation(sheet, attr.combo(), 1, 100, column, column); + } + }else{ + if (attr.name().indexOf("娉細") >= 0){ + sheet.setColumnWidth(column, 6000); + }else{ + if(column==0){ + // 璁剧疆鍒楀 + sheet.setColumnWidth(column, (int) ((attr.width()) * 120)); + }else if(column==2||column==3||column==4||column==6||column==7||column==9||column==11){ + // 璁剧疆鍒楀 + sheet.setColumnWidth(column, (int) ((attr.width()) * 100)); + }else{ + // 璁剧疆鍒楀 + sheet.setColumnWidth(column, (int) ((attr.width()) * 110)); + } + row.setHeight((short) (attr.height() * 50)); + } + // 濡傛灉璁剧疆浜嗘彁绀轰俊鎭垯榧犳爣鏀句笂鍘绘彁绀. + if (StringUtils.isNotEmpty(attr.prompt())){ + // 杩欓噷榛樿璁句簡2-101鍒楁彁绀. + setXSSFPrompt(sheet, "", attr.prompt(), 1, 100, column, column); + } + // 濡傛灉璁剧疆浜哻ombo灞炴у垯鏈垪鍙兘閫夋嫨涓嶈兘杈撳叆 + if (attr.combo().length > 0){ + // 杩欓噷榛樿璁句簡2-101鍒楀彧鑳介夋嫨涓嶈兘杈撳叆. + setXSSFValidation(sheet, attr.combo(), 1, 100, column, column); + } + } + } + + /** + * 娣诲姞鍗曞厓鏍 + */ + public Cell addCell(Excel attr, Row row, T vo, Field field, int column,int index){ + Cell cell = null; + try{ + // 璁剧疆琛岄珮 + row.setHeight((short) (attr.height() * 30)); + // 鏍规嵁Excel涓缃儏鍐靛喅瀹氭槸鍚﹀鍑,鏈変簺鎯呭喌闇瑕佷繚鎸佷负绌,甯屾湜鐢ㄦ埛濉啓杩欎竴鍒. + if (attr.isExport()){ + // 鍒涘缓cell + cell = row.createCell(column); + cell.setCellStyle(styles.get("data")); + + // 鐢ㄤ簬璇诲彇瀵硅薄涓殑灞炴 + Object value = getTargetValue(vo, field, attr); + String dateFormat = attr.dateFormat(); + String readConverterExp = attr.readConverterExp(); + if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value)){ + cell.setCellValue(DateUtils.parseDateToStr(dateFormat, (Date) value)); + }else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils.isNotNull(value)){ + cell.setCellValue(convertByExp(String.valueOf(value), readConverterExp)); + }else{ + // 璁剧疆鍒楃被鍨 + setCellVo(value, attr, cell); + } + } + } + catch (Exception e) + { + log.error("瀵煎嚭Excel澶辫触{}", e); + } + return cell; + } + + /** + * 璁剧疆 POI XSSFSheet 鍗曞厓鏍兼彁绀 + * + * @param sheet 琛ㄥ崟 + * @param promptTitle 鎻愮ず鏍囬 + * @param promptContent 鎻愮ず鍐呭 + * @param firstRow 寮濮嬭 + * @param endRow 缁撴潫琛 + * @param firstCol 寮濮嬪垪 + * @param endCol 缁撴潫鍒 + */ + public void setXSSFPrompt(Sheet sheet, String promptTitle, String promptContent, int firstRow, int endRow, + int firstCol, int endCol) + { + DataValidationHelper helper = sheet.getDataValidationHelper(); + DataValidationConstraint constraint = helper.createCustomConstraint("DD1"); + CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol); + DataValidation dataValidation = helper.createValidation(constraint, regions); + dataValidation.createPromptBox(promptTitle, promptContent); + dataValidation.setShowPromptBox(true); + sheet.addValidationData(dataValidation); + } + + /** + * 璁剧疆鏌愪簺鍒楃殑鍊煎彧鑳借緭鍏ラ鍒剁殑鏁版嵁,鏄剧ず涓嬫媺妗. + * + * @param sheet 瑕佽缃殑sheet. + * @param textlist 涓嬫媺妗嗘樉绀虹殑鍐呭 + * @param firstRow 寮濮嬭 + * @param endRow 缁撴潫琛 + * @param firstCol 寮濮嬪垪 + * @param endCol 缁撴潫鍒 + * @return 璁剧疆濂界殑sheet. + */ + public void setXSSFValidation(Sheet sheet, String[] textlist, int firstRow, int endRow, int firstCol, int endCol) + { + DataValidationHelper helper = sheet.getDataValidationHelper(); + // 鍔犺浇涓嬫媺鍒楄〃鍐呭 + DataValidationConstraint constraint = helper.createExplicitListConstraint(textlist); + // 璁剧疆鏁版嵁鏈夋晥鎬у姞杞藉湪鍝釜鍗曞厓鏍间笂,鍥涗釜鍙傛暟鍒嗗埆鏄細璧峰琛屻佺粓姝㈣銆佽捣濮嬪垪銆佺粓姝㈠垪 + CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol); + // 鏁版嵁鏈夋晥鎬у璞 + DataValidation dataValidation = helper.createValidation(constraint, regions); + // 澶勭悊Excel鍏煎鎬ч棶棰 + if (dataValidation instanceof XSSFDataValidation) + { + dataValidation.setSuppressDropDownArrow(true); + dataValidation.setShowErrorBox(true); + } + else + { + dataValidation.setSuppressDropDownArrow(false); + } + + sheet.addValidationData(dataValidation); + } + + /** + * 瑙f瀽瀵煎嚭鍊 0=鐢,1=濂,2=鏈煡 + * + * @param propertyValue 鍙傛暟鍊 + * @param converterExp 缈昏瘧娉ㄨВ + * @return 瑙f瀽鍚庡 + * @throws Exception + */ + public static String convertByExp(String propertyValue, String converterExp) throws Exception + { + try + { + String[] convertSource = converterExp.split(","); + for (String item : convertSource) + { + String[] itemArray = item.split("="); + if (itemArray[0].equals(propertyValue)) + { + return itemArray[1]; + } + } + } + catch (Exception e) + { + throw e; + } + return propertyValue; + } + + /** + * 鍙嶅悜瑙f瀽鍊 鐢=0,濂=1,鏈煡=2 + * + * @param propertyValue 鍙傛暟鍊 + * @param converterExp 缈昏瘧娉ㄨВ + * @return 瑙f瀽鍚庡 + * @throws Exception + */ + public static String reverseByExp(String propertyValue, String converterExp) throws Exception + { + try + { + String[] convertSource = converterExp.split(","); + for (String item : convertSource) + { + String[] itemArray = item.split("="); + if (itemArray[1].equals(propertyValue)) + { + return itemArray[0]; + } + } + } + catch (Exception e) + { + throw e; + } + return propertyValue; + } + + /** + * 缂栫爜鏂囦欢鍚 + */ + public String encodingFilename(String filename) + { +// filename = UUID.randomUUID().toString() + "_" + filename + ".xlsx"; + filename = filename + ".xlsx"; + return filename; + } + + /** + * 鑾峰彇涓嬭浇璺緞 + * + * @param filename 鏂囦欢鍚嶇О + */ + public String getAbsoluteFile(String filename) + { + String downloadPath = EvoConfig.getDownloadPath() + filename; + File desc = new File(downloadPath); + if (!desc.getParentFile().exists()) + { + desc.getParentFile().mkdirs(); + } + return downloadPath; + } + + /** + * 鑾峰彇bean涓殑灞炴у + * + * @param vo 瀹炰綋瀵硅薄 + * @param field 瀛楁 + * @param excel 娉ㄨВ + * @return 鏈缁堢殑灞炴у + * @throws Exception + */ + private Object getTargetValue(T vo, Field field, Excel excel) throws Exception{ + Object o = field.get(vo); + if (StringUtils.isNotEmpty(excel.targetAttr())){ + String target = excel.targetAttr(); + if (target.indexOf(".") > -1){ + String[] targets = target.split("[.]"); + for (String name : targets){ + o = getValue(o, name); + } + }else{ + o = getValue(o, target); + } + } + return o; + } + + /** + * 浠ョ被鐨勫睘鎬х殑get鏂规硶鏂规硶褰㈠紡鑾峰彇鍊 + * + * @param o + * @param name + * @return value + * @throws Exception + */ + private Object getValue(Object o, String name) throws Exception + { + if (StringUtils.isNotEmpty(name)) + { + Class clazz = o.getClass(); + String methodName = "get" + name.substring(0, 1).toUpperCase() + name.substring(1); + Method method = clazz.getMethod(methodName); + o = method.invoke(o); + } + return o; + } + + /** + * 寰楀埌鎵鏈夊畾涔夊瓧娈 + */ + private void createExcelField() + { + this.fields = new ArrayList(); + List tempFields = new ArrayList<>(); + tempFields.addAll(Arrays.asList(clazz.getSuperclass().getDeclaredFields())); + tempFields.addAll(Arrays.asList(clazz.getDeclaredFields())); + for (Field field : tempFields) + { + // 鍗曟敞瑙 + if (field.isAnnotationPresent(Excel.class)) + { + putToField(field, field.getAnnotation(Excel.class)); + } + + // 澶氭敞瑙 + if (field.isAnnotationPresent(Excels.class)) + { + Excels attrs = field.getAnnotation(Excels.class); + Excel[] excels = attrs.value(); + for (Excel excel : excels) + { + putToField(field, excel); + } + } + } + } + + /** + * 鏀惧埌瀛楁闆嗗悎涓 + */ + private void putToField(Field field, Excel attr) + { + if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) + { + this.fields.add(new Object[] { field, attr }); + } + } + + /** + * 鍒涘缓涓涓伐浣滅翱 + */ + public void createWorkbook() + { + this.wb = new SXSSFWorkbook(500); + } + + /** + * 鍒涘缓宸ヤ綔琛 + * + * @param sheetNo sheet鏁伴噺 + * @param index 搴忓彿 + */ + public void createSheet(double sheetNo, int index){ + this.sheet = wb.createSheet(); + this.styles = createStyles(wb); + // 璁剧疆宸ヤ綔琛ㄧ殑鍚嶇О. + if (index == 0){ + wb.setSheetName(index, sheetName); + }else{ + wb.setSheetName(index, sheetNameList.get(index-1)); + } + sheet.getPrintSetup().setPaperSize(PrintSetup.A4_PAPERSIZE); + //璁剧疆妯悜鎵撳嵃 + sheet.getPrintSetup().setLandscape(true); + } + + /** + * 鑾峰彇鍗曞厓鏍煎 + * + * @param row 鑾峰彇鐨勮 + * @param column 鑾峰彇鍗曞厓鏍煎垪鍙 + * @return 鍗曞厓鏍煎 + */ + public Object getCellValue(Row row, int column) + { + if (row == null) + { + return row; + } + Object val = ""; + try + { + Cell cell = row.getCell(column); + if (StringUtils.isNotNull(cell)) + { + if (cell.getCellTypeEnum() == CellType.NUMERIC || cell.getCellTypeEnum() == CellType.FORMULA) + { + val = cell.getNumericCellValue(); + if (HSSFDateUtil.isCellDateFormatted(cell)) + { + val = DateUtil.getJavaDate((Double) val); // POI Excel 鏃ユ湡鏍煎紡杞崲 + } + else + { + if ((Double) val % 1 > 0) + { + val = new DecimalFormat("0.00").format(val); + } + else + { + val = new DecimalFormat("0").format(val); + } + } + } + else if (cell.getCellTypeEnum() == CellType.STRING) + { + val = cell.getStringCellValue(); + } + else if (cell.getCellTypeEnum() == CellType.BOOLEAN) + { + val = cell.getBooleanCellValue(); + } + else if (cell.getCellTypeEnum() == CellType.ERROR) + { + val = cell.getErrorCellValue(); + } + + } + } + catch (Exception e) + { + return val; + } + return val; + } + + public static ArrayList> readExcel2007(Sheet sheet) { + if(sheet==null){ + return null; + } + try { + ArrayList> rowList = new ArrayList>(); + ArrayList colList; + Row row; + Cell cell; + Object value; + for (int i = sheet.getFirstRowNum(), rowCount = 0; rowCount < sheet.getPhysicalNumberOfRows(); i++) { + row = sheet.getRow(i); + colList = new ArrayList(); + if (row == null) { + // 褰撹鍙栬涓虹┖鏃 + if (i != sheet.getPhysicalNumberOfRows()) {// 鍒ゆ柇鏄惁鏄渶鍚庝竴琛 + rowList.add(colList); + } + continue; + } else { + rowCount++; + } + for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) { + cell = row.getCell(j); + if (cell == null || cell.getCellType() == CellType.BLANK) { + // 褰撹鍗曞厓鏍间负绌 + if (j != row.getLastCellNum()) {// 鍒ゆ柇鏄惁鏄琛屼腑鏈鍚庝竴涓崟鍏冩牸 + colList.add(""); + } + continue; + } + switch (cell.getCellType()) { + case STRING: + // System.out.println(i + "琛" + j + " 鍒 is String + // type"); + value = cell.getStringCellValue(); + break; + case NUMERIC: + if ("@".equals(cell.getCellStyle().getDataFormatString())) { + value = df.format(cell.getNumericCellValue()); + } else if ("General".equals(cell.getCellStyle().getDataFormatString())) { + value = nf.format(cell.getNumericCellValue()); + } else { + value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())); + } + // System.out.println(i + "琛" + j + // + " 鍒 is Number type ; DateFormt:" + // + value.toString()); + break; + case BOOLEAN: + // System.out.println(i + "琛" + j + " 鍒 is Boolean + // type"); + value = Boolean.valueOf(cell.getBooleanCellValue()); + break; + case BLANK: + // System.out.println(i + "琛" + j + " 鍒 is Blank type"); + value = ""; + break; + default: + // System.out.println(i + "琛" + j + " 鍒 is default + // type"); + value = cell.toString(); + }// end switch + colList.add(value); + } // end for j + rowList.add(colList); + } // end for i + + return rowList; + } catch (Exception e) { + System.out.println("exception"); + return null; + } + } + + public static DecimalFormat getDf() { + return df; + } + + public static void setDf(DecimalFormat df) { + ExcelUtilSs.df = df; + } + + public static SimpleDateFormat getSdf() { + return sdf; + } + + public static void setSdf(SimpleDateFormat sdf) { + ExcelUtilSs.sdf = sdf; + } + + public static DecimalFormat getNf() { + return nf; + } + + public static void setNf(DecimalFormat nf) { + ExcelUtilSs.nf = nf; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/poi/ExcelUtils.java b/evo-admin/src/main/java/com/evo/common/utils/poi/ExcelUtils.java new file mode 100644 index 0000000..4041997 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/poi/ExcelUtils.java @@ -0,0 +1,1009 @@ +package com.evo.common.utils.poi; + +import com.evo.common.annotation.Excel; +import com.evo.common.annotation.Excel.Type; +import com.evo.common.annotation.Excel.ColumnType; +import com.evo.common.annotation.Excels; +import com.evo.common.config.EvoConfig; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.exception.CustomException; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFDateUtil; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.ss.util.CellRangeAddressList; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.apache.poi.xssf.usermodel.XSSFDataValidation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * Excel鐩稿叧澶勭悊 + * + * @author ruoyi + */ +public class ExcelUtils{ + private static final Logger log = LoggerFactory.getLogger(ExcelUtils.class); + + /** + * Excel sheet鏈澶ц鏁帮紝榛樿65536 + */ + public static final int sheetSize = 65536; + + /** + * 宸ヤ綔琛ㄥ悕绉 + */ + private String sheetName; + + /** + * 宸ヤ綔琛ㄥ悕绉 + */ + private String sheetName2; + + /** + * 宸ヤ綔琛ㄥ悕绉 + */ + private String sheetName3; + + /** + * 宸ヤ綔琛ㄥ悕绉 + */ + private String sheetName4; + /** + * 宸ヤ綔琛ㄥ悕绉 + */ + private String sheetName5; + /** + * 宸ヤ綔琛ㄥ悕绉 + */ + private String sheetName6; + + /** + * 宸ヤ綔琛ㄦ爣棰 + */ + private String title; + /** + * 鏍囧噯浠舵爣棰 + */ + private String titles; + + /** + * 鏂囦欢鍚 + */ + private String code; + + /** + * 瀵煎嚭绫诲瀷锛圗XPORT:瀵煎嚭鏁版嵁锛汭MPORT锛氬鍏ユā鏉匡級 + */ + private Type type; + + /** + * 宸ヤ綔钖勫璞 + */ + private Workbook wb; + + /** + * 宸ヤ綔琛ㄥ璞 + */ + private Sheet sheet; + + /** + * 鏍峰紡鍒楄〃 + */ + private Map styles; + + /** + * 瀵煎叆瀵煎嚭鏁版嵁鍒楄〃 + */ + private List list; + + /** + * 瀵煎叆瀵煎嚭鏁版嵁鍒楄〃 + */ + private List list2; + /** + * 瀵煎叆瀵煎嚭鏁版嵁鍒楄〃 + */ + private List list3; + /** + * 瀵煎叆瀵煎嚭鏁版嵁鍒楄〃 + */ + private List list4; + /** + * 瀵煎叆瀵煎嚭鏁版嵁鍒楄〃 + */ + private List list5; + /** + * 瀵煎叆瀵煎嚭鏁版嵁鍒楄〃 + */ + private List list6; + + /** + * 娉ㄨВ鍒楄〃 + */ + private List fields; + + /** + * 瀹炰綋瀵硅薄 + */ + public Class clazz; + + public ExcelUtils(Class clazz) + { + this.clazz = clazz; + } + + // 榛樿鍗曞厓鏍煎唴瀹逛负鏁板瓧鏃舵牸寮 + private static DecimalFormat df = new DecimalFormat("0"); + // 榛樿鍗曞厓鏍兼牸寮忓寲鏃ユ湡瀛楃涓 + private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // 鏍煎紡鍖栨暟瀛 + private static DecimalFormat nf = new DecimalFormat("0"); + + public void init(List list,List list2,List list3,List list4,List list5,List list6,String sheetName,String sheetName2,String sheetName3,String sheetName4,String sheetName5,String sheetName6,String title,String titles,String code, Type type) + { + if (list == null){ + list = new ArrayList(); + } + if (list2 == null){ + list2 = new ArrayList(); + } + if (list3 == null){ + list3 = new ArrayList(); + } + if (list4 == null){ + list4 = new ArrayList(); + } + if (list5 == null){ + list5 = new ArrayList(); + } + if (list6 == null){ + list6 = new ArrayList(); + } + this.list = list; + this.sheetName = sheetName; + this.list2 = list2; + this.sheetName2 = sheetName2; + this.list3 = list3; + this.sheetName3 = sheetName3; + this.list4 = list4; + this.sheetName4 = sheetName4; + this.list5 = list5; + this.sheetName5 = sheetName5; + this.list6 = list6; + this.sheetName6 = sheetName6; + this.type = type; + this.title = title; + this.titles = titles; + this.code = code; + createExcelField(); + createWorkbook(); + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @param list 瀵煎嚭鏁版嵁闆嗗悎 + * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О + * @return 缁撴灉 + */ + public AjaxResult exportExcel(List list, List list2, List list3, List list4, List list5, List list6, String sheetName, String sheetName2, String sheetName3, String sheetName4, String sheetName5, String sheetName6, String title, String titles, String code) + { + this.init(list,list2,list3,list4,list5,list6,sheetName,sheetName2,sheetName3,sheetName4,sheetName5,sheetName6,title,titles,code,Type.EXPORT); + return exportExcel(); + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @return 缁撴灉 + */ + public AjaxResult exportExcel(){ + OutputStream out = null; + try{ + // 鍙栧嚭涓鍏辨湁澶氬皯涓猻heet. + double sheetNo = 0; + if(StringUtils.isNotEmpty(sheetName2)){ + sheetNo = 1; + } + if(StringUtils.isNotEmpty(sheetName3)){ + sheetNo = 2; + } + if(StringUtils.isNotEmpty(sheetName4)){ + sheetNo = 3; + } + if(StringUtils.isNotEmpty(sheetName5)){ + sheetNo = 4; + } + if(StringUtils.isNotEmpty(sheetName6)){ + sheetNo = 5; + } + for (int index = 0; index <= sheetNo; index++){ + createSheet(sheetNo, index); + // 浜х敓涓琛 + Row row = sheet.createRow(0); + sheet.addMergedRegion(new CellRangeAddress(0,0,0,8)); + for(int i = 0; i<9; i++){ + Cell cell = row.createCell(i); + cell.setCellStyle(styles.get("title")); + } + Row row2 = sheet.getRow(0); + Cell cell = row2.getCell(0); + if(index==0){ + cell.setCellValue(this.title+"("+sheetName+")"); + }else if(index==1){ + cell.setCellValue(this.title+"("+sheetName2+")"); + }else if(index==2){ + cell.setCellValue(this.titles+"("+sheetName3+")"); + }else if(index==3){ + cell.setCellValue(this.title+"("+sheetName4+")"); + }else if(index==4){ + cell.setCellValue(this.title+"("+sheetName5+")"); + }else{ + cell.setCellValue(this.title+"("+sheetName6+")"); + } + int column = 0; + // 鍐欏叆鍚勪釜瀛楁鐨勫垪澶村悕绉 + row = sheet.createRow(1); + for (Object[] os : fields){ + Excel excel = (Excel) os[1]; + this.createCell(excel, row, column++); + } + if (Type.EXPORT.equals(type)){ + fillExcelData(index, row); + } + } + + String filename = encodingFilename(this.code+"-"+sheetName); + out = new FileOutputStream(getAbsoluteFile(filename)); + wb.write(out); + return AjaxResult.success(filename); + } + catch (Exception e){ + log.error("瀵煎嚭Excel寮傚父{}", e.getMessage()); + throw new CustomException("瀵煎嚭Excel澶辫触锛岃鑱旂郴缃戠珯绠$悊鍛橈紒"); + } + finally{ + if (wb != null){ + try{ + wb.close(); + } + catch (IOException e1){ + e1.printStackTrace(); + } + } + if (out != null){ + try{ + out.close(); + } + catch (IOException e1){ + e1.printStackTrace(); + } + } + } + } + + /** + * 濉厖excel鏁版嵁 + * + * @param index 搴忓彿 + * @param row 鍗曞厓鏍艰 + */ + public void fillExcelData(int index, Row row){ + int startNo = 0; + int endNo = Math.min(startNo + sheetSize, list.size()); + int endNo2 = Math.min(startNo + sheetSize, list2.size()); + int endNo3 = Math.min(startNo + sheetSize, list3.size()); + int endNo4 = Math.min(startNo + sheetSize, list4.size()); + int endNo5 = Math.min(startNo + sheetSize, list5.size()); + int endNo6 = Math.min(startNo + sheetSize, list6.size()); + if(index == 0){ + for (int i = startNo; i < endNo; i++){ + row = sheet.createRow(i + 2); + // 寰楀埌瀵煎嚭瀵硅薄. + T vo = (T) list.get(i); + int column = 0; + for (Object[] os : fields){ + Field field = (Field) os[0]; + Excel excel = (Excel) os[1]; + // 璁剧疆瀹炰綋绫荤鏈夊睘鎬у彲璁块棶 + field.setAccessible(true); + this.addCell(excel, row, vo, field, column++); + } + } + }else if(index == 1){ + for (int i = 0; i < endNo2; i++){ + row = sheet.createRow(i + 2); + // 寰楀埌瀵煎嚭瀵硅薄. + T vo = (T) list2.get(i); + int column = 0; + for (Object[] os : fields){ + Field field = (Field) os[0]; + Excel excel = (Excel) os[1]; + // 璁剧疆瀹炰綋绫荤鏈夊睘鎬у彲璁块棶 + field.setAccessible(true); + this.addCell(excel, row, vo, field, column++); + } + } + }else if(index == 2){ + for (int i = 0; i < endNo3; i++){ + row = sheet.createRow(i + 2); + // 寰楀埌瀵煎嚭瀵硅薄. + T vo = (T) list3.get(i); + int column = 0; + for (Object[] os : fields){ + Field field = (Field) os[0]; + Excel excel = (Excel) os[1]; + // 璁剧疆瀹炰綋绫荤鏈夊睘鎬у彲璁块棶 + field.setAccessible(true); + this.addCell(excel, row, vo, field, column++); + } + } + }else if(index == 3){ + for (int i = 0; i < endNo4; i++){ + row = sheet.createRow(i + 2); + // 寰楀埌瀵煎嚭瀵硅薄. + T vo = (T) list4.get(i); + int column = 0; + for (Object[] os : fields){ + Field field = (Field) os[0]; + Excel excel = (Excel) os[1]; + // 璁剧疆瀹炰綋绫荤鏈夊睘鎬у彲璁块棶 + field.setAccessible(true); + this.addCell(excel, row, vo, field, column++); + } + } + }else if(index == 4){ + for (int i = 0; i < endNo5; i++){ + row = sheet.createRow(i + 2); + // 寰楀埌瀵煎嚭瀵硅薄. + T vo = (T) list5.get(i); + int column = 0; + for (Object[] os : fields){ + Field field = (Field) os[0]; + Excel excel = (Excel) os[1]; + // 璁剧疆瀹炰綋绫荤鏈夊睘鎬у彲璁块棶 + field.setAccessible(true); + this.addCell(excel, row, vo, field, column++); + } + } + }else if(index == 5){ + for (int i = 0; i < endNo6; i++){ + row = sheet.createRow(i + 2); + // 寰楀埌瀵煎嚭瀵硅薄. + T vo = (T) list6.get(i); + int column = 0; + for (Object[] os : fields){ + Field field = (Field) os[0]; + Excel excel = (Excel) os[1]; + // 璁剧疆瀹炰綋绫荤鏈夊睘鎬у彲璁块棶 + field.setAccessible(true); + this.addCell(excel, row, vo, field, column++); + } + } + } + + } + + /** + * 鍒涘缓琛ㄦ牸鏍峰紡 + * + * @param wb 宸ヤ綔钖勫璞 + * @return 鏍峰紡鍒楄〃 + */ + private Map createStyles(Workbook wb){ + // 鍐欏叆鍚勬潯璁板綍,姣忔潯璁板綍瀵瑰簲excel琛ㄤ腑鐨勪竴琛 + Map styles = new HashMap(); + + CellStyle style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setBorderRight(BorderStyle.THIN); + style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderLeft(BorderStyle.THIN); + style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderTop(BorderStyle.THIN); + style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderBottom(BorderStyle.THIN); + style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + Font dataFont = wb.createFont(); + dataFont.setFontName("瀹嬩綋"); + dataFont.setFontHeightInPoints((short) 11); + style.setFont(dataFont); + styles.put("data", style); + + style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.LEFT); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setBorderRight(BorderStyle.THIN); + style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderLeft(BorderStyle.THIN); + style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderTop(BorderStyle.THIN); + style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderBottom(BorderStyle.THIN); + style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + Font dataFonts = wb.createFont(); + dataFonts.setFontName("瀹嬩綋"); + dataFonts.setFontHeightInPoints((short) 11); + style.setFont(dataFonts); + styles.put("datas", style); + + style = wb.createCellStyle(); + style.cloneStyleFrom(styles.get("data")); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); +// style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex()); +// style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + Font headerFont = wb.createFont(); + headerFont.setFontName("瀹嬩綋"); + headerFont.setFontHeightInPoints((short) 12); +// headerFont.setBold(true); +// headerFont.setColor(IndexedColors.WHITE.getIndex()); + style.setFont(headerFont); + styles.put("header", style); + + style = wb.createCellStyle(); + style.cloneStyleFrom(styles.get("data")); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); +// style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex()); +// style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + Font titleFont = wb.createFont(); + titleFont.setFontName("瀹嬩綋"); + titleFont.setFontHeightInPoints((short) 18); +// headerFont.setBold(true); +// headerFont.setColor(IndexedColors.WHITE.getIndex()); + style.setFont(titleFont); + styles.put("title", style); + + return styles; + } + + /** + * 鍒涘缓鍗曞厓鏍 + */ + public Cell createCell(Excel attr, Row row, int column){ + // 鍒涘缓鍒 + Cell cell = row.createCell(column); + // 鍐欏叆鍒椾俊鎭 + cell.setCellValue(attr.name()); + setDataValidation(attr, row, column); + cell.setCellStyle(styles.get("header")); + return cell; + } + + /** + * 璁剧疆鍗曞厓鏍间俊鎭 + * + * @param value 鍗曞厓鏍煎 + * @param attr 娉ㄨВ鐩稿叧 + * @param cell 鍗曞厓鏍间俊鎭 + */ + public void setCellVo(Object value, Excel attr, Cell cell){ + if (ColumnType.STRING == attr.cellType()){ + cell.setCellType(CellType.NUMERIC); + cell.setCellValue(StringUtils.isNull(value) ? attr.defaultValue() : value + attr.suffix()); + } + else if (ColumnType.NUMERIC == attr.cellType()){ + cell.setCellType(CellType.NUMERIC); + cell.setCellValue(Integer.parseInt(value + "")); + } + } + + /** + * 鍒涘缓琛ㄦ牸鏍峰紡 + */ + public void setDataValidation(Excel attr, Row row, int column){ + if (attr.name().indexOf("娉細") >= 0){ + sheet.setColumnWidth(column, 6000); + }else{ + if(column == 0){ + // 璁剧疆鍒楀(绗竴鍒楀搴) + sheet.setColumnWidth(column, (int) ((attr.width()) * 140)); + row.setHeight((short) (attr.height() * 26)); + }else if(column>0 && column<3){ + // 璁剧疆鍒楀(绗簩鍒楀拰绗笁鍒楀搴) + sheet.setColumnWidth(column, (int) ((attr.width() + 1) * 320)); + row.setHeight((short) (attr.height() * 26)); + }else if(column>2 && column<7){ + // 璁剧疆鍒楀 + sheet.setColumnWidth(column, (int) ((attr.width() + 0.2) * 200)); + row.setHeight((short) (attr.height() * 26)); + }else{ + // 璁剧疆鍒楀 + sheet.setColumnWidth(column, (int) ((attr.width() + 0.2) * 180)); + row.setHeight((short) (attr.height() * 26)); + } + } + // 濡傛灉璁剧疆浜嗘彁绀轰俊鎭垯榧犳爣鏀句笂鍘绘彁绀. + if (StringUtils.isNotEmpty(attr.prompt())) + { + // 杩欓噷榛樿璁句簡2-101鍒楁彁绀. + setXSSFPrompt(sheet, "", attr.prompt(), 1, 100, column, column); + } + // 濡傛灉璁剧疆浜哻ombo灞炴у垯鏈垪鍙兘閫夋嫨涓嶈兘杈撳叆 + if (attr.combo().length > 0) + { + // 杩欓噷榛樿璁句簡2-101鍒楀彧鑳介夋嫨涓嶈兘杈撳叆. + setXSSFValidation(sheet, attr.combo(), 1, 100, column, column); + } + } + + /** + * 娣诲姞鍗曞厓鏍 + */ + public Cell addCell(Excel attr, Row row, T vo, Field field, int column){ + Cell cell = null; + try{ + // 璁剧疆琛岄珮 + row.setHeight((short) (attr.height() * 26)); + // 鏍规嵁Excel涓缃儏鍐靛喅瀹氭槸鍚﹀鍑,鏈変簺鎯呭喌闇瑕佷繚鎸佷负绌,甯屾湜鐢ㄦ埛濉啓杩欎竴鍒. + if (attr.isExport()){ + // 鍒涘缓cell + cell = row.createCell(column); + if(column>0&&column<3){ + cell.setCellStyle(styles.get("datas")); + }else{ + cell.setCellStyle(styles.get("data")); + } + + // 鐢ㄤ簬璇诲彇瀵硅薄涓殑灞炴 + Object value = getTargetValue(vo, field, attr); + String dateFormat = attr.dateFormat(); + String readConverterExp = attr.readConverterExp(); + if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value)){ + cell.setCellValue(DateUtils.parseDateToStr(dateFormat, (Date) value)); + } + else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils.isNotNull(value)){ + cell.setCellValue(convertByExp(String.valueOf(value), readConverterExp)); + } + else{ + // 璁剧疆鍒楃被鍨 + setCellVo(value, attr, cell); + } + } + } + catch (Exception e) + { + log.error("瀵煎嚭Excel澶辫触{}", e); + } + return cell; + } + + /** + * 璁剧疆 POI XSSFSheet 鍗曞厓鏍兼彁绀 + * + * @param sheet 琛ㄥ崟 + * @param promptTitle 鎻愮ず鏍囬 + * @param promptContent 鎻愮ず鍐呭 + * @param firstRow 寮濮嬭 + * @param endRow 缁撴潫琛 + * @param firstCol 寮濮嬪垪 + * @param endCol 缁撴潫鍒 + */ + public void setXSSFPrompt(Sheet sheet, String promptTitle, String promptContent, int firstRow, int endRow, + int firstCol, int endCol) + { + DataValidationHelper helper = sheet.getDataValidationHelper(); + DataValidationConstraint constraint = helper.createCustomConstraint("DD1"); + CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol); + DataValidation dataValidation = helper.createValidation(constraint, regions); + dataValidation.createPromptBox(promptTitle, promptContent); + dataValidation.setShowPromptBox(true); + sheet.addValidationData(dataValidation); + } + + /** + * 璁剧疆鏌愪簺鍒楃殑鍊煎彧鑳借緭鍏ラ鍒剁殑鏁版嵁,鏄剧ず涓嬫媺妗. + * + * @param sheet 瑕佽缃殑sheet. + * @param textlist 涓嬫媺妗嗘樉绀虹殑鍐呭 + * @param firstRow 寮濮嬭 + * @param endRow 缁撴潫琛 + * @param firstCol 寮濮嬪垪 + * @param endCol 缁撴潫鍒 + * @return 璁剧疆濂界殑sheet. + */ + public void setXSSFValidation(Sheet sheet, String[] textlist, int firstRow, int endRow, int firstCol, int endCol) + { + DataValidationHelper helper = sheet.getDataValidationHelper(); + // 鍔犺浇涓嬫媺鍒楄〃鍐呭 + DataValidationConstraint constraint = helper.createExplicitListConstraint(textlist); + // 璁剧疆鏁版嵁鏈夋晥鎬у姞杞藉湪鍝釜鍗曞厓鏍间笂,鍥涗釜鍙傛暟鍒嗗埆鏄細璧峰琛屻佺粓姝㈣銆佽捣濮嬪垪銆佺粓姝㈠垪 + CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol); + // 鏁版嵁鏈夋晥鎬у璞 + DataValidation dataValidation = helper.createValidation(constraint, regions); + // 澶勭悊Excel鍏煎鎬ч棶棰 + if (dataValidation instanceof XSSFDataValidation) + { + dataValidation.setSuppressDropDownArrow(true); + dataValidation.setShowErrorBox(true); + } + else + { + dataValidation.setSuppressDropDownArrow(false); + } + + sheet.addValidationData(dataValidation); + } + + /** + * 瑙f瀽瀵煎嚭鍊 0=鐢,1=濂,2=鏈煡 + * + * @param propertyValue 鍙傛暟鍊 + * @param converterExp 缈昏瘧娉ㄨВ + * @return 瑙f瀽鍚庡 + * @throws Exception + */ + public static String convertByExp(String propertyValue, String converterExp) throws Exception + { + try + { + String[] convertSource = converterExp.split(","); + for (String item : convertSource) + { + String[] itemArray = item.split("="); + if (itemArray[0].equals(propertyValue)) + { + return itemArray[1]; + } + } + } + catch (Exception e) + { + throw e; + } + return propertyValue; + } + + /** + * 鍙嶅悜瑙f瀽鍊 鐢=0,濂=1,鏈煡=2 + * + * @param propertyValue 鍙傛暟鍊 + * @param converterExp 缈昏瘧娉ㄨВ + * @return 瑙f瀽鍚庡 + * @throws Exception + */ + public static String reverseByExp(String propertyValue, String converterExp) throws Exception + { + try + { + String[] convertSource = converterExp.split(","); + for (String item : convertSource) + { + String[] itemArray = item.split("="); + if (itemArray[1].equals(propertyValue)) + { + return itemArray[0]; + } + } + } + catch (Exception e) + { + throw e; + } + return propertyValue; + } + + /** + * 缂栫爜鏂囦欢鍚 + */ + public String encodingFilename(String filename){ +// filename = UUID.randomUUID().toString() + "_" + filename + ".xlsx"; + filename = filename + ".xlsx"; + return filename; + } + + /** + * 鑾峰彇涓嬭浇璺緞 + * + * @param filename 鏂囦欢鍚嶇О + */ + public String getAbsoluteFile(String filename) + { + String downloadPath = EvoConfig.getDownloadPath() + filename; + File desc = new File(downloadPath); + if (!desc.getParentFile().exists()) + { + desc.getParentFile().mkdirs(); + } + return downloadPath; + } + + /** + * 鑾峰彇bean涓殑灞炴у + * + * @param vo 瀹炰綋瀵硅薄 + * @param field 瀛楁 + * @param excel 娉ㄨВ + * @return 鏈缁堢殑灞炴у + * @throws Exception + */ + private Object getTargetValue(T vo, Field field, Excel excel) throws Exception + { + Object o = field.get(vo); + if (StringUtils.isNotEmpty(excel.targetAttr())) + { + String target = excel.targetAttr(); + if (target.indexOf(".") > -1) + { + String[] targets = target.split("[.]"); + for (String name : targets) + { + o = getValue(o, name); + } + } + else + { + o = getValue(o, target); + } + } + return o; + } + + /** + * 浠ョ被鐨勫睘鎬х殑get鏂规硶鏂规硶褰㈠紡鑾峰彇鍊 + * + * @param o + * @param name + * @return value + * @throws Exception + */ + private Object getValue(Object o, String name) throws Exception + { + if (StringUtils.isNotEmpty(name)) + { + Class clazz = o.getClass(); + String methodName = "get" + name.substring(0, 1).toUpperCase() + name.substring(1); + Method method = clazz.getMethod(methodName); + o = method.invoke(o); + } + return o; + } + + /** + * 寰楀埌鎵鏈夊畾涔夊瓧娈 + */ + private void createExcelField() + { + this.fields = new ArrayList(); + List tempFields = new ArrayList<>(); + tempFields.addAll(Arrays.asList(clazz.getSuperclass().getDeclaredFields())); + tempFields.addAll(Arrays.asList(clazz.getDeclaredFields())); + for (Field field : tempFields) + { + // 鍗曟敞瑙 + if (field.isAnnotationPresent(Excel.class)) + { + putToField(field, field.getAnnotation(Excel.class)); + } + + // 澶氭敞瑙 + if (field.isAnnotationPresent(Excels.class)) + { + Excels attrs = field.getAnnotation(Excels.class); + Excel[] excels = attrs.value(); + for (Excel excel : excels) + { + putToField(field, excel); + } + } + } + } + + /** + * 鏀惧埌瀛楁闆嗗悎涓 + */ + private void putToField(Field field, Excel attr) + { + if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) + { + this.fields.add(new Object[] { field, attr }); + } + } + + /** + * 鍒涘缓涓涓伐浣滅翱 + */ + public void createWorkbook() + { + this.wb = new SXSSFWorkbook(500); + } + + /** + * 鍒涘缓宸ヤ綔琛 + * + * @param sheetNo sheet鏁伴噺 + * @param index 搴忓彿 + */ + public void createSheet(double sheetNo, int index){ + this.sheet = wb.createSheet(); + this.styles = createStyles(wb); + // 璁剧疆宸ヤ綔琛ㄧ殑鍚嶇О. + if (index == 0){ + wb.setSheetName(index, sheetName); + }else if(index == 1){ + wb.setSheetName(index, sheetName2); + }else if(index == 2){ + wb.setSheetName(index, sheetName3); + }else if(index == 3){ + wb.setSheetName(index, sheetName4); + }else if(index == 4){ + wb.setSheetName(index, sheetName5); + }else if(index == 5){ + wb.setSheetName(index, sheetName6); + } + //璁剧疆妯悜鎵撳嵃 + sheet.getPrintSetup().setLandscape(true); + } + + /** + * 鑾峰彇鍗曞厓鏍煎 + * + * @param row 鑾峰彇鐨勮 + * @param column 鑾峰彇鍗曞厓鏍煎垪鍙 + * @return 鍗曞厓鏍煎 + */ + public Object getCellValue(Row row, int column) + { + if (row == null) + { + return row; + } + Object val = ""; + try + { + Cell cell = row.getCell(column); + if (StringUtils.isNotNull(cell)) + { + if (cell.getCellTypeEnum() == CellType.NUMERIC || cell.getCellTypeEnum() == CellType.FORMULA) + { + val = cell.getNumericCellValue(); + if (HSSFDateUtil.isCellDateFormatted(cell)) + { + val = DateUtil.getJavaDate((Double) val); // POI Excel 鏃ユ湡鏍煎紡杞崲 + } + else + { + if ((Double) val % 1 > 0) + { + val = new DecimalFormat("0.00").format(val); + } + else + { + val = new DecimalFormat("0").format(val); + } + } + } + else if (cell.getCellTypeEnum() == CellType.STRING) + { + val = cell.getStringCellValue(); + } + else if (cell.getCellTypeEnum() == CellType.BOOLEAN) + { + val = cell.getBooleanCellValue(); + } + else if (cell.getCellTypeEnum() == CellType.ERROR) + { + val = cell.getErrorCellValue(); + } + + } + } + catch (Exception e) + { + return val; + } + return val; + } + + public static ArrayList> readExcel2007(Sheet sheet) { + if(sheet==null){ + return null; + } + try { + ArrayList> rowList = new ArrayList>(); + ArrayList colList; + Row row; + Cell cell; + Object value; + for (int i = sheet.getFirstRowNum(), rowCount = 0; rowCount < sheet.getPhysicalNumberOfRows(); i++) { + row = sheet.getRow(i); + colList = new ArrayList(); + if (row == null) { + // 褰撹鍙栬涓虹┖鏃 + if (i != sheet.getPhysicalNumberOfRows()) {// 鍒ゆ柇鏄惁鏄渶鍚庝竴琛 + rowList.add(colList); + } + continue; + } else { + rowCount++; + } + for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) { + cell = row.getCell(j); + if (cell == null || cell.getCellType() == CellType.BLANK) { + // 褰撹鍗曞厓鏍间负绌 + if (j != row.getLastCellNum()) {// 鍒ゆ柇鏄惁鏄琛屼腑鏈鍚庝竴涓崟鍏冩牸 + colList.add(""); + } + continue; + } + switch (cell.getCellType()) { + case STRING: + // System.out.println(i + "琛" + j + " 鍒 is String + // type"); + value = cell.getStringCellValue(); + break; + case NUMERIC: + if ("@".equals(cell.getCellStyle().getDataFormatString())) { + value = df.format(cell.getNumericCellValue()); + } else if ("General".equals(cell.getCellStyle().getDataFormatString())) { + value = nf.format(cell.getNumericCellValue()); + } else { + value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())); + } + // System.out.println(i + "琛" + j + // + " 鍒 is Number type ; DateFormt:" + // + value.toString()); + break; + case BOOLEAN: + // System.out.println(i + "琛" + j + " 鍒 is Boolean + // type"); + value = Boolean.valueOf(cell.getBooleanCellValue()); + break; + case BLANK: + // System.out.println(i + "琛" + j + " 鍒 is Blank type"); + value = ""; + break; + default: + // System.out.println(i + "琛" + j + " 鍒 is default + // type"); + value = cell.toString(); + }// end switch + colList.add(value); + } // end for j + rowList.add(colList); + } // end for i + + return rowList; + } catch (Exception e) { + System.out.println("exception"); + return null; + } + } + + public static DecimalFormat getDf() { + return df; + } + + public static void setDf(DecimalFormat df) { + ExcelUtils.df = df; + } + + public static SimpleDateFormat getSdf() { + return sdf; + } + + public static void setSdf(SimpleDateFormat sdf) { + ExcelUtils.sdf = sdf; + } + + public static DecimalFormat getNf() { + return nf; + } + + public static void setNf(DecimalFormat nf) { + ExcelUtils.nf = nf; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/reflect/ReflectUtils.java b/evo-admin/src/main/java/com/evo/common/utils/reflect/ReflectUtils.java new file mode 100644 index 0000000..2a6ca0c --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/reflect/ReflectUtils.java @@ -0,0 +1,410 @@ +package com.evo.common.utils.reflect; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.Date; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.Validate; +import org.apache.poi.ss.usermodel.DateUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.evo.common.core.text.Convert; +import com.evo.common.utils.DateUtils; + +/** + * 鍙嶅皠宸ュ叿绫. 鎻愪緵璋冪敤getter/setter鏂规硶, 璁块棶绉佹湁鍙橀噺, 璋冪敤绉佹湁鏂规硶, 鑾峰彇娉涘瀷绫诲瀷Class, 琚獳OP杩囩殑鐪熷疄绫荤瓑宸ュ叿鍑芥暟. + * + * @author evo + */ +@SuppressWarnings("rawtypes") +public class ReflectUtils +{ + private static final String SETTER_PREFIX = "set"; + + private static final String GETTER_PREFIX = "get"; + + private static final String CGLIB_CLASS_SEPARATOR = "$$"; + + private static Logger logger = LoggerFactory.getLogger(ReflectUtils.class); + + /** + * 璋冪敤Getter鏂规硶. + * 鏀寔澶氱骇锛屽锛氬璞″悕.瀵硅薄鍚.鏂规硶 + */ + @SuppressWarnings("unchecked") + public static E invokeGetter(Object obj, String propertyName) + { + Object object = obj; + for (String name : StringUtils.split(propertyName, ".")) + { + String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(name); + object = invokeMethod(object, getterMethodName, new Class[] {}, new Object[] {}); + } + return (E) object; + } + + /** + * 璋冪敤Setter鏂规硶, 浠呭尮閰嶆柟娉曞悕銆 + * 鏀寔澶氱骇锛屽锛氬璞″悕.瀵硅薄鍚.鏂规硶 + */ + public static void invokeSetter(Object obj, String propertyName, E value) + { + Object object = obj; + String[] names = StringUtils.split(propertyName, "."); + for (int i = 0; i < names.length; i++) + { + if (i < names.length - 1) + { + String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(names[i]); + object = invokeMethod(object, getterMethodName, new Class[] {}, new Object[] {}); + } + else + { + String setterMethodName = SETTER_PREFIX + StringUtils.capitalize(names[i]); + invokeMethodByName(object, setterMethodName, new Object[] { value }); + } + } + } + + /** + * 鐩存帴璇诲彇瀵硅薄灞炴у, 鏃犺private/protected淇グ绗, 涓嶇粡杩噂etter鍑芥暟. + */ + @SuppressWarnings("unchecked") + public static E getFieldValue(final Object obj, final String fieldName) + { + Field field = getAccessibleField(obj, fieldName); + if (field == null) + { + logger.debug("鍦 [" + obj.getClass() + "] 涓紝娌℃湁鎵惧埌 [" + fieldName + "] 瀛楁 "); + return null; + } + E result = null; + try + { + result = (E) field.get(obj); + } + catch (IllegalAccessException e) + { + logger.error("涓嶅彲鑳芥姏鍑虹殑寮傚父{}", e.getMessage()); + } + return result; + } + + /** + * 鐩存帴璁剧疆瀵硅薄灞炴у, 鏃犺private/protected淇グ绗, 涓嶇粡杩噑etter鍑芥暟. + */ + public static void setFieldValue(final Object obj, final String fieldName, final E value) + { + Field field = getAccessibleField(obj, fieldName); + if (field == null) + { + // throw new IllegalArgumentException("鍦 [" + obj.getClass() + "] 涓紝娌℃湁鎵惧埌 [" + fieldName + "] 瀛楁 "); + logger.debug("鍦 [" + obj.getClass() + "] 涓紝娌℃湁鎵惧埌 [" + fieldName + "] 瀛楁 "); + return; + } + try + { + field.set(obj, value); + } + catch (IllegalAccessException e) + { + logger.error("涓嶅彲鑳芥姏鍑虹殑寮傚父: {}", e.getMessage()); + } + } + + /** + * 鐩存帴璋冪敤瀵硅薄鏂规硶, 鏃犺private/protected淇グ绗. + * 鐢ㄤ簬涓娆℃ц皟鐢ㄧ殑鎯呭喌锛屽惁鍒欏簲浣跨敤getAccessibleMethod()鍑芥暟鑾峰緱Method鍚庡弽澶嶈皟鐢. + * 鍚屾椂鍖归厤鏂规硶鍚+鍙傛暟绫诲瀷锛 + */ + @SuppressWarnings("unchecked") + public static E invokeMethod(final Object obj, final String methodName, final Class[] parameterTypes, + final Object[] args) + { + if (obj == null || methodName == null) + { + return null; + } + Method method = getAccessibleMethod(obj, methodName, parameterTypes); + if (method == null) + { + logger.debug("鍦 [" + obj.getClass() + "] 涓紝娌℃湁鎵惧埌 [" + methodName + "] 鏂规硶 "); + return null; + } + try + { + return (E) method.invoke(obj, args); + } + catch (Exception e) + { + String msg = "method: " + method + ", obj: " + obj + ", args: " + args + ""; + throw convertReflectionExceptionToUnchecked(msg, e); + } + } + + /** + * 鐩存帴璋冪敤瀵硅薄鏂规硶, 鏃犺private/protected淇グ绗︼紝 + * 鐢ㄤ簬涓娆℃ц皟鐢ㄧ殑鎯呭喌锛屽惁鍒欏簲浣跨敤getAccessibleMethodByName()鍑芥暟鑾峰緱Method鍚庡弽澶嶈皟鐢. + * 鍙尮閰嶅嚱鏁板悕锛屽鏋滄湁澶氫釜鍚屽悕鍑芥暟璋冪敤绗竴涓 + */ + @SuppressWarnings("unchecked") + public static E invokeMethodByName(final Object obj, final String methodName, final Object[] args) + { + Method method = getAccessibleMethodByName(obj, methodName, args.length); + if (method == null) + { + // 濡傛灉涓虹┖涓嶆姤閿欙紝鐩存帴杩斿洖绌恒 + logger.debug("鍦 [" + obj.getClass() + "] 涓紝娌℃湁鎵惧埌 [" + methodName + "] 鏂规硶 "); + return null; + } + try + { + // 绫诲瀷杞崲锛堝皢鍙傛暟鏁版嵁绫诲瀷杞崲涓虹洰鏍囨柟娉曞弬鏁扮被鍨嬶級 + Class[] cs = method.getParameterTypes(); + for (int i = 0; i < cs.length; i++) + { + if (args[i] != null && !args[i].getClass().equals(cs[i])) + { + if (cs[i] == String.class) + { + args[i] = Convert.toStr(args[i]); + if (StringUtils.endsWith((String) args[i], ".0")) + { + args[i] = StringUtils.substringBefore((String) args[i], ".0"); + } + } + else if (cs[i] == Integer.class) + { + args[i] = Convert.toInt(args[i]); + } + else if (cs[i] == Long.class) + { + args[i] = Convert.toLong(args[i]); + } + else if (cs[i] == Double.class) + { + args[i] = Convert.toDouble(args[i]); + } + else if (cs[i] == Float.class) + { + args[i] = Convert.toFloat(args[i]); + } + else if (cs[i] == Date.class) + { + if (args[i] instanceof String) + { + args[i] = DateUtils.parseDate(args[i]); + } + else + { + args[i] = DateUtil.getJavaDate((Double) args[i]); + } + } + else if (cs[i] == boolean.class || cs[i] == Boolean.class) + { + args[i] = Convert.toBool(args[i]); + } + } + } + return (E) method.invoke(obj, args); + } + catch (Exception e) + { + String msg = "method: " + method + ", obj: " + obj + ", args: " + args + ""; + throw convertReflectionExceptionToUnchecked(msg, e); + } + } + + /** + * 寰幆鍚戜笂杞瀷, 鑾峰彇瀵硅薄鐨凞eclaredField, 骞跺己鍒惰缃负鍙闂. + * 濡傚悜涓婅浆鍨嬪埌Object浠嶆棤娉曟壘鍒, 杩斿洖null. + */ + public static Field getAccessibleField(final Object obj, final String fieldName) + { + // 涓虹┖涓嶆姤閿欍傜洿鎺ヨ繑鍥 null + if (obj == null) + { + return null; + } + Validate.notBlank(fieldName, "fieldName can't be blank"); + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) + { + try + { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } + catch (NoSuchFieldException e) + { + continue; + } + } + return null; + } + + /** + * 寰幆鍚戜笂杞瀷, 鑾峰彇瀵硅薄鐨凞eclaredMethod,骞跺己鍒惰缃负鍙闂. + * 濡傚悜涓婅浆鍨嬪埌Object浠嶆棤娉曟壘鍒, 杩斿洖null. + * 鍖归厤鍑芥暟鍚+鍙傛暟绫诲瀷銆 + * 鐢ㄤ簬鏂规硶闇瑕佽澶氭璋冪敤鐨勬儏鍐. 鍏堜娇鐢ㄦ湰鍑芥暟鍏堝彇寰桵ethod,鐒跺悗璋冪敤Method.invoke(Object obj, Object... args) + */ + public static Method getAccessibleMethod(final Object obj, final String methodName, + final Class... parameterTypes) + { + // 涓虹┖涓嶆姤閿欍傜洿鎺ヨ繑鍥 null + if (obj == null) + { + return null; + } + Validate.notBlank(methodName, "methodName can't be blank"); + for (Class searchType = obj.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) + { + try + { + Method method = searchType.getDeclaredMethod(methodName, parameterTypes); + makeAccessible(method); + return method; + } + catch (NoSuchMethodException e) + { + continue; + } + } + return null; + } + + /** + * 寰幆鍚戜笂杞瀷, 鑾峰彇瀵硅薄鐨凞eclaredMethod,骞跺己鍒惰缃负鍙闂. + * 濡傚悜涓婅浆鍨嬪埌Object浠嶆棤娉曟壘鍒, 杩斿洖null. + * 鍙尮閰嶅嚱鏁板悕銆 + * 鐢ㄤ簬鏂规硶闇瑕佽澶氭璋冪敤鐨勬儏鍐. 鍏堜娇鐢ㄦ湰鍑芥暟鍏堝彇寰桵ethod,鐒跺悗璋冪敤Method.invoke(Object obj, Object... args) + */ + public static Method getAccessibleMethodByName(final Object obj, final String methodName, int argsNum) + { + // 涓虹┖涓嶆姤閿欍傜洿鎺ヨ繑鍥 null + if (obj == null) + { + return null; + } + Validate.notBlank(methodName, "methodName can't be blank"); + for (Class searchType = obj.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) + { + Method[] methods = searchType.getDeclaredMethods(); + for (Method method : methods) + { + if (method.getName().equals(methodName) && method.getParameterTypes().length == argsNum) + { + makeAccessible(method); + return method; + } + } + } + return null; + } + + /** + * 鏀瑰彉private/protected鐨勬柟娉曚负public锛屽敖閲忎笉璋冪敤瀹為檯鏀瑰姩鐨勮鍙ワ紝閬垮厤JDK鐨凷ecurityManager鎶辨ㄣ + */ + public static void makeAccessible(Method method) + { + if ((!Modifier.isPublic(method.getModifiers()) || !Modifier.isPublic(method.getDeclaringClass().getModifiers())) + && !method.isAccessible()) + { + method.setAccessible(true); + } + } + + /** + * 鏀瑰彉private/protected鐨勬垚鍛樺彉閲忎负public锛屽敖閲忎笉璋冪敤瀹為檯鏀瑰姩鐨勮鍙ワ紝閬垮厤JDK鐨凷ecurityManager鎶辨ㄣ + */ + public static void makeAccessible(Field field) + { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) + || Modifier.isFinal(field.getModifiers())) && !field.isAccessible()) + { + field.setAccessible(true); + } + } + + /** + * 閫氳繃鍙嶅皠, 鑾峰緱Class瀹氫箟涓0鏄庣殑娉涘瀷鍙傛暟鐨勭被鍨, 娉ㄦ剰娉涘瀷蹇呴』瀹氫箟鍦ㄧ埗绫诲 + * 濡傛棤娉曟壘鍒, 杩斿洖Object.class. + */ + @SuppressWarnings("unchecked") + public static Class getClassGenricType(final Class clazz) + { + return getClassGenricType(clazz, 0); + } + + /** + * 閫氳繃鍙嶅皠, 鑾峰緱Class瀹氫箟涓0鏄庣殑鐖剁被鐨勬硾鍨嬪弬鏁扮殑绫诲瀷. + * 濡傛棤娉曟壘鍒, 杩斿洖Object.class. + */ + public static Class getClassGenricType(final Class clazz, final int index) + { + Type genType = clazz.getGenericSuperclass(); + + if (!(genType instanceof ParameterizedType)) + { + logger.debug(clazz.getSimpleName() + "'s superclass not ParameterizedType"); + return Object.class; + } + + Type[] params = ((ParameterizedType) genType).getActualTypeArguments(); + + if (index >= params.length || index < 0) + { + logger.debug("Index: " + index + ", Size of " + clazz.getSimpleName() + "'s Parameterized Type: " + + params.length); + return Object.class; + } + if (!(params[index] instanceof Class)) + { + logger.debug(clazz.getSimpleName() + " not set the actual class on superclass generic parameter"); + return Object.class; + } + + return (Class) params[index]; + } + + public static Class getUserClass(Object instance) + { + if (instance == null) + { + throw new RuntimeException("Instance must not be null"); + } + Class clazz = instance.getClass(); + if (clazz != null && clazz.getName().contains(CGLIB_CLASS_SEPARATOR)) + { + Class superClass = clazz.getSuperclass(); + if (superClass != null && !Object.class.equals(superClass)) + { + return superClass; + } + } + return clazz; + + } + + /** + * 灏嗗弽灏勬椂鐨刢hecked exception杞崲涓簎nchecked exception. + */ + public static RuntimeException convertReflectionExceptionToUnchecked(String msg, Exception e) + { + if (e instanceof IllegalAccessException || e instanceof IllegalArgumentException + || e instanceof NoSuchMethodException) + { + return new IllegalArgumentException(msg, e); + } + else if (e instanceof InvocationTargetException) + { + return new RuntimeException(msg, ((InvocationTargetException) e).getTargetException()); + } + return new RuntimeException(msg, e); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/sign/Base64.java b/evo-admin/src/main/java/com/evo/common/utils/sign/Base64.java new file mode 100644 index 0000000..d26e6a4 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/sign/Base64.java @@ -0,0 +1,291 @@ +package com.evo.common.utils.sign; + +/** + * Base64宸ュ叿绫 + * + * @author evo + */ +public final class Base64 +{ + static private final int BASELENGTH = 128; + static private final int LOOKUPLENGTH = 64; + static private final int TWENTYFOURBITGROUP = 24; + static private final int EIGHTBIT = 8; + static private final int SIXTEENBIT = 16; + static private final int FOURBYTE = 4; + static private final int SIGN = -128; + static private final char PAD = '='; + static final private byte[] base64Alphabet = new byte[BASELENGTH]; + static final private char[] lookUpBase64Alphabet = new char[LOOKUPLENGTH]; + + static + { + for (int i = 0; i < BASELENGTH; ++i) + { + base64Alphabet[i] = -1; + } + for (int i = 'Z'; i >= 'A'; i--) + { + base64Alphabet[i] = (byte) (i - 'A'); + } + for (int i = 'z'; i >= 'a'; i--) + { + base64Alphabet[i] = (byte) (i - 'a' + 26); + } + + for (int i = '9'; i >= '0'; i--) + { + base64Alphabet[i] = (byte) (i - '0' + 52); + } + + base64Alphabet['+'] = 62; + base64Alphabet['/'] = 63; + + for (int i = 0; i <= 25; i++) + { + lookUpBase64Alphabet[i] = (char) ('A' + i); + } + + for (int i = 26, j = 0; i <= 51; i++, j++) + { + lookUpBase64Alphabet[i] = (char) ('a' + j); + } + + for (int i = 52, j = 0; i <= 61; i++, j++) + { + lookUpBase64Alphabet[i] = (char) ('0' + j); + } + lookUpBase64Alphabet[62] = (char) '+'; + lookUpBase64Alphabet[63] = (char) '/'; + } + + private static boolean isWhiteSpace(char octect) + { + return (octect == 0x20 || octect == 0xd || octect == 0xa || octect == 0x9); + } + + private static boolean isPad(char octect) + { + return (octect == PAD); + } + + private static boolean isData(char octect) + { + return (octect < BASELENGTH && base64Alphabet[octect] != -1); + } + + /** + * Encodes hex octects into Base64 + * + * @param binaryData Array containing binaryData + * @return Encoded Base64 array + */ + public static String encode(byte[] binaryData) + { + if (binaryData == null) + { + return null; + } + + int lengthDataBits = binaryData.length * EIGHTBIT; + if (lengthDataBits == 0) + { + return ""; + } + + int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP; + int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP; + int numberQuartet = fewerThan24bits != 0 ? numberTriplets + 1 : numberTriplets; + char encodedData[] = null; + + encodedData = new char[numberQuartet * 4]; + + byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0; + + int encodedIndex = 0; + int dataIndex = 0; + + for (int i = 0; i < numberTriplets; i++) + { + b1 = binaryData[dataIndex++]; + b2 = binaryData[dataIndex++]; + b3 = binaryData[dataIndex++]; + + l = (byte) (b2 & 0x0f); + k = (byte) (b1 & 0x03); + + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); + byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); + byte val3 = ((b3 & SIGN) == 0) ? (byte) (b3 >> 6) : (byte) ((b3) >> 6 ^ 0xfc); + + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[(l << 2) | val3]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[b3 & 0x3f]; + } + + // form integral number of 6-bit groups + if (fewerThan24bits == EIGHTBIT) + { + b1 = binaryData[dataIndex]; + k = (byte) (b1 & 0x03); + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[k << 4]; + encodedData[encodedIndex++] = PAD; + encodedData[encodedIndex++] = PAD; + } + else if (fewerThan24bits == SIXTEENBIT) + { + b1 = binaryData[dataIndex]; + b2 = binaryData[dataIndex + 1]; + l = (byte) (b2 & 0x0f); + k = (byte) (b1 & 0x03); + + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); + byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); + + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[l << 2]; + encodedData[encodedIndex++] = PAD; + } + return new String(encodedData); + } + + /** + * Decodes Base64 data into octects + * + * @param encoded string containing Base64 data + * @return Array containind decoded data. + */ + public static byte[] decode(String encoded) + { + if (encoded == null) + { + return null; + } + + char[] base64Data = encoded.toCharArray(); + // remove white spaces + int len = removeWhiteSpace(base64Data); + + if (len % FOURBYTE != 0) + { + return null;// should be divisible by four + } + + int numberQuadruple = (len / FOURBYTE); + + if (numberQuadruple == 0) + { + return new byte[0]; + } + + byte decodedData[] = null; + byte b1 = 0, b2 = 0, b3 = 0, b4 = 0; + char d1 = 0, d2 = 0, d3 = 0, d4 = 0; + + int i = 0; + int encodedIndex = 0; + int dataIndex = 0; + decodedData = new byte[(numberQuadruple) * 3]; + + for (; i < numberQuadruple - 1; i++) + { + + if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++])) + || !isData((d3 = base64Data[dataIndex++])) || !isData((d4 = base64Data[dataIndex++]))) + { + return null; + } // if found "no data" just return null + + b1 = base64Alphabet[d1]; + b2 = base64Alphabet[d2]; + b3 = base64Alphabet[d3]; + b4 = base64Alphabet[d4]; + + decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); + decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); + decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); + } + + if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++]))) + { + return null;// if found "no data" just return null + } + + b1 = base64Alphabet[d1]; + b2 = base64Alphabet[d2]; + + d3 = base64Data[dataIndex++]; + d4 = base64Data[dataIndex++]; + if (!isData((d3)) || !isData((d4))) + {// Check if they are PAD characters + if (isPad(d3) && isPad(d4)) + { + if ((b2 & 0xf) != 0)// last 4 bits should be zero + { + return null; + } + byte[] tmp = new byte[i * 3 + 1]; + System.arraycopy(decodedData, 0, tmp, 0, i * 3); + tmp[encodedIndex] = (byte) (b1 << 2 | b2 >> 4); + return tmp; + } + else if (!isPad(d3) && isPad(d4)) + { + b3 = base64Alphabet[d3]; + if ((b3 & 0x3) != 0)// last 2 bits should be zero + { + return null; + } + byte[] tmp = new byte[i * 3 + 2]; + System.arraycopy(decodedData, 0, tmp, 0, i * 3); + tmp[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); + tmp[encodedIndex] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); + return tmp; + } + else + { + return null; + } + } + else + { // No PAD e.g 3cQl + b3 = base64Alphabet[d3]; + b4 = base64Alphabet[d4]; + decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); + decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); + decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); + + } + return decodedData; + } + + /** + * remove WhiteSpace from MIME containing encoded Base64 data. + * + * @param data the byte array of base64 data (with WS) + * @return the new length + */ + private static int removeWhiteSpace(char[] data) + { + if (data == null) + { + return 0; + } + + // count characters that's not whitespace + int newSize = 0; + int len = data.length; + for (int i = 0; i < len; i++) + { + if (!isWhiteSpace(data[i])) + { + data[newSize++] = data[i]; + } + } + return newSize; + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/sign/Md5Utils.java b/evo-admin/src/main/java/com/evo/common/utils/sign/Md5Utils.java new file mode 100644 index 0000000..269681d --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/sign/Md5Utils.java @@ -0,0 +1,67 @@ +package com.evo.common.utils.sign; + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Md5鍔犲瘑鏂规硶 + * + * @author evo + */ +public class Md5Utils +{ + private static final Logger log = LoggerFactory.getLogger(Md5Utils.class); + + private static byte[] md5(String s) + { + MessageDigest algorithm; + try + { + algorithm = MessageDigest.getInstance("MD5"); + algorithm.reset(); + algorithm.update(s.getBytes("UTF-8")); + byte[] messageDigest = algorithm.digest(); + return messageDigest; + } + catch (Exception e) + { + log.error("MD5 Error...", e); + } + return null; + } + + private static final String toHex(byte hash[]) + { + if (hash == null) + { + return null; + } + StringBuffer buf = new StringBuffer(hash.length * 2); + int i; + + for (i = 0; i < hash.length; i++) + { + if ((hash[i] & 0xff) < 0x10) + { + buf.append("0"); + } + buf.append(Long.toString(hash[i] & 0xff, 16)); + } + return buf.toString(); + } + + public static String hash(String s) + { + try + { + return new String(toHex(md5(s)).getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8); + } + catch (Exception e) + { + log.error("not supported charset...{}", e); + return s; + } + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/spring/SpringUtils.java b/evo-admin/src/main/java/com/evo/common/utils/spring/SpringUtils.java new file mode 100644 index 0000000..f8ac726 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/spring/SpringUtils.java @@ -0,0 +1,158 @@ +package com.evo.common.utils.spring; + +import org.springframework.aop.framework.AopContext; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; +import com.evo.common.utils.StringUtils; + +/** + * spring宸ュ叿绫 鏂逛究鍦ㄩ潪spring绠$悊鐜涓幏鍙朾ean + * + * @author evo + */ +@Component +public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware +{ + /** Spring搴旂敤涓婁笅鏂囩幆澧 */ + private static ConfigurableListableBeanFactory beanFactory; + + private static ApplicationContext applicationContext; + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException + { + SpringUtils.beanFactory = beanFactory; + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException + { + SpringUtils.applicationContext = applicationContext; + } + + /** + * 鑾峰彇瀵硅薄 + * + * @param name + * @return Object 涓涓互鎵缁欏悕瀛楁敞鍐岀殑bean鐨勫疄渚 + * @throws org.springframework.beans.BeansException + * + */ + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException + { + return (T) beanFactory.getBean(name); + } + + /** + * 鑾峰彇绫诲瀷涓簉equiredType鐨勫璞 + * + * @param clz + * @return + * @throws org.springframework.beans.BeansException + * + */ + public static T getBean(Class clz) throws BeansException + { + T result = (T) beanFactory.getBean(clz); + return result; + } + + /** + * 濡傛灉BeanFactory鍖呭惈涓涓笌鎵缁欏悕绉板尮閰嶇殑bean瀹氫箟锛屽垯杩斿洖true + * + * @param name + * @return boolean + */ + public static boolean containsBean(String name) + { + return beanFactory.containsBean(name); + } + + /** + * 鍒ゆ柇浠ョ粰瀹氬悕瀛楁敞鍐岀殑bean瀹氫箟鏄竴涓猻ingleton杩樻槸涓涓猵rototype銆 濡傛灉涓庣粰瀹氬悕瀛楃浉搴旂殑bean瀹氫箟娌℃湁琚壘鍒帮紝灏嗕細鎶涘嚭涓涓紓甯革紙NoSuchBeanDefinitionException锛 + * + * @param name + * @return boolean + * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException + * + */ + public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException + { + return beanFactory.isSingleton(name); + } + + /** + * @param name + * @return Class 娉ㄥ唽瀵硅薄鐨勭被鍨 + * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException + * + */ + public static Class getType(String name) throws NoSuchBeanDefinitionException + { + return beanFactory.getType(name); + } + + /** + * 濡傛灉缁欏畾鐨刡ean鍚嶅瓧鍦╞ean瀹氫箟涓湁鍒悕锛屽垯杩斿洖杩欎簺鍒悕 + * + * @param name + * @return + * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException + * + */ + public static String[] getAliases(String name) throws NoSuchBeanDefinitionException + { + return beanFactory.getAliases(name); + } + + /** + * 鑾峰彇aop浠g悊瀵硅薄 + * + * @param invoker + * @return + */ + @SuppressWarnings("unchecked") + public static T getAopProxy(T invoker) + { + return (T) AopContext.currentProxy(); + } + + /** + * 鑾峰彇褰撳墠鐨勭幆澧冮厤缃紝鏃犻厤缃繑鍥瀗ull + * + * @return 褰撳墠鐨勭幆澧冮厤缃 + */ + public static String[] getActiveProfiles() + { + return applicationContext.getEnvironment().getActiveProfiles(); + } + + /** + * 鑾峰彇褰撳墠鐨勭幆澧冮厤缃紝褰撴湁澶氫釜鐜閰嶇疆鏃讹紝鍙幏鍙栫涓涓 + * + * @return 褰撳墠鐨勭幆澧冮厤缃 + */ + public static String getActiveProfile() + { + final String[] activeProfiles = getActiveProfiles(); + return StringUtils.isNotEmpty(activeProfiles) ? activeProfiles[0] : null; + } + + /** + * 鑾峰彇閰嶇疆鏂囦欢涓殑鍊 + * + * @param key 閰嶇疆鏂囦欢鐨刱ey + * @return 褰撳墠鐨勯厤缃枃浠剁殑鍊 + * + */ + public static String getRequiredProperty(String key) + { + return applicationContext.getEnvironment().getRequiredProperty(key); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/sql/SqlUtil.java b/evo-admin/src/main/java/com/evo/common/utils/sql/SqlUtil.java new file mode 100644 index 0000000..b8a9fe4 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/sql/SqlUtil.java @@ -0,0 +1,70 @@ +package com.evo.common.utils.sql; + +import com.evo.common.exception.UtilException; +import com.evo.common.utils.StringUtils; + +/** + * sql鎿嶄綔宸ュ叿绫 + * + * @author evo + */ +public class SqlUtil +{ + /** + * 瀹氫箟甯哥敤鐨 sql鍏抽敭瀛 + */ + public static String SQL_REGEX = "and |extractvalue|updatexml|sleep|exec |insert |select |delete |update |drop |count |chr |mid |master |truncate |char |declare |or |union |like |+|/*|user()"; + + /** + * 浠呮敮鎸佸瓧姣嶃佹暟瀛椼佷笅鍒掔嚎銆佺┖鏍笺侀楀彿銆佸皬鏁扮偣锛堟敮鎸佸涓瓧娈垫帓搴忥級 + */ + public static String SQL_PATTERN = "[a-zA-Z0-9_\\ \\,\\.]+"; + + /** + * 闄愬埗orderBy鏈澶ч暱搴 + */ + private static final int ORDER_BY_MAX_LENGTH = 500; + + /** + * 妫鏌ュ瓧绗︼紝闃叉娉ㄥ叆缁曡繃 + */ + public static String escapeOrderBySql(String value) + { + if (StringUtils.isNotEmpty(value) && !isValidOrderBySql(value)) + { + throw new UtilException("鍙傛暟涓嶇鍚堣鑼冿紝涓嶈兘杩涜鏌ヨ"); + } + if (StringUtils.length(value) > ORDER_BY_MAX_LENGTH) + { + throw new UtilException("鍙傛暟宸茶秴杩囨渶澶ч檺鍒讹紝涓嶈兘杩涜鏌ヨ"); + } + return value; + } + + /** + * 楠岃瘉 order by 璇硶鏄惁绗﹀悎瑙勮寖 + */ + public static boolean isValidOrderBySql(String value) + { + return value.matches(SQL_PATTERN); + } + + /** + * SQL鍏抽敭瀛楁鏌 + */ + public static void filterKeyword(String value) + { + if (StringUtils.isEmpty(value)) + { + return; + } + String[] sqlKeywords = StringUtils.split(SQL_REGEX, "\\|"); + for (String sqlKeyword : sqlKeywords) + { + if (StringUtils.indexOfIgnoreCase(value, sqlKeyword) > -1) + { + throw new UtilException("鍙傛暟瀛樺湪SQL娉ㄥ叆椋庨櫓"); + } + } + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/uuid/IdUtils.java b/evo-admin/src/main/java/com/evo/common/utils/uuid/IdUtils.java new file mode 100644 index 0000000..9944b7e --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/uuid/IdUtils.java @@ -0,0 +1,49 @@ +package com.evo.common.utils.uuid; + +/** + * ID鐢熸垚鍣ㄥ伐鍏风被 + * + * @author evo + */ +public class IdUtils +{ + /** + * 鑾峰彇闅忔満UUID + * + * @return 闅忔満UUID + */ + public static String randomUUID() + { + return UUID.randomUUID().toString(); + } + + /** + * 绠鍖栫殑UUID锛屽幓鎺変簡妯嚎 + * + * @return 绠鍖栫殑UUID锛屽幓鎺変簡妯嚎 + */ + public static String simpleUUID() + { + return UUID.randomUUID().toString(true); + } + + /** + * 鑾峰彇闅忔満UUID锛屼娇鐢ㄦц兘鏇村ソ鐨凾hreadLocalRandom鐢熸垚UUID + * + * @return 闅忔満UUID + */ + public static String fastUUID() + { + return UUID.fastUUID().toString(); + } + + /** + * 绠鍖栫殑UUID锛屽幓鎺変簡妯嚎锛屼娇鐢ㄦц兘鏇村ソ鐨凾hreadLocalRandom鐢熸垚UUID + * + * @return 绠鍖栫殑UUID锛屽幓鎺変簡妯嚎 + */ + public static String fastSimpleUUID() + { + return UUID.fastUUID().toString(true); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/uuid/Seq.java b/evo-admin/src/main/java/com/evo/common/utils/uuid/Seq.java new file mode 100644 index 0000000..688c915 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/uuid/Seq.java @@ -0,0 +1,86 @@ +package com.evo.common.utils.uuid; + +import java.util.concurrent.atomic.AtomicInteger; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.StringUtils; + +/** + * @author evo 搴忓垪鐢熸垚绫 + */ +public class Seq +{ + // 閫氱敤搴忓垪绫诲瀷 + public static final String commSeqType = "COMMON"; + + // 涓婁紶搴忓垪绫诲瀷 + public static final String uploadSeqType = "UPLOAD"; + + // 閫氱敤鎺ュ彛搴忓垪鏁 + private static AtomicInteger commSeq = new AtomicInteger(1); + + // 涓婁紶鎺ュ彛搴忓垪鏁 + private static AtomicInteger uploadSeq = new AtomicInteger(1); + + // 鏈哄櫒鏍囪瘑 + private static final String machineCode = "A"; + + /** + * 鑾峰彇閫氱敤搴忓垪鍙 + * + * @return 搴忓垪鍊 + */ + public static String getId() + { + return getId(commSeqType); + } + + /** + * 榛樿16浣嶅簭鍒楀彿 yyMMddHHmmss + 涓浣嶆満鍣ㄦ爣璇 + 3闀垮害寰幆閫掑瀛楃涓 + * + * @return 搴忓垪鍊 + */ + public static String getId(String type) + { + AtomicInteger atomicInt = commSeq; + if (uploadSeqType.equals(type)) + { + atomicInt = uploadSeq; + } + return getId(atomicInt, 3); + } + + /** + * 閫氱敤鎺ュ彛搴忓垪鍙 yyMMddHHmmss + 涓浣嶆満鍣ㄦ爣璇 + length闀垮害寰幆閫掑瀛楃涓 + * + * @param atomicInt 搴忓垪鏁 + * @param length 鏁板奸暱搴 + * @return 搴忓垪鍊 + */ + public static String getId(AtomicInteger atomicInt, int length) + { + String result = DateUtils.dateTimeNow(); + result += machineCode; + result += getSeq(atomicInt, length); + return result; + } + + /** + * 搴忓垪寰幆閫掑瀛楃涓瞇1, 10 鐨 (length)骞傛鏂), 鐢0宸﹁ˉ榻恖ength浣嶆暟 + * + * @return 搴忓垪鍊 + */ + private synchronized static String getSeq(AtomicInteger atomicInt, int length) + { + // 鍏堝彇鍊煎啀+1 + int value = atomicInt.getAndIncrement(); + + // 濡傛灉鏇存柊鍚庡>=10 鐨 (length)骞傛鏂瑰垯閲嶇疆涓1 + int maxSeq = (int) Math.pow(10, length); + if (atomicInt.get() >= maxSeq) + { + atomicInt.set(1); + } + // 杞瓧绗︿覆锛岀敤0宸﹁ˉ榻 + return StringUtils.padl(value, length); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/utils/uuid/UUID.java b/evo-admin/src/main/java/com/evo/common/utils/uuid/UUID.java new file mode 100644 index 0000000..42bbcbb --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/utils/uuid/UUID.java @@ -0,0 +1,484 @@ +package com.evo.common.utils.uuid; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; +import com.evo.common.exception.UtilException; + +/** + * 鎻愪緵閫氱敤鍞竴璇嗗埆鐮侊紙universally unique identifier锛夛紙UUID锛夊疄鐜 + * + * @author evo + */ +public final class UUID implements java.io.Serializable, Comparable +{ + private static final long serialVersionUID = -1185015143654744140L; + + /** + * SecureRandom 鐨勫崟渚 + * + */ + private static class Holder + { + static final SecureRandom numberGenerator = getSecureRandom(); + } + + /** 姝UID鐨勬渶楂64鏈夋晥浣 */ + private final long mostSigBits; + + /** 姝UID鐨勬渶浣64鏈夋晥浣 */ + private final long leastSigBits; + + /** + * 绉佹湁鏋勯 + * + * @param data 鏁版嵁 + */ + private UUID(byte[] data) + { + long msb = 0; + long lsb = 0; + assert data.length == 16 : "data must be 16 bytes in length"; + for (int i = 0; i < 8; i++) + { + msb = (msb << 8) | (data[i] & 0xff); + } + for (int i = 8; i < 16; i++) + { + lsb = (lsb << 8) | (data[i] & 0xff); + } + this.mostSigBits = msb; + this.leastSigBits = lsb; + } + + /** + * 浣跨敤鎸囧畾鐨勬暟鎹瀯閫犳柊鐨 UUID銆 + * + * @param mostSigBits 鐢ㄤ簬 {@code UUID} 鐨勬渶楂樻湁鏁 64 浣 + * @param leastSigBits 鐢ㄤ簬 {@code UUID} 鐨勬渶浣庢湁鏁 64 浣 + */ + public UUID(long mostSigBits, long leastSigBits) + { + this.mostSigBits = mostSigBits; + this.leastSigBits = leastSigBits; + } + + /** + * 鑾峰彇绫诲瀷 4锛堜吉闅忔満鐢熸垚鐨勶級UUID 鐨勯潤鎬佸伐鍘傘 + * + * @return 闅忔満鐢熸垚鐨 {@code UUID} + */ + public static UUID fastUUID() + { + return randomUUID(false); + } + + /** + * 鑾峰彇绫诲瀷 4锛堜吉闅忔満鐢熸垚鐨勶級UUID 鐨勯潤鎬佸伐鍘傘 浣跨敤鍔犲瘑鐨勫己浼殢鏈烘暟鐢熸垚鍣ㄧ敓鎴愯 UUID銆 + * + * @return 闅忔満鐢熸垚鐨 {@code UUID} + */ + public static UUID randomUUID() + { + return randomUUID(true); + } + + /** + * 鑾峰彇绫诲瀷 4锛堜吉闅忔満鐢熸垚鐨勶級UUID 鐨勯潤鎬佸伐鍘傘 浣跨敤鍔犲瘑鐨勫己浼殢鏈烘暟鐢熸垚鍣ㄧ敓鎴愯 UUID銆 + * + * @param isSecure 鏄惁浣跨敤{@link SecureRandom}濡傛灉鏄彲浠ヨ幏寰楁洿瀹夊叏鐨勯殢鏈虹爜锛屽惁鍒欏彲浠ュ緱鍒版洿濂界殑鎬ц兘 + * @return 闅忔満鐢熸垚鐨 {@code UUID} + */ + public static UUID randomUUID(boolean isSecure) + { + final Random ng = isSecure ? Holder.numberGenerator : getRandom(); + + byte[] randomBytes = new byte[16]; + ng.nextBytes(randomBytes); + randomBytes[6] &= 0x0f; /* clear version */ + randomBytes[6] |= 0x40; /* set to version 4 */ + randomBytes[8] &= 0x3f; /* clear variant */ + randomBytes[8] |= 0x80; /* set to IETF variant */ + return new UUID(randomBytes); + } + + /** + * 鏍规嵁鎸囧畾鐨勫瓧鑺傛暟缁勮幏鍙栫被鍨 3锛堝熀浜庡悕绉扮殑锛塙UID 鐨勯潤鎬佸伐鍘傘 + * + * @param name 鐢ㄤ簬鏋勯 UUID 鐨勫瓧鑺傛暟缁勩 + * + * @return 鏍规嵁鎸囧畾鏁扮粍鐢熸垚鐨 {@code UUID} + */ + public static UUID nameUUIDFromBytes(byte[] name) + { + MessageDigest md; + try + { + md = MessageDigest.getInstance("MD5"); + } + catch (NoSuchAlgorithmException nsae) + { + throw new InternalError("MD5 not supported"); + } + byte[] md5Bytes = md.digest(name); + md5Bytes[6] &= 0x0f; /* clear version */ + md5Bytes[6] |= 0x30; /* set to version 3 */ + md5Bytes[8] &= 0x3f; /* clear variant */ + md5Bytes[8] |= 0x80; /* set to IETF variant */ + return new UUID(md5Bytes); + } + + /** + * 鏍规嵁 {@link #toString()} 鏂规硶涓弿杩扮殑瀛楃涓叉爣鍑嗚〃绀哄舰寮忓垱寤簕@code UUID}銆 + * + * @param name 鎸囧畾 {@code UUID} 瀛楃涓 + * @return 鍏锋湁鎸囧畾鍊肩殑 {@code UUID} + * @throws IllegalArgumentException 濡傛灉 name 涓 {@link #toString} 涓弿杩扮殑瀛楃涓茶〃绀哄舰寮忎笉绗︽姏鍑烘寮傚父 + * + */ + public static UUID fromString(String name) + { + String[] components = name.split("-"); + if (components.length != 5) + { + throw new IllegalArgumentException("Invalid UUID string: " + name); + } + for (int i = 0; i < 5; i++) + { + components[i] = "0x" + components[i]; + } + + long mostSigBits = Long.decode(components[0]).longValue(); + mostSigBits <<= 16; + mostSigBits |= Long.decode(components[1]).longValue(); + mostSigBits <<= 16; + mostSigBits |= Long.decode(components[2]).longValue(); + + long leastSigBits = Long.decode(components[3]).longValue(); + leastSigBits <<= 48; + leastSigBits |= Long.decode(components[4]).longValue(); + + return new UUID(mostSigBits, leastSigBits); + } + + /** + * 杩斿洖姝 UUID 鐨 128 浣嶅间腑鐨勬渶浣庢湁鏁 64 浣嶃 + * + * @return 姝 UUID 鐨 128 浣嶅间腑鐨勬渶浣庢湁鏁 64 浣嶃 + */ + public long getLeastSignificantBits() + { + return leastSigBits; + } + + /** + * 杩斿洖姝 UUID 鐨 128 浣嶅间腑鐨勬渶楂樻湁鏁 64 浣嶃 + * + * @return 姝 UUID 鐨 128 浣嶅间腑鏈楂樻湁鏁 64 浣嶃 + */ + public long getMostSignificantBits() + { + return mostSigBits; + } + + /** + * 涓庢 {@code UUID} 鐩稿叧鑱旂殑鐗堟湰鍙. 鐗堟湰鍙锋弿杩版 {@code UUID} 鏄浣曠敓鎴愮殑銆 + *

+ * 鐗堟湰鍙峰叿鏈変互涓嬪惈鎰: + *

    + *
  • 1 鍩轰簬鏃堕棿鐨 UUID + *
  • 2 DCE 瀹夊叏 UUID + *
  • 3 鍩轰簬鍚嶇О鐨 UUID + *
  • 4 闅忔満鐢熸垚鐨 UUID + *
+ * + * @return 姝 {@code UUID} 鐨勭増鏈彿 + */ + public int version() + { + // Version is bits masked by 0x000000000000F000 in MS long + return (int) ((mostSigBits >> 12) & 0x0f); + } + + /** + * 涓庢 {@code UUID} 鐩稿叧鑱旂殑鍙樹綋鍙枫傚彉浣撳彿鎻忚堪 {@code UUID} 鐨勫竷灞銆 + *

+ * 鍙樹綋鍙峰叿鏈変互涓嬪惈鎰忥細 + *

    + *
  • 0 涓 NCS 鍚戝悗鍏煎淇濈暀 + *
  • 2 IETF RFC 4122(Leach-Salz), 鐢ㄤ簬姝ょ被 + *
  • 6 淇濈暀锛屽井杞悜鍚庡吋瀹 + *
  • 7 淇濈暀渚涗互鍚庡畾涔変娇鐢 + *
+ * + * @return 姝 {@code UUID} 鐩稿叧鑱旂殑鍙樹綋鍙 + */ + public int variant() + { + // This field is composed of a varying number of bits. + // 0 - - Reserved for NCS backward compatibility + // 1 0 - The IETF aka Leach-Salz variant (used by this class) + // 1 1 0 Reserved, Microsoft backward compatibility + // 1 1 1 Reserved for future definition. + return (int) ((leastSigBits >>> (64 - (leastSigBits >>> 62))) & (leastSigBits >> 63)); + } + + /** + * 涓庢 UUID 鐩稿叧鑱旂殑鏃堕棿鎴冲笺 + * + *

+ * 60 浣嶇殑鏃堕棿鎴冲兼牴鎹 {@code UUID} 鐨 time_low銆乼ime_mid 鍜 time_hi 瀛楁鏋勯犮
+ * 鎵寰楀埌鐨勬椂闂存埑浠 100 姣井绉掍负鍗曚綅锛屼粠 UTC锛堥氱敤鍗忚皟鏃堕棿锛 1582 骞 10 鏈 15 鏃ラ浂鏃跺紑濮嬨 + * + *

+ * 鏃堕棿鎴冲间粎鍦ㄥ湪鍩轰簬鏃堕棿鐨 UUID锛堝叾 version 绫诲瀷涓 1锛変腑鎵嶆湁鎰忎箟銆
+ * 濡傛灉姝 {@code UUID} 涓嶆槸鍩轰簬鏃堕棿鐨 UUID锛屽垯姝ゆ柟娉曟姏鍑 UnsupportedOperationException銆 + * + * @throws UnsupportedOperationException 濡傛灉姝 {@code UUID} 涓嶆槸 version 涓 1 鐨 UUID銆 + */ + public long timestamp() throws UnsupportedOperationException + { + checkTimeBase(); + return (mostSigBits & 0x0FFFL) << 48// + | ((mostSigBits >> 16) & 0x0FFFFL) << 32// + | mostSigBits >>> 32; + } + + /** + * 涓庢 UUID 鐩稿叧鑱旂殑鏃堕挓搴忓垪鍊笺 + * + *

+ * 14 浣嶇殑鏃堕挓搴忓垪鍊兼牴鎹 UUID 鐨 clock_seq 瀛楁鏋勯犮俢lock_seq 瀛楁鐢ㄤ簬淇濊瘉鍦ㄥ熀浜庢椂闂寸殑 UUID 涓殑鏃堕棿鍞竴鎬с + *

+ * {@code clockSequence} 鍊间粎鍦ㄥ熀浜庢椂闂寸殑 UUID锛堝叾 version 绫诲瀷涓 1锛変腑鎵嶆湁鎰忎箟銆 濡傛灉姝 UUID 涓嶆槸鍩轰簬鏃堕棿鐨 UUID锛屽垯姝ゆ柟娉曟姏鍑 + * UnsupportedOperationException銆 + * + * @return 姝 {@code UUID} 鐨勬椂閽熷簭鍒 + * + * @throws UnsupportedOperationException 濡傛灉姝 UUID 鐨 version 涓嶄负 1 + */ + public int clockSequence() throws UnsupportedOperationException + { + checkTimeBase(); + return (int) ((leastSigBits & 0x3FFF000000000000L) >>> 48); + } + + /** + * 涓庢 UUID 鐩稿叧鐨勮妭鐐瑰笺 + * + *

+ * 48 浣嶇殑鑺傜偣鍊兼牴鎹 UUID 鐨 node 瀛楁鏋勯犮傛瀛楁鏃ㄥ湪鐢ㄤ簬淇濆瓨鏈哄櫒鐨 IEEE 802 鍦板潃锛岃鍦板潃鐢ㄤ簬鐢熸垚姝 UUID 浠ヤ繚璇佺┖闂村敮涓鎬с + *

+ * 鑺傜偣鍊间粎鍦ㄥ熀浜庢椂闂寸殑 UUID锛堝叾 version 绫诲瀷涓 1锛変腑鎵嶆湁鎰忎箟銆
+ * 濡傛灉姝 UUID 涓嶆槸鍩轰簬鏃堕棿鐨 UUID锛屽垯姝ゆ柟娉曟姏鍑 UnsupportedOperationException銆 + * + * @return 姝 {@code UUID} 鐨勮妭鐐瑰 + * + * @throws UnsupportedOperationException 濡傛灉姝 UUID 鐨 version 涓嶄负 1 + */ + public long node() throws UnsupportedOperationException + { + checkTimeBase(); + return leastSigBits & 0x0000FFFFFFFFFFFFL; + } + + /** + * 杩斿洖姝@code UUID} 鐨勫瓧绗︿覆琛ㄧ幇褰㈠紡銆 + * + *

+ * UUID 鐨勫瓧绗︿覆琛ㄧず褰㈠紡鐢辨 BNF 鎻忚堪锛 + * + *

+     * {@code
+     * UUID                   = ----
+     * time_low               = 4*
+     * time_mid               = 2*
+     * time_high_and_version  = 2*
+     * variant_and_sequence   = 2*
+     * node                   = 6*
+     * hexOctet               = 
+     * hexDigit               = [0-9a-fA-F]
+     * }
+     * 
+ * + * + * + * @return 姝@code UUID} 鐨勫瓧绗︿覆琛ㄧ幇褰㈠紡 + * @see #toString(boolean) + */ + @Override + public String toString() + { + return toString(false); + } + + /** + * 杩斿洖姝@code UUID} 鐨勫瓧绗︿覆琛ㄧ幇褰㈠紡銆 + * + *

+ * UUID 鐨勫瓧绗︿覆琛ㄧず褰㈠紡鐢辨 BNF 鎻忚堪锛 + * + *

+     * {@code
+     * UUID                   = ----
+     * time_low               = 4*
+     * time_mid               = 2*
+     * time_high_and_version  = 2*
+     * variant_and_sequence   = 2*
+     * node                   = 6*
+     * hexOctet               = 
+     * hexDigit               = [0-9a-fA-F]
+     * }
+     * 
+ * + * + * + * @param isSimple 鏄惁绠鍗曟ā寮忥紝绠鍗曟ā寮忎负涓嶅甫'-'鐨刄UID瀛楃涓 + * @return 姝@code UUID} 鐨勫瓧绗︿覆琛ㄧ幇褰㈠紡 + */ + public String toString(boolean isSimple) + { + final StringBuilder builder = new StringBuilder(isSimple ? 32 : 36); + // time_low + builder.append(digits(mostSigBits >> 32, 8)); + if (!isSimple) + { + builder.append('-'); + } + // time_mid + builder.append(digits(mostSigBits >> 16, 4)); + if (!isSimple) + { + builder.append('-'); + } + // time_high_and_version + builder.append(digits(mostSigBits, 4)); + if (!isSimple) + { + builder.append('-'); + } + // variant_and_sequence + builder.append(digits(leastSigBits >> 48, 4)); + if (!isSimple) + { + builder.append('-'); + } + // node + builder.append(digits(leastSigBits, 12)); + + return builder.toString(); + } + + /** + * 杩斿洖姝 UUID 鐨勫搱甯岀爜銆 + * + * @return UUID 鐨勫搱甯岀爜鍊笺 + */ + @Override + public int hashCode() + { + long hilo = mostSigBits ^ leastSigBits; + return ((int) (hilo >> 32)) ^ (int) hilo; + } + + /** + * 灏嗘瀵硅薄涓庢寚瀹氬璞℃瘮杈冦 + *

+ * 褰撲笖浠呭綋鍙傛暟涓嶄负 {@code null}銆佽屾槸涓涓 UUID 瀵硅薄銆佸叿鏈変笌姝 UUID 鐩稿悓鐨 varriant銆佸寘鍚浉鍚岀殑鍊硷紙姣忎竴浣嶅潎鐩稿悓锛夋椂锛岀粨鏋滄墠涓 {@code true}銆 + * + * @param obj 瑕佷笌涔嬫瘮杈冪殑瀵硅薄 + * + * @return 濡傛灉瀵硅薄鐩稿悓锛屽垯杩斿洖 {@code true}锛涘惁鍒欒繑鍥 {@code false} + */ + @Override + public boolean equals(Object obj) + { + if ((null == obj) || (obj.getClass() != UUID.class)) + { + return false; + } + UUID id = (UUID) obj; + return (mostSigBits == id.mostSigBits && leastSigBits == id.leastSigBits); + } + + // Comparison Operations + + /** + * 灏嗘 UUID 涓庢寚瀹氱殑 UUID 姣旇緝銆 + * + *

+ * 濡傛灉涓や釜 UUID 涓嶅悓锛屼笖绗竴涓 UUID 鐨勬渶楂樻湁鏁堝瓧娈靛ぇ浜庣浜屼釜 UUID 鐨勫搴斿瓧娈碉紝鍒欑涓涓 UUID 澶т簬绗簩涓 UUID銆 + * + * @param val 涓庢 UUID 姣旇緝鐨 UUID + * + * @return 鍦ㄦ UUID 灏忎簬銆佺瓑浜庢垨澶т簬 val 鏃讹紝鍒嗗埆杩斿洖 -1銆0 鎴 1銆 + * + */ + @Override + public int compareTo(UUID val) + { + // The ordering is intentionally set up so that the UUIDs + // can simply be numerically compared as two numbers + return (this.mostSigBits < val.mostSigBits ? -1 : // + (this.mostSigBits > val.mostSigBits ? 1 : // + (this.leastSigBits < val.leastSigBits ? -1 : // + (this.leastSigBits > val.leastSigBits ? 1 : // + 0)))); + } + + // ------------------------------------------------------------------------------------------------------------------- + // Private method start + /** + * 杩斿洖鎸囧畾鏁板瓧瀵瑰簲鐨刪ex鍊 + * + * @param val 鍊 + * @param digits 浣 + * @return 鍊 + */ + private static String digits(long val, int digits) + { + long hi = 1L << (digits * 4); + return Long.toHexString(hi | (val & (hi - 1))).substring(1); + } + + /** + * 妫鏌ユ槸鍚︿负time-based鐗堟湰UUID + */ + private void checkTimeBase() + { + if (version() != 1) + { + throw new UnsupportedOperationException("Not a time-based UUID"); + } + } + + /** + * 鑾峰彇{@link SecureRandom}锛岀被鎻愪緵鍔犲瘑鐨勫己闅忔満鏁扮敓鎴愬櫒 (RNG) + * + * @return {@link SecureRandom} + */ + public static SecureRandom getSecureRandom() + { + try + { + return SecureRandom.getInstance("SHA1PRNG"); + } + catch (NoSuchAlgorithmException e) + { + throw new UtilException(e); + } + } + + /** + * 鑾峰彇闅忔満鏁扮敓鎴愬櫒瀵硅薄
+ * ThreadLocalRandom鏄疛DK 7涔嬪悗鎻愪緵骞跺彂浜х敓闅忔満鏁帮紝鑳藉瑙e喅澶氫釜绾跨▼鍙戠敓鐨勭珵浜変簤澶恒 + * + * @return {@link ThreadLocalRandom} + */ + public static ThreadLocalRandom getRandom() + { + return ThreadLocalRandom.current(); + } +} diff --git a/evo-admin/src/main/java/com/evo/common/xss/Xss.java b/evo-admin/src/main/java/com/evo/common/xss/Xss.java new file mode 100644 index 0000000..fa15916 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/xss/Xss.java @@ -0,0 +1,27 @@ +package com.evo.common.xss; + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 鑷畾涔墄ss鏍¢獙娉ㄨВ + * + * @author evo + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(value = { ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR, ElementType.PARAMETER }) +@Constraint(validatedBy = { XssValidator.class }) +public @interface Xss +{ + String message() + + default "涓嶅厑璁镐换浣曡剼鏈繍琛"; + + Class[] groups() default {}; + + Class[] payload() default {}; +} diff --git a/evo-admin/src/main/java/com/evo/common/xss/XssValidator.java b/evo-admin/src/main/java/com/evo/common/xss/XssValidator.java new file mode 100644 index 0000000..ea4c397 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/common/xss/XssValidator.java @@ -0,0 +1,39 @@ +package com.evo.common.xss; + +import com.evo.common.utils.StringUtils; +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 鑷畾涔墄ss鏍¢獙娉ㄨВ瀹炵幇 + * + * @author evo + */ +public class XssValidator implements ConstraintValidator +{ + private static final String HTML_PATTERN = "<(\\S*?)[^>]*>.*?|<.*? />"; + + @Override + public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) + { + if (StringUtils.isBlank(value)) + { + return true; + } + return !containsHtml(value); + } + + public static boolean containsHtml(String value) + { + StringBuilder sHtml = new StringBuilder(); + Pattern pattern = Pattern.compile(HTML_PATTERN); + Matcher matcher = pattern.matcher(value); + while (matcher.find()) + { + sHtml.append(matcher.group()); + } + return pattern.matcher(sHtml).matches(); + } +} diff --git a/evo-admin/src/main/java/com/evo/equipment/constant/Constants.java b/evo-admin/src/main/java/com/evo/equipment/constant/Constants.java new file mode 100644 index 0000000..7136b47 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/constant/Constants.java @@ -0,0 +1,21 @@ +package com.evo.equipment.constant; + +/** + * 閫氱敤甯搁噺淇℃伅 + * + * @author evo + */ +public class Constants +{ + public static final String BUTTON_ADDRESS = "D:/java/button"; //鎸夐挳瀛樻斁鍦板潃 + public static final String STAFF_IMAGE_ADDRESS = "D:/java/image/"; //鎵撳崱浜哄憳鍥剧墖瀛樺偍鍦板潃 + public static final String STAFF_IMAGE_ADDRESS_ZIP = "D:/java/"; //鎵撳崱浜哄憳鍥剧墖瀛樺偍鍦板潃 + public static final String STAFF_BUTTON_URL = "http://192.168.5.12:8088/button/"; //鎵撳崱鎸夐挳鍥剧墖瀛樻湇鍔″櫒鑾峰彇鍦板潃 + public static final String STAFF_IMAGE_URL = "http://192.168.5.12:8088/image/"; //鎵撳崱浜哄憳鍥剧墖瀛樻湇鍔″櫒鑾峰彇鍦板潃 + public static final String STAFF_FUND_ADDRESS = "D:/lableExcel/"; //鍏Н閲戝瓨鍌ㄥ湴鍧 + public static final String EQ_DEVICE_CODE = "T71474"; //椁愰ギ鎵撳崱鏈鸿澶囧彿 + public static final String EQ_DEVICE_PUBLIC_CODE = "ET74333"; //鍏叡鎵撳崱鏈 + public static final String STAFF_IMAGE_URL_OVER_TIME = "http://192.168.5.12:8088/image/"; //鎵撳崱浜哄憳鍥剧墖瀛樻湇鍔″櫒鑾峰彇鍦板潃 + public static final String EQ_DEVICE_OVER_TIME_CODE = "ET74336"; //鍔犵彮鎵撳崱鏈 +} + diff --git a/evo-admin/src/main/java/com/evo/equipment/controller/EqButtonController.java b/evo-admin/src/main/java/com/evo/equipment/controller/EqButtonController.java new file mode 100644 index 0000000..0c4f468 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/controller/EqButtonController.java @@ -0,0 +1,142 @@ +package com.evo.equipment.controller; + +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.SecurityUtils; +import com.evo.equipment.domain.EqButton; +import com.evo.equipment.service.IEqButtonService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.BufferedOutputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +/** + * 鎸夐挳淇℃伅Controller + * + * @author chenyj + * @date 2024-08-15 + */ +@RestController +@RequestMapping("/equipment/button") +public class EqButtonController extends BaseController +{ + @Autowired + private IEqButtonService eqButtonService; + + + + /** + * 鏌ヨ鎸夐挳淇℃伅鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('equipment:button:list')") + @GetMapping("/list") + public TableDataInfo list(EqButton eqButton) + { + startPage(); + List list = eqButtonService.selectEqButtonList(eqButton); + return getDataTable(list); + } + + /** + * 鑾峰彇鎸夐挳淇℃伅璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('equipment:button:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(eqButtonService.selectEqButtonById(id)); + } + + /** + * 鏂板鎸夐挳淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('equipment:button:add')") + @RequestMapping("/uploadImage") + @ResponseBody + public AjaxResult uploadContractPDF(@RequestParam("name") String name, @RequestParam("file") MultipartFile filePath) { + String originalFilename = filePath.getOriginalFilename(); + if (originalFilename != null) { + //鏍¢獙鏂囦欢鍚庣紑 jpg jpeg pdf 鏍煎紡鐨勬枃浠朵笉鍏佽涓婁紶 + String suffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1); + if (!"jpg".equals(suffix) && !"jpeg".equals(suffix) && !"png".equals(suffix) && !"pdf".equals(suffix)) { + return AjaxResult.error("绂佹闈炴硶鏂囦欢涓婁紶"); + } else { + EqButton eqButton = eqButtonService.selectEqButtonByName(name); + if(eqButton != null){ + return AjaxResult.error("娣诲姞鎸夐挳淇℃伅閲嶅锛"); + } + FileOutputStream fos = null; + BufferedOutputStream bos = null; + InputStream is = null; + try { + is = filePath.getInputStream(); + //鍦ㄥ搴旂殑鏂囦欢澶逛笅鐢熸垚鏂扮殑鍥剧墖 + fos = new FileOutputStream(com.evo.equipment.constant.Constants.BUTTON_ADDRESS + "/" + originalFilename); + bos = new BufferedOutputStream(fos); + // 璇诲彇杈撳叆娴佸苟鍐欏叆鏂囦欢 + byte[] buffer = new byte[1024]; + int bytesRead; + while ((bytesRead = is.read(buffer)) != -1) { + bos.write(buffer, 0, bytesRead); + } + bos.flush(); + //鎻掑叆琛 + eqButton = new EqButton(); + eqButton.setCreateBy(SecurityUtils.getUsername()); + eqButton.setName(name); + eqButton.setImage(com.evo.equipment.constant.Constants.STAFF_BUTTON_URL + originalFilename); + eqButtonService.insertEqButton(eqButton); + } catch (IOException e) { + e.printStackTrace(); + return AjaxResult.error(); + }finally { + try{ + if(fos != null){ + fos.close(); + } + if(bos != null){ + bos.close(); + } + if(is != null){ + is.close(); + } + }catch (Exception e){ + e.printStackTrace(); + } + } + } + } + return AjaxResult.success(); + } + + /** + * 淇敼鎸夐挳淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('equipment:button:edit')") + @Log(title = "鎸夐挳淇℃伅", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody EqButton eqButton) + { + return toAjax(eqButtonService.updateEqButton(eqButton)); + } + + /** + * 鍒犻櫎鎸夐挳淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('equipment:button:remove')") + @Log(title = "鎸夐挳淇℃伅", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public AjaxResult remove(@PathVariable Long id) + { + return eqButtonService.deleteEqButtonById(id,SecurityUtils.getUsername()); + } +} diff --git a/evo-admin/src/main/java/com/evo/equipment/controller/EqImagesController.java b/evo-admin/src/main/java/com/evo/equipment/controller/EqImagesController.java new file mode 100644 index 0000000..285efd7 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/controller/EqImagesController.java @@ -0,0 +1,91 @@ +package com.evo.equipment.controller; + +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.poi.ExcelUtil; +import com.evo.equipment.domain.EqImages; +import com.evo.equipment.service.IEqImagesService; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; +import java.util.List; + +/** + * 鐓х墖绠$悊Controller + * + * @author chenyj + * @date 2024-08-28 + */ +@RestController +@RequestMapping("/equipment/images") +public class EqImagesController extends BaseController +{ + @Resource + private IEqImagesService eqImagesService; + + /** + * 鏌ヨ鐓х墖绠$悊鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('equipment:images:list')") + @GetMapping("/list") + public TableDataInfo list(EqImages eqImages) + { + startPage(); + List list = eqImagesService.selectEqImagesList(eqImages); + return getDataTable(list); + } + + /** + * 瀵煎嚭妯℃澘 + */ + @PreAuthorize("@ss.hasPermi('equipment:images:export')") + @Log(title = "鍛樺伐瀵煎叆", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response) + { + ExcelUtil util = new ExcelUtil(EqImages.class); + util.exportExcel(response,null,"name"); + } + + /** + * 鍒犻櫎鐓х墖绠$悊 + */ + @PreAuthorize("@ss.hasPermi('equipment:images:remove')") + @Log(title = "鐓х墖绠$悊", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public AjaxResult remove(@PathVariable Long id) + { + return toAjax(eqImagesService.deleteEqImagesById(id)); + } + + /** + * 涓婁紶鍛樺伐鐓х墖 + */ + @RequestMapping("/uploadDispatchings") + @ResponseBody + public AjaxResult uploadPDF(@RequestParam("userId") Long userId, @RequestParam("staffName") String staffName, @RequestParam("timeClock") String timeClock,@RequestParam("hours") BigDecimal hours, @RequestParam("file") MultipartFile filePath){ + //鏂板鍛樺伐鍥剧墖 + EqImages eqImages = new EqImages(); + eqImages.setUserId(userId); + eqImages.setStaffName(staffName); + eqImages.setHours(hours); + eqImages.setTimeClock(timeClock); + return eqImagesService.insertEqImages(eqImages,filePath); + } + + /** + * 鎵归噺涓婁紶鍛樺伐鐓х墖 + */ + @RequestMapping("/uploadBatchFile") + @ResponseBody + public AjaxResult uploadBatchFile(@RequestParam("file") MultipartFile filePath){ + + return eqImagesService.uploadBatchFile(filePath); + } +} diff --git a/evo-admin/src/main/java/com/evo/equipment/controller/EqSnDetailController.java b/evo-admin/src/main/java/com/evo/equipment/controller/EqSnDetailController.java new file mode 100644 index 0000000..4df0d8c --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/controller/EqSnDetailController.java @@ -0,0 +1,40 @@ +package com.evo.equipment.controller; + +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.page.TableDataInfo; +import com.evo.equipment.domain.EqSnDetail; +import com.evo.equipment.service.IEqSnDetailService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 鑰冨嫟璁惧淇℃伅Controller + * + * @author chenyj + * @date 2024-08-07 + */ +@RestController +@RequestMapping("/equipment/snDetail") +public class EqSnDetailController extends BaseController +{ + @Autowired + private IEqSnDetailService EqSnDetailService; + + /** + * 鏌ヨ鑰冨嫟璁惧淇℃伅鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('equipment:snDetail:list')") + @GetMapping("/list") + public TableDataInfo list(EqSnDetail EqSnDetail) + { + startPage(); + List list = EqSnDetailService.selectEqSnDetailList(EqSnDetail); + return getDataTable(list); + } + +} diff --git a/evo-admin/src/main/java/com/evo/equipment/controller/EqStatusTimeController.java b/evo-admin/src/main/java/com/evo/equipment/controller/EqStatusTimeController.java new file mode 100644 index 0000000..df57a7f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/controller/EqStatusTimeController.java @@ -0,0 +1,86 @@ +package com.evo.equipment.controller; + +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.SecurityUtils; +import com.evo.equipment.domain.EqStatusTime; +import com.evo.equipment.service.IEqStatusTimeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 鐘舵佹椂闂碈ontroller + * + * @author chenyj + * @date 2024-08-19 + */ +@RestController +@RequestMapping("/equipment/statusTime") +public class EqStatusTimeController extends BaseController +{ + @Autowired + private IEqStatusTimeService eqStatusTimeService; + + /** + * 鏌ヨ鐘舵佹椂闂村垪琛 + */ + @PreAuthorize("@ss.hasPermi('equipment:statusTime:list')") + @GetMapping("/list") + public TableDataInfo list(EqStatusTime eqStatusTime) + { + startPage(); + List list = eqStatusTimeService.selectEqStatusTimeList(eqStatusTime); + return getDataTable(list); + } + + /** + * 鑾峰彇鐘舵佹椂闂磋缁嗕俊鎭 + */ + @PreAuthorize("@ss.hasPermi('equipment:statusTime:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(eqStatusTimeService.selectEqStatusTimeById(id)); + } + + /** + * 鏂板鐘舵佹椂闂 + */ + @PreAuthorize("@ss.hasPermi('equipment:statusTime:add')") + @Log(title = "鐘舵佹椂闂", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody EqStatusTime eqStatusTime) + { + eqStatusTime.setCreateBy(SecurityUtils.getUsername()); + return eqStatusTimeService.insertEqStatusTime(eqStatusTime); + } + + /** + * 淇敼鐘舵佹椂闂 + */ + @PreAuthorize("@ss.hasPermi('equipment:statusTime:edit')") + @Log(title = "鐘舵佹椂闂", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody EqStatusTime eqStatusTime) + { + eqStatusTime.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(eqStatusTimeService.updateEqStatusTime(eqStatusTime)); + } + + /** + * 鍒犻櫎鐘舵佹椂闂 + */ + @PreAuthorize("@ss.hasPermi('equipment:statusTime:remove')") + @Log(title = "鐘舵佹椂闂", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public AjaxResult remove(@PathVariable Long id) + { + return toAjax(eqStatusTimeService.deleteEqStatusTimeById(id,SecurityUtils.getUsername())); + } +} diff --git a/evo-admin/src/main/java/com/evo/equipment/domain/EqButton.java b/evo-admin/src/main/java/com/evo/equipment/domain/EqButton.java new file mode 100644 index 0000000..b745d17 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/domain/EqButton.java @@ -0,0 +1,110 @@ +package com.evo.equipment.domain; + +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 鎸夐挳淇℃伅瀵硅薄 eq_button + * + * @author chenyj + * @date 2024-08-15 + */ +public class EqButton extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭 */ + private Long id; + + /** 搴忓彿 */ + @Excel(name = "搴忓彿") + private String num; + + /** 鎸夐挳鍚嶇О */ + @Excel(name = "鎸夐挳鍚嶇О") + private String name; + + /** 鍥炬爣鍦板潃 */ + @Excel(name = "鍥炬爣鍦板潃") + private String image; + + /** 鍒犻櫎鏍囪瘑 */ + private String delFlag; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setNum(String num) + { + this.num = num; + } + + public String getNum() + { + return num; + } + public void setName(String name) + { + this.name = name; + } + + public String getName() + { + return name; + } + public void setImage(String image) + { + this.image = image; + } + + public String getImage() + { + return image; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + public void setRemarks(String remarks) + { + this.remarks = remarks; + } + + public String getRemarks() + { + return remarks; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("num", getNum()) + .append("name", getName()) + .append("image", getImage()) + .append("delFlag", getDelFlag()) + .append("remarks", getRemarks()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/equipment/domain/EqImages.java b/evo-admin/src/main/java/com/evo/equipment/domain/EqImages.java new file mode 100644 index 0000000..9820fb7 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/domain/EqImages.java @@ -0,0 +1,120 @@ +package com.evo.equipment.domain; + +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.math.BigDecimal; + +/** + * 鐓х墖绠$悊瀵硅薄 eq_images + * + * @author chenyj + * @date 2024-08-28 + */ +public class EqImages extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭ID */ + private Long id; + + /** 浜哄憳ID */ + @Excel(name = "鍛樺伐ID") + private Long userId; + + /** 鍛樺伐濮撳悕 */ + @Excel(name = "鍛樺伐濮撳悕") + private String staffName; + + /** 鐓х墖鍦板潃 */ + @Excel(name = "鐓х墖鍦板潃") + private String imageUrl; + + @Excel(name = "宸ヤ綔鏃堕暱") + private BigDecimal hours; + + @Excel(name = "鎵撳崱鏈") + private String timeClock; + + /** 鍒犻櫎鏍囪瘑 */ + private String delFlag; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public void setStaffName(String staffName) + { + this.staffName = staffName; + } + + public String getStaffName() + { + return staffName; + } + public void setImageUrl(String imageUrl) + { + this.imageUrl = imageUrl; + } + + public String getImageUrl() + { + return imageUrl; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + public BigDecimal getHours() { + return hours; + } + + public String getTimeClock() { + return timeClock; + } + + public void setTimeClock(String timeClock) { + this.timeClock = timeClock; + } + + public void setHours(BigDecimal hours) { + this.hours = hours; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("staffName", getStaffName()) + .append("imageUrl", getImageUrl()) + .append("timeClock", getTimeClock()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/equipment/domain/EqSnDetail.java b/evo-admin/src/main/java/com/evo/equipment/domain/EqSnDetail.java new file mode 100644 index 0000000..7a0dc91 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/domain/EqSnDetail.java @@ -0,0 +1,142 @@ +package com.evo.equipment.domain; + +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.Date; + +/** + * 鑰冨嫟璁惧淇℃伅瀵硅薄 rz_sn_detail + * + * @author chenyj + * @date 2024-08-07 + */ +public class EqSnDetail extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭 */ + private Long id; + + /** 璁惧鍙 */ + @Excel(name = "璁惧鍙") + private String sn; + + /** 鍐呴儴鐗堟湰鍙 */ + @Excel(name = "鍐呴儴鐗堟湰鍙") + private String versionCode; + + /** 璁惧椤甸潰鐗堟湰鍙 */ + @Excel(name = "璁惧椤甸潰鐗堟湰鍙") + private String versionName; + + /** 璁惧ip */ + @Excel(name = "璁惧ip") + private String ip; + + /** 璁惧杩炴帴鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "璁惧杩炴帴鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date snTime; + + /** 璁惧杩炴帴鐘舵 */ + @Excel(name = "璁惧杩炴帴鐘舵") + private String type; + + /** 鍒犻櫎鏍囪瘑 */ + private String delFlag; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setSn(String sn) + { + this.sn = sn; + } + + public String getSn() + { + return sn; + } + public void setVersionCode(String versionCode) + { + this.versionCode = versionCode; + } + + public String getVersionCode() + { + return versionCode; + } + public void setVersionName(String versionName) + { + this.versionName = versionName; + } + + public String getVersionName() + { + return versionName; + } + public void setIp(String ip) + { + this.ip = ip; + } + + public String getIp() + { + return ip; + } + public void setSnTime(Date snTime) + { + this.snTime = snTime; + } + + public Date getSnTime() + { + return snTime; + } + public void setType(String type) + { + this.type = type; + } + + public String getType() + { + return type; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("sn", getSn()) + .append("versionCode", getVersionCode()) + .append("versionName", getVersionName()) + .append("ip", getIp()) + .append("snTime", getSnTime()) + .append("type", getType()) + .append("delFlag", getDelFlag()) + .append("createTime", getCreateTime()) + .append("createBy", getCreateBy()) + .append("updateTime", getUpdateTime()) + .append("updateBy", getUpdateBy()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/equipment/domain/EqStatusTime.java b/evo-admin/src/main/java/com/evo/equipment/domain/EqStatusTime.java new file mode 100644 index 0000000..9063f6d --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/domain/EqStatusTime.java @@ -0,0 +1,83 @@ +package com.evo.equipment.domain; + +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 鐘舵佹椂闂村璞 eq_status_time + * + * @author chenyj + * @date 2024-08-19 + */ +public class EqStatusTime extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭 */ + private Long id; + + /** 鐘舵 */ + @Excel(name = "鐘舵") + private String status; + + /** 鏃堕暱锛堟绉掞級 */ + @Excel(name = "鏃堕暱", readConverterExp = "姣=绉") + private Long time; + + /** 鍒犻櫎鏍囪瘑 */ + private String delFlag; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setStatus(String status) + { + this.status = status; + } + + public String getStatus() + { + return status; + } + public void setTime(Long time) + { + this.time = time; + } + + public Long getTime() + { + return time; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("status", getStatus()) + .append("time", getTime()) + .append("remark", getRemark()) + .append("delFlag", getDelFlag()) + .append("createTime", getCreateTime()) + .append("createBy", getCreateBy()) + .append("updateTime", getUpdateTime()) + .append("updateBy", getUpdateBy()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/equipment/domain/vo/CwBottonDto.java b/evo-admin/src/main/java/com/evo/equipment/domain/vo/CwBottonDto.java new file mode 100644 index 0000000..14c8a9f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/domain/vo/CwBottonDto.java @@ -0,0 +1,19 @@ +package com.evo.equipment.domain.vo; + +public class CwBottonDto { + + private String icon; + + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + @Override + public String toString() { + return "CwBottonDto [icon=" + icon + "]"; + } +} diff --git a/evo-admin/src/main/java/com/evo/equipment/domain/vo/CwButtonData.java b/evo-admin/src/main/java/com/evo/equipment/domain/vo/CwButtonData.java new file mode 100644 index 0000000..8c1a4f3 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/domain/vo/CwButtonData.java @@ -0,0 +1,26 @@ +package com.evo.equipment.domain.vo; + +import java.util.List; + +public class CwButtonData { + + private String cmd; + private List value; + public String getCmd() { + return cmd; + } + public void setCmd(String cmd) { + this.cmd = cmd; + } + public List getValue() { + return value; + } + public void setValue(List value) { + this.value = value; + } + @Override + public String toString() { + return "CwButtonData [cmd=" + cmd + ", value=" + value + "]"; + } + +} diff --git a/evo-admin/src/main/java/com/evo/equipment/domain/vo/CwButtonVo.java b/evo-admin/src/main/java/com/evo/equipment/domain/vo/CwButtonVo.java new file mode 100644 index 0000000..6d8e4aa --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/domain/vo/CwButtonVo.java @@ -0,0 +1,56 @@ +package com.evo.equipment.domain.vo; + +public class CwButtonVo { + + private String cmd; + private String form; + private String to; + private CwButtonData data; + + + public String getCmd() { + return cmd; + } + + + public void setCmd(String cmd) { + this.cmd = cmd; + } + + + public String getForm() { + return form; + } + + + public void setForm(String form) { + this.form = form; + } + + + public String getTo() { + return to; + } + + + public void setTo(String to) { + this.to = to; + } + + + public CwButtonData getData() { + return data; + } + + + public void setData(CwButtonData data) { + this.data = data; + } + + + @Override + public String toString() { + return "CwButtonVo [cmd=" + cmd + ", form=" + form + ", to=" + to + ", data=" + data + "]"; + } + +} diff --git a/evo-admin/src/main/java/com/evo/equipment/domain/vo/RzStatusTimeData.java b/evo-admin/src/main/java/com/evo/equipment/domain/vo/RzStatusTimeData.java new file mode 100644 index 0000000..18eed51 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/domain/vo/RzStatusTimeData.java @@ -0,0 +1,68 @@ +package com.evo.equipment.domain.vo; + +public class RzStatusTimeData { + + private String cmd; + private int type_1; + private int type_2; + private int type_3; + private int type_4; + private int type_5; + private int type_6; + private int type_7; + public String getCmd() { + return cmd; + } + public void setCmd(String cmd) { + this.cmd = cmd; + } + public int getType_1() { + return type_1; + } + public void setType_1(int type_1) { + this.type_1 = type_1; + } + public int getType_2() { + return type_2; + } + public void setType_2(int type_2) { + this.type_2 = type_2; + } + public int getType_3() { + return type_3; + } + public void setType_3(int type_3) { + this.type_3 = type_3; + } + public int getType_4() { + return type_4; + } + public void setType_4(int type_4) { + this.type_4 = type_4; + } + public int getType_5() { + return type_5; + } + public void setType_5(int type_5) { + this.type_5 = type_5; + } + public int getType_6() { + return type_6; + } + public void setType_6(int type_6) { + this.type_6 = type_6; + } + public int getType_7() { + return type_7; + } + public void setType_7(int type_7) { + this.type_7 = type_7; + } + + @Override + public String toString() { + return "RzStatusTimeData [cmd=" + cmd + ", type_1=" + type_1 + ", type_2=" + type_2 + ", type_3=" + type_3 + + ", type_4=" + type_4 + ", type_5=" + type_5 + ", type_6=" + type_6 + ", type_7=" + type_7 + "]"; + } + +} diff --git a/evo-admin/src/main/java/com/evo/equipment/domain/vo/RzStatusTimeVo.java b/evo-admin/src/main/java/com/evo/equipment/domain/vo/RzStatusTimeVo.java new file mode 100644 index 0000000..d2ceebb --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/domain/vo/RzStatusTimeVo.java @@ -0,0 +1,39 @@ +package com.evo.equipment.domain.vo; + +public class RzStatusTimeVo { + + private String cmd; + private String form; + private String to; + private RzStatusTimeData data; + public String getCmd() { + return cmd; + } + public void setCmd(String cmd) { + this.cmd = cmd; + } + public String getForm() { + return form; + } + public void setForm(String form) { + this.form = form; + } + public String getTo() { + return to; + } + public void setTo(String to) { + this.to = to; + } + public RzStatusTimeData getData() { + return data; + } + public void setData(RzStatusTimeData data) { + this.data = data; + } + + @Override + public String toString() { + return "RzStatusTimeVo [cmd=" + cmd + ", form=" + form + ", to=" + to + ", data=" + data + "]"; + } + +} diff --git a/evo-admin/src/main/java/com/evo/equipment/domain/vo/StaffData.java b/evo-admin/src/main/java/com/evo/equipment/domain/vo/StaffData.java new file mode 100644 index 0000000..9826e2b --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/domain/vo/StaffData.java @@ -0,0 +1,133 @@ +package com.evo.equipment.domain.vo; + +import java.util.List; + +public class StaffData { + + private String cmd; + private String user_id; + private String name; + private String tts_name; + private int edit_mode; + private String face_template; + private String effect_time; + private String id_valid; + private String Ic; + private float confidence_level; + private String phone; + private int mode; + private List valid_cycle; + private int user_type; + + public String getCmd() { + return cmd; + } + + public void setCmd(String cmd) { + this.cmd = cmd; + } + + public String getUser_id() { + return user_id; + } + + public void setUser_id(String user_id) { + this.user_id = user_id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getTts_name() { + return tts_name; + } + + public void setTts_name(String tts_name) { + this.tts_name = tts_name; + } + + public int getEdit_mode() { + return edit_mode; + } + + public void setEdit_mode(int edit_mode) { + this.edit_mode = edit_mode; + } + + public String getFace_template() { + return face_template; + } + + public void setFace_template(String face_template) { + this.face_template = face_template; + } + + public String getEffect_time() { + return effect_time; + } + + public void setEffect_time(String effect_time) { + this.effect_time = effect_time; + } + + public String getId_valid() { + return id_valid; + } + + public void setId_valid(String id_valid) { + this.id_valid = id_valid; + } + + public String getIc() { + return Ic; + } + + public void setIc(String ic) { + Ic = ic; + } + + public float getConfidence_level() { + return confidence_level; + } + + public void setConfidence_level(float confidence_level) { + this.confidence_level = confidence_level; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public int getMode() { + return mode; + } + + public void setMode(int mode) { + this.mode = mode; + } + + public List getValid_cycle() { + return valid_cycle; + } + + public void setValid_cycle(List valid_cycle) { + this.valid_cycle = valid_cycle; + } + + public int getUser_type() { + return user_type; + } + + public void setUser_type(int user_type) { + this.user_type = user_type; + } +} diff --git a/evo-admin/src/main/java/com/evo/equipment/domain/vo/StaffDto.java b/evo-admin/src/main/java/com/evo/equipment/domain/vo/StaffDto.java new file mode 100644 index 0000000..f74ccc2 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/domain/vo/StaffDto.java @@ -0,0 +1,50 @@ +package com.evo.equipment.domain.vo; + +public class StaffDto { + + private String cmd; + private String form; + private String to; + private String extra; + private StaffData data; + + public String getCmd() { + return cmd; + } + + public void setCmd(String cmd) { + this.cmd = cmd; + } + + public String getForm() { + return form; + } + + public void setForm(String form) { + this.form = form; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getExtra() { + return extra; + } + + public void setExtra(String extra) { + this.extra = extra; + } + + public StaffData getData() { + return data; + } + + public void setData(StaffData data) { + this.data = data; + } +} diff --git a/evo-admin/src/main/java/com/evo/equipment/mapper/EqButtonMapper.java b/evo-admin/src/main/java/com/evo/equipment/mapper/EqButtonMapper.java new file mode 100644 index 0000000..29a11bd --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/mapper/EqButtonMapper.java @@ -0,0 +1,54 @@ +package com.evo.equipment.mapper; + +import com.evo.equipment.domain.EqButton; + +import java.util.List; + +/** + * 鎸夐挳淇℃伅Mapper鎺ュ彛 + * + * @author chenyj + * @date 2024-08-15 + */ +public interface EqButtonMapper +{ + /** + * 鏌ヨ鎸夐挳淇℃伅 + * + * @param id 鎸夐挳淇℃伅涓婚敭 + * @return 鎸夐挳淇℃伅 + */ + public EqButton selectEqButtonById(Long id); + + /** + * 鏌ヨ鎸夐挳淇℃伅鍒楄〃 + * + * @param eqButton 鎸夐挳淇℃伅 + * @return 鎸夐挳淇℃伅闆嗗悎 + */ + public List selectEqButtonList(EqButton eqButton); + + /** + * 鏂板鎸夐挳淇℃伅 + * + * @param eqButton 鎸夐挳淇℃伅 + * @return 缁撴灉 + */ + public int insertEqButton(EqButton eqButton); + + /** + * 淇敼鎸夐挳淇℃伅 + * + * @param eqButton 鎸夐挳淇℃伅 + * @return 缁撴灉 + */ + public int updateEqButton(EqButton eqButton); + /** + * 鏌ヨ鎸夐挳淇℃伅 + * + * @param name 鎸夐挳淇℃伅涓婚敭 + * @return 鎸夐挳淇℃伅 + */ + public EqButton selectEqButtonByName(String name); + +} diff --git a/evo-admin/src/main/java/com/evo/equipment/mapper/EqImagesMapper.java b/evo-admin/src/main/java/com/evo/equipment/mapper/EqImagesMapper.java new file mode 100644 index 0000000..f5dd461 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/mapper/EqImagesMapper.java @@ -0,0 +1,54 @@ +package com.evo.equipment.mapper; + +import com.evo.equipment.domain.EqImages; + +import java.util.List; + +/** + * 鐓х墖绠$悊Mapper鎺ュ彛 + * + * @author chenyj + * @date 2024-08-28 + */ +public interface EqImagesMapper +{ + /** + * 鏌ヨ鐓х墖绠$悊 + * + * @param id 鐓х墖绠$悊涓婚敭 + * @return 鐓х墖绠$悊 + */ + public EqImages selectEqImagesById(Long id); + + /** + * 鏌ヨ鐓х墖绠$悊鍒楄〃 + * + * @param eqImages 鐓х墖绠$悊 + * @return 鐓х墖绠$悊闆嗗悎 + */ + public List selectEqImagesList(EqImages eqImages); + + /** + * 鏂板鐓х墖绠$悊 + * + * @param eqImages 鐓х墖绠$悊 + * @return 缁撴灉 + */ + public int insertEqImages(EqImages eqImages); + + /** + * 淇敼鐓х墖绠$悊 + * + * @param eqImages 鐓х墖绠$悊 + * @return 缁撴灉 + */ + public int updateEqImages(EqImages eqImages); + + /** + * 鏍规嵁鍛樺伐ID鏌ヨ鐓х墖绠$悊 + * + * @param userId + * @return 鐓х墖绠$悊 + */ + public EqImages selectEqImagesByStaffId(Long userId); +} diff --git a/evo-admin/src/main/java/com/evo/equipment/mapper/EqSnDetailMapper.java b/evo-admin/src/main/java/com/evo/equipment/mapper/EqSnDetailMapper.java new file mode 100644 index 0000000..cb12064 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/mapper/EqSnDetailMapper.java @@ -0,0 +1,45 @@ +package com.evo.equipment.mapper; + +import com.evo.equipment.domain.EqSnDetail; + +import java.util.List; + +/** + * 鑰冨嫟璁惧淇℃伅Mapper鎺ュ彛 + * + * @author chenyj + * @date 2024-08-07 + */ +public interface EqSnDetailMapper +{ + /** + * 鏌ヨ鑰冨嫟璁惧淇℃伅鍒楄〃 + * + * @param EqSnDetail 鑰冨嫟璁惧淇℃伅 + * @return 鑰冨嫟璁惧淇℃伅闆嗗悎 + */ + public List selectEqSnDetailList(EqSnDetail EqSnDetail); + + /** + * 鏂板鑰冨嫟璁惧淇℃伅 + * + * @param EqSnDetail 鑰冨嫟璁惧淇℃伅 + * @return 缁撴灉 + */ + public int insertEqSnDetail(EqSnDetail EqSnDetail); + + /** + * 淇敼鑰冨嫟璁惧淇℃伅 + * + * @param EqSnDetail 鑰冨嫟璁惧淇℃伅 + * @return 缁撴灉 + */ + public int updateEqSnDetail(EqSnDetail EqSnDetail); + + /** + * 鏍规嵁璁惧缂栧彿鏌ヨ璁惧 + * @param sn + * @return + */ + public EqSnDetail selectEqSnDetailBySn(String sn); +} diff --git a/evo-admin/src/main/java/com/evo/equipment/mapper/EqStatusTimeMapper.java b/evo-admin/src/main/java/com/evo/equipment/mapper/EqStatusTimeMapper.java new file mode 100644 index 0000000..909a725 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/mapper/EqStatusTimeMapper.java @@ -0,0 +1,54 @@ +package com.evo.equipment.mapper; + +import com.evo.equipment.domain.EqStatusTime; + +import java.util.List; + +/** + * 鐘舵佹椂闂碝apper鎺ュ彛 + * + * @author chenyj + * @date 2024-08-19 + */ +public interface EqStatusTimeMapper +{ + /** + * 鏌ヨ鐘舵佹椂闂 + * + * @param id 鐘舵佹椂闂翠富閿 + * @return 鐘舵佹椂闂 + */ + public EqStatusTime selectEqStatusTimeById(Long id); + + /** + * 鏌ヨ鐘舵佹椂闂村垪琛 + * + * @param eqStatusTime 鐘舵佹椂闂 + * @return 鐘舵佹椂闂撮泦鍚 + */ + public List selectEqStatusTimeList(EqStatusTime eqStatusTime); + + /** + * 鏂板鐘舵佹椂闂 + * + * @param eqStatusTime 鐘舵佹椂闂 + * @return 缁撴灉 + */ + public int insertEqStatusTime(EqStatusTime eqStatusTime); + + /** + * 淇敼鐘舵佹椂闂 + * + * @param eqStatusTime 鐘舵佹椂闂 + * @return 缁撴灉 + */ + public int updateEqStatusTime(EqStatusTime eqStatusTime); + /** + * 鏌ヨ鐘舵佹椂闂 + * + * @param status 鐘舵佹椂闂翠富閿 + * @return 鐘舵佹椂闂 + */ + public EqStatusTime selectEqStatusTimeByStatus(String status); + +} diff --git a/evo-admin/src/main/java/com/evo/equipment/service/IEqButtonService.java b/evo-admin/src/main/java/com/evo/equipment/service/IEqButtonService.java new file mode 100644 index 0000000..de6b582 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/service/IEqButtonService.java @@ -0,0 +1,63 @@ +package com.evo.equipment.service; + +import com.evo.common.core.domain.AjaxResult; +import com.evo.equipment.domain.EqButton; + +import java.util.List; + +/** + * 鎸夐挳淇℃伅Service鎺ュ彛 + * + * @author chenyj + * @date 2024-08-15 + */ +public interface IEqButtonService +{ + /** + * 鏌ヨ鎸夐挳淇℃伅 + * + * @param id 鎸夐挳淇℃伅涓婚敭 + * @return 鎸夐挳淇℃伅 + */ + public EqButton selectEqButtonById(Long id); + + /** + * 鏌ヨ鎸夐挳淇℃伅鍒楄〃 + * + * @param eqButton 鎸夐挳淇℃伅 + * @return 鎸夐挳淇℃伅闆嗗悎 + */ + public List selectEqButtonList(EqButton eqButton); + + /** + * 鏂板鎸夐挳淇℃伅 + * + * @param eqButton 鎸夐挳淇℃伅 + * @return 缁撴灉 + */ + public AjaxResult insertEqButton(EqButton eqButton); + + /** + * 淇敼鎸夐挳淇℃伅 + * + * @param eqButton 鎸夐挳淇℃伅 + * @return 缁撴灉 + */ + public int updateEqButton(EqButton eqButton); + + /** + * 鍒犻櫎鎸夐挳淇℃伅淇℃伅 + * + * @param id 鎸夐挳淇℃伅涓婚敭 + * @return 缁撴灉 + */ + public AjaxResult deleteEqButtonById(Long id,String operName); + + /** + * 鏌ヨ鎸夐挳淇℃伅 + * + * @param name 鎸夐挳淇℃伅涓婚敭 + * @return 鎸夐挳淇℃伅 + */ + public EqButton selectEqButtonByName(String name); +} diff --git a/evo-admin/src/main/java/com/evo/equipment/service/IEqImagesService.java b/evo-admin/src/main/java/com/evo/equipment/service/IEqImagesService.java new file mode 100644 index 0000000..f0a24a0 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/service/IEqImagesService.java @@ -0,0 +1,49 @@ +package com.evo.equipment.service; + +import com.evo.common.core.domain.AjaxResult; +import com.evo.equipment.domain.EqImages; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +/** + * 鐓х墖绠$悊Service鎺ュ彛 + * + * @author chenyj + * @date 2024-08-28 + */ +public interface IEqImagesService +{ + + /** + * 鏌ヨ鐓х墖绠$悊鍒楄〃 + * + * @param eqImages 鐓х墖绠$悊 + * @return 鐓х墖绠$悊闆嗗悎 + */ + public List selectEqImagesList(EqImages eqImages); + + /** + * 鏂板鐓х墖绠$悊 + * + * @param eqImages 鐓х墖绠$悊 + * @return 缁撴灉 + */ + public AjaxResult insertEqImages(EqImages eqImages, MultipartFile filePath); + + /** + * 鍒犻櫎鐓х墖绠$悊淇℃伅 + * + * @param id 鐓х墖绠$悊涓婚敭 + * @return 缁撴灉 + */ + public int deleteEqImagesById(Long id); + + /** + * 鎵归噺涓婁紶鐓х墖 + * @param filePath + * @return + */ + public AjaxResult uploadBatchFile(MultipartFile filePath); + +} diff --git a/evo-admin/src/main/java/com/evo/equipment/service/IEqSnDetailService.java b/evo-admin/src/main/java/com/evo/equipment/service/IEqSnDetailService.java new file mode 100644 index 0000000..6b648a2 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/service/IEqSnDetailService.java @@ -0,0 +1,46 @@ +package com.evo.equipment.service; + +import com.evo.common.core.domain.AjaxResult; +import com.evo.equipment.domain.EqSnDetail; + +import java.util.List; + +/** + * 鑰冨嫟璁惧淇℃伅Service鎺ュ彛 + * + * @author chenyj + * @date 2024-08-07 + */ +public interface IEqSnDetailService +{ + /** + * 鏌ヨ鑰冨嫟璁惧淇℃伅鍒楄〃 + * + * @param EqSnDetail 鑰冨嫟璁惧淇℃伅 + * @return 鑰冨嫟璁惧淇℃伅闆嗗悎 + */ + public List selectEqSnDetailList(EqSnDetail EqSnDetail); + + /** + * 鏂板鑰冨嫟璁惧淇℃伅 + * + * @param EqSnDetail 鑰冨嫟璁惧淇℃伅 + * @return 缁撴灉 + */ + public AjaxResult insertEqSnDetail(EqSnDetail EqSnDetail); + + /** + * 淇敼鑰冨嫟璁惧淇℃伅 + * + * @param EqSnDetail 鑰冨嫟璁惧淇℃伅 + * @return 缁撴灉 + */ + public int updateEqSnDetail(EqSnDetail EqSnDetail); + + /** + * 鏍规嵁璁惧缂栧彿鏌ヨ璁惧 + * @param sn + * @return + */ + public EqSnDetail selectEqSnDetailBySn(String sn); +} diff --git a/evo-admin/src/main/java/com/evo/equipment/service/IEqStatusTimeService.java b/evo-admin/src/main/java/com/evo/equipment/service/IEqStatusTimeService.java new file mode 100644 index 0000000..b2294b4 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/service/IEqStatusTimeService.java @@ -0,0 +1,55 @@ +package com.evo.equipment.service; + +import com.evo.common.core.domain.AjaxResult; +import com.evo.equipment.domain.EqStatusTime; + +import java.util.List; + +/** + * 鐘舵佹椂闂碨ervice鎺ュ彛 + * + * @author chenyj + * @date 2024-08-19 + */ +public interface IEqStatusTimeService +{ + /** + * 鏌ヨ鐘舵佹椂闂 + * + * @param id 鐘舵佹椂闂翠富閿 + * @return 鐘舵佹椂闂 + */ + public EqStatusTime selectEqStatusTimeById(Long id); + + /** + * 鏌ヨ鐘舵佹椂闂村垪琛 + * + * @param eqStatusTime 鐘舵佹椂闂 + * @return 鐘舵佹椂闂撮泦鍚 + */ + public List selectEqStatusTimeList(EqStatusTime eqStatusTime); + + /** + * 鏂板鐘舵佹椂闂 + * + * @param eqStatusTime 鐘舵佹椂闂 + * @return 缁撴灉 + */ + public AjaxResult insertEqStatusTime(EqStatusTime eqStatusTime); + + /** + * 淇敼鐘舵佹椂闂 + * + * @param eqStatusTime 鐘舵佹椂闂 + * @return 缁撴灉 + */ + public int updateEqStatusTime(EqStatusTime eqStatusTime); + + /** + * 鍒犻櫎鐘舵佹椂闂翠俊鎭 + * + * @param id 鐘舵佹椂闂翠富閿 + * @return 缁撴灉 + */ + public int deleteEqStatusTimeById(Long id,String operName); +} diff --git a/evo-admin/src/main/java/com/evo/equipment/service/impl/EqButtonServiceImpl.java b/evo-admin/src/main/java/com/evo/equipment/service/impl/EqButtonServiceImpl.java new file mode 100644 index 0000000..5eb4e44 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/service/impl/EqButtonServiceImpl.java @@ -0,0 +1,208 @@ +package com.evo.equipment.service.impl; + +import com.alibaba.fastjson2.JSONObject; +import com.evo.common.constant.Constants; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.SecurityUtils; +import com.evo.equipment.domain.EqButton; +import com.evo.equipment.domain.EqSnDetail; +import com.evo.equipment.domain.vo.CwBottonDto; +import com.evo.equipment.domain.vo.CwButtonData; +import com.evo.equipment.domain.vo.CwButtonVo; +import com.evo.equipment.mapper.EqButtonMapper; +import com.evo.equipment.mapper.EqSnDetailMapper; +import com.evo.equipment.service.IEqButtonService; +import com.evo.framework.websocket.WebSocketUsers; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * 鎸夐挳淇℃伅Service涓氬姟灞傚鐞 + * + * @author chenyj + * @date 2024-11-15 + */ +@Service +public class EqButtonServiceImpl implements IEqButtonService +{ + @Resource + private EqButtonMapper eqButtonMapper; + @Resource + private EqSnDetailMapper EqSnDetailMapper; //鑰冨嫟璁惧 + + /** + * 鏌ヨ鎸夐挳淇℃伅 + * + * @param id 鎸夐挳淇℃伅涓婚敭 + * @return 鎸夐挳淇℃伅 + */ + @Override + public EqButton selectEqButtonById(Long id) + { + return eqButtonMapper.selectEqButtonById(id); + } + + /** + * 鏌ヨ鎸夐挳淇℃伅鍒楄〃 + * + * @param eqButton 鎸夐挳淇℃伅 + * @return 鎸夐挳淇℃伅 + */ + @Override + public List selectEqButtonList(EqButton eqButton) + { + return eqButtonMapper.selectEqButtonList(eqButton); + } + + /** + * 鏂板鎸夐挳淇℃伅 + * + * @param eqButton 鎸夐挳淇℃伅 + * @return 缁撴灉 + */ + @Override + public AjaxResult insertEqButton(EqButton eqButton) + { + //鍒ゆ柇鎸夐挳鐨勫簭鍙 + if("涓婄彮鍗★紙鍗曠彮鍒讹級".equals(eqButton.getName())){ + eqButton.setNum("1"); + }else if("涓婄彮鍗★紙鍙岀彮鍒讹級".equals(eqButton.getName())){ + eqButton.setNum("2"); + }else if("涓婄彮鍗★紙涓夌彮鍒讹級".equals(eqButton.getName())){ + eqButton.setNum("3"); + }else if("鍔犵彮鍗".equals(eqButton.getName())){ + eqButton.setNum("4"); + }else if("涓嬬彮鍗".equals(eqButton.getName())){ + eqButton.setNum("5"); + }else if("鎾ら攢".equals(eqButton.getName())){ + eqButton.setNum("6"); + }else{ + return AjaxResult.error(); + } + eqButton.setCreateTime(DateUtils.getNowDate()); + eqButton.setDelFlag(Constants.DELETE_FLAG_0); + int i = eqButtonMapper.insertEqButton(eqButton); + if(i < 1){ + return AjaxResult.error(); + } + //涓嬪彂鎸夐挳鍒版墦鍗℃満鍣 锛岃幏鍙栨墍鏈夋墦鍗℃満 + List sn_list = EqSnDetailMapper.selectEqSnDetailList(null); + //鑾峰彇鎵鏈夋墦鍗℃寜閽 + List bt_list = eqButtonMapper.selectEqButtonList(null); + //闇瑕佽繑鍥炵殑瀵硅薄 + CwButtonVo cbv = null; + //鍙戦佺殑鏁版嵁 + CwButtonData cbd = null; + //鎸夐挳瀵硅薄 + CwBottonDto cwBottonDto = null; + //鎸夐挳闆嗗悎 + List list2 = null; + for (EqSnDetail snDetail : sn_list) { + cbv = new CwButtonVo(); + cbd = new CwButtonData(); + list2 = new ArrayList(); + //璇ユ帴鍙e浐瀹氫负to_device锛屽彂閫佺粰璁惧鐢ㄤ簬璇嗗埆瀵瑰簲鍝釜鎸囦护 + cbv.setCmd("to_device"); + //鏃犵敤鍊硷紝绌轰覆 + cbv.setForm(""); + //璁惧鍙 + cbv.setTo(snDetail.getSn()); + //鍙戦佺殑鏁版嵁 + cbd.setCmd("setButtons"); + for (EqButton button : bt_list) { + cwBottonDto = new CwBottonDto(); + cwBottonDto.setIcon(button.getImage()); + list2.add(cwBottonDto); + } + cbd.setValue(list2); + cbv.setData(cbd); + //璋冪敤websocket锛屾帹閫佺粰璁惧 + WebSocketUsers.sendMessageToUsersByText(JSONObject.toJSONString(cbv)); + } + + return AjaxResult.success(); + } + + /** + * 淇敼鎸夐挳淇℃伅 + * + * @param eqButton 鎸夐挳淇℃伅 + * @return 缁撴灉 + */ + @Override + public int updateEqButton(EqButton eqButton) + { + eqButton.setUpdateTime(DateUtils.getNowDate()); + eqButton.setUpdateBy(SecurityUtils.getUsername()); + return eqButtonMapper.updateEqButton(eqButton); + } + + /** + * 鍒犻櫎鎸夐挳淇℃伅淇℃伅 + * + * @param id 鎸夐挳淇℃伅涓婚敭 + * @return 缁撴灉 + */ + @Override + public AjaxResult deleteEqButtonById(Long id,String operName) + { + EqButton eqButton = eqButtonMapper.selectEqButtonById(id); + eqButton.setDelFlag(Constants.DELETE_FLAG_1); + eqButton.setUpdateTime(DateUtils.getNowDate()); + eqButton.setUpdateBy(operName); + int i =eqButtonMapper.updateEqButton(eqButton); + if(i < 1){ + return AjaxResult.error(); + } + //涓嬪彂鏈哄櫒 锛岃幏鍙栨墍鏈夋墦鍗℃満 + List sn_list = EqSnDetailMapper.selectEqSnDetailList(null); + //鑾峰彇鎵鏈夋墦鍗℃寜閽 + List bt_list = eqButtonMapper.selectEqButtonList(null); + //闇瑕佽繑鍥炵殑瀵硅薄 + CwButtonVo cbv = null; + //鍙戦佺殑鏁版嵁 + CwButtonData cbd = null; + //鎸夐挳瀵硅薄 + CwBottonDto cwBottonDto = null; + //鎸夐挳闆嗗悎 + List list2 = null; + for (EqSnDetail snDetail : sn_list) { + cbv = new CwButtonVo(); + cbd = new CwButtonData(); + list2 = new ArrayList(); + //璇ユ帴鍙e浐瀹氫负to_device锛屽彂閫佺粰璁惧鐢ㄤ簬璇嗗埆瀵瑰簲鍝釜鎸囦护 + cbv.setCmd("to_device"); + //鏃犵敤鍊硷紝绌轰覆 + cbv.setForm(""); + //璁惧鍙 + cbv.setTo(snDetail.getSn()); + //鍙戦佺殑鏁版嵁 + cbd.setCmd("setButtons"); + for (EqButton button : bt_list) { + cwBottonDto = new CwBottonDto(); + cwBottonDto.setIcon(button.getImage()); + list2.add(cwBottonDto); + } + cbd.setValue(list2); + cbv.setData(cbd); + //璋冪敤websocket锛屾帹閫佺粰璁惧 + WebSocketUsers.sendMessageToUsersByText(JSONObject.toJSONString(cbv)); + } + return AjaxResult.success(); + } + + /** + * 鏌ヨ鎸夐挳淇℃伅 + * + * @param name 鎸夐挳淇℃伅涓婚敭 + * @return 鎸夐挳淇℃伅 + */ + @Override + public EqButton selectEqButtonByName(String name){ + return eqButtonMapper.selectEqButtonByName(name); + } + +} diff --git a/evo-admin/src/main/java/com/evo/equipment/service/impl/EqImagesServiceImpl.java b/evo-admin/src/main/java/com/evo/equipment/service/impl/EqImagesServiceImpl.java new file mode 100644 index 0000000..b719e1c --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/service/impl/EqImagesServiceImpl.java @@ -0,0 +1,329 @@ +package com.evo.equipment.service.impl; + +import com.alibaba.fastjson2.JSONObject; +import com.evo.equipment.constant.Constants; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.equipment.domain.EqImages; +import com.evo.equipment.domain.vo.StaffData; +import com.evo.equipment.domain.vo.StaffDto; +import com.evo.equipment.mapper.EqImagesMapper; +import com.evo.equipment.service.IEqImagesService; +import com.evo.framework.websocket.WebSocketUsers; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.WorkbookFactory; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; +import java.io.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + +/** + * 鐓х墖绠$悊Service涓氬姟灞傚鐞 + * + * @author chenyj + * @date 2024-08-28 + */ +@Service +public class EqImagesServiceImpl implements IEqImagesService +{ + @Resource + private EqImagesMapper eqImagesMapper; + + + /** + * 鏌ヨ鐓х墖绠$悊鍒楄〃 + * + * @param eqImages 鐓х墖绠$悊 + * @return 鐓х墖绠$悊 + */ + @Override + public List selectEqImagesList(EqImages eqImages) + { + return eqImagesMapper.selectEqImagesList(eqImages); + } + + /** + * 鏂板鐓х墖绠$悊 + * + * @param eqImages 鐓х墖绠$悊 + * @return 缁撴灉 + */ + @Override + public AjaxResult insertEqImages(EqImages eqImages, MultipartFile filePath) + { + //鏍规嵁鍛樺伐ID鏌ヨ鏄惁宸茬粡娣诲姞鐓х墖 + EqImages image = eqImagesMapper.selectEqImagesByStaffId(eqImages.getUserId()); + if(StringUtils.isNotNull(image)){ + return AjaxResult.error(); + } + String originalFilename = filePath.getOriginalFilename(); + //鏍¢獙鏂囦欢鍚庣紑 + String suffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1); // 杈撳嚭 "txt" + //鍒ゆ柇鏄惁鏄浘鐗囨枃浠 + if(!"jpg".equals(suffix)&&!"jpeg".equals(suffix)&&!"png".equals(suffix)){ + return AjaxResult.error("绂佹闈炴硶鏂囦欢涓婁紶锛"); + }else{ + //淇濆瓨鍥剧墖 + InputStream is = null; + FileOutputStream fos = null; + BufferedOutputStream bos = null; + try { + is = filePath.getInputStream(); + byte[] bytes = new byte[is.available()]; + is.read(bytes); + File file = new File(Constants.STAFF_IMAGE_ADDRESS+originalFilename); + fos = new FileOutputStream(file); + bos = new BufferedOutputStream(fos); + bos.write(bytes); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error(); + }finally { + try{ + if(StringUtils.isNotNull(bos)){ + bos.flush(); + bos.close(); + } + if(StringUtils.isNotNull(fos)){ + fos.close(); + } + if(StringUtils.isNotNull(is)){ + is.close(); + } + }catch (Exception e){ + e.printStackTrace(); + } + } + } + /** 涓婁紶鎵撳崱鏈 */ + //闇瑕佽繑鍥炵殑瀵硅薄 + StaffDto cau = new StaffDto(); + //鍙戦佺殑鏁版嵁 + StaffData caud = new StaffData(); + + //瀹氫箟鍏叡鎵撳崱鏈 + List dkj_list = new ArrayList(); + dkj_list.add(Constants.EQ_DEVICE_CODE); //椋熷爞 + dkj_list.add(Constants.EQ_DEVICE_PUBLIC_CODE); //鍏叡 + dkj_list.add(eqImages.getTimeClock()); + + for (String s : dkj_list) { + //璇ユ帴鍙e浐瀹氫负to_device锛屽彂閫佺粰璁惧鐢ㄤ簬璇嗗埆瀵瑰簲鍝釜鎸囦护 + cau.setCmd("to_device"); + //鏃犵敤鍊硷紝绌轰覆 + cau.setForm(""); + //璁惧鍙 + cau.setTo(s); + //缁欐湇鍔$棰勭暀鐨勮ˉ鍏呭瓧娈碉紝璁惧绔笉澶勭悊杩欎釜瀛楁鍐呭銆傝澶囧湪鍝嶅簲杩欐潯鎸囦护鏃跺師鏍疯繑鍥 + cau.setExtra(""); + //鍙戦佺殑鏁版嵁 + caud.setCmd("addUser"); + caud.setUser_id(eqImages.getUserId()+""); + caud.setName(eqImages.getStaffName()); + caud.setTts_name(""); + caud.setFace_template(Constants.STAFF_IMAGE_URL+originalFilename); + caud.setEffect_time(""); + caud.setId_valid(""); + caud.setIc(""); + caud.setPhone(""); + caud.setMode(0); + cau.setData(caud); + //璋冪敤websocket锛屾帹閫佺粰璁惧 + WebSocketUsers.sendMessageToUsersByText(JSONObject.toJSONString(cau)); + } + + //鍐欏叆鏁版嵁搴 + eqImages.setImageUrl(Constants.STAFF_IMAGE_URL+originalFilename); + eqImages.setCreateBy(SecurityUtils.getUsername()); + eqImages.setCreateTime(DateUtils.getNowDate()); + eqImages.setDelFlag("0"); + int i = eqImagesMapper.insertEqImages(eqImages); + if(i < 1){ + return AjaxResult.error(); + } + return AjaxResult.success(); + } + + /** + * 鍒犻櫎鐓х墖绠$悊淇℃伅 + * + * @param id 鐓х墖绠$悊涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteEqImagesById(Long id) + { + EqImages eqImages = eqImagesMapper.selectEqImagesById(id); + //闇瑕佹帹閫佺殑鏁版嵁 + String message = ""; + //闇瑕佽繑鍥炵殑瀵硅薄 + StaffDto cau = new StaffDto(); + //鍙戦佺殑鏁版嵁 + StaffData caud = new StaffData(); + //璇ユ帴鍙e浐瀹氫负to_device锛屽彂閫佺粰璁惧鐢ㄤ簬璇嗗埆瀵瑰簲鍝釜鎸囦护 + cau.setCmd("to_device"); + //鏃犵敤鍊硷紝绌轰覆 + cau.setForm(""); + //璁惧鍙 + cau.setTo(eqImages.getTimeClock()); + //缁欐湇鍔$棰勭暀鐨勮ˉ鍏呭瓧娈碉紝璁惧绔笉澶勭悊杩欎釜瀛楁鍐呭銆傝澶囧湪鍝嶅簲杩欐潯鎸囦护鏃跺師鏍疯繑鍥 + cau.setExtra(""); + //鍙戦佺殑鏁版嵁 + caud.setCmd("delUser"); + caud.setUser_type(0); + caud.setUser_id(eqImages.getUserId()+""); + cau.setData(caud); + //璋冪敤websocket锛屾帹閫佺粰璁惧 + WebSocketUsers.sendMessageToUsersByText(JSONObject.toJSONString(cau)); + //鍒犻櫎鐓х墖 + String img_name = eqImages.getImageUrl().substring(eqImages.getImageUrl().lastIndexOf("/")+1); + File file = new File(Constants.STAFF_IMAGE_ADDRESS + img_name); + if(file.exists()){ + file.delete(); + } + eqImages.setDelFlag("1"); + eqImages.setUpdateTime(DateUtils.getNowDate()); + eqImages.setUpdateBy(SecurityUtils.getUsername()); + return eqImagesMapper.updateEqImages(eqImages); + } + + /** + * 鎵归噺涓婁紶鐓х墖 + * @param filePath + * @return + */ + public AjaxResult uploadBatchFile(MultipartFile filePath){ + //鑾峰彇鏂囦欢鍚嶇О + String originalFilename = filePath.getOriginalFilename(); + //鏍¢獙鏂囦欢鍚庣紑 + String suffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1); // 杈撳嚭 "txt" + //鍒ゆ柇鏄惁鏄浘鐗囨枃浠 + if(!"zip".equals(suffix)){ + return AjaxResult.error("绂佹闈炴硶鏂囦欢涓婁紶锛"); + }else{ + //淇濆瓨鍥剧墖 + InputStream is = null; + FileOutputStream fos = null; + BufferedOutputStream bos = null; + try { + is = filePath.getInputStream(); + byte[] bytes = new byte[is.available()]; + is.read(bytes); + File file = new File(Constants.STAFF_IMAGE_ADDRESS+originalFilename); + fos = new FileOutputStream(file); + bos = new BufferedOutputStream(fos); + bos.write(bytes); + //瑙e帇鍘嬬缉鍖 + ZipInputStream zip = new ZipInputStream(new FileInputStream(Constants.STAFF_IMAGE_ADDRESS+originalFilename)); + ZipEntry entry; + File c_file = new File(Constants.STAFF_IMAGE_ADDRESS_ZIP); + while((entry = zip.getNextEntry()) != null){ + if(entry.isDirectory()){ + File file1 = new File(c_file,entry.toString()); + }else{ + FileOutputStream filefos = new FileOutputStream(new File(c_file,entry.toString())); + int b; + while ((b = zip.read()) != -1){ + filefos.write(b); + } + //鍏抽棴娴 + filefos.close(); + zip.closeEntry(); + } + } + zip.close(); + //璇诲彇excel鏂囦欢锛屾妸淇℃伅瑙f瀽鐢熸垚鍦板潃 + File files = new File(Constants.STAFF_IMAGE_ADDRESS+"name.xlsx"); + if(!files.exists()){ + files = new File(Constants.STAFF_IMAGE_ADDRESS+"name.xls"); + } + Workbook wb = WorkbookFactory.create(files); + Sheet sheet = wb.getSheetAt(0); + EqImages eqImages = null; + /** 涓婁紶鎵撳崱鏈 */ + //闇瑕佽繑鍥炵殑瀵硅薄 + StaffDto cau = null; + //鍙戦佺殑鏁版嵁 + StaffData caud = null; + + //瀹氫箟鍏叡鎵撳崱鏈 + List dkj_list = null; + + //寰幆鑾峰彇鏁版嵁 + for(int p = 1; p <= sheet.getLastRowNum(); p++){ + //寰楀埌琛 + Row row = sheet.getRow(p); + if(StringUtils.isNotNull(row)){ + dkj_list = new ArrayList(); + dkj_list.add(Constants.EQ_DEVICE_CODE); //椋熷爞 + dkj_list.add(Constants.EQ_DEVICE_PUBLIC_CODE); //鍏叡 + dkj_list.add(row.getCell(4).getStringCellValue()); + cau = new StaffDto(); + caud = new StaffData(); + for (String s : dkj_list) { + //璇ユ帴鍙e浐瀹氫负to_device锛屽彂閫佺粰璁惧鐢ㄤ簬璇嗗埆瀵瑰簲鍝釜鎸囦护 + cau.setCmd("to_device"); + //鏃犵敤鍊硷紝绌轰覆 + cau.setForm(""); + //璁惧鍙 + cau.setTo(s); + //缁欐湇鍔$棰勭暀鐨勮ˉ鍏呭瓧娈碉紝璁惧绔笉澶勭悊杩欎釜瀛楁鍐呭銆傝澶囧湪鍝嶅簲杩欐潯鎸囦护鏃跺師鏍疯繑鍥 + cau.setExtra(""); + //鍙戦佺殑鏁版嵁 + caud.setCmd("addUser"); + caud.setUser_id(row.getCell(0).getNumericCellValue()+""); + caud.setName(row.getCell(1).getStringCellValue()); + caud.setTts_name(""); + caud.setFace_template(Constants.STAFF_IMAGE_URL+row.getCell(2).getStringCellValue()); + caud.setEffect_time(""); + caud.setId_valid(""); + caud.setIc(""); + caud.setPhone(""); + caud.setMode(0); + cau.setData(caud); + //璋冪敤websocket锛屾帹閫佺粰璁惧 + WebSocketUsers.sendMessageToUsersByText(JSONObject.toJSONString(cau)); + } + eqImages = new EqImages(); + Double formatString = row.getCell(0).getNumericCellValue(); + eqImages.setUserId(formatString.longValue()); + eqImages.setStaffName(row.getCell(1).getStringCellValue()); + eqImages.setImageUrl(Constants.STAFF_IMAGE_URL+row.getCell(2).getStringCellValue()); + eqImages.setDelFlag("0"); + eqImages.setCreateBy(SecurityUtils.getUsername()); + eqImages.setCreateTime(new Date()); + eqImagesMapper.insertEqImages(eqImages); + } + } + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error(); + }finally { + try{ + if(StringUtils.isNotNull(bos)){ + bos.flush(); + bos.close(); + } + if(StringUtils.isNotNull(fos)){ + fos.close(); + } + if(StringUtils.isNotNull(is)){ + is.close(); + } + }catch (Exception e){ + e.printStackTrace(); + } + } + } + return AjaxResult.success(); + } +} diff --git a/evo-admin/src/main/java/com/evo/equipment/service/impl/EqSnDetailServiceImpl.java b/evo-admin/src/main/java/com/evo/equipment/service/impl/EqSnDetailServiceImpl.java new file mode 100644 index 0000000..677afb1 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/service/impl/EqSnDetailServiceImpl.java @@ -0,0 +1,84 @@ +package com.evo.equipment.service.impl; + +import com.evo.common.constant.Constants; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.StringUtils; +import com.evo.equipment.domain.EqSnDetail; +import com.evo.equipment.mapper.EqSnDetailMapper; +import com.evo.equipment.service.IEqSnDetailService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 鑰冨嫟璁惧淇℃伅Service涓氬姟灞傚鐞 + * + * @author chenyj + * @date 2024-08-07 + */ +@Service +public class EqSnDetailServiceImpl implements IEqSnDetailService +{ + @Resource + private EqSnDetailMapper EqSnDetailMapper; + + /** + * 鏌ヨ鑰冨嫟璁惧淇℃伅鍒楄〃 + * + * @param EqSnDetail 鑰冨嫟璁惧淇℃伅 + * @return 鑰冨嫟璁惧淇℃伅 + */ + @Override + public List selectEqSnDetailList(EqSnDetail EqSnDetail) + { + return EqSnDetailMapper.selectEqSnDetailList(EqSnDetail); + } + + /** + * 鏂板鑰冨嫟璁惧淇℃伅 + * + * @param EqSnDetail 鑰冨嫟璁惧淇℃伅 + * @return 缁撴灉 + */ + @Override + public AjaxResult insertEqSnDetail(EqSnDetail EqSnDetail) + { + //鍒ゆ柇璁惧鏄惁娣诲姞 + EqSnDetail sbSn = EqSnDetailMapper.selectEqSnDetailBySn(EqSnDetail.getSn()); + if(StringUtils.isNotNull(sbSn)){ + return AjaxResult.error(); + } + EqSnDetail.setCreateTime(DateUtils.getNowDate()); + EqSnDetail.setDelFlag(Constants.DELETE_FLAG_0); + int i = EqSnDetailMapper.insertEqSnDetail(EqSnDetail); + if(i < 1){ + return AjaxResult.error(); + } + return AjaxResult.success(); + } + + /** + * 淇敼鑰冨嫟璁惧淇℃伅 + * + * @param EqSnDetail 鑰冨嫟璁惧淇℃伅 + * @return 缁撴灉 + */ + @Override + public int updateEqSnDetail(EqSnDetail EqSnDetail) + { + EqSnDetail.setUpdateTime(DateUtils.getNowDate()); + return EqSnDetailMapper.updateEqSnDetail(EqSnDetail); + } + + /** + * 鏍规嵁璁惧缂栧彿鏌ヨ璁惧 + * @param sn + * @return + */ + @Override + public EqSnDetail selectEqSnDetailBySn(String sn){ + return EqSnDetailMapper.selectEqSnDetailBySn(sn); + } +} diff --git a/evo-admin/src/main/java/com/evo/equipment/service/impl/EqStatusTimeServiceImpl.java b/evo-admin/src/main/java/com/evo/equipment/service/impl/EqStatusTimeServiceImpl.java new file mode 100644 index 0000000..d31e582 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/equipment/service/impl/EqStatusTimeServiceImpl.java @@ -0,0 +1,155 @@ +package com.evo.equipment.service.impl; + +import com.alibaba.fastjson2.JSONObject; +import com.evo.common.constant.Constants; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.StringUtils; +import com.evo.equipment.domain.EqSnDetail; +import com.evo.equipment.domain.EqStatusTime; +import com.evo.equipment.domain.vo.RzStatusTimeData; +import com.evo.equipment.domain.vo.RzStatusTimeVo; +import com.evo.equipment.mapper.EqSnDetailMapper; +import com.evo.equipment.mapper.EqStatusTimeMapper; +import com.evo.equipment.service.IEqStatusTimeService; +import com.evo.framework.websocket.WebSocketUsers; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.List; + +/** + * 鐘舵佹椂闂碨ervice涓氬姟灞傚鐞 + * + * @author chenyj + * @date 2024-08-19 + */ +@Service +public class EqStatusTimeServiceImpl implements IEqStatusTimeService +{ + @Resource + private EqStatusTimeMapper eqStatusTimeMapper; + @Resource + private EqSnDetailMapper EqSnDetailMapper; //璁惧淇℃伅 + + /** + * 鏌ヨ鐘舵佹椂闂 + * + * @param id 鐘舵佹椂闂翠富閿 + * @return 鐘舵佹椂闂 + */ + @Override + public EqStatusTime selectEqStatusTimeById(Long id) + { + return eqStatusTimeMapper.selectEqStatusTimeById(id); + } + + /** + * 鏌ヨ鐘舵佹椂闂村垪琛 + * + * @param eqStatusTime 鐘舵佹椂闂 + * @return 鐘舵佹椂闂 + */ + @Override + public List selectEqStatusTimeList(EqStatusTime eqStatusTime) + { + return eqStatusTimeMapper.selectEqStatusTimeList(eqStatusTime); + } + + /** + * 鏂板鐘舵佹椂闂 + * + * @param eqStatusTime 鐘舵佹椂闂 + * @return 缁撴灉 + */ + @Override + public AjaxResult insertEqStatusTime(EqStatusTime eqStatusTime) + { + EqStatusTime stime = eqStatusTimeMapper.selectEqStatusTimeByStatus(eqStatusTime.getStatus()); + if(StringUtils.isNotNull(stime)){ + return AjaxResult.error(); + } + //鍙戦佷俊鎭埌鏈哄櫒 + sendMessageToDevice(eqStatusTime); + eqStatusTime.setCreateTime(DateUtils.getNowDate()); + eqStatusTime.setDelFlag(Constants.DELETE_FLAG_0); + int i = eqStatusTimeMapper.insertEqStatusTime(eqStatusTime); + if(i < 1){ + return AjaxResult.error(); + } + return AjaxResult.success(); + } + + /** + * 淇敼鐘舵佹椂闂 + * + * @param eqStatusTime 鐘舵佹椂闂 + * @return 缁撴灉 + */ + @Override + public int updateEqStatusTime(EqStatusTime eqStatusTime) + { + //鍒ゆ柇涓嶆槸鍒犻櫎鎵ц + if(Constants.DELETE_FLAG_0.equals(eqStatusTime.getDelFlag())){ + //鍙戦佷俊鎭埌鏈哄櫒 + sendMessageToDevice(eqStatusTime); + } + eqStatusTime.setUpdateTime(DateUtils.getNowDate()); + return eqStatusTimeMapper.updateEqStatusTime(eqStatusTime); + } + + /** + * 鍒犻櫎鐘舵佹椂闂翠俊鎭 + * + * @param id 鐘舵佹椂闂翠富閿 + * @return 缁撴灉 + */ + @Override + public int deleteEqStatusTimeById(Long id,String operName) + { + EqStatusTime eqStatusTime = eqStatusTimeMapper.selectEqStatusTimeById(id); + eqStatusTime.setDelFlag(Constants.DELETE_FLAG_1); + eqStatusTime.setUpdateBy(operName); + return updateEqStatusTime(eqStatusTime); + } + + /** + * 鍙戦佺姸鎬佷俊鎭埌鏈哄櫒 + * @param eqStatusTime + */ + private void sendMessageToDevice(EqStatusTime eqStatusTime){ + //闇瑕佽繑鍥炵殑瀵硅薄 + RzStatusTimeVo cttv = new RzStatusTimeVo(); + //鍙戦佺殑鏁版嵁 + RzStatusTimeData cttd = new RzStatusTimeData(); + //鑾峰彇鎵鏈夎澶 + List list = EqSnDetailMapper.selectEqSnDetailList(null); + for (EqSnDetail eqSnDetail : list) { + //璇ユ帴鍙e浐瀹氫负to_device锛屽彂閫佺粰璁惧鐢ㄤ簬璇嗗埆瀵瑰簲鍝釜鎸囦护 + cttv.setCmd("to_device"); + //鏃犵敤鍊硷紝绌轰覆 + cttv.setForm(""); + //璁惧鍙 + cttv.setTo(eqSnDetail.getSn()); + //鍙戦佺殑鏁版嵁 + cttd.setCmd("setTimeout"); + if("寰呮満鐘舵".equals(eqStatusTime.getStatus())){ + cttd.setType_1(eqStatusTime.getTime().intValue()); + }else if("浜鸿劯璇嗗埆鐘舵".equals(eqStatusTime.getStatus())){ + cttd.setType_2(eqStatusTime.getTime().intValue()); + }else if("鍔熻兘閫夋嫨鐘舵".equals(eqStatusTime.getStatus())){ + cttd.setType_3(eqStatusTime.getTime().intValue()); + }else if("鎵撳崱绛夊緟鐘舵".equals(eqStatusTime.getStatus())){ + cttd.setType_4(eqStatusTime.getTime().intValue()); + }else if("鎵撳崱瀹屾垚鐘舵".equals(eqStatusTime.getStatus())){ + cttd.setType_5(eqStatusTime.getTime().intValue()); + }else if("鎵撳崱澶辫触鐘舵".equals(eqStatusTime.getStatus())){ + cttd.setType_6(eqStatusTime.getTime().intValue()); + }else{ + cttd.setType_7(eqStatusTime.getTime().intValue()); + } + cttv.setData(cttd); + //璋冪敤websocket锛屾帹閫佺粰璁惧 + WebSocketUsers.sendMessageToUsersByText(JSONObject.toJSONString(cttv)); + } + } +} diff --git a/evo-admin/src/main/java/com/evo/finance/controller/RzSalaryDetailController.java b/evo-admin/src/main/java/com/evo/finance/controller/RzSalaryDetailController.java new file mode 100644 index 0000000..4260a1b --- /dev/null +++ b/evo-admin/src/main/java/com/evo/finance/controller/RzSalaryDetailController.java @@ -0,0 +1,495 @@ +package com.evo.finance.controller; + +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; +import com.evo.common.constant.Constants; +import com.evo.common.core.domain.entity.SysDept; +import com.evo.common.core.domain.entity.SysDictData; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.poi.ExcelUtilSs; +import com.evo.finance.domain.vo.SalaryVo; +import com.evo.system.mapper.SysDictDataMapper; +import com.evo.system.service.ISysDeptService; +import org.springframework.beans.BeanUtils; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.enums.BusinessType; +import com.evo.finance.domain.RzSalaryDetail; +import com.evo.finance.service.IRzSalaryDetailService; +import com.evo.common.core.page.TableDataInfo; +import javax.annotation.Resource; + +/** + * 宸ヨ祫璇︽儏Controller + * + * @author evo + * @date 2024-11-26 + */ +@RestController +@RequestMapping("/finance/financeDetail") +public class RzSalaryDetailController extends BaseController +{ + @Autowired + private IRzSalaryDetailService rzSalaryDetailService; + @Autowired + private ISysDeptService deptService; //閮ㄩ棬 + @Resource + private SysDictDataMapper sysDictDataMapper; //鏁版嵁瀛楀吀 + + /** + * 鏌ヨ宸ヨ祫璇︽儏鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('finance:financeDetail:list')") + @GetMapping("/list") + public TableDataInfo list(RzSalaryDetail rzSalaryDetail) + { + startPage(); + List list = rzSalaryDetailService.selectRzSalaryDetailList(rzSalaryDetail); + return getDataTable(list); + } + + /** + * 鑾峰彇宸ヨ祫璇︽儏璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('finance:financeDetail:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(rzSalaryDetailService.selectRzSalaryDetailById(id)); + } + + /** + * 鏂板宸ヨ祫璇︽儏 + */ + @PreAuthorize("@ss.hasPermi('finance:financeDetail:add')") + @Log(title = "宸ヨ祫璇︽儏", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody RzSalaryDetail rzSalaryDetail) + { + return rzSalaryDetailService.insertRzSalaryDetail(rzSalaryDetail); + } + + /** + * 淇敼宸ヨ祫璇︽儏 + */ + @PreAuthorize("@ss.hasPermi('finance:financeDetail:edit')") + @Log(title = "宸ヨ祫璇︽儏", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody RzSalaryDetail rzSalaryDetail) + { + return toAjax(rzSalaryDetailService.updateRzSalaryDetail(rzSalaryDetail)); + } + + /** + * 鍒犻櫎宸ヨ祫璇︽儏 + */ + @PreAuthorize("@ss.hasPermi('finance:financeDetail:remove')") + @Log(title = "宸ヨ祫璇︽儏", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public AjaxResult remove(@PathVariable Long id) + { + return toAjax(rzSalaryDetailService.deleteRzSalaryDetailById(id)); + } + + /** + * 瀵煎嚭宸ヨ祫璇︽儏鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('finance:financeDetail:export')") + @Log(title = "宸ヨ祫璇︽儏", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public AjaxResult export(RzSalaryDetail rzSalaryDetail) + { + ExcelUtilSs util = new ExcelUtilSs(SalaryVo.class); + //鍒涘缓鎬昏〃 + List list = new ArrayList(); + //鍒涘缓鍚勪釜鍏徃鐨勬暟鎹 + List> lists = new ArrayList<>(); + //鍒涘缓鍚勪釜閮ㄩ棬sheetname闆嗗悎 + List sheetNameList = new ArrayList<>(); + //姹囨昏〃琛ㄥご + String title = new SimpleDateFormat("yyyy-MM").format(rzSalaryDetail.getMonth())+"鏈堝伐璧勬眹鎬昏〃"; + //鑾峰彇鎵鏈夌殑鏈灏忕嫭绔嬮儴闂 + List dept_list = deptService.queryAllDeptForMin(); + //鍛樺伐宸ヨ祫淇℃伅 + SalaryVo salaryVo = null; + //宸ヨ祫鏁版嵁杞寲鐨勪繚瀛 + List list0 =new ArrayList(); + for (SysDept sysDept : dept_list) { + sheetNameList.add(sysDept.getDeptName()); + //閮ㄩ棬灏忚 + SalaryVo xj_salaryVo = new SalaryVo(); + xj_salaryVo.setName("灏忚锛"); + //鏌ヨ閮ㄩ棬涓嬬殑鏁版嵁 + List pay_list = rzSalaryDetailService.selectSalaryDetailByDeptId(sysDept.getDeptId(),rzSalaryDetail.getMonth()); + for (RzSalaryDetail salaryDetail : pay_list) { + salaryVo = new SalaryVo(); + if(StringUtils.isNull(xj_salaryVo.getBasicSalary())){ + xj_salaryVo.setBasicSalary(new BigDecimal("0.00")); + } + xj_salaryVo.setBasicSalary(xj_salaryVo.getBasicSalary().add(salaryDetail.getBasicSalary())); + if(StringUtils.isNull(xj_salaryVo.getOvertimeSalary())){ + xj_salaryVo.setOvertimeSalary(new BigDecimal("0.00")); + } + xj_salaryVo.setOvertimeSalary(xj_salaryVo.getOvertimeSalary().add(salaryDetail.getOvertimeSalary())); + if(StringUtils.isNull(xj_salaryVo.getLevelSubsidies())){ + xj_salaryVo.setLevelSubsidies(new BigDecimal("0.00")); + } + xj_salaryVo.setLevelSubsidies(xj_salaryVo.getLevelSubsidies().add(salaryDetail.getLevelSubsidies())); + if(StringUtils.isNull(xj_salaryVo.getContractSubsidies())){ + xj_salaryVo.setContractSubsidies(new BigDecimal("0.00")); + } + xj_salaryVo.setContractSubsidies(xj_salaryVo.getContractSubsidies().add(salaryDetail.getContractSubsidies())); + if(StringUtils.isNull(xj_salaryVo.getSenioritySalary())){ + xj_salaryVo.setSenioritySalary(new BigDecimal("0.00")); + } + xj_salaryVo.setSenioritySalary(xj_salaryVo.getSenioritySalary().add(salaryDetail.getSenioritySalary())); + if(StringUtils.isNull(xj_salaryVo.getSocialSubsidies())){ + xj_salaryVo.setSocialSubsidies(new BigDecimal("0.00")); + } + xj_salaryVo.setSocialSubsidies(xj_salaryVo.getSocialSubsidies().add(salaryDetail.getSocialSubsidies())); + if(StringUtils.isNull(xj_salaryVo.getFullSubsidies())){ + xj_salaryVo.setFullSubsidies(new BigDecimal("0.00")); + } + xj_salaryVo.setFullSubsidies(xj_salaryVo.getFullSubsidies().add(salaryDetail.getFullSubsidies())); + if(StringUtils.isNull(xj_salaryVo.getNightSubsidies())){ + xj_salaryVo.setNightSubsidies(new BigDecimal("0.00")); + } + xj_salaryVo.setNightSubsidies(xj_salaryVo.getNightSubsidies().add(salaryDetail.getNightSubsidies())); + if(StringUtils.isNull(xj_salaryVo.getDinnerSubsidies())){ + xj_salaryVo.setDinnerSubsidies(new BigDecimal("0.00")); + } + xj_salaryVo.setDinnerSubsidies(xj_salaryVo.getDinnerSubsidies().add(salaryDetail.getDinnerSubsidies())); + if(StringUtils.isNull(xj_salaryVo.getSubsidyOrBonus())){ + xj_salaryVo.setSubsidyOrBonus(new BigDecimal("0.00")); + } + xj_salaryVo.setSubsidyOrBonus(xj_salaryVo.getSubsidyOrBonus().add(salaryDetail.getSubsidyOrBonus())); + if(StringUtils.isNull(xj_salaryVo.getAbsenteeismSalary())){ + xj_salaryVo.setAbsenteeismSalary(new BigDecimal("0.00")); + } + xj_salaryVo.setAbsenteeismSalary(xj_salaryVo.getAbsenteeismSalary().add(salaryDetail.getAbsenteeismSalary())); + if(StringUtils.isNull(xj_salaryVo.getAbsenteeismSubsidies())){ + xj_salaryVo.setAbsenteeismSubsidies(new BigDecimal("0.00")); + } + xj_salaryVo.setAbsenteeismSubsidies(xj_salaryVo.getAbsenteeismSubsidies().add(salaryDetail.getAbsenteeismSubsidies())); + if(StringUtils.isNull(xj_salaryVo.getMealFee())){ + xj_salaryVo.setMealFee(new BigDecimal("0.00")); + } + xj_salaryVo.setMealFee(xj_salaryVo.getMealFee().add(salaryDetail.getMealFee())); + if(StringUtils.isNull(xj_salaryVo.getDeductions())){ + xj_salaryVo.setDeductions(new BigDecimal("0.00")); + } + xj_salaryVo.setDeductions(xj_salaryVo.getDeductions().add(salaryDetail.getDeductions())); + if(StringUtils.isNull(xj_salaryVo.getSalary())){ + xj_salaryVo.setSalary(new BigDecimal("0.00")); + } + xj_salaryVo.setSalary(xj_salaryVo.getSalary().add(salaryDetail.getSalary())); + if(StringUtils.isNull(xj_salaryVo.getPayInsurance())){ + xj_salaryVo.setPayInsurance(new BigDecimal("0.00")); + } + xj_salaryVo.setPayInsurance(xj_salaryVo.getPayInsurance().add(salaryDetail.getPayInsurance())); + if(StringUtils.isNull(xj_salaryVo.getSalaryBeforeTax())){ + xj_salaryVo.setSalaryBeforeTax(new BigDecimal("0.00")); + } + xj_salaryVo.setSalaryBeforeTax(xj_salaryVo.getSalaryBeforeTax().add(salaryDetail.getSalaryBeforeTax())); + if(StringUtils.isNull(xj_salaryVo.getTotalWages())){ + xj_salaryVo.setTotalWages(new BigDecimal("0.00")); + } + xj_salaryVo.setTotalWages(xj_salaryVo.getTotalWages().add(salaryDetail.getTotalWages())); + if(StringUtils.isNull(xj_salaryVo.getAnnualExemptionAmount())){ + xj_salaryVo.setAnnualExemptionAmount(new BigDecimal("0.00")); + } + xj_salaryVo.setAnnualExemptionAmount(xj_salaryVo.getAnnualExemptionAmount().add(salaryDetail.getAnnualExemptionAmount())); + if(StringUtils.isNull(xj_salaryVo.getSpecialDeduction())){ + xj_salaryVo.setSpecialDeduction(new BigDecimal("0.00")); + } + xj_salaryVo.setSpecialDeduction(xj_salaryVo.getSpecialDeduction().add(salaryDetail.getSpecialDeduction())); + if(StringUtils.isNull(xj_salaryVo.getSlowDownTheDeduction())){ + xj_salaryVo.setSlowDownTheDeduction(new BigDecimal("0.00")); + } + xj_salaryVo.setSlowDownTheDeduction(xj_salaryVo.getSlowDownTheDeduction().add(salaryDetail.getSlowDownTheDeduction())); + if(StringUtils.isNull(xj_salaryVo.getAggregatePersonalIncomeTax())){ + xj_salaryVo.setAggregatePersonalIncomeTax(new BigDecimal("0.00")); + } + xj_salaryVo.setAggregatePersonalIncomeTax(xj_salaryVo.getAggregatePersonalIncomeTax().add(salaryDetail.getAggregatePersonalIncomeTax())); + if(StringUtils.isNull(xj_salaryVo.getTaxPayable())){ + xj_salaryVo.setTaxPayable(new BigDecimal("0.00")); + } + xj_salaryVo.setTaxPayable(xj_salaryVo.getTaxPayable().add(salaryDetail.getTaxPayable())); + if(StringUtils.isNull(xj_salaryVo.getNetPayroll())){ + xj_salaryVo.setNetPayroll(new BigDecimal("0.00")); + } + xj_salaryVo.setNetPayroll(xj_salaryVo.getNetPayroll().add(salaryDetail.getNetPayroll())); + BeanUtils.copyProperties(salaryDetail, salaryVo); + salaryVo.setDeptName(sysDept.getDeptName()); + list0.add(salaryVo); + } + list0.add(xj_salaryVo); + lists.add(list0); + list.add(xj_salaryVo); + } + //璁$畻浼婄壒鎬昏鏁版嵁 + SalaryVo gj_salaryVo = new SalaryVo(); + for (SalaryVo salaryVoz : list) { + if(StringUtils.isNull(gj_salaryVo.getBasicSalary())){ + gj_salaryVo.setBasicSalary(new BigDecimal("0.00")); + } + gj_salaryVo.setBasicSalary(gj_salaryVo.getBasicSalary().add(salaryVoz.getBasicSalary())); + if(StringUtils.isNull(gj_salaryVo.getOvertimeSalary())){ + gj_salaryVo.setOvertimeSalary(new BigDecimal("0.00")); + } + gj_salaryVo.setOvertimeSalary(gj_salaryVo.getOvertimeSalary().add(salaryVoz.getOvertimeSalary())); + if(StringUtils.isNull(gj_salaryVo.getLevelSubsidies())){ + gj_salaryVo.setLevelSubsidies(new BigDecimal("0.00")); + } + gj_salaryVo.setLevelSubsidies(gj_salaryVo.getLevelSubsidies().add(salaryVoz.getLevelSubsidies())); + if(StringUtils.isNull(gj_salaryVo.getContractSubsidies())){ + gj_salaryVo.setContractSubsidies(new BigDecimal("0.00")); + } + gj_salaryVo.setContractSubsidies(gj_salaryVo.getContractSubsidies().add(salaryVoz.getContractSubsidies())); + if(StringUtils.isNull(gj_salaryVo.getSenioritySalary())){ + gj_salaryVo.setSenioritySalary(new BigDecimal("0.00")); + } + gj_salaryVo.setSenioritySalary(gj_salaryVo.getSenioritySalary().add(salaryVoz.getSenioritySalary())); + if(StringUtils.isNull(gj_salaryVo.getSocialSubsidies())){ + gj_salaryVo.setSocialSubsidies(new BigDecimal("0.00")); + } + gj_salaryVo.setSocialSubsidies(gj_salaryVo.getSocialSubsidies().add(salaryVoz.getSocialSubsidies())); + if(StringUtils.isNull(gj_salaryVo.getFullSubsidies())){ + gj_salaryVo.setFullSubsidies(new BigDecimal("0.00")); + } + gj_salaryVo.setFullSubsidies(gj_salaryVo.getFullSubsidies().add(salaryVoz.getFullSubsidies())); + if(StringUtils.isNull(gj_salaryVo.getNightSubsidies())){ + gj_salaryVo.setNightSubsidies(new BigDecimal("0.00")); + } + gj_salaryVo.setNightSubsidies(gj_salaryVo.getNightSubsidies().add(salaryVoz.getNightSubsidies())); + if(StringUtils.isNull(gj_salaryVo.getDinnerSubsidies())){ + gj_salaryVo.setDinnerSubsidies(new BigDecimal("0.00")); + } + gj_salaryVo.setDinnerSubsidies(gj_salaryVo.getDinnerSubsidies().add(salaryVoz.getDinnerSubsidies())); + if(StringUtils.isNull(gj_salaryVo.getSubsidyOrBonus())){ + gj_salaryVo.setSubsidyOrBonus(new BigDecimal("0.00")); + } + gj_salaryVo.setSubsidyOrBonus(gj_salaryVo.getSubsidyOrBonus().add(salaryVoz.getSubsidyOrBonus())); + if(StringUtils.isNull(gj_salaryVo.getAbsenteeismSalary())){ + gj_salaryVo.setAbsenteeismSalary(new BigDecimal("0.00")); + } + gj_salaryVo.setAbsenteeismSalary(gj_salaryVo.getAbsenteeismSalary().add(salaryVoz.getAbsenteeismSalary())); + if(StringUtils.isNull(gj_salaryVo.getAbsenteeismSubsidies())){ + gj_salaryVo.setAbsenteeismSubsidies(new BigDecimal("0.00")); + } + gj_salaryVo.setAbsenteeismSubsidies(gj_salaryVo.getAbsenteeismSubsidies().add(salaryVoz.getAbsenteeismSubsidies())); + if(StringUtils.isNull(gj_salaryVo.getMealFee())){ + gj_salaryVo.setMealFee(new BigDecimal("0.00")); + } + gj_salaryVo.setMealFee(gj_salaryVo.getMealFee().add(salaryVoz.getMealFee())); + if(StringUtils.isNull(gj_salaryVo.getDeductions())){ + gj_salaryVo.setDeductions(new BigDecimal("0.00")); + } + gj_salaryVo.setDeductions(gj_salaryVo.getDeductions().add(salaryVoz.getDeductions())); + if(StringUtils.isNull(gj_salaryVo.getSalary())){ + gj_salaryVo.setSalary(new BigDecimal("0.00")); + } + gj_salaryVo.setSalary(gj_salaryVo.getSalary().add(salaryVoz.getSalary())); + if(StringUtils.isNull(gj_salaryVo.getPayInsurance())){ + gj_salaryVo.setPayInsurance(new BigDecimal("0.00")); + } + gj_salaryVo.setPayInsurance(gj_salaryVo.getPayInsurance().add(salaryVoz.getPayInsurance())); + if(StringUtils.isNull(gj_salaryVo.getSalaryBeforeTax())){ + gj_salaryVo.setSalaryBeforeTax(new BigDecimal("0.00")); + } + gj_salaryVo.setSalaryBeforeTax(gj_salaryVo.getSalaryBeforeTax().add(salaryVoz.getSalaryBeforeTax())); + if(StringUtils.isNull(gj_salaryVo.getTotalWages())){ + gj_salaryVo.setTotalWages(new BigDecimal("0.00")); + } + gj_salaryVo.setTotalWages(gj_salaryVo.getTotalWages().add(salaryVoz.getTotalWages())); + if(StringUtils.isNull(gj_salaryVo.getAnnualExemptionAmount())){ + gj_salaryVo.setAnnualExemptionAmount(new BigDecimal("0.00")); + } + gj_salaryVo.setAnnualExemptionAmount(gj_salaryVo.getAnnualExemptionAmount().add(salaryVoz.getAnnualExemptionAmount())); + if(StringUtils.isNull(gj_salaryVo.getSpecialDeduction())){ + gj_salaryVo.setSpecialDeduction(new BigDecimal("0.00")); + } + gj_salaryVo.setSpecialDeduction(gj_salaryVo.getSpecialDeduction().add(salaryVoz.getSpecialDeduction())); + if(StringUtils.isNull(gj_salaryVo.getSlowDownTheDeduction())){ + gj_salaryVo.setSlowDownTheDeduction(new BigDecimal("0.00")); + } + gj_salaryVo.setSlowDownTheDeduction(gj_salaryVo.getSlowDownTheDeduction().add(salaryVoz.getSlowDownTheDeduction())); + if(StringUtils.isNull(gj_salaryVo.getAggregatePersonalIncomeTax())){ + gj_salaryVo.setAggregatePersonalIncomeTax(new BigDecimal("0.00")); + } + gj_salaryVo.setAggregatePersonalIncomeTax(gj_salaryVo.getAggregatePersonalIncomeTax().add(salaryVoz.getAggregatePersonalIncomeTax())); + if(StringUtils.isNull(gj_salaryVo.getTaxPayable())){ + gj_salaryVo.setTaxPayable(new BigDecimal("0.00")); + } + gj_salaryVo.setTaxPayable(gj_salaryVo.getTaxPayable().add(salaryVoz.getTaxPayable())); + if(StringUtils.isNull(gj_salaryVo.getNetPayroll())){ + gj_salaryVo.setNetPayroll(new BigDecimal("0.00")); + } + gj_salaryVo.setNetPayroll(gj_salaryVo.getNetPayroll().add(salaryVoz.getNetPayroll())); + } + gj_salaryVo.setName("浼婄壒鎬昏锛"); + list.add(gj_salaryVo); + + //鍒涘缓鎬昏〃鐨勫璞 + SalaryVo payRollZong = new SalaryVo(); + payRollZong.setName("鎬昏锛"); + BeanUtils.copyProperties(gj_salaryVo, payRollZong); + //鏌ヨ闈炰紛鐗规暟鎹 + List cy_list = sysDictDataMapper.selectDictDataByType(Constants.SYS_COMPANY); + for (SysDictData sysDictData : cy_list) { + if(!"YT".equals(sysDictData.getDictValue())){ + sheetNameList.add(sysDictData.getDictLabel()); + //閮ㄩ棬灏忚 + SalaryVo xj_salaryVo = new SalaryVo(); + xj_salaryVo.setName("灏忚锛"); + //鏌ヨ闈炰紛鐗逛笅鐨勬暟鎹 + List f_list = rzSalaryDetailService.selectSalaryDetailByWbFlag(sysDictData.getDictValue(),rzSalaryDetail.getMonth()); + for (RzSalaryDetail salaryDetail : f_list) { + salaryVo = new SalaryVo(); + if(StringUtils.isNull(xj_salaryVo.getBasicSalary())){ + xj_salaryVo.setBasicSalary(new BigDecimal("0.00")); + } + xj_salaryVo.setBasicSalary(xj_salaryVo.getBasicSalary().add(salaryDetail.getBasicSalary())); + if(StringUtils.isNull(xj_salaryVo.getOvertimeSalary())){ + xj_salaryVo.setOvertimeSalary(new BigDecimal("0.00")); + } + xj_salaryVo.setOvertimeSalary(xj_salaryVo.getOvertimeSalary().add(salaryDetail.getOvertimeSalary())); + if(StringUtils.isNull(xj_salaryVo.getLevelSubsidies())){ + xj_salaryVo.setLevelSubsidies(new BigDecimal("0.00")); + } + xj_salaryVo.setLevelSubsidies(xj_salaryVo.getLevelSubsidies().add(salaryDetail.getLevelSubsidies())); + if(StringUtils.isNull(xj_salaryVo.getContractSubsidies())){ + xj_salaryVo.setContractSubsidies(new BigDecimal("0.00")); + } + xj_salaryVo.setContractSubsidies(xj_salaryVo.getContractSubsidies().add(salaryDetail.getContractSubsidies())); + if(StringUtils.isNull(xj_salaryVo.getSenioritySalary())){ + xj_salaryVo.setSenioritySalary(new BigDecimal("0.00")); + } + xj_salaryVo.setSenioritySalary(xj_salaryVo.getSenioritySalary().add(salaryDetail.getSenioritySalary())); + if(StringUtils.isNull(xj_salaryVo.getSocialSubsidies())){ + xj_salaryVo.setSocialSubsidies(new BigDecimal("0.00")); + } + xj_salaryVo.setSocialSubsidies(xj_salaryVo.getSocialSubsidies().add(salaryDetail.getSocialSubsidies())); + if(StringUtils.isNull(xj_salaryVo.getFullSubsidies())){ + xj_salaryVo.setFullSubsidies(new BigDecimal("0.00")); + } + xj_salaryVo.setFullSubsidies(xj_salaryVo.getFullSubsidies().add(salaryDetail.getFullSubsidies())); + if(StringUtils.isNull(xj_salaryVo.getNightSubsidies())){ + xj_salaryVo.setNightSubsidies(new BigDecimal("0.00")); + } + xj_salaryVo.setNightSubsidies(xj_salaryVo.getNightSubsidies().add(salaryDetail.getNightSubsidies())); + if(StringUtils.isNull(xj_salaryVo.getDinnerSubsidies())){ + xj_salaryVo.setDinnerSubsidies(new BigDecimal("0.00")); + } + xj_salaryVo.setDinnerSubsidies(xj_salaryVo.getDinnerSubsidies().add(salaryDetail.getDinnerSubsidies())); + if(StringUtils.isNull(xj_salaryVo.getSubsidyOrBonus())){ + xj_salaryVo.setSubsidyOrBonus(new BigDecimal("0.00")); + } + xj_salaryVo.setSubsidyOrBonus(xj_salaryVo.getSubsidyOrBonus().add(salaryDetail.getSubsidyOrBonus())); + if(StringUtils.isNull(xj_salaryVo.getAbsenteeismSalary())){ + xj_salaryVo.setAbsenteeismSalary(new BigDecimal("0.00")); + } + xj_salaryVo.setAbsenteeismSalary(xj_salaryVo.getAbsenteeismSalary().add(salaryDetail.getAbsenteeismSalary())); + if(StringUtils.isNull(xj_salaryVo.getAbsenteeismSubsidies())){ + xj_salaryVo.setAbsenteeismSubsidies(new BigDecimal("0.00")); + } + xj_salaryVo.setAbsenteeismSubsidies(xj_salaryVo.getAbsenteeismSubsidies().add(salaryDetail.getAbsenteeismSubsidies())); + if(StringUtils.isNull(xj_salaryVo.getMealFee())){ + xj_salaryVo.setMealFee(new BigDecimal("0.00")); + } + xj_salaryVo.setMealFee(xj_salaryVo.getMealFee().add(salaryDetail.getMealFee())); + if(StringUtils.isNull(xj_salaryVo.getDeductions())){ + xj_salaryVo.setDeductions(new BigDecimal("0.00")); + } + xj_salaryVo.setDeductions(xj_salaryVo.getDeductions().add(salaryDetail.getDeductions())); + if(StringUtils.isNull(xj_salaryVo.getSalary())){ + xj_salaryVo.setSalary(new BigDecimal("0.00")); + } + xj_salaryVo.setSalary(xj_salaryVo.getSalary().add(salaryDetail.getSalary())); + if(StringUtils.isNull(xj_salaryVo.getPayInsurance())){ + xj_salaryVo.setPayInsurance(new BigDecimal("0.00")); + } + xj_salaryVo.setPayInsurance(xj_salaryVo.getPayInsurance().add(salaryDetail.getPayInsurance())); + if(StringUtils.isNull(xj_salaryVo.getSalaryBeforeTax())){ + xj_salaryVo.setSalaryBeforeTax(new BigDecimal("0.00")); + } + xj_salaryVo.setSalaryBeforeTax(xj_salaryVo.getSalaryBeforeTax().add(salaryDetail.getSalaryBeforeTax())); + if(StringUtils.isNull(xj_salaryVo.getTotalWages())){ + xj_salaryVo.setTotalWages(new BigDecimal("0.00")); + } + xj_salaryVo.setTotalWages(xj_salaryVo.getTotalWages().add(salaryDetail.getTotalWages())); + if(StringUtils.isNull(xj_salaryVo.getAnnualExemptionAmount())){ + xj_salaryVo.setAnnualExemptionAmount(new BigDecimal("0.00")); + } + xj_salaryVo.setAnnualExemptionAmount(xj_salaryVo.getAnnualExemptionAmount().add(salaryDetail.getAnnualExemptionAmount())); + if(StringUtils.isNull(xj_salaryVo.getSpecialDeduction())){ + xj_salaryVo.setSpecialDeduction(new BigDecimal("0.00")); + } + xj_salaryVo.setSpecialDeduction(xj_salaryVo.getSpecialDeduction().add(salaryDetail.getSpecialDeduction())); + if(StringUtils.isNull(xj_salaryVo.getSlowDownTheDeduction())){ + xj_salaryVo.setSlowDownTheDeduction(new BigDecimal("0.00")); + } + xj_salaryVo.setSlowDownTheDeduction(xj_salaryVo.getSlowDownTheDeduction().add(salaryDetail.getSlowDownTheDeduction())); + if(StringUtils.isNull(xj_salaryVo.getAggregatePersonalIncomeTax())){ + xj_salaryVo.setAggregatePersonalIncomeTax(new BigDecimal("0.00")); + } + xj_salaryVo.setAggregatePersonalIncomeTax(xj_salaryVo.getAggregatePersonalIncomeTax().add(salaryDetail.getAggregatePersonalIncomeTax())); + if(StringUtils.isNull(xj_salaryVo.getTaxPayable())){ + xj_salaryVo.setTaxPayable(new BigDecimal("0.00")); + } + xj_salaryVo.setTaxPayable(xj_salaryVo.getTaxPayable().add(salaryDetail.getTaxPayable())); + if(StringUtils.isNull(xj_salaryVo.getNetPayroll())){ + xj_salaryVo.setNetPayroll(new BigDecimal("0.00")); + } + xj_salaryVo.setNetPayroll(xj_salaryVo.getNetPayroll().add(salaryDetail.getNetPayroll())); + BeanUtils.copyProperties(salaryDetail, salaryVo); + salaryVo.setDeptName(deptService.selectDeptById(salaryDetail.getDeptId()).getDeptName()); + list0.add(salaryVo); + } + list.add(xj_salaryVo); + payRollZong.setBasicSalary(xj_salaryVo.getBasicSalary().add(payRollZong.getBasicSalary())); + payRollZong.setOvertimeSalary(xj_salaryVo.getOvertimeSalary().add(payRollZong.getOvertimeSalary())); + payRollZong.setLevelSubsidies(xj_salaryVo.getLevelSubsidies().add(payRollZong.getLevelSubsidies())); + payRollZong.setContractSubsidies(xj_salaryVo.getContractSubsidies().add(payRollZong.getContractSubsidies())); + payRollZong.setSenioritySalary(xj_salaryVo.getSenioritySalary().add(payRollZong.getSenioritySalary())); + payRollZong.setSocialSubsidies(xj_salaryVo.getSocialSubsidies().add(payRollZong.getSocialSubsidies())); + payRollZong.setFullSubsidies(xj_salaryVo.getFullSubsidies().add(payRollZong.getFullSubsidies())); + payRollZong.setNightSubsidies(xj_salaryVo.getNightSubsidies().add(payRollZong.getNightSubsidies())); + payRollZong.setDinnerSubsidies(xj_salaryVo.getDinnerSubsidies().add(payRollZong.getDinnerSubsidies())); + payRollZong.setSubsidyOrBonus(xj_salaryVo.getSubsidyOrBonus().add(payRollZong.getSubsidyOrBonus())); + payRollZong.setAbsenteeismSalary(xj_salaryVo.getAbsenteeismSalary().add(payRollZong.getAbsenteeismSalary())); + payRollZong.setAbsenteeismSubsidies(xj_salaryVo.getAbsenteeismSubsidies().add(payRollZong.getAbsenteeismSubsidies())); + payRollZong.setMealFee(xj_salaryVo.getMealFee().add(payRollZong.getMealFee())); + payRollZong.setDeductions(xj_salaryVo.getDeductions().add(payRollZong.getDeductions())); + payRollZong.setSalary(xj_salaryVo.getSalary().add(payRollZong.getSalary())); + payRollZong.setPayInsurance(xj_salaryVo.getPayInsurance().add(payRollZong.getPayInsurance())); + payRollZong.setSalaryBeforeTax(xj_salaryVo.getSalaryBeforeTax().add(payRollZong.getSalaryBeforeTax())); + payRollZong.setTotalWages(xj_salaryVo.getTotalWages().add(payRollZong.getTotalWages())); + payRollZong.setAnnualExemptionAmount(xj_salaryVo.getAnnualExemptionAmount().add(payRollZong.getAnnualExemptionAmount())); + payRollZong.setSpecialDeduction(xj_salaryVo.getSpecialDeduction().add(payRollZong.getSpecialDeduction())); + payRollZong.setSlowDownTheDeduction(xj_salaryVo.getSlowDownTheDeduction().add(payRollZong.getSlowDownTheDeduction())); + payRollZong.setAggregatePersonalIncomeTax(xj_salaryVo.getAggregatePersonalIncomeTax().add(payRollZong.getAggregatePersonalIncomeTax())); + payRollZong.setTaxPayable(xj_salaryVo.getTaxPayable().add(payRollZong.getTaxPayable())); + payRollZong.setNetPayroll(xj_salaryVo.getNetPayroll().add(payRollZong.getNetPayroll())); + } + } + list.add(payRollZong); + //琛ㄥ熬 + String footer = "鍒惰〃: "+"瀹℃牳: "+"缁忕悊绛惧瓧: "+"鎬荤粡鐞嗙瀛: "; + return util.exportExcel(list,lists,"鎬昏〃",sheetNameList,title,footer); + } + +} diff --git a/evo-admin/src/main/java/com/evo/finance/controller/RzSalaryStatisticsController.java b/evo-admin/src/main/java/com/evo/finance/controller/RzSalaryStatisticsController.java new file mode 100644 index 0000000..7ff8dd9 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/finance/controller/RzSalaryStatisticsController.java @@ -0,0 +1,54 @@ +package com.evo.finance.controller; + +import java.util.List; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.enums.BusinessType; +import com.evo.finance.domain.RzSalaryStatistics; +import com.evo.finance.service.IRzSalaryStatisticsService; +import com.evo.common.core.page.TableDataInfo; + +/** + * 宸ヨ祫缁熻Controller + * + * @author evo + * @date 2024-11-26 + */ +@RestController +@RequestMapping("/finance/financeStatistics") +public class RzSalaryStatisticsController extends BaseController +{ + @Autowired + private IRzSalaryStatisticsService rzSalaryStatisticsService; + + /** + * 鏌ヨ宸ヨ祫缁熻鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('finance:financeStatistics:list')") + @GetMapping("/list") + public TableDataInfo list(RzSalaryStatistics rzSalaryStatistics) + { + startPage(); + List list = rzSalaryStatisticsService.selectRzSalaryStatisticsList(rzSalaryStatistics); + return getDataTable(list); + } + + /** + * 鍒犻櫎宸ヨ祫缁熻 + */ + @PreAuthorize("@ss.hasPermi('finance:financeStatistics:remove')") + @Log(title = "宸ヨ祫缁熻", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public AjaxResult remove(@PathVariable Long id) + { + return rzSalaryStatisticsService.deleteRzSalaryStatisticsById(id); + } +} diff --git a/evo-admin/src/main/java/com/evo/finance/domain/RzSalaryDetail.java b/evo-admin/src/main/java/com/evo/finance/domain/RzSalaryDetail.java new file mode 100644 index 0000000..fcf146d --- /dev/null +++ b/evo-admin/src/main/java/com/evo/finance/domain/RzSalaryDetail.java @@ -0,0 +1,662 @@ +package com.evo.finance.domain; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; + +/** + * 宸ヨ祫璇︽儏瀵硅薄 rz_salary_detail + * + * @author evo + * @date 2024-11-26 + */ +public class RzSalaryDetail extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭 */ + private Long id; + + /** 鍛樺伐ID */ + @Excel(name = "鍛樺伐ID") + private Long staffId; + + /** 鍛樺伐濮撳悕 */ + @Excel(name = "鍛樺伐濮撳悕") + private String name; + + /** 宸ヨ祫鏈堜唤 */ + @JsonFormat(pattern = "yyyy-MM") + @Excel(name = "宸ヨ祫鏈堜唤", width = 30, dateFormat = "yyyy-MM") + private Date month; + + /** 鎵灞炲叕鍙 */ + @Excel(name = "鎵灞炲叕鍙") + private String wbFlag; + + /** 閮ㄩ棬鍚嶇О */ + private Long deptId; + @Excel(name = "閮ㄩ棬鍚嶇О") + private String deptName; + /** 鏈堝伐璧 */ + @Excel(name = "鏈堝伐璧") + private BigDecimal monthSalary; + /** 鍩烘湰宸ヨ祫 */ + @Excel(name = "鍩烘湰宸ヨ祫") + private BigDecimal basicSalary; + + /** 宀椾綅宸ヨ祫 */ + @Excel(name = "宀椾綅宸ヨ祫") + private BigDecimal jobSalary; + + /** 鏃ヨ柂 */ + @Excel(name = "鏃ヨ柂") + private BigDecimal dailyWage; + + /** 鏃惰柂 */ + @Excel(name = "鏃惰柂") + private BigDecimal hoursSalary; + + /** 鍔犵彮宸ヨ祫 */ + @Excel(name = "鍔犵彮宸ヨ祫") + private BigDecimal overtimeSalary; + + /** 瀛﹀巻琛ュ姪 */ + @Excel(name = "瀛﹀巻琛ュ姪") + private BigDecimal levelSubsidies; + + /** 鍚堝悓琛ュ姪 */ + @Excel(name = "鍚堝悓琛ュ姪") + private BigDecimal contractSubsidies; + + /** 宸ラ緞宸ヨ祫 */ + @Excel(name = "宸ラ緞宸ヨ祫") + private BigDecimal senioritySalary; + + /** 绀句繚琛ュ姪 */ + @Excel(name = "绀句繚琛ュ姪") + private BigDecimal socialSubsidies; + + /** 鍏ㄥ嫟濂 */ + @Excel(name = "鍏ㄥ嫟濂") + private BigDecimal fullSubsidies; + + @Excel(name = "涓彮琛ュ姪") + private BigDecimal middleSubsidies; + + /** 澶滅彮琛ュ姪 */ + @Excel(name = "澶滅彮琛ュ姪") + private BigDecimal nightSubsidies; + + /** 澶滈琛ュ姪 */ + @Excel(name = "澶滈琛ュ姪") + private BigDecimal dinnerSubsidies; + + /** 鍏朵粬琛ュ姪 */ + @Excel(name = "鍏朵粬琛ュ姪") + private BigDecimal subsidyOrBonus; + + /** 缂哄嫟鎵f */ + @Excel(name = "缂哄嫟鎵f") + private BigDecimal absenteeismSalary; + + /** 琛ュ姪鎵f */ + @Excel(name = "琛ュ姪鎵f") + private BigDecimal absenteeismSubsidies; + + /** 椁愯垂鎵f */ + @Excel(name = "椁愯垂鎵f") + private BigDecimal mealFee; + + /** 鍏朵粬鎵f */ + @Excel(name = "鍏朵粬鎵f") + private BigDecimal deductions; + + /** 搴斿彂宸ヨ祫 */ + @Excel(name = "搴斿彂宸ヨ祫") + private BigDecimal salary; + + /** 浠g即淇濋櫓 */ + @Excel(name = "浠g即淇濋櫓") + private BigDecimal payInsurance; + + /** 鍏昏佷繚闄 */ + @Excel(name = "鍏昏佷繚闄") + private BigDecimal endowmentInsurance; + + /** 鍖荤枟淇濋櫓 */ + @Excel(name = "鍖荤枟淇濋櫓") + private BigDecimal medicalInsurance; + + /** 宸ヤ激淇濋櫓 */ + @Excel(name = "宸ヤ激淇濋櫓") + private BigDecimal employmentInjuryInsurance; + + /** 鐢熻偛淇濋櫓 */ + @Excel(name = "鐢熻偛淇濋櫓") + private BigDecimal maternityInsurance; + + /** 澶变笟淇濋櫓 */ + @Excel(name = "澶变笟淇濋櫓") + private BigDecimal unemploymentInsurance; + + /** 鍏Н閲 */ + @Excel(name = "鍏Н閲") + private BigDecimal accumulationFund; + + /** 绋庡墠宸ヨ祫 */ + @Excel(name = "绋庡墠宸ヨ祫") + private BigDecimal salaryBeforeTax; + + /** 绱宸插彂宸ヨ祫 */ + @Excel(name = "绱宸插彂宸ヨ祫") + private BigDecimal totalWages; + + /** 骞村害鍏嶅緛棰 */ + @Excel(name = "骞村害鍏嶅緛棰") + private BigDecimal annualExemptionAmount; + + /** 绱涓撻」闄勫姞鎵i櫎 */ + @Excel(name = "绱涓撻」闄勫姞鎵i櫎") + private BigDecimal specialDeduction; + + /** 搴旂撼绋庢墍寰楅 */ + @Excel(name = "搴旂撼绋庢墍寰楅") + private BigDecimal taxableIncome; + + /** 绋庣巼 */ + @Excel(name = "绋庣巼") + private BigDecimal taxRate; + + /** 閫熺畻鎵i櫎鏁 */ + @Excel(name = "閫熺畻鎵i櫎鏁") + private BigDecimal slowDownTheDeduction; + + /** 绱宸茬即绋庨 */ + @Excel(name = "绱宸茬即绋庨") + private BigDecimal aggregatePersonalIncomeTax; + + /** 鏈湀搴旂即涓◣ */ + @Excel(name = "鏈湀搴旂即涓◣") + private BigDecimal taxPayable; + + /** 瀹炲彂宸ヨ祫 */ + @Excel(name = "瀹炲彂宸ヨ祫") + private BigDecimal netPayroll; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鍒犻櫎鏍囪瘑 */ + private String delFlag; + + public BigDecimal getMonthSalary() { + return monthSalary; + } + + public void setMonthSalary(BigDecimal monthSalary) { + this.monthSalary = monthSalary; + } + + public BigDecimal getMiddleSubsidies() { + return middleSubsidies; + } + + public void setMiddleSubsidies(BigDecimal middleSubsidies) { + this.middleSubsidies = middleSubsidies; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setStaffId(Long staffId) + { + this.staffId = staffId; + } + + public Long getStaffId() + { + return staffId; + } + public void setName(String name) + { + this.name = name; + } + + public String getName() + { + return name; + } + public void setMonth(Date month) + { + this.month = month; + } + + public Date getMonth() + { + return month; + } + public void setWbFlag(String wbFlag) + { + this.wbFlag = wbFlag; + } + + public String getWbFlag() + { + return wbFlag; + } + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + public Long getDeptId() + { + return deptId; + } + public void setBasicSalary(BigDecimal basicSalary) + { + this.basicSalary = basicSalary; + } + + public BigDecimal getBasicSalary() + { + return basicSalary; + } + public void setJobSalary(BigDecimal jobSalary) + { + this.jobSalary = jobSalary; + } + + public BigDecimal getJobSalary() + { + return jobSalary; + } + public void setDailyWage(BigDecimal dailyWage) + { + this.dailyWage = dailyWage; + } + + public BigDecimal getDailyWage() + { + return dailyWage; + } + public void setHoursSalary(BigDecimal hoursSalary) + { + this.hoursSalary = hoursSalary; + } + + public BigDecimal getHoursSalary() + { + return hoursSalary; + } + public void setOvertimeSalary(BigDecimal overtimeSalary) + { + this.overtimeSalary = overtimeSalary; + } + + public BigDecimal getOvertimeSalary() + { + return overtimeSalary; + } + public void setLevelSubsidies(BigDecimal levelSubsidies) + { + this.levelSubsidies = levelSubsidies; + } + + public BigDecimal getLevelSubsidies() + { + return levelSubsidies; + } + public void setContractSubsidies(BigDecimal contractSubsidies) + { + this.contractSubsidies = contractSubsidies; + } + + public BigDecimal getContractSubsidies() + { + return contractSubsidies; + } + public void setSenioritySalary(BigDecimal senioritySalary) + { + this.senioritySalary = senioritySalary; + } + + public BigDecimal getSenioritySalary() + { + return senioritySalary; + } + public void setSocialSubsidies(BigDecimal socialSubsidies) + { + this.socialSubsidies = socialSubsidies; + } + + public BigDecimal getSocialSubsidies() + { + return socialSubsidies; + } + public void setFullSubsidies(BigDecimal fullSubsidies) + { + this.fullSubsidies = fullSubsidies; + } + + public BigDecimal getFullSubsidies() + { + return fullSubsidies; + } + public void setNightSubsidies(BigDecimal nightSubsidies) + { + this.nightSubsidies = nightSubsidies; + } + + public BigDecimal getNightSubsidies() + { + return nightSubsidies; + } + public void setDinnerSubsidies(BigDecimal dinnerSubsidies) + { + this.dinnerSubsidies = dinnerSubsidies; + } + + public BigDecimal getDinnerSubsidies() + { + return dinnerSubsidies; + } + public void setSubsidyOrBonus(BigDecimal subsidyOrBonus) + { + this.subsidyOrBonus = subsidyOrBonus; + } + + public BigDecimal getSubsidyOrBonus() + { + return subsidyOrBonus; + } + public void setAbsenteeismSalary(BigDecimal absenteeismSalary) + { + this.absenteeismSalary = absenteeismSalary; + } + + public BigDecimal getAbsenteeismSalary() + { + return absenteeismSalary; + } + public void setAbsenteeismSubsidies(BigDecimal absenteeismSubsidies) + { + this.absenteeismSubsidies = absenteeismSubsidies; + } + + public BigDecimal getAbsenteeismSubsidies() + { + return absenteeismSubsidies; + } + public void setMealFee(BigDecimal mealFee) + { + this.mealFee = mealFee; + } + + public BigDecimal getMealFee() + { + return mealFee; + } + public void setDeductions(BigDecimal deductions) + { + this.deductions = deductions; + } + + public BigDecimal getDeductions() + { + return deductions; + } + public void setSalary(BigDecimal salary) + { + this.salary = salary; + } + + public BigDecimal getSalary() + { + return salary; + } + public void setPayInsurance(BigDecimal payInsurance) + { + this.payInsurance = payInsurance; + } + + public BigDecimal getPayInsurance() + { + return payInsurance; + } + public void setEndowmentInsurance(BigDecimal endowmentInsurance) + { + this.endowmentInsurance = endowmentInsurance; + } + + public BigDecimal getEndowmentInsurance() + { + return endowmentInsurance; + } + public void setMedicalInsurance(BigDecimal medicalInsurance) + { + this.medicalInsurance = medicalInsurance; + } + + public BigDecimal getMedicalInsurance() + { + return medicalInsurance; + } + public void setEmploymentInjuryInsurance(BigDecimal employmentInjuryInsurance) + { + this.employmentInjuryInsurance = employmentInjuryInsurance; + } + + public BigDecimal getEmploymentInjuryInsurance() + { + return employmentInjuryInsurance; + } + public void setMaternityInsurance(BigDecimal maternityInsurance) + { + this.maternityInsurance = maternityInsurance; + } + + public BigDecimal getMaternityInsurance() + { + return maternityInsurance; + } + public void setUnemploymentInsurance(BigDecimal unemploymentInsurance) + { + this.unemploymentInsurance = unemploymentInsurance; + } + + public BigDecimal getUnemploymentInsurance() + { + return unemploymentInsurance; + } + public void setAccumulationFund(BigDecimal accumulationFund) + { + this.accumulationFund = accumulationFund; + } + + public BigDecimal getAccumulationFund() + { + return accumulationFund; + } + public void setSalaryBeforeTax(BigDecimal salaryBeforeTax) + { + this.salaryBeforeTax = salaryBeforeTax; + } + + public BigDecimal getSalaryBeforeTax() + { + return salaryBeforeTax; + } + public void setTotalWages(BigDecimal totalWages) + { + this.totalWages = totalWages; + } + + public BigDecimal getTotalWages() + { + return totalWages; + } + public void setAnnualExemptionAmount(BigDecimal annualExemptionAmount) + { + this.annualExemptionAmount = annualExemptionAmount; + } + + public BigDecimal getAnnualExemptionAmount() + { + return annualExemptionAmount; + } + public void setSpecialDeduction(BigDecimal specialDeduction) + { + this.specialDeduction = specialDeduction; + } + + public BigDecimal getSpecialDeduction() + { + return specialDeduction; + } + public void setTaxableIncome(BigDecimal taxableIncome) + { + this.taxableIncome = taxableIncome; + } + + public BigDecimal getTaxableIncome() + { + return taxableIncome; + } + public void setTaxRate(BigDecimal taxRate) + { + this.taxRate = taxRate; + } + + public BigDecimal getTaxRate() + { + return taxRate; + } + public void setSlowDownTheDeduction(BigDecimal slowDownTheDeduction) + { + this.slowDownTheDeduction = slowDownTheDeduction; + } + + public BigDecimal getSlowDownTheDeduction() + { + return slowDownTheDeduction; + } + public void setAggregatePersonalIncomeTax(BigDecimal aggregatePersonalIncomeTax) + { + this.aggregatePersonalIncomeTax = aggregatePersonalIncomeTax; + } + + public BigDecimal getAggregatePersonalIncomeTax() + { + return aggregatePersonalIncomeTax; + } + public void setTaxPayable(BigDecimal taxPayable) + { + this.taxPayable = taxPayable; + } + + public BigDecimal getTaxPayable() + { + return taxPayable; + } + public void setNetPayroll(BigDecimal netPayroll) + { + this.netPayroll = netPayroll; + } + + public BigDecimal getNetPayroll() + { + return netPayroll; + } + public void setRemarks(String remarks) + { + this.remarks = remarks; + } + + public String getRemarks() + { + return remarks; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("staffId", getStaffId()) + .append("name", getName()) + .append("month", getMonth()) + .append("wbFlag", getWbFlag()) + .append("deptId", getDeptId()) + .append("basicSalary", getBasicSalary()) + .append("jobSalary", getJobSalary()) + .append("dailyWage", getDailyWage()) + .append("hoursSalary", getHoursSalary()) + .append("overtimeSalary", getOvertimeSalary()) + .append("levelSubsidies", getLevelSubsidies()) + .append("contractSubsidies", getContractSubsidies()) + .append("senioritySalary", getSenioritySalary()) + .append("socialSubsidies", getSocialSubsidies()) + .append("fullSubsidies", getFullSubsidies()) + .append("nightSubsidies", getNightSubsidies()) + .append("dinnerSubsidies", getDinnerSubsidies()) + .append("subsidyOrBonus", getSubsidyOrBonus()) + .append("absenteeismSalary", getAbsenteeismSalary()) + .append("absenteeismSubsidies", getAbsenteeismSubsidies()) + .append("mealFee", getMealFee()) + .append("deductions", getDeductions()) + .append("salary", getSalary()) + .append("payInsurance", getPayInsurance()) + .append("endowmentInsurance", getEndowmentInsurance()) + .append("medicalInsurance", getMedicalInsurance()) + .append("employmentInjuryInsurance", getEmploymentInjuryInsurance()) + .append("maternityInsurance", getMaternityInsurance()) + .append("unemploymentInsurance", getUnemploymentInsurance()) + .append("accumulationFund", getAccumulationFund()) + .append("salaryBeforeTax", getSalaryBeforeTax()) + .append("totalWages", getTotalWages()) + .append("annualExemptionAmount", getAnnualExemptionAmount()) + .append("specialDeduction", getSpecialDeduction()) + .append("taxableIncome", getTaxableIncome()) + .append("taxRate", getTaxRate()) + .append("slowDownTheDeduction", getSlowDownTheDeduction()) + .append("aggregatePersonalIncomeTax", getAggregatePersonalIncomeTax()) + .append("taxPayable", getTaxPayable()) + .append("netPayroll", getNetPayroll()) + .append("remarks", getRemarks()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/finance/domain/RzSalaryStatistics.java b/evo-admin/src/main/java/com/evo/finance/domain/RzSalaryStatistics.java new file mode 100644 index 0000000..24ae9e1 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/finance/domain/RzSalaryStatistics.java @@ -0,0 +1,113 @@ +package com.evo.finance.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; + +/** + * 宸ヨ祫缁熻瀵硅薄 rz_salary_statistics + * + * @author evo + * @date 2024-11-26 + */ +public class RzSalaryStatistics extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭 */ + private Long id; + + /** 宸ヨ祫鏈堜唤 */ + @JsonFormat(pattern = "yyyy-MM") + @Excel(name = "宸ヨ祫鏈堜唤", width = 30, dateFormat = "yyyy-MM") + private Date month; + + /** 缁熻浜烘暟 */ + @Excel(name = "缁熻浜烘暟") + private int number; + + /** 瀹℃牳鐘舵 */ + @Excel(name = "瀹℃牳鐘舵") + private String status; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鍒犻櫎鏍囪瘑 */ + private String delFlag; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setMonth(Date month) + { + this.month = month; + } + + public Date getMonth() + { + return month; + } + public void setNumber(int number) + { + this.number = number; + } + + public int getNumber() + { + return number; + } + public void setStatus(String status) + { + this.status = status; + } + + public String getStatus() + { + return status; + } + public void setRemarks(String remarks) + { + this.remarks = remarks; + } + + public String getRemarks() + { + return remarks; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("month", getMonth()) + .append("number", getNumber()) + .append("status", getStatus()) + .append("remarks", getRemarks()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/finance/domain/vo/SalaryVo.java b/evo-admin/src/main/java/com/evo/finance/domain/vo/SalaryVo.java new file mode 100644 index 0000000..fed6e1a --- /dev/null +++ b/evo-admin/src/main/java/com/evo/finance/domain/vo/SalaryVo.java @@ -0,0 +1,293 @@ +package com.evo.finance.domain.vo; + +import com.evo.common.annotation.Excel; +import java.math.BigDecimal; + +public class SalaryVo { + + @Excel(name = "閮ㄩ棬鍚嶇О") + private String deptName; + /** 鍛樺伐濮撳悕 */ + @Excel(name = "鍛樺伐濮撳悕") + private String name; + /** 鍩烘湰宸ヨ祫 */ + @Excel(name = "鏈堝伐璧") + private BigDecimal basicSalary; + /** 鍔犵彮宸ヨ祫 */ + @Excel(name = "鍔犵彮宸ヨ祫") + private BigDecimal overtimeSalary; + /** 瀛﹀巻琛ュ姪 */ + @Excel(name = "瀛﹀巻琛ュ姪") + private BigDecimal levelSubsidies; + /** 鍚堝悓琛ュ姪 */ + @Excel(name = "鍚堝悓琛ュ姪") + private BigDecimal contractSubsidies; + /** 宸ラ緞宸ヨ祫 */ + @Excel(name = "宸ラ緞宸ヨ祫") + private BigDecimal senioritySalary; + /** 绀句繚琛ュ姪 */ + @Excel(name = "绀句繚琛ュ姪") + private BigDecimal socialSubsidies; + /** 鍏ㄥ嫟濂 */ + @Excel(name = "鍏ㄥ嫟濂") + private BigDecimal fullSubsidies; + /** 澶滅彮琛ュ姪 */ + @Excel(name = "澶滅彮琛ュ姪") + private BigDecimal nightSubsidies; + /** 澶滈琛ュ姪 */ + @Excel(name = "澶滈琛ュ姪") + private BigDecimal dinnerSubsidies; + /** 鍏朵粬琛ュ姪 */ + @Excel(name = "鍏朵粬琛ュ姪") + private BigDecimal subsidyOrBonus; + /** 缂哄嫟鎵f */ + @Excel(name = "缂哄嫟鎵f") + private BigDecimal absenteeismSalary; + /** 琛ュ姪鎵f */ + @Excel(name = "琛ュ姪鎵f") + private BigDecimal absenteeismSubsidies; + /** 椁愯垂鎵f */ + @Excel(name = "椁愯垂鎵f") + private BigDecimal mealFee; + /** 鍏朵粬鎵f */ + @Excel(name = "鍏朵粬鎵f") + private BigDecimal deductions; + /** 搴斿彂宸ヨ祫 */ + @Excel(name = "搴斿彂宸ヨ祫") + private BigDecimal salary; + /** 浠g即淇濋櫓 */ + @Excel(name = "浠g即淇濋櫓") + private BigDecimal payInsurance; + /** 绋庡墠宸ヨ祫 */ + @Excel(name = "绋庡墠宸ヨ祫") + private BigDecimal salaryBeforeTax; + /** 绱宸插彂宸ヨ祫 */ + @Excel(name = "绱宸插彂宸ヨ祫") + private BigDecimal totalWages; + /** 骞村害鍏嶅緛棰 */ + @Excel(name = "骞村害鍏嶅緛棰") + private BigDecimal annualExemptionAmount; + /** 绱涓撻」闄勫姞鎵i櫎 */ + @Excel(name = "绱涓撻」闄勫姞鎵i櫎") + private BigDecimal specialDeduction; + /** 閫熺畻鎵i櫎鏁 */ + @Excel(name = "閫熺畻鎵i櫎鏁") + private BigDecimal slowDownTheDeduction; + /** 绱宸茬即绋庨 */ + @Excel(name = "绱宸茬即绋庨") + private BigDecimal aggregatePersonalIncomeTax; + /** 鏈湀搴旂即涓◣ */ + @Excel(name = "鏈湀搴旂即涓◣") + private BigDecimal taxPayable; + /** 瀹炲彂宸ヨ祫 */ + @Excel(name = "瀹炲彂宸ヨ祫") + private BigDecimal netPayroll; + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public BigDecimal getBasicSalary() { + return basicSalary; + } + + public void setBasicSalary(BigDecimal basicSalary) { + this.basicSalary = basicSalary; + } + + public BigDecimal getOvertimeSalary() { + return overtimeSalary; + } + + public void setOvertimeSalary(BigDecimal overtimeSalary) { + this.overtimeSalary = overtimeSalary; + } + + public BigDecimal getLevelSubsidies() { + return levelSubsidies; + } + + public void setLevelSubsidies(BigDecimal levelSubsidies) { + this.levelSubsidies = levelSubsidies; + } + + public BigDecimal getContractSubsidies() { + return contractSubsidies; + } + + public void setContractSubsidies(BigDecimal contractSubsidies) { + this.contractSubsidies = contractSubsidies; + } + + public BigDecimal getSenioritySalary() { + return senioritySalary; + } + + public void setSenioritySalary(BigDecimal senioritySalary) { + this.senioritySalary = senioritySalary; + } + + public BigDecimal getSocialSubsidies() { + return socialSubsidies; + } + + public void setSocialSubsidies(BigDecimal socialSubsidies) { + this.socialSubsidies = socialSubsidies; + } + + public BigDecimal getFullSubsidies() { + return fullSubsidies; + } + + public void setFullSubsidies(BigDecimal fullSubsidies) { + this.fullSubsidies = fullSubsidies; + } + + public BigDecimal getNightSubsidies() { + return nightSubsidies; + } + + public void setNightSubsidies(BigDecimal nightSubsidies) { + this.nightSubsidies = nightSubsidies; + } + + public BigDecimal getDinnerSubsidies() { + return dinnerSubsidies; + } + + public void setDinnerSubsidies(BigDecimal dinnerSubsidies) { + this.dinnerSubsidies = dinnerSubsidies; + } + + public BigDecimal getSubsidyOrBonus() { + return subsidyOrBonus; + } + + public void setSubsidyOrBonus(BigDecimal subsidyOrBonus) { + this.subsidyOrBonus = subsidyOrBonus; + } + + public BigDecimal getAbsenteeismSalary() { + return absenteeismSalary; + } + + public void setAbsenteeismSalary(BigDecimal absenteeismSalary) { + this.absenteeismSalary = absenteeismSalary; + } + + public BigDecimal getAbsenteeismSubsidies() { + return absenteeismSubsidies; + } + + public void setAbsenteeismSubsidies(BigDecimal absenteeismSubsidies) { + this.absenteeismSubsidies = absenteeismSubsidies; + } + + public BigDecimal getMealFee() { + return mealFee; + } + + public void setMealFee(BigDecimal mealFee) { + this.mealFee = mealFee; + } + + public BigDecimal getDeductions() { + return deductions; + } + + public void setDeductions(BigDecimal deductions) { + this.deductions = deductions; + } + + public BigDecimal getSalary() { + return salary; + } + + public void setSalary(BigDecimal salary) { + this.salary = salary; + } + + public BigDecimal getPayInsurance() { + return payInsurance; + } + + public void setPayInsurance(BigDecimal payInsurance) { + this.payInsurance = payInsurance; + } + + public BigDecimal getSalaryBeforeTax() { + return salaryBeforeTax; + } + + public void setSalaryBeforeTax(BigDecimal salaryBeforeTax) { + this.salaryBeforeTax = salaryBeforeTax; + } + + public BigDecimal getTotalWages() { + return totalWages; + } + + public void setTotalWages(BigDecimal totalWages) { + this.totalWages = totalWages; + } + + public BigDecimal getAnnualExemptionAmount() { + return annualExemptionAmount; + } + + public void setAnnualExemptionAmount(BigDecimal annualExemptionAmount) { + this.annualExemptionAmount = annualExemptionAmount; + } + + public BigDecimal getSpecialDeduction() { + return specialDeduction; + } + + public void setSpecialDeduction(BigDecimal specialDeduction) { + this.specialDeduction = specialDeduction; + } + + public BigDecimal getSlowDownTheDeduction() { + return slowDownTheDeduction; + } + + public void setSlowDownTheDeduction(BigDecimal slowDownTheDeduction) { + this.slowDownTheDeduction = slowDownTheDeduction; + } + + public BigDecimal getAggregatePersonalIncomeTax() { + return aggregatePersonalIncomeTax; + } + + public void setAggregatePersonalIncomeTax(BigDecimal aggregatePersonalIncomeTax) { + this.aggregatePersonalIncomeTax = aggregatePersonalIncomeTax; + } + + public BigDecimal getTaxPayable() { + return taxPayable; + } + + public void setTaxPayable(BigDecimal taxPayable) { + this.taxPayable = taxPayable; + } + + public BigDecimal getNetPayroll() { + return netPayroll; + } + + public void setNetPayroll(BigDecimal netPayroll) { + this.netPayroll = netPayroll; + } +} diff --git a/evo-admin/src/main/java/com/evo/finance/mapper/RzSalaryDetailMapper.java b/evo-admin/src/main/java/com/evo/finance/mapper/RzSalaryDetailMapper.java new file mode 100644 index 0000000..bface97 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/finance/mapper/RzSalaryDetailMapper.java @@ -0,0 +1,70 @@ +package com.evo.finance.mapper; + +import java.util.Date; +import java.util.List; +import com.evo.finance.domain.RzSalaryDetail; +import org.apache.ibatis.annotations.Param; + +/** + * 宸ヨ祫璇︽儏Mapper鎺ュ彛 + * + * @author evo + * @date 2024-11-26 + */ +public interface RzSalaryDetailMapper +{ + /** + * 鏌ヨ宸ヨ祫璇︽儏 + * + * @param id 宸ヨ祫璇︽儏涓婚敭 + * @return 宸ヨ祫璇︽儏 + */ + public RzSalaryDetail selectRzSalaryDetailById(Long id); + + /** + * 鏌ヨ宸ヨ祫璇︽儏鍒楄〃 + * + * @param rzSalaryDetail 宸ヨ祫璇︽儏 + * @return 宸ヨ祫璇︽儏闆嗗悎 + */ + public List selectRzSalaryDetailList(RzSalaryDetail rzSalaryDetail); + + /** + * 鏂板宸ヨ祫璇︽儏 + * + * @param rzSalaryDetail 宸ヨ祫璇︽儏 + * @return 缁撴灉 + */ + public int insertRzSalaryDetail(RzSalaryDetail rzSalaryDetail); + + /** + * 淇敼宸ヨ祫璇︽儏 + * + * @param rzSalaryDetail 宸ヨ祫璇︽儏 + * @return 缁撴灉 + */ + public int updateRzSalaryDetail(RzSalaryDetail rzSalaryDetail); + /** + * 鏌ヨ宸ヨ祫璇︽儏 + * + * @param staffId 宸ヨ祫璇︽儏涓婚敭 + * @return 宸ヨ祫璇︽儏 + */ + public RzSalaryDetail selectRzSalaryDetailByStaffId(Long staffId); + + /** + * 鏍规嵁鏈堜唤鏌ヨ宸ヨ祫璇︽儏鍒楄〃 + * + * @param month 宸ヨ祫璇︽儏 + * @return 宸ヨ祫璇︽儏闆嗗悎 + */ + public List selectRzSalaryDetailByMonth(Date month); + /** + * 鏍规嵁閮ㄩ棬鏌ヨ宸ヨ祫鍗 + * @return + */ + public List selectSalaryDetailByDeptId(@Param("deptId") Long deptId, @Param("date") Date date); + + public List selectSalaryDetailByWbFlag(@Param("wbFlag")String wbFlag,@Param("date")Date date); + +} diff --git a/evo-admin/src/main/java/com/evo/finance/mapper/RzSalaryStatisticsMapper.java b/evo-admin/src/main/java/com/evo/finance/mapper/RzSalaryStatisticsMapper.java new file mode 100644 index 0000000..eb7c196 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/finance/mapper/RzSalaryStatisticsMapper.java @@ -0,0 +1,54 @@ +package com.evo.finance.mapper; + +import java.util.Date; +import java.util.List; +import com.evo.finance.domain.RzSalaryStatistics; + +/** + * 宸ヨ祫缁熻Mapper鎺ュ彛 + * + * @author evo + * @date 2024-11-26 + */ +public interface RzSalaryStatisticsMapper +{ + /** + * 鏌ヨ宸ヨ祫缁熻 + * + * @param id 宸ヨ祫缁熻涓婚敭 + * @return 宸ヨ祫缁熻 + */ + public RzSalaryStatistics selectRzSalaryStatisticsById(Long id); + + /** + * 鏌ヨ宸ヨ祫缁熻鍒楄〃 + * + * @param rzSalaryStatistics 宸ヨ祫缁熻 + * @return 宸ヨ祫缁熻闆嗗悎 + */ + public List selectRzSalaryStatisticsList(RzSalaryStatistics rzSalaryStatistics); + + /** + * 鏂板宸ヨ祫缁熻 + * + * @param rzSalaryStatistics 宸ヨ祫缁熻 + * @return 缁撴灉 + */ + public int insertRzSalaryStatistics(RzSalaryStatistics rzSalaryStatistics); + + /** + * 淇敼宸ヨ祫缁熻 + * + * @param rzSalaryStatistics 宸ヨ祫缁熻 + * @return 缁撴灉 + */ + public int updateRzSalaryStatistics(RzSalaryStatistics rzSalaryStatistics); + + /** + * 鏍规嵁宸ヨ祫璁$畻鏈堜唤鏌ヨ缁熻淇℃伅 + * @param month + * @return + */ + public RzSalaryStatistics selectRzSalaryStatisticsByMonth(Date month); + +} diff --git a/evo-admin/src/main/java/com/evo/finance/service/IRzSalaryDetailService.java b/evo-admin/src/main/java/com/evo/finance/service/IRzSalaryDetailService.java new file mode 100644 index 0000000..71b0604 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/finance/service/IRzSalaryDetailService.java @@ -0,0 +1,69 @@ +package com.evo.finance.service; + +import java.util.Date; +import java.util.List; +import com.evo.common.core.domain.AjaxResult; +import com.evo.finance.domain.RzSalaryDetail; +import org.apache.ibatis.annotations.Param; + +/** + * 宸ヨ祫璇︽儏Service鎺ュ彛 + * + * @author evo + * @date 2024-11-26 + */ +public interface IRzSalaryDetailService +{ + /** + * 鏌ヨ宸ヨ祫璇︽儏 + * + * @param id 宸ヨ祫璇︽儏涓婚敭 + * @return 宸ヨ祫璇︽儏 + */ + public RzSalaryDetail selectRzSalaryDetailById(Long id); + + /** + * 鏌ヨ宸ヨ祫璇︽儏鍒楄〃 + * + * @param rzSalaryDetail 宸ヨ祫璇︽儏 + * @return 宸ヨ祫璇︽儏闆嗗悎 + */ + public List selectRzSalaryDetailList(RzSalaryDetail rzSalaryDetail); + + /** + * 鏂板宸ヨ祫璇︽儏 + * + * @param rzSalaryDetail 宸ヨ祫璇︽儏 + * @return 缁撴灉 + */ + public AjaxResult insertRzSalaryDetail(RzSalaryDetail rzSalaryDetail); + + /** + * 淇敼宸ヨ祫璇︽儏 + * + * @param rzSalaryDetail 宸ヨ祫璇︽儏 + * @return 缁撴灉 + */ + public int updateRzSalaryDetail(RzSalaryDetail rzSalaryDetail); + + /** + * 鍒犻櫎宸ヨ祫璇︽儏淇℃伅 + * + * @param id 宸ヨ祫璇︽儏涓婚敭 + * @return 缁撴灉 + */ + public int deleteRzSalaryDetailById(Long id); + + /** + * 鏍规嵁閮ㄩ棬鏌ヨ宸ヨ祫鍗 + * @param deptId + * @return + */ + public List selectSalaryDetailByDeptId(Long deptId,Date date); + /** + * 鏍规嵁鏍囪瘑鏌ヨ闈炰紛鐗瑰伐璧勫崟 + * @return + */ + public List selectSalaryDetailByWbFlag(String wbFlag,Date date); + +} diff --git a/evo-admin/src/main/java/com/evo/finance/service/IRzSalaryStatisticsService.java b/evo-admin/src/main/java/com/evo/finance/service/IRzSalaryStatisticsService.java new file mode 100644 index 0000000..f9b2e53 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/finance/service/IRzSalaryStatisticsService.java @@ -0,0 +1,31 @@ +package com.evo.finance.service; + +import java.util.List; + +import com.evo.common.core.domain.AjaxResult; +import com.evo.finance.domain.RzSalaryStatistics; + +/** + * 宸ヨ祫缁熻Service鎺ュ彛 + * + * @author evo + * @date 2024-11-26 + */ +public interface IRzSalaryStatisticsService +{ + /** + * 鏌ヨ宸ヨ祫缁熻鍒楄〃 + * + * @param rzSalaryStatistics 宸ヨ祫缁熻 + * @return 宸ヨ祫缁熻闆嗗悎 + */ + public List selectRzSalaryStatisticsList(RzSalaryStatistics rzSalaryStatistics); + + /** + * 鍒犻櫎宸ヨ祫缁熻淇℃伅 + * + * @param id 宸ヨ祫缁熻涓婚敭 + * @return 缁撴灉 + */ + public AjaxResult deleteRzSalaryStatisticsById(Long id); +} diff --git a/evo-admin/src/main/java/com/evo/finance/service/impl/RzSalaryDetailServiceImpl.java b/evo-admin/src/main/java/com/evo/finance/service/impl/RzSalaryDetailServiceImpl.java new file mode 100644 index 0000000..fe3a615 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/finance/service/impl/RzSalaryDetailServiceImpl.java @@ -0,0 +1,543 @@ +package com.evo.finance.service.impl; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import com.evo.attendance.domain.RzAttendance; +import com.evo.attendance.domain.RzAttendanceStatistical; +import com.evo.attendance.domain.RzSpecialOverTime; +import com.evo.attendance.mapper.RzAttendanceMapper; +import com.evo.attendance.mapper.RzAttendanceStatisticalMapper; +import com.evo.attendance.mapper.RzSpecialOverTimeMapper; +import com.evo.common.constant.Constants; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.finance.domain.RzSalaryStatistics; +import com.evo.finance.mapper.RzSalaryStatisticsMapper; +import com.evo.personnelMatters.domain.RzHoliday; +import com.evo.personnelMatters.mapper.RzHolidayMapper; +import com.evo.restaurant.domain.RzRestaurantStatistics; +import com.evo.restaurant.mapper.RzRestaurantStatisticsMapper; +import com.evo.system.domain.SysStaff; +import com.evo.system.domain.SysStaffDetail; +import com.evo.system.mapper.SysDeptMapper; +import com.evo.system.mapper.SysStaffDetailMapper; +import com.evo.system.mapper.SysStaffMapper; +import com.evo.utils.DateUtil; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Service; +import com.evo.finance.mapper.RzSalaryDetailMapper; +import com.evo.finance.domain.RzSalaryDetail; +import com.evo.finance.service.IRzSalaryDetailService; +import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; + +/** + * 宸ヨ祫璇︽儏Service涓氬姟灞傚鐞 + * + * @author evo + * @date 2024-11-26 + */ +@Service +public class RzSalaryDetailServiceImpl implements IRzSalaryDetailService +{ + @Resource + private RzSalaryDetailMapper rzSalaryDetailMapper; + @Resource + private RzSalaryStatisticsMapper rzSalaryStatisticsMapper; //宸ヨ祫缁熻 + @Resource + private SysStaffMapper sysStaffMapper; //鍛樺伐淇℃伅 + @Resource + private SysStaffDetailMapper sysStaffDetailMapper; //鍛樺伐璇︽儏 + @Resource + private RzHolidayMapper rzHolidayMapper; //鑺傚亣鏃 + @Resource + private RzAttendanceStatisticalMapper rzAttendanceStatisticalMapper; //鎵撳崱缁熻 + @Resource + private RzRestaurantStatisticsMapper rzRestaurantStatisticsMapper; //椁愰ギ缁熻 + @Resource + private RzAttendanceMapper rzAttendanceMapper; //鑰冨嫟鏃ユ湡 + @Resource + private SysDeptMapper deptMapper; //閮ㄩ棬 + @Resource + private RzSpecialOverTimeMapper rzSpecialOverTimeMapper; + + /** + * 鏌ヨ宸ヨ祫璇︽儏 + * + * @param id 宸ヨ祫璇︽儏涓婚敭 + * @return 宸ヨ祫璇︽儏 + */ + @Override + public RzSalaryDetail selectRzSalaryDetailById(Long id) + { + return rzSalaryDetailMapper.selectRzSalaryDetailById(id); + } + /** + * 鏌ヨ宸ヨ祫璇︽儏鍒楄〃 + * + * @param rzSalaryDetail 宸ヨ祫璇︽儏 + * @return 宸ヨ祫璇︽儏 + */ + @Override + public List selectRzSalaryDetailList(RzSalaryDetail rzSalaryDetail) + { + List res_list = rzSalaryDetailMapper.selectRzSalaryDetailList(rzSalaryDetail); + for (RzSalaryDetail salaryDetail : res_list) { + salaryDetail.setDeptName(deptMapper.selectDeptById(salaryDetail.getDeptId()).getDeptName()); + } + return res_list; + } + + /** + * 鏂板宸ヨ祫璇︽儏 + * + * @param rzSalaryDetail 宸ヨ祫璇︽儏 + * @return 缁撴灉 + */ + @Override + @Transactional + public AjaxResult insertRzSalaryDetail(RzSalaryDetail rzSalaryDetail) + { + if(StringUtils.isNull(rzSalaryDetail.getMonth())){ + return AjaxResult.error("宸ヨ祫鏈堜唤涓轰笉濉」锛侊紒"); + } + //鏍规嵁缁熻鏈堜唤鍒ゆ柇宸ヨ祫鏄惁璁$畻杩 + RzSalaryStatistics rzSalaryStatistics = rzSalaryStatisticsMapper.selectRzSalaryStatisticsByMonth(rzSalaryDetail.getMonth()); + if(StringUtils.isNotNull(rzSalaryStatistics)){ + return AjaxResult.error("鏈湀宸ヨ祫宸茬粡鐢熸垚锛岃鍒犻櫎鍚庡湪閲嶆柊杩涜锛侊紒"); + } + //鏍规嵁鏈堜唤鏌ヨ闇瑕佸彂宸ヨ祫鐨勫憳宸 + //澶勭悊宸ヨ祫鏈堜唤 鑾峰彇鏈鏅氬叆鑱屾椂闂 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(rzSalaryDetail.getMonth()); + calendar.add(Calendar.MONTH,1); + //鑾峰彇闇瑕佽绠楀伐璧勭殑鍛樺伐淇℃伅 鍏ヨ亴鏃堕棿鍜岀鑱屾椂闂 + List st_list = sysStaffMapper.querySysStaffListOfMonth(calendar.getTime(),rzSalaryDetail.getMonth()); + if(StringUtils.isNull(st_list) && st_list.size() == 0){ + return AjaxResult.error("娌℃湁瑕佽绠楀伐璧勭殑鍛樺伐"); + } + //娣诲姞宸ヨ祫缁熻 + rzSalaryStatistics = new RzSalaryStatistics(); + rzSalaryStatistics.setMonth(rzSalaryDetail.getMonth()); + rzSalaryStatistics.setNumber(st_list.size()); + rzSalaryStatistics.setDelFlag(Constants.DELETE_FLAG_0); + rzSalaryStatistics.setStatus("寰呭鏍"); + rzSalaryStatistics.setCreateTime(new Date()); + rzSalaryStatistics.setCreateBy(SecurityUtils.getUsername()); + int i = rzSalaryStatisticsMapper.insertRzSalaryStatistics(rzSalaryStatistics); + if(i < 1){ + return AjaxResult.error(); + } + SimpleDateFormat sdfm = new SimpleDateFormat("yyyy-MM"); + SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd"); + //鑾峰彇绀句繚缂寸撼鍒嗗壊鏃ユ湡锛 10鏃 + String str = sdfm.format(rzSalaryDetail.getMonth())+"-10"; + Date sbrq = null; + try{ + sbrq = sdfd.parse(str); + }catch (Exception e){ + e.printStackTrace(); + } + for (SysStaff sysStaff : st_list) { + rzSalaryDetail.setStaffId(sysStaff.getUserId()); //鍛樺伐ID + rzSalaryDetail.setDeptId(sysStaff.getDeptId()); //閮ㄩ棬 + rzSalaryDetail.setName(sysStaff.getName()); //濮撳悕 + rzSalaryDetail.setWbFlag(sysStaff.getCompanyName()); //鍏徃 + //璁$畻鑾峰緱鐨勫伐璧 + SysStaffDetail salaryDetail = calculateSalary(sysStaff,rzSalaryDetail.getMonth(),sbrq); + rzSalaryDetail.setMonthSalary(salaryDetail.getBasicSalary()); //鍩烘湰宸ヨ祫 + rzSalaryDetail.setAbsenteeismSalary(salaryDetail.getAbsenteeismSalary()); //璇峰亣鎵i櫎宸ヨ祫 + rzSalaryDetail.setOvertimeSalary(salaryDetail.getOverWages()); //鍔犵彮宸ヨ祫 + rzSalaryDetail.setNightSubsidies(salaryDetail.getNightShiftSubsidies()); //澶滅彮琛ュ姪 + rzSalaryDetail.setDinnerSubsidies(salaryDetail.getDinnerSubsidies()); //澶滈琛ュ姪 + rzSalaryDetail.setMiddleSubsidies(salaryDetail.getMiddleSubsidies()); //涓彮琛ュ姪 + //鏌ヨ鍛樺伐璇︽儏 + SysStaffDetail sysStaffDetail = sysStaffDetailMapper.selectSysStaffDetailByStaffId(sysStaff.getUserId()); + rzSalaryDetail.setFullSubsidies(sysStaffDetail.getFullFrequentlySubsidies()); //鍏ㄥ嫟濂 + rzSalaryDetail.setLevelSubsidies(sysStaffDetail.getLevelOfEducationSubsidies()); //瀛﹀巻 + rzSalaryDetail.setContractSubsidies(sysStaffDetail.getContractSubsidies()); //鍚堝悓 + rzSalaryDetail.setSocialSubsidies(sysStaffDetail.getSocialSecuritySubsidies()); //绀句繚 + rzSalaryDetail.setSubsidyOrBonus(sysStaffDetail.getOtherSubsidies().add(sysStaffDetail.getFixedAllowance())); //鍏朵粬琛ュ姪 + //琛ュ姪鎵i櫎 TODO 绂忓埄鎵i櫎鐧惧垎姣 + rzSalaryDetail.setAbsenteeismSubsidies(sysStaffDetail.getLevelOfEducationSubsidies().add(sysStaffDetail.getContractSubsidies()) + .add(sysStaffDetail.getSenioritySubsidies()).add(sysStaffDetail.getSocialSecuritySubsidies()).multiply(salaryDetail.getAbsenteeismSubsidies())); + rzSalaryDetail.setDeductions(sysStaffDetail.getDeductions()); //鍏朵粬鎵f + //璁$畻宸ラ緞,浠ユ瘡鏈10鍙风ぞ淇濈即绾宠绠 + int years = sbrq.getYear() - sysStaff.getEmploymentDate().getYear(); + int months = sbrq.getMonth() - sysStaff.getEmploymentDate().getMonth(); + int days = sbrq.getDate() - sysStaff.getEmploymentDate().getDate(); + if(months < 0){ + years -= 1; + } + if(months == 0 && days < 0){ + years -= 1; + } + if(years > 10){ + rzSalaryDetail.setSenioritySalary(sysStaffDetail.getSenioritySubsidies().multiply(new BigDecimal("10.0"))); //宸ラ緞 + }else{ + rzSalaryDetail.setSenioritySalary(sysStaffDetail.getSenioritySubsidies().multiply(new BigDecimal(years))); //宸ラ緞 + } + //椁愯垂 + RzRestaurantStatistics rzRestaurantStatistics = rzRestaurantStatisticsMapper.selectRzRestaurantStatisticsByUserIdAndDate(sysStaff.getUserId(),rzSalaryDetail.getMonth()); + rzSalaryDetail.setMealFee(rzRestaurantStatistics.getPersonalSumConsumption()); //椁愯垂鎵i櫎 + //璁$畻搴斿彂宸ヨ祫 鍚堢畻鏈堝伐璧+瀛﹀巻琛ュ姪+鍚堝悓琛ュ姪+绀句繚琛ュ姪+宸ラ緞宸ヨ祫+鍏ㄥ嫟濂+鍔犵彮宸ヨ祫+澶滅彮琛ュ姪+澶滈琛ュ姪+鍏朵粬琛ュ姪 + BigDecimal sum = rzSalaryDetail.getMonthSalary().add(rzSalaryDetail.getOvertimeSalary()).add(rzSalaryDetail.getNightSubsidies()).add(rzSalaryDetail.getDinnerSubsidies()) + .add(rzSalaryDetail.getFullSubsidies()).add(rzSalaryDetail.getLevelSubsidies()).add(rzSalaryDetail.getContractSubsidies()).add(rzSalaryDetail.getSocialSubsidies()) + .add(rzSalaryDetail.getSenioritySalary()).add(rzSalaryDetail.getSubsidyOrBonus()).subtract(rzSalaryDetail.getAbsenteeismSalary()) + .subtract(rzSalaryDetail.getMealFee()).subtract(rzSalaryDetail.getAbsenteeismSubsidies()); + rzSalaryDetail.setSalary(sum); + //浜旈櫓涓閲 + rzSalaryDetail.setAccumulationFund(sysStaffDetail.getAccumulationFund()); //鍏Н閲 + rzSalaryDetail.setUnemploymentInsurance(sysStaffDetail.getUnemploymentInsurance()); //澶变笟淇濋櫓 + rzSalaryDetail.setMaternityInsurance(sysStaffDetail.getMaternityInsurance()); //鐢熻偛淇濋櫓 + rzSalaryDetail.setMedicalInsurance(sysStaffDetail.getMedicalInsurance()); //鍖荤枟淇濋櫓 + rzSalaryDetail.setEndowmentInsurance(sysStaffDetail.getEndowmentInsurance()); //鍏昏佷繚闄 + rzSalaryDetail.setEmploymentInjuryInsurance(sysStaffDetail.getEmploymentInjuryInsurance()); //宸ヤ激淇濋櫓 + //绋庡墠宸ヨ祫 搴斿彂 - 绀句繚 + rzSalaryDetail.setSalaryBeforeTax(rzSalaryDetail.getSalary().subtract(rzSalaryDetail.getAccumulationFund()).subtract(rzSalaryDetail.getUnemploymentInsurance()) + .subtract(rzSalaryDetail.getMaternityInsurance()).subtract(rzSalaryDetail.getMedicalInsurance()) + .subtract(rzSalaryDetail.getEndowmentInsurance()).subtract(rzSalaryDetail.getEmploymentInjuryInsurance()).subtract(salaryDetail.getCountInsurance())); + + //鑾峰彇缁熻鏈堜唤 + int curr_month = rzSalaryDetail.getMonth().getMonth(); + //鑾峰彇宸ヨ祫缁熻鏈堜唤,鏌ヨ涓婁釜鏈堢殑绾崇◣鍏徃 寰楀埌骞村害鍏嶅緛棰 + RzSalaryDetail old_rzSalary = rzSalaryDetailMapper.selectRzSalaryDetailByStaffId(sysStaff.getUserId()); + if(curr_month == 12){ + rzSalaryDetail.setAnnualExemptionAmount(new BigDecimal("5000.00")); + }else{ + //鍒ゆ柇鍛樺伐涓 鏂板叆鑱岋紝鍏徃绾崇◣涓婚鏀瑰彉锛屽悓涓涓婚瓒呬竴骞寸殑锛屽悓涓涓婚涓嶈秴涓骞翠絾璺ㄥ勾鐨 + if(StringUtils.isNull(old_rzSalary) || !old_rzSalary.getWbFlag().equals(sysStaff.getCompanyName()) + || (rzSalaryDetail.getMonth().getTime() - old_rzSalary.getMonth().getTime())/1000/60/60/24 > 365 + || (old_rzSalary.getMonth().getMonth() < 12 && old_rzSalary.getMonth().getMonth() > rzSalaryDetail.getMonth().getMonth())){ + rzSalaryDetail.setAnnualExemptionAmount(new BigDecimal("5000.00")); + }else{ + rzSalaryDetail.setAnnualExemptionAmount(new BigDecimal("5000.00").add(old_rzSalary.getAnnualExemptionAmount())); + } + } + // 鏈勾绱宸插彂宸ヨ祫锛堟湰骞寸疮璁″凡鍙戝伐璧+鏈湀绋庡墠宸ヨ祫锛 + rzSalaryDetail.setTotalWages(sysStaffDetail.getTotalWages().add(rzSalaryDetail.getSalaryBeforeTax())); + // 涓撻」闄勫姞鎵i櫎锛堝叚椤归檮鍔犳墸闄ら鐩稿姞锛 + rzSalaryDetail.setSpecialDeduction(sysStaffDetail.getChildrenEducation().add(sysStaffDetail.getSupportTheOld()).add(sysStaffDetail.getHousingLoans()) + .add(sysStaffDetail.getHousingRents()).add(sysStaffDetail.getAdultEducation()).add(sysStaffDetail.getTreatmentForSeriousDisease())); + + // 鍒ゆ柇搴旂撼绋庢墍寰楅棰濆害锛堥搴︿笉涓鏍风◣鐜囦笉涓鏍凤級 + if (rzSalaryDetail.getTaxableIncome().doubleValue() > 0 && rzSalaryDetail.getTaxableIncome().doubleValue() <= 36000l) { + // 姝ら樁绋庣巼涓虹櫨鍒嗕箣3锛岄熷噺鏁颁负0 + rzSalaryDetail.setTaxRate(new BigDecimal("0.03")); + // 閫熺畻鎵i櫎鏁帮紙閫熺畻鎵i櫎鏁拌窡绋庣巼鍚屾锛 + rzSalaryDetail.setSlowDownTheDeduction(new BigDecimal("0")); + } else if (rzSalaryDetail.getTaxableIncome().doubleValue() > 36000l && rzSalaryDetail.getTaxableIncome().doubleValue() <= 144000L) { + // 姝ら樁绋庣巼涓虹櫨鍒嗕箣3锛岄熷噺鏁颁负0 + rzSalaryDetail.setTaxRate(new BigDecimal("0.10")); + // 閫熺畻鎵i櫎鏁帮紙閫熺畻鎵i櫎鏁拌窡绋庣巼鍚屾锛 + rzSalaryDetail.setSlowDownTheDeduction(new BigDecimal("2520")); + } else if (rzSalaryDetail.getTaxableIncome().doubleValue() > 144000L && rzSalaryDetail.getTaxableIncome().doubleValue() <= 300000l) { + // 姝ら樁绋庣巼涓虹櫨鍒嗕箣3锛岄熷噺鏁颁负0 + rzSalaryDetail.setTaxRate(new BigDecimal("0.20")); + // 閫熺畻鎵i櫎鏁帮紙閫熺畻鎵i櫎鏁拌窡绋庣巼鍚屾锛 + rzSalaryDetail.setSlowDownTheDeduction(new BigDecimal("16920")); + } else if (rzSalaryDetail.getTaxableIncome().doubleValue() > 300000l && rzSalaryDetail.getTaxableIncome().doubleValue() <= 420000l) { + // 姝ら樁绋庣巼涓虹櫨鍒嗕箣3锛岄熷噺鏁颁负0 + rzSalaryDetail.setTaxRate(new BigDecimal("0.25")); + // 閫熺畻鎵i櫎鏁帮紙閫熺畻鎵i櫎鏁拌窡绋庣巼鍚屾锛 + rzSalaryDetail.setSlowDownTheDeduction(new BigDecimal("31920")); + } else if (rzSalaryDetail.getTaxableIncome().doubleValue() > 420000l && rzSalaryDetail.getTaxableIncome().doubleValue() <= 660000l) { + // 姝ら樁绋庣巼涓虹櫨鍒嗕箣3锛岄熷噺鏁颁负0 + rzSalaryDetail.setTaxRate(new BigDecimal("0.30")); + // 閫熺畻鎵i櫎鏁帮紙閫熺畻鎵i櫎鏁拌窡绋庣巼鍚屾锛 + rzSalaryDetail.setSlowDownTheDeduction(new BigDecimal("52920")); + } else if (rzSalaryDetail.getTaxableIncome().doubleValue() > 660000l && rzSalaryDetail.getTaxableIncome().doubleValue() <= 960000l) { + // 姝ら樁绋庣巼涓虹櫨鍒嗕箣3锛岄熷噺鏁颁负0 + rzSalaryDetail.setTaxRate(new BigDecimal("0.35")); + // 閫熺畻鎵i櫎鏁帮紙閫熺畻鎵i櫎鏁拌窡绋庣巼鍚屾锛 + rzSalaryDetail.setSlowDownTheDeduction(new BigDecimal("85920")); + } else if (rzSalaryDetail.getTaxableIncome().doubleValue() > 960000l) { + // 姝ら樁绋庣巼涓虹櫨鍒嗕箣3锛岄熷噺鏁颁负0 + rzSalaryDetail.setTaxRate(new BigDecimal("0.45")); + // 閫熺畻鎵i櫎鏁帮紙閫熺畻鎵i櫎鏁拌窡绋庣巼鍚屾锛 + rzSalaryDetail.setSlowDownTheDeduction(new BigDecimal("181920")); + } else { + // 搴旂撼绋庢墍寰楅灏忎簬0(鍏嶅緛棰+涓撻」鎵i櫎>搴斿彂宸ヨ祫鏃) + // 姝ら樁绋庣巼涓虹櫨鍒嗕箣0锛岄熷噺鏁颁负0 + rzSalaryDetail.setTaxRate(new BigDecimal("0.00")); + // 閫熺畻鎵i櫎鏁帮紙閫熺畻鎵i櫎鏁拌窡绋庣巼鍚屾锛 + rzSalaryDetail.setSlowDownTheDeduction(new BigDecimal("0")); + } + + //鍒ゆ柇鏄惁澶栧寘锛屽鍖呭叕鍙稿憳宸ヤ笉鍋氱◣(鏈堣柂50000涓嶄笂绋) + if("澶栧寘".equals(sysStaff.getCompanyName())){ + // 瀹炲彂宸ヨ祫 = 绋庡墠宸ヨ祫 + rzSalaryDetail.setNetPayroll(rzSalaryDetail.getSalaryBeforeTax()); + }else { + // 搴旂撼绋庨 (鏈勾绱宸插彂宸ヨ祫-骞村害鍏嶅緛棰-绱涓撻」鎵i櫎-鏈湀涓撻」鎵i櫎) + BigDecimal tax = rzSalaryDetail.getTotalWages().subtract(rzSalaryDetail.getSpecialDeduction()).subtract(rzSalaryDetail.getAnnualExemptionAmount()); + if(tax.doubleValue() <= 0.0){ + rzSalaryDetail.setTaxableIncome(new BigDecimal("0.00")); + }else{ + rzSalaryDetail.setTaxableIncome(tax); + } + // 鍒ゆ柇绋庡墠宸ヨ祫鏄惁澶т簬5000,濡傛灉灏忎簬锛屽垯涓嶅湪璁$畻涓◣ + if (rzSalaryDetail.getSalaryBeforeTax().doubleValue() > 5000.00){ + // 鏈湀搴旂即绋庨(鏈湀搴旂撼绋庢墍寰楅*绋庣巼-閫熷噺鏁-鏈勾绱宸查缂翠釜绋) + rzSalaryDetail.setTaxPayable( + rzSalaryDetail.getTaxableIncome().multiply(rzSalaryDetail.getTaxRate()).subtract(rzSalaryDetail.getSlowDownTheDeduction()).subtract(sysStaffDetail.getAggregatePersonalIncomeTax())); + if (rzSalaryDetail.getTaxPayable().doubleValue() <= 0) { + rzSalaryDetail.setTaxPayable(new BigDecimal("0.00")); + } + } else { + // 搴旂撼绋庢墍寰楅 + rzSalaryDetail.setTaxableIncome(new BigDecimal("0.00")); + rzSalaryDetail.setTaxPayable(new BigDecimal("0.00")); + } + // 瀹炲彂宸ヨ祫锛堢◣鍓嶅伐璧-鏈湀搴旂即涓汉鎵寰楃◣锛 + rzSalaryDetail.setNetPayroll(rzSalaryDetail.getSalaryBeforeTax().subtract(rzSalaryDetail.getTaxPayable())); + // 鏈勾绱宸茬即绋庨 + rzSalaryDetail.setAggregatePersonalIncomeTax(sysStaffDetail.getAggregatePersonalIncomeTax().add(rzSalaryDetail.getTaxPayable())); + } + rzSalaryDetail.setCreateTime(DateUtils.getNowDate()); + rzSalaryDetail.setDelFlag(Constants.DELETE_FLAG_0); + rzSalaryDetail.setCreateBy(SecurityUtils.getUsername()); + // 淇濆瓨宸ヨ祫淇℃伅 + i = rzSalaryDetailMapper.insertRzSalaryDetail(rzSalaryDetail); + if(i < 1){ + return AjaxResult.error(); + } + //鍒ゆ柇缁熻鏈堢即璐瑰叕鍙稿拰涓婁竴娆℃槸鍚︿竴涓叕鍙 + if(StringUtils.isNull(old_rzSalary) || old_rzSalary.getWbFlag().equals(sysStaff.getCompanyName())){ + // 鎶婃湰骞寸疮璁′釜绋 + sysStaffDetail.setAggregatePersonalIncomeTax(rzSalaryDetail.getAggregatePersonalIncomeTax()); + // 鎶婃湰骞寸疮璁′笓椤规墸闄や繚瀛樺埌鍛樺伐淇℃伅琛ㄤ腑 + sysStaffDetail.setSpecialDeduction(sysStaffDetail.getSpecialDeduction().add(rzSalaryDetail.getSpecialDeduction())); + // 鎶婃湰骞寸疮璁″凡鍙戝伐璧勪繚瀛樺埌鍛樺伐淇℃伅琛ㄤ腑 + sysStaffDetail.setTotalWages(rzSalaryDetail.getTotalWages()); + i = sysStaffDetailMapper.updateSysStaffDetail(sysStaffDetail); + if(i < 1){ + return AjaxResult.error(); + } + }else{ + //鍒犻櫎鍘熸潵鐨勬暟鎹 + sysStaffDetail.setDelFlag(Constants.DELETE_FLAG_1); + i = sysStaffDetailMapper.updateSysStaffDetail(sysStaffDetail); + //鏂板缓璇︽儏鏁版嵁 + // 鎶婃湰骞寸疮璁″凡缂翠釜绋庝繚瀛樺埌鍛樺伐淇℃伅琛ㄤ腑 + sysStaffDetail.setAggregatePersonalIncomeTax(rzSalaryDetail.getTaxPayable()); + // 鎶婃湰骞寸疮璁′笓椤规墸闄や繚瀛樺埌鍛樺伐淇℃伅琛ㄤ腑 + sysStaffDetail.setSpecialDeduction(rzSalaryDetail.getSpecialDeduction()); + // 鎶婃湰骞寸疮璁″凡鍙戝伐璧勪繚瀛樺埌鍛樺伐淇℃伅琛ㄤ腑 + sysStaffDetail.setTotalWages(rzSalaryDetail.getSalaryBeforeTax()); + sysStaffDetail.setId(null); + i = sysStaffDetailMapper.insertSysStaffDetail(sysStaffDetail); + if(i < 1){ + return AjaxResult.error(); + } + } + } + return AjaxResult.success(); + } + + /** + * 璁$畻鍛樺伐鐨勫伐璧勪俊鎭 + * @param sysStaff 鍛樺伐淇℃伅 + * @param month 缁熻鏈堜唤 + * @param date 缁熻鏈10鏃 + * @return + */ + private SysStaffDetail calculateSalary(SysStaff sysStaff, Date month,Date date){ + //鑾峰彇缁熻鏈堜唤 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(month); + //鑾峰彇鍏ㄥ勾澶╂暟 - 鑺傚亣鏃ュぉ鏁 + int days = calendar.getActualMaximum(Calendar.DAY_OF_YEAR); + SimpleDateFormat sdfm = new SimpleDateFormat("yyyy-MM"); + SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd"); + //鍒ゆ柇鍋囨湡鍜岀壒娈婁笂鐝椂闂 + List h_list = rzHolidayMapper.selectRzHolidayList(null); + try{ + //鑾峰彇缁熻鏈堟墍鍦ㄥ勾鐨勫紑濮嬪拰缁撴潫鏃堕棿,缁熻涓骞寸殑宸ヤ綔鏃ユ湡 + String start = sdfm.format(month).split("-")[0] + "-01-01"; + String end = sdfm.format(month).split("-")[0] + "-12-31"; + days -= DateUtil.isWeeked(sdfd.parse(start),sdfd.parse(end),1); + for (RzHoliday rzHoliday : h_list) { + if(rzHoliday.getHoliday().after(sdfd.parse(sdfm.format(month)+"-01")) + && rzHoliday.getHoliday().before(sdfd.parse(sdfm.format(month)+"-" + calendar.get(Calendar.DAY_OF_MONTH)))){ + if("1".equals(rzHoliday.getSpecialFlag())){ + days += 1; + } + } + } + }catch (Exception e){ + e.printStackTrace(); + } + //璁板綍宸ヨ祫璇︽儏 + SysStaffDetail sysStaffDetail = sysStaffDetailMapper.selectSysStaffDetailByStaffId(sysStaff.getUserId()); + //琛ュ姪鎵i櫎姣斾緥 + BigDecimal bfb = new BigDecimal("0.00"); + //鑾峰彇鑰冨嫟缁熻 + RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(sysStaff.getUserId(),month); + //鍒ゆ柇鍏ヨ亴鏃ユ湡锛岀ぞ淇濈即绾虫棩鏈熶互鍓嶅叆鑱岋紝璁$畻琛ュ姪鎵i櫎姣斾緥 + if(sysStaff.getEmploymentDate().before(date)){ + //璁$畻璇峰亣鐧惧垎姣 + BigDecimal b = rzAttendanceStatistical.getAbsenteeism().divide(new BigDecimal("4")); + bfb = b.multiply(new BigDecimal(Constants.SUBSIDY_PROPORTION)); + sysStaffDetail.setAbsenteeismSubsidies(bfb); + }else{ + sysStaffDetail.setAbsenteeismSubsidies(new BigDecimal("1.00")); + } + sysStaffDetail.setNightShiftSubsidies(sysStaffDetail.getNightShiftSubsidies().multiply(new BigDecimal(rzAttendanceStatistical.getNightNumber()))); + sysStaffDetail.setDinnerSubsidies(sysStaffDetail.getDinnerSubsidies().multiply(new BigDecimal(rzAttendanceStatistical.getNightNumber()))); + //鏄惁鎵撳崱 + if("鍚".equals(sysStaff.getClockIn())){ + return sysStaffDetail; + } + //鏌ヨ鍛樺伐鑰冨嫟鏈堢殑鑰冨嫟 + List att_list = rzAttendanceMapper.queryMonthAttendanceByStaffId(sysStaff.getUserId(),month); + //鍒ゆ柇鏄棩宸ヨ祫 + if(sysStaffDetail.getDailyWage().doubleValue() > 0) { + //棰濊柂璧勬棩鏈熷湪宸ヨ祫鏈堜笅涓涓湀 + calendar.set(Calendar.MONTH,1); + //鍏ㄩ钖祫鏃ユ湡鍦ㄥ伐璧勬湀浠ュ墠 + if(sysStaff.getWagesRatioDate().before(month)) { + sysStaffDetail.setBasicSalary(sysStaffDetail.getDailyWage().divide(new BigDecimal("8.0"),2, RoundingMode.HALF_UP) + .multiply(rzAttendanceStatistical.getRealAttendance().add(rzAttendanceStatistical.getWorkOvertimeNumber()))); + }else if(sysStaff.getWagesRatioDate().after(calendar.getTime())) { + sysStaffDetail.setBasicSalary(sysStaffDetail.getDailyWage().divide(new BigDecimal("8.0"),2, RoundingMode.HALF_UP) + .multiply(rzAttendanceStatistical.getRealAttendance().add(rzAttendanceStatistical.getWorkOvertimeNumber())).multiply(new BigDecimal(Constants.SUBSIDY_PERIOD))); + }else { + //鏍规嵁杞鏃ユ湡锛屾煡璇㈠憳宸ョ殑鎵撳崱淇℃伅 + BigDecimal att_work = new BigDecimal("0.0"); + for (RzAttendance rzAttendance : att_list) { + if(rzAttendance.getAttendanceDate().before(sysStaff.getWagesRatioDate())) { + att_work = att_work.add(rzAttendance.getWorkSum()); + } + } + //鏈浆姝i渶瑕佹墸闄ょ殑宸ヨ祫 + BigDecimal work = sysStaffDetail.getDailyWage().divide(new BigDecimal("8.0"),2, RoundingMode.HALF_UP).multiply(att_work).multiply(new BigDecimal(Constants.SUBSIDY_PERIOD_1)); + sysStaffDetail.setBasicSalary(sysStaffDetail.getDailyWage().divide(new BigDecimal("8.0"),2, RoundingMode.HALF_UP) + .multiply(rzAttendanceStatistical.getRealAttendance().add(rzAttendanceStatistical.getWorkOvertimeNumber())).subtract(work)); + } + sysStaffDetail.setOverWages(sysStaffDetail.getDailyWage().divide(new BigDecimal("8.0"),2, RoundingMode.HALF_UP).multiply(rzAttendanceStatistical.getWorkOvertimeNumber())); + sysStaffDetail.setAbsenteeismSalary(new BigDecimal("0.00")); + sysStaffDetail.setMiddleSubsidies(sysStaffDetail.getMiddleSubsidies().multiply(new BigDecimal(rzAttendanceStatistical.getMiddleShiftNumber()))); + } + //鍒ゆ柇鏄皬鏃跺伐 + if(sysStaffDetail.getHoursSalary().doubleValue() > 0) { + //棰濊柂璧勬棩鏈熷湪宸ヨ祫鏈堜笅涓涓湀 + calendar.set(Calendar.MONTH,1); + //鍏ㄩ钖祫鏃ユ湡鍦ㄥ伐璧勬湀浠ュ墠 + if(sysStaff.getWagesRatioDate().before(month)) { + sysStaffDetail.setBasicSalary(sysStaffDetail.getHoursSalary().multiply(rzAttendanceStatistical.getRealAttendance().add(rzAttendanceStatistical.getWorkOvertimeNumber()))); + }else if(sysStaff.getWagesRatioDate().after(calendar.getTime())) { + sysStaffDetail.setBasicSalary(sysStaffDetail.getHoursSalary().multiply(rzAttendanceStatistical.getRealAttendance().add(rzAttendanceStatistical.getWorkOvertimeNumber())).multiply(new BigDecimal(Constants.SUBSIDY_PERIOD))); + }else { + //鏍规嵁杞鏃ユ湡锛屾煡璇㈠憳宸ョ殑鎵撳崱淇℃伅 + BigDecimal att_work = new BigDecimal("0.0"); + for (RzAttendance rzAttendance : att_list) { + if(rzAttendance.getAttendanceDate().before(sysStaff.getWagesRatioDate())) { + att_work = att_work.add(rzAttendance.getWorkSum()); + } + } + //鏈浆姝i渶瑕佹墸闄ょ殑宸ヨ祫 + BigDecimal work = sysStaffDetail.getHoursSalary().multiply(att_work).multiply(new BigDecimal(Constants.SUBSIDY_PERIOD_1)); + sysStaffDetail.setBasicSalary(sysStaffDetail.getHoursSalary().multiply(rzAttendanceStatistical.getRealAttendance().add(rzAttendanceStatistical.getWorkOvertimeNumber())).subtract(work)); + } + sysStaffDetail.setOverWages(sysStaffDetail.getHoursSalary().multiply(rzAttendanceStatistical.getWorkOvertimeNumber())); + sysStaffDetail.setAbsenteeismSalary(new BigDecimal("0.00")); + sysStaffDetail.setMiddleSubsidies(sysStaffDetail.getMiddleSubsidies().multiply(new BigDecimal(rzAttendanceStatistical.getMiddleShiftNumber()))); + } + //鍒ゆ柇鏄湀宸ヨ祫 + if(sysStaffDetail.getBasicSalary().doubleValue() > 0 || sysStaffDetail.getJobsSalary().longValue() > 0) { + //棰濊柂璧勬棩鏈熷湪宸ヨ祫鏈堜笅涓涓湀 + calendar.set(Calendar.MONTH,1); + //鍏ㄩ钖祫鏃ユ湡鍦ㄥ伐璧勬湀浠ュ墠 + if(sysStaff.getWagesRatioDate().before(month)) { + sysStaffDetail.setBasicSalary(sysStaffDetail.getBasicSalary().add(sysStaffDetail.getJobsSalary())); + }else if(sysStaff.getWagesRatioDate().after(calendar.getTime())) { + BigDecimal hours = sysStaffDetail.getBasicSalary().add(sysStaffDetail.getJobsSalary()).divide(rzAttendanceStatistical.getShouldAttendance(),2, RoundingMode.HALF_UP); + sysStaffDetail.setBasicSalary(hours.multiply(rzAttendanceStatistical.getRealAttendance()).multiply(new BigDecimal(Constants.SUBSIDY_PERIOD))); + }else { + //鏍规嵁杞鏃ユ湡锛屾煡璇㈠憳宸ョ殑鎵撳崱淇℃伅 + BigDecimal att_work = new BigDecimal("0.0"); + for (RzAttendance rzAttendance : att_list) { + if(rzAttendance.getAttendanceDate().before(sysStaff.getWagesRatioDate())) { + att_work = att_work.add(rzAttendance.getWorkSum()); + } + } + //鏈浆姝i渶瑕佹墸闄ょ殑宸ヨ祫 + BigDecimal work = sysStaffDetail.getBasicSalary().add(sysStaffDetail.getJobsSalary()).divide(rzAttendanceStatistical.getShouldAttendance(),2, RoundingMode.HALF_UP) + .multiply(att_work).multiply(new BigDecimal(Constants.SUBSIDY_PERIOD_1)); + sysStaffDetail.setBasicSalary(sysStaffDetail.getBasicSalary().add(sysStaffDetail.getJobsSalary()).subtract(work)); + } + //璁$畻鏈堝伐璧勭殑姣忓皬鏃讹紝宸ヨ祫 + BigDecimal evrymoney = sysStaffDetail.getBasicSalary().multiply(new BigDecimal("11.00")) + .add(sysStaffDetail.getBasicSalary().multiply(new BigDecimal(Constants.SUBSIDY_PERIOD))) + .divide(new BigDecimal(days).multiply(new BigDecimal("8.00")),2, RoundingMode.HALF_UP); + sysStaffDetail.setAbsenteeismSalary(evrymoney.multiply(rzAttendanceStatistical.getShouldAttendance().subtract(rzAttendanceStatistical.getRealAttendance()))); + sysStaffDetail.setMiddleSubsidies(new BigDecimal("0.00")); + //鏍规嵁鐢ㄦ埛鑾峰彇褰撳墠鐨勫姞鐝儏鍐 + RzSpecialOverTime rSpecialOverTime = rzSpecialOverTimeMapper.selectRzSpecialOverTimeByUserIdAndDate(sysStaff.getUserId(),month); + if(StringUtils.isNull(rSpecialOverTime)){ + sysStaffDetail.setOverWages(new BigDecimal("0.00")); + }else{ + sysStaffDetail.setOverWages(evrymoney.multiply(rSpecialOverTime.getSickHours())); + } + } + //鍒ゆ柇鍛樺伐鐨勪笂鐝椂闀匡紝璁剧疆淇濋櫓鐨勮ˉ浜 + BigDecimal baifenbi = rzAttendanceStatistical.getRealAttendance().divide(rzAttendanceStatistical.getShouldAttendance(),2, RoundingMode.HALF_UP); + if(baifenbi.compareTo(new BigDecimal("0.20")) > 0 && baifenbi.compareTo(new BigDecimal("0.40")) <= 0){ + sysStaffDetail.setCountInsurance(sysStaffDetail.getCountInsurance().multiply(new BigDecimal("0.70"))); + }else if(baifenbi.compareTo(new BigDecimal("0.40")) > 0 && baifenbi.compareTo(new BigDecimal("0.60")) <= 0){ + sysStaffDetail.setCountInsurance(sysStaffDetail.getCountInsurance().multiply(new BigDecimal("0.50"))); + }else if(baifenbi.compareTo(new BigDecimal("0.60")) > 0){ + sysStaffDetail.setCountInsurance(sysStaffDetail.getCountInsurance()); + }else{ + sysStaffDetail.setCountInsurance(new BigDecimal("0.00")); + } + return sysStaffDetail; + } + /** + * 淇敼宸ヨ祫璇︽儏 + * + * @param rzSalaryDetail 宸ヨ祫璇︽儏 + * @return 缁撴灉 + */ + @Override + public int updateRzSalaryDetail(RzSalaryDetail rzSalaryDetail) + { + rzSalaryDetail.setUpdateTime(DateUtils.getNowDate()); + rzSalaryDetail.setUpdateBy(SecurityUtils.getUsername()); + return rzSalaryDetailMapper.updateRzSalaryDetail(rzSalaryDetail); + } + /** + * 鍒犻櫎宸ヨ祫璇︽儏淇℃伅 + * + * @param id 宸ヨ祫璇︽儏涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteRzSalaryDetailById(Long id) + { + RzSalaryDetail rzSalaryDetail = rzSalaryDetailMapper.selectRzSalaryDetailById(id); + rzSalaryDetail.setDelFlag(Constants.DELETE_FLAG_1); + rzSalaryDetail.setUpdateTime(DateUtils.getNowDate()); + rzSalaryDetail.setUpdateBy(SecurityUtils.getUsername()); + return rzSalaryDetailMapper.updateRzSalaryDetail(rzSalaryDetail); + } + /** + * 鏍规嵁鍏徃鍚嶇О鏌ヨ宸ヨ祫鍗 + * @return + */ + @Override + public List selectSalaryDetailByDeptId(Long deptId,Date date){ + return rzSalaryDetailMapper.selectSalaryDetailByDeptId(deptId,date); + } + @Override + public List selectSalaryDetailByWbFlag(String wbFlag,Date date){ + return rzSalaryDetailMapper.selectSalaryDetailByWbFlag(wbFlag,date); + } +} diff --git a/evo-admin/src/main/java/com/evo/finance/service/impl/RzSalaryStatisticsServiceImpl.java b/evo-admin/src/main/java/com/evo/finance/service/impl/RzSalaryStatisticsServiceImpl.java new file mode 100644 index 0000000..46fe17e --- /dev/null +++ b/evo-admin/src/main/java/com/evo/finance/service/impl/RzSalaryStatisticsServiceImpl.java @@ -0,0 +1,89 @@ +package com.evo.finance.service.impl; + +import java.util.List; +import com.evo.common.constant.Constants; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.SecurityUtils; +import com.evo.finance.domain.RzSalaryDetail; +import com.evo.finance.mapper.RzSalaryDetailMapper; +import com.evo.system.domain.SysStaffDetail; +import com.evo.system.mapper.SysStaffDetailMapper; +import org.springframework.stereotype.Service; +import com.evo.finance.mapper.RzSalaryStatisticsMapper; +import com.evo.finance.domain.RzSalaryStatistics; +import com.evo.finance.service.IRzSalaryStatisticsService; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; + +/** + * 宸ヨ祫缁熻Service涓氬姟灞傚鐞 + * + * @author evo + * @date 2024-11-26 + */ +@Service +public class RzSalaryStatisticsServiceImpl implements IRzSalaryStatisticsService +{ + @Resource + private RzSalaryStatisticsMapper rzSalaryStatisticsMapper; + @Resource + private RzSalaryDetailMapper rzSalaryDetailMapper; //宸ヨ祫璇︽儏 + @Resource + private SysStaffDetailMapper sysStaffDetailMapper; //鍛樺伐璇︽儏 + /** + * 鏌ヨ宸ヨ祫缁熻鍒楄〃 + * + * @param rzSalaryStatistics 宸ヨ祫缁熻 + * @return 宸ヨ祫缁熻 + */ + @Override + public List selectRzSalaryStatisticsList(RzSalaryStatistics rzSalaryStatistics) + { + return rzSalaryStatisticsMapper.selectRzSalaryStatisticsList(rzSalaryStatistics); + } + + /** + * 鍒犻櫎宸ヨ祫缁熻淇℃伅 + * + * @param id 宸ヨ祫缁熻涓婚敭 + * @return 缁撴灉 + */ + @Override + @Transactional + public AjaxResult deleteRzSalaryStatisticsById(Long id) + { + RzSalaryStatistics rzSalaryStatistics = rzSalaryStatisticsMapper.selectRzSalaryStatisticsById(id); + //鏍规嵁鏈堜唤鏌ヨ鍛樺伐鐨勫伐璧勭粺璁 + List gz_list = rzSalaryDetailMapper.selectRzSalaryDetailByMonth(rzSalaryStatistics.getMonth()); + for (RzSalaryDetail rzSalaryDetail : gz_list) { + //鏍规嵁鍛樺伐ID鏌ヨ鍛樺伐璇︽儏锛屼慨鏀瑰憳宸ヨ鎯 + SysStaffDetail sysStaffDetail = sysStaffDetailMapper.selectSysStaffDetailByStaffId(rzSalaryDetail.getStaffId()); + //淇敼涓汉璇︽儏 + sysStaffDetail.setAggregatePersonalIncomeTax(sysStaffDetail.getAggregatePersonalIncomeTax().subtract(rzSalaryDetail.getTaxPayable())); + sysStaffDetail.setSpecialDeduction(sysStaffDetail.getSpecialDeduction().subtract(rzSalaryDetail.getSpecialDeduction())); + sysStaffDetail.setTotalWages(sysStaffDetail.getTotalWages().subtract(rzSalaryDetail.getSalaryBeforeTax())); + int i = sysStaffDetailMapper.updateSysStaffDetail(sysStaffDetail); + if(i < 1){ + return AjaxResult.error(); + } + //鍒犻櫎涓汉鍛樺伐宸ヨ祫璇︽儏 + rzSalaryDetail.setDelFlag(Constants.DELETE_FLAG_1); + rzSalaryDetail.setUpdateBy(SecurityUtils.getUsername()); + rzSalaryDetail.setUpdateTime(DateUtils.getNowDate()); + i = rzSalaryDetailMapper.updateRzSalaryDetail(rzSalaryDetail); + if(i < 1){ + return AjaxResult.error(); + } + } + rzSalaryStatistics.setDelFlag(Constants.DELETE_FLAG_1); + rzSalaryStatistics.setUpdateTime(DateUtils.getNowDate()); + rzSalaryStatistics.setUpdateBy(SecurityUtils.getUsername()); + int p = rzSalaryStatisticsMapper.updateRzSalaryStatistics(rzSalaryStatistics); + if(p< 1){ + return AjaxResult.error(); + } + return AjaxResult.success(); + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/aspectj/DataScopeAspect.java b/evo-admin/src/main/java/com/evo/framework/aspectj/DataScopeAspect.java new file mode 100644 index 0000000..7fc2832 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/aspectj/DataScopeAspect.java @@ -0,0 +1,184 @@ +package com.evo.framework.aspectj; + +import java.util.ArrayList; +import java.util.List; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.springframework.stereotype.Component; +import com.evo.common.annotation.DataScope; +import com.evo.common.core.domain.BaseEntity; +import com.evo.common.core.domain.entity.SysRole; +import com.evo.common.core.domain.entity.SysUser; +import com.evo.common.core.domain.model.LoginUser; +import com.evo.common.core.text.Convert; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.framework.security.context.PermissionContextHolder; + +/** + * 鏁版嵁杩囨护澶勭悊 + * + * @author evo + */ +@Aspect +@Component +public class DataScopeAspect +{ + /** + * 鍏ㄩ儴鏁版嵁鏉冮檺 + */ + public static final String DATA_SCOPE_ALL = "1"; + + /** + * 鑷畾鏁版嵁鏉冮檺 + */ + public static final String DATA_SCOPE_CUSTOM = "2"; + + /** + * 閮ㄩ棬鏁版嵁鏉冮檺 + */ + public static final String DATA_SCOPE_DEPT = "3"; + + /** + * 閮ㄩ棬鍙婁互涓嬫暟鎹潈闄 + */ + public static final String DATA_SCOPE_DEPT_AND_CHILD = "4"; + + /** + * 浠呮湰浜烘暟鎹潈闄 + */ + public static final String DATA_SCOPE_SELF = "5"; + + /** + * 鏁版嵁鏉冮檺杩囨护鍏抽敭瀛 + */ + public static final String DATA_SCOPE = "dataScope"; + + @Before("@annotation(controllerDataScope)") + public void doBefore(JoinPoint point, DataScope controllerDataScope) throws Throwable + { + clearDataScope(point); + handleDataScope(point, controllerDataScope); + } + + protected void handleDataScope(final JoinPoint joinPoint, DataScope controllerDataScope) + { + // 鑾峰彇褰撳墠鐨勭敤鎴 + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (StringUtils.isNotNull(loginUser)) + { + SysUser currentUser = loginUser.getUser(); + // 濡傛灉鏄秴绾х鐞嗗憳锛屽垯涓嶈繃婊ゆ暟鎹 + if (StringUtils.isNotNull(currentUser) && !currentUser.isAdmin()) + { + String permission = StringUtils.defaultIfEmpty(controllerDataScope.permission(), PermissionContextHolder.getContext()); + dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(), + controllerDataScope.userAlias(), permission); + } + } + } + + /** + * 鏁版嵁鑼冨洿杩囨护 + * + * @param joinPoint 鍒囩偣 + * @param user 鐢ㄦ埛 + * @param deptAlias 閮ㄩ棬鍒悕 + * @param userAlias 鐢ㄦ埛鍒悕 + * @param permission 鏉冮檺瀛楃 + */ + public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias, String permission) + { + StringBuilder sqlString = new StringBuilder(); + List conditions = new ArrayList(); + List scopeCustomIds = new ArrayList(); + user.getRoles().forEach(role -> { + if (DATA_SCOPE_CUSTOM.equals(role.getDataScope()) && StringUtils.containsAny(role.getPermissions(), Convert.toStrArray(permission))) + { + scopeCustomIds.add(Convert.toStr(role.getRoleId())); + } + }); + + for (SysRole role : user.getRoles()) + { + String dataScope = role.getDataScope(); + if (conditions.contains(dataScope)) + { + continue; + } + if (!StringUtils.containsAny(role.getPermissions(), Convert.toStrArray(permission))) + { + continue; + } + if (DATA_SCOPE_ALL.equals(dataScope)) + { + sqlString = new StringBuilder(); + conditions.add(dataScope); + break; + } + else if (DATA_SCOPE_CUSTOM.equals(dataScope)) + { + if (scopeCustomIds.size() > 1) + { + // 澶氫釜鑷畾鏁版嵁鏉冮檺浣跨敤in鏌ヨ锛岄伩鍏嶅娆℃嫾鎺ャ + sqlString.append(StringUtils.format(" OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id in ({}) ) ", deptAlias, String.join(",", scopeCustomIds))); + } + else + { + sqlString.append(StringUtils.format(" OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias, role.getRoleId())); + } + } + else if (DATA_SCOPE_DEPT.equals(dataScope)) + { + sqlString.append(StringUtils.format(" OR {}.dept_id = {} ", deptAlias, user.getDeptId())); + } + else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope)) + { + sqlString.append(StringUtils.format(" OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )", deptAlias, user.getDeptId(), user.getDeptId())); + } + else if (DATA_SCOPE_SELF.equals(dataScope)) + { + if (StringUtils.isNotBlank(userAlias)) + { + sqlString.append(StringUtils.format(" OR {}.user_id = {} ", userAlias, user.getUserId())); + } + else + { + // 鏁版嵁鏉冮檺涓轰粎鏈汉涓旀病鏈塽serAlias鍒悕涓嶆煡璇换浣曟暟鎹 + sqlString.append(StringUtils.format(" OR {}.dept_id = 0 ", deptAlias)); + } + } + conditions.add(dataScope); + } + + // 瑙掕壊閮戒笉鍖呭惈浼犻掕繃鏉ョ殑鏉冮檺瀛楃锛岃繖涓椂鍊檚qlString涔熶細涓虹┖锛屾墍浠ヨ闄愬埗涓涓,涓嶆煡璇换浣曟暟鎹 + if (StringUtils.isEmpty(conditions)) + { + sqlString.append(StringUtils.format(" OR {}.dept_id = 0 ", deptAlias)); + } + + if (StringUtils.isNotBlank(sqlString.toString())) + { + Object params = joinPoint.getArgs()[0]; + if (StringUtils.isNotNull(params) && params instanceof BaseEntity) + { + BaseEntity baseEntity = (BaseEntity) params; + baseEntity.getParams().put(DATA_SCOPE, " AND (" + sqlString.substring(4) + ")"); + } + } + } + + /** + * 鎷兼帴鏉冮檺sql鍓嶅厛娓呯┖params.dataScope鍙傛暟闃叉娉ㄥ叆 + */ + private void clearDataScope(final JoinPoint joinPoint) + { + Object params = joinPoint.getArgs()[0]; + if (StringUtils.isNotNull(params) && params instanceof BaseEntity) + { + BaseEntity baseEntity = (BaseEntity) params; + baseEntity.getParams().put(DATA_SCOPE, ""); + } + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/aspectj/DataSourceAspect.java b/evo-admin/src/main/java/com/evo/framework/aspectj/DataSourceAspect.java new file mode 100644 index 0000000..6f724fd --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/aspectj/DataSourceAspect.java @@ -0,0 +1,72 @@ +package com.evo.framework.aspectj; + +import java.util.Objects; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; +import com.evo.common.annotation.DataSource; +import com.evo.common.utils.StringUtils; +import com.evo.framework.datasource.DynamicDataSourceContextHolder; + +/** + * 澶氭暟鎹簮澶勭悊 + * + * @author evo + */ +@Aspect +@Order(1) +@Component +public class DataSourceAspect +{ + protected Logger logger = LoggerFactory.getLogger(getClass()); + + @Pointcut("@annotation(com.evo.common.annotation.DataSource)" + + "|| @within(com.evo.common.annotation.DataSource)") + public void dsPointCut() + { + + } + + @Around("dsPointCut()") + public Object around(ProceedingJoinPoint point) throws Throwable + { + DataSource dataSource = getDataSource(point); + + if (StringUtils.isNotNull(dataSource)) + { + DynamicDataSourceContextHolder.setDataSourceType(dataSource.value().name()); + } + + try + { + return point.proceed(); + } + finally + { + // 閿姣佹暟鎹簮 鍦ㄦ墽琛屾柟娉曚箣鍚 + DynamicDataSourceContextHolder.clearDataSourceType(); + } + } + + /** + * 鑾峰彇闇瑕佸垏鎹㈢殑鏁版嵁婧 + */ + public DataSource getDataSource(ProceedingJoinPoint point) + { + MethodSignature signature = (MethodSignature) point.getSignature(); + DataSource dataSource = AnnotationUtils.findAnnotation(signature.getMethod(), DataSource.class); + if (Objects.nonNull(dataSource)) + { + return dataSource; + } + + return AnnotationUtils.findAnnotation(signature.getDeclaringType(), DataSource.class); + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/aspectj/LogAspect.java b/evo-admin/src/main/java/com/evo/framework/aspectj/LogAspect.java new file mode 100644 index 0000000..36c2fb7 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/aspectj/LogAspect.java @@ -0,0 +1,255 @@ +package com.evo.framework.aspectj; + +import java.util.Collection; +import java.util.Map; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.apache.commons.lang3.ArrayUtils; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.NamedThreadLocal; +import org.springframework.stereotype.Component; +import org.springframework.validation.BindingResult; +import org.springframework.web.multipart.MultipartFile; +import com.alibaba.fastjson2.JSON; +import com.evo.common.annotation.Log; +import com.evo.common.core.domain.entity.SysUser; +import com.evo.common.core.domain.model.LoginUser; +import com.evo.common.enums.BusinessStatus; +import com.evo.common.enums.HttpMethod; +import com.evo.common.filter.PropertyPreExcludeFilter; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.ServletUtils; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.ip.IpUtils; +import com.evo.framework.manager.AsyncManager; +import com.evo.framework.manager.factory.AsyncFactory; +import com.evo.system.domain.SysOperLog; + +/** + * 鎿嶄綔鏃ュ織璁板綍澶勭悊 + * + * @author evo + */ +@Aspect +@Component +public class LogAspect +{ + private static final Logger log = LoggerFactory.getLogger(LogAspect.class); + + /** 鎺掗櫎鏁忔劅灞炴у瓧娈 */ + public static final String[] EXCLUDE_PROPERTIES = { "password", "oldPassword", "newPassword", "confirmPassword" }; + + /** 璁$畻鎿嶄綔娑堣楁椂闂 */ + private static final ThreadLocal TIME_THREADLOCAL = new NamedThreadLocal("Cost Time"); + + /** + * 澶勭悊璇锋眰鍓嶆墽琛 + */ + @Before(value = "@annotation(controllerLog)") + public void boBefore(JoinPoint joinPoint, Log controllerLog) + { + TIME_THREADLOCAL.set(System.currentTimeMillis()); + } + + /** + * 澶勭悊瀹岃姹傚悗鎵ц + * + * @param joinPoint 鍒囩偣 + */ + @AfterReturning(pointcut = "@annotation(controllerLog)", returning = "jsonResult") + public void doAfterReturning(JoinPoint joinPoint, Log controllerLog, Object jsonResult) + { + handleLog(joinPoint, controllerLog, null, jsonResult); + } + + /** + * 鎷︽埅寮傚父鎿嶄綔 + * + * @param joinPoint 鍒囩偣 + * @param e 寮傚父 + */ + @AfterThrowing(value = "@annotation(controllerLog)", throwing = "e") + public void doAfterThrowing(JoinPoint joinPoint, Log controllerLog, Exception e) + { + handleLog(joinPoint, controllerLog, e, null); + } + + protected void handleLog(final JoinPoint joinPoint, Log controllerLog, final Exception e, Object jsonResult) + { + try + { + // 鑾峰彇褰撳墠鐨勭敤鎴 + LoginUser loginUser = SecurityUtils.getLoginUser(); + + // *========鏁版嵁搴撴棩蹇=========*// + SysOperLog operLog = new SysOperLog(); + operLog.setStatus(BusinessStatus.SUCCESS.ordinal()); + // 璇锋眰鐨勫湴鍧 + String ip = IpUtils.getIpAddr(); + operLog.setOperIp(ip); + operLog.setOperUrl(StringUtils.substring(ServletUtils.getRequest().getRequestURI(), 0, 255)); + if (loginUser != null) + { + operLog.setOperName(loginUser.getUsername()); + SysUser currentUser = loginUser.getUser(); + if (StringUtils.isNotNull(currentUser) && StringUtils.isNotNull(currentUser.getDept())) + { + operLog.setDeptName(currentUser.getDept().getDeptName()); + } + } + + if (e != null) + { + operLog.setStatus(BusinessStatus.FAIL.ordinal()); + operLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000)); + } + // 璁剧疆鏂规硶鍚嶇О + String className = joinPoint.getTarget().getClass().getName(); + String methodName = joinPoint.getSignature().getName(); + operLog.setMethod(className + "." + methodName + "()"); + // 璁剧疆璇锋眰鏂瑰紡 + operLog.setRequestMethod(ServletUtils.getRequest().getMethod()); + // 澶勭悊璁剧疆娉ㄨВ涓婄殑鍙傛暟 + getControllerMethodDescription(joinPoint, controllerLog, operLog, jsonResult); + // 璁剧疆娑堣楁椂闂 + operLog.setCostTime(System.currentTimeMillis() - TIME_THREADLOCAL.get()); + // 淇濆瓨鏁版嵁搴 + AsyncManager.me().execute(AsyncFactory.recordOper(operLog)); + } + catch (Exception exp) + { + // 璁板綍鏈湴寮傚父鏃ュ織 + log.error("寮傚父淇℃伅:{}", exp.getMessage()); + exp.printStackTrace(); + } + finally + { + TIME_THREADLOCAL.remove(); + } + } + + /** + * 鑾峰彇娉ㄨВ涓鏂规硶鐨勬弿杩颁俊鎭 鐢ㄤ簬Controller灞傛敞瑙 + * + * @param log 鏃ュ織 + * @param operLog 鎿嶄綔鏃ュ織 + * @throws Exception + */ + public void getControllerMethodDescription(JoinPoint joinPoint, Log log, SysOperLog operLog, Object jsonResult) throws Exception + { + // 璁剧疆action鍔ㄤ綔 + operLog.setBusinessType(log.businessType().ordinal()); + // 璁剧疆鏍囬 + operLog.setTitle(log.title()); + // 璁剧疆鎿嶄綔浜虹被鍒 + operLog.setOperatorType(log.operatorType().ordinal()); + // 鏄惁闇瑕佷繚瀛榬equest锛屽弬鏁板拰鍊 + if (log.isSaveRequestData()) + { + // 鑾峰彇鍙傛暟鐨勪俊鎭紝浼犲叆鍒版暟鎹簱涓 + setRequestValue(joinPoint, operLog, log.excludeParamNames()); + } + // 鏄惁闇瑕佷繚瀛榬esponse锛屽弬鏁板拰鍊 + if (log.isSaveResponseData() && StringUtils.isNotNull(jsonResult)) + { + operLog.setJsonResult(StringUtils.substring(JSON.toJSONString(jsonResult), 0, 2000)); + } + } + + /** + * 鑾峰彇璇锋眰鐨勫弬鏁帮紝鏀惧埌log涓 + * + * @param operLog 鎿嶄綔鏃ュ織 + * @throws Exception 寮傚父 + */ + private void setRequestValue(JoinPoint joinPoint, SysOperLog operLog, String[] excludeParamNames) throws Exception + { + Map paramsMap = ServletUtils.getParamMap(ServletUtils.getRequest()); + String requestMethod = operLog.getRequestMethod(); + if (StringUtils.isEmpty(paramsMap) + && (HttpMethod.PUT.name().equals(requestMethod) || HttpMethod.POST.name().equals(requestMethod))) + { + String params = argsArrayToString(joinPoint.getArgs(), excludeParamNames); + operLog.setOperParam(StringUtils.substring(params, 0, 2000)); + } + else + { + operLog.setOperParam(StringUtils.substring(JSON.toJSONString(paramsMap, excludePropertyPreFilter(excludeParamNames)), 0, 2000)); + } + } + + /** + * 鍙傛暟鎷艰 + */ + private String argsArrayToString(Object[] paramsArray, String[] excludeParamNames) + { + String params = ""; + if (paramsArray != null && paramsArray.length > 0) + { + for (Object o : paramsArray) + { + if (StringUtils.isNotNull(o) && !isFilterObject(o)) + { + try + { + String jsonObj = JSON.toJSONString(o, excludePropertyPreFilter(excludeParamNames)); + params += jsonObj.toString() + " "; + } + catch (Exception e) + { + } + } + } + } + return params.trim(); + } + + /** + * 蹇界暐鏁忔劅灞炴 + */ + public PropertyPreExcludeFilter excludePropertyPreFilter(String[] excludeParamNames) + { + return new PropertyPreExcludeFilter().addExcludes(ArrayUtils.addAll(EXCLUDE_PROPERTIES, excludeParamNames)); + } + + /** + * 鍒ゆ柇鏄惁闇瑕佽繃婊ょ殑瀵硅薄銆 + * + * @param o 瀵硅薄淇℃伅銆 + * @return 濡傛灉鏄渶瑕佽繃婊ょ殑瀵硅薄锛屽垯杩斿洖true锛涘惁鍒欒繑鍥瀎alse銆 + */ + @SuppressWarnings("rawtypes") + public boolean isFilterObject(final Object o) + { + Class clazz = o.getClass(); + if (clazz.isArray()) + { + return clazz.getComponentType().isAssignableFrom(MultipartFile.class); + } + else if (Collection.class.isAssignableFrom(clazz)) + { + Collection collection = (Collection) o; + for (Object value : collection) + { + return value instanceof MultipartFile; + } + } + else if (Map.class.isAssignableFrom(clazz)) + { + Map map = (Map) o; + for (Object value : map.entrySet()) + { + Map.Entry entry = (Map.Entry) value; + return entry.getValue() instanceof MultipartFile; + } + } + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse + || o instanceof BindingResult; + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/aspectj/RateLimiterAspect.java b/evo-admin/src/main/java/com/evo/framework/aspectj/RateLimiterAspect.java new file mode 100644 index 0000000..36e0044 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/aspectj/RateLimiterAspect.java @@ -0,0 +1,89 @@ +package com.evo.framework.aspectj; + +import java.lang.reflect.Method; +import java.util.Collections; +import java.util.List; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.script.RedisScript; +import org.springframework.stereotype.Component; +import com.evo.common.annotation.RateLimiter; +import com.evo.common.enums.LimitType; +import com.evo.common.exception.ServiceException; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.ip.IpUtils; + +/** + * 闄愭祦澶勭悊 + * + * @author evo + */ +@Aspect +@Component +public class RateLimiterAspect +{ + private static final Logger log = LoggerFactory.getLogger(RateLimiterAspect.class); + + private RedisTemplate redisTemplate; + + private RedisScript limitScript; + + @Autowired + public void setRedisTemplate1(RedisTemplate redisTemplate) + { + this.redisTemplate = redisTemplate; + } + + @Autowired + public void setLimitScript(RedisScript limitScript) + { + this.limitScript = limitScript; + } + + @Before("@annotation(rateLimiter)") + public void doBefore(JoinPoint point, RateLimiter rateLimiter) throws Throwable + { + int time = rateLimiter.time(); + int count = rateLimiter.count(); + + String combineKey = getCombineKey(rateLimiter, point); + List keys = Collections.singletonList(combineKey); + try + { + Long number = redisTemplate.execute(limitScript, keys, count, time); + if (StringUtils.isNull(number) || number.intValue() > count) + { + throw new ServiceException("璁块棶杩囦簬棰戠箒锛岃绋嶅欏啀璇"); + } + log.info("闄愬埗璇锋眰'{}',褰撳墠璇锋眰'{}',缂撳瓨key'{}'", count, number.intValue(), combineKey); + } + catch (ServiceException e) + { + throw e; + } + catch (Exception e) + { + throw new RuntimeException("鏈嶅姟鍣ㄩ檺娴佸紓甯革紝璇风◢鍊欏啀璇"); + } + } + + public String getCombineKey(RateLimiter rateLimiter, JoinPoint point) + { + StringBuffer stringBuffer = new StringBuffer(rateLimiter.key()); + if (rateLimiter.limitType() == LimitType.IP) + { + stringBuffer.append(IpUtils.getIpAddr()).append("-"); + } + MethodSignature signature = (MethodSignature) point.getSignature(); + Method method = signature.getMethod(); + Class targetClass = method.getDeclaringClass(); + stringBuffer.append(targetClass.getName()).append("-").append(method.getName()); + return stringBuffer.toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/config/ApplicationConfig.java b/evo-admin/src/main/java/com/evo/framework/config/ApplicationConfig.java new file mode 100644 index 0000000..05a94cf --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/config/ApplicationConfig.java @@ -0,0 +1,30 @@ +package com.evo.framework.config; + +import java.util.TimeZone; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.EnableAspectJAutoProxy; + +/** + * 绋嬪簭娉ㄨВ閰嶇疆 + * + * @author evo + */ +@Configuration +// 琛ㄧず閫氳繃aop妗嗘灦鏆撮湶璇ヤ唬鐞嗗璞,AopContext鑳藉璁块棶 +@EnableAspectJAutoProxy(exposeProxy = true) +// 鎸囧畾瑕佹壂鎻忕殑Mapper绫荤殑鍖呯殑璺緞 +@MapperScan("com.evo.**.mapper") +public class ApplicationConfig +{ + /** + * 鏃跺尯閰嶇疆 + */ + @Bean + public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() + { + return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault()); + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/config/DruidConfig.java b/evo-admin/src/main/java/com/evo/framework/config/DruidConfig.java new file mode 100644 index 0000000..ab605df --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/config/DruidConfig.java @@ -0,0 +1,126 @@ +package com.evo.framework.config; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.sql.DataSource; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; +import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties; +import com.alibaba.druid.util.Utils; +import com.evo.common.enums.DataSourceType; +import com.evo.common.utils.spring.SpringUtils; +import com.evo.framework.config.properties.DruidProperties; +import com.evo.framework.datasource.DynamicDataSource; + +/** + * druid 閰嶇疆澶氭暟鎹簮 + * + * @author evo + */ +@Configuration +public class DruidConfig +{ + @Bean + @ConfigurationProperties("spring.datasource.druid.master") + public DataSource masterDataSource(DruidProperties druidProperties) + { + DruidDataSource dataSource = DruidDataSourceBuilder.create().build(); + return druidProperties.dataSource(dataSource); + } + + @Bean + @ConfigurationProperties("spring.datasource.druid.slave") + @ConditionalOnProperty(prefix = "spring.datasource.druid.slave", name = "enabled", havingValue = "true") + public DataSource slaveDataSource(DruidProperties druidProperties) + { + DruidDataSource dataSource = DruidDataSourceBuilder.create().build(); + return druidProperties.dataSource(dataSource); + } + + @Bean(name = "dynamicDataSource") + @Primary + public DynamicDataSource dataSource(DataSource masterDataSource) + { + Map targetDataSources = new HashMap<>(); + targetDataSources.put(DataSourceType.MASTER.name(), masterDataSource); + setDataSource(targetDataSources, DataSourceType.SLAVE.name(), "slaveDataSource"); + return new DynamicDataSource(masterDataSource, targetDataSources); + } + + /** + * 璁剧疆鏁版嵁婧 + * + * @param targetDataSources 澶囬夋暟鎹簮闆嗗悎 + * @param sourceName 鏁版嵁婧愬悕绉 + * @param beanName bean鍚嶇О + */ + public void setDataSource(Map targetDataSources, String sourceName, String beanName) + { + try + { + DataSource dataSource = SpringUtils.getBean(beanName); + targetDataSources.put(sourceName, dataSource); + } + catch (Exception e) + { + } + } + + /** + * 鍘婚櫎鐩戞帶椤甸潰搴曢儴鐨勫箍鍛 + */ + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Bean + @ConditionalOnProperty(name = "spring.datasource.druid.statViewServlet.enabled", havingValue = "true") + public FilterRegistrationBean removeDruidFilterRegistrationBean(DruidStatProperties properties) + { + // 鑾峰彇web鐩戞帶椤甸潰鐨勫弬鏁 + DruidStatProperties.StatViewServlet config = properties.getStatViewServlet(); + // 鎻愬彇common.js鐨勯厤缃矾寰 + String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*"; + String commonJsPattern = pattern.replaceAll("\\*", "js/common.js"); + final String filePath = "support/http/resources/js/common.js"; + // 鍒涘缓filter杩涜杩囨护 + Filter filter = new Filter() + { + @Override + public void init(javax.servlet.FilterConfig filterConfig) throws ServletException + { + } + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException + { + chain.doFilter(request, response); + // 閲嶇疆缂撳啿鍖猴紝鍝嶅簲澶翠笉浼氳閲嶇疆 + response.resetBuffer(); + // 鑾峰彇common.js + String text = Utils.readFromResource(filePath); + // 姝e垯鏇挎崲banner, 闄ゅ幓搴曢儴鐨勫箍鍛婁俊鎭 + text = text.replaceAll("
", ""); + text = text.replaceAll("powered.*?shrek.wang", ""); + response.getWriter().write(text); + } + @Override + public void destroy() + { + } + }; + FilterRegistrationBean registrationBean = new FilterRegistrationBean(); + registrationBean.setFilter(filter); + registrationBean.addUrlPatterns(commonJsPattern); + return registrationBean; + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/config/FastJson2JsonRedisSerializer.java b/evo-admin/src/main/java/com/evo/framework/config/FastJson2JsonRedisSerializer.java new file mode 100644 index 0000000..1c74468 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/config/FastJson2JsonRedisSerializer.java @@ -0,0 +1,52 @@ +package com.evo.framework.config; + +import java.nio.charset.Charset; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.SerializationException; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONReader; +import com.alibaba.fastjson2.JSONWriter; +import com.alibaba.fastjson2.filter.Filter; +import com.evo.common.constant.Constants; + +/** + * Redis浣跨敤FastJson搴忓垪鍖 + * + * @author evo + */ +public class FastJson2JsonRedisSerializer implements RedisSerializer +{ + public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); + + static final Filter AUTO_TYPE_FILTER = JSONReader.autoTypeFilter(Constants.JSON_WHITELIST_STR); + + private Class clazz; + + public FastJson2JsonRedisSerializer(Class clazz) + { + super(); + this.clazz = clazz; + } + + @Override + public byte[] serialize(T t) throws SerializationException + { + if (t == null) + { + return new byte[0]; + } + return JSON.toJSONString(t, JSONWriter.Feature.WriteClassName).getBytes(DEFAULT_CHARSET); + } + + @Override + public T deserialize(byte[] bytes) throws SerializationException + { + if (bytes == null || bytes.length <= 0) + { + return null; + } + String str = new String(bytes, DEFAULT_CHARSET); + + return JSON.parseObject(str, clazz, AUTO_TYPE_FILTER); + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/config/FilterConfig.java b/evo-admin/src/main/java/com/evo/framework/config/FilterConfig.java new file mode 100644 index 0000000..821b6a7 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/config/FilterConfig.java @@ -0,0 +1,58 @@ +package com.evo.framework.config; + +import java.util.HashMap; +import java.util.Map; +import javax.servlet.DispatcherType; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import com.evo.common.filter.RepeatableFilter; +import com.evo.common.filter.XssFilter; +import com.evo.common.utils.StringUtils; + +/** + * Filter閰嶇疆 + * + * @author evo + */ +@Configuration +public class FilterConfig +{ + @Value("${xss.excludes}") + private String excludes; + + @Value("${xss.urlPatterns}") + private String urlPatterns; + + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Bean + @ConditionalOnProperty(value = "xss.enabled", havingValue = "true") + public FilterRegistrationBean xssFilterRegistration() + { + FilterRegistrationBean registration = new FilterRegistrationBean(); + registration.setDispatcherTypes(DispatcherType.REQUEST); + registration.setFilter(new XssFilter()); + registration.addUrlPatterns(StringUtils.split(urlPatterns, ",")); + registration.setName("xssFilter"); + registration.setOrder(FilterRegistrationBean.HIGHEST_PRECEDENCE); + Map initParameters = new HashMap(); + initParameters.put("excludes", excludes); + registration.setInitParameters(initParameters); + return registration; + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Bean + public FilterRegistrationBean someFilterRegistration() + { + FilterRegistrationBean registration = new FilterRegistrationBean(); + registration.setFilter(new RepeatableFilter()); + registration.addUrlPatterns("/*"); + registration.setName("repeatableFilter"); + registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE); + return registration; + } + +} diff --git a/evo-admin/src/main/java/com/evo/framework/config/I18nConfig.java b/evo-admin/src/main/java/com/evo/framework/config/I18nConfig.java new file mode 100644 index 0000000..148eeaf --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/config/I18nConfig.java @@ -0,0 +1,43 @@ +package com.evo.framework.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.LocaleResolver; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.web.servlet.i18n.LocaleChangeInterceptor; +import org.springframework.web.servlet.i18n.SessionLocaleResolver; +import com.evo.common.constant.Constants; + +/** + * 璧勬簮鏂囦欢閰嶇疆鍔犺浇 + * + * @author evo + */ +@Configuration +public class I18nConfig implements WebMvcConfigurer +{ + @Bean + public LocaleResolver localeResolver() + { + SessionLocaleResolver slr = new SessionLocaleResolver(); + // 榛樿璇█ + slr.setDefaultLocale(Constants.DEFAULT_LOCALE); + return slr; + } + + @Bean + public LocaleChangeInterceptor localeChangeInterceptor() + { + LocaleChangeInterceptor lci = new LocaleChangeInterceptor(); + // 鍙傛暟鍚 + lci.setParamName("lang"); + return lci; + } + + @Override + public void addInterceptors(InterceptorRegistry registry) + { + registry.addInterceptor(localeChangeInterceptor()); + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/config/MyBatisConfig.java b/evo-admin/src/main/java/com/evo/framework/config/MyBatisConfig.java new file mode 100644 index 0000000..db4e168 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/config/MyBatisConfig.java @@ -0,0 +1,132 @@ +package com.evo.framework.config; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import javax.sql.DataSource; +import org.apache.ibatis.io.VFS; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.boot.autoconfigure.SpringBootVFS; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; +import org.springframework.core.io.DefaultResourceLoader; +import org.springframework.core.io.Resource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.core.io.support.ResourcePatternResolver; +import org.springframework.core.type.classreading.CachingMetadataReaderFactory; +import org.springframework.core.type.classreading.MetadataReader; +import org.springframework.core.type.classreading.MetadataReaderFactory; +import org.springframework.util.ClassUtils; +import com.evo.common.utils.StringUtils; + +/** + * Mybatis鏀寔*鍖归厤鎵弿鍖 + * + * @author evo + */ +@Configuration +public class MyBatisConfig +{ + @Autowired + private Environment env; + + static final String DEFAULT_RESOURCE_PATTERN = "**/*.class"; + + public static String setTypeAliasesPackage(String typeAliasesPackage) + { + ResourcePatternResolver resolver = (ResourcePatternResolver) new PathMatchingResourcePatternResolver(); + MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver); + List allResult = new ArrayList(); + try + { + for (String aliasesPackage : typeAliasesPackage.split(",")) + { + List result = new ArrayList(); + aliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + + ClassUtils.convertClassNameToResourcePath(aliasesPackage.trim()) + "/" + DEFAULT_RESOURCE_PATTERN; + Resource[] resources = resolver.getResources(aliasesPackage); + if (resources != null && resources.length > 0) + { + MetadataReader metadataReader = null; + for (Resource resource : resources) + { + if (resource.isReadable()) + { + metadataReader = metadataReaderFactory.getMetadataReader(resource); + try + { + result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage().getName()); + } + catch (ClassNotFoundException e) + { + e.printStackTrace(); + } + } + } + } + if (result.size() > 0) + { + HashSet hashResult = new HashSet(result); + allResult.addAll(hashResult); + } + } + if (allResult.size() > 0) + { + typeAliasesPackage = String.join(",", (String[]) allResult.toArray(new String[0])); + } + else + { + throw new RuntimeException("mybatis typeAliasesPackage 璺緞鎵弿閿欒,鍙傛暟typeAliasesPackage:" + typeAliasesPackage + "鏈壘鍒颁换浣曞寘"); + } + } + catch (IOException e) + { + e.printStackTrace(); + } + return typeAliasesPackage; + } + + public Resource[] resolveMapperLocations(String[] mapperLocations) + { + ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver(); + List resources = new ArrayList(); + if (mapperLocations != null) + { + for (String mapperLocation : mapperLocations) + { + try + { + Resource[] mappers = resourceResolver.getResources(mapperLocation); + resources.addAll(Arrays.asList(mappers)); + } + catch (IOException e) + { + // ignore + } + } + } + return resources.toArray(new Resource[resources.size()]); + } + + @Bean + public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception + { + String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage"); + String mapperLocations = env.getProperty("mybatis.mapperLocations"); + String configLocation = env.getProperty("mybatis.configLocation"); + typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage); + VFS.addImplClass(SpringBootVFS.class); + + final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); + sessionFactory.setDataSource(dataSource); + sessionFactory.setTypeAliasesPackage(typeAliasesPackage); + sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ","))); + sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation)); + return sessionFactory.getObject(); + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/config/RedisConfig.java b/evo-admin/src/main/java/com/evo/framework/config/RedisConfig.java new file mode 100644 index 0000000..850d778 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/config/RedisConfig.java @@ -0,0 +1,69 @@ +package com.evo.framework.config; + +import org.springframework.cache.annotation.CachingConfigurerSupport; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.script.DefaultRedisScript; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +/** + * redis閰嶇疆 + * + * @author evo + */ +@Configuration +@EnableCaching +public class RedisConfig extends CachingConfigurerSupport +{ + @Bean + @SuppressWarnings(value = { "unchecked", "rawtypes" }) + public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) + { + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(connectionFactory); + + FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class); + + // 浣跨敤StringRedisSerializer鏉ュ簭鍒楀寲鍜屽弽搴忓垪鍖杛edis鐨刱ey鍊 + template.setKeySerializer(new StringRedisSerializer()); + template.setValueSerializer(serializer); + + // Hash鐨刱ey涔熼噰鐢⊿tringRedisSerializer鐨勫簭鍒楀寲鏂瑰紡 + template.setHashKeySerializer(new StringRedisSerializer()); + template.setHashValueSerializer(serializer); + + template.afterPropertiesSet(); + return template; + } + + @Bean + public DefaultRedisScript limitScript() + { + DefaultRedisScript redisScript = new DefaultRedisScript<>(); + redisScript.setScriptText(limitScriptText()); + redisScript.setResultType(Long.class); + return redisScript; + } + + /** + * 闄愭祦鑴氭湰 + */ + private String limitScriptText() + { + return "local key = KEYS[1]\n" + + "local count = tonumber(ARGV[1])\n" + + "local time = tonumber(ARGV[2])\n" + + "local current = redis.call('get', key);\n" + + "if current and tonumber(current) > count then\n" + + " return tonumber(current);\n" + + "end\n" + + "current = redis.call('incr', key)\n" + + "if tonumber(current) == 1 then\n" + + " redis.call('expire', key, time)\n" + + "end\n" + + "return tonumber(current);"; + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/config/ResourcesConfig.java b/evo-admin/src/main/java/com/evo/framework/config/ResourcesConfig.java new file mode 100644 index 0000000..9cf0bea --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/config/ResourcesConfig.java @@ -0,0 +1,73 @@ +package com.evo.framework.config; + +import java.util.concurrent.TimeUnit; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.CacheControl; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import com.evo.common.config.EvoConfig; +import com.evo.common.constant.Constants; +import com.evo.framework.interceptor.RepeatSubmitInterceptor; + +/** + * 閫氱敤閰嶇疆 + * + * @author evo + */ +@Configuration +public class ResourcesConfig implements WebMvcConfigurer +{ + @Autowired + private RepeatSubmitInterceptor repeatSubmitInterceptor; + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) + { + /** 鏈湴鏂囦欢涓婁紶璺緞 */ + registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**") + .addResourceLocations("file:" + EvoConfig.getProfile() + "/"); + + /** swagger閰嶇疆 */ + registry.addResourceHandler("/swagger-ui/**") + .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/") + .setCacheControl(CacheControl.maxAge(5, TimeUnit.HOURS).cachePublic());; + } + + /** + * 鑷畾涔夋嫤鎴鍒 + */ + @Override + public void addInterceptors(InterceptorRegistry registry) + { + registry.addInterceptor(repeatSubmitInterceptor).addPathPatterns("/**"); + } + + /** + * 璺ㄥ煙閰嶇疆 + */ + @Bean + public CorsFilter corsFilter() + { + CorsConfiguration config = new CorsConfiguration(); + config.setAllowCredentials(true); + // 璁剧疆璁块棶婧愬湴鍧 + config.addAllowedOriginPattern("*"); + // 璁剧疆璁块棶婧愯姹傚ご + config.addAllowedHeader("*"); + // 璁剧疆璁块棶婧愯姹傛柟娉 + config.addAllowedMethod("*"); + // 鏈夋晥鏈 1800绉 + config.setMaxAge(1800L); + // 娣诲姞鏄犲皠璺緞锛屾嫤鎴竴鍒囪姹 + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", config); + // 杩斿洖鏂扮殑CorsFilter + return new CorsFilter(source); + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/config/SecurityConfig.java b/evo-admin/src/main/java/com/evo/framework/config/SecurityConfig.java new file mode 100644 index 0000000..072a00c --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/config/SecurityConfig.java @@ -0,0 +1,144 @@ +package com.evo.framework.config; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpMethod; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.ProviderManager; +import org.springframework.security.authentication.dao.DaoAuthenticationProvider; +import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.security.web.authentication.logout.LogoutFilter; +import org.springframework.web.filter.CorsFilter; +import com.evo.framework.config.properties.PermitAllUrlProperties; +import com.evo.framework.security.filter.JwtAuthenticationTokenFilter; +import com.evo.framework.security.handle.AuthenticationEntryPointImpl; +import com.evo.framework.security.handle.LogoutSuccessHandlerImpl; + +/** + * spring security閰嶇疆 + * + * @author evo + */ +@EnableMethodSecurity(prePostEnabled = true, securedEnabled = true) +@Configuration +public class SecurityConfig +{ + /** + * 鑷畾涔夌敤鎴疯璇侀昏緫 + */ + @Autowired + private UserDetailsService userDetailsService; + + /** + * 璁よ瘉澶辫触澶勭悊绫 + */ + @Autowired + private AuthenticationEntryPointImpl unauthorizedHandler; + + /** + * 閫鍑哄鐞嗙被 + */ + @Autowired + private LogoutSuccessHandlerImpl logoutSuccessHandler; + + /** + * token璁よ瘉杩囨护鍣 + */ + @Autowired + private JwtAuthenticationTokenFilter authenticationTokenFilter; + + /** + * 璺ㄥ煙杩囨护鍣 + */ + @Autowired + private CorsFilter corsFilter; + + /** + * 鍏佽鍖垮悕璁块棶鐨勫湴鍧 + */ + @Autowired + private PermitAllUrlProperties permitAllUrl; + + /** + * 韬唤楠岃瘉瀹炵幇 + */ + @Bean + public AuthenticationManager authenticationManager() + { + DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider(); + daoAuthenticationProvider.setUserDetailsService(userDetailsService); + daoAuthenticationProvider.setPasswordEncoder(bCryptPasswordEncoder()); + return new ProviderManager(daoAuthenticationProvider); + } + + /** + * anyRequest | 鍖归厤鎵鏈夎姹傝矾寰 + * access | SpringEl琛ㄨ揪寮忕粨鏋滀负true鏃跺彲浠ヨ闂 + * anonymous | 鍖垮悕鍙互璁块棶 + * denyAll | 鐢ㄦ埛涓嶈兘璁块棶 + * fullyAuthenticated | 鐢ㄦ埛瀹屽叏璁よ瘉鍙互璁块棶锛堥潪remember-me涓嬭嚜鍔ㄧ櫥褰曪級 + * hasAnyAuthority | 濡傛灉鏈夊弬鏁帮紝鍙傛暟琛ㄧず鏉冮檺锛屽垯鍏朵腑浠讳綍涓涓潈闄愬彲浠ヨ闂 + * hasAnyRole | 濡傛灉鏈夊弬鏁帮紝鍙傛暟琛ㄧず瑙掕壊锛屽垯鍏朵腑浠讳綍涓涓鑹插彲浠ヨ闂 + * hasAuthority | 濡傛灉鏈夊弬鏁帮紝鍙傛暟琛ㄧず鏉冮檺锛屽垯鍏舵潈闄愬彲浠ヨ闂 + * hasIpAddress | 濡傛灉鏈夊弬鏁帮紝鍙傛暟琛ㄧずIP鍦板潃锛屽鏋滅敤鎴稩P鍜屽弬鏁板尮閰嶏紝鍒欏彲浠ヨ闂 + * hasRole | 濡傛灉鏈夊弬鏁帮紝鍙傛暟琛ㄧず瑙掕壊锛屽垯鍏惰鑹插彲浠ヨ闂 + * permitAll | 鐢ㄦ埛鍙互浠绘剰璁块棶 + * rememberMe | 鍏佽閫氳繃remember-me鐧诲綍鐨勭敤鎴疯闂 + * authenticated | 鐢ㄦ埛鐧诲綍鍚庡彲璁块棶 + */ + @Bean + protected SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception + { + return httpSecurity + // CSRF绂佺敤锛屽洜涓轰笉浣跨敤session + .csrf(csrf -> csrf.disable()) + // 绂佺敤HTTP鍝嶅簲鏍囧ご + .headers((headersCustomizer) -> { + headersCustomizer.cacheControl(cache -> cache.disable()).frameOptions(options -> options.sameOrigin()); + }) + // 璁よ瘉澶辫触澶勭悊绫 + .exceptionHandling(exception -> exception.authenticationEntryPoint(unauthorizedHandler)) + // 鍩轰簬token锛屾墍浠ヤ笉闇瑕乻ession + .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) + // 娉ㄨВ鏍囪鍏佽鍖垮悕璁块棶鐨剈rl + .authorizeHttpRequests((requests) -> { + permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll()); + // 瀵逛簬鐧诲綍login 娉ㄥ唽register 楠岃瘉鐮乧aptchaImage 鍏佽鍖垮悕璁块棶 + requests.antMatchers("/login", "/register", "/captchaImage").permitAll() + .antMatchers("/common/download").permitAll() + // 闈欐佽祫婧愶紝鍙尶鍚嶈闂 + .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll() + .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll() + .antMatchers("/websocket/**").permitAll() + .antMatchers("/api/v1/verify_user").permitAll() + .antMatchers("/api/v1/record/face").permitAll() + .antMatchers("/api/v2/verify_user_yt").permitAll() + // 闄や笂闈㈠鐨勬墍鏈夎姹傚叏閮ㄩ渶瑕侀壌鏉冭璇 + .anyRequest().authenticated(); + }) + // 娣诲姞Logout filter + .logout(logout -> logout.logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler)) + // 娣诲姞JWT filter + .addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class) + // 娣诲姞CORS filter + .addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class) + .addFilterBefore(corsFilter, LogoutFilter.class) + .build(); + } + + /** + * 寮烘暎鍒楀搱甯屽姞瀵嗗疄鐜 + */ + @Bean + public BCryptPasswordEncoder bCryptPasswordEncoder() + { + return new BCryptPasswordEncoder(); + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/config/ServerConfig.java b/evo-admin/src/main/java/com/evo/framework/config/ServerConfig.java new file mode 100644 index 0000000..9aaafa7 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/config/ServerConfig.java @@ -0,0 +1,32 @@ +package com.evo.framework.config; + +import javax.servlet.http.HttpServletRequest; +import org.springframework.stereotype.Component; +import com.evo.common.utils.ServletUtils; + +/** + * 鏈嶅姟鐩稿叧閰嶇疆 + * + * @author evo + */ +@Component +public class ServerConfig +{ + /** + * 鑾峰彇瀹屾暣鐨勮姹傝矾寰勶紝鍖呮嫭锛氬煙鍚嶏紝绔彛锛屼笂涓嬫枃璁块棶璺緞 + * + * @return 鏈嶅姟鍦板潃 + */ + public String getUrl() + { + HttpServletRequest request = ServletUtils.getRequest(); + return getDomain(request); + } + + public static String getDomain(HttpServletRequest request) + { + StringBuffer url = request.getRequestURL(); + String contextPath = request.getServletContext().getContextPath(); + return url.delete(url.length() - request.getRequestURI().length(), url.length()).append(contextPath).toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/config/ThreadPoolConfig.java b/evo-admin/src/main/java/com/evo/framework/config/ThreadPoolConfig.java new file mode 100644 index 0000000..4d6f019 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/config/ThreadPoolConfig.java @@ -0,0 +1,63 @@ +package com.evo.framework.config; + +import com.evo.common.utils.Threads; +import org.apache.commons.lang3.concurrent.BasicThreadFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * 绾跨▼姹犻厤缃 + * + * @author evo + **/ +@Configuration +public class ThreadPoolConfig +{ + // 鏍稿績绾跨▼姹犲ぇ灏 + private int corePoolSize = 50; + + // 鏈澶у彲鍒涘缓鐨勭嚎绋嬫暟 + private int maxPoolSize = 200; + + // 闃熷垪鏈澶ч暱搴 + private int queueCapacity = 1000; + + // 绾跨▼姹犵淮鎶ょ嚎绋嬫墍鍏佽鐨勭┖闂叉椂闂 + private int keepAliveSeconds = 300; + + @Bean(name = "threadPoolTaskExecutor") + public ThreadPoolTaskExecutor threadPoolTaskExecutor() + { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setMaxPoolSize(maxPoolSize); + executor.setCorePoolSize(corePoolSize); + executor.setQueueCapacity(queueCapacity); + executor.setKeepAliveSeconds(keepAliveSeconds); + // 绾跨▼姹犲鎷掔粷浠诲姟(鏃犵嚎绋嬪彲鐢)鐨勫鐞嗙瓥鐣 + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + return executor; + } + + /** + * 鎵ц鍛ㄦ湡鎬ф垨瀹氭椂浠诲姟 + */ + @Bean(name = "scheduledExecutorService") + protected ScheduledExecutorService scheduledExecutorService() + { + return new ScheduledThreadPoolExecutor(corePoolSize, + new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build(), + new ThreadPoolExecutor.CallerRunsPolicy()) + { + @Override + protected void afterExecute(Runnable r, Throwable t) + { + super.afterExecute(r, t); + Threads.printException(r, t); + } + }; + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/config/properties/DruidProperties.java b/evo-admin/src/main/java/com/evo/framework/config/properties/DruidProperties.java new file mode 100644 index 0000000..538f1b9 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/config/properties/DruidProperties.java @@ -0,0 +1,89 @@ +package com.evo.framework.config.properties; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import com.alibaba.druid.pool.DruidDataSource; + +/** + * druid 閰嶇疆灞炴 + * + * @author evo + */ +@Configuration +public class DruidProperties +{ + @Value("${spring.datasource.druid.initialSize}") + private int initialSize; + + @Value("${spring.datasource.druid.minIdle}") + private int minIdle; + + @Value("${spring.datasource.druid.maxActive}") + private int maxActive; + + @Value("${spring.datasource.druid.maxWait}") + private int maxWait; + + @Value("${spring.datasource.druid.connectTimeout}") + private int connectTimeout; + + @Value("${spring.datasource.druid.socketTimeout}") + private int socketTimeout; + + @Value("${spring.datasource.druid.timeBetweenEvictionRunsMillis}") + private int timeBetweenEvictionRunsMillis; + + @Value("${spring.datasource.druid.minEvictableIdleTimeMillis}") + private int minEvictableIdleTimeMillis; + + @Value("${spring.datasource.druid.maxEvictableIdleTimeMillis}") + private int maxEvictableIdleTimeMillis; + + @Value("${spring.datasource.druid.validationQuery}") + private String validationQuery; + + @Value("${spring.datasource.druid.testWhileIdle}") + private boolean testWhileIdle; + + @Value("${spring.datasource.druid.testOnBorrow}") + private boolean testOnBorrow; + + @Value("${spring.datasource.druid.testOnReturn}") + private boolean testOnReturn; + + public DruidDataSource dataSource(DruidDataSource datasource) + { + /** 閰嶇疆鍒濆鍖栧ぇ灏忋佹渶灏忋佹渶澶 */ + datasource.setInitialSize(initialSize); + datasource.setMaxActive(maxActive); + datasource.setMinIdle(minIdle); + + /** 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂 */ + datasource.setMaxWait(maxWait); + + /** 閰嶇疆椹卞姩杩炴帴瓒呮椂鏃堕棿锛屾娴嬫暟鎹簱寤虹珛杩炴帴鐨勮秴鏃舵椂闂达紝鍗曚綅鏄绉 */ + datasource.setConnectTimeout(connectTimeout); + + /** 閰嶇疆缃戠粶瓒呮椂鏃堕棿锛岀瓑寰呮暟鎹簱鎿嶄綔瀹屾垚鐨勭綉缁滆秴鏃舵椂闂达紝鍗曚綅鏄绉 */ + datasource.setSocketTimeout(socketTimeout); + + /** 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣 */ + datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); + + /** 閰嶇疆涓涓繛鎺ュ湪姹犱腑鏈灏忋佹渶澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 */ + datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); + datasource.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis); + + /** + * 鐢ㄦ潵妫娴嬭繛鎺ユ槸鍚︽湁鏁堢殑sql锛岃姹傛槸涓涓煡璇㈣鍙ワ紝甯哥敤select 'x'銆傚鏋渧alidationQuery涓簄ull锛宼estOnBorrow銆乼estOnReturn銆乼estWhileIdle閮戒笉浼氳捣浣滅敤銆 + */ + datasource.setValidationQuery(validationQuery); + /** 寤鸿閰嶇疆涓簍rue锛屼笉褰卞搷鎬ц兘锛屽苟涓斾繚璇佸畨鍏ㄦс傜敵璇疯繛鎺ョ殑鏃跺欐娴嬶紝濡傛灉绌洪棽鏃堕棿澶т簬timeBetweenEvictionRunsMillis锛屾墽琛寁alidationQuery妫娴嬭繛鎺ユ槸鍚︽湁鏁堛 */ + datasource.setTestWhileIdle(testWhileIdle); + /** 鐢宠杩炴帴鏃舵墽琛寁alidationQuery妫娴嬭繛鎺ユ槸鍚︽湁鏁堬紝鍋氫簡杩欎釜閰嶇疆浼氶檷浣庢ц兘銆 */ + datasource.setTestOnBorrow(testOnBorrow); + /** 褰掕繕杩炴帴鏃舵墽琛寁alidationQuery妫娴嬭繛鎺ユ槸鍚︽湁鏁堬紝鍋氫簡杩欎釜閰嶇疆浼氶檷浣庢ц兘銆 */ + datasource.setTestOnReturn(testOnReturn); + return datasource; + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/config/properties/PermitAllUrlProperties.java b/evo-admin/src/main/java/com/evo/framework/config/properties/PermitAllUrlProperties.java new file mode 100644 index 0000000..655a2d8 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/config/properties/PermitAllUrlProperties.java @@ -0,0 +1,73 @@ +package com.evo.framework.config.properties; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.regex.Pattern; +import org.apache.commons.lang3.RegExUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.mvc.method.RequestMappingInfo; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; +import com.evo.common.annotation.Anonymous; + +/** + * 璁剧疆Anonymous娉ㄨВ鍏佽鍖垮悕璁块棶鐨剈rl + * + * @author evo + */ +@Configuration +public class PermitAllUrlProperties implements InitializingBean, ApplicationContextAware +{ + private static final Pattern PATTERN = Pattern.compile("\\{(.*?)\\}"); + + private ApplicationContext applicationContext; + + private List urls = new ArrayList<>(); + + public String ASTERISK = "*"; + + @Override + public void afterPropertiesSet() + { + RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class); + Map map = mapping.getHandlerMethods(); + + map.keySet().forEach(info -> { + HandlerMethod handlerMethod = map.get(info); + + // 鑾峰彇鏂规硶涓婅竟鐨勬敞瑙 鏇夸唬path variable 涓 * + Anonymous method = AnnotationUtils.findAnnotation(handlerMethod.getMethod(), Anonymous.class); + Optional.ofNullable(method).ifPresent(anonymous -> Objects.requireNonNull(info.getPatternsCondition().getPatterns()) + .forEach(url -> urls.add(RegExUtils.replaceAll(url, PATTERN, ASTERISK)))); + + // 鑾峰彇绫讳笂杈圭殑娉ㄨВ, 鏇夸唬path variable 涓 * + Anonymous controller = AnnotationUtils.findAnnotation(handlerMethod.getBeanType(), Anonymous.class); + Optional.ofNullable(controller).ifPresent(anonymous -> Objects.requireNonNull(info.getPatternsCondition().getPatterns()) + .forEach(url -> urls.add(RegExUtils.replaceAll(url, PATTERN, ASTERISK)))); + }); + } + + @Override + public void setApplicationContext(ApplicationContext context) throws BeansException + { + this.applicationContext = context; + } + + public List getUrls() + { + return urls; + } + + public void setUrls(List urls) + { + this.urls = urls; + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/datasource/DynamicDataSource.java b/evo-admin/src/main/java/com/evo/framework/datasource/DynamicDataSource.java new file mode 100644 index 0000000..cc7f169 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/datasource/DynamicDataSource.java @@ -0,0 +1,26 @@ +package com.evo.framework.datasource; + +import java.util.Map; +import javax.sql.DataSource; +import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; + +/** + * 鍔ㄦ佹暟鎹簮 + * + * @author evo + */ +public class DynamicDataSource extends AbstractRoutingDataSource +{ + public DynamicDataSource(DataSource defaultTargetDataSource, Map targetDataSources) + { + super.setDefaultTargetDataSource(defaultTargetDataSource); + super.setTargetDataSources(targetDataSources); + super.afterPropertiesSet(); + } + + @Override + protected Object determineCurrentLookupKey() + { + return DynamicDataSourceContextHolder.getDataSourceType(); + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/datasource/DynamicDataSourceContextHolder.java b/evo-admin/src/main/java/com/evo/framework/datasource/DynamicDataSourceContextHolder.java new file mode 100644 index 0000000..e5b6e52 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/datasource/DynamicDataSourceContextHolder.java @@ -0,0 +1,45 @@ +package com.evo.framework.datasource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 鏁版嵁婧愬垏鎹㈠鐞 + * + * @author evo + */ +public class DynamicDataSourceContextHolder +{ + public static final Logger log = LoggerFactory.getLogger(DynamicDataSourceContextHolder.class); + + /** + * 浣跨敤ThreadLocal缁存姢鍙橀噺锛孴hreadLocal涓烘瘡涓娇鐢ㄨ鍙橀噺鐨勭嚎绋嬫彁渚涚嫭绔嬬殑鍙橀噺鍓湰锛 + * 鎵浠ユ瘡涓涓嚎绋嬮兘鍙互鐙珛鍦版敼鍙樿嚜宸辩殑鍓湰锛岃屼笉浼氬奖鍝嶅叾瀹冪嚎绋嬫墍瀵瑰簲鐨勫壇鏈 + */ + private static final ThreadLocal CONTEXT_HOLDER = new ThreadLocal<>(); + + /** + * 璁剧疆鏁版嵁婧愮殑鍙橀噺 + */ + public static void setDataSourceType(String dsType) + { + log.info("鍒囨崲鍒皗}鏁版嵁婧", dsType); + CONTEXT_HOLDER.set(dsType); + } + + /** + * 鑾峰緱鏁版嵁婧愮殑鍙橀噺 + */ + public static String getDataSourceType() + { + return CONTEXT_HOLDER.get(); + } + + /** + * 娓呯┖鏁版嵁婧愬彉閲 + */ + public static void clearDataSourceType() + { + CONTEXT_HOLDER.remove(); + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/interceptor/RepeatSubmitInterceptor.java b/evo-admin/src/main/java/com/evo/framework/interceptor/RepeatSubmitInterceptor.java new file mode 100644 index 0000000..ad81a9f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/interceptor/RepeatSubmitInterceptor.java @@ -0,0 +1,56 @@ +package com.evo.framework.interceptor; + +import java.lang.reflect.Method; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.springframework.stereotype.Component; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.HandlerInterceptor; +import com.alibaba.fastjson2.JSON; +import com.evo.common.annotation.RepeatSubmit; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.utils.ServletUtils; + +/** + * 闃叉閲嶅鎻愪氦鎷︽埅鍣 + * + * @author evo + */ +@Component +public abstract class RepeatSubmitInterceptor implements HandlerInterceptor +{ + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception + { + if (handler instanceof HandlerMethod) + { + HandlerMethod handlerMethod = (HandlerMethod) handler; + Method method = handlerMethod.getMethod(); + RepeatSubmit annotation = method.getAnnotation(RepeatSubmit.class); + if (annotation != null) + { + if (this.isRepeatSubmit(request, annotation)) + { + AjaxResult ajaxResult = AjaxResult.error(annotation.message()); + ServletUtils.renderString(response, JSON.toJSONString(ajaxResult)); + return false; + } + } + return true; + } + else + { + return true; + } + } + + /** + * 楠岃瘉鏄惁閲嶅鎻愪氦鐢卞瓙绫诲疄鐜板叿浣撶殑闃查噸澶嶆彁浜ょ殑瑙勫垯 + * + * @param request 璇锋眰淇℃伅 + * @param annotation 闃查噸澶嶆敞瑙e弬鏁 + * @return 缁撴灉 + * @throws Exception + */ + public abstract boolean isRepeatSubmit(HttpServletRequest request, RepeatSubmit annotation); +} diff --git a/evo-admin/src/main/java/com/evo/framework/interceptor/impl/SameUrlDataInterceptor.java b/evo-admin/src/main/java/com/evo/framework/interceptor/impl/SameUrlDataInterceptor.java new file mode 100644 index 0000000..1b1f990 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/interceptor/impl/SameUrlDataInterceptor.java @@ -0,0 +1,110 @@ +package com.evo.framework.interceptor.impl; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import javax.servlet.http.HttpServletRequest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import com.alibaba.fastjson2.JSON; +import com.evo.common.annotation.RepeatSubmit; +import com.evo.common.constant.CacheConstants; +import com.evo.common.core.redis.RedisCache; +import com.evo.common.filter.RepeatedlyRequestWrapper; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.http.HttpHelper; +import com.evo.framework.interceptor.RepeatSubmitInterceptor; + +/** + * 鍒ゆ柇璇锋眰url鍜屾暟鎹槸鍚﹀拰涓婁竴娆$浉鍚岋紝 + * 濡傛灉鍜屼笂娆$浉鍚岋紝鍒欐槸閲嶅鎻愪氦琛ㄥ崟銆 鏈夋晥鏃堕棿涓10绉掑唴銆 + * + * @author evo + */ +@Component +public class SameUrlDataInterceptor extends RepeatSubmitInterceptor +{ + public final String REPEAT_PARAMS = "repeatParams"; + + public final String REPEAT_TIME = "repeatTime"; + + // 浠ょ墝鑷畾涔夋爣璇 + @Value("${token.header}") + private String header; + + @Autowired + private RedisCache redisCache; + + @SuppressWarnings("unchecked") + @Override + public boolean isRepeatSubmit(HttpServletRequest request, RepeatSubmit annotation) + { + String nowParams = ""; + if (request instanceof RepeatedlyRequestWrapper) + { + RepeatedlyRequestWrapper repeatedlyRequest = (RepeatedlyRequestWrapper) request; + nowParams = HttpHelper.getBodyString(repeatedlyRequest); + } + + // body鍙傛暟涓虹┖锛岃幏鍙朠arameter鐨勬暟鎹 + if (StringUtils.isEmpty(nowParams)) + { + nowParams = JSON.toJSONString(request.getParameterMap()); + } + Map nowDataMap = new HashMap(); + nowDataMap.put(REPEAT_PARAMS, nowParams); + nowDataMap.put(REPEAT_TIME, System.currentTimeMillis()); + + // 璇锋眰鍦板潃锛堜綔涓哄瓨鏀綾ache鐨刱ey鍊硷級 + String url = request.getRequestURI(); + + // 鍞竴鍊硷紙娌℃湁娑堟伅澶村垯浣跨敤璇锋眰鍦板潃锛 + String submitKey = StringUtils.trimToEmpty(request.getHeader(header)); + + // 鍞竴鏍囪瘑锛堟寚瀹歬ey + url + 娑堟伅澶达級 + String cacheRepeatKey = CacheConstants.REPEAT_SUBMIT_KEY + url + submitKey; + + Object sessionObj = redisCache.getCacheObject(cacheRepeatKey); + if (sessionObj != null) + { + Map sessionMap = (Map) sessionObj; + if (sessionMap.containsKey(url)) + { + Map preDataMap = (Map) sessionMap.get(url); + if (compareParams(nowDataMap, preDataMap) && compareTime(nowDataMap, preDataMap, annotation.interval())) + { + return true; + } + } + } + Map cacheMap = new HashMap(); + cacheMap.put(url, nowDataMap); + redisCache.setCacheObject(cacheRepeatKey, cacheMap, annotation.interval(), TimeUnit.MILLISECONDS); + return false; + } + + /** + * 鍒ゆ柇鍙傛暟鏄惁鐩稿悓 + */ + private boolean compareParams(Map nowMap, Map preMap) + { + String nowParams = (String) nowMap.get(REPEAT_PARAMS); + String preParams = (String) preMap.get(REPEAT_PARAMS); + return nowParams.equals(preParams); + } + + /** + * 鍒ゆ柇涓ゆ闂撮殧鏃堕棿 + */ + private boolean compareTime(Map nowMap, Map preMap, int interval) + { + long time1 = (Long) nowMap.get(REPEAT_TIME); + long time2 = (Long) preMap.get(REPEAT_TIME); + if ((time1 - time2) < interval) + { + return true; + } + return false; + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/manager/AsyncManager.java b/evo-admin/src/main/java/com/evo/framework/manager/AsyncManager.java new file mode 100644 index 0000000..20a5d23 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/manager/AsyncManager.java @@ -0,0 +1,55 @@ +package com.evo.framework.manager; + +import java.util.TimerTask; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import com.evo.common.utils.Threads; +import com.evo.common.utils.spring.SpringUtils; + +/** + * 寮傛浠诲姟绠$悊鍣 + * + * @author evo + */ +public class AsyncManager +{ + /** + * 鎿嶄綔寤惰繜10姣 + */ + private final int OPERATE_DELAY_TIME = 10; + + /** + * 寮傛鎿嶄綔浠诲姟璋冨害绾跨▼姹 + */ + private ScheduledExecutorService executor = SpringUtils.getBean("scheduledExecutorService"); + + /** + * 鍗曚緥妯″紡 + */ + private AsyncManager(){} + + private static AsyncManager me = new AsyncManager(); + + public static AsyncManager me() + { + return me; + } + + /** + * 鎵ц浠诲姟 + * + * @param task 浠诲姟 + */ + public void execute(TimerTask task) + { + executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS); + } + + /** + * 鍋滄浠诲姟绾跨▼姹 + */ + public void shutdown() + { + Threads.shutdownAndAwaitTermination(executor); + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/manager/ShutdownManager.java b/evo-admin/src/main/java/com/evo/framework/manager/ShutdownManager.java new file mode 100644 index 0000000..e502fd6 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/manager/ShutdownManager.java @@ -0,0 +1,39 @@ +package com.evo.framework.manager; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import javax.annotation.PreDestroy; + +/** + * 纭繚搴旂敤閫鍑烘椂鑳藉叧闂悗鍙扮嚎绋 + * + * @author evo + */ +@Component +public class ShutdownManager +{ + private static final Logger logger = LoggerFactory.getLogger("sys-user"); + + @PreDestroy + public void destroy() + { + shutdownAsyncManager(); + } + + /** + * 鍋滄寮傛鎵ц浠诲姟 + */ + private void shutdownAsyncManager() + { + try + { + logger.info("====鍏抽棴鍚庡彴浠诲姟浠诲姟绾跨▼姹===="); + AsyncManager.me().shutdown(); + } + catch (Exception e) + { + logger.error(e.getMessage(), e); + } + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/manager/factory/AsyncFactory.java b/evo-admin/src/main/java/com/evo/framework/manager/factory/AsyncFactory.java new file mode 100644 index 0000000..3e748fb --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/manager/factory/AsyncFactory.java @@ -0,0 +1,102 @@ +package com.evo.framework.manager.factory; + +import java.util.TimerTask; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.evo.common.constant.Constants; +import com.evo.common.utils.LogUtils; +import com.evo.common.utils.ServletUtils; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.ip.AddressUtils; +import com.evo.common.utils.ip.IpUtils; +import com.evo.common.utils.spring.SpringUtils; +import com.evo.system.domain.SysLogininfor; +import com.evo.system.domain.SysOperLog; +import com.evo.system.service.ISysLogininforService; +import com.evo.system.service.ISysOperLogService; +import eu.bitwalker.useragentutils.UserAgent; + +/** + * 寮傛宸ュ巶锛堜骇鐢熶换鍔$敤锛 + * + * @author evo + */ +public class AsyncFactory +{ + private static final Logger sys_user_logger = LoggerFactory.getLogger("sys-user"); + + /** + * 璁板綍鐧诲綍淇℃伅 + * + * @param username 鐢ㄦ埛鍚 + * @param status 鐘舵 + * @param message 娑堟伅 + * @param args 鍒楄〃 + * @return 浠诲姟task + */ + public static TimerTask recordLogininfor(final String username, final String status, final String message, + final Object... args) + { + final UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); + final String ip = IpUtils.getIpAddr(); + return new TimerTask() + { + @Override + public void run() + { + String address = AddressUtils.getRealAddressByIP(ip); + StringBuilder s = new StringBuilder(); + s.append(LogUtils.getBlock(ip)); + s.append(address); + s.append(LogUtils.getBlock(username)); + s.append(LogUtils.getBlock(status)); + s.append(LogUtils.getBlock(message)); + // 鎵撳嵃淇℃伅鍒版棩蹇 + sys_user_logger.info(s.toString(), args); + // 鑾峰彇瀹㈡埛绔搷浣滅郴缁 + String os = userAgent.getOperatingSystem().getName(); + // 鑾峰彇瀹㈡埛绔祻瑙堝櫒 + String browser = userAgent.getBrowser().getName(); + // 灏佽瀵硅薄 + SysLogininfor logininfor = new SysLogininfor(); + logininfor.setUserName(username); + logininfor.setIpaddr(ip); + logininfor.setLoginLocation(address); + logininfor.setBrowser(browser); + logininfor.setOs(os); + logininfor.setMsg(message); + // 鏃ュ織鐘舵 + if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER)) + { + logininfor.setStatus(Constants.SUCCESS); + } + else if (Constants.LOGIN_FAIL.equals(status)) + { + logininfor.setStatus(Constants.FAIL); + } + // 鎻掑叆鏁版嵁 + SpringUtils.getBean(ISysLogininforService.class).insertLogininfor(logininfor); + } + }; + } + + /** + * 鎿嶄綔鏃ュ織璁板綍 + * + * @param operLog 鎿嶄綔鏃ュ織淇℃伅 + * @return 浠诲姟task + */ + public static TimerTask recordOper(final SysOperLog operLog) + { + return new TimerTask() + { + @Override + public void run() + { + // 杩滅▼鏌ヨ鎿嶄綔鍦扮偣 + operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp())); + SpringUtils.getBean(ISysOperLogService.class).insertOperlog(operLog); + } + }; + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/security/context/AuthenticationContextHolder.java b/evo-admin/src/main/java/com/evo/framework/security/context/AuthenticationContextHolder.java new file mode 100644 index 0000000..dc9da20 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/security/context/AuthenticationContextHolder.java @@ -0,0 +1,28 @@ +package com.evo.framework.security.context; + +import org.springframework.security.core.Authentication; + +/** + * 韬唤楠岃瘉淇℃伅 + * + * @author evo + */ +public class AuthenticationContextHolder +{ + private static final ThreadLocal contextHolder = new ThreadLocal<>(); + + public static Authentication getContext() + { + return contextHolder.get(); + } + + public static void setContext(Authentication context) + { + contextHolder.set(context); + } + + public static void clearContext() + { + contextHolder.remove(); + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/security/context/PermissionContextHolder.java b/evo-admin/src/main/java/com/evo/framework/security/context/PermissionContextHolder.java new file mode 100644 index 0000000..52b29f5 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/security/context/PermissionContextHolder.java @@ -0,0 +1,27 @@ +package com.evo.framework.security.context; + +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import com.evo.common.core.text.Convert; + +/** + * 鏉冮檺淇℃伅 + * + * @author evo + */ +public class PermissionContextHolder +{ + private static final String PERMISSION_CONTEXT_ATTRIBUTES = "PERMISSION_CONTEXT"; + + public static void setContext(String permission) + { + RequestContextHolder.currentRequestAttributes().setAttribute(PERMISSION_CONTEXT_ATTRIBUTES, permission, + RequestAttributes.SCOPE_REQUEST); + } + + public static String getContext() + { + return Convert.toStr(RequestContextHolder.currentRequestAttributes().getAttribute(PERMISSION_CONTEXT_ATTRIBUTES, + RequestAttributes.SCOPE_REQUEST)); + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/security/filter/JwtAuthenticationTokenFilter.java b/evo-admin/src/main/java/com/evo/framework/security/filter/JwtAuthenticationTokenFilter.java new file mode 100644 index 0000000..f6063e8 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/security/filter/JwtAuthenticationTokenFilter.java @@ -0,0 +1,44 @@ +package com.evo.framework.security.filter; + +import java.io.IOException; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; +import com.evo.common.core.domain.model.LoginUser; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.framework.web.service.TokenService; + +/** + * token杩囨护鍣 楠岃瘉token鏈夋晥鎬 + * + * @author evo + */ +@Component +public class JwtAuthenticationTokenFilter extends OncePerRequestFilter +{ + @Autowired + private TokenService tokenService; + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) + throws ServletException, IOException + { + LoginUser loginUser = tokenService.getLoginUser(request); + if (StringUtils.isNotNull(loginUser) && StringUtils.isNull(SecurityUtils.getAuthentication())) + { + tokenService.verifyToken(loginUser); + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities()); + authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); + SecurityContextHolder.getContext().setAuthentication(authenticationToken); + } + chain.doFilter(request, response); + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/security/handle/AuthenticationEntryPointImpl.java b/evo-admin/src/main/java/com/evo/framework/security/handle/AuthenticationEntryPointImpl.java new file mode 100644 index 0000000..2dc2eaa --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/security/handle/AuthenticationEntryPointImpl.java @@ -0,0 +1,34 @@ +package com.evo.framework.security.handle; + +import java.io.IOException; +import java.io.Serializable; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.stereotype.Component; +import com.alibaba.fastjson2.JSON; +import com.evo.common.constant.HttpStatus; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.utils.ServletUtils; +import com.evo.common.utils.StringUtils; + +/** + * 璁よ瘉澶辫触澶勭悊绫 杩斿洖鏈巿鏉 + * + * @author evo + */ +@Component +public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint, Serializable +{ + private static final long serialVersionUID = -8970718410437077606L; + + @Override + public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) + throws IOException + { + int code = HttpStatus.UNAUTHORIZED; + String msg = StringUtils.format("璇锋眰璁块棶锛歿}锛岃璇佸け璐ワ紝鏃犳硶璁块棶绯荤粺璧勬簮", request.getRequestURI()); + ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.error(code, msg))); + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/security/handle/LogoutSuccessHandlerImpl.java b/evo-admin/src/main/java/com/evo/framework/security/handle/LogoutSuccessHandlerImpl.java new file mode 100644 index 0000000..e6f5618 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/security/handle/LogoutSuccessHandlerImpl.java @@ -0,0 +1,53 @@ +package com.evo.framework.security.handle; + +import java.io.IOException; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.core.Authentication; +import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; +import com.alibaba.fastjson2.JSON; +import com.evo.common.constant.Constants; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.domain.model.LoginUser; +import com.evo.common.utils.MessageUtils; +import com.evo.common.utils.ServletUtils; +import com.evo.common.utils.StringUtils; +import com.evo.framework.manager.AsyncManager; +import com.evo.framework.manager.factory.AsyncFactory; +import com.evo.framework.web.service.TokenService; + +/** + * 鑷畾涔夐鍑哄鐞嗙被 杩斿洖鎴愬姛 + * + * @author evo + */ +@Configuration +public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler +{ + @Autowired + private TokenService tokenService; + + /** + * 閫鍑哄鐞 + * + * @return + */ + @Override + public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) + throws IOException, ServletException + { + LoginUser loginUser = tokenService.getLoginUser(request); + if (StringUtils.isNotNull(loginUser)) + { + String userName = loginUser.getUsername(); + // 鍒犻櫎鐢ㄦ埛缂撳瓨璁板綍 + tokenService.delLoginUser(loginUser.getToken()); + // 璁板綍鐢ㄦ埛閫鍑烘棩蹇 + AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, MessageUtils.message("user.logout.success"))); + } + ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.success(MessageUtils.message("user.logout.success")))); + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/web/exception/GlobalExceptionHandler.java b/evo-admin/src/main/java/com/evo/framework/web/exception/GlobalExceptionHandler.java new file mode 100644 index 0000000..7c6fd61 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/web/exception/GlobalExceptionHandler.java @@ -0,0 +1,145 @@ +package com.evo.framework.web.exception; + +import javax.servlet.http.HttpServletRequest; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.validation.BindException; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.MissingPathVariableException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; +import com.evo.common.constant.HttpStatus; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.text.Convert; +import com.evo.common.exception.DemoModeException; +import com.evo.common.exception.ServiceException; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.html.EscapeUtil; + +/** + * 鍏ㄥ眬寮傚父澶勭悊鍣 + * + * @author evo + */ +@RestControllerAdvice +public class GlobalExceptionHandler +{ + private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class); + + /** + * 鏉冮檺鏍¢獙寮傚父 + */ + @ExceptionHandler(AccessDeniedException.class) + public AjaxResult handleAccessDeniedException(AccessDeniedException e, HttpServletRequest request) + { + String requestURI = request.getRequestURI(); + log.error("璇锋眰鍦板潃'{}',鏉冮檺鏍¢獙澶辫触'{}'", requestURI, e.getMessage()); + return AjaxResult.error(HttpStatus.FORBIDDEN, "娌℃湁鏉冮檺锛岃鑱旂郴绠$悊鍛樻巿鏉"); + } + + /** + * 璇锋眰鏂瑰紡涓嶆敮鎸 + */ + @ExceptionHandler(HttpRequestMethodNotSupportedException.class) + public AjaxResult handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e, + HttpServletRequest request) + { + String requestURI = request.getRequestURI(); + log.error("璇锋眰鍦板潃'{}',涓嶆敮鎸'{}'璇锋眰", requestURI, e.getMethod()); + return AjaxResult.error(e.getMessage()); + } + + /** + * 涓氬姟寮傚父 + */ + @ExceptionHandler(ServiceException.class) + public AjaxResult handleServiceException(ServiceException e, HttpServletRequest request) + { + log.error(e.getMessage(), e); + Integer code = e.getCode(); + return StringUtils.isNotNull(code) ? AjaxResult.error(code, e.getMessage()) : AjaxResult.error(e.getMessage()); + } + + /** + * 璇锋眰璺緞涓己灏戝繀闇鐨勮矾寰勫彉閲 + */ + @ExceptionHandler(MissingPathVariableException.class) + public AjaxResult handleMissingPathVariableException(MissingPathVariableException e, HttpServletRequest request) + { + String requestURI = request.getRequestURI(); + log.error("璇锋眰璺緞涓己灏戝繀闇鐨勮矾寰勫彉閲'{}',鍙戠敓绯荤粺寮傚父.", requestURI, e); + return AjaxResult.error(String.format("璇锋眰璺緞涓己灏戝繀闇鐨勮矾寰勫彉閲廩%s]", e.getVariableName())); + } + + /** + * 璇锋眰鍙傛暟绫诲瀷涓嶅尮閰 + */ + @ExceptionHandler(MethodArgumentTypeMismatchException.class) + public AjaxResult handleMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchException e, HttpServletRequest request) + { + String requestURI = request.getRequestURI(); + String value = Convert.toStr(e.getValue()); + if (StringUtils.isNotEmpty(value)) + { + value = EscapeUtil.clean(value); + } + log.error("璇锋眰鍙傛暟绫诲瀷涓嶅尮閰'{}',鍙戠敓绯荤粺寮傚父.", requestURI, e); + return AjaxResult.error(String.format("璇锋眰鍙傛暟绫诲瀷涓嶅尮閰嶏紝鍙傛暟[%s]瑕佹眰绫诲瀷涓猴細'%s'锛屼絾杈撳叆鍊间负锛'%s'", e.getName(), e.getRequiredType().getName(), value)); + } + + /** + * 鎷︽埅鏈煡鐨勮繍琛屾椂寮傚父 + */ + @ExceptionHandler(RuntimeException.class) + public AjaxResult handleRuntimeException(RuntimeException e, HttpServletRequest request) + { + String requestURI = request.getRequestURI(); + log.error("璇锋眰鍦板潃'{}',鍙戠敓鏈煡寮傚父.", requestURI, e); + return AjaxResult.error(e.getMessage()); + } + + /** + * 绯荤粺寮傚父 + */ + @ExceptionHandler(Exception.class) + public AjaxResult handleException(Exception e, HttpServletRequest request) + { + String requestURI = request.getRequestURI(); + log.error("璇锋眰鍦板潃'{}',鍙戠敓绯荤粺寮傚父.", requestURI, e); + return AjaxResult.error(e.getMessage()); + } + + /** + * 鑷畾涔夐獙璇佸紓甯 + */ + @ExceptionHandler(BindException.class) + public AjaxResult handleBindException(BindException e) + { + log.error(e.getMessage(), e); + String message = e.getAllErrors().get(0).getDefaultMessage(); + return AjaxResult.error(message); + } + + /** + * 鑷畾涔夐獙璇佸紓甯 + */ + @ExceptionHandler(MethodArgumentNotValidException.class) + public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e) + { + log.error(e.getMessage(), e); + String message = e.getBindingResult().getFieldError().getDefaultMessage(); + return AjaxResult.error(message); + } + + /** + * 婕旂ず妯″紡寮傚父 + */ + @ExceptionHandler(DemoModeException.class) + public AjaxResult handleDemoModeException(DemoModeException e) + { + return AjaxResult.error("婕旂ず妯″紡锛屼笉鍏佽鎿嶄綔"); + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/web/service/PermissionService.java b/evo-admin/src/main/java/com/evo/framework/web/service/PermissionService.java new file mode 100644 index 0000000..1c7c5dd --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/web/service/PermissionService.java @@ -0,0 +1,159 @@ +package com.evo.framework.web.service; + +import java.util.Set; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import com.evo.common.constant.Constants; +import com.evo.common.core.domain.entity.SysRole; +import com.evo.common.core.domain.model.LoginUser; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.framework.security.context.PermissionContextHolder; + +/** + * evo棣栧垱 鑷畾涔夋潈闄愬疄鐜帮紝ss鍙栬嚜SpringSecurity棣栧瓧姣 + * + * @author evo + */ +@Service("ss") +public class PermissionService +{ + /** + * 楠岃瘉鐢ㄦ埛鏄惁鍏峰鏌愭潈闄 + * + * @param permission 鏉冮檺瀛楃涓 + * @return 鐢ㄦ埛鏄惁鍏峰鏌愭潈闄 + */ + public boolean hasPermi(String permission) + { + if (StringUtils.isEmpty(permission)) + { + return false; + } + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getPermissions())) + { + return false; + } + PermissionContextHolder.setContext(permission); + return hasPermissions(loginUser.getPermissions(), permission); + } + + /** + * 楠岃瘉鐢ㄦ埛鏄惁涓嶅叿澶囨煇鏉冮檺锛屼笌 hasPermi閫昏緫鐩稿弽 + * + * @param permission 鏉冮檺瀛楃涓 + * @return 鐢ㄦ埛鏄惁涓嶅叿澶囨煇鏉冮檺 + */ + public boolean lacksPermi(String permission) + { + return hasPermi(permission) != true; + } + + /** + * 楠岃瘉鐢ㄦ埛鏄惁鍏锋湁浠ヤ笅浠绘剰涓涓潈闄 + * + * @param permissions 浠 PERMISSION_DELIMETER 涓哄垎闅旂鐨勬潈闄愬垪琛 + * @return 鐢ㄦ埛鏄惁鍏锋湁浠ヤ笅浠绘剰涓涓潈闄 + */ + public boolean hasAnyPermi(String permissions) + { + if (StringUtils.isEmpty(permissions)) + { + return false; + } + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getPermissions())) + { + return false; + } + PermissionContextHolder.setContext(permissions); + Set authorities = loginUser.getPermissions(); + for (String permission : permissions.split(Constants.PERMISSION_DELIMETER)) + { + if (permission != null && hasPermissions(authorities, permission)) + { + return true; + } + } + return false; + } + + /** + * 鍒ゆ柇鐢ㄦ埛鏄惁鎷ユ湁鏌愪釜瑙掕壊 + * + * @param role 瑙掕壊瀛楃涓 + * @return 鐢ㄦ埛鏄惁鍏峰鏌愯鑹 + */ + public boolean hasRole(String role) + { + if (StringUtils.isEmpty(role)) + { + return false; + } + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getUser().getRoles())) + { + return false; + } + for (SysRole sysRole : loginUser.getUser().getRoles()) + { + String roleKey = sysRole.getRoleKey(); + if (Constants.SUPER_ADMIN.equals(roleKey) || roleKey.equals(StringUtils.trim(role))) + { + return true; + } + } + return false; + } + + /** + * 楠岃瘉鐢ㄦ埛鏄惁涓嶅叿澶囨煇瑙掕壊锛屼笌 isRole閫昏緫鐩稿弽銆 + * + * @param role 瑙掕壊鍚嶇О + * @return 鐢ㄦ埛鏄惁涓嶅叿澶囨煇瑙掕壊 + */ + public boolean lacksRole(String role) + { + return hasRole(role) != true; + } + + /** + * 楠岃瘉鐢ㄦ埛鏄惁鍏锋湁浠ヤ笅浠绘剰涓涓鑹 + * + * @param roles 浠 ROLE_NAMES_DELIMETER 涓哄垎闅旂鐨勮鑹插垪琛 + * @return 鐢ㄦ埛鏄惁鍏锋湁浠ヤ笅浠绘剰涓涓鑹 + */ + public boolean hasAnyRoles(String roles) + { + if (StringUtils.isEmpty(roles)) + { + return false; + } + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getUser().getRoles())) + { + return false; + } + for (String role : roles.split(Constants.ROLE_DELIMETER)) + { + if (hasRole(role)) + { + return true; + } + } + return false; + } + + /** + * 鍒ゆ柇鏄惁鍖呭惈鏉冮檺 + * + * @param permissions 鏉冮檺鍒楄〃 + * @param permission 鏉冮檺瀛楃涓 + * @return 鐢ㄦ埛鏄惁鍏峰鏌愭潈闄 + */ + private boolean hasPermissions(Set permissions, String permission) + { + return permissions.contains(Constants.ALL_PERMISSION) || permissions.contains(StringUtils.trim(permission)); + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/web/service/SysLoginService.java b/evo-admin/src/main/java/com/evo/framework/web/service/SysLoginService.java new file mode 100644 index 0000000..5ea9eaa --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/web/service/SysLoginService.java @@ -0,0 +1,129 @@ +package com.evo.framework.web.service; + +import javax.annotation.Resource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.stereotype.Component; +import com.evo.common.constant.Constants; +import com.evo.common.constant.UserConstants; +import com.evo.common.core.domain.entity.SysUser; +import com.evo.common.core.domain.model.LoginUser; +import com.evo.common.core.redis.RedisCache; +import com.evo.common.exception.ServiceException; +import com.evo.common.exception.user.UserNotExistsException; +import com.evo.common.exception.user.UserPasswordNotMatchException; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.MessageUtils; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.ip.IpUtils; +import com.evo.framework.manager.AsyncManager; +import com.evo.framework.manager.factory.AsyncFactory; +import com.evo.framework.security.context.AuthenticationContextHolder; +import com.evo.system.service.ISysUserService; + +/** + * 鐧诲綍鏍¢獙鏂规硶 + * + * @author evo + */ +@Component +public class SysLoginService +{ + @Autowired + private TokenService tokenService; + + @Resource + private AuthenticationManager authenticationManager; + + @Autowired + private ISysUserService userService; + /** + * 鐧诲綍楠岃瘉 + * + * @param username 鐢ㄦ埛鍚 + * @param password 瀵嗙爜 + * @return 缁撴灉 + */ + public String login(String username, String password) + { + // 鐧诲綍鍓嶇疆鏍¢獙 + loginPreCheck(username, password); + // 鐢ㄦ埛楠岃瘉 + Authentication authentication = null; + try + { + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password); + AuthenticationContextHolder.setContext(authenticationToken); + // 璇ユ柟娉曚細鍘昏皟鐢║serDetailsServiceImpl.loadUserByUsername + authentication = authenticationManager.authenticate(authenticationToken); + } + catch (Exception e) + { + if (e instanceof BadCredentialsException) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); + throw new UserPasswordNotMatchException(); + } + else + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage())); + throw new ServiceException(e.getMessage()); + } + } + finally + { + AuthenticationContextHolder.clearContext(); + } + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + recordLoginInfo(loginUser.getUserId()); + // 鐢熸垚token + return tokenService.createToken(loginUser); + } + + /** + * 鐧诲綍鍓嶇疆鏍¢獙 + * @param username 鐢ㄦ埛鍚 + * @param password 鐢ㄦ埛瀵嗙爜 + */ + public void loginPreCheck(String username, String password) + { + // 鐢ㄦ埛鍚嶆垨瀵嗙爜涓虹┖ 閿欒 + if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("not.null"))); + throw new UserNotExistsException(); + } + // 瀵嗙爜濡傛灉涓嶅湪鎸囧畾鑼冨洿鍐 閿欒 + if (password.length() < UserConstants.PASSWORD_MIN_LENGTH + || password.length() > UserConstants.PASSWORD_MAX_LENGTH) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); + throw new UserPasswordNotMatchException(); + } + // 鐢ㄦ埛鍚嶄笉鍦ㄦ寚瀹氳寖鍥村唴 閿欒 + if (username.length() < UserConstants.USERNAME_MIN_LENGTH + || username.length() > UserConstants.USERNAME_MAX_LENGTH) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); + throw new UserPasswordNotMatchException(); + } + } + + /** + * 璁板綍鐧诲綍淇℃伅 + * + * @param userId 鐢ㄦ埛ID + */ + public void recordLoginInfo(Long userId) + { + SysUser sysUser = new SysUser(); + sysUser.setUserId(userId); + sysUser.setLoginIp(IpUtils.getIpAddr()); + sysUser.setLoginDate(DateUtils.getNowDate()); + userService.updateUserProfile(sysUser); + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/web/service/SysPasswordService.java b/evo-admin/src/main/java/com/evo/framework/web/service/SysPasswordService.java new file mode 100644 index 0000000..a0b7f70 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/web/service/SysPasswordService.java @@ -0,0 +1,86 @@ +package com.evo.framework.web.service; + +import java.util.concurrent.TimeUnit; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.core.Authentication; +import org.springframework.stereotype.Component; +import com.evo.common.constant.CacheConstants; +import com.evo.common.core.domain.entity.SysUser; +import com.evo.common.core.redis.RedisCache; +import com.evo.common.exception.user.UserPasswordNotMatchException; +import com.evo.common.exception.user.UserPasswordRetryLimitExceedException; +import com.evo.common.utils.SecurityUtils; +import com.evo.framework.security.context.AuthenticationContextHolder; + +/** + * 鐧诲綍瀵嗙爜鏂规硶 + * + * @author evo + */ +@Component +public class SysPasswordService +{ + @Autowired + private RedisCache redisCache; + + @Value(value = "${user.password.maxRetryCount}") + private int maxRetryCount; + + @Value(value = "${user.password.lockTime}") + private int lockTime; + + /** + * 鐧诲綍璐︽埛瀵嗙爜閿欒娆℃暟缂撳瓨閿悕 + * + * @param username 鐢ㄦ埛鍚 + * @return 缂撳瓨閿甼ey + */ + private String getCacheKey(String username) + { + return CacheConstants.PWD_ERR_CNT_KEY + username; + } + + public void validate(SysUser user) + { + Authentication usernamePasswordAuthenticationToken = AuthenticationContextHolder.getContext(); + String username = usernamePasswordAuthenticationToken.getName(); + String password = usernamePasswordAuthenticationToken.getCredentials().toString(); + + Integer retryCount = redisCache.getCacheObject(getCacheKey(username)); + + if (retryCount == null) + { + retryCount = 0; + } + + if (retryCount >= Integer.valueOf(maxRetryCount).intValue()) + { + throw new UserPasswordRetryLimitExceedException(maxRetryCount, lockTime); + } + + if (!matches(user, password)) + { + retryCount = retryCount + 1; + redisCache.setCacheObject(getCacheKey(username), retryCount, lockTime, TimeUnit.MINUTES); + throw new UserPasswordNotMatchException(); + } + else + { + clearLoginRecordCache(username); + } + } + + public boolean matches(SysUser user, String rawPassword) + { + return SecurityUtils.matchesPassword(rawPassword, user.getPassword()); + } + + public void clearLoginRecordCache(String loginName) + { + if (redisCache.hasKey(getCacheKey(loginName))) + { + redisCache.deleteObject(getCacheKey(loginName)); + } + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/web/service/SysPermissionService.java b/evo-admin/src/main/java/com/evo/framework/web/service/SysPermissionService.java new file mode 100644 index 0000000..d1edd88 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/web/service/SysPermissionService.java @@ -0,0 +1,83 @@ +package com.evo.framework.web.service; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import com.evo.common.core.domain.entity.SysRole; +import com.evo.common.core.domain.entity.SysUser; +import com.evo.system.service.ISysMenuService; +import com.evo.system.service.ISysRoleService; + +/** + * 鐢ㄦ埛鏉冮檺澶勭悊 + * + * @author evo + */ +@Component +public class SysPermissionService +{ + @Autowired + private ISysRoleService roleService; + + @Autowired + private ISysMenuService menuService; + + /** + * 鑾峰彇瑙掕壊鏁版嵁鏉冮檺 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 瑙掕壊鏉冮檺淇℃伅 + */ + public Set getRolePermission(SysUser user) + { + Set roles = new HashSet(); + // 绠$悊鍛樻嫢鏈夋墍鏈夋潈闄 + if (user.isAdmin()) + { + roles.add("admin"); + } + else + { + roles.addAll(roleService.selectRolePermissionByUserId(user.getUserId())); + } + return roles; + } + + /** + * 鑾峰彇鑿滃崟鏁版嵁鏉冮檺 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 鑿滃崟鏉冮檺淇℃伅 + */ + public Set getMenuPermission(SysUser user) + { + Set perms = new HashSet(); + // 绠$悊鍛樻嫢鏈夋墍鏈夋潈闄 + if (user.isAdmin()) + { + perms.add("*:*:*"); + } + else + { + List roles = user.getRoles(); + if (!CollectionUtils.isEmpty(roles)) + { + // 澶氳鑹茶缃畃ermissions灞炴э紝浠ヤ究鏁版嵁鏉冮檺鍖归厤鏉冮檺 + for (SysRole role : roles) + { + Set rolePerms = menuService.selectMenuPermsByRoleId(role.getRoleId()); + role.setPermissions(rolePerms); + perms.addAll(rolePerms); + } + } + else + { + perms.addAll(menuService.selectMenuPermsByUserId(user.getUserId())); + } + } + return perms; + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/web/service/SysRegisterService.java b/evo-admin/src/main/java/com/evo/framework/web/service/SysRegisterService.java new file mode 100644 index 0000000..32ced03 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/web/service/SysRegisterService.java @@ -0,0 +1,104 @@ +package com.evo.framework.web.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import com.evo.common.constant.CacheConstants; +import com.evo.common.constant.Constants; +import com.evo.common.constant.UserConstants; +import com.evo.common.core.domain.entity.SysUser; +import com.evo.common.core.domain.model.RegisterBody; +import com.evo.common.core.redis.RedisCache; +import com.evo.common.exception.user.CaptchaException; +import com.evo.common.exception.user.CaptchaExpireException; +import com.evo.common.utils.MessageUtils; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.framework.manager.AsyncManager; +import com.evo.framework.manager.factory.AsyncFactory; +import com.evo.system.service.ISysUserService; + +/** + * 娉ㄥ唽鏍¢獙鏂规硶 + * + * @author evo + */ +@Component +public class SysRegisterService +{ + @Autowired + private ISysUserService userService; + + @Autowired + private RedisCache redisCache; + + /** + * 娉ㄥ唽 + */ + public String register(RegisterBody registerBody) + { + String msg = "", username = registerBody.getUsername(), password = registerBody.getPassword(); + SysUser sysUser = new SysUser(); + sysUser.setUserName(username); + + if (StringUtils.isEmpty(username)) + { + msg = "鐢ㄦ埛鍚嶄笉鑳戒负绌"; + } + else if (StringUtils.isEmpty(password)) + { + msg = "鐢ㄦ埛瀵嗙爜涓嶈兘涓虹┖"; + } + else if (username.length() < UserConstants.USERNAME_MIN_LENGTH + || username.length() > UserConstants.USERNAME_MAX_LENGTH) + { + msg = "璐︽埛闀垮害蹇呴』鍦2鍒20涓瓧绗︿箣闂"; + } + else if (password.length() < UserConstants.PASSWORD_MIN_LENGTH + || password.length() > UserConstants.PASSWORD_MAX_LENGTH) + { + msg = "瀵嗙爜闀垮害蹇呴』鍦5鍒20涓瓧绗︿箣闂"; + } + else if (!userService.checkUserNameUnique(sysUser)) + { + msg = "淇濆瓨鐢ㄦ埛'" + username + "'澶辫触锛屾敞鍐岃处鍙峰凡瀛樺湪"; + } + else + { + sysUser.setNickName(username); + sysUser.setPassword(SecurityUtils.encryptPassword(password)); + boolean regFlag = userService.registerUser(sysUser); + if (!regFlag) + { + msg = "娉ㄥ唽澶辫触,璇疯仈绯荤郴缁熺鐞嗕汉鍛"; + } + else + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.REGISTER, MessageUtils.message("user.register.success"))); + } + } + return msg; + } + + /** + * 鏍¢獙楠岃瘉鐮 + * + * @param username 鐢ㄦ埛鍚 + * @param code 楠岃瘉鐮 + * @param uuid 鍞竴鏍囪瘑 + * @return 缁撴灉 + */ + public void validateCaptcha(String username, String code, String uuid) + { + String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, ""); + String captcha = redisCache.getCacheObject(verifyKey); + redisCache.deleteObject(verifyKey); + if (captcha == null) + { + throw new CaptchaExpireException(); + } + if (!code.equalsIgnoreCase(captcha)) + { + throw new CaptchaException(); + } + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/web/service/TokenService.java b/evo-admin/src/main/java/com/evo/framework/web/service/TokenService.java new file mode 100644 index 0000000..222c012 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/web/service/TokenService.java @@ -0,0 +1,231 @@ +package com.evo.framework.web.service; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import javax.servlet.http.HttpServletRequest; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import com.evo.common.constant.CacheConstants; +import com.evo.common.constant.Constants; +import com.evo.common.core.domain.model.LoginUser; +import com.evo.common.core.redis.RedisCache; +import com.evo.common.utils.ServletUtils; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.ip.AddressUtils; +import com.evo.common.utils.ip.IpUtils; +import com.evo.common.utils.uuid.IdUtils; +import eu.bitwalker.useragentutils.UserAgent; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; + +/** + * token楠岃瘉澶勭悊 + * + * @author evo + */ +@Component +public class TokenService +{ + private static final Logger log = LoggerFactory.getLogger(TokenService.class); + + // 浠ょ墝鑷畾涔夋爣璇 + @Value("${token.header}") + private String header; + + // 浠ょ墝绉橀挜 + @Value("${token.secret}") + private String secret; + + // 浠ょ墝鏈夋晥鏈燂紙榛樿30鍒嗛挓锛 + @Value("${token.expireTime}") + private int expireTime; + + protected static final long MILLIS_SECOND = 1000; + + protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND; + + private static final Long MILLIS_MINUTE_TEN = 20 * 60 * 1000L; + + @Autowired + private RedisCache redisCache; + + /** + * 鑾峰彇鐢ㄦ埛韬唤淇℃伅 + * + * @return 鐢ㄦ埛淇℃伅 + */ + public LoginUser getLoginUser(HttpServletRequest request) + { + // 鑾峰彇璇锋眰鎼哄甫鐨勪护鐗 + String token = getToken(request); + if (StringUtils.isNotEmpty(token)) + { + try + { + Claims claims = parseToken(token); + // 瑙f瀽瀵瑰簲鐨勬潈闄愪互鍙婄敤鎴蜂俊鎭 + String uuid = (String) claims.get(Constants.LOGIN_USER_KEY); + String userKey = getTokenKey(uuid); + LoginUser user = redisCache.getCacheObject(userKey); + return user; + } + catch (Exception e) + { + log.error("鑾峰彇鐢ㄦ埛淇℃伅寮傚父'{}'", e.getMessage()); + } + } + return null; + } + + /** + * 璁剧疆鐢ㄦ埛韬唤淇℃伅 + */ + public void setLoginUser(LoginUser loginUser) + { + if (StringUtils.isNotNull(loginUser) && StringUtils.isNotEmpty(loginUser.getToken())) + { + refreshToken(loginUser); + } + } + + /** + * 鍒犻櫎鐢ㄦ埛韬唤淇℃伅 + */ + public void delLoginUser(String token) + { + if (StringUtils.isNotEmpty(token)) + { + String userKey = getTokenKey(token); + redisCache.deleteObject(userKey); + } + } + + /** + * 鍒涘缓浠ょ墝 + * + * @param loginUser 鐢ㄦ埛淇℃伅 + * @return 浠ょ墝 + */ + public String createToken(LoginUser loginUser) + { + String token = IdUtils.fastUUID(); + loginUser.setToken(token); + setUserAgent(loginUser); + refreshToken(loginUser); + + Map claims = new HashMap<>(); + claims.put(Constants.LOGIN_USER_KEY, token); + return createToken(claims); + } + + /** + * 楠岃瘉浠ょ墝鏈夋晥鏈燂紝鐩稿樊涓嶈冻20鍒嗛挓锛岃嚜鍔ㄥ埛鏂扮紦瀛 + * + * @param loginUser + * @return 浠ょ墝 + */ + public void verifyToken(LoginUser loginUser) + { + long expireTime = loginUser.getExpireTime(); + long currentTime = System.currentTimeMillis(); + if (expireTime - currentTime <= MILLIS_MINUTE_TEN) + { + refreshToken(loginUser); + } + } + + /** + * 鍒锋柊浠ょ墝鏈夋晥鏈 + * + * @param loginUser 鐧诲綍淇℃伅 + */ + public void refreshToken(LoginUser loginUser) + { + loginUser.setLoginTime(System.currentTimeMillis()); + loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE); + // 鏍规嵁uuid灏唋oginUser缂撳瓨 + String userKey = getTokenKey(loginUser.getToken()); + redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES); + } + + /** + * 璁剧疆鐢ㄦ埛浠g悊淇℃伅 + * + * @param loginUser 鐧诲綍淇℃伅 + */ + public void setUserAgent(LoginUser loginUser) + { + UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); + String ip = IpUtils.getIpAddr(); + loginUser.setIpaddr(ip); + loginUser.setLoginLocation(AddressUtils.getRealAddressByIP(ip)); + loginUser.setBrowser(userAgent.getBrowser().getName()); + loginUser.setOs(userAgent.getOperatingSystem().getName()); + } + + /** + * 浠庢暟鎹0鏄庣敓鎴愪护鐗 + * + * @param claims 鏁版嵁澹版槑 + * @return 浠ょ墝 + */ + private String createToken(Map claims) + { + String token = Jwts.builder() + .setClaims(claims) + .signWith(SignatureAlgorithm.HS512, secret).compact(); + return token; + } + + /** + * 浠庝护鐗屼腑鑾峰彇鏁版嵁澹版槑 + * + * @param token 浠ょ墝 + * @return 鏁版嵁澹版槑 + */ + private Claims parseToken(String token) + { + return Jwts.parser() + .setSigningKey(secret) + .parseClaimsJws(token) + .getBody(); + } + + /** + * 浠庝护鐗屼腑鑾峰彇鐢ㄦ埛鍚 + * + * @param token 浠ょ墝 + * @return 鐢ㄦ埛鍚 + */ + public String getUsernameFromToken(String token) + { + Claims claims = parseToken(token); + return claims.getSubject(); + } + + /** + * 鑾峰彇璇锋眰token + * + * @param request + * @return token + */ + private String getToken(HttpServletRequest request) + { + String token = request.getHeader(header); + if (StringUtils.isNotEmpty(token) && token.startsWith(Constants.TOKEN_PREFIX)) + { + token = token.replace(Constants.TOKEN_PREFIX, ""); + } + return token; + } + + private String getTokenKey(String uuid) + { + return CacheConstants.LOGIN_TOKEN_KEY + uuid; + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/web/service/UserDetailsServiceImpl.java b/evo-admin/src/main/java/com/evo/framework/web/service/UserDetailsServiceImpl.java new file mode 100644 index 0000000..ebed900 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/web/service/UserDetailsServiceImpl.java @@ -0,0 +1,66 @@ +package com.evo.framework.web.service; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; +import com.evo.common.core.domain.entity.SysUser; +import com.evo.common.core.domain.model.LoginUser; +import com.evo.common.enums.UserStatus; +import com.evo.common.exception.ServiceException; +import com.evo.common.utils.MessageUtils; +import com.evo.common.utils.StringUtils; +import com.evo.system.service.ISysUserService; + +/** + * 鐢ㄦ埛楠岃瘉澶勭悊 + * + * @author evo + */ +@Service +public class UserDetailsServiceImpl implements UserDetailsService +{ + private static final Logger log = LoggerFactory.getLogger(UserDetailsServiceImpl.class); + + @Autowired + private ISysUserService userService; + + @Autowired + private SysPasswordService passwordService; + + @Autowired + private SysPermissionService permissionService; + + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException + { + SysUser user = userService.selectUserByUserName(username); + if (StringUtils.isNull(user)) + { + log.info("鐧诲綍鐢ㄦ埛锛歿} 涓嶅瓨鍦.", username); + throw new ServiceException(MessageUtils.message("user.not.exists")); + } + else if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) + { + log.info("鐧诲綍鐢ㄦ埛锛歿} 宸茶鍒犻櫎.", username); + throw new ServiceException(MessageUtils.message("user.password.delete")); + } + else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) + { + log.info("鐧诲綍鐢ㄦ埛锛歿} 宸茶鍋滅敤.", username); + throw new ServiceException(MessageUtils.message("user.blocked")); + } + + passwordService.validate(user); + + return createLoginUser(user); + } + + public UserDetails createLoginUser(SysUser user) + { + return new LoginUser(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user)); + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/websocket/SemaphoreUtils.java b/evo-admin/src/main/java/com/evo/framework/websocket/SemaphoreUtils.java new file mode 100644 index 0000000..4b00165 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/websocket/SemaphoreUtils.java @@ -0,0 +1,59 @@ +package com.evo.framework.websocket; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.concurrent.Semaphore; + +/** + * 淇″彿閲忕浉鍏冲鐞 + * + * @author ruoyi + */ +public class SemaphoreUtils +{ + /** + * SemaphoreUtils 鏃ュ織鎺у埗鍣 + */ + private static final Logger LOGGER = LoggerFactory.getLogger(SemaphoreUtils.class); + + /** + * 鑾峰彇淇″彿閲 + * + * @param semaphore + * @return + */ + public static boolean tryAcquire(Semaphore semaphore) + { + boolean flag = false; + + try + { + flag = semaphore.tryAcquire(); + } + catch (Exception e) + { + LOGGER.error("鑾峰彇淇″彿閲忓紓甯", e); + } + + return flag; + } + + /** + * 閲婃斁淇″彿閲 + * + * @param semaphore + */ + public static void release(Semaphore semaphore) + { + + try + { + semaphore.release(); + } + catch (Exception e) + { + LOGGER.error("閲婃斁淇″彿閲忓紓甯", e); + } + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/websocket/WebSocketConfig.java b/evo-admin/src/main/java/com/evo/framework/websocket/WebSocketConfig.java new file mode 100644 index 0000000..654650a --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/websocket/WebSocketConfig.java @@ -0,0 +1,22 @@ +package com.evo.framework.websocket; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + +/** + * websocket 閰嶇疆 + * + * @author ruoyi + */ +@ConditionalOnProperty(name = "spring.profiles.active", havingValue = "") +@Configuration +public class WebSocketConfig +{ + @Bean + public ServerEndpointExporter serverEndpointExporter() + { + return new ServerEndpointExporter(); + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/websocket/WebSocketServer.java b/evo-admin/src/main/java/com/evo/framework/websocket/WebSocketServer.java new file mode 100644 index 0000000..670f970 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/websocket/WebSocketServer.java @@ -0,0 +1,166 @@ +package com.evo.framework.websocket; + +import com.alibaba.fastjson2.JSONObject; +import com.evo.common.constant.Constants; +import com.evo.equipment.domain.EqSnDetail; +import com.evo.equipment.service.IEqSnDetailService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.stereotype.Component; +import javax.websocket.*; +import javax.websocket.server.ServerEndpoint; +import java.util.Date; +import java.util.concurrent.Semaphore; + +/** + * websocket 娑堟伅澶勭悊 + * + * @author ruoyi + */ +@ConditionalOnClass(value = WebSocketServer.class) +@Component +@ServerEndpoint("/websocket/message") +public class WebSocketServer{ + + private static IEqSnDetailService snDetailService; + + @Autowired + public void setBrandService(IEqSnDetailService snDetailService) { + WebSocketServer.snDetailService = snDetailService; + } + + /** + * WebSocketServer 鏃ュ織鎺у埗鍣 + */ + private static final Logger LOGGER = LoggerFactory.getLogger(WebSocketServer.class); + + /** + * 榛樿鏈澶氬厑璁稿悓鏃跺湪绾夸汉鏁100 + */ + public static int socketMaxOnlineCount = 100; + + private static Semaphore socketSemaphore = new Semaphore(socketMaxOnlineCount); + + /** + * 杩炴帴寤虹珛鎴愬姛璋冪敤鐨勬柟娉 + */ + @OnOpen + public void onOpen(Session session) throws Exception{ + boolean semaphoreFlag = false; + // 灏濊瘯鑾峰彇淇″彿閲 + semaphoreFlag = SemaphoreUtils.tryAcquire(socketSemaphore); + if (!semaphoreFlag){ + // 鏈幏鍙栧埌淇″彿閲 + LOGGER.error("\n 褰撳墠鍦ㄧ嚎浜烘暟瓒呰繃闄愬埗鏁- {}", socketMaxOnlineCount); + WebSocketUsers.sendMessageToUserByText(session, "褰撳墠鍦ㄧ嚎浜烘暟瓒呰繃闄愬埗鏁帮細" + socketMaxOnlineCount); + session.close(); + }else{ + // 娣诲姞鐢ㄦ埛 + WebSocketUsers.put(session.getId(), session); + LOGGER.info("\n 寤虹珛杩炴帴 - {}", session); + LOGGER.info("\n 褰撳墠浜烘暟 - {}", WebSocketUsers.getUsers().size()); + } + } + + /** + * 杩炴帴鍏抽棴鏃跺鐞 + */ + @OnClose + public void onClose(Session session) + { + LOGGER.info("\n 鍏抽棴杩炴帴 - {}", session); + // 绉婚櫎鐢ㄦ埛 + WebSocketUsers.remove(session.getId()); + // 鑾峰彇鍒颁俊鍙烽噺鍒欓渶閲婃斁 + SemaphoreUtils.release(socketSemaphore); + } + + /** + * 鎶涘嚭寮傚父鏃跺鐞 + */ + @OnError + public void onError(Session session, Throwable exception) throws Exception + { + if (session.isOpen()) + { + // 鍏抽棴杩炴帴 + session.close(); + } + String sessionId = session.getId(); + LOGGER.info("\n 杩炴帴寮傚父 - {}", sessionId); + LOGGER.info("\n 寮傚父淇℃伅 - {}", exception); + // 绉诲嚭鐢ㄦ埛 + WebSocketUsers.remove(sessionId); + // 鑾峰彇鍒颁俊鍙烽噺鍒欓渶閲婃斁 + SemaphoreUtils.release(socketSemaphore); + } + + /** + * 鏈嶅姟鍣ㄦ帴鏀跺埌瀹㈡埛绔秷鎭椂璋冪敤鐨勬柟娉 + */ + @OnMessage + public void onMessage(String message, Session session){ + + //瑙f瀽瀹㈡埛绔彂閫佺殑娑堟伅 + JSONObject jsonObject = JSONObject.parseObject(message); + System.out.println("shuju:"+jsonObject); + String cmd = jsonObject.getString("cmd"); + if(null != cmd&&cmd.equals("ping")){ + //蹇冭烦璇锋眰 + String s = "{\"cmd\":\"pong\"}"; + //鍗曞彂user 杩斿洖 pong + WebSocketUsers.sendMessageToUserByText(session,s); + } + if(null != cmd&&cmd.equals("declare")){ + //瀹㈡埛绔0鏄,鍒ゆ柇璁惧淇℃伅琛ㄤ腑鏄惁鏈夋璁惧鐨勪俊鎭紝濡傛灉鏈夊垯淇敼锛屽鏋滄病鏈夊垯鏂板 + //璇锋眰鐨勬暟鎹 + String type = jsonObject.getString("type"); + //璁惧鍙 + String sn = jsonObject.getString("sn"); + //鍐呴儴鐗堟湰鍙 + String version_code = jsonObject.getString("version_code"); + //璁惧璇嗗埆椤甸潰鏄剧ず鐨勭増鏈彿 + String version_name = jsonObject.getString("version_name"); + //ip鍦板潃 + String ip = jsonObject.getString("ip"); + //璁惧褰撳墠鏃堕棿锛岀绾у埆鏃堕棿鎴 + String timestamp = jsonObject.getString("timestamp"); + //鏍规嵁璁惧鍙锋煡璇 + EqSnDetail snDetail = snDetailService.selectEqSnDetailBySn(sn); + + //鏍煎紡鍖栨椂闂 + Date date = new Date(); + if(null != timestamp){ + date.setTime(Long.valueOf(timestamp)*1000); + } + if(null != snDetail){ + //璇存槑娣诲姞杩囨璁惧锛屼慨鏀 + snDetail.setVersionCode(version_code); + snDetail.setVersionName(version_name); + snDetail.setIp(ip); + snDetail.setSnTime(date); + snDetail.setType("宸茶繛鎺"); + //淇敼 + snDetailService.updateEqSnDetail(snDetail); + }else{ + //璇存槑娌℃湁娣诲姞杩囨璁惧锛屾坊鍔 + snDetail = new EqSnDetail(); + //璁惧鍙 + snDetail.setSn(sn); + snDetail.setVersionCode(version_code); + snDetail.setVersionName(version_name); + snDetail.setIp(ip); + snDetail.setSnTime(date); + snDetail.setType("宸茶繛鎺"); + snDetail.setDelFlag(Constants.DELETE_FLAG_0); + //娣诲姞 + snDetailService.insertEqSnDetail(snDetail); + } + }else{ + //鎺ュ彈璁惧绔繑鍥炵殑鏁版嵁锛屽厛涓嶅仛澶勭悊 + System.out.println("璁惧杩斿洖淇℃伅锛"+message); + } + } +} diff --git a/evo-admin/src/main/java/com/evo/framework/websocket/WebSocketUsers.java b/evo-admin/src/main/java/com/evo/framework/websocket/WebSocketUsers.java new file mode 100644 index 0000000..5738c6f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/framework/websocket/WebSocketUsers.java @@ -0,0 +1,135 @@ +package com.evo.framework.websocket; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.websocket.Session; +import java.io.IOException; +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + +/** + * websocket 瀹㈡埛绔敤鎴烽泦 + * + * @author ruoyi + */ +public class WebSocketUsers +{ + /** + * WebSocketUsers 鏃ュ織鎺у埗鍣 + */ + private static final Logger LOGGER = LoggerFactory.getLogger(WebSocketUsers.class); + + /** + * 鐢ㄦ埛闆 + */ + private static Map USERS = new ConcurrentHashMap(); + + /** + * 瀛樺偍鐢ㄦ埛 + * + * @param key 鍞竴閿 + * @param session 鐢ㄦ埛淇℃伅 + */ + public static void put(String key, Session session) + { + USERS.put(key, session); + } + + /** + * 绉婚櫎鐢ㄦ埛 + * + * @param session 鐢ㄦ埛淇℃伅 + * + * @return 绉婚櫎缁撴灉 + */ + public static boolean remove(Session session) + { + String key = null; + boolean flag = USERS.containsValue(session); + if (flag){ + Set> entries = USERS.entrySet(); + for (Map.Entry entry : entries){ + Session value = entry.getValue(); + if (value.equals(session)){ + key = entry.getKey(); + break; + } + } + } + else{ + return true; + } + return remove(key); + } + + /** + * 绉诲嚭鐢ㄦ埛 + * + * @param key 閿 + */ + public static boolean remove(String key) + { + LOGGER.info("\n 姝e湪绉诲嚭鐢ㄦ埛 - {}", key); + Session remove = USERS.remove(key); + if (remove != null){ + boolean containsValue = USERS.containsValue(remove); + LOGGER.info("\n 绉诲嚭缁撴灉 - {}", containsValue ? "澶辫触" : "鎴愬姛"); + return containsValue; + } + else + { + return true; + } + } + + /** + * 鑾峰彇鍦ㄧ嚎鐢ㄦ埛鍒楄〃 + * + * @return 杩斿洖鐢ㄦ埛闆嗗悎 + */ + public static Map getUsers() + { + return USERS; + } + + /** + * 缇ゅ彂娑堟伅鏂囨湰娑堟伅 + * + * @param message 娑堟伅鍐呭 + */ + public static void sendMessageToUsersByText(String message){ + Collection values = USERS.values(); + for (Session value : values){ + sendMessageToUserByText(value, message); + } + } + + /** + * 鍙戦佹枃鏈秷鎭 + * + * @param session 鑷繁鐨勭敤鎴峰悕 + * @param message 娑堟伅鍐呭 + */ + public static void sendMessageToUserByText(Session session, String message) + { + if (session != null) + { + try + { + session.getBasicRemote().sendText(message); + System.out.println("鍙戦佹垚鍔燂細"+message); + } + catch (IOException e) + { + LOGGER.error("\n[鍙戦佹秷鎭紓甯竇", e); + } + } + else + { + LOGGER.info("\n[浣犲凡绂荤嚎]"); + } + } +} diff --git a/evo-admin/src/main/java/com/evo/generator/config/GenConfig.java b/evo-admin/src/main/java/com/evo/generator/config/GenConfig.java new file mode 100644 index 0000000..c6852e7 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/generator/config/GenConfig.java @@ -0,0 +1,73 @@ +package com.evo.generator.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.PropertySource; +import org.springframework.stereotype.Component; + +/** + * 璇诲彇浠g爜鐢熸垚鐩稿叧閰嶇疆 + * + * @author evo + */ +@Component +@ConfigurationProperties(prefix = "gen") +@PropertySource(value = { "classpath:generator.yml" }) +public class GenConfig +{ + /** 浣滆 */ + public static String author; + + /** 鐢熸垚鍖呰矾寰 */ + public static String packageName; + + /** 鑷姩鍘婚櫎琛ㄥ墠缂锛岄粯璁ゆ槸false */ + public static boolean autoRemovePre; + + /** 琛ㄥ墠缂(绫诲悕涓嶄細鍖呭惈琛ㄥ墠缂) */ + public static String tablePrefix; + + public static String getAuthor() + { + return author; + } + + @Value("${author}") + public void setAuthor(String author) + { + GenConfig.author = author; + } + + public static String getPackageName() + { + return packageName; + } + + @Value("${packageName}") + public void setPackageName(String packageName) + { + GenConfig.packageName = packageName; + } + + public static boolean getAutoRemovePre() + { + return autoRemovePre; + } + + @Value("${autoRemovePre}") + public void setAutoRemovePre(boolean autoRemovePre) + { + GenConfig.autoRemovePre = autoRemovePre; + } + + public static String getTablePrefix() + { + return tablePrefix; + } + + @Value("${tablePrefix}") + public void setTablePrefix(String tablePrefix) + { + GenConfig.tablePrefix = tablePrefix; + } +} diff --git a/evo-admin/src/main/java/com/evo/generator/controller/GenController.java b/evo-admin/src/main/java/com/evo/generator/controller/GenController.java new file mode 100644 index 0000000..10ccd37 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/generator/controller/GenController.java @@ -0,0 +1,258 @@ +package com.evo.generator.controller; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.servlet.http.HttpServletResponse; +import org.apache.commons.io.IOUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.alibaba.druid.DbType; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement; +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.core.text.Convert; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.sql.SqlUtil; +import com.evo.generator.domain.GenTable; +import com.evo.generator.domain.GenTableColumn; +import com.evo.generator.service.IGenTableColumnService; +import com.evo.generator.service.IGenTableService; + +/** + * 浠g爜鐢熸垚 鎿嶄綔澶勭悊 + * + * @author evo + */ +@RestController +@RequestMapping("/tool/gen") +public class GenController extends BaseController +{ + @Autowired + private IGenTableService genTableService; + + @Autowired + private IGenTableColumnService genTableColumnService; + + /** + * 鏌ヨ浠g爜鐢熸垚鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:list')") + @GetMapping("/list") + public TableDataInfo genList(GenTable genTable) + { + startPage(); + List list = genTableService.selectGenTableList(genTable); + return getDataTable(list); + } + + /** + * 淇敼浠g爜鐢熸垚涓氬姟 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:query')") + @GetMapping(value = "/{tableId}") + public AjaxResult getInfo(@PathVariable Long tableId) + { + GenTable table = genTableService.selectGenTableById(tableId); + List tables = genTableService.selectGenTableAll(); + List list = genTableColumnService.selectGenTableColumnListByTableId(tableId); + Map map = new HashMap(); + map.put("info", table); + map.put("rows", list); + map.put("tables", tables); + return success(map); + } + + /** + * 鏌ヨ鏁版嵁搴撳垪琛 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:list')") + @GetMapping("/db/list") + public TableDataInfo dataList(GenTable genTable) + { + startPage(); + List list = genTableService.selectDbTableList(genTable); + return getDataTable(list); + } + + /** + * 鏌ヨ鏁版嵁琛ㄥ瓧娈靛垪琛 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:list')") + @GetMapping(value = "/column/{tableId}") + public TableDataInfo columnList(Long tableId) + { + TableDataInfo dataInfo = new TableDataInfo(); + List list = genTableColumnService.selectGenTableColumnListByTableId(tableId); + dataInfo.setRows(list); + dataInfo.setTotal(list.size()); + return dataInfo; + } + + /** + * 瀵煎叆琛ㄧ粨鏋勶紙淇濆瓨锛 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:import')") + @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.IMPORT) + @PostMapping("/importTable") + public AjaxResult importTableSave(String tables) + { + String[] tableNames = Convert.toStrArray(tables); + // 鏌ヨ琛ㄤ俊鎭 + List tableList = genTableService.selectDbTableListByNames(tableNames); + genTableService.importGenTable(tableList, SecurityUtils.getUsername()); + return success(); + } + + /** + * 鍒涘缓琛ㄧ粨鏋勶紙淇濆瓨锛 + */ + @PreAuthorize("@ss.hasRole('admin')") + @Log(title = "鍒涘缓琛", businessType = BusinessType.OTHER) + @PostMapping("/createTable") + public AjaxResult createTableSave(String sql) + { + try + { + SqlUtil.filterKeyword(sql); + List sqlStatements = SQLUtils.parseStatements(sql, DbType.mysql); + List tableNames = new ArrayList<>(); + for (SQLStatement sqlStatement : sqlStatements) + { + if (sqlStatement instanceof MySqlCreateTableStatement) + { + MySqlCreateTableStatement createTableStatement = (MySqlCreateTableStatement) sqlStatement; + if (genTableService.createTable(createTableStatement.toString())) + { + String tableName = createTableStatement.getTableName().replaceAll("`", ""); + tableNames.add(tableName); + } + } + } + List tableList = genTableService.selectDbTableListByNames(tableNames.toArray(new String[tableNames.size()])); + String operName = SecurityUtils.getUsername(); + genTableService.importGenTable(tableList, operName); + return AjaxResult.success(); + } + catch (Exception e) + { + logger.error(e.getMessage(), e); + return AjaxResult.error("鍒涘缓琛ㄧ粨鏋勫紓甯"); + } + } + + /** + * 淇敼淇濆瓨浠g爜鐢熸垚涓氬姟 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:edit')") + @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult editSave(@Validated @RequestBody GenTable genTable) + { + genTableService.validateEdit(genTable); + genTableService.updateGenTable(genTable); + return success(); + } + + /** + * 鍒犻櫎浠g爜鐢熸垚 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:remove')") + @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.DELETE) + @DeleteMapping("/{tableIds}") + public AjaxResult remove(@PathVariable Long[] tableIds) + { + genTableService.deleteGenTableByIds(tableIds); + return success(); + } + + /** + * 棰勮浠g爜 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:preview')") + @GetMapping("/preview/{tableId}") + public AjaxResult preview(@PathVariable("tableId") Long tableId) throws IOException + { + Map dataMap = genTableService.previewCode(tableId); + return success(dataMap); + } + + /** + * 鐢熸垚浠g爜锛堜笅杞芥柟寮忥級 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:code')") + @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.GENCODE) + @GetMapping("/download/{tableName}") + public void download(HttpServletResponse response, @PathVariable("tableName") String tableName) throws IOException + { + byte[] data = genTableService.downloadCode(tableName); + genCode(response, data); + } + + /** + * 鐢熸垚浠g爜锛堣嚜瀹氫箟璺緞锛 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:code')") + @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.GENCODE) + @GetMapping("/genCode/{tableName}") + public AjaxResult genCode(@PathVariable("tableName") String tableName) + { + genTableService.generatorCode(tableName); + return success(); + } + + /** + * 鍚屾鏁版嵁搴 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:edit')") + @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.UPDATE) + @GetMapping("/synchDb/{tableName}") + public AjaxResult synchDb(@PathVariable("tableName") String tableName) + { + genTableService.synchDb(tableName); + return success(); + } + + /** + * 鎵归噺鐢熸垚浠g爜 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:code')") + @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.GENCODE) + @GetMapping("/batchGenCode") + public void batchGenCode(HttpServletResponse response, String tables) throws IOException + { + String[] tableNames = Convert.toStrArray(tables); + byte[] data = genTableService.downloadCode(tableNames); + genCode(response, data); + } + + /** + * 鐢熸垚zip鏂囦欢 + */ + private void genCode(HttpServletResponse response, byte[] data) throws IOException + { + response.reset(); + response.addHeader("Access-Control-Allow-Origin", "*"); + response.addHeader("Access-Control-Expose-Headers", "Content-Disposition"); + response.setHeader("Content-Disposition", "attachment; filename=\"evo.zip\""); + response.addHeader("Content-Length", "" + data.length); + response.setContentType("application/octet-stream; charset=UTF-8"); + IOUtils.write(data, response.getOutputStream()); + } +} diff --git a/evo-admin/src/main/java/com/evo/generator/domain/GenTable.java b/evo-admin/src/main/java/com/evo/generator/domain/GenTable.java new file mode 100644 index 0000000..36971b5 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/generator/domain/GenTable.java @@ -0,0 +1,385 @@ +package com.evo.generator.domain; + +import java.util.List; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import org.apache.commons.lang3.ArrayUtils; +import com.evo.common.constant.GenConstants; +import com.evo.common.core.domain.BaseEntity; +import com.evo.common.utils.StringUtils; + +/** + * 涓氬姟琛 gen_table + * + * @author evo + */ +public class GenTable extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 缂栧彿 */ + private Long tableId; + + /** 琛ㄥ悕绉 */ + @NotBlank(message = "琛ㄥ悕绉颁笉鑳戒负绌") + private String tableName; + + /** 琛ㄦ弿杩 */ + @NotBlank(message = "琛ㄦ弿杩颁笉鑳戒负绌") + private String tableComment; + + /** 鍏宠仈鐖惰〃鐨勮〃鍚 */ + private String subTableName; + + /** 鏈〃鍏宠仈鐖惰〃鐨勫閿悕 */ + private String subTableFkName; + + /** 瀹炰綋绫诲悕绉(棣栧瓧姣嶅ぇ鍐) */ + @NotBlank(message = "瀹炰綋绫诲悕绉颁笉鑳戒负绌") + private String className; + + /** 浣跨敤鐨勬ā鏉匡紙crud鍗曡〃鎿嶄綔 tree鏍戣〃鎿嶄綔 sub涓诲瓙琛ㄦ搷浣滐級 */ + private String tplCategory; + + /** 鍓嶇绫诲瀷锛坋lement-ui妯$増 element-plus妯$増锛 */ + private String tplWebType; + + /** 鐢熸垚鍖呰矾寰 */ + @NotBlank(message = "鐢熸垚鍖呰矾寰勪笉鑳戒负绌") + private String packageName; + + /** 鐢熸垚妯″潡鍚 */ + @NotBlank(message = "鐢熸垚妯″潡鍚嶄笉鑳戒负绌") + private String moduleName; + + /** 鐢熸垚涓氬姟鍚 */ + @NotBlank(message = "鐢熸垚涓氬姟鍚嶄笉鑳戒负绌") + private String businessName; + + /** 鐢熸垚鍔熻兘鍚 */ + @NotBlank(message = "鐢熸垚鍔熻兘鍚嶄笉鑳戒负绌") + private String functionName; + + /** 鐢熸垚浣滆 */ + @NotBlank(message = "浣滆呬笉鑳戒负绌") + private String functionAuthor; + + /** 鐢熸垚浠g爜鏂瑰紡锛0zip鍘嬬缉鍖 1鑷畾涔夎矾寰勶級 */ + private String genType; + + /** 鐢熸垚璺緞锛堜笉濉粯璁ら」鐩矾寰勶級 */ + private String genPath; + + /** 涓婚敭淇℃伅 */ + private GenTableColumn pkColumn; + + /** 瀛愯〃淇℃伅 */ + private GenTable subTable; + + /** 琛ㄥ垪淇℃伅 */ + @Valid + private List columns; + + /** 鍏跺畠鐢熸垚閫夐」 */ + private String options; + + /** 鏍戠紪鐮佸瓧娈 */ + private String treeCode; + + /** 鏍戠埗缂栫爜瀛楁 */ + private String treeParentCode; + + /** 鏍戝悕绉板瓧娈 */ + private String treeName; + + /** 涓婄骇鑿滃崟ID瀛楁 */ + private String parentMenuId; + + /** 涓婄骇鑿滃崟鍚嶇О瀛楁 */ + private String parentMenuName; + + public Long getTableId() + { + return tableId; + } + + public void setTableId(Long tableId) + { + this.tableId = tableId; + } + + public String getTableName() + { + return tableName; + } + + public void setTableName(String tableName) + { + this.tableName = tableName; + } + + public String getTableComment() + { + return tableComment; + } + + public void setTableComment(String tableComment) + { + this.tableComment = tableComment; + } + + public String getSubTableName() + { + return subTableName; + } + + public void setSubTableName(String subTableName) + { + this.subTableName = subTableName; + } + + public String getSubTableFkName() + { + return subTableFkName; + } + + public void setSubTableFkName(String subTableFkName) + { + this.subTableFkName = subTableFkName; + } + + public String getClassName() + { + return className; + } + + public void setClassName(String className) + { + this.className = className; + } + + public String getTplCategory() + { + return tplCategory; + } + + public void setTplCategory(String tplCategory) + { + this.tplCategory = tplCategory; + } + + public String getTplWebType() + { + return tplWebType; + } + + public void setTplWebType(String tplWebType) + { + this.tplWebType = tplWebType; + } + + public String getPackageName() + { + return packageName; + } + + public void setPackageName(String packageName) + { + this.packageName = packageName; + } + + public String getModuleName() + { + return moduleName; + } + + public void setModuleName(String moduleName) + { + this.moduleName = moduleName; + } + + public String getBusinessName() + { + return businessName; + } + + public void setBusinessName(String businessName) + { + this.businessName = businessName; + } + + public String getFunctionName() + { + return functionName; + } + + public void setFunctionName(String functionName) + { + this.functionName = functionName; + } + + public String getFunctionAuthor() + { + return functionAuthor; + } + + public void setFunctionAuthor(String functionAuthor) + { + this.functionAuthor = functionAuthor; + } + + public String getGenType() + { + return genType; + } + + public void setGenType(String genType) + { + this.genType = genType; + } + + public String getGenPath() + { + return genPath; + } + + public void setGenPath(String genPath) + { + this.genPath = genPath; + } + + public GenTableColumn getPkColumn() + { + return pkColumn; + } + + public void setPkColumn(GenTableColumn pkColumn) + { + this.pkColumn = pkColumn; + } + + public GenTable getSubTable() + { + return subTable; + } + + public void setSubTable(GenTable subTable) + { + this.subTable = subTable; + } + + public List getColumns() + { + return columns; + } + + public void setColumns(List columns) + { + this.columns = columns; + } + + public String getOptions() + { + return options; + } + + public void setOptions(String options) + { + this.options = options; + } + + public String getTreeCode() + { + return treeCode; + } + + public void setTreeCode(String treeCode) + { + this.treeCode = treeCode; + } + + public String getTreeParentCode() + { + return treeParentCode; + } + + public void setTreeParentCode(String treeParentCode) + { + this.treeParentCode = treeParentCode; + } + + public String getTreeName() + { + return treeName; + } + + public void setTreeName(String treeName) + { + this.treeName = treeName; + } + + public String getParentMenuId() + { + return parentMenuId; + } + + public void setParentMenuId(String parentMenuId) + { + this.parentMenuId = parentMenuId; + } + + public String getParentMenuName() + { + return parentMenuName; + } + + public void setParentMenuName(String parentMenuName) + { + this.parentMenuName = parentMenuName; + } + + public boolean isSub() + { + return isSub(this.tplCategory); + } + + public static boolean isSub(String tplCategory) + { + return tplCategory != null && StringUtils.equals(GenConstants.TPL_SUB, tplCategory); + } + + public boolean isTree() + { + return isTree(this.tplCategory); + } + + public static boolean isTree(String tplCategory) + { + return tplCategory != null && StringUtils.equals(GenConstants.TPL_TREE, tplCategory); + } + + public boolean isCrud() + { + return isCrud(this.tplCategory); + } + + public static boolean isCrud(String tplCategory) + { + return tplCategory != null && StringUtils.equals(GenConstants.TPL_CRUD, tplCategory); + } + + public boolean isSuperColumn(String javaField) + { + return isSuperColumn(this.tplCategory, javaField); + } + + public static boolean isSuperColumn(String tplCategory, String javaField) + { + if (isTree(tplCategory)) + { + return StringUtils.equalsAnyIgnoreCase(javaField, + ArrayUtils.addAll(GenConstants.TREE_ENTITY, GenConstants.BASE_ENTITY)); + } + return StringUtils.equalsAnyIgnoreCase(javaField, GenConstants.BASE_ENTITY); + } +} diff --git a/evo-admin/src/main/java/com/evo/generator/domain/GenTableColumn.java b/evo-admin/src/main/java/com/evo/generator/domain/GenTableColumn.java new file mode 100644 index 0000000..0cffc2f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/generator/domain/GenTableColumn.java @@ -0,0 +1,373 @@ +package com.evo.generator.domain; + +import javax.validation.constraints.NotBlank; +import com.evo.common.core.domain.BaseEntity; +import com.evo.common.utils.StringUtils; + +/** + * 浠g爜鐢熸垚涓氬姟瀛楁琛 gen_table_column + * + * @author evo + */ +public class GenTableColumn extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 缂栧彿 */ + private Long columnId; + + /** 褰掑睘琛ㄧ紪鍙 */ + private Long tableId; + + /** 鍒楀悕绉 */ + private String columnName; + + /** 鍒楁弿杩 */ + private String columnComment; + + /** 鍒楃被鍨 */ + private String columnType; + + /** JAVA绫诲瀷 */ + private String javaType; + + /** JAVA瀛楁鍚 */ + @NotBlank(message = "Java灞炴т笉鑳戒负绌") + private String javaField; + + /** 鏄惁涓婚敭锛1鏄級 */ + private String isPk; + + /** 鏄惁鑷锛1鏄級 */ + private String isIncrement; + + /** 鏄惁蹇呭~锛1鏄級 */ + private String isRequired; + + /** 鏄惁涓烘彃鍏ュ瓧娈碉紙1鏄級 */ + private String isInsert; + + /** 鏄惁缂栬緫瀛楁锛1鏄級 */ + private String isEdit; + + /** 鏄惁鍒楄〃瀛楁锛1鏄級 */ + private String isList; + + /** 鏄惁鏌ヨ瀛楁锛1鏄級 */ + private String isQuery; + + /** 鏌ヨ鏂瑰紡锛圗Q绛変簬銆丯E涓嶇瓑浜庛丟T澶т簬銆丩T灏忎簬銆丩IKE妯$硦銆丅ETWEEN鑼冨洿锛 */ + private String queryType; + + /** 鏄剧ず绫诲瀷锛坕nput鏂囨湰妗嗐乼extarea鏂囨湰鍩熴乻elect涓嬫媺妗嗐乧heckbox澶嶉夋銆乺adio鍗曢夋銆乨atetime鏃ユ湡鎺т欢銆乮mage鍥剧墖涓婁紶鎺т欢銆乽pload鏂囦欢涓婁紶鎺т欢銆乪ditor瀵屾枃鏈帶浠讹級 */ + private String htmlType; + + /** 瀛楀吀绫诲瀷 */ + private String dictType; + + /** 鎺掑簭 */ + private Integer sort; + + public void setColumnId(Long columnId) + { + this.columnId = columnId; + } + + public Long getColumnId() + { + return columnId; + } + + public void setTableId(Long tableId) + { + this.tableId = tableId; + } + + public Long getTableId() + { + return tableId; + } + + public void setColumnName(String columnName) + { + this.columnName = columnName; + } + + public String getColumnName() + { + return columnName; + } + + public void setColumnComment(String columnComment) + { + this.columnComment = columnComment; + } + + public String getColumnComment() + { + return columnComment; + } + + public void setColumnType(String columnType) + { + this.columnType = columnType; + } + + public String getColumnType() + { + return columnType; + } + + public void setJavaType(String javaType) + { + this.javaType = javaType; + } + + public String getJavaType() + { + return javaType; + } + + public void setJavaField(String javaField) + { + this.javaField = javaField; + } + + public String getJavaField() + { + return javaField; + } + + public String getCapJavaField() + { + return StringUtils.capitalize(javaField); + } + + public void setIsPk(String isPk) + { + this.isPk = isPk; + } + + public String getIsPk() + { + return isPk; + } + + public boolean isPk() + { + return isPk(this.isPk); + } + + public boolean isPk(String isPk) + { + return isPk != null && StringUtils.equals("1", isPk); + } + + public String getIsIncrement() + { + return isIncrement; + } + + public void setIsIncrement(String isIncrement) + { + this.isIncrement = isIncrement; + } + + public boolean isIncrement() + { + return isIncrement(this.isIncrement); + } + + public boolean isIncrement(String isIncrement) + { + return isIncrement != null && StringUtils.equals("1", isIncrement); + } + + public void setIsRequired(String isRequired) + { + this.isRequired = isRequired; + } + + public String getIsRequired() + { + return isRequired; + } + + public boolean isRequired() + { + return isRequired(this.isRequired); + } + + public boolean isRequired(String isRequired) + { + return isRequired != null && StringUtils.equals("1", isRequired); + } + + public void setIsInsert(String isInsert) + { + this.isInsert = isInsert; + } + + public String getIsInsert() + { + return isInsert; + } + + public boolean isInsert() + { + return isInsert(this.isInsert); + } + + public boolean isInsert(String isInsert) + { + return isInsert != null && StringUtils.equals("1", isInsert); + } + + public void setIsEdit(String isEdit) + { + this.isEdit = isEdit; + } + + public String getIsEdit() + { + return isEdit; + } + + public boolean isEdit() + { + return isInsert(this.isEdit); + } + + public boolean isEdit(String isEdit) + { + return isEdit != null && StringUtils.equals("1", isEdit); + } + + public void setIsList(String isList) + { + this.isList = isList; + } + + public String getIsList() + { + return isList; + } + + public boolean isList() + { + return isList(this.isList); + } + + public boolean isList(String isList) + { + return isList != null && StringUtils.equals("1", isList); + } + + public void setIsQuery(String isQuery) + { + this.isQuery = isQuery; + } + + public String getIsQuery() + { + return isQuery; + } + + public boolean isQuery() + { + return isQuery(this.isQuery); + } + + public boolean isQuery(String isQuery) + { + return isQuery != null && StringUtils.equals("1", isQuery); + } + + public void setQueryType(String queryType) + { + this.queryType = queryType; + } + + public String getQueryType() + { + return queryType; + } + + public String getHtmlType() + { + return htmlType; + } + + public void setHtmlType(String htmlType) + { + this.htmlType = htmlType; + } + + public void setDictType(String dictType) + { + this.dictType = dictType; + } + + public String getDictType() + { + return dictType; + } + + public void setSort(Integer sort) + { + this.sort = sort; + } + + public Integer getSort() + { + return sort; + } + + public boolean isSuperColumn() + { + return isSuperColumn(this.javaField); + } + + public static boolean isSuperColumn(String javaField) + { + return StringUtils.equalsAnyIgnoreCase(javaField, + // BaseEntity + "createBy", "createTime", "updateBy", "updateTime", "remark", + // TreeEntity + "parentName", "parentId", "orderNum", "ancestors"); + } + + public boolean isUsableColumn() + { + return isUsableColumn(javaField); + } + + public static boolean isUsableColumn(String javaField) + { + // isSuperColumn()涓殑鍚嶅崟鐢ㄤ簬閬垮厤鐢熸垚澶氫綑Domain灞炴э紝鑻ユ煇浜涘睘鎬у湪鐢熸垚椤甸潰鏃堕渶瑕佺敤鍒颁笉鑳藉拷鐣ワ紝鍒欐斁鍦ㄦ澶勭櫧鍚嶅崟 + return StringUtils.equalsAnyIgnoreCase(javaField, "parentId", "orderNum", "remark"); + } + + public String readConverterExp() + { + String remarks = StringUtils.substringBetween(this.columnComment, "锛", "锛"); + StringBuffer sb = new StringBuffer(); + if (StringUtils.isNotEmpty(remarks)) + { + for (String value : remarks.split(" ")) + { + if (StringUtils.isNotEmpty(value)) + { + Object startStr = value.subSequence(0, 1); + String endStr = value.substring(1); + sb.append("").append(startStr).append("=").append(endStr).append(","); + } + } + return sb.deleteCharAt(sb.length() - 1).toString(); + } + else + { + return this.columnComment; + } + } +} diff --git a/evo-admin/src/main/java/com/evo/generator/mapper/GenTableColumnMapper.java b/evo-admin/src/main/java/com/evo/generator/mapper/GenTableColumnMapper.java new file mode 100644 index 0000000..09e40db --- /dev/null +++ b/evo-admin/src/main/java/com/evo/generator/mapper/GenTableColumnMapper.java @@ -0,0 +1,60 @@ +package com.evo.generator.mapper; + +import java.util.List; +import com.evo.generator.domain.GenTableColumn; + +/** + * 涓氬姟瀛楁 鏁版嵁灞 + * + * @author evo + */ +public interface GenTableColumnMapper +{ + /** + * 鏍规嵁琛ㄥ悕绉版煡璇㈠垪淇℃伅 + * + * @param tableName 琛ㄥ悕绉 + * @return 鍒椾俊鎭 + */ + public List selectDbTableColumnsByName(String tableName); + + /** + * 鏌ヨ涓氬姟瀛楁鍒楄〃 + * + * @param tableId 涓氬姟瀛楁缂栧彿 + * @return 涓氬姟瀛楁闆嗗悎 + */ + public List selectGenTableColumnListByTableId(Long tableId); + + /** + * 鏂板涓氬姟瀛楁 + * + * @param genTableColumn 涓氬姟瀛楁淇℃伅 + * @return 缁撴灉 + */ + public int insertGenTableColumn(GenTableColumn genTableColumn); + + /** + * 淇敼涓氬姟瀛楁 + * + * @param genTableColumn 涓氬姟瀛楁淇℃伅 + * @return 缁撴灉 + */ + public int updateGenTableColumn(GenTableColumn genTableColumn); + + /** + * 鍒犻櫎涓氬姟瀛楁 + * + * @param genTableColumns 鍒楁暟鎹 + * @return 缁撴灉 + */ + public int deleteGenTableColumns(List genTableColumns); + + /** + * 鎵归噺鍒犻櫎涓氬姟瀛楁 + * + * @param ids 闇瑕佸垹闄ょ殑鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteGenTableColumnByIds(Long[] ids); +} diff --git a/evo-admin/src/main/java/com/evo/generator/mapper/GenTableMapper.java b/evo-admin/src/main/java/com/evo/generator/mapper/GenTableMapper.java new file mode 100644 index 0000000..3186f85 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/generator/mapper/GenTableMapper.java @@ -0,0 +1,91 @@ +package com.evo.generator.mapper; + +import java.util.List; +import com.evo.generator.domain.GenTable; + +/** + * 涓氬姟 鏁版嵁灞 + * + * @author evo + */ +public interface GenTableMapper +{ + /** + * 鏌ヨ涓氬姟鍒楄〃 + * + * @param genTable 涓氬姟淇℃伅 + * @return 涓氬姟闆嗗悎 + */ + public List selectGenTableList(GenTable genTable); + + /** + * 鏌ヨ鎹簱鍒楄〃 + * + * @param genTable 涓氬姟淇℃伅 + * @return 鏁版嵁搴撹〃闆嗗悎 + */ + public List selectDbTableList(GenTable genTable); + + /** + * 鏌ヨ鎹簱鍒楄〃 + * + * @param tableNames 琛ㄥ悕绉扮粍 + * @return 鏁版嵁搴撹〃闆嗗悎 + */ + public List selectDbTableListByNames(String[] tableNames); + + /** + * 鏌ヨ鎵鏈夎〃淇℃伅 + * + * @return 琛ㄤ俊鎭泦鍚 + */ + public List selectGenTableAll(); + + /** + * 鏌ヨ琛↖D涓氬姟淇℃伅 + * + * @param id 涓氬姟ID + * @return 涓氬姟淇℃伅 + */ + public GenTable selectGenTableById(Long id); + + /** + * 鏌ヨ琛ㄥ悕绉颁笟鍔′俊鎭 + * + * @param tableName 琛ㄥ悕绉 + * @return 涓氬姟淇℃伅 + */ + public GenTable selectGenTableByName(String tableName); + + /** + * 鏂板涓氬姟 + * + * @param genTable 涓氬姟淇℃伅 + * @return 缁撴灉 + */ + public int insertGenTable(GenTable genTable); + + /** + * 淇敼涓氬姟 + * + * @param genTable 涓氬姟淇℃伅 + * @return 缁撴灉 + */ + public int updateGenTable(GenTable genTable); + + /** + * 鎵归噺鍒犻櫎涓氬姟 + * + * @param ids 闇瑕佸垹闄ょ殑鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteGenTableByIds(Long[] ids); + + /** + * 鍒涘缓琛 + * + * @param sql 琛ㄧ粨鏋 + * @return 缁撴灉 + */ + public int createTable(String sql); +} diff --git a/evo-admin/src/main/java/com/evo/generator/service/GenTableColumnServiceImpl.java b/evo-admin/src/main/java/com/evo/generator/service/GenTableColumnServiceImpl.java new file mode 100644 index 0000000..c0d26a9 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/generator/service/GenTableColumnServiceImpl.java @@ -0,0 +1,68 @@ +package com.evo.generator.service; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.evo.common.core.text.Convert; +import com.evo.generator.domain.GenTableColumn; +import com.evo.generator.mapper.GenTableColumnMapper; + +/** + * 涓氬姟瀛楁 鏈嶅姟灞傚疄鐜 + * + * @author evo + */ +@Service +public class GenTableColumnServiceImpl implements IGenTableColumnService +{ + @Autowired + private GenTableColumnMapper genTableColumnMapper; + + /** + * 鏌ヨ涓氬姟瀛楁鍒楄〃 + * + * @param tableId 涓氬姟瀛楁缂栧彿 + * @return 涓氬姟瀛楁闆嗗悎 + */ + @Override + public List selectGenTableColumnListByTableId(Long tableId) + { + return genTableColumnMapper.selectGenTableColumnListByTableId(tableId); + } + + /** + * 鏂板涓氬姟瀛楁 + * + * @param genTableColumn 涓氬姟瀛楁淇℃伅 + * @return 缁撴灉 + */ + @Override + public int insertGenTableColumn(GenTableColumn genTableColumn) + { + return genTableColumnMapper.insertGenTableColumn(genTableColumn); + } + + /** + * 淇敼涓氬姟瀛楁 + * + * @param genTableColumn 涓氬姟瀛楁淇℃伅 + * @return 缁撴灉 + */ + @Override + public int updateGenTableColumn(GenTableColumn genTableColumn) + { + return genTableColumnMapper.updateGenTableColumn(genTableColumn); + } + + /** + * 鍒犻櫎涓氬姟瀛楁瀵硅薄 + * + * @param ids 闇瑕佸垹闄ょ殑鏁版嵁ID + * @return 缁撴灉 + */ + @Override + public int deleteGenTableColumnByIds(String ids) + { + return genTableColumnMapper.deleteGenTableColumnByIds(Convert.toLongArray(ids)); + } +} diff --git a/evo-admin/src/main/java/com/evo/generator/service/GenTableServiceImpl.java b/evo-admin/src/main/java/com/evo/generator/service/GenTableServiceImpl.java new file mode 100644 index 0000000..500587d --- /dev/null +++ b/evo-admin/src/main/java/com/evo/generator/service/GenTableServiceImpl.java @@ -0,0 +1,531 @@ +package com.evo.generator.service; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.StringWriter; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.apache.velocity.Template; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.Velocity; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.evo.common.constant.Constants; +import com.evo.common.constant.GenConstants; +import com.evo.common.core.text.CharsetKit; +import com.evo.common.exception.ServiceException; +import com.evo.common.utils.StringUtils; +import com.evo.generator.domain.GenTable; +import com.evo.generator.domain.GenTableColumn; +import com.evo.generator.mapper.GenTableColumnMapper; +import com.evo.generator.mapper.GenTableMapper; +import com.evo.generator.util.GenUtils; +import com.evo.generator.util.VelocityInitializer; +import com.evo.generator.util.VelocityUtils; + +/** + * 涓氬姟 鏈嶅姟灞傚疄鐜 + * + * @author evo + */ +@Service +public class GenTableServiceImpl implements IGenTableService +{ + private static final Logger log = LoggerFactory.getLogger(GenTableServiceImpl.class); + + @Autowired + private GenTableMapper genTableMapper; + + @Autowired + private GenTableColumnMapper genTableColumnMapper; + + /** + * 鏌ヨ涓氬姟淇℃伅 + * + * @param id 涓氬姟ID + * @return 涓氬姟淇℃伅 + */ + @Override + public GenTable selectGenTableById(Long id) + { + GenTable genTable = genTableMapper.selectGenTableById(id); + setTableFromOptions(genTable); + return genTable; + } + + /** + * 鏌ヨ涓氬姟鍒楄〃 + * + * @param genTable 涓氬姟淇℃伅 + * @return 涓氬姟闆嗗悎 + */ + @Override + public List selectGenTableList(GenTable genTable) + { + return genTableMapper.selectGenTableList(genTable); + } + + /** + * 鏌ヨ鎹簱鍒楄〃 + * + * @param genTable 涓氬姟淇℃伅 + * @return 鏁版嵁搴撹〃闆嗗悎 + */ + @Override + public List selectDbTableList(GenTable genTable) + { + return genTableMapper.selectDbTableList(genTable); + } + + /** + * 鏌ヨ鎹簱鍒楄〃 + * + * @param tableNames 琛ㄥ悕绉扮粍 + * @return 鏁版嵁搴撹〃闆嗗悎 + */ + @Override + public List selectDbTableListByNames(String[] tableNames) + { + return genTableMapper.selectDbTableListByNames(tableNames); + } + + /** + * 鏌ヨ鎵鏈夎〃淇℃伅 + * + * @return 琛ㄤ俊鎭泦鍚 + */ + @Override + public List selectGenTableAll() + { + return genTableMapper.selectGenTableAll(); + } + + /** + * 淇敼涓氬姟 + * + * @param genTable 涓氬姟淇℃伅 + * @return 缁撴灉 + */ + @Override + @Transactional + public void updateGenTable(GenTable genTable) + { + String options = JSON.toJSONString(genTable.getParams()); + genTable.setOptions(options); + int row = genTableMapper.updateGenTable(genTable); + if (row > 0) + { + for (GenTableColumn cenTableColumn : genTable.getColumns()) + { + genTableColumnMapper.updateGenTableColumn(cenTableColumn); + } + } + } + + /** + * 鍒犻櫎涓氬姟瀵硅薄 + * + * @param tableIds 闇瑕佸垹闄ょ殑鏁版嵁ID + * @return 缁撴灉 + */ + @Override + @Transactional + public void deleteGenTableByIds(Long[] tableIds) + { + genTableMapper.deleteGenTableByIds(tableIds); + genTableColumnMapper.deleteGenTableColumnByIds(tableIds); + } + + /** + * 鍒涘缓琛 + * + * @param sql 鍒涘缓琛ㄨ鍙 + * @return 缁撴灉 + */ + @Override + public boolean createTable(String sql) + { + return genTableMapper.createTable(sql) == 0; + } + + /** + * 瀵煎叆琛ㄧ粨鏋 + * + * @param tableList 瀵煎叆琛ㄥ垪琛 + */ + @Override + @Transactional + public void importGenTable(List tableList, String operName) + { + try + { + for (GenTable table : tableList) + { + String tableName = table.getTableName(); + GenUtils.initTable(table, operName); + int row = genTableMapper.insertGenTable(table); + if (row > 0) + { + // 淇濆瓨鍒椾俊鎭 + List genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); + for (GenTableColumn column : genTableColumns) + { + GenUtils.initColumnField(column, table); + genTableColumnMapper.insertGenTableColumn(column); + } + } + } + } + catch (Exception e) + { + throw new ServiceException("瀵煎叆澶辫触锛" + e.getMessage()); + } + } + + /** + * 棰勮浠g爜 + * + * @param tableId 琛ㄧ紪鍙 + * @return 棰勮鏁版嵁鍒楄〃 + */ + @Override + public Map previewCode(Long tableId) + { + Map dataMap = new LinkedHashMap<>(); + // 鏌ヨ琛ㄤ俊鎭 + GenTable table = genTableMapper.selectGenTableById(tableId); + // 璁剧疆涓诲瓙琛ㄤ俊鎭 + setSubTable(table); + // 璁剧疆涓婚敭鍒椾俊鎭 + setPkColumn(table); + VelocityInitializer.initVelocity(); + + VelocityContext context = VelocityUtils.prepareContext(table); + + // 鑾峰彇妯℃澘鍒楄〃 + List templates = VelocityUtils.getTemplateList(table.getTplCategory(), table.getTplWebType()); + for (String template : templates) + { + // 娓叉煋妯℃澘 + StringWriter sw = new StringWriter(); + Template tpl = Velocity.getTemplate(template, Constants.UTF8); + tpl.merge(context, sw); + dataMap.put(template, sw.toString()); + } + return dataMap; + } + + /** + * 鐢熸垚浠g爜锛堜笅杞芥柟寮忥級 + * + * @param tableName 琛ㄥ悕绉 + * @return 鏁版嵁 + */ + @Override + public byte[] downloadCode(String tableName) + { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ZipOutputStream zip = new ZipOutputStream(outputStream); + generatorCode(tableName, zip); + IOUtils.closeQuietly(zip); + return outputStream.toByteArray(); + } + + /** + * 鐢熸垚浠g爜锛堣嚜瀹氫箟璺緞锛 + * + * @param tableName 琛ㄥ悕绉 + */ + @Override + public void generatorCode(String tableName) + { + // 鏌ヨ琛ㄤ俊鎭 + GenTable table = genTableMapper.selectGenTableByName(tableName); + // 璁剧疆涓诲瓙琛ㄤ俊鎭 + setSubTable(table); + // 璁剧疆涓婚敭鍒椾俊鎭 + setPkColumn(table); + + VelocityInitializer.initVelocity(); + + VelocityContext context = VelocityUtils.prepareContext(table); + + // 鑾峰彇妯℃澘鍒楄〃 + List templates = VelocityUtils.getTemplateList(table.getTplCategory(), table.getTplWebType()); + for (String template : templates) + { + if (!StringUtils.containsAny(template, "sql.vm", "api.js.vm", "index.vue.vm", "index-tree.vue.vm")) + { + // 娓叉煋妯℃澘 + StringWriter sw = new StringWriter(); + Template tpl = Velocity.getTemplate(template, Constants.UTF8); + tpl.merge(context, sw); + try + { + String path = getGenPath(table, template); + FileUtils.writeStringToFile(new File(path), sw.toString(), CharsetKit.UTF_8); + } + catch (IOException e) + { + throw new ServiceException("娓叉煋妯℃澘澶辫触锛岃〃鍚嶏細" + table.getTableName()); + } + } + } + } + + /** + * 鍚屾鏁版嵁搴 + * + * @param tableName 琛ㄥ悕绉 + */ + @Override + @Transactional + public void synchDb(String tableName) + { + GenTable table = genTableMapper.selectGenTableByName(tableName); + List tableColumns = table.getColumns(); + Map tableColumnMap = tableColumns.stream().collect(Collectors.toMap(GenTableColumn::getColumnName, Function.identity())); + + List dbTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); + if (StringUtils.isEmpty(dbTableColumns)) + { + throw new ServiceException("鍚屾鏁版嵁澶辫触锛屽師琛ㄧ粨鏋勪笉瀛樺湪"); + } + List dbTableColumnNames = dbTableColumns.stream().map(GenTableColumn::getColumnName).collect(Collectors.toList()); + + dbTableColumns.forEach(column -> { + GenUtils.initColumnField(column, table); + if (tableColumnMap.containsKey(column.getColumnName())) + { + GenTableColumn prevColumn = tableColumnMap.get(column.getColumnName()); + column.setColumnId(prevColumn.getColumnId()); + if (column.isList()) + { + // 濡傛灉鏄垪琛紝缁х画淇濈暀鏌ヨ鏂瑰紡/瀛楀吀绫诲瀷閫夐」 + column.setDictType(prevColumn.getDictType()); + column.setQueryType(prevColumn.getQueryType()); + } + if (StringUtils.isNotEmpty(prevColumn.getIsRequired()) && !column.isPk() + && (column.isInsert() || column.isEdit()) + && ((column.isUsableColumn()) || (!column.isSuperColumn()))) + { + // 濡傛灉鏄(鏂板/淇敼&闈炰富閿/闈炲拷鐣ュ強鐖跺睘鎬)锛岀户缁繚鐣欏繀濉/鏄剧ず绫诲瀷閫夐」 + column.setIsRequired(prevColumn.getIsRequired()); + column.setHtmlType(prevColumn.getHtmlType()); + } + genTableColumnMapper.updateGenTableColumn(column); + } + else + { + genTableColumnMapper.insertGenTableColumn(column); + } + }); + + List delColumns = tableColumns.stream().filter(column -> !dbTableColumnNames.contains(column.getColumnName())).collect(Collectors.toList()); + if (StringUtils.isNotEmpty(delColumns)) + { + genTableColumnMapper.deleteGenTableColumns(delColumns); + } + } + + /** + * 鎵归噺鐢熸垚浠g爜锛堜笅杞芥柟寮忥級 + * + * @param tableNames 琛ㄦ暟缁 + * @return 鏁版嵁 + */ + @Override + public byte[] downloadCode(String[] tableNames) + { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ZipOutputStream zip = new ZipOutputStream(outputStream); + for (String tableName : tableNames) + { + generatorCode(tableName, zip); + } + IOUtils.closeQuietly(zip); + return outputStream.toByteArray(); + } + + /** + * 鏌ヨ琛ㄤ俊鎭苟鐢熸垚浠g爜 + */ + private void generatorCode(String tableName, ZipOutputStream zip) + { + // 鏌ヨ琛ㄤ俊鎭 + GenTable table = genTableMapper.selectGenTableByName(tableName); + // 璁剧疆涓诲瓙琛ㄤ俊鎭 + setSubTable(table); + // 璁剧疆涓婚敭鍒椾俊鎭 + setPkColumn(table); + + VelocityInitializer.initVelocity(); + + VelocityContext context = VelocityUtils.prepareContext(table); + + // 鑾峰彇妯℃澘鍒楄〃 + List templates = VelocityUtils.getTemplateList(table.getTplCategory(), table.getTplWebType()); + for (String template : templates) + { + // 娓叉煋妯℃澘 + StringWriter sw = new StringWriter(); + Template tpl = Velocity.getTemplate(template, Constants.UTF8); + tpl.merge(context, sw); + try + { + // 娣诲姞鍒皕ip + zip.putNextEntry(new ZipEntry(VelocityUtils.getFileName(template, table))); + IOUtils.write(sw.toString(), zip, Constants.UTF8); + IOUtils.closeQuietly(sw); + zip.flush(); + zip.closeEntry(); + } + catch (IOException e) + { + log.error("娓叉煋妯℃澘澶辫触锛岃〃鍚嶏細" + table.getTableName(), e); + } + } + } + + /** + * 淇敼淇濆瓨鍙傛暟鏍¢獙 + * + * @param genTable 涓氬姟淇℃伅 + */ + @Override + public void validateEdit(GenTable genTable) + { + if (GenConstants.TPL_TREE.equals(genTable.getTplCategory())) + { + String options = JSON.toJSONString(genTable.getParams()); + JSONObject paramsObj = JSON.parseObject(options); + if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_CODE))) + { + throw new ServiceException("鏍戠紪鐮佸瓧娈典笉鑳戒负绌"); + } + else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_PARENT_CODE))) + { + throw new ServiceException("鏍戠埗缂栫爜瀛楁涓嶈兘涓虹┖"); + } + else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_NAME))) + { + throw new ServiceException("鏍戝悕绉板瓧娈典笉鑳戒负绌"); + } + else if (GenConstants.TPL_SUB.equals(genTable.getTplCategory())) + { + if (StringUtils.isEmpty(genTable.getSubTableName())) + { + throw new ServiceException("鍏宠仈瀛愯〃鐨勮〃鍚嶄笉鑳戒负绌"); + } + else if (StringUtils.isEmpty(genTable.getSubTableFkName())) + { + throw new ServiceException("瀛愯〃鍏宠仈鐨勫閿悕涓嶈兘涓虹┖"); + } + } + } + } + + /** + * 璁剧疆涓婚敭鍒椾俊鎭 + * + * @param table 涓氬姟琛ㄤ俊鎭 + */ + public void setPkColumn(GenTable table) + { + for (GenTableColumn column : table.getColumns()) + { + if (column.isPk()) + { + table.setPkColumn(column); + break; + } + } + if (StringUtils.isNull(table.getPkColumn())) + { + table.setPkColumn(table.getColumns().get(0)); + } + if (GenConstants.TPL_SUB.equals(table.getTplCategory())) + { + for (GenTableColumn column : table.getSubTable().getColumns()) + { + if (column.isPk()) + { + table.getSubTable().setPkColumn(column); + break; + } + } + if (StringUtils.isNull(table.getSubTable().getPkColumn())) + { + table.getSubTable().setPkColumn(table.getSubTable().getColumns().get(0)); + } + } + } + + /** + * 璁剧疆涓诲瓙琛ㄤ俊鎭 + * + * @param table 涓氬姟琛ㄤ俊鎭 + */ + public void setSubTable(GenTable table) + { + String subTableName = table.getSubTableName(); + if (StringUtils.isNotEmpty(subTableName)) + { + table.setSubTable(genTableMapper.selectGenTableByName(subTableName)); + } + } + + /** + * 璁剧疆浠g爜鐢熸垚鍏朵粬閫夐」鍊 + * + * @param genTable 璁剧疆鍚庣殑鐢熸垚瀵硅薄 + */ + public void setTableFromOptions(GenTable genTable) + { + JSONObject paramsObj = JSON.parseObject(genTable.getOptions()); + if (StringUtils.isNotNull(paramsObj)) + { + String treeCode = paramsObj.getString(GenConstants.TREE_CODE); + String treeParentCode = paramsObj.getString(GenConstants.TREE_PARENT_CODE); + String treeName = paramsObj.getString(GenConstants.TREE_NAME); + String parentMenuId = paramsObj.getString(GenConstants.PARENT_MENU_ID); + String parentMenuName = paramsObj.getString(GenConstants.PARENT_MENU_NAME); + + genTable.setTreeCode(treeCode); + genTable.setTreeParentCode(treeParentCode); + genTable.setTreeName(treeName); + genTable.setParentMenuId(parentMenuId); + genTable.setParentMenuName(parentMenuName); + } + } + + /** + * 鑾峰彇浠g爜鐢熸垚鍦板潃 + * + * @param table 涓氬姟琛ㄤ俊鎭 + * @param template 妯℃澘鏂囦欢璺緞 + * @return 鐢熸垚鍦板潃 + */ + public static String getGenPath(GenTable table, String template) + { + String genPath = table.getGenPath(); + if (StringUtils.equals(genPath, "/")) + { + return System.getProperty("user.dir") + File.separator + "src" + File.separator + VelocityUtils.getFileName(template, table); + } + return genPath + File.separator + VelocityUtils.getFileName(template, table); + } +} diff --git a/evo-admin/src/main/java/com/evo/generator/service/IGenTableColumnService.java b/evo-admin/src/main/java/com/evo/generator/service/IGenTableColumnService.java new file mode 100644 index 0000000..4e0637b --- /dev/null +++ b/evo-admin/src/main/java/com/evo/generator/service/IGenTableColumnService.java @@ -0,0 +1,44 @@ +package com.evo.generator.service; + +import java.util.List; +import com.evo.generator.domain.GenTableColumn; + +/** + * 涓氬姟瀛楁 鏈嶅姟灞 + * + * @author evo + */ +public interface IGenTableColumnService +{ + /** + * 鏌ヨ涓氬姟瀛楁鍒楄〃 + * + * @param tableId 涓氬姟瀛楁缂栧彿 + * @return 涓氬姟瀛楁闆嗗悎 + */ + public List selectGenTableColumnListByTableId(Long tableId); + + /** + * 鏂板涓氬姟瀛楁 + * + * @param genTableColumn 涓氬姟瀛楁淇℃伅 + * @return 缁撴灉 + */ + public int insertGenTableColumn(GenTableColumn genTableColumn); + + /** + * 淇敼涓氬姟瀛楁 + * + * @param genTableColumn 涓氬姟瀛楁淇℃伅 + * @return 缁撴灉 + */ + public int updateGenTableColumn(GenTableColumn genTableColumn); + + /** + * 鍒犻櫎涓氬姟瀛楁淇℃伅 + * + * @param ids 闇瑕佸垹闄ょ殑鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteGenTableColumnByIds(String ids); +} diff --git a/evo-admin/src/main/java/com/evo/generator/service/IGenTableService.java b/evo-admin/src/main/java/com/evo/generator/service/IGenTableService.java new file mode 100644 index 0000000..351095f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/generator/service/IGenTableService.java @@ -0,0 +1,130 @@ +package com.evo.generator.service; + +import java.util.List; +import java.util.Map; +import com.evo.generator.domain.GenTable; + +/** + * 涓氬姟 鏈嶅姟灞 + * + * @author evo + */ +public interface IGenTableService +{ + /** + * 鏌ヨ涓氬姟鍒楄〃 + * + * @param genTable 涓氬姟淇℃伅 + * @return 涓氬姟闆嗗悎 + */ + public List selectGenTableList(GenTable genTable); + + /** + * 鏌ヨ鎹簱鍒楄〃 + * + * @param genTable 涓氬姟淇℃伅 + * @return 鏁版嵁搴撹〃闆嗗悎 + */ + public List selectDbTableList(GenTable genTable); + + /** + * 鏌ヨ鎹簱鍒楄〃 + * + * @param tableNames 琛ㄥ悕绉扮粍 + * @return 鏁版嵁搴撹〃闆嗗悎 + */ + public List selectDbTableListByNames(String[] tableNames); + + /** + * 鏌ヨ鎵鏈夎〃淇℃伅 + * + * @return 琛ㄤ俊鎭泦鍚 + */ + public List selectGenTableAll(); + + /** + * 鏌ヨ涓氬姟淇℃伅 + * + * @param id 涓氬姟ID + * @return 涓氬姟淇℃伅 + */ + public GenTable selectGenTableById(Long id); + + /** + * 淇敼涓氬姟 + * + * @param genTable 涓氬姟淇℃伅 + * @return 缁撴灉 + */ + public void updateGenTable(GenTable genTable); + + /** + * 鍒犻櫎涓氬姟淇℃伅 + * + * @param tableIds 闇瑕佸垹闄ょ殑琛ㄦ暟鎹甀D + * @return 缁撴灉 + */ + public void deleteGenTableByIds(Long[] tableIds); + + /** + * 鍒涘缓琛 + * + * @param sql 鍒涘缓琛ㄨ鍙 + * @return 缁撴灉 + */ + public boolean createTable(String sql); + + /** + * 瀵煎叆琛ㄧ粨鏋 + * + * @param tableList 瀵煎叆琛ㄥ垪琛 + * @param operName 鎿嶄綔浜哄憳 + */ + public void importGenTable(List tableList, String operName); + + /** + * 棰勮浠g爜 + * + * @param tableId 琛ㄧ紪鍙 + * @return 棰勮鏁版嵁鍒楄〃 + */ + public Map previewCode(Long tableId); + + /** + * 鐢熸垚浠g爜锛堜笅杞芥柟寮忥級 + * + * @param tableName 琛ㄥ悕绉 + * @return 鏁版嵁 + */ + public byte[] downloadCode(String tableName); + + /** + * 鐢熸垚浠g爜锛堣嚜瀹氫箟璺緞锛 + * + * @param tableName 琛ㄥ悕绉 + * @return 鏁版嵁 + */ + public void generatorCode(String tableName); + + /** + * 鍚屾鏁版嵁搴 + * + * @param tableName 琛ㄥ悕绉 + */ + public void synchDb(String tableName); + + /** + * 鎵归噺鐢熸垚浠g爜锛堜笅杞芥柟寮忥級 + * + * @param tableNames 琛ㄦ暟缁 + * @return 鏁版嵁 + */ + public byte[] downloadCode(String[] tableNames); + + /** + * 淇敼淇濆瓨鍙傛暟鏍¢獙 + * + * @param genTable 涓氬姟淇℃伅 + */ + public void validateEdit(GenTable genTable); +} diff --git a/evo-admin/src/main/java/com/evo/generator/util/GenUtils.java b/evo-admin/src/main/java/com/evo/generator/util/GenUtils.java new file mode 100644 index 0000000..55bf8a8 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/generator/util/GenUtils.java @@ -0,0 +1,257 @@ +package com.evo.generator.util; + +import java.util.Arrays; +import org.apache.commons.lang3.RegExUtils; +import com.evo.common.constant.GenConstants; +import com.evo.common.utils.StringUtils; +import com.evo.generator.config.GenConfig; +import com.evo.generator.domain.GenTable; +import com.evo.generator.domain.GenTableColumn; + +/** + * 浠g爜鐢熸垚鍣 宸ュ叿绫 + * + * @author evo + */ +public class GenUtils +{ + /** + * 鍒濆鍖栬〃淇℃伅 + */ + public static void initTable(GenTable genTable, String operName) + { + genTable.setClassName(convertClassName(genTable.getTableName())); + genTable.setPackageName(GenConfig.getPackageName()); + genTable.setModuleName(getModuleName(GenConfig.getPackageName())); + genTable.setBusinessName(getBusinessName(genTable.getTableName())); + genTable.setFunctionName(replaceText(genTable.getTableComment())); + genTable.setFunctionAuthor(GenConfig.getAuthor()); + genTable.setCreateBy(operName); + } + + /** + * 鍒濆鍖栧垪灞炴у瓧娈 + */ + public static void initColumnField(GenTableColumn column, GenTable table) + { + String dataType = getDbType(column.getColumnType()); + String columnName = column.getColumnName(); + column.setTableId(table.getTableId()); + column.setCreateBy(table.getCreateBy()); + // 璁剧疆java瀛楁鍚 + column.setJavaField(StringUtils.toCamelCase(columnName)); + // 璁剧疆榛樿绫诲瀷 + column.setJavaType(GenConstants.TYPE_STRING); + column.setQueryType(GenConstants.QUERY_EQ); + + if (arraysContains(GenConstants.COLUMNTYPE_STR, dataType) || arraysContains(GenConstants.COLUMNTYPE_TEXT, dataType)) + { + // 瀛楃涓查暱搴﹁秴杩500璁剧疆涓烘枃鏈煙 + Integer columnLength = getColumnLength(column.getColumnType()); + String htmlType = columnLength >= 500 || arraysContains(GenConstants.COLUMNTYPE_TEXT, dataType) ? GenConstants.HTML_TEXTAREA : GenConstants.HTML_INPUT; + column.setHtmlType(htmlType); + } + else if (arraysContains(GenConstants.COLUMNTYPE_TIME, dataType)) + { + column.setJavaType(GenConstants.TYPE_DATE); + column.setHtmlType(GenConstants.HTML_DATETIME); + } + else if (arraysContains(GenConstants.COLUMNTYPE_NUMBER, dataType)) + { + column.setHtmlType(GenConstants.HTML_INPUT); + + // 濡傛灉鏄诞鐐瑰瀷 缁熶竴鐢˙igDecimal + String[] str = StringUtils.split(StringUtils.substringBetween(column.getColumnType(), "(", ")"), ","); + if (str != null && str.length == 2 && Integer.parseInt(str[1]) > 0) + { + column.setJavaType(GenConstants.TYPE_BIGDECIMAL); + } + // 濡傛灉鏄暣褰 + else if (str != null && str.length == 1 && Integer.parseInt(str[0]) <= 10) + { + column.setJavaType(GenConstants.TYPE_INTEGER); + } + // 闀挎暣褰 + else + { + column.setJavaType(GenConstants.TYPE_LONG); + } + } + + // 鎻掑叆瀛楁锛堥粯璁ゆ墍鏈夊瓧娈甸兘闇瑕佹彃鍏ワ級 + column.setIsInsert(GenConstants.REQUIRE); + + // 缂栬緫瀛楁 + if (!arraysContains(GenConstants.COLUMNNAME_NOT_EDIT, columnName) && !column.isPk()) + { + column.setIsEdit(GenConstants.REQUIRE); + } + // 鍒楄〃瀛楁 + if (!arraysContains(GenConstants.COLUMNNAME_NOT_LIST, columnName) && !column.isPk()) + { + column.setIsList(GenConstants.REQUIRE); + } + // 鏌ヨ瀛楁 + if (!arraysContains(GenConstants.COLUMNNAME_NOT_QUERY, columnName) && !column.isPk()) + { + column.setIsQuery(GenConstants.REQUIRE); + } + + // 鏌ヨ瀛楁绫诲瀷 + if (StringUtils.endsWithIgnoreCase(columnName, "name")) + { + column.setQueryType(GenConstants.QUERY_LIKE); + } + // 鐘舵佸瓧娈佃缃崟閫夋 + if (StringUtils.endsWithIgnoreCase(columnName, "status")) + { + column.setHtmlType(GenConstants.HTML_RADIO); + } + // 绫诲瀷&鎬у埆瀛楁璁剧疆涓嬫媺妗 + else if (StringUtils.endsWithIgnoreCase(columnName, "type") + || StringUtils.endsWithIgnoreCase(columnName, "sex")) + { + column.setHtmlType(GenConstants.HTML_SELECT); + } + // 鍥剧墖瀛楁璁剧疆鍥剧墖涓婁紶鎺т欢 + else if (StringUtils.endsWithIgnoreCase(columnName, "image")) + { + column.setHtmlType(GenConstants.HTML_IMAGE_UPLOAD); + } + // 鏂囦欢瀛楁璁剧疆鏂囦欢涓婁紶鎺т欢 + else if (StringUtils.endsWithIgnoreCase(columnName, "file")) + { + column.setHtmlType(GenConstants.HTML_FILE_UPLOAD); + } + // 鍐呭瀛楁璁剧疆瀵屾枃鏈帶浠 + else if (StringUtils.endsWithIgnoreCase(columnName, "content")) + { + column.setHtmlType(GenConstants.HTML_EDITOR); + } + } + + /** + * 鏍¢獙鏁扮粍鏄惁鍖呭惈鎸囧畾鍊 + * + * @param arr 鏁扮粍 + * @param targetValue 鍊 + * @return 鏄惁鍖呭惈 + */ + public static boolean arraysContains(String[] arr, String targetValue) + { + return Arrays.asList(arr).contains(targetValue); + } + + /** + * 鑾峰彇妯″潡鍚 + * + * @param packageName 鍖呭悕 + * @return 妯″潡鍚 + */ + public static String getModuleName(String packageName) + { + int lastIndex = packageName.lastIndexOf("."); + int nameLength = packageName.length(); + return StringUtils.substring(packageName, lastIndex + 1, nameLength); + } + + /** + * 鑾峰彇涓氬姟鍚 + * + * @param tableName 琛ㄥ悕 + * @return 涓氬姟鍚 + */ + public static String getBusinessName(String tableName) + { + int lastIndex = tableName.lastIndexOf("_"); + int nameLength = tableName.length(); + return StringUtils.substring(tableName, lastIndex + 1, nameLength); + } + + /** + * 琛ㄥ悕杞崲鎴怞ava绫诲悕 + * + * @param tableName 琛ㄥ悕绉 + * @return 绫诲悕 + */ + public static String convertClassName(String tableName) + { + boolean autoRemovePre = GenConfig.getAutoRemovePre(); + String tablePrefix = GenConfig.getTablePrefix(); + if (autoRemovePre && StringUtils.isNotEmpty(tablePrefix)) + { + String[] searchList = StringUtils.split(tablePrefix, ","); + tableName = replaceFirst(tableName, searchList); + } + return StringUtils.convertToCamelCase(tableName); + } + + /** + * 鎵归噺鏇挎崲鍓嶇紑 + * + * @param replacementm 鏇挎崲鍊 + * @param searchList 鏇挎崲鍒楄〃 + * @return + */ + public static String replaceFirst(String replacementm, String[] searchList) + { + String text = replacementm; + for (String searchString : searchList) + { + if (replacementm.startsWith(searchString)) + { + text = replacementm.replaceFirst(searchString, ""); + break; + } + } + return text; + } + + /** + * 鍏抽敭瀛楁浛鎹 + * + * @param text 闇瑕佽鏇挎崲鐨勫悕瀛 + * @return 鏇挎崲鍚庣殑鍚嶅瓧 + */ + public static String replaceText(String text) + { + return RegExUtils.replaceAll(text, "(?:琛▅浼婄壒)", ""); + } + + /** + * 鑾峰彇鏁版嵁搴撶被鍨嬪瓧娈 + * + * @param columnType 鍒楃被鍨 + * @return 鎴彇鍚庣殑鍒楃被鍨 + */ + public static String getDbType(String columnType) + { + if (StringUtils.indexOf(columnType, "(") > 0) + { + return StringUtils.substringBefore(columnType, "("); + } + else + { + return columnType; + } + } + + /** + * 鑾峰彇瀛楁闀垮害 + * + * @param columnType 鍒楃被鍨 + * @return 鎴彇鍚庣殑鍒楃被鍨 + */ + public static Integer getColumnLength(String columnType) + { + if (StringUtils.indexOf(columnType, "(") > 0) + { + String length = StringUtils.substringBetween(columnType, "(", ")"); + return Integer.valueOf(length); + } + else + { + return 0; + } + } +} diff --git a/evo-admin/src/main/java/com/evo/generator/util/VelocityInitializer.java b/evo-admin/src/main/java/com/evo/generator/util/VelocityInitializer.java new file mode 100644 index 0000000..065974f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/generator/util/VelocityInitializer.java @@ -0,0 +1,34 @@ +package com.evo.generator.util; + +import java.util.Properties; +import org.apache.velocity.app.Velocity; +import com.evo.common.constant.Constants; + +/** + * VelocityEngine宸ュ巶 + * + * @author evo + */ +public class VelocityInitializer +{ + /** + * 鍒濆鍖杤m鏂规硶 + */ + public static void initVelocity() + { + Properties p = new Properties(); + try + { + // 鍔犺浇classpath鐩綍涓嬬殑vm鏂囦欢 + p.setProperty("resource.loader.file.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); + // 瀹氫箟瀛楃闆 + p.setProperty(Velocity.INPUT_ENCODING, Constants.UTF8); + // 鍒濆鍖朧elocity寮曟搸锛屾寚瀹氶厤缃甈roperties + Velocity.init(p); + } + catch (Exception e) + { + throw new RuntimeException(e); + } + } +} diff --git a/evo-admin/src/main/java/com/evo/generator/util/VelocityUtils.java b/evo-admin/src/main/java/com/evo/generator/util/VelocityUtils.java new file mode 100644 index 0000000..1fee5f6 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/generator/util/VelocityUtils.java @@ -0,0 +1,408 @@ +package com.evo.generator.util; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import org.apache.velocity.VelocityContext; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.evo.common.constant.GenConstants; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.StringUtils; +import com.evo.generator.domain.GenTable; +import com.evo.generator.domain.GenTableColumn; + +/** + * 妯℃澘澶勭悊宸ュ叿绫 + * + * @author evo + */ +public class VelocityUtils +{ + /** 椤圭洰绌洪棿璺緞 */ + private static final String PROJECT_PATH = "main/java"; + + /** mybatis绌洪棿璺緞 */ + private static final String MYBATIS_PATH = "main/resources/mapper"; + + /** 榛樿涓婄骇鑿滃崟锛岀郴缁熷伐鍏 */ + private static final String DEFAULT_PARENT_MENU_ID = "3"; + + /** + * 璁剧疆妯℃澘鍙橀噺淇℃伅 + * + * @return 妯℃澘鍒楄〃 + */ + public static VelocityContext prepareContext(GenTable genTable) + { + String moduleName = genTable.getModuleName(); + String businessName = genTable.getBusinessName(); + String packageName = genTable.getPackageName(); + String tplCategory = genTable.getTplCategory(); + String functionName = genTable.getFunctionName(); + + VelocityContext velocityContext = new VelocityContext(); + velocityContext.put("tplCategory", genTable.getTplCategory()); + velocityContext.put("tableName", genTable.getTableName()); + velocityContext.put("functionName", StringUtils.isNotEmpty(functionName) ? functionName : "銆愯濉啓鍔熻兘鍚嶇О銆"); + velocityContext.put("ClassName", genTable.getClassName()); + velocityContext.put("className", StringUtils.uncapitalize(genTable.getClassName())); + velocityContext.put("moduleName", genTable.getModuleName()); + velocityContext.put("BusinessName", StringUtils.capitalize(genTable.getBusinessName())); + velocityContext.put("businessName", genTable.getBusinessName()); + velocityContext.put("basePackage", getPackagePrefix(packageName)); + velocityContext.put("packageName", packageName); + velocityContext.put("author", genTable.getFunctionAuthor()); + velocityContext.put("datetime", DateUtils.getDate()); + velocityContext.put("pkColumn", genTable.getPkColumn()); + velocityContext.put("importList", getImportList(genTable)); + velocityContext.put("permissionPrefix", getPermissionPrefix(moduleName, businessName)); + velocityContext.put("columns", genTable.getColumns()); + velocityContext.put("table", genTable); + velocityContext.put("dicts", getDicts(genTable)); + setMenuVelocityContext(velocityContext, genTable); + if (GenConstants.TPL_TREE.equals(tplCategory)) + { + setTreeVelocityContext(velocityContext, genTable); + } + if (GenConstants.TPL_SUB.equals(tplCategory)) + { + setSubVelocityContext(velocityContext, genTable); + } + return velocityContext; + } + + public static void setMenuVelocityContext(VelocityContext context, GenTable genTable) + { + String options = genTable.getOptions(); + JSONObject paramsObj = JSON.parseObject(options); + String parentMenuId = getParentMenuId(paramsObj); + context.put("parentMenuId", parentMenuId); + } + + public static void setTreeVelocityContext(VelocityContext context, GenTable genTable) + { + String options = genTable.getOptions(); + JSONObject paramsObj = JSON.parseObject(options); + String treeCode = getTreecode(paramsObj); + String treeParentCode = getTreeParentCode(paramsObj); + String treeName = getTreeName(paramsObj); + + context.put("treeCode", treeCode); + context.put("treeParentCode", treeParentCode); + context.put("treeName", treeName); + context.put("expandColumn", getExpandColumn(genTable)); + if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) + { + context.put("tree_parent_code", paramsObj.getString(GenConstants.TREE_PARENT_CODE)); + } + if (paramsObj.containsKey(GenConstants.TREE_NAME)) + { + context.put("tree_name", paramsObj.getString(GenConstants.TREE_NAME)); + } + } + + public static void setSubVelocityContext(VelocityContext context, GenTable genTable) + { + GenTable subTable = genTable.getSubTable(); + String subTableName = genTable.getSubTableName(); + String subTableFkName = genTable.getSubTableFkName(); + String subClassName = genTable.getSubTable().getClassName(); + String subTableFkClassName = StringUtils.convertToCamelCase(subTableFkName); + + context.put("subTable", subTable); + context.put("subTableName", subTableName); + context.put("subTableFkName", subTableFkName); + context.put("subTableFkClassName", subTableFkClassName); + context.put("subTableFkclassName", StringUtils.uncapitalize(subTableFkClassName)); + context.put("subClassName", subClassName); + context.put("subclassName", StringUtils.uncapitalize(subClassName)); + context.put("subImportList", getImportList(genTable.getSubTable())); + } + + /** + * 鑾峰彇妯℃澘淇℃伅 + * @param tplCategory 鐢熸垚鐨勬ā鏉 + * @param tplWebType 鍓嶇绫诲瀷 + * @return 妯℃澘鍒楄〃 + */ + public static List getTemplateList(String tplCategory, String tplWebType) + { + String useWebType = "vm/vue"; + if ("element-plus".equals(tplWebType)) + { + useWebType = "vm/vue/v3"; + } + List templates = new ArrayList(); + templates.add("vm/java/domain.java.vm"); + templates.add("vm/java/mapper.java.vm"); + templates.add("vm/java/service.java.vm"); + templates.add("vm/java/serviceImpl.java.vm"); + templates.add("vm/java/controller.java.vm"); + templates.add("vm/xml/mapper.xml.vm"); + templates.add("vm/sql/sql.vm"); + templates.add("vm/js/api.js.vm"); + if (GenConstants.TPL_CRUD.equals(tplCategory)) + { + templates.add(useWebType + "/index.vue.vm"); + } + else if (GenConstants.TPL_TREE.equals(tplCategory)) + { + templates.add(useWebType + "/index-tree.vue.vm"); + } + else if (GenConstants.TPL_SUB.equals(tplCategory)) + { + templates.add(useWebType + "/index.vue.vm"); + templates.add("vm/java/sub-domain.java.vm"); + } + return templates; + } + + /** + * 鑾峰彇鏂囦欢鍚 + */ + public static String getFileName(String template, GenTable genTable) + { + // 鏂囦欢鍚嶇О + String fileName = ""; + // 鍖呰矾寰 + String packageName = genTable.getPackageName(); + // 妯″潡鍚 + String moduleName = genTable.getModuleName(); + // 澶у啓绫诲悕 + String className = genTable.getClassName(); + // 涓氬姟鍚嶇О + String businessName = genTable.getBusinessName(); + + String javaPath = PROJECT_PATH + "/" + StringUtils.replace(packageName, ".", "/"); + String mybatisPath = MYBATIS_PATH + "/" + moduleName; + String vuePath = "vue"; + + if (template.contains("domain.java.vm")) + { + fileName = StringUtils.format("{}/domain/{}.java", javaPath, className); + } + if (template.contains("sub-domain.java.vm") && StringUtils.equals(GenConstants.TPL_SUB, genTable.getTplCategory())) + { + fileName = StringUtils.format("{}/domain/{}.java", javaPath, genTable.getSubTable().getClassName()); + } + else if (template.contains("mapper.java.vm")) + { + fileName = StringUtils.format("{}/mapper/{}Mapper.java", javaPath, className); + } + else if (template.contains("service.java.vm")) + { + fileName = StringUtils.format("{}/service/I{}Service.java", javaPath, className); + } + else if (template.contains("serviceImpl.java.vm")) + { + fileName = StringUtils.format("{}/service/impl/{}ServiceImpl.java", javaPath, className); + } + else if (template.contains("controller.java.vm")) + { + fileName = StringUtils.format("{}/controller/{}Controller.java", javaPath, className); + } + else if (template.contains("mapper.xml.vm")) + { + fileName = StringUtils.format("{}/{}Mapper.xml", mybatisPath, className); + } + else if (template.contains("sql.vm")) + { + fileName = businessName + "Menu.sql"; + } + else if (template.contains("api.js.vm")) + { + fileName = StringUtils.format("{}/api/{}/{}.js", vuePath, moduleName, businessName); + } + else if (template.contains("index.vue.vm")) + { + fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); + } + else if (template.contains("index-tree.vue.vm")) + { + fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); + } + return fileName; + } + + /** + * 鑾峰彇鍖呭墠缂 + * + * @param packageName 鍖呭悕绉 + * @return 鍖呭墠缂鍚嶇О + */ + public static String getPackagePrefix(String packageName) + { + int lastIndex = packageName.lastIndexOf("."); + return StringUtils.substring(packageName, 0, lastIndex); + } + + /** + * 鏍规嵁鍒楃被鍨嬭幏鍙栧鍏ュ寘 + * + * @param genTable 涓氬姟琛ㄥ璞 + * @return 杩斿洖闇瑕佸鍏ョ殑鍖呭垪琛 + */ + public static HashSet getImportList(GenTable genTable) + { + List columns = genTable.getColumns(); + GenTable subGenTable = genTable.getSubTable(); + HashSet importList = new HashSet(); + if (StringUtils.isNotNull(subGenTable)) + { + importList.add("java.util.List"); + } + for (GenTableColumn column : columns) + { + if (!column.isSuperColumn() && GenConstants.TYPE_DATE.equals(column.getJavaType())) + { + importList.add("java.util.Date"); + importList.add("com.fasterxml.jackson.annotation.JsonFormat"); + } + else if (!column.isSuperColumn() && GenConstants.TYPE_BIGDECIMAL.equals(column.getJavaType())) + { + importList.add("java.math.BigDecimal"); + } + } + return importList; + } + + /** + * 鏍规嵁鍒楃被鍨嬭幏鍙栧瓧鍏哥粍 + * + * @param genTable 涓氬姟琛ㄥ璞 + * @return 杩斿洖瀛楀吀缁 + */ + public static String getDicts(GenTable genTable) + { + List columns = genTable.getColumns(); + Set dicts = new HashSet(); + addDicts(dicts, columns); + if (StringUtils.isNotNull(genTable.getSubTable())) + { + List subColumns = genTable.getSubTable().getColumns(); + addDicts(dicts, subColumns); + } + return StringUtils.join(dicts, ", "); + } + + /** + * 娣诲姞瀛楀吀鍒楄〃 + * + * @param dicts 瀛楀吀鍒楄〃 + * @param columns 鍒楅泦鍚 + */ + public static void addDicts(Set dicts, List columns) + { + for (GenTableColumn column : columns) + { + if (!column.isSuperColumn() && StringUtils.isNotEmpty(column.getDictType()) && StringUtils.equalsAny( + column.getHtmlType(), + new String[] { GenConstants.HTML_SELECT, GenConstants.HTML_RADIO, GenConstants.HTML_CHECKBOX })) + { + dicts.add("'" + column.getDictType() + "'"); + } + } + } + + /** + * 鑾峰彇鏉冮檺鍓嶇紑 + * + * @param moduleName 妯″潡鍚嶇О + * @param businessName 涓氬姟鍚嶇О + * @return 杩斿洖鏉冮檺鍓嶇紑 + */ + public static String getPermissionPrefix(String moduleName, String businessName) + { + return StringUtils.format("{}:{}", moduleName, businessName); + } + + /** + * 鑾峰彇涓婄骇鑿滃崟ID瀛楁 + * + * @param paramsObj 鐢熸垚鍏朵粬閫夐」 + * @return 涓婄骇鑿滃崟ID瀛楁 + */ + public static String getParentMenuId(JSONObject paramsObj) + { + if (StringUtils.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.PARENT_MENU_ID) + && StringUtils.isNotEmpty(paramsObj.getString(GenConstants.PARENT_MENU_ID))) + { + return paramsObj.getString(GenConstants.PARENT_MENU_ID); + } + return DEFAULT_PARENT_MENU_ID; + } + + /** + * 鑾峰彇鏍戠紪鐮 + * + * @param paramsObj 鐢熸垚鍏朵粬閫夐」 + * @return 鏍戠紪鐮 + */ + public static String getTreecode(JSONObject paramsObj) + { + if (paramsObj.containsKey(GenConstants.TREE_CODE)) + { + return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_CODE)); + } + return StringUtils.EMPTY; + } + + /** + * 鑾峰彇鏍戠埗缂栫爜 + * + * @param paramsObj 鐢熸垚鍏朵粬閫夐」 + * @return 鏍戠埗缂栫爜 + */ + public static String getTreeParentCode(JSONObject paramsObj) + { + if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) + { + return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_PARENT_CODE)); + } + return StringUtils.EMPTY; + } + + /** + * 鑾峰彇鏍戝悕绉 + * + * @param paramsObj 鐢熸垚鍏朵粬閫夐」 + * @return 鏍戝悕绉 + */ + public static String getTreeName(JSONObject paramsObj) + { + if (paramsObj.containsKey(GenConstants.TREE_NAME)) + { + return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_NAME)); + } + return StringUtils.EMPTY; + } + + /** + * 鑾峰彇闇瑕佸湪鍝竴鍒椾笂闈㈡樉绀哄睍寮鎸夐挳 + * + * @param genTable 涓氬姟琛ㄥ璞 + * @return 灞曞紑鎸夐挳鍒楀簭鍙 + */ + public static int getExpandColumn(GenTable genTable) + { + String options = genTable.getOptions(); + JSONObject paramsObj = JSON.parseObject(options); + String treeName = paramsObj.getString(GenConstants.TREE_NAME); + int num = 0; + for (GenTableColumn column : genTable.getColumns()) + { + if (column.isList()) + { + num++; + String columnName = column.getColumnName(); + if (columnName.equals(treeName)) + { + break; + } + } + } + return num; + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzBusinessTripController.java b/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzBusinessTripController.java new file mode 100644 index 0000000..645a35a --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzBusinessTripController.java @@ -0,0 +1,98 @@ +package com.evo.personnelMatters.controller; + +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.poi.ExcelUtil; +import com.evo.personnelMatters.domain.RzBusinessTrip; +import com.evo.personnelMatters.service.IRzBusinessTripService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鍑哄樊绠$悊Controller + * + * @author chenyj + * @date 2024-08-30 + */ +@RestController +@RequestMapping("/personnelMatters/businessTrip") +public class RzBusinessTripController extends BaseController +{ + @Autowired + private IRzBusinessTripService rzBusinessTripService; + + /** + * 鏌ヨ鍑哄樊绠$悊鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:businessTrip:list')") + @GetMapping("/list") + public TableDataInfo list(RzBusinessTrip rzBusinessTrip) + { + startPage(); + List list = rzBusinessTripService.selectRzBusinessTripList(rzBusinessTrip); + return getDataTable(list); + } + + /** + * 瀵煎嚭鍑哄樊绠$悊鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:businessTrip:export')") + @Log(title = "鍑哄樊绠$悊", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, RzBusinessTrip rzBusinessTrip) + { + List list = rzBusinessTripService.selectRzBusinessTripList(rzBusinessTrip); + ExcelUtil util = new ExcelUtil(RzBusinessTrip.class); + util.exportExcel(response, list, "鍑哄樊绠$悊鏁版嵁"); + } + + /** + * 鑾峰彇鍑哄樊绠$悊璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:businessTrip:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(rzBusinessTripService.selectRzBusinessTripById(id)); + } + + /** + * 鏂板鍑哄樊绠$悊 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:businessTrip:add')") + @Log(title = "鍑哄樊绠$悊", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody RzBusinessTrip rzBusinessTrip) + { + return rzBusinessTripService.insertRzBusinessTrip(rzBusinessTrip); + } + + /** + * 淇敼鍑哄樊绠$悊 + */ + @PreAuthorize("@ss.hasPermi('spersonnelMatters:businessTrip:edit')") + @Log(title = "鍑哄樊绠$悊", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody RzBusinessTrip rzBusinessTrip) + { + return toAjax(rzBusinessTripService.updateRzBusinessTrip(rzBusinessTrip)); + } + + /** + * 鍒犻櫎鍑哄樊绠$悊 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:businessTrip:remove')") + @Log(title = "鍑哄樊绠$悊", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public AjaxResult remove(@PathVariable Long id) + { + return rzBusinessTripService.deleteRzBusinessTripById(id); + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzBusinessTripDetailController.java b/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzBusinessTripDetailController.java new file mode 100644 index 0000000..e259365 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzBusinessTripDetailController.java @@ -0,0 +1,82 @@ +package com.evo.personnelMatters.controller; + +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.enums.BusinessType; +import com.evo.personnelMatters.domain.RzBusinessTripDetail; +import com.evo.personnelMatters.service.IRzBusinessTripDetailService; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import java.util.List; + +/** + * 鍑哄樊璇︽儏Controller + * + * @author chenyj + * @date 2024-09-04 + */ +@RestController +@RequestMapping("/personnelMatters/businessTripDetail") +public class RzBusinessTripDetailController extends BaseController +{ + @Resource + private IRzBusinessTripDetailService rzTripDetailService; + + /** + * 鏌ヨ鍑哄樊璇︽儏鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:businessTripDetail:list')") + @GetMapping("/list") + public TableDataInfo list(RzBusinessTripDetail rzTripDetail) + { + startPage(); + List list = rzTripDetailService.selectRzTripDetailList(rzTripDetail); + return getDataTable(list); + } + + /** + * 鑾峰彇鍑哄樊璇︽儏璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:businessTripDetail:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(rzTripDetailService.selectRzTripDetailById(id)); + } + + /** + * 鏂板鍑哄樊璇︽儏 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:businessTripDetail:add')") + @Log(title = "鍑哄樊璇︽儏", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody RzBusinessTripDetail rzTripDetail) + { + return rzTripDetailService.insertRzTripDetail(rzTripDetail); + } + + /** + * 淇敼鍑哄樊璇︽儏 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:businessTripDetail:edit')") + @Log(title = "鍑哄樊璇︽儏", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody RzBusinessTripDetail rzTripDetail) + { + return rzTripDetailService.updateRzTripDetail(rzTripDetail); + } + + /** + * 鍒犻櫎鍑哄樊璇︽儏 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:businessTripDetail:remove')") + @Log(title = "鍑哄樊璇︽儏", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public AjaxResult remove(@PathVariable Long id) + { + return rzTripDetailService.deleteRzTripDetailById(id); + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzHolidayController.java b/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzHolidayController.java new file mode 100644 index 0000000..06309e9 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzHolidayController.java @@ -0,0 +1,85 @@ +package com.evo.personnelMatters.controller; + +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.SecurityUtils; +import com.evo.personnelMatters.domain.RzHoliday; +import com.evo.personnelMatters.service.IRzHolidayService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import java.util.List; + +/** + * 鍋囨湡绠$悊Controller + * + * @author chenyj + * @date 2024-08-03 + */ +@RestController +@RequestMapping("/personnelMatters/holiday") +public class RzHolidayController extends BaseController +{ + @Autowired + private IRzHolidayService rzHolidayService; + + /** + * 鏌ヨ鍋囨湡绠$悊鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:holiday:list')") + @GetMapping("/list") + public TableDataInfo list(RzHoliday rzHoliday) + { + startPage(); + List list = rzHolidayService.selectRzHolidayList(rzHoliday); + return getDataTable(list); + } + + /** + * 鑾峰彇鍋囨湡绠$悊璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:holiday:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(rzHolidayService.selectRzHolidayById(id)); + } + + /** + * 鏂板鍋囨湡绠$悊 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:holiday:add')") + @Log(title = "鍋囨湡绠$悊", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody RzHoliday rzHoliday) + { + rzHoliday.setCreateBy(SecurityUtils.getUsername()); + return rzHolidayService.insertRzHoliday(rzHoliday); + } + + /** + * 淇敼鍋囨湡绠$悊 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:holiday:edit')") + @Log(title = "鍋囨湡绠$悊", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody RzHoliday rzHoliday) + { + rzHoliday.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(rzHolidayService.updateRzHoliday(rzHoliday)); + } + + /** + * 鍒犻櫎鍋囨湡绠$悊 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:holiday:remove')") + @Log(title = "鍋囨湡绠$悊", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public AjaxResult remove(@PathVariable Long id) + { + return toAjax(rzHolidayService.deleteRzHoliday(id,SecurityUtils.getUsername())); + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzInterviewerController.java b/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzInterviewerController.java new file mode 100644 index 0000000..9ed6cb6 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzInterviewerController.java @@ -0,0 +1,98 @@ +package com.evo.personnelMatters.controller; + +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.poi.ExcelUtil; +import com.evo.personnelMatters.domain.RzInterviewer; +import com.evo.personnelMatters.service.IRzInterviewerService; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 闈㈣瘯淇℃伅Controller + * + * @author chenyj + * @date 2024-09-07 + */ +@RestController +@RequestMapping("/personnelMatters/interviewer") +public class RzInterviewerController extends BaseController +{ + @Resource + private IRzInterviewerService rzInterviewerService; + + /** + * 鏌ヨ闈㈣瘯淇℃伅鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:interviewer:list')") + @GetMapping("/list") + public TableDataInfo list(RzInterviewer rzInterviewer) + { + startPage(); + List list = rzInterviewerService.selectRzInterviewerList(rzInterviewer); + return getDataTable(list); + } + + /** + * 瀵煎嚭闈㈣瘯淇℃伅鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:interviewer:export')") + @Log(title = "闈㈣瘯淇℃伅", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, RzInterviewer rzInterviewer) + { + List list = rzInterviewerService.selectRzInterviewerList(rzInterviewer); + ExcelUtil util = new ExcelUtil(RzInterviewer.class); + util.exportExcel(response, list, "闈㈣瘯淇℃伅"); + } + + /** + * 鑾峰彇闈㈣瘯淇℃伅璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:interviewer:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(rzInterviewerService.selectRzInterviewerById(id)); + } + + /** + * 鏂板闈㈣瘯淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:interviewer:add')") + @Log(title = "闈㈣瘯淇℃伅", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody RzInterviewer rzInterviewer) + { + return toAjax(rzInterviewerService.insertRzInterviewer(rzInterviewer)); + } + + /** + * 淇敼闈㈣瘯淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:interviewer:edit')") + @Log(title = "闈㈣瘯淇℃伅", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody RzInterviewer rzInterviewer) + { + return toAjax(rzInterviewerService.updateRzInterviewer(rzInterviewer)); + } + + /** + * 鍒犻櫎闈㈣瘯淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:interviewer:remove')") + @Log(title = "闈㈣瘯淇℃伅", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public AjaxResult remove(@PathVariable Long id) + { + return toAjax(rzInterviewerService.deleteRzInterviewerById(id)); + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzLeaveController.java b/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzLeaveController.java new file mode 100644 index 0000000..a1c849f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzLeaveController.java @@ -0,0 +1,107 @@ +package com.evo.personnelMatters.controller; + +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.poi.ExcelUtil; +import com.evo.personnelMatters.domain.RzLeave; +import com.evo.personnelMatters.domain.RzLeaveDetail; +import com.evo.personnelMatters.service.IRzLeaveService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 璇峰亣绠$悊Controller + * + * @author chenyj + * @date 2024-08-03 + */ +@RestController +@RequestMapping("/personnelMatters/leave") +public class RzLeaveController extends BaseController +{ + @Autowired + private IRzLeaveService rzLeaveService; + + /** + * 鏌ヨ璇峰亣绠$悊鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:leave:list')") + @GetMapping("/list") + public TableDataInfo list(RzLeave rzLeave) + { + startPage(); + List list = rzLeaveService.selectRzLeaveList(rzLeave); + return getDataTable(list); + } + + /** + * 瀵煎嚭璇峰亣绠$悊鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:leave:export')") + @Log(title = "璇峰亣绠$悊", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, RzLeave rzLeave) + { + List list = rzLeaveService.selectRzLeaveList(rzLeave); + ExcelUtil util = new ExcelUtil(RzLeave.class); + util.exportExcel(response, list, "璇峰亣鏁版嵁"); + } + + /** + * 鑾峰彇璇峰亣绠$悊璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:leave:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(rzLeaveService.selectRzLeaveById(id)); + } + + /** + * 鏂板璇峰亣绠$悊 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:leave:add')") + @Log(title = "璇峰亣绠$悊", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody RzLeave rzLeave) + { + return rzLeaveService.insertRzLeave(rzLeave); + } + + /** + * 淇敼璇峰亣绠$悊 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:leave:edit')") + @Log(title = "璇峰亣绠$悊", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody RzLeave rzLeave) + { + return rzLeaveService.updateRzLeave(rzLeave); + } + + /** + * 鍒犻櫎璇峰亣绠$悊 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:leave:remove')") + @Log(title = "璇峰亣绠$悊", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public AjaxResult remove(@PathVariable Long id) + { + return rzLeaveService.deleteRzLeave(id,SecurityUtils.getUsername()); + } + + @GetMapping("/listLeaveDetails") + public List listLeaveDetails(RzLeave rzLeave) + { + return rzLeaveService.listLeaveDetails(rzLeave); + } + + +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzLeaveDetailController.java b/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzLeaveDetailController.java new file mode 100644 index 0000000..92e59bf --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzLeaveDetailController.java @@ -0,0 +1,82 @@ +package com.evo.personnelMatters.controller; + +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.enums.BusinessType; +import com.evo.personnelMatters.domain.RzLeaveDetail; +import com.evo.personnelMatters.service.IRzLeaveDetailService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import java.util.List; + +/** + * 璇峰亣绠$悊璇︽儏Controller + * + * @author chenyj + * @date 2024-11-03 + */ +@RestController +@RequestMapping("/personnelMatters/leaveDetail") +public class RzLeaveDetailController extends BaseController +{ + @Autowired + private IRzLeaveDetailService rzLeaveDetailService; + + /** + * 鏌ヨ璇峰亣绠$悊璇︽儏鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:leaveDetail:list')") + @GetMapping("/list") + public TableDataInfo list(RzLeaveDetail rzLeaveDetail) + { + startPage(); + List list = rzLeaveDetailService.selectRzLeaveDetailList(rzLeaveDetail); + return getDataTable(list); + } + + /** + * 鑾峰彇璇峰亣绠$悊璇︽儏璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:leaveDetail:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(rzLeaveDetailService.selectRzLeaveDetailById(id)); + } + + /** + * 鏂板璇峰亣绠$悊璇︽儏 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:leaveDetail:add')") + @Log(title = "璇峰亣绠$悊璇︽儏", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody RzLeaveDetail rzLeaveDetail) + { + return rzLeaveDetailService.insertRzLeaveDetail(rzLeaveDetail); + } + + /** + * 淇敼璇峰亣绠$悊璇︽儏 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:leaveDetail:edit')") + @Log(title = "璇峰亣绠$悊璇︽儏", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody RzLeaveDetail rzLeaveDetail) + { + return rzLeaveDetailService.updateRzLeaveDetail(rzLeaveDetail); + } + + /** + * 鍒犻櫎璇峰亣绠$悊璇︽儏 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:leaveDetail:remove')") + @Log(title = "璇峰亣绠$悊璇︽儏", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public AjaxResult remove(@PathVariable Long id) + { + return rzLeaveDetailService.deleteRzLeaveDetailById(id); + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzOverTimeController.java b/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzOverTimeController.java new file mode 100644 index 0000000..935ab78 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzOverTimeController.java @@ -0,0 +1,107 @@ +package com.evo.personnelMatters.controller; + +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.poi.ExcelUtil; +import com.evo.personnelMatters.domain.RzOverTime; +import com.evo.personnelMatters.domain.RzOverTimeDetail; +import com.evo.personnelMatters.service.IRzOverTimeService; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鍔犵彮绠$悊Controller + * + * @author chenyj + * @date 2024-09-03 + */ +@RestController +@RequestMapping("/personnelMatters/overTime") +public class RzOverTimeController extends BaseController +{ + @Resource + private IRzOverTimeService rzOverTimeService; + + /** + * 鏌ヨ鍔犵彮绠$悊鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:overTime:list')") + @GetMapping("/list") + public TableDataInfo list(RzOverTime rzOverTime) + { + startPage(); + List list = rzOverTimeService.selectRzOverTimeList(rzOverTime); + return getDataTable(list); + } + + /** + * 瀵煎嚭鍔犵彮绠$悊鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:overTime:export')") + @Log(title = "鍔犵彮绠$悊", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, RzOverTime rzOverTime) + { + List list = rzOverTimeService.selectRzOverTimeList(rzOverTime); + ExcelUtil util = new ExcelUtil(RzOverTime.class); + util.exportExcel(response, list, "鍔犵彮绠$悊鏁版嵁"); + } + + /** + * 鑾峰彇鍔犵彮绠$悊璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:overTime:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(rzOverTimeService.selectRzOverTimeById(id)); + } + + /** + * 鏂板鍔犵彮绠$悊 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:overTime:add')") + @Log(title = "鍔犵彮绠$悊", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody RzOverTime rzOverTime) + { + return rzOverTimeService.insertRzOverTime(rzOverTime); + } + + /** + * 淇敼鍔犵彮绠$悊 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:overTime:edit')") + @Log(title = "鍔犵彮绠$悊", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody RzOverTime rzOverTime) + { + return toAjax(rzOverTimeService.updateRzOverTime(rzOverTime)); + } + + /** + * 鍒犻櫎鍔犵彮绠$悊 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:overTime:remove')") + @Log(title = "鍔犵彮绠$悊", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public AjaxResult remove(@PathVariable Long id) + { + return rzOverTimeService.deleteRzOverTimeById(id); + } + + /** + * 鏍规嵁鍛樺伐ID鍜屾湀浠芥煡璇㈠姞鐝鎯呭垪琛 + */ + @GetMapping("/listDetailByStaffIdAndMonth") + public List listDetailByStaffIdAndMonth(RzOverTime rzOverTime) + { + return rzOverTimeService.selectRzOverTimeDetailListByUserIdAndMonth(rzOverTime); + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzOverTimeDetailController.java b/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzOverTimeDetailController.java new file mode 100644 index 0000000..43330fc --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzOverTimeDetailController.java @@ -0,0 +1,83 @@ +package com.evo.personnelMatters.controller; + +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.enums.BusinessType; +import com.evo.personnelMatters.domain.RzOverTimeDetail; +import com.evo.personnelMatters.service.IRzOverTimeDetailService; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 鍔犵彮璇︽儏Controller + * + * @author chenyj + * @date 2024-09-09 + */ +@RestController +@RequestMapping("/personnelMatters/overTimeDetail") +public class RzOverTimeDetailController extends BaseController +{ + @Resource + private IRzOverTimeDetailService rzOverTimeDetailService; + + /** + * 鏌ヨ鍔犵彮璇︽儏鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:overTimeDetail:list')") + @GetMapping("/list") + public TableDataInfo list(RzOverTimeDetail rzOverTimeDetail) + { + startPage(); + List list = rzOverTimeDetailService.selectRzOverTimeDetailList(rzOverTimeDetail); + return getDataTable(list); + } + + /** + * 鑾峰彇鍔犵彮璇︽儏璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:overTimeDetail:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(rzOverTimeDetailService.selectRzOverTimeDetailById(id)); + } + + /** + * 鏂板鍔犵彮璇︽儏 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:overTimeDetail:add')") + @Log(title = "鍔犵彮璇︽儏", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody RzOverTimeDetail rzOverTimeDetail) + { + return rzOverTimeDetailService.insertRzOverTimeDetail(rzOverTimeDetail); + } + + /** + * 淇敼鍔犵彮璇︽儏 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:overTimeDetail:edit')") + @Log(title = "鍔犵彮璇︽儏", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody RzOverTimeDetail rzOverTimeDetail) + { + return rzOverTimeDetailService.updateRzOverTimeDetail(rzOverTimeDetail); + } + + /** + * 鍒犻櫎鍔犵彮璇︽儏 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:overTimeDetail:remove')") + @Log(title = "鍔犵彮璇︽儏", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public AjaxResult remove(@PathVariable Long id) + { + return rzOverTimeDetailService.deleteRzOverTimeDetailById(id); + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzSubsidyController.java b/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzSubsidyController.java new file mode 100644 index 0000000..8d68ddf --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/controller/RzSubsidyController.java @@ -0,0 +1,97 @@ +package com.evo.personnelMatters.controller; + +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.poi.ExcelUtil; +import com.evo.personnelMatters.domain.RzSubsidy; +import com.evo.personnelMatters.service.IRzSubsidyService; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 琛ュ姪绠$悊Controller + * + * @author chenyj + * @date 2024-08-27 + */ +@RestController +@RequestMapping("/personnelMatters/subsidy") +public class RzSubsidyController extends BaseController +{ + @Resource + private IRzSubsidyService rzSubsidyService; + + /** + * 鏌ヨ琛ュ姪绠$悊鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:subsidy:list')") + @GetMapping("/list") + public TableDataInfo list(RzSubsidy rzSubsidy) + { + startPage(); + List list = rzSubsidyService.selectRzSubsidyList(rzSubsidy); + return getDataTable(list); + } + + /** + * 瀵煎嚭琛ュ姪绠$悊鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:subsidy:export')") + @Log(title = "琛ュ姪绠$悊", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, RzSubsidy rzSubsidy) + { + List list = rzSubsidyService.selectRzSubsidyList(rzSubsidy); + ExcelUtil util = new ExcelUtil(RzSubsidy.class); + util.exportExcel(response, list, "琛ュ姪绠$悊鏁版嵁"); + } + + /** + * 鑾峰彇琛ュ姪绠$悊璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:subsidy:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(rzSubsidyService.selectRzSubsidyById(id)); + } + + /** + * 鏂板琛ュ姪绠$悊 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:subsidy:add')") + @Log(title = "琛ュ姪绠$悊", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody RzSubsidy rzSubsidy) + { + return rzSubsidyService.insertRzSubsidy(rzSubsidy); + } + + /** + * 淇敼琛ュ姪绠$悊 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:subsidy:edit')") + @Log(title = "琛ュ姪绠$悊", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody RzSubsidy rzSubsidy) + { + return toAjax(rzSubsidyService.updateRzSubsidy(rzSubsidy)); + } + + /** + * 鍒犻櫎琛ュ姪绠$悊 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:subsidy:remove')") + @Log(title = "琛ュ姪绠$悊", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public AjaxResult remove(@PathVariable Long id) + { + return toAjax(rzSubsidyService.deleteRzSubsidyById(id)); + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/controller/SpecialOverTimeController.java b/evo-admin/src/main/java/com/evo/personnelMatters/controller/SpecialOverTimeController.java new file mode 100644 index 0000000..1be0d80 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/controller/SpecialOverTimeController.java @@ -0,0 +1,163 @@ +package com.evo.personnelMatters.controller; + +import com.alibaba.fastjson2.JSONObject; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.page.TableDataInfo; +import com.evo.equipment.constant.Constants; +import com.evo.equipment.domain.vo.StaffData; +import com.evo.equipment.domain.vo.StaffDto; +import com.evo.framework.websocket.WebSocketUsers; +import com.evo.personnelMatters.domain.EqOverStaff; +import com.evo.personnelMatters.domain.SpecialOverTime; +import com.evo.personnelMatters.service.SpecialOverTimeService; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.util.List; + + +@RestController +@RequestMapping("/personnelMatters/specialOverTime") +public class SpecialOverTimeController extends BaseController { + + @Resource + private SpecialOverTimeService specialOverTimeService; + + @PreAuthorize("@ss.hasPermi('personnelMatters:specialOverTime:query')") + @GetMapping(value = "/getOverTimeById") + public SpecialOverTime getInfo() + { + return specialOverTimeService.selectSpecialOverTimeById(); + } + /** + * 淇濆瓨鏃堕棿绠$悊 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:specialOverTime:add')") + @PostMapping + public AjaxResult addSpecialOverTime(@RequestBody SpecialOverTime specialOverTime) + { + return specialOverTimeService.addSpecialOverTime(specialOverTime); + } + + @PreAuthorize("@ss.hasPermi('personnelMatters:specialOverTime:list')") + @GetMapping("/list") + public TableDataInfo list(EqOverStaff eqOverStaff) + { + startPage(); + List list = specialOverTimeService.selectEqOverStaffList(eqOverStaff); + return getDataTable(list); + } + + + /** + * 鑾峰彇鐓х墖绠$悊璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:specialOverTime:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(specialOverTimeService.selectEqOverStaffById(id)); + } + + /** + * 鏂板鐓х墖绠$悊 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:specialOverTime:add')") + @RequestMapping("/addOverStaff") + public AjaxResult add(@RequestBody EqOverStaff eqOverStaff) + { + return toAjax(specialOverTimeService.insertEqOverStaff(eqOverStaff)); + } + + /** + * 淇敼鐓х墖绠$悊 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:specialOverTime:edit')") + @PutMapping + public AjaxResult edit(@RequestBody EqOverStaff eqOverStaff) + { + return toAjax(specialOverTimeService.updateEqOverStaff(eqOverStaff)); + } + + /** + * 鍒犻櫎鐓х墖绠$悊 + */ + @PreAuthorize("@ss.hasPermi('personnelMatters:specialOverTime:remove')") + @DeleteMapping("/{id}") + public AjaxResult remove(@PathVariable Long id) + { + return toAjax(specialOverTimeService.deleteEqOverStaffById(id)); + } + + @RequestMapping("/uploadDispatchings") + @ResponseBody + public AjaxResult uploadPDF(@RequestParam("id") Long id,@RequestParam("file") MultipartFile filePath){ + String originalFilename = filePath.getOriginalFilename(); + //鏍¢獙鏂囦欢鍚庣紑 + String suffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1); // 杈撳嚭 "txt" + //鍒ゆ柇鏄惁鏄浘鐗囨枃浠 + if(!"jpg".equals(suffix)&&!"jpeg".equals(suffix)&&!"png".equals(suffix)){ + return AjaxResult.error("闈炴硶鏂囦欢涓嶅厑璁镐笂浼"); + }else{ + //鏍规嵁ID鏌ヨ鍛樺伐淇℃伅 + EqOverStaff eqOverStaff = specialOverTimeService.selectEqOverStaffById(id); + try { + InputStream is = filePath.getInputStream(); + byte[] bytes = new byte[is.available()]; + is.read(bytes); + File file = new File(Constants.STAFF_IMAGE_ADDRESS+originalFilename); + FileOutputStream fos = new FileOutputStream(file); + BufferedOutputStream bos = new BufferedOutputStream(fos); + bos.write(bytes); + bos.flush(); + is.close(); + fos.close(); + bos.close(); + eqOverStaff.setImageUrl(Constants.STAFF_IMAGE_URL_OVER_TIME+originalFilename); + specialOverTimeService.updateEqOverStaff(eqOverStaff); + + //闇瑕佹帹閫佺殑鏁版嵁 + String message = ""; + //闇瑕佽繑鍥炵殑瀵硅薄 + StaffDto cau = new StaffDto(); + //鍙戦佺殑鏁版嵁 + StaffData caud = new StaffData(); + + //璇ユ帴鍙e浐瀹氫负to_device锛屽彂閫佺粰璁惧鐢ㄤ簬璇嗗埆瀵瑰簲鍝釜鎸囦护 + cau.setCmd("to_device"); + //鏃犵敤鍊硷紝绌轰覆 + cau.setForm(""); + //璁惧鍙 + cau.setTo(Constants.EQ_DEVICE_OVER_TIME_CODE); + //缁欐湇鍔$棰勭暀鐨勮ˉ鍏呭瓧娈碉紝璁惧绔笉澶勭悊杩欎釜瀛楁鍐呭銆傝澶囧湪鍝嶅簲杩欐潯鎸囦护鏃跺師鏍疯繑鍥 + cau.setExtra(""); + //鍙戦佺殑鏁版嵁 + caud.setCmd("addUser"); + caud.setUser_id(eqOverStaff.getUserId().toString()); + caud.setName(eqOverStaff.getStaffName()); + caud.setTts_name(""); + caud.setFace_template(eqOverStaff.getImageUrl()); + caud.setEffect_time(""); + caud.setId_valid(""); + caud.setIc(""); + caud.setPhone(""); + caud.setMode(0); + cau.setData(caud); + //Java瀵硅薄杞崲鎴怞SON瀛楃涓 + message = JSONObject.toJSONString(cau); + //璋冪敤websocket锛屾帹閫佺粰璁惧 + WebSocketUsers.sendMessageToUsersByText(message); + } catch (Exception e) { + e.printStackTrace(); + } + return AjaxResult.success("鏂囦欢涓婁紶鎴愬姛"); + } + } + +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/domain/EqOverStaff.java b/evo-admin/src/main/java/com/evo/personnelMatters/domain/EqOverStaff.java new file mode 100644 index 0000000..af3f24f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/domain/EqOverStaff.java @@ -0,0 +1,96 @@ +package com.evo.personnelMatters.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; + +/** + * 鐓х墖绠$悊瀵硅薄 eq_over_staff + * + * @author evo + * @date 2025-04-17 + */ +public class EqOverStaff extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭ID */ + private Long id; + + /** 浜哄憳ID */ + @Excel(name = "浜哄憳ID") + private Long userId; + + /** 鍛樺伐濮撳悕 */ + @Excel(name = "鍛樺伐濮撳悕") + private String staffName; + + /** 鐓х墖鍦板潃 */ + @Excel(name = "鐓х墖鍦板潃") + private String imageUrl; + + /** 鍒犻櫎鏍囪瘑 */ + private String delFlag; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setStaffName(String staffName) + { + this.staffName = staffName; + } + + public String getStaffName() + { + return staffName; + } + public void setImageUrl(String imageUrl) + { + this.imageUrl = imageUrl; + } + + public String getImageUrl() + { + return imageUrl; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("userId", getUserId()) + .append("staffName", getStaffName()) + .append("imageUrl", getImageUrl()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzBusinessTrip.java b/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzBusinessTrip.java new file mode 100644 index 0000000..9a7037f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzBusinessTrip.java @@ -0,0 +1,138 @@ +package com.evo.personnelMatters.domain; + +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.Date; + +/** + * 鍑哄樊绠$悊瀵硅薄 rz_business_trip + * + * @author chenyj + * @date 2024-08-30 + */ +public class RzBusinessTrip extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭ID */ + private Long id; + + /** 閮ㄩ棬 */ + @Excel(name = "閮ㄩ棬") + private Long deptId; + + private String deptName; + + private Long userId; + + /** 鍛樺伐濮撳悕 */ + @Excel(name = "鍛樺伐濮撳悕") + private String name; + + /** 鍑哄樊鏈堜唤锛堝埌鏈堬級 */ + @JsonFormat(pattern = "yyyy-MM") + @Excel(name = "鍑哄樊鏈堜唤", width = 30, dateFormat = "yyyy-MM") + private Date tripDate; + + /** 鍑哄樊鎬绘椂闀匡紙灏忔椂锛 */ + @Excel(name = "鍑哄樊鎬绘椂闀", readConverterExp = "澶") + private Long tripDays; + private Long overDays; //鍔犵彮鏃堕暱 + + /** 鍒犻櫎鏍囪瘑 */ + private String delFlag; + + public Long getOverDays() { + return overDays; + } + + public void setOverDays(Long overDays) { + this.overDays = overDays; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + public Date getTripDate() { + return tripDate; + } + + public void setTripDate(Date tripDate) { + this.tripDate = tripDate; + } + + public Long getTripDays() { + return tripDays; + } + + public void setTripDays(Long tripDays) { + this.tripDays = tripDays; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("leaveDate", getTripDate()) + .append("leaveHours", getTripDays()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzBusinessTripDetail.java b/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzBusinessTripDetail.java new file mode 100644 index 0000000..2fa73cc --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzBusinessTripDetail.java @@ -0,0 +1,138 @@ +package com.evo.personnelMatters.domain; + +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import java.util.Date; + +/** + * 鍑哄樊璇︽儏瀵硅薄 rz_trip_detail + * + * @author chenyj + * @date 2024-09-04 + */ +public class RzBusinessTripDetail extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭ID */ + private Long id; + + /** 鍑哄樊ID */ + @Excel(name = "鍑哄樊ID") + private Long tripId; + + /** 鍛樺伐濮撳悕 */ + @Excel(name = "鍛樺伐濮撳悕") + private String name; + + /** 鍑哄樊寮濮嬫椂闂 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍑哄樊寮濮嬫椂闂", width = 30, dateFormat = "yyyy-MM-dd") + private Date tripStartTime; + + /** 鍑哄樊缁撴潫鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍑哄樊缁撴潫鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date tripEndTime; + + /** 鍑哄樊鏃堕暱(澶) */ + @Excel(name = "鍑哄樊鏃堕暱(澶)") + private Long tripDay; + + private Long overDays; //鍔犵彮鏃堕暱 + + /** 鍒犻櫎鏍囪瘑 */ + private String delFlag; + + public Long getOverDays() { + return overDays; + } + + public void setOverDays(Long overDays) { + this.overDays = overDays; + } + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setTripId(Long tripId) + { + this.tripId = tripId; + } + + public Long getTripId() + { + return tripId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public void setTripStartTime(Date tripStartTime) + { + this.tripStartTime = tripStartTime; + } + + public Date getTripStartTime() + { + return tripStartTime; + } + public void setTripEndTime(Date tripEndTime) + { + this.tripEndTime = tripEndTime; + } + + public Date getTripEndTime() + { + return tripEndTime; + } + public void setTripDay(Long tripDay) + { + this.tripDay = tripDay; + } + + public Long getTripDay() + { + return tripDay; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("tripId", getTripId()) + .append("tripStartTime", getTripStartTime()) + .append("tripEndTime", getTripEndTime()) + .append("tripDay", getTripDay()) + .append("remark", getRemark()) + .append("delFlag", getDelFlag()) + .append("createTime", getCreateTime()) + .append("createBy", getCreateBy()) + .append("updateTime", getUpdateTime()) + .append("updateBy", getUpdateBy()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzHoliday.java b/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzHoliday.java new file mode 100644 index 0000000..3e07d28 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzHoliday.java @@ -0,0 +1,94 @@ +package com.evo.personnelMatters.domain; + +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.Date; + +/** + * 鍋囨湡绠$悊瀵硅薄 rz_holiday + * + * @author chenyj + * @date 2024-08-03 + */ +public class RzHoliday extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭 */ + private Long id; + + /** 鍋囨湡鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍋囨湡鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date holiday; + + /** 鍋囨湡璇存槑 */ + @Excel(name = "鍋囨湡璇存槑") + private String remarks; + + @Excel(name = "鐗规畩鏍囪瘑") + private String specialFlag; + //鍒犻櫎鏍囪瘑 + private String delFlag; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setHoliday(Date holiday) + { + this.holiday = holiday; + } + + public Date getHoliday() + { + return holiday; + } + public void setRemarks(String remarks) + { + this.remarks = remarks; + } + + public String getRemarks() + { + return remarks; + } + + public String getDelFlag() { + return delFlag; + } + + public void setDelFlag(String delFlag) { + this.delFlag = delFlag; + } + + public String getSpecialFlag() { + return specialFlag; + } + + public void setSpecialFlag(String specialFlag) { + this.specialFlag = specialFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("holiday", getHoliday()) + .append("remarks", getRemarks()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzInterviewer.java b/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzInterviewer.java new file mode 100644 index 0000000..fef116b --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzInterviewer.java @@ -0,0 +1,170 @@ +package com.evo.personnelMatters.domain; + +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.Date; + +/** + * 闈㈣瘯淇℃伅瀵硅薄 rz_interviewer + * + * @author chenyj + * @date 2024-09-07 + */ +public class RzInterviewer extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭 */ + private Long id; + + /** 濮撳悕 */ + @Excel(name = "濮撳悕") + private String name; + + /** 鑱旂郴鏂瑰紡 */ + @Excel(name = "鑱旂郴鏂瑰紡") + private String phone; + + /** 闈㈣瘯宀椾綅 */ + @Excel(name = "闈㈣瘯宀椾綅") + private String post; + + /** 鍏峰鎶鑳 */ + @Excel(name = "鍏峰鎶鑳") + private String content; + + /** 瀹跺涵浣忓潃 */ + @Excel(name = "瀹跺涵浣忓潃") + private String address; + + /** 闈㈣瘯鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "闈㈣瘯鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date interviewDate; + + /** 鏄惁褰曠敤 */ + @Excel(name = "鏄惁褰曠敤") + private String ytFlag; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鍒犻櫎鏍囪 */ + private String delFlag; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setName(String name) + { + this.name = name; + } + + public String getName() + { + return name; + } + public void setPhone(String phone) + { + this.phone = phone; + } + + public String getPhone() + { + return phone; + } + public void setPost(String post) + { + this.post = post; + } + + public String getPost() + { + return post; + } + public void setContent(String content) + { + this.content = content; + } + + public String getContent() + { + return content; + } + public void setAddress(String address) + { + this.address = address; + } + + public String getAddress() + { + return address; + } + public void setInterviewDate(Date interviewDate) + { + this.interviewDate = interviewDate; + } + + public Date getInterviewDate() + { + return interviewDate; + } + public void setYtFlag(String ytFlag) + { + this.ytFlag = ytFlag; + } + + public String getYtFlag() + { + return ytFlag; + } + public void setRemarks(String remarks) + { + this.remarks = remarks; + } + + public String getRemarks() + { + return remarks; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("name", getName()) + .append("phone", getPhone()) + .append("post", getPost()) + .append("content", getContent()) + .append("address", getAddress()) + .append("interviewDate", getInterviewDate()) + .append("ytFlag", getYtFlag()) + .append("remarks", getRemarks()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzLeave.java b/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzLeave.java new file mode 100644 index 0000000..4f23f1e --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzLeave.java @@ -0,0 +1,250 @@ +package com.evo.personnelMatters.domain; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; + +/** + * 璇峰亣绠$悊瀵硅薄 rz_leave + * + * @author evo + * @date 2025-03-15 + */ +public class RzLeave extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭ID */ + private Long id; + + /** 鍛樺伐ID */ + @Excel(name = "鍛樺伐ID") + private Long userId; + + /** 閮ㄩ棬 */ + private Long deptId; + @Excel(name = "閮ㄩ棬") + private String deptName; + + /** 鍛樺伐濮撳悕 */ + @Excel(name = "鍛樺伐濮撳悕") + private String name; + + /** 璇峰亣鏈堜唤锛堝埌鏈堬級 */ + @Excel(name = "璇峰亣鏈堜唤", readConverterExp = "鍒=鏈", dateFormat = "yyyy-MM") + @JsonFormat(pattern = "yyyy-MM") + private Date leaveDate; + + /** 鐥呭亣鏃堕暱锛堝皬鏃讹級 */ + @Excel(name = "鐥呭亣鏃堕暱", readConverterExp = "灏=鏃") + private Integer sickHours; + + /** 浜嬪亣鏃堕暱锛堝皬鏃讹級 */ + @Excel(name = "浜嬪亣鏃堕暱", readConverterExp = "灏=鏃") + private Integer absenceHours; + + /** 璋冧紤鍋囨椂闀匡紙灏忔椂锛 */ + @Excel(name = "璋冧紤鍋囨椂闀", readConverterExp = "灏=鏃") + private Integer compensatoryHours; + + /** 濠氬亣鏃堕暱锛堝皬鏃讹級 */ + @Excel(name = "濠氬亣鏃堕暱", readConverterExp = "灏=鏃") + private Integer marriageHours; + + /** 骞翠紤鍋囨椂闀匡紙灏忔椂锛 */ + @Excel(name = "骞翠紤鍋囨椂闀", readConverterExp = "灏=鏃") + private Integer annualHours; + + /** 浜у亣鏃堕暱锛堝皬鏃讹級 */ + @Excel(name = "浜у亣鏃堕暱", readConverterExp = "灏=鏃") + private Integer maternityHours; + + /** 闄骇鍋囨椂闀匡紙灏忔椂锛 */ + @Excel(name = "闄骇鍋囨椂闀", readConverterExp = "灏=鏃") + private Integer paternityHours; + + /** 涓у亣鏃堕暱锛堝皬鏃讹級 */ + @Excel(name = "涓у亣鏃堕暱", readConverterExp = "灏=鏃") + private Integer funeralHours; + + /** 宸ヤ激鍋囨椂闀匡紙灏忔椂锛 */ + @Excel(name = "宸ヤ激鍋囨椂闀", readConverterExp = "灏=鏃") + private Integer workHours; + + /** 鍒犻櫎鏍囪瘑 */ + private String delFlag; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + public Long getDeptId() + { + return deptId; + } + public void setName(String name) + { + this.name = name; + } + + public String getName() + { + return name; + } + public void setLeaveDate(Date leaveDate) + { + this.leaveDate = leaveDate; + } + + public Date getLeaveDate() + { + return leaveDate; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public void setSickHours(Integer sickHours) + { + this.sickHours = sickHours; + } + + public Integer getSickHours() + { + return sickHours; + } + public void setAbsenceHours(Integer absenceHours) + { + this.absenceHours = absenceHours; + } + + public Integer getAbsenceHours() + { + return absenceHours; + } + public void setCompensatoryHours(Integer compensatoryHours) + { + this.compensatoryHours = compensatoryHours; + } + + public Integer getCompensatoryHours() + { + return compensatoryHours; + } + public void setMarriageHours(Integer marriageHours) + { + this.marriageHours = marriageHours; + } + + public Integer getMarriageHours() + { + return marriageHours; + } + public void setAnnualHours(Integer annualHours) + { + this.annualHours = annualHours; + } + + public Integer getAnnualHours() + { + return annualHours; + } + public void setMaternityHours(Integer maternityHours) + { + this.maternityHours = maternityHours; + } + + public Integer getMaternityHours() + { + return maternityHours; + } + public void setPaternityHours(Integer paternityHours) + { + this.paternityHours = paternityHours; + } + + public Integer getPaternityHours() + { + return paternityHours; + } + public void setFuneralHours(Integer funeralHours) + { + this.funeralHours = funeralHours; + } + + public Integer getFuneralHours() + { + return funeralHours; + } + public void setWorkHours(Integer workHours) + { + this.workHours = workHours; + } + + public Integer getWorkHours() + { + return workHours; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("userId", getUserId()) + .append("deptId", getDeptId()) + .append("name", getName()) + .append("leaveDate", getLeaveDate()) + .append("sickHours", getSickHours()) + .append("absenceHours", getAbsenceHours()) + .append("compensatoryHours", getCompensatoryHours()) + .append("marriageHours", getMarriageHours()) + .append("annualHours", getAnnualHours()) + .append("maternityHours", getMaternityHours()) + .append("paternityHours", getPaternityHours()) + .append("funeralHours", getFuneralHours()) + .append("workHours", getWorkHours()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzLeaveDetail.java b/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzLeaveDetail.java new file mode 100644 index 0000000..ad34f5b --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzLeaveDetail.java @@ -0,0 +1,146 @@ +package com.evo.personnelMatters.domain; + +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 璇峰亣绠$悊璇︽儏瀵硅薄 rz_leave_detail + * + * @author chenyj + * @date 2024-08-03 + */ +public class RzLeaveDetail extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭ID */ + private Long id; + + /** 鍛樺伐濮撳悕 */ + @Excel(name = "鍛樺伐濮撳悕") + private String name; + + /** 璇峰亣寮濮嬫椂闂 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "璇峰亣寮濮嬫椂闂", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date leaveStartTime; + + /** 璇峰亣缁撴潫鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "璇峰亣缁撴潫鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date leaveEndTime; + + /** 璇峰亣鏃堕暱 */ + @Excel(name = "璇峰亣鏃堕暱") + private Integer leaveHour; + //璇峰亣姹囨籌D + private Long leaveId; + @Excel(name = "璇峰亣绫诲瀷") + private String type; //璇峰亣绫诲瀷 + + private String remarks; + + private String delFlag; + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public void setLeaveStartTime(Date leaveStartTime) + { + this.leaveStartTime = leaveStartTime; + } + + public Date getLeaveStartTime() + { + return leaveStartTime; + } + public void setLeaveEndTime(Date leaveEndTime) + { + this.leaveEndTime = leaveEndTime; + } + + public Date getLeaveEndTime() + { + return leaveEndTime; + } + public void setLeaveHour(Integer leaveHour) + { + this.leaveHour = leaveHour; + } + + public Integer getLeaveHour() + { + return leaveHour; + } + public void setLeaveId(Long leaveId) + { + this.leaveId = leaveId; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public Long getLeaveId() + { + return leaveId; + } + + public String getDelFlag() { + return delFlag; + } + + public void setDelFlag(String delFlag) { + this.delFlag = delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("name", getName()) + .append("leaveStartTime", getLeaveStartTime()) + .append("leaveEndTime", getLeaveEndTime()) + .append("leaveHours", getLeaveHour()) + .append("remark", getRemark()) + .append("createTime", getCreateTime()) + .append("createBy", getCreateBy()) + .append("updateTime", getUpdateTime()) + .append("updateBy", getUpdateBy()) + .append("leaveId", getLeaveId()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzOverTime.java b/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzOverTime.java new file mode 100644 index 0000000..da32a35 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzOverTime.java @@ -0,0 +1,131 @@ +package com.evo.personnelMatters.domain; + +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 鍔犵彮绠$悊瀵硅薄 rz_over_time + * + * @author chenyj + * @date 2024-09-03 + */ +public class RzOverTime extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭ID */ + private Long id; + + /** 閮ㄩ棬ID */ + private Long deptId; + @Excel(name = "閮ㄩ棬") + private String deptName; + + private Long userId; + + /** 鍛樺伐濮撳悕 */ + @Excel(name = "鍛樺伐濮撳悕") + private String name; + + /** 鍔犵彮鏈堜唤锛堝埌鏈堬級 */ + @JsonFormat(pattern = "yyyy-MM") + @Excel(name = "鍔犵彮鏈堜唤", readConverterExp = "鍒=鏈", dateFormat = "yyyy-MM") + private Date overTimeMonth; + + /** 鍔犵彮鎬绘椂闀匡紙鏈堬級 */ + @Excel(name = "鍔犵彮鎬绘椂闀") + private BigDecimal overHours; + + /** 鍒犻櫎鏍囪瘑 */ + private String delFlag; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + public void setOverTimeMonth(Date overTimeMonth) + { + this.overTimeMonth = overTimeMonth; + } + + public Date getOverTimeMonth() + { + return overTimeMonth; + } + public void setOverHours(BigDecimal overHours) + { + this.overHours = overHours; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public BigDecimal getOverHours() + { + return overHours; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("dept", getDeptId()) + .append("overTimeMonth", getOverTimeMonth()) + .append("overHours", getOverHours()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzOverTimeDetail.java b/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzOverTimeDetail.java new file mode 100644 index 0000000..ec09fb1 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzOverTimeDetail.java @@ -0,0 +1,129 @@ +package com.evo.personnelMatters.domain; + +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 鍔犵彮璇︽儏瀵硅薄 rz_over_time_detail + * + * @author chenyj + * @date 2024-09-09 + */ +public class RzOverTimeDetail extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭ID */ + private Long id; + + /** 鍔犵彮ID */ + @Excel(name = "鍔犵彮ID") + private Long overTimeId; + + /** 鍛樺伐濮撳悕 */ + @Excel(name = "鍛樺伐濮撳悕") + private String name; + + /** 鍔犵彮寮濮嬫椂闂 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "鍔犵彮寮濮嬫椂闂", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date overTimeStart; + + /** 璇峰亣缁撴潫鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "璇峰亣缁撴潫鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date overTimeEnd; + + /** 鍔犵彮鏃堕暱 */ + @Excel(name = "鍔犵彮鏃堕暱") + private BigDecimal overTimeHours; + + /** 鍒犻櫎鏍囪瘑 */ + private String delFlag; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setOverTimeId(Long overTimeId) + { + this.overTimeId = overTimeId; + } + + public Long getOverTimeId() + { + return overTimeId; + } + public void setOverTimeStart(Date overTimeStart) + { + this.overTimeStart = overTimeStart; + } + + public Date getOverTimeStart() + { + return overTimeStart; + } + public void setOverTimeEnd(Date overTimeEnd) + { + this.overTimeEnd = overTimeEnd; + } + + public Date getOverTimeEnd() + { + return overTimeEnd; + } + public void setOverTimeHours(BigDecimal overTimeHours) + { + this.overTimeHours = overTimeHours; + } + + public BigDecimal getOverTimeHours() + { + return overTimeHours; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("overTimeId", getOverTimeId()) + .append("overTimeStart", getOverTimeStart()) + .append("overTimeEnd", getOverTimeEnd()) + .append("overTimeHours", getOverTimeHours()) + .append("remark", getRemark()) + .append("delFlag", getDelFlag()) + .append("createTime", getCreateTime()) + .append("createBy", getCreateBy()) + .append("updateTime", getUpdateTime()) + .append("updateBy", getUpdateBy()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzSubsidy.java b/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzSubsidy.java new file mode 100644 index 0000000..6824ea8 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/domain/RzSubsidy.java @@ -0,0 +1,97 @@ +package com.evo.personnelMatters.domain; + +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import java.math.BigDecimal; + +/** + * 琛ュ姪绠$悊瀵硅薄 rz_subsidy + * + * @author chenyj + * @date 2024-08-27 + */ +public class RzSubsidy extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭 */ + private Long id; + + /** 琛ュ姪鍚嶇О */ + @Excel(name = "琛ュ姪鍚嶇О") + private String name; + + /** 琛ュ姪閲戦 */ + @Excel(name = "琛ュ姪閲戦") + private BigDecimal value; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鍒犻櫎鏍囪瘑 */ + private String delFlag; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setName(String name) + { + this.name = name; + } + + public String getName() + { + return name; + } + public void setValue(BigDecimal value) + { + this.value = value; + } + + public BigDecimal getValue() + { + return value; + } + public void setRemarks(String remarks) + { + this.remarks = remarks; + } + + public String getRemarks() + { + return remarks; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("name", getName()) + .append("value", getValue()) + .append("remarks", getRemarks()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/domain/SpecialOverTime.java b/evo-admin/src/main/java/com/evo/personnelMatters/domain/SpecialOverTime.java new file mode 100644 index 0000000..b4ecd87 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/domain/SpecialOverTime.java @@ -0,0 +1,59 @@ +package com.evo.personnelMatters.domain; + +import com.evo.common.core.domain.BaseEntity; + +public class SpecialOverTime extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 涓婚敭ID */ + private Long id; + /** 寮濮嬫椂闂 */ + private String workStart; + /** 缁撴潫鏃堕棿 */ + private String workEnd; + + private String remarks; + + private String delFlag; + + public String getDelFlag() { + return delFlag; + } + + public void setDelFlag(String delFlag) { + this.delFlag = delFlag; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getWorkStart() { + return workStart; + } + + public void setWorkStart(String workStart) { + this.workStart = workStart; + } + + public String getWorkEnd() { + return workEnd; + } + + public void setWorkEnd(String workEnd) { + this.workEnd = workEnd; + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/mapper/BsOverTimeMapper.java b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/BsOverTimeMapper.java new file mode 100644 index 0000000..e335a8b --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/BsOverTimeMapper.java @@ -0,0 +1,11 @@ +package com.evo.personnelMatters.mapper; + +import com.evo.personnelMatters.domain.SpecialOverTime; + +public interface BsOverTimeMapper { + + public int updateSpecialOverTime(SpecialOverTime specialOverTime); + + public SpecialOverTime selectSpecialOverTimeById(); + +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/mapper/EqOverStaffMapper.java b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/EqOverStaffMapper.java new file mode 100644 index 0000000..520c347 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/EqOverStaffMapper.java @@ -0,0 +1,48 @@ +package com.evo.personnelMatters.mapper; + +import com.evo.personnelMatters.domain.EqOverStaff; +import java.util.List; + +/** + * 鐓х墖绠$悊Mapper鎺ュ彛 + * + * @author evo + * @date 2025-04-17 + */ +public interface EqOverStaffMapper +{ + /** + * 鏌ヨ鐓х墖绠$悊 + * + * @param id 鐓х墖绠$悊涓婚敭 + * @return 鐓х墖绠$悊 + */ + public EqOverStaff selectEqOverStaffById(Long id); + + /** + * 鏌ヨ鐓х墖绠$悊鍒楄〃 + * + * @param eqOverStaff 鐓х墖绠$悊 + * @return 鐓х墖绠$悊闆嗗悎 + */ + public List selectEqOverStaffList(EqOverStaff eqOverStaff); + + /** + * 鏂板鐓х墖绠$悊 + * + * @param eqOverStaff 鐓х墖绠$悊 + * @return 缁撴灉 + */ + public int insertEqOverStaff(EqOverStaff eqOverStaff); + + /** + * 淇敼鐓х墖绠$悊 + * + * @param eqOverStaff 鐓х墖绠$悊 + * @return 缁撴灉 + */ + public int updateEqOverStaff(EqOverStaff eqOverStaff); + + public EqOverStaff selectEqOverStaffByUserId(Long userId); + +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzBusinessTripDetailMapper.java b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzBusinessTripDetailMapper.java new file mode 100644 index 0000000..03b6f4f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzBusinessTripDetailMapper.java @@ -0,0 +1,63 @@ +package com.evo.personnelMatters.mapper; + +import com.evo.personnelMatters.domain.RzBusinessTripDetail; +import org.apache.ibatis.annotations.Param; +import java.util.List; + +/** + * 鍑哄樊璇︽儏Mapper鎺ュ彛 + * + * @author chenyj + * @date 2024-09-04 + */ +public interface RzBusinessTripDetailMapper +{ + /** + * 鏌ヨ鍑哄樊璇︽儏 + * + * @param id 鍑哄樊璇︽儏涓婚敭 + * @return 鍑哄樊璇︽儏 + */ + public RzBusinessTripDetail selectRzTripDetailById(Long id); + + /** + * 鏌ヨ鍑哄樊璇︽儏鍒楄〃 + * + * @param rzTripDetail 鍑哄樊璇︽儏 + * @return 鍑哄樊璇︽儏闆嗗悎 + */ + public List selectRzTripDetailList(RzBusinessTripDetail rzTripDetail); + + /** + * 鏂板鍑哄樊璇︽儏 + * + * @param rzTripDetail 鍑哄樊璇︽儏 + * @return 缁撴灉 + */ + public int insertRzTripDetail(RzBusinessTripDetail rzTripDetail); + + /** + * 淇敼鍑哄樊璇︽儏 + * + * @param rzTripDetail 鍑哄樊璇︽儏 + * @return 缁撴灉 + */ + public int updateRzTripDetail(RzBusinessTripDetail rzTripDetail); + + /** + * 鏌ヨ鍑哄樊璇︽儏 + * + * @param tripId 鍑哄樊璇︽儏涓婚敭 + * @return 鍑哄樊璇︽儏 + */ + public RzBusinessTripDetail selectRzLeaveDetailByTripId(Long tripId); + + /** + * 鏍规嵁濮撳悕鏌ヨ鏈鍚庝竴娆$殑鍑哄樊鏃堕棿 + * @param deptId + * @param name + * @return + */ + public RzBusinessTripDetail selectRzLeaveDetailByName(@Param("deptId") Long deptId, @Param("name") String name); + +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzBusinessTripMapper.java b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzBusinessTripMapper.java new file mode 100644 index 0000000..ca7d917 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzBusinessTripMapper.java @@ -0,0 +1,57 @@ +package com.evo.personnelMatters.mapper; + +import com.evo.personnelMatters.domain.RzBusinessTrip; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +/** + * 鍑哄樊绠$悊Mapper鎺ュ彛 + * + * @author chenyj + * @date 2024-08-30 + */ +public interface RzBusinessTripMapper +{ + /** + * 鏌ヨ鍑哄樊绠$悊 + * + * @param id 鍑哄樊绠$悊涓婚敭 + * @return 鍑哄樊绠$悊 + */ + public RzBusinessTrip selectRzBusinessTripById(Long id); + + /** + * 鏌ヨ鍑哄樊绠$悊鍒楄〃 + * + * @param rzBusinessTrip 鍑哄樊绠$悊 + * @return 鍑哄樊绠$悊闆嗗悎 + */ + public List selectRzBusinessTripList(RzBusinessTrip rzBusinessTrip); + + /** + * 鏂板鍑哄樊绠$悊 + * + * @param rzBusinessTrip 鍑哄樊绠$悊 + * @return 缁撴灉 + */ + public int insertRzBusinessTrip(RzBusinessTrip rzBusinessTrip); + + /** + * 淇敼鍑哄樊绠$悊 + * + * @param rzBusinessTrip 鍑哄樊绠$悊 + * @return 缁撴灉 + */ + public int updateRzBusinessTrip(RzBusinessTrip rzBusinessTrip); + + /** + * 鏌ヨ鍛樺伐鍑哄樊鎯呭喌 + * + * @param rzBusinessTrip 鍑哄樊绠$悊 + * @return 鍑哄樊绠$悊闆嗗悎 + */ + public RzBusinessTrip selectRzBusinessTripListByMonth(@Param("userId")Long userId,@Param("tripDate") Date tripDate); + +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzHolidayMapper.java b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzHolidayMapper.java new file mode 100644 index 0000000..3f5d45f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzHolidayMapper.java @@ -0,0 +1,46 @@ +package com.evo.personnelMatters.mapper; + +import com.evo.personnelMatters.domain.RzHoliday; +import java.util.List; + +/** + * 鍋囨湡绠$悊Mapper鎺ュ彛 + * + * @author chenyj + * @date 2024-08-03 + */ +public interface RzHolidayMapper +{ + /** + * 鏌ヨ鍋囨湡绠$悊 + * + * @param id 鍋囨湡绠$悊涓婚敭 + * @return 鍋囨湡绠$悊 + */ + public RzHoliday selectRzHolidayById(Long id); + + /** + * 鏌ヨ鍋囨湡绠$悊鍒楄〃 + * + * @param rzHoliday 鍋囨湡绠$悊 + * @return 鍋囨湡绠$悊闆嗗悎 + */ + public List selectRzHolidayList(RzHoliday rzHoliday); + + /** + * 鏂板鍋囨湡绠$悊 + * + * @param rzHoliday 鍋囨湡绠$悊 + * @return 缁撴灉 + */ + public int insertRzHoliday(RzHoliday rzHoliday); + + /** + * 淇敼鍋囨湡绠$悊 + * + * @param rzHoliday 鍋囨湡绠$悊 + * @return 缁撴灉 + */ + public int updateRzHoliday(RzHoliday rzHoliday); + +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzInterviewerMapper.java b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzInterviewerMapper.java new file mode 100644 index 0000000..2bfcfc2 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzInterviewerMapper.java @@ -0,0 +1,47 @@ +package com.evo.personnelMatters.mapper; + +import com.evo.personnelMatters.domain.RzInterviewer; + +import java.util.List; + +/** + * 闈㈣瘯淇℃伅Mapper鎺ュ彛 + * + * @author chenyj + * @date 2024-09-07 + */ +public interface RzInterviewerMapper +{ + /** + * 鏌ヨ闈㈣瘯淇℃伅 + * + * @param id 闈㈣瘯淇℃伅涓婚敭 + * @return 闈㈣瘯淇℃伅 + */ + public RzInterviewer selectRzInterviewerById(Long id); + + /** + * 鏌ヨ闈㈣瘯淇℃伅鍒楄〃 + * + * @param rzInterviewer 闈㈣瘯淇℃伅 + * @return 闈㈣瘯淇℃伅闆嗗悎 + */ + public List selectRzInterviewerList(RzInterviewer rzInterviewer); + + /** + * 鏂板闈㈣瘯淇℃伅 + * + * @param rzInterviewer 闈㈣瘯淇℃伅 + * @return 缁撴灉 + */ + public int insertRzInterviewer(RzInterviewer rzInterviewer); + + /** + * 淇敼闈㈣瘯淇℃伅 + * + * @param rzInterviewer 闈㈣瘯淇℃伅 + * @return 缁撴灉 + */ + public int updateRzInterviewer(RzInterviewer rzInterviewer); + +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzLeaveDetailMapper.java b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzLeaveDetailMapper.java new file mode 100644 index 0000000..1bd238a --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzLeaveDetailMapper.java @@ -0,0 +1,64 @@ +package com.evo.personnelMatters.mapper; + +import com.evo.personnelMatters.domain.RzLeaveDetail; +import org.apache.ibatis.annotations.Param; +import java.util.List; + +/** + * 璇峰亣绠$悊璇︽儏Mapper鎺ュ彛 + * + * @author chenyj + * @date 2024-08-03 + */ +public interface RzLeaveDetailMapper +{ + /** + * 鏌ヨ璇峰亣绠$悊璇︽儏 + * + * @param id 璇峰亣绠$悊璇︽儏涓婚敭 + * @return 璇峰亣绠$悊璇︽儏 + */ + public RzLeaveDetail selectRzLeaveDetailById(Long id); + + /** + * 鏌ヨ璇峰亣绠$悊璇︽儏鍒楄〃 + * + * @param rzLeaveDetail 璇峰亣绠$悊璇︽儏 + * @return 璇峰亣绠$悊璇︽儏闆嗗悎 + */ + public List selectRzLeaveDetailList(RzLeaveDetail rzLeaveDetail); + + /** + * 鏂板璇峰亣绠$悊璇︽儏 + * + * @param rzLeaveDetail 璇峰亣绠$悊璇︽儏 + * @return 缁撴灉 + */ + public int insertRzLeaveDetail(RzLeaveDetail rzLeaveDetail); + + /** + * 淇敼璇峰亣绠$悊璇︽儏 + * + * @param rzLeaveDetail 璇峰亣绠$悊璇︽儏 + * @return 缁撴灉 + */ + public int updateRzLeaveDetail(RzLeaveDetail rzLeaveDetail); + + /** + * 鏍规嵁璇峰亣ID鏌ヨ璇︽儏 + * + * @param leaveId 璇峰亣绠$悊涓婚敭 + * @return 璇峰亣绠$悊璇︽儏 + */ + public List selectRzLeaveDetailByLeaveId(Long leaveId); + + /** + * 鏍规嵁濮撳悕鍜岄儴闂ㄦ煡璇㈠綋鏈堢殑璇峰亣璁板綍 + * @param deptId + * @param name + * @return + */ + public List selectRzLeaveDetailByName(@Param("deptId") Long deptId,@Param("name") String name); + + +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzLeaveMapper.java b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzLeaveMapper.java new file mode 100644 index 0000000..6cee627 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzLeaveMapper.java @@ -0,0 +1,53 @@ +package com.evo.personnelMatters.mapper; + +import com.evo.personnelMatters.domain.RzLeave; +import org.apache.ibatis.annotations.Param; +import java.util.Date; +import java.util.List; + +/** + * 璇峰亣绠$悊Mapper鎺ュ彛 + * + * @author chenyj + * @date 2024-08-03 + */ +public interface RzLeaveMapper +{ + /** + * 鏌ヨ璇峰亣绠$悊 + * + * @param id 璇峰亣绠$悊涓婚敭 + * @return 璇峰亣绠$悊 + */ + public RzLeave selectRzLeaveById(Long id); + + /** + * 鏌ヨ璇峰亣绠$悊鍒楄〃 + * + * @param rzLeave 璇峰亣绠$悊 + * @return 璇峰亣绠$悊闆嗗悎 + */ + public List selectRzLeaveList(RzLeave rzLeave); + + /** + * 鏂板璇峰亣绠$悊 + * + * @param rzLeave 璇峰亣绠$悊 + * @return 缁撴灉 + */ + public int insertRzLeave(RzLeave rzLeave); + + /** + * 淇敼璇峰亣绠$悊 + * + * @param rzLeave 璇峰亣绠$悊 + * @return 缁撴灉 + */ + public int updateRzLeave(RzLeave rzLeave); + + /** + * 鏍规嵁鍛樺伐ID鍜屾椂闂存煡璇㈣鍋囩粺璁 + * @return + */ + public RzLeave queryRzLeaveByDateAndUserId(@Param("userId") Long userId, @Param("date") Date date); +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzOverTimeDetailMapper.java b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzOverTimeDetailMapper.java new file mode 100644 index 0000000..199b9bf --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzOverTimeDetailMapper.java @@ -0,0 +1,63 @@ +package com.evo.personnelMatters.mapper; + +import com.evo.personnelMatters.domain.RzOverTimeDetail; +import org.apache.ibatis.annotations.Param; +import java.util.Date; +import java.util.List; + +/** + * 鍔犵彮璇︽儏Mapper鎺ュ彛 + * + * @author chenyj + * @date 2024-09-09 + */ +public interface RzOverTimeDetailMapper +{ + /** + * 鏌ヨ鍔犵彮璇︽儏 + * + * @param id 鍔犵彮璇︽儏涓婚敭 + * @return 鍔犵彮璇︽儏 + */ + public RzOverTimeDetail selectRzOverTimeDetailById(Long id); + + /** + * 鏌ヨ鍔犵彮璇︽儏鍒楄〃 + * + * @param rzOverTimeDetail 鍔犵彮璇︽儏 + * @return 鍔犵彮璇︽儏闆嗗悎 + */ + public List selectRzOverTimeDetailList(RzOverTimeDetail rzOverTimeDetail); + + /** + * 鏂板鍔犵彮璇︽儏 + * + * @param rzOverTimeDetail 鍔犵彮璇︽儏 + * @return 缁撴灉 + */ + public int insertRzOverTimeDetail(RzOverTimeDetail rzOverTimeDetail); + + /** + * 淇敼鍔犵彮璇︽儏 + * + * @param rzOverTimeDetail 鍔犵彮璇︽儏 + * @return 缁撴灉 + */ + public int updateRzOverTimeDetail(RzOverTimeDetail rzOverTimeDetail); + + /** + * 鏍规嵁鍔犵彮缁熻ID鍜屽姞鐝紑濮嬫椂闂存煡璇㈠姞鐝儏鍐 + * @return + */ + public RzOverTimeDetail queryRzOverTimeDetailByDateAndOverId(@Param("overId") Long overId,@Param("date") Date date); + + /** + * 鏌ヨ鍔犵彮璇︽儏 + * + * @param overId 鍔犵彮缁熻ID + * @return 鍔犵彮璇︽儏闆嗗悎 + */ + public List queryRzOverTimeDetailByOverId(Long overId); + + +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzOverTimeMapper.java b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzOverTimeMapper.java new file mode 100644 index 0000000..878967c --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzOverTimeMapper.java @@ -0,0 +1,56 @@ +package com.evo.personnelMatters.mapper; + +import com.evo.personnelMatters.domain.RzOverTime; +import org.apache.ibatis.annotations.Param; +import java.util.Date; +import java.util.List; + +/** + * 鍔犵彮绠$悊Mapper鎺ュ彛 + * + * @author chenyj + * @date 2024-09-03 + */ +public interface RzOverTimeMapper +{ + /** + * 鏌ヨ鍔犵彮绠$悊 + * + * @param id 鍔犵彮绠$悊涓婚敭 + * @return 鍔犵彮绠$悊 + */ + public RzOverTime selectRzOverTimeById(Long id); + + /** + * 鏌ヨ鍔犵彮绠$悊鍒楄〃 + * + * @param rzOverTime 鍔犵彮绠$悊 + * @return 鍔犵彮绠$悊闆嗗悎 + */ + public List selectRzOverTimeList(RzOverTime rzOverTime); + + /** + * 鏂板鍔犵彮绠$悊 + * + * @param rzOverTime 鍔犵彮绠$悊 + * @return 缁撴灉 + */ + public int insertRzOverTime(RzOverTime rzOverTime); + + /** + * 淇敼鍔犵彮绠$悊 + * + * @param rzOverTime 鍔犵彮绠$悊 + * @return 缁撴灉 + */ + public int updateRzOverTime(RzOverTime rzOverTime); + + /** + * 鏍规嵁鍛樺伐濮撳悕鍜屾椂闂存煡璇㈡暟鎹 + * @param userId + * @param overTimeMonth + * @return + */ + public RzOverTime selectRzOverTimeByNameAndMonth(@Param("userId") Long userId,@Param("overTimeMonth") Date overTimeMonth); + +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzSubsidyMapper.java b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzSubsidyMapper.java new file mode 100644 index 0000000..a8ebb44 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/mapper/RzSubsidyMapper.java @@ -0,0 +1,54 @@ +package com.evo.personnelMatters.mapper; + +import com.evo.personnelMatters.domain.RzSubsidy; +import java.util.List; + +/** + * 琛ュ姪绠$悊Mapper鎺ュ彛 + * + * @author chenyj + * @date 2024-08-27 + */ +public interface RzSubsidyMapper +{ + /** + * 鏌ヨ琛ュ姪绠$悊 + * + * @param id 琛ュ姪绠$悊涓婚敭 + * @return 琛ュ姪绠$悊 + */ + public RzSubsidy selectRzSubsidyById(Long id); + + /** + * 鏌ヨ琛ュ姪绠$悊鍒楄〃 + * + * @param rzSubsidy 琛ュ姪绠$悊 + * @return 琛ュ姪绠$悊闆嗗悎 + */ + public List selectRzSubsidyList(RzSubsidy rzSubsidy); + + /** + * 鏂板琛ュ姪绠$悊 + * + * @param rzSubsidy 琛ュ姪绠$悊 + * @return 缁撴灉 + */ + public int insertRzSubsidy(RzSubsidy rzSubsidy); + + /** + * 淇敼琛ュ姪绠$悊 + * + * @param rzSubsidy 琛ュ姪绠$悊 + * @return 缁撴灉 + */ + public int updateRzSubsidy(RzSubsidy rzSubsidy); + + /** + * 鏌ヨ琛ュ姪绠$悊 + * + * @param name 琛ュ姪绠$悊鍚嶇О + * @return 琛ュ姪绠$悊 + */ + public RzSubsidy selectRzSubsidyByName(String name); + +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzBusinessTripDetailService.java b/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzBusinessTripDetailService.java new file mode 100644 index 0000000..c6325fb --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzBusinessTripDetailService.java @@ -0,0 +1,54 @@ +package com.evo.personnelMatters.service; + +import com.evo.common.core.domain.AjaxResult; +import com.evo.personnelMatters.domain.RzBusinessTripDetail; +import java.util.List; + +/** + * 鍑哄樊璇︽儏Service鎺ュ彛 + * + * @author chenyj + * @date 2024-09-04 + */ +public interface IRzBusinessTripDetailService +{ + /** + * 鏌ヨ鍑哄樊璇︽儏 + * + * @param id 鍑哄樊璇︽儏涓婚敭 + * @return 鍑哄樊璇︽儏 + */ + public RzBusinessTripDetail selectRzTripDetailById(Long id); + + /** + * 鏌ヨ鍑哄樊璇︽儏鍒楄〃 + * + * @param rzTripDetail 鍑哄樊璇︽儏 + * @return 鍑哄樊璇︽儏闆嗗悎 + */ + public List selectRzTripDetailList(RzBusinessTripDetail rzTripDetail); + + /** + * 鏂板鍑哄樊璇︽儏 + * + * @param rzTripDetail 鍑哄樊璇︽儏 + * @return 缁撴灉 + */ + public AjaxResult insertRzTripDetail(RzBusinessTripDetail rzTripDetail); + + /** + * 淇敼鍑哄樊璇︽儏 + * + * @param rzTripDetail 鍑哄樊璇︽儏 + * @return 缁撴灉 + */ + public AjaxResult updateRzTripDetail(RzBusinessTripDetail rzTripDetail); + + /** + * 鍒犻櫎鍑哄樊璇︽儏淇℃伅 + * + * @param id 鍑哄樊璇︽儏涓婚敭 + * @return 缁撴灉 + */ + public AjaxResult deleteRzTripDetailById(Long id); +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzBusinessTripService.java b/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzBusinessTripService.java new file mode 100644 index 0000000..71fd2ae --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzBusinessTripService.java @@ -0,0 +1,55 @@ +package com.evo.personnelMatters.service; + +import com.evo.common.core.domain.AjaxResult; +import com.evo.personnelMatters.domain.RzBusinessTrip; + +import java.util.List; + +/** + * 鍑哄樊绠$悊Service鎺ュ彛 + * + * @author chenyj + * @date 2024-08-30 + */ +public interface IRzBusinessTripService +{ + /** + * 鏌ヨ鍑哄樊绠$悊 + * + * @param id 鍑哄樊绠$悊涓婚敭 + * @return 鍑哄樊绠$悊 + */ + public RzBusinessTrip selectRzBusinessTripById(Long id); + + /** + * 鏌ヨ鍑哄樊绠$悊鍒楄〃 + * + * @param rzBusinessTrip 鍑哄樊绠$悊 + * @return 鍑哄樊绠$悊闆嗗悎 + */ + public List selectRzBusinessTripList(RzBusinessTrip rzBusinessTrip); + + /** + * 鏂板鍑哄樊绠$悊 + * + * @param rzBusinessTrip 鍑哄樊绠$悊 + * @return 缁撴灉 + */ + public AjaxResult insertRzBusinessTrip(RzBusinessTrip rzBusinessTrip); + + /** + * 淇敼鍑哄樊绠$悊 + * + * @param rzBusinessTrip 鍑哄樊绠$悊 + * @return 缁撴灉 + */ + public int updateRzBusinessTrip(RzBusinessTrip rzBusinessTrip); + + /** + * 鍒犻櫎鍑哄樊绠$悊淇℃伅 + * + * @param id 鍑哄樊绠$悊涓婚敭 + * @return 缁撴灉 + */ + public AjaxResult deleteRzBusinessTripById(Long id); +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzHolidayService.java b/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzHolidayService.java new file mode 100644 index 0000000..314bc63 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzHolidayService.java @@ -0,0 +1,55 @@ +package com.evo.personnelMatters.service; + +import com.evo.common.core.domain.AjaxResult; +import com.evo.personnelMatters.domain.RzHoliday; +import java.util.List; + +/** + * 鍋囨湡绠$悊Service鎺ュ彛 + * + * @author chenyj + * @date 2024-08-03 + */ +public interface IRzHolidayService +{ + /** + * 鏌ヨ鍋囨湡绠$悊 + * + * @param id 鍋囨湡绠$悊涓婚敭 + * @return 鍋囨湡绠$悊 + */ + public RzHoliday selectRzHolidayById(Long id); + + /** + * 鏌ヨ鍋囨湡绠$悊鍒楄〃 + * + * @param rzHoliday 鍋囨湡绠$悊 + * @return 鍋囨湡绠$悊闆嗗悎 + */ + public List selectRzHolidayList(RzHoliday rzHoliday); + + /** + * 鏂板鍋囨湡绠$悊 + * + * @param rzHoliday 鍋囨湡绠$悊 + * @return 缁撴灉 + */ + public AjaxResult insertRzHoliday(RzHoliday rzHoliday); + + /** + * 淇敼鍋囨湡绠$悊 + * + * @param rzHoliday 鍋囨湡绠$悊 + * @return 缁撴灉 + */ + public int updateRzHoliday(RzHoliday rzHoliday); + + /** + * 鍒犻櫎鏁版嵁 + * @param id + * @param oprName + * @return + */ + public int deleteRzHoliday(Long id,String oprName); + +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzInterviewerService.java b/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzInterviewerService.java new file mode 100644 index 0000000..5e91340 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzInterviewerService.java @@ -0,0 +1,54 @@ +package com.evo.personnelMatters.service; + +import com.evo.personnelMatters.domain.RzInterviewer; + +import java.util.List; + +/** + * 闈㈣瘯淇℃伅Service鎺ュ彛 + * + * @author chenyj + * @date 2024-09-07 + */ +public interface IRzInterviewerService +{ + /** + * 鏌ヨ闈㈣瘯淇℃伅 + * + * @param id 闈㈣瘯淇℃伅涓婚敭 + * @return 闈㈣瘯淇℃伅 + */ + public RzInterviewer selectRzInterviewerById(Long id); + + /** + * 鏌ヨ闈㈣瘯淇℃伅鍒楄〃 + * + * @param rzInterviewer 闈㈣瘯淇℃伅 + * @return 闈㈣瘯淇℃伅闆嗗悎 + */ + public List selectRzInterviewerList(RzInterviewer rzInterviewer); + + /** + * 鏂板闈㈣瘯淇℃伅 + * + * @param rzInterviewer 闈㈣瘯淇℃伅 + * @return 缁撴灉 + */ + public int insertRzInterviewer(RzInterviewer rzInterviewer); + + /** + * 淇敼闈㈣瘯淇℃伅 + * + * @param rzInterviewer 闈㈣瘯淇℃伅 + * @return 缁撴灉 + */ + public int updateRzInterviewer(RzInterviewer rzInterviewer); + + /** + * 鍒犻櫎闈㈣瘯淇℃伅淇℃伅 + * + * @param id 闈㈣瘯淇℃伅涓婚敭 + * @return 缁撴灉 + */ + public int deleteRzInterviewerById(Long id); +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzLeaveDetailService.java b/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzLeaveDetailService.java new file mode 100644 index 0000000..236cf14 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzLeaveDetailService.java @@ -0,0 +1,53 @@ +package com.evo.personnelMatters.service; + +import com.evo.common.core.domain.AjaxResult; +import com.evo.personnelMatters.domain.RzLeaveDetail; +import java.util.List; + +/** + * 璇峰亣绠$悊璇︽儏Service鎺ュ彛 + * + * @author chenyj + * @date 2024-08-03 + */ +public interface IRzLeaveDetailService +{ + /** + * 鏌ヨ璇峰亣绠$悊璇︽儏 + * + * @param id 璇峰亣绠$悊璇︽儏涓婚敭 + * @return 璇峰亣绠$悊璇︽儏 + */ + public RzLeaveDetail selectRzLeaveDetailById(Long id); + + /** + * 鏌ヨ璇峰亣绠$悊璇︽儏鍒楄〃 + * + * @param rzLeaveDetail 璇峰亣绠$悊璇︽儏 + * @return 璇峰亣绠$悊璇︽儏闆嗗悎 + */ + public List selectRzLeaveDetailList(RzLeaveDetail rzLeaveDetail); + + /** + * 鏂板璇峰亣绠$悊璇︽儏 + * + * @param rzLeaveDetail 璇峰亣绠$悊璇︽儏 + * @return 缁撴灉 + */ + public AjaxResult insertRzLeaveDetail(RzLeaveDetail rzLeaveDetail); + + /** + * 淇敼璇峰亣绠$悊璇︽儏 + * + * @param rzLeaveDetail 璇峰亣绠$悊璇︽儏 + * @return 缁撴灉 + */ + public AjaxResult updateRzLeaveDetail(RzLeaveDetail rzLeaveDetail); + + /** + * 鏍规嵁ID鍒犻櫎鏁版嵁 + * @param id + * @return + */ + public AjaxResult deleteRzLeaveDetailById(Long id); +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzLeaveService.java b/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzLeaveService.java new file mode 100644 index 0000000..8a68ac7 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzLeaveService.java @@ -0,0 +1,61 @@ +package com.evo.personnelMatters.service; + +import com.evo.common.core.domain.AjaxResult; +import com.evo.personnelMatters.domain.RzLeave; +import com.evo.personnelMatters.domain.RzLeaveDetail; +import java.util.List; + +/** + * 璇峰亣绠$悊Service鎺ュ彛 + * + * @author chenyj + * @date 2024-08-03 + */ +public interface IRzLeaveService +{ + /** + * 鏌ヨ璇峰亣绠$悊 + * + * @param id 璇峰亣绠$悊涓婚敭 + * @return 璇峰亣绠$悊 + */ + public RzLeave selectRzLeaveById(Long id); + + /** + * 鏌ヨ璇峰亣绠$悊鍒楄〃 + * + * @param rzLeave 璇峰亣绠$悊 + * @return 璇峰亣绠$悊闆嗗悎 + */ + public List selectRzLeaveList(RzLeave rzLeave); + + /** + * 鏂板璇峰亣绠$悊 + * + * @param rzLeave 璇峰亣绠$悊 + * @return 缁撴灉 + */ + public AjaxResult insertRzLeave(RzLeave rzLeave); + + /** + * 淇敼璇峰亣绠$悊 + * + * @param rzLeave 璇峰亣绠$悊 + * @return 缁撴灉 + */ + public AjaxResult updateRzLeave(RzLeave rzLeave); + /** + * 鍒犻櫎璇峰亣绠$悊 + * + * @return 缁撴灉 + */ + public AjaxResult deleteRzLeave(Long id,String name); + + /** + * 鏌ヨ鍛樺伐璇峰亣璇︽儏 + * @param rzLeave + * @return + */ + public List listLeaveDetails(RzLeave rzLeave); + +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzOverTimeDetailService.java b/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzOverTimeDetailService.java new file mode 100644 index 0000000..f28c8e3 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzOverTimeDetailService.java @@ -0,0 +1,55 @@ +package com.evo.personnelMatters.service; + +import com.evo.common.core.domain.AjaxResult; +import com.evo.personnelMatters.domain.RzOverTimeDetail; + +import java.util.List; + +/** + * 鍔犵彮璇︽儏Service鎺ュ彛 + * + * @author chenyj + * @date 2024-09-09 + */ +public interface IRzOverTimeDetailService +{ + /** + * 鏌ヨ鍔犵彮璇︽儏 + * + * @param id 鍔犵彮璇︽儏涓婚敭 + * @return 鍔犵彮璇︽儏 + */ + public RzOverTimeDetail selectRzOverTimeDetailById(Long id); + + /** + * 鏌ヨ鍔犵彮璇︽儏鍒楄〃 + * + * @param rzOverTimeDetail 鍔犵彮璇︽儏 + * @return 鍔犵彮璇︽儏闆嗗悎 + */ + public List selectRzOverTimeDetailList(RzOverTimeDetail rzOverTimeDetail); + + /** + * 鏂板鍔犵彮璇︽儏 + * + * @param rzOverTimeDetail 鍔犵彮璇︽儏 + * @return 缁撴灉 + */ + public AjaxResult insertRzOverTimeDetail(RzOverTimeDetail rzOverTimeDetail); + + /** + * 淇敼鍔犵彮璇︽儏 + * + * @param rzOverTimeDetail 鍔犵彮璇︽儏 + * @return 缁撴灉 + */ + public AjaxResult updateRzOverTimeDetail(RzOverTimeDetail rzOverTimeDetail); + + /** + * 鍒犻櫎鍔犵彮璇︽儏淇℃伅 + * + * @param id 鍔犵彮璇︽儏涓婚敭 + * @return 缁撴灉 + */ + public AjaxResult deleteRzOverTimeDetailById(Long id); +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzOverTimeService.java b/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzOverTimeService.java new file mode 100644 index 0000000..fee067e --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzOverTimeService.java @@ -0,0 +1,63 @@ +package com.evo.personnelMatters.service; + +import com.evo.common.core.domain.AjaxResult; +import com.evo.personnelMatters.domain.RzOverTime; +import com.evo.personnelMatters.domain.RzOverTimeDetail; + +import java.util.List; + +/** + * 鍔犵彮绠$悊Service鎺ュ彛 + * + * @author chenyj + * @date 2024-09-03 + */ +public interface IRzOverTimeService +{ + /** + * 鏌ヨ鍔犵彮绠$悊 + * + * @param id 鍔犵彮绠$悊涓婚敭 + * @return 鍔犵彮绠$悊 + */ + public RzOverTime selectRzOverTimeById(Long id); + + /** + * 鏌ヨ鍔犵彮绠$悊鍒楄〃 + * + * @param rzOverTime 鍔犵彮绠$悊 + * @return 鍔犵彮绠$悊闆嗗悎 + */ + public List selectRzOverTimeList(RzOverTime rzOverTime); + + /** + * 鏂板鍔犵彮绠$悊 + * + * @param rzOverTime 鍔犵彮绠$悊 + * @return 缁撴灉 + */ + public AjaxResult insertRzOverTime(RzOverTime rzOverTime); + + /** + * 淇敼鍔犵彮绠$悊 + * + * @param rzOverTime 鍔犵彮绠$悊 + * @return 缁撴灉 + */ + public int updateRzOverTime(RzOverTime rzOverTime); + + /** + * 鍒犻櫎鍔犵彮绠$悊淇℃伅 + * + * @param id 鍔犵彮绠$悊涓婚敭 + * @return 缁撴灉 + */ + public AjaxResult deleteRzOverTimeById(Long id); + + /** + * 鏌ヨ鍛樺伐鐨勫姞鐝鎯 + * @param rzOverTime + * @return + */ + public List selectRzOverTimeDetailListByUserIdAndMonth(RzOverTime rzOverTime); +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzSubsidyService.java b/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzSubsidyService.java new file mode 100644 index 0000000..fd2331c --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/service/IRzSubsidyService.java @@ -0,0 +1,54 @@ +package com.evo.personnelMatters.service; + +import com.evo.common.core.domain.AjaxResult; +import com.evo.personnelMatters.domain.RzSubsidy; +import java.util.List; + +/** + * 琛ュ姪绠$悊Service鎺ュ彛 + * + * @author chenyj + * @date 2024-08-27 + */ +public interface IRzSubsidyService +{ + /** + * 鏌ヨ琛ュ姪绠$悊 + * + * @param id 琛ュ姪绠$悊涓婚敭 + * @return 琛ュ姪绠$悊 + */ + public RzSubsidy selectRzSubsidyById(Long id); + + /** + * 鏌ヨ琛ュ姪绠$悊鍒楄〃 + * + * @param rzSubsidy 琛ュ姪绠$悊 + * @return 琛ュ姪绠$悊闆嗗悎 + */ + public List selectRzSubsidyList(RzSubsidy rzSubsidy); + + /** + * 鏂板琛ュ姪绠$悊 + * + * @param rzSubsidy 琛ュ姪绠$悊 + * @return 缁撴灉 + */ + public AjaxResult insertRzSubsidy(RzSubsidy rzSubsidy); + + /** + * 淇敼琛ュ姪绠$悊 + * + * @param rzSubsidy 琛ュ姪绠$悊 + * @return 缁撴灉 + */ + public int updateRzSubsidy(RzSubsidy rzSubsidy); + + /** + * 鍒犻櫎琛ュ姪绠$悊淇℃伅 + * + * @param id 琛ュ姪绠$悊涓婚敭 + * @return 缁撴灉 + */ + public int deleteRzSubsidyById(Long id); +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/service/SpecialOverTimeService.java b/evo-admin/src/main/java/com/evo/personnelMatters/service/SpecialOverTimeService.java new file mode 100644 index 0000000..72febd4 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/service/SpecialOverTimeService.java @@ -0,0 +1,48 @@ +package com.evo.personnelMatters.service; + +import com.evo.common.core.domain.AjaxResult; +import com.evo.personnelMatters.domain.EqOverStaff; +import com.evo.personnelMatters.domain.SpecialOverTime; +import java.util.List; + +public interface SpecialOverTimeService { + + public SpecialOverTime selectSpecialOverTimeById(); + + public AjaxResult addSpecialOverTime(SpecialOverTime specialOverTime); + + public List selectEqOverStaffList(EqOverStaff eqOverStaff); + + /** + * 鏌ヨ鐓х墖绠$悊 + * + * @param id 鐓х墖绠$悊涓婚敭 + * @return 鐓х墖绠$悊 + */ + public EqOverStaff selectEqOverStaffById(Long id); + + /** + * 鏂板鐓х墖绠$悊 + * + * @param eqOverStaff 鐓х墖绠$悊 + * @return 缁撴灉 + */ + public int insertEqOverStaff(EqOverStaff eqOverStaff); + + /** + * 淇敼鐓х墖绠$悊 + * + * @param eqOverStaff 鐓х墖绠$悊 + * @return 缁撴灉 + */ + public int updateEqOverStaff(EqOverStaff eqOverStaff); + + /** + * 鍒犻櫎鐓х墖绠$悊淇℃伅 + * + * @param id 鐓х墖绠$悊涓婚敭 + * @return 缁撴灉 + */ + public int deleteEqOverStaffById(Long id); + +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzBusinessTripDetailServiceImpl.java b/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzBusinessTripDetailServiceImpl.java new file mode 100644 index 0000000..e1ef1d9 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzBusinessTripDetailServiceImpl.java @@ -0,0 +1,189 @@ +package com.evo.personnelMatters.service.impl; + +import com.evo.attendance.mapper.RzAttendanceStatisticalMapper; +import com.evo.common.constant.Constants; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.SecurityUtils; +import com.evo.personnelMatters.domain.RzBusinessTrip; +import com.evo.personnelMatters.domain.RzHoliday; +import com.evo.personnelMatters.domain.RzBusinessTripDetail; +import com.evo.personnelMatters.mapper.RzBusinessTripMapper; +import com.evo.personnelMatters.mapper.RzHolidayMapper; +import com.evo.personnelMatters.mapper.RzBusinessTripDetailMapper; +import com.evo.personnelMatters.service.IRzBusinessTripDetailService; +import com.evo.utils.DateUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.List; + +/** + * 鍑哄樊璇︽儏Service涓氬姟灞傚鐞 + * + * @author chenyj + * @date 2024-09-04 + */ +@Service +public class RzBusinessTripDetailServiceImpl implements IRzBusinessTripDetailService +{ + @Resource + private RzBusinessTripDetailMapper rzTripDetailMapper; + @Resource + private RzBusinessTripMapper rzBusinessTripMapper; //鍑哄樊姹囨 + @Resource + private RzHolidayMapper rzHolidayMapper; //鍋囨湡绠$悊 + @Resource + private RzAttendanceStatisticalMapper rzAttendanceStatisticalMapper; //鎵撳崱缁熻 + /** + * 鏌ヨ鍑哄樊璇︽儏 + * + * @param id 鍑哄樊璇︽儏涓婚敭 + * @return 鍑哄樊璇︽儏 + */ + @Override + public RzBusinessTripDetail selectRzTripDetailById(Long id) + { + return rzTripDetailMapper.selectRzTripDetailById(id); + } + + /** + * 鏌ヨ鍑哄樊璇︽儏鍒楄〃 + * + * @param rzTripDetail 鍑哄樊璇︽儏 + * @return 鍑哄樊璇︽儏 + */ + @Override + public List selectRzTripDetailList(RzBusinessTripDetail rzTripDetail) + { + return rzTripDetailMapper.selectRzTripDetailList(rzTripDetail); + } + + /** + * 鏂板鍑哄樊璇︽儏 + * + * @param rzTripDetail 鍑哄樊璇︽儏 + * @return 缁撴灉 + */ + @Override + @Transactional + public AjaxResult insertRzTripDetail(RzBusinessTripDetail rzTripDetail) + { + //鍒ゆ柇璇峰亣鏃堕棿 + if(rzTripDetail.getTripStartTime().getTime() > rzTripDetail.getTripEndTime().getTime()){ + return AjaxResult.error(); + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); + //鍒ゆ柇璇峰亣寮濮嬶紝缁撴潫鏃堕棿鏄惁鍦ㄥ悓涓涓湀锛屼笉鍚屾湀鎻愮ず + if(!sdf.format(rzTripDetail.getTripStartTime()).equals(sdf.format(rzTripDetail.getTripEndTime()))){ + return AjaxResult.error(); + } + //鍒ゆ柇鍑哄樊鏃堕棿宸寘鍚嚑涓懆鏃 + int zr = DateUtil.isWeeked(rzTripDetail.getTripStartTime(),rzTripDetail.getTripEndTime(),1); + //鍒ゆ柇鏄惁鍖呭惈鑺傚亣鏃 + List h_list = rzHolidayMapper.selectRzHolidayList(null); + for (RzHoliday rzHoliday : h_list) { + if(rzHoliday.getHoliday().after(rzTripDetail.getTripStartTime()) && rzHoliday.getHoliday().before(rzTripDetail.getTripEndTime())){ + if(rzHoliday.getSpecialFlag().equals(Constants.DELETE_FLAG_1)){ + zr -= 1; + }else{ + zr += 1; + } + } + } + // 鍑哄樊澶╂暟鐨勮绠 + Long ts = (rzTripDetail.getTripEndTime().getTime() - rzTripDetail.getTripStartTime().getTime())/1000/60/60/24 + 1; + rzTripDetail.setTripDay(ts); + rzTripDetail.setCreateTime(DateUtils.getNowDate()); + rzTripDetail.setCreateBy(SecurityUtils.getUsername()); + rzTripDetail.setOverDays(Long.parseLong(zr+"")); + rzTripDetail.setDelFlag(Constants.DELETE_FLAG_0); + int i = rzTripDetailMapper.insertRzTripDetail(rzTripDetail); + if(i < 1){ + return AjaxResult.error(); + } + //鍙嶅啓鍑哄樊鎬绘椂闀 TODO + RzBusinessTrip rzBusinessTrip = rzBusinessTripMapper.selectRzBusinessTripById(rzTripDetail.getTripId()); + rzBusinessTrip.setTripDays(rzBusinessTrip.getTripDays() + ts); + rzBusinessTrip.setOverDays(rzBusinessTrip.getOverDays() + zr); + i = rzBusinessTripMapper.updateRzBusinessTrip(rzBusinessTrip); + if(i < 1){ + return AjaxResult.error(); + } + return AjaxResult.success(); + } + + /** + * 淇敼鍑哄樊璇︽儏 + * + * @param rzTripDetail 鍑哄樊璇︽儏 + * @return 缁撴灉 + */ + @Override + @Transactional + public AjaxResult updateRzTripDetail(RzBusinessTripDetail rzTripDetail) + { + //鍒ゆ柇鍑哄樊鏃堕棿宸寘鍚嚑涓懆鏃 + int zr = DateUtil.isWeeked(rzTripDetail.getTripStartTime(),rzTripDetail.getTripEndTime(),1); + //鍒ゆ柇鏄惁鍖呭惈鑺傚亣鏃 + List h_list = rzHolidayMapper.selectRzHolidayList(null); + for (RzHoliday rzHoliday : h_list) { + if(rzHoliday.getHoliday().after(rzTripDetail.getTripStartTime()) && rzHoliday.getHoliday().before(rzTripDetail.getTripEndTime())){ + if(rzHoliday.getSpecialFlag().equals(Constants.DELETE_FLAG_1)){ + zr -= 1; + }else{ + zr += 1; + } + } + } + // 鍑哄樊澶╂暟鐨勮绠 + Long ts = (rzTripDetail.getTripEndTime().getTime() - rzTripDetail.getTripStartTime().getTime())/1000/60/60/24 + 1; + //鍙嶅啓鍑哄樊鎬绘椂闀 TODO + RzBusinessTrip rzBusinessTrip = rzBusinessTripMapper.selectRzBusinessTripById(rzTripDetail.getTripId()); + rzBusinessTrip.setTripDays(rzBusinessTrip.getTripDays() + ts - rzTripDetail.getTripDay()); + rzBusinessTrip.setOverDays(rzBusinessTrip.getOverDays() + Long.parseLong(zr+"") - rzTripDetail.getOverDays()); + int i = rzBusinessTripMapper.updateRzBusinessTrip(rzBusinessTrip); + if(i < 1){ + return AjaxResult.error(); + } + rzTripDetail.setOverDays(Long.parseLong(zr+"")); + rzTripDetail.setTripDay(ts); + rzTripDetail.setUpdateTime(DateUtils.getNowDate()); + rzTripDetail.setUpdateBy(SecurityUtils.getUsername()); + i= rzTripDetailMapper.updateRzTripDetail(rzTripDetail); + if(i < 1){ + return AjaxResult.error(); + } + return AjaxResult.success(); + } + + /** + * 鍒犻櫎鍑哄樊璇︽儏淇℃伅 + * + * @param id 鍑哄樊璇︽儏涓婚敭 + * @return 缁撴灉 + */ + @Override + @Transactional + public AjaxResult deleteRzTripDetailById(Long id) + { + RzBusinessTripDetail rzTripDetail = rzTripDetailMapper.selectRzTripDetailById(id); + //鏌ヨ鎬绘椂闀匡紝淇敼鍑哄樊鎬绘椂闀 + RzBusinessTrip rzBusinessTrip = rzBusinessTripMapper.selectRzBusinessTripById(rzTripDetail.getTripId()); + rzBusinessTrip.setTripDays(rzBusinessTrip.getTripDays() - rzTripDetail.getTripDay()); + rzBusinessTrip.setOverDays(rzBusinessTrip.getOverDays() - rzTripDetail.getOverDays()); + int i = rzBusinessTripMapper.updateRzBusinessTrip(rzBusinessTrip); + if(i < 1){ + return AjaxResult.error(); + } + rzTripDetail.setDelFlag(Constants.DELETE_FLAG_1); + rzTripDetail.setUpdateTime(DateUtils.getNowDate()); + rzTripDetail.setUpdateBy(SecurityUtils.getUsername()); + i= rzTripDetailMapper.updateRzTripDetail(rzTripDetail); + if(i < 1){ + return AjaxResult.error(); + } + return AjaxResult.success(); + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzBusinessTripServiceImpl.java b/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzBusinessTripServiceImpl.java new file mode 100644 index 0000000..6410b1f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzBusinessTripServiceImpl.java @@ -0,0 +1,127 @@ +package com.evo.personnelMatters.service.impl; + +import com.evo.common.annotation.DataScope; +import com.evo.common.constant.Constants; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.personnelMatters.domain.RzBusinessTrip; +import com.evo.personnelMatters.mapper.RzBusinessTripMapper; +import com.evo.personnelMatters.service.IRzBusinessTripService; +import com.evo.system.domain.SysStaff; +import com.evo.system.mapper.SysDeptMapper; +import com.evo.system.mapper.SysStaffMapper; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.List; + +/** + * 鍑哄樊绠$悊Service涓氬姟灞傚鐞 + * + * @author chenyj + * @date 2024-08-30 + */ +@Service +public class RzBusinessTripServiceImpl implements IRzBusinessTripService +{ + @Resource + private RzBusinessTripMapper rzBusinessTripMapper; + @Resource + private SysStaffMapper sysStaffMapper; //鍛樺伐淇℃伅 + @Resource + private SysDeptMapper deptMapper; //閮ㄩ棬 + + /** + * 鏌ヨ鍑哄樊绠$悊 + * + * @param id 鍑哄樊绠$悊涓婚敭 + * @return 鍑哄樊绠$悊 + */ + @Override + public RzBusinessTrip selectRzBusinessTripById(Long id) + { + return rzBusinessTripMapper.selectRzBusinessTripById(id); + } + + /** + * 鏌ヨ鍑哄樊绠$悊鍒楄〃 + * + * @param rzBusinessTrip 鍑哄樊绠$悊 + * @return 鍑哄樊绠$悊 + */ + @Override + @DataScope(deptAlias = "d") + public List selectRzBusinessTripList(RzBusinessTrip rzBusinessTrip) + { + List res_list = rzBusinessTripMapper.selectRzBusinessTripList(rzBusinessTrip); + for (RzBusinessTrip businessTrip : res_list) { + businessTrip.setDeptName(deptMapper.selectDeptById(businessTrip.getDeptId()).getDeptName()); + } + return res_list; + } + + /** + * 鏂板鍑哄樊绠$悊 + * + * @param rzBusinessTrip 鍑哄樊绠$悊 + * @return 缁撴灉 + */ + @Override + public AjaxResult insertRzBusinessTrip(RzBusinessTrip rzBusinessTrip) + { + List judgeList = rzBusinessTripMapper.selectRzBusinessTripList(rzBusinessTrip); + if(StringUtils.isNotNull(judgeList) && judgeList.size() > 0){ + return AjaxResult.error(); + } + //鏍规嵁鍛樺伐id鏌ヨ鍛樺伐鍚嶇О + SysStaff sysStaff = sysStaffMapper.selectSysStaffByUserId(rzBusinessTrip.getUserId()); + rzBusinessTrip.setName(sysStaff.getName()); + rzBusinessTrip.setUserId(sysStaff.getUserId()); + rzBusinessTrip.setCreateTime(DateUtils.getNowDate()); + rzBusinessTrip.setCreateBy(SecurityUtils.getUsername()); + rzBusinessTrip.setDelFlag(Constants.DELETE_FLAG_0); + int i = rzBusinessTripMapper.insertRzBusinessTrip(rzBusinessTrip); + if(i < 1){ + return AjaxResult.error(); + } + return AjaxResult.success(); + } + + /** + * 淇敼鍑哄樊绠$悊 + * + * @param rzBusinessTrip 鍑哄樊绠$悊 + * @return 缁撴灉 + */ + @Override + public int updateRzBusinessTrip(RzBusinessTrip rzBusinessTrip) + { + rzBusinessTrip.setUpdateBy(SecurityUtils.getUsername()); + rzBusinessTrip.setUpdateTime(DateUtils.getNowDate()); + return rzBusinessTripMapper.updateRzBusinessTrip(rzBusinessTrip); + } + + /** + * 鍒犻櫎鍑哄樊绠$悊淇℃伅 + * + * @param id 鍑哄樊绠$悊涓婚敭 + * @return 缁撴灉 + */ + @Override + public AjaxResult deleteRzBusinessTripById(Long id) + { + RzBusinessTrip rzBusinessTrip = rzBusinessTripMapper.selectRzBusinessTripById(id); + if(rzBusinessTrip.getTripDays().longValue() > 0){ + return AjaxResult.error("鏈夊嚭宸鎯咃紝涓嶈兘鍒犻櫎锛"); + } + rzBusinessTrip.setUpdateBy(SecurityUtils.getUsername()); + rzBusinessTrip.setUpdateTime(DateUtils.getNowDate()); + rzBusinessTrip.setDelFlag(Constants.DELETE_FLAG_1); + int i = rzBusinessTripMapper.updateRzBusinessTrip(rzBusinessTrip); + if(i < 1){ + return AjaxResult.error(); + } + return AjaxResult.success(); + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzHolidayServiceImpl.java b/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzHolidayServiceImpl.java new file mode 100644 index 0000000..ee1a2d1 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzHolidayServiceImpl.java @@ -0,0 +1,102 @@ +package com.evo.personnelMatters.service.impl; + +import com.evo.common.constant.Constants; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.personnelMatters.domain.RzHoliday; +import com.evo.personnelMatters.mapper.RzHolidayMapper; +import com.evo.personnelMatters.service.IRzHolidayService; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.List; + +/** + * 鍋囨湡绠$悊Service涓氬姟灞傚鐞 + * + * @author chenyj + * @date 2024-08-03 + */ +@Service +public class RzHolidayServiceImpl implements IRzHolidayService +{ + @Resource + private RzHolidayMapper rzHolidayMapper; + + /** + * 鏌ヨ鍋囨湡绠$悊 + * + * @param id 鍋囨湡绠$悊涓婚敭 + * @return 鍋囨湡绠$悊 + */ + @Override + public RzHoliday selectRzHolidayById(Long id) + { + return rzHolidayMapper.selectRzHolidayById(id); + } + + /** + * 鏌ヨ鍋囨湡绠$悊鍒楄〃 + * + * @param rzHoliday 鍋囨湡绠$悊 + * @return 鍋囨湡绠$悊 + */ + @Override + public List selectRzHolidayList(RzHoliday rzHoliday) + { + return rzHolidayMapper.selectRzHolidayList(rzHoliday); + } + + /** + * 鏂板鍋囨湡绠$悊 + * + * @param rzHoliday 鍋囨湡绠$悊 + * @return 缁撴灉 + */ + @Override + public AjaxResult insertRzHoliday(RzHoliday rzHoliday) + { + List list = rzHolidayMapper.selectRzHolidayList(rzHoliday); + if(StringUtils.isNotNull(list) && list.size() > 0){ + return AjaxResult.error(); + } + rzHoliday.setCreateTime(DateUtils.getNowDate()); + rzHoliday.setCreateBy(SecurityUtils.getUsername()); + rzHoliday.setDelFlag(Constants.DELETE_FLAG_0); + int i = rzHolidayMapper.insertRzHoliday(rzHoliday); + if(i < 1){ + AjaxResult.error(); + } + return AjaxResult.success(); + } + + /** + * 淇敼鍋囨湡绠$悊 + * + * @param rzHoliday 鍋囨湡绠$悊 + * @return 缁撴灉 + */ + @Override + public int updateRzHoliday(RzHoliday rzHoliday) + { + rzHoliday.setUpdateTime(DateUtils.getNowDate()); + rzHoliday.setUpdateBy(SecurityUtils.getUsername()); + return rzHolidayMapper.updateRzHoliday(rzHoliday); + } + + /** + * 鍒犻櫎鏁版嵁 + * @param id + * @param oprName + * @return + */ + @Override + public int deleteRzHoliday(Long id,String oprName){ + RzHoliday rzHoliday = rzHolidayMapper.selectRzHolidayById(id); + rzHoliday.setDelFlag(Constants.DELETE_FLAG_1); + rzHoliday.setUpdateBy(SecurityUtils.getUsername()); + rzHoliday.setUpdateTime(DateUtils.getNowDate()); + return updateRzHoliday(rzHoliday); + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzInterviewerServiceImpl.java b/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzInterviewerServiceImpl.java new file mode 100644 index 0000000..f7cfb3f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzInterviewerServiceImpl.java @@ -0,0 +1,92 @@ +package com.evo.personnelMatters.service.impl; + +import com.evo.common.constant.Constants; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.SecurityUtils; +import com.evo.personnelMatters.domain.RzInterviewer; +import com.evo.personnelMatters.mapper.RzInterviewerMapper; +import com.evo.personnelMatters.service.IRzInterviewerService; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.List; + +/** + * 闈㈣瘯淇℃伅Service涓氬姟灞傚鐞 + * + * @author chenyj + * @date 2024-09-07 + */ +@Service +public class RzInterviewerServiceImpl implements IRzInterviewerService +{ + @Resource + private RzInterviewerMapper rzInterviewerMapper; + + /** + * 鏌ヨ闈㈣瘯淇℃伅 + * + * @param id 闈㈣瘯淇℃伅涓婚敭 + * @return 闈㈣瘯淇℃伅 + */ + @Override + public RzInterviewer selectRzInterviewerById(Long id) + { + return rzInterviewerMapper.selectRzInterviewerById(id); + } + + /** + * 鏌ヨ闈㈣瘯淇℃伅鍒楄〃 + * + * @param rzInterviewer 闈㈣瘯淇℃伅 + * @return 闈㈣瘯淇℃伅 + */ + @Override + public List selectRzInterviewerList(RzInterviewer rzInterviewer) + { + return rzInterviewerMapper.selectRzInterviewerList(rzInterviewer); + } + + /** + * 鏂板闈㈣瘯淇℃伅 + * + * @param rzInterviewer 闈㈣瘯淇℃伅 + * @return 缁撴灉 + */ + @Override + public int insertRzInterviewer(RzInterviewer rzInterviewer) + { + rzInterviewer.setYtFlag("鍚"); + rzInterviewer.setCreateBy(SecurityUtils.getUsername()); + rzInterviewer.setCreateTime(DateUtils.getNowDate()); + rzInterviewer.setDelFlag(Constants.DELETE_FLAG_0); + return rzInterviewerMapper.insertRzInterviewer(rzInterviewer); + } + + /** + * 淇敼闈㈣瘯淇℃伅 + * + * @param rzInterviewer 闈㈣瘯淇℃伅 + * @return 缁撴灉 + */ + @Override + public int updateRzInterviewer(RzInterviewer rzInterviewer) + { + rzInterviewer.setUpdateBy(SecurityUtils.getUsername()); + rzInterviewer.setUpdateTime(DateUtils.getNowDate()); + return rzInterviewerMapper.updateRzInterviewer(rzInterviewer); + } + + /** + * 鍒犻櫎闈㈣瘯淇℃伅淇℃伅 + * + * @param id 闈㈣瘯淇℃伅涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteRzInterviewerById(Long id) + { + RzInterviewer rzInterviewer = rzInterviewerMapper.selectRzInterviewerById(id); + rzInterviewer.setDelFlag(Constants.DELETE_FLAG_1); + return updateRzInterviewer(rzInterviewer); + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzLeaveDetailServiceImpl.java b/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzLeaveDetailServiceImpl.java new file mode 100644 index 0000000..e6f6db6 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzLeaveDetailServiceImpl.java @@ -0,0 +1,293 @@ +package com.evo.personnelMatters.service.impl; + +import com.evo.attendance.domain.RzAttendanceStatistical; +import com.evo.attendance.mapper.RzAttendanceStatisticalMapper; +import com.evo.common.constant.Constants; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.personnelMatters.domain.*; +import com.evo.personnelMatters.mapper.*; +import com.evo.personnelMatters.service.IRzLeaveDetailService; +import com.evo.utils.DateUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +/** + * 璇峰亣绠$悊璇︽儏Service涓氬姟灞傚鐞 + * + * @author chenyj + * @date 2024-08-03 + */ +@Service +public class RzLeaveDetailServiceImpl implements IRzLeaveDetailService +{ + @Resource + private RzLeaveDetailMapper rzLeaveDetailMapper; + @Resource + private RzLeaveMapper rzLeaveMapper; //璇峰亣姹囨 + @Resource + private RzBusinessTripMapper rzBusinessTripMapper; //鍑哄樊 + @Resource + private RzAttendanceStatisticalMapper rzAttendanceStatisticalMapper; //鎵撳崱缁熻 + /** + * 鏌ヨ璇峰亣绠$悊璇︽儏 + * + * @param id 璇峰亣绠$悊璇︽儏涓婚敭 + * @return 璇峰亣绠$悊璇︽儏 + */ + @Override + public RzLeaveDetail selectRzLeaveDetailById(Long id) + { + return rzLeaveDetailMapper.selectRzLeaveDetailById(id); + } + + /** + * 鏌ヨ璇峰亣绠$悊璇︽儏鍒楄〃 + * + * @param rzLeaveDetail 璇峰亣绠$悊璇︽儏 + * @return 璇峰亣绠$悊璇︽儏 + */ + @Override + public List selectRzLeaveDetailList(RzLeaveDetail rzLeaveDetail) + { + return rzLeaveDetailMapper.selectRzLeaveDetailList(rzLeaveDetail); + } + + /** + * 鏂板璇峰亣绠$悊璇︽儏 + * + * @param rzLeaveDetail 璇峰亣绠$悊璇︽儏 + * @return 缁撴灉 + */ + @Override + @Transactional + public AjaxResult insertRzLeaveDetail(RzLeaveDetail rzLeaveDetail) + { + //鍒ゆ柇璇峰亣鏃堕棿 + if(rzLeaveDetail.getLeaveStartTime().getTime() > rzLeaveDetail.getLeaveEndTime().getTime()){ + return AjaxResult.error("璇峰亣寮濮嬫椂闂翠笉鑳芥棭浜庣粨鏉熸椂闂达紒锛"); + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); + //鍒ゆ柇璇峰亣寮濮嬶紝缁撴潫鏃堕棿鏄惁鍦ㄥ悓涓涓湀锛屼笉鍚屾湀鎻愮ず + if(!sdf.format(rzLeaveDetail.getLeaveStartTime()).equals(sdf.format(rzLeaveDetail.getLeaveEndTime()))){ + return AjaxResult.error("璇峰亣鏃堕棿涓嶈兘璺ㄦ湀锛侊紒"); + } + //鏍规嵁鍛樺伐濮撳悕鏌ヨ + RzLeave rzLeave = rzLeaveMapper.selectRzLeaveById(rzLeaveDetail.getLeaveId()); + //璁$畻璇峰亣鏃堕暱 + Long i = DateUtil.dateUtil.autoLeavehoursForCount(rzLeaveDetail.getLeaveStartTime(),rzLeaveDetail.getLeaveEndTime(),rzLeaveDetail.getType()); + rzLeaveDetail.setLeaveHour(i.intValue()); + rzLeaveDetail.setCreateTime(DateUtils.getNowDate()); + rzLeaveDetail.setCreateBy(SecurityUtils.getUsername()); + rzLeaveDetail.setDelFlag(Constants.DELETE_FLAG_0); + int r = rzLeaveDetailMapper.insertRzLeaveDetail(rzLeaveDetail); + if(r < 1){ + return AjaxResult.error(); + } + switch (rzLeaveDetail.getType()){ + case "2": + rzLeave.setSickHours(rzLeave.getSickHours() + i.intValue()); + break; + case "3": + rzLeave.setAbsenceHours(rzLeave.getAbsenceHours() + i.intValue()); + break; + case "4": + rzLeave.setAnnualHours(rzLeave.getAnnualHours() + i.intValue()); + break; + case "5": + boolean flag = autoLeavedNumber(rzLeave.getUserId(),rzLeaveDetail.getLeaveStartTime(),i); + if(flag){ + rzLeave.setCompensatoryHours(rzLeave.getCompensatoryHours() + i.intValue()); + }else{ + return AjaxResult.error("娌℃湁璋冧紤鏃堕棿锛侊紒"); + } + break; + case "6": + rzLeave.setMarriageHours(rzLeave.getMarriageHours() + i.intValue()); + break; + case "7": + rzLeave.setMaternityHours(rzLeave.getMaternityHours() + i.intValue()); + break; + case "8": + rzLeave.setPaternityHours(rzLeave.getPaternityHours() + i.intValue()); + break; + case "9": + rzLeave.setFuneralHours(rzLeave.getFuneralHours() + i.intValue()); + break; + case "10": + rzLeave.setWorkHours(rzLeave.getWorkHours() + i.intValue()); + break; + } + r = rzLeaveMapper.updateRzLeave(rzLeave); + if(r < 1){ + return AjaxResult.error(); + } + //鍙嶅啓鑰冨嫟姹囨 + RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzLeave.getUserId(),rzLeave.getLeaveDate()); + rzAttendanceStatistical.setAbsenteeism(new BigDecimal(rzLeave.getWorkHours() + rzLeave.getFuneralHours() + rzLeave.getPaternityHours() + rzLeave.getMaternityHours() + + rzLeave.getMarriageHours() + rzLeave.getCompensatoryHours() + rzLeave.getAnnualHours() + rzLeave.getAbsenceHours() + rzLeave.getSickHours())); + r = rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical); + if(r < 1){ + return AjaxResult.error(); + } + return AjaxResult.success(); + } + + /** + * 鏍规嵁鐢ㄦ埛ID鍙婃椂闂达紝璋冧紤鏃堕棿鍒ゆ柇鍛樺伐鏄惁鍙互璋冧紤 + * @param staffId 鍛樺伐ID + * @param date 璇峰亣鏈堜唤 + * @param hours 璇峰亣鏃堕暱 + * @return + */ + private boolean autoLeavedNumber(Long staffId, Date date,Long hours){ + //鍏堟煡璇㈠嚭宸槸鍚︽湁鍔犵彮 + RzBusinessTrip RzBusinessTrip = rzBusinessTripMapper.selectRzBusinessTripListByMonth(staffId,date); + //鍑哄樊鏈夊姞鐝笖璋冧紤鏃堕棿澶燂紝鍒欏彲浠ヨ皟浼 + if(StringUtils.isNotNull(RzBusinessTrip) && RzBusinessTrip.getOverDays() * 8 >= hours){ + RzBusinessTrip.setOverDays((RzBusinessTrip.getOverDays() * 8 - hours)/8); + rzBusinessTripMapper.updateRzBusinessTrip(RzBusinessTrip); + return true; + } + return false; + } + + /** + * 淇敼璇峰亣绠$悊璇︽儏 + * + * @param rzLeaveDetail 璇峰亣绠$悊璇︽儏 + * @return 缁撴灉 + */ + @Override + public AjaxResult updateRzLeaveDetail(RzLeaveDetail rzLeaveDetail) + { + //鏍规嵁ID鏌ヨ鍘熷璇峰亣灏忔椂鏁 + RzLeaveDetail leaveDetail = rzLeaveDetailMapper.selectRzLeaveDetailById(rzLeaveDetail.getId()); + Long i = DateUtil.dateUtil.autoLeavehoursForCount(rzLeaveDetail.getLeaveStartTime(),rzLeaveDetail.getLeaveEndTime(),rzLeaveDetail.getType()); + rzLeaveDetail.setLeaveHour(i.intValue()); + rzLeaveDetail.setUpdateBy(SecurityUtils.getUsername()); + rzLeaveDetail.setUpdateTime(DateUtils.getNowDate()); + int r = rzLeaveDetailMapper.updateRzLeaveDetail(rzLeaveDetail); + if(r < 1){ + return AjaxResult.error(); + } + //淇敼璇峰亣鎬绘椂闀 + RzLeave rzLeave = rzLeaveMapper.selectRzLeaveById(rzLeaveDetail.getLeaveId()); + //鍒ゆ柇璇峰亣绫诲瀷娌℃湁鍙樺寲 + if(leaveDetail.getType().equals(rzLeaveDetail.getType())){ + switch (rzLeaveDetail.getType()){ + case "2": + rzLeave.setSickHours(rzLeave.getSickHours() + i.intValue() - leaveDetail.getLeaveHour()); + break; + case "3": + rzLeave.setAbsenceHours(rzLeave.getAbsenceHours() + i.intValue() - leaveDetail.getLeaveHour()); + break; + case "4": + rzLeave.setAnnualHours(rzLeave.getAnnualHours() + i.intValue() - leaveDetail.getLeaveHour()); + break; + case "5": + rzLeave.setCompensatoryHours(rzLeave.getCompensatoryHours() + i.intValue() - leaveDetail.getLeaveHour()); + break; + case "6": + rzLeave.setMarriageHours(rzLeave.getMarriageHours() + i.intValue() - leaveDetail.getLeaveHour()); + break; + case "7": + rzLeave.setMaternityHours(rzLeave.getMaternityHours() + i.intValue() - leaveDetail.getLeaveHour()); + break; + case "8": + rzLeave.setPaternityHours(rzLeave.getPaternityHours() + i.intValue() - leaveDetail.getLeaveHour()); + break; + case "9": + rzLeave.setFuneralHours(rzLeave.getFuneralHours() + i.intValue() - leaveDetail.getLeaveHour()); + break; + case "10": + rzLeave.setWorkHours(rzLeave.getWorkHours() + i.intValue() - leaveDetail.getLeaveHour()); + break; + } + }else{ + + } + r = rzLeaveMapper.updateRzLeave(rzLeave); + if(r < 1){ + return AjaxResult.error(); + } + //鍙嶅啓鑰冨嫟姹囨 + RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzLeave.getUserId(),rzLeave.getLeaveDate()); + rzAttendanceStatistical.setAbsenteeism(new BigDecimal(rzLeave.getWorkHours() + rzLeave.getFuneralHours() + rzLeave.getPaternityHours() + rzLeave.getMaternityHours() + + rzLeave.getMarriageHours() + rzLeave.getCompensatoryHours() + rzLeave.getAnnualHours() + rzLeave.getAbsenceHours() + rzLeave.getSickHours())); + r = rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical); + if(r < 1){ + return AjaxResult.error(); + } + return AjaxResult.success(); + } + + /** + * 鏍规嵁ID鍒犻櫎鏁版嵁 + * @param id + * @return + */ + public AjaxResult deleteRzLeaveDetailById(Long id){ + RzLeaveDetail rzLeaveDetail = rzLeaveDetailMapper.selectRzLeaveDetailById(id); + rzLeaveDetail.setUpdateBy(SecurityUtils.getUsername()); + rzLeaveDetail.setUpdateTime(DateUtils.getNowDate()); + rzLeaveDetail.setDelFlag(Constants.DELETE_FLAG_1); + int r = rzLeaveDetailMapper.updateRzLeaveDetail(rzLeaveDetail); + if(r < 1){ + return AjaxResult.error(); + } + //鍑忓皯鎬绘椂闀 + RzLeave rzLeave = rzLeaveMapper.selectRzLeaveById(rzLeaveDetail.getLeaveId()); + switch (rzLeaveDetail.getType()){ + case "2": + rzLeave.setSickHours(rzLeave.getSickHours() - rzLeaveDetail.getLeaveHour()); + break; + case "3": + rzLeave.setAbsenceHours(rzLeave.getAbsenceHours() - rzLeaveDetail.getLeaveHour()); + break; + case "4": + rzLeave.setAnnualHours(rzLeave.getAnnualHours() - rzLeaveDetail.getLeaveHour()); + break; + case "5": + rzLeave.setCompensatoryHours(rzLeave.getCompensatoryHours() - rzLeaveDetail.getLeaveHour()); + break; + case "6": + rzLeave.setMarriageHours(rzLeave.getMarriageHours() - rzLeaveDetail.getLeaveHour()); + break; + case "7": + rzLeave.setMaternityHours(rzLeave.getMaternityHours() - rzLeaveDetail.getLeaveHour()); + break; + case "8": + rzLeave.setPaternityHours(rzLeave.getPaternityHours() - rzLeaveDetail.getLeaveHour()); + break; + case "9": + rzLeave.setFuneralHours(rzLeave.getFuneralHours() - rzLeaveDetail.getLeaveHour()); + break; + case "10": + rzLeave.setWorkHours(rzLeave.getWorkHours() - rzLeaveDetail.getLeaveHour()); + break; + } + r = rzLeaveMapper.updateRzLeave(rzLeave); + if(r < 1){ + return AjaxResult.error(); + } + //鍙嶅啓鑰冨嫟姹囨 + RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzLeave.getUserId(),rzLeave.getLeaveDate()); + rzAttendanceStatistical.setAbsenteeism(new BigDecimal(rzLeave.getWorkHours() + rzLeave.getFuneralHours() + rzLeave.getPaternityHours() + rzLeave.getMaternityHours() + + rzLeave.getMarriageHours() + rzLeave.getCompensatoryHours() + rzLeave.getAnnualHours() + rzLeave.getAbsenceHours() + rzLeave.getSickHours())); + r = rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical); + if(r < 1){ + return AjaxResult.error(); + } + return AjaxResult.success(); + } + + +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzLeaveServiceImpl.java b/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzLeaveServiceImpl.java new file mode 100644 index 0000000..c3390b2 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzLeaveServiceImpl.java @@ -0,0 +1,153 @@ +package com.evo.personnelMatters.service.impl; + +import com.evo.common.annotation.DataScope; +import com.evo.common.constant.Constants; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.personnelMatters.domain.RzLeave; +import com.evo.personnelMatters.domain.RzLeaveDetail; +import com.evo.personnelMatters.mapper.RzLeaveDetailMapper; +import com.evo.personnelMatters.mapper.RzLeaveMapper; +import com.evo.personnelMatters.service.IRzLeaveService; +import com.evo.system.domain.SysStaff; +import com.evo.system.mapper.SysDeptMapper; +import com.evo.system.mapper.SysStaffMapper; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +/** + * 璇峰亣绠$悊Service涓氬姟灞傚鐞 + * + * @author chenyj + * @date 2024-08-03 + */ +@Service +public class RzLeaveServiceImpl implements IRzLeaveService +{ + @Resource + private RzLeaveMapper rzLeaveMapper; + @Resource + private RzLeaveDetailMapper rzLeaveDetailMapper; //璇峰亣璇︽儏 + @Resource + private SysStaffMapper sysStaffMapper; //鍛樺伐淇℃伅 + @Resource + private SysDeptMapper deptMapper; //閮ㄩ棬 + /** + * 鏌ヨ璇峰亣绠$悊 + * + * @param id 璇峰亣绠$悊涓婚敭 + * @return 璇峰亣绠$悊 + */ + @Override + public RzLeave selectRzLeaveById(Long id) + { + return rzLeaveMapper.selectRzLeaveById(id); + } + + /** + * 鏌ヨ璇峰亣绠$悊鍒楄〃 + * + * @param rzLeave 璇峰亣绠$悊 + * @return 璇峰亣绠$悊 + */ + @Override + @DataScope(deptAlias = "d") + public List selectRzLeaveList(RzLeave rzLeave) + { + List res_list = rzLeaveMapper.selectRzLeaveList(rzLeave); + //瑙f瀽閮ㄩ棬 + for (RzLeave leave : res_list) { + leave.setDeptName(deptMapper.selectDeptById(leave.getDeptId()).getDeptName()); + } + return res_list; + } + + /** + * 鏂板璇峰亣绠$悊 + * + * @param rzLeave 璇峰亣绠$悊 + * @return 缁撴灉 + */ + @Override + public AjaxResult insertRzLeave(RzLeave rzLeave) + { + List params_list = rzLeaveMapper.selectRzLeaveList(rzLeave); + if(StringUtils.isNotNull(params_list) && params_list.size() >0){ + return AjaxResult.error(); + } + //鏍规嵁鍛樺伐id鏌ヨ鍛樺伐鍚嶇О + SysStaff sysStaff = sysStaffMapper.selectSysStaffByUserId(rzLeave.getUserId()); + rzLeave.setName(sysStaff.getName()); + rzLeave.setDelFlag(Constants.DELETE_FLAG_0); + rzLeave.setCreateTime(DateUtils.getNowDate()); + rzLeave.setCreateBy(SecurityUtils.getUsername()); + int i = rzLeaveMapper.insertRzLeave(rzLeave); + if(i < 1){ + return AjaxResult.error(); + } + return AjaxResult.success(); + } + + /** + * 淇敼璇峰亣绠$悊 + * + * @param rzLeave 璇峰亣绠$悊 + * @return 缁撴灉 + */ + @Override + public AjaxResult updateRzLeave(RzLeave rzLeave) + { + //鍒ゆ柇鏄惁鏈夎鎯呮暟鎹 + List detail_list = rzLeaveDetailMapper.selectRzLeaveDetailByLeaveId(rzLeave.getId()); + if(StringUtils.isNotNull(detail_list) && detail_list.size() > 0){ + return AjaxResult.error(); + } + rzLeave.setUpdateTime(DateUtils.getNowDate()); + rzLeave.setUpdateBy(SecurityUtils.getUsername()); + int i= rzLeaveMapper.updateRzLeave(rzLeave); + if(i < 1){ + return AjaxResult.error(); + } + return AjaxResult.success(); + } + + /** + * 鍒犻櫎璇峰亣绠$悊 + * + * @return 缁撴灉 + */ + @Override + public AjaxResult deleteRzLeave(Long id,String name){ + RzLeave rzLeave = rzLeaveMapper.selectRzLeaveById(id); + rzLeave.setUpdateTime(DateUtils.getNowDate()); + rzLeave.setUpdateBy(SecurityUtils.getUsername()); + rzLeave.setDelFlag(Constants.DELETE_FLAG_1); + int i= rzLeaveMapper.updateRzLeave(rzLeave); + if(i < 1){ + return AjaxResult.error(); + } + return AjaxResult.success(); + } + + /** + * 鏌ヨ鍛樺伐璇峰亣璇︽儏 + * @param rzLeave + * @return + */ + public List listLeaveDetails(RzLeave rzLeave){ + List res_list = null; + //鏌ヨ鎸囧畾鏈堜唤鐨勮鍋囩粺璁 + RzLeave leave = rzLeaveMapper.queryRzLeaveByDateAndUserId(rzLeave.getUserId(),rzLeave.getLeaveDate()); + if(leave == null){ + return new ArrayList(); + } + //鏌ヨ璇峰亣璇︽儏 + res_list = rzLeaveDetailMapper.selectRzLeaveDetailByLeaveId(leave.getId()); + return res_list; + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzOverTimeDetailServiceImpl.java b/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzOverTimeDetailServiceImpl.java new file mode 100644 index 0000000..3e92d65 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzOverTimeDetailServiceImpl.java @@ -0,0 +1,168 @@ +package com.evo.personnelMatters.service.impl; + +import com.evo.attendance.domain.RzAttendanceStatistical; +import com.evo.attendance.mapper.RzAttendanceStatisticalMapper; +import com.evo.common.constant.Constants; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.SecurityUtils; +import com.evo.personnelMatters.domain.RzOverTime; +import com.evo.personnelMatters.domain.RzOverTimeDetail; +import com.evo.personnelMatters.mapper.RzOverTimeDetailMapper; +import com.evo.personnelMatters.mapper.RzOverTimeMapper; +import com.evo.personnelMatters.service.IRzOverTimeDetailService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.List; + +/** + * 鍔犵彮璇︽儏Service涓氬姟灞傚鐞 + * + * @author chenyj + * @date 2024-09-09 + */ +@Service +public class RzOverTimeDetailServiceImpl implements IRzOverTimeDetailService +{ + @Resource + private RzOverTimeDetailMapper rzOverTimeDetailMapper; + @Resource + private RzOverTimeMapper rzOverTimeMapper; + @Resource + private RzAttendanceStatisticalMapper rzAttendanceStatisticalMapper; //鎵撳崱缁熻 + /** + * 鏌ヨ鍔犵彮璇︽儏 + * + * @param id 鍔犵彮璇︽儏涓婚敭 + * @return 鍔犵彮璇︽儏 + */ + @Override + public RzOverTimeDetail selectRzOverTimeDetailById(Long id) + { + return rzOverTimeDetailMapper.selectRzOverTimeDetailById(id); + } + + /** + * 鏌ヨ鍔犵彮璇︽儏鍒楄〃 + * + * @param rzOverTimeDetail 鍔犵彮璇︽儏 + * @return 鍔犵彮璇︽儏 + */ + @Override + public List selectRzOverTimeDetailList(RzOverTimeDetail rzOverTimeDetail) + { + return rzOverTimeDetailMapper.selectRzOverTimeDetailList(rzOverTimeDetail); + } + + /** + * 鏂板鍔犵彮璇︽儏 + * + * @param rzOverTimeDetail 鍔犵彮璇︽儏 + * @return 缁撴灉 + */ + @Override + @Transactional + public AjaxResult insertRzOverTimeDetail(RzOverTimeDetail rzOverTimeDetail) + { + //鍒ゆ柇璇峰亣鏃堕棿 + if(rzOverTimeDetail.getOverTimeStart().getTime() > rzOverTimeDetail.getOverTimeEnd().getTime()){ + return AjaxResult.error(); + } + Long hours = (rzOverTimeDetail.getOverTimeEnd().getTime() - rzOverTimeDetail.getOverTimeStart().getTime())/1000/60/60; + rzOverTimeDetail.setOverTimeHours(BigDecimal.valueOf(hours)); + rzOverTimeDetail.setCreateTime(DateUtils.getNowDate()); + rzOverTimeDetail.setCreateBy(SecurityUtils.getUsername()); + rzOverTimeDetail.setDelFlag(Constants.DELETE_FLAG_0); + int i = rzOverTimeDetailMapper.insertRzOverTimeDetail(rzOverTimeDetail); + if(i < 1){ + return AjaxResult.error(); + } + //鍙嶅啓鍔犵彮鎬绘椂闀 + RzOverTime rzOverTime = rzOverTimeMapper.selectRzOverTimeById(rzOverTimeDetail.getOverTimeId()); + rzOverTime.setOverHours(rzOverTime.getOverHours().add(BigDecimal.valueOf(hours))); + i = rzOverTimeMapper.updateRzOverTime(rzOverTime); + if(i < 1){ + return AjaxResult.error(); + } + //鍙嶅啓鑰冨嫟姹囨 + RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzOverTime.getUserId(),rzOverTime.getOverTimeMonth()); + rzAttendanceStatistical.setWorkOvertimeNumber(rzOverTime.getOverHours()); + i = rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical); + if(i < 1){ + return AjaxResult.error(); + } + return AjaxResult.success(); + } + + /** + * 淇敼鍔犵彮璇︽儏 + * + * @param rzOverTimeDetail 鍔犵彮璇︽儏 + * @return 缁撴灉 + */ + @Override + @Transactional + public AjaxResult updateRzOverTimeDetail(RzOverTimeDetail rzOverTimeDetail) + { + //鏍规嵁ID鏌ヨ鏃ф暟鎹 + RzOverTimeDetail older = rzOverTimeDetailMapper.selectRzOverTimeDetailById(rzOverTimeDetail.getId()); + Long hours = (rzOverTimeDetail.getOverTimeEnd().getTime() - rzOverTimeDetail.getOverTimeStart().getTime())/1000/60/60; + rzOverTimeDetail.setOverTimeHours(BigDecimal.valueOf(hours)); + rzOverTimeDetail.setUpdateTime(DateUtils.getNowDate()); + rzOverTimeDetail.setUpdateBy(SecurityUtils.getUsername()); + int i = rzOverTimeDetailMapper.updateRzOverTimeDetail(rzOverTimeDetail); + if(i < 1){ + return AjaxResult.error(); + } + //鍙嶅啓鍔犵彮鎬绘椂闀 + RzOverTime rzOverTime = rzOverTimeMapper.selectRzOverTimeById(rzOverTimeDetail.getOverTimeId()); + rzOverTime.setOverHours(rzOverTime.getOverHours().add(BigDecimal.valueOf(hours)).subtract(older.getOverTimeHours())); + i = rzOverTimeMapper.updateRzOverTime(rzOverTime); + if(i < 1){ + return AjaxResult.error(); + } + //鍙嶅啓鑰冨嫟姹囨 + RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzOverTime.getUserId(),rzOverTime.getOverTimeMonth()); + rzAttendanceStatistical.setWorkOvertimeNumber(rzOverTime.getOverHours()); + i = rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical); + if(i < 1){ + return AjaxResult.error(); + } + return AjaxResult.success(); + } + + /** + * 鍒犻櫎鍔犵彮璇︽儏淇℃伅 + * + * @param id 鍔犵彮璇︽儏涓婚敭 + * @return 缁撴灉 + */ + @Override + @Transactional + public AjaxResult deleteRzOverTimeDetailById(Long id) + { + RzOverTimeDetail rzOverTimeDetail = rzOverTimeDetailMapper.selectRzOverTimeDetailById(id); + rzOverTimeDetail.setDelFlag(Constants.DELETE_FLAG_1); + int i = rzOverTimeDetailMapper.updateRzOverTimeDetail(rzOverTimeDetail); + if(i < 1){ + return AjaxResult.error(); + } + //鍙嶅啓鍔犵彮鎬绘椂闀 + RzOverTime rzOverTime = rzOverTimeMapper.selectRzOverTimeById(rzOverTimeDetail.getOverTimeId()); + rzOverTime.setOverHours(rzOverTime.getOverHours().subtract(rzOverTimeDetail.getOverTimeHours())); + i = rzOverTimeMapper.updateRzOverTime(rzOverTime); + if(i < 1){ + return AjaxResult.error(); + } + //鍙嶅啓鑰冨嫟姹囨 + RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzOverTime.getUserId(),rzOverTime.getOverTimeMonth()); + rzAttendanceStatistical.setWorkOvertimeNumber(rzOverTime.getOverHours()); + i = rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical); + if(i < 1){ + return AjaxResult.error(); + } + return AjaxResult.success(); + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzOverTimeServiceImpl.java b/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzOverTimeServiceImpl.java new file mode 100644 index 0000000..858dce5 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzOverTimeServiceImpl.java @@ -0,0 +1,155 @@ +package com.evo.personnelMatters.service.impl; + +import com.evo.common.annotation.DataScope; +import com.evo.common.constant.Constants; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.personnelMatters.domain.RzOverTime; +import com.evo.personnelMatters.domain.RzOverTimeDetail; +import com.evo.personnelMatters.mapper.RzOverTimeDetailMapper; +import com.evo.personnelMatters.mapper.RzOverTimeMapper; +import com.evo.personnelMatters.service.IRzOverTimeService; +import com.evo.system.domain.SysStaff; +import com.evo.system.mapper.SysDeptMapper; +import com.evo.system.mapper.SysStaffMapper; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +/** + * 鍔犵彮绠$悊Service涓氬姟灞傚鐞 + * + * @author chenyj + * @date 2024-09-03 + */ +@Service +public class RzOverTimeServiceImpl implements IRzOverTimeService +{ + @Resource + private RzOverTimeMapper rzOverTimeMapper; + @Resource + private SysStaffMapper sysStaffMapper; //鍛樺伐淇℃伅 + @Resource + private RzOverTimeDetailMapper rzOverTimeDetailMapper; //鍔犵彮璇︽儏 + @Resource + private SysDeptMapper deptMapper; //閮ㄩ棬 + + + /** + * 鏌ヨ鍔犵彮绠$悊 + * + * @param id 鍔犵彮绠$悊涓婚敭 + * @return 鍔犵彮绠$悊 + */ + @Override + public RzOverTime selectRzOverTimeById(Long id) + { + return rzOverTimeMapper.selectRzOverTimeById(id); + } + + /** + * 鏌ヨ鍔犵彮绠$悊鍒楄〃 + * + * @param rzOverTime 鍔犵彮绠$悊 + * @return 鍔犵彮绠$悊 + */ + @Override + @DataScope(deptAlias = "d") + public List selectRzOverTimeList(RzOverTime rzOverTime) + { + List res_list = rzOverTimeMapper.selectRzOverTimeList(rzOverTime); + for (RzOverTime overTime : res_list) { + overTime.setDeptName(deptMapper.selectDeptById(overTime.getDeptId()).getDeptName()); + } + return res_list; + } + + /** + * 鏂板鍔犵彮绠$悊 + * + * @param rzOverTime 鍔犵彮绠$悊 + * @return 缁撴灉 + */ + @Override + public AjaxResult insertRzOverTime(RzOverTime rzOverTime) + { + RzOverTime overTime = rzOverTimeMapper.selectRzOverTimeByNameAndMonth(Long.parseLong(rzOverTime.getName()),rzOverTime.getOverTimeMonth()); + if(StringUtils.isNotNull(overTime)){ + return AjaxResult.error(); + } + //鏍规嵁鍛樺伐id鏌ヨ鍛樺伐鍚嶇О + SysStaff sysStaff = sysStaffMapper.selectSysStaffByUserId(Long.parseLong(rzOverTime.getName())); + rzOverTime.setName(sysStaff.getName()); + rzOverTime.setUserId(sysStaff.getUserId()); + rzOverTime.setCreateBy(SecurityUtils.getUsername()); + rzOverTime.setCreateTime(DateUtils.getNowDate()); + rzOverTime.setDelFlag(Constants.DELETE_FLAG_0); + int i = rzOverTimeMapper.insertRzOverTime(rzOverTime); + if(i < 1){ + return AjaxResult.error(); + } + return AjaxResult.success(); + } + + /** + * 淇敼鍔犵彮绠$悊 + * + * @param rzOverTime 鍔犵彮绠$悊 + * @return 缁撴灉 + */ + @Override + public int updateRzOverTime(RzOverTime rzOverTime) + { + rzOverTime.setUpdateBy(SecurityUtils.getUsername()); + rzOverTime.setUpdateTime(DateUtils.getNowDate()); + return rzOverTimeMapper.updateRzOverTime(rzOverTime); + } + + /** + * 鍒犻櫎鍔犵彮绠$悊淇℃伅 + * + * @param id 鍔犵彮绠$悊涓婚敭 + * @return 缁撴灉 + */ + @Override + public AjaxResult deleteRzOverTimeById(Long id) + { + RzOverTime rzOverTime = rzOverTimeMapper.selectRzOverTimeById(id); + if(rzOverTime.getOverHours().compareTo(new BigDecimal("0.0")) > 0){ + return AjaxResult.error("鏈夊姞鐝伐鏃讹紝涓嶈兘鍒犻櫎锛"); + } + rzOverTime.setDelFlag(Constants.DELETE_FLAG_1); + rzOverTime.setUpdateBy(SecurityUtils.getUsername()); + rzOverTime.setUpdateTime(DateUtils.getNowDate()); + int i = rzOverTimeMapper.updateRzOverTime(rzOverTime); + if(i < 1){ + return AjaxResult.error(); + } + return AjaxResult.success(); + } + + /** + * 鏌ヨ鍛樺伐鐨勫姞鐝鎯 + * @param rzOverTime + * @return + */ + @Override + public List selectRzOverTimeDetailListByUserIdAndMonth(RzOverTime rzOverTime){ + List res_list = null; + //鏍规嵁鏈堜唤鍜屽憳宸D鑾峰彇鍔犵彮ID + RzOverTime overTime = rzOverTimeMapper.selectRzOverTimeByNameAndMonth(rzOverTime.getUserId(),rzOverTime.getOverTimeMonth()); + if(overTime == null){ + return new ArrayList(); + } + RzOverTimeDetail rzOverTimeDetail = new RzOverTimeDetail(); + rzOverTimeDetail.setOverTimeId(overTime.getId()); + res_list = rzOverTimeDetailMapper.selectRzOverTimeDetailList(rzOverTimeDetail); + return res_list; + } + + +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzSubsidyServiceImpl.java b/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzSubsidyServiceImpl.java new file mode 100644 index 0000000..957d53d --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzSubsidyServiceImpl.java @@ -0,0 +1,104 @@ +package com.evo.personnelMatters.service.impl; + +import com.evo.common.constant.Constants; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.personnelMatters.domain.RzSubsidy; +import com.evo.personnelMatters.mapper.RzSubsidyMapper; +import com.evo.personnelMatters.service.IRzSubsidyService; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.List; + +/** + * 琛ュ姪绠$悊Service涓氬姟灞傚鐞 + * + * @author chenyj + * @date 2024-08-27 + */ +@Service +public class RzSubsidyServiceImpl implements IRzSubsidyService +{ + @Resource + private RzSubsidyMapper rzSubsidyMapper; + + /** + * 鏌ヨ琛ュ姪绠$悊 + * + * @param id 琛ュ姪绠$悊涓婚敭 + * @return 琛ュ姪绠$悊 + */ + @Override + public RzSubsidy selectRzSubsidyById(Long id) + { + return rzSubsidyMapper.selectRzSubsidyById(id); + } + + /** + * 鏌ヨ琛ュ姪绠$悊鍒楄〃 + * + * @param rzSubsidy 琛ュ姪绠$悊 + * @return 琛ュ姪绠$悊 + */ + @Override + public List selectRzSubsidyList(RzSubsidy rzSubsidy) + { + return rzSubsidyMapper.selectRzSubsidyList(rzSubsidy); + } + + /** + * 鏂板琛ュ姪绠$悊 + * + * @param rzSubsidy 琛ュ姪绠$悊 + * @return 缁撴灉 + */ + @Override + public AjaxResult insertRzSubsidy(RzSubsidy rzSubsidy) + { + //鏍规嵁鍚嶇О鏌ヨ + RzSubsidy subsidy = rzSubsidyMapper.selectRzSubsidyByName(rzSubsidy.getName()); + if(StringUtils.isNotNull(subsidy)){ + return AjaxResult.error("琛ュ姪鍚嶇О閲嶅锛侊紒"); + } + rzSubsidy.setCreateBy(SecurityUtils.getUsername()); + rzSubsidy.setCreateTime(DateUtils.getNowDate()); + rzSubsidy.setDelFlag(Constants.DELETE_FLAG_0); + int i = rzSubsidyMapper.insertRzSubsidy(rzSubsidy); + if(i < 1){ + return AjaxResult.error(); + } + return AjaxResult.success(); + } + + /** + * 淇敼琛ュ姪绠$悊 + * + * @param rzSubsidy 琛ュ姪绠$悊 + * @return 缁撴灉 + */ + @Override + public int updateRzSubsidy(RzSubsidy rzSubsidy) + { + rzSubsidy.setUpdateBy(SecurityUtils.getUsername()); + rzSubsidy.setUpdateTime(DateUtils.getNowDate()); + return rzSubsidyMapper.updateRzSubsidy(rzSubsidy); + } + + /** + * 鍒犻櫎琛ュ姪绠$悊淇℃伅 + * + * @param id 琛ュ姪绠$悊涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteRzSubsidyById(Long id) + { + RzSubsidy rzSubsidy = rzSubsidyMapper.selectRzSubsidyById(id); + rzSubsidy.setDelFlag(Constants.DELETE_FLAG_1); + rzSubsidy.setUpdateBy(SecurityUtils.getUsername()); + rzSubsidy.setUpdateTime(DateUtils.getNowDate()); + return updateRzSubsidy(rzSubsidy); + } +} diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/SpecialOverTimeServiceImpl.java b/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/SpecialOverTimeServiceImpl.java new file mode 100644 index 0000000..ab84a25 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/SpecialOverTimeServiceImpl.java @@ -0,0 +1,99 @@ +package com.evo.personnelMatters.service.impl; + +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.utils.SecurityUtils; +import com.evo.personnelMatters.domain.EqOverStaff; +import com.evo.personnelMatters.domain.SpecialOverTime; +import com.evo.personnelMatters.mapper.BsOverTimeMapper; +import com.evo.personnelMatters.mapper.EqOverStaffMapper; +import com.evo.personnelMatters.service.SpecialOverTimeService; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; + +@Service +public class SpecialOverTimeServiceImpl implements SpecialOverTimeService { + + @Resource + private BsOverTimeMapper bsOverTimeMapper; + @Resource + private EqOverStaffMapper eqOverStaffMapper; + + @Override + public SpecialOverTime selectSpecialOverTimeById(){ + return bsOverTimeMapper.selectSpecialOverTimeById(); + } + + @Override + public AjaxResult addSpecialOverTime(SpecialOverTime specialOverTime){ + int i = bsOverTimeMapper.updateSpecialOverTime(specialOverTime); + if(i < 1){ + return AjaxResult.error("淇濆瓨澶辫触"); + } + return AjaxResult.success("淇濆瓨鎴愬姛"); + } + + @Override + public List selectEqOverStaffList(EqOverStaff eqOverStaff){ + return eqOverStaffMapper.selectEqOverStaffList(eqOverStaff); + } + + /** + * 鏌ヨ鐓х墖绠$悊 + * + * @param id 鐓х墖绠$悊涓婚敭 + * @return 鐓х墖绠$悊 + */ + @Override + public EqOverStaff selectEqOverStaffById(Long id) + { + return eqOverStaffMapper.selectEqOverStaffById(id); + } + + /** + * 鏂板鐓х墖绠$悊 + * + * @param eqOverStaff 鐓х墖绠$悊 + * @return 缁撴灉 + */ + @Override + public int insertEqOverStaff(EqOverStaff eqOverStaff) + { + eqOverStaff.setCreateBy(SecurityUtils.getUsername()); + eqOverStaff.setCreateTime(new Date()); + eqOverStaff.setDelFlag("0"); + return eqOverStaffMapper.insertEqOverStaff(eqOverStaff); + } + + /** + * 淇敼鐓х墖绠$悊 + * + * @param eqOverStaff 鐓х墖绠$悊 + * @return 缁撴灉 + */ + @Override + public int updateEqOverStaff(EqOverStaff eqOverStaff) + { + eqOverStaff.setUpdateBy(SecurityUtils.getUsername()); + eqOverStaff.setUpdateTime(new Date()); + return eqOverStaffMapper.updateEqOverStaff(eqOverStaff); + } + + /** + * 鍒犻櫎鐓х墖绠$悊淇℃伅 + * + * @param id 鐓х墖绠$悊涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteEqOverStaffById(Long id) + { + EqOverStaff eqOverStaff = eqOverStaffMapper.selectEqOverStaffById(id); + eqOverStaff.setDelFlag("1"); + eqOverStaff.setUpdateTime(new Date()); + eqOverStaff.setUpdateBy(SecurityUtils.getUsername()); + return eqOverStaffMapper.updateEqOverStaff(eqOverStaff); + } + +} diff --git a/evo-admin/src/main/java/com/evo/restaurant/controller/RzRestaurantDetailController.java b/evo-admin/src/main/java/com/evo/restaurant/controller/RzRestaurantDetailController.java new file mode 100644 index 0000000..eba4712 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/restaurant/controller/RzRestaurantDetailController.java @@ -0,0 +1,89 @@ +package com.evo.restaurant.controller; + +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.poi.ExcelUtil; +import com.evo.restaurant.domain.RzRestaurantDetail; +import com.evo.restaurant.service.IRzRestaurantDetailService; +import com.evo.system.domain.SysStaff; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 椁愰ギ璇︽儏Controller + * + * @author chenyj + * @date 2024-09-18 + */ +@RestController +@RequestMapping("/api/v2") +public class RzRestaurantDetailController extends BaseController +{ + @Autowired + private IRzRestaurantDetailService rzRestaurantDetailService; + + /** + * 鏌ヨ椁愰ギ璇︽儏鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('api:v2:list')") + @GetMapping("/list") + public TableDataInfo list(RzRestaurantDetail rzRestaurantDetail) + { + startPage(); + List list = rzRestaurantDetailService.selectRzRestaurantDetailList(rzRestaurantDetail); + return getDataTable(list); + } + + /** + * 瀵煎嚭椁愰ギ璇︽儏鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('api:v2:export')") + @Log(title = "椁愰ギ璇︽儏", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, RzRestaurantDetail rzRestaurantDetail) + { + List list = rzRestaurantDetailService.selectRzRestaurantDetailList(rzRestaurantDetail); + ExcelUtil util = new ExcelUtil(RzRestaurantDetail.class); + util.exportExcel(response, list, "椁愰ギ璇︽儏"); + } + + /** + * 鍒疯劯鑾峰彇鎵撳崱鎸夐挳鏉冮檺 + * sn 璁惧鍙 + * type 璁惧璇嗗埆绫诲瀷 + * user_id 鐢ㄦ埛id + * card 浜哄憳淇℃伅涓殑鍗″彿 + * confidence 浜鸿劯绠楁硶璇嗗埆鍒扮殑鐩歌瘑搴 + * temperature 娴嬮噺鍒扮殑娓╁害锛屾湭寮鍚祴娓╃殑璁惧涓虹┖ + * + * 鍝嶅簲锛 Result 杩斿洖璇锋眰绫诲瀷锛0锛氬彲浠ユ墦鍗★紝鍏跺畠鍊艰〃绀烘棤娉曟墦鍗 + * Msg 瀵瑰簲 Result 鐨勭姸鎬侊紝鍙负绌 + * Content 璇嗗埆鍚庤繑鍥炵殑璇︾粏淇℃伅 + * button 9浣嶉暱搴︾殑瀛楃涓诧紝0 琛ㄧず涓嶅彲浠ョ偣鍑 1 琛ㄧず鍙互鐐瑰嚮 + * clock in count 鎵撳崱娆℃暟 + * + * String sn,String type,String userId,String card,String confidence + */ + @RequestMapping("/verify_user_yt") + public String verifyUser(@RequestBody String json){ + return rzRestaurantDetailService.insertRzRestaurantDetail(json); + } + + /** + * 鎵嬪姩鍒锋柊鍒疯劯璁板綍 + */ + @GetMapping("/flushData") + public TableDataInfo flushData(){ + //鏍规嵁鏃堕棿鏌ヨ褰撳墠椁愮殑缁熻鏁版嵁 + List list = rzRestaurantDetailService.flushData(); + return getDataTable(list); + } + + +} diff --git a/evo-admin/src/main/java/com/evo/restaurant/controller/RzRestaurantImagesController.java b/evo-admin/src/main/java/com/evo/restaurant/controller/RzRestaurantImagesController.java new file mode 100644 index 0000000..0d0b1c8 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/restaurant/controller/RzRestaurantImagesController.java @@ -0,0 +1,61 @@ +package com.evo.restaurant.controller; + +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.enums.BusinessType; +import com.evo.restaurant.domain.RzRestaurantImages; +import com.evo.restaurant.service.IRzRestaurantImagesService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +/** + * 椁愰ギ鐓х墖绠$悊Controller + * + * @author chenyj + * @date 2024-10-25 + */ +@RestController +@RequestMapping("/restaurant/images") +public class RzRestaurantImagesController extends BaseController +{ + @Autowired + private IRzRestaurantImagesService rzRestaurantImagesService; + + /** + * 鏌ヨ椁愰ギ鐓х墖绠$悊鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('restaurant:images:list')") + @GetMapping("/list") + public TableDataInfo list(RzRestaurantImages rzRestaurantImages) + { + startPage(); + List list = rzRestaurantImagesService.selectRzRestaurantImagesList(rzRestaurantImages); + return getDataTable(list); + } + + /** + * 鍒犻櫎椁愰ギ鐓х墖绠$悊 + */ + @PreAuthorize("@ss.hasPermi('restaurant:images:remove')") + @Log(title = "椁愰ギ鐓х墖绠$悊", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public AjaxResult remove(@PathVariable Long id) + { + return toAjax(rzRestaurantImagesService.deleteRzRestaurantImagesById(id)); + } + + /** + * 涓婁紶鍛樺伐鐓х墖 + */ + @RequestMapping("/uploadDispatchings") + @ResponseBody + public AjaxResult uploadPDF(@RequestParam("name") String name,@RequestParam("file") MultipartFile filePath){ + return rzRestaurantImagesService.insertRzRestaurantImages(name,filePath); + } +} diff --git a/evo-admin/src/main/java/com/evo/restaurant/controller/RzRestaurantStatisticsController.java b/evo-admin/src/main/java/com/evo/restaurant/controller/RzRestaurantStatisticsController.java new file mode 100644 index 0000000..952e9bc --- /dev/null +++ b/evo-admin/src/main/java/com/evo/restaurant/controller/RzRestaurantStatisticsController.java @@ -0,0 +1,244 @@ +package com.evo.restaurant.controller; + +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.poi.ExcelUtil; +import com.evo.restaurant.domain.RzRestaurantStatistics; +import com.evo.restaurant.utils.ExcelUtilCy; +import com.evo.restaurant.service.IRzRestaurantStatisticsService; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +/** + * 椁愰ギ缁熻Controller + * + * @author chenyj + * @date 2024-09-18 + */ +@RestController +@RequestMapping("/restaurant/statistics") +public class RzRestaurantStatisticsController extends BaseController +{ + @Autowired + private IRzRestaurantStatisticsService rzRestaurantStatisticsService; + + /** + * 鏌ヨ椁愰ギ缁熻鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('restaurant:statistics:list')") + @GetMapping("/list") + public TableDataInfo list(RzRestaurantStatistics rzRestaurantStatistics) + { + startPage(); + List list = rzRestaurantStatisticsService.selectRzRestaurantStatisticsList(rzRestaurantStatistics); + return getDataTable(list); + } + + /** + * 瀵煎嚭椁愰ギ缁熻鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('restaurant:statistics:export')") + @Log(title = "椁愰ギ缁熻", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(RzRestaurantStatistics rzRestaurantStatistics) + { + ExcelUtilCy util = new ExcelUtilCy(RzRestaurantStatistics.class); + //鍒涘缓鎬昏〃 + List list = new ArrayList(); + //鍒涘缓鍚勪釜閮ㄩ棬宸ヨ祫鏁版嵁闆嗗悎鐨勯泦鍚 + List> lists = new ArrayList<>(); + //鍒涘缓鍚勪釜閮ㄩ棬sheetname闆嗗悎 + List sheetNameList = new ArrayList<>(); + List res_list = rzRestaurantStatisticsService.selectRzRestaurantStatisticsList(rzRestaurantStatistics); + //鍏堟壘鍒版湁澶氬皯涓叕鍙搁儴闂 + for (RzRestaurantStatistics restaurantStatistics : res_list) { + if(sheetNameList == null || sheetNameList.size() == 0){ + sheetNameList.add(restaurantStatistics.getCompanyName()); + continue; + } + if(sheetNameList.contains(restaurantStatistics.getCompanyName())){ + continue; + } + sheetNameList.add(restaurantStatistics.getCompanyName()); + } + List c_list = null; + //閮ㄩ棬鍚堣 + RzRestaurantStatistics vo_obj = null; + RzRestaurantStatistics res_obj = null; + for (String s : sheetNameList) { + c_list = new ArrayList(); + vo_obj = new RzRestaurantStatistics(); + res_obj = new RzRestaurantStatistics(); + for (RzRestaurantStatistics restaurantStatistics : res_list) { + if(s.equals(restaurantStatistics.getCompanyName())){ + if(null == vo_obj.getBreakfastNumber()){ + vo_obj.setBreakfastNumber(0l); + } + vo_obj.setBreakfastNumber(vo_obj.getBreakfastNumber() + restaurantStatistics.getBreakfastNumber()); + if(null == vo_obj.getBreakfastExpend()){ + vo_obj.setBreakfastExpend(new BigDecimal("0.00")); + } + vo_obj.setBreakfastExpend(vo_obj.getBreakfastExpend().add(restaurantStatistics.getBreakfastExpend())); + if(null == vo_obj.getBreakfastPreSumExpend()){ + vo_obj.setBreakfastPreSumExpend(new BigDecimal("0.00")); + } + vo_obj.setBreakfastPreSumExpend(vo_obj.getBreakfastPreSumExpend().add(restaurantStatistics.getBreakfastPreSumExpend())); + if(null == vo_obj.getBreakfastSumExpend()){ + vo_obj.setBreakfastSumExpend(new BigDecimal("0.00")); + } + vo_obj.setBreakfastSumExpend(vo_obj.getBreakfastSumExpend().add(restaurantStatistics.getBreakfastSumExpend())); + if(null == vo_obj.getLunchNumber()){ + vo_obj.setLunchNumber(0l); + } + vo_obj.setLunchNumber(vo_obj.getLunchNumber() + restaurantStatistics.getLunchNumber()); + if(null == vo_obj.getLunchExpend()){ + vo_obj.setLunchExpend(new BigDecimal("0.00")); + } + vo_obj.setLunchExpend(vo_obj.getLunchExpend().add(restaurantStatistics.getLunchExpend())); + if(null == vo_obj.getLunchPreSumExpend()){ + vo_obj.setLunchPreSumExpend(new BigDecimal("0.00")); + } + vo_obj.setLunchPreSumExpend(vo_obj.getLunchPreSumExpend().add(restaurantStatistics.getLunchPreSumExpend())); + if(null == vo_obj.getLunchSumExpend()){ + vo_obj.setLunchSumExpend(new BigDecimal("0.00")); + } + vo_obj.setLunchSumExpend(vo_obj.getLunchSumExpend().add(restaurantStatistics.getLunchSumExpend())); + if(null == vo_obj.getSupperNumber()){ + vo_obj.setSupperNumber(0l); + } + vo_obj.setSupperNumber(vo_obj.getSupperNumber() + restaurantStatistics.getSupperNumber()); + if(null == vo_obj.getSupperExpend()){ + vo_obj.setSupperExpend(new BigDecimal("0.00")); + } + vo_obj.setSupperExpend(vo_obj.getSupperExpend().add(restaurantStatistics.getSupperExpend())); + if(null == vo_obj.getSupperPreSumExpend()){ + vo_obj.setSupperPreSumExpend(new BigDecimal("0.00")); + } + vo_obj.setSupperPreSumExpend(vo_obj.getSupperPreSumExpend().add(restaurantStatistics.getSupperPreSumExpend())); + if(null == vo_obj.getSupperSumExpend()){ + vo_obj.setSupperSumExpend(new BigDecimal("0.00")); + } + vo_obj.setSupperSumExpend(vo_obj.getSupperSumExpend().add(restaurantStatistics.getSupperSumExpend())); + if(null == vo_obj.getPersonalSumConsumption()){ + vo_obj.setPersonalSumConsumption(new BigDecimal("0.00")); + } + vo_obj.setPersonalSumConsumption(vo_obj.getPersonalSumConsumption().add(restaurantStatistics.getPersonalSumConsumption())); + if(vo_obj.getSumConsumption() == null){ + vo_obj.setSumConsumption(new BigDecimal("0.00")); + } + vo_obj.setSumConsumption(vo_obj.getSumConsumption().add(restaurantStatistics.getSumConsumption())); + c_list.add(restaurantStatistics); + } + } + vo_obj.setName("鍚堣: "); + c_list.add(vo_obj); + lists.add(c_list); + BeanUtils.copyProperties(vo_obj,res_obj); + res_obj.setMonth(rzRestaurantStatistics.getMonth()); + res_obj.setName(s); + list.add(res_obj); + } + + //璁$畻鍏辫 + vo_obj = new RzRestaurantStatistics(); + vo_obj.setName("鍏辫: "); + for (RzRestaurantStatistics restaurantStatistics : list) { + if(null == vo_obj.getBreakfastNumber()){ + vo_obj.setBreakfastNumber(0l); + } + vo_obj.setBreakfastNumber(vo_obj.getBreakfastNumber() + restaurantStatistics.getBreakfastNumber()); + if(null == vo_obj.getBreakfastExpend()){ + vo_obj.setBreakfastExpend(new BigDecimal("0.00")); + } + vo_obj.setBreakfastExpend(vo_obj.getBreakfastExpend().add(restaurantStatistics.getBreakfastExpend())); + if(null == vo_obj.getBreakfastPreSumExpend()){ + vo_obj.setBreakfastPreSumExpend(new BigDecimal("0.00")); + } + vo_obj.setBreakfastPreSumExpend(vo_obj.getBreakfastPreSumExpend().add(restaurantStatistics.getBreakfastPreSumExpend())); + if(null == vo_obj.getBreakfastSumExpend()){ + vo_obj.setBreakfastSumExpend(new BigDecimal("0.00")); + } + vo_obj.setBreakfastSumExpend(vo_obj.getBreakfastSumExpend().add(restaurantStatistics.getBreakfastSumExpend())); + if(null == vo_obj.getLunchNumber()){ + vo_obj.setLunchNumber(0l); + } + vo_obj.setLunchNumber(vo_obj.getLunchNumber() + restaurantStatistics.getLunchNumber()); + if(null == vo_obj.getLunchExpend()){ + vo_obj.setLunchExpend(new BigDecimal("0.00")); + } + vo_obj.setLunchExpend(vo_obj.getLunchExpend().add(restaurantStatistics.getLunchExpend())); + if(null == vo_obj.getLunchPreSumExpend()){ + vo_obj.setLunchPreSumExpend(new BigDecimal("0.00")); + } + vo_obj.setLunchPreSumExpend(vo_obj.getLunchPreSumExpend().add(restaurantStatistics.getLunchPreSumExpend())); + if(null == vo_obj.getLunchSumExpend()){ + vo_obj.setLunchSumExpend(new BigDecimal("0.00")); + } + vo_obj.setLunchSumExpend(vo_obj.getLunchSumExpend().add(restaurantStatistics.getLunchSumExpend())); + if(null == vo_obj.getSupperNumber()){ + vo_obj.setSupperNumber(0l); + } + vo_obj.setSupperNumber(vo_obj.getSupperNumber() + restaurantStatistics.getSupperNumber()); + if(null == vo_obj.getSupperExpend()){ + vo_obj.setSupperExpend(new BigDecimal("0.00")); + } + vo_obj.setSupperExpend(vo_obj.getSupperExpend().add(restaurantStatistics.getSupperExpend())); + if(null == vo_obj.getSupperPreSumExpend()){ + vo_obj.setSupperPreSumExpend(new BigDecimal("0.00")); + } + vo_obj.setSupperPreSumExpend(vo_obj.getSupperPreSumExpend().add(restaurantStatistics.getSupperPreSumExpend())); + if(null == vo_obj.getSupperSumExpend()){ + vo_obj.setSupperSumExpend(new BigDecimal("0.00")); + } + vo_obj.setSupperSumExpend(vo_obj.getSupperSumExpend().add(restaurantStatistics.getSupperSumExpend())); + if(null == vo_obj.getPersonalSumConsumption()){ + vo_obj.setPersonalSumConsumption(new BigDecimal("0.00")); + } + vo_obj.setPersonalSumConsumption(vo_obj.getPersonalSumConsumption().add(restaurantStatistics.getPersonalSumConsumption())); + if(vo_obj.getSumConsumption() == null){ + vo_obj.setSumConsumption(new BigDecimal("0.00")); + } + vo_obj.setSumConsumption(vo_obj.getSumConsumption().add(restaurantStatistics.getSumConsumption())); + } + list.add(vo_obj); + return util.exportExcel(list,lists,"鎬昏〃",sheetNameList); + } + + @GetMapping("/exportkd") + public void exportkd(HttpServletResponse response,RzRestaurantStatistics rzRestaurantStatistics){ + List list = rzRestaurantStatisticsService.selectRzRestaurantStatisticsListBySxs(rzRestaurantStatistics); + ExcelUtil util = new ExcelUtil(RzRestaurantStatistics.class); + util.exportExcel(response, list, "瀹炰範鐢熷氨椁"); + } + + /** + * 鑾峰彇椁愰ギ缁熻璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('restaurant:statistics:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(rzRestaurantStatisticsService.selectRzRestaurantStatisticsById(id)); + } + + /** + * 鏍℃鏁版嵁 + */ + @PreAuthorize("@ss.hasPermi('restaurant:statistics:correct')") + @RequestMapping(value = "correct") + public AjaxResult correct(@RequestBody RzRestaurantStatistics rzRestaurantStatistics) + { + return rzRestaurantStatisticsService.correct(rzRestaurantStatistics); + } + +} diff --git a/evo-admin/src/main/java/com/evo/restaurant/domain/RzRestaurantDetail.java b/evo-admin/src/main/java/com/evo/restaurant/domain/RzRestaurantDetail.java new file mode 100644 index 0000000..fed41b7 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/restaurant/domain/RzRestaurantDetail.java @@ -0,0 +1,146 @@ +package com.evo.restaurant.domain; + +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.Date; + +/** + * 椁愰ギ璇︽儏瀵硅薄 rz_restaurant_detail + * + * @author chenyj + * @date 2024-09-18 + */ +public class RzRestaurantDetail extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭 */ + private Long id; + //鍛樺伐ID + private Long staffId; + + /** 濮撳悕 */ + @Excel(name = "濮撳悕") + private String name; + + /** 鏃ユ湡 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd") + private Date date; + //缁熻鏈堜唤 + @JsonFormat(pattern = "yyyy-MM") + private Date month; + + /** 鍒疯劯鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "鍒疯劯鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date time; + + /** 鏍囪 */ + @Excel(name = "鏍囪") + private String sign; + //缁熻涓暟 + private int number; + + /** 鍒犻櫎鏍囪 */ + private String delFlag; + + public Date getMonth() { + return month; + } + + public void setMonth(Date month) { + this.month = month; + } + + public Long getStaffId() { + return staffId; + } + + public void setStaffId(Long staffId) { + this.staffId = staffId; + } + + public int getNumber() { + return number; + } + + public void setNumber(int number) { + this.number = number; + } + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setName(String name) + { + this.name = name; + } + + public String getName() + { + return name; + } + public void setDate(Date date) + { + this.date = date; + } + + public Date getDate() + { + return date; + } + public void setTime(Date time) + { + this.time = time; + } + + public Date getTime() + { + return time; + } + public void setSign(String sign) + { + this.sign = sign; + } + + public String getSign() + { + return sign; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("name", getName()) + .append("date", getDate()) + .append("time", getTime()) + .append("sign", getSign()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/restaurant/domain/RzRestaurantImages.java b/evo-admin/src/main/java/com/evo/restaurant/domain/RzRestaurantImages.java new file mode 100644 index 0000000..9f3d59a --- /dev/null +++ b/evo-admin/src/main/java/com/evo/restaurant/domain/RzRestaurantImages.java @@ -0,0 +1,82 @@ +package com.evo.restaurant.domain; + +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 椁愰ギ鐓х墖绠$悊瀵硅薄 rz_restaurant_images + * + * @author chenyj + * @date 2024-10-25 + */ +public class RzRestaurantImages extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭ID */ + private Long id; + + /** 鍛樺伐濮撳悕 */ + @Excel(name = "鍛樺伐濮撳悕") + private String name; + + /** 鐓х墖鍦板潃 */ + @Excel(name = "鐓х墖鍦板潃") + private String imageUrl; + + /** 鍒犻櫎鏍囪瘑 */ + private String delFlag; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setName(String name) + { + this.name = name; + } + + public String getName() + { + return name; + } + public void setImageUrl(String imageUrl) + { + this.imageUrl = imageUrl; + } + + public String getImageUrl() + { + return imageUrl; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("name", getName()) + .append("imageUrl", getImageUrl()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/restaurant/domain/RzRestaurantStatistics.java b/evo-admin/src/main/java/com/evo/restaurant/domain/RzRestaurantStatistics.java new file mode 100644 index 0000000..945ceb5 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/restaurant/domain/RzRestaurantStatistics.java @@ -0,0 +1,330 @@ +package com.evo.restaurant.domain; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; + +/** + * 椁愰ギ缁熻瀵硅薄 rz_restaurant_statistics + * + * @author evo + * @date 2024-11-21 + */ +public class RzRestaurantStatistics extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭 */ + private Long id; + + /** 鍛樺伐ID */ + @Excel(name = "鍛樺伐ID") + private Long staffId; + private Long deptId; + @Excel(name = "鍏徃鍚嶇О") + private String companyName; //鍏徃鍚嶇О + /** 濮撳悕 */ + @Excel(name = "濮撳悕") + private String name; + + /** 缁熻鏈堜唤 */ + @JsonFormat(pattern = "yyyy-MM") + @Excel(name = "缁熻鏈堜唤", width = 30, dateFormat = "yyyy-MM") + private Date month; + + /** 鏃╅娑堣垂 */ + @Excel(name = "鏃╅娑堣垂") + private BigDecimal breakfastExpend; + + /** 鏃╅娆℃暟 */ + @Excel(name = "鏃╅娆℃暟") + private Long breakfastNumber; + + /** 鏃╅涓汉鎬绘秷璐 */ + @Excel(name = "鏃╅涓汉鎬绘秷璐") + private BigDecimal breakfastPreSumExpend; + + /** 鏃╅鎬绘秷璐 */ + @Excel(name = "鏃╅鎬绘秷璐") + private BigDecimal breakfastSumExpend; + + /** 鍗堥娑堣垂 */ + @Excel(name = "鍗堥娑堣垂") + private BigDecimal lunchExpend; + + /** 鍗堥娆℃暟 */ + @Excel(name = "鍗堥娆℃暟") + private Long lunchNumber; + + /** 鍗堥涓汉鎬绘秷璐 */ + @Excel(name = "鍗堥涓汉鎬绘秷璐") + private BigDecimal lunchPreSumExpend; + + /** 鍗堥鎬绘秷璐 */ + @Excel(name = "鍗堥鎬绘秷璐") + private BigDecimal lunchSumExpend; + + /** 鏅氶娑堣垂 */ + @Excel(name = "鏅氶娑堣垂") + private BigDecimal supperExpend; + + /** 鏅氶娆℃暟 */ + @Excel(name = "鏅氶娆℃暟") + private Long supperNumber; + + /** 鏅氶涓汉鎬绘秷璐 */ + @Excel(name = "鏅氶涓汉鎬绘秷璐") + private BigDecimal supperPreSumExpend; + + /** 鏅氶鎬绘秷璐 */ + @Excel(name = "鏅氶鎬绘秷璐") + private BigDecimal supperSumExpend; + + /** 涓汉鎬绘秷璐 */ + @Excel(name = "涓汉鎬绘秷璐") + private BigDecimal personalSumConsumption; + + /** 鎬绘秷璐 */ + @Excel(name = "鎬绘秷璐") + private BigDecimal sumConsumption; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鍒犻櫎鏍囪 */ + private String delFlag; + + public String getCompanyName() { + return companyName; + } + + public void setCompanyName(String companyName) { + this.companyName = companyName; + } + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setStaffId(Long staffId) + { + this.staffId = staffId; + } + + public Long getStaffId() + { + return staffId; + } + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + public Long getDeptId() + { + return deptId; + } + public void setName(String name) + { + this.name = name; + } + + public String getName() + { + return name; + } + public void setMonth(Date month) + { + this.month = month; + } + + public Date getMonth() + { + return month; + } + public void setBreakfastExpend(BigDecimal breakfastExpend) + { + this.breakfastExpend = breakfastExpend; + } + + public BigDecimal getBreakfastExpend() + { + return breakfastExpend; + } + public void setBreakfastNumber(Long breakfastNumber) + { + this.breakfastNumber = breakfastNumber; + } + + public Long getBreakfastNumber() + { + return breakfastNumber; + } + public void setBreakfastPreSumExpend(BigDecimal breakfastPreSumExpend) + { + this.breakfastPreSumExpend = breakfastPreSumExpend; + } + + public BigDecimal getBreakfastPreSumExpend() + { + return breakfastPreSumExpend; + } + public void setBreakfastSumExpend(BigDecimal breakfastSumExpend) + { + this.breakfastSumExpend = breakfastSumExpend; + } + + public BigDecimal getBreakfastSumExpend() + { + return breakfastSumExpend; + } + public void setLunchExpend(BigDecimal lunchExpend) + { + this.lunchExpend = lunchExpend; + } + + public BigDecimal getLunchExpend() + { + return lunchExpend; + } + public void setLunchNumber(Long lunchNumber) + { + this.lunchNumber = lunchNumber; + } + + public Long getLunchNumber() + { + return lunchNumber; + } + public void setLunchPreSumExpend(BigDecimal lunchPreSumExpend) + { + this.lunchPreSumExpend = lunchPreSumExpend; + } + + public BigDecimal getLunchPreSumExpend() + { + return lunchPreSumExpend; + } + public void setLunchSumExpend(BigDecimal lunchSumExpend) + { + this.lunchSumExpend = lunchSumExpend; + } + + public BigDecimal getLunchSumExpend() + { + return lunchSumExpend; + } + public void setSupperExpend(BigDecimal supperExpend) + { + this.supperExpend = supperExpend; + } + + public BigDecimal getSupperExpend() + { + return supperExpend; + } + public void setSupperNumber(Long supperNumber) + { + this.supperNumber = supperNumber; + } + + public Long getSupperNumber() + { + return supperNumber; + } + public void setSupperPreSumExpend(BigDecimal supperPreSumExpend) + { + this.supperPreSumExpend = supperPreSumExpend; + } + + public BigDecimal getSupperPreSumExpend() + { + return supperPreSumExpend; + } + public void setSupperSumExpend(BigDecimal supperSumExpend) + { + this.supperSumExpend = supperSumExpend; + } + + public BigDecimal getSupperSumExpend() + { + return supperSumExpend; + } + public void setPersonalSumConsumption(BigDecimal personalSumConsumption) + { + this.personalSumConsumption = personalSumConsumption; + } + + public BigDecimal getPersonalSumConsumption() + { + return personalSumConsumption; + } + public void setSumConsumption(BigDecimal sumConsumption) + { + this.sumConsumption = sumConsumption; + } + + public BigDecimal getSumConsumption() + { + return sumConsumption; + } + public void setRemarks(String remarks) + { + this.remarks = remarks; + } + + public String getRemarks() + { + return remarks; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("staffId", getStaffId()) + .append("deptId", getDeptId()) + .append("name", getName()) + .append("month", getMonth()) + .append("breakfastExpend", getBreakfastExpend()) + .append("breakfastNumber", getBreakfastNumber()) + .append("breakfastPreSumExpend", getBreakfastPreSumExpend()) + .append("breakfastSumExpend", getBreakfastSumExpend()) + .append("lunchExpend", getLunchExpend()) + .append("lunchNumber", getLunchNumber()) + .append("lunchPreSumExpend", getLunchPreSumExpend()) + .append("lunchSumExpend", getLunchSumExpend()) + .append("supperExpend", getSupperExpend()) + .append("supperNumber", getSupperNumber()) + .append("supperPreSumExpend", getSupperPreSumExpend()) + .append("supperSumExpend", getSupperSumExpend()) + .append("personalSumConsumption", getPersonalSumConsumption()) + .append("sumConsumption", getSumConsumption()) + .append("remarks", getRemarks()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/restaurant/domain/vo/RestaurantData.java b/evo-admin/src/main/java/com/evo/restaurant/domain/vo/RestaurantData.java new file mode 100644 index 0000000..9a1949e --- /dev/null +++ b/evo-admin/src/main/java/com/evo/restaurant/domain/vo/RestaurantData.java @@ -0,0 +1,19 @@ +package com.evo.restaurant.domain.vo; + +public class RestaurantData { + + private int clock_in_count; + + public int getClock_in_count() { + return clock_in_count; + } + + public void setClock_in_count(int clock_in_count) { + this.clock_in_count = clock_in_count; + } + + @Override + public String toString() { + return "RestaurantData [clock_in_count=" + clock_in_count + "]"; + } +} diff --git a/evo-admin/src/main/java/com/evo/restaurant/domain/vo/RestaurantVo.java b/evo-admin/src/main/java/com/evo/restaurant/domain/vo/RestaurantVo.java new file mode 100644 index 0000000..b0f3816 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/restaurant/domain/vo/RestaurantVo.java @@ -0,0 +1,49 @@ +package com.evo.restaurant.domain.vo; + +public class RestaurantVo { + + private int Result; + private String Msg; + private int voice_code; + private String voice_text; + private RestaurantData Content; + + + public int getResult() { + return Result; + } + public void setResult(int result) { + Result = result; + } + public String getMsg() { + return Msg; + } + public void setMsg(String msg) { + Msg = msg; + } + + public int getVoice_code() { + return voice_code; + } + public void setVoice_code(int voice_code) { + this.voice_code = voice_code; + } + public String getVoice_text() { + return voice_text; + } + public void setVoice_text(String voice_text) { + this.voice_text = voice_text; + } + + public RestaurantData getContent() { + return Content; + } + public void setContent(RestaurantData content) { + Content = content; + } + @Override + public String toString() { + return "RestaurantVo [Result=" + Result + ", Msg=" + Msg + ", voice_code=" + voice_code + ", voice_text=" + + voice_text + ", Content=" + Content + "]"; + } +} diff --git a/evo-admin/src/main/java/com/evo/restaurant/mapper/RzRestaurantDetailMapper.java b/evo-admin/src/main/java/com/evo/restaurant/mapper/RzRestaurantDetailMapper.java new file mode 100644 index 0000000..51172e6 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/restaurant/mapper/RzRestaurantDetailMapper.java @@ -0,0 +1,40 @@ +package com.evo.restaurant.mapper; + +import com.evo.restaurant.domain.RzRestaurantDetail; + +import java.util.List; + +/** + * 椁愰ギ璇︽儏Mapper鎺ュ彛 + * + * @author chenyj + * @date 2024-09-18 + */ +public interface RzRestaurantDetailMapper +{ + /** + * 鏌ヨ椁愰ギ璇︽儏 + * + * @param userId 椁愰ギ璇︽儏涓婚敭 + * @return 椁愰ギ璇︽儏 + */ + public RzRestaurantDetail selectRzRestaurantDetailByName(Long userId); + + /** + * 鏌ヨ椁愰ギ璇︽儏鍒楄〃 + * + * @param rzRestaurantDetail 椁愰ギ璇︽儏 + * @return 椁愰ギ璇︽儏闆嗗悎 + */ + public List selectRzRestaurantDetailList(RzRestaurantDetail rzRestaurantDetail); + + /** + * 鏂板椁愰ギ璇︽儏 + * + * @param rzRestaurantDetail 椁愰ギ璇︽儏 + * @return 缁撴灉 + */ + public int insertRzRestaurantDetail(RzRestaurantDetail rzRestaurantDetail); + + +} diff --git a/evo-admin/src/main/java/com/evo/restaurant/mapper/RzRestaurantImagesMapper.java b/evo-admin/src/main/java/com/evo/restaurant/mapper/RzRestaurantImagesMapper.java new file mode 100644 index 0000000..7ec13d6 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/restaurant/mapper/RzRestaurantImagesMapper.java @@ -0,0 +1,55 @@ +package com.evo.restaurant.mapper; + +import com.evo.restaurant.domain.RzRestaurantImages; + +import java.util.List; + +/** + * 椁愰ギ鐓х墖绠$悊Mapper鎺ュ彛 + * + * @author chenyj + * @date 2024-10-25 + */ +public interface RzRestaurantImagesMapper +{ + /** + * 鏌ヨ椁愰ギ鐓х墖绠$悊 + * + * @param name 鐢ㄦ埛鍚嶇О + * @return 椁愰ギ鐓х墖绠$悊 + */ + public RzRestaurantImages selectRzRestaurantImagesByName(String name); + + /** + * 鏌ヨ椁愰ギ鐓х墖绠$悊 + * + * @param id 涓婚敭ID + * @return 椁愰ギ鐓х墖绠$悊 + */ + public RzRestaurantImages selectRzRestaurantImagesById(Long id); + + /** + * 鏌ヨ椁愰ギ鐓х墖绠$悊鍒楄〃 + * + * @param rzRestaurantImages 椁愰ギ鐓х墖绠$悊 + * @return 椁愰ギ鐓х墖绠$悊闆嗗悎 + */ + public List selectRzRestaurantImagesList(RzRestaurantImages rzRestaurantImages); + + /** + * 鏂板椁愰ギ鐓х墖绠$悊 + * + * @param rzRestaurantImages 椁愰ギ鐓х墖绠$悊 + * @return 缁撴灉 + */ + public int insertRzRestaurantImages(RzRestaurantImages rzRestaurantImages); + + /** + * 淇敼椁愰ギ鐓х墖绠$悊 + * + * @param rzRestaurantImages 椁愰ギ鐓х墖绠$悊 + * @return 缁撴灉 + */ + public int updateRzRestaurantImages(RzRestaurantImages rzRestaurantImages); + +} diff --git a/evo-admin/src/main/java/com/evo/restaurant/mapper/RzRestaurantStatisticsMapper.java b/evo-admin/src/main/java/com/evo/restaurant/mapper/RzRestaurantStatisticsMapper.java new file mode 100644 index 0000000..d3eb333 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/restaurant/mapper/RzRestaurantStatisticsMapper.java @@ -0,0 +1,58 @@ +package com.evo.restaurant.mapper; + +import com.evo.restaurant.domain.RzRestaurantStatistics; +import org.apache.ibatis.annotations.Param; +import java.util.Date; +import java.util.List; + +/** + * 椁愰ギ缁熻Mapper鎺ュ彛 + * + * @author chenyj + * @date 2024-11-18 + */ +public interface RzRestaurantStatisticsMapper +{ + /** + * 鏌ヨ椁愰ギ缁熻 + * + * @param id 椁愰ギ缁熻涓婚敭 + * @return 椁愰ギ缁熻 + */ + public RzRestaurantStatistics selectRzRestaurantStatisticsById(Long id); + + /** + * 鏌ヨ椁愰ギ缁熻鍒楄〃 + * + * @param rzRestaurantStatistics 椁愰ギ缁熻 + * @return 椁愰ギ缁熻闆嗗悎 + */ + public List selectRzRestaurantStatisticsList(RzRestaurantStatistics rzRestaurantStatistics); + + /** + * 鏂板椁愰ギ缁熻 + * + * @param rzRestaurantStatistics 椁愰ギ缁熻 + * @return 缁撴灉 + */ + public int insertRzRestaurantStatistics(RzRestaurantStatistics rzRestaurantStatistics); + + /** + * 淇敼椁愰ギ缁熻 + * + * @param rzRestaurantStatistics 椁愰ギ缁熻 + * @return 缁撴灉 + */ + public int updateRzRestaurantStatistics(RzRestaurantStatistics rzRestaurantStatistics); + + /** + * 鏍规嵁鍛樺伐ID鍜屾椂闂存煡璇㈢粺璁′俊鎭 + * @param staffId + * @param date + * @return + */ + public RzRestaurantStatistics selectRzRestaurantStatisticsByUserIdAndDate(@Param("staffId") Long staffId,@Param("date") Date date); + + public List selectRzRestaurantStatisticsByDate(Date date); + +} diff --git a/evo-admin/src/main/java/com/evo/restaurant/service/IRzRestaurantDetailService.java b/evo-admin/src/main/java/com/evo/restaurant/service/IRzRestaurantDetailService.java new file mode 100644 index 0000000..067a208 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/restaurant/service/IRzRestaurantDetailService.java @@ -0,0 +1,39 @@ +package com.evo.restaurant.service; + +import com.evo.common.core.domain.AjaxResult; +import com.evo.restaurant.domain.RzRestaurantDetail; + +import java.util.List; + +/** + * 椁愰ギ璇︽儏Service鎺ュ彛 + * + * @author chenyj + * @date 2024-09-18 + */ +public interface IRzRestaurantDetailService +{ + + /** + * 鏌ヨ椁愰ギ璇︽儏鍒楄〃 + * + * @param rzRestaurantDetail 椁愰ギ璇︽儏 + * @return 椁愰ギ璇︽儏闆嗗悎 + */ + public List selectRzRestaurantDetailList(RzRestaurantDetail rzRestaurantDetail); + + /** + * 鏂板椁愰ギ璇︽儏 + * + * @param json + * @return 缁撴灉 + */ + public String insertRzRestaurantDetail(String json); + + /** + * 褰撳墠鏃堕棿鐨勫氨椁愪汉鏁 + * @return + */ + public List flushData(); + +} diff --git a/evo-admin/src/main/java/com/evo/restaurant/service/IRzRestaurantImagesService.java b/evo-admin/src/main/java/com/evo/restaurant/service/IRzRestaurantImagesService.java new file mode 100644 index 0000000..645ae61 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/restaurant/service/IRzRestaurantImagesService.java @@ -0,0 +1,40 @@ +package com.evo.restaurant.service; + +import com.evo.common.core.domain.AjaxResult; +import com.evo.restaurant.domain.RzRestaurantImages; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +/** + * 椁愰ギ鐓х墖绠$悊Service鎺ュ彛 + * + * @author chenyj + * @date 2024-10-25 + */ +public interface IRzRestaurantImagesService +{ + /** + * 鏌ヨ椁愰ギ鐓х墖绠$悊鍒楄〃 + * + * @param rzRestaurantImages 椁愰ギ鐓х墖绠$悊 + * @return 椁愰ギ鐓х墖绠$悊闆嗗悎 + */ + public List selectRzRestaurantImagesList(RzRestaurantImages rzRestaurantImages); + + /** + * 鍒犻櫎椁愰ギ鐓х墖绠$悊淇℃伅 + * + * @param id 椁愰ギ鐓х墖绠$悊涓婚敭 + * @return 缁撴灉 + */ + public int deleteRzRestaurantImagesById(Long id); + + /** + * 鏂板鐓х墖绠$悊 + * + * @param name 鐓х墖绠$悊 + * @return 缁撴灉 + */ + public AjaxResult insertRzRestaurantImages(String name, MultipartFile filePath); +} diff --git a/evo-admin/src/main/java/com/evo/restaurant/service/IRzRestaurantStatisticsService.java b/evo-admin/src/main/java/com/evo/restaurant/service/IRzRestaurantStatisticsService.java new file mode 100644 index 0000000..c8fec50 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/restaurant/service/IRzRestaurantStatisticsService.java @@ -0,0 +1,49 @@ +package com.evo.restaurant.service; + +import com.evo.common.core.domain.AjaxResult; +import com.evo.restaurant.domain.RzRestaurantStatistics; +import java.util.List; + +/** + * 椁愰ギ缁熻Service鎺ュ彛 + * + * @author chenyj + * @date 2024-09-18 + */ +public interface IRzRestaurantStatisticsService +{ + /** + * 鏌ヨ椁愰ギ缁熻 + * + * @param id 椁愰ギ缁熻涓婚敭 + * @return 椁愰ギ缁熻 + */ + public RzRestaurantStatistics selectRzRestaurantStatisticsById(Long id); + + /** + * 鏌ヨ椁愰ギ缁熻鍒楄〃 + * + * @param rzRestaurantStatistics 椁愰ギ缁熻 + * @return 椁愰ギ缁熻闆嗗悎 + */ + public List selectRzRestaurantStatisticsList(RzRestaurantStatistics rzRestaurantStatistics); + + /** + * 鏂板椁愰ギ缁熻 + * @return 缁撴灉 + */ + public void insertRzRestaurantStatistics(); + + /** + * 鏍℃鏁版嵁 + * @return + */ + public AjaxResult correct(RzRestaurantStatistics rzRestaurantStatistics); + + /** + * 瀹炰範鐢熷氨椁愬鍑 + * @return + */ + public List selectRzRestaurantStatisticsListBySxs(RzRestaurantStatistics rzRestaurantStatistics); + +} diff --git a/evo-admin/src/main/java/com/evo/restaurant/service/impl/RzRestaurantDetailServiceImpl.java b/evo-admin/src/main/java/com/evo/restaurant/service/impl/RzRestaurantDetailServiceImpl.java new file mode 100644 index 0000000..09d9f16 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/restaurant/service/impl/RzRestaurantDetailServiceImpl.java @@ -0,0 +1,167 @@ +package com.evo.restaurant.service.impl; + +import com.alibaba.fastjson2.JSONObject; +import com.evo.common.constant.Constants; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.restaurant.domain.RzRestaurantDetail; +import com.evo.restaurant.domain.RzRestaurantImages; +import com.evo.restaurant.domain.RzRestaurantStatistics; +import com.evo.restaurant.domain.vo.RestaurantData; +import com.evo.restaurant.domain.vo.RestaurantVo; +import com.evo.restaurant.mapper.RzRestaurantDetailMapper; +import com.evo.restaurant.mapper.RzRestaurantImagesMapper; +import com.evo.restaurant.mapper.RzRestaurantStatisticsMapper; +import com.evo.restaurant.service.IRzRestaurantDetailService; +import com.evo.system.domain.SysStaff; +import com.evo.system.mapper.SysStaffMapper; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +/** + * 椁愰ギ璇︽儏Service涓氬姟灞傚鐞 + * + * @author chenyj + * @date 2024-09-18 + */ +@Service +public class RzRestaurantDetailServiceImpl implements IRzRestaurantDetailService +{ + @Resource + private RzRestaurantDetailMapper rzRestaurantDetailMapper; + @Resource + private SysStaffMapper sysStaffMapper; //鍛樺伐淇℃伅 + @Resource + private RzRestaurantStatisticsMapper rzRestaurantStatisticsMapper; //鍒疯劯缁熻 + @Resource + private RzRestaurantImagesMapper rzRestaurantImagesMapper; //椁愰ギ鎵撳崱淇℃伅 + + /** + * 鏌ヨ椁愰ギ璇︽儏鍒楄〃 + * + * @param rzRestaurantDetail 椁愰ギ璇︽儏 + * @return 椁愰ギ璇︽儏 + */ + @Override + public List selectRzRestaurantDetailList(RzRestaurantDetail rzRestaurantDetail) + { + return rzRestaurantDetailMapper.selectRzRestaurantDetailList(rzRestaurantDetail); + } + /** + * 鏂板椁愰ギ璇︽儏 + * + * @param json 椁愰ギ璇︽儏 + * @return 缁撴灉 + */ + @Override + public String insertRzRestaurantDetail(String json) + { + //闇瑕佽繑鍥炵殑瀵硅薄 + RestaurantVo cfiv = new RestaurantVo(); + RestaurantData cfd = new RestaurantData(); + //鑾峰彇褰撳墠鏃堕棿锛屽鏋滄湭鍦ㄥ氨椁愭椂闂翠箣鍐咃紝涓嶇粺璁℃墦鍗℃鏁 + // 浣跨敤Calendar绫昏幏鍙栧綋鍓嶆椂闂 + Calendar calendar = Calendar.getInstance(); + // 鑾峰彇灏忔椂鏁 + int hour = calendar.get(Calendar.HOUR_OF_DAY); + + //鍒ゆ柇鏄惁鍦ㄥ氨椁愭椂闂达紝濡傛灉鍦ㄥ氨椁愭椂闂存墦鍗℃湁鏁堬紝鍚﹀垯鎵撳崱鏃犳晥 + if(hour!=7&&hour!=8&&hour!=11&&hour!=12&&hour!=13&&hour!=18&&hour!=19&&hour!=20){ + cfiv.setResult(2); + cfiv.setMsg("{\"Result\":1,\"Msg\":\"涓嶅湪鎵撳崱鏃堕棿鍐匼"}"); + return JSONObject.toJSONString(cfiv); + } + + //瑙f瀽鏀跺埌鐨勬暟鎹 + JSONObject jsonObject = JSONObject.parseObject(json); + //鑾峰彇鐢ㄦ埛id + String userId = jsonObject.get("user_id").toString(); + //鏍规嵁鍛樺伐ID鏌ヨ + SysStaff sysStaff = sysStaffMapper.selectSysStaffByUserId(Long.valueOf(userId));//鎵撳崱璁板綍淇℃伅 + //鏌ヨ鍙墦楗崱鐨勪汉鍛樹俊鎭 + RzRestaurantImages img_obj = rzRestaurantImagesMapper.selectRzRestaurantImagesById(Long.valueOf(userId)); + if(StringUtils.isNull(sysStaff) && StringUtils.isNull(img_obj)){ + cfiv.setResult(2); + cfiv.setMsg("{\"Result\":1,\"Msg\":\"楠岃瘉澶辫触,鏈缃冨嫟鏉冮檺\"}"); + return JSONObject.toJSONString(cfiv); + } + + //鏌ヨ鏈杩戜竴娆″埛鑴歌褰 + RzRestaurantDetail restaurantDetail = rzRestaurantDetailMapper.selectRzRestaurantDetailByName(Long.valueOf(userId)); + //鍒ゆ柇鏈鍚庝竴娆℃墦鍗″拰褰撳墠鎵撳崱鏃堕棿鏄惁瓒呰繃3灏忔椂锛屾病鏈夎秴杩囧垯鎻愮ず閲嶅鎵撳崱 + if(StringUtils.isNotNull(restaurantDetail) && (new Date().getTime() - restaurantDetail.getTime().getTime()) < 1000*60*60*3){ + //濡傛灉涓嶆槸绗竴娆℃墦鍗★紝鍒欏脊绐楁彁绀 + cfiv.setResult(1); + cfiv.setMsg("閲嶅鎵撳崱锛侊紒"); + return JSONObject.toJSONString(cfiv); + } + //鏍规嵁鍛樺伐ID鍜屾墦鍗℃椂闂存煡璇㈡湰鏈堢殑鎵撳崱缁熻淇℃伅 + RzRestaurantStatistics restaurantStatistics = rzRestaurantStatisticsMapper.selectRzRestaurantStatisticsByUserIdAndDate(Long.valueOf(userId),new Date()); + //澧炲姞鎵撳崱璁板綍 + RzRestaurantDetail cyFaceInfo = new RzRestaurantDetail(); + cyFaceInfo.setDate(new Date()); + cyFaceInfo.setStaffId(restaurantStatistics.getStaffId()); + cyFaceInfo.setName(restaurantStatistics.getName()); + cyFaceInfo.setTime(new Date()); + //鍒ゆ柇鍒疯劯鏃堕棿鏄棭椁愯繕鏄崍椁愯繕鏄櫄椁 + if(hour>6&&hour<9){ + //璇存槑鏄棭椁 + cyFaceInfo.setSign("鏃╅"); + restaurantStatistics.setBreakfastNumber(restaurantStatistics.getBreakfastNumber() + 1); + }else if(hour>=11&&hour<=14){ + //璇存槑鏄崍椁 + cyFaceInfo.setSign("鍗堥"); + restaurantStatistics.setLunchNumber(restaurantStatistics.getLunchNumber() + 1); + }else if(hour>=18&&hour<=20){ + //璇存槑鏄櫄椁 + cyFaceInfo.setSign("鏅氶"); + restaurantStatistics.setSupperNumber(restaurantStatistics.getSupperNumber() + 1); + } + cyFaceInfo.setDelFlag(Constants.DELETE_FLAG_0); + cyFaceInfo.setCreateTime(new Date()); + int i = rzRestaurantDetailMapper.insertRzRestaurantDetail(cyFaceInfo); + if(i<1){ + cfiv.setResult(2); + cfiv.setMsg("{\"Result\":1,\"Msg\":\"鎵撳崱澶辫触\"}"); + return JSONObject.toJSONString(cfiv); + } + //鍙嶅啓缁熻娆℃暟 + i = rzRestaurantStatisticsMapper.updateRzRestaurantStatistics(restaurantStatistics); + if(i<1){ + cfiv.setResult(2); + cfiv.setMsg("{\"Result\":1,\"Msg\":\"鎵撳崱澶辫触\"}"); + return JSONObject.toJSONString(cfiv); + } + cfiv.setMsg("{\"Result\":1,\"Msg\":\"鎵撳崱鎴愬姛锛乗"}"); + cfd.setClock_in_count(1); + cfiv.setContent(cfd); + cfiv.setResult(0); + return JSONObject.toJSONString(cfiv); + } + /** + * 缁熻褰撻鍒峰崱浜烘暟 + * @return + */ + public List flushData(){ + // 浣跨敤Calendar绫昏幏鍙栧綋鍓嶆椂闂 + Calendar calendar = Calendar.getInstance(); + // 鑾峰彇灏忔椂鏁 + int hour = calendar.get(Calendar.HOUR_OF_DAY); + RzRestaurantDetail rzRestaurantDetail = new RzRestaurantDetail(); + if(hour == 7 || hour == 8){ + rzRestaurantDetail.setSign("鏃╅"); + }else if(hour == 11 || hour == 12 || hour == 13){ + rzRestaurantDetail.setSign("鍗堥"); + }else { + rzRestaurantDetail.setSign("鏅氶"); + } + rzRestaurantDetail.setDate(new Date()); + return rzRestaurantDetailMapper.selectRzRestaurantDetailList(rzRestaurantDetail); + } + +} diff --git a/evo-admin/src/main/java/com/evo/restaurant/service/impl/RzRestaurantImagesServiceImpl.java b/evo-admin/src/main/java/com/evo/restaurant/service/impl/RzRestaurantImagesServiceImpl.java new file mode 100644 index 0000000..896c4ff --- /dev/null +++ b/evo-admin/src/main/java/com/evo/restaurant/service/impl/RzRestaurantImagesServiceImpl.java @@ -0,0 +1,199 @@ +package com.evo.restaurant.service.impl; + +import com.alibaba.fastjson2.JSONObject; +import com.evo.common.constant.Constants; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.equipment.domain.vo.StaffData; +import com.evo.equipment.domain.vo.StaffDto; +import com.evo.framework.websocket.WebSocketUsers; +import com.evo.restaurant.domain.RzRestaurantImages; +import com.evo.restaurant.domain.RzRestaurantStatistics; +import com.evo.restaurant.mapper.RzRestaurantImagesMapper; +import com.evo.restaurant.mapper.RzRestaurantStatisticsMapper; +import com.evo.restaurant.service.IRzRestaurantImagesService; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.util.Date; +import java.util.List; + +/** + * 椁愰ギ鐓х墖绠$悊Service涓氬姟灞傚鐞 + * + * @author chenyj + * @date 2024-10-25 + */ +@Service +public class RzRestaurantImagesServiceImpl implements IRzRestaurantImagesService +{ + @Resource + private RzRestaurantImagesMapper rzRestaurantImagesMapper; + @Resource + private RzRestaurantStatisticsMapper rzRestaurantStatisticsMapper; //椁愰ギ缁熻 + + + /** + * 鏌ヨ椁愰ギ鐓х墖绠$悊鍒楄〃 + * + * @param rzRestaurantImages 椁愰ギ鐓х墖绠$悊 + * @return 椁愰ギ鐓х墖绠$悊 + */ + @Override + public List selectRzRestaurantImagesList(RzRestaurantImages rzRestaurantImages) + { + return rzRestaurantImagesMapper.selectRzRestaurantImagesList(rzRestaurantImages); + } + + /** + * 鍒犻櫎椁愰ギ鐓х墖绠$悊淇℃伅 + * + * @param id 椁愰ギ鐓х墖绠$悊涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteRzRestaurantImagesById(Long id) + { + //鏍规嵁id鏌ヨ淇℃伅 + RzRestaurantImages rzRestaurantImages = rzRestaurantImagesMapper.selectRzRestaurantImagesById(id); + //鍒犻櫎鎵撳崱鏈虹収鐗 + String message = ""; + //闇瑕佽繑鍥炵殑瀵硅薄 + StaffDto cau = new StaffDto(); + //鍙戦佺殑鏁版嵁 + StaffData caud = new StaffData(); + //璇ユ帴鍙e浐瀹氫负to_device锛屽彂閫佺粰璁惧鐢ㄤ簬璇嗗埆瀵瑰簲鍝釜鎸囦护 + cau.setCmd("to_device"); + //鏃犵敤鍊硷紝绌轰覆 + cau.setForm(""); + //璁惧鍙 + cau.setTo(com.evo.equipment.constant.Constants.EQ_DEVICE_CODE); + //缁欐湇鍔$棰勭暀鐨勮ˉ鍏呭瓧娈碉紝璁惧绔笉澶勭悊杩欎釜瀛楁鍐呭銆傝澶囧湪鍝嶅簲杩欐潯鎸囦护鏃跺師鏍疯繑鍥 + cau.setExtra(""); + //鍙戦佺殑鏁版嵁 + caud.setCmd("delUser"); + caud.setUser_type(0); + caud.setUser_id(id+""); + cau.setData(caud); + //璋冪敤websocket锛屾帹閫佺粰璁惧 + WebSocketUsers.sendMessageToUsersByText(JSONObject.toJSONString(cau)); + //鍒犻櫎鐓х墖 + String img_name = rzRestaurantImages.getImageUrl().substring(rzRestaurantImages.getImageUrl().lastIndexOf("/")+1); + File file = new File(com.evo.equipment.constant.Constants.STAFF_IMAGE_ADDRESS + img_name); + if(file.exists()){ + file.delete(); + } + rzRestaurantImages.setDelFlag(Constants.DELETE_FLAG_1); + rzRestaurantImages.setUpdateTime(new Date()); + rzRestaurantImages.setUpdateBy(SecurityUtils.getUsername()); + return rzRestaurantImagesMapper.updateRzRestaurantImages(rzRestaurantImages); + } + + /** + * 鏂板鐓х墖绠$悊 + * + * @param name 鐓х墖绠$悊 + * @return 缁撴灉 + */ + @Override + public AjaxResult insertRzRestaurantImages(String name, MultipartFile filePath) + { + String originalFilename = filePath.getOriginalFilename(); + //鏍¢獙鏂囦欢鍚庣紑 + String suffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1); // 杈撳嚭 "txt" + //鍒ゆ柇鏄惁鏄浘鐗囨枃浠 + if(!"jpg".equals(suffix)&&!"jpeg".equals(suffix)&&!"png".equals(suffix)){ + return AjaxResult.error("绂佹闈炴硶鏂囦欢涓婁紶锛"); + }else{ + //淇濆瓨鍥剧墖 + InputStream is = null; + FileOutputStream fos = null; + BufferedOutputStream bos = null; + try { + is = filePath.getInputStream(); + byte[] bytes = new byte[is.available()]; + is.read(bytes); + File file = new File(com.evo.equipment.constant.Constants.STAFF_IMAGE_ADDRESS+originalFilename); + fos = new FileOutputStream(file); + bos = new BufferedOutputStream(fos); + bos.write(bytes); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error(); + }finally { + try{ + if(StringUtils.isNotNull(bos)){ + bos.flush(); + bos.close(); + } + if(StringUtils.isNotNull(fos)){ + fos.close(); + } + if(StringUtils.isNotNull(is)){ + is.close(); + } + }catch (Exception e){ + e.printStackTrace(); + } + } + } + //鍐欏叆鏁版嵁搴 + RzRestaurantImages rzRestaurantImages = new RzRestaurantImages(); + rzRestaurantImages.setName(name); + rzRestaurantImages.setImageUrl(com.evo.equipment.constant.Constants.STAFF_IMAGE_URL+originalFilename); + rzRestaurantImages.setCreateBy(SecurityUtils.getUsername()); + rzRestaurantImages.setCreateTime(DateUtils.getNowDate()); + rzRestaurantImages.setDelFlag(Constants.DELETE_FLAG_0); + int i = rzRestaurantImagesMapper.insertRzRestaurantImages(rzRestaurantImages); + if(i < 1){ + return AjaxResult.error(); + } + //椁愰ギ缁熻 + RzRestaurantStatistics rzRestaurantStatistics = new RzRestaurantStatistics(); + rzRestaurantStatistics.setStaffId(rzRestaurantImages.getId()); + rzRestaurantStatistics.setName(rzRestaurantImages.getName()); + rzRestaurantStatistics.setMonth(DateUtils.getNowDate()); + rzRestaurantStatistics.setCreateTime(DateUtils.getNowDate()); + rzRestaurantStatistics.setDelFlag(Constants.DELETE_FLAG_0); + rzRestaurantStatistics.setCreateBy(SecurityUtils.getUsername()); + i = rzRestaurantStatisticsMapper.insertRzRestaurantStatistics(rzRestaurantStatistics); + if(i < 1){ + return AjaxResult.error(); + } + /** 涓婁紶鎵撳崱鏈 */ + //闇瑕佽繑鍥炵殑瀵硅薄 + StaffDto cau = new StaffDto(); + //鍙戦佺殑鏁版嵁 + StaffData caud = new StaffData(); + //鎸囧畾鎵撳崱鏈轰紶杈撶収鐗 + //璇ユ帴鍙e浐瀹氫负to_device锛屽彂閫佺粰璁惧鐢ㄤ簬璇嗗埆瀵瑰簲鍝釜鎸囦护 + cau.setCmd("to_device"); + //鏃犵敤鍊硷紝绌轰覆 + cau.setForm(""); + //璁惧鍙 + cau.setTo(com.evo.equipment.constant.Constants.EQ_DEVICE_CODE); + //缁欐湇鍔$棰勭暀鐨勮ˉ鍏呭瓧娈碉紝璁惧绔笉澶勭悊杩欎釜瀛楁鍐呭銆傝澶囧湪鍝嶅簲杩欐潯鎸囦护鏃跺師鏍疯繑鍥 + cau.setExtra(""); + //鍙戦佺殑鏁版嵁 + caud.setCmd("addUser"); + caud.setUser_id(rzRestaurantImages.getId().toString()); + caud.setName(name); + caud.setTts_name(""); + caud.setFace_template(com.evo.equipment.constant.Constants.STAFF_IMAGE_URL+originalFilename); + caud.setEffect_time(""); + caud.setId_valid(""); + caud.setIc(""); + caud.setPhone(""); + caud.setMode(0); + cau.setData(caud); + //璋冪敤websocket锛屾帹閫佺粰璁惧 + WebSocketUsers.sendMessageToUsersByText(JSONObject.toJSONString(cau)); + return AjaxResult.success(); + } +} diff --git a/evo-admin/src/main/java/com/evo/restaurant/service/impl/RzRestaurantStatisticsServiceImpl.java b/evo-admin/src/main/java/com/evo/restaurant/service/impl/RzRestaurantStatisticsServiceImpl.java new file mode 100644 index 0000000..2e0441e --- /dev/null +++ b/evo-admin/src/main/java/com/evo/restaurant/service/impl/RzRestaurantStatisticsServiceImpl.java @@ -0,0 +1,187 @@ +package com.evo.restaurant.service.impl; + +import com.evo.common.constant.Constants; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.domain.entity.SysDictData; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.StringUtils; +import com.evo.restaurant.domain.RzRestaurantDetail; +import com.evo.restaurant.domain.RzRestaurantImages; +import com.evo.restaurant.domain.RzRestaurantStatistics; +import com.evo.restaurant.mapper.RzRestaurantDetailMapper; +import com.evo.restaurant.mapper.RzRestaurantImagesMapper; +import com.evo.restaurant.mapper.RzRestaurantStatisticsMapper; +import com.evo.restaurant.service.IRzRestaurantStatisticsService; +import com.evo.system.domain.SysStaff; +import com.evo.system.domain.SysStaffDetail; +import com.evo.system.mapper.*; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.List; + +/** + * 椁愰ギ缁熻Service涓氬姟灞傚鐞 + * + * @author chenyj + * @date 2024-09-18 + */ +@Service +public class RzRestaurantStatisticsServiceImpl implements IRzRestaurantStatisticsService +{ + @Resource + private RzRestaurantStatisticsMapper rzRestaurantStatisticsMapper; + @Resource + private SysDeptMapper deptMapper; //閮ㄩ棬淇℃伅 + @Resource + private SysStaffMapper sysStaffMapper; //鍛樺伐淇℃伅 + @Resource + private SysStaffDetailMapper sysStaffDetailMapper; //鍛樺伐璇︽儏 + @Resource + private RzRestaurantImagesMapper rzRestaurantImagesMapper; //鐮旂┒鐢熶汉鍛 + @Resource + private SysDictDataMapper sysDictDataMapper; //鏁版嵁瀛楀吀 + @Resource + private RzRestaurantDetailMapper rzRestaurantDetailMapper; //椁愰ギ璇︽儏 + /** + * 鏌ヨ椁愰ギ缁熻 + * + * @param id 椁愰ギ缁熻涓婚敭 + * @return 椁愰ギ缁熻 + */ + @Override + public RzRestaurantStatistics selectRzRestaurantStatisticsById(Long id) + { + return rzRestaurantStatisticsMapper.selectRzRestaurantStatisticsById(id); + } + /** + * 鏌ヨ椁愰ギ缁熻鍒楄〃 + * + * @param rzRestaurantStatistics 椁愰ギ缁熻 + * @return 椁愰ギ缁熻 + */ + @Override + public List selectRzRestaurantStatisticsList(RzRestaurantStatistics rzRestaurantStatistics) + { + List res_list = rzRestaurantStatisticsMapper.selectRzRestaurantStatisticsList(rzRestaurantStatistics); + for (RzRestaurantStatistics restaurantStatistics : res_list) { + restaurantStatistics.setCompanyName(deptMapper.selectDeptById(restaurantStatistics.getDeptId()).getDeptName()); + } + return res_list; + } + /** + * 鏂板椁愰ギ缁熻 + * @return 缁撴灉 + */ + @Override + public void insertRzRestaurantStatistics() + { + //鑾峰彇鍦ㄨ亴鍛樺伐 + List st_list = sysStaffMapper.selectSysStaffListAll(); + //鏌ヨ鍛樺伐鐨勮缁嗕俊鎭 + List dt_list = sysStaffDetailMapper.selectSysStaffDetailList(null); + RzRestaurantStatistics rzRestaurantStatistics = null; + for (SysStaff sysStaff : st_list) { + rzRestaurantStatistics = new RzRestaurantStatistics(); + rzRestaurantStatistics.setStaffId(sysStaff.getUserId()); + rzRestaurantStatistics.setDeptId(sysStaff.getDeptId()); + rzRestaurantStatistics.setName(sysStaff.getName()); + rzRestaurantStatistics.setMonth(DateUtils.getNowDate()); + //鏌ヨ鏃╁崍鏅氫笁椁愭秷璐 + for (SysStaffDetail sysStaffDetail : dt_list) { + if(sysStaff.getUserId() == sysStaffDetail.getStaffId()){ + rzRestaurantStatistics.setBreakfastExpend(sysStaffDetail.getBreakfastExpend()); + rzRestaurantStatistics.setLunchExpend(sysStaffDetail.getLunchExpend()); + rzRestaurantStatistics.setSupperExpend(sysStaffDetail.getSupperExpend()); + } + } + rzRestaurantStatistics.setCreateTime(DateUtils.getNowDate()); + rzRestaurantStatistics.setDelFlag(Constants.DELETE_FLAG_0); + rzRestaurantStatistics.setCreateBy("admin"); + rzRestaurantStatisticsMapper.insertRzRestaurantStatistics(rzRestaurantStatistics); + } + //鑾峰彇鍙悆楗笉鎵撳崱鐨勮亴鍛樺伐 + List img_list = rzRestaurantImagesMapper.selectRzRestaurantImagesList(null); + for (RzRestaurantImages rzRestaurantImages : img_list) { + rzRestaurantStatistics = new RzRestaurantStatistics(); + rzRestaurantStatistics.setStaffId(rzRestaurantImages.getId()); + rzRestaurantStatistics.setName(rzRestaurantImages.getName()); + rzRestaurantStatistics.setMonth(DateUtils.getNowDate()); + rzRestaurantStatistics.setCreateTime(DateUtils.getNowDate()); + rzRestaurantStatistics.setDelFlag(Constants.DELETE_FLAG_0); + rzRestaurantStatistics.setCreateBy("admin"); + rzRestaurantStatisticsMapper.insertRzRestaurantStatistics(rzRestaurantStatistics); + } + } + + /** + * 鏍℃鏁版嵁 + * @return + */ + @Override + public AjaxResult correct(RzRestaurantStatistics rzRestaurantStatistics){ + if(StringUtils.isNull(rzRestaurantStatistics) || StringUtils.isNull(rzRestaurantStatistics.getMonth())){ + return AjaxResult.error("璇疯緭鍏ユ牎姝f棩鏈燂紒锛"); + } + //鏍规嵁鏃ユ湡鏌ヨ缁熻鏃ユ湡鍐呯殑缁熻淇℃伅 + List rt_list = rzRestaurantStatisticsMapper.selectRzRestaurantStatisticsList(rzRestaurantStatistics); + //鏍规嵁鏈堜唤缁熻鎵撳崱淇℃伅 + RzRestaurantDetail rzRestaurantDetail = new RzRestaurantDetail(); + rzRestaurantDetail.setMonth(rzRestaurantStatistics.getMonth()); + List rd_list = rzRestaurantDetailMapper.selectRzRestaurantDetailList(rzRestaurantDetail); + //鏌ヨ娑堣垂鎯呭喌 + List dic_list = sysDictDataMapper.selectDictDataByType(Constants.SYS_RESTAUTANT); + //寰幆缁熻淇℃伅 + for (RzRestaurantStatistics restaurantStatistics : rt_list) { + //璁板綍鏃╁崍鏅氫笁椁愭鏁 + Long breakfast = 0l; + Long lunch = 0l; + Long supper = 0l; + //寰幆鎵撳崱璇︽儏 + for (RzRestaurantDetail restaurantDetail : rd_list) { + if(restaurantStatistics.getStaffId() == restaurantDetail.getStaffId()){ + if("鏃╅".equals(restaurantDetail.getSign())){ + breakfast += 1; + continue; + } + if("鍗堥".equals(restaurantDetail.getSign())){ + lunch += 1; + continue; + } + if("鏅氶".equals(restaurantDetail.getSign())){ + supper += 1; + } + } + } + restaurantStatistics.setBreakfastNumber(breakfast); + restaurantStatistics.setLunchNumber(lunch); + restaurantStatistics.setSupperNumber(supper); + //璁$畻璐圭敤 + restaurantStatistics.setBreakfastPreSumExpend(restaurantStatistics.getBreakfastExpend().multiply(new BigDecimal(restaurantStatistics.getBreakfastNumber()))); + restaurantStatistics.setLunchPreSumExpend(restaurantStatistics.getLunchExpend().multiply(new BigDecimal(restaurantStatistics.getLunchNumber()))); + restaurantStatistics.setSupperPreSumExpend(restaurantStatistics.getSupperExpend().multiply(new BigDecimal(restaurantStatistics.getSupperNumber()))); + for (SysDictData sysDictData : dic_list) { + if(sysDictData.getDictLabel().indexOf("鏃╅") != -1){ + restaurantStatistics.setBreakfastSumExpend(new BigDecimal(sysDictData.getDictValue()).multiply(new BigDecimal(restaurantStatistics.getBreakfastNumber()))); + } + if(sysDictData.getDictLabel().indexOf("鍗堥") != -1){ + restaurantStatistics.setLunchSumExpend(new BigDecimal(sysDictData.getDictValue()).multiply(new BigDecimal(restaurantStatistics.getLunchNumber()))); + } + if(sysDictData.getDictLabel().indexOf("鏅氶") != -1){ + restaurantStatistics.setSupperSumExpend(new BigDecimal(sysDictData.getDictValue()).multiply(new BigDecimal(restaurantStatistics.getSupperNumber()))); + } + } + restaurantStatistics.setPersonalSumConsumption(restaurantStatistics.getBreakfastPreSumExpend().add(restaurantStatistics.getLunchPreSumExpend()) + .add(restaurantStatistics.getSupperPreSumExpend())); + restaurantStatistics.setSumConsumption(restaurantStatistics.getBreakfastSumExpend().add(restaurantStatistics.getLunchSumExpend()) + .add(restaurantStatistics.getSupperSumExpend())); + rzRestaurantStatisticsMapper.updateRzRestaurantStatistics(restaurantStatistics); + } + return AjaxResult.success(); + } + @Override + public List selectRzRestaurantStatisticsListBySxs(RzRestaurantStatistics rzRestaurantStatistics){ + return rzRestaurantStatisticsMapper.selectRzRestaurantStatisticsByDate(rzRestaurantStatistics.getMonth()); + } + +} diff --git a/evo-admin/src/main/java/com/evo/restaurant/utils/ExcelUtilCy.java b/evo-admin/src/main/java/com/evo/restaurant/utils/ExcelUtilCy.java new file mode 100644 index 0000000..67135ac --- /dev/null +++ b/evo-admin/src/main/java/com/evo/restaurant/utils/ExcelUtilCy.java @@ -0,0 +1,1008 @@ +package com.evo.restaurant.utils; + +import com.evo.common.annotation.Excel; +import com.evo.common.annotation.Excel.ColumnType; +import com.evo.common.annotation.Excel.Type; +import com.evo.common.annotation.Excels; +import com.evo.common.config.EvoConfig; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.text.Convert; +import com.evo.common.exception.CustomException; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.poi.ExcelUtil; +import com.evo.common.utils.reflect.ReflectUtils; +import org.apache.poi.hssf.usermodel.HSSFDateUtil; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddressList; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.apache.poi.xssf.usermodel.XSSFDataValidation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.*; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * Excel鐩稿叧澶勭悊 + * + * @author ruoyi + */ +public class ExcelUtilCy{ + private static final Logger log = LoggerFactory.getLogger(ExcelUtil.class); + + /** + * Excel sheet鏈澶ц鏁帮紝榛樿65536 + */ + public static final int sheetSize = 65536; + + /** + * 宸ヤ綔琛ㄥ悕绉 + */ + private String sheetName; + + /** + * 鍚勪釜閮ㄩ棬宸ヤ綔琛ㄥ悕绉 + */ + private List sheetNameList; + + /** + * 瀵煎嚭绫诲瀷锛圗XPORT:瀵煎嚭鏁版嵁锛汭MPORT锛氬鍏ユā鏉匡級 + */ + private Type type; + + /** + * 宸ヤ綔钖勫璞 + */ + private Workbook wb; + + /** + * 宸ヤ綔琛ㄥ璞 + */ + private Sheet sheet; + + /** + * 鏍峰紡鍒楄〃 + */ + private Map styles; + + /** + * 瀵煎叆瀵煎嚭鏁版嵁鍒楄〃 + */ + private List list; + + /** + * 瀵煎叆瀵煎嚭鍚勪釜閮ㄩ棬鏁版嵁鍒楄〃 + */ + private List> lists; + + /** + * 娉ㄨВ鍒楄〃 + */ + private List fields; + + /** + * 瀹炰綋瀵硅薄 + */ + public Class clazz; + + public ExcelUtilCy(Class clazz) + { + this.clazz = clazz; + } + + // 榛樿鍗曞厓鏍煎唴瀹逛负鏁板瓧鏃舵牸寮 + private static DecimalFormat df = new DecimalFormat("0"); + // 榛樿鍗曞厓鏍兼牸寮忓寲鏃ユ湡瀛楃涓 + private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + // 鏍煎紡鍖栨暟瀛 + private static DecimalFormat nf = new DecimalFormat("0.00"); + + public void init(List list,List> lists, String sheetName,List sheetNameList,Type type){ + if (list == null){ + list = new ArrayList(); + } + if(sheetNameList == null){ + sheetNameList = new ArrayList(); + } + this.list = list; + this.lists = lists; + this.sheetName = sheetName; + this.sheetNameList = sheetNameList; + this.type = type; + createExcelField(); + createWorkbook(); + } + + /** + * 瀵筫xcel琛ㄥ崟榛樿绗竴涓储寮曞悕杞崲鎴恖ist + * + * @param is 杈撳叆娴 + * @return 杞崲鍚庨泦鍚 + */ + public List importExcel(InputStream is) throws Exception + { + return importExcel(StringUtils.EMPTY, is); + } + + /** + * 瀵筫xcel琛ㄥ崟鎸囧畾琛ㄦ牸绱㈠紩鍚嶈浆鎹㈡垚list + * + * @param sheetName 琛ㄦ牸绱㈠紩鍚 + * @param is 杈撳叆娴 + * @return 杞崲鍚庨泦鍚 + */ + public List importExcel(String sheetName, InputStream is) throws Exception + { + this.type = Type.IMPORT; + this.wb = WorkbookFactory.create(is); + List list = new ArrayList(); + Sheet sheet = null; + if (StringUtils.isNotEmpty(sheetName)) + { + // 濡傛灉鎸囧畾sheet鍚,鍒欏彇鎸囧畾sheet涓殑鍐呭. + sheet = wb.getSheet(sheetName); + } + else + { + // 濡傛灉浼犲叆鐨剆heet鍚嶄笉瀛樺湪鍒欓粯璁ゆ寚鍚戠1涓猻heet. + sheet = wb.getSheetAt(0); + } + + if (sheet == null) + { + throw new IOException("鏂囦欢sheet涓嶅瓨鍦"); + } + + int rows = sheet.getPhysicalNumberOfRows(); + + if (rows > 0) + { + // 瀹氫箟涓涓猰ap鐢ㄤ簬瀛樻斁excel鍒楃殑搴忓彿鍜宖ield. + Map cellMap = new HashMap(); + // 鑾峰彇琛ㄥご + Row heard = sheet.getRow(0); + for (int i = 0; i < heard.getPhysicalNumberOfCells(); i++) + { + Cell cell = heard.getCell(i); + if (StringUtils.isNotNull(cell)) + { + String value = this.getCellValue(heard, i).toString(); + cellMap.put(value, i); + } + else + { + cellMap.put(null, i); + } + } + // 鏈夋暟鎹椂鎵嶅鐞 寰楀埌绫荤殑鎵鏈塮ield. + Field[] allFields = clazz.getDeclaredFields(); + // 瀹氫箟涓涓猰ap鐢ㄤ簬瀛樻斁鍒楃殑搴忓彿鍜宖ield. + Map fieldsMap = new HashMap(); + for (int col = 0; col < allFields.length; col++) + { + Field field = allFields[col]; + Excel attr = field.getAnnotation(Excel.class); + if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) + { + // 璁剧疆绫荤殑绉佹湁瀛楁灞炴у彲璁块棶. + field.setAccessible(true); + Integer column = cellMap.get(attr.name()); + fieldsMap.put(column, field); + } + } + for (int i = 1; i < rows; i++) + { + // 浠庣2琛屽紑濮嬪彇鏁版嵁,榛樿绗竴琛屾槸琛ㄥご. + Row row = sheet.getRow(i); + T entity = null; + for (Map.Entry entry : fieldsMap.entrySet()) + { + Object val = this.getCellValue(row, entry.getKey()); + + // 濡傛灉涓嶅瓨鍦ㄥ疄渚嬪垯鏂板缓. + entity = (entity == null ? clazz.newInstance() : entity); + // 浠巑ap涓緱鍒板搴斿垪鐨刦ield. + Field field = fieldsMap.get(entry.getKey()); + // 鍙栧緱绫诲瀷,骞舵牴鎹璞$被鍨嬭缃. + Class fieldType = field.getType(); + if (String.class == fieldType) + { + String s = Convert.toStr(val); + if (StringUtils.endsWith(s, ".0")) + { + val = StringUtils.substringBefore(s, ".0"); + } + else + { + val = Convert.toStr(val); + } + } + else if ((Integer.TYPE == fieldType) || (Integer.class == fieldType)) + { + val = Convert.toInt(val); + } + else if ((Long.TYPE == fieldType) || (Long.class == fieldType)) + { + val = Convert.toLong(val); + } + else if ((Double.TYPE == fieldType) || (Double.class == fieldType)) + { + val = Convert.toDouble(val); + } + else if ((Float.TYPE == fieldType) || (Float.class == fieldType)) + { + val = Convert.toFloat(val); + } + else if (BigDecimal.class == fieldType) + { + val = Convert.toBigDecimal(val); + } + else if (Date.class == fieldType) + { + if (val instanceof String) + { + val = DateUtils.parseDate(val); + } + else if (val instanceof Double) + { + val = DateUtil.getJavaDate((Double) val); + } + } + if (StringUtils.isNotNull(fieldType)) + { + Excel attr = field.getAnnotation(Excel.class); + String propertyName = field.getName(); + if (StringUtils.isNotEmpty(attr.targetAttr())) + { + propertyName = field.getName() + "." + attr.targetAttr(); + } + else if (StringUtils.isNotEmpty(attr.readConverterExp())) + { + val = reverseByExp(String.valueOf(val), attr.readConverterExp()); + } + ReflectUtils.invokeSetter(entity, propertyName, val); + } + } + list.add(entity); + } + } + return list; + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @param list 瀵煎嚭鏁版嵁闆嗗悎 + * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О + * @return 缁撴灉 + */ + public AjaxResult exportExcel(List list, List> lists, String sheetName, List sheetNameList){ + this.init(list,lists,sheetName,sheetNameList,Type.EXPORT); + return exportExcel(); + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @return 缁撴灉 + */ + public AjaxResult exportExcel(){ + OutputStream out = null; + try{ + // 鍙栧嚭涓鍏辨湁澶氬皯涓猻heet. + double sheetNo = 0; + sheetNo = sheetNameList.size(); + for (int index = 0; index <= sheetNo; index++){ + createSheet(sheetNo, index); + //sheet1鍜屽悗杈圭殑sheet琛ㄥご涓嶄竴鑷达紝鎵浠ラ渶瑕佸垎寮澶勭悊 + // 浜х敓涓琛 + Row row = sheet.createRow(0); + int column = 0; + // 鍐欏叆鍚勪釜瀛楁鐨勫垪澶村悕绉 + //褰搃ndex涓0鏃,榛樿鏄涓涓猻heet,闇瑕佹妸list[1]濮撳悕鍒楀垹鎺 + List fields2 = new ArrayList<>(); + fields2.addAll(fields); + for (int i = 0; i < fields2.size();i++){ + Object[] os = fields2.get(i); + Excel excel = (Excel) os[1]; + this.createCell(excel, row, column++,index); + } + if (Type.EXPORT.equals(type)){ + fillExcelData(index, row); + } + } + String filename = encodingFilename(sheetName); + out = new FileOutputStream(getAbsoluteFile(filename)); + wb.write(out); + return AjaxResult.success(filename); + }catch (Exception e){ + log.error("瀵煎嚭Excel寮傚父{}", e.getMessage()); + throw new CustomException("瀵煎嚭Excel澶辫触锛岃鑱旂郴缃戠珯绠$悊鍛橈紒"); + } + finally{ + if (wb != null) + { + try + { + wb.close(); + } + catch (IOException e1) + { + e1.printStackTrace(); + } + } + if (out != null) + { + try + { + out.close(); + } + catch (IOException e1) + { + e1.printStackTrace(); + } + } + } + } + + /** + * 濉厖excel鏁版嵁 + * + * @param index 搴忓彿 + * @param row 鍗曞厓鏍艰 + */ + public void fillExcelData(int index, Row row){ + int startNo = 0; + int endNo = 0; + if(index == 0){ + endNo = Math.min(startNo + sheetSize, list.size()); + }else{ + endNo = Math.min(startNo + sheetSize, lists.get(index-1).size()); + } + for (int i = startNo; i < endNo; i++){ + row = sheet.createRow(i + 1 - startNo); + // 寰楀埌瀵煎嚭瀵硅薄. + T vo = null; + if(index == 0){ + vo = (T) list.get(i); + }else{ + vo = (T) lists.get(index-1).get(i); + } + int column = 0; + //褰搃ndex涓0鏃,榛樿鏄涓涓猻heet,闇瑕佹妸list[1]濮撳悕鍒楀垹鎺 + List fields2 = new ArrayList<>(); + fields2.addAll(fields); + for (Object[] os : fields2){ + Field field = (Field) os[0]; + Excel excel = (Excel) os[1]; + // 璁剧疆瀹炰綋绫荤鏈夊睘鎬у彲璁块棶 + field.setAccessible(true); + this.addCell(excel, row, vo, field, column++,index); + } + } + + } + + /** + * 鍒涘缓琛ㄦ牸鏍峰紡 + * + * @param wb 宸ヤ綔钖勫璞 + * @return 鏍峰紡鍒楄〃 + */ + private Map createStyles(Workbook wb) + { + // 鍐欏叆鍚勬潯璁板綍,姣忔潯璁板綍瀵瑰簲excel琛ㄤ腑鐨勪竴琛 + Map styles = new HashMap(); + CellStyle style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setBorderRight(BorderStyle.THIN); + style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderLeft(BorderStyle.THIN); + style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderTop(BorderStyle.THIN); + style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderBottom(BorderStyle.THIN); + style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + Font dataFont = wb.createFont(); + dataFont.setFontName("瀹嬩綋"); + dataFont.setFontHeightInPoints((short) 10); + style.setFont(dataFont); +// style.setWrapText(true);//鑷姩鎹㈣ + styles.put("data", style); + + style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + Font dataFonts = wb.createFont(); + dataFont.setFontName("瀹嬩綋"); + dataFont.setFontHeightInPoints((short) 9); + style.setFont(dataFonts); + styles.put("datas", style); + + style = wb.createCellStyle(); + style.cloneStyleFrom(styles.get("data")); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); +// style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex()); +// style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + Font headerFont = wb.createFont(); + headerFont.setFontName("瀹嬩綋"); + headerFont.setFontHeightInPoints((short) 11); +// headerFont.setBold(true); +// headerFont.setColor(IndexedColors.WHITE.getIndex()); + style.setFont(headerFont); + style.setWrapText(true);//鑷姩鎹㈣ + styles.put("header", style); + + style = wb.createCellStyle(); + style.cloneStyleFrom(styles.get("datas")); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + Font footerFont = wb.createFont(); + footerFont.setFontName("瀹嬩綋"); + footerFont.setFontHeightInPoints((short) 12); + style.setFont(footerFont); + styles.put("footer", style); + + style = wb.createCellStyle(); + style.cloneStyleFrom(styles.get("data")); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + Font titleFont = wb.createFont(); + titleFont.setFontName("瀹嬩綋"); + titleFont.setFontHeightInPoints((short) 18); + style.setFont(titleFont); + styles.put("title", style); + + return styles; + } + + /** + * 鍒涘缓鍗曞厓鏍 + */ + public Cell createCell(Excel attr, Row row, int column,int index){ + // 鍒涘缓鍒 + Cell cell = row.createCell(column); + // 鍐欏叆鍒椾俊鎭 + cell.setCellValue(attr.name()); + setDataValidation(attr, row, column,index); + cell.setCellStyle(styles.get("header")); + return cell; + } + + /** + * 璁剧疆鍗曞厓鏍间俊鎭 + * + * @param value 鍗曞厓鏍煎 + * @param attr 娉ㄨВ鐩稿叧 + * @param cell 鍗曞厓鏍间俊鎭 + */ + public void setCellVo(Object value, Excel attr, Cell cell) + { + if (ColumnType.STRING == attr.cellType()) + { + cell.setCellType(CellType.NUMERIC); + cell.setCellValue(StringUtils.isNull(value) ? attr.defaultValue() : value + attr.suffix()); + } + else if (ColumnType.NUMERIC == attr.cellType()) + { + cell.setCellType(CellType.NUMERIC); + cell.setCellValue(Integer.parseInt(value + "")); + } + } + + /** + * 鍒涘缓琛ㄦ牸鏍峰紡 + */ + public void setDataValidation(Excel attr, Row row, int column,int index){ + if(index == 0){ + if (attr.name().indexOf("娉細") >= 0){ + sheet.setColumnWidth(column, 6000); + }else{ + if(column==0){ + // 璁剧疆鍒楀 + sheet.setColumnWidth(column, (int) ((attr.width()) * 120)); + }else if(column==2||column==3||column==4||column==6||column==7||column==9||column==11){ + // 璁剧疆鍒楀 + sheet.setColumnWidth(column, (int) ((attr.width()) * 115)); + }else{ + // 璁剧疆鍒楀 + sheet.setColumnWidth(column, (int) ((attr.width()) * 130)); + } + row.setHeight((short) (attr.height() * 50)); + } + // 濡傛灉璁剧疆浜嗘彁绀轰俊鎭垯榧犳爣鏀句笂鍘绘彁绀. + if (StringUtils.isNotEmpty(attr.prompt())){ + // 杩欓噷榛樿璁句簡2-101鍒楁彁绀. + setXSSFPrompt(sheet, "", attr.prompt(), 1, 100, column, column); + } + // 濡傛灉璁剧疆浜哻ombo灞炴у垯鏈垪鍙兘閫夋嫨涓嶈兘杈撳叆 + if (attr.combo().length > 0){ + // 杩欓噷榛樿璁句簡2-101鍒楀彧鑳介夋嫨涓嶈兘杈撳叆. + setXSSFValidation(sheet, attr.combo(), 1, 100, column, column); + } + }else{ + if (attr.name().indexOf("娉細") >= 0){ + sheet.setColumnWidth(column, 6000); + }else{ + if(column==0){ + // 璁剧疆鍒楀 + sheet.setColumnWidth(column, (int) ((attr.width()) * 120)); + }else if(column==2||column==3||column==4||column==6||column==7||column==9||column==11){ + // 璁剧疆鍒楀 + sheet.setColumnWidth(column, (int) ((attr.width()) * 100)); + }else{ + // 璁剧疆鍒楀 + sheet.setColumnWidth(column, (int) ((attr.width()) * 110)); + } + row.setHeight((short) (attr.height() * 50)); + } + // 濡傛灉璁剧疆浜嗘彁绀轰俊鎭垯榧犳爣鏀句笂鍘绘彁绀. + if (StringUtils.isNotEmpty(attr.prompt())){ + // 杩欓噷榛樿璁句簡2-101鍒楁彁绀. + setXSSFPrompt(sheet, "", attr.prompt(), 1, 100, column, column); + } + // 濡傛灉璁剧疆浜哻ombo灞炴у垯鏈垪鍙兘閫夋嫨涓嶈兘杈撳叆 + if (attr.combo().length > 0){ + // 杩欓噷榛樿璁句簡2-101鍒楀彧鑳介夋嫨涓嶈兘杈撳叆. + setXSSFValidation(sheet, attr.combo(), 1, 100, column, column); + } + } + } + + /** + * 娣诲姞鍗曞厓鏍 + */ + public Cell addCell(Excel attr, Row row, T vo, Field field, int column,int index){ + Cell cell = null; + try{ + // 璁剧疆琛岄珮 + row.setHeight((short) (attr.height() * 30)); + // 鏍规嵁Excel涓缃儏鍐靛喅瀹氭槸鍚﹀鍑,鏈変簺鎯呭喌闇瑕佷繚鎸佷负绌,甯屾湜鐢ㄦ埛濉啓杩欎竴鍒. + if (attr.isExport()){ + // 鍒涘缓cell + cell = row.createCell(column); + cell.setCellStyle(styles.get("data")); + + // 鐢ㄤ簬璇诲彇瀵硅薄涓殑灞炴 + Object value = getTargetValue(vo, field, attr); + String dateFormat = attr.dateFormat(); + String readConverterExp = attr.readConverterExp(); + if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value)){ + cell.setCellValue(DateUtils.parseDateToStr(dateFormat, (Date) value)); + }else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils.isNotNull(value)){ + cell.setCellValue(convertByExp(String.valueOf(value), readConverterExp)); + }else{ + // 璁剧疆鍒楃被鍨 + setCellVo(value, attr, cell); + } + } + } + catch (Exception e) + { + log.error("瀵煎嚭Excel澶辫触{}", e); + } + return cell; + } + + /** + * 璁剧疆 POI XSSFSheet 鍗曞厓鏍兼彁绀 + * + * @param sheet 琛ㄥ崟 + * @param promptTitle 鎻愮ず鏍囬 + * @param promptContent 鎻愮ず鍐呭 + * @param firstRow 寮濮嬭 + * @param endRow 缁撴潫琛 + * @param firstCol 寮濮嬪垪 + * @param endCol 缁撴潫鍒 + */ + public void setXSSFPrompt(Sheet sheet, String promptTitle, String promptContent, int firstRow, int endRow, + int firstCol, int endCol) + { + DataValidationHelper helper = sheet.getDataValidationHelper(); + DataValidationConstraint constraint = helper.createCustomConstraint("DD1"); + CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol); + DataValidation dataValidation = helper.createValidation(constraint, regions); + dataValidation.createPromptBox(promptTitle, promptContent); + dataValidation.setShowPromptBox(true); + sheet.addValidationData(dataValidation); + } + + /** + * 璁剧疆鏌愪簺鍒楃殑鍊煎彧鑳借緭鍏ラ鍒剁殑鏁版嵁,鏄剧ず涓嬫媺妗. + * + * @param sheet 瑕佽缃殑sheet. + * @param textlist 涓嬫媺妗嗘樉绀虹殑鍐呭 + * @param firstRow 寮濮嬭 + * @param endRow 缁撴潫琛 + * @param firstCol 寮濮嬪垪 + * @param endCol 缁撴潫鍒 + * @return 璁剧疆濂界殑sheet. + */ + public void setXSSFValidation(Sheet sheet, String[] textlist, int firstRow, int endRow, int firstCol, int endCol) + { + DataValidationHelper helper = sheet.getDataValidationHelper(); + // 鍔犺浇涓嬫媺鍒楄〃鍐呭 + DataValidationConstraint constraint = helper.createExplicitListConstraint(textlist); + // 璁剧疆鏁版嵁鏈夋晥鎬у姞杞藉湪鍝釜鍗曞厓鏍间笂,鍥涗釜鍙傛暟鍒嗗埆鏄細璧峰琛屻佺粓姝㈣銆佽捣濮嬪垪銆佺粓姝㈠垪 + CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol); + // 鏁版嵁鏈夋晥鎬у璞 + DataValidation dataValidation = helper.createValidation(constraint, regions); + // 澶勭悊Excel鍏煎鎬ч棶棰 + if (dataValidation instanceof XSSFDataValidation) + { + dataValidation.setSuppressDropDownArrow(true); + dataValidation.setShowErrorBox(true); + } + else + { + dataValidation.setSuppressDropDownArrow(false); + } + + sheet.addValidationData(dataValidation); + } + + /** + * 瑙f瀽瀵煎嚭鍊 0=鐢,1=濂,2=鏈煡 + * + * @param propertyValue 鍙傛暟鍊 + * @param converterExp 缈昏瘧娉ㄨВ + * @return 瑙f瀽鍚庡 + * @throws Exception + */ + public static String convertByExp(String propertyValue, String converterExp) throws Exception + { + try + { + String[] convertSource = converterExp.split(","); + for (String item : convertSource) + { + String[] itemArray = item.split("="); + if (itemArray[0].equals(propertyValue)) + { + return itemArray[1]; + } + } + } + catch (Exception e) + { + throw e; + } + return propertyValue; + } + + /** + * 鍙嶅悜瑙f瀽鍊 鐢=0,濂=1,鏈煡=2 + * + * @param propertyValue 鍙傛暟鍊 + * @param converterExp 缈昏瘧娉ㄨВ + * @return 瑙f瀽鍚庡 + * @throws Exception + */ + public static String reverseByExp(String propertyValue, String converterExp) throws Exception + { + try + { + String[] convertSource = converterExp.split(","); + for (String item : convertSource) + { + String[] itemArray = item.split("="); + if (itemArray[1].equals(propertyValue)) + { + return itemArray[0]; + } + } + } + catch (Exception e) + { + throw e; + } + return propertyValue; + } + + /** + * 缂栫爜鏂囦欢鍚 + */ + public String encodingFilename(String filename) + { +// filename = UUID.randomUUID().toString() + "_" + filename + ".xlsx"; + filename = filename + ".xlsx"; + return filename; + } + + /** + * 鑾峰彇涓嬭浇璺緞 + * + * @param filename 鏂囦欢鍚嶇О + */ + public String getAbsoluteFile(String filename) + { + String downloadPath = EvoConfig.getDownloadPath() + filename; + File desc = new File(downloadPath); + if (!desc.getParentFile().exists()) + { + desc.getParentFile().mkdirs(); + } + return downloadPath; + } + + /** + * 鑾峰彇bean涓殑灞炴у + * + * @param vo 瀹炰綋瀵硅薄 + * @param field 瀛楁 + * @param excel 娉ㄨВ + * @return 鏈缁堢殑灞炴у + * @throws Exception + */ + private Object getTargetValue(T vo, Field field, Excel excel) throws Exception{ + Object o = field.get(vo); + if (StringUtils.isNotEmpty(excel.targetAttr())){ + String target = excel.targetAttr(); + if (target.indexOf(".") > -1){ + String[] targets = target.split("[.]"); + for (String name : targets){ + o = getValue(o, name); + } + }else{ + o = getValue(o, target); + } + } + return o; + } + + /** + * 浠ョ被鐨勫睘鎬х殑get鏂规硶鏂规硶褰㈠紡鑾峰彇鍊 + * + * @param o + * @param name + * @return value + * @throws Exception + */ + private Object getValue(Object o, String name) throws Exception + { + if (StringUtils.isNotEmpty(name)) + { + Class clazz = o.getClass(); + String methodName = "get" + name.substring(0, 1).toUpperCase() + name.substring(1); + Method method = clazz.getMethod(methodName); + o = method.invoke(o); + } + return o; + } + + /** + * 寰楀埌鎵鏈夊畾涔夊瓧娈 + */ + private void createExcelField() + { + this.fields = new ArrayList(); + List tempFields = new ArrayList<>(); + tempFields.addAll(Arrays.asList(clazz.getSuperclass().getDeclaredFields())); + tempFields.addAll(Arrays.asList(clazz.getDeclaredFields())); + for (Field field : tempFields) + { + // 鍗曟敞瑙 + if (field.isAnnotationPresent(Excel.class)) + { + putToField(field, field.getAnnotation(Excel.class)); + } + + // 澶氭敞瑙 + if (field.isAnnotationPresent(Excels.class)) + { + Excels attrs = field.getAnnotation(Excels.class); + Excel[] excels = attrs.value(); + for (Excel excel : excels) + { + putToField(field, excel); + } + } + } + } + + /** + * 鏀惧埌瀛楁闆嗗悎涓 + */ + private void putToField(Field field, Excel attr) + { + if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) + { + this.fields.add(new Object[] { field, attr }); + } + } + + /** + * 鍒涘缓涓涓伐浣滅翱 + */ + public void createWorkbook() + { + this.wb = new SXSSFWorkbook(500); + } + + /** + * 鍒涘缓宸ヤ綔琛 + * + * @param sheetNo sheet鏁伴噺 + * @param index 搴忓彿 + */ + public void createSheet(double sheetNo, int index){ + this.sheet = wb.createSheet(); + this.styles = createStyles(wb); + // 璁剧疆宸ヤ綔琛ㄧ殑鍚嶇О. + if (index == 0){ + wb.setSheetName(index, sheetName); + }else{ + wb.setSheetName(index, sheetNameList.get(index-1)); + } + sheet.getPrintSetup().setPaperSize(PrintSetup.A4_PAPERSIZE); + //璁剧疆妯悜鎵撳嵃 + sheet.getPrintSetup().setLandscape(true); + } + + /** + * 鑾峰彇鍗曞厓鏍煎 + * + * @param row 鑾峰彇鐨勮 + * @param column 鑾峰彇鍗曞厓鏍煎垪鍙 + * @return 鍗曞厓鏍煎 + */ + public Object getCellValue(Row row, int column) + { + if (row == null) + { + return row; + } + Object val = ""; + try + { + Cell cell = row.getCell(column); + if (StringUtils.isNotNull(cell)) + { + if (cell.getCellTypeEnum() == CellType.NUMERIC || cell.getCellTypeEnum() == CellType.FORMULA) + { + val = cell.getNumericCellValue(); + if (HSSFDateUtil.isCellDateFormatted(cell)) + { + val = DateUtil.getJavaDate((Double) val); // POI Excel 鏃ユ湡鏍煎紡杞崲 + } + else + { + if ((Double) val % 1 > 0) + { + val = new DecimalFormat("0.00").format(val); + } + else + { + val = new DecimalFormat("0").format(val); + } + } + } + else if (cell.getCellTypeEnum() == CellType.STRING) + { + val = cell.getStringCellValue(); + } + else if (cell.getCellTypeEnum() == CellType.BOOLEAN) + { + val = cell.getBooleanCellValue(); + } + else if (cell.getCellTypeEnum() == CellType.ERROR) + { + val = cell.getErrorCellValue(); + } + + } + } + catch (Exception e) + { + return val; + } + return val; + } + + public static ArrayList> readExcel2007(Sheet sheet) { + if(sheet==null){ + return null; + } + try { + ArrayList> rowList = new ArrayList>(); + ArrayList colList; + Row row; + Cell cell; + Object value; + for (int i = sheet.getFirstRowNum(), rowCount = 0; rowCount < sheet.getPhysicalNumberOfRows(); i++) { + row = sheet.getRow(i); + colList = new ArrayList(); + if (row == null) { + // 褰撹鍙栬涓虹┖鏃 + if (i != sheet.getPhysicalNumberOfRows()) {// 鍒ゆ柇鏄惁鏄渶鍚庝竴琛 + rowList.add(colList); + } + continue; + } else { + rowCount++; + } + for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) { + cell = row.getCell(j); + if (cell == null || cell.getCellType() == CellType.BLANK) { + // 褰撹鍗曞厓鏍间负绌 + if (j != row.getLastCellNum()) {// 鍒ゆ柇鏄惁鏄琛屼腑鏈鍚庝竴涓崟鍏冩牸 + colList.add(""); + } + continue; + } + switch (cell.getCellType()) { + case STRING: + // System.out.println(i + "琛" + j + " 鍒 is String + // type"); + value = cell.getStringCellValue(); + break; + case NUMERIC: + if ("@".equals(cell.getCellStyle().getDataFormatString())) { + value = df.format(cell.getNumericCellValue()); + } else if ("General".equals(cell.getCellStyle().getDataFormatString())) { + value = nf.format(cell.getNumericCellValue()); + } else { + value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())); + } + // System.out.println(i + "琛" + j + // + " 鍒 is Number type ; DateFormt:" + // + value.toString()); + break; + case BOOLEAN: + // System.out.println(i + "琛" + j + " 鍒 is Boolean + // type"); + value = Boolean.valueOf(cell.getBooleanCellValue()); + break; + case BLANK: + // System.out.println(i + "琛" + j + " 鍒 is Blank type"); + value = ""; + break; + default: + // System.out.println(i + "琛" + j + " 鍒 is default + // type"); + value = cell.toString(); + }// end switch + colList.add(value); + } // end for j + rowList.add(colList); + } // end for i + + return rowList; + } catch (Exception e) { + System.out.println("exception"); + return null; + } + } + + public static DecimalFormat getDf() { + return df; + } + + public static void setDf(DecimalFormat df) { + ExcelUtilCy.df = df; + } + + public static SimpleDateFormat getSdf() { + return sdf; + } + + public static void setSdf(SimpleDateFormat sdf) { + ExcelUtilCy.sdf = sdf; + } + + public static DecimalFormat getNf() { + return nf; + } + + public static void setNf(DecimalFormat nf) { + ExcelUtilCy.nf = nf; + } +} diff --git a/evo-admin/src/main/java/com/evo/system/controller/CacheController.java b/evo-admin/src/main/java/com/evo/system/controller/CacheController.java new file mode 100644 index 0000000..d68ee6b --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/controller/CacheController.java @@ -0,0 +1,121 @@ +package com.evo.system.controller; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.Set; +import java.util.TreeSet; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisCallback; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.evo.common.constant.CacheConstants; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.utils.StringUtils; +import com.evo.system.domain.SysCache; + +/** + * 缂撳瓨鐩戞帶 + * + * @author evo + */ +@RestController +@RequestMapping("/monitor/cache") +public class CacheController +{ + @Autowired + private RedisTemplate redisTemplate; + + private final static List caches = new ArrayList(); + { + caches.add(new SysCache(CacheConstants.LOGIN_TOKEN_KEY, "鐢ㄦ埛淇℃伅")); + caches.add(new SysCache(CacheConstants.SYS_CONFIG_KEY, "閰嶇疆淇℃伅")); + caches.add(new SysCache(CacheConstants.SYS_DICT_KEY, "鏁版嵁瀛楀吀")); + caches.add(new SysCache(CacheConstants.CAPTCHA_CODE_KEY, "楠岃瘉鐮")); + caches.add(new SysCache(CacheConstants.REPEAT_SUBMIT_KEY, "闃查噸鎻愪氦")); + caches.add(new SysCache(CacheConstants.RATE_LIMIT_KEY, "闄愭祦澶勭悊")); + caches.add(new SysCache(CacheConstants.PWD_ERR_CNT_KEY, "瀵嗙爜閿欒娆℃暟")); + } + + @PreAuthorize("@ss.hasPermi('monitor:cache:list')") + @GetMapping() + public AjaxResult getInfo() throws Exception + { + Properties info = (Properties) redisTemplate.execute((RedisCallback) connection -> connection.info()); + Properties commandStats = (Properties) redisTemplate.execute((RedisCallback) connection -> connection.info("commandstats")); + Object dbSize = redisTemplate.execute((RedisCallback) connection -> connection.dbSize()); + + Map result = new HashMap<>(3); + result.put("info", info); + result.put("dbSize", dbSize); + + List> pieList = new ArrayList<>(); + commandStats.stringPropertyNames().forEach(key -> { + Map data = new HashMap<>(2); + String property = commandStats.getProperty(key); + data.put("name", StringUtils.removeStart(key, "cmdstat_")); + data.put("value", StringUtils.substringBetween(property, "calls=", ",usec")); + pieList.add(data); + }); + result.put("commandStats", pieList); + return AjaxResult.success(result); + } + + @PreAuthorize("@ss.hasPermi('monitor:cache:list')") + @GetMapping("/getNames") + public AjaxResult cache() + { + return AjaxResult.success(caches); + } + + @PreAuthorize("@ss.hasPermi('monitor:cache:list')") + @GetMapping("/getKeys/{cacheName}") + public AjaxResult getCacheKeys(@PathVariable String cacheName) + { + Set cacheKeys = redisTemplate.keys(cacheName + "*"); + return AjaxResult.success(new TreeSet<>(cacheKeys)); + } + + @PreAuthorize("@ss.hasPermi('monitor:cache:list')") + @GetMapping("/getValue/{cacheName}/{cacheKey}") + public AjaxResult getCacheValue(@PathVariable String cacheName, @PathVariable String cacheKey) + { + String cacheValue = redisTemplate.opsForValue().get(cacheKey); + SysCache sysCache = new SysCache(cacheName, cacheKey, cacheValue); + return AjaxResult.success(sysCache); + } + + @PreAuthorize("@ss.hasPermi('monitor:cache:list')") + @DeleteMapping("/clearCacheName/{cacheName}") + public AjaxResult clearCacheName(@PathVariable String cacheName) + { + Collection cacheKeys = redisTemplate.keys(cacheName + "*"); + redisTemplate.delete(cacheKeys); + return AjaxResult.success(); + } + + @PreAuthorize("@ss.hasPermi('monitor:cache:list')") + @DeleteMapping("/clearCacheKey/{cacheKey}") + public AjaxResult clearCacheKey(@PathVariable String cacheKey) + { + redisTemplate.delete(cacheKey); + return AjaxResult.success(); + } + + @PreAuthorize("@ss.hasPermi('monitor:cache:list')") + @DeleteMapping("/clearCacheAll") + public AjaxResult clearCacheAll() + { + Collection cacheKeys = redisTemplate.keys("*"); + redisTemplate.delete(cacheKeys); + return AjaxResult.success(); + } +} diff --git a/evo-admin/src/main/java/com/evo/system/controller/CommonController.java b/evo-admin/src/main/java/com/evo/system/controller/CommonController.java new file mode 100644 index 0000000..917e9ad --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/controller/CommonController.java @@ -0,0 +1,163 @@ +package com.evo.system.controller; + +import java.util.ArrayList; +import java.util.List; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import com.evo.common.config.EvoConfig; +import com.evo.common.constant.Constants; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.file.FileUploadUtils; +import com.evo.common.utils.file.FileUtils; +import com.evo.framework.config.ServerConfig; + +/** + * 閫氱敤璇锋眰澶勭悊 + * + * @author evo + */ +@RestController +@RequestMapping("/common") +public class CommonController +{ + private static final Logger log = LoggerFactory.getLogger(CommonController.class); + + @Autowired + private ServerConfig serverConfig; + + private static final String FILE_DELIMETER = ","; + + /** + * 閫氱敤涓嬭浇璇锋眰 + * + * @param fileName 鏂囦欢鍚嶇О + * @param delete 鏄惁鍒犻櫎 + */ + @GetMapping("/download") + public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request) + { + try + { + if (!FileUtils.checkAllowDownload(fileName)) + { + throw new Exception(StringUtils.format("鏂囦欢鍚嶇О({})闈炴硶锛屼笉鍏佽涓嬭浇銆 ", fileName)); + } + String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1); + String filePath = EvoConfig.getDownloadPath() + fileName; + + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + FileUtils.setAttachmentResponseHeader(response, realFileName); + FileUtils.writeBytes(filePath, response.getOutputStream()); + if (delete) + { + FileUtils.deleteFile(filePath); + } + } + catch (Exception e) + { + log.error("涓嬭浇鏂囦欢澶辫触", e); + } + } + + /** + * 閫氱敤涓婁紶璇锋眰锛堝崟涓級 + */ + @PostMapping("/upload") + public AjaxResult uploadFile(MultipartFile file) throws Exception + { + try + { + // 涓婁紶鏂囦欢璺緞 + String filePath = EvoConfig.getUploadPath(); + // 涓婁紶骞惰繑鍥炴柊鏂囦欢鍚嶇О + String fileName = FileUploadUtils.upload(filePath, file); + String url = serverConfig.getUrl() + fileName; + AjaxResult ajax = AjaxResult.success(); + ajax.put("url", url); + ajax.put("fileName", fileName); + ajax.put("newFileName", FileUtils.getName(fileName)); + ajax.put("originalFilename", file.getOriginalFilename()); + return ajax; + } + catch (Exception e) + { + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 閫氱敤涓婁紶璇锋眰锛堝涓級 + */ + @PostMapping("/uploads") + public AjaxResult uploadFiles(List files) throws Exception + { + try + { + // 涓婁紶鏂囦欢璺緞 + String filePath = EvoConfig.getUploadPath(); + List urls = new ArrayList(); + List fileNames = new ArrayList(); + List newFileNames = new ArrayList(); + List originalFilenames = new ArrayList(); + for (MultipartFile file : files) + { + // 涓婁紶骞惰繑鍥炴柊鏂囦欢鍚嶇О + String fileName = FileUploadUtils.upload(filePath, file); + String url = serverConfig.getUrl() + fileName; + urls.add(url); + fileNames.add(fileName); + newFileNames.add(FileUtils.getName(fileName)); + originalFilenames.add(file.getOriginalFilename()); + } + AjaxResult ajax = AjaxResult.success(); + ajax.put("urls", StringUtils.join(urls, FILE_DELIMETER)); + ajax.put("fileNames", StringUtils.join(fileNames, FILE_DELIMETER)); + ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER)); + ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER)); + return ajax; + } + catch (Exception e) + { + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 鏈湴璧勬簮閫氱敤涓嬭浇 + */ + @GetMapping("/download/resource") + public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response) + throws Exception + { + try + { + if (!FileUtils.checkAllowDownload(resource)) + { + throw new Exception(StringUtils.format("璧勬簮鏂囦欢({})闈炴硶锛屼笉鍏佽涓嬭浇銆 ", resource)); + } + // 鏈湴璧勬簮璺緞 + String localPath = EvoConfig.getProfile(); + // 鏁版嵁搴撹祫婧愬湴鍧 + String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX); + // 涓嬭浇鍚嶇О + String downloadName = StringUtils.substringAfterLast(downloadPath, "/"); + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + FileUtils.setAttachmentResponseHeader(response, downloadName); + FileUtils.writeBytes(downloadPath, response.getOutputStream()); + } + catch (Exception e) + { + log.error("涓嬭浇鏂囦欢澶辫触", e); + } + } +} diff --git a/evo-admin/src/main/java/com/evo/system/controller/SysDeptController.java b/evo-admin/src/main/java/com/evo/system/controller/SysDeptController.java new file mode 100644 index 0000000..5e1da46 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/controller/SysDeptController.java @@ -0,0 +1,144 @@ +package com.evo.system.controller; + +import java.util.List; + +import com.evo.common.core.domain.TreeSelect; +import org.apache.commons.lang3.ArrayUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.evo.common.annotation.Log; +import com.evo.common.constant.UserConstants; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.domain.entity.SysDept; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.StringUtils; +import com.evo.system.service.ISysDeptService; + +/** + * 閮ㄩ棬淇℃伅 + * + * @author evo + */ +@RestController +@RequestMapping("/system/dept") +public class SysDeptController extends BaseController +{ + @Autowired + private ISysDeptService deptService; + + /** + * 鑾峰彇閮ㄩ棬鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('system:dept:list')") + @GetMapping("/list") + public AjaxResult list(SysDept dept) + { + List depts = deptService.selectDeptList(dept); + return success(depts); + } + + /** + * 鏌ヨ閮ㄩ棬鍒楄〃锛堟帓闄よ妭鐐癸級 + */ + @PreAuthorize("@ss.hasPermi('system:dept:list')") + @GetMapping("/list/exclude/{deptId}") + public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId) + { + List depts = deptService.selectDeptList(new SysDept()); + depts.removeIf(d -> d.getDeptId().intValue() == deptId || ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), deptId + "")); + return success(depts); + } + + /** + * 鏍规嵁閮ㄩ棬缂栧彿鑾峰彇璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('system:dept:query')") + @GetMapping(value = "/{deptId}") + public AjaxResult getInfo(@PathVariable Long deptId) + { + deptService.checkDeptDataScope(deptId); + return success(deptService.selectDeptById(deptId)); + } + + /** + * 鏂板閮ㄩ棬 + */ + @PreAuthorize("@ss.hasPermi('system:dept:add')") + @Log(title = "閮ㄩ棬绠$悊", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysDept dept) + { + if (!deptService.checkDeptNameUnique(dept)) + { + return error("鏂板閮ㄩ棬'" + dept.getDeptName() + "'澶辫触锛岄儴闂ㄥ悕绉板凡瀛樺湪"); + } + dept.setCreateBy(getUsername()); + return toAjax(deptService.insertDept(dept)); + } + + /** + * 淇敼閮ㄩ棬 + */ + @PreAuthorize("@ss.hasPermi('system:dept:edit')") + @Log(title = "閮ㄩ棬绠$悊", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysDept dept) + { + Long deptId = dept.getDeptId(); + deptService.checkDeptDataScope(deptId); + if (!deptService.checkDeptNameUnique(dept)) + { + return error("淇敼閮ㄩ棬'" + dept.getDeptName() + "'澶辫触锛岄儴闂ㄥ悕绉板凡瀛樺湪"); + } + else if (dept.getParentId().equals(deptId)) + { + return error("淇敼閮ㄩ棬'" + dept.getDeptName() + "'澶辫触锛屼笂绾ч儴闂ㄤ笉鑳芥槸鑷繁"); + } + else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) && deptService.selectNormalChildrenDeptById(deptId) > 0) + { + return error("璇ラ儴闂ㄥ寘鍚湭鍋滅敤鐨勫瓙閮ㄩ棬锛"); + } + dept.setUpdateBy(getUsername()); + return toAjax(deptService.updateDept(dept)); + } + + /** + * 鍒犻櫎閮ㄩ棬 + */ + @PreAuthorize("@ss.hasPermi('system:dept:remove')") + @Log(title = "閮ㄩ棬绠$悊", businessType = BusinessType.DELETE) + @DeleteMapping("/{deptId}") + public AjaxResult remove(@PathVariable Long deptId) + { + if (deptService.hasChildByDeptId(deptId)) + { + return warn("瀛樺湪涓嬬骇閮ㄩ棬,涓嶅厑璁稿垹闄"); + } + if (deptService.checkDeptExistUser(deptId)) + { + return warn("閮ㄩ棬瀛樺湪鐢ㄦ埛,涓嶅厑璁稿垹闄"); + } + deptService.checkDeptDataScope(deptId); + return toAjax(deptService.deleteDeptById(deptId)); + } + + /** + * 鏌ヨ閮ㄩ棬鏍 + * @return + */ + @GetMapping("/listAllDepts") + public List listAllDepts() + { + return deptService.selectAllDeptList(); + } +} diff --git a/evo-admin/src/main/java/com/evo/system/controller/SysDictDataController.java b/evo-admin/src/main/java/com/evo/system/controller/SysDictDataController.java new file mode 100644 index 0000000..b2fe6ec --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/controller/SysDictDataController.java @@ -0,0 +1,121 @@ +package com.evo.system.controller; + +import java.util.ArrayList; +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.domain.entity.SysDictData; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.poi.ExcelUtil; +import com.evo.system.service.ISysDictDataService; +import com.evo.system.service.ISysDictTypeService; + +/** + * 鏁版嵁瀛楀吀淇℃伅 + * + * @author evo + */ +@RestController +@RequestMapping("/system/dict/data") +public class SysDictDataController extends BaseController +{ + @Autowired + private ISysDictDataService dictDataService; + + @Autowired + private ISysDictTypeService dictTypeService; + + @PreAuthorize("@ss.hasPermi('system:dict:list')") + @GetMapping("/list") + public TableDataInfo list(SysDictData dictData) + { + startPage(); + List list = dictDataService.selectDictDataList(dictData); + return getDataTable(list); + } + + @Log(title = "瀛楀吀鏁版嵁", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:dict:export')") + @PostMapping("/export") + public void export(HttpServletResponse response, SysDictData dictData) + { + List list = dictDataService.selectDictDataList(dictData); + ExcelUtil util = new ExcelUtil(SysDictData.class); + util.exportExcel(response, list, "瀛楀吀鏁版嵁"); + } + + /** + * 鏌ヨ瀛楀吀鏁版嵁璇︾粏 + */ + @PreAuthorize("@ss.hasPermi('system:dict:query')") + @GetMapping(value = "/{dictCode}") + public AjaxResult getInfo(@PathVariable Long dictCode) + { + return success(dictDataService.selectDictDataById(dictCode)); + } + + /** + * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁淇℃伅 + */ + @GetMapping(value = "/type/{dictType}") + public AjaxResult dictType(@PathVariable String dictType) + { + List data = dictTypeService.selectDictDataByType(dictType); + if (StringUtils.isNull(data)) + { + data = new ArrayList(); + } + return success(data); + } + + /** + * 鏂板瀛楀吀绫诲瀷 + */ + @PreAuthorize("@ss.hasPermi('system:dict:add')") + @Log(title = "瀛楀吀鏁版嵁", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysDictData dict) + { + dict.setCreateBy(getUsername()); + return toAjax(dictDataService.insertDictData(dict)); + } + + /** + * 淇敼淇濆瓨瀛楀吀绫诲瀷 + */ + @PreAuthorize("@ss.hasPermi('system:dict:edit')") + @Log(title = "瀛楀吀鏁版嵁", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysDictData dict) + { + dict.setUpdateBy(getUsername()); + return toAjax(dictDataService.updateDictData(dict)); + } + + /** + * 鍒犻櫎瀛楀吀绫诲瀷 + */ + @PreAuthorize("@ss.hasPermi('system:dict:remove')") + @Log(title = "瀛楀吀绫诲瀷", businessType = BusinessType.DELETE) + @DeleteMapping("/{dictCodes}") + public AjaxResult remove(@PathVariable Long[] dictCodes) + { + dictDataService.deleteDictDataByIds(dictCodes); + return success(); + } +} diff --git a/evo-admin/src/main/java/com/evo/system/controller/SysDictTypeController.java b/evo-admin/src/main/java/com/evo/system/controller/SysDictTypeController.java new file mode 100644 index 0000000..0b18dee --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/controller/SysDictTypeController.java @@ -0,0 +1,131 @@ +package com.evo.system.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.domain.entity.SysDictType; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.poi.ExcelUtil; +import com.evo.system.service.ISysDictTypeService; + +/** + * 鏁版嵁瀛楀吀淇℃伅 + * + * @author evo + */ +@RestController +@RequestMapping("/system/dict/type") +public class SysDictTypeController extends BaseController +{ + @Autowired + private ISysDictTypeService dictTypeService; + + @PreAuthorize("@ss.hasPermi('system:dict:list')") + @GetMapping("/list") + public TableDataInfo list(SysDictType dictType) + { + startPage(); + List list = dictTypeService.selectDictTypeList(dictType); + return getDataTable(list); + } + + @Log(title = "瀛楀吀绫诲瀷", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:dict:export')") + @PostMapping("/export") + public void export(HttpServletResponse response, SysDictType dictType) + { + List list = dictTypeService.selectDictTypeList(dictType); + ExcelUtil util = new ExcelUtil(SysDictType.class); + util.exportExcel(response, list, "瀛楀吀绫诲瀷"); + } + + /** + * 鏌ヨ瀛楀吀绫诲瀷璇︾粏 + */ + @PreAuthorize("@ss.hasPermi('system:dict:query')") + @GetMapping(value = "/{dictId}") + public AjaxResult getInfo(@PathVariable Long dictId) + { + return success(dictTypeService.selectDictTypeById(dictId)); + } + + /** + * 鏂板瀛楀吀绫诲瀷 + */ + @PreAuthorize("@ss.hasPermi('system:dict:add')") + @Log(title = "瀛楀吀绫诲瀷", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysDictType dict) + { + if (!dictTypeService.checkDictTypeUnique(dict)) + { + return error("鏂板瀛楀吀'" + dict.getDictName() + "'澶辫触锛屽瓧鍏哥被鍨嬪凡瀛樺湪"); + } + dict.setCreateBy(getUsername()); + return toAjax(dictTypeService.insertDictType(dict)); + } + + /** + * 淇敼瀛楀吀绫诲瀷 + */ + @PreAuthorize("@ss.hasPermi('system:dict:edit')") + @Log(title = "瀛楀吀绫诲瀷", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysDictType dict) + { + if (!dictTypeService.checkDictTypeUnique(dict)) + { + return error("淇敼瀛楀吀'" + dict.getDictName() + "'澶辫触锛屽瓧鍏哥被鍨嬪凡瀛樺湪"); + } + dict.setUpdateBy(getUsername()); + return toAjax(dictTypeService.updateDictType(dict)); + } + + /** + * 鍒犻櫎瀛楀吀绫诲瀷 + */ + @PreAuthorize("@ss.hasPermi('system:dict:remove')") + @Log(title = "瀛楀吀绫诲瀷", businessType = BusinessType.DELETE) + @DeleteMapping("/{dictIds}") + public AjaxResult remove(@PathVariable Long[] dictIds) + { + dictTypeService.deleteDictTypeByIds(dictIds); + return success(); + } + + /** + * 鍒锋柊瀛楀吀缂撳瓨 + */ + @PreAuthorize("@ss.hasPermi('system:dict:remove')") + @Log(title = "瀛楀吀绫诲瀷", businessType = BusinessType.CLEAN) + @DeleteMapping("/refreshCache") + public AjaxResult refreshCache() + { + dictTypeService.resetDictCache(); + return success(); + } + + /** + * 鑾峰彇瀛楀吀閫夋嫨妗嗗垪琛 + */ + @GetMapping("/optionselect") + public AjaxResult optionselect() + { + List dictTypes = dictTypeService.selectDictTypeAll(); + return success(dictTypes); + } +} diff --git a/evo-admin/src/main/java/com/evo/system/controller/SysIndexController.java b/evo-admin/src/main/java/com/evo/system/controller/SysIndexController.java new file mode 100644 index 0000000..787fee0 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/controller/SysIndexController.java @@ -0,0 +1,29 @@ +package com.evo.system.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.evo.common.config.EvoConfig; +import com.evo.common.utils.StringUtils; + +/** + * 棣栭〉 + * + * @author evo + */ +@RestController +public class SysIndexController +{ + /** 绯荤粺鍩虹閰嶇疆 */ + @Autowired + private EvoConfig EvoConfig; + + /** + * 璁块棶棣栭〉锛屾彁绀鸿 + */ + @RequestMapping("/") + public String index() + { + return StringUtils.format("娆㈣繋浣跨敤{}鍚庡彴绠$悊妗嗘灦锛屽綋鍓嶇増鏈細v{}锛岃閫氳繃鍓嶇鍦板潃璁块棶銆", EvoConfig.getName(), EvoConfig.getVersion()); + } +} diff --git a/evo-admin/src/main/java/com/evo/system/controller/SysLoginController.java b/evo-admin/src/main/java/com/evo/system/controller/SysLoginController.java new file mode 100644 index 0000000..f28cb6a --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/controller/SysLoginController.java @@ -0,0 +1,85 @@ +package com.evo.system.controller; + +import java.util.List; +import java.util.Set; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; +import com.evo.common.constant.Constants; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.domain.entity.SysMenu; +import com.evo.common.core.domain.entity.SysUser; +import com.evo.common.core.domain.model.LoginBody; +import com.evo.common.utils.SecurityUtils; +import com.evo.framework.web.service.SysLoginService; +import com.evo.framework.web.service.SysPermissionService; +import com.evo.system.service.ISysMenuService; + +/** + * 鐧诲綍楠岃瘉 + * + * @author evo + */ +@RestController +public class SysLoginController +{ + @Autowired + private SysLoginService loginService; + + @Autowired + private ISysMenuService menuService; + + @Autowired + private SysPermissionService permissionService; + + /** + * 鐧诲綍鏂规硶 + * + * @param loginBody 鐧诲綍淇℃伅 + * @return 缁撴灉 + */ + @PostMapping("/login") + public AjaxResult login(@RequestBody LoginBody loginBody) + { + AjaxResult ajax = AjaxResult.success(); + // 鐢熸垚浠ょ墝 + String token = loginService.login(loginBody.getUsername(), loginBody.getPassword()); + ajax.put(Constants.TOKEN, token); + return ajax; + } + + /** + * 鑾峰彇鐢ㄦ埛淇℃伅 + * + * @return 鐢ㄦ埛淇℃伅 + */ + @GetMapping("getInfo") + public AjaxResult getInfo() + { + SysUser user = SecurityUtils.getLoginUser().getUser(); + // 瑙掕壊闆嗗悎 + Set roles = permissionService.getRolePermission(user); + // 鏉冮檺闆嗗悎 + Set permissions = permissionService.getMenuPermission(user); + AjaxResult ajax = AjaxResult.success(); + ajax.put("user", user); + ajax.put("roles", roles); + ajax.put("permissions", permissions); + return ajax; + } + + /** + * 鑾峰彇璺敱淇℃伅 + * + * @return 璺敱淇℃伅 + */ + @GetMapping("getRouters") + public AjaxResult getRouters() + { + Long userId = SecurityUtils.getUserId(); + List menus = menuService.selectMenuTreeByUserId(userId); + return AjaxResult.success(menuService.buildMenus(menus)); + } +} diff --git a/evo-admin/src/main/java/com/evo/system/controller/SysLogininforController.java b/evo-admin/src/main/java/com/evo/system/controller/SysLogininforController.java new file mode 100644 index 0000000..57aa078 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/controller/SysLogininforController.java @@ -0,0 +1,82 @@ +package com.evo.system.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.poi.ExcelUtil; +import com.evo.framework.web.service.SysPasswordService; +import com.evo.system.domain.SysLogininfor; +import com.evo.system.service.ISysLogininforService; + +/** + * 绯荤粺璁块棶璁板綍 + * + * @author evo + */ +@RestController +@RequestMapping("/monitor/logininfor") +public class SysLogininforController extends BaseController +{ + @Autowired + private ISysLogininforService logininforService; + + @Autowired + private SysPasswordService passwordService; + + @PreAuthorize("@ss.hasPermi('monitor:logininfor:list')") + @GetMapping("/list") + public TableDataInfo list(SysLogininfor logininfor) + { + startPage(); + List list = logininforService.selectLogininforList(logininfor); + return getDataTable(list); + } + + @Log(title = "鐧诲綍鏃ュ織", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('monitor:logininfor:export')") + @PostMapping("/export") + public void export(HttpServletResponse response, SysLogininfor logininfor) + { + List list = logininforService.selectLogininforList(logininfor); + ExcelUtil util = new ExcelUtil(SysLogininfor.class); + util.exportExcel(response, list, "鐧诲綍鏃ュ織"); + } + + @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')") + @Log(title = "鐧诲綍鏃ュ織", businessType = BusinessType.DELETE) + @DeleteMapping("/{infoIds}") + public AjaxResult remove(@PathVariable Long[] infoIds) + { + return toAjax(logininforService.deleteLogininforByIds(infoIds)); + } + + @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')") + @Log(title = "鐧诲綍鏃ュ織", businessType = BusinessType.CLEAN) + @DeleteMapping("/clean") + public AjaxResult clean() + { + logininforService.cleanLogininfor(); + return success(); + } + + @PreAuthorize("@ss.hasPermi('monitor:logininfor:unlock')") + @Log(title = "璐︽埛瑙i攣", businessType = BusinessType.OTHER) + @GetMapping("/unlock/{userName}") + public AjaxResult unlock(@PathVariable("userName") String userName) + { + passwordService.clearLoginRecordCache(userName); + return success(); + } +} diff --git a/evo-admin/src/main/java/com/evo/system/controller/SysMenuController.java b/evo-admin/src/main/java/com/evo/system/controller/SysMenuController.java new file mode 100644 index 0000000..fcccb07 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/controller/SysMenuController.java @@ -0,0 +1,142 @@ +package com.evo.system.controller; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.evo.common.annotation.Log; +import com.evo.common.constant.UserConstants; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.domain.entity.SysMenu; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.StringUtils; +import com.evo.system.service.ISysMenuService; + +/** + * 鑿滃崟淇℃伅 + * + * @author evo + */ +@RestController +@RequestMapping("/system/menu") +public class SysMenuController extends BaseController +{ + @Autowired + private ISysMenuService menuService; + + /** + * 鑾峰彇鑿滃崟鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('system:menu:list')") + @GetMapping("/list") + public AjaxResult list(SysMenu menu) + { + List menus = menuService.selectMenuList(menu, getUserId()); + return success(menus); + } + + /** + * 鏍规嵁鑿滃崟缂栧彿鑾峰彇璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('system:menu:query')") + @GetMapping(value = "/{menuId}") + public AjaxResult getInfo(@PathVariable Long menuId) + { + return success(menuService.selectMenuById(menuId)); + } + + /** + * 鑾峰彇鑿滃崟涓嬫媺鏍戝垪琛 + */ + @GetMapping("/treeselect") + public AjaxResult treeselect(SysMenu menu) + { + List menus = menuService.selectMenuList(menu, getUserId()); + return success(menuService.buildMenuTreeSelect(menus)); + } + + /** + * 鍔犺浇瀵瑰簲瑙掕壊鑿滃崟鍒楄〃鏍 + */ + @GetMapping(value = "/roleMenuTreeselect/{roleId}") + public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId) + { + List menus = menuService.selectMenuList(getUserId()); + AjaxResult ajax = AjaxResult.success(); + ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId)); + ajax.put("menus", menuService.buildMenuTreeSelect(menus)); + return ajax; + } + + /** + * 鏂板鑿滃崟 + */ + @PreAuthorize("@ss.hasPermi('system:menu:add')") + @Log(title = "鑿滃崟绠$悊", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysMenu menu) + { + if (!menuService.checkMenuNameUnique(menu)) + { + return error("鏂板鑿滃崟'" + menu.getMenuName() + "'澶辫触锛岃彍鍗曞悕绉板凡瀛樺湪"); + } + else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) + { + return error("鏂板鑿滃崟'" + menu.getMenuName() + "'澶辫触锛屽湴鍧蹇呴』浠ttp(s)://寮澶"); + } + menu.setCreateBy(getUsername()); + return toAjax(menuService.insertMenu(menu)); + } + + /** + * 淇敼鑿滃崟 + */ + @PreAuthorize("@ss.hasPermi('system:menu:edit')") + @Log(title = "鑿滃崟绠$悊", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysMenu menu) + { + if (!menuService.checkMenuNameUnique(menu)) + { + return error("淇敼鑿滃崟'" + menu.getMenuName() + "'澶辫触锛岃彍鍗曞悕绉板凡瀛樺湪"); + } + else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) + { + return error("淇敼鑿滃崟'" + menu.getMenuName() + "'澶辫触锛屽湴鍧蹇呴』浠ttp(s)://寮澶"); + } + else if (menu.getMenuId().equals(menu.getParentId())) + { + return error("淇敼鑿滃崟'" + menu.getMenuName() + "'澶辫触锛屼笂绾ц彍鍗曚笉鑳介夋嫨鑷繁"); + } + menu.setUpdateBy(getUsername()); + return toAjax(menuService.updateMenu(menu)); + } + + /** + * 鍒犻櫎鑿滃崟 + */ + @PreAuthorize("@ss.hasPermi('system:menu:remove')") + @Log(title = "鑿滃崟绠$悊", businessType = BusinessType.DELETE) + @DeleteMapping("/{menuId}") + public AjaxResult remove(@PathVariable("menuId") Long menuId) + { + if (menuService.hasChildByMenuId(menuId)) + { + return warn("瀛樺湪瀛愯彍鍗,涓嶅厑璁稿垹闄"); + } + if (menuService.checkMenuExistRole(menuId)) + { + return warn("鑿滃崟宸插垎閰,涓嶅厑璁稿垹闄"); + } + return toAjax(menuService.deleteMenuById(menuId)); + } +} diff --git a/evo-admin/src/main/java/com/evo/system/controller/SysOperlogController.java b/evo-admin/src/main/java/com/evo/system/controller/SysOperlogController.java new file mode 100644 index 0000000..3b5a9c1 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/controller/SysOperlogController.java @@ -0,0 +1,69 @@ +package com.evo.system.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.poi.ExcelUtil; +import com.evo.system.domain.SysOperLog; +import com.evo.system.service.ISysOperLogService; + +/** + * 鎿嶄綔鏃ュ織璁板綍 + * + * @author evo + */ +@RestController +@RequestMapping("/monitor/operlog") +public class SysOperlogController extends BaseController +{ + @Autowired + private ISysOperLogService operLogService; + + @PreAuthorize("@ss.hasPermi('monitor:operlog:list')") + @GetMapping("/list") + public TableDataInfo list(SysOperLog operLog) + { + startPage(); + List list = operLogService.selectOperLogList(operLog); + return getDataTable(list); + } + + @Log(title = "鎿嶄綔鏃ュ織", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('monitor:operlog:export')") + @PostMapping("/export") + public void export(HttpServletResponse response, SysOperLog operLog) + { + List list = operLogService.selectOperLogList(operLog); + ExcelUtil util = new ExcelUtil(SysOperLog.class); + util.exportExcel(response, list, "鎿嶄綔鏃ュ織"); + } + + @Log(title = "鎿嶄綔鏃ュ織", businessType = BusinessType.DELETE) + @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')") + @DeleteMapping("/{operIds}") + public AjaxResult remove(@PathVariable Long[] operIds) + { + return toAjax(operLogService.deleteOperLogByIds(operIds)); + } + + @Log(title = "鎿嶄綔鏃ュ織", businessType = BusinessType.CLEAN) + @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')") + @DeleteMapping("/clean") + public AjaxResult clean() + { + operLogService.cleanOperLog(); + return success(); + } +} diff --git a/evo-admin/src/main/java/com/evo/system/controller/SysProfileController.java b/evo-admin/src/main/java/com/evo/system/controller/SysProfileController.java new file mode 100644 index 0000000..5ad6230 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/controller/SysProfileController.java @@ -0,0 +1,136 @@ +package com.evo.system.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import com.evo.common.annotation.Log; +import com.evo.common.config.EvoConfig; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.domain.entity.SysUser; +import com.evo.common.core.domain.model.LoginUser; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.file.FileUploadUtils; +import com.evo.common.utils.file.MimeTypeUtils; +import com.evo.framework.web.service.TokenService; +import com.evo.system.service.ISysUserService; + +/** + * 涓汉淇℃伅 涓氬姟澶勭悊 + * + * @author evo + */ +@RestController +@RequestMapping("/system/user/profile") +public class SysProfileController extends BaseController +{ + @Autowired + private ISysUserService userService; + + @Autowired + private TokenService tokenService; + + /** + * 涓汉淇℃伅 + */ + @GetMapping + public AjaxResult profile() + { + LoginUser loginUser = getLoginUser(); + SysUser user = loginUser.getUser(); + AjaxResult ajax = AjaxResult.success(user); + ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername())); + return ajax; + } + + /** + * 淇敼鐢ㄦ埛 + */ + @Log(title = "涓汉淇℃伅", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult updateProfile(@RequestBody SysUser user) + { + LoginUser loginUser = getLoginUser(); + SysUser currentUser = loginUser.getUser(); + currentUser.setNickName(user.getNickName()); + currentUser.setEmail(user.getEmail()); + currentUser.setPhonenumber(user.getPhonenumber()); + currentUser.setSex(user.getSex()); + if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(currentUser)) + { + return error("淇敼鐢ㄦ埛'" + loginUser.getUsername() + "'澶辫触锛屾墜鏈哄彿鐮佸凡瀛樺湪"); + } + if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(currentUser)) + { + return error("淇敼鐢ㄦ埛'" + loginUser.getUsername() + "'澶辫触锛岄偖绠辫处鍙峰凡瀛樺湪"); + } + if (userService.updateUserProfile(currentUser) > 0) + { + // 鏇存柊缂撳瓨鐢ㄦ埛淇℃伅 + tokenService.setLoginUser(loginUser); + return success(); + } + return error("淇敼涓汉淇℃伅寮傚父锛岃鑱旂郴绠$悊鍛"); + } + + /** + * 閲嶇疆瀵嗙爜 + */ + @Log(title = "涓汉淇℃伅", businessType = BusinessType.UPDATE) + @PutMapping("/updatePwd") + public AjaxResult updatePwd(String oldPassword, String newPassword) + { + LoginUser loginUser = getLoginUser(); + String userName = loginUser.getUsername(); + String password = loginUser.getPassword(); + if (!SecurityUtils.matchesPassword(oldPassword, password)) + { + return error("淇敼瀵嗙爜澶辫触锛屾棫瀵嗙爜閿欒"); + } + if (SecurityUtils.matchesPassword(newPassword, password)) + { + return error("鏂板瘑鐮佷笉鑳戒笌鏃у瘑鐮佺浉鍚"); + } + newPassword = SecurityUtils.encryptPassword(newPassword); + if (userService.resetUserPwd(userName, newPassword) > 0) + { + // 鏇存柊缂撳瓨鐢ㄦ埛瀵嗙爜 + loginUser.getUser().setPassword(newPassword); + tokenService.setLoginUser(loginUser); + return success(); + } + return error("淇敼瀵嗙爜寮傚父锛岃鑱旂郴绠$悊鍛"); + } + + /** + * 澶村儚涓婁紶 + */ + @Log(title = "鐢ㄦ埛澶村儚", businessType = BusinessType.UPDATE) + @PostMapping("/avatar") + public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) throws Exception + { + if (!file.isEmpty()) + { + LoginUser loginUser = getLoginUser(); + String avatar = FileUploadUtils.upload(EvoConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION); + if (userService.updateUserAvatar(loginUser.getUsername(), avatar)) + { + AjaxResult ajax = AjaxResult.success(); + ajax.put("imgUrl", avatar); + // 鏇存柊缂撳瓨鐢ㄦ埛澶村儚 + loginUser.getUser().setAvatar(avatar); + tokenService.setLoginUser(loginUser); + return ajax; + } + } + return error("涓婁紶鍥剧墖寮傚父锛岃鑱旂郴绠$悊鍛"); + } +} diff --git a/evo-admin/src/main/java/com/evo/system/controller/SysRoleController.java b/evo-admin/src/main/java/com/evo/system/controller/SysRoleController.java new file mode 100644 index 0000000..593c7ab --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/controller/SysRoleController.java @@ -0,0 +1,262 @@ +package com.evo.system.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.domain.entity.SysDept; +import com.evo.common.core.domain.entity.SysRole; +import com.evo.common.core.domain.entity.SysUser; +import com.evo.common.core.domain.model.LoginUser; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.poi.ExcelUtil; +import com.evo.framework.web.service.SysPermissionService; +import com.evo.framework.web.service.TokenService; +import com.evo.system.domain.SysUserRole; +import com.evo.system.service.ISysDeptService; +import com.evo.system.service.ISysRoleService; +import com.evo.system.service.ISysUserService; + +/** + * 瑙掕壊淇℃伅 + * + * @author evo + */ +@RestController +@RequestMapping("/system/role") +public class SysRoleController extends BaseController +{ + @Autowired + private ISysRoleService roleService; + + @Autowired + private TokenService tokenService; + + @Autowired + private SysPermissionService permissionService; + + @Autowired + private ISysUserService userService; + + @Autowired + private ISysDeptService deptService; + + @PreAuthorize("@ss.hasPermi('system:role:list')") + @GetMapping("/list") + public TableDataInfo list(SysRole role) + { + startPage(); + List list = roleService.selectRoleList(role); + return getDataTable(list); + } + + @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:role:export')") + @PostMapping("/export") + public void export(HttpServletResponse response, SysRole role) + { + List list = roleService.selectRoleList(role); + ExcelUtil util = new ExcelUtil(SysRole.class); + util.exportExcel(response, list, "瑙掕壊鏁版嵁"); + } + + /** + * 鏍规嵁瑙掕壊缂栧彿鑾峰彇璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('system:role:query')") + @GetMapping(value = "/{roleId}") + public AjaxResult getInfo(@PathVariable Long roleId) + { + roleService.checkRoleDataScope(roleId); + return success(roleService.selectRoleById(roleId)); + } + + /** + * 鏂板瑙掕壊 + */ + @PreAuthorize("@ss.hasPermi('system:role:add')") + @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysRole role) + { + if (!roleService.checkRoleNameUnique(role)) + { + return error("鏂板瑙掕壊'" + role.getRoleName() + "'澶辫触锛岃鑹插悕绉板凡瀛樺湪"); + } + else if (!roleService.checkRoleKeyUnique(role)) + { + return error("鏂板瑙掕壊'" + role.getRoleName() + "'澶辫触锛岃鑹叉潈闄愬凡瀛樺湪"); + } + role.setCreateBy(getUsername()); + return toAjax(roleService.insertRole(role)); + + } + + /** + * 淇敼淇濆瓨瑙掕壊 + */ + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysRole role) + { + roleService.checkRoleAllowed(role); + roleService.checkRoleDataScope(role.getRoleId()); + if (!roleService.checkRoleNameUnique(role)) + { + return error("淇敼瑙掕壊'" + role.getRoleName() + "'澶辫触锛岃鑹插悕绉板凡瀛樺湪"); + } + else if (!roleService.checkRoleKeyUnique(role)) + { + return error("淇敼瑙掕壊'" + role.getRoleName() + "'澶辫触锛岃鑹叉潈闄愬凡瀛樺湪"); + } + role.setUpdateBy(getUsername()); + + if (roleService.updateRole(role) > 0) + { + // 鏇存柊缂撳瓨鐢ㄦ埛鏉冮檺 + LoginUser loginUser = getLoginUser(); + if (StringUtils.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin()) + { + loginUser.setPermissions(permissionService.getMenuPermission(loginUser.getUser())); + loginUser.setUser(userService.selectUserByUserName(loginUser.getUser().getUserName())); + tokenService.setLoginUser(loginUser); + } + return success(); + } + return error("淇敼瑙掕壊'" + role.getRoleName() + "'澶辫触锛岃鑱旂郴绠$悊鍛"); + } + + /** + * 淇敼淇濆瓨鏁版嵁鏉冮檺 + */ + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.UPDATE) + @PutMapping("/dataScope") + public AjaxResult dataScope(@RequestBody SysRole role) + { + roleService.checkRoleAllowed(role); + roleService.checkRoleDataScope(role.getRoleId()); + return toAjax(roleService.authDataScope(role)); + } + + /** + * 鐘舵佷慨鏀 + */ + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.UPDATE) + @PutMapping("/changeStatus") + public AjaxResult changeStatus(@RequestBody SysRole role) + { + roleService.checkRoleAllowed(role); + roleService.checkRoleDataScope(role.getRoleId()); + role.setUpdateBy(getUsername()); + return toAjax(roleService.updateRoleStatus(role)); + } + + /** + * 鍒犻櫎瑙掕壊 + */ + @PreAuthorize("@ss.hasPermi('system:role:remove')") + @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.DELETE) + @DeleteMapping("/{roleIds}") + public AjaxResult remove(@PathVariable Long[] roleIds) + { + return toAjax(roleService.deleteRoleByIds(roleIds)); + } + + /** + * 鑾峰彇瑙掕壊閫夋嫨妗嗗垪琛 + */ + @PreAuthorize("@ss.hasPermi('system:role:query')") + @GetMapping("/optionselect") + public AjaxResult optionselect() + { + return success(roleService.selectRoleAll()); + } + + /** + * 鏌ヨ宸插垎閰嶇敤鎴疯鑹插垪琛 + */ + @PreAuthorize("@ss.hasPermi('system:role:list')") + @GetMapping("/authUser/allocatedList") + public TableDataInfo allocatedList(SysUser user) + { + startPage(); + List list = userService.selectAllocatedList(user); + return getDataTable(list); + } + + /** + * 鏌ヨ鏈垎閰嶇敤鎴疯鑹插垪琛 + */ + @PreAuthorize("@ss.hasPermi('system:role:list')") + @GetMapping("/authUser/unallocatedList") + public TableDataInfo unallocatedList(SysUser user) + { + startPage(); + List list = userService.selectUnallocatedList(user); + return getDataTable(list); + } + + /** + * 鍙栨秷鎺堟潈鐢ㄦ埛 + */ + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.GRANT) + @PutMapping("/authUser/cancel") + public AjaxResult cancelAuthUser(@RequestBody SysUserRole userRole) + { + return toAjax(roleService.deleteAuthUser(userRole)); + } + + /** + * 鎵归噺鍙栨秷鎺堟潈鐢ㄦ埛 + */ + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.GRANT) + @PutMapping("/authUser/cancelAll") + public AjaxResult cancelAuthUserAll(Long roleId, Long[] userIds) + { + return toAjax(roleService.deleteAuthUsers(roleId, userIds)); + } + + /** + * 鎵归噺閫夋嫨鐢ㄦ埛鎺堟潈 + */ + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.GRANT) + @PutMapping("/authUser/selectAll") + public AjaxResult selectAuthUserAll(Long roleId, Long[] userIds) + { + roleService.checkRoleDataScope(roleId); + return toAjax(roleService.insertAuthUsers(roleId, userIds)); + } + + /** + * 鑾峰彇瀵瑰簲瑙掕壊閮ㄩ棬鏍戝垪琛 + */ + @PreAuthorize("@ss.hasPermi('system:role:query')") + @GetMapping(value = "/deptTree/{roleId}") + public AjaxResult deptTree(@PathVariable("roleId") Long roleId) + { + AjaxResult ajax = AjaxResult.success(); + ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId)); + ajax.put("depts", deptService.selectDeptTreeList(new SysDept())); + return ajax; + } +} diff --git a/evo-admin/src/main/java/com/evo/system/controller/SysStaffController.java b/evo-admin/src/main/java/com/evo/system/controller/SysStaffController.java new file mode 100644 index 0000000..3068058 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/controller/SysStaffController.java @@ -0,0 +1,164 @@ +package com.evo.system.controller; + +import java.util.List; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import com.evo.system.domain.SysStaff; +import com.evo.system.domain.vo.SysStaffVo; +import com.evo.system.service.ISysStaffService; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.poi.ExcelUtil; +import com.evo.common.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; + +/** + * 鍛樺伐绠$悊Controller + * + * @author evo + * @date 2024-11-21 + */ +@RestController +@RequestMapping("/system/staff") +public class SysStaffController extends BaseController +{ + @Resource + private ISysStaffService sysStaffService; + + /** + * 鏌ヨ鍛樺伐绠$悊鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('system:staff:list')") + @GetMapping("/list") + public TableDataInfo list(SysStaff sysStaff) + { + + startPage(); + List list = sysStaffService.selectSysStaffList(sysStaff); + return getDataTable(list); + } + /** + * 瀵煎嚭鍛樺伐绠$悊鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('system:staff:export')") + @Log(title = "鍛樺伐绠$悊", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, SysStaff sysStaff) + { + List list = sysStaffService.selectSysStaffList(sysStaff); + ExcelUtil util = new ExcelUtil(SysStaff.class); + util.exportExcel(response, list, "鍛樺伐绠$悊鏁版嵁"); + } + /** + * 瀵煎嚭鍛樺伐璇︽儏 + */ + @PreAuthorize("@ss.hasPermi('system:staff:exportDetail')") + @PostMapping("/exportDetail") + public void exportDetail(HttpServletResponse response, SysStaff sysStaff) + { + List list = sysStaffService.selectSysStaffDetailList(sysStaff); + ExcelUtil util = new ExcelUtil(SysStaffVo.class); + util.exportExcel(response, list, "鍛樺伐璇︽儏鏁版嵁"); + } + /** + * 鑾峰彇鍛樺伐绠$悊璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('system:staff:query')") + @GetMapping(value = "/{userId}") + public AjaxResult getInfo(@PathVariable("userId") Long userId) + { + return success(sysStaffService.selectSysStaffByUserId(userId)); + } + /** + * 鏂板鍛樺伐绠$悊 + */ + @PreAuthorize("@ss.hasPermi('system:staff:add')") + @Log(title = "鍛樺伐绠$悊", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SysStaff sysStaff) + { + return sysStaffService.insertSysStaff(sysStaff); + } + /** + * 淇敼鍛樺伐绠$悊 + */ + @PreAuthorize("@ss.hasPermi('system:staff:edit')") + @Log(title = "鍛樺伐绠$悊", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SysStaff sysStaff) + { + return sysStaffService.updateSysStaff(sysStaff); + } + /** + * 鍒犻櫎鍛樺伐绠$悊 + */ + @PreAuthorize("@ss.hasPermi('system:staff:remove')") + @Log(title = "鍛樺伐绠$悊", businessType = BusinessType.DELETE) + @DeleteMapping("/{userId}") + public AjaxResult remove(@PathVariable Long userId) + { + SysStaff sysStaff = sysStaffService.selectSysStaffByUserId(userId); + if(!"-1".equals(sysStaff.getStatus())){ + return AjaxResult.error("娌℃湁绂昏亴鐨勫憳宸ヤ笉鑳藉垹闄わ紒锛"); + } + return toAjax(sysStaffService.deleteSysStaffByUserId(userId)); + } + /** + * 鏌ヨ鎵鏈夊湪鑱屽憳宸 + * @return + */ + @GetMapping("/listStaffAll") + public List listStaffAll() + { + List list = sysStaffService.selectSysStaffListAll(); + return list; + } + /** + * 涓婁紶浜旈櫓涓閲戜俊鎭枃浠 + */ + @PreAuthorize("@ss.hasPermi('system:staff:importFund')") + @PostMapping("/uploadAccumulationFund") + public AjaxResult uploadAccumulationFund(@RequestParam("file") MultipartFile filePath) { + return sysStaffService.uploadAccumulationFund(filePath); + } + /** + * 妯℃澘瀵煎嚭 + * @param response + */ + @PostMapping("/importTemplate") + public void importTemplate(HttpServletResponse response) + { + ExcelUtil util = new ExcelUtil(SysStaffVo.class); + util.importTemplateExcel(response, "鍛樺伐淇℃伅"); + } + /** + * 鏁版嵁瀵煎叆 + * @param file + * @return + * @throws Exception + */ + @PreAuthorize("@ss.hasPermi('system:staff:import')") + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file) throws Exception + { + ExcelUtil util = new ExcelUtil(SysStaffVo.class); + List staffList = util.importExcel(file.getInputStream()); + return sysStaffService.importStaff(staffList); + } + + /** + * 鏍规嵁閮ㄩ棬鏌ヨ鍦ㄨ亴鍛樺伐 + * @return + */ + @GetMapping("/listStaffByDept/{dept}") + public List listStaffByDept(@PathVariable("dept") Long dept) + { + List list = sysStaffService.queryysStaffByDeptId(dept); + return list; + } + +} diff --git a/evo-admin/src/main/java/com/evo/system/controller/SysStaffDetailController.java b/evo-admin/src/main/java/com/evo/system/controller/SysStaffDetailController.java new file mode 100644 index 0000000..060acb5 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/controller/SysStaffDetailController.java @@ -0,0 +1,69 @@ +package com.evo.system.controller; + +import java.util.List; +import javax.annotation.Resource; + +import com.evo.system.domain.SysStaff; +import com.evo.system.domain.SysStaffDetail; +import com.evo.system.service.ISysStaffDetailService; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.enums.BusinessType; +import com.evo.common.core.page.TableDataInfo; + +/** + * 鍛樺伐璇︽儏Controller + * + * @author evo + * @date 2024-11-22 + */ +@RestController +@RequestMapping("/system/staffDetail") +public class SysStaffDetailController extends BaseController +{ + @Resource + private ISysStaffDetailService sysStaffDetailService; + + /** + * 鏌ヨ鍛樺伐璇︽儏鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('system:staffDetail:list')") + @GetMapping("/list") + public TableDataInfo list(SysStaffDetail sysStaffDetail) + { + startPage(); + List list = sysStaffDetailService.selectSysStaffDetailList(sysStaffDetail); + return getDataTable(list); + } + + /** + * 鑾峰彇鍛樺伐璇︽儏璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('system:staffDetail:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(sysStaffDetailService.selectSysStaffDetailById(id)); + } + + /** + * 淇敼鍛樺伐璇︽儏 + */ + @PreAuthorize("@ss.hasPermi('system:staffDetail:edit')") + @Log(title = "鍛樺伐璇︽儏", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SysStaffDetail sysStaffDetail) + { + return toAjax(sysStaffDetailService.updateSysStaffDetail(sysStaffDetail)); + } + + @DeleteMapping("/clearAllSubsidy") + public AjaxResult clearAllSubsidy() + { + return sysStaffDetailService.clearAllSubsidy(); + } + +} diff --git a/evo-admin/src/main/java/com/evo/system/controller/SysUserController.java b/evo-admin/src/main/java/com/evo/system/controller/SysUserController.java new file mode 100644 index 0000000..33177b0 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/controller/SysUserController.java @@ -0,0 +1,250 @@ +package com.evo.system.controller; + +import java.util.List; +import java.util.stream.Collectors; +import javax.servlet.http.HttpServletResponse; +import org.apache.commons.lang3.ArrayUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.domain.entity.SysDept; +import com.evo.common.core.domain.entity.SysRole; +import com.evo.common.core.domain.entity.SysUser; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.poi.ExcelUtil; +import com.evo.system.service.ISysDeptService; +import com.evo.system.service.ISysRoleService; +import com.evo.system.service.ISysUserService; + +/** + * 鐢ㄦ埛淇℃伅 + * + * @author evo + */ +@RestController +@RequestMapping("/system/user") +public class SysUserController extends BaseController +{ + @Autowired + private ISysUserService userService; + + @Autowired + private ISysRoleService roleService; + + @Autowired + private ISysDeptService deptService; + + /** + * 鑾峰彇鐢ㄦ埛鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('system:user:list')") + @GetMapping("/list") + public TableDataInfo list(SysUser user) + { + startPage(); + List list = userService.selectUserList(user); + return getDataTable(list); + } + + @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:user:export')") + @PostMapping("/export") + public void export(HttpServletResponse response, SysUser user) + { + List list = userService.selectUserList(user); + ExcelUtil util = new ExcelUtil(SysUser.class); + util.exportExcel(response, list, "鐢ㄦ埛鏁版嵁"); + } + + @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.IMPORT) + @PreAuthorize("@ss.hasPermi('system:user:import')") + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception + { + ExcelUtil util = new ExcelUtil(SysUser.class); + List userList = util.importExcel(file.getInputStream()); + String operName = getUsername(); + String message = userService.importUser(userList, updateSupport, operName); + return success(message); + } + + @PostMapping("/importTemplate") + public void importTemplate(HttpServletResponse response) + { + ExcelUtil util = new ExcelUtil(SysUser.class); + util.importTemplateExcel(response, "鐢ㄦ埛鏁版嵁"); + } + + /** + * 鏍规嵁鐢ㄦ埛缂栧彿鑾峰彇璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('system:user:query')") + @GetMapping(value = { "/", "/{userId}" }) + public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId) + { + userService.checkUserDataScope(userId); + AjaxResult ajax = AjaxResult.success(); + List roles = roleService.selectRoleAll(); + ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())); + if (StringUtils.isNotNull(userId)) + { + SysUser sysUser = userService.selectUserById(userId); + ajax.put(AjaxResult.DATA_TAG, sysUser); + ajax.put("roleIds", sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList())); + } + return ajax; + } + + /** + * 鏂板鐢ㄦ埛 + */ + @PreAuthorize("@ss.hasPermi('system:user:add')") + @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysUser user) + { + deptService.checkDeptDataScope(user.getDeptId()); + roleService.checkRoleDataScope(user.getRoleIds()); + if (!userService.checkUserNameUnique(user)) + { + return error("鏂板鐢ㄦ埛'" + user.getUserName() + "'澶辫触锛岀櫥褰曡处鍙峰凡瀛樺湪"); + } + else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) + { + return error("鏂板鐢ㄦ埛'" + user.getUserName() + "'澶辫触锛屾墜鏈哄彿鐮佸凡瀛樺湪"); + } + else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user)) + { + return error("鏂板鐢ㄦ埛'" + user.getUserName() + "'澶辫触锛岄偖绠辫处鍙峰凡瀛樺湪"); + } + user.setCreateBy(getUsername()); + user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); + return toAjax(userService.insertUser(user)); + } + + /** + * 淇敼鐢ㄦ埛 + */ + @PreAuthorize("@ss.hasPermi('system:user:edit')") + @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysUser user) + { + userService.checkUserAllowed(user); + userService.checkUserDataScope(user.getUserId()); + deptService.checkDeptDataScope(user.getDeptId()); + roleService.checkRoleDataScope(user.getRoleIds()); + if (!userService.checkUserNameUnique(user)) + { + return error("淇敼鐢ㄦ埛'" + user.getUserName() + "'澶辫触锛岀櫥褰曡处鍙峰凡瀛樺湪"); + } + else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) + { + return error("淇敼鐢ㄦ埛'" + user.getUserName() + "'澶辫触锛屾墜鏈哄彿鐮佸凡瀛樺湪"); + } + else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user)) + { + return error("淇敼鐢ㄦ埛'" + user.getUserName() + "'澶辫触锛岄偖绠辫处鍙峰凡瀛樺湪"); + } + user.setUpdateBy(getUsername()); + return toAjax(userService.updateUser(user)); + } + + /** + * 鍒犻櫎鐢ㄦ埛 + */ + @PreAuthorize("@ss.hasPermi('system:user:remove')") + @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.DELETE) + @DeleteMapping("/{userIds}") + public AjaxResult remove(@PathVariable Long[] userIds) + { + if (ArrayUtils.contains(userIds, getUserId())) + { + return error("褰撳墠鐢ㄦ埛涓嶈兘鍒犻櫎"); + } + return toAjax(userService.deleteUserByIds(userIds)); + } + + /** + * 閲嶇疆瀵嗙爜 + */ + @PreAuthorize("@ss.hasPermi('system:user:resetPwd')") + @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.UPDATE) + @PutMapping("/resetPwd") + public AjaxResult resetPwd(@RequestBody SysUser user) + { + userService.checkUserAllowed(user); + userService.checkUserDataScope(user.getUserId()); + user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); + user.setUpdateBy(getUsername()); + return toAjax(userService.resetPwd(user)); + } + + /** + * 鐘舵佷慨鏀 + */ + @PreAuthorize("@ss.hasPermi('system:user:edit')") + @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.UPDATE) + @PutMapping("/changeStatus") + public AjaxResult changeStatus(@RequestBody SysUser user) + { + userService.checkUserAllowed(user); + userService.checkUserDataScope(user.getUserId()); + user.setUpdateBy(getUsername()); + return toAjax(userService.updateUserStatus(user)); + } + + /** + * 鏍规嵁鐢ㄦ埛缂栧彿鑾峰彇鎺堟潈瑙掕壊 + */ + @PreAuthorize("@ss.hasPermi('system:user:query')") + @GetMapping("/authRole/{userId}") + public AjaxResult authRole(@PathVariable("userId") Long userId) + { + AjaxResult ajax = AjaxResult.success(); + SysUser user = userService.selectUserById(userId); + List roles = roleService.selectRolesByUserId(userId); + ajax.put("user", user); + ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())); + return ajax; + } + + /** + * 鐢ㄦ埛鎺堟潈瑙掕壊 + */ + @PreAuthorize("@ss.hasPermi('system:user:edit')") + @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.GRANT) + @PutMapping("/authRole") + public AjaxResult insertAuthRole(Long userId, Long[] roleIds) + { + userService.checkUserDataScope(userId); + roleService.checkRoleDataScope(roleIds); + userService.insertUserAuth(userId, roleIds); + return success(); + } + + /** + * 鑾峰彇閮ㄩ棬鏍戝垪琛 + */ + @PreAuthorize("@ss.hasPermi('system:user:list')") + @GetMapping("/deptTree") + public AjaxResult deptTree(SysDept dept) + { + return success(deptService.selectDeptTreeList(dept)); + } +} diff --git a/evo-admin/src/main/java/com/evo/system/controller/SysUserOnlineController.java b/evo-admin/src/main/java/com/evo/system/controller/SysUserOnlineController.java new file mode 100644 index 0000000..2ebcfe9 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/controller/SysUserOnlineController.java @@ -0,0 +1,83 @@ +package com.evo.system.controller; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.evo.common.annotation.Log; +import com.evo.common.constant.CacheConstants; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.domain.model.LoginUser; +import com.evo.common.core.page.TableDataInfo; +import com.evo.common.core.redis.RedisCache; +import com.evo.common.enums.BusinessType; +import com.evo.common.utils.StringUtils; +import com.evo.system.domain.SysUserOnline; +import com.evo.system.service.ISysUserOnlineService; + +/** + * 鍦ㄧ嚎鐢ㄦ埛鐩戞帶 + * + * @author evo + */ +@RestController +@RequestMapping("/monitor/online") +public class SysUserOnlineController extends BaseController +{ + @Autowired + private ISysUserOnlineService userOnlineService; + + @Autowired + private RedisCache redisCache; + + @PreAuthorize("@ss.hasPermi('monitor:online:list')") + @GetMapping("/list") + public TableDataInfo list(String ipaddr, String userName) + { + Collection keys = redisCache.keys(CacheConstants.LOGIN_TOKEN_KEY + "*"); + List userOnlineList = new ArrayList(); + for (String key : keys) + { + LoginUser user = redisCache.getCacheObject(key); + if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) + { + userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user)); + } + else if (StringUtils.isNotEmpty(ipaddr)) + { + userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user)); + } + else if (StringUtils.isNotEmpty(userName) && StringUtils.isNotNull(user.getUser())) + { + userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user)); + } + else + { + userOnlineList.add(userOnlineService.loginUserToUserOnline(user)); + } + } + Collections.reverse(userOnlineList); + userOnlineList.removeAll(Collections.singleton(null)); + return getDataTable(userOnlineList); + } + + /** + * 寮洪鐢ㄦ埛 + */ + @PreAuthorize("@ss.hasPermi('monitor:online:forceLogout')") + @Log(title = "鍦ㄧ嚎鐢ㄦ埛", businessType = BusinessType.FORCE) + @DeleteMapping("/{tokenId}") + public AjaxResult forceLogout(@PathVariable String tokenId) + { + redisCache.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId); + return success(); + } +} diff --git a/evo-admin/src/main/java/com/evo/system/domain/SysCache.java b/evo-admin/src/main/java/com/evo/system/domain/SysCache.java new file mode 100644 index 0000000..c2269a9 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/domain/SysCache.java @@ -0,0 +1,81 @@ +package com.evo.system.domain; + +import com.evo.common.utils.StringUtils; + +/** + * 缂撳瓨淇℃伅 + * + * @author evo + */ +public class SysCache +{ + /** 缂撳瓨鍚嶇О */ + private String cacheName = ""; + + /** 缂撳瓨閿悕 */ + private String cacheKey = ""; + + /** 缂撳瓨鍐呭 */ + private String cacheValue = ""; + + /** 澶囨敞 */ + private String remark = ""; + + public SysCache() + { + + } + + public SysCache(String cacheName, String remark) + { + this.cacheName = cacheName; + this.remark = remark; + } + + public SysCache(String cacheName, String cacheKey, String cacheValue) + { + this.cacheName = StringUtils.replace(cacheName, ":", ""); + this.cacheKey = StringUtils.replace(cacheKey, cacheName, ""); + this.cacheValue = cacheValue; + } + + public String getCacheName() + { + return cacheName; + } + + public void setCacheName(String cacheName) + { + this.cacheName = cacheName; + } + + public String getCacheKey() + { + return cacheKey; + } + + public void setCacheKey(String cacheKey) + { + this.cacheKey = cacheKey; + } + + public String getCacheValue() + { + return cacheValue; + } + + public void setCacheValue(String cacheValue) + { + this.cacheValue = cacheValue; + } + + public String getRemark() + { + return remark; + } + + public void setRemark(String remark) + { + this.remark = remark; + } +} diff --git a/evo-admin/src/main/java/com/evo/system/domain/SysLogininfor.java b/evo-admin/src/main/java/com/evo/system/domain/SysLogininfor.java new file mode 100644 index 0000000..4f4ba11 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/domain/SysLogininfor.java @@ -0,0 +1,144 @@ +package com.evo.system.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.evo.common.annotation.Excel; +import com.evo.common.annotation.Excel.ColumnType; +import com.evo.common.core.domain.BaseEntity; + +/** + * 绯荤粺璁块棶璁板綍琛 sys_logininfor + * + * @author evo + */ +public class SysLogininfor extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** ID */ + @Excel(name = "搴忓彿", cellType = ColumnType.NUMERIC) + private Long infoId; + + /** 鐢ㄦ埛璐﹀彿 */ + @Excel(name = "鐢ㄦ埛璐﹀彿") + private String userName; + + /** 鐧诲綍鐘舵 0鎴愬姛 1澶辫触 */ + @Excel(name = "鐧诲綍鐘舵", readConverterExp = "0=鎴愬姛,1=澶辫触") + private String status; + + /** 鐧诲綍IP鍦板潃 */ + @Excel(name = "鐧诲綍鍦板潃") + private String ipaddr; + + /** 鐧诲綍鍦扮偣 */ + @Excel(name = "鐧诲綍鍦扮偣") + private String loginLocation; + + /** 娴忚鍣ㄧ被鍨 */ + @Excel(name = "娴忚鍣") + private String browser; + + /** 鎿嶄綔绯荤粺 */ + @Excel(name = "鎿嶄綔绯荤粺") + private String os; + + /** 鎻愮ず娑堟伅 */ + @Excel(name = "鎻愮ず娑堟伅") + private String msg; + + /** 璁块棶鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "璁块棶鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date loginTime; + + public Long getInfoId() + { + return infoId; + } + + public void setInfoId(Long infoId) + { + this.infoId = infoId; + } + + public String getUserName() + { + return userName; + } + + public void setUserName(String userName) + { + this.userName = userName; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getIpaddr() + { + return ipaddr; + } + + public void setIpaddr(String ipaddr) + { + this.ipaddr = ipaddr; + } + + public String getLoginLocation() + { + return loginLocation; + } + + public void setLoginLocation(String loginLocation) + { + this.loginLocation = loginLocation; + } + + public String getBrowser() + { + return browser; + } + + public void setBrowser(String browser) + { + this.browser = browser; + } + + public String getOs() + { + return os; + } + + public void setOs(String os) + { + this.os = os; + } + + public String getMsg() + { + return msg; + } + + public void setMsg(String msg) + { + this.msg = msg; + } + + public Date getLoginTime() + { + return loginTime; + } + + public void setLoginTime(Date loginTime) + { + this.loginTime = loginTime; + } +} diff --git a/evo-admin/src/main/java/com/evo/system/domain/SysOperLog.java b/evo-admin/src/main/java/com/evo/system/domain/SysOperLog.java new file mode 100644 index 0000000..70964b4 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/domain/SysOperLog.java @@ -0,0 +1,269 @@ +package com.evo.system.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.evo.common.annotation.Excel; +import com.evo.common.annotation.Excel.ColumnType; +import com.evo.common.core.domain.BaseEntity; + +/** + * 鎿嶄綔鏃ュ織璁板綍琛 oper_log + * + * @author evo + */ +public class SysOperLog extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鏃ュ織涓婚敭 */ + @Excel(name = "鎿嶄綔搴忓彿", cellType = ColumnType.NUMERIC) + private Long operId; + + /** 鎿嶄綔妯″潡 */ + @Excel(name = "鎿嶄綔妯″潡") + private String title; + + /** 涓氬姟绫诲瀷锛0鍏跺畠 1鏂板 2淇敼 3鍒犻櫎锛 */ + @Excel(name = "涓氬姟绫诲瀷", readConverterExp = "0=鍏跺畠,1=鏂板,2=淇敼,3=鍒犻櫎,4=鎺堟潈,5=瀵煎嚭,6=瀵煎叆,7=寮洪,8=鐢熸垚浠g爜,9=娓呯┖鏁版嵁") + private Integer businessType; + + /** 涓氬姟绫诲瀷鏁扮粍 */ + private Integer[] businessTypes; + + /** 璇锋眰鏂规硶 */ + @Excel(name = "璇锋眰鏂规硶") + private String method; + + /** 璇锋眰鏂瑰紡 */ + @Excel(name = "璇锋眰鏂瑰紡") + private String requestMethod; + + /** 鎿嶄綔绫诲埆锛0鍏跺畠 1鍚庡彴鐢ㄦ埛 2鎵嬫満绔敤鎴凤級 */ + @Excel(name = "鎿嶄綔绫诲埆", readConverterExp = "0=鍏跺畠,1=鍚庡彴鐢ㄦ埛,2=鎵嬫満绔敤鎴") + private Integer operatorType; + + /** 鎿嶄綔浜哄憳 */ + @Excel(name = "鎿嶄綔浜哄憳") + private String operName; + + /** 閮ㄩ棬鍚嶇О */ + @Excel(name = "閮ㄩ棬鍚嶇О") + private String deptName; + + /** 璇锋眰url */ + @Excel(name = "璇锋眰鍦板潃") + private String operUrl; + + /** 鎿嶄綔鍦板潃 */ + @Excel(name = "鎿嶄綔鍦板潃") + private String operIp; + + /** 鎿嶄綔鍦扮偣 */ + @Excel(name = "鎿嶄綔鍦扮偣") + private String operLocation; + + /** 璇锋眰鍙傛暟 */ + @Excel(name = "璇锋眰鍙傛暟") + private String operParam; + + /** 杩斿洖鍙傛暟 */ + @Excel(name = "杩斿洖鍙傛暟") + private String jsonResult; + + /** 鎿嶄綔鐘舵侊紙0姝e父 1寮傚父锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=姝e父,1=寮傚父") + private Integer status; + + /** 閿欒娑堟伅 */ + @Excel(name = "閿欒娑堟伅") + private String errorMsg; + + /** 鎿嶄綔鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "鎿嶄綔鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date operTime; + + /** 娑堣楁椂闂 */ + @Excel(name = "娑堣楁椂闂", suffix = "姣") + private Long costTime; + + public Long getOperId() + { + return operId; + } + + public void setOperId(Long operId) + { + this.operId = operId; + } + + public String getTitle() + { + return title; + } + + public void setTitle(String title) + { + this.title = title; + } + + public Integer getBusinessType() + { + return businessType; + } + + public void setBusinessType(Integer businessType) + { + this.businessType = businessType; + } + + public Integer[] getBusinessTypes() + { + return businessTypes; + } + + public void setBusinessTypes(Integer[] businessTypes) + { + this.businessTypes = businessTypes; + } + + public String getMethod() + { + return method; + } + + public void setMethod(String method) + { + this.method = method; + } + + public String getRequestMethod() + { + return requestMethod; + } + + public void setRequestMethod(String requestMethod) + { + this.requestMethod = requestMethod; + } + + public Integer getOperatorType() + { + return operatorType; + } + + public void setOperatorType(Integer operatorType) + { + this.operatorType = operatorType; + } + + public String getOperName() + { + return operName; + } + + public void setOperName(String operName) + { + this.operName = operName; + } + + public String getDeptName() + { + return deptName; + } + + public void setDeptName(String deptName) + { + this.deptName = deptName; + } + + public String getOperUrl() + { + return operUrl; + } + + public void setOperUrl(String operUrl) + { + this.operUrl = operUrl; + } + + public String getOperIp() + { + return operIp; + } + + public void setOperIp(String operIp) + { + this.operIp = operIp; + } + + public String getOperLocation() + { + return operLocation; + } + + public void setOperLocation(String operLocation) + { + this.operLocation = operLocation; + } + + public String getOperParam() + { + return operParam; + } + + public void setOperParam(String operParam) + { + this.operParam = operParam; + } + + public String getJsonResult() + { + return jsonResult; + } + + public void setJsonResult(String jsonResult) + { + this.jsonResult = jsonResult; + } + + public Integer getStatus() + { + return status; + } + + public void setStatus(Integer status) + { + this.status = status; + } + + public String getErrorMsg() + { + return errorMsg; + } + + public void setErrorMsg(String errorMsg) + { + this.errorMsg = errorMsg; + } + + public Date getOperTime() + { + return operTime; + } + + public void setOperTime(Date operTime) + { + this.operTime = operTime; + } + + public Long getCostTime() + { + return costTime; + } + + public void setCostTime(Long costTime) + { + this.costTime = costTime; + } +} diff --git a/evo-admin/src/main/java/com/evo/system/domain/SysRoleDept.java b/evo-admin/src/main/java/com/evo/system/domain/SysRoleDept.java new file mode 100644 index 0000000..e4cac07 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/domain/SysRoleDept.java @@ -0,0 +1,46 @@ +package com.evo.system.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 瑙掕壊鍜岄儴闂ㄥ叧鑱 sys_role_dept + * + * @author evo + */ +public class SysRoleDept +{ + /** 瑙掕壊ID */ + private Long roleId; + + /** 閮ㄩ棬ID */ + private Long deptId; + + public Long getRoleId() + { + return roleId; + } + + public void setRoleId(Long roleId) + { + this.roleId = roleId; + } + + public Long getDeptId() + { + return deptId; + } + + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("roleId", getRoleId()) + .append("deptId", getDeptId()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/system/domain/SysRoleMenu.java b/evo-admin/src/main/java/com/evo/system/domain/SysRoleMenu.java new file mode 100644 index 0000000..b59eca4 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/domain/SysRoleMenu.java @@ -0,0 +1,46 @@ +package com.evo.system.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 瑙掕壊鍜岃彍鍗曞叧鑱 sys_role_menu + * + * @author evo + */ +public class SysRoleMenu +{ + /** 瑙掕壊ID */ + private Long roleId; + + /** 鑿滃崟ID */ + private Long menuId; + + public Long getRoleId() + { + return roleId; + } + + public void setRoleId(Long roleId) + { + this.roleId = roleId; + } + + public Long getMenuId() + { + return menuId; + } + + public void setMenuId(Long menuId) + { + this.menuId = menuId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("roleId", getRoleId()) + .append("menuId", getMenuId()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/system/domain/SysStaff.java b/evo-admin/src/main/java/com/evo/system/domain/SysStaff.java new file mode 100644 index 0000000..427c70f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/domain/SysStaff.java @@ -0,0 +1,563 @@ +package com.evo.system.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; + +/** + * 鍛樺伐绠$悊瀵硅薄 sys_staff + * + * @author evo + * @date 2024-11-21 + */ +public class SysStaff extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭ID */ + private Long userId; + /** 閮ㄩ棬ID */ + private Long deptId; + @Excel(name = "閮ㄩ棬") + private String deptName; + /** 缂栧彿 */ + @Excel(name = "缂栧彿") + private String code; + + /** 濮撳悕 */ + @Excel(name = "濮撳悕") + private String name; + + /** 韬唤璇佸彿 */ + @Excel(name = "韬唤璇佸彿") + private String idCard; + + /** 鎬у埆 */ + @Excel(name = "鎬у埆") + private String sex; + + /** 骞撮緞 */ + @Excel(name = "骞撮緞") + private Long age; + + /** 鐢佃瘽 */ + @Excel(name = "鐢佃瘽") + private String phone; + + /** 浣忓潃 */ + @Excel(name = "浣忓潃") + private String address; + + /** 瀛﹀巻 */ + @Excel(name = "瀛﹀巻") + private String level; + + /** 涓撲笟 */ + @Excel(name = "涓撲笟") + private String major; + + /** 姣曚笟瀛︽牎 */ + @Excel(name = "姣曚笟瀛︽牎") + private String school; + + /** 閾惰鍗″彿 */ + @Excel(name = "閾惰鍗″彿") + private String bankNumber; + + /** 寮鎴疯 */ + @Excel(name = "寮鎴疯") + private String bank; + + /** 鍏ヨ亴鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍏ヨ亴鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date employmentDate; + + /** 灞ュ巻 */ + @Excel(name = "灞ュ巻") + private String experience; + + /** 璇曠敤鏈熼檺 */ + @Excel(name = "璇曠敤鏈熼檺") + private Long workerTerm; + + /** 杞鏃ユ湡 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "杞鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd") + private Date regularDate; + + /** 绂昏亴鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "绂昏亴鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date quitDate; + + /** 鍚堝悓-璧 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍚堝悓-璧", width = 30, dateFormat = "yyyy-MM-dd") + private Date contractStart; + + /** 鍚堝悓-姝 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍚堝悓-姝", width = 30, dateFormat = "yyyy-MM-dd") + private Date contractEnd; + + /** 鍚堝悓绫诲瀷 */ + @Excel(name = "鍚堝悓绫诲瀷") + private String contractType; + + /** 绀句繚 */ + @Excel(name = "绀句繚") + private String socialType; + @Excel(name = "鏄惁鏂板啘鍚") + private String socialSubsidy; + + /** 宸ラ緞 */ + @Excel(name = "宸ラ緞") + private Long seniority; + + /** 鏄惁鏈夊姞鐝垂 */ + @Excel(name = "鏄惁鏈夊姞鐝垂") + private String isOvertimePay; + + /** 浣忓鏍囪瘑 */ + @Excel(name = "浣忓鏍囪瘑") + private String zsFlag; + + /** 淇濆瘑鍚堝悓 */ + @Excel(name = "淇濆瘑鍚堝悓") + private String secrecy; + + /** 宸ヤ激 */ + @Excel(name = "宸ヤ激") + private String injury; + + /** 闆囦富闄 */ + @Excel(name = "闆囦富闄") + private String insurance; + + /** 浠嬬粛浜 */ + @Excel(name = "浠嬬粛浜") + private String introducer; + + /** 鏄惁鎵撳崱 */ + @Excel(name = "鏄惁鎵撳崱") + private String clockIn; + + /** 鍦ㄨ亴鐘舵 */ + @Excel(name = "鍦ㄨ亴鐘舵") + private String status; + + /** 鍏ㄩ宸ヨ祫鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍏ㄩ宸ヨ祫鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date wagesRatioDate; + + /** 鍏徃 */ + @Excel(name = "鍏徃") + private String companyName; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鍒犻櫎鏍囪瘑 */ + private String delFlag; + + private String isLeader; //鏄瀵 + + public String getSocialSubsidy() { + return socialSubsidy; + } + + public void setSocialSubsidy(String socialSubsidy) { + this.socialSubsidy = socialSubsidy; + } + + public String getIsLeader() { + return isLeader; + } + + public void setIsLeader(String isLeader) { + this.isLeader = isLeader; + } + + public String getCompanyName() { + return companyName; + } + + public void setCompanyName(String companyName) { + this.companyName = companyName; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + public Long getDeptId() + { + return deptId; + } + public void setCode(String code) + { + this.code = code; + } + + public String getCode() + { + return code; + } + public void setName(String name) + { + this.name = name; + } + + public String getName() + { + return name; + } + public void setIdCard(String idCard) + { + this.idCard = idCard; + } + + public String getIdCard() + { + return idCard; + } + public void setSex(String sex) + { + this.sex = sex; + } + + public String getSex() + { + return sex; + } + public void setAge(Long age) + { + this.age = age; + } + + public Long getAge() + { + return age; + } + public void setPhone(String phone) + { + this.phone = phone; + } + + public String getPhone() + { + return phone; + } + public void setAddress(String address) + { + this.address = address; + } + + public String getAddress() + { + return address; + } + public void setLevel(String level) + { + this.level = level; + } + + public String getLevel() + { + return level; + } + public void setMajor(String major) + { + this.major = major; + } + + public String getMajor() + { + return major; + } + public void setSchool(String school) + { + this.school = school; + } + + public String getSchool() + { + return school; + } + public void setBankNumber(String bankNumber) + { + this.bankNumber = bankNumber; + } + + public String getBankNumber() + { + return bankNumber; + } + public void setBank(String bank) + { + this.bank = bank; + } + + public String getBank() + { + return bank; + } + public void setEmploymentDate(Date employmentDate) + { + this.employmentDate = employmentDate; + } + + public Date getEmploymentDate() + { + return employmentDate; + } + public void setExperience(String experience) + { + this.experience = experience; + } + + public String getExperience() + { + return experience; + } + public void setWorkerTerm(Long workerTerm) + { + this.workerTerm = workerTerm; + } + + public Long getWorkerTerm() + { + return workerTerm; + } + public void setRegularDate(Date regularDate) + { + this.regularDate = regularDate; + } + + public Date getRegularDate() + { + return regularDate; + } + public void setQuitDate(Date quitDate) + { + this.quitDate = quitDate; + } + + public Date getQuitDate() + { + return quitDate; + } + public void setContractStart(Date contractStart) + { + this.contractStart = contractStart; + } + + public Date getContractStart() + { + return contractStart; + } + public void setContractEnd(Date contractEnd) + { + this.contractEnd = contractEnd; + } + + public Date getContractEnd() + { + return contractEnd; + } + public void setContractType(String contractType) + { + this.contractType = contractType; + } + + public String getContractType() + { + return contractType; + } + public void setSocialType(String socialType) + { + this.socialType = socialType; + } + + public String getSocialType() + { + return socialType; + } + public void setSeniority(Long seniority) + { + this.seniority = seniority; + } + + public Long getSeniority() + { + return seniority; + } + public void setIsOvertimePay(String isOvertimePay) + { + this.isOvertimePay = isOvertimePay; + } + + public String getIsOvertimePay() + { + return isOvertimePay; + } + public void setZsFlag(String zsFlag) + { + this.zsFlag = zsFlag; + } + + public String getZsFlag() + { + return zsFlag; + } + public void setSecrecy(String secrecy) + { + this.secrecy = secrecy; + } + + public String getSecrecy() + { + return secrecy; + } + public void setInjury(String injury) + { + this.injury = injury; + } + + public String getInjury() + { + return injury; + } + public void setInsurance(String insurance) + { + this.insurance = insurance; + } + + public String getInsurance() + { + return insurance; + } + public void setIntroducer(String introducer) + { + this.introducer = introducer; + } + + public String getIntroducer() + { + return introducer; + } + public void setClockIn(String clockIn) + { + this.clockIn = clockIn; + } + + public String getClockIn() + { + return clockIn; + } + public void setStatus(String status) + { + this.status = status; + } + + public String getStatus() + { + return status; + } + + public Date getWagesRatioDate() { + return wagesRatioDate; + } + + public void setWagesRatioDate(Date wagesRatioDate) { + this.wagesRatioDate = wagesRatioDate; + } + + public void setRemarks(String remarks) + { + this.remarks = remarks; + } + + public String getRemarks() + { + return remarks; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("deptId", getDeptId()) + .append("code", getCode()) + .append("name", getName()) + .append("idCard", getIdCard()) + .append("sex", getSex()) + .append("age", getAge()) + .append("phone", getPhone()) + .append("address", getAddress()) + .append("level", getLevel()) + .append("major", getMajor()) + .append("school", getSchool()) + .append("bankNumber", getBankNumber()) + .append("bank", getBank()) + .append("employmentDate", getEmploymentDate()) + .append("experience", getExperience()) + .append("workerTerm", getWorkerTerm()) + .append("regularDate", getRegularDate()) + .append("quitDate", getQuitDate()) + .append("contractStart", getContractStart()) + .append("contractEnd", getContractEnd()) + .append("contractType", getContractType()) + .append("socialType", getSocialType()) + .append("seniority", getSeniority()) + .append("isOvertimePay", getIsOvertimePay()) + .append("zsFlag", getZsFlag()) + .append("secrecy", getSecrecy()) + .append("injury", getInjury()) + .append("insurance", getInsurance()) + .append("introducer", getIntroducer()) + .append("clockIn", getClockIn()) + .append("status", getStatus()) + .append("wagesRatioDate", getWagesRatioDate()) + .append("remarks", getRemarks()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/system/domain/SysStaffDetail.java b/evo-admin/src/main/java/com/evo/system/domain/SysStaffDetail.java new file mode 100644 index 0000000..c7f2763 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/domain/SysStaffDetail.java @@ -0,0 +1,592 @@ +package com.evo.system.domain; + +import java.math.BigDecimal; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; + +/** + * 鍛樺伐璇︽儏瀵硅薄 sys_staff_detail + * + * @author evo + * @date 2024-11-22 + */ +public class SysStaffDetail extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓婚敭ID */ + private Long id; + + /** 鍛樺伐ID */ + @Excel(name = "鍛樺伐ID") + private Long staffId; + + /** 鍩烘湰宸ヨ祫 */ + @Excel(name = "鍩烘湰宸ヨ祫") + private BigDecimal basicSalary; + + /** 宀椾綅宸ヨ祫 */ + @Excel(name = "宀椾綅宸ヨ祫") + private BigDecimal jobsSalary; + + /** 鏃ヨ柂 */ + @Excel(name = "鏃ヨ柂") + private BigDecimal dailyWage; + + /** 鏃惰柂 */ + @Excel(name = "鏃惰柂") + private BigDecimal hoursSalary; + + /** 鍏ㄥ嫟濂 */ + @Excel(name = "鍏ㄥ嫟濂") + private BigDecimal fullFrequentlySubsidies; + + /** 瀛﹀巻琛ュ姪 */ + @Excel(name = "瀛﹀巻琛ュ姪") + private BigDecimal levelOfEducationSubsidies; + + /** 鍚堝悓琛ュ姪 */ + @Excel(name = "鍚堝悓琛ュ姪") + private BigDecimal contractSubsidies; + + /** 宸ラ緞琛ュ姪 */ + @Excel(name = "宸ラ緞琛ュ姪") + private BigDecimal senioritySubsidies; + + /** 绀句繚琛ュ姪 */ + @Excel(name = "绀句繚琛ュ姪") + private BigDecimal socialSecuritySubsidies; + @Excel(name = "涓彮琛ュ姪") + private BigDecimal middleSubsidies; + + /** 澶滅彮琛ュ姪 */ + @Excel(name = "澶滅彮琛ュ姪") + private BigDecimal nightShiftSubsidies; + + /** 澶滈琛ュ姪 */ + @Excel(name = "澶滈琛ュ姪") + private BigDecimal dinnerSubsidies; + + /** 鍥哄畾琛ュ姪 */ + @Excel(name = "鍥哄畾琛ュ姪") + private BigDecimal fixedAllowance; + + /** 鍏朵粬琛ュ姪 */ + @Excel(name = "鍏朵粬琛ュ姪") + private BigDecimal otherSubsidies; + + /** 鏃╅娑堣垂 */ + @Excel(name = "鏃╅娑堣垂") + private BigDecimal breakfastExpend; + + /** 鍗堥娑堣垂 */ + @Excel(name = "鍗堥娑堣垂") + private BigDecimal lunchExpend; + + /** 鏅氶娑堣垂 */ + @Excel(name = "鏅氶娑堣垂") + private BigDecimal supperExpend; + + /** 绂昏亴鎵f */ + @Excel(name = "绂昏亴鎵f") + private BigDecimal subsidyDeductMoney; + + /** 鍏朵粬鎵f */ + @Excel(name = "鍏朵粬鎵f") + private BigDecimal deductions; + + /** 鍏昏佷繚闄 */ + @Excel(name = "鍏昏佷繚闄") + private BigDecimal endowmentInsurance; + + /** 鍖荤枟淇濋櫓 */ + @Excel(name = "鍖荤枟淇濋櫓") + private BigDecimal medicalInsurance; + + /** 宸ヤ激淇濋櫓 */ + @Excel(name = "宸ヤ激淇濋櫓") + private BigDecimal employmentInjuryInsurance; + + /** 鐢熻偛淇濋櫓 */ + @Excel(name = "鐢熻偛淇濋櫓") + private BigDecimal maternityInsurance; + + /** 澶变笟淇濋櫓 */ + @Excel(name = "澶变笟淇濋櫓") + private BigDecimal unemploymentInsurance; + + /** 鍏Н閲 */ + @Excel(name = "鍏Н閲") + private BigDecimal accumulationFund; + /** 浜旈櫓涓閲戝叕鍙哥即绾 */ + private BigDecimal countInsurance; + + /** 瀛愬コ鏁欒偛 */ + @Excel(name = "瀛愬コ鏁欒偛") + private BigDecimal childrenEducation; + + /** 璧″吇鑰佷汉 */ + @Excel(name = "璧″吇鑰佷汉") + private BigDecimal supportTheOld; + + /** 浣忔埧璐锋 */ + @Excel(name = "浣忔埧璐锋") + private BigDecimal housingLoans; + + /** 浣忔埧绉熼噾 */ + @Excel(name = "浣忔埧绉熼噾") + private BigDecimal housingRents; + + /** 缁х画鏁欒偛 */ + @Excel(name = "缁х画鏁欒偛") + private BigDecimal adultEducation; + + /** 澶х梾鍖荤枟 */ + @Excel(name = "澶х梾鍖荤枟") + private BigDecimal treatmentForSeriousDisease; + + /** 鏈勾绱涓撻」闄勫姞鎵i櫎 */ + @Excel(name = "鏈勾绱涓撻」闄勫姞鎵i櫎") + private BigDecimal specialDeduction; + + /** 鏈勾绱宸插彂宸ヨ祫 */ + @Excel(name = "鏈勾绱宸插彂宸ヨ祫") + private BigDecimal totalWages; + + /** 鏈勾绱宸茬即涓◣ */ + @Excel(name = "鏈勾绱宸茬即涓◣") + private BigDecimal aggregatePersonalIncomeTax; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + private BigDecimal OverWages; //鍔犵彮宸ヨ祫 + private BigDecimal absenteeismSalary; //璇峰亣鎵f + private BigDecimal absenteeismSubsidies; //琛ュ姪鎵i櫎 + + /** 鍒犻櫎鏍囪瘑 */ + private String delFlag; + + public BigDecimal getMiddleSubsidies() { + return middleSubsidies; + } + + public void setMiddleSubsidies(BigDecimal middleSubsidies) { + this.middleSubsidies = middleSubsidies; + } + + public BigDecimal getCountInsurance() { + return countInsurance; + } + + public void setCountInsurance(BigDecimal countInsurance) { + this.countInsurance = countInsurance; + } + + public BigDecimal getAbsenteeismSubsidies() { + return absenteeismSubsidies; + } + + public void setAbsenteeismSubsidies(BigDecimal absenteeismSubsidies) { + this.absenteeismSubsidies = absenteeismSubsidies; + } + + public BigDecimal getAbsenteeismSalary() { + return absenteeismSalary; + } + + public void setAbsenteeismSalary(BigDecimal absenteeismSalary) { + this.absenteeismSalary = absenteeismSalary; + } + + public BigDecimal getOverWages() { + return OverWages; + } + + public void setOverWages(BigDecimal overWages) { + OverWages = overWages; + } + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setStaffId(Long staffId) + { + this.staffId = staffId; + } + + public Long getStaffId() + { + return staffId; + } + public void setBasicSalary(BigDecimal basicSalary) + { + this.basicSalary = basicSalary; + } + + public BigDecimal getBasicSalary() + { + return basicSalary; + } + public void setJobsSalary(BigDecimal jobsSalary) + { + this.jobsSalary = jobsSalary; + } + + public BigDecimal getJobsSalary() + { + return jobsSalary; + } + public void setDailyWage(BigDecimal dailyWage) + { + this.dailyWage = dailyWage; + } + + public BigDecimal getDailyWage() + { + return dailyWage; + } + public void setHoursSalary(BigDecimal hoursSalary) + { + this.hoursSalary = hoursSalary; + } + + public BigDecimal getHoursSalary() + { + return hoursSalary; + } + public void setFullFrequentlySubsidies(BigDecimal fullFrequentlySubsidies) + { + this.fullFrequentlySubsidies = fullFrequentlySubsidies; + } + + public BigDecimal getFullFrequentlySubsidies() + { + return fullFrequentlySubsidies; + } + public void setLevelOfEducationSubsidies(BigDecimal levelOfEducationSubsidies) + { + this.levelOfEducationSubsidies = levelOfEducationSubsidies; + } + + public BigDecimal getLevelOfEducationSubsidies() + { + return levelOfEducationSubsidies; + } + public void setContractSubsidies(BigDecimal contractSubsidies) + { + this.contractSubsidies = contractSubsidies; + } + + public BigDecimal getContractSubsidies() + { + return contractSubsidies; + } + public void setSenioritySubsidies(BigDecimal senioritySubsidies) + { + this.senioritySubsidies = senioritySubsidies; + } + + public BigDecimal getSenioritySubsidies() + { + return senioritySubsidies; + } + public void setSocialSecuritySubsidies(BigDecimal socialSecuritySubsidies) + { + this.socialSecuritySubsidies = socialSecuritySubsidies; + } + + public BigDecimal getSocialSecuritySubsidies() + { + return socialSecuritySubsidies; + } + public void setNightShiftSubsidies(BigDecimal nightShiftSubsidies) + { + this.nightShiftSubsidies = nightShiftSubsidies; + } + + public BigDecimal getNightShiftSubsidies() + { + return nightShiftSubsidies; + } + public void setDinnerSubsidies(BigDecimal dinnerSubsidies) + { + this.dinnerSubsidies = dinnerSubsidies; + } + + public BigDecimal getDinnerSubsidies() + { + return dinnerSubsidies; + } + public void setFixedAllowance(BigDecimal fixedAllowance) + { + this.fixedAllowance = fixedAllowance; + } + + public BigDecimal getFixedAllowance() + { + return fixedAllowance; + } + public void setOtherSubsidies(BigDecimal otherSubsidies) + { + this.otherSubsidies = otherSubsidies; + } + + public BigDecimal getOtherSubsidies() + { + return otherSubsidies; + } + public void setBreakfastExpend(BigDecimal breakfastExpend) + { + this.breakfastExpend = breakfastExpend; + } + + public BigDecimal getBreakfastExpend() + { + return breakfastExpend; + } + public void setLunchExpend(BigDecimal lunchExpend) + { + this.lunchExpend = lunchExpend; + } + + public BigDecimal getLunchExpend() + { + return lunchExpend; + } + public void setSupperExpend(BigDecimal supperExpend) + { + this.supperExpend = supperExpend; + } + + public BigDecimal getSupperExpend() + { + return supperExpend; + } + public void setSubsidyDeductMoney(BigDecimal subsidyDeductMoney) + { + this.subsidyDeductMoney = subsidyDeductMoney; + } + + public BigDecimal getSubsidyDeductMoney() + { + return subsidyDeductMoney; + } + public void setDeductions(BigDecimal deductions) + { + this.deductions = deductions; + } + + public BigDecimal getDeductions() + { + return deductions; + } + public void setEndowmentInsurance(BigDecimal endowmentInsurance) + { + this.endowmentInsurance = endowmentInsurance; + } + + public BigDecimal getEndowmentInsurance() + { + return endowmentInsurance; + } + public void setMedicalInsurance(BigDecimal medicalInsurance) + { + this.medicalInsurance = medicalInsurance; + } + + public BigDecimal getMedicalInsurance() + { + return medicalInsurance; + } + public void setEmploymentInjuryInsurance(BigDecimal employmentInjuryInsurance) + { + this.employmentInjuryInsurance = employmentInjuryInsurance; + } + + public BigDecimal getEmploymentInjuryInsurance() + { + return employmentInjuryInsurance; + } + public void setMaternityInsurance(BigDecimal maternityInsurance) + { + this.maternityInsurance = maternityInsurance; + } + + public BigDecimal getMaternityInsurance() + { + return maternityInsurance; + } + public void setUnemploymentInsurance(BigDecimal unemploymentInsurance) + { + this.unemploymentInsurance = unemploymentInsurance; + } + + public BigDecimal getUnemploymentInsurance() + { + return unemploymentInsurance; + } + public void setAccumulationFund(BigDecimal accumulationFund) + { + this.accumulationFund = accumulationFund; + } + + public BigDecimal getAccumulationFund() + { + return accumulationFund; + } + public void setChildrenEducation(BigDecimal childrenEducation) + { + this.childrenEducation = childrenEducation; + } + + public BigDecimal getChildrenEducation() + { + return childrenEducation; + } + public void setSupportTheOld(BigDecimal supportTheOld) + { + this.supportTheOld = supportTheOld; + } + + public BigDecimal getSupportTheOld() + { + return supportTheOld; + } + public void setHousingLoans(BigDecimal housingLoans) + { + this.housingLoans = housingLoans; + } + + public BigDecimal getHousingLoans() + { + return housingLoans; + } + public void setHousingRents(BigDecimal housingRents) + { + this.housingRents = housingRents; + } + + public BigDecimal getHousingRents() + { + return housingRents; + } + public void setAdultEducation(BigDecimal adultEducation) + { + this.adultEducation = adultEducation; + } + + public BigDecimal getAdultEducation() + { + return adultEducation; + } + public void setTreatmentForSeriousDisease(BigDecimal treatmentForSeriousDisease) + { + this.treatmentForSeriousDisease = treatmentForSeriousDisease; + } + + public BigDecimal getTreatmentForSeriousDisease() + { + return treatmentForSeriousDisease; + } + public void setSpecialDeduction(BigDecimal specialDeduction) + { + this.specialDeduction = specialDeduction; + } + + public BigDecimal getSpecialDeduction() + { + return specialDeduction; + } + public void setTotalWages(BigDecimal totalWages) + { + this.totalWages = totalWages; + } + + public BigDecimal getTotalWages() + { + return totalWages; + } + public void setAggregatePersonalIncomeTax(BigDecimal aggregatePersonalIncomeTax) + { + this.aggregatePersonalIncomeTax = aggregatePersonalIncomeTax; + } + + public BigDecimal getAggregatePersonalIncomeTax() + { + return aggregatePersonalIncomeTax; + } + public void setRemarks(String remarks) + { + this.remarks = remarks; + } + + public String getRemarks() + { + return remarks; + } + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getDelFlag() + { + return delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("staffId", getStaffId()) + .append("basicSalary", getBasicSalary()) + .append("jobsSalary", getJobsSalary()) + .append("dailyWage", getDailyWage()) + .append("hoursSalary", getHoursSalary()) + .append("fullFrequentlySubsidies", getFullFrequentlySubsidies()) + .append("levelOfEducationSubsidies", getLevelOfEducationSubsidies()) + .append("contractSubsidies", getContractSubsidies()) + .append("senioritySubsidies", getSenioritySubsidies()) + .append("socialSecuritySubsidies", getSocialSecuritySubsidies()) + .append("nightShiftSubsidies", getNightShiftSubsidies()) + .append("dinnerSubsidies", getDinnerSubsidies()) + .append("fixedAllowance", getFixedAllowance()) + .append("otherSubsidies", getOtherSubsidies()) + .append("breakfastExpend", getBreakfastExpend()) + .append("lunchExpend", getLunchExpend()) + .append("supperExpend", getSupperExpend()) + .append("subsidyDeductMoney", getSubsidyDeductMoney()) + .append("deductions", getDeductions()) + .append("endowmentInsurance", getEndowmentInsurance()) + .append("medicalInsurance", getMedicalInsurance()) + .append("employmentInjuryInsurance", getEmploymentInjuryInsurance()) + .append("maternityInsurance", getMaternityInsurance()) + .append("unemploymentInsurance", getUnemploymentInsurance()) + .append("accumulationFund", getAccumulationFund()) + .append("childrenEducation", getChildrenEducation()) + .append("supportTheOld", getSupportTheOld()) + .append("housingLoans", getHousingLoans()) + .append("housingRents", getHousingRents()) + .append("adultEducation", getAdultEducation()) + .append("treatmentForSeriousDisease", getTreatmentForSeriousDisease()) + .append("specialDeduction", getSpecialDeduction()) + .append("totalWages", getTotalWages()) + .append("aggregatePersonalIncomeTax", getAggregatePersonalIncomeTax()) + .append("remarks", getRemarks()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/system/domain/SysUserOnline.java b/evo-admin/src/main/java/com/evo/system/domain/SysUserOnline.java new file mode 100644 index 0000000..38a019b --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/domain/SysUserOnline.java @@ -0,0 +1,113 @@ +package com.evo.system.domain; + +/** + * 褰撳墠鍦ㄧ嚎浼氳瘽 + * + * @author evo + */ +public class SysUserOnline +{ + /** 浼氳瘽缂栧彿 */ + private String tokenId; + + /** 閮ㄩ棬鍚嶇О */ + private String deptName; + + /** 鐢ㄦ埛鍚嶇О */ + private String userName; + + /** 鐧诲綍IP鍦板潃 */ + private String ipaddr; + + /** 鐧诲綍鍦板潃 */ + private String loginLocation; + + /** 娴忚鍣ㄧ被鍨 */ + private String browser; + + /** 鎿嶄綔绯荤粺 */ + private String os; + + /** 鐧诲綍鏃堕棿 */ + private Long loginTime; + + public String getTokenId() + { + return tokenId; + } + + public void setTokenId(String tokenId) + { + this.tokenId = tokenId; + } + + public String getDeptName() + { + return deptName; + } + + public void setDeptName(String deptName) + { + this.deptName = deptName; + } + + public String getUserName() + { + return userName; + } + + public void setUserName(String userName) + { + this.userName = userName; + } + + public String getIpaddr() + { + return ipaddr; + } + + public void setIpaddr(String ipaddr) + { + this.ipaddr = ipaddr; + } + + public String getLoginLocation() + { + return loginLocation; + } + + public void setLoginLocation(String loginLocation) + { + this.loginLocation = loginLocation; + } + + public String getBrowser() + { + return browser; + } + + public void setBrowser(String browser) + { + this.browser = browser; + } + + public String getOs() + { + return os; + } + + public void setOs(String os) + { + this.os = os; + } + + public Long getLoginTime() + { + return loginTime; + } + + public void setLoginTime(Long loginTime) + { + this.loginTime = loginTime; + } +} diff --git a/evo-admin/src/main/java/com/evo/system/domain/SysUserRole.java b/evo-admin/src/main/java/com/evo/system/domain/SysUserRole.java new file mode 100644 index 0000000..0dfd62c --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/domain/SysUserRole.java @@ -0,0 +1,46 @@ +package com.evo.system.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 鐢ㄦ埛鍜岃鑹插叧鑱 sys_user_role + * + * @author evo + */ +public class SysUserRole +{ + /** 鐢ㄦ埛ID */ + private Long userId; + + /** 瑙掕壊ID */ + private Long roleId; + + public Long getUserId() + { + return userId; + } + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getRoleId() + { + return roleId; + } + + public void setRoleId(Long roleId) + { + this.roleId = roleId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("roleId", getRoleId()) + .toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/system/domain/vo/MetaVo.java b/evo-admin/src/main/java/com/evo/system/domain/vo/MetaVo.java new file mode 100644 index 0000000..45bb0d1 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/domain/vo/MetaVo.java @@ -0,0 +1,106 @@ +package com.evo.system.domain.vo; + +import com.evo.common.utils.StringUtils; + +/** + * 璺敱鏄剧ず淇℃伅 + * + * @author evo + */ +public class MetaVo +{ + /** + * 璁剧疆璇ヨ矾鐢卞湪渚ц竟鏍忓拰闈㈠寘灞戜腑灞曠ず鐨勫悕瀛 + */ + private String title; + + /** + * 璁剧疆璇ヨ矾鐢辩殑鍥炬爣锛屽搴旇矾寰剆rc/assets/icons/svg + */ + private String icon; + + /** + * 璁剧疆涓簍rue锛屽垯涓嶄細琚 缂撳瓨 + */ + private boolean noCache; + + /** + * 鍐呴摼鍦板潃锛坔ttp(s)://寮澶达級 + */ + private String link; + + public MetaVo() + { + } + + public MetaVo(String title, String icon) + { + this.title = title; + this.icon = icon; + } + + public MetaVo(String title, String icon, boolean noCache) + { + this.title = title; + this.icon = icon; + this.noCache = noCache; + } + + public MetaVo(String title, String icon, String link) + { + this.title = title; + this.icon = icon; + this.link = link; + } + + public MetaVo(String title, String icon, boolean noCache, String link) + { + this.title = title; + this.icon = icon; + this.noCache = noCache; + if (StringUtils.ishttp(link)) + { + this.link = link; + } + } + + public boolean isNoCache() + { + return noCache; + } + + public void setNoCache(boolean noCache) + { + this.noCache = noCache; + } + + public String getTitle() + { + return title; + } + + public void setTitle(String title) + { + this.title = title; + } + + public String getIcon() + { + return icon; + } + + public void setIcon(String icon) + { + this.icon = icon; + } + + public String getLink() + { + return link; + } + + public void setLink(String link) + { + this.link = link; + } +} diff --git a/evo-admin/src/main/java/com/evo/system/domain/vo/RouterVo.java b/evo-admin/src/main/java/com/evo/system/domain/vo/RouterVo.java new file mode 100644 index 0000000..dafec1c --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/domain/vo/RouterVo.java @@ -0,0 +1,148 @@ +package com.evo.system.domain.vo; + +import com.fasterxml.jackson.annotation.JsonInclude; +import java.util.List; + +/** + * 璺敱閰嶇疆淇℃伅 + * + * @author evo + */ +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public class RouterVo +{ + /** + * 璺敱鍚嶅瓧 + */ + private String name; + + /** + * 璺敱鍦板潃 + */ + private String path; + + /** + * 鏄惁闅愯棌璺敱锛屽綋璁剧疆 true 鐨勬椂鍊欒璺敱涓嶄細鍐嶄晶杈规爮鍑虹幇 + */ + private boolean hidden; + + /** + * 閲嶅畾鍚戝湴鍧锛屽綋璁剧疆 noRedirect 鐨勬椂鍊欒璺敱鍦ㄩ潰鍖呭睉瀵艰埅涓笉鍙鐐瑰嚮 + */ + private String redirect; + + /** + * 缁勪欢鍦板潃 + */ + private String component; + + /** + * 璺敱鍙傛暟锛氬 {"id": 1, "name": "ry"} + */ + private String query; + + /** + * 褰撲綘涓涓矾鐢变笅闈㈢殑 children 澹版槑鐨勮矾鐢卞ぇ浜1涓椂锛岃嚜鍔ㄤ細鍙樻垚宓屽鐨勬ā寮--濡傜粍浠堕〉闈 + */ + private Boolean alwaysShow; + + /** + * 鍏朵粬鍏冪礌 + */ + private MetaVo meta; + + /** + * 瀛愯矾鐢 + */ + private List children; + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + public String getPath() + { + return path; + } + + public void setPath(String path) + { + this.path = path; + } + + public boolean getHidden() + { + return hidden; + } + + public void setHidden(boolean hidden) + { + this.hidden = hidden; + } + + public String getRedirect() + { + return redirect; + } + + public void setRedirect(String redirect) + { + this.redirect = redirect; + } + + public String getComponent() + { + return component; + } + + public void setComponent(String component) + { + this.component = component; + } + + public String getQuery() + { + return query; + } + + public void setQuery(String query) + { + this.query = query; + } + + public Boolean getAlwaysShow() + { + return alwaysShow; + } + + public void setAlwaysShow(Boolean alwaysShow) + { + this.alwaysShow = alwaysShow; + } + + public MetaVo getMeta() + { + return meta; + } + + public void setMeta(MetaVo meta) + { + this.meta = meta; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } +} diff --git a/evo-admin/src/main/java/com/evo/system/domain/vo/SysStaffVo.java b/evo-admin/src/main/java/com/evo/system/domain/vo/SysStaffVo.java new file mode 100644 index 0000000..2568290 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/domain/vo/SysStaffVo.java @@ -0,0 +1,769 @@ +package com.evo.system.domain.vo; + +import com.evo.common.annotation.Excel; +import com.fasterxml.jackson.annotation.JsonFormat; +import java.math.BigDecimal; +import java.util.Date; + +public class SysStaffVo { + @Excel(name = "* 閮ㄩ棬") + private String deptName; + /** 缂栧彿 */ + @Excel(name = "缂栧彿") + private String code; + /** 濮撳悕 */ + @Excel(name = "* 濮撳悕") + private String name; + /** 韬唤璇佸彿 */ + @Excel(name = "* 韬唤璇佸彿") + private String idCard; + /** 鎬у埆 */ + @Excel(name = "鎬у埆") + private String sex; + /** 骞撮緞 */ + @Excel(name = "骞撮緞") + private Long age; + /** 鐢佃瘽 */ + @Excel(name = "鐢佃瘽") + private String phone; + /** 浣忓潃 */ + @Excel(name = "浣忓潃") + private String address; + /** 瀛﹀巻 */ + @Excel(name = "* 瀛﹀巻") + private String level; + /** 涓撲笟 */ + @Excel(name = "涓撲笟") + private String major; + /** 姣曚笟瀛︽牎 */ + @Excel(name = "姣曚笟瀛︽牎") + private String school; + /** 閾惰鍗″彿 */ + @Excel(name = "閾惰鍗″彿") + private String bankNumber; + /** 寮鎴疯 */ + @Excel(name = "寮鎴疯") + private String bank; + /** 鍏ヨ亴鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = " * 鍏ヨ亴鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date employmentDate; + /** 鍏ㄩ宸ヨ祫鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍏ㄩ宸ヨ祫鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date wagesRatioDate; + /** 灞ュ巻 */ + @Excel(name = "灞ュ巻") + private String experience; + /** 璇曠敤鏈熼檺 */ + @Excel(name = "璇曠敤鏈熼檺") + private Long workerTerm; + /** 杞鏃ユ湡 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "杞鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd") + private Date regularDate; + /** 绂昏亴鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "绂昏亴鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date quitDate; + /** 鍚堝悓-璧 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍚堝悓-璧", width = 30, dateFormat = "yyyy-MM-dd") + private Date contractStart; + /** 鍚堝悓-姝 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍚堝悓-姝", width = 30, dateFormat = "yyyy-MM-dd") + private Date contractEnd; + /** 鍚堝悓绫诲瀷 */ + @Excel(name = "* 鍚堝悓鏈熼檺") + private String contractType; + @Excel(name = "* 鏄惁鏂板啘鍚") + private String socialSubsidy; + /** 绀句繚 */ + @Excel(name = "* 绀句繚") + private String socialType; + /** 宸ラ緞 */ + @Excel(name = "宸ラ緞") + private Long seniority; + + /** 鏄惁鏈夊姞鐝垂 */ + @Excel(name = "* 鍔犵彮璐") + private String isOvertimePay; + /** 浣忓鏍囪瘑 */ + @Excel(name = "* 浣忓") + private String zsFlag; + /** 淇濆瘑鍚堝悓 */ + @Excel(name = "淇濆瘑鍚堝悓") + private String secrecy; + /** 宸ヤ激 */ + @Excel(name = "宸ヤ激") + private String injury; + /** 闆囦富闄 */ + @Excel(name = "闆囦富闄") + private String insurance; + /** 浠嬬粛浜 */ + @Excel(name = "浠嬬粛浜") + private String introducer; + /** 鏄惁鎵撳崱 */ + @Excel(name = "* 鎵撳崱") + private String clockIn; + /** 鍦ㄨ亴鐘舵 */ + @Excel(name = "鍦ㄨ亴鐘舵") + private String status; + @Excel(name = "* 鍏徃") + private String companyName; + @Excel(name = "鍩烘湰宸ヨ祫") + private BigDecimal basicSalary; + /** 宀椾綅宸ヨ祫 */ + @Excel(name = "宀椾綅宸ヨ祫") + private BigDecimal jobsSalary; + /** 鏃ヨ柂 */ + @Excel(name = "鏃ヨ柂") + private BigDecimal dailyWage; + /** 鏃惰柂 */ + @Excel(name = "鏃惰柂") + private BigDecimal hoursSalary; + /** 鍏ㄥ嫟濂 */ + @Excel(name = "鍏ㄥ嫟濂") + private BigDecimal fullFrequentlySubsidies; + /** 瀛﹀巻琛ュ姪 */ + @Excel(name = "瀛﹀巻琛ュ姪") + private BigDecimal levelOfEducationSubsidies; + /** 鍚堝悓琛ュ姪 */ + @Excel(name = "鍚堝悓琛ュ姪") + private BigDecimal contractSubsidies; + /** 宸ラ緞琛ュ姪 */ + @Excel(name = "宸ラ緞琛ュ姪") + private BigDecimal senioritySubsidies; + /** 绀句繚琛ュ姪 */ + @Excel(name = "绀句繚琛ュ姪") + private BigDecimal socialSecuritySubsidies; + + @Excel(name = "涓彮琛ュ姪") + private BigDecimal middleSubsidies; + /** 澶滅彮琛ュ姪 */ + @Excel(name = "澶滅彮琛ュ姪") + private BigDecimal nightShiftSubsidies; + /** 澶滈琛ュ姪 */ + @Excel(name = "澶滈琛ュ姪") + private BigDecimal dinnerSubsidies; + /** 鍥哄畾琛ュ姪 */ + @Excel(name = "鍥哄畾琛ュ姪") + private BigDecimal fixedAllowance; + /** 鍏朵粬琛ュ姪 */ + @Excel(name = "鍏朵粬琛ュ姪") + private BigDecimal otherSubsidies; + /** 鏃╅娑堣垂 */ + @Excel(name = "鏃╅娑堣垂") + private BigDecimal breakfastExpend; + /** 鍗堥娑堣垂 */ + @Excel(name = "鍗堥娑堣垂") + private BigDecimal lunchExpend; + /** 鏅氶娑堣垂 */ + @Excel(name = "鏅氶娑堣垂") + private BigDecimal supperExpend; + /** 绂昏亴鎵f */ + @Excel(name = "绂昏亴鎵f") + private BigDecimal subsidyDeductMoney; + /** 鍏朵粬鎵f */ + @Excel(name = "鍏朵粬鎵f") + private BigDecimal deductions; + /** 鍏昏佷繚闄 */ + @Excel(name = "鍏昏佷繚闄") + private BigDecimal endowmentInsurance; + /** 鍖荤枟淇濋櫓 */ + @Excel(name = "鍖荤枟淇濋櫓") + private BigDecimal medicalInsurance; + /** 宸ヤ激淇濋櫓 */ + @Excel(name = "宸ヤ激淇濋櫓") + private BigDecimal employmentInjuryInsurance; + /** 鐢熻偛淇濋櫓 */ + @Excel(name = "鐢熻偛淇濋櫓") + private BigDecimal maternityInsurance; + /** 澶变笟淇濋櫓 */ + @Excel(name = "澶变笟淇濋櫓") + private BigDecimal unemploymentInsurance; + /** 鍏Н閲 */ + @Excel(name = "鍏Н閲") + private BigDecimal accumulationFund; + /** 瀛愬コ鏁欒偛 */ + @Excel(name = "瀛愬コ鏁欒偛") + private BigDecimal childrenEducation; + /** 璧″吇鑰佷汉 */ + @Excel(name = "璧″吇鑰佷汉") + private BigDecimal supportTheOld; + /** 浣忔埧璐锋 */ + @Excel(name = "浣忔埧璐锋") + private BigDecimal housingLoans; + /** 浣忔埧绉熼噾 */ + @Excel(name = "浣忔埧绉熼噾") + private BigDecimal housingRents; + /** 缁х画鏁欒偛 */ + @Excel(name = "缁х画鏁欒偛") + private BigDecimal adultEducation; + /** 澶х梾鍖荤枟 */ + @Excel(name = "澶х梾鍖荤枟") + private BigDecimal treatmentForSeriousDisease; + /** 鏈勾绱涓撻」闄勫姞鎵i櫎 */ + @Excel(name = "鏈勾绱涓撻」闄勫姞鎵i櫎") + private BigDecimal specialDeduction; + /** 鏈勾绱宸插彂宸ヨ祫 */ + @Excel(name = "鏈勾绱宸插彂宸ヨ祫") + private BigDecimal totalWages; + /** 鏈勾绱宸茬即涓◣ */ + @Excel(name = "鏈勾绱宸茬即涓◣") + private BigDecimal aggregatePersonalIncomeTax; + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + public String getSocialSubsidy() { + return socialSubsidy; + } + + public void setSocialSubsidy(String socialSubsidy) { + this.socialSubsidy = socialSubsidy; + } + + public BigDecimal getMiddleSubsidies() { + return middleSubsidies; + } + + public void setMiddleSubsidies(BigDecimal middleSubsidies) { + this.middleSubsidies = middleSubsidies; + } + + public String getCompanyName() { + return companyName; + } + + public void setCompanyName(String companyName) { + this.companyName = companyName; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getIdCard() { + return idCard; + } + + public void setIdCard(String idCard) { + this.idCard = idCard; + } + + public String getSex() { + return sex; + } + + public void setSex(String sex) { + this.sex = sex; + } + + public Long getAge() { + return age; + } + + public void setAge(Long age) { + this.age = age; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getLevel() { + return level; + } + + public void setLevel(String level) { + this.level = level; + } + + public String getMajor() { + return major; + } + + public void setMajor(String major) { + this.major = major; + } + + public String getSchool() { + return school; + } + + public void setSchool(String school) { + this.school = school; + } + + public String getBankNumber() { + return bankNumber; + } + + public void setBankNumber(String bankNumber) { + this.bankNumber = bankNumber; + } + + public String getBank() { + return bank; + } + + public void setBank(String bank) { + this.bank = bank; + } + + public Date getEmploymentDate() { + return employmentDate; + } + + public void setEmploymentDate(Date employmentDate) { + this.employmentDate = employmentDate; + } + + public Date getWagesRatioDate() { + return wagesRatioDate; + } + + public void setWagesRatioDate(Date wagesRatioDate) { + this.wagesRatioDate = wagesRatioDate; + } + + public String getExperience() { + return experience; + } + + public void setExperience(String experience) { + this.experience = experience; + } + + public Long getWorkerTerm() { + return workerTerm; + } + + public void setWorkerTerm(Long workerTerm) { + this.workerTerm = workerTerm; + } + + public Date getRegularDate() { + return regularDate; + } + + public void setRegularDate(Date regularDate) { + this.regularDate = regularDate; + } + + public Date getQuitDate() { + return quitDate; + } + + public void setQuitDate(Date quitDate) { + this.quitDate = quitDate; + } + + public Date getContractStart() { + return contractStart; + } + + public void setContractStart(Date contractStart) { + this.contractStart = contractStart; + } + + public Date getContractEnd() { + return contractEnd; + } + + public void setContractEnd(Date contractEnd) { + this.contractEnd = contractEnd; + } + + public String getContractType() { + return contractType; + } + + public void setContractType(String contractType) { + this.contractType = contractType; + } + + public String getSocialType() { + return socialType; + } + + public void setSocialType(String socialType) { + this.socialType = socialType; + } + + public Long getSeniority() { + return seniority; + } + + public void setSeniority(Long seniority) { + this.seniority = seniority; + } + + public String getIsOvertimePay() { + return isOvertimePay; + } + + public void setIsOvertimePay(String isOvertimePay) { + this.isOvertimePay = isOvertimePay; + } + + public String getZsFlag() { + return zsFlag; + } + + public void setZsFlag(String zsFlag) { + this.zsFlag = zsFlag; + } + + public String getSecrecy() { + return secrecy; + } + + public void setSecrecy(String secrecy) { + this.secrecy = secrecy; + } + + public String getInjury() { + return injury; + } + + public void setInjury(String injury) { + this.injury = injury; + } + + public String getInsurance() { + return insurance; + } + + public void setInsurance(String insurance) { + this.insurance = insurance; + } + + public String getIntroducer() { + return introducer; + } + + public void setIntroducer(String introducer) { + this.introducer = introducer; + } + + public String getClockIn() { + return clockIn; + } + + public void setClockIn(String clockIn) { + this.clockIn = clockIn; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public BigDecimal getBasicSalary() { + return basicSalary; + } + + public void setBasicSalary(BigDecimal basicSalary) { + this.basicSalary = basicSalary; + } + + public BigDecimal getJobsSalary() { + return jobsSalary; + } + + public void setJobsSalary(BigDecimal jobsSalary) { + this.jobsSalary = jobsSalary; + } + + public BigDecimal getDailyWage() { + return dailyWage; + } + + public void setDailyWage(BigDecimal dailyWage) { + this.dailyWage = dailyWage; + } + + public BigDecimal getHoursSalary() { + return hoursSalary; + } + + public void setHoursSalary(BigDecimal hoursSalary) { + this.hoursSalary = hoursSalary; + } + + public BigDecimal getFullFrequentlySubsidies() { + return fullFrequentlySubsidies; + } + + public void setFullFrequentlySubsidies(BigDecimal fullFrequentlySubsidies) { + this.fullFrequentlySubsidies = fullFrequentlySubsidies; + } + + public BigDecimal getLevelOfEducationSubsidies() { + return levelOfEducationSubsidies; + } + + public void setLevelOfEducationSubsidies(BigDecimal levelOfEducationSubsidies) { + this.levelOfEducationSubsidies = levelOfEducationSubsidies; + } + + public BigDecimal getContractSubsidies() { + return contractSubsidies; + } + + public void setContractSubsidies(BigDecimal contractSubsidies) { + this.contractSubsidies = contractSubsidies; + } + + public BigDecimal getSenioritySubsidies() { + return senioritySubsidies; + } + + public void setSenioritySubsidies(BigDecimal senioritySubsidies) { + this.senioritySubsidies = senioritySubsidies; + } + + public BigDecimal getSocialSecuritySubsidies() { + return socialSecuritySubsidies; + } + + public void setSocialSecuritySubsidies(BigDecimal socialSecuritySubsidies) { + this.socialSecuritySubsidies = socialSecuritySubsidies; + } + + public BigDecimal getNightShiftSubsidies() { + return nightShiftSubsidies; + } + + public void setNightShiftSubsidies(BigDecimal nightShiftSubsidies) { + this.nightShiftSubsidies = nightShiftSubsidies; + } + + public BigDecimal getDinnerSubsidies() { + return dinnerSubsidies; + } + + public void setDinnerSubsidies(BigDecimal dinnerSubsidies) { + this.dinnerSubsidies = dinnerSubsidies; + } + + public BigDecimal getFixedAllowance() { + return fixedAllowance; + } + + public void setFixedAllowance(BigDecimal fixedAllowance) { + this.fixedAllowance = fixedAllowance; + } + + public BigDecimal getOtherSubsidies() { + return otherSubsidies; + } + + public void setOtherSubsidies(BigDecimal otherSubsidies) { + this.otherSubsidies = otherSubsidies; + } + + public BigDecimal getBreakfastExpend() { + return breakfastExpend; + } + + public void setBreakfastExpend(BigDecimal breakfastExpend) { + this.breakfastExpend = breakfastExpend; + } + + public BigDecimal getLunchExpend() { + return lunchExpend; + } + + public void setLunchExpend(BigDecimal lunchExpend) { + this.lunchExpend = lunchExpend; + } + + public BigDecimal getSupperExpend() { + return supperExpend; + } + + public void setSupperExpend(BigDecimal supperExpend) { + this.supperExpend = supperExpend; + } + + public BigDecimal getSubsidyDeductMoney() { + return subsidyDeductMoney; + } + + public void setSubsidyDeductMoney(BigDecimal subsidyDeductMoney) { + this.subsidyDeductMoney = subsidyDeductMoney; + } + + public BigDecimal getDeductions() { + return deductions; + } + + public void setDeductions(BigDecimal deductions) { + this.deductions = deductions; + } + + public BigDecimal getEndowmentInsurance() { + return endowmentInsurance; + } + + public void setEndowmentInsurance(BigDecimal endowmentInsurance) { + this.endowmentInsurance = endowmentInsurance; + } + + public BigDecimal getMedicalInsurance() { + return medicalInsurance; + } + + public void setMedicalInsurance(BigDecimal medicalInsurance) { + this.medicalInsurance = medicalInsurance; + } + + public BigDecimal getEmploymentInjuryInsurance() { + return employmentInjuryInsurance; + } + + public void setEmploymentInjuryInsurance(BigDecimal employmentInjuryInsurance) { + this.employmentInjuryInsurance = employmentInjuryInsurance; + } + + public BigDecimal getMaternityInsurance() { + return maternityInsurance; + } + + public void setMaternityInsurance(BigDecimal maternityInsurance) { + this.maternityInsurance = maternityInsurance; + } + + public BigDecimal getUnemploymentInsurance() { + return unemploymentInsurance; + } + + public void setUnemploymentInsurance(BigDecimal unemploymentInsurance) { + this.unemploymentInsurance = unemploymentInsurance; + } + + public BigDecimal getAccumulationFund() { + return accumulationFund; + } + + public void setAccumulationFund(BigDecimal accumulationFund) { + this.accumulationFund = accumulationFund; + } + + public BigDecimal getChildrenEducation() { + return childrenEducation; + } + + public void setChildrenEducation(BigDecimal childrenEducation) { + this.childrenEducation = childrenEducation; + } + + public BigDecimal getSupportTheOld() { + return supportTheOld; + } + + public void setSupportTheOld(BigDecimal supportTheOld) { + this.supportTheOld = supportTheOld; + } + + public BigDecimal getHousingLoans() { + return housingLoans; + } + + public void setHousingLoans(BigDecimal housingLoans) { + this.housingLoans = housingLoans; + } + + public BigDecimal getHousingRents() { + return housingRents; + } + + public void setHousingRents(BigDecimal housingRents) { + this.housingRents = housingRents; + } + + public BigDecimal getAdultEducation() { + return adultEducation; + } + + public void setAdultEducation(BigDecimal adultEducation) { + this.adultEducation = adultEducation; + } + + public BigDecimal getTreatmentForSeriousDisease() { + return treatmentForSeriousDisease; + } + + public void setTreatmentForSeriousDisease(BigDecimal treatmentForSeriousDisease) { + this.treatmentForSeriousDisease = treatmentForSeriousDisease; + } + + public BigDecimal getSpecialDeduction() { + return specialDeduction; + } + + public void setSpecialDeduction(BigDecimal specialDeduction) { + this.specialDeduction = specialDeduction; + } + + public BigDecimal getTotalWages() { + return totalWages; + } + + public void setTotalWages(BigDecimal totalWages) { + this.totalWages = totalWages; + } + public BigDecimal getAggregatePersonalIncomeTax() { + return aggregatePersonalIncomeTax; + } + + public void setAggregatePersonalIncomeTax(BigDecimal aggregatePersonalIncomeTax) { + this.aggregatePersonalIncomeTax = aggregatePersonalIncomeTax; + } + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } +} diff --git a/evo-admin/src/main/java/com/evo/system/mapper/SysDeptMapper.java b/evo-admin/src/main/java/com/evo/system/mapper/SysDeptMapper.java new file mode 100644 index 0000000..cc8194b --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/mapper/SysDeptMapper.java @@ -0,0 +1,130 @@ +package com.evo.system.mapper; + +import java.util.List; +import org.apache.ibatis.annotations.Param; +import com.evo.common.core.domain.entity.SysDept; + +/** + * 閮ㄩ棬绠$悊 鏁版嵁灞 + * + * @author evo + */ +public interface SysDeptMapper +{ + /** + * 鏌ヨ閮ㄩ棬绠$悊鏁版嵁 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 閮ㄩ棬淇℃伅闆嗗悎 + */ + public List selectDeptList(SysDept dept); + /** + * 鏍规嵁瑙掕壊ID鏌ヨ閮ㄩ棬鏍戜俊鎭 + * + * @param roleId 瑙掕壊ID + * @param deptCheckStrictly 閮ㄩ棬鏍戦夋嫨椤规槸鍚﹀叧鑱旀樉绀 + * @return 閫変腑閮ㄩ棬鍒楄〃 + */ + public List selectDeptListByRoleId(@Param("roleId") Long roleId, @Param("deptCheckStrictly") boolean deptCheckStrictly); + /** + * 鏍规嵁閮ㄩ棬ID鏌ヨ淇℃伅 + * + * @param deptId 閮ㄩ棬ID + * @return 閮ㄩ棬淇℃伅 + */ + public SysDept selectDeptById(Long deptId); + /** + * 鏍规嵁ID鏌ヨ鎵鏈夊瓙閮ㄩ棬 + * + * @param deptId 閮ㄩ棬ID + * @return 閮ㄩ棬鍒楄〃 + */ + public List selectChildrenDeptById(Long deptId); + /** + * 鏍规嵁ID鏌ヨ鎵鏈夊瓙閮ㄩ棬锛堟甯哥姸鎬侊級 + * + * @param deptId 閮ㄩ棬ID + * @return 瀛愰儴闂ㄦ暟 + */ + public int selectNormalChildrenDeptById(Long deptId); + /** + * 鏄惁瀛樺湪瀛愯妭鐐 + * + * @param deptId 閮ㄩ棬ID + * @return 缁撴灉 + */ + public int hasChildByDeptId(Long deptId); + /** + * 鏌ヨ閮ㄩ棬鏄惁瀛樺湪鐢ㄦ埛 + * + * @param deptId 閮ㄩ棬ID + * @return 缁撴灉 + */ + public int checkDeptExistUser(Long deptId); + /** + * 鏍¢獙閮ㄩ棬鍚嶇О鏄惁鍞竴 + * + * @param deptName 閮ㄩ棬鍚嶇О + * @param parentId 鐖堕儴闂↖D + * @return 缁撴灉 + */ + public SysDept checkDeptNameUnique(@Param("deptName") String deptName, @Param("parentId") Long parentId); + /** + * 鏂板閮ㄩ棬淇℃伅 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 缁撴灉 + */ + public int insertDept(SysDept dept); + /** + * 淇敼閮ㄩ棬淇℃伅 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 缁撴灉 + */ + public int updateDept(SysDept dept); + /** + * 淇敼鎵鍦ㄩ儴闂ㄦ甯哥姸鎬 + * + * @param deptIds 閮ㄩ棬ID缁 + */ + public void updateDeptStatusNormal(Long[] deptIds); + /** + * 淇敼瀛愬厓绱犲叧绯 + * + * @param depts 瀛愬厓绱 + * @return 缁撴灉 + */ + public int updateDeptChildren(@Param("depts") List depts); + /** + * 鍒犻櫎閮ㄩ棬绠$悊淇℃伅 + * + * @param deptId 閮ㄩ棬ID + * @return 缁撴灉 + */ + public int deleteDeptById(Long deptId); + /** + * 鏌ヨ閮ㄩ棬鏍 + * @return + */ + public List queryDeptTreeList(); + + /** + * 鏌ヨ鎵鏈夌殑鍏徃 + * @return + */ + public List queryAllDeptForMin(); + /** + * 閫掑綊鏌ヨ鎵鏈夊瓙闆 + * @param deptId + * @return + */ + public List queryDeptsByDeptId(Long deptId); + /** + * 淇敼閮ㄩ棬棰嗗淇℃伅 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 缁撴灉 + */ + public int updateDeptForLeader(SysDept dept); +} diff --git a/evo-admin/src/main/java/com/evo/system/mapper/SysDictDataMapper.java b/evo-admin/src/main/java/com/evo/system/mapper/SysDictDataMapper.java new file mode 100644 index 0000000..23023ee --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/mapper/SysDictDataMapper.java @@ -0,0 +1,95 @@ +package com.evo.system.mapper; + +import java.util.List; +import org.apache.ibatis.annotations.Param; +import com.evo.common.core.domain.entity.SysDictData; + +/** + * 瀛楀吀琛 鏁版嵁灞 + * + * @author evo + */ +public interface SysDictDataMapper +{ + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀鏁版嵁 + * + * @param dictData 瀛楀吀鏁版嵁淇℃伅 + * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅 + */ + public List selectDictDataList(SysDictData dictData); + + /** + * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁 + * + * @param dictType 瀛楀吀绫诲瀷 + * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅 + */ + public List selectDictDataByType(String dictType); + + /** + * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏搁敭鍊兼煡璇㈠瓧鍏告暟鎹俊鎭 + * + * @param dictType 瀛楀吀绫诲瀷 + * @param dictValue 瀛楀吀閿 + * @return 瀛楀吀鏍囩 + */ + public String selectDictLabel(@Param("dictType") String dictType, @Param("dictValue") String dictValue); + + /** + * 鏍规嵁瀛楀吀鏁版嵁ID鏌ヨ淇℃伅 + * + * @param dictCode 瀛楀吀鏁版嵁ID + * @return 瀛楀吀鏁版嵁 + */ + public SysDictData selectDictDataById(Long dictCode); + + /** + * 鏌ヨ瀛楀吀鏁版嵁 + * + * @param dictType 瀛楀吀绫诲瀷 + * @return 瀛楀吀鏁版嵁 + */ + public int countDictDataByType(String dictType); + + /** + * 閫氳繃瀛楀吀ID鍒犻櫎瀛楀吀鏁版嵁淇℃伅 + * + * @param dictCode 瀛楀吀鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteDictDataById(Long dictCode); + + /** + * 鎵归噺鍒犻櫎瀛楀吀鏁版嵁淇℃伅 + * + * @param dictCodes 闇瑕佸垹闄ょ殑瀛楀吀鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteDictDataByIds(Long[] dictCodes); + + /** + * 鏂板瀛楀吀鏁版嵁淇℃伅 + * + * @param dictData 瀛楀吀鏁版嵁淇℃伅 + * @return 缁撴灉 + */ + public int insertDictData(SysDictData dictData); + + /** + * 淇敼瀛楀吀鏁版嵁淇℃伅 + * + * @param dictData 瀛楀吀鏁版嵁淇℃伅 + * @return 缁撴灉 + */ + public int updateDictData(SysDictData dictData); + + /** + * 鍚屾淇敼瀛楀吀绫诲瀷 + * + * @param oldDictType 鏃у瓧鍏哥被鍨 + * @param newDictType 鏂版棫瀛楀吀绫诲瀷 + * @return 缁撴灉 + */ + public int updateDictDataType(@Param("oldDictType") String oldDictType, @Param("newDictType") String newDictType); +} diff --git a/evo-admin/src/main/java/com/evo/system/mapper/SysDictTypeMapper.java b/evo-admin/src/main/java/com/evo/system/mapper/SysDictTypeMapper.java new file mode 100644 index 0000000..ecf6601 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/mapper/SysDictTypeMapper.java @@ -0,0 +1,83 @@ +package com.evo.system.mapper; + +import java.util.List; +import com.evo.common.core.domain.entity.SysDictType; + +/** + * 瀛楀吀琛 鏁版嵁灞 + * + * @author evo + */ +public interface SysDictTypeMapper +{ + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀绫诲瀷 + * + * @param dictType 瀛楀吀绫诲瀷淇℃伅 + * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅 + */ + public List selectDictTypeList(SysDictType dictType); + + /** + * 鏍规嵁鎵鏈夊瓧鍏哥被鍨 + * + * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅 + */ + public List selectDictTypeAll(); + + /** + * 鏍规嵁瀛楀吀绫诲瀷ID鏌ヨ淇℃伅 + * + * @param dictId 瀛楀吀绫诲瀷ID + * @return 瀛楀吀绫诲瀷 + */ + public SysDictType selectDictTypeById(Long dictId); + + /** + * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ淇℃伅 + * + * @param dictType 瀛楀吀绫诲瀷 + * @return 瀛楀吀绫诲瀷 + */ + public SysDictType selectDictTypeByType(String dictType); + + /** + * 閫氳繃瀛楀吀ID鍒犻櫎瀛楀吀淇℃伅 + * + * @param dictId 瀛楀吀ID + * @return 缁撴灉 + */ + public int deleteDictTypeById(Long dictId); + + /** + * 鎵归噺鍒犻櫎瀛楀吀绫诲瀷淇℃伅 + * + * @param dictIds 闇瑕佸垹闄ょ殑瀛楀吀ID + * @return 缁撴灉 + */ + public int deleteDictTypeByIds(Long[] dictIds); + + /** + * 鏂板瀛楀吀绫诲瀷淇℃伅 + * + * @param dictType 瀛楀吀绫诲瀷淇℃伅 + * @return 缁撴灉 + */ + public int insertDictType(SysDictType dictType); + + /** + * 淇敼瀛楀吀绫诲瀷淇℃伅 + * + * @param dictType 瀛楀吀绫诲瀷淇℃伅 + * @return 缁撴灉 + */ + public int updateDictType(SysDictType dictType); + + /** + * 鏍¢獙瀛楀吀绫诲瀷绉版槸鍚﹀敮涓 + * + * @param dictType 瀛楀吀绫诲瀷 + * @return 缁撴灉 + */ + public SysDictType checkDictTypeUnique(String dictType); +} diff --git a/evo-admin/src/main/java/com/evo/system/mapper/SysLogininforMapper.java b/evo-admin/src/main/java/com/evo/system/mapper/SysLogininforMapper.java new file mode 100644 index 0000000..9b23326 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/mapper/SysLogininforMapper.java @@ -0,0 +1,42 @@ +package com.evo.system.mapper; + +import java.util.List; +import com.evo.system.domain.SysLogininfor; + +/** + * 绯荤粺璁块棶鏃ュ織鎯呭喌淇℃伅 鏁版嵁灞 + * + * @author evo + */ +public interface SysLogininforMapper +{ + /** + * 鏂板绯荤粺鐧诲綍鏃ュ織 + * + * @param logininfor 璁块棶鏃ュ織瀵硅薄 + */ + public void insertLogininfor(SysLogininfor logininfor); + + /** + * 鏌ヨ绯荤粺鐧诲綍鏃ュ織闆嗗悎 + * + * @param logininfor 璁块棶鏃ュ織瀵硅薄 + * @return 鐧诲綍璁板綍闆嗗悎 + */ + public List selectLogininforList(SysLogininfor logininfor); + + /** + * 鎵归噺鍒犻櫎绯荤粺鐧诲綍鏃ュ織 + * + * @param infoIds 闇瑕佸垹闄ょ殑鐧诲綍鏃ュ織ID + * @return 缁撴灉 + */ + public int deleteLogininforByIds(Long[] infoIds); + + /** + * 娓呯┖绯荤粺鐧诲綍鏃ュ織 + * + * @return 缁撴灉 + */ + public int cleanLogininfor(); +} diff --git a/evo-admin/src/main/java/com/evo/system/mapper/SysMenuMapper.java b/evo-admin/src/main/java/com/evo/system/mapper/SysMenuMapper.java new file mode 100644 index 0000000..7bf6381 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/mapper/SysMenuMapper.java @@ -0,0 +1,125 @@ +package com.evo.system.mapper; + +import java.util.List; +import org.apache.ibatis.annotations.Param; +import com.evo.common.core.domain.entity.SysMenu; + +/** + * 鑿滃崟琛 鏁版嵁灞 + * + * @author evo + */ +public interface SysMenuMapper +{ + /** + * 鏌ヨ绯荤粺鑿滃崟鍒楄〃 + * + * @param menu 鑿滃崟淇℃伅 + * @return 鑿滃崟鍒楄〃 + */ + public List selectMenuList(SysMenu menu); + + /** + * 鏍规嵁鐢ㄦ埛鎵鏈夋潈闄 + * + * @return 鏉冮檺鍒楄〃 + */ + public List selectMenuPerms(); + + /** + * 鏍规嵁鐢ㄦ埛鏌ヨ绯荤粺鑿滃崟鍒楄〃 + * + * @param menu 鑿滃崟淇℃伅 + * @return 鑿滃崟鍒楄〃 + */ + public List selectMenuListByUserId(SysMenu menu); + + /** + * 鏍规嵁瑙掕壊ID鏌ヨ鏉冮檺 + * + * @param roleId 瑙掕壊ID + * @return 鏉冮檺鍒楄〃 + */ + public List selectMenuPermsByRoleId(Long roleId); + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ鏉冮檺 + * + * @param userId 鐢ㄦ埛ID + * @return 鏉冮檺鍒楄〃 + */ + public List selectMenuPermsByUserId(Long userId); + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ鑿滃崟 + * + * @return 鑿滃崟鍒楄〃 + */ + public List selectMenuTreeAll(); + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ鑿滃崟 + * + * @param userId 鐢ㄦ埛ID + * @return 鑿滃崟鍒楄〃 + */ + public List selectMenuTreeByUserId(Long userId); + + /** + * 鏍规嵁瑙掕壊ID鏌ヨ鑿滃崟鏍戜俊鎭 + * + * @param roleId 瑙掕壊ID + * @param menuCheckStrictly 鑿滃崟鏍戦夋嫨椤规槸鍚﹀叧鑱旀樉绀 + * @return 閫変腑鑿滃崟鍒楄〃 + */ + public List selectMenuListByRoleId(@Param("roleId") Long roleId, @Param("menuCheckStrictly") boolean menuCheckStrictly); + + /** + * 鏍规嵁鑿滃崟ID鏌ヨ淇℃伅 + * + * @param menuId 鑿滃崟ID + * @return 鑿滃崟淇℃伅 + */ + public SysMenu selectMenuById(Long menuId); + + /** + * 鏄惁瀛樺湪鑿滃崟瀛愯妭鐐 + * + * @param menuId 鑿滃崟ID + * @return 缁撴灉 + */ + public int hasChildByMenuId(Long menuId); + + /** + * 鏂板鑿滃崟淇℃伅 + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁撴灉 + */ + public int insertMenu(SysMenu menu); + + /** + * 淇敼鑿滃崟淇℃伅 + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁撴灉 + */ + public int updateMenu(SysMenu menu); + + /** + * 鍒犻櫎鑿滃崟绠$悊淇℃伅 + * + * @param menuId 鑿滃崟ID + * @return 缁撴灉 + */ + public int deleteMenuById(Long menuId); + + /** + * 鏍¢獙鑿滃崟鍚嶇О鏄惁鍞竴 + * + * @param menuName 鑿滃崟鍚嶇О + * @param parentId 鐖惰彍鍗旾D + * @return 缁撴灉 + */ + public SysMenu checkMenuNameUnique(@Param("menuName") String menuName, @Param("parentId") Long parentId); +} diff --git a/evo-admin/src/main/java/com/evo/system/mapper/SysOperLogMapper.java b/evo-admin/src/main/java/com/evo/system/mapper/SysOperLogMapper.java new file mode 100644 index 0000000..61a333f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/mapper/SysOperLogMapper.java @@ -0,0 +1,48 @@ +package com.evo.system.mapper; + +import java.util.List; +import com.evo.system.domain.SysOperLog; + +/** + * 鎿嶄綔鏃ュ織 鏁版嵁灞 + * + * @author evo + */ +public interface SysOperLogMapper +{ + /** + * 鏂板鎿嶄綔鏃ュ織 + * + * @param operLog 鎿嶄綔鏃ュ織瀵硅薄 + */ + public void insertOperlog(SysOperLog operLog); + + /** + * 鏌ヨ绯荤粺鎿嶄綔鏃ュ織闆嗗悎 + * + * @param operLog 鎿嶄綔鏃ュ織瀵硅薄 + * @return 鎿嶄綔鏃ュ織闆嗗悎 + */ + public List selectOperLogList(SysOperLog operLog); + + /** + * 鎵归噺鍒犻櫎绯荤粺鎿嶄綔鏃ュ織 + * + * @param operIds 闇瑕佸垹闄ょ殑鎿嶄綔鏃ュ織ID + * @return 缁撴灉 + */ + public int deleteOperLogByIds(Long[] operIds); + + /** + * 鏌ヨ鎿嶄綔鏃ュ織璇︾粏 + * + * @param operId 鎿嶄綔ID + * @return 鎿嶄綔鏃ュ織瀵硅薄 + */ + public SysOperLog selectOperLogById(Long operId); + + /** + * 娓呯┖鎿嶄綔鏃ュ織 + */ + public void cleanOperLog(); +} diff --git a/evo-admin/src/main/java/com/evo/system/mapper/SysRoleDeptMapper.java b/evo-admin/src/main/java/com/evo/system/mapper/SysRoleDeptMapper.java new file mode 100644 index 0000000..6bf52cb --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/mapper/SysRoleDeptMapper.java @@ -0,0 +1,44 @@ +package com.evo.system.mapper; + +import java.util.List; +import com.evo.system.domain.SysRoleDept; + +/** + * 瑙掕壊涓庨儴闂ㄥ叧鑱旇〃 鏁版嵁灞 + * + * @author evo + */ +public interface SysRoleDeptMapper +{ + /** + * 閫氳繃瑙掕壊ID鍒犻櫎瑙掕壊鍜岄儴闂ㄥ叧鑱 + * + * @param roleId 瑙掕壊ID + * @return 缁撴灉 + */ + public int deleteRoleDeptByRoleId(Long roleId); + + /** + * 鎵归噺鍒犻櫎瑙掕壊閮ㄩ棬鍏宠仈淇℃伅 + * + * @param ids 闇瑕佸垹闄ょ殑鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteRoleDept(Long[] ids); + + /** + * 鏌ヨ閮ㄩ棬浣跨敤鏁伴噺 + * + * @param deptId 閮ㄩ棬ID + * @return 缁撴灉 + */ + public int selectCountRoleDeptByDeptId(Long deptId); + + /** + * 鎵归噺鏂板瑙掕壊閮ㄩ棬淇℃伅 + * + * @param roleDeptList 瑙掕壊閮ㄩ棬鍒楄〃 + * @return 缁撴灉 + */ + public int batchRoleDept(List roleDeptList); +} diff --git a/evo-admin/src/main/java/com/evo/system/mapper/SysRoleMapper.java b/evo-admin/src/main/java/com/evo/system/mapper/SysRoleMapper.java new file mode 100644 index 0000000..fe4e17b --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/mapper/SysRoleMapper.java @@ -0,0 +1,107 @@ +package com.evo.system.mapper; + +import java.util.List; +import com.evo.common.core.domain.entity.SysRole; + +/** + * 瑙掕壊琛 鏁版嵁灞 + * + * @author evo + */ +public interface SysRoleMapper +{ + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瑙掕壊鏁版嵁 + * + * @param role 瑙掕壊淇℃伅 + * @return 瑙掕壊鏁版嵁闆嗗悎淇℃伅 + */ + public List selectRoleList(SysRole role); + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ瑙掕壊 + * + * @param userId 鐢ㄦ埛ID + * @return 瑙掕壊鍒楄〃 + */ + public List selectRolePermissionByUserId(Long userId); + + /** + * 鏌ヨ鎵鏈夎鑹 + * + * @return 瑙掕壊鍒楄〃 + */ + public List selectRoleAll(); + + /** + * 鏍规嵁鐢ㄦ埛ID鑾峰彇瑙掕壊閫夋嫨妗嗗垪琛 + * + * @param userId 鐢ㄦ埛ID + * @return 閫変腑瑙掕壊ID鍒楄〃 + */ + public List selectRoleListByUserId(Long userId); + + /** + * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊 + * + * @param roleId 瑙掕壊ID + * @return 瑙掕壊瀵硅薄淇℃伅 + */ + public SysRole selectRoleById(Long roleId); + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ瑙掕壊 + * + * @param userName 鐢ㄦ埛鍚 + * @return 瑙掕壊鍒楄〃 + */ + public List selectRolesByUserName(String userName); + + /** + * 鏍¢獙瑙掕壊鍚嶇О鏄惁鍞竴 + * + * @param roleName 瑙掕壊鍚嶇О + * @return 瑙掕壊淇℃伅 + */ + public SysRole checkRoleNameUnique(String roleName); + + /** + * 鏍¢獙瑙掕壊鏉冮檺鏄惁鍞竴 + * + * @param roleKey 瑙掕壊鏉冮檺 + * @return 瑙掕壊淇℃伅 + */ + public SysRole checkRoleKeyUnique(String roleKey); + + /** + * 淇敼瑙掕壊淇℃伅 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + public int updateRole(SysRole role); + + /** + * 鏂板瑙掕壊淇℃伅 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + public int insertRole(SysRole role); + + /** + * 閫氳繃瑙掕壊ID鍒犻櫎瑙掕壊 + * + * @param roleId 瑙掕壊ID + * @return 缁撴灉 + */ + public int deleteRoleById(Long roleId); + + /** + * 鎵归噺鍒犻櫎瑙掕壊淇℃伅 + * + * @param roleIds 闇瑕佸垹闄ょ殑瑙掕壊ID + * @return 缁撴灉 + */ + public int deleteRoleByIds(Long[] roleIds); +} diff --git a/evo-admin/src/main/java/com/evo/system/mapper/SysRoleMenuMapper.java b/evo-admin/src/main/java/com/evo/system/mapper/SysRoleMenuMapper.java new file mode 100644 index 0000000..8fe202d --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/mapper/SysRoleMenuMapper.java @@ -0,0 +1,44 @@ +package com.evo.system.mapper; + +import java.util.List; +import com.evo.system.domain.SysRoleMenu; + +/** + * 瑙掕壊涓庤彍鍗曞叧鑱旇〃 鏁版嵁灞 + * + * @author evo + */ +public interface SysRoleMenuMapper +{ + /** + * 鏌ヨ鑿滃崟浣跨敤鏁伴噺 + * + * @param menuId 鑿滃崟ID + * @return 缁撴灉 + */ + public int checkMenuExistRole(Long menuId); + + /** + * 閫氳繃瑙掕壊ID鍒犻櫎瑙掕壊鍜岃彍鍗曞叧鑱 + * + * @param roleId 瑙掕壊ID + * @return 缁撴灉 + */ + public int deleteRoleMenuByRoleId(Long roleId); + + /** + * 鎵归噺鍒犻櫎瑙掕壊鑿滃崟鍏宠仈淇℃伅 + * + * @param ids 闇瑕佸垹闄ょ殑鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteRoleMenu(Long[] ids); + + /** + * 鎵归噺鏂板瑙掕壊鑿滃崟淇℃伅 + * + * @param roleMenuList 瑙掕壊鑿滃崟鍒楄〃 + * @return 缁撴灉 + */ + public int batchRoleMenu(List roleMenuList); +} diff --git a/evo-admin/src/main/java/com/evo/system/mapper/SysStaffDetailMapper.java b/evo-admin/src/main/java/com/evo/system/mapper/SysStaffDetailMapper.java new file mode 100644 index 0000000..8e2e3ef --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/mapper/SysStaffDetailMapper.java @@ -0,0 +1,56 @@ +package com.evo.system.mapper; + +import com.evo.system.domain.SysStaffDetail; + +import java.util.List; + +/** + * 鍛樺伐璇︽儏Mapper鎺ュ彛 + * + * @author evo + * @date 2024-11-22 + */ +public interface SysStaffDetailMapper +{ + /** + * 鏌ヨ鍛樺伐璇︽儏 + * + * @param id 鍛樺伐璇︽儏涓婚敭 + * @return 鍛樺伐璇︽儏 + */ + public SysStaffDetail selectSysStaffDetailById(Long id); + + /** + * 鏌ヨ鍛樺伐璇︽儏鍒楄〃 + * + * @param sysStaffDetail 鍛樺伐璇︽儏 + * @return 鍛樺伐璇︽儏闆嗗悎 + */ + public List selectSysStaffDetailList(SysStaffDetail sysStaffDetail); + + /** + * 鏂板鍛樺伐璇︽儏 + * + * @param sysStaffDetail 鍛樺伐璇︽儏 + * @return 缁撴灉 + */ + public int insertSysStaffDetail(SysStaffDetail sysStaffDetail); + + /** + * 淇敼鍛樺伐璇︽儏 + * + * @param sysStaffDetail 鍛樺伐璇︽儏 + * @return 缁撴灉 + */ + public int updateSysStaffDetail(SysStaffDetail sysStaffDetail); + /** + * 鏍规嵁鍛樺伐ID鏌ヨ鍛樺伐璇︽儏 + * + * @param staffId 鍛樺伐ID + * @return 鍛樺伐璇︽儏 + */ + public SysStaffDetail selectSysStaffDetailByStaffId(Long staffId); + + public int clearAllSubsidy(); + +} diff --git a/evo-admin/src/main/java/com/evo/system/mapper/SysStaffMapper.java b/evo-admin/src/main/java/com/evo/system/mapper/SysStaffMapper.java new file mode 100644 index 0000000..96b0af1 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/mapper/SysStaffMapper.java @@ -0,0 +1,84 @@ +package com.evo.system.mapper; + +import com.evo.system.domain.SysStaff; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +/** + * 鍛樺伐绠$悊Mapper鎺ュ彛 + * + * @author evo + * @date 2024-11-21 + */ +public interface SysStaffMapper +{ + /** + * 鏌ヨ鍛樺伐绠$悊 + * + * @param userId 鍛樺伐绠$悊涓婚敭 + * @return 鍛樺伐绠$悊 + */ + public SysStaff selectSysStaffByUserId(Long userId); + + /** + * 鏌ヨ鍛樺伐绠$悊鍒楄〃 + * + * @param sysStaff 鍛樺伐绠$悊 + * @return 鍛樺伐绠$悊闆嗗悎 + */ + public List selectSysStaffList(SysStaff sysStaff); + + /** + * 鏂板鍛樺伐绠$悊 + * + * @param sysStaff 鍛樺伐绠$悊 + * @return 缁撴灉 + */ + public int insertSysStaff(SysStaff sysStaff); + /** + * 淇敼鍛樺伐绠$悊 + * + * @param sysStaff 鍛樺伐绠$悊 + * @return 缁撴灉 + */ + public int updateSysStaff(SysStaff sysStaff); + /** + * 鏌ヨ鎵鏈夌殑鍦ㄨ亴鍛樺伐淇℃伅 + * @return + */ + public List selectSysStaffListAll(); + /** + * 鏍规嵁韬唤璇佸彿鏌ヨ鍛樺伐淇℃伅 + * @param idCard + * @return + */ + public SysStaff queryysStaffByIdCard(String idCard); + /** + * 鏍规嵁韬唤璇佸彿鍜岄儴闂ㄦ煡璇㈠憳宸ヤ俊鎭 + * @param idCard + * @return + */ + public SysStaff queryysStaffByIdCardAndDeptId(@Param("idCard") String idCard,@Param("deptId") Long deptId); + /** + * 鏍规嵁鍏徃鏌ヨ缂栧彿 + * @param compayName + * @return + */ + public SysStaff querySysStaffOfMaxByCompany(String compayName); + /** + * 鏍规嵁鏈堜唤鏌ヨ闇瑕佺粺璁″伐璧勭殑浜哄憳淇℃伅 + * @param emplDate 鍏ヨ亴鏃堕棿 + * @param quitDate 绂昏亴鏃堕棿 + * @return + */ + public List querySysStaffListOfMonth(@Param("emplDate") Date emplDate, @Param("quitDate")Date quitDate); + /** + * 鏍规嵁閮ㄩ棬鏌ヨ鍛樺伐淇℃伅 + * @param list + * @return + */ + public List queryysStaffByDeptId(List list); + +} diff --git a/evo-admin/src/main/java/com/evo/system/mapper/SysUserMapper.java b/evo-admin/src/main/java/com/evo/system/mapper/SysUserMapper.java new file mode 100644 index 0000000..1fd0195 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/mapper/SysUserMapper.java @@ -0,0 +1,127 @@ +package com.evo.system.mapper; + +import java.util.List; +import org.apache.ibatis.annotations.Param; +import com.evo.common.core.domain.entity.SysUser; + +/** + * 鐢ㄦ埛琛 鏁版嵁灞 + * + * @author evo + */ +public interface SysUserMapper +{ + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鐢ㄦ埛鍒楄〃 + * + * @param sysUser 鐢ㄦ埛淇℃伅 + * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅 + */ + public List selectUserList(SysUser sysUser); + + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ宸查厤鐢ㄦ埛瑙掕壊鍒楄〃 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅 + */ + public List selectAllocatedList(SysUser user); + + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鏈垎閰嶇敤鎴疯鑹插垪琛 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅 + */ + public List selectUnallocatedList(SysUser user); + + /** + * 閫氳繃鐢ㄦ埛鍚嶆煡璇㈢敤鎴 + * + * @param userName 鐢ㄦ埛鍚 + * @return 鐢ㄦ埛瀵硅薄淇℃伅 + */ + public SysUser selectUserByUserName(String userName); + + /** + * 閫氳繃鐢ㄦ埛ID鏌ヨ鐢ㄦ埛 + * + * @param userId 鐢ㄦ埛ID + * @return 鐢ㄦ埛瀵硅薄淇℃伅 + */ + public SysUser selectUserById(Long userId); + + /** + * 鏂板鐢ㄦ埛淇℃伅 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + public int insertUser(SysUser user); + + /** + * 淇敼鐢ㄦ埛淇℃伅 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + public int updateUser(SysUser user); + + /** + * 淇敼鐢ㄦ埛澶村儚 + * + * @param userName 鐢ㄦ埛鍚 + * @param avatar 澶村儚鍦板潃 + * @return 缁撴灉 + */ + public int updateUserAvatar(@Param("userName") String userName, @Param("avatar") String avatar); + + /** + * 閲嶇疆鐢ㄦ埛瀵嗙爜 + * + * @param userName 鐢ㄦ埛鍚 + * @param password 瀵嗙爜 + * @return 缁撴灉 + */ + public int resetUserPwd(@Param("userName") String userName, @Param("password") String password); + + /** + * 閫氳繃鐢ㄦ埛ID鍒犻櫎鐢ㄦ埛 + * + * @param userId 鐢ㄦ埛ID + * @return 缁撴灉 + */ + public int deleteUserById(Long userId); + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛淇℃伅 + * + * @param userIds 闇瑕佸垹闄ょ殑鐢ㄦ埛ID + * @return 缁撴灉 + */ + public int deleteUserByIds(Long[] userIds); + + /** + * 鏍¢獙鐢ㄦ埛鍚嶇О鏄惁鍞竴 + * + * @param userName 鐢ㄦ埛鍚嶇О + * @return 缁撴灉 + */ + public SysUser checkUserNameUnique(String userName); + + /** + * 鏍¢獙鎵嬫満鍙风爜鏄惁鍞竴 + * + * @param phonenumber 鎵嬫満鍙风爜 + * @return 缁撴灉 + */ + public SysUser checkPhoneUnique(String phonenumber); + + /** + * 鏍¢獙email鏄惁鍞竴 + * + * @param email 鐢ㄦ埛閭 + * @return 缁撴灉 + */ + public SysUser checkEmailUnique(String email); +} diff --git a/evo-admin/src/main/java/com/evo/system/mapper/SysUserRoleMapper.java b/evo-admin/src/main/java/com/evo/system/mapper/SysUserRoleMapper.java new file mode 100644 index 0000000..95bf561 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/mapper/SysUserRoleMapper.java @@ -0,0 +1,62 @@ +package com.evo.system.mapper; + +import java.util.List; +import org.apache.ibatis.annotations.Param; +import com.evo.system.domain.SysUserRole; + +/** + * 鐢ㄦ埛涓庤鑹插叧鑱旇〃 鏁版嵁灞 + * + * @author evo + */ +public interface SysUserRoleMapper +{ + /** + * 閫氳繃鐢ㄦ埛ID鍒犻櫎鐢ㄦ埛鍜岃鑹插叧鑱 + * + * @param userId 鐢ㄦ埛ID + * @return 缁撴灉 + */ + public int deleteUserRoleByUserId(Long userId); + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛鍜岃鑹插叧鑱 + * + * @param ids 闇瑕佸垹闄ょ殑鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteUserRole(Long[] ids); + + /** + * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊浣跨敤鏁伴噺 + * + * @param roleId 瑙掕壊ID + * @return 缁撴灉 + */ + public int countUserRoleByRoleId(Long roleId); + + /** + * 鎵归噺鏂板鐢ㄦ埛瑙掕壊淇℃伅 + * + * @param userRoleList 鐢ㄦ埛瑙掕壊鍒楄〃 + * @return 缁撴灉 + */ + public int batchUserRole(List userRoleList); + + /** + * 鍒犻櫎鐢ㄦ埛鍜岃鑹插叧鑱斾俊鎭 + * + * @param userRole 鐢ㄦ埛鍜岃鑹插叧鑱斾俊鎭 + * @return 缁撴灉 + */ + public int deleteUserRoleInfo(SysUserRole userRole); + + /** + * 鎵归噺鍙栨秷鎺堟潈鐢ㄦ埛瑙掕壊 + * + * @param roleId 瑙掕壊ID + * @param userIds 闇瑕佸垹闄ょ殑鐢ㄦ埛鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteUserRoleInfos(@Param("roleId") Long roleId, @Param("userIds") Long[] userIds); +} diff --git a/evo-admin/src/main/java/com/evo/system/service/ISysDeptService.java b/evo-admin/src/main/java/com/evo/system/service/ISysDeptService.java new file mode 100644 index 0000000..d35cb84 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/service/ISysDeptService.java @@ -0,0 +1,135 @@ +package com.evo.system.service; + +import java.util.List; +import com.evo.common.core.domain.TreeSelect; +import com.evo.common.core.domain.entity.SysDept; + +/** + * 閮ㄩ棬绠$悊 鏈嶅姟灞 + * + * @author evo + */ +public interface ISysDeptService +{ + /** + * 鏌ヨ閮ㄩ棬绠$悊鏁版嵁 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 閮ㄩ棬淇℃伅闆嗗悎 + */ + public List selectDeptList(SysDept dept); + + /** + * 鏌ヨ閮ㄩ棬鏍戠粨鏋勪俊鎭 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 閮ㄩ棬鏍戜俊鎭泦鍚 + */ + public List selectDeptTreeList(SysDept dept); + + /** + * 鏋勫缓鍓嶇鎵闇瑕佹爲缁撴瀯 + * + * @param depts 閮ㄩ棬鍒楄〃 + * @return 鏍戠粨鏋勫垪琛 + */ + public List buildDeptTree(List depts); + + /** + * 鏋勫缓鍓嶇鎵闇瑕佷笅鎷夋爲缁撴瀯 + * + * @param depts 閮ㄩ棬鍒楄〃 + * @return 涓嬫媺鏍戠粨鏋勫垪琛 + */ + public List buildDeptTreeSelect(List depts); + + /** + * 鏍规嵁瑙掕壊ID鏌ヨ閮ㄩ棬鏍戜俊鎭 + * + * @param roleId 瑙掕壊ID + * @return 閫変腑閮ㄩ棬鍒楄〃 + */ + public List selectDeptListByRoleId(Long roleId); + + /** + * 鏍规嵁閮ㄩ棬ID鏌ヨ淇℃伅 + * + * @param deptId 閮ㄩ棬ID + * @return 閮ㄩ棬淇℃伅 + */ + public SysDept selectDeptById(Long deptId); + + /** + * 鏍规嵁ID鏌ヨ鎵鏈夊瓙閮ㄩ棬锛堟甯哥姸鎬侊級 + * + * @param deptId 閮ㄩ棬ID + * @return 瀛愰儴闂ㄦ暟 + */ + public int selectNormalChildrenDeptById(Long deptId); + + /** + * 鏄惁瀛樺湪閮ㄩ棬瀛愯妭鐐 + * + * @param deptId 閮ㄩ棬ID + * @return 缁撴灉 + */ + public boolean hasChildByDeptId(Long deptId); + + /** + * 鏌ヨ閮ㄩ棬鏄惁瀛樺湪鐢ㄦ埛 + * + * @param deptId 閮ㄩ棬ID + * @return 缁撴灉 true 瀛樺湪 false 涓嶅瓨鍦 + */ + public boolean checkDeptExistUser(Long deptId); + + /** + * 鏍¢獙閮ㄩ棬鍚嶇О鏄惁鍞竴 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 缁撴灉 + */ + public boolean checkDeptNameUnique(SysDept dept); + + /** + * 鏍¢獙閮ㄩ棬鏄惁鏈夋暟鎹潈闄 + * + * @param deptId 閮ㄩ棬id + */ + public void checkDeptDataScope(Long deptId); + + /** + * 鏂板淇濆瓨閮ㄩ棬淇℃伅 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 缁撴灉 + */ + public int insertDept(SysDept dept); + + /** + * 淇敼淇濆瓨閮ㄩ棬淇℃伅 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 缁撴灉 + */ + public int updateDept(SysDept dept); + + /** + * 鍒犻櫎閮ㄩ棬绠$悊淇℃伅 + * + * @param deptId 閮ㄩ棬ID + * @return 缁撴灉 + */ + public int deleteDeptById(Long deptId); + + /** + * 鏌ヨ鎵鏈夌殑鏈夋晥閮ㄩ棬 + * @return + */ + public List selectAllDeptList(); + /** + * 鏌ヨ鎵鏈夌殑鍏徃 + * @return + */ + public List queryAllDeptForMin(); +} diff --git a/evo-admin/src/main/java/com/evo/system/service/ISysDictDataService.java b/evo-admin/src/main/java/com/evo/system/service/ISysDictDataService.java new file mode 100644 index 0000000..ec15b10 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/service/ISysDictDataService.java @@ -0,0 +1,60 @@ +package com.evo.system.service; + +import java.util.List; +import com.evo.common.core.domain.entity.SysDictData; + +/** + * 瀛楀吀 涓氬姟灞 + * + * @author evo + */ +public interface ISysDictDataService +{ + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀鏁版嵁 + * + * @param dictData 瀛楀吀鏁版嵁淇℃伅 + * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅 + */ + public List selectDictDataList(SysDictData dictData); + + /** + * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏搁敭鍊兼煡璇㈠瓧鍏告暟鎹俊鎭 + * + * @param dictType 瀛楀吀绫诲瀷 + * @param dictValue 瀛楀吀閿 + * @return 瀛楀吀鏍囩 + */ + public String selectDictLabel(String dictType, String dictValue); + + /** + * 鏍规嵁瀛楀吀鏁版嵁ID鏌ヨ淇℃伅 + * + * @param dictCode 瀛楀吀鏁版嵁ID + * @return 瀛楀吀鏁版嵁 + */ + public SysDictData selectDictDataById(Long dictCode); + + /** + * 鎵归噺鍒犻櫎瀛楀吀鏁版嵁淇℃伅 + * + * @param dictCodes 闇瑕佸垹闄ょ殑瀛楀吀鏁版嵁ID + */ + public void deleteDictDataByIds(Long[] dictCodes); + + /** + * 鏂板淇濆瓨瀛楀吀鏁版嵁淇℃伅 + * + * @param dictData 瀛楀吀鏁版嵁淇℃伅 + * @return 缁撴灉 + */ + public int insertDictData(SysDictData dictData); + + /** + * 淇敼淇濆瓨瀛楀吀鏁版嵁淇℃伅 + * + * @param dictData 瀛楀吀鏁版嵁淇℃伅 + * @return 缁撴灉 + */ + public int updateDictData(SysDictData dictData); +} diff --git a/evo-admin/src/main/java/com/evo/system/service/ISysDictTypeService.java b/evo-admin/src/main/java/com/evo/system/service/ISysDictTypeService.java new file mode 100644 index 0000000..2a3a90e --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/service/ISysDictTypeService.java @@ -0,0 +1,98 @@ +package com.evo.system.service; + +import java.util.List; +import com.evo.common.core.domain.entity.SysDictData; +import com.evo.common.core.domain.entity.SysDictType; + +/** + * 瀛楀吀 涓氬姟灞 + * + * @author evo + */ +public interface ISysDictTypeService +{ + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀绫诲瀷 + * + * @param dictType 瀛楀吀绫诲瀷淇℃伅 + * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅 + */ + public List selectDictTypeList(SysDictType dictType); + + /** + * 鏍规嵁鎵鏈夊瓧鍏哥被鍨 + * + * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅 + */ + public List selectDictTypeAll(); + + /** + * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁 + * + * @param dictType 瀛楀吀绫诲瀷 + * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅 + */ + public List selectDictDataByType(String dictType); + + /** + * 鏍规嵁瀛楀吀绫诲瀷ID鏌ヨ淇℃伅 + * + * @param dictId 瀛楀吀绫诲瀷ID + * @return 瀛楀吀绫诲瀷 + */ + public SysDictType selectDictTypeById(Long dictId); + + /** + * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ淇℃伅 + * + * @param dictType 瀛楀吀绫诲瀷 + * @return 瀛楀吀绫诲瀷 + */ + public SysDictType selectDictTypeByType(String dictType); + + /** + * 鎵归噺鍒犻櫎瀛楀吀淇℃伅 + * + * @param dictIds 闇瑕佸垹闄ょ殑瀛楀吀ID + */ + public void deleteDictTypeByIds(Long[] dictIds); + + /** + * 鍔犺浇瀛楀吀缂撳瓨鏁版嵁 + */ + public void loadingDictCache(); + + /** + * 娓呯┖瀛楀吀缂撳瓨鏁版嵁 + */ + public void clearDictCache(); + + /** + * 閲嶇疆瀛楀吀缂撳瓨鏁版嵁 + */ + public void resetDictCache(); + + /** + * 鏂板淇濆瓨瀛楀吀绫诲瀷淇℃伅 + * + * @param dictType 瀛楀吀绫诲瀷淇℃伅 + * @return 缁撴灉 + */ + public int insertDictType(SysDictType dictType); + + /** + * 淇敼淇濆瓨瀛楀吀绫诲瀷淇℃伅 + * + * @param dictType 瀛楀吀绫诲瀷淇℃伅 + * @return 缁撴灉 + */ + public int updateDictType(SysDictType dictType); + + /** + * 鏍¢獙瀛楀吀绫诲瀷绉版槸鍚﹀敮涓 + * + * @param dictType 瀛楀吀绫诲瀷 + * @return 缁撴灉 + */ + public boolean checkDictTypeUnique(SysDictType dictType); +} diff --git a/evo-admin/src/main/java/com/evo/system/service/ISysLogininforService.java b/evo-admin/src/main/java/com/evo/system/service/ISysLogininforService.java new file mode 100644 index 0000000..1648a6f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/service/ISysLogininforService.java @@ -0,0 +1,40 @@ +package com.evo.system.service; + +import java.util.List; +import com.evo.system.domain.SysLogininfor; + +/** + * 绯荤粺璁块棶鏃ュ織鎯呭喌淇℃伅 鏈嶅姟灞 + * + * @author evo + */ +public interface ISysLogininforService +{ + /** + * 鏂板绯荤粺鐧诲綍鏃ュ織 + * + * @param logininfor 璁块棶鏃ュ織瀵硅薄 + */ + public void insertLogininfor(SysLogininfor logininfor); + + /** + * 鏌ヨ绯荤粺鐧诲綍鏃ュ織闆嗗悎 + * + * @param logininfor 璁块棶鏃ュ織瀵硅薄 + * @return 鐧诲綍璁板綍闆嗗悎 + */ + public List selectLogininforList(SysLogininfor logininfor); + + /** + * 鎵归噺鍒犻櫎绯荤粺鐧诲綍鏃ュ織 + * + * @param infoIds 闇瑕佸垹闄ょ殑鐧诲綍鏃ュ織ID + * @return 缁撴灉 + */ + public int deleteLogininforByIds(Long[] infoIds); + + /** + * 娓呯┖绯荤粺鐧诲綍鏃ュ織 + */ + public void cleanLogininfor(); +} diff --git a/evo-admin/src/main/java/com/evo/system/service/ISysMenuService.java b/evo-admin/src/main/java/com/evo/system/service/ISysMenuService.java new file mode 100644 index 0000000..73f9118 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/service/ISysMenuService.java @@ -0,0 +1,144 @@ +package com.evo.system.service; + +import java.util.List; +import java.util.Set; +import com.evo.common.core.domain.TreeSelect; +import com.evo.common.core.domain.entity.SysMenu; +import com.evo.system.domain.vo.RouterVo; + +/** + * 鑿滃崟 涓氬姟灞 + * + * @author evo + */ +public interface ISysMenuService +{ + /** + * 鏍规嵁鐢ㄦ埛鏌ヨ绯荤粺鑿滃崟鍒楄〃 + * + * @param userId 鐢ㄦ埛ID + * @return 鑿滃崟鍒楄〃 + */ + public List selectMenuList(Long userId); + + /** + * 鏍规嵁鐢ㄦ埛鏌ヨ绯荤粺鑿滃崟鍒楄〃 + * + * @param menu 鑿滃崟淇℃伅 + * @param userId 鐢ㄦ埛ID + * @return 鑿滃崟鍒楄〃 + */ + public List selectMenuList(SysMenu menu, Long userId); + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ鏉冮檺 + * + * @param userId 鐢ㄦ埛ID + * @return 鏉冮檺鍒楄〃 + */ + public Set selectMenuPermsByUserId(Long userId); + + /** + * 鏍规嵁瑙掕壊ID鏌ヨ鏉冮檺 + * + * @param roleId 瑙掕壊ID + * @return 鏉冮檺鍒楄〃 + */ + public Set selectMenuPermsByRoleId(Long roleId); + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ鑿滃崟鏍戜俊鎭 + * + * @param userId 鐢ㄦ埛ID + * @return 鑿滃崟鍒楄〃 + */ + public List selectMenuTreeByUserId(Long userId); + + /** + * 鏍规嵁瑙掕壊ID鏌ヨ鑿滃崟鏍戜俊鎭 + * + * @param roleId 瑙掕壊ID + * @return 閫変腑鑿滃崟鍒楄〃 + */ + public List selectMenuListByRoleId(Long roleId); + + /** + * 鏋勫缓鍓嶇璺敱鎵闇瑕佺殑鑿滃崟 + * + * @param menus 鑿滃崟鍒楄〃 + * @return 璺敱鍒楄〃 + */ + public List buildMenus(List menus); + + /** + * 鏋勫缓鍓嶇鎵闇瑕佹爲缁撴瀯 + * + * @param menus 鑿滃崟鍒楄〃 + * @return 鏍戠粨鏋勫垪琛 + */ + public List buildMenuTree(List menus); + + /** + * 鏋勫缓鍓嶇鎵闇瑕佷笅鎷夋爲缁撴瀯 + * + * @param menus 鑿滃崟鍒楄〃 + * @return 涓嬫媺鏍戠粨鏋勫垪琛 + */ + public List buildMenuTreeSelect(List menus); + + /** + * 鏍规嵁鑿滃崟ID鏌ヨ淇℃伅 + * + * @param menuId 鑿滃崟ID + * @return 鑿滃崟淇℃伅 + */ + public SysMenu selectMenuById(Long menuId); + + /** + * 鏄惁瀛樺湪鑿滃崟瀛愯妭鐐 + * + * @param menuId 鑿滃崟ID + * @return 缁撴灉 true 瀛樺湪 false 涓嶅瓨鍦 + */ + public boolean hasChildByMenuId(Long menuId); + + /** + * 鏌ヨ鑿滃崟鏄惁瀛樺湪瑙掕壊 + * + * @param menuId 鑿滃崟ID + * @return 缁撴灉 true 瀛樺湪 false 涓嶅瓨鍦 + */ + public boolean checkMenuExistRole(Long menuId); + + /** + * 鏂板淇濆瓨鑿滃崟淇℃伅 + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁撴灉 + */ + public int insertMenu(SysMenu menu); + + /** + * 淇敼淇濆瓨鑿滃崟淇℃伅 + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁撴灉 + */ + public int updateMenu(SysMenu menu); + + /** + * 鍒犻櫎鑿滃崟绠$悊淇℃伅 + * + * @param menuId 鑿滃崟ID + * @return 缁撴灉 + */ + public int deleteMenuById(Long menuId); + + /** + * 鏍¢獙鑿滃崟鍚嶇О鏄惁鍞竴 + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁撴灉 + */ + public boolean checkMenuNameUnique(SysMenu menu); +} diff --git a/evo-admin/src/main/java/com/evo/system/service/ISysOperLogService.java b/evo-admin/src/main/java/com/evo/system/service/ISysOperLogService.java new file mode 100644 index 0000000..5632f8f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/service/ISysOperLogService.java @@ -0,0 +1,48 @@ +package com.evo.system.service; + +import java.util.List; +import com.evo.system.domain.SysOperLog; + +/** + * 鎿嶄綔鏃ュ織 鏈嶅姟灞 + * + * @author evo + */ +public interface ISysOperLogService +{ + /** + * 鏂板鎿嶄綔鏃ュ織 + * + * @param operLog 鎿嶄綔鏃ュ織瀵硅薄 + */ + public void insertOperlog(SysOperLog operLog); + + /** + * 鏌ヨ绯荤粺鎿嶄綔鏃ュ織闆嗗悎 + * + * @param operLog 鎿嶄綔鏃ュ織瀵硅薄 + * @return 鎿嶄綔鏃ュ織闆嗗悎 + */ + public List selectOperLogList(SysOperLog operLog); + + /** + * 鎵归噺鍒犻櫎绯荤粺鎿嶄綔鏃ュ織 + * + * @param operIds 闇瑕佸垹闄ょ殑鎿嶄綔鏃ュ織ID + * @return 缁撴灉 + */ + public int deleteOperLogByIds(Long[] operIds); + + /** + * 鏌ヨ鎿嶄綔鏃ュ織璇︾粏 + * + * @param operId 鎿嶄綔ID + * @return 鎿嶄綔鏃ュ織瀵硅薄 + */ + public SysOperLog selectOperLogById(Long operId); + + /** + * 娓呯┖鎿嶄綔鏃ュ織 + */ + public void cleanOperLog(); +} diff --git a/evo-admin/src/main/java/com/evo/system/service/ISysRoleService.java b/evo-admin/src/main/java/com/evo/system/service/ISysRoleService.java new file mode 100644 index 0000000..0522e26 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/service/ISysRoleService.java @@ -0,0 +1,173 @@ +package com.evo.system.service; + +import java.util.List; +import java.util.Set; +import com.evo.common.core.domain.entity.SysRole; +import com.evo.system.domain.SysUserRole; + +/** + * 瑙掕壊涓氬姟灞 + * + * @author evo + */ +public interface ISysRoleService +{ + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瑙掕壊鏁版嵁 + * + * @param role 瑙掕壊淇℃伅 + * @return 瑙掕壊鏁版嵁闆嗗悎淇℃伅 + */ + public List selectRoleList(SysRole role); + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ瑙掕壊鍒楄〃 + * + * @param userId 鐢ㄦ埛ID + * @return 瑙掕壊鍒楄〃 + */ + public List selectRolesByUserId(Long userId); + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ瑙掕壊鏉冮檺 + * + * @param userId 鐢ㄦ埛ID + * @return 鏉冮檺鍒楄〃 + */ + public Set selectRolePermissionByUserId(Long userId); + + /** + * 鏌ヨ鎵鏈夎鑹 + * + * @return 瑙掕壊鍒楄〃 + */ + public List selectRoleAll(); + + /** + * 鏍规嵁鐢ㄦ埛ID鑾峰彇瑙掕壊閫夋嫨妗嗗垪琛 + * + * @param userId 鐢ㄦ埛ID + * @return 閫変腑瑙掕壊ID鍒楄〃 + */ + public List selectRoleListByUserId(Long userId); + + /** + * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊 + * + * @param roleId 瑙掕壊ID + * @return 瑙掕壊瀵硅薄淇℃伅 + */ + public SysRole selectRoleById(Long roleId); + + /** + * 鏍¢獙瑙掕壊鍚嶇О鏄惁鍞竴 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + public boolean checkRoleNameUnique(SysRole role); + + /** + * 鏍¢獙瑙掕壊鏉冮檺鏄惁鍞竴 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + public boolean checkRoleKeyUnique(SysRole role); + + /** + * 鏍¢獙瑙掕壊鏄惁鍏佽鎿嶄綔 + * + * @param role 瑙掕壊淇℃伅 + */ + public void checkRoleAllowed(SysRole role); + + /** + * 鏍¢獙瑙掕壊鏄惁鏈夋暟鎹潈闄 + * + * @param roleIds 瑙掕壊id + */ + public void checkRoleDataScope(Long... roleIds); + + /** + * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊浣跨敤鏁伴噺 + * + * @param roleId 瑙掕壊ID + * @return 缁撴灉 + */ + public int countUserRoleByRoleId(Long roleId); + + /** + * 鏂板淇濆瓨瑙掕壊淇℃伅 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + public int insertRole(SysRole role); + + /** + * 淇敼淇濆瓨瑙掕壊淇℃伅 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + public int updateRole(SysRole role); + + /** + * 淇敼瑙掕壊鐘舵 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + public int updateRoleStatus(SysRole role); + + /** + * 淇敼鏁版嵁鏉冮檺淇℃伅 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + public int authDataScope(SysRole role); + + /** + * 閫氳繃瑙掕壊ID鍒犻櫎瑙掕壊 + * + * @param roleId 瑙掕壊ID + * @return 缁撴灉 + */ + public int deleteRoleById(Long roleId); + + /** + * 鎵归噺鍒犻櫎瑙掕壊淇℃伅 + * + * @param roleIds 闇瑕佸垹闄ょ殑瑙掕壊ID + * @return 缁撴灉 + */ + public int deleteRoleByIds(Long[] roleIds); + + /** + * 鍙栨秷鎺堟潈鐢ㄦ埛瑙掕壊 + * + * @param userRole 鐢ㄦ埛鍜岃鑹插叧鑱斾俊鎭 + * @return 缁撴灉 + */ + public int deleteAuthUser(SysUserRole userRole); + + /** + * 鎵归噺鍙栨秷鎺堟潈鐢ㄦ埛瑙掕壊 + * + * @param roleId 瑙掕壊ID + * @param userIds 闇瑕佸彇娑堟巿鏉冪殑鐢ㄦ埛鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteAuthUsers(Long roleId, Long[] userIds); + + /** + * 鎵归噺閫夋嫨鎺堟潈鐢ㄦ埛瑙掕壊 + * + * @param roleId 瑙掕壊ID + * @param userIds 闇瑕佸垹闄ょ殑鐢ㄦ埛鏁版嵁ID + * @return 缁撴灉 + */ + public int insertAuthUsers(Long roleId, Long[] userIds); +} diff --git a/evo-admin/src/main/java/com/evo/system/service/ISysStaffDetailService.java b/evo-admin/src/main/java/com/evo/system/service/ISysStaffDetailService.java new file mode 100644 index 0000000..e644749 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/service/ISysStaffDetailService.java @@ -0,0 +1,45 @@ +package com.evo.system.service; + +import com.evo.common.core.domain.AjaxResult; +import com.evo.system.domain.SysStaffDetail; +import java.util.List; + +/** + * 鍛樺伐璇︽儏Service鎺ュ彛 + * + * @author evo + * @date 2024-11-22 + */ +public interface ISysStaffDetailService +{ + /** + * 鏌ヨ鍛樺伐璇︽儏 + * + * @param id 鍛樺伐璇︽儏涓婚敭 + * @return 鍛樺伐璇︽儏 + */ + public SysStaffDetail selectSysStaffDetailById(Long id); + + /** + * 鏌ヨ鍛樺伐璇︽儏鍒楄〃 + * + * @param sysStaffDetail 鍛樺伐璇︽儏 + * @return 鍛樺伐璇︽儏闆嗗悎 + */ + public List selectSysStaffDetailList(SysStaffDetail sysStaffDetail); + + /** + * 淇敼鍛樺伐璇︽儏 + * + * @param sysStaffDetail 鍛樺伐璇︽儏 + * @return 缁撴灉 + */ + public int updateSysStaffDetail(SysStaffDetail sysStaffDetail); + + /** + * 娓呯悊琛ュ姪 + * @return + */ + public AjaxResult clearAllSubsidy(); + +} diff --git a/evo-admin/src/main/java/com/evo/system/service/ISysStaffService.java b/evo-admin/src/main/java/com/evo/system/service/ISysStaffService.java new file mode 100644 index 0000000..fa503f8 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/service/ISysStaffService.java @@ -0,0 +1,95 @@ +package com.evo.system.service; + +import com.evo.common.core.domain.AjaxResult; +import com.evo.system.domain.SysStaff; +import com.evo.system.domain.vo.SysStaffVo; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +/** + * 鍛樺伐绠$悊Service鎺ュ彛 + * + * @author evo + * @date 2024-11-21 + */ +public interface ISysStaffService +{ + /** + * 鏌ヨ鍛樺伐绠$悊 + * + * @param userId 鍛樺伐绠$悊涓婚敭 + * @return 鍛樺伐绠$悊 + */ + public SysStaff selectSysStaffByUserId(Long userId); + /** + * 鏌ヨ鍛樺伐绠$悊鍒楄〃 + * + * @param sysStaff 鍛樺伐绠$悊 + * @return 鍛樺伐绠$悊闆嗗悎 + */ + public List selectSysStaffList(SysStaff sysStaff); + /** + * 鏂板鍛樺伐绠$悊 + * + * @param sysStaff 鍛樺伐绠$悊 + * @return 缁撴灉 + */ + public AjaxResult insertSysStaff(SysStaff sysStaff); + /** + * 淇敼鍛樺伐绠$悊 + * + * @param sysStaff 鍛樺伐绠$悊 + * @return 缁撴灉 + */ + public AjaxResult updateSysStaff(SysStaff sysStaff); + /** + * 鍒犻櫎鍛樺伐绠$悊淇℃伅 + * + * @param userId 鍛樺伐绠$悊涓婚敭 + * @return 缁撴灉 + */ + public int deleteSysStaffByUserId(Long userId); + /** + * 鏌ヨ鎵鏈夌殑鍦ㄨ亴鍛樺伐淇℃伅 + * @return + */ + public List selectSysStaffListAll(); + /** + * 涓婁紶浜旈櫓涓閲 + * @param filePath + * @return + */ + public AjaxResult uploadAccumulationFund(MultipartFile filePath); + /** + * 鏌ヨ鎵鏈夌殑鍦ㄨ亴鍛樺伐淇℃伅 + * @return + */ + public List selectSysStaffDetailList(SysStaff sysStaff); + /** + * 瀵煎叆鍛樺伐鏁版嵁 + * + * @param staffList 鐢ㄦ埛鏁版嵁鍒楄〃 + * @return 缁撴灉 + */ + public AjaxResult importStaff(List staffList); + /** + * 姣忔湀1鍙疯嚜鍔ㄧ敓鎴愯冨嫟淇℃伅 + */ + public void autoCreateAttendanceData(); + /** + * 姣忓ぉ璁$畻杞锛岀鑱屾棩鏈 + */ + public void autoRegularWorking(); + /** + * 鏍规嵁閮ㄩ棬鏌ヨ鍛樺伐淇℃伅 + * @param deptId + * @return + */ + public List queryysStaffByDeptId(Long deptId); + + /** + * 鑷姩璁$畻宸ラ緞 + */ + public void calculationOfSeniority(); +} diff --git a/evo-admin/src/main/java/com/evo/system/service/ISysUserOnlineService.java b/evo-admin/src/main/java/com/evo/system/service/ISysUserOnlineService.java new file mode 100644 index 0000000..4357752 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/service/ISysUserOnlineService.java @@ -0,0 +1,48 @@ +package com.evo.system.service; + +import com.evo.common.core.domain.model.LoginUser; +import com.evo.system.domain.SysUserOnline; + +/** + * 鍦ㄧ嚎鐢ㄦ埛 鏈嶅姟灞 + * + * @author evo + */ +public interface ISysUserOnlineService +{ + /** + * 閫氳繃鐧诲綍鍦板潃鏌ヨ淇℃伅 + * + * @param ipaddr 鐧诲綍鍦板潃 + * @param user 鐢ㄦ埛淇℃伅 + * @return 鍦ㄧ嚎鐢ㄦ埛淇℃伅 + */ + public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user); + + /** + * 閫氳繃鐢ㄦ埛鍚嶇О鏌ヨ淇℃伅 + * + * @param userName 鐢ㄦ埛鍚嶇О + * @param user 鐢ㄦ埛淇℃伅 + * @return 鍦ㄧ嚎鐢ㄦ埛淇℃伅 + */ + public SysUserOnline selectOnlineByUserName(String userName, LoginUser user); + + /** + * 閫氳繃鐧诲綍鍦板潃/鐢ㄦ埛鍚嶇О鏌ヨ淇℃伅 + * + * @param ipaddr 鐧诲綍鍦板潃 + * @param userName 鐢ㄦ埛鍚嶇О + * @param user 鐢ㄦ埛淇℃伅 + * @return 鍦ㄧ嚎鐢ㄦ埛淇℃伅 + */ + public SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user); + + /** + * 璁剧疆鍦ㄧ嚎鐢ㄦ埛淇℃伅 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 鍦ㄧ嚎鐢ㄦ埛 + */ + public SysUserOnline loginUserToUserOnline(LoginUser user); +} diff --git a/evo-admin/src/main/java/com/evo/system/service/ISysUserService.java b/evo-admin/src/main/java/com/evo/system/service/ISysUserService.java new file mode 100644 index 0000000..57cebec --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/service/ISysUserService.java @@ -0,0 +1,198 @@ +package com.evo.system.service; + +import java.util.List; +import com.evo.common.core.domain.entity.SysUser; + +/** + * 鐢ㄦ埛 涓氬姟灞 + * + * @author evo + */ +public interface ISysUserService +{ + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鐢ㄦ埛鍒楄〃 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅 + */ + public List selectUserList(SysUser user); + + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ宸插垎閰嶇敤鎴疯鑹插垪琛 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅 + */ + public List selectAllocatedList(SysUser user); + + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鏈垎閰嶇敤鎴疯鑹插垪琛 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅 + */ + public List selectUnallocatedList(SysUser user); + + /** + * 閫氳繃鐢ㄦ埛鍚嶆煡璇㈢敤鎴 + * + * @param userName 鐢ㄦ埛鍚 + * @return 鐢ㄦ埛瀵硅薄淇℃伅 + */ + public SysUser selectUserByUserName(String userName); + + /** + * 閫氳繃鐢ㄦ埛ID鏌ヨ鐢ㄦ埛 + * + * @param userId 鐢ㄦ埛ID + * @return 鐢ㄦ埛瀵硅薄淇℃伅 + */ + public SysUser selectUserById(Long userId); + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ鐢ㄦ埛鎵灞炶鑹茬粍 + * + * @param userName 鐢ㄦ埛鍚 + * @return 缁撴灉 + */ + public String selectUserRoleGroup(String userName); + + /** + * 鏍¢獙鐢ㄦ埛鍚嶇О鏄惁鍞竴 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + public boolean checkUserNameUnique(SysUser user); + + /** + * 鏍¢獙鎵嬫満鍙风爜鏄惁鍞竴 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + public boolean checkPhoneUnique(SysUser user); + + /** + * 鏍¢獙email鏄惁鍞竴 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + public boolean checkEmailUnique(SysUser user); + + /** + * 鏍¢獙鐢ㄦ埛鏄惁鍏佽鎿嶄綔 + * + * @param user 鐢ㄦ埛淇℃伅 + */ + public void checkUserAllowed(SysUser user); + + /** + * 鏍¢獙鐢ㄦ埛鏄惁鏈夋暟鎹潈闄 + * + * @param userId 鐢ㄦ埛id + */ + public void checkUserDataScope(Long userId); + + /** + * 鏂板鐢ㄦ埛淇℃伅 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + public int insertUser(SysUser user); + + /** + * 娉ㄥ唽鐢ㄦ埛淇℃伅 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + public boolean registerUser(SysUser user); + + /** + * 淇敼鐢ㄦ埛淇℃伅 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + public int updateUser(SysUser user); + + /** + * 鐢ㄦ埛鎺堟潈瑙掕壊 + * + * @param userId 鐢ㄦ埛ID + * @param roleIds 瑙掕壊缁 + */ + public void insertUserAuth(Long userId, Long[] roleIds); + + /** + * 淇敼鐢ㄦ埛鐘舵 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + public int updateUserStatus(SysUser user); + + /** + * 淇敼鐢ㄦ埛鍩烘湰淇℃伅 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + public int updateUserProfile(SysUser user); + + /** + * 淇敼鐢ㄦ埛澶村儚 + * + * @param userName 鐢ㄦ埛鍚 + * @param avatar 澶村儚鍦板潃 + * @return 缁撴灉 + */ + public boolean updateUserAvatar(String userName, String avatar); + + /** + * 閲嶇疆鐢ㄦ埛瀵嗙爜 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + public int resetPwd(SysUser user); + + /** + * 閲嶇疆鐢ㄦ埛瀵嗙爜 + * + * @param userName 鐢ㄦ埛鍚 + * @param password 瀵嗙爜 + * @return 缁撴灉 + */ + public int resetUserPwd(String userName, String password); + + /** + * 閫氳繃鐢ㄦ埛ID鍒犻櫎鐢ㄦ埛 + * + * @param userId 鐢ㄦ埛ID + * @return 缁撴灉 + */ + public int deleteUserById(Long userId); + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛淇℃伅 + * + * @param userIds 闇瑕佸垹闄ょ殑鐢ㄦ埛ID + * @return 缁撴灉 + */ + public int deleteUserByIds(Long[] userIds); + + /** + * 瀵煎叆鐢ㄦ埛鏁版嵁 + * + * @param userList 鐢ㄦ埛鏁版嵁鍒楄〃 + * @param isUpdateSupport 鏄惁鏇存柊鏀寔锛屽鏋滃凡瀛樺湪锛屽垯杩涜鏇存柊鏁版嵁 + * @param operName 鎿嶄綔鐢ㄦ埛 + * @return 缁撴灉 + */ + public String importUser(List userList, Boolean isUpdateSupport, String operName); +} diff --git a/evo-admin/src/main/java/com/evo/system/service/impl/SysDeptServiceImpl.java b/evo-admin/src/main/java/com/evo/system/service/impl/SysDeptServiceImpl.java new file mode 100644 index 0000000..a927296 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/service/impl/SysDeptServiceImpl.java @@ -0,0 +1,363 @@ +package com.evo.system.service.impl; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.stream.Collectors; +import org.springframework.stereotype.Service; +import com.evo.common.annotation.DataScope; +import com.evo.common.constant.UserConstants; +import com.evo.common.core.domain.TreeSelect; +import com.evo.common.core.domain.entity.SysDept; +import com.evo.common.core.domain.entity.SysRole; +import com.evo.common.core.domain.entity.SysUser; +import com.evo.common.core.text.Convert; +import com.evo.common.exception.ServiceException; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.spring.SpringUtils; +import com.evo.system.mapper.SysDeptMapper; +import com.evo.system.mapper.SysRoleMapper; +import com.evo.system.service.ISysDeptService; +import javax.annotation.Resource; + +/** + * 閮ㄩ棬绠$悊 鏈嶅姟瀹炵幇 + * + * @author evo + */ +@Service +public class SysDeptServiceImpl implements ISysDeptService +{ + @Resource + private SysDeptMapper deptMapper; + + @Resource + private SysRoleMapper roleMapper; + + /** + * 鏌ヨ閮ㄩ棬绠$悊鏁版嵁 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 閮ㄩ棬淇℃伅闆嗗悎 + */ + @Override + @DataScope(deptAlias = "d") + public List selectDeptList(SysDept dept) + { + return deptMapper.selectDeptList(dept); + } + + /** + * 鏌ヨ閮ㄩ棬鏍戠粨鏋勪俊鎭 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 閮ㄩ棬鏍戜俊鎭泦鍚 + */ + @Override + public List selectDeptTreeList(SysDept dept) + { + List depts = SpringUtils.getAopProxy(this).selectDeptList(dept); + return buildDeptTreeSelect(depts); + } + + /** + * 鏋勫缓鍓嶇鎵闇瑕佹爲缁撴瀯 + * + * @param depts 閮ㄩ棬鍒楄〃 + * @return 鏍戠粨鏋勫垪琛 + */ + @Override + public List buildDeptTree(List depts) + { + List returnList = new ArrayList(); + List tempList = depts.stream().map(SysDept::getDeptId).collect(Collectors.toList()); + for (SysDept dept : depts) + { + // 濡傛灉鏄《绾ц妭鐐, 閬嶅巻璇ョ埗鑺傜偣鐨勬墍鏈夊瓙鑺傜偣 + if (!tempList.contains(dept.getParentId())) + { + recursionFn(depts, dept); + returnList.add(dept); + } + } + if (returnList.isEmpty()) + { + returnList = depts; + } + return returnList; + } + + /** + * 鏋勫缓鍓嶇鎵闇瑕佷笅鎷夋爲缁撴瀯 + * + * @param depts 閮ㄩ棬鍒楄〃 + * @return 涓嬫媺鏍戠粨鏋勫垪琛 + */ + @Override + public List buildDeptTreeSelect(List depts) + { + List deptTrees = buildDeptTree(depts); + return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + /** + * 鏍规嵁瑙掕壊ID鏌ヨ閮ㄩ棬鏍戜俊鎭 + * + * @param roleId 瑙掕壊ID + * @return 閫変腑閮ㄩ棬鍒楄〃 + */ + @Override + public List selectDeptListByRoleId(Long roleId) + { + SysRole role = roleMapper.selectRoleById(roleId); + return deptMapper.selectDeptListByRoleId(roleId, role.isDeptCheckStrictly()); + } + + /** + * 鏍规嵁閮ㄩ棬ID鏌ヨ淇℃伅 + * + * @param deptId 閮ㄩ棬ID + * @return 閮ㄩ棬淇℃伅 + */ + @Override + public SysDept selectDeptById(Long deptId) + { + return deptMapper.selectDeptById(deptId); + } + + /** + * 鏍规嵁ID鏌ヨ鎵鏈夊瓙閮ㄩ棬锛堟甯哥姸鎬侊級 + * + * @param deptId 閮ㄩ棬ID + * @return 瀛愰儴闂ㄦ暟 + */ + @Override + public int selectNormalChildrenDeptById(Long deptId) + { + return deptMapper.selectNormalChildrenDeptById(deptId); + } + + /** + * 鏄惁瀛樺湪瀛愯妭鐐 + * + * @param deptId 閮ㄩ棬ID + * @return 缁撴灉 + */ + @Override + public boolean hasChildByDeptId(Long deptId) + { + int result = deptMapper.hasChildByDeptId(deptId); + return result > 0; + } + + /** + * 鏌ヨ閮ㄩ棬鏄惁瀛樺湪鐢ㄦ埛 + * + * @param deptId 閮ㄩ棬ID + * @return 缁撴灉 true 瀛樺湪 false 涓嶅瓨鍦 + */ + @Override + public boolean checkDeptExistUser(Long deptId) + { + int result = deptMapper.checkDeptExistUser(deptId); + return result > 0; + } + + /** + * 鏍¢獙閮ㄩ棬鍚嶇О鏄惁鍞竴 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 缁撴灉 + */ + @Override + public boolean checkDeptNameUnique(SysDept dept) + { + Long deptId = StringUtils.isNull(dept.getDeptId()) ? -1L : dept.getDeptId(); + SysDept info = deptMapper.checkDeptNameUnique(dept.getDeptName(), dept.getParentId()); + if (StringUtils.isNotNull(info) && info.getDeptId().longValue() != deptId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 鏍¢獙閮ㄩ棬鏄惁鏈夋暟鎹潈闄 + * + * @param deptId 閮ㄩ棬id + */ + @Override + public void checkDeptDataScope(Long deptId) + { + if (!SysUser.isAdmin(SecurityUtils.getUserId()) && StringUtils.isNotNull(deptId)) + { + SysDept dept = new SysDept(); + dept.setDeptId(deptId); + List depts = SpringUtils.getAopProxy(this).selectDeptList(dept); + if (StringUtils.isEmpty(depts)) + { + throw new ServiceException("娌℃湁鏉冮檺璁块棶閮ㄩ棬鏁版嵁锛"); + } + } + } + + /** + * 鏂板淇濆瓨閮ㄩ棬淇℃伅 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 缁撴灉 + */ + @Override + public int insertDept(SysDept dept) + { + SysDept info = deptMapper.selectDeptById(dept.getParentId()); + if(StringUtils.isNotNull(info)){ + // 濡傛灉鐖惰妭鐐逛笉涓烘甯哥姸鎬,鍒欎笉鍏佽鏂板瀛愯妭鐐 + if (!UserConstants.DEPT_NORMAL.equals(info.getStatus())) + { + throw new ServiceException("閮ㄩ棬鍋滅敤锛屼笉鍏佽鏂板"); + } + if(StringUtils.isNotEmpty(info.getAncestors())){ + dept.setAncestors(info.getAncestors() + "," + dept.getParentId()); + }else{ + dept.setAncestors(dept.getParentId()+""); + } + } + return deptMapper.insertDept(dept); + } + + /** + * 淇敼淇濆瓨閮ㄩ棬淇℃伅 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 缁撴灉 + */ + @Override + public int updateDept(SysDept dept) + { + SysDept newParentDept = deptMapper.selectDeptById(dept.getParentId()); + SysDept oldDept = deptMapper.selectDeptById(dept.getDeptId()); + if (StringUtils.isNotNull(newParentDept) && StringUtils.isNotNull(oldDept)) + { + String newAncestors = newParentDept.getAncestors() + "," + newParentDept.getDeptId(); + String oldAncestors = oldDept.getAncestors(); + dept.setAncestors(newAncestors); + updateDeptChildren(dept.getDeptId(), newAncestors, oldAncestors); + } + int result = deptMapper.updateDept(dept); + if (UserConstants.DEPT_NORMAL.equals(dept.getStatus()) && StringUtils.isNotEmpty(dept.getAncestors()) + && !StringUtils.equals("0", dept.getAncestors())) + { + // 濡傛灉璇ラ儴闂ㄦ槸鍚敤鐘舵侊紝鍒欏惎鐢ㄨ閮ㄩ棬鐨勬墍鏈変笂绾ч儴闂 + updateParentDeptStatusNormal(dept); + } + return result; + } + + /** + * 淇敼璇ラ儴闂ㄧ殑鐖剁骇閮ㄩ棬鐘舵 + * + * @param dept 褰撳墠閮ㄩ棬 + */ + private void updateParentDeptStatusNormal(SysDept dept) + { + String ancestors = dept.getAncestors(); + Long[] deptIds = Convert.toLongArray(ancestors); + deptMapper.updateDeptStatusNormal(deptIds); + } + + /** + * 淇敼瀛愬厓绱犲叧绯 + * + * @param deptId 琚慨鏀圭殑閮ㄩ棬ID + * @param newAncestors 鏂扮殑鐖禝D闆嗗悎 + * @param oldAncestors 鏃х殑鐖禝D闆嗗悎 + */ + public void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors) + { + List children = deptMapper.selectChildrenDeptById(deptId); + for (SysDept child : children) + { + child.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors)); + } + if (children.size() > 0) + { + deptMapper.updateDeptChildren(children); + } + } + + /** + * 鍒犻櫎閮ㄩ棬绠$悊淇℃伅 + * + * @param deptId 閮ㄩ棬ID + * @return 缁撴灉 + */ + @Override + public int deleteDeptById(Long deptId) + { + return deptMapper.deleteDeptById(deptId); + } + + /** + * 閫掑綊鍒楄〃 + */ + private void recursionFn(List list, SysDept t) + { + // 寰楀埌瀛愯妭鐐瑰垪琛 + List childList = getChildList(list, t); + t.setChildren(childList); + for (SysDept tChild : childList) + { + if (hasChild(list, tChild)) + { + recursionFn(list, tChild); + } + } + } + + /** + * 寰楀埌瀛愯妭鐐瑰垪琛 + */ + private List getChildList(List list, SysDept t) + { + List tlist = new ArrayList(); + Iterator it = list.iterator(); + while (it.hasNext()) + { + SysDept n = (SysDept) it.next(); + if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue()) + { + tlist.add(n); + } + } + return tlist; + } + + /** + * 鍒ゆ柇鏄惁鏈夊瓙鑺傜偣 + */ + private boolean hasChild(List list, SysDept t) + { + return getChildList(list, t).size() > 0; + } + + /** + * 鏌ヨ鎵鏈夌殑鏈夋晥閮ㄩ棬 + * @return + */ + @Override + public List selectAllDeptList(){ + List depts = deptMapper.queryDeptTreeList(); + return buildDeptTreeSelect(depts); + } + + /** + * 鏌ヨ鎵鏈夌殑鍏徃 + * @return + */ + @Override + public List queryAllDeptForMin(){ + return deptMapper.queryAllDeptForMin(); + } +} diff --git a/evo-admin/src/main/java/com/evo/system/service/impl/SysDictDataServiceImpl.java b/evo-admin/src/main/java/com/evo/system/service/impl/SysDictDataServiceImpl.java new file mode 100644 index 0000000..d6e4372 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/service/impl/SysDictDataServiceImpl.java @@ -0,0 +1,111 @@ +package com.evo.system.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.evo.common.core.domain.entity.SysDictData; +import com.evo.common.utils.DictUtils; +import com.evo.system.mapper.SysDictDataMapper; +import com.evo.system.service.ISysDictDataService; + +/** + * 瀛楀吀 涓氬姟灞傚鐞 + * + * @author evo + */ +@Service +public class SysDictDataServiceImpl implements ISysDictDataService +{ + @Autowired + private SysDictDataMapper dictDataMapper; + + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀鏁版嵁 + * + * @param dictData 瀛楀吀鏁版嵁淇℃伅 + * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅 + */ + @Override + public List selectDictDataList(SysDictData dictData) + { + return dictDataMapper.selectDictDataList(dictData); + } + + /** + * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏搁敭鍊兼煡璇㈠瓧鍏告暟鎹俊鎭 + * + * @param dictType 瀛楀吀绫诲瀷 + * @param dictValue 瀛楀吀閿 + * @return 瀛楀吀鏍囩 + */ + @Override + public String selectDictLabel(String dictType, String dictValue) + { + return dictDataMapper.selectDictLabel(dictType, dictValue); + } + + /** + * 鏍规嵁瀛楀吀鏁版嵁ID鏌ヨ淇℃伅 + * + * @param dictCode 瀛楀吀鏁版嵁ID + * @return 瀛楀吀鏁版嵁 + */ + @Override + public SysDictData selectDictDataById(Long dictCode) + { + return dictDataMapper.selectDictDataById(dictCode); + } + + /** + * 鎵归噺鍒犻櫎瀛楀吀鏁版嵁淇℃伅 + * + * @param dictCodes 闇瑕佸垹闄ょ殑瀛楀吀鏁版嵁ID + */ + @Override + public void deleteDictDataByIds(Long[] dictCodes) + { + for (Long dictCode : dictCodes) + { + SysDictData data = selectDictDataById(dictCode); + dictDataMapper.deleteDictDataById(dictCode); + List dictDatas = dictDataMapper.selectDictDataByType(data.getDictType()); + DictUtils.setDictCache(data.getDictType(), dictDatas); + } + } + + /** + * 鏂板淇濆瓨瀛楀吀鏁版嵁淇℃伅 + * + * @param data 瀛楀吀鏁版嵁淇℃伅 + * @return 缁撴灉 + */ + @Override + public int insertDictData(SysDictData data) + { + int row = dictDataMapper.insertDictData(data); + if (row > 0) + { + List dictDatas = dictDataMapper.selectDictDataByType(data.getDictType()); + DictUtils.setDictCache(data.getDictType(), dictDatas); + } + return row; + } + + /** + * 淇敼淇濆瓨瀛楀吀鏁版嵁淇℃伅 + * + * @param data 瀛楀吀鏁版嵁淇℃伅 + * @return 缁撴灉 + */ + @Override + public int updateDictData(SysDictData data) + { + int row = dictDataMapper.updateDictData(data); + if (row > 0) + { + List dictDatas = dictDataMapper.selectDictDataByType(data.getDictType()); + DictUtils.setDictCache(data.getDictType(), dictDatas); + } + return row; + } +} diff --git a/evo-admin/src/main/java/com/evo/system/service/impl/SysDictTypeServiceImpl.java b/evo-admin/src/main/java/com/evo/system/service/impl/SysDictTypeServiceImpl.java new file mode 100644 index 0000000..050123c --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/service/impl/SysDictTypeServiceImpl.java @@ -0,0 +1,223 @@ +package com.evo.system.service.impl; + +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import javax.annotation.PostConstruct; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.evo.common.constant.UserConstants; +import com.evo.common.core.domain.entity.SysDictData; +import com.evo.common.core.domain.entity.SysDictType; +import com.evo.common.exception.ServiceException; +import com.evo.common.utils.DictUtils; +import com.evo.common.utils.StringUtils; +import com.evo.system.mapper.SysDictDataMapper; +import com.evo.system.mapper.SysDictTypeMapper; +import com.evo.system.service.ISysDictTypeService; + +/** + * 瀛楀吀 涓氬姟灞傚鐞 + * + * @author evo + */ +@Service +public class SysDictTypeServiceImpl implements ISysDictTypeService +{ + @Autowired + private SysDictTypeMapper dictTypeMapper; + + @Autowired + private SysDictDataMapper dictDataMapper; + + /** + * 椤圭洰鍚姩鏃讹紝鍒濆鍖栧瓧鍏稿埌缂撳瓨 + */ + @PostConstruct + public void init() + { + loadingDictCache(); + } + + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀绫诲瀷 + * + * @param dictType 瀛楀吀绫诲瀷淇℃伅 + * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅 + */ + @Override + public List selectDictTypeList(SysDictType dictType) + { + return dictTypeMapper.selectDictTypeList(dictType); + } + + /** + * 鏍规嵁鎵鏈夊瓧鍏哥被鍨 + * + * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅 + */ + @Override + public List selectDictTypeAll() + { + return dictTypeMapper.selectDictTypeAll(); + } + + /** + * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁 + * + * @param dictType 瀛楀吀绫诲瀷 + * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅 + */ + @Override + public List selectDictDataByType(String dictType) + { + List dictDatas = DictUtils.getDictCache(dictType); + if (StringUtils.isNotEmpty(dictDatas)) + { + return dictDatas; + } + dictDatas = dictDataMapper.selectDictDataByType(dictType); + if (StringUtils.isNotEmpty(dictDatas)) + { + DictUtils.setDictCache(dictType, dictDatas); + return dictDatas; + } + return null; + } + + /** + * 鏍规嵁瀛楀吀绫诲瀷ID鏌ヨ淇℃伅 + * + * @param dictId 瀛楀吀绫诲瀷ID + * @return 瀛楀吀绫诲瀷 + */ + @Override + public SysDictType selectDictTypeById(Long dictId) + { + return dictTypeMapper.selectDictTypeById(dictId); + } + + /** + * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ淇℃伅 + * + * @param dictType 瀛楀吀绫诲瀷 + * @return 瀛楀吀绫诲瀷 + */ + @Override + public SysDictType selectDictTypeByType(String dictType) + { + return dictTypeMapper.selectDictTypeByType(dictType); + } + + /** + * 鎵归噺鍒犻櫎瀛楀吀绫诲瀷淇℃伅 + * + * @param dictIds 闇瑕佸垹闄ょ殑瀛楀吀ID + */ + @Override + public void deleteDictTypeByIds(Long[] dictIds) + { + for (Long dictId : dictIds) + { + SysDictType dictType = selectDictTypeById(dictId); + if (dictDataMapper.countDictDataByType(dictType.getDictType()) > 0) + { + throw new ServiceException(String.format("%1$s宸插垎閰,涓嶈兘鍒犻櫎", dictType.getDictName())); + } + dictTypeMapper.deleteDictTypeById(dictId); + DictUtils.removeDictCache(dictType.getDictType()); + } + } + + /** + * 鍔犺浇瀛楀吀缂撳瓨鏁版嵁 + */ + @Override + public void loadingDictCache() + { + SysDictData dictData = new SysDictData(); + dictData.setStatus("0"); + Map> dictDataMap = dictDataMapper.selectDictDataList(dictData).stream().collect(Collectors.groupingBy(SysDictData::getDictType)); + for (Map.Entry> entry : dictDataMap.entrySet()) + { + DictUtils.setDictCache(entry.getKey(), entry.getValue().stream().sorted(Comparator.comparing(SysDictData::getDictSort)).collect(Collectors.toList())); + } + } + + /** + * 娓呯┖瀛楀吀缂撳瓨鏁版嵁 + */ + @Override + public void clearDictCache() + { + DictUtils.clearDictCache(); + } + + /** + * 閲嶇疆瀛楀吀缂撳瓨鏁版嵁 + */ + @Override + public void resetDictCache() + { + clearDictCache(); + loadingDictCache(); + } + + /** + * 鏂板淇濆瓨瀛楀吀绫诲瀷淇℃伅 + * + * @param dict 瀛楀吀绫诲瀷淇℃伅 + * @return 缁撴灉 + */ + @Override + public int insertDictType(SysDictType dict) + { + int row = dictTypeMapper.insertDictType(dict); + if (row > 0) + { + DictUtils.setDictCache(dict.getDictType(), null); + } + return row; + } + + /** + * 淇敼淇濆瓨瀛楀吀绫诲瀷淇℃伅 + * + * @param dict 瀛楀吀绫诲瀷淇℃伅 + * @return 缁撴灉 + */ + @Override + @Transactional + public int updateDictType(SysDictType dict) + { + SysDictType oldDict = dictTypeMapper.selectDictTypeById(dict.getDictId()); + dictDataMapper.updateDictDataType(oldDict.getDictType(), dict.getDictType()); + int row = dictTypeMapper.updateDictType(dict); + if (row > 0) + { + List dictDatas = dictDataMapper.selectDictDataByType(dict.getDictType()); + DictUtils.setDictCache(dict.getDictType(), dictDatas); + } + return row; + } + + /** + * 鏍¢獙瀛楀吀绫诲瀷绉版槸鍚﹀敮涓 + * + * @param dict 瀛楀吀绫诲瀷 + * @return 缁撴灉 + */ + @Override + public boolean checkDictTypeUnique(SysDictType dict) + { + Long dictId = StringUtils.isNull(dict.getDictId()) ? -1L : dict.getDictId(); + SysDictType dictType = dictTypeMapper.checkDictTypeUnique(dict.getDictType()); + if (StringUtils.isNotNull(dictType) && dictType.getDictId().longValue() != dictId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } +} diff --git a/evo-admin/src/main/java/com/evo/system/service/impl/SysLogininforServiceImpl.java b/evo-admin/src/main/java/com/evo/system/service/impl/SysLogininforServiceImpl.java new file mode 100644 index 0000000..8da5c1b --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/service/impl/SysLogininforServiceImpl.java @@ -0,0 +1,65 @@ +package com.evo.system.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.evo.system.domain.SysLogininfor; +import com.evo.system.mapper.SysLogininforMapper; +import com.evo.system.service.ISysLogininforService; + +/** + * 绯荤粺璁块棶鏃ュ織鎯呭喌淇℃伅 鏈嶅姟灞傚鐞 + * + * @author evo + */ +@Service +public class SysLogininforServiceImpl implements ISysLogininforService +{ + + @Autowired + private SysLogininforMapper logininforMapper; + + /** + * 鏂板绯荤粺鐧诲綍鏃ュ織 + * + * @param logininfor 璁块棶鏃ュ織瀵硅薄 + */ + @Override + public void insertLogininfor(SysLogininfor logininfor) + { + logininforMapper.insertLogininfor(logininfor); + } + + /** + * 鏌ヨ绯荤粺鐧诲綍鏃ュ織闆嗗悎 + * + * @param logininfor 璁块棶鏃ュ織瀵硅薄 + * @return 鐧诲綍璁板綍闆嗗悎 + */ + @Override + public List selectLogininforList(SysLogininfor logininfor) + { + return logininforMapper.selectLogininforList(logininfor); + } + + /** + * 鎵归噺鍒犻櫎绯荤粺鐧诲綍鏃ュ織 + * + * @param infoIds 闇瑕佸垹闄ょ殑鐧诲綍鏃ュ織ID + * @return 缁撴灉 + */ + @Override + public int deleteLogininforByIds(Long[] infoIds) + { + return logininforMapper.deleteLogininforByIds(infoIds); + } + + /** + * 娓呯┖绯荤粺鐧诲綍鏃ュ織 + */ + @Override + public void cleanLogininfor() + { + logininforMapper.cleanLogininfor(); + } +} diff --git a/evo-admin/src/main/java/com/evo/system/service/impl/SysMenuServiceImpl.java b/evo-admin/src/main/java/com/evo/system/service/impl/SysMenuServiceImpl.java new file mode 100644 index 0000000..272c63e --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/service/impl/SysMenuServiceImpl.java @@ -0,0 +1,543 @@ +package com.evo.system.service.impl; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.evo.common.constant.Constants; +import com.evo.common.constant.UserConstants; +import com.evo.common.core.domain.TreeSelect; +import com.evo.common.core.domain.entity.SysMenu; +import com.evo.common.core.domain.entity.SysRole; +import com.evo.common.core.domain.entity.SysUser; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.system.domain.vo.MetaVo; +import com.evo.system.domain.vo.RouterVo; +import com.evo.system.mapper.SysMenuMapper; +import com.evo.system.mapper.SysRoleMapper; +import com.evo.system.mapper.SysRoleMenuMapper; +import com.evo.system.service.ISysMenuService; + +/** + * 鑿滃崟 涓氬姟灞傚鐞 + * + * @author evo + */ +@Service +public class SysMenuServiceImpl implements ISysMenuService +{ + public static final String PREMISSION_STRING = "perms[\"{0}\"]"; + + @Autowired + private SysMenuMapper menuMapper; + + @Autowired + private SysRoleMapper roleMapper; + + @Autowired + private SysRoleMenuMapper roleMenuMapper; + + /** + * 鏍规嵁鐢ㄦ埛鏌ヨ绯荤粺鑿滃崟鍒楄〃 + * + * @param userId 鐢ㄦ埛ID + * @return 鑿滃崟鍒楄〃 + */ + @Override + public List selectMenuList(Long userId) + { + return selectMenuList(new SysMenu(), userId); + } + + /** + * 鏌ヨ绯荤粺鑿滃崟鍒楄〃 + * + * @param menu 鑿滃崟淇℃伅 + * @return 鑿滃崟鍒楄〃 + */ + @Override + public List selectMenuList(SysMenu menu, Long userId) + { + List menuList = null; + // 绠$悊鍛樻樉绀烘墍鏈夎彍鍗曚俊鎭 + if (SysUser.isAdmin(userId)) + { + menuList = menuMapper.selectMenuList(menu); + } + else + { + menu.getParams().put("userId", userId); + menuList = menuMapper.selectMenuListByUserId(menu); + } + return menuList; + } + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ鏉冮檺 + * + * @param userId 鐢ㄦ埛ID + * @return 鏉冮檺鍒楄〃 + */ + @Override + public Set selectMenuPermsByUserId(Long userId) + { + List perms = menuMapper.selectMenuPermsByUserId(userId); + Set permsSet = new HashSet<>(); + for (String perm : perms) + { + if (StringUtils.isNotEmpty(perm)) + { + permsSet.addAll(Arrays.asList(perm.trim().split(","))); + } + } + return permsSet; + } + + /** + * 鏍规嵁瑙掕壊ID鏌ヨ鏉冮檺 + * + * @param roleId 瑙掕壊ID + * @return 鏉冮檺鍒楄〃 + */ + @Override + public Set selectMenuPermsByRoleId(Long roleId) + { + List perms = menuMapper.selectMenuPermsByRoleId(roleId); + Set permsSet = new HashSet<>(); + for (String perm : perms) + { + if (StringUtils.isNotEmpty(perm)) + { + permsSet.addAll(Arrays.asList(perm.trim().split(","))); + } + } + return permsSet; + } + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ鑿滃崟 + * + * @param userId 鐢ㄦ埛鍚嶇О + * @return 鑿滃崟鍒楄〃 + */ + @Override + public List selectMenuTreeByUserId(Long userId) + { + List menus = null; + if (SecurityUtils.isAdmin(userId)) + { + menus = menuMapper.selectMenuTreeAll(); + } + else + { + menus = menuMapper.selectMenuTreeByUserId(userId); + } + return getChildPerms(menus, 0); + } + + /** + * 鏍规嵁瑙掕壊ID鏌ヨ鑿滃崟鏍戜俊鎭 + * + * @param roleId 瑙掕壊ID + * @return 閫変腑鑿滃崟鍒楄〃 + */ + @Override + public List selectMenuListByRoleId(Long roleId) + { + SysRole role = roleMapper.selectRoleById(roleId); + return menuMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly()); + } + + /** + * 鏋勫缓鍓嶇璺敱鎵闇瑕佺殑鑿滃崟 + * + * @param menus 鑿滃崟鍒楄〃 + * @return 璺敱鍒楄〃 + */ + @Override + public List buildMenus(List menus) + { + List routers = new LinkedList(); + for (SysMenu menu : menus) + { + RouterVo router = new RouterVo(); + router.setHidden("1".equals(menu.getVisible())); + router.setName(getRouteName(menu)); + router.setPath(getRouterPath(menu)); + router.setComponent(getComponent(menu)); + router.setQuery(menu.getQuery()); + router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); + List cMenus = menu.getChildren(); + if (StringUtils.isNotEmpty(cMenus) && UserConstants.TYPE_DIR.equals(menu.getMenuType())) + { + router.setAlwaysShow(true); + router.setRedirect("noRedirect"); + router.setChildren(buildMenus(cMenus)); + } + else if (isMenuFrame(menu)) + { + router.setMeta(null); + List childrenList = new ArrayList(); + RouterVo children = new RouterVo(); + children.setPath(menu.getPath()); + children.setComponent(menu.getComponent()); + children.setName(getRouteName(menu.getRouteName(), menu.getPath())); + children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); + children.setQuery(menu.getQuery()); + childrenList.add(children); + router.setChildren(childrenList); + } + else if (menu.getParentId().intValue() == 0 && isInnerLink(menu)) + { + router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon())); + router.setPath("/"); + List childrenList = new ArrayList(); + RouterVo children = new RouterVo(); + String routerPath = innerLinkReplaceEach(menu.getPath()); + children.setPath(routerPath); + children.setComponent(UserConstants.INNER_LINK); + children.setName(getRouteName(menu.getRouteName(), routerPath)); + children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), menu.getPath())); + childrenList.add(children); + router.setChildren(childrenList); + } + routers.add(router); + } + return routers; + } + + /** + * 鏋勫缓鍓嶇鎵闇瑕佹爲缁撴瀯 + * + * @param menus 鑿滃崟鍒楄〃 + * @return 鏍戠粨鏋勫垪琛 + */ + @Override + public List buildMenuTree(List menus) + { + List returnList = new ArrayList(); + List tempList = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList()); + for (Iterator iterator = menus.iterator(); iterator.hasNext();) + { + SysMenu menu = (SysMenu) iterator.next(); + // 濡傛灉鏄《绾ц妭鐐, 閬嶅巻璇ョ埗鑺傜偣鐨勬墍鏈夊瓙鑺傜偣 + if (!tempList.contains(menu.getParentId())) + { + recursionFn(menus, menu); + returnList.add(menu); + } + } + if (returnList.isEmpty()) + { + returnList = menus; + } + return returnList; + } + + /** + * 鏋勫缓鍓嶇鎵闇瑕佷笅鎷夋爲缁撴瀯 + * + * @param menus 鑿滃崟鍒楄〃 + * @return 涓嬫媺鏍戠粨鏋勫垪琛 + */ + @Override + public List buildMenuTreeSelect(List menus) + { + List menuTrees = buildMenuTree(menus); + return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + /** + * 鏍规嵁鑿滃崟ID鏌ヨ淇℃伅 + * + * @param menuId 鑿滃崟ID + * @return 鑿滃崟淇℃伅 + */ + @Override + public SysMenu selectMenuById(Long menuId) + { + return menuMapper.selectMenuById(menuId); + } + + /** + * 鏄惁瀛樺湪鑿滃崟瀛愯妭鐐 + * + * @param menuId 鑿滃崟ID + * @return 缁撴灉 + */ + @Override + public boolean hasChildByMenuId(Long menuId) + { + int result = menuMapper.hasChildByMenuId(menuId); + return result > 0; + } + + /** + * 鏌ヨ鑿滃崟浣跨敤鏁伴噺 + * + * @param menuId 鑿滃崟ID + * @return 缁撴灉 + */ + @Override + public boolean checkMenuExistRole(Long menuId) + { + int result = roleMenuMapper.checkMenuExistRole(menuId); + return result > 0; + } + + /** + * 鏂板淇濆瓨鑿滃崟淇℃伅 + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁撴灉 + */ + @Override + public int insertMenu(SysMenu menu) + { + return menuMapper.insertMenu(menu); + } + + /** + * 淇敼淇濆瓨鑿滃崟淇℃伅 + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁撴灉 + */ + @Override + public int updateMenu(SysMenu menu) + { + return menuMapper.updateMenu(menu); + } + + /** + * 鍒犻櫎鑿滃崟绠$悊淇℃伅 + * + * @param menuId 鑿滃崟ID + * @return 缁撴灉 + */ + @Override + public int deleteMenuById(Long menuId) + { + return menuMapper.deleteMenuById(menuId); + } + + /** + * 鏍¢獙鑿滃崟鍚嶇О鏄惁鍞竴 + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁撴灉 + */ + @Override + public boolean checkMenuNameUnique(SysMenu menu) + { + Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId(); + SysMenu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId()); + if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 鑾峰彇璺敱鍚嶇О + * + * @param menu 鑿滃崟淇℃伅 + * @return 璺敱鍚嶇О + */ + public String getRouteName(SysMenu menu) + { + // 闈炲閾惧苟涓旀槸涓绾х洰褰曪紙绫诲瀷涓虹洰褰曪級 + if (isMenuFrame(menu)) + { + return StringUtils.EMPTY; + } + return getRouteName(menu.getRouteName(), menu.getPath()); + } + + /** + * 鑾峰彇璺敱鍚嶇О锛屽娌℃湁閰嶇疆璺敱鍚嶇О鍒欏彇璺敱鍦板潃 + * + * @param routerName 璺敱鍚嶇О + * @param path 璺敱鍦板潃 + * @return 璺敱鍚嶇О锛堥┘宄版牸寮忥級 + */ + public String getRouteName(String name, String path) + { + String routerName = StringUtils.isNotEmpty(name) ? name : path; + return StringUtils.capitalize(routerName); + } + + /** + * 鑾峰彇璺敱鍦板潃 + * + * @param menu 鑿滃崟淇℃伅 + * @return 璺敱鍦板潃 + */ + public String getRouterPath(SysMenu menu) + { + String routerPath = menu.getPath(); + // 鍐呴摼鎵撳紑澶栫綉鏂瑰紡 + if (menu.getParentId().intValue() != 0 && isInnerLink(menu)) + { + routerPath = innerLinkReplaceEach(routerPath); + } + // 闈炲閾惧苟涓旀槸涓绾х洰褰曪紙绫诲瀷涓虹洰褰曪級 + if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType()) + && UserConstants.NO_FRAME.equals(menu.getIsFrame())) + { + routerPath = "/" + menu.getPath(); + } + // 闈炲閾惧苟涓旀槸涓绾х洰褰曪紙绫诲瀷涓鸿彍鍗曪級 + else if (isMenuFrame(menu)) + { + routerPath = "/"; + } + return routerPath; + } + + /** + * 鑾峰彇缁勪欢淇℃伅 + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁勪欢淇℃伅 + */ + public String getComponent(SysMenu menu) + { + String component = UserConstants.LAYOUT; + if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu)) + { + component = menu.getComponent(); + } + else if (StringUtils.isEmpty(menu.getComponent()) && menu.getParentId().intValue() != 0 && isInnerLink(menu)) + { + component = UserConstants.INNER_LINK; + } + else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu)) + { + component = UserConstants.PARENT_VIEW; + } + return component; + } + + /** + * 鏄惁涓鸿彍鍗曞唴閮ㄨ烦杞 + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁撴灉 + */ + public boolean isMenuFrame(SysMenu menu) + { + return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType()) + && menu.getIsFrame().equals(UserConstants.NO_FRAME); + } + + /** + * 鏄惁涓哄唴閾剧粍浠 + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁撴灉 + */ + public boolean isInnerLink(SysMenu menu) + { + return menu.getIsFrame().equals(UserConstants.NO_FRAME) && StringUtils.ishttp(menu.getPath()); + } + + /** + * 鏄惁涓簆arent_view缁勪欢 + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁撴灉 + */ + public boolean isParentView(SysMenu menu) + { + return menu.getParentId().intValue() != 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType()); + } + + /** + * 鏍规嵁鐖惰妭鐐圭殑ID鑾峰彇鎵鏈夊瓙鑺傜偣 + * + * @param list 鍒嗙被琛 + * @param parentId 浼犲叆鐨勭埗鑺傜偣ID + * @return String + */ + public List getChildPerms(List list, int parentId) + { + List returnList = new ArrayList(); + for (Iterator iterator = list.iterator(); iterator.hasNext();) + { + SysMenu t = (SysMenu) iterator.next(); + // 涓銆佹牴鎹紶鍏ョ殑鏌愪釜鐖惰妭鐐笽D,閬嶅巻璇ョ埗鑺傜偣鐨勬墍鏈夊瓙鑺傜偣 + if (t.getParentId() == parentId) + { + recursionFn(list, t); + returnList.add(t); + } + } + return returnList; + } + + /** + * 閫掑綊鍒楄〃 + * + * @param list 鍒嗙被琛 + * @param t 瀛愯妭鐐 + */ + private void recursionFn(List list, SysMenu t) + { + // 寰楀埌瀛愯妭鐐瑰垪琛 + List childList = getChildList(list, t); + t.setChildren(childList); + for (SysMenu tChild : childList) + { + if (hasChild(list, tChild)) + { + recursionFn(list, tChild); + } + } + } + + /** + * 寰楀埌瀛愯妭鐐瑰垪琛 + */ + private List getChildList(List list, SysMenu t) + { + List tlist = new ArrayList(); + Iterator it = list.iterator(); + while (it.hasNext()) + { + SysMenu n = (SysMenu) it.next(); + if (n.getParentId().longValue() == t.getMenuId().longValue()) + { + tlist.add(n); + } + } + return tlist; + } + + /** + * 鍒ゆ柇鏄惁鏈夊瓙鑺傜偣 + */ + private boolean hasChild(List list, SysMenu t) + { + return getChildList(list, t).size() > 0; + } + + /** + * 鍐呴摼鍩熷悕鐗规畩瀛楃鏇挎崲 + * + * @return 鏇挎崲鍚庣殑鍐呴摼鍩熷悕 + */ + public String innerLinkReplaceEach(String path) + { + return StringUtils.replaceEach(path, new String[] { Constants.HTTP, Constants.HTTPS, Constants.WWW, ".", ":" }, + new String[] { "", "", "", "/", "/" }); + } +} diff --git a/evo-admin/src/main/java/com/evo/system/service/impl/SysOperLogServiceImpl.java b/evo-admin/src/main/java/com/evo/system/service/impl/SysOperLogServiceImpl.java new file mode 100644 index 0000000..dd58eef --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/service/impl/SysOperLogServiceImpl.java @@ -0,0 +1,76 @@ +package com.evo.system.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.evo.system.domain.SysOperLog; +import com.evo.system.mapper.SysOperLogMapper; +import com.evo.system.service.ISysOperLogService; + +/** + * 鎿嶄綔鏃ュ織 鏈嶅姟灞傚鐞 + * + * @author evo + */ +@Service +public class SysOperLogServiceImpl implements ISysOperLogService +{ + @Autowired + private SysOperLogMapper operLogMapper; + + /** + * 鏂板鎿嶄綔鏃ュ織 + * + * @param operLog 鎿嶄綔鏃ュ織瀵硅薄 + */ + @Override + public void insertOperlog(SysOperLog operLog) + { + operLogMapper.insertOperlog(operLog); + } + + /** + * 鏌ヨ绯荤粺鎿嶄綔鏃ュ織闆嗗悎 + * + * @param operLog 鎿嶄綔鏃ュ織瀵硅薄 + * @return 鎿嶄綔鏃ュ織闆嗗悎 + */ + @Override + public List selectOperLogList(SysOperLog operLog) + { + return operLogMapper.selectOperLogList(operLog); + } + + /** + * 鎵归噺鍒犻櫎绯荤粺鎿嶄綔鏃ュ織 + * + * @param operIds 闇瑕佸垹闄ょ殑鎿嶄綔鏃ュ織ID + * @return 缁撴灉 + */ + @Override + public int deleteOperLogByIds(Long[] operIds) + { + return operLogMapper.deleteOperLogByIds(operIds); + } + + /** + * 鏌ヨ鎿嶄綔鏃ュ織璇︾粏 + * + * @param operId 鎿嶄綔ID + * @return 鎿嶄綔鏃ュ織瀵硅薄 + */ + @Override + public SysOperLog selectOperLogById(Long operId) + { + return operLogMapper.selectOperLogById(operId); + } + + /** + * 娓呯┖鎿嶄綔鏃ュ織 + */ + @Override + public void cleanOperLog() + { + operLogMapper.cleanOperLog(); + } +} diff --git a/evo-admin/src/main/java/com/evo/system/service/impl/SysRoleServiceImpl.java b/evo-admin/src/main/java/com/evo/system/service/impl/SysRoleServiceImpl.java new file mode 100644 index 0000000..4d439c5 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/service/impl/SysRoleServiceImpl.java @@ -0,0 +1,427 @@ +package com.evo.system.service.impl; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.evo.common.annotation.DataScope; +import com.evo.common.constant.UserConstants; +import com.evo.common.core.domain.entity.SysRole; +import com.evo.common.core.domain.entity.SysUser; +import com.evo.common.exception.ServiceException; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.spring.SpringUtils; +import com.evo.system.domain.SysRoleDept; +import com.evo.system.domain.SysRoleMenu; +import com.evo.system.domain.SysUserRole; +import com.evo.system.mapper.SysRoleDeptMapper; +import com.evo.system.mapper.SysRoleMapper; +import com.evo.system.mapper.SysRoleMenuMapper; +import com.evo.system.mapper.SysUserRoleMapper; +import com.evo.system.service.ISysRoleService; + +/** + * 瑙掕壊 涓氬姟灞傚鐞 + * + * @author evo + */ +@Service +public class SysRoleServiceImpl implements ISysRoleService +{ + @Autowired + private SysRoleMapper roleMapper; + + @Autowired + private SysRoleMenuMapper roleMenuMapper; + + @Autowired + private SysUserRoleMapper userRoleMapper; + + @Autowired + private SysRoleDeptMapper roleDeptMapper; + + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瑙掕壊鏁版嵁 + * + * @param role 瑙掕壊淇℃伅 + * @return 瑙掕壊鏁版嵁闆嗗悎淇℃伅 + */ + @Override + @DataScope(deptAlias = "d") + public List selectRoleList(SysRole role) + { + return roleMapper.selectRoleList(role); + } + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ瑙掕壊 + * + * @param userId 鐢ㄦ埛ID + * @return 瑙掕壊鍒楄〃 + */ + @Override + public List selectRolesByUserId(Long userId) + { + List userRoles = roleMapper.selectRolePermissionByUserId(userId); + List roles = selectRoleAll(); + for (SysRole role : roles) + { + for (SysRole userRole : userRoles) + { + if (role.getRoleId().longValue() == userRole.getRoleId().longValue()) + { + role.setFlag(true); + break; + } + } + } + return roles; + } + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ鏉冮檺 + * + * @param userId 鐢ㄦ埛ID + * @return 鏉冮檺鍒楄〃 + */ + @Override + public Set selectRolePermissionByUserId(Long userId) + { + List perms = roleMapper.selectRolePermissionByUserId(userId); + Set permsSet = new HashSet<>(); + for (SysRole perm : perms) + { + if (StringUtils.isNotNull(perm)) + { + permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(","))); + } + } + return permsSet; + } + + /** + * 鏌ヨ鎵鏈夎鑹 + * + * @return 瑙掕壊鍒楄〃 + */ + @Override + public List selectRoleAll() + { + return SpringUtils.getAopProxy(this).selectRoleList(new SysRole()); + } + + /** + * 鏍规嵁鐢ㄦ埛ID鑾峰彇瑙掕壊閫夋嫨妗嗗垪琛 + * + * @param userId 鐢ㄦ埛ID + * @return 閫変腑瑙掕壊ID鍒楄〃 + */ + @Override + public List selectRoleListByUserId(Long userId) + { + return roleMapper.selectRoleListByUserId(userId); + } + + /** + * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊 + * + * @param roleId 瑙掕壊ID + * @return 瑙掕壊瀵硅薄淇℃伅 + */ + @Override + public SysRole selectRoleById(Long roleId) + { + return roleMapper.selectRoleById(roleId); + } + + /** + * 鏍¢獙瑙掕壊鍚嶇О鏄惁鍞竴 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + @Override + public boolean checkRoleNameUnique(SysRole role) + { + Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId(); + SysRole info = roleMapper.checkRoleNameUnique(role.getRoleName()); + if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 鏍¢獙瑙掕壊鏉冮檺鏄惁鍞竴 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + @Override + public boolean checkRoleKeyUnique(SysRole role) + { + Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId(); + SysRole info = roleMapper.checkRoleKeyUnique(role.getRoleKey()); + if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 鏍¢獙瑙掕壊鏄惁鍏佽鎿嶄綔 + * + * @param role 瑙掕壊淇℃伅 + */ + @Override + public void checkRoleAllowed(SysRole role) + { + if (StringUtils.isNotNull(role.getRoleId()) && role.isAdmin()) + { + throw new ServiceException("涓嶅厑璁告搷浣滆秴绾х鐞嗗憳瑙掕壊"); + } + } + + /** + * 鏍¢獙瑙掕壊鏄惁鏈夋暟鎹潈闄 + * + * @param roleIds 瑙掕壊id + */ + @Override + public void checkRoleDataScope(Long... roleIds) + { + if (!SysUser.isAdmin(SecurityUtils.getUserId())) + { + for (Long roleId : roleIds) + { + SysRole role = new SysRole(); + role.setRoleId(roleId); + List roles = SpringUtils.getAopProxy(this).selectRoleList(role); + if (StringUtils.isEmpty(roles)) + { + throw new ServiceException("娌℃湁鏉冮檺璁块棶瑙掕壊鏁版嵁锛"); + } + } + } + } + + /** + * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊浣跨敤鏁伴噺 + * + * @param roleId 瑙掕壊ID + * @return 缁撴灉 + */ + @Override + public int countUserRoleByRoleId(Long roleId) + { + return userRoleMapper.countUserRoleByRoleId(roleId); + } + + /** + * 鏂板淇濆瓨瑙掕壊淇℃伅 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + @Override + @Transactional + public int insertRole(SysRole role) + { + // 鏂板瑙掕壊淇℃伅 + roleMapper.insertRole(role); + return insertRoleMenu(role); + } + + /** + * 淇敼淇濆瓨瑙掕壊淇℃伅 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + @Override + @Transactional + public int updateRole(SysRole role) + { + // 淇敼瑙掕壊淇℃伅 + roleMapper.updateRole(role); + // 鍒犻櫎瑙掕壊涓庤彍鍗曞叧鑱 + roleMenuMapper.deleteRoleMenuByRoleId(role.getRoleId()); + return insertRoleMenu(role); + } + + /** + * 淇敼瑙掕壊鐘舵 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + @Override + public int updateRoleStatus(SysRole role) + { + return roleMapper.updateRole(role); + } + + /** + * 淇敼鏁版嵁鏉冮檺淇℃伅 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + @Override + @Transactional + public int authDataScope(SysRole role) + { + // 淇敼瑙掕壊淇℃伅 + roleMapper.updateRole(role); + // 鍒犻櫎瑙掕壊涓庨儴闂ㄥ叧鑱 + roleDeptMapper.deleteRoleDeptByRoleId(role.getRoleId()); + // 鏂板瑙掕壊鍜岄儴闂ㄤ俊鎭紙鏁版嵁鏉冮檺锛 + return insertRoleDept(role); + } + + /** + * 鏂板瑙掕壊鑿滃崟淇℃伅 + * + * @param role 瑙掕壊瀵硅薄 + */ + public int insertRoleMenu(SysRole role) + { + int rows = 1; + // 鏂板鐢ㄦ埛涓庤鑹茬鐞 + List list = new ArrayList(); + for (Long menuId : role.getMenuIds()) + { + SysRoleMenu rm = new SysRoleMenu(); + rm.setRoleId(role.getRoleId()); + rm.setMenuId(menuId); + list.add(rm); + } + if (list.size() > 0) + { + rows = roleMenuMapper.batchRoleMenu(list); + } + return rows; + } + + /** + * 鏂板瑙掕壊閮ㄩ棬淇℃伅(鏁版嵁鏉冮檺) + * + * @param role 瑙掕壊瀵硅薄 + */ + public int insertRoleDept(SysRole role) + { + int rows = 1; + // 鏂板瑙掕壊涓庨儴闂紙鏁版嵁鏉冮檺锛夌鐞 + List list = new ArrayList(); + for (Long deptId : role.getDeptIds()) + { + SysRoleDept rd = new SysRoleDept(); + rd.setRoleId(role.getRoleId()); + rd.setDeptId(deptId); + list.add(rd); + } + if (list.size() > 0) + { + rows = roleDeptMapper.batchRoleDept(list); + } + return rows; + } + + /** + * 閫氳繃瑙掕壊ID鍒犻櫎瑙掕壊 + * + * @param roleId 瑙掕壊ID + * @return 缁撴灉 + */ + @Override + @Transactional + public int deleteRoleById(Long roleId) + { + // 鍒犻櫎瑙掕壊涓庤彍鍗曞叧鑱 + roleMenuMapper.deleteRoleMenuByRoleId(roleId); + // 鍒犻櫎瑙掕壊涓庨儴闂ㄥ叧鑱 + roleDeptMapper.deleteRoleDeptByRoleId(roleId); + return roleMapper.deleteRoleById(roleId); + } + + /** + * 鎵归噺鍒犻櫎瑙掕壊淇℃伅 + * + * @param roleIds 闇瑕佸垹闄ょ殑瑙掕壊ID + * @return 缁撴灉 + */ + @Override + @Transactional + public int deleteRoleByIds(Long[] roleIds) + { + for (Long roleId : roleIds) + { + checkRoleAllowed(new SysRole(roleId)); + checkRoleDataScope(roleId); + SysRole role = selectRoleById(roleId); + if (countUserRoleByRoleId(roleId) > 0) + { + throw new ServiceException(String.format("%1$s宸插垎閰,涓嶈兘鍒犻櫎", role.getRoleName())); + } + } + // 鍒犻櫎瑙掕壊涓庤彍鍗曞叧鑱 + roleMenuMapper.deleteRoleMenu(roleIds); + // 鍒犻櫎瑙掕壊涓庨儴闂ㄥ叧鑱 + roleDeptMapper.deleteRoleDept(roleIds); + return roleMapper.deleteRoleByIds(roleIds); + } + + /** + * 鍙栨秷鎺堟潈鐢ㄦ埛瑙掕壊 + * + * @param userRole 鐢ㄦ埛鍜岃鑹插叧鑱斾俊鎭 + * @return 缁撴灉 + */ + @Override + public int deleteAuthUser(SysUserRole userRole) + { + return userRoleMapper.deleteUserRoleInfo(userRole); + } + + /** + * 鎵归噺鍙栨秷鎺堟潈鐢ㄦ埛瑙掕壊 + * + * @param roleId 瑙掕壊ID + * @param userIds 闇瑕佸彇娑堟巿鏉冪殑鐢ㄦ埛鏁版嵁ID + * @return 缁撴灉 + */ + @Override + public int deleteAuthUsers(Long roleId, Long[] userIds) + { + return userRoleMapper.deleteUserRoleInfos(roleId, userIds); + } + + /** + * 鎵归噺閫夋嫨鎺堟潈鐢ㄦ埛瑙掕壊 + * + * @param roleId 瑙掕壊ID + * @param userIds 闇瑕佹巿鏉冪殑鐢ㄦ埛鏁版嵁ID + * @return 缁撴灉 + */ + @Override + public int insertAuthUsers(Long roleId, Long[] userIds) + { + // 鏂板鐢ㄦ埛涓庤鑹茬鐞 + List list = new ArrayList(); + for (Long userId : userIds) + { + SysUserRole ur = new SysUserRole(); + ur.setUserId(userId); + ur.setRoleId(roleId); + list.add(ur); + } + return userRoleMapper.batchUserRole(list); + } +} diff --git a/evo-admin/src/main/java/com/evo/system/service/impl/SysStaffDetailServiceImpl.java b/evo-admin/src/main/java/com/evo/system/service/impl/SysStaffDetailServiceImpl.java new file mode 100644 index 0000000..7e5b166 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/service/impl/SysStaffDetailServiceImpl.java @@ -0,0 +1,140 @@ +package com.evo.system.service.impl; + +import java.math.BigDecimal; +import java.util.List; +import com.evo.common.constant.Constants; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.domain.entity.SysDictData; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.restaurant.domain.RzRestaurantStatistics; +import com.evo.restaurant.mapper.RzRestaurantStatisticsMapper; +import com.evo.system.domain.SysStaff; +import com.evo.system.domain.SysStaffDetail; +import com.evo.system.mapper.SysDictDataMapper; +import com.evo.system.mapper.SysStaffDetailMapper; +import com.evo.system.mapper.SysStaffMapper; +import com.evo.system.service.ISysStaffDetailService; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; + +/** + * 鍛樺伐璇︽儏Service涓氬姟灞傚鐞 + * + * @author evo + * @date 2024-11-22 + */ +@Service +public class SysStaffDetailServiceImpl implements ISysStaffDetailService +{ + @Resource + private SysStaffDetailMapper sysStaffDetailMapper; + @Resource + private SysStaffMapper sysStaffMapper; //鍛樺伐淇℃伅 + @Resource + private SysDictDataMapper sysDictDataMapper; //鏁版嵁瀛楀吀 + @Resource + private RzRestaurantStatisticsMapper rzRestaurantStatisticsMapper; //椁愰ギ缁熻 + + /** + * 鏌ヨ鍛樺伐璇︽儏 + * + * @param id 鍛樺伐璇︽儏涓婚敭 + * @return 鍛樺伐璇︽儏 + */ + @Override + public SysStaffDetail selectSysStaffDetailById(Long id) + { + return sysStaffDetailMapper.selectSysStaffDetailById(id); + } + + /** + * 鏌ヨ鍛樺伐璇︽儏鍒楄〃 + * + * @param sysStaffDetail 鍛樺伐璇︽儏 + * @return 鍛樺伐璇︽儏 + */ + @Override + public List selectSysStaffDetailList(SysStaffDetail sysStaffDetail) + { + return sysStaffDetailMapper.selectSysStaffDetailList(sysStaffDetail); + } + + /** + * 淇敼鍛樺伐璇︽儏 + * + * @param sysStaffDetail 鍛樺伐璇︽儏 + * @return 缁撴灉 + */ + @Override + public int updateSysStaffDetail(SysStaffDetail sysStaffDetail) + { + //椁愰ギ + List cy_list = sysDictDataMapper.selectDictDataByType(Constants.SYS_RESTAUTANT); + //鏍规嵁鍛樺伐ID鏌ヨ鍛樺伐淇℃伅 + SysStaff sysStaff = sysStaffMapper.selectSysStaffByUserId(sysStaffDetail.getStaffId()); + //鍒ゆ柇鍛樺伐鐨勪綇瀹垮拰宸ヨ祫绫诲瀷濉啓椁愯ˉ璐圭敤,浣忓锛屾棭锛屽崍锛屾櫄锛2锛3锛3 + if("鏄".equals(sysStaff.getZsFlag())){ + for (SysDictData sysDictData : cy_list) { + if("涓汉鏃╅".equals(sysDictData.getDictLabel())){ + sysStaffDetail.setBreakfastExpend(new BigDecimal(sysDictData.getDictValue())); + } + if("涓汉鍗堥".equals(sysDictData.getDictLabel())){ + sysStaffDetail.setLunchExpend(new BigDecimal(sysDictData.getDictValue())); + } + if("涓汉鏅氶".equals(sysDictData.getDictLabel())){ + sysStaffDetail.setSupperExpend(new BigDecimal(sysDictData.getDictValue())); + } + } + }else { + //闈炰綇瀹匡紝鏈堝伐璧 + if(StringUtils.isNotNull(sysStaffDetail.getBasicSalary())){ + for (SysDictData sysDictData : cy_list) { + if("鏃╅娑堣垂".equals(sysDictData.getDictLabel())){ + sysStaffDetail.setBreakfastExpend(new BigDecimal(sysDictData.getDictValue())); + } + if("涓汉鍗堥".equals(sysDictData.getDictLabel())){ + sysStaffDetail.setLunchExpend(new BigDecimal(sysDictData.getDictValue())); + } + if("涓汉鏅氶".equals(sysDictData.getDictLabel())){ + sysStaffDetail.setSupperExpend(new BigDecimal(sysDictData.getDictValue())); + } + } + }else{ + for (SysDictData sysDictData : cy_list) { + if("鏃╅娑堣垂".equals(sysDictData.getDictLabel())){ + sysStaffDetail.setBreakfastExpend(new BigDecimal(sysDictData.getDictValue())); + } + if("涓汉鍗堥".equals(sysDictData.getDictLabel())){ + sysStaffDetail.setLunchExpend(new BigDecimal(sysDictData.getDictValue())); + } + if("鏅氶娑堣垂".equals(sysDictData.getDictLabel())){ + sysStaffDetail.setSupperExpend(new BigDecimal(sysDictData.getDictValue())); + } + } + } + } + sysStaffDetail.setUpdateTime(DateUtils.getNowDate()); + sysStaffDetail.setUpdateBy(SecurityUtils.getUsername()); + //鏍规嵁鍛樺伐ID鏌ヨ褰撳墠椁愰ギ璇︽儏锛屽弽鍐欎釜浜烘秷璐逛俊鎭 + RzRestaurantStatistics rzRestaurantStatistics = rzRestaurantStatisticsMapper.selectRzRestaurantStatisticsByUserIdAndDate(sysStaff.getUserId(),DateUtils.getNowDate()); + if(StringUtils.isNotNull(rzRestaurantStatistics)){ + rzRestaurantStatistics.setBreakfastExpend(sysStaffDetail.getBreakfastExpend()); + rzRestaurantStatistics.setLunchExpend(sysStaffDetail.getLunchExpend()); + rzRestaurantStatistics.setSupperExpend(sysStaffDetail.getSupperExpend()); + rzRestaurantStatisticsMapper.updateRzRestaurantStatistics(rzRestaurantStatistics); + } + return sysStaffDetailMapper.updateSysStaffDetail(sysStaffDetail); + } + + + public AjaxResult clearAllSubsidy(){ + int i = sysStaffDetailMapper.clearAllSubsidy(); + if(i < 1){ + return AjaxResult.error(); + } + return AjaxResult.success(); + } + +} diff --git a/evo-admin/src/main/java/com/evo/system/service/impl/SysStaffServiceImpl.java b/evo-admin/src/main/java/com/evo/system/service/impl/SysStaffServiceImpl.java new file mode 100644 index 0000000..d60a6ad --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/service/impl/SysStaffServiceImpl.java @@ -0,0 +1,952 @@ +package com.evo.system.service.impl; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import com.evo.attendance.domain.RzAttendance; +import com.evo.attendance.domain.RzAttendanceStatistical; +import com.evo.attendance.mapper.RzAttendanceMapper; +import com.evo.attendance.mapper.RzAttendanceStatisticalMapper; +import com.evo.common.annotation.DataScope; +import com.evo.common.constant.Constants; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.core.domain.entity.SysDept; +import com.evo.common.core.domain.entity.SysDictData; +import com.evo.common.utils.DateUtils; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.bean.BeanUtils; +import com.evo.personnelMatters.domain.RzHoliday; +import com.evo.personnelMatters.domain.RzSubsidy; +import com.evo.personnelMatters.mapper.RzHolidayMapper; +import com.evo.personnelMatters.mapper.RzSubsidyMapper; +import com.evo.restaurant.domain.RzRestaurantStatistics; +import com.evo.restaurant.mapper.RzRestaurantStatisticsMapper; +import com.evo.system.domain.SysStaff; +import com.evo.system.domain.SysStaffDetail; +import com.evo.system.domain.vo.SysStaffVo; +import com.evo.system.mapper.SysDeptMapper; +import com.evo.system.mapper.SysDictDataMapper; +import com.evo.system.mapper.SysStaffDetailMapper; +import com.evo.system.mapper.SysStaffMapper; +import com.evo.system.service.ISysStaffService; +import com.evo.utils.DateUtil; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.WorkbookFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; + +/** + * 鍛樺伐绠$悊Service涓氬姟灞傚鐞 + * + * @author evo + * @date 2024-11-21 + */ +@Service +public class SysStaffServiceImpl implements ISysStaffService +{ + @Resource + private SysStaffMapper sysStaffMapper; + @Resource + private SysStaffDetailMapper sysStaffDetailMapper; //鍛樺伐璇︽儏 + @Resource + private SysDictDataMapper sysDictDataMapper; //鏁版嵁瀛楀吀 + @Resource + private SysDeptMapper deptMapper; //閮ㄩ棬淇℃伅 + @Resource + private RzSubsidyMapper rzSubsidyMapper; //琛ュ姪淇℃伅 + @Resource + private RzAttendanceStatisticalMapper rzAttendanceStatisticalMapper; //鑰冨嫟缁熻 + @Resource + private RzAttendanceMapper rzAttendanceMapper; //鎵撳崱璁板綍 + @Resource + private RzHolidayMapper rzHolidayMapper; //鍋囨湡 + @Resource + private RzRestaurantStatisticsMapper rzRestaurantStatisticsMapper; //椁愰ギ缁熻 + /** + * 鏌ヨ鍛樺伐绠$悊 + * + * @param userId 鍛樺伐绠$悊涓婚敭 + * @return 鍛樺伐绠$悊 + */ + @Override + public SysStaff selectSysStaffByUserId(Long userId) + { + return sysStaffMapper.selectSysStaffByUserId(userId); + } + /** + * 鏌ヨ鍛樺伐绠$悊鍒楄〃 + * + * @param sysStaff 鍛樺伐绠$悊 + * @return 鍛樺伐绠$悊 + */ + @Override + @DataScope(deptAlias = "d") + public List selectSysStaffList(SysStaff sysStaff) + { + List res_list = sysStaffMapper.selectSysStaffList(sysStaff); + for (SysStaff staff : res_list) { + staff.setDeptName(deptMapper.selectDeptById(staff.getDeptId()).getDeptName()); + } + return res_list; + } + /** + * 鏂板鍛樺伐绠$悊 + * + * @param sysStaff 鍛樺伐绠$悊 + * @return 缁撴灉 + */ + @Override + @Transactional + public AjaxResult insertSysStaff(SysStaff sysStaff) + { + //鏍规嵁鐪佷唤璇佸彿鏌ヨ鏄惁宸茬粡褰曞叆 + SysStaff p_staff = sysStaffMapper.queryysStaffByIdCard(sysStaff.getIdCard()); + if(StringUtils.isNotNull(p_staff)){ + return AjaxResult.error("姝や汉褰曞叆杩囷紒锛"); + } + //鍒ゆ柇鏄惁鏄瀵硷紝鏄弽鍐欓儴闂ㄤ俊鎭 + if("鏄".equals(sysStaff.getIsLeader())){ + //鏍规嵁ID鏌ヨ閮ㄩ棬淇℃伅 + SysDept sysDept = deptMapper.selectDeptById(sysStaff.getDeptId()); + sysDept.setPhone(sysStaff.getPhone()); + sysDept.setLeader(sysStaff.getName()); + int i = deptMapper.updateDept(sysDept); + if(i < 1){ + return AjaxResult.error(); + } + } + //鏍规嵁鐪佷唤璇佺‘瀹氭у埆鍜屽勾榫 + Long year = Long.parseLong(sysStaff.getIdCard().substring(6,10)); + Long age = Long.parseLong(new SimpleDateFormat("yyyy").format(new Date())) - year; + sysStaff.setAge(age); + if(Integer.parseInt(sysStaff.getIdCard().substring(16,17)) % 2 == 0){ + sysStaff.setSex("1"); + }else{ + sysStaff.setSex("0"); + } + //鍛樺伐缂栫爜 + sysStaff.setCode(getCodeByCompanyName(sysStaff.getCompanyName())); + sysStaff.setSeniority(0l); + sysStaff.setStatus(Constants.JOB_STATIS_0); + sysStaff.setCreateTime(DateUtils.getNowDate()); + sysStaff.setCreateBy(SecurityUtils.getUsername()); + sysStaff.setDelFlag(Constants.DELETE_FLAG_0); + int i = sysStaffMapper.insertSysStaff(sysStaff); + if(i < 1){ + return AjaxResult.error(); + } + //鍛樺伐璇︽儏 + createStaffDetail(sysStaff); + //鎵撳崱缁熻锛屾墦鍗¤鎯 + createRzAttendance(sysStaff); + createRestaurantStatistics(sysStaff); + + return AjaxResult.success(); + } + /** + * 鍒涘缓鍛樺伐璇︽儏淇℃伅 + * @param sysStaff + */ + private void createStaffDetail(SysStaff sysStaff){ + // 鏍规嵁鍛樺伐ID鏌ヨ鍛樺伐璇︽儏鏄惁瀛樺湪 + SysStaffDetail sysStaffDetail = sysStaffDetailMapper.selectSysStaffDetailByStaffId(sysStaff.getUserId()); + if(StringUtils.isNull(sysStaffDetail)){ + sysStaffDetail = new SysStaffDetail(); + } + //鏌ヨ瀛﹀巻 + List xl_list = sysDictDataMapper.selectDictDataByType(Constants.SYS_LEVEL); + //瀛﹀巻琛ュ姪 + for (SysDictData sysDictData : xl_list) { + if(sysDictData.getDictValue().equals(sysStaff.getLevel())){ + RzSubsidy rzSubsidy = rzSubsidyMapper.selectRzSubsidyByName(sysDictData.getDictLabel()); + if(StringUtils.isNotNull(rzSubsidy)){ + sysStaffDetail.setLevelOfEducationSubsidies(rzSubsidy.getValue()); + } + } + } + //鍚堝悓琛ュ姪 1骞存湡鍚堝悓 + if("1".equals(sysStaff.getContractType())){ + sysStaffDetail.setContractSubsidies(new BigDecimal(Constants.SYS_CONTRACT_0)); + }else if("3".equals(sysStaff.getContractType())){ //3骞存湡鍚堝悓 + sysStaffDetail.setContractSubsidies(new BigDecimal(Constants.SYS_CONTRACT_1)); + }else { + sysStaffDetail.setContractSubsidies(new BigDecimal("0.00")); + } + //绀句繚琛ュ姪 鍒ゆ柇鏄惁鏄柊鍐滃悎 ,鏄ぞ淇濊ˉ鍔400鍏 + if("鏂板啘鍚".equals(sysStaff.getSocialType()) && "鏄".equals(sysStaff.getSocialSubsidy())){ + sysStaffDetail.setSocialSecuritySubsidies(new BigDecimal(Constants.SYS_SOCIAL_SUBSIDIES)); + }else{ + sysStaffDetail.setSocialSecuritySubsidies(new BigDecimal("0.00")); + } + if(StringUtils.isNull(sysStaffDetail.getStaffId())){ + sysStaffDetail.setStaffId(sysStaff.getUserId()); + sysStaffDetail.setSenioritySubsidies(new BigDecimal(Constants.SYS_SENIORITY_SUBSIDIES)); + sysStaffDetail.setCreateBy(SecurityUtils.getUsername()); + sysStaffDetail.setCreateTime(DateUtils.getNowDate()); + sysStaffDetail.setDelFlag(Constants.DELETE_FLAG_0); + sysStaffDetailMapper.insertSysStaffDetail(sysStaffDetail); + }else{ + sysStaffDetail.setUpdateBy(SecurityUtils.getUsername()); + sysStaffDetail.setUpdateTime(DateUtils.getNowDate()); + sysStaffDetailMapper.updateSysStaffDetail(sysStaffDetail); + } + } + /** + * 鍒涘缓鎵撳崱鑰冨嫟淇℃伅 + * @param sysStaff + */ + private void createRzAttendance(SysStaff sysStaff){ + //鏍规嵁鍛樺伐ID鏌ヨ褰撴湀鐨勭粺璁′俊鎭粺璁′俊鎭 + RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(sysStaff.getUserId(),DateUtils.getNowDate()); + if(StringUtils.isNotNull(rzAttendanceStatistical)){ + //鍒ゆ柇鍚嶇О鍜岄儴闂ㄦ槸鍚︿竴鏍枫備笉涓鏍锋搷浣滀慨鏀 + if(!rzAttendanceStatistical.getName().equals(sysStaff.getName()) || rzAttendanceStatistical.getDeptId() != sysStaff.getDeptId()){ + //淇敼閮ㄩ棬鍜屽鍚 + rzAttendanceStatistical.setName(sysStaff.getName()); + rzAttendanceStatistical.setDeptId(sysStaff.getDeptId()); + rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical); + //鏌ヨ鑰冨嫟璇︽儏淇敼 + List kq_list = rzAttendanceMapper.queryMonthAttendanceByStaffId(sysStaff.getUserId(),new Date()); + //寰幆淇敼淇℃伅 + for (RzAttendance rzAttendance : kq_list) { + rzAttendance.setDeptId(sysStaff.getDeptId()); + rzAttendance.setName(sysStaff.getName()); + rzAttendanceMapper.updateRzAttendance(rzAttendance); + } + } + return; + } + //鏂板鑰冨嫟缁熻 + rzAttendanceStatistical = new RzAttendanceStatistical(); + rzAttendanceStatistical.setStaffId(sysStaff.getUserId()); + rzAttendanceStatistical.setName(sysStaff.getName()); + rzAttendanceStatistical.setMonth(DateUtils.getNowDate()); + rzAttendanceStatistical.setShouldAttendance(new BigDecimal(currentMonthAttendance()).multiply(new BigDecimal("8.00"))); + rzAttendanceStatistical.setDeptId(sysStaff.getDeptId()); + rzAttendanceStatistical.setDelFlag(Constants.DELETE_FLAG_0); + rzAttendanceStatistical.setCreateBy(SecurityUtils.getUsername()); + rzAttendanceStatistical.setCreateTime(DateUtils.getNowDate()); + rzAttendanceStatisticalMapper.insertRzAttendanceStatistical(rzAttendanceStatistical); + //鏂板鑰冨嫟璇︽儏 + //鑾峰彇褰撴湀澶╂暟 + Calendar calendar = Calendar.getInstance(); + int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + SimpleDateFormat sdfm = new SimpleDateFormat("yyyy-MM"); + SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd"); + RzAttendance rzAttendance = null; + List pa_list = new ArrayList(); + for(int p=1;p<=days;p++){ + rzAttendance = new RzAttendance(); + rzAttendance.setDeptId(sysStaff.getDeptId()); + rzAttendance.setName(sysStaff.getName()); + rzAttendance.setStaffId(sysStaff.getUserId()); + try{ + String rq = sdfm.format(DateUtils.getNowDate()); + if(p < 10){ + rq += "-" + Constants.SEIZE_A_SEAT_0 + p; + }else { + rq += "-" + p; + } + rzAttendance.setAttendanceDate(sdfd.parse(rq)); + }catch (Exception e){ + e.printStackTrace(); + } + rzAttendance.setDelFlag(Constants.DELETE_FLAG_0); + rzAttendance.setCreateTime(DateUtils.getNowDate()); + rzAttendance.setCreateBy(SecurityUtils.getUsername()); + pa_list.add(rzAttendance); + } + rzAttendanceMapper.insertBatchRzAttendance(pa_list); + } + /** + * 鍒涘缓椁愰ギ缁熻 + * @param sysStaff + */ + private void createRestaurantStatistics(SysStaff sysStaff){ + RzRestaurantStatistics rzRestaurantStatistics = rzRestaurantStatisticsMapper.selectRzRestaurantStatisticsByUserIdAndDate(sysStaff.getUserId(),DateUtils.getNowDate()); + if(StringUtils.isNotNull(rzRestaurantStatistics)){ + rzRestaurantStatistics.setCompanyName(sysStaff.getCompanyName()); + rzRestaurantStatistics.setDeptId(sysStaff.getDeptId()); + rzRestaurantStatistics.setName(sysStaff.getName()); + rzRestaurantStatisticsMapper.updateRzRestaurantStatistics(rzRestaurantStatistics); + return; + } + rzRestaurantStatistics = new RzRestaurantStatistics(); + rzRestaurantStatistics.setName(sysStaff.getName()); + rzRestaurantStatistics.setCompanyName(sysStaff.getCompanyName()); + rzRestaurantStatistics.setDeptId(sysStaff.getDeptId()); + rzRestaurantStatistics.setStaffId(sysStaff.getUserId()); + rzRestaurantStatistics.setMonth(DateUtils.getNowDate()); + SysStaffDetail sysStaffDetail = sysStaffDetailMapper.selectSysStaffDetailByStaffId(sysStaff.getUserId()); + if(StringUtils.isNotNull(sysStaffDetail)){ + rzRestaurantStatistics.setBreakfastExpend(sysStaffDetail.getBreakfastExpend()); + rzRestaurantStatistics.setLunchExpend(sysStaffDetail.getLunchExpend()); + rzRestaurantStatistics.setSupperExpend(sysStaffDetail.getSupperExpend()); + } + rzRestaurantStatistics.setDelFlag(Constants.DELETE_FLAG_0); + rzRestaurantStatistics.setCreateBy(SecurityUtils.getUsername()); + rzRestaurantStatistics.setCreateTime(DateUtils.getNowDate()); + rzRestaurantStatisticsMapper.insertRzRestaurantStatistics(rzRestaurantStatistics); + } + /** + * 璁$畻褰撴湀搴斿嚭鍕ゅぉ鏁 + * @return + */ + private Long currentMonthAttendance(){ + //鑾峰彇褰撴湀鐨勫ぉ鏁 + Calendar calendar = Calendar.getInstance(); + int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + SimpleDateFormat sdfm = new SimpleDateFormat("yyyy-MM"); + SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd"); + //鑾峰彇褰撴湀绗竴澶╁拰鏈鍚庝竴澶 + Date startDate = null; + Date endDate = null; + try{ + startDate = sdfd.parse(sdfm.format(DateUtils.getNowDate()) + "-01"); + endDate = sdfd.parse(sdfm.format(DateUtils.getNowDate()) + "-" + days); + }catch (Exception e){ + e.printStackTrace(); + } + //闄ゅ幓鍛ㄦ棩 + days = days - DateUtil.isWeeked(startDate,endDate,1); + //鏌ヨ鍋囨湡锛岃绠楄妭鍋囨棩 + List jq_list = rzHolidayMapper.selectRzHolidayList(null); + for (RzHoliday rzHoliday : jq_list) { + //鍒ゆ柇鍋囨湡鍦ㄦ湰鏈 + if(rzHoliday.getHoliday().getTime() > startDate.getTime() && rzHoliday.getHoliday().getTime() < endDate.getTime()){ + //鍒ゆ柇鏄笂鐝垨浼戞伅 + if("0".equals(rzHoliday.getSpecialFlag())){ + days -= 1; + }else{ + days += 1; + } + } + } + return Long.valueOf(days); + } + /** + * 淇敼鍛樺伐绠$悊 + * + * @param sysStaff 鍛樺伐绠$悊 + * @return 缁撴灉 + */ + @Override + @Transactional + public AjaxResult updateSysStaff(SysStaff sysStaff) + { + //鍒ゆ柇鏄惁鏈夌鑱屾椂闂达紝鏈夊垯涓虹鑱 + if(StringUtils.isNotNull(sysStaff.getQuitDate())){ + //绂昏亴鏃堕棿灏忎簬褰撳墠,璇存槑绂昏亴浜 + if(sysStaff.getQuitDate().getTime() < DateUtils.getNowDate().getTime()){ + sysStaff.setStatus("-1"); + int i = sysStaffMapper.updateSysStaff(sysStaff); + if(i < 1){ + return AjaxResult.error(); + } + return AjaxResult.success(); + } + } + //鍒ゆ柇杞鏃ユ湡 + /*if(StringUtils.isNotNull(sysStaff.getRegularDate())){ + //绂昏亴鏃堕棿灏忎簬褰撳墠,璇存槑绂昏亴浜 + if(sysStaff.getRegularDate().getTime() < DateUtils.getNowDate().getTime()){ + sysStaff.setStatus("1"); + int i = sysStaffMapper.updateSysStaff(sysStaff); + if(i < 1){ + return AjaxResult.error(); + } + } + }*/ + //鏍规嵁鐪佷唤璇佺‘瀹氭у埆鍜屽勾榫 + Long year = Long.parseLong(sysStaff.getIdCard().substring(6,10)); + Long age = Long.parseLong(new SimpleDateFormat("yyyy").format(new Date())) - year; + sysStaff.setAge(age); + if(Integer.parseInt(sysStaff.getIdCard().substring(16,17)) % 2 == 0){ + sysStaff.setSex("1"); + }else{ + sysStaff.setSex("0"); + } + //鏍规嵁鍛樺伐ID鏌ヨ鍘熸潵鐨勬暟鎹俊鎭 + SysStaff old_staff = sysStaffMapper.selectSysStaffByUserId(sysStaff.getUserId()); + //鍒ゆ柇鍛樺伐鏇存崲鍏徃 + if(!old_staff.getCompanyName().equals(sysStaff.getCompanyName())){ + //淇濆瓨鏃у叕鍙告暟鎹瓨妗 + old_staff.setDelFlag(Constants.DELETE_FLAG_1); + old_staff.setUpdateBy(SecurityUtils.getUsername()); + old_staff.setUpdateTime(DateUtils.getNowDate()); + int i = sysStaffMapper.updateSysStaff(old_staff); + if(i < 1){ + return AjaxResult.error(); + } + //澶勭悊鏂板叕鍙告暟鎹 + createNewStaff(sysStaff); + }else { + //鏍规嵁閮ㄩ棬ID鏌ヨ閮ㄩ棬淇℃伅 + SysDept oldDept = deptMapper.selectDeptById(old_staff.getDeptId()); + //鍒ゆ柇鍘熸潵涓洪瀵硷紝鐜板湪涓嶆槸棰嗗鍒欐妸鏃ц亴浣嶉儴闂ㄨ礋璐d汉鍙嶅啓 + if("鏄".equals(old_staff.getIsLeader())){ + oldDept.setPhone(""); + oldDept.setLeader(""); + }else{ + oldDept.setPhone(sysStaff.getPhone()); + oldDept.setLeader(sysStaff.getName()); + } + oldDept.setUpdateTime(DateUtils.getNowDate()); + oldDept.setUpdateBy(SecurityUtils.getUsername()); + int i = deptMapper.updateDeptForLeader(oldDept); + if(i < 1){ + return AjaxResult.error(); + } + sysStaff.setUpdateTime(DateUtils.getNowDate()); + sysStaff.setUpdateBy(SecurityUtils.getUsername()); + i= sysStaffMapper.updateSysStaff(sysStaff); + if(i < 1){ + return AjaxResult.error(); + } + //淇敼鍛樺伐璇︽儏 + createStaffDetail(sysStaff); + //淇敼鑰冨嫟缁熻 + createRzAttendance(sysStaff); + //椁愰ギ缁熻 + createRestaurantStatistics(sysStaff); + } + return AjaxResult.success(); + } + /** + * 鏇存崲鏂板叕鍙哥殑澶勭悊锛屽垱寤烘柊鍛樺伐 + */ + private void createNewStaff(SysStaff sysStaff){ + //鏍规嵁韬唤璇佹煡璇㈠憳宸ユ槸鍚﹀凡缁忓叆鑱岃繃鐜板湪鐨勫叕鍙 + SysStaff param_staff = sysStaffMapper.queryysStaffByIdCardAndDeptId(sysStaff.getIdCard(),sysStaff.getDeptId()); + if(StringUtils.isNotNull(param_staff)){ + param_staff.setDelFlag(Constants.DELETE_FLAG_0); + param_staff.setUpdateBy(SecurityUtils.getUsername()); + param_staff.setUpdateTime(DateUtils.getNowDate()); + sysStaffMapper.updateSysStaff(param_staff); + return; + } + sysStaff.setCode(getCodeByCompanyName(sysStaff.getCompanyName())); + sysStaff.setCreateBy(SecurityUtils.getUsername()); + sysStaff.setCreateTime(DateUtils.getNowDate()); + sysStaff.setDelFlag(Constants.DELETE_FLAG_0); + //娓呴櫎鍘熸潵鐨処D + sysStaff.setUserId(null); + sysStaffMapper.insertSysStaff(sysStaff); + //娣诲姞鍛樺伐璇︽儏 + createStaffDetail(sysStaff); + //淇敼鑰冨嫟缁熻 + createRzAttendance(sysStaff); + //椁愰ギ缁熻 + createRestaurantStatistics(sysStaff); + } + /** + * 鍒犻櫎鍛樺伐绠$悊淇℃伅 + * + * @param userId 鍛樺伐绠$悊涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteSysStaffByUserId(Long userId) + { + SysStaff sysStaff = sysStaffMapper.selectSysStaffByUserId(userId); + //鍒ゆ柇鍛樺伐鏄惁涓洪瀵硷紝鏄弽鍐欓儴闂 + if("鏄".equals(sysStaff.getIsLeader())){ + //鏍规嵁ID鏌ヨ閮ㄩ棬淇℃伅 + SysDept sysDept = deptMapper.selectDeptById(sysStaff.getDeptId()); + sysDept.setPhone(""); + sysDept.setLeader(""); + int i = deptMapper.updateDept(sysDept); + if(i < 1){ + return 0; + } + } + sysStaff.setUpdateTime(DateUtils.getNowDate()); + sysStaff.setUpdateBy(SecurityUtils.getUsername()); + sysStaff.setDelFlag(Constants.DELETE_FLAG_1); + return sysStaffMapper.updateSysStaff(sysStaff); + } + /** + * 鏌ヨ鎵鏈夌殑鍦ㄨ亴鍛樺伐淇℃伅 + * @return + */ + public List selectSysStaffListAll(){ + List res_list = sysStaffMapper.selectSysStaffListAll(); + for (SysStaff sysStaff : res_list) { + sysStaff.setDeptName(deptMapper.selectDeptById(sysStaff.getDeptId()).getDeptName()); + } + return res_list; + } + /** + * 涓婁紶浜旈櫓涓閲戜俊鎭枃浠 + */ + @Override + public AjaxResult uploadAccumulationFund(MultipartFile filePath) { + String originalFilename = filePath.getOriginalFilename(); + //鏍¢獙鏂囦欢鍚庣紑 + String postfix = originalFilename.substring(originalFilename.length() - 3); + String substring = originalFilename.substring(originalFilename.length() - 4); + //鍒ゆ柇鏄惁鏄痻lsx鏂囦欢鎴杧ls鏂囦欢 + if ("xls".equals(postfix) || "xlsx".equals(substring)) { + InputStream is = null; + FileOutputStream fos = null; + BufferedOutputStream bos = null; + try { + is = filePath.getInputStream(); + byte[] bytes = new byte[is.available()]; + is.read(bytes); + File file = new File(com.evo.equipment.constant.Constants.STAFF_FUND_ADDRESS + originalFilename); + fos = new FileOutputStream(file); + bos = new BufferedOutputStream(fos); + bos.write(bytes); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (is != null) { + is.close(); + } + if (bos != null) { + bos.flush(); + bos.close(); + } + if (fos != null) { + fos.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + //鍐欏叆鏁版嵁搴 + writeStaffInformation(originalFilename); + return AjaxResult.success(); + } + return AjaxResult.error(); + } + /** + * 鎶婂叕绉噾鍐欏叆绯荤粺 + * @param originalFilename + * @return + */ + private AjaxResult writeStaffInformation(String originalFilename){ + //鍦ㄦ寚瀹氫綅缃鍙栨枃浠 + Workbook wb = null; + Sheet sheet = null; + try { + File files = new File(com.evo.equipment.constant.Constants.STAFF_FUND_ADDRESS + originalFilename); + if(null == files){ + return AjaxResult.error(); + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); + wb = WorkbookFactory.create(files); + sheet = wb.getSheetAt(0); + //寰楀埌琛屾暟 + int rowNumbers = sheet.getLastRowNum(); + SysStaff sysStaff = null; + SysStaffDetail staffDetail = null; + //瀛樺偍缂寸撼鍏Н閲戜汉鍛樹俊鎭 + List de_list = new ArrayList(); + for(int p=4;p< rowNumbers;p++){ + Row row = sheet.getRow(p); + //韬唤璇佸彿涓虹┖锛屽鐞嗕笅涓鏉℃暟鎹 + if(StringUtils.isEmpty(row.getCell(2).getStringCellValue())){ + continue; + } + //鏍规嵁韬唤璇佸彿鏌ヨ鍛樺伐 + sysStaff = sysStaffMapper.queryysStaffByIdCard(row.getCell(2).getStringCellValue()); + //娌℃湁姝ゅ憳宸ョ户缁笅涓鏉 + if(StringUtils.isNull(sysStaff)){ + continue; + } + staffDetail = sysStaffDetailMapper.selectSysStaffDetailByStaffId(sysStaff.getUserId()); + if(StringUtils.isNotNull(row.getCell(5).getNumericCellValue())){ + BigDecimal big = BigDecimal.valueOf(row.getCell(5).getNumericCellValue()); + if(StringUtils.isNotNull(row.getCell(7).getNumericCellValue())){ + big = big.add(BigDecimal.valueOf(row.getCell(7).getNumericCellValue())); + } + staffDetail.setEndowmentInsurance(big); //鍏昏 + } + if(StringUtils.isNotNull(row.getCell(10).getNumericCellValue())){ + BigDecimal big = BigDecimal.valueOf(row.getCell(10).getNumericCellValue()); + if(StringUtils.isNotNull(row.getCell(12).getNumericCellValue())){ + big = big.add(BigDecimal.valueOf(row.getCell(12).getNumericCellValue())); + } + staffDetail.setUnemploymentInsurance(big); //澶变笟 + } + if(StringUtils.isNotNull(row.getCell(15).getNumericCellValue())){ + BigDecimal big = BigDecimal.valueOf(row.getCell(15).getNumericCellValue()); + if(StringUtils.isNotNull(row.getCell(18).getNumericCellValue())){ + big = big.add(BigDecimal.valueOf(row.getCell(18).getNumericCellValue())); + } + staffDetail.setMedicalInsurance(big); //鍖荤枟 + } + if(StringUtils.isNotNull(row.getCell(25).getNumericCellValue())){ + BigDecimal big = BigDecimal.valueOf(row.getCell(25).getNumericCellValue()); + if(StringUtils.isNotNull(row.getCell(27).getNumericCellValue())){ + big = big.add(BigDecimal.valueOf(row.getCell(27).getNumericCellValue())); + } + staffDetail.setAccumulationFund(big); //鍏Н閲 + } + //鍏徃缂寸撼淇濋櫓鎬诲拰 + if(StringUtils.isNotNull(row.getCell(31).getNumericCellValue())){ + staffDetail.setCountInsurance(BigDecimal.valueOf(row.getCell(31).getNumericCellValue())); + } + sysStaffDetailMapper.updateSysStaffDetail(staffDetail); + de_list.add(staffDetail); + } + //鏌ヨ鍏徃鍛樺伐 + List s_list = sysStaffDetailMapper.selectSysStaffDetailList(null); + //淇敼娌℃湁鍏Н閲戠殑鍛樺伐 + for(SysStaffDetail sysStaffDetail : s_list){ + int flag = 0; //鏍囪瘑浜旈櫓涓閲戠殑鍛樺伐 0锛屼笉瀛樺湪 + for (SysStaffDetail detail : de_list) { + if(sysStaffDetail.getStaffId() == detail.getStaffId()){ + flag = 1; + break; + } + } + if(flag == 0){ + sysStaffDetail.setEndowmentInsurance(new BigDecimal("0.00")); //鍏昏 + sysStaffDetail.setMedicalInsurance(new BigDecimal("0.00")); //鍖荤枟 + sysStaffDetail.setUnemploymentInsurance(new BigDecimal("0.00")); //澶变笟 + sysStaffDetail.setEmploymentInjuryInsurance(new BigDecimal("0.00")); //宸ヤ激 + sysStaffDetail.setMaternityInsurance(new BigDecimal("0.00")); //鐢熻偛 + sysStaffDetail.setAccumulationFund(new BigDecimal("0.00")); //鍏Н閲 + sysStaffDetail.setDeductions(new BigDecimal("0.00")); + sysStaffDetail.setCountInsurance(new BigDecimal("0.00")); + sysStaffDetailMapper.updateSysStaffDetail(sysStaffDetail); + } + } + } catch (Exception e) { + e.printStackTrace(); + }finally { + try{ + if(wb != null){ + wb.close(); + } + }catch (Exception e){ + e.printStackTrace(); + } + } + return AjaxResult.success(); + } + /** + * 鏌ヨ鎵鏈夌殑鍦ㄨ亴鍛樺伐淇℃伅 + * @return + */ + @Override + public List selectSysStaffDetailList(SysStaff sysStaff){ + List res_list = new ArrayList(); + //鏌ヨ鍛樺伐淇℃伅 + List yg_list = sysStaffMapper.selectSysStaffList(sysStaff); + List sub_list = sysDictDataMapper.selectDictDataByType("sys_level"); + List zz_list = sysDictDataMapper.selectDictDataByType("sys_worker_status"); + SysStaffVo sysStaffVo = null; + for (SysStaff staff : yg_list) { + sysStaffVo = new SysStaffVo(); + BeanUtils.copyProperties(staff,sysStaffVo); + //鏍规嵁鍛樺伐淇℃伅鏌ヨ璇︽儏淇℃伅 + SysStaffDetail sysStaffDetail = sysStaffDetailMapper.selectSysStaffDetailByStaffId(staff.getUserId()); + BeanUtils.copyProperties(sysStaffDetail,sysStaffVo); + sysStaffVo.setDeptName(deptMapper.selectDeptById(staff.getDeptId()).getDeptName()); + for (SysDictData dictData : sub_list) { + if(dictData.getDictValue().equals(staff.getLevel())){ + sysStaffVo.setLevel(dictData.getDictLabel()); + } + } + for (SysDictData dictData : zz_list) { + if(dictData.getDictValue().equals(staff.getStatus())){ + sysStaffVo.setStatus(dictData.getDictLabel()); + } + } + res_list.add(sysStaffVo); + } + return res_list; + } + /** + * 瀵煎叆鍛樺伐淇℃伅 + * @param staffList 鐢ㄦ埛鏁版嵁鍒楄〃 + * @return + */ + @Override + @Transactional + public AjaxResult importStaff(List staffList){ + if (StringUtils.isNull(staffList) || staffList.size() == 0){ + return AjaxResult.success(); + } + try{ + //鎶婂鍘嗭紝鎬у埆锛岄儴闂ㄨ浆鍖栦负鐩稿搴擨D + List xl_list = sysDictDataMapper.selectDictDataByType(Constants.SYS_LEVEL); + //鍦ㄨ亴鐘舵 + List zz_list = sysDictDataMapper.selectDictDataByType(Constants.SYS_WORK_STATUS); + //椁愰ギ + List cy_list = sysDictDataMapper.selectDictDataByType(Constants.SYS_RESTAUTANT); + //鍚堝悓骞撮檺 + List ht_list = sysDictDataMapper.selectDictDataByType(Constants.SYS_CONTRACT); + //鎵灞炲叕鍙 + List gs_list = sysDictDataMapper.selectDictDataByType(Constants.SYS_COMPANY); + List dept_list = deptMapper.queryDeptTreeList(); + SysStaff sysStaff = null; + SysStaffDetail sysStaffDetail = null; + for (SysStaffVo Staffvo : staffList){ + //鍒ゆ柇蹇呭~椤规槸鍚︿负绌猴紝涓虹┖鎵ц涓嬩竴鏉℃暟鎹: 韬唤璇佸彿锛屽鍚嶏紝閮ㄩ棬锛屾槸鍚︽湁鍔犵彮璐癸紝鍏ヨ亴鏃ユ湡锛屽鍘嗭紝鎵撳崱,鍚堝悓锛岀ぞ淇 + if(StringUtils.isEmpty(Staffvo.getIdCard()) || StringUtils.isEmpty(Staffvo.getName()) || StringUtils.isEmpty(Staffvo.getDeptName()) + || StringUtils.isEmpty(Staffvo.getIsOvertimePay()) || Staffvo.getEmploymentDate() == null || StringUtils.isEmpty(Staffvo.getLevel()) + || StringUtils.isEmpty(Staffvo.getClockIn()) || StringUtils.isEmpty(Staffvo.getContractType()) || StringUtils.isEmpty(Staffvo.getSocialType()) + || StringUtils.isEmpty(Staffvo.getSocialSubsidy())){ + continue; + } + sysStaff = new SysStaff(); + sysStaffDetail = new SysStaffDetail(); + BeanUtils.copyProperties(Staffvo,sysStaff); + BeanUtils.copyProperties(Staffvo,sysStaffDetail); + // 楠岃瘉鏄惁瀛樺湪杩欎釜鍛樺伐 + SysStaff staff = sysStaffMapper.queryysStaffByIdCard(sysStaff.getIdCard()); + //鍛樺伐瀛樺湪 + if(StringUtils.isNotNull(staff)){ + continue; + } + for (SysDictData sysDictData : gs_list) { + if(sysDictData.getDictLabel().equals(Staffvo.getCompanyName())){ + sysStaff.setCompanyName(sysDictData.getDictValue()); + break; + } + } + //瀛﹀巻瑙f瀽 + for (SysDictData sysDictData : xl_list) { + if(sysDictData.getDictLabel().equals(Staffvo.getLevel())){ + sysStaff.setLevel(sysDictData.getDictValue()); + break; + } + } + // 鍒ゆ柇鍛樺伐缂栫爜鏄惁瀛樺湪锛屼笉瀛樺湪锛岃嚜鍔ㄧ敓鎴 + if(StringUtils.isEmpty(sysStaff.getCode())){ + sysStaff.setCode(getCodeByCompanyName(sysStaff.getCompanyName())); + } + for (SysDept sysDept : dept_list) { + if(sysDept.getDeptName().equals(sysStaff.getDeptName())){ + sysStaff.setDeptId(sysDept.getDeptId()); + break; + } + } + //澶勭悊鍦ㄨ亴鐘舵 + for (SysDictData sysDictData : zz_list) { + if(sysDictData.getDictLabel().equals(Staffvo.getStatus())){ + sysStaff.setStatus(sysDictData.getDictValue()); + break; + } + } + //鍚堝悓骞撮檺 + for (SysDictData sysDictData : ht_list) { + if(sysDictData.getDictLabel().equals(Staffvo.getContractType())){ + sysStaff.setContractType(sysDictData.getDictValue()); + break; + } + } + //璁$畻鎬у埆鍜屽勾榫 + if(StringUtils.isNotEmpty(sysStaff.getIdCard())){ + //鏍规嵁韬唤璇佽В鏋愭у埆鍜屽勾榫 + int year = Integer.parseInt(sysStaff.getIdCard().substring(6,10)); + int age = Integer.parseInt(new SimpleDateFormat("yyyy").format(new Date())) - year; + sysStaff.setAge(Long.parseLong(age+"")); + if(Integer.parseInt(sysStaff.getIdCard().substring(16,17)) % 2 == 0){ + sysStaff.setSex("1"); + }else{ + sysStaff.setSex("0"); + } + } + sysStaff.setCreateTime(DateUtils.getNowDate()); + sysStaff.setCreateBy(SecurityUtils.getUsername()); + sysStaff.setDelFlag(Constants.DELETE_FLAG_0); + int i = sysStaffMapper.insertSysStaff(sysStaff); + if(i < 1){ + return AjaxResult.error(); + } + //鑾峰彇涓夐鏁版嵁 + //鍒ゆ柇鍛樺伐鐨勪綇瀹垮拰宸ヨ祫绫诲瀷濉啓椁愯ˉ璐圭敤,浣忓锛屾棭锛屽崍锛屾櫄锛2锛3锛3 + if("鏄".equals(sysStaff.getZsFlag())){ + for (SysDictData sysDictData : cy_list) { + if("涓汉鏃╅".equals(sysDictData.getDictLabel())){ + sysStaffDetail.setBreakfastExpend(new BigDecimal(sysDictData.getDictValue())); + } + if("涓汉鍗堥".equals(sysDictData.getDictLabel())){ + sysStaffDetail.setLunchExpend(new BigDecimal(sysDictData.getDictValue())); + } + if("涓汉鏅氶".equals(sysDictData.getDictLabel())){ + sysStaffDetail.setSupperExpend(new BigDecimal(sysDictData.getDictValue())); + } + } + }else { + //闈炰綇瀹匡紝鏈堝伐璧 + if(StringUtils.isNotNull(sysStaffDetail.getBasicSalary())){ + for (SysDictData sysDictData : cy_list) { + if("鏃╅娑堣垂".equals(sysDictData.getDictLabel())){ + sysStaffDetail.setBreakfastExpend(new BigDecimal(sysDictData.getDictValue())); + } + if("涓汉鍗堥".equals(sysDictData.getDictLabel())){ + sysStaffDetail.setLunchExpend(new BigDecimal(sysDictData.getDictValue())); + } + if("涓汉鏅氶".equals(sysDictData.getDictLabel())){ + sysStaffDetail.setSupperExpend(new BigDecimal(sysDictData.getDictValue())); + } + } + }else{ + for (SysDictData sysDictData : cy_list) { + if("鏃╅娑堣垂".equals(sysDictData.getDictLabel())){ + sysStaffDetail.setBreakfastExpend(new BigDecimal(sysDictData.getDictValue())); + } + if("涓汉鍗堥".equals(sysDictData.getDictLabel())){ + sysStaffDetail.setLunchExpend(new BigDecimal(sysDictData.getDictValue())); + } + if("鏅氶娑堣垂".equals(sysDictData.getDictLabel())){ + sysStaffDetail.setSupperExpend(new BigDecimal(sysDictData.getDictValue())); + } + } + } + } + sysStaffDetail.setStaffId(sysStaff.getUserId()); + sysStaffDetail.setDelFlag(Constants.DELETE_FLAG_0); + sysStaffDetail.setCreateTime(DateUtils.getNowDate()); + sysStaffDetail.setCreateBy(SecurityUtils.getUsername()); + i = sysStaffDetailMapper.insertSysStaffDetail(sysStaffDetail); + if(i < 1){ + return AjaxResult.error(); + } + createRzAttendance(sysStaff); + //椁愰ギ缁熻 + createRestaurantStatistics(sysStaff); + } + } catch (Exception e){ + e.printStackTrace(); + return AjaxResult.error(); + } + return AjaxResult.success(); + } + /** + * 鏍规嵁鍏徃鍚嶇О寰楀埌鍛樺伐缂栧彿 + * @param companyName + * @return + */ + private String getCodeByCompanyName(String companyName){ + //鏍规嵁鍏徃鍚嶇О鏌ヨ褰撳墠鍏徃涓嬬殑鏈澶х紪鍙 + SysStaff macCode = sysStaffMapper.querySysStaffOfMaxByCompany(companyName); + if(macCode == null){ + return companyName + "0001"; + } + int code = Integer.parseInt(macCode.getCode().replace(companyName,"")) + 1; + if(code < 10){ + return companyName + Constants.SEIZE_A_SEAT_2 + code; + }else if(code < 100){ + return companyName + Constants.SEIZE_A_SEAT_1 + code; + }else if(code < 1000){ + return companyName + Constants.SEIZE_A_SEAT_0 + code; + }else{ + return companyName + code; + } + } + /** + * 姣忔湀1鍙疯嚜鍔ㄧ敓鎴愯冨嫟淇℃伅 + */ + @Override + public void autoCreateAttendanceData(){ + //鑾峰彇鍦ㄨ亴鍛樺伐鏁版嵁 + List params_list = sysStaffMapper.selectSysStaffListAll(); + //寰幆鍦ㄨ亴鍛樺伐鐢熸垚鑰冨嫟缁熻 + for (SysStaff sysStaff : params_list) { + createRzAttendance(sysStaff); + } + } + + /** + * 姣忓ぉ璁$畻杞锛岀鑱屾棩鏈 + */ + @Override + public void autoRegularWorking(){ + //鑾峰彇鍦ㄨ亴鍛樺伐鏁版嵁 + List params_list = sysStaffMapper.selectSysStaffListAll(); + for (SysStaff sysStaff : params_list) { + //鍒ゆ柇鍛樺伐鏄惁绂昏亴 + if(StringUtils.isNotNull(sysStaff.getQuitDate()) && sysStaff.getQuitDate().getTime() < DateUtils.getNowDate().getTime()){ + sysStaff.setStatus("-1"); + sysStaffMapper.updateSysStaff(sysStaff); + return; + } + //鍒ゆ柇杞鏃堕棿锛屾棤杞鏃ユ湡鑷姩璁$畻杞鏃ユ湡(鍏ヨ亴鏃ユ湡鍚庝竴涓湀) + if(StringUtils.isNull(sysStaff.getRegularDate())){ + //鑾峰彇鍏ヨ亴涓涓湀鍚庣殑鏃ユ湡 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(sysStaff.getEmploymentDate()); + calendar.add(Calendar.MONTH,1); + sysStaff.setRegularDate(calendar.getTime()); + } + //鍒ゆ柇杞鏃ユ湡鍜屼粖澶╂椂闂存瘮杈 + if(sysStaff.getRegularDate().getTime() < DateUtils.getNowDate().getTime()){ + sysStaff.setStatus("1"); + } + sysStaffMapper.updateSysStaff(sysStaff); + } + } + + /** + * 鏍规嵁閮ㄩ棬鏌ヨ鍛樺伐淇℃伅 + * @param deptId + * @return + */ + @Override + public List queryysStaffByDeptId(Long deptId){ + //鏍规嵁ID鏌ヨ鎵鏈夊瓙闆 + List d_list = deptMapper.queryDeptsByDeptId(deptId); + List list = new ArrayList(); + for (SysDept sysDept : d_list) { + list.add(sysDept.getDeptId()); + } + return sysStaffMapper.queryysStaffByDeptId(list); + } + + /** + * 鑷姩璁$畻宸ラ緞 + */ + @Override + public void calculationOfSeniority(){ + //鑾峰彇鍦ㄨ亴鍛樺伐鏁版嵁 + List params_list = sysStaffMapper.selectSysStaffListAll(); + //褰撳墠鏃ユ湡鍑忓幓涓涓湀璁$畻宸ラ緞锛岃绠楀伐璧勬瘮瀹為檯宸ラ緞寤跺悗涓涓湀 + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.MONTH, -1); + SimpleDateFormat sdfm = new SimpleDateFormat("yyyy-MM"); + SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd"); + try{ + String str = sdfm.format(calendar.getTime()); + Date date = sdfd.parse(str + "-01"); + for (SysStaff sysStaff : params_list) { + //鑾峰彇鍏ヨ亴鏃ユ湡锛岃绠楀叆鑱屾棩鏈熷埌褰撳墠鏃堕棿宸 + int years = date.getYear() - sysStaff.getEmploymentDate().getYear(); + int months = date.getMonth() - sysStaff.getEmploymentDate().getMonth(); + int days = date.getDate() - sysStaff.getEmploymentDate().getDate(); + //鍒ゆ柇鏈堜唤鍜屾棩鏈 + if (months < 0 || (months == 0 && days < 0)) { + years -= 1; + } + if(years > 0){ + sysStaff.setSeniority(Long.valueOf(years)); + }else{ + sysStaff.setSeniority(0l); + } + sysStaffMapper.updateSysStaff(sysStaff); + } + }catch(Exception e){ + e.printStackTrace(); + } + } +} diff --git a/evo-admin/src/main/java/com/evo/system/service/impl/SysUserOnlineServiceImpl.java b/evo-admin/src/main/java/com/evo/system/service/impl/SysUserOnlineServiceImpl.java new file mode 100644 index 0000000..d51612a --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/service/impl/SysUserOnlineServiceImpl.java @@ -0,0 +1,96 @@ +package com.evo.system.service.impl; + +import org.springframework.stereotype.Service; +import com.evo.common.core.domain.model.LoginUser; +import com.evo.common.utils.StringUtils; +import com.evo.system.domain.SysUserOnline; +import com.evo.system.service.ISysUserOnlineService; + +/** + * 鍦ㄧ嚎鐢ㄦ埛 鏈嶅姟灞傚鐞 + * + * @author evo + */ +@Service +public class SysUserOnlineServiceImpl implements ISysUserOnlineService +{ + /** + * 閫氳繃鐧诲綍鍦板潃鏌ヨ淇℃伅 + * + * @param ipaddr 鐧诲綍鍦板潃 + * @param user 鐢ㄦ埛淇℃伅 + * @return 鍦ㄧ嚎鐢ㄦ埛淇℃伅 + */ + @Override + public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user) + { + if (StringUtils.equals(ipaddr, user.getIpaddr())) + { + return loginUserToUserOnline(user); + } + return null; + } + + /** + * 閫氳繃鐢ㄦ埛鍚嶇О鏌ヨ淇℃伅 + * + * @param userName 鐢ㄦ埛鍚嶇О + * @param user 鐢ㄦ埛淇℃伅 + * @return 鍦ㄧ嚎鐢ㄦ埛淇℃伅 + */ + @Override + public SysUserOnline selectOnlineByUserName(String userName, LoginUser user) + { + if (StringUtils.equals(userName, user.getUsername())) + { + return loginUserToUserOnline(user); + } + return null; + } + + /** + * 閫氳繃鐧诲綍鍦板潃/鐢ㄦ埛鍚嶇О鏌ヨ淇℃伅 + * + * @param ipaddr 鐧诲綍鍦板潃 + * @param userName 鐢ㄦ埛鍚嶇О + * @param user 鐢ㄦ埛淇℃伅 + * @return 鍦ㄧ嚎鐢ㄦ埛淇℃伅 + */ + @Override + public SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user) + { + if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername())) + { + return loginUserToUserOnline(user); + } + return null; + } + + /** + * 璁剧疆鍦ㄧ嚎鐢ㄦ埛淇℃伅 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 鍦ㄧ嚎鐢ㄦ埛 + */ + @Override + public SysUserOnline loginUserToUserOnline(LoginUser user) + { + if (StringUtils.isNull(user) || StringUtils.isNull(user.getUser())) + { + return null; + } + SysUserOnline sysUserOnline = new SysUserOnline(); + sysUserOnline.setTokenId(user.getToken()); + sysUserOnline.setUserName(user.getUsername()); + sysUserOnline.setIpaddr(user.getIpaddr()); + sysUserOnline.setLoginLocation(user.getLoginLocation()); + sysUserOnline.setBrowser(user.getBrowser()); + sysUserOnline.setOs(user.getOs()); + sysUserOnline.setLoginTime(user.getLoginTime()); + if (StringUtils.isNotNull(user.getUser().getDept())) + { + sysUserOnline.setDeptName(user.getUser().getDept().getDeptName()); + } + return sysUserOnline; + } +} diff --git a/evo-admin/src/main/java/com/evo/system/service/impl/SysUserServiceImpl.java b/evo-admin/src/main/java/com/evo/system/service/impl/SysUserServiceImpl.java new file mode 100644 index 0000000..180524f --- /dev/null +++ b/evo-admin/src/main/java/com/evo/system/service/impl/SysUserServiceImpl.java @@ -0,0 +1,484 @@ +package com.evo.system.service.impl; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import javax.annotation.Resource; +import javax.validation.Validator; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import com.evo.common.annotation.DataScope; +import com.evo.common.constant.UserConstants; +import com.evo.common.core.domain.entity.SysRole; +import com.evo.common.core.domain.entity.SysUser; +import com.evo.common.exception.ServiceException; +import com.evo.common.utils.SecurityUtils; +import com.evo.common.utils.StringUtils; +import com.evo.common.utils.bean.BeanValidators; +import com.evo.common.utils.spring.SpringUtils; +import com.evo.system.domain.SysUserRole; +import com.evo.system.mapper.SysRoleMapper; +import com.evo.system.mapper.SysUserMapper; +import com.evo.system.mapper.SysUserRoleMapper; +import com.evo.system.service.ISysDeptService; +import com.evo.system.service.ISysUserService; + +/** + * 鐢ㄦ埛 涓氬姟灞傚鐞 + * + * @author evo + */ +@Service +public class SysUserServiceImpl implements ISysUserService +{ + private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class); + + @Resource + private SysUserMapper userMapper; + + @Resource + private SysRoleMapper roleMapper; + + @Resource + private SysUserRoleMapper userRoleMapper; + + @Resource + private ISysDeptService deptService; + + @Resource + protected Validator validator; + + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鐢ㄦ埛鍒楄〃 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅 + */ + @Override + @DataScope(deptAlias = "d", userAlias = "u") + public List selectUserList(SysUser user) + { + return userMapper.selectUserList(user); + } + + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ宸插垎閰嶇敤鎴疯鑹插垪琛 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅 + */ + @Override + @DataScope(deptAlias = "d", userAlias = "u") + public List selectAllocatedList(SysUser user) + { + return userMapper.selectAllocatedList(user); + } + + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鏈垎閰嶇敤鎴疯鑹插垪琛 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅 + */ + @Override + @DataScope(deptAlias = "d", userAlias = "u") + public List selectUnallocatedList(SysUser user) + { + return userMapper.selectUnallocatedList(user); + } + + /** + * 閫氳繃鐢ㄦ埛鍚嶆煡璇㈢敤鎴 + * + * @param userName 鐢ㄦ埛鍚 + * @return 鐢ㄦ埛瀵硅薄淇℃伅 + */ + @Override + public SysUser selectUserByUserName(String userName) + { + return userMapper.selectUserByUserName(userName); + } + + /** + * 閫氳繃鐢ㄦ埛ID鏌ヨ鐢ㄦ埛 + * + * @param userId 鐢ㄦ埛ID + * @return 鐢ㄦ埛瀵硅薄淇℃伅 + */ + @Override + public SysUser selectUserById(Long userId) + { + return userMapper.selectUserById(userId); + } + + /** + * 鏌ヨ鐢ㄦ埛鎵灞炶鑹茬粍 + * + * @param userName 鐢ㄦ埛鍚 + * @return 缁撴灉 + */ + @Override + public String selectUserRoleGroup(String userName) + { + List list = roleMapper.selectRolesByUserName(userName); + if (CollectionUtils.isEmpty(list)) + { + return StringUtils.EMPTY; + } + return list.stream().map(SysRole::getRoleName).collect(Collectors.joining(",")); + } + + /** + * 鏍¢獙鐢ㄦ埛鍚嶇О鏄惁鍞竴 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + @Override + public boolean checkUserNameUnique(SysUser user) + { + Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); + SysUser info = userMapper.checkUserNameUnique(user.getUserName()); + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 鏍¢獙鎵嬫満鍙风爜鏄惁鍞竴 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return + */ + @Override + public boolean checkPhoneUnique(SysUser user) + { + Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); + SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber()); + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 鏍¢獙email鏄惁鍞竴 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return + */ + @Override + public boolean checkEmailUnique(SysUser user) + { + Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); + SysUser info = userMapper.checkEmailUnique(user.getEmail()); + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 鏍¢獙鐢ㄦ埛鏄惁鍏佽鎿嶄綔 + * + * @param user 鐢ㄦ埛淇℃伅 + */ + @Override + public void checkUserAllowed(SysUser user) + { + if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) + { + throw new ServiceException("涓嶅厑璁告搷浣滆秴绾х鐞嗗憳鐢ㄦ埛"); + } + } + + /** + * 鏍¢獙鐢ㄦ埛鏄惁鏈夋暟鎹潈闄 + * + * @param userId 鐢ㄦ埛id + */ + @Override + public void checkUserDataScope(Long userId) + { + if (!SysUser.isAdmin(SecurityUtils.getUserId())) + { + SysUser user = new SysUser(); + user.setUserId(userId); + List users = SpringUtils.getAopProxy(this).selectUserList(user); + if (StringUtils.isEmpty(users)) + { + throw new ServiceException("娌℃湁鏉冮檺璁块棶鐢ㄦ埛鏁版嵁锛"); + } + } + } + + /** + * 鏂板淇濆瓨鐢ㄦ埛淇℃伅 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + @Override + @Transactional + public int insertUser(SysUser user) + { + // 鏂板鐢ㄦ埛淇℃伅 + int rows = userMapper.insertUser(user); + // 鏂板鐢ㄦ埛涓庤鑹茬鐞 + insertUserRole(user); + return rows; + } + + /** + * 娉ㄥ唽鐢ㄦ埛淇℃伅 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + @Override + public boolean registerUser(SysUser user) + { + return userMapper.insertUser(user) > 0; + } + + /** + * 淇敼淇濆瓨鐢ㄦ埛淇℃伅 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + @Override + @Transactional + public int updateUser(SysUser user) + { + Long userId = user.getUserId(); + // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧鑱 + userRoleMapper.deleteUserRoleByUserId(userId); + // 鏂板鐢ㄦ埛涓庤鑹茬鐞 + insertUserRole(user); + return userMapper.updateUser(user); + } + + /** + * 鐢ㄦ埛鎺堟潈瑙掕壊 + * + * @param userId 鐢ㄦ埛ID + * @param roleIds 瑙掕壊缁 + */ + @Override + @Transactional + public void insertUserAuth(Long userId, Long[] roleIds) + { + userRoleMapper.deleteUserRoleByUserId(userId); + insertUserRole(userId, roleIds); + } + + /** + * 淇敼鐢ㄦ埛鐘舵 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + @Override + public int updateUserStatus(SysUser user) + { + return userMapper.updateUser(user); + } + + /** + * 淇敼鐢ㄦ埛鍩烘湰淇℃伅 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + @Override + public int updateUserProfile(SysUser user) + { + return userMapper.updateUser(user); + } + + /** + * 淇敼鐢ㄦ埛澶村儚 + * + * @param userName 鐢ㄦ埛鍚 + * @param avatar 澶村儚鍦板潃 + * @return 缁撴灉 + */ + @Override + public boolean updateUserAvatar(String userName, String avatar) + { + return userMapper.updateUserAvatar(userName, avatar) > 0; + } + + /** + * 閲嶇疆鐢ㄦ埛瀵嗙爜 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + @Override + public int resetPwd(SysUser user) + { + return userMapper.updateUser(user); + } + + /** + * 閲嶇疆鐢ㄦ埛瀵嗙爜 + * + * @param userName 鐢ㄦ埛鍚 + * @param password 瀵嗙爜 + * @return 缁撴灉 + */ + @Override + public int resetUserPwd(String userName, String password) + { + return userMapper.resetUserPwd(userName, password); + } + + /** + * 鏂板鐢ㄦ埛瑙掕壊淇℃伅 + * + * @param user 鐢ㄦ埛瀵硅薄 + */ + public void insertUserRole(SysUser user) + { + this.insertUserRole(user.getUserId(), user.getRoleIds()); + } + + /** + * 鏂板鐢ㄦ埛瑙掕壊淇℃伅 + * + * @param userId 鐢ㄦ埛ID + * @param roleIds 瑙掕壊缁 + */ + public void insertUserRole(Long userId, Long[] roleIds) + { + if (StringUtils.isNotEmpty(roleIds)) + { + // 鏂板鐢ㄦ埛涓庤鑹茬鐞 + List list = new ArrayList(roleIds.length); + for (Long roleId : roleIds) + { + SysUserRole ur = new SysUserRole(); + ur.setUserId(userId); + ur.setRoleId(roleId); + list.add(ur); + } + userRoleMapper.batchUserRole(list); + } + } + + /** + * 閫氳繃鐢ㄦ埛ID鍒犻櫎鐢ㄦ埛 + * + * @param userId 鐢ㄦ埛ID + * @return 缁撴灉 + */ + @Override + @Transactional + public int deleteUserById(Long userId) + { + // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧鑱 + userRoleMapper.deleteUserRoleByUserId(userId); + return userMapper.deleteUserById(userId); + } + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛淇℃伅 + * + * @param userIds 闇瑕佸垹闄ょ殑鐢ㄦ埛ID + * @return 缁撴灉 + */ + @Override + @Transactional + public int deleteUserByIds(Long[] userIds) + { + for (Long userId : userIds) + { + checkUserAllowed(new SysUser(userId)); + checkUserDataScope(userId); + } + // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧鑱 + userRoleMapper.deleteUserRole(userIds); + return userMapper.deleteUserByIds(userIds); + } + + /** + * 瀵煎叆鐢ㄦ埛鏁版嵁 + * + * @param userList 鐢ㄦ埛鏁版嵁鍒楄〃 + * @param isUpdateSupport 鏄惁鏇存柊鏀寔锛屽鏋滃凡瀛樺湪锛屽垯杩涜鏇存柊鏁版嵁 + * @param operName 鎿嶄綔鐢ㄦ埛 + * @return 缁撴灉 + */ + @Override + public String importUser(List userList, Boolean isUpdateSupport, String operName) + { + if (StringUtils.isNull(userList) || userList.size() == 0) + { + throw new ServiceException("瀵煎叆鐢ㄦ埛鏁版嵁涓嶈兘涓虹┖锛"); + } + int successNum = 0; + int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + for (SysUser user : userList) + { + try + { + // 楠岃瘉鏄惁瀛樺湪杩欎釜鐢ㄦ埛 + SysUser u = userMapper.selectUserByUserName(user.getUserName()); + if (StringUtils.isNull(u)) + { + BeanValidators.validateWithException(validator, user); + deptService.checkDeptDataScope(user.getDeptId()); + user.setCreateBy(operName); + userMapper.insertUser(user); + successNum++; + successMsg.append("
" + successNum + "銆佽处鍙 " + user.getUserName() + " 瀵煎叆鎴愬姛"); + } + else if (isUpdateSupport) + { + BeanValidators.validateWithException(validator, user); + checkUserAllowed(u); + checkUserDataScope(u.getUserId()); + deptService.checkDeptDataScope(user.getDeptId()); + user.setUserId(u.getUserId()); + user.setUpdateBy(operName); + userMapper.updateUser(user); + successNum++; + successMsg.append("
" + successNum + "銆佽处鍙 " + user.getUserName() + " 鏇存柊鎴愬姛"); + } + else + { + failureNum++; + failureMsg.append("
" + failureNum + "銆佽处鍙 " + user.getUserName() + " 宸插瓨鍦"); + } + } + catch (Exception e) + { + failureNum++; + String msg = "
" + failureNum + "銆佽处鍙 " + user.getUserName() + " 瀵煎叆澶辫触锛"; + failureMsg.append(msg + e.getMessage()); + log.error(msg, e); + } + } + if (failureNum > 0) + { + failureMsg.insert(0, "寰堟姳姝夛紝瀵煎叆澶辫触锛佸叡 " + failureNum + " 鏉℃暟鎹牸寮忎笉姝g‘锛岄敊璇涓嬶細"); + throw new ServiceException(failureMsg.toString()); + } + else + { + successMsg.insert(0, "鎭枩鎮紝鏁版嵁宸插叏閮ㄥ鍏ユ垚鍔燂紒鍏 " + successNum + " 鏉★紝鏁版嵁濡備笅锛"); + } + return successMsg.toString(); + } +} diff --git a/evo-admin/src/main/java/com/evo/task/TaskController.java b/evo-admin/src/main/java/com/evo/task/TaskController.java new file mode 100644 index 0000000..318debe --- /dev/null +++ b/evo-admin/src/main/java/com/evo/task/TaskController.java @@ -0,0 +1,59 @@ +package com.evo.task; + +import com.evo.attendance.service.IRzAbnormalDetailService; +import com.evo.restaurant.service.IRzRestaurantStatisticsService; +import com.evo.system.service.ISysStaffService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@Component +public class TaskController { + + @Resource + private ISysStaffService sysStaffService; //鍛樺伐淇℃伅 + @Resource + private IRzRestaurantStatisticsService rzRestaurantStatisticsService; //椁愰ギ缁熻 + @Resource + private IRzAbnormalDetailService abnormalDetailService; //寮傚父鍗 + + /** + * 姣忔湀1鍙 0锛20 鑷姩鐢熸垚鑰冨嫟鏁版嵁 + */ + @Scheduled(cron = "0 20 0 1 * ?") + public void autoCreateAttendanceData(){ + sysStaffService.autoCreateAttendanceData(); + }; + /** + * 姣忔湀1鍙 1锛00 鑷姩鐢熸垚椁愰ギ缁熻淇℃伅 + */ + @Scheduled(cron = "0 0 1 1 * ?") + public void insertRzRestaurantStatistics(){ + rzRestaurantStatisticsService.insertRzRestaurantStatistics(); + } + /** + * 姣忓ぉ 1锛10 璁$畻杞,绂昏亴鏃ユ湡 + */ + @Scheduled(cron = "0 30 1 * * ?") + public void autoRegularWorking(){ + sysStaffService.autoRegularWorking(); + }; + + /** + * 姣忓ぉ23锛00 璁$畻褰撳ぉ鐨勫紓甯 + */ + //@Scheduled(cron = "0 0/30 * * * ?") + @Scheduled(cron = "0 0 23 * * ?") + public void autoCalculaLateness(){ + abnormalDetailService.insertRzAbnormalDetail(); + } + + /** + * 姣忔湀10鍙2鐐硅嚜鍔ㄨ绠楀伐榫 + */ + @Scheduled(cron = "0 0 2 10 * ?") + public void calculationOfSeniority(){ + sysStaffService.calculationOfSeniority(); + } +} diff --git a/evo-admin/src/main/java/com/evo/utils/DateUtil.java b/evo-admin/src/main/java/com/evo/utils/DateUtil.java new file mode 100644 index 0000000..757cf08 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/utils/DateUtil.java @@ -0,0 +1,134 @@ +package com.evo.utils; + +import com.evo.personnelMatters.domain.RzHoliday; +import com.evo.personnelMatters.mapper.RzHolidayMapper; +import org.springframework.stereotype.Component; +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Component +public class DateUtil { + + @Resource + private RzHolidayMapper rzHolidayMapper; //鍋囨湡绠$悊 + + public static DateUtil dateUtil; + + @PostConstruct + public void init(){ + dateUtil = this; + dateUtil.rzHolidayMapper = this.rzHolidayMapper; + } + + /** + * 璁$畻淇╀釜鏃堕棿涔嬮棿鐨勫皬鏃舵暟 + * @param beginTime 璇峰亣寮濮嬫椂闂 + * @param endTime 璇峰亣缁撴潫鏃堕棿 + * @param flag 鍋囨湡绫诲瀷 + * @return + */ + public Long autoLeavehoursForCount(Date beginTime, Date endTime,String flag){ + SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdfh = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //鏍规嵁鏃堕棿璁$畻鏃堕棿宸 ,灏忔椂 + Long xsc = 0l; + try{ + Date b_time = sdfh.parse(sdfd.format(beginTime) +" 08:30:00"); + Date e_time = sdfh.parse(sdfd.format(endTime) +" 17:30:00"); + if(beginTime.before(b_time) && endTime.after(e_time)){ + xsc = (e_time.getTime() - b_time.getTime())/1000/60/60; + }else{ + if(endTime.after(e_time)){ + xsc = (e_time.getTime() - beginTime.getTime())/1000/60/60; + } + if(beginTime.before(b_time)){ + xsc = (endTime.getTime() - b_time.getTime())/1000/60/60; + } + } + }catch (Exception e){ + e.printStackTrace(); + } + //璁$畻澶╂暟 + Long ts = xsc/24; + //鍋囨湡绫诲瀷涓哄瀚侊紝浜у亣锛岄櫔浜у亣璁$畻鍛ㄦ棩鍜岃妭鍋囨棩,鍏朵粬鐨勫亣鏈熼兘涓嶇畻鍛ㄦ棩鍜岃妭鍋囨棩 + if(!"6".equals(flag) && !"7".equals(flag) && !"8".equals(flag)){ + //鍒ゆ柇鏄惁鏈夊懆鏃 ,鏈夊懆鏃ュ噺鍘 + int zr = isWeeked(beginTime,endTime,1); + ts = ts - zr; + //鏌ヨ鑺傚亣鏃, 鍒ゆ柇鏄惁鑺傚亣鏃 + List h_list = rzHolidayMapper.selectRzHolidayList(null); + for (RzHoliday rzHoliday : h_list) { + if(rzHoliday.getHoliday().before(endTime) && rzHoliday.getHoliday().after(beginTime)){ + //鍒ゆ柇鍛ㄦ棩涓婄彮鏃堕棿 + if("1".equals(rzHoliday.getSpecialFlag())){ + ts = ts + 1; + }else{ + ts = ts - 1; + } + } + } + } + //璇峰亣缁撴灉灏忔椂鏁 + Long res = ts * 8; + //灏忔椂浣欐暟 + Long xsys = xsc%24; + //鍒ゆ柇鍓╀綑灏忔椂鏁板ぇ浜4灏忔椂锛屽垯璇峰亣涓轰竴澶 + if(xsys > 4){ + res = res + 8; + }else if(xsys > 0){ + res = res + 4; + } + return res; + } + + /** + * 鍒ゆ柇鏃ユ湡鏄惁鍖呭惈鍛ㄦ棩 + * @param beginTime 寮濮嬫椂闂 + * @param endTime 缁撴潫鏃堕棿 + * @param flag flag:1鏄懆鏃ワ紝flag:7鏄懆鍏 + * @return + */ + public static int isWeeked(Date beginTime,Date endTime,int flag){ + int result = 0; + try { + Calendar cal = Calendar.getInstance(); + cal.setTime(beginTime); + while(cal.getTime().before(endTime)){ + int week_index = cal.get(Calendar.DAY_OF_WEEK); + if(week_index==flag){ + result += 1; + } + cal.add(Calendar.DAY_OF_MONTH,1); + } + } catch (Exception e){ + result = -1; + e.printStackTrace(); + } + return result; + } + + /** + * 鍒ゆ柇鏃ユ湡鏄懆鏃 + * @param date + * @param flag flag:1鏄懆鏃ワ紝flag:7鏄懆鍏 + * @return + */ + public static boolean isSaturday(Date date,int flag){ + try { + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + int week_index = cal.get(Calendar.DAY_OF_WEEK); + if(week_index==flag){ + return true; + } + } catch (Exception e){ + e.printStackTrace(); + } + return false; + } + +} diff --git a/evo-admin/src/main/resources/META-INF/spring-devtools.properties b/evo-admin/src/main/resources/META-INF/spring-devtools.properties new file mode 100644 index 0000000..37e7b58 --- /dev/null +++ b/evo-admin/src/main/resources/META-INF/spring-devtools.properties @@ -0,0 +1 @@ +restart.include.json=/com.alibaba.fastjson2.*.jar \ No newline at end of file diff --git a/evo-admin/src/main/resources/application-druid.yml b/evo-admin/src/main/resources/application-druid.yml new file mode 100644 index 0000000..1bdd017 --- /dev/null +++ b/evo-admin/src/main/resources/application-druid.yml @@ -0,0 +1,63 @@ +# 鏁版嵁婧愰厤缃 +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + druid: + # 涓诲簱鏁版嵁婧 + master: + url: jdbc:mysql://192.168.5.12:3306/evo_cw_new?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: yite + password: hbyt2024 + #username: root + #password: yj.chen@001 + # 浠庡簱鏁版嵁婧 + slave: + # 浠庢暟鎹簮寮鍏/榛樿鍏抽棴 + enabled: false + url: + username: + password: + # 鍒濆杩炴帴鏁 + initialSize: 5 + # 鏈灏忚繛鎺ユ睜鏁伴噺 + minIdle: 10 + # 鏈澶ц繛鎺ユ睜鏁伴噺 + maxActive: 20 + # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂 + maxWait: 60000 + # 閰嶇疆杩炴帴瓒呮椂鏃堕棿 + connectTimeout: 30000 + # 閰嶇疆缃戠粶瓒呮椂鏃堕棿 + socketTimeout: 60000 + # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣 + timeBetweenEvictionRunsMillis: 60000 + # 閰嶇疆涓涓繛鎺ュ湪姹犱腑鏈灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 + minEvictableIdleTimeMillis: 300000 + # 閰嶇疆涓涓繛鎺ュ湪姹犱腑鏈澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 + maxEvictableIdleTimeMillis: 900000 + # 閰嶇疆妫娴嬭繛鎺ユ槸鍚︽湁鏁 + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 璁剧疆鐧藉悕鍗曪紝涓嶅~鍒欏厑璁告墍鏈夎闂 + allow: + url-pattern: /druid/* + # 鎺у埗鍙扮鐞嗙敤鎴峰悕鍜屽瘑鐮 + login-username: evo + login-password: 123456 + filter: + stat: + enabled: true + # 鎱QL璁板綍 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true diff --git a/evo-admin/src/main/resources/application.yml b/evo-admin/src/main/resources/application.yml new file mode 100644 index 0000000..81364e4 --- /dev/null +++ b/evo-admin/src/main/resources/application.yml @@ -0,0 +1,127 @@ +# 椤圭洰鐩稿叧閰嶇疆 +evo: + # 鍚嶇О + name: evo + # 鐗堟湰 + version: 3.8.8 + # 鐗堟潈骞翠唤 + copyrightYear: 2024 + # 鏂囦欢璺緞 绀轰緥锛 Windows閰嶇疆D:/evo/uploadPath锛孡inux閰嶇疆 /home/evo/uploadPath锛 + profile: D:/evo/uploadPath + # 鑾峰彇ip鍦板潃寮鍏 + addressEnabled: false + +# 寮鍙戠幆澧冮厤缃 +server: + # 鏈嶅姟鍣ㄧ殑HTTP绔彛锛岄粯璁や负8080 + port: 8081 + servlet: + # 搴旂敤鐨勮闂矾寰 + context-path: / + tomcat: + # tomcat鐨刄RI缂栫爜 + uri-encoding: UTF-8 + # 杩炴帴鏁版弧鍚庣殑鎺掗槦鏁帮紝榛樿涓100 + accept-count: 1000 + threads: + # tomcat鏈澶х嚎绋嬫暟锛岄粯璁や负200 + max: 800 + # Tomcat鍚姩鍒濆鍖栫殑绾跨▼鏁帮紝榛樿鍊10 + min-spare: 100 + +# 鏃ュ織閰嶇疆 +logging: + level: + com.evo: debug + org.springframework: warn + +# 鐢ㄦ埛閰嶇疆 +user: + password: + # 瀵嗙爜鏈澶ч敊璇鏁 + maxRetryCount: 5 + # 瀵嗙爜閿佸畾鏃堕棿锛堥粯璁10鍒嗛挓锛 + lockTime: 10 + +# Spring閰嶇疆 +spring: + # 璧勬簮淇℃伅 + messages: + # 鍥介檯鍖栬祫婧愭枃浠惰矾寰 + basename: i18n/messages + profiles: + active: druid + # 鏂囦欢涓婁紶 + servlet: + multipart: + # 鍗曚釜鏂囦欢澶у皬 + max-file-size: 20MB + # 璁剧疆鎬讳笂浼犵殑鏂囦欢澶у皬 + max-request-size: 300MB + # 鏈嶅姟妯″潡 + devtools: + restart: + # 鐑儴缃插紑鍏 + enabled: true + # redis 閰嶇疆 + redis: + # 鍦板潃 + host: localhost + # 绔彛锛岄粯璁や负6379 + port: 6379 + # 鏁版嵁搴撶储寮 + database: 0 + # 瀵嗙爜 + password: + # 杩炴帴瓒呮椂鏃堕棿 + timeout: 10s + lettuce: + pool: + # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺 + min-idle: 0 + # 杩炴帴姹犱腑鐨勬渶澶х┖闂茶繛鎺 + max-idle: 8 + # 杩炴帴姹犵殑鏈澶ф暟鎹簱杩炴帴鏁 + max-active: 8 + # #杩炴帴姹犳渶澶ч樆濉炵瓑寰呮椂闂达紙浣跨敤璐熷艰〃绀烘病鏈夐檺鍒讹級 + max-wait: -1ms + +# token閰嶇疆 +token: + # 浠ょ墝鑷畾涔夋爣璇 + header: Authorization + # 浠ょ墝瀵嗛挜 + secret: abcdefghijklmnopqrstuvwxyz + # 浠ょ墝鏈夋晥鏈燂紙榛樿30鍒嗛挓锛 + expireTime: 480 + +# MyBatis閰嶇疆 +mybatis: + # 鎼滅储鎸囧畾鍖呭埆鍚 + typeAliasesPackage: com.evo.**.domain + # 閰嶇疆mapper鐨勬壂鎻忥紝鎵惧埌鎵鏈夌殑mapper.xml鏄犲皠鏂囦欢 + mapperLocations: classpath*:mapper/**/*Mapper.xml + # 鍔犺浇鍏ㄥ眬鐨勯厤缃枃浠 + configLocation: classpath:mybatis/mybatis-config.xml + +# PageHelper鍒嗛〉鎻掍欢 +pagehelper: + helperDialect: mysql + supportMethodsArguments: true + params: count=countSql + +# Swagger閰嶇疆 +swagger: + # 鏄惁寮鍚痵wagger + enabled: true + # 璇锋眰鍓嶇紑 + pathMapping: /dev-api + +# 闃叉XSS鏀诲嚮 +xss: + # 杩囨护寮鍏 + enabled: true + # 鎺掗櫎閾炬帴锛堝涓敤閫楀彿鍒嗛殧锛 + excludes: /system/notice + # 鍖归厤閾炬帴 + urlPatterns: /system/*,/monitor/*,/tool/* diff --git a/evo-admin/src/main/resources/banner.txt b/evo-admin/src/main/resources/banner.txt new file mode 100644 index 0000000..2c9caf8 --- /dev/null +++ b/evo-admin/src/main/resources/banner.txt @@ -0,0 +1,24 @@ +Application Version: ${evo.version} +Spring Boot Version: ${spring-boot.version} +//////////////////////////////////////////////////////////////////// +// _ooOoo_ // +// o8888888o // +// 88" . "88 // +// (| ^_^ |) // +// O\ = /O // +// ____/`---'\____ // +// .' \\| |// `. // +// / \\||| : |||// \ // +// / _||||| -:- |||||- \ // +// | | \\\ - /// | | // +// | \_| ''\---/'' | | // +// \ .-\__ `-` ___/-. / // +// ___`. .' /--.--\ `. . ___ // +// ."" '< `.___\_<|>_/___.' >'"". // +// | | : `- \`.;`\ _ /`;.`/ - ` : | | // +// \ \ `-. \_ __\ /__ _/ .-` / / // +// ========`-.____`-.___\_____/___.-`____.-'======== // +// `=---=' // +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // +// 浣涚淇濅綉 姘镐笉瀹曟満 姘告棤BUG // +//////////////////////////////////////////////////////////////////// diff --git a/evo-admin/src/main/resources/generator.yml b/evo-admin/src/main/resources/generator.yml new file mode 100644 index 0000000..65c1584 --- /dev/null +++ b/evo-admin/src/main/resources/generator.yml @@ -0,0 +1,10 @@ +# 浠g爜鐢熸垚 +gen: + # 浣滆 + author: evo + # 榛樿鐢熸垚鍖呰矾寰 system 闇鏀规垚鑷繁鐨勬ā鍧楀悕绉 濡 system monitor tool + packageName: com.evo.product + # 鑷姩鍘婚櫎琛ㄥ墠缂锛岄粯璁ゆ槸false + autoRemovePre: false + # 琛ㄥ墠缂锛堢敓鎴愮被鍚嶄笉浼氬寘鍚〃鍓嶇紑锛屽涓敤閫楀彿鍒嗛殧锛 + tablePrefix: product_ diff --git a/evo-admin/src/main/resources/i18n/messages.properties b/evo-admin/src/main/resources/i18n/messages.properties new file mode 100644 index 0000000..93de005 --- /dev/null +++ b/evo-admin/src/main/resources/i18n/messages.properties @@ -0,0 +1,38 @@ +#閿欒娑堟伅 +not.null=* 蹇呴』濉啓 +user.jcaptcha.error=楠岃瘉鐮侀敊璇 +user.jcaptcha.expire=楠岃瘉鐮佸凡澶辨晥 +user.not.exists=鐢ㄦ埛涓嶅瓨鍦/瀵嗙爜閿欒 +user.password.not.match=鐢ㄦ埛涓嶅瓨鍦/瀵嗙爜閿欒 +user.password.retry.limit.count=瀵嗙爜杈撳叆閿欒{0}娆 +user.password.retry.limit.exceed=瀵嗙爜杈撳叆閿欒{0}娆★紝甯愭埛閿佸畾{1}鍒嗛挓 +user.password.delete=瀵逛笉璧凤紝鎮ㄧ殑璐﹀彿宸茶鍒犻櫎 +user.blocked=鐢ㄦ埛宸插皝绂侊紝璇疯仈绯荤鐞嗗憳 +role.blocked=瑙掕壊宸插皝绂侊紝璇疯仈绯荤鐞嗗憳 +login.blocked=寰堥仐鎲撅紝璁块棶IP宸茶鍒楀叆绯荤粺榛戝悕鍗 +user.logout.success=閫鍑烘垚鍔 + +length.not.valid=闀垮害蹇呴』鍦▄min}鍒皗max}涓瓧绗︿箣闂 + +user.username.not.valid=* 2鍒20涓眽瀛椼佸瓧姣嶃佹暟瀛楁垨涓嬪垝绾跨粍鎴愶紝涓斿繀椤讳互闈炴暟瀛楀紑澶 +user.password.not.valid=* 5-50涓瓧绗 + +user.email.not.valid=閭鏍煎紡閿欒 +user.mobile.phone.number.not.valid=鎵嬫満鍙锋牸寮忛敊璇 +user.login.success=鐧诲綍鎴愬姛 +user.register.success=娉ㄥ唽鎴愬姛 +user.notfound=璇烽噸鏂扮櫥褰 +user.forcelogout=绠$悊鍛樺己鍒堕鍑猴紝璇烽噸鏂扮櫥褰 +user.unknown.error=鏈煡閿欒锛岃閲嶆柊鐧诲綍 + +##鏂囦欢涓婁紶娑堟伅 +upload.exceed.maxSize=涓婁紶鐨勬枃浠跺ぇ灏忚秴鍑洪檺鍒剁殑鏂囦欢澶у皬锛
鍏佽鐨勬枃浠舵渶澶уぇ灏忔槸锛歿0}MB锛 +upload.filename.exceed.length=涓婁紶鐨勬枃浠跺悕鏈闀縶0}涓瓧绗 + +##鏉冮檺 +no.permission=鎮ㄦ病鏈夋暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄 [{0}] +no.create.permission=鎮ㄦ病鏈夊垱寤烘暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄 [{0}] +no.update.permission=鎮ㄦ病鏈変慨鏀规暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄 [{0}] +no.delete.permission=鎮ㄦ病鏈夊垹闄ゆ暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄 [{0}] +no.export.permission=鎮ㄦ病鏈夊鍑烘暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄 [{0}] +no.view.permission=鎮ㄦ病鏈夋煡鐪嬫暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄 [{0}] diff --git a/evo-admin/src/main/resources/logback.xml b/evo-admin/src/main/resources/logback.xml new file mode 100644 index 0000000..8cb8cc1 --- /dev/null +++ b/evo-admin/src/main/resources/logback.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/sys-info.log + + + + ${log.path}/sys-info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/sys-error.log + + + + ${log.path}/sys-error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + ${log.path}/sys-user.log + + + ${log.path}/sys-user.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + + + + + + + + + + + + + + + + + + + + diff --git a/evo-admin/src/main/resources/mapper/attendance/RzAbnormalDetailMapper.xml b/evo-admin/src/main/resources/mapper/attendance/RzAbnormalDetailMapper.xml new file mode 100644 index 0000000..7031be5 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/attendance/RzAbnormalDetailMapper.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + select id, abnormal_id, name,clock_date,clock_type, abnormal_time, money, remarks, del_flag, create_by, create_time, update_time, update_by from rz_abnormal_detail + + + + + + + + insert into rz_abnormal_detail + + abnormal_id, + name, + clock_date, + clock_type, + abnormal_time, + money, + remarks, + del_flag, + create_by, + create_time, + update_time, + update_by, + + + #{abnormalId}, + #{name}, + #{clockDate}, + #{clockType}, + #{abnormalTime}, + #{money}, + #{remarks}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateTime}, + #{updateBy}, + + + + + update rz_abnormal_detail + + abnormal_id = #{abnormalId}, + name = #{name}, + clock_date = #{clockDate}, + abnormal_time = #{abnormalTime}, + money = #{money}, + remarks = #{remarks}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_time = #{updateTime}, + update_by = #{updateBy}, + + where id = #{id} + + + + + diff --git a/evo-admin/src/main/resources/mapper/attendance/RzAbnormalMapper.xml b/evo-admin/src/main/resources/mapper/attendance/RzAbnormalMapper.xml new file mode 100644 index 0000000..e745787 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/attendance/RzAbnormalMapper.xml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + select id, dept_id, user_id, name, month, number, money, del_flag, create_by, create_time, update_by, update_time from rz_abnormal + + + + + + + + insert into rz_abnormal + + dept_id, + user_id, + name, + month, + number, + money, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{deptId}, + #{userId}, + #{name}, + #{month}, + #{number}, + #{money}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update rz_abnormal + + dept_id = #{deptId}, + user_id = #{userId}, + name = #{name}, + month = #{month}, + number = #{number}, + money = #{money}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + + diff --git a/evo-admin/src/main/resources/mapper/attendance/RzAttendanceDetailMapper.xml b/evo-admin/src/main/resources/mapper/attendance/RzAttendanceDetailMapper.xml new file mode 100644 index 0000000..50f7cf8 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/attendance/RzAttendanceDetailMapper.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + select id, staff_id, name, equipment_code, button_type, date_time, remark, del_flag, create_by, create_time, update_by, update_time from rz_attendance_detail + + + + + + insert into rz_attendance_detail + + staff_id, + name, + equipment_code, + button_type, + date_time, + remark, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{staffId}, + #{name}, + #{equipmentCode}, + #{buttonType}, + #{dateTime}, + #{remark}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update rz_attendance_detail + + staff_id = #{staffId}, + name = #{name}, + equipment_code = #{equipmentCode}, + button_type = #{buttonType}, + date_time = #{dateTime}, + remark = #{remark}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + + + + diff --git a/evo-admin/src/main/resources/mapper/attendance/RzAttendanceMapper.xml b/evo-admin/src/main/resources/mapper/attendance/RzAttendanceMapper.xml new file mode 100644 index 0000000..9112eba --- /dev/null +++ b/evo-admin/src/main/resources/mapper/attendance/RzAttendanceMapper.xml @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, staff_id, name, dept_id, attendance_date, rules, work_start_time,ycs_flag,ycx_flag, work_end_time, work_sum,work_hours,night_number,middle_shift_number,remarks, del_flag, create_by, create_time, update_by, update_time from rz_attendance + + + + + + + + update rz_attendance + + staff_id = #{staffId}, + name = #{name}, + dept_id = #{deptId}, + attendance_date = #{attendanceDate}, + rules = #{rules}, + work_start_time = #{workStartTime}, + work_end_time = #{workEndTime}, + work_sum = #{workSum}, + night_number = #{nightNumber}, + middle_shift_number = #{middleShiftNumber}, + remarks = #{remarks}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + ycs_flag = #{ycsFlag}, + ycx_flag = #{ycxFlag}, + + where id = #{id} + + + + + + + + + + + + + + insert into rz_attendance(staff_id, name, dept_id, attendance_date,del_flag, create_by, create_time,ycs_flag,ycx_flag) + VALUES + + (#{item.staffId}, #{item.name}, #{item.deptId}, #{item.attendanceDate}, #{item.delFlag}, #{item.createBy}, #{item.createTime}, #{item.ycsFlag}, #{item.ycxFlag}) + + + + + diff --git a/evo-admin/src/main/resources/mapper/attendance/RzAttendanceStatisticalMapper.xml b/evo-admin/src/main/resources/mapper/attendance/RzAttendanceStatisticalMapper.xml new file mode 100644 index 0000000..074dae8 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/attendance/RzAttendanceStatisticalMapper.xml @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, staff_id, month, dept_id, name, should_attendance, real_attendance,over_time_hours, essential_attendance, work_overtime_number, absenteeism, late_number, leave_early, less_number, night_number, middle_shift_number, del_flag, create_by, create_time, update_by, update_time from rz_attendance_statistical + + + + + + + + insert into rz_attendance_statistical + + staff_id, + month, + dept_id, + name, + should_attendance, + real_attendance, + essential_attendance, + work_overtime_number, + absenteeism, + late_number, + leave_early, + less_number, + night_number, + middle_shift_number, + del_flag, + create_by, + create_time, + update_by, + update_time, + over_time_hours, + + + #{staffId}, + #{month}, + #{deptId}, + #{name}, + #{shouldAttendance}, + #{realAttendance}, + #{essentialAttendance}, + #{workOvertimeNumber}, + #{absenteeism}, + #{lateNumber}, + #{leaveEarly}, + #{lessNumber}, + #{nightNumber}, + #{middleShiftNumber}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{overTimeHours}, + + + + + update rz_attendance_statistical + + staff_id = #{staffId}, + month = #{month}, + dept_id = #{deptId}, + name = #{name}, + should_attendance = #{shouldAttendance}, + real_attendance = #{realAttendance}, + essential_attendance = #{essentialAttendance}, + work_overtime_number = #{workOvertimeNumber}, + absenteeism = #{absenteeism}, + late_number = #{lateNumber}, + leave_early = #{leaveEarly}, + less_number = #{lessNumber}, + night_number = #{nightNumber}, + middle_shift_number = #{middleShiftNumber}, + del_flag = #{delFlag}, + create_by = #{createBy}, + update_time = #{updateTime}, + over_time_hours = #{overTimeHours}, + + where id = #{id} + + + + + + diff --git a/evo-admin/src/main/resources/mapper/attendance/RzSpecialAttendanceMapper.xml b/evo-admin/src/main/resources/mapper/attendance/RzSpecialAttendanceMapper.xml new file mode 100644 index 0000000..42308a4 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/attendance/RzSpecialAttendanceMapper.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + select id, staff_id, name, dept_id, attendance_date, work_start_time, work_end_time, work_hours, remarks, del_flag, create_by, create_time, update_by, update_time from rz_special_attendance + + + + + + + + insert into rz_special_attendance + + staff_id, + name, + dept_id, + attendance_date, + work_start_time, + work_end_time, + work_hours, + remarks, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{staffId}, + #{name}, + #{deptId}, + #{attendanceDate}, + #{workStartTime}, + #{workEndTime}, + #{workHours}, + #{remarks}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update rz_special_attendance + + staff_id = #{staffId}, + name = #{name}, + dept_id = #{deptId}, + attendance_date = #{attendanceDate}, + work_start_time = #{workStartTime}, + work_end_time = #{workEndTime}, + work_hours = #{workHours}, + remarks = #{remarks}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + + diff --git a/evo-admin/src/main/resources/mapper/attendance/RzSpecialOverTimeMapper.xml b/evo-admin/src/main/resources/mapper/attendance/RzSpecialOverTimeMapper.xml new file mode 100644 index 0000000..9e3d086 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/attendance/RzSpecialOverTimeMapper.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + select id, user_id, dept_id, name, over_date, sick_hours, del_flag, create_by, create_time, update_by, update_time from rz_special_over_time + + + + + + + + insert into rz_special_over_time + + user_id, + dept_id, + name, + over_date, + sick_hours, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{userId}, + #{deptId}, + #{name}, + #{overDate}, + #{sickHours}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update rz_special_over_time + + user_id = #{userId}, + dept_id = #{deptId}, + name = #{name}, + over_date = #{overDate}, + sick_hours = #{sickHours}, + del_flag = #{delFlag}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + + diff --git a/evo-admin/src/main/resources/mapper/equipment/EqButtonMapper.xml b/evo-admin/src/main/resources/mapper/equipment/EqButtonMapper.xml new file mode 100644 index 0000000..5f8fa00 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/equipment/EqButtonMapper.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + select id, num, name, image, del_flag, remarks, create_by, create_time, update_by, update_time from eq_button + + + + + + + + insert into eq_button + + num, + name, + image, + del_flag, + remarks, + create_by, + create_time, + update_by, + update_time, + + + #{num}, + #{name}, + #{image}, + #{delFlag}, + #{remarks}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update eq_button + + num = #{num}, + name = #{name}, + image = #{image}, + del_flag = #{delFlag}, + remarks = #{remarks}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + diff --git a/evo-admin/src/main/resources/mapper/equipment/EqImagesMapper.xml b/evo-admin/src/main/resources/mapper/equipment/EqImagesMapper.xml new file mode 100644 index 0000000..527b7c2 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/equipment/EqImagesMapper.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + select id, user_id, staff_name, image_url,hours,time_clock, del_flag, create_by, create_time, update_by, update_time from eq_images + + + + + + + + insert into eq_images + + user_id, + staff_name, + image_url, + hours, + time_clock, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{userId}, + #{staffName}, + #{imageUrl}, + #{hours}, + #{timeClock}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update eq_images + + user_id = #{userId}, + staff_name = #{staffName}, + image_url = #{imageUrl}, + hours = #{hours}, + time_clock = #{timeClock}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + diff --git a/evo-admin/src/main/resources/mapper/equipment/EqSnDetailMapper.xml b/evo-admin/src/main/resources/mapper/equipment/EqSnDetailMapper.xml new file mode 100644 index 0000000..95ef949 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/equipment/EqSnDetailMapper.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + select id, sn, version_code, version_name, ip, sn_time, type, del_flag, create_time, create_by, update_time, update_by from eq_sn_detail + + + + + + insert into eq_sn_detail + + sn, + version_code, + version_name, + ip, + sn_time, + type, + del_flag, + create_time, + create_by, + + + #{sn}, + #{versionCode}, + #{versionName}, + #{ip}, + #{snTime}, + #{type}, + #{delFlag}, + #{createTime}, + #{createBy}, + + + + + update eq_sn_detail + + sn = #{sn}, + version_code = #{versionCode}, + version_name = #{versionName}, + ip = #{ip}, + sn_time = #{snTime}, + type = #{type}, + del_flag = #{delFlag}, + update_time = #{updateTime}, + update_by = #{updateBy}, + + where id = #{id} + + + + + diff --git a/evo-admin/src/main/resources/mapper/equipment/EqStatusTimeMapper.xml b/evo-admin/src/main/resources/mapper/equipment/EqStatusTimeMapper.xml new file mode 100644 index 0000000..e3946bf --- /dev/null +++ b/evo-admin/src/main/resources/mapper/equipment/EqStatusTimeMapper.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + select id, status, time, remark, del_flag, create_time, create_by, update_time, update_by from eq_status_time + + + + + + + + insert into eq_status_time + + status, + time, + remark, + del_flag, + create_time, + create_by, + update_time, + update_by, + + + #{status}, + #{time}, + #{remark}, + #{delFlag}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + + + + + update eq_status_time + + status = #{status}, + time = #{time}, + remark = #{remark}, + del_flag = #{delFlag}, + update_time = #{updateTime}, + update_by = #{updateBy}, + + where id = #{id} + + + + diff --git a/evo-admin/src/main/resources/mapper/finance/RzSalaryDetailMapper.xml b/evo-admin/src/main/resources/mapper/finance/RzSalaryDetailMapper.xml new file mode 100644 index 0000000..0174ae7 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/finance/RzSalaryDetailMapper.xml @@ -0,0 +1,252 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, staff_id, name, month, wb_flag, dept_id,month_salary, basic_salary, job_salary, daily_wage, hours_salary, overtime_salary, level_subsidies, contract_subsidies, seniority_salary, social_subsidies, full_subsidies, night_subsidies, dinner_subsidies, subsidy_or_bonus, absenteeism_salary, absenteeism_subsidies, meal_fee, deductions, salary, pay_insurance, endowment_insurance, medical_insurance, employment_injury_insurance, maternity_insurance, unemployment_insurance, accumulation_fund, salary_before_tax, total_wages, annual_exemption_amount, special_deduction, taxable_income, tax_rate, slow_down_the_deduction, aggregate_personal_income_tax, aggregate_tax, tax_payable, net_payroll, remarks, del_flag, create_by, create_time, update_by, update_time from rz_salary_detail + + + + + + + + insert into rz_salary_detail + + staff_id, + name, + month, + wb_flag, + dept_id, + month_salary, + basic_salary, + job_salary, + daily_wage, + hours_salary, + overtime_salary, + level_subsidies, + contract_subsidies, + seniority_salary, + social_subsidies, + full_subsidies, + night_subsidies, + dinner_subsidies, + subsidy_or_bonus, + absenteeism_salary, + absenteeism_subsidies, + meal_fee, + deductions, + salary, + pay_insurance, + endowment_insurance, + medical_insurance, + employment_injury_insurance, + maternity_insurance, + unemployment_insurance, + accumulation_fund, + salary_before_tax, + total_wages, + annual_exemption_amount, + special_deduction, + taxable_income, + tax_rate, + slow_down_the_deduction, + aggregate_personal_income_tax, + tax_payable, + net_payroll, + remarks, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{staffId}, + #{name}, + #{month}, + #{wbFlag}, + #{deptId}, + #{monthSalary}, + #{basicSalary}, + #{jobSalary}, + #{dailyWage}, + #{hoursSalary}, + #{overtimeSalary}, + #{levelSubsidies}, + #{contractSubsidies}, + #{senioritySalary}, + #{socialSubsidies}, + #{fullSubsidies}, + #{nightSubsidies}, + #{dinnerSubsidies}, + #{subsidyOrBonus}, + #{absenteeismSalary}, + #{absenteeismSubsidies}, + #{mealFee}, + #{deductions}, + #{salary}, + #{payInsurance}, + #{endowmentInsurance}, + #{medicalInsurance}, + #{employmentInjuryInsurance}, + #{maternityInsurance}, + #{unemploymentInsurance}, + #{accumulationFund}, + #{salaryBeforeTax}, + #{totalWages}, + #{annualExemptionAmount}, + #{specialDeduction}, + #{taxableIncome}, + #{taxRate}, + #{slowDownTheDeduction}, + #{aggregatePersonalIncomeTax}, + #{taxPayable}, + #{netPayroll}, + #{remarks}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update rz_salary_detail + + staff_id = #{staffId}, + name = #{name}, + month = #{month}, + wb_flag = #{wbFlag}, + dept_id = #{deptId}, + month_salary = #{monthSalary}, + basic_salary = #{basicSalary}, + job_salary = #{jobSalary}, + daily_wage = #{dailyWage}, + hours_salary = #{hoursSalary}, + overtime_salary = #{overtimeSalary}, + level_subsidies = #{levelSubsidies}, + contract_subsidies = #{contractSubsidies}, + seniority_salary = #{senioritySalary}, + social_subsidies = #{socialSubsidies}, + full_subsidies = #{fullSubsidies}, + night_subsidies = #{nightSubsidies}, + dinner_subsidies = #{dinnerSubsidies}, + subsidy_or_bonus = #{subsidyOrBonus}, + absenteeism_salary = #{absenteeismSalary}, + absenteeism_subsidies = #{absenteeismSubsidies}, + meal_fee = #{mealFee}, + deductions = #{deductions}, + salary = #{salary}, + pay_insurance = #{payInsurance}, + endowment_insurance = #{endowmentInsurance}, + medical_insurance = #{medicalInsurance}, + employment_injury_insurance = #{employmentInjuryInsurance}, + maternity_insurance = #{maternityInsurance}, + unemployment_insurance = #{unemploymentInsurance}, + accumulation_fund = #{accumulationFund}, + salary_before_tax = #{salaryBeforeTax}, + total_wages = #{totalWages}, + annual_exemption_amount = #{annualExemptionAmount}, + special_deduction = #{specialDeduction}, + taxable_income = #{taxableIncome}, + tax_rate = #{taxRate}, + slow_down_the_deduction = #{slowDownTheDeduction}, + aggregate_personal_income_tax = #{aggregatePersonalIncomeTax}, + tax_payable = #{taxPayable}, + net_payroll = #{netPayroll}, + remarks = #{remarks}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + + + + + + + diff --git a/evo-admin/src/main/resources/mapper/finance/RzSalaryStatisticsMapper.xml b/evo-admin/src/main/resources/mapper/finance/RzSalaryStatisticsMapper.xml new file mode 100644 index 0000000..b2808f1 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/finance/RzSalaryStatisticsMapper.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + select id, month, number, status, remarks, del_flag, create_by, create_time, update_by, update_time from rz_salary_statistics + + + + + + + + insert into rz_salary_statistics + + month, + number, + status, + remarks, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{month}, + #{number}, + #{status}, + #{remarks}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update rz_salary_statistics + + month = #{month}, + number = #{number}, + status = #{status}, + remarks = #{remarks}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + diff --git a/evo-admin/src/main/resources/mapper/generator/GenTableColumnMapper.xml b/evo-admin/src/main/resources/mapper/generator/GenTableColumnMapper.xml new file mode 100644 index 0000000..280f9d3 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/generator/GenTableColumnMapper.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select column_id, table_id, column_name, column_comment, column_type, java_type, java_field, is_pk, is_increment, is_required, is_insert, is_edit, is_list, is_query, query_type, html_type, dict_type, sort, create_by, create_time, update_by, update_time from gen_table_column + + + + + + + + insert into gen_table_column ( + table_id, + column_name, + column_comment, + column_type, + java_type, + java_field, + is_pk, + is_increment, + is_required, + is_insert, + is_edit, + is_list, + is_query, + query_type, + html_type, + dict_type, + sort, + create_by, + create_time + )values( + #{tableId}, + #{columnName}, + #{columnComment}, + #{columnType}, + #{javaType}, + #{javaField}, + #{isPk}, + #{isIncrement}, + #{isRequired}, + #{isInsert}, + #{isEdit}, + #{isList}, + #{isQuery}, + #{queryType}, + #{htmlType}, + #{dictType}, + #{sort}, + #{createBy}, + sysdate() + ) + + + + update gen_table_column + + column_comment = #{columnComment}, + java_type = #{javaType}, + java_field = #{javaField}, + is_insert = #{isInsert}, + is_edit = #{isEdit}, + is_list = #{isList}, + is_query = #{isQuery}, + is_required = #{isRequired}, + query_type = #{queryType}, + html_type = #{htmlType}, + dict_type = #{dictType}, + sort = #{sort}, + update_by = #{updateBy}, + update_time = sysdate() + + where column_id = #{columnId} + + + + delete from gen_table_column where table_id in + + #{tableId} + + + + + delete from gen_table_column where column_id in + + #{item.columnId} + + + + diff --git a/evo-admin/src/main/resources/mapper/generator/GenTableMapper.xml b/evo-admin/src/main/resources/mapper/generator/GenTableMapper.xml new file mode 100644 index 0000000..e33b69c --- /dev/null +++ b/evo-admin/src/main/resources/mapper/generator/GenTableMapper.xml @@ -0,0 +1,210 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select table_id, table_name, table_comment, sub_table_name, sub_table_fk_name, class_name, tpl_category, tpl_web_type, package_name, module_name, business_name, function_name, function_author, gen_type, gen_path, options, create_by, create_time, update_by, update_time, remark from gen_table + + + + + + + + + + + + + + + + + + insert into gen_table ( + table_name, + table_comment, + class_name, + tpl_category, + tpl_web_type, + package_name, + module_name, + business_name, + function_name, + function_author, + gen_type, + gen_path, + remark, + create_by, + create_time + )values( + #{tableName}, + #{tableComment}, + #{className}, + #{tplCategory}, + #{tplWebType}, + #{packageName}, + #{moduleName}, + #{businessName}, + #{functionName}, + #{functionAuthor}, + #{genType}, + #{genPath}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + ${sql} + + + + update gen_table + + table_name = #{tableName}, + table_comment = #{tableComment}, + sub_table_name = #{subTableName}, + sub_table_fk_name = #{subTableFkName}, + class_name = #{className}, + function_author = #{functionAuthor}, + gen_type = #{genType}, + gen_path = #{genPath}, + tpl_category = #{tplCategory}, + tpl_web_type = #{tplWebType}, + package_name = #{packageName}, + module_name = #{moduleName}, + business_name = #{businessName}, + function_name = #{functionName}, + options = #{options}, + update_by = #{updateBy}, + remark = #{remark}, + update_time = sysdate() + + where table_id = #{tableId} + + + + delete from gen_table where table_id in + + #{tableId} + + + + diff --git a/evo-admin/src/main/resources/mapper/personnelMatters/BsOverTimeMapper.xml b/evo-admin/src/main/resources/mapper/personnelMatters/BsOverTimeMapper.xml new file mode 100644 index 0000000..307f453 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/personnelMatters/BsOverTimeMapper.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + update bs_over_time + + work_start = #{workStart}, + work_end = #{workEnd}, + remarks = #{remarks}, + del_flag = #{delFlag}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + diff --git a/evo-admin/src/main/resources/mapper/personnelMatters/EqOverStaffMapper.xml b/evo-admin/src/main/resources/mapper/personnelMatters/EqOverStaffMapper.xml new file mode 100644 index 0000000..5ab128a --- /dev/null +++ b/evo-admin/src/main/resources/mapper/personnelMatters/EqOverStaffMapper.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + select id, user_id, staff_name, image_url, del_flag, create_by, create_time, update_by, update_time from eq_over_staff + + + + + + + + insert into eq_over_staff + + user_id, + staff_name, + image_url, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{userId}, + #{staffName}, + #{imageUrl}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update eq_over_staff + + user_id = #{userId}, + staff_name = #{staffName}, + image_url = #{imageUrl}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + + diff --git a/evo-admin/src/main/resources/mapper/personnelMatters/RzBusinessTripDetailMapper.xml b/evo-admin/src/main/resources/mapper/personnelMatters/RzBusinessTripDetailMapper.xml new file mode 100644 index 0000000..c5864ed --- /dev/null +++ b/evo-admin/src/main/resources/mapper/personnelMatters/RzBusinessTripDetailMapper.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + select id, trip_id, name, trip_start_time, trip_end_time, trip_day,over_days, remark, del_flag, create_time, create_by, update_time, update_by from rz_business_trip_detail + + + + + + + + insert into rz_business_trip_detail + + trip_id, + name, + trip_start_time, + trip_end_time, + trip_day, + over_days, + remark, + del_flag, + create_time, + create_by, + update_time, + update_by, + + + #{tripId}, + #{name}, + #{tripStartTime}, + #{tripEndTime}, + #{tripDay}, + #{overDays}, + #{remark}, + #{delFlag}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + + + + + update rz_business_trip_detail + + trip_id = #{tripId}, + name = #{name}, + trip_start_time = #{tripStartTime}, + trip_end_time = #{tripEndTime}, + trip_day = #{tripDay}, + over_days = #{overDays}, + remark = #{remark}, + del_flag = #{delFlag}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + + where id = #{id} + + + + + + + + + diff --git a/evo-admin/src/main/resources/mapper/personnelMatters/RzBusinessTripMapper.xml b/evo-admin/src/main/resources/mapper/personnelMatters/RzBusinessTripMapper.xml new file mode 100644 index 0000000..e6d1877 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/personnelMatters/RzBusinessTripMapper.xml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + select id, dept_id,user_id, name, trip_date, trip_days,over_days, del_flag, create_by, create_time, update_by, update_time from rz_business_trip + + + + + + + + insert into rz_business_trip + + dept_id, + user_id, + name, + trip_date, + trip_days, + over_days, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{deptId}, + #{userId}, + #{name}, + #{tripDate}, + #{tripDays}, + #{overDays}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update rz_business_trip + + dept_id = #{deptId}, + user_id = #{userId}, + name = #{name}, + trip_date = #{tripDate}, + trip_days = #{tripDays}, + over_days = #{overDays}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + + + diff --git a/evo-admin/src/main/resources/mapper/personnelMatters/RzHolidayMapper.xml b/evo-admin/src/main/resources/mapper/personnelMatters/RzHolidayMapper.xml new file mode 100644 index 0000000..d7b8961 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/personnelMatters/RzHolidayMapper.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + select id, holiday, remarks,special_flag,del_flag, create_by, create_time, update_by, update_time from bs_holidays + + + + + + + + insert into bs_holidays + + holiday, + remarks, + special_flag, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{holiday}, + #{remarks}, + #{specialFlag}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update bs_holidays + + holiday = #{holiday}, + remarks = #{remarks}, + special_flag = #{specialFlag}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + diff --git a/evo-admin/src/main/resources/mapper/personnelMatters/RzInterviewerMapper.xml b/evo-admin/src/main/resources/mapper/personnelMatters/RzInterviewerMapper.xml new file mode 100644 index 0000000..6b9decf --- /dev/null +++ b/evo-admin/src/main/resources/mapper/personnelMatters/RzInterviewerMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + select id, name, phone, post, content, address, interview_date, yt_flag, remarks, del_flag, create_by, create_time, update_by, update_time from rz_interviewer + + + + + + + + insert into rz_interviewer + + name, + phone, + post, + content, + address, + interview_date, + yt_flag, + remarks, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{name}, + #{phone}, + #{post}, + #{content}, + #{address}, + #{interviewDate}, + #{ytFlag}, + #{remarks}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update rz_interviewer + + name = #{name}, + phone = #{phone}, + post = #{post}, + content = #{content}, + address = #{address}, + interview_date = #{interviewDate}, + yt_flag = #{ytFlag}, + remarks = #{remarks}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + diff --git a/evo-admin/src/main/resources/mapper/personnelMatters/RzLeaveDetailMapper.xml b/evo-admin/src/main/resources/mapper/personnelMatters/RzLeaveDetailMapper.xml new file mode 100644 index 0000000..1ef9808 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/personnelMatters/RzLeaveDetailMapper.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + select id, leave_id,name,type, leave_start_time, leave_end_time, leave_hour, remarks, create_time, create_by, update_time, update_by, del_flag from rz_leave_detail + + + + + + + + insert into rz_leave_detail + + leave_id, + name, + type, + leave_start_time, + leave_end_time, + leave_hour, + remarks, + create_time, + create_by, + update_time, + update_by, + del_flag, + + + #{leaveId}, + #{name}, + #{type}, + #{leaveStartTime}, + #{leaveEndTime}, + #{leaveHour}, + #{remarks}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{delFlag}, + + + + + update rz_leave_detail + + name = #{name}, + type = #{type}, + leave_start_time = #{leaveStartTime}, + leave_end_time = #{leaveEndTime}, + leave_hour = #{leaveHour}, + remarks = #{remarks}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + leave_id = #{leaveId}, + del_flag = #{delFlag}, + + where id = #{id} + + + + + + + diff --git a/evo-admin/src/main/resources/mapper/personnelMatters/RzLeaveMapper.xml b/evo-admin/src/main/resources/mapper/personnelMatters/RzLeaveMapper.xml new file mode 100644 index 0000000..570c77f --- /dev/null +++ b/evo-admin/src/main/resources/mapper/personnelMatters/RzLeaveMapper.xml @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, user_id, dept_id, name, leave_date, sick_hours, absence_hours, compensatory_hours, marriage_hours, annual_hours, maternity_hours, paternity_hours, funeral_hours, work_hours, del_flag, create_by, create_time, update_by, update_time from rz_leave d + + + + + + + + insert into rz_leave + + user_id, + dept_id, + name, + leave_date, + sick_hours, + absence_hours, + compensatory_hours, + marriage_hours, + annual_hours, + maternity_hours, + paternity_hours, + funeral_hours, + work_hours, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{userId}, + #{deptId}, + #{name}, + #{leaveDate}, + #{sickHours}, + #{absenceHours}, + #{compensatoryHours}, + #{marriageHours}, + #{annualHours}, + #{maternityHours}, + #{paternityHours}, + #{funeralHours}, + #{workHours}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update rz_leave + + user_id = #{userId}, + dept_id = #{deptId}, + name = #{name}, + leave_date = #{leaveDate}, + sick_hours = #{sickHours}, + absence_hours = #{absenceHours}, + compensatory_hours = #{compensatoryHours}, + marriage_hours = #{marriageHours}, + annual_hours = #{annualHours}, + maternity_hours = #{maternityHours}, + paternity_hours = #{paternityHours}, + funeral_hours = #{funeralHours}, + work_hours = #{workHours}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + + diff --git a/evo-admin/src/main/resources/mapper/personnelMatters/RzOverTimeDetailMapper.xml b/evo-admin/src/main/resources/mapper/personnelMatters/RzOverTimeDetailMapper.xml new file mode 100644 index 0000000..30e3308 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/personnelMatters/RzOverTimeDetailMapper.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + select id, over_time_id, name, over_time_start, over_time_end, over_time_hours, remark, del_flag, create_time, create_by, update_time, update_by from rz_over_time_detail + + + + + + + + insert into rz_over_time_detail + + over_time_id, + name, + over_time_start, + over_time_end, + over_time_hours, + remark, + del_flag, + create_time, + create_by, + update_time, + update_by, + + + #{overTimeId}, + #{name}, + #{overTimeStart}, + #{overTimeEnd}, + #{overTimeHours}, + #{remark}, + #{delFlag}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + + + + + update rz_over_time_detail + + over_time_id = #{overTimeId}, + name = #{name}, + over_time_start = #{overTimeStart}, + over_time_end = #{overTimeEnd}, + over_time_hours = #{overTimeHours}, + remark = #{remark}, + del_flag = #{delFlag}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + + where id = #{id} + + + + + + + diff --git a/evo-admin/src/main/resources/mapper/personnelMatters/RzOverTimeMapper.xml b/evo-admin/src/main/resources/mapper/personnelMatters/RzOverTimeMapper.xml new file mode 100644 index 0000000..ce0dcc4 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/personnelMatters/RzOverTimeMapper.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + select id, dept_id,user_id, name, over_time_month, over_hours, del_flag, create_by, create_time, update_by, update_time from rz_over_time + + + + + + + + insert into rz_over_time + + dept_id, + user_id, + name, + over_time_month, + over_hours, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{deptId}, + #{userId}, + #{name}, + #{overTimeMonth}, + #{overHours}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update rz_over_time + + dept_id = #{deptId}, + user_id = #{userId}, + name = #{name}, + over_time_month = #{overTimeMonth}, + over_hours = #{overHours}, + del_flag = #{delFlag}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + + diff --git a/evo-admin/src/main/resources/mapper/personnelMatters/RzSubsidyMapper.xml b/evo-admin/src/main/resources/mapper/personnelMatters/RzSubsidyMapper.xml new file mode 100644 index 0000000..9f7b73b --- /dev/null +++ b/evo-admin/src/main/resources/mapper/personnelMatters/RzSubsidyMapper.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + select id, name, value, remarks, del_flag, create_by, create_time, update_by, update_time from bs_level_subsidy + + + + + + + + insert into bs_level_subsidy + + name, + value, + remarks, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{name}, + #{value}, + #{remarks}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update bs_level_subsidy + + name = #{name}, + value = #{value}, + remarks = #{remarks}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + diff --git a/evo-admin/src/main/resources/mapper/restaurant/RzRestaurantDetailMapper.xml b/evo-admin/src/main/resources/mapper/restaurant/RzRestaurantDetailMapper.xml new file mode 100644 index 0000000..0539f7d --- /dev/null +++ b/evo-admin/src/main/resources/mapper/restaurant/RzRestaurantDetailMapper.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + select id, staff_id,name, date, time, sign, del_flag, create_by, create_time, update_by, update_time from rz_restaurant_detail + + + + + + + + insert into rz_restaurant_detail + + staff_id, + name, + date, + time, + sign, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{staffId}, + #{name}, + #{date}, + #{time}, + #{sign}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + diff --git a/evo-admin/src/main/resources/mapper/restaurant/RzRestaurantImagesMapper.xml b/evo-admin/src/main/resources/mapper/restaurant/RzRestaurantImagesMapper.xml new file mode 100644 index 0000000..501df14 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/restaurant/RzRestaurantImagesMapper.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + select id, name, image_url, del_flag, create_by, create_time, update_by, update_time from rz_restaurant_images + + + + + + + + + + insert into rz_restaurant_images + + name, + image_url, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{name}, + #{imageUrl}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update rz_restaurant_images + + name = #{name}, + image_url = #{imageUrl}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + diff --git a/evo-admin/src/main/resources/mapper/restaurant/RzRestaurantStatisticsMapper.xml b/evo-admin/src/main/resources/mapper/restaurant/RzRestaurantStatisticsMapper.xml new file mode 100644 index 0000000..7297e31 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/restaurant/RzRestaurantStatisticsMapper.xml @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, staff_id, dept_id, name, month, breakfast_expend, breakfast_number, breakfast_pre_sum_expend, breakfast_sum_expend, lunch_expend, lunch_number, lunch_pre_sum_expend, lunch_sum_expend, supper_expend, supper_number, supper_pre_sum_expend, supper_sum_expend, personal_sum_consumption, sum_consumption, remarks, del_flag, create_by, create_time, update_by, update_time from rz_restaurant_statistics + + + + + + + + insert into rz_restaurant_statistics + + staff_id, + dept_id, + name, + month, + breakfast_expend, + breakfast_number, + breakfast_pre_sum_expend, + breakfast_sum_expend, + lunch_expend, + lunch_number, + lunch_pre_sum_expend, + lunch_sum_expend, + supper_expend, + supper_number, + supper_pre_sum_expend, + supper_sum_expend, + personal_sum_consumption, + sum_consumption, + remarks, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{staffId}, + #{deptId}, + #{name}, + #{month}, + #{breakfastExpend}, + #{breakfastNumber}, + #{breakfastPreSumExpend}, + #{breakfastSumExpend}, + #{lunchExpend}, + #{lunchNumber}, + #{lunchPreSumExpend}, + #{lunchSumExpend}, + #{supperExpend}, + #{supperNumber}, + #{supperPreSumExpend}, + #{supperSumExpend}, + #{personalSumConsumption}, + #{sumConsumption}, + #{remarks}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update rz_restaurant_statistics + + staff_id = #{staffId}, + dept_id = #{deptId}, + name = #{name}, + month = #{month}, + breakfast_expend = #{breakfastExpend}, + breakfast_number = #{breakfastNumber}, + breakfast_pre_sum_expend = #{breakfastPreSumExpend}, + breakfast_sum_expend = #{breakfastSumExpend}, + lunch_expend = #{lunchExpend}, + lunch_number = #{lunchNumber}, + lunch_pre_sum_expend = #{lunchPreSumExpend}, + lunch_sum_expend = #{lunchSumExpend}, + supper_expend = #{supperExpend}, + supper_number = #{supperNumber}, + supper_pre_sum_expend = #{supperPreSumExpend}, + supper_sum_expend = #{supperSumExpend}, + personal_sum_consumption = #{personalSumConsumption}, + sum_consumption = #{sumConsumption}, + remarks = #{remarks}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + + + + diff --git a/evo-admin/src/main/resources/mapper/system/SysDeptMapper.xml b/evo-admin/src/main/resources/mapper/system/SysDeptMapper.xml new file mode 100644 index 0000000..d2c5c6a --- /dev/null +++ b/evo-admin/src/main/resources/mapper/system/SysDeptMapper.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.leader, d.phone,d.status, d.del_flag, d.create_by, d.create_time + from sys_dept d + + + + + + + + + + + + + + + + + + + + insert into sys_dept( + dept_id, + parent_id, + dept_name, + ancestors, + leader, + phone, + status, + create_by, + create_time + )values( + #{deptId}, + #{parentId}, + #{deptName}, + #{ancestors}, + #{leader}, + #{phone}, + #{status}, + #{createBy}, + sysdate() + ) + + + + update sys_dept + + parent_id = #{parentId}, + dept_name = #{deptName}, + ancestors = #{ancestors}, + leader = #{leader}, + phone = #{phone}, + status = #{status}, + update_by = #{updateBy}, + update_time = sysdate() + + where dept_id = #{deptId} + + + + update sys_dept set ancestors = + + when #{item.deptId} then #{item.ancestors} + + where dept_id in + + #{item.deptId} + + + + + update sys_dept set status = '0' where dept_id in + + #{deptId} + + + + + update sys_dept set del_flag = '1' where dept_id = #{deptId} + + + + + + + + + + update sys_dept set leader = #{leader},phone = #{phone},update_by = #{updateBy},update_time = sysdate() + where dept_id = #{deptId} + + diff --git a/evo-admin/src/main/resources/mapper/system/SysDictDataMapper.xml b/evo-admin/src/main/resources/mapper/system/SysDictDataMapper.xml new file mode 100644 index 0000000..2c365d0 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/system/SysDictDataMapper.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + select dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark + from sys_dict_data + + + + + + + + + + + + + + delete from sys_dict_data where dict_code = #{dictCode} + + + + delete from sys_dict_data where dict_code in + + #{dictCode} + + + + + update sys_dict_data + + dict_sort = #{dictSort}, + dict_label = #{dictLabel}, + dict_value = #{dictValue}, + dict_type = #{dictType}, + css_class = #{cssClass}, + list_class = #{listClass}, + is_default = #{isDefault}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where dict_code = #{dictCode} + + + + update sys_dict_data set dict_type = #{newDictType} where dict_type = #{oldDictType} + + + + insert into sys_dict_data( + dict_sort, + dict_label, + dict_value, + dict_type, + css_class, + list_class, + is_default, + status, + remark, + create_by, + create_time + )values( + #{dictSort}, + #{dictLabel}, + #{dictValue}, + #{dictType}, + #{cssClass}, + #{listClass}, + #{isDefault}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + diff --git a/evo-admin/src/main/resources/mapper/system/SysDictTypeMapper.xml b/evo-admin/src/main/resources/mapper/system/SysDictTypeMapper.xml new file mode 100644 index 0000000..e9efaf9 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/system/SysDictTypeMapper.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + select dict_id, dict_name, dict_type, status, create_by, create_time, remark + from sys_dict_type + + + + + + + + + + + + + + delete from sys_dict_type where dict_id = #{dictId} + + + + delete from sys_dict_type where dict_id in + + #{dictId} + + + + + update sys_dict_type + + dict_name = #{dictName}, + dict_type = #{dictType}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where dict_id = #{dictId} + + + + insert into sys_dict_type( + dict_name, + dict_type, + status, + remark, + create_by, + create_time + )values( + #{dictName}, + #{dictType}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + diff --git a/evo-admin/src/main/resources/mapper/system/SysLogininforMapper.xml b/evo-admin/src/main/resources/mapper/system/SysLogininforMapper.xml new file mode 100644 index 0000000..def7f6b --- /dev/null +++ b/evo-admin/src/main/resources/mapper/system/SysLogininforMapper.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) + values (#{userName}, #{status}, #{ipaddr}, #{loginLocation}, #{browser}, #{os}, #{msg}, sysdate()) + + + + + + delete from sys_logininfor where info_id in + + #{infoId} + + + + + truncate table sys_logininfor + + + diff --git a/evo-admin/src/main/resources/mapper/system/SysMenuMapper.xml b/evo-admin/src/main/resources/mapper/system/SysMenuMapper.xml new file mode 100644 index 0000000..2a5e7ca --- /dev/null +++ b/evo-admin/src/main/resources/mapper/system/SysMenuMapper.xml @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select menu_id, menu_name, parent_id, order_num, path, component, `query`, route_name, is_frame, is_cache, menu_type, visible, status, ifnull(perms,'') as perms, icon, create_time + from sys_menu + + + + + + + + + + + + + + + + + + + + + + + + + + update sys_menu + + menu_name = #{menuName}, + parent_id = #{parentId}, + order_num = #{orderNum}, + path = #{path}, + component = #{component}, + `query` = #{query}, + route_name = #{routeName}, + is_frame = #{isFrame}, + is_cache = #{isCache}, + menu_type = #{menuType}, + visible = #{visible}, + status = #{status}, + perms = #{perms}, + icon = #{icon}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where menu_id = #{menuId} + + + + insert into sys_menu( + menu_id, + parent_id, + menu_name, + order_num, + path, + component, + `query`, + route_name, + is_frame, + is_cache, + menu_type, + visible, + status, + perms, + icon, + remark, + create_by, + create_time + )values( + #{menuId}, + #{parentId}, + #{menuName}, + #{orderNum}, + #{path}, + #{component}, + #{query}, + #{routeName}, + #{isFrame}, + #{isCache}, + #{menuType}, + #{visible}, + #{status}, + #{perms}, + #{icon}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + delete from sys_menu where menu_id = #{menuId} + + + diff --git a/evo-admin/src/main/resources/mapper/system/SysOperLogMapper.xml b/evo-admin/src/main/resources/mapper/system/SysOperLogMapper.xml new file mode 100644 index 0000000..d9f348b --- /dev/null +++ b/evo-admin/src/main/resources/mapper/system/SysOperLogMapper.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + select oper_id, title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, oper_time, cost_time + from sys_oper_log + + + + insert into sys_oper_log(title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, cost_time, oper_time) + values (#{title}, #{businessType}, #{method}, #{requestMethod}, #{operatorType}, #{operName}, #{deptName}, #{operUrl}, #{operIp}, #{operLocation}, #{operParam}, #{jsonResult}, #{status}, #{errorMsg}, #{costTime}, sysdate()) + + + + + + delete from sys_oper_log where oper_id in + + #{operId} + + + + + + + truncate table sys_oper_log + + + diff --git a/evo-admin/src/main/resources/mapper/system/SysRoleDeptMapper.xml b/evo-admin/src/main/resources/mapper/system/SysRoleDeptMapper.xml new file mode 100644 index 0000000..7d95070 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/system/SysRoleDeptMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + delete from sys_role_dept where role_id=#{roleId} + + + + + + delete from sys_role_dept where role_id in + + #{roleId} + + + + + insert into sys_role_dept(role_id, dept_id) values + + (#{item.roleId},#{item.deptId}) + + + + diff --git a/evo-admin/src/main/resources/mapper/system/SysRoleMapper.xml b/evo-admin/src/main/resources/mapper/system/SysRoleMapper.xml new file mode 100644 index 0000000..47d5af8 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/system/SysRoleMapper.xml @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly, + r.status, r.del_flag, r.create_time, r.remark + from sys_role r + left join sys_user_role ur on ur.role_id = r.role_id + left join sys_user u on u.user_id = ur.user_id + left join sys_dept d on u.dept_id = d.dept_id + + + + + + + + + + + + + + + + + + + + insert into sys_role( + role_id, + role_name, + role_key, + role_sort, + data_scope, + menu_check_strictly, + dept_check_strictly, + status, + remark, + create_by, + create_time + )values( + #{roleId}, + #{roleName}, + #{roleKey}, + #{roleSort}, + #{dataScope}, + #{menuCheckStrictly}, + #{deptCheckStrictly}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + update sys_role + + role_name = #{roleName}, + role_key = #{roleKey}, + role_sort = #{roleSort}, + data_scope = #{dataScope}, + menu_check_strictly = #{menuCheckStrictly}, + dept_check_strictly = #{deptCheckStrictly}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where role_id = #{roleId} + + + + update sys_role set del_flag = '1' where role_id = #{roleId} + + + + update sys_role set del_flag = '1' where role_id in + + #{roleId} + + + + diff --git a/evo-admin/src/main/resources/mapper/system/SysRoleMenuMapper.xml b/evo-admin/src/main/resources/mapper/system/SysRoleMenuMapper.xml new file mode 100644 index 0000000..b67b59c --- /dev/null +++ b/evo-admin/src/main/resources/mapper/system/SysRoleMenuMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + delete from sys_role_menu where role_id=#{roleId} + + + + delete from sys_role_menu where role_id in + + #{roleId} + + + + + insert into sys_role_menu(role_id, menu_id) values + + (#{item.roleId},#{item.menuId}) + + + + diff --git a/evo-admin/src/main/resources/mapper/system/SysStaffDetailMapper.xml b/evo-admin/src/main/resources/mapper/system/SysStaffDetailMapper.xml new file mode 100644 index 0000000..d68630f --- /dev/null +++ b/evo-admin/src/main/resources/mapper/system/SysStaffDetailMapper.xml @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, staff_id, basic_salary, jobs_salary,count_insurance, daily_wage, hours_salary, full_frequently_subsidies, middle_subsidies,level_of_education_subsidies, contract_subsidies, seniority_subsidies, social_security_subsidies, night_shift_subsidies, dinner_subsidies, fixed_allowance, other_subsidies, breakfast_expend, lunch_expend, supper_expend, subsidy_deduct_money, deductions, endowment_insurance, medical_insurance, employment_injury_insurance, maternity_insurance, unemployment_insurance, accumulation_fund, children_education, support_the_old, housing_loans, housing_rents, adult_education, treatment_for_serious_disease, special_deduction, total_wages, aggregate_personal_income_tax, remarks, del_flag, create_by, create_time, update_by, update_time from sys_staff_detail + + + + + + + + insert into sys_staff_detail + + staff_id, + basic_salary, + jobs_salary, + daily_wage, + hours_salary, + full_frequently_subsidies, + level_of_education_subsidies, + contract_subsidies, + seniority_subsidies, + social_security_subsidies, + night_shift_subsidies, + dinner_subsidies, + fixed_allowance, + other_subsidies, + breakfast_expend, + lunch_expend, + supper_expend, + subsidy_deduct_money, + deductions, + endowment_insurance, + medical_insurance, + employment_injury_insurance, + maternity_insurance, + unemployment_insurance, + accumulation_fund, + children_education, + support_the_old, + housing_loans, + housing_rents, + adult_education, + treatment_for_serious_disease, + special_deduction, + total_wages, + aggregate_personal_income_tax, + remarks, + del_flag, + create_by, + create_time, + update_by, + update_time, + count_insurance, + middle_subsidies, + + + #{staffId}, + #{basicSalary}, + #{jobsSalary}, + #{dailyWage}, + #{hoursSalary}, + #{fullFrequentlySubsidies}, + #{levelOfEducationSubsidies}, + #{contractSubsidies}, + #{senioritySubsidies}, + #{socialSecuritySubsidies}, + #{nightShiftSubsidies}, + #{dinnerSubsidies}, + #{fixedAllowance}, + #{otherSubsidies}, + #{breakfastExpend}, + #{lunchExpend}, + #{supperExpend}, + #{subsidyDeductMoney}, + #{deductions}, + #{endowmentInsurance}, + #{medicalInsurance}, + #{employmentInjuryInsurance}, + #{maternityInsurance}, + #{unemploymentInsurance}, + #{accumulationFund}, + #{childrenEducation}, + #{supportTheOld}, + #{housingLoans}, + #{housingRents}, + #{adultEducation}, + #{treatmentForSeriousDisease}, + #{specialDeduction}, + #{totalWages}, + #{aggregatePersonalIncomeTax}, + #{remarks}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{countInsurance}, + #{middleSubsidies}, + + + + + update sys_staff_detail + + staff_id = #{staffId}, + basic_salary = #{basicSalary}, + jobs_salary = #{jobsSalary}, + daily_wage = #{dailyWage}, + hours_salary = #{hoursSalary}, + full_frequently_subsidies = #{fullFrequentlySubsidies}, + level_of_education_subsidies = #{levelOfEducationSubsidies}, + contract_subsidies = #{contractSubsidies}, + seniority_subsidies = #{senioritySubsidies}, + social_security_subsidies = #{socialSecuritySubsidies}, + night_shift_subsidies = #{nightShiftSubsidies}, + dinner_subsidies = #{dinnerSubsidies}, + fixed_allowance = #{fixedAllowance}, + other_subsidies = #{otherSubsidies}, + breakfast_expend = #{breakfastExpend}, + lunch_expend = #{lunchExpend}, + supper_expend = #{supperExpend}, + subsidy_deduct_money = #{subsidyDeductMoney}, + deductions = #{deductions}, + endowment_insurance = #{endowmentInsurance}, + medical_insurance = #{medicalInsurance}, + employment_injury_insurance = #{employmentInjuryInsurance}, + maternity_insurance = #{maternityInsurance}, + unemployment_insurance = #{unemploymentInsurance}, + accumulation_fund = #{accumulationFund}, + children_education = #{childrenEducation}, + support_the_old = #{supportTheOld}, + housing_loans = #{housingLoans}, + housing_rents = #{housingRents}, + adult_education = #{adultEducation}, + treatment_for_serious_disease = #{treatmentForSeriousDisease}, + special_deduction = #{specialDeduction}, + total_wages = #{totalWages}, + aggregate_personal_income_tax = #{aggregatePersonalIncomeTax}, + remarks = #{remarks}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + count_insurance = #{countInsurance}, + middle_subsidies = #{middleSubsidies}, + + where id = #{id} + + + + + + update sys_staff_detail set other_subsidies = 0.00,deductions = 0.00 + + diff --git a/evo-admin/src/main/resources/mapper/system/SysStaffMapper.xml b/evo-admin/src/main/resources/mapper/system/SysStaffMapper.xml new file mode 100644 index 0000000..2a083a4 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/system/SysStaffMapper.xml @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select user_id,company_name, dept_id, code, name, id_card,is_leader, sex, age, phone, address, level, major, school, bank_number,social_subsidy, bank, employment_date, experience, worker_term, regular_date, quit_date, contract_start, contract_end, contract_type, social_type, seniority, is_overtime_pay, zs_flag, secrecy, injury, insurance, introducer, clock_in, status, wages_ratio_date, remarks, del_flag, create_by, create_time, update_by, update_time from sys_staff + + + + + + + + insert into sys_staff + + company_name, + dept_id, + code, + name, + id_card, + is_leader, + sex, + age, + phone, + address, + level, + major, + school, + bank_number, + bank, + employment_date, + experience, + worker_term, + regular_date, + quit_date, + contract_start, + contract_end, + contract_type, + social_type, + seniority, + is_overtime_pay, + zs_flag, + secrecy, + injury, + insurance, + introducer, + clock_in, + status, + wages_ratio_date, + remarks, + del_flag, + create_by, + create_time, + update_by, + update_time, + social_subsidy, + + + #{companyName}, + #{deptId}, + #{code}, + #{name}, + #{idCard}, + #{isLeader}, + #{sex}, + #{age}, + #{phone}, + #{address}, + #{level}, + #{major}, + #{school}, + #{bankNumber}, + #{bank}, + #{employmentDate}, + #{experience}, + #{workerTerm}, + #{regularDate}, + #{quitDate}, + #{contractStart}, + #{contractEnd}, + #{contractType}, + #{socialType}, + #{seniority}, + #{isOvertimePay}, + #{zsFlag}, + #{secrecy}, + #{injury}, + #{insurance}, + #{introducer}, + #{clockIn}, + #{status}, + #{wagesRatioDate}, + #{remarks}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{socialSubsidy}, + + + + + update sys_staff + + company_name = #{companyName}, + dept_id = #{deptId}, + code = #{code}, + name = #{name}, + id_card = #{idCard}, + is_leader = #{isLeader}, + sex = #{sex}, + age = #{age}, + phone = #{phone}, + address = #{address}, + level = #{level}, + major = #{major}, + school = #{school}, + bank_number = #{bankNumber}, + bank = #{bank}, + employment_date = #{employmentDate}, + experience = #{experience}, + worker_term = #{workerTerm}, + regular_date = #{regularDate}, + quit_date = #{quitDate}, + contract_start = #{contractStart}, + contract_end = #{contractEnd}, + contract_type = #{contractType}, + social_type = #{socialType}, + seniority = #{seniority}, + is_overtime_pay = #{isOvertimePay}, + zs_flag = #{zsFlag}, + secrecy = #{secrecy}, + injury = #{injury}, + insurance = #{insurance}, + introducer = #{introducer}, + clock_in = #{clockIn}, + status = #{status}, + wages_ratio_date = #{wagesRatioDate}, + remarks = #{remarks}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + social_subsidy = #{socialSubsidy}, + + where user_id = #{userId} + + + + + + + + + + + + + + diff --git a/evo-admin/src/main/resources/mapper/system/SysUserMapper.xml b/evo-admin/src/main/resources/mapper/system/SysUserMapper.xml new file mode 100644 index 0000000..2dffc52 --- /dev/null +++ b/evo-admin/src/main/resources/mapper/system/SysUserMapper.xml @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, + d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.leader, d.status as dept_status, + r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status + from sys_user u + left join sys_dept d on u.dept_id = d.dept_id + left join sys_user_role ur on u.user_id = ur.user_id + left join sys_role r on r.role_id = ur.role_id + + + + + + + + + + + + + + + + + + + + insert into sys_user( + user_id, + dept_id, + user_name, + nick_name, + email, + avatar, + phonenumber, + sex, + password, + status, + create_by, + remark, + create_time + )values( + #{userId}, + #{deptId}, + #{userName}, + #{nickName}, + #{email}, + #{avatar}, + #{phonenumber}, + #{sex}, + #{password}, + #{status}, + #{createBy}, + #{remark}, + sysdate() + ) + + + + update sys_user + + dept_id = #{deptId}, + user_name = #{userName}, + nick_name = #{nickName}, + email = #{email}, + phonenumber = #{phonenumber}, + sex = #{sex}, + avatar = #{avatar}, + password = #{password}, + status = #{status}, + login_ip = #{loginIp}, + login_date = #{loginDate}, + update_by = #{updateBy}, + remark = #{remark}, + update_time = sysdate() + + where user_id = #{userId} + + + + update sys_user set status = #{status} where user_id = #{userId} + + + + update sys_user set avatar = #{avatar} where user_name = #{userName} + + + + update sys_user set password = #{password} where user_name = #{userName} + + + + update sys_user set del_flag = '1' where user_id = #{userId} + + + + update sys_user set del_flag = '1' where user_id in + + #{userId} + + + + diff --git a/evo-admin/src/main/resources/mapper/system/SysUserRoleMapper.xml b/evo-admin/src/main/resources/mapper/system/SysUserRoleMapper.xml new file mode 100644 index 0000000..9ad20da --- /dev/null +++ b/evo-admin/src/main/resources/mapper/system/SysUserRoleMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + delete from sys_user_role where user_id=#{userId} + + + + + + delete from sys_user_role where user_id in + + #{userId} + + + + + insert into sys_user_role(user_id, role_id) values + + (#{item.userId},#{item.roleId}) + + + + + delete from sys_user_role where user_id=#{userId} and role_id=#{roleId} + + + + delete from sys_user_role where role_id=#{roleId} and user_id in + + #{userId} + + + diff --git a/evo-admin/src/main/resources/mybatis/mybatis-config.xml b/evo-admin/src/main/resources/mybatis/mybatis-config.xml new file mode 100644 index 0000000..ac47c03 --- /dev/null +++ b/evo-admin/src/main/resources/mybatis/mybatis-config.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + diff --git a/evo-admin/src/main/resources/vm/java/controller.java.vm b/evo-admin/src/main/resources/vm/java/controller.java.vm new file mode 100644 index 0000000..f9d3970 --- /dev/null +++ b/evo-admin/src/main/resources/vm/java/controller.java.vm @@ -0,0 +1,115 @@ +package ${packageName}.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.enums.BusinessType; +import ${packageName}.domain.${ClassName}; +import ${packageName}.service.I${ClassName}Service; +import com.evo.common.utils.poi.ExcelUtil; +#if($table.crud || $table.sub) +import com.evo.common.core.page.TableDataInfo; +#elseif($table.tree) +#end + +/** + * ${functionName}Controller + * + * @author ${author} + * @date ${datetime} + */ +@RestController +@RequestMapping("/${moduleName}/${businessName}") +public class ${ClassName}Controller extends BaseController +{ + @Autowired + private I${ClassName}Service ${className}Service; + + /** + * 鏌ヨ${functionName}鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('${permissionPrefix}:list')") + @GetMapping("/list") +#if($table.crud || $table.sub) + public TableDataInfo list(${ClassName} ${className}) + { + startPage(); + List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); + return getDataTable(list); + } +#elseif($table.tree) + public AjaxResult list(${ClassName} ${className}) + { + List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); + return success(list); + } +#end + + /** + * 瀵煎嚭${functionName}鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('${permissionPrefix}:export')") + @Log(title = "${functionName}", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, ${ClassName} ${className}) + { + List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); + ExcelUtil<${ClassName}> util = new ExcelUtil<${ClassName}>(${ClassName}.class); + util.exportExcel(response, list, "${functionName}鏁版嵁"); + } + + /** + * 鑾峰彇${functionName}璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('${permissionPrefix}:query')") + @GetMapping(value = "/{${pkColumn.javaField}}") + public AjaxResult getInfo(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField}) + { + return success(${className}Service.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField})); + } + + /** + * 鏂板${functionName} + */ + @PreAuthorize("@ss.hasPermi('${permissionPrefix}:add')") + @Log(title = "${functionName}", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody ${ClassName} ${className}) + { + return toAjax(${className}Service.insert${ClassName}(${className})); + } + + /** + * 淇敼${functionName} + */ + @PreAuthorize("@ss.hasPermi('${permissionPrefix}:edit')") + @Log(title = "${functionName}", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody ${ClassName} ${className}) + { + return toAjax(${className}Service.update${ClassName}(${className})); + } + + /** + * 鍒犻櫎${functionName} + */ + @PreAuthorize("@ss.hasPermi('${permissionPrefix}:remove')") + @Log(title = "${functionName}", businessType = BusinessType.DELETE) + @DeleteMapping("/{${pkColumn.javaField}s}") + public AjaxResult remove(@PathVariable ${pkColumn.javaType}[] ${pkColumn.javaField}s) + { + return toAjax(${className}Service.delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaField}s)); + } +} diff --git a/evo-admin/src/main/resources/vm/java/domain.java.vm b/evo-admin/src/main/resources/vm/java/domain.java.vm new file mode 100644 index 0000000..b8e605c --- /dev/null +++ b/evo-admin/src/main/resources/vm/java/domain.java.vm @@ -0,0 +1,105 @@ +package ${packageName}.domain; + +#foreach ($import in $importList) +import ${import}; +#end +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.evo.common.annotation.Excel; +#if($table.crud || $table.sub) +import com.evo.common.core.domain.BaseEntity; +#elseif($table.tree) +import com.evo.common.core.domain.TreeEntity; +#end + +/** + * ${functionName}瀵硅薄 ${tableName} + * + * @author ${author} + * @date ${datetime} + */ +#if($table.crud || $table.sub) +#set($Entity="BaseEntity") +#elseif($table.tree) +#set($Entity="TreeEntity") +#end +public class ${ClassName} extends ${Entity} +{ + private static final long serialVersionUID = 1L; + +#foreach ($column in $columns) +#if(!$table.isSuperColumn($column.javaField)) + /** $column.columnComment */ +#if($column.list) +#set($parentheseIndex=$column.columnComment.indexOf("锛")) +#if($parentheseIndex != -1) +#set($comment=$column.columnComment.substring(0, $parentheseIndex)) +#else +#set($comment=$column.columnComment) +#end +#if($parentheseIndex != -1) + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") +#elseif($column.javaType == 'Date') + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd") +#else + @Excel(name = "${comment}") +#end +#end + private $column.javaType $column.javaField; + +#end +#end +#if($table.sub) + /** $table.subTable.functionName淇℃伅 */ + private List<${subClassName}> ${subclassName}List; + +#end +#foreach ($column in $columns) +#if(!$table.isSuperColumn($column.javaField)) +#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) +#set($AttrName=$column.javaField) +#else +#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) +#end + public void set${AttrName}($column.javaType $column.javaField) + { + this.$column.javaField = $column.javaField; + } + + public $column.javaType get${AttrName}() + { + return $column.javaField; + } +#end +#end + +#if($table.sub) + public List<${subClassName}> get${subClassName}List() + { + return ${subclassName}List; + } + + public void set${subClassName}List(List<${subClassName}> ${subclassName}List) + { + this.${subclassName}List = ${subclassName}List; + } + +#end + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) +#foreach ($column in $columns) +#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) +#set($AttrName=$column.javaField) +#else +#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) +#end + .append("${column.javaField}", get${AttrName}()) +#end +#if($table.sub) + .append("${subclassName}List", get${subClassName}List()) +#end + .toString(); + } +} diff --git a/evo-admin/src/main/resources/vm/java/mapper.java.vm b/evo-admin/src/main/resources/vm/java/mapper.java.vm new file mode 100644 index 0000000..7e7d7c2 --- /dev/null +++ b/evo-admin/src/main/resources/vm/java/mapper.java.vm @@ -0,0 +1,91 @@ +package ${packageName}.mapper; + +import java.util.List; +import ${packageName}.domain.${ClassName}; +#if($table.sub) +import ${packageName}.domain.${subClassName}; +#end + +/** + * ${functionName}Mapper鎺ュ彛 + * + * @author ${author} + * @date ${datetime} + */ +public interface ${ClassName}Mapper +{ + /** + * 鏌ヨ${functionName} + * + * @param ${pkColumn.javaField} ${functionName}涓婚敭 + * @return ${functionName} + */ + public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); + + /** + * 鏌ヨ${functionName}鍒楄〃 + * + * @param ${className} ${functionName} + * @return ${functionName}闆嗗悎 + */ + public List<${ClassName}> select${ClassName}List(${ClassName} ${className}); + + /** + * 鏂板${functionName} + * + * @param ${className} ${functionName} + * @return 缁撴灉 + */ + public int insert${ClassName}(${ClassName} ${className}); + + /** + * 淇敼${functionName} + * + * @param ${className} ${functionName} + * @return 缁撴灉 + */ + public int update${ClassName}(${ClassName} ${className}); + + /** + * 鍒犻櫎${functionName} + * + * @param ${pkColumn.javaField} ${functionName}涓婚敭 + * @return 缁撴灉 + */ + public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); + + /** + * 鎵归噺鍒犻櫎${functionName} + * + * @param ${pkColumn.javaField}s 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); +#if($table.sub) + + /** + * 鎵归噺鍒犻櫎${subTable.functionName} + * + * @param ${pkColumn.javaField}s 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); + + /** + * 鎵归噺鏂板${subTable.functionName} + * + * @param ${subclassName}List ${subTable.functionName}鍒楄〃 + * @return 缁撴灉 + */ + public int batch${subClassName}(List<${subClassName}> ${subclassName}List); + + + /** + * 閫氳繃${functionName}涓婚敭鍒犻櫎${subTable.functionName}淇℃伅 + * + * @param ${pkColumn.javaField} ${functionName}ID + * @return 缁撴灉 + */ + public int delete${subClassName}By${subTableFkClassName}(${pkColumn.javaType} ${pkColumn.javaField}); +#end +} diff --git a/evo-admin/src/main/resources/vm/java/service.java.vm b/evo-admin/src/main/resources/vm/java/service.java.vm new file mode 100644 index 0000000..264882b --- /dev/null +++ b/evo-admin/src/main/resources/vm/java/service.java.vm @@ -0,0 +1,61 @@ +package ${packageName}.service; + +import java.util.List; +import ${packageName}.domain.${ClassName}; + +/** + * ${functionName}Service鎺ュ彛 + * + * @author ${author} + * @date ${datetime} + */ +public interface I${ClassName}Service +{ + /** + * 鏌ヨ${functionName} + * + * @param ${pkColumn.javaField} ${functionName}涓婚敭 + * @return ${functionName} + */ + public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); + + /** + * 鏌ヨ${functionName}鍒楄〃 + * + * @param ${className} ${functionName} + * @return ${functionName}闆嗗悎 + */ + public List<${ClassName}> select${ClassName}List(${ClassName} ${className}); + + /** + * 鏂板${functionName} + * + * @param ${className} ${functionName} + * @return 缁撴灉 + */ + public int insert${ClassName}(${ClassName} ${className}); + + /** + * 淇敼${functionName} + * + * @param ${className} ${functionName} + * @return 缁撴灉 + */ + public int update${ClassName}(${ClassName} ${className}); + + /** + * 鎵归噺鍒犻櫎${functionName} + * + * @param ${pkColumn.javaField}s 闇瑕佸垹闄ょ殑${functionName}涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); + + /** + * 鍒犻櫎${functionName}淇℃伅 + * + * @param ${pkColumn.javaField} ${functionName}涓婚敭 + * @return 缁撴灉 + */ + public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); +} diff --git a/evo-admin/src/main/resources/vm/java/serviceImpl.java.vm b/evo-admin/src/main/resources/vm/java/serviceImpl.java.vm new file mode 100644 index 0000000..b925863 --- /dev/null +++ b/evo-admin/src/main/resources/vm/java/serviceImpl.java.vm @@ -0,0 +1,169 @@ +package ${packageName}.service.impl; + +import java.util.List; +#foreach ($column in $columns) +#if($column.javaField == 'createTime' || $column.javaField == 'updateTime') +import com.evo.common.utils.DateUtils; +#break +#end +#end +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +#if($table.sub) +import java.util.ArrayList; +import com.evo.common.utils.StringUtils; +import org.springframework.transaction.annotation.Transactional; +import ${packageName}.domain.${subClassName}; +#end +import ${packageName}.mapper.${ClassName}Mapper; +import ${packageName}.domain.${ClassName}; +import ${packageName}.service.I${ClassName}Service; + +/** + * ${functionName}Service涓氬姟灞傚鐞 + * + * @author ${author} + * @date ${datetime} + */ +@Service +public class ${ClassName}ServiceImpl implements I${ClassName}Service +{ + @Autowired + private ${ClassName}Mapper ${className}Mapper; + + /** + * 鏌ヨ${functionName} + * + * @param ${pkColumn.javaField} ${functionName}涓婚敭 + * @return ${functionName} + */ + @Override + public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) + { + return ${className}Mapper.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}); + } + + /** + * 鏌ヨ${functionName}鍒楄〃 + * + * @param ${className} ${functionName} + * @return ${functionName} + */ + @Override + public List<${ClassName}> select${ClassName}List(${ClassName} ${className}) + { + return ${className}Mapper.select${ClassName}List(${className}); + } + + /** + * 鏂板${functionName} + * + * @param ${className} ${functionName} + * @return 缁撴灉 + */ +#if($table.sub) + @Transactional +#end + @Override + public int insert${ClassName}(${ClassName} ${className}) + { +#foreach ($column in $columns) +#if($column.javaField == 'createTime') + ${className}.setCreateTime(DateUtils.getNowDate()); +#end +#end +#if($table.sub) + int rows = ${className}Mapper.insert${ClassName}(${className}); + insert${subClassName}(${className}); + return rows; +#else + return ${className}Mapper.insert${ClassName}(${className}); +#end + } + + /** + * 淇敼${functionName} + * + * @param ${className} ${functionName} + * @return 缁撴灉 + */ +#if($table.sub) + @Transactional +#end + @Override + public int update${ClassName}(${ClassName} ${className}) + { +#foreach ($column in $columns) +#if($column.javaField == 'updateTime') + ${className}.setUpdateTime(DateUtils.getNowDate()); +#end +#end +#if($table.sub) + ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${className}.get${pkColumn.capJavaField}()); + insert${subClassName}(${className}); +#end + return ${className}Mapper.update${ClassName}(${className}); + } + + /** + * 鎵归噺鍒犻櫎${functionName} + * + * @param ${pkColumn.javaField}s 闇瑕佸垹闄ょ殑${functionName}涓婚敭 + * @return 缁撴灉 + */ +#if($table.sub) + @Transactional +#end + @Override + public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s) + { +#if($table.sub) + ${className}Mapper.delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaField}s); +#end + return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaField}s); + } + + /** + * 鍒犻櫎${functionName}淇℃伅 + * + * @param ${pkColumn.javaField} ${functionName}涓婚敭 + * @return 缁撴灉 + */ +#if($table.sub) + @Transactional +#end + @Override + public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) + { +#if($table.sub) + ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${pkColumn.javaField}); +#end + return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}); + } +#if($table.sub) + + /** + * 鏂板${subTable.functionName}淇℃伅 + * + * @param ${className} ${functionName}瀵硅薄 + */ + public void insert${subClassName}(${ClassName} ${className}) + { + List<${subClassName}> ${subclassName}List = ${className}.get${subClassName}List(); + ${pkColumn.javaType} ${pkColumn.javaField} = ${className}.get${pkColumn.capJavaField}(); + if (StringUtils.isNotNull(${subclassName}List)) + { + List<${subClassName}> list = new ArrayList<${subClassName}>(); + for (${subClassName} ${subclassName} : ${subclassName}List) + { + ${subclassName}.set${subTableFkClassName}(${pkColumn.javaField}); + list.add(${subclassName}); + } + if (list.size() > 0) + { + ${className}Mapper.batch${subClassName}(list); + } + } + } +#end +} diff --git a/evo-admin/src/main/resources/vm/java/sub-domain.java.vm b/evo-admin/src/main/resources/vm/java/sub-domain.java.vm new file mode 100644 index 0000000..0d6fc91 --- /dev/null +++ b/evo-admin/src/main/resources/vm/java/sub-domain.java.vm @@ -0,0 +1,76 @@ +package ${packageName}.domain; + +#foreach ($import in $subImportList) +import ${import}; +#end +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; + +/** + * ${subTable.functionName}瀵硅薄 ${subTableName} + * + * @author ${author} + * @date ${datetime} + */ +public class ${subClassName} extends BaseEntity +{ + private static final long serialVersionUID = 1L; + +#foreach ($column in $subTable.columns) +#if(!$table.isSuperColumn($column.javaField)) + /** $column.columnComment */ +#if($column.list) +#set($parentheseIndex=$column.columnComment.indexOf("锛")) +#if($parentheseIndex != -1) +#set($comment=$column.columnComment.substring(0, $parentheseIndex)) +#else +#set($comment=$column.columnComment) +#end +#if($parentheseIndex != -1) + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") +#elseif($column.javaType == 'Date') + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd") +#else + @Excel(name = "${comment}") +#end +#end + private $column.javaType $column.javaField; + +#end +#end +#foreach ($column in $subTable.columns) +#if(!$table.isSuperColumn($column.javaField)) +#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) +#set($AttrName=$column.javaField) +#else +#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) +#end + public void set${AttrName}($column.javaType $column.javaField) + { + this.$column.javaField = $column.javaField; + } + + public $column.javaType get${AttrName}() + { + return $column.javaField; + } +#end +#end + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) +#foreach ($column in $subTable.columns) +#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) +#set($AttrName=$column.javaField) +#else +#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) +#end + .append("${column.javaField}", get${AttrName}()) +#end + .toString(); + } +} diff --git a/evo-admin/src/main/resources/vm/js/api.js.vm b/evo-admin/src/main/resources/vm/js/api.js.vm new file mode 100644 index 0000000..9295524 --- /dev/null +++ b/evo-admin/src/main/resources/vm/js/api.js.vm @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ${functionName}鍒楄〃 +export function list${BusinessName}(query) { + return request({ + url: '/${moduleName}/${businessName}/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ${functionName}璇︾粏 +export function get${BusinessName}(${pkColumn.javaField}) { + return request({ + url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField}, + method: 'get' + }) +} + +// 鏂板${functionName} +export function add${BusinessName}(data) { + return request({ + url: '/${moduleName}/${businessName}', + method: 'post', + data: data + }) +} + +// 淇敼${functionName} +export function update${BusinessName}(data) { + return request({ + url: '/${moduleName}/${businessName}', + method: 'put', + data: data + }) +} + +// 鍒犻櫎${functionName} +export function del${BusinessName}(${pkColumn.javaField}) { + return request({ + url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField}, + method: 'delete' + }) +} diff --git a/evo-admin/src/main/resources/vm/sql/sql.vm b/evo-admin/src/main/resources/vm/sql/sql.vm new file mode 100644 index 0000000..0575583 --- /dev/null +++ b/evo-admin/src/main/resources/vm/sql/sql.vm @@ -0,0 +1,22 @@ +-- 鑿滃崟 SQL +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}', '${parentMenuId}', '1', '${businessName}', '${moduleName}/${businessName}/index', 1, 0, 'C', '0', '0', '${permissionPrefix}:list', '#', 'admin', sysdate(), '', null, '${functionName}鑿滃崟'); + +-- 鎸夐挳鐖惰彍鍗旾D +SELECT @parentId := LAST_INSERT_ID(); + +-- 鎸夐挳 SQL +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}鏌ヨ', @parentId, '1', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:query', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}鏂板', @parentId, '2', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:add', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}淇敼', @parentId, '3', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:edit', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}鍒犻櫎', @parentId, '4', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:remove', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}瀵煎嚭', @parentId, '5', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:export', '#', 'admin', sysdate(), '', null, ''); \ No newline at end of file diff --git a/evo-admin/src/main/resources/vm/vue/index-tree.vue.vm b/evo-admin/src/main/resources/vm/vue/index-tree.vue.vm new file mode 100644 index 0000000..4819c2a --- /dev/null +++ b/evo-admin/src/main/resources/vm/vue/index-tree.vue.vm @@ -0,0 +1,505 @@ + + + diff --git a/evo-admin/src/main/resources/vm/vue/index.vue.vm b/evo-admin/src/main/resources/vm/vue/index.vue.vm new file mode 100644 index 0000000..6296014 --- /dev/null +++ b/evo-admin/src/main/resources/vm/vue/index.vue.vm @@ -0,0 +1,602 @@ + + + diff --git a/evo-admin/src/main/resources/vm/vue/v3/index-tree.vue.vm b/evo-admin/src/main/resources/vm/vue/v3/index-tree.vue.vm new file mode 100644 index 0000000..c54d62b --- /dev/null +++ b/evo-admin/src/main/resources/vm/vue/v3/index-tree.vue.vm @@ -0,0 +1,474 @@ + + + diff --git a/evo-admin/src/main/resources/vm/vue/v3/index.vue.vm b/evo-admin/src/main/resources/vm/vue/v3/index.vue.vm new file mode 100644 index 0000000..8b25665 --- /dev/null +++ b/evo-admin/src/main/resources/vm/vue/v3/index.vue.vm @@ -0,0 +1,590 @@ + + + diff --git a/evo-admin/src/main/resources/vm/xml/mapper.xml.vm b/evo-admin/src/main/resources/vm/xml/mapper.xml.vm new file mode 100644 index 0000000..456755b --- /dev/null +++ b/evo-admin/src/main/resources/vm/xml/mapper.xml.vm @@ -0,0 +1,140 @@ + + + + + +#foreach ($column in $columns) + +#end + +#if($table.sub) + + + + + + +#foreach ($column in $subTable.columns) + +#end + +#end + + + select#foreach($column in $columns) $column.columnName#if($foreach.count != $columns.size()),#end#end from ${tableName} + + + + + +#if($table.sub) + + +#end + + + insert into ${tableName} + +#foreach($column in $columns) +#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment) + $column.columnName, +#end +#end + + +#foreach($column in $columns) +#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment) + #{$column.javaField}, +#end +#end + + + + + update ${tableName} + +#foreach($column in $columns) +#if($column.columnName != $pkColumn.columnName) + $column.columnName = #{$column.javaField}, +#end +#end + + where ${pkColumn.columnName} = #{${pkColumn.javaField}} + + + + delete from ${tableName} where ${pkColumn.columnName} = #{${pkColumn.javaField}} + + + + delete from ${tableName} where ${pkColumn.columnName} in + + #{${pkColumn.javaField}} + + +#if($table.sub) + + + delete from ${subTableName} where ${subTableFkName} in + + #{${subTableFkclassName}} + + + + + delete from ${subTableName} where ${subTableFkName} = #{${subTableFkclassName}} + + + + insert into ${subTableName}(#foreach($column in $subTable.columns) $column.columnName#if($foreach.count != $subTable.columns.size()),#end#end) values + + (#foreach($column in $subTable.columns) #{item.$column.javaField}#if($foreach.count != $subTable.columns.size()),#end#end) + + +#end + \ No newline at end of file diff --git a/evo-admin/target/classes/META-INF/spring-devtools.properties b/evo-admin/target/classes/META-INF/spring-devtools.properties new file mode 100644 index 0000000..37e7b58 --- /dev/null +++ b/evo-admin/target/classes/META-INF/spring-devtools.properties @@ -0,0 +1 @@ +restart.include.json=/com.alibaba.fastjson2.*.jar \ No newline at end of file diff --git a/evo-admin/target/classes/application-druid.yml b/evo-admin/target/classes/application-druid.yml new file mode 100644 index 0000000..1bdd017 --- /dev/null +++ b/evo-admin/target/classes/application-druid.yml @@ -0,0 +1,63 @@ +# 鏁版嵁婧愰厤缃 +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + druid: + # 涓诲簱鏁版嵁婧 + master: + url: jdbc:mysql://192.168.5.12:3306/evo_cw_new?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: yite + password: hbyt2024 + #username: root + #password: yj.chen@001 + # 浠庡簱鏁版嵁婧 + slave: + # 浠庢暟鎹簮寮鍏/榛樿鍏抽棴 + enabled: false + url: + username: + password: + # 鍒濆杩炴帴鏁 + initialSize: 5 + # 鏈灏忚繛鎺ユ睜鏁伴噺 + minIdle: 10 + # 鏈澶ц繛鎺ユ睜鏁伴噺 + maxActive: 20 + # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂 + maxWait: 60000 + # 閰嶇疆杩炴帴瓒呮椂鏃堕棿 + connectTimeout: 30000 + # 閰嶇疆缃戠粶瓒呮椂鏃堕棿 + socketTimeout: 60000 + # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣 + timeBetweenEvictionRunsMillis: 60000 + # 閰嶇疆涓涓繛鎺ュ湪姹犱腑鏈灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 + minEvictableIdleTimeMillis: 300000 + # 閰嶇疆涓涓繛鎺ュ湪姹犱腑鏈澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 + maxEvictableIdleTimeMillis: 900000 + # 閰嶇疆妫娴嬭繛鎺ユ槸鍚︽湁鏁 + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 璁剧疆鐧藉悕鍗曪紝涓嶅~鍒欏厑璁告墍鏈夎闂 + allow: + url-pattern: /druid/* + # 鎺у埗鍙扮鐞嗙敤鎴峰悕鍜屽瘑鐮 + login-username: evo + login-password: 123456 + filter: + stat: + enabled: true + # 鎱QL璁板綍 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true diff --git a/evo-admin/target/classes/application.yml b/evo-admin/target/classes/application.yml new file mode 100644 index 0000000..81364e4 --- /dev/null +++ b/evo-admin/target/classes/application.yml @@ -0,0 +1,127 @@ +# 椤圭洰鐩稿叧閰嶇疆 +evo: + # 鍚嶇О + name: evo + # 鐗堟湰 + version: 3.8.8 + # 鐗堟潈骞翠唤 + copyrightYear: 2024 + # 鏂囦欢璺緞 绀轰緥锛 Windows閰嶇疆D:/evo/uploadPath锛孡inux閰嶇疆 /home/evo/uploadPath锛 + profile: D:/evo/uploadPath + # 鑾峰彇ip鍦板潃寮鍏 + addressEnabled: false + +# 寮鍙戠幆澧冮厤缃 +server: + # 鏈嶅姟鍣ㄧ殑HTTP绔彛锛岄粯璁や负8080 + port: 8081 + servlet: + # 搴旂敤鐨勮闂矾寰 + context-path: / + tomcat: + # tomcat鐨刄RI缂栫爜 + uri-encoding: UTF-8 + # 杩炴帴鏁版弧鍚庣殑鎺掗槦鏁帮紝榛樿涓100 + accept-count: 1000 + threads: + # tomcat鏈澶х嚎绋嬫暟锛岄粯璁や负200 + max: 800 + # Tomcat鍚姩鍒濆鍖栫殑绾跨▼鏁帮紝榛樿鍊10 + min-spare: 100 + +# 鏃ュ織閰嶇疆 +logging: + level: + com.evo: debug + org.springframework: warn + +# 鐢ㄦ埛閰嶇疆 +user: + password: + # 瀵嗙爜鏈澶ч敊璇鏁 + maxRetryCount: 5 + # 瀵嗙爜閿佸畾鏃堕棿锛堥粯璁10鍒嗛挓锛 + lockTime: 10 + +# Spring閰嶇疆 +spring: + # 璧勬簮淇℃伅 + messages: + # 鍥介檯鍖栬祫婧愭枃浠惰矾寰 + basename: i18n/messages + profiles: + active: druid + # 鏂囦欢涓婁紶 + servlet: + multipart: + # 鍗曚釜鏂囦欢澶у皬 + max-file-size: 20MB + # 璁剧疆鎬讳笂浼犵殑鏂囦欢澶у皬 + max-request-size: 300MB + # 鏈嶅姟妯″潡 + devtools: + restart: + # 鐑儴缃插紑鍏 + enabled: true + # redis 閰嶇疆 + redis: + # 鍦板潃 + host: localhost + # 绔彛锛岄粯璁や负6379 + port: 6379 + # 鏁版嵁搴撶储寮 + database: 0 + # 瀵嗙爜 + password: + # 杩炴帴瓒呮椂鏃堕棿 + timeout: 10s + lettuce: + pool: + # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺 + min-idle: 0 + # 杩炴帴姹犱腑鐨勬渶澶х┖闂茶繛鎺 + max-idle: 8 + # 杩炴帴姹犵殑鏈澶ф暟鎹簱杩炴帴鏁 + max-active: 8 + # #杩炴帴姹犳渶澶ч樆濉炵瓑寰呮椂闂达紙浣跨敤璐熷艰〃绀烘病鏈夐檺鍒讹級 + max-wait: -1ms + +# token閰嶇疆 +token: + # 浠ょ墝鑷畾涔夋爣璇 + header: Authorization + # 浠ょ墝瀵嗛挜 + secret: abcdefghijklmnopqrstuvwxyz + # 浠ょ墝鏈夋晥鏈燂紙榛樿30鍒嗛挓锛 + expireTime: 480 + +# MyBatis閰嶇疆 +mybatis: + # 鎼滅储鎸囧畾鍖呭埆鍚 + typeAliasesPackage: com.evo.**.domain + # 閰嶇疆mapper鐨勬壂鎻忥紝鎵惧埌鎵鏈夌殑mapper.xml鏄犲皠鏂囦欢 + mapperLocations: classpath*:mapper/**/*Mapper.xml + # 鍔犺浇鍏ㄥ眬鐨勯厤缃枃浠 + configLocation: classpath:mybatis/mybatis-config.xml + +# PageHelper鍒嗛〉鎻掍欢 +pagehelper: + helperDialect: mysql + supportMethodsArguments: true + params: count=countSql + +# Swagger閰嶇疆 +swagger: + # 鏄惁寮鍚痵wagger + enabled: true + # 璇锋眰鍓嶇紑 + pathMapping: /dev-api + +# 闃叉XSS鏀诲嚮 +xss: + # 杩囨护寮鍏 + enabled: true + # 鎺掗櫎閾炬帴锛堝涓敤閫楀彿鍒嗛殧锛 + excludes: /system/notice + # 鍖归厤閾炬帴 + urlPatterns: /system/*,/monitor/*,/tool/* diff --git a/evo-admin/target/classes/banner.txt b/evo-admin/target/classes/banner.txt new file mode 100644 index 0000000..2c9caf8 --- /dev/null +++ b/evo-admin/target/classes/banner.txt @@ -0,0 +1,24 @@ +Application Version: ${evo.version} +Spring Boot Version: ${spring-boot.version} +//////////////////////////////////////////////////////////////////// +// _ooOoo_ // +// o8888888o // +// 88" . "88 // +// (| ^_^ |) // +// O\ = /O // +// ____/`---'\____ // +// .' \\| |// `. // +// / \\||| : |||// \ // +// / _||||| -:- |||||- \ // +// | | \\\ - /// | | // +// | \_| ''\---/'' | | // +// \ .-\__ `-` ___/-. / // +// ___`. .' /--.--\ `. . ___ // +// ."" '< `.___\_<|>_/___.' >'"". // +// | | : `- \`.;`\ _ /`;.`/ - ` : | | // +// \ \ `-. \_ __\ /__ _/ .-` / / // +// ========`-.____`-.___\_____/___.-`____.-'======== // +// `=---=' // +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // +// 浣涚淇濅綉 姘镐笉瀹曟満 姘告棤BUG // +//////////////////////////////////////////////////////////////////// diff --git a/evo-admin/target/classes/com/evo/EvoApplication.class b/evo-admin/target/classes/com/evo/EvoApplication.class new file mode 100644 index 0000000..95275d8 Binary files /dev/null and b/evo-admin/target/classes/com/evo/EvoApplication.class differ diff --git a/evo-admin/target/classes/com/evo/EvoServletInitializer.class b/evo-admin/target/classes/com/evo/EvoServletInitializer.class new file mode 100644 index 0000000..8cb674e Binary files /dev/null and b/evo-admin/target/classes/com/evo/EvoServletInitializer.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/controller/PunchTheClockController.class b/evo-admin/target/classes/com/evo/attendance/controller/PunchTheClockController.class new file mode 100644 index 0000000..1b72824 Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/controller/PunchTheClockController.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/controller/RzAbnormalController.class b/evo-admin/target/classes/com/evo/attendance/controller/RzAbnormalController.class new file mode 100644 index 0000000..d56b242 Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/controller/RzAbnormalController.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/controller/RzAbnormalDetailController.class b/evo-admin/target/classes/com/evo/attendance/controller/RzAbnormalDetailController.class new file mode 100644 index 0000000..2187722 Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/controller/RzAbnormalDetailController.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/controller/RzAttendanceController.class b/evo-admin/target/classes/com/evo/attendance/controller/RzAttendanceController.class new file mode 100644 index 0000000..03e4e99 Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/controller/RzAttendanceController.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/controller/RzAttendanceStatisticalController.class b/evo-admin/target/classes/com/evo/attendance/controller/RzAttendanceStatisticalController.class new file mode 100644 index 0000000..c785d79 Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/controller/RzAttendanceStatisticalController.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/controller/RzSpecialAttendanceController.class b/evo-admin/target/classes/com/evo/attendance/controller/RzSpecialAttendanceController.class new file mode 100644 index 0000000..165887b Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/controller/RzSpecialAttendanceController.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/controller/RzSpecialOverTimeController.class b/evo-admin/target/classes/com/evo/attendance/controller/RzSpecialOverTimeController.class new file mode 100644 index 0000000..5a82066 Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/controller/RzSpecialOverTimeController.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/domain/RzAbnormal.class b/evo-admin/target/classes/com/evo/attendance/domain/RzAbnormal.class new file mode 100644 index 0000000..70b3c52 Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/domain/RzAbnormal.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/domain/RzAbnormalDetail.class b/evo-admin/target/classes/com/evo/attendance/domain/RzAbnormalDetail.class new file mode 100644 index 0000000..c5d4f6d Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/domain/RzAbnormalDetail.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/domain/RzAttendance.class b/evo-admin/target/classes/com/evo/attendance/domain/RzAttendance.class new file mode 100644 index 0000000..c902ae5 Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/domain/RzAttendance.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/domain/RzAttendanceDetail.class b/evo-admin/target/classes/com/evo/attendance/domain/RzAttendanceDetail.class new file mode 100644 index 0000000..fd8b98a Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/domain/RzAttendanceDetail.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/domain/RzAttendanceStatistical.class b/evo-admin/target/classes/com/evo/attendance/domain/RzAttendanceStatistical.class new file mode 100644 index 0000000..b78a3dd Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/domain/RzAttendanceStatistical.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/domain/RzSpecialAttendance.class b/evo-admin/target/classes/com/evo/attendance/domain/RzSpecialAttendance.class new file mode 100644 index 0000000..6e18fee Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/domain/RzSpecialAttendance.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/domain/RzSpecialOverTime.class b/evo-admin/target/classes/com/evo/attendance/domain/RzSpecialOverTime.class new file mode 100644 index 0000000..48a859f Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/domain/RzSpecialOverTime.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/domain/vo/RzAttendanceData.class b/evo-admin/target/classes/com/evo/attendance/domain/vo/RzAttendanceData.class new file mode 100644 index 0000000..2d378af Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/domain/vo/RzAttendanceData.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/domain/vo/RzAttendanceVo.class b/evo-admin/target/classes/com/evo/attendance/domain/vo/RzAttendanceVo.class new file mode 100644 index 0000000..6eff5d1 Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/domain/vo/RzAttendanceVo.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/mapper/RzAbnormalDetailMapper.class b/evo-admin/target/classes/com/evo/attendance/mapper/RzAbnormalDetailMapper.class new file mode 100644 index 0000000..fd0c494 Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/mapper/RzAbnormalDetailMapper.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/mapper/RzAbnormalMapper.class b/evo-admin/target/classes/com/evo/attendance/mapper/RzAbnormalMapper.class new file mode 100644 index 0000000..d11e764 Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/mapper/RzAbnormalMapper.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/mapper/RzAttendanceDetailMapper.class b/evo-admin/target/classes/com/evo/attendance/mapper/RzAttendanceDetailMapper.class new file mode 100644 index 0000000..e7a92d7 Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/mapper/RzAttendanceDetailMapper.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/mapper/RzAttendanceMapper.class b/evo-admin/target/classes/com/evo/attendance/mapper/RzAttendanceMapper.class new file mode 100644 index 0000000..34b2f25 Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/mapper/RzAttendanceMapper.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/mapper/RzAttendanceStatisticalMapper.class b/evo-admin/target/classes/com/evo/attendance/mapper/RzAttendanceStatisticalMapper.class new file mode 100644 index 0000000..46ff079 Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/mapper/RzAttendanceStatisticalMapper.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/mapper/RzSpecialAttendanceMapper.class b/evo-admin/target/classes/com/evo/attendance/mapper/RzSpecialAttendanceMapper.class new file mode 100644 index 0000000..863804e Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/mapper/RzSpecialAttendanceMapper.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/mapper/RzSpecialOverTimeMapper.class b/evo-admin/target/classes/com/evo/attendance/mapper/RzSpecialOverTimeMapper.class new file mode 100644 index 0000000..180bf1b Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/mapper/RzSpecialOverTimeMapper.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/service/IRzAbnormalDetailService.class b/evo-admin/target/classes/com/evo/attendance/service/IRzAbnormalDetailService.class new file mode 100644 index 0000000..067e1fc Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/service/IRzAbnormalDetailService.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/service/IRzAbnormalService.class b/evo-admin/target/classes/com/evo/attendance/service/IRzAbnormalService.class new file mode 100644 index 0000000..9d196e5 Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/service/IRzAbnormalService.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/service/IRzAttendanceService.class b/evo-admin/target/classes/com/evo/attendance/service/IRzAttendanceService.class new file mode 100644 index 0000000..fca18d6 Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/service/IRzAttendanceService.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/service/IRzAttendanceStatisticalService.class b/evo-admin/target/classes/com/evo/attendance/service/IRzAttendanceStatisticalService.class new file mode 100644 index 0000000..1ef44c0 Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/service/IRzAttendanceStatisticalService.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/service/IRzSpecialAttendanceService.class b/evo-admin/target/classes/com/evo/attendance/service/IRzSpecialAttendanceService.class new file mode 100644 index 0000000..6839664 Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/service/IRzSpecialAttendanceService.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/service/IRzSpecialOverTimeService.class b/evo-admin/target/classes/com/evo/attendance/service/IRzSpecialOverTimeService.class new file mode 100644 index 0000000..b255189 Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/service/IRzSpecialOverTimeService.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/service/PunchTheClockService.class b/evo-admin/target/classes/com/evo/attendance/service/PunchTheClockService.class new file mode 100644 index 0000000..7b7d685 Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/service/PunchTheClockService.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/service/impl/PunchTheClockServiceImpl.class b/evo-admin/target/classes/com/evo/attendance/service/impl/PunchTheClockServiceImpl.class new file mode 100644 index 0000000..2114f5c Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/service/impl/PunchTheClockServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/service/impl/RzAbnormalDetailServiceImpl.class b/evo-admin/target/classes/com/evo/attendance/service/impl/RzAbnormalDetailServiceImpl.class new file mode 100644 index 0000000..038e387 Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/service/impl/RzAbnormalDetailServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/service/impl/RzAbnormalServiceImpl.class b/evo-admin/target/classes/com/evo/attendance/service/impl/RzAbnormalServiceImpl.class new file mode 100644 index 0000000..68564e7 Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/service/impl/RzAbnormalServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/service/impl/RzAttendanceServiceImpl.class b/evo-admin/target/classes/com/evo/attendance/service/impl/RzAttendanceServiceImpl.class new file mode 100644 index 0000000..b4a4e5a Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/service/impl/RzAttendanceServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/service/impl/RzAttendanceStatisticalServiceImpl.class b/evo-admin/target/classes/com/evo/attendance/service/impl/RzAttendanceStatisticalServiceImpl.class new file mode 100644 index 0000000..73711cf Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/service/impl/RzAttendanceStatisticalServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/service/impl/RzSpecialAttendanceServiceImpl.class b/evo-admin/target/classes/com/evo/attendance/service/impl/RzSpecialAttendanceServiceImpl.class new file mode 100644 index 0000000..eae0191 Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/service/impl/RzSpecialAttendanceServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/attendance/service/impl/RzSpecialOverTimeServiceImpl.class b/evo-admin/target/classes/com/evo/attendance/service/impl/RzSpecialOverTimeServiceImpl.class new file mode 100644 index 0000000..59198d8 Binary files /dev/null and b/evo-admin/target/classes/com/evo/attendance/service/impl/RzSpecialOverTimeServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/common/annotation/Anonymous.class b/evo-admin/target/classes/com/evo/common/annotation/Anonymous.class new file mode 100644 index 0000000..18f8acd Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/annotation/Anonymous.class differ diff --git a/evo-admin/target/classes/com/evo/common/annotation/DataScope.class b/evo-admin/target/classes/com/evo/common/annotation/DataScope.class new file mode 100644 index 0000000..87537de Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/annotation/DataScope.class differ diff --git a/evo-admin/target/classes/com/evo/common/annotation/DataSource.class b/evo-admin/target/classes/com/evo/common/annotation/DataSource.class new file mode 100644 index 0000000..7a9d939 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/annotation/DataSource.class differ diff --git a/evo-admin/target/classes/com/evo/common/annotation/Excel$ColumnType.class b/evo-admin/target/classes/com/evo/common/annotation/Excel$ColumnType.class new file mode 100644 index 0000000..7a74c0b Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/annotation/Excel$ColumnType.class differ diff --git a/evo-admin/target/classes/com/evo/common/annotation/Excel$Type.class b/evo-admin/target/classes/com/evo/common/annotation/Excel$Type.class new file mode 100644 index 0000000..4ba36bd Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/annotation/Excel$Type.class differ diff --git a/evo-admin/target/classes/com/evo/common/annotation/Excel.class b/evo-admin/target/classes/com/evo/common/annotation/Excel.class new file mode 100644 index 0000000..989dc78 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/annotation/Excel.class differ diff --git a/evo-admin/target/classes/com/evo/common/annotation/Excels.class b/evo-admin/target/classes/com/evo/common/annotation/Excels.class new file mode 100644 index 0000000..04aa786 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/annotation/Excels.class differ diff --git a/evo-admin/target/classes/com/evo/common/annotation/Log.class b/evo-admin/target/classes/com/evo/common/annotation/Log.class new file mode 100644 index 0000000..77178d1 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/annotation/Log.class differ diff --git a/evo-admin/target/classes/com/evo/common/annotation/RateLimiter.class b/evo-admin/target/classes/com/evo/common/annotation/RateLimiter.class new file mode 100644 index 0000000..867f717 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/annotation/RateLimiter.class differ diff --git a/evo-admin/target/classes/com/evo/common/annotation/RepeatSubmit.class b/evo-admin/target/classes/com/evo/common/annotation/RepeatSubmit.class new file mode 100644 index 0000000..1735dd5 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/annotation/RepeatSubmit.class differ diff --git a/evo-admin/target/classes/com/evo/common/annotation/Sensitive.class b/evo-admin/target/classes/com/evo/common/annotation/Sensitive.class new file mode 100644 index 0000000..a80f247 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/annotation/Sensitive.class differ diff --git a/evo-admin/target/classes/com/evo/common/config/EvoConfig.class b/evo-admin/target/classes/com/evo/common/config/EvoConfig.class new file mode 100644 index 0000000..92979fc Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/config/EvoConfig.class differ diff --git a/evo-admin/target/classes/com/evo/common/config/SwaggerConfig.class b/evo-admin/target/classes/com/evo/common/config/SwaggerConfig.class new file mode 100644 index 0000000..1d2e2f2 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/config/SwaggerConfig.class differ diff --git a/evo-admin/target/classes/com/evo/common/config/serializer/SensitiveJsonSerializer.class b/evo-admin/target/classes/com/evo/common/config/serializer/SensitiveJsonSerializer.class new file mode 100644 index 0000000..607a90f Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/config/serializer/SensitiveJsonSerializer.class differ diff --git a/evo-admin/target/classes/com/evo/common/constant/CacheConstants.class b/evo-admin/target/classes/com/evo/common/constant/CacheConstants.class new file mode 100644 index 0000000..0194ba7 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/constant/CacheConstants.class differ diff --git a/evo-admin/target/classes/com/evo/common/constant/Constants.class b/evo-admin/target/classes/com/evo/common/constant/Constants.class new file mode 100644 index 0000000..af0d242 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/constant/Constants.class differ diff --git a/evo-admin/target/classes/com/evo/common/constant/GenConstants.class b/evo-admin/target/classes/com/evo/common/constant/GenConstants.class new file mode 100644 index 0000000..fc2aa4c Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/constant/GenConstants.class differ diff --git a/evo-admin/target/classes/com/evo/common/constant/HttpStatus.class b/evo-admin/target/classes/com/evo/common/constant/HttpStatus.class new file mode 100644 index 0000000..6c8648a Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/constant/HttpStatus.class differ diff --git a/evo-admin/target/classes/com/evo/common/constant/ScheduleConstants$Status.class b/evo-admin/target/classes/com/evo/common/constant/ScheduleConstants$Status.class new file mode 100644 index 0000000..b9f002e Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/constant/ScheduleConstants$Status.class differ diff --git a/evo-admin/target/classes/com/evo/common/constant/ScheduleConstants.class b/evo-admin/target/classes/com/evo/common/constant/ScheduleConstants.class new file mode 100644 index 0000000..ecd0246 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/constant/ScheduleConstants.class differ diff --git a/evo-admin/target/classes/com/evo/common/constant/UserConstants.class b/evo-admin/target/classes/com/evo/common/constant/UserConstants.class new file mode 100644 index 0000000..b3768ee Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/constant/UserConstants.class differ diff --git a/evo-admin/target/classes/com/evo/common/core/controller/BaseController$1.class b/evo-admin/target/classes/com/evo/common/core/controller/BaseController$1.class new file mode 100644 index 0000000..1360b92 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/core/controller/BaseController$1.class differ diff --git a/evo-admin/target/classes/com/evo/common/core/controller/BaseController.class b/evo-admin/target/classes/com/evo/common/core/controller/BaseController.class new file mode 100644 index 0000000..d715f00 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/core/controller/BaseController.class differ diff --git a/evo-admin/target/classes/com/evo/common/core/domain/AjaxResult.class b/evo-admin/target/classes/com/evo/common/core/domain/AjaxResult.class new file mode 100644 index 0000000..7397a39 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/core/domain/AjaxResult.class differ diff --git a/evo-admin/target/classes/com/evo/common/core/domain/BaseEntity.class b/evo-admin/target/classes/com/evo/common/core/domain/BaseEntity.class new file mode 100644 index 0000000..da4d170 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/core/domain/BaseEntity.class differ diff --git a/evo-admin/target/classes/com/evo/common/core/domain/R.class b/evo-admin/target/classes/com/evo/common/core/domain/R.class new file mode 100644 index 0000000..32e2d2c Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/core/domain/R.class differ diff --git a/evo-admin/target/classes/com/evo/common/core/domain/TreeEntity.class b/evo-admin/target/classes/com/evo/common/core/domain/TreeEntity.class new file mode 100644 index 0000000..e7311b6 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/core/domain/TreeEntity.class differ diff --git a/evo-admin/target/classes/com/evo/common/core/domain/TreeSelect.class b/evo-admin/target/classes/com/evo/common/core/domain/TreeSelect.class new file mode 100644 index 0000000..045f0c2 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/core/domain/TreeSelect.class differ diff --git a/evo-admin/target/classes/com/evo/common/core/domain/entity/SysDept.class b/evo-admin/target/classes/com/evo/common/core/domain/entity/SysDept.class new file mode 100644 index 0000000..15cb5b2 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/core/domain/entity/SysDept.class differ diff --git a/evo-admin/target/classes/com/evo/common/core/domain/entity/SysDictData.class b/evo-admin/target/classes/com/evo/common/core/domain/entity/SysDictData.class new file mode 100644 index 0000000..ea1576c Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/core/domain/entity/SysDictData.class differ diff --git a/evo-admin/target/classes/com/evo/common/core/domain/entity/SysDictType.class b/evo-admin/target/classes/com/evo/common/core/domain/entity/SysDictType.class new file mode 100644 index 0000000..bf58728 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/core/domain/entity/SysDictType.class differ diff --git a/evo-admin/target/classes/com/evo/common/core/domain/entity/SysMenu.class b/evo-admin/target/classes/com/evo/common/core/domain/entity/SysMenu.class new file mode 100644 index 0000000..f1133bb Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/core/domain/entity/SysMenu.class differ diff --git a/evo-admin/target/classes/com/evo/common/core/domain/entity/SysRole.class b/evo-admin/target/classes/com/evo/common/core/domain/entity/SysRole.class new file mode 100644 index 0000000..df2715e Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/core/domain/entity/SysRole.class differ diff --git a/evo-admin/target/classes/com/evo/common/core/domain/entity/SysUser.class b/evo-admin/target/classes/com/evo/common/core/domain/entity/SysUser.class new file mode 100644 index 0000000..945bd43 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/core/domain/entity/SysUser.class differ diff --git a/evo-admin/target/classes/com/evo/common/core/domain/model/LoginBody.class b/evo-admin/target/classes/com/evo/common/core/domain/model/LoginBody.class new file mode 100644 index 0000000..3c06b90 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/core/domain/model/LoginBody.class differ diff --git a/evo-admin/target/classes/com/evo/common/core/domain/model/LoginUser.class b/evo-admin/target/classes/com/evo/common/core/domain/model/LoginUser.class new file mode 100644 index 0000000..7b6dc17 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/core/domain/model/LoginUser.class differ diff --git a/evo-admin/target/classes/com/evo/common/core/domain/model/RegisterBody.class b/evo-admin/target/classes/com/evo/common/core/domain/model/RegisterBody.class new file mode 100644 index 0000000..20137bd Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/core/domain/model/RegisterBody.class differ diff --git a/evo-admin/target/classes/com/evo/common/core/page/PageDomain.class b/evo-admin/target/classes/com/evo/common/core/page/PageDomain.class new file mode 100644 index 0000000..6f75c8f Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/core/page/PageDomain.class differ diff --git a/evo-admin/target/classes/com/evo/common/core/page/TableDataInfo.class b/evo-admin/target/classes/com/evo/common/core/page/TableDataInfo.class new file mode 100644 index 0000000..a09e9fc Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/core/page/TableDataInfo.class differ diff --git a/evo-admin/target/classes/com/evo/common/core/page/TableSupport.class b/evo-admin/target/classes/com/evo/common/core/page/TableSupport.class new file mode 100644 index 0000000..475644c Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/core/page/TableSupport.class differ diff --git a/evo-admin/target/classes/com/evo/common/core/redis/RedisCache.class b/evo-admin/target/classes/com/evo/common/core/redis/RedisCache.class new file mode 100644 index 0000000..50b868f Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/core/redis/RedisCache.class differ diff --git a/evo-admin/target/classes/com/evo/common/core/text/CharsetKit.class b/evo-admin/target/classes/com/evo/common/core/text/CharsetKit.class new file mode 100644 index 0000000..6c503b9 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/core/text/CharsetKit.class differ diff --git a/evo-admin/target/classes/com/evo/common/core/text/Convert.class b/evo-admin/target/classes/com/evo/common/core/text/Convert.class new file mode 100644 index 0000000..1a423bb Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/core/text/Convert.class differ diff --git a/evo-admin/target/classes/com/evo/common/core/text/StrFormatter.class b/evo-admin/target/classes/com/evo/common/core/text/StrFormatter.class new file mode 100644 index 0000000..9c8b406 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/core/text/StrFormatter.class differ diff --git a/evo-admin/target/classes/com/evo/common/enums/BusinessStatus.class b/evo-admin/target/classes/com/evo/common/enums/BusinessStatus.class new file mode 100644 index 0000000..df62bdd Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/enums/BusinessStatus.class differ diff --git a/evo-admin/target/classes/com/evo/common/enums/BusinessType.class b/evo-admin/target/classes/com/evo/common/enums/BusinessType.class new file mode 100644 index 0000000..20bfa07 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/enums/BusinessType.class differ diff --git a/evo-admin/target/classes/com/evo/common/enums/DataSourceType.class b/evo-admin/target/classes/com/evo/common/enums/DataSourceType.class new file mode 100644 index 0000000..8f1d78a Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/enums/DataSourceType.class differ diff --git a/evo-admin/target/classes/com/evo/common/enums/DesensitizedType.class b/evo-admin/target/classes/com/evo/common/enums/DesensitizedType.class new file mode 100644 index 0000000..b2cc867 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/enums/DesensitizedType.class differ diff --git a/evo-admin/target/classes/com/evo/common/enums/HttpMethod.class b/evo-admin/target/classes/com/evo/common/enums/HttpMethod.class new file mode 100644 index 0000000..396def7 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/enums/HttpMethod.class differ diff --git a/evo-admin/target/classes/com/evo/common/enums/LimitType.class b/evo-admin/target/classes/com/evo/common/enums/LimitType.class new file mode 100644 index 0000000..c9eee4a Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/enums/LimitType.class differ diff --git a/evo-admin/target/classes/com/evo/common/enums/OperatorType.class b/evo-admin/target/classes/com/evo/common/enums/OperatorType.class new file mode 100644 index 0000000..032aad3 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/enums/OperatorType.class differ diff --git a/evo-admin/target/classes/com/evo/common/enums/UserStatus.class b/evo-admin/target/classes/com/evo/common/enums/UserStatus.class new file mode 100644 index 0000000..66cc392 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/enums/UserStatus.class differ diff --git a/evo-admin/target/classes/com/evo/common/exception/CustomException.class b/evo-admin/target/classes/com/evo/common/exception/CustomException.class new file mode 100644 index 0000000..3a59749 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/exception/CustomException.class differ diff --git a/evo-admin/target/classes/com/evo/common/exception/DemoModeException.class b/evo-admin/target/classes/com/evo/common/exception/DemoModeException.class new file mode 100644 index 0000000..e3aeb00 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/exception/DemoModeException.class differ diff --git a/evo-admin/target/classes/com/evo/common/exception/GlobalException.class b/evo-admin/target/classes/com/evo/common/exception/GlobalException.class new file mode 100644 index 0000000..47e9dd3 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/exception/GlobalException.class differ diff --git a/evo-admin/target/classes/com/evo/common/exception/ServiceException.class b/evo-admin/target/classes/com/evo/common/exception/ServiceException.class new file mode 100644 index 0000000..8e11263 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/exception/ServiceException.class differ diff --git a/evo-admin/target/classes/com/evo/common/exception/UtilException.class b/evo-admin/target/classes/com/evo/common/exception/UtilException.class new file mode 100644 index 0000000..a8ba9cf Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/exception/UtilException.class differ diff --git a/evo-admin/target/classes/com/evo/common/exception/base/BaseException.class b/evo-admin/target/classes/com/evo/common/exception/base/BaseException.class new file mode 100644 index 0000000..7edf035 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/exception/base/BaseException.class differ diff --git a/evo-admin/target/classes/com/evo/common/exception/file/FileException.class b/evo-admin/target/classes/com/evo/common/exception/file/FileException.class new file mode 100644 index 0000000..dee00fa Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/exception/file/FileException.class differ diff --git a/evo-admin/target/classes/com/evo/common/exception/file/FileNameLengthLimitExceededException.class b/evo-admin/target/classes/com/evo/common/exception/file/FileNameLengthLimitExceededException.class new file mode 100644 index 0000000..9c2fc07 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/exception/file/FileNameLengthLimitExceededException.class differ diff --git a/evo-admin/target/classes/com/evo/common/exception/file/FileSizeLimitExceededException.class b/evo-admin/target/classes/com/evo/common/exception/file/FileSizeLimitExceededException.class new file mode 100644 index 0000000..9ab6dbf Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/exception/file/FileSizeLimitExceededException.class differ diff --git a/evo-admin/target/classes/com/evo/common/exception/file/FileUploadException.class b/evo-admin/target/classes/com/evo/common/exception/file/FileUploadException.class new file mode 100644 index 0000000..3cf66a1 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/exception/file/FileUploadException.class differ diff --git a/evo-admin/target/classes/com/evo/common/exception/file/InvalidExtensionException$InvalidFlashExtensionException.class b/evo-admin/target/classes/com/evo/common/exception/file/InvalidExtensionException$InvalidFlashExtensionException.class new file mode 100644 index 0000000..28cef30 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/exception/file/InvalidExtensionException$InvalidFlashExtensionException.class differ diff --git a/evo-admin/target/classes/com/evo/common/exception/file/InvalidExtensionException$InvalidImageExtensionException.class b/evo-admin/target/classes/com/evo/common/exception/file/InvalidExtensionException$InvalidImageExtensionException.class new file mode 100644 index 0000000..c1046db Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/exception/file/InvalidExtensionException$InvalidImageExtensionException.class differ diff --git a/evo-admin/target/classes/com/evo/common/exception/file/InvalidExtensionException$InvalidMediaExtensionException.class b/evo-admin/target/classes/com/evo/common/exception/file/InvalidExtensionException$InvalidMediaExtensionException.class new file mode 100644 index 0000000..5b5e15e Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/exception/file/InvalidExtensionException$InvalidMediaExtensionException.class differ diff --git a/evo-admin/target/classes/com/evo/common/exception/file/InvalidExtensionException$InvalidVideoExtensionException.class b/evo-admin/target/classes/com/evo/common/exception/file/InvalidExtensionException$InvalidVideoExtensionException.class new file mode 100644 index 0000000..b521ef1 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/exception/file/InvalidExtensionException$InvalidVideoExtensionException.class differ diff --git a/evo-admin/target/classes/com/evo/common/exception/file/InvalidExtensionException.class b/evo-admin/target/classes/com/evo/common/exception/file/InvalidExtensionException.class new file mode 100644 index 0000000..f2aad59 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/exception/file/InvalidExtensionException.class differ diff --git a/evo-admin/target/classes/com/evo/common/exception/job/TaskException$Code.class b/evo-admin/target/classes/com/evo/common/exception/job/TaskException$Code.class new file mode 100644 index 0000000..f1cd07b Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/exception/job/TaskException$Code.class differ diff --git a/evo-admin/target/classes/com/evo/common/exception/job/TaskException.class b/evo-admin/target/classes/com/evo/common/exception/job/TaskException.class new file mode 100644 index 0000000..268c815 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/exception/job/TaskException.class differ diff --git a/evo-admin/target/classes/com/evo/common/exception/user/BlackListException.class b/evo-admin/target/classes/com/evo/common/exception/user/BlackListException.class new file mode 100644 index 0000000..babce3f Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/exception/user/BlackListException.class differ diff --git a/evo-admin/target/classes/com/evo/common/exception/user/CaptchaException.class b/evo-admin/target/classes/com/evo/common/exception/user/CaptchaException.class new file mode 100644 index 0000000..ef0f2af Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/exception/user/CaptchaException.class differ diff --git a/evo-admin/target/classes/com/evo/common/exception/user/CaptchaExpireException.class b/evo-admin/target/classes/com/evo/common/exception/user/CaptchaExpireException.class new file mode 100644 index 0000000..1a2eee8 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/exception/user/CaptchaExpireException.class differ diff --git a/evo-admin/target/classes/com/evo/common/exception/user/UserException.class b/evo-admin/target/classes/com/evo/common/exception/user/UserException.class new file mode 100644 index 0000000..dafc0b5 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/exception/user/UserException.class differ diff --git a/evo-admin/target/classes/com/evo/common/exception/user/UserNotExistsException.class b/evo-admin/target/classes/com/evo/common/exception/user/UserNotExistsException.class new file mode 100644 index 0000000..aa7f672 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/exception/user/UserNotExistsException.class differ diff --git a/evo-admin/target/classes/com/evo/common/exception/user/UserPasswordNotMatchException.class b/evo-admin/target/classes/com/evo/common/exception/user/UserPasswordNotMatchException.class new file mode 100644 index 0000000..21102ba Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/exception/user/UserPasswordNotMatchException.class differ diff --git a/evo-admin/target/classes/com/evo/common/exception/user/UserPasswordRetryLimitExceedException.class b/evo-admin/target/classes/com/evo/common/exception/user/UserPasswordRetryLimitExceedException.class new file mode 100644 index 0000000..a2526df Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/exception/user/UserPasswordRetryLimitExceedException.class differ diff --git a/evo-admin/target/classes/com/evo/common/filter/PropertyPreExcludeFilter.class b/evo-admin/target/classes/com/evo/common/filter/PropertyPreExcludeFilter.class new file mode 100644 index 0000000..18b837a Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/filter/PropertyPreExcludeFilter.class differ diff --git a/evo-admin/target/classes/com/evo/common/filter/RepeatableFilter.class b/evo-admin/target/classes/com/evo/common/filter/RepeatableFilter.class new file mode 100644 index 0000000..07d98f3 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/filter/RepeatableFilter.class differ diff --git a/evo-admin/target/classes/com/evo/common/filter/RepeatedlyRequestWrapper$1.class b/evo-admin/target/classes/com/evo/common/filter/RepeatedlyRequestWrapper$1.class new file mode 100644 index 0000000..5996e4f Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/filter/RepeatedlyRequestWrapper$1.class differ diff --git a/evo-admin/target/classes/com/evo/common/filter/RepeatedlyRequestWrapper.class b/evo-admin/target/classes/com/evo/common/filter/RepeatedlyRequestWrapper.class new file mode 100644 index 0000000..1763b52 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/filter/RepeatedlyRequestWrapper.class differ diff --git a/evo-admin/target/classes/com/evo/common/filter/XssFilter.class b/evo-admin/target/classes/com/evo/common/filter/XssFilter.class new file mode 100644 index 0000000..48162a5 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/filter/XssFilter.class differ diff --git a/evo-admin/target/classes/com/evo/common/filter/XssHttpServletRequestWrapper$1.class b/evo-admin/target/classes/com/evo/common/filter/XssHttpServletRequestWrapper$1.class new file mode 100644 index 0000000..a7850b5 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/filter/XssHttpServletRequestWrapper$1.class differ diff --git a/evo-admin/target/classes/com/evo/common/filter/XssHttpServletRequestWrapper.class b/evo-admin/target/classes/com/evo/common/filter/XssHttpServletRequestWrapper.class new file mode 100644 index 0000000..307c897 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/filter/XssHttpServletRequestWrapper.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/Arith.class b/evo-admin/target/classes/com/evo/common/utils/Arith.class new file mode 100644 index 0000000..314e7a2 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/Arith.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/DateUtils.class b/evo-admin/target/classes/com/evo/common/utils/DateUtils.class new file mode 100644 index 0000000..1500e51 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/DateUtils.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/DesensitizedUtil.class b/evo-admin/target/classes/com/evo/common/utils/DesensitizedUtil.class new file mode 100644 index 0000000..5e5785b Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/DesensitizedUtil.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/DictUtils.class b/evo-admin/target/classes/com/evo/common/utils/DictUtils.class new file mode 100644 index 0000000..9236400 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/DictUtils.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/ExceptionUtil.class b/evo-admin/target/classes/com/evo/common/utils/ExceptionUtil.class new file mode 100644 index 0000000..d0fadd7 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/ExceptionUtil.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/LogUtils.class b/evo-admin/target/classes/com/evo/common/utils/LogUtils.class new file mode 100644 index 0000000..7a1ac84 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/LogUtils.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/MessageUtils.class b/evo-admin/target/classes/com/evo/common/utils/MessageUtils.class new file mode 100644 index 0000000..d8a6024 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/MessageUtils.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/PageUtils.class b/evo-admin/target/classes/com/evo/common/utils/PageUtils.class new file mode 100644 index 0000000..8100c42 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/PageUtils.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/SecurityUtils.class b/evo-admin/target/classes/com/evo/common/utils/SecurityUtils.class new file mode 100644 index 0000000..40611e4 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/SecurityUtils.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/ServletUtils.class b/evo-admin/target/classes/com/evo/common/utils/ServletUtils.class new file mode 100644 index 0000000..1e82905 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/ServletUtils.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/StringUtils.class b/evo-admin/target/classes/com/evo/common/utils/StringUtils.class new file mode 100644 index 0000000..be65eab Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/StringUtils.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/Threads.class b/evo-admin/target/classes/com/evo/common/utils/Threads.class new file mode 100644 index 0000000..ed264d4 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/Threads.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/bean/BeanUtils.class b/evo-admin/target/classes/com/evo/common/utils/bean/BeanUtils.class new file mode 100644 index 0000000..1170029 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/bean/BeanUtils.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/bean/BeanValidators.class b/evo-admin/target/classes/com/evo/common/utils/bean/BeanValidators.class new file mode 100644 index 0000000..eb6a9fa Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/bean/BeanValidators.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/file/FileTypeUtils.class b/evo-admin/target/classes/com/evo/common/utils/file/FileTypeUtils.class new file mode 100644 index 0000000..3eab58c Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/file/FileTypeUtils.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/file/FileUploadUtils.class b/evo-admin/target/classes/com/evo/common/utils/file/FileUploadUtils.class new file mode 100644 index 0000000..ed8603d Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/file/FileUploadUtils.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/file/FileUtils.class b/evo-admin/target/classes/com/evo/common/utils/file/FileUtils.class new file mode 100644 index 0000000..84e3ee8 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/file/FileUtils.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/file/ImageUtils.class b/evo-admin/target/classes/com/evo/common/utils/file/ImageUtils.class new file mode 100644 index 0000000..878bb1e Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/file/ImageUtils.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/file/MimeTypeUtils.class b/evo-admin/target/classes/com/evo/common/utils/file/MimeTypeUtils.class new file mode 100644 index 0000000..d4c6bc7 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/file/MimeTypeUtils.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/html/EscapeUtil.class b/evo-admin/target/classes/com/evo/common/utils/html/EscapeUtil.class new file mode 100644 index 0000000..47c415e Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/html/EscapeUtil.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/html/HTMLFilter.class b/evo-admin/target/classes/com/evo/common/utils/html/HTMLFilter.class new file mode 100644 index 0000000..d9092ce Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/html/HTMLFilter.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/http/HttpHelper.class b/evo-admin/target/classes/com/evo/common/utils/http/HttpHelper.class new file mode 100644 index 0000000..b9c5476 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/http/HttpHelper.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/http/HttpUtils$1.class b/evo-admin/target/classes/com/evo/common/utils/http/HttpUtils$1.class new file mode 100644 index 0000000..2021c75 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/http/HttpUtils$1.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/http/HttpUtils$TrustAnyHostnameVerifier.class b/evo-admin/target/classes/com/evo/common/utils/http/HttpUtils$TrustAnyHostnameVerifier.class new file mode 100644 index 0000000..7be222d Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/http/HttpUtils$TrustAnyHostnameVerifier.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/http/HttpUtils$TrustAnyTrustManager.class b/evo-admin/target/classes/com/evo/common/utils/http/HttpUtils$TrustAnyTrustManager.class new file mode 100644 index 0000000..dc3914b Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/http/HttpUtils$TrustAnyTrustManager.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/http/HttpUtils.class b/evo-admin/target/classes/com/evo/common/utils/http/HttpUtils.class new file mode 100644 index 0000000..2d66a68 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/http/HttpUtils.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/ip/AddressUtils.class b/evo-admin/target/classes/com/evo/common/utils/ip/AddressUtils.class new file mode 100644 index 0000000..964ec42 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/ip/AddressUtils.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/ip/IpUtils.class b/evo-admin/target/classes/com/evo/common/utils/ip/IpUtils.class new file mode 100644 index 0000000..e8acd26 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/ip/IpUtils.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/poi/ExcelHandlerAdapter.class b/evo-admin/target/classes/com/evo/common/utils/poi/ExcelHandlerAdapter.class new file mode 100644 index 0000000..6e8b6ef Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/poi/ExcelHandlerAdapter.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/poi/ExcelUtil.class b/evo-admin/target/classes/com/evo/common/utils/poi/ExcelUtil.class new file mode 100644 index 0000000..be17d6c Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/poi/ExcelUtil.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/poi/ExcelUtilSs$1.class b/evo-admin/target/classes/com/evo/common/utils/poi/ExcelUtilSs$1.class new file mode 100644 index 0000000..ff7ff45 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/poi/ExcelUtilSs$1.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/poi/ExcelUtilSs.class b/evo-admin/target/classes/com/evo/common/utils/poi/ExcelUtilSs.class new file mode 100644 index 0000000..5161df9 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/poi/ExcelUtilSs.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/poi/ExcelUtils$1.class b/evo-admin/target/classes/com/evo/common/utils/poi/ExcelUtils$1.class new file mode 100644 index 0000000..3da31a8 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/poi/ExcelUtils$1.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/poi/ExcelUtils.class b/evo-admin/target/classes/com/evo/common/utils/poi/ExcelUtils.class new file mode 100644 index 0000000..2b0af58 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/poi/ExcelUtils.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/reflect/ReflectUtils.class b/evo-admin/target/classes/com/evo/common/utils/reflect/ReflectUtils.class new file mode 100644 index 0000000..0812cb7 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/reflect/ReflectUtils.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/sign/Base64.class b/evo-admin/target/classes/com/evo/common/utils/sign/Base64.class new file mode 100644 index 0000000..e816ec8 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/sign/Base64.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/sign/Md5Utils.class b/evo-admin/target/classes/com/evo/common/utils/sign/Md5Utils.class new file mode 100644 index 0000000..cf6d9c0 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/sign/Md5Utils.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/spring/SpringUtils.class b/evo-admin/target/classes/com/evo/common/utils/spring/SpringUtils.class new file mode 100644 index 0000000..96eee30 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/spring/SpringUtils.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/sql/SqlUtil.class b/evo-admin/target/classes/com/evo/common/utils/sql/SqlUtil.class new file mode 100644 index 0000000..36a0a05 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/sql/SqlUtil.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/uuid/IdUtils.class b/evo-admin/target/classes/com/evo/common/utils/uuid/IdUtils.class new file mode 100644 index 0000000..e54062a Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/uuid/IdUtils.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/uuid/Seq.class b/evo-admin/target/classes/com/evo/common/utils/uuid/Seq.class new file mode 100644 index 0000000..dec1a7a Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/uuid/Seq.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/uuid/UUID$Holder.class b/evo-admin/target/classes/com/evo/common/utils/uuid/UUID$Holder.class new file mode 100644 index 0000000..76f183f Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/uuid/UUID$Holder.class differ diff --git a/evo-admin/target/classes/com/evo/common/utils/uuid/UUID.class b/evo-admin/target/classes/com/evo/common/utils/uuid/UUID.class new file mode 100644 index 0000000..f42b8c7 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/utils/uuid/UUID.class differ diff --git a/evo-admin/target/classes/com/evo/common/xss/Xss.class b/evo-admin/target/classes/com/evo/common/xss/Xss.class new file mode 100644 index 0000000..6721851 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/xss/Xss.class differ diff --git a/evo-admin/target/classes/com/evo/common/xss/XssValidator.class b/evo-admin/target/classes/com/evo/common/xss/XssValidator.class new file mode 100644 index 0000000..3bb7ae4 Binary files /dev/null and b/evo-admin/target/classes/com/evo/common/xss/XssValidator.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/constant/Constants.class b/evo-admin/target/classes/com/evo/equipment/constant/Constants.class new file mode 100644 index 0000000..6d01ece Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/constant/Constants.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/controller/EqButtonController.class b/evo-admin/target/classes/com/evo/equipment/controller/EqButtonController.class new file mode 100644 index 0000000..b680848 Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/controller/EqButtonController.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/controller/EqImagesController.class b/evo-admin/target/classes/com/evo/equipment/controller/EqImagesController.class new file mode 100644 index 0000000..ebf2524 Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/controller/EqImagesController.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/controller/EqSnDetailController.class b/evo-admin/target/classes/com/evo/equipment/controller/EqSnDetailController.class new file mode 100644 index 0000000..2f17668 Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/controller/EqSnDetailController.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/controller/EqStatusTimeController.class b/evo-admin/target/classes/com/evo/equipment/controller/EqStatusTimeController.class new file mode 100644 index 0000000..edd36ac Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/controller/EqStatusTimeController.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/domain/EqButton.class b/evo-admin/target/classes/com/evo/equipment/domain/EqButton.class new file mode 100644 index 0000000..d200428 Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/domain/EqButton.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/domain/EqImages.class b/evo-admin/target/classes/com/evo/equipment/domain/EqImages.class new file mode 100644 index 0000000..ac8f021 Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/domain/EqImages.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/domain/EqSnDetail.class b/evo-admin/target/classes/com/evo/equipment/domain/EqSnDetail.class new file mode 100644 index 0000000..19145c0 Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/domain/EqSnDetail.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/domain/EqStatusTime.class b/evo-admin/target/classes/com/evo/equipment/domain/EqStatusTime.class new file mode 100644 index 0000000..13f2a24 Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/domain/EqStatusTime.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/domain/vo/CwBottonDto.class b/evo-admin/target/classes/com/evo/equipment/domain/vo/CwBottonDto.class new file mode 100644 index 0000000..3be3de3 Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/domain/vo/CwBottonDto.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/domain/vo/CwButtonData.class b/evo-admin/target/classes/com/evo/equipment/domain/vo/CwButtonData.class new file mode 100644 index 0000000..1257e39 Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/domain/vo/CwButtonData.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/domain/vo/CwButtonVo.class b/evo-admin/target/classes/com/evo/equipment/domain/vo/CwButtonVo.class new file mode 100644 index 0000000..789e957 Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/domain/vo/CwButtonVo.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/domain/vo/RzStatusTimeData.class b/evo-admin/target/classes/com/evo/equipment/domain/vo/RzStatusTimeData.class new file mode 100644 index 0000000..249bad7 Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/domain/vo/RzStatusTimeData.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/domain/vo/RzStatusTimeVo.class b/evo-admin/target/classes/com/evo/equipment/domain/vo/RzStatusTimeVo.class new file mode 100644 index 0000000..a6888e8 Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/domain/vo/RzStatusTimeVo.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/domain/vo/StaffData.class b/evo-admin/target/classes/com/evo/equipment/domain/vo/StaffData.class new file mode 100644 index 0000000..1b22575 Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/domain/vo/StaffData.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/domain/vo/StaffDto.class b/evo-admin/target/classes/com/evo/equipment/domain/vo/StaffDto.class new file mode 100644 index 0000000..3eadf85 Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/domain/vo/StaffDto.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/mapper/EqButtonMapper.class b/evo-admin/target/classes/com/evo/equipment/mapper/EqButtonMapper.class new file mode 100644 index 0000000..f72b64b Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/mapper/EqButtonMapper.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/mapper/EqImagesMapper.class b/evo-admin/target/classes/com/evo/equipment/mapper/EqImagesMapper.class new file mode 100644 index 0000000..e059003 Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/mapper/EqImagesMapper.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/mapper/EqSnDetailMapper.class b/evo-admin/target/classes/com/evo/equipment/mapper/EqSnDetailMapper.class new file mode 100644 index 0000000..19f2109 Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/mapper/EqSnDetailMapper.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/mapper/EqStatusTimeMapper.class b/evo-admin/target/classes/com/evo/equipment/mapper/EqStatusTimeMapper.class new file mode 100644 index 0000000..f85d545 Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/mapper/EqStatusTimeMapper.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/service/IEqButtonService.class b/evo-admin/target/classes/com/evo/equipment/service/IEqButtonService.class new file mode 100644 index 0000000..cfaab22 Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/service/IEqButtonService.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/service/IEqImagesService.class b/evo-admin/target/classes/com/evo/equipment/service/IEqImagesService.class new file mode 100644 index 0000000..c0e8cd0 Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/service/IEqImagesService.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/service/IEqSnDetailService.class b/evo-admin/target/classes/com/evo/equipment/service/IEqSnDetailService.class new file mode 100644 index 0000000..298a1db Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/service/IEqSnDetailService.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/service/IEqStatusTimeService.class b/evo-admin/target/classes/com/evo/equipment/service/IEqStatusTimeService.class new file mode 100644 index 0000000..8645352 Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/service/IEqStatusTimeService.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/service/impl/EqButtonServiceImpl.class b/evo-admin/target/classes/com/evo/equipment/service/impl/EqButtonServiceImpl.class new file mode 100644 index 0000000..0721e5e Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/service/impl/EqButtonServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/service/impl/EqImagesServiceImpl.class b/evo-admin/target/classes/com/evo/equipment/service/impl/EqImagesServiceImpl.class new file mode 100644 index 0000000..8d84457 Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/service/impl/EqImagesServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/service/impl/EqSnDetailServiceImpl.class b/evo-admin/target/classes/com/evo/equipment/service/impl/EqSnDetailServiceImpl.class new file mode 100644 index 0000000..d22c746 Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/service/impl/EqSnDetailServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/equipment/service/impl/EqStatusTimeServiceImpl.class b/evo-admin/target/classes/com/evo/equipment/service/impl/EqStatusTimeServiceImpl.class new file mode 100644 index 0000000..2ee4881 Binary files /dev/null and b/evo-admin/target/classes/com/evo/equipment/service/impl/EqStatusTimeServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/finance/controller/RzSalaryDetailController.class b/evo-admin/target/classes/com/evo/finance/controller/RzSalaryDetailController.class new file mode 100644 index 0000000..8ae9168 Binary files /dev/null and b/evo-admin/target/classes/com/evo/finance/controller/RzSalaryDetailController.class differ diff --git a/evo-admin/target/classes/com/evo/finance/controller/RzSalaryStatisticsController.class b/evo-admin/target/classes/com/evo/finance/controller/RzSalaryStatisticsController.class new file mode 100644 index 0000000..48e372d Binary files /dev/null and b/evo-admin/target/classes/com/evo/finance/controller/RzSalaryStatisticsController.class differ diff --git a/evo-admin/target/classes/com/evo/finance/domain/RzSalaryDetail.class b/evo-admin/target/classes/com/evo/finance/domain/RzSalaryDetail.class new file mode 100644 index 0000000..5e3028c Binary files /dev/null and b/evo-admin/target/classes/com/evo/finance/domain/RzSalaryDetail.class differ diff --git a/evo-admin/target/classes/com/evo/finance/domain/RzSalaryStatistics.class b/evo-admin/target/classes/com/evo/finance/domain/RzSalaryStatistics.class new file mode 100644 index 0000000..6ccb036 Binary files /dev/null and b/evo-admin/target/classes/com/evo/finance/domain/RzSalaryStatistics.class differ diff --git a/evo-admin/target/classes/com/evo/finance/domain/vo/SalaryVo.class b/evo-admin/target/classes/com/evo/finance/domain/vo/SalaryVo.class new file mode 100644 index 0000000..a6db2d4 Binary files /dev/null and b/evo-admin/target/classes/com/evo/finance/domain/vo/SalaryVo.class differ diff --git a/evo-admin/target/classes/com/evo/finance/mapper/RzSalaryDetailMapper.class b/evo-admin/target/classes/com/evo/finance/mapper/RzSalaryDetailMapper.class new file mode 100644 index 0000000..ea41b0d Binary files /dev/null and b/evo-admin/target/classes/com/evo/finance/mapper/RzSalaryDetailMapper.class differ diff --git a/evo-admin/target/classes/com/evo/finance/mapper/RzSalaryStatisticsMapper.class b/evo-admin/target/classes/com/evo/finance/mapper/RzSalaryStatisticsMapper.class new file mode 100644 index 0000000..300c166 Binary files /dev/null and b/evo-admin/target/classes/com/evo/finance/mapper/RzSalaryStatisticsMapper.class differ diff --git a/evo-admin/target/classes/com/evo/finance/service/IRzSalaryDetailService.class b/evo-admin/target/classes/com/evo/finance/service/IRzSalaryDetailService.class new file mode 100644 index 0000000..0eff57a Binary files /dev/null and b/evo-admin/target/classes/com/evo/finance/service/IRzSalaryDetailService.class differ diff --git a/evo-admin/target/classes/com/evo/finance/service/IRzSalaryStatisticsService.class b/evo-admin/target/classes/com/evo/finance/service/IRzSalaryStatisticsService.class new file mode 100644 index 0000000..819284a Binary files /dev/null and b/evo-admin/target/classes/com/evo/finance/service/IRzSalaryStatisticsService.class differ diff --git a/evo-admin/target/classes/com/evo/finance/service/impl/RzSalaryDetailServiceImpl.class b/evo-admin/target/classes/com/evo/finance/service/impl/RzSalaryDetailServiceImpl.class new file mode 100644 index 0000000..16b2ea6 Binary files /dev/null and b/evo-admin/target/classes/com/evo/finance/service/impl/RzSalaryDetailServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/finance/service/impl/RzSalaryStatisticsServiceImpl.class b/evo-admin/target/classes/com/evo/finance/service/impl/RzSalaryStatisticsServiceImpl.class new file mode 100644 index 0000000..5531b84 Binary files /dev/null and b/evo-admin/target/classes/com/evo/finance/service/impl/RzSalaryStatisticsServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/framework/aspectj/DataScopeAspect.class b/evo-admin/target/classes/com/evo/framework/aspectj/DataScopeAspect.class new file mode 100644 index 0000000..b4e9cc8 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/aspectj/DataScopeAspect.class differ diff --git a/evo-admin/target/classes/com/evo/framework/aspectj/DataSourceAspect.class b/evo-admin/target/classes/com/evo/framework/aspectj/DataSourceAspect.class new file mode 100644 index 0000000..aa6869b Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/aspectj/DataSourceAspect.class differ diff --git a/evo-admin/target/classes/com/evo/framework/aspectj/LogAspect.class b/evo-admin/target/classes/com/evo/framework/aspectj/LogAspect.class new file mode 100644 index 0000000..dc590ff Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/aspectj/LogAspect.class differ diff --git a/evo-admin/target/classes/com/evo/framework/aspectj/RateLimiterAspect.class b/evo-admin/target/classes/com/evo/framework/aspectj/RateLimiterAspect.class new file mode 100644 index 0000000..1c017ca Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/aspectj/RateLimiterAspect.class differ diff --git a/evo-admin/target/classes/com/evo/framework/config/ApplicationConfig.class b/evo-admin/target/classes/com/evo/framework/config/ApplicationConfig.class new file mode 100644 index 0000000..19fd638 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/config/ApplicationConfig.class differ diff --git a/evo-admin/target/classes/com/evo/framework/config/DruidConfig$1.class b/evo-admin/target/classes/com/evo/framework/config/DruidConfig$1.class new file mode 100644 index 0000000..3e89d36 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/config/DruidConfig$1.class differ diff --git a/evo-admin/target/classes/com/evo/framework/config/DruidConfig.class b/evo-admin/target/classes/com/evo/framework/config/DruidConfig.class new file mode 100644 index 0000000..2d7c405 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/config/DruidConfig.class differ diff --git a/evo-admin/target/classes/com/evo/framework/config/FastJson2JsonRedisSerializer.class b/evo-admin/target/classes/com/evo/framework/config/FastJson2JsonRedisSerializer.class new file mode 100644 index 0000000..59b048e Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/config/FastJson2JsonRedisSerializer.class differ diff --git a/evo-admin/target/classes/com/evo/framework/config/FilterConfig.class b/evo-admin/target/classes/com/evo/framework/config/FilterConfig.class new file mode 100644 index 0000000..6e0809a Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/config/FilterConfig.class differ diff --git a/evo-admin/target/classes/com/evo/framework/config/I18nConfig.class b/evo-admin/target/classes/com/evo/framework/config/I18nConfig.class new file mode 100644 index 0000000..c989371 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/config/I18nConfig.class differ diff --git a/evo-admin/target/classes/com/evo/framework/config/MyBatisConfig.class b/evo-admin/target/classes/com/evo/framework/config/MyBatisConfig.class new file mode 100644 index 0000000..9b29efc Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/config/MyBatisConfig.class differ diff --git a/evo-admin/target/classes/com/evo/framework/config/RedisConfig.class b/evo-admin/target/classes/com/evo/framework/config/RedisConfig.class new file mode 100644 index 0000000..5df418a Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/config/RedisConfig.class differ diff --git a/evo-admin/target/classes/com/evo/framework/config/ResourcesConfig.class b/evo-admin/target/classes/com/evo/framework/config/ResourcesConfig.class new file mode 100644 index 0000000..dc9ef61 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/config/ResourcesConfig.class differ diff --git a/evo-admin/target/classes/com/evo/framework/config/SecurityConfig.class b/evo-admin/target/classes/com/evo/framework/config/SecurityConfig.class new file mode 100644 index 0000000..f6c2a25 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/config/SecurityConfig.class differ diff --git a/evo-admin/target/classes/com/evo/framework/config/ServerConfig.class b/evo-admin/target/classes/com/evo/framework/config/ServerConfig.class new file mode 100644 index 0000000..e4311e1 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/config/ServerConfig.class differ diff --git a/evo-admin/target/classes/com/evo/framework/config/ThreadPoolConfig$1.class b/evo-admin/target/classes/com/evo/framework/config/ThreadPoolConfig$1.class new file mode 100644 index 0000000..f06fc72 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/config/ThreadPoolConfig$1.class differ diff --git a/evo-admin/target/classes/com/evo/framework/config/ThreadPoolConfig.class b/evo-admin/target/classes/com/evo/framework/config/ThreadPoolConfig.class new file mode 100644 index 0000000..0901280 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/config/ThreadPoolConfig.class differ diff --git a/evo-admin/target/classes/com/evo/framework/config/properties/DruidProperties.class b/evo-admin/target/classes/com/evo/framework/config/properties/DruidProperties.class new file mode 100644 index 0000000..535fd08 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/config/properties/DruidProperties.class differ diff --git a/evo-admin/target/classes/com/evo/framework/config/properties/PermitAllUrlProperties.class b/evo-admin/target/classes/com/evo/framework/config/properties/PermitAllUrlProperties.class new file mode 100644 index 0000000..e8774d2 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/config/properties/PermitAllUrlProperties.class differ diff --git a/evo-admin/target/classes/com/evo/framework/datasource/DynamicDataSource.class b/evo-admin/target/classes/com/evo/framework/datasource/DynamicDataSource.class new file mode 100644 index 0000000..1aee66b Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/datasource/DynamicDataSource.class differ diff --git a/evo-admin/target/classes/com/evo/framework/datasource/DynamicDataSourceContextHolder.class b/evo-admin/target/classes/com/evo/framework/datasource/DynamicDataSourceContextHolder.class new file mode 100644 index 0000000..5eb234d Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/datasource/DynamicDataSourceContextHolder.class differ diff --git a/evo-admin/target/classes/com/evo/framework/interceptor/RepeatSubmitInterceptor.class b/evo-admin/target/classes/com/evo/framework/interceptor/RepeatSubmitInterceptor.class new file mode 100644 index 0000000..b0ec6eb Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/interceptor/RepeatSubmitInterceptor.class differ diff --git a/evo-admin/target/classes/com/evo/framework/interceptor/impl/SameUrlDataInterceptor.class b/evo-admin/target/classes/com/evo/framework/interceptor/impl/SameUrlDataInterceptor.class new file mode 100644 index 0000000..3ef0717 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/interceptor/impl/SameUrlDataInterceptor.class differ diff --git a/evo-admin/target/classes/com/evo/framework/manager/AsyncManager.class b/evo-admin/target/classes/com/evo/framework/manager/AsyncManager.class new file mode 100644 index 0000000..c95b77e Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/manager/AsyncManager.class differ diff --git a/evo-admin/target/classes/com/evo/framework/manager/ShutdownManager.class b/evo-admin/target/classes/com/evo/framework/manager/ShutdownManager.class new file mode 100644 index 0000000..f8a4f5c Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/manager/ShutdownManager.class differ diff --git a/evo-admin/target/classes/com/evo/framework/manager/factory/AsyncFactory$1.class b/evo-admin/target/classes/com/evo/framework/manager/factory/AsyncFactory$1.class new file mode 100644 index 0000000..74b94b5 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/manager/factory/AsyncFactory$1.class differ diff --git a/evo-admin/target/classes/com/evo/framework/manager/factory/AsyncFactory$2.class b/evo-admin/target/classes/com/evo/framework/manager/factory/AsyncFactory$2.class new file mode 100644 index 0000000..2086689 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/manager/factory/AsyncFactory$2.class differ diff --git a/evo-admin/target/classes/com/evo/framework/manager/factory/AsyncFactory.class b/evo-admin/target/classes/com/evo/framework/manager/factory/AsyncFactory.class new file mode 100644 index 0000000..1e5da92 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/manager/factory/AsyncFactory.class differ diff --git a/evo-admin/target/classes/com/evo/framework/security/context/AuthenticationContextHolder.class b/evo-admin/target/classes/com/evo/framework/security/context/AuthenticationContextHolder.class new file mode 100644 index 0000000..9bf674e Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/security/context/AuthenticationContextHolder.class differ diff --git a/evo-admin/target/classes/com/evo/framework/security/context/PermissionContextHolder.class b/evo-admin/target/classes/com/evo/framework/security/context/PermissionContextHolder.class new file mode 100644 index 0000000..0590191 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/security/context/PermissionContextHolder.class differ diff --git a/evo-admin/target/classes/com/evo/framework/security/filter/JwtAuthenticationTokenFilter.class b/evo-admin/target/classes/com/evo/framework/security/filter/JwtAuthenticationTokenFilter.class new file mode 100644 index 0000000..0abde3c Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/security/filter/JwtAuthenticationTokenFilter.class differ diff --git a/evo-admin/target/classes/com/evo/framework/security/handle/AuthenticationEntryPointImpl.class b/evo-admin/target/classes/com/evo/framework/security/handle/AuthenticationEntryPointImpl.class new file mode 100644 index 0000000..a070e57 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/security/handle/AuthenticationEntryPointImpl.class differ diff --git a/evo-admin/target/classes/com/evo/framework/security/handle/LogoutSuccessHandlerImpl.class b/evo-admin/target/classes/com/evo/framework/security/handle/LogoutSuccessHandlerImpl.class new file mode 100644 index 0000000..4230312 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/security/handle/LogoutSuccessHandlerImpl.class differ diff --git a/evo-admin/target/classes/com/evo/framework/web/exception/GlobalExceptionHandler.class b/evo-admin/target/classes/com/evo/framework/web/exception/GlobalExceptionHandler.class new file mode 100644 index 0000000..c2a5947 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/web/exception/GlobalExceptionHandler.class differ diff --git a/evo-admin/target/classes/com/evo/framework/web/service/PermissionService.class b/evo-admin/target/classes/com/evo/framework/web/service/PermissionService.class new file mode 100644 index 0000000..d5bcc1a Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/web/service/PermissionService.class differ diff --git a/evo-admin/target/classes/com/evo/framework/web/service/SysLoginService.class b/evo-admin/target/classes/com/evo/framework/web/service/SysLoginService.class new file mode 100644 index 0000000..7018902 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/web/service/SysLoginService.class differ diff --git a/evo-admin/target/classes/com/evo/framework/web/service/SysPasswordService.class b/evo-admin/target/classes/com/evo/framework/web/service/SysPasswordService.class new file mode 100644 index 0000000..69f8ea1 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/web/service/SysPasswordService.class differ diff --git a/evo-admin/target/classes/com/evo/framework/web/service/SysPermissionService.class b/evo-admin/target/classes/com/evo/framework/web/service/SysPermissionService.class new file mode 100644 index 0000000..5074d46 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/web/service/SysPermissionService.class differ diff --git a/evo-admin/target/classes/com/evo/framework/web/service/SysRegisterService.class b/evo-admin/target/classes/com/evo/framework/web/service/SysRegisterService.class new file mode 100644 index 0000000..74c3ca0 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/web/service/SysRegisterService.class differ diff --git a/evo-admin/target/classes/com/evo/framework/web/service/TokenService.class b/evo-admin/target/classes/com/evo/framework/web/service/TokenService.class new file mode 100644 index 0000000..e088794 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/web/service/TokenService.class differ diff --git a/evo-admin/target/classes/com/evo/framework/web/service/UserDetailsServiceImpl.class b/evo-admin/target/classes/com/evo/framework/web/service/UserDetailsServiceImpl.class new file mode 100644 index 0000000..7e154ef Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/web/service/UserDetailsServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/framework/websocket/SemaphoreUtils.class b/evo-admin/target/classes/com/evo/framework/websocket/SemaphoreUtils.class new file mode 100644 index 0000000..8e863ac Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/websocket/SemaphoreUtils.class differ diff --git a/evo-admin/target/classes/com/evo/framework/websocket/WebSocketConfig.class b/evo-admin/target/classes/com/evo/framework/websocket/WebSocketConfig.class new file mode 100644 index 0000000..4ccf581 Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/websocket/WebSocketConfig.class differ diff --git a/evo-admin/target/classes/com/evo/framework/websocket/WebSocketServer.class b/evo-admin/target/classes/com/evo/framework/websocket/WebSocketServer.class new file mode 100644 index 0000000..2640a9c Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/websocket/WebSocketServer.class differ diff --git a/evo-admin/target/classes/com/evo/framework/websocket/WebSocketUsers.class b/evo-admin/target/classes/com/evo/framework/websocket/WebSocketUsers.class new file mode 100644 index 0000000..54f3deb Binary files /dev/null and b/evo-admin/target/classes/com/evo/framework/websocket/WebSocketUsers.class differ diff --git a/evo-admin/target/classes/com/evo/generator/config/GenConfig.class b/evo-admin/target/classes/com/evo/generator/config/GenConfig.class new file mode 100644 index 0000000..a87fa02 Binary files /dev/null and b/evo-admin/target/classes/com/evo/generator/config/GenConfig.class differ diff --git a/evo-admin/target/classes/com/evo/generator/controller/GenController.class b/evo-admin/target/classes/com/evo/generator/controller/GenController.class new file mode 100644 index 0000000..49c98f0 Binary files /dev/null and b/evo-admin/target/classes/com/evo/generator/controller/GenController.class differ diff --git a/evo-admin/target/classes/com/evo/generator/domain/GenTable.class b/evo-admin/target/classes/com/evo/generator/domain/GenTable.class new file mode 100644 index 0000000..46fd684 Binary files /dev/null and b/evo-admin/target/classes/com/evo/generator/domain/GenTable.class differ diff --git a/evo-admin/target/classes/com/evo/generator/domain/GenTableColumn.class b/evo-admin/target/classes/com/evo/generator/domain/GenTableColumn.class new file mode 100644 index 0000000..9f6e6b1 Binary files /dev/null and b/evo-admin/target/classes/com/evo/generator/domain/GenTableColumn.class differ diff --git a/evo-admin/target/classes/com/evo/generator/mapper/GenTableColumnMapper.class b/evo-admin/target/classes/com/evo/generator/mapper/GenTableColumnMapper.class new file mode 100644 index 0000000..dadfe0e Binary files /dev/null and b/evo-admin/target/classes/com/evo/generator/mapper/GenTableColumnMapper.class differ diff --git a/evo-admin/target/classes/com/evo/generator/mapper/GenTableMapper.class b/evo-admin/target/classes/com/evo/generator/mapper/GenTableMapper.class new file mode 100644 index 0000000..2e27f57 Binary files /dev/null and b/evo-admin/target/classes/com/evo/generator/mapper/GenTableMapper.class differ diff --git a/evo-admin/target/classes/com/evo/generator/service/GenTableColumnServiceImpl.class b/evo-admin/target/classes/com/evo/generator/service/GenTableColumnServiceImpl.class new file mode 100644 index 0000000..5af6bce Binary files /dev/null and b/evo-admin/target/classes/com/evo/generator/service/GenTableColumnServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/generator/service/GenTableServiceImpl.class b/evo-admin/target/classes/com/evo/generator/service/GenTableServiceImpl.class new file mode 100644 index 0000000..125529d Binary files /dev/null and b/evo-admin/target/classes/com/evo/generator/service/GenTableServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/generator/service/IGenTableColumnService.class b/evo-admin/target/classes/com/evo/generator/service/IGenTableColumnService.class new file mode 100644 index 0000000..58e38a5 Binary files /dev/null and b/evo-admin/target/classes/com/evo/generator/service/IGenTableColumnService.class differ diff --git a/evo-admin/target/classes/com/evo/generator/service/IGenTableService.class b/evo-admin/target/classes/com/evo/generator/service/IGenTableService.class new file mode 100644 index 0000000..af78d82 Binary files /dev/null and b/evo-admin/target/classes/com/evo/generator/service/IGenTableService.class differ diff --git a/evo-admin/target/classes/com/evo/generator/util/GenUtils.class b/evo-admin/target/classes/com/evo/generator/util/GenUtils.class new file mode 100644 index 0000000..32f4be9 Binary files /dev/null and b/evo-admin/target/classes/com/evo/generator/util/GenUtils.class differ diff --git a/evo-admin/target/classes/com/evo/generator/util/VelocityInitializer.class b/evo-admin/target/classes/com/evo/generator/util/VelocityInitializer.class new file mode 100644 index 0000000..de3200d Binary files /dev/null and b/evo-admin/target/classes/com/evo/generator/util/VelocityInitializer.class differ diff --git a/evo-admin/target/classes/com/evo/generator/util/VelocityUtils.class b/evo-admin/target/classes/com/evo/generator/util/VelocityUtils.class new file mode 100644 index 0000000..2ea6160 Binary files /dev/null and b/evo-admin/target/classes/com/evo/generator/util/VelocityUtils.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/controller/RzBusinessTripController.class b/evo-admin/target/classes/com/evo/personnelMatters/controller/RzBusinessTripController.class new file mode 100644 index 0000000..e627687 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/controller/RzBusinessTripController.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/controller/RzBusinessTripDetailController.class b/evo-admin/target/classes/com/evo/personnelMatters/controller/RzBusinessTripDetailController.class new file mode 100644 index 0000000..0c3c948 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/controller/RzBusinessTripDetailController.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/controller/RzHolidayController.class b/evo-admin/target/classes/com/evo/personnelMatters/controller/RzHolidayController.class new file mode 100644 index 0000000..5604674 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/controller/RzHolidayController.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/controller/RzInterviewerController.class b/evo-admin/target/classes/com/evo/personnelMatters/controller/RzInterviewerController.class new file mode 100644 index 0000000..2054cbf Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/controller/RzInterviewerController.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/controller/RzLeaveController.class b/evo-admin/target/classes/com/evo/personnelMatters/controller/RzLeaveController.class new file mode 100644 index 0000000..1ce19bb Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/controller/RzLeaveController.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/controller/RzLeaveDetailController.class b/evo-admin/target/classes/com/evo/personnelMatters/controller/RzLeaveDetailController.class new file mode 100644 index 0000000..fcdcfd6 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/controller/RzLeaveDetailController.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/controller/RzOverTimeController.class b/evo-admin/target/classes/com/evo/personnelMatters/controller/RzOverTimeController.class new file mode 100644 index 0000000..280b41c Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/controller/RzOverTimeController.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/controller/RzOverTimeDetailController.class b/evo-admin/target/classes/com/evo/personnelMatters/controller/RzOverTimeDetailController.class new file mode 100644 index 0000000..974dc6a Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/controller/RzOverTimeDetailController.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/controller/RzSubsidyController.class b/evo-admin/target/classes/com/evo/personnelMatters/controller/RzSubsidyController.class new file mode 100644 index 0000000..39464d8 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/controller/RzSubsidyController.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/controller/SpecialOverTimeController.class b/evo-admin/target/classes/com/evo/personnelMatters/controller/SpecialOverTimeController.class new file mode 100644 index 0000000..5d12c9a Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/controller/SpecialOverTimeController.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/domain/EqOverStaff.class b/evo-admin/target/classes/com/evo/personnelMatters/domain/EqOverStaff.class new file mode 100644 index 0000000..877ca5d Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/domain/EqOverStaff.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/domain/RzBusinessTrip.class b/evo-admin/target/classes/com/evo/personnelMatters/domain/RzBusinessTrip.class new file mode 100644 index 0000000..f2d991c Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/domain/RzBusinessTrip.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/domain/RzBusinessTripDetail.class b/evo-admin/target/classes/com/evo/personnelMatters/domain/RzBusinessTripDetail.class new file mode 100644 index 0000000..75a456c Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/domain/RzBusinessTripDetail.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/domain/RzHoliday.class b/evo-admin/target/classes/com/evo/personnelMatters/domain/RzHoliday.class new file mode 100644 index 0000000..d6f393d Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/domain/RzHoliday.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/domain/RzInterviewer.class b/evo-admin/target/classes/com/evo/personnelMatters/domain/RzInterviewer.class new file mode 100644 index 0000000..bb23311 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/domain/RzInterviewer.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/domain/RzLeave.class b/evo-admin/target/classes/com/evo/personnelMatters/domain/RzLeave.class new file mode 100644 index 0000000..d132bc3 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/domain/RzLeave.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/domain/RzLeaveDetail.class b/evo-admin/target/classes/com/evo/personnelMatters/domain/RzLeaveDetail.class new file mode 100644 index 0000000..ad87df3 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/domain/RzLeaveDetail.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/domain/RzOverTime.class b/evo-admin/target/classes/com/evo/personnelMatters/domain/RzOverTime.class new file mode 100644 index 0000000..0b0d563 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/domain/RzOverTime.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/domain/RzOverTimeDetail.class b/evo-admin/target/classes/com/evo/personnelMatters/domain/RzOverTimeDetail.class new file mode 100644 index 0000000..81c182a Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/domain/RzOverTimeDetail.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/domain/RzSubsidy.class b/evo-admin/target/classes/com/evo/personnelMatters/domain/RzSubsidy.class new file mode 100644 index 0000000..8033580 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/domain/RzSubsidy.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/domain/SpecialOverTime.class b/evo-admin/target/classes/com/evo/personnelMatters/domain/SpecialOverTime.class new file mode 100644 index 0000000..b280667 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/domain/SpecialOverTime.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/mapper/BsOverTimeMapper.class b/evo-admin/target/classes/com/evo/personnelMatters/mapper/BsOverTimeMapper.class new file mode 100644 index 0000000..53cac6e Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/mapper/BsOverTimeMapper.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/mapper/EqOverStaffMapper.class b/evo-admin/target/classes/com/evo/personnelMatters/mapper/EqOverStaffMapper.class new file mode 100644 index 0000000..5c62d90 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/mapper/EqOverStaffMapper.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzBusinessTripDetailMapper.class b/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzBusinessTripDetailMapper.class new file mode 100644 index 0000000..0e85f9c Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzBusinessTripDetailMapper.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzBusinessTripMapper.class b/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzBusinessTripMapper.class new file mode 100644 index 0000000..2a12749 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzBusinessTripMapper.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzHolidayMapper.class b/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzHolidayMapper.class new file mode 100644 index 0000000..fb25a0c Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzHolidayMapper.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzInterviewerMapper.class b/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzInterviewerMapper.class new file mode 100644 index 0000000..3ddc8a0 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzInterviewerMapper.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzLeaveDetailMapper.class b/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzLeaveDetailMapper.class new file mode 100644 index 0000000..06f9a93 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzLeaveDetailMapper.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzLeaveMapper.class b/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzLeaveMapper.class new file mode 100644 index 0000000..c603c8f Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzLeaveMapper.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzOverTimeDetailMapper.class b/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzOverTimeDetailMapper.class new file mode 100644 index 0000000..0cb8cbf Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzOverTimeDetailMapper.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzOverTimeMapper.class b/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzOverTimeMapper.class new file mode 100644 index 0000000..a81def4 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzOverTimeMapper.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzSubsidyMapper.class b/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzSubsidyMapper.class new file mode 100644 index 0000000..3ea4f21 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/mapper/RzSubsidyMapper.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/service/IRzBusinessTripDetailService.class b/evo-admin/target/classes/com/evo/personnelMatters/service/IRzBusinessTripDetailService.class new file mode 100644 index 0000000..3392a04 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/service/IRzBusinessTripDetailService.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/service/IRzBusinessTripService.class b/evo-admin/target/classes/com/evo/personnelMatters/service/IRzBusinessTripService.class new file mode 100644 index 0000000..ad8320c Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/service/IRzBusinessTripService.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/service/IRzHolidayService.class b/evo-admin/target/classes/com/evo/personnelMatters/service/IRzHolidayService.class new file mode 100644 index 0000000..862ab0d Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/service/IRzHolidayService.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/service/IRzInterviewerService.class b/evo-admin/target/classes/com/evo/personnelMatters/service/IRzInterviewerService.class new file mode 100644 index 0000000..b072bab Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/service/IRzInterviewerService.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/service/IRzLeaveDetailService.class b/evo-admin/target/classes/com/evo/personnelMatters/service/IRzLeaveDetailService.class new file mode 100644 index 0000000..e7b0814 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/service/IRzLeaveDetailService.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/service/IRzLeaveService.class b/evo-admin/target/classes/com/evo/personnelMatters/service/IRzLeaveService.class new file mode 100644 index 0000000..179d52f Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/service/IRzLeaveService.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/service/IRzOverTimeDetailService.class b/evo-admin/target/classes/com/evo/personnelMatters/service/IRzOverTimeDetailService.class new file mode 100644 index 0000000..71b5e2f Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/service/IRzOverTimeDetailService.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/service/IRzOverTimeService.class b/evo-admin/target/classes/com/evo/personnelMatters/service/IRzOverTimeService.class new file mode 100644 index 0000000..2bca7ad Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/service/IRzOverTimeService.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/service/IRzSubsidyService.class b/evo-admin/target/classes/com/evo/personnelMatters/service/IRzSubsidyService.class new file mode 100644 index 0000000..c3a2e73 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/service/IRzSubsidyService.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/service/SpecialOverTimeService.class b/evo-admin/target/classes/com/evo/personnelMatters/service/SpecialOverTimeService.class new file mode 100644 index 0000000..f60c4a2 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/service/SpecialOverTimeService.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzBusinessTripDetailServiceImpl.class b/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzBusinessTripDetailServiceImpl.class new file mode 100644 index 0000000..28dd25b Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzBusinessTripDetailServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzBusinessTripServiceImpl.class b/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzBusinessTripServiceImpl.class new file mode 100644 index 0000000..120e51c Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzBusinessTripServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzHolidayServiceImpl.class b/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzHolidayServiceImpl.class new file mode 100644 index 0000000..de0708a Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzHolidayServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzInterviewerServiceImpl.class b/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzInterviewerServiceImpl.class new file mode 100644 index 0000000..19efd78 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzInterviewerServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzLeaveDetailServiceImpl.class b/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzLeaveDetailServiceImpl.class new file mode 100644 index 0000000..f16b730 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzLeaveDetailServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzLeaveServiceImpl.class b/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzLeaveServiceImpl.class new file mode 100644 index 0000000..2702908 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzLeaveServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzOverTimeDetailServiceImpl.class b/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzOverTimeDetailServiceImpl.class new file mode 100644 index 0000000..b77d808 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzOverTimeDetailServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzOverTimeServiceImpl.class b/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzOverTimeServiceImpl.class new file mode 100644 index 0000000..adbda3d Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzOverTimeServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzSubsidyServiceImpl.class b/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzSubsidyServiceImpl.class new file mode 100644 index 0000000..7c1ba37 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/service/impl/RzSubsidyServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/personnelMatters/service/impl/SpecialOverTimeServiceImpl.class b/evo-admin/target/classes/com/evo/personnelMatters/service/impl/SpecialOverTimeServiceImpl.class new file mode 100644 index 0000000..afedf06 Binary files /dev/null and b/evo-admin/target/classes/com/evo/personnelMatters/service/impl/SpecialOverTimeServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/restaurant/controller/RzRestaurantDetailController.class b/evo-admin/target/classes/com/evo/restaurant/controller/RzRestaurantDetailController.class new file mode 100644 index 0000000..d7b6aaf Binary files /dev/null and b/evo-admin/target/classes/com/evo/restaurant/controller/RzRestaurantDetailController.class differ diff --git a/evo-admin/target/classes/com/evo/restaurant/controller/RzRestaurantImagesController.class b/evo-admin/target/classes/com/evo/restaurant/controller/RzRestaurantImagesController.class new file mode 100644 index 0000000..a18654b Binary files /dev/null and b/evo-admin/target/classes/com/evo/restaurant/controller/RzRestaurantImagesController.class differ diff --git a/evo-admin/target/classes/com/evo/restaurant/controller/RzRestaurantStatisticsController.class b/evo-admin/target/classes/com/evo/restaurant/controller/RzRestaurantStatisticsController.class new file mode 100644 index 0000000..45cecdd Binary files /dev/null and b/evo-admin/target/classes/com/evo/restaurant/controller/RzRestaurantStatisticsController.class differ diff --git a/evo-admin/target/classes/com/evo/restaurant/domain/RzRestaurantDetail.class b/evo-admin/target/classes/com/evo/restaurant/domain/RzRestaurantDetail.class new file mode 100644 index 0000000..3bcd9c2 Binary files /dev/null and b/evo-admin/target/classes/com/evo/restaurant/domain/RzRestaurantDetail.class differ diff --git a/evo-admin/target/classes/com/evo/restaurant/domain/RzRestaurantImages.class b/evo-admin/target/classes/com/evo/restaurant/domain/RzRestaurantImages.class new file mode 100644 index 0000000..a54d550 Binary files /dev/null and b/evo-admin/target/classes/com/evo/restaurant/domain/RzRestaurantImages.class differ diff --git a/evo-admin/target/classes/com/evo/restaurant/domain/RzRestaurantStatistics.class b/evo-admin/target/classes/com/evo/restaurant/domain/RzRestaurantStatistics.class new file mode 100644 index 0000000..db714ac Binary files /dev/null and b/evo-admin/target/classes/com/evo/restaurant/domain/RzRestaurantStatistics.class differ diff --git a/evo-admin/target/classes/com/evo/restaurant/domain/vo/RestaurantData.class b/evo-admin/target/classes/com/evo/restaurant/domain/vo/RestaurantData.class new file mode 100644 index 0000000..73fe13e Binary files /dev/null and b/evo-admin/target/classes/com/evo/restaurant/domain/vo/RestaurantData.class differ diff --git a/evo-admin/target/classes/com/evo/restaurant/domain/vo/RestaurantVo.class b/evo-admin/target/classes/com/evo/restaurant/domain/vo/RestaurantVo.class new file mode 100644 index 0000000..7e2f7fb Binary files /dev/null and b/evo-admin/target/classes/com/evo/restaurant/domain/vo/RestaurantVo.class differ diff --git a/evo-admin/target/classes/com/evo/restaurant/mapper/RzRestaurantDetailMapper.class b/evo-admin/target/classes/com/evo/restaurant/mapper/RzRestaurantDetailMapper.class new file mode 100644 index 0000000..93d7150 Binary files /dev/null and b/evo-admin/target/classes/com/evo/restaurant/mapper/RzRestaurantDetailMapper.class differ diff --git a/evo-admin/target/classes/com/evo/restaurant/mapper/RzRestaurantImagesMapper.class b/evo-admin/target/classes/com/evo/restaurant/mapper/RzRestaurantImagesMapper.class new file mode 100644 index 0000000..50adaa5 Binary files /dev/null and b/evo-admin/target/classes/com/evo/restaurant/mapper/RzRestaurantImagesMapper.class differ diff --git a/evo-admin/target/classes/com/evo/restaurant/mapper/RzRestaurantStatisticsMapper.class b/evo-admin/target/classes/com/evo/restaurant/mapper/RzRestaurantStatisticsMapper.class new file mode 100644 index 0000000..27e000d Binary files /dev/null and b/evo-admin/target/classes/com/evo/restaurant/mapper/RzRestaurantStatisticsMapper.class differ diff --git a/evo-admin/target/classes/com/evo/restaurant/service/IRzRestaurantDetailService.class b/evo-admin/target/classes/com/evo/restaurant/service/IRzRestaurantDetailService.class new file mode 100644 index 0000000..3e442e3 Binary files /dev/null and b/evo-admin/target/classes/com/evo/restaurant/service/IRzRestaurantDetailService.class differ diff --git a/evo-admin/target/classes/com/evo/restaurant/service/IRzRestaurantImagesService.class b/evo-admin/target/classes/com/evo/restaurant/service/IRzRestaurantImagesService.class new file mode 100644 index 0000000..11f45e2 Binary files /dev/null and b/evo-admin/target/classes/com/evo/restaurant/service/IRzRestaurantImagesService.class differ diff --git a/evo-admin/target/classes/com/evo/restaurant/service/IRzRestaurantStatisticsService.class b/evo-admin/target/classes/com/evo/restaurant/service/IRzRestaurantStatisticsService.class new file mode 100644 index 0000000..ee7d79b Binary files /dev/null and b/evo-admin/target/classes/com/evo/restaurant/service/IRzRestaurantStatisticsService.class differ diff --git a/evo-admin/target/classes/com/evo/restaurant/service/impl/RzRestaurantDetailServiceImpl.class b/evo-admin/target/classes/com/evo/restaurant/service/impl/RzRestaurantDetailServiceImpl.class new file mode 100644 index 0000000..beb3ad2 Binary files /dev/null and b/evo-admin/target/classes/com/evo/restaurant/service/impl/RzRestaurantDetailServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/restaurant/service/impl/RzRestaurantImagesServiceImpl.class b/evo-admin/target/classes/com/evo/restaurant/service/impl/RzRestaurantImagesServiceImpl.class new file mode 100644 index 0000000..24ba1ae Binary files /dev/null and b/evo-admin/target/classes/com/evo/restaurant/service/impl/RzRestaurantImagesServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/restaurant/service/impl/RzRestaurantStatisticsServiceImpl.class b/evo-admin/target/classes/com/evo/restaurant/service/impl/RzRestaurantStatisticsServiceImpl.class new file mode 100644 index 0000000..5ad32c1 Binary files /dev/null and b/evo-admin/target/classes/com/evo/restaurant/service/impl/RzRestaurantStatisticsServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/restaurant/utils/ExcelUtilCy$1.class b/evo-admin/target/classes/com/evo/restaurant/utils/ExcelUtilCy$1.class new file mode 100644 index 0000000..bc0a8f8 Binary files /dev/null and b/evo-admin/target/classes/com/evo/restaurant/utils/ExcelUtilCy$1.class differ diff --git a/evo-admin/target/classes/com/evo/restaurant/utils/ExcelUtilCy.class b/evo-admin/target/classes/com/evo/restaurant/utils/ExcelUtilCy.class new file mode 100644 index 0000000..09f0d8f Binary files /dev/null and b/evo-admin/target/classes/com/evo/restaurant/utils/ExcelUtilCy.class differ diff --git a/evo-admin/target/classes/com/evo/system/controller/CacheController.class b/evo-admin/target/classes/com/evo/system/controller/CacheController.class new file mode 100644 index 0000000..d691bd4 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/controller/CacheController.class differ diff --git a/evo-admin/target/classes/com/evo/system/controller/CommonController.class b/evo-admin/target/classes/com/evo/system/controller/CommonController.class new file mode 100644 index 0000000..9260cb0 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/controller/CommonController.class differ diff --git a/evo-admin/target/classes/com/evo/system/controller/SysDeptController.class b/evo-admin/target/classes/com/evo/system/controller/SysDeptController.class new file mode 100644 index 0000000..f3c6ee6 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/controller/SysDeptController.class differ diff --git a/evo-admin/target/classes/com/evo/system/controller/SysDictDataController.class b/evo-admin/target/classes/com/evo/system/controller/SysDictDataController.class new file mode 100644 index 0000000..0fac9eb Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/controller/SysDictDataController.class differ diff --git a/evo-admin/target/classes/com/evo/system/controller/SysDictTypeController.class b/evo-admin/target/classes/com/evo/system/controller/SysDictTypeController.class new file mode 100644 index 0000000..df4b6d7 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/controller/SysDictTypeController.class differ diff --git a/evo-admin/target/classes/com/evo/system/controller/SysIndexController.class b/evo-admin/target/classes/com/evo/system/controller/SysIndexController.class new file mode 100644 index 0000000..474d08e Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/controller/SysIndexController.class differ diff --git a/evo-admin/target/classes/com/evo/system/controller/SysLoginController.class b/evo-admin/target/classes/com/evo/system/controller/SysLoginController.class new file mode 100644 index 0000000..2b9ef22 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/controller/SysLoginController.class differ diff --git a/evo-admin/target/classes/com/evo/system/controller/SysLogininforController.class b/evo-admin/target/classes/com/evo/system/controller/SysLogininforController.class new file mode 100644 index 0000000..0554de3 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/controller/SysLogininforController.class differ diff --git a/evo-admin/target/classes/com/evo/system/controller/SysMenuController.class b/evo-admin/target/classes/com/evo/system/controller/SysMenuController.class new file mode 100644 index 0000000..38c1201 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/controller/SysMenuController.class differ diff --git a/evo-admin/target/classes/com/evo/system/controller/SysOperlogController.class b/evo-admin/target/classes/com/evo/system/controller/SysOperlogController.class new file mode 100644 index 0000000..445b805 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/controller/SysOperlogController.class differ diff --git a/evo-admin/target/classes/com/evo/system/controller/SysProfileController.class b/evo-admin/target/classes/com/evo/system/controller/SysProfileController.class new file mode 100644 index 0000000..60f4824 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/controller/SysProfileController.class differ diff --git a/evo-admin/target/classes/com/evo/system/controller/SysRoleController.class b/evo-admin/target/classes/com/evo/system/controller/SysRoleController.class new file mode 100644 index 0000000..b433a8a Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/controller/SysRoleController.class differ diff --git a/evo-admin/target/classes/com/evo/system/controller/SysStaffController.class b/evo-admin/target/classes/com/evo/system/controller/SysStaffController.class new file mode 100644 index 0000000..a1dc058 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/controller/SysStaffController.class differ diff --git a/evo-admin/target/classes/com/evo/system/controller/SysStaffDetailController.class b/evo-admin/target/classes/com/evo/system/controller/SysStaffDetailController.class new file mode 100644 index 0000000..8f46268 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/controller/SysStaffDetailController.class differ diff --git a/evo-admin/target/classes/com/evo/system/controller/SysUserController.class b/evo-admin/target/classes/com/evo/system/controller/SysUserController.class new file mode 100644 index 0000000..72be20e Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/controller/SysUserController.class differ diff --git a/evo-admin/target/classes/com/evo/system/controller/SysUserOnlineController.class b/evo-admin/target/classes/com/evo/system/controller/SysUserOnlineController.class new file mode 100644 index 0000000..4c544f2 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/controller/SysUserOnlineController.class differ diff --git a/evo-admin/target/classes/com/evo/system/domain/SysCache.class b/evo-admin/target/classes/com/evo/system/domain/SysCache.class new file mode 100644 index 0000000..c9fda7a Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/domain/SysCache.class differ diff --git a/evo-admin/target/classes/com/evo/system/domain/SysLogininfor.class b/evo-admin/target/classes/com/evo/system/domain/SysLogininfor.class new file mode 100644 index 0000000..d4c2aad Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/domain/SysLogininfor.class differ diff --git a/evo-admin/target/classes/com/evo/system/domain/SysOperLog.class b/evo-admin/target/classes/com/evo/system/domain/SysOperLog.class new file mode 100644 index 0000000..3b607e1 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/domain/SysOperLog.class differ diff --git a/evo-admin/target/classes/com/evo/system/domain/SysRoleDept.class b/evo-admin/target/classes/com/evo/system/domain/SysRoleDept.class new file mode 100644 index 0000000..3d2ad1c Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/domain/SysRoleDept.class differ diff --git a/evo-admin/target/classes/com/evo/system/domain/SysRoleMenu.class b/evo-admin/target/classes/com/evo/system/domain/SysRoleMenu.class new file mode 100644 index 0000000..28c1c13 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/domain/SysRoleMenu.class differ diff --git a/evo-admin/target/classes/com/evo/system/domain/SysStaff.class b/evo-admin/target/classes/com/evo/system/domain/SysStaff.class new file mode 100644 index 0000000..5124a44 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/domain/SysStaff.class differ diff --git a/evo-admin/target/classes/com/evo/system/domain/SysStaffDetail.class b/evo-admin/target/classes/com/evo/system/domain/SysStaffDetail.class new file mode 100644 index 0000000..ed92c24 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/domain/SysStaffDetail.class differ diff --git a/evo-admin/target/classes/com/evo/system/domain/SysUserOnline.class b/evo-admin/target/classes/com/evo/system/domain/SysUserOnline.class new file mode 100644 index 0000000..5a35835 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/domain/SysUserOnline.class differ diff --git a/evo-admin/target/classes/com/evo/system/domain/SysUserRole.class b/evo-admin/target/classes/com/evo/system/domain/SysUserRole.class new file mode 100644 index 0000000..02aa01d Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/domain/SysUserRole.class differ diff --git a/evo-admin/target/classes/com/evo/system/domain/vo/MetaVo.class b/evo-admin/target/classes/com/evo/system/domain/vo/MetaVo.class new file mode 100644 index 0000000..bb2992c Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/domain/vo/MetaVo.class differ diff --git a/evo-admin/target/classes/com/evo/system/domain/vo/RouterVo.class b/evo-admin/target/classes/com/evo/system/domain/vo/RouterVo.class new file mode 100644 index 0000000..0adc69f Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/domain/vo/RouterVo.class differ diff --git a/evo-admin/target/classes/com/evo/system/domain/vo/SysStaffVo.class b/evo-admin/target/classes/com/evo/system/domain/vo/SysStaffVo.class new file mode 100644 index 0000000..56006f9 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/domain/vo/SysStaffVo.class differ diff --git a/evo-admin/target/classes/com/evo/system/mapper/SysDeptMapper.class b/evo-admin/target/classes/com/evo/system/mapper/SysDeptMapper.class new file mode 100644 index 0000000..9b44c6e Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/mapper/SysDeptMapper.class differ diff --git a/evo-admin/target/classes/com/evo/system/mapper/SysDictDataMapper.class b/evo-admin/target/classes/com/evo/system/mapper/SysDictDataMapper.class new file mode 100644 index 0000000..4fd2156 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/mapper/SysDictDataMapper.class differ diff --git a/evo-admin/target/classes/com/evo/system/mapper/SysDictTypeMapper.class b/evo-admin/target/classes/com/evo/system/mapper/SysDictTypeMapper.class new file mode 100644 index 0000000..79495e6 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/mapper/SysDictTypeMapper.class differ diff --git a/evo-admin/target/classes/com/evo/system/mapper/SysLogininforMapper.class b/evo-admin/target/classes/com/evo/system/mapper/SysLogininforMapper.class new file mode 100644 index 0000000..617e9ea Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/mapper/SysLogininforMapper.class differ diff --git a/evo-admin/target/classes/com/evo/system/mapper/SysMenuMapper.class b/evo-admin/target/classes/com/evo/system/mapper/SysMenuMapper.class new file mode 100644 index 0000000..ce74009 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/mapper/SysMenuMapper.class differ diff --git a/evo-admin/target/classes/com/evo/system/mapper/SysOperLogMapper.class b/evo-admin/target/classes/com/evo/system/mapper/SysOperLogMapper.class new file mode 100644 index 0000000..d85e974 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/mapper/SysOperLogMapper.class differ diff --git a/evo-admin/target/classes/com/evo/system/mapper/SysRoleDeptMapper.class b/evo-admin/target/classes/com/evo/system/mapper/SysRoleDeptMapper.class new file mode 100644 index 0000000..65a0127 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/mapper/SysRoleDeptMapper.class differ diff --git a/evo-admin/target/classes/com/evo/system/mapper/SysRoleMapper.class b/evo-admin/target/classes/com/evo/system/mapper/SysRoleMapper.class new file mode 100644 index 0000000..a125594 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/mapper/SysRoleMapper.class differ diff --git a/evo-admin/target/classes/com/evo/system/mapper/SysRoleMenuMapper.class b/evo-admin/target/classes/com/evo/system/mapper/SysRoleMenuMapper.class new file mode 100644 index 0000000..4ddf240 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/mapper/SysRoleMenuMapper.class differ diff --git a/evo-admin/target/classes/com/evo/system/mapper/SysStaffDetailMapper.class b/evo-admin/target/classes/com/evo/system/mapper/SysStaffDetailMapper.class new file mode 100644 index 0000000..542a905 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/mapper/SysStaffDetailMapper.class differ diff --git a/evo-admin/target/classes/com/evo/system/mapper/SysStaffMapper.class b/evo-admin/target/classes/com/evo/system/mapper/SysStaffMapper.class new file mode 100644 index 0000000..851c916 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/mapper/SysStaffMapper.class differ diff --git a/evo-admin/target/classes/com/evo/system/mapper/SysUserMapper.class b/evo-admin/target/classes/com/evo/system/mapper/SysUserMapper.class new file mode 100644 index 0000000..a98b579 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/mapper/SysUserMapper.class differ diff --git a/evo-admin/target/classes/com/evo/system/mapper/SysUserRoleMapper.class b/evo-admin/target/classes/com/evo/system/mapper/SysUserRoleMapper.class new file mode 100644 index 0000000..98b41d6 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/mapper/SysUserRoleMapper.class differ diff --git a/evo-admin/target/classes/com/evo/system/service/ISysDeptService.class b/evo-admin/target/classes/com/evo/system/service/ISysDeptService.class new file mode 100644 index 0000000..2320efb Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/service/ISysDeptService.class differ diff --git a/evo-admin/target/classes/com/evo/system/service/ISysDictDataService.class b/evo-admin/target/classes/com/evo/system/service/ISysDictDataService.class new file mode 100644 index 0000000..fd6756e Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/service/ISysDictDataService.class differ diff --git a/evo-admin/target/classes/com/evo/system/service/ISysDictTypeService.class b/evo-admin/target/classes/com/evo/system/service/ISysDictTypeService.class new file mode 100644 index 0000000..c4b79f1 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/service/ISysDictTypeService.class differ diff --git a/evo-admin/target/classes/com/evo/system/service/ISysLogininforService.class b/evo-admin/target/classes/com/evo/system/service/ISysLogininforService.class new file mode 100644 index 0000000..eb963be Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/service/ISysLogininforService.class differ diff --git a/evo-admin/target/classes/com/evo/system/service/ISysMenuService.class b/evo-admin/target/classes/com/evo/system/service/ISysMenuService.class new file mode 100644 index 0000000..693e57b Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/service/ISysMenuService.class differ diff --git a/evo-admin/target/classes/com/evo/system/service/ISysOperLogService.class b/evo-admin/target/classes/com/evo/system/service/ISysOperLogService.class new file mode 100644 index 0000000..caa44f2 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/service/ISysOperLogService.class differ diff --git a/evo-admin/target/classes/com/evo/system/service/ISysRoleService.class b/evo-admin/target/classes/com/evo/system/service/ISysRoleService.class new file mode 100644 index 0000000..031fee0 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/service/ISysRoleService.class differ diff --git a/evo-admin/target/classes/com/evo/system/service/ISysStaffDetailService.class b/evo-admin/target/classes/com/evo/system/service/ISysStaffDetailService.class new file mode 100644 index 0000000..a0c10c7 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/service/ISysStaffDetailService.class differ diff --git a/evo-admin/target/classes/com/evo/system/service/ISysStaffService.class b/evo-admin/target/classes/com/evo/system/service/ISysStaffService.class new file mode 100644 index 0000000..6e41330 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/service/ISysStaffService.class differ diff --git a/evo-admin/target/classes/com/evo/system/service/ISysUserOnlineService.class b/evo-admin/target/classes/com/evo/system/service/ISysUserOnlineService.class new file mode 100644 index 0000000..5c9ce0d Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/service/ISysUserOnlineService.class differ diff --git a/evo-admin/target/classes/com/evo/system/service/ISysUserService.class b/evo-admin/target/classes/com/evo/system/service/ISysUserService.class new file mode 100644 index 0000000..961f883 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/service/ISysUserService.class differ diff --git a/evo-admin/target/classes/com/evo/system/service/impl/SysDeptServiceImpl.class b/evo-admin/target/classes/com/evo/system/service/impl/SysDeptServiceImpl.class new file mode 100644 index 0000000..ca39d4c Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/service/impl/SysDeptServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/system/service/impl/SysDictDataServiceImpl.class b/evo-admin/target/classes/com/evo/system/service/impl/SysDictDataServiceImpl.class new file mode 100644 index 0000000..0591625 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/service/impl/SysDictDataServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/system/service/impl/SysDictTypeServiceImpl.class b/evo-admin/target/classes/com/evo/system/service/impl/SysDictTypeServiceImpl.class new file mode 100644 index 0000000..66569c3 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/service/impl/SysDictTypeServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/system/service/impl/SysLogininforServiceImpl.class b/evo-admin/target/classes/com/evo/system/service/impl/SysLogininforServiceImpl.class new file mode 100644 index 0000000..e926aba Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/service/impl/SysLogininforServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/system/service/impl/SysMenuServiceImpl.class b/evo-admin/target/classes/com/evo/system/service/impl/SysMenuServiceImpl.class new file mode 100644 index 0000000..3c42b67 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/service/impl/SysMenuServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/system/service/impl/SysOperLogServiceImpl.class b/evo-admin/target/classes/com/evo/system/service/impl/SysOperLogServiceImpl.class new file mode 100644 index 0000000..b7bc867 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/service/impl/SysOperLogServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/system/service/impl/SysRoleServiceImpl.class b/evo-admin/target/classes/com/evo/system/service/impl/SysRoleServiceImpl.class new file mode 100644 index 0000000..b1fd821 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/service/impl/SysRoleServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/system/service/impl/SysStaffDetailServiceImpl.class b/evo-admin/target/classes/com/evo/system/service/impl/SysStaffDetailServiceImpl.class new file mode 100644 index 0000000..35b2a56 Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/service/impl/SysStaffDetailServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/system/service/impl/SysStaffServiceImpl.class b/evo-admin/target/classes/com/evo/system/service/impl/SysStaffServiceImpl.class new file mode 100644 index 0000000..c8c91bb Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/service/impl/SysStaffServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/system/service/impl/SysUserOnlineServiceImpl.class b/evo-admin/target/classes/com/evo/system/service/impl/SysUserOnlineServiceImpl.class new file mode 100644 index 0000000..656a58e Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/service/impl/SysUserOnlineServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/system/service/impl/SysUserServiceImpl.class b/evo-admin/target/classes/com/evo/system/service/impl/SysUserServiceImpl.class new file mode 100644 index 0000000..547f8dd Binary files /dev/null and b/evo-admin/target/classes/com/evo/system/service/impl/SysUserServiceImpl.class differ diff --git a/evo-admin/target/classes/com/evo/task/TaskController.class b/evo-admin/target/classes/com/evo/task/TaskController.class new file mode 100644 index 0000000..c801cd9 Binary files /dev/null and b/evo-admin/target/classes/com/evo/task/TaskController.class differ diff --git a/evo-admin/target/classes/com/evo/utils/DateUtil.class b/evo-admin/target/classes/com/evo/utils/DateUtil.class new file mode 100644 index 0000000..4feeefd Binary files /dev/null and b/evo-admin/target/classes/com/evo/utils/DateUtil.class differ diff --git a/evo-admin/target/classes/generator.yml b/evo-admin/target/classes/generator.yml new file mode 100644 index 0000000..65c1584 --- /dev/null +++ b/evo-admin/target/classes/generator.yml @@ -0,0 +1,10 @@ +# 浠g爜鐢熸垚 +gen: + # 浣滆 + author: evo + # 榛樿鐢熸垚鍖呰矾寰 system 闇鏀规垚鑷繁鐨勬ā鍧楀悕绉 濡 system monitor tool + packageName: com.evo.product + # 鑷姩鍘婚櫎琛ㄥ墠缂锛岄粯璁ゆ槸false + autoRemovePre: false + # 琛ㄥ墠缂锛堢敓鎴愮被鍚嶄笉浼氬寘鍚〃鍓嶇紑锛屽涓敤閫楀彿鍒嗛殧锛 + tablePrefix: product_ diff --git a/evo-admin/target/classes/i18n/messages.properties b/evo-admin/target/classes/i18n/messages.properties new file mode 100644 index 0000000..93de005 --- /dev/null +++ b/evo-admin/target/classes/i18n/messages.properties @@ -0,0 +1,38 @@ +#閿欒娑堟伅 +not.null=* 蹇呴』濉啓 +user.jcaptcha.error=楠岃瘉鐮侀敊璇 +user.jcaptcha.expire=楠岃瘉鐮佸凡澶辨晥 +user.not.exists=鐢ㄦ埛涓嶅瓨鍦/瀵嗙爜閿欒 +user.password.not.match=鐢ㄦ埛涓嶅瓨鍦/瀵嗙爜閿欒 +user.password.retry.limit.count=瀵嗙爜杈撳叆閿欒{0}娆 +user.password.retry.limit.exceed=瀵嗙爜杈撳叆閿欒{0}娆★紝甯愭埛閿佸畾{1}鍒嗛挓 +user.password.delete=瀵逛笉璧凤紝鎮ㄧ殑璐﹀彿宸茶鍒犻櫎 +user.blocked=鐢ㄦ埛宸插皝绂侊紝璇疯仈绯荤鐞嗗憳 +role.blocked=瑙掕壊宸插皝绂侊紝璇疯仈绯荤鐞嗗憳 +login.blocked=寰堥仐鎲撅紝璁块棶IP宸茶鍒楀叆绯荤粺榛戝悕鍗 +user.logout.success=閫鍑烘垚鍔 + +length.not.valid=闀垮害蹇呴』鍦▄min}鍒皗max}涓瓧绗︿箣闂 + +user.username.not.valid=* 2鍒20涓眽瀛椼佸瓧姣嶃佹暟瀛楁垨涓嬪垝绾跨粍鎴愶紝涓斿繀椤讳互闈炴暟瀛楀紑澶 +user.password.not.valid=* 5-50涓瓧绗 + +user.email.not.valid=閭鏍煎紡閿欒 +user.mobile.phone.number.not.valid=鎵嬫満鍙锋牸寮忛敊璇 +user.login.success=鐧诲綍鎴愬姛 +user.register.success=娉ㄥ唽鎴愬姛 +user.notfound=璇烽噸鏂扮櫥褰 +user.forcelogout=绠$悊鍛樺己鍒堕鍑猴紝璇烽噸鏂扮櫥褰 +user.unknown.error=鏈煡閿欒锛岃閲嶆柊鐧诲綍 + +##鏂囦欢涓婁紶娑堟伅 +upload.exceed.maxSize=涓婁紶鐨勬枃浠跺ぇ灏忚秴鍑洪檺鍒剁殑鏂囦欢澶у皬锛
鍏佽鐨勬枃浠舵渶澶уぇ灏忔槸锛歿0}MB锛 +upload.filename.exceed.length=涓婁紶鐨勬枃浠跺悕鏈闀縶0}涓瓧绗 + +##鏉冮檺 +no.permission=鎮ㄦ病鏈夋暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄 [{0}] +no.create.permission=鎮ㄦ病鏈夊垱寤烘暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄 [{0}] +no.update.permission=鎮ㄦ病鏈変慨鏀规暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄 [{0}] +no.delete.permission=鎮ㄦ病鏈夊垹闄ゆ暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄 [{0}] +no.export.permission=鎮ㄦ病鏈夊鍑烘暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄 [{0}] +no.view.permission=鎮ㄦ病鏈夋煡鐪嬫暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄 [{0}] diff --git a/evo-admin/target/classes/logback.xml b/evo-admin/target/classes/logback.xml new file mode 100644 index 0000000..8cb8cc1 --- /dev/null +++ b/evo-admin/target/classes/logback.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/sys-info.log + + + + ${log.path}/sys-info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/sys-error.log + + + + ${log.path}/sys-error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + ${log.path}/sys-user.log + + + ${log.path}/sys-user.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + + + + + + + + + + + + + + + + + + + + diff --git a/evo-admin/target/classes/mapper/attendance/RzAbnormalDetailMapper.xml b/evo-admin/target/classes/mapper/attendance/RzAbnormalDetailMapper.xml new file mode 100644 index 0000000..7031be5 --- /dev/null +++ b/evo-admin/target/classes/mapper/attendance/RzAbnormalDetailMapper.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + select id, abnormal_id, name,clock_date,clock_type, abnormal_time, money, remarks, del_flag, create_by, create_time, update_time, update_by from rz_abnormal_detail + + + + + + + + insert into rz_abnormal_detail + + abnormal_id, + name, + clock_date, + clock_type, + abnormal_time, + money, + remarks, + del_flag, + create_by, + create_time, + update_time, + update_by, + + + #{abnormalId}, + #{name}, + #{clockDate}, + #{clockType}, + #{abnormalTime}, + #{money}, + #{remarks}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateTime}, + #{updateBy}, + + + + + update rz_abnormal_detail + + abnormal_id = #{abnormalId}, + name = #{name}, + clock_date = #{clockDate}, + abnormal_time = #{abnormalTime}, + money = #{money}, + remarks = #{remarks}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_time = #{updateTime}, + update_by = #{updateBy}, + + where id = #{id} + + + + + diff --git a/evo-admin/target/classes/mapper/attendance/RzAbnormalMapper.xml b/evo-admin/target/classes/mapper/attendance/RzAbnormalMapper.xml new file mode 100644 index 0000000..e745787 --- /dev/null +++ b/evo-admin/target/classes/mapper/attendance/RzAbnormalMapper.xml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + select id, dept_id, user_id, name, month, number, money, del_flag, create_by, create_time, update_by, update_time from rz_abnormal + + + + + + + + insert into rz_abnormal + + dept_id, + user_id, + name, + month, + number, + money, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{deptId}, + #{userId}, + #{name}, + #{month}, + #{number}, + #{money}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update rz_abnormal + + dept_id = #{deptId}, + user_id = #{userId}, + name = #{name}, + month = #{month}, + number = #{number}, + money = #{money}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + + diff --git a/evo-admin/target/classes/mapper/attendance/RzAttendanceDetailMapper.xml b/evo-admin/target/classes/mapper/attendance/RzAttendanceDetailMapper.xml new file mode 100644 index 0000000..50f7cf8 --- /dev/null +++ b/evo-admin/target/classes/mapper/attendance/RzAttendanceDetailMapper.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + select id, staff_id, name, equipment_code, button_type, date_time, remark, del_flag, create_by, create_time, update_by, update_time from rz_attendance_detail + + + + + + insert into rz_attendance_detail + + staff_id, + name, + equipment_code, + button_type, + date_time, + remark, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{staffId}, + #{name}, + #{equipmentCode}, + #{buttonType}, + #{dateTime}, + #{remark}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update rz_attendance_detail + + staff_id = #{staffId}, + name = #{name}, + equipment_code = #{equipmentCode}, + button_type = #{buttonType}, + date_time = #{dateTime}, + remark = #{remark}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + + + + diff --git a/evo-admin/target/classes/mapper/attendance/RzAttendanceMapper.xml b/evo-admin/target/classes/mapper/attendance/RzAttendanceMapper.xml new file mode 100644 index 0000000..9112eba --- /dev/null +++ b/evo-admin/target/classes/mapper/attendance/RzAttendanceMapper.xml @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, staff_id, name, dept_id, attendance_date, rules, work_start_time,ycs_flag,ycx_flag, work_end_time, work_sum,work_hours,night_number,middle_shift_number,remarks, del_flag, create_by, create_time, update_by, update_time from rz_attendance + + + + + + + + update rz_attendance + + staff_id = #{staffId}, + name = #{name}, + dept_id = #{deptId}, + attendance_date = #{attendanceDate}, + rules = #{rules}, + work_start_time = #{workStartTime}, + work_end_time = #{workEndTime}, + work_sum = #{workSum}, + night_number = #{nightNumber}, + middle_shift_number = #{middleShiftNumber}, + remarks = #{remarks}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + ycs_flag = #{ycsFlag}, + ycx_flag = #{ycxFlag}, + + where id = #{id} + + + + + + + + + + + + + + insert into rz_attendance(staff_id, name, dept_id, attendance_date,del_flag, create_by, create_time,ycs_flag,ycx_flag) + VALUES + + (#{item.staffId}, #{item.name}, #{item.deptId}, #{item.attendanceDate}, #{item.delFlag}, #{item.createBy}, #{item.createTime}, #{item.ycsFlag}, #{item.ycxFlag}) + + + + + diff --git a/evo-admin/target/classes/mapper/attendance/RzAttendanceStatisticalMapper.xml b/evo-admin/target/classes/mapper/attendance/RzAttendanceStatisticalMapper.xml new file mode 100644 index 0000000..074dae8 --- /dev/null +++ b/evo-admin/target/classes/mapper/attendance/RzAttendanceStatisticalMapper.xml @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, staff_id, month, dept_id, name, should_attendance, real_attendance,over_time_hours, essential_attendance, work_overtime_number, absenteeism, late_number, leave_early, less_number, night_number, middle_shift_number, del_flag, create_by, create_time, update_by, update_time from rz_attendance_statistical + + + + + + + + insert into rz_attendance_statistical + + staff_id, + month, + dept_id, + name, + should_attendance, + real_attendance, + essential_attendance, + work_overtime_number, + absenteeism, + late_number, + leave_early, + less_number, + night_number, + middle_shift_number, + del_flag, + create_by, + create_time, + update_by, + update_time, + over_time_hours, + + + #{staffId}, + #{month}, + #{deptId}, + #{name}, + #{shouldAttendance}, + #{realAttendance}, + #{essentialAttendance}, + #{workOvertimeNumber}, + #{absenteeism}, + #{lateNumber}, + #{leaveEarly}, + #{lessNumber}, + #{nightNumber}, + #{middleShiftNumber}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{overTimeHours}, + + + + + update rz_attendance_statistical + + staff_id = #{staffId}, + month = #{month}, + dept_id = #{deptId}, + name = #{name}, + should_attendance = #{shouldAttendance}, + real_attendance = #{realAttendance}, + essential_attendance = #{essentialAttendance}, + work_overtime_number = #{workOvertimeNumber}, + absenteeism = #{absenteeism}, + late_number = #{lateNumber}, + leave_early = #{leaveEarly}, + less_number = #{lessNumber}, + night_number = #{nightNumber}, + middle_shift_number = #{middleShiftNumber}, + del_flag = #{delFlag}, + create_by = #{createBy}, + update_time = #{updateTime}, + over_time_hours = #{overTimeHours}, + + where id = #{id} + + + + + + diff --git a/evo-admin/target/classes/mapper/attendance/RzSpecialAttendanceMapper.xml b/evo-admin/target/classes/mapper/attendance/RzSpecialAttendanceMapper.xml new file mode 100644 index 0000000..42308a4 --- /dev/null +++ b/evo-admin/target/classes/mapper/attendance/RzSpecialAttendanceMapper.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + select id, staff_id, name, dept_id, attendance_date, work_start_time, work_end_time, work_hours, remarks, del_flag, create_by, create_time, update_by, update_time from rz_special_attendance + + + + + + + + insert into rz_special_attendance + + staff_id, + name, + dept_id, + attendance_date, + work_start_time, + work_end_time, + work_hours, + remarks, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{staffId}, + #{name}, + #{deptId}, + #{attendanceDate}, + #{workStartTime}, + #{workEndTime}, + #{workHours}, + #{remarks}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update rz_special_attendance + + staff_id = #{staffId}, + name = #{name}, + dept_id = #{deptId}, + attendance_date = #{attendanceDate}, + work_start_time = #{workStartTime}, + work_end_time = #{workEndTime}, + work_hours = #{workHours}, + remarks = #{remarks}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + + diff --git a/evo-admin/target/classes/mapper/attendance/RzSpecialOverTimeMapper.xml b/evo-admin/target/classes/mapper/attendance/RzSpecialOverTimeMapper.xml new file mode 100644 index 0000000..9e3d086 --- /dev/null +++ b/evo-admin/target/classes/mapper/attendance/RzSpecialOverTimeMapper.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + select id, user_id, dept_id, name, over_date, sick_hours, del_flag, create_by, create_time, update_by, update_time from rz_special_over_time + + + + + + + + insert into rz_special_over_time + + user_id, + dept_id, + name, + over_date, + sick_hours, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{userId}, + #{deptId}, + #{name}, + #{overDate}, + #{sickHours}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update rz_special_over_time + + user_id = #{userId}, + dept_id = #{deptId}, + name = #{name}, + over_date = #{overDate}, + sick_hours = #{sickHours}, + del_flag = #{delFlag}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + + diff --git a/evo-admin/target/classes/mapper/equipment/EqButtonMapper.xml b/evo-admin/target/classes/mapper/equipment/EqButtonMapper.xml new file mode 100644 index 0000000..5f8fa00 --- /dev/null +++ b/evo-admin/target/classes/mapper/equipment/EqButtonMapper.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + select id, num, name, image, del_flag, remarks, create_by, create_time, update_by, update_time from eq_button + + + + + + + + insert into eq_button + + num, + name, + image, + del_flag, + remarks, + create_by, + create_time, + update_by, + update_time, + + + #{num}, + #{name}, + #{image}, + #{delFlag}, + #{remarks}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update eq_button + + num = #{num}, + name = #{name}, + image = #{image}, + del_flag = #{delFlag}, + remarks = #{remarks}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + diff --git a/evo-admin/target/classes/mapper/equipment/EqImagesMapper.xml b/evo-admin/target/classes/mapper/equipment/EqImagesMapper.xml new file mode 100644 index 0000000..527b7c2 --- /dev/null +++ b/evo-admin/target/classes/mapper/equipment/EqImagesMapper.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + select id, user_id, staff_name, image_url,hours,time_clock, del_flag, create_by, create_time, update_by, update_time from eq_images + + + + + + + + insert into eq_images + + user_id, + staff_name, + image_url, + hours, + time_clock, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{userId}, + #{staffName}, + #{imageUrl}, + #{hours}, + #{timeClock}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update eq_images + + user_id = #{userId}, + staff_name = #{staffName}, + image_url = #{imageUrl}, + hours = #{hours}, + time_clock = #{timeClock}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + diff --git a/evo-admin/target/classes/mapper/equipment/EqSnDetailMapper.xml b/evo-admin/target/classes/mapper/equipment/EqSnDetailMapper.xml new file mode 100644 index 0000000..95ef949 --- /dev/null +++ b/evo-admin/target/classes/mapper/equipment/EqSnDetailMapper.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + select id, sn, version_code, version_name, ip, sn_time, type, del_flag, create_time, create_by, update_time, update_by from eq_sn_detail + + + + + + insert into eq_sn_detail + + sn, + version_code, + version_name, + ip, + sn_time, + type, + del_flag, + create_time, + create_by, + + + #{sn}, + #{versionCode}, + #{versionName}, + #{ip}, + #{snTime}, + #{type}, + #{delFlag}, + #{createTime}, + #{createBy}, + + + + + update eq_sn_detail + + sn = #{sn}, + version_code = #{versionCode}, + version_name = #{versionName}, + ip = #{ip}, + sn_time = #{snTime}, + type = #{type}, + del_flag = #{delFlag}, + update_time = #{updateTime}, + update_by = #{updateBy}, + + where id = #{id} + + + + + diff --git a/evo-admin/target/classes/mapper/equipment/EqStatusTimeMapper.xml b/evo-admin/target/classes/mapper/equipment/EqStatusTimeMapper.xml new file mode 100644 index 0000000..e3946bf --- /dev/null +++ b/evo-admin/target/classes/mapper/equipment/EqStatusTimeMapper.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + select id, status, time, remark, del_flag, create_time, create_by, update_time, update_by from eq_status_time + + + + + + + + insert into eq_status_time + + status, + time, + remark, + del_flag, + create_time, + create_by, + update_time, + update_by, + + + #{status}, + #{time}, + #{remark}, + #{delFlag}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + + + + + update eq_status_time + + status = #{status}, + time = #{time}, + remark = #{remark}, + del_flag = #{delFlag}, + update_time = #{updateTime}, + update_by = #{updateBy}, + + where id = #{id} + + + + diff --git a/evo-admin/target/classes/mapper/finance/RzSalaryDetailMapper.xml b/evo-admin/target/classes/mapper/finance/RzSalaryDetailMapper.xml new file mode 100644 index 0000000..0174ae7 --- /dev/null +++ b/evo-admin/target/classes/mapper/finance/RzSalaryDetailMapper.xml @@ -0,0 +1,252 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, staff_id, name, month, wb_flag, dept_id,month_salary, basic_salary, job_salary, daily_wage, hours_salary, overtime_salary, level_subsidies, contract_subsidies, seniority_salary, social_subsidies, full_subsidies, night_subsidies, dinner_subsidies, subsidy_or_bonus, absenteeism_salary, absenteeism_subsidies, meal_fee, deductions, salary, pay_insurance, endowment_insurance, medical_insurance, employment_injury_insurance, maternity_insurance, unemployment_insurance, accumulation_fund, salary_before_tax, total_wages, annual_exemption_amount, special_deduction, taxable_income, tax_rate, slow_down_the_deduction, aggregate_personal_income_tax, aggregate_tax, tax_payable, net_payroll, remarks, del_flag, create_by, create_time, update_by, update_time from rz_salary_detail + + + + + + + + insert into rz_salary_detail + + staff_id, + name, + month, + wb_flag, + dept_id, + month_salary, + basic_salary, + job_salary, + daily_wage, + hours_salary, + overtime_salary, + level_subsidies, + contract_subsidies, + seniority_salary, + social_subsidies, + full_subsidies, + night_subsidies, + dinner_subsidies, + subsidy_or_bonus, + absenteeism_salary, + absenteeism_subsidies, + meal_fee, + deductions, + salary, + pay_insurance, + endowment_insurance, + medical_insurance, + employment_injury_insurance, + maternity_insurance, + unemployment_insurance, + accumulation_fund, + salary_before_tax, + total_wages, + annual_exemption_amount, + special_deduction, + taxable_income, + tax_rate, + slow_down_the_deduction, + aggregate_personal_income_tax, + tax_payable, + net_payroll, + remarks, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{staffId}, + #{name}, + #{month}, + #{wbFlag}, + #{deptId}, + #{monthSalary}, + #{basicSalary}, + #{jobSalary}, + #{dailyWage}, + #{hoursSalary}, + #{overtimeSalary}, + #{levelSubsidies}, + #{contractSubsidies}, + #{senioritySalary}, + #{socialSubsidies}, + #{fullSubsidies}, + #{nightSubsidies}, + #{dinnerSubsidies}, + #{subsidyOrBonus}, + #{absenteeismSalary}, + #{absenteeismSubsidies}, + #{mealFee}, + #{deductions}, + #{salary}, + #{payInsurance}, + #{endowmentInsurance}, + #{medicalInsurance}, + #{employmentInjuryInsurance}, + #{maternityInsurance}, + #{unemploymentInsurance}, + #{accumulationFund}, + #{salaryBeforeTax}, + #{totalWages}, + #{annualExemptionAmount}, + #{specialDeduction}, + #{taxableIncome}, + #{taxRate}, + #{slowDownTheDeduction}, + #{aggregatePersonalIncomeTax}, + #{taxPayable}, + #{netPayroll}, + #{remarks}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update rz_salary_detail + + staff_id = #{staffId}, + name = #{name}, + month = #{month}, + wb_flag = #{wbFlag}, + dept_id = #{deptId}, + month_salary = #{monthSalary}, + basic_salary = #{basicSalary}, + job_salary = #{jobSalary}, + daily_wage = #{dailyWage}, + hours_salary = #{hoursSalary}, + overtime_salary = #{overtimeSalary}, + level_subsidies = #{levelSubsidies}, + contract_subsidies = #{contractSubsidies}, + seniority_salary = #{senioritySalary}, + social_subsidies = #{socialSubsidies}, + full_subsidies = #{fullSubsidies}, + night_subsidies = #{nightSubsidies}, + dinner_subsidies = #{dinnerSubsidies}, + subsidy_or_bonus = #{subsidyOrBonus}, + absenteeism_salary = #{absenteeismSalary}, + absenteeism_subsidies = #{absenteeismSubsidies}, + meal_fee = #{mealFee}, + deductions = #{deductions}, + salary = #{salary}, + pay_insurance = #{payInsurance}, + endowment_insurance = #{endowmentInsurance}, + medical_insurance = #{medicalInsurance}, + employment_injury_insurance = #{employmentInjuryInsurance}, + maternity_insurance = #{maternityInsurance}, + unemployment_insurance = #{unemploymentInsurance}, + accumulation_fund = #{accumulationFund}, + salary_before_tax = #{salaryBeforeTax}, + total_wages = #{totalWages}, + annual_exemption_amount = #{annualExemptionAmount}, + special_deduction = #{specialDeduction}, + taxable_income = #{taxableIncome}, + tax_rate = #{taxRate}, + slow_down_the_deduction = #{slowDownTheDeduction}, + aggregate_personal_income_tax = #{aggregatePersonalIncomeTax}, + tax_payable = #{taxPayable}, + net_payroll = #{netPayroll}, + remarks = #{remarks}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + + + + + + + diff --git a/evo-admin/target/classes/mapper/finance/RzSalaryStatisticsMapper.xml b/evo-admin/target/classes/mapper/finance/RzSalaryStatisticsMapper.xml new file mode 100644 index 0000000..b2808f1 --- /dev/null +++ b/evo-admin/target/classes/mapper/finance/RzSalaryStatisticsMapper.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + select id, month, number, status, remarks, del_flag, create_by, create_time, update_by, update_time from rz_salary_statistics + + + + + + + + insert into rz_salary_statistics + + month, + number, + status, + remarks, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{month}, + #{number}, + #{status}, + #{remarks}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update rz_salary_statistics + + month = #{month}, + number = #{number}, + status = #{status}, + remarks = #{remarks}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + diff --git a/evo-admin/target/classes/mapper/generator/GenTableColumnMapper.xml b/evo-admin/target/classes/mapper/generator/GenTableColumnMapper.xml new file mode 100644 index 0000000..280f9d3 --- /dev/null +++ b/evo-admin/target/classes/mapper/generator/GenTableColumnMapper.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select column_id, table_id, column_name, column_comment, column_type, java_type, java_field, is_pk, is_increment, is_required, is_insert, is_edit, is_list, is_query, query_type, html_type, dict_type, sort, create_by, create_time, update_by, update_time from gen_table_column + + + + + + + + insert into gen_table_column ( + table_id, + column_name, + column_comment, + column_type, + java_type, + java_field, + is_pk, + is_increment, + is_required, + is_insert, + is_edit, + is_list, + is_query, + query_type, + html_type, + dict_type, + sort, + create_by, + create_time + )values( + #{tableId}, + #{columnName}, + #{columnComment}, + #{columnType}, + #{javaType}, + #{javaField}, + #{isPk}, + #{isIncrement}, + #{isRequired}, + #{isInsert}, + #{isEdit}, + #{isList}, + #{isQuery}, + #{queryType}, + #{htmlType}, + #{dictType}, + #{sort}, + #{createBy}, + sysdate() + ) + + + + update gen_table_column + + column_comment = #{columnComment}, + java_type = #{javaType}, + java_field = #{javaField}, + is_insert = #{isInsert}, + is_edit = #{isEdit}, + is_list = #{isList}, + is_query = #{isQuery}, + is_required = #{isRequired}, + query_type = #{queryType}, + html_type = #{htmlType}, + dict_type = #{dictType}, + sort = #{sort}, + update_by = #{updateBy}, + update_time = sysdate() + + where column_id = #{columnId} + + + + delete from gen_table_column where table_id in + + #{tableId} + + + + + delete from gen_table_column where column_id in + + #{item.columnId} + + + + diff --git a/evo-admin/target/classes/mapper/generator/GenTableMapper.xml b/evo-admin/target/classes/mapper/generator/GenTableMapper.xml new file mode 100644 index 0000000..e33b69c --- /dev/null +++ b/evo-admin/target/classes/mapper/generator/GenTableMapper.xml @@ -0,0 +1,210 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select table_id, table_name, table_comment, sub_table_name, sub_table_fk_name, class_name, tpl_category, tpl_web_type, package_name, module_name, business_name, function_name, function_author, gen_type, gen_path, options, create_by, create_time, update_by, update_time, remark from gen_table + + + + + + + + + + + + + + + + + + insert into gen_table ( + table_name, + table_comment, + class_name, + tpl_category, + tpl_web_type, + package_name, + module_name, + business_name, + function_name, + function_author, + gen_type, + gen_path, + remark, + create_by, + create_time + )values( + #{tableName}, + #{tableComment}, + #{className}, + #{tplCategory}, + #{tplWebType}, + #{packageName}, + #{moduleName}, + #{businessName}, + #{functionName}, + #{functionAuthor}, + #{genType}, + #{genPath}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + ${sql} + + + + update gen_table + + table_name = #{tableName}, + table_comment = #{tableComment}, + sub_table_name = #{subTableName}, + sub_table_fk_name = #{subTableFkName}, + class_name = #{className}, + function_author = #{functionAuthor}, + gen_type = #{genType}, + gen_path = #{genPath}, + tpl_category = #{tplCategory}, + tpl_web_type = #{tplWebType}, + package_name = #{packageName}, + module_name = #{moduleName}, + business_name = #{businessName}, + function_name = #{functionName}, + options = #{options}, + update_by = #{updateBy}, + remark = #{remark}, + update_time = sysdate() + + where table_id = #{tableId} + + + + delete from gen_table where table_id in + + #{tableId} + + + + diff --git a/evo-admin/target/classes/mapper/personnelMatters/BsOverTimeMapper.xml b/evo-admin/target/classes/mapper/personnelMatters/BsOverTimeMapper.xml new file mode 100644 index 0000000..307f453 --- /dev/null +++ b/evo-admin/target/classes/mapper/personnelMatters/BsOverTimeMapper.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + update bs_over_time + + work_start = #{workStart}, + work_end = #{workEnd}, + remarks = #{remarks}, + del_flag = #{delFlag}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + diff --git a/evo-admin/target/classes/mapper/personnelMatters/EqOverStaffMapper.xml b/evo-admin/target/classes/mapper/personnelMatters/EqOverStaffMapper.xml new file mode 100644 index 0000000..5ab128a --- /dev/null +++ b/evo-admin/target/classes/mapper/personnelMatters/EqOverStaffMapper.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + select id, user_id, staff_name, image_url, del_flag, create_by, create_time, update_by, update_time from eq_over_staff + + + + + + + + insert into eq_over_staff + + user_id, + staff_name, + image_url, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{userId}, + #{staffName}, + #{imageUrl}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update eq_over_staff + + user_id = #{userId}, + staff_name = #{staffName}, + image_url = #{imageUrl}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + + diff --git a/evo-admin/target/classes/mapper/personnelMatters/RzBusinessTripDetailMapper.xml b/evo-admin/target/classes/mapper/personnelMatters/RzBusinessTripDetailMapper.xml new file mode 100644 index 0000000..c5864ed --- /dev/null +++ b/evo-admin/target/classes/mapper/personnelMatters/RzBusinessTripDetailMapper.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + select id, trip_id, name, trip_start_time, trip_end_time, trip_day,over_days, remark, del_flag, create_time, create_by, update_time, update_by from rz_business_trip_detail + + + + + + + + insert into rz_business_trip_detail + + trip_id, + name, + trip_start_time, + trip_end_time, + trip_day, + over_days, + remark, + del_flag, + create_time, + create_by, + update_time, + update_by, + + + #{tripId}, + #{name}, + #{tripStartTime}, + #{tripEndTime}, + #{tripDay}, + #{overDays}, + #{remark}, + #{delFlag}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + + + + + update rz_business_trip_detail + + trip_id = #{tripId}, + name = #{name}, + trip_start_time = #{tripStartTime}, + trip_end_time = #{tripEndTime}, + trip_day = #{tripDay}, + over_days = #{overDays}, + remark = #{remark}, + del_flag = #{delFlag}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + + where id = #{id} + + + + + + + + + diff --git a/evo-admin/target/classes/mapper/personnelMatters/RzBusinessTripMapper.xml b/evo-admin/target/classes/mapper/personnelMatters/RzBusinessTripMapper.xml new file mode 100644 index 0000000..e6d1877 --- /dev/null +++ b/evo-admin/target/classes/mapper/personnelMatters/RzBusinessTripMapper.xml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + select id, dept_id,user_id, name, trip_date, trip_days,over_days, del_flag, create_by, create_time, update_by, update_time from rz_business_trip + + + + + + + + insert into rz_business_trip + + dept_id, + user_id, + name, + trip_date, + trip_days, + over_days, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{deptId}, + #{userId}, + #{name}, + #{tripDate}, + #{tripDays}, + #{overDays}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update rz_business_trip + + dept_id = #{deptId}, + user_id = #{userId}, + name = #{name}, + trip_date = #{tripDate}, + trip_days = #{tripDays}, + over_days = #{overDays}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + + + diff --git a/evo-admin/target/classes/mapper/personnelMatters/RzHolidayMapper.xml b/evo-admin/target/classes/mapper/personnelMatters/RzHolidayMapper.xml new file mode 100644 index 0000000..d7b8961 --- /dev/null +++ b/evo-admin/target/classes/mapper/personnelMatters/RzHolidayMapper.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + select id, holiday, remarks,special_flag,del_flag, create_by, create_time, update_by, update_time from bs_holidays + + + + + + + + insert into bs_holidays + + holiday, + remarks, + special_flag, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{holiday}, + #{remarks}, + #{specialFlag}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update bs_holidays + + holiday = #{holiday}, + remarks = #{remarks}, + special_flag = #{specialFlag}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + diff --git a/evo-admin/target/classes/mapper/personnelMatters/RzInterviewerMapper.xml b/evo-admin/target/classes/mapper/personnelMatters/RzInterviewerMapper.xml new file mode 100644 index 0000000..6b9decf --- /dev/null +++ b/evo-admin/target/classes/mapper/personnelMatters/RzInterviewerMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + select id, name, phone, post, content, address, interview_date, yt_flag, remarks, del_flag, create_by, create_time, update_by, update_time from rz_interviewer + + + + + + + + insert into rz_interviewer + + name, + phone, + post, + content, + address, + interview_date, + yt_flag, + remarks, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{name}, + #{phone}, + #{post}, + #{content}, + #{address}, + #{interviewDate}, + #{ytFlag}, + #{remarks}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update rz_interviewer + + name = #{name}, + phone = #{phone}, + post = #{post}, + content = #{content}, + address = #{address}, + interview_date = #{interviewDate}, + yt_flag = #{ytFlag}, + remarks = #{remarks}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + diff --git a/evo-admin/target/classes/mapper/personnelMatters/RzLeaveDetailMapper.xml b/evo-admin/target/classes/mapper/personnelMatters/RzLeaveDetailMapper.xml new file mode 100644 index 0000000..1ef9808 --- /dev/null +++ b/evo-admin/target/classes/mapper/personnelMatters/RzLeaveDetailMapper.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + select id, leave_id,name,type, leave_start_time, leave_end_time, leave_hour, remarks, create_time, create_by, update_time, update_by, del_flag from rz_leave_detail + + + + + + + + insert into rz_leave_detail + + leave_id, + name, + type, + leave_start_time, + leave_end_time, + leave_hour, + remarks, + create_time, + create_by, + update_time, + update_by, + del_flag, + + + #{leaveId}, + #{name}, + #{type}, + #{leaveStartTime}, + #{leaveEndTime}, + #{leaveHour}, + #{remarks}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{delFlag}, + + + + + update rz_leave_detail + + name = #{name}, + type = #{type}, + leave_start_time = #{leaveStartTime}, + leave_end_time = #{leaveEndTime}, + leave_hour = #{leaveHour}, + remarks = #{remarks}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + leave_id = #{leaveId}, + del_flag = #{delFlag}, + + where id = #{id} + + + + + + + diff --git a/evo-admin/target/classes/mapper/personnelMatters/RzLeaveMapper.xml b/evo-admin/target/classes/mapper/personnelMatters/RzLeaveMapper.xml new file mode 100644 index 0000000..570c77f --- /dev/null +++ b/evo-admin/target/classes/mapper/personnelMatters/RzLeaveMapper.xml @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, user_id, dept_id, name, leave_date, sick_hours, absence_hours, compensatory_hours, marriage_hours, annual_hours, maternity_hours, paternity_hours, funeral_hours, work_hours, del_flag, create_by, create_time, update_by, update_time from rz_leave d + + + + + + + + insert into rz_leave + + user_id, + dept_id, + name, + leave_date, + sick_hours, + absence_hours, + compensatory_hours, + marriage_hours, + annual_hours, + maternity_hours, + paternity_hours, + funeral_hours, + work_hours, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{userId}, + #{deptId}, + #{name}, + #{leaveDate}, + #{sickHours}, + #{absenceHours}, + #{compensatoryHours}, + #{marriageHours}, + #{annualHours}, + #{maternityHours}, + #{paternityHours}, + #{funeralHours}, + #{workHours}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update rz_leave + + user_id = #{userId}, + dept_id = #{deptId}, + name = #{name}, + leave_date = #{leaveDate}, + sick_hours = #{sickHours}, + absence_hours = #{absenceHours}, + compensatory_hours = #{compensatoryHours}, + marriage_hours = #{marriageHours}, + annual_hours = #{annualHours}, + maternity_hours = #{maternityHours}, + paternity_hours = #{paternityHours}, + funeral_hours = #{funeralHours}, + work_hours = #{workHours}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + + diff --git a/evo-admin/target/classes/mapper/personnelMatters/RzOverTimeDetailMapper.xml b/evo-admin/target/classes/mapper/personnelMatters/RzOverTimeDetailMapper.xml new file mode 100644 index 0000000..30e3308 --- /dev/null +++ b/evo-admin/target/classes/mapper/personnelMatters/RzOverTimeDetailMapper.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + select id, over_time_id, name, over_time_start, over_time_end, over_time_hours, remark, del_flag, create_time, create_by, update_time, update_by from rz_over_time_detail + + + + + + + + insert into rz_over_time_detail + + over_time_id, + name, + over_time_start, + over_time_end, + over_time_hours, + remark, + del_flag, + create_time, + create_by, + update_time, + update_by, + + + #{overTimeId}, + #{name}, + #{overTimeStart}, + #{overTimeEnd}, + #{overTimeHours}, + #{remark}, + #{delFlag}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + + + + + update rz_over_time_detail + + over_time_id = #{overTimeId}, + name = #{name}, + over_time_start = #{overTimeStart}, + over_time_end = #{overTimeEnd}, + over_time_hours = #{overTimeHours}, + remark = #{remark}, + del_flag = #{delFlag}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + + where id = #{id} + + + + + + + diff --git a/evo-admin/target/classes/mapper/personnelMatters/RzOverTimeMapper.xml b/evo-admin/target/classes/mapper/personnelMatters/RzOverTimeMapper.xml new file mode 100644 index 0000000..ce0dcc4 --- /dev/null +++ b/evo-admin/target/classes/mapper/personnelMatters/RzOverTimeMapper.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + select id, dept_id,user_id, name, over_time_month, over_hours, del_flag, create_by, create_time, update_by, update_time from rz_over_time + + + + + + + + insert into rz_over_time + + dept_id, + user_id, + name, + over_time_month, + over_hours, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{deptId}, + #{userId}, + #{name}, + #{overTimeMonth}, + #{overHours}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update rz_over_time + + dept_id = #{deptId}, + user_id = #{userId}, + name = #{name}, + over_time_month = #{overTimeMonth}, + over_hours = #{overHours}, + del_flag = #{delFlag}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + + diff --git a/evo-admin/target/classes/mapper/personnelMatters/RzSubsidyMapper.xml b/evo-admin/target/classes/mapper/personnelMatters/RzSubsidyMapper.xml new file mode 100644 index 0000000..9f7b73b --- /dev/null +++ b/evo-admin/target/classes/mapper/personnelMatters/RzSubsidyMapper.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + select id, name, value, remarks, del_flag, create_by, create_time, update_by, update_time from bs_level_subsidy + + + + + + + + insert into bs_level_subsidy + + name, + value, + remarks, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{name}, + #{value}, + #{remarks}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update bs_level_subsidy + + name = #{name}, + value = #{value}, + remarks = #{remarks}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + diff --git a/evo-admin/target/classes/mapper/restaurant/RzRestaurantDetailMapper.xml b/evo-admin/target/classes/mapper/restaurant/RzRestaurantDetailMapper.xml new file mode 100644 index 0000000..0539f7d --- /dev/null +++ b/evo-admin/target/classes/mapper/restaurant/RzRestaurantDetailMapper.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + select id, staff_id,name, date, time, sign, del_flag, create_by, create_time, update_by, update_time from rz_restaurant_detail + + + + + + + + insert into rz_restaurant_detail + + staff_id, + name, + date, + time, + sign, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{staffId}, + #{name}, + #{date}, + #{time}, + #{sign}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + diff --git a/evo-admin/target/classes/mapper/restaurant/RzRestaurantImagesMapper.xml b/evo-admin/target/classes/mapper/restaurant/RzRestaurantImagesMapper.xml new file mode 100644 index 0000000..501df14 --- /dev/null +++ b/evo-admin/target/classes/mapper/restaurant/RzRestaurantImagesMapper.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + select id, name, image_url, del_flag, create_by, create_time, update_by, update_time from rz_restaurant_images + + + + + + + + + + insert into rz_restaurant_images + + name, + image_url, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{name}, + #{imageUrl}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update rz_restaurant_images + + name = #{name}, + image_url = #{imageUrl}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + diff --git a/evo-admin/target/classes/mapper/restaurant/RzRestaurantStatisticsMapper.xml b/evo-admin/target/classes/mapper/restaurant/RzRestaurantStatisticsMapper.xml new file mode 100644 index 0000000..7297e31 --- /dev/null +++ b/evo-admin/target/classes/mapper/restaurant/RzRestaurantStatisticsMapper.xml @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, staff_id, dept_id, name, month, breakfast_expend, breakfast_number, breakfast_pre_sum_expend, breakfast_sum_expend, lunch_expend, lunch_number, lunch_pre_sum_expend, lunch_sum_expend, supper_expend, supper_number, supper_pre_sum_expend, supper_sum_expend, personal_sum_consumption, sum_consumption, remarks, del_flag, create_by, create_time, update_by, update_time from rz_restaurant_statistics + + + + + + + + insert into rz_restaurant_statistics + + staff_id, + dept_id, + name, + month, + breakfast_expend, + breakfast_number, + breakfast_pre_sum_expend, + breakfast_sum_expend, + lunch_expend, + lunch_number, + lunch_pre_sum_expend, + lunch_sum_expend, + supper_expend, + supper_number, + supper_pre_sum_expend, + supper_sum_expend, + personal_sum_consumption, + sum_consumption, + remarks, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{staffId}, + #{deptId}, + #{name}, + #{month}, + #{breakfastExpend}, + #{breakfastNumber}, + #{breakfastPreSumExpend}, + #{breakfastSumExpend}, + #{lunchExpend}, + #{lunchNumber}, + #{lunchPreSumExpend}, + #{lunchSumExpend}, + #{supperExpend}, + #{supperNumber}, + #{supperPreSumExpend}, + #{supperSumExpend}, + #{personalSumConsumption}, + #{sumConsumption}, + #{remarks}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update rz_restaurant_statistics + + staff_id = #{staffId}, + dept_id = #{deptId}, + name = #{name}, + month = #{month}, + breakfast_expend = #{breakfastExpend}, + breakfast_number = #{breakfastNumber}, + breakfast_pre_sum_expend = #{breakfastPreSumExpend}, + breakfast_sum_expend = #{breakfastSumExpend}, + lunch_expend = #{lunchExpend}, + lunch_number = #{lunchNumber}, + lunch_pre_sum_expend = #{lunchPreSumExpend}, + lunch_sum_expend = #{lunchSumExpend}, + supper_expend = #{supperExpend}, + supper_number = #{supperNumber}, + supper_pre_sum_expend = #{supperPreSumExpend}, + supper_sum_expend = #{supperSumExpend}, + personal_sum_consumption = #{personalSumConsumption}, + sum_consumption = #{sumConsumption}, + remarks = #{remarks}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + + + + diff --git a/evo-admin/target/classes/mapper/system/SysDeptMapper.xml b/evo-admin/target/classes/mapper/system/SysDeptMapper.xml new file mode 100644 index 0000000..d2c5c6a --- /dev/null +++ b/evo-admin/target/classes/mapper/system/SysDeptMapper.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.leader, d.phone,d.status, d.del_flag, d.create_by, d.create_time + from sys_dept d + + + + + + + + + + + + + + + + + + + + insert into sys_dept( + dept_id, + parent_id, + dept_name, + ancestors, + leader, + phone, + status, + create_by, + create_time + )values( + #{deptId}, + #{parentId}, + #{deptName}, + #{ancestors}, + #{leader}, + #{phone}, + #{status}, + #{createBy}, + sysdate() + ) + + + + update sys_dept + + parent_id = #{parentId}, + dept_name = #{deptName}, + ancestors = #{ancestors}, + leader = #{leader}, + phone = #{phone}, + status = #{status}, + update_by = #{updateBy}, + update_time = sysdate() + + where dept_id = #{deptId} + + + + update sys_dept set ancestors = + + when #{item.deptId} then #{item.ancestors} + + where dept_id in + + #{item.deptId} + + + + + update sys_dept set status = '0' where dept_id in + + #{deptId} + + + + + update sys_dept set del_flag = '1' where dept_id = #{deptId} + + + + + + + + + + update sys_dept set leader = #{leader},phone = #{phone},update_by = #{updateBy},update_time = sysdate() + where dept_id = #{deptId} + + diff --git a/evo-admin/target/classes/mapper/system/SysDictDataMapper.xml b/evo-admin/target/classes/mapper/system/SysDictDataMapper.xml new file mode 100644 index 0000000..2c365d0 --- /dev/null +++ b/evo-admin/target/classes/mapper/system/SysDictDataMapper.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + select dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark + from sys_dict_data + + + + + + + + + + + + + + delete from sys_dict_data where dict_code = #{dictCode} + + + + delete from sys_dict_data where dict_code in + + #{dictCode} + + + + + update sys_dict_data + + dict_sort = #{dictSort}, + dict_label = #{dictLabel}, + dict_value = #{dictValue}, + dict_type = #{dictType}, + css_class = #{cssClass}, + list_class = #{listClass}, + is_default = #{isDefault}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where dict_code = #{dictCode} + + + + update sys_dict_data set dict_type = #{newDictType} where dict_type = #{oldDictType} + + + + insert into sys_dict_data( + dict_sort, + dict_label, + dict_value, + dict_type, + css_class, + list_class, + is_default, + status, + remark, + create_by, + create_time + )values( + #{dictSort}, + #{dictLabel}, + #{dictValue}, + #{dictType}, + #{cssClass}, + #{listClass}, + #{isDefault}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + diff --git a/evo-admin/target/classes/mapper/system/SysDictTypeMapper.xml b/evo-admin/target/classes/mapper/system/SysDictTypeMapper.xml new file mode 100644 index 0000000..e9efaf9 --- /dev/null +++ b/evo-admin/target/classes/mapper/system/SysDictTypeMapper.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + select dict_id, dict_name, dict_type, status, create_by, create_time, remark + from sys_dict_type + + + + + + + + + + + + + + delete from sys_dict_type where dict_id = #{dictId} + + + + delete from sys_dict_type where dict_id in + + #{dictId} + + + + + update sys_dict_type + + dict_name = #{dictName}, + dict_type = #{dictType}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where dict_id = #{dictId} + + + + insert into sys_dict_type( + dict_name, + dict_type, + status, + remark, + create_by, + create_time + )values( + #{dictName}, + #{dictType}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + diff --git a/evo-admin/target/classes/mapper/system/SysLogininforMapper.xml b/evo-admin/target/classes/mapper/system/SysLogininforMapper.xml new file mode 100644 index 0000000..def7f6b --- /dev/null +++ b/evo-admin/target/classes/mapper/system/SysLogininforMapper.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) + values (#{userName}, #{status}, #{ipaddr}, #{loginLocation}, #{browser}, #{os}, #{msg}, sysdate()) + + + + + + delete from sys_logininfor where info_id in + + #{infoId} + + + + + truncate table sys_logininfor + + + diff --git a/evo-admin/target/classes/mapper/system/SysMenuMapper.xml b/evo-admin/target/classes/mapper/system/SysMenuMapper.xml new file mode 100644 index 0000000..2a5e7ca --- /dev/null +++ b/evo-admin/target/classes/mapper/system/SysMenuMapper.xml @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select menu_id, menu_name, parent_id, order_num, path, component, `query`, route_name, is_frame, is_cache, menu_type, visible, status, ifnull(perms,'') as perms, icon, create_time + from sys_menu + + + + + + + + + + + + + + + + + + + + + + + + + + update sys_menu + + menu_name = #{menuName}, + parent_id = #{parentId}, + order_num = #{orderNum}, + path = #{path}, + component = #{component}, + `query` = #{query}, + route_name = #{routeName}, + is_frame = #{isFrame}, + is_cache = #{isCache}, + menu_type = #{menuType}, + visible = #{visible}, + status = #{status}, + perms = #{perms}, + icon = #{icon}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where menu_id = #{menuId} + + + + insert into sys_menu( + menu_id, + parent_id, + menu_name, + order_num, + path, + component, + `query`, + route_name, + is_frame, + is_cache, + menu_type, + visible, + status, + perms, + icon, + remark, + create_by, + create_time + )values( + #{menuId}, + #{parentId}, + #{menuName}, + #{orderNum}, + #{path}, + #{component}, + #{query}, + #{routeName}, + #{isFrame}, + #{isCache}, + #{menuType}, + #{visible}, + #{status}, + #{perms}, + #{icon}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + delete from sys_menu where menu_id = #{menuId} + + + diff --git a/evo-admin/target/classes/mapper/system/SysOperLogMapper.xml b/evo-admin/target/classes/mapper/system/SysOperLogMapper.xml new file mode 100644 index 0000000..d9f348b --- /dev/null +++ b/evo-admin/target/classes/mapper/system/SysOperLogMapper.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + select oper_id, title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, oper_time, cost_time + from sys_oper_log + + + + insert into sys_oper_log(title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, cost_time, oper_time) + values (#{title}, #{businessType}, #{method}, #{requestMethod}, #{operatorType}, #{operName}, #{deptName}, #{operUrl}, #{operIp}, #{operLocation}, #{operParam}, #{jsonResult}, #{status}, #{errorMsg}, #{costTime}, sysdate()) + + + + + + delete from sys_oper_log where oper_id in + + #{operId} + + + + + + + truncate table sys_oper_log + + + diff --git a/evo-admin/target/classes/mapper/system/SysRoleDeptMapper.xml b/evo-admin/target/classes/mapper/system/SysRoleDeptMapper.xml new file mode 100644 index 0000000..7d95070 --- /dev/null +++ b/evo-admin/target/classes/mapper/system/SysRoleDeptMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + delete from sys_role_dept where role_id=#{roleId} + + + + + + delete from sys_role_dept where role_id in + + #{roleId} + + + + + insert into sys_role_dept(role_id, dept_id) values + + (#{item.roleId},#{item.deptId}) + + + + diff --git a/evo-admin/target/classes/mapper/system/SysRoleMapper.xml b/evo-admin/target/classes/mapper/system/SysRoleMapper.xml new file mode 100644 index 0000000..47d5af8 --- /dev/null +++ b/evo-admin/target/classes/mapper/system/SysRoleMapper.xml @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly, + r.status, r.del_flag, r.create_time, r.remark + from sys_role r + left join sys_user_role ur on ur.role_id = r.role_id + left join sys_user u on u.user_id = ur.user_id + left join sys_dept d on u.dept_id = d.dept_id + + + + + + + + + + + + + + + + + + + + insert into sys_role( + role_id, + role_name, + role_key, + role_sort, + data_scope, + menu_check_strictly, + dept_check_strictly, + status, + remark, + create_by, + create_time + )values( + #{roleId}, + #{roleName}, + #{roleKey}, + #{roleSort}, + #{dataScope}, + #{menuCheckStrictly}, + #{deptCheckStrictly}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + update sys_role + + role_name = #{roleName}, + role_key = #{roleKey}, + role_sort = #{roleSort}, + data_scope = #{dataScope}, + menu_check_strictly = #{menuCheckStrictly}, + dept_check_strictly = #{deptCheckStrictly}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where role_id = #{roleId} + + + + update sys_role set del_flag = '1' where role_id = #{roleId} + + + + update sys_role set del_flag = '1' where role_id in + + #{roleId} + + + + diff --git a/evo-admin/target/classes/mapper/system/SysRoleMenuMapper.xml b/evo-admin/target/classes/mapper/system/SysRoleMenuMapper.xml new file mode 100644 index 0000000..b67b59c --- /dev/null +++ b/evo-admin/target/classes/mapper/system/SysRoleMenuMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + delete from sys_role_menu where role_id=#{roleId} + + + + delete from sys_role_menu where role_id in + + #{roleId} + + + + + insert into sys_role_menu(role_id, menu_id) values + + (#{item.roleId},#{item.menuId}) + + + + diff --git a/evo-admin/target/classes/mapper/system/SysStaffDetailMapper.xml b/evo-admin/target/classes/mapper/system/SysStaffDetailMapper.xml new file mode 100644 index 0000000..d68630f --- /dev/null +++ b/evo-admin/target/classes/mapper/system/SysStaffDetailMapper.xml @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, staff_id, basic_salary, jobs_salary,count_insurance, daily_wage, hours_salary, full_frequently_subsidies, middle_subsidies,level_of_education_subsidies, contract_subsidies, seniority_subsidies, social_security_subsidies, night_shift_subsidies, dinner_subsidies, fixed_allowance, other_subsidies, breakfast_expend, lunch_expend, supper_expend, subsidy_deduct_money, deductions, endowment_insurance, medical_insurance, employment_injury_insurance, maternity_insurance, unemployment_insurance, accumulation_fund, children_education, support_the_old, housing_loans, housing_rents, adult_education, treatment_for_serious_disease, special_deduction, total_wages, aggregate_personal_income_tax, remarks, del_flag, create_by, create_time, update_by, update_time from sys_staff_detail + + + + + + + + insert into sys_staff_detail + + staff_id, + basic_salary, + jobs_salary, + daily_wage, + hours_salary, + full_frequently_subsidies, + level_of_education_subsidies, + contract_subsidies, + seniority_subsidies, + social_security_subsidies, + night_shift_subsidies, + dinner_subsidies, + fixed_allowance, + other_subsidies, + breakfast_expend, + lunch_expend, + supper_expend, + subsidy_deduct_money, + deductions, + endowment_insurance, + medical_insurance, + employment_injury_insurance, + maternity_insurance, + unemployment_insurance, + accumulation_fund, + children_education, + support_the_old, + housing_loans, + housing_rents, + adult_education, + treatment_for_serious_disease, + special_deduction, + total_wages, + aggregate_personal_income_tax, + remarks, + del_flag, + create_by, + create_time, + update_by, + update_time, + count_insurance, + middle_subsidies, + + + #{staffId}, + #{basicSalary}, + #{jobsSalary}, + #{dailyWage}, + #{hoursSalary}, + #{fullFrequentlySubsidies}, + #{levelOfEducationSubsidies}, + #{contractSubsidies}, + #{senioritySubsidies}, + #{socialSecuritySubsidies}, + #{nightShiftSubsidies}, + #{dinnerSubsidies}, + #{fixedAllowance}, + #{otherSubsidies}, + #{breakfastExpend}, + #{lunchExpend}, + #{supperExpend}, + #{subsidyDeductMoney}, + #{deductions}, + #{endowmentInsurance}, + #{medicalInsurance}, + #{employmentInjuryInsurance}, + #{maternityInsurance}, + #{unemploymentInsurance}, + #{accumulationFund}, + #{childrenEducation}, + #{supportTheOld}, + #{housingLoans}, + #{housingRents}, + #{adultEducation}, + #{treatmentForSeriousDisease}, + #{specialDeduction}, + #{totalWages}, + #{aggregatePersonalIncomeTax}, + #{remarks}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{countInsurance}, + #{middleSubsidies}, + + + + + update sys_staff_detail + + staff_id = #{staffId}, + basic_salary = #{basicSalary}, + jobs_salary = #{jobsSalary}, + daily_wage = #{dailyWage}, + hours_salary = #{hoursSalary}, + full_frequently_subsidies = #{fullFrequentlySubsidies}, + level_of_education_subsidies = #{levelOfEducationSubsidies}, + contract_subsidies = #{contractSubsidies}, + seniority_subsidies = #{senioritySubsidies}, + social_security_subsidies = #{socialSecuritySubsidies}, + night_shift_subsidies = #{nightShiftSubsidies}, + dinner_subsidies = #{dinnerSubsidies}, + fixed_allowance = #{fixedAllowance}, + other_subsidies = #{otherSubsidies}, + breakfast_expend = #{breakfastExpend}, + lunch_expend = #{lunchExpend}, + supper_expend = #{supperExpend}, + subsidy_deduct_money = #{subsidyDeductMoney}, + deductions = #{deductions}, + endowment_insurance = #{endowmentInsurance}, + medical_insurance = #{medicalInsurance}, + employment_injury_insurance = #{employmentInjuryInsurance}, + maternity_insurance = #{maternityInsurance}, + unemployment_insurance = #{unemploymentInsurance}, + accumulation_fund = #{accumulationFund}, + children_education = #{childrenEducation}, + support_the_old = #{supportTheOld}, + housing_loans = #{housingLoans}, + housing_rents = #{housingRents}, + adult_education = #{adultEducation}, + treatment_for_serious_disease = #{treatmentForSeriousDisease}, + special_deduction = #{specialDeduction}, + total_wages = #{totalWages}, + aggregate_personal_income_tax = #{aggregatePersonalIncomeTax}, + remarks = #{remarks}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + count_insurance = #{countInsurance}, + middle_subsidies = #{middleSubsidies}, + + where id = #{id} + + + + + + update sys_staff_detail set other_subsidies = 0.00,deductions = 0.00 + + diff --git a/evo-admin/target/classes/mapper/system/SysStaffMapper.xml b/evo-admin/target/classes/mapper/system/SysStaffMapper.xml new file mode 100644 index 0000000..2a083a4 --- /dev/null +++ b/evo-admin/target/classes/mapper/system/SysStaffMapper.xml @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select user_id,company_name, dept_id, code, name, id_card,is_leader, sex, age, phone, address, level, major, school, bank_number,social_subsidy, bank, employment_date, experience, worker_term, regular_date, quit_date, contract_start, contract_end, contract_type, social_type, seniority, is_overtime_pay, zs_flag, secrecy, injury, insurance, introducer, clock_in, status, wages_ratio_date, remarks, del_flag, create_by, create_time, update_by, update_time from sys_staff + + + + + + + + insert into sys_staff + + company_name, + dept_id, + code, + name, + id_card, + is_leader, + sex, + age, + phone, + address, + level, + major, + school, + bank_number, + bank, + employment_date, + experience, + worker_term, + regular_date, + quit_date, + contract_start, + contract_end, + contract_type, + social_type, + seniority, + is_overtime_pay, + zs_flag, + secrecy, + injury, + insurance, + introducer, + clock_in, + status, + wages_ratio_date, + remarks, + del_flag, + create_by, + create_time, + update_by, + update_time, + social_subsidy, + + + #{companyName}, + #{deptId}, + #{code}, + #{name}, + #{idCard}, + #{isLeader}, + #{sex}, + #{age}, + #{phone}, + #{address}, + #{level}, + #{major}, + #{school}, + #{bankNumber}, + #{bank}, + #{employmentDate}, + #{experience}, + #{workerTerm}, + #{regularDate}, + #{quitDate}, + #{contractStart}, + #{contractEnd}, + #{contractType}, + #{socialType}, + #{seniority}, + #{isOvertimePay}, + #{zsFlag}, + #{secrecy}, + #{injury}, + #{insurance}, + #{introducer}, + #{clockIn}, + #{status}, + #{wagesRatioDate}, + #{remarks}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{socialSubsidy}, + + + + + update sys_staff + + company_name = #{companyName}, + dept_id = #{deptId}, + code = #{code}, + name = #{name}, + id_card = #{idCard}, + is_leader = #{isLeader}, + sex = #{sex}, + age = #{age}, + phone = #{phone}, + address = #{address}, + level = #{level}, + major = #{major}, + school = #{school}, + bank_number = #{bankNumber}, + bank = #{bank}, + employment_date = #{employmentDate}, + experience = #{experience}, + worker_term = #{workerTerm}, + regular_date = #{regularDate}, + quit_date = #{quitDate}, + contract_start = #{contractStart}, + contract_end = #{contractEnd}, + contract_type = #{contractType}, + social_type = #{socialType}, + seniority = #{seniority}, + is_overtime_pay = #{isOvertimePay}, + zs_flag = #{zsFlag}, + secrecy = #{secrecy}, + injury = #{injury}, + insurance = #{insurance}, + introducer = #{introducer}, + clock_in = #{clockIn}, + status = #{status}, + wages_ratio_date = #{wagesRatioDate}, + remarks = #{remarks}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + social_subsidy = #{socialSubsidy}, + + where user_id = #{userId} + + + + + + + + + + + + + + diff --git a/evo-admin/target/classes/mapper/system/SysUserMapper.xml b/evo-admin/target/classes/mapper/system/SysUserMapper.xml new file mode 100644 index 0000000..2dffc52 --- /dev/null +++ b/evo-admin/target/classes/mapper/system/SysUserMapper.xml @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, + d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.leader, d.status as dept_status, + r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status + from sys_user u + left join sys_dept d on u.dept_id = d.dept_id + left join sys_user_role ur on u.user_id = ur.user_id + left join sys_role r on r.role_id = ur.role_id + + + + + + + + + + + + + + + + + + + + insert into sys_user( + user_id, + dept_id, + user_name, + nick_name, + email, + avatar, + phonenumber, + sex, + password, + status, + create_by, + remark, + create_time + )values( + #{userId}, + #{deptId}, + #{userName}, + #{nickName}, + #{email}, + #{avatar}, + #{phonenumber}, + #{sex}, + #{password}, + #{status}, + #{createBy}, + #{remark}, + sysdate() + ) + + + + update sys_user + + dept_id = #{deptId}, + user_name = #{userName}, + nick_name = #{nickName}, + email = #{email}, + phonenumber = #{phonenumber}, + sex = #{sex}, + avatar = #{avatar}, + password = #{password}, + status = #{status}, + login_ip = #{loginIp}, + login_date = #{loginDate}, + update_by = #{updateBy}, + remark = #{remark}, + update_time = sysdate() + + where user_id = #{userId} + + + + update sys_user set status = #{status} where user_id = #{userId} + + + + update sys_user set avatar = #{avatar} where user_name = #{userName} + + + + update sys_user set password = #{password} where user_name = #{userName} + + + + update sys_user set del_flag = '1' where user_id = #{userId} + + + + update sys_user set del_flag = '1' where user_id in + + #{userId} + + + + diff --git a/evo-admin/target/classes/mapper/system/SysUserRoleMapper.xml b/evo-admin/target/classes/mapper/system/SysUserRoleMapper.xml new file mode 100644 index 0000000..9ad20da --- /dev/null +++ b/evo-admin/target/classes/mapper/system/SysUserRoleMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + delete from sys_user_role where user_id=#{userId} + + + + + + delete from sys_user_role where user_id in + + #{userId} + + + + + insert into sys_user_role(user_id, role_id) values + + (#{item.userId},#{item.roleId}) + + + + + delete from sys_user_role where user_id=#{userId} and role_id=#{roleId} + + + + delete from sys_user_role where role_id=#{roleId} and user_id in + + #{userId} + + + diff --git a/evo-admin/target/classes/mybatis/mybatis-config.xml b/evo-admin/target/classes/mybatis/mybatis-config.xml new file mode 100644 index 0000000..ac47c03 --- /dev/null +++ b/evo-admin/target/classes/mybatis/mybatis-config.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + diff --git a/evo-admin/target/classes/vm/java/controller.java.vm b/evo-admin/target/classes/vm/java/controller.java.vm new file mode 100644 index 0000000..f9d3970 --- /dev/null +++ b/evo-admin/target/classes/vm/java/controller.java.vm @@ -0,0 +1,115 @@ +package ${packageName}.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.evo.common.annotation.Log; +import com.evo.common.core.controller.BaseController; +import com.evo.common.core.domain.AjaxResult; +import com.evo.common.enums.BusinessType; +import ${packageName}.domain.${ClassName}; +import ${packageName}.service.I${ClassName}Service; +import com.evo.common.utils.poi.ExcelUtil; +#if($table.crud || $table.sub) +import com.evo.common.core.page.TableDataInfo; +#elseif($table.tree) +#end + +/** + * ${functionName}Controller + * + * @author ${author} + * @date ${datetime} + */ +@RestController +@RequestMapping("/${moduleName}/${businessName}") +public class ${ClassName}Controller extends BaseController +{ + @Autowired + private I${ClassName}Service ${className}Service; + + /** + * 鏌ヨ${functionName}鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('${permissionPrefix}:list')") + @GetMapping("/list") +#if($table.crud || $table.sub) + public TableDataInfo list(${ClassName} ${className}) + { + startPage(); + List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); + return getDataTable(list); + } +#elseif($table.tree) + public AjaxResult list(${ClassName} ${className}) + { + List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); + return success(list); + } +#end + + /** + * 瀵煎嚭${functionName}鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('${permissionPrefix}:export')") + @Log(title = "${functionName}", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, ${ClassName} ${className}) + { + List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); + ExcelUtil<${ClassName}> util = new ExcelUtil<${ClassName}>(${ClassName}.class); + util.exportExcel(response, list, "${functionName}鏁版嵁"); + } + + /** + * 鑾峰彇${functionName}璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('${permissionPrefix}:query')") + @GetMapping(value = "/{${pkColumn.javaField}}") + public AjaxResult getInfo(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField}) + { + return success(${className}Service.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField})); + } + + /** + * 鏂板${functionName} + */ + @PreAuthorize("@ss.hasPermi('${permissionPrefix}:add')") + @Log(title = "${functionName}", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody ${ClassName} ${className}) + { + return toAjax(${className}Service.insert${ClassName}(${className})); + } + + /** + * 淇敼${functionName} + */ + @PreAuthorize("@ss.hasPermi('${permissionPrefix}:edit')") + @Log(title = "${functionName}", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody ${ClassName} ${className}) + { + return toAjax(${className}Service.update${ClassName}(${className})); + } + + /** + * 鍒犻櫎${functionName} + */ + @PreAuthorize("@ss.hasPermi('${permissionPrefix}:remove')") + @Log(title = "${functionName}", businessType = BusinessType.DELETE) + @DeleteMapping("/{${pkColumn.javaField}s}") + public AjaxResult remove(@PathVariable ${pkColumn.javaType}[] ${pkColumn.javaField}s) + { + return toAjax(${className}Service.delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaField}s)); + } +} diff --git a/evo-admin/target/classes/vm/java/domain.java.vm b/evo-admin/target/classes/vm/java/domain.java.vm new file mode 100644 index 0000000..b8e605c --- /dev/null +++ b/evo-admin/target/classes/vm/java/domain.java.vm @@ -0,0 +1,105 @@ +package ${packageName}.domain; + +#foreach ($import in $importList) +import ${import}; +#end +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.evo.common.annotation.Excel; +#if($table.crud || $table.sub) +import com.evo.common.core.domain.BaseEntity; +#elseif($table.tree) +import com.evo.common.core.domain.TreeEntity; +#end + +/** + * ${functionName}瀵硅薄 ${tableName} + * + * @author ${author} + * @date ${datetime} + */ +#if($table.crud || $table.sub) +#set($Entity="BaseEntity") +#elseif($table.tree) +#set($Entity="TreeEntity") +#end +public class ${ClassName} extends ${Entity} +{ + private static final long serialVersionUID = 1L; + +#foreach ($column in $columns) +#if(!$table.isSuperColumn($column.javaField)) + /** $column.columnComment */ +#if($column.list) +#set($parentheseIndex=$column.columnComment.indexOf("锛")) +#if($parentheseIndex != -1) +#set($comment=$column.columnComment.substring(0, $parentheseIndex)) +#else +#set($comment=$column.columnComment) +#end +#if($parentheseIndex != -1) + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") +#elseif($column.javaType == 'Date') + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd") +#else + @Excel(name = "${comment}") +#end +#end + private $column.javaType $column.javaField; + +#end +#end +#if($table.sub) + /** $table.subTable.functionName淇℃伅 */ + private List<${subClassName}> ${subclassName}List; + +#end +#foreach ($column in $columns) +#if(!$table.isSuperColumn($column.javaField)) +#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) +#set($AttrName=$column.javaField) +#else +#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) +#end + public void set${AttrName}($column.javaType $column.javaField) + { + this.$column.javaField = $column.javaField; + } + + public $column.javaType get${AttrName}() + { + return $column.javaField; + } +#end +#end + +#if($table.sub) + public List<${subClassName}> get${subClassName}List() + { + return ${subclassName}List; + } + + public void set${subClassName}List(List<${subClassName}> ${subclassName}List) + { + this.${subclassName}List = ${subclassName}List; + } + +#end + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) +#foreach ($column in $columns) +#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) +#set($AttrName=$column.javaField) +#else +#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) +#end + .append("${column.javaField}", get${AttrName}()) +#end +#if($table.sub) + .append("${subclassName}List", get${subClassName}List()) +#end + .toString(); + } +} diff --git a/evo-admin/target/classes/vm/java/mapper.java.vm b/evo-admin/target/classes/vm/java/mapper.java.vm new file mode 100644 index 0000000..7e7d7c2 --- /dev/null +++ b/evo-admin/target/classes/vm/java/mapper.java.vm @@ -0,0 +1,91 @@ +package ${packageName}.mapper; + +import java.util.List; +import ${packageName}.domain.${ClassName}; +#if($table.sub) +import ${packageName}.domain.${subClassName}; +#end + +/** + * ${functionName}Mapper鎺ュ彛 + * + * @author ${author} + * @date ${datetime} + */ +public interface ${ClassName}Mapper +{ + /** + * 鏌ヨ${functionName} + * + * @param ${pkColumn.javaField} ${functionName}涓婚敭 + * @return ${functionName} + */ + public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); + + /** + * 鏌ヨ${functionName}鍒楄〃 + * + * @param ${className} ${functionName} + * @return ${functionName}闆嗗悎 + */ + public List<${ClassName}> select${ClassName}List(${ClassName} ${className}); + + /** + * 鏂板${functionName} + * + * @param ${className} ${functionName} + * @return 缁撴灉 + */ + public int insert${ClassName}(${ClassName} ${className}); + + /** + * 淇敼${functionName} + * + * @param ${className} ${functionName} + * @return 缁撴灉 + */ + public int update${ClassName}(${ClassName} ${className}); + + /** + * 鍒犻櫎${functionName} + * + * @param ${pkColumn.javaField} ${functionName}涓婚敭 + * @return 缁撴灉 + */ + public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); + + /** + * 鎵归噺鍒犻櫎${functionName} + * + * @param ${pkColumn.javaField}s 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); +#if($table.sub) + + /** + * 鎵归噺鍒犻櫎${subTable.functionName} + * + * @param ${pkColumn.javaField}s 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); + + /** + * 鎵归噺鏂板${subTable.functionName} + * + * @param ${subclassName}List ${subTable.functionName}鍒楄〃 + * @return 缁撴灉 + */ + public int batch${subClassName}(List<${subClassName}> ${subclassName}List); + + + /** + * 閫氳繃${functionName}涓婚敭鍒犻櫎${subTable.functionName}淇℃伅 + * + * @param ${pkColumn.javaField} ${functionName}ID + * @return 缁撴灉 + */ + public int delete${subClassName}By${subTableFkClassName}(${pkColumn.javaType} ${pkColumn.javaField}); +#end +} diff --git a/evo-admin/target/classes/vm/java/service.java.vm b/evo-admin/target/classes/vm/java/service.java.vm new file mode 100644 index 0000000..264882b --- /dev/null +++ b/evo-admin/target/classes/vm/java/service.java.vm @@ -0,0 +1,61 @@ +package ${packageName}.service; + +import java.util.List; +import ${packageName}.domain.${ClassName}; + +/** + * ${functionName}Service鎺ュ彛 + * + * @author ${author} + * @date ${datetime} + */ +public interface I${ClassName}Service +{ + /** + * 鏌ヨ${functionName} + * + * @param ${pkColumn.javaField} ${functionName}涓婚敭 + * @return ${functionName} + */ + public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); + + /** + * 鏌ヨ${functionName}鍒楄〃 + * + * @param ${className} ${functionName} + * @return ${functionName}闆嗗悎 + */ + public List<${ClassName}> select${ClassName}List(${ClassName} ${className}); + + /** + * 鏂板${functionName} + * + * @param ${className} ${functionName} + * @return 缁撴灉 + */ + public int insert${ClassName}(${ClassName} ${className}); + + /** + * 淇敼${functionName} + * + * @param ${className} ${functionName} + * @return 缁撴灉 + */ + public int update${ClassName}(${ClassName} ${className}); + + /** + * 鎵归噺鍒犻櫎${functionName} + * + * @param ${pkColumn.javaField}s 闇瑕佸垹闄ょ殑${functionName}涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); + + /** + * 鍒犻櫎${functionName}淇℃伅 + * + * @param ${pkColumn.javaField} ${functionName}涓婚敭 + * @return 缁撴灉 + */ + public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); +} diff --git a/evo-admin/target/classes/vm/java/serviceImpl.java.vm b/evo-admin/target/classes/vm/java/serviceImpl.java.vm new file mode 100644 index 0000000..b925863 --- /dev/null +++ b/evo-admin/target/classes/vm/java/serviceImpl.java.vm @@ -0,0 +1,169 @@ +package ${packageName}.service.impl; + +import java.util.List; +#foreach ($column in $columns) +#if($column.javaField == 'createTime' || $column.javaField == 'updateTime') +import com.evo.common.utils.DateUtils; +#break +#end +#end +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +#if($table.sub) +import java.util.ArrayList; +import com.evo.common.utils.StringUtils; +import org.springframework.transaction.annotation.Transactional; +import ${packageName}.domain.${subClassName}; +#end +import ${packageName}.mapper.${ClassName}Mapper; +import ${packageName}.domain.${ClassName}; +import ${packageName}.service.I${ClassName}Service; + +/** + * ${functionName}Service涓氬姟灞傚鐞 + * + * @author ${author} + * @date ${datetime} + */ +@Service +public class ${ClassName}ServiceImpl implements I${ClassName}Service +{ + @Autowired + private ${ClassName}Mapper ${className}Mapper; + + /** + * 鏌ヨ${functionName} + * + * @param ${pkColumn.javaField} ${functionName}涓婚敭 + * @return ${functionName} + */ + @Override + public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) + { + return ${className}Mapper.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}); + } + + /** + * 鏌ヨ${functionName}鍒楄〃 + * + * @param ${className} ${functionName} + * @return ${functionName} + */ + @Override + public List<${ClassName}> select${ClassName}List(${ClassName} ${className}) + { + return ${className}Mapper.select${ClassName}List(${className}); + } + + /** + * 鏂板${functionName} + * + * @param ${className} ${functionName} + * @return 缁撴灉 + */ +#if($table.sub) + @Transactional +#end + @Override + public int insert${ClassName}(${ClassName} ${className}) + { +#foreach ($column in $columns) +#if($column.javaField == 'createTime') + ${className}.setCreateTime(DateUtils.getNowDate()); +#end +#end +#if($table.sub) + int rows = ${className}Mapper.insert${ClassName}(${className}); + insert${subClassName}(${className}); + return rows; +#else + return ${className}Mapper.insert${ClassName}(${className}); +#end + } + + /** + * 淇敼${functionName} + * + * @param ${className} ${functionName} + * @return 缁撴灉 + */ +#if($table.sub) + @Transactional +#end + @Override + public int update${ClassName}(${ClassName} ${className}) + { +#foreach ($column in $columns) +#if($column.javaField == 'updateTime') + ${className}.setUpdateTime(DateUtils.getNowDate()); +#end +#end +#if($table.sub) + ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${className}.get${pkColumn.capJavaField}()); + insert${subClassName}(${className}); +#end + return ${className}Mapper.update${ClassName}(${className}); + } + + /** + * 鎵归噺鍒犻櫎${functionName} + * + * @param ${pkColumn.javaField}s 闇瑕佸垹闄ょ殑${functionName}涓婚敭 + * @return 缁撴灉 + */ +#if($table.sub) + @Transactional +#end + @Override + public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s) + { +#if($table.sub) + ${className}Mapper.delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaField}s); +#end + return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaField}s); + } + + /** + * 鍒犻櫎${functionName}淇℃伅 + * + * @param ${pkColumn.javaField} ${functionName}涓婚敭 + * @return 缁撴灉 + */ +#if($table.sub) + @Transactional +#end + @Override + public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) + { +#if($table.sub) + ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${pkColumn.javaField}); +#end + return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}); + } +#if($table.sub) + + /** + * 鏂板${subTable.functionName}淇℃伅 + * + * @param ${className} ${functionName}瀵硅薄 + */ + public void insert${subClassName}(${ClassName} ${className}) + { + List<${subClassName}> ${subclassName}List = ${className}.get${subClassName}List(); + ${pkColumn.javaType} ${pkColumn.javaField} = ${className}.get${pkColumn.capJavaField}(); + if (StringUtils.isNotNull(${subclassName}List)) + { + List<${subClassName}> list = new ArrayList<${subClassName}>(); + for (${subClassName} ${subclassName} : ${subclassName}List) + { + ${subclassName}.set${subTableFkClassName}(${pkColumn.javaField}); + list.add(${subclassName}); + } + if (list.size() > 0) + { + ${className}Mapper.batch${subClassName}(list); + } + } + } +#end +} diff --git a/evo-admin/target/classes/vm/java/sub-domain.java.vm b/evo-admin/target/classes/vm/java/sub-domain.java.vm new file mode 100644 index 0000000..0d6fc91 --- /dev/null +++ b/evo-admin/target/classes/vm/java/sub-domain.java.vm @@ -0,0 +1,76 @@ +package ${packageName}.domain; + +#foreach ($import in $subImportList) +import ${import}; +#end +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.evo.common.annotation.Excel; +import com.evo.common.core.domain.BaseEntity; + +/** + * ${subTable.functionName}瀵硅薄 ${subTableName} + * + * @author ${author} + * @date ${datetime} + */ +public class ${subClassName} extends BaseEntity +{ + private static final long serialVersionUID = 1L; + +#foreach ($column in $subTable.columns) +#if(!$table.isSuperColumn($column.javaField)) + /** $column.columnComment */ +#if($column.list) +#set($parentheseIndex=$column.columnComment.indexOf("锛")) +#if($parentheseIndex != -1) +#set($comment=$column.columnComment.substring(0, $parentheseIndex)) +#else +#set($comment=$column.columnComment) +#end +#if($parentheseIndex != -1) + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") +#elseif($column.javaType == 'Date') + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd") +#else + @Excel(name = "${comment}") +#end +#end + private $column.javaType $column.javaField; + +#end +#end +#foreach ($column in $subTable.columns) +#if(!$table.isSuperColumn($column.javaField)) +#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) +#set($AttrName=$column.javaField) +#else +#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) +#end + public void set${AttrName}($column.javaType $column.javaField) + { + this.$column.javaField = $column.javaField; + } + + public $column.javaType get${AttrName}() + { + return $column.javaField; + } +#end +#end + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) +#foreach ($column in $subTable.columns) +#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) +#set($AttrName=$column.javaField) +#else +#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) +#end + .append("${column.javaField}", get${AttrName}()) +#end + .toString(); + } +} diff --git a/evo-admin/target/classes/vm/js/api.js.vm b/evo-admin/target/classes/vm/js/api.js.vm new file mode 100644 index 0000000..9295524 --- /dev/null +++ b/evo-admin/target/classes/vm/js/api.js.vm @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ${functionName}鍒楄〃 +export function list${BusinessName}(query) { + return request({ + url: '/${moduleName}/${businessName}/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ${functionName}璇︾粏 +export function get${BusinessName}(${pkColumn.javaField}) { + return request({ + url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField}, + method: 'get' + }) +} + +// 鏂板${functionName} +export function add${BusinessName}(data) { + return request({ + url: '/${moduleName}/${businessName}', + method: 'post', + data: data + }) +} + +// 淇敼${functionName} +export function update${BusinessName}(data) { + return request({ + url: '/${moduleName}/${businessName}', + method: 'put', + data: data + }) +} + +// 鍒犻櫎${functionName} +export function del${BusinessName}(${pkColumn.javaField}) { + return request({ + url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField}, + method: 'delete' + }) +} diff --git a/evo-admin/target/classes/vm/sql/sql.vm b/evo-admin/target/classes/vm/sql/sql.vm new file mode 100644 index 0000000..0575583 --- /dev/null +++ b/evo-admin/target/classes/vm/sql/sql.vm @@ -0,0 +1,22 @@ +-- 鑿滃崟 SQL +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}', '${parentMenuId}', '1', '${businessName}', '${moduleName}/${businessName}/index', 1, 0, 'C', '0', '0', '${permissionPrefix}:list', '#', 'admin', sysdate(), '', null, '${functionName}鑿滃崟'); + +-- 鎸夐挳鐖惰彍鍗旾D +SELECT @parentId := LAST_INSERT_ID(); + +-- 鎸夐挳 SQL +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}鏌ヨ', @parentId, '1', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:query', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}鏂板', @parentId, '2', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:add', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}淇敼', @parentId, '3', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:edit', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}鍒犻櫎', @parentId, '4', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:remove', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}瀵煎嚭', @parentId, '5', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:export', '#', 'admin', sysdate(), '', null, ''); \ No newline at end of file diff --git a/evo-admin/target/classes/vm/vue/index-tree.vue.vm b/evo-admin/target/classes/vm/vue/index-tree.vue.vm new file mode 100644 index 0000000..4819c2a --- /dev/null +++ b/evo-admin/target/classes/vm/vue/index-tree.vue.vm @@ -0,0 +1,505 @@ + + + diff --git a/evo-admin/target/classes/vm/vue/index.vue.vm b/evo-admin/target/classes/vm/vue/index.vue.vm new file mode 100644 index 0000000..6296014 --- /dev/null +++ b/evo-admin/target/classes/vm/vue/index.vue.vm @@ -0,0 +1,602 @@ + + + diff --git a/evo-admin/target/classes/vm/vue/v3/index-tree.vue.vm b/evo-admin/target/classes/vm/vue/v3/index-tree.vue.vm new file mode 100644 index 0000000..c54d62b --- /dev/null +++ b/evo-admin/target/classes/vm/vue/v3/index-tree.vue.vm @@ -0,0 +1,474 @@ + + + diff --git a/evo-admin/target/classes/vm/vue/v3/index.vue.vm b/evo-admin/target/classes/vm/vue/v3/index.vue.vm new file mode 100644 index 0000000..8b25665 --- /dev/null +++ b/evo-admin/target/classes/vm/vue/v3/index.vue.vm @@ -0,0 +1,590 @@ + + + diff --git a/evo-admin/target/classes/vm/xml/mapper.xml.vm b/evo-admin/target/classes/vm/xml/mapper.xml.vm new file mode 100644 index 0000000..456755b --- /dev/null +++ b/evo-admin/target/classes/vm/xml/mapper.xml.vm @@ -0,0 +1,140 @@ + + + + + +#foreach ($column in $columns) + +#end + +#if($table.sub) + + + + + + +#foreach ($column in $subTable.columns) + +#end + +#end + + + select#foreach($column in $columns) $column.columnName#if($foreach.count != $columns.size()),#end#end from ${tableName} + + + + + +#if($table.sub) + + +#end + + + insert into ${tableName} + +#foreach($column in $columns) +#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment) + $column.columnName, +#end +#end + + +#foreach($column in $columns) +#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment) + #{$column.javaField}, +#end +#end + + + + + update ${tableName} + +#foreach($column in $columns) +#if($column.columnName != $pkColumn.columnName) + $column.columnName = #{$column.javaField}, +#end +#end + + where ${pkColumn.columnName} = #{${pkColumn.javaField}} + + + + delete from ${tableName} where ${pkColumn.columnName} = #{${pkColumn.javaField}} + + + + delete from ${tableName} where ${pkColumn.columnName} in + + #{${pkColumn.javaField}} + + +#if($table.sub) + + + delete from ${subTableName} where ${subTableFkName} in + + #{${subTableFkclassName}} + + + + + delete from ${subTableName} where ${subTableFkName} = #{${subTableFkclassName}} + + + + insert into ${subTableName}(#foreach($column in $subTable.columns) $column.columnName#if($foreach.count != $subTable.columns.size()),#end#end) values + + (#foreach($column in $subTable.columns) #{item.$column.javaField}#if($foreach.count != $subTable.columns.size()),#end#end) + + +#end + \ No newline at end of file diff --git a/evo-admin/target/evo-tech.jar b/evo-admin/target/evo-tech.jar new file mode 100644 index 0000000..c72cbf8 Binary files /dev/null and b/evo-admin/target/evo-tech.jar differ diff --git a/evo-admin/target/evo-tech.jar.original b/evo-admin/target/evo-tech.jar.original new file mode 100644 index 0000000..1a80603 Binary files /dev/null and b/evo-admin/target/evo-tech.jar.original differ diff --git a/evo-admin/target/maven-archiver/pom.properties b/evo-admin/target/maven-archiver/pom.properties new file mode 100644 index 0000000..8d92310 --- /dev/null +++ b/evo-admin/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=evo-tech +groupId=com.evo +version=3.8.8 diff --git a/evo-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/evo-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..9b44821 --- /dev/null +++ b/evo-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,400 @@ +com\evo\system\service\impl\SysDictTypeServiceImpl.class +com\evo\common\utils\poi\ExcelUtils$1.class +com\evo\equipment\domain\vo\CwBottonDto.class +com\evo\attendance\service\IRzAttendanceService.class +com\evo\common\utils\file\FileUtils.class +com\evo\utils\DateUtil.class +com\evo\common\exception\user\UserException.class +com\evo\common\constant\Constants.class +com\evo\attendance\domain\RzAttendance.class +com\evo\personnelMatters\service\IRzInterviewerService.class +com\evo\EvoApplication.class +com\evo\common\core\domain\entity\SysRole.class +com\evo\generator\service\IGenTableService.class +com\evo\common\filter\RepeatedlyRequestWrapper.class +com\evo\common\exception\GlobalException.class +com\evo\framework\websocket\WebSocketUsers.class +com\evo\personnelMatters\service\IRzOverTimeDetailService.class +com\evo\common\exception\file\InvalidExtensionException$InvalidImageExtensionException.class +com\evo\restaurant\utils\ExcelUtilCy$1.class +com\evo\common\core\domain\entity\SysMenu.class +com\evo\system\mapper\SysDeptMapper.class +com\evo\restaurant\domain\RzRestaurantImages.class +com\evo\common\core\controller\BaseController.class +com\evo\generator\mapper\GenTableMapper.class +com\evo\equipment\domain\EqStatusTime.class +com\evo\system\service\ISysUserOnlineService.class +com\evo\attendance\controller\RzAttendanceStatisticalController.class +com\evo\framework\web\service\TokenService.class +com\evo\generator\domain\GenTable.class +com\evo\attendance\service\impl\RzAttendanceServiceImpl.class +com\evo\attendance\service\IRzAttendanceStatisticalService.class +com\evo\restaurant\controller\RzRestaurantImagesController.class +com\evo\personnelMatters\controller\SpecialOverTimeController.class +com\evo\common\filter\PropertyPreExcludeFilter.class +com\evo\personnelMatters\controller\RzOverTimeDetailController.class +com\evo\attendance\domain\RzAbnormalDetail.class +com\evo\framework\config\ServerConfig.class +com\evo\framework\security\handle\AuthenticationEntryPointImpl.class +com\evo\restaurant\service\IRzRestaurantStatisticsService.class +com\evo\system\controller\CacheController.class +com\evo\common\utils\uuid\UUID$Holder.class +com\evo\common\utils\http\HttpHelper.class +com\evo\generator\mapper\GenTableColumnMapper.class +com\evo\system\controller\SysStaffDetailController.class +com\evo\common\utils\DesensitizedUtil.class +com\evo\system\service\ISysStaffService.class +com\evo\common\utils\file\FileUploadUtils.class +com\evo\common\utils\PageUtils.class +com\evo\equipment\domain\EqSnDetail.class +com\evo\common\constant\GenConstants.class +com\evo\system\mapper\SysMenuMapper.class +com\evo\framework\datasource\DynamicDataSource.class +com\evo\framework\manager\factory\AsyncFactory$2.class +com\evo\system\service\ISysLogininforService.class +com\evo\personnelMatters\service\impl\RzInterviewerServiceImpl.class +com\evo\attendance\service\impl\RzAbnormalDetailServiceImpl.class +com\evo\personnelMatters\controller\RzSubsidyController.class +com\evo\system\service\impl\SysStaffServiceImpl.class +com\evo\common\exception\ServiceException.class +com\evo\system\domain\SysCache.class +com\evo\common\utils\sign\Md5Utils.class +com\evo\common\config\SwaggerConfig.class +com\evo\common\utils\DateUtils.class +com\evo\common\utils\uuid\UUID.class +com\evo\common\constant\ScheduleConstants$Status.class +com\evo\common\core\domain\entity\SysDictData.class +com\evo\system\controller\SysLogininforController.class +com\evo\system\controller\SysRoleController.class +com\evo\system\controller\SysStaffController.class +com\evo\attendance\service\impl\RzAttendanceStatisticalServiceImpl.class +com\evo\equipment\controller\EqStatusTimeController.class +com\evo\equipment\mapper\EqSnDetailMapper.class +com\evo\attendance\service\impl\PunchTheClockServiceImpl.class +com\evo\common\exception\job\TaskException$Code.class +com\evo\common\annotation\Excel$ColumnType.class +com\evo\common\exception\CustomException.class +com\evo\common\filter\XssHttpServletRequestWrapper$1.class +com\evo\equipment\service\impl\EqStatusTimeServiceImpl.class +com\evo\attendance\service\IRzAbnormalDetailService.class +com\evo\equipment\domain\vo\RzStatusTimeVo.class +com\evo\personnelMatters\service\IRzLeaveDetailService.class +com\evo\common\annotation\Excels.class +com\evo\personnelMatters\mapper\RzOverTimeMapper.class +com\evo\common\filter\XssHttpServletRequestWrapper.class +com\evo\finance\mapper\RzSalaryStatisticsMapper.class +com\evo\restaurant\service\impl\RzRestaurantDetailServiceImpl.class +com\evo\framework\manager\factory\AsyncFactory.class +com\evo\common\utils\sign\Base64.class +com\evo\restaurant\mapper\RzRestaurantStatisticsMapper.class +com\evo\common\exception\file\FileException.class +com\evo\personnelMatters\controller\RzBusinessTripController.class +com\evo\system\service\ISysDeptService.class +com\evo\common\utils\MessageUtils.class +com\evo\framework\config\ThreadPoolConfig$1.class +com\evo\personnelMatters\service\impl\RzLeaveServiceImpl.class +com\evo\finance\controller\RzSalaryDetailController.class +com\evo\personnelMatters\domain\RzOverTime.class +com\evo\common\utils\http\HttpUtils$1.class +com\evo\system\domain\vo\SysStaffVo.class +com\evo\common\utils\DictUtils.class +com\evo\framework\config\DruidConfig$1.class +com\evo\common\utils\ip\IpUtils.class +com\evo\system\mapper\SysStaffMapper.class +com\evo\equipment\service\IEqSnDetailService.class +com\evo\restaurant\service\IRzRestaurantImagesService.class +com\evo\common\utils\ServletUtils.class +com\evo\generator\util\VelocityInitializer.class +com\evo\restaurant\controller\RzRestaurantDetailController.class +com\evo\system\service\ISysOperLogService.class +com\evo\personnelMatters\service\IRzBusinessTripService.class +com\evo\common\utils\file\FileTypeUtils.class +com\evo\framework\security\context\PermissionContextHolder.class +com\evo\common\annotation\RepeatSubmit.class +com\evo\system\domain\SysUserOnline.class +com\evo\equipment\domain\vo\RzStatusTimeData.class +com\evo\personnelMatters\domain\RzSubsidy.class +com\evo\common\annotation\Excel$Type.class +com\evo\common\exception\base\BaseException.class +com\evo\common\core\text\StrFormatter.class +com\evo\framework\websocket\SemaphoreUtils.class +com\evo\personnelMatters\service\IRzBusinessTripDetailService.class +com\evo\restaurant\domain\vo\RestaurantData.class +com\evo\restaurant\service\IRzRestaurantDetailService.class +com\evo\personnelMatters\service\IRzHolidayService.class +com\evo\framework\config\I18nConfig.class +com\evo\finance\mapper\RzSalaryDetailMapper.class +com\evo\equipment\domain\vo\StaffData.class +com\evo\system\controller\SysUserOnlineController.class +com\evo\common\utils\reflect\ReflectUtils.class +com\evo\system\service\impl\SysUserServiceImpl.class +com\evo\system\mapper\SysStaffDetailMapper.class +com\evo\system\mapper\SysRoleDeptMapper.class +com\evo\personnelMatters\controller\RzLeaveDetailController.class +com\evo\common\exception\user\BlackListException.class +com\evo\system\service\impl\SysOperLogServiceImpl.class +com\evo\equipment\service\IEqImagesService.class +com\evo\restaurant\mapper\RzRestaurantImagesMapper.class +com\evo\framework\config\DruidConfig.class +com\evo\personnelMatters\domain\RzBusinessTripDetail.class +com\evo\restaurant\service\impl\RzRestaurantImagesServiceImpl.class +com\evo\common\utils\http\HttpUtils$TrustAnyTrustManager.class +com\evo\equipment\service\IEqStatusTimeService.class +com\evo\framework\web\service\UserDetailsServiceImpl.class +com\evo\system\domain\SysRoleMenu.class +com\evo\framework\config\MyBatisConfig.class +com\evo\system\service\ISysDictTypeService.class +com\evo\system\service\ISysMenuService.class +com\evo\framework\aspectj\DataScopeAspect.class +com\evo\common\enums\DataSourceType.class +com\evo\framework\config\ThreadPoolConfig.class +com\evo\personnelMatters\mapper\BsOverTimeMapper.class +com\evo\framework\websocket\WebSocketServer.class +com\evo\finance\domain\vo\SalaryVo.class +com\evo\common\filter\XssFilter.class +com\evo\equipment\controller\EqSnDetailController.class +com\evo\restaurant\mapper\RzRestaurantDetailMapper.class +com\evo\framework\datasource\DynamicDataSourceContextHolder.class +com\evo\attendance\service\impl\RzAbnormalServiceImpl.class +com\evo\personnelMatters\domain\EqOverStaff.class +com\evo\framework\security\handle\LogoutSuccessHandlerImpl.class +com\evo\common\exception\user\CaptchaExpireException.class +com\evo\generator\domain\GenTableColumn.class +com\evo\personnelMatters\service\impl\RzHolidayServiceImpl.class +com\evo\system\controller\SysProfileController.class +com\evo\system\mapper\SysOperLogMapper.class +com\evo\common\utils\uuid\IdUtils.class +com\evo\restaurant\utils\ExcelUtilCy.class +com\evo\common\annotation\Log.class +com\evo\system\controller\SysDeptController.class +com\evo\framework\aspectj\DataSourceAspect.class +com\evo\generator\config\GenConfig.class +com\evo\common\utils\bean\BeanUtils.class +com\evo\common\exception\user\UserPasswordRetryLimitExceedException.class +com\evo\personnelMatters\service\impl\RzLeaveDetailServiceImpl.class +com\evo\common\xss\Xss.class +com\evo\equipment\domain\EqButton.class +com\evo\common\enums\BusinessType.class +com\evo\system\mapper\SysUserRoleMapper.class +com\evo\system\controller\SysLoginController.class +com\evo\attendance\domain\RzSpecialAttendance.class +com\evo\attendance\domain\RzAbnormal.class +com\evo\equipment\service\IEqButtonService.class +com\evo\system\controller\CommonController.class +com\evo\common\core\text\Convert.class +com\evo\attendance\controller\RzAbnormalController.class +com\evo\generator\util\GenUtils.class +com\evo\personnelMatters\domain\RzBusinessTrip.class +com\evo\equipment\service\impl\EqSnDetailServiceImpl.class +com\evo\finance\service\impl\RzSalaryDetailServiceImpl.class +com\evo\finance\service\IRzSalaryDetailService.class +com\evo\common\filter\RepeatableFilter.class +com\evo\system\service\ISysRoleService.class +com\evo\equipment\mapper\EqImagesMapper.class +com\evo\framework\config\ApplicationConfig.class +com\evo\common\annotation\Sensitive.class +com\evo\attendance\mapper\RzAbnormalDetailMapper.class +com\evo\common\exception\DemoModeException.class +com\evo\system\domain\vo\MetaVo.class +com\evo\system\service\impl\SysLogininforServiceImpl.class +com\evo\framework\aspectj\RateLimiterAspect.class +com\evo\common\core\domain\R.class +com\evo\system\service\impl\SysUserOnlineServiceImpl.class +com\evo\common\utils\poi\ExcelUtilSs$1.class +com\evo\framework\config\properties\DruidProperties.class +com\evo\system\domain\vo\RouterVo.class +com\evo\system\domain\SysUserRole.class +com\evo\common\utils\poi\ExcelHandlerAdapter.class +com\evo\attendance\service\impl\RzSpecialOverTimeServiceImpl.class +com\evo\personnelMatters\controller\RzInterviewerController.class +com\evo\personnelMatters\domain\SpecialOverTime.class +com\evo\EvoServletInitializer.class +com\evo\common\core\domain\model\LoginUser.class +com\evo\common\exception\user\UserPasswordNotMatchException.class +com\evo\personnelMatters\mapper\EqOverStaffMapper.class +com\evo\equipment\domain\vo\CwButtonData.class +com\evo\personnelMatters\service\impl\RzBusinessTripDetailServiceImpl.class +com\evo\system\service\impl\SysStaffDetailServiceImpl.class +com\evo\common\config\EvoConfig.class +com\evo\framework\interceptor\impl\SameUrlDataInterceptor.class +com\evo\common\enums\OperatorType.class +com\evo\attendance\service\impl\RzSpecialAttendanceServiceImpl.class +com\evo\common\utils\http\HttpUtils.class +com\evo\common\core\redis\RedisCache.class +com\evo\system\controller\SysDictTypeController.class +com\evo\system\service\impl\SysDictDataServiceImpl.class +com\evo\common\utils\bean\BeanValidators.class +com\evo\personnelMatters\domain\RzOverTimeDetail.class +com\evo\system\domain\SysLogininfor.class +com\evo\framework\web\service\SysRegisterService.class +com\evo\common\utils\poi\ExcelUtil.class +com\evo\attendance\service\IRzSpecialAttendanceService.class +com\evo\common\core\domain\BaseEntity.class +com\evo\framework\web\exception\GlobalExceptionHandler.class +com\evo\common\enums\UserStatus.class +com\evo\common\enums\HttpMethod.class +com\evo\common\core\domain\TreeSelect.class +com\evo\common\exception\user\CaptchaException.class +com\evo\system\service\ISysDictDataService.class +com\evo\personnelMatters\service\impl\RzSubsidyServiceImpl.class +com\evo\personnelMatters\service\IRzSubsidyService.class +com\evo\finance\controller\RzSalaryStatisticsController.class +com\evo\common\core\text\CharsetKit.class +com\evo\common\exception\file\InvalidExtensionException$InvalidMediaExtensionException.class +com\evo\personnelMatters\service\impl\RzOverTimeServiceImpl.class +com\evo\common\annotation\DataSource.class +com\evo\common\exception\file\FileNameLengthLimitExceededException.class +com\evo\framework\websocket\WebSocketConfig.class +com\evo\personnelMatters\mapper\RzInterviewerMapper.class +com\evo\system\mapper\SysRoleMapper.class +com\evo\framework\manager\factory\AsyncFactory$1.class +com\evo\finance\service\impl\RzSalaryStatisticsServiceImpl.class +com\evo\personnelMatters\domain\RzHoliday.class +com\evo\attendance\controller\RzAbnormalDetailController.class +com\evo\attendance\domain\RzAttendanceDetail.class +com\evo\attendance\service\IRzAbnormalService.class +com\evo\framework\config\properties\PermitAllUrlProperties.class +com\evo\common\core\domain\model\LoginBody.class +com\evo\framework\web\service\PermissionService.class +com\evo\generator\service\GenTableColumnServiceImpl.class +com\evo\system\domain\SysOperLog.class +com\evo\attendance\domain\vo\RzAttendanceData.class +com\evo\attendance\service\IRzSpecialOverTimeService.class +com\evo\equipment\constant\Constants.class +com\evo\common\annotation\Excel.class +com\evo\restaurant\domain\vo\RestaurantVo.class +com\evo\system\controller\SysMenuController.class +com\evo\common\core\domain\TreeEntity.class +com\evo\attendance\mapper\RzSpecialAttendanceMapper.class +com\evo\common\utils\ExceptionUtil.class +com\evo\system\controller\SysIndexController.class +com\evo\attendance\controller\PunchTheClockController.class +com\evo\attendance\service\PunchTheClockService.class +com\evo\common\utils\Threads.class +com\evo\attendance\mapper\RzSpecialOverTimeMapper.class +com\evo\system\controller\SysOperlogController.class +com\evo\attendance\domain\RzAttendanceStatistical.class +com\evo\common\utils\sql\SqlUtil.class +com\evo\common\core\domain\entity\SysUser.class +com\evo\personnelMatters\controller\RzBusinessTripDetailController.class +com\evo\system\domain\SysStaffDetail.class +com\evo\finance\domain\RzSalaryDetail.class +com\evo\common\constant\UserConstants.class +com\evo\common\utils\html\EscapeUtil.class +com\evo\common\utils\uuid\Seq.class +com\evo\personnelMatters\mapper\RzLeaveDetailMapper.class +com\evo\framework\interceptor\RepeatSubmitInterceptor.class +com\evo\common\utils\Arith.class +com\evo\common\utils\file\MimeTypeUtils.class +com\evo\common\exception\file\InvalidExtensionException.class +com\evo\system\controller\SysUserController.class +com\evo\personnelMatters\mapper\RzBusinessTripDetailMapper.class +com\evo\equipment\mapper\EqButtonMapper.class +com\evo\common\exception\job\TaskException.class +com\evo\common\enums\DesensitizedType.class +com\evo\equipment\domain\vo\CwButtonVo.class +com\evo\system\service\ISysStaffDetailService.class +com\evo\personnelMatters\service\IRzLeaveService.class +com\evo\framework\manager\AsyncManager.class +com\evo\personnelMatters\service\impl\SpecialOverTimeServiceImpl.class +com\evo\attendance\controller\RzSpecialOverTimeController.class +com\evo\personnelMatters\service\SpecialOverTimeService.class +com\evo\equipment\mapper\EqStatusTimeMapper.class +com\evo\system\domain\SysRoleDept.class +com\evo\attendance\mapper\RzAbnormalMapper.class +com\evo\common\exception\file\InvalidExtensionException$InvalidFlashExtensionException.class +com\evo\common\config\serializer\SensitiveJsonSerializer.class +com\evo\finance\domain\RzSalaryStatistics.class +com\evo\common\utils\LogUtils.class +com\evo\common\core\page\TableSupport.class +com\evo\common\enums\LimitType.class +com\evo\common\constant\ScheduleConstants.class +com\evo\framework\config\FilterConfig.class +com\evo\common\core\controller\BaseController$1.class +com\evo\system\domain\SysStaff.class +com\evo\framework\web\service\SysPermissionService.class +com\evo\common\utils\SecurityUtils.class +com\evo\generator\service\GenTableServiceImpl.class +com\evo\personnelMatters\controller\RzHolidayController.class +com\evo\attendance\mapper\RzAttendanceDetailMapper.class +com\evo\system\service\impl\SysDeptServiceImpl.class +com\evo\system\mapper\SysLogininforMapper.class +com\evo\system\controller\SysDictDataController.class +com\evo\equipment\service\impl\EqButtonServiceImpl.class +com\evo\generator\service\IGenTableColumnService.class +com\evo\restaurant\controller\RzRestaurantStatisticsController.class +com\evo\framework\security\context\AuthenticationContextHolder.class +com\evo\common\utils\http\HttpUtils$TrustAnyHostnameVerifier.class +com\evo\common\exception\file\FileSizeLimitExceededException.class +com\evo\personnelMatters\service\impl\RzBusinessTripServiceImpl.class +com\evo\common\utils\spring\SpringUtils.class +com\evo\personnelMatters\domain\RzLeave.class +com\evo\equipment\domain\vo\StaffDto.class +com\evo\generator\util\VelocityUtils.class +com\evo\framework\config\FastJson2JsonRedisSerializer.class +com\evo\attendance\controller\RzSpecialAttendanceController.class +com\evo\common\exception\file\FileUploadException.class +com\evo\common\annotation\RateLimiter.class +com\evo\common\annotation\Anonymous.class +com\evo\common\constant\HttpStatus.class +com\evo\framework\aspectj\LogAspect.class +com\evo\framework\web\service\SysLoginService.class +com\evo\common\utils\poi\ExcelUtils.class +com\evo\equipment\controller\EqButtonController.class +com\evo\attendance\domain\RzSpecialOverTime.class +com\evo\personnelMatters\domain\RzInterviewer.class +com\evo\personnelMatters\mapper\RzSubsidyMapper.class +com\evo\system\mapper\SysRoleMenuMapper.class +com\evo\attendance\mapper\RzAttendanceMapper.class +com\evo\common\core\domain\entity\SysDictType.class +com\evo\attendance\domain\vo\RzAttendanceVo.class +com\evo\common\exception\file\InvalidExtensionException$InvalidVideoExtensionException.class +com\evo\system\service\impl\SysMenuServiceImpl.class +com\evo\common\core\domain\AjaxResult.class +com\evo\framework\config\RedisConfig.class +com\evo\personnelMatters\service\impl\RzOverTimeDetailServiceImpl.class +com\evo\attendance\controller\RzAttendanceController.class +com\evo\common\filter\RepeatedlyRequestWrapper$1.class +com\evo\common\xss\XssValidator.class +com\evo\equipment\domain\EqImages.class +com\evo\finance\service\IRzSalaryStatisticsService.class +com\evo\generator\controller\GenController.class +com\evo\common\core\page\TableDataInfo.class +com\evo\common\utils\ip\AddressUtils.class +com\evo\personnelMatters\mapper\RzLeaveMapper.class +com\evo\system\service\ISysUserService.class +com\evo\common\constant\CacheConstants.class +com\evo\common\utils\file\ImageUtils.class +com\evo\restaurant\domain\RzRestaurantStatistics.class +com\evo\common\exception\UtilException.class +com\evo\equipment\controller\EqImagesController.class +com\evo\system\mapper\SysDictTypeMapper.class +com\evo\common\enums\BusinessStatus.class +com\evo\common\annotation\DataScope.class +com\evo\framework\web\service\SysPasswordService.class +com\evo\common\utils\poi\ExcelUtilSs.class +com\evo\personnelMatters\domain\RzLeaveDetail.class +com\evo\system\mapper\SysDictDataMapper.class +com\evo\restaurant\service\impl\RzRestaurantStatisticsServiceImpl.class +com\evo\personnelMatters\mapper\RzHolidayMapper.class +com\evo\common\exception\user\UserNotExistsException.class +com\evo\personnelMatters\mapper\RzBusinessTripMapper.class +com\evo\common\utils\html\HTMLFilter.class +com\evo\task\TaskController.class +com\evo\framework\manager\ShutdownManager.class +com\evo\framework\config\ResourcesConfig.class +com\evo\system\service\impl\SysRoleServiceImpl.class +com\evo\restaurant\domain\RzRestaurantDetail.class +com\evo\common\utils\StringUtils.class +com\evo\framework\security\filter\JwtAuthenticationTokenFilter.class +com\evo\common\core\page\PageDomain.class +com\evo\system\mapper\SysUserMapper.class +com\evo\common\core\domain\entity\SysDept.class +com\evo\personnelMatters\mapper\RzOverTimeDetailMapper.class +com\evo\framework\config\SecurityConfig.class +com\evo\common\core\domain\model\RegisterBody.class +com\evo\personnelMatters\controller\RzOverTimeController.class +com\evo\attendance\mapper\RzAttendanceStatisticalMapper.class +com\evo\personnelMatters\controller\RzLeaveController.class +com\evo\equipment\service\impl\EqImagesServiceImpl.class +com\evo\personnelMatters\service\IRzOverTimeService.class diff --git a/evo-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/evo-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..436ec5e --- /dev/null +++ b/evo-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,378 @@ +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\websocket\WebSocketConfig.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\controller\CommonController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\service\IRzInterviewerService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\restaurant\domain\vo\RestaurantVo.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\StringUtils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\LogUtils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\config\ResourcesConfig.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\mapper\RzAttendanceStatisticalMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\mapper\RzLeaveDetailMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\domain\RzLeave.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\service\impl\SysUserOnlineServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\service\ISysStaffService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\bean\BeanUtils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\domain\vo\CwButtonVo.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\service\IRzHolidayService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\domain\vo\RzAttendanceData.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\mapper\SysUserMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\service\IRzSpecialOverTimeService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\core\domain\R.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\service\impl\EqImagesServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\generator\service\GenTableColumnServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\security\handle\AuthenticationEntryPointImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\domain\vo\CwBottonDto.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\annotation\RepeatSubmit.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\web\service\SysPermissionService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\constant\UserConstants.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\service\impl\RzSubsidyServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\service\ISysDictTypeService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\mapper\SysOperLogMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\service\impl\SysRoleServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\bean\BeanValidators.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\enums\DataSourceType.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\controller\EqImagesController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\web\service\UserDetailsServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\service\impl\SysMenuServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\service\IEqSnDetailService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\mapper\SysStaffDetailMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\security\context\AuthenticationContextHolder.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\annotation\Log.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\domain\RzOverTime.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\controller\RzAbnormalController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\datasource\DynamicDataSource.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\controller\PunchTheClockController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\core\domain\model\LoginBody.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\exception\CustomException.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\domain\SysOperLog.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\service\impl\SysStaffDetailServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\config\FastJson2JsonRedisSerializer.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\service\IRzLeaveDetailService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\domain\RzBusinessTripDetail.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\constant\HttpStatus.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\core\text\CharsetKit.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\controller\RzOverTimeDetailController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\PageUtils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\service\IRzAbnormalService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\poi\ExcelUtil.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\mapper\SysRoleDeptMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\restaurant\controller\RzRestaurantStatisticsController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\restaurant\mapper\RzRestaurantDetailMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\domain\RzAttendanceStatistical.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\config\ApplicationConfig.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\service\impl\RzAbnormalDetailServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\config\DruidConfig.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\service\IRzAttendanceStatisticalService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\restaurant\service\IRzRestaurantImagesService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\config\FilterConfig.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\restaurant\domain\vo\RestaurantData.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\domain\SysCache.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\manager\ShutdownManager.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\restaurant\service\impl\RzRestaurantDetailServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\controller\SysIndexController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\uuid\UUID.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\http\HttpHelper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\service\IEqStatusTimeService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\interceptor\impl\SameUrlDataInterceptor.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\controller\RzAttendanceStatisticalController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\Arith.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\file\FileUtils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\finance\service\IRzSalaryDetailService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\config\MyBatisConfig.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\domain\vo\RzAttendanceVo.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\filter\RepeatedlyRequestWrapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\domain\RzAttendanceDetail.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\exception\file\FileException.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\generator\domain\GenTableColumn.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\mapper\RzAttendanceDetailMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\exception\file\FileNameLengthLimitExceededException.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\mapper\BsOverTimeMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\mapper\RzInterviewerMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\DateUtils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\generator\service\IGenTableService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\service\impl\RzOverTimeDetailServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\service\impl\RzOverTimeServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\service\ISysDeptService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\uuid\Seq.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\domain\SysRoleDept.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\service\impl\PunchTheClockServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\config\serializer\SensitiveJsonSerializer.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\controller\RzLeaveDetailController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\DesensitizedUtil.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\annotation\RateLimiter.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\service\impl\EqButtonServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\web\service\TokenService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\annotation\Excel.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\service\IRzBusinessTripDetailService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\core\page\TableSupport.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\generator\mapper\GenTableMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\constant\GenConstants.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\file\ImageUtils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\mapper\RzSpecialOverTimeMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\mapper\SysRoleMenuMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\service\impl\RzHolidayServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\finance\service\impl\RzSalaryStatisticsServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\service\ISysDictDataService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\controller\SysUserController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\core\domain\entity\SysDept.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\controller\EqStatusTimeController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\constant\ScheduleConstants.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\controller\SysUserOnlineController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\domain\RzAttendance.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\EvoServletInitializer.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\web\service\PermissionService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\config\ThreadPoolConfig.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\mapper\EqOverStaffMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\controller\SysProfileController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\ip\AddressUtils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\domain\RzInterviewer.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\core\redis\RedisCache.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\filter\XssHttpServletRequestWrapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\file\MimeTypeUtils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\poi\ExcelUtils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\controller\RzAttendanceController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\domain\vo\StaffDto.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\generator\domain\GenTable.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\core\page\TableDataInfo.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\domain\vo\RzStatusTimeVo.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\service\impl\RzAttendanceStatisticalServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\mapper\RzHolidayMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\core\domain\BaseEntity.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\restaurant\service\IRzRestaurantStatisticsService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\finance\mapper\RzSalaryStatisticsMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\filter\XssFilter.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\mapper\SysUserRoleMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\controller\SysDeptController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\generator\util\VelocityInitializer.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\service\impl\SysOperLogServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\restaurant\utils\ExcelUtilCy.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\config\ServerConfig.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\mapper\SysDictDataMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\domain\vo\MetaVo.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\xss\XssValidator.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\service\ISysUserOnlineService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\mapper\RzAbnormalMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\mapper\RzAttendanceMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\domain\RzLeaveDetail.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\service\IRzSubsidyService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\sign\Base64.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\exception\UtilException.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\service\impl\EqStatusTimeServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\service\impl\SysDeptServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\service\impl\RzAttendanceServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\html\EscapeUtil.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\service\impl\SysUserServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\core\text\StrFormatter.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\service\IEqButtonService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\exception\GlobalException.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\core\text\Convert.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\security\context\PermissionContextHolder.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\enums\DesensitizedType.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\core\domain\AjaxResult.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\core\domain\model\RegisterBody.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\enums\BusinessStatus.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\controller\RzAbnormalDetailController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\enums\BusinessType.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\exception\user\CaptchaExpireException.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\enums\HttpMethod.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\exception\ServiceException.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\controller\RzInterviewerController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\websocket\SemaphoreUtils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\mapper\RzSpecialAttendanceMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\finance\domain\RzSalaryDetail.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\service\impl\RzSpecialOverTimeServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\service\IRzAbnormalDetailService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\http\HttpUtils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\aspectj\DataSourceAspect.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\mapper\SysRoleMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\mapper\RzAbnormalDetailMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\domain\SysStaffDetail.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\core\domain\model\LoginUser.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\service\impl\SysLogininforServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\uuid\IdUtils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\xss\Xss.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\restaurant\mapper\RzRestaurantStatisticsMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\service\ISysOperLogService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\controller\RzHolidayController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\web\service\SysPasswordService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\mapper\RzBusinessTripMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\sql\SqlUtil.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\controller\SpecialOverTimeController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\mapper\RzBusinessTripDetailMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\domain\SpecialOverTime.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\controller\SysStaffDetailController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\sign\Md5Utils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\service\impl\RzSpecialAttendanceServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\aspectj\RateLimiterAspect.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\restaurant\controller\RzRestaurantImagesController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\annotation\Sensitive.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\config\properties\DruidProperties.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\websocket\WebSocketUsers.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\SecurityUtils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\domain\SysUserRole.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\mapper\EqStatusTimeMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\web\service\SysLoginService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\mapper\RzOverTimeDetailMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\mapper\EqButtonMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\file\FileUploadUtils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\finance\domain\vo\SalaryVo.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\service\impl\SysDictTypeServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\aspectj\LogAspect.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\config\properties\PermitAllUrlProperties.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\service\impl\SysDictDataServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\service\IRzAttendanceService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\domain\vo\RzStatusTimeData.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\annotation\DataSource.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\manager\factory\AsyncFactory.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\mapper\SysDeptMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\service\ISysStaffDetailService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\websocket\WebSocketServer.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\core\domain\TreeSelect.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\service\impl\RzLeaveServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\interceptor\RepeatSubmitInterceptor.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\mapper\EqSnDetailMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\domain\RzAbnormalDetail.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\generator\service\IGenTableColumnService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\domain\RzOverTimeDetail.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\controller\SysDictDataController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\restaurant\domain\RzRestaurantImages.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\MessageUtils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\reflect\ReflectUtils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\EvoApplication.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\ExceptionUtil.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\poi\ExcelHandlerAdapter.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\controller\EqSnDetailController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\domain\vo\CwButtonData.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\config\SecurityConfig.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\generator\util\GenUtils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\controller\SysStaffController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\constant\Constants.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\service\impl\RzAbnormalServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\domain\EqStatusTime.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\domain\RzHoliday.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\service\ISysRoleService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\exception\user\UserException.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\web\exception\GlobalExceptionHandler.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\config\I18nConfig.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\annotation\Anonymous.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\DictUtils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\enums\UserStatus.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\controller\SysRoleController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\security\filter\JwtAuthenticationTokenFilter.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\exception\DemoModeException.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\config\SwaggerConfig.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\core\page\PageDomain.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\exception\user\BlackListException.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\exception\user\UserPasswordRetryLimitExceedException.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\domain\EqImages.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\service\IRzBusinessTripService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\constant\CacheConstants.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\finance\controller\RzSalaryStatisticsController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\datasource\DynamicDataSourceContextHolder.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\controller\RzSpecialOverTimeController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\core\controller\BaseController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\controller\CacheController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\restaurant\service\impl\RzRestaurantImagesServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\domain\SysUserOnline.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\domain\vo\StaffData.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\Threads.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\finance\controller\RzSalaryDetailController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\generator\service\GenTableServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\service\impl\RzBusinessTripServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\domain\EqSnDetail.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\domain\vo\SysStaffVo.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\constant\Constants.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\domain\EqOverStaff.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\controller\RzBusinessTripController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\domain\vo\RouterVo.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\domain\RzSpecialAttendance.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\core\domain\entity\SysDictData.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\poi\ExcelUtilSs.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\finance\domain\RzSalaryStatistics.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\controller\SysOperlogController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\service\IRzOverTimeDetailService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\controller\SysLoginController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\service\impl\RzLeaveDetailServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\aspectj\DataScopeAspect.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\generator\mapper\GenTableColumnMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\controller\RzOverTimeController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\core\domain\entity\SysMenu.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\exception\file\FileSizeLimitExceededException.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\restaurant\mapper\RzRestaurantImagesMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\mapper\RzLeaveMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\finance\mapper\RzSalaryDetailMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\task\TaskController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\core\domain\entity\SysDictType.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\domain\RzSpecialOverTime.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\ServletUtils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\enums\LimitType.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\domain\SysRoleMenu.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\domain\RzAbnormal.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\annotation\Excels.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\service\ISysMenuService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\restaurant\domain\RzRestaurantStatistics.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\domain\SysStaff.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\mapper\SysMenuMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\controller\RzSpecialAttendanceController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\core\domain\TreeEntity.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\service\impl\SysStaffServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\controller\RzLeaveController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\restaurant\service\impl\RzRestaurantStatisticsServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\utils\DateUtil.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\mapper\SysDictTypeMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\exception\base\BaseException.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\controller\RzSubsidyController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\config\RedisConfig.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\spring\SpringUtils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\service\impl\RzBusinessTripDetailServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\service\IRzSpecialAttendanceService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\exception\file\FileUploadException.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\mapper\EqImagesMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\controller\SysLogininforController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\generator\config\GenConfig.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\controller\RzBusinessTripDetailController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\exception\file\InvalidExtensionException.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\exception\job\TaskException.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\service\IEqImagesService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\controller\SysDictTypeController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\generator\controller\GenController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\core\domain\entity\SysRole.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\web\service\SysRegisterService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\core\domain\entity\SysUser.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\filter\RepeatableFilter.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\domain\RzBusinessTrip.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\filter\PropertyPreExcludeFilter.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\attendance\service\PunchTheClockService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\domain\RzSubsidy.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\mapper\RzOverTimeMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\exception\user\CaptchaException.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\restaurant\service\IRzRestaurantDetailService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\domain\EqButton.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\service\impl\RzInterviewerServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\service\impl\EqSnDetailServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\service\impl\SpecialOverTimeServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\ip\IpUtils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\service\ISysLogininforService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\html\HTMLFilter.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\finance\service\IRzSalaryStatisticsService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\security\handle\LogoutSuccessHandlerImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\config\EvoConfig.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\mapper\SysStaffMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\finance\service\impl\RzSalaryDetailServiceImpl.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\service\ISysUserService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\exception\user\UserNotExistsException.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\service\SpecialOverTimeService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\equipment\controller\EqButtonController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\generator\util\VelocityUtils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\exception\user\UserPasswordNotMatchException.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\service\IRzOverTimeService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\framework\manager\AsyncManager.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\enums\OperatorType.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\annotation\DataScope.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\restaurant\domain\RzRestaurantDetail.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\controller\SysMenuController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\mapper\RzSubsidyMapper.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\personnelMatters\service\IRzLeaveService.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\domain\SysLogininfor.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\restaurant\controller\RzRestaurantDetailController.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\common\utils\file\FileTypeUtils.java +F:\code\evo-tech-finance\evo-tech\evo-admin\src\main\java\com\evo\system\mapper\SysLogininforMapper.java diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..0c76d43 --- /dev/null +++ b/pom.xml @@ -0,0 +1,189 @@ + + + 4.0.0 + + com.evo + evo + 3.8.8 + + evo + 浼婄壒绠$悊绯荤粺 + + + 3.8.8 + UTF-8 + UTF-8 + 1.8 + 3.1.1 + 5.3.33 + 5.7.12 + 1.2.23 + 1.21 + 3.0.0 + 2.3.3 + 1.4.7 + 2.0.43 + 6.6.3 + 2.13.0 + 4.1.2 + 2.3 + 0.9.1 + + + + + + + + + org.springframework + spring-framework-bom + ${spring-framework.version} + pom + import + + + + + org.springframework.security + spring-security-bom + ${spring-security.version} + pom + import + + + + + org.springframework.boot + spring-boot-dependencies + 2.5.15 + pom + import + + + + + com.alibaba + druid-spring-boot-starter + ${druid.version} + + + + + eu.bitwalker + UserAgentUtils + ${bitwalker.version} + + + + + com.github.pagehelper + pagehelper-spring-boot-starter + ${pagehelper.boot.version} + + + + + com.github.oshi + oshi-core + ${oshi.version} + + + + + io.springfox + springfox-boot-starter + ${swagger.version} + + + io.swagger + swagger-models + + + + + + + commons-io + commons-io + ${commons.io.version} + + + + + org.apache.poi + poi-ooxml + ${poi.version} + + + + + org.apache.velocity + velocity-engine-core + ${velocity.version} + + + + + com.alibaba.fastjson2 + fastjson2 + ${fastjson.version} + + + + + io.jsonwebtoken + jjwt + ${jwt.version} + + + + + + evo-admin + + pom + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + ${java.version} + ${java.version} + ${project.build.sourceEncoding} + + + + + + + + public + aliyun nexus + https://maven.aliyun.com/repository/public + + true + + + + + + + public + aliyun nexus + https://maven.aliyun.com/repository/public + + true + + + false + + + + + diff --git a/ry.bat b/ry.bat new file mode 100644 index 0000000..ac1e437 --- /dev/null +++ b/ry.bat @@ -0,0 +1,67 @@ +@echo off + +rem jar平级目录 +set AppName=ruoyi-admin.jar + +rem JVM参数 +set JVM_OPTS="-Dname=%AppName% -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC" + + +ECHO. + ECHO. [1] 启动%AppName% + ECHO. [2] 关闭%AppName% + ECHO. [3] 重启%AppName% + ECHO. [4] 启动状态 %AppName% + ECHO. [5] 退 出 +ECHO. + +ECHO.请输入选择项目的序号: +set /p ID= + IF "%id%"=="1" GOTO start + IF "%id%"=="2" GOTO stop + IF "%id%"=="3" GOTO restart + IF "%id%"=="4" GOTO status + IF "%id%"=="5" EXIT +PAUSE +:start + for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do ( + set pid=%%a + set image_name=%%b + ) + if defined pid ( + echo %%is running + PAUSE + ) + +start javaw %JVM_OPTS% -jar %AppName% + +echo starting…… +echo Start %AppName% success... +goto:eof + +rem 函数stop通过jps命令查找pid并结束进程 +:stop + for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do ( + set pid=%%a + set image_name=%%b + ) + if not defined pid (echo process %AppName% does not exists) else ( + echo prepare to kill %image_name% + echo start kill %pid% ... + rem 根据进程ID,kill进程 + taskkill /f /pid %pid% + ) +goto:eof +:restart + call :stop + call :start +goto:eof +:status + for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do ( + set pid=%%a + set image_name=%%b + ) + if not defined pid (echo process %AppName% is dead ) else ( + echo %image_name% is running + ) +goto:eof diff --git a/ry.sh b/ry.sh new file mode 100644 index 0000000..5288970 --- /dev/null +++ b/ry.sh @@ -0,0 +1,86 @@ +#!/bin/sh +# ./ry.sh start 鍚姩 stop 鍋滄 restart 閲嶅惎 status 鐘舵 +AppName=evo-admin.jar + +# JVM鍙傛暟 +JVM_OPTS="-Dname=$AppName -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC" +APP_HOME=`pwd` +LOG_PATH=$APP_HOME/logs/$AppName.log + +if [ "$1" = "" ]; +then + echo -e "\033[0;31m 鏈緭鍏ユ搷浣滃悕 \033[0m \033[0;34m {start|stop|restart|status} \033[0m" + exit 1 +fi + +if [ "$AppName" = "" ]; +then + echo -e "\033[0;31m 鏈緭鍏ュ簲鐢ㄥ悕 \033[0m" + exit 1 +fi + +function start() +{ + PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'` + + if [ x"$PID" != x"" ]; then + echo "$AppName is running..." + else + nohup java $JVM_OPTS -jar $AppName > /dev/null 2>&1 & + echo "Start $AppName success..." + fi +} + +function stop() +{ + echo "Stop $AppName" + + PID="" + query(){ + PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'` + } + + query + if [ x"$PID" != x"" ]; then + kill -TERM $PID + echo "$AppName (pid:$PID) exiting..." + while [ x"$PID" != x"" ] + do + sleep 1 + query + done + echo "$AppName exited." + else + echo "$AppName already stopped." + fi +} + +function restart() +{ + stop + sleep 2 + start +} + +function status() +{ + PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l` + if [ $PID != 0 ];then + echo "$AppName is running..." + else + echo "$AppName is not running..." + fi +} + +case $1 in + start) + start;; + stop) + stop;; + restart) + restart;; + status) + status;; + *) + +esac