package com.engine.salary.service.impl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.entity.extemp.po.ExtEmpPO; 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.SalaryEmployeeService; import com.engine.salary.service.TaxAgentService; import com.engine.salary.service.TaxDeclarationApiBillingService; import com.engine.salary.service.TaxDeclarationApiFlowWarnService; import com.engine.salary.util.db.MapperProxyFactory; 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.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; /** * @author chengliming * @date 2022-11-11 2:57 PM **/ @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); } // private SalaryBatchService salaryBatchService; private TaxDeclarationApiFlowWarnService taxDeclarationApiFlowWarnService; // public TaxDeclarationApiFlowWarnService getTaxDeclarationApiFlowWarnService(User user) { // return ServiceUtil.getService(TaxDeclarationApiFlowWarnServiceImpl.class, user); // } // private ComInfoCache comInfoCache; // private ExtEmployeeService extEmployeeService; @Override public void updateApiFlowInfo(ApiFlowUpdateWrapper updateWrapper) { // 保存流量使用详情 // saveApiFlowRecord(updateWrapper); // 流量不足提醒 // taxDeclarationApiFlowWarnService.sendFlowWarnMessage(updateWrapper); } private void saveApiFlowRecord(ApiFlowUpdateWrapper updateWrapper) { if (!updateWrapper.getApiFlowDetailPOList().isEmpty()) { List> failPartition = Lists.partition(updateWrapper.getApiFlowDetailPOList(), 1000); failPartition.forEach(list -> getTaxDeclarationApiFlowRecordMapper().batchInsert(list)); } } // @Override // public PageInfo pageFlowRecord(TaxDeclarationApiFlowRecordQueryParam queryParam) { // LambdaQueryChainWrapper queryChainWrapper = getFlowRecordQueryChainWrapper(queryParam); // Page flowRecordPOPage = queryChainWrapper.page(new Page<>(queryParam.getCurrent(), queryParam.getPageSize(), true)); // List records = flowRecordPOPage.getRecords(); // 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 new SalaryPage<>(queryParam.getCurrent(), queryParam.getPageSize(), flowRecordPOPage.getTotal(), listDTOS); // } // // @Override // public List listFlowRecord(TaxDeclarationApiFlowRecordQueryParam queryParam) { // LambdaQueryChainWrapper queryChainWrapper = getFlowRecordQueryChainWrapper(queryParam); // List list = queryChainWrapper.list(); // 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, String currentTenantKey) { // Map employeeTaxAgentMap = SalaryEntityUtil.convert2Map(list, TaxDeclarationApiFlowRecordPO::getEmployeeId, TaxDeclarationApiFlowRecordPO::getTaxAgentId); // // 获取人员信息 // List employeeComInfos = comInfoCache.getCacheList(HrmEmployeeComInfo.class, new ArrayList<>(employeeTaxAgentMap.keySet())); // Map empNameMap = SalaryEntityUtil.convert2Map(employeeComInfos, HrmEmployeeComInfo::getId, HrmEmployeeComInfo::getUsername); // Map empIdNoMap = getSalaryEmployeeService(user).mapByEmployeeIds(employeeTaxAgentMap.keySet()); // List extEmployeePOS = extEmployeeService.listAll(currentTenantKey); // Map extEmployeeMap = SalaryEntityUtil.convert2Map(extEmployeePOS, ExtEmployeePO::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 LambdaQueryChainWrapper getFlowRecordQueryChainWrapper(TaxDeclarationApiFlowRecordQueryParam queryParam, String currentTenantKey) { // LambdaQueryChainWrapper chainWrapper = new LambdaQueryChainWrapper<>(getTaxDeclarationApiFlowRecordMapper()) // .eq(TaxDeclarationApiFlowRecordPO::getDeleteType, DeleteTypeEnum.NOT_DELETED.getValue()) // .eq(TaxDeclarationApiFlowRecordPO::getTenantKey) // .eq(queryParam.getTaxAgentId() != null, TaxDeclarationApiFlowRecordPO::getTaxAgentId, queryParam.getTaxAgentId()) // .eq(queryParam.getBusinessType() != null, TaxDeclarationApiFlowRecordPO::getBusinessType, queryParam.getBusinessType()) // .eq(queryParam.getResult() != null, TaxDeclarationApiFlowRecordPO::getResultStatus, queryParam.getResult()); // if (queryParam.getStartDate() != null && queryParam.getEndDate() != null) { // chainWrapper = chainWrapper.ge(TaxDeclarationApiFlowRecordPO::getUseTime, queryParam.getStartDate()) // .le(TaxDeclarationApiFlowRecordPO::getUseTime, queryParam.getEndDate()); // } // return chainWrapper; // } // @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) { this.taxYearMonth = taxYearMonth; this.apiFlowDetailPOList = new ArrayList<>(); this.apiConfig = apiConfig; this.businessType = businessType; } } }