def get_order(car_id): all_order_money = 0.0 order_number = 0 result = sale_handler.get_sale_info_by_one_key('carId', car_id) sale_info_list = defaultdict(list) print(car_id) for data in result: attribute = OrderedDict() attribute['单位'] = data['unit'] attribute['数量'] = data['number'] attribute['单价'] = data['unit_price'] attribute['小计'] = data['subtotal'] attribute['总价'] = data['total'] attribute['品牌'] = data['brand_name'] attribute['型号'] = data['model_name'] for attr in sale_item_handler.get_item_info_buy_sale_id( data['sale_id']): attribute[attr['name']] = attr['attribute_value'] pc_sign = data['pcSign'] try: price = float(attribute.pop("总价", 0)) except Exception as e: print(e) price = 0 print(price) all_order_money += price order_no = data[1] order_check_id = data[10] msg = { "project": data[7], "price": price, 'attribute': attribute, } if order_no not in sale_info_list.keys(): # 如果没有保存此项则新建 temp = { "createdTime": data[0], "msg": [msg], "orderNo": order_no, "orderCheckId": order_check_id, 'pcSign': pc_sign, } temp["totalPrice"] = price sale_info_list[order_no] = temp else: temp = sale_info_list[order_no] temp["totalPrice"] = price + temp.get("totalPrice") temp["msg"].append(msg) sale_info_list[order_no] = temp result = list() for k, v in sale_info_list.items(): result.append(v) order_number += 1 print(result) return result, order_number, all_order_money
def get_order(car_id): all_order_money = 0.0 order_number = 0 result = sale_handler.get_sale_info_by_one_key('carId', car_id) sale_info_list = defaultdict(list) print(car_id) for data in result: attribute = OrderedDict(json.loads(data[8])) pc_sign = data[11] try: price = float(attribute.pop("总价", 0)) except Exception as e: print(e) price = 0 print(price) all_order_money += price order_no = data[1] order_check_id = data[10] msg = { "project": data[7], "price": price, 'attribute': attribute, } if order_no not in sale_info_list.keys(): # 如果没有保存此项则新建 temp = { "createdTime": data[0], "msg": [msg], "orderNo": order_no, "orderCheckId": order_check_id, 'pcSign': pc_sign, } temp["totalPrice"] = price sale_info_list[order_no] = temp else: temp = sale_info_list[order_no] temp["totalPrice"] = price + temp.get("totalPrice") temp["msg"].append(msg) sale_info_list[order_no] = temp result = list() for k, v in sale_info_list.items(): result.append(v) order_number += 1 print(result) return result, order_number, all_order_money
def import_sale_detail(self, file_name, widget): bk = xlrd.open_workbook(file_name) try: sh = bk.sheet_by_name("消费列表") except Exception as e: print(e) sh = bk.sheet_by_name("Sheet1") rows = sh.nrows temp = list() title_list = ['检索ID', 'orderNo', 'createdTime', "pcSign", "carId", "carUser", "carPhone", "carModel", "workerName", "project"] user_list = ["carId", "carUser", "carPhone", "carModel"] must_len = len(title_list) title = sh.row_values(1) match_result = self._is_from_export(str(sh.row_values(0)[0])) progress_dialog = QProgressDialog(widget) progress_dialog.setWindowTitle("导入中") from PyQt5.QtCore import Qt progress_dialog.setWindowModality(Qt.WindowModal) progress_dialog.setMinimumDuration(4) progress_dialog.setWindowTitle(widget.tr("请等待")) progress_dialog.setLabelText(widget.tr("导入中...")) progress_dialog.setCancelButtonText(widget.tr("取消")) progress_dialog.setRange(0, rows - 3) progress_dialog.show() if True: p = 0 msg_list = list() for i in range(2, rows): # 用正则表达式判断第一行数据内容,从而判断是否用软件导出的EXCEL文档 if match_result: # 若是用软件导出的则 if progress_dialog.wasCanceled(): break progress_dialog.setValue(p) p += 1 try: # if True: save_data = dict() row_data = sh.row_values(i) if i < rows - 1: temp2 = sh.row_values(i + 1) else: temp2 = None if not temp2 and temp2[0] == '': # 合并了单元格则合并内容是空,将后面不是空的内容进行缓存,合并的内容会在最后一条信息中显示, # 此时一并进行录入 temp.append(row_data) else: # if row_data[0] != '': if temp: order_check_id = temp[0][0] else: order_check_id = row_data[0] check_order = get_sale_info_by_one_key("orderCheckId", order_check_id) # 有此订单的就不保存了 if not check_order: if temp: temp.append(row_data) all_msg = temp[0] # 接入信息后录入 for j in range(len(temp)): if j != 0: msg = temp[j] attribute = {} for ki in range(len(title)): all_msg[ki] = str(all_msg[ki]) msg[ki] = str(msg[ki]) if ki < must_len: temp_key = title_list[ki] if temp_key in ['orderNo', 'carPhone']: all_msg[ki] = all_msg[ki].replace('.0', "") msg[ki] = msg[ki].replace('.0', "") if title_list[ki] in ["project"]: save_data[temp_key] = msg[ki] else: if temp_key == "检索ID": temp_key = "orderCheckId" save_data[temp_key] = all_msg[ki] else: if row_data[ki] == "" or row_data[ki] == "-": continue attribute[title[ki]] = msg[ki] save_data['attribute'] = json.dumps(attribute) save_data['id'] = get_order_id() sale_handler.add_sale_info(save_data) row_data = all_msg attribute = {} user_save = {} for ki in range(len(title)): row_data[ki] = str(row_data[ki]) if ki < must_len: if title_list[ki] in ['orderNo', 'carPhone']: row_data[ki] = row_data[ki].replace('.0', "") key = title_list[ki] if key == "检索ID": key = "orderCheckId" save_data[key] = row_data[ki] # 保存用户信息 if key in user_list: user_save[key] = row_data[ki] else: if row_data[ki] == "" or row_data[ki] == "-": continue attribute[title[ki]] = row_data[ki] user = check_customer(user_save.get("carPhone"), user_save.get("carId")) if not user: # 没有此用户则添加 key = "userName,carPhone,carModel,carId,createdTime" value = "'{}','{}','{}','{}','{}'".format(user_save.get("carUser"), user_save.get("carPhone"), user_save.get("carModel"), user_save.get("carId"), get_now()) try: self.database_handler.InsertData("User", key, value) except Exception as e: print(e) pass save_data['attribute'] = json.dumps(attribute) save_data['id'] = get_order_id() sale_handler.add_sale_info(save_data) # 清空缓存 temp = list() except Exception as e: print(e) continue else: # 若不是用软件导出的EXCEL文档则 # 先整理参数,全部变成列表,列表里面是字典,字典的key就是title try: row_data = sh.row_values(i) temp_data = dict() for k in range(len(title)): temp_data[title[k]] = row_data[k] msg_list.append(temp_data) except Exception as e: print(e) continue if not match_result: save_list = defaultdict(list) for msg in msg_list: if not msg.get("消费时间") or not msg.get("车牌号"): continue key = msg.get("消费时间") + msg.get("车牌号") save_list[key].append(msg) # 插入信息 must = ["订单号", "接待门店", "车牌号", "车主姓名", "联系电话", "车型", "操作人员", "消费项目", "消费时间"] for k, v in save_list.items(): if progress_dialog.wasCanceled(): break progress_dialog.setValue(p) p += 1 order_check_id = get_order_id() # 对同一个订单进行录入 user_save = {} for tempDict in v: order_no = str(tempDict.pop("订单号")) if tempDict.get("订单号", "") != "" else "-" pc_sign = tempDict.pop("接待门店", "") if tempDict.get("接待门店", "") != "" else "-" car_id = tempDict.pop("车牌号") if tempDict.get("车牌号") != "" else "-" car_user = tempDict.pop("车主姓名", "") if tempDict.get("车主姓名", "") != "" else "-" car_phone = str(tempDict.pop("联系电话", "-")).replace(".0", "") if tempDict.get("联系电话", "") != "" else "-" car_model = tempDict.pop("车型", "") if tempDict.get("车型", "") != "" else "-" worker_name = tempDict.pop("操作人员", "") if tempDict.get("操作人员", "") != "" else "-" project = tempDict.pop("消费项目", "") if tempDict.get("消费项目", "") != "" else "-" created_time = str(tempDict.pop("消费时间")).replace(".", "-") # 保存用户信息 user_save["carId"] = car_id if car_id != '-' else "" user_save["carUser"] = car_user if car_user != '-' else "" user_save["carPhone"] = (car_phone if car_phone != '-' else "").replace(".0", "") user_save['carModel'] = car_model if car_model != '-' else "" if order_no != "-": check_order = get_sale_info_by_one_key("orderNo", order_no) if check_order: break save_data = { "orderNo": order_no.replace(".0", ""), "createdTime": created_time, "pcSign": pc_sign, "carId": car_id, "carUser": car_user, "carPhone": car_phone, "carModel": car_model, "workerName": worker_name, "project": project, "orderCheckId": order_check_id, "id": get_order_id(), } temp_attribute = tempDict attribute = dict() for key, value in temp_attribute.items(): if k not in must: if value == "": continue attribute[key] = str(value) try: gsf = float(attribute.get("工时费")) if attribute.get("工时费") != "" else 0 sl = float(attribute.get("数量")) if attribute.get("数量") != "" else 0 dj = float(attribute.get("单价")) if attribute.get("单价") != "" else 0 attribute["总价"] = gsf + sl * dj except Exception as e: print(e) pass save_data["attribute"] = json.dumps(attribute) sale_handler.add_sale_info(save_data) if user_save.get("carId") and user_save.get("carPhone"): # 当有用户信息的时候判断是否需要自动添加 user = check_customer(user_save.get("carPhone"), user_save.get("carId")) if not user: # 没有此用户则添加 key = "userName,carPhone,carModel,carId,createdTime" value = "'{}','{}','{}','{}','{}'".format(user_save.get("carUser"), user_save.get("carPhone"), user_save.get("carModel"), user_save.get("carId"), get_now()) try: self.database_handler.InsertData("User", key, value) except Exception as e: print(e) pass # 最后全部导入 progress_dialog.setValue(rows - 3) progress_dialog.close()
def print_html(printer): try: if not myconnect: raise ApiException(ErrorCode.ErrorRequest) code = config.get_local_register_code() url = domain + "store/api/detail?code={}".format(code) req = requests.get(url=url) result_data = json.loads(req.text) except Exception as e: logger.error(e.__str__()) store = config.get_local_store_info() result_data = { 'data': { "pcId": store.id(), "pcPhone": store.phone(), "pcAddress": store.address(), "pcSign": store.name(), }, 'code': 200 } mustSet = ['数量', '单价', '小计', '总价', '单位', '备注'] if result_data.get("code") != 200: storeName = "" pcAddress = "" pcPhone = "" else: storeName = result_data.get("data").get("pcSign", "") pcAddress = result_data.get("data").get("pcAddress", "") pcPhone = result_data.get("data").get("pcPhone", "") result = get_sale_info_by_one_key("orderCheckId", selectOrderNo) font_size = config.get_print_font_size() # *{font-size:65px;} if result: header = """<html> <style> table{ background-color:#000000; } .linetd{ text-align: center; width: 820px; color: red; height: 30px; } .halftd{ width: 410px; } #content{ text-align: center; position: relative; top: 50%; transform: translateY(-50%); } td{ padding:2px; align:center; border:1px solid black; background-color:#ffffff } """ + "*{font-size:" + str(font_size) + "pt;}" + ".bigWord{font-size:" + str( font_size * 1.5) + "pt;}" + "</style><head></head>" # *{font-size:50px;} tdWidth = 19 body = """ <body style="text-align: center;"> <table width=100% CELLPADDING="0" CELLSPACING="1" border="0"> <tr> <td class="bigWord" align="center" colspan="100" width="100%"> {storeName} </td> </tr> <tr> <td colspan="50">车牌号:{carId}</td> <td colspan="50">销售日期:{createdTime}</td> </tr> <tr> <td colspan="50">客户电话:{carPhone}</td> <td colspan="50">销售单号:<span style="">{orderNo}</span></td> </tr> <tr> <td colspan="100" height="20px"> </td> </tr> """.format(storeName=storeName, carId=result[0][2], createdTime=result[0][0], carPhone=result[0][4], orderNo=result[0][1]) content = "" xuhao = 1 zongjia = 0 page = 0 pageHeight = 100 for order in result: page += 1 attribute = json.loads(order[8]) baseHeight = 180 # 手动排序 # mustSet = ['数量','单价','小计','总价','单位','备注'] # 去除mustset后的必然顺序为:"品牌","型号","工时费","更换里程" # 后面用字符串排序key来排序 tempKeyList2 = ["品牌", "型号", "工时费", "更换里程"] tempKeyList = list() for t in tempKeyList2: if attribute.get(t) and attribute.get(t) != '-': tempKeyList.append(t) for k, v in attribute.items(): if k not in mustSet + ["品牌", "型号", "工时费", "更换里程"] and v != "-" and v != "" and k != "检索ID": tempKeyList.append(k) tempKeyList.sort() noMustSet = OrderedDict() for k in tempKeyList: noMustSet[k] = attribute.get(k) # 总长度要减去备注和名称,因为名称长度另外设置,备注不打印 td = "" keyDict = dict() i = 0 j = 0 tdList = list() keyList = list() pageHeight += int(len(noMustSet.keys()) / 5 + 1) * 60 + baseHeight for k, v in noMustSet.items(): # if k not in mustSet and v != "-" and v != "" and k!="检索ID" : td += "<td colspan=\"{tdWidth}\" align=\"center\"><b>{key}</b></td>".format(tdWidth=tdWidth, key=k) keyList.append(k) if i >= 4: i = 0 tdList.append(td) td = "" keyDict[j] = keyList keyList = list() j += 1 else: i += 1 # 补齐 if keyList: if len(keyList) < 5: num = len(keyList) for i in range(5 - num): keyList.append("") td += "<td colspan=\"{tdWidth}\" align=\"center\"></td>".format(tdWidth=tdWidth) tdList.append(td) keyDict[j] = keyList # 序号合并列数 xuNum = len(tdList) * 2 + 2 # createdTime,orderNo,carId,carUser,carPhone,carModel,workerName,project,brand," \ # "model,huawen,number,unitPrice,xiaoji,gongshi,ghlc,remark,totalPrice,pcId,unit content += """ <tr> <td colspan="5" align="center"><b>序</b></td> <td colspan="{tdWidth}" align="center"><b>名称</b></td> <td colspan="{tdWidth}" align="center"><b>单位</b></td> <td colspan="{tdWidth}" align="center"><b>数量</b></td> <td colspan="{tdWidth}" align="center"><b>单价</b></td> <td colspan="{tdWidth}" align="center"><b>小计</b></td> </tr> <tr> <td rowspan="{xuNum}" colspan="5" align="center"><br/>{xuhao}</td> <td colspan="{tdWidth}" align="center">{project}</td> <td colspan="{tdWidth}" align="center">{unit}</td> <td colspan="{tdWidth}" align="center">{number}</td> <td colspan="{tdWidth}" align="center">{unitPrice}</td> <td colspan="{tdWidth}" align="center">{xiaoji}</td> </tr> """.format(xuNum=xuNum, xuhao=xuhao, unit=attribute.get("单位", ""), number=attribute.get("数量", ""), unitPrice=attribute.get("单价", ""), xiaoji=attribute.get('小计', ""), project=order[7], tdWidth=tdWidth) moreContent = "" ii = 0 for td in tdList: # 先放入表头 moreContent += "<tr>" + td + "</tr>" # 再放入内容 moreContent += """ <tr> <td colspan="{tdWidth}" align="center">{one}</td> <td colspan="{tdWidth}" align="center">{two}</td> <td colspan="{tdWidth}" align="center">{three}</td> <td colspan="{tdWidth}" align="center">{four}</td> <td colspan="{tdWidth}" align="center">{five}</td> </tr> """.format(tdWidth=tdWidth, one=attribute.get(keyDict[ii][0], ""), two=attribute.get(keyDict[ii][1], ""), three=attribute.get(keyDict[ii][2], ""), four=attribute.get(keyDict[ii][3], ""), five=attribute.get(keyDict[ii][4], "")) ii += 1 fenge = """ <tr> <td colspan="100" height="20px"> </td> </tr> """ zongjiaconetent = """ <tr> <td colspan="95">总价:{zongjia}</td> </tr> """.format(zongjia=attribute.get('总价', "")) content += moreContent + zongjiaconetent + fenge xuhao += 1 try: zongjia += float(attribute.get('总价', 0)) except: zongjia = 0 zongjia = str(zongjia) cn = cncurrency(zongjia) foot = """ <tr> <td style="height:35px" colspan="70">合计人名币(大写):{cn}</td> <td style="height:35px" colspan="30">小写:{zongjia}</td> </tr> <tr> <td colspan="30">{storeName}</td> <td colspan="35">地址:{pcAddress}</td> <td colspan="35">联系电话:{pcPhone}</td> </tr> </table> </body> </html> """.format(cn=cn, zongjia=zongjia, storeName=storeName, pcPhone=pcPhone, pcAddress=pcAddress) html = header + body + content + foot textDocument = QTextDocument() textDocument.setHtml(html) textDocument.setDocumentMargin(35) printer.setPageSize(QPrinter.Custom) # height = baseHeight+((page-1)*150) # printer.setPaperSize(QSizeF(printer.logicalDpiX()*(86/25.4),height),QPrinter.Point) # textDocument.setPageSize(QSizeF(printer.logicalDpiX()*(86/25.4),height)) printer.setPaperSize(QSizeF(581, pageHeight), QPrinter.Point) textDocument.setPageSize(QSizeF(581, pageHeight)) textOp = QTextOption() textOp.setWrapMode(QTextOption.WrapAnywhere) textOp.setAlignment(Qt.AlignCenter) textDocument.setDefaultTextOption(textOp) printer.setOutputFormat(QPrinter.NativeFormat) textDocument.print(printer)
def ImportExcel(fileName, self): # 用于正则判断是否是用软件导出的excel文档 pattern = re.compile(r"^门店系统:\d{4}[-/]\d{2}[/-]\d{2}至\d{4}[-/]\d{2}[/-]\d{2}$") # matchs = pattern.match() bk = xlrd.open_workbook(fileName) try: sh = bk.sheet_by_name("消费列表") except: sh = bk.sheet_by_name("Sheet1") nrows = sh.nrows temp = list() titleList = ['检索ID', 'orderNo', 'createdTime', "pcSign", "carId", "carUser", "carPhone", "carModel", "workerName", "project"] userList = ["carId", "carUser", "carPhone", "carModel"] mustlen = len(titleList) check = str(sh.row_values(0)[0]) matchs = pattern.match(check) title = sh.row_values(1) progress_dialog = QProgressDialog(self) progress_dialog.setWindowTitle("导入中") progress_dialog.setWindowModality(Qt.WindowModal) progress_dialog.setMinimumDuration(4) progress_dialog.setWindowTitle(self.tr("请等待")) progress_dialog.setLabelText(self.tr("导入中...")) progress_dialog.setCancelButtonText(self.tr("取消")) progress_dialog.setRange(0, nrows - 3) progress_dialog.show() if True: p = 0 msgList = list() for i in range(2, nrows): # 用正则表达式判断第一行数据内容,从而判断是否用软件导出的EXCEL文档 if matchs: # 若是用软件导出的则 if progress_dialog.wasCanceled(): break progress_dialog.setValue(p) p += 1 try: # if True: saveData = dict() row_data = sh.row_values(i) if i < nrows - 1: temp2 = sh.row_values(i + 1) else: temp2 = None if temp2 != None and temp2[0] == '': # 合并了单元格则合并内容是空,将后面不是空的内容进行缓存,合并的内容会在最后一条信息中显示, # 此时一并进行录入 temp.append(row_data) else: # if row_data[0] != '': if temp: orderCheckId = temp[0][0] else: orderCheckId = row_data[0] checkOrder = get_sale_info_by_one_key("orderCheckId", orderCheckId) # 有此订单的就不保存了 if not checkOrder: if temp: temp.append(row_data) allMsg = temp[0] # 接入信息后录入 for i in range(len(temp)): if i != 0: msg = temp[i] attribute = {} for ki in range(len(title)): allMsg[ki] = str(allMsg[ki]) msg[ki] = str(msg[ki]) if ki < mustlen: tempK = titleList[ki] if tempK in ['orderNo', 'carPhone']: allMsg[ki] = allMsg[ki].replace('.0', "") msg[ki] = msg[ki].replace('.0', "") if titleList[ki] in ["project"]: saveData[tempK] = msg[ki] else: if tempK == "检索ID": tempK = "orderCheckId" saveData[tempK] = allMsg[ki] else: if row_data[ki] == "" or row_data[ki] == "-": continue attribute[title[ki]] = msg[ki] saveData['attribute'] = json.dumps(attribute) saveData['id'] = get_uuid1() dbhelp.add_sale_info(saveData) row_data = allMsg attribute = {} userSave = {} for ki in range(len(title)): row_data[ki] = str(row_data[ki]) if ki < mustlen: if titleList[ki] in ['orderNo', 'carPhone']: row_data[ki] = row_data[ki].replace('.0', "") key = titleList[ki] if key == "检索ID": key = "orderCheckId" saveData[key] = row_data[ki] # 保存用户信息 if key in userList: userSave[key] = row_data[ki] else: if row_data[ki] == "" or row_data[ki] == "-": continue attribute[title[ki]] = row_data[ki] user = check_customer(userSave.get("carPhone"), userSave.get("carId")) if not user: # 没有此用户则添加 key = "userName,carPhone,carModel,carId,createdTime" value = "'{}','{}','{}','{}','{}'".format(userSave.get("carUser"), userSave.get("carPhone"), userSave.get("carModel"), userSave.get("carId"), get_now()) try: # pass dbhelp.InsertData("User", key, value) except: pass saveData['attribute'] = json.dumps(attribute) saveData['id'] = get_uuid1() sale_handler.add_sale_info(saveData) # 清空缓存 temp = list() # if i == nrows - 1: # 此时是最后一组,则要进行录入 # else: # #合并了单元格则合并内容是空,将后面不是空的内容进行缓存,合并的内容会在最后一条信息中显示,此时一并进行录入 # temp.append(row_data) except: continue else: # 若不是用软件导出的EXCEL文档则 # for i in range(2,nrows): # 先整理参数,全部变成列表,列表里面是字典,字典的key就是title try: row_data = sh.row_values(i) tempData = dict() for k in range(len(title)): tempData[title[k]] = row_data[k] msgList.append(tempData) except: continue if not matchs: saveList = defaultdict(list) for msg in msgList: if not msg.get("消费时间") or not msg.get("车牌号"): continue key = msg.get("消费时间") + msg.get("车牌号") saveList[key].append(msg) # 插入信息 must = ["订单号", "接待门店", "车牌号", "车主姓名", "联系电话", "车型", "操作人员", "消费项目", "消费时间"] for k, v in saveList.items(): if progress_dialog.wasCanceled(): break progress_dialog.setValue(p) p += 1 orderCheckId = get_uuid1() # 对同一个订单进行录入 userSave = {} for tempDict in v: orderNo = str(tempDict.pop("订单号")) if tempDict.get("订单号", "") != "" else "-" pcSign = tempDict.pop("接待门店", "") if tempDict.get("接待门店", "") != "" else "-" carId = tempDict.pop("车牌号") if tempDict.get("车牌号") != "" else "-" carUser = tempDict.pop("车主姓名", "") if tempDict.get("车主姓名", "") != "" else "-" carPhone = str(tempDict.pop("联系电话", "-")).replace(".0", "") if tempDict.get("联系电话", "") != "" else "-" carModel = tempDict.pop("车型", "") if tempDict.get("车型", "") != "" else "-" workerName = tempDict.pop("操作人员", "") if tempDict.get("操作人员", "") != "" else "-" project = tempDict.pop("消费项目", "") if tempDict.get("消费项目", "") != "" else "-" createdTime = str(tempDict.pop("消费时间")).replace(".", "-") # 保存用户信息 userSave["carId"] = carId if carId != '-' else "" userSave["carUser"] = carUser if carUser != '-' else "" userSave["carPhone"] = (carPhone if carPhone != '-' else "").replace(".0", "") userSave['carModel'] = carModel if carModel != '-' else "" if orderNo != "-": checkOrder = get_sale_info_by_one_key("orderNo", orderNo) if checkOrder: break saveData = { "orderNo": orderNo.replace(".0", ""), "createdTime": createdTime, "pcSign": pcSign, "carId": carId, "carUser": carUser, "carPhone": carPhone, "carModel": carModel, "workerName": workerName, "project": project, "orderCheckId": orderCheckId, "id": get_uuid1(), } tempAttribute = tempDict attribute = dict() for k, v in tempAttribute.items(): if k not in must: if v == "": # v = '-' continue attribute[k] = str(v) try: gsf = float(attribute.get("工时费")) if attribute.get("工时费") != "" else 0 sl = float(attribute.get("数量")) if attribute.get("数量") != "" else 0 dj = float(attribute.get("单价")) if attribute.get("单价") != "" else 0 attribute["总价"] = gsf + sl * dj except: pass saveData["attribute"] = json.dumps(attribute) dbhelp.add_sale_info(saveData) if userSave.get("carId") and userSave.get("carPhone"): # 当有用户信息的时候判断是否需要自动添加 user = check_customer(userSave.get("carPhone"), userSave.get("carId")) if not user: # 没有此用户则添加 key = "userName,carPhone,carModel,carId,createdTime" value = "'{}','{}','{}','{}','{}'".format(userSave.get("carUser"), userSave.get("carPhone"), userSave.get("carModel"), userSave.get("carId"), get_now()) try: # pass dbhelp.InsertData("User", key, value) except: pass # 最后全部导入 progress_dialog.setValue(nrows - 3) progress_dialog.close()
def order(self, keyword, para_data): try: if self.request.method == 'POST': if keyword == "add": today = datetime.now() order_no = get_sale_order_no(today) para_data["orderNo"] = order_no para_data["createdTime"] = today print(keyword) try: car_user = para_data.get("carUser") user_id = para_data.get("userId") worker_id = para_data.get("workerId") pc_id = para_data.get("pcId") car_phone = para_data.get("carPhone") car_model = para_data.get("carModel") car_id = para_data.get("carId") pc_sign = para_data.get("pcSign") worker_name = para_data.get("workerName") order_check_id = get_uuid1() save_data = { 'createdTime': para_data.get("createdTime").strftime( "%Y-%m-%d %H:%M:%S"), 'userId': user_id, 'pcId': pc_id, 'pcSign': pc_sign, 'carId': car_id, 'workerName': worker_name, 'workerId': worker_id, 'carUser': car_user, 'carPhone': car_phone, 'carModel': car_model, "orderNo": order_no, "orderCheckId": order_check_id, 'code': config.get_local_register_code(), } parameter = para_data.get("parameter", []) if type(parameter) == str: parameter = json.loads(parameter) page = 0 for data in parameter: page += 1 order_id = get_uuid1() services = data.get('project') services = services.split('-') first_service_name = services[0] second_service_name = services[1] first_service_id = service_handler.get_service_id_by_name( first_service_name)[0] second_service_id = service_handler.get_service_id_by_name( second_service_name, first_service_id)[0] attributes = data.get('attribute') logger.info(attributes) try: unit = attributes.get('单位', '') unit_price = float(attributes.get('单价', '')) number = int(attributes.get('数量', '')) subtotal = float(attributes.get('小计', '')) total = float(attributes.get('总价', '')) note = attributes.get('备注', '') model = attributes.get('型号', '') brand = attributes.get('品牌', '') except Exception as attribute_deal_error: logger.error(attribute_deal_error) unit = '' unit_price = 0.0 number = 0 subtotal = 0.0 total = 0.0 note = '' model = '' brand = '' temp = { 'project': data.get('project'), 'id': order_id, 'attribute': json.dumps(attributes, ensure_ascii=False), 'serviceId': second_service_id, 'unit': unit, 'unit_price': unit_price, 'number': number, 'subtotal': subtotal, 'total': total, 'note': note } db_transaction_util.begin() logger.info('增加销售数据') logger.info(temp.__str__()) logger.info(save_data.__str__()) sale_id = sale_handler.add_sale_info( dict(temp, **save_data)) service_attributes = service_handler.get_attribute_by_service( second_service_id) all_required_attr = attribute_handler.get_all_required_attributes( ) required_attr_list = [] for attr in all_required_attr: required_attr_list.append(attr[1]) logger.info('增加销售扩展属性') for srv_attr in service_attributes: attr_name = srv_attr[1] if attr_name not in required_attr_list: attr_id = attribute_handler.get_attr_by_name( attr_name)[0] sale_item_handler.add_sale_item( sale_id, attr_id, attributes.get(attr_name, '')) # 库存信息更新 logger.info('更新库存信息') stock_service.refresh_stock_info( sale_id, brand, model, number, unit, second_service_id) # 回访设置 if data.get("callbackTime"): logger.info('增加回访信息') customer_handler.add_return_visit_data( data.get("callbackTime"), car_phone, car_id, car_user, today) db_transaction_util.commit() except Exception as add_error: logger.error(add_error) logger.error('traceback.format_exc():\n{}'.format( traceback.format_exc())) db_transaction_util.rollback() raise ApiException(ErrorCode.ParameterMiss) try: p = "defaultPrinter" # 打印机名称 html, page_height = self.preview_html(para_data, True) logger.info('\n' + html) Printer.printing(p, html, page_height) except: pass return set_return_dicts({"orderNo": order_no}) elif keyword == 'preview': html = self.preview_html(para_data) logger.info('\n' + html) return set_return_dicts(html) else: raise ApiException(ErrorCode.ErrorRequest) elif self.request.method == "GET": if not self.storeId: raise ApiException(ErrorCode.PCError) if keyword == "detail": check_order_id = para_data.get("checkOrderId") if not check_order_id: raise ApiException(ErrorCode.ParameterMiss) if self.connect: result_dict = SocketServer("orderdetail {} {}".format( self.storeId, check_order_id)) else: result = get_sale_info_by_one_key( "orderCheckId", check_order_id) result_list = list() result_dict = {} if result: created_time = '' car_id = '' car_user = '' car_phone = '' car_model = '' total_price = 0 order_no = '' for data in result: attribute = OrderedDict() for attr in sale_item_handler.get_item_info_buy_sale_id( data['sale_id']): attribute[ attr['name']] = attr['attribute_value'] logger.info('销售数据属性调整后的记录:' + attribute.__str__()) created_time = data['createdTime'] car_id = data['carId'] car_user = data['carUser'] car_phone = data['carPhone'] car_model = data['carModel'] price = data['unit_price'] pc_id = data['pcId'] order_no = data['orderNo'] if pc_id: total_price += price attribute['project'] = data['project'] attribute['totalPrice'] = price attribute['orderNo'] = order_no result_list.append(attribute) try: pc_sign = config.get_store_name() except: pc_sign = "" result_dict = { "msg": result_list, "totalPrice": total_price, "createdTime": created_time, "carId": car_id, "carUser": car_user, "carPhone": car_phone, "carModel": car_model, "orderNo": order_no, "checkOrderId": check_order_id, "pcSign": pc_sign, } if result_dict == 'restart': raise ApiException(ErrorCode.ReStartPC) return set_return_dicts(result_dict) else: raise ApiException(ErrorCode.ErrorRequest) except ApiException as e: return set_return_dicts(forWorker=e.error_result['forWorker'], code=e.error_result['errorCode'], forUser=e.error_result['forUser'])
def server_handle(client): print('客户端线程已经启动 , 等待其它客户端连接') while True: try: data, addr = myClient.recvfrom(BUFSIZ) except Exception as e: print(e) break data = data.decode() print("我收到:{}".format(data)) dataWord = data.split(" ") heard = dataWord[0] if data == "": client.close() break else: if heard == 'xiaofei': startTime = dataWord[1] endTime = dataWord[2] result = DbHelp.GetXiaoFeiTable(startTime, endTime) self.send_message(result) elif heard == 'user': key = dataWord[1] value = dataWord[2] # 模糊获取用户信息 result = get_like_customer_by_key(value) userList = list() for data in result: # userName,carModel,carPhone,carId userList.append({ "userId": data[0], "userName": data[1], "carModel": data[2], "phone": data[3], "carId": data[4], }) result = { "user": userList, } self.send_message(result) elif heard == 'userorder': carId = dataWord[1] carPhone = dataWord[2] # result = dbhelp.GetXiaoFeiByTwoKey(carId,carPhone) result = get_sale_info_by_one_key(carId) xiaoFeiList = defaultdict(list) for data in result: attribute = OrderedDict(json.loads(data[8])) pcSign = data[11] try: price = float(attribute.pop("总价", 0)) except: price = 0 orderNo = data[1] orderCheckId = data[10] msg = { "project": data[7], "price": price, 'attribute': attribute, } if orderNo not in xiaoFeiList.keys(): # 如果没有保存此项则新建 temp = { "createdTime": data[0], "msg": [msg], "orderNo": orderNo, "orderCheckId": orderCheckId, 'pcSign': pcSign, } temp["totalPrice"] = price xiaoFeiList[orderNo] = temp else: temp = xiaoFeiList[orderNo] temp["totalPrice"] = price + temp.get("totalPrice") temp["msg"].append(msg) xiaoFeiList[orderNo] = temp resultList = list() for k, v in xiaoFeiList.items(): resultList.append(v) self.send_message(resultList) elif heard == "orderdetail": checkOrderId = dataWord[1] result = get_sale_info_by_one_key(checkOrderId, True) resultList = list() resultDict = {} if result: createdTime = '' carId = '' carUser = '' carPhone = '' carModel = '' totalPrice = 0 pcId = '' orderNo = '' for data in result: attribute = OrderedDict(json.loads(data[8])) createdTime = data[0] carId = data[2] carUser = data[3] carPhone = data[4] carModel = data[5] price = float(attribute.get("总价", 0)) pcId = data[9] orderNo = data[1] if pcId: totalPrice += price attribute['project'] = data[7] attribute['totalPrice'] = price attribute['orderNo'] = orderNo resultList.append(attribute) if pcId: pcSign = self.get_pc_name(pcId) resultDict = { "msg": resultList, "totalPrice": totalPrice, "createdTime": createdTime, "carId": carId, "carUser": carUser, "carPhone": carPhone, "carModel": carModel, "orderNo": orderNo, "checkOrderId": checkOrderId, "pcSign": pcSign, } self.send_message(resultDict)
def ImportExcel(self): #用于正则判断是否是用软件导出的excel文档 pattern = re.compile( r"^门店系统:\d{4}[-/]\d{2}[/-]\d{2}至\d{4}[-/]\d{2}[/-]\d{2}$") # matchs = pattern.match() bk = xlrd.open_workbook(fileName) sh = bk.sheet_by_name("消费列表") nrows = sh.nrows temp = list() titleList = [ 'orderCheckId', 'orderNo', 'createdTime', "pcSign", "carId", "carUser", "carPhone", "carModel", "workerName", "project" ] userList = ["carId", "carUser", "carPhone", "carModel"] mustlen = len(titleList) check = sh.row_values(0)[0] matchs = pattern.match(check) title = sh.row_values(1) #用正则表达式判断第一行数据内容,从而判断是否用软件导出的EXCEL文档 if matchs: #若是用软件导出的则 for i in range(2, nrows): try: saveData = dict() row_data = sh.row_values(i) if row_data[0] != '': checkOrder = get_sale_info_by_one_key( "orderCheckId", row_data[0]) #有此订单的就不保存了 if not checkOrder: if temp: #接入信息后录入 for msg in temp: attribute = {} for ki in range(len(title)): if ki < mustlen: if titleList[ki] in ["project"]: saveData[ titleList[ki]] = msg[ki] else: saveData[titleList[ ki]] = row_data[ki] else: attribute[title[ki]] = msg[ki] saveData['attribute'] = json.dumps( attribute) saveData['id'] = GetOrderId() dbhelp.add_sale_info(saveData) attribute = {} userSave = {} for ki in range(len(title)): if ki < mustlen: key = titleList[ki] saveData[key] = row_data[ki] #保存用户信息 if key in userList: userSave[key] = row_data[ki] else: attribute[title[ki]] = row_data[ki] user = check_customer(userSave.get("carPhone"), userSave.get("carId")) if not user: #没有此用户则添加 key = "userName,carPhone,carModel,carId,createdTime" value = "'{}','{}','{}','{}','{}'".format( userSave.get("carUser"), userSave.get("carPhone"), userSave.get("carModel"), userSave.get("carId"), GetToday()) try: dbhelp.InsertData("User", key, value) except: pass saveData['attribute'] = json.dumps(attribute) saveData['id'] = GetOrderId() dbhelp.add_sale_info(saveData) #清空缓存 temp = list() else: #合并了单元格则合并内容是空,将后面不是空的内容进行缓存,合并的内容会在最后一条信息中显示,此时一并进行录入 temp.append(row_data) except: continue else: #若不是用软件导出的EXCEL文档则 msgList = list() for i in range(2, nrows): #先整理参数,全部变成列表,列表里面是字典,字典的key就是title try: row_data = sh.row_values(i) tempData = dict() for k in range(len(title)): tempData[title[k]] = row_data[k] msgList.append(tempData) except: continue saveList = defaultdict(list) for msg in msgList: if not msg.get("消费时间") or not msg.get("车牌号"): continue key = msg.get("消费时间") + msg.get("车牌号") saveList[key].append(msg) #插入信息 must = [ "订单号", "接待门店", "车牌号", "车主姓名", "联系电话", "车型", "操作人员", "消费项目", "消费时间" ] for k, v in saveList.items(): orderCheckId = GetOrderId() #对同一个订单进行录入 userSave = {} for tempDict in v: orderNo = tempDict.pop("订单号") if tempDict.get( "订单号", "") != "" else "-" pcSign = tempDict.pop( "接待门店", "") if tempDict.get("接待门店", "") != "" else "-" carId = tempDict.pop( "车牌号") if tempDict.get("车牌号") != "" else "-" carUser = tempDict.pop( "车主姓名", "") if tempDict.get("车主姓名", "") != "" else "-" carPhone = str(tempDict.pop("联系电话", "-")).replace( ".0", "") if tempDict.get("联系电话", "") != "" else "-" carModel = tempDict.pop( "车型", "") if tempDict.get("车型", "") != "" else "-" workerName = tempDict.pop( "操作人员", "") if tempDict.get("操作人员", "") != "" else "-" project = tempDict.pop( "消费项目", "") if tempDict.get("消费项目", "") != "" else "-" createdTime = str(tempDict.pop("消费时间")).replace(".", "-") #保存用户信息 userSave["carId"] = carId if carId != '-' else "" userSave["carUser"] = carUser if carUser != '-' else "" userSave["carPhone"] = carPhone if carPhone != '-' else "" userSave['carModel'] = carModel if carModel != '-' else "" if orderNo != "-": checkOrder = get_sale_info_by_one_key( "orderNo", orderNo) if checkOrder: break saveData = { "orderNo": orderNo, "createdTime": createdTime, "pcSign": pcSign, "carId": carId, "carUser": carUser, "carPhone": carPhone, "carModel": carModel, "workerName": workerName, "project": project, "orderCheckId": orderCheckId, "id": GetOrderId(), } tempAttribute = tempDict attribute = dict() for k, v in tempAttribute.items(): if k not in must: if v == "": v = '-' attribute[k] = v try: gsf = float(attribute.get( "工时费")) if attribute.get("工时费") != "" else 0 sl = float(attribute.get( "数量")) if attribute.get("数量") != "" else 0 dj = float(attribute.get( "单价")) if attribute.get("单价") != "" else 0 attribute["总价"] = gsf + sl * dj except: pass saveData["attribute"] = json.dumps(attribute) dbhelp.add_sale_info(saveData) if userSave.get("carId") and userSave.get("carPhone"): #当有用户信息的时候判断是否需要自动添加 user = check_customer(userSave.get("carPhone"), userSave.get("carId")) if not user: #没有此用户则添加 key = "userName,carPhone,carModel,carId,createdTime" value = "'{}','{}','{}','{}','{}'".format( userSave.get("carUser"), userSave.get("carPhone"), userSave.get("carModel"), userSave.get("carId"), GetToday()) try: dbhelp.InsertData("User", key, value) except: pass
def ApiOrder(self, keyWord, getData): try: if self.request.method == 'POST': if keyWord == "add": today = datetime.now() orderNo = get_sale_order_no(today) getData["orderNo"] = orderNo getData["createdTime"] = today print(keyWord) try: # if True: carUser = getData.get("carUser") userId = getData.get("userId") workerId = getData.get("workerId") pcId = getData.get("pcId") carPhone = getData.get("carPhone") carModel = getData.get("carModel") carId = getData.get("carId") pc_sign = getData.get("pcSign") workerName = getData.get("workerName") root = 'config.ini' basicMsg = configparser.ConfigParser() basicMsg.read(root) orderCheckId = get_order_id() saveData = { 'createdTime': getData.get("createdTime").strftime( "%Y-%m-%d %H:%M:%S"), 'userId': userId, 'pcId': pcId, 'pcSign': pc_sign, 'carId': carId, 'workerName': workerName, 'workerId': workerId, 'carUser': carUser, 'carPhone': carPhone, 'carModel': carModel, "orderNo": orderNo, "orderCheckId": orderCheckId, 'code': basicMsg.get("msg", "code"), } parameter = getData.get("parameter", []) if type(parameter) == str: parameter = json.loads(parameter) page = 0 for data in parameter: page += 1 order_id = get_order_id() services = data.get('project') services = services.split('-') first_service_name = services[0] second_service_name = services[1] first_service_id = service_handler.get_service_id_by_name( first_service_name)[0] second_service_id = service_handler.get_service_id_by_name( second_service_name, first_service_id)[0] attributes = data.get('attribute') print(attributes) try: unit = attributes.get('单位', '') unit_price = float(attributes.pop('单价', '')) number = int(attributes.get('数量', '')) subtotal = float(attributes.get('小计', '')) total = float(attributes.get('总价', '')) note = attributes.get('备注', '') except Exception as attribute_deal_error: print(attribute_deal_error) unit = '' unit_price = 0.0 number = 0 subtotal = 0.0 total = 0.0 note = '' temp = { 'project': data.get('project'), 'id': order_id, 'attribute': json.dumps(data.get('attribute')), 'serviceId': second_service_id, 'unit': unit, 'unit_price': unit_price, 'number': number, 'subtotal': subtotal, 'total': total, 'note': note } sale_id = sale_handler.add_sale_info( dict(temp, **saveData)) service_attrs = service_handler.get_attribute_by_service( second_service_id) print(service_attrs) all_required_attr = attribute_handler.get_all_required_attributes( ) required_attr_list = [] for attr in all_required_attr: required_attr_list.append(attr[1]) for srv_attr in service_attrs: attr_name = srv_attr[1] if attr_name not in required_attr_list: attr_id = attribute_handler.get_attr_by_name( attr_name)[0] sale_item_handler.add_sale_item( order_id, attr_id, attributes.get(attr_name, '')) # 回访设置 if data.get("callbackTime"): dbname = "CallBack" key = "{},{},{},{},{},{}".format( "callbackTime", "phone", 'carId', "username", 'createdTime', 'state') value = "\'{}\',\'{}\',\'{}\',\'{}\',\'{}\',\'{}\'".format( data.get("callbackTime"), carPhone, carId, carUser, today, '0') self.dbhelp.InsertData(dbname, key, value) customer_handler.add_return_visit_data( data.get("callbackTime"), carPhone, carId, carUser, today) except Exception as add_error: print(add_error) raise ApiException(ErrorCode.ParameterMiss) try: # if True: # 打印 p = "defaultPrinter" # 打印机名称 html, pageHeight = self.preview_html(getData, True) Printer.printing(p, html, pageHeight) except: # raise ApiException(ErrorCode.PrinterError) pass return set_return_dicts({"orderNo": orderNo}) elif keyWord == 'preview': print('preview') html = self.preview_html(getData) print(html) return set_return_dicts(html) else: raise ApiException(ErrorCode.ErrorRequest) elif self.request.method == "GET": if not self.storeId: raise ApiException(ErrorCode.PCError) if keyWord == "detail": checkOrderId = getData.get("checkOrderId") if not checkOrderId: raise ApiException(ErrorCode.ParameterMiss) if self.connect: result_dict = SocketServer("orderdetail {} {}".format( self.storeId, checkOrderId)) else: result = get_sale_info_by_one_key( "orderCheckId", checkOrderId) resultList = list() result_dict = {} if result: createdTime = '' carId = '' carUser = '' carPhone = '' carModel = '' totalPrice = 0 pcId = '' orderNo = '' for data in result: attribute = OrderedDict(json.loads(data[8])) createdTime = data[0] carId = data[2] carUser = data[3] carPhone = data[4] carModel = data[5] price = data[16] pcId = data[9] orderNo = data[1] if pcId: totalPrice += price attribute['project'] = data[7] attribute['totalPrice'] = price attribute['orderNo'] = orderNo resultList.append(attribute) try: pc_sign = config.get_store_name() except: pc_sign = "" result_dict = { "msg": resultList, "totalPrice": totalPrice, "createdTime": createdTime, "carId": carId, "carUser": carUser, "carPhone": carPhone, "carModel": carModel, "orderNo": orderNo, "checkOrderId": checkOrderId, "pcSign": pc_sign, } if result_dict == 'restart': raise ApiException(ErrorCode.ReStartPC) # resultDict = {} return set_return_dicts(result_dict) else: raise ApiException(ErrorCode.ErrorRequest) except ApiException as e: return set_return_dicts(forWorker=e.error_result['forWorker'], code=e.error_result['errorCode'], forUser=e.error_result['forUser'])