using Crm.Core.Common.Helpers; using Crm.Core.External.Domain.Dto; using System.Text; using System.Threading.Channels; using static Crm.Core.External.Web.Controllers.CustomerController; namespace Crm.Core.External.Web.Controllers { [Route("Customer")] public class CustomerController : Controller { private readonly ICustomerDomain _customerDomain; private readonly IMapper _mapper; private readonly IRedisManager _redisManager; public CustomerController( ICustomerDomain customerDomain, IMapper mapper, IRedisManager redisManager) { _customerDomain = customerDomain; _mapper = mapper; _redisManager = redisManager; } public class ChannelPayImgItem { public string WxpayImg { get; set; } public string WxpayUrl { get; set; } public string AlipayImg { get; set; } public string AlipayUrl { get; set; } public List PayImgItems { get; set; } } public class PayImgItem { public string GroupName { get; set; } public int? Channel { get; set; } public string Title { get; set; } public string WxpayImg { get; set; } public string WxpayUrl { get; set; } public string AlipayImg { get; set; } public string AlipayUrl { get; set; } } public class RedisCacheItem { public string Val { get; set; } public string Remark { get; set; } } public async Task Index(decimal eid, string? appuserid, string? appid, int? deptid, string tabs = "1") { try { if (!string.IsNullOrEmpty(appid)) { appid = appid.Replace("_1", ""); } var data = await _customerDomain.GetWxworkCustomer(eid, appuserid, appid); var model = JsonSerializer.Deserialize(data.ToJson()); if (model == null) return View(new WxworkCustomerModel()); var capitalSelect = await _customerDomain.GetCapitalSelect(eid); ViewBag.CapitalSelect = capitalSelect.Select(x => new { name = x.Value }).ToJson(); ViewBag.Capital = capitalSelect.Where(x => x.Key.ToString() == model.WxworkCustomerInfo.CustomerCapital) .Select(x => x.Value).FirstOrDefault(); model.OrderTypes = await _customerDomain.GetOrderTypes(); var defaultKey = "DGKJ.DG_SOFTWARE"; var defaultKeyItem = await _redisManager.GetAsync($"CrmCore:PayChannel:DefaultKey"); if (defaultKeyItem != null && !string.IsNullOrEmpty(defaultKeyItem.Val)) { defaultKey = defaultKeyItem.Val; } var otherKey = "DGKJ.NEW_MEDIA_3"; var otherKeyItem = await _redisManager.GetAsync($"CrmCore:PayChannel:OtherKey"); if (otherKeyItem != null && !string.IsNullOrEmpty(otherKeyItem.Val)) { otherKey = otherKeyItem.Val; } ViewBag.Tabs = tabs; ViewBag.PayImgItems = await CreatePayImg(defaultKey, Convert.ToInt64(eid), deptid); ViewBag.PayImgItems2 = await CreatePayImg(otherKey, Convert.ToInt64(eid), deptid); ViewBag.HidePayUrl = await _redisManager.GetAsync("CrmCore:HidePayUrl"); return View(model); } catch (Exception ex) { Log.Error(ex, "加载客户跟进记录报错!"); return View("../home/error", new ErrorViewModel { ErrorMessage = ex.Message }); } } [Route("GetCommonPayInfo")] public async Task GetCommonPayInfo(long? eid, int? deptid) { var defaultKey = "DGKJ.DG_SOFTWARE"; var defaultKeyItem = await _redisManager.GetAsync($"CrmCore:PayChannel:DefaultKey"); if (defaultKeyItem != null && !string.IsNullOrEmpty(defaultKeyItem.Val)) { defaultKey = defaultKeyItem.Val; } var PayImgItems = await CreatePayImg(defaultKey, eid, deptid); return Json(PayImgItems); } [Route("GetCommonPayInfo3")] public async Task GetCommonPayInfo3(long? eid, int? deptid) { var PayImgItems = new List(); var defaultKey = "DGKJ.DG_SOFTWARE"; var defaultKeyItem = await _redisManager.GetAsync($"CrmCore:PayChannel:DefaultKey"); if (defaultKeyItem != null && !string.IsNullOrEmpty(defaultKeyItem.Val)) { defaultKey = defaultKeyItem.Val; } var items = await CreatePayImg(defaultKey, eid, deptid); foreach (var item in items) { item.GroupName = "主要支付二维码"; } PayImgItems.AddRange(items); var otherKey = "DGKJ.NEW_MEDIA_3"; var otherKeyItem = await _redisManager.GetAsync($"CrmCore:PayChannel:OtherKey"); if (otherKeyItem != null && !string.IsNullOrEmpty(otherKeyItem.Val)) { otherKey = otherKeyItem.Val; } var items2 = await CreatePayImg(otherKey, eid, deptid); foreach (var item in items2) { item.GroupName = "备用支付二维码"; } PayImgItems.AddRange(items2); return Json(PayImgItems); } [Route("GetCommonPayUrl")] public async Task GetCommonPayUrl(long? eid, int? deptid) { var channel = default(int?); var channels = await GetPayChannelAsync(deptid.GetValueOrDefault()); if (channels.Count > 0) { channel = channels[0].Channel; } var url = await _redisManager.GetAsync($"CrmCore:PayUrl"); if (string.IsNullOrEmpty(url)) { url = "https://uppay.soft.dn8188.com/onlinePaytest"; } var defaultKey = "DGKJ.DG_SOFTWARE"; var defaultKeyItem = await _redisManager.GetAsync($"CrmCore:PayChannel:DefaultKey"); if (defaultKeyItem != null && !string.IsNullOrEmpty(defaultKeyItem.Val)) { defaultKey = defaultKeyItem.Val; } url = $"{url}/alipay/wapPayPage?identityKey={defaultKey}&channel={channel}&eId={eid}"; return Json(new ApiResult { Data = url }); } private async Task> CreatePayImg(string defaultKey, long? eid, int? deptid) { var payImgItems = new List(); if (deptid.GetValueOrDefault() > 0 && eid > 0) { var cacheKey = $"CrmCore:PayImg:{defaultKey}:{deptid.GetValueOrDefault()}_{eid}"; var cache = await _redisManager.GetAsync(cacheKey); if (cache == null) { cache = new ChannelPayImgItem { PayImgItems = new List() }; //var defaultKey = "DGKJ.DG_SOFTWARE"; //var defaultKeyItem = await _redisManager.GetAsync($"CrmCore:PayChannel:DefaultKey"); //if (defaultKeyItem != null && !string.IsNullOrEmpty(defaultKeyItem.Val)) //{ // defaultKey = defaultKeyItem.Val; //} //var otherKey = "DGKJ.NEW_MEDIA_3"; //var otherKeyItem = await _redisManager.GetAsync($"CrmCore:PayChannel:OtherKey"); //if (otherKeyItem != null && !string.IsNullOrEmpty(otherKeyItem.Val)) //{ // otherKey = otherKeyItem.Val; //} //var deptIdsItem = await _redisManager.GetAsync($"CrmCore:PayChannel:OtherKeyDeptIds"); //if (deptIdsItem != null && !string.IsNullOrEmpty(deptIdsItem.Val)) //{ // if (deptIdsItem.Val.Split(',').Any(a => a == deptid.GetValueOrDefault().ToString())) // { // defaultKey = otherKey; // } //} var channels = await GetPayChannelAsync(deptid.GetValueOrDefault()); if (channels.Count > 0) { foreach (var channel in channels) { var payImgItem = await CreatePayImgItem(defaultKey, channel, eid); cache.PayImgItems.Add(payImgItem); } } _redisManager.Set(cacheKey, cache, TimeSpan.FromDays(1)); } if (!string.IsNullOrEmpty(cache.WxpayImg)) { payImgItems.Add(new PayImgItem { WxpayImg = cache.WxpayImg, WxpayUrl = cache.WxpayUrl, AlipayImg = cache.AlipayImg, AlipayUrl = cache.AlipayUrl }); } if (cache.PayImgItems != null && cache.PayImgItems.Count > 0) { payImgItems.Clear(); foreach (var payImgItem in cache.PayImgItems) { payImgItems.Add(payImgItem); } } } return payImgItems; } private async Task CreatePayImgItem(string defaultKey, ChannelItem channel, long? eid) { var item = new PayImgItem { Channel = channel.Channel, Title = channel.Title }; var title = await _redisManager.GetAsync($"CrmCore:PayTitle"); if (string.IsNullOrEmpty(title)) { title = "东高(广东)科技发展有限公司-{0}"; } title = string.Format(title, channel.Channel); var subtitle = $"{channel.Title}({channel.Channel})"; var url = await _redisManager.GetAsync($"CrmCore:PayUrl"); if (string.IsNullOrEmpty(url)) { url = "https://uppay.soft.dn8188.com/onlinePaytest"; } var wxpayUrl = $"{url}/wechat/authorize?identityKey={defaultKey}&channel={channel.Channel}&eId={eid}"; var alipayUrl = $"{url}/alipay/wapPayPage?identityKey={defaultKey}&channel={channel.Channel}&eId={eid}"; item.WxpayUrl = wxpayUrl; item.AlipayUrl = alipayUrl; try { item.WxpayImg = CreatePayImg("wxpay", wxpayUrl, title, subtitle); item.AlipayImg = CreatePayImg("alipay", alipayUrl, title, subtitle); } catch { } return item; } private async Task> GetPayChannelAsync(int deptId) { var channels = new List(); var url = await _redisManager.GetAsync($"CrmCore:GetPayChannelUrl"); if (string.IsNullOrEmpty(url)) { url = "http://120.77.165.155:8089/Api/Deptment/Depts"; } var client = new System.Net.Http.HttpClient(); var result = await client.GetAsync(url); if (result.IsSuccessStatusCode) { var bytes = await result.Content.ReadAsByteArrayAsync(); var rspJson = Encoding.UTF8.GetString(bytes); var rsp = System.Text.Json.JsonSerializer.Deserialize(rspJson); if (rsp != null && rsp.data != null) { var dept = rsp.data.Where(w => w.id == deptId).FirstOrDefault(); if (dept != null) { if (dept.deptmentCampains != null && dept.deptmentCampains.Count > 0) { channels.Add(new ChannelItem { Channel = dept.deptmentCampains.FirstOrDefault().startCampainId, Title = dept.title }); } else { if (!string.IsNullOrEmpty(dept.appid)) { var depts = rsp.data.Where(w => w.appid == dept.appid && w.id > 0); foreach (var dept_item in depts) { if (dept_item.deptmentCampains != null && dept_item.deptmentCampains.Count > 0) { channels.Add(new ChannelItem { Channel = dept_item.deptmentCampains.FirstOrDefault().startCampainId, Title = dept_item.title }); } } } } } } } return channels; } public class ChannelItem { public string Title { get; set; } public int? Channel { get; set; } } public class GetDepartmentResponse { public List data { get; set; } public int code { get; set; } public string message { get; set; } } public class DepartmentItem { public int? id { get; set; } public string? title { get; set; } public string? code { get; set; } public string? appid { get; set; } public int? departmentId { get; set; } public bool? isDept { get; set; } public string? companyCode { get; set; } public List deptmentCampains { get; set; } } public class Deptmentcampain { public int? startCampainId { get; set; } public int? endCampainId { get; set; } } private string CreatePayImg(string payType, string url, string title, string subtitle) { switch (payType) { default: throw new ApiException("支付方式无效:" + payType, 1); case "wxpay": { var bgImg = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wwwroot", "images", "wxpay.png"); var bytes = new QRCodeHelper().Create(url, 180, bgImg, 65, 158, title, -1, 363); var base64 = Convert.ToBase64String(bytes); return $"data:image/png;base64,{base64}"; } case "alipay": { var bgImg = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wwwroot", "images", "alipay.png"); var bytes = new QRCodeHelper().Create(url, 180, bgImg, 65, 158, title, -1, 363); var base64 = Convert.ToBase64String(bytes); return $"data:image/png;base64,{base64}"; } } } [HttpPost("Capital")] public async Task UpdateCapital([FromBody] UpdateCapitalModel model) { var data = JsonSerializer.Deserialize(model.ToJson()); if (data == null) return new ApiResult { Code = -1, Message = "数据不能为空!" }; if (await _customerDomain.UpdateCapital(data)) { return new ApiResult { Code = 0, Message = "更新成功!" }; } return new ApiResult { Code = -1, Message = "更新失败!" }; } [HttpPost("CustomerOrder")] public async Task CreateCustomerOrder([FromBody] CreateCustomerOrderDto dto) { if (await _customerDomain.CreateCustomerOrder(dto)) { return new ApiResult { Code = 0, Message = "提交成功!" }; } return new ApiResult { Code = -1, Message = "提交失败!" }; } } }