﻿<%- include('../common', { 'meta': meta, 'content': content }) -%>
<%- include('./common', { 'meta': meta, 'content': content }) -%>
<%- include('../common-project', { 'meta': meta, 'content': content }) -%>
<%
   // 有效性
   var valid = content.option_valid;
   if(!valid) {
      return;
   }
   var datasetName = content.datasetName; 
   var dataName = content.data_name; 
   var name = content.name;
   var content = content;
   var UpperName = tools.firstUpper(tools.getCode(name));
   var lowerName = UpperName.toLowerCase();

   var parameterName = javaCode_tools.makeStoreWord(name,0,0);
   var label = content.label;

   var packagePaht = content.logic_name;
   var pathName = packagePaht.replace(/\./g,'/');
   //var path = getPathFromName('java', 'api', 'dto', datasetName+'.'+name);
   var path = '/provider/src/main/resources/mybatis/'+pathName;
   var nowDate = tools.formatDate(new Date(),"yyyy-MM-dd hh:mm:ss")
   if (!path){
      // 找不到对应路径就不生成
      return;
   }
   path += '/'+UpperName+'Mapper.xml';
   // 手动代码，二次渲染时取到内容
   var manualCodes = meta.manualCodes || {};
   var className = UpperName + 'Dto';
   var code = tools.makeHumpWord(content.data_name);
   var tableName = content.data_name;
   // 计算数据类型
   var itemTypeCd = 'java.lang.String';
   var dataTypeCd = content.data_type_cd;
   if(dataTypeCd == 'integer'){
      itemTypeCd = 'java.lang.Integer';
   }

   // 获得项目集合
   var sqlTypes = {
      'enum': 'TINYINT',
      'int8': 'TINYINT',
      'int16': 'SMALLINT',
      'int32': 'INT',
      'int64': 'BIGINT',
      'float32': 'FLOAT',
      'float64': 'DOUBLE',
      'datetime': 'DATETIME',
      'text8': 'TINYTEXT',
      'text16': 'TEXT',
      'text24': 'MEDIUMTEXT',
      'text32': 'LONGTEXT',
   };

   // 获得项目集合
   var items = new Array();
   var children = content.children
   if(children){
      var count = children.length;
      var columns = "";
      for(var i = 0; i < count; i++){
         var child = children[i];
         // console.log(child.data_name);
         if(child.option_valid){
            child.local_field_name = tools.firstLower(tools.makeHumpWord(child.data_name));
            child.local_data_name = tools.toUpper(child.data_name);
            child.local_field_type = javaCode_tools.getJavaType(child.data_type_cd);

            var typeCd = child.data_type_cd;
            var typeName = null;
            if (typeCd == 'string'){
               var length = child.data_length;
               if (child.option_fix) {
                  typeName = 'CHAR';
               } else {
                  typeName = 'VARCHAR';
               }
            } else { 
               typeName = sqlTypes[typeCd] || '[' + typeCd + ']';
            } 
            child.local_data_type = typeName;


            items.push(child);

            columns += child.data_name.toUpperCase();
            if(i<count-1){
                columns += ",";
            }
         }
      }
   }
   var itemCount = items.length;
   if(itemCount > 0){
      items[itemCount - 1].source_spliter = '';
   }
   // 设置输出
   meta.filename = path ;
-%>
<?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" >


<!-- 不使用namespace的话sql搜索定位会比较方便 -->
<mapper namespace="com.skong.system.consts.dto.<%= UpperName %>Dto">
	<resultMap id="<%= parameterName %>ResultMap" type="<%= UpperName %>Dto">
<% for(var i = 0; i < itemCount; i++){
   var item = items[i]; 
   if(item.name == 'object_id'){
      continue;
   }
-%>
       <result property="<%= tools.makeUnderlineWord(item.name,0,0) %>" column="<%= item.name.toUpperCase() %>"/>
<% } -%>
	</resultMap>

	<!-- 用于select查询公用抽取的列 -->
	<sql id="<%= UpperName %>Columns">
       <%= columns %>
	</sql>

	<!-- 新增数据-->
	<insert id="insert" parameterType="<%= UpperName %>Dto">
        INSERT INTO <%= dataName %> (
        	<include refid="<%= UpperName %>Columns" />
        ) VALUES (
<% for(var i = 0; i < itemCount; i++){
    var item = items[i]; 
    if(item.name == 'object_id'){
        continue;
    }
-%>
            #{<%= tools.makeUnderlineWord(item.name,0,0) %>,jdbcType=<%= item.local_data_type.toUpperCase() %>}
<% if(i<itemCount-1){
-%>
            ,
<% } -%>
<% } -%>
        )
	</insert>

		<!-- 根据主键删除数据-->
	<delete id="delete" parameterType="java.lang.String">
		DELETE FROM <%= dataName %> WHERE
			ID = #{id} 
	</delete>

	<!-- 修改数据-->
	<update id="update" parameterType="<%= UpperName %>Dto">
        UPDATE <%= dataName %>
		<set>
<% for(var i = 0; i < itemCount; i++){
    var item = items[i]; 
    if(item.name == 'object_id'){
        continue;
    }
-%>
<% if(item.name=='UNIT_VERSION'){
-%>
            <if test="<%= javaCode_tools.makeUnderlineWord(item.name,0,0) %>!=null">
	        <%= item.local_data_name.toUpperCase() %> = #{<%= javaCode_tools.makeUnderlineWord(item.name,0,0) %>+1,jdbcType=<%= item.local_data_type.toUpperCase() %>} 
	        </if>
<% } else{-%>
            <%= item.local_data_name.toUpperCase() %> = #{<%= javaCode_tools.makeUnderlineWord(item.name,0,0) %>,jdbcType=<%= item.local_data_type.toUpperCase() %>} 
<% } -%>
<% if(i<itemCount-1){
-%>
            ,
<% } -%>
<% } -%>
		</set>
        WHERE 
	        ID = #{id} 
	</update>

	<!-- 根据主键获得数据-->
    <select id="get" resultType="<%= UpperName %>Dto" parameterType="java.lang.String">
		SELECT <include refid="<%= UpperName %>Columns" />
		    FROM <%= dataName %>
	        WHERE 
		        ID = #{id} 
	</select>

	<!-- Where条件-->
	<sql id="list<%= UpperName %>Where">
		<where>
<% for(var i = 0; i < itemCount; i++){
    var item = items[i]; 
    if(item.name == 'object_id'){
        continue;
    }
-%>
            <if test="<%= javaCode_tools.makeUnderlineWord(item.name,0,0) %>!=null and <%= javaCode_tools.makeUnderlineWord(item.name,0,0) %>!=''">
				AND <%= item.local_data_name.toUpperCase() %> = #{<%= javaCode_tools.makeUnderlineWord(item.name,0,0) %>}
			</if>
<% } -%>
		</where>
	</sql>

	<!-- 通过查询条件返回列表(无分页)-->
	<select id="query<%= UpperName %>List" resultType="<%= UpperName %>Dto" parameterType="map">
		SELECT <include refid="<%= UpperName %>Columns" />
			FROM <%= dataName %>
		<include refid="list<%= UpperName %>Where"/>
	</select>

	<!-- 通过查询条件返回列表-->
	<select id="query<%= UpperName %>Page" resultType="<%= UpperName %>Dto" parameterType="map">
		SELECT <include refid="<%= UpperName %>Columns" />
			FROM <%= dataName %>
		<include refid="list<%= UpperName %>Where"/>
	</select>

</mapper>