package com.engine.salary.service.impl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.cmd.taxDeclaration.TaxDeclarationDeleteCmd; import com.engine.salary.cmd.taxDeclaration.TaxDeclarationGetFormCmd; import com.engine.salary.cmd.taxDeclaration.TaxDeclarationGetTaxDeclarationInfoCmd; import com.engine.salary.cmd.taxDeclaration.TaxDeclarationUpdateCmd; import com.engine.salary.common.LocalDateRange; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.entity.taxdeclaration.TaxDeclaration; 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.taxrate.TaxAgent; import com.engine.salary.entity.taxrate.param.TaxAgentQueryParam; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.TaxAgentMapper; import com.engine.salary.mapper.taxdeclaration.TaxDeclarationMapper; import com.engine.salary.service.AddUpSituationService; import com.engine.salary.service.TaxAgentService; import com.engine.salary.service.TaxDeclarationDetailService; import com.engine.salary.service.TaxDeclarationService; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; 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 org.apache.commons.collections4.CollectionUtils; import org.apache.ibatis.session.SqlSession; import weaver.conn.mybatis.MyBatisFactory; import weaver.hrm.User; import java.time.YearMonth; import java.util.*; public class TaxDeclarationServiceImpl extends Service implements TaxDeclarationService { private TaxDeclarationMapper getTaxDeclarationMapper() { return MapperProxyFactory.getProxy(TaxDeclarationMapper.class); } private TaxDeclarationDetailService getTaxDeclarationDetailService(User user) { return ServiceUtil.getService(TaxDeclarationDetailServiceImpl.class, user); } private AddUpSituationService getAddUpSituationService(User user) { return ServiceUtil.getService(AddUpSituationServiceImpl.class, user); } private TaxAgentService getTaxAgentService(User user) { return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } @Override public PageInfo listPageByParam(TaxDeclarationListQueryParam queryParam) { long currentEmployeeId = user.getUID(); // 分页参数 TaxDeclarationPO po = TaxDeclarationPO.builder().build(); LocalDateRange localDateRange = new LocalDateRange(); if (Objects.nonNull(queryParam.getFromSalaryMonth())) { localDateRange.setFromDate(SalaryDateUtil.localDateToDate(queryParam.getFromSalaryMonth().atDay(1))); } if (Objects.nonNull(queryParam.getEndSalaryMonth())) { localDateRange.setEndDate(SalaryDateUtil.localDateToDate(queryParam.getEndSalaryMonth().atEndOfMonth())); } po.setSalaryMonths(localDateRange); // 分权 Boolean openDevolution = getTaxAgentService(user).isNeedAuth(currentEmployeeId); if (openDevolution) { // 查询负责管理的个税扣缴义务人 Collection taxAgentPOS = getTaxAgentService(user).listAllTaxAgents(currentEmployeeId); if (CollectionUtils.isEmpty(taxAgentPOS)) { return new PageInfo<>(new ArrayList<>()); } Set taxAgentIds = SalaryEntityUtil.properties(taxAgentPOS, TaxAgentPO::getId); po.setTaxAgentIds(taxAgentIds); } // 查询个税申报表 SalaryPageUtil.start(queryParam.getCurrent(), queryParam.getPageSize()); List taxDeclarationPOS = getTaxDeclarationMapper().listSome(po); return new PageInfo<>(taxDeclarationPOS,TaxDeclarationPO.class); } //根据id查询taxAgents @Override public List countByTaxDeclarationId(Collection taxAgentIds) { if (CollectionUtils.isEmpty(taxAgentIds)) { return Collections.emptyList(); } SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); try { TaxAgentMapper taxAgentMapper = sqlSession.getMapper(TaxAgentMapper.class); return taxAgentMapper.listBySome(TaxAgentQueryParam.builder().ids(taxAgentIds).build()); } finally { sqlSession.close(); } } //根据id获取TaxDeclaration @Override public TaxDeclaration getById(Long id) { return getTaxDeclarationMapper().getById(id); } @Override public Map getForm(Map params) { return commandExecutor.execute(new TaxDeclarationGetFormCmd(params, user)); } @Override public Map getTaxDeclarationInfo(Map params) { return commandExecutor.execute(new TaxDeclarationGetTaxDeclarationInfoCmd(params, user)); } @Override public void save(TaxDeclarationSaveParam saveParam) { //return commandExecutor.execute(new TaxDeclarationSaveCmd(saveParam)); return; } @Override public Map update(Map params) { return commandExecutor.execute(new TaxDeclarationUpdateCmd(params, user)); } @Override public Map delete(Map params) { return commandExecutor.execute(new TaxDeclarationDeleteCmd(params, user)); } @Override public void deleteBySalaryMonth(YearMonth salaryMonth) { // 薪资所属月的日期范围 LocalDateRange salaryMonthDateRange = SalaryDateUtil.localDate2Range(SalaryDateUtil.localDateToDate(salaryMonth.atDay(1))); if (Objects.isNull(salaryMonthDateRange)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); } List taxDeclarationPOS = listBySalaryMonth(salaryMonthDateRange); if (CollectionUtils.isEmpty(taxDeclarationPOS)) { return; } // 删除个税申报表 Set taxDeclarationIds = SalaryEntityUtil.properties(taxDeclarationPOS, TaxDeclarationPO::getId); getTaxDeclarationMapper().deleteByIds(taxDeclarationIds); // 删除个税申报表详情 getTaxDeclarationDetailService(user).deleteByTaxDeclarationIds(taxDeclarationIds); // 删除往期累计情况 getAddUpSituationService(user).deleteAddUpSituationList(salaryMonth, Collections.emptyList()); } public List listBySalaryMonth(LocalDateRange salaryMonthDateRange) { return getTaxDeclarationMapper().listSome(TaxDeclarationPO.builder().salaryMonths(salaryMonthDateRange).build()); } }