Python调用旺店通及淘宝top接口例子

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Python 调用旺店通/淘宝top接口例子
最近项目需要使用python来连接旺店通,并且需要调用top的接口,包含签名的规则,创建表,分页获取等等。

话不多说,上代码。

下面的例子是获取ERP销售订单的出库单信息
可以通过按照时间来获取,也可以通过最后修改时间来获取增量数据
获取的结果
1.引入各种库
import requests
import json
import Connection
import time
import hashlib
import datetime
import math
from urllib import parse
2.自定义初始化参数
def __init__(self):
self.sid = '***'
self.appkey = '***'
self.appsecret = '****'
self.page_size = 100
self.appkey_tb = '***'
self.target_app_key = "***"
self.appsecret_tb = '***'
self.timestamp_tb = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
3.创建计算旺店通签名函数
def get_sign(self, timestamp, start_time, end_time, page_no):
str_appkey = '06-appkey:' + ('0000' + str(len(self.appkey)))[-4:] + '-' + self.appkey
str_end_time = '08-end_time:0019-' + str(end_time)
str_page_no = '07-page_no:' + ('0000' + str(len(str(page_no))))[-4:] + '-' + str(page_no)
str_page_size = '09-page_size:' + ('0000' + str(len(str(self.page_size))))[-4:] + '-' + str(self.page_size)
str_sid = '03-sid:' + ('0000' + str(len(self.sid)))[-4:] + '-' + self.sid
str_timestamp = '09-timestamp:' + '0010-' + str(timestamp)
str_start_time = '10-start_time:0019-' + str(start_time)
str_last = str_appkey + ';' + str_end_time + ';' + str_page_no + ';' + str_page_size + ';' + str_sid + ';' + str_start_time + ';' + str_timestamp + self.appsecret
sign_md5 = hashlib.md5(str_last.encode(encoding='UTF-8')).hexdigest()
# print("明文:%s" % str_last)
return sign_md5
4.创建计算淘宝签名
def get_sign_taobao(self, dict_params=None):
list_params = sorted(dict_params.items(), key=lambda d: d[0])
destr = self.appsecret_tb
for i in range(len(list_params)):
destr = destr + list_params[i][0] + str(list_params[i][1])
tempstr = destr + self.appsecret_tb
# print("tb明文:%s" % tempstr)
result = hashlib.md5(tempstr.encode(encoding='UTF-8')).hexdigest().upper()
# print("tb_sign:%s" % result)
return result
5.创建接口请求参数
def parse_url(self, url, timestamp, start_time, end_time, page_no, method=None): if method is None:
sign = self.get_sign(timestamp, start_time, end_time, page_no)
values = {'sid': self.sid,
'appkey': self.appkey,
'page_no': page_no,
'page_size': self.page_size,
'start_time': start_time,
'end_time': end_time,
'timestamp': timestamp,
'sign': sign
}
b = requests.post(url, data=values)
else:
body_dict1 = {"sid": self.sid,
"app_key": self.appkey_tb,
"timestamp": self.timestamp_tb,
"method": method,
"target_app_key": self.target_app_key,
"format": "json",
"sign_method": "md5",
"v": "2.0",
"page_size": self.page_size,
"start_time": start_time,
"end_time": end_time
}
sign = self.get_sign_taobao(body_dict1)
body_dict1['sign'] = sign
url_data = parse.urlencode(body_dict1)
# print(url_data)
url = url.format(method, url_data) + "&sign=" + sign # quote()将字符串进行编码
b = requests.get(url)
result = json.loads(b.content.decode())
return result
6.创建响应结果接收
def get_condition(self, str_sql, url, table_dict, days, method=None):
sql = Connection.connect_sql(str_sql, "sqlserver_Allove", 'read')
start_date_ori = sql[0][0].strftime("%Y-%m-%d %H:%M:%S") if sql[0][0] is not None else (
datetime.datetime.now() - datetime.timedelta(days=1)).strftime("%Y-%m-%d %H:%M:%S")
if days != '':
start_date_ori = (datetime.datetime.now() -datetime.timedelta(days=days)).strftime("%Y-%m-%d %H:%M:%S")
start_date_ori = datetime.datetime.strptime(start_date_ori, "%Y-%m-%d %H:%M:%S") + datetime.timedelta(seconds=1)
end_date_ori = (
datetime.datetime.strptime(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "%Y-%m-%d %H:%M:%S"))
num = (end_date_ori - start_date_ori).days + 1
for d in range(0, num):
start_date = start_date_ori + datetime.timedelta(days=d)
if end_date_ori > start_date_ori + datetime.timedelta(days=d + 1):
end_date = start_date_ori + datetime.timedelta(days=d + 1)
else:
end_date = end_date_ori
self.get_query(url, table_dict, start_date, end_date, method)
7.创建响应结果内容
def get_query(self, url, table_list, start_time, end_time, method=None):
timestamp = int(time.time())
print('表[%s][%s],查找时间范围:【%s--%s】' % (method, table_list['table_name'], start_time, end_time)) response = self.parse_url(url, timestamp, start_time, end_time, 0, method)
if method is None:
response_code = str(response["code"])
else:
response_code = str(response["response"]["errorcode"])
if response_code == '0':
if method is None:
total_count = response['total_count']
else:
total_count = response["response"]['total_count']
response = response["response"]
if total_count != '0':
page_all = math.ceil(int(total_count) / self.page_size)
self.insert_data_first(table_list, response, total_count, 0) # 首页数据
for i in range(1, page_all - 1):
response_page = self.parse_url(url, timestamp, start_time, end_time, i, method)
if response_code == 0:
self.insert_data_first(table_list, response_page, total_count, i) # 分页数据
8.第一层数据结果写入
def insert_data_first(self, table_list, data_dict, total_count, page):
# print(data_dict)
table_name = table_list['table_name']
first_table = table_list['first']
second_table = table_list['second']
sum = len(data_dict[first_table])
sum_one = 0
for data_list in data_dict[first_table]:
str_sql = self.get_sql(first_table, data_list, table_name)
sql = Connection.connect_sql(str_sql, "sqlserver_Allove", 'insert')
# print('-' * 100)
ss = '成功写入' if sql > 0 else '已存在'
print('【insert_data_first】【%s】记录【%s】条。

当前【第%s/%s页-%s/%s条】%s' % ( first_table, total_count, page + 1, int(total_count) // 100 + 1, sum_one, sum, ss))
if second_table != '':
self.insert_data_second(table_list, data_list[second_table])
sum_one += 1
print('-' * 100)
9.第二层结果写入
def insert_data_second(self, table_list, details_list_dict):
table_name = table_list['table_name']
third_table = table_list['third']
second_table = table_list['second']
for details_list in details_list_dict:
sum_one = 1
print ('*' * 50)
print (details_list)
str_detail = self.get_sql(second_table, details_list, table_name)
sql = Connection.connect_sql(str_detail, "sqlserver_Allove", 'insert')
ss = '成功写入' if sql > 0 else '已存在'
print('【insert_data_second】【%s】明细记录【%s】条。

写入【第%s条】%s' % (second_table, len(details_list_dict), sum_one, ss))
if third_table != '':
self.insert_data_third(table_list, details_list[third_table])
sum_one += 1
10.第三层结果写入
def insert_data_third(self, table_list, details_list_dict):
table_name = table_list['table_name']
third_table = table_list['third']
for details_list in details_list_dict:
sum_one = 1
str_detail = self.get_sql(third_table, details_list, table_name)
sql = Connection.connect_sql(str_detail, "sqlserver_Allove", 'insert')
ss = '成功写入' if sql > 0 else '已存在'
print('【insert_data_third】【%s】更明细记录【%s】条。

写入【第%s条】%s' % (third_table, len(details_list_dict), sum_one, ss))
sum_one += 1
11.sql语句分拆
def get_sql(self, table_key, data_dict, table_name):
if table_key == 'stockout_list' and table_name == 'stockout':
str_sql = """
Insert Into dbo.wdt_stockout_list_mid ( stockout_id, order_no, src_order_no, warehouse_no, consign_time,order_type, trade_status,
order_type_name, trade_type, subtype, goods_count, goods_total_amount,
goods_total_cost, post_fee, logistics_no, package_fee, receiver_name,
receiver_country,
receiver_province, receiver_city, receiver_district,
receiver_address,
receiver_mobile, receiver_telno, weight, logistics_type,
logistics_code, logistics_name, print_remark, paid, refund_status, salesman_no,
salesman_name, fullname, warehouse_name, created, remark, stockout_reason, outer_no,
trade_no, src_trade_no, nick_name, customer_name, customer_no, trade_time, pay_time,
status, shop_name, shop_no, buyer_message, cs_remark, flag_name, block_reason,
delivery_term, fenxiao_type, fenxiao_nick, id_card_type, receiver_area, shop_remark,
modified, platform_id, trade_id, checker_name, employee_no, operator_name,
packager_no, packager_name, picker_no, picker_name, printer_no, printer_name,
examiner_no, examiner_name, stockout_no, src_order_type, wms_status, warehouse_type,
warehouse_id, customer_id, consign_status, operator_id, src_tids, id_card,
stock_check_time,
print_batch_no )
select a.* from ( Select '{}' stockout_id, '{}' order_no, '{}' src_order_no, '{}' warehouse_no, '{}' consign_time, '{}' order_type, '{}' trade_status,
'{}' order_type_name, '{}' trade_type, '{}' subtype, '{}' goods_count, '{}' goods_total_amount,
'{}' goods_total_cost, '{}' post_fee, '{}' logistics_no, '{}' package_fee, '{}' receiver_name,
'{}' receiver_country, '{}' receiver_province, '{}' receiver_city, '{}' receiver_district, '{}' receiver_address,
'{}' receiver_mobile, '{}' receiver_telno, '{}' weight, '{}' logistics_type, '{}' logistics_code,
'{}' logistics_name, '{}' print_remark, '{}' paid, '{}' refund_status, '{}' salesman_no, '{}' salesman_name,
'{}' fullname, '{}' warehouse_name, '{}' created, '{}' remark, '{}' stockout_reason, '{}' outer_no,
'{}' trade_no, '{}' src_trade_no, '{}' nick_name, '{}' customer_name, '{}' customer_no, '{}' trade_time,
'{}' pay_time, '{}' status, '{}' shop_name, '{}' shop_no, '{}' buyer_message, '{}' cs_remark, '{}' flag_name,
'{}' block_reason, '{}' delivery_term, '{}' fenxiao_type, '{}' fenxiao_nick, '{}' id_card_type,
'{}' receiver_area, '{}' shop_remark, '{}' modified, '{}' platform_id, '{}' trade_id, '{}' checker_name,
'{}' employee_no, '{}' operator_name, '{}' packager_no, '{}' packager_name, '{}' picker_no, '{}' picker_name,
'{}' printer_no, '{}' printer_name, '{}' examiner_no, '{}'
examiner_name, '{}' stockout_no, '{}' src_order_type,
'{}' wms_status, '{}' warehouse_type, '{}' warehouse_id, '{}' customer_id, '{}' consign_status, '{}' operator_id,
'{}' src_tids, '{}' id_card, '{}' stock_check_time, '{}' print_batch_no
) a left join wdt_stockout_list_mid b
on a.stockout_id=b.stockout_id and a.consign_time=b.consign_time
where b.stockout_id is null
""".format(data_dict['stockout_id'], data_dict['order_no'], data_dict['src_order_no'],
data_dict['warehouse_no'], data_dict['consign_time'], data_dict['order_type'],
data_dict['trade_status'], data_dict['order_type_name'],
data_dict['trade_type'], data_dict['subtype'], data_dict['goods_count'],
data_dict['goods_total_amount'], data_dict['goods_total_cost'],
data_dict['post_fee'], data_dict['logistics_no'],
data_dict['package_fee'], data_dict['receiver_name'],
data_dict['receiver_country'],
data_dict['receiver_province'], data_dict['receiver_city'],
data_dict['receiver_district'],
data_dict['receiver_address'].replace("'", ""), data_dict['receiver_mobile'],
data_dict['receiver_telno'],
data_dict['weight'], data_dict['logistics_type'], data_dict['logistics_code'],
data_dict['logistics_name'], data_dict['print_remark'], data_dict['paid'],
data_dict['refund_status'], data_dict['salesman_no'], data_dict['salesman_name'],
data_dict['fullname'], data_dict['warehouse_name'], data_dict['created'],
data_dict['remark'],
data_dict['stockout_reason'], data_dict['outer_no'], data_dict['trade_no'],
data_dict['src_trade_no'], data_dict['nick_name'], data_dict['customer_name'],
data_dict['customer_no'], data_dict['trade_time'],
data_dict['pay_time'].replace('0000-00-00 00:00:00', ''), data_dict['status'],
data_dict['shop_name'], data_dict['shop_no'], data_dict['buyer_message'],
data_dict['cs_remark'].replace("'", ""), data_dict['flag_name'],
data_dict['block_reason'],
data_dict['delivery_term'], data_dict['fenxiao_type'], data_dict['fenxiao_nick'],
data_dict['id_card_type'],
data_dict['receiver_area'], data_dict['shop_remark'], data_dict['modified'],
data_dict['platform_id'], data_dict['trade_id'], data_dict['checker_name'],
data_dict['employee_no'],
data_dict['operator_name'], data_dict['packager_no'], data_dict['packager_name'],
data_dict['picker_no'], data_dict['picker_name'], data_dict['printer_no'],
data_dict['printer_name'],
data_dict['examiner_no'], data_dict['examiner_name'],
data_dict['stockout_no'] if "stockout_no" in data_dict else data_dict[
'order_no'],
data_dict['src_order_type'], data_dict['wms_status'],
data_dict['warehouse_type'], data_dict['warehouse_id'],
data_dict['customer_id'], data_dict['consign_status'],
data_dict['operator_id'] if "operator_id" in data_dict else '',
data_dict['src_tids'], data_dict['id_card'], data_dict['stock_check_time'],
data_dict['print_batch_no']
)
if table_key == 'details_list' and table_name == 'stockout':
str_sql = """
Insert Into dbo.[wdt_stockout_list_details_mid] ( rec_id, stockout_id, spec_no, sell_price, brand_no, brand_name,
goods_type, gift_type, goods_name, goods_no, spec_name, spec_code,
suite_no, cost_price, total_amount, goods_id, spec_id, weight, remark,
paid, refund_status, market_price, discount, share_amount, tax_rate,
barcode, unit_name, sale_order_id, share_post, src_oid, src_tid,
from_mask,
src_order_type, src_order_detail_id, base_unit_id, unit_id,
unit_ratio, num, num2, price, batch_id, is_examined, is_package,
is_zero_cost, scan_type, good_prop1, good_prop2, good_prop3, good_prop4,
good_prop5,
good_prop6, prop1, prop2, prop3, prop4, prop5, prop6,
batch_no, batch_remark,
expire_date )
select '{}' rec_id, '{}' stockout_id, '{}' spec_no, '{}' sell_price, '{}' brand_no, '{}' brand_name, '{}' goods_type, '{}' gift_type,
'{}' goods_name, '{}' goods_no, '{}' spec_name, '{}' spec_code, '{}' suite_no, '{}' cost_price, '{}' total_amount, '{}' goods_id,
'{}' spec_id, '{}' weight, '{}' remark, '{}' paid, '{}' refund_status, '{}' market_price, '{}' discount, '{}' share_amount, '{}' tax_rate,
'{}' barcode, '{}' unit_name, '{}' sale_order_id, '{}' share_post, '{}' src_oid, '{}' src_tid, '{}' from_mask, '{}' src_order_type,
'{}' src_order_detail_id, '{}' base_unit_id, '{}' unit_id, '{}' unit_ratio, '{}' num, '{}' num2, '{}' price, '{}' batch_id,
'{}' is_examined, '{}' is_package, '{}' is_zero_cost, '{}' scan_type, '{}' good_prop1, '{}' good_prop2, '{}' good_prop3, '{}' good_prop4,
'{}' good_prop5, '{}' good_prop6, '{}' prop1, '{}' prop2, '{}' prop3, '{}' prop4, '{}' prop5, '{}' prop6, '{}' batch_no, '{}' batch_remark,
'{}' expire_date
""".format(data_dict['rec_id'], data_dict['stockout_id'], data_dict['spec_no'],
data_dict['sell_price'], data_dict['brand_no'], data_dict['brand_name'],
data_dict['goods_type'], data_dict['gift_type'],
data_dict['goods_name'], data_dict['goods_no'], data_dict['spec_name'],
data_dict['spec_code'], data_dict['suite_no'], data_dict['cost_price'],
data_dict['total_amount'], data_dict['goods_id'],
data_dict['spec_id'], data_dict['weight'], data_dict['remark'],
data_dict['paid'], data_dict['refund_status'], data_dict['market_price'],
data_dict['discount'], data_dict['share_amount'], data_dict['tax_rate'],
data_dict['barcode'], data_dict['unit_name'], data_dict['sale_order_id'],
data_dict['share_post'], data_dict['src_oid'], data_dict['src_tid'],
data_dict['from_mask'], data_dict['src_order_type'],
data_dict['src_order_detail_id'], data_dict['base_unit_id'],
data_dict['unit_id'], data_dict['unit_ratio'], data_dict['num'],
data_dict['num2'] if "num2" in data_dict else 0, data_dict['price'],
data_dict['batch_id'],
data_dict['is_examined'] if "is_examined" in data_dict else '',
data_dict['is_package'] if "is_package" in data_dict else '',
data_dict['is_zero_cost'] if "is_zero_cost" in data_dict else '',
data_dict['scan_type'] if "scan_type" in data_dict else '', data_dict['good_prop1'],
data_dict['good_prop2'], data_dict['good_prop3'], data_dict['good_prop4'],
data_dict['good_prop5'], data_dict['good_prop6'], data_dict['prop1'],
data_dict['prop2'], data_dict['prop3'], data_dict['prop4'],
data_dict['prop5'], data_dict['prop6'], data_dict['batch_no'],
data_dict['batch_remark'] if "batch_remark" in data_dict else '',
data_dict['expire_date'].replace("0000-00-00 00:00:00",
"") if "expire_date" in data_dict else '')
print(str_sql)
return str_sql
12.执行入口
def run_details_list(self, days):
str_sql = "Select MAX(consign_time) consign_time From [wdt_stockout_list_mid] Where LEFT(shop_no,2) not In ('tb','tm')"
url = 'https:///openapi2/stockout_order_query_trade.php'
table_dict = {'table_name': 'stockout',
'first': 'stockout_list',
'second': 'details_list',
'third': ''}
self.get_condition(str_sql, url, table_dict, days)
# 淘系数据
method = "wdt.stockout.order.query.trade"
if method != '':
str_sql = "Select MAX(consign_time) consign_time From [wdt_stockout_list_mid] Where LEFT(shop_no,2) In ('tb','tm')"
taobao_url = "/router/qm?method={}&{}"
self.get_condition(str_sql, taobao_url, table_dict, days, method)
if __name__ == "__main__":
wdt_data = WDT_Message()
wdt_data.run_details_list("")
以下数据库执行,我用的是SQL server
13.创建表语句
Create Table [dbo].[wdt_stockout_list](
[stockout_id] [NChar](10) Null,
[order_no] [Varchar](40) Null,
[src_order_no] [Varchar](40) Null,
[warehouse_no] [Varchar](40) Null,
[consign_time] [DateTime] Null,
[order_type] [TinyInt] Null,
[trade_status] [TinyInt] Null,
[order_type_name] [Varchar](40) Null, [trade_type] [TinyInt] Null,
[subtype] [Varchar](256) Null,
[goods_count] [Decimal](19, 4) Null, [goods_total_amount] [Decimal](19, 4) Null, [goods_total_cost] [Decimal](19, 4) Null, [post_fee] [Decimal](19, 4) Null, [logistics_no] [Varchar](40) Null, [package_fee] [Decimal](19, 4) Null, [receiver_name] [Varchar](60) Null, [receiver_country] [Smallint] Null, [receiver_province] [Varchar](40) Null, [receiver_city] [Varchar](40) Null, [receiver_district] [Varchar](40) Null, [receiver_address] [Varchar](Max) Null, [receiver_mobile] [Varchar](11) Null, [receiver_telno] [Varchar](50) Null, [weight] [Decimal](19, 4) Null,
[logistics_type] [Varchar](40) Null, [logistics_code] [Varchar](60) Null, [logistics_name] [Varchar](40) Null, [print_remark] [Varchar](255) Null, [paid] [Decimal](19, 4) Null,
[refund_status] [TinyInt] Null, [salesman_no] [Varchar](40) Null, [salesman_name] [Varchar](40) Null, [fullname] [Varchar](40) Null, [warehouse_name] [Varchar](40) Null, [created] [DateTime] Null,
[remark] [Varchar](1000) Null, [stockout_reason] [Varchar](1000) Null, [outer_no] [Varchar](40) Null,
[trade_no] [Varchar](40) Null,
[src_trade_no] [Varchar](255) Null,
[nick_name] [Varchar](100) Null, [customer_name] [Varchar](100) Null, [customer_no] [Varchar](40) Null,
[trade_time] [DateTime] Null,
[pay_time] [DateTime] Null,
[status] [TinyInt] Null,
[shop_name] [Varchar](128) Null,
[shop_no] [Varchar](40) Null,
[buyer_message] [Varchar](1024) Null, [cs_remark] [Varchar](1024) Null,
[flag_name] [Varchar](40) Null,
[block_reason] [Decimal](19, 4) Null,
[delivery_term] [TinyInt] Null,
[fenxiao_type] [TinyInt] Null,
[fenxiao_nick] [Varchar](40) Null,
[id_card_type] [TinyInt] Null,
[receiver_area] [Varchar](128) Null,
[shop_remark] [Varchar](1024) Null,
[modified] [DateTime] Null,
[platform_id] [TinyInt] Null,
[trade_id] [Int] Null,
[checker_name] [Varchar](40) Null,
[employee_no] [Varchar](40) Null,
[operator_name] [Varchar](40) Null,
[packager_no] [Varchar](40) Null,
[packager_name] [Varchar](40) Null,
[picker_no] [Varchar](40) Null,
[picker_name] [Varchar](40) Null,
[printer_no] [Varchar](40) Null,
[printer_name] [Varchar](40) Null,
[examiner_no] [Varchar](40) Null,
[examiner_name] [Varchar](40) Null,
[stockout_no] [Varchar](40) Null,
[src_order_type] [Varchar](40) Null,
[wms_status] [Varchar](40) Null,
[warehouse_type] [TinyInt] Null,
[warehouse_id] [Smallint] Null,
[customer_id] [Varchar](40) Null,
[consign_status] [Varchar](40) Null,
[operator_id] [Varchar](40) Null,
[src_tids] [Varchar](1024) Null,
[id_card] [Varchar](40) Null,
[stock_check_time] [DateTime] Null,
[print_batch_no] [Varchar](20) Null
) On [PRIMARY] TextImage_On [PRIMARY]
Go
Set Ansi_Padding Off
Go
Create Table [dbo].[wdt_stockout_list_details]( [rec_id] [Int] Null,
[stockout_id] [Int] Null,
[spec_no] [Varchar](50) Null,
[sell_price] [Decimal](19, 4) Null, [brand_no] [Varchar](50) Null, [brand_name] [Varchar](70) Null, [goods_type] [TinyInt] Null,
[gift_type] [TinyInt] Null,
[goods_name] [Varchar](500) Null, [goods_no] [Varchar](50) Null,
[spec_name] [Varchar](100) Null, [spec_code] [Varchar](50) Null, [suite_no] [Varchar](50) Null,
[cost_price] [Decimal](19, 4) Null, [total_amount] [Decimal](19, 4) Null, [goods_id] [Int] Null,
[spec_id] [Int] Null,
[weight] [Decimal](19, 4) Null, [remark] [Varchar](50) Null,
[paid] [Decimal](19, 4) Null,
[refund_status] [TinyInt] Null, [market_price] [Decimal](19, 4) Null, [discount] [Decimal](19, 4) Null, [share_amount] [Decimal](19, 4) Null, [tax_rate] [Decimal](8, 4) Null, [barcode] [Varchar](50) Null,
[unit_name] [Varchar](50) Null,
[sale_order_id] [Int] Null,
[share_post] [Decimal](19, 4) Null, [src_oid] [Varchar](50) Null,
[src_tid] [Varchar](50) Null,
[from_mask] [Int] Null,
[src_order_type] [TinyInt] Null,
[src_order_detail_id] [Varchar](50) Null, [base_unit_id] [Smallint] Null,
[unit_id] [Smallint] Null,
[unit_ratio] [Decimal](19, 4) Null, [num] [Decimal](19, 4) Null,
[num2] [Decimal](19, 4) Null, [price] [Decimal](19, 4) Null,
[batch_id] [Varchar](50) Null,
[is_examined] [TinyInt] Null,
[is_package] [TinyInt] Null,
[is_zero_cost] [TinyInt] Null,
[scan_type] [TinyInt] Null,
[good_prop1] [Varchar](255) Null,
[good_prop2] [Varchar](255) Null,
[good_prop3] [Varchar](255) Null,
[good_prop4] [Varchar](255) Null,
[good_prop5] [Varchar](255) Null,
[good_prop6] [Varchar](255) Null,
[prop1] [Varchar](255) Null,
[prop2] [Varchar](255) Null,
[prop3] [Varchar](255) Null,
[prop4] [Varchar](255) Null,
[prop5] [Varchar](255) Null,
[prop6] [Varchar](255) Null,
[batch_no] [Varchar](25) Null,
[batch_remark] [Varchar](255) Null,
[expire_date] [DateTime] Null
) On [PRIMARY]
Go
Set Ansi_Padding Off
Go
如果有不懂欢迎一起交流学习。

相关文档
最新文档