operationDoFreeze.py 12.2 KB
# -*- coding: utf-8 -*-

# @Time    : 2021/8/24 13:40
# @Author  : Ljq
# @File    : operationDoFreeze.py
# @Software: PyCharm

"""

"""

import json,time, re
from commons.scripts import dealContentType as dct
from commons.scripts import jsonToUrlcode
from commons.api.sy.entranceFeeBillList import entranceFeeBillList as eFBL
from bs4 import BeautifulSoup
import urllib.parse

def do_doFreeze(session=None,host="",autocompletecartype=None,fee_str="",**kwargs):
    """进门单缴费"""
    url = host + "/entranceTrade/doFreeze.action"
    headers = dct.urlCode()

    data = {"protocolId": "", "pwd": "{pwd}", "clientRedirectTag": "", "viewType": "pay", "optType": "{optType}",
            "optUrl": "", "correctInfo": "{correctInfo}", "weightType": "{weightType}", "id": "{orderId}",
            "goodsId": "{goodsId}", "number": "{number}", "modified": "{created}", "status": "{status}",
            "source": "{source}", "updateFeeItems": "", "correctDiscount": "{correctDiscount}",
            "totalAmount": "{totalMoney}", "customerId": "{customerId}", "fundAccount": "{accountId}", "ic": "{ic}",
            "customerName": "{customerName}", "customerPhone": "{mobile}", "payway": "刷卡", "plate": "{plate}",
            "autocomplete-cartype": "{carTypeCode}({carTypeName})", "carTypeName": "{carTypeName}",
            "carTypeCode": "{carTypeCode}", "carTypeId": "{carTypeId}", "carTypeWeight": "{carTypeWeight}",
            "storeTareWeight": "", "proveType": "{proveTypeCode}", "grossWeight": "{grossWeight}",
            "tareWeight": "{tareWeight}", "weight": "{newWeight}", "goodsNum": "", "itemWeight": "",
            "productPrice": "{productPrice}", "unitPrice": "{unitPrice}", "depName": "{feeDepName}",
            "calcDepId": "{feeDepId}", "dep": "{feeDepId}", "regionName": "{regionName}", "regionId": "{regionId}",
            "productName": "{productName}", "productId": "{productId}", "productArea": "{origin}", "parentId": "",
            "levelType": "", "originId": "{originId}", "tradeTypeId": "{tradeTypeId}",
            "chargeTotalAmount": "{totalMoney}", "chargeTotalAmountYuan": "{chargeTotalAmountYuan}",
            "freezeMoneySymbol": "{chargeTotalAmountYuan}", "comparisonFreezeAmount": "{chargeTotalAmountYuan}",
            "created": "{created}", "remark": "", "goodsTagIds": "{goodsTagIds}", "marketFlag": "{firmCode}",
            "totalMoney": "{totalMoney}", "receivable": "{receivable}", "collectionPrice": "{discountAmount}",
            "discountAmount": "{discountAmount}", "handReceivableAmount": "{handReceivableAmount}",
            "itemReceivableAmount": "{receivable}", "correctDiscount": "{correctDiscount}",  "shareRatio": "0",
            "handlingTeam": "", "handActualAmount": "0", "handManageAmount": "0", "handCollectionAmount": "0",
            "receivableAmount": "{receivable}", "categoryName": "{productName}", "categoryId": "{productId}",
            "driverTel": "", "grossWeightDate": "{grossWeightDate}", "tareWeightDate": "{tareWeightDate}",
            "grossPathName": "", "grossPathId": "", "tarePathId": "", "goodsRemark": "", "inGreeterName": "",
            "inGreeterId": "0", "outGreeterId": "", "sumPrice": "{sumPrice}", "shipperName": "", "shipperId": "",
            "shipperPhone": "", "feeDepName": "", "calcFeeDepId": "", "feeDepId": "","accountId":""}
    data["autocomplete-cartype"] = autocompletecartype
    data = dict(data, **kwargs)

    # 当模板没有配置货物标签时,参数不能传递货物标签所以需要删除
    if kwargs["goodsTagIds"] =="":
        del data["goodsTagIds"]

    data_uc = jsonToUrlcode.jsonToUrlcode(data_json=data)+fee_str
    print("================开始请求================")
    res = session.useHeadersRequests("post", url=url, data=data_uc, headers=headers)
    return res

def do_freezeOrder(session=None,host="http://test.jmsf.diligrp.com:8385",attrName="收费单号",attrValue="202108060900032",pwd="111111",
                ic=888810032426):
    a = eFBL.listPage(session=session,host=host, attrName=attrName, attrValue=attrValue)
    print("listPage", a.json())
    orderId = a.json()["rows"][0]["id"]
    number = a.json()["rows"][0]["number"]
    created = a.json()["rows"][0]["created"]
    print(orderId)

    # # 订单详情获取
    resOrderDetails = eFBL.get_OrderDetails(session=session,host=host, orderId=orderId)

    # 正则取值
    regionId = re.findall('<option value="(.*?)" bind-name="', resOrderDetails.text)[0]
    regionName=re.findall('" bind-name="(.*?)"  bind-index', resOrderDetails.text)[0]

    # bs取值
    orderDetailsList = BeautifulSoup(resOrderDetails.text, "html.parser").findAll("input")
    orderDetailsDict = {i.get("name"): i.get("value") for i in orderDetailsList}
    print("orderDetailsDict",orderDetailsDict)
    unitPrice = orderDetailsDict["unitPrice"]
    goodsId = orderDetailsDict["goodsId"]
    status = orderDetailsDict["status"]
    source = orderDetailsDict["source"]
    optType = orderDetailsDict["optType"]
    correctInfo = orderDetailsDict["correctInfo"]
    weightType = orderDetailsDict["weightType"]
    correctDiscount = orderDetailsDict["correctDiscount"]

    # goodsTagIds = orderDetailsDict["goodsTagIds"]
    # 货物标签特别判断
    if "goodsTagIds" in orderDetailsDict.keys():
        goodsTagIds = orderDetailsDict["goodsTagIds"]
    else:
        goodsTagIds = ""

    sumPrice = orderDetailsDict["sumPrice"]
    tradeTypeId = orderDetailsDict["tradeTypeId"]
    shareRatio = orderDetailsDict["shareRatio"]
    # regionName=orderDetailsDict["regionName"]
    plate = orderDetailsDict["plate"]
    carTypeName = orderDetailsDict["carTypeName"]
    carTypeCode = orderDetailsDict["carTypeCode"]
    carTypeId = orderDetailsDict["carTypeId"]
    carTypeWeight = orderDetailsDict["carTypeWeight"]
    proveType = orderDetailsDict["proveType"]
    grossWeight = orderDetailsDict["grossWeight"]
    tareWeight = orderDetailsDict["tareWeight"]
    depName = orderDetailsDict["depName"]
    feeDepId = orderDetailsDict["calcDepId"]
    productName = orderDetailsDict["productName"]
    productId = orderDetailsDict["productId"]
    grossWeightDate = orderDetailsDict["grossWeightDate"]
    tareWeightDate = orderDetailsDict["tareWeightDate"]
    weight = orderDetailsDict["weight"]
    calcDepId = orderDetailsDict["calcDepId"]
    categoryName = orderDetailsDict["categoryName"]
    categoryId = orderDetailsDict["categoryId"]
    inGreeterName = orderDetailsDict["inGreeterName"]
    inGreeterId = orderDetailsDict["inGreeterId"]
    productArea = orderDetailsDict["productArea"]
    productPrice = orderDetailsDict["productPrice"]


    # 用户信息获取
    res = eFBL.get_icCheck(session=session,host=host, ic=ic)
    print(res.text)
    customerId = res.json()["data"]["aInfo"]["customerId"]
    customerName = res.json()["data"]["aInfo"]["customerName"]
    accountId = res.json()["data"]["aInfo"]["accountId"]
    mobile = res.json()["data"]["aInfo"]["mobile"]

    # 省市区获取
    res = eFBL.get_city(session=session,host=host, name="万州")
    print(res.text)
    originId = res.json()["suggestions"][0]["id"]
    parentId = res.json()["suggestions"][0]["parentId"]
    productArea = res.json()["suggestions"][0]["value"]

    # # 获取缴费金额
    autocompletecartype = f"{carTypeCode}({carTypeName})"
    print(autocompletecartype)
    modified = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

    # 获取缴费金额
    res = eFBL.get_calculateRes(session=session,host=host, autocompletecartype=autocompletecartype, optType=optType, correctInfo=correctInfo,
                           weightType=weightType, id=orderId, goodsId=goodsId, number=number, modified=modified,
                           status=status,
                           source=source, correctDiscount=correctDiscount, plate=plate, carTypeName=carTypeName,
                           carTypeCode=carTypeCode,
                           carTypeId=carTypeId, carTypeWeight=carTypeWeight, proveType=proveType,
                           grossWeight=grossWeight,
                           tareWeight=tareWeight, unitPrice=unitPrice, depName=depName, productName=productName,
                           productId=productId, originId=originId, tradeTypeId=tradeTypeId, created=created,
                           goodsTagIds=goodsTagIds,regionName=regionName,
                           shareRatio=shareRatio, categoryName=categoryName, categoryId=categoryId,
                           grossWeightDate=grossWeightDate,
                           tareWeightDate=tareWeightDate, sumPrice=sumPrice, calcDepId=calcDepId, weight=weight,
                           inGreeterName=inGreeterName, inGreeterId=inGreeterId)

    # 缴费信息
    totalMoney = re.findall('name="totalMoney" value="(.*?)">', res.text)[0]
    discountAmount = re.findall('name="discountAmount" value="(.*?)">', res.text)[0]
    handReceivableAmount = re.findall('name="handReceivableAmount" value="(.*?)">', res.text)[0]
    correctDiscount = re.findall('id="correctDiscount" name="correctDiscount" value="(.*?)">', res.text)[0]
    receivable = re.findall('id="creceivableLong" name="receivable" value="(.*?)">', res.text)[0]
    collectionPrice = re.findall('name="collectionPrice" value="(.*?)"', res.text)[0]

    # 查找dl标签class为包含'ui-font-'字符的所有dl标签
    soup = BeautifulSoup(res.text, "html.parser")
    fee_str = "correctDiscount=1&billItems=&billItemsDic="
    fee_int = 0
    discount_amount = 0
    for tag in soup.findAll("div", class_="d-flex align-items-center"):
        c = tag.findAll("input")
        for i in c:
            if i.get("name") != None:
                fee_str = fee_str + "&" + i.get("name") + "=" + urllib.parse.quote(i.get("value"))
                if i.get("type") == "text":
                    fee_int = fee_int + int(float(i.get("value")))
                if "优惠" in i.get("value"):
                    discount_amount = discount_amount + int(json.loads(i.get("value"))["receivable"]) / 100

    id = orderId
    totalAmount = totalMoney
    customerPhone = mobile
    dep = feeDepId
    chargeTotalAmount = totalMoney
    chargeTotalAmountYuan = fee_int - int(discount_amount)
    freezeMoneySymbol = fee_int
    comparisonFreezeAmount = fee_int
    modified = created
    firmCode = session.userInfo["data"]["user"]["firmCode"]
    marketFlag = firmCode
    itemReceivableAmount = receivable
    receivableAmount = receivable
    tareWeightDate = tareWeightDate

    aa = do_doFreeze(session=session,host=host, autocompletecartype=autocompletecartype, fee_str=fee_str, pwd=pwd, optType=optType,
                  weightType=weightType, id=id, goodsId=goodsId, number=number, created=created, status=status,
                  source=source,
                  correctDiscount=correctDiscount, totalAmount=totalAmount, customerId=customerId,
                  fundAccount=accountId,
                  accountId=accountId, ic=ic, customerName=customerName, customerPhone=customerPhone, plate=plate,
                  carTypeName=carTypeName, carTypeCode=carTypeCode, carTypeId=carTypeId, carTypeWeight=carTypeWeight,
                  proveType=proveType, grossWeight=grossWeight, tareWeight=tareWeight, weight=weight,
                  productPrice=productPrice,
                  unitPrice=unitPrice, depName=depName, calcDepId=calcDepId, dep=dep, regionName=regionName,
                  regionId=regionId,
                  productName=productName, productId=productId, productArea=productArea, originId=originId,
                  tradeTypeId=tradeTypeId, correctInfo=correctInfo, chargeTotalAmount=chargeTotalAmount,
                  freezeMoneySymbol=freezeMoneySymbol, comparisonFreezeAmount=comparisonFreezeAmount, modified=modified,
                  goodsTagIds=goodsTagIds, marketFlag=marketFlag, totalMoney=totalMoney, receivable=receivable,
                  collectionPrice=collectionPrice, discountAmount=discountAmount,
                  handReceivableAmount=handReceivableAmount,
                  itemReceivableAmount=itemReceivableAmount, receivableAmount=receivableAmount,
                  categoryName=categoryName,
                  categoryId=categoryId, grossWeightDate=grossWeightDate, tareWeightDate=tareWeightDate,
                  sumPrice=sumPrice,parentId=parentId,
                  chargeTotalAmountYuan=chargeTotalAmountYuan)

    print(aa.text)
    return aa