一个系统中,一些设置,可以局部自定义。默认情况下,数据库没有设置的。
表结构如下:
-- ----------------------------
-- 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);
}
有疑问留意交流