本帖最后由 AAA努力才幸福 于 2023-3-20 11:10 编辑
我用sql语句完成整个存储过程,服务端命令不知道咋实现,希望有格友能写个纯服务端命令实现
BEGIN
-- 存储过程的代码逻辑
-- 解析json数据并保存为临时表
CREATE TEMPORARY TABLE IF NOT EXISTS jt AS (
SELECT
jtt.*,
-- 转换excel传入的时间戳
FROM_UNIXTIME((招标发布日期1-70*365-19)*86400-8*3600,'%Y-%m-%d') AS 招标发布日期,
-- FROM_UNIXTIME((请购日期1-70*365-19)*86400-8*3600,'%Y-%m-%d') AS 请购日期,
-- FROM_UNIXTIME((创建时间1-70*365-19)*86400-8*3600,'%Y-%m-%d') AS 创建时间,
FROM_UNIXTIME((开标日期1-70*365-19)*86400-8*3600,'%Y-%m-%d') AS 开标日期,
FROM_UNIXTIME((定标日期1-70*365-19)*86400-8*3600,'%Y-%m-%d') AS 定标日期
FROM jsontemp,
JSON_TABLE(aaa, '$' COLUMNS (
批次编号 VARCHAR(50) PATH '$."批次编号"',
批次名称 VARCHAR(100) PATH '$."批次名称"',
招标发布日期1 VARCHAR(255) PATH '$."招标发布日期"',
标号 VARCHAR(255) PATH '$."标号"',
标名 VARCHAR(50) PATH '$."标名"',
包号 VARCHAR(255) PATH '$."包号"',
包名称 VARCHAR(50) PATH '$."包名称"',
-- 需求组织编码 VARCHAR(50) PATH '$."需求组织编码"',
-- 需求组织名称 VARCHAR(100) PATH '$."需求组织名称"',
请购单号 VARCHAR(50) PATH '$."请购单号"',
-- 请购日期1 VARCHAR(255) PATH '$."请购日期"',
-- 创建时间1 VARCHAR(255) PATH '$."创建时间"',
-- 备注 VARCHAR(255) PATH '$."备注"',
行号 VARCHAR(50) PATH '$."行号"',
-- 物料编码 VARCHAR(50) PATH '$."物料编码"',
-- 物料名称 VARCHAR(100) PATH '$."物料名称"',
-- 需求日期1 VARCHAR(255) PATH '$."需求日期"',
-- 主数量 VARCHAR(255) PATH '$."主数量"',
-- 计量单位 VARCHAR(50) PATH '$."计量单位"',
-- 行备注 VARCHAR(255) PATH '$."行备注"',
-- 项目编码 VARCHAR(50) PATH '$."项目编码"',
-- 项目名称 VARCHAR(100) PATH '$."项目名称"',
-- 无税税单价 VARCHAR(255)PATH '$."无税税单价"',
税率 VARCHAR(255) PATH '$."税率"',
含税单价 VARCHAR(255) PATH '$."含税单价"',
含税金额 VARCHAR(255) PATH '$."含税金额"',
中标厂家 VARCHAR(100) PATH '$."中标厂家"',
成交通知书编号 VARCHAR(255) PATH '$."成交通知书编号"',
-- 采购方式 VARCHAR(255) PATH '$."采购方式"',
采购方式ID INT PATH '$."采购方式ID"',
-- 开标状态 VARCHAR(255) PATH '$."开标状态"',
开标状态ID INT PATH '$."开标状态ID"',
-- 评审方法 VARCHAR(255) PATH '$."评审方法"',
评审方法ID INT PATH '$."评审方法ID"',
-- 流转平台 VARCHAR(255) PATH '$."流转平台"',
流转平台ID INT PATH '$."流转平台ID"',
-- 报价方式 VARCHAR(255) PATH '$."报价方式"',
报价方式ID INT PATH '$."报价方式ID"',
开标日期1 VARCHAR(255) PATH '$."开标日期"',
定标日期1 VARCHAR(255) PATH '$."定标日期"',
-- 采购组织 VARCHAR(255) PATH '$."采购组织"',
采购组织ID VARCHAR(255) PATH '$."采购组织ID"',
-- 流转状态 VARCHAR(255) PATH '$."流转状态"',
流转状态ID INT PATH '$."流转状态ID"',
-- 采购类型 VARCHAR(255) PATH '$."采购类型"',
采购类型ID INT PATH '$."采购类型ID"',
-- 授权采购方式 VARCHAR(255) PATH '$."授权采购方式"',
授权采购方式ID INT PATH '$."授权采购方式ID"',
-- 招标代理机构 VARCHAR(255) PATH '$."招标代理机构"',
招标代理机构ID INT PATH '$."招标代理机构ID"'
)) AS jtt);
-- 增加供应商
INSERT INTO 往来单位 (`供应商名称`, `性质ID`, `分类ID`)
SELECT DISTINCT
jt.中标厂家,
1001,
2
FROM
jt
LEFT JOIN 往来单位 ON jt.中标厂家 = 往来单位.供应商名称
WHERE
`中标厂家` IS NOT NULL
ON DUPLICATE KEY UPDATE
`分类ID` = VALUES(`分类ID`);
-- 批次划分
INSERT INTO `批次划分` (批次编号, 批次名称, 流转状态ID ,授权采购方式ID ,单据日期 ,采购类型编号,经办组织)
SELECT DISTINCT
jt.`批次编号`,
jt.`批次名称`,
jt.`流转状态ID`,
jt.`授权采购方式ID`,
jt.`招标发布日期` as 单据日期,
jt.采购类型ID as 采购类型编号,
jt.采购组织ID as 经办组织
FROM
jt
WHERE
`批次编号` IS NOT NULL
ON DUPLICATE KEY UPDATE
`批次名称` = VALUES(`批次名称`),
流转状态ID = VALUES(流转状态ID),
`授权采购方式ID` = VALUES(`授权采购方式ID`),
单据日期 = VALUES(`单据日期`),
采购类型编号 = VALUES(`采购类型编号`),
经办组织 = VALUES(`经办组织`);
-- 标划分
INSERT INTO `标划分` (`标号`, `标名`, `批次编号`, `开标状态ID`,单据日期,开标日期,定标日期,采购方式ID,流转状态ID ,评审方法ID ,招标代理机构ID)
SELECT DISTINCT
jt.`标号`,
jt.`标名`,
jt.`批次编号`,
jt.`开标状态ID`,
jt.`招标发布日期` as 单据日期,
jt.开标日期,
jt.定标日期,
jt.采购方式ID,
jt.流转状态ID,
jt.评审方法ID,
jt.招标代理机构ID
FROM
jt
WHERE
`标号` IS NOT NULL and
`批次编号` IS NOT NULL
ON DUPLICATE KEY UPDATE
`标名` = VALUES(`标名`),
`开标状态ID` = VALUES(`开标状态ID`),
`单据日期` = VALUES(`单据日期`),
`开标日期` = VALUES(`开标日期`),
`定标日期` = VALUES(`定标日期`),
`采购方式ID` = VALUES(`采购方式ID`),
`流转状态ID` = VALUES(`流转状态ID`),
`评审方法ID` = VALUES(`评审方法ID`),
`招标代理机构ID` = VALUES(`招标代理机构ID`) ;
-- 包划分
INSERT INTO `包划分` (`包号`, `包名`, `标ID`, `中标厂家`, `中标厂家ID` ,开标状态ID ,评审方法ID ,合同流转平台ID ,报价方式ID ,单据日期 ,流转状态ID ,成交通知书编号)
SELECT DISTINCT
a.`包号`,
a.`包名`,
a.`标ID`,
a.`中标厂家`,
a.`中标厂家ID`,
a.开标状态ID,
a.评审方法ID,
a.流转平台ID as 合同流转平台ID,
a.报价方式ID,
a.招标发布日期 as 单据日期,
a.流转状态ID,
a.成交通知书编号
FROM
(SELECT
jt.`批次编号`,
jt.`标号`,
jt.`包号`,
jt.`包名称`as `包名`,
jt.`中标厂家`,
jt.成交通知书编号,
jt.开标状态ID,
jt.评审方法ID,
jt.流转平台ID,
jt.报价方式ID,
jt.招标发布日期,
jt.流转状态ID,
`往来单位`.ID as 中标厂家ID,
`标划分`.ID as 标ID
FROM
jt
INNER JOIN `标划分` ON jt.`批次编号` = `标划分`.`批次编号` AND jt.`标号` = `标划分`.`标号`
LEFT JOIN `往来单位` ON jt.`中标厂家` = `往来单位`.`供应商名称`) AS a
WHERE
a.`包号` IS NOT NULL
ON DUPLICATE KEY UPDATE
`包名` = VALUES(`包名`),
`中标厂家`= VALUES (`中标厂家`),
`中标厂家ID` =VALUES (`中标厂家ID`),
`开标状态ID` =VALUES (`开标状态ID`),
`评审方法ID` =VALUES (`评审方法ID`),
`合同流转平台ID` =VALUES (`合同流转平台ID`),
`报价方式ID` =VALUES (`报价方式ID`),
`单据日期` =VALUES (`单据日期`),
`流转状态ID` =VALUES (`流转状态ID`),
`成交通知书编号` =VALUES (`成交通知书编号`);
-- 包明细
INSERT INTO `包明细` (`计划物料ID`, `中标单价`, `中标金额`, `包ID`)
SELECT
a.`计划物料ID`,
a.`中标单价`,
a.`中标金额`,
a.`包ID`
FROM
(SELECT
jt.`包名称`,
jt.`请购单号`,
jt.`行号`,
jt.`含税单价` AS `中标单价`,
jt.`含税金额` AS `中标金额`,
jt.`中标厂家`,
`采购计划明细表`.ID AS `计划物料ID`,
jt.`标名`,
`标划分`.ID AS `标ID`,
`包划分`.ID AS `包ID`,
`批次划分`.`批次编号`
FROM
jt
LEFT JOIN
`采购计划明细表`
ON
jt.`请购单号` = `采购计划明细表`.`请购单号` AND
jt.`行号` = `采购计划明细表`.`行号`
INNER JOIN
`包划分`
ON
jt.`包号` = `包划分`.`包号`
INNER JOIN
`标划分`
ON
jt.`标号` = `标划分`.`标号` AND
`包划分`.`标ID` = `标划分`.ID
INNER JOIN
`批次划分`
ON
jt.`批次编号` = `批次划分`.`批次编号` AND
`标划分`.`批次编号` = `批次划分`.`批次编号`
) AS a
WHERE
a.`请购单号` IS NOT NULL
ON DUPLICATE KEY UPDATE
`中标单价` = VALUES(`中标单价`),
`中标金额` = VALUES(`中标金额`);
TRUNCATE TABLE `jsontemp`;
END
|