package com.engine.salary.service.impl; import com.alibaba.fastjson.JSON; import com.api.browser.bean.SearchConditionGroup; import com.api.browser.bean.SearchConditionItem; import com.api.browser.bean.SearchConditionOption; import com.cloudstore.eccom.pc.table.*; import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.SIAccountBiz; import com.engine.salary.biz.SIArchivesBiz; import com.engine.salary.component.SalaryWeaTable; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.encrypt.siaccount.InsuranceAccountDetailPOEncrypt; import com.engine.salary.encrypt.siaccount.SiAccountEncrypt; import com.engine.salary.entity.siaccount.bo.InsuranceAccountBO; import com.engine.salary.entity.siaccount.dto.InsuranceAccountBatchListDTO; import com.engine.salary.entity.siaccount.dto.InsuranceAccountTabDTO; import com.engine.salary.entity.siaccount.dto.InsuranceAccountViewListDTO; import com.engine.salary.entity.siaccount.param.*; import com.engine.salary.entity.siaccount.po.InsuranceAccountBatchPO; import com.engine.salary.entity.siaccount.po.InsuranceAccountDetailPO; import com.engine.salary.entity.siaccount.po.InsuranceAccountInspectPO; import com.engine.salary.entity.siarchives.po.InsuranceArchivesEmployeePO; import com.engine.salary.entity.sicategory.po.ICategoryPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.siaccount.BillStatusEnum; import com.engine.salary.enums.siaccount.InspectStatusEnum; import com.engine.salary.enums.siaccount.PaymentStatusEnum; import com.engine.salary.enums.siaccount.ProjectTypeEnum; import com.engine.salary.enums.sicategory.WelfareTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.siaccount.InsuranceAccountBatchMapper; import com.engine.salary.mapper.siaccount.InsuranceAccountDetailMapper; import com.engine.salary.mapper.siaccount.InsuranceAccountInspectMapper; import com.engine.salary.mapper.sicategory.ICategoryMapper; import com.engine.salary.service.*; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryFormItemUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.Column; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.util.valid.ValidUtil; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import weaver.hrm.User; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; /** * @Author weaver_cl * @Description: * @Date 2022/4/11 * @Version V1.0 **/ public class SIAccountServiceImpl extends Service implements SIAccountService { // private SIAccountBiz siAccountBiz = new SIAccountBiz(); private SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); public RecordsBuildService getService(User user) { return ServiceUtil.getService(RecordsBuildServiceImpl.class, user); } public SIAccountBiz getSiAccountBiz(User user) { return ServiceUtil.getService(SIAccountBiz.class, user); } public ColumnBuildService getColumnBuildService(User user) { return ServiceUtil.getService(ColumnBuildServiceImpl.class, user); } public SICategoryService getSICategoryService(User user) { return ServiceUtil.getService(SICategoryServiceImpl.class, user); } private TaxAgentService getTaxAgentService(User user) { return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } private InsuranceAccountBatchMapper getInsuranceAccountBatchMapper() { return MapperProxyFactory.getProxy(InsuranceAccountBatchMapper.class); } private InsuranceAccountDetailMapper getInsuranceAccountDetailMapper() { return MapperProxyFactory.getProxy(InsuranceAccountDetailMapper.class); } @Override public Map listPage(InsuranceAccountBatchParam queryParam) { Long employeeId = (long) user.getUID(); Map datas = new HashMap<>(); // 分权逻辑 Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID()); if (needAuth) { Collection taxAgentPOS = getTaxAgentService(user).listAllTaxAgents((long) user.getUID()); List taxAgents = taxAgentPOS.stream().map(TaxAgentPO::getId).collect(Collectors.toList()); if (CollectionUtils.isEmpty(taxAgents)) { //防止普通用户查询 queryParam.setTaxAgents(Collections.singletonList(-1L)); } else { queryParam.setTaxAgents(taxAgents); } } //福利台账列表 PageInfo pageInfo = getSiAccountBiz(user).listPage(queryParam); Collection insuranceAccountBatchPOS = pageInfo.getList(); List insuranceAccountBatchListDTOS = InsuranceAccountBO.buildAccountBatchDTOList(insuranceAccountBatchPOS); PageInfo pageInfos = new PageInfo<>(insuranceAccountBatchListDTOS, InsuranceAccountBatchListDTO.class); pageInfos.setTotal(pageInfo.getTotal()); pageInfos.setPageNum(queryParam.getCurrent()); pageInfos.setPageSize(queryParam.getPageSize()); List>> operatesPermission = new ArrayList<>(); SalaryWeaTable table = new SalaryWeaTable<>(user, InsuranceAccountBatchListDTO.class); List columns = pageInfos.getColumns(); List weaTableColumn = columns.stream().map(v -> new WeaTableColumn("100", v.getTitle(), v.getKey())).collect(Collectors.toList()); table.setColumns(weaTableColumn); //table.getColumns().get(0).setFixed("left"); // for (int i = 0; i < insuranceAccountBatchListDTOS.size(); i++) { // InsuranceAccountBatchListDTO insuranceAccountBatchListDTO = insuranceAccountBatchListDTOS.get(i); // if (Objects.equals(insuranceAccountBatchListDTO.getBillStatus(), BillStatusEnum.ARCHIVED.getDefaultLabel())) { // table.getOperates().getOperate().get(i).getIndex(); // // resultTable.getOperatesPermission().get(i).get(0).setVisible(false); // resultTable.getOperatesPermission().get(i).get(1).setVisible(false); // resultTable.getOperatesPermission().get(i).get(2).setVisible(false); // resultTable.getOperatesPermission().get(i).get(3).setVisible(false); // resultTable.getOperates().get(4).setOuter(true); // } // if (Objects.equals(insuranceAccountBatchListDTO.getBillStatus(), BillStatusEnum.NOT_ARCHIVED.getDefaultLabel())) { // resultTable.getOperatesPermission().get(i).get(4).setVisible(false); // List insuranceAccountInspectPOS = siAccountInspectService.listByBillMonth(insuranceAccountBatchListDTO.getBillMonth(), tenantKey); // if (CollectionUtils.isEmpty(insuranceAccountInspectPOS)) { // resultTable.getOperatesPermission().get(i).get(2).setVisible(false); // } // } // } WeaResultMsg result = new WeaResultMsg(false); result.putAll(table.makeDataResult()); result.success(); datas.put("pageInfo", pageInfos); datas.put("operatesPermission", operatesPermission); datas.put("dataKey", result.getResultMap()); return datas; // WeaTable resultTable = FormatManager.getInstance() // .genTable(InsuranceAccountBatchListDTO.class, insuranceAccountBatchListDTOPage); // // resultTable.getOperates().forEach(e -> { // if (e.getIndex() == 0) { // e.setOuter(true); // } // }); // resultTable.setModule("hrmsalary"); // resultTable.getColumns().get(0).setFixed("left"); // return WeaResult.success(resultTable); } @Override public Map listCommonPage(InsuranceAccountDetailParam queryParam) { Long employeeId = (long) user.getUID(); Map datas = new HashMap<>(); //正常缴纳列表 PageInfo pageInfo = getSiAccountBiz(user).listCommonPage(queryParam); List insuranceAccountDetailPOS = pageInfo.getList(); //数据组装 List> records = getService(user).buildCommonRecords(insuranceAccountDetailPOS, employeeId); PageInfo> pageInfos = new PageInfo<>(records); pageInfos.setTotal(pageInfo.getTotal()); pageInfos.setPageNum(queryParam.getCurrent()); pageInfos.setPageSize(queryParam.getPageSize()); //动态列组装 List weaTableColumn = getColumnBuildService(user).buildCommonColumnsWithStyle(insuranceAccountDetailPOS, employeeId, SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY, false); WeaTable table = new WeaTable(); table.setPageUID(UUID.randomUUID().toString()); table.setColumns(weaTableColumn); List columns = weaTableColumn.stream().map(v -> new Column(v.getText(), v.getColumn(), v.getColumn())).collect(Collectors.toList()); pageInfos.setColumns(columns); WeaResultMsg result = new WeaResultMsg(false); result.putAll(table.makeDataResult()); result.success(); datas.put("pageInfo", pageInfos); //datas.put("dataKey",result.getResultMap()); return datas; } @Override public Map listCommonPageByName(InsuranceAccountDetailParam queryParam) { //增加查询参数userName if (StringUtils.isNotBlank(queryParam.getUserName())) { queryParam.setUserName(queryParam.getUserName()); } return listCommonPage(queryParam); } @Override public Map listSupplementaryPage(InsuranceAccountDetailParam queryParam) { Long employeeId = (long) user.getUID(); Map datas = new HashMap<>(); //补缴缴纳列表 queryParam.setPaymentStatus(PaymentStatusEnum.REPAIR.getValue()); SalaryPageUtil.start(queryParam.getCurrent(), queryParam.getPageSize()); List list = getInsuranceAccountDetailMapper().list(queryParam); PageInfo pageInfo = new PageInfo<>(list, InsuranceAccountDetailPO.class); List insuranceAccountDetailPOS = pageInfo.getList(); InsuranceAccountDetailPOEncrypt.decryptInsuranceAccountDetailPOList(insuranceAccountDetailPOS); //数据组装 List> records = getService(user).buildCommonRecords(insuranceAccountDetailPOS, employeeId); PageInfo> pageInfos = new PageInfo<>(records); pageInfos.setTotal(pageInfo.getTotal()); pageInfos.setPageNum(queryParam.getCurrent()); pageInfos.setPageSize(queryParam.getPageSize()); //动态列组装 List weaTableColumn = getColumnBuildService(user).buildCommonColumnsWithStyle(insuranceAccountDetailPOS, employeeId, SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY, false); SalaryWeaTable table = new SalaryWeaTable<>(user, InsuranceAccountDetailPO.class); table.setColumns(weaTableColumn); List columns = weaTableColumn.stream().map(v -> new Column(v.getText(), v.getColumn(), v.getColumn())).collect(Collectors.toList()); pageInfos.setColumns(columns); WeaResultMsg result = new WeaResultMsg(false); result.putAll(table.makeDataResult()); result.success(); datas.put("pageInfo", pageInfos); //datas.put("dataKey",result.getResultMap()); return datas; } @Override public Map supplementaryByNameList(InsuranceAccountDetailParam queryParam) { //增加查询参数userName if (StringUtils.isNotBlank(queryParam.getUserName())) { queryParam.setUserName(queryParam.getUserName()); } return listSupplementaryPage(queryParam); } @Override public Map getForm(Map params) { Map apidatas = new HashMap<>(); //条件组 List addGroups = new ArrayList<>(); List conditionItems = new ArrayList<>(); SearchConditionItem datePickerItem = SalaryFormItemUtil.datePickerItem(user, 2, 16, true, 2, "账单月份", "billMonth"); String minDate = SalaryDateUtil.getYearMonth(-1, 0); String maxDate = SalaryDateUtil.getYearMonth(0, 6); datePickerItem.setOtherParams(new HashMap<>()); datePickerItem.getOtherParams().put("minDate", minDate); datePickerItem.getOtherParams().put("maxDate", maxDate); List billMonthList = getInsuranceAccountBatchMapper().listByTimeRange(minDate, maxDate); SiAccountEncrypt.decryptInsuranceAccountBatchList(billMonthList); if (CollectionUtils.isEmpty(billMonthList)) { datePickerItem.getOtherParams().put("disabledData", Collections.emptyList()); } else { datePickerItem.getOtherParams().put("disabledData", billMonthList.stream().map(InsuranceAccountBatchPO::getBillMonth).collect(Collectors.toList())); } datePickerItem.getOtherParams().put("type", "month"); datePickerItem.getOtherParams().put("format", "YYYY-MM"); datePickerItem.getOtherParams().put("showFormat", "YYYY-MM"); conditionItems.add(datePickerItem); SearchConditionItem textareaItem = SalaryFormItemUtil.textareaItem(user, 2, 16, true, 2, 60, "备注", "remarks"); conditionItems.add(textareaItem); addGroups.add(new SearchConditionGroup("常用条件", true, conditionItems)); apidatas.put("billMonth", SalaryDateUtil.getYearMonth(0, 0)); apidatas.put("condition", addGroups); return apidatas; } @Override public void save(AccountParam param) { ValidUtil.doValidator(param); Long employeeId = (long) user.getUID(); String lastName = user.getLastname(); getSiAccountBiz(user).save(param.isFlag(), param, employeeId, lastName); } @Override public void commonAccount(SaveCommonAccountParam param) { ValidUtil.doValidator(param); Long employeeId = (long) user.getUID(); String currentUserName = user.getLastname(); getSiAccountBiz(user).saveCommonAccount(param, employeeId, currentUserName); } @Override public void delete(AccountParam accountParam) { Long employeeId = (long) user.getUID(); getSiAccountBiz(user).delete(accountParam, employeeId); } @Override public void saveCommonAccount(SaveCommonAccountParam accountParam) { Long employeeId = (long) user.getUID(); String currentUserName = user.getLastname(); getSiAccountBiz(user).saveCommonAccount(accountParam, employeeId, currentUserName); } @Override public void saveSupplementaryAccount(SaveSupplementaryAccountParam saveSupplementaryAccountParam) { ValidUtil.doValidator(saveSupplementaryAccountParam); Long employeeId = (long) user.getUID(); String currentUserName = user.getLastname(); getSiAccountBiz(user).saveSupplementaryAccount(saveSupplementaryAccountParam, employeeId, currentUserName); } @Override public void deleteCommonAccount(SaveCommonAccountParam param) { ValidUtil.doValidator(param); Long employeeId = (long) user.getUID(); String currentUserName = user.getLastname(); getSiAccountBiz(user).deleteCommonAccount(param, employeeId, currentUserName); } @Override public void deleteSummplementaryAccount(List supplementAccountBaseParams) { Long employeeId = (long) user.getUID(); String currentUserName = user.getLastname(); getSiAccountBiz(user).deleteSupplementaryAccount(supplementAccountBaseParams, employeeId, currentUserName); } @Override public void file(AccountParam accountParam) { Long employeeId = (long) user.getUID(); String billMonth = accountParam.getBillMonth(); getSiAccountBiz(user).file(billMonth, employeeId, accountParam.getPaymentOrganization()); } @Override public void unconfirmed(Collection ids) { List insuranceAccountInspectPOS = MapperProxyFactory.getProxy(InsuranceAccountInspectMapper.class).getByInspectStatusAndIds(InspectStatusEnum.COMFORED.getValue(), ids); if (CollectionUtils.isNotEmpty(insuranceAccountInspectPOS)) { getInsuranceAccountDetailMapper().batchUnConfirmedInspectDetails(insuranceAccountInspectPOS.stream().map(InsuranceAccountInspectPO::getId).collect(Collectors.toList())); } } @Override public Map buttonCheck(String billMonth) { Map result = new HashMap<>(); List list = MapperProxyFactory.getProxy(InsuranceAccountInspectMapper.class).getByInspectStatusAndBillMonth(InspectStatusEnum.IGNORE.getValue(), billMonth); if (CollectionUtils.isEmpty(list)) { result.put("displayFlag", false); return result; } result.put("displayFlag", true); return result; } @Override public void ignore(Collection ids) { List insuranceAccountInspectPOS = MapperProxyFactory.getProxy(InsuranceAccountInspectMapper.class).getByInspectStatusAndIds(InspectStatusEnum.IGNORE.getValue(), ids); if (CollectionUtils.isNotEmpty(insuranceAccountInspectPOS)) { getInsuranceAccountDetailMapper().batchIgnoreInspectDetails(insuranceAccountInspectPOS.stream().map(InsuranceAccountInspectPO::getId).collect(Collectors.toList())); } } @Override public InsuranceAccountTabDTO tabList(AccountParam build) { InsuranceAccountTabDTO insuranceAccountTabDTO = InsuranceAccountTabDTO.builder().build(); InsuranceAccountBatchPO insuranceAccountBatchPO = getInsuranceAccountBatchMapper().getByBillMonth(build.getBillMonth(), build.getPaymentOrganization()); insuranceAccountBatchPO = SiAccountEncrypt.decryptInsuranceAccountBatch(insuranceAccountBatchPO); boolean isShow = false; if (insuranceAccountBatchPO == null || insuranceAccountBatchPO.getBillStatus() == BillStatusEnum.NOT_ARCHIVED.getValue()) { isShow = true; } if (insuranceAccountBatchPO != null) { insuranceAccountTabDTO.setRemarks(insuranceAccountBatchPO.getRemarks()); } List> tabList = new ArrayList<>(); Map common = new HashMap<>(); common.put("id", "1"); common.put("content", SalaryI18nUtil.getI18nLabel(92265, "正常缴纳")); tabList.add(common); if (isShow) { Map change = new HashMap<>(); change.put("id", "2"); change.put("content", SalaryI18nUtil.getI18nLabel(100509, "异动清单")); tabList.add(change); } Map repair = new HashMap<>(); repair.put("id", "3"); repair.put("content", SalaryI18nUtil.getI18nLabel(92267, "补缴")); tabList.add(repair); Map overView = new HashMap<>(); overView.put("id", "4"); overView.put("content", SalaryI18nUtil.getI18nLabel(99927, "总览")); tabList.add(overView); insuranceAccountTabDTO.setTabList(tabList); insuranceAccountTabDTO.setShow(isShow); insuranceAccountTabDTO.setBillMonth(build.getBillMonth()); return insuranceAccountTabDTO; } @Override public Map changeList(InsuranceAccountDetailParam param) { Map datas = new HashMap<>(); Long employeeId = (long) user.getUID(); SalaryPageUtil.start(param.getCurrent(), param.getPageSize()); List insuranceArchivesEmployeePOS = getInsuranceAccountDetailMapper().changeList(param.getUserName()); PageInfo pageInfo = new PageInfo<>(insuranceArchivesEmployeePOS); List> records = siArchivesBiz.buildTableData(insuranceArchivesEmployeePOS); PageInfo> pageInfos = new PageInfo<>(records); pageInfos.setTotal(pageInfo.getTotal()); pageInfos.setPageNum(param.getCurrent()); pageInfos.setPageSize(param.getPageSize()); List weaTableColumns = siArchivesBiz.buildWeaTableColumns(insuranceArchivesEmployeePOS, employeeId); WeaTable table = new WeaTable(); table.setPageUID(UUID.randomUUID().toString()); table.setColumns(weaTableColumns); table.setTableType(WeaTableType.CHECKBOX); WeaTableOperates weaTableOperates = new WeaTableOperates(); WeaTableOperate weaTableOperate = new WeaTableOperate(); weaTableOperate.setIndex("0"); weaTableOperate.setText("移除"); WeaTableOperate weaTableOperate1 = new WeaTableOperate(); weaTableOperate1.setIndex("1"); weaTableOperate1.setText("添加"); table.setOperates(weaTableOperates); List> permissions = new ArrayList<>(); for (int i = 0; i < records.size(); i++) { List permission = new ArrayList<>(); if (UserStatusEnum.DEPARTURE.getDefaultLabel().equals(records.get(i).get("status"))) { permission.add(new Permission(true, false)); permission.add(new Permission(false, false)); permissions.add(permission); } if (UserStatusEnum.DEPARTURE.getDefaultLabel().equals(records.get(i).get("status"))) { permission.add(new Permission(false, false)); permission.add(new Permission(true, false)); permissions.add(permission); } } WeaResultMsg result = new WeaResultMsg(false); result.putAll(table.makeDataResult()); result.success(); datas.put("permissions", permissions); datas.put("pageInfo", pageInfos); datas.put("dataKey", result.getResultMap()); return datas; } @Override public void accountInspect(InspectAccountParam param) { Long employeeId = (long) user.getUID(); ValidUtil.doValidator(param); String currentUserName = user.getLastname(); getSiAccountBiz(user).accountInspect(param.getIds(), param.getBillMonth(), employeeId, currentUserName); } @Override public Map getInspectTable(InsuranceAccountDetailParam param) { Map datas = new HashMap<>(); SalaryPageUtil.start(param.getCurrent(), param.getPageSize()); List insuranceAccountInspectPOS = MapperProxyFactory.getProxy(InsuranceAccountInspectMapper.class).getByBillMonth(param.getBillMonth()); List> records = getService(user).buildInspectRecords(insuranceAccountInspectPOS); PageInfo> pageInfos = new PageInfo<>(records); pageInfos.setTotal(records.size()); pageInfos.setPageNum(param.getCurrent()); pageInfos.setPageSize(param.getPageSize()); List weaTableColumns = getColumnBuildService(user).buildInspectColumns(insuranceAccountInspectPOS); WeaTable table = new WeaTable(); table.setPageUID(UUID.randomUUID().toString()); table.setColumns(weaTableColumns); table.setTableType(WeaTableType.CHECKBOX); WeaTableOperates weaTableOperates = new WeaTableOperates(); WeaTableOperate weaTableOperate = new WeaTableOperate(); weaTableOperate.setIndex("0"); weaTableOperate.setText("忽略"); WeaTableOperate weaTableOperate1 = new WeaTableOperate(); weaTableOperate1.setIndex("1"); weaTableOperate1.setText("重置"); table.setOperates(weaTableOperates); List> permissions = new ArrayList<>(); for (int i = 0; i < records.size(); i++) { List permission = new ArrayList<>(); Permission permissionCheckBox = new Permission(); if (InspectStatusEnum.IGNORE.getValue() == records.get(i).get("inspectStatus")) { permissionCheckBox.setVisible(true); permissionCheckBox.setDisabled(false); permission.add(new Permission(true, false)); permission.add(new Permission(false, true)); permissions.add(permission); } if (InspectStatusEnum.COMFORED.getValue() == records.get(i).get("inspectStatus")) { permissionCheckBox.setVisible(true); permissionCheckBox.setDisabled(true); permission.add(new Permission(false, true)); permission.add(new Permission(true, false)); permissions.add(permission); } } WeaResultMsg result = new WeaResultMsg(false); result.putAll(table.makeDataResult()); result.success(); datas.put("permissions", permissions); datas.put("pageInfo", pageInfos); datas.put("dataKey", result.getResultMap()); return datas; } @Override public Map getCommonForm(Map params) { Map apidatas = new HashMap<>(); //条件组 List addGroups = new ArrayList<>(); List conditionItems = new ArrayList<>(); List conditionItem = new ArrayList<>(); SearchConditionItem includes = SalaryFormItemUtil.browserItem(user, 18, 12, 2, true, "对象", "required", "17", "includes"); conditionItems.add(includes); SearchConditionItem excludes = SalaryFormItemUtil.browserItem(user, 18, 12, 2, true, "选择人员", "required", "17", "excludes"); conditionItem.add(excludes); addGroups.add(new SearchConditionGroup("人员范围", true, conditionItems)); addGroups.add(new SearchConditionGroup("人员范围排除", true, conditionItem)); apidatas.put("condition", addGroups); return apidatas; } @Override public Map getSupplementaryForm(Map params) { Map apidatas = new HashMap<>(); //条件组 List addGroups = new ArrayList<>(); List condition = new ArrayList<>(); List conditionItems = new ArrayList<>(); List conditionItem = new ArrayList<>(); SearchConditionItem billMonthList = SalaryFormItemUtil.datePickerItem(user, 2, 16, true, 2, "账单月份", "billMonth"); billMonthList.setMultiple(true); billMonthList.setOtherParams(new HashMap<>()); billMonthList.getOtherParams().put("type", "months"); billMonthList.getOtherParams().put("format", "YYYY-MM"); billMonthList.getOtherParams().put("showFormat", "YYYY-MM"); billMonthList.setMultiple(true); condition.add(billMonthList); SearchConditionItem billProjects = SalaryFormItemUtil.selectItem(user, buildBillProjectsOptions(), 2, 16, 6, true, "补缴项目", "projects"); billProjects.setDetailtype(2); condition.add(billProjects); SearchConditionItem includes = SalaryFormItemUtil.browserItem(user, 18, 6, 3, true, "对象", "required", "17", "includes"); conditionItems.add(includes); // SearchConditionItem excludes = SalaryFormItemUtil.browserItem(user, 18, 6, 2, true, "选择人员", "required", "17", "excludes"); // excludes.setViewAttr(2); // conditionItem.add(excludes); addGroups.add(new SearchConditionGroup("基础信息", true, condition)); addGroups.add(new SearchConditionGroup("人员范围", true, conditionItems)); // addGroups.add(new SearchConditionGroup("人员范围排除",true,conditionItem)); apidatas.put("condition", addGroups); return apidatas; } @Override public PageInfo overView(InsuranceAccountDetailParam queryParam) { PageInfo pageInfos = getSiAccountBiz(user).overView(queryParam); return pageInfos; } @Override public List> welfareData(String billMonth, List employeeIds, Long taxAgentId) { InsuranceAccountBatchPO insuranceAccountBatchPO = getInsuranceAccountBatchMapper().getByBillMonth(billMonth, taxAgentId); insuranceAccountBatchPO = SiAccountEncrypt.decryptInsuranceAccountBatch(insuranceAccountBatchPO); if (insuranceAccountBatchPO == null || Objects.equals(BillStatusEnum.NOT_ARCHIVED.getValue(), insuranceAccountBatchPO.getBillStatus())) { return Lists.newArrayList(); } List list = queryList(billMonth, taxAgentId, employeeIds); List> result = new ArrayList<>(); list.stream().forEach(item -> { Map record = new HashMap<>(); record.put("employeeId", item.getEmployeeId()); if (StringUtils.isNotEmpty(item.getSocialPerJson())) { Map socialJson = JSON.parseObject(item.getSocialPerJson(), new HashMap().getClass()); socialJson.forEach((k, v) -> { record.put(k + "socialPer", v); }); } if (StringUtils.isNotEmpty(item.getSocialComJson())) { Map socialJson = JSON.parseObject(item.getSocialComJson(), new HashMap().getClass()); socialJson.forEach((k, v) -> { record.put(k + "socialCom", v); }); } record.put("socialPerSum", item.getSocialPerSum()); record.put("socialComSum", item.getSocialComSum()); if (StringUtils.isNotEmpty(item.getFundPerJson())) { Map fundPerJson = JSON.parseObject(item.getFundPerJson(), new HashMap().getClass()); fundPerJson.forEach((k, v) -> { record.put(k + "fundPer", v); }); } if (StringUtils.isNotEmpty(item.getFundComJson())) { Map fundPerJson = JSON.parseObject(item.getFundComJson(), new HashMap().getClass()); fundPerJson.forEach((k, v) -> { record.put(k + "fundCom", v); }); } record.put("fundPerSum", item.getFundPerSum()); record.put("fundComSum", item.getFundComSum()); if (StringUtils.isNotEmpty(item.getOtherPerJson())) { Map fundPerJson = JSON.parseObject(item.getOtherPerJson(), new HashMap().getClass()); fundPerJson.forEach((k, v) -> { record.put(k + "otherPer", v); }); } if (StringUtils.isNotEmpty(item.getOtherComJson())) { Map fundComJson = JSON.parseObject(item.getOtherComJson(), new HashMap().getClass()); if (fundComJson != null) { } fundComJson.forEach((k, v) -> { record.put(k + "otherCom", v); }); } record.put("otherPerSum", item.getOtherPerSum()); record.put("otherComSum", item.getOtherComSum()); record.put("perSum", item.getPerSum()); record.put("comSum", item.getComSum()); result.add(record); }); return result; } @Override public Map welfareColumns() { List listAll = MapperProxyFactory.getProxy(ICategoryMapper.class).listAll(); List list = new ArrayList<>(); if (CollectionUtils.isNotEmpty(listAll)) { list.addAll(listAll); } Map result = new LinkedHashMap<>(); result.put(SalaryI18nUtil.getI18nLabel(100393, "个人合计"), "perSum"); result.put(SalaryI18nUtil.getI18nLabel(100388, "社保个人合计"), "socialPerSum"); result.put(SalaryI18nUtil.getI18nLabel(100390, "公积金个人合计"), "fundPerSum"); result.put(SalaryI18nUtil.getI18nLabel(100392, "其他福利个人合计"), "otherPerSum"); Map categoryIdNameMap = getSICategoryService(user).categoryIdNameMap(); list.stream().forEach(item -> { if (Objects.equals(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), item.getWelfareType())) { result.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(87159, "个人"), item.getId() + "socialPer"); } if (Objects.equals(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), item.getWelfareType())) { result.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(87159, "个人"), item.getId() + "fundPer"); } if (Objects.equals(WelfareTypeEnum.OTHER.getValue(), item.getWelfareType())) { result.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(87159, "个人"), item.getId() + "otherPer"); } }); result.put(SalaryI18nUtil.getI18nLabel(100397, "单位合计"), "comSum"); result.put(SalaryI18nUtil.getI18nLabel(100394, "社保单位合计"), "socialComSum"); result.put(SalaryI18nUtil.getI18nLabel(100395, "公积金单位合计"), "fundComSum"); result.put(SalaryI18nUtil.getI18nLabel(100396, "其他福利单位合计"), "otherComSum"); list.stream().forEach(item -> { if (Objects.equals(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), item.getWelfareType())) { result.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(100289, "单位"), item.getId() + "socialCom"); } if (Objects.equals(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), item.getWelfareType())) { result.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(100289, "单位"), item.getId() + "fundCom"); } if (Objects.equals(WelfareTypeEnum.OTHER.getValue(), item.getWelfareType())) { result.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(100289, "单位"), item.getId() + "otherCom"); } }); return result; } public List buildBillProjectsOptions() { List options = new ArrayList<>(); options.add(new SearchConditionOption(String.valueOf(ProjectTypeEnum.ALL.getValue()), SalaryI18nUtil.getI18nLabel(ProjectTypeEnum.ALL.getLabelId(), ProjectTypeEnum.ALL.getDefaultLabel()))); options.add(new SearchConditionOption(String.valueOf(ProjectTypeEnum.SOCIAL.getValue()), SalaryI18nUtil.getI18nLabel(ProjectTypeEnum.SOCIAL.getLabelId(), ProjectTypeEnum.SOCIAL.getDefaultLabel()))); options.add(new SearchConditionOption(String.valueOf(ProjectTypeEnum.FUND.getValue()), SalaryI18nUtil.getI18nLabel(ProjectTypeEnum.FUND.getLabelId(), ProjectTypeEnum.FUND.getDefaultLabel()))); options.add(new SearchConditionOption(String.valueOf(ProjectTypeEnum.OTHER.getValue()), SalaryI18nUtil.getI18nLabel(ProjectTypeEnum.OTHER.getLabelId(), ProjectTypeEnum.OTHER.getDefaultLabel()))); options.add(new SearchConditionOption(String.valueOf(ProjectTypeEnum.ENDOWMENT_INSURANCE.getValue()), SalaryI18nUtil.getI18nLabel(ProjectTypeEnum.ENDOWMENT_INSURANCE.getLabelId(), ProjectTypeEnum.ENDOWMENT_INSURANCE.getDefaultLabel()))); options.add(new SearchConditionOption(String.valueOf(ProjectTypeEnum.MEDICAL_INSURANCE.getValue()), SalaryI18nUtil.getI18nLabel(ProjectTypeEnum.MEDICAL_INSURANCE.getLabelId(), ProjectTypeEnum.MEDICAL_INSURANCE.getDefaultLabel()))); return options; } public List queryList(String billMonth, Long taxAgentId, List employeeIds) { List list = buildNewInsuranceDetailPOS(getInsuranceAccountDetailMapper().queryList(billMonth, taxAgentId, employeeIds)); // InsuranceAccountDetailPOEncrypt.decryptInsuranceAccountDetailPOList(list); return list; } public List buildNewInsuranceDetailPOS(List list) { List newList = new ArrayList<>(); if (CollectionUtils.isEmpty(list)) { return newList; } Map> employeeMap = list.stream().filter(item -> item.getEmployeeId() != null) .collect(Collectors.groupingBy(InsuranceAccountDetailPO::getEmployeeId)); for (Map.Entry> entry : employeeMap.entrySet()) { Long k = entry.getKey(); List v = entry.getValue(); InsuranceAccountDetailPO insuranceAccountDetailPO = new InsuranceAccountDetailPO(); insuranceAccountDetailPO.setEmployeeId(k); Map socialPerMap = new HashMap<>(); Map fundPerMap = new HashMap<>(); Map otherPerMap = new HashMap<>(); Map socialComMap = new HashMap<>(); Map fundComMap = new HashMap<>(); Map otherComMap = new HashMap<>(); BigDecimal socialPer = new BigDecimal("0"); BigDecimal socialCom = new BigDecimal("0"); BigDecimal fundPer = new BigDecimal("0"); BigDecimal fundCom = new BigDecimal("0"); BigDecimal otherPer = new BigDecimal("0"); BigDecimal otherCom = new BigDecimal("0"); BigDecimal perSum = new BigDecimal("0"); BigDecimal comSum = new BigDecimal("0"); for (InsuranceAccountDetailPO item : v) { InsuranceAccountDetailPOEncrypt.decryptItem(item); BigDecimal socialPerSum = StringUtils.isBlank(item.getSocialPerSum()) ? new BigDecimal("0") : new BigDecimal(item.getSocialPerSum()); BigDecimal socialComSum = StringUtils.isBlank(item.getSocialComSum()) ? new BigDecimal("0") : new BigDecimal(item.getSocialComSum()); BigDecimal fundPerSum = StringUtils.isBlank(item.getFundPerSum()) ? new BigDecimal("0") : new BigDecimal(item.getFundPerSum()); BigDecimal fundComSum = StringUtils.isBlank(item.getFundComSum()) ? new BigDecimal("0") : new BigDecimal(item.getFundComSum()); BigDecimal otherPerSum = StringUtils.isBlank(item.getOtherPerSum()) ? new BigDecimal("0") : new BigDecimal(item.getOtherPerSum()); BigDecimal otherComSum = StringUtils.isBlank(item.getOtherComSum()) ? new BigDecimal("0") : new BigDecimal(item.getOtherComSum()); BigDecimal perSumItem = StringUtils.isBlank(item.getPerSum()) ? new BigDecimal("0") : new BigDecimal(item.getPerSum()); BigDecimal comSumItem = StringUtils.isBlank(item.getComSum()) ? new BigDecimal("0") : new BigDecimal(item.getComSum()); socialPer = socialPer.add(socialPerSum); socialCom = socialCom.add(socialComSum); fundPer = fundPer.add(fundPerSum); fundCom = fundCom.add(fundComSum); otherPer = otherPer.add(otherPerSum); otherCom = otherCom.add(otherComSum); perSum = perSum.add(perSumItem); comSum = comSum.add(comSumItem); if (StringUtils.isNotBlank(item.getSocialPerJson())) { Map socialJson = JSON.parseObject(item.getSocialPerJson(), new HashMap().getClass()); if (socialJson != null) { socialJson.forEach((insuranceId, num) -> { if (socialPerMap.get(insuranceId) == null) { socialPerMap.put(insuranceId, num); } else { String oldNum = socialPerMap.get(insuranceId); BigDecimal insuanceNum = new BigDecimal("0"); BigDecimal oldDecimal = new BigDecimal(oldNum); BigDecimal numDecimal = num == null ? new BigDecimal("0") : new BigDecimal(num); insuanceNum = insuanceNum.add(numDecimal).add(oldDecimal); socialPerMap.put(insuranceId, insuanceNum.toPlainString()); } }); } } if (StringUtils.isNotBlank(item.getSocialComJson())) { Map socialJson = JSON.parseObject(item.getSocialComJson(), new HashMap().getClass()); if (socialJson != null) { socialJson.forEach((insuranceId, num) -> { if (socialComMap.get(insuranceId) == null) { socialComMap.put(insuranceId, num); } else { String oldNum = socialComMap.get(insuranceId); BigDecimal insuanceNum = new BigDecimal("0"); BigDecimal oldDecimal = new BigDecimal(oldNum); BigDecimal numDecimal = num == null ? new BigDecimal("0") : new BigDecimal(num); insuanceNum = insuanceNum.add(numDecimal).add(oldDecimal); socialComMap.put(insuranceId, insuanceNum.toPlainString()); } }); } } if (StringUtils.isNotBlank(item.getFundPerJson())) { Map fundJson = JSON.parseObject(item.getFundPerJson(), new HashMap().getClass()); if (fundJson != null) { fundJson.forEach((insuranceId, num) -> { if (fundPerMap.get(insuranceId) == null) { fundPerMap.put(insuranceId, num); } else { String oldNum = fundPerMap.get(insuranceId); BigDecimal insuanceNum = new BigDecimal("0"); BigDecimal oldDecimal = new BigDecimal(oldNum); BigDecimal numDecimal = num == null ? new BigDecimal("0") : new BigDecimal(num); insuanceNum = insuanceNum.add(numDecimal).add(oldDecimal); fundPerMap.put(insuranceId, insuanceNum.toPlainString()); } }); } } if (StringUtils.isNotBlank(item.getFundComJson())) { Map fundJson = JSON.parseObject(item.getFundComJson(), new HashMap().getClass()); if (fundJson != null) { fundJson.forEach((insuranceId, num) -> { if (fundComMap.get(insuranceId) == null) { fundComMap.put(insuranceId, num); } else { String oldNum = fundComMap.get(insuranceId); BigDecimal insuanceNum = new BigDecimal("0"); BigDecimal oldDecimal = new BigDecimal(oldNum); BigDecimal numDecimal = num == null ? new BigDecimal("0") : new BigDecimal(num); insuanceNum = insuanceNum.add(numDecimal).add(oldDecimal); fundComMap.put(insuranceId, insuanceNum.toPlainString()); } }); } } if (StringUtils.isNotBlank(item.getOtherPerJson())) { Map otherJson = JSON.parseObject(item.getOtherPerJson(), new HashMap().getClass()); if (otherJson != null) { otherJson.forEach((insuranceId, num) -> { if (otherPerMap.get(insuranceId) == null) { otherPerMap.put(insuranceId, num); } else { String oldNum = otherPerMap.get(insuranceId); BigDecimal insuanceNum = new BigDecimal("0"); BigDecimal oldDecimal = new BigDecimal(oldNum); BigDecimal numDecimal = num == null ? new BigDecimal("0") : new BigDecimal(num); insuanceNum = insuanceNum.add(numDecimal).add(oldDecimal); otherPerMap.put(insuranceId, insuanceNum.toPlainString()); } }); } } if (StringUtils.isNotBlank(item.getOtherComJson())) { Map otherJson = JSON.parseObject(item.getOtherComJson(), new HashMap().getClass()); if (otherJson != null) { otherJson.forEach((insuranceId, num) -> { if (otherComMap.get(insuranceId) == null) { otherComMap.put(insuranceId, num); } else { String oldNum = otherComMap.get(insuranceId); BigDecimal insuanceNum = new BigDecimal("0"); BigDecimal oldDecimal = new BigDecimal(oldNum); BigDecimal numDecimal = num == null ? new BigDecimal("0") : new BigDecimal(num); insuanceNum = insuanceNum.add(numDecimal).add(oldDecimal); otherComMap.put(insuranceId, insuanceNum.toPlainString()); } }); } } } insuranceAccountDetailPO.setSocialPerJson(JSON.toJSONString(socialPerMap)); insuranceAccountDetailPO.setSocialComJson(JSON.toJSONString(socialComMap)); insuranceAccountDetailPO.setFundPerJson(JSON.toJSONString(fundPerMap)); insuranceAccountDetailPO.setFundComJson(JSON.toJSONString(fundComMap)); insuranceAccountDetailPO.setOtherPerJson(JSON.toJSONString(otherPerMap)); insuranceAccountDetailPO.setOtherComJson(JSON.toJSONString(otherComMap)); insuranceAccountDetailPO.setSocialPerSum(socialPer.toPlainString()); insuranceAccountDetailPO.setSocialComSum(socialCom.toPlainString()); insuranceAccountDetailPO.setFundPerSum(fundPer.toPlainString()); insuranceAccountDetailPO.setFundComSum(fundCom.toPlainString()); insuranceAccountDetailPO.setOtherPerSum(otherPer.toPlainString()); insuranceAccountDetailPO.setOtherComSum(otherCom.toPlainString()); insuranceAccountDetailPO.setPerSum(perSum.toPlainString()); insuranceAccountDetailPO.setComSum(comSum.toPlainString()); newList.add(insuranceAccountDetailPO); } return newList; } @Override public List allInspects(Collection ids, String billMonth) { InsuranceAccountInspectMapper siAccountInspectMapper = MapperProxyFactory.getProxy(InsuranceAccountInspectMapper.class); List list = siAccountInspectMapper.getList(billMonth, InspectStatusEnum.IGNORE.getValue(), ids); if (CollectionUtils.isNotEmpty(list)) { return list; } return Collections.emptyList(); } @Override public Collection getAdminTaxAgentList() { return getTaxAgentService(user).listAllTaxAgentsAsAdmin((long) user.getUID()); } @Override public void socialSecurityBenefitsRecalculate(InsuranceAccountBatchPO param) { int num = getSiAccountBiz(user).checkIfBusinessaccounting(param); //表示已经被核算过不能重新核算 if (num > 0) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98831, "已被薪酬核算给核算过,无法重新核算!")); } param.setBillStatus(0); getSiAccountBiz(user).updateById(param); } }