• 一种自定义系统设置的方法,java代码


    一个系统中,一些设置,可以局部自定义。默认情况下,数据库没有设置的。

    表结构如下:

    -- ----------------------------
    -- Table structure for status
    -- ----------------------------
    DROP TABLE IF EXISTS `status`;
    CREATE TABLE `status` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `label` varchar(255) DEFAULT NULL,
      `value` varchar(255) DEFAULT NULL,
      `update_time` datetime DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `label` (`label`) USING BTREE,
      KEY `value` (`value`) USING BTREE
    ) ENGINE=MyISAM AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of status
    -- ----------------------------
    INSERT INTO `status` VALUES ('1', 'risk.level', '{"rule":{"province":[40,60,100,450,1000],"city":[5,10,40,60,94],"area":[5,10,15,20,25]},"colorThreshold":[0,9,99,499,999,4999],"colors":["#69ae5d","#fdea61","#f19d39","#e25141","#901d14"]}', '2020-02-26 10:49:54');
    INSERT INTO `status` VALUES ('2', 'risk.weight.confirm', '80', '2020-02-28 19:03:16');
    INSERT INTO `status` VALUES ('3', 'risk.weight.dead', '15', '2020-02-28 19:03:16');
    INSERT INTO `status` VALUES ('4', 'risk.weight.heal', '5', '2020-02-28 19:03:16');
    INSERT INTO `status` VALUES ('5', 'risk.updateTime', '{'lastUpdateTime':'2020-02-23 13:43:18'}', '2020-02-23 14:18:38');
    INSERT INTO `status` VALUES ('6', 'risk.people.threshold', '[0,9,99,499,999,4999]', null);
    INSERT INTO `status` VALUES ('7', 'risk.color.level0', '#69ae5d', '2020-02-27 10:22:01');
    INSERT INTO `status` VALUES ('8', 'risk.color.level1', '#fdeb61', '2020-02-27 10:22:01');
    INSERT INTO `status` VALUES ('9', 'risk.color.level2', '#f19e39', '2020-02-27 10:22:01');
    INSERT INTO `status` VALUES ('10', 'risk.color.level3', '#e25141', '2020-02-27 10:22:01');
    INSERT INTO `status` VALUES ('11', 'risk.color.level4', '#901c14', '2020-02-27 10:22:01');
    INSERT INTO `status` VALUES ('12', 'risk.people.province', '[40, 60, 100, 450, 1000]', '2020-02-27 17:48:13');
    INSERT INTO `status` VALUES ('13', 'risk.people.city', '[5, 10, 40, 60, 94]', '2020-02-27 17:48:13');
    INSERT INTO `status` VALUES ('14', 'risk.people.area', '[5, 10, 15, 20, 25]', '2020-02-27 17:48:13');
    INSERT INTO `status` VALUES ('15', 'risk.color', '{"level0":"#b6d7a8","level1":"#fdeb61","level2":"#f19e39","level3":"#e25141","level4":"#901c14"}', '2020-02-28 19:03:39');
    INSERT INTO `status` VALUES ('16', 'lastUpdateTime', '2020-02-23 13:43:18', null);

    其中一个json如下

    {
        "rule": {
            "province": [
                40,
                60,
                100,
                450,
                1000
            ],
            "city": [
                5,
                10,
                40,
                60,
                94
            ],
            "area": [
                5,
                10,
                15,
                20,
                25
            ]
        },
        "colorThreshold": [
            0,
            9,
            99,
            499,
            999,
            4999
        ],
        "colors": [
            "#69ae5d",
            "#fdea61",
            "#f19d39",
            "#e25141",
            "#901d14"
        ]
    }

    以上json为例,在类中设计如下:

    List<String> defaultColors = Arrays.asList("#69ae5d","#fdea61","#f19d39","#e25141","#901d14");
    
    List<Integer> areaDefaultThreshold = Arrays.asList(5,10,15,20,25);
    List<Integer> cityDefaultThreshold = Arrays.asList(5,10,40,60,94);
    List<Integer> provinceDefaultThreshold = Arrays.asList(40,60,100,450,1000);
    List<Integer> colorThreshold = Arrays.asList(0,9,99,499,999,4999);
    
    @PostConstruct
    public void init()
    {
    
        defaultConfig = RiskLevel.builder()
                .colors(defaultColors)
                .colorThreshold(colorThreshold)
                .rule(Rule.builder()
                        .area(areaDefaultThreshold)
                        .city(cityDefaultThreshold)
                        .province(provinceDefaultThreshold)
                        .build())
                .build();
    }

    前端传来的json进行局部更新时,操作代码如下

    @PostMapping("saveColors")
    public ResponseEntity<Map> saveColors(@RequestBody RiskLevel riskLevel)
    {
         List<String> colors = riskLevel.getColors();
    
            if(!CollectionUtils.isEmpty(colors)) {
                int cntColors = colors.size();
                for (int i = 0; i < cntColors; i++) {
                    String color = colors.get(i);
                    if (!StringUtils.isEmpty(color)) {
                        defaultConfig.getColors().set(i, color);
                    }
                }
            }
    
            Rule rule = riskLevel.getRule();
            if(Objects.nonNull(rule)) {
    
                List<Integer> provinces = rule.getProvince();
                if(!CollectionUtils.isEmpty(provinces))
                {
                    int cntProvinces = provinces.size();
                    for (int i = 0; i < cntProvinces; i++) {
                        Integer province = provinces.get(i);
                        if(Objects.nonNull(province))
                        {
                            rule.getProvince().set(i,province);
                        }
                    }
                }
    
    
                List<Integer> cities = rule.getCity();
                if(!CollectionUtils.isEmpty(cities))
                {
                    int cntCities = cities.size();
                    for (int i = 0; i < cntCities; i++) {
                        Integer city = cities.get(i);
                        if(Objects.nonNull(city))
                        {
                            rule.getCity().set(i, city);
                        }
                    }
                }
    
    
                List<Integer> areas = rule.getArea();
                if(!CollectionUtils.isEmpty(areas))
                {
                    int cntAreas = areas.size();
                    for (int i = 0; i < cntAreas; i++) {
                        Integer city = areas.get(i);
                        if(Objects.nonNull(city))
                        {
                            rule.getArea().set(i, city);
                        }
                    }
                }
    
                defaultConfig.setRule(rule);
            }
    
    
            riskService.updateLevel(defaultConfig);
            byteDanceDataService.updateWeight();
            return ResponseEntity.status(HttpStatus.OK).body(Collections.singletonMap("message","保存成功"));
        }

    前端局部更新的javascript

    在需要更新的颜色相对索引填入颜色数据,其他地方填入空字符串“”

    $("#save").on('click',function () {
    
            var total = 0;
            var json = {};
            var rule= {};
            json.colors=[];
            $('.risklevel').each(function (index,elem){
                var hex = rgbToHex($("#color-picker"+(index+1)).css("background-color"));
                json.colors.splice(index,0,hex);
                total++;
            });
            // var length = rule.colors.length;
            //
            // for (var i = 0; i < length; i++)
            // {
            //     console.log(rule.colors[i]);
            // }
    
            var dists= [];
            var thresholds =[];
    
            $('.threshold').each(function (index,elem){
                var dist = $(this).val();
                dists.push(dist);
            });
    
            $('.value').each(function (index,elem){
                var threshold = $(this).val();
                thresholds.push(threshold);
            });
    
            ////{"rule":{"province":[40,60,100,451,1000],"city":[5,10,40,60,94],"area":[5,10,15,20,25]},"colors":["#69ae5d","#fdea61","#f19d39","#e25141","#901d14"]}
    
    
    
            var province=[];
            var city=[];
            var area=[];
    
    
            for (var i= 0; i  < total * 3; i+=3)
            {
                province.push(thresholds[i]);
                city.push(thresholds[i+1]);
                area.push(thresholds[i+2]);
            }
    
            rule.province = province;
            rule.city = city;
            rule.area = area;
            json.rule= rule;
            console.log(JSON.stringify(json));
            $.ajax({
                url: "/admin/saveColors",
                data: JSON.stringify(json),
                type: "post",
                contentType: "application/json",
                dataType: "json",
                success: function(data) {
                    alert(data.message);
                }
            });
        });

    相关java类

    import com.fasterxml.jackson.annotation.JsonIgnore;
    import lombok.Data;
    import lombok.*;
    
    import java.util.ArrayList;
    import java.util.List;
    
    @Data
    @Builder
    @EqualsAndHashCode(callSuper = false)
    @NoArgsConstructor
    @AllArgsConstructor
    public class RiskLevel {
    
        @JsonIgnore
        private Integer id;
        private Rule rule;
        private List<Integer> colorThreshold = new ArrayList<>(0);
        private List<String> colors = new ArrayList<>(0);
    }
    import lombok.Data;
    import lombok.*;
    
    import java.util.ArrayList;
    import java.util.List;
    @Data
    @Builder
    @EqualsAndHashCode(callSuper = false)
    @NoArgsConstructor
    @AllArgsConstructor
    public class Rule {
    
        private List<Integer> province = new ArrayList<>(0);
    
        private List<Integer> city = new ArrayList<>(0);
    
        private List<Integer> area = new ArrayList<>(0);
    
    }

    有疑问留意交流

  • 相关阅读:
    微信小程序wx.chooseImage和wx.previewImage的综合使用(图片上传不限制最多张数)
    js数组与字符串之间的相互转换
    微信小程序wx.previewImage实用案例(交流QQ群:604788754)
    PHP:第一章——PHP中的魔术常量
    小程序模板嵌套以及相关遍历数据绑定
    6 大主流 Web 框架优缺点对比:15篇前端热文回看
    通俗地讲,Netty 能做什么?
    Netty
    为什么选择Netty
    linux下gsoap的初次使用 -- c风格加法实例
  • 原文地址:https://www.cnblogs.com/passedbylove/p/12380172.html
Copyright © 2020-2023  润新知