Pārlūkot izejas kodu

完善上海人寿测试环境sql

kouchengxing 3 gadi atpakaļ
vecāks
revīzija
6d4e0bed75

+ 1 - 1
sql-achievement/存储过程/人寿测试环境使用sql整理/保单件数分布统计.sql

@@ -36,7 +36,7 @@ BEGIN
 				WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) >= 21  AND (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) <= 50 THEN '21-50件保单'  
 				WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) > 50 THEN '50件保单以上' 
 		END 
-			) where 1 = 1;	
+			) where si1.custtype like '%投保人%';
 	DELETE FROM shanglifeecif.bdnum_distribution;
 	insert into shanglifeecif.bdnum_distribution (
 		id,

+ 99 - 2
sql-achievement/存储过程/人寿测试环境使用sql整理/客户信息.sql

@@ -11,7 +11,9 @@ BEGIN
 	--更新用户等级信息
 	shanglifeecif.up_t_customers_class_1();
 	--更新其它信息
-	shanglifeecif.up_other_customerinfo()
+	shanglifeecif.up_other_customerinfo();
+	--更新被保人其它信息
+	shanglifeecif.update_insuredinfo(); 
 
 END;
 /
@@ -426,7 +428,7 @@ BEGIN
 	--更新客户类型投保人
 	UPDATE shanglifeecif.individual i SET i.custtype = '投保人' WHERE 
 	i.scustid IN (SELECT p.customerno FROM policy_information p);
-	--更新客户类型投保人、被保人
+	--更新客户类型被保人
 	UPDATE shanglifeecif.individual i SET i.custtype = '被保人' WHERE 
 	i.scustid IN (SELECT pi.insuredno FROM policy_information pi);
 	--更新客户类型投保人、被保人
@@ -466,6 +468,101 @@ BEGIN
 				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());	
 END;
 /
+CREATE OR REPLACE PROCEDURE shanglifeecif.update_insuredinfo() 
+IS    
+BEGIN
+		--更新被保人信息
+		UPDATE shanglifeecif.individual a SET (
+			ZIPCODE,--邮编
+			HPhone,--电话
+			PMPhone,--手机
+			email, -- 邮箱  
+			RAL,    --联系地址
+			sobirth --省份
+		) = (
+			SELECT 
+				t.zipcode,
+				t.phone,
+				t.mobile,
+				t.email,
+				regexp_replace(trim(t.address),'[0-9]','*') address,
+				regexp_extract(t.address,'(.*?)省|(.*?)市',0) province
+			FROM (
+				SELECT
+				row_number()OVER(PARTITION BY ls.customerno ORDER BY ls.modifydate desc) rn,
+				ls.customerno,--客户号
+				CASE 
+					WHEN ls.postaladdress IS NULL 
+						THEN 
+							CASE WHEN ls.homeaddress IS NULL THEN ls.companyaddress ELSE ls.homeaddress END
+						ELSE ls.postaladdress
+					END AS address,	
+				ls.phone,
+				ls.zipcode,--邮编
+				CASE WHEN ls.email IS NULL THEN ls.email2 ELSE ls.email END AS email,
+				CASE WHEN ls.mobile IS NULL THEN ls.mobile2 ELSE ls.mobile END AS mobile
+				FROM dsj.lcaddress ls
+			) t where t.rn = 1 AND t.customerno = a.scustid
+		) WHERE a.custtype = '被保人';
+
+	UPDATE shanglifeecif.individual a SET (
+			Height,		--身高
+			Weight,		--体重
+			BMI,
+			PIncome,	--个人年收入
+			Ethnic,  --民族情况
+			Nation, --国籍
+			MaritalStat, --婚姻
+			Education,--学历
+			SIStatus,--社保
+			IncomeSource,--收入来源
+			regtype  --户籍类型
+		) = (
+			SELECT 
+				t.stature,--身高
+				t.avoirdupois,--体重
+				t.bmi,
+				t.yearincome,
+				t.nationality,--民族
+				t.nativeplace,--国籍
+				t.marriage, --婚姻状况
+				t.degree,   --学历
+				t.socialinsuflag,--社保
+				t.incomesource,--收入来源
+				t.dentype
+			FROM (
+				SELECT
+				row_number()OVER(PARTITION BY ld.insuredno ORDER BY ld.modifydate desc) rn,
+				ld.insuredno,--被保人客户号
+				ld.appntno,--投保人客户号
+				ld.name,--被保人名称
+				ld.sex,--被保人性别
+				ld.birthday,--被保人出生日期
+				ld.idtype,--证件类型
+				ld.idno,--证件号码
+				ld.marriage,--婚姻状况
+				ld.occupationtype,--职业
+				ld.nativeplace,--国籍
+				ld.nationality,--民族
+				ld.stature,--身高
+				ld.avoirdupois,--体重
+				round((ld.avoirdupois/POWER((ld.stature/100),2)),2) bmi,
+				ld.degree,--学历
+				ld.worktype,--职业 
+				ld.dentype,--居民类型 
+				ld.socialinsuflag,--社保情况
+				ld.incomesource,--收入来源
+				ld.yearincome --年收入 
+			FROM dsj.lcinsured2 ld
+			) t WHERE t.rn = 1 AND t.insuredno = a.scustid
+		) WHERE a.custtype = '被保人';
+		EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_id,log_code,log_msg,log_time) VALUES (to_char(sysdate(),'yyyyMMddHHmmss'),sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_id,log_code,log_msg,log_time) VALUES (to_char(sysdate(),'yyyyMMddHHmmss'),sqlcode(),sqlerrm(),sysdate());	
+
+END;
 /*
 CREATE OR REPLACE PROCEDURE shanglifeecif.up_health_insurance_listing_1() -- 创建存储过程
 IS    

+ 44 - 10
sql-achievement/存储过程/人寿测试环境使用sql整理/客户标签20210409预生产.sql

@@ -521,8 +521,8 @@ BEGIN
 	
 	--69	一单寿险客户	Label65	一单寿险客户	客户仅购买了一张保单,且保单类型为寿险型保单
 	UPDATE shanglifeecif.Individual si1 SET si1.label65 = '一单寿险客户' WHERE si1.scustid IN (SELECT temp.customerno FROM (
-		SELECT pi.customerno,count(*) AS tnum,max(t.pnum) AS pnum FROM (
-			SELECT count(*) AS pnum,p.customerno FROM dsj.POLICY_INFORMATION p 
+		SELECT pi.customerno,count(DISTINCT pi.contno) AS tnum,max(t.pnum) AS pnum FROM (
+			SELECT count(DISTINCT p.contno) AS pnum,p.customerno FROM dsj.POLICY_INFORMATION p 
 		LEFT JOIN dsj.riskkind b on p.riskcode = b.riskcode
 		WHERE (b.kindtype = '新型寿险' or b.kindtype = '人寿保险') GROUP BY p.customerno
 		) t LEFT JOIN dsj.POLICY_INFORMATION pi ON pi.customerno = t.customerno
@@ -650,13 +650,46 @@ BEGIN
 	GROUP BY pi.customerno
 	) temp WHERE temp.tnum = temp.pnum);
 	
+	--失效原因
+	UPDATE shanglifeecif.Individual si1 SET si1.label92 = (
+	SELECT t.terminatestate FROM (
+		SELECT row_number()over(partition by p.customerno order by p.polapplydate desc) rn,p.customerno,p.terminatestate FROM dsj.policy_information p 
+		WHERE p.appflag = '失效'
+	) t WHERE t.rn = 1 AND si1.scustid = t.customerno
+);
 	--	终止客户	label93	客户的所有保单缴费期满且承保期限已满正常终止的客户	终止客户	
-	UPDATE shanglifeecif.Individual si1 SET si1.Label93 = '终止客户' WHERE si1.scustid IN (SELECT temp.customerno FROM (
-	SELECT count(*) AS tnum,max(t.customerno) AS customerno,max(t.pnum) AS pnum FROM (
-	SELECT p.customerno,count(*) AS pnum FROM  dsj.policy_information p WHERE p.appflag = '终止' AND p.enddate < to_char(SYSDATE,'yyyy-MM-dd HH:mm:ss.S') GROUP BY p.customerno 
-	) t LEFT JOIN dsj.policy_information pi ON pi.customerno = t.customerno
-	GROUP BY pi.customerno
-	) temp WHERE temp.tnum = temp.pnum);
+	--UPDATE shanglifeecif.Individual si1 SET si1.Label93 = '终止客户' WHERE si1.scustid IN (SELECT temp.customerno FROM (
+	--SELECT count(*) AS tnum,max(t.customerno) AS customerno,max(t.pnum) AS pnum FROM (
+	--SELECT p.customerno,count(*) AS pnum FROM  dsj.policy_information p WHERE p.appflag = '终止' AND p.enddate < to_char(SYSDATE,'yyyy-MM-dd HH:mm:ss.S') GROUP BY p.customerno 
+	--) t LEFT JOIN dsj.policy_information pi ON pi.customerno = t.customerno
+	--GROUP BY pi.customerno
+	--) temp WHERE temp.tnum = temp.pnum);
+	--终止原因
+	UPDATE shanglifeecif.Individual si1 SET si1.Label94 = (
+	SELECT t.terminatestate FROM (
+		SELECT row_number()over(partition by p.customerno order by p.polapplydate desc) rn,p.customerno,p.terminatestate FROM dsj.policy_information p 
+		WHERE p.appflag = '终止'
+	) t WHERE t.rn = 1 AND si1.scustid = t.customerno
+);
+	--81	上年续期交费情况	label95	相对于上一年的交费日期和实收日期,提前X天交费、滞后X天交费、宽限期外交费、失效客户	提前X天交费、滞后X天交费、宽限期外交费	
+	UPDATE shanglifeecif.Individual si1 SET si1.Label95 = (
+	SELECT 
+	CASE 
+		
+		WHEN temp.dnum<0 THEN '提前'||abs(temp.dnum)||'天交费'
+		WHEN temp.dnum>0 THEN '滞后'||temp.dnum||'天交费'
+		WHEN temp.toconfdate > temp.kxdate THEN '宽限期外交费'
+	END	
+		FROM (
+			SELECT row_number()over(PARTITION BY t.appntno ORDER BY t.confdate DESC) rn,t.appntno,t.paydate as topaydate,t.confdate as toconfdate,DATE_ADD(t.paydate,60) as kxdate,tt.paydate as lastpaydate,tt.confdate AS lastconfdate,DATEDIFF(to_char(t.confdate,'0000-MM-dd'),to_char(tt.confdate,'0000-MM-dd')) AS dnum FROM (
+			SELECT row_number()OVER(PARTITION BY ln.contno ORDER BY ln.paydate DESC) rd,ln.* FROM dsj.ljapayperson ln 
+			WHERE ln.confdate IS NOT NULL AND ln.paydate IS NOT null
+		) t LEFT JOIN (
+			SELECT row_number()OVER(PARTITION BY ln2.contno ORDER BY ln2.paydate DESC) rd,ln2.* FROM dsj.ljapayperson ln2
+			WHERE ln2.confdate IS NOT NULL AND ln2.paydate IS NOT null AND ln2.paycount > 1
+		) tt ON t.contno = tt.contno AND t.rd = tt.rd - 1 WHERE t.rd = 1 AND tt.rd = 2 
+		) temp WHERE temp.dnum <> 0 AND temp.rn = 1 AND si1.scustid = temp.appntno
+) WHERE 1 = 1;
 	
 	--98	大龄	Label96	大龄 来电客户年龄50岁以上
 	UPDATE shanglifeecif.Individual si1 SET si1.Label96 = '大龄'  where si1.scustid IN (
@@ -830,14 +863,15 @@ BEGIN
 	--117	红利垫缴还款	Label115	红利垫缴还款	判断逻辑不详	存在红利,且红利已经垫交保单还款
 		UPDATE shanglifeecif.Individual si1 SET si1.label115 = '红利垫缴还款' WHERE si1.scustid IN (
 		SELECT p.customerno FROM dsj.policy_information p WHERE p.appflag = '有效' and p.contno IN (
-			SELECT contno FROM dsj.loloandetail WHERE moneytype='HLDKDK'
+			SELECT a.contno FROM dsj.LOLOANDETAIL a,dsj.LDCode1 b WHERE 
+			b.codetype='lnmoneytype' AND b.code=a.finfeetype and b.code1=a.moneytype
 		) 
 	);
 	--	宽限期	label117	宽限日末日-当前日期<3天	宽限期	
 	UPDATE shanglifeecif.Individual si1 SET si1.label117 = '宽限期' WHERE si1.scustid IN (
 
 	SELECT p.customerno FROM dsj.policy_information p WHERE p.payintv= '期缴' AND p.appflag='有效' AND p.payendyear!=p.paycount and 
-	DATEDIFF(DATE_ADD(p.paytodate, 60),to_char(SYSDATE,'yyyy-MM-dd HH:mm:ss.S')) < 3
+	DATEDIFF(DATE_ADD(p.paytodate, 60),to_char(SYSDATE,'yyyy-MM-dd HH:mm:ss.S')) > 0 AND DATEDIFF(DATE_ADD(p.paytodate, 60),to_char(SYSDATE,'yyyy-MM-dd HH:mm:ss.S')) < 3
 );
 	
 	--122	重点银行	Label120	重点银行	判断逻辑不详	保单的销售渠道网点为招商银行