1.前言
最近在网上跟了前辈带的一个项目,其中我负责系统管理模块,因为我之前没有接触过类似的模块,有一些基础的概念尝试总结一下。
1.一般的控制系统的项目中,管理员功能中都会有系统管理。
2.系统管理一般分为:系统参数、菜单管理、权限管理、字段扩展
3.菜单和权限一般都会有对应关系,不同的权限对应不同的菜单
4.字段扩展是对于数据库字段信息的管理,一般会有几张表来记录所有的字段及其关系
2.问题-解决
在开发扩展字段中的修改扩展字段功能时,我很快的完成了单个字段的修改,但这对于管理员来说效率太低了。所以,我打算开发批量修改。我拟定了两种方案1.从前端传回包括修改信息在内的所有字段的json数据,我在后端进行遍历比对。2.前端只会传回修改的信息,很修改行的id。
其实我没有太犹豫就选择了方案2,我认为这个会方便很多。所以我重新设计了我的DTO
package com.zeroone.star.project.dto.j1.systemmanagement;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.Map;
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("获取所需字段的id信息")
public class CstFieldExtplusDTO {
@ApiModelProperty(value ="字段id" ,example ="1" )
private Integer fieldExtId;
@ApiModelProperty
private Map<String,String> extField;
public CstFieldExtplusDTO(String fieldExtId){
this.fieldExtId=Integer.valueOf(fieldExtId);
}
}
我在原先只传回一个id的基础上,新增了一个Map来接受json信息(键值对)。但是这里又会遇到问题,这样操作,我顶多只能修改一行的数据,无法实现多行修改。于是我在controller层的update函数接受信息中,将参数修改为List<CstFieldExtplusDTO> cstFieldExtplusDTOList(这里插个题外话,接受json数据记得要加上@RequestBody注解)
前端传回的json数据格式如下,extField中的数据是扩展字段表的修改项
[
{
"extField": {},
"fieldExtId": 1
},
{
"extField": {},
"fieldExtId": 2
}
]
controller层的update函数如下:
@PutMapping("/update")
public JsonVO<List<CstFieldExtplusUpdateVO>> updateField(@RequestBody List<CstFieldExtplusDTO> cstFieldExtplusDTOList){
int i=0;
List<CstFieldExtplusUpdateVO> list=new ArrayList<>();
while(i<cstFieldExtplusDTOList.size()){
Map<String,String> extField=cstFieldExtplusDTOList.get(i).getExtField();
Set keyset=extField.keySet();
Iterator it=keyset.iterator();
UpdateWrapper<CstFieldExt> wr=new UpdateWrapper<>();
while(it.hasNext()){
String key= (String) it.next();
String value=(String)extField.get(key);
wr.set(key,value).eq("field_ext_id",cstFieldExtplusDTOList.get(i).getFieldExtId());
cstFieldExtplusService.update(wr);
}
QueryWrapper<CstFieldExt> wrp= new QueryWrapper<>();
wrp.eq("field_ext_id",cstFieldExtplusDTOList.get(i).getFieldExtId());
CstFieldExt cstFieldExt=cstFieldExtplusService.getOne(wrp);
list.add(BeanUtil.copyProperties(cstFieldExt,CstFieldExtplusUpdateVO.class));
i++;
}
return JsonVO.success(list);
}
}
3.运行结果
修改前:
发送请求:
相应内容:
修改成功:
4.总结:
我很少使用集合进行开发,如List、Map之类的,这是我的短板,活用集合来进行数据存储和处理,能大幅度提高效率。这次我的代码感觉有些笨重,应该是可以继续精简的,限于我的能力而无法实现,希望有大佬看见,可以提点意见出来。