package com.engine.salary.service.impl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryBill.bo.SalaryBillBO; import com.engine.salary.entity.salaryBill.dto.SalaryBillAckFeedbackDTO; import com.engine.salary.entity.salaryBill.dto.salaryBillViewingLimitSetting; import com.engine.salary.entity.salaryBill.dto.SalaryBillWatermarkDTO; import com.engine.salary.entity.salaryBill.param.SalaryBaseSetSaveParam; import com.engine.salary.entity.salaryBill.po.SalaryBillWatermarkPO; import com.engine.salary.enums.salarybill.SalaryTemplateWatermarkTypeEnum; import com.engine.salary.service.SalaryBillBaseSetService; import com.engine.salary.service.SalaryBillWatermarkService; import com.engine.salary.service.SalaryEmployeeService; import com.engine.salary.sys.constant.SalarySysConstant; import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.sys.service.SalarySysConfService; import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.JsonUtil; import com.engine.salary.util.SalaryEntityUtil; import com.google.common.collect.Lists; import dm.jdbc.util.IdGenerator; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.math.NumberUtils; import org.apache.commons.lang3.StringUtils; import weaver.general.Util; import weaver.hrm.User; import java.util.*; import static com.engine.salary.sys.constant.SalarySysConstant.*; /** * @Description: 工资单水印 * @Author: wangxiangzhong * @Date: 2023/5/16 11:10 */ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillBaseSetService { private SalaryBillWatermarkService getSalaryBillWatermarkService(User user) { return ServiceUtil.getService(SalaryBillWatermarkServiceImpl.class, user); } private SalaryEmployeeService getSalaryEmployeeService(User user) { return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } public SalarySysConfService getSalarySysConfService(User user) { return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); } @Override public SalaryBillWatermarkDTO getWatermarkSetting() { List list = getSalaryBillWatermarkService(user).listAll(); SalaryBillWatermarkPO watermarkPO = CollectionUtils.isNotEmpty(list) ? list.get(0) : null; if (Objects.isNull(watermarkPO)) { return null; } return SalaryBillWatermarkDTO.builder().watermarkStatus(NumberUtils.INTEGER_ONE.equals(watermarkPO.getWatermarkStatus())).watermarkType(watermarkPO.getWatermarkType()).wmSetting(JsonUtil.parseMap(watermarkPO.getWatermarkSetting(), Object.class)).build(); } @Override public String saveBaseSet(SalaryBaseSetSaveParam saveParam) { // 检查参数 SalaryBaseSetSaveParam.checkParam(saveParam); Date now = new Date(); // 工资单水印=========================================================== Integer watermarkStatus = NumberUtils.INTEGER_ONE; String watermark = null; String wmSetting = StringUtils.EMPTY; // 如果开启了 if (saveParam.getWatermarkStatus()) { if (SalaryTemplateWatermarkTypeEnum.CUSTOM.equals(saveParam.getWatermark())) { wmSetting = JsonUtil.toJsonString(saveParam.getWmSetting()); } else { // 系统默认水印 给一个默认的json wmSetting = "{\"wmWidth\":100,\"wmRotate\":30,\"wmSelectedFieldIds\":[\"HRM_Name\"],\"pureWmText\":\" 当前操作者姓名 \",\"wmText\":\"

 $HRM_Name 

\",\"wmClassify\":\"text\",\"wmHeight\":100,\"wmOriginText\":\"

 当前操作者姓名 

\",\"wmNoTransparent\":15}"; } watermark = saveParam.getWatermark().getValue(); } else { watermarkStatus = NumberUtils.INTEGER_ZERO; } // 将当前生效的水印信息都删除 getSalaryBillWatermarkService(user).deleteAll(); // 保存最新的水印信息 getSalaryBillWatermarkService(user).insertIgnoreNull(SalaryBillWatermarkPO.builder().id(IdGenerator.generate()).watermarkStatus(watermarkStatus).watermarkType(watermark).watermarkSetting(wmSetting).createTime(now).updateTime(now).creator(Long.valueOf(user.getUID())).deleteType(NumberUtils.INTEGER_ZERO).tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).build()); // 工资单确认和反馈 =========================================================== SalaryBillAckFeedbackDTO ackFeedbackSetting = saveParam.getAckFeedbackSetting(); // 1.保存确认反馈开关状态 getSalarySysConfService(user).saveSettingByType(ackFeedbackSetting.getAckStatus(), SALARY_SEND_FEEDBACK, "工资单确认反馈状态", "billSend"); if (StringUtils.equals(ackFeedbackSetting.getAckStatus(), "1")) { // 2.保存反馈地址 getSalarySysConfService(user).saveSettingByType(ackFeedbackSetting.getFeedBackUrl(), SALARY_FEEDBACK_URL, "工资单反馈地址", "billSend"); getSalarySysConfService(user).saveSettingByType(ackFeedbackSetting.getMobileFeedBackUrl(), SALARY_FEEDBACK_URL_MOBILE, "移动端工资单反馈地址", "billSend"); // 3.保存自动确认时间 getSalarySysConfService(user).saveSettingByType(ackFeedbackSetting.getAutoAckDays().toString(), SALARY_AUTO_ACK_DAYS, "工资单反馈自动确认", "billSend"); } // 工资单时效性设置 salaryBillViewingLimitSetting salaryBillViewingLimitDTO = saveParam.getSalaryBillViewingLimitSetting(); if (salaryBillViewingLimitDTO != null) { getSalarySysConfService(user).saveSettingByType(Util.null2String(salaryBillViewingLimitDTO.getLimitMonth()), SALARY_BILL_VIEWING_LIMIT_MONTH, "工资单时效性设置", "billSend"); } return StringUtils.EMPTY; } @Override public String previewWaterMark(Map wmSetting) { String wmText = wmSetting.getOrDefault("wmText", StringUtils.EMPTY).toString(); List wmTextFieldIds = (List) wmSetting.getOrDefault("wmSelectedFieldIds", Lists.newArrayList()); if (CollectionUtils.isEmpty(wmTextFieldIds) || StringUtils.isEmpty(wmText)) { return wmText; } DataCollectionEmployee simpleEmployee = getSalaryEmployeeService(user).getEmployeeById(Long.valueOf(user.getUID())); return SalaryBillBO.handleWmText(wmText, wmTextFieldIds, simpleEmployee); } @Override public SalaryBillAckFeedbackDTO getDefaultAckFeedbackSetting() { // 获取反馈开启状态、自动确认时长、反馈地址 List codes = Arrays.asList(SalarySysConstant.SALARY_SEND_FEEDBACK, SalarySysConstant.SALARY_AUTO_ACK_DAYS, SalarySysConstant.SALARY_FEEDBACK_URL, SALARY_FEEDBACK_URL_MOBILE); List sysConfList = getSalarySysConfService(user).getListByCodes(codes); Map sysConfMap = SalaryEntityUtil.convert2Map(sysConfList, SalarySysConfPO::getConfKey, SalarySysConfPO::getConfValue); SalaryBillAckFeedbackDTO defaultAckFeedBackDTO = SalaryBillAckFeedbackDTO.builder().build(); String ackStatus = sysConfMap.getOrDefault(SalarySysConstant.SALARY_SEND_FEEDBACK, "0"); if (StringUtils.equals(ackStatus, "0")) { // 未开启工资单确认 defaultAckFeedBackDTO.setAckStatus("0"); defaultAckFeedBackDTO.setAutoAckDays(0); defaultAckFeedBackDTO.setFeedBackUrl("/"); defaultAckFeedBackDTO.setMobileFeedBackUrl("/"); return defaultAckFeedBackDTO; } defaultAckFeedBackDTO.setAckStatus(ackStatus); // 获取超时自动确认时间 Integer autoAckDays = Integer.valueOf(sysConfMap.getOrDefault(SalarySysConstant.SALARY_AUTO_ACK_DAYS, "7")); defaultAckFeedBackDTO.setAutoAckDays(autoAckDays); // 反馈地址 String feedbackUrl = sysConfMap.getOrDefault(SalarySysConstant.SALARY_FEEDBACK_URL, ""); defaultAckFeedBackDTO.setFeedBackUrl(feedbackUrl); String mobileFeedbackUrl = sysConfMap.getOrDefault(SALARY_FEEDBACK_URL_MOBILE, ""); defaultAckFeedBackDTO.setMobileFeedBackUrl(mobileFeedbackUrl); return defaultAckFeedBackDTO; } @Override public salaryBillViewingLimitSetting getSalaryBillViewingLimitSetting() { SalarySysConfPO limitMonthSetting = getSalarySysConfService(user).getOneByCode(SALARY_BILL_VIEWING_LIMIT_MONTH); int limitMonth = 0; if (limitMonthSetting != null && NumberUtils.isNumber(limitMonthSetting.getConfValue())) { limitMonth = Integer.parseInt(limitMonthSetting.getConfValue()); } return salaryBillViewingLimitSetting.builder().limitMonth(limitMonth).build(); } }