Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 
 
 

216 řádky
8.9 KiB

  1. using System;
  2. using Learun.Application.Organization;
  3. using Learun.Application.TwoDevelopment.EducationalAdministration;
  4. using Learun.Application.TwoDevelopment.EvaluationTeach;
  5. using Learun.Util;
  6. using Nancy;
  7. using System.Collections.Generic;
  8. using System.Drawing;
  9. using System.IO;
  10. using System.Linq;
  11. using System.Security.Cryptography;
  12. using System.Text;
  13. using System.Web;
  14. using System.Web.Mvc;
  15. using Learun.Application.Base.SystemModule;
  16. using Learun.Application.TwoDevelopment.Ask;
  17. using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement;
  18. using Newtonsoft.Json;
  19. using ThoughtWorks.QRCode.Codec;
  20. namespace Learun.Application.WebApi.Modules
  21. {
  22. /// <summary>
  23. /// 版 本 Learun-ADMS V7.0.0 数字化智慧校园
  24. /// Copyright (c) 2013-2018 北京泉江科技有限公司
  25. /// 创建人:数字化智慧校园-框架开发组
  26. /// 日 期:2018.01.04
  27. /// 描 述:部门管理
  28. /// </summary>
  29. public class StuPayFeeApi : BaseApi
  30. {
  31. public StuPayFeeApi()
  32. : base("/learun/payfee")
  33. {
  34. Get["/getpayfeelist"] = GetPayfeeList;// 获取缴费列表
  35. Get["/getpayfeeinfo"] = GetPayfeeInfo;//获取缴费明细
  36. Post["/generateqrcode"] = PayFeeQRCode;//生成缴费二维码
  37. Get["/getinvoice"] = GetInvoice;//获取发票
  38. }
  39. private StuInfoBasic_PayFeeIBLL stuInfoBasic_PayFeeIBLL = new StuInfoBasic_PayFeeBLL();
  40. private StuInfoBasicIBLL stuInfoBasicIbll = new StuInfoBasicBLL();
  41. private StuInfoFreshIBLL stuInfoFreshIBLL = new StuInfoFreshBLL();
  42. private FinaChargesStandardIBLL finaChargesStandardIBLL = new FinaChargesStandardBLL();
  43. public Response GetInvoice(dynamic _)
  44. {
  45. string keyValue = Request.Query["keyValue"];
  46. var list = stuInfoFreshIBLL.GetStuEnrollFeeOrder(keyValue, false);
  47. return Success(list);
  48. }
  49. public Response GetPayfeeList(dynamic _)
  50. {
  51. ReqPageParam parameter = this.GetReqData<ReqPageParam>();
  52. var data = stuInfoBasic_PayFeeIBLL.GetPageList(parameter.pagination, parameter.queryJson);
  53. var jsonData = new
  54. {
  55. rows = data,
  56. total = parameter.pagination.total,
  57. page = parameter.pagination.page,
  58. records = parameter.pagination.records
  59. };
  60. return Success(jsonData);
  61. }
  62. public Response GetPayfeeInfo(dynamic _)
  63. {
  64. string keyValue = Request.Query["keyValue"];
  65. var stuInfoBasic_PayFeeEntity = stuInfoBasic_PayFeeIBLL.GetStuInfoBasic_PayFeeEntity(keyValue);
  66. var StuInfoFreshData = stuInfoBasicIbll.GetStuInfoBasicEntityByStuNo(stuInfoBasic_PayFeeEntity.StuNo);
  67. //当前年度缴费记录
  68. var FinaChargesStandardList = new List<FinaChargesStandardEntity>();
  69. FinaChargesStandardList = finaChargesStandardIBLL.GetFinaChargesStandardListByYongYou(StuInfoFreshData.StuNo, stuInfoBasic_PayFeeEntity.PayYear.Value).ToList();
  70. var PayFeeTotal = FinaChargesStandardList.Select(x => x.SJAmount).Sum();
  71. var jsonData = new
  72. {
  73. StuInfoFreshData = StuInfoFreshData,
  74. FinaChargesStandardList = FinaChargesStandardList,
  75. PayFeeTotal = PayFeeTotal,
  76. YJAmount = FinaChargesStandardList.Sum(x => x.PayedMoney)
  77. };
  78. return Success(jsonData);
  79. }
  80. public class PayfeeRequest
  81. {
  82. public string strEntity { get; set; }
  83. public string detailList { get; set; }
  84. }
  85. /// <summary>
  86. /// 生成缴费二维码
  87. /// </summary>
  88. /// <returns></returns>
  89. public Response PayFeeQRCode(dynamic _)
  90. {
  91. string keyValue = Request.Query["keyValue"];
  92. PayfeeRequest parameter = this.GetReqData<PayfeeRequest>();
  93. StuInfoFreshEntity entity = parameter.strEntity.ToObject<StuInfoFreshEntity>();
  94. List<StuEnrollFeeOrderDetailEntity> list = parameter.detailList.ToObject<List<StuEnrollFeeOrderDetailEntity>>();
  95. var model = stuInfoBasic_PayFeeIBLL.GetStuInfoBasic_PayFeeEntity(keyValue);
  96. var imgUrl = "";
  97. Random ran = new Random();
  98. string merchantid = "105000082201406";//商户号
  99. string posid = "043724806";//商户柜台代码
  100. string branchid = "510000000";//分行代码
  101. string orderid = DateTime.Now.ToString("yyyyMMddhhmmss") + ran.Next(0, 100000);
  102. string payment = entity.PayMoney.ToString();
  103. string curcode = "01";
  104. string txcode = "530550";
  105. string remark1 = model.StuNo;
  106. string remark2 = model.PayYear.ToString();
  107. string returntype = "3";
  108. string timeout = DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss");
  109. string pub32tr2 = "40d987faa793a0a27e7a86ef020111";
  110. string bankURL = "https://ibsbjstar.ccb.com.cn/CCBIS/ccbMain?CCB_IBSVersion=V6";
  111. string tmp = "MERCHANTID=" + merchantid + "&POSID=" + posid + "&BRANCHID=" + branchid + "&ORDERID=" + orderid;
  112. tmp += "&PAYMENT=" + payment + "&CURCODE=" + curcode + "&TXCODE=" + txcode + "&REMARK1=" + remark1;
  113. tmp += "&REMARK2=" + remark2 + "&RETURNTYPE=" + returntype + "&TIMEOUT=" + timeout;
  114. MD5 md5 = MD5.Create();
  115. string tmp1 = tmp;
  116. tmp += "&PUB=" + pub32tr2;
  117. byte[] buffer = Encoding.Default.GetBytes(tmp);
  118. byte[] md5Buffer = md5.ComputeHash(buffer);
  119. string strMd5 = "";
  120. //hdnOrderId.Value = orderid;
  121. foreach (byte item in md5Buffer)
  122. {
  123. strMd5 += item.ToString("x2");
  124. }
  125. string url = bankURL + "&" + tmp1 + "&MAC=" + strMd5;
  126. string reJson = HttpMethods.Post(url);
  127. LogEntity logEntity = new LogEntity();
  128. logEntity.F_CategoryId = 121;
  129. logEntity.F_ExecuteResultJson = reJson;
  130. logEntity.WriteLog();
  131. //HttpConnect conn = new HttpConnect();
  132. //string reJson = conn.Post(url, "");
  133. JsonBean MemberInfoList = JsonConvert.DeserializeObject<JsonBean>(reJson);
  134. if (MemberInfoList.SUCCESS.Equals("true"))
  135. {
  136. string imgCode = HttpMethods.Post(MemberInfoList.PAYURL);
  137. logEntity.F_CategoryId = 121;
  138. logEntity.F_ExecuteResultJson = imgCode;
  139. logEntity.WriteLog();
  140. MemberInfoList = JsonConvert.DeserializeObject<JsonBean>(imgCode);
  141. if (MemberInfoList.SUCCESS.Equals("true"))
  142. {
  143. imgUrl = CreateQRImg(MemberInfoList.QRURL, orderid);
  144. }
  145. }
  146. if (!string.IsNullOrEmpty(imgUrl))
  147. {
  148. model.orderid = orderid;
  149. stuInfoFreshIBLL.SaveFeeData(keyValue, model, list);
  150. }
  151. var backimgUrl = new{ imgUrl };
  152. return Success(backimgUrl);
  153. }
  154. public class JsonBean
  155. {
  156. /// <summary>
  157. ///
  158. /// </summary>
  159. public string SUCCESS { get; set; }
  160. public string PAYURL { get; set; }
  161. public string QRURL { get; set; }
  162. }
  163. /// <summary>
  164. /// 生成并保存二维码图片的方法
  165. /// </summary>
  166. /// <param name="str">输入的内容</param>
  167. public string CreateQRImg(string str, string orderId)
  168. {
  169. string QRCodeFile = Config.GetValue("QRCodeFile");
  170. Random ran = new Random();
  171. Bitmap bt;
  172. str = HttpUtility.UrlDecode(str);
  173. string enCodeString = str;
  174. //生成设置编码实例
  175. QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
  176. //设置二维码的规模,默认4
  177. qrCodeEncoder.QRCodeScale = 3;
  178. //设置二维码的版本,默认7
  179. qrCodeEncoder.QRCodeVersion = 7;
  180. //设置错误校验级别,默认中等
  181. qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
  182. //生成二维码图片
  183. bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);
  184. //二维码图片的名称
  185. string filename = orderId;
  186. if (!DirFileHelper.IsExistFile(QRCodeFile+"/Content/images/QRCode/"))
  187. {
  188. Directory.CreateDirectory(QRCodeFile + "/Content/images/QRCode/");
  189. }
  190. var path = QRCodeFile + "/Content/images/QRCode/" + filename + ".jpg";
  191. //保存二维码图片在photos路径下
  192. try
  193. {
  194. bt.Save(path);
  195. }
  196. catch (Exception ex)
  197. {
  198. return "";
  199. }
  200. //图片控件要显示的二维码图片路径
  201. return "/Content/images/QRCode/" + filename + ".jpg";
  202. }
  203. }
  204. }