申报表明细新增、编辑

This commit is contained in:
钱涛 2023-12-14 17:55:48 +08:00
parent 4810bfb73e
commit d9c952e80c
10 changed files with 309 additions and 71 deletions

View File

@ -48,6 +48,7 @@ public class EmployeeDeclareListQueryParam extends BaseQueryParam {
// 员工姓名/编号
private String keyword;
private Long employeeId;
// 部门
private Collection<Long> departmentIds;

View File

@ -2,11 +2,9 @@ package com.engine.salary.entity.taxdeclaration.bo;
import com.engine.salary.constant.TaxDeclarationDataIndexConstant;
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationAnnualListDTO;
import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationEmployeeDTO;
import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationLaborListDTO;
import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationWageListDTO;
import com.engine.salary.entity.taxdeclaration.dto.*;
import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationDetailPO;
import com.engine.salary.entity.taxdeclaration.po.TaxReportColumnPO;
import com.engine.salary.enums.salaryaccounting.EmployeeTypeEnum;
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.SalaryI18nUtil;
@ -15,6 +13,7 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
* 个税申报表详情
@ -177,4 +176,23 @@ public class TaxDeclarationDetailBO {
}
return taxDeclarationLaborListDTOS;
}
public static List<TaxDeclareRecordDetailFormDTO.TaxReportColumn> convert2ListTaxReportColumn(List<TaxReportColumnPO> pos) {
if (CollectionUtils.isEmpty(pos)) {
return Collections.emptyList();
}
List<TaxDeclareRecordDetailFormDTO.TaxReportColumn> collect = pos.stream().map(po -> {
TaxDeclareRecordDetailFormDTO.TaxReportColumn taxReportColumn = new TaxDeclareRecordDetailFormDTO.TaxReportColumn();
taxReportColumn.setReportColumnName(po.getReportColumnName());
taxReportColumn.setReportColumnDataIndex(po.getReportColumnDataIndex());
taxReportColumn.setTaxReportType(po.getTaxReportType());
taxReportColumn.setIncomeCategory(po.getIncomeCategory());
taxReportColumn.setDataType(po.getDataType());
return taxReportColumn;
}).collect(Collectors.toList());
return collect;
}
}

View File

@ -0,0 +1,76 @@
package com.engine.salary.entity.taxdeclaration.dto;
import com.engine.salary.annotation.TableTitle;
import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
import java.util.Map;
/**
* 个税申报明细新增表单
* <p>Copyright: Copyright (c) 2023</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TaxDeclareRecordDetailFormDTO {
/**
* 个税申报表id
*/
private Long taxDeclarationId;
@TableTitle(title = "工号", dataIndex = "jobNum", key = "jobNum")
private String jobNum;
@TableTitle(title = "姓名", dataIndex = "username", key = "username")
private String username;
@TableTitle(title = "证件类型", dataIndex = "cardType", key = "cardType")
private String cardType;
@TableTitle(title = "证件号码", dataIndex = "cardNum", key = "cardNum")
private String cardNum;
/**
* 收入所得项目
*/
private String incomeCategory;
/**
* 人员报送下拉选择
*/
private List<EmployeeDeclarePO> employeeDeclares;
/**
* 当前申报类型可编辑字段
*/
private List<TaxReportColumn> taxReportColumns;
private Map<String, String> resultValue;
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class TaxReportColumn {
//报表类型
private String taxReportType;
//所得项目
private String incomeCategory;
//申报表列索引
private String reportColumnDataIndex ;
//申报表的列名
private String reportColumnName;
//数值类型
private String dataType;
}
}

View File

@ -0,0 +1,21 @@
package com.engine.salary.entity.taxdeclaration.param;
import lombok.Data;
/**
* 个税申报明细保存
* <p>Copyright: Copyright (c) 2023</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
@Data
public class TaxDeclareRecordDetailFormParam {
/**
* 个税申报表id
*/
private Long taxDeclarationId;
}

View File

@ -1,7 +1,5 @@
package com.engine.salary.entity.taxdeclaration.param;
import com.engine.salary.annotation.SalaryTableColumn;
import com.engine.salary.annotation.TableTitle;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
@ -23,10 +21,7 @@ public class TaxDeclareRecordDetailSaveParam {
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
//个税申报记录id")
private Long taxDeclareRecordId;
//个税申报表id")
//个税申报表id
private Long taxDeclarationId;
//人员id
@ -34,31 +29,6 @@ public class TaxDeclareRecordDetailSaveParam {
private Long employeeId;
private Integer employeeType;
@SalaryTableColumn(
text = "工号", width = "10%", column = "jobNum"
)
@TableTitle(title ="工号",dataIndex = "jobNum",key = "jobNum")
private String jobNum;
@SalaryTableColumn(
text = "姓名", width = "10%", column = "username"
)
@TableTitle(title ="姓名",dataIndex = "username",key = "username")
private String username;
@SalaryTableColumn(
text = "证件类型", width = "10%", column = "cardType"
)
@TableTitle(title ="证件类型",dataIndex = "cardType",key = "cardType")
private String cardType;
@SalaryTableColumn(
text = "证件号码", width = "10%", column = "cardNum"
)
@TableTitle(title ="证件号码",dataIndex = "cardNum",key = "cardNum")
private String cardNum;
private Map<String,String> taxReportColumnValues;
}

View File

@ -838,6 +838,9 @@
<if test="param.declareStatus != null">
AND declare_status = #{param.declareStatus.value}
</if>
<if test="param.employeeId != null">
AND employee_id=#{param.employeeId}
</if>
<if test="param.employmentStatus != null">
AND employment_status = #{param.employmentStatus.value}
</if>

View File

@ -2,6 +2,7 @@ package com.engine.salary.service;
import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationValueListDTO;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationValueListQueryParam;
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.util.page.PageInfo;
@ -58,10 +59,17 @@ public interface TaxDeclarationValueService {
*/
void batchSave(List<TaxDeclarationValuePO> taxDeclarationValues);
void save(TaxDeclareRecordDetailSaveParam param);
void edit(TaxDeclareRecordDetailSaveParam param);
TaxDeclarationValuePO getById(Long id);
/**
* 删除个税申报表明细
*
* @param taxDeclareRecordIds
*/
void deleteByTaxDeclareRecordIds(Collection<Long> taxDeclareRecordIds);
}

View File

@ -3,6 +3,7 @@ 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.constant.SalaryDefaultTenantConstant;
import com.engine.salary.encrypt.EncryptUtil;
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO;
@ -10,11 +11,13 @@ import com.engine.salary.entity.extemp.po.ExtEmpPO;
import com.engine.salary.entity.taxdeclaration.bo.TaxDeclarationValueList;
import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationValueListDTO;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationValueListQueryParam;
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.TaxReportColumnPO;
import com.engine.salary.enums.salaryaccounting.EmployeeTypeEnum;
import com.engine.salary.enums.salarysob.IncomeCategoryEnum;
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.mapper.taxdeclaration.TaxDeclarationValueMapper;
import com.engine.salary.service.*;
import com.engine.salary.util.JsonUtil;
@ -24,6 +27,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 dm.jdbc.util.IdGenerator;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import weaver.hrm.User;
@ -63,6 +67,10 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar
return ServiceUtil.getService(TaxReportColumnServiceImpl.class, user);
}
private TaxDeclarationService getTaxDeclarationService(User user) {
return ServiceUtil.getService(TaxDeclarationServiceImpl.class, user);
}
@Override
public PageInfo<TaxDeclarationValuePO> listPageByTaxDeclarationIds(TaxDeclarationValueListQueryParam queryParam, Collection<Long> taxDeclarationIds) {
List<TaxDeclarationValuePO> taxDeclarationValuePOS = getTaxDeclarationValueMapper().listSome(TaxDeclarationValuePO.builder().taxDeclarationIds(taxDeclarationIds).build());
@ -131,6 +139,55 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar
}
}
@Override
public void save(TaxDeclareRecordDetailSaveParam param) {
TaxDeclarationPO taxDeclaration = getTaxDeclarationService(user).getById(param.getTaxDeclarationId());
if(taxDeclaration==null){
throw new SalaryRunTimeException("个税申报表不存在!");
}
TaxDeclarationValuePO po = TaxDeclarationValuePO.builder()
.id(IdGenerator.generate())
.taxDeclarationId(param.getTaxDeclarationId())
.taxDeclareRecordId(taxDeclaration.getTaxDeclareRecordId())
.employeeId(param.getEmployeeId())
.employeeType(param.getEmployeeType())
.resultValue(param.getTaxReportColumnValues())
.resultValueJson(JsonUtil.toJsonString(param.getTaxReportColumnValues()))
.createTime(new Date())
.updateTime(new Date())
.creator((long) user.getUID())
.deleteType(0)
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
.build();
encryptUtil.encrypt(po, TaxDeclarationValuePO.class);
getTaxDeclarationValueMapper().insertIgnoreNull(po);
}
@Override
public void edit(TaxDeclareRecordDetailSaveParam param) {
TaxDeclarationValuePO po = getById(param.getId());
po.setResultValue(param.getTaxReportColumnValues());
po.setResultValueJson(JsonUtil.toJsonString(param.getTaxReportColumnValues()));
po.setUpdateTime(new Date());
encryptUtil.encrypt(po, TaxDeclarationValuePO.class);
getTaxDeclarationValueMapper().updateIgnoreNull(po);
}
@Override
public TaxDeclarationValuePO getById(Long id) {
TaxDeclarationValuePO po = getTaxDeclarationValueMapper().getById(id);
if(po==null){
throw new SalaryRunTimeException("个税申报明细不存在!");
}
encryptUtil.decrypt(po,TaxDeclarationValuePO.class);
po.setResultValue(JsonUtil.parseMap(po.getResultValueJson(), String.class));
return po;
}
@Override
public void deleteByTaxDeclareRecordIds(Collection<Long> taxDeclareRecordIds) {
if (CollectionUtils.isEmpty(taxDeclareRecordIds)) {

View File

@ -337,19 +337,20 @@ public class TaxDeclarationController {
/**
* 新增表单
*
* @param incomeCategory
* @param param
* @return
*/
@GET
@POST
@Path("/getAddForm")
@Produces(MediaType.APPLICATION_JSON)
public String getAddForm(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "IncomeCategoryEnum") IncomeCategoryEnum incomeCategory) {
public String getAddForm(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclareRecordDetailFormParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<IncomeCategoryEnum, String>(user).run(getTaxDeclareRecordWrapper(user)::getAddForm, incomeCategory);
return new ResponseResult<TaxDeclareRecordDetailFormParam, TaxDeclareRecordDetailFormDTO>(user).run(getTaxDeclareRecordWrapper(user)::getAddForm, param);
}
/**
* 新增
*
* @param request
* @param response
* @param param
@ -358,11 +359,45 @@ public class TaxDeclarationController {
@POST
@Path("/add")
@Produces(MediaType.APPLICATION_JSON)
public String add(@Context HttpServletRequest request, @Context HttpServletResponse response,TaxDeclareRecordDetailSaveParam param) {
public String add(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclareRecordDetailSaveParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<TaxDeclareRecordDetailSaveParam, String>(user).run(getTaxDeclareRecordWrapper(user)::add, param);
}
/**
* 编辑
*
* @param request
* @param response
* @param param
* @return
*/
@POST
@Path("/edit")
@Produces(MediaType.APPLICATION_JSON)
public String edit(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclareRecordDetailSaveParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<TaxDeclareRecordDetailSaveParam, String>(user).run(getTaxDeclareRecordWrapper(user)::edit, param);
}
/**
* 获取详细详细
*
* @param request
* @param response
* @param id
* @return
*/
@GET
@Path("/detailInfo")
@Produces(MediaType.APPLICATION_JSON)
public String edit(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<Long, TaxDeclareRecordDetailFormDTO>(user).run(getTaxDeclareRecordWrapper(user)::detailInfo, id);
}
/**
* 个税申报表详情列表
*
@ -407,9 +442,7 @@ public class TaxDeclarationController {
};
response.setContentType("application/octet-stream");
return Response.ok(output)
.header("Content-disposition", "attachment;filename=" + fileName)
.header("Cache-Control", "no-cache").build();
return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build();
} catch (Exception e) {
log.error("个税申报表明细导出异常", e);
throw e;
@ -544,9 +577,7 @@ public class TaxDeclarationController {
};
response.setContentType("application/octet-stream");
return Response.ok(output)
.header("Content-disposition", "attachment;filename=" + fileName)
.header("Cache-Control", "no-cache").build();
return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build();
} catch (Exception e) {
log.error("未报送的人员导出异常", e);
throw e;
@ -581,9 +612,7 @@ public class TaxDeclarationController {
};
response.setContentType("application/octet-stream");
return Response.ok(output)
.header("Content-disposition", "attachment;filename=" + fileName)
.header("Cache-Control", "no-cache").build();
return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build();
} catch (Exception e) {
log.error("缺少申报数据的人员导出异常", e);
throw e;
@ -617,9 +646,7 @@ public class TaxDeclarationController {
};
response.setContentType("application/octet-stream");
return Response.ok(output)
.header("Content-disposition", "attachment;filename=" + fileName)
.header("Cache-Control", "no-cache").build();
return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build();
} catch (Exception e) {
log.error("申报失败人员导出异常", e);
throw e;

View File

@ -3,12 +3,17 @@ package com.engine.salary.wrapper;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.cache.SalaryCacheKey;
import com.engine.salary.constant.SalaryDefaultTenantConstant;
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
import com.engine.salary.entity.employeedeclare.param.EmployeeDeclareListQueryParam;
import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO;
import com.engine.salary.entity.taxagent.po.TaxAgentPO;
import com.engine.salary.entity.taxdeclaration.bo.TaxDeclarationDetailBO;
import com.engine.salary.entity.taxdeclaration.dto.*;
import com.engine.salary.entity.taxdeclaration.param.*;
import com.engine.salary.entity.taxdeclaration.po.*;
import com.engine.salary.enums.employeedeclare.CardTypeEnum;
import com.engine.salary.enums.employeedeclare.DeclareStatusEnum;
import com.engine.salary.enums.employeedeclare.EmploymentStatusEnum;
import com.engine.salary.enums.salarysob.IncomeCategoryEnum;
import com.engine.salary.enums.taxdeclaration.TaxDeclareStatusEnum;
import com.engine.salary.enums.taxdeclaration.TaxDeclareTypeEnum;
@ -91,6 +96,10 @@ public class TaxDeclareRecordWrapper extends Service {
return ServiceUtil.getService(TaxReportColumnServiceImpl.class, user);
}
private EmployeeDeclareService getEmployeeDeclareService(User user) {
return ServiceUtil.getService(EmployeeDeclareServiceImpl.class, user);
}
/**
* 个税申报记录列表
@ -663,29 +672,77 @@ public class TaxDeclareRecordWrapper extends Service {
return getTaxDeclarationExcelService(user).exportEmployee4Fail(queryParam);
}
public List<TaxReportColumnPO> getAddForm(IncomeCategoryEnum incomeCategoryEnum) {
public TaxDeclareRecordDetailFormDTO getAddForm(TaxDeclareRecordDetailFormParam param) {
TaxDeclarationPO taxDeclaration = getTaxDeclarationService(user).getById(param.getTaxDeclarationId());
// 查询个税申报表列
List<TaxReportColumnPO> taxReportColumns = getTaxReportColumnService(user).listByIncomeCategory(incomeCategoryEnum);
return taxReportColumns;
List<TaxReportColumnPO> taxReportColumns = getTaxReportColumnService(user).listByIncomeCategory(IncomeCategoryEnum.parseByValue(taxDeclaration.getIncomeCategory()));
//当前税款所属期报送成功且状态正常的人员
List<EmployeeDeclarePO> employeeDeclarePOS = getEmployeeDeclareService(user).listByParam(
EmployeeDeclareListQueryParam
.builder()
.taxCycle(taxDeclaration.getTaxCycle())
.taxAgentId(taxDeclaration.getTaxAgentId())
.declareStatus(DeclareStatusEnum.DECLARE_SUCCESS)
.employmentStatus(EmploymentStatusEnum.NORMAL)
.build()
);
//过滤申报表中已存在的人员
List<TaxDeclarationValuePO> taxDeclarationValuePOS = getTaxDeclarationValueService(user).listByTaxDeclarationIds(Collections.singletonList(param.getTaxDeclarationId()));
Set<Long> empIds = SalaryEntityUtil.properties(taxDeclarationValuePOS, TaxDeclarationValuePO::getEmployeeId);
employeeDeclarePOS = employeeDeclarePOS.stream().filter(emp -> !empIds.contains(emp.getEmployeeId())).collect(Collectors.toList());
return TaxDeclareRecordDetailFormDTO.builder()
.taxReportColumns(TaxDeclarationDetailBO.convert2ListTaxReportColumn(taxReportColumns))
.employeeDeclares(employeeDeclarePOS)
.taxDeclarationId(taxDeclaration.getTaxAgentId())
.build();
}
/**
* 新增
* @param param
*/
public void add(TaxDeclareRecordDetailSaveParam param) {
getTaxDeclarationValueService(user).save(param);
}
TaxDeclarationValuePO build = TaxDeclarationValuePO.builder()
.id(IdGenerator.generate())
.taxDeclarationId(param.getTaxDeclarationId())
.taxDeclareRecordId(param.getTaxDeclareRecordId())
.employeeId(param.getEmployeeId())
.employeeType(param.getEmployeeType())
.resultValue(param.getTaxReportColumnValues())
.createTime(new Date())
.updateTime(new Date())
.creator((long) user.getUID())
.deleteType(0)
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
/**
* 编辑
* @param param
*/
public void edit(TaxDeclareRecordDetailSaveParam param) {
getTaxDeclarationValueService(user).edit(param);
}
public TaxDeclareRecordDetailFormDTO detailInfo(Long id) {
TaxDeclarationValuePO declarationValuePO = getTaxDeclarationValueService(user).getById(id);
TaxDeclarationPO taxDeclarationPO = getTaxDeclarationService(user).getById(declarationValuePO.getTaxDeclarationId());
List<EmployeeDeclarePO> employeeDeclarePOS = getEmployeeDeclareService(user).listByParam(
EmployeeDeclareListQueryParam
.builder()
.taxCycle(taxDeclarationPO.getTaxCycle())
.taxAgentId(taxDeclarationPO.getTaxAgentId())
.employeeId(declarationValuePO.getEmployeeId())
.build()
);
if (CollectionUtils.isEmpty(employeeDeclarePOS)) {
throw new SalaryRunTimeException("当前人员未报送!");
}
EmployeeDeclarePO employeeDeclarePO = employeeDeclarePOS.get(0);
// 查询个税申报表列
List<TaxReportColumnPO> taxReportColumns = getTaxReportColumnService(user).listByIncomeCategory(IncomeCategoryEnum.parseByValue(taxDeclarationPO.getIncomeCategory()));
return TaxDeclareRecordDetailFormDTO.builder()
.incomeCategory(IncomeCategoryEnum.parseByValue(taxDeclarationPO.getIncomeCategory()).getDefaultLabel())
.cardNum(employeeDeclarePO.getCardNum())
.cardType(SalaryEnumUtil.enumMatchByValue(employeeDeclarePO.getCardType(), CardTypeEnum.class).getDefaultLabel())
.username(employeeDeclarePO.getEmployeeName())
.jobNum(employeeDeclarePO.getJobNum())
.taxReportColumns(TaxDeclarationDetailBO.convert2ListTaxReportColumn(taxReportColumns))
.resultValue(declarationValuePO.getResultValue())
.build();
List<TaxDeclarationValuePO> objects = new ArrayList<>();
objects.add(build);
getTaxDeclarationValueService(user).batchSave(objects);
}
}