增加平均分配代码

master
bynt 3 years ago
parent 3203a0711d
commit f367d6866f

@ -31,6 +31,8 @@ public class AssignDataService {
int size = distribution.getDeptIds().size();
List<Long> deptIds = distribution.getDeptIds();
List<Double> weights = distribution.getWeights();
// 返回数据结果
List<DistributeResponseDTO> list = new ArrayList<>();
List<Long> resourceList = distribution.getResourceList();
// 数据打乱
Collections.shuffle(resourceList);
@ -38,6 +40,30 @@ public class AssignDataService {
List<Long> arrayList =
Lists.newArrayList(Sets.newHashSet(resourceList));
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();
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))));
Map<Long, Double> longDoubleMap = MapUtil.sortByValue(deptMap, Boolean.FALSE);
List<Long> value;
List<DistributeResponseDTO> list = new ArrayList<>();
DistributeResponseDTO distributeResponseDTO;
int num = DefaultNumberConstants.ZERO_NUMBER;
for (Map.Entry<Long, Double> longDoubleEntry : longDoubleMap.entrySet()) {

@ -32,10 +32,15 @@ public class SettingTest {
@Test
public void getSetting() {
DistributeDTO distributeDTO = new DistributeDTO();
List<String> strings = Lists.newArrayList("a", "b", "c", "d","e","f","g","h","i","j");
String s = JSONUtil.toJsonStr(strings);
List<Long> strings = Lists.newArrayList(1L,2L,3L,4L,5L,6L,7L,8L,9L,10L);
List<Long> longs = Lists.newArrayList(12360L, 12361L,12362L,12363L,12365L);
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