operationDoUndo.py 14.4 KB
# -*- coding: utf-8 -*-

# @Time    : 2021/8/16 15:15
# @Author  : Ljq
# @File    : operationDoUndo.py
# @Software: PyCharm

"""

"""

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

def get_orderRefund(session=None,host="",orderId=None):
    """获取订单详情"""
    headers = dct.urlCode()
    url = host + f"/entranceFeeBill/refund/{orderId}.action"
    res = session.useHeadersRequests("get", url=url, headers=headers)
    return res

def get_calculateRes(session=None,host="",autocompletecartype=None,**kwargs):
    """缴费金额获取"""
    url = host + "/calculate/index.action"
    headers = dct.urlCode()

    data = {"protocolId": "", "pwd": "", "clientRedirectTag": "", "viewType": "refund", "optType": "optType", "optUrl": "",
            "correctInfo": "correctInfo", "weightType": "weightType", "id": "orderId", "goodsId": "goodsId",
            "number": "number", "modified": "time", "status": "status", "source": "source", "updateFeeItems": "",
            "correctDiscount": "correctDiscount", "totalAmount": "", "customerId": "0", "fundAccount": "",
            "accountId":"","ic": "","customerName": "", "customerPhone": "", "payway": "刷卡", "plate": "plate",
            "autocomplete-cartype": "carTypeCode(carTypeName)", "carTypeName": "carTypeName",
            "carTypeCode": "carTypeCode", "carTypeId": "carTypeId", "carTypeWeight": "carTypeWeight",
            "storeTareWeight": "", "proveType": "proveTypeCode", "grossWeight": "grossWeight",
            "tareWeight": "tareWeight", "weight": "grossWeight", "goodsNum": "", "itemWeight": "",
            "productPrice": "1.00000", "unitPrice": "unitPrice", "depName": "feeDepName", "calcDepId": "",
            "regionName": "", "regionId": "0", "productName": "productName", "productId": "productId",
            "productArea": "重庆,重庆市,万州区", "parentId": "", "levelType": "", "originId": "originId", "tradeTypeId": "tradeTypeId",
            "chargeTotalAmount": "", "chargeTotalAmountYuan": "", "freezeMoneySymbol": "", "comparisonFreezeAmount": "",
            "created": "created", "remark": "false", "goodsTagIds": "", "shareRatio": "shareRatio",
            "handlingTeam": "", "handlingRatio": "", "handActualAmount": "", "handManageAmount": "",
            "handCollectionAmount": "", "receivableAmount": "", "categoryName": "productName",
            "categoryId": "productId", "driverTel": "", "grossWeightDate": "grossWeightDate",
            "tareWeightDate": "tareWeightDate", "grossPathName": "", "grossPathId": "", "tarePathId": "",
            "goodsRemark": "", "inGreeterName": "", "inGreeterId": "0", "outGreeterId": "", "sumPrice": "sumPrice",
            "shipperName": "", "shipperId": "", "shipperPhone": "", "feeDepName": "", "calcFeeDepId": ""}
    data["autocomplete-cartype"]=autocompletecartype
    data = dict(data,**kwargs)
    print("get_calculateRes",data)
    res = session.useHeadersRequests("post", url=url,data=data,headers=headers)
    return res


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

    data = {"protocolId": "", "pwd": "", "clientRedirectTag": "", "viewType": "refund", "optType": "0", "optUrl": "",
            "correctInfo": "1", "weightType": "1", "id": "3968", "goodsId": "3982", "number": "202108110900122",
            "modified": "2021-08-11+17:32:50", "status": "3", "source": "1", "updateFeeItems": "",
            "correctDiscount": "1", "totalAmount": "800", "customerId": "389", "fundAccount": "105847",
            "accountId": "105847", "ic": "888810032426", "customerName": "长歌买家省内啊啊啊嘿", "customerPhone": "18011501258",
            "payway": "刷卡", "plate": "川B00001", "autocomplete-cartype": "003(板车)", "carTypeName": "板车",
            "carTypeCode": "003", "carTypeId": "53", "carTypeWeight": "333", "storeTareWeight": "", "proveType": "1621",
            "grossWeight": "353", "tareWeight": "333", "weight": "20", "goodsNum": "", "itemWeight": "",
            "productPrice": "1.00000", "unitPrice": "100.0", "depName": "水果部", "dep": "58", "regionId": "72",
            "productName": "雪莲果", "productId": "14158", "productArea": "重庆,重庆市,万州区", "originId": "500101",
            "tradeTypeId": "71", "chargeTotalAmount": "800", "chargeTotalAmountYuan": "8", "freezeMoneySymbol": "13",
            "comparisonFreezeAmount": "13", "created": "2021-08-11+17:32:27", "remark": "", "goodsTagIds": "1900",
            "shareRatio": "0", "handlingTeam": "", "steveTeamId": "", "handlingRatio": "", "handActualAmount": "0",
            "handManageAmount": "0", "handCollectionAmount": "0", "marketFlag": "sy", "totalMoney": "800",
            "receivable": "1300", "collectionPrice": "0", "discountAmount": "500", "handReceivableAmount": "0",
            "itemReceivableAmount": "1300", "receivableAmount": "1300", "categoryName": "水果", "categoryId": "14436",
            "driverTel": "", "grossWeightDate": "2021-08-11+17:32:27", "tareWeightDate": "2021-08-11+17:32:27",
            "grossPathName": "", "grossPathId": "", "tarePathId": "", "goodsRemark": "备注", "inGreeterName": "通用测试",
            "inGreeterId": "274", "outGreeterId": "", "sumPrice": "2000", "shipperName": "", "shipperId": "",
            "shipperPhone": "", "feeDepId": "0"}
    data["autocomplete-cartype"] = autocompletecartype
    data = dict(data, **kwargs)
    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_undoOrder(session=None,host="http://test.jmsf.diligrp.com:8385",attrName="收费单号",attrValue="202108060900032",pwd="",
                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 = get_orderRefund(session=session,host=host, orderId=orderId)

    # 正则取值
    # regionId = re.findall('<option value="(.*?)" bind-name="', 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"]
    dep = orderDetailsDict["dep"]
    # 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"]
    print("categoryId",categoryId)
    inGreeterName = orderDetailsDict["inGreeterName"]
    inGreeterId = orderDetailsDict["inGreeterId"]
    productArea = orderDetailsDict["productArea"]
    productPrice = orderDetailsDict["productPrice"]
    modified = orderDetailsDict["modified"]


    # # 用户信息获取
    # res = eFBL.get_icCheck(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"]
    customerId = orderDetailsDict["customerId"]
    customerName = orderDetailsDict["customerName"]
    accountId = orderDetailsDict["accountId"]
    mobile = orderDetailsDict["customerPhone"]
    ic = orderDetailsDict["ic"]

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

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

    # 获取缴费金额
    res = 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,
                           shareRatio=shareRatio, categoryName=categoryName, categoryId=categoryId,
                           grossWeightDate=grossWeightDate,
                           tareWeightDate=tareWeightDate, sumPrice=sumPrice, weight=weight,
                           inGreeterName=inGreeterName, inGreeterId=inGreeterId)

    # 缴费信息
    # print("res.text",res.text)
    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 = ""
    chargeTotalAmount = totalMoney
    chargeTotalAmountYuan = fee_int - int(discount_amount)
    freezeMoneySymbol = fee_int
    comparisonFreezeAmount = fee_int
    firmCode = session.userInfo["data"]["user"]["firmCode"]
    marketFlag = firmCode
    itemReceivableAmount = receivable
    receivableAmount = receivable
    tareWeightDate = tareWeightDate
    print("categoryId2",categoryId)

    aa = do_doUndo(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, dep=dep,
                  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,
                  chargeTotalAmountYuan=chargeTotalAmountYuan)

    print(aa.text)
    return aa

# do_undoOrder(attrValue="202108160900078")