using APT.BaseData.Domain.ApiModel.OP; using APT.BaseData.Domain.Entities.FM; using APT.BaseData.Domain.Entities.OP; using APT.BaseData.Domain.Enums; using APT.BaseData.Domain.Enums.OP; using APT.BaseData.Domain.IServices; using APT.BaseData.Domain.IServices.OP; using APT.Infrastructure.Api; using APT.Infrastructure.Api.Redis; using APT.Infrastructure.Core; using APT.Utility; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Dynamic; using System.Linq; using System.Security.Cryptography; using System.Text; namespace APT.OP.WebApi.Controllers.Api { [Route("api/OP/Client")] public class ClientInfoController : APTApiController { /// ///更新用户信息 /// /// /// [HttpPost, Route("UpdateClient")] public JsonActionResult UpdateClient([FromBody] WeiUserUpdateModel entity) { return SafeExecute(() => { dynamic result = new ExpandoObject(); var userInfo = this.GetEntity(x => x.OPEN_ID == entity.openid, "NavClient"); if (userInfo != null && userInfo.NavClient != null) { var user = userInfo.NavClient; user.NICK_NAME = entity.UserInfo.nickName; user.ID_CARD = entity.UserInfo.idcard; user.NAME = entity.UserInfo.name; user.TEL = entity.UserInfo.tel; user.EMAIL = entity.UserInfo.email; user.ADDR = entity.UserInfo.addr; user.AVATAURL = entity.UserInfo.avatarUrl; this.UpdateEntity(user); } else { throw (new Exception("更新用户信息失败!")); } result = entity; return result; }); } /// /// 获取用户信息 /// /// /// [HttpGet, Route("GetClient")] public JsonActionResult GetClient(string openid) { return base.SafeExecute(() => { WeiUserUpdateModel result = new WeiUserUpdateModel(); if (string.IsNullOrEmpty(openid)) throw (new Exception("参数openid为空")); var weChatOpen = this.GetEntity(x => x.OPEN_ID == openid, "NavClient"); if (weChatOpen == null) throw (new Exception("用户不存在")); var user = weChatOpen.NavClient; result.openid = openid; UserInfo userInfo = new UserInfo() { id = user.ID.ToString(), name = user.NAME, nickName = user.NICK_NAME, tel = user.TEL, email = user.EMAIL, idcard = user.ID_CARD, addr = user.ADDR, avatarUrl = user.AVATAURL }; result.UserInfo = userInfo; return result; }); } /// /// 获取用户手机号 /// /// /// [HttpPost, Route("GetPhone")] public JsonActionResult GetPhone([FromBody] GetPhone getPhone) { return base.SafeExecute(() => { WeiUserUpdateModel result = new WeiUserUpdateModel(); var session_key = CsRedisManager.StringGet("WX_session_key"); byte[] encryData = Convert.FromBase64String(getPhone.encryptedData); RijndaelManaged rijndaelCipher = new RijndaelManaged(); rijndaelCipher.Key = Convert.FromBase64String(session_key); rijndaelCipher.IV = Convert.FromBase64String(getPhone.iv); rijndaelCipher.Mode = CipherMode.CBC; rijndaelCipher.Padding = PaddingMode.PKCS7; ICryptoTransform transform = rijndaelCipher.CreateDecryptor(); byte[] plainText = transform.TransformFinalBlock(encryData, 0, encryData.Length); string res = Encoding.Default.GetString(plainText); dynamic model = Newtonsoft.Json.Linq.JToken.Parse(res) as dynamic; string phoneNumber = model.phoneNumber; result.openid = getPhone.openid; var weChatOpen = this.GetEntity(x => x.OPEN_ID == getPhone.openid, "NavClient"); if (weChatOpen == null) throw (new Exception("用户不存在")); var user = weChatOpen.NavClient; result.openid = getPhone.openid; UserInfo userInfo = new UserInfo() { id = user.ID.ToString(), name = user.NAME, nickName = user.NICK_NAME, tel = user.TEL, email = user.EMAIL, idcard = user.ID_CARD, addr = user.ADDR, avatarUrl = user.AVATAURL }; if (!string.IsNullOrEmpty(phoneNumber)) { userInfo.tel = phoneNumber; } result.UserInfo = userInfo; return result; }); } /// /// 发送手机验证码 /// /// [HttpPost, Route("PhoneVerifyCode")] public JsonActionResult PhoneVerifyCode([FromBody] WeChatPhone entity) { return SafeExecute(() => { string code = VerifyCodeHelper.GetSingleObj().CreateVerifyCode(VerifyCodeHelper.VerifyCodeType.NumberVerifyCode, 6); Dictionary dicNCode = new Dictionary(); dicNCode.Add("time", DateTime.Now.AddSeconds(600).ToString()); dicNCode.Add("code", code); var redisManage = ServiceLocator.Instance.GetService(); CsRedisManager.StringSet(entity.openid, dicNCode); var serice = ServiceLocator.Instance.GetService(); return serice.SendMessage(entity.phone, code); }); } /// /// 验证手机验证码 /// /// /// /// [HttpPost, Route("CheckPhoneCode")] public JsonActionResult CheckPhoneCode([FromBody] WeChatPhone entity) { return SafeExecute(() => { var verCode = CsRedisManager.StringGet>(entity.openid.ToString()); if (verCode == null) throw new Exception("手机验证码不存在!"); if (Convert.ToDateTime(verCode["time"]) < DateTime.Now) throw new Exception("手机验证码已失效,请重新获取!"); if (entity.code.ToUpper() != verCode["code"].ToUpper()) throw new Exception("手机验证码不正确!"); return true; }); } /// /// 获取我的电卡列表/购买电卡列表(ignore) /// /// /// [HttpPost, Route("GetElectricCard")] public PagedActionResult GetElectricCard([FromBody] SearchMemberCard searchMemberCard) { return SafeGetPagedData((res) => { //dynamic result = new ExpandoObject(); BasePageFilter filter = new BasePageFilter(); filter.PageIndex = searchMemberCard.pageIndex; filter.Limit = searchMemberCard.limit; filter.IsMultipleDb = true; filter.Sort = "CODE"; filter.Order = DbOrder.DESC; filter.IgnoreOrgRule = true; var members = this.GetOrderPageEntities(x => x.OPENID == searchMemberCard.openid && x.TENANT_NAME.Contains(searchMemberCard.keyword), filter, "Nav_RechargeCard");//会员卡 var cards = new List(); BaseFilter baseFilter = new BaseFilter(); baseFilter.IsMultipleDb = true; baseFilter.IgnoreOrgRule = true; var fullminus = this.GetEntities(x => x.START_TIME <= DateTime.Now && x.END_TIME >= DateTime.Now, baseFilter, "Nav_ActivityDetail");//满减活动表 var stations = this.GetEntities(null, baseFilter);//充电站 if (!searchMemberCard.isbuy)//购买电卡列表 { var existTenants = this.GetEntities(x => x.OPENID == searchMemberCard.openid, baseFilter).Select(x => x.TENANT_CODE); var baseFilter1 = new BasePageFilter(); baseFilter1.PageIndex = searchMemberCard.pageIndex; baseFilter1.Limit = searchMemberCard.limit; baseFilter1.IsSpecifyDb = true; baseFilter1.IgnoreOrgRule = true; var tenants = this.GetOrderPageEntities(x => !existTenants.Contains(x.CODE) && x.NAME.Contains(searchMemberCard.keyword)&& x.PROJECT_TYPE ==(int)OPProjectTypeEnum.充电桩, baseFilter1);//未购买运营商 foreach (var tenant in tenants.Data) { List actities = new List(); List useRange = new List(); var tenantStations = stations.Where(x => x.ORG_ID == tenant.ID); var memberActivity = fullminus.FirstOrDefault(x => x.ORG_ID == tenant.ID); if (memberActivity != null && memberActivity.Nav_ActivityDetail != null) { foreach (var detail in memberActivity.Nav_ActivityDetail) { var actity = new Fullminus() { full = detail.RECHARGE_AMOUNT, reduce = detail.DISCOUNTED_AMOUNT }; actities.Add(actity); } } var card = new RechargeCard() { tenantName = tenant.NAME, tenantCode = tenant.CODE, fullminus = actities, }; if (tenantStations != null && tenantStations.Any()) useRange = tenantStations.Select(x => x.NAME).ToList();//电卡适用充电站 card.useRange = useRange; cards.Add(card); } res.Data = cards; res.TotalCount = tenants.TotalCount; } else { foreach (var member in members.Data)//会员卡列表 { var tenantStations = stations.Where(x => x.ORG_ID == member.ORG_ID); var memberActivity = fullminus.FirstOrDefault(x => x.ORG_ID == member.ORG_ID); List actities = new List(); foreach (var detail in memberActivity.Nav_ActivityDetail) { var actity = new Fullminus() { full = detail.RECHARGE_AMOUNT, reduce = detail.DISCOUNTED_AMOUNT }; actities.Add(actity); } var card = new RechargeCard() { cardNo = member.Nav_RechargeCard.CODE, balance = member.Nav_RechargeCard.BALANCE, tenantName = member.TENANT_NAME, tenantCode = member.TENANT_CODE, fullminus = actities, useRange = tenantStations.Select(x => x.NAME).ToList()//电卡适用充电站 }; cards.Add(card); } res.Data = cards; res.TotalCount = members.TotalCount; } }); } /// /// 购买电卡 /// /// /// [HttpPost, Route("BuyMemberCard")] public JsonActionResult BuyMemberCard([FromBody] BuyCard buyCard) { return SafeExecute(() => { var tenant = this.GetEntity(x => x.CODE == buyCard.tenantCode);//查找运营商 var filter = new BaseFilter(); filter.IsSpecifyDb = true; filter.SpecifyTenant = buyCard.tenantCode; //filter.IgnoreOrgRule = true; filter.OrgId = tenant.ID; var member = this.GetEntity(x => x.OPENID == buyCard.openid, filter, "Nav_RechargeCard");//查找会员 RechargeCard rechargeCard = new RechargeCard(); if (member == null)//创建会员 { //var org = this.GetEntity(x => x.TENANT_CODE == buyCard.tenantCode, filter); var codeRuleService = APT.Infrastructure.Api.ServiceLocator.Instance.GetService(); SystemCodeFilter codeFilter = new SystemCodeFilter(); codeFilter.CodeType = (int)PFCodeRuleType.充值卡编码; codeFilter.Count = 1; codeFilter.OrgId = tenant.ID; T_FC_RECHARGE_CARD czk = new T_FC_RECHARGE_CARD() { ID = Guid.NewGuid(), ORG_ID = tenant.ID, CODE = codeRuleService.NewGenSerialByTenant(codeFilter, buyCard.tenantCode), BALANCE = 0, }; SystemCodeFilter codeMember = new SystemCodeFilter(); codeMember.CodeType = (int)PFCodeRuleType.会员编码; codeMember.Count = 1; codeMember.OrgId = tenant.ID; member = new T_FC_MEMBER() { ORG_ID = tenant.ID, OPENID = buyCard.openid, CODE = codeRuleService.NewGenSerialByTenant(codeMember, buyCard.tenantCode), RECHARGE_CARD_ID = czk.ID, TENANT_CODE = buyCard.tenantCode, TENANT_NAME = tenant.NAME }; rechargeCard.cardNo = czk.CODE; rechargeCard.balance = czk.BALANCE; rechargeCard.tenantName = tenant.NAME; rechargeCard.tenantCode = buyCard.tenantCode; List actities = new List(); List useRange = new List(); var tenantStations = this.GetEntities(null, filter);//充电站 var memberActivity = this.GetEntity(x => x.START_TIME <= DateTime.Now && x.END_TIME >= DateTime.Now, filter, "Nav_ActivityDetail");//满减活动表 if (memberActivity != null && memberActivity.Nav_ActivityDetail != null) { foreach (var detail in memberActivity.Nav_ActivityDetail) { var actity = new Fullminus() { full = detail.RECHARGE_AMOUNT, reduce = detail.DISCOUNTED_AMOUNT }; actities.Add(actity); } } rechargeCard.fullminus = actities; if (tenantStations != null && tenantStations.Any()) useRange = tenantStations.Select(x => x.NAME).ToList();//电卡适用充电站 rechargeCard.useRange = useRange; this.UnifiedCommit(() => { this.AddEntityByTenant(czk, buyCard.tenantCode); this.AddEntityByTenant(member, buyCard.tenantCode); }); } else { rechargeCard.cardNo = member.Nav_RechargeCard.CODE; rechargeCard.balance = member.Nav_RechargeCard.BALANCE; rechargeCard.tenantName = tenant.NAME; rechargeCard.tenantCode = buyCard.tenantCode; List actities = new List(); List useRange = new List(); var tenantStations = this.GetEntities(null, filter);//充电站 var memberActivity = this.GetEntity(x => x.START_TIME <= DateTime.Now && x.END_TIME >= DateTime.Now, filter, "Nav_ActivityDetail");//满减活动表 if (memberActivity != null && memberActivity.Nav_ActivityDetail != null) { foreach (var detail in memberActivity.Nav_ActivityDetail) { var actity = new Fullminus() { full = detail.RECHARGE_AMOUNT, reduce = detail.DISCOUNTED_AMOUNT }; actities.Add(actity); } } rechargeCard.fullminus = actities; if (tenantStations != null && tenantStations.Any()) useRange = tenantStations.Select(x => x.NAME).ToList();//电卡适用充电站 rechargeCard.useRange = useRange; } return rechargeCard; }); } /// /// 充值 /// /// /// [HttpPost, Route("Recharge")] public JsonActionResult Recharge([FromBody] MemberInfo entity) { return SafeExecute(() => { var tenant = this.GetEntity(x => x.CODE == entity.tenantCode);//查找运营商 BaseFilter filter = new BaseFilter(); filter.IsSpecifyDb = true; filter.SpecifyTenant = entity.tenantCode; //filter.IgnoreOrgRule = true; filter.OrgId = tenant.ID; var member = this.GetEntity(x => x.OPENID == entity.openid && x.TENANT_CODE == entity.tenantCode, filter, "Nav_RechargeCard"); var recharge = member.Nav_RechargeCard; var orgId = member.ORG_ID; var codeRuleService = APT.Infrastructure.Api.ServiceLocator.Instance.GetService(); SystemCodeFilter codeFilter = new SystemCodeFilter(); codeFilter.CodeType = (int)PFCodeRuleType.电卡充值订单号; codeFilter.Count = 1; codeFilter.OrgId = orgId; var code = codeRuleService.NewGenSerialByTenant(codeFilter, entity.tenantCode); var macId = string.Empty; var wxPaykey = string.Empty; if (tenant != null && tenant.MCH_ID != null && tenant.WXPAYKEY != null) { macId = tenant.MCH_ID; wxPaykey = tenant.WXPAYKEY; } else throw new Exception("商户ID或支付Key未配置!"); var res = WeChatPayHelper.Unifiedorder(entity.openid, (int)(Convert.ToDouble(entity.rechargeAmount) * (double)100), code, "DK", macId, wxPaykey); var newOrder = new T_SO_RECHARGE_ORDER() { ORG_ID = orgId, RECHARGE_CARD_ID = recharge.ID, AMOUNT = entity.fullAmount, TIME = DateTime.Now, ORDER_STATUS = 0, CODE = code }; this.AddEntityByTenant(newOrder, entity.tenantCode); return res; }); } /// /// 获取充值金额 /// /// /// [HttpGet, Route("GetRechargeAmount")] public JsonActionResult GetRechargeAmount(string tenantCode) { return SafeExecute(() => { List textValues = new List(); BaseFilter filter = new BaseFilter(); filter.IsSpecifyDb = true; filter.IgnoreOrgRule = true; var rechargeSets = this.GetEntities(null, filter).OrderBy(x => x.AMOUNT); var tenant = this.GetEntity(x => x.CODE == tenantCode);//查找运营商 filter.SpecifyTenant = tenantCode; filter.IgnoreOrgRule = false; filter.OrgId = tenant.ID;//切换运营商 var activities = this.GetEntity(x => x.START_TIME <= DateTime.Now && x.END_TIME >= DateTime.Now, filter, "Nav_ActivityDetail"); foreach (var rechargeSet in rechargeSets) { var data = new TextValue() { text = rechargeSet.AMOUNT.ToString() + "元", value = rechargeSet.AMOUNT }; if (activities != null && activities.Nav_ActivityDetail != null) { var detail = activities.Nav_ActivityDetail.OrderByDescending(x => x.RECHARGE_AMOUNT) .FirstOrDefault(x => x.RECHARGE_AMOUNT <= rechargeSet.AMOUNT); if (detail != null) { data.text = rechargeSet.AMOUNT.ToString() + "元"; data.value = (rechargeSet.AMOUNT - detail.DISCOUNTED_AMOUNT); data.full = detail.RECHARGE_AMOUNT; data.reduce = detail.DISCOUNTED_AMOUNT; } } textValues.Add(data); } return textValues; }); } /// /// 小程序首页 /// /// [HttpGet, Route("GetHomePage")] public JsonActionResult GetHomePage() { return SafeExecute(() => { dynamic result = new ExpandoObject(); BaseFilter filter = new BaseFilter(new Guid(LibUtils.ToString(ConfigurationManager.WexinSettings["OrgId"]).ToString())); filter.IgnoreOrgRule = true; var config = this.GetEntities(null, filter, "Nav_TopPicture.Nav_PictureFiles.Nav_ImgFile.Nav_File", "Nav_LowPicture.Nav_PictureFiles.Nav_ImgFile.Nav_File").FirstOrDefault(); List topPs = new List(); List lowPs = new List(); List notices = new List(); if (config != null && config.Nav_TopPicture != null) { var topPics = config.Nav_TopPicture.Nav_PictureFiles; foreach (var topPic in topPics) { var data = topPic.Nav_ImgFile.Nav_File.FILE_DATA; topPs.Add(data); } } if (config != null && config.Nav_LowPicture != null) { var lowPics = config.Nav_LowPicture.Nav_PictureFiles; foreach (var lowPic in lowPics) { var data = lowPic.Nav_ImgFile.Nav_File.FILE_DATA; lowPs.Add(data); } } result.topPs = topPs; result.lowPs = lowPs; var notics = this.GetEntities(null, filter, "Nav_NoticeDetails"); if (notics != null) { var notic = notics.OrderByDescending(x => x.CREATE_TIME).FirstOrDefault(); notices.AddRange(notic.Nav_NoticeDetails.Select(x => x.TEXT)); } result.notices = notices; return result; }); } /// /// 常见问题 /// /// [HttpGet, Route("GetCommonQuestion")] public JsonActionResult GetCommonQuestion() { return SafeExecute(() => { BaseFilter filter = new BaseFilter(new Guid(LibUtils.ToString(ConfigurationManager.WexinSettings["OrgId"]).ToString())); var questions = this.GetEntities(null, filter); List commonQuestions = new List(); foreach (var question in questions) { commonQuestions.Add(new CommonQuestion { question = question.QUESTION, answer = question.ANSWER }); } return commonQuestions; }); } /// /// 获取充值记录 /// /// /// [HttpPost, Route("GetRechargeRecord")] public PagedActionResult GetRechargeRecord([FromBody] OrderByPage orderByPage) { return SafeGetPagedData((res) => { BasePageFilter filter = new BasePageFilter(); filter.IsMultipleDb = true; filter.IgnoreOrgRule = true; filter.PageIndex = orderByPage.pageIndex; filter.Limit = orderByPage.limit; filter.Sort = "CREATE_TIME"; filter.Order = DbOrder.DESC; var member = this.GetEntity(x => x.OPENID == orderByPage.openid, filter, "Nav_RechargeCard"); if (member == null) { throw (new Exception("暂无充值订单!")); } var orders = this.GetOrderPageEntities(x => x.RECHARGE_CARD_ID == member.Nav_RechargeCard.ID, filter); List chargOrders = new List(); if (orders != null && orders.Data.Any()) { foreach (var order in orders.Data) { RechargeOrder rechargOrder = new RechargeOrder() { code = order.CODE, status = order.ORDER_STATUS, rechargeAmount = order.AMOUNT, time = order.TIME }; chargOrders.Add(rechargOrder); } } res.Data = chargOrders; res.TotalCount = orders.TotalCount; }); } /// /// 订单支付 /// /// /// [HttpPost, Route("Payment")] public JsonActionResult Payment([FromBody] PayInfo entity) { return SafeExecute(() => { var tenantCode = entity.code.Substring(2, 4); var tenant = this.GetEntity(x => x.CODE == tenantCode);//查找运营商 if (entity.payType == (int)FCPayType.电卡支付) { BaseFilter filter = new BaseFilter(); filter.IsSpecifyDb = true; filter.SpecifyTenant = tenantCode; filter.OrgId = tenant.ID; var member = this.GetEntity(x => x.OPENID == entity.openid, filter, "Nav_RechargeCard"); if (member == null) throw (new Exception("暂未开通电卡!")); if (member.Nav_RechargeCard.BALANCE < entity.payAmount) throw (new Exception("电卡余额不足,请先充值!")); var rechargeCard = member.Nav_RechargeCard; rechargeCard.BALANCE -= entity.payAmount; this.UpdateEntityByTenant(rechargeCard, tenantCode, "BALANCE");//电卡扣除 var order = this.GetEntity(x => x.CODE == entity.code && x.OPEN_ID == entity.openid, filter);//查询订单 order.ORDER_STATUS = (int)FCOrderStatus.已付款; order.PAY_TYPE = entity.payType; this.UpdateEntityByTenant(order, tenantCode);//更新订单状态 return true; } else //微信支付 { BaseFilter filter = new BaseFilter(); filter.IsSpecifyDb = true; filter.SpecifyTenant = tenantCode; filter.OrgId = tenant.ID; var order = this.GetEntity(x => x.CODE == entity.code && x.OPEN_ID == entity.openid, filter);//查询订单 // var tenant = this.GetEntity(x => x.CODE == entity.code.Substring(2, 4), baseFilter); var macId = string.Empty; var wxPaykey = string.Empty; if (tenant != null && tenant.MCH_ID != null && tenant.WXPAYKEY != null) { macId = tenant.MCH_ID; wxPaykey = tenant.WXPAYKEY; } else throw new Exception("商户ID或支付Key未配置!"); var res = WeChatPayHelper.Unifiedorder(entity.openid, (int)(Convert.ToDouble(entity.payAmount) * (double)100), order.CODE, "WX", macId, wxPaykey);//调用微信下单 return res; } }); } #region 运营商信息 [HttpPost, Route("GetTenant")] public PagedActionResult GetTenant([FromBody] OrderByPage orderByPage) { return SafeGetPagedData((res) => { IEnumerable tenantDatas = new List(); var count = 0; IEnumerable applyedTenant = null;//归属运营商 IEnumerable applyTenant = null;//审核中 var baseFilter = new BaseFilter(); baseFilter.IsMultipleDb = true; baseFilter.IgnoreOrgRule = true; var applyeds = this.GetEntities(x => x.Nav_Approval.OPEN_ID == orderByPage.openid && x.IS_APPROVAL, baseFilter, "Nav_Approval");//已审核非离职人员 applyedTenant = applyeds.Select(x => x.Nav_Approval.TENANT_CODE); var applyings = this.GetEntities(x => x.OPEN_ID == orderByPage.openid && x.APPROVAL_STATUS == (int)MTApprovalEnum.待审核, baseFilter); applyTenant = applyings.Select(x => x.TENANT_CODE); var filter = new BasePageFilter(); filter.PageIndex = orderByPage.pageIndex; filter.Limit = orderByPage.limit; filter.IgnoreOrgRule = true; filter.Sort = "CREATE_TIME"; filter.Order = DbOrder.ASC; if (orderByPage.isApplyed)//归属运营商 { if (applyedTenant != null && applyedTenant.Any()) { var tenants = this.GetOrderPageEntities(x => x.ENABLE_STATUS == (int)FMEnableStatusEnum.启用 && applyedTenant.Contains(x.CODE) && (x.NAME.Contains(orderByPage.keyword) || x.CODE.Contains(orderByPage.keyword)) &&x.PROJECT_TYPE == (int)OPProjectTypeEnum.充电桩, filter); tenantDatas = tenants.Data; count = tenants.TotalCount; } } else { var tenants = this.GetOrderPageEntities(x => x.ENABLE_STATUS == (int)FMEnableStatusEnum.启用 && !applyedTenant.Contains(x.CODE) && (x.NAME.Contains(orderByPage.keyword) || x.CODE.Contains(orderByPage.keyword)) && x.PROJECT_TYPE == (int)OPProjectTypeEnum.充电桩, filter); tenantDatas = tenants.Data; count = tenants.TotalCount; } List tenantInfos = new List(); foreach (var tenant in tenantDatas) { WxTenant wxTenant = new WxTenant() { orgId = tenant.ID.ToString(), tenantCode = tenant.CODE, tenantName = tenant.NAME, status = applyedTenant.Contains(tenant.CODE) ? 2 : (applyTenant.Contains(tenant.CODE) ? 1 : 0) }; tenantInfos.Add(wxTenant); } res.Data = tenantInfos; res.TotalCount = count; }); } #endregion #region 申请成为维护人员 [HttpPost, Route("ApplyMaintain")] public JsonActionResult ApplyMaintain([FromBody] ApplicationInfo entity) { return SafeExecute(() => { BaseFilter filter = new BaseFilter(); filter.IsSpecifyDb = true; filter.SpecifyTenant = entity.tenantCode; filter.OrgId = new Guid(entity.orgId); var approvaled = this.GetEntity(x => x.Nav_Approval.OPEN_ID == entity.openid &&x.IS_APPROVAL, filter); if (approvaled != null) throw new Exception("当前用户已是运维人员!"); var approval = this.GetEntity(x => x.OPEN_ID == entity.openid && x.APPROVAL_STATUS == (int)MTApprovalEnum.待审核 && x.TENANT_CODE == entity.tenantCode, filter); if (approval != null) throw new Exception("审核中!"); else { BaseFilter baseFilter = new BaseFilter(); baseFilter.IgnoreOrgRule = true; baseFilter.IsSpecifyDb = true; var client = this.GetEntity(x => x.OPEN_ID == entity.openid, baseFilter, "NavClient"); approval = new T_MT_MAINTAIN_APPROVAL() { ORG_ID = new Guid(entity.orgId), OPEN_ID = entity.openid, CLIENT_ID = client.NavClient.ID.ToString(), NAME = client.NavClient.NICK_NAME, TEL = client.NavClient.TEL, TENANT_CODE = entity.tenantCode, REMARK = entity.remark }; this.AddEntityByTenant(approval, entity.tenantCode); } return true; }); } #endregion #region 获取是哪几家运营商运维人员 [HttpGet, Route("GetOperatorInfo")] public JsonActionResult GetOperatorInfo(string openid) { return SafeExecute(() => { #region 用户信息 WeiUserUpdateModel result = new WeiUserUpdateModel(); if (string.IsNullOrEmpty(openid)) throw (new Exception("参数openid为空")); var weChatOpen = this.GetEntity(x => x.OPEN_ID == openid, "NavClient"); if (weChatOpen == null) throw (new Exception("用户不存在")); var user = weChatOpen.NavClient; result.openid = openid; UserInfo userInfo = new UserInfo() { id = user.ID.ToString(), name = user.NAME, nickName = user.NICK_NAME, tel = user.TEL, email = user.EMAIL, idcard = user.ID_CARD, addr = user.ADDR, avatarUrl = user.AVATAURL }; result.UserInfo = userInfo; #endregion #region 运维信息 BaseFilter filter = new BaseFilter(); filter.IgnoreOrgRule = true; filter.IsMultipleDb = true; var operations = this.GetEntities(x => x.Nav_Approval.OPEN_ID == openid && x.IS_APPROVAL, filter, "Nav_Approval.Nav_Person");//已审核非离职人员 if (operations != null && operations.Any()) { result.isOperator = true; var tenantCodes = operations.Select(x => x.Nav_Approval.TENANT_CODE); BaseFilter baseFilter = new BaseFilter(); baseFilter.IgnoreOrgRule = true; baseFilter.IsSpecifyDb = true; var tenants = this.GetEntities(x => tenantCodes.Contains(x.CODE), baseFilter); var TenantInfos = new List(); foreach (var tenant in tenants) { var TenantInfo = new WxTenant() { tenantCode = tenant.CODE, tenantName = tenant.NAME }; TenantInfos.Add(TenantInfo); } result.TenantInfos = TenantInfos; } else result.isOperator = false; #endregion return result; }); } #endregion #region 获取待处理任务数 [HttpGet, Route("GetTaskNumber")] public JsonActionResult GetTaskNumber(string openid) { return SafeExecute(() => { BasePageFilter filter = new BasePageFilter(); filter.PageIndex = 1; filter.Limit = 10; filter.IsMultipleDb = true; filter.IgnoreOrgRule = true; var operations = this.GetEntities(x => x.Nav_Approval.OPEN_ID == openid &&x.IS_APPROVAL, filter, "Nav_Approval.Nav_Person");//已审核非离职人员 var persons = operations.Select(x => x.Nav_Approval.RELATION_PERSON_ID); var jobs1 = this.GetOrderPageEntities(x => persons.Contains(x.CONCERT_PERSON_ID) && x.ACTIVATE_STATUS == (int)MTActivateEnum.未完成, filter);//激活单 var jobs2 = this.GetOrderPageEntities(x => persons.Contains(x.CONCERT_PERSON_ID) && x.MAINTENANCE_STATUS == (int)MTMaintenanceEnum.未解决, filter);//维修单 var jobs3 = this.GetOrderPageEntities(x => persons.Contains(x.CONCERT_PERSON_ID) && (x.CURING_STATUS == (int)MTCuringEnum.未保养|| x.CURING_STATUS == (int)MTCuringEnum.保养中), filter);//养护单 List taskNumbers = new List(); taskNumbers.Add(new TaskNumber() { orderType = 0, count = jobs1.TotalCount }); taskNumbers.Add(new TaskNumber() { orderType = 1, count = jobs2.TotalCount }); taskNumbers.Add(new TaskNumber() { orderType = 2, count = jobs3.TotalCount }); return taskNumbers; }); } #endregion #region 后台调用接口 /// /// 获取计费规则 /// /// /// /// /// [HttpGet, Route("GetBillingRule")] public JsonActionResult GetBillingRule() { return SafeExecute(() => { BaseFilter filter = new BaseFilter(); filter.IgnoreOrgRule = true; var rule = GetEntity(null, filter, "Nav_Version", "Nav_Versions"); return rule; }); } #endregion } }