查询出所有可以分配的记录
变成乱序
循环分配,直到所有合同分配完毕
请问有具体操作吗?这个思路挺广泛的
因为表B负责产品以及等级有些是一样的,分的时候,循环可能就全部分给他一个人了
是因为数据量太大需要分表存吗?
在程序中设置一个全局变量记录当前的合同数,单数保存到A表,双数保存到B表。
伪代码:
DataTable dtC = getDataTable("人员表");
DataTable dtA = getDataTable("表A");
if (dtC.Rows.Count == 0){
//没有可分配的人员
return;
}
if (dtA.Rows.Count == 0){
//没有可分配的任务;
return;
}
int offset = 0;
while (dtA.Rows.Count - offset > dtC.Rows.Count){
for(int i = 0; i < dtB.Rows.Count; i++){
//向表B插入分配记录
……
}
offset += dtC.Rows.Count;
}
Random rnd = new Random();
List<int> yfp = new List<int>(); //已经分配任务的ID列表
for(int i = offset; i < dtA.Rows.Count; i++){
int ryid = rnd.Next(0, dtC.Rows.Count - 1); //随机取人员ID
while (yfp.Contains(ryid))
{
//如果已分配则重新获取
ryid = rnd.Next(0, dtB.Rows.Count - 1);
}
yfp.Add(ryid);
//向表B插入分配记录
……
}
先开个分配统计表(人员ID,分配数)
表A中把分组用的(门店、产品、等级)取出来进行循环:
1)表A取该分组的明细
2)表B取该分组的明细、并且和分配统计表关联、按分配数升序排序
3)把合同明细和人员明细一对一循环分配(人员不足继续从头开始),每分配一个分配数加1
这样之前分配数少的会在之后多分配,比较平均。