Ruoyi框架默认是基于id进行数据库表删除和修改,实际场景中更多采用多key联合主键,这时需要对自动生成的模块进行细微调整,具体步骤如下。
1、mysql数据库表定义
CREATE TABLE `device_realtime` (
`workshopCode` varchar(50) DEFAULT NULL COMMENT '车间编码',
`deviceCode` varchar(50) NOT NULL COMMENT '设备编码',
`tagCode` varchar(50) NOT NULL COMMENT '点位编码',
`tagName` varchar(50) DEFAULT NULL COMMENT '点位名称',
`tagValue` varchar(50) NOT NULL COMMENT '点位值',
`updateTime` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`deviceCode`,`tagCode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
表有两个主键:`deviceCode`和`tagCode`
2、Ruoyi-Admin之html文件修改
$(function() {
var options = {
url: prefix + "/list",
createUrl: prefix + "/add",
updateUrl: prefix + "/edit/{id}",
removeUrl: prefix + "/remove/{id}",
exportUrl: prefix + "/export",
modalName: "实时数据查询",
columns: [{
checkbox: true
},
{
field: 'workshopCode',
title: '车间编码'
},
{
field: 'deviceCode',
title: '设备编码'
},
{
field: 'tagCode',
title: '点位编码'
},
{
field: 'tagName',
title: '点位名称'
},
{
field: 'tagValue',
title: '点位值'
},
{
field: 'updateTime',
title: '更新时间'
},
{
title: '操作',
align: 'center',
formatter: function(value, row, index) {
var param = row.deviceCode+"&tagCode="+row.tagCode;
var actions = [];
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + param + '\')"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + param + '\')"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
}]
};
$.table.init(options);
});
主要修改是操作部分,增加了param对参数进行拼接。
3、Ruoyi-Admin之Controller模块修改
/**
* 修改实时数据查询
*/
@RequiresPermissions("system:realtime:edit")
@GetMapping("/edit/{deviceCode}&tagCode={tagCode}")
public String edit(@PathVariable("deviceCode") String deviceCode, @PathVariable("tagCode") String tagCode, ModelMap mmap)
{
DeviceRealtime dr = new DeviceRealtime();
dr.setDeviceCode(deviceCode);
dr.setTagCode(tagCode);
DeviceRealtime deviceRealtime = deviceRealtimeService.selectDeviceRealtimeByDeviceCode(dr);
mmap.put("deviceRealtime", deviceRealtime);
return prefix + "/edit";
}
/**
* 删除实时数据查询
*/
@RequiresPermissions("system:realtime:remove")
@Log(title = "实时数据查询", businessType = BusinessType.DELETE)
@PostMapping( "/remove/{deviceCode}&tagCode={tagCode}")
@ResponseBody
public AjaxResult remove(@PathVariable("deviceCode") String deviceCode, @PathVariable("tagCode") String tagCode)
{
DeviceRealtime deviceRealtime = new DeviceRealtime();
deviceRealtime.setDeviceCode(deviceCode);
deviceRealtime.setTagCode(tagCode);
return toAjax(deviceRealtimeService.deleteDeviceRealtimeByDeviceCode(deviceRealtime));
}
主要修改编辑和删除模块,PostMapping和函数参数部分需要一致,并于html中一致,用两个主键锁定唯一记录。查询和新增记录使用参数是对象,不需要特别处理。
如果涉及更多参数,也可以考虑直接将传入参数改为DeviceRealtime 对象。
4、ruoyi-system模块修改
4.1 服务接口IDeviceRealtimeService.java
/**
* 修改实时数据查询
*
* @param deviceRealtime 实时数据查询
* @return 结果
*/
public int updateDeviceRealtime(DeviceRealtime deviceRealtime);
/**
* 删除实时数据查询信息
*
* @param deviceRealtime 实时数据查询
* @return 结果
*/
public int deleteDeviceRealtimeByDeviceCode(DeviceRealtime deviceRealtime);
4.2服务实现DeviceRealtimeServiceImpl.java
/**
* 修改实时数据查询
*
* @param deviceRealtime 实时数据查询
* @return 结果
*/
@Override
public int updateDeviceRealtime(DeviceRealtime deviceRealtime)
{
deviceRealtime.setUpdateTime(DateUtils.getNowDate());
return deviceRealtimeMapper.updateDeviceRealtime(deviceRealtime);
}
/**
* 删除实时数据查询信息
*
* @param deviceRealtime 实时数据查询
* @return 结果
*/
@Override
public int deleteDeviceRealtimeByDeviceCode(DeviceRealtime deviceRealtime)
{
return deviceRealtimeMapper.deleteDeviceRealtimeByDeviceCode(deviceRealtime);
}
4.3 Mapper文件DeviceRealtimeMapper.java修改
/**
* 修改实时数据查询
*
* @param deviceRealtime 实时数据查询
* @return 结果
*/
public int updateDeviceRealtime(DeviceRealtime deviceRealtime);
/**
* 删除实时数据查询
*
* @param deviceCode 实时数据查询主键
* @return 结果
*/
public int deleteDeviceRealtimeByDeviceCode(DeviceRealtime deviceRealtime);
4.4 xml文件DeviceRealtimeMapper.xml修改
<update id="updateDeviceRealtime" parameterType="DeviceRealtime">
update edge.device_realtime
<trim prefix="SET" suffixOverrides=",">
<if test="workshopCode != null">workshopCode = #{workshopCode},</if>
<if test="tagCode != null">tagCode = #{tagCode},</if>
<if test="tagName != null">tagName = #{tagName},</if>
<if test="tagValue != null and tagValue != ''">tagValue = #{tagValue},</if>
<if test="updateTime != null">updateTime = #{updateTime},</if>
</trim>
where deviceCode = #{deviceCode} and tagCode = #{tagCode}
</update>
<delete id="deleteDeviceRealtimeByDeviceCode" parameterType="DeviceRealtime">
delete from edge.device_realtime where deviceCode = #{deviceCode} and tagCode = #{tagCode}
</delete>