TG.WXCRM.V4/BLL/Sms/SMS_BATCHMSG_BL.cs

404 lines
18 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Linq;
using WX.CRM.BLL.Util;
using WX.CRM.Common;
using WX.CRM.DAL.Sms;
using WX.CRM.IBLL.Sms;
using WX.CRM.Model.Entity;
using WX.CRM.Model.MAP;
namespace WX.CRM.BLL.Sms
{
public class SMS_BATCHMSG_BL : ISMS_BATCHMSG, ISMS_BATCHMSG_Q
{
string clientid = Utility.GetSettingByKey("CRMClientKey");
WX.CRM.IBLL.Util.ISecurityHelper sHelper = new SecurityHelper();
DAL.Sms.BATCHMSG_DAL dal = new BATCHMSG_DAL();
private WX.CRM.Model.Entity.crmContext db = new WX.CRM.Model.Entity.crmContext();
public void ImpotDt(WX.CRM.Model.Entity.SMS_BATCHMSG info, List<string> mobils, int timeOut = 300)
{
var genKey = new BLL.Base.SEQUENCES_BL();
decimal batchId = genKey.Seq_base_get(WX.CRM.Model.Enum.PKIDType.LargeTable);
System.Data.DataSet ds = new System.Data.DataSet();
var msgSubTypeModel = db.SMS_MSGSUBTYPE.FirstOrDefault(p => p.SUBTYPEID == info.SUBTYPEID);
if (msgSubTypeModel == null)
{
return;
}
//主表SMS_BATCHMSG
System.Data.DataTable dt1 = new System.Data.DataTable("SMS_BATCHMSG");
dt1.Columns.Add("BATCHID", typeof(decimal));
dt1.Columns.Add("MESSAGE", typeof(string));
dt1.Columns.Add("TYPECODE", typeof(string));
dt1.Columns.Add("SUBTYPEID", typeof(decimal));
dt1.Columns.Add("CLIENTCODE", typeof(string));
dt1.Columns.Add("CTIME", typeof(DateTime));
dt1.Columns.Add("CREATEUSER", typeof(decimal));
System.Data.DataRow r1_1 = dt1.NewRow();
r1_1["BATCHID"] = batchId;
r1_1["MESSAGE"] = (new { typeCode = info.TYPECODE, SubTypeCode = msgSubTypeModel.SUBTYPECODE, para = info.MESSAGE }).ToJson();
r1_1["TYPECODE"] = info.TYPECODE ?? "";
r1_1["SUBTYPEID"] = info.SUBTYPEID ?? 0;
r1_1["CLIENTCODE"] = info.CLIENTCODE ?? "";
r1_1["CTIME"] = info.CTIME;
r1_1["CREATEUSER"] = info.CREATEUSER;
dt1.Rows.Add(r1_1);
//明细表SMS_BATCHMSGDETAIL
System.Data.DataTable dt2 = new System.Data.DataTable("RES_IMPORTRES_DETAIL");
dt2.Columns.Add("IMPORTID", typeof(decimal));
dt2.Columns.Add("RESID", typeof(string));
dt2.Columns.Add("MOBILE", typeof(string));
dt2.Columns.Add("ENMOBILE", typeof(string));
foreach (string m in mobils)
{
System.Data.DataRow r2_1 = dt2.NewRow();
r2_1["IMPORTID"] = batchId;
r2_1["RESID"] = m;
r2_1["MOBILE"] = "0";
r2_1["ENMOBILE"] = "0";
dt2.Rows.Add(r2_1);
}
ds.Tables.Add(dt1);
ds.Tables.Add(dt2);
dal.ImpotDt(ds, timeOut);
dal.DoImportDt(batchId);
}
public List<WX.CRM.Model.Entity.SMS_BATCHMSG> GetList(int PageIndex, int PageSize, ref int rcount)
{
//var query = db.SMS_BATCHMSG.OrderByDescending(p => p.BATCHID);
//rcount = query.Count();
//int startIndex = 0;
//if (PageIndex > 1)
// startIndex = (PageIndex - 1) * PageSize;
//List<Model.Entity.SMS_BATCHMSG> lis = query.Skip(startIndex).Take(PageSize).ToList<Model.Entity.SMS_BATCHMSG>();
var curDate = System.DateTime.Now.Date;
List<WX.CRM.Model.Entity.SMS_BATCHMSG> lis = db.SMS_BATCHMSG.Where(s => s.CTIME >= curDate).OrderByDescending(p => p.BATCHID).ToList<WX.CRM.Model.Entity.SMS_BATCHMSG>();
foreach (var obj in lis)
{
var msgcodename = db.SMS_MSGTYPE.FirstOrDefault(P => P.TYPECODE == obj.TYPECODE);
if (msgcodename != null)
obj.map_TYPECODENAME = msgcodename.TYPENAME;
var subMsgClient = db.SMS_ACCOUNT.FirstOrDefault(p => p.CLIENTCODE == obj.CLIENTCODE);
if (subMsgClient != null)
obj.map_CLIENTENAME = subMsgClient.CLIENTNAME;
var subuser = db.BAS_INNERUSER.FirstOrDefault(p => p.PKID == obj.CREATEUSER);
if (subuser != null)
obj.map_CREATEUSERNAME = subuser.UNAME;
var shu = db.SMS_BATCHMSGTEMPLATE.FirstOrDefault(p => p.SUBTYPEID == obj.SUBTYPEID);
if (shu != null)
{
string[] str = obj.MESSAGE.Split('|');
obj.MESSAGE = Utility.GetSendMsgModel(str[1], shu.TEMPLATEVALUE);
}
}
return lis;
}
public WX.CRM.Model.Entity.SMS_BATCHMSG GetTopInfo()
{
var q = from b in db.SMS_BATCHMSG
join d in db.SMS_BATCHMSGDETAIL on b.BATCHID equals d.BATCHID
select b;
var info = q.OrderBy(p => p.BATCHID).FirstOrDefault();
LogHelper.Info("info:" + info.ToJson());
//Common.LogHelper.Error("【批量短信为空GetTopInfoSql】:" + q.ToString());
if (info == null)
return null;
info.numberCount = db.SMS_BATCHMSGDETAIL.Where(p => p.BATCHID == info.BATCHID).Count();
var clientCode = info.CLIENTCODE.Trim();
var acc = db.SMS_ACCOUNT.FirstOrDefault(p => p.CLIENTCODE == clientCode);
//LogHelper.Info("acc:" + acc.ToJson());
if (acc != null)
{
info.interfaceCode = acc.SMSSP_CODE;
info.interfaceAccount = acc.SMSACCOUNT;
info.interfacePwd = acc.SMSPASSWORD;
}
else
{
// 如果没有找到对应的发送接口,转移到历史表
//WX.CRM.Model.Entity.SMS_SENDLOG logInfo = new WX.CRM.Model.Entity.SMS_SENDLOG();
//logInfo.SENDID = new BLL.Base.SEQUENCES_BL().Seq_base_get(WX.CRM.Model.Enum.PKIDType.LargeTable);
//logInfo.MSGSOURCEID = info.BATCHID;
//logInfo.SENDSUCCESS = 0;
//logInfo.SENDTIME = System.DateTime.Now;
//logInfo.RETURNMSG = "未找到对应的发送接口!";
//db.SMS_SENDLOG.Add(logInfo);
//var details = db.SMS_BATCHMSGDETAIL.Where(p => p.BATCHID == info.BATCHID).ToList();
//foreach (var obj in details)
//{
// db.SMS_BATCHMSGDETAIL_HIS.Add(new WX.CRM.Model.Entity.SMS_BATCHMSGDETAIL_HIS()
// {
// PKID = obj.PKID,
// RESID = obj.RESID,
// BATCHID = obj.BATCHID,
// SENDID = logInfo.SENDID,
// SENDSUCCESS = logInfo.SENDSUCCESS,
// SENDTIME = logInfo.SENDTIME,
// CTIME = System.DateTime.Now
// });
// db.SMS_BATCHMSGDETAIL.Remove(obj);
//}
//db.SaveChanges();
LogHelper.Info("acc is null配置有误" + clientCode);
}
return info;
}
public List<WX.CRM.Model.Entity.SMS_BATCHMSGDETAIL> GetDetailList(int topNum, decimal batchid)
{
var q = from d in db.SMS_BATCHMSGDETAIL
join r in db.RES_RESOURCEMOBILE on d.RESID equals r.RESID into res
from rt in res.DefaultIfEmpty()
where d.BATCHID == batchid
select new
{
RESID = d.RESID,
mobile = rt.MOBILE,
PKID = d.PKID,
BATCHID = d.BATCHID
};
//LogHelper.Error("list:start,clientid:" + clientid);
//var lis = q.OrderBy(p => p.PKID).Skip(0).Take(topNum).ToList().Select(c => new WX.CRM.Model.Entity.SMS_BATCHMSGDETAIL
//{
// RESID = c.RESID,
// mobile = sHelper.decyptData(clientid, c.mobile.ToString().Trim()),
// PKID = c.PKID,
// BATCHID = c.BATCHID
//}).ToList();
var lis = q.OrderBy(p => p.PKID).Take(topNum).ToList();
var list = new List<SMS_BATCHMSGDETAIL>();
foreach (var item in lis)
{
var mobile = string.Empty;
try
{
mobile = sHelper.decyptData(clientid, item.mobile);
}
catch
{
//解密出错手机号码,尝试使用默认进行解密
try
{
mobile = sHelper.decyptData("gd_crm", item.mobile);
}
catch
{
//客户ID没有找到对应的手机号则转移到历表并标为发送失败
var delInfo = db.SMS_BATCHMSGDETAIL.FirstOrDefault(p => p.PKID == item.PKID);
var his = new SMS_BATCHMSGDETAIL_HIS
{
PKID = delInfo.PKID,
BATCHID = delInfo.BATCHID,
CTIME = DateTime.Now,
RESID = delInfo.RESID,
SENDSUCCESS = 0,
SENDTIME = DateTime.Now
};
db.SMS_BATCHMSGDETAIL_HIS.Add(his);
db.SMS_BATCHMSGDETAIL.Remove(delInfo);
db.SaveChanges();
}
}
if (!string.IsNullOrEmpty(mobile))
list.Add(new SMS_BATCHMSGDETAIL() { RESID = item.RESID, mobile = mobile, PKID = item.PKID, BATCHID = item.BATCHID });
}
return list;
}
public List<WX.CRM.Model.Entity.SMS_BATCHMSGDETAIL> GetPopularDetailList(int topNum, decimal batchid)
{
var q = from d in db.SMS_BATCHMSGDETAIL
join r in db.RES_RESOURCEMOBILE on d.RESID equals r.RESID
join b in db.SMS_RESCODE on d.RESID equals b.RESID into tmp1
from ab in tmp1.DefaultIfEmpty()
where d.BATCHID == batchid
select new
{
RESID = d.RESID,
mobile = r.MOBILE,
PKID = d.PKID,
BATCHID = d.BATCHID,
numEncry = ab.CODE
};
var list = q.OrderBy(p => p.PKID).Skip(0).Take(topNum).ToList().Select(c => new WX.CRM.Model.Entity.SMS_BATCHMSGDETAIL
{
RESID = c.RESID,
mobile = sHelper.decyptData(clientid, c.mobile.ToString().Trim()),
PKID = c.PKID,
BATCHID = c.BATCHID,
numEncry = c.numEncry
}).ToList();
foreach (var o in list)
{
if (string.IsNullOrWhiteSpace(o.numEncry))
{
o.numEncry = Common.Utility.Conver10To64Ext((long)o.PKID);
}
var t = db.SMS_MOBILEPOPULAR.Where(p => p.PKID == o.PKID).FirstOrDefault();
if (t == null)
db.SMS_MOBILEPOPULAR.Add(new WX.CRM.Model.Entity.SMS_MOBILEPOPULAR()
{
PKID = o.PKID,
BATCHID = o.BATCHID,
RESID = o.RESID,
CTIME = System.DateTime.Now,
CLICKCOUNT = 0,
NUMENCRY = o.numEncry
});
}
db.SaveChanges();
return list;
}
public void ExecLog(List<decimal> detaisIds, WX.CRM.Model.Entity.SMS_SENDLOG logInfo)
{
string pkids = string.Join(",", detaisIds);
if (string.IsNullOrEmpty(pkids))
return;
new DAL.Sms.BATCHMSG_DAL().ExecLog(pkids, logInfo.SENDSTR, logInfo.CLIENTCODE, logInfo.MSGSOURCEID, logInfo.RETURNMSG, logInfo.SENDSUCCESS);
//try
//{
// WX.CRM.Model.Entity.crmContext db1 = new Model.Entity.crmContext();
// logInfo.SENDID = new BLL.Base.SEQUENCES_BL().Seq_base_get(Model.Enum.PKIDType.LargeTable);
// db1.SMS_SENDLOG.Add(logInfo);
// var details = db1.SMS_BATCHMSGDETAIL.Where(p => detaisIds.Contains(p.PKID)).ToList();
// foreach (var obj in details)
// {
// Model.Entity.SMS_BATCHMSGDETAIL_HIS o = new Model.Entity.SMS_BATCHMSGDETAIL_HIS();
// o.PKID = obj.PKID;
// o.RESID = obj.RESID;
// o.BATCHID = obj.BATCHID;
// o.SENDID = logInfo.SENDID;
// o.SENDSUCCESS = logInfo.SENDSUCCESS;
// o.SENDTIME = logInfo.SENDTIME;
// o.CTIME = System.DateTime.Now;
// db1.SMS_BATCHMSGDETAIL_HIS.Add(o);
// db1.SMS_BATCHMSGDETAIL.Remove(obj);
// }
// db1.SaveChanges();
//}
//catch (System.Data.Entity.Validation.DbEntityValidationException ex)
//{
// Common.LogHelper.Error("=====1111111ExecLog" + ex.Message + ex.EntityValidationErrors + ex.StackTrace);
// foreach (var er in ex.EntityValidationErrors)
// {
// Common.LogHelper.Error("【"+er.ToString() + "#" + er.ValidationErrors.First().PropertyName + "#" + er.ValidationErrors.First().ErrorMessage+"】");
// }
// throw;
//}
//catch (Exception ex)
//{
// Common.LogHelper.Error("==222222222ExecLog" + ex.Message + ex.StackTrace);
// throw;
//}
}
public List<WX.CRM.Model.Entity.SMS_BATCHMSG> GetList(ref Pager pager, string Stime, string Etime, string msgType, QueryUserComboDto userComboDto)
{
using (var db = new WX.CRM.Model.Entity.crmContext())
{
var queryData = db.SMS_BATCHMSG.AsQueryable();
if (!string.IsNullOrEmpty(msgType) && msgType != "0")
{
msgType = msgType.Trim();
queryData = queryData.Where(m => m.TYPECODE == msgType);
}
DateTime dt;
if (!string.IsNullOrWhiteSpace(Stime) && DateTime.TryParse(Stime, out dt))
queryData = queryData.Where(a => a.CTIME >= dt);
DateTime dt2;
if (!string.IsNullOrWhiteSpace(Etime) && DateTime.TryParse(Etime, out dt2))
{
//dt2 = dt2.AddDays(1);
queryData = queryData.Where(a => a.CTIME <= dt2);
}
if (userComboDto.userId.HasValue)
{
queryData = queryData.Where(m => m.CREATEUSER == userComboDto.userId.Value);
}
else if (!string.IsNullOrEmpty(userComboDto.groupIds))
{
decimal[] _groupids = OperationUtil.ConvertToDecimal(userComboDto.groupIds.Split(','));
var userIds = db.BAS_INNERUSERGROUP.Where(m => _groupids.Contains(m.GID.Value)).Select(m => m.INNERUSERID);
queryData = queryData.Where(m => userIds.Contains(m.CREATEUSER));
}
else if (!string.IsNullOrEmpty(userComboDto.deptId))
{
decimal[] _saleDeptId = OperationUtil.ConvertToDecimal(userComboDto.deptId.Split(','));
var groupIds = db.BAS_INNERGROUP.Where(m => _saleDeptId.Contains(m.SALEDEPTID.Value)).Select(p => p.GID).ToList();
var userIds = (from a in db.BAS_INNERUSERGROUP where groupIds.Contains(a.GID.Value) select a.INNERUSERID);
queryData = queryData.Where(a => userIds.Contains(a.CREATEUSER));
}
else if (userComboDto.companyId.HasValue)
{
queryData = from a in queryData
join u in db.BAS_INNERUSER on a.CREATEUSER equals u.PKID
join ug in db.BAS_INNERUSERGROUP on u.PKID equals ug.INNERUSERID
join g in db.BAS_INNERGROUP on ug.GID equals g.GID
join d in db.BAS_SALESDEPARTMENT on g.SALEDEPTID equals d.SALEDEPTID
where d.COMPANYID == userComboDto.companyId.Value
select a;
}
queryData = queryData.OrderByDescending(m => m.CTIME);
PagerUtil.SetPager<WX.CRM.Model.Entity.SMS_BATCHMSG>(ref queryData, ref pager);
var obj = queryData.ToList();
return obj;
}
}
public System.Data.DataSet GetMessageList(ref Pager pager, string resid, int? rn, DateTime? stime, DateTime? etime)
{
return dal.GetMessageList(ref pager, resid, rn, stime, etime);
}
public void ImpotDtResCode(int timeOut = 300)
{
System.Data.DataSet ds = new System.Data.DataSet();
//主表SMS_BATCHMSG
System.Data.DataTable dt1 = new System.Data.DataTable("SMS_RESCODE");
dt1.Columns.Add("CODE", typeof(string));
dt1.Columns.Add("RESID", typeof(string));
string s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char[] c = new char[4];
for (int i = 0; i < s.Length; i++)
{
c[0] = s[i];
for (int j = 0; j < s.Length; j++)
{
c[1] = s[j];
for (int k = 0; k < s.Length; k++)
{
c[2] = s[k];
for (int n = 0; n < s.Length; n++)
{
c[3] = s[n];
string r = new string(c);
System.Data.DataRow r1_1 = dt1.NewRow();
r1_1["CODE"] = r;
r1_1["RESID"] = "";
dt1.Rows.Add(r1_1);
}
}
}
}
ds.Tables.Add(dt1);
dal.ImpotDtResCode(ds, timeOut);
}
}
}