记录申报表数据来源
This commit is contained in:
parent
c581c8d74d
commit
13f310e9e4
|
|
@ -0,0 +1,5 @@
|
|||
ALTER TABLE hrsa_tax_declaration_value add (
|
||||
source number
|
||||
);
|
||||
/
|
||||
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
ALTER TABLE hrsa_tax_declaration_value add (
|
||||
source number
|
||||
);
|
||||
/
|
||||
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
ALTER TABLE hrsa_tax_declaration_value add (
|
||||
source number
|
||||
);
|
||||
/
|
||||
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
ALTER TABLE hrsa_tax_declaration_value
|
||||
ADD COLUMN source int(0) NULL ;
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
ALTER TABLE hrsa_tax_declaration_value add (
|
||||
source number
|
||||
)
|
||||
/
|
||||
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE hrsa_tax_declaration_value ADD COLUMN source int NULL ;
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
ALTER TABLE hrsa_tax_declaration_value ADD source int NULL
|
||||
GO
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
ALTER TABLE hrsa_tax_declaration_value add (
|
||||
source number
|
||||
);
|
||||
/
|
||||
|
||||
|
|
@ -14,6 +14,7 @@ import com.engine.salary.entity.taxdeclaration.po.TaxReportColumnPO;
|
|||
import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum;
|
||||
import com.engine.salary.enums.salarysob.IncomeCategoryEnum;
|
||||
import com.engine.salary.enums.sicategory.DeleteTypeEnum;
|
||||
import com.engine.salary.enums.taxdeclaration.SourceEnum;
|
||||
import com.engine.salary.util.SalaryDateUtil;
|
||||
import com.engine.salary.util.SalaryEntityUtil;
|
||||
import com.google.common.collect.Lists;
|
||||
|
|
@ -42,11 +43,9 @@ public class TaxDeclarationCommon implements TaxDeclarationStrategy {
|
|||
public TaxDeclarationGenerateResult generate(TaxDeclareContext taxDeclareContext, Long employeeId) {
|
||||
Date now = new Date();
|
||||
// 薪资核算结果按照薪资核算人员id聚合分类
|
||||
Map<Long, List<SalaryAcctResultPO>> salaryAcctResultValueMap = SalaryEntityUtil.group2Map(
|
||||
taxDeclareContext.getSalaryAcctResultValues(), SalaryAcctResultPO::getSalaryAcctEmpId);
|
||||
Map<Long, List<SalaryAcctResultPO>> salaryAcctResultValueMap = SalaryEntityUtil.group2Map(taxDeclareContext.getSalaryAcctResultValues(), SalaryAcctResultPO::getSalaryAcctEmpId);
|
||||
// 薪资核算人员按照人员id聚合分类
|
||||
Map<Long, List<SalaryAcctEmployeePO>> employeeIdKeyMap = SalaryEntityUtil.group2Map(
|
||||
taxDeclareContext.getSalaryAcctEmployees(), SalaryAcctEmployeePO::getEmployeeId);
|
||||
Map<Long, List<SalaryAcctEmployeePO>> employeeIdKeyMap = SalaryEntityUtil.group2Map(taxDeclareContext.getSalaryAcctEmployees(), SalaryAcctEmployeePO::getEmployeeId);
|
||||
|
||||
List<TaxDeclarationValuePO> taxDeclarationValues = Lists.newArrayListWithExpectedSize(employeeIdKeyMap.size());
|
||||
for (Map.Entry<Long, List<SalaryAcctEmployeePO>> employeeIdEntry : employeeIdKeyMap.entrySet()) {
|
||||
|
|
@ -87,6 +86,7 @@ public class TaxDeclarationCommon implements TaxDeclarationStrategy {
|
|||
.deleteType(DeleteTypeEnum.NOT_DELETED.getValue())
|
||||
.createTime(now)
|
||||
.updateTime(now)
|
||||
.source(SourceEnum.ACCT.getValue())
|
||||
.build();
|
||||
taxDeclarationValues.add(taxDeclarationValue);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.engine.salary.entity.taxdeclaration.po;
|
||||
|
||||
import com.engine.salary.annotation.Encrypt;
|
||||
import com.engine.salary.enums.taxdeclaration.SourceEnum;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
|
@ -88,6 +89,12 @@ public class TaxDeclarationValuePO implements Serializable {
|
|||
*/
|
||||
private Date updateTime;
|
||||
|
||||
/**
|
||||
* 数据来源
|
||||
* @see SourceEnum
|
||||
*/
|
||||
private Integer source;
|
||||
|
||||
private Collection<Long> ids;
|
||||
private Collection<Long> taxDeclarationIds;
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,48 @@
|
|||
package com.engine.salary.enums.taxdeclaration;
|
||||
|
||||
import com.engine.salary.enums.BaseEnum;
|
||||
|
||||
/**
|
||||
* 作废申报
|
||||
* <p>Copyright: Copyright (c) 2023</p>
|
||||
* <p>Company: 泛微软件</p>
|
||||
*
|
||||
* @author qiantao
|
||||
* @version 1.0
|
||||
**/
|
||||
public enum SourceEnum implements BaseEnum<Integer> {
|
||||
|
||||
ACCT(0, "薪资核算", 160490),
|
||||
AUTO(1, "自动补充", 160490),
|
||||
ADD(2, "界面新增", 160491),
|
||||
EDIT(3, "界面新增", 160491),
|
||||
IMP(4, "界面导入", 160491);
|
||||
|
||||
|
||||
SourceEnum(int value, String defaultLabel, int labelId) {
|
||||
this.value = value;
|
||||
this.defaultLabel = defaultLabel;
|
||||
this.labelId = labelId;
|
||||
}
|
||||
|
||||
private int value;
|
||||
|
||||
private String defaultLabel;
|
||||
|
||||
private int labelId;
|
||||
|
||||
@Override
|
||||
public Integer getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDefaultLabel() {
|
||||
return defaultLabel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getLabelId() {
|
||||
return labelId;
|
||||
}
|
||||
}
|
||||
|
|
@ -75,6 +75,12 @@
|
|||
<if test="taxCycle != null">
|
||||
AND tax_cycle = #{taxCycle}
|
||||
</if>
|
||||
<if test="taxDeclareRecordId != null">
|
||||
AND tax_declare_record_id = #{taxDeclareRecordId}
|
||||
</if>
|
||||
<if test="incomeCategory != null">
|
||||
AND income_category = #{incomeCategory}
|
||||
</if>
|
||||
ORDER BY id DESC
|
||||
</select>
|
||||
<insert id="batchInsert">
|
||||
|
|
|
|||
|
|
@ -120,4 +120,9 @@ public interface TaxDeclarationValueMapper {
|
|||
*/
|
||||
void batchInsert(@Param("collection") Collection<TaxDeclarationValuePO> taxDeclarationValues);
|
||||
|
||||
|
||||
List<Long> queryNotWagesEmpIds(@Param("taxDeclareRecordId")Long taxDeclareRecordId);
|
||||
|
||||
List<Long> queryWagesEmpIds(@Param("taxDeclareRecordId")Long taxDeclareRecordId);
|
||||
|
||||
}
|
||||
|
|
@ -428,4 +428,24 @@
|
|||
<include refid="NoValueSql"/>
|
||||
</select>
|
||||
|
||||
<select id="queryNotWagesEmpIds" resultType="Long">
|
||||
select b.employee_id
|
||||
from hrsa_tax_declaration a
|
||||
left join hrsa_tax_declaration_value b on a.id = b.tax_declaration_id
|
||||
where a.delete_type = 0
|
||||
and b.delete_type = 0
|
||||
and a.income_category <![CDATA[ <> ]]> 1
|
||||
and a.tax_declare_record_id = #{taxDeclareRecordId}
|
||||
</select>
|
||||
|
||||
<select id="queryWagesEmpIds" resultType="Long">
|
||||
select b.employee_id
|
||||
from hrsa_tax_declaration a
|
||||
left join hrsa_tax_declaration_value b on a.id = b.tax_declaration_id
|
||||
where a.delete_type = 0
|
||||
and b.delete_type = 0
|
||||
and a.income_category = 1
|
||||
and a.tax_declare_record_id = #{taxDeclareRecordId}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
|
@ -24,6 +24,7 @@ public interface TaxDeclarationService {
|
|||
List<TaxDeclarationPO> listByTaxCycleAndTaxAgentIds(YearMonth salaryMonth, Collection<Long> taxAgentIds);
|
||||
|
||||
List<TaxDeclarationPO> listByTaxDeclareRecordId(Long taxDeclareRecordId);
|
||||
List<TaxDeclarationPO> listByTaxDeclareRecordId(Long taxDeclareRecordId,Integer incomeCategory);
|
||||
|
||||
PageInfo<TaxDeclarationPO> listPageByParam(TaxDeclarationListQueryParam queryParam);
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationValueListQuer
|
|||
import com.engine.salary.entity.taxdeclaration.param.TaxDeclareRecordDetailSaveParam;
|
||||
import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO;
|
||||
import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationValuePO;
|
||||
import com.engine.salary.entity.taxdeclaration.po.TaxDeclareRecordPO;
|
||||
import com.engine.salary.util.page.PageInfo;
|
||||
|
||||
import java.util.Collection;
|
||||
|
|
@ -71,5 +72,12 @@ public interface TaxDeclarationValueService {
|
|||
*/
|
||||
void deleteByTaxDeclareRecordIds(Collection<Long> taxDeclareRecordIds);
|
||||
|
||||
/**
|
||||
* 因为单独申报年终奖不可行
|
||||
* 需要补充正常工资薪金的申报,按0申报
|
||||
* @param po
|
||||
*/
|
||||
void autoAddWagesDeclare(TaxDeclareRecordPO po);
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -102,6 +102,15 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration
|
|||
TaxDeclarationPO po = TaxDeclarationPO.builder().taxDeclareRecordId(taxDeclareRecordId).build();
|
||||
return getTaxDeclarationMapper().listSome(po);
|
||||
}
|
||||
@Override
|
||||
public List<TaxDeclarationPO> listByTaxDeclareRecordId(Long taxDeclareRecordId,Integer incomeCategory) {
|
||||
if (Objects.isNull(taxDeclareRecordId)) {
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误"));
|
||||
}
|
||||
TaxDeclarationPO po = TaxDeclarationPO.builder().taxDeclareRecordId(taxDeclareRecordId).incomeCategory(incomeCategory).build();
|
||||
return getTaxDeclarationMapper().listSome(po);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public PageInfo<TaxDeclarationPO> listPageByParam(TaxDeclarationListQueryParam queryParam) {
|
||||
|
|
|
|||
|
|
@ -14,9 +14,13 @@ import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationValueListQuer
|
|||
import com.engine.salary.entity.taxdeclaration.param.TaxDeclareRecordDetailSaveParam;
|
||||
import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO;
|
||||
import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationValuePO;
|
||||
import com.engine.salary.entity.taxdeclaration.po.TaxDeclareRecordPO;
|
||||
import com.engine.salary.entity.taxdeclaration.po.TaxReportColumnPO;
|
||||
import com.engine.salary.enums.salaryaccounting.EmployeeTypeEnum;
|
||||
import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum;
|
||||
import com.engine.salary.enums.salarysob.IncomeCategoryEnum;
|
||||
import com.engine.salary.enums.sicategory.DeleteTypeEnum;
|
||||
import com.engine.salary.enums.taxdeclaration.SourceEnum;
|
||||
import com.engine.salary.exception.SalaryRunTimeException;
|
||||
import com.engine.salary.mapper.taxdeclaration.TaxDeclarationValueMapper;
|
||||
import com.engine.salary.service.*;
|
||||
|
|
@ -27,6 +31,7 @@ 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 com.google.common.collect.Maps;
|
||||
import dm.jdbc.util.IdGenerator;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
|
|
@ -142,7 +147,7 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar
|
|||
@Override
|
||||
public void save(TaxDeclareRecordDetailSaveParam param) {
|
||||
TaxDeclarationPO taxDeclaration = getTaxDeclarationService(user).getById(param.getTaxDeclarationId());
|
||||
if(taxDeclaration==null){
|
||||
if (taxDeclaration == null) {
|
||||
throw new SalaryRunTimeException("个税申报表不存在!");
|
||||
}
|
||||
|
||||
|
|
@ -156,6 +161,7 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar
|
|||
.resultValueJson(JsonUtil.toJsonString(param.getTaxReportColumnValues()))
|
||||
.createTime(new Date())
|
||||
.updateTime(new Date())
|
||||
.source(SourceEnum.ADD.getValue())
|
||||
.creator((long) user.getUID())
|
||||
.deleteType(0)
|
||||
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
|
||||
|
|
@ -172,6 +178,7 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar
|
|||
po.setResultValue(param.getTaxReportColumnValues());
|
||||
po.setResultValueJson(JsonUtil.toJsonString(param.getTaxReportColumnValues()));
|
||||
po.setUpdateTime(new Date());
|
||||
po.setSource(SourceEnum.EDIT.getValue());
|
||||
encryptUtil.encrypt(po, TaxDeclarationValuePO.class);
|
||||
getTaxDeclarationValueMapper().updateIgnoreNull(po);
|
||||
}
|
||||
|
|
@ -179,10 +186,10 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar
|
|||
@Override
|
||||
public TaxDeclarationValuePO getById(Long id) {
|
||||
TaxDeclarationValuePO po = getTaxDeclarationValueMapper().getById(id);
|
||||
if(po==null){
|
||||
if (po == null) {
|
||||
throw new SalaryRunTimeException("个税申报明细不存在!");
|
||||
}
|
||||
encryptUtil.decrypt(po,TaxDeclarationValuePO.class);
|
||||
encryptUtil.decrypt(po, TaxDeclarationValuePO.class);
|
||||
po.setResultValue(JsonUtil.parseMap(po.getResultValueJson(), String.class));
|
||||
|
||||
return po;
|
||||
|
|
@ -207,4 +214,84 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar
|
|||
});
|
||||
return taxDeclarationValues;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void autoAddWagesDeclare(TaxDeclareRecordPO taxDeclareRecord) {
|
||||
|
||||
Long taxDeclareRecordId = taxDeclareRecord.getId();
|
||||
Date now = new Date();
|
||||
|
||||
//非正常薪资的人员
|
||||
List<Long> notWagesEmpIds = getTaxDeclarationValueMapper().queryNotWagesEmpIds(taxDeclareRecordId);
|
||||
if (CollectionUtils.isEmpty(notWagesEmpIds)) {
|
||||
return;
|
||||
}
|
||||
|
||||
//正常薪资人员
|
||||
List<Long> wagesEmpIds = getTaxDeclarationValueMapper().queryWagesEmpIds(taxDeclareRecordId);
|
||||
|
||||
//比较差异
|
||||
List<Long> autoAddIds = notWagesEmpIds.stream().filter(id -> !wagesEmpIds.contains(id)).collect(Collectors.toList());
|
||||
if (CollectionUtils.isEmpty(autoAddIds)) {
|
||||
return;
|
||||
}
|
||||
|
||||
//正常薪资的表头
|
||||
List<TaxReportColumnPO> taxReportColumns = getTaxReportColumnService(user).listByIncomeCategory(IncomeCategoryEnum.WAGES_AND_SALARIES);
|
||||
Map<String, String> valueMap = Maps.newHashMap();
|
||||
for (TaxReportColumnPO taxReportColumn : taxReportColumns) {
|
||||
String value = Objects.equals(taxReportColumn.getDataType(), SalaryDataTypeEnum.NUMBER.getValue()) ? "0.00" : "";
|
||||
valueMap.put(taxReportColumn.getReportColumnDataIndex(), value);
|
||||
}
|
||||
|
||||
//当前申报表是否含正常申报
|
||||
List<TaxDeclarationPO> list = getTaxDeclarationService(user).listByTaxDeclareRecordId(taxDeclareRecordId, IncomeCategoryEnum.WAGES_AND_SALARIES.getValue());
|
||||
TaxDeclarationPO taxDeclarationPO;
|
||||
if (CollectionUtils.isNotEmpty(list)) {
|
||||
if (list.size() > 1) {
|
||||
throw new SalaryRunTimeException("存在多条正常工资薪金申报表数据");
|
||||
}
|
||||
taxDeclarationPO = list.get(0);
|
||||
} else {
|
||||
taxDeclarationPO = TaxDeclarationPO
|
||||
.builder()
|
||||
.id(IdGenerator.generate())
|
||||
.taxDeclareRecordId(taxDeclareRecordId)
|
||||
.incomeCategory(IncomeCategoryEnum.WAGES_AND_SALARIES.getValue())
|
||||
.taxAgentId(taxDeclareRecord.getTaxAgentId())
|
||||
.salaryMonth(taxDeclareRecord.getSalaryMonth())
|
||||
.taxCycle(taxDeclareRecord.getTaxCycle())
|
||||
.description(taxDeclareRecord.getRemark())
|
||||
.controlView(0)
|
||||
.creator((long) user.getUID())
|
||||
.createTime(now)
|
||||
.updateTime(now)
|
||||
.deleteType(DeleteTypeEnum.NOT_DELETED.getValue())
|
||||
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
|
||||
.build();
|
||||
List<TaxDeclarationPO> taxList = new ArrayList<>();
|
||||
getTaxDeclarationService(user).saveBatch(taxList);
|
||||
}
|
||||
|
||||
//组装数据,自动补足
|
||||
List<TaxDeclarationValuePO> autoAddValuePOs = autoAddIds.stream().map((empId -> {
|
||||
TaxDeclarationValuePO taxDeclarationValue = TaxDeclarationValuePO.builder()
|
||||
.id(IdGenerator.generate())
|
||||
.taxDeclareRecordId(taxDeclarationPO.getTaxDeclareRecordId())
|
||||
.taxDeclarationId(taxDeclarationPO.getId())
|
||||
.employeeType(0)
|
||||
.employeeId(empId)
|
||||
.resultValue(valueMap)
|
||||
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
|
||||
.creator((long) user.getUID())
|
||||
.deleteType(DeleteTypeEnum.NOT_DELETED.getValue())
|
||||
.createTime(now)
|
||||
.updateTime(now)
|
||||
.source(SourceEnum.AUTO.getValue())
|
||||
.build();
|
||||
return taxDeclarationValue;
|
||||
})).collect(Collectors.toList());
|
||||
batchSave(autoAddValuePOs);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -376,6 +376,9 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe
|
|||
}
|
||||
}
|
||||
|
||||
//艾志正常工资薪金补足年终奖人员
|
||||
getTaxDeclarationValueService(user).autoAddWagesDeclare(taxDeclareRecord);
|
||||
|
||||
//更新核算记录状态
|
||||
getSalaryAcctRecordService(user).updateStatusByIds(salaryAcctRecordIds, SalaryAcctRecordStatusEnum.DECLARED);
|
||||
}
|
||||
|
|
@ -946,7 +949,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe
|
|||
|
||||
Map<String, List<List<Object>>> map = new HashMap<>();
|
||||
List<TaxDeclarationPO> list = getTaxDeclarationService(user).listByTaxDeclareRecordId(id);
|
||||
list.stream().map(TaxDeclarationPO::getIncomeCategory).map(IncomeCategoryEnum::parseByValue).forEach(e->e.parseGetDeclareTaxResultFeedbackResponse(map,declareTaxResultFeedbackResponse));
|
||||
list.stream().map(TaxDeclarationPO::getIncomeCategory).map(IncomeCategoryEnum::parseByValue).forEach(e -> e.parseGetDeclareTaxResultFeedbackResponse(map, declareTaxResultFeedbackResponse));
|
||||
return ExcelUtil.genWorkbookV2(map);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue