| | |
| | | import cn.iocoder.yudao.module.hrm.dal.mysql.salary.HrmSalaryStructureMapper; |
| | | import cn.iocoder.yudao.module.hrm.dal.redis.HrmNoRedisDAO; |
| | | import cn.iocoder.yudao.module.system.api.dept.DeptApi; |
| | | import cn.iocoder.yudao.module.system.api.notify.NotifyMessageSendApi; |
| | | import cn.iocoder.yudao.module.system.api.notify.dto.NotifySendSingleToUserReqDTO; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import cn.iocoder.yudao.module.hrm.enums.HrmOvertimeTypeEnum; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | import java.time.LocalDateTime; |
| | | import java.time.YearMonth; |
| | | import java.util.Collections; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | |
| | | */ |
| | | @Service |
| | | @Validated |
| | | @Slf4j |
| | | public class HrmSalaryCalculationServiceImpl implements HrmSalaryCalculationService { |
| | | |
| | | /** |
| | |
| | | private HrmNoRedisDAO noRedisDAO; |
| | | @Resource |
| | | private DeptApi deptApi; |
| | | @Resource |
| | | private NotifyMessageSendApi notifyMessageSendApi; |
| | | @Resource |
| | | private HrmDeductionService deductionService; |
| | | @Resource |
| | |
| | | salaryCalculationMapper.updateById(salaryCalculation); |
| | | // è®°å½å¨æ |
| | | period = salaryCalculation.getPeriod(); |
| | | // 确认åç»è¯¥åå·¥åéå·¥èµæ¡éç¥ï¼å¤±è´¥ä¸å½±å确认主æµç¨ï¼ |
| | | sendPayslipNotice(salaryCalculation); |
| | | } |
| | | |
| | | // æ£æ¥è¯¥å¨ææ¯å¦æææ ¸ç®è®°å½é½å·²ç¡®è®¤ï¼èªå¨çæåæ¾å°è´¦ |
| | |
| | | /** |
| | | * æ£æ¥è¯¥å¨ææ¯å¦æææ ¸ç®è®°å½é½å·²ç¡®è®¤ï¼å¦æå
¨é¨ç¡®è®¤åèªå¨çæåæ¾å°è´¦ |
| | | */ |
| | | /** |
| | | * å·¥èµæ¡éç¥çç«å
信模æ¿ç¼ç |
| | | * |
| | | * å¯¹åº system_notify_template.code = salary_payslip_notice |
| | | */ |
| | | private static final String TEMPLATE_CODE_PAYSLIP = "salary_payslip_notice"; |
| | | |
| | | /** |
| | | * ç»åå·¥åéå·¥èµæ¡éç¥ï¼APP ç«å
ä¿¡ï¼ |
| | | * |
| | | * éç¥å¤±è´¥åªè®°æ¥å¿ï¼ä¸å½±åæ ¸ç®ç¡®è®¤ä¸»æµç¨ |
| | | */ |
| | | private void sendPayslipNotice(HrmSalaryCalculationDO calculation) { |
| | | if (calculation == null || calculation.getUserId() == null) { |
| | | return; |
| | | } |
| | | try { |
| | | NotifySendSingleToUserReqDTO reqDTO = new NotifySendSingleToUserReqDTO(); |
| | | reqDTO.setUserId(calculation.getUserId()); |
| | | reqDTO.setTemplateCode(TEMPLATE_CODE_PAYSLIP); |
| | | Map<String, Object> params = new HashMap<>(); |
| | | params.put("period", calculation.getPeriod()); |
| | | params.put("actualSalary", calculation.getActualSalary()); |
| | | reqDTO.setTemplateParams(params); |
| | | notifyMessageSendApi.sendSingleMessageToAdmin(reqDTO); |
| | | log.info("[sendPayslipNotice] å·¥èµæ¡éç¥å·²åéï¼userId={}, period={}", |
| | | calculation.getUserId(), calculation.getPeriod()); |
| | | } catch (Exception e) { |
| | | log.warn("[sendPayslipNotice] å·¥èµæ¡éç¥åé失败ï¼userId={}, period={}", |
| | | calculation.getUserId(), calculation.getPeriod(), e); |
| | | } |
| | | } |
| | | |
| | | private void autoGeneratePaymentIfAllConfirmed(String period) { |
| | | // æ¥è¯¢è¯¥å¨ææææ ¸ç®è®°å½ |
| | | List<HrmSalaryCalculationDO> allCalculations = salaryCalculationMapper.selectListByPeriod(period); |