|
|
import pymysql
|
|
|
import logging
|
|
|
import datetime
|
|
|
|
|
|
def ShowList(conn,CardNum):
|
|
|
if(CardNum==""):
|
|
|
return "借书证号不能为空"
|
|
|
try:
|
|
|
cursor=conn.cursor()
|
|
|
sql="select * from card where cnum=%s"
|
|
|
cursor.execute(sql,CardNum)
|
|
|
result=cursor.fetchone()
|
|
|
#要看输入的卡号是不是有效的
|
|
|
if result is None:
|
|
|
return "无效的借书证号"
|
|
|
|
|
|
sql="select bnum,bname,btime,rtime,times from book natural join borrow where cnum=%s"
|
|
|
cursor.execute(sql,CardNum)
|
|
|
result=cursor.fetchall()
|
|
|
return result
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
logging.exception(e)
|
|
|
return e
|
|
|
|
|
|
def Borrow(conn,CardNum,BookNum):
|
|
|
if(CardNum=="" or BookNum==""):
|
|
|
return "不能为空"
|
|
|
try:
|
|
|
cursor=conn.cursor()
|
|
|
sql="select times,rtime from borrow where cnum=%s and bnum=%s"
|
|
|
cursor.execute(sql,(CardNum,BookNum))
|
|
|
times=cursor.fetchone()
|
|
|
if times is None:
|
|
|
pass
|
|
|
elif times[0]==1:
|
|
|
r_time=times[1]
|
|
|
r_time=r_time+datetime.timedelta(days=30)
|
|
|
r_time=r_time.strftime("%Y-%m-%d %H:%M:%S")
|
|
|
sql="update borrow set times=0,rtime=%s where cnum=%s and bnum=%s"
|
|
|
cursor.execute(sql,(r_time,CardNum,BookNum))
|
|
|
conn.commit()
|
|
|
return (1,r_time)
|
|
|
elif times[0]==0:
|
|
|
return "续借次数已达上限"
|
|
|
#前面要判断是否是续借,允许续借一次
|
|
|
#判断完不是续借之后,还要判断是否借书数量已经达到上限
|
|
|
sql="select numbers from card where cnum=%s"
|
|
|
cursor.execute(sql,CardNum)
|
|
|
result=cursor.fetchone()
|
|
|
if result[0]>=10:
|
|
|
return "借书数量超出上限"
|
|
|
else:
|
|
|
numbers=result[0]+1
|
|
|
#
|
|
|
sql="select bname,collection from book where bnum=%s"
|
|
|
cursor.execute(sql,BookNum)
|
|
|
result=cursor.fetchone()
|
|
|
#此处的判断逻辑其实不是很好。。。先判断了是否超出上限,再判断的书是否存在。可能会导致用户为了借一本不存在的书,先去还书,回来才发现根本没有这本书
|
|
|
if result is None:
|
|
|
return "借书失败,书号不存在"
|
|
|
if result[1]!=0:
|
|
|
#借书成功
|
|
|
bname=result[0]
|
|
|
collection=result[1]-1
|
|
|
sql="update book set collection=%s where bnum=%s"
|
|
|
cursor.execute(sql,(collection,BookNum))
|
|
|
b_time= datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
|
r_time=(datetime.datetime.now()+datetime.timedelta(days=30)).strftime("%Y-%m-%d %H:%M:%S")
|
|
|
sql="insert into borrow values(%s,%s,%s,%s,1)"
|
|
|
cursor.execute(sql,(CardNum,BookNum,b_time,r_time))
|
|
|
sql="update card set numbers=%s where cnum=%s"
|
|
|
cursor.execute(sql,(numbers,CardNum))
|
|
|
conn.commit()
|
|
|
return (0,r_time,bname)
|
|
|
else:
|
|
|
#借书失败,因为库存不足
|
|
|
#关于如何返回最早的还书时间这一点明天再说
|
|
|
#查到的方法中,最起码可以把两个表join然后比较
|
|
|
#但是我比较想用聚合函数来做,因为简单(datatime类型的数据不知道能不能用聚合函数)答案是能!
|
|
|
sql="select min(rtime) from borrow where bnum=%s"
|
|
|
cursor.execute(sql,BookNum)
|
|
|
result=cursor.fetchone()
|
|
|
r_time=result[0]
|
|
|
r_time=r_time.strftime('%Y-%m-%d %H:%M:%S')
|
|
|
return (2,r_time)
|
|
|
|
|
|
except Exception as e:
|
|
|
logging.exception(e)
|
|
|
conn.rollback()
|
|
|
return e |