Kaynağa Gözat

车辆配置

WXF 3 yıl önce
ebeveyn
işleme
eaa29bf5e1

+ 5 - 5
api-common/src/main/java/api/common/pojo/constants/DictConstants.java

@@ -30,11 +30,11 @@ public class DictConstants {
     public static final String SCENE_ACCIDENT = "3";    // 交通事故
     public static final String SCENE_GENERAL = "4";    // 泛化场景
 
-    public static final String SENSOR_CAMERA = "1"; // 摄像头
-    public static final String SENSOR_OGT = "2"; // 完美传感器
-    public static final String SENSOR_LIDAR = "3"; // 激光雷达表
-    public static final String SENSOR_RADAR = "4"; // 毫米波雷达表
-    public static final String SENSOR_GPS = "5"; // GPS 传感器表
+    public static final String SENSOR_CAMERA = "camera"; // 摄像头
+    public static final String SENSOR_OGT = "ogt"; // 完美传感器
+    public static final String SENSOR_LIDAR = "lidar"; // 激光雷达表
+    public static final String SENSOR_RADAR = "radar"; // 毫米波雷达表
+    public static final String SENSOR_GPS = "gps"; // GPS 传感器表
 
     public static final String TASK_PENDING = "Pending"; // 任务执行状态,待执行
     public static final String TASK_RUNNING = "Running"; // 任务执行状态,运行中

+ 31 - 0
api-common/src/main/java/api/common/pojo/param/model/ConfigPageParam.java

@@ -0,0 +1,31 @@
+package api.common.pojo.param.model;
+
+import api.common.pojo.common.PageVO;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+public class ConfigPageParam extends PageVO {
+
+    //主键id
+    private String id;
+    //配置id
+    private String configId;
+    //配置名称
+    private String configName;
+    //配置描述
+    private String configDescription;
+    //车辆id
+    private String vehicleId;
+    //车辆名称
+    private String vehicleName;
+    //车辆描述
+    private String vehicleDescription;
+    //创建人id
+    private String createUserId;
+    //是否分享
+    @NotBlank(message = "share参数必传")
+    private String share;
+
+}

+ 21 - 0
api-common/src/main/java/api/common/pojo/po/model/ConfigPO.java

@@ -0,0 +1,21 @@
+package api.common.pojo.po.model;
+
+import api.common.pojo.common.CommonPO;
+import lombok.Data;
+
+@Data
+public class ConfigPO extends CommonPO {
+
+    //主键id
+    private String id;
+    //配置编码
+    private String configCode;
+    //配置名称
+    private String configName;
+    //车辆描述
+    private String description;
+    //车辆id
+    private String vehicleId;
+    //是否分享
+    private String share;
+}

+ 34 - 0
api-common/src/main/java/api/common/pojo/po/model/ConfigSensorPO.java

@@ -0,0 +1,34 @@
+package api.common.pojo.po.model;
+
+import api.common.pojo.common.CommonPO;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class ConfigSensorPO extends CommonPO {
+
+    //主键id
+    private String id;
+    //配置id
+    private String configId;
+    //传感器id
+    private String sensorId;
+    //传感器类型
+    private String sensorType;
+    //传感器横向偏移量(x轴)
+    private BigDecimal sensorX;
+    //传感器纵向偏移量(y轴)
+    private BigDecimal sensorY;
+    //传感器安装高度(z轴)
+    private BigDecimal sensorZ;
+    //传感器横摆角
+    private BigDecimal sensorH;
+    //传感器俯仰角
+    private BigDecimal sensorP;
+    //传感器横滚角
+    private BigDecimal sensorR;
+    //传感器端口
+    private int sensorPort;
+
+}

+ 36 - 0
api-common/src/main/java/api/common/pojo/vo/model/ConfigSensorVO.java

@@ -0,0 +1,36 @@
+package api.common.pojo.vo.model;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class ConfigSensorVO {
+
+    //主键id
+    private String id;
+    //配置id
+    private String configId;
+    //传感器id
+    private String sensorId;
+    //传感器名称
+    private String sensorName;
+    //传感器描述
+    private String sensorDescription;
+    //传感器类型
+    private String sensorType;
+    //传感器横向偏移量(x轴)
+    private BigDecimal sensorX;
+    //传感器纵向偏移量(y轴)
+    private BigDecimal sensorY;
+    //传感器安装高度(z轴)
+    private BigDecimal sensorZ;
+    //传感器横摆角
+    private BigDecimal sensorH;
+    //传感器俯仰角
+    private BigDecimal sensorP;
+    //传感器横滚角
+    private BigDecimal sensorR;
+    //传感器端口
+    private int sensorPort;
+}

+ 30 - 0
api-common/src/main/java/api/common/pojo/vo/model/ConfigVO.java

@@ -0,0 +1,30 @@
+package api.common.pojo.vo.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ConfigVO {
+
+    //主键id
+    private String id;
+    //配置编码
+    private String configCode;
+    //配置名称
+    private String configName;
+    //配置描述
+    private String configDescription;
+    //车辆id
+    private String vehicleId;
+    //车辆名称
+    private String vehicleName;
+    //车辆描述
+    private String vehicleDescription;
+    //是否分享
+    private String share;
+
+    //传感器配置列表
+    private List<ConfigSensorVO> configSensors;
+
+}

+ 5 - 0
api-common/src/main/java/api/common/util/ObjectUtil.java

@@ -2,7 +2,9 @@ package api.common.util;
 
 import api.common.pojo.vo.system.DictVO;
 import com.fasterxml.jackson.databind.JsonNode;
+import org.springframework.beans.BeanUtils;
 
+import java.security.PublicKey;
 import java.util.*;
 
 public class ObjectUtil {
@@ -103,4 +105,7 @@ public class ObjectUtil {
         return dictVO;
     }
 
+    public static void voToPo(Object source, Object target){
+        BeanUtils.copyProperties(source,target);
+    }
 }

+ 79 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/model/ctrl/ConfigCtrl.java

@@ -0,0 +1,79 @@
+package com.css.simulation.resource.model.ctrl;
+
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.param.model.ConfigPageParam;
+import api.common.pojo.po.model.ConfigPO;
+import api.common.pojo.vo.model.ConfigVO;
+import api.common.util.ObjectUtil;
+import com.css.simulation.resource.model.service.ConfigService;
+import com.github.pagehelper.PageInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+@Controller
+@RequestMapping("/config")
+public class ConfigCtrl {
+
+    @Autowired
+    ConfigService configService;
+
+    /**
+     * 获取列表
+     */
+    @RequestMapping("/getConfigPageList")
+    @ResponseBody
+    public ResponseBodyVO<PageInfo<ConfigVO>> getConfigPageList(@RequestBody @Validated ConfigPageParam pageParam){
+        ResponseBodyVO<PageInfo<ConfigVO>> response = new ResponseBodyVO<PageInfo<ConfigVO>>(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(configService.getConfigPageList(pageParam));
+        return response;
+    }
+
+
+    /**
+     * 根据id获取详情
+     */
+    @RequestMapping("/getConfigInfo")
+    @ResponseBody
+    public ResponseBodyVO<ConfigVO> getConfigInfo(@RequestBody ConfigPageParam pageParam){
+        ResponseBodyVO<ConfigVO> response = new ResponseBodyVO<ConfigVO>(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(configService.getConfigInfo(pageParam));
+        return response;
+    }
+
+    /**
+     * 新增、修改
+     */
+    @RequestMapping("/saveConfig")
+    @ResponseBody
+    public ResponseBodyVO<ConfigPO> saveConfig(@RequestBody ConfigVO configVO){
+        if(ObjectUtil.isNull(configVO)){
+            return new ResponseBodyVO(false, 500, "参数必传!",null);
+        }
+        ResponseBodyVO<ConfigPO> response = new ResponseBodyVO<ConfigPO>(ResponseBodyVO.Response.SUCCESS);
+        ConfigPO po = configService.saveConfig(configVO);
+        if(ObjectUtil.isNull(po.getId())){
+            return new ResponseBodyVO(false, 500, "配置名称重复!",null);
+        }
+        response.setInfo(po);
+        return response;
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delConfigById")
+    @ResponseBody
+    public ResponseBodyVO delConfigById(@RequestBody ConfigVO configVO){
+        int i = configService.delConfigById(configVO);
+        if(i>0){
+            return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+        }else{
+            return new ResponseBodyVO(false, 500, "删除失败!",null);
+        }
+    }
+}

+ 36 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/model/mapper/ConfigMapper.java

@@ -0,0 +1,36 @@
+package com.css.simulation.resource.model.mapper;
+
+
+import api.common.pojo.param.model.ConfigPageParam;
+import api.common.pojo.po.model.ConfigPO;
+import api.common.pojo.po.model.ConfigSensorPO;
+import api.common.pojo.vo.model.ConfigSensorVO;
+import api.common.pojo.vo.model.ConfigVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface ConfigMapper {
+
+
+    List<ConfigVO> getConfigPageList(ConfigPageParam pageParam);
+
+    ConfigVO getConfigInfo(ConfigPageParam pageParam);
+
+    List<ConfigSensorVO> getConfigSensors(ConfigPageParam pageParam);
+
+    List<ConfigVO> checkConfigName(ConfigPO configPO);
+
+    void insertConfig(ConfigPO configPO);
+
+    void updateConfig(ConfigPO configPO);
+
+    void delConfigSensors(ConfigPO configPO);
+
+    void insertConfigSensors(List<ConfigSensorPO> configSensorPOs);
+
+    int delConfigById(ConfigPO po);
+}

+ 114 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/model/service/ConfigService.java

@@ -0,0 +1,114 @@
+package com.css.simulation.resource.model.service;
+
+import api.common.pojo.constants.DictConstants;
+import api.common.pojo.param.model.ConfigPageParam;
+import api.common.pojo.po.model.ConfigPO;
+import api.common.pojo.po.model.ConfigSensorPO;
+import api.common.pojo.vo.model.ConfigSensorVO;
+import api.common.pojo.vo.model.ConfigVO;
+import api.common.util.ObjectUtil;
+import api.common.util.StringUtil;
+import api.common.util.TimeUtil;
+import com.css.simulation.resource.common.utils.AuthUtil;
+import com.css.simulation.resource.common.utils.PageUtil;
+import com.css.simulation.resource.model.mapper.CameraMapper;
+import com.css.simulation.resource.model.mapper.ConfigMapper;
+import com.github.pagehelper.PageInfo;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+@Service
+public class ConfigService {
+
+    @Autowired
+    ConfigMapper configMapper;
+
+    public PageInfo<ConfigVO> getConfigPageList(ConfigPageParam pageParam) {
+        PageUtil.setPageInfo(pageParam);
+        pageParam.setCreateUserId(AuthUtil.getCurrentUserId());
+        if(DictConstants.YES.equals(pageParam.getShare())){//公有查询去掉创建人id条件
+            pageParam.setCreateUserId(null);
+        }
+        List<ConfigVO> list = configMapper.getConfigPageList(pageParam);
+        return new PageInfo<>(list);
+    }
+
+    public ConfigVO getConfigInfo(ConfigPageParam pageParam) {
+        ConfigVO ConfigvehicleVO = configMapper.getConfigInfo(pageParam);
+        List<ConfigSensorVO> configSensors = configMapper.getConfigSensors(pageParam);
+        ConfigvehicleVO.setConfigSensors(configSensors);
+        return ConfigvehicleVO;
+    }
+
+    public ConfigPO saveConfig(ConfigVO configVO) {
+        //构建主表对象
+        ConfigPO configPO = new ConfigPO();
+        String currentUserId = AuthUtil.getCurrentUserId();
+        Timestamp currentTime = TimeUtil.getNowForMysql();
+        ObjectUtil.voToPo(configVO,configPO);
+        configPO.setCreateUserId(currentUserId);
+        configPO.setCreateTime(currentTime);
+        configPO.setModifyUserId(currentUserId);
+        configPO.setModifyTime(currentTime);
+        configPO.setIsDeleted(DictConstants.NO);
+        //单独处理配置描述
+        configPO.setDescription(configVO.getConfigDescription());
+        //名称校验
+        List<ConfigVO> list = configMapper.checkConfigName(configPO);
+        if(ObjectUtil.isNotNull(list)){
+            configPO.setId(null);
+            return configPO;
+        }
+        //主表主键
+        String configId = configPO.getId();
+        if(ObjectUtil.isNull(configId)){//新增
+            configId = StringUtil.getRandomUUID();
+            configPO.setId(configId);
+            configPO.setConfigCode(StringUtil.getRandomUUID());
+            configPO.setShare(DictConstants.NO);//私有
+            configMapper.insertConfig(configPO);
+        }else{//修改
+            configMapper.updateConfig(configPO);
+        }
+        //删除子表旧数据
+        configMapper.delConfigSensors(configPO);
+        //构建字表新数据
+        List<ConfigSensorVO> configSensorVOs = configVO.getConfigSensors();
+        List<ConfigSensorPO> configSensorPOs = new ArrayList<>();
+        if(ObjectUtil.isNotNull(configSensorVOs)){
+            configSensorVOs.forEach(vo -> {
+                ConfigSensorPO po = new ConfigSensorPO();
+                ObjectUtil.voToPo(vo,po);
+                po.setId(StringUtil.getRandomUUID());
+                //子表外键
+                po.setConfigId(configPO.getId());
+                po.setCreateUserId(currentUserId);
+                po.setCreateTime(currentTime);
+                po.setModifyUserId(currentUserId);
+                po.setModifyTime(currentTime);
+                po.setIsDeleted(DictConstants.NO);
+                configSensorPOs.add(po);
+            });
+        }
+        if(ObjectUtil.isNotNull(configSensorPOs)){
+            configMapper.insertConfigSensors(configSensorPOs);
+        }
+        return configPO;
+    }
+
+    public int delConfigById(ConfigVO vo) {
+        ConfigPO po = new ConfigPO();
+        ObjectUtil.voToPo(vo,po);
+        po.setIsDeleted(DictConstants.YES);
+        po.setModifyUserId(AuthUtil.getCurrentUserId());
+        po.setModifyTime(TimeUtil.getNowForMysql());
+        int i = configMapper.delConfigById(po);
+        return i;
+    }
+}

+ 204 - 0
simulation-resource-server/src/main/resources/mapper/model/ConfigMapper.xml

@@ -0,0 +1,204 @@
+<?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.css.simulation.resource.model.mapper.ConfigMapper" >
+
+    <resultMap id="ConfigVOMap" type="api.common.pojo.vo.model.ConfigVO">
+        <id column="ID" property="id" jdbcType="VARCHAR" />
+    </resultMap>
+
+    <resultMap id="ConfigSensorVOMap" type="api.common.pojo.vo.model.ConfigSensorVO">
+        <id column="ID" property="id" jdbcType="VARCHAR" />
+    </resultMap>
+
+    <select id="getConfigPageList" parameterType="api.common.pojo.param.model.ConfigPageParam" resultMap="ConfigVOMap">
+        select
+            c.id,
+            c.config_code,
+            c.config_name,
+            c.description as configDescription,
+            v.id as vehicleId,
+            v.vehicle_name,
+            v.description as vehicleDescription,
+            c.share
+        from model_config c
+        LEFT JOIN model_vehicle v on c.vehicle_id = v.id
+        WHERE c.is_deleted = '0' and c.share = #{share,jdbcType=VARCHAR}
+        <if test="configId != null and configId != ''">
+            and c.config_id like CONCAT('%',#{configId,jdbcType=VARCHAR},'%')
+        </if>
+        <if test="configName != null and configName != ''">
+            and c.config_name like CONCAT('%',#{configName,jdbcType=VARCHAR},'%')
+        </if>
+        <if test="configDescription != null and configDescription != ''">
+            and c.description like CONCAT('%',#{configDescription,jdbcType=VARCHAR},'%')
+        </if>
+        <if test="createUserId != null and createUserId != ''">
+            and c.create_user_id = #{createUserId,jdbcType=VARCHAR}
+        </if>
+        order by c.create_time desc
+    </select>
+
+    <select id="getConfigInfo" parameterType="api.common.pojo.param.model.ConfigPageParam" resultMap="ConfigVOMap">
+        SELECT
+            c.id,
+            c.config_code,
+            c.config_name,
+            c.description as configDescription,
+            v.vehicle_name,
+            v.description as vehicleDescription
+        FROM model_config c
+        LEFT JOIN model_vehicle v ON v.id = c.vehicle_id
+        WHERE c.is_deleted = '0'
+        and c.id = #{id,jdbcType=VARCHAR}
+    </select>
+
+    <select id="getConfigSensors" parameterType="api.common.pojo.param.model.ConfigPageParam" resultMap="ConfigSensorVOMap">
+        <!--摄像头-->
+        SELECT
+            r.id,r.config_id,r.sensor_id,
+            s.sensor_name, s.description as sensorDescription,
+            r.sensor_type,
+            r.sensor_x, r.sensor_y, r.sensor_z, r.sensor_h, r.sensor_p, r.sensor_r, r.sensor_port
+        FROM relation_config_sensor r
+        INNER JOIN model_sensor_camera s ON r.sensor_id = s.id
+        WHERE r.config_id = #{id,jdbcType=VARCHAR}
+        UNION
+        <!--完美传感器-->
+        SELECT
+            r.id,r.config_id,r.sensor_id,
+            s.sensor_name, s.description as sensorDescription,
+            r.sensor_type,
+            r.sensor_x, r.sensor_y, r.sensor_z, r.sensor_h, r.sensor_p, r.sensor_r, r.sensor_port
+        FROM relation_config_sensor r
+        INNER JOIN model_sensor_ogt s ON r.sensor_id = s.id
+        WHERE r.config_id = #{id,jdbcType=VARCHAR}
+        UNION
+        <!--激光雷达-->
+        SELECT
+            r.id,r.config_id,r.sensor_id,
+            s.sensor_name, s.description as sensorDescription,
+            r.sensor_type,
+            r.sensor_x, r.sensor_y, r.sensor_z, r.sensor_h, r.sensor_p, r.sensor_r, r.sensor_port
+        FROM relation_config_sensor r
+        INNER JOIN model_sensor_lidar s ON r.sensor_id = s.id
+        WHERE r.config_id = #{id,jdbcType=VARCHAR}
+        UNION
+        <!--GPS-->
+        SELECT
+            r.id,r.config_id,r.sensor_id,
+            s.sensor_name, s.description as sensorDescription,
+            r.sensor_type,
+            r.sensor_x, r.sensor_y, r.sensor_z, r.sensor_h, r.sensor_p, r.sensor_r, r.sensor_port
+        FROM relation_config_sensor r
+        INNER JOIN model_sensor_gps s ON r.sensor_id = s.id
+        WHERE r.config_id = #{id,jdbcType=VARCHAR}
+    </select>
+
+    <select id="checkConfigName" parameterType="api.common.pojo.po.model.ConfigPO" resultMap="ConfigVOMap">
+        select
+            id
+        from model_config
+        where is_deleted = '0' and share = '0'
+          and config_name = #{configName,jdbcType=VARCHAR}
+          and create_user_id = #{createUserId,jdbcType=VARCHAR}
+          and id &lt;&gt; #{id,jdbcType=VARCHAR}
+    </select>
+
+    <insert id="insertConfig" parameterType="api.common.pojo.po.model.ConfigPO">
+        insert into model_config(
+            id,
+            config_code,
+            config_name,
+            description,
+            vehicle_id,
+            share,
+            create_time,
+            modify_time,
+            create_user_id,
+            modify_user_id,
+            is_deleted
+        )
+        values(
+            #{id,jdbcType=VARCHAR},
+            #{configCode,jdbcType=VARCHAR},
+            #{configName,jdbcType=VARCHAR},
+            #{description,jdbcType=VARCHAR},
+            #{vehicleId,jdbcType=VARCHAR},
+            #{share,jdbcType=VARCHAR},
+            #{createTime,jdbcType=TIMESTAMP},
+            #{modifyTime,jdbcType=TIMESTAMP},
+            #{createUserId,jdbcType=VARCHAR},
+            #{modifyUserId,jdbcType=VARCHAR},
+            #{isDeleted,jdbcType=VARCHAR}
+        )
+    </insert>
+
+    <update id="updateConfig" parameterType="api.common.pojo.po.model.ConfigPO">
+        update model_config set
+            config_code = #{configCode,jdbcType=VARCHAR},
+            config_name = #{configName,jdbcType=VARCHAR},
+            description = #{description,jdbcType=VARCHAR},
+            vehicle_id = #{vehicleId,jdbcType=VARCHAR},
+
+            modify_time = #{modifyTime,jdbcType=TIMESTAMP},
+            modify_user_id = #{modifyUserId,jdbcType=VARCHAR}
+        where id = #{id,jdbcType=VARCHAR}
+    </update>
+
+    <update id="delConfigSensors" parameterType="api.common.pojo.po.model.ConfigPO">
+        update relation_config_sensor set
+            modify_time = #{modifyTime,jdbcType=TIMESTAMP},
+            modify_user_id = #{modifyUserId,jdbcType=VARCHAR},
+            is_deleted = '1'
+        where config_id = #{id,jdbcType=VARCHAR}
+    </update>
+
+    <insert id="insertConfigSensors">
+        insert into relation_config_sensor(
+            id,
+            config_id,
+            sensor_id,
+            sensor_type,
+            sensor_x,
+            sensor_y,
+            sensor_z,
+            sensor_h,
+            sensor_p,
+            sensor_r,
+            sensor_port,
+            create_time,
+            modify_time,
+            create_user_id,
+            modify_user_id,
+            is_deleted
+        ) values
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{item.id,jdbcType=VARCHAR},
+            #{item.configId,jdbcType=VARCHAR},
+            #{item.sensorId,jdbcType=VARCHAR},
+            #{item.sensorType,jdbcType=VARCHAR},
+            #{item.sensorX,jdbcType=DECIMAL},
+            #{item.sensorY,jdbcType=DECIMAL},
+            #{item.sensorZ,jdbcType=DECIMAL},
+            #{item.sensorH,jdbcType=DECIMAL},
+            #{item.sensorP,jdbcType=DECIMAL},
+            #{item.sensorR,jdbcType=DECIMAL},
+            #{item.sensorPort,jdbcType=INTEGER},
+            #{item.createTime,jdbcType=TIMESTAMP},
+            #{item.modifyTime,jdbcType=TIMESTAMP},
+            #{item.createUserId,jdbcType=VARCHAR},
+            #{item.modifyUserId,jdbcType=VARCHAR},
+            #{item.isDeleted,jdbcType=VARCHAR}
+            )
+        </foreach>
+    </insert>
+
+    <update id="delConfigById" parameterType="api.common.pojo.po.model.ConfigPO">
+        update model_config set
+          modify_time = #{modifyTime,jdbcType=TIMESTAMP},
+          modify_user_id = #{modifyUserId,jdbcType=VARCHAR},
+          is_deleted = #{isDeleted,jdbcType=VARCHAR}
+        where id = #{id,jdbcType=VARCHAR}
+    </update>
+</mapper>