用一个字段显示近七天是否做核酸

一、数据库设计

 

check_flag

varchar

核酸检测标识

query_date 

datetime

最新查询时间

check_time

datetime

最新核酸检测时间

 

 假设check_flag为“0111111”,“0”表示未做核酸,“1”表示已做核酸,字符串的第一位表示今天,第二位是昨天,第三位前天,依次地推,表示近七天有没有做核酸。

 

二、后台逻辑实现

我把这段逻辑分为三种情况:

1、今天第一次查询,已做核酸,这是最理想的情况,之后的查询已经无关紧要,我们不再做任何处理。

2、今天第一次查询,未做核酸,第二次查询已做核酸,之后的查询已经无关紧要,我们不再做任何处理。

3、今天第一次查询,未做核酸,第二次查询未做核酸,第三次查询已做核酸,之后的查询已经无关紧要,我们不再做任何处理。

public void checkHeSuan(){
        int dayLength = 7;
        String l = configService.selectConfigByKey("personInfo.check.checkValue");
        if (StringUtils.isNotBlank(l)){
            dayLength = Integer.valueOf(l);
        }
        int finalDayLength = dayLength;
        String currentDate = DateUtils.getDate();
        List<ReturnPerson> list  = returnPersonService.selectList(new ReturnPerson());
        list.stream().forEach(e -> {
            String checkFlag = e.getReturnInfo().getCheckFlag() != null ? e.getReturnInfo().getCheckFlag() : "";
            try {
                String todayFlag = "0"; //今天默认为未做核酸
                String queryDate =  DateUtils.formatDate(e.getReturnInfo().getQueryDate(), DateUtils.YYYY_MM_DD);
                if(currentDate.equals(queryDate)){
                    //如果今天非第一次查询&&之前的查询都未做核酸
                    if(checkFlag.startsWith("0")){
                        Registers registers = registersService.getRegistersByCard(e.getIdcard());
                        if (registers != null) {
                            //今天做过核酸
                            e.getReturnInfo().setCheckTime(DateUtils.parseDate( registers.getGatherTime()));
                            todayFlag = "1";
                            checkFlag = todayFlag + checkFlag.substring(1);
                            e.getReturnInfo().setCheckFlag(dealCheckFlag(checkFlag , finalDayLength));
                            returnInfoMapper.update(e.getReturnInfo());
                        }
                    }
                }else {
                    //如果今天第一次查询
                    e.getReturnInfo().setQueryDate(new Date());
                    Registers registers = registersService.getRegistersByCard(e.getIdcard());
                    if (registers != null) {
                        //今天做过核酸
                        todayFlag = "1";
                        e.getReturnInfo().setCheckTime(DateUtils.parseDate( registers.getGatherTime()));
                    }
                    checkFlag = todayFlag + checkFlag;
                    e.getReturnInfo().setCheckFlag(dealCheckFlag(checkFlag , finalDayLength));
                    returnInfoMapper.update(e.getReturnInfo());
                }
            }catch (Exception ex) {
                ex.printStackTrace();
            }
        });
}

public String dealCheckFlag(String checkFlag, int len){
        if(StringUtils.isNotBlank(checkFlag) && checkFlag.length() > len){
            checkFlag = checkFlag.substring(0, len);
        }
        return checkFlag;
}

 

三、前台展示

<template>
<div>

  <el-table-column label="每日进行核酸检测(绿色已做,红色未做)" align="left" prop="checkFlag" width="330">
    <template slot-scope="scope">
      <template v-for="(item, index) in scope.row.checkFlag.split('')">
          <el-tag type="success" v-if="item == '1'" style="margin: 3px;">{{ getDateStr(index) }}</el-tag>
    <el-tag type="danger" v-if="item == '0'" style="margin: 3px;">{{ getDateStr(index) }}</el-tag>
   </template>
  </template>
  </el-table-column>
 </div>
</template>
 
<script>
  export default {
    data() {
      return {
         days:[],
       };
    },
    created() {
    this.getNearlyDay(30);
    },

    methods: {
      getDateStr(index){
      return this.days[index];
      },

      getNearlyDay(len){
      let date = new Date();
      for (let i = 0; i < len; i++) {
      //今天加上前6天
      let dateItem = new Date(date.getTime() - i * 24 * 60 * 60 * 1000) //使用当天时间戳减去以前的时间毫秒(小时*分*秒*毫秒)
       // let y = dateItem.getFullYear() //获取年份
      let m = dateItem.getMonth() + 1 //获取月份js月份从0开始,需要+1
       let d = dateItem.getDate() //获取日期
      m = this.addDate0(m) //给为单数的月份补零
      d = this.addDate0(d) //给为单数的日期补零
      let valueItem = m + '-' + d //组合
      this.days.push(valueItem) //添加至数组
      }
      },

      //给日期加0
      addDate0(time) {
      if (time.toString().length == 1) {
      time = '0' + time.toString()
      }
      return time
      }
    }
  }
</script>
 

 

posted @ 2022-11-08 15:40  aaa111js  阅读(168)  评论(0编辑  收藏  举报