业务需求
1.修改关键词
对于一段这样的格式的JSON数据,要求是通过CompanyID、SystemID和Id来修改NewWord和Status
{
"CompanyID": "5b67eaa28c1a4f727e4fa223",
"SystemID": "5b67eaa28c1a4f727e4fa222",
"Words": [
{
"Id": 194,
"Status": 1,
"NewWord": ""
},
{
"Id": 195,
"Status": 1,
"NewWord": ""
},
{
"Id": 197,
"Status": 1,
"NewWord": ""
},
{
"Id": 198,
"Status": 1,
"NewWord": ""
}
]
}
编写mapper层的sql语句还是常见的,例如
update st_words set NewWord=#{NewWord},Status=#{Status} where Id=#{Id} AND SystemID =#{SystemID} AND CompanyID =#{CompanyID}
但是问题在于在controller层上,如何去获取Words下的每一个Id、Status和NewWords。
常规的是通过JSONObject来获取对应的json数据
String systemID = obj.getString("SystemID");
String companyID = obj.getString("CompanyID");
然而获取Words的时候,采取的是使用JSONArray中的getJSONArray来获取先,获取到Words后,把它转为字符串,再通过JSONObject.parseArray放到对应的VO类中
JSONArray words = obj.getJSONArray("Words");
String s = JSONObject.toJSONString(words,SerializerFeature.WriteDateUseDateFormat);
List<hotWordsVO> hotWordsVOS = JSONObject.parseArray(s, hotWordsVO.class);
然后这就可以通过常规的foreach遍历集合就可以获取到了
同时前端提出一个问题,他说如果我把一个错误的id传进去,你要进行判断并停止修改
所以我的解决方法是通过SystemID和CompanyID来查找一遍当前的所有id,再把id放进hashset集合里面,通过hashset来判别输入的id是否有在这个set里面
完整的controller代码
@ApiOperation(value = "修改关键词",notes = "在原来的关键词的基础上添加花名;请求方式:POST,支持格式:application/json")
@PostMapping("UpdateNewWord")
public Result UpdateNewWord(@RequestBody JSONObject obj){
String systemID = obj.getString("SystemID");
String companyID = obj.getString("CompanyID");
JSONArray words = obj.getJSONArray("Words");
List<Integer> bySc = classifwordlistMapper.findBySc(systemID, companyID);
HashSet<Integer> set = new HashSet<>(bySc);
String s = JSONObject.toJSONString(words, SerializerFeature.WriteDateUseDateFormat);
List<hotWordsVO> hotWordsVOS = JSONObject.parseArray(s, hotWordsVO.class);
for (hotWordsVO hot : hotWordsVOS) {
Integer id = hot.getId();
if (!set.contains(id)){
return new Result("404","插入"+id+"不存在",null);
}
String newWord = hot.getNewWord();
Integer status = hot.getStatus();
boolean b = classifwordlistMapper.UpdateNewWord(newWord, status, id, systemID, companyID);
if (!b){
new Result("404","修改失败",null);
}
}
return new Result("200","修改成功",null);
}
2.修改多选状态
这一部分主要是前端说要传回3个id是用字符串隔开的,例如"558563,558740,558773"代表的是选中了这三个专题,同样的是在controller上进行逻辑的处理。分割字符串可以直接用到String里面的split方法分割开来即可。
前端说还有一个需求就是,比如现在库里面 1,2,3,4 是为1的,那我传个 1,2,5 给你,你除了要把5更新为1以外,还要把4更新为0
这个问题我还是使用hashset来解决的,首先先查找当前已经是多选状态的id集合,把它给放进去hashset上,然后先遍历一次如果在集合的话就更新同时把它从set上移出去,然后再遍历剩下的set来修改为0
完整代码
@ApiOperation(value = "修改多选状态",notes = ";请求方式:POST,支持格式:application/json")
@PostMapping("UpdateType")
@Transactional(rollbackFor = Exception.class)
public Result UpdateType(@RequestBody JSONObject obj){
String id = obj.getString("id");
String SystemID = obj.getString("SystemID");
String CompanyID = obj.getString("CompanyID");
String[] result = id.split(",");
List<Integer> wordTypeID = classifwordlistMapper.findWordTypeID(SystemID, CompanyID);
HashSet<Integer> set = new HashSet<>(wordTypeID);
for (String r : result) {
String s = String.valueOf(r);
int i = Integer.parseInt(s);
boolean b = classifwordlistMapper.updateType(i);
if (!b){
new Result("404","修改失败",null);
}
set.remove(i);
}
for (Integer setint : set) {
boolean b = classifwordlistMapper.updateTypeZero(setint);
if (!b){
new Result("404","修改失败",null);
}
}
return new Result("200","修改成功",null);
}
3.查找目录及目录下的专题
这个需求主要通过SystemID和CompanyID查找到所有的目录和目录下的专题,这里的话主要是用到两个实体类来存,首先是先获取到目录,再遍历目录的每个id来获取到专题,专题也是一个集合,把它放进对应的实体类就行了
完整代码
@ApiOperation(value = "查找目录名称和目录下的专题",notes = "请求方式:POST,支持格式:application/json")
@PostMapping("/FindTopicList")
public Result WordsCategory(@RequestBody JSONObject obj){
String systemID = obj.getString("SystemID");
String companyID = obj.getString("CompanyID");
ArrayList<WordResult> list = new ArrayList<>();
Result result = new Result();
List<WordResult> findlist = classifwordlistMapper.findlist(systemID,companyID);
for (WordResult wordResult : findlist) {
Integer id = wordResult.getId();
List<Words> findzhuanti = classifwordlistMapper.findzhuanti(id);
wordResult.setChildren(findzhuanti);
list.add(wordResult);
}
if (findlist.isEmpty()){
return new Result("404","没有该关键字的数据",null);
}else {
result.setMessage("搜索成功");
result.setCode("200");
result.setData(list);
}
return result;
}