111,112
社区成员




/// <summary>
/// step 1:读取Addon数据库中的MaterialCardMonitor_1表数据
/// step 2:根据分部分配批号读取该批号下的所有卡号记录
/// </summary>
class SegmentAssignCard_Step_1 : ITask
{
private IOrganizationService service;
private readonly int threadCount = 5;//指定开启的线程数
public SegmentAssignCard_Step_1()
{
Utility _conn = new Utility();
CrmConnection crmConn = CrmConnection.Parse(_conn.GetConnectionString(1));
service = new OrganizationService(crmConn);
}
/// <summary>
///
/// </summary>
public void Execute()
{
try
{
#region step 1:读取Addon数据库中的MaterialCardMonitor_1表数据
string strSql_1 = @" SELECT TOP 1 [name]
,[new_segmentassigncardid]
,[new_businessunitid]
,[teamid]
,[new_areanumber]
,[new_beginnumber]
,[new_endnumber]
FROM [MaterialCardMonitor_1] WHERE [isDeal]=0 ORDER BY createdon DESC ";
DataTable dt_1 = ExecuteDataTable(strSql_1, true);
if (dt_1 == null || dt_1.Rows.Count < 1) return;
string strName = dt_1.Rows[0]["name"].ToString();//分部分配批号
string new_areanumber = dt_1.Rows[0]["new_areanumber"].ToString();//分部区号
string new_beginnumber = dt_1.Rows[0]["new_beginnumber"].ToString();//起始卡号
string new_endnumber = dt_1.Rows[0]["new_endnumber"].ToString();//结束卡号
Guid teamId = Guid.Parse(dt_1.Rows[0]["teamid"].ToString());//团队ID
Guid new_segmentassigncardid = Guid.Parse(dt_1.Rows[0]["new_segmentassigncardid"].ToString());//分部分配批次ID
Guid new_businessunitid = Guid.Parse(dt_1.Rows[0]["new_businessunitid"].ToString());//分配门店ID
string strSql_1_1 = " UPDATE MaterialCardMonitor_1 SET [isDeal]=1 WHERE [name]= '" + strName + "' ";
ExecuteSql(strSql_1_1, true);
#endregion
#region step 2:根据分部分配批号读取该批号下的所有卡号记录
string strSql_2 = string.Format(@"SELECT COUNT(1) FROM new_materialcardrecordExtensionBase WITH(NOLOCK)
WHERE new_businessunit1id = '{0}' AND new_statecode = 100000002
AND new_name BETWEEN '{1}{2}' AND '{1}{3}'",
new_businessunitid, new_areanumber.Trim(), new_beginnumber.Trim(), new_endnumber.Trim());
object objCount = ExecuteScalar(strSql_2, false);
int iCount = (objCount != DBNull.Value && objCount != null) ? Convert.ToInt32(objCount) : 0;
if (iCount == 0) return;
for (int i = 1; i <= threadCount; i++)
{
string strSql_3 = string.Format(@"SELECT TOP {2} *
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY new_materialcardrecordid) AS RowNumber,new_materialcardrecordid,new_statecode
FROM new_materialcardrecord WITH(NOLOCK)
WHERE new_businessunit1id = '{1}' AND new_statecode = 100000002
AND new_name BETWEEN '{3}{4}' AND '{3}{5}'
) A
WHERE RowNumber > {2}*({0}-1)", i, new_businessunitid, Math.Ceiling((double)iCount / (double)threadCount),
new_areanumber.Trim(), new_beginnumber.Trim(), new_endnumber.Trim());
DataTable dt_2 = ExecuteDataTable(strSql_3, false);
if (dt_2 != null && dt_2.Rows.Count > 0)
{
List<MaterialcardKeyValue> mkvList = new List<MaterialcardKeyValue>();
foreach (DataRow item in dt_2.Rows)
{
MaterialcardKeyValue mkv = new MaterialcardKeyValue();
mkv.id = Guid.Parse(item["new_materialcardrecordid"].ToString());
mkv.statecode = Convert.ToInt32(item["new_statecode"]);
mkvList.Add(mkv);
}
Thread thread = new Thread(new ParameterizedThreadStart(new SegmentAssignCard_Step_2().Execute));
Parameters obj = new Parameters();
obj.rowIndex = i;
obj.teamId = teamId;
obj.new_segmentassigncardid = new_segmentassigncardid;
obj.new_businessunit2id = new_businessunitid;
obj.mkvList = mkvList;
thread.Start(obj);
}
}
#endregion
}
catch (Exception ex)
{
Utility.LogError(ex.Message);
}
}
#region 执行SQL语句,返回受影响的行数
/// <summary>
///执行SQL语句,返回受影响的行数
/// </summary>
/// <param name="sqlSentence"></param>
/// <returns></returns>
public int ExecuteSql(string sqlSentence, bool isAddon)
{
Utility _conn = new Utility();
SqlConnection conn = new SqlConnection(_conn.GetConnectionString(isAddon ? 3 : 2));
SqlCommand cmd = new SqlCommand(sqlSentence, conn);
int result = 0;
try
{
conn.Open();
result = cmd.ExecuteNonQuery();
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
conn.Close();
}
return result;
}
#endregion
#region .执行SQL语句,返回结果集
/// <summary>
/// 执行SQL语句,返回结果集
/// </summary>
/// <param name="strQuery"></param>
/// <returns></returns>
private DataTable ExecuteDataTable(string strQuery, bool isAddon)
{
Utility _conn = new Utility();
SqlConnection conn = new SqlConnection(_conn.GetConnectionString(isAddon ? 3 : 2));
SqlDataAdapter dAdapter = new SqlDataAdapter(strQuery, conn);
DataTable dt = new DataTable();
try
{
conn.Open();
dAdapter.Fill(dt);
}
catch (Exception ex)
{
Utility.LogError(string.Format("{0} 【总部分配卡号--设置负责人】系统服务执行SQL发生异常,异常信息:{1}。"
, DateTime.Now, ex.Message));
}
finally
{
conn.Close();
}
return dt;
}
#endregion
#region 执行SQL语句,返回首行首列
/// <summary>
///执行SQL语句,返回首行首列
/// </summary>
/// <param name="sqlSentence"></param>
/// <returns></returns>
protected object ExecuteScalar(string sqlSentence, bool isAddon)
{
Utility _conn = new Utility();
SqlConnection conn = new SqlConnection(_conn.GetConnectionString(isAddon ? 3 : 2));
SqlCommand cmd = new SqlCommand(sqlSentence, conn);
object obj = null;
try
{
conn.Open();
obj = cmd.ExecuteScalar();
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
conn.Close();
}
return obj;
}
#endregion
#region .获取DataRow属性值
private T GetDrValue<T>(System.Data.DataRow dr, string attributeName, T defaultValue)
{
if (dr[attributeName] == null || dr[attributeName] == DBNull.Value)
return defaultValue;
return (T)dr[attributeName];
}
#endregion
}
Parameters parameter = (Parameters)obj;
List<MaterialcardKeyValue> mkvList = parameter.mkvList;
foreach (MaterialcardKeyValue item in mkvList)
{
if (item.statecode==100000002)
{
//修改指定卡号记录的负责人为某一团队ID
AssignRequest assign = new AssignRequest
{
Assignee = new EntityReference("team", parameter.teamId),
Target = new EntityReference("new_materialcardrecord", item.id)
};
service.Execute(assign);
}
}
这里!
/// <summary>
/// 为SegmentAssignCard_Step_1.cs提供单独的类方法,已便进行多线程的调用
/// </summary>
public class SegmentAssignCard_Step_2
{
private IOrganizationService service;
public void Execute(object obj)
{
try
{
try
{
Utility _conn = new Utility();
CrmConnection crmConn = CrmConnection.Parse(_conn.GetConnectionString(1));
service = new OrganizationService(crmConn);
}
catch (Exception eex)
{
Utility.LogError("分部分配物料卡时创建连接时出现异常,异常原因{" + eex.Message + "}");
return;
}
if (obj == null)
{
Utility.LogError("分部分配物料卡[获取卡号记录Object]时出现异常,异常原因{obj}为null!!");
return;
}
Parameters parameter = (Parameters)obj;
List<MaterialcardKeyValue> mkvList = parameter.mkvList;
foreach (MaterialcardKeyValue item in mkvList)
{
if (item.statecode==100000002)
{
//修改指定卡号记录的负责人为某一团队ID
AssignRequest assign = new AssignRequest
{
Assignee = new EntityReference("team", parameter.teamId),
Target = new EntityReference("new_materialcardrecord", item.id)
};
service.Execute(assign);
}
}
}
catch (Exception ex)
{
Utility.LogError("分部分配物料卡至卖场出错,出错原因:" + ex.Message);
try
{
Parameters parameter = (Parameters)obj;
Thread thread = new Thread(new ParameterizedThreadStart(new SegmentAssignCard_Step_2().Execute));
thread.Start(obj);
Utility.LogInfo("分部分配物料卡至卖场出错后线程已重新开启");
}
catch (Exception eex)
{
Utility.LogError("分部分配物料卡至卖场出错后线程重启后再次出错,出错原因:" + eex.Message);
}
}
}
#region 执行SQL语句,返回受影响的行数
/// <summary>
///执行SQL语句,返回受影响的行数
/// </summary>
/// <param name="sqlSentence"></param>
/// <returns></returns>
public int ExecuteSql(string sqlSentence, bool isAddon)
{
Utility _conn = new Utility();
SqlConnection conn = new SqlConnection(_conn.GetConnectionString(isAddon ? 3 : 2));
SqlCommand cmd = new SqlCommand(sqlSentence, conn);
int result = 0;
try
{
conn.Open();
result = cmd.ExecuteNonQuery();
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
conn.Close();
}
return result;
}
#endregion
}
下面是Parameters类跟MaterialcardKeyValue类
public class Parameters
{
/// <summary>
/// 行数
/// </summary>
public int rowIndex { get; set; }
/// <summary>
/// 数据表
/// </summary>
public DataTable dt { get; set; }
/// <summary>
/// 用于存放【卡号记录ID】【卡号记录状态】的集合
/// </summary>
public List<MaterialcardKeyValue> mkvList { get; set; }
/// <summary>
/// 用户ID(负责人)
/// </summary>
public Guid systemuserId { get; set; }
/// <summary>
/// 团队ID(负责人)
/// </summary>
public Guid teamId { get; set; }
/// <summary>
/// 分部分配卡号ID
/// </summary>
public Guid new_segmentassigncardid { get; set; }
/// <summary>
/// 卖场ID
/// </summary>
public Guid new_businessunit2id { get; set; }
}
public class MaterialcardKeyValue
{
/// <summary>
/// 卡号记录ID
/// </summary>
public Guid id { get; set; }
/// <summary>
/// 卡号记录状态
/// </summary>
public int statecode { get; set; }
}