d_sms_service/APT.MicroApi/APT.OP.WebApi/Controllers/Api/ClientInfoController.cs
2024-10-28 13:45:58 +08:00

879 lines
42 KiB
C#

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<T_OP_CLIENT>
{
/// <summary>
///更新用户信息
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
[HttpPost, Route("UpdateClient")]
public JsonActionResult<dynamic> UpdateClient([FromBody] WeiUserUpdateModel entity)
{
return SafeExecute<dynamic>(() =>
{
dynamic result = new ExpandoObject();
var userInfo = this.GetEntity<T_OP_CLINET_OPENID>(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;
});
}
/// <summary>
/// 获取用户信息
/// </summary>
/// <param name="openid"></param>
/// <returns></returns>
[HttpGet, Route("GetClient")]
public JsonActionResult<WeiUserUpdateModel> GetClient(string openid)
{
return base.SafeExecute(() =>
{
WeiUserUpdateModel result = new WeiUserUpdateModel();
if (string.IsNullOrEmpty(openid))
throw (new Exception("参数openid为空"));
var weChatOpen = this.GetEntity<T_OP_CLINET_OPENID>(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;
});
}
/// <summary>
/// 获取用户手机号
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
[HttpPost, Route("GetPhone")]
public JsonActionResult<WeiUserUpdateModel> GetPhone([FromBody] GetPhone getPhone)
{
return base.SafeExecute(() =>
{
WeiUserUpdateModel result = new WeiUserUpdateModel();
var session_key = CsRedisManager.StringGet<string>("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<T_OP_CLINET_OPENID>(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;
});
}
/// <summary>
/// 发送手机验证码
/// </summary>
/// <returns></returns>
[HttpPost, Route("PhoneVerifyCode")]
public JsonActionResult<bool> PhoneVerifyCode([FromBody] WeChatPhone entity)
{
return SafeExecute<bool>(() =>
{
string code = VerifyCodeHelper.GetSingleObj().CreateVerifyCode(VerifyCodeHelper.VerifyCodeType.NumberVerifyCode, 6);
Dictionary<string, string> dicNCode = new Dictionary<string, string>();
dicNCode.Add("time", DateTime.Now.AddSeconds(600).ToString());
dicNCode.Add("code", code);
var redisManage = ServiceLocator.Instance.GetService<RedisManager>();
CsRedisManager.StringSet(entity.openid, dicNCode);
var serice = ServiceLocator.Instance.GetService<IOPSmsService>();
return serice.SendMessage(entity.phone, code);
});
}
/// <summary>
/// 验证手机验证码
/// </summary>
/// <param name="openid"></param>
/// <param name="phoneNumber"></param>
/// <returns></returns>
[HttpPost, Route("CheckPhoneCode")]
public JsonActionResult<bool> CheckPhoneCode([FromBody] WeChatPhone entity)
{
return SafeExecute<bool>(() =>
{
var verCode = CsRedisManager.StringGet<Dictionary<string, string>>(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;
});
}
/// <summary>
/// 获取我的电卡列表/购买电卡列表(ignore)
/// </summary>
/// <param name="openid"></param>
/// <returns></returns>
[HttpPost, Route("GetElectricCard")]
public PagedActionResult<dynamic> GetElectricCard([FromBody] SearchMemberCard searchMemberCard)
{
return SafeGetPagedData<dynamic>((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<T_FC_MEMBER>(x => x.OPENID == searchMemberCard.openid
&& x.TENANT_NAME.Contains(searchMemberCard.keyword), filter, "Nav_RechargeCard");//会员卡
var cards = new List<RechargeCard>();
BaseFilter baseFilter = new BaseFilter();
baseFilter.IsMultipleDb = true;
baseFilter.IgnoreOrgRule = true;
var fullminus = this.GetEntities<T_FC_MEMBER_ACTIVITY>(x => x.START_TIME <= DateTime.Now
&& x.END_TIME >= DateTime.Now, baseFilter, "Nav_ActivityDetail");//满减活动表
var stations = this.GetEntities<T_CP_CHARGING_STATION>(null, baseFilter);//充电站
if (!searchMemberCard.isbuy)//购买电卡列表
{
var existTenants = this.GetEntities<T_FC_MEMBER>(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<T_OP_TENANT>(x => !existTenants.Contains(x.CODE)
&& x.NAME.Contains(searchMemberCard.keyword)&& x.PROJECT_TYPE ==(int)OPProjectTypeEnum., baseFilter1);//未购买运营商
foreach (var tenant in tenants.Data)
{
List<Fullminus> actities = new List<Fullminus>();
List<string> useRange = new List<string>();
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<Fullminus> actities = new List<Fullminus>();
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;
}
});
}
/// <summary>
/// 购买电卡
/// </summary>
/// <param name="openid"></param>
/// <returns></returns>
[HttpPost, Route("BuyMemberCard")]
public JsonActionResult<dynamic> BuyMemberCard([FromBody] BuyCard buyCard)
{
return SafeExecute<dynamic>(() =>
{
var tenant = this.GetEntity<T_OP_TENANT>(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<T_FC_MEMBER>(x => x.OPENID == buyCard.openid, filter, "Nav_RechargeCard");//查找会员
RechargeCard rechargeCard = new RechargeCard();
if (member == null)//创建会员
{
//var org = this.GetEntity<T_FM_ORGANIZATION>(x => x.TENANT_CODE == buyCard.tenantCode, filter);
var codeRuleService = APT.Infrastructure.Api.ServiceLocator.Instance.GetService<IPFCodeRuleService>();
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<Fullminus> actities = new List<Fullminus>();
List<string> useRange = new List<string>();
var tenantStations = this.GetEntities<T_CP_CHARGING_STATION>(null, filter);//充电站
var memberActivity = this.GetEntity<T_FC_MEMBER_ACTIVITY>(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<Fullminus> actities = new List<Fullminus>();
List<string> useRange = new List<string>();
var tenantStations = this.GetEntities<T_CP_CHARGING_STATION>(null, filter);//充电站
var memberActivity = this.GetEntity<T_FC_MEMBER_ACTIVITY>(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;
});
}
/// <summary>
/// 充值
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost, Route("Recharge")]
public JsonActionResult<dynamic> Recharge([FromBody] MemberInfo entity)
{
return SafeExecute<dynamic>(() =>
{
var tenant = this.GetEntity<T_OP_TENANT>(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<T_FC_MEMBER>(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<IPFCodeRuleService>();
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;
});
}
/// <summary>
/// 获取充值金额
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpGet, Route("GetRechargeAmount")]
public JsonActionResult<dynamic> GetRechargeAmount(string tenantCode)
{
return SafeExecute<dynamic>(() =>
{
List<TextValue> textValues = new List<TextValue>();
BaseFilter filter = new BaseFilter();
filter.IsSpecifyDb = true;
filter.IgnoreOrgRule = true;
var rechargeSets = this.GetEntities<T_OP_RECHARGE_SETTING>(null, filter).OrderBy(x => x.AMOUNT);
var tenant = this.GetEntity<T_OP_TENANT>(x => x.CODE == tenantCode);//查找运营商
filter.SpecifyTenant = tenantCode;
filter.IgnoreOrgRule = false;
filter.OrgId = tenant.ID;//切换运营商
var activities = this.GetEntity<T_FC_MEMBER_ACTIVITY>(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;
});
}
/// <summary>
/// 小程序首页
/// </summary>
/// <returns></returns>
[HttpGet, Route("GetHomePage")]
public JsonActionResult<dynamic> GetHomePage()
{
return SafeExecute<dynamic>(() =>
{
dynamic result = new ExpandoObject();
BaseFilter filter = new BaseFilter(new Guid(LibUtils.ToString(ConfigurationManager.WexinSettings["OrgId"]).ToString()));
filter.IgnoreOrgRule = true;
var config = this.GetEntities<T_FM_BASE_CONFIG>(null, filter, "Nav_TopPicture.Nav_PictureFiles.Nav_ImgFile.Nav_File",
"Nav_LowPicture.Nav_PictureFiles.Nav_ImgFile.Nav_File").FirstOrDefault();
List<byte[]> topPs = new List<byte[]>();
List<byte[]> lowPs = new List<byte[]>();
List<string> notices = new List<string>();
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<T_OP_NOTICE>(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;
});
}
/// <summary>
/// 常见问题
/// </summary>
/// <returns></returns>
[HttpGet, Route("GetCommonQuestion")]
public JsonActionResult<dynamic> GetCommonQuestion()
{
return SafeExecute<dynamic>(() =>
{
BaseFilter filter = new BaseFilter(new Guid(LibUtils.ToString(ConfigurationManager.WexinSettings["OrgId"]).ToString()));
var questions = this.GetEntities<T_OP_COMMON_QUESTION>(null, filter);
List<CommonQuestion> commonQuestions = new List<CommonQuestion>();
foreach (var question in questions)
{
commonQuestions.Add(new CommonQuestion { question = question.QUESTION, answer = question.ANSWER });
}
return commonQuestions;
});
}
/// <summary>
/// 获取充值记录
/// </summary>
/// <param name="orderByPage"></param>
/// <returns></returns>
[HttpPost, Route("GetRechargeRecord")]
public PagedActionResult<dynamic> GetRechargeRecord([FromBody] OrderByPage orderByPage)
{
return SafeGetPagedData<dynamic>((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<T_FC_MEMBER>(x => x.OPENID == orderByPage.openid, filter, "Nav_RechargeCard");
if (member == null)
{
throw (new Exception("暂无充值订单!"));
}
var orders = this.GetOrderPageEntities<T_SO_RECHARGE_ORDER>(x => x.RECHARGE_CARD_ID == member.Nav_RechargeCard.ID, filter);
List<RechargeOrder> chargOrders = new List<RechargeOrder>();
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;
});
}
/// <summary>
/// 订单支付
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost, Route("Payment")]
public JsonActionResult<dynamic> Payment([FromBody] PayInfo entity)
{
return SafeExecute<dynamic>(() =>
{
var tenantCode = entity.code.Substring(2, 4);
var tenant = this.GetEntity<T_OP_TENANT>(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<T_FC_MEMBER>(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<T_SO_CHARGING_ORDER>(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<T_SO_CHARGING_ORDER>(x => x.CODE == entity.code && x.OPEN_ID == entity.openid, filter);//查询订单 // var tenant = this.GetEntity<T_OP_TENANT>(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<dynamic> GetTenant([FromBody] OrderByPage orderByPage)
{
return SafeGetPagedData<dynamic>((res) =>
{
IEnumerable<T_OP_TENANT> tenantDatas = new List<T_OP_TENANT>();
var count = 0;
IEnumerable<string> applyedTenant = null;//归属运营商
IEnumerable<string> applyTenant = null;//审核中
var baseFilter = new BaseFilter();
baseFilter.IsMultipleDb = true;
baseFilter.IgnoreOrgRule = true;
var applyeds = this.GetEntities<T_MT_MAINTAIN_PERSON>(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<T_MT_MAINTAIN_APPROVAL>(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<T_OP_TENANT>(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<T_OP_TENANT>(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<WxTenant> tenantInfos = new List<WxTenant>();
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<dynamic> ApplyMaintain([FromBody] ApplicationInfo entity)
{
return SafeExecute<dynamic>(() =>
{
BaseFilter filter = new BaseFilter();
filter.IsSpecifyDb = true;
filter.SpecifyTenant = entity.tenantCode;
filter.OrgId = new Guid(entity.orgId);
var approvaled = this.GetEntity<T_MT_MAINTAIN_PERSON>(x => x.Nav_Approval.OPEN_ID == entity.openid
&&x.IS_APPROVAL, filter);
if (approvaled != null)
throw new Exception("当前用户已是运维人员!");
var approval = this.GetEntity<T_MT_MAINTAIN_APPROVAL>(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<T_OP_CLINET_OPENID>(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<dynamic> GetOperatorInfo(string openid)
{
return SafeExecute<dynamic>(() =>
{
#region
WeiUserUpdateModel result = new WeiUserUpdateModel();
if (string.IsNullOrEmpty(openid))
throw (new Exception("参数openid为空"));
var weChatOpen = this.GetEntity<T_OP_CLINET_OPENID>(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<T_MT_MAINTAIN_PERSON>(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<T_OP_TENANT>(x => tenantCodes.Contains(x.CODE), baseFilter);
var TenantInfos = new List<WxTenant>();
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<dynamic> GetTaskNumber(string openid)
{
return SafeExecute<dynamic>(() =>
{
BasePageFilter filter = new BasePageFilter();
filter.PageIndex = 1;
filter.Limit = 10;
filter.IsMultipleDb = true;
filter.IgnoreOrgRule = true;
var operations = this.GetEntities<T_MT_MAINTAIN_PERSON>(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<T_CP_CHARGING_ACTIVATE_JOB>(x => persons.Contains(x.CONCERT_PERSON_ID) &&
x.ACTIVATE_STATUS == (int)MTActivateEnum., filter);//激活单
var jobs2 = this.GetOrderPageEntities<T_MT_MAINTENANCE_PLAN>(x => persons.Contains(x.CONCERT_PERSON_ID) &&
x.MAINTENANCE_STATUS == (int)MTMaintenanceEnum., filter);//维修单
var jobs3 = this.GetOrderPageEntities<T_MT_CURING_PLAN>(x => persons.Contains(x.CONCERT_PERSON_ID) &&
(x.CURING_STATUS == (int)MTCuringEnum.|| x.CURING_STATUS == (int)MTCuringEnum.), filter);//养护单
List<TaskNumber> taskNumbers = new List<TaskNumber>();
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
/// <summary>
/// 获取计费规则
/// </summary>
/// <param name="order"></param>
/// <returns></returns>
/// /// <summary>
[HttpGet, Route("GetBillingRule")]
public JsonActionResult<T_OP_BILLING_RULE> GetBillingRule()
{
return SafeExecute(() =>
{
BaseFilter filter = new BaseFilter();
filter.IgnoreOrgRule = true;
var rule = GetEntity<T_OP_BILLING_RULE>(null, filter, "Nav_Version", "Nav_Versions");
return rule;
});
}
#endregion
}
}