# -*- coding: utf-8 -*- # !/usr/bin/env python import hashlib import datetime from apilib.monetary import RMB from apps.web.core.db import Searchable, MonetaryField from mongoengine import StringField, DateTimeField, BooleanField, IntField, DoesNotExist class YiKaTongNorther(Searchable): northPort = StringField(verbose_name="域名端口 推送数据给对方平台的时候 服务器的地址", default="") md5Key = StringField(vebose_name="签名密钥 可以理解为 我方密码") meta = { "collection": "yi_ka_tong", "db_alias": "default" } def get_sig(self,datadict): keyList = list() for k in datadict: keyList.append(k) keyList.sort() valueList = list() for k in keyList: v = datadict[k] valueList.append(v) signData = '|'.join(valueList) signData = signData + '|' + str(self.md5Key) md5 = hashlib.md5() md5.update(signData.encode('utf-8')) sign = md5.hexdigest().upper() return sign def join_url(self,path): return "{ipPort}/{path}".format( ipPort=self.northPort, path=path ) # 建立一张表储存一卡通的卡详细信息,卡号,状态等 class YiKaTongCard(Searchable): customerId = StringField(verbose_name="一卡通平台唯一识别码", default="") userName= StringField(verbose_name="一卡通用户姓名", default="") userCode = StringField(verbose_name="个人编号", default="") oddFare = MonetaryField(verbose_name="电子账户余额", default = RMB('0.00')) custStatus = IntField(verbose_name = "卡状态", default = 1) cardNo = StringField(verbose_name="当前物理卡号", default="") pastCardNo = StringField(verbose_name="曾用过的物理卡号", default="") dateTimeAdded = StringField(verbose_name='设备添加进来的时间', default="") dateTimeUpdate = StringField(verbose_name='补卡时间', default="") meta = { "collection": "yi_ka_tong_card", "db_alias": "default" } @staticmethod def get_cardNo(cardNo): try: obj = YiKaTongCard.objects.get(cardNo=cardNo) except: return return obj.pastCardNo @staticmethod def update_card(cardInfo): cardNo = cardInfo.get("cardNo") customerId = str(cardInfo.get("customerId")) userName = cardInfo.get("userName") userCode = cardInfo.get("userCode") oddFare = cardInfo.get("oddFare") custStatus = cardInfo.get("custStatus") ts = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") try: obj = YiKaTongCard.objects.get(customerId=customerId) except: obj = YiKaTongCard(customerId=customerId, userName=userName, userCode=userCode, oddFare=RMB(oddFare), custStatus=custStatus, cardNo=cardNo, dateTimeAdded=ts) obj.save() else: obj.customerId = customerId obj.userName = userName obj.userCode = userCode obj.oddFare = RMB(oddFare) obj.custStatus = custStatus if cardNo != obj.cardNo: obj.pastCardNo = obj.cardNo obj.cardNo = cardNo obj.dateTimeUpdate = ts obj.save()