写点什么

一种根据业务连续持续天数计算分值的方法

作者:智慧源点
  • 2024-02-03
    北京
  • 本文字数:1340 字

    阅读完需:约 4 分钟

一、背景在很多业务场景下,需要根据持续天数来计算分值的场景,依我现在线上的一个业务为例,来展开说明,我们的业务场景是一个预警分值计算,通过采集个人的健康数据来进行预警,每天都要计算体温、心率、血氧等指标看看是否异常,比如血氧连续持续两天异常,则打标 15 分


二、架构设计


三、java 实现


/**


  • @desc 得分项,一些指标指示位枚举类*/public enum IndicatorDataEnum {

  • /**

  • 心率连续 7 天小于 50/HR_50(0),/*

  • 血氧连续 7 天小于 50*/OXY_LESS_50(1),;

  • /**

  • 二进制指示物位(bit 值) 如 7 二进制标识 0000 0000 0000 0111

  • 即 0 ,1 ,2 指示位满足*/private final Integer num;

  • IndicatorDataEnum(Integer num) {this.num = num;}

  • public Integer getNum() {return num;}


}


public class YJCal {


public static Integer getIndicator() {    //从数据库读取数据    List<AlertScoreDTO> alertScoreDTOList = generateRandomData(10);
int indicatorData = 0; //1 心率异常 判定 2.2 indicatorData |= checkHrAbnormal(alertScoreDTOList) ? 1 << IndicatorDataEnum.HR_50.getNum() : 0; boolean bloodOxygenAbnormal = checkOxyAbnormal(alertScoreDTOList); indicatorData |= bloodOxygenAbnormal ? 1 << IndicatorDataEnum.OXY_LESS_50.getNum() : 0; return indicatorData;}
private static List<AlertScoreDTO> generateRandomData(int count) { List<AlertScoreDTO> alertScoreDTOList = new ArrayList<>(); Random random = new Random();
for (int i = 0; i < count; i++) { Long id = (long) i + 1; Integer hrScore = random.nextInt(101); // 随机生成0到100之间的整数 Integer bloodOxygenScore = random.nextInt(101); // 随机生成0到100之间的整数 Integer indicatorData = 3;
AlertScoreDTO alertScoreDTO = new AlertScoreDTO(id, hrScore, bloodOxygenScore, indicatorData); alertScoreDTOList.add(alertScoreDTO); }
return alertScoreDTOList;}
public static boolean checkHrAbnormal(List<AlertScoreDTO> alertScoreDTOList) { int days = getConsecutiveCount(IndicatorDataEnum.HR_50, alertScoreDTOList); if(days > 3) { return true; } return false;}
public static boolean checkOxyAbnormal(List<AlertScoreDTO> alertScoreDTOList) { //此处省略业务逻辑 return true;}
private static int getConsecutiveCount(IndicatorDataEnum dataEnum, List<AlertScoreDTO> alertScoreDTOList) { int days = 0; for (int i = 0; i < alertScoreDTOList.size(); i++) { AlertScoreDTO alertScoreDTO = alertScoreDTOList.get(i); if (((1 << dataEnum.getNum()) & alertScoreDTO.getIndicatorData()) == 0) { //不连续了直接结束 break; } days++; } return days;}
public static void main(String[] args) { System.out.println(getIndicator());}
复制代码


}


chatgpt 使用软件: https://www.paofu.cloud/auth/register?code=1hs8

用户头像

智慧源点

关注

终身学习、研究java架构、ai大模型 2019-12-06 加入

商业合作: wytwhdwdd

评论

发布
暂无评论
一种根据业务连续持续天数计算分值的方法_智慧源点_InfoQ写作社区