zhaowenxuan
7 天以前 db52209b0d830d00c7ec807e2b66d94079d4aff6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
CREATE TABLE `tb_proprice_his` (
   `pro_id` bigint DEFAULT NULL COMMENT '小项id',
   `old_price` varchar(255) DEFAULT NULL,
   `new_price` varchar(255) DEFAULT NULL,
   `time` datetime DEFAULT CURRENT_TIMESTAMP
);
 
 
CREATE TABLE `tb_project_price_history` (
    `pro_id` bigint DEFAULT NULL COMMENT '小项id',
    `old_price` varchar(255) DEFAULT NULL,
    `new_price` varchar(255) DEFAULT NULL,
    `time` datetime DEFAULT CURRENT_TIMESTAMP
) COMMENT='his同步价格历史记录表';
 
DROP PROCEDURE IF EXISTS `tb_check_hisproject`;
CREATE DEFINER=`root`@`%` PROCEDURE `tb_check_hisproject`()
BEGIN
    # 子项临时表
    DROP TEMPORARY TABLE IF EXISTS temp_tb_check_hisproject_proid;
# 大项临时表
    DROP TEMPORARY TABLE IF EXISTS temp_tb_check_hisproject_parent_proid;
# 被停用的大项临时表
    DROP TEMPORARY TABLE IF EXISTS temp_tb_check_hisproject_parent_updated;
 
    CREATE TEMPORARY TABLE temp_tb_check_hisproject_proid(id BIGINT,p_id BIGINT);
    CREATE TEMPORARY TABLE temp_tb_check_hisproject_parent_proid(id BIGINT);
    CREATE TEMPORARY TABLE temp_tb_check_hisproject_parent_updated (id BIGINT);
 
# 提取项目表hisxmdm在his表不存在的小项
    INSERT INTO temp_tb_check_hisproject_proid (id,p_id)
    SELECT tp.pro_id,tp.pro_parent_id
    FROM tj_project tp
    WHERE tp.pro_status = 0
      AND tp.pro_parent_id <> 0
      AND tp.deleted = 0
      AND tp.his_xmbm <> ''
      AND tp.pro_parent_id = 1633660948860522504
      AND NOT EXISTS (
        SELECT 1
        FROM ltkj_mxjfxmzd lm
        WHERE lm.xmdm = tp.his_xmbm
    );
 
# 根据提取的小项拿大项
    INSERT INTO temp_tb_check_hisproject_parent_proid
    SELECT p.p_id FROM temp_tb_check_hisproject_proid p GROUP BY p.p_id;
 
# 修改子项状态为停用
    UPDATE tj_project t1 JOIN temp_tb_check_hisproject_proid t2 ON t1.pro_id = t2.id SET t1.pro_status = 1;
# 修改父项状态为停用
    INSERT INTO temp_tb_check_hisproject_parent_updated (id)
    SELECT p.pro_id
    FROM tj_project p
             JOIN temp_tb_check_hisproject_parent_proid t ON p.pro_id = t.id
    WHERE NOT EXISTS (
        SELECT 1
        FROM tj_project AS child
        WHERE child.pro_parent_id = p.pro_id
          AND child.pro_status = 0
          AND child.deleted = 0
          AND child.his_xmbm <> ''
    );
    UPDATE tj_project p JOIN temp_tb_check_hisproject_parent_updated t ON p.pro_id = t.id SET p.pro_status = 1;
 
# 套餐、组合中移除未启用项目
    DELETE FROM tj_package_project WHERE pro_id IN (SELECT id FROM temp_tb_check_hisproject_parent_updated);
    DELETE FROM tj_grouping_pro WHERE pro_id IN (SELECT id FROM temp_tb_check_hisproject_parent_updated);
    DELETE FROM tj_zhxmglpro WHERE pro_id IN (SELECT id FROM temp_tb_check_hisproject_parent_updated);
 
# 调用同步价格存储过程
    CALL tb_hisprodj();
 
    # 修改项目价格
--  UPDATE tj_project a
--     JOIN temp_tb_check_hisproject_parent_proid b ON a.pro_id = b.id
--     JOIN (
--         SELECT pro_parent_id, SUM(pro_price * sl) AS parentPrice
--         FROM tj_project
--         WHERE pro_parent_id != 0 and deleted=0 and pro_status=0
--         GROUP BY pro_parent_id
--     ) d ON a.pro_id = d.pro_parent_id
--     SET a.pro_price = d.parentPrice;
--
--   -- 4 同步套餐关联项目表价格
--
--      UPDATE tj_package_project a  JOIN tj_project b ON a.pro_id=b.pro_id
--
--      SET a.price_now = b.pro_price * (a.limits/10),
--      a.price_ord = b.pro_price
--      WHERE a.pro_id= b.pro_id AND b.pro_id IN (select id from temp_tb_check_hisproject_parent_proid);
--
--
--     -- 5 同步套餐价格
--        UPDATE tj_package aa
--        JOIN (
--            SELECT
--                a.pac_id,
--                SUM( a.price_now ) pr,
--           sum(a.price_ord) olpr
--            FROM
--                tj_package_project a
--            GROUP BY
--                a.pac_id
--            ) bb
--            SET aa.price = bb.olpr ,
--         aa.new_price = bb.pr
--        WHERE
--            aa.pac_id = bb.pac_id;
--
-- -- 单位套餐明细项目
--      update tj_grouping_pro a
--      join  tj_project b ON a.pro_id=b.pro_id
--      SET a.ys_price = b.pro_price * (a.limits/10),
--      a.pro_price = b.pro_price
--      WHERE a.pro_id= b.pro_id;
--   -- 单位套餐总价
--      UPDATE tj_dw_grouping aa
--        JOIN (
--            SELECT
--                a.grouping_id,
--                SUM( a.ys_price ) pr,
--           sum(a.pro_price) olpr
--            FROM
--                tj_grouping_pro a
--            GROUP BY
--                a.grouping_id
--            ) bb
--            SET aa.price = bb.olpr ,
--         aa.ys_price = bb.pr
--        WHERE
--            aa.id = bb.grouping_id;
--
-- DROP TEMPORARY TABLE IF EXISTS temp_tb_check_hisproject_proid;
-- DROP TEMPORARY TABLE IF EXISTS temp_tb_check_hisproject_parent_proid;
 
# 子项临时表
    DROP TEMPORARY TABLE IF EXISTS temp_tb_check_hisproject_proid;
# 大项临时表
    DROP TEMPORARY TABLE IF EXISTS temp_tb_check_hisproject_parent_proid;
# 被停用的大项临时表
    DROP TEMPORARY TABLE IF EXISTS temp_tb_check_hisproject_parent_updated;
END
 
 
DROP PROCEDURE IF EXISTS `tb_hisprodj`;
CREATE DEFINER=`root`@`localhost` PROCEDURE `tb_hisprodj`()
BEGIN
 
-- 1 同步父项目对应子项的数量(项目数量和his中数量不一致的项目)
 
 
--   UPDATE tj_project a
--        LEFT JOIN tj_project b ON a.pro_id = b.pro_parent_id
--        LEFT JOIN ltkj_jfzhglmxjfxmzd c ON a.his_xmbm = c.zhxmdm AND c.xmdm=b.his_xmbm
--        LEFT JOIN ltkj_mxjfxmzd d ON c.xmdm = d.xmdm
--        SET b.sl=c.sl
--        WHERE
--        a.deleted = 0
--        AND b.deleted = 0
--        AND b.sl != c.sl
--        AND b.pro_name NOT LIKE '%费%' AND b.pro_name NOT LIKE '静脉采血';
 
-- 2 同步明细项目以及明细项目对应的父项目
 
    DROP TEMPORARY TABLE IF EXISTS temp_tb_hisdj_parent_ids;
 
    CREATE TEMPORARY TABLE temp_tb_hisdj_parent_ids (id BIGINT);
-- 查询his和体检单项价格不对应的所有大项id
    INSERT INTO temp_tb_hisdj_parent_ids (id)
    SELECT DISTINCT a.pro_parent_id
    FROM tj_project a
    JOIN ltkj_mxjfxmzd b ON a.his_xmbm = b.xmdm
    WHERE a.deleted = 0 and a.pro_status=0 AND a.pro_parent_id != 0 AND a.pro_price <> b.xmdj ;
 
    delete from  tb_proprice_his;
    -- 查询 所有子项目的价格及项目id
    INSERT INTO tb_proprice_his(pro_id,old_price,new_price)
    SELECT a.pro_id,a.pro_price,b.xmdj  FROM tj_project a
    JOIN ltkj_mxjfxmzd b ON a.his_xmbm = b.xmdm
    join temp_tb_hisdj_parent_ids d on d.id = a.pro_parent_id
    WHERE a.deleted = 0 and a.pro_status=0 AND a.pro_parent_id != 0 AND a.pro_price <> b.xmdj  AND a.his_xmbm IS NOT NULL AND a.his_xmbm <> '';
 
    UPDATE tj_project a
    JOIN tb_proprice_his b ON a.pro_id = b.pro_id
    SET a.pro_price = b.new_price,
        a.hisdj = b.new_price
    WHERE a.deleted = 0  and a.pro_status=0;
 
    UPDATE tj_project a
    JOIN temp_tb_hisdj_parent_ids b ON a.pro_id = b.id
    JOIN (
        SELECT pro_parent_id, SUM(pro_price * sl) AS parentPrice
        FROM tj_project
        WHERE pro_parent_id != 0 and deleted=0 and pro_status=0
        GROUP BY pro_parent_id
    ) d ON a.pro_id = d.pro_parent_id
    SET a.pro_price = d.parentPrice;
 
 
 
  -- 4 同步套餐关联项目表价格
 
     UPDATE tj_package_project a  JOIN tj_project b ON a.pro_id=b.pro_id
 
     SET a.price_now = b.pro_price * (a.limits/10),
     a.price_ord = b.pro_price
     WHERE a.pro_id= b.pro_id;
 
 
 
    -- 5 同步套餐价格
       UPDATE tj_package aa
       JOIN (
           SELECT
               a.pac_id,
               SUM( a.price_now ) pr,
          sum(a.price_ord) olpr
           FROM
               tj_package_project a
           GROUP BY
               a.pac_id
           ) bb
           SET aa.price = bb.olpr ,
        aa.new_price = bb.pr
       WHERE
           aa.pac_id = bb.pac_id;
 
-- 单位套餐明细项目
     update tj_grouping_pro a
     join  tj_project b ON a.pro_id=b.pro_id
     SET a.ys_price = b.pro_price * (a.limits/10),
     a.pro_price = b.pro_price
     WHERE a.pro_id= b.pro_id;
  -- 单位套餐总价
     UPDATE tj_dw_grouping aa
       JOIN (
           SELECT
               a.grouping_id,
               SUM( a.ys_price ) pr,
          sum(a.pro_price) olpr
           FROM
               tj_grouping_pro a
           GROUP BY
               a.grouping_id
           ) bb
           SET aa.price = bb.olpr ,
        aa.ys_price = bb.pr
       WHERE
           aa.id = bb.grouping_id;
 
    DROP TEMPORARY TABLE IF EXISTS temp_tb_hisdj_parent_ids;
 
   insert into tb_project_price_history
   select * from tb_proprice_his;
 
 
END
 
 
# 将套餐 组合 单位套餐中 所有胸腹连透项目替换为胸部正位片
UPDATE tj_package_project SET pro_id = 1740177341251154261,price_now = 40,limits = 10,price_ord = 40 WHERE pro_id = 1633660948860522504;
UPDATE tj_grouping_pro a
    JOIN (
        SELECT id FROM tj_grouping_pro WHERE pro_id = 1633660948860522504
    ) b ON a.id = b.id
SET a.pro_id = 1740177341251154261,
    a.pro_name = '胸部正位片',
    a.pro_py_name = 'xbzwp',
    a.pro_price = 40,
    a.limits = 10,
    a.ys_price = 40;
call tb_check_hisproject();