增加平均分配代码

master
bynt 3 years ago
parent 3203a0711d
commit f367d6866f

@ -31,6 +31,8 @@ public class AssignDataService {
int size = distribution.getDeptIds().size(); int size = distribution.getDeptIds().size();
List<Long> deptIds = distribution.getDeptIds(); List<Long> deptIds = distribution.getDeptIds();
List<Double> weights = distribution.getWeights(); List<Double> weights = distribution.getWeights();
// 返回数据结果
List<DistributeResponseDTO> list = new ArrayList<>();
List<Long> resourceList = distribution.getResourceList(); List<Long> resourceList = distribution.getResourceList();
// 数据打乱 // 数据打乱
Collections.shuffle(resourceList); Collections.shuffle(resourceList);
@ -38,6 +40,30 @@ public class AssignDataService {
List<Long> arrayList = List<Long> arrayList =
Lists.newArrayList(Sets.newHashSet(resourceList)); Lists.newArrayList(Sets.newHashSet(resourceList));
int resourceSize = arrayList.size(); int resourceSize = arrayList.size();
Boolean isWeight = distribution.getIsWeight();
if (isWeight == null || !isWeight) {
int remainder = resourceList.size() % deptIds.size();
int number = resourceList.size() / deptIds.size();
int offset = DefaultNumberConstants.ZERO_NUMBER;
List<Long> value;
DistributeResponseDTO distributeResponseDTO;
for (int i = DefaultNumberConstants.ZERO_NUMBER; i < deptIds.size(); i++) {
distributeResponseDTO = new DistributeResponseDTO();
if (remainder > DefaultNumberConstants.ZERO_NUMBER) {
value = resourceList.subList(i * number + offset,
(i + DefaultNumberConstants.ONE_NUMBER) * number + offset + DefaultNumberConstants.ONE_NUMBER);
remainder--;
offset++;
} else {
value = resourceList.subList
(i * number + offset, (i + DefaultNumberConstants.ONE_NUMBER) * number + offset);
}
distributeResponseDTO.setResponseList(value);
distributeResponseDTO.setDeptId(deptIds.get(i));
list.add(distributeResponseDTO);
}
return CommonResponse.createBySuccess(list);
}
// 集合求和 // 集合求和
double sum = weights.stream().mapToDouble(Double::doubleValue).sum(); double sum = weights.stream().mapToDouble(Double::doubleValue).sum();
if (sum != DefaultNumberConstants.ONE_HUNDRED) { if (sum != DefaultNumberConstants.ONE_HUNDRED) {
@ -48,7 +74,6 @@ public class AssignDataService {
deptIds.stream().collect(Collectors.toMap(key -> key, key -> weights.get(deptIds.indexOf(key)))); deptIds.stream().collect(Collectors.toMap(key -> key, key -> weights.get(deptIds.indexOf(key))));
Map<Long, Double> longDoubleMap = MapUtil.sortByValue(deptMap, Boolean.FALSE); Map<Long, Double> longDoubleMap = MapUtil.sortByValue(deptMap, Boolean.FALSE);
List<Long> value; List<Long> value;
List<DistributeResponseDTO> list = new ArrayList<>();
DistributeResponseDTO distributeResponseDTO; DistributeResponseDTO distributeResponseDTO;
int num = DefaultNumberConstants.ZERO_NUMBER; int num = DefaultNumberConstants.ZERO_NUMBER;
for (Map.Entry<Long, Double> longDoubleEntry : longDoubleMap.entrySet()) { for (Map.Entry<Long, Double> longDoubleEntry : longDoubleMap.entrySet()) {

@ -32,10 +32,15 @@ public class SettingTest {
@Test @Test
public void getSetting() { public void getSetting() {
DistributeDTO distributeDTO = new DistributeDTO(); DistributeDTO distributeDTO = new DistributeDTO();
List<Long> strings = Lists.newArrayList(1L,2L,3L,4L,5L,6L,7L,8L,9L,10L);
List<String> strings = Lists.newArrayList("a", "b", "c", "d","e","f","g","h","i","j");
List<Long> longs = Lists.newArrayList(12360L, 12361L,12362L,12363L,12365L);
String s = JSONUtil.toJsonStr(strings); List<Double> doubleList = Lists.newArrayList(16.66, 16.66,16.66,16.66,16.66,16.7);
distributeDTO.setResourceList(strings);
distributeDTO.setIsWeight(Boolean.TRUE);
distributeDTO.setWeights(doubleList);
distributeDTO.setDeptIds(longs);
log.info(JSONUtil.toJsonStr(assignDataService.assignData(distributeDTO)));
} }

Loading…
Cancel
Save