
## 业务背景
目前苍穹系统没有许可数量相关的主动预警机制,在许可可用数量所剩不多的时候,用户是无感知的,如果此时进行批量的人员新增并进行许可分配会提示许可不足。针对此种场景,我们可以编写定时任务,在定时任务当中判断许可占用量,当占用量达到预警值时发送邮件通知,从而预防许可不足的问题发生。
## 解决方案
1. 编写定时任务,继承AbstractTask基类,并重写execute方法。
2. 获取许可总数以及许可剩余数
3. 根据总数和剩余数计算出剩余百分比
4. 发送邮件
5. 具体代码实现逻辑如下:
```
package kd.hr.hrt.dada.demo.LicenseCheck;
import kd.bos.context.RequestContext;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.exception.KDException;
import kd.bos.message.api.EmailInfo;
import kd.bos.message.service.handler.EmailHandler;
import kd.bos.orm.query.QFilter;
import kd.bos.schedule.executor.AbstractTask;
import kd.bos.servicehelper.QueryServiceHelper;
import kd.bos.servicehelper.license.LicenseServiceHelper;
import java.util.Map;
public class LicenseAlert extends AbstractTask {
@Override
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
// get the groupId by groupNumber
Integer groupId = getGroupIdByNumber("PRO");
double threshold = 0.2;
// 2.get the valid license
double total = LicenseServiceHelper.getTotalNumber(groupId) * 0.1;
//3. get the total license
double remain = LicenseServiceHelper.getRemainNumber(groupId) * 0.1;
//4. calculate the percentage
double percentage = total / remain;
if (percentage > threshold) {
//5. send message via email