using Aop.Api.Domain; using CRM.Core.DTO; using CRM.Core.DTO.Ord; using Microsoft.Ajax.Utilities; using Newtonsoft.Json; using Ninject; using NPOI.POIFS.FileSystem; using NPOI.SS.Formula.Functions; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Runtime.Remoting.Messaging; using System.Security.Policy; using System.Text; using System.Threading.Tasks; using System.Web; using System.Web.Mvc; using System.Web.Providers.Entities; using System.Web.Security; using WebGrease.Css.Extensions; using WX.CRM.BLL.Base; using WX.CRM.BLL.Util; using WX.CRM.Common; using WX.CRM.Common.Employee; using WX.CRM.Common.Layui; using WX.CRM.Common.StockHelper; using WX.CRM.Common.WxPay; using WX.CRM.IBLL.Level2; using WX.CRM.IBLL.MsgTool; using WX.CRM.IBLL.Res; using WX.CRM.IBLL.Util; using WX.CRM.Model.DTO; using WX.CRM.Model.Entity; using WX.CRM.Model.Enum; using WX.CRM.Model.MAP; using WX.CRM.Model.QueryMap; using WX.CRM.Model.SSO; using WX.CRM.WEB.Controllers.Level2; using WX.CRM.WEB.ViewModel.Sale; using WX.CRM.WebHelper; using WX.CRM.WebHelper.UtilityModel; namespace WX.CRM.WEB.Controllers.Base { public class EmployeeEmpowermentController : BaseController { [Inject] public ISecurityHelper sHelper { get; set; } [Inject] public IRES_RESOURCEMOBILE_Q _RES_RESOURCEMOBILE_Q { get; set; } [Inject] public ICACHE_Q cACHE_Q { get; set; } [Inject] public IL2_SOFT_ORDER_Q _order { get; set; } private CACHE_BL cache_BL = new CACHE_BL(); // 初始化随机验证码 private string GenerateVerificationCode() { const string chars = "0123456789"; var random = new Random(); return new string(Enumerable.Repeat(chars, 6) .Select(s => s[random.Next(s.Length)]).ToArray()); } // 发送验证码 public async Task> SendVerificationCode(string phoneNumber) { // Generate a random verification code string code = GenerateVerificationCode(); // Send the verification code to the phone number (e.g., via SMS) var url = "http://47.107.128.102:8096/SmsService.svc/PutSms"; var smsUrl = Utility.GetSettingOrNullByKey("SmsUrl"); if (!string.IsNullOrEmpty(smsUrl)) { url = smsUrl; } var msg = "{\"typeCode\":\"ISVRSMS0001\",\"SubTypeCode\":\"verifyCode\",\"para\":\"" + code + "\"}"; //var msg = "{\"typeCode\":\"HgMsg\",\"SubTypeCode\":\"Sms_TencentRegisterDF\",\"para\":\"" + code + "\"}"; var para = JsonConvert.SerializeObject(new { message = msg, mobile = new string[] { phoneNumber } }); cache_BL.SetVerify(phoneNumber, code); var res = Utility.PostAjaxData(url, para, Encoding.UTF8); LogHelper.Info($"绑定账号发送短信的返回:{res}"); var resObj = JsonConvert.DeserializeObject(res); if (resObj.result) return new Common.Employee.ApiResult { code = 0, data = phoneNumber, message = "发送成功" }; else return new Common.Employee.ApiResult { code = -1, data = phoneNumber, message = "发送失败" }; } private class SmsResult { public bool result { get; set; } public int retcode { get; set; } } // 员工权限管理 [AuthorizeRedirect(Roles = InitRights.CONST_员工权限管理)] public ActionResult Index() { //ToolBar ToolBar tool = new ToolBar(); string[] toolbtn = new ToolButtonView().ToolButtonRight(InitRights.员工权限管理, userRightId); tool.AddOtherButton("Other1", "批量开通产品", "icon-lookup", "", true); tool.AddOtherButton("Other2", "绑定账号", "icon-add", "", true); tool.AddOtherButton("Other3", "解绑", "icon-delete", "", true); tool.AllowButton(toolbtn); var appid = System.Configuration.ConfigurationManager.AppSettings["appid"]; ViewBag.appid = appid; ViewBag.ToolBar = tool; return View(); } public class FreeApiResult { public string code { get; set; } public T data { get; set; } public string message { get; set; } } // 查看软件用户具体权限,并调用更新最新赋权时间接口 [AuthorizeRedirect(Roles = InitRights.CONST_员工权限管理)] public string GetEmpowerByAppuser(string username, string resid, string ajaxGuid) { var productString = ""; try { if (!string.IsNullOrWhiteSpace(username)) { var url2 = cache_BL.GetValue_Parameter("ISVR_Saleclus_ProAuth"); var param = new { appid = "com.dongniu", appuserid = username }; var zxdCrmUrl = cache_BL.GetValue_Parameter(Parameter.Core_ZxdService_WebApi) + "Api/SSO/UpdateLastEmpowerTime"; //zxdCrmUrl = "https://localhost:44355/Api/SSO/UpdateLastEmpowerTime"; var json = JsonHelper.ObjDivertToJson(sHelper.createAjaxSignEncodingStr(param.ToJson(), "WK_EXT")); Dictionary header2 = new Dictionary(); string retmss = Utility.PostAjaxData(url2, json, header2, Encoding.UTF8); var result = Utility.JSONToObject(retmss); if (result.iRet == 0 && result.list.Any()) { result.list.TryGetValue(username, out ReadModelValue values); if (values != null) { //values.value.OrderBy(o => o.iEndTime); foreach (var item in values.value.OrderByDescending(o => o.iEndTime)) { productString += $"

{item.iModuleID}({item.sModuleName}) 权限到期时间:{Utility.JavaLongToDateTime(item.iEndTime)}

"; } var newStartTime = values.value.OrderByDescending(o => o.iStartTime).FirstOrDefault().iStartTime; var data = new UpdateLastEmpowerTime { residString = resid, timestamp = newStartTime }; var parms = JsonConvert.SerializeObject(data); var response = Utility.PostAjaxData(zxdCrmUrl, parms, Encoding.UTF8); } } } } catch (Exception ex) { LogHelper.Error("获取赋权情况数据失败" + ex.ToString()); return "获取赋权情况数据失败" + ex.ToString(); } return productString; } public class UpdateLastEmpowerTime { public string residString { get; set; } public long? timestamp { get; set; } } // 可赋权的员工列表 [AuthorizeRedirect(Roles = InitRights.CONST_员工权限管理)] public JsonResult empowerList(Laypage pager, empowerDto dto) { try { var url = cache_BL.GetValue_Parameter(Parameter.Core_ZxdService_WebApi) + "Api/SSO/GetEmpowerment"; // url = "https://localhost:44355/" + "Api/SSO/GetEmpowerment"; var appid = System.Configuration.ConfigurationManager.AppSettings["appid"]; //var userGroupList = cACHE_Q.GetList_InnerUserGroup(); var users = cACHE_Q.GetUserList(); var para = $"?appid={appid}&PageIndex={pager.page}&PageSize={pager.limit}&employeeStatus=1;3"; if (dto.eid != null) para += $"&eid={dto.eid}"; if (dto.txt_userId != null) para += $"&userId={users.FirstOrDefault(u => u.PKID == dto.txt_userId).EMPLOYEE_ID}"; if (dto.txt_departmentid != null) para += $"&deptId={dto.txt_departmentid}"; if (dto.name != null && dto.name != "") para += $"&name={dto.name}"; //if (dto.txt_groupIds != null) para += $"&groupIds={dto.txt_groupIds}"; //if (dto.txt_deptId != null) para += $"&deptId={dto.txt_deptId}"; Dictionary header = new Dictionary(); // 获取员工绑定账号 var res = Utility.GetData(url, para, header, Encoding.UTF8, 60000); LogHelper.Info(res); FreeApiResult> reqInfo = JsonConvert.DeserializeObject>>(res); if (reqInfo.code != "0") { return Json(reqInfo.message, JsonRequestBehavior.AllowGet); } //var module = new List(); if (reqInfo.data != null && reqInfo.data.Data.Count == 0) return Json(reqInfo, JsonRequestBehavior.AllowGet); var sort = 0; reqInfo.data.Data.ForEach(employee => { sort++; employee.sort = sort; var username = employee.appusername; employee.productString = ""; }); return Json(reqInfo, JsonRequestBehavior.AllowGet); } catch (Exception ex) { LogHelper.Error("获取赋权情况数据失败" + ex.ToString()); return Json(ex, JsonRequestBehavior.DenyGet); } } // 绑定 [AuthorizeRedirect(Roles = InitRights.CONST_员工权限管理)] [HttpPost] public string SoftEmployeeBindAdd(SoftEmployeeBindAddDto data) { if (!cache_BL.JudgeVerify(data.phone, data.verify_code)) { return JsonConvert.SerializeObject(new Common.WxPay.ApiResult { code = "-1", message = "验证码不正确!", data = false }); } var sendData = new SoftEmployeeBindChangeSendDto { to_by_eid = data.to_by_eid, resid = ResUtil.CreateResId(data.phone), from_by_eid = (int)Eid, show_phone = Utility.ReturnPhoneNO(data.phone), }; var zxdCrmUrl = cache_BL.GetValue_Parameter(Parameter.Core_ZxdService_WebApi) + "Api/SSO/AddSoftEmployeeBind"; // zxdCrmUrl = "https://localhost:7163/Api/SSO/AddSoftEmployeeBind"; var parms = JsonConvert.SerializeObject(sendData); var response = Utility.PostAjaxData(zxdCrmUrl, parms, Encoding.UTF8); var res = JsonConvert.DeserializeObject(response); return JsonConvert.SerializeObject(new Common.WxPay.ApiResult { code = res.Code.ToString(), message = res.Message, data = true }); } public class SoftEmployeeBindChangeSendDto { public int to_by_eid { get; set; } public string resid { get; set; } public string show_phone { get; set; } public int from_by_eid { get; set; } } // 获取软件用户名 [AuthorizeRedirect(Roles = InitRights.CONST_员工权限管理)] [HttpPost] public string UpdateAppusername(UpdateAppusernameString dto) { var zxdCrmUrl = cache_BL.GetValue_Parameter(Parameter.Core_ZxdService_WebApi) + "Api/SSO/UpdateAppusername"; // zxdCrmUrl = "https://localhost:44355/Api/SSO/UpdateAppusername"; var senddto = JsonConvert.DeserializeObject>(dto.UpdateAppusernameList); var parms = JsonConvert.SerializeObject(senddto); var response = Utility.PostAjaxData(zxdCrmUrl, parms, Encoding.UTF8); var res = JsonConvert.DeserializeObject(response); return JsonConvert.SerializeObject(new Common.Employee.ApiResult { code = res.Code, message = res.Message, data = "" }); } // 解绑 [AuthorizeRedirect(Roles = InitRights.CONST_员工权限管理)] [HttpPost] public string SoftEmployeeBindDelete(SoftEmployeeBindDeleteDto data) { var zxdCrmUrl = cache_BL.GetValue_Parameter(Parameter.Core_ZxdService_WebApi) + "Api/SSO/DeleteSoftEmployeeBind"; // zxdCrmUrl = "https://localhost:7163/Api/SSO/DeleteSoftEmployeeBind"; data.from_by_eid = (int)Eid; var parms = JsonConvert.SerializeObject(data); var response = Utility.PostAjaxData(zxdCrmUrl, parms, Encoding.UTF8); var res = JsonConvert.DeserializeObject(response); string retmss = ""; // 解绑后,关闭相应的免费订单 if (res.Code == 0) { var url2 = cache_BL.GetValue_Parameter("ISVR_Soft_Pre"); var param = new { username = data.username }; Dictionary header2 = new Dictionary(); retmss = Utility.PostAjaxData($"{url2}/order/doGetUserPerssion", JsonHelper.ObjDivertToJson(param), header2, Encoding.UTF8); } return JsonConvert.SerializeObject(new Common.WxPay.ApiResult { code = res.Code.ToString(), message = res.Message, data = new jsonString { json = retmss } }); } public class jsonString { public string json { set; get; } } // 进行赋权 [AuthorizeRedirect(Roles = InitRights.CONST_员工权限管理)] [HttpPost] public string SetEmpowerment(SetEmpowermentDto data) { try { var tempEmployeeList = Utility.JSONToObject>(data.EmployeeString); data.EmployeeList = tempEmployeeList; var tempProductList = Utility.JSONToObject>(data.ProductString); data.ProductList = tempProductList; var zxdCrmUrl = cache_BL.GetValue_Parameter(Parameter.Core_ZxdService_WebApi) + "Api/SSO/SetEmpowerment"; //zxdCrmUrl = "https://localhost:7163/Api/SSO/SetEmpowerment"; // 调用开通服务 var EmployeeList = data.EmployeeList; var errMessage = ""; for (var eIndex = 0; eIndex < EmployeeList.Count; eIndex++) { var curEmployee = EmployeeList[eIndex]; for (var pIndex = 0; pIndex < data.ProductList.Count; pIndex++) { var curPro = data.ProductList[pIndex]; var endtime = DateTime.Now.AddDays(data.duration); data.fromByEid = (int)Eid; decimal orderId = 0; //var openMsg = (JsonResult)Leve2OrderController.OpenOrder(orderId.ToString(), $"{data.fromByEid}给{curEmployee.employee_id}开了{curPro.subproductid}的权限"); //var success = (JsonMessage)openMsg.Data; //开通服务 var resFromEmpower = sendEmpower(data, curPro, curEmployee); LogHelper.Error($"批量开通失败msg:{resFromEmpower.retMsg}"); if (resFromEmpower.retCode == (int)NodeJsOrderEnum.调用成功) { data.orderid = resFromEmpower.orderId; data.appid = System.Configuration.ConfigurationManager.AppSettings["appid"]; // 开通后推送相关数据给SSO string AppId = Utility.GetSettingByKey("appId");//坐席的appid string Secret = Utility.GetSettingByKey("appSecret");//坐席的appid的密钥 ApiDockHelper dock = new ApiDockHelper(AppId, Secret); Dictionary dic = new Dictionary(); dic.Add("employeeId", curEmployee.employee_id); dic.Add("account", curEmployee.softusername); dic.Add("operator", data.fromByEid); dic.Add("reason", "批量开通"); var ssoUrl = cache_BL.GetValue_Parameter(Parameter.SSO_Pre_Url); Common.Employee.ApiResult model = dock.PostApi(ssoUrl + "/v1/api/open/employee/ip/add", dic); if (model.ret != 0) { LogHelper.Error("SSO推送开通数据错误:" + model.ToJson()); } // 记录开通日志 var parms = JsonConvert.SerializeObject(data); var response = Utility.PostAjaxData(zxdCrmUrl, parms, Encoding.UTF8); } else { errMessage += $"{curEmployee.softusername}开通{curPro.subproductname}产品失败;"; } } } if (errMessage == "") { return JsonConvert.SerializeObject(new Common.WxPay.ApiResult { code = "0", message = "批量操作成功", data = true }); } else { return JsonConvert.SerializeObject(new Common.WxPay.ApiResult { code = "-1", message = errMessage, data = false }); } } catch (Exception ex) { LogHelper.Error(ex); var temp = new Common.WxPay.ApiResult { code = "-1", data = false, message = "添加失败" }; var ret = Utility.ObjectToJson(temp); return ret; } } // 赋权请求 public CreateOrderRsp sendEmpower(SetEmpowermentDto dto, SubProduct product, Employee employee) { freeordermodel theModel = new freeordermodel(); PhoneLogModel phoneLogModel = new PhoneLogModel { Method = System.Reflection.MethodBase.GetCurrentMethod().Name, userid = 0 }; theModel.mobile = _RES_RESOURCEMOBILE_Q.GetNumberByResId(employee.resid, phoneLogModel); theModel.needpay = product.price; theModel.ordertype = 1; theModel.productId = product.subproductid; theModel.remark = $"{dto.fromByEid}给{employee.employee_id}开了{product.subproductid}的权限"; theModel.saledeptid = companyId; theModel.source = "1"; theModel.softusername = employee.softusername; theModel.productcode = product.productcode;//小类代码 theModel.needpay = 0; theModel.teamserve = 1; theModel.userid = dto.fromByEid; theModel.productType = Convert.ToInt32(product.producttype);//产品分类 theModel.opuser = UserId; theModel.ctime = DateTimeTool.ConvertDateTimeInt(DateTime.Now).ToString(); //theModel.companycode = companyCode; theModel.companycode = Utility.GetSettingOrNullByKey("DataClientCode"); theModel.mainOrderId = null; theModel.count = Convert.ToInt32(dto.duration); //产品数 --免费产品始终一天,这里天数作为数量传递,达到天数效果 var depment = cache_BL.GetList_SalesDepartMent(); // todo 通过eid拿渠道号接口 if (!string.IsNullOrEmpty(saleDeptCode)) { var dep = depment.Find(p => p.SALEDEPTCODE == saleDeptCode); if (dep != null) { if (dep.CHANNELDEF.HasValue) theModel.ch = (int)dep.CHANNELDEF; } } Console.WriteLine(System.Configuration.ConfigurationManager.AppSettings); if (theModel.ch == null || theModel.ch == 0) theModel.ch = int.Parse(System.Configuration.ConfigurationManager.AppSettings["Channel"]); var url = cache_BL.GetValue_Parameter(Parameter.Core_ZxdService_FreeOrder);//内部接口··开通免费订单接口 var json = Utility.ConvertToJSON(theModel); json = sHelper.createSignEncodingStr(json, SecurityHelper.OrderClientIdKey); LogHelper.Info("批量开通:" + url + "?" + json); string retmsg = Utility.PostData(url + "?" + json, Encoding.UTF8); retmsg = sHelper.decyptData(SecurityHelper.OrderClientIdKey, retmsg); CreateOrderRsp retmessage = JsonHelper.JsonDivertToObj(retmsg);//返回信息 return retmessage; } // 可赋权的产品数据 [AuthorizeRedirect(Roles = InitRights.CONST_员工权限管理)] public JsonResult productOfEmpower(Laypage pager) { var url = cache_BL.GetValue_Parameter(Parameter.Core_ZxdService_WebApi) + "Api/Product/GetProductByAppid"; //url = "https://localhost:7163/" + "Api/Product/GetProductByAppid"; var appid = System.Configuration.ConfigurationManager.AppSettings["appid"]; var para = $"appid={appid}&PageIndex={pager.page}&PageSize={pager.limit}&Sort={pager.sort}&Order={pager.order}"; Dictionary header = new Dictionary(); var res = Utility.GetData(url, para, header, Encoding.UTF8, 60000); //var reqInfo = JsonConvert.DeserializeObject>>(res); FreeApiResult> reqInfo = JsonConvert.DeserializeObject>>(res); return Json(reqInfo, JsonRequestBehavior.AllowGet); } } }