提交 627e9f0f authored 作者: 蒋代伟's avatar 蒋代伟

金彩山垛标绑定

上级 9188cee7
...@@ -2374,13 +2374,7 @@ def fg_update(request,is_app=False): ...@@ -2374,13 +2374,7 @@ def fg_update(request,is_app=False):
if vch_id == 1 and 'stack_binding' in r: if vch_id == 1 and 'stack_binding' in r:
st = r['stack_binding'] st = r['stack_binding']
if len(st) > 0: if len(st) > 0:
stack_binding = jcs_virtual_stack_binding(batch, r['stack_binding']) stack_binding = jcs_virtual_stack_binding(batch, r['stack_binding'],cmp_id)
stacks = stack_binding['stacks']
if stacks and vch_id == 1:
aSql = stack_binding['insert_sql']
if aSql:
sSql = "insert into codes(label_code,tb,product_id,stack_id) values " + ",".join(aSql)+" on CONFLICT(label_code) do update set stack_id = EXCLUDED.stack_id"
cur.execute(sSql)
#2022-05-10 保存原始标签号码 #2022-05-10 保存原始标签号码
...@@ -13901,3 +13895,144 @@ def jcs_virtual_stack_binding(batch,stack_binding): ...@@ -13901,3 +13895,144 @@ def jcs_virtual_stack_binding(batch,stack_binding):
# "from inventory_stkdetails where batch_id=" + str(batch.id) + " and stack_id>0 " + \ # "from inventory_stkdetails where batch_id=" + str(batch.id) + " and stack_id>0 " + \
# "on CONFLICT(stack_id,label_pk_id) do nothing" # "on CONFLICT(stack_id,label_pk_id) do nothing"
return data return data
def jcs_virtual_stack_binding(batch,stack_binding,company_id):
data = {'e': '' }
# 2022-07-20 数据写入日志
cs = Company.objects.filter(id=int(company_id))
c = cs[0]
cur= connection.cursor()
cur.execute("create temp table temps(" + \
"id serial," + \
"label_code character varying(32) ," + \
"tb character varying(20)," + \
"product_id integer," + \
"stack_id integer," + \
"wrapper_id integer," + \
"code character varying(32)," + \
"label_id bigint," + \
"label_pk_id bigint," + \
"label_pkg smallint," + \
"err character varying(100)," + \
"label_code0 character varying(32)," + \
"from_agent_id integer)"
)
insert_sql = []
codes=[]
for i in stack_binding:
is_physical = True
code = i['stack']
if code[:4] == 'xndb':
is_physical = False
stks = Stack.objects.filter(code=code)
if stks:
stack = stks[0]
else:
stack = Stack(company_id=batch.company_id, code=code)
stack.product_id = batch.product_id
stack.store_id = batch.store_fr_id
stack.is_physical = is_physical
if 'location' in i:
stack.location = i['location']
if 'qty_lmt' in i:
stack.qty_lmt = i['qty_lmt']
if 'is_fixed' in i:
stack.is_fixed = i['is_fixed']
stack.qty_lmt = 0
stack.save()
if batch.product_id:
product_id = str(batch.product_id)
else:
product_id = 'null'
for l in i['codes']:
insert_sql.append("('" + l + "','" + l[:4] + "'," + product_id + "," + str(stack.id) + ")")
codes.append(l)
# s = "INSERT INTO inventory_stackdetails(company_id,product_id,label_pk_id,label_id,label_pkg,label_code,tm,stack_id) " + \
# "select company_id,product_id,label_pk_id,label_id,label_pkg,label_code,now(),stack_id " + \
# "from inventory_stkdetails where batch_id=" + str(batch.id) + " and stack_id>0 " + \
# "on CONFLICT(stack_id,label_pk_id) do nothing"
sSql = "insert into temps(label_code,tb,product_id,stack_id) " \
"values " + ",".join(insert_sql)
cur.execute(sSql)
stacks = []
stack_binding = ''
# 2022-05-10 保存原始标签号码
cur.execute("update temps set label_code0=label_code")
s = "update temps o set code=coalesce" + \
"((select code0 from label.lbl_replace_details where code=o.label_code order by batch_id desc limit 1),o.label_code)"
cur.execute(s)
# 2020-07-27 处理跨段动态绑定
s = "update temps set tb=b.tbname from " + \
"(SELECT tb,label_code from temps) a " + \
"left outer join " + \
"(SELECT segment, tbname FROM label.lbl_tbcross) b " + \
"on a.tb=b.segment " + \
"where temps.label_code=a.label_code and b.tbname is not null"
cur.execute(s)
# 2022-05-09 有些AB样标使用了跨段表里的号段
s = "select " + \
"(select code_a FROM label.lbl_abcode where code_b=label_code or code_a=label_code)," + \
"tb='t'||left((select code_a FROM label.lbl_abcode where code_b=label_code or code_a=label_code),4) " + \
"from temps " + \
"where (select id from label.lbl_abcode where code_a=label_code or code_b=label_code limit 1)>0"
cur.execute(s)
r = cur.fetchone()
s = "update temps set code=" + \
"(select code_a FROM label.lbl_abcode where code_b=label_code or code_a=label_code)," + \
"tb='t'||left((select code_a FROM label.lbl_abcode where code_b=label_code or code_a=label_code),4) " + \
"where (select id from label.lbl_abcode where code_a=label_code or code_b=label_code limit 1)>0"
cur.execute(s)
cur.execute("update temps set tb='t'||left(code,4) where length(tb)=4")
cur.execute("select tb from temps group by tb")
rs = cur.fetchall()
for r in rs:
# cur.execute("select to_regclass('label." + r[0] + "')")
cur.execute("select count(*) from information_schema.tables where table_schema='label' " + \
"and table_type='BASE TABLE' and table_name='" + r[0] + "'"
)
r0 = cur.fetchone()
if r0[0]:
s = "update temps set " + \
"label_id=b.id," + \
"label_pkg=b.package_id," + \
"label_pk_id=coalesce(b.parent_id,b.id) " + \
"from " + \
"(SELECT label_code,code from temps where tb='" + r[0] + "') a " + \
"left outer join " + \
"(select id,code,parent_id,package_id,is_pk from label." + r[0] + ") b " + \
"on a.code=b.code " + \
"where tb='" + r[0] + "' and temps.code=a.code"
cur.execute(s)
# 没有标签id的,看是不是企业第三方标签
s = "update temps set " + \
"label_id=b.id," + \
"label_pkg=b.package_id," + \
"label_pk_id=coalesce(b.parent_id,b.id) " + \
"from " + \
"(SELECT label_code,code from codes where label_id is null) a " + \
"left outer join " + \
"(select id,code,parent_id,package_id,is_pk from label.thirdparty where cid=" + str(c.ancestor_id) + ") b " + \
"on a.code=b.code " + \
"where temps.code=a.code and label_id is null"
cur.execute(s)
s = "INSERT INTO inventory_stackdetails(company_id,product_id,label_pk_id,label_id,label_pkg,label_code,tm,stack_id) " + \
"select "+str(company_id)+",product_id,label_pk_id,label_id,label_pkg,label_code,now(),stack_id " + \
"from temps where label_pk_id is not null and stack_id>0 " + \
"on CONFLICT(stack_id,label_pk_id) do nothing"
cur.execute(s)
return data
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论