C#合同逾期 分配给人员

图片说明

查询出所有可以分配的记录
变成乱序
循环分配,直到所有合同分配完毕

请问有具体操作吗?这个思路挺广泛的

因为表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
这样之前分配数少的会在之后多分配,比较平均。