记录下日常业务需求

业务需求

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;

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值