600 lines
25 KiB
C#
600 lines
25 KiB
C#
|
|
using Com.Alipay;
|
|||
|
|
using Com.Alipay.Business;
|
|||
|
|
using Com.Alipay.Domain;
|
|||
|
|
using Com.Alipay.Model;
|
|||
|
|
using dccdc.BLL;
|
|||
|
|
using dccdc.Models;
|
|||
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Linq;
|
|||
|
|
using System.Text;
|
|||
|
|
using System.Threading;
|
|||
|
|
using System.Web;
|
|||
|
|
using System.Web.Mvc;
|
|||
|
|
using WxPayAPI;
|
|||
|
|
using static dccdc.Controllers.DictionariesController;
|
|||
|
|
|
|||
|
|
namespace dccdc.Controllers
|
|||
|
|
{
|
|||
|
|
public class Charge3Controller : Controller
|
|||
|
|
{
|
|||
|
|
// GET: Charge3
|
|||
|
|
public ActionResult Index()
|
|||
|
|
{
|
|||
|
|
ViewBag.bm = (Session["loginUser"] as Models.ERPUser).Department;
|
|||
|
|
ViewBag.jfbm = new SelectList(new ERPBuMenBll().GetAllList(""), "bumenname", "bumenname");
|
|||
|
|
ViewBag.jffs = new SelectList(new List<Droplist> { new Droplist { Value = "现金", Title = "现金" }, new Droplist { Value = "转账", Title = "转账" }, new Droplist { Value = "微信", Title = "微信" }, new Droplist { Value = "支付宝", Title = "支付宝" }, new Droplist { Value = "医保卡", Title = "医保卡" } }, "Value", "Title");
|
|||
|
|
return View();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public ActionResult getSFLBData(string start, string end, string jfbm, string where, string print)
|
|||
|
|
{
|
|||
|
|
if (string.IsNullOrEmpty(start) || string.IsNullOrEmpty(end))
|
|||
|
|
return Json(null);
|
|||
|
|
var bll = new chargeBll();
|
|||
|
|
if (string.IsNullOrEmpty(print))
|
|||
|
|
print = "未打印";
|
|||
|
|
var result = bll.GetAllList2(start, end, jfbm, where, print);
|
|||
|
|
return Json(new { Rows = result });
|
|||
|
|
}
|
|||
|
|
public string getSFLBDataCount()
|
|||
|
|
{
|
|||
|
|
var bll = new invoice_printBll();
|
|||
|
|
var result = bll.GetPersonCount((Session["loginUser"] as Models.ERPUser).TrueName);
|
|||
|
|
StringBuilder result1 = new StringBuilder();
|
|||
|
|
foreach (string key in result.Keys)
|
|||
|
|
{
|
|||
|
|
result1.Append(key + ":【" + result[key] + "】 ");
|
|||
|
|
}
|
|||
|
|
return result1.ToString();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public ActionResult getSFLB2Data(string chargeid)
|
|||
|
|
{
|
|||
|
|
if (string.IsNullOrEmpty(chargeid))
|
|||
|
|
return Json(null);
|
|||
|
|
var bll = new chargeBll();
|
|||
|
|
var result = bll.GetAllList2List(chargeid);
|
|||
|
|
//合并打印项目
|
|||
|
|
var result2 = result.Where(t => (t.pid == null || t.pid <= 0)).ToList();
|
|||
|
|
foreach (charge_detailModel model in result)
|
|||
|
|
{
|
|||
|
|
if (model.pid > 0)
|
|||
|
|
{
|
|||
|
|
foreach (charge_detailModel model2 in result2)
|
|||
|
|
{
|
|||
|
|
if (model2.id == model.pid)
|
|||
|
|
{
|
|||
|
|
model2.money += model.money;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
return Json(new { Rows = result2 });
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public string getInvoice(string sort)
|
|||
|
|
{
|
|||
|
|
var bll = new chargeBll();
|
|||
|
|
var result = bll.getInvoice((Session["loginUser"] as Models.ERPUser).TrueName, sort);
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public string getzfstate(string id)
|
|||
|
|
{
|
|||
|
|
var bll = new chargeBll();
|
|||
|
|
var cm = bll.getModel(id);
|
|||
|
|
int state;
|
|||
|
|
var wxresult = Query(cm.zfid, out state);
|
|||
|
|
Log.Debug("MicroPay", wxresult.ToXml());
|
|||
|
|
if(state==1)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
bll.UpdateZfzt(cm.zfid);
|
|||
|
|
return Newtonsoft.Json.JsonConvert.SerializeObject(new { State = 1, Message = "订单支付成功!" });
|
|||
|
|
}
|
|||
|
|
else if(state==2)
|
|||
|
|
{
|
|||
|
|
return Newtonsoft.Json.JsonConvert.SerializeObject(new { State = 2, Message = "订单支付中请稍后再查询!" });
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return Newtonsoft.Json.JsonConvert.SerializeObject(new { State = 0, Message = "订单支付失败请重新支付!" });
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public ActionResult opPrint(string fpdid, string fplx, string fpbh, string jfid, string jfry, string jfdw, string jffs, string jfbm, string jfje, string bz, string zfm, string items)
|
|||
|
|
{
|
|||
|
|
if (string.IsNullOrEmpty(fpbh) || string.IsNullOrEmpty(jfry))
|
|||
|
|
return Json(null);
|
|||
|
|
var bll = new chargeBll();
|
|||
|
|
var cm = bll.getModel(jfid);
|
|||
|
|
cm.method = jffs;
|
|||
|
|
if (cm.status == "未缴费" && (cm.method == "微信" || cm.method == "支付宝"))
|
|||
|
|
{
|
|||
|
|
if (string.IsNullOrEmpty(cm.zfid))
|
|||
|
|
{
|
|||
|
|
cm.zfid = WxPayAPI.WxPayApi.GenerateOutTradeNo();
|
|||
|
|
bll.UpdateZfCode(cm.id.ToString(), cm.zfid);
|
|||
|
|
}
|
|||
|
|
if (cm.method == "微信")
|
|||
|
|
{
|
|||
|
|
WxPayData data = new WxPayData();
|
|||
|
|
data.SetValue("auth_code", zfm);//授权码
|
|||
|
|
data.SetValue("body", cm.person + cm.id);//商品描述
|
|||
|
|
data.SetValue("total_fee", (int)(decimal.Parse(jfje) * 100));//总金额
|
|||
|
|
data.SetValue("out_trade_no", cm.zfid);//产生随机的商户订单号
|
|||
|
|
|
|||
|
|
WxPayData wxresult = WxPayApi.Micropay(data, 10); //提交被扫支付,接收返回结果
|
|||
|
|
|
|||
|
|
//如果提交被扫支付接口调用失败,则抛异常
|
|||
|
|
if (!wxresult.IsSet("return_code")
|
|||
|
|
|| wxresult.GetValue("return_code").ToString() == "FAIL")
|
|||
|
|
{
|
|||
|
|
string returnMsg = wxresult.IsSet("return_msg") ? wxresult.GetValue("return_msg").ToString() : "";
|
|||
|
|
Log.Error("MicroPay", "Micropay API interface call failure, result : " + wxresult.ToXml());
|
|||
|
|
//throw new WxPayException("Micropay API interface call failure, return_msg : " + returnMsg);
|
|||
|
|
return Json(new { State = 0, Message = "Micropay API interface call failure, return_msg : " + returnMsg });
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//签名验证
|
|||
|
|
wxresult.CheckSign();
|
|||
|
|
Log.Debug("MicroPay", "Micropay response check sign success");
|
|||
|
|
|
|||
|
|
//刷卡支付直接成功
|
|||
|
|
if (wxresult.GetValue("return_code").ToString() == "SUCCESS" &&
|
|||
|
|
wxresult.GetValue("result_code").ToString() == "SUCCESS")
|
|||
|
|
{
|
|||
|
|
Log.Debug("MicroPay", "Micropay business success, result : " + wxresult.ToXml());
|
|||
|
|
//return result.ToPrintStr();
|
|||
|
|
bll.UpdateZfzt(cm.id.ToString());
|
|||
|
|
goto aa;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/******************************************************************
|
|||
|
|
* 剩下的都是接口调用成功,业务失败的情况
|
|||
|
|
* ****************************************************************/
|
|||
|
|
//1)业务结果明确失败
|
|||
|
|
if (wxresult.GetValue("err_code").ToString() != "USERPAYING" &&
|
|||
|
|
wxresult.GetValue("err_code").ToString() != "SYSTEMERROR")
|
|||
|
|
{
|
|||
|
|
Log.Error("MicroPay", "micropay API interface call success, business failure, result : " + wxresult.ToXml());
|
|||
|
|
cm.zfid = WxPayAPI.WxPayApi.GenerateOutTradeNo();
|
|||
|
|
bll.UpdateZfCode(cm.id.ToString(), cm.zfid);
|
|||
|
|
//return result.ToPrintStr();
|
|||
|
|
return Json(new { State = 0, Message = "micropay API interface call success, business failure, result : " + wxresult.ToXml() });
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//2)不能确定是否失败,需查单
|
|||
|
|
//用商户订单号去查单
|
|||
|
|
string out_trade_no = data.GetValue("out_trade_no").ToString();
|
|||
|
|
Thread.Sleep(5000);
|
|||
|
|
//确认支付是否成功,每隔一段时间查询一次订单,共查询10次
|
|||
|
|
int queryTimes = 10;//查询次数计数器
|
|||
|
|
while (queryTimes-- > 0)
|
|||
|
|
{
|
|||
|
|
int succResult = 0;//查询结果
|
|||
|
|
WxPayData queryResult = Query(out_trade_no, out succResult);
|
|||
|
|
//如果需要继续查询,则等待2s后继续
|
|||
|
|
if (succResult == 2)
|
|||
|
|
{
|
|||
|
|
Thread.Sleep(3000);
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
//查询成功,返回订单查询接口返回的数据
|
|||
|
|
else if (succResult == 1)
|
|||
|
|
{
|
|||
|
|
Log.Debug("MicroPay", "Mircopay success, return order query result : " + queryResult.ToXml());
|
|||
|
|
bll.UpdateZfzt(cm.id.ToString());
|
|||
|
|
goto aa;
|
|||
|
|
}
|
|||
|
|
//订单交易失败,直接返回刷卡支付接口返回的结果,失败原因会在err_code中描述
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
Log.Error("MicroPay", "Micropay failure, return micropay result : " + wxresult.ToXml());
|
|||
|
|
return Json(new { State = 0, Message = "Micropay failure, return micropay result : " + wxresult.ToXml() });
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//确认失败,则撤销订单
|
|||
|
|
Log.Error("MicroPay", "Micropay failure, Reverse order is processing...");
|
|||
|
|
Log.Error("MicroPay", "Reverse order failure"+ wxresult.ToXml());
|
|||
|
|
cm.zfid = WxPayAPI.WxPayApi.GenerateOutTradeNo();
|
|||
|
|
bll.UpdateZfCode(cm.id.ToString(), cm.zfid);
|
|||
|
|
return Json(new { State = 0, Message = "Reverse order failure" + wxresult.ToXml() });
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
IAlipayTradeService serviceClient = F2FBiz.CreateClientInstance(Com.Alipay.Config.serverUrl, Com.Alipay.Config.appId, Com.Alipay.Config.merchant_private_key, Com.Alipay.Config.version,
|
|||
|
|
Com.Alipay.Config.sign_type, Com.Alipay.Config.alipay_public_key, Com.Alipay.Config.charset);
|
|||
|
|
AlipayTradePayContentBuilder builder = BuildPayContent(jfry, jfje, cm.zfid, zfm, cm.id, (Session["loginUser"] as Models.ERPUser), items);
|
|||
|
|
string out_trade_no = builder.out_trade_no;
|
|||
|
|
|
|||
|
|
AlipayF2FPayResult payResult = serviceClient.tradePay(builder);
|
|||
|
|
|
|||
|
|
switch (payResult.Status)
|
|||
|
|
{
|
|||
|
|
case ResultEnum.SUCCESS:
|
|||
|
|
bll.UpdateZfzt(cm.zfid, "支付宝");
|
|||
|
|
//DoSuccessProcess(payResult);
|
|||
|
|
goto aa;
|
|||
|
|
case ResultEnum.FAILED:
|
|||
|
|
//DoFailedProcess(payResult);
|
|||
|
|
return Json(new { State = 0, Message = payResult.response });
|
|||
|
|
|
|||
|
|
case ResultEnum.UNKNOWN:
|
|||
|
|
return Json(new { State = 0, Message = payResult.response });
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
aa:
|
|||
|
|
var result = bll.opPrint(fpdid, fplx, fpbh, jfid, jfry, jfdw, jffs, jfbm, jfje, bz, items, (Session["loginUser"] as Models.ERPUser).TrueName, zfm);// Session["loginUser"] as Models.ERPUser
|
|||
|
|
return Json(result);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public string bdfp(string id,string nfph)
|
|||
|
|
{
|
|||
|
|
Models.ERPUser user = Session["loginUser"] as Models.ERPUser;
|
|||
|
|
var dal = new DAL.chargeDal();
|
|||
|
|
return Newtonsoft.Json.JsonConvert.SerializeObject(dal.bdfp(id,nfph,user.ID,user.TrueName));
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 构造支付请求数据
|
|||
|
|
/// </summary>
|
|||
|
|
/// <returns>请求数据集</returns>
|
|||
|
|
private AlipayTradePayContentBuilder BuildPayContent(string jfry, string jfje, string zfid, string zfm, int id, Models.ERPUser u, string items)
|
|||
|
|
{
|
|||
|
|
//线上联调时,请输入真实的外部订单号。
|
|||
|
|
string out_trade_no = zfid;
|
|||
|
|
|
|||
|
|
|
|||
|
|
//扫码枪扫描到的用户手机钱包中的付款条码
|
|||
|
|
AlipayTradePayContentBuilder builder = new AlipayTradePayContentBuilder();
|
|||
|
|
|
|||
|
|
//收款账号
|
|||
|
|
builder.seller_id = Com.Alipay.Config.pid;
|
|||
|
|
//订单编号
|
|||
|
|
builder.out_trade_no = out_trade_no;
|
|||
|
|
//支付场景,无需修改
|
|||
|
|
builder.scene = "bar_code";
|
|||
|
|
//支付授权码,付款码
|
|||
|
|
builder.auth_code = zfm;
|
|||
|
|
//订单总金额
|
|||
|
|
builder.total_amount = jfje;
|
|||
|
|
//参与优惠计算的金额
|
|||
|
|
//builder.discountable_amount = "";
|
|||
|
|
//不参与优惠计算的金额
|
|||
|
|
//builder.undiscountable_amount = "";
|
|||
|
|
//订单名称
|
|||
|
|
builder.subject = jfry + id;
|
|||
|
|
//自定义超时时间
|
|||
|
|
builder.timeout_express = "2m";
|
|||
|
|
//订单描述
|
|||
|
|
builder.body = "";
|
|||
|
|
//门店编号,很重要的参数,可以用作之后的营销
|
|||
|
|
builder.store_id = "";
|
|||
|
|
//操作员编号,很重要的参数,可以用作之后的营销
|
|||
|
|
builder.operator_id = u.ID.ToString();
|
|||
|
|
|
|||
|
|
|
|||
|
|
//传入商品信息详情
|
|||
|
|
List<GoodsInfo> gList = new List<GoodsInfo>();
|
|||
|
|
foreach (string item in items.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
|
|||
|
|
{
|
|||
|
|
string[] itemss = item.Split('|');
|
|||
|
|
if (itemss.Length == 4)
|
|||
|
|
{
|
|||
|
|
GoodsInfo goods = new GoodsInfo();
|
|||
|
|
goods.goods_id = itemss[0];
|
|||
|
|
goods.goods_name = itemss[1];
|
|||
|
|
goods.price = itemss[2];
|
|||
|
|
goods.quantity = itemss[3];
|
|||
|
|
gList.Add(goods);
|
|||
|
|
/*
|
|||
|
|
m = new charge_project_detailModel();
|
|||
|
|
m.invoice_print_id = invoiceid;
|
|||
|
|
m.charge_project = itemss[1];
|
|||
|
|
m.unit_price = Convert.ToDecimal(itemss[2]);
|
|||
|
|
m.charge_num = Convert.ToInt32(itemss[3]);
|
|||
|
|
m.charge_price = Convert.ToDecimal(itemss[2]) * Convert.ToInt32(itemss[3]);
|
|||
|
|
models.Add(m);*/
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
builder.goods_detail = gList;
|
|||
|
|
|
|||
|
|
//系统商接入可以填此参数用作返佣
|
|||
|
|
//ExtendParams exParam = new ExtendParams();
|
|||
|
|
//exParam.sysServiceProviderId = "20880000000000";
|
|||
|
|
//builder.extendParams = exParam;
|
|||
|
|
|
|||
|
|
return builder;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
public static WxPayData Query(string out_trade_no, out int succCode)
|
|||
|
|
{
|
|||
|
|
WxPayData queryOrderInput = new WxPayData();
|
|||
|
|
queryOrderInput.SetValue("out_trade_no", out_trade_no);
|
|||
|
|
WxPayData result = WxPayApi.OrderQuery(queryOrderInput);
|
|||
|
|
|
|||
|
|
if (result.GetValue("return_code").ToString() == "SUCCESS"
|
|||
|
|
&& result.GetValue("result_code").ToString() == "SUCCESS")
|
|||
|
|
{
|
|||
|
|
//支付成功
|
|||
|
|
if (result.GetValue("trade_state").ToString() == "SUCCESS")
|
|||
|
|
{
|
|||
|
|
succCode = 1;
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
//用户支付中,需要继续查询
|
|||
|
|
else if (result.GetValue("trade_state").ToString() == "USERPAYING")
|
|||
|
|
{
|
|||
|
|
succCode = 2;
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//if()
|
|||
|
|
if(result.IsSet("trade_state")&&result.GetValue("trade_state").ToString()== "NOTPAY")
|
|||
|
|
{
|
|||
|
|
succCode = 0;
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
//如果返回错误码为“此交易订单号不存在”则直接认定失败
|
|||
|
|
if (result.IsSet("err_code") && result.GetValue("err_code").ToString() == "ORDERNOTEXIST")
|
|||
|
|
{
|
|||
|
|
succCode = 0;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
//如果是系统错误,则后续继续
|
|||
|
|
succCode = 2;
|
|||
|
|
}
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
[AllowAnonymous]
|
|||
|
|
//打印用
|
|||
|
|
public JsonResult getOne(string id)
|
|||
|
|
{
|
|||
|
|
if (string.IsNullOrEmpty(id))
|
|||
|
|
return Json(null);
|
|||
|
|
var bll = new invoice_printBll();
|
|||
|
|
var result = bll.GetAllList(id);
|
|||
|
|
result[0].moneyupper = MoneyToUpper(result[0].invoice_price.ToString());
|
|||
|
|
return Json(result, JsonRequestBehavior.AllowGet);
|
|||
|
|
}
|
|||
|
|
[AllowAnonymous]
|
|||
|
|
public JsonResult getDetail(string id)
|
|||
|
|
{
|
|||
|
|
if (string.IsNullOrEmpty(id))
|
|||
|
|
return Json(null);
|
|||
|
|
var bll = new invoice_printBll();
|
|||
|
|
var result = bll.GetDetailList(id);
|
|||
|
|
|
|||
|
|
return Json(result, JsonRequestBehavior.AllowGet);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//补打
|
|||
|
|
public ActionResult Charge3Message()
|
|||
|
|
{
|
|||
|
|
ViewBag.jfbm = new SelectList(new ERPBuMenBll().GetAllList(""), "bumenname", "bumenname", (Session["loginUser"] as Models.ERPUser).Department);
|
|||
|
|
return View();
|
|||
|
|
}
|
|||
|
|
public string getMessageData(string start, string end, string jfbm, string where)
|
|||
|
|
{
|
|||
|
|
string truename = (Session["loginUser"] as Models.ERPUser).TrueName;
|
|||
|
|
if (string.IsNullOrEmpty(start) || string.IsNullOrEmpty(end))
|
|||
|
|
return Newtonsoft.Json.JsonConvert.SerializeObject(null);
|
|||
|
|
var bll = new invoice_printBll();
|
|||
|
|
var result = bll.GetAllList2(start, end, jfbm, where, truename);
|
|||
|
|
return Newtonsoft.Json.JsonConvert.SerializeObject(new { Rows = result });
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//补打2
|
|||
|
|
public ActionResult Charge3Message2()
|
|||
|
|
{
|
|||
|
|
ViewBag.jfbm = new SelectList(new ERPBuMenBll().GetAllList(""), "bumenname", "bumenname", (Session["loginUser"] as Models.ERPUser).Department);
|
|||
|
|
ViewBag.sfr = new SelectList(new invoice_printBll().GetPerson(), "", "", (Session["loginUser"] as Models.ERPUser).Department);
|
|||
|
|
return View();
|
|||
|
|
}
|
|||
|
|
public string getMessageData2(string start, string end, string jfbm, string where, string hstart, string hend)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
var bll = new invoice_printBll();
|
|||
|
|
var result = bll.GetAllList2(start, end, jfbm, where, "",hstart,hend);
|
|||
|
|
return Newtonsoft.Json.JsonConvert.SerializeObject(new { Rows = result });
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//作废发票
|
|||
|
|
public ActionResult cancelInvoice(string id)
|
|||
|
|
{
|
|||
|
|
if (string.IsNullOrEmpty(id))
|
|||
|
|
return Json(null);
|
|||
|
|
var bll = new invoice_printBll();
|
|||
|
|
var result = bll.cancelInvoice(id, Session["loginUser"] as Models.ERPUser);
|
|||
|
|
return Json(result);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//金额转大写
|
|||
|
|
public static string MoneyToUpper(string strAmount)
|
|||
|
|
{
|
|||
|
|
string functionReturnValue = null;
|
|||
|
|
bool IsNegative = false; // 是否是负数
|
|||
|
|
if (strAmount.Trim().Substring(0, 1) == "-")
|
|||
|
|
{
|
|||
|
|
// 是负数则先转为正数
|
|||
|
|
strAmount = strAmount.Trim().Remove(0, 1);
|
|||
|
|
IsNegative = true;
|
|||
|
|
}
|
|||
|
|
string strLower = null;
|
|||
|
|
string strUpart = null;
|
|||
|
|
string strUpper = null;
|
|||
|
|
int iTemp = 0;
|
|||
|
|
// 保留两位小数 123.489→123.49 123.4→123.4
|
|||
|
|
strAmount = Math.Round(double.Parse(strAmount), 2).ToString();
|
|||
|
|
if (strAmount.IndexOf(".") > 0)
|
|||
|
|
{
|
|||
|
|
if (strAmount.IndexOf(".") == strAmount.Length - 2)
|
|||
|
|
{
|
|||
|
|
strAmount = strAmount + "0";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
strAmount = strAmount + ".00";
|
|||
|
|
}
|
|||
|
|
strLower = strAmount;
|
|||
|
|
iTemp = 1;
|
|||
|
|
strUpper = "";
|
|||
|
|
while (iTemp <= strLower.Length)
|
|||
|
|
{
|
|||
|
|
switch (strLower.Substring(strLower.Length - iTemp, 1))
|
|||
|
|
{
|
|||
|
|
case ".":
|
|||
|
|
strUpart = "元";
|
|||
|
|
break;
|
|||
|
|
case "0":
|
|||
|
|
strUpart = "零";
|
|||
|
|
break;
|
|||
|
|
case "1":
|
|||
|
|
strUpart = "壹";
|
|||
|
|
break;
|
|||
|
|
case "2":
|
|||
|
|
strUpart = "贰";
|
|||
|
|
break;
|
|||
|
|
case "3":
|
|||
|
|
strUpart = "叁";
|
|||
|
|
break;
|
|||
|
|
case "4":
|
|||
|
|
strUpart = "肆";
|
|||
|
|
break;
|
|||
|
|
case "5":
|
|||
|
|
strUpart = "伍";
|
|||
|
|
break;
|
|||
|
|
case "6":
|
|||
|
|
strUpart = "陆";
|
|||
|
|
break;
|
|||
|
|
case "7":
|
|||
|
|
strUpart = "柒";
|
|||
|
|
break;
|
|||
|
|
case "8":
|
|||
|
|
strUpart = "捌";
|
|||
|
|
break;
|
|||
|
|
case "9":
|
|||
|
|
strUpart = "玖";
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
switch (iTemp)
|
|||
|
|
{
|
|||
|
|
case 1:
|
|||
|
|
strUpart = strUpart + "分";
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
strUpart = strUpart + "角";
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
strUpart = strUpart + "";
|
|||
|
|
break;
|
|||
|
|
case 4:
|
|||
|
|
strUpart = strUpart + "";
|
|||
|
|
break;
|
|||
|
|
case 5:
|
|||
|
|
strUpart = strUpart + "拾";
|
|||
|
|
break;
|
|||
|
|
case 6:
|
|||
|
|
strUpart = strUpart + "佰";
|
|||
|
|
break;
|
|||
|
|
case 7:
|
|||
|
|
strUpart = strUpart + "仟";
|
|||
|
|
break;
|
|||
|
|
case 8:
|
|||
|
|
strUpart = strUpart + "万";
|
|||
|
|
break;
|
|||
|
|
case 9:
|
|||
|
|
strUpart = strUpart + "拾";
|
|||
|
|
break;
|
|||
|
|
case 10:
|
|||
|
|
strUpart = strUpart + "佰";
|
|||
|
|
break;
|
|||
|
|
case 11:
|
|||
|
|
strUpart = strUpart + "仟";
|
|||
|
|
break;
|
|||
|
|
case 12:
|
|||
|
|
strUpart = strUpart + "亿";
|
|||
|
|
break;
|
|||
|
|
case 13:
|
|||
|
|
strUpart = strUpart + "拾";
|
|||
|
|
break;
|
|||
|
|
case 14:
|
|||
|
|
strUpart = strUpart + "佰";
|
|||
|
|
break;
|
|||
|
|
case 15:
|
|||
|
|
strUpart = strUpart + "仟";
|
|||
|
|
break;
|
|||
|
|
case 16:
|
|||
|
|
strUpart = strUpart + "万";
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
strUpart = strUpart + "";
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
strUpper = strUpart + strUpper;
|
|||
|
|
iTemp = iTemp + 1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
strUpper = strUpper.Replace("零拾", "零");
|
|||
|
|
strUpper = strUpper.Replace("零佰", "零");
|
|||
|
|
strUpper = strUpper.Replace("零仟", "零");
|
|||
|
|
strUpper = strUpper.Replace("零零零", "零");
|
|||
|
|
strUpper = strUpper.Replace("零零", "零");
|
|||
|
|
strUpper = strUpper.Replace("零角零分", "整");
|
|||
|
|
strUpper = strUpper.Replace("零分", "整");
|
|||
|
|
strUpper = strUpper.Replace("零角", "零");
|
|||
|
|
strUpper = strUpper.Replace("零亿零万零圆", "亿圆");
|
|||
|
|
strUpper = strUpper.Replace("亿零万零圆", "亿圆");
|
|||
|
|
strUpper = strUpper.Replace("零亿零万", "亿");
|
|||
|
|
strUpper = strUpper.Replace("零万零圆", "万圆");
|
|||
|
|
strUpper = strUpper.Replace("零亿", "亿");
|
|||
|
|
strUpper = strUpper.Replace("零万", "万");
|
|||
|
|
strUpper = strUpper.Replace("零圆", "圆");
|
|||
|
|
strUpper = strUpper.Replace("零零", "零");
|
|||
|
|
|
|||
|
|
// 对壹圆以下的金额的处理
|
|||
|
|
if (strUpper.Substring(0, 1) == "圆")
|
|||
|
|
{
|
|||
|
|
strUpper = strUpper.Substring(1, strUpper.Length - 1);
|
|||
|
|
}
|
|||
|
|
if (strUpper.Substring(0, 1) == "零")
|
|||
|
|
{
|
|||
|
|
strUpper = strUpper.Substring(1, strUpper.Length - 1);
|
|||
|
|
}
|
|||
|
|
if (strUpper.Substring(0, 1) == "角")
|
|||
|
|
{
|
|||
|
|
strUpper = strUpper.Substring(1, strUpper.Length - 1);
|
|||
|
|
}
|
|||
|
|
if (strUpper.Substring(0, 1) == "分")
|
|||
|
|
{
|
|||
|
|
strUpper = strUpper.Substring(1, strUpper.Length - 1);
|
|||
|
|
}
|
|||
|
|
if (strUpper.Substring(0, 1) == "整")
|
|||
|
|
{
|
|||
|
|
strUpper = "零圆整";
|
|||
|
|
}
|
|||
|
|
functionReturnValue = strUpper;
|
|||
|
|
|
|||
|
|
if (IsNegative == true)
|
|||
|
|
{
|
|||
|
|
return "负" + functionReturnValue;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return functionReturnValue;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|