You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

167 lines
5.9 KiB
C#

using NLog;
using POSV.Utils;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Media;
using System.Text;
using System.Text.RegularExpressions;
namespace POSV.Voice.Pay
{
public class PayVoicePlay
{
//================= construct function ==================
#region construct function
/// <summary>
/// construct function
/// </summary>
public PayVoicePlay()
{
}
#endregion
//================== private fields =====================
#region fields
/// <summary>
/// LOG
/// </summary>
private static Logger logger = LogManager.GetCurrentClassLogger();
#endregion
//================== public function ======================
#region PlayReceiveMoney
/// <summary>
/// 播放支付宝、微信收款到账语音
/// </summary>
/// <param name="receiveType"></param>
/// <param name="amountStr"></param>
public static void PlayReceiveMoney(PayTypeEnum receiveType, decimal amount)
{
try
{
List<Stream> soundList = new List<Stream>();
switch (receiveType)
{
case PayTypeEnum.Alipay:
{
soundList.Add(POSV.Voice.Resource.);
}
break;
case PayTypeEnum.WeiXinPay:
{
soundList.Add(POSV.Voice.Resource.);
}
break;
#region subin 2023-07-07 add
case PayTypeEnum.AllinPay:
{
soundList.Add(POSV.Voice.Resource.);
}
break;
#endregion
}
var amountArr = MoneyToUpper(amount).ToArray();
foreach (var a in amountArr)
{
switch (a)
{
case '零':
soundList.Add(POSV.Voice.Resource.);
break;
case '壹':
soundList.Add(POSV.Voice.Resource.);
break;
case '贰':
soundList.Add(POSV.Voice.Resource.);
break;
case '叁':
soundList.Add(POSV.Voice.Resource.);
break;
case '肆':
soundList.Add(POSV.Voice.Resource.);
break;
case '伍':
soundList.Add(POSV.Voice.Resource.);
break;
case '陆':
soundList.Add(POSV.Voice.Resource.);
break;
case '柒':
soundList.Add(POSV.Voice.Resource.);
break;
case '捌':
soundList.Add(POSV.Voice.Resource.);
break;
case '玖':
soundList.Add(POSV.Voice.Resource.);
break;
case '拾':
soundList.Add(POSV.Voice.Resource.);
break;
case '佰':
soundList.Add(POSV.Voice.Resource.);
break;
case '仟':
soundList.Add(POSV.Voice.Resource.);
break;
case '亿':
soundList.Add(POSV.Voice.Resource.亿);
break;
case '角':
soundList.Add(POSV.Voice.Resource.);
break;
case '分':
soundList.Add(POSV.Voice.Resource.);
break;
case '元':
soundList.Add(POSV.Voice.Resource.);
break;
case '万':
soundList.Add(POSV.Voice.Resource.);
break;
}
}
SoundPlayer simpleSound = new SoundPlayer();
foreach (var sound in soundList)
{
simpleSound.Stream = sound;
simpleSound.PlaySync();
}
}
catch (Exception ex)
{
logger.Error(ex, "播放收款金额异常");
}
}
#endregion
#region MoneyToUpper
/// <summary>
/// 金额转换成中文大写金额
/// </summary>
/// <param name="LowerMoney">eg:10.74</param>
/// <returns></returns>
public static string MoneyToUpper(decimal lowerMoney)
{
lowerMoney = Convert.ToDecimal(StringUtils.FormatDataNoDigit(lowerMoney));
var s = lowerMoney.ToString("#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A");
var d = Regex.Replace(s, @"((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\.]|$))))|((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[\.]|$))))", "${b}${z}");
var r = Regex.Replace(d, ".", m => "负元空零壹贰叁肆伍陆柒捌玖空空空空空空空分角拾佰仟万亿兆京垓秭穰"[m.Value[0] - '-'].ToString());
return r;
}
#endregion
}
}