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

表结构如下:

-- ----------------------------
-- 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);

}

有疑问留意交流

posted on 2020-02-28 20:58  你不知道的浪漫  阅读(320)  评论(0编辑  收藏  举报