在线申报接口

This commit is contained in:
钱涛 2023-08-17 19:04:20 +08:00
parent 914963135a
commit 0d8606c956
20 changed files with 155 additions and 105 deletions

View File

@ -661,7 +661,7 @@ public class TaxDeclarationBO {
.id(IdGenerator.generate())
.incomeCategory(incomeCategory)
.taxAgentId(taxAgentId)
.salaryMonth(SalaryDateUtil.localDateToDate(saveParam.getSalaryMonth().atDay(1)))
.salaryMonth(saveParam.getSalaryMonth())
.taxCycle(taxCycle)
.description(saveParam.getDescription())
.creator((long) user.getUID())

View File

@ -2,13 +2,12 @@ package com.engine.salary.entity.taxdeclaration.dto;
import com.engine.salary.enums.taxdeclaration.TaxAgentRangeEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.YearMonth;
import java.util.Date;
import java.util.List;
import java.util.Map;
@ -27,7 +26,7 @@ import java.util.Map;
public class TaxDeclareRecordFormDTO {
//薪资所属月")
private YearMonth salaryMonth;
private Date salaryMonth;
//个税扣缴义务人范围")
private TaxAgentRangeEnum taxAgentRange;

View File

@ -1,7 +1,9 @@
package com.engine.salary.entity.taxdeclaration.dto;
import com.engine.salary.annotation.TableTitle;
import com.engine.salary.enums.taxdeclaration.TaxDeclareStatusEnum;
import com.engine.salary.enums.taxdeclaration.TaxDeclareTypeEnum;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
@ -23,47 +25,58 @@ public class TaxDeclareRecordListDTO {
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
//个税扣缴义务人")
//个税扣缴义务人
@JsonSerialize(using = ToStringSerializer.class)
private Long taxAgentId;
//个税扣缴义务人名称")
//个税扣缴义务人名称
@TableTitle(title = "个税扣缴义务人名称",dataIndex = "taxAgentName",key = "taxAgentName")
private String taxAgentName;
//薪资所属月")
//薪资所属月
@TableTitle(title = "薪资所属月",dataIndex = "salaryMonth",key = "salaryMonth")
@JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
private Date salaryMonth;
//税款所属期")
//税款所属期
@TableTitle(title = "税款所属期",dataIndex = "taxCycle",key = "taxCycle")
@JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
private Date taxCycle;
//申报类型")
//申报类型
private TaxDeclareTypeEnum taxDeclareType;
//申报类型")
//申报类型
@TableTitle(title = "申报类型",dataIndex = "taxDeclareTypeDesc",key = "taxDeclareTypeDesc")
private String taxDeclareTypeDesc;
//申报状态")
//申报状态
private TaxDeclareStatusEnum taxDeclareStatus;
//申报状态")
//申报状
@TableTitle(title = "申报状态",dataIndex = "taxDeclareStatusDesc",key = "taxDeclareStatusDesc")
private String taxDeclareStatusDesc;
//已缴金额")
//已缴金额
@TableTitle(title = "已缴金额",dataIndex = "taxPaidAmount",key = "taxPaidAmount")
private String taxPaidAmount;
//操作人id")
//操作人id
@JsonSerialize(using = ToStringSerializer.class)
private Long operateEmployeeId;
//操作人名称")
//操作人名称
@TableTitle(title = "操作人名称",dataIndex = "operateEmployeeName",key = "operateEmployeeName")
private String operateEmployeeName;
//操作时间")
//操作时间
@TableTitle(title = "操作时间",dataIndex = "operateTime",key = "operateTime")
private String operateTime;
//备注")
//备注
@TableTitle(title = "备注",dataIndex = "description",key = "description")
private String description;
//是否展示图标")
//是否展示图标
private boolean displayIcon;
}

View File

@ -1,6 +1,7 @@
package com.engine.salary.entity.taxdeclaration.param;
import com.engine.salary.common.BaseQueryParam;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@ -23,15 +24,13 @@ import java.util.Date;
public class TaxDeclarationListQueryParam extends BaseQueryParam {
//薪资所属月范围起点
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date fromSalaryMonth;
//薪资所属月范围终点
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date endSalaryMonth;
private String fromSalaryMonthStr;
private String endSalaryMonthStr;
//个税扣缴义务人菜单")
private String taxAgentName;
}

View File

@ -1,12 +1,13 @@
package com.engine.salary.entity.taxdeclaration.param;
import com.engine.salary.enums.taxdeclaration.TaxAgentRangeEnum;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.YearMonth;
import java.util.Date;
import java.util.List;
/**
@ -31,7 +32,8 @@ public class TaxDeclarationSaveParam {
/**
* 薪资所属月
*/
private YearMonth salaryMonth;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date salaryMonth;
/**
* 个税扣缴义务人

View File

@ -1,5 +1,6 @@
package com.engine.salary.entity.taxdeclaration.po;
import com.engine.salary.annotation.Encrypt;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@ -58,6 +59,7 @@ public class TaxDeclarationValuePO implements Serializable {
/**
* 薪资核算结果只在加密解密中使用
*/
@Encrypt
private String resultValueJson;
/**

View File

@ -7,14 +7,11 @@ import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO;
import com.engine.salary.mapper.taxdeclaration.TaxDeclarationMapper;
import com.engine.salary.service.TaxDeclarationService;
import com.engine.salary.service.impl.TaxDeclarationServiceImpl;
import com.engine.salary.util.SalaryDateUtil;
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.db.MapperProxyFactory;
import weaver.general.BaseBean;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.YearMonth;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@ -50,11 +47,9 @@ public class AddUpSituationManager extends Service {
bb.writeLog("开始删除生成:" + po.getTaxAgentId() + "-" + po.getSalaryMonth());
// 删除记录
int delete = getTaxDeclarationMapper().deleteByIdZj(po.getId());
LocalDate localDate = SalaryDateUtil.dateToLocalDate(po.getSalaryMonth());
// 调用生成申报单接口
YearMonth yearMonth = YearMonth.of(localDate.getYear(), localDate.getMonth());
try {
getTaxDeclarationService().save(TaxDeclarationSaveParam.builder().salaryMonth(yearMonth).taxAgentId(po.getTaxAgentId()).build());
getTaxDeclarationService().save(TaxDeclarationSaveParam.builder().salaryMonth(po.getSalaryMonth()).taxAgentId(po.getTaxAgentId()).build());
} catch (Exception e) {
bb.writeLog("错误:" + e);
result = false;

View File

@ -76,5 +76,5 @@ public interface SalarySobAddUpRuleMapper {
*/
void deleteByIds(@Param("ids") Collection<Long> ids);
void deleteBySalarySobIds(Collection<Long> salarySobIds);
void deleteBySalarySobIds(@Param("salarySobIds")Collection<Long> salarySobIds);
}

View File

@ -41,4 +41,6 @@ public interface TaxDeclarationMapper {
void deleteByIds(@Param("ids") Collection<Long> ids);
int deleteByIdZj(Long id);
void deleteByTaxDeclareRecordIds(@Param("taxDeclareRecordIds") Collection<Long> taxDeclareRecordIds);
}

View File

@ -13,6 +13,7 @@
<result column="tenant_key" property="tenantKey"/>
<result column="update_time" property="updateTime"/>
<result column="income_category" property="incomeCategory"/>
<result column="tax_declare_record_id" property="taxDeclareRecordId"/>
</resultMap>
<!-- 表字段 -->
@ -30,6 +31,7 @@
, t.tenant_key
, t.update_time
,t.income_category
,t.tax_declare_record_id
</sql>
<update id="deleteByIdZj">
@ -77,7 +79,7 @@
</select>
<insert id="batchInsert">
INSERT INTO hrsa_tax_declaration(id, salary_month, tax_cycle, tax_agent_id, description,
creator, create_time, update_time, delete_type, tenant_key ,income_category)
creator, create_time, update_time, delete_type, tenant_key ,income_category,tax_declare_record_id)
VALUES
<foreach collection="collection" separator="," item="item">
(
@ -91,13 +93,14 @@
#{item.updateTime},
#{item.deleteType},
#{item.tenantKey},
#{item.incomeCategory}
#{item.incomeCategory},
#{item.taxDeclareRecordId}
)
</foreach>
</insert>
<insert id="batchInsert" databaseId="oracle">
INSERT INTO hrsa_tax_declaration(id,salary_month, tax_cycle, tax_agent_id, description,
creator, create_time, update_time, delete_type, tenant_key ,income_category)
creator, create_time, update_time, delete_type, tenant_key ,income_category,tax_declare_record_id)
<foreach collection="collection" separator="union all" item="item">
select
@ -111,14 +114,15 @@
#{item.updateTime,jdbcType=DATE},
#{item.deleteType,jdbcType=INTEGER},
#{item.tenantKey,jdbcType=VARCHAR},
#{item.incomeCategory,jdbcType=INTEGER}
#{item.incomeCategory,jdbcType=INTEGER},
#{item.taxDeclareRecordId,jdbcType=DOUBLE}
from dual
</foreach>
</insert>
<insert id="batchInsert" databaseId="sqlserver">
<foreach collection="collection" separator=";" item="item">
INSERT INTO hrsa_tax_declaration(id,salary_month, tax_cycle, tax_agent_id, description,
creator, create_time, update_time, delete_type, tenant_key ,income_category)
creator, create_time, update_time, delete_type, tenant_key ,income_category,tax_declare_record_id)
VALUES
(
#{item.id},
@ -131,7 +135,8 @@
#{item.updateTime},
#{item.deleteType},
#{item.tenantKey},
#{item.incomeCategory}
#{item.incomeCategory},
#{item.taxDeclareRecordId}
)
</foreach>
</insert>
@ -147,4 +152,14 @@
</foreach>
</update>
<update id="deleteByTaxDeclareRecordIds">
UPDATE hrsa_tax_declaration
SET delete_type = 1
WHERE delete_type = 0
AND tax_declare_record_id IN
<foreach collection="taxDeclareRecordIds" open="(" item="taxDeclareRecordId" separator="," close=")">
#{taxDeclareRecordId}
</foreach>
</update>
</mapper>

View File

@ -77,5 +77,5 @@ public interface TaxDeclarationValueMapper {
*/
void deleteByIds(@Param("ids") Collection<Long> ids);
void deleteBytaxDeclareRecordIds(Collection<Long> taxDeclareRecordIds);
void deleteBytaxDeclareRecordIds(@Param("taxDeclareRecordIds")Collection<Long> taxDeclareRecordIds);
}

View File

@ -189,7 +189,7 @@
tax_declaration_id,
employee_type,
employee_id,
result_value_json,
result_value_json
)
VALUES
(
@ -204,7 +204,7 @@
#{item.taxDeclarationId},
#{item.employeeType},
#{item.employeeId},
#{item.resultValueJson},
#{item.resultValueJson}
</foreach>
)
</insert>
@ -222,7 +222,7 @@
tax_declaration_id,
employee_type,
employee_id,
result_value_json,
result_value_json
)
<foreach collection="collection" item="item" separator="union all">
@ -237,7 +237,7 @@
#{item.taxDeclarationId,jdbcType=DOUBLE},
#{item.employeeType,jdbcType=INTEGER},
#{item.employeeId,jdbcType=DOUBLE},
#{item.resultValueJson,jdbcType=VARCHAR},
#{item.resultValueJson,jdbcType=VARCHAR}
from dual
</foreach>
</insert>
@ -256,7 +256,7 @@
tax_declaration_id,
employee_type,
employee_id,
result_value_json,
result_value_json
)
VALUES
(
@ -270,7 +270,7 @@
#{item.taxDeclarationId},
#{item.employeeType},
#{item.employeeId},
#{item.resultValueJson},
#{item.resultValueJson}
)
</foreach>
</insert>

View File

@ -298,7 +298,7 @@
person_num,
tax_declare_error_msg,
tax_paid_amount,
tax_pure_paid_amount,
tax_pure_paid_amount
)
VALUES
(
@ -321,7 +321,7 @@
#{item.personNum},
#{item.taxDeclareErrorMsg},
#{item.taxPaidAmount},
#{item.taxPurePaidAmount},
#{item.taxPurePaidAmount}
</foreach>
)
</insert>
@ -347,7 +347,7 @@
person_num,
tax_declare_error_msg,
tax_paid_amount,
tax_pure_paid_amount,
tax_pure_paid_amount
)
<foreach collection="collection" item="item" separator="union all">
@ -370,7 +370,7 @@
#{item.personNum,jdbcType=INTEGER},
#{item.taxDeclareErrorMsg,jdbcType=VARCHAR},
#{item.taxPaidAmount,jdbcType=VARCHAR},
#{item.taxPurePaidAmount,jdbcType=VARCHAR},
#{item.taxPurePaidAmount,jdbcType=VARCHAR}
from dual
</foreach>
</insert>
@ -397,7 +397,7 @@
person_num,
tax_declare_error_msg,
tax_paid_amount,
tax_pure_paid_amount,
tax_pure_paid_amount
)
VALUES
(
@ -419,7 +419,7 @@
#{item.personNum},
#{item.taxDeclareErrorMsg},
#{item.taxPaidAmount},
#{item.taxPurePaidAmount},
#{item.taxPurePaidAmount}
)
</foreach>
</insert>

View File

@ -104,7 +104,7 @@
#{id}
</foreach>
</if>
ORDER BY id DESC
ORDER BY id
</select>

View File

@ -178,7 +178,7 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration
Map<Long, String> taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgentPOS, TaxAgentPO::getId, TaxAgentPO::getName);
// 薪资所属月的日期范围
LocalDateRange salaryMonthDateRange = SalaryDateUtil.localDate2Range(SalaryDateUtil.localDateToDate(saveParam.getSalaryMonth().atDay(1)));
LocalDateRange salaryMonthDateRange = SalaryDateUtil.localDate2Range(saveParam.getSalaryMonth());
if (Objects.isNull(salaryMonthDateRange)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "薪资所属月参数错误"));
}
@ -189,13 +189,13 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration
if (CollectionUtils.isNotEmpty(taxDeclarationPOS)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(107986, "{0}在{1}已经生成过个税申报表,不允许再次生成")
.replace("{0}", taxAgentNameMap.get(taxDeclarationPOS.get(0).getTaxAgentId()))
.replace("{1}", saveParam.getSalaryMonth().toString()));
.replace("{1}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth())));
}
// 查询薪资所属月的薪资核算记录
List<SalaryAcctRecordPO> salaryAcctRecordPOS = listBySalaryMonth(SalaryAcctRecordPO.builder().salaryMonths(salaryMonthDateRange).build());
// 无薪资核算记录不允许生成个税申报表
if (CollectionUtils.isEmpty(salaryAcctRecordPOS)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98874, "{0}无申报数据").replace("{0}", saveParam.getSalaryMonth().toString()));
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98874, "{0}无申报数据").replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth())));
}
// 查询薪资核算结果
List<SalaryAcctResultPO> salaryAcctResultPOS = getSalaryAcctResultService(user)
@ -204,7 +204,7 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration
// 无薪资核算结果不允许生成个税申报表
if (CollectionUtils.isEmpty(salaryAcctResultPOS)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(110093, "{0}无可申报数据")
.replace("{0}", saveParam.getSalaryMonth().toString()));
.replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth())));
}
Set<Long> salaryAcctRecordIds = SalaryEntityUtil.properties(salaryAcctResultPOS, SalaryAcctResultPO::getSalaryAcctRecordId);
@ -213,14 +213,14 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration
boolean notArchived = salaryAcctRecordPOS.stream().anyMatch(salaryAcctRecordPO -> Objects.equals(salaryAcctRecordPO.getStatus(), SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue()));
if (notArchived) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98875, "{0}有未归档数据,请全部归档后再申报")
.replace("{0}", saveParam.getSalaryMonth().toString()));
.replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth())));
}
// 如果当前薪资所属月下存在不同的税款所属期属于异常业务场景不允许生成个税申报表
Date taxCycle = salaryAcctRecordPOS.get(0).getTaxCycle();
boolean differentTaxCycle = salaryAcctRecordPOS.stream().anyMatch(salaryAcctRecordPO -> salaryAcctRecordPO.getTaxCycle().compareTo(taxCycle) != 0);
if (differentTaxCycle) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98876, "{0}存在不同的税款所属期,无法正常生成个税申报表,请调整账套设置,重新核算后再生成个税申报表")
.replace("{0}", saveParam.getSalaryMonth().toString()));
.replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth())));
}
// 查询薪资账套
Set<Long> salarySobIds = SalaryEntityUtil.properties(salaryAcctRecordPOS, SalaryAcctRecordPO::getSalarySobId);
@ -341,7 +341,7 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration
if (CollectionUtils.isEmpty(taxDeclareRecordIds)) {
return;
}
getTaxDeclarationMapper().deleteByIds(taxDeclareRecordIds);
getTaxDeclarationMapper().deleteByTaxDeclareRecordIds(taxDeclareRecordIds);
// new LambdaUpdateChainWrapper<>(baseMapper)
// .eq(TaxDeclarationPO::getTenantKey, tenantKey)
// .eq(TaxDeclarationPO::getDeleteType, DeleteTypeEnum.NOT_DELETED.getValue())

View File

@ -1,7 +1,9 @@
package com.engine.salary.service.impl;
import com.cloudstore.eccom.pc.table.WeaTableColumn;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.encrypt.EncryptUtil;
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO;
import com.engine.salary.entity.extemp.po.ExtEmpPO;
@ -15,13 +17,16 @@ import com.engine.salary.enums.salaryaccounting.EmployeeTypeEnum;
import com.engine.salary.enums.salarysob.IncomeCategoryEnum;
import com.engine.salary.mapper.taxdeclaration.TaxDeclarationValueMapper;
import com.engine.salary.service.*;
import com.engine.salary.util.SalaryDateUtil;
import com.engine.salary.util.JsonUtil;
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.SalaryEnumUtil;
import com.engine.salary.util.db.MapperProxyFactory;
import com.engine.salary.util.page.PageInfo;
import com.engine.salary.util.page.SalaryPageUtil;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import weaver.hrm.User;
import java.util.*;
import java.util.stream.Collectors;
@ -35,59 +40,64 @@ import java.util.stream.Collectors;
*/
@Slf4j
public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclarationValueService {
public EncryptUtil encryptUtil = new EncryptUtil();
private TaxDeclarationValueMapper taxDeclarationValueMapper;
// private DataSecurityService dataSecurityService;
private SalaryEmployeeService salaryEmployeeService;
private ExtEmpService extEmployeeService;
private EmployeeDeclareService employeeDeclareService;
private TaxReportColumnService taxReportColumnService;
private TaxDeclarationValueMapper getTaxDeclarationValueMapper() {
return MapperProxyFactory.getProxy(TaxDeclarationValueMapper.class);
}
private SalaryEmployeeService getSalaryEmployeeService(User user) {
return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user);
}
private ExtEmpService getExtEmpService(User user) {
return ServiceUtil.getService(ExtEmpServiceImpl.class, user);
}
private EmployeeDeclareService getEmployeeDeclareService(User user) {
return ServiceUtil.getService(EmployeeDeclareServiceImpl.class, user);
}
private TaxReportColumnService getTaxReportColumnService(User user) {
return ServiceUtil.getService(TaxReportColumnServiceImpl.class, user);
}
@Override
public PageInfo<TaxDeclarationValuePO> listPageByTaxDeclarationIds(TaxDeclarationValueListQueryParam queryParam, Collection<Long> taxDeclarationIds) {
List<TaxDeclarationValuePO> taxDeclarationValuePOS = taxDeclarationValueMapper.listSome(TaxDeclarationValuePO.builder().taxDeclarationIds(taxDeclarationIds).build());
List<TaxDeclarationValuePO> taxDeclarationValuePOS = getTaxDeclarationValueMapper().listSome(TaxDeclarationValuePO.builder().taxDeclarationIds(taxDeclarationIds).build());
return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), taxDeclarationValuePOS, TaxDeclarationValuePO.class);
}
@Override
public List<TaxDeclarationValuePO> listByTaxDeclarationIds(Collection<Long> taxDeclarationIds) {
List<TaxDeclarationValuePO> taxDeclarationValues = taxDeclarationValueMapper.listSome(TaxDeclarationValuePO.builder().taxDeclarationIds(taxDeclarationIds).build());
List<TaxDeclarationValuePO> taxDeclarationValues = getTaxDeclarationValueMapper().listSome(TaxDeclarationValuePO.builder().taxDeclarationIds(taxDeclarationIds).build());
return decryptBatch(taxDeclarationValues);
}
@Override
public List<TaxDeclarationValuePO> listByTaxDeclarationIdsNoDecrypt(Collection<Long> taxDeclarationIds) {
return taxDeclarationValueMapper.listSome(TaxDeclarationValuePO.builder().taxDeclarationIds(taxDeclarationIds).build());
return getTaxDeclarationValueMapper().listSome(TaxDeclarationValuePO.builder().taxDeclarationIds(taxDeclarationIds).build());
}
@Override
public TaxDeclarationValueListDTO convert2List(TaxDeclarationPO taxDeclaration, List<TaxDeclarationValuePO> taxDeclarationValues) {
// 查询个税申报表表头
IncomeCategoryEnum incomeCategoryEnum = SalaryEnumUtil.enumMatchByValue(taxDeclaration.getIncomeCategory(), IncomeCategoryEnum.class);
List<TaxReportColumnPO> taxReportColumns = taxReportColumnService.listByIncomeCategory(incomeCategoryEnum);
List<TaxReportColumnPO> taxReportColumns = getTaxReportColumnService(user).listByIncomeCategory(incomeCategoryEnum);
// 人员id
Set<Long> employeeIds = SalaryEntityUtil.properties(taxDeclarationValues, TaxDeclarationValuePO::getEmployeeId);
// 查询报送的人员
List<EmployeeDeclarePO> employeeDeclares = employeeDeclareService.listByTaxCycleAndTaxAgentIdAndEmployeeIds(taxDeclaration.getTaxCycle(), taxDeclaration.getTaxAgentId(), employeeIds);
List<EmployeeDeclarePO> employeeDeclares = getEmployeeDeclareService(user).listByTaxCycleAndTaxAgentIdAndEmployeeIds(taxDeclaration.getTaxCycle(), taxDeclaration.getTaxAgentId(), employeeIds);
// 查询人员信息
List<Long> simpleEmployeeIds = taxDeclarationValues.stream()
.filter(taxDeclarationValue -> Objects.equals(taxDeclarationValue.getEmployeeType(), EmployeeTypeEnum.ORGANIZATION.getValue()))
.map(TaxDeclarationValuePO::getEmployeeId)
.distinct()
.collect(Collectors.toList());
List<DataCollectionEmployee> simpleEmployees = salaryEmployeeService.getEmployeeByIds(simpleEmployeeIds);
List<DataCollectionEmployee> simpleEmployees = getSalaryEmployeeService(user).getEmployeeByIds(simpleEmployeeIds);
// 查询人员薪资身份证号码等
List<DataCollectionEmployee> simpleUserInfos = salaryEmployeeService.getEmployeeByIds(simpleEmployeeIds);
List<DataCollectionEmployee> simpleUserInfos = getSalaryEmployeeService(user).getEmployeeByIds(simpleEmployeeIds);
// 查询外部人员
List<Long> extEmployeeIds = taxDeclarationValues.stream()
.filter(taxDeclarationValue -> Objects.equals(taxDeclarationValue.getEmployeeType(), EmployeeTypeEnum.EXT_EMPLOYEE.getValue()))
.map(TaxDeclarationValuePO::getEmployeeId)
.collect(Collectors.toList());
List<ExtEmpPO> extEmployees = extEmployeeService.getExtEmpByIds(extEmployeeIds);
List<ExtEmpPO> extEmployees = getExtEmpService(user).getExtEmpByIds(extEmployeeIds);
// 列表表头
List<WeaTableColumn> weaTableColumns = TaxDeclarationValueList.buildTableColumns(taxReportColumns);
@ -101,17 +111,15 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar
@Override
public void batchSave(List<TaxDeclarationValuePO> taxDeclarationValues) {
if (CollectionUtils.isNotEmpty(taxDeclarationValues)) {
throw new RuntimeException("todo");
// // 加密
// taxDeclarationValues.forEach(taxDeclarationValue ->
// taxDeclarationValue.setResultValueJson(JsonUtil.toJsonString(taxDeclarationValue.getResultValue())));
// taxDeclarationValues = dataSecurityService.encryptBatch(taxDeclarationValues, TaxDeclarationValuePO.class, tenantKey);
// // 分批保存
// int batchSize = SalaryPageUtil.getBatchSize();
// List<List<TaxDeclarationValuePO>> partition = Lists.partition(taxDeclarationValues, batchSize);
// for (List<TaxDeclarationValuePO> subTaxDeclarationValues : partition) {
// baseMapper.batchInsert(subTaxDeclarationValues);
// }
// 加密
taxDeclarationValues.forEach(taxDeclarationValue ->
taxDeclarationValue.setResultValueJson(JsonUtil.toJsonString(taxDeclarationValue.getResultValue())));
taxDeclarationValues = encryptUtil.encryptList(taxDeclarationValues, TaxDeclarationValuePO.class);
// 分批保存
List<List<TaxDeclarationValuePO>> partition = Lists.partition(taxDeclarationValues, 100);
for (List<TaxDeclarationValuePO> subTaxDeclarationValues : partition) {
getTaxDeclarationValueMapper().batchInsert(subTaxDeclarationValues);
}
}
}
@ -120,18 +128,18 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar
if (CollectionUtils.isEmpty(taxDeclareRecordIds)) {
return;
}
taxDeclarationValueMapper.deleteBytaxDeclareRecordIds(taxDeclareRecordIds);
getTaxDeclarationValueMapper().deleteBytaxDeclareRecordIds(taxDeclareRecordIds);
}
private List<TaxDeclarationValuePO> decryptBatch(List<TaxDeclarationValuePO> taxDeclarationValues) {
if (CollectionUtils.isEmpty(taxDeclarationValues)) {
return Collections.emptyList();
}
// // 解密
// taxDeclarationValues = dataSecurityService.decryptBatch(taxDeclarationValues, TaxDeclarationValuePO.class, tenantKey);
// taxDeclarationValues.forEach(salaryAcctResultValue -> {
// salaryAcctResultValue.setResultValue(JsonUtil.parseMap(salaryAcctResultValue.getResultValueJson(), String.class));
// });
// 解密
taxDeclarationValues = encryptUtil.decryptList(taxDeclarationValues, TaxDeclarationValuePO.class);
taxDeclarationValues.forEach(salaryAcctResultValue -> {
salaryAcctResultValue.setResultValue(JsonUtil.parseMap(salaryAcctResultValue.getResultValueJson(), String.class));
});
return taxDeclarationValues;
}
}

View File

@ -73,60 +73,76 @@ import java.util.stream.Collectors;
public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRecordService {
private TaxDeclareRecordMapper getTaxDeclareRecordMapper() {
return MapperProxyFactory.getProxy(TaxDeclareRecordMapper.class);
}
private TaxDeclarationService getTaxDeclarationService(User user) {
return ServiceUtil.getService(TaxDeclarationServiceImpl.class, user);
}
private TaxDeclarationValueService getTaxDeclarationValueService(User user) {
return ServiceUtil.getService(TaxDeclarationValueServiceImpl.class, user);
}
private EmployeeDeclareService getEmployeeDeclareService(User user) {
return ServiceUtil.getService(EmployeeDeclareServiceImpl.class, user);
}
private TaxAgentTaxReturnService getTaxAgentTaxReturnService(User user) {
return ServiceUtil.getService(TaxAgentTaxReturnServiceImpl.class, user);
}
private TaxAgentService getTaxAgentService(User user) {
return ServiceUtil.getService(TaxAgentServiceImpl.class, user);
}
private TaxDeclarationApiConfigService getTaxDeclarationApiConfigService(User user) {
return ServiceUtil.getService(TaxDeclarationApiConfigServiceImpl.class, user);
}
private AddUpSituationService getAddUpSituationService(User user) {
return ServiceUtil.getService(AddUpSituationServiceImpl.class, user);
}
private TaxDeclarationApiBillingService getTaxDeclarationApiBillingService(User user) {
return ServiceUtil.getService(TaxDeclarationApiBillingServiceImpl.class, user);
}
private TaxDeclareEmployeeService getTaxDeclareEmployeeService(User user) {
return ServiceUtil.getService(TaxDeclareEmployeeServiceImpl.class, user);
}
private TaxDeclareFailService getTaxDeclareFailService(User user) {
return ServiceUtil.getService(TaxDeclareFailServiceImpl.class, user);
}
private SalaryAcctRecordService getSalaryAcctRecordService(User user) {
return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user);
}
private SalaryAcctTaxAgentService salaryAcctTaxAgentService;
private SalaryAcctEmployeeService getSalaryAcctEmployeeService(User user) {
return ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user);
}
private SalaryAcctResultService getSalaryAcctResultService(User user) {
return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user);
}
private SalaryItemService getSalaryItemService(User user) {
return ServiceUtil.getService(SalaryItemServiceImpl.class, user);
}
private SalarySobTaxReportRuleService getSalarySobTaxReportRuleService(User user) {
return ServiceUtil.getService(SalarySobTaxReportRuleServiceImpl.class, user);
}
private TaxReportColumnService getTaxReportColumnService(User user) {
return ServiceUtil.getService(TaxReportColumnServiceImpl.class, user);
}
private SalarySobAddUpRuleService getSalarySobAddUpRuleService(User user) {
return ServiceUtil.getService(SalarySobAddUpRuleServiceImpl.class, user);
}
@ -223,7 +239,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe
Collection<TaxAgentPO> taxAgents = queryByTaxAgentRange(saveParam);
Map<Long, String> taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getId, TaxAgentPO::getName);
// 查询薪资所属月下的薪资核算记录并按照权限过滤
LocalDateRange salaryMonthRange = new LocalDateRange().setFromDate(SalaryDateUtil.localDateToDate(saveParam.getSalaryMonth().atDay(1))).setEndDate(SalaryDateUtil.localDateToDate(saveParam.getSalaryMonth().atDay(1)));
LocalDateRange salaryMonthRange = new LocalDateRange().setFromDate(saveParam.getSalaryMonth()).setEndDate(saveParam.getSalaryMonth());
List<SalaryAcctRecordPO> salaryAcctRecords = getSalaryAcctRecordService(user).listBySalaryMonth(salaryMonthRange);
// 查询薪资核算记录关联的个税扣缴义务人
List<SalaryAcctTaxAgentPO> salaryAcctTaxAgents = getSalaryAcctRecordService(user).listBySalaryAcctRecordIds(SalaryEntityUtil.properties(salaryAcctRecords, SalaryAcctRecordPO::getId));
@ -252,7 +268,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe
}
needDeleteTaxDeclareRecordIds.add(oldTaxDeclareRecord.getId());
}
TaxDeclareRecordPO taxDeclareRecord = new TaxDeclareRecordPO().setId(IdGenerator.generate()).setTaxAgentId(taxAgentIdEntry.getKey()).setSalaryMonth(SalaryDateUtil.localDateToDate(saveParam.getSalaryMonth().atDay(1))).setTaxCycle(taxCycleEntry.getKey()).setTaxDeclareType(TaxDeclareTypeEnum.NORMAL_DECLARE.getValue()).setTaxDeclareStatus(TaxDeclareStatusEnum.NOT_DECLARE.getValue()).setRemark(saveParam.getDescription()).setCreator((long) user.getUID()).setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()).setCreateTime(now).setUpdateTime(now);
TaxDeclareRecordPO taxDeclareRecord = new TaxDeclareRecordPO().setId(IdGenerator.generate()).setTaxAgentId(taxAgentIdEntry.getKey()).setSalaryMonth(saveParam.getSalaryMonth()).setTaxCycle(taxCycleEntry.getKey()).setTaxDeclareType(TaxDeclareTypeEnum.NORMAL_DECLARE.getValue()).setTaxDeclareStatus(TaxDeclareStatusEnum.NOT_DECLARE.getValue()).setRemark(saveParam.getDescription()).setCreator((long) user.getUID()).setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()).setCreateTime(now).setUpdateTime(now);
newTaxDeclareRecords.add(taxDeclareRecord);
// 生成个税申报表
TaxDeclarationResult taxDeclarationResult = generateReportPerRecord(taxDeclareRecord, taxAgentIdEntry.getValue());
@ -416,7 +432,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe
Map<Date, List<SalaryAcctTaxAgentPO>> taxCycleKeySalaryAcctTaxAgentMap = SalaryEntityUtil.group2Map(salaryAcctTaxAgents, SalaryAcctTaxAgentPO::getTaxCycle);
for (Map.Entry<Date, List<SalaryAcctTaxAgentPO>> taxCycleEntry : taxCycleKeySalaryAcctTaxAgentMap.entrySet()) {
Set<Long> archivedTaxAgentIds = SalaryEntityUtil.properties(taxCycleEntry.getValue(), SalaryAcctTaxAgentPO::getTaxAgentId);
List<TaxDeclareRecordPO> taxDeclareRecords = listBySalaryMonthAndTaxAgentIds(SalaryDateUtil.localDateToDate(saveParam.getSalaryMonth().atDay(1)), archivedTaxAgentIds);
List<TaxDeclareRecordPO> taxDeclareRecords = listBySalaryMonthAndTaxAgentIds(saveParam.getSalaryMonth(), archivedTaxAgentIds);
TaxDeclareRecordPO declareSuccessTaxDeclareRecord = taxDeclareRecords.stream().filter(taxDeclareRecordPO -> archivedTaxAgentIds.contains(taxDeclareRecordPO.getTaxAgentId()) && !(Objects.equals(taxDeclareRecordPO.getTaxDeclareStatus(), TaxDeclareStatusEnum.NOT_DECLARE.getValue()) || Objects.equals(taxDeclareRecordPO.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARE_FAIL.getValue()))).findAny().orElse(null);
// 已经申报成功了的个税申报表的个税扣缴义务人不允许重新生成
if (Objects.nonNull(declareSuccessTaxDeclareRecord)) {

View File

@ -435,7 +435,7 @@ public class SalarySobController {
@Produces(MediaType.APPLICATION_JSON)
public String getSalarySobAddUpForm(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<Long, SalarySobBackItemFormDTO>(user).run(getSalarySobAddUpRuleWrapper(user)::getForm, id);
return new ResponseResult<Long, List<SalarySobAddUpRuleDTO>>(user).run(getSalarySobAddUpRuleWrapper(user)::getForm, id);
}
/**
@ -449,7 +449,7 @@ public class SalarySobController {
@Produces(MediaType.APPLICATION_JSON)
public String saveSalarySobAddUp(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySobAddUpRuleSaveParam saveParam) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalarySobAddUpRuleSaveParam, List<SalarySobBackItemDTO>>(user).run(getSalarySobAddUpRuleWrapper(user)::save, saveParam);
return new ResponseResult<SalarySobAddUpRuleSaveParam,String>(user).run(getSalarySobAddUpRuleWrapper(user)::save, saveParam);
}
/**********************************薪资账套的累计字段对应关系 end*********************************/

View File

@ -11,7 +11,6 @@ import com.engine.salary.service.TaxDeclarationService;
import com.engine.salary.service.impl.TaxDeclarationExcelServiceImpl;
import com.engine.salary.service.impl.TaxDeclarationServiceImpl;
import com.engine.salary.util.ResponseResult;
import com.engine.salary.util.SalaryDateUtil;
import com.engine.salary.util.page.PageInfo;
import com.engine.salary.wrapper.TaxDeclarationDetailWrapper;
import com.engine.salary.wrapper.TaxDeclarationWrapper;
@ -195,7 +194,6 @@ public class TaxDeclarationController {
@Produces(MediaType.APPLICATION_JSON)
public String saveTaxDeclaration(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclarationSaveParam saveParam) {
User user = HrmUserVarify.getUser(request, response);
saveParam.setSalaryMonth(SalaryDateUtil.String2YearMonth(saveParam.getSalaryMonthStr()));
return new ResponseResult<TaxDeclarationSaveParam, String>(user).run(getTaxDeclareRecordWrapper(user)::save, saveParam);
}

View File

@ -89,6 +89,7 @@ public class TaxDeclareRecordWrapper extends Service {
List<TaxDeclareRecordPO> list = page.getList();
PageInfo<TaxDeclareRecordListDTO> dtoPage = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), TaxDeclareRecordListDTO.class);
dtoPage.setTotal(page.getTotal());
if (CollectionUtils.isNotEmpty(list)) {
// 查询个税扣缴义务人
Set<Long> taxAgentIds = SalaryEntityUtil.properties(list, TaxDeclareRecordPO::getTaxAgentId);