新增 候选者合规

This commit is contained in:
2026-01-15 11:19:11 +08:00
parent 1648e7caf1
commit 8fe417ed48
8 changed files with 398 additions and 4 deletions

View File

@@ -0,0 +1,95 @@
package com.vetti.web.controller.hotake;
import com.vetti.common.annotation.Log;
import com.vetti.common.core.controller.BaseController;
import com.vetti.common.core.domain.AjaxResult;
import com.vetti.common.core.page.TableDataInfo;
import com.vetti.common.enums.BusinessType;
import com.vetti.common.utils.SecurityUtils;
import com.vetti.common.utils.poi.ExcelUtil;
import com.vetti.hotake.domain.HotakeCandidateCompliance;
import com.vetti.hotake.domain.dto.CandidateComplianceDto;
import com.vetti.hotake.service.IHotakeCandidateComplianceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@Api(tags ="候选者合规")
@RestController
@RequestMapping("/hotake/candidateCompliance")
public class HotakeCandidateComplianceController extends BaseController
{
@Autowired
private IHotakeCandidateComplianceService hotakeCandidateComplianceService;
@ApiOperation("查询候选者合规列表")
@PreAuthorize("@ss.hasPermi('hotake:candidateCompliance:list')")
@GetMapping("/list")
public TableDataInfo list(HotakeCandidateCompliance hotakeCandidateCompliance)
{
startPage();
List<CandidateComplianceDto> list = hotakeCandidateComplianceService.selectHotakeCandidateComplianceList(hotakeCandidateCompliance);
return getDataTable(list);
}
@ApiOperation("获取当前登录人候选者合规列表")
@GetMapping("/listByLoginUser")
public AjaxResult listByLoginUser()
{
HotakeCandidateCompliance query = new HotakeCandidateCompliance();
query.setUserId(SecurityUtils.getUserId());
List<CandidateComplianceDto> list = hotakeCandidateComplianceService.selectHotakeCandidateComplianceList(query);
return AjaxResult.success(list);
}
// @ApiOperation("导出候选者合规列表")
// @PreAuthorize("@ss.hasPermi('hotake:candidateCompliance:export')")
// @Log(title = "候选者合规", businessType = BusinessType.EXPORT)
// @GetMapping("/export")
// public AjaxResult export(HotakeCandidateCompliance hotakeCandidateCompliance)
// {
// List<HotakeCandidateCompliance> list = hotakeCandidateComplianceService.selectHotakeCandidateComplianceList(hotakeCandidateCompliance);
// ExcelUtil<HotakeCandidateCompliance> util = new ExcelUtil<HotakeCandidateCompliance>(HotakeCandidateCompliance.class);
// return util.exportExcel(list, "候选者合规数据");
// }
@ApiOperation("获取候选者合规详细信息")
@PreAuthorize("@ss.hasPermi('hotake:candidateCompliance:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return AjaxResult.success(hotakeCandidateComplianceService.selectHotakeCandidateComplianceById(id));
}
@ApiOperation("新增候选者合规")
@PreAuthorize("@ss.hasPermi('hotake:candidateCompliance:add')")
@Log(title = "候选者合规", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestPart("file") MultipartFile file, HotakeCandidateCompliance hotakeCandidateCompliance)
{
return toAjax(hotakeCandidateComplianceService.insertHotakeCandidateCompliance(file, hotakeCandidateCompliance));
}
@ApiOperation("修改候选者合规")
@PreAuthorize("@ss.hasPermi('hotake:candidateCompliance:edit')")
@Log(title = "候选者合规", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestPart(name = "file", required = false) MultipartFile file, HotakeCandidateCompliance hotakeCandidateCompliance)
{
return toAjax(hotakeCandidateComplianceService.updateHotakeCandidateCompliance(file, hotakeCandidateCompliance));
}
@ApiOperation("删除候选者合规")
@PreAuthorize("@ss.hasPermi('hotake:candidateCompliance:remove')")
@Log(title = "候选者合规", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(hotakeCandidateComplianceService.deleteHotakeCandidateComplianceByIds(ids));
}
}

View File

@@ -0,0 +1,36 @@
package com.vetti.hotake.domain;
import lombok.Data;
import lombok.experimental.Accessors;
import io.swagger.annotations.ApiModelProperty;
import com.vetti.common.annotation.Excel;
import com.vetti.common.core.domain.BaseEntity;
@Data
public class HotakeCandidateCompliance extends BaseEntity
{
private static final long serialVersionUID = 1L;
@ApiModelProperty("主键ID")
private Long id;
@ApiModelProperty("用户合规项ID关联 sys_user.id")
@Excel(name = "用户合规项ID")
private Long userId;
@ApiModelProperty("附件ID关联 hotake_sys_file.id")
@Excel(name = "附件ID")
private Long fileId;
@ApiModelProperty("类型名")
@Excel(name = "类型名")
private String typeName;
@ApiModelProperty("描述")
@Excel(name = "描述")
private String description;
@ApiModelProperty("删除状态0正常 2删除")
private String delFlag;
}

View File

@@ -0,0 +1,27 @@
package com.vetti.hotake.domain.dto;
import cn.hutool.core.bean.BeanUtil;
import com.vetti.hotake.domain.HotakeCandidateCompliance;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author ID
* @date 2026/1/15 11:03
*/
@Data
public class CandidateComplianceDto extends HotakeCandidateCompliance {
private static final long serialVersionUID = 1L;
@ApiModelProperty("附件URL")
private String fileUrl;
public static CandidateComplianceDto build(HotakeCandidateCompliance data, String fileUrl) {
CandidateComplianceDto dto = new CandidateComplianceDto();
BeanUtil.copyProperties(data, dto);
dto.setFileUrl(fileUrl);
return dto;
}
}

View File

@@ -0,0 +1,20 @@
package com.vetti.hotake.mapper;
import java.util.List;
import com.vetti.hotake.domain.HotakeCandidateCompliance;
public interface HotakeCandidateComplianceMapper
{
public HotakeCandidateCompliance selectHotakeCandidateComplianceById(Long id);
public List<HotakeCandidateCompliance> selectHotakeCandidateComplianceList(HotakeCandidateCompliance hotakeCandidateCompliance);
public int insertHotakeCandidateCompliance(HotakeCandidateCompliance hotakeCandidateCompliance);
public int updateHotakeCandidateCompliance(HotakeCandidateCompliance hotakeCandidateCompliance);
public int deleteHotakeCandidateComplianceById(Long id);
public int deleteHotakeCandidateComplianceByIds(Long[] ids);
}

View File

@@ -0,0 +1,21 @@
package com.vetti.hotake.service;
import java.util.List;
import com.vetti.hotake.domain.HotakeCandidateCompliance;
import com.vetti.hotake.domain.dto.CandidateComplianceDto;
import org.springframework.web.multipart.MultipartFile;
public interface IHotakeCandidateComplianceService
{
public CandidateComplianceDto selectHotakeCandidateComplianceById(Long id);
public List<CandidateComplianceDto> selectHotakeCandidateComplianceList(HotakeCandidateCompliance hotakeCandidateCompliance);
public int insertHotakeCandidateCompliance(MultipartFile file, HotakeCandidateCompliance hotakeCandidateCompliance);
public int updateHotakeCandidateCompliance(MultipartFile file, HotakeCandidateCompliance hotakeCandidateCompliance);
public int deleteHotakeCandidateComplianceByIds(Long[] ids);
public int deleteHotakeCandidateComplianceById(Long id);
}

View File

@@ -0,0 +1,91 @@
package com.vetti.hotake.service.impl;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import com.vetti.common.core.service.BaseServiceImpl;
import com.vetti.common.enums.FillTypeEnum;
import com.vetti.hotake.domain.HotakeSysFile;
import com.vetti.hotake.domain.dto.CandidateComplianceDto;
import com.vetti.hotake.service.IHotakeSysFileService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import com.vetti.hotake.mapper.HotakeCandidateComplianceMapper;
import com.vetti.hotake.domain.HotakeCandidateCompliance;
import com.vetti.hotake.service.IHotakeCandidateComplianceService;
@SuppressWarnings("all")
@Service
public class HotakeCandidateComplianceServiceImpl extends BaseServiceImpl implements IHotakeCandidateComplianceService {
private static final String MINIO_BUCKET_NAME = "compliance-fs";
@Autowired
private HotakeCandidateComplianceMapper hotakeCandidateComplianceMapper;
@Autowired
private IHotakeSysFileService hotakeSysFileService;
@Transactional(readOnly = true)
@Override
public CandidateComplianceDto selectHotakeCandidateComplianceById(Long id) {
HotakeCandidateCompliance data = hotakeCandidateComplianceMapper.selectHotakeCandidateComplianceById(id);
if (data.getFileId() != null) {
return CandidateComplianceDto.build(data, hotakeSysFileService.url(data.getFileId()));
}
return CandidateComplianceDto.build(data, "");
}
@Transactional(readOnly = true)
@Override
public List<CandidateComplianceDto> selectHotakeCandidateComplianceList(HotakeCandidateCompliance hotakeCandidateCompliance) {
List<CandidateComplianceDto> dtoList = new ArrayList<>();
List<HotakeCandidateCompliance> list = hotakeCandidateComplianceMapper.selectHotakeCandidateComplianceList(hotakeCandidateCompliance);
if (CollectionUtils.isNotEmpty(list)) {
list.forEach(e -> {
if (e.getFileId() != null) {
dtoList.add(CandidateComplianceDto.build(e, hotakeSysFileService.url(e.getFileId())));
}
});
}
return dtoList;
}
@Transactional(rollbackFor = Exception.class)
@Override
public int insertHotakeCandidateCompliance(MultipartFile file, HotakeCandidateCompliance hotakeCandidateCompliance) {
if (file != null) {
HotakeSysFile sysFile = hotakeSysFileService.uploadFile(file, MINIO_BUCKET_NAME);
hotakeCandidateCompliance.setFileId(sysFile.getId());
}
fill(FillTypeEnum.INSERT.getCode(), hotakeCandidateCompliance);
return hotakeCandidateComplianceMapper.insertHotakeCandidateCompliance(hotakeCandidateCompliance);
}
@Transactional(rollbackFor = Exception.class)
@Override
public int updateHotakeCandidateCompliance(MultipartFile file, HotakeCandidateCompliance hotakeCandidateCompliance) {
if (file != null) {
HotakeSysFile sysFile = hotakeSysFileService.uploadFile(file, MINIO_BUCKET_NAME);
hotakeCandidateCompliance.setFileId(sysFile.getId());
}
fill(FillTypeEnum.UPDATE.getCode(), hotakeCandidateCompliance);
return hotakeCandidateComplianceMapper.updateHotakeCandidateCompliance(hotakeCandidateCompliance);
}
@Transactional(rollbackFor = Exception.class)
@Override
public int deleteHotakeCandidateComplianceByIds(Long[] ids) {
return hotakeCandidateComplianceMapper.deleteHotakeCandidateComplianceByIds(ids);
}
@Transactional(rollbackFor = Exception.class)
@Override
public int deleteHotakeCandidateComplianceById(Long id) {
return hotakeCandidateComplianceMapper.deleteHotakeCandidateComplianceById(id);
}
}

View File

@@ -0,0 +1,96 @@
<?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.vetti.hotake.mapper.HotakeCandidateComplianceMapper">
<resultMap type="HotakeCandidateCompliance" id="HotakeCandidateComplianceResult">
<result property="id" column="id" />
<result property="userId" column="user_id" />
<result property="fileId" column="file_id" />
<result property="typeName" column="type_name" />
<result property="description" column="description" />
<result property="delFlag" column="del_flag" />
<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" />
</resultMap>
<sql id="selectHotakeCandidateComplianceVo">
select id, user_id, file_id, type_name, description, del_flag, create_by, create_time, update_by, update_time, remark from hotake_candidate_compliance
</sql>
<select id="selectHotakeCandidateComplianceList" parameterType="HotakeCandidateCompliance" resultMap="HotakeCandidateComplianceResult">
<include refid="selectHotakeCandidateComplianceVo"/>
<where>
<if test="userId != null "> and user_id = #{userId}</if>
<if test="fileId != null "> and file_id = #{fileId}</if>
<if test="typeName != null and typeName != ''"> and type_name = #{typeName}</if>
<if test="description != null and description != ''"> and description = #{description}</if>
</where>
</select>
<select id="selectHotakeCandidateComplianceById" parameterType="Long" resultMap="HotakeCandidateComplianceResult">
<include refid="selectHotakeCandidateComplianceVo"/>
where id = #{id}
</select>
<insert id="insertHotakeCandidateCompliance" parameterType="HotakeCandidateCompliance" useGeneratedKeys="true" keyProperty="id">
insert into hotake_candidate_compliance
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="userId != null">user_id,</if>
<if test="fileId != null">file_id,</if>
<if test="typeName != null">type_name,</if>
<if test="description != null">description,</if>
<if test="delFlag != null">del_flag,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="remark != null">remark,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="userId != null">#{userId},</if>
<if test="fileId != null">#{fileId},</if>
<if test="typeName != null">#{typeName},</if>
<if test="description != null">#{description},</if>
<if test="delFlag != null">#{delFlag},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="remark != null">#{remark},</if>
</trim>
</insert>
<update id="updateHotakeCandidateCompliance" parameterType="HotakeCandidateCompliance">
update hotake_candidate_compliance
<trim prefix="SET" suffixOverrides=",">
<if test="userId != null">user_id = #{userId},</if>
<if test="fileId != null">file_id = #{fileId},</if>
<if test="typeName != null">type_name = #{typeName},</if>
<if test="description != null">description = #{description},</if>
<if test="delFlag != null">del_flag = #{delFlag},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="remark != null">remark = #{remark},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteHotakeCandidateComplianceById" parameterType="Long">
delete from hotake_candidate_compliance where id = #{id}
</delete>
<delete id="deleteHotakeCandidateComplianceByIds" parameterType="String">
delete from hotake_candidate_compliance where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>

View File

@@ -43,6 +43,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="userFlag" column="user_flag" /> <result property="userFlag" column="user_flag" />
<result property="userOperStatus" column="user_oper_status" /> <result property="userOperStatus" column="user_oper_status" />
<result property="cvTemplateJson" column="cv_template_json" />
<result property="workNatureJson" column="work_nature_json" />
<association property="dept" javaType="SysDept" resultMap="deptResult" /> <association property="dept" javaType="SysDept" resultMap="deptResult" />
@@ -73,7 +75,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, d.dept_id, d.parent_id, d.ancestors, 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,u.sys_user_type r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status,u.sys_user_type
,u.steps,u.job_position,u.experience,u.cv_url,u.location,u.job_type,u.relocate,u.best_side_json,u.address, ,u.steps,u.job_position,u.experience,u.cv_url,u.location,u.job_type,u.relocate,u.best_side_json,u.address,
u.user_flag,u.user_set_json,u.company_name,u.job_title,u.user_oper_status u.user_flag,u.user_set_json,u.company_name,u.job_title,u.user_oper_status,u.cv_template_json,u.work_nature_json
from sys_user u from sys_user u
left join sys_dept d on u.dept_id = d.dept_id 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_user_role ur on u.user_id = ur.user_id
@@ -82,7 +84,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult"> <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.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, 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,u.sys_user_type,u.steps,u.job_position,u.experience,u.cv_url,u.location,u.job_type,u.relocate,u.best_side_json,u.address,u.user_flag,u.user_set_json,u.company_name,u.job_title,u.user_oper_status from sys_user u d.dept_name, d.leader,u.sys_user_type,u.steps,u.job_position,u.experience,u.cv_url,u.location,u.job_type,u.relocate,u.best_side_json,u.address,u.user_flag,u.user_set_json,u.company_name,u.job_title,u.user_oper_status,u.cv_template_json,u.work_nature_json from sys_user u
left join sys_dept d on u.dept_id = d.dept_id left join sys_dept d on u.dept_id = d.dept_id
where u.del_flag = '0' where u.del_flag = '0'
<if test="userId != null and userId != 0"> <if test="userId != null and userId != 0">
@@ -116,7 +118,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectAllocatedList" parameterType="SysUser" resultMap="SysUserResult"> <select id="selectAllocatedList" parameterType="SysUser" resultMap="SysUserResult">
select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status,
u.create_time,u.sys_user_type,u.steps,u.job_position,u.experience,u.cv_url,u.location, u.create_time,u.sys_user_type,u.steps,u.job_position,u.experience,u.cv_url,u.location,
u.job_type,u.relocate,u.best_side_json,u.address,u.user_flag,u.user_set_json,u.company_name,u.job_title,u.user_oper_status u.job_type,u.relocate,u.best_side_json,u.address,u.user_flag,u.user_set_json,u.company_name,u.job_title,u.user_oper_status,u.cv_template_json,u.work_nature_json
from sys_user u from sys_user u
left join sys_dept d on u.dept_id = d.dept_id 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_user_role ur on u.user_id = ur.user_id
@@ -134,7 +136,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectUnallocatedList" parameterType="SysUser" resultMap="SysUserResult"> <select id="selectUnallocatedList" parameterType="SysUser" resultMap="SysUserResult">
select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time,u.sys_user_type, select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time,u.sys_user_type,
u.steps,u.job_position,u.experience,u.cv_url,u.location,u.job_type,u.relocate,u.best_side_json,u.address,u.user_flag,u.user_set_json,u.company_name,u.job_title,u.user_oper_status u.steps,u.job_position,u.experience,u.cv_url,u.location,u.job_type,u.relocate,u.best_side_json,u.address,u.user_flag,u.user_set_json,u.company_name,u.job_title,u.user_oper_status,u.cv_template_json,u.work_nature_json
from sys_user u from sys_user u
left join sys_dept d on u.dept_id = d.dept_id 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_user_role ur on u.user_id = ur.user_id
@@ -205,6 +207,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="companyName != null and companyName != ''">company_name,</if> <if test="companyName != null and companyName != ''">company_name,</if>
<if test="jobTitle != null and jobTitle != ''">job_title,</if> <if test="jobTitle != null and jobTitle != ''">job_title,</if>
<if test="userOperStatus != null and userOperStatus != ''">user_oper_status,</if> <if test="userOperStatus != null and userOperStatus != ''">user_oper_status,</if>
<if test="cvTemplateJson != null and cvTemplateJson != ''">cv_template_json,</if>
<if test="workNatureJson != null and workNatureJson != ''">work_nature_json,</if>
create_time create_time
)values( )values(
@@ -238,6 +242,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="companyName != null and companyName != ''">#{companyName},</if> <if test="companyName != null and companyName != ''">#{companyName},</if>
<if test="jobTitle != null and jobTitle != ''">#{jobTitle},</if> <if test="jobTitle != null and jobTitle != ''">#{jobTitle},</if>
<if test="userOperStatus != null and userOperStatus != ''">#{userOperStatus},</if> <if test="userOperStatus != null and userOperStatus != ''">#{userOperStatus},</if>
<if test="cvTemplateJson != null and cvTemplateJson != ''">#{cvTemplateJson},</if>
<if test="workNatureJson != null and workNatureJson != ''">#{workNatureJson},</if>
sysdate() sysdate()
) )
@@ -275,6 +281,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="companyName != null and companyName != ''">company_name = #{companyName},</if> <if test="companyName != null and companyName != ''">company_name = #{companyName},</if>
<if test="jobTitle != null and jobTitle != ''">job_title = #{jobTitle},</if> <if test="jobTitle != null and jobTitle != ''">job_title = #{jobTitle},</if>
<if test="userOperStatus != null and userOperStatus != ''">user_oper_status = #{userOperStatus},</if> <if test="userOperStatus != null and userOperStatus != ''">user_oper_status = #{userOperStatus},</if>
<if test="cvTemplateJson != null and cvTemplateJson != ''">cv_template_json = #{cvTemplateJson},</if>
<if test="workNatureJson != null and workNatureJson != ''">work_nature_json = #{workNatureJson},</if>
update_time = sysdate() update_time = sysdate()
</set> </set>