zoukankan      html  css  js  c++  java
  • 关于广告位管理系统设计广告位销售记录表的设计

    需求:

          广告位表 P(编号,名称,目录,规格)

          广告位有三种状态,空闲,试用,已售

          一个广告位只能有一条当前有效销售记录(ETime>Now),不能在S表中添加开始时间不是当前时间使用记录,当然不能把以后的时间提前买给别的用户(预售)

      状态转换

         空闲--(启用)-->试用|已售

         试用--(转正)-->已售

         试用|已售--(中止)-->空闲

         试用|已售---(调整)-->试用|已售 注意,试用调整后依旧是试用,已售也一样

         试用|已售--(到期)--->空闲

         已售---(继费)-->已售

    ------------------------------------

        广告位的状态由销售表计算获得,需要能查看广告位的操作记录(状态转换前后记录)

       网站上有,有多用户并发的情况,需要启用事务--在状态转换时锁定销售记录表

       销售记录表S(编号,负责人,操作,开始时间,结束时间,广告位编号,状态,转换,IsCut,...)

      说明 S.BTime开始时间,S.ETime 结束时间

      IsCut=1表示为历史记录(可以考试使用历史表)不过直接标记成IsCut更便捷

      ------------------------------------

     查询空闲广告位

    Select ... From(

      Select p.编号,Max(s.ETime)

       P Left S On P.编号=S.广告位编号

       s.IsCut=0

      Group by P.编号) as t inner join 其他关联表

    Where t.ETime < getdate() or  (t.ETime is null) 

    -------------------------------------------------

    查询使用广告位(试用,已售)

    Select ... From p inner join S On p.编号=S.广告位编号

    Where s.IsCut=0 And s.Etime >=getdate()

     状态转换:

    1.读取S表的广告位编号为xxx并且ETime>=getdate() And IsCut=0的记录

    2.锁定S表,再次判断 IsCut=0是否成立

    3.设置IsCut=1

    4.插入状态改变后的新记录IsCut=0

    5.释放锁

  • 相关阅读:
    CopyOnWriteArrayList与ConcurrentHashMap
    Latch、Barrier、ThreadLocal
    Future和FutureTask
    SingleThreadExecutor、FixedThreadExecutor、CachedThreadPool、ScheduledThreadPoolExecutor
    ThreadPoolExecutor
    ConcurrentLinkedQueue
    PriorityBlockingQueue
    pom activeByDefault 不生效
    配置log4j2日志报错 Cannot find the declaration of element 'Configuration'
    顶级技术盛会KubeCon 2020,网易轻舟布道多云环境云原生应用交付
  • 原文地址:https://www.cnblogs.com/wdfrog/p/1767382.html
Copyright © 2011-2022 走看看