Pu Zhibing
2025-04-07 4109495b9c51a4bbd8b0a7c3c69093909d2e33e1
修改接口bug
39个文件已修改
1个文件已删除
2327 ■■■■■ 已修改文件
ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/factory/UPWarnMsgAdptInfoClientFallbackFactory.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/feignClient/UPWarnMsgAdptInfoClient.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysRole.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java 796 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/Car.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/GetSysRoleByIds.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/Order.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/Warn.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java 207 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SwaggerProvider.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/pom.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CarController.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/ComplainController.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/OrderController.java 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WarnController.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java 214 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/CarWarnListResp.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/ComplainListResp.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java 342 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IWarnService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CarServiceImpl.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WarnServiceImpl.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/util/TaskUtil.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/resources/banner.txt 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/SysUserMapper.xml 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/WarnMapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-dataInterchange/pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/controller/UPExgMsgRegisterController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/controller/UPWarnMsgAdptInfoController.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgAdptInfoDao.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/DOWNBaseMsgVehicleAdded.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/server/ExgMsgService.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/factory/UPWarnMsgAdptInfoClientFallbackFactory.java
@@ -20,6 +20,11 @@
            public R<List<UPWarnMsgAdptInfoVo>> findByCreateTimeAfter(Long createTime) {
                return R.fail("查询大于给定日期的所有报警数据失败:" + cause.getMessage());
            }
            @Override
            public R<UPWarnMsgAdptInfoVo> findByInfoId(Integer infoId) {
                return R.fail("根据信息id查询报警原始数据失败:" + cause.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/feignClient/UPWarnMsgAdptInfoClient.java
@@ -26,4 +26,14 @@
     */
    @PostMapping("/warnMsgAdptInfo/findByCreateTimeAfter")
    R<List<UPWarnMsgAdptInfoVo>> findByCreateTimeAfter(@RequestParam("createTime") Long createTime);
    /**
     * 根据信息id查询报警原始数据
     *
     * @param infoId
     * @return
     */
    @PostMapping("/warnMsgAdptInfo/findByInfoId")
    R<UPWarnMsgAdptInfoVo> findByInfoId(@RequestParam("infoId") Integer infoId);
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java
@@ -26,6 +26,8 @@
     */
    @GetMapping("/user/info/{username}")
    public R<LoginUser> getUserInfo(@PathVariable("username") String username, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
    @GetMapping("/user/infoShop/{username}")
    public R<LoginUser> infoShop(@PathVariable("username") String username, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysRole.java
@@ -1,6 +1,7 @@
package com.ruoyi.system.api.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.annotation.Excel.ColumnType;
import com.ruoyi.common.core.web.domain.BaseEntity;
@@ -16,6 +17,7 @@
 *
 * @author ruoyi
 */
@TableName("sys_role")
public class SysRole extends BaseEntity {
    private static final long serialVersionUID = 1L;
    
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java
@@ -22,414 +22,394 @@
/**
 * 用户对象 sys_user
 *
 *
 * @author ruoyi
 */
public class SysUser extends BaseEntity
{
    private static final long serialVersionUID = 1L;
    /** 用户ID */
    @Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号")
    @TableId(value = "user_id", type = IdType.AUTO)
    private Long userId;
    /** 部门ID */
    @Excel(name = "部门编号", type = Type.IMPORT)
    @TableField("dept_id")
    private Long deptId;
    /** 用户账号 */
    @Excel(name = "登录名称")
    @TableField("user_name")
    private String userName;
    /** 用户昵称 */
    @Excel(name = "用户名称")
    @NotBlank(message = "姓名不能为空")
    @TableField("nick_name")
    private String nickName;
    /** 用户邮箱 */
    @Excel(name = "用户邮箱")
    private String email;
    /** 手机号码 */
    @Excel(name = "手机号码")
    @NotBlank(message = "请输入账号")
    private String phonenumber;
    /** 用户性别 */
    @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")
    private String sex;
    /** 用户头像 */
    private String avatar;
    /** 密码 */
    private String password;
    /** 帐号状态(0正常 1停用) */
    @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")
    private String status;
    /** 删除标志(0代表存在 2代表删除) */
    @TableField("del_flag")
    private String delFlag;
    /** 最后登录IP */
    @Excel(name = "最后登录IP", type = Type.EXPORT)
    @TableField("login_ip")
    private String loginIp;
    /** 最后登录时间 */
    @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField("login_date")
    private Date loginDate;
    /** 部门对象 */
    @Excels({
        @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT),
        @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT)
    })
    @TableField(exist = false)
    private SysDept dept;
    /** 角色对象 */
    @TableField(exist = false)
    private List<SysRole> roles;
    /** 角色组 */
    @TableField(exist = false)
    private Long[] roleIds;
    /** 岗位组 */
    @TableField(exist = false)
    private Long[] postIds;
    /** 角色ID */
    @TableField(exist = false)
    private Long roleId;
    /**
     * 角色类型 1=平台 2=门店
     */
    @ApiModelProperty(value = "角色类型 1=平台 2=门店")
    @TableField("role_type")
    private Integer roleType;
    @Excel(name = "密码修改时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
    private Date passWordUpdate;
    @ApiModelProperty(value = "对象ID")
    @TableField("objectId")
    private Integer objectId;
    @ApiModelProperty(value = "备注")
    private String remark;
    @ApiModelProperty(value = "禁用账户备注")
    @TableField("forbidden_remark")
    private String forbiddenRemark;
    @ApiModelProperty(value = "前端用户id")
    @TableField("app_user_id")
    private Long appUserId;
    @ApiModelProperty(value = "角色")
    @TableField(exist = false)
    private List<String> roleNames;
    @Override
    public String getRemark() {
        return remark;
    }
    @Override
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public SysUser()
    {
    }
    public SysUser(Long userId)
    {
        this.userId = userId;
    }
    public Integer getRoleType() {
        return roleType;
    }
    public void setRoleType(Integer roleType) {
        this.roleType = roleType;
    }
    public Date getPassWordUpdate() {
        return passWordUpdate;
    }
    public void setPassWordUpdate(Date passWordUpdate) {
        this.passWordUpdate = passWordUpdate;
    }
    public Integer getObjectId() {
        return objectId;
    }
    public void setObjectId(Integer objectId) {
        this.objectId = objectId;
    }
    public Long getUserId()
    {
        return userId;
    }
    public void setUserId(Long userId)
    {
        this.userId = userId;
    }
    public boolean isAdmin()
    {
        return isAdmin(this.userId);
    }
    public static boolean isAdmin(Long userId)
    {
        return userId != null && 1L == userId;
    }
    public Long getDeptId()
    {
        return deptId;
    }
    public void setDeptId(Long deptId)
    {
        this.deptId = deptId;
    }
    @Xss(message = "用户昵称不能包含脚本字符")
    @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
    public String getNickName()
    {
        return nickName;
    }
    public void setNickName(String nickName)
    {
        this.nickName = nickName;
    }
    @Xss(message = "用户账号不能包含脚本字符")
    @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
    public String getUserName()
    {
        return userName;
    }
    public void setUserName(String userName)
    {
        this.userName = userName;
    }
    @Email(message = "邮箱格式不正确")
    @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
    public String getEmail()
    {
        return email;
    }
    public void setEmail(String email)
    {
        this.email = email;
    }
    @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符")
    public String getPhonenumber()
    {
        return phonenumber;
    }
    public void setPhonenumber(String phonenumber)
    {
        this.phonenumber = phonenumber;
    }
    public String getSex()
    {
        return sex;
    }
    public void setSex(String sex)
    {
        this.sex = sex;
    }
    public String getAvatar()
    {
        return avatar;
    }
    public void setAvatar(String avatar)
    {
        this.avatar = avatar;
    }
    public String getPassword()
    {
        return password;
    }
    public void setPassword(String password)
    {
        this.password = password;
    }
    public String getStatus()
    {
        return status;
    }
    public void setStatus(String status)
    {
        this.status = status;
    }
    public String getDelFlag()
    {
        return delFlag;
    }
    public void setDelFlag(String delFlag)
    {
        this.delFlag = delFlag;
    }
    public String getLoginIp()
    {
        return loginIp;
    }
    public void setLoginIp(String loginIp)
    {
        this.loginIp = loginIp;
    }
    public Date getLoginDate()
    {
        return loginDate;
    }
    public void setLoginDate(Date loginDate)
    {
        this.loginDate = loginDate;
    }
    public SysDept getDept()
    {
        return dept;
    }
    public void setDept(SysDept dept)
    {
        this.dept = dept;
    }
    public List<SysRole> getRoles()
    {
        return roles;
    }
    public void setRoles(List<SysRole> roles)
    {
        this.roles = roles;
    }
    public Long[] getRoleIds()
    {
        return roleIds;
    }
    public void setRoleIds(Long[] roleIds)
    {
        this.roleIds = roleIds;
    }
    public Long[] getPostIds()
    {
        return postIds;
    }
    public void setPostIds(Long[] postIds)
    {
        this.postIds = postIds;
    }
    public Long getRoleId()
    {
        return roleId;
    }
    public void setRoleId(Long roleId)
    {
        this.roleId = roleId;
    }
    public Long getAppUserId() {
        return appUserId;
    }
    public void setAppUserId(Long appUserId) {
        this.appUserId = appUserId;
    }
    public void setRoleNames(List<String> roleNames) {
        this.roleNames = roleNames;
    }
    public String getForbiddenRemark() {
        return forbiddenRemark;
    }
    public void setForbiddenRemark(String forbiddenRemark) {
        this.forbiddenRemark = forbiddenRemark;
    }
    public List<String> getRoleNames() {
        return roleNames;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("userId", getUserId())
            .append("deptId", getDeptId())
            .append("userName", getUserName())
            .append("nickName", getNickName())
            .append("email", getEmail())
            .append("phonenumber", getPhonenumber())
            .append("sex", getSex())
            .append("avatar", getAvatar())
            .append("password", getPassword())
            .append("status", getStatus())
            .append("delFlag", getDelFlag())
            .append("loginIp", getLoginIp())
            .append("loginDate", getLoginDate())
            .append("createBy", getCreateBy())
            .append("createTime", getCreateTime())
            .append("updateBy", getUpdateBy())
            .append("updateTime", getUpdateTime())
            .append("remark", getRemark())
            .append("dept", getDept())
            .toString();
    }
public class SysUser extends BaseEntity {
    private static final long serialVersionUID = 1L;
    /**
     * 用户ID
     */
    @Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号")
    @TableId(value = "user_id", type = IdType.AUTO)
    private Long userId;
    /**
     * 部门ID
     */
    @Excel(name = "部门编号", type = Type.IMPORT)
    @TableField("dept_id")
    private Long deptId;
    /**
     * 用户账号
     */
    @Excel(name = "登录名称")
    @TableField("user_name")
    private String userName;
    /**
     * 用户昵称
     */
    @Excel(name = "用户名称")
    @NotBlank(message = "姓名不能为空")
    @TableField("nick_name")
    private String nickName;
    /**
     * 用户邮箱
     */
    @Excel(name = "用户邮箱")
    private String email;
    /**
     * 手机号码
     */
    @Excel(name = "手机号码")
    @NotBlank(message = "请输入账号")
    private String phonenumber;
    /**
     * 用户性别
     */
    @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")
    private String sex;
    /**
     * 用户头像
     */
    private String avatar;
    /**
     * 密码
     */
    private String password;
    /**
     * 帐号状态(0正常 1停用)
     */
    @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")
    private String status;
    /**
     * 删除标志(0代表存在 2代表删除)
     */
    @TableField("del_flag")
    private String delFlag;
    /**
     * 最后登录IP
     */
    @Excel(name = "最后登录IP", type = Type.EXPORT)
    @TableField("login_ip")
    private String loginIp;
    /**
     * 最后登录时间
     */
    @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField("login_date")
    private Date loginDate;
    /**
     * 部门对象
     */
    @Excels({
            @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT),
            @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT)
    })
    @TableField(exist = false)
    private SysDept dept;
    /**
     * 角色对象
     */
    @TableField(exist = false)
    private List<SysRole> roles;
    /**
     * 角色组
     */
    @TableField(exist = false)
    private Long[] roleIds;
    /**
     * 岗位组
     */
    @TableField(exist = false)
    private Long[] postIds;
    /**
     * 角色ID
     */
    @TableField(exist = false)
    private Long roleId;
    @Excel(name = "密码修改时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
    @TableField(exist = false)
    private Date passWordUpdate;
    @ApiModelProperty(value = "对象ID")
    @TableField("objectId")
    private Integer objectId;
    @ApiModelProperty(value = "备注")
    private String remark;
    @ApiModelProperty(value = "禁用账户备注")
    @TableField("forbidden_remark")
    private String forbiddenRemark;
    @ApiModelProperty(value = "前端用户id")
    @TableField(exist = false)
    private Long appUserId;
    @ApiModelProperty(value = "角色")
    @TableField(exist = false)
    private List<String> roleNames;
    public SysUser() {
    }
    public SysUser(Long userId) {
        this.userId = userId;
    }
    public static boolean isAdmin(Long userId) {
        return userId != null && 1L == userId;
    }
    @Override
    public String getRemark() {
        return remark;
    }
    @Override
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public Date getPassWordUpdate() {
        return passWordUpdate;
    }
    public void setPassWordUpdate(Date passWordUpdate) {
        this.passWordUpdate = passWordUpdate;
    }
    public Integer getObjectId() {
        return objectId;
    }
    public void setObjectId(Integer objectId) {
        this.objectId = objectId;
    }
    public Long getUserId() {
        return userId;
    }
    public void setUserId(Long userId) {
        this.userId = userId;
    }
    public boolean isAdmin() {
        return isAdmin(this.userId);
    }
    public Long getDeptId() {
        return deptId;
    }
    public void setDeptId(Long deptId) {
        this.deptId = deptId;
    }
    @Xss(message = "用户昵称不能包含脚本字符")
    @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
    public String getNickName() {
        return nickName;
    }
    public void setNickName(String nickName) {
        this.nickName = nickName;
    }
    @Xss(message = "用户账号不能包含脚本字符")
    @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    @Email(message = "邮箱格式不正确")
    @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符")
    public String getPhonenumber() {
        return phonenumber;
    }
    public void setPhonenumber(String phonenumber) {
        this.phonenumber = phonenumber;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getAvatar() {
        return avatar;
    }
    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    public String getDelFlag() {
        return delFlag;
    }
    public void setDelFlag(String delFlag) {
        this.delFlag = delFlag;
    }
    public String getLoginIp() {
        return loginIp;
    }
    public void setLoginIp(String loginIp) {
        this.loginIp = loginIp;
    }
    public Date getLoginDate() {
        return loginDate;
    }
    public void setLoginDate(Date loginDate) {
        this.loginDate = loginDate;
    }
    public SysDept getDept() {
        return dept;
    }
    public void setDept(SysDept dept) {
        this.dept = dept;
    }
    public List<SysRole> getRoles() {
        return roles;
    }
    public void setRoles(List<SysRole> roles) {
        this.roles = roles;
    }
    public Long[] getRoleIds() {
        return roleIds;
    }
    public void setRoleIds(Long[] roleIds) {
        this.roleIds = roleIds;
    }
    public Long[] getPostIds() {
        return postIds;
    }
    public void setPostIds(Long[] postIds) {
        this.postIds = postIds;
    }
    public Long getRoleId() {
        return roleId;
    }
    public void setRoleId(Long roleId) {
        this.roleId = roleId;
    }
    public Long getAppUserId() {
        return appUserId;
    }
    public void setAppUserId(Long appUserId) {
        this.appUserId = appUserId;
    }
    public String getForbiddenRemark() {
        return forbiddenRemark;
    }
    public void setForbiddenRemark(String forbiddenRemark) {
        this.forbiddenRemark = forbiddenRemark;
    }
    public List<String> getRoleNames() {
        return roleNames;
    }
    public void setRoleNames(List<String> roleNames) {
        this.roleNames = roleNames;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("userId", getUserId())
                .append("deptId", getDeptId())
                .append("userName", getUserName())
                .append("nickName", getNickName())
                .append("email", getEmail())
                .append("phonenumber", getPhonenumber())
                .append("sex", getSex())
                .append("avatar", getAvatar())
                .append("password", getPassword())
                .append("status", getStatus())
                .append("delFlag", getDelFlag())
                .append("loginIp", getLoginIp())
                .append("loginDate", getLoginDate())
                .append("createBy", getCreateBy())
                .append("createTime", getCreateTime())
                .append("updateBy", getUpdateBy())
                .append("updateTime", getUpdateTime())
                .append("remark", getRemark())
                .append("dept", getDept())
                .toString();
    }
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/Car.java
@@ -126,6 +126,12 @@
    @ApiModelProperty(value = "发动机排量")
    private String engineCapacity;
    /**
     * 行驶证照片
     */
    @TableField("travel_license")
    @ApiModelProperty(value = "行驶证照片")
    private String travelLicense;
    /**
     * 运输证发证机关
     */
    @TableField("transport_license_issuing_authority")
@@ -216,6 +222,16 @@
    @ApiModelProperty(value = "车辆状态(1=在线,2=异常,3=离线,4=故障)")
    private Integer status;
    /**
     * 上线时间
     */
    @TableField("online_time")
    private LocalDateTime onlineTime;
    /**
     * 下线时间
     */
    @TableField("downline_time")
    private LocalDateTime downlineTime;
    /**
     * 添加时间
     */
    @TableField("create_time")
@@ -226,4 +242,22 @@
    @TableField(exist = false)
    @ApiModelProperty(value = "司机名称")
    private String driverName;
    /**
     * 司机电话
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "司机电话")
    private String driverPhone;
    @TableField(exist = false)
    @ApiModelProperty(value = "驾驶证")
    private String drivingLicenseNumber;
    @TableField(exist = false)
    @ApiModelProperty(value = "驾驶证")
    private String drivingLicense;
    @TableField(exist = false)
    @ApiModelProperty(value = "驾驶时长")
    private Long drivingTime;
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/GetSysRoleByIds.java
@@ -13,5 +13,5 @@
    /**
     * ids
     */
    private List<Integer> ids;
    private List<Long> ids;
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/Order.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -30,6 +31,7 @@
     */
    @TableField("code")
    @ApiModelProperty(value = "订单编号")
    @Excel(name = "订单编号", width = 30)
    private String code;
    /**
     * 车辆id
@@ -40,10 +42,12 @@
    
    @TableField(exist = false)
    @ApiModelProperty(value = "车牌号")
    @Excel(name = "车牌号", width = 30)
    private String vehicleNumber;
    
    @TableField(exist = false)
    @ApiModelProperty(value = "车牌颜色")
    @Excel(name = "车牌颜色", width = 30)
    private String licensePlateColor;
    /**
     * 驾驶员id
@@ -53,8 +57,8 @@
    private Integer driverId;
    
    @TableField(exist = false)
    @ApiModelProperty(value = "司机姓名")
    private String driverName;
    @ApiModelProperty(value = "驾驶证编号")
    private String drivingLicenseNumber;
    /**
     * 企业id
     */
@@ -64,6 +68,7 @@
    
    @TableField(exist = false)
    @ApiModelProperty(value = "企业名称")
    @Excel(name = "车辆所属公司", width = 30)
    private String enterpriseName;
    /**
     * 下单地
@@ -72,23 +77,42 @@
    @ApiModelProperty(value = "下单地")
    private String orderPlace;
    /**
     * 发起地区划
     */
    @TableField("order_place_code")
    @ApiModelProperty(value = "发起地区划")
    private String orderPlaceCode;
    /**
     * 上车点
     */
    @TableField("boarding_point")
    @ApiModelProperty(value = "上车点")
    @Excel(name = "上车地点", width = 30)
    private String boardingPoint;
    /**
     * 下车点
     */
    @TableField("drop_off_point")
    @ApiModelProperty(value = "下车点")
    @Excel(name = "下车地点", width = 30)
    private String dropOffPoint;
    /**
     * 载客里程
     */
    @TableField("passenger_mileage")
    @ApiModelProperty(value = "载客里程")
    @Excel(name = "载客里程", width = 30)
    private String passengerMileage;
    @TableField(exist = false)
    @ApiModelProperty(value = "司机姓名")
    @Excel(name = "驾驶员名称", width = 30)
    private String driverName;
    @TableField(exist = false)
    @ApiModelProperty(value = "司机电话")
    @Excel(name = "驾驶员电话", width = 30)
    private String driverPhone;
    /**
     * 订单时间
     */
@@ -100,12 +124,14 @@
     */
    @TableField("order_delivery_time")
    @ApiModelProperty(value = "派单时间")
    @Excel(name = "派单时间", width = 30)
    private String orderDeliveryTime;
    /**
     * 订单金额
     */
    @TableField("order_amount")
    @ApiModelProperty(value = "订单金额")
    @Excel(name = "订单金额", width = 30)
    private String orderAmount;
    /**
     * 支付金额
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/Warn.java
@@ -74,6 +74,16 @@
    @TableField("warn_type")
    private String warnType;
    /**
     * 报警等级
     */
    @TableField("warn_level")
    private String warnLevel;
    /**
     * 报警来源
     */
    @TableField("warn_source")
    private String warnSource;
    /**
     * 报警次数
     */
    @TableField("warn_number")
@@ -123,4 +133,9 @@
     */
    @TableField("create_time")
    private LocalDateTime createTime;
    /**
     * 原始数据id
     */
    @TableField("object_id")
    private Integer objectId;
}
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java
@@ -1,125 +1,114 @@
package com.ruoyi.common.security.utils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.constant.TokenConstants;
import com.ruoyi.common.core.context.SecurityContextHolder;
import com.ruoyi.common.core.utils.ServletUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.system.api.model.LoginUser;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import javax.servlet.http.HttpServletRequest;
/**
 * 权限获取工具类
 *
 *
 * @author ruoyi
 */
public class SecurityUtils
{
    /**
     * 获取用户ID
     */
    public static Long getUserId()
    {
        return SecurityContextHolder.getUserId();
    }
    /**
     * 获取用户名称
     */
    public static String getUsername()
    {
        return SecurityContextHolder.getUserName();
    }
    /**
     * 获取用户key
     */
    public static String getUserKey()
    {
        return SecurityContextHolder.getUserKey();
    }
    /**
     * 获取登录用户信息
     */
    public static LoginUser getLoginUser()
    {
        return SecurityContextHolder.get(SecurityConstants.LOGIN_USER, LoginUser.class);
    }
    /**
     * 获取请求token
     */
    public static String getToken()
    {
        return getToken(ServletUtils.getRequest());
    }
    /**
     * 根据request获取请求token
     */
    public static String getToken(HttpServletRequest request)
    {
        // 从header获取token标识
        String token = request.getHeader(TokenConstants.AUTHENTICATION);
        return replaceTokenPrefix(token);
    }
    /**
     * 裁剪token前缀
     */
    public static String replaceTokenPrefix(String token)
    {
        // 如果前端设置了令牌前缀,则裁剪掉前缀
        if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.PREFIX))
        {
            token = token.replaceFirst(TokenConstants.PREFIX, "");
        }
        return token;
    }
    /**
     * 是否为管理员
     *
     * @param userId 用户ID
     * @return 结果
     */
    public static boolean isAdmin(Long userId)
    {
        return userId != null && 1L == userId;
    }
    /**
     * 生成BCryptPasswordEncoder密码
     *
     * @param password 密码
     * @return 加密字符串
     */
    public static String encryptPassword(String password)
    {
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        return passwordEncoder.encode(password);
    }
    /**
     * 判断密码是否相同
     *
     * @param rawPassword 真实密码
     * @param encodedPassword 加密后字符
     * @return 结果
     */
    public static boolean matchesPassword(String rawPassword, String encodedPassword)
    {
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        return passwordEncoder.matches(rawPassword, encodedPassword);
    }
    public static void main(String[] args) {
        String s = encryptPassword("0192023a7bbd73250516f069df18b500");
        System.err.println(s);
public class SecurityUtils {
    /**
     * 获取用户ID
     */
    public static Long getUserId() {
        return SecurityContextHolder.getUserId();
    }
    /**
     * 获取用户名称
     */
    public static String getUsername() {
        return SecurityContextHolder.getUserName();
    }
    /**
     * 获取用户key
     */
    public static String getUserKey() {
        return SecurityContextHolder.getUserKey();
    }
    /**
     * 获取登录用户信息
     */
    public static LoginUser getLoginUser() {
        return SecurityContextHolder.get(SecurityConstants.LOGIN_USER, LoginUser.class);
    }
    /**
     * 获取请求token
     */
    public static String getToken() {
        return getToken(ServletUtils.getRequest());
    }
    /**
     * 根据request获取请求token
     */
    public static String getToken(HttpServletRequest request) {
        // 从header获取token标识
        String token = request.getHeader(TokenConstants.AUTHENTICATION);
        return replaceTokenPrefix(token);
    }
    /**
     * 裁剪token前缀
     */
    public static String replaceTokenPrefix(String token) {
        // 如果前端设置了令牌前缀,则裁剪掉前缀
        if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.PREFIX)) {
            token = token.replaceFirst(TokenConstants.PREFIX, "");
        }
        return token;
    }
    /**
     * 是否为管理员
     *
     * @param userId 用户ID
     * @return 结果
     */
    public static boolean isAdmin(Long userId) {
        return userId != null && 1L == userId;
    }
    /**
     * 生成BCryptPasswordEncoder密码
     *
     * @param password 密码
     * @return 加密字符串
     */
    public static String encryptPassword(String password) {
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        return passwordEncoder.encode(password);
    }
    /**
     * 判断密码是否相同
     *
     * @param rawPassword     真实密码
     * @param encodedPassword 加密后字符
     * @return 结果
     */
    public static boolean matchesPassword(String rawPassword, String encodedPassword) {
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        return passwordEncoder.matches(rawPassword, encodedPassword);
    }
    public static void main(String[] args) {
        String s = encryptPassword("0173940ec8314d1671c2ba365d28fcc1");
        System.err.println(s);
//        System.err.println(matchesPassword("c4ca4238a0b923820dcc509a6f75849b", "$2a$10$/7z/wiZ2ejTjD4GQuuyiSe1ptS8uoxrRAUlGCitiLEmpOO78cISeq"));
    }
    }
}
ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SwaggerProvider.java
@@ -1,8 +1,5 @@
package com.ruoyi.gateway.config;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gateway.config.GatewayProperties;
import org.springframework.cloud.gateway.route.RouteLocator;
@@ -14,6 +11,9 @@
import springfox.documentation.swagger.web.SwaggerResource;
import springfox.documentation.swagger.web.SwaggerResourcesProvider;
import java.util.ArrayList;
import java.util.List;
/**
 * 聚合系统接口
 *
ruoyi-modules/ruoyi-system/pom.xml
@@ -114,6 +114,17 @@
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-api-dataInterchange</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.4</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.3.0</version>
            <type>pom</type>
        </dependency>
    </dependencies>
    
    <build>
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CarController.java
@@ -30,6 +30,7 @@
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.List;
@@ -88,7 +89,11 @@
        Driver driver = driverService.getOne(new LambdaQueryWrapper<Driver>().eq(Driver::getVehicleNumber, car.getVehicleNumber()).eq(Driver::getStatus, 1));
        Enterprise enterprise = enterpriseService.getById(car.getEnterpriseId());
        car.setEnterpriseName(enterprise.getName());
        car.setDriverName(driver.getName());
        if (null != driver) {
            car.setDriverName(driver.getName());
            car.setDriverPhone(driver.getPhone());
            car.setDrivingLicenseNumber(driver.getDrivingLicenceFile());
        }
        return R.ok(car);
    }
    
@@ -189,10 +194,10 @@
    @ApiOperation(value = "获取车辆状态汇总数据和公司总数等", tags = {"首页"})
    public R<CarStatusCount> getCarStatusCount() {
        List<Car> list = carService.list();
        long online = list.stream().filter(s -> s.getStatus() == 1).count();
        long offline = list.stream().filter(s -> s.getStatus() == 3).count();
        long breakdown = list.stream().filter(s -> s.getStatus() == 4).count();
        long abnormal = list.stream().filter(s -> s.getStatus() == 2).count();
        long online = list.isEmpty() ? 0 : list.stream().filter(s -> s.getStatus() == 1).count();
        long offline = list.isEmpty() ? 0 : list.stream().filter(s -> s.getStatus() == 3).count();
        long breakdown = list.isEmpty() ? 0 : list.stream().filter(s -> s.getStatus() == 4).count();
        long abnormal = list.isEmpty() ? 0 : list.stream().filter(s -> s.getStatus() == 2).count();
        CarStatusCount carStatusCount = new CarStatusCount();
        carStatusCount.setOffline(offline);
        carStatusCount.setOnline(online);
@@ -210,11 +215,15 @@
    @GetMapping("/getMapCarList")
    @ApiOperation(value = "获取地图司机数据", tags = {"首页"})
    public R<List<Car>> getMapCarList() {
        List<Car> list = carService.list();
        List<Car> list = carService.list(new LambdaQueryWrapper<Car>().eq(Car::getStatus, 1));
        for (Car car : list) {
            Long s = (null == car.getDownlineTime() ? LocalDateTime.now() : car.getDownlineTime()).toEpochSecond(ZoneOffset.ofHours(8)) - car.getOnlineTime().toEpochSecond(ZoneOffset.ofHours(8));
            car.setDrivingTime(s / 60);
            GnssDataVo gnssDataVo = (GnssDataVo) redisTemplate.opsForValue().get("location:" + car.getVehicleNumber());
            car.setLongitude(Double.valueOf(gnssDataVo.getLon() / 1000000).toString());
            car.setLatitude(Double.valueOf(gnssDataVo.getLat() / 1000000).toString());
            if (null != gnssDataVo) {
                car.setLongitude(new BigDecimal(gnssDataVo.getLon()).divide(new BigDecimal(1000000)).toString());
                car.setLatitude(new BigDecimal(gnssDataVo.getLat()).divide(new BigDecimal(1000000)).toString());
            }
        }
        return R.ok(list);
    }
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/ComplainController.java
@@ -1,16 +1,23 @@
package com.ruoyi.system.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.system.query.ComplainListReq;
import com.ruoyi.system.query.ComplainListResp;
import com.ruoyi.system.service.IComplainService;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
/**
 * @author zhibing.pu
@@ -31,4 +38,33 @@
        return R.ok(page);
    }
    
    @GetMapping("/exportComplainList")
    @ApiOperation(value = "导出投诉记录列表", tags = {"投诉记录"})
    public void exportComplainList(ComplainListReq complainListReq, HttpServletResponse response) {
        complainListReq.setPageSize(99999);
        PageInfo<ComplainListResp> page = complainService.getComplainList(complainListReq);
        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), ComplainListResp.class, page.getRecords());
        response.setCharacterEncoding("utf-8");
        ServletOutputStream outputStream = null;
        try {
            String fileName = URLEncoder.encode("投诉记录.xls", "utf-8");
            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
            response.setContentType("application/vnd.ms-excel;charset=UTF-8");
            response.setHeader("Pragma", "no-cache");
            response.setHeader("Cache-Control", "no-cache");
            outputStream = response.getOutputStream();
            workbook.write(outputStream);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                workbook.close();
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/OrderController.java
@@ -1,5 +1,7 @@
package com.ruoyi.system.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.dataInterchange.api.feignClient.PlaybackMsgClient;
@@ -19,23 +21,30 @@
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.List; /**
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2025/3/24 17:50
 */
@RestController
@RequestMapping("/order")
public class OrderController {
    @Resource
    private IOrderService orderService;
    
@@ -55,15 +64,41 @@
    private PlaybackMsgClient playbackMsgClient;
    
    
    @GetMapping("/getOrderList")
    @ApiOperation(value = "获取订单列表", tags = {"车辆管理", "订单管理"})
    public R<PageInfo<Order>> getOrderList(OrderListReq req){
    public R<PageInfo<Order>> getOrderList(OrderListReq req) {
        PageInfo<Order> orderList = orderService.getOrderList(req);
        return R.ok(orderList);
    }
    
    @GetMapping("/exportOrderList")
    @ApiOperation(value = "导出订单列表", tags = {"订单管理"})
    public void exportOrderList(OrderListReq req, HttpServletResponse response) {
        req.setPageSize(99999);
        PageInfo<Order> orderList = orderService.getOrderList(req);
        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), Order.class, orderList.getRecords());
        response.setCharacterEncoding("utf-8");
        ServletOutputStream outputStream = null;
        try {
            String fileName = URLEncoder.encode("订单列表.xls", "utf-8");
            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
            response.setContentType("application/vnd.ms-excel;charset=UTF-8");
            response.setHeader("Pragma", "no-cache");
            response.setHeader("Cache-Control", "no-cache");
            outputStream = response.getOutputStream();
            workbook.write(outputStream);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                workbook.close();
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    
    @GetMapping("/getOrderInfo/{id}")
@@ -71,20 +106,23 @@
    @ApiImplicitParams({
            @ApiImplicitParam(value = "订单id", name = "id", required = true)
    })
    public R<Order> getOrderInfo(@PathVariable("id") Integer id){
    public R<Order> getOrderInfo(@PathVariable("id") Integer id) {
        Order order = orderService.getById(id);
        if(null == order){
        if (null == order) {
            return R.fail("失败");
        }
        Driver driver = driverService.getById(order.getDriverId());
        Car car = carService.getById(order.getCarId());
        Enterprise enterprise = enterpriseService.getById(order.getEnterpriseId());
        order.setDriverName(driver.getName());
        if (null != driver) {
            order.setDriverName(driver.getName());
            order.setDriverPhone(driver.getPhone());
            order.setDrivingLicenseNumber(driver.getDrivingLicenseNumber());
        }
        order.setVehicleNumber(car.getVehicleNumber());
        order.setEnterpriseName(enterprise.getName());
        return R.ok(order);
    }
    
    
    @GetMapping("/getOrderTravel")
@@ -92,9 +130,9 @@
    @ApiImplicitParams({
            @ApiImplicitParam(value = "订单id", name = "id", required = true)
    })
    public R<List<OrderTravelVo>> getOrderTravel(@PathVariable("id") Integer id){
    public R<List<OrderTravelVo>> getOrderTravel(Integer id) {
        Order order = orderService.getById(id);
        if(null == order){
        if (null == order) {
            return R.fail("失败");
        }
        Car car = carService.getById(order.getCarId());
@@ -106,15 +144,14 @@
    }
    
    
    @GetMapping("/getOrderMonitoring")
    @ApiOperation(value = "获取订单监控", tags = {"订单管理"})
    @ApiImplicitParams({
            @ApiImplicitParam(value = "订单id", name = "id", required = true)
    })
    public R<RealVideoResp> getOrderMonitoring(@PathVariable("id") Integer id){
    public R<RealVideoResp> getOrderMonitoring(Integer id) {
        Order order = orderService.getById(id);
        if(null == order){
        if (null == order) {
            return R.fail("失败");
        }
        Car car = carService.getById(order.getCarId());
@@ -124,7 +161,7 @@
        long endTime = dateTime.plusDays(1).toEpochSecond(ZoneOffset.ofHours(8));
        R<UPPlaybackMsgStartupAckVo> startupAckVoR = playbackMsgClient.playbackMsgStartup(Integer.valueOf(enterprise.getCode()), car.getVehicleNumber(),
                startTime, endTime);
        if(200 == startupAckVoR.getCode()){
        if (200 == startupAckVoR.getCode()) {
            UPPlaybackMsgStartupAckVo data = startupAckVoR.getData();
            RealVideoResp resp = new RealVideoResp();
            resp.setServerIp(data.getServerIP());
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java
@@ -1,6 +1,5 @@
package com.ruoyi.system.controller;
import com.ruoyi.common.core.constant.UserConstants;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
@@ -33,7 +32,7 @@
     * 获取部门列表
     */
    @GetMapping("/list")
    @ApiOperation(value = "获取部门列表", tags = {"管理后台-部门管理", "门店后台-部门管理"})
    @ApiOperation(value = "获取部门列表", tags = {"管理后台-部门管理"})
    public AjaxResult list(SysDept dept) {
        List<SysDept> depts = deptService.selectDeptList(dept);
        return success(depts);
@@ -63,7 +62,7 @@
     * 新增部门
     */
    @Log(title = "部门管理", businessType = BusinessType.INSERT)
    @ApiOperation(value = "添加部门", tags = {"管理后台-部门管理", "门店后台-部门管理"})
    @ApiOperation(value = "添加部门", tags = {"管理后台-部门管理"})
    @PostMapping
    public AjaxResult add(@Validated @RequestBody SysDept dept) {
        if (!deptService.checkDeptNameUnique(dept)) {
@@ -77,7 +76,7 @@
     * 修改部门
     */
    @Log(title = "部门管理", businessType = BusinessType.UPDATE)
    @ApiOperation(value = "编辑部门", tags = {"管理后台-部门管理", "门店后台-部门管理"})
    @ApiOperation(value = "编辑部门", tags = {"管理后台-部门管理"})
    @PutMapping
    public AjaxResult edit(@Validated @RequestBody SysDept dept) {
        Long deptId = dept.getDeptId();
@@ -101,7 +100,7 @@
     * 删除部门
     */
    @Log(title = "部门管理", businessType = BusinessType.DELETE)
    @ApiOperation(value = "删除部门", tags = {"管理后台-部门管理", "门店后台-部门管理"})
    @ApiOperation(value = "删除部门", tags = {"管理后台-部门管理"})
    @DeleteMapping("/{deptId}")
    public AjaxResult remove(@PathVariable Long deptId)
    {
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
@@ -149,17 +149,6 @@
        ajax.put("posts", postService.selectPostAll());
        if (StringUtils.isNotNull(userId)) {
            SysUser sysUser = userService.selectUserById(userId);
            if (sysUser.getRoleType() == 2) {
                Long userid = tokenService.getLoginUser().getUserid();
                SysUser sysUser1 = userService.selectUserById(userid);
                UserShop one = userShopService.getOne(new LambdaQueryWrapper<UserShop>().eq(UserShop::getUserId, sysUser.getUserId()).eq(UserShop::getShopId, sysUser1.getObjectId()));
                sysUser.setDeptId(one.getDeptId());
                sysUser.setNickName(one.getNickName());
                SysDept sysDept = deptService.selectDeptById(one.getDeptId());
                sysUser.setDept(sysDept);
                sysUser.setRoleId(one.getRoleId());
            }
            ajax.put("data", sysUser);
            ajax.put("postIds", postService.selectPostListByUserId(userId));
            ajax.put("roleIds", sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList()));
@@ -528,9 +517,6 @@
        }
        user.setCreateBy(SecurityUtils.getUsername());
        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
        if (null == user.getRoleType()) {
            user.setRoleType(1);
        }
        userService.insertUser(user);
        SysUserRole sysUserRole = new SysUserRole();
        sysUserRole.setRoleId(user.getRoleId());
@@ -567,7 +553,7 @@
    @PostMapping("/saveShopUser")
    public R<Long> saveShopUser(@RequestBody SysUser user) {
        SysUser one = userService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getPhonenumber, user.getPhonenumber()).eq(SysUser::getDelFlag, "0")
                .eq(SysUser::getStatus, "0").eq(SysUser::getRoleType, 2));
                .eq(SysUser::getStatus, "0"));
        if (null == one) {
            user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
            userService.save(user);
@@ -614,25 +600,6 @@
    }
    
    
    @ResponseBody
    @PutMapping("/switchShop/{shopId}")
    @ApiOperation(value = "切换门店", tags = {"门店后台-首页"})
    public R<Set<String>> switchShop(@PathVariable("shopId") Integer shopId) {
        Long userid = tokenService.getLoginUser().getUserid();
        UserShop one = userShopService.getOne(new LambdaQueryWrapper<UserShop>().eq(UserShop::getUserId, userid).eq(UserShop::getShopId, shopId));
        if (null == one) {
            return R.fail("切换失败");
        }
        SysUser sysUser = userService.getById(userid);
        sysUser.setObjectId(shopId);
        userService.updateById(sysUser);
        //查询用户权限列表
        Long roleId = one.getRoleId();
        Set<String> rolePerms = menuService.selectMenuPermsByRoleId(roleId);
        return R.ok(rolePerms);
    }
    /**
     * 通过账号和账号权限查询用户
     *
@@ -645,7 +612,6 @@
                .eq(SysUser::getUserName, userName)
                .eq(SysUser::getDelFlag, "0")
                .eq(SysUser::getStatus, 0)
                .eq(SysUser::getRoleType, roleType)
                .last("LIMIT 1"));
        return R.ok(user);
    }
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WarnController.java
@@ -1,5 +1,7 @@
package com.ruoyi.system.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.page.PageInfo;
@@ -15,13 +17,17 @@
import com.ruoyi.system.service.IWarnService;
import com.ruoyi.system.util.GDMapGeocodingUtil;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
@@ -56,9 +62,38 @@
    }
    
    
    @GetMapping("/exportCarWarnList")
    @ApiOperation(value = "导出车辆预警列表数据", tags = {"预警记录"})
    public void exportCarWarnList(CarWarnListReq carWarnListReq, HttpServletResponse response) {
        carWarnListReq.setPageSize(99999);
        PageInfo<CarWarnListResp> pageInfo = warnService.getCarWarnList(carWarnListReq);
        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), CarWarnListResp.class, pageInfo.getRecords());
        response.setCharacterEncoding("utf-8");
        ServletOutputStream outputStream = null;
        try {
            String fileName = URLEncoder.encode("预警记录.xls", "utf-8");
            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
            response.setContentType("application/vnd.ms-excel;charset=UTF-8");
            response.setHeader("Pragma", "no-cache");
            response.setHeader("Cache-Control", "no-cache");
            outputStream = response.getOutputStream();
            workbook.write(outputStream);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                workbook.close();
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    @GetMapping("/getCarWarnInfo")
    @ApiOperation(value = "获取车辆预警详情数据", tags = {"车辆管理", "预警记录"})
    public R<CarWarnInfoResp> getCarWarnInfo(@PathVariable("vehicleNumber") String vehicleNumber) {
    public R<CarWarnInfoResp> getCarWarnInfo(String vehicleNumber) {
        Car car = carService.getOne(new LambdaQueryWrapper<Car>().eq(Car::getVehicleNumber, vehicleNumber));
        if (null == car) {
            return R.ok();
@@ -71,7 +106,9 @@
        carWarnInfoResp.setSpeed(new BigDecimal(gnssDataVo.getVec1()));
        Map<String, String> geocode = null;
        try {
            geocode = GDMapGeocodingUtil.geocode(Double.valueOf(gnssDataVo.getLon() / 1000000).toString(), Double.valueOf(gnssDataVo.getLat() / 1000000).toString());
            String longitude = new BigDecimal(gnssDataVo.getLon()).divide(new BigDecimal(1000000)).toString();
            String latitude = new BigDecimal(gnssDataVo.getLat()).divide(new BigDecimal(1000000)).toString();
            geocode = GDMapGeocodingUtil.geocode(longitude, latitude);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java
@@ -8,113 +8,113 @@
/**
 * 角色表 数据层
 *
 *
 * @author ruoyi
 */
public interface SysRoleMapper extends BaseMapper<SysRole>
{
    /**
     * 根据条件分页查询角色数据
     *
     * @param role 角色信息
     * @return 角色数据集合信息
     */
    public List<SysRole> selectRoleList(SysRole role);
    /**
     * 根据用户ID查询角色
     *
     * @param userId 用户ID
     * @return 角色列表
     */
    public List<SysRole> selectRolePermissionByUserId(Long userId);
    /**
     * 查询所有角色
     *
     * @return 角色列表
     */
    public List<SysRole> selectRoleAll();
    /**
     * 根据用户ID获取角色选择框列表
     *
     * @param userId 用户ID
     * @return 选中角色ID列表
     */
    public List<Long> selectRoleListByUserId(Long userId);
    /**
     * 通过角色ID查询角色
     *
     * @param roleId 角色ID
     * @return 角色对象信息
     */
    public SysRole selectRoleById(Long roleId);
    /**
     * 根据用户ID查询角色
     *
     * @param userName 用户名
     * @return 角色列表
     */
    public List<SysRole> selectRolesByUserName(String userName);
    /**
     * 校验角色名称是否唯一
     *
     * @param roleName 角色名称
     * @return 角色信息
     */
    public SysRole checkRoleNameUnique(String roleName);
    /**
     * 校验角色权限是否唯一
     *
     * @param roleKey 角色权限
     * @return 角色信息
     */
    public SysRole checkRoleKeyUnique(String roleKey);
    /**
     * 修改角色信息
     *
     * @param role 角色信息
     * @return 结果
     */
    public int updateRole(SysRole role);
    /**
     * 新增角色信息
     *
     * @param role 角色信息
     * @return 结果
     */
    public int insertRole(SysRole role);
    /**
     * 通过角色ID删除角色
     *
     * @param roleId 角色ID
     * @return 结果
     */
    public int deleteRoleById(Long roleId);
    /**
     * 批量删除角色信息
     *
     * @param roleIds 需要删除的角色ID
     * @return 结果
     */
    public int deleteRoleByIds(Long[] roleIds);
    List<SysRole> isExitUpdate(@Param("roleName") String roleName, @Param("roleId") Long roleId, @Param("companyId") Integer companyId);
    /**
     * 根据id获取数据
     * @param ids
     * @return
     */
    List<SysRole> getSysRoleByIds(@Param("ids") List<Integer> ids);
public interface SysRoleMapper extends BaseMapper<SysRole> {
    /**
     * 根据条件分页查询角色数据
     *
     * @param role 角色信息
     * @return 角色数据集合信息
     */
    public List<SysRole> selectRoleList(SysRole role);
    /**
     * 根据用户ID查询角色
     *
     * @param userId 用户ID
     * @return 角色列表
     */
    public List<SysRole> selectRolePermissionByUserId(Long userId);
    /**
     * 查询所有角色
     *
     * @return 角色列表
     */
    public List<SysRole> selectRoleAll();
    /**
     * 根据用户ID获取角色选择框列表
     *
     * @param userId 用户ID
     * @return 选中角色ID列表
     */
    public List<Long> selectRoleListByUserId(Long userId);
    /**
     * 通过角色ID查询角色
     *
     * @param roleId 角色ID
     * @return 角色对象信息
     */
    public SysRole selectRoleById(Long roleId);
    /**
     * 根据用户ID查询角色
     *
     * @param userName 用户名
     * @return 角色列表
     */
    public List<SysRole> selectRolesByUserName(String userName);
    /**
     * 校验角色名称是否唯一
     *
     * @param roleName 角色名称
     * @return 角色信息
     */
    public SysRole checkRoleNameUnique(String roleName);
    /**
     * 校验角色权限是否唯一
     *
     * @param roleKey 角色权限
     * @return 角色信息
     */
    public SysRole checkRoleKeyUnique(String roleKey);
    /**
     * 修改角色信息
     *
     * @param role 角色信息
     * @return 结果
     */
    public int updateRole(SysRole role);
    /**
     * 新增角色信息
     *
     * @param role 角色信息
     * @return 结果
     */
    public int insertRole(SysRole role);
    /**
     * 通过角色ID删除角色
     *
     * @param roleId 角色ID
     * @return 结果
     */
    public int deleteRoleById(Long roleId);
    /**
     * 批量删除角色信息
     *
     * @param roleIds 需要删除的角色ID
     * @return 结果
     */
    public int deleteRoleByIds(Long[] roleIds);
    List<SysRole> isExitUpdate(@Param("roleName") String roleName, @Param("roleId") Long roleId, @Param("companyId") Integer companyId);
    /**
     * 根据id获取数据
     *
     * @param ids
     * @return
     */
    List<SysRole> getSysRoleByIds(@Param("ids") List<Long> ids);
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/CarWarnListResp.java
@@ -1,10 +1,13 @@
package com.ruoyi.system.query;
import com.ruoyi.common.core.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal; /**
import java.math.BigDecimal;
/**
 * @author zhibing.pu
 * @Date 2025/3/27 13:49
 */
@@ -12,35 +15,56 @@
@ApiModel
public class CarWarnListResp {
    @ApiModelProperty("车辆名称")
    @Excel(name = "车辆名称", width = 30)
    private String carName;
    @ApiModelProperty("车牌号")
    @Excel(name = "车牌号码", width = 30)
    private String vehicleNumber;
    @ApiModelProperty("持续报警")
    private String keepWarn;
    @ApiModelProperty("驾驶员名称")
    @Excel(name = "驾驶员名称", width = 30)
    private String driverName;
    @ApiModelProperty("所属公司")
    @Excel(name = "所属公司", width = 30)
    private String enterpriseName;
    @ApiModelProperty("终端编号")
    @Excel(name = "终端编号", width = 30)
    private String terminalNumber;
    @ApiModelProperty("开始报警时间")
    @Excel(name = "开始报警时间", width = 30)
    private String startTime;
    @ApiModelProperty("结束报警时间")
    @Excel(name = "结束报警时间", width = 30)
    private String endTime;
    @ApiModelProperty("持续报警")
    private String keepWarn;
    @ApiModelProperty("持续时长")
    @Excel(name = "持续时长", width = 30)
    private Integer keepTime;
    @ApiModelProperty("持续里程")
    @Excel(name = "持续里程", width = 30)
    private BigDecimal keepDistance;
    @ApiModelProperty("报警类型")
    @Excel(name = "报警类型", width = 30)
    private String warnType;
    @ApiModelProperty("报警等级")
    @Excel(name = "报警等级", width = 30)
    private String warnLevel;
    @ApiModelProperty("报警次数")
    @Excel(name = "报警次数", width = 30)
    private Integer warnNumber;
    @ApiModelProperty("报警来源")
    @Excel(name = "报警来源", width = 30)
    private String warnSource;
    @ApiModelProperty("处理状态")
    @Excel(name = "处理状态", width = 30)
    private String treatmentState;
    @ApiModelProperty("处理人")
    @Excel(name = "处理人", width = 30)
    private String treatmentUser;
    @ApiModelProperty("处理时间")
    @Excel(name = "处理时间", width = 30)
    private String treatmentTime;
    @ApiModelProperty("处理描述")
    @Excel(name = "处理描述", width = 30)
    private String treatmentRemark;
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/ComplainListResp.java
@@ -1,5 +1,6 @@
package com.ruoyi.system.query;
import cn.afterturn.easypoi.excel.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -12,25 +13,36 @@
@ApiModel
public class ComplainListResp {
    @ApiModelProperty("车辆名称")
    @Excel(name = "车辆名称", width = 30)
    private String carName;
    @ApiModelProperty("车牌号")
    @Excel(name = "车牌号码", width = 30)
    private String vehicleNumber;
    @ApiModelProperty("投诉内容")
    @Excel(name = "投诉内容", width = 30)
    private String content;
    @ApiModelProperty("投诉人电话")
    @Excel(name = "投诉人电话", width = 30)
    private String complainPhone;
    @ApiModelProperty("驾驶员名称")
    private String driverName;
    @ApiModelProperty("所属公司")
    @Excel(name = "被投诉所属公司", width = 30)
    private String enterpriseName;
    @ApiModelProperty("驾驶员名称")
    @Excel(name = "被投诉驾驶员", width = 30)
    private String driverName;
    @ApiModelProperty("投诉时间")
    @Excel(name = "投诉时间", width = 30)
    private String complainTime;
    @ApiModelProperty("处理状态")
    @Excel(name = "处理状态", width = 30)
    private String treatmentState;
    @ApiModelProperty("处理人")
    @Excel(name = "处理人", width = 30)
    private String treatmentUser;
    @ApiModelProperty("处理时间")
    @Excel(name = "处理时间", width = 30)
    private String treatmentTime;
    @ApiModelProperty("处理描述")
    @Excel(name = "处理描述", width = 30)
    private String treatmentRemark;
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java
@@ -10,177 +10,177 @@
/**
 * 角色业务层
 *
 *
 * @author ruoyi
 */
public interface ISysRoleService extends IService<SysRole>
{
    /**
     * 根据条件分页查询角色数据
     *
     * @param role 角色信息
     * @return 角色数据集合信息
     */
    public List<SysRole> selectRoleList(SysRole role);
    /**
     * 根据用户ID查询角色列表
     *
     * @param userId 用户ID
     * @return 角色列表
     */
    public List<SysRole> selectRolesByUserId(Long userId);
    /**
     * 根据用户ID查询角色权限
     *
     * @param userId 用户ID
     * @return 权限列表
     */
    public Set<String> selectRolePermissionByUserId(SysUser user);
    /**
     * 查询所有角色
     *
     * @return 角色列表
     */
    public List<SysRole> selectRoleAll();
    /**
     * 根据用户ID获取角色选择框列表
     *
     * @param userId 用户ID
     * @return 选中角色ID列表
     */
    public List<Long> selectRoleListByUserId(Long userId);
    /**
     * 通过角色ID查询角色
     *
     * @param roleId 角色ID
     * @return 角色对象信息
     */
    public SysRole selectRoleById(Long roleId);
    /**
     * 校验角色名称是否唯一
     *
     * @param role 角色信息
     * @return 结果
     */
    public boolean checkRoleNameUnique(SysRole role);
    /**
     * 校验角色权限是否唯一
     *
     * @param role 角色信息
     * @return 结果
     */
    public boolean checkRoleKeyUnique(SysRole role);
    /**
     * 校验角色是否允许操作
     *
     * @param role 角色信息
     */
    public void checkRoleAllowed(SysRole role);
    /**
     * 校验角色是否有数据权限
     *
     * @param roleId 角色id
     */
    public void checkRoleDataScope(Long roleId);
    /**
     * 通过角色ID查询角色使用数量
     *
     * @param roleId 角色ID
     * @return 结果
     */
    public int countUserRoleByRoleId(Long roleId);
    /**
     * 新增保存角色信息
     *
     * @param role 角色信息
     * @return 结果
     */
    public int insertRole(SysRole role);
    /**
     * 修改保存角色信息
     *
     * @param role 角色信息
     * @return 结果
     */
    public int updateRole(SysRole role);
    /**
     * 修改角色状态
     *
     * @param role 角色信息
     * @return 结果
     */
    public int updateRoleStatus(SysRole role);
    /**
     * 修改数据权限信息
     *
     * @param role 角色信息
     * @return 结果
     */
    public int authDataScope(SysRole role);
    /**
     * 通过角色ID删除角色
     *
     * @param roleId 角色ID
     * @return 结果
     */
    public int deleteRoleById(Long roleId);
    /**
     * 批量删除角色信息
     *
     * @param roleIds 需要删除的角色ID
     * @return 结果
     */
    public int deleteRoleByIds(Long[] roleIds);
    /**
     * 取消授权用户角色
     *
     * @param userRole 用户和角色关联信息
     * @return 结果
     */
    public int deleteAuthUser(SysUserRole userRole);
    /**
     * 批量取消授权用户角色
     *
     * @param roleId 角色ID
     * @param userIds 需要取消授权的用户数据ID
     * @return 结果
     */
    public int deleteAuthUsers(Long roleId, Long[] userIds);
    /**
     * 批量选择授权用户角色
     *
     * @param roleId 角色ID
     * @param userIds 需要删除的用户数据ID
     * @return 结果
     */
    public int insertAuthUsers(Long roleId, Long[] userIds);
    List<SysRole> isExitUpdate(String roleName, Long roleId,Integer companyId);
    /**
     * 根据id获取数据
     * @param ids 数据id集合
     * @return
     */
    List<SysRole> getSysRoleByIds(List<Integer> ids);
public interface ISysRoleService extends IService<SysRole> {
    /**
     * 根据条件分页查询角色数据
     *
     * @param role 角色信息
     * @return 角色数据集合信息
     */
    public List<SysRole> selectRoleList(SysRole role);
    /**
     * 根据用户ID查询角色列表
     *
     * @param userId 用户ID
     * @return 角色列表
     */
    public List<SysRole> selectRolesByUserId(Long userId);
    /**
     * 根据用户ID查询角色权限
     *
     * @param userId 用户ID
     * @return 权限列表
     */
    public Set<String> selectRolePermissionByUserId(SysUser user);
    /**
     * 查询所有角色
     *
     * @return 角色列表
     */
    public List<SysRole> selectRoleAll();
    /**
     * 根据用户ID获取角色选择框列表
     *
     * @param userId 用户ID
     * @return 选中角色ID列表
     */
    public List<Long> selectRoleListByUserId(Long userId);
    /**
     * 通过角色ID查询角色
     *
     * @param roleId 角色ID
     * @return 角色对象信息
     */
    public SysRole selectRoleById(Long roleId);
    /**
     * 校验角色名称是否唯一
     *
     * @param role 角色信息
     * @return 结果
     */
    public boolean checkRoleNameUnique(SysRole role);
    /**
     * 校验角色权限是否唯一
     *
     * @param role 角色信息
     * @return 结果
     */
    public boolean checkRoleKeyUnique(SysRole role);
    /**
     * 校验角色是否允许操作
     *
     * @param role 角色信息
     */
    public void checkRoleAllowed(SysRole role);
    /**
     * 校验角色是否有数据权限
     *
     * @param roleId 角色id
     */
    public void checkRoleDataScope(Long roleId);
    /**
     * 通过角色ID查询角色使用数量
     *
     * @param roleId 角色ID
     * @return 结果
     */
    public int countUserRoleByRoleId(Long roleId);
    /**
     * 新增保存角色信息
     *
     * @param role 角色信息
     * @return 结果
     */
    public int insertRole(SysRole role);
    /**
     * 修改保存角色信息
     *
     * @param role 角色信息
     * @return 结果
     */
    public int updateRole(SysRole role);
    /**
     * 修改角色状态
     *
     * @param role 角色信息
     * @return 结果
     */
    public int updateRoleStatus(SysRole role);
    /**
     * 修改数据权限信息
     *
     * @param role 角色信息
     * @return 结果
     */
    public int authDataScope(SysRole role);
    /**
     * 通过角色ID删除角色
     *
     * @param roleId 角色ID
     * @return 结果
     */
    public int deleteRoleById(Long roleId);
    /**
     * 批量删除角色信息
     *
     * @param roleIds 需要删除的角色ID
     * @return 结果
     */
    public int deleteRoleByIds(Long[] roleIds);
    /**
     * 取消授权用户角色
     *
     * @param userRole 用户和角色关联信息
     * @return 结果
     */
    public int deleteAuthUser(SysUserRole userRole);
    /**
     * 批量取消授权用户角色
     *
     * @param roleId  角色ID
     * @param userIds 需要取消授权的用户数据ID
     * @return 结果
     */
    public int deleteAuthUsers(Long roleId, Long[] userIds);
    /**
     * 批量选择授权用户角色
     *
     * @param roleId  角色ID
     * @param userIds 需要删除的用户数据ID
     * @return 结果
     */
    public int insertAuthUsers(Long roleId, Long[] userIds);
    List<SysRole> isExitUpdate(String roleName, Long roleId, Integer companyId);
    /**
     * 根据id获取数据
     *
     * @param ids 数据id集合
     * @return
     */
    List<SysRole> getSysRoleByIds(List<Long> ids);
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IWarnService.java
@@ -21,6 +21,11 @@
     */
    void taskSaveNewWarn();
    
    /**
     * 定时任务修改预警信息处理结果
     */
    void taskUpdateWarnStatus();
    
    /**
     * 获取车辆预警列表
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CarServiceImpl.java
@@ -1,6 +1,7 @@
package com.ruoyi.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.dataInterchange.api.feignClient.UPExgMsgRegisterClient;
@@ -121,22 +122,33 @@
    public void taskUpdateCarStatus() {
        List<Car> list = this.list();
        for (Car car : list) {
            LambdaUpdateWrapper<Car> updateWrapper = new LambdaUpdateWrapper<>();
            GnssDataVo gnssDataVo = (GnssDataVo) redisTemplate.opsForValue().get("location:" + car.getVehicleNumber());
            if (null == gnssDataVo) {
                car.setStatus(1);
                if (car.getStatus() == 1) {
                    updateWrapper.set(Car::getDownlineTime, LocalDateTime.now());
                }
                updateWrapper.set(Car::getStatus, 4);
                this.update(updateWrapper);
            } else {
                String dateTime = gnssDataVo.getDate() + " " + gnssDataVo.getTime();
                LocalDateTime localDateTime = LocalDateTime.parse(dateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
                long second = localDateTime.toEpochSecond(ZoneOffset.ofHours(8));
                if (System.currentTimeMillis() / 1000 > second + 60) {
                    car.setStatus(4);
                    if (car.getStatus() == 1) {
                        updateWrapper.set(Car::getDownlineTime, LocalDateTime.now());
                    }
                    updateWrapper.set(Car::getStatus, 4);
                    this.update(updateWrapper);
                } else {
                    car.setStatus(1);
                    if (car.getStatus() != 1) {
                        updateWrapper.set(Car::getDownlineTime, null);
                        updateWrapper.set(Car::getOnlineTime, LocalDateTime.now());
                    }
                    updateWrapper.set(Car::getStatus, 1);
                    this.update(updateWrapper);
                }
            }
        }
        if (list.size() > 0) {
            this.updateBatchById(list);
        }
    }
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
@@ -59,9 +59,6 @@
    public List<SysDept> selectDeptList(SysDept dept) {
        Long userid = tokenService.getLoginUser().getUserid();
        SysUser sysUser = sysUserService.getById(userid);
        if(sysUser.getRoleType() == 2){
            dept.setShopId(sysUser.getObjectId());
        }
        return deptMapper.selectDeptList(dept);
    }
@@ -238,9 +235,6 @@
        //判断店铺数据
        Long userid = tokenService.getLoginUser().getUserid();
        SysUser sysUser = sysUserService.getById(userid);
        if(sysUser.getRoleType() == 2){
            dept.setShopId(sysUser.getObjectId());
        }
        return deptMapper.insertDept(dept);
    }
@@ -264,9 +258,6 @@
        //判断店铺数据
        Long userid = tokenService.getLoginUser().getUserid();
        SysUser sysUser = sysUserService.getById(userid);
        if(sysUser.getRoleType() == 2){
            dept.setShopId(sysUser.getObjectId());
        }
        int result = deptMapper.updateDept(dept);
        if (UserConstants.DEPT_NORMAL.equals(dept.getStatus()) && StringUtils.isNotEmpty(dept.getAncestors())
                && !StringUtils.equals("0", dept.getAncestors()))
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
@@ -358,12 +358,7 @@
        SysUser sysUser = sysUserMapper.selectById(userid);
        SysUserRole sysUserRole = sysUserRoleMapper.selectSysUserRoleByUserId(userid);
        Long roleId = sysUserRole.getRoleId();
        List<SysMenus> list=null;
        if(roleId!=1){
            list = menuMapper.getAllOne(sysUser.getRoleType());
        }else {
             list = menuMapper.getAll();
        }
        List<SysMenus> list = menuMapper.getAll();
        // 获取所有
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java
@@ -1,11 +1,7 @@
package com.ruoyi.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.ruoyi.system.api.domain.SysRole;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.model.UserShop;
import com.ruoyi.system.domain.SysMenu;
import com.ruoyi.system.service.ISysMenuService;
import com.ruoyi.system.service.ISysPermissionService;
import com.ruoyi.system.service.ISysRoleService;
@@ -13,90 +9,65 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
 * 用户权限处理
 *
 *
 * @author ruoyi
 */
@Service
public class SysPermissionServiceImpl implements ISysPermissionService {
    @Autowired
    private ISysRoleService roleService;
    @Autowired
    private ISysMenuService menuService;
    @Autowired
    private UserShopService userShopService;
    /**
     * 获取角色数据权限
     *
     * @return 角色权限信息
     */
    @Override
    public Set<String> getRolePermission(SysUser user)
    {
        Set<String> roles = new HashSet<String>();
        // 管理员拥有所有权限
        if (user.isAdmin())
        {
            roles.add("admin");
        }
        else
        {
            roles.addAll(roleService.selectRolePermissionByUserId(user));
        }
        return roles;
    }
    /**
     * 获取菜单数据权限
     *
     * @return 菜单权限信息
     */
    @Override
    public Set<String> getMenuPermission(SysUser user)
    {
        Set<String> perms = new HashSet<String>();
        List<UserShop> userShop = userShopService.getUserShop(user.getUserId(), 1);
        // 管理员拥有所有权限
        if (user.isAdmin())
        {
            perms.add("*:*:*");
        }else if(user.getRoleType() == 2 && null != userShop && userShop.size() > 0){
            List<SysMenu> list = menuService.getAllMenu(2);
            return list.stream().map(SysMenu::getPath).collect(Collectors.toSet());
        }
        else
        {
            List<SysRole> roles = user.getRoles();
            if (!roles.isEmpty() && roles.size() > 1)
            {
                // 多角色设置permissions属性,以便数据权限匹配权限
                for (SysRole role : roles)
                {
                    Set<String> rolePerms = menuService.selectMenuPermsByRoleId(role.getRoleId());
                    role.setPermissions(rolePerms);
                    perms.addAll(rolePerms);
                }
            }
            else
            {
                if(user.getRoleType() == 1){
                    perms.addAll(menuService.selectMenuPermsByUserId(user.getUserId()));
                }else{
                    UserShop one = userShopService.getOne(new LambdaQueryWrapper<UserShop>().eq(UserShop::getUserId, user.getUserId()).eq(UserShop::getShopId, user.getObjectId()));
                    perms.addAll(menuService.selectMenuPermsByRoleId(one.getRoleId()));
                }
            }
        }
        return perms;
    }
    @Autowired
    private ISysRoleService roleService;
    @Autowired
    private ISysMenuService menuService;
    @Autowired
    private UserShopService userShopService;
    /**
     * 获取角色数据权限
     *
     * @return 角色权限信息
     */
    @Override
    public Set<String> getRolePermission(SysUser user) {
        Set<String> roles = new HashSet<String>();
        // 管理员拥有所有权限
        if (user.isAdmin()) {
            roles.add("admin");
        } else {
            roles.addAll(roleService.selectRolePermissionByUserId(user));
        }
        return roles;
    }
    /**
     * 获取菜单数据权限
     *
     * @return 菜单权限信息
     */
    @Override
    public Set<String> getMenuPermission(SysUser user) {
        Set<String> perms = new HashSet<String>();
        // 管理员拥有所有权限
        if (user.isAdmin()) {
            perms.add("*:*:*");
        } else {
            List<SysRole> roles = user.getRoles();
            if (!roles.isEmpty() && roles.size() > 1) {
                // 多角色设置permissions属性,以便数据权限匹配权限
                for (SysRole role : roles) {
                    Set<String> rolePerms = menuService.selectMenuPermsByRoleId(role.getRoleId());
                    role.setPermissions(rolePerms);
                    perms.addAll(rolePerms);
                }
            }
        }
        return perms;
    }
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
@@ -1,6 +1,5 @@
package com.ruoyi.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.constant.UserConstants;
import com.ruoyi.common.core.exception.ServiceException;
@@ -10,7 +9,6 @@
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.domain.SysRole;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.model.UserShop;
import com.ruoyi.system.domain.SysRoleDept;
import com.ruoyi.system.domain.SysRoleMenu;
import com.ruoyi.system.domain.SysUserRole;
@@ -48,8 +46,6 @@
    
    @Resource
    private UserShopService userShopService;
    
    
    /**
@@ -94,20 +90,10 @@
    @Override
    public Set<String> selectRolePermissionByUserId(SysUser user) {
        Set<String> permsSet = new HashSet<>();
        if(user.getRoleType() == 1){
            List<SysRole> perms = roleMapper.selectRolePermissionByUserId(user.getUserId());
            for (SysRole perm : perms) {
                if (StringUtils.isNotNull(perm)) {
                    permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(",")));
                }
            }
        }else{
            List<UserShop> list = userShopService.list(new LambdaQueryWrapper<UserShop>().eq(UserShop::getUserId, user.getUserId())
                    .eq(UserShop::getShopId, user.getObjectId()));
            for (UserShop userShop : list) {
                if (StringUtils.isNotNull(userShop)) {
                    permsSet.add(userShop.getRoleId() + "");
                }
        List<SysRole> perms = roleMapper.selectRolePermissionByUserId(user.getUserId());
        for (SysRole perm : perms) {
            if (StringUtils.isNotNull(perm)) {
                permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(",")));
            }
        }
        return permsSet;
@@ -427,7 +413,7 @@
     * @return
     */
    @Override
    public List<SysRole> getSysRoleByIds(List<Integer> ids) {
    public List<SysRole> getSysRoleByIds(List<Long> ids) {
        return this.baseMapper.getSysRoleByIds(ids);
    }
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -543,10 +543,6 @@
    @Override
    public PageInfo<SysUser> getChangeUserList(ChangeUserQuery query) {
        Long userid = tokenService.getLoginUser().getUserid();
        SysUser sysUser1 = this.getById(userid);
        if (sysUser1.getRoleType() == 2) {
            query.setObjectId(sysUser1.getObjectId());
        }
        PageInfo<SysUser> pageInfo = new PageInfo<>(query.getPageCurr(), query.getPageSize());
        List<SysUser> list = this.baseMapper.getChangeUserList(pageInfo, query);
        return pageInfo.setRecords(list);
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WarnServiceImpl.java
@@ -87,8 +87,8 @@
            warn.setWarnType(WarnType.getWarnTypeName(vo.getWarnType()));
            warn.setWarnNumber(1);
            warn.setSpeed(new BigDecimal(vo.getSpeed()));
            warn.setLongitude(Double.valueOf(vo.getLongitude()).toString());
            warn.setLatitude(Double.valueOf(vo.getLatitude()).toString());
            warn.setLongitude(new BigDecimal(vo.getLongitude()).divide(new BigDecimal(1000000)).toString());
            warn.setLatitude(new BigDecimal(vo.getLatitude()).divide(new BigDecimal(1000000)).toString());
            Map<String, String> geocode = null;
            try {
                geocode = GDMapGeocodingUtil.geocode(warn.getLongitude(), warn.getLatitude());
@@ -111,12 +111,44 @@
                    break;
            }
            warn.setCreateTime(LocalDateTime.now());
            warn.setObjectId(vo.getInfoId());
            warns.add(warn);
        }
        if (warns.size() > 0) {
            this.saveBatch(warns);
        }
    }
    /**
     * 定时任务修改预警信息处理结果
     */
    @Override
    public void taskUpdateWarnStatus() {
        List<Warn> warnList = this.list(new LambdaQueryWrapper<Warn>().eq(Warn::getTreatmentState, "处理中"));
        for (Warn warn : warnList) {
            UPWarnMsgAdptInfoVo vo = upWarnMsgAdptInfoClient.findByInfoId(warn.getObjectId()).getData();
            if (null != vo && null != warn && vo.getResult() != 0x00) {
                switch (vo.getResult()) {
                    case 0x00:
                        warn.setTreatmentState("处理中");
                        break;
                    case 0x01:
                        warn.setTreatmentState("已处理完毕");
                        break;
                    case 0x02:
                        warn.setTreatmentState("不作处理");
                        break;
                    case 0x03:
                        warn.setTreatmentState("将来处理");
                        break;
                }
                this.updateById(warn);
            }
        }
    }
    
    /**
     * 获取车辆预警
@@ -143,8 +175,10 @@
        for (Map<String, Object> map : list) {
            collect.add(map.get("warnType").toString());
        }
        List<Map<String, Object>> warnGroupCount = this.baseMapper.getWarnGroupCount(collect);
        list.addAll(warnGroupCount);
        if (!collect.isEmpty()) {
            List<Map<String, Object>> warnGroupCount = this.baseMapper.getWarnGroupCount(collect);
            list.addAll(warnGroupCount);
        }
        return list;
    }
    
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/util/TaskUtil.java
@@ -57,6 +57,15 @@
    
    
    /**
     * 定时任务修改预警信息处理结果
     */
    @Scheduled(fixedRate = 1000 * 600)
    public void taskUpdateWarnStatus() {
        warnService.taskUpdateWarnStatus();
    }
    /**
     * 定时任务获取新订单数据
     */
    @Scheduled(fixedRate = 1000 * 60)
@@ -68,7 +77,7 @@
    /**
     * 定时任务修改车辆状态
     */
    @Scheduled(fixedRate = 1000 * 60 * 5)
    @Scheduled(fixedRate = 1000 * 300)
    public void taskUpdateCarStatus() {
        carService.taskUpdateCarStatus();
    }
ruoyi-modules/ruoyi-system/src/main/resources/banner.txt
File was deleted
ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/SysUserMapper.xml
@@ -24,7 +24,6 @@
        <result property="updateTime" column="update_time"/>
        <result property="forbiddenRemark" column="forbidden_remark"/>
        <result property="remark" column="remark"/>
        <result property="roleType" column="role_type"/>
        <result property="objectId" column="objectId"/>
        <association property="dept" column="dept_id" javaType="com.ruoyi.system.api.domain.SysDept"
                     resultMap="deptResult"/>
@@ -63,7 +62,6 @@
               u.del_flag,
               u.login_ip,
               u.login_date,
               u.role_type,
               u.create_by,
               u.create_time,
               u.remark,
@@ -73,14 +71,13 @@
               d.dept_name,
               d.order_num,
               d.leader,
               d.status    as dept_status,
               d.status   as dept_status,
               r.role_id,
               r.role_name,
               r.role_key,
               r.data_scope,
               r.status    as role_status,
               u.role_type as roleType,
               u.objectId  AS objectId
               r.status   as role_status,
               u.objectId AS objectId
        from sys_user u
                 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
@@ -137,12 +134,10 @@
    <select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult">
        <include refid="selectUserVo"/>
        where u.user_name = #{userName} and u.del_flag = '0'
        and u.role_type = 1
    </select>
    <select id="selectUserShopByUserName" parameterType="String" resultMap="SysUserResult">
        <include refid="selectUserVo"/>
        where u.user_name = #{userName} and u.del_flag = '0'
        and u.role_type = 2
    </select>
    
    <select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
@@ -193,8 +188,7 @@
    </select>
    <select id="getAllList" resultType="com.ruoyi.system.api.domain.SysUser">
        select *,user_id userId,nick_name userName ,create_time createTime ,login_date loginDate from sys_user where
        role_type=3 and user_id in
        user_id in
        <foreach collection="ids" separator="," open="(" item="id" index="index" close=")">
            #{id}
        </foreach>
@@ -221,7 +215,6 @@
                and objectId = #{query.objectId}
            </if>
            AND del_flag = '0'
            AND role_type = 1
        </where>
        ORDER BY create_time DESC
    </select>
@@ -240,7 +233,6 @@
        <if test="password != null and password != ''">password,</if>
        <if test="status != null and status != ''">status,</if>
        <if test="createBy != null and createBy != ''">create_by,</if>
        <if test="roleType != null and roleType != ''">role_type,</if>
        <if test="remark != null and remark != ''">remark,</if>
        <if test="objectId != null and objectId != ''">objectId,</if>
        <if test="appUserId != null and appUserId != ''">app_user_id,</if>
@@ -282,7 +274,6 @@
            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
            <if test="remark != null">remark = #{remark},</if>
            <if test="forbiddenRemark != null">forbidden_remark = #{forbiddenRemark},</if>
            <if test="roleType != null">role_type = #{roleType},</if>
            <if test="objectId != null">objectId = #{objectId},</if>
            update_time = sysdate()
        </set>
@@ -305,13 +296,11 @@
        update sys_user
        set password = #{password}
        where user_name = #{userName}
          and role_type = 1
    </update>
    <update id="resetUserShopPwd" parameterType="com.ruoyi.system.api.domain.SysUser">
        update sys_user
        set password = #{password}
        where user_name = #{userName}
          and role_type = 2
    </update>
    
    <update id="deleteUserById" parameterType="Long">
ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/WarnMapper.xml
@@ -15,6 +15,8 @@
        a.keep_time as keepTime,
        a.keep_distance as keepDistance,
        a.warn_type as warnType,
        a.warn_level as warnLevel,
        a.warn_source as warnSource,
        a.warn_number as warnNumber,
        a.treatment_state as treatmentState,
        a.treatment_user as treatmentUser,
ruoyi-service/ruoyi-dataInterchange/pom.xml
@@ -6,7 +6,7 @@
        <artifactId>ruoyi-service</artifactId>
        <version>3.6.2</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <modelVersion>4.0.0</modelVersion>Long
    
    <artifactId>ruoyi-modules-dataInterchange</artifactId>
    
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/controller/UPExgMsgRegisterController.java
@@ -14,6 +14,7 @@
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -51,8 +52,10 @@
                UPExgMsgRealLocation realLocation = upExgMsgRealLocationDao.findByVehicleNoOrderByCreateTimeDesc(register.getVehicleNo());
                if (null != realLocation) {
                    GnssData gnssData = realLocation.getGnssData();
                    vo.setLongitude(Double.valueOf(gnssData.getLon() / 1000000).toString());
                    vo.setLatitude(Double.valueOf(gnssData.getLat() / 1000000).toString());
                    String longitude = new BigDecimal(gnssData.getLon()).divide(new BigDecimal(1000000)).toString();
                    String latitude = new BigDecimal(gnssData.getLat()).divide(new BigDecimal(1000000)).toString();
                    vo.setLongitude(longitude);
                    vo.setLatitude(latitude);
                }
                voList.add(vo);
            }
@@ -65,8 +68,10 @@
                UPExgMsgRealLocation realLocation = upExgMsgRealLocationDao.findByVehicleNoOrderByCreateTimeDesc(register.getVehicleNo());
                if (null != realLocation) {
                    GnssData gnssData = realLocation.getGnssData();
                    vo.setLongitude(Double.valueOf(gnssData.getLon() / 1000000).toString());
                    vo.setLatitude(Double.valueOf(gnssData.getLat() / 1000000).toString());
                    String longitude = new BigDecimal(gnssData.getLon()).divide(new BigDecimal(1000000)).toString();
                    String latitude = new BigDecimal(gnssData.getLat()).divide(new BigDecimal(1000000)).toString();
                    vo.setLongitude(longitude);
                    vo.setLatitude(latitude);
                }
                voList.add(vo);
            }
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/controller/UPWarnMsgAdptInfoController.java
@@ -71,4 +71,19 @@
            return R.ok(list);
        }
    }
    /**
     * 根据信息id查询报警原始数据
     *
     * @param infoId
     * @return
     */
    @PostMapping("/findByInfoId")
    public R<UPWarnMsgAdptInfoVo> findByInfoId(@RequestParam("infoId") Integer infoId) {
        UPWarnMsgAdptInfo warnMsgAdptInfo = upWarnMsgAdptInfoDao.findByInfoIdIs(infoId);
        UPWarnMsgAdptInfoVo vo = new UPWarnMsgAdptInfoVo();
        BeanUtils.copyProperties(warnMsgAdptInfo, vo);
        return R.ok(vo);
    }
}
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgAdptInfoDao.java
@@ -31,4 +31,13 @@
     */
    List<UPWarnMsgAdptInfo> findByCreateTimeAfter(Long createTime);
    
    /**
     * 根据信息id查询数据
     *
     * @param infoId
     * @return
     */
    UPWarnMsgAdptInfo findByInfoIdIs(Integer infoId);
}
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/DOWNBaseMsgVehicleAdded.java
@@ -1,10 +1,14 @@
package com.ruoyi.dataInterchange.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
import io.netty.buffer.Unpooled;
import lombok.Data;
/**
 * 补报车辆静态信息请求
 *
 * @author zhibing.pu
 * @Date 2025/3/3 17:24
 */
@@ -19,15 +23,37 @@
     * 车牌颜色
     */
    @JsonProperty("VEHICLE_COLOR")
    private String vehicleColor;
    private int vehicleColor;
    /**
     * 子业务类型标识
     */
    @JsonProperty("DATA_TYPE")
    private String dataType;
    private int dataType;
    /**
     * 后续数据长度
     */
    @JsonProperty("DATA_LENGTH")
    private String dataLength;
    private int dataLength;
    /**
     * 编码报文
     */
    public byte[] encode() {
        ByteBuf byteBuf = Unpooled.buffer(28);
        byte[] bytes1 = this.getVehicleNo().getBytes();
        for (int i = 0; i < 21; i++) {
            if (i < bytes1.length) {
                byteBuf.writeByte(bytes1[i]);
            } else {
                byteBuf.writeByte(0x00);
            }
        }
        byteBuf.writeByte(this.getVehicleColor());
        byteBuf.writeShort(this.getDataType());
        byteBuf.writeInt(this.getDataLength());
        byte[] bytes = ByteBufUtil.getBytes(byteBuf);
        byteBuf.release();
        return bytes;
    }
}
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/server/ExgMsgService.java
@@ -201,6 +201,11 @@
        GnssDataVo vo = new GnssDataVo();
        BeanUtils.copyProperties(upExgMsgRealLocation.getGnssData(), vo);
        redisTemplate.opsForValue().set("location:" + upExgMsgRealLocation.getVehicleNo(), vo);
        //查询车辆信息,没有则主动发起请求
        UPExgMsgRegister msgRegister = upExgMsgRegisterDao.findByVehicleNo(upExgMsgRealLocation.getVehicleNo());
        if (null == msgRegister) {
            down_base_msg_vehicle_added(inferiorPlatformId, upExgMsgRealLocation.getVehicleNo(), upExgMsgRealLocation.getVehicleColor());
        }
    }
    
    
@@ -303,4 +308,29 @@
        }
    }
    
    /**
     * 补报车辆静态信息
     */
    public void down_base_msg_vehicle_added(int inferiorPlatformId, String vehicleNo, int VehicleColor) {
        if (!redisTemplate.hasKey("login:" + inferiorPlatformId)) {
            log.error("链路还未登录校验,拒绝连接");
            return;
        }
        DOWNBaseMsgVehicleAdded downBaseMsgVehicleAdded = new DOWNBaseMsgVehicleAdded();
        downBaseMsgVehicleAdded.setVehicleNo(vehicleNo);
        downBaseMsgVehicleAdded.setVehicleColor(VehicleColor);
        downBaseMsgVehicleAdded.setDataType(DataType.DOWN_BASE_MSG_VEHICLE_ADDED.getCode());
        downBaseMsgVehicleAdded.setDataLength(0);
        byte[] body = downBaseMsgVehicleAdded.encode();
        OuterPacket out = new OuterPacket(DataType.DOWN_BASE_MSG.getCode(), body);
        //获取从链路通道
        Channel channel = ChannelMap.getClientChannel(inferiorPlatformId);
        if (null != channel && channel.isActive()) {
            channel.writeAndFlush(out);
            log.info("补报车辆静态信息请求({}):{}", DataType.DOWN_BASE_MSG_VEHICLE_ADDED.getCode(), JSON.toJSONString(downBaseMsgVehicleAdded));
        }
    }
}