Merge remote-tracking branch 'origin/release/个税版本' into release/个税版本

This commit is contained in:
Harryxzy 2024-01-02 09:41:42 +08:00
commit 573fa6b917
10 changed files with 216 additions and 126 deletions

View File

@ -0,0 +1,36 @@
package com.engine.salary.entity.taxdeclaration.param;
import com.engine.salary.enums.salarysob.IncomeCategoryEnum;
import com.engine.salary.util.valid.DataCheck;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 新增个税申报表参数
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TaxDeclarationAddParam {
/**
* 个税申报记录id
*/
@DataCheck(require = true, message = "个税申报记录id为空")
private Long taxDeclareRecordId;
/**
* 薪资类型
*/
@DataCheck(require = true, message = "薪资类型为空")
private IncomeCategoryEnum incomeCategory;
}

View File

@ -0,0 +1,29 @@
package com.engine.salary.entity.taxdeclaration.param;
import com.engine.salary.util.valid.DataCheck;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 删除个税申报表参数
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TaxDeclarationDeleteParam {
/**
* 个税申报表id
*/
@DataCheck(require = true, message = "个税申报表id为空")
private Long taxDeclarationId;
}

View File

@ -1,5 +1,6 @@
package com.engine.salary.entity.taxdeclaration.param;
import com.engine.salary.util.valid.DataCheck;
import lombok.Data;
/**

View File

@ -3,6 +3,8 @@ package com.engine.salary.service;
import com.engine.salary.common.YearMonthRange;
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
import com.engine.salary.entity.taxagent.po.TaxAgentPO;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationAddParam;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationDeleteParam;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationListQueryParam;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam;
import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO;
@ -73,4 +75,12 @@ public interface TaxDeclarationService {
*/
List<TaxDeclarationPO> listByTaxCycleRange(YearMonthRange yearMonthRange);
/**
* 新增申报表
* @param param
*/
void addTaxDeclaration(TaxDeclarationAddParam param);
void deleteTaxDeclaration(TaxDeclarationDeleteParam param);
}

View File

@ -36,7 +36,7 @@ public interface TaxDeclarationValueService {
* @return
*/
List<TaxDeclarationValuePO> listByTaxDeclarationIds(Collection<Long> taxDeclarationIds);
List<TaxDeclarationValuePO> listByTaxDeclarationId(Long taxDeclarationIds);
List<TaxDeclarationValuePO> listByTaxDeclarationId(Long taxDeclarationId);
/**
* 查询个税申报表明细

View File

@ -4,16 +4,23 @@ import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.common.LocalDateRange;
import com.engine.salary.common.YearMonthRange;
import com.engine.salary.constant.SalaryDefaultTenantConstant;
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
import com.engine.salary.entity.salarysob.po.SalarySobPO;
import com.engine.salary.entity.taxagent.po.TaxAgentPO;
import com.engine.salary.entity.taxdeclaration.bo.TaxDeclarationBO;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationAddParam;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationDeleteParam;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationListQueryParam;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam;
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.enums.salaryaccounting.SalaryAcctRecordStatusEnum;
import com.engine.salary.enums.salarysob.IncomeCategoryEnum;
import com.engine.salary.enums.sicategory.DeleteTypeEnum;
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.mapper.datacollection.AddUpSituationMapper;
import com.engine.salary.mapper.salaryacct.SalaryAcctRecordMapper;
@ -25,6 +32,8 @@ import com.engine.salary.util.SalaryI18nUtil;
import com.engine.salary.util.db.MapperProxyFactory;
import com.engine.salary.util.page.PageInfo;
import com.engine.salary.util.page.SalaryPageUtil;
import com.engine.salary.util.valid.ValidUtil;
import dm.jdbc.util.IdGenerator;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
@ -84,6 +93,16 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration
return ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user);
}
private TaxDeclareRecordService getTaxDeclareRecordService(User user) {
return ServiceUtil.getService(TaxDeclareRecordServiceImpl.class, user);
}
private TaxDeclarationValueService getTaxDeclarationValueService(User user) {
return ServiceUtil.getService(TaxDeclarationValueServiceImpl.class, user);
}
@Override
public List<TaxDeclarationPO> listByTaxCycleAndTaxAgentIds(YearMonth taxCycle, Collection<Long> taxAgentIds) {
if (Objects.isNull(taxCycle) || CollectionUtils.isEmpty(taxAgentIds)) {
@ -102,8 +121,9 @@ 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) {
public List<TaxDeclarationPO> listByTaxDeclareRecordId(Long taxDeclareRecordId, Integer incomeCategory) {
if (Objects.isNull(taxDeclareRecordId)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误"));
}
@ -383,4 +403,76 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration
.salaryMonths(LocalDateRange.builder().fromDate(yearMonthRange.getStartMonth()).endDate(yearMonthRange.getEndMonth()).build())
.build());
}
/**
* 新增申报表
*
* @param param
*/
@Override
public void addTaxDeclaration(TaxDeclarationAddParam param) {
ValidUtil.doValidator(param);
Long taxDeclareRecordId = param.getTaxDeclareRecordId();
IncomeCategoryEnum incomeCategory = param.getIncomeCategory();
TaxDeclareRecordPO taxDeclareRecord = getTaxDeclareRecordService(user).getById(taxDeclareRecordId);
if (taxDeclareRecord == null) {
throw new SalaryRunTimeException("申报记录不存在!");
}
List<TaxDeclarationPO> taxDeclarations = listByTaxDeclareRecordId(taxDeclareRecordId);
Optional<TaxDeclarationPO> first = taxDeclarations.stream().filter(taxDeclarationPO -> incomeCategory.getValue().equals(taxDeclarationPO.getIncomeCategory())).findFirst();
if (first.isPresent()) {
throw new SalaryRunTimeException("已存在" + incomeCategory.getDefaultLabel() + "申报表");
}
Date now = new Date();
TaxDeclarationPO taxDeclaration = TaxDeclarationPO
.builder()
.id(IdGenerator.generate())
.taxDeclareRecordId(taxDeclareRecord.getId())
.incomeCategory(incomeCategory.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> objects = new ArrayList<>();
objects.add(taxDeclaration);
getTaxDeclarationMapper().batchInsert(objects);
}
/**
* 新增申报表
*
* @param param
*/
@Override
public void deleteTaxDeclaration(TaxDeclarationDeleteParam param) {
ValidUtil.doValidator(param);
Long taxDeclarationId = param.getTaxDeclarationId();
TaxDeclarationPO declarationPO = getById(taxDeclarationId);
if (declarationPO == null) {
throw new SalaryRunTimeException("申报表不存在!");
}
List<TaxDeclarationValuePO> taxDeclarationValuePOS = getTaxDeclarationValueService(user).listByTaxDeclarationId(taxDeclarationId);
if (CollectionUtils.isNotEmpty(taxDeclarationValuePOS)) {
throw new SalaryRunTimeException("存在申报明细不允许删除,请先删除申报表明细!");
}
getTaxDeclarationMapper().deleteByIdZj(taxDeclarationId);
}
}

View File

@ -1064,6 +1064,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe
getTaxDeclareRecordMapper().updateIgnoreNull(taxDeclareRecord);
}
private TaxDeclareRequest buildTaxDeclareRequest(Long id) {
// 查询供应商信息
TaxDeclarationApiConfigPO apiConfig = getTaxDeclarationApiConfigService(user).getConfig(true);

View File

@ -134,7 +134,7 @@ public class TaxDeclarationController {
}
/**
* 删除个税申报
* 删除个税申报记录
*
* @param ids 个税申报记录id
* @return
@ -175,6 +175,36 @@ public class TaxDeclarationController {
return new ResponseResult<Long, List<TaxDeclarationTabDTO>>(user).run(getTaxDeclareRecordWrapper(user)::getTaxDeclarationTab, id);
}
/**
* 新增个税申报记录下的个税申报表TAB
*
* @param param 个税申报记录id
* @return
*/
@POST
@Path("/addTaxDeclaration")
@Produces(MediaType.APPLICATION_JSON)
public String addTaxDeclarationTab(@Context HttpServletRequest request, @Context HttpServletResponse response,TaxDeclarationAddParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<TaxDeclarationAddParam, String>(user).run(getTaxDeclareRecordWrapper(user)::addTaxDeclaration, param);
}
/**
* 删除申报表
* @param request
* @param response
* @param param
* @return
*/
@POST
@Path("/deleteTaxDeclaration")
@Produces(MediaType.APPLICATION_JSON)
public String deleteTaxDeclaration(@Context HttpServletRequest request, @Context HttpServletResponse response,TaxDeclarationDeleteParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<TaxDeclarationDeleteParam, String>(user).run(getTaxDeclareRecordWrapper(user)::deleteTaxDeclaration, param);
}
/**
* 在线申报
*

View File

@ -2,35 +2,14 @@ package com.engine.salary.wrapper;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.component.WeaFormOption;
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
import com.engine.salary.entity.taxagent.po.TaxAgentPO;
import com.engine.salary.entity.taxdeclaration.bo.TaxDeclarationBO;
import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationFormDTO;
import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationInfoDTO;
import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationListDTO;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationListQueryParam;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam;
import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO;
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.service.SalaryEmployeeService;
import com.engine.salary.service.TaxAgentService;
import com.engine.salary.service.TaxDeclarationService;
import com.engine.salary.service.impl.SalaryEmployeeServiceImpl;
import com.engine.salary.service.impl.TaxAgentServiceImpl;
import com.engine.salary.service.impl.TaxDeclarationServiceImpl;
import com.engine.salary.util.SalaryDateUtil;
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.SalaryI18nUtil;
import com.engine.salary.util.page.PageInfo;
import com.google.common.collect.Lists;
import org.apache.commons.collections4.CollectionUtils;
import weaver.hrm.User;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
* 个税申报表
* <p>Copyright: Copyright (c) 2022</p>
@ -53,106 +32,4 @@ public class TaxDeclarationWrapper extends Service {
return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user);
}
/**
* 个税申报表列表
*
* @param queryParam 列表查询条件
* @param
* @return
*/
public PageInfo listPage(TaxDeclarationListQueryParam queryParam) {
// 询个税申报表分页
PageInfo<TaxDeclarationPO> page = getTaxDeclarationService(user).listPageByParam(queryParam);
PageInfo<TaxDeclarationListDTO> dtoPage = new PageInfo<TaxDeclarationListDTO>(TaxDeclarationListDTO.class);
dtoPage.setPageNum(queryParam.getCurrent());
dtoPage.setPageSize(queryParam.getPageSize());
dtoPage.setTotal(page.getTotal());
List<TaxDeclarationPO> list = page.getList();
if (CollectionUtils.isNotEmpty(list)) {
// 查询人员
List<Long> employeeIds = SalaryEntityUtil.properties(list, TaxDeclarationPO::getCreator, Collectors.toList());
List<DataCollectionEmployee> employeeComInfos = getSalaryEmployeeService(user).getEmployeeByIdsAll(employeeIds);
// 查询个税扣缴义务人
Set<Long> taxAgentIds = SalaryEntityUtil.properties(list, TaxDeclarationPO::getTaxAgentId);
List<TaxAgentPO> taxAgentPOS = getTaxDeclarationService(user).countByTaxDeclarationId(taxAgentIds);
// 转换成列表dto
List<TaxDeclarationListDTO> taxDeclarationListDTOS = TaxDeclarationBO.convert2ListDTO(list, employeeComInfos, taxAgentPOS);
dtoPage.setList(taxDeclarationListDTOS);
}
return dtoPage;
}
public TaxDeclarationFormDTO getForm(Long id) {
TaxDeclarationFormDTO formDTO = new TaxDeclarationFormDTO();
if (Objects.nonNull(id)) {
// 查询个税申报表
TaxDeclarationPO taxDeclaration = getTaxDeclarationService(user).getById(id);
if (Objects.isNull(taxDeclaration)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98877, "个税申报表不存在或已删除"));
}
// 查询个税扣缴义务人
TaxAgentPO taxAgent = getTaxAgentService(user).getById(id);
//日期转换
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
String transformDate = simpleDateFormat.format(taxDeclaration.getSalaryMonth());
// 转换成个税申报表详情dto
formDTO = TaxDeclarationFormDTO.builder().salaryMonth(SalaryDateUtil.String2YearMonth(transformDate)).taxAgentId(taxDeclaration.getTaxAgentId()).taxAgentName(Optional.ofNullable(taxAgent).map(TaxAgentPO::getName).orElse("")).description(taxDeclaration.getDescription()).build();
}
// 转换成前端所需的数据格式
// WeaForm weaForm = SalaryFormatUtil.<TaxDeclarationFormDTO>getInstance().buildForm(TaxDeclarationFormDTO.class, formDTO);
// 查询租户所有的个税扣缴义务人
Collection<TaxAgentPO> taxAgentListDTOS = getTaxAgentService(user).listAll();
// 表单中个税扣缴义务人的可选项
List<WeaFormOption> weaFormOptions = Lists.newArrayListWithExpectedSize(taxAgentListDTOS.size());
for (TaxAgentPO taxAgent : taxAgentListDTOS) {
weaFormOptions.add(new WeaFormOption("" + taxAgent.getId(), taxAgent.getName()));
}
// weaForm.getItems().forEach((k, v) -> {
// if (StringUtils.equals("taxAgentId", k)) {
// v.setOptions(weaFormOptions);
// }
// if (StringUtils.equals("salaryMonth", k)) {
// Map<String, Object> otherParams = new HashMap<>();
// otherParams.put("type", "month");
// v.setOtherParams(otherParams);
// }
// });
return formDTO;
}
/**
* 查询个税申报表的基本信息
*
* @param id 个税申报表id
* @return
*/
public TaxDeclarationInfoDTO getTaxDeclarationInfoById(Long id) {
// 查询个税申报表
TaxDeclarationPO taxDeclaration = getTaxDeclarationService(user).getById(id);
if (Objects.isNull(taxDeclaration)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98877, "个税申报表不存在或已删除"));
}
// 查询个税扣缴义务人
TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(taxDeclaration.getTaxAgentId());
return TaxDeclarationInfoDTO.builder().salaryMonth(taxDeclaration.getSalaryMonth()).taxAgentId(taxDeclaration.getTaxAgentId()).taxAgentName(Optional.ofNullable(taxAgentPO).map(TaxAgentPO::getName).orElse("")).build();
}
/**
* 保存
*
* @param saveParam 保存参数
*/
public void save(TaxDeclarationSaveParam saveParam) {
getTaxDeclarationService(user).save(saveParam);
}
/**
* 撤回个税申报
* @param taxDeclarationId
*/
public void withDrawTaxDeclaration(Long taxDeclarationId) {
getTaxDeclarationService(user).withDrawTaxDeclaration(taxDeclarationId);
}
}

View File

@ -310,6 +310,19 @@ public class TaxDeclareRecordWrapper extends Service {
return tabs;
}
/**
* 新增申报表
* @param param
*/
public void addTaxDeclaration(TaxDeclarationAddParam param) {
getTaxDeclarationService(user).addTaxDeclaration(param);
}
public void deleteTaxDeclaration(TaxDeclarationDeleteParam param) {
getTaxDeclarationService(user).deleteTaxDeclaration(param);
}
/**
* 查询个税申报表的基本信息
*
@ -767,4 +780,5 @@ public class TaxDeclareRecordWrapper extends Service {
public Map<String, Object> importData(DownloadTemplateParam param) {
return getTaxDeclarationExcelService(user).importData(param);
}
}