class Reader: def __init__(self): self.rp = RequestsPage() # self.rpp = ReadPage() self.ep = ElibPage('YZ', 'Td123456') self.slp = DBPage('book') def addReader(self): """ 创建读者 :return: 无返回 """ l = list() # 获取随机值,插如 tb_reader 中 # self.slp.addReader(self.ep.getRandomReaderID()) for n in self.rp.getRandomReaderID(): sex = self.ep.getXingbie() dzdw = self.rp.randomValue(self.ep.getDzdw()) if sex == 1: l.append((n, '男', dzdw, '', '', 0, 0, 0, 0)) else: l.append((n, '女', dzdw, '', '', 0, 0, 0, 0)) # 发送添加读者的请求 self.rp.sendRequest( 'POST', self.ep.getUrl() + '/service/api/e/flow/readerManager/readerManagerSave', { "userToken": self.ep.getUserToken(), "dzzhao": n, # 读者证号 "xming": n, # 姓名 "ztai": "正常", # 状态 "mima": "123456", # 密码 "dzlxid": self.ep.getDzlxid(isMore=False), # 读者类型 "jzrqi": self.rp.nowTime(ty='end'), # 截止日期 "qyrqi": self.rp.nowTime(ty='now'), # 启用日期 "libid": self.ep.getLibid(), # 馆id "smrz": "0", "zhuanye": "其他", "zhiwu": "无", "zcheng": "无", "xueli": "其他", "xingbie": sex, "yajin": "0", "zhiye": "其他", "jycshu": "0", "yycshu": "0", "xjcshu": "0", "wzcshu": "0", "gjhjcshu": "0", "qkuan": "0", "dzdw": dzdw, "registerPlaceId": self.rp.randomValue(self.ep.getRegisterPlaceId()) # 办证地点 }) # 添加到数据库中 self.slp.addReader(l) self.slp.addTotal([(len(l), 0, 0, 0, str(self.rp.nowTime()))]) def deleteReader(self): """ 删除读者 :return: 无返回 """ l = list() # requests 模拟接口必要参数 res = self.rp.sendRequest( 'POST', self.ep.getUrl() + '/service/api/e/flow/readerManager/readerManagerList', { 'userToken': self.ep.getUserToken(), 'libid': self.ep.getLibid(), 'pageNumber': 1, 'pageSize': 50 }).json() for dataList in res['data']['dataList']: # 获取所有读者id,添加到列表中 l.append(dataList['dzid']) # 发送请求删除所有读者 self.rp.sendRequest( 'POST', self.ep.getUrl() + '/service/api/e/flow/readerManager/readerManagerDel', { 'userToken': self.ep.getUserToken(), 'dzid': ','.join(l) }) # 清空数据库 self.slp.deleteReader()
class CirculationPage: def __init__(self, loginName, loginPwd): self.rp = RequestsPage() self.ep = ElibPage(loginName, loginPwd) def BRRManage(self): """ 借还续功能验证 :return: None """ for r2 in self.getReaderForAdd(): print(self.operateBook(r2, '借')) print(self.operateBook(r2, '续')) print(self.operateBook(r2, '还')) for r1 in self.getReader(): print(self.operateBook(r1, '借')) print(self.operateBook(r1, '续')) print(self.operateBook(r1, '还')) def getReader(self): readerList = list() # for i in self.ep.getDzlxid('more'): for data in self.ep.getReaderList()['data']['dataList']: # isOverTime = False # 判断是否超借 r = self.rp.sendRequest( 'POST', self.ep.getUrl() + '/service/api/e/flow/doclx/curBro', { 'userToken': self.ep.getUserToken(), 'readerBarcode': data['dzzhao'] }).json() if len(r['data']) == 0: readerList.append(data['dzzhao']) break # for d in r['data']: # if d['jyztai'] == '超期': # isOverTime = True # break # if isOverTime is False: return tuple(readerList) def getReaderForAdd(self): """ 创建读者 :return: Tuple """ readerList = list() for n in self.rp.getRandomReaderID(): # 发送添加读者的请求 res = self.rp.sendRequest( 'POST', self.ep.getUrl() + '/service/api/e/flow/readerManager/readerManagerSave', { "userToken": self.ep.getUserToken(), "dzzhao": n, # 读者证号 "xming": n, # 姓名 "ztai": "正常", # 状态 "mima": "123456", # 密码 "dzlxid": self.ep.getDzlxid(isMore=False), # 读者类型 "jzrqi": "2020-10-31", # 截止日期 "qyrqi": "2020-08-01", # 启用日期 "libid": self.ep.getLibid(), # 馆id "smrz": "0", "zhuanye": "其他", "zhiwu": "无", "zcheng": "无", "xueli": "其他", "xingbie": self.ep.getXingbie(), "yajin": "100", "zhiye": "其他", "jycshu": "0", "yycshu": "0", "xjcshu": "0", "wzcshu": "0", "gjhjcshu": "0", "qkuan": "0", "dzdw": self.rp.randomValue(self.ep.getDzdw()) # "registerPlaceId": self.rp.randomValue(self.ep.getRegisterPlaceId()) # 办证地点 }).json() if res['message'] == '操作成功!': readerList.append(n) return tuple(readerList) def operateBook(self, reader, state): """ 借书、还书、续借功能 :param reader: 读者 :param state: 借 / 续 / 还 :return: String """ res_sm = self.rp.sendRequest( 'POST', self.ep.getUrl() + '/service/api/e/catalog/catalogue/list', { 'userToken': self.ep.getUserToken(), 'libid': self.ep.getLibid(), 'pageNumber': 1, 'pageSize': 1000, 'userType': 1, 'dateType': 1 }).json() for data in res_sm['data']['dataList']: res_gc = self.rp.sendRequest( 'POST', self.ep.getUrl() + '/service/api/e/book/listByCatalogue', { 'userToken': self.ep.getUserToken(), 'pageNumber': 1, 'pageSize': 1000, 'marctyId': data['marctyid'], 'isShow': 0 }).json() # 书目馆藏数量不等于0 if res_gc['data']['count'] != 0: for d in res_gc['data']['page']['dataList']: if d['ztai'] == '在馆' and state == '借': broResult = self.rp.sendRequest( 'POST', self.ep.getUrl() + '/service/api/e/flow/doclx/bro', { 'userToken': self.ep.getUserToken(), 'readerBarcode': reader, 'bookBarcode': d['tiaoma'] }).json() return broResult['message'] # message=借阅成功 elif d['ztai'] == '借出' and state == '续': renResult = self.rp.sendRequest( 'POST', self.ep.getUrl() + '/service/api/e/flow/doclx/ren', { 'userToken': self.ep.getUserToken(), 'readerBarcode': reader, 'bookBarcode': d['tiaoma'] }).json() return renResult['message'] # message=续借成功! elif d['ztai'] == '借出' and state == '还': retResult = self.rp.sendRequest( 'POST', self.ep.getUrl() + '/service/api/e/flow/doclx/ret', { 'userToken': self.ep.getUserToken(), 'isSameCz': 1, 'bookBarcode': d['tiaoma'] }).json() return retResult['message'] # message=还书成功! else: # print('数据错误') pass
class Book: def __init__(self): self.rp = RequestsPage() self.ep = ElibPage('YZ', 'Td123456') self.slp = DBPage('book') def copyBooks(self, num): """ 编目-回溯建库 此方法用于给每书目添加馆藏 :param num: 每个书目添加多少馆藏(填写100那么每本书添加100条馆藏数据) :return: 无返回 """ # 保存图书信息的 list l = list() # 馆藏信息中的条码号,用于循环递增 count = 0 # 发送 requests 请求,获取书目信息(这是一个 json 值) res_1 = self.rp.sendRequest( 'POST', self.ep.getUrl() + '/service/api/e/catalog/catalogue/list', { 'userToken': self.ep.getUserToken(), 'pageNumber': 1, 'pageSize': 50, 'libId': self.ep.getLibid(), 'userType': 1, 'dateType': 1 }).json() # 循环 requests 返回的书目信息,处理数据 for dataList in res_1['data']['dataList']: bookDefault = self.rp.sendRequest( 'POST', self.ep.getUrl() + '/service/api/e/book/bookDefault', { 'userToken': self.ep.getUserToken(), 'marctyId': dataList['marctyid'] }).json() # print(bookDefault) # # 处理返回值,获取 著者 字段 # fl = self.rp.matchString(dataList['fieldList']) # # 处理没有 著者 字段的图书,返回一个空值 # if len(fl) == 0: # fl = [''] # 添加信息到 list 中 l.append( (dataList['ztming'], dataList['zrsming'], dataList['isbn'], dataList['cbzhe'], bookDefault['data']['author'], dataList['flhao'], 0, 0, 0)) # 循环值,判断什么时候跳出while循环 loopValue = 0 while True: # 循环次数递增 loopValue += 1 # 条码递增 count += 1 # 发送 requests 请求,给每本书一条条添加馆藏 self.rp.sendRequest( 'POST', self.ep.getUrl() + '/service/api/e/book/save', { 'userToken': self.ep.getUserToken(), 'ztai': bookDefault['data']['bookDeault']['ztai'], 'tiaoma': 'YZ' + str(count).zfill(5), 'bookCodes': 'YZ' + str(count).zfill(5), 'sshao': bookDefault['data']['sshao'], 'gysid': self.ep.getGysid(isMore=False), 'batchid': self.rp.randomValue(self.ep.getBatchid()), 'ltlxid': self.ep.getLtlxid(isMore=False), 'cygid1': bookDefault['data']['bookDeault']['cygid1'], 'cygid0': bookDefault['data']['bookDeault']['cygid0'], 'ysuanid': self.ep.getYsid(isMore=False), 'marctyId': dataList['marctyid'], 'cejia': bookDefault['data']['bookDeault']['cejia'], 'taojia': bookDefault['data']['bookDeault']['taojia'], 'czid0': self.ep.getCzid(isMore=False), 'czid1': self.ep.getCzid(isMore=False), 'bookNum': 1, 'flhao': bookDefault['data']['fzqfhDTO']['flhao'], 'zchao': bookDefault['data']['fzqfhDTO']['zchao'], 'ljf': bookDefault['data']['fzqfhDTO']['ljf'], 'fzqfh': bookDefault['data']['fzqfhDTO']['fzqfh'], 'purchasePrice': '', 'purchaseDiscount': '', 'jcmshu': '', 'beizhu': '', 'sellPrice': '', 'wxlyuan': '', 'jzleixing': '', 'zdfangshi': '', 'sellDiscount': '' }).json() # 控制什么时候跳出死循环,每本书目添加 num 本馆藏后跳出,添加下一本 if loopValue >= num: break # 更新数据,将图书信息添加到 tb_book 数据库中 self.slp.addBook(l) def borrowBooks(self): """ 流通-借还管理-借出 此方法用于给读者随机借书 :return:无返回 """ # 将所有图书条码添加到集合中,检查所有添加的条码是否重复 checkDoubleValue = set() # 将每个用户借的图书条码添加到集合中,获取单个用户接了哪几本书 temp_bro = set() # 获取 tb_total 表的数据 tb = self.slp.selectTotal() # 获取 tb_reader 表的数据 selectData = self.slp.selectReader() for tup_1 in selectData: # 将数据库中所有用户的条码添加到集合中查重,防止多次运行借书数据库数据与业务系统对不上 checkDoubleValue = checkDoubleValue | self.rp.modifyTuples(tup_1) for tup_2 in selectData: # 循环值,判断什么时候跳出while循环 loopValue = 0 # 获取随机借书数量(每个人借多少本) a = random.randint(1, 20) # 将个人之前借的书添加到集合中 temp_bro = temp_bro | self.rp.modifyTuples(tup_2) while True: # 获取随机图书条码 randomValue = 'YZ' + str(random.randint(1, 1000)).zfill(5) # 对比图书条码是否已在数据库中存在,存在就不发送借书请求 if randomValue in checkDoubleValue: print('获取随机图书已重复') else: # 发送借书请求 self.rp.sendRequest( 'POST', self.ep.getUrl() + '/service/api/e/flow/doclx/bro', { 'userToken': self.ep.getUserToken(), 'readerBarcode': tup_2[1], 'bookBarcode': randomValue }) # 所有图书集合 / 个人图书集合添加图书 checkDoubleValue.add(randomValue) temp_bro.add(randomValue) # 循环次数自增 loopValue += 1 # 当循环次数大于等于个人借书随机数,跳出循环 if loopValue >= a: # 更新数据,将读者信息更新到 tb_reader 数据库中 self.slp.updateReader((tup_2[1], tup_2[2], tup_2[3], str(temp_bro), tup_2[5], int(tup_2[6] + len(temp_bro)), int(tup_2[7] + len(temp_bro)), tup_2[8], tup_2[9], tup_2[0])) # 清空个人借书集合,防止插入数据库值错误 temp_bro.clear() break # 处理数据获取借阅数量,返回值是一个 list t = self.rp.modifyNum(checkDoubleValue) # 用于 list 下标递增 lv = 0 for tup_3 in self.slp.selectBook(): # 更新数据,将图书信息更新到 tb_book 数据库中 self.slp.updateBook( (tup_3[1], tup_3[2], tup_3[3], tup_3[4], tup_3[5], tup_3[6], t[lv], tup_3[8], tup_3[9], tup_3[0])) # 下标递增 lv += 1 # 更新数据,将统计信息更新到 tb_total 数据库中 self.slp.updateTotal( (tb[0], int(tb[1]) + len(checkDoubleValue), tb[2], tb[3], str(self.rp.nowTime()))) def returnBooks(self): """ 流通-借还管理-归还 此方法用于给读者随机还书 :return:无返回 """ # 获取 tb_total 表的数据 tb = self.slp.selectTotal() # 好像没用,但是懒得删,怕爆炸 :) count = 0 # temp_bro 用于存放借出图书;temp_ret 用于存放还回图书,循环一次会清空 temp_bro = set() temp_ret = set() # temp_bro_all 用于存放借出图书;temp_ret_all 用于存放还回图书,不会清空 temp_bro_all = set() temp_ret_all = set() # 循环从数据库中取出的 tb_reader 表信息 for tup in self.slp.selectReader(): # 获取数据库中用户借的图书条码,添加到集合中 temp_bro = temp_bro | self.rp.modifyTuples(tup) # 如果借出是空的,就不发送借书请求,更新 tb_reader 数据库 if len(temp_bro) == 0: self.slp.updateReader( (tup[1], tup[2], tup[3], "", tup[5], len(temp_bro), tup[7], int(tup[8]) - len(temp_bro), tup[9], tup[0])) else: # 获取还书随机值 loopValue = random.randint(1, len(temp_bro)) while loopValue > 0: # 好像没软用,不敢删 :) count += 1 # 获取集合中的任意一个条码 temp = temp_bro.pop() # 将还回条码添加到还回集合中 temp_ret.add(temp) # 发送 requests 请求,用户还书 self.rp.sendRequest( 'POST', self.ep.getUrl() + '/service/api/e/flow/doclx/ret', { 'userToken': self.ep.getUserToken(), 'isSameCz': '1', 'bookBarcode': temp }) # 递减到0退出循环 loopValue -= 1 # 数据库中借书为空时运行程序容易把set()插入数据库中,做下处理 # 如果借书为空,传空字符串 if str(temp_bro) == 'set()': self.slp.updateReader( (tup[1], tup[2], tup[3], '', str(temp_ret), len(temp_bro), tup[7], int(tup[7]) - len(temp_bro), tup[9], tup[0])) # 借书不为空,就把信息更新到 tb_reader 数据库中 else: self.slp.updateReader( (tup[1], tup[2], tup[3], str(temp_bro), str(temp_ret), len(temp_bro), tup[7], int(tup[7]) - len(temp_bro), tup[9], tup[0])) # 将每个人的借/还书添加到一个集合中 temp_bro_all = temp_bro_all | temp_bro temp_ret_all = temp_ret_all | temp_ret # 清空集合,防止程序错误 temp_bro.clear() temp_ret.clear() # 处理数据,获取各图书的还数量 tba = self.rp.modifyNum(temp_bro_all) tra = self.rp.modifyNum(temp_ret_all) # 用于 list 下标递增 lv = 0 # 更新数据,将图书信息更新到 tb_book 数据库中 for tup_3 in self.slp.selectBook(): self.slp.updateBook( (tup_3[1], tup_3[2], tup_3[3], tup_3[4], tup_3[5], tup_3[6], tba[lv], tra[lv], tup_3[9], tup_3[0])) # 下标递增 lv += 1 # 更新数据,将统计信息更新到 tb_total 数据库中 self.slp.updateTotal( (tb[0], tb[1], tb[2] + count, tb[3], str(self.rp.nowTime()))) def renewBooks(self): """ 流通-借还管理-续借 此方法用于给读者随机续借 :return:无返回 """ # 保存每个用户借阅的图书 temp = set() # 所有用户借阅的图书 tenp_all = set() # 统计数据用 count = 0 # 获取 tb_total 表的数据 tb = self.slp.selectTotal() # 循环从数据库中取出的 tb_reader 表信息 for tup in self.slp.selectReader(): # 循环值,判断什么时候跳出while循环 loopValue = 1 # 获取数据库中用户借的图书条码,添加到集合中 temp = temp | self.rp.modifyTuples(tup) # print(temp) # 空的不处理 if len(temp) != 0: # 获取续借随机值(每个用户续借多少本) a = random.randint(1, len(temp)) while a >= loopValue: # 获取set中的任意值 t = temp.pop() # 将所有续借条码添加到集合中 tenp_all.add(t) count += 1 # 发送 requests 请求,用户续借 self.rp.sendRequest( 'POST', self.ep.getUrl() + '/service/api/e/flow/doclx/ren', { 'userToken': self.ep.getUserToken(), 'readerBarcode': tup[1], 'bookBarcode': t }) loopValue += 1 # 更新数据,将统计信息更新到 tb_reader 数据库中 self.slp.updateReader((tup[1], tup[2], tup[3], tup[4], tup[5], tup[6], tup[7], tup[8], a, tup[0])) temp.clear() # 处理数据,获取各图书的续借数量 t = self.rp.modifyNum(tenp_all) # 用于 list 下标递增 lv = 0 # 更新数据,将图书信息更新到 tb_book 数据库中 for tup_3 in self.slp.selectBook(): self.slp.updateBook( (tup_3[1], tup_3[2], tup_3[3], tup_3[4], tup_3[5], tup_3[6], tup_3[7], tup_3[8], t[lv], tup_3[0])) # 下标递增 lv += 1 # 更新数据,将统计信息更新到 tb_total 数据库中 self.slp.updateTotal( (tb[0], tb[1], tb[2], tb[3] + count, str(self.rp.nowTime()))) def allReturnBooks(self): """ 流通-借还管理-归还 此方法用于给读者全部归还 :return:无返回 """ # 发送 requests 请求,用户归还条码1~1000的图书 for n in range(1, 1001): self.rp.sendRequest( 'POST', self.ep.getUrl() + '/service/api/e/flow/doclx/ret', { 'userToken': self.ep.getUserToken(), 'isSameCz': '1', 'bookBarcode': 'YZ' + str(n).zfill(5) }) def clearBooks(self): """ 流通-借还管理-归还 此方法用于清除所有馆藏图书 :return:无返回 """ # 用于存储馆藏书目的id l = list() # 清空前先把书都还了 self.allReturnBooks() # 发送 requests 请求,获取书目信息,返回 json 值 res_1 = self.rp.sendRequest( 'POST', self.ep.getUrl() + '/service/api/e/catalog/catalogue/list', { 'userToken': self.ep.getUserToken(), 'pageNumber': 1, 'pageSize': 50, 'libId': self.ep.getLibid(), 'userType': 1, 'dateType': 1 }).json() # 处理数据 for dataList in res_1['data']['dataList']: # 发送 requests 请求,获取馆藏信息,返回 json 值 res_2 = self.rp.sendRequest( 'POST', self.ep.getUrl() + '/service/api/e/book/listByCatalogue', { 'userToken': self.ep.getUserToken(), 'marctyId': dataList['marctyid'], 'pageSize': 1000, 'pageNumber': 1, 'isShow': 0 }).json() for r in res_2['data']['page']['dataList']: # 将要删除的馆藏 id 添加到列表中 l.append(r['shuceid']) # 发送 requests 请求,删除馆藏信息,返回 json 值 self.rp.sendRequest('POST', self.ep.getUrl() + '/service/api/e/book/delete', { 'userToken': self.ep.getUserToken(), 'shuceIds': ','.join(l) }).json() self.slp.deleteTotal() self.slp.deleteBook()