Browse Source

存储过程整理提交

kouchengxing 4 years ago
parent
commit
d69aaaa4ea
20 changed files with 3104 additions and 521 deletions
  1. 212 0
      dgtis-modules/dgtis-modules-data/src/main/java/com/dgtis/data/domain/SysDept.java
  2. 326 0
      dgtis-modules/dgtis-modules-data/src/main/java/com/dgtis/data/domain/SysUser.java
  3. 183 0
      dgtis-modules/dgtis-modules-data/src/main/resources/mapper.data/SysUserMapper.xml
  4. 217 96
      sql-achievement/存储过程/人寿测试环境使用sql整理/个体关系信息.sql
  5. 7 2
      sql-achievement/存储过程/人寿测试环境使用sql整理/保单件数分布统计.sql
  6. 86 71
      sql-achievement/存储过程/人寿测试环境使用sql整理/保单信息.sql
  7. 181 0
      sql-achievement/存储过程/人寿测试环境使用sql整理/参与方事件.sql
  8. 325 207
      sql-achievement/存储过程/人寿测试环境使用sql整理/客户信息.sql
  9. 649 0
      sql-achievement/存储过程/人寿测试环境使用sql整理/客户标签20210224.sql
  10. 130 59
      sql-achievement/存储过程/人寿测试环境使用sql整理/客户标签koucx20210126.sql
  11. 49 0
      sql-achievement/存储过程/人寿测试环境使用sql整理/客户标签label1-20.sql
  12. 134 0
      sql-achievement/存储过程/人寿测试环境使用sql整理/客户标签label101-120.sql
  13. 182 0
      sql-achievement/存储过程/人寿测试环境使用sql整理/客户标签label21-40.sql
  14. 157 0
      sql-achievement/存储过程/人寿测试环境使用sql整理/客户标签label41-60.sql
  15. 77 0
      sql-achievement/存储过程/人寿测试环境使用sql整理/客户标签label61-80.sql
  16. 27 0
      sql-achievement/存储过程/人寿测试环境使用sql整理/客户标签label81-100.sql
  17. 8 3
      sql-achievement/存储过程/人寿测试环境使用sql整理/年龄段性别分布统计.sql
  18. 28 65
      sql-achievement/存储过程/人寿测试环境使用sql整理/理赔信息.sql
  19. 95 0
      sql-achievement/存储过程/人寿测试环境使用sql整理/相似客户.sql
  20. 31 18
      sql-achievement/存储过程/人寿测试环境使用sql整理/险种大类统计.sql

+ 212 - 0
dgtis-modules/dgtis-modules-data/src/main/java/com/dgtis/data/domain/SysDept.java

@@ -0,0 +1,212 @@
+package com.dgtis.system.api.domain;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.validation.constraints.Email;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.dgtis.common.core.web.domain.BaseEntity;
+
+/**
+ * 部门表 sys_dept
+ * 
+ * @author dgtis
+ */
+public class SysDept extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 部门ID */
+    private Long deptId;
+
+    /** 父部门ID */
+    private Long parentId;
+
+    /** 祖级列表 */
+    private String ancestors;
+
+    /** 部门名称 */
+    private String deptName;
+    /** 部门名称 */
+    private String deptCode;
+
+    /** 显示顺序 */
+    private String orderNum;
+
+    /** 负责人 */
+    private String leader;
+
+    /** 联系电话 */
+    private String phone;
+
+    /** 邮箱 */
+    private String email;
+
+    /** 部门状态:0正常,1停用 */
+    private String status;
+
+    /** 删除标志(0代表存在 2代表删除) */
+    private String delFlag;
+
+    /** 父部门名称 */
+    private String parentName;
+    
+    /** 子部门 */
+    private List<SysDept> children = new ArrayList<SysDept>();
+
+    public Long getDeptId()
+    {
+        return deptId;
+    }
+
+    public void setDeptId(Long deptId)
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getParentId()
+    {
+        return parentId;
+    }
+
+    public void setParentId(Long parentId)
+    {
+        this.parentId = parentId;
+    }
+
+    public String getAncestors()
+    {
+        return ancestors;
+    }
+
+    public void setAncestors(String ancestors)
+    {
+        this.ancestors = ancestors;
+    }
+
+    @NotBlank(message = "部门名称不能为空")
+    @Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符")
+    public String getDeptName()
+    {
+        return deptName;
+    }
+
+    public void setDeptName(String deptName)
+    {
+        this.deptName = deptName;
+    }
+
+    @NotBlank(message = "显示顺序不能为空")
+    public String getOrderNum()
+    {
+        return orderNum;
+    }
+
+    public void setOrderNum(String orderNum)
+    {
+        this.orderNum = orderNum;
+    }
+
+    public String getLeader()
+    {
+        return leader;
+    }
+
+    public void setLeader(String leader)
+    {
+        this.leader = leader;
+    }
+
+    @Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符")
+    public String getPhone()
+    {
+        return phone;
+    }
+
+    public void setPhone(String phone)
+    {
+        this.phone = phone;
+    }
+
+    @Email(message = "邮箱格式不正确")
+    @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
+    public String getEmail()
+    {
+        return email;
+    }
+
+    public void setEmail(String email)
+    {
+        this.email = email;
+    }
+
+    public String getStatus()
+    {
+        return status;
+    }
+
+    public void setStatus(String status)
+    {
+        this.status = status;
+    }
+
+    public String getDelFlag()
+    {
+        return delFlag;
+    }
+
+    public void setDelFlag(String delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getParentName()
+    {
+        return parentName;
+    }
+
+    public void setParentName(String parentName)
+    {
+        this.parentName = parentName;
+    }
+
+    public List<SysDept> getChildren()
+    {
+        return children;
+    }
+
+    public void setChildren(List<SysDept> children)
+    {
+        this.children = children;
+    }
+
+    public String getDeptCode() {
+        return deptCode;
+    }
+
+    public void setDeptCode(String deptCode) {
+        this.deptCode = deptCode;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("deptId", getDeptId())
+            .append("parentId", getParentId())
+            .append("ancestors", getAncestors())
+            .append("deptName", getDeptName())
+            .append("orderNum", getOrderNum())
+            .append("leader", getLeader())
+            .append("phone", getPhone())
+            .append("email", getEmail())
+            .append("status", getStatus())
+            .append("delFlag", getDelFlag())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

+ 326 - 0
dgtis-modules/dgtis-modules-data/src/main/java/com/dgtis/data/domain/SysUser.java

@@ -0,0 +1,326 @@
+package com.dgtis.system.api.domain;
+
+import java.util.Date;
+import java.util.List;
+import javax.validation.constraints.Email;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.dgtis.common.core.annotation.Excel;
+import com.dgtis.common.core.annotation.Excel.ColumnType;
+import com.dgtis.common.core.annotation.Excel.Type;
+import com.dgtis.common.core.annotation.Excels;
+import com.dgtis.common.core.web.domain.BaseEntity;
+
+/**
+ * 用户对象 sys_user
+ * 
+ * @author dgtis
+ */
+public class SysUser extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 用户ID */
+    @Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号")
+    private Long userId;
+
+    /** 部门ID */
+    @Excel(name = "部门编号", type = Type.IMPORT)
+    private Long deptId;
+
+    /** 用户账号 */
+    @Excel(name = "登录名称")
+    private String userName;
+
+    /** 用户昵称 */
+    @Excel(name = "用户名称")
+    private String nickName;
+
+    /** 用户邮箱 */
+    @Excel(name = "用户邮箱")
+    private String email;
+
+    /** 手机号码 */
+    @Excel(name = "手机号码")
+    private String phonenumber;
+
+    /** 用户性别 */
+    @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")
+    private String sex;
+
+    /** 用户头像 */
+    private String avatar;
+
+    /** 密码 */
+    private String password;
+
+    /** 盐加密 */
+    private String salt;
+
+    /** 帐号状态(0正常 1停用) */
+    @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")
+    private String status;
+
+    /** 删除标志(0代表存在 2代表删除) */
+    private String delFlag;
+
+    /** 最后登录IP */
+    @Excel(name = "最后登录IP", type = Type.EXPORT)
+    private String loginIp;
+
+    /** 最后登录时间 */
+    @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
+    private Date loginDate;
+
+    /** 部门对象 */
+    @Excels({
+        @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT),
+        @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT)
+    })
+    private SysDept dept;
+
+    /** 角色对象 */
+    private List<SysRole> roles;
+
+    /** 角色组 */
+    private Long[] roleIds;
+
+    /** 岗位组 */
+    private Long[] postIds;
+
+    public SysUser()
+    {
+
+    }
+
+    public SysUser(Long userId)
+    {
+        this.userId = userId;
+    }
+
+    public Long getUserId()
+    {
+        return userId;
+    }
+
+    public void setUserId(Long userId)
+    {
+        this.userId = userId;
+    }
+
+    public boolean isAdmin()
+    {
+        return isAdmin(this.userId);
+    }
+
+    public static boolean isAdmin(Long userId)
+    {
+        return userId != null && 1L == userId;
+    }
+
+    public Long getDeptId()
+    {
+        return deptId;
+    }
+
+    public void setDeptId(Long deptId)
+    {
+        this.deptId = deptId;
+    }
+
+    @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
+    public String getNickName()
+    {
+        return nickName;
+    }
+
+    public void setNickName(String nickName)
+    {
+        this.nickName = nickName;
+    }
+
+    @NotBlank(message = "用户账号不能为空")
+    @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
+    public String getUserName()
+    {
+        return userName;
+    }
+
+    public void setUserName(String userName)
+    {
+        this.userName = userName;
+    }
+
+    @Email(message = "邮箱格式不正确")
+    @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
+    public String getEmail()
+    {
+        return email;
+    }
+
+    public void setEmail(String email)
+    {
+        this.email = email;
+    }
+
+    @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符")
+    public String getPhonenumber()
+    {
+        return phonenumber;
+    }
+
+    public void setPhonenumber(String phonenumber)
+    {
+        this.phonenumber = phonenumber;
+    }
+
+    public String getSex()
+    {
+        return sex;
+    }
+
+    public void setSex(String sex)
+    {
+        this.sex = sex;
+    }
+
+    public String getAvatar()
+    {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar)
+    {
+        this.avatar = avatar;
+    }
+
+    @JsonProperty
+    public String getPassword()
+    {
+        return password;
+    }
+
+    public void setPassword(String password)
+    {
+        this.password = password;
+    }
+
+    public String getSalt()
+    {
+        return salt;
+    }
+
+    public void setSalt(String salt)
+    {
+        this.salt = salt;
+    }
+
+    public String getStatus()
+    {
+        return status;
+    }
+
+    public void setStatus(String status)
+    {
+        this.status = status;
+    }
+
+    public String getDelFlag()
+    {
+        return delFlag;
+    }
+
+    public void setDelFlag(String delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getLoginIp()
+    {
+        return loginIp;
+    }
+
+    public void setLoginIp(String loginIp)
+    {
+        this.loginIp = loginIp;
+    }
+
+    public Date getLoginDate()
+    {
+        return loginDate;
+    }
+
+    public void setLoginDate(Date loginDate)
+    {
+        this.loginDate = loginDate;
+    }
+
+    public SysDept getDept()
+    {
+        return dept;
+    }
+
+    public void setDept(SysDept dept)
+    {
+        this.dept = dept;
+    }
+
+    public List<SysRole> getRoles()
+    {
+        return roles;
+    }
+
+    public void setRoles(List<SysRole> roles)
+    {
+        this.roles = roles;
+    }
+
+    public Long[] getRoleIds()
+    {
+        return roleIds;
+    }
+
+    public void setRoleIds(Long[] roleIds)
+    {
+        this.roleIds = roleIds;
+    }
+
+    public Long[] getPostIds()
+    {
+        return postIds;
+    }
+
+    public void setPostIds(Long[] postIds)
+    {
+        this.postIds = postIds;
+    }
+    
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("userId", getUserId())
+            .append("deptId", getDeptId())
+            .append("userName", getUserName())
+            .append("nickName", getNickName())
+            .append("email", getEmail())
+            .append("phonenumber", getPhonenumber())
+            .append("sex", getSex())
+            .append("avatar", getAvatar())
+            .append("password", getPassword())
+            .append("salt", getSalt())
+            .append("status", getStatus())
+            .append("delFlag", getDelFlag())
+            .append("loginIp", getLoginIp())
+            .append("loginDate", getLoginDate())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .append("dept", getDept())
+            .toString();
+    }
+}

+ 183 - 0
dgtis-modules/dgtis-modules-data/src/main/resources/mapper.data/SysUserMapper.xml

@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.dgtis.system.mapper.SysUserMapper">
+
+	<resultMap type="SysUser" id="SysUserResult">
+		<id     property="userId"       column="user_id"      />
+		<result property="deptId"       column="dept_id"      />
+		<result property="userName"     column="user_name"    />
+		<result property="nickName"     column="nick_name"    />
+		<result property="email"        column="email"        />
+		<result property="phonenumber"  column="phonenumber"  />
+		<result property="sex"          column="sex"          />
+		<result property="avatar"       column="avatar"       />
+		<result property="password"     column="password"     />
+		<result property="status"       column="status"       />
+		<result property="delFlag"      column="del_flag"     />
+		<result property="loginIp"      column="login_ip"     />
+		<result property="loginDate"    column="login_date"   />
+		<result property="createBy"     column="create_by"    />
+		<result property="createTime"   column="create_time"  />
+		<result property="updateBy"     column="update_by"    />
+		<result property="updateTime"   column="update_time"  />
+		<result property="remark"       column="remark"       />
+		<association property="dept"    column="dept_id" javaType="SysDept" resultMap="deptResult" />
+		<collection  property="roles"   javaType="java.util.List"        resultMap="RoleResult" />
+	</resultMap>
+	
+	<resultMap id="deptResult" type="SysDept">
+		<id     property="deptId"   column="dept_id"     />
+		<result property="parentId" column="parent_id"   />
+		<result property="deptName" column="dept_name"   />
+		<result property="deptCode" column="dept_code"   />
+		<result property="orderNum" column="order_num"   />
+		<result property="leader"   column="leader"      />
+		<result property="status"   column="dept_status" />
+	</resultMap>
+	
+	<resultMap id="RoleResult" type="SysRole">
+		<id     property="roleId"       column="role_id"        />
+		<result property="roleName"     column="role_name"      />
+		<result property="roleKey"      column="role_key"       />
+		<result property="roleSort"     column="role_sort"      />
+		<result property="dataScope"     column="data_scope"    />
+		<result property="status"       column="role_status"    />
+	</resultMap>
+	
+	<sql id="selectUserVo">
+        select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, 
+        d.dept_id,d.dept_code, d.parent_id, d.dept_name, d.order_num, d.leader, d.status as dept_status,
+        r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
+        from sys_user u
+		    left join sys_dept d on u.dept_id = d.dept_id
+		    left join sys_user_role ur on u.user_id = ur.user_id
+		    left join sys_role r on r.role_id = ur.role_id
+    </sql>
+    
+    <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
+		select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u
+		left join sys_dept d on u.dept_id = d.dept_id
+		where u.del_flag = '0'
+		<if test="userName != null and userName != ''">
+			AND u.user_name like concat('%', #{userName}, '%')
+		</if>
+		<if test="status != null and status != ''">
+			AND u.status = #{status}
+		</if>
+		<if test="phonenumber != null and phonenumber != ''">
+			AND u.phonenumber like concat('%', #{phonenumber}, '%')
+		</if>
+		<if test="beginTime != null and beginTime != ''"><!-- 开始时间检索 -->
+			AND date_format(u.create_time,'%y%m%d') &gt;= date_format(#{beginTime},'%y%m%d')
+		</if>
+		<if test="endTime != null and endTime != ''"><!-- 结束时间检索 -->
+			AND date_format(u.create_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
+		</if>
+		<if test="deptId != null and deptId != 0">
+			AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{deptId}, ancestors) ))
+		</if>
+		<!-- 数据范围过滤 -->
+		${params.dataScope}
+	</select>
+	
+	<select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult">
+	    <include refid="selectUserVo"/>
+		where u.user_name = #{userName}
+	</select>
+	
+	<select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
+		<include refid="selectUserVo"/>
+		where u.user_id = #{userId}
+	</select>
+	
+	<select id="checkUserNameUnique" parameterType="String" resultType="int">
+		select count(1) from sys_user where user_name = #{userName} limit 1
+	</select>
+	
+	<select id="checkPhoneUnique" parameterType="String" resultMap="SysUserResult">
+		select user_id, phonenumber from sys_user where phonenumber = #{phonenumber} limit 1
+	</select>
+	
+	<select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult">
+		select user_id, email from sys_user where email = #{email} limit 1
+	</select>
+	
+	<insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
+ 		insert into sys_user(
+ 			<if test="userId != null and userId != 0">user_id,</if>
+ 			<if test="deptId != null and deptId != 0">dept_id,</if>
+ 			<if test="userName != null and userName != ''">user_name,</if>
+ 			<if test="nickName != null and nickName != ''">nick_name,</if>
+ 			<if test="email != null and email != ''">email,</if>
+ 			<if test="avatar != null and avatar != ''">avatar,</if>
+ 			<if test="phonenumber != null and phonenumber != ''">phonenumber,</if>
+ 			<if test="sex != null and sex != ''">sex,</if>
+ 			<if test="password != null and password != ''">password,</if>
+ 			<if test="status != null and status != ''">status,</if>
+ 			<if test="createBy != null and createBy != ''">create_by,</if>
+ 			<if test="remark != null and remark != ''">remark,</if>
+ 			create_time
+ 		)values(
+ 			<if test="userId != null and userId != ''">#{userId},</if>
+ 			<if test="deptId != null and deptId != ''">#{deptId},</if>
+ 			<if test="userName != null and userName != ''">#{userName},</if>
+ 			<if test="nickName != null and nickName != ''">#{nickName},</if>
+ 			<if test="email != null and email != ''">#{email},</if>
+ 			<if test="avatar != null and avatar != ''">#{avatar},</if>
+ 			<if test="phonenumber != null and phonenumber != ''">#{phonenumber},</if>
+ 			<if test="sex != null and sex != ''">#{sex},</if>
+ 			<if test="password != null and password != ''">#{password},</if>
+ 			<if test="status != null and status != ''">#{status},</if>
+ 			<if test="createBy != null and createBy != ''">#{createBy},</if>
+ 			<if test="remark != null and remark != ''">#{remark},</if>
+ 			sysdate()
+ 		)
+	</insert>
+	
+	<update id="updateUser" parameterType="SysUser">
+ 		update sys_user
+ 		<set>
+ 			<if test="deptId != null and deptId != 0">dept_id = #{deptId},</if>
+ 			<if test="userName != null and userName != ''">user_name = #{userName},</if>
+ 			<if test="nickName != null and nickName != ''">nick_name = #{nickName},</if>
+ 			<if test="email != null and email != ''">email = #{email},</if>
+ 			<if test="phonenumber != null and phonenumber != ''">phonenumber = #{phonenumber},</if>
+ 			<if test="sex != null and sex != ''">sex = #{sex},</if>
+ 			<if test="avatar != null and avatar != ''">avatar = #{avatar},</if>
+ 			<if test="password != null and password != ''">password = #{password},</if>
+ 			<if test="status != null and status != ''">status = #{status},</if>
+ 			<if test="loginIp != null and loginIp != ''">login_ip = #{loginIp},</if>
+ 			<if test="loginDate != null">login_date = #{loginDate},</if>
+ 			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+ 			<if test="remark != null">remark = #{remark},</if>
+ 			update_time = sysdate()
+ 		</set>
+ 		where user_id = #{userId}
+	</update>
+	
+	<update id="updateUserStatus" parameterType="SysUser">
+ 		update sys_user set status = #{status} where user_id = #{userId}
+	</update>
+	
+	<update id="updateUserAvatar" parameterType="SysUser">
+ 		update sys_user set avatar = #{avatar} where user_name = #{userName}
+	</update>
+	
+	<update id="resetUserPwd" parameterType="SysUser">
+ 		update sys_user set password = #{password} where user_name = #{userName}
+	</update>
+	
+	<delete id="deleteUserById" parameterType="Long">
+ 		delete from sys_user where user_id = #{userId}
+ 	</delete>
+ 	
+ 	<delete id="deleteUserByIds" parameterType="Long">
+ 		update sys_user set del_flag = '2' where user_id in
+ 		<foreach collection="array" item="userId" open="(" separator="," close=")">
+ 			#{userId}
+        </foreach> 
+ 	</delete>
+	
+</mapper> 

+ 217 - 96
sql-achievement/存储过程/人寿测试环境使用sql整理/个体关系信息.sql

@@ -1,155 +1,276 @@
-CREATE OR REPLACE PROCEDURE shanglifeecif.init_indrelationship_tmp( ) 
+CREATE OR REPLACE PROCEDURE shanglifeecif.init_indrelationship_main( ) 
 IS
 DECLARE
-	strsql string 
+	s_count int
 BEGIN
-	--删除数据
-	DELETE shanglifeecif.indrelationship_tmp;
-	--插入数据
-	INSERT INTO shanglifeecif.indrelationship_tmp(
-		id,
+	DELETE FROM shanglifeecif.IndRelationShip;
+	--从保单信息表(POLICY_INFORMATION)获取投保人和被保人的关系并
+	--第一步取关系父母,子女
+	insert into shanglifeecif.IndRelationShip(
+		irsid,
 		RSType,
-		SCustID1,
+		IndID1,
 		Name1,
-		sex1,
 		IDCard1,
 		Role1,
-		SCustID2,
+		IndID2,
 		Name2,
-		sex2,
 		IDCard2,
 		RSSTime,
 		Role2
-		)
+	)SELECT 
+		row_number()over(),
+		'父母',
+		p.CUSTOMERNO,
+		max(p.NAME),
+		max(p.IDNO),
+		CASE max(p.sex)
+			WHEN '0' THEN '儿子'  WHEN '1' THEN '女儿' END,
+		p.INSUREDNO,
+		max(p.INSUREDNAME),
+		max(p.INSUREDIDNO),
+		min(p.polapplydate),
+		CASE max(p.INSUREDSEX)
+			WHEN '0' THEN '父亲'  WHEN '1' THEN '母亲' END
+		FROM POLICY_INFORMATION p
+		WHERE (p.RELATIONTOAPPNT = '父母' OR p.RELATIONTOAPPNT = '子女')
+		AND p.birthday > p.insuredbirthday
+		GROUP BY p.CUSTOMERNO,p.INSUREDNO;
+	
+	select count(*) into s_count from shanglifeecif.IndRelationShip;
+	
+	insert into shanglifeecif.IndRelationShip(
+		irsid,
+		RSType,
+		IndID1,
+		Name1,
+		IDCard1,
+		Role1,
+		IndID2,
+		Name2,
+		IDCard2,
+		RSSTime,
+		Role2
+	)	
+	SELECT 
+	row_number()over()+s_count,
+	'子女',
+	p.CUSTOMERNO,
+	max(p.NAME),
+	max(p.IDNO),
+	CASE max(p.sex)
+		WHEN '0' THEN '父亲'  WHEN '1' THEN '母亲' END,
+	p.INSUREDNO,
+	max(p.INSUREDNAME),
+	max(p.INSUREDIDNO),
+	min(p.polapplydate),
+	CASE max(p.INSUREDSEX)
+		WHEN '0' THEN '儿子'  WHEN '1' THEN '女儿' END
+	FROM POLICY_INFORMATION p
+	WHERE (p.RELATIONTOAPPNT = '父母' OR p.RELATIONTOAPPNT = '子女')
+	AND p.birthday < p.insuredbirthday
+	GROUP BY p.CUSTOMERNO,p.INSUREDNO;	
+	
+	select count(*) into s_count from shanglifeecif.IndRelationShip;
+	--第二步取关系祖父母、外祖父母    祖孙、外祖孙
+	insert into shanglifeecif.IndRelationShip(
+		irsid,
+		RSType,
+		IndID1,
+		Name1,
+		IDCard1,
+		Role1,
+		IndID2,
+		Name2,
+		IDCard2,
+		RSSTime,
+		Role2
+	)SELECT 
+	row_number()over()+s_count,
+	'祖父母、外祖父母',
+	p.CUSTOMERNO,
+	max(p.NAME),
+	max(p.IDNO),
+	CASE max(p.sex)
+		WHEN '0' THEN '(外)祖孙'  WHEN '1' THEN '(外)孙女' END,
+	p.INSUREDNO,
+	max(p.INSUREDNAME),
+	max(p.INSUREDIDNO),
+	min(p.polapplydate),
+	CASE max(p.INSUREDSEX)
+		WHEN '0' THEN '(外)祖父'  WHEN '1' THEN '(外)祖母' END
+	FROM POLICY_INFORMATION p
+	WHERE (p.RELATIONTOAPPNT = '祖父母、外祖父母' OR p.RELATIONTOAPPNT = '祖孙、外祖孙')
+	AND p.birthday > p.insuredbirthday
+	GROUP BY p.CUSTOMERNO,p.INSUREDNO;	
+	
+	select count(*) into s_count from shanglifeecif.IndRelationShip;
+	
+	insert into shanglifeecif.IndRelationShip(
+		irsid,
+		RSType,
+		IndID1,
+		Name1,
+		IDCard1,
+		Role1,
+		IndID2,
+		Name2,
+		IDCard2,
+		RSSTime,
+		Role2
+	)SELECT 
+		row_number()over()+s_count,
+		'祖孙、外祖孙',
+		p.CUSTOMERNO,
+		max(p.NAME),
+		max(p.IDNO),
+		CASE max(p.sex)
+			WHEN '0' THEN '(外)祖父'  WHEN '1' THEN '(外)祖母' END,
+		p.INSUREDNO,
+		max(p.INSUREDNAME),
+		max(p.INSUREDIDNO),
+		min(p.polapplydate),
+		CASE max(p.INSUREDSEX)
+			WHEN '0' THEN '(外)祖孙'  WHEN '1' THEN '(外)孙女' END
+		FROM POLICY_INFORMATION p
+		WHERE (p.RELATIONTOAPPNT = '祖父母、外祖父母' OR p.RELATIONTOAPPNT = '祖孙、外祖孙')
+		AND p.birthday < p.insuredbirthday
+		GROUP BY p.CUSTOMERNO,p.INSUREDNO;
+	
+	select count(*) into s_count from shanglifeecif.IndRelationShip;	
+	--第三步取配偶和其他
+	insert into shanglifeecif.IndRelationShip(
+		irsid,
+		RSType,
+		IndID1,
+		Name1,
+		IDCard1,
+		Role1,
+		IndID2,
+		Name2,
+		IDCard2,
+		RSSTime,
+		Role2
+	)SELECT 
+	row_number()over()+s_count,
+	max(p.RELATIONTOAPPNT),
+	p.CUSTOMERNO,
+	max(p.NAME),
+	max(p.IDNO),
+	CASE max(p.RELATIONTOAPPNT)
+		WHEN '配偶' 
+			THEN case max(p.sex) WHEN '0' THEN '丈夫'  WHEN '1' THEN '妻子' END
+		ELSE max(p.RELATIONTOAPPNT)
+		END,
+	p.INSUREDNO,
+	max(p.INSUREDNAME),
+	max(p.INSUREDIDNO),
+	min(p.polapplydate),
+	CASE max(p.RELATIONTOAPPNT)
+		WHEN '配偶' 
+			THEN case max(p.INSUREDSEX) WHEN '0' THEN '丈夫'  WHEN '1' THEN '妻子' END
+		ELSE max(p.RELATIONTOAPPNT)
+		END
+	FROM POLICY_INFORMATION p
+	WHERE p.RELATIONTOAPPNT = '配偶' or p.RELATIONTOAPPNT = '其他'
+	GROUP BY p.CUSTOMERNO,p.INSUREDNO;
+	
+	
+	/*insert into shanglifeecif.IndRelationShip(
+		irsid,
+		RSType,
+		IndID1,
+		Name1,
+		IDCard1,
+		Role1,
+		IndID2,
+		Name2,
+		IDCard2,
+		RSSTime,
+		Role2
+	)
 	SELECT 
-		row_number()over() AS IRSID,
-		max(RELATIONTOAPPNT) AS RSType,
-		CUSTOMERNO AS IndID1,
-		max(NAME) AS Name1,
-		max(sex) AS sex1,
-		max(IDNO) AS IDCard1,
-		CASE max(RELATIONTOAPPNT) 
+	row_number()over(),
+	max(p.RELATIONTOAPPNT),
+	p.CUSTOMERNO,
+	max(p.NAME),
+	max(p.IDNO),
+	CASE max(p.RELATIONTOAPPNT) 
 			WHEN '子女' 
-				THEN CASE max(sex) 
+				THEN CASE max(p.sex) 
 					WHEN 1 THEN '母亲' 
 					WHEN 0 THEN '父亲' 
 				END
 		    WHEN '父母' 
-		    	THEN CASE max(sex) 
+		    	THEN CASE max(p.sex) 
 		    		WHEN 1 THEN '女儿' 
 		    		WHEN 0 THEN '儿子' 
 		    	END
 		    WHEN '配偶' 
-		    	THEN CASE max(sex) 
+		    	THEN CASE max(p.sex) 
 		    		WHEN 1 THEN '妻子' 
 		    		WHEN 0 THEN '丈夫' 
 		    	END
 		    WHEN '祖父母、外祖父母' 
-		    	THEN CASE max(sex) 
+		    	THEN CASE max(p.sex) 
 		    		WHEN 1 THEN '(外)孙女' 
 		    		WHEN 0 THEN '(外)祖孙' 
 		    	END
 		    WHEN '祖孙、外祖孙' 
-		    	THEN CASE max(sex) 
+		    	THEN CASE max(p.sex) 
 		    		WHEN 1 THEN '(外)祖母' 
 		    		WHEN 0 THEN '(外)祖父' 
 		    	END
-			ELSE max(RELATIONTOAPPNT) 
+			ELSE max(p.RELATIONTOAPPNT) 
 		END AS Role1,
-		INSUREDNO AS IndID2,
-		max(INSUREDNAME) AS Name2,
-		max(insuredsex) AS sex2,
-		max(INSUREDIDNO) AS IDCard2,
-		min(CUSTOMGETPOLDATE) AS RSSTime,
-		CASE max(RELATIONTOAPPNT) 
+	p.INSUREDNO,
+	max(p.INSUREDNAME),
+	max(p.INSUREDIDNO),
+	min(p.polapplydate),
+   CASE max(p.RELATIONTOAPPNT) 
 			WHEN '子女' 
-				THEN CASE max(INSUREDSEX) 
+				THEN CASE max(p.INSUREDSEX) 
 					WHEN 1 THEN '女儿' 
 					WHEN 0 THEN '儿子' 
 				END
 		    WHEN '父母' 
-		    	THEN CASE max(INSUREDSEX) 
+		    	THEN CASE max(p.INSUREDSEX) 
 		    		WHEN 1 THEN '母亲' 
 		    		WHEN 0 THEN '父亲' 
 		    	END
 		    WHEN '配偶' 
-		    	THEN CASE max(INSUREDSEX) 
+		    	THEN CASE max(p.INSUREDSEX) 
 		    		WHEN 1 THEN '妻子' 
 		    		WHEN 0 THEN '丈夫' 
 		    	END
 		    WHEN '祖父母、外祖父母' 
-		    	THEN CASE max(INSUREDSEX) 
+		    	THEN CASE max(p.INSUREDSEX) 
 		    		WHEN 1 THEN '(外)祖母' 
 		    		WHEN 0 THEN '(外)祖父' 
 		    	END
 		    WHEN '祖孙、外祖孙' 
-		    	THEN CASE max(INSUREDSEX) 
+		    	THEN CASE max(p.INSUREDSEX) 
 		    		WHEN 1 THEN '(外)孙女' 
 		    		WHEN 0 THEN '(外)祖孙' 
 		    	END
-			ELSE max(RELATIONTOAPPNT) 
+			ELSE max(p.RELATIONTOAPPNT) 
 		END AS Role2
-	FROM POLICY_INFORMATION 
-	WHERE RELATIONTOAPPNT<>'本人' AND RELATIONTOAPPNT IS NOT NULL
-	GROUP BY CUSTOMERNO,INSUREDNO;
+		FROM POLICY_INFORMATION p
+		WHERE p.RELATIONTOAPPNT<>'本人'
+		GROUP BY p.CUSTOMERNO,p.INSUREDNO;*/
 	
-
-	--更新临时表的indid1 indid2
-	UPDATE shanglifeecif.indrelationship_tmp a set indid1 = 
-		(SELECT b.indid FROM (select 
-			indid,row_number() over(partition by scustid) rn ,SCustID
-		from shanglifeecif.individual) b where a.SCustID1 = b.SCustID AND b.rn = 1);
-	UPDATE shanglifeecif.indrelationship_tmp a set indid2 = 
-		(SELECT b.indid FROM (select 
-			indid,row_number() over(partition by scustid) rn ,SCustID
-		from shanglifeecif.individual) b where a.SCustID2 = b.SCustID AND b.rn = 1);
-
-END;
-
-/
-CREATE OR REPLACE PROCEDURE shanglifeecif.init_indrelationship( ) 
-IS
-DECLARE
-BEGIN
+	--此时插入IndRelationShip的IndID1,IndID2为上游系统客户号,根据Individual.SCustID更新为Individual.IndID	
 	
-	DELETE FROM shanglifeecif.indrelationship;
-	--插入数据
-	INSERT INTO shanglifeecif.indrelationship(
-		IRSID, --'个体关系ID' 
-		RSType, --'关系类型 其他、配偶、祖父母、外祖父母、祖孙、外祖孙、本人、父母子女' ,
-		IndID1, --'个体1' ,
-		Name1, --个体1名称
+	UPDATE shanglifeecif.IndRelationShip sirs SET sirs.indid1 = 
+	(SELECT si.indid FROM shanglifeecif.individual si WHERE si.scustid = sirs.indid1);
 	
-		IDCard1, --个体1证件号码
-		Role1,--个体1角色 父亲、母亲、儿子、女儿、妻子、丈夫
-		IndID2,--个体2
-		Name2,--个体2名称	sex2,--个体2手机
-		IDCard2,--个体2证件号码
-		Role2,--个体2角色 父亲、母亲、儿子、女儿、妻子、丈夫
-		RSSTime,--开始时间
-		CREATED_BY,--创建人
-		CREATED_TIME--
-		)
-	SELECT 
-		id,
-		RSType,
-		indid1,
-		Name1,
-		IDCard1,
-		Role1,
-		indid2,
-		Name2,
-		IDCard2,
-		Role2,
-		RSSTime,
-		'admin',
-		sysdate
-	FROM shanglifeecif.indrelationship_tmp where indid1 is not null and indid2 is not null
+	UPDATE shanglifeecif.IndRelationShip sirs SET sirs.indid2 = 
+	(SELECT si.indid FROM shanglifeecif.individual si WHERE si.scustid = sirs.indid2);
 
+	EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());	
 	
-END;
-/
-BEGIN
-	shanglifeecif.init_indrelationship_tmp();
-	shanglifeecif.init_indrelationship();
-end 
+END;

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

@@ -10,14 +10,19 @@ replication 1;
 CREATE OR REPLACE PROCEDURE shanglifeecif.bdnum_distribution() IS
 DECLARE
 BEGIN
-	delete from shanglifeecif.bdnum_distribution;
+	DELETE FROM shanglifeecif.bdnum_distribution;
 	insert into shanglifeecif.bdnum_distribution (
 		id,
 		labelName,
 		bdnum
 	) SELECT row_number()over(),t.labelName,t.bdnum FROM (
 		SELECT si.label25 labelName,count(1) bdnum FROM shanglifeecif.individual si GROUP BY si.label25 
-	) t
+	) t;
 	
 	
+	EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());	
 END	;

+ 86 - 71
sql-achievement/存储过程/人寿测试环境使用sql整理/保单信息.sql

@@ -1,3 +1,19 @@
+
+CREATE OR REPLACE PROCEDURE shanglifeecif.init_insurancearrangement_main() -- 创建主存储过程
+IS    
+BEGIN
+
+	DELETE FROM shanglifeecif.insurancearrangement;
+	--根据policy_information 更新保单表
+	shanglifeecif.init_insurancearrangement_policy_information();
+
+	--其他标的字段 更新
+	shanglifeecif.update_risk_categories();
+	
+	
+END;
+/
+
 CREATE OR REPLACE PROCEDURE shanglifeecif.init_insurancearrangement_policy_information() -- 创建主存储过程
 IS    
 BEGIN
@@ -21,44 +37,54 @@ INSERT INTO shanglifeecif.insurancearrangement(
   payendyear ,-- '缴费年期 POLICY_INFORMATION.PAYENDYEAR', 
   policystate,--保单状态
   prem,--保费
+  sumprem, --累计保费,
   Risk,--保额
   NPDate,--下次缴费日期
   PADate,--投保日期
   pisdate,--签单日期
   AgentOrg,--代理机构
   schannel,--销售渠道
+  salecomname,--业绩归属中文
+  POService,--保全标志
   PWComp,--承保分公司
+  security ,--保险期原始值
   agrmntage ,--保险期限
+  salesperson,--业务员标识代码
+  SPName,--业务员名称
   created_by ,-- '创建人', 
   created_time -- '创建时间', 
 
 ) 
 SELECT 
 	row_number()over(),
-	CONTNO,--policyno ,-- '保险单号 INSURANCEINFO.CONTNO', 
-	CVALIDATE,--pindate ,-- '起保日期 POLICY_INFORMATION.CVALIDATE', 
-	ENDDATE,--pmdate ,-- '终保日期 POLICY_INFORMATION.ENDDATE', 
+	trim(CONTNO) as CONTNO,--policyno ,-- '保险单号 INSURANCEINFO.CONTNO', 
+	trim(CVALIDATE) as CVALIDATE,--pindate ,-- '起保日期 POLICY_INFORMATION.CVALIDATE', 
+	trim(ENDDATE) as ENDDATE,--pmdate ,-- '终保日期 POLICY_INFORMATION.ENDDATE', 
 	PAYCOUNT,--norenewal ,-- '续保次数 POLICY_INFORMATION.PAYCOUNT', 
-	PAYINTV,--payment ,-- '缴费方式 POLICY_INFORMATION.PAYINTV', 
-	CUSTOMERNO,--applicantid ,-- '投保人 根据POLICY_INFORMATION.CUSTOMERNO关联individual上游客户号,再找到individualid', 
-	NAME,--appname ,-- '投保人名称 POLICY_INFORMATION.NAME', 
-	IDNO,--appcertid ,-- '投保人证件号码 POLICY_INFORMATION.IDNO', 
-	insuredno,--insuredid ,-- '主被保险人 insuredno', 
-	INSUREDNAME,--insname ,-- '主被保险人名称 POLICY_INFORMATION.INSUREDNAME', 
-	INSUREDIDNO,--inscertid ,-- '主被保险人证件号码 POLICY_INFORMATION.INSUREDIDNO', 
-	RISKCODE,--productid ,-- '险种代码 POLICY_INFORMATION.RISKCODE', 
-	RISKNAME, --productname 险种名称
-	SALECOM,--policybelong ,-- '业绩归属 POLICY_INFORMATION.SALECOM', 
+	trim(PAYINTV) as PAYINTV,--payment ,-- '缴费方式 POLICY_INFORMATION.PAYINTV', 
+	trim(CUSTOMERNO) as CUSTOMERNO,--applicantid ,-- '投保人 根据POLICY_INFORMATION.CUSTOMERNO关联individual上游客户号,再找到individualid', 
+	trim(NAME) as NAME,--appname ,-- '投保人名称 POLICY_INFORMATION.NAME', 
+	trim(IDNO) as IDNO,--appcertid ,-- '投保人证件号码 POLICY_INFORMATION.IDNO', 
+	trim(insuredno) as insuredno,--insuredid ,-- '主被保险人 insuredno', 
+	trim(INSUREDNAME) as INSUREDNAME,--insname ,-- '主被保险人名称 POLICY_INFORMATION.INSUREDNAME', 
+	trim(INSUREDIDNO) as INSUREDIDNO,--inscertid ,-- '主被保险人证件号码 POLICY_INFORMATION.INSUREDIDNO', 
+	trim(RISKCODE) as RISKCODE,--productid ,-- '险种代码 POLICY_INFORMATION.RISKCODE', 
+	trim(RISKNAME) as RISKNAME, --productname 险种名称
+	trim(SALECOM) as SALECOM,--policybelong ,-- '业绩归属 POLICY_INFORMATION.SALECOM', 
 	PAYENDYEAR,--payendyear ,-- '缴费年期 POLICY_INFORMATION.PAYENDYEAR', 
-	APPFLAG, --保单状态
+	trim(APPFLAG) as APPFLAG, --保单状态
 	prem,--保费
+	sumprem,--累计保费
 	AMNT,--保额
-	PAYTODATE,--下次缴费日期
-	CUSTOMGETPOLDATE,--投保日期
-	SIGNDATE,--签单日期
-	AGENTCOM,--代理机构
-	SALECHNL,--销售渠道
+	trim(PAYTODATE) as PAYTODATE,--下次缴费日期
+	trim(polapplydate) as polapplydate,--投保日期
+	trim(SIGNDATE) as SIGNDATE,--签单日期
+	trim(AGENTCOM) as AGENTCOM,--代理机构
+	trim(SALECHNL) as SALECHNL,--销售渠道
+	trim(salecomname) as salecomname,--业绩归属中文
+	trim(PRESERVATIONFLAG) as PRESERVATIONFLAG,--保全标志
 	"上海人寿上海分公司",
+	trim(security) as security, --保险期原始值
 	case
 		when security ='终身' then 42720
 		when security = '至100周岁' then 36500
@@ -82,43 +108,11 @@ SELECT
 		when security = '15天' then 15
 		when security = '7天' then 7
 	end,
+	trim(AGENTCODE) as AGENTCODE,--代理人代码
+	trim(AGENTNAME) as AGENTNAME,--代理人名称
 	'admin',
 	sysdate() 
 	FROM policy_information; 
-	
-	
-	--更新投保人和被保人id  因为 scustid有重复所以需要去下重
-
-	UPDATE shanglifeecif.insurancearrangement a SET (
-		applicantid --'投保人ID',
-	) = (
-	   select
-	   	c.indid
-	   from (
-		   	select
-				row_number()over(PARTITION BY b.scustid) rn,
-				b.indid,
-				b.scustid
-			from shanglifeecif.individual b
-	   ) c
-	   WHERE c.scustid  = a.applicantscustid and c.rn=1
-	) WHERE 1=1 ;
-
-
-	UPDATE shanglifeecif.insurancearrangement a SET (
-		insuredid --'投保人ID',
-	) = (
-	   select
-	   	c.indid
-	   from (
-		   	select
-				row_number()over(PARTITION BY b.scustid) rn,
-				b.indid,
-				b.scustid
-			from shanglifeecif.individual b
-	   ) c
-	   WHERE c.scustid  = a.insuredscustid and c.rn=1
-	) WHERE 1=1 ;
 
 	--更新INSURANCEINFO 表中的信息
 
@@ -132,24 +126,50 @@ SELECT
 		agentchannel -- '代理渠道 INSURANCEINFO.SELLTYPE', 
 	) = (
 		select
-			PRTNO,--pano ,-- '投保单号 INSURANCEINFO.PRTNO',  
+			trim(b.PRTNO) as PRTNO,--pano ,-- '投保单号 INSURANCEINFO.PRTNO',  
 			--SIGNDATE,--pisdate ,-- '签单日期 INSURANCEINFO.SIGNDATE', 
 			--POLAPPLYDATE,--padate ,-- '投保日期 INSURANCEINFO.POLAPPLYDATE', 
 			--appflag,--policystate ,--INSURANCEINFO,appflag
 			--PREM,--prem ,-- '总保费 INSURANCEINFO.PREM', 
 			--RISKNAME,--productname ,-- '险种名称	 INSURANCEINFO.RISKNAME'
-			SELLTYPE--agentchannel ,-- '代理渠道 INSURANCEINFO.SELLTYPE', 
+			trim(b.SELLTYPE) as SELLTYPE--agentchannel ,-- '代理渠道 INSURANCEINFO.SELLTYPE', 
 		from INSURANCEINFO b
 		where b.contno  = a.policyno
 	) WHERE 1=1 ;
 
+	EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
 END;
 /
 
+CREATE OR REPLACE PROCEDURE shanglifeecif.update_risk_categories() -- 创建主存储过程
+IS    
+BEGIN
+	--更新险种大类
+	UPDATE shanglifeecif.insurancearrangement a SET (
+		risk_categories_name
+	) = (
+		select
+				kindtype
+		from riskkind b WHERE a.productid = b.riskcode
+	) WHERE 1=1;
+
+	EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+END;
+/
+/*
 CREATE OR REPLACE PROCEDURE shanglifeecif.update_risk_categories() -- 创建主存储过程
 IS    
 BEGIN
 --更新险种大类
+
 	UPDATE shanglifeecif.insurancearrangement a SET (
 		risk_categories,
 		risk_categories_name
@@ -168,10 +188,17 @@ BEGIN
 			from lmriskapp b WHERE a.productid = b.riskcode
 	
 	) WHERE 1=1;
-
+	EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
 END;
-/
-/*DROP TABLE IF EXISTS shanglifeecif.insurancearrangement_health_tmp;
+
+
+
+
+DROP TABLE IF EXISTS shanglifeecif.insurancearrangement_health_tmp;
 CREATE TABLE shanglifeecif.insurancearrangement_health_tmp(
     id string,
     orderid string  DEFAULT NULL COMMENT '用于分组的排序号',
@@ -273,19 +300,7 @@ BEGIN
 	) WHERE 1=1 ;
 
 END;
-/
-CREATE OR REPLACE PROCEDURE shanglifeecif.init_insurancearrangement() -- 创建主存储过程
-IS    
-BEGIN
-	--根据policy_information 更新保单表
-	shanglifeecif.init_insurancearrangement_policy_information();
 
-	--根据health_insurance_listing 更新相关字段
-	shanglifeecif.up_insurancearrangement_health_insurance_listing();
-
-	--其他标的字段 更新
-	shanglifeecif.up_insurancearrangement_other();
-END;
 /
 BEGIN
 	shanglifeecif.init_insurancearrangement();
@@ -335,7 +350,7 @@ UPDATE shanglifeecif.insurancearrangement a SET (
 			prem,--保费
 			AMNT,--保额
 			PAYTODATE,--下次缴费日期
-			CUSTOMGETPOLDATE,--投保日期
+			polapplydate,--投保日期
 			AGENTCOM,--代理机构
 			SALECHNL,--销售渠道
 			"上海人寿上海分公司"

+ 181 - 0
sql-achievement/存储过程/人寿测试环境使用sql整理/参与方事件.sql

@@ -0,0 +1,181 @@
+CREATE OR REPLACE PROCEDURE shanglifeecif.partytimeline_tb() -- 创建主存储过程
+IS    
+BEGIN
+	insert into shanglifeecif.partytimeline (
+		TripID,
+		PolicyNo,
+		PartyID,
+		name,
+		PCertID,
+		PRole,
+		Scenario,
+		SDate,
+		enddate,
+		created_by ,
+		created_time 
+	) select 
+   		row_number()over(),
+   		trim(contno) as contno,
+   		trim(max(customerno)) as customerno,
+   		trim(max(name)) as name,
+   		trim(max(idno)) as idno,
+   		'投保人',
+   		'投保',
+   		trim(max(polapplydate)) as polapplydate,
+		trim(max(enddate)) as enddate,
+		'admin',
+		sysdate()
+	from policy_information WHERE contno IS NOT NULL GROUP BY contno;
+	EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());	
+	
+END;
+/
+CREATE OR REPLACE PROCEDURE shanglifeecif.partytimeline_lp() 
+IS
+DECLARE
+	p_count int
+BEGIN
+	
+	SELECT count(*) INTO p_count FROM shanglifeecif.partytimeline;
+	
+	insert into shanglifeecif.partytimeline (
+		TripID,
+		PolicyNo,
+		PartyID,
+		name,
+		PCertID,
+		PRole,
+		Scenario,
+		SDate,
+		describe,
+		created_by ,
+		created_time 
+	) select 
+   		row_number()over()+p_count,
+   		trim(contno) as contno,
+   		trim(INSUREDNO) as INSUREDNO,
+   		trim(INSUREDNAME) as INSUREDNAME,
+   		trim(idno) as idno,
+   		'投保人',
+   		'理赔',
+   		trim(RPTDATE) as RPTDATE,
+   		trim(ACCIDENTTYPE) as ACCIDENTTYPE,
+   		'admin',
+		sysdate()
+	from insurance_claim WHERE contno IS NOT NULL;
+	EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());	
+END;
+/
+
+CREATE OR REPLACE PROCEDURE shanglifeecif.partytimeline_zx() 
+IS
+DECLARE
+	p_count int
+BEGIN
+	
+	SELECT count(*) INTO p_count FROM shanglifeecif.partytimeline;
+	
+	insert into shanglifeecif.partytimeline (
+		TripID,
+		PolicyNo,
+		PartyID,
+		name,
+		PRole,
+		Scenario,
+		SDate,
+		DESCRIBE,
+		created_by ,
+		created_time 
+	) SELECT 
+		row_number() over()+p_count,
+		trim(t.contnos) as contnos,
+		trim(t.customerno) as customerno,
+		trim(t.econtactsName) as econtactsName,
+		trim(t.tbr) as tbr,
+		trim(t.zx) as zx,
+		trim(t.starttime) as starttime,
+		trim(t.reasonsecondname) as reasonsecondname,
+		'admin',
+		sysdate()
+		FROM (
+			select 
+		   		row_number() over(partition by i.contno) rn,
+		   		m.contnos,
+		   		i.customerno,
+		   		m.econtactsName,
+		   		'投保人' AS tbr,
+		   		'咨询' AS zx,
+		   		m.starttime,
+		   		m.reasonsecondname
+		from cc_record_main  m
+		LEFT JOIN policy_information i ON m.contnos = i.contno
+	WHERE m.contnos IS NOT NULL
+	) t WHERE t.rn = 1;
+	EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());	
+END;
+/
+CREATE OR REPLACE PROCEDURE shanglifeecif.partytimeline_bq() 
+IS
+DECLARE
+	p_count int
+BEGIN
+	
+	
+	insert into shanglifeecif.partytimeline (
+		TripID,
+		PolicyNo,
+		PartyID,
+		name,
+		PRole,
+		Scenario,
+		SDate,
+		created_by ,
+		created_time 
+)SELECT 
+	row_number() over(),
+		t.contno,
+		t.customerno,
+		t.name,
+		t.tbr,
+		t.bq,
+		t.edorappdate,
+		'admin',
+		sysdate()
+		FROM (
+			
+				select 
+				   		row_number() over(partition by e.contno) rn,
+				   		e.contno,
+				   		i.customerno,
+				   		i.name,
+				   		'投保人' AS tbr,
+				   		'保全' AS bq,
+				   		e.edorappdate
+				from edorinfo e
+				LEFT JOIN policy_information i ON e.contno = i.contno
+			WHERE e.contno IS NOT NULL
+		
+		) t WHERE t.rn = 1;
+END
+CREATE OR REPLACE PROCEDURE shanglifeecif.partytimeline_main() 
+IS
+BEGIN
+	DELETE FROM shanglifeecif.partytimeline;
+	shanglifeecif.partytimeline_tb();
+	shanglifeecif.partytimeline_lp();
+	shanglifeecif.partytimeline_zx();
+	shanglifeecif.partytimeline_bq();
+END;
+

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

@@ -1,5 +1,73 @@
+CREATE OR REPLACE PROCEDURE shanglifeecif.init_individual_main() -- 初始化 数据全部插入
+IS    
+DECLARE
+	individual_count int
+	strsql string
+BEGIN
+	shanglifeecif.customertotaltemp();
+	DELETE FROM shanglifeecif.individual;
+	--初始化客户信息
+	shanglifeecif.init_all_individual();
+	--更新用户等级信息
+	shanglifeecif.up_t_customers_class_1();
+	--更新其它信息
+	shanglifeecif.up_other_customerinfo()
 
-CREATE OR REPLACE PROCEDURE shanglifeecif.init_individual_0( individual_count OUT int) -- 初始化 身份证
+END;
+/
+CREATE OR REPLACE PROCEDURE shanglifeecif.customertotaltemp() IS
+DECLARE
+BEGIN
+		DELETE FROM shanglifeecif.customertotaltemp;
+		insert into shanglifeecif.customertotaltemp(
+			scustid,
+		 	name,
+		 	gender,
+		 	birthday,
+		 	idcard,
+		 	idtype
+		)
+		SELECT 
+			scustid ,
+			max(name) as name,
+			max(gender) as gender ,
+			max(birthday) as birthday,
+			max(idcard) as idcard,
+			max(idtype) AS idtype
+		FROM (
+			SELECT
+				trim(customerno) AS scustid,--投保人
+				trim(name) AS name,
+				trim(sex) AS gender,
+				trim(birthday) AS  birthday,
+				trim(idtype) AS idtype , 
+				trim(idno) AS idcard
+			FROM
+				policy_information 
+			WHERE customerno IS NOT NULL
+			UNION 
+			SELECT 
+				trim(insuredno) AS scustid,--被保人
+				trim(insuredname) AS name,
+				trim(insuredsex) AS gender,
+				trim(insuredbirthday) AS  birthday,
+				trim(insuredidtype) AS idtype , 
+				trim(insuredidno) AS idcard
+			FROM
+				policy_information
+			WHERE insuredno IS NOT NULL
+			) tmpTable GROUP BY scustid;
+			
+		UPDATE shanglifeecif.customertotaltemp sct SET sct.mobile = (SELECT trim(t.MOBILE) FROM t_customer_class t WHERE sct.scustid=t.customer_id);
+
+	EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());	
+END	;
+/
+CREATE OR REPLACE PROCEDURE shanglifeecif.init_all_individual() -- 初始化所有客户信息
 IS    
 BEGIN
 	
@@ -7,55 +75,97 @@ BEGIN
 	insert into shanglifeecif.individual (
 		indid,
 		custid,
+		scustid,
+	 	name,
+	 	gender,
+	 	birthday,
+	 	idcard,
+	 	Passport,
+  		Dlicense,
+  		OtherIdNumber,
+	 	created_time,
+	 	created_by
+	) SELECT 
+	row_number()OVER(),
+	'CP'||lpad(row_number()over(),10,'0'),	
+	sc.scustid,
+	sc.name,
+	sc.gender,
+	sc.birthday,
+	CASE sc.idtype WHEN '0' THEN sc.idcard END AS idcard,
+	CASE sc.idtype WHEN '1' THEN sc.idcard END AS passport,
+	CASE sc.idtype WHEN '3' THEN sc.idcard END AS dlicense,
+	CASE  WHEN sc.idtype <> '0' AND sc.idtype <> '1' AND sc1.idtype <> '3' THEN sc.idcard END AS otherIdnumber,
+	sysdate,
+	'admin'
+	
+FROM shanglifeecif.customertotaltemp sc ORDER BY sc.scustid;
+	
+		
+		EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
 
+END;
+/
+CREATE OR REPLACE PROCEDURE shanglifeecif.init_individual_0( individual_count OUT int) -- 初始化 身份证
+IS    
+BEGIN
+	
+	--查询出此次处理的数据并出表中
+	insert into shanglifeecif.individual (
+		indid,
+		custid,
 		scustid,
 	 	name,
 	 	gender,
 	 	birthday,
 	 	idcard,
-		custtype,
 	 	created_time,
 	 	created_by
 	)
 	SELECT 
 		row_number()over(),
 		'CP'||lpad(row_number()over(),10,'0'),	
-
 		scustid ,
-		name,
-		gender ,
-		birthday,
-		idcard ,
-		max(custtype) AS custtype,
+		max(name) as name,
+		max(gender) as gender ,
+		max(birthday) as birthday,
+		max(idcard) as idcard,
 		sysdate,
 		'admin'
 		FROM (
 			SELECT
-				customerno AS scustid,--投保人
-				name AS name,
-				sex AS gender,
-				birthday AS  birthday,
-				idtype AS idtype , 
-				idno AS idcard,
-				"投保人" AS custtype
+				trim(customerno) AS scustid,--投保人
+				trim(name) AS name,
+				trim(sex) AS gender,
+				trim(birthday) AS  birthday,
+				trim(idtype) AS idtype , 
+				trim(idno) AS idcard
 			FROM
 				policy_information 
 			WHERE customerno IS NOT NULL AND idtype=0
 			UNION 
 			SELECT 
-				insuredno AS scustid,--被保人
-				insuredname AS name,
-				insuredsex AS gender,
-				insuredbirthday AS  birthday,
-				insuredidtype AS idtype , 
-				insuredidno AS idcard,
-				"被保人" AS custtype
+				trim(insuredno) AS scustid,--被保人
+				trim(insuredname) AS name,
+				trim(insuredsex) AS gender,
+				trim(insuredbirthday) AS  birthday,
+				trim(insuredidtype) AS idtype , 
+				trim(insuredidno) AS idcard
 			FROM
 				policy_information
 			WHERE insuredno IS NOT NULL AND insuredidtype=0
-			) tmpTable GROUP BY scustid ,name,gender,birthday,idcard
-	--已经存在的数据行数
-	select count(0) into individual_count from shanglifeecif.individual
+			) tmpTable GROUP BY scustid
+		--已经存在的数据行数
+		select count(0) into individual_count from shanglifeecif.individual;
+		EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
 
 END;
 /
@@ -67,62 +177,60 @@ BEGIN
 	insert into shanglifeecif.individual (
 			indid,
 			custid,
-		 	
 			scustid,
 		 	name,
 		 	gender,
 		 	birthday,
 		 	passport,
-		 	custtype,
-		 	
 		 	created_time,
 		 	created_by
 	)
 	SELECT 
-		row_number()over()+individual_count,
-		'CP'||lpad(row_number()over()+individual_count,10,'0'),
-
+		row_number()over(),
+		'CP'||lpad(row_number()over(),10,'0'),	
 		scustid ,
-		name,
-		gender ,
-		birthday,
-		idcard ,
-		max(custtype) as custtype,
+		max(name) as name,
+		max(gender) as gender ,
+		max(birthday) as birthday,
+		max(idcard) as idcard,
 		sysdate,
 		'admin'
 		FROM (
 			SELECT
-				customerno AS scustid,--投保人
-				name AS name,
-				sex AS gender,
-				birthday AS  birthday,
-				idtype AS idtype , 
-				idno AS idcard,
-				"投保人" as custtype
+				trim(customerno) AS scustid,--投保人
+				trim(name) AS name,
+				trim(sex) AS gender,
+				trim(birthday) AS  birthday,
+				trim(idtype) AS idtype , 
+				trim(idno) AS idcard
 			FROM
 				policy_information 
 			WHERE customerno IS NOT NULL AND idtype=1
 			UNION 
 			SELECT 
-				insuredno AS scustid,--被保人
-				insuredname AS name,
-				insuredsex AS gender,
-				insuredbirthday AS  birthday,
-				insuredidtype AS idtype , 
-				insuredidno AS idcard,
-				"被保人" as custtype
+				trim(insuredno) AS scustid,--被保人
+				trim(insuredname) AS name,
+				trim(insuredsex) AS gender,
+				trim(insuredbirthday) AS  birthday,
+				trim(insuredidtype) AS idtype , 
+				trim(insuredidno) AS idcard
 			FROM
 				policy_information
 			WHERE insuredno IS NOT NULL AND insuredidtype=1
-			) tmpTable GROUP BY scustid ,name,gender ,birthday,idcard
+			) tmpTable GROUP BY scustid
 
 	--已经存在的数据行数
-	select count(0) into individual_count from shanglifeecif.individual
+	select count(0) into individual_count from shanglifeecif.individual;
+	EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
 
 
 END;
 /
-CREATE OR REPLACE PROCEDURE shanglifeecif.init_individual_3(individual_count INOUT  int) -- 初始化 护照
+CREATE OR REPLACE PROCEDURE shanglifeecif.init_individual_3(individual_count INOUT  int) -- 初始化 
 IS    
 BEGIN
 	
@@ -130,59 +238,58 @@ BEGIN
 	insert into shanglifeecif.individual(
 		indid,
 		custid,
-
 		scustid,
 	 	name,
 	 	gender,
 	 	birthday,
 	 	dlicense,
-		custtype,
 	 	created_time,
 	 	created_by
 	)
 	SELECT 
-		row_number()over()+individual_count,
-		'CP'||lpad(row_number()over()+individual_count,10,'0'),
-		
+		row_number()over(),
+		'CP'||lpad(row_number()over(),10,'0'),	
 		scustid ,
-		name,
-		gender ,
-		birthday,
-		idcard ,
-		max(custtype) as custtype,
+		max(name) as name,
+		max(gender) as gender ,
+		max(birthday) as birthday,
+		max(idcard) as idcard,
 		sysdate,
 		'admin'
 		FROM (
 			SELECT
-				customerno AS scustid,--投保人
-				name AS name,
-				sex AS gender,
-				birthday AS  birthday,
-				idtype AS idtype , 
-				idno AS idcard,
-				"投保人" as custtype
+				trim(customerno) AS scustid,--投保人
+				trim(name) AS name,
+				trim(sex) AS gender,
+				trim(birthday) AS  birthday,
+				trim(idtype) AS idtype , 
+				trim(idno) AS idcard
 			FROM
 				policy_information 
 			WHERE customerno IS NOT NULL AND idtype=3
 			UNION 
 			SELECT 
-				insuredno AS scustid,--被保人
-				insuredname AS name,
-				insuredsex AS gender,
-				insuredbirthday AS  birthday,
-				insuredidtype AS idtype , 
-				insuredidno AS idcard,
-				"被保人" as custtype
+				trim(insuredno) AS scustid,--被保人
+				trim(insuredname) AS name,
+				trim(insuredsex) AS gender,
+				trim(insuredbirthday) AS  birthday,
+				trim(insuredidtype) AS idtype , 
+				trim(insuredidno) AS idcard
 			FROM
 				policy_information
 			WHERE insuredno IS NOT NULL AND insuredidtype=3
-			) tmpTable GROUP BY scustid ,name,gender ,birthday,idcard
+			) tmpTable GROUP BY scustid
 
 	--已经存在的数据行数
-	select count(0) into individual_count from shanglifeecif.individual
+	select count(0) into individual_count from shanglifeecif.individual;
+	EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
 END;
 /
-CREATE OR REPLACE PROCEDURE shanglifeecif.init_individual_other(individual_count INOUT  int) -- 初始化出了以上三种证件信息
+CREATE OR REPLACE PROCEDURE shanglifeecif.init_individual_other(individual_count INOUT  int) -- 初始化了以上三种证件信息
 IS    
 BEGIN
 	
@@ -190,54 +297,55 @@ BEGIN
 	insert into shanglifeecif.individual(
 			indid,
 			custid,
-		 
 			scustid,
 		 	name,
 		 	gender,
 		 	birthday,
-		 	
-		 	
+		 	otheridnumber,
 		 	created_time,
 		 	created_by
 	)
 	SELECT 
-		row_number()over()+individual_count,
-		'CP'||lpad(row_number()over()+individual_count,10,'0'),
+		row_number()over(),
+		'CP'||lpad(row_number()over(),10,'0'),	
 		scustid ,
-		name,
-		gender ,
-		birthday,
+		max(name) as name,
+		max(gender) as gender ,
+		max(birthday) as birthday,
+		max(idcard) as idcard,
 		sysdate,
 		'admin'
 		FROM (
 			SELECT
-				customerno AS scustid,--投保人
-				name AS name,
-				sex AS gender,
-				birthday AS  birthday,
-				idtype AS idtype , 
-				idno AS idcard,
-				"投保人" as custtype
+				trim(customerno) AS scustid,--投保人
+				trim(name) AS name,
+				trim(sex) AS gender,
+				trim(birthday) AS  birthday,
+				trim(idtype) AS idtype , 
+				trim(idno) AS idcard
 			FROM
 				policy_information 
 			WHERE customerno IS NOT NULL AND idtype not in (0,1,3)
-			UNION
+			UNION 
 			SELECT 
-				insuredno AS scustid,--被保人
-				insuredname AS name,
-				insuredsex AS gender,
-				insuredbirthday AS  birthday,
-				insuredidtype AS idtype , 
-				insuredidno AS idcard,
-				"被保人" as custtype
+				trim(insuredno) AS scustid,--被保人
+				trim(insuredname) AS name,
+				trim(insuredsex) AS gender,
+				trim(insuredbirthday) AS  birthday,
+				trim(insuredidtype) AS idtype , 
+				trim(insuredidno) AS idcard
 			FROM
 				policy_information
-			WHERE insuredno IS NOT NULL AND insuredidtype in (0,1,3)
-			) tmpTable GROUP BY scustid ,name,gender ,birthday,idcard
+			WHERE insuredno IS NOT NULL AND insuredidtype not in (0,1,3)
+			) tmpTable GROUP BY scustid
 
 	--已经存在的数据行数
-	select count(0) into individual_count from shanglifeecif.individual
-
+	select count(0) into individual_count from shanglifeecif.individual;
+	EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());	
 
 END;
 /
@@ -259,129 +367,139 @@ BEGIN
 			FIncome,	--家庭年收入
 			IncomeSource,	--收入来源
 			SIStatus,	--社保情况
-			Ethnic,  --民族情况
+			--Ethnic,  --民族情况
 			Nation, --国籍
 			MaritalStat, --婚姻
 			Employer,--工作单位
 			Education,--学历
 			Dday, --死亡日期
-			regtype  --户籍类型
+			regtype,  --户籍类型
+			ZIPCODE,--邮编
+			HPhone,--电话
+			PMPhone,--手机
+			email, -- 邮箱  
+			RAL,    --联系地址
+			sobirth --省份
 		) = (
 			select 
-					CLASS_VALUE	,--客户等级
-					CONTRIBUTION_VALUE ,--贡献度分
-					AWARDED3, --家庭加分
-					AWARDED2, --续期加分
-					AWARDED1, --保单加分
-					TOTAL_VALUE, --总分值
-					END_DATE, --失效日期
-					STATURE,	--身高
-					AVOIRDUPOIS,--体重
-					BMI,
-					YEARINCOME,	--个人年收入
-					FAMILYYEARSALARY,	--家庭年收入
-					INCOMESOURCE,	--收入来源
-					SOCIALINSUFLAG,	--社保情况
-					NATIONALITY, --民族情况
-					NATIVEPLACE, --国籍
-					MARRIAGE,--婚姻
-					GRPNAME,--工作单位名称
-					DEGREE,--学历
-					DEATHDATE,--死亡日期
-					DENTYPE, --户籍类型
-					zipcode, --邮政编码
-					phone,  --电话
-					POSTALADDRESS, --通讯地址
-					email,--电子邮箱
-					mobile  --手机
-					
-
-
+					b.CLASS_VALUE,--客户等级
+					b.CONTRIBUTION_VALUE,--贡献度分
+					b.AWARDED3, --家庭加分
+					b.AWARDED2, --续期加分
+					b.AWARDED1, --保单加分
+					b.TOTAL_VALUE, --总分值
+					trim(b.END_DATE) as END_DATE, --失效日期
+					b.STATURE,	--身高
+					b.AVOIRDUPOIS,--体重
+					b.BMI,        --根据身高体重计算
+					b.YEARINCOME,	--个人年收入
+					b.FAMILYYEARSALARY,	--家庭年收入
+					trim(b.INCOMESOURCE) as INCOMESOURCE,	--收入来源
+					trim(b.SOCIALINSUFLAG) as SOCIALINSUFLAG,	--社保情况
+					--trim(b.NATIONALITY) as NATIONALITY, --民族情况
+					trim(b.NATIVEPLACE) as NATIVEPLACE, --国籍
+					trim(b.MARRIAGE) as MARRIAGE,--婚姻
+					trim(b.GRPNAME) as GRPNAME,--工作单位名称
+					trim(b.DEGREE) as DEGREE,--学历
+					trim(b.DEATHDATE) as DEATHDATE,--死亡日期
+					trim(b.DENTYPE) as DENTYPE,--户籍类型
+					trim(b.ZIPCODE) as ZIPCODE,--邮编
+					trim(b.PHONE) as PHONE,--电话
+					trim(b.MOBILE) as MOBILE,--手机
+					trim(b.EMAIL) as EMAIL,--邮箱
+					regexp_replace(trim(b.POSTALADDRESS),'[0-9]','*') as POSTALADDRESS, --联系地址
+					regexp_extract(b.POSTALADDRESS,'(.*?)省|(.*?)市',0) -- 省份
 				from t_customer_class b
 				where b.CUSTOMER_ID = a.scustid
 		) WHERE 1=1 ;
-
+		EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());	
 END;
 /
-
+CREATE OR REPLACE PROCEDURE shanglifeecif.up_other_customerinfo() -- 创建存储过程
+IS    
+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);
+	--更新客户类型投保人、被保人
+	UPDATE shanglifeecif.individual i SET i.custtype = '投保人、被保人' WHERE 
+	i.scustid IN (SELECT p.customerno FROM policy_information p)
+	AND i.scustid IN (SELECT pi.insuredno FROM policy_information pi);
+	
+	--更新业绩归属
+	UPDATE shanglifeecif.Individual si1 SET si1.policybelong = (
+		SELECT trim(t.SALECOM) FROM (
+			SELECT row_number()OVER(PARTITION BY p.customerno ORDER BY p.polapplydate asc) rd,p.customerno,p.SALECOM FROM policy_information p
+		) t WHERE t.rd = 1 AND si1.scustid = t.customerno
+	);
+	
+	UPDATE shanglifeecif.Individual si1 SET si1.policybelong = (
+		SELECT trim(t.SALECOM) FROM (
+			SELECT row_number()OVER(PARTITION BY p.insuredno ORDER BY p.polapplydate asc) rd,p.insuredno,p.SALECOM FROM policy_information p
+		) t WHERE t.rd = 1 AND si1.scustid = t.insuredno
+	);
+	
+	--更新职业,民族等信息
+	UPDATE shanglifeecif.Individual si1 SET (si1.Occupation,si1.Ethnic) = (
+		SELECT trim(t.occupationname),trim(t.NATIONALITYNAME) FROM (
+			SELECT row_number()OVER(PARTITION BY p.customerno ORDER BY p.polapplydate desc) rd,p.customerno,p.occupationname,p.NATIONALITYNAME FROM policy_information p
+		) t WHERE t.rd = 1 AND si1.scustid = t.customerno
+	);
+	
+	--更新官微积分
+	UPDATE shanglifeecif.individual si SET si.officialCalculus = (
+	   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
+	);
+	
+	EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());	
+END;
+/
+/*
 CREATE OR REPLACE PROCEDURE shanglifeecif.up_health_insurance_listing_1() -- 创建存储过程
 IS    
 BEGIN
-	--清楚临时表数据
-	delete shanglifeecif.occupation_tmp;
-	--插入去重数据到临时表
-	insert into shanglifeecif.occupation_tmp(
-		scustid,
-		OccupationId,
-		Occupation,
-		HomeAdress
-	)
-	select 
-		appntno,
-		appntoccupationcode	,--职业代码
-		appntoccupationname ,
-		APPNTHOMEADDRESS--职业名称
-	from HEALTH_INSURANCE_LISTING 
-	WHERE appntoccupationcode is not null
-	and appntoccupationname is not null
-	group by appntno,appntoccupationcode,appntoccupationname,APPNTHOMEADDRESS
-
 	--更新个人信息表
-
 	UPDATE shanglifeecif.individual a SET (
 		OccupationId	,--	职业代码
 		Occupation,	--	职业名称
 		HomeAdress
 	) = (
-		select 
-			OccupationId	,--职业代码
-			Occupation,--职业名称
-			HomeAdress 
-		from shanglifeecif.occupation_tmp b
-		where b.scustid = a.scustid 
-	) WHERE 1=1 ;
-
-	/*--更新被保人手机号
-	UPDATE shanglifeecif.individual a SET (
-		PMPhone
-	) = (
-		select 
-			INSUREDMOBILE
-			
-		from policy_information b
-		where b.INSUREDNO = a.scustid 
-	) WHERE 1=1 ;*/
+		SELECT 
+			t.appntoccupationcode,
+			t.appntoccupationname,
+			t.APPNTHOMEADDRESS
+		FROM (
+			select 
+				 appntno,
+				 max(appntoccupationcode) appntoccupationcode,--职业代码
+				 max(appntoccupationname) appntoccupationname,--职业名称
+				max(APPNTHOMEADDRESS) APPNTHOMEADDRESS --住址 
+			from HEALTH_INSURANCE_LISTING 
+			WHERE appntoccupationcode is not null
+			and appntoccupationname is not NULL
+			group by appntno
+		) t WHERE t.appntno = a.scustid 
+	);
 	
 END;
-/
-CREATE OR REPLACE PROCEDURE shanglifeecif.init_individual_main() -- 初始化 数据全部插入
-IS    
-DECLARE
-	individual_count int
-	strsql string
+*/
 BEGIN
-	--先验是否一个客户id有多条记录对应不通的证件类别
-	--初始化 身份证 用户
-	shanglifeecif.init_individual_0(individual_count);
+	shanglifeecif.init_individual_main();
+end ;
+
+
+
 
-	--初始化  护照用户
-	individual_count:=individual_count+1;
-	shanglifeecif.init_individual_1(individual_count);
-	--初始化 驾照用户
-	individual_count:=individual_count+1;
-	shanglifeecif.init_individual_3(individual_count);
-	--其他 证件类型用户
-	individual_count:=individual_count+1;
-	shanglifeecif.init_individual_other(individual_count);
-	
-	--更新用户等级信息
-	shanglifeecif.up_t_customers_class_1();
-	
-	--更新职业信息
-	shanglifeecif.up_health_insurance_listing_1();
 
-END;
-/
-BEGIN
-	shanglifeecif.init_individual_main();
-end ;

+ 649 - 0
sql-achievement/存储过程/人寿测试环境使用sql整理/客户标签20210224.sql

@@ -0,0 +1,649 @@
+CREATE OR REPLACE PROCEDURE shanglifeecif.updateIndividualLable() IS
+DECLARE
+BEGIN
+	--1	学历	label1	按照客户最新记录中的学历取值	幼儿园、小学、中专、职高、技校、初中、高中、大专、本科、硕士及以上、其他	
+	UPDATE shanglifeecif.Individual si1 SET si1.label1 = si1.Education where si1.Education is not null;
+	--2	职业	label2	按照客户最新记录中的职业名称取值	食用调料制作工、味精制作工、糕点、面包烘焙工、米面主食制作工、油脂制品工等
+		
+	UPDATE shanglifeecif.Individual si1 SET si1.label2 = si1.Occupation where si1.Occupation is not null;
+	--3	出生日期区间	label3	根据出生日期,判断客户年代归属	60后、70后、80后、90后、00后、10后等	
+	UPDATE shanglifeecif.Individual si1 SET si1.label3 = substr(si1.birthday,3,1) || '0后' where 1 = 1;
+	--4	年龄区间	label4	"case age when 0<=age and age<13 then '儿童' when  13<=age and age<19 then '少年' when 19<=age and age<41 then '青年' when 41<=age and age<66 then '中年' --else '老年'"	儿童、少年、青年、中年、老年	
+	UPDATE shanglifeecif.Individual si1 SET si1.label4 = (SELECT CASE WHEN temp.age>=0 AND temp.age<13 THEN '儿童' WHEN temp.age>=13 AND temp.age <19 THEN '少年' WHEN temp.age >=19 AND temp.age <41 THEN '青年' WHEN temp.age >=41 AND temp.age <66 THEN '中年' ELSE '老年' END FROM (SELECT TRUNC(months_between(sysdate, si2.birthday)/12) age,si2.indid FROM shanglifeecif.Individual si2) temp WHERE temp.indid = si1.indid);
+	--5	联系地址归属省份	label5	按照客户最近一次办理业务给出的最新联系地址取所在省名称或地级市的名称	省、直辖市:江苏、北京、上海等	
+	--6	联系地址归属地区	label6	按照客户最近一次办理业务给出的最新联系地址取所在市名称或者地级市所在区的名称	市:苏州市、南京市等	
+	--7	婚姻状况	label9	"根据婚姻状态字段判断 case maritalStat when maritalStat=1 then '未婚' when  maritalStat=2 then '已婚' when maritalStat=3 then '丧偶' when maritalStat=4 --then '离异' else null"	1未婚、2已婚、3丧偶、4离异	
+	UPDATE shanglifeecif.Individual si1 SET si1.label9 = si1.maritalStat WHERE 1 = 1;
+	--UPDATE shanglifeecif.Individual si1 SET si1.label9 = (
+				--case si1.maritalStat
+				--when 1 then '未婚'
+				--when 2 then '已婚'
+				--when 3 then '丧偶'
+				--when 4 then '离异'
+				--else NULL END 
+	--) WHERE 1 = 1;
+	--8	子女数量区间	label10	"根据子女登录(登记录入)数量判断 case COChild when COChild=0  then '无子女' when COChild=1  then '1孩' when COChild>0  then '2孩及以上' 
+	--else null"	无子女、1孩、2孩及以上	
+	UPDATE shanglifeecif.individual si1 SET si1.cochild = (
+		SELECT nvl(t.cnum,0) FROM (
+			SELECT si.indid1,count(*) AS cnum FROM shanglifeecif.IndRelationShip si 
+			WHERE si.rstype = '子女' GROUP BY si.indid1
+		) t WHERE t.indid1 = si1.indid
+	) ;
+	
+	UPDATE shanglifeecif.Individual si1 SET si1.label10 = (
+				case 
+				when si1.COChild=0  then '无子女' 
+				when si1.COChild=1  then '1孩' 
+				when si1.COChild>=2  then '2孩及以上' 
+				else null END 
+	) WHERE si1.cochild is not null;
+	--9	最近5年是否曾或正在接受治疗	label11	按照该字段标识最后一次更新的结果判断,如果标识为true则显示“最近五年曾或正在接受治疗”,否则不做显示	近5年有治疗,近5年无治疗	
+    --10	是否饮酒	label12	按照该字段标识判断,只要记录中有一次标识为true,则显示“饮酒”,否则不做显示	饮酒	
+	--11	是否吸烟	label13	按照该字段标识判断,只要记录中有一次标识为true,则显示“吸烟”,否则不做显示	吸烟	
+	--12	是否有先天性疾病	label14	按照该字段标识最后一次更新的结果判断,如果标识为true则显示“有先天性疾病”,否则不做显示	有先天性疾病	
+	--13	是否患过重大疾病	label15	按照该字段标识最后一次更新的结果判断,如果标识为true则显示“患过重大疾病”,否则不做显示	患过重大疾病	
+	--14	家族是否有遗传病史	label16	按照该字段标识最后一次更新的结果判断,如果标识为true则显示“有遗传病”,否则不做显示	家族有遗传病史	
+	--15	是否正在怀孕	label17	按照该字段标识最后一次更新的结果判断,如果标识为true则显示“怀孕”,否则不做显示	正在怀孕	
+	--16	是否有早产、过期产、难产情况	label18	按照该字段标识判断,只要记录中有一次标识为true,则显示“有早产、过期产、难产情况”,否则不做显示	有早产、过期产、难产情况	
+	--17	是否进行危险性运动	label20	按照该字段标识判断,只要记录中有一次标识为true,则显示“进行危险性运动”,否则不做显示	进行危险性运动	
+	--18	个人年收入区间	label21	"根据个人年收入字段进行判断:case PIncome when PIncome<=120000 then '低收入' when PIncome>120000 and PIncome<=1000000 then '中产' when --PIncome>1000000 then '富人' else null"	低收入、中产、富人	
+	--根据数据判断单位应该是万元,这里都除以10000做判断
+	UPDATE shanglifeecif.Individual si1 SET si1.Label21 = (
+			CASE 
+				WHEN si1.pincome >=0 AND si1.pincome<=12 THEN '低收入' 
+				WHEN si1.pincome >12 AND si1.pincome<=100 THEN '中产' 
+				WHEN si1.pincome > 100 THEN '富人'
+				else null END 
+			) where 1 = 1;
+	--19	拥有车辆数量区间	label22	"根据车辆登录数量字段进行判断:case COVehicle when COVehicle=0 then '无车' when COVehicle=1 then '1辆车' when COVehicle>1 then '2辆车以上'
+    --else null" 无车,1辆车,2辆车及以上	
+	UPDATE shanglifeecif.Individual si1 SET si1.Label22 = (
+		CASE 
+		WHEN si1.COVehicle ==0  THEN '无车' 
+		WHEN si1.COVehicle == 1  THEN '1辆车' 
+		WHEN si1.COVehicle > 1  THEN '2辆车以上' 
+		ELSE NULL END 
+		) where 1 = 1;	
+	--20	拥有住房套数	label23	"根据房屋登录数量字段进行判断:case CORP when CORP=0 then '无房' when CORP=1 then '1套房' when CORP>1 then '2套房以上'
+	--else null"	无房,1套房,2套房及以上	
+	UPDATE shanglifeecif.Individual si1 SET si1.Label23 = (
+		CASE 
+		WHEN si1.CORP ==0  THEN '无房' 
+		WHEN si1.CORP == 1  THEN '1套房' 
+		WHEN si1.CORP > 1  THEN '2套房以上' 
+		else null END 
+		) where 1 = 1;
+	--21	是否持有寿险有效保单	label24	筛选客户名下所有保单,保单中客户为投保人,保单险种大类为寿险	持有寿险有效保单	
+	UPDATE shanglifeecif.Individual si1 SET si1.label24 = '持有寿险有效保单' WHERE si1.scustid in
+	(SELECT p.customerno FROM policy_information p,lmriskapp l WHERE p.riskcode = l.riskcode AND p.appflag = '有效' AND l.kindcode = 'L');
+	--22	保单件数区间	label25	"判断客户作为投保人所有的保单数量(有效保单数量+失效保单数量):NOVPolicy+NOIVPolicy=pCount(保单总件数)
+	--case pCount when pCount=1 then '1件' when pCount=2 then '2件' when pCount>2 and pCount<6 then '3-5件' when pCount>5 and pCount<11 then '6-10件' 
+	--when pCount>10 and pCount<21 then '10-20件'when pCount>20 and pCount<51 then '21-50件'
+	--when pCount>50 then '50件以上' else '无保单'"	无保单、1件保单、2件保单、3-5件保单、6-10件保单、11-20件保单、20-50件保单、50件以上保单	
+	--第一步 更新 Individual.NOVPolicy 有效记录数
+	UPDATE shanglifeecif.Individual si1 SET si1.NOVPolicy = (SELECT nvl(t.cnum,0) FROM (
+		SELECT temp.customerno,count(*) AS cnum FROM (
+			SELECT max(p.customerno) customerno,p.contno FROM policy_information p WHERE p.appflag = '有效' GROUP BY p.contno 
+		) temp GROUP BY temp.customerno
+	) t WHERE t.customerno =  si1.scustid); 
+	
+	
+	
+	--第二步 更新 Individual.NOIVPolicy 无效记录数
+	UPDATE shanglifeecif.Individual si1 SET si1.noivpolicy = (SELECT nvl(t.cnum,0) FROM (
+			SELECT temp.customerno,count(*) AS cnum FROM (
+			SELECT max(p.customerno) customerno,p.contno FROM policy_information p WHERE p.appflag <> '有效' GROUP BY p.contno 
+		) temp GROUP BY temp.customerno
+	) t WHERE t.customerno =  si1.scustid); 
+	
+	--第三步
+	--UPDATE shanglifeecif.Individual si1 SET si1.Label25 = (
+		--CASE 
+				--WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) == 0 THEN '无保单' 
+				--WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) == 1 THEN '1件' 
+				--WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) == 2 THEN '2件'  
+				--WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) >= 3  AND (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) <= 5 THEN '3-5件'  
+				--WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) >= 6  AND (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) <= 10 THEN '6-10件'  
+				--WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) >= 11  AND (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0))<= 20 THEN '11-20件'  
+				--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;
+		
+	UPDATE shanglifeecif.Individual si1 SET si1.Label25 = (
+		CASE 
+				WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) == 0 THEN '无保单' 
+				WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) == 1 THEN '1件保单' 
+				WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) == 2 THEN '2件保单'  
+				WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) >= 3  AND (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) <= 5 THEN '3-5件保单'  
+				WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) >= 6  AND (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) <= 10 THEN '6-10件保单'  
+				WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) >= 11  AND (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0))<= 20 THEN '11-20件保单'  
+				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;	
+		
+	
+	--23	是否贷款	label26	筛选客户为投保人的有效保单,且办理了贷款业务	有贷款	
+	--24	是否有极短意保单/是否仅有极短意保单	 label27	"客户为保单投保人 case AGRMNTAge(保险期限) when avg(sum(AGRMNTAges))<90 then '仅极短意外险'
+			--when AGRMNTAge<90  then '有极短意外险'"	仅极短意外险,有极短意外险	志广说只用判断有极短意外险不用判断仅有
+		/*UPDATE shanglifeecif.Individual si1 SET si1.Label27 = (
+			SELECT
+				CASE	
+					WHEN temp.cnt >0 THEN
+							'有极短意外险' 	
+				END
+			FROM
+				(
+				SELECT
+					count(1) cnt,
+					policy.customerno 
+				FROM
+					policy_information policy
+				where
+					policy.SECURITY in('7天','15天','30天','90天','1月','3月')
+				and
+					policy.riskperiod='短期险'
+				and	
+					policy.riskcode not in('1066008','1066007','1066006','1066004','1066003','1066002','1066001','1065005','1065003','1065001','1025003')
+				
+				GROUP BY
+					policy.customerno 
+				) temp 
+			WHERE temp.customerno = si1.scustid 
+		);*/
+		
+		UPDATE shanglifeecif.Individual si1 SET si1.Label27 = (
+			SELECT  
+			CASE 
+				WHEN temp.cnt > 0 AND temp.cnt = temp.tnum THEN '仅极短意外险'
+				WHEN temp.cnt > 0 AND temp.cnt <> temp.tnum THEN '有极短意外险'
+			END
+		FROM (
+				SELECT p.customerno,max(cnt) cnt,nvl(count(*),0) tnum FROM (
+					SELECT
+						count(1) cnt,
+					policy.customerno
+				FROM
+					policy_information policy
+				where
+					policy.SECURITY in('7天','15天','30天','90天','1月','3月')
+				and
+					policy.riskperiod='短期险'
+				and	
+					policy.riskcode not in('1066008','1066007','1066006','1066004','1066003','1066002','1066001','1065005','1065003','1065001','1025003')
+				GROUP BY
+					policy.customerno 
+			) t LEFT JOIN policy_information p ON t.customerno = p.customerno GROUP BY p.customerno
+		) temp where temp.customerno = si1.scustid 
+
+	);
+	--29	是否有趸交保单	Label29	有趸交保单	NOSPInsurance,POLICY_INFORMATION.PAYINTV='趸缴',PREMIUM_LIST.PAYMENT_PERIOD='一次交清'	
+	UPDATE shanglifeecif.Individual si1 SET si1.Label29 = '有趸交保单' WHERE si1.scustid IN (
+		SELECT p.customerno FROM policy_information p WHERE p.payintv = '趸缴' AND p.contno IN (SELECT l.contno FROM PREMIUM_LIST l WHERE l.PAYMENT_PERIOD LIKE '%一次交清 %')	
+	);	
+	--30	是否给本人投保	Label30	仅本人投保,本人已投保,本人未投保	Iself	
+	UPDATE shanglifeecif.Individual si1 SET si1.Label30 = (
+	
+		SELECT 
+			CASE 
+				WHEN tt.bnum = 0  THEN '本人未投保'
+				WHEN tt.bnum > 0 and tt.bnum <> tt.tnum THEN '为本人投保'
+				WHEN tt.bnum > 0 and tt.bnum = tt.tnum THEN '仅为本人投保'
+			END
+			
+		FROM (
+			SELECT t.customerno,MAX(t.bnum) bnum,count(*) as tnum FROM (
+				SELECT count(*) AS bnum,p.customerno FROM policy_information p WHERE p.relationtoappnt = '本人' GROUP BY p.customerno
+			) t LEFT JOIN policy_information pi ON pi.customerno = t.customerno GROUP BY t.customerno
+		) tt WHERE tt.customerno = si1.scustid
+	
+	);
+	--32	是否给父母投保	Label31	仅父母投保,父母已投保,父母未投保	Iparent	
+	UPDATE shanglifeecif.Individual si1 SET si1.Label31 = (
+	
+		SELECT 
+			CASE 
+				WHEN tt.bnum = 0  THEN '父母未投保'
+				WHEN tt.bnum > 0 and tt.bnum <> tt.tnum THEN '为父母投保'
+				WHEN tt.bnum > 0 and tt.bnum = tt.tnum THEN '仅为父母投保'
+			END
+			
+		FROM (
+			SELECT t.customerno,MAX(t.bnum) bnum,count(*) as tnum FROM (
+				SELECT count(*) AS bnum,p.customerno FROM policy_information p WHERE (p.RELATIONTOAPPNT = '子女' OR p.RELATIONTOAPPNT = '父母') AND p.birthday > p.insuredbirthday 
+				GROUP BY p.customerno
+			) t LEFT JOIN policy_information pi ON pi.customerno = t.customerno GROUP BY t.customerno
+		) tt WHERE tt.customerno = si1.scustid
+	
+	);
+	--34	是否给子女投保	Label32	仅子女投保,子女已投保,子女未·投保	Ichildren	
+	UPDATE shanglifeecif.Individual si1 SET si1.Label32 = (
+	
+		SELECT 
+			CASE 
+				WHEN tt.bnum = 0  THEN '子女未投保'
+				WHEN tt.bnum > 0 and tt.bnum <> tt.tnum THEN '为子女投保'
+				WHEN tt.bnum > 0 and tt.bnum = tt.tnum THEN '仅为子女投保'
+			END
+			
+		FROM (
+			SELECT t.customerno,MAX(t.bnum) bnum,count(*) as tnum FROM (
+			SELECT nvl(count(*),0) AS bnum,p.customerno FROM policy_information p WHERE (p.RELATIONTOAPPNT = '子女' OR p.RELATIONTOAPPNT = '父母') AND p.birthday < p.insuredbirthday GROUP BY p.customerno
+		) t LEFT JOIN policy_information pi ON pi.customerno = t.customerno GROUP BY t.customerno
+		) tt WHERE tt.customerno = si1.scustid
+	);
+	
+		
+	--36	是否给配偶投保	Label33	仅配偶投保,配偶已投保,配偶未投保	Imate	
+	UPDATE shanglifeecif.Individual si1 SET si1.Label33 = (
+	
+		SELECT 
+			CASE 
+				WHEN tt.bnum = 0  THEN '配偶未投保'
+				WHEN tt.bnum > 0 and tt.bnum <> tt.tnum THEN '为配偶投保'
+				WHEN tt.bnum > 0 and tt.bnum = tt.tnum THEN '仅为配偶投保'
+			END
+			
+		FROM (
+			SELECT t.customerno,MAX(t.bnum) bnum,count(*) as tnum FROM (
+				SELECT count(*) AS bnum,p.customerno FROM policy_information p WHERE p.relationtoappnt = '配偶' GROUP BY p.customerno
+			) t LEFT JOIN policy_information pi ON pi.customerno = t.customerno GROUP BY t.customerno
+		) tt WHERE tt.customerno = si1.scustid
+	);	
+	--47	是否仅有1年期短险保单	Label43	仅有1年期短险保单,有1年期短险保单	"policy_information表 SECURITY in('1年','6月','180天') riskperiod=‘短期险’
+	--riskcode not in('1066008','1066007','1066006','1066004','1066003','1066002','1066001','1065005','1065003','1065001','1025003')"	客户为保单投保人,所有保单的保障期限为一年
+	/*UPDATE shanglifeecif.Individual si1 SET si1.Label43 = (
+		SELECT
+			CASE	
+				WHEN temp.cnt >0 THEN
+						'有1年期短险保单' 	
+			END
+		FROM
+			(
+			SELECT
+				count(1) cnt,
+				policy.customerno 
+			FROM
+				policy_information policy
+			where
+				policy.SECURITY in('1年','6月','180天')
+			and
+				policy.riskperiod='短期险'
+			and	
+				policy.riskcode not in('1066008','1066007','1066006','1066004','1066003','1066002','1066001','1065005','1065003','1065001','1025003')
+			
+			GROUP BY
+				policy.customerno 
+			) temp 
+		WHERE
+		temp.customerno = si1.scustid 
+	);*/
+
+	UPDATE shanglifeecif.Individual si1 SET si1.Label43 = (
+			SELECT  
+			CASE 
+				WHEN temp.cnt > 0 AND temp.cnt = temp.tnum THEN '仅有1年期短险保单'
+				WHEN temp.cnt > 0 AND temp.cnt <> temp.tnum THEN '有1年期短险保单'
+			END
+		FROM (
+				SELECT p.customerno,max(cnt) cnt,nvl(count(*),0) tnum FROM (
+					SELECT
+						count(1) cnt,
+					policy.customerno
+				FROM
+					policy_information policy
+				where
+					policy.SECURITY in('1年','6月','180天')
+				and
+					policy.riskperiod='短期险'
+				and	
+					policy.riskcode not in('1066008','1066007','1066006','1066004','1066003','1066002','1066001','1065005','1065003','1065001','1025003')
+				GROUP BY
+					policy.customerno 
+			) t LEFT JOIN policy_information p ON t.customerno = p.customerno GROUP BY p.customerno
+		) temp where temp.customerno = si1.scustid 
+
+	);
+	--48	是否有失效保单	Label44	有失效保单	NOIVPolicy	客户为保单投保人,持有保单中保单状态为失效 (最新文档逻辑)
+		UPDATE shanglifeecif.Individual si1 SET si1.label44 = '有失效保单' WHERE si1.scustid IN (
+		SELECT p.customerno FROM policy_information p WHERE p.contno IN (select contno from lccontstate where statetype = 'Available' and state = '1') 
+	);
+	--49	是否有缴费期满长险保单	Label45	有缴费期满长险保单	POLICY_INFORMATION:paycount= payendyear AND riskperiod='长期险'	客户持有保险期限为一年以上,剩余保费期数为0
+		UPDATE shanglifeecif.Individual si1 SET si1.label45 = '有缴费期满长险保单' WHERE si1.scustid IN (
+		SELECT p.customerno FROM policy_information p WHERE p.contno IN (
+		select contno from lcpol where payintv > 0 and paytodate = payenddate and months_between(cvalidate, enddate) > 12
+		) 
+	);
+	--50	是否有续期缴费的保单	Label46	有续期缴费的保单		客户为投保人,含有待缴费状态的保单
+		UPDATE shanglifeecif.Individual si1 SET si1.label46 = '有续期缴费保单' WHERE si1.scustid IN (
+		SELECT p.customerno FROM policy_information p WHERE p.contno IN (
+			select otherno from ljspay where othernotype = '2'
+		) 
+	);
+	--51	有责任期满的保单	Label47	有责任期满的保单		客户持有保单含有保险期限已满的保单
+		UPDATE shanglifeecif.Individual si1 SET si1.label47 = '有责任期满的保单' WHERE si1.scustid IN (
+		SELECT p.customerno FROM policy_information p WHERE p.contno IN (
+			select contno from lcpol where enddate < SYSDATE
+		) 
+	);
+		
+	--52	第一张保单投保日期	Label48	首次投保日期XXXX-XX-XX	FADate	客户所有保单中投保时间最早的日期
+	--第一步  
+	UPDATE shanglifeecif.Individual si1 SET si1.FADate = (
+	SELECT fadate FROM (
+		SELECT p.customerno,min(p.polapplydate) AS fadate  FROM POLICY_INFORMATION p WHERE p.polapplydate IS NOT null GROUP BY p.customerno
+		) t WHERE t.customerno = si1.scustid
+	);
+
+	UPDATE shanglifeecif.Individual si1 SET si1.label48 = '首次投保日期' ||  to_char(si1.fadate, 'yyyy-MM-dd')  WHERE si1.fadate IS NOT NULL;
+
+	--53	最后一次寿险投保距今时长	Label49	最后一次投保距今XXX天	LAPPDate	当前日期减去客户所有保单中最后一次投保的保单的投保时间
+	UPDATE shanglifeecif.Individual si1 SET si1.LAPPDate = (
+		SELECT fadate FROM (
+			SELECT p.customerno,max(p.polapplydate) AS fadate  FROM POLICY_INFORMATION p WHERE p.polapplydate IS NOT null GROUP BY p.customerno
+			) t WHERE t.customerno = si1.scustid
+		);
+	
+	UPDATE shanglifeecif.Individual si1 SET si1.label49 = '最后一次投保距今' || DATEDIFF(sysdate(), si1.LAPPDate) || '天' WHERE si1.lappdate IS NOT NULL;  
+		
+	--54	最近一次保单所属渠道	Label50	最近保单团险渠道、最近保单个人营销、最近保单银行代理、最近保单中介渠道、最近保单网销渠道	--LPChannel,InsuranceArrangement.AgentChannel	客户最后一次投保归属渠道
+	UPDATE shanglifeecif.Individual si1 SET si1.label50 =  (SELECT '最近保单' || trim(t.salecomname) FROM (
+			SELECT p.customerno,row_number()OVER(PARTITION BY p.customerno ORDER BY p.polapplydate DESC) rd,p.salecomname  FROM POLICY_INFORMATION p 
+			WHERE p.salecomname IS NOT null
+		) t WHERE t.rd = 1 AND t.customerno = si1.scustid);
+	
+	
+	--UPDATE shanglifeecif.Individual si1 SET si1.label50 =  (SELECT t.SALECHNL FROM (
+			--SELECT p.customerno,row_number()OVER(PARTITION BY p.customerno ORDER BY p.polapplydate DESC) rd,p.SALECHNL  FROM POLICY_INFORMATION p WHERE p.salechnl IS NOT null
+		--) t WHERE t.rd = 1 AND t.customerno = si1.scustid);
+
+	--UPDATE shanglifeecif.Individual si1 SET si1.label50 =  '最近保单' || si1.label50 WHERE si1.label50 IS NOT NULL;
+	--55	最近一次保单所属机构	Label51	最近XX机构	LPOrg,InsuranceArrangement.AgentOrg	客户最后一次投保归属机构
+	--UPDATE shanglifeecif.Individual si1 SET si1.label51 =  (SELECT t.AGENTCOM FROM (
+		--	SELECT p.customerno,row_number()OVER(PARTITION BY p.customerno ORDER BY p.polapplydate DESC) rd,p.AGENTCOM  FROM POLICY_INFORMATION p WHERE p.salechnl IS NOT null
+		--) t WHERE t.rd = 1 AND t.customerno = si1.scustid);
+
+	--UPDATE shanglifeecif.Individual si1 SET si1.label51 =  '最近机构' || si1.label51 WHERE si1.label51 IS NOT NULL;
+	--56	最早保单所属渠道	Label52	首单团险渠道、首单个人营销、首单银行代理、首单中介渠道、首单网销渠道	FAChannel	客户第一次投保时保单归属渠道
+	UPDATE shanglifeecif.Individual si1 SET si1.label52 =  (SELECT '首单' || trim(t.salecomname) FROM (
+			SELECT p.customerno,row_number()OVER(PARTITION BY p.customerno ORDER BY p.polapplydate asc) rd,p.salecomname  FROM POLICY_INFORMATION p WHERE p.salecomname IS NOT null
+		) t WHERE t.rd = 1 AND t.customerno = si1.scustid);	
+	
+	
+	--UPDATE shanglifeecif.Individual si1 SET si1.label52 =  (SELECT t.SALECHNL FROM (
+			--SELECT p.customerno,row_number()OVER(PARTITION BY p.customerno ORDER BY p.polapplydate asc) rd,p.SALECHNL  FROM POLICY_INFORMATION p WHERE p.salechnl IS NOT null
+		--) t WHERE t.rd = 1 AND t.customerno = si1.scustid);
+
+	--UPDATE shanglifeecif.Individual si1 SET si1.label52 =  '首单' || si1.label52 WHERE si1.label52 IS NOT NULL;
+	--57	最早保单所属机构	Label53	首单XX机构	FAOrg	客户第一次投保时保单归属机构
+	--UPDATE shanglifeecif.Individual si1 SET si1.label53 =  (SELECT t.AGENTCOM FROM (
+	--	SELECT p.customerno,row_number()OVER(PARTITION BY p.customerno ORDER BY p.polapplydate ASC) rd,p.AGENTCOM  FROM POLICY_INFORMATION p WHERE p.salechnl IS NOT null
+	--) t WHERE t.rd = 1 AND t.customerno = si1.scustid);
+
+	--UPDATE shanglifeecif.Individual si1 SET si1.Label53 =  '最近机构' || si1.Label53 WHERE si1.Label53 IS NOT NULL;
+	--58	最近保单状态	Label54	"未承保承保新增附加险终止续保未对账对账失败"	LPState	客户最后一张保单的保单状态
+	UPDATE shanglifeecif.Individual si1 SET si1.label54 = 
+	(SELECT 
+		(CASE temp.appflag 
+		WHEN '0' THEN '最近保单状态未承保' 
+		WHEN '1' THEN '最近保单状态承保' 
+		WHEN '2' THEN '最近保单状态新增附加险' 
+		WHEN '4' THEN '最近保单状态终止' 
+		WHEN '9' THEN '最近保单状态续保' 
+		WHEN 'B' THEN '最近保单状态未对账' 
+		WHEN 'F' THEN '最近保单状态对账失败' 
+		END) a 
+	FROM (
+		SELECT t.appflag,p.customerno,row_number()OVER(PARTITION BY p.customerno ORDER BY p.polapplydate desc) rd FROM policy_information p,lccont t WHERE p.contno = t.contno
+	) temp WHERE temp.rd = 1  AND si1.scustid = temp.customerno);
+	
+	--60	是否有退保保单	Label56	有退保保单	如何判断?	客户所有的保单中是否存在保单状态为退保的保单
+		UPDATE shanglifeecif.Individual si1 SET si1.label56 = '有退保保单' WHERE si1.scustid IN (
+		SELECT p.customerno FROM policy_information p WHERE p.contno IN (
+			select contno from lpedoritem where  edortype in ('CT', 'XT', 'GT') and edorstate = '0'
+		) 
+	);
+	
+	--61	最近一次理赔类型	Label57	--意外医疗、意外伤残、意外死亡、意外高残、意外大病、意外特种疾病、意外失业失能、意外生命末期重疾、意外豁免、疾病医疗、疾病伤残、疾病死亡、疾病高残、疾病大病、疾病特种疾病、疾病失---业失能、疾病生命末期重疾、疾病豁免	无	客户最后一次投办理理赔业务的业务类型
+	UPDATE shanglifeecif.Individual si1 SET si1.Label57 = (
+	SELECT "最近一次理赔类型" || t.ACCIDENTTYPE FROM (
+		SELECT row_number()OVER(PARTITION BY c.insuredno ORDER BY c.applydate desc) rd,c.insuredno,c.ACCIDENTTYPE FROM INSURANCE_CLAIM c
+		) t WHERE t.rd = 1 AND t.insuredno = si1.scustid
+	);
+	--62	最近一次出险类型	Label58	疾病出险、意外出险	无	客户最后一次出险的类型
+	UPDATE shanglifeecif.Individual si1 SET si1.Label58 = (
+		SELECT "最近一次出险类型" || t.RISKTYPE FROM (
+			SELECT row_number()OVER(PARTITION BY c.insuredno ORDER BY c.applydate desc) rd,c.insuredno,c.RISKTYPE FROM INSURANCE_CLAIM c
+		) t WHERE t.rd = 1 AND t.insuredno = si1.scustid
+	);
+	--63	最近一次理赔状态	Label59	理赔报案中、理赔已受理、理赔已立案、理赔审核中、理赔预付审批中、理赔结案、理赔完成、理赔关闭	InsuranceClaimThread.ClaimCaseStatus	--客户最后一次发生理赔的理赔类型
+	UPDATE shanglifeecif.Individual si1 SET si1.Label59 = (
+		SELECT '最近一次理赔状态' || t.LLCLAIMSTATE FROM (
+			SELECT row_number()OVER(PARTITION BY c.insuredno ORDER BY c.applydate desc) rd,c.insuredno,c.LLCLAIMSTATE FROM INSURANCE_CLAIM c
+		) t WHERE t.rd = 1 AND t.insuredno = si1.scustid
+	);
+	--65	是否有满期给付保单	Label61	有满期给付保单	如何判断?	0
+	--select getdutycode from lmdutygetalive where getdutyname in ('满期保险金','满期生存保险金');
+	UPDATE shanglifeecif.Individual si1 SET si1.label61 = '有满期给付保单' WHERE si1.scustid IN (
+		SELECT p.customerno FROM policy_information p WHERE p.contno IN (
+			SELECT contno FROM lcget WHERE getdutycode IN (select getdutycode from lmdutygetalive where getdutyname in ('满期保险金','满期生存保险金'))
+		) 
+	);
+	--67	是否有生存金给付的保单	Label63	有生存金给付保单	无	0
+	--select getdutycode from lmdutygetalive where getdutyname = '生存保险金';
+	UPDATE shanglifeecif.Individual si1 SET si1.label62 = '有生存金给付的保单' WHERE si1.scustid IN (
+		SELECT p.customerno FROM policy_information p WHERE p.contno IN (
+			SELECT contno FROM lcget WHERE getdutycode IN (select getdutycode from lmdutygetalive where getdutyname = '生存保险金')
+		) and p.appflag = '有效'
+	);
+	--68	是否有红利可领取的保单	Label64	有红利可领取保单	无	0
+	UPDATE shanglifeecif.Individual si1 SET si1.label64 = '红利可领取的保单' WHERE si1.scustid IN 
+	(SELECT p.customerno FROM policy_information p,lmriskapp l WHERE p.riskcode = l.riskcode AND l.bonusflag = 1);
+	
+	--69	一单寿险客户	Label65	一单寿险客户	客户仅购买了一张保单,且保单类型为寿险型保单
+	UPDATE shanglifeecif.Individual si1 SET si1.label65 = '一单寿险客户' WHERE si1.scustid IN (SELECT t.customerno FROM (
+		SELECT count(*) AS pnum,p.customerno FROM POLICY_INFORMATION p 
+	LEFT JOIN lmriskapp b on p.riskcode = b.riskcode
+	WHERE b.kindcode = 'L' and p.appflag = '有效' GROUP BY p.customerno
+	) t WHERE t.pnum = 1);
+	--70	缴费期满客户	Label66	缴费期满客户	POLICY_INFORMATION:paycount= payendyear	客户缴费期数已满
+	UPDATE shanglifeecif.Individual si1 SET si1.label66 = '缴费期满客户' WHERE si1.scustid IN (SELECT t.customerno FROM (
+			SELECT count(*) AS pnum,p.customerno FROM POLICY_INFORMATION p 
+		WHERE p.paycount = p.payendyear GROUP BY p.customerno
+		) t WHERE t.pnum > 0);
+	--71	生日与司庆日同一天客户	Label67	生日与司庆日同天	2月15号 为司庆日	客户生日和公司司庆日为同一天
+	UPDATE shanglifeecif.Individual si1 SET si1.Label67 = '生日与司庆日同天' where si1.birthday like '%-02-15%';	
+	--72	持有有效保单产品类型客户标签	Label68	持有有效保单,未持有有效保单		客户名下是否有投保人为自己的有效保单
+	UPDATE shanglifeecif.Individual si1 SET si1.label68 = '持有有效保单' WHERE si1.scustid IN (SELECT t.customerno FROM (
+			SELECT count(*) AS pnum,p.customerno FROM POLICY_INFORMATION p 
+		WHERE p.appflag = '有效' GROUP BY p.customerno
+		) t WHERE t.pnum > 0);
+	--73	客户等级标签	Label69	钻石、白金、黄金、普通	Individual.CustClass	根据CustClass字段已有的等级值显示
+	--UPDATE shanglifeecif.Individual si1 SET si1.Label69 = si1.CustClass where 1 = 1;
+	UPDATE shanglifeecif.Individual si1 SET si1.Label69 = (
+						CASE si1.CustClass 
+						WHEN 1 THEN '钻石客户'
+						WHEN 2 THEN '白金客户'
+						WHEN 3 THEN '黄金客户'
+						--WHEN 4 THEN '普通级别'
+						--ELSE '无级别' 
+						ELSE ''
+						END
+						) where 1 = 1;	
+	--74	最近接触业务类型	Label70	最近投诉、最近问询(咨询)、最近营销、最近理赔、最近出险、最近保全	Individual.LCType	客户最后一次接触的业务类型
+	--75	最近接触方式	Label71	最近外呼、最近呼入、微信	Individual.LCMethod	客户最后一次接触的方式
+	--77	是否关注官微	Label73	关注官微	无	0
+	--UPDATE shanglifeecif.Individual si1 SET si1.Label73 = '关注官微'
+	--WHERE si1.idcard IN (SELECT a.certificate_no FROM account a) 
+	--OR si1.passport IN (SELECT a.certificate_no FROM account a) 
+	--OR si1.Dlicense IN  (SELECT a.certificate_no FROM account a) 
+	--OR si1.othernumber IN (SELECT a.certificate_no FROM account a);
+
+	--78	是否注册官微	Label74	注册官微	无	0
+	UPDATE shanglifeecif.Individual si1 SET si1.Label74 = '注册官微'
+	WHERE si1.idcard IN (SELECT a.certificate_no FROM account a WHERE a.account_status = 0) 
+		OR si1.passport IN (SELECT a.certificate_no FROM account a WHERE a.account_status = 0) 
+		OR si1.Dlicense IN  (SELECT a.certificate_no FROM account a WHERE a.account_status = 0) 
+		OR si1.othernumber IN (SELECT a.certificate_no FROM account a WHERE a.account_status = 0);
+	--	本人生日提醒	Label77	本人生日临近		客户生日-当前日期<5
+	UPDATE shanglifeecif.Individual si1 SET si1.label77 = '本人生日临近' WHERE DATEDIFF(to_char(SYSDATE,"2021-MM-dd"),to_char(si1.birthday,"2021-MM-dd"))<=5 AND 
+		DATEDIFF(to_char(SYSDATE,"2021-MM-dd"),to_char(si1.birthday,"2021-MM-dd"))>0;
+	--93	失效客户	Label91	失效客户	所有保单都是失效状态	客户名下所有保单均失效的客户
+	UPDATE shanglifeecif.Individual si1 SET si1.Label91 = '失效客户' 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  policy_information p WHERE p.appflag <> '有效' GROUP BY p.customerno 
+	) t LEFT JOIN policy_information pi ON pi.customerno = t.customerno
+	GROUP BY pi.customerno
+	) temp WHERE temp.tnum = temp.pnum);
+	
+	
+	--98	大龄	Label96	大龄 来电客户年龄50岁以上
+	UPDATE shanglifeecif.Individual si1 SET si1.Label96 = '大龄'  where si1.scustid IN (
+
+	SELECT p.customerno FROM policy_information p WHERE p.contno IN (
+		SELECT contnos from cc_record_main
+	)
+) AND TRUNC(months_between(sysdate, si1.birthday)/12)>=50 AND TRUNC(months_between(sysdate, si1.birthday)/12)<60;
+	--99	高龄	Label97	高龄		来电客户年龄60岁以上
+	UPDATE shanglifeecif.Individual si1 SET si1.Label97 = '高龄' where si1.scustid IN (
+
+	SELECT p.customerno FROM policy_information p WHERE p.contno IN (
+		SELECT contnos from cc_record_main
+	)
+) AND TRUNC(months_between(sysdate, si1.birthday)/12)>=60;
+	--100	敏感职业	Label98	敏感职业		投保人职业为记者、律师、公务员、媒体、金融行业
+	UPDATE shanglifeecif.Individual si1 SET si1.Label98 = (CASE WHEN si1.occupation like '%记者%' OR si1.occupation like '%律师%' OR si1.occupation like '%公务员%' OR  si1.occupation like '%媒体%' OR  si1.occupation like '%金融行业%' THEN '敏感职业' END ) WHERE 1 = 1;
+    --102	公司销售人员	Label100	公司销售人员	姓名与保单经办人一致	客户为公司销售人员
+	--103	长通话	Label101	长通话	"contnos为客户的保单号 select (select lo.call_length from ucc_rms_recorderlog lo where lo.call_id=m.call_id) as lenth from cc_record_main m
+	--where m.contnos='2019082000110188'"	平均通话时长超过10分钟
+	UPDATE shanglifeecif.Individual si1 SET si1.Label101 = (
+	SELECT '长通话' FROM (
+	SELECT 
+		t.contnos,
+		row_number()OVER(PARTITION BY p.customerno) rn,
+		p.customerno
+	FROM (
+		SELECT (sum(lo.call_length)/count(*)) AS avgcalltime,m.contnos from cc_record_main m 
+		LEFT JOIN  ucc_rms_recorderlog lo ON m.call_id = lo.call_id
+		WHERE m.contnos IS NOT NULL AND lo.call_length IS NOT NULL
+		GROUP BY m.contnos
+	) t  LEFT JOIN policy_information p ON t.contnos = p.contno
+
+	WHERE t.avgcalltime>600
+	
+	) temp WHERE temp.customerno IS NOT NULL AND temp.rn = 1 AND si1.scustid = temp.customerno
+);
+
+	--105	要求较多	Label103	要求较多	"policyno为客户的保单号 flowid like'ZX%'转办标志 Z select (select r.idname from cc_swf_sort r where r.id=f.complaintProject) as --swfName --from cc_swfflowmain f where f.policyno='2020021500000456' and flowid like'ZX%'"	每次来电均下转办单的
+	UPDATE shanglifeecif.Individual si1 SET si1.Label103 = (SELECT "要求较多" FROM (
+
+		SELECT p.customerno,row_number()OVER(PARTITION BY p.customerno) rn
+		FROM (
+		SELECT max(t.mnum) AS mnum,f.policyno,count(*) AS fnum FROM (
+		SELECT count(*) AS mnum,m.contnos FROM cc_record_main m WHERE m.contnos IS NOT null
+		GROUP BY m.contnos
+		) t LEFT JOIN cc_swfflowmain f ON t.contnos = f.policyno
+		WHERE f.flowid LIKE 'ZX%' AND f.policyno IS NOT NULL
+		GROUP BY f.policyno
+		) temp LEFT JOIN policy_information p ON temp.policyno = p.contno
+		WHERE temp.fnum = temp.mnum
+) tt WHERE tt.rn = 1 AND tt.customerno IS NOT NULL AND si1.scustid = tt.customerno);
+	--106	易投诉升级	Label104	易投诉升级	"flowid like'ZX%'转办标志 Z select (select r.idname from cc_swf_sort r where r.id=f.complaintProject and r.idname='投诉') as swfName --from cc_swfflowmain f where f.policyno='2020021500000456' and flowid like'ZX%'"	咨询转办单项目为投诉
+ UPDATE shanglifeecif.Individual si1 SET si1.Label104 = (SELECT "易投诉升级" FROM (
+
+	SELECT p.customerno,row_number()OVER(PARTITION BY p.customerno) rn
+	FROM (
+	SELECT max(t.mnum) AS mnum,f.policyno,count(*) AS fnum FROM (
+	SELECT count(*) AS mnum,m.contnos FROM cc_record_main m WHERE m.contnos IS NOT null
+	GROUP BY m.contnos
+	) t LEFT JOIN cc_swfflowmain f ON t.contnos = f.policyno
+	LEFT JOIN cc_swf_sort r ON r.id=f.complaintProject
+	WHERE f.flowid LIKE 'ZX%' AND r.idname='投诉' and f.policyno IS NOT NULL
+	GROUP BY f.policyno
+	) temp LEFT JOIN policy_information p ON temp.policyno = p.contno
+	WHERE temp.fnum = temp.mnum
+) tt WHERE tt.rn = 1 AND tt.customerno IS NOT NULL AND si1.scustid = tt.customerno);
+	--107	高频投诉	Label105	高频投诉	"select count(1) from cc_action_data_complaints c where c.productno='2018110400035608'"	--半年之内来过两次以上投诉的,投诉受理日期间隔<180天,且投诉次数>2
+	UPDATE shanglifeecif.Individual si1 SET si1.Label105 = '高频投诉' WHERE si1.scustid in
+
+	(SELECT p.customerno FROM policy_information p WHERE p.contno IN 
+
+	(SELECT temp.productno FROM (
+		
+		SELECT t.productno,t.sinserttime,
+		(SELECT tt.inserttime FROM (SELECT cad.inserttime,row_number()OVER(PARTITION BY cad.productno ORDER BY cad.inserttime) rownum,cad.productno FROM cc_action_complaints ca,cc_action_data_complaints cad 
+			WHERE  cad.complaintsid=ca.complaintsid AND cad.productno IS NOT NULL) tt WHERE tt.productno = t.productno AND tt.rownum = t.rn+1) AS esinserttime
+			 FROM 
+			(
+				select cd.productno,row_number()OVER(PARTITION BY cd.productno ORDER BY cd.inserttime) rn,cd.inserttime AS sinserttime
+				from cc_action_complaints c,cc_action_data_complaints cd WHERE  cd.complaintsid=c.complaintsid AND cd.productno IS NOT NULL
+			) t
+	) temp WHERE temp.esinserttime IS NOT NULL AND DATEDIFF(temp.esinserttime,temp.sinserttime) < 180));
+    
+    
+    --SELECT c.productno,c.inserttime FROM cc_action_data_complaints c  WHERE c.productno IS NOT NULL GROUP BY c.productno
+	--108	重大投诉影响	Label106	重大投诉影响	投诉来源	投诉来源是保监局、保监会、媒体转办的
+	UPDATE shanglifeecif.Individual si1 SET si1.Label106 = (
+
+	SELECT 
+		CASE 
+			WHEN tt.complaintsSource LIKE '%保监会%' THEN '重大投诉' 
+			WHEN tt.complaintsSource LIKE '%保监局%' THEN '重大投诉' 
+			WHEN tt.complaintsSource LIKE '%媒体转办%' THEN '重大投诉' END FROM (
+	
+		SELECT pi.customerno,max(complaintsSource) AS complaintsSource FROM (
+	
+		select group_concat((case c.complaintsSource 
+		         when '911' then '来电'
+		         when '912' then '来访'
+		         when '913' then '来函'
+		         when '914' then '保监会转办'
+		         when '919' then '保监局转办'
+		         when '915' then '媒体转办'
+		         when '916' then '同业公会'
+		         when '917' then '其他转办'
+		         when '918' then '呼出'
+		         else c.complaintsSource END),',') as complaintsSource,p.contno from cc_action_complaints c,cc_action_data_complaints cd,policy_information p
+		         
+		where cd.complaintsid=c.complaintsid AND p.contno = cd.productno GROUP BY p.contno
+
+		) t LEFT JOIN policy_information pi ON t.contno = pi.contno GROUP BY pi.customerno
+	
+	) tt WHERE tt.customerno = si1.scustid
+
+);
+	
+	--109	高金额	Label107	高金额		银保渠道期缴高于30000,有效保单;其他渠道件均保费2倍以上
+	UPDATE shanglifeecif.Individual si1 SET si1.Label107 = '高金额' WHERE si1.scustid IN (SELECT p.customerno FROM policy_information p WHERE (p.salecom = '03' AND p.prem>30000 AND 
+	p.appflag = '有效') OR (p.salecom <> '03' AND p.prem>60000 AND p.appflag = '有效'));
+	--111	理赔报案追踪	Label109	理赔报案追踪		理赔状态为报案状态,且理赔报案日-当前日期<30天
+	UPDATE shanglifeecif.Individual si1 SET si1.Label109 = '理赔报案追踪' WHERE si1.scustid IN (SELECT p.customerno FROM policy_information p WHERE p.contno IN (SELECT c.CONTNO FROM insurance_claim c WHERE c.LLCLAIMSTATE = '报案' AND DATEDIFF(sysdate(), c.RPTDATE) <30) );
+	--112	理赔处理中	Label110	理赔处理中		理赔状态为受理或立案
+	UPDATE shanglifeecif.Individual si1 SET si1.label110 = '理赔处理中' WHERE si1.scustid IN (
+		SELECT p.customerno FROM policy_information p WHERE p.contno IN (SELECT c.contno FROM INSURANCE_CLAIM c WHERE c.llclaimstate = '受理' OR c.llclaimstate = '立案')
+	);
+	--115	生存金未领	Label113	生存金未领	判断逻辑不详	生存金领取方式为自动转账、存在生存金且未领取
+	UPDATE shanglifeecif.Individual si1 SET si1.label113 = '生存金未领' WHERE si1.scustid IN (
+	SELECT p.customerno FROM policy_information p WHERE p.contno IN (
+		SELECT contno FROM Lcinsureacc WHERE acctype = '005' and   insuaccbala>0
+	) 
+);
+	--117	红利垫缴还款	Label115	红利垫缴还款	判断逻辑不详	存在红利,且红利已经垫交保单还款
+		UPDATE shanglifeecif.Individual si1 SET si1.label117 = '红利垫缴还款' WHERE si1.scustid IN (
+		SELECT p.customerno FROM policy_information p WHERE p.contno IN (
+			SELECT contno FROM loloandetail WHERE finfeetype = 'HL'
+		) 
+	);
+	--122	重点银行	Label120	重点银行	判断逻辑不详	保单的销售渠道网点为招商银行
+	UPDATE shanglifeecif.Individual si1 SET si1.Label120 = '重点银行' WHERE 
+	si1.scustid IN (SELECT p.customerno  FROM policy_information p WHERE p.AGENTCOM LIKE '%招商银行%');
+	EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());	
+END
+
+
+

+ 130 - 59
sql-achievement/存储过程/人寿测试环境使用sql整理/客户标签koucx20210126.sql

@@ -187,6 +187,18 @@ BEGIN
     UPDATE shanglifeecif.Individual si1 SET si1.Label68 = (SELECT CASE WHEN si2.NOVPolicy>0 THEN '持有有效保单' END FROM shanglifeecif.Individual si2 WHERE si1.indid = si2.indid);
     --Label69:Individual.CustClass,逻辑见上(一.7)
     UPDATE shanglifeecif.Individual si1 SET si1.Label69 = (SELECT si2.CustClass FROM shanglifeecif.Individual si2 WHERE si1.IndID = si2.IndID);
+	
+	UPDATE shanglifeecif.Individual si1 SET si1.Label69 = (
+		SELECT 
+		CASE si2.CustClass 
+		WHEN 0 THEN '无'
+		WHEN 1 THEN '钻石'
+		WHEN 2 THEN '白金'
+		WHEN 3 THEN '黄金'
+		WHEN 4 THEN '普通'
+		END
+		FROM shanglifeecif.Individual si2 WHERE si1.IndID = si2.IndID);
+	
 	--Label70:Individual.IndID = PartyTimeLine.PartyID,取PartyTimeLine.SDate最近的记录对应的Scenario更新此标签
 	UPDATE shanglifeecif.Individual si1 SET si1.Label70 = (SELECT temp.Scenario FROM (SELECT sp.Scenario,sp.PartyID,row_number()OVER(PARTITION BY sp.PartyID ORDER BY sp.SDate DESC) rd FROM shanglifeecif.PartyTimeLine sp) temp WHERE si1.indid = temp.PartyID AND temp.rd = 1);
     --Label71:Individual.IndID = PartyTimeLine.PartyID,取PartyTimeLine.SDate最近的记录对应的Channel更新此标签
@@ -211,7 +223,9 @@ BEGIN
      --Label97:根据Individual.Birthday算出当前年龄,如果60<=年龄,则更新Individual.Label97为'高龄',否则为NULL
      UPDATE shanglifeecif.Individual si1 SET si1.Label97 = (SELECT CASE WHEN TRUNC(months_between(sysdate, si2.birthday)/12)>=60  THEN '高龄' END FROM shanglifeecif.Individual si2 WHERE si1.indid = si2.indid);
      --Label98:根据Individual.Occupation,若为记者、律师、公务员、媒体、金融行业,则更新Individual.Label98为'敏感职业',否则为NULL
-     UPDATE shanglifeecif.Individual si1 SET si1.Label98 = (SELECT CASE WHEN si2.occupation = '记者' OR si2.occupation = '律师' OR si2.occupation = '公务员' OR  si2.occupation = '媒体' OR  si2.occupation = '金融行业' THEN '敏感职业' END FROM shanglifeecif.Individual si2 WHERE si1.indid = si2.indid);
+	 UPDATE shanglifeecif.Individual si1 SET si1.Label98 = (SELECT CASE WHEN si2.occupation = '记者' OR si2.occupation = '律师' OR si2.occupation = '公务员' OR  si2.occupation = '媒体' OR  si2.occupation = '金融行业' THEN '敏感职业' END FROM shanglifeecif.Individual si2 WHERE si1.indid = si2.indid);
+	 
+     UPDATE shanglifeecif.Individual si1 SET si1.Label98 = (SELECT CASE WHEN si2.occupation like '%记者%' OR si2.occupation like '%律师%' OR si2.occupation like '%公务员%' OR  si2.occupation like '%媒体%' OR  si2.occupation like '%金融行业%' THEN '敏感职业' END FROM shanglifeecif.Individual si2 WHERE si1.indid = si2.indid);
     
      
      --Label109:以个体ID(Individual.IndID)查询InsuranceClaimThread,若ClaimCaseStatus='报案'且 InsuranceClaimThread.CNDate距当前日期超过7天,则更新Individual.Label109为'理赔报案追踪'
@@ -239,76 +253,133 @@ BEGIN
     
     
     --长通话逻辑contnos为客户的保单号select (select lo.call_length from ucc_rms_recorderlog lo where lo.call_id=m.call_id) as lenth from cc_record_main mwhere m.contnos='2019082000110188'
-    UPDATE shanglifeecif.Individual si1 SET si1.label10 =  
-    (SELECT CASE WHEN tt.avgCallLenth>600 THEN '长通话' END FROM (
-    SELECT temp.contnos,(temp.lenth/temp.callNum) as avgCallLenth,qi.applicantid FROM(
-    	select (select lo.call_length from shanghailifeecif.ucc_rms_recorderlog lo where lo.call_id=m.call_id) as lenth,count(1) AS callNum,m.contnos  from shanghailifeecif.cc_record_main m
+	UPDATE shanglifeecif.Individual si1 SET si1.Label101 = (
+	SELECT '长通话' FROM (
+	SELECT 
+		t.contnos,
+		row_number()OVER(PARTITION BY p.customerno) rn,
+		p.customerno
+	FROM (
+		SELECT (sum(lo.call_length)/count(*)) AS avgcalltime,m.contnos from cc_record_main m 
+		LEFT JOIN  ucc_rms_recorderlog lo ON m.call_id = lo.call_id
+		WHERE m.contnos IS NOT NULL AND lo.call_length IS NOT NULL
 		GROUP BY m.contnos
-    ) temp LEFT JOIN qxp.insurancearrangement qi ON temp.contnos = qi.policyno) tt WHERE tt.applicantid = si1.indid)
-    
-    --要求较多,每次来电均下转办单
-     UPDATE shanglifeecif.Individual si1 SET si1.label103 = 
-   -- (SELECT '要求多' FROM shanghailifeecif.cc_swfflowmain swf 
-  --  LEFT JOIN qxp.insurancearrangement qi ON qi.policyno = swf.policyno
-  --  WHERE swf.flowid LIKE '%ZX%' AND si1.indid = qi.applicantid)
-    (
-    SELECT CASE WHEN t.callNum==t.swf_num THEN '要求较多' END  FROM (
-    	SELECT count(*) AS callNum,srm.contnos,(SELECT count(*) FROM shanghailifeecif.cc_swfflowmain swf 
-	    WHERE swf.flowid LIKE '%ZX%' AND srm.contnos = swf.policyno ) AS swf_num 
-	    FROM shanghailifeecif.cc_record_main srm GROUP BY srm.contnos
-    ) t  LEFT JOIN qxp.insurancearrangement qi ON qi.policyno = swf.policyno 
-    WHERE si1.indid = qi.applicantid
-    )
-    
-    
-    
-     UPDATE shanglifeecif.Individual si1 SET si1.label104 = 
-    --(SELECT '易投诉升级' FROM shanghailifeecif.cc_swfflowmain swf
-    --LEFT JOIN shanghailifeecif.cc_swf_sort scc ON scc.complaintProject = swf.id
-    --LEFT JOIN qxp.insurancearrangement qi ON qi.policyno = swf.policyno
-   -- WHERE swf.flowid LIKE '%ZX%' AND scc.idname='投诉' AND si1.indid = qi.applicantid)
+	) t  LEFT JOIN policy_information p ON t.contnos = p.contno
+
+	WHERE t.avgcalltime>600
+	
+	) temp WHERE temp.customerno IS NOT NULL AND temp.rn = 1 AND si1.scustid = temp.customerno
+);
+	
     
-    (
-    SELECT CASE WHEN t.callNum==t.swf_num THEN '易投诉升级' END  FROM (
-    	SELECT count(*) AS callNum,srm.contnos,
-    	(SELECT count(*) FROM shanghailifeecif.cc_swfflowmain swf
-    	LEFT JOIN shanghailifeecif.cc_swf_sort scs ON swf.complaintproject = scs.id
-	    WHERE swf.flowid LIKE '%ZX%' AND srm.contnos = swf.policyno ) AS swf_num 
-	    FROM shanghailifeecif.cc_record_main srm GROUP BY srm.contnos
-    ) t  LEFT JOIN qxp.insurancearrangement qi ON qi.policyno = swf.policyno 
-    WHERE si1.indid = qi.applicantid
-    )
     
+    --要求较多,每次来电均下转办单
+     UPDATE shanglifeecif.Individual si1 SET si1.Label103 = (SELECT "要求较多" FROM (
+
+		SELECT p.customerno,row_number()OVER(PARTITION BY p.customerno) rn
+		FROM (
+		SELECT max(t.mnum) AS mnum,f.policyno,count(*) AS fnum FROM (
+		SELECT count(*) AS mnum,m.contnos FROM cc_record_main m WHERE m.contnos IS NOT null
+		GROUP BY m.contnos
+		) t LEFT JOIN cc_swfflowmain f ON t.contnos = f.policyno
+		WHERE f.flowid LIKE 'ZX%' AND f.policyno IS NOT NULL
+		GROUP BY f.policyno
+		) temp LEFT JOIN policy_information p ON temp.policyno = p.contno
+		WHERE temp.fnum = temp.mnum
+) tt WHERE tt.rn = 1 AND tt.customerno IS NOT NULL AND si1.scustid = tt.customerno)
+
     
-    UPDATE shanglifeecif.Individual si1 SET si1.label105 = 
-    (SELECT '高频投诉' FROM (
-   	 select count(1) as comnum,c.productno,DATEDIFF(max(c.inserttime),min(c.inserttime)) dayNum  from shanghailifeecif.cc_action_data_complaints c WHERE c.productno IS NOT NULL GROUP BY c.productno
-    ) temp 
-     LEFT JOIN qxp.insurancearrangement qi ON qi.policyno = temp.productno
-    WHERE temp.comnum >= 2 AND temp.dayNum <180 AND si1.indid = qi.applicantid
-    )
+	--易投诉升级
+    UPDATE shanglifeecif.Individual si1 SET si1.Label104 = (SELECT "易投诉升级" FROM (
+
+	SELECT p.customerno,row_number()OVER(PARTITION BY p.customerno) rn
+	FROM (
+	SELECT max(t.mnum) AS mnum,f.policyno,count(*) AS fnum FROM (
+	SELECT count(*) AS mnum,m.contnos FROM cc_record_main m WHERE m.contnos IS NOT null
+	GROUP BY m.contnos
+	) t LEFT JOIN cc_swfflowmain f ON t.contnos = f.policyno
+	LEFT JOIN cc_swf_sort r ON r.id=f.complaintProject
+	WHERE f.flowid LIKE 'ZX%' AND r.idname='投诉' and f.policyno IS NOT NULL
+	GROUP BY f.policyno
+	) temp LEFT JOIN policy_information p ON temp.policyno = p.contno
+	WHERE temp.fnum = temp.mnum
+) tt WHERE tt.rn = 1 AND tt.customerno IS NOT NULL AND si1.scustid = tt.customerno)
+    
+	
+--高频投诉	
+	
+UPDATE shanglifeecif.Individual si1 SET si1.Label105 = '高频投诉' WHERE si1.scustid in
+
+	(SELECT p.customerno FROM policy_information p WHERE p.contno IN 
+
+	(SELECT temp.productno FROM (
+		
+		SELECT t.productno,t.sinserttime,
+		(SELECT tt.inserttime FROM (SELECT cad.inserttime,row_number()OVER(PARTITION BY cad.productno ORDER BY cad.inserttime) rownum,cad.productno FROM cc_action_complaints ca,cc_action_data_complaints cad 
+			WHERE  cad.complaintsid=ca.complaintsid AND cad.productno IS NOT NULL) tt WHERE tt.productno = t.productno AND tt.rownum = t.rn+1) AS esinserttime
+			 FROM 
+			(
+				select cd.productno,row_number()OVER(PARTITION BY cd.productno ORDER BY cd.inserttime) rn,cd.inserttime AS sinserttime
+				from cc_action_complaints c,cc_action_data_complaints cd WHERE  cd.complaintsid=c.complaintsid AND cd.productno IS NOT NULL
+			) t
+	) temp WHERE temp.esinserttime IS NOT NULL AND DATEDIFF(temp.esinserttime,temp.sinserttime) < 180))
     
     
     SELECT c.productno,c.inserttime FROM shanghailifeecif.cc_action_data_complaints c  WHERE c.productno IS NOT NULL GROUP BY c.productno
     
-   
+   --重大投诉
     
-    UPDATE shanglifeecif.Individual si1 SET si1.label106 = 
-    /*(SELECT CASE temp.complaintsSource  when '914' then '重大投诉'
-         when '919' then '重大投诉'
-         when '915' then '重大投诉'  END,qi.applicantid FROM (
-    select c.complaintsSource,cd.productno from shanghailifeecif.cc_action_complaints c,shanghailifeecif.cc_action_data_complaints cd
-where cd.complaintsid=c.complaintsid
-    ) temp LEFT JOIN qxp.insurancearrangement qi ON  temp.productno = qi.policyno WHERE qi.applicantid = si1.indid)
-    */
-    (SELECT CASE  WHEN tt.complaintsSource LIKE '%914%' THEN '重大投诉' WHEN tt.complaintsSource LIKE '%915%' THEN '重大投诉' WHEN tt.complaintsSource LIKE '%919%' THEN '重大投诉' END FROM (
-    	select group_concat(c.complaintsSource,',') AS complaintsSource,qi.applicantid from shanghailifeecif.cc_action_complaints c,shanghailifeecif.cc_action_data_complaints cd,qxp.insurancearrangement qi
-		where cd.complaintsid=c.complaintsid AND qi.policyno = cd.productno 
-		GROUP BY qi.applicantid
-    ) tt WHERE tt.applicantid = si1.indid)
+    UPDATE shanglifeecif.Individual si1 SET si1.Label106 = (
+
+	SELECT 
+		CASE 
+			WHEN tt.complaintsSource LIKE '%保监会%' THEN '重大投诉' 
+			WHEN tt.complaintsSource LIKE '%保监局%' THEN '重大投诉' 
+			WHEN tt.complaintsSource LIKE '%媒体转办%' THEN '重大投诉' END FROM (
+	
+		SELECT pi.customerno,max(complaintsSource) AS complaintsSource FROM (
+	
+		select group_concat((case c.complaintsSource 
+		         when '911' then '来电'
+		         when '912' then '来访'
+		         when '913' then '来函'
+		         when '914' then '保监会转办'
+		         when '919' then '保监局转办'
+		         when '915' then '媒体转办'
+		         when '916' then '同业公会'
+		         when '917' then '其他转办'
+		         when '918' then '呼出'
+		         else c.complaintsSource END),',') as complaintsSource,p.contno from cc_action_complaints c,cc_action_data_complaints cd,policy_information p
+		         
+		where cd.complaintsid=c.complaintsid AND p.contno = cd.productno GROUP BY p.contno
+
+		) t LEFT JOIN policy_information pi ON t.contno = pi.contno GROUP BY pi.customerno
+	
+	) tt WHERE tt.customerno = si1.scustid
+
+);
      
+	 
+	 --高保额
+UPDATE shanglifeecif.Individual si1 SET si1.Label107 = '高保额' WHERE si1.scustid IN (SELECT p.customerno FROM policy_information p WHERE (p.salecom = '03' AND p.prem>30000 AND p.appflag = '有效') OR (p.salecom <> '03' AND p.prem>60000 AND p.appflag = '有效'))
 
     
+	
+	
+	--理赔报案追踪
+UPDATE shanglifeecif.Individual si1 SET si1.Label109 = '理赔报案追踪' WHERE si1.scustid IN (SELECT p.customerno FROM policy_information p WHERE p.contno IN (SELECT c.CONTNO FROM insurance_claim c WHERE c.LLCLAIMSTATE = '报案' AND DATEDIFF(sysdate(), c.RPTDATE) <30) )
+--理赔处理中
+UPDATE shanglifeecif.Individual si1 SET si1.Label110 = '理赔处理中' WHERE 
+si1.scustid IN (SELECT p.customerno FROM policy_information p WHERE p.contno IN 
+(SELECT c.CONTNO FROM insurance_claim c WHERE c.LLCLAIMSTATE = '受理' or c.LLCLAIMSTATE = '立案') )
+
+--重点银行
+UPDATE shanglifeecif.Individual si1 SET si1.Label120 = '重点银行' WHERE 
+si1.scustid IN (SELECT p.customerno  FROM policy_information p WHERE p.salechnl LIKE '%招商%')
+
+
+
+	
     --lable_27 志广说只用判断有极短意外险不用判断仅有
 UPDATE shanglifeecif.Individual si1 SET si1.Label26 = (
 		SELECT

+ 49 - 0
sql-achievement/存储过程/人寿测试环境使用sql整理/客户标签label1-20.sql

@@ -0,0 +1,49 @@
+CREATE OR REPLACE PROCEDURE shanglifeecif.updateIndividualLable_1_20() IS
+DECLARE
+BEGIN
+	--1	学历	label1	按照客户最新记录中的学历取值	幼儿园、小学、中专、职高、技校、初中、高中、大专、本科、硕士及以上、其他	
+	UPDATE shanglifeecif.Individual si1 SET si1.label1 = si1.Education where 1 = 1;
+	--2	职业	label2	按照客户最新记录中的职业名称取值	食用调料制作工、味精制作工、糕点、面包烘焙工、米面主食制作工、油脂制品工等	
+	UPDATE shanglifeecif.Individual si1 SET si1.label2 = si1.Occupation where 1 = 1;
+	--3	出生日期区间	label3	根据出生日期,判断客户年代归属	60后、70后、80后、90后、00后、10后等	
+	UPDATE shanglifeecif.Individual si1 SET si1.label3 = substr(si1.birthday,3,1) || '0后' where 1 = 1;
+	--4	年龄区间	label4	"case age when 0<=age and age<13 then '儿童' when  13<=age and age<19 then '少年' when 19<=age and age<41 then '青年' when 41<=age and age<66 then '中年' --else '老年'"	儿童、少年、青年、中年、老年	
+	UPDATE shanglifeecif.Individual si1 SET si1.label4 = (SELECT CASE WHEN temp.age>=0 AND temp.age<13 THEN '儿童' WHEN temp.age>=13 AND temp.age <19 THEN '少年' WHEN temp.age >=19 AND temp.age <41 THEN '青年' WHEN temp.age >=41 AND temp.age <66 THEN '中年' ELSE '老年' END FROM (SELECT TRUNC(months_between(sysdate, si2.birthday)/12) age,si2.indid FROM shanglifeecif.Individual si2) temp WHERE temp.indid = si1.indid);
+	--5	联系地址归属省份	label5	按照客户最近一次办理业务给出的最新联系地址取所在省名称或地级市的名称	省、直辖市:江苏、北京、上海等	
+	--6	联系地址归属地区	label6	按照客户最近一次办理业务给出的最新联系地址取所在市名称或者地级市所在区的名称	市:苏州市、南京市等	
+	--7	婚姻状况	label9	"根据婚姻状态字段判断 case maritalStat when maritalStat=1 then '未婚' when  maritalStat=2 then '已婚' when maritalStat=3 then '丧偶' when maritalStat=4 --then '离异' else null"	1未婚、2已婚、3丧偶、4离异	
+	UPDATE shanglifeecif.Individual si1 SET si1.label9 = (
+				case si1.maritalStat
+				when 1 then '未婚'
+				when 2 then '已婚'
+				when 3 then '丧偶'
+				when 4 then '离异'
+				else NULL END 
+	) WHERE 1 = 1;
+	--8	子女数量区间	label10	"根据子女登录(登记录入)数量判断 case COChild when COChild=0  then '无子女' when COChild=1  then '1孩' when COChild>0  then '2孩及以上' 
+	--else null"	无子女、1孩、2孩及以上	
+	UPDATE shanglifeecif.Individual si1 SET si1.label10 = (
+				case 
+				when si1.COChild=0  then '无子女' 
+				when si1.COChild=1  then '1孩' 
+				when si1.COChild>0  then '2孩及以上' 
+				else null END 
+	) WHERE 1 = 1;
+	--9	最近5年是否曾或正在接受治疗	label11	按照该字段标识最后一次更新的结果判断,如果标识为true则显示“最近五年曾或正在接受治疗”,否则不做显示	近5年有治疗,近5年无治疗	
+    --10	是否饮酒	label12	按照该字段标识判断,只要记录中有一次标识为true,则显示“饮酒”,否则不做显示	饮酒	
+	--11	是否吸烟	label13	按照该字段标识判断,只要记录中有一次标识为true,则显示“吸烟”,否则不做显示	吸烟	
+	--12	是否有先天性疾病	label14	按照该字段标识最后一次更新的结果判断,如果标识为true则显示“有先天性疾病”,否则不做显示	有先天性疾病	
+	--13	是否患过重大疾病	label15	按照该字段标识最后一次更新的结果判断,如果标识为true则显示“患过重大疾病”,否则不做显示	患过重大疾病	
+	--14	家族是否有遗传病史	label16	按照该字段标识最后一次更新的结果判断,如果标识为true则显示“有遗传病”,否则不做显示	家族有遗传病史	
+	--15	是否正在怀孕	label17	按照该字段标识最后一次更新的结果判断,如果标识为true则显示“怀孕”,否则不做显示	正在怀孕	
+	--16	是否有早产、过期产、难产情况	label18	按照该字段标识判断,只要记录中有一次标识为true,则显示“有早产、过期产、难产情况”,否则不做显示	有早产、过期产、难产情况	
+	--17	是否进行危险性运动	label20	按照该字段标识判断,只要记录中有一次标识为true,则显示“进行危险性运动”,否则不做显示	进行危险性运动	
+	
+	EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());	
+END
+
+

+ 134 - 0
sql-achievement/存储过程/人寿测试环境使用sql整理/客户标签label101-120.sql

@@ -0,0 +1,134 @@
+CREATE OR REPLACE PROCEDURE shanglifeecif.updateIndividualLable_101_120() IS
+DECLARE
+BEGIN
+	--103	长通话	Label101	长通话	"contnos为客户的保单号 select (select lo.call_length from ucc_rms_recorderlog lo where lo.call_id=m.call_id) as lenth from cc_record_main m
+	--where m.contnos='2019082000110188'"	平均通话时长超过10分钟
+	UPDATE shanglifeecif.Individual si1 SET si1.Label101 = (
+	SELECT '长通话' FROM (
+	SELECT 
+		t.contnos,
+		row_number()OVER(PARTITION BY p.customerno) rn,
+		p.customerno
+	FROM (
+		SELECT (sum(lo.call_length)/count(*)) AS avgcalltime,m.contnos from cc_record_main m 
+		LEFT JOIN  ucc_rms_recorderlog lo ON m.call_id = lo.call_id
+		WHERE m.contnos IS NOT NULL AND lo.call_length IS NOT NULL
+		GROUP BY m.contnos
+	) t  LEFT JOIN policy_information p ON t.contnos = p.contno
+
+	WHERE t.avgcalltime>600
+	
+	) temp WHERE temp.customerno IS NOT NULL AND temp.rn = 1 AND si1.scustid = temp.customerno
+);
+
+	--105	要求较多	Label103	要求较多	"policyno为客户的保单号 flowid like'ZX%'转办标志 Z select (select r.idname from cc_swf_sort r where r.id=f.complaintProject) as --swfName --from cc_swfflowmain f where f.policyno='2020021500000456' and flowid like'ZX%'"	每次来电均下转办单的
+	UPDATE shanglifeecif.Individual si1 SET si1.Label103 = (SELECT "要求较多" FROM (
+
+		SELECT p.customerno,row_number()OVER(PARTITION BY p.customerno) rn
+		FROM (
+		SELECT max(t.mnum) AS mnum,f.policyno,count(*) AS fnum FROM (
+		SELECT count(*) AS mnum,m.contnos FROM cc_record_main m WHERE m.contnos IS NOT null
+		GROUP BY m.contnos
+		) t LEFT JOIN cc_swfflowmain f ON t.contnos = f.policyno
+		WHERE f.flowid LIKE 'ZX%' AND f.policyno IS NOT NULL
+		GROUP BY f.policyno
+		) temp LEFT JOIN policy_information p ON temp.policyno = p.contno
+		WHERE temp.fnum = temp.mnum
+) tt WHERE tt.rn = 1 AND tt.customerno IS NOT NULL AND si1.scustid = tt.customerno);
+	--106	易投诉升级	Label104	易投诉升级	"flowid like'ZX%'转办标志 Z select (select r.idname from cc_swf_sort r where r.id=f.complaintProject and r.idname='投诉') as swfName --from cc_swfflowmain f where f.policyno='2020021500000456' and flowid like'ZX%'"	咨询转办单项目为投诉
+ UPDATE shanglifeecif.Individual si1 SET si1.Label104 = (SELECT "易投诉升级" FROM (
+
+	SELECT p.customerno,row_number()OVER(PARTITION BY p.customerno) rn
+	FROM (
+	SELECT max(t.mnum) AS mnum,f.policyno,count(*) AS fnum FROM (
+	SELECT count(*) AS mnum,m.contnos FROM cc_record_main m WHERE m.contnos IS NOT null
+	GROUP BY m.contnos
+	) t LEFT JOIN cc_swfflowmain f ON t.contnos = f.policyno
+	LEFT JOIN cc_swf_sort r ON r.id=f.complaintProject
+	WHERE f.flowid LIKE 'ZX%' AND r.idname='投诉' and f.policyno IS NOT NULL
+	GROUP BY f.policyno
+	) temp LEFT JOIN policy_information p ON temp.policyno = p.contno
+	WHERE temp.fnum = temp.mnum
+) tt WHERE tt.rn = 1 AND tt.customerno IS NOT NULL AND si1.scustid = tt.customerno);
+	--107	高频投诉	Label105	高频投诉	"select count(1) from cc_action_data_complaints c where c.productno='2018110400035608'"	--半年之内来过两次以上投诉的,投诉受理日期间隔<180天,且投诉次数>2
+	UPDATE shanglifeecif.Individual si1 SET si1.Label105 = '高频投诉' WHERE si1.scustid in
+
+	(SELECT p.customerno FROM policy_information p WHERE p.contno IN 
+
+	(SELECT temp.productno FROM (
+		
+		SELECT t.productno,t.sinserttime,
+		(SELECT tt.inserttime FROM (SELECT cad.inserttime,row_number()OVER(PARTITION BY cad.productno ORDER BY cad.inserttime) rownum,cad.productno FROM cc_action_complaints ca,cc_action_data_complaints cad 
+			WHERE  cad.complaintsid=ca.complaintsid AND cad.productno IS NOT NULL) tt WHERE tt.productno = t.productno AND tt.rownum = t.rn+1) AS esinserttime
+			 FROM 
+			(
+				select cd.productno,row_number()OVER(PARTITION BY cd.productno ORDER BY cd.inserttime) rn,cd.inserttime AS sinserttime
+				from cc_action_complaints c,cc_action_data_complaints cd WHERE  cd.complaintsid=c.complaintsid AND cd.productno IS NOT NULL
+			) t
+	) temp WHERE temp.esinserttime IS NOT NULL AND DATEDIFF(temp.esinserttime,temp.sinserttime) < 180));
+    
+    
+    --SELECT c.productno,c.inserttime FROM cc_action_data_complaints c  WHERE c.productno IS NOT NULL GROUP BY c.productno
+	--108	重大投诉影响	Label106	重大投诉影响	投诉来源	投诉来源是保监局、保监会、媒体转办的
+	UPDATE shanglifeecif.Individual si1 SET si1.Label106 = (
+
+	SELECT 
+		CASE 
+			WHEN tt.complaintsSource LIKE '%保监会%' THEN '重大投诉' 
+			WHEN tt.complaintsSource LIKE '%保监局%' THEN '重大投诉' 
+			WHEN tt.complaintsSource LIKE '%媒体转办%' THEN '重大投诉' END FROM (
+	
+		SELECT pi.customerno,max(complaintsSource) AS complaintsSource FROM (
+	
+		select group_concat((case c.complaintsSource 
+		         when '911' then '来电'
+		         when '912' then '来访'
+		         when '913' then '来函'
+		         when '914' then '保监会转办'
+		         when '919' then '保监局转办'
+		         when '915' then '媒体转办'
+		         when '916' then '同业公会'
+		         when '917' then '其他转办'
+		         when '918' then '呼出'
+		         else c.complaintsSource END),',') as complaintsSource,p.contno from cc_action_complaints c,cc_action_data_complaints cd,policy_information p
+		         
+		where cd.complaintsid=c.complaintsid AND p.contno = cd.productno GROUP BY p.contno
+
+		) t LEFT JOIN policy_information pi ON t.contno = pi.contno GROUP BY pi.customerno
+	
+	) tt WHERE tt.customerno = si1.scustid
+
+);
+	
+	--109	高金额	Label107	高金额		银保渠道期缴高于30000,有效保单;其他渠道件均保费2倍以上
+	UPDATE shanglifeecif.Individual si1 SET si1.Label107 = '高保额' WHERE si1.scustid IN (SELECT p.customerno FROM policy_information p WHERE (p.salecom = '03' AND p.prem>30000 AND 
+	p.appflag = '有效') OR (p.salecom <> '03' AND p.prem>60000 AND p.appflag = '有效'));
+	--111	理赔报案追踪	Label109	理赔报案追踪		理赔状态为报案状态,且理赔报案日-当前日期<30天
+	UPDATE shanglifeecif.Individual si1 SET si1.Label109 = '理赔报案追踪' WHERE si1.scustid IN (SELECT p.customerno FROM policy_information p WHERE p.contno IN (SELECT c.CONTNO FROM insurance_claim c WHERE c.LLCLAIMSTATE = '报案' AND DATEDIFF(sysdate(), c.RPTDATE) <30) );
+	--112	理赔处理中	Label110	理赔处理中		理赔状态为受理或立案
+	UPDATE shanglifeecif.Individual si1 SET si1.label110 = '理赔处理中' WHERE si1.scustid IN (
+		SELECT p.customerno FROM policy_information p WHERE p.contno IN (SELECT c.contno FROM INSURANCE_CLAIM c WHERE c.llclaimstate = '受理' OR c.llclaimstate = '立案')
+	);
+	--115	生存金未领	Label113	生存金未领	判断逻辑不详	生存金领取方式为自动转账、存在生存金且未领取
+	UPDATE shanglifeecif.Individual si1 SET si1.label113 = '生存金未领' WHERE si1.scustid IN (
+	SELECT p.customerno FROM policy_information p WHERE p.contno IN (
+		SELECT contno FROM Lcinsureacc WHERE acctype = '005' and   insuaccbala>0
+	) 
+);
+	--117	红利垫缴还款	Label115	红利垫缴还款	判断逻辑不详	存在红利,且红利已经垫交保单还款
+		UPDATE shanglifeecif.Individual si1 SET si1.label117 = '红利垫缴还款' WHERE si1.scustid IN (
+		SELECT p.customerno FROM policy_information p WHERE p.contno IN (
+			SELECT contno FROM loloandetail WHERE finfeetype = 'HL'
+		) 
+	);
+	--122	重点银行	Label120	重点银行	判断逻辑不详	保单的销售渠道网点为招商银行
+	UPDATE shanglifeecif.Individual si1 SET si1.Label120 = '重点银行' WHERE 
+	si1.scustid IN (SELECT p.customerno  FROM policy_information p WHERE p.AGENTCOM LIKE '%招商%');
+	EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());	
+END
+
+

+ 182 - 0
sql-achievement/存储过程/人寿测试环境使用sql整理/客户标签label21-40.sql

@@ -0,0 +1,182 @@
+CREATE OR REPLACE PROCEDURE shanglifeecif.updateIndividualLable_21_40() IS
+DECLARE
+BEGIN
+	--18	个人年收入区间	label21	"根据个人年收入字段进行判断:case PIncome when PIncome<=120000 then '低收入' when PIncome>120000 and PIncome<=1000000 then '中产' when --PIncome>1000000 then '富人' else null"	低收入、中产、富人	
+	--根据数据判断单位应该是万元,这里都除以10000做判断
+	UPDATE shanglifeecif.Individual si1 SET si1.Label21 = (
+			CASE 
+				WHEN si1.pincome >=0 AND si1.pincome<=12 THEN '低收入' 
+				WHEN si1.pincome >12 AND si1.pincome<=100 THEN '中产' 
+				WHEN si1.pincome > 100 THEN '富人'
+				else null END 
+			) where 1 = 1;
+	--19	拥有车辆数量区间	label22	"根据车辆登录数量字段进行判断:case COVehicle when COVehicle=0 then '无车' when COVehicle=1 then '1辆车' when COVehicle>1 then '2辆车以上'
+    --else null" 无车,1辆车,2辆车及以上	
+	UPDATE shanglifeecif.Individual si1 SET si1.Label22 = (
+		CASE 
+		WHEN si1.COVehicle ==0  THEN '无车' 
+		WHEN si1.COVehicle == 1  THEN '1辆车' 
+		WHEN si1.COVehicle > 1  THEN '2辆车以上' 
+		ELSE NULL END 
+		) where 1 = 1;	
+	--20	拥有住房套数	label23	"根据房屋登录数量字段进行判断:case CORP when CORP=0 then '无房' when CORP=1 then '1套房' when CORP>1 then '2套房以上'
+	--else null"	无房,1套房,2套房及以上	
+	UPDATE shanglifeecif.Individual si1 SET si1.Label23 = (
+		CASE 
+		WHEN si1.CORP ==0  THEN '无房' 
+		WHEN si1.CORP == 1  THEN '1套房' 
+		WHEN si1.CORP > 1  THEN '2套房以上' 
+		else null END 
+		) where 1 = 1;
+	--21	是否持有寿险有效保单	label24	筛选客户名下所有保单,保单中客户为投保人,保单险种大类为寿险	持有寿险有效保单	
+	UPDATE shanglifeecif.Individual si1 SET si1.label24 = '持有寿险有效保单' WHERE si1.scustid in
+	(SELECT p.customerno FROM policy_information p,lmriskapp l WHERE p.riskcode = l.riskcode AND p.appflag = '有效' AND l.kindcode = 'L');
+	--22	保单件数区间	label25	"判断客户作为投保人所有的保单数量(有效保单数量+失效保单数量):NOVPolicy+NOIVPolicy=pCount(保单总件数)
+	--case pCount when pCount=1 then '1件' when pCount=2 then '2件' when pCount>2 and pCount<6 then '3-5件' when pCount>5 and pCount<11 then '6-10件' 
+	--when pCount>10 and pCount<21 then '10-20件'when pCount>20 and pCount<51 then '21-50件'
+	--when pCount>50 then '50件以上' else '无保单'"	无保单、1件保单、2件保单、3-5件保单、6-10件保单、11-20件保单、20-50件保单、50件以上保单	
+	--第一步 更新 Individual.NOVPolicy 有效记录数
+	UPDATE shanglifeecif.Individual si1 SET si1.NOVPolicy = (SELECT nvl(t.cnum,0) FROM (
+			SELECT p.customerno,count(*) AS cnum FROM policy_information p WHERE p.appflag = '有效' GROUP BY p.customerno 
+	) t WHERE t.customerno =  si1.scustid); 
+	
+	--第二步 更新 Individual.NOIVPolicy 无效记录数
+	UPDATE shanglifeecif.Individual si1 SET si1.noivpolicy = (SELECT nvl(t.cnum,0) FROM (
+			SELECT p.customerno,count(*) AS cnum FROM policy_information p WHERE p.appflag <> '有效' GROUP BY p.customerno 
+	) t WHERE t.customerno =  si1.scustid); 
+	
+	--第三步
+	--UPDATE shanglifeecif.Individual si1 SET si1.Label25 = (
+		--CASE 
+				--WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) == 0 THEN '无保单' 
+				--WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) == 1 THEN '1件' 
+				--WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) == 2 THEN '2件'  
+				--WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) >= 3  AND (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) <= 5 THEN '3-5件'  
+				--WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) >= 6  AND (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) <= 10 THEN '6-10件'  
+				--WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) >= 11  AND (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0))<= 20 THEN '11-20件'  
+				--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;
+		
+	UPDATE shanglifeecif.Individual si1 SET si1.Label25 = (
+		CASE 
+				WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) == 0 THEN '无保单' 
+				WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) == 1 THEN '1件保单' 
+				WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) == 2 THEN '2件保单'  
+				WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) >= 3  AND (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) <= 5 THEN '3-5件保单'  
+				WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) >= 6  AND (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) <= 10 THEN '6-10件保单'  
+				WHEN (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0)) >= 11  AND (nvl(si1.NOVPolicy,0) + nvl(si1.NOIVPolicy,0))<= 20 THEN '11-20件保单'  
+				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;	
+		
+	
+	--23	是否贷款	label26	筛选客户为投保人的有效保单,且办理了贷款业务	有贷款	
+	--24	是否有极短意保单/是否仅有极短意保单	 label27	"客户为保单投保人 case AGRMNTAge(保险期限) when avg(sum(AGRMNTAges))<90 then '仅极短意外险'
+			--when AGRMNTAge<90  then '有极短意外险'"	仅极短意外险,有极短意外险	志广说只用判断有极短意外险不用判断仅有
+		UPDATE shanglifeecif.Individual si1 SET si1.Label27 = (
+			SELECT
+				CASE	
+					WHEN temp.cnt >0 THEN
+							'有极短意外险' 	
+				END
+			FROM
+				(
+				SELECT
+					count(1) cnt,
+					policy.customerno 
+				FROM
+					policy_information policy
+				where
+					policy.SECURITY in('7天','15天','30天','90天','1月','3月')
+				and
+					policy.riskperiod='短期险'
+				and	
+					policy.riskcode not in('1066008','1066007','1066006','1066004','1066003','1066002','1066001','1065005','1065003','1065001','1025003')
+				
+				GROUP BY
+					policy.customerno 
+				) temp 
+			WHERE temp.customerno = si1.scustid 
+		);
+	--29	是否有趸交保单	Label29	有趸交保单	NOSPInsurance,POLICY_INFORMATION.PAYINTV='趸缴',PREMIUM_LIST.PAYMENT_PERIOD='一次交清'	
+	UPDATE shanglifeecif.Individual si1 SET si1.Label29 = '有趸交保单' WHERE si1.scustid IN (
+		SELECT p.customerno FROM policy_information p WHERE p.payintv = '趸缴' AND p.contno IN (SELECT l.contno FROM PREMIUM_LIST l WHERE l.PAYMENT_PERIOD LIKE '%一次交清 %')	
+	);	
+	--30	是否给本人投保	Label30	仅本人投保,本人已投保,本人未投保	Iself	
+	UPDATE shanglifeecif.Individual si1 SET si1.Label30 = (
+	
+		SELECT 
+			CASE 
+				WHEN tt.bnum = 0  THEN '本人未投保'
+				WHEN tt.bnum > 0 and tt.bnum <> tt.tnum THEN '本人已投保'
+				WHEN tt.bnum > 0 and tt.bnum = tt.tnum THEN '仅本人投保'
+			END
+			
+		FROM (
+			SELECT t.customerno,MAX(t.bnum) bnum,count(*) as tnum FROM (
+				SELECT count(*) AS bnum,p.customerno FROM policy_information p WHERE p.relationtoappnt = '本人' GROUP BY p.customerno
+			) t LEFT JOIN policy_information pi ON pi.customerno = t.customerno GROUP BY t.customerno
+		) tt WHERE tt.customerno = si1.scustid
+	
+	);
+	--32	是否给父母投保	Label31	仅父母投保,父母已投保,父母未投保	Iparent	
+	UPDATE shanglifeecif.Individual si1 SET si1.Label31 = (
+	
+		SELECT 
+			CASE 
+				WHEN tt.bnum = 0  THEN '父母未投保'
+				WHEN tt.bnum > 0 and tt.bnum <> tt.tnum THEN '父母已投保'
+				WHEN tt.bnum > 0 and tt.bnum = tt.tnum THEN '仅父母投保'
+			END
+			
+		FROM (
+			SELECT t.customerno,MAX(t.bnum) bnum,count(*) as tnum FROM (
+				SELECT count(*) AS bnum,p.customerno FROM policy_information p WHERE p.relationtoappnt = '父母' GROUP BY p.customerno
+			) t LEFT JOIN policy_information pi ON pi.customerno = t.customerno GROUP BY t.customerno
+		) tt WHERE tt.customerno = si1.scustid
+	
+	);
+	--34	是否给子女投保	Label32	仅子女投保,子女已投保,子女未·投保	Ichildren	
+	UPDATE shanglifeecif.Individual si1 SET si1.Label32 = (
+	
+		SELECT 
+			CASE 
+				WHEN tt.bnum = 0  THEN '子女未投保'
+				WHEN tt.bnum > 0 and tt.bnum <> tt.tnum THEN '子女已投保'
+				WHEN tt.bnum > 0 and tt.bnum = tt.tnum THEN '仅子女投保'
+			END
+			
+		FROM (
+			SELECT t.customerno,MAX(t.bnum) bnum,count(*) as tnum FROM (
+				SELECT count(*) AS bnum,p.customerno FROM policy_information p WHERE p.relationtoappnt = '子女' GROUP BY p.customerno
+			) t LEFT JOIN policy_information pi ON pi.customerno = t.customerno GROUP BY t.customerno
+		) tt WHERE tt.customerno = si1.scustid
+	);
+	
+		
+	--36	是否给配偶投保	Label33	仅配偶投保,配偶已投保,配偶未投保	Imate	
+	UPDATE shanglifeecif.Individual si1 SET si1.Label33 = (
+	
+		SELECT 
+			CASE 
+				WHEN tt.bnum = 0  THEN '配偶未投保'
+				WHEN tt.bnum > 0 and tt.bnum <> tt.tnum THEN '配偶已投保'
+				WHEN tt.bnum > 0 and tt.bnum = tt.tnum THEN '仅配偶投保'
+			END
+			
+		FROM (
+			SELECT t.customerno,MAX(t.bnum) bnum,count(*) as tnum FROM (
+				SELECT count(*) AS bnum,p.customerno FROM policy_information p WHERE p.relationtoappnt = '配偶' GROUP BY p.customerno
+			) t LEFT JOIN policy_information pi ON pi.customerno = t.customerno GROUP BY t.customerno
+		) tt WHERE tt.customerno = si1.scustid
+	);	
+	
+	EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());	
+END
+

+ 157 - 0
sql-achievement/存储过程/人寿测试环境使用sql整理/客户标签label41-60.sql

@@ -0,0 +1,157 @@
+CREATE OR REPLACE PROCEDURE shanglifeecif.updateIndividualLable_41_60() IS
+DECLARE
+BEGIN
+	--47	是否仅有1年期短险保单	Label43	仅有1年期短险保单,有1年期短险保单	"policy_information表 SECURITY in('1年','6月','180天') riskperiod=‘短期险’
+	--riskcode not in('1066008','1066007','1066006','1066004','1066003','1066002','1066001','1065005','1065003','1065001','1025003')"	客户为保单投保人,所有保单的保障期限为一年
+	UPDATE shanglifeecif.Individual si1 SET si1.Label43 = (
+		SELECT
+			CASE	
+				WHEN temp.cnt >0 THEN
+						'有1年期短险保单' 	
+			END
+		FROM
+			(
+			SELECT
+				count(1) cnt,
+				policy.customerno 
+			FROM
+				policy_information policy
+			where
+				policy.SECURITY in('1年','6月','180天')
+			and
+				policy.riskperiod='短期险'
+			and	
+				policy.riskcode not in('1066008','1066007','1066006','1066004','1066003','1066002','1066001','1065005','1065003','1065001','1025003')
+			
+			GROUP BY
+				policy.customerno 
+			) temp 
+		WHERE
+		temp.customerno = si1.scustid 
+	);	
+	--48	是否有失效保单	Label44	有失效保单	NOIVPolicy	客户为保单投保人,持有保单中保单状态为失效 (最新文档逻辑)
+		UPDATE shanglifeecif.Individual si1 SET si1.label44 = '有失效保单' WHERE si1.scustid IN (
+		SELECT p.customerno FROM policy_information p WHERE p.contno IN (select contno from lccontstate where statetype = 'Available' and state = '1') 
+	);
+	--49	是否有缴费期满长险保单	Label45	有缴费期满长险保单	POLICY_INFORMATION:paycount= payendyear AND riskperiod='长期险'	客户持有保险期限为一年以上,剩余保费期数为0
+		UPDATE shanglifeecif.Individual si1 SET si1.label45 = '有缴费期满长险保单' WHERE si1.scustid IN (
+		SELECT p.customerno FROM policy_information p WHERE p.contno IN (
+		select contno from lcpol where payintv > 0 and paytodate = payenddate and months_between(cvalidate, enddate) > 12
+		) 
+	);
+	--50	是否有续期缴费的保单	Label46	有续期缴费的保单		客户为投保人,含有待缴费状态的保单
+		UPDATE shanglifeecif.Individual si1 SET si1.label46 = '有续期缴费保单' WHERE si1.scustid IN (
+		SELECT p.customerno FROM policy_information p WHERE p.contno IN (
+			select otherno from ljspay where othernotype = '2'
+		) 
+	);
+	--51	有责任期满的保单	Label47	有责任期满的保单		客户持有保单含有保险期限已满的保单
+		UPDATE shanglifeecif.Individual si1 SET si1.label47 = '有责任期满的保单' WHERE si1.scustid IN (
+		SELECT p.customerno FROM policy_information p WHERE p.contno IN (
+			select contno from lcpol where enddate < SYSDATE
+		) 
+	);
+		
+	--52	第一张保单投保日期	Label48	首次投保日期XXXX-XX-XX	FADate	客户所有保单中投保时间最早的日期
+	--第一步  
+	UPDATE shanglifeecif.Individual si1 SET si1.FADate = (
+	SELECT fadate FROM (
+		SELECT p.customerno,min(p.CUSTOMGETPOLDATE) AS fadate  FROM POLICY_INFORMATION p WHERE p.customgetpoldate IS NOT null GROUP BY p.customerno
+		) t WHERE t.customerno = si1.scustid
+	);
+
+	UPDATE shanglifeecif.Individual si1 SET si1.label48 = '首次投保日期' || si1.fadate WHERE si1.fadate IS NOT NULL;
+
+	--53	最后一次寿险投保距今时长	Label49	最后一次投保距今XXX天	LAPPDate	当前日期减去客户所有保单中最后一次投保的保单的投保时间
+	UPDATE shanglifeecif.Individual si1 SET si1.LAPPDate = (
+		SELECT fadate FROM (
+			SELECT p.customerno,max(p.CUSTOMGETPOLDATE) AS fadate  FROM POLICY_INFORMATION p WHERE p.customgetpoldate IS NOT null GROUP BY p.customerno
+			) t WHERE t.customerno = si1.scustid
+		);
+	
+	UPDATE shanglifeecif.Individual si1 SET si1.label49 = '最后一次投保距今' || DATEDIFF(sysdate(), si1.LAPPDate) || '天' WHERE si1.lappdate IS NOT NULL;  
+		
+	--54	最近一次保单所属渠道	Label50	最近保单团险渠道、最近保单个人营销、最近保单银行代理、最近保单中介渠道、最近保单网销渠道	--LPChannel,InsuranceArrangement.AgentChannel	客户最后一次投保归属渠道
+	UPDATE shanglifeecif.Individual si1 SET si1.label50 =  (SELECT '最近保单' || trim(t.salecomname) FROM (
+			SELECT p.customerno,row_number()OVER(PARTITION BY p.customerno ORDER BY p.customgetpoldate DESC) rd,p.salecomname  FROM POLICY_INFORMATION p 
+			WHERE p.salecomname IS NOT null
+		) t WHERE t.rd = 1 AND t.customerno = si1.scustid);
+	
+	
+	--UPDATE shanglifeecif.Individual si1 SET si1.label50 =  (SELECT t.SALECHNL FROM (
+			--SELECT p.customerno,row_number()OVER(PARTITION BY p.customerno ORDER BY p.customgetpoldate DESC) rd,p.SALECHNL  FROM POLICY_INFORMATION p WHERE p.salechnl IS NOT null
+		--) t WHERE t.rd = 1 AND t.customerno = si1.scustid);
+
+	--UPDATE shanglifeecif.Individual si1 SET si1.label50 =  '最近保单' || si1.label50 WHERE si1.label50 IS NOT NULL;
+	--55	最近一次保单所属机构	Label51	最近XX机构	LPOrg,InsuranceArrangement.AgentOrg	客户最后一次投保归属机构
+	--UPDATE shanglifeecif.Individual si1 SET si1.label51 =  (SELECT t.AGENTCOM FROM (
+		--	SELECT p.customerno,row_number()OVER(PARTITION BY p.customerno ORDER BY p.customgetpoldate DESC) rd,p.AGENTCOM  FROM POLICY_INFORMATION p WHERE p.salechnl IS NOT null
+		--) t WHERE t.rd = 1 AND t.customerno = si1.scustid);
+
+	--UPDATE shanglifeecif.Individual si1 SET si1.label51 =  '最近机构' || si1.label51 WHERE si1.label51 IS NOT NULL;
+	--56	最早保单所属渠道	Label52	首单团险渠道、首单个人营销、首单银行代理、首单中介渠道、首单网销渠道	FAChannel	客户第一次投保时保单归属渠道
+	UPDATE shanglifeecif.Individual si1 SET si1.label52 =  (SELECT '首单' || trim(t.salecomname) FROM (
+			SELECT p.customerno,row_number()OVER(PARTITION BY p.customerno ORDER BY p.customgetpoldate asc) rd,p.salecomname  FROM POLICY_INFORMATION p WHERE p.salecomname IS NOT null
+		) t WHERE t.rd = 1 AND t.customerno = si1.scustid);	
+	
+	
+	--UPDATE shanglifeecif.Individual si1 SET si1.label52 =  (SELECT t.SALECHNL FROM (
+			--SELECT p.customerno,row_number()OVER(PARTITION BY p.customerno ORDER BY p.customgetpoldate asc) rd,p.SALECHNL  FROM POLICY_INFORMATION p WHERE p.salechnl IS NOT null
+		--) t WHERE t.rd = 1 AND t.customerno = si1.scustid);
+
+	--UPDATE shanglifeecif.Individual si1 SET si1.label52 =  '首单' || si1.label52 WHERE si1.label52 IS NOT NULL;
+	--57	最早保单所属机构	Label53	首单XX机构	FAOrg	客户第一次投保时保单归属机构
+	--UPDATE shanglifeecif.Individual si1 SET si1.label53 =  (SELECT t.AGENTCOM FROM (
+	--	SELECT p.customerno,row_number()OVER(PARTITION BY p.customerno ORDER BY p.customgetpoldate ASC) rd,p.AGENTCOM  FROM POLICY_INFORMATION p WHERE p.salechnl IS NOT null
+	--) t WHERE t.rd = 1 AND t.customerno = si1.scustid);
+
+	--UPDATE shanglifeecif.Individual si1 SET si1.Label53 =  '最近机构' || si1.Label53 WHERE si1.Label53 IS NOT NULL;
+	--58	最近保单状态	Label54	"未承保承保新增附加险终止续保未对账对账失败"	LPState	客户最后一张保单的保单状态
+	UPDATE shanglifeecif.Individual si1 SET si1.label54 = 
+	(SELECT 
+		(CASE temp.appflag 
+		WHEN '0' THEN '最近保单状态未承保' 
+		WHEN '1' THEN '最近保单状态承保' 
+		WHEN '2' THEN '最近保单状态新增附加险' 
+		WHEN '4' THEN '最近保单状态终止' 
+		WHEN '9' THEN '最近保单状态续保' 
+		WHEN 'B' THEN '最近保单状态未对账' 
+		WHEN 'F' THEN '最近保单状态对账失败' 
+		END) a 
+	FROM (
+		SELECT t.appflag,p.customerno,row_number()OVER(PARTITION BY p.customerno ORDER BY p.customgetpoldate desc) rd FROM policy_information p,lccont t WHERE p.contno = t.contno
+	) temp WHERE temp.rd = 1  AND si1.scustid = temp.customerno);
+	
+	--60	是否有退保保单	Label56	有退保保单	如何判断?	客户所有的保单中是否存在保单状态为退保的保单
+		UPDATE shanglifeecif.Individual si1 SET si1.label56 = '有退保保单' WHERE si1.scustid IN (
+		SELECT p.customerno FROM policy_information p WHERE p.contno IN (
+			select contno from lpedoritem where  edortype in ('CT', 'XT', 'GT') and edorstate = '0'
+		) 
+	);
+	
+	--61	最近一次理赔类型	Label57	--意外医疗、意外伤残、意外死亡、意外高残、意外大病、意外特种疾病、意外失业失能、意外生命末期重疾、意外豁免、疾病医疗、疾病伤残、疾病死亡、疾病高残、疾病大病、疾病特种疾病、疾病失---业失能、疾病生命末期重疾、疾病豁免	无	客户最后一次投办理理赔业务的业务类型
+	UPDATE shanglifeecif.Individual si1 SET si1.Label57 = (
+	SELECT t.ACCIDENTTYPE FROM (
+		SELECT row_number()OVER(PARTITION BY c.insuredno ORDER BY c.applydate desc) rd,c.insuredno,c.ACCIDENTTYPE FROM INSURANCE_CLAIM c
+		) t WHERE t.rd = 1 AND t.insuredno = si1.scustid
+	);
+	--62	最近一次出险类型	Label58	疾病出险、意外出险	无	客户最后一次出险的类型
+	UPDATE shanglifeecif.Individual si1 SET si1.Label58 = (
+		SELECT t.RISKTYPE FROM (
+			SELECT row_number()OVER(PARTITION BY c.insuredno ORDER BY c.applydate desc) rd,c.insuredno,c.RISKTYPE FROM INSURANCE_CLAIM c
+		) t WHERE t.rd = 1 AND t.insuredno = si1.scustid
+	);
+	--63	最近一次理赔状态	Label59	理赔报案中、理赔已受理、理赔已立案、理赔审核中、理赔预付审批中、理赔结案、理赔完成、理赔关闭	InsuranceClaimThread.ClaimCaseStatus	--客户最后一次发生理赔的理赔类型
+	UPDATE shanglifeecif.Individual si1 SET si1.Label59 = (
+		SELECT '最近一次理赔状态' || t.LLCLAIMSTATE FROM (
+			SELECT row_number()OVER(PARTITION BY c.insuredno ORDER BY c.applydate desc) rd,c.insuredno,c.LLCLAIMSTATE FROM INSURANCE_CLAIM c
+		) t WHERE t.rd = 1 AND t.insuredno = si1.scustid
+	);
+	EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());	
+END
+
+

+ 77 - 0
sql-achievement/存储过程/人寿测试环境使用sql整理/客户标签label61-80.sql

@@ -0,0 +1,77 @@
+CREATE OR REPLACE PROCEDURE shanglifeecif.updateIndividualLable_61_80() IS
+DECLARE
+BEGIN
+	
+	--65	是否有满期给付保单	Label61	有满期给付保单	如何判断?	0
+	--select getdutycode from lmdutygetalive where getdutyname in ('满期保险金','满期生存保险金');
+	UPDATE shanglifeecif.Individual si1 SET si1.label61 = '有满期给付保单' WHERE si1.scustid IN (
+		SELECT p.customerno FROM policy_information p WHERE p.contno IN (
+			SELECT contno FROM lcget WHERE getdutycode IN (select getdutycode from lmdutygetalive where getdutyname in ('满期保险金','满期生存保险金'))
+		) 
+	);
+	--67	是否有生存金给付的保单	Label63	有生存金给付保单	无	0
+	--select getdutycode from lmdutygetalive where getdutyname = '生存保险金';
+	UPDATE shanglifeecif.Individual si1 SET si1.label62 = '有生存金给付的保单' WHERE si1.scustid IN (
+		SELECT p.customerno FROM policy_information p WHERE p.contno IN (
+			SELECT contno FROM lcget WHERE getdutycode IN (select getdutycode from lmdutygetalive where getdutyname = '生存保险金')
+		) 
+	);
+	--68	是否有红利可领取的保单	Label64	有红利可领取保单	无	0
+	UPDATE shanglifeecif.Individual si1 SET si1.label64 = '红利可领取的保单' WHERE si1.scustid IN 
+	(SELECT p.customerno FROM policy_information p,lmriskapp l WHERE p.riskcode = l.riskcode AND l.bonusflag = 1);
+	
+	--69	一单寿险客户	Label65	一单寿险客户	客户仅购买了一张保单,且保单类型为寿险型保单
+	UPDATE shanglifeecif.Individual si1 SET si1.label65 = '一单寿险客户' WHERE si1.scustid IN (SELECT t.customerno FROM (
+		SELECT count(*) AS pnum,p.customerno FROM POLICY_INFORMATION p 
+	LEFT JOIN lmriskapp b on p.riskcode = b.riskcode
+	WHERE b.kindcode = 'L' GROUP BY p.customerno
+	) t WHERE t.pnum = 1);
+	--70	缴费期满客户	Label66	缴费期满客户	POLICY_INFORMATION:paycount= payendyear	客户缴费期数已满
+	UPDATE shanglifeecif.Individual si1 SET si1.label66 = '缴费期满客户' WHERE si1.scustid IN (SELECT t.customerno FROM (
+			SELECT count(*) AS pnum,p.customerno FROM POLICY_INFORMATION p 
+		WHERE p.paycount = p.payendyear GROUP BY p.customerno
+		) t WHERE t.pnum > 0);
+	--71	生日与司庆日同一天客户	Label67	生日与司庆日同天	2月15号 为司庆日	客户生日和公司司庆日为同一天
+	UPDATE shanglifeecif.Individual si1 SET si1.Label67 = '司庆日' where si1.birthday like '%-02-15%';	
+	--72	持有有效保单产品类型客户标签	Label68	持有有效保单,未持有有效保单		客户名下是否有投保人为自己的有效保单
+	UPDATE shanglifeecif.Individual si1 SET si1.label68 = '持有有效保单' WHERE si1.scustid IN (SELECT t.customerno FROM (
+			SELECT count(*) AS pnum,p.customerno FROM POLICY_INFORMATION p 
+		WHERE p.appflag = '有效' GROUP BY p.customerno
+		) t WHERE t.pnum > 0);
+	--73	客户等级标签	Label69	钻石、白金、黄金、普通	Individual.CustClass	根据CustClass字段已有的等级值显示
+	--UPDATE shanglifeecif.Individual si1 SET si1.Label69 = si1.CustClass where 1 = 1;
+	UPDATE shanglifeecif.Individual si1 SET si1.Label69 = (
+						CASE si1.CustClass 
+						WHEN 1 THEN '钻石客户'
+						WHEN 2 THEN '白金客户'
+						WHEN 3 THEN '黄金客户'
+						--WHEN 4 THEN '普通级别'
+						--ELSE '无级别' 
+						ELSE ''
+						END
+						) where 1 = 1;	
+	--74	最近接触业务类型	Label70	最近投诉、最近问询(咨询)、最近营销、最近理赔、最近出险、最近保全	Individual.LCType	客户最后一次接触的业务类型
+	--75	最近接触方式	Label71	最近外呼、最近呼入、微信	Individual.LCMethod	客户最后一次接触的方式
+	--77	是否关注官微	Label73	关注官微	无	0
+	UPDATE shanglifeecif.Individual si1 SET si1.Label73 = '关注官微'
+	WHERE si1.idcard IN (SELECT a.certificate_no FROM account a) 
+	OR si1.passport IN (SELECT a.certificate_no FROM account a) 
+	OR si1.Dlicense IN  (SELECT a.certificate_no FROM account a) 
+	OR si1.othernumber IN (SELECT a.certificate_no FROM account a);
+
+	--78	是否注册官微	Label74	注册官微	无	0
+	UPDATE shanglifeecif.Individual si1 SET si1.Label74 = '注册官微'
+	WHERE si1.idcard IN (SELECT a.certificate_no FROM account a WHERE a.account_status = 0) 
+		OR si1.passport IN (SELECT a.certificate_no FROM account a WHERE a.account_status = 0) 
+		OR si1.Dlicense IN  (SELECT a.certificate_no FROM account a WHERE a.account_status = 0) 
+		OR si1.othernumber IN (SELECT a.certificate_no FROM account a WHERE a.account_status = 0);
+	--	本人生日提醒	Label77	本人生日临近		客户生日-当前日期<5
+	UPDATE shanglifeecif.Individual si1 SET si1.label77 = '本人生日临近' WHERE (DAYOFYEAR(sysdate(),'yyyy-MM-dd')-DAYOFYEAR(si1.birthday,'yyyy-MM-dd')) BETWEEN 1 AND 5;
+	
+	EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());	
+END
+

+ 27 - 0
sql-achievement/存储过程/人寿测试环境使用sql整理/客户标签label81-100.sql

@@ -0,0 +1,27 @@
+CREATE OR REPLACE PROCEDURE shanglifeecif.updateIndividualLable_81_100() IS
+DECLARE
+BEGIN
+	
+	--93	失效客户	Label91	失效客户	所有保单都是失效状态	客户名下所有保单均失效的客户
+	UPDATE shanglifeecif.Individual si1 SET si1.Label91 = '失效客户' 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  policy_information p WHERE p.appflag <> '有效' GROUP BY p.customerno 
+	) t LEFT JOIN policy_information pi ON pi.customerno = t.customerno
+	GROUP BY pi.customerno
+	) temp WHERE temp.tnum = temp.pnum);
+	
+	
+	--98	大龄	Label96	大龄 来电客户年龄50岁以上
+	UPDATE shanglifeecif.Individual si1 SET si1.Label96 = (CASE WHEN TRUNC(months_between(sysdate, si1.birthday)/12)>=50 AND TRUNC(months_between(sysdate, si1.birthday)/12)<60 THEN '大龄' END ) where 1 = 1;
+	--99	高龄	Label97	高龄		来电客户年龄60岁以上
+	UPDATE shanglifeecif.Individual si1 SET si1.Label97 = (CASE WHEN TRUNC(months_between(sysdate, si1.birthday)/12)>=60  THEN '高龄' END) where 1 = 1;
+	--100	敏感职业	Label98	敏感职业		投保人职业为记者、律师、公务员、媒体、金融行业
+	UPDATE shanglifeecif.Individual si1 SET si1.Label98 = (CASE WHEN si1.occupation like '%记者%' OR si1.occupation like '%律师%' OR si1.occupation like '%公务员%' OR  si1.occupation like '%媒体%' OR  si1.occupation like '%金融行业%' THEN '敏感职业' END ) WHERE 1 = 1;
+    --102	公司销售人员	Label100	公司销售人员	姓名与保单经办人一致	客户为公司销售人员
+	
+	EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());	
+END

+ 8 - 3
sql-achievement/存储过程/人寿测试环境使用sql整理/年龄段性别分布统计.sql

@@ -12,7 +12,8 @@ replication 1;
 CREATE OR REPLACE PROCEDURE shanglifeecif.age_sex_distribution() IS
 DECLARE
 BEGIN
-	delete from shanglifeecif.age_sex_distribution;
+
+	DELETE FROM shanglifeecif.age_sex_distribution;
 	insert into shanglifeecif.age_sex_distribution (
 		id,
 		labelName,
@@ -20,6 +21,10 @@ BEGIN
 		cusNum
 	) SELECT row_number()over(),t.labelName,t.gender,t.cusNum FROM (
 	SELECT si.label4 labelName,si.gender,count(1) cusNum FROM shanglifeecif.individual si GROUP BY si.label4,si.gender
-	) t
-			
+	) t;
+		EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());		
 END	;

+ 28 - 65
sql-achievement/存储过程/人寿测试环境使用sql整理/理赔信息.sql

@@ -17,7 +17,7 @@ BEGIN
 		--rpphone ,-- '报案人电话',
 		--lpid ,--'出险人	根据INSURANCE_CLAIM.INSUREDNO获取indid',
 		lpscutid,--'出险人上游客户号7
-		--lpname ,-- '出险人名称',
+		lpname ,-- '出险人名称',
 		cndate ,--'报案日期 INSURANCE_CLAIM.RPTDATE',
 		lossdescribe ,-- '损失原因 案件发生的原因:INSURANCE_CLAIM.LLOCCURREASON',
 		crdate ,-- '立案日期 INSURANCE_CLAIM.RGTDATE',
@@ -33,80 +33,43 @@ BEGIN
 		ccamt ,--'赔付金额	INSURANCE_CLAIM_HEALTH.realpay',
 		--branchcode,-- '机构代码',
 		claimcasestatus ,--'案件状态INSURANCE_CLAIM_HEALTH.LLCLAIMSTATE',
+		accidenttype,
 		created_by ,
 		created_time 
 		-- updated_time,
 		-- updated_by
 	) select 
    		row_number()over(),--1
-   		rgtno,--2
-		contno,--3
-		rptno,--报案号4
-		riskdate,--损失发生的时间5
-		rptorname,--报案人名称6
-   		INSUREDNO,--出险人 上游客户号
-   		--lpname,
-		rptdate,
-		lloccurreason,
-		rgtdate,
-		accidentdetail,--报案描述
-		llclaimstate,
-		auditdate,--审批日期
-		relation,
-		clmno,--赔案号
-		llgettype,--赔案状态
-		riskcode,
-		riskname,
+   		trim(rgtno) as rgtno,--2
+		trim(contno) as contno,--3
+		trim(rptno) as rptno,--报案号4
+		trim(riskdate) as riskdate,--损失发生的时间5
+		trim(rptorname) as rptorname,--报案人名称6
+   		trim(INSUREDNO) as INSUREDNO,--出险人 上游客户号
+   		trim(INSUREDNAME) as INSUREDNAME,
+		trim(rptdate) as rptdate,
+		trim(lloccurreason) as lloccurreason,
+		trim(rgtdate) as rgtdate,
+		trim(accidentdetail) as accidentdetail,--报案描述
+		trim(llclaimstate) as llclaimstate,
+		trim(auditdate) as auditdate,--审批日期
+		trim(relation) as relation,
+		trim(clmno) as clmno,--赔案号
+		trim(llgettype) as llgettype,--赔案状态
+		trim(riskcode) as riskcode,
+		trim(riskname) as riskname,
 		realpay,
-		llclaimstate,--案件状态
+		trim(llclaimstate) as llclaimstate,--案件状态
+		trim(accidenttype) as accidenttype,
 		'admin',
 		sysdate()
-	from INSURANCE_CLAIM where contno is not null 
-	
-	update shanglifeecif.insuranceclaimthread a set (
-		lpid,
-		lpname
-	) = (SELECT 
-			temp.indid,
-			temp.name
-			FROM (
-				select 
-				b.indid,
-				row_number() over(partition by b.scustid) rn,
-				b.scustid,
-				b.name
-			from shanglifeecif.individual b
-			) temp WHERE a.lpscutid = temp.scustid AND temp.rn = 1);
+	from INSURANCE_CLAIM where contno is not null;
+	EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());	
 
-
-	UPDATE shanglifeecif.insuranceclaimthread a SET (
-			applicantid ,--'投保人ID',
-			appname ,--'投保人名称',
-			appphone ,--'投保人手机',
-			appcertid, --'投保人证件号码 INSURANCE_CLAIM.RISKDATE',
-			branchcode-- '机构代码',
-		) = (
-		
-			SELECT 
-				temp.applicantid ,--'投保人ID',
-				temp.appname ,--'投保人名称',
-				temp.appphone ,--'投保人手机',
-				temp.appcertid, --'投保人证件号码 INSURANCE_CLAIM.RISKDATE',
-				temp.branchcode-- '机构代码',
-			FROM (
-				select 
-				row_number() over(partition by applicantid) rn,
-				applicantid ,--'投保人ID',
-				appname ,--'投保人名称',
-				appphone ,--'投保人手机',
-				appcertid, --'投保人证件号码 INSURANCE_CLAIM.RISKDATE',
-				branchcode,-- '机构代码',
-				policyno
-			from shanglifeecif.insurancearrangement b
-			--where b.policyno  = a.policyno
-			
-			) temp WHERE temp.policyno = a.policyno AND temp.rn = 1);
-*/
 END;
 /
 BEGIN

+ 95 - 0
sql-achievement/存储过程/人寿测试环境使用sql整理/相似客户.sql

@@ -0,0 +1,95 @@
+CREATE OR REPLACE PROCEDURE shanglifeecif.same_customer() -- 创建主存储过程
+IS 
+DECLARE
+	scount int
+BEGIN
+DELETE FROM shanglifeecif.samecustomer;
+
+INSERT INTO shanglifeecif.samecustomer(
+  		sid,
+  		scustid,
+  		name,
+  		gender,
+  		birthday,
+  		idcard,
+  		Passport,
+  		Dlicense,
+  		OtherIdNumber,
+  		sameType
+) 
+SELECT 
+	row_number()OVER(),
+	sc1.scustid,
+	sc1.name,
+	sc1.gender,
+	sc1.birthday,
+	CASE sc1.idtype WHEN '0' THEN sc1.idcard END AS idcard,
+	CASE sc1.idtype WHEN '1' THEN sc1.idcard END AS passport,
+	CASE sc1.idtype WHEN '3' THEN sc1.idcard END AS dlicense,
+	CASE  WHEN sc1.idtype <> '0' AND sc1.idtype <> '1' AND sc1.idtype <> '3' THEN sc1.idcard END AS otherIdnumber,
+	0
+FROM shanglifeecif.customertotaltemp sc1 
+WHERE sc1.mobile IS NOT NULL AND EXISTS (SELECT 1 FROM shanglifeecif.customertotaltemp sc2 WHERE sc1.scustid != sc2.scustid 
+		AND sc1.name = sc2.name AND sc1.gender = sc2.gender AND sc1.idtype = sc2.idtype AND sc1.mobile = sc2.mobile);
+		
+	SELECT count(*) INTO scount FROM shanglifeecif.samecustomer;
+	--三要素疑似相同指姓名、性别、出生日期一致   1
+	INSERT INTO shanglifeecif.samecustomer(
+  		sid,
+  		scustid,
+  		name,
+  		gender,
+  		birthday,
+  		idcard,
+  		Passport,
+  		Dlicense,
+  		OtherIdNumber,
+  		sameType
+
+) 
+SELECT 
+	row_number()OVER()+scount,
+	sc1.scustid,
+	sc1.name,
+	sc1.gender,
+	sc1.birthday,
+	CASE sc1.idtype WHEN '0' THEN sc1.idcard END AS idcard,
+	CASE sc1.idtype WHEN '1' THEN sc1.idcard END AS passport,
+	CASE sc1.idtype WHEN '3' THEN sc1.idcard END AS dlicense,
+	CASE  WHEN sc1.idtype <> '0' AND sc1.idtype <> '1' AND sc1.idtype <> '3' THEN sc1.idcard END AS otherIdnumber,
+	1
+FROM shanglifeecif.customertotaltemp sc1 
+WHERE EXISTS(SELECT 1 FROM shanglifeecif.customertotaltemp sc2 WHERE sc2.scustid!=sc1.scustid AND sc1.name = sc2.name AND sc1.gender = sc2.gender AND sc1.birthday = sc2.birthday );
+
+	SELECT count(*) INTO scount FROM shanglifeecif.samecustomer;
+	--两要素疑似相同指姓名、证件号码一致 2
+	INSERT INTO shanglifeecif.samecustomer(
+  		sid,
+  		scustid,
+  		name,
+  		gender,
+  		birthday,
+  		idcard,
+  		Passport,
+  		Dlicense,
+  		OtherIdNumber,
+  		sameType
+
+) 
+SELECT 
+	row_number()OVER()+scount,
+	sc1.scustid,
+	sc1.name,
+	sc1.gender,
+	sc1.birthday,
+	CASE sc1.idtype WHEN '0' THEN sc1.idcard END AS idcard,
+	CASE sc1.idtype WHEN '1' THEN sc1.idcard END AS passport,
+	CASE sc1.idtype WHEN '3' THEN sc1.idcard END AS dlicense,
+	CASE  WHEN sc1.idtype <> '0' AND sc1.idtype <> '1' AND sc1.idtype <> '3' THEN sc1.idcard END AS otherIdnumber,
+	1
+FROM shanglifeecif.customertotaltemp sc1 
+
+WHERE sc1.idcard is not null and  EXISTS (SELECT 1 FROM shanglifeecif.customertotaltemp sc2 WHERE sc2.scustid!=sc1.scustid AND sc1.name = sc2.name AND sc1.idcard = sc2.idcard);
+
+	
+END;

+ 31 - 18
sql-achievement/存储过程/人寿测试环境使用sql整理/险种大类统计.sql

@@ -12,8 +12,30 @@ replication 1;
 CREATE OR REPLACE PROCEDURE shanglifeecif.riskcode_statistics() IS
 DECLARE
 BEGIN
-	delete from shanglifeecif.riskcode_statistics;
+     DELETE FROM shanglifeecif.riskcode_statistics; 
 	insert into shanglifeecif.riskcode_statistics (
+		id,
+		kindName,
+		khnum,
+		tatolprem
+	) --险种大类统计
+		SELECT 
+			row_number()over(),
+			temp.kindName,
+			temp.khnum,
+			temp.tatolprem
+		FROM (
+			select 
+				a.risk_categories_name AS kindName ,
+				count(*) AS khnum,
+				nvl(sum(a.prem),0) AS tatolprem  
+			FROM shanglifeecif.insurancearrangement a GROUP BY a.risk_categories_name
+	
+		) temp;
+
+
+
+	/*insert into shanglifeecif.riskcode_statistics (
 		id,
 		kindcode,
 		kindNAme,
@@ -30,24 +52,15 @@ BEGIN
 		WHEN 'L' THEN '人寿保险' 
 		WHEN 'H' THEN '健康险' 
 	END) AS kindname,
-	count(spi.idno) AS khnum,nvl(sum(spi.prem),0) AS totalPrem FROM shanghailifeecif.lmriskapp sl 
-	LEFT JOIN shanghailifeecif.policy_information spi ON spi.riskcode = sl.riskcode
+	count(spi.idno) AS khnum,nvl(sum(spi.prem),0) AS totalPrem FROM lmriskapp sl 
+	LEFT JOIN policy_information spi ON spi.riskcode = sl.riskcode
 	GROUP BY sl.kindcode
-	) temp
-	
-	
-	/*SELECT row_number()over(),tt.riskcode,tt.riskname,tt.khnum,tt.totalPrem FROM (
-	SELECT sl.riskcode,sl.riskname,count(spi.idno) AS khnum,sum(spi.prem) AS totalPrem FROM shanghailifeecif.lmriskapp sl 
-	LEFT JOIN shanghailifeecif.policy_information spi ON spi.riskcode = sl.riskcode
-	GROUP BY sl.riskcode,sl.riskname
-	) tt WHERE tt.khnum > 0 AND tt.totalPrem >0*/
-	
-	/*SELECT slk.kindcode,sum(temp.khnum),sum(totalPrem) FROM (
-		SELECT sl.riskcode,sl.riskname,count(spi.idno) AS khnum,sum(spi.prem) AS totalPrem FROM shanghailifeecif.lmriskapp sl 
-	LEFT JOIN shanghailifeecif.policy_information spi ON spi.riskcode = sl.riskcode
-	GROUP BY sl.riskcode,sl.riskname
-	) temp LEFT JOIN shanghailifeecif.lmriskapp slk ON slk.riskcode =  temp.riskcode
-	GROUP BY slk.kindcode*/
+	) temp;*/
 	
+	EXCEPTION
+			WHEN HIVE_EXCEPTION THEN 
+				 INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());
+			WHEN Others THEN
+				INSERT INTO shanglifeecif.exception_log(log_code,log_msg,log_time) VALUES (sqlcode(),sqlerrm(),sysdate());	
 			
 END	;