using CRM.Core.DTO; using CRM.Core.DTO.Ord; using Newtonsoft.Json; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Web; using WX.CRM.BLL.Application.UserComBox; using WX.CRM.BLL.Util; using WX.CRM.Common; using WX.CRM.Common.Employee; using WX.CRM.Common.Layui; using WX.CRM.IBLL.Wx; using WX.CRM.Model.Entity; using WX.CRM.Model.Enum; using WX.CRM.Model.MAP; namespace WX.CRM.BLL.Wx { public class WX_SZZYORDER_HANDGIFT_BL : IWX_SZZYORDER_HANDGIFT { private CACHE_BL cache_BL = new CACHE_BL(); public SecurityHelper sHelper = new SecurityHelper(); public List GetHandGifList(ref Laypage pager, Wx_SzzyOrder_HandGift_Query param, QueryUserComboDto usercomboDto) { using (WX.CRM.Model.Entity.crmContext db = new WX.CRM.Model.Entity.crmContext()) { IQueryable queryData = db.WX_SZZYORDER_HANDGIFT.AsQueryable(); if (param.ORDERSTATUS.HasValue) { queryData = queryData.Where(m => m.ORDERSTATUS == param.ORDERSTATUS.Value); } if (param.ORDERID.HasValue) { queryData = queryData.Where(m => m.ORDERID == param.ORDERID.Value); } if (param.MAINORDERID.HasValue) { queryData = queryData.Where(m => m.MAINORDERID == param.MAINORDERID.Value); } if (!string.IsNullOrEmpty(param.RESID)) { param.RESID = param.RESID.Trim(); queryData = queryData.Where(m => m.RESID == param.RESID); } if (!string.IsNullOrEmpty(param.SOFTUSERNAME)) { queryData = queryData.Where(m => m.SOFTUSERNAME == param.SOFTUSERNAME); } if (param.STIME.HasValue) { queryData = queryData.Where(m => m.CTIME >= param.STIME.Value); } if (param.ETIME.HasValue) { param.ETIME = param.ETIME.Value.AddDays(1); queryData = queryData.Where(m => m.CTIME < param.ETIME.Value); } if (param.CONTRACTSTATUS.HasValue) { queryData = queryData.Where(m => m.CONTRACTSTATUS == param.CONTRACTSTATUS); } var data = from a in queryData join b in db.WX_SZZYORDER on a.MAINORDERID equals b.ORDERID into t1 from b in t1.DefaultIfEmpty() join c in db.WX_ORDEREXT on a.MAINORDERID equals c.ORDERID into t2 from c in t2.DefaultIfEmpty() join d in db.BAS_INNERUSER on b.INNERUSERID equals d.PKID into t3 from d in t3.DefaultIfEmpty() select new Wx_SzzyOrder_HandGift_Map() { ORDERID = a.ORDERID, CHANNEL = c.CHANNEL, HandGiftChannel = a.CHANNEL, CHECKMEMO = a.CHECKMEMO, COMPANYCODE = a.COMPANYCODE, CREATEUSER = a.CREATEUSER, CTIME = a.CTIME, GIFTDAYS = a.GIFTDAYS, MAINORDERID = a.MAINORDERID, MAINPDAYS = b.OPENDAYS, MAINPGIF = b.GIFTDAYS, MAINPRODUCTNAME = b.SUBPRODUCTNAME, MEMO = a.MEMO, OLDOUTORDERNO = a.OLDOUTORDERNO, OPENUSER = a.OPENUSER, ORDERSTATUS = a.ORDERSTATUS, OPTIME = a.OPTIME, OTIME = a.OTIME, OUTORDERCLOSETIME = a.OUTORDERCLOSETIME, OUTORDERNO = a.OUTORDERNO, PRODUCTCODE = a.PRODUCTCODE, PRODUCTID = a.PRODUCTID, RESID = a.RESID, SOFTUSERNAME = a.SOFTUSERNAME, SUBPRODUCTCODE = a.SUBPRODUCTCODE, SUBPRODUCTNAME = a.SUBPRODUCTNAME, SZZYORDERID = a.SZZYORDERID, USERID = a.USERID, CLOSEMEMO = a.CLOSEMEMO, CLOSETIME = a.CLOSETIME, CLOSEUSER = a.CLOSEUSER, DEPTCODE = b.DEPTCODE, CONTRACTCTIME = a.CONTRACTCTIME, CONTRACTSTATUS = a.CONTRACTSTATUS, CONTRACTCODE = a.CONTRACTCODE, CREATEEID = a.CREATEEID, OrderEid = d.EID }; if (usercomboDto.txt_eid.HasValue) { data = data.Where(m => m.CREATEEID == usercomboDto.txt_eid.Value || m.OrderEid == usercomboDto.txt_eid.Value); } else if (!string.IsNullOrEmpty(usercomboDto.txt_groupIds)) { var _groupids = OperationUtil.ConvertToDecimal(usercomboDto.txt_groupIds.Split(',')); data = (from a in data join c in db.BAS_INNERUSER on a.CREATEEID equals c.EID join b in db.BAS_INNERUSERGROUP on c.PKID equals b.INNERUSERID where _groupids.Contains(b.GID.Value) select a); } else if (!string.IsNullOrEmpty(usercomboDto.txt_deptId)) { var depts = OperationUtil.ConvertToDecimal(usercomboDto.txt_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); } var deptcodes = (from a in db.BAS_BUSINESSDEPARTMENT join b in db.BAS_SALESDEPARTMENT on a.DEPTID equals b.SALEDEPTID where ALLdeptIDS.Contains(a.DEPTID) select b.SALEDEPTCODE).ToArray(); data = (from a in data join c in db.BAS_INNERUSER on a.CREATEEID equals c.EID join x in db.BAS_INNERUSERGROUP on c.PKID equals x.INNERUSERID into tempB from b in tempB.DefaultIfEmpty() //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.txt_companyId.HasValue) { data = (from a in data join c in db.BAS_INNERUSER on a.CREATEEID equals c.EID join b in db.BAS_INNERUSERGROUP on c.PKID 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.txt_companyId.Value select a); } data = data.OrderByDescending(m => m.CTIME); PagerUtil.SetPager(ref data, ref pager);//分页 var res = data.ToList(); //查询事业部 var deptNameList = cache_BL.GetDeptNameMapList(); var channelList = res.Where(n => !string.IsNullOrWhiteSpace(n.CHANNEL)).Select(n => Convert.ToInt32(n.CHANNEL)).ToList(); var giftChannel = res.Where(n => n.HandGiftChannel > 0).Select(n => Convert.ToInt32(n.HandGiftChannel)).ToList(); channelList.AddRange(giftChannel); var dicMap = cache_BL.ConvertChannelName(deptNameList, channelList); var creatorList = res.Where(m => !string.IsNullOrEmpty(m.CREATEUSER)).Select(n => n.CREATEUSER).Distinct().ToList(); List eidList = new List(); foreach (var creator in creatorList) { decimal eid = -1; if (decimal.TryParse(creator.Split('-').FirstOrDefault(), out eid)) { eidList.Add(eid); } } var deptEidMap = cache_BL.GetUserDeptNameByEid(eidList); foreach (var item in res) { var num = 0; if (Int32.TryParse(item.CHANNEL, out num)) { item.DEPTCODE = dicMap.ContainsKey(num) ? dicMap[num] : "未知"; } if (string.IsNullOrWhiteSpace(item.CHANNEL) && item.HandGiftChannel > 0) { num = Convert.ToInt32(item.HandGiftChannel); item.DEPTCODE = dicMap.ContainsKey(num) ? dicMap[num] : "未知"; } var eid = item.CREATEUSER.Split('-').FirstOrDefault(); if (string.IsNullOrEmpty(eid) && item.CREATEEID.HasValue) { eid = item.CREATEEID.ToString(); } if (!string.IsNullOrWhiteSpace(eid)) { var mapModel = deptEidMap.FirstOrDefault(n => n.Eid.ToString() == eid); item.RequestDeptName = mapModel?.DeptName; } } return res; } } public WX_SZZYORDER_HANDGIFT GetHandleGifById(decimal orderid) { using (WX.CRM.Model.Entity.crmContext db = new WX.CRM.Model.Entity.crmContext()) { return db.WX_SZZYORDER_HANDGIFT.FirstOrDefault(n => n.ORDERID == orderid); } } public int GetAuditCount(decimal orderid) { var auditCount = 0; using (WX.CRM.Model.Entity.crmContext db = new WX.CRM.Model.Entity.crmContext()) { var order = db.WX_SZZYORDER_HANDGIFT.FirstOrDefault(n => n.ORDERID == orderid); List eidList = new List(); decimal eid = -1; if (decimal.TryParse(order.CREATEUSER.Split('-').FirstOrDefault(), out eid)) { eidList.Add(eid); } var deptEidMap = cache_BL.GetUserDeptNameByEid(eidList); int? saleDeptId = -1; if (deptEidMap.Count > 0) { saleDeptId = deptEidMap.FirstOrDefault().SaleDeptId == null ? -1 : deptEidMap.FirstOrDefault().SaleDeptId; } if (saleDeptId == -1) { int curChannel = 0; var channelSetting = Utility.GetSettingOrNullByKey("Channel"); if (!string.IsNullOrWhiteSpace(channelSetting)) { curChannel = Convert.ToInt32(channelSetting); } var defaultDept = cache_BL.ConvertChannelName(new List { curChannel }); if (defaultDept.FirstOrDefault() != null && defaultDept.FirstOrDefault().id > 0) { saleDeptId = Convert.ToInt32(defaultDept.FirstOrDefault().id); } } var nowMonthDate = DateTime.Now.AddDays(1 - DateTime.Now.Day).Date; var nowMonthList = db.WX_SZZYORDER_HANDGIFT.Where(n => n.AUDITTYPE == 1 && n.ORDERSTATUS == 1 && n.OPTIME > nowMonthDate && n.SALEDEPTID == saleDeptId).ToList(); auditCount = nowMonthList.Count(); } return auditCount; } public OrderHandGiftDto GetSuProductIdByOrderId(long orderId, ref ValidationErrors errors) { OrderHandGiftDto dto = new OrderHandGiftDto() { orderid = orderId, companycode = Utility.GetSettingOrNullByKey("DataClientCode") }; var sHelper = new SecurityHelper(); var url = new CACHE_BL().GetValue_Parameter(Parameter.Core_ZxdService_GetSuProductIdByOrderId); var json = sHelper.createSignEncodingStr(dto.ToJson(), SecurityHelper.OrderClientIdKey); //url = "http://localhost:55047//OrderService.svc/Order/GetSuProductIdByOrderId"; string retmsg = Utility.PostData(url + "?" + json, Encoding.UTF8); //retmsg = sHelper.decyptData(SecurityHelper.OrderClientIdKey, retmsg); var retmessage = Newtonsoft.Json.JsonConvert.DeserializeObject>(retmsg); if (retmessage.result) { dto = retmessage.data; } else { errors.Add(retmessage.retmsg); } return dto; } public bool Save(WX_SZZYORDER_HANDGIFT model, ref ValidationErrors errors) { bool result = false; #region 指定渠道 decimal curChannel = 0; var channelSetting = Utility.GetSettingOrNullByKey("Channel"); if (!string.IsNullOrWhiteSpace(channelSetting)) { curChannel = Convert.ToInt32(channelSetting); } #endregion 指定渠道 try { using (WX.CRM.Model.Entity.crmContext db = new WX.CRM.Model.Entity.crmContext()) { //var orderext = db.WX_ORDEREXT.FirstOrDefault(m => m.ORDERID == model.MAINORDERID); //if (orderext == null) //{ // errors.Add("订单信息错误!"); // return false; //} //var mainorder = db.WX_SZZYORDER.FirstOrDefault(m => m.ORDERID == model.MAINORDERID); //if (mainorder == null) //{ // errors.Add("订单信息错误!"); // return false; //} //model.PRODUCTID = mainorder.SUBPRODUCTID; //var product = db.WX_SZZYSUBPRODUCT.FirstOrDefault(m => m.SUBPRODUCTID == model.PRODUCTID); //if (product.ISGIFT != 1) //{ // errors.Add("此订单产品未开启赠送!"); // return false; //} //model.PRODUCTCODE = product.PRODUCTCODE; //model.SOFTUSERNAME = orderext.SOFTUSERNAME; //model.ORDERSTATUS = 0; //model.RESID = mainorder.RESID; //model.ORDERID = new SEQUENCES_BL().Seq_base_get(); model.CTIME = DateTime.Now; var model2 = GetSuProductIdByOrderId(long.Parse(model.MAINORDERID.ToString()), ref errors); model.PRODUCTID = model2.subproductid; model.PRODUCTCODE = model2.productcode; #region 调用中心点接口 //调用中心点赠送订单申请接口 //dto.companycode = companyCode; OrderHandGiftDto dto = new OrderHandGiftDto() { channel = Convert.ToInt32(model.CHANNEL), checkmemo = model.CHECKMEMO, companycode = Utility.GetSettingOrNullByKey("DataClientCode"), createuser = model.CREATEUSER, ctime = model.CTIME, giftdays = Convert.ToInt32(model.GIFTDAYS), mainorderid = Convert.ToInt64(model.MAINORDERID), memo = model.MEMO, orderid = Convert.ToInt64(model.ORDERID), orderstatus = Convert.ToInt32(model.ORDERSTATUS), productcode = model.PRODUCTCODE, productid = Convert.ToInt32(model.PRODUCTID), resid = model.RESID, softusername = model.SOFTUSERNAME, subproductcode = model.SUBPRODUCTCODE, subproductname = model.SUBPRODUCTNAME, requireChannel = Convert.ToInt32(curChannel) }; var sHelper = new SecurityHelper(); var url = new CACHE_BL().GetValue_Parameter(Parameter.Core_ZxdService_OrderHandleGift); var json = sHelper.createSignEncodingStr(dto.ToJson(), SecurityHelper.OrderClientIdKey); string retmsg = Utility.PostData(url + "?" + json, Encoding.UTF8); //retmsg = sHelper.decyptData(SecurityHelper.OrderClientIdKey, retmsg); var retmessage = Newtonsoft.Json.JsonConvert.DeserializeObject>(retmsg); if (retmessage.result) { model.ORDERID = retmessage.data.orderid; model.SUBPRODUCTNAME = retmessage.data.subproductname; model.SUBPRODUCTCODE = retmessage.data.subproductcode; model.PRODUCTTYPE = retmessage.data.producttype;//0-单一产品、1-组合产品 model.SZZYORDERID = retmessage.data.szzyorderid; //赠送订单的自动审核功能根据配置启用/禁用 var autoAuditGiftStr = cache_BL.GetValue_Parameter(Parameter.Auto_AuditGift); if (!string.IsNullOrWhiteSpace(autoAuditGiftStr)) { var autoAuditGift = Newtonsoft.Json.JsonConvert.DeserializeObject(autoAuditGiftStr); if (autoAuditGift.IsAutoAudit) { model.ORDERSTATUS = retmessage.data.orderstatus; model.OPTIME = retmessage.data.otime.HasValue ? retmessage.data.otime.Value.AddHours(8) : DateTime.Now; model.CHECKMEMO = retmessage.data.checkmemo; model.OPENUSER = retmessage.data.openuser; } } model.SZZYORDERID = retmessage.data.szzyorderid; model.SALEDEPTID = retmessage.data.saleDeptId; db.WX_SZZYORDER_HANDGIFT.Add(model); db.SaveChanges(); result = true; } else { errors.Add(retmessage.retmsg); result = false; } #endregion 调用中心点接口 } } catch (Exception ex) { errors.Add(ex.Message); } return result; } public bool CheckSave(WX_SZZYORDER_HANDGIFT editmodel, ref ValidationErrors errors) { bool result = false; try { using (WX.CRM.Model.Entity.crmContext db = new WX.CRM.Model.Entity.crmContext()) { var model = db.WX_SZZYORDER_HANDGIFT.FirstOrDefault(n => n.ORDERID == editmodel.ORDERID); var model2 = GetSuProductIdByOrderId(long.Parse(model.MAINORDERID.ToString()), ref errors); model.PRODUCTID = model2.subproductid; model.PRODUCTCODE = model2.productcode; #region 调用中心点接口 //调用中心点赠送订单申请接口 //dto.companycode = companyCode; AuditHandGiftDto dto = new AuditHandGiftDto() { orderstatus = Convert.ToInt32(editmodel.ORDERSTATUS), OrderId = editmodel.ORDERID, Memo = editmodel.MEMO, OpenUser = editmodel.OPENUSER }; var sHelper = new SecurityHelper(); var url = new CACHE_BL().GetValue_Parameter(Parameter.Core_ZxdService_AuditOrderGift); var json = sHelper.createSignEncodingStr(dto.ToJson(), SecurityHelper.OrderClientIdKey); //url = "http://localhost:55047/OrderService.svc/OrderHandleGift/Audit"; string retmsg = Utility.PostData(url + "?" + json, Encoding.UTF8); //retmsg = sHelper.decyptData(SecurityHelper.OrderClientIdKey, retmsg); var retmessage = Newtonsoft.Json.JsonConvert.DeserializeObject>(retmsg); if (retmessage.result) { model.CHECKMEMO = retmessage.data.CHECKMEMO; model.OPENUSER = retmessage.data.OPENUSER; model.OPTIME = retmessage.data.OPTIME.HasValue ? retmessage.data.OPTIME.Value.AddHours(8) : DateTime.Now; model.ORDERSTATUS = retmessage.data.ORDERSTATUS;//0-单一产品、1-组合产品 if (model.ORDERSTATUS == 1) { model.AUDITTYPE = 1; } db.SaveChanges(); result = true; } else { errors.Add(retmessage.retmsg); result = false; } #endregion 调用中心点接口 } } catch (Exception ex) { errors.Add(ex.Message); } return result; } public bool UpdateCheckStatus(WX_SZZYORDER_HANDGIFT model, ref ValidationErrors errors) { bool result = false; try { using (WX.CRM.Model.Entity.crmContext db = new WX.CRM.Model.Entity.crmContext()) { var entry = db.WX_SZZYORDER_HANDGIFT.FirstOrDefault(m => m.ORDERID == model.ORDERID); if (entry == null) { LogHelper.Info("WX_SZZYORDER_HANDGIFT找不到订单号,补数据:" + model.ORDERID); db.WX_SZZYORDER_HANDGIFT.Add(model); db.SaveChanges(); return true; } entry.ORDERSTATUS = model.ORDERSTATUS; entry.OPENUSER = model.OPENUSER; entry.OPTIME = model.OPTIME; entry.SZZYORDERID = model.SZZYORDERID; entry.CHECKMEMO = model.CHECKMEMO; entry.CLOSEMEMO = model.CLOSEMEMO; entry.CLOSEUSER = model.CLOSEUSER; entry.CLOSETIME = model.CLOSETIME; entry.CONTRACTSTATUS = model.CONTRACTSTATUS; entry.CONTRACTCODE = model.CONTRACTCODE; entry.CONTRACTCTIME = model.CONTRACTCTIME; entry.ISFORCE = model.ISFORCE; db.SaveChanges(); result = true; } } catch (Exception ex) { errors.Add(ex.Message); } return result; } public bool AddHandGift(WX_SZZYORDER_HANDGIFT model, ref ValidationErrors errors) { bool result = false; try { using (WX.CRM.Model.Entity.crmContext db = new WX.CRM.Model.Entity.crmContext()) { var entry = db.WX_SZZYORDER_HANDGIFT.FirstOrDefault(m => m.ORDERID == model.ORDERID); if (entry == null) { LogHelper.Info("WX_SZZYORDER_HANDGIFT找不到订单号,补数据:" + model.ORDERID); db.WX_SZZYORDER_HANDGIFT.Add(model); db.SaveChanges(); return true; } entry.ORDERSTATUS = model.ORDERSTATUS; entry.OPENUSER = model.OPENUSER; entry.OPTIME = model.OPTIME; entry.SZZYORDERID = model.SZZYORDERID; entry.CHECKMEMO = model.CHECKMEMO; entry.CLOSEMEMO = model.CLOSEMEMO; entry.CLOSEUSER = model.CLOSEUSER; entry.CLOSETIME = model.CLOSETIME; entry.CONTRACTSTATUS = model.CONTRACTSTATUS; entry.CONTRACTCODE = model.CONTRACTCODE; entry.CONTRACTCTIME = model.CONTRACTCTIME; db.SaveChanges(); result = true; } } catch (Exception ex) { errors.Add(ex.Message); } return result; } public ApiResult> ImportBasicsGift(string filename, Stream filestream) { try { var file_ext = Path.GetExtension(filename).ToLower(); var importData = ImportBasicsGiftFromExcel(filestream, file_ext); if (importData.Count > 0) { var apiPath = cache_BL.GetValue_Parameter(Parameter.ZXD_CORE_WEBAPI); //apiPath = "http://localhost:5244"; var headers = new Dictionary(); var json = importData.ToJson(); string result = Utility.PostAjaxData($"{apiPath}/Api/Order/ImportHandGiftPreview", json, headers, Encoding.UTF8);//返回信息 var response = JsonConvert.DeserializeObject>>(result); return response; } else { return new ApiResult> { code = -1, msg = "数据不合法" }; } } catch (Exception ex) { return new ApiResult> { code = -1, msg = ex.Message }; } return null; } public List ImportBasicsGiftFromExcel(Stream filestream, string file_ext = "xls") { List result = new List(); IWorkbook workBook = null; switch (file_ext) { case ".xls": workBook = new HSSFWorkbook(filestream); break; case ".xlsx": workBook = new XSSFWorkbook(filestream); break; default: throw new ArgumentException("非法后缀"); } var sheet = workBook.GetSheetAt(0); var rownum = sheet.LastRowNum; for (int i = 1; i <= rownum; i++) { try { var row = sheet.GetRow(i); if (row == null) break; var s = row.Cells[1].RichStringCellValue; if (string.IsNullOrEmpty(s.String)) continue; ImportGiftOrderDto bill_Account = new ImportGiftOrderDto() { OrderId = row.Cells[0].ToString(), ProductName = row.Cells[1].ToString(), ProductCode = row.Cells[2].ToString(), DeptName = row.Cells[3].ToString(), Day = row.Cells[4].ToString() }; result.Add(bill_Account); } catch (Exception ex) { LogHelper.Error($"异常行:{i}", ex); throw (new Exception($"异常行:{i}", ex)); } } return result; } } }