<?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.devplatform.equipment.modules.link.dao.LinkLinkageRuleDao">
  <!-- Result Map -->
  <resultMap id="BaseResultMap" type="com.devplatform.equipment.modules.link.bean.LinkLinkageRule">
    <result column="id" property="id"/>
    <result column="name" property="name"/>
    <result column="resource_id" property="resourceId"/>
    <result column="sj_id" property="sjId"/>
    <result column="dz_id" property="dzId"/>
    <result column="execution_mode" property="executionMode"/>
    <result column="status" property="status"/>
    <result column="sys_sign" property="sysSign"/>
    <result column="deleted" property="deleted"/>
    <result column="create_user_id" property="createUserId"/>
    <result column="create_time" property="createTime"/>
    <result column="update_user_id" property="updateUserId"/>
    <result column="update_time" property="updateTime"/>
    <result column="byx1" property="byx1"/>
    <result column="byx2" property="byx2"/>
    <result column="byx3" property="byx3"/>
    <result column="sjName" property="sjName"/>
    <result column="resourceName" property="resourceName"/>
    <result column="stationName" property="stationName"/>
    <result column="deployLocation" property="deployLocation"/>
    <result column="station_id" property="stationId"/>
  </resultMap>

  <!-- link_linkage_rule table all fields -->
  <sql id="Base_Column_List">
        id,name,resource_id,sj_id,dz_id,execution_mode,status,sys_sign,deleted,create_user_id,create_time,update_user_id,update_time,byx1,byx2,byx3,sjName,station_id
    </sql>

  <!-- 公共查询条件 -->
  <sql id="Example_Where_Clause">
    where deleted=0
    <if test="id!=null and id!=''">and id = #{id}</if>
    <if test="name!=null and name!=''">and name = #{name}</if>
    <if test="resourceId!=null and resourceId!=''">and resource_id = #{resourceId}</if>
    <if test="sjId!=null and sjId!=''">and sj_id = #{sjId}</if>
    <if test="dzId!=null and dzId!=''">and dz_id = #{dzId}</if>
    <if test="executionMode!=null ">and execution_mode = #{executionMode}</if>
    <if test="status!=null ">and status = #{status}</if>
    <if test="sysSign!=null and sysSign!=''">and sys_sign = #{sysSign}</if>
    <if test="deleted!=null ">and deleted = #{deleted}</if>
    <if test="createUserId!=null and createUserId!=''">and create_user_id = #{createUserId}</if>
    <if test="createTime!=null ">and create_time = #{createTime}</if>
    <if test="updateUserId!=null and updateUserId!=''">and update_user_id = #{updateUserId}</if>
    <if test="updateTime!=null ">and update_time = #{updateTime}</if>
    <if test="byx1!=null and byx1!=''">and byx1 = #{byx1}</if>
    <if test="byx2!=null and byx2!=''">and byx2 = #{byx2}</if>
    <if test="byx3!=null and byx3!=''">and byx3 = #{byx3}</if>
    <if test="stationId!=null and stationId!=''">and station_id = #{stationId}</if>
  </sql>

  <select id="getListByPage" resultType="java.util.Map">
    select * from
    (SELECT llr.*, le.event_name AS event_name, sr.name AS resource_name, su.name AS user_name
    FROM link_linkage_rule llr
    LEFT JOIN link_event le ON le.id = llr.sj_id
    LEFT JOIN li_resource sr ON sr.id = llr.resource_id and sr.station_id = llr.station_id
    LEFT JOIN sys_user su ON su.user_id = llr.create_user_id and su.station_id = llr.station_id
    WHERE llr.deleted = 0
    <if test="params.name!=null and params.name!=''">
      and (INSTR(llr.name, #{params.name}) or INSTR(sr.name, #{params.name}))
    </if>
    <if test="params.stationId!=null and params.stationId!=''">
      and llr.station_id = #{params.stationId}
    </if>
    <if test="params.eventType!=null and params.eventType!=''">
      and INSTR(le.event_name, #{params.eventType})
    </if>) aa
    <if test="params.sort != null and params.sort != '' and params.order != null and params.order != ''">
      ORDER BY ${params.sort} ${params.order}
    </if>
  </select>

  <select id="queryById" resultMap="BaseResultMap">
    SELECT llr.*,
    le.event_name AS sjName,
    lr.name AS resourceName,
    lr.station_name AS stationName,
    lr.deploy_location AS deployLocation
    FROM link_linkage_rule llr
    LEFT JOIN link_event le ON le.id = llr.sj_id
    LEFT JOIN li_resource lr ON lr.id = llr.resource_id and lr.station_id = llr.station_id
    WHERE llr.id = #{id}
    <if test="stationId!=null and stationId!=''">and llr.station_id = #{stationId}</if>
  </select>

  <select id="getLinkRule" resultMap="linkRuleList">
    SELECT llr.*,
    lr.name AS resourceName,
    lr.station_name AS stationName,
    lr.deploy_location AS deployLocation,
    lr.type,
    lr.sub_code AS subCode,
    lr.station_id AS stationId,
    lr.line_name AS lineName,
    CONCAT(lr.line_name, '-', lr.station_name) AS lineStationName,
    sd.name AS typeName,
    le.event_name AS eventName
    FROM link_linkage_rule llr
    LEFT JOIN link_event le ON le.id = llr.sj_id AND le.deleted = 0
    LEFT JOIN li_resource lr ON lr.id = llr.resource_id AND lr.deleted = 0 and lr.station_id = llr.station_id
    LEFT JOIN sys_dictionary sd ON sd.id = lr.type AND sd.deleted = 0 and sd.station_id = llr.station_id
    WHERE llr.resource_id = #{resourceId} and llr.deleted = 0
    <if test="stationId!=null and stationId!=''">and llr.station_id = #{stationId}</if>
  </select>

  <resultMap id="linkRuleList" type="java.util.HashMap">
    <result column="id" property="id"/>
    <result column="name" property="name"/>
    <result column="resource_id" property="resourceId"/>
    <result column="sj_id" property="sjId"/>
    <result column="dz_id" property="dzId"/>
    <result column="execution_mode" property="executionMode"/>
    <result column="status" property="status"/>
    <result column="sys_sign" property="sysSign"/>
    <result column="deleted" property="deleted"/>
    <result column="create_user_id" property="createUserId"/>
    <result column="create_time" property="createTime"/>
    <result column="update_user_id" property="updateUserId"/>
    <result column="update_time" property="updateTime"/>
    <result column="byx1" property="byx1"/>
    <result column="byx2" property="byx2"/>
    <result column="byx3" property="byx3"/>
    <result column="eventName" property="eventName"/>
    <result column="resourceName" property="resourceName"/>
    <result column="stationName" property="stationName"/>
    <result column="deployLocation" property="deployLocation"/>
    <result column="type" property="type"/>
    <result column="subCode" property="subCode"/>
    <result column="stationId" property="stationId"/>
    <result column="lineName" property="lineName"/>
    <result column="lineStationName" property="lineStationName"/>
    <result column="typeName" property="typeName"/>
    <collection column="{id=id,stationId=stationId}" property="actions" select="getAction"/>
  </resultMap>

  <select id="getAction" resultMap="linkRuleAction">
    SELECT lra.id,
    lra.rule_id,
    lra.action_id,
    lra.sys_sign,
    lra.sort_value,
    lra.resource_id,
    la.params_name1,
    lra.params_value1,
    la.params_name2,
    lra.params_value2,
    la.action_info,
    lr.name AS resourceName,
    lr.station_name,
    lr.deploy_location,
    lr.address_code,
    lr.port,
    lr.username,
    lr.password,
    la.byx1 AS unit1,
    la.byx2 AS unit2,
    lr.type,
    lr.sub_code AS subCode,
    lr.station_id AS stationId,
    lr.line_name AS lineName,
    CONCAT(lr.line_name, '-', lr.station_name) AS lineStationName,
    sd.name AS typeName,
    lr.brand,
    lr.byx1 as channel
    FROM link_rule_action lra
    LEFT JOIN link_action la ON la.id = lra.action_id and la.station_id = lra.station_id
    LEFT JOIN li_resource lr ON lr.id = lra.resource_id and lr.station_id = lra.station_id
    LEFT JOIN sys_dictionary sd ON sd.id = lr.type and sd.station_id = lra.station_id
    WHERE lra.rule_id = #{id}
    <if test="stationId!=null and stationId!=''">and lra.station_id = #{stationId}</if>
    ORDER BY lra.sort_value
  </select>

  <resultMap id="linkRuleAction" type="java.util.HashMap">
    <result column="id" property="id"/>
    <result column="rule_id" property="ruleId"/>
    <result column="action_id" property="actionId"/>
    <result column="params_name1" property="paramsName1"/>
    <result column="params_name2" property="paramsName2"/>
    <result column="params_value1" property="paramsValue1"/>
    <result column="params_value2" property="paramsValue2"/>
    <result column="sys_sign" property="sysSign"/>
    <result column="sort_value" property="sortValue"/>
    <result column="resource_id" property="resourceId"/>
    <result column="resourceName" property="resourceName"/>
    <result column="deploy_location" property="deployLocation"/>
    <result column="station_name" property="stationName"/>
    <result column="action_info" property="actionInfo"/>
    <result column="address_code" property="addressCode"/>
    <result column="port" property="port"/>
    <result column="username" property="username"/>
    <result column="password" property="password"/>
    <result column="unit1" property="unit1"/>
    <result column="unit2" property="unit2"/>
    <result column="type" property="type"/>
    <result column="subCode" property="subCode"/>
    <result column="stationId" property="stationId"/>
    <result column="lineName" property="lineName"/>
    <result column="lineStationName" property="lineStationName"/>
    <result column="typeName" property="typeName"/>
    <result column="brand" property="brand"/>
    <result column="channel" property="channel"/>
  </resultMap>
</mapper>