客户信息.sql 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506
  1. CREATE OR REPLACE PROCEDURE shanglifeecif.init_individual_main() -- 初始化 数据全部插入
  2. IS
  3. DECLARE
  4. individual_count int
  5. strsql string
  6. BEGIN
  7. shanglifeecif.customertotaltemp();
  8. DELETE FROM shanglifeecif.individual;
  9. --初始化客户信息
  10. shanglifeecif.init_all_individual();
  11. --更新用户等级信息
  12. shanglifeecif.up_t_customers_class_1();
  13. --更新其它信息
  14. shanglifeecif.up_other_customerinfo()
  15. END;
  16. /
  17. CREATE OR REPLACE PROCEDURE shanglifeecif.customertotaltemp() IS
  18. DECLARE
  19. BEGIN
  20. DELETE FROM shanglifeecif.customertotaltemp;
  21. insert into shanglifeecif.customertotaltemp(
  22. scustid,
  23. name,
  24. gender,
  25. birthday,
  26. idcard,
  27. idtype
  28. )
  29. SELECT
  30. scustid ,
  31. max(name) as name,
  32. max(gender) as gender ,
  33. max(birthday) as birthday,
  34. max(idcard) as idcard,
  35. max(idtype) AS idtype
  36. FROM (
  37. SELECT
  38. trim(customerno) AS scustid,--投保人
  39. trim(name) AS name,
  40. trim(sex) AS gender,
  41. trim(birthday) AS birthday,
  42. trim(idtype) AS idtype ,
  43. trim(idno) AS idcard
  44. FROM
  45. policy_information
  46. WHERE customerno IS NOT NULL
  47. UNION
  48. SELECT
  49. trim(insuredno) AS scustid,--被保人
  50. trim(insuredname) AS name,
  51. trim(insuredsex) AS gender,
  52. trim(insuredbirthday) AS birthday,
  53. trim(insuredidtype) AS idtype ,
  54. trim(insuredidno) AS idcard
  55. FROM
  56. policy_information
  57. WHERE insuredno IS NOT NULL
  58. ) tmpTable GROUP BY scustid;
  59. UPDATE shanglifeecif.customertotaltemp sct SET sct.mobile = (SELECT trim(t.MOBILE) FROM t_customer_class t WHERE sct.scustid=t.customer_id);
  60. EXCEPTION
  61. WHEN HIVE_EXCEPTION THEN
  62. INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
  63. WHEN Others THEN
  64. INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
  65. END ;
  66. /
  67. CREATE OR REPLACE PROCEDURE shanglifeecif.init_all_individual() -- 初始化所有客户信息
  68. IS
  69. BEGIN
  70. --查询出此次处理的数据并出表中
  71. insert into shanglifeecif.individual (
  72. indid,
  73. custid,
  74. scustid,
  75. name,
  76. gender,
  77. birthday,
  78. idcard,
  79. Passport,
  80. Dlicense,
  81. OtherIdNumber,
  82. created_time,
  83. created_by
  84. ) SELECT
  85. row_number()OVER(),
  86. 'CP'||lpad(row_number()over(),10,'0'),
  87. sc.scustid,
  88. sc.name,
  89. sc.gender,
  90. sc.birthday,
  91. CASE sc.idtype WHEN '0' THEN sc.idcard END AS idcard,
  92. CASE sc.idtype WHEN '1' THEN sc.idcard END AS passport,
  93. CASE sc.idtype WHEN '3' THEN sc.idcard END AS dlicense,
  94. CASE WHEN sc.idtype <> '0' AND sc.idtype <> '1' AND sc1.idtype <> '3' THEN sc.idcard END AS otherIdnumber,
  95. sysdate,
  96. 'admin'
  97. FROM shanglifeecif.customertotaltemp sc ORDER BY sc.scustid;
  98. EXCEPTION
  99. WHEN HIVE_EXCEPTION THEN
  100. INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
  101. WHEN Others THEN
  102. INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
  103. END;
  104. /
  105. CREATE OR REPLACE PROCEDURE shanglifeecif.init_individual_0( individual_count OUT int) -- 初始化 身份证
  106. IS
  107. BEGIN
  108. --查询出此次处理的数据并出表中
  109. insert into shanglifeecif.individual (
  110. indid,
  111. custid,
  112. scustid,
  113. name,
  114. gender,
  115. birthday,
  116. idcard,
  117. created_time,
  118. created_by
  119. )
  120. SELECT
  121. row_number()over(),
  122. 'CP'||lpad(row_number()over(),10,'0'),
  123. scustid ,
  124. max(name) as name,
  125. max(gender) as gender ,
  126. max(birthday) as birthday,
  127. max(idcard) as idcard,
  128. sysdate,
  129. 'admin'
  130. FROM (
  131. SELECT
  132. trim(customerno) AS scustid,--投保人
  133. trim(name) AS name,
  134. trim(sex) AS gender,
  135. trim(birthday) AS birthday,
  136. trim(idtype) AS idtype ,
  137. trim(idno) AS idcard
  138. FROM
  139. policy_information
  140. WHERE customerno IS NOT NULL AND idtype=0
  141. UNION
  142. SELECT
  143. trim(insuredno) AS scustid,--被保人
  144. trim(insuredname) AS name,
  145. trim(insuredsex) AS gender,
  146. trim(insuredbirthday) AS birthday,
  147. trim(insuredidtype) AS idtype ,
  148. trim(insuredidno) AS idcard
  149. FROM
  150. policy_information
  151. WHERE insuredno IS NOT NULL AND insuredidtype=0
  152. ) tmpTable GROUP BY scustid
  153. --已经存在的数据行数
  154. select count(0) into individual_count from shanglifeecif.individual;
  155. EXCEPTION
  156. WHEN HIVE_EXCEPTION THEN
  157. INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
  158. WHEN Others THEN
  159. INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
  160. END;
  161. /
  162. CREATE OR REPLACE PROCEDURE shanglifeecif.init_individual_1(individual_count INOUT int) -- 初始化 护照
  163. IS
  164. BEGIN
  165. --查询出此次处理的数据并出表中
  166. insert into shanglifeecif.individual (
  167. indid,
  168. custid,
  169. scustid,
  170. name,
  171. gender,
  172. birthday,
  173. passport,
  174. created_time,
  175. created_by
  176. )
  177. SELECT
  178. row_number()over(),
  179. 'CP'||lpad(row_number()over(),10,'0'),
  180. scustid ,
  181. max(name) as name,
  182. max(gender) as gender ,
  183. max(birthday) as birthday,
  184. max(idcard) as idcard,
  185. sysdate,
  186. 'admin'
  187. FROM (
  188. SELECT
  189. trim(customerno) AS scustid,--投保人
  190. trim(name) AS name,
  191. trim(sex) AS gender,
  192. trim(birthday) AS birthday,
  193. trim(idtype) AS idtype ,
  194. trim(idno) AS idcard
  195. FROM
  196. policy_information
  197. WHERE customerno IS NOT NULL AND idtype=1
  198. UNION
  199. SELECT
  200. trim(insuredno) AS scustid,--被保人
  201. trim(insuredname) AS name,
  202. trim(insuredsex) AS gender,
  203. trim(insuredbirthday) AS birthday,
  204. trim(insuredidtype) AS idtype ,
  205. trim(insuredidno) AS idcard
  206. FROM
  207. policy_information
  208. WHERE insuredno IS NOT NULL AND insuredidtype=1
  209. ) tmpTable GROUP BY scustid
  210. --已经存在的数据行数
  211. select count(0) into individual_count from shanglifeecif.individual;
  212. EXCEPTION
  213. WHEN HIVE_EXCEPTION THEN
  214. INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
  215. WHEN Others THEN
  216. INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
  217. END;
  218. /
  219. CREATE OR REPLACE PROCEDURE shanglifeecif.init_individual_3(individual_count INOUT int) -- 初始化 驾照
  220. IS
  221. BEGIN
  222. --查询出此次处理的数据并出表中
  223. insert into shanglifeecif.individual(
  224. indid,
  225. custid,
  226. scustid,
  227. name,
  228. gender,
  229. birthday,
  230. dlicense,
  231. created_time,
  232. created_by
  233. )
  234. SELECT
  235. row_number()over(),
  236. 'CP'||lpad(row_number()over(),10,'0'),
  237. scustid ,
  238. max(name) as name,
  239. max(gender) as gender ,
  240. max(birthday) as birthday,
  241. max(idcard) as idcard,
  242. sysdate,
  243. 'admin'
  244. FROM (
  245. SELECT
  246. trim(customerno) AS scustid,--投保人
  247. trim(name) AS name,
  248. trim(sex) AS gender,
  249. trim(birthday) AS birthday,
  250. trim(idtype) AS idtype ,
  251. trim(idno) AS idcard
  252. FROM
  253. policy_information
  254. WHERE customerno IS NOT NULL AND idtype=3
  255. UNION
  256. SELECT
  257. trim(insuredno) AS scustid,--被保人
  258. trim(insuredname) AS name,
  259. trim(insuredsex) AS gender,
  260. trim(insuredbirthday) AS birthday,
  261. trim(insuredidtype) AS idtype ,
  262. trim(insuredidno) AS idcard
  263. FROM
  264. policy_information
  265. WHERE insuredno IS NOT NULL AND insuredidtype=3
  266. ) tmpTable GROUP BY scustid
  267. --已经存在的数据行数
  268. select count(0) into individual_count from shanglifeecif.individual;
  269. EXCEPTION
  270. WHEN HIVE_EXCEPTION THEN
  271. INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
  272. WHEN Others THEN
  273. INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
  274. END;
  275. /
  276. CREATE OR REPLACE PROCEDURE shanglifeecif.init_individual_other(individual_count INOUT int) -- 初始化除了以上三种证件信息
  277. IS
  278. BEGIN
  279. --查询出此次处理的数据并出表中
  280. insert into shanglifeecif.individual(
  281. indid,
  282. custid,
  283. scustid,
  284. name,
  285. gender,
  286. birthday,
  287. otheridnumber,
  288. created_time,
  289. created_by
  290. )
  291. SELECT
  292. row_number()over(),
  293. 'CP'||lpad(row_number()over(),10,'0'),
  294. scustid ,
  295. max(name) as name,
  296. max(gender) as gender ,
  297. max(birthday) as birthday,
  298. max(idcard) as idcard,
  299. sysdate,
  300. 'admin'
  301. FROM (
  302. SELECT
  303. trim(customerno) AS scustid,--投保人
  304. trim(name) AS name,
  305. trim(sex) AS gender,
  306. trim(birthday) AS birthday,
  307. trim(idtype) AS idtype ,
  308. trim(idno) AS idcard
  309. FROM
  310. policy_information
  311. WHERE customerno IS NOT NULL AND idtype not in (0,1,3)
  312. UNION
  313. SELECT
  314. trim(insuredno) AS scustid,--被保人
  315. trim(insuredname) AS name,
  316. trim(insuredsex) AS gender,
  317. trim(insuredbirthday) AS birthday,
  318. trim(insuredidtype) AS idtype ,
  319. trim(insuredidno) AS idcard
  320. FROM
  321. policy_information
  322. WHERE insuredno IS NOT NULL AND insuredidtype not in (0,1,3)
  323. ) tmpTable GROUP BY scustid
  324. --已经存在的数据行数
  325. select count(0) into individual_count from shanglifeecif.individual;
  326. EXCEPTION
  327. WHEN HIVE_EXCEPTION THEN
  328. INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
  329. WHEN Others THEN
  330. INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
  331. END;
  332. /
  333. CREATE OR REPLACE PROCEDURE shanglifeecif.up_t_customers_class_1() -- 创建存储过程
  334. IS
  335. BEGIN
  336. UPDATE shanglifeecif.individual a SET (
  337. CustClass ,-- 客户等级
  338. ConValue ,-- 贡献度分
  339. Awarded3 ,-- 家庭加分2
  340. Awarded2 ,-- 续期加分
  341. Awarded1 ,-- 保单加分
  342. SOValue ,-- 总分值
  343. EndDate, -- 客户等级失效日期
  344. Height, --身高
  345. Weight, --体重
  346. BMI,
  347. PIncome, --个人年收入
  348. FIncome, --家庭年收入
  349. IncomeSource, --收入来源
  350. SIStatus, --社保情况
  351. --Ethnic, --民族情况
  352. Nation, --国籍
  353. MaritalStat, --婚姻
  354. Employer,--工作单位
  355. Education,--学历
  356. Dday, --死亡日期
  357. regtype, --户籍类型
  358. ZIPCODE,--邮编
  359. HPhone,--电话
  360. PMPhone,--手机
  361. email, -- 邮箱
  362. RAL, --联系地址
  363. sobirth --省份
  364. ) = (
  365. select
  366. b.CLASS_VALUE,--客户等级
  367. b.CONTRIBUTION_VALUE,--贡献度分
  368. b.AWARDED3, --家庭加分
  369. b.AWARDED2, --续期加分
  370. b.AWARDED1, --保单加分
  371. b.TOTAL_VALUE, --总分值
  372. trim(b.END_DATE) as END_DATE, --失效日期
  373. b.STATURE, --身高
  374. b.AVOIRDUPOIS,--体重
  375. b.BMI, --根据身高体重计算
  376. b.YEARINCOME, --个人年收入
  377. b.FAMILYYEARSALARY, --家庭年收入
  378. trim(b.INCOMESOURCE) as INCOMESOURCE, --收入来源
  379. trim(b.SOCIALINSUFLAG) as SOCIALINSUFLAG, --社保情况
  380. --trim(b.NATIONALITY) as NATIONALITY, --民族情况
  381. trim(b.NATIVEPLACE) as NATIVEPLACE, --国籍
  382. trim(b.MARRIAGE) as MARRIAGE,--婚姻
  383. trim(b.GRPNAME) as GRPNAME,--工作单位名称
  384. trim(b.DEGREE) as DEGREE,--学历
  385. trim(b.DEATHDATE) as DEATHDATE,--死亡日期
  386. trim(b.DENTYPE) as DENTYPE,--户籍类型
  387. trim(b.ZIPCODE) as ZIPCODE,--邮编
  388. trim(b.PHONE) as PHONE,--电话
  389. trim(b.MOBILE) as MOBILE,--手机
  390. trim(b.EMAIL) as EMAIL,--邮箱
  391. regexp_replace(trim(b.POSTALADDRESS),'[0-9]','*') as POSTALADDRESS, --联系地址
  392. regexp_extract(b.POSTALADDRESS,'(.*?)省|(.*?)市',0) -- 省份
  393. from t_customer_class b
  394. where b.CUSTOMER_ID = a.scustid
  395. ) WHERE 1=1 ;
  396. EXCEPTION
  397. WHEN HIVE_EXCEPTION THEN
  398. INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
  399. WHEN Others THEN
  400. INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
  401. END;
  402. /
  403. CREATE OR REPLACE PROCEDURE shanglifeecif.up_other_customerinfo() -- 创建存储过程
  404. IS
  405. BEGIN
  406. --更新客户类型投保人
  407. UPDATE shanglifeecif.individual i SET i.custtype = '投保人' WHERE
  408. i.scustid IN (SELECT p.customerno FROM policy_information p);
  409. --更新客户类型投保人、被保人
  410. UPDATE shanglifeecif.individual i SET i.custtype = '被保人' WHERE
  411. i.scustid IN (SELECT pi.insuredno FROM policy_information pi);
  412. --更新客户类型投保人、被保人
  413. UPDATE shanglifeecif.individual i SET i.custtype = '投保人、被保人' WHERE
  414. i.scustid IN (SELECT p.customerno FROM policy_information p)
  415. AND i.scustid IN (SELECT pi.insuredno FROM policy_information pi);
  416. --更新业绩归属
  417. UPDATE shanglifeecif.Individual si1 SET si1.policybelong = (
  418. SELECT trim(t.SALECOM) FROM (
  419. SELECT row_number()OVER(PARTITION BY p.customerno ORDER BY p.polapplydate asc) rd,p.customerno,p.SALECOM FROM policy_information p
  420. ) t WHERE t.rd = 1 AND si1.scustid = t.customerno
  421. );
  422. UPDATE shanglifeecif.Individual si1 SET si1.policybelong = (
  423. SELECT trim(t.SALECOM) FROM (
  424. SELECT row_number()OVER(PARTITION BY p.insuredno ORDER BY p.polapplydate asc) rd,p.insuredno,p.SALECOM FROM policy_information p
  425. ) t WHERE t.rd = 1 AND si1.scustid = t.insuredno
  426. );
  427. --更新职业,民族等信息
  428. UPDATE shanglifeecif.Individual si1 SET (si1.Occupation,si1.Ethnic) = (
  429. SELECT trim(t.occupationname),trim(t.NATIONALITYNAME) FROM (
  430. SELECT row_number()OVER(PARTITION BY p.customerno ORDER BY p.polapplydate desc) rd,p.customerno,p.occupationname,p.NATIONALITYNAME FROM policy_information p
  431. ) t WHERE t.rd = 1 AND si1.scustid = t.customerno
  432. );
  433. --更新官微积分
  434. UPDATE shanglifeecif.individual si SET si.officialCalculus = (
  435. SELECT temp.available_points FROM (SELECT t.available_points,t.certificate_no,row_number()OVER(PARTITION BY t.certificate_no ORDER BY t.gmt_created DESC) rd FROM t_account t) temp WHERE temp.rd = 1 AND temp.certificate_no = si.idcard
  436. );
  437. EXCEPTION
  438. WHEN HIVE_EXCEPTION THEN
  439. INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
  440. WHEN Others THEN
  441. INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
  442. END;
  443. /
  444. /*
  445. CREATE OR REPLACE PROCEDURE shanglifeecif.up_health_insurance_listing_1() -- 创建存储过程
  446. IS
  447. BEGIN
  448. --更新个人信息表
  449. UPDATE shanglifeecif.individual a SET (
  450. OccupationId ,-- 职业代码
  451. Occupation, -- 职业名称
  452. HomeAdress
  453. ) = (
  454. SELECT
  455. t.appntoccupationcode,
  456. t.appntoccupationname,
  457. t.APPNTHOMEADDRESS
  458. FROM (
  459. select
  460. appntno,
  461. max(appntoccupationcode) appntoccupationcode,--职业代码
  462. max(appntoccupationname) appntoccupationname,--职业名称
  463. max(APPNTHOMEADDRESS) APPNTHOMEADDRESS --住址
  464. from HEALTH_INSURANCE_LISTING
  465. WHERE appntoccupationcode is not null
  466. and appntoccupationname is not NULL
  467. group by appntno
  468. ) t WHERE t.appntno = a.scustid
  469. );
  470. END;
  471. */
  472. BEGIN
  473. shanglifeecif.init_individual_main();
  474. end ;