785834757 1 年之前
父節點
當前提交
20e9a6c211

+ 20 - 0
src/main/java/com/ydtech/constants/enums/dict/agreement/ProductsType.java

@@ -5,6 +5,9 @@ import com.ydtech.constants.enums.dict.IBaseEnum;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @AllArgsConstructor
 @Getter
 @DictEnum(key = "productsType", desc = "产品代码")
@@ -33,4 +36,21 @@ public enum ProductsType implements IBaseEnum {
         }
         return null;
     }
+
+    //根据险种返回risk信息
+    public static List<String> getRisks(String productCode){
+        List<String> risks = new ArrayList<>();
+        if(ProductsType.PT_0330.getCode().equals(productCode)
+                || ProductsType.PT_0330034002.getCode().equals(productCode)
+                || ProductsType.PT_0330034001.getCode().equals(productCode)){
+            risks.add("0507");
+        }
+        if(ProductsType.PT_034002.getCode().equals(productCode)
+                || ProductsType.PT_034001.getCode().equals(productCode)
+                || ProductsType.PT_0330034002.getCode().equals(productCode)
+                || ProductsType.PT_0330034001.getCode().equals(productCode)){
+            risks.add("0510");
+        }
+        return risks;
+    }
 }

+ 109 - 0
src/main/java/com/ydtech/modules/order/controller/ClauseController.java

@@ -0,0 +1,109 @@
+package com.ydtech.modules.order.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.constants.enums.dict.agreement.ProductsType;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.order.entity.po.InsCompanyClause;
+import com.ydtech.modules.order.entity.po.InsCompanyClauseQuoteInfoMap;
+import com.ydtech.modules.order.entity.po.InsCompanyClauseReplace;
+import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
+import com.ydtech.modules.order.entity.vo.InsCompanyClauseQueryVo;
+import com.ydtech.modules.order.entity.vo.InsCompanyClauseSaveVo;
+import com.ydtech.modules.order.entity.vo.InsCompanyClauseVo;
+import com.ydtech.modules.order.service.InsCompanyClauseService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.lang.reflect.Field;
+import java.util.List;
+
+import static com.ydtech.core.page.PageRequest.buildPageRequest;
+
+/**
+ * 特约条款
+ */
+@Api(tags = "特约条款")
+@RestController
+@RequestMapping("/clause")
+public class ClauseController extends BaseController {
+
+    @Autowired
+    InsCompanyClauseService insCompanyClauseService;
+
+
+    @PostMapping("/updateClause")
+    @ApiOperation("修改特约")
+    public HttpResult updateClause(@RequestBody InsCompanyClauseSaveVo saveVo){
+
+        return insCompanyClauseService.updateClause(saveVo) ? HttpResult.ok("修改成功") : HttpResult.error("修改失败");
+    }
+
+    @PostMapping("/getInfoMaps")
+    @ApiOperation("获取对象属性")
+    public HttpResult getInfoMaps(){
+        return HttpResult.ok(insCompanyClauseService.getInfoMaps());
+    }
+
+
+    @PostMapping("/getClausePage")
+    @ApiOperation("获取保险公司特别约定列表")
+    public HttpResult getClausePage(@RequestBody InsCompanyClauseQueryVo queryVo){
+        Page page = buildPageRequest(queryVo.getPageDto());
+        Page<InsCompanyClauseVo> clausePageByParam = insCompanyClauseService.getClausePageByParam(page, queryVo);
+        return HttpResult.ok(clausePageByParam);
+    }
+
+
+
+    @PostMapping("/getClauseByCompanyId")
+    @ApiOperation("根据参数获取保险公司的特别约定")
+    public HttpResult getCertificateInfo(@RequestBody InsCompanyClauseQueryVo queryVo) throws IllegalAccessException {
+        //设置险种信息
+        queryVo.setRiskCodes(ProductsType.getRisks(queryVo.getProductCode()));
+
+        List<InsCompanyClauseVo> byCompnayId = insCompanyClauseService.getClauseByParam(queryVo);
+        byCompnayId.forEach(item->{
+            item.setReplaceContent(item.getClauseContent());
+            if(item.getReplaces().size() > 0){
+                for(int i=0;i<item.getReplaces().size();i++){
+                    item.getInfoMap().get(i).setReplaceSymbol(item.getReplaces().get(i).getReplaceSymbol());
+                }
+            }
+        });
+
+
+        byCompnayId.forEach(item->{
+            item.getInfoMap().forEach(map->{
+                try {
+                    String fieldValue = "_";
+                    if(!map.getGroupType().equals("none")){
+                        fieldValue = getFieldValue(queryVo.getQuoteInfoVo(),map);
+                    }
+                    String replaceContent = item.getReplaceContent();
+                    item.setReplaceContent(replaceContent.replaceFirst(map.getReplaceSymbol(), fieldValue));
+                } catch (NoSuchFieldException | IllegalAccessException e) {
+                    throw new SystemException("获取实体对象异常");
+                }
+            });
+        });
+        return HttpResult.ok(byCompnayId);
+    }
+
+    public String getFieldValue(Object obj, InsCompanyClauseQuoteInfoMap map) throws NoSuchFieldException, IllegalAccessException {
+        Field field = obj.getClass().getDeclaredField(map.getGroupType());
+        field.setAccessible(true);
+        Object o = field.get(obj);
+        Field declaredField = o.getClass().getDeclaredField(map.getMapFiled());
+        declaredField.setAccessible(true);
+        Object o1 = declaredField.get(o);
+        return o1.toString();
+    }
+
+}

+ 19 - 0
src/main/java/com/ydtech/modules/order/dao/InsCompanyClauseMapper.java

@@ -0,0 +1,19 @@
+package com.ydtech.modules.order.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.modules.order.entity.InsBusinessInsurance;
+import com.ydtech.modules.order.entity.po.InsCompanyClause;
+import com.ydtech.modules.order.entity.vo.InsCompanyClauseQueryVo;
+import com.ydtech.modules.order.entity.vo.InsCompanyClauseVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface InsCompanyClauseMapper extends BaseMapper<InsCompanyClause> {
+
+    public List<InsCompanyClauseVo> getClauseByParam(@Param("param") InsCompanyClauseQueryVo param);
+
+    public Page<InsCompanyClauseVo> getClausePageByParam(Page page, @Param("param") InsCompanyClauseQueryVo param);
+
+}

+ 15 - 0
src/main/java/com/ydtech/modules/order/dao/InsCompanyClauseQuoteInfoMapMapper.java

@@ -0,0 +1,15 @@
+package com.ydtech.modules.order.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.modules.order.entity.po.InsCompanyClause;
+import com.ydtech.modules.order.entity.po.InsCompanyClauseQuoteInfoMap;
+import com.ydtech.modules.order.entity.vo.InsCompanyClauseQueryVo;
+import com.ydtech.modules.order.entity.vo.InsCompanyClauseVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface InsCompanyClauseQuoteInfoMapMapper extends BaseMapper<InsCompanyClauseQuoteInfoMap> {
+
+}

+ 9 - 0
src/main/java/com/ydtech/modules/order/dao/InsCompanyClauseReplaceMapper.java

@@ -0,0 +1,9 @@
+package com.ydtech.modules.order.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.order.entity.po.InsCompanyClauseQuoteInfoMap;
+import com.ydtech.modules.order.entity.po.InsCompanyClauseReplace;
+
+public interface InsCompanyClauseReplaceMapper extends BaseMapper<InsCompanyClauseReplace> {
+
+}

+ 2 - 0
src/main/java/com/ydtech/modules/order/entity/crawler/response/CrawlerQuoteResponse.java

@@ -16,6 +16,8 @@ import java.util.Map;
 import java.util.stream.Collectors;
 
 @EqualsAndHashCode(callSuper = true)
+@AllArgsConstructor
+@NoArgsConstructor
 @Data
 public class CrawlerQuoteResponse extends CrawlerBaseResponse {
 

+ 36 - 0
src/main/java/com/ydtech/modules/order/entity/po/InsCompanyClause.java

@@ -0,0 +1,36 @@
+package com.ydtech.modules.order.entity.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@TableName(value = "ins_company_clause")
+@Data
+@ApiModel("特别约定表")
+public class InsCompanyClause {
+    @TableId(value = "id")
+    private String id;
+
+    @TableField(value = "risk_code")
+    @ApiModelProperty("险种代码")
+    private String riskCode;
+
+    @TableField(value = "company_id")
+    @ApiModelProperty("保险公司id")
+    private String companyId;
+
+    @TableField(value = "clause_code")
+    @ApiModelProperty("特约code")
+    private String clauseCode;
+
+    @TableField(value = "clause_name")
+    @ApiModelProperty("特约名称")
+    private String clauseName;
+
+    @TableField(value = "clause_content")
+    @ApiModelProperty("特约内容")
+    private String clauseContent;
+}

+ 33 - 0
src/main/java/com/ydtech/modules/order/entity/po/InsCompanyClauseQuoteInfoMap.java

@@ -0,0 +1,33 @@
+package com.ydtech.modules.order.entity.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@TableName(value = "ins_company_clause_quote_info_map")
+@Data
+@ApiModel("实体映射")
+public class InsCompanyClauseQuoteInfoMap {
+    @TableId(value = "id")
+    private String id;
+
+    @TableField(value = "group_type")
+    @ApiModelProperty("分组")
+    private String groupType;
+
+    @TableField(value = "model_name")
+    @ApiModelProperty("名称")
+    private String modelName;
+
+    @TableField(value = "map_filed")
+    @ApiModelProperty("字段名")
+    private String mapFiled;
+
+    @TableField(exist = false)
+    @ApiModelProperty("替换的字符")
+    private String replaceSymbol;
+
+}

+ 33 - 0
src/main/java/com/ydtech/modules/order/entity/po/InsCompanyClauseReplace.java

@@ -0,0 +1,33 @@
+package com.ydtech.modules.order.entity.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@TableName(value = "ins_company_clause_replace")
+@Data
+@ApiModel("特约替换绑定")
+public class InsCompanyClauseReplace {
+    @TableId(value = "id")
+    private String id;
+
+    @TableField(value = "field_id")
+    @ApiModelProperty("字段id")
+    private String fieldId;
+
+    @TableField(value = "clause_id")
+    @ApiModelProperty("条款id")
+    private String clauseId;
+
+    @TableField(value = "replace_symbol")
+    @ApiModelProperty("需要替换的符号")
+    private String replaceSymbol;
+
+    @TableField(value = "sort")
+    @ApiModelProperty("排序")
+    private String sort;
+
+}

+ 28 - 0
src/main/java/com/ydtech/modules/order/entity/vo/InsCompanyClauseQueryVo.java

@@ -0,0 +1,28 @@
+package com.ydtech.modules.order.entity.vo;
+
+import com.ydtech.core.page.PageRequest;
+import com.ydtech.modules.ins.model.ya.YaQuoteInfoVo;
+import com.ydtech.modules.order.entity.po.InsCompanyClause;
+import com.ydtech.modules.order.entity.po.InsCompanyClauseQuoteInfoMap;
+import com.ydtech.modules.order.entity.po.InsCompanyClauseReplace;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class InsCompanyClauseQueryVo extends PageRequest {
+
+    //产品id
+    private String productCode;
+
+    //保险公司id
+    private String companyId;
+
+    private YaQuoteInfoVo quoteInfoVo;
+
+    private List<String> riskCodes;
+
+    //特约id
+    private String clauseId;
+
+}

+ 19 - 0
src/main/java/com/ydtech/modules/order/entity/vo/InsCompanyClauseSaveVo.java

@@ -0,0 +1,19 @@
+package com.ydtech.modules.order.entity.vo;
+
+import com.ydtech.modules.order.entity.po.InsCompanyClause;
+import com.ydtech.modules.order.entity.po.InsCompanyClauseQuoteInfoMap;
+import com.ydtech.modules.order.entity.po.InsCompanyClauseReplace;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class InsCompanyClauseSaveVo extends InsCompanyClause {
+
+    private String clauseId;
+
+    private String clauseContent;
+
+    List<InsCompanyClauseReplace> replaces;
+
+}

+ 19 - 0
src/main/java/com/ydtech/modules/order/entity/vo/InsCompanyClauseVo.java

@@ -0,0 +1,19 @@
+package com.ydtech.modules.order.entity.vo;
+
+import com.ydtech.modules.order.entity.po.InsCompanyClause;
+import com.ydtech.modules.order.entity.po.InsCompanyClauseQuoteInfoMap;
+import com.ydtech.modules.order.entity.po.InsCompanyClauseReplace;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class InsCompanyClauseVo extends InsCompanyClause {
+
+    private String replaceContent;
+
+    List<InsCompanyClauseReplace> replaces;
+
+    List<InsCompanyClauseQuoteInfoMap> infoMap;
+
+}

+ 27 - 0
src/main/java/com/ydtech/modules/order/service/InsCompanyClauseService.java

@@ -0,0 +1,27 @@
+package com.ydtech.modules.order.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.order.entity.InsBusinessInsurance;
+import com.ydtech.modules.order.entity.po.InsCompanyClause;
+import com.ydtech.modules.order.entity.po.InsCompanyClauseQuoteInfoMap;
+import com.ydtech.modules.order.entity.vo.InsCompanyClauseQueryVo;
+import com.ydtech.modules.order.entity.vo.InsCompanyClauseSaveVo;
+import com.ydtech.modules.order.entity.vo.InsCompanyClauseVo;
+
+import java.util.List;
+
+public interface InsCompanyClauseService  extends IService<InsCompanyClause> {
+
+    List<InsCompanyClauseVo> getClauseByParam(InsCompanyClauseQueryVo insCompanyClauseQueryVo);
+
+    Page<InsCompanyClauseVo> getClausePageByParam(Page page, InsCompanyClauseQueryVo insCompanyClauseQueryVo);
+
+    List<InsCompanyClauseQuoteInfoMap> getInfoMaps();
+
+    /**
+     * 修改特约
+     * @return
+     */
+    boolean updateClause(InsCompanyClauseSaveVo saveVo);
+}

+ 76 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsCompanyClauseServiceImpl.java

@@ -0,0 +1,76 @@
+package com.ydtech.modules.order.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.order.dao.InsBusinessInsuranceMapper;
+import com.ydtech.modules.order.dao.InsCompanyClauseMapper;
+import com.ydtech.modules.order.dao.InsCompanyClauseQuoteInfoMapMapper;
+import com.ydtech.modules.order.dao.InsCompanyClauseReplaceMapper;
+import com.ydtech.modules.order.entity.InsBusinessInsurance;
+import com.ydtech.modules.order.entity.po.InsCompanyClause;
+import com.ydtech.modules.order.entity.po.InsCompanyClauseQuoteInfoMap;
+import com.ydtech.modules.order.entity.po.InsCompanyClauseReplace;
+import com.ydtech.modules.order.entity.vo.InsCompanyClauseQueryVo;
+import com.ydtech.modules.order.entity.vo.InsCompanyClauseSaveVo;
+import com.ydtech.modules.order.entity.vo.InsCompanyClauseVo;
+import com.ydtech.modules.order.service.InsBusinessInsuranceService;
+import com.ydtech.modules.order.service.InsCompanyClauseService;
+import com.ydtech.utils.idgen.IdGenerate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Objects;
+
+@Service
+public class InsCompanyClauseServiceImpl extends ServiceImpl<InsCompanyClauseMapper, InsCompanyClause>
+        implements InsCompanyClauseService {
+    @Autowired
+    InsCompanyClauseQuoteInfoMapMapper insCompanyClauseQuoteInfoMapMapper;
+
+    @Autowired
+    InsCompanyClauseReplaceMapper insCompanyClauseReplaceMapper;
+
+    @Override
+    public List<InsCompanyClauseVo> getClauseByParam(InsCompanyClauseQueryVo insCompanyClauseQueryVo) {
+        return baseMapper.getClauseByParam(insCompanyClauseQueryVo);
+    }
+
+    @Override
+    public Page<InsCompanyClauseVo> getClausePageByParam(Page page, InsCompanyClauseQueryVo insCompanyClauseQueryVo) {
+        return baseMapper.getClausePageByParam(page,insCompanyClauseQueryVo);
+    }
+
+    @Override
+    public List<InsCompanyClauseQuoteInfoMap> getInfoMaps() {
+        return insCompanyClauseQuoteInfoMapMapper.selectList(new LambdaQueryWrapper<>());
+    }
+
+    @Override
+    @Transactional
+    public boolean updateClause(InsCompanyClauseSaveVo saveVo) {
+        InsCompanyClause insCompanyClause = baseMapper.selectOne(new LambdaQueryWrapper<InsCompanyClause>()
+                .eq(InsCompanyClause::getId, saveVo.getClauseId()));
+        if(Objects.isNull(insCompanyClause))
+            throw new SystemException("无法找到该特约");
+
+        insCompanyClause.setClauseContent(saveVo.getClauseContent());
+        this.updateById(insCompanyClause);
+
+
+
+        //删除replaces表
+        int delete = insCompanyClauseReplaceMapper.delete(new LambdaQueryWrapper<InsCompanyClauseReplace>()
+                .eq(InsCompanyClauseReplace::getClauseId, insCompanyClause.getId()));
+
+        saveVo.getReplaces().forEach(item->{
+            item.setId(IdGenerate.nextId());
+            item.setClauseId(insCompanyClause.getId());
+            insCompanyClauseReplaceMapper.insert(item);
+        });
+        return true;
+    }
+}

+ 2 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsCrawlerOrderServiceImpl.java

@@ -38,6 +38,7 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
 
 import java.math.BigDecimal;
@@ -247,6 +248,7 @@ public class InsCrawlerOrderServiceImpl implements InsCrawlerOrderService {
 
 
     @Override
+    @Transactional
     public HttpResult<Object> verifyPayment(String subOrderNo) {
         InsAreaCompany insAreaCompany = insAreaCompanyService.getById(subOrderNo);
         // 请求地址

+ 85 - 0
src/main/resources/mapper/modules/order/InsCompanyClauseMapper.xml

@@ -0,0 +1,85 @@
+<?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.ydtech.modules.order.dao.InsCompanyClauseMapper">
+
+    <resultMap id="InsCompanyClauseMap" type="com.ydtech.modules.order.entity.vo.InsCompanyClauseVo">
+        <id property="id" column="id" />
+        <result property="riskCode" column="risk_code" />
+        <result property="companyId" column="company_id" />
+        <result property="clauseCode" column="clause_code" />
+        <result property="clauseName" column="clause_name" />
+        <result property="clauseContent" column="clause_content" />
+        <collection property="replaces" ofType="com.ydtech.modules.order.entity.po.InsCompanyClauseReplace">
+            <result property="fieldId" column="field_id" />
+            <result property="clauseId" column="clause_id" />
+            <result property="replaceSymbol" column="replace_symbol" />
+            <result property="sort" column="sort" />
+        </collection>
+
+        <collection property="infoMap" ofType="com.ydtech.modules.order.entity.po.InsCompanyClauseQuoteInfoMap">
+            <result property="id" column="imid"/>
+            <result property="groupType" column="group_type" />
+            <result property="modelName" column="model_name" />
+            <result property="mapFiled" column="map_filed" />
+        </collection>
+    </resultMap>
+
+    <select id="getClauseByParam" resultMap="InsCompanyClauseMap">
+        SELECT
+            *,
+            im.id as imid
+        FROM
+            ins_company_clause ic
+                LEFT JOIN ins_company_clause_replace ir ON ir.clause_id = ic.id
+                LEFT JOIN ins_company_clause_quote_info_map im ON ir.field_id = im.id
+        WHERE
+            1=1
+        <if test="param.companyId != null and param.companyId != ''">
+            AND ic.company_id = #{param.companyId}
+        </if>
+
+        <if test="param.clauseId != null and param.clauseId != ''">
+            AND ic.id = #{param.clauseId}
+        </if>
+          <if test="param.riskCodes != null and param.riskCodes.size() > 0">
+          AND (
+                <foreach item="code" index="index" collection="param.riskCodes" open="" separator=" OR " close="">
+                    (ic.risk_code = #{code})
+                </foreach>)
+          </if>
+        ORDER BY
+            CASE WHEN ir.sort IS NULL THEN 1 ELSE 0 END,
+            ir.sort ASC
+    </select>
+
+
+    <select id="getClausePageByParam" resultMap="InsCompanyClauseMap">
+        SELECT
+        *,
+        im.id as imid
+        FROM
+        ins_company_clause ic
+        LEFT JOIN ins_company_clause_replace ir ON ir.clause_id = ic.id
+        LEFT JOIN ins_company_clause_quote_info_map im ON ir.field_id = im.id
+        WHERE
+        1=1
+        <if test="param.companyId != null and param.companyId != ''">
+            AND ic.company_id = #{param.companyId}
+        </if>
+
+        <if test="param.clauseId != null and param.clauseId != ''">
+            AND ic.id = #{param.clauseId}
+        </if>
+        <if test="param.riskCodes != null and param.riskCodes.size() > 0">
+            AND (
+            <foreach item="code" index="index" collection="param.riskCodes" open="" separator=" OR " close="">
+                (ic.risk_code = #{code})
+            </foreach>)
+        </if>
+        ORDER BY
+        CASE WHEN ir.sort IS NULL THEN 1 ELSE 0 END,
+        ir.sort ASC
+    </select>
+</mapper>