package com.engine.salary.service.impl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.extemp.po.ExtEmpPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.entity.taxapiflow.bo.TaxApiFlowBO; import com.engine.salary.entity.taxapiflow.dto.TaxDeclarationApiFlowRecordListDTO; import com.engine.salary.entity.taxapiflow.param.TaxDeclarationApiFlowRecordQueryParam; import com.engine.salary.entity.taxapiflow.po.TaxDeclarationApiFlowRecordPO; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationApiConfigPO; import com.engine.salary.enums.taxdeclaration.EnumDeclareApiBusinessType; import com.engine.salary.mapper.taxdeclaration.TaxDeclarationApiFlowRecordMapper; import com.engine.salary.service.*; import com.engine.salary.util.SalaryEntityUtil; 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.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import weaver.hrm.User; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @Slf4j public class TaxDeclarationApiBillingServiceImpl extends Service implements TaxDeclarationApiBillingService { private TaxDeclarationApiFlowRecordMapper getTaxDeclarationApiFlowRecordMapper() { return MapperProxyFactory.getProxy(TaxDeclarationApiFlowRecordMapper.class); } public TaxAgentService getTaxAgentService(User user) { return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } public SalaryEmployeeService getSalaryEmployeeService(User user) { return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } public TaxDeclarationApiFlowWarnService getTaxDeclarationApiFlowWarnService(User user) { return ServiceUtil.getService(TaxDeclarationApiFlowWarnServiceImpl.class, user); } public ExtEmpService getExtEmpService(User user) { return ServiceUtil.getService(ExtEmpServiceImpl.class, user); } @Override public void updateApiFlowInfo(ApiFlowUpdateWrapper updateWrapper) { // 保存流量使用详情 saveApiFlowRecord(updateWrapper); // 流量不足提醒 getTaxDeclarationApiFlowWarnService(user).sendFlowWarnMessage(updateWrapper); } private void saveApiFlowRecord(ApiFlowUpdateWrapper updateWrapper) { if (!updateWrapper.getApiFlowDetailPOList().isEmpty()) { List> failPartition = Lists.partition(updateWrapper.getApiFlowDetailPOList(), 50); failPartition.forEach(list -> getTaxDeclarationApiFlowRecordMapper().batchInsert(list)); } } @Override public PageInfo pageFlowRecord(TaxDeclarationApiFlowRecordQueryParam queryParam) { TaxDeclarationApiFlowRecordPO queryChainWrapper = getFlowRecordQueryChainWrapper(queryParam); List records = getTaxDeclarationApiFlowRecordMapper().listSome(queryChainWrapper); if (records.isEmpty()) { return new PageInfo<>(); } TempPropertiesWrapper propertiesWrapper = getUserInfoAndTaxAgentMap(records); // 转换数据 AtomicInteger indexNum = new AtomicInteger(1); List listDTOS = records.stream().map(e -> TaxApiFlowBO.taxDeclarationApiFlowRecordPo2ListDTO(propertiesWrapper, indexNum, e) ).collect(Collectors.toList()); return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), listDTOS, TaxDeclarationApiFlowRecordListDTO.class); } @Override public List listFlowRecord(TaxDeclarationApiFlowRecordQueryParam queryParam) { TaxDeclarationApiFlowRecordPO queryChainWrapper = getFlowRecordQueryChainWrapper(queryParam); List list = getTaxDeclarationApiFlowRecordMapper().listSome(queryChainWrapper); if (list.isEmpty()) { return new ArrayList<>(); } TempPropertiesWrapper propertiesWrapper = getUserInfoAndTaxAgentMap(list); // 转换数据 AtomicInteger indexNum = new AtomicInteger(1); return list.stream().map(e -> TaxApiFlowBO.taxDeclarationApiFlowRecordPo2ListDTO(propertiesWrapper, indexNum, e)).collect(Collectors.toList()); } private TempPropertiesWrapper getUserInfoAndTaxAgentMap(List list) { Map employeeTaxAgentMap = SalaryEntityUtil.convert2Map(list, TaxDeclarationApiFlowRecordPO::getEmployeeId, TaxDeclarationApiFlowRecordPO::getTaxAgentId); // 获取人员信息 List employeeComInfos =getSalaryEmployeeService(user).getEmployeeByIdsAll(new ArrayList<>(employeeTaxAgentMap.keySet())); Map empNameMap = SalaryEntityUtil.convert2Map(employeeComInfos, DataCollectionEmployee::getEmployeeId, DataCollectionEmployee::getUsername); Map empIdNoMap = getSalaryEmployeeService(user).mapByEmployeeIds(employeeTaxAgentMap.keySet()); List extEmployeePOS = getExtEmpService(user).listAll(); Map extEmployeeMap = SalaryEntityUtil.convert2Map(extEmployeePOS, ExtEmpPO::getId); // 获取个税扣缴义务人信息 List taxAgentPOS = getTaxAgentService(user).listByIds(new HashSet<>(employeeTaxAgentMap.values())); Map taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgentPOS, TaxAgentPO::getId, TaxAgentPO::getName); return new TempPropertiesWrapper(empNameMap, empIdNoMap, taxAgentNameMap, extEmployeeMap); } private TaxDeclarationApiFlowRecordPO getFlowRecordQueryChainWrapper(TaxDeclarationApiFlowRecordQueryParam queryParam) { TaxDeclarationApiFlowRecordPO build = TaxDeclarationApiFlowRecordPO.builder() .taxAgentId(queryParam.getTaxAgentId()) .businessType(queryParam.getBusinessType()) .resultStatus(queryParam.getResult()) .build(); if (queryParam.getStartDate() != null && queryParam.getEndDate() != null) { build.setUseTimeStartDate(queryParam.getStartDate()); build.setUseTimeEndDate(queryParam.getEndDate()); } return build; } // @Override // public void exportFlowRecord(TaxDeclarationApiFlowRecordQueryParam queryParam, Map map) { // ExportWrapper exportWrapper = new ExportWrapper(map, employeeId, tenantKey); // // 表头 // List headers = exportWrapper.getHeaders(); // headers.add(SalaryI18nUtil.getI18nLabel( 159083, "时间")); // headers.add(SalaryI18nUtil.getI18nLabel( 86184, "个税扣缴义务人")); // headers.add(SalaryI18nUtil.getI18nLabel( 100133, "人员")); // headers.add(SalaryI18nUtil.getI18nLabel( 106277, "身份证号")); // headers.add(SalaryI18nUtil.getI18nLabel( 159085, "接口服务")); // headers.add(SalaryI18nUtil.getI18nLabel( 85435, "操作人")); // headers.add(SalaryI18nUtil.getI18nLabel( 159086, "结果")); // exportWrapper.getExcelSheetData().setHeaders(Collections.singletonList(headers.toArray(new String[]{}))); // // 获取数据 // List dtoList = listFlowRecord(queryParam, employeeId, tenantKey); // // 组装数据 // for (TaxDeclarationApiFlowRecordListDTO dto : dtoList) { // List row = new ArrayList<>(); // row.add(dto.getCreateTime()); // row.add(dto.getTaxAgentName()); // row.add(dto.getEmployeeName()); // row.add(dto.getIdCardNo()); // row.add(dto.getBusinessTypeName()); // row.add(dto.getCreator()); // row.add(dto.getResult()); // exportWrapper.getRows().add(row); // } // // 生成表格 // buildExcelData(exportWrapper); // } // /** // * 构建excel数据 // * // * @param wrapper // */ // private void buildExcelData(ExportWrapper wrapper) { // wrapper.getExcelSheetData().setRows(wrapper.getRows()); // wrapper.getSheetList().add(wrapper.getExcelSheetData()); // salaryBatchService.simpleExportExcel(wrapper.buildExportExcelInfo(), wrapper.getSheetList()); // } // /** * 封装一些临时的集合类,便于方法复用 */ @Data @NoArgsConstructor @AllArgsConstructor public static class TempPropertiesWrapper { // 姓名 private Map empNameMap; // 身份证 private Map empIdNoMap; // 获取个税扣缴义务人信息 private Map taxAgentNameMap; // 获取非系统人员 private Map extEmployeeMap; } @Data public static class ApiFlowUpdateWrapper { private String tenantKey; private Long currentEmployeeId; // 税款所属期 private Date taxYearMonth; // api流量使用情况 private List apiFlowDetailPOList; // 当前租户的api接口配置 private TaxDeclarationApiConfigPO apiConfig; // 接口类型 private EnumDeclareApiBusinessType businessType; public ApiFlowUpdateWrapper(Date taxYearMonth, TaxDeclarationApiConfigPO apiConfig, EnumDeclareApiBusinessType businessType,Long currentEmployeeId) { this.taxYearMonth = taxYearMonth; this.apiFlowDetailPOList = new ArrayList<>(); this.apiConfig = apiConfig; this.businessType = businessType; this.currentEmployeeId = currentEmployeeId; } } }