DuGuYang 2 years ago
parent
commit
2fb679f5d7

+ 137 - 0
Areas/Api/Controllers/v1/Main1/UserSwapWhiteController.cs

@@ -0,0 +1,137 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using Microsoft.AspNetCore.Authorization;
+using System.Web;
+using MySystem.Models.Main1;
+using MySystem.Service.Main1;
+using LitJson;
+using Library;
+using MySystem.Service.KxsMain;
+using MySystem.Service.Bs;
+
+namespace MySystem.Areas.Api.Controllers.v1.Main1
+{
+    [Area("Api")]
+    [Route("/v1/QrCodePlateMain/[controller]/[action]")]
+    public class UserSwapWhiteController : BaseController
+    {
+        public UserSwapWhiteController(IHttpContextAccessor accessor) : base(accessor)
+        {
+        }
+
+
+        #region 风险管理-风险创客列表
+        [Authorize]
+        public JsonResult RiskMakerList(string value)
+        {
+            value = PublicFunction.DesDecrypt(value); ;
+            JsonData data = JsonMapper.ToObject(value);
+            List<Dictionary<string, object>> dataList = RiskMakerListDo(value);
+            return Json(new AppResultJson() { Status = "1", Info = "", Data = dataList });
+        }
+        private List<Dictionary<string, object>> RiskMakerListDo(string value)
+        {
+            JsonData data = JsonMapper.ToObject(value);
+            string MakerCode = data["MakerCode"].ToString(); //风控创客编号
+            int pageSize = int.Parse(function.CheckInt(data["page_size"].ToString()));
+            int pageNum = int.Parse(function.CheckInt(data["page_num"].ToString()));
+            string condition = "";
+            if (!string.IsNullOrEmpty(data["MakerCode"].ToString()))
+            {
+                var user = UsersService.QueryByMakerCode(MakerCode);
+                condition += " and UserId=" + user.Id + "";
+            }
+            List<RelationData> relationData = new List<RelationData>();
+            List<Dictionary<string, object>> dataList = new List<Dictionary<string, object>>();
+            List<Dictionary<string, object>> source = UserSwapWhiteService.List(relationData, condition, pageNum, pageSize);
+            foreach (Dictionary<string, object> subdata in source)
+            {
+                Dictionary<string, object> curData = new Dictionary<string, object>();
+                curData.Add("Id", int.Parse(subdata["Id"].ToString())); //记录Id
+                var userInfo = UsersService.Query(int.Parse(subdata["UserId"].ToString()));
+                curData.Add("MakerCode", userInfo.MakerCode); //风控创客编号
+                curData.Add("RealName", userInfo.RealName); //风控创客姓名
+                curData.Add("Remark", subdata["Remark"].ToString()); //备注
+                curData.Add("CreateDate", subdata["CreateDate"].ToString() == "" ? "" : DateTime.Parse(subdata["CreateDate"].ToString()).ToString("yyyy-MM-dd HH:mm:ss")); //操作时间
+                curData.Add("Operator", subdata["CreateMan"].ToString()); //操作人
+                dataList.Add(curData);
+            }
+            return dataList;
+        }
+        #endregion
+
+        #region 风险管理-添加风险创客
+        [Authorize]
+        public JsonResult AddRiskMaker(string value)
+        {
+            value = PublicFunction.DesDecrypt(value); ;
+            JsonData data = JsonMapper.ToObject(value);
+            AppResultJson result = AddRiskMakerDo(value);
+            return Json(new AppResultJson() { Status = result.Status, Info = result.Info, Data = result.Data });
+        }
+        private AppResultJson AddRiskMakerDo(string value)
+        {
+            JsonData data = JsonMapper.ToObject(value);
+            string MakerCode = data["MakerCode"].ToString(); //风控创客编号
+            string RealName = data["RealName"].ToString(); //风控创客姓名
+            string Remark = data["Remark"].ToString(); //备注
+            if (string.IsNullOrEmpty(data["MakerCode"].ToString()))
+            {
+                return new AppResultJson() { Status = "-1", Info = "请输入风控创客编号" };
+            }
+            if (string.IsNullOrEmpty(data["RealName"].ToString()))
+            {
+                return new AppResultJson() { Status = "-1", Info = "请输入风控创客姓名" };
+            }
+            var user = UsersService.QueryByMakerCode(MakerCode);
+            if (user.Id == 0)
+            {
+                return new AppResultJson() { Status = "-1", Info = "未找到相关创客信息" };
+            }
+            if (user.MakerCode != MakerCode || user.RealName != RealName)
+            {
+                return new AppResultJson() { Status = "-1", Info = "输入的创客信息不匹配" };
+            }
+            Dictionary<string, object> fields = new Dictionary<string, object>();
+            var sys = SysAdminService.Query(AppConfig.LoginSession.sysId);
+            fields.Add("UserId", user.Id); //创客Id
+            fields.Add("CreateMan", sys.AdminName + "_" + sys.RealName); //操作人
+            fields.Add("Remark", Remark); //备注
+            var Id = int.Parse(UserSwapWhiteService.Add(fields).Data.ToString());
+            if (Id > 0)
+            {
+                return new AppResultJson() { Status = "1", Info = "成功", Data = Id };
+            }
+            else
+            {
+                return new AppResultJson() { Status = "-1", Info = "失败", Data = Id };
+            }
+        }
+        #endregion
+
+
+        #region 风险管理-删除风险创客
+        [Authorize]
+        public JsonResult DeleteRiskMaker(string value)
+        {
+            value = PublicFunction.DesDecrypt(value); ;
+            JsonData data = JsonMapper.ToObject(value);
+            AppResultJson result = DeleteRiskMakerDo(value);
+            return Json(new AppResultJson() { Status = result.Status, Info = result.Info, Data = result.Data });
+        }
+        private AppResultJson DeleteRiskMakerDo(string value)
+        {
+            JsonData data = JsonMapper.ToObject(value);
+            int RiskId = int.Parse(data["RiskId"].ToString()); //风控记录Id
+            UserSwapWhiteService.Delete(RiskId);
+            return new AppResultJson() { Status = "1", Info = "删除成功" };
+        }
+        #endregion
+
+    }
+}

+ 43 - 0
Areas/Api/Controllers/v1/Main2/MerchantAddInfoController.cs

@@ -421,5 +421,48 @@ namespace MySystem.Areas.Api.Controllers.v1.Main2
         #endregion
         #endregion
 
 
 
 
+        #region 银联结算管理-银联结算记录
+        [Authorize]
+        public JsonResult UnionPaySettlementRecordList(string value)
+        {
+            value = PublicFunction.DesDecrypt(value); ;
+            JsonData data = JsonMapper.ToObject(value);
+            List<Dictionary<string, object>> dataList = UnionPaySettlementRecordListDo(value);
+            return Json(new AppResultJson() { Status = "1", Info = "", Data = dataList });
+        }
+        private List<Dictionary<string, object>> UnionPaySettlementRecordListDo(string value)
+        {
+            JsonData data = JsonMapper.ToObject(value);
+            string MerchantName = data["MerchantName"].ToString(); //商户名称
+            string MerchantNo = data["MerchantNo"].ToString(); //商户号
+            string SettlementDate = data["SettlementDate"].ToString(); //结算时间(必填)
+            string pageSize = data["page_size"].ToString();
+            string pageNum = data["page_num"].ToString()    ;
+            string condition = "";
+            var MerchantId = 0;
+            string StartDate = "";
+            string EndDate = "";
+            if (!string.IsNullOrEmpty(data["MerchantName"].ToString()))
+            {
+                var merAddInfo = MerchantAddInfoService.Query(" and CertMerchantName='" + MerchantName + "'");
+                MerchantId = merAddInfo.Id;
+            }
+            if (!string.IsNullOrEmpty(data["MerchantNo"].ToString()))
+            {
+                var merAddInfo = MerchantAddInfoService.Query(" and OutMchtNo='" + MerchantNo + "'");
+                MerchantId = merAddInfo.Id;
+            }
+            if (!string.IsNullOrEmpty(data["SettlementDate"].ToString()))
+            {
+                string[] datelist = SettlementDate.Split(new string[] { " - " }, StringSplitOptions.None);
+                StartDate = datelist[0];
+                EndDate = datelist[1];
+            }
+            var dataList = MySelfUtil.CardInComeRecordList(MerchantId, StartDate, EndDate, pageSize, pageNum);
+            return dataList;
+        }
+        #endregion
+
+
     }
     }
 }
 }

+ 43 - 0
Areas/Api/Controllers/v1/Main2/MerchantAmountSummayController.cs

@@ -22,5 +22,48 @@ namespace MySystem.Areas.Api.Controllers.v1.Main2
         {
         {
         }
         }
 
 
+
+        #region 交易统计-银联商户交易统计
+        [Authorize]
+        public JsonResult UnionPayMerchantTradeSummaryList(string value)
+        {
+            value = PublicFunction.DesDecrypt(value); ;
+            JsonData data = JsonMapper.ToObject(value);
+            List<Dictionary<string, object>> dataList = UnionPayMerchantTradeSummaryListDo(value);
+            return Json(new AppResultJson() { Status = "1", Info = "", Data = dataList });
+        }
+        private List<Dictionary<string, object>> UnionPayMerchantTradeSummaryListDo(string value)
+        {
+            JsonData data = JsonMapper.ToObject(value);
+            string MerchantName = data["MerchantName"].ToString(); //商户名称
+            string SubjectType = data["SubjectType"].ToString(); //主体类型(1 企业 2 个体 3 小微)
+            string TradeDate = data["TradeDate"].ToString(); //交易日期
+            int pageSize = int.Parse(function.CheckInt(data["page_size"].ToString()));
+            int pageNum = int.Parse(function.CheckInt(data["page_num"].ToString()));
+            string condition = "";
+            List<RelationData> relationData = new List<RelationData>();
+            List<Dictionary<string, object>> dataList = new List<Dictionary<string, object>>();
+            List<Dictionary<string, object>> source = MerchantAmountSummayService.List(relationData, condition, pageNum, pageSize);
+            foreach (Dictionary<string, object> subdata in source)
+            {
+                Dictionary<string, object> curData = new Dictionary<string, object>();
+                curData.Add("", subdata[""].ToString()); //
+                curData.Add("TradeDate", ""); //交易日期
+                curData.Add("MerchantName", ""); //商户名称
+                curData.Add("TodayAmount", ""); //当日总收入
+                curData.Add("TotalAmount", ""); //营收总金额
+                curData.Add("InFactAmount", ""); //实收总金额
+                curData.Add("ActAmount", ""); //活动交易额
+                curData.Add("NonActAmount", ""); //非活动交易额
+                curData.Add("WeChatInFactAmount", ""); //微信实收
+                curData.Add("AliPayInFactAmount", ""); //支付宝实收
+                curData.Add("OrderCount", ""); //订单总数
+
+                dataList.Add(curData);
+            }
+            return dataList;
+        }
+        #endregion
+
     }
     }
 }
 }

+ 239 - 0
Service/Main1/UserSwapWhiteService.cs

@@ -0,0 +1,239 @@
+/*
+ * 循环返风控白名单
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Data;
+using MySystem.Models.Main1;
+using Library;
+using LitJson;
+
+namespace MySystem.Service.Main1
+{
+    public class UserSwapWhiteService
+    {
+        static string _conn = ConfigurationManager.AppSettings["SqlConnStr1"].ToString();
+
+        /// <summary>
+        /// 查询列表(适合多表关联查询)
+        /// </summary>
+        /// <param name="relationData">关联表</param>
+        /// <param name="condition">查询条件(sql语句)</param>
+        /// <param name="count">总数(输出)</param>
+        /// <param name="page">页码</param>
+        /// <param name="limit">每页条数</param>
+        /// <returns></returns>
+        public static List<Dictionary<string, object>> List(List<RelationData> relationData, string condition, out int count, int page = 1, int limit = 30, string orderBy = "sort desc,id desc")
+        {
+            List<string> fields = new List<string>(); //要显示的列,不设置则返回全部字段
+            Dictionary<string, object> obj = new DbServiceNew(AppConfig.Base.main1Tables, _conn).IndexData("UserSwapWhite", relationData, orderBy, page, limit, condition, fields);
+            List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
+            count = int.Parse(obj["count"].ToString());
+            return diclist;
+        }
+        public static List<Dictionary<string, object>> List(List<RelationData> relationData, string condition, int page = 1, int limit = 30, string orderBy = "sort desc,id desc")
+        {
+            List<string> fields = new List<string>(); //要显示的列,不设置则返回全部字段
+            Dictionary<string, object> obj = new DbServiceNew(AppConfig.Base.main1Tables, _conn).IndexData("UserSwapWhite", relationData, orderBy, page, limit, condition, fields);
+            List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
+            return diclist;
+        }
+
+        /// <summary>
+        /// 查询列表(单表)
+        /// </summary>
+        /// <param name="fieldList">返回的字段</param>
+        /// <param name="condition">查询条件</param>
+        /// <param name="page">页码</param>
+        /// <param name="limit">每页条数</param>
+        /// <param name="orderBy">排序</param>
+        /// <returns></returns>
+        public static List<Dictionary<string, object>> List(string fieldList, string condition, int page = 1, int limit = 30, string orderBy = "sort desc,id desc")
+        {
+            List<string> fields = fieldList.Split(',').ToList(); //要显示的列
+            Dictionary<string, object> obj = new DbServiceNew(AppConfig.Base.main1Tables, _conn).IndexData("UserSwapWhite", new List<RelationData>(), orderBy, page, limit, condition, fields);
+            List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
+            return diclist;
+        }
+
+        /// <summary>
+        /// 查询一条记录
+        /// </summary>
+        /// <param name="Id">主键Id</param>
+        /// <returns></returns>
+        public static UserSwapWhite Query(int Id)
+        {
+            Dictionary<string, object> obj = new DbServiceNew(AppConfig.Base.main1Tables, _conn).Query("*", "UserSwapWhite", Id);
+            if(obj.Keys.Count > 0)
+            {
+                return Newtonsoft.Json.JsonConvert.DeserializeObject<UserSwapWhite>(Newtonsoft.Json.JsonConvert.SerializeObject(obj));
+            }
+            return new UserSwapWhite();
+        }
+
+        /// <summary>
+        /// 查询一条记录
+        /// </summary>
+        /// <param name="condition">查询条件(sql语句)</param>
+        /// <returns></returns>
+        public static UserSwapWhite Query(string condition)
+        {
+            Dictionary<string, object> obj = new DbServiceNew(AppConfig.Base.main1Tables, _conn).Query("*", "UserSwapWhite", condition);
+            if(obj.Keys.Count > 0)
+            {
+                return Newtonsoft.Json.JsonConvert.DeserializeObject<UserSwapWhite>(Newtonsoft.Json.JsonConvert.SerializeObject(obj));
+            }
+            return new UserSwapWhite();
+        }
+
+        /// <summary>
+        /// 查询一条记录
+        /// </summary>
+        /// <param name="condition">查询条件(sql语句)</param>
+        /// <param name="fields">返回的字段</param>
+        /// <returns></returns>
+        public static Dictionary<string, object> Query(string condition, string fields)
+        {
+            Dictionary<string, object> obj = new DbServiceNew(AppConfig.Base.main1Tables, _conn).Query(fields, "UserSwapWhite", condition);
+            return obj;
+        }
+        
+        public static decimal Sum(string condition, string field)
+        {
+            decimal amount = 0;
+            Dictionary<string, object> obj = new DbServiceNew(AppConfig.Base.main1Tables, _conn).Query("Sum(" + field + ") " + field + "", "UserSwapWhite", condition);
+            if(obj.Keys.Count > 0)
+            {
+                amount = decimal.Parse(obj[field].ToString());
+            }
+            return amount;
+        }
+
+        /// <summary>
+        /// 查询记录数
+        /// </summary>
+        /// <param name="Id">主键Id</param>
+        /// <returns></returns>
+        public static int Count(string condition = "", string field = "Id")
+        {
+            int result = 0;
+            Dictionary<string, object> obj = new DbServiceNew(AppConfig.Base.main1Tables, _conn).Query("count(" + field + ") " + field + "", "UserSwapWhite", condition);
+            if(obj.Keys.Count > 0)
+            {
+                result = int.Parse(function.CheckInt(obj[field].ToString()));
+            }
+            return result;
+        }
+
+        /// <summary>
+        /// 查询是否存在
+        /// </summary>
+        /// <param name="Id">主键Id</param>
+        /// <returns></returns>
+        public static bool Exist(string condition)
+        {
+            Dictionary<string, object> obj = new DbServiceNew(AppConfig.Base.main1Tables, _conn).Query("1", "UserSwapWhite", condition);
+            if(obj.Keys.Count > 0)
+            {
+                return true;
+            }
+            return false;
+        }
+
+        /// <summary>
+        /// 添加数据
+        /// </summary>
+        /// <param name="Fields">要设置的字段</param>
+        /// <returns></returns>
+        public static AppResultJson Add(Dictionary<string, object> fields, bool check = true)
+        {
+            if(check)
+            {
+                
+            }
+            int Id = new DbServiceNew(AppConfig.Base.main1Tables, _conn).Add("UserSwapWhite", fields, 0);
+            return new AppResultJson(){ Status = "1", Data = Id };
+        }
+
+        /// <summary>
+        /// 修改数据
+        /// </summary>
+        /// <param name="Fields">要设置的字段</param>
+        /// <param name="Id">主键Id</param>
+        public static AppResultJson Edit(Dictionary<string, object> fields, int Id, bool check = true)
+        {
+            if(check)
+            {
+                
+            }
+            new DbServiceNew(AppConfig.Base.main1Tables, _conn).Edit("UserSwapWhite", fields, Id);
+            return new AppResultJson(){ Status = "1", Data = Id };
+        }
+
+        /// <summary>
+        /// 逻辑删除
+        /// </summary>
+        /// <param name="Id">主键Id</param>
+        public static void Remove(int Id)
+        {
+            Dictionary<string, object> fields = new Dictionary<string, object>();
+            fields.Add("Status", -1);
+            new DbServiceNew(AppConfig.Base.main1Tables, _conn).Edit("UserSwapWhite", fields, Id);
+        }
+
+        /// <summary>
+        /// 删除数据
+        /// </summary>
+        /// <param name="Id">主键Id</param>
+        public static void Delete(int Id)
+        {
+            new DbServiceNew(AppConfig.Base.main1Tables, _conn).Delete("UserSwapWhite", Id);
+        }
+
+        /// <summary>
+        /// 排序
+        /// </summary>
+        /// <param name="Id">主键Id</param>
+        /// <param name="Sort">排序序号</param>
+        public static void Sort(int Id, int Sort)
+        {
+            new DbServiceNew(AppConfig.Base.main1Tables, _conn).Sort("UserSwapWhite", Sort, Id);
+        }
+
+        /// <summary>
+        /// 导入数据
+        /// </summary>
+        /// <param name="ExcelData">json数据</param>
+        public static void Import(string ExcelData)
+        {
+            // WebCMSEntities db = new WebCMSEntities();
+            // JsonData list = JsonMapper.ToObject(ExcelData);
+            // for (int i = 1; i < list.Count;i++ )
+            // {
+            //     JsonData dr = list[i];
+                
+            //     db.UserSwapWhite.Add(new UserSwapWhite()
+            //     {
+            //         CreateDate = DateTime.Now,
+            //         UpdateDate = DateTime.Now,
+                    
+            //     });
+            //     db.SaveChanges();
+            // }
+            // db.Dispose();
+        }
+
+        /// <summary>
+        /// 导出excel表格
+        /// </summary>
+        /// <param name="fields">查询条件(单个字段)</param>
+        /// <param name="condition">查询条件(sql语句)</param>
+        /// <returns></returns>
+        // public static void ExportExcel(List<RelationData> relationData, string condition)
+        // {
+            
+        // }
+    }
+}

+ 458 - 0
Util/HaoDa/HaoDaHelper.cs

@@ -0,0 +1,458 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Net;
+using System.Security.Cryptography;
+using System.Text;
+using Aop.Api.Util;
+using Library;
+
+namespace MySystem
+{
+    public class HaoDaHelper
+    {
+        public readonly static HaoDaHelper Instance = new HaoDaHelper();
+        private HaoDaHelper()
+        {
+        }
+
+
+        #region 盒易付
+
+        //测试环境
+        // string BoxRequestUrl = "https://openapi-test.iboxpay.com";
+        // string BoxAppId = "AT7317781468267548672";
+        // string BoxAppSecret = "OfWuHQdhQfnE8NaF4xdtgk4B9CYqnbri";
+        // string BoxPublicKey = "";
+        // string BrhCode = "001040";
+
+        //生产环境
+        string BoxRequestUrl = "https://openapi.iboxpay.com";
+        string BoxAppId = "AP7175619323825451008";
+        string BoxAppSecret = "hUfR53gdjyfiZTBR5bILanMqRD1dXD7y";
+        string BoxPublicKey = "";
+        string BrhCode = "030145";
+
+        public string BoxServiceFee(string SnList, string ServiceFee)
+        {
+            function.WriteLog(DateTime.Now.ToString(), "设置盒易付机具服务费");
+            function.WriteLog(SnList, "设置盒易付机具服务费");
+            Dictionary<string, object> reqdic = new Dictionary<string, object>();
+            string batchNo = DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8);
+
+            reqdic.Add("snList", SnList.Split(',').ToList());//终端列表
+            if (ServiceFee != "0")
+            {
+                ServiceFee += "00";
+            }
+            reqdic.Add("depositGear", ServiceFee);//押金档位
+            reqdic.Add("modelId", "MHN10916");//费率,固定0.6
+            reqdic.Add("brhCode", BrhCode);//机构号
+            reqdic.Add("batchNo", batchNo);//批次号
+            string req = Newtonsoft.Json.JsonConvert.SerializeObject(reqdic);
+
+            Dictionary<string, string> headdic = GetHeader(reqdic);
+            string head = Newtonsoft.Json.JsonConvert.SerializeObject(headdic);
+            function.WriteLog("请求头\n" + head, "设置盒易付机具服务费");
+            function.WriteLog("请求参数\n" + req, "设置盒易付机具服务费");
+            function.WriteLog("请求地址:" + BoxRequestUrl + "/inst/register/terms", "设置盒易付机具服务费");
+            string result = PostWebRequest(BoxRequestUrl + "/inst/register/terms", req, headdic);
+            function.WriteLog("返回\n" + result + "\n\n", "设置盒易付机具服务费");
+            return result;
+        }
+
+        #region 上传图片接口
+        /// <summary>
+        /// 执行带文件上传的HTTP POST请求。
+        /// </summary>
+        /// <param name="url">请求地址</param>
+        /// <param name="textParams">请求文本参数</param>
+        /// <param name="fileParams">请求文件参数</param>
+        /// <param name="charset">编码字符集</param>
+        /// <returns>HTTP响应</returns>
+        public string DoPost(string url, string token, IDictionary<string, string> textParams, IDictionary<string, FileItem> fileParams, string charset = "utf-8")
+        {
+            // 如果没有文件参数,则走普通POST请求
+            if (fileParams == null || fileParams.Count == 0)
+            {
+                return "";
+            }
+
+            string boundary = DateTime.Now.Ticks.ToString("X"); // 随机分隔线
+
+            HttpWebRequest req = GetWebRequest(url, "POST");
+            req.Headers.Add("X-File-Token", token);
+            req.ContentType = "multipart/form-data;charset=" + charset + ";boundary=" + boundary;
+
+            Stream reqStream = req.GetRequestStream();
+            byte[] itemBoundaryBytes = Encoding.GetEncoding(charset).GetBytes("\r\n--" + boundary + "\r\n");
+            byte[] endBoundaryBytes = Encoding.GetEncoding(charset).GetBytes("\r\n--" + boundary + "--\r\n");
+
+            // 组装文本请求参数
+            string textTemplate = "Content-Disposition:form-data;name=\"{0}\"\r\nContent-Type:text/plain\r\n\r\n{1}";
+            IEnumerator<KeyValuePair<string, string>> textEnum = textParams.GetEnumerator();
+            while (textEnum.MoveNext())
+            {
+                string textEntry = string.Format(textTemplate, textEnum.Current.Key, textEnum.Current.Value);
+                byte[] itemBytes = Encoding.GetEncoding(charset).GetBytes(textEntry);
+                reqStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length);
+                reqStream.Write(itemBytes, 0, itemBytes.Length);
+            }
+
+            // 组装文件请求参数
+            string fileTemplate = "Content-Disposition:form-data;name=\"{0}\";filename=\"{1}\"\r\nContent-Type:{2}\r\n\r\n";
+            IEnumerator<KeyValuePair<string, FileItem>> fileEnum = fileParams.GetEnumerator();
+            while (fileEnum.MoveNext())
+            {
+                string key = fileEnum.Current.Key;
+                FileItem fileItem = fileEnum.Current.Value;
+                string fileEntry = string.Format(fileTemplate, key, fileItem.GetFileName(), fileItem.GetMimeType());
+                byte[] itemBytes = Encoding.GetEncoding(charset).GetBytes(fileEntry);
+                reqStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length);
+                reqStream.Write(itemBytes, 0, itemBytes.Length);
+
+                byte[] fileBytes = fileItem.GetContent();
+                reqStream.Write(fileBytes, 0, fileBytes.Length);
+            }
+
+            reqStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
+            reqStream.Close();
+
+            HttpWebResponse rsp = (HttpWebResponse)req.GetResponse();
+            Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet);
+            return GetResponseAsString(rsp, encoding);
+        }
+
+        public HttpWebRequest GetWebRequest(string url, string method)
+        {
+            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
+            req.ServicePoint.Expect100Continue = false;
+            req.Method = method;
+            req.KeepAlive = true;
+            req.Timeout = 100000;
+            return req;
+        }
+
+        /// <summary>
+        /// 把响应流转换为文本。
+        /// </summary>
+        /// <param name="rsp">响应流对象</param>
+        /// <param name="encoding">编码方式</param>
+        /// <returns>响应文本</returns>
+        public string GetResponseAsString(HttpWebResponse rsp, Encoding encoding)
+        {
+            StringBuilder result = new StringBuilder();
+            Stream stream = null;
+            StreamReader reader = null;
+
+            try
+            {
+                // 以字符流的方式读取HTTP响应
+                stream = rsp.GetResponseStream();
+                reader = new StreamReader(stream, encoding);
+
+                // 按字符读取并写入字符串缓冲
+                int ch = -1;
+                while ((ch = reader.Read()) > -1)
+                {
+                    // 过滤结束符
+                    char c = (char)ch;
+                    if (c != '\0')
+                    {
+                        result.Append(c);
+                    }
+                }
+            }
+            finally
+            {
+                // 释放资源
+                if (reader != null) reader.Close();
+                if (stream != null) stream.Close();
+                if (rsp != null) rsp.Close();
+            }
+
+            return result.ToString();
+        }
+        #endregion
+
+        public Dictionary<string, string> GetHeader(Dictionary<string, object> reqdic)
+        {
+            Dictionary<string, string> headdic = new Dictionary<string, string>();
+            string timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+            headdic.Add("appid", BoxAppId);//开发者id
+            headdic.Add("appsecret", BoxAppSecret);//开发者密码
+            headdic.Add("X-Up-AppId", BoxAppId);
+            headdic.Add("X-Timestamp", timestamp);
+            headdic.Add("X-Sign-Type", "SHA-256");
+            string req = Newtonsoft.Json.JsonConvert.SerializeObject(reqdic);
+            headdic.Add("X-Sign", SHA256Sign(timestamp + BoxAppSecret + req));
+            return headdic;
+        }
+
+        public string SHA256Sign(string toSignStr)
+        {
+            byte[] toSignByte = Encoding.UTF8.GetBytes(toSignStr);
+            SHA256 sha256 = SHA256.Create();
+            byte[] signByte = sha256.ComputeHash(toSignByte);
+            string sign = Convert.ToBase64String(signByte);
+            return sign;
+        }
+
+        public bool VerifySign(string toSignStr, string signStr)
+        {
+            byte[] toSignByte = Encoding.Default.GetBytes(toSignStr);
+            byte[] signByte = Convert.FromBase64String(signStr);
+            var toKey = Convert.FromBase64String(BoxPublicKey);
+            var rsaroot = RSA.Create();
+            rsaroot.ImportSubjectPublicKeyInfo(toKey, out _);
+            var publicKeyParameters = rsaroot.ExportParameters(false);
+            using (var rsa = RSA.Create())
+            {
+                rsa.ImportParameters(publicKeyParameters);
+                var sha256 = SHA256.Create();
+                var hash = sha256.ComputeHash(toSignByte);
+                return rsa.VerifyHash(hash, signByte, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
+            }
+        }
+
+        public string SignData(string toSignStr)
+        {
+            byte[] toSignByte = Encoding.UTF8.GetBytes(toSignStr);
+            var toKey = Convert.FromBase64String(BoxPublicKey);
+            var rsaroot = RSA.Create();
+            rsaroot.ImportSubjectPublicKeyInfo(toKey, out _);
+            var publicKeyParameters = rsaroot.ExportParameters(false);
+            using (var rsa = RSA.Create())
+            {
+                rsa.ImportParameters(publicKeyParameters);
+                var sha256 = SHA256.Create();
+                var hash = sha256.ComputeHash(toSignByte);
+                byte[] endByte = rsa.SignData(toSignByte, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
+                return Convert.ToBase64String(endByte);
+            }
+        }
+
+        private string PostWebRequest(string postUrl, string paramData, Dictionary<string, string> headers)
+        {
+            string ret = string.Empty;
+            try
+            {
+                function.WriteLog(DateTime.Now.ToString(), "请求开店宝API日志");
+                function.WriteLog(postUrl, "请求开店宝API日志");
+                function.WriteLog(paramData, "请求开店宝API日志");
+                byte[] postData = System.Text.Encoding.UTF8.GetBytes(paramData);
+                // 设置提交的相关参数 
+                System.Net.HttpWebRequest request = System.Net.WebRequest.Create(postUrl) as System.Net.HttpWebRequest;
+                System.Text.Encoding myEncoding = System.Text.Encoding.UTF8;
+                request.Method = "POST";
+                request.KeepAlive = false;
+                request.AllowAutoRedirect = true;
+                request.ContentType = "application/json";
+                foreach (string key in headers.Keys)
+                {
+                    request.Headers.Add(key, headers[key]);
+                }
+                request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR  3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
+
+                request.ContentLength = postData.Length;
+
+                // 提交请求数据 
+                System.IO.Stream outputStream = request.GetRequestStream();
+                outputStream.Write(postData, 0, postData.Length);
+                outputStream.Close();
+                System.Net.HttpWebResponse response;
+                System.IO.Stream responseStream;
+                System.IO.StreamReader reader;
+                string srcString;
+                response = request.GetResponse() as System.Net.HttpWebResponse;
+                responseStream = response.GetResponseStream();
+                reader = new System.IO.StreamReader(responseStream, System.Text.Encoding.UTF8);
+                srcString = reader.ReadToEnd();
+                ret = srcString;   //返回值赋值
+                reader.Close();
+                function.WriteLog(srcString, "请求开店宝API日志");
+            }
+            catch (System.Net.WebException ex)
+            {
+                System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)ex.Response;
+                System.IO.Stream myResponseStream = response.GetResponseStream();
+                //获取响应内容
+                System.IO.StreamReader myStreamReader = new System.IO.StreamReader(myResponseStream);
+                ret = myStreamReader.ReadToEnd();
+                myResponseStream.Close();
+            }
+            catch (Exception ex)
+            {
+                ret = "fail";
+                function.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "请求开店宝API异常");
+            }
+            return ret;
+        }
+
+
+        /// <summary>
+        /// 微信公众号和小程序支付接口
+        /// </summary>
+        /// <param name="mchtNo">盒子的商户编号</param>
+        /// <param name="storeNo">盒子的门店编码</param>
+        /// <param name="outOrderNo">商户订单号</param>
+        /// <param name="transAmount">交易金额,单位:分</param>
+        /// <param name="callbackUrl">交易完成之后,商户接收交易结果通知的地址</param>
+        /// <param name="subOpenId">用户子标识</param>
+        /// <param name="confirmCode">支付确认码</param>
+        /// <param name="subAppId">公众号或者小程序appId</param>
+        /// <param name="subAppIdType">对应的类型,默认为公众号, SUBSCRIPTION: 公众号 MINI_PROGRAM: 小程序</param>
+        /// <param name="ledgerModel">分账类型:1不分账 2分账,注意只有开通了分账才能传这个字段</param>
+        /// <returns></returns>
+        public string WeChatPay(string mchtNo, string storeNo, string outOrderNo, decimal transAmount, string callbackUrl, string subOpenId, string confirmCode, string subAppId, string subAppIdType, string ledgerModel)
+        {
+            function.WriteLog(DateTime.Now.ToString(), "好哒微信公众号和小程序支付");
+            Dictionary<string, object> reqdic = new Dictionary<string, object>();
+            reqdic.Add("mchtNo", mchtNo); //盒子的商户编号
+            reqdic.Add("storeNo", storeNo); //盒子的门店编码	
+            reqdic.Add("outOrderNo", outOrderNo); //商户订单号
+            int payAmount = (int)(transAmount * 100);
+            reqdic.Add("transAmount", payAmount); //交易金额,单位:分
+            reqdic.Add("callbackUrl", callbackUrl); //交易完成之后,商户接收交易结果通知的地址	
+            reqdic.Add("subOpenId", subOpenId); //用户子标识
+            reqdic.Add("confirmCode", confirmCode); //支付确认码,由4位纯数字组成,每次请求时随机生成	
+            reqdic.Add("subAppId", subAppId); //公众号或者小程序appId	
+            reqdic.Add("subAppIdType", subAppIdType); //subAppId 对应的类型,默认为公众号, SUBSCRIPTION: 公众号 MINI_PROGRAM: 小程序
+            reqdic.Add("ledgerModel", ledgerModel); //分账类型:1不分账 2分账,注意只有开通了分账才能传这个字段
+
+            string req = Newtonsoft.Json.JsonConvert.SerializeObject(reqdic);
+            function.WriteLog(req, "好哒微信公众号和小程序支付");
+            Dictionary<string, string> headdic = GetHeader(req);
+            string head = Newtonsoft.Json.JsonConvert.SerializeObject(headdic);
+            function.WriteLog("请求头\n" + head, "好哒微信公众号和小程序支付");
+            function.WriteLog("请求参数\n" + req, "好哒微信公众号和小程序支付");
+            function.WriteLog("请求地址:" + BoxRequestUrl + "/api/hzg/v2/unitedtrade/wechat_js_pay", "好哒微信公众号和小程序支付");
+            string result = PostWebRequest(BoxRequestUrl + "/api/hzg/v2/unitedtrade/wechat_js_pay", req, headdic);
+            function.WriteLog("返回\n" + result + "\n\n", "好哒微信公众号和小程序支付");
+
+            return result;
+        }
+
+        /// <summary>
+        /// 支付宝服务窗支付接口
+        /// </summary>
+        /// <param name="mchtNo">盒子的商户编号</param>
+        /// <param name="storeNo">盒子的门店编码</param>
+        /// <param name="outOrderNo">商户订单号</param>
+        /// <param name="transAmount">交易金额,单位:分</param>
+        /// <param name="callbackUrl">交易完成之后,商户接收交易结果通知的地址</param>
+        /// <param name="subOpenId">支付宝用户标识</param>
+        /// <param name="confirmCode">支付确认码,由4位纯数字组成,每次请求时随机生成</param>
+        /// <param name="ledgerModel">分账类型:1不分账 2分账,注意只有开通了分账才能传这个字段</param>
+        /// <returns></returns>
+        public string Alipay(string mchtNo, string storeNo, string outOrderNo, decimal transAmount, string callbackUrl, string subOpenId, string confirmCode, string ledgerModel)
+        {
+            function.WriteLog(DateTime.Now.ToString(), "好哒支付宝服务窗支付");
+            Dictionary<string, object> reqdic = new Dictionary<string, object>();
+            reqdic.Add("mchtNo", mchtNo); //盒子的商户编号
+            reqdic.Add("storeNo", storeNo); //盒子的门店编码	
+            reqdic.Add("outOrderNo", outOrderNo); //商户订单号
+            int payAmount = (int)(transAmount * 100);
+            reqdic.Add("transAmount", payAmount); //交易金额,单位:分	
+            reqdic.Add("callbackUrl", callbackUrl); //交易完成之后,商户接收交易结果通知的地址
+            reqdic.Add("subOpenId", subOpenId); //支付宝用户标识	
+            reqdic.Add("confirmCode", confirmCode); //支付确认码,由4位纯数字组成,每次请求时随机生成
+            reqdic.Add("ledgerModel", ledgerModel); //分账类型:1不分账 2分账,注意只有开通了分账才能传这个字段
+
+            string req = Newtonsoft.Json.JsonConvert.SerializeObject(reqdic);
+            function.WriteLog(req, "好哒支付宝服务窗支付");
+            Dictionary<string, string> headdic = GetHeader(req);
+            string head = Newtonsoft.Json.JsonConvert.SerializeObject(headdic);
+            function.WriteLog("请求头\n" + head, "好哒支付宝服务窗支付");
+            function.WriteLog("请求参数\n" + req, "好哒支付宝服务窗支付");
+            function.WriteLog("请求地址:" + BoxRequestUrl + "/api/hzg/v2/unitedtrade/ali_js_pay", "好哒支付宝服务窗支付");
+            string result = PostWebRequest(BoxRequestUrl + "/api/hzg/v2/unitedtrade/ali_js_pay", req, headdic);
+            function.WriteLog("返回\n" + result + "\n\n", "好哒支付宝服务窗支付");
+
+            return result;
+        }
+
+        /// <summary>
+        /// 好哒到账记录查询
+        /// </summary>
+        /// <param name="mchtNo">商户号</param>
+        /// <param name="startTime">查询开始时间(yyyy-MM-dd)</param>
+        /// <param name="endTime">查询结束时间(yyyy-MM-dd),最大查询时间区间31天</param>
+        /// <param name="tradeMchtNo">收单商户号(15位)</param>
+        /// <param name="cardNo">结算卡号</param>
+        /// <param name="settleStatus">出款状态(0:入账成功、1:入账失败、2:结算超时、3:入账受理成功、4:已提交结算请求)</param>
+        /// <param name="page">当前页数,默认1</param>
+        /// <param name="rows">每页大小,默认10,最大500</param>
+        /// <returns></returns>
+        public string CardInComeRecord(string mchtNo, string startTime, string endTime, string tradeMchtNo, string cardNo, string settleStatus, string page, string rows)
+        {
+            function.WriteLog(DateTime.Now.ToString(), "好哒到账记录查询");
+            Dictionary<string, object> reqdic = new Dictionary<string, object>();
+            reqdic.Add("mchtNo", mchtNo); //商户号
+            reqdic.Add("startTime", startTime); //查询开始时间(yyyy-MM-dd)
+            reqdic.Add("endTime", endTime); //查询结束时间(yyyy-MM-dd),最大查询时间区间31天
+            reqdic.Add("tradeMchtNo", tradeMchtNo); //收单商户号(15位)
+            reqdic.Add("cardNo", cardNo); //结算卡号
+            reqdic.Add("settleStatus", settleStatus); //出款状态(0:入账成功、1:入账失败、2:结算超时、3:入账受理成功、4:已提交结算请求)
+            reqdic.Add("page", page); //当前页数,默认1
+            reqdic.Add("rows", rows); //每页大小,默认10,最大500
+
+            string req = Newtonsoft.Json.JsonConvert.SerializeObject(reqdic);
+            function.WriteLog(req, "好哒到账记录查询");
+            Dictionary<string, string> headdic = GetHeader(req);
+            string head = Newtonsoft.Json.JsonConvert.SerializeObject(headdic);
+            function.WriteLog("请求头\n" + head, "好哒到账记录查询");
+            function.WriteLog("请求参数\n" + req, "好哒到账记录查询");
+            function.WriteLog("请求地址:" + BoxRequestUrl + "/api/v3/hzg/accb/to_account/query", "好哒到账记录查询");
+            string result = PostWebRequest(BoxRequestUrl + "/api/v3/hzg/accb/to_account/query", req, headdic);
+            function.WriteLog("返回\n" + result + "\n\n", "好哒到账记录查询");
+
+            return result;
+        }
+
+        /// <summary>
+        /// 好哒到账记录详情
+        /// </summary>
+        /// <param name="mchtNo">商户号</param>
+        /// <param name="id">id</param>
+        /// <returns></returns>
+        public string CardInComeDetail(string mchtNo, string id)
+        {
+            function.WriteLog(DateTime.Now.ToString(), "好哒到账记录详情");
+            Dictionary<string, object> reqdic = new Dictionary<string, object>();
+            reqdic.Add("mchtNo", mchtNo); //商户号
+            reqdic.Add("id", id); //id
+
+            string req = Newtonsoft.Json.JsonConvert.SerializeObject(reqdic);
+            function.WriteLog(req, "好哒到账记录详情");
+            Dictionary<string, string> headdic = GetHeader(req);
+            string head = Newtonsoft.Json.JsonConvert.SerializeObject(headdic);
+            function.WriteLog("请求头\n" + head, "好哒到账记录详情");
+            function.WriteLog("请求参数\n" + req, "好哒到账记录详情");
+            function.WriteLog("请求地址:" + BoxRequestUrl + "/api/v3/hzg/accb/to_account/get", "好哒到账记录详情");
+            string result = PostWebRequest(BoxRequestUrl + "/api/v3/hzg/accb/to_account/get", req, headdic);
+            function.WriteLog("返回\n" + result + "\n\n", "好哒到账记录详情");
+
+            return result;
+        }
+
+
+        public Dictionary<string, string> GetHeader(string req)
+        {
+            Dictionary<string, string> headdic = new Dictionary<string, string>();
+            string timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+            // headdic.Add("appid", BoxAppId);//开发者id
+            // headdic.Add("appsecret", BoxAppSecret);//开发者密码
+            headdic.Add("X-Up-AppId", BoxAppId);
+            headdic.Add("X-Timestamp", timestamp);
+            headdic.Add("X-Sign-Type", "SHA-256");
+            headdic.Add("X-Sign", SHA256Sign(timestamp + BoxAppSecret + req));
+            return headdic;
+        }
+
+        #endregion
+
+
+    }
+}

+ 60 - 0
Util/MySelf/MySelfUtil.cs

@@ -0,0 +1,60 @@
+using MySystem.Models.Main2;
+using Library;
+using MySystem.Service.Main2;
+using System.Collections.Generic;
+using System;
+using LitJson;
+using MySystem.Areas.Api.Controllers;
+
+namespace MySystem
+{
+    /// <summary>
+    /// 我的工具类
+    /// </summary>
+    public class MySelfUtil
+    {
+        #region 到账记录列表
+        /// <summary>
+        /// 到账记录列表
+        /// </summary>
+        /// <returns></returns>
+        public static List<Dictionary<string, object>> CardInComeRecordList(int MerchantId, string StartDate, string EndDate, string pageSize, string pageNum)
+        {
+            var merchantInfo = MerchantAddInfoService.Query(MerchantId);
+            var SubjectType = 0;
+            if (merchantInfo.SubjectType == "SUBJECT_TYPE_ENTERPRISE") SubjectType = 1; //企业公司
+            if (merchantInfo.SubjectType == "SUBJECT_TYPE_INDIVIDUAL") SubjectType = 2; //个体工商户
+            if (merchantInfo.SubjectType == "SUBJECT_TYPE_SMALL") SubjectType = 3; //小微
+            JsonData Info = JsonMapper.ToObject(HaoDaHelper.Instance.CardInComeRecord(merchantInfo.OutMchtNo, StartDate, EndDate, merchantInfo.MchtNo, "", "", pageNum, pageSize));
+            List<Dictionary<string, object>> dataList = new List<Dictionary<string, object>>();
+            if (Info["code"].ToString() == "0")
+            {
+                var list = Info["data"]["list"];
+                for (int i = 0; i < list.Count; i++)
+                {
+                    Dictionary<string, object> curData = new Dictionary<string, object>();
+                    var item = list[i];
+                    if (item["settleAccountName"].ToString() != "四川省润观米科技有限公司")
+                    {
+                        curData.Add("TradeNo", item["id"].ToString()); //订单Id
+                        curData.Add("SettleStatus", item["settleStatus"].ToString()); //结算状态(0: 入账成功、1: 入账失败、2: 结算超时、3: 入账受理成功、4: 已提交结算请求、5:已拆分批次、6: 初始化批次信息、7:正在提交结算请求)
+                        curData.Add("MerchantName", merchantInfo.CertMerchantName); //商户名称
+                        curData.Add("ClearTime", item["clearTime"].ToString()); //处理时间
+                        curData.Add("RemitTime", item["remitTime"].ToString()); //到账时间
+                        curData.Add("SettleDate", item["settleDate"].ToString().Substring(item["settleDate"].ToString().Length - 5, 5)); //结算日期
+                        curData.Add("SettleAmount", (decimal.Parse(item["settleAmount"].ToString()) / 100).ToString("f2")); //结算金额
+                        curData.Add("SubjectType", SubjectType); //进件类型(1 企业 2 个体 3 小微)
+                        curData.Add("CardNo", item["cardNo"].ToString()); //结算卡号
+                        curData.Add("TradeMchtName", item["tradeMchtName"].ToString()); //收单商户名称
+                        curData.Add("BankName", item["bankName"].ToString()); //开户行名称
+                        dataList.Add(curData);
+                    }
+                }
+            }
+            return dataList;
+        }
+        #endregion
+
+
+    }
+}