Browse Source

薪资代码

yuansh 9 months ago
parent
commit
c5a419f13d
14 changed files with 334 additions and 39 deletions
  1. 22 3
      jeecg-boot/jeecg-boot-base-common/src/main/java/org/jeecg/common/util/encryption/AesEncryptUtil.java
  2. 2 2
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/config/Swagger2Config.java
  3. 27 15
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/controller/SalaryAttendanceController.java
  4. 11 9
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/controller/SalaryChangeRecordController.java
  5. 190 1
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/controller/SalaryManagementController.java
  6. 1 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/entity/SalaryAttendanceDetail.java
  7. 2 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/mapper/SalaryManagementWorkOvertimeMapper.java
  8. 1 1
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/mapper/xml/SalaryManagementExtraMapper.xml
  9. 1 1
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/mapper/xml/SalaryManagementHolidayMapper.xml
  10. 10 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/mapper/xml/SalaryManagementWorkOvertimeMapper.xml
  11. 21 3
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/service/impl/SalaryManagementServiceImpl.java
  12. 7 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/vo/ExcelDemo.java
  13. 22 3
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/shiro/authc/ShiroRealm.java
  14. 17 1
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysPermissionController.java

+ 22 - 3
jeecg-boot/jeecg-boot-base-common/src/main/java/org/jeecg/common/util/encryption/AesEncryptUtil.java

@@ -1,10 +1,12 @@
 package org.jeecg.common.util.encryption;
 
 import org.apache.shiro.codec.Base64;
+import org.jeecg.common.util.DateUtils;
 
 import javax.crypto.Cipher;
 import javax.crypto.spec.IvParameterSpec;
 import javax.crypto.spec.SecretKeySpec;
+import java.math.BigDecimal;
 
 /**
  * AES 加密
@@ -105,19 +107,36 @@ public class AesEncryptUtil {
      * 测试
      */
     public static void main(String args[]) throws Exception {
-
-        String test1 = "sa";
+        //nghotxDTNyeHgH0mlfbJig==
+        // 0
+        // HV3ndEx8HV9kd1WNbxLgwg==
+        // 0.00
+        String test1 = "8000";
         String test =new String(test1.getBytes(),"UTF-8");
         String data = null;
         String key =  KEY;
         String iv = IV;
         // /g2wzfqvMOeazgtsUVbq1kmJawROa6mcRAzwG1/GeJ4=
+
         data = encrypt(test, key, iv);
         System.out.println("数据:"+test);
         System.out.println("加密:"+data);
-        String jiemi =desEncrypt(data, key, iv).trim();
+        String jiemi1 =desEncrypt("TOp/lQtmwo520k9GcoZzrw==", key, iv).trim(); //1月
+        String jiemi2 =desEncrypt("RumlTimzOyN7qjVBujdJxQ==", key, iv).trim(); //2月
+        String jiemi =desEncrypt("qwK3t+2LZh2SbZeOl7z0TQ==", key, iv).trim();
+        System.out.println("解密:"+jiemi1);
+        System.out.println("解密:"+jiemi2);
         System.out.println("解密:"+jiemi);
+//        System.out.println(DateUtils.now());
+
+//        BigDecimal aa = new BigDecimal("20800.00").setScale(2, BigDecimal.ROUND_HALF_UP);
+//        BigDecimal bb = new BigDecimal("2338.81").setScale(2, BigDecimal.ROUND_HALF_UP);
+//        System.out.println(aa.subtract(bb).setScale(2, BigDecimal.ROUND_HALF_UP));
 
 
+        //实发加班工资 = 加班工资 - 个税
+        BigDecimal actualOccurrence = new BigDecimal("0");
+        actualOccurrence = new BigDecimal("64.26").subtract(new BigDecimal("6.43")).setScale(2, BigDecimal.ROUND_HALF_UP);
+        System.out.println(actualOccurrence);
     }
 }

+ 2 - 2
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/config/Swagger2Config.java

@@ -39,7 +39,7 @@ public class Swagger2Config implements WebMvcConfigurer {
 	/**
 	 *
 	 * 显示swagger-ui.html文档展示页,还必须注入swagger资源:
-	 * 
+	 *
 	 * @param registry
 	 */
 	@Override
@@ -56,7 +56,7 @@ public class Swagger2Config implements WebMvcConfigurer {
 	 */
 	@Bean
 	public Docket createRestApi() {
-		return new Docket(DocumentationType.SWAGGER_2)
+		return new Docket(DocumentationType.SWAGGER_2).enable(false)
 				.apiInfo(apiInfo())
 				.select()
 				//此包路径下的类,才生成接口文档

+ 27 - 15
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/controller/SalaryAttendanceController.java

@@ -242,7 +242,7 @@ public class SalaryAttendanceController {
             mv.addObject(NormalExcelConstants.FILE_NAME, title); //此处设置的filename无效 ,前端会重更新设置一下
             mv.addObject(NormalExcelConstants.PARAMS, new ExportParams(title + "报表",  title, ExcelType.XSSF));
 
-        }else if(type.equals("加班表")){
+        }else if(type.equals("加班表")){//此类型作废
             // Step.2 获取导出数据
             title = "加班表";
             List<SalaryAttendanceWorkOvertime> exportList = salaryAttendanceWorkOvertimeService.selectByMainId(object.getId(),null,null);
@@ -344,6 +344,18 @@ public class SalaryAttendanceController {
             return Result.error("参数异常:年月或类型为空!!");
         }
 
+        String type = salaryAttendance.getType();//月度工资单、年休工资单、加班工资单
+        String yearWithMonth = salaryAttendance.getYearWithMonth();//除年休时本字段有值,2024-01;年休时为空
+
+        if(type.equals("考勤表")
+                && (yearWithMonth.equals("2024-01")
+                || yearWithMonth.equals("2024-02")
+                || yearWithMonth.equals("2024-03")
+                || yearWithMonth.equals("2024-04")
+                || yearWithMonth.equals("2024-05"))){
+            return Result.error("2024-01至2024-05为初始数据,请勿操作!!");
+        }
+
         if(StringUtils.isEmpty(salaryAttendance.getId()) || "false".equals(salaryAttendance.getId())){
             QueryWrapper<SalaryAttendance> queryWrapper = new QueryWrapper<>();
             queryWrapper.eq("del_flag", "0");
@@ -366,20 +378,20 @@ public class SalaryAttendanceController {
         }
 
         //考勤表也不允许后份生成后,重新更新之前数据,(该问题最后更新)
-//        QueryWrapper<SalaryAttendance> queryWrapper1 = new QueryWrapper<>();
-//        queryWrapper1.eq("del_flag", "0");
-//        if(salaryAttendance.getType().equals("年休表")){
-//            salaryAttendance.setYearWithMonth(salaryAttendance.getYearWithMonth().substring(0, 4));
-//            queryWrapper1.gt("year_with_month",salaryAttendance.getYearWithMonth());
-//        }else{
-//            queryWrapper1.gt("year_with_month", salaryAttendance.getYearWithMonth());
-//        }
-//
-//        queryWrapper1.eq("type", salaryAttendance.getType());
-//        List<SalaryAttendance> list1 = salaryAttendanceService.list(queryWrapper1);
-//        if(list1.size() > 0){
-//            return Result.error("后续考勤已导入,无法导入此月考勤数据!!");
-//        }
+        QueryWrapper<SalaryAttendance> queryWrapper1 = new QueryWrapper<>();
+        queryWrapper1.eq("del_flag", "0");
+        if(salaryAttendance.getType().equals("年休表")){
+            salaryAttendance.setYearWithMonth(salaryAttendance.getYearWithMonth().substring(0, 4));
+            queryWrapper1.gt("year_with_month",salaryAttendance.getYearWithMonth());
+        }else{
+            queryWrapper1.gt("year_with_month", salaryAttendance.getYearWithMonth());
+        }
+
+        queryWrapper1.eq("type", salaryAttendance.getType());
+        List<SalaryAttendance> list1 = salaryAttendanceService.list(queryWrapper1);
+        if(list1.size() > 0){
+            return Result.error("后续考勤已导入,无法导入此月考勤数据!!");
+        }
 
 
         MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;

+ 11 - 9
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/controller/SalaryChangeRecordController.java

@@ -58,14 +58,13 @@ public class SalaryChangeRecordController extends JeecgController<SalaryChangeRe
     @Autowired
     private ISalaryChangeRecordService salaryChangeRecordService;
 
-//    @ModelAttribute
-//    public void get() {
-//
-//        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-//        if(!"111".equals(sysUser.getUsername())){
-//            throw new JeecgBootException("无权操作此功能!!!");
-//        }
-//    }
+    @ModelAttribute
+    public void get() {
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if(!"T0003".equals(sysUser.getUsername())){
+            throw new JeecgBootException("无权操作此功能!!!");
+        }
+    }
     /**
      * 分页列表查询
      *
@@ -145,7 +144,10 @@ public class SalaryChangeRecordController extends JeecgController<SalaryChangeRe
         if(StringUtils.isNotBlank(column)){
             SqlInjectionUtil.filterContent(column);
 //            column = oConvertUtils.camelToUnderline(column);
-            sql = "order by "+column +" "+order +", substring_index(work_no, '-', 1) + 0 ASC,work_no";
+            if(column.equals("orgName")){
+                column =" CASE orgName WHEN '马菲羊' THEN 1 WHEN '森语' THEN 2  WHEN '正织' THEN 3 ELSE '4' END ";
+            }
+            sql = "order by "+column +" "+order +", IFNULL(sort_num,9999), substring_index(work_no, '-', 1) + 0 ASC,work_no";
 
         }else{
             sql = "order by substring_index(work_no, '-', 1) + 0 ASC,work_no";

+ 190 - 1
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/controller/SalaryManagementController.java

@@ -12,14 +12,19 @@ import javax.servlet.http.HttpServletResponse;
 import org.apache.commons.lang.StringUtils;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.ss.usermodel.*;
+import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.system.vo.LoginUser;
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.util.DateUtils;
 import org.jeecg.common.util.SqlInjectionUtil;
 import org.jeecg.common.util.encryption.AesEncryptUtil;
 import org.jeecg.modules.salary.entity.*;
+import org.jeecg.modules.salary.mapper.SalaryManagementDetailMapper;
 import org.jeecg.modules.salary.service.*;
 import org.jeecg.modules.salary.vo.ExcelDemo;
+import org.jeecg.modules.salary.vo.ExcelTemp;
+import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.mapper.SysUserMapper;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
 import org.jeecgframework.poi.excel.def.TemplateExcelConstants;
@@ -66,6 +71,18 @@ public class SalaryManagementController {
     private ISalaryManagementExtraService salaryManagementExtraService;
     @Autowired
     private ISalaryChangeRecordService salaryChangeRecordService;
+    @Autowired
+    private SysUserMapper sysUserMapper;
+    @Autowired
+    private SalaryManagementDetailMapper salaryManagementDetailMapper;
+
+    @ModelAttribute
+    public void get() {
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if(!"T0003".equals(sysUser.getUsername())){
+            throw new JeecgBootException("无权操作此功能!!!");
+        }
+    }
 
     /**
      * 分页列表查询 (工资单)
@@ -192,7 +209,7 @@ public class SalaryManagementController {
     }
 
 
-    public static void main(String[] args) throws IOException, IllegalAccessException {
+    public static void main1(String[] args) throws IOException, IllegalAccessException {
 //        SalaryChangeRecord userParams = new SalaryChangeRecord();
 //        userParams.setId("sssss");
 //        Map<String, Object> map = new HashMap<>();
@@ -744,11 +761,20 @@ public class SalaryManagementController {
                 ExcelDemo demo = new ExcelDemo();
                 demo.setCode(o.getYearWithMonth());
                 demo.setName(o.getName());
+                demo.setOrgName(o.getOrgName());
 
                 String totalPayable = o.getTotalPayable();
                 if (StringUtils.isNotBlank(totalPayable)) {
                     demo.setCardNo(AesEncryptUtil.desEncrypt(totalPayable).trim());
                 }
+                String payTaxes = o.getPayTaxes();
+                if (StringUtils.isNotBlank(payTaxes)) {
+                    demo.setPayTaxes(AesEncryptUtil.desEncrypt(payTaxes).trim());
+                }
+                String cumulative = o.getCumulative();
+                if (StringUtils.isNotBlank(cumulative)) {
+                    demo.setCumulative(AesEncryptUtil.desEncrypt(cumulative).trim());
+                }
                 demo.setWages(o.getPersonalTax().toString());
                 demo.setTest1(o.getTotalDeduction().toString());
                 demo.setTest("月度工资单");
@@ -778,6 +804,7 @@ public class SalaryManagementController {
                 demo.setWages(o.getPersonalTax().toString());
                 demo.setTest1(o.getPersonalTax().toString());
 
+                demo.setOrgName(o.getOrgName());
                 String actualOccurrence = o.getActualOccurrence();
                 if (StringUtils.isNotBlank(actualOccurrence)) {
                     demo.setTest2(AesEncryptUtil.desEncrypt(actualOccurrence).trim());
@@ -803,6 +830,7 @@ public class SalaryManagementController {
                 demo.setWages(o.getPersonalTax().toString());
                 demo.setTest1(o.getPersonalTax().toString());
 
+                demo.setOrgName(o.getOrgName());
                 String actualOccurrence = o.getActualOccurrence();
                 if (StringUtils.isNotBlank(actualOccurrence)) {
                     demo.setTest2(AesEncryptUtil.desEncrypt(actualOccurrence).trim());
@@ -832,6 +860,7 @@ public class SalaryManagementController {
                 demo.setWages(o.getPersonalTax().toString());
                 demo.setTest1(o.getPersonalTax().toString());
 
+                demo.setOrgName(o.getOrgName());
                 String actualOccurrence = o.getAfterTaxAmount();
                 if (StringUtils.isNotBlank(actualOccurrence)) {
                     demo.setTest2(AesEncryptUtil.desEncrypt(actualOccurrence).trim());
@@ -855,6 +884,7 @@ public class SalaryManagementController {
                 demo.setName(o.getName());
                 demo.setTest("年终奖");
 
+                demo.setOrgName(o.getOrgName());
                 String getBeforeTaxAmount = o.getBeforeTaxAmount();
                 if (StringUtils.isNotBlank(getBeforeTaxAmount)) {
                     demo.setCardNo(AesEncryptUtil.desEncrypt(getBeforeTaxAmount).trim());
@@ -1215,4 +1245,163 @@ public class SalaryManagementController {
         return "true";
     }
 
+    public static void main(String[] args) throws Exception {
+        ImportParams params = new ImportParams();
+        params.setTitleRows(0);
+        params.setHeadRows(0);
+        //params.setSheetNum(9);
+        params.setNeedSave(false);
+        long start = new Date().getTime();
+        List<ExcelTemp> list = ExcelImportUtil.importExcel(new File(
+                "e:/一月考勤 - 正织.xlsx"), ExcelTemp.class, params);
+//        AesEncryptUtil.desEncrypt(Salary).trim()
+
+        for(ExcelTemp o:list){
+            String name = o.getName();
+            BigDecimal deduction = o.getDeduction();
+
+            System.out.println(name);
+            System.out.println(deduction);
+
+
+//            String wages = AesEncryptUtil.encrypt(personalTax.toString()).trim();
+//            System.out.println("update sys_user set adjustment = '"+wages+"' where realname='" +name+"';");
+        }
+
+    }
+
+    @RequestMapping(value = "/tempChange")
+    public void tempChange(@RequestParam(name = "excelName", required = true)String excelName,
+                           @RequestParam(name = "month", required = true)String month) throws Exception {
+
+        if(StringUtils.isBlank(excelName)){
+            return;
+        }
+        if(StringUtils.isBlank(month)){
+            return;
+        }
+
+        ImportParams params = new ImportParams();
+        params.setTitleRows(0);
+        params.setHeadRows(0);
+        params.setNeedSave(false);
+        List<ExcelTemp> list = ExcelImportUtil.importExcel(new File(
+                "e:/"+excelName+".xlsx"), ExcelTemp.class, params);
+
+        SalaryManagement salaryManagement = new SalaryManagement(); //主表
+        //发放薪资合计(用于主表统计)
+        BigDecimal salary = new BigDecimal("0");
+        //个税合计(用于主表统计)
+        BigDecimal personalTax = new BigDecimal("0");
+
+
+        List<SalaryManagementDetail> salaryAttendanceDetailList = new ArrayList<>();//子表
+        String org = "";
+        for(ExcelTemp o:list){
+
+            String orgName = o.getOrgName();//组织
+
+            if(StringUtils.isBlank(org)){
+
+                org = orgName;
+            }
+
+            String code = o.getCode();//编码
+            String name = o.getName();//员工姓名
+            BigDecimal deduction = o.getDeduction();//工资抵扣
+            BigDecimal wages = o.getWages();//基本工资
+            BigDecimal yingfa = o.getYingfa();//应发
+            BigDecimal shebao = o.getShebao();//社保
+            BigDecimal zhufangjijin = o.getZhufangjijin();//住房基金
+            BigDecimal gerenshuodeshui = o.getGerenshuodeshui();//个人所得税
+            BigDecimal hejiyingkou = o.getHejiyingkou();//合计应扣
+            BigDecimal shifaheji = o.getShifaheji();//实发合计
+            BigDecimal yingnashuie = o.getYingnashuie()==null||BigDecimal.ZERO.compareTo(o.getYingnashuie())>=0?BigDecimal.ZERO:o.getYingnashuie();//纳税金额
+
+            List<SysUser> listUser = sysUserMapper.getUserByRealName(name);
+            if(listUser.size() == 0){
+                continue;
+            }
+            String userId = listUser.get(0).getId();
+            String cardNo = listUser.get(0).getNCardNo();
+
+            salary = salary.add(shifaheji);
+            personalTax = personalTax.add(gerenshuodeshui);
+
+            //累计所得额 = 本年度当前人员所有应纳税所得之和
+            BigDecimal cumulative = new BigDecimal("0");
+            List<SalaryManagementDetail> cumulativeList = salaryManagementDetailMapper.selectByUser(userId, "2024", month);
+
+            if (cumulativeList.size() > 0) {
+                for (SalaryManagementDetail detail : cumulativeList) {
+
+                    String hisPayTaxes = detail.getPayTaxes();//应纳税所得额
+                    hisPayTaxes = AesEncryptUtil.desEncrypt(hisPayTaxes).trim();
+                    BigDecimal bigPayTaxes = new BigDecimal(hisPayTaxes);
+                    cumulative = cumulative.add(bigPayTaxes);
+                }
+
+            }
+            cumulative = cumulative.add(yingnashuie).setScale(2, BigDecimal.ROUND_HALF_UP);;
+
+            SalaryManagementDetail detail = new SalaryManagementDetail();
+
+            detail.setCardNo(cardNo);
+            detail.setYearWithMonth(month);
+            detail.setVersion("1");
+            detail.setUserId(userId);
+            detail.setCode(code);
+            detail.setName(name);
+            detail.setOrgName(orgName);
+
+            String wagesHis = AesEncryptUtil.encrypt(wages.toString()).trim();
+            detail.setWages(wagesHis);//基本薪资
+
+            String yingfaHis = AesEncryptUtil.encrypt(yingfa.toString()).trim();
+            detail.setTotalPayable(yingfaHis);//合计应发
+
+            detail.setTotalDeduction(hejiyingkou);//合计应扣
+            detail.setSocialSecurity(shebao);//社保
+            detail.setAccumulationFund(zhufangjijin);//公积金
+            detail.setPersonalTax(gerenshuodeshui);//个税
+
+            String shifahejiHis = AesEncryptUtil.encrypt(shifaheji.toString()).trim();
+            detail.setActualOccurrence(shifahejiHis);//实发合计
+            detail.setDeduction(deduction);//工资抵扣
+
+            String yingnashuieHis = AesEncryptUtil.encrypt(yingnashuie.toString()).trim();
+            detail.setPayTaxes(yingnashuieHis);//应纳税所得额
+
+            String cumulativeHis = AesEncryptUtil.encrypt(cumulative.toString()).trim();
+            detail.setCumulative(cumulativeHis);//累计所得额
+
+            salaryAttendanceDetailList.add(detail);
+
+        }
+
+        String salaryHis = AesEncryptUtil.encrypt(salary.toString()).trim();
+        String personalTaxHis = AesEncryptUtil.encrypt(personalTax.toString()).trim();
+        salaryManagement.setSalary(salaryHis);
+        salaryManagement.setPersonalTax(personalTaxHis);
+        salaryManagement.setType("月度工资单");
+        salaryManagement.setYearWithMonth(month);
+        salaryManagement.setOrgName(org);
+        salaryManagement.setVersion("1");
+        salaryManagement.setNumberPeople(salaryAttendanceDetailList.size());
+        salaryManagement.setGenerationTime(new Date());
+        salaryManagementService.save(salaryManagement);
+
+
+        for(SalaryManagementDetail o:salaryAttendanceDetailList){
+            o.setHeadId(salaryManagement.getId());
+            o.setActionLog("薪资初始化");
+            salaryManagementDetailService.save(o);
+        }
+
+        System.out.println("==============================================");
+        System.out.println("========执行结束==========:"+salaryAttendanceDetailList.size());
+        System.out.println("==============================================");
+
+    }
+
 }

+ 1 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/entity/SalaryAttendanceDetail.java

@@ -45,6 +45,7 @@ public class SalaryAttendanceDetail implements Serializable {
 	/**员工主键*/
 	private String userId;
 	/**组织*/
+	@Excel(name = "组织", width = 15)
 	private String orgName;
 
 	/**员工编号*/

+ 2 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/mapper/SalaryManagementWorkOvertimeMapper.java

@@ -21,4 +21,6 @@ public interface SalaryManagementWorkOvertimeMapper extends BaseMapper<SalaryMan
 	public List<SalaryManagementWorkOvertime> selectByUser(@Param("userId")String userId, @Param("yearWithMonth")String yearWithMonth, @Param("yearWithMonthNow")String yearWithMonthNow);
 
 	public List<SalaryManagementWorkOvertime> selectByUserTotal(@Param("userId")String userId, @Param("beginDate")String beginDate, @Param("endDate")String endDate);
+
+	public int selectHistoryNum(@Param("beginDate")String beginDate,@Param("endDate")String endDate);
 }

+ 1 - 1
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/mapper/xml/SalaryManagementExtraMapper.xml

@@ -33,7 +33,7 @@
 	</select>
 
 	<select id="selectByUserTotal" parameterType="java.lang.String" resultType="org.jeecg.modules.salary.entity.SalaryManagementExtra">
-		select * from salary_management_extra where del_flag = 0 and calculate = 1
+		select * from salary_management_extra where del_flag = 0
 		<if test="type != null and type != ''">
 			and type = #{type}
 		</if>

+ 1 - 1
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/mapper/xml/SalaryManagementHolidayMapper.xml

@@ -27,7 +27,7 @@
 	</select>
 	<select id="selectByUserTotal" parameterType="java.lang.String" resultType="org.jeecg.modules.salary.entity.SalaryManagementHoliday">
 		select * from salary_management_holiday where del_flag = 0
-		and user_id = #{userId} and year_with BETWEEN #{beginDate} and #{endDate}
+		and user_id = #{userId} and CONCAT(year_with, '-12') BETWEEN #{beginDate} and #{endDate}
 
 	</select>
 

+ 10 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/mapper/xml/SalaryManagementWorkOvertimeMapper.xml

@@ -37,4 +37,14 @@
 
 	</select>
 
+	<select id="selectHistoryNum" parameterType="java.lang.String" resultType="int">
+		select count(1) from salary_management_work_overtime where del_flag = 0
+		and
+		(
+			(#{beginDate} BETWEEN begin_month and end_month) OR (#{endDate} BETWEEN begin_month and end_month)
+		)
+		LIMIT 1
+
+	</select>
+
 </mapper>

+ 21 - 3
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/service/impl/SalaryManagementServiceImpl.java

@@ -66,7 +66,8 @@ public class SalaryManagementServiceImpl extends ServiceImpl<SalaryManagementMap
                 String userId = o.getUserId();
                 List<SalaryManagementDetail> detailList = salaryManagementDetailMapper.selectByUserTotal(userId, beginDate, endDate);
                 List<SalaryManagementWorkOvertime> overTimeList = salaryManagementWorkOvertimeMapper.selectByUserTotal(userId, beginDate, endDate);
-                List<SalaryManagementHoliday> holidayList = salaryManagementHolidayMapper.selectByUserTotal(userId, beginDate.substring(0, 4), endDate.substring(0, 4));
+
+                List<SalaryManagementHoliday> holidayList = salaryManagementHolidayMapper.selectByUserTotal(userId, beginDate, endDate);
                 List<SalaryManagementExtra> extraList = salaryManagementExtraMapper.selectByUserTotal(userId,beginDate, endDate,null);
 
                 BigDecimal phoneBill = new BigDecimal("0");//话费补贴
@@ -126,7 +127,7 @@ public class SalaryManagementServiceImpl extends ServiceImpl<SalaryManagementMap
                     overtimePay = overtimePay.add(d.getWorkOvertimeCost() == null ? BigDecimal.ZERO : d.getWorkOvertimeCost());
                     personalTax = personalTax.add(d.getPersonalTax() == null ? BigDecimal.ZERO : d.getPersonalTax());
                     //合计应扣,此处需加上加班工资的个税
-                    totalDeduction = personalTax.add(d.getPersonalTax() == null ? BigDecimal.ZERO : d.getPersonalTax());
+                    totalDeduction = totalDeduction.add(d.getPersonalTax() == null ? BigDecimal.ZERO : d.getPersonalTax());
                     //合计应发,此处需加上加班工资
                     totalPayable = totalPayable.add(d.getWorkOvertimeCost() == null ? BigDecimal.ZERO : d.getWorkOvertimeCost());
                     //actualOccurrence 实发合计
@@ -138,6 +139,8 @@ public class SalaryManagementServiceImpl extends ServiceImpl<SalaryManagementMap
 
                 for (SalaryManagementExtra d : extraList) {
 
+                    //个税(增加年终奖的个税,应扣无需增加)
+                    personalTax = personalTax.add(d.getPersonalTax() == null ? BigDecimal.ZERO : d.getPersonalTax());
                     //合计应发
                     String hisTotalPayable = d.getBeforeTaxAmount() == null ? "nghotxDTNyeHgH0mlfbJig==" : d.getBeforeTaxAmount();
                     hisTotalPayable = AesEncryptUtil.desEncrypt(hisTotalPayable).trim();
@@ -151,7 +154,7 @@ public class SalaryManagementServiceImpl extends ServiceImpl<SalaryManagementMap
                 for (SalaryManagementHoliday d : holidayList) {
                     personalTax = personalTax.add(d.getPersonalTax() == null ? BigDecimal.ZERO : d.getPersonalTax());
                     //合计应扣,此处需加上年休工资的个税
-                    totalDeduction = personalTax.add(d.getPersonalTax() == null ? BigDecimal.ZERO : d.getPersonalTax());
+                    totalDeduction = totalDeduction.add(d.getPersonalTax() == null ? BigDecimal.ZERO : d.getPersonalTax());
 
                     //totalPayable 合计应发  d.getWages();//应发薪资
                     String hisTotalPayable = d.getWages() == null ? "nghotxDTNyeHgH0mlfbJig==" : d.getWages();
@@ -510,6 +513,16 @@ public class SalaryManagementServiceImpl extends ServiceImpl<SalaryManagementMap
         }
 
         String yearWithMonth = salaryManagement.getYearWithMonth();//除年休时本字段有值,2024-01;年休时为空
+        if(type.equals("月度工资单")
+                && (yearWithMonth.equals("2024-01")
+                || yearWithMonth.equals("2024-02")
+                || yearWithMonth.equals("2024-03")
+                || yearWithMonth.equals("2024-04")
+                || yearWithMonth.equals("2024-05"))){
+            return Result.error("2024-01至2024-05为初始数据,请勿操作!!");
+        }
+
+
 
         String endMonth = salaryManagement.getEndMonth(); //加班时此字段有值;其他时为空
         String beginMonth = salaryManagement.getBeginMonth();//加班时此字段有值;其他时为空
@@ -542,6 +555,11 @@ public class SalaryManagementServiceImpl extends ServiceImpl<SalaryManagementMap
                     "(select generation_time from salary_management where year_with_month ='"+yearWith+"' and type ='年休工资单' and del_flag=0 limit 1 ) ");
         }else if(type.equals("加班工资单")){
 
+            int b = salaryManagementWorkOvertimeMapper.selectHistoryNum(beginMonth,endMonth);
+            if(b > 0){
+                return Result.error(beginMonth+"至"+endMonth+"加班月份区间含有计算过的加班时间,请选择其他月份区间!!");
+            }
+
             queryWrapper2.eq("year_with_month",yearWithMonth);
             queryWrapper2.eq("type","加班工资单");
 

+ 7 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/vo/ExcelDemo.java

@@ -6,6 +6,9 @@ import org.jeecgframework.poi.excel.annotation.Excel;
 @Data
 public class ExcelDemo {
 
+    /**员工编号*/
+    @Excel(name = "组织", width = 15)
+    private String orgName;
     /**员工编号*/
     @Excel(name = "编号", width = 15)
     private String code;
@@ -29,5 +32,9 @@ public class ExcelDemo {
     private String test1;
     /**工资*/
     private String test2;
+    /**应纳税所得额*/
+    private String payTaxes;
+    /**累计所得额*/
+    private String cumulative;
 }
 

+ 22 - 3
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/shiro/authc/ShiroRealm.java

@@ -1,5 +1,7 @@
 package org.jeecg.modules.shiro.authc;
 
+import java.util.Arrays;
+import java.util.List;
 import java.util.Set;
 
 import org.apache.shiro.authc.AuthenticationException;
@@ -26,6 +28,8 @@ import org.springframework.stereotype.Component;
 
 import lombok.extern.slf4j.Slf4j;
 
+import javax.servlet.http.HttpServletRequest;
+
 /**
  * @Description: 用户登录鉴权和获取用户授权
  * @Author: Scott
@@ -125,10 +129,25 @@ public class ShiroRealm extends AuthorizingRealm {
             throw new AuthenticationException("账号已被锁定,请联系管理员!");
         }
 		// 校验token是否超时失效 & 或者账号密码是否错误
-//		if (!jwtTokenRefresh(token, username, loginUser.getPassword())) {
-//			throw new AuthenticationException("Token失效,请重新登录!");
-//		}
+		if (!jwtTokenRefresh(token, username, loginUser.getPassword())) {
+			throw new AuthenticationException("Token失效,请重新登录!");
+		}
 
+//		HttpServletRequest request = SpringContextUtils.getHttpServletRequest();
+//		String currentUrl = request.getRequestURL().toString();
+//
+//		Set<String> permissionSet = sysUserService.getUserUrlSet(username);
+//		for(String a:permissionSet){
+//			System.out.println("===============");
+//			System.out.println(a);
+//			System.out.println("===============");
+//		}
+//		List<Object> urls = Arrays.asList(currentUrl.split("/jeecg-boot"));
+//		if(urls.size() > 1){
+//			if(!permissionSet.contains(urls.get(1))){
+//				throw new AuthenticationException("权限不足!");
+//			}
+//		}
 		return loginUser;
 	}
 

+ 17 - 1
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysPermissionController.java

@@ -209,7 +209,23 @@ public class SysPermissionController {
 			}
 			log.info(" ------ 通过令牌获取用户拥有的访问菜单 ---- TOKEN ------ " + token);
 			String username = JwtUtil.getUsername(token);
-			List<SysPermission> metaList = sysPermissionService.queryByUser(username);
+			List<SysPermission> metaList2 = sysPermissionService.queryByUser(username);
+
+			List<SysPermission> metaList = new ArrayList<>();
+
+//			metaList = metaList2;
+			if(username.equals("T0003")){
+				metaList = metaList2;
+			}else{
+
+				for(SysPermission o:metaList2){
+					String name = o.getName();
+					if(!name.equals("薪资管理")&&!name.equals("工资单")&&!name.equals("基本薪资")&&!name.equals("薪资统计")&&!name.equals("薪资调整记录")){
+						metaList.add(o);
+					}
+				}
+			}
+
 			//添加首页路由
 			//update-begin-author:taoyan date:20200211 for: TASK #3368 【路由缓存】首页的缓存设置有问题,需要根据后台的路由配置来实现是否缓存
 			if(!PermissionDataUtil.hasIndexPage(metaList)){