diff --git a/resource/sql/Oracle常见问题.txt b/resource/sql/Oracle常见问题.txt index 8725b72ea..e7550cf71 100644 --- a/resource/sql/Oracle常见问题.txt +++ b/resource/sql/Oracle常见问题.txt @@ -9,9 +9,11 @@ Oracle数据库中常见报错问题 -- 删除原表HRSA_SALARY_TEMPLATE数据 delete from HRSA_SALARY_TEMPLATE; + alter TABLE HRSA_SALARY_TEMPLATE MODIFY SALARY_ITEM_SETTING NULL; alter table HRSA_SALARY_TEMPLATE modify salary_item_setting long; alter table HRSA_SALARY_TEMPLATE modify salary_item_setting CLOB; insert into HRSA_SALARY_TEMPLATE select * from HRSA_SALARY_TEMPLAT_TEMPT ; + alter TABLE HRSA_SALARY_TEMPLATE MODIFY SALARY_ITEM_SETTING NOT NULL; drop table HRSA_SALARY_TEMPLAT_TEMPT; diff --git a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java index da52c4415..0bc998079 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java @@ -16,6 +16,8 @@ import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salaryacct.SalaryAcctRecordMapper; import com.engine.salary.service.*; +import com.engine.salary.sys.service.SalarySysConfService; +import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; @@ -65,6 +67,10 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe return ServiceUtil.getService(SalarySendServiceImpl.class, user); } + private SalarySysConfService getSalarySysConfService(User user){ + return ServiceUtil.getService(SalarySysConfServiceImpl.class,user); + } + // private SalaryCheckResultService salaryCheckResultService; // // private SalaryCheckResultDetailService salaryCheckResultDetailService; @@ -85,6 +91,7 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe return ServiceUtil.getService(SalaryAcctReportServiceImpl.class, user); } + @Override public SalaryAcctRecordPO getById(Long id) { return getSalaryAcctRecordMapper().getById(id); @@ -296,17 +303,8 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe //获取账套下的所有核算结果 List salaryAcctRecords = listByTaxCycle(taxCycleYearRange,salarySobIds); - // 如果某个月(税款所属期)还未申报,不可以新建之后月份的薪资核算 - SalaryAcctRecordPO notDeclaredSalaryAcctRecordPO = salaryAcctRecords.stream() - .filter(e -> !Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.DECLARED.getValue()) - && e.getTaxCycle().before(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getTaxCycle().atDay(1)))) - .findAny() - .orElse(null); - if (Objects.nonNull(notDeclaredSalaryAcctRecordPO)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98751, "税款所属期{0}的薪资核算结果还未申报,不能新建税款所属期{1}的薪资核算") - .replace("{0}", SalaryDateUtil.localDate2YearMonth(notDeclaredSalaryAcctRecordPO.getTaxCycle()).toString()) - .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); - } + // 是否关闭个税申报功能 + Boolean haveClosedTaxDeclaration = getSalarySysConfService(user).haveClosedTaxDeclaration(); // 如果某个月(税款所属期)已经归档了,不可以新建之前月份的薪资核算 SalaryAcctRecordPO hasArchivedSalaryAcctRecordPO = salaryAcctRecords.stream() .filter(e -> Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.ARCHIVED.getValue()) @@ -318,17 +316,33 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe .replace("{0}", SalaryDateUtil.localDate2YearMonth(hasArchivedSalaryAcctRecordPO.getTaxCycle()).toString()) .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); } - // 如果某个月(税款所属期)已经申报了,不可以新建本月以及之前月份的薪资核算 - SalaryAcctRecordPO hasDeclaredSalaryAcctRecordPO = salaryAcctRecords.stream() - .filter(e -> Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.DECLARED.getValue()) - && e.getTaxCycle().compareTo(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getTaxCycle().atDay(1))) >= 0) - .findAny() - .orElse(null); - if (Objects.nonNull(hasDeclaredSalaryAcctRecordPO)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98753, "税款所属期{0}的薪资核算结果已经申报,不能新建税款所属期{1}的薪资核算") - .replace("{0}", SalaryDateUtil.localDate2YearMonth(hasDeclaredSalaryAcctRecordPO.getTaxCycle()).toString()) - .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); + + if(!haveClosedTaxDeclaration){ + // 开启了个税申报功能 + // 如果某个月(税款所属期)还未申报,不可以新建之后月份的薪资核算 + SalaryAcctRecordPO notDeclaredSalaryAcctRecordPO = salaryAcctRecords.stream() + .filter(e -> !Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.DECLARED.getValue()) + && e.getTaxCycle().before(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getTaxCycle().atDay(1)))) + .findAny() + .orElse(null); + if (Objects.nonNull(notDeclaredSalaryAcctRecordPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98751, "税款所属期{0}的薪资核算结果还未申报,不能新建税款所属期{1}的薪资核算") + .replace("{0}", SalaryDateUtil.localDate2YearMonth(notDeclaredSalaryAcctRecordPO.getTaxCycle()).toString()) + .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); + } + // 如果某个月(税款所属期)已经申报了,不可以新建本月以及之前月份的薪资核算 + SalaryAcctRecordPO hasDeclaredSalaryAcctRecordPO = salaryAcctRecords.stream() + .filter(e -> Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.DECLARED.getValue()) + && e.getTaxCycle().compareTo(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getTaxCycle().atDay(1))) >= 0) + .findAny() + .orElse(null); + if (Objects.nonNull(hasDeclaredSalaryAcctRecordPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98753, "税款所属期{0}的薪资核算结果已经申报,不能新建税款所属期{1}的薪资核算") + .replace("{0}", SalaryDateUtil.localDate2YearMonth(hasDeclaredSalaryAcctRecordPO.getTaxCycle()).toString()) + .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); + } } + } @@ -454,7 +468,7 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "薪资所属月为空")); } // 查询税款所在年的该个税扣缴义务人所有薪资核算记录 - //获取账套所属个税扣缴义务人的核算记录 + // 获取账套所属个税扣缴义务人的核算记录 SalarySobPO salarySobPO = getSalarySobService(user).getById(salaryAcctRecordPO.getSalarySobId()); Long taxAgentId = salarySobPO.getTaxAgentId(); //查询扣缴义务人下的所有账套 @@ -474,8 +488,12 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe } //撤回工资单 getSalarySendService(user).revokeSalaryBill(salaryAcctRecordId); - //删除个税申报表(个税申报表、个税申报表详情、往期累计情况) - getTaxDeclarationService(user).delete(salaryAcctRecordPO); + Boolean haveClosedTaxDeclaration = getSalarySysConfService(user).haveClosedTaxDeclaration(); + if(!haveClosedTaxDeclaration){ + // 开启了个税申报功能 + // 删除个税申报表(个税申报表、个税申报表详情、往期累计情况) + getTaxDeclarationService(user).delete(salaryAcctRecordPO); + } // 更新薪资核算记录的状态 salaryAcctRecordPO.setStatus(SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue()); salaryAcctRecordPO.setUpdateTime(new Date()); diff --git a/src/com/engine/salary/sys/constant/SalarySysConstant.java b/src/com/engine/salary/sys/constant/SalarySysConstant.java index 4800e1e61..82c432564 100644 --- a/src/com/engine/salary/sys/constant/SalarySysConstant.java +++ b/src/com/engine/salary/sys/constant/SalarySysConstant.java @@ -45,4 +45,9 @@ public class SalarySysConstant { */ public static final String AES_ENCRYPT_IN_PROGRESS = "AES_ENCRYPT_IN_PROGRESS"; public static final String ENCRYPT_IN_PROGRESS = "ENCRYPT_PROGRESS_"; + + /** + * 需要申报功能 + */ + public static final String TAX_DECLARATION_FUNCTION = "taxDeclarationFunction"; } diff --git a/src/com/engine/salary/sys/entity/param/AppSettingSaveParam.java b/src/com/engine/salary/sys/entity/param/AppSettingSaveParam.java index e235ad139..a5edb437f 100644 --- a/src/com/engine/salary/sys/entity/param/AppSettingSaveParam.java +++ b/src/com/engine/salary/sys/entity/param/AppSettingSaveParam.java @@ -39,4 +39,9 @@ public class AppSettingSaveParam { */ private String isOpenEncrypt; + /** + * 是否关闭个税申报 + */ + private String operateTaxDeclaration; + } diff --git a/src/com/engine/salary/sys/enums/TaxDeclarationFunctionEnum.java b/src/com/engine/salary/sys/enums/TaxDeclarationFunctionEnum.java index c76be7f95..6852e0c3b 100644 --- a/src/com/engine/salary/sys/enums/TaxDeclarationFunctionEnum.java +++ b/src/com/engine/salary/sys/enums/TaxDeclarationFunctionEnum.java @@ -12,8 +12,8 @@ import org.apache.commons.lang3.StringUtils; * @version 1.0 **/ public enum TaxDeclarationFunctionEnum implements BaseEnum { - OPEN("OPEN", "开启", 1), - CLOSURE("CLOSURE", "关闭", 1), + OPEN("OPEN", "开启申报功能", 1), + CLOSURE("CLOSURE", "关闭申报功能", 1), REBOOT("REBOOT", "重启", 1); private String value; diff --git a/src/com/engine/salary/sys/service/SalarySysConfService.java b/src/com/engine/salary/sys/service/SalarySysConfService.java index de1fd16ae..31d497b70 100644 --- a/src/com/engine/salary/sys/service/SalarySysConfService.java +++ b/src/com/engine/salary/sys/service/SalarySysConfService.java @@ -29,6 +29,12 @@ public interface SalarySysConfService { */ boolean operateTaxDeclarationFunction(TaxDeclarationFunctionEnum flag); + /** + * 是否关闭了个税申报功能 + * @return BOOLEAN + */ + public Boolean haveClosedTaxDeclaration(); + SalarySysConfPO getOneByCode(String code); List listSome(SalarySysConfPO build); diff --git a/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java b/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java index efd8e42c0..b9824b03c 100644 --- a/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java +++ b/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java @@ -138,9 +138,9 @@ public class SalarySysConfServiceImpl extends Service implements SalarySysConfSe @Override public boolean operateTaxDeclarationFunction(TaxDeclarationFunctionEnum flag) { Date date = new Date(); - SalarySysConfPO taxDeclarationFunction = getSalarySysConfMapper().getOneByCode("taxDeclarationFunction"); + SalarySysConfPO taxDeclarationFunction = getSalarySysConfMapper().getOneByCode(TAX_DECLARATION_FUNCTION); if (taxDeclarationFunction == null) { - taxDeclarationFunction = SalarySysConfPO.builder().id(IdGenerator.generate()).confKey("taxDeclarationFunction").confValue(flag.getValue()).title(flag.getDefaultLabel()).module("taxDeclaration").orderWeight(0).createTime(date).updateTime(date).deleteType(0).build(); + taxDeclarationFunction = SalarySysConfPO.builder().id(IdGenerator.generate()).confKey(TAX_DECLARATION_FUNCTION).confValue(flag.getValue()).title(flag.getDefaultLabel()).module("taxDeclaration").orderWeight(0).createTime(date).updateTime(date).deleteType(0).build(); getSalarySysConfMapper().insertIgnoreNull(taxDeclarationFunction); } else { TaxDeclarationFunctionEnum oldFunctionEnum = TaxDeclarationFunctionEnum.parseByValue(taxDeclarationFunction.getConfValue()); @@ -165,6 +165,22 @@ public class SalarySysConfServiceImpl extends Service implements SalarySysConfSe return true; } + /** + * @description 是否关闭需要申报功能 + * @return Boolean + * @author Harryxzy + * @date 2022/11/7 17:05 + */ + public Boolean haveClosedTaxDeclaration(){ + SalarySysConfPO taxDeclarationFunction = salarySysConfService.getOneByCode(TAX_DECLARATION_FUNCTION); + if(taxDeclarationFunction != null && taxDeclarationFunction.getConfValue().equals(TaxDeclarationFunctionEnum.CLOSURE.getValue())){ + // 关闭 + return true; + } + return false; + } + + @Override public SalarySysConfPO getOneByCode(String code) { return getSalarySysConfMapper().getOneByCode(code); diff --git a/src/com/engine/salary/web/SalarySystemConfigController.java b/src/com/engine/salary/web/SalarySystemConfigController.java index 2b20dc209..5c03047de 100644 --- a/src/com/engine/salary/web/SalarySystemConfigController.java +++ b/src/com/engine/salary/web/SalarySystemConfigController.java @@ -51,16 +51,16 @@ public class SalarySystemConfigController { * * @param request * @param response - * @param flag + * @param param * @return */ @POST @Path("/operateTaxDeclarationFunction") @Produces(MediaType.APPLICATION_JSON) - public String operateTaxDeclarationFunction(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody String flag) { + public String operateTaxDeclarationFunction(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AppSettingSaveParam param) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getSalarySystemConfigWrapper(user)::operateTaxDeclarationFunction, TaxDeclarationFunctionEnum.parseByValue(flag)); + return new ResponseResult(user).run(getSalarySystemConfigWrapper(user)::operateTaxDeclarationFunction, TaxDeclarationFunctionEnum.parseByValue(param.getOperateTaxDeclaration())); } /**