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()
class InterviewPage: def __init__(self, loginName, loginPwd): self.rp = RequestsPage() self.ep = ElibPage(loginName, loginPwd) def ZDManage(self): print(self.subscriptionBooksImport()) print(self.subscriptionBooks()) print(self.directSubscription()) print(self.subscriptionVerify()) print(self.directVerify()) def subscriptionBooksImport(self): """ 征订书目导入功能 :return: """ with open('D:\Cache\Project\TJProject\list.xls', mode="rb+") as f: # 打开文件 file = { "excel": ('list.xls', f.read()), # 引号的file是接口的字段,后面的是文件的名称、文件的内容 "userToken": self.ep.getUserToken(), # 如果接口中有其他字段也可以加上 } res = self.rp.sendRequest('FILE', self.ep.getUrl() + '/service/api/e/interview/file/zdsmI', file).json() r = self.rp.sendRequest('POST', self.ep.getUrl() + '/service/api/e/interview/zdsm/import/main', { 'userToken': self.ep.getUserToken(), 'path': res['data']['path'], 'marcfbid': self.ep.getFblxid(isMore=False), 'zdpcid': self.ep.getZdpcid(isMore=False), 'isbn': 'ISBN,0', 'ztming': '正题名,0', 'zrsming': '责任者, 1', 'cbzhe': '出版社, 1', 'cbrqi': '出版日期, 1', 'cbdi': '出版社, 1', 'flhao': '分类号, 1', 'jge': '价格, 1' }).json() return r['message'] def subscriptionBooks(self): """ 征订书目预订功能 :return: """ # 先在 预订单管理 设置第一个为工作预定单 self.rp.sendRequest('POST', self.ep.getUrl() + '/service/api/e/interview/work/save', { 'userToken': self.ep.getUserToken(), 'ydpcid': self.ep.getYdd()[0] }) # 获取征订目录列表 res = self.rp.sendRequest('POST', self.ep.getUrl() + '/service/api/e/interview/zdpc/search', { 'userToken': self.ep.getUserToken(), 'pageNumber': 1, 'pageSize': 50 }).json() # 获取图书信息 r = self.rp.sendRequest('POST', self.ep.getUrl() + '/service/api/e/interview/zdsm/search', { 'userToken': self.ep.getUserToken(), 'zdpcid': res['data']['dataList'][0]['zdpcid'], 'pageNumber': 1, 'pageSize': 50 }).json() # 判断图书信息中价格是否存在 price = 0 if 'jge' in dict(r): price = int(self.rp.matchNumber(r['data']['page']['dataList'][0]['jge'])) # 获取预订单信息 yd = self.rp.sendRequest('POST', self.ep.getUrl() + '/service/api/e/interview/yd/pcList', { 'userToken': self.ep.getUserToken() }).json() # 预订 result = self.rp.sendRequest('POST', self.ep.getUrl() + '/service/api/e/interview/yd/smSave', { 'userToken': self.ep.getUserToken(), 'cygName': yd['data'][0]['cygName'], 'ysName': yd['data'][0]['ysName'], 'marcid': r['data']['page']['dataList'][0]['marcid'], 'gysName': yd['data'][0]['gysName'], 'ydbhao': '', 'ydpcid': yd['data'][0]['ydpcid'], 'ceshu': 1, 'ydlaiyuan': '订购', 'yjhbid': self.ep.getHbList(isMore='NO'), 'jzleixing': '纸张', 'yuanjia': price, 'zdfangshi': '平装', 'ydhbid': self.ep.getHbList(isMore='NO'), 'juance': 1, 'jiage': price, 'fuzhu': '', 'zdpcdm': res['data']['dataList'][0]['zdpcdm'], 'ydpcdm': self.ep.getZdsmReserve(zdpcid=res['data']['dataList'][0]['zdpcid'], zdsmid=r['data']['page']['dataList'][0]['zdsmid']), 'ysCode': yd['data'][0]['ysCode'], 'zdpcid': self.ep.getZdpcid(isMore='NO'), 'gysCode': yd['data'][0]['gysCode'], 'ydleixing': '征订预订' }).json() print(result['message']) # 操作成功! def directSubscription(self): """ 直接预订功能 :return: """ # 先在 预订单管理 设置第一个为工作预定单 self.rp.sendRequest('POST', self.ep.getUrl() + '/service/api/e/interview/work/save', { 'userToken': self.ep.getUserToken(), 'ydpcid': self.ep.getYdd()[0] }) # 获取图书信息 res = self.rp.sendRequest('POST', self.ep.getUrl() + '/service/api/e/interview/yd/searchBook', { 'userToken': self.ep.getUserToken(), 'pageNumber': 1, 'pageSize': 50, 'flag': 1 }).json() # 征订书目-直接预订 r = self.ep.getZdsmReserve(marcid=res['data']['dataList'][0]['marcid']) # 预定 result = self.rp.sendRequest('POST', self.ep.getUrl() + '/service/api/e/interview/yd/smSave', { 'userToken': self.ep.getUserToken(), 'cygName': r['data']['cygName'], 'ysName': r['data']['ysName'], 'marcid': r['data']['marcid'], 'gysName': r['data']['gysName'], 'ydbhao': '', 'ydpcid': r['data']['ydpcid'], 'ceshu': 1, 'ydlaiyuan': '订购', 'yjhbid': self.ep.getHbList(isMore='NO'), 'jzleixing': '纸张', 'yuanjia': 0, 'zdfangshi': '平装', 'ydhbid': self.ep.getHbList(isMore='NO'), 'juance': 1, 'jiage': 0, 'fuzhu': '', 'ydpcdm': 1, 'ysCode': r['data']['ysCode'], 'gysCode': r['data']['gysCode'], 'ydleixing': '直接预订' }).json() print(result['message']) # 操作成功! 已超出预算金额,不能预订! def subscriptionVerify(self): """ 预订验收功能 :return: """ # 先在 验收单管理 设置第一个为工作验收单 self.rp.sendRequest('POST', self.ep.getUrl() + '/service/api/e/interview/work/save', { 'userToken': self.ep.getUserToken(), 'yspcid': self.ep.getYsd()[0] }) # 获取图书信息 res = self.rp.sendRequest('POST', self.ep.getUrl() + '/service/api/e/interview/yd/smSearch', { 'userToken': self.ep.getUserToken(), 'pageNumber': 1, 'pageSize': 50, 'from': 1, 'flag': 1 }).json() # 获取索书号 r = self.rp.sendRequest('POST', self.ep.getUrl() + '/service/api/e/interview/ys/curSshao', { 'userToken': self.ep.getUserToken(), 'marcid': res['data']['dataList'][0]['marcid'] }).json() # 验收 numList = list() for i in range(res['data']['dataList'][0]['ceshu']): numDict = dict() numDict['barcode'] = "TS" + str(random.randint(1, 10000)).zfill(5) numDict['libId'] = self.ep.getLibid() numDict['czId'] = self.ep.getCzid(isMore='NO') numDict['ltlxId'] = self.ep.getLtlxid(isMore='NO') numList.append(numDict) # '[' # '{"barcode": "test100", "libId": "2", "czId": "ebd840b69bc04948859cd05a4da638b3", "ltlxId": "1"},' # '{"barcode": "test101", "libId": "2", "czId": "ebd840b69bc04948859cd05a4da638b3", "ltlxId": "1"}' # ']', result = self.rp.sendRequest('POST', self.ep.getUrl() + '/service/api/e/interview/ys/smSave', { 'userToken': self.ep.getUserToken(), 'marcid': res['data']['dataList'][0]['marcid'], 'yslxing': '预订验收', 'yspcid': self.ep.getYsd()[0], 'collectionDtos': json.dumps(numList), 'yjhbid': self.ep.getHbList(isMore='NO'), 'yuanjia': res['data']['dataList'][0]['jiage'], 'cejia': res['data']['dataList'][0]['jiage'], 'ydlaiyuan': '订购', 'ydhbid': self.ep.getHbList(isMore='NO'), 'jiage': res['data']['dataList'][0]['jiage'], 'taojia': res['data']['dataList'][0]['jiage'], 'jzleixing': '纸张', 'zdfangshi': '平装', 'juance': 1, 'fuben': res['data']['dataList'][0]['ceshu'], 'sshao': r['data']['sshao'], 'ydRecord': res['data']['dataList'][0]['ydRecord'], 'ydsmid': res['data']['dataList'][0]['ydsmid'], 'ydjge': res['data']['dataList'][0]['jiage'] }).json() print(result['message']) def directVerify(self): """ 快捷验收功能 :return: """ # 先在 验收单管理 设置第一个为工作验收单 self.rp.sendRequest('POST', self.ep.getUrl() + '/service/api/e/interview/work/save', { 'userToken': self.ep.getUserToken(), 'yspcid': self.ep.getYsd()[0] }) # 获取图书信息 res = self.rp.sendRequest('POST', self.ep.getUrl() + '/service/api/e/interview/yd/searchBook', { 'userToken': self.ep.getUserToken(), 'pageNumber': 1, 'pageSize': 50, 'flag': 1 }).json() # 获取索书号 r = self.rp.sendRequest('POST', self.ep.getUrl() + '/service/api/e/interview/yd/searchBookByMarcid', { 'userToken': self.ep.getUserToken(), 'marcid': res['data']['dataList'][0]['marcid'] }).json() print(r['data']['sshao']) # 验收 numList = list() for i in range(res['data']['dataList'][0]['fuben']+1): numDict = dict() numDict['barcode'] = "TS" + str(random.randint(1, 10000)).zfill(5) numDict['libId'] = self.ep.getLibid() numDict['czId'] = self.ep.getCzid(isMore='NO') numDict['ltlxId'] = self.ep.getLtlxid(isMore='NO') numList.append(numDict) result = self.rp.sendRequest('POST', self.ep.getUrl() + '/service/api/e/interview/ys/smSave', { 'userToken': self.ep.getUserToken(), 'marcid': res['data']['dataList'][0]['marcid'], 'yslxing': '直接验收', 'yspcid': self.ep.getYsd()[0], 'collectionDtos': json.dumps(numList), 'yjhbid': self.ep.getHbList(isMore='NO'), 'yuanjia': r['data']['jge'], 'cejia': r['data']['jge'], 'ydlaiyuan': '订购', 'ydhbid': self.ep.getHbList(isMore='NO'), 'jiage': r['data']['jge'], 'taojia': r['data']['jge'], 'jzleixing': '纸张', 'zdfangshi': '平装', 'juance': 1, 'fuben': res['data']['dataList'][0]['fuben']+1, 'sshao': r['data']['sshao'], }).json() print(result['message'])