作者 钟来

初始提交

... ... @@ -3,6 +3,7 @@ package com.zhonglai.luhui.admin.service;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.system.domain.entity.UserConstants;
import com.ruoyi.system.domain.entity.SysUser;
import com.ruoyi.system.domain.tool.SysLogininforType;
import com.zhonglai.luhui.admin.model.RegisterBody;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.exception.user.CaptchaException;
... ... @@ -83,7 +84,7 @@ public class SysRegisterService
}
else
{
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.REGISTER,
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, SysLogininforType.lhAdmin, Constants.REGISTER,
MessageUtils.message("user.register.success")));
}
}
... ...
... ... @@ -50,7 +50,6 @@ public class IotDeviceControlController {
@ApiImplicitParam(value = "主机imei",name = "imei"),
@ApiImplicitParam(value = "版本号",name = "firmwareVersion")
})
@PreAuthorize("@ss.hasPermi('iot:iotDeviceControl:firmwareUp')")
@Log(title = "设备控制", businessType = BusinessType.UPDATE)
@ResponseBody
@PostMapping("/firmwareUp/{imei}")
... ... @@ -75,7 +74,6 @@ public class IotDeviceControlController {
@ApiImplicitParam(value = "主机imei",name = "imei"),
@ApiImplicitParam(value = "restart 1重启,2复位,3恢复出厂值",name = "restart"),
})
@PreAuthorize("@ss.hasPermi('iot:iotDeviceControl:restart')")
@Log(title = "设备控制", businessType = BusinessType.UPDATE)
@ResponseBody
@PostMapping("/restart/{imei}/{restart}")
... ... @@ -185,7 +183,6 @@ public class IotDeviceControlController {
@ApiImplicitParam(value = "传感器编号(0,1_1,10_1)",name = "sensor_number"),
@ApiImplicitParam(value = "属性集合(id1,id2,id3)",name = "attributes"),
})
@PreAuthorize("@ss.hasPermi('iot:iotDeviceControl:upSummary')")
@Log(title = "设备控制", businessType = BusinessType.UPDATE)
@ResponseBody
@PostMapping("/readAttribute/{imei}/{sensor_number}")
... ... @@ -216,7 +213,6 @@ public class IotDeviceControlController {
@ApiImplicitParam(value = "主机imei",name = "imei"),
@ApiImplicitParam(value = "自定义数据json字符串",name = "summary")
})
@PreAuthorize("@ss.hasPermi('iot:iotDeviceControl:upSummary')")
@Log(title = "设备控制", businessType = BusinessType.UPDATE)
@ResponseBody
@PostMapping("/upSummary/{imei}")
... ... @@ -245,7 +241,6 @@ public class IotDeviceControlController {
@ApiImplicitParam(value = "终端编号(如:1_1)",name = "number"),
@ApiImplicitParam(value = "配置参数json字符串",name = "config")
})
@PreAuthorize("@ss.hasPermi('iot:iotDeviceControl:upTerminalConfig')")
@Log(title = "设备控制", businessType = BusinessType.UPDATE)
@ResponseBody
@PostMapping("/upTerminalConfig/{imei}/{number}")
... ... @@ -280,7 +275,6 @@ public class IotDeviceControlController {
" }\n" +
"}")
@ApiImplicitParam(value = "批量数据json字符串",name = "map")
@PreAuthorize("@ss.hasPermi('iot:iotDeviceControl:batchUpTerminalConfig')")
@Log(title = "设备控制", businessType = BusinessType.UPDATE)
@ResponseBody
@PostMapping("/batchUpTerminalConfig/{imei}")
... ...
... ... @@ -39,9 +39,7 @@ public class IotTerminalController extends BaseController
@Autowired
private IUserTerminalGroupRelationService userTerminalGroupRelationService;
@ApiOperation("查询终端列表")
@PreAuthorize("@ss.hasPermi('iot:IotTerminal:list')")
@GetMapping("/list")
public TableDataInfo list(IotTerminal iotTerminal)
{
... ... @@ -52,7 +50,6 @@ public class IotTerminalController extends BaseController
@ApiOperation("获取终端详细信息")
@ApiImplicitParam(value = "终端id",name = "id")
@PreAuthorize("@ss.hasPermi('iot:IotTerminal:getInfo')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") String id)
{
... ... @@ -61,7 +58,6 @@ public class IotTerminalController extends BaseController
@ApiOperation("根据网关获取未分配终端")
@ApiImplicitParam(value = "网关id",name = "imei")
@PreAuthorize("@ss.hasPermi('iot:IotTerminal:getListByDevice')")
@GetMapping(value = "/getListByDevice{imei}")
public AjaxResult getListByDevice(@PathVariable("imei") String imei)
{
... ... @@ -74,7 +70,6 @@ public class IotTerminalController extends BaseController
@ApiImplicitParam(value = "终端id",name = "id"),
@ApiImplicitParam(value = "终端名称",name = "name"),
})
@PreAuthorize("@ss.hasPermi('iot:IotTerminal:editName')")
@Log(title = "终端", businessType = BusinessType.UPDATE)
@PostMapping("/editName")
public AjaxResult editName(String id,String name)
... ... @@ -91,7 +86,6 @@ public class IotTerminalController extends BaseController
@ApiImplicitParam(value = "终端id集合",name = "ids"),
@ApiImplicitParam(value = "分组id",name = "iot_terminal_group_id"),
})
@PreAuthorize("@ss.hasPermi('iot:IotTerminal:groupTerminal')")
@Log(title = "终端", businessType = BusinessType.UPDATE)
@PostMapping("/groupTerminal")
public AjaxResult groupTerminal(Integer iot_terminal_group_id,@RequestBody List<String> ids)
... ...
... ... @@ -45,7 +45,6 @@ public class UserTerminalGroupController extends BaseController
* 查询终端分组列表
*/
@ApiOperation("查询终端分组列表")
@PreAuthorize("@ss.hasPermi('user:UserTerminalGroup:list')")
@GetMapping("/list")
public TableDataInfo list(UserTerminalGroup userTerminalGroup)
{
... ... @@ -60,7 +59,6 @@ public class UserTerminalGroupController extends BaseController
* 获取终端分组详细信息
*/
@ApiOperation("获取终端分组详细信息")
@PreAuthorize("@ss.hasPermi('user:UserTerminalGroup:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Integer id)
{
... ... @@ -71,7 +69,6 @@ public class UserTerminalGroupController extends BaseController
* 新增终端分组
*/
@ApiOperation("新增终端分组")
@PreAuthorize("@ss.hasPermi('user:UserTerminalGroup:add')")
@Log(title = "终端分组", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody UserTerminalGroup userTerminalGroup)
... ... @@ -89,7 +86,6 @@ public class UserTerminalGroupController extends BaseController
@ApiImplicitParam(value = "分组名称",name = "name"),
@ApiImplicitParam(value = "分组id",name = "id"),
})
@PreAuthorize("@ss.hasPermi('user:UserTerminalGroup:edit')")
@Log(title = "终端分组", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(String name,Integer id)
... ... @@ -104,7 +100,6 @@ public class UserTerminalGroupController extends BaseController
* 删除终端分组
*/
@ApiOperation("删除终端分组")
@PreAuthorize("@ss.hasPermi('user:UserTerminalGroup:remove')")
@Log(title = "终端分组", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Integer[] ids)
... ...
... ... @@ -31,6 +31,9 @@ public class SysLogininfor extends BaseEntity
@Excel(name = "登录地址")
private String ipaddr;
@Excel(name = "类型")
private String type;
/** 登录地点 */
@Excel(name = "登录地点")
private String loginLocation;
... ... @@ -141,4 +144,12 @@ public class SysLogininfor extends BaseEntity
{
this.loginTime = loginTime;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
... ...
package com.ruoyi.system.domain.tool;
public enum SysLogininforType {
lhAdmin,
lhApi,
}
... ...
package com.ruoyi.common.core.domain;
import com.ruoyi.system.domain.tool.SysLogininforType;
import org.springframework.security.core.userdetails.UserDetails;
... ... @@ -43,6 +44,11 @@ public abstract class BaseLoginUser implements UserDetails {
*/
private String os;
/**
* 浏览器类型
*/
private SysLogininforType sysLogininforType;
public Long getUserId() {
return userId;
}
... ... @@ -108,4 +114,12 @@ public abstract class BaseLoginUser implements UserDetails {
}
public abstract Object getUser();
public SysLogininforType getSysLogininforType() {
return sysLogininforType;
}
public void setSysLogininforType(SysLogininforType sysLogininforType) {
this.sysLogininforType = sysLogininforType;
}
}
... ...
... ... @@ -44,7 +44,8 @@ public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T>
{
return new byte[0];
}
return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
//SerializerFeature.DisableCircularReferenceDetect解决重复引用的问题
return JSON.toJSONString(t, SerializerFeature.WriteClassName,SerializerFeature.DisableCircularReferenceDetect).getBytes(DEFAULT_CHARSET);
}
@Override
... ...
... ... @@ -44,7 +44,7 @@ public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler
// 删除用户缓存记录
tokenService.delLoginUser(loginUser.getToken());
// 记录用户退出日志
AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, "退出成功"));
AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName,loginUser.getSysLogininforType(), Constants.LOGOUT, "退出成功"));
}
ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.error(HttpStatus.SUCCESS, "退出成功")));
}
... ...
... ... @@ -29,6 +29,11 @@ public class PublicSQL {
Field[] fields = list.get(0).getClass().getDeclaredFields( );
for(Field field:fields)
{
PublicSQLConfig publicSQLConfig = field.getAnnotation(PublicSQLConfig.class);
if(null != publicSQLConfig && !publicSQLConfig.isSelect())
{
continue;
}
if(!"".equals(values) )
{
mfStr += ",";
... ... @@ -80,6 +85,11 @@ public class PublicSQL {
StringBuffer values = new StringBuffer("(");
for(Field field:fields)
{//
PublicSQLConfig publicSQLConfig = field.getAnnotation(PublicSQLConfig.class);
if(null != publicSQLConfig && !publicSQLConfig.isSelect())
{
continue;
}
Method method;
try {
method = object.getClass().getMethod("get"+com.ruoyi.common.utils.StringUtils.getName(field.getName()));
... ... @@ -133,7 +143,12 @@ public class PublicSQL {
String values = "(";
for(Field field:fields)
{//
{
PublicSQLConfig publicSQLConfig = field.getAnnotation(PublicSQLConfig.class);
if(null != publicSQLConfig && !publicSQLConfig.isSelect())
{
continue;
}
Method method;
try {
method = object.getClass().getMethod("get"+com.ruoyi.common.utils.StringUtils.getName(field.getName()));
... ... @@ -181,7 +196,15 @@ public class PublicSQL {
{
Object object = para.get("object");
String whereFieldNames = (String) para.get("whereFieldNames");
String tableName = changTableNameFromObject(object);
if( null != para.get("tablename"))
{
}
String tableName = (String) para.get("tablename");
if(null == tableName)
{
tableName = changTableNameFromObject(object);
}
String sql = "update ";
sql += tableName;
Field[] fields = object.getClass().getDeclaredFields();
... ... @@ -192,6 +215,11 @@ public class PublicSQL {
for(int i=0;i<fields.length;i++)
{
Field field = fields[i];
PublicSQLConfig publicSQLConfig = field.getAnnotation(PublicSQLConfig.class);
if(null != publicSQLConfig && !publicSQLConfig.isSelect())
{
continue;
}
try {
Method method = object.getClass().getMethod("get"+com.ruoyi.common.utils.StringUtils.getName(field.getName()));
Object value = method.invoke(object);
... ... @@ -386,6 +414,11 @@ public class PublicSQL {
{
for(Field field:fields)
{
PublicSQLConfig publicSQLConfig = field.getAnnotation(PublicSQLConfig.class);
if(null != publicSQLConfig && !publicSQLConfig.isSelect())
{
continue;
}
try {
Method method;
method = object.getClass().getMethod("get"+ com.ruoyi.common.utils.StringUtils.getName(field.getName()));
... ... @@ -490,6 +523,11 @@ public class PublicSQL {
for(int i=0;i<fields.length;i++)
{
Field field = fields[i];
PublicSQLConfig publicSQLConfig = field.getAnnotation(PublicSQLConfig.class);
if(null != publicSQLConfig && !publicSQLConfig.isSelect())
{
continue;
}
try {
Method method;
method = object.getClass().getMethod("get"+ com.ruoyi.common.utils.StringUtils.getName(field.getName()));
... ... @@ -572,6 +610,11 @@ public class PublicSQL {
String update = "";
for(Field field:fields)
{//
PublicSQLConfig publicSQLConfig = field.getAnnotation(PublicSQLConfig.class);
if(null != publicSQLConfig && !publicSQLConfig.isSelect())
{
continue;
}
Method method;
try {
method = object.getClass().getMethod("get"+com.ruoyi.common.utils.StringUtils.getName(field.getName()));
... ... @@ -634,6 +677,11 @@ public class PublicSQL {
sb.append("(");
for(Field field:fields)
{
PublicSQLConfig publicSQLConfig = field.getAnnotation(PublicSQLConfig.class);
if(null != publicSQLConfig && !publicSQLConfig.isSelect())
{
continue;
}
if(!"".equals(update) )
{
sb.append(",");
... ... @@ -652,6 +700,11 @@ public class PublicSQL {
Field field = fields[j];
Method method;
try {
PublicSQLConfig publicSQLConfig = field.getAnnotation(PublicSQLConfig.class);
if(null != publicSQLConfig && !publicSQLConfig.isSelect())
{
continue;
}
method = object.getClass().getMethod("get"+com.ruoyi.common.utils.StringUtils.getName(field.getName()));
Object value = method.invoke(object);
if(null == value)
... ...
... ... @@ -3,6 +3,7 @@ package com.ruoyi.system.login.dto;
import com.ruoyi.common.core.domain.BaseLoginUser;
import com.ruoyi.common.utils.DESUtil;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.domain.tool.SysLogininforType;
import org.springframework.security.core.GrantedAuthority;
import java.util.Collection;
... ... @@ -15,8 +16,36 @@ public class ApiLoginUser extends BaseLoginUser {
public ApiLoginUser(Yu2leUserInfo yu2leUserInfo,Yu2leUserLogin yu2leUserLogin) {
this.yu2leUserLogin = yu2leUserLogin;
this.yu2leUserInfo = yu2leUserInfo;
this.setUserId(new Long(yu2leUserLogin.getUserId()));
}
/**
* 反序列父类属性
* @param yu2leUserInfo
* @param yu2leUserLogin
* @param userId
* @param token
* @param loginTime
* @param expireTime
* @param ipaddr
* @param loginLocation
* @param browser
* @param os
* @param sysLogininforType
*/
public ApiLoginUser(Yu2leUserInfo yu2leUserInfo,Yu2leUserLogin yu2leUserLogin,Long userId, String token, Long loginTime, Long expireTime, String ipaddr, String loginLocation, String browser, String os, SysLogininforType sysLogininforType) {
super.setUserId(userId);
super.setToken(token);
super.setLoginTime(loginTime);
super.setExpireTime(expireTime);
super.setIpaddr(ipaddr);
super.setLoginLocation(loginLocation);
super.setBrowser(browser);
super.setOs(os);
super.setSysLogininforType( sysLogininforType);
this.yu2leUserLogin = yu2leUserLogin;
this.yu2leUserInfo = yu2leUserInfo;
}
@Override
public Object getUser() {
return yu2leUserLogin;
... ...
... ... @@ -3,6 +3,7 @@ package com.ruoyi.system.login.dto;
import com.alibaba.fastjson.annotation.JSONField;
import com.ruoyi.common.core.domain.BaseLoginUser;
import com.ruoyi.system.domain.entity.SysUser;
import com.ruoyi.system.domain.tool.SysLogininforType;
import org.springframework.security.core.GrantedAuthority;
import java.util.Collection;
... ... @@ -32,6 +33,33 @@ public class SysLoginUser extends BaseLoginUser
*/
private SysUser user;
/**
* 反序列父类属性
* @param user
* @param userId
* @param token
* @param loginTime
* @param expireTime
* @param ipaddr
* @param loginLocation
* @param browser
* @param os
* @param sysLogininforType
*/
public SysLoginUser( Long deptId,Set<String> permissions,SysUser user,Long userId, String token, Long loginTime, Long expireTime, String ipaddr, String loginLocation, String browser, String os, SysLogininforType sysLogininforType) {
super.setUserId(userId);
super.setToken(token);
super.setLoginTime(loginTime);
super.setExpireTime(expireTime);
super.setIpaddr(ipaddr);
super.setLoginLocation(loginLocation);
super.setBrowser(browser);
super.setOs(os);
super.setSysLogininforType( sysLogininforType);
this.user = user;
this.deptId = deptId;
this.permissions = permissions;
}
public Long getDeptId()
{
... ...
... ... @@ -9,6 +9,7 @@ import com.ruoyi.common.utils.ip.IpUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.system.domain.SysLogininfor;
import com.ruoyi.system.domain.SysOperLog;
import com.ruoyi.system.domain.tool.SysLogininforType;
import com.ruoyi.system.service.ISysLogininforService;
import com.ruoyi.system.service.ISysOperLogService;
import eu.bitwalker.useragentutils.UserAgent;
... ... @@ -35,7 +36,7 @@ public class AsyncFactory
* @param args 列表
* @return 任务task
*/
public static TimerTask recordLogininfor(final String username, final String status, final String message,
public static TimerTask recordLogininfor(final String username, final SysLogininforType type, final String status, final String message,
final Object... args)
{
final UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent"));
... ... @@ -66,6 +67,7 @@ public class AsyncFactory
logininfor.setBrowser(browser);
logininfor.setOs(os);
logininfor.setMsg(message);
logininfor.setType(type.name());
// 日志状态
if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER))
{
... ...
... ... @@ -9,10 +9,8 @@ import com.ruoyi.common.exception.user.UserPasswordNotMatchException;
import com.ruoyi.common.utils.*;
import com.ruoyi.common.utils.ip.IpUtils;
import com.ruoyi.system.domain.entity.SysUser;
import com.ruoyi.system.login.dto.ApiLoginUser;
import com.ruoyi.system.login.dto.SysLoginUser;
import com.ruoyi.system.login.dto.Yu2leUserLogin;
import com.ruoyi.system.login.dto.Yu2leLoginToken;
import com.ruoyi.system.domain.tool.SysLogininforType;
import com.ruoyi.system.login.dto.*;
import com.ruoyi.system.login.manager.AsyncManager;
import com.ruoyi.system.login.manager.factory.AsyncFactory;
import com.ruoyi.system.service.ISysUserService;
... ... @@ -64,9 +62,10 @@ public class LoginService {
// validateCaptcha(username, code, uuid);
// }
// 用户验证
Authentication authentication = userPasswordVerification(username,password);
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("sysuser.login.success")));
Authentication authentication = userPasswordVerification(username,password,SysLogininforType.lhAdmin);
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username,SysLogininforType.lhAdmin, Constants.LOGIN_SUCCESS, MessageUtils.message("sysuser.login.success")));
SysLoginUser loginUser = (SysLoginUser) authentication.getPrincipal();
loginUser.setSysLogininforType(SysLogininforType.lhAdmin);
recordLoginInfo(loginUser.getUserId());
// 生成token
return tokenService.createToken(loginUser);
... ... @@ -80,10 +79,15 @@ public class LoginService {
*/
public String apiLoginByPass(String user,String pass) {
// 用户验证
Authentication authentication = userPasswordVerification(user,pass);
AsyncManager.me().execute(AsyncFactory.recordLogininfor(user, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
Authentication authentication = userPasswordVerification(user,pass,SysLogininforType.lhApi);
AsyncManager.me().execute(AsyncFactory.recordLogininfor(user, SysLogininforType.lhApi, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
ApiLoginUser loginUser = (ApiLoginUser) authentication.getPrincipal();
recordLoginInfo(loginUser.getUserId());
loginUser.setSysLogininforType(SysLogininforType.lhApi);
Yu2leUserInfo yu2leUserInfo = new Yu2leUserInfo();
yu2leUserInfo.setId(loginUser.getUserId().intValue());
yu2leUserInfo.setLastLoginIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
yu2leUserInfo.setLastLoginTime(DateUtils.getNowTimeMilly());
publicService.updateObjectByTable(yu2leUserInfo,"id","`liu_yu_le`.`user_info`");
return tokenService.createToken(loginUser);
}
... ... @@ -136,17 +140,17 @@ public class LoginService {
redisCache.deleteObject(verifyKey);
if (captcha == null)
{
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username,SysLogininforType.lhAdmin, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
throw new CaptchaExpireException();
}
if (!code.equalsIgnoreCase(captcha))
{
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username,SysLogininforType.lhAdmin, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
throw new CaptchaException();
}
}
private Authentication userPasswordVerification(String username,String password)
private Authentication userPasswordVerification(String username,String password,SysLogininforType type)
{
Authentication authentication = null;
try
... ... @@ -159,12 +163,12 @@ public class LoginService {
{
if (e instanceof BadCredentialsException)
{
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username,type, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
throw new UserPasswordNotMatchException();
}
else
{
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username,type, Constants.LOGIN_FAIL, e.getMessage()));
throw new ServiceException(e.getMessage());
}
}
... ...
... ... @@ -44,6 +44,9 @@ public interface PublicMapper {
@UpdateProvider(type = PublicSQL.class, method = "updateObject")
int updateObject(@Param("object") Object object, @Param("whereFieldNames") String whereFieldNames);
@UpdateProvider(type = PublicSQL.class, method = "updateObject")
int updateObjectByTable(@Param("object") Object object, @Param("whereFieldNames") String whereFieldNames, @Param("tablename") String tablename);
/**
* 自定义sql更新
* @param sql
... ...
... ... @@ -34,6 +34,7 @@ public interface PublicService {
*/
int updateObject( Object object, String whereFieldNames);
int updateObjectByTable( Object object, String whereFieldNames,String tablename);
/**
* 自定义sql更新
* @param sql
... ...
... ... @@ -59,6 +59,16 @@ public class PublicServiceImpl implements PublicService {
}
/**
* 更新对象不为空的属性
* @param object
* @param whereFieldNames
*/
public int updateObjectByTable(Object object, String whereFieldNames,String tablename)
{
return publicMapper.updateObjectByTable(object,whereFieldNames,tablename);
}
/**
* 自定义sql更新
* @param sql
*/
... ...
... ... @@ -14,15 +14,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="os" column="os" />
<result property="msg" column="msg" />
<result property="loginTime" column="login_time" />
<result property="type" column="type" />
</resultMap>
<insert id="insertLogininfor" parameterType="SysLogininfor">
insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time)
values (#{userName}, #{status}, #{ipaddr}, #{loginLocation}, #{browser}, #{os}, #{msg}, sysdate())
insert into sys_logininfor (user_name,`type`, status, ipaddr, login_location, browser, os, msg, login_time)
values (#{userName},#{type}, #{status}, #{ipaddr}, #{loginLocation}, #{browser}, #{os}, #{msg}, sysdate())
</insert>
<select id="selectLogininforList" parameterType="SysLogininfor" resultMap="SysLogininforResult">
select info_id, user_name, ipaddr, login_location, browser, os, status, msg, login_time from sys_logininfor
select info_id, user_name, ipaddr, login_location, browser, os, status, msg, login_time,`type` from sys_logininfor
<where>
<if test="ipaddr != null and ipaddr != ''">
AND ipaddr like concat('%', #{ipaddr}, '%')
... ... @@ -33,6 +34,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="userName != null and userName != ''">
AND user_name like concat('%', #{userName}, '%')
</if>
<if test="type != null and type != ''">
AND `type` like concat('%', #{type}, '%')
</if>
<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
and date_format(login_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
</if>
... ...