<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      10行代碼實(shí)現(xiàn)一個(gè)值班提醒應(yīng)用

      10行代碼實(shí)現(xiàn)一個(gè)值班提醒應(yīng)用

      picture 1

      工作當(dāng)中,經(jīng)常遇到團(tuán)隊(duì)成員需要值班排班及提醒的應(yīng)用場景。雖然,有一些現(xiàn)成的APP可以用,但是對程序員來講使用起來不免有些繁瑣,而且可能不太靈活。

      那么,我們?nèi)绾问謹(jǐn)]一個(gè)簡單值班排班及提醒的應(yīng)用呢?
      picture 2

      考慮一種簡單的情況,對約束做如下假設(shè):

      • 值班順序固定,一旦確定下來不再修改
      • 每人值固定時(shí)間的班,比如:每人值一周

      對需求假設(shè)如下:

      • 在合適的時(shí)間,提醒值班人值班時(shí)間
      • 提醒值班人的同時(shí)預(yù)告下一個(gè)值班人

      約束和需求轉(zhuǎn)化為代碼如下:

      
      on_duty_list = ['孫悟空', '沙和尚', '豬八戒', '白龍馬'] # 值班人列表
      on_duty_period_in_days = 7 # 每人值一周
      notify_days = [1, 5] # 假設(shè)值班第一天提醒一次,第5天再提醒一次
      # 第一個(gè)值班人值班開始時(shí)間
      on_duty_first_person = '孫悟空'
      on_duty_first_day = '2022-03-24 00:00:00'
      # 提醒消息模板
      notify_template = Template(r"""
      【===========報(bào)警值班提醒========】
      【本周值班人】${on_duty_person_this_week}
      【值班時(shí)間】 ${on_duty_range}
      【下周值班人】${on_duty_person_next_week}
      """)
      

      如何用程序來計(jì)算當(dāng)前時(shí)間應(yīng)該是哪個(gè)人值班呢?

      這里用到簡單數(shù)學(xué)計(jì)算:整除、取余運(yùn)算

      當(dāng)前時(shí)間與首個(gè)值班人值班開始時(shí)間的時(shí)間差整除7天得到過了多少周,然后再對總值班人數(shù)取余,得到當(dāng)前應(yīng)該是第幾個(gè)值班人值班。

      def WhoIsOnDuty(timeTs = int(time.time())):
          ref_timeTs = UnixTimeFromDate(on_duty_first_day)
          deltaTs = timeTs - ref_timeTs
          deltaDay = deltaTs / oneDayTs
          index = deltaDay / on_duty_period_in_days % len(on_duty_list)
          return on_duty_list[index]
      

      如何計(jì)算值班時(shí)間范圍呢?

      這里涉及到簡單的日期計(jì)算,使用了datetime庫

      def WhoIsOnDuty(timeTs = int(time.time())):
          ref_timeTs = UnixTimeFromDate(on_duty_first_day)
          deltaTs = timeTs - ref_timeTs
          deltaDay = deltaTs / oneDayTs
          index = deltaDay / on_duty_period_in_days % len(on_duty_list)
          day_index = deltaDay % on_duty_period_in_days
          ts = time.localtime(timeTs)
          start_day = str(datetime.date(ts.tm_year, ts.tm_mon, ts.tm_mday) + datetime.timedelta(days = -day_index))
          end_day = str(datetime.date(ts.tm_year, ts.tm_mon, ts.tm_mday) + datetime.timedelta(days = - day_index + on_duty_period_in_days - 1))
          return on_duty_list[index], day_index + 1, start_day, end_day, on_duty_list[(index+1)%len(on_duty_list)]
      

      這10行代碼,是整個(gè)應(yīng)用的核心。

      整個(gè)應(yīng)用代碼如下:

      #!/usr/bin/env python
      # coding: utf-8
      
      import time
      from string import Template
      import datetime
      
      on_duty_list = ['孫悟空', '沙和尚', '豬八戒', '白龍馬']
      on_duty_period_in_days = 7 # day
      notify_days = [1, 5]
      on_duty_first_person = '孫悟空'
      on_duty_first_day = '2022-03-24 10:00:00'
      oneDayTs = 24 * 60 * 60
      
      notify_template = Template(r"""
      【===========報(bào)警值班提醒========】
      【本周值班人】${on_duty_person_this_week}
      【值班時(shí)間】 ${on_duty_range}
      【下周值班人】${on_duty_person_next_week}
      """)
      
      def SendMessage(message='test'):
          print message
      
      def PairListToMessage(pair_list):
          conent_arr = []
          for k, v in pair_list:
              conent_arr.append(' '.join(['【' + k + '】', v]))
          return '\n'.join(conent_arr)
      
      def UnixTimeFromDate(time_str, format='%Y-%m-%d %H:%M:%S'):
          # 先轉(zhuǎn)換為時(shí)間數(shù)組
          timeArray = time.strptime(time_str, "%Y-%m-%d %H:%M:%S")
          # 轉(zhuǎn)換為時(shí)間戳
          timeStamp = int(time.mktime(timeArray))
          return timeStamp
      
      def DatetimeStr(timeTs, format='%Y-%m-%d %H:%M:%S'):
          return time.strftime(format, time.localtime(timeTs))
      
      def WhoIsOnDuty(timeTs = int(time.time())):
          ref_timeTs = UnixTimeFromDate(on_duty_first_day)
          deltaTs = timeTs - ref_timeTs
          deltaDay = deltaTs / oneDayTs
          index = deltaDay / on_duty_period_in_days % len(on_duty_list)
          day_index = deltaDay % on_duty_period_in_days
          ts = time.localtime(timeTs)
          start_day = str(datetime.date(ts.tm_year, ts.tm_mon, ts.tm_mday) + datetime.timedelta(days = -day_index))
          end_day = str(datetime.date(ts.tm_year, ts.tm_mon, ts.tm_mday) + datetime.timedelta(days = - day_index + on_duty_period_in_days - 1))
          return on_duty_list[index], day_index + 1, start_day, end_day, on_duty_list[(index+1)%len(on_duty_list)]
      
      
      # 周四、每周一提醒本周值班人員,下周值班人員
      notify_counter = 0
      on_duty_person_this_week = ''
      While True:
          timeTs = int(time.time())
          timeStr = DatetimeStr(timeTs)
          on_duty_person, day, start_day, end_day, on_duty_person_next = WhoIsOnDuty(timeTs)
          if on_duty_person != on_duty_person_this_week:
              on_duty_person_this_week = on_duty_person
              notify_counter = 0
              SendMessage(notify_template.safe_substitute({
                  'on_duty_person_this_week': on_duty_person,
                  'on_duty_person_next_week': on_duty_person_next,
                  'on_duty_range': '~'.join([start_day, end_day]),
              }))
              notify_counter += 1
          else:
              if notify_counter < 2 and day in notify_days:
                  SendMessage(notify_template.safe_substitute({
                      'on_duty_person_this_week': on_duty_person,
                      'on_duty_person_next_week': on_duty_person_next,
                      'on_duty_range': '~'.join([start_day, end_day]),
                  }))
                  notify_counter += 1
          time.sleep(1)
      

      效果如下:
      picture 1

      這里留個(gè)思考題給讀者,歡迎評論區(qū)交流。

      • 如何實(shí)現(xiàn)臨時(shí)調(diào)班的功能?
      • 調(diào)用第三方API實(shí)現(xiàn)如公眾號提醒、短信提醒等

      如果覺得文章對你有些幫助,可以在微信公眾號關(guān)注:小而美實(shí)用Python,獲取更多新鮮文章。

      posted @ 2022-03-29 21:36  簡信君  閱讀(338)  評論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 亚洲熟妇丰满多毛xxxx| 国产999精品2卡3卡4卡| 国产成年码av片在线观看| 亚洲狼人久久伊人久久伊| www欧美在线观看| 国产不卡精品视频男人的天堂| 激情综合五月| 国产99在线 | 免费| 国产乱妇乱子视频在播放| 国产成人久久精品一区二区| 四虎在线成人免费观看| 亚洲综合一区无码精品| 亚洲国产精品成人无码区| 天天躁夜夜躁狠狠综合| 美欧日韩一区二区三区视频| 白丝乳交内射一二三区| 中西区| 亚洲成在人天堂一区二区| 成人拍拍拍无遮挡免费视频| 天堂V亚洲国产V第一次| 日韩有码中文字幕第一页| 国产精品午夜剧场免费观看| 疏附县| 国产成人啪精品视频免费软件 | 中文激情一区二区三区四区| 无码国产精品一区二区VR老人| 国产av国片精品一区二区| 91精品午夜福利在线观看| 乱人伦人妻中文字幕不卡| 亚洲综合黄色的在线观看 | 视频二区国产精品职场同事| 一道本AV免费不卡播放| 色综合一本到久久亚洲91| AV人摸人人人澡人人超碰| 免费无码又爽又刺激高潮虎虎视频| 精品女同一区二区三区在线| 在线免费成人亚洲av| 亚洲国产午夜福利精品| 在线精品国精品国产不卡| 精品人妻一区二区三区蜜臀| 中文字幕人妻丝袜美腿乱 |