diff --git a/src/main/java/com/sztzjy/marketing/annotation/aspect/AiAspect.java b/src/main/java/com/sztzjy/marketing/annotation/aspect/AiAspect.java new file mode 100644 index 0000000..acedec7 --- /dev/null +++ b/src/main/java/com/sztzjy/marketing/annotation/aspect/AiAspect.java @@ -0,0 +1,103 @@ +package com.sztzjy.marketing.annotation.aspect; + +import com.sztzjy.marketing.config.exception.UnAuthorizedException; +import com.sztzjy.marketing.config.security.JwtUser; +import com.sztzjy.marketing.entity.StuAiLimit; +import com.sztzjy.marketing.entity.StuAiLimitExample; +import com.sztzjy.marketing.mapper.StuAiLimitMapper; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Field; +import java.util.Date; +import java.util.List; + +/** + * @author 17803 + * @date 2024-06-21 8:59 + */ + +@Component +@Aspect +@Slf4j +public class AiAspect { + + @Autowired + private StuAiLimitMapper stuAiLimitMapper; + + /** + * 切入点 + * + * @param + * @return + */ + + // 定义一个Pointcut,匹配带有StuCreateImgDTO参数的方法 + @Pointcut("execution(* com.sztzjy.marketing.service.impl.QianFanBigModuleServiceImpl.*(..))") + public void useInspect() { + } + + + @Before("useInspect()") + public void timesCheck(JoinPoint joinPoint) throws IllegalAccessException { + log.info("开始检查使用次数..."); + + + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + if (authentication != null && authentication.isAuthenticated()) { + JwtUser jwtUser = (JwtUser) authentication.getPrincipal(); + + StuAiLimitExample limitExample = new StuAiLimitExample(); + limitExample.createCriteria().andUserIdEqualTo(jwtUser.getUserId()); + + List stuAiLimits = stuAiLimitMapper.selectByExample(limitExample); + if (!stuAiLimits.isEmpty()) + { + if (stuAiLimits.get(0).getLimitState()== (byte) 1 || 3 < stuAiLimits.get(0).getNumberOfTimes()){ + throw new RuntimeException("超出使用限制,请明日再来!"); + } + + StuAiLimit stuAiLimit = stuAiLimits.get(0); + stuAiLimit.setNumberOfTimes(stuAiLimit.getNumberOfTimes()+1); + if (3 == stuAiLimit.getNumberOfTimes()) + { + stuAiLimit.setLimitState((byte)1); + } + + stuAiLimitMapper.updateByPrimaryKeySelective(stuAiLimit); + + + }else { + + StuAiLimit stuAiLimit = new StuAiLimit(); + stuAiLimit.setUserId(jwtUser.getUserId()); + stuAiLimit.setLimitState((byte)0); + stuAiLimit.setCreateTime(new Date()); + stuAiLimit.setNumberOfTimes(1); + stuAiLimitMapper.insertSelective(stuAiLimit); + + } + + + } else { + throw new UnAuthorizedException("未经授权登录"); + } + + + } + + + + + +} diff --git a/src/main/java/com/sztzjy/marketing/controller/stu/UserBehaviorProfilingByRFM.java b/src/main/java/com/sztzjy/marketing/controller/stu/UserBehaviorProfilingByRFM.java index 6a8632b..1ccaf1a 100644 --- a/src/main/java/com/sztzjy/marketing/controller/stu/UserBehaviorProfilingByRFM.java +++ b/src/main/java/com/sztzjy/marketing/controller/stu/UserBehaviorProfilingByRFM.java @@ -50,4 +50,6 @@ public class UserBehaviorProfilingByRFM { + + } diff --git a/src/main/java/com/sztzjy/marketing/entity/StuAiLimit.java b/src/main/java/com/sztzjy/marketing/entity/StuAiLimit.java new file mode 100644 index 0000000..d376be7 --- /dev/null +++ b/src/main/java/com/sztzjy/marketing/entity/StuAiLimit.java @@ -0,0 +1,88 @@ +package com.sztzjy.marketing.entity; + +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +/** + * AI使用次数 + * + * @author whb + * stu_ai_limit + */ +public class StuAiLimit { + private Integer id; + + @ApiModelProperty("用户ID") + private String userId; + + @ApiModelProperty("字数限制") + private Integer wordNumber; + + @ApiModelProperty("次数限制") + private Integer numberOfTimes; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("更新时间") + private Date updateTime; + + @ApiModelProperty("今日使用状态") + private Byte limitState; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId == null ? null : userId.trim(); + } + + public Integer getWordNumber() { + return wordNumber; + } + + public void setWordNumber(Integer wordNumber) { + this.wordNumber = wordNumber; + } + + public Integer getNumberOfTimes() { + return numberOfTimes; + } + + public void setNumberOfTimes(Integer numberOfTimes) { + this.numberOfTimes = numberOfTimes; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public Byte getLimitState() { + return limitState; + } + + public void setLimitState(Byte limitState) { + this.limitState = limitState; + } +} \ No newline at end of file diff --git a/src/main/java/com/sztzjy/marketing/entity/StuAiLimitExample.java b/src/main/java/com/sztzjy/marketing/entity/StuAiLimitExample.java new file mode 100644 index 0000000..af548d8 --- /dev/null +++ b/src/main/java/com/sztzjy/marketing/entity/StuAiLimitExample.java @@ -0,0 +1,630 @@ +package com.sztzjy.marketing.entity; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class StuAiLimitExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public StuAiLimitExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andUserIdIsNull() { + addCriterion("user_id is null"); + return (Criteria) this; + } + + public Criteria andUserIdIsNotNull() { + addCriterion("user_id is not null"); + return (Criteria) this; + } + + public Criteria andUserIdEqualTo(String value) { + addCriterion("user_id =", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotEqualTo(String value) { + addCriterion("user_id <>", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdGreaterThan(String value) { + addCriterion("user_id >", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdGreaterThanOrEqualTo(String value) { + addCriterion("user_id >=", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdLessThan(String value) { + addCriterion("user_id <", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdLessThanOrEqualTo(String value) { + addCriterion("user_id <=", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdLike(String value) { + addCriterion("user_id like", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotLike(String value) { + addCriterion("user_id not like", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdIn(List values) { + addCriterion("user_id in", values, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotIn(List values) { + addCriterion("user_id not in", values, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdBetween(String value1, String value2) { + addCriterion("user_id between", value1, value2, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotBetween(String value1, String value2) { + addCriterion("user_id not between", value1, value2, "userId"); + return (Criteria) this; + } + + public Criteria andWordNumberIsNull() { + addCriterion("word_number is null"); + return (Criteria) this; + } + + public Criteria andWordNumberIsNotNull() { + addCriterion("word_number is not null"); + return (Criteria) this; + } + + public Criteria andWordNumberEqualTo(Integer value) { + addCriterion("word_number =", value, "wordNumber"); + return (Criteria) this; + } + + public Criteria andWordNumberNotEqualTo(Integer value) { + addCriterion("word_number <>", value, "wordNumber"); + return (Criteria) this; + } + + public Criteria andWordNumberGreaterThan(Integer value) { + addCriterion("word_number >", value, "wordNumber"); + return (Criteria) this; + } + + public Criteria andWordNumberGreaterThanOrEqualTo(Integer value) { + addCriterion("word_number >=", value, "wordNumber"); + return (Criteria) this; + } + + public Criteria andWordNumberLessThan(Integer value) { + addCriterion("word_number <", value, "wordNumber"); + return (Criteria) this; + } + + public Criteria andWordNumberLessThanOrEqualTo(Integer value) { + addCriterion("word_number <=", value, "wordNumber"); + return (Criteria) this; + } + + public Criteria andWordNumberIn(List values) { + addCriterion("word_number in", values, "wordNumber"); + return (Criteria) this; + } + + public Criteria andWordNumberNotIn(List values) { + addCriterion("word_number not in", values, "wordNumber"); + return (Criteria) this; + } + + public Criteria andWordNumberBetween(Integer value1, Integer value2) { + addCriterion("word_number between", value1, value2, "wordNumber"); + return (Criteria) this; + } + + public Criteria andWordNumberNotBetween(Integer value1, Integer value2) { + addCriterion("word_number not between", value1, value2, "wordNumber"); + return (Criteria) this; + } + + public Criteria andNumberOfTimesIsNull() { + addCriterion("number_of_times is null"); + return (Criteria) this; + } + + public Criteria andNumberOfTimesIsNotNull() { + addCriterion("number_of_times is not null"); + return (Criteria) this; + } + + public Criteria andNumberOfTimesEqualTo(Integer value) { + addCriterion("number_of_times =", value, "numberOfTimes"); + return (Criteria) this; + } + + public Criteria andNumberOfTimesNotEqualTo(Integer value) { + addCriterion("number_of_times <>", value, "numberOfTimes"); + return (Criteria) this; + } + + public Criteria andNumberOfTimesGreaterThan(Integer value) { + addCriterion("number_of_times >", value, "numberOfTimes"); + return (Criteria) this; + } + + public Criteria andNumberOfTimesGreaterThanOrEqualTo(Integer value) { + addCriterion("number_of_times >=", value, "numberOfTimes"); + return (Criteria) this; + } + + public Criteria andNumberOfTimesLessThan(Integer value) { + addCriterion("number_of_times <", value, "numberOfTimes"); + return (Criteria) this; + } + + public Criteria andNumberOfTimesLessThanOrEqualTo(Integer value) { + addCriterion("number_of_times <=", value, "numberOfTimes"); + return (Criteria) this; + } + + public Criteria andNumberOfTimesIn(List values) { + addCriterion("number_of_times in", values, "numberOfTimes"); + return (Criteria) this; + } + + public Criteria andNumberOfTimesNotIn(List values) { + addCriterion("number_of_times not in", values, "numberOfTimes"); + return (Criteria) this; + } + + public Criteria andNumberOfTimesBetween(Integer value1, Integer value2) { + addCriterion("number_of_times between", value1, value2, "numberOfTimes"); + return (Criteria) this; + } + + public Criteria andNumberOfTimesNotBetween(Integer value1, Integer value2) { + addCriterion("number_of_times not between", value1, value2, "numberOfTimes"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("create_time is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("create_time is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Date value) { + addCriterion("create_time =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Date value) { + addCriterion("create_time <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Date value) { + addCriterion("create_time >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("create_time >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Date value) { + addCriterion("create_time <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Date value) { + addCriterion("create_time <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("create_time in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("create_time not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Date value1, Date value2) { + addCriterion("create_time between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Date value1, Date value2) { + addCriterion("create_time not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIsNull() { + addCriterion("update_time is null"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIsNotNull() { + addCriterion("update_time is not null"); + return (Criteria) this; + } + + public Criteria andUpdateTimeEqualTo(Date value) { + addCriterion("update_time =", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotEqualTo(Date value) { + addCriterion("update_time <>", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeGreaterThan(Date value) { + addCriterion("update_time >", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("update_time >=", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeLessThan(Date value) { + addCriterion("update_time <", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeLessThanOrEqualTo(Date value) { + addCriterion("update_time <=", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIn(List values) { + addCriterion("update_time in", values, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotIn(List values) { + addCriterion("update_time not in", values, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeBetween(Date value1, Date value2) { + addCriterion("update_time between", value1, value2, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotBetween(Date value1, Date value2) { + addCriterion("update_time not between", value1, value2, "updateTime"); + return (Criteria) this; + } + + public Criteria andLimitStateIsNull() { + addCriterion("limit_state is null"); + return (Criteria) this; + } + + public Criteria andLimitStateIsNotNull() { + addCriterion("limit_state is not null"); + return (Criteria) this; + } + + public Criteria andLimitStateEqualTo(Byte value) { + addCriterion("limit_state =", value, "limitState"); + return (Criteria) this; + } + + public Criteria andLimitStateNotEqualTo(Byte value) { + addCriterion("limit_state <>", value, "limitState"); + return (Criteria) this; + } + + public Criteria andLimitStateGreaterThan(Byte value) { + addCriterion("limit_state >", value, "limitState"); + return (Criteria) this; + } + + public Criteria andLimitStateGreaterThanOrEqualTo(Byte value) { + addCriterion("limit_state >=", value, "limitState"); + return (Criteria) this; + } + + public Criteria andLimitStateLessThan(Byte value) { + addCriterion("limit_state <", value, "limitState"); + return (Criteria) this; + } + + public Criteria andLimitStateLessThanOrEqualTo(Byte value) { + addCriterion("limit_state <=", value, "limitState"); + return (Criteria) this; + } + + public Criteria andLimitStateIn(List values) { + addCriterion("limit_state in", values, "limitState"); + return (Criteria) this; + } + + public Criteria andLimitStateNotIn(List values) { + addCriterion("limit_state not in", values, "limitState"); + return (Criteria) this; + } + + public Criteria andLimitStateBetween(Byte value1, Byte value2) { + addCriterion("limit_state between", value1, value2, "limitState"); + return (Criteria) this; + } + + public Criteria andLimitStateNotBetween(Byte value1, Byte value2) { + addCriterion("limit_state not between", value1, value2, "limitState"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/sztzjy/marketing/mapper/StuAiLimitMapper.java b/src/main/java/com/sztzjy/marketing/mapper/StuAiLimitMapper.java new file mode 100644 index 0000000..692b13a --- /dev/null +++ b/src/main/java/com/sztzjy/marketing/mapper/StuAiLimitMapper.java @@ -0,0 +1,30 @@ +package com.sztzjy.marketing.mapper; + +import com.sztzjy.marketing.entity.StuAiLimit; +import com.sztzjy.marketing.entity.StuAiLimitExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface StuAiLimitMapper { + long countByExample(StuAiLimitExample example); + + int deleteByExample(StuAiLimitExample example); + + int deleteByPrimaryKey(Integer id); + + int insert(StuAiLimit record); + + int insertSelective(StuAiLimit record); + + List selectByExample(StuAiLimitExample example); + + StuAiLimit selectByPrimaryKey(Integer id); + + int updateByExampleSelective(@Param("record") StuAiLimit record, @Param("example") StuAiLimitExample example); + + int updateByExample(@Param("record") StuAiLimit record, @Param("example") StuAiLimitExample example); + + int updateByPrimaryKeySelective(StuAiLimit record); + + int updateByPrimaryKey(StuAiLimit record); +} \ No newline at end of file diff --git a/src/main/resources/mappers/StuAiLimitMapper.xml b/src/main/resources/mappers/StuAiLimitMapper.xml new file mode 100644 index 0000000..1191725 --- /dev/null +++ b/src/main/resources/mappers/StuAiLimitMapper.xml @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, user_id, word_number, number_of_times, create_time, update_time, limit_state + + + + + delete from stu_ai_limit + where id = #{id,jdbcType=INTEGER} + + + delete from stu_ai_limit + + + + + + insert into stu_ai_limit (id, user_id, word_number, + number_of_times, create_time, update_time, + limit_state) + values (#{id,jdbcType=INTEGER}, #{userId,jdbcType=VARCHAR}, #{wordNumber,jdbcType=INTEGER}, + #{numberOfTimes,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}, + #{limitState,jdbcType=TINYINT}) + + + insert into stu_ai_limit + + + id, + + + user_id, + + + word_number, + + + number_of_times, + + + create_time, + + + update_time, + + + limit_state, + + + + + #{id,jdbcType=INTEGER}, + + + #{userId,jdbcType=VARCHAR}, + + + #{wordNumber,jdbcType=INTEGER}, + + + #{numberOfTimes,jdbcType=INTEGER}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{updateTime,jdbcType=TIMESTAMP}, + + + #{limitState,jdbcType=TINYINT}, + + + + + + update stu_ai_limit + + + id = #{record.id,jdbcType=INTEGER}, + + + user_id = #{record.userId,jdbcType=VARCHAR}, + + + word_number = #{record.wordNumber,jdbcType=INTEGER}, + + + number_of_times = #{record.numberOfTimes,jdbcType=INTEGER}, + + + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + + + update_time = #{record.updateTime,jdbcType=TIMESTAMP}, + + + limit_state = #{record.limitState,jdbcType=TINYINT}, + + + + + + + + update stu_ai_limit + set id = #{record.id,jdbcType=INTEGER}, + user_id = #{record.userId,jdbcType=VARCHAR}, + word_number = #{record.wordNumber,jdbcType=INTEGER}, + number_of_times = #{record.numberOfTimes,jdbcType=INTEGER}, + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + update_time = #{record.updateTime,jdbcType=TIMESTAMP}, + limit_state = #{record.limitState,jdbcType=TINYINT} + + + + + + update stu_ai_limit + + + user_id = #{userId,jdbcType=VARCHAR}, + + + word_number = #{wordNumber,jdbcType=INTEGER}, + + + number_of_times = #{numberOfTimes,jdbcType=INTEGER}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + update_time = #{updateTime,jdbcType=TIMESTAMP}, + + + limit_state = #{limitState,jdbcType=TINYINT}, + + + where id = #{id,jdbcType=INTEGER} + + + update stu_ai_limit + set user_id = #{userId,jdbcType=VARCHAR}, + word_number = #{wordNumber,jdbcType=INTEGER}, + number_of_times = #{numberOfTimes,jdbcType=INTEGER}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + update_time = #{updateTime,jdbcType=TIMESTAMP}, + limit_state = #{limitState,jdbcType=TINYINT} + where id = #{id,jdbcType=INTEGER} + + \ No newline at end of file