|
|
|
@ -1,8 +1,10 @@
|
|
|
|
|
package com.baiye;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
|
|
import com.baiye.model.dto.DistributeDTO;
|
|
|
|
|
import com.baiye.service.AssignDataService;
|
|
|
|
|
import com.google.common.collect.Lists;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.junit.Test;
|
|
|
|
|
import org.junit.runner.RunWith;
|
|
|
|
|
import org.springframework.boot.test.context.SpringBootTest;
|
|
|
|
@ -10,12 +12,14 @@ import org.springframework.test.context.junit4.SpringRunner;
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.Collections;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @author Enzo
|
|
|
|
|
* @date : 2021/11/19
|
|
|
|
|
*/
|
|
|
|
|
@Slf4j
|
|
|
|
|
@RunWith(SpringRunner.class)
|
|
|
|
|
@SpringBootTest(classes = AdPlatformServiceApplication.class,
|
|
|
|
|
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
|
|
|
@ -24,18 +28,19 @@ public class SettingTest {
|
|
|
|
|
@Resource
|
|
|
|
|
private AssignDataService assignDataService;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void getSetting(){
|
|
|
|
|
public void getSetting() {
|
|
|
|
|
DistributeDTO distributeDTO = new DistributeDTO();
|
|
|
|
|
|
|
|
|
|
List<String> strings = Lists.newArrayList("a", "b", "c", "d");
|
|
|
|
|
List<String> strings = Lists.newArrayList("a", "b", "c", "d","e","f","g","h","i","j");
|
|
|
|
|
|
|
|
|
|
List<Long> longs = Lists.newArrayList(12360L,12361L);
|
|
|
|
|
List<Double> doubleList = Lists.newArrayList(50.0,50.0);
|
|
|
|
|
distributeDTO.setWeights(doubleList);
|
|
|
|
|
List<Long> longs = Lists.newArrayList(12360L, 12361L,12362L,12363L,12364L,12365L);
|
|
|
|
|
List<Double> doubleList = Lists.newArrayList(16.66, 16.66,16.66,16.66,16.66,16.7);
|
|
|
|
|
distributeDTO.setResourceList(strings);
|
|
|
|
|
distributeDTO.setWeights(doubleList);
|
|
|
|
|
distributeDTO.setDeptIds(longs);
|
|
|
|
|
assignDataService.assignData(distributeDTO);
|
|
|
|
|
log.info(JSONUtil.toJsonStr(assignDataService.assignData(distributeDTO)));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
@ -81,21 +86,87 @@ public class SettingTest {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static <T> List<List<T>> averageAssign(List<T> source, int n) {
|
|
|
|
|
List<List<T>> result = new ArrayList<>();
|
|
|
|
|
int remainder = source.size() % n; //(先计算出余数)
|
|
|
|
|
int number = source.size() / n; //然后是商
|
|
|
|
|
int offset = 0;//偏移量
|
|
|
|
|
for (int i = 0; i < n; i++) {
|
|
|
|
|
List<T> value;
|
|
|
|
|
if (remainder > 0) {
|
|
|
|
|
value = source.subList(i * number + offset, (i + 1) * number + offset + 1);
|
|
|
|
|
remainder--;
|
|
|
|
|
offset++;
|
|
|
|
|
} else {
|
|
|
|
|
value = source.subList(i * number + offset, (i + 1) * number + offset);
|
|
|
|
|
List<List<T>> result = new ArrayList<>();
|
|
|
|
|
int remainder = source.size() % n; //(先计算出余数)
|
|
|
|
|
int number = source.size() / n; //然后是商
|
|
|
|
|
int offset = 0;//偏移量
|
|
|
|
|
for (int i = 0; i < n; i++) {
|
|
|
|
|
List<T> value;
|
|
|
|
|
if (remainder > 0) {
|
|
|
|
|
value = source.subList(i * number + offset, (i + 1) * number + offset + 1);
|
|
|
|
|
remainder--;
|
|
|
|
|
offset++;
|
|
|
|
|
} else {
|
|
|
|
|
value = source.subList(i * number + offset, (i + 1) * number + offset);
|
|
|
|
|
}
|
|
|
|
|
result.add(value);
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//*********************************************催收公司分案相关**************************//
|
|
|
|
|
public static <T> List<List<T>> updateAutoCaseSplit(List<T> users, List<Double> ratioList, List<String> sourceList) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Integer casecount = sourceList.size();//案件个数
|
|
|
|
|
//将用户排序打乱
|
|
|
|
|
Collections.shuffle(users);
|
|
|
|
|
|
|
|
|
|
List<String> caselist = new ArrayList<String>();//剩余案件
|
|
|
|
|
caselist = sourceList;
|
|
|
|
|
//循环遍历员工
|
|
|
|
|
for (int i = 0; i < users.size(); i++) {
|
|
|
|
|
|
|
|
|
|
//计算用户分得几个案子 案件数*百分比
|
|
|
|
|
if (i != users.size() - 1) {
|
|
|
|
|
double userCaseCount = casecount * ratioList.get(i) / 100;
|
|
|
|
|
Integer count = (int) Math.floor(userCaseCount);
|
|
|
|
|
//根据分的案件个数从头尾取值 如果有奇数就奇数在中间取一个变为偶数在头尾取值
|
|
|
|
|
if (count % 2 == 0) {//偶数
|
|
|
|
|
Integer total = count / 2; //头尾各取total个
|
|
|
|
|
for (int j = 0; j < total; j++) {
|
|
|
|
|
int end = caselist.size() - 1;
|
|
|
|
|
System.out.println(caselist.get(0));
|
|
|
|
|
System.out.println(caselist.get(end));
|
|
|
|
|
// users.get(i).addCaseHead(caselist.get(0));//头
|
|
|
|
|
// users.get(i).addCaseHead(caselist.get(end));//尾
|
|
|
|
|
caselist.remove(end);
|
|
|
|
|
caselist.remove(0);
|
|
|
|
|
}
|
|
|
|
|
} else {//奇数
|
|
|
|
|
if (count == 1) {//如果只有一个案子那么在中间取一个就退出
|
|
|
|
|
int middle = (int) Math.floor(caselist.size() / 2);
|
|
|
|
|
System.out.println(caselist.get(middle));
|
|
|
|
|
// users.get(i).addCaseHead(caselist.get(middle));//中
|
|
|
|
|
caselist.remove(middle);
|
|
|
|
|
} else {
|
|
|
|
|
//第一个取中间
|
|
|
|
|
int middle = (int) Math.floor(caselist.size() / 2);
|
|
|
|
|
System.out.println(caselist.get(middle));
|
|
|
|
|
// users.get(i).addCaseHead(caselist.get(middle));//中
|
|
|
|
|
caselist.remove(middle);
|
|
|
|
|
//剩下的跟偶数一致
|
|
|
|
|
int total = (count - 1) / 2;
|
|
|
|
|
for (int a = 0; a < total; a++) {
|
|
|
|
|
int end = caselist.size() - 1;
|
|
|
|
|
System.out.println(caselist.get(0));
|
|
|
|
|
// users.get(i).addCaseHead(caselist.get(0));//头
|
|
|
|
|
// users.get(i).addCaseHead(caselist.get(end));//尾
|
|
|
|
|
caselist.remove(end);
|
|
|
|
|
caselist.remove(0);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} else {//最后一个不用计算案件数。剩余案件全是最后一个的这是为了以上几个计算有小数点取整误差
|
|
|
|
|
for (String aLong : caselist) {
|
|
|
|
|
System.out.println(aLong);
|
|
|
|
|
}
|
|
|
|
|
result.add(value);
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
return new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|