package com.engine.salary.service.impl; import com.api.browser.bean.SearchConditionGroup; import com.api.browser.bean.SearchConditionItem; import com.cloudstore.eccom.pc.table.WeaTableColumn; 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.component.SalaryWeaTable; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO; import com.engine.salary.entity.siaccount.bo.InsuranceAccountBO; import com.engine.salary.entity.siaccount.dto.InsuranceAccountBatchListDTO; import com.engine.salary.entity.siaccount.param.AccountParam; import com.engine.salary.entity.siaccount.param.InsuranceAccountBatchParam; import com.engine.salary.entity.siaccount.param.InsuranceAccountDetailParam; import com.engine.salary.entity.siaccount.param.Permission; import com.engine.salary.entity.siaccount.po.InsuranceAccountBatchPO; import com.engine.salary.entity.siaccount.po.InsuranceAccountDetailPO; import com.engine.salary.enums.siaccount.BillStatusEnum; import com.engine.salary.enums.siaccount.PaymentStatusEnum; import com.engine.salary.mapper.datacollection.EmployMapper; import com.engine.salary.mapper.siaccount.InsuranceAccountBatchMapper; import com.engine.salary.mapper.siaccount.InsuranceAccountDetailMapper; import com.engine.salary.service.ColumnBuildService; import com.engine.salary.service.RecordsBuildService; import com.engine.salary.service.SIAccountService; import java.util.*; import java.util.stream.Collectors; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryFormItemUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.valid.ValidUtil; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import weaver.hrm.User; /** * @Author weaver_cl * @Description: TODO * @Date 2022/4/11 * @Version V1.0 **/ public class SIAccountServiceImpl extends Service implements SIAccountService { private SIAccountBiz siAccountBiz = new SIAccountBiz(); public RecordsBuildService getService(User user) { return ServiceUtil.getService(RecordsBuildServiceImpl.class,user); } public ColumnBuildService getColumnBuildService(User user) { return ServiceUtil.getService(ColumnBuildServiceImpl.class,user); } @Override public Map listPage(InsuranceAccountBatchParam queryParam) { Long employeeId = (long)user.getUID(); Map datas = new HashMap<>(); //福利台账列表 PageInfo pageInfo = siAccountBiz.listPage(queryParam,employeeId); Collection insuranceAccountBatchPOS = pageInfo.getList(); List insuranceAccountBatchListDTOS = InsuranceAccountBO.buildAccountBatchDTOList(insuranceAccountBatchPOS); PageInfo pageInfos = new PageInfo<>(insuranceAccountBatchListDTOS,InsuranceAccountBatchListDTO.class); pageInfos.setTotal(insuranceAccountBatchListDTOS.size()); pageInfos.setPageNum(queryParam.getCurrent()); pageInfos.setPageSize(queryParam.getPageSize()); List>> operatesPermission = new ArrayList<>(); SalaryWeaTable table = new SalaryWeaTable<>(user, InsuranceAccountBatchListDTO.class); //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 = siAccountBiz.listCommonPage(queryParam); List insuranceAccountDetailPOS = pageInfo.getList(); //数据组装 List> records = getService(user).buildCommonRecords(insuranceAccountDetailPOS, employeeId); PageInfo> pageInfos = new PageInfo>(records); pageInfos.setTotal(records.size()); 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, SalaryArchiveListDTO.class); table.setColumns(weaTableColumn); 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())) { List employeeIdsByUserName = MapperProxyFactory.getProxy(EmployMapper.class).getEmployeeIdsByUserName(queryParam.getUserName()); List employeeIds = employeeIdsByUserName.stream().map(DataCollectionEmployee::getEmployeeId).collect(Collectors.toList()); queryParam.setEmployeeIds(employeeIds); } return listCommonPage(queryParam); } @Override public Map listSupplementaryPage(InsuranceAccountDetailParam queryParam) { Long employeeId = (long)user.getUID(); Map datas = new HashMap<>(); //正常缴纳列表 queryParam.setPaymentStatus(PaymentStatusEnum.REPAIR.getValue()); List list = MapperProxyFactory.getProxy(InsuranceAccountDetailMapper.class).list(queryParam); PageInfo pageInfo = new PageInfo<>(list,InsuranceAccountDetailPO.class); List insuranceAccountDetailPOS = pageInfo.getList(); //数据组装 List> records = getService(user).buildCommonRecords(insuranceAccountDetailPOS, employeeId); PageInfo> pageInfos = new PageInfo>(records); pageInfos.setTotal(records.size()); 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, SalaryArchiveListDTO.class); table.setColumns(weaTableColumn); 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())) { List employeeIdsByUserName = MapperProxyFactory.getProxy(EmployMapper.class).getEmployeeIdsByUserName(queryParam.getUserName()); List employeeIds = employeeIdsByUserName.stream().map(DataCollectionEmployee::getEmployeeId).collect(Collectors.toList()); queryParam.setEmployeeIds(employeeIds); } 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, 1, "账单月份", "billMonth"); String minDate = SalaryDateUtil.getYearMonth(-1, 0); String maxDate = SalaryDateUtil.getYearMonth(0, 6); datePickerItem.getOtherParams().put("minDate",minDate); datePickerItem.getOtherParams().put("maxDate",maxDate); InsuranceAccountBatchParam queryParam = InsuranceAccountBatchParam.builder().startTime(minDate).endTime(maxDate).build(); List billMonthList = MapperProxyFactory.getProxy(InsuranceAccountBatchMapper.class).list(queryParam); 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, 1, 60, "备注", "remarks"); conditionItems.add(textareaItem); addGroups.add(new SearchConditionGroup("常用条件",true,conditionItems)); apidatas.put("billMonth", SalaryDateUtil.getYearMonth(0, 0)); apidatas.put("condition",addGroups); return apidatas; } /** * 保存月份和备注信息并进入核算 * * @param param 请求入参 *

* 接口逻辑: * 1、检查当前月份是否已经归档,如果已经归档直接返回,状态为未归档继续执行 * 2、从基础人员表左连接部门和离职表以及档案表,查询出来符合缴纳的人员清单 * (1)离职日期在当月一号零时之后 * (2)档案中配置了福利缴纳开始缴纳月,开始时间包含当前月 * 3、forkjoin核算并入库 * 4、更新台账 */ @Override public Map save(AccountParam param) { Map apidatas = new HashMap<>(); Long employeeId = (long)user.getUID(); String lastname = user.getLastname(); ValidUtil.doValidator(param); siAccountBiz.save(true,param,employeeId,lastname); return apidatas; } }