using StackExchange.Redis; using System; using System.Collections.Generic; using System.Data.Entity; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using WX.CRM.BLL.Application.UserComBox; using WX.CRM.BLL.Res; using WX.CRM.BLL.Util; using WX.CRM.Common; using WX.CRM.IBLL.Res; using WX.CRM.Model.DTO; using WX.CRM.Model.Entity; using WX.CRM.Model.MAP; namespace WX.CRM.BLL.Deliver { public class DELIVER_BLL { private CACHE_BL cache_BL = new CACHE_BL(); private static IRES_CUSTOMER _customer = new RES_CUSTOMER_BL(); /// /// 插入或者更新一条 交付数据 /// /// /// public bool InserOrUpdate(WX_SZZYORDER_DELIVER_METHOD data) { try { using (var db = new crmContext()) { var model = db.WX_SZZYORDER_DELIVER_METHOD.FirstOrDefault(m => m.ORDER_ID == data.ORDER_ID); if (model == null) { if (data.MAIL_PHONE.IndexOf("_") == 0) { //首位下划线 为简易加密后的手机号//并且为第一次入库 var phone = (Convert.ToInt64(data.MAIL_PHONE.Replace("_", "")) / 7 - 555).ToString(); var sw = new StringWriter(); _customer.ResgisterCustomer(phone, data.MAIL_RESID, "deliver", sw.ToString());//注册 data.MAIL_PHONE= phone.Substring(0, 3) + "****" + phone.Substring(7, 4); } db.WX_SZZYORDER_DELIVER_METHOD.Add(data); } else { //由于 数据提交存在 前后顺序出现问题的情况 //已经提交的数据又会被修改回交付前 if (data.DELIVER_STATUS == 0 && model.DELIVER_STATUS != 0) return false;//不做回退更新 model.DELIVER_STATUS = data.DELIVER_STATUS; model.MAIL_NAME = data.MAIL_NAME; model.MAIL_RESID = data.MAIL_RESID; model.MAIL_PHONE = data.MAIL_PHONE; model.PROVINCE = data.PROVINCE; model.CITY = data.CITY; model.AREA = data.AREA; model.ADDRESS = data.ADDRESS; model.DELIVER_TIME = data.DELIVER_TIME; } return db.SaveChanges().GetResult(); } } catch (Exception ex) { LogHelper.Error(ex); return false; } } /// /// 插入日志 /// /// /// public bool InserLog(WX_SZZYORDER_DELIVER_LOG log) { try { using (var db = new crmContext()) { if (db.WX_SZZYORDER_DELIVER_LOG.Any(m => m.DELIVER_PICTURE_ID == log.DELIVER_PICTURE_ID)) return false; if (log.ORDER_ID == 0) return false; //20220913 更新邮寄记录只保留一条 if (log.DELIVER_TYPE == (int)DELIVER_TYPE_ENUM.邮寄交付) { if (!string.IsNullOrEmpty(log.FILE_PATH)) { //上传回执 var old = db.WX_SZZYORDER_DELIVER_LOG.FirstOrDefault(m => m.ORDER_ID == log.ORDER_ID && m.DELIVER_TYPE == (int)DELIVER_TYPE_ENUM.邮寄交付 && string.IsNullOrEmpty(m.FILE_PATH)); if (old != null) { old.FILE_PATH = log.FILE_PATH; old.FILE_NAME = log.FILE_NAME; } else { db.WX_SZZYORDER_DELIVER_LOG.Add(log); } } else { //上传快递单号 var old = db.WX_SZZYORDER_DELIVER_LOG.FirstOrDefault(m => m.ORDER_ID == log.ORDER_ID && m.DELIVER_TYPE == (int)DELIVER_TYPE_ENUM.邮寄交付 && string.IsNullOrEmpty(m.MAIL_NUMBER)); if (old != null) { old.MAIL_NUMBER = log.MAIL_NUMBER; old.MAIL_TYPE = log.MAIL_TYPE; } else { db.WX_SZZYORDER_DELIVER_LOG.Add(log); } } } else { db.WX_SZZYORDER_DELIVER_LOG.Add(log); } return db.SaveChanges().GetResult(); } } catch (Exception ex) { LogHelper.Error(ex); return false; } } /// /// 列表查询 /// /// /// /// /// public List GetList(ref Pager pager, DeliverOrderListDto querydto, QueryUserComboDto usercomboDto) { List reslut = new List(); try { using (var db = new crmContext()) { // var queryData = db.WX_SZZYORDER.AsQueryable(); //只展示 当期交付 // queryData = (from a in queryData // join b in db.WX_SZZYSUBPRODUCT on a.SUBPRODUCTID equals b.SUBPRODUCTID // where b.DELIVER_TYPE == 0 //当期交付 // select a); var queryData = (from M in db.WX_SZZYORDER.AsQueryable() join d in db.RES_CUSTOMER on M.RESID equals d.RESID join b in db.WX_SZZYSUBPRODUCT on M.SUBPRODUCTID equals b.SUBPRODUCTID where b.DELIVER_TYPE == 0 //当期交付 select new WX_SZZYORDERDTO { ORDERID = M.ORDERID, EMPLOYEEID = M.EMPLOYEEID, PASSWORD = M.PASSWORD, USERID = M.USERID, PRODUCTID = M.PRODUCTID, PRODUCTNAME = M.PRODUCTNAME, SUBPRODUCTID = M.SUBPRODUCTID, SUBPRODUCTNAME = M.SUBPRODUCTNAME, ORDERTYPE = M.ORDERTYPE, UPGRADEORDERIDS = M.UPGRADEORDERIDS, TOTALUPGRADEVALUE = M.TOTALUPGRADEVALUE, NEEDPAY = M.NEEDPAY, OPENORDER = M.OPENORDER, SZZYORDERID = M.SZZYORDERID, ORDERSTATUS = M.ORDERSTATUS, CTIME = M.CTIME, RETURNNEEDPAY = M.RETURNNEEDPAY, CONTRACTCODE = M.CONTRACTCODE, RET = M.RET, RETP = M.RETP, MSG = M.MSG, RETURNDETAIL = M.RETURNDETAIL, INNERUSERID = M.INNERUSERID, OTIME = M.OTIME, ENDTIME = M.ENDTIME, RESID = d.UMID, REQUESTSTATUS = M.REQUESTSTATUS, ISFINANCEPAY = M.ISFINANCEPAY, FINACEPAYDATE = M.FINACEPAYDATE, REMARK = M.REMARK, FINALPAY = M.FINALPAY, ORDERSTATUSNAME = M.ORDERSTATUSNAME, OPERATETIME = M.OPERATETIME, STIME = M.STIME, ETIME = M.ETIME, SUSPENDCOMMENT = M.SUSPENDCOMMENT, UPDATEORDERTIME = M.UPDATEORDERTIME, ISOPEN = M.ISOPEN, TEAMSERVE = M.TEAMSERVE, FCTEXT = M.FCTEXT, CUSTOMERUSERNAME = M.CUSTOMERUSERNAME, ARRIVALPAY = M.ARRIVALPAY, ARRIVALTIME = M.ARRIVALTIME, SOURCE = M.SOURCE, CNAME = M.CNAME, OPENDAYS = M.OPENDAYS, CUSTOMERCLASSIFY = M.CUSTOMERCLASSIFY, SALEDEPTID = M.SALEDEPTID, RISKCTRLSTATUS = M.RISKCTRLSTATUS, ACTIVEPRODUCTCODE = M.ACTIVEPRODUCTCODE, ACTIVEPRODUCTEXT = M.ACTIVEPRODUCTEXT, ISTEST = M.ISTEST, HASHGRECORD = M.HASHGRECORD, OUTORDERO = M.OUTORDERO, GIFTDAYS = M.GIFTDAYS, GIFTDAYS2 = M.GIFTDAYS2, REJECTREMARK = M.REJECTREMARK, EXTERNAL_USERID = M.EXTERNAL_USERID, WEWORK_REMOTEID = M.WEWORK_REMOTEID, FUJIAN = M.FUJIAN, DEPTCODE = M.DEPTCODE, ESTIMATEOTIME = M.ESTIMATEOTIME, EID = M.EID, } ); if (usercomboDto.userId.HasValue) { queryData = queryData.Where(m => m.INNERUSERID == usercomboDto.userId.Value); } else if (!string.IsNullOrEmpty(usercomboDto.groupIds)) { var _groupids = OperationUtil.ConvertToDecimal(usercomboDto.groupIds.Split(',')); queryData = (from a in queryData join b in db.BAS_INNERUSERGROUP on a.INNERUSERID equals b.INNERUSERID where _groupids.Contains(b.GID.Value) select a); } else if (!string.IsNullOrEmpty(usercomboDto.deptId)) { //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 depts.Contains(g.SALEDEPTID.Value) // select a); var depts = OperationUtil.ConvertToDecimal(usercomboDto.deptId.Split(',')); List ALLdeptIDS = new List(); List ALLgidS = new List(); UserServices userservices = new UserServices(cache_BL); foreach (var item in depts) { List deptIDS = new List(); List gidS = new List(); 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 where ALLdeptIDS.Contains(b.DEPTID.Value) || ALLgidS.Contains(b.GID.Value) select a); } else if (usercomboDto.companyId.HasValue) { 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 join m in db.BAS_SALESDEPARTMENT on g.SALEDEPTID equals m.SALEDEPTID where m.COMPANYID == usercomboDto.companyId.Value select a); } //客户id if (!string.IsNullOrWhiteSpace(querydto.resId)) { querydto.resId = querydto.resId.Trim(); queryData = queryData.Where(m => m.RESID == querydto.resId); } //客户姓名 if (!string.IsNullOrEmpty(querydto.cName)) { queryData = queryData.Where(m => m.CNAME.Contains(querydto.cName)); } //订单id if (querydto.szzyOrderId.HasValue) { queryData = queryData.Where(m => m.ORDERID == querydto.szzyOrderId.Value); } //订单状态 if (!string.IsNullOrWhiteSpace(querydto.orderStatus)) { var orderStatusArr = querydto.orderStatus.Split(','); queryData = queryData.Where(m => orderStatusArr.Contains(m.ORDERSTATUS)); } //订单开通时间 if (!string.IsNullOrWhiteSpace(querydto.ostime)) { DateTime time = Convert.ToDateTime(querydto.ostime); queryData = queryData.Where(m => m.OTIME >= time); } //订单开通时间 if (!string.IsNullOrWhiteSpace(querydto.oetime)) { DateTime time = Convert.ToDateTime(querydto.oetime).AddDays(1).AddSeconds(-1); queryData = queryData.Where(m => m.OTIME <= time); } //交付方式 if (querydto.orderDeliverType.HasValue) { if (querydto.orderDeliverType == -1) { //无记录 为未选择交付 queryData = (from a in queryData join b in db.WX_SZZYORDER_DELIVER_METHOD on a.ORDERID equals b.ORDER_ID into temp from t in temp.DefaultIfEmpty() where t == null select a); } else { queryData = (from a in queryData join b in db.WX_SZZYORDER_DELIVER_METHOD on a.ORDERID equals b.ORDER_ID where b.DELIVER_TYPE == querydto.orderDeliverType.Value select a); } } //交付状态 // 0未选择交付 1已在线交付 2已邮寄交付 3已在线且邮寄交付 if (querydto.orderDeliverStatus.HasValue) { if (querydto.orderDeliverStatus.Value == 0) { //无记录 为未选择交付 queryData = (from a in queryData join b in db.WX_SZZYORDER_DELIVER_METHOD on a.ORDERID equals b.ORDER_ID into temp from t in temp.DefaultIfEmpty() where t == null || t.DELIVER_STATUS == querydto.orderDeliverStatus.Value select a); } else { queryData = (from a in queryData join b in db.WX_SZZYORDER_DELIVER_METHOD on a.ORDERID equals b.ORDER_ID where b.DELIVER_STATUS == querydto.orderDeliverStatus.Value select a); } //if (querydto.orderDeliverStatus == 1) {//待交付 // queryData = (from a in queryData // join b in db.WX_SZZYORDER_DELIVER_METHOD on a.ORDERID equals b.ORDER_ID // where b.DELIVER_STATUS == (int)DELIVER_STATUS_ENUM.未交付 // select a); //} //else { // queryData = (from a in queryData // join b in db.WX_SZZYORDER_DELIVER_METHOD on a.ORDERID equals b.ORDER_ID // where b.DELIVER_STATUS == (int)DELIVER_STATUS_ENUM.已在线交付 // || b.DELIVER_STATUS == (int)DELIVER_STATUS_ENUM.已邮寄交付 // || b.DELIVER_STATUS == (int)DELIVER_STATUS_ENUM.已在线且邮寄交付//暂时不存在并列情况 // select a); //} } //收件人名称 if (!string.IsNullOrEmpty(querydto.mailName)) { queryData = (from a in queryData join b in db.WX_SZZYORDER_DELIVER_METHOD on a.ORDERID equals b.ORDER_ID where b.DELIVER_TYPE == (int)DELIVER_TYPE_ENUM.邮寄交付 && b.MAIL_NAME.Contains(querydto.mailName.Trim()) select a); } //收货地址 if (!string.IsNullOrEmpty(querydto.addressInfo)) { queryData = (from a in queryData join b in db.WX_SZZYORDER_DELIVER_METHOD on a.ORDERID equals b.ORDER_ID where b.DELIVER_TYPE == (int)DELIVER_TYPE_ENUM.邮寄交付 && (b.PROVINCE.Contains(querydto.addressInfo.Trim()) || b.CITY.Contains(querydto.addressInfo.Trim()) || b.AREA.Contains(querydto.addressInfo.Trim()) || b.ADDRESS.Contains(querydto.addressInfo.Trim())) select a); } //快递单号 if (!string.IsNullOrEmpty(querydto.mailNumber)) { queryData = (from a in queryData join b in db.WX_SZZYORDER_DELIVER_METHOD on a.ORDERID equals b.ORDER_ID join c in db.WX_SZZYORDER_DELIVER_LOG on a.ORDERID equals c.ORDER_ID into temp from t in temp.DefaultIfEmpty() where b.DELIVER_TYPE == (int)DELIVER_TYPE_ENUM.邮寄交付 && t!=null && t.MAIL_NUMBER.Contains(querydto.mailNumber.Trim()) // && t.OrderByDescending(m => m.CTIME).FirstOrDefault(m => !string.IsNullOrEmpty(m.MAIL_NUMBER)).MAIL_NUMBER.Contains(querydto.mailNumber.Trim()) select a); } //交付开始时间 if (querydto.dstime.HasValue) { queryData = (from a in queryData join b in db.WX_SZZYORDER_DELIVER_METHOD on a.ORDERID equals b.ORDER_ID where b.DELIVER_TIME >= querydto.dstime.Value select a); } //交付结束时间 if (querydto.detime.HasValue) { queryData = (from a in queryData join b in db.WX_SZZYORDER_DELIVER_METHOD on a.ORDERID equals b.ORDER_ID where b.DELIVER_TIME <= querydto.detime.Value.AddDays(1).AddSeconds(-1) select a); } queryData = queryData.OrderByDescending(m => m.CTIME); #region 分页与合并 //分页 PagerUtil.SetPager(ref queryData, ref pager); //组合结果 foreach (var item in queryData.ToList()) { DeliverOrderView r = new DeliverOrderView(); r.RESID = item.RESID; r.DEPTCODE = item.DEPTCODE; r.CNAME = item.CNAME; r.INNERUSERID = item.INNERUSERID.ToString(); r.SUBPRODUCTNAME = item.SUBPRODUCTNAME; r.ORDERID = item.ORDERID; r.ORDERSTATUS = item.ORDERSTATUS; r.ORDERSTATUSNAME = item.ORDERSTATUSNAME; r.OPENDAYS = item.OPENDAYS; r.OTIME = item.OTIME?.ToString("yyyy-MM-dd HH:mm:ss"); r.DELIVERSTATUS = "未选择交付"; r.DELIVERTYPE = "未选择交付"; r.MAILNAME = "--"; r.ADDRESSINFO = "--"; r.MAILPHONE = "--"; r.MAILNUMBER = "--"; r.MAILFIlE = "--"; r.MAILTYPE = "--";//快递公司 r.MAILRESID = ""; var deliver = db.WX_SZZYORDER_DELIVER_METHOD.FirstOrDefault(m => m.ORDER_ID == item.ORDERID); if (deliver != null) { r.DELIVERSTATUS = ((DELIVER_STATUS_ENUM)deliver.DELIVER_STATUS).ToString(); r.DELIVERTYPE = ((DELIVER_TYPE_ENUM)deliver.DELIVER_TYPE).ToString(); r.DTIME=deliver.DELIVER_TIME?.ToString("yyyy-MM-dd HH:mm:ss"); if (deliver.DELIVER_TYPE == (int)DELIVER_TYPE_ENUM.邮寄交付) { r.MAILNAME = deliver.MAIL_NAME; r.ADDRESSINFO = string.Format("{0} {1} {2} {3}", deliver.PROVINCE, deliver.CITY, deliver.AREA, deliver.ADDRESS); r.MAILPHONE = deliver.MAIL_PHONE; r.MAILRESID = deliver.MAIL_RESID; if (deliver.DELIVER_STATUS == (int)DELIVER_STATUS_ENUM.已在线且邮寄交付 || deliver.DELIVER_STATUS == (int)DELIVER_STATUS_ENUM.已邮寄交付) { var log = db.WX_SZZYORDER_DELIVER_LOG.Where(m => m.ORDER_ID == item.ORDERID && m.DELIVER_TYPE == (int)DELIVER_TYPE_ENUM.邮寄交付).OrderByDescending(m => m.CTIME).ToList(); var numberLog = log.FirstOrDefault(m => !string.IsNullOrEmpty(m.MAIL_NUMBER));//最新一条邮寄单号 var fileLog = log.FirstOrDefault(m => !string.IsNullOrEmpty(m.FILE_PATH));//最新一条邮寄回执 if (numberLog != null) { //找到了交付日志 r.MAILNUMBER = numberLog.MAIL_NUMBER; r.MAILTYPE= numberLog.MAIL_TYPE==null? "" : ((MAIL_TYPE_ENUM)Convert.ToInt32(numberLog.MAIL_TYPE)).ToString(); } if (fileLog!=null) { r.MAILFIlE = "查看"; } } } } reslut.Add(r); } #endregion } } catch (Exception ex) { LogHelper.Error(ex); } return reslut; } /// /// 获取产品 交付连接 /// /// /// public string GetOrderDeliverLink(decimal? ORDERID) { try { using (var db = new crmContext()) { var link = (from a in db.WX_SZZYORDER join b in db.WX_SZZYSUBPRODUCT on a.SUBPRODUCTID equals b.SUBPRODUCTID where a.ORDERID == ORDERID select b.DELIVER_URL).FirstOrDefault(); return link; } } catch (Exception ex) { LogHelper.Error(ex); return ""; } } /// /// 获取产品 交付连接 /// /// /// public WX_SZZYORDER_DELIVER_METHOD GetDeliverInfo(decimal? ORDERID) { try { using (var db = new crmContext()) { var info = (from a in db.WX_SZZYORDER join b in db.WX_SZZYORDER_DELIVER_METHOD on a.ORDERID equals b.ORDER_ID where a.ORDERID == ORDERID && b.DELIVER_TYPE==(int)DELIVER_TYPE_ENUM.邮寄交付 select b).FirstOrDefault(); return info; } } catch (Exception ex) { LogHelper.Error(ex); return null; } } /// /// 获取手机号 /// /// /// public string GetPhone(decimal? ORDERID) { try { using (var db = new crmContext()) { var method = db.WX_SZZYORDER_DELIVER_METHOD.FirstOrDefault(m=>m.ORDER_ID== ORDERID); return method.MAIL_RESID; } } catch (Exception ex) { LogHelper.Error(ex); return ""; } } public WX_SZZYORDER_DELIVER_METHOD GetOrderDeliver(decimal? ORDERID) { try { using (var db = new crmContext()) { return db.WX_SZZYORDER_DELIVER_METHOD.FirstOrDefault(m => m.ORDER_ID == ORDERID); } } catch (Exception ex) { LogHelper.Error(ex); return null; } } public List GetOrderDeliverLog(decimal? ORDERID) { try { using (var db = new crmContext()) { return db.WX_SZZYORDER_DELIVER_LOG.Where(m => m.ORDER_ID == ORDERID).ToList(); } } catch (Exception ex) { LogHelper.Error(ex); return null; } } public List GetEIds(string txt_deptId, string txt_userId) { using (var db = new crmContext()) { var query = db.BAS_INNERUSER.AsQueryable(); if (!string.IsNullOrEmpty(txt_userId)) { query.Where(w => w.PKID.ToString() == txt_userId); } return query.Select(o => o.EID.ToString()).ToList(); } } public List GetInfoByEid(params int[] EIds) { using (var db = new crmContext()) { var query = db.BAS_INNERUSER.AsQueryable(); if (EIds!=null && EIds.Any()) { var items = EIds.Select(o => Convert.ToDecimal(o)).ToList(); query.Where(w=> items.Contains(w.EID)); } return query.ToList().Select(o => new BindListDto { EId = Convert.ToInt32(o.EID), EName = o.UNAME }).ToList(); } } } public class DeliverOrderView { public string RESID { get; set; } public string DEPTCODE { get; set; } public string CNAME { get; set; } public string GNAME { get; set; } public string INNERUSERID { get; set; } public string SUBPRODUCTNAME { get; set; } public decimal ORDERID { get; set; } public string ORDERSTATUS { get; set; } public string ORDERSTATUSNAME { get; set; } public decimal? OPENDAYS { get; set; } public string DELIVERTYPE { get; set; } public string DELIVERSTATUS { get; set; } public string MAILNAME { get; set; } public string ADDRESSINFO { get; set; } public string MAILPHONE { get; set; } public string MAILRESID { get; set; } public string MAILTYPE { get; set; } public string MAILNUMBER { get; set; } public string MAILFIlE { get; set; } public string OTIME { get; set; } public string DTIME { get; set; } } public class DeliverOrderListDto { public string resId { get; set; } public string cName { get; set; } public decimal? szzyOrderId { get; set; } public string orderStatus { get; set; } public int? orderDeliverStatus { get; set; } public int? orderDeliverType { get; set; } public string mailName { get; set; } public string addressInfo { get; set; } public string mailNumber { get; set; } public string ostime { get; set; } public string oetime { get; set; } public string showPhone { get; set; } public DateTime? dstime { get; set; } public DateTime? detime { get; set; } } }