ComplianceServer/oldcode/BLL/Ord/ORD_SPECIALMEMO_BL.cs

417 lines
19 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using WX.CRM.BLL.Base;
using WX.CRM.BLL.RedisBL;
using WX.CRM.BLL.Util;
using WX.CRM.BLL.Wx;
using WX.CRM.Common;
using WX.CRM.IBLL.Ord;
using WX.CRM.Model.Entity;
using WX.CRM.Model.EntitySync;
using WX.CRM.Model.Enum;
using WX.CRM.Model.MAP;
using WX.CRM.BLL.Wx;
using WX.CRM.BLL.Application.UserComBox;
using WX.CRM.Model.QueryMap;
namespace WX.CRM.BLL.Ord
{
public class ORD_SPECIALMEMO_BL : IORD_SPECIALMEMO_Q, IORD_SPECIALMEMO
{
private readonly RedisBL.ReadOrWriteFromRedis_BL redisBl = new RedisBL.ReadOrWriteFromRedis_BL();
//private readonly WX_AFTERSALES2_BL _aftersales = new WX_AFTERSALES2_BL();
#region
/// <summary>
/// 新增销售单
/// </summary>
/// <param name="errors">错误信息</param>
/// <param name="model">销售工单信息</param>
/// <param name="strContent">工单内容</param>
/// <returns></returns>
public bool Create(ref ValidationErrors errors, ORD_SPECIALMEMO model)
{
try
{
using (crmContext db = new crmContext())
{
SEQUENCES_BL pkidBll = new SEQUENCES_BL();
ORD_MEMOCONTENT entry = new ORD_MEMOCONTENT();
entry.CONTENTID = pkidBll.Seq_base_get(PKIDType.LargeTable);
entry.STRCONTENT = model.STRCONTENT;
entry.CTIME = DateTime.Now;
db.ORD_MEMOCONTENT.Add(entry);//--新增工单内容
model.MEMOCONTENTID = entry.CONTENTID;
model.MEMOID = pkidBll.Seq_base_get(PKIDType.LargeTable);
db.ORD_SPECIALMEMO.Add(model);//--新增工单
var cacheOrd = new CACHE_ORD_MEMO
{
MTYPEID = (decimal)EnumMemoType.,
MEMOID = model.MEMOID,
MEMOCONTENTID = model.MEMOCONTENTID,
MEMOSTYLEID = model.MEMOSTYLEID,
MEMOTYPEID = model.MEMOTYPEID,
MEMOSUBTYPEID = model.MEMOSUBTYPEID,
ISCHECKED = model.ISCHECKED,
INNERUSERID = model.INNERUSERID,
CALLTIME = model.CALLTIME,
CALLTIMEEND = model.CALLTIMEEND,
CTIME = model.CTIME,
BUSINESSID = model.BUSINESSID,
RESID = model.RESID
};
db.CACHE_ORD_MEMO.Add(cacheOrd);
//转客服部工单,北一才有的功能
//自动写一条记录到客服部
//if (model.MEMOSUBTYPEID == 3015)
//{
// var kfbDefault = new CACHE_BL().GetValue_Parameter("kfbDefault");
// if (!string.IsNullOrEmpty(kfbDefault))
// {
// var arr = kfbDefault.Split(',');
// var dto = new WX_AFTERSALES2(model.RESID, int.Parse(arr[0]), int.Parse(arr[1]), arr[2], string.Empty);
// _aftersales.Save(dto);
// }
//}
bool result2 = db.SaveChanges().GetResult();
//if (result2)
// AddToRedis(entry, cacheOrd);
return result2;
}
}
catch (Exception ex)
{
LogHelper.Error("ORD_SPECIALMEMO_BL ---> public bool Create(ref ValidationErrors errors, ORD_SPECIALMEMO model) 错误信息:" + ex.ToString());
errors.Add(ex.Message);
return false;
}
}
#endregion
#region queryData
/// <summary>
/// 获取条件后的queryData
/// </summary>
/// <param name="queryData"></param>
/// <param name="db"></param>
/// <param name="memoId"></param>
/// <param name="stime"></param>
/// <param name="etime"></param>
/// <param name="MemoType"></param>
/// <param name="MemoSubtype"></param>
/// <param name="saleDeptId"></param>
/// <param name="groupId"></param>
/// <param name="userId"></param>
/// <returns></returns>
private IQueryable<ORD_SPECIALMEMO> GetQuery(IQueryable<ORD_SPECIALMEMO> queryData, WX.CRM.Model.Entity.crmContext db, string memoId, string stime, string etime, decimal MemoType, decimal MemoSubtype, QueryUserComboDto userComboDto)
{
if (!string.IsNullOrEmpty(memoId))
{
decimal _memoId = Convert.ToDecimal(memoId);
queryData = queryData.Where(m => m.MEMOID == _memoId);
}
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))
{
queryData = queryData.Where(a => a.CTIME <= dt2);
}
if (MemoType != 0)
queryData = queryData.Where(a => a.MEMOTYPEID == MemoType);
if (MemoSubtype != 0)
queryData = queryData.Where(a => a.MEMOSUBTYPEID == MemoSubtype);
if (userComboDto.userId.HasValue)
{
queryData = queryData.Where(m => m.INNERUSERID == 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.INNERUSERID.Value));
}
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.INNERUSERID.Value));
var depts = OperationUtil.ConvertToDecimal(userComboDto.deptId.Split(','));
List<decimal> ALLdeptIDS = new List<decimal>();
List<decimal> ALLgidS = new List<decimal>();
UserServices userservices = new UserServices();
foreach (var item in depts)
{
List<decimal> deptIDS = new List<decimal>();
List<decimal> gidS = new List<decimal>();
userservices.GetAllDeptIDOrGidByDeptId(item, ref deptIDS, ref gidS);//获取所有的组别和gid
ALLdeptIDS.AddRange(deptIDS);
ALLgidS.AddRange(gidS);
}
queryData = (from a in queryData
join b in db.BAS_INNERUSERGROUP on a.INNERUSERID equals b.INNERUSERID
//join g in db.BAS_INNERGROUP on b.GID equals g.GID
where ALLdeptIDS.Contains(b.DEPTID.Value) || ALLgidS.Contains(b.GID.Value)
select a);
}
else if (userComboDto.companyId.HasValue)
{
queryData = from a in queryData
join u in db.BAS_INNERUSER on a.INNERUSERID 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;
}
return queryData;
}
#endregion
#region ID
public List<ord_memoExport> GetMemoResId(string memoId, string stime, string etime, decimal MemoType, decimal MemoSubtype, QueryUserComboDto userComboDto)
{
using (var db = new WX.CRM.Model.Entity.crmContext())
{
var queryData = db.ORD_SPECIALMEMO.AsQueryable();
queryData = GetQuery(queryData, db, memoId, stime, etime, MemoType, MemoSubtype, userComboDto);
//return queryData.Select(m => m.RESID).GroupBy(m => new { RESID = m }).Select(m => m.Key.RESID).ToList();
//var q =
//from p in queryData
//group p by p.RESID into g
//select new
//{
// g.Key,
// ncount = g.Count()
//};
//var nlist = q.ToList();
//return nlist.Select(m => m.Key).ToList();
var q = from a in queryData
join b in db.RES_CUSTOMER on a.RESID equals b.RESID
join c in db.RES_CUSTOMER on b.CUSTOMERID equals c.CUSTOMERID
join d in db.RES_ACTIVITY on c.CUSTOMERFROM equals d.RESOURCETAG into tempD
from d in tempD.DefaultIfEmpty()
join e in db.RES_CUSTOMERDETAIL on a.RESID equals e.RESID
select new ord_memoExport()
{
resid = a.RESID,
otherResid = c.RESID,
resAscription = d.ACTIVITYCODE.Substring(0, 1),
innerUserId = a.INNERUSERID,
name = e.CNAME,
ctime = a.CTIME,
callTime = a.CALLTIME
};
//var d = from a in q
// group a by new {a.resid,a.otherResid} into g
// select new
// {
// resid=g.Key.resid,
// otherResid=g.Key.otherResid
// };
return q.OrderBy(m => m.resid).ToList();
}
}
#endregion
#region
public List<WX.CRM.Model.QueryMap.ORD_MemoQuery> GetList(ref Pager pager,
string memoId,
string stime,
string etime,
decimal MemoType,
decimal MemoSubtype,
QueryUserComboDto userComboDto)
{
using (var db = new WX.CRM.Model.Entity.crmContext())
{
var queryData = db.ORD_SPECIALMEMO.AsQueryable();
queryData = GetQuery(queryData, db, memoId, stime, etime, MemoType, MemoSubtype, userComboDto);
queryData = queryData.OrderByDescending(m => m.MEMOID);
PagerUtil.SetPager<WX.CRM.Model.Entity.ORD_SPECIALMEMO>(ref queryData, ref pager);
var obj = (from a in queryData
join b in db.ORD_MEMOCONTENT on a.MEMOCONTENTID equals b.CONTENTID
join c in db.RES_CUSTOMERDETAIL on a.RESID equals c.RESID
select new ORD_MemoQuery()
{
BUSINESSID = a.BUSINESSID,
CALLTIME = a.CALLTIME,
CALLTIMEEND = a.CALLTIMEEND,
CNAME = c.CNAME,
CTIME = a.CTIME,
INNERUSERID = a.INNERUSERID,
MEMOCONTENTID = a.MEMOCONTENTID,
MEMOID = a.MEMOID,
MEMOSTYLEID = a.MEMOSTYLEID,
MEMOSUBTYPEID = a.MEMOSUBTYPEID,
MEMOTYPEID = a.MEMOTYPEID,
RESID = a.RESID,
STRCONTENT = b.STRCONTENT
}
).ToList();
return obj;
}
}
#endregion
#region
public List<WX.CRM.Model.QueryMap.ORD_MemoQuery> GetListByResId(ref Pager pager, string ResId)
{
using (var db = new WX.CRM.Model.Entity.crmContext())
{
var queryData = db.ORD_SPECIALMEMO.AsQueryable();
//queryData = queryData.OrderByDescending(m => m.MEMOID);
queryData = queryData.Where(m => m.RESID == ResId);
PagerUtil.SetPager<WX.CRM.Model.Entity.ORD_SPECIALMEMO>(ref queryData, ref pager);
var obj = (from a in queryData
join b in db.ORD_MEMOCONTENT on a.MEMOCONTENTID equals b.CONTENTID
join c in db.RES_CUSTOMERDETAIL on a.RESID equals c.RESID
select new ORD_MemoQuery()
{
BUSINESSID = a.BUSINESSID,
CALLTIME = a.CALLTIME,
CALLTIMEEND = a.CALLTIMEEND,
CNAME = c.CNAME,
CTIME = a.CTIME,
INNERUSERID = a.INNERUSERID,
MEMOCONTENTID = a.MEMOCONTENTID,
MEMOID = a.MEMOID,
MEMOSTYLEID = a.MEMOSTYLEID,
MEMOSUBTYPEID = a.MEMOSUBTYPEID,
MEMOTYPEID = a.MEMOTYPEID,
RESID = a.RESID,
STRCONTENT = b.STRCONTENT
}
).OrderByDescending(m => m.CTIME).ToList();
return obj;
}
}
#endregion
#region
public bool updateList(ref ValidationErrors errors, List<ORD_SPECIALMEMO> models)
{
try
{
using (WX.CRM.Model.Entity.crmContext db = new WX.CRM.Model.Entity.crmContext())
{
foreach (var model in models)
{
db.ORD_SPECIALMEMO.Attach(model);
db.Entry<WX.CRM.Model.Entity.ORD_SPECIALMEMO>(model).State = EntityState.Modified;
}
db.SaveChanges();
return true;
}
}
catch (Exception ex)
{
errors.Add(ex.Message);
return false;
}
}
public List<ORD_SPECIALMEMO> GetNoCallTimeByMemoId(decimal[] MemoIds)
{
using (var db = new WX.CRM.Model.Entity.crmContext())
{
return db.ORD_SPECIALMEMO.Where(p => MemoIds.Contains(p.MEMOID) && (!p.CALLTIME.HasValue || !p.CALLTIMEEND.HasValue)).ToList();
}
}
#endregion
public bool Delete_SpecialMemo(ref ValidationErrors errors, decimal memoId)
{
try
{
using (var db = new crmContext())
{
ORD_SPECIALMEMO entity = db.ORD_SPECIALMEMO.FirstOrDefault(m => m.MEMOID == memoId);
CACHE_ORD_MEMO cache_Memo = db.CACHE_ORD_MEMO.FirstOrDefault(m => m.MEMOID == memoId);
if (entity == null)
{
errors.Add("数据不存在!");
return false;
}
db.ORD_SPECIALMEMO.Remove(entity);
if (cache_Memo != null)
{
db.CACHE_ORD_MEMO.Remove(cache_Memo);
}
return db.SaveChanges().GetResult();
}
}
catch (Exception ex)
{
errors.Add(ex.Message);
return false;
}
}
#region
public List<ORD_SPECIALMEMO> GetHgSpecialMemo(decimal Memoid, decimal memosubtypeId)
{
using (var db = new crmContext())
{
return db.ORD_SPECIALMEMO.Where(p => p.MEMOSUBTYPEID == memosubtypeId && p.MEMOID > Memoid).ToList();
}
}
#endregion
#region addtoRedis
private void AddToRedis(ORD_MEMOCONTENT entry, CACHE_ORD_MEMO cacheOrd, bool result = true)
{
redisBl.AddRedis_Ord_Memocontent(entry, out result);
redisBl.AddRedis_Resid_Memoid(cacheOrd.RESID, cacheOrd.MEMOID, out result);
redisBl.AddRedis_CacheOrdMemo(cacheOrd, out result);
if (!result)
{
REDIS_CACHE_SSODATASYNC_BL cacheBL = new REDIS_CACHE_SSODATASYNC_BL();
#region redis
REDIS_CACHE_SSODATASYNC redisMoel1 = new REDIS_CACHE_SSODATASYNC();
redisMoel1.TABLETYPE = "ord_memocontent";
redisMoel1.KEYS = entry.CONTENTID.ToString();
redisMoel1.OPTYPE = "A";
redisMoel1.TIME = DateTime.Now;
redisMoel1.LASTSYNCTIME = DateTime.Now;
redisMoel1.ERRNUM = 0;
redisMoel1.ERRMSG = "";
cacheBL.Create_RedisCacheSSODataSYNC(redisMoel1);
REDIS_CACHE_SSODATASYNC redisMoel2 = new REDIS_CACHE_SSODATASYNC();
redisMoel2.TABLETYPE = "cache_ord_memo";
redisMoel2.KEYS = cacheOrd.MEMOID.ToString();
redisMoel2.OPTYPE = "A";
redisMoel2.TIME = DateTime.Now;
redisMoel2.LASTSYNCTIME = DateTime.Now;
redisMoel2.ERRNUM = 0;
redisMoel2.ERRMSG = "";
cacheBL.Create_RedisCacheSSODataSYNC(redisMoel2);
REDIS_CACHE_SSODATASYNC redisMoel3 = new REDIS_CACHE_SSODATASYNC();
redisMoel3.TABLETYPE = "resid_memoid_redis";
redisMoel3.KEYS = cacheOrd.MEMOID.ToString();
redisMoel3.OPTYPE = "A";
redisMoel3.TIME = DateTime.Now;
redisMoel3.LASTSYNCTIME = DateTime.Now;
redisMoel3.ERRNUM = 0;
redisMoel3.ERRMSG = "";
cacheBL.Create_RedisCacheSSODataSYNC(redisMoel3);
#endregion
}
}
#endregion
}
}