package com.engine.salary.service.impl; import com.engine.core.impl.Service; import com.engine.salary.entity.datacollection.param.AttendQuoteFieldQueryParam; import com.engine.salary.service.AttendQuoteFieldService; import java.util.Map; /** * 数据采集-考勤引用字段 *

Copyright: Copyright (c) 2022

*

Company: 泛微软件

* * @author qiantao * @version 1.0 **/ public class AttendQuoteFieldServiceImpl extends Service implements AttendQuoteFieldService { // // @Resource // private AttendQuoteFieldMapper mapper; // @RpcReference // private RemoteAttendInitVacationService remoteAttendInitVacationService; // @Autowired // private LoggerTemplate attendQuoteFieldLoggerTemplate; @Override public Map list(AttendQuoteFieldQueryParam queryParam) { int uid = user.getUID(); // todo 同步字段 // syncAttendFields(employeeId, tenantKey); // Page page = new Page<>(queryParam.getCurrent(), queryParam.getPageSize(), true); // mapper.list(page, queryParam, tenantKey); // // List list = page.getRecords(); // list.forEach(m->{ // Integer sourceType = Integer.valueOf(m.getSourceType()); // m.setSourceType(AttendQuoteFieldSourceTypeEnum.getDefaultLabelByValue(sourceType, employeeId, tenantKey)); // m.setSourceTypeValue(AttendQuoteFieldSourceTypeEnum.getNameByValue(sourceType)); // m.setFieldType(AttendQuoteFieldTypeEnum.getDefaultLabelByValue(Integer.valueOf(m.getFieldType()), employeeId, tenantKey)); // }); // // WeaTable weaTable = FormatManager.getInstance() // .genTable(AttendQuoteFieldListDTO.class, page); // // EditableTable> editableTable = new EditableTable<>(weaTable); // editableTable.setColumns(AttendQuoteFieldBO.buildRecordTableColumns(employeeId, tenantKey)); // editableTable.setComProps(AttendQuoteFieldBO.buildEditableTableItemMap()); // editableTable.setPageSize(page.getSize()); // editableTable.setModule("hrmsalary"); // return editableTable; return null; } // @Override // public WeaForm getFrom(Long id, Long employeeId, String tenantKey) { // AttendQuoteFieldFormDTO formDTO = new AttendQuoteFieldFormDTO(); // if (id != null) { // AttendQuoteFieldPO po = mapper.getById(id, tenantKey); // if (po == null) { // throw new SalaryRunTimeException(String.format(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100370, "字段不存在")+"[id:%s]", id)); // } // BeanUtils.copyProperties(po, formDTO); // } else { // formDTO.setEnableStatus(0); // } // WeaForm weaForm = FormatManager.getInstance().genForm(AttendQuoteFieldFormDTO.class, formDTO); // weaForm.setData(JsonUtil.parseMap(formDTO, Object.class)); // return weaForm; // } // // @Override // @Transactional(rollbackFor = Exception.class) // public WeaResult save(AttendQuoteFieldSaveParam saveParam, Long employeeId, String tenantKey) { // WeaResult checkResult = AttendQuoteFieldSaveParam.checkParam(saveParam, employeeId, tenantKey); // if (checkResult.getCode() == WeaResultCodeEnum.ERROR.getCode()) { // return checkResult; // } // List attendQuoteFields = new LambdaQueryChainWrapper<>(mapper) // .eq(AttendQuoteFieldPO::getDeleteType, 0) // .eq(AttendQuoteFieldPO::getTenantKey, tenantKey) // .eq(AttendQuoteFieldPO::getFieldName, saveParam.getFieldName()).list(); // if (CollectionUtils.isNotEmpty(attendQuoteFields)) { // return WeaResult.fail(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100371, "字段名称不允许重复")); // } // // AttendQuoteFieldPO attendQuoteField = AttendQuoteFieldPO.builder() // .id(IdGenerator.generate()) // .fieldName(saveParam.getFieldName()) // .sourceType(AttendQuoteFieldSourceTypeEnum.DEFAULT.getValue()) // .fieldType(saveParam.getFieldType().getValue()) // .enableStatus(saveParam.getEnableStatus()?1:0) // .description(saveParam.getDescription()) // .createTime(LocalDateTime.now()) // .updateTime(LocalDateTime.now()) // .creator(employeeId) // .tenantKey(tenantKey) // .build(); // // 保存 // mapper.insert(attendQuoteField); // // 记录日志 // SalaryLoggerUtil.recordAddSingleLog(attendQuoteFieldLoggerTemplate, // attendQuoteField.getId(), // attendQuoteField.getFieldName(), // SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100374, "新增字段"), // SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100374, "新增字段"), // attendQuoteField); // // return WeaResult.success(StringUtils.EMPTY); // } // // @Override // @Transactional(rollbackFor = Exception.class) // public WeaResult update(AttendQuoteFieldSaveParam saveParam, Long employeeId, String tenantKey) { // WeaResult checkResult = AttendQuoteFieldSaveParam.checkParam(saveParam, employeeId, tenantKey); // if (checkResult.getCode() == WeaResultCodeEnum.ERROR.getCode()) { // return checkResult; // } // // 校验是否可以编辑 // if (saveParam.getId() == null) { // return WeaResult.fail(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 84026, "参数错误")); // } // AttendQuoteFieldPO attendQuoteField = mapper.getById(saveParam.getId(), tenantKey); // if (attendQuoteField == null) { // return WeaResult.fail(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100375, "该字段不存在")); // } // if (!attendQuoteField.getSourceType().equals(AttendQuoteFieldSourceTypeEnum.DEFAULT.getValue())) { // return WeaResult.fail(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100376, "来源只能为自定义")); // } // List attendQuoteFields = new LambdaQueryChainWrapper<>(mapper) // .eq(AttendQuoteFieldPO::getDeleteType, 0) // .eq(AttendQuoteFieldPO::getTenantKey, tenantKey) // .eq(AttendQuoteFieldPO::getFieldName, saveParam.getFieldName()).list(); // boolean fieldNameExist = CollectionUtils.emptyIfNull(attendQuoteFields).stream().anyMatch(e -> !Objects.equals(e.getId(), saveParam.getId())); // if (fieldNameExist) { // return WeaResult.fail(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100371, "字段名称不允许重复")); // } // // AttendQuoteFieldPO newAttendQuoteField = new AttendQuoteFieldPO(); // BeanUtils.copyProperties(attendQuoteField, newAttendQuoteField); // newAttendQuoteField.setFieldName(saveParam.getFieldName()); // newAttendQuoteField.setFieldType(saveParam.getFieldType().getValue()); // newAttendQuoteField.setEnableStatus(saveParam.getEnableStatus()?1:0); // newAttendQuoteField.setDescription(saveParam.getDescription()); // newAttendQuoteField.setUpdateTime(LocalDateTime.now()); // // 更新 // mapper.updateById(newAttendQuoteField); // // // 记录日志 // SalaryLoggerUtil.recordUpdateSingleLog(attendQuoteFieldLoggerTemplate, // attendQuoteField.getId(), // newAttendQuoteField.getFieldName(), // SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100378, "修改字段"), // SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100378, "修改字段"), // attendQuoteField, // newAttendQuoteField); // // return WeaResult.success(StringUtils.EMPTY); // } // // @Override // @Transactional(rollbackFor = Exception.class) // public WeaResult delete(Collection ids, Long employeeId, String tenantKey) { // if (CollectionUtils.isEmpty(ids)) { // return WeaResult.fail(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 84026, "参数错误")); // } // List attendQuoteFields = mapper.list(AttendQuoteFieldQueryParam.builder().ids(ids).build(), tenantKey); // if (CollectionUtils.isEmpty(attendQuoteFields)) { // return WeaResult.fail(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 87637, "要删除的数据在不存在或已删除")); // } // // List attendQuoteAttendFields = attendQuoteFields.stream().filter(e-> e.getSourceType().equals(String.valueOf(AttendQuoteFieldSourceTypeEnum.ATTEND.getValue()))).collect(Collectors.toList()); // if (CollectionUtils.isNotEmpty(attendQuoteAttendFields)) { // return WeaResult.fail(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 87652, "考勤模块的字段不能删除")); // } // // // TODO 正在使用的记录不允许删除 // mapper.deleteByIds(ids, tenantKey); // // // 记录日志 // attendQuoteFields.forEach(e -> { // SalaryLoggerUtil.recordDeleteSingleLog(attendQuoteFieldLoggerTemplate, // e.getId(), // e.getFieldName(), // SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100380, "删除字段"), // SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100380, "删除字段"), // e); // }); // return WeaResult.success(StringUtils.EMPTY); // } // // @Override // @Transactional(rollbackFor = Exception.class) // public WeaResult updateEnableStatus(Long id, Boolean enableStatus, Long currentEmployeeId, String currentTenantKey) { // // 校验是否可以编辑 // if (id == null || enableStatus == null) { // return WeaResult.fail(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 84026, "参数错误")); // } // AttendQuoteFieldPO attendQuoteField = mapper.getById(id, currentTenantKey); // if (attendQuoteField == null) { // return WeaResult.fail(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 100375, "该字段不存在")); // } // if (!attendQuoteField.getSourceType().equals(AttendQuoteFieldSourceTypeEnum.DEFAULT.getValue())) { // return WeaResult.fail(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 100376, "来源只能为自定义")); // } // // AttendQuoteFieldPO newAttendQuoteField = new AttendQuoteFieldPO(); // BeanUtils.copyProperties(attendQuoteField, newAttendQuoteField); // newAttendQuoteField.setEnableStatus(enableStatus?1:0); // newAttendQuoteField.setUpdateTime(LocalDateTime.now()); // // 更新 // mapper.updateById(newAttendQuoteField); // String action = enableStatus?SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 87070, "启用"):SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 100386, "停用"); // // 记录日志 // SalaryLoggerUtil.recordUpdateSingleLog(attendQuoteFieldLoggerTemplate, // attendQuoteField.getId(), // newAttendQuoteField.getFieldName(), // action+SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 100387, "字段"), // action+SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 100387, "字段"), // attendQuoteField, // newAttendQuoteField); // // return WeaResult.success(StringUtils.EMPTY); // } // // @Override // @Transactional(rollbackFor = Exception.class) // public WeaResult syncAttendFields(Long currentEmployeeId, String currentTenantKey) { // // 所有字段管理的考勤模块引用字段 // List attendQuoteFields = new LambdaQueryChainWrapper<>(mapper) // .eq(AttendQuoteFieldPO::getTenantKey, currentTenantKey) // .eq(AttendQuoteFieldPO::getDeleteType, 0) // .eq(AttendQuoteFieldPO::getSourceType, AttendQuoteFieldSourceTypeEnum.ATTEND.getValue()) // .orderByDesc(AttendQuoteFieldPO::getId).list(); // // 1.本地字段 // List localFieldCodes = CollectionUtils.emptyIfNull(attendQuoteFields).stream().map(AttendQuoteFieldPO::getCode).collect(Collectors.toList()); // // // 2.考勤模块字段 // // 请假类型 // List attendVacationTypes; // try { // attendVacationTypes = remoteAttendInitVacationService.queryVacationTypes(Boolean.TRUE, currentTenantKey); // } catch (Exception e) { // log.error("同步考勤字段失败,请检查接口服务remoteAttendInitVacationService.queryVacationTypes:{}", e.getMessage()); // return WeaResult.success(StringUtils.EMPTY); // } // // 请假类型:按小时 // List attendLeaveHourFieldCodes = CollectionUtils.emptyIfNull(attendVacationTypes).stream().map(m->m.getId()+"_leave_hour").collect(Collectors.toList()); // // 请假类型:按天 // List attendLeaveDayFieldCodes = CollectionUtils.emptyIfNull(attendVacationTypes).stream().map(m->m.getId()+"_leave_day").collect(Collectors.toList()); // List attendLeaveFieldCodes = Lists.newArrayList(); // attendLeaveFieldCodes.addAll(attendLeaveHourFieldCodes); // attendLeaveFieldCodes.addAll(attendLeaveDayFieldCodes); // // 所有考勤模块字段编码 // List attendFieldCodes = Lists.newArrayList(); // attendFieldCodes.addAll(attendLeaveFieldCodes); // // 考勤模块固定字段 // List> attendFixedFieldCodes = AttendQuoteFieldBO.buildAttendFixedFields(); // attendFieldCodes.addAll(attendFixedFieldCodes.stream().map(m->m.get("code")).collect(Collectors.toList())); // // // 本地已存在则更新【交集】 // List updateCodes = localFieldCodes.stream().filter(item -> attendFieldCodes.contains(item)).collect(Collectors.toList()); // // 本地比attend多,则删除【差集(local - attend)】 // List deleteCodes = localFieldCodes.stream().filter(item -> !attendFieldCodes.contains(item)).collect(Collectors.toList()); // // attend比本地多,则新增【差集(attend - local)】 // List saveCodes = attendFieldCodes.stream().filter(item -> !localFieldCodes.contains(item)).collect(Collectors.toList()); // String hourI18n = SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 100743, "小时"); // String dayI18n = SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 100744, "天"); // // 1.更新 == 目前除了请假类型其余都是固定,故只需更新请假类型部分 // List updates = Lists.newArrayList(); // CollectionUtils.emptyIfNull(updateCodes).forEach(e -> { // Optional optionalHour = CollectionUtils.emptyIfNull(attendVacationTypes).stream().filter(m->(m.getId()+"_leave_hour").equals(e)).findFirst(); // if (optionalHour.isPresent()) { // AttendVacationType hour = optionalHour.get(); // updates.add(AttendQuoteFieldPO.builder() // .code(e) // .fieldName(hour.getName()+"("+hourI18n+")") // .updateTime(LocalDateTime.now()) // .build()); // } // Optional optionalDay = CollectionUtils.emptyIfNull(attendVacationTypes).stream().filter(m->(m.getId()+"_leave_day").equals(e)).findFirst(); // if (optionalDay.isPresent()) { // AttendVacationType day = optionalDay.get(); // updates.add(AttendQuoteFieldPO.builder() // .code(e) // .fieldName(day.getName()+"("+dayI18n+")") // .updateTime(LocalDateTime.now()) // .build()); // } // }); // if (CollectionUtils.isNotEmpty(updates)) { // mapper.updateNameByCode(updates); // } // // 2.删除 // if (CollectionUtils.isNotEmpty(deleteCodes)) { // new LambdaUpdateChainWrapper<>(mapper) // .eq(AttendQuoteFieldPO::getDeleteType, 0) // .eq(AttendQuoteFieldPO::getTenantKey, currentTenantKey) // .eq(AttendQuoteFieldPO::getSourceType, AttendQuoteFieldSourceTypeEnum.ATTEND.getValue()) // .in(AttendQuoteFieldPO::getCode, deleteCodes) // .set(AttendQuoteFieldPO::getDeleteType, 1).update(); // } // // 3.新增 // List saves = new ArrayList<>(); // saves.addAll(CollectionUtils.emptyIfNull(attendFixedFieldCodes).stream().filter(e -> saveCodes.contains(e.get("code"))).map(m -> // buildAttendQuoteField(m.get("code"), m.get("name"), currentEmployeeId, currentTenantKey) // ).collect(Collectors.toList())); // CollectionUtils.emptyIfNull(saveCodes).forEach(e -> { // Optional optionalHour = CollectionUtils.emptyIfNull(attendVacationTypes).stream().filter(m->(m.getId()+"_leave_hour").equals(e)).findFirst(); // if (optionalHour.isPresent()) { // AttendVacationType hour = optionalHour.get(); // saves.add(buildAttendQuoteField(e, hour.getName()+"("+hourI18n+")", currentEmployeeId, currentTenantKey)); // } // Optional optionalDay = CollectionUtils.emptyIfNull(attendVacationTypes).stream().filter(m->(m.getId()+"_leave_day").equals(e)).findFirst(); // if (optionalDay.isPresent()) { // AttendVacationType day = optionalDay.get(); // saves.add(buildAttendQuoteField(e, day.getName()+"("+dayI18n+")", currentEmployeeId, currentTenantKey)); // } // }); // // if (CollectionUtils.isNotEmpty(saves)) { // mapper.saveBatch(saves); // } // // return WeaResult.success(StringUtils.EMPTY); // } // // /** // * 构建考勤字段 // * @param code // * @param name // * @param currentEmployeeId // * @param currentTenantKey // * @return // */ // private AttendQuoteFieldPO buildAttendQuoteField(String code, String name, Long currentEmployeeId, String currentTenantKey) { // return AttendQuoteFieldPO.builder() // .id(IdGenerator.generate()) // .code(code) // .fieldName(name) // .sourceType(AttendQuoteFieldSourceTypeEnum.ATTEND.getValue()) // .fieldType(AttendQuoteFieldTypeEnum.NUMBER.getValue()) // .enableStatus(1) // .description("") // .createTime(LocalDateTime.now()) // .updateTime(LocalDateTime.now()) // .creator(currentEmployeeId) // .tenantKey(currentTenantKey) // .build(); // } // // @Override // public List listAll(String tenantKey) { // return mapper.list(AttendQuoteFieldQueryParam.builder().build(), tenantKey); // } }