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.param.ExtEmpImportParam; import com.engine.salary.entity.extemp.param.ExtEmpQueryParam; import com.engine.salary.entity.extemp.param.ExtEmpSaveParam; import com.engine.salary.entity.extemp.po.ExtEmpPO; import com.engine.salary.entity.hrm.DeptInfo; import com.engine.salary.entity.hrm.SubCompanyInfo; import com.engine.salary.entity.salarysob.param.SalarySobRangeEmpQueryParam; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.extemp.ExternalEmployeeMapper; import com.engine.salary.service.ExtEmpService; import com.engine.salary.service.SalaryEmployeeService; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.excel.ExcelComment; import com.engine.salary.util.excel.ExcelParseHelper; import com.engine.salary.util.excel.ExcelSupport; import com.engine.salary.util.excel.ExcelUtilPlus; 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 dm.jdbc.util.IdGenerator; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.BeanUtils; import weaver.file.ImageFileManager; import weaver.hrm.User; import java.io.InputStream; import java.util.*; import java.util.stream.Collectors; import static com.engine.salary.util.excel.ExcelSupport.EXCEL_TYPE_XLSX; /** * 累计专项 *

Copyright: Copyright (c) 2022

*

Company: 泛微软件

* * @author qiantao * @version 1.0 **/ public class ExtEmpServiceImpl extends Service implements ExtEmpService { private ExternalEmployeeMapper getExternalEmployeeMapper() { return MapperProxyFactory.getProxy(ExternalEmployeeMapper.class); } private SalaryEmployeeService getSalaryEmployeeService(User user) { return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } @Override public List list(ExtEmpQueryParam param) { return getExternalEmployeeMapper().listSome(ExtEmpPO.builder().username(param.getUsername()).build()); } @Override public PageInfo listPage(ExtEmpQueryParam param) { List extEmpPOS = list(param); return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), extEmpPOS, ExtEmpPO.class); } @Override public void save(ExtEmpSaveParam param) { List extEmpPOS = getExternalEmployeeMapper().listSome(ExtEmpPO.builder().username(param.getUsername()).build()); if (CollectionUtils.isNotEmpty(extEmpPOS)) { throw new SalaryRunTimeException("姓名已存在!"); } ExtEmpPO po = new ExtEmpPO(); BeanUtils.copyProperties(param, po); po.setId(IdGenerator.generate()); po.setStatus("2"); po.setCreator((long) user.getUID()); po.setModifier((long) user.getUID()); Date now = new Date(); po.setCreateTime(now); po.setUpdateTime(now); po.setDeleteType(0); getExternalEmployeeMapper().insertIgnoreNull(po); } @Override public void update(ExtEmpSaveParam param) { ExtEmpPO oldPO = getExternalEmployeeMapper().getById(param.getId()); if (!StringUtils.equals(oldPO.getUsername(), param.getUsername())) { List extEmpPOS = getExternalEmployeeMapper().listSome(ExtEmpPO.builder().username(param.getUsername()).build()); if (CollectionUtils.isNotEmpty(extEmpPOS)) { throw new SalaryRunTimeException("姓名已存在!"); } } ExtEmpPO po = new ExtEmpPO(); BeanUtils.copyProperties(param, po); po.setModifier((long) user.getUID()); Date now = new Date(); po.setUpdateTime(now); getExternalEmployeeMapper().updateIgnoreNull(po); } @Override public void delete(Collection ids) { if (CollectionUtils.isNotEmpty(ids)) { ids.forEach(getExternalEmployeeMapper()::delete); } } @Override public DataCollectionEmployee getEmployeeById(Long id) { ExtEmpPO po = getExternalEmployeeMapper().getById(id); return cover(po); } @Override public List getEmployeeByIds(List ids) { if (CollectionUtils.isEmpty(ids)) { return new ArrayList<>(); } List extEmpPOS = new ArrayList<>(); List> partition = Lists.partition(ids, 500); partition.forEach(list -> extEmpPOS.addAll(getExternalEmployeeMapper().listSome(ExtEmpPO.builder().ids(list).build()))); return coverList(extEmpPOS); } @Override public List listByParams(List includeQueryParams) { List emps = new ArrayList<>(); List> partition = Lists.partition(includeQueryParams, 100); partition.forEach(list -> { emps.addAll(getExternalEmployeeMapper().listByParams(list)); }); return emps; } @Override public List listEmployee() { return getExternalEmployeeMapper().listEmployee(); } @Override public Collection getEmployeeByIdsAll(List ids) { List employeeList = new ArrayList<>(); List> partition = Lists.partition(ids, 1000); partition.forEach(e -> { List employeeByIdsAll = getExternalEmployeeMapper().getEmployeeByIdsAll(e); employeeList.addAll(employeeByIdsAll); }); return employeeList; } @Override public Collection listAllForReport() { return getExternalEmployeeMapper().listAllForReport(); } @Override public ExtEmpPO getById(Long id) { ExtEmpPO po = getExternalEmployeeMapper().getById(id); if (po != null) { if (po.getDepartmentId() != null) { List deptInfoList = getSalaryEmployeeService(user).getDeptInfoList(Collections.singletonList(po.getDepartmentId())); if (CollectionUtils.isNotEmpty(deptInfoList)) { po.setDepartmentOrgName(deptInfoList.get(0).getName()); } } if (po.getSubcompanyId() != null) { List subInfoList = getSalaryEmployeeService(user).getSubCompanyInfoList(Collections.singletonList(po.getSubcompanyId())); if (CollectionUtils.isNotEmpty(subInfoList)) { po.setSubcompanyOrgName(subInfoList.get(0).getName()); } } } return po; } public DataCollectionEmployee cover(ExtEmpPO extPo) { if (extPo == null) { return null; } DataCollectionEmployee employee = new DataCollectionEmployee(); BeanUtils.copyProperties(extPo, employee); employee.setEmployeeId(extPo.getId()); employee.setExtEmp(true); return employee; } public List coverList(List extEmps) { if (CollectionUtils.isEmpty(extEmps)) { return new ArrayList<>(); } return extEmps.stream().map(emp -> { DataCollectionEmployee employee = new DataCollectionEmployee(); BeanUtils.copyProperties(emp, employee); employee.setEmployeeId(emp.getId()); employee.setExtEmp(true); return employee; }).collect(Collectors.toList()); } @Override public XSSFWorkbook exportImportTemplate() { // 模板表头 List headerList = Lists.newArrayList( SalaryI18nUtil.getI18nLabel(25034, "姓名"), SalaryI18nUtil.getI18nLabel(27511, "部门"), SalaryI18nUtil.getI18nLabel(33553, "分部"), SalaryI18nUtil.getI18nLabel(1516, "入职日期"), SalaryI18nUtil.getI18nLabel(125238, "手机号"), SalaryI18nUtil.getI18nLabel(1933, "工号"), SalaryI18nUtil.getI18nLabel(1887, "身份证号码"), SalaryI18nUtil.getI18nLabel(0, "本人开户的银行卡卡号"), SalaryI18nUtil.getI18nLabel(0, "本人开户的银行卡开户支行全称")); List dataIndexList = Lists.newArrayList("username", "departmentName", "subcompanyName", "companystartdate", "mobile", "workcode", "idNo", "bankCardNum", "bankName"); // excel导出的数据 List> rows = new ArrayList<>(); rows.add(headerList); // 注释 List excelComments = Lists.newArrayList(); excelComments.add(new ExcelComment(0, 0, 1, 2, SalaryI18nUtil.getI18nLabel(30036, "必填"))); excelComments.add(new ExcelComment(3, 0, 4, 2, SalaryI18nUtil.getI18nLabel(542348, "格式样例为'2022-01-01'、'2022/1/1'"))); String sheetName = "非系统人员导入模板"; return ExcelUtilPlus.genWorkbookV2(rows, sheetName, excelComments); } @Override public Map previewImportExtEmp(ExtEmpImportParam param) { //参数校验 ValidUtil.doValidator(param); Map map = new HashMap<>(); InputStream fileInputStream = null; try { fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); map.put("headers", ExcelSupport.getSheetHeader(sheet, 0)); map.put("list", ExcelParseHelper.parse2List(sheet, 1)); return map; } finally { IOUtils.closeQuietly(fileInputStream); } } @Override public Map importExtEmp(ExtEmpImportParam param) { return null; } }