示例#1
0
def getinfo(ocrtext,qun,user,filepath):
    ocrtext=ocrtext.replace(" ", "")
    respContent=""
    if (len(allname)==0):
        # 主要配置表中有,就都能识别
        jsonobj=json.loads(qun.gonggao.replace('\'','\"'))   # 获取配置的价格表
        for keystr in jsonobj:
            money = jsonobj[keystr]
            onerow = keystr.split("|")
            if (len(onerow)==3):
                allname.append(keystr)
                allqiye.append(onerow[0])
                allchanpin.append(onerow[1])
                allbank.append(onerow[2])
                alljiage.append(money)

    # 分为大杯和中杯饮品,和多少元代金券
    bank=""
    qiye=""
    chanpin = ""
    quanma=""
    money=0
    canshibie=False
    # 先用企业和商品类型识别一遍,这个为必须包含项
    for i in range(len(allqiye)):
        if (allqiye[i] in ocrtext and allchanpin[i] in ocrtext):
            qiye = allqiye[i]
            chanpin=allchanpin[i]
            bank = allbank[i]
            money= float(alljiage[i])
            canshibie=True
            break


    # 如果不能识别,就返回不能识别说明
    if (not canshibie):
        respContent = '无法识别此类商品或此类商品已不再收录,您可以回复jg查看收录商品,或通过其他方式上传。\n\n'\
                      + '<a href="'+urlpath+'piaoquan/mydiary?qunid=999&typeindex=1&userid='+str(user.id)+'">券码管理</a>\n\n'\
                      + '<a href="'+urlpath+'piaoquan/setting?userid='+str(user.id)+'">个人账户中心</a>\n\n'\
                      + '回复“jg”查询商品价格!'
        # print(respContent)
        return respContent
    # 再用企业、商品类型、银行识别一遍,作为次选。因为银行并不是必选项
    for i in range(len(allqiye)):
        if (allqiye[i] in ocrtext and allchanpin[i] in ocrtext and allbank[i] in ocrtext):
            qiye = allqiye[i]
            chanpin=allchanpin[i]
            bank = allbank[i]
            money= float(alljiage[i])
            break

    # print(qiye, chanpin, bank, money)
    # 如果有图片就使用图片识别券码
    if (filepath):
        try:
            code = QRcode.ocr_qrcode_zxing(filepath)  # 识别图中的二维码
            print("第一种方式二维码识别结果:",code)
            # if(code==None or code=="null" or code==""):
            #     code = QRcode.ocr_qrcode_zxing(filepath)   # 识别图中的二维码
            # else:
            #     # 判断编码是不是只有字母数字和=
            #     regexstr="^[a-zA-Z=0-9]+$"
            #     pattern = re.compile(regexstr)
            #     result = re.match(pattern,code)
            #     if (not result):
            #         return '无法识别二维码'

# 				print("二维码识别结果:"+code)
            if (code.find("=")>-1):
                quanma = code[0:code.find("=")]
            else:
                quanma = code
        except Exception as e:
            print("二维码识别出错:",e)


    # 没有图片或者图片匹配不到就正则表达式识别
    if (quanma==""):
        # 识别券码
        regexstr="[0-9A-Za-z]{10,30}"    # 查找指定的字符串
        pattern=re.compile(regexstr)
        matcher = re.match(pattern, ocrtext)
        i = 0
        while(matcher.groups(i)):
            # 如果在匹配到的数字前出现的“订单编号”,则放弃
            if (matcher.start(i)-8>0):
                if ('订单编号' in ocrtext[matcher.start(i)-8,matcher.start(i)]):
                    i += 1
                    continue

            quanma= matcher.group(i)
            break



    # 如果券码为""
    if (quanma==""):
        # 如果没有图片,则放弃
        if (filepath==None):
            respContent = "无法识别券码,请通过其他方式上传,或者联系客服\n\n"\
                          + "<a href=\""+urlpath+"piaoquan/mydiary.jsp?qunid=999&typeindex=1&userid="+str(user.getId())+"\">券码管理</a>\n\n"\
                          + "<a href=\""+urlpath+"piaoquan/setting.jsp?userid="+str(user.getId())+"\">个人账户中心</a>\n\n"\
                          + "回复“jg”查询商品价格!"
            return respContent
        else:
            # 如果有图片,则券号自定义为no+时间+index
            global index
            index+=1
            quanma="no"+TimeUtil.getCurrentDate1()+TimeUtil.getCurrentTime1()+str(index)



    # 修改图片名称为券号的名称
    picname =""
    if(filepath):
        mulu = filepath[0:filepath.rfind('/') + 1]   # 目录(带最后的/)
        # picname = filepath[filepath.rfind('/') + 1:]  # 文件名
        geshi =filepath[filepath.index('.')+1:]
        picname = quanma+"."+geshi
        newfilepath = mulu+picname
        if (os.path.exists(newfilepath)):
            os.remove(newfilepath)

        os.rename(filepath,newfilepath)
        print('将图片重命名为新图片名称:',newfilepath)

    content = qiye + "|" + chanpin + "|" + bank #要存储返回的内容
    tip="该票券不是第一次上传了\n"
    diary = DiaryDAO.selectDiaryforSerial(quanma)
    if (not diary):
        diary = Diary()
        diary.userid= user.id
        diary.qunid= 999
        if (not filepath):
            diary.diarytype=ResultCode.CONTENT_TYPEWORD  # 设置日志只有短信
        else:
            diary.diarytype=ResultCode.CONTENT_TYPEIMG  # 设置日志包含图片
        diary.type="1"
        diary.serial=quanma
        diary.state=0
        diary.content=content
        diary.time=TimeUtil.getCurrentTime()
        diary.date=TimeUtil.getCurrentDate()
        diary.money=10*int(money)    # 怎么设置价格
        if(filepath):
            datenow = TimeUtil.getCurrentMonth()
            diary.imgone= STATIC_URL1+ "upload/img/"+datenow+"/"+picname
        DiaryDAO.addDiary(diary)
        tip=""
        # 修改用户的以上传金额
        user.tuijiannum = user.tuijiannum+diary.money  # 设置用户以上传金额
        UserDAO.updateUserInfo(user)


    respContent = "您的券码已经收到录入,等待橙子权益的汇款即可。\n\n商品:"+content+"\n券码:"+quanma+"\n价格:¥"+str(money) \
                  + "\n\n<a href=\""+urlpath+"piaoquan/setting.jsp?userid="+str(user.id)+"\">个人账户中心</a>\n\n"\
                  + "<a href=\""+urlpath+"piaoquan/mydiary.jsp?qunid=999&typeindex=1&userid="+str(user.id)+"\">券码管理</a>\n\n"+tip\
                  + "回复“jg”查询商品价格!"

    return respContent
示例#2
0
def wordfun(msg,qun,user):
    Content = msg.content
    # 如果在设置价格
    if "control:" in Content:
        Content=Content.replace("control:", "")
        try:
            jsonobj= json.loads(qun.gonggao.replace('\'','\"'))
        except Exception as e:
            print('json转化出错',e)
            jsonobj = {}

        key_value=Content.split(":")   #使用冒号进行分割,key_value[0]为商品,key_value[1]为价格
        if(key_value[1]=="0" and key_value[0] in jsonobj):   #如果价格为0,就删除
            jsonobj.pop(key_value[0])
        else:
            jsonobj[key_value[0]]= float(key_value[1])  #添加修改值

        qun.gonggao= str(jsonobj)
        QunDAO.updatequnInfoqun(qun)

        #清除从公告中加载的数据
        allname.clear()
        allqiye.clear()
        allchanpin.clear()
        allbank.clear()
        alljiage.clear()

        respContent="配置修改成功"
        return respContent


    #设置已上传
    elif "ysc" in Content:
        Content=Content.replace("ysc", "")  #后面的认为是券码
        diary = DiaryDAO.selectDiaryforSerial(Content)  #根据券码查询日志
        diary.type = "1"   #1为已上传
        DiaryDAO.updatediary(diary)
        respContent="设置已上传成功:"+diary.content
        return respContent

    #设置出售中
    elif "csz" in Content:
        Content=Content.replace("csz", "")  #后面的认为是券码
        diary = DiaryDAO.selectDiaryforSerial(Content)  #根据券码查询日志
        diary.type = "2"    #2为出售中
        DiaryDAO.updatediary(diary)
        respContent="设置出售中成功:"+diary.content
        return respContent

    #设置已汇款
    elif "yhk" in Content:
        Content=Content.replace("yhk", "")  #后面的认为是券码
        diary = DiaryDAO.selectDiaryforSerial(Content)  #根据券码查询日志
        diary.type = "3"   #3为已汇款
        DiaryDAO.updatediary(diary)
        respContent="设置已汇款成功:"+diary.content
        return respContent

    #设置纠纷
    elif "jf" in Content:
        Content=Content.replace("jf", "")  #后面的认为是券码
        diary = DiaryDAO.selectDiaryforSerial(Content)  #根据券码查询日志
        diary.type = "4"  #4为纠纷
        DiaryDAO.updatediary(diary)
        respContent="设置纠纷成功:"+diary.content
        return respContent

    # 输入券码通知信息
    else:
        try:
            respContent = getinfo(Content,qun,user,None)  #根据文字生成响应文本
        except Exception as e:
            print('根据短信获取票券出错', e)
            respContent = tosetting(user)   #返回进入账户中心的信息

    return respContent