using Aop.Api; using Aop.Api.Request; using CRM.Core.DTO; using CRM.Core.DTO.Ord; using Ninject; using System; using System.Collections.Generic; using System.Configuration; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Web; using System.Web.Mvc; using WX.CRM.BLL; using WX.CRM.BLL.Base; using WX.CRM.BLL.Util; using WX.CRM.Common; using WX.CRM.Common.Layui; using WX.CRM.Common.WxPay; using WX.CRM.IBLL.Res; using WX.CRM.IBLL.Util; using WX.CRM.IBLL.Wx; using WX.CRM.Model.Entity; using WX.CRM.Model.Enum; using WX.CRM.WebHelper; namespace WX.CRM.WEB.Controllers.WeiXin { public class OrderDepositController : BaseController { [Inject] public CACHE_BL cache_BL { get; set; } [Inject] public ISecurityHelper sHelper { get; set; } [Inject] public IWX_SZZYORDERDEPOSIT _orderDepoist { get; set; } [Inject] public IWX_SZZYORDERREFUND _orderRefund { get; set; } [Inject] public IWX_SZZYORDERPAY _orderPay { get; set; } [Inject] public IRES_CUSTOMER_Q _customerQ { get; set; } [Inject] public IWX_SZZYORDER _order { get; set; } [Inject] public IWX_ORDEREXT _orderext { get; set; } public NativePay _nativePay = new NativePay(); [Inject] public IRES_MYALLOCATERES _myRes { get; set; } [HttpGet] [AuthorizeRedirect(Roles = InitRights.CONST_订金列表)] public ActionResult Index() { Pager pager = new Pager() { page = 1, rows = 20 }; string tableId = "tablist"; Table tab = new Table(tableId); tab.AddHeadCol("id", "", "ID"); tab.AddHeadCol("resid", "", "客户ID"); tab.AddHeadCol("paytypename", "", "支付类型"); tab.AddHeadCol("paydate", "", "到账时间"); tab.AddHeadCol("payprice", "", "订金金额"); tab.AddHeadCol("payname", "", "付款人姓名"); tab.AddHeadCol("remark", "", "说明"); tab.AddHeadCol("auditstatus", "", "审核状态"); tab.AddHeadCol("lastprice", "", "剩余金额"); tab.AddHeadCol("payno", "", "流水号"); //tab.AddHeadCol("ISUSE", "", "是否使用"); //tab.AddHeadCol("USETIME", "", "使用时间"); tab.AddHeadCol("orderid", "", "关联订单号"); tab.AddHeadCol("rejectremark", "", "备注"); tab.AddHeadCol("", "", "操作"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead() + Pagination.GetPage(pager, tableId, "20,50,100"); return View(); } [HttpPost] [AuthorizeRedirect(Roles = InitRights.CONST_订金列表)] public JsonResult Index(Pager pager, string columns, OrderPayListReqDto dto) { dto.channel = int.Parse(Utility.GetSettingOrNullByKey("Channel")); var ret = _orderDepoist.GetCoreDepositList(pager, dto); //var listAll = _orderDepoist.GetList(where, p => p.ID, 1, int.MaxValue, out totalRecords); //var payPrices = listAll.Sum(p => p.PAYPRICE); Table table = new Table(columns, true); if (ret.result) { if (ret.infolist.Count > 0) { foreach (var model in ret.infolist) { //model.PAYTYPENAME = GetPayTypeName(model.PAYTYPE); table.AddCol(model.id); table.AddCol(model.resid); table.AddCol(model.paytypename); table.AddCol(model.paydate); table.AddCol(model.payprice); table.AddCol(model.payname); table.AddCol(model.remark); //table.AddCol(model.AUDITSTATUS == 1 ? "已审核" : "未审核"); if (model.auditstatus == 1) { table.AddCol("color:green", "", "已审核"); } else if (model.auditstatus == -1) { table.AddCol("color:red", "", "驳回"); } else { table.AddCol("未审核"); } table.AddCol(model.lastprice); table.AddCol(model.payno); //table.AddCol(model.USETIME); table.AddCol(model.orderid); table.AddCol(model.rejectremark); table.AddCol(model.auditstatus == 1 ? (model.lastprice.HasValue && model.lastprice.Value > 0 ? string.Format("{1}", model.id, "退款申请") : "") : ""); table.AddRow(); } } table.AddCol("合计:"); table.AddCol(""); table.AddCol(""); table.AddCol(""); table.AddCol(ret.sumInfo.paypriceSum); table.AddCol(""); table.AddCol(""); table.AddCol(""); table.AddCol(ret.sumInfo.lastpriceSum); table.AddCol(""); table.AddCol(""); table.AddCol(""); table.AddRow(); } else { table.AddHiddenCol(""); table.AddErrCol("加载错误"); table.AddRow(); } var json = new { totalPages = ret.pageinfo.totalPages, totalRows = ret.pageinfo.count, rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } #region 使用本地数据的老方式 //[HttpPost] //[AuthorizeRedirect(Roles = InitRights.CONST_订金列表)] //public JsonResult Index(Pager pager, string columns, string resid, DateTime? aTime, DateTime? zTime, decimal? status, DateTime? sTime, DateTime? eTime, decimal? isUse, decimal? paytype, DateTime? use1Time, DateTime? use2Time, decimal? id, string payno) //{ // var where = PredicateExtensionses.True(); // if (!string.IsNullOrEmpty(resid)) // where = where.And(p => p.RESID == resid); // if (aTime.HasValue) // where = where.And(p => p.CTIME >= aTime.Value); // if (zTime.HasValue) // { // zTime = zTime.Value.AddDays(1); // where = where.And(p => p.CTIME < zTime.Value); // } // if (status.HasValue) // { // if (status == 0) // { // where = where.And(p => p.AUDITSTATUS == null); // } // else // { // where = where.And(p => p.AUDITSTATUS == status.Value); // } // } // if (sTime.HasValue) // where = where.And(p => p.PAYDATE >= sTime.Value); // if (eTime.HasValue) // { // eTime = eTime.Value.AddDays(1); // where = where.And(p => p.PAYDATE < eTime.Value); // } // if (isUse.HasValue) // where = where.And(p => p.ISUSE == isUse.Value); // if (paytype.HasValue) // where = where.And(p => p.PAYTYPE == paytype.Value); // if (id.HasValue) // { // where = where.And(p => p.ID == id.Value); // } // if (!string.IsNullOrEmpty(payno)) // { // where = where.And(p => p.PAYNO == payno); // } // where = where.And(p => p.ISDELETE != 1); // var list = _orderDepoist.GetList(where, p => p.ID, pager); // var orders = list.Where(p => p.ORDERID != null).Select(p => p.ORDERID); // var payList = _orderPay.GetList(p => orders.Contains(p.ORDERID)); // var totalRecords = 0; // var listAll = _orderDepoist.GetList(where, p => p.ID, 1, int.MaxValue, out totalRecords); // var payPrices = listAll.Sum(p => p.PAYPRICE); // var data = new List(); // foreach (var item in list) // { // var payModel = payList.Where(p => p.ORDERID == item.ORDERID && p.PAYNO != item.PAYNO).OrderByDescending(p => p.PAYDATE).FirstOrDefault(); // var useTime = payModel != null ? payModel.PAYDATE : (DateTime?)null; // data.Add(new WX_SZZYORDERDEPOSITVIEW() // { // ID = item.ID, // RESID = item.RESID, // PAYTYPENAME = GetPayTypeName(item.PAYTYPE), // PAYDATE = item.PAYDATE, // PAYPRICE = item.PAYPRICE, // PAYNAME = item.PAYNAME, // REMARK = item.REMARK, // AUDITSTATUS = item.AUDITSTATUS, // PAYNO = item.PAYNO, // ISUSE = item.ISUSE, // USETIME = useTime, // ORDERID = item.ORDERID, // REJECTREMARK = item.REJECTREMARK, // LASTPRICE = item.LASTPRICE // }); // } // if (use1Time.HasValue && use2Time.HasValue) // { // data = data.Where(p => p.USETIME >= use1Time.Value && p.USETIME < use2Time.Value.AddDays(1)).ToList(); // } // else if (use1Time.HasValue && !use2Time.HasValue) // { // data = data.Where(p => p.USETIME >= use1Time.Value).ToList(); // } // else if (!use1Time.HasValue && use2Time.HasValue) // { // data = data.Where(p => p.USETIME < use2Time.Value.AddDays(1)).ToList(); // } // Table table = new Table(columns, true); // foreach (var model in data) // { // //model.PAYTYPENAME = GetPayTypeName(model.PAYTYPE); // table.AddCol(model.ID); // table.AddCol(model.RESID); // table.AddCol(model.PAYTYPENAME); // table.AddCol(model.PAYDATE); // table.AddCol(model.PAYPRICE); // table.AddCol(model.PAYNAME); // table.AddCol(model.REMARK); // //table.AddCol(model.AUDITSTATUS == 1 ? "已审核" : "未审核"); // if (model.AUDITSTATUS == 1) // { // table.AddCol("color:green", "", "已审核"); // } // else if (model.AUDITSTATUS == -1) // { // table.AddCol("color:red", "", "驳回"); // } // else // { // table.AddCol("未审核"); // } // table.AddCol(model.LASTPRICE); // table.AddCol(model.PAYNO); // //table.AddCol(model.ISUSE == 0 ? "未使用" : (model.ISUSE == 1 ? "已使用" : (model.ISUSE == 2 ? "已退款" : "已开通"))); // //if (model.ORDERID.HasValue) // //{ // // var payModel = payList.Where(p => p.ORDERID == model.ORDERID && p.PAYNO != model.PAYNO).OrderByDescending(p => p.PAYDATE).FirstOrDefault(); // // if (payModel != null) // // { // // table.AddCol(payModel.PAYDATE); // // } // // else // // { // // table.AddCol(""); // // } // //} // //else // //{ // // table.AddCol(""); // //} // table.AddCol(model.USETIME); // table.AddCol(model.ORDERID); // table.AddCol(model.REJECTREMARK); // table.AddCol(model.AUDITSTATUS == 1 ? (model.LASTPRICE.HasValue && model.LASTPRICE.Value > 0 ? string.Format("{1}", model.ID, "退款申请") : "") : ""); // table.AddRow(); // } // table.AddHiddenCol(""); // table.AddCol("合计:"); // table.AddCol(""); // table.AddCol(""); // table.AddCol(payPrices); // table.AddCol(""); // table.AddCol(""); // table.AddCol(""); // table.AddCol(""); // table.AddCol(""); // table.AddCol(""); // table.AddCol(""); // table.AddCol(""); // table.AddRow(); // var json = new // { // totalPages = pager.totalPages, // totalRows = pager.totalRows, // rowsList = table.GetRows() // }; // return Json(json, JsonRequestBehavior.AllowGet); //} #endregion [HttpGet] public ActionResult Info() { Pager pager = new Pager() { page = 1, rows = int.MaxValue }; string tableId = "tablist"; Table tab = new Table(tableId); tab.AddHeadCol("ID", "", "ID"); tab.AddHeadCol("RESID", "", "客户ID"); tab.AddHeadCol("PAYTYPENAME", "", "支付类型"); tab.AddHeadCol("PAYDATE", "", "付款时间"); tab.AddHeadCol("PAYPRICE", "", "订金金额"); tab.AddHeadCol("PAYNAME", "", "付款人姓名"); tab.AddHeadCol("REMARK", "", "说明"); tab.AddHeadCol("AUDITSTATUS", "", "审核状态"); tab.AddHeadCol("PAYNO", "", "流水号"); tab.AddHeadCol("ISUSE", "", "是否使用"); tab.AddHeadCol("ORDERID", "", "关联订单号"); tab.AddHeadCol("ACTION", "", "操作"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead(); return View(); } [HttpPost] public JsonResult Info(string resid, string columns) { var where = PredicateExtensionses.True(); if (!string.IsNullOrEmpty(resid)) { var customerId = _customerQ.getResCustomerByResId(resid).CUSTOMERID; string[] resids = _customerQ.GetAllResidByCustomerId(customerId); where = where.And(p => resids.Contains(p.RESID)); } var list = _orderDepoist.GetList(where); Table table = new Table(columns, true); foreach (var model in list) { table.AddCol(model.ID); table.AddCol(model.RESID); table.AddCol(model.PAYTYPENAME); table.AddCol(model.PAYDATE); table.AddCol(model.PAYPRICE); table.AddCol(model.PAYNAME); table.AddCol(model.REMARK); table.AddCol(model.AUDITSTATUS == 1 ? "已审核" : "未审核"); table.AddCol(model.PAYNO); table.AddCol(model.ISUSE == 0 ? "未使用" : (model.ISUSE == 1 ? "已使用" : (model.ISUSE == 2 ? "已退款" : "已开通"))); table.AddCol(model.ORDERID); table.AddCol(model.AUDITSTATUS == 1 ? (model.ISUSE == 0 ? string.Format("{1}", model.ID, "退款申请") : "") : ""); table.AddRow(); } var json = new { rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } [HttpGet] public ActionResult List() { string CustomerId = Request.QueryString["CustomerId"]; var ret = _orderDepoist.GetCoreDepositLastPay(new LastPriceReqDto() { resid = CustomerId, channel = int.Parse(Utility.GetSettingOrNullByKey("Channel")) }); ViewBag.Ret = ret; return View(); } [HttpPost] public JsonResult List(string resid) { //var where = PredicateExtensionses.True(); //if (!string.IsNullOrEmpty(resid)) //{ // var customerId = _customerQ.getResCustomerByResId(resid).CUSTOMERID; // string[] resids = _customerQ.GetAllResidByCustomerId(customerId); // where = where.And(p => resids.Contains(p.RESID)); //} //where = where.And(p => p.ISDELETE != 1); //var list = _orderDepoist.GetList(where).ToList(); OrderPayListReqDto dto = new OrderPayListReqDto() { resid = resid, channel = int.Parse(Utility.GetSettingOrNullByKey("Channel")) }; Pager pager = new Pager() { page = 1, rows = int.MaxValue }; var ret = _orderDepoist.GetCoreDepositList(pager, dto); var data = new LayuiData() { msg = "数据加载成功!", count = 0, code = 0, data = ret.infolist, suminfo = ret.sumInfo, }; if (ret.result == false) { data.SetFail(-1, "数据拉取错误!"); } return Json(data, JsonRequestBehavior.AllowGet); } [HttpGet] public ActionResult Add() { var deptList = cache_BL.GetList_SalesDepartMent().Where(p => p.CHANNELDEF != null); var selectList = new List(); foreach (var item in deptList) { selectList.Add(new SelectListItem() { Text = item.DEPTNAME, Value = item.SALEDEPTCODE }); } ViewBag.DeptList = selectList; return View(); } //手工添加支付 [HttpPost] public JsonResult Add(OrderDepositDto dto) { try { if (!ModelState.IsValid) { return JsonHandler.ManageMessage("参数有误,请确认!", false); } var roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); //if (!(roleCodes.Contains("[GLY]") || roleCodes.Contains("[ZJZL]"))) //{ // return JsonHandler.ManageMessage("请联系助理添加!", false); //} if (!string.IsNullOrEmpty(dto.payno)) { dto.payno = dto.payno.Trim(); } //dto.companycode = companyCode; dto.companycode = Utility.GetSettingOrNullByKey("DataClientCode"); //var groups = _CacheQ.GetGroupList(); //var ug = _CacheQ.GetList_InnerUserGroup(); var depment = _CacheQ.GetList_SalesDepartMent(); //var myRes = _myRes.Get(p => p.RESID == dto.resid); //if (myRes != null) //{ // var uginfo = ug.Find(p => p.INNERUSERID == myRes.INNERUSERID); // if (uginfo != null) // { // var group = groups.Find(p => p.GID == uginfo.GID); // if (group != null) // { // var dep = depment.Find(p => p.SALEDEPTID == group.SALEDEPTID); // if (dep != null) // { // if (dep.CHANNELDEF.HasValue) // dto.channel = Convert.ToInt32(dep.CHANNELDEF); // } // } // } //} if (!string.IsNullOrEmpty(dto.deptcode)) { //如果传了部门编号 var dep = depment.Find(p => p.SALEDEPTCODE == dto.deptcode); if (dep != null) { if (dep.CHANNELDEF.HasValue) dto.channel = Convert.ToInt32(dep.CHANNELDEF); } } if (!dto.channel.HasValue) { dto.channel = int.Parse(Utility.GetSettingOrNullByKey("Channel")); } dto.creator = Convert.ToInt32(Eid); dto.creatorname = UserName; var url = cache_BL.GetValue_Parameter(Parameter.Core_ZxdService_OrderDeposit); var json = sHelper.createSignEncodingStr(dto.ToJson(), SecurityHelper.OrderClientIdKey); string retmsg = Utility.PostData(url + "?" + json, Encoding.UTF8); var retmessage = WebHelper.JsonHelper.JsonDivertToObj(retmsg); if (retmessage.result) { try { var orderDeposit = new WX_SZZYORDERDEPOSIT() { ID = decimal.Parse(retmessage.retmsg), RESID = dto.resid, PAYTYPE = dto.paytype, PAYTYPENAME = GetPayTypeName(dto.paytype), PAYDATE = dto.paydate, PAYPRICE = dto.payprice, PAYNAME = dto.payname, REMARK = dto.remark, AUDITSTATUS = 0, CTIME = DateTime.Now, PAYNO = dto.payno.Trim(), CREATOR = Eid, CREATORNAME = UserName, DEPTCODE = dto.deptcode }; _orderDepoist.Add(orderDeposit); } catch (Exception xx) { LogHelper.Error("订金记录添加到本地库异常:" + xx.ToString()); } return JsonHandler.ManageMessage("提交成功", true); } else return JsonHandler.ManageMessage("提交失败,请稍后重试或者联系管理员!", false); //return JsonHandler.ManageMessage("提交成功", true); } catch (Exception ex) { LogHelper.Error(ex.ToString()); return JsonHandler.ManageMessage("提交失败,请稍后重试或者联系管理员!", false); } } [HttpGet] public ActionResult Add2() { var deptList = cache_BL.GetList_SalesDepartMent().Where(p => p.CHANNELDEF != null); var selectList = new List(); foreach (var item in deptList) { selectList.Add(new SelectListItem() { Text = item.DEPTNAME, Value = item.SALEDEPTCODE }); } ViewBag.DeptList = selectList; var quota = cache_BL.GetValue_Parameter("QuoTa"); ViewBag.QuoTa = quota; return View(); } [HttpGet] public ActionResult Bank() { var deptList = cache_BL.GetList_SalesDepartMent().Where(p => p.CHANNELDEF != null); var selectList = new List(); foreach (var item in deptList) { selectList.Add(new SelectListItem() { Text = item.DEPTNAME, Value = item.SALEDEPTCODE }); } ViewBag.DeptList = selectList; return View(); } /// /// 客户资料页面,订金二维码添加,我的订单提交也在这里 /// /// /// [HttpPost] public JsonResult Add2(OrderDepositDto dto) { try { if (!ModelState.IsValid) { return JsonHandler.ManageMessage("参数有误,请确认!", false); } //var mchId = cache_BL.GetValue_Parameter("mchId"); //if(string.IsNullOrEmpty(mchId)) //{ // return JsonHandler.ManageMessage("请先配置商户号!", false); //} var noId = string.Empty; if (dto.paytype == 1) { var alpayId = _CacheQ.GetValue_Parameter("alpayId"); if (string.IsNullOrEmpty(alpayId)) { return JsonHandler.ManageMessage("请先配置商户号!", false); } noId = alpayId; } else { var mchId = _CacheQ.GetValue_Parameter("mchId"); if (string.IsNullOrEmpty(mchId)) { return JsonHandler.ManageMessage("请先配置商户号!", false); } noId = mchId; } if (dto.paytype != 3) { //如果不是银行转账 dto.tradeno = WxPayApi.GenerateTradePayNo("D", noId); } dto.companycode = Utility.GetSettingOrNullByKey("DataClientCode"); var depment = _CacheQ.GetList_SalesDepartMent(); if (string.IsNullOrEmpty(dto.orderid)) { if (!string.IsNullOrEmpty(dto.deptcode)) { //如果传了部门编号 var dep = depment.Find(p => p.SALEDEPTCODE == dto.deptcode); if (dep != null) { if (dep.CHANNELDEF.HasValue) dto.channel = Convert.ToInt32(dep.CHANNELDEF); } } } else { if (!string.IsNullOrEmpty(dto.deptcode)) { //如果传了部门编号 var dep = depment.Find(p => p.SALEDEPTCODE == dto.deptcode); if (dep != null) { if (dep.CHANNELDEF.HasValue) dto.channel = Convert.ToInt32(dep.CHANNELDEF); } } else { var orderidsArr = dto.orderid.Split(','); var orderid = Convert.ToInt32(orderidsArr[0]); var orderext = _orderext.Get(p => p.ORDERID == orderid); if (orderext != null) { if (!string.IsNullOrEmpty(orderext.CHANNEL)) dto.channel = Convert.ToInt32(orderext.CHANNEL); } } } if (!dto.channel.HasValue) { dto.channel = int.Parse(Utility.GetSettingOrNullByKey("Channel")); } if (string.IsNullOrEmpty(dto.resid)) { if (!string.IsNullOrEmpty(dto.orderid)) { var orderidsArr = dto.orderid.Split(','); var orderid = Convert.ToInt32(orderidsArr[0]); var order = _order.Get(p => p.ORDERID == orderid); if (order != null) { dto.resid = order.RESID; } } } //var url = cache_BL.GetValue_Parameter(Parameter.Core_ZxdService_OrderDeposit); //var json = sHelper.createSignEncodingStr(dto.ToJson(), SecurityHelper.OrderClientIdKey); PayDto newdto = new PayDto(); newdto.orderuselist = new List() { }; if (!string.IsNullOrEmpty(dto.orderid)) { decimal orderid = Convert.ToDecimal(dto.orderid); var myorder = _order.Get(m => m.ORDERID == orderid); var needpay = (myorder.NEEDPAY ?? 0) - (myorder.ARRIVALPAY ?? 0); if (needpay > 0) { newdto.orderuselist.Add(new OrderuseDto() { orderid = Convert.ToInt32(dto.orderid), needpay = needpay });//添加需要支付多少钱 } } var paylist = new List(); paylist.Add(new PayInfoDto() { //id = dto.id, resid = dto.resid, paytype = dto.paytype, paytypename = GetPayTypeName(dto.paytype), paydate = dto.paydate, payprice = dto.payprice, payname = dto.payname, remark = dto.remark, payno = dto.payno, isuse = dto.isuse, companycode = Utility.GetSettingOrNullByKey("DataClientCode"), tradeno = dto.tradeno, creator = Convert.ToInt32(Eid), creatorname = UserName }); var dto2 = new PayDto2 { orderuselist = newdto.orderuselist, resid = dto.resid, channel = dto.channel, deptcode = dto.deptcode,//部门编码 //depprice = dto.depprice, paylist = paylist,//需要添加的支付记录 }; var ret2 = _orderDepoist.Pay2(dto2);//然后提交金额 if (!ret2.result) { return Json(new { type = 0, retcode = 500, msgretmsg = "支付流水提交失败!" }, JsonRequestBehavior.AllowGet); } return Json(new { type = 1, retcode = 200, message = ret2.retmsg.FirstOrDefault().id }, JsonRequestBehavior.AllowGet); //string retmsg = Utility.PostData(url + "?" + json, Encoding.UTF8); //var retmessage = WebHelper.JsonHelper.JsonDivertToObj(retmsg); //if (retmessage.result) //{ // try // { // _orderDepoist.Add(dto); // } // catch (Exception xx) // { // LogHelper.Error("订金记录添加到本地库异常:" + xx.ToString()); // } // return JsonHandler.ManageMessage("success", true); //} //else // return JsonHandler.ManageMessage("提交失败,请稍后重试或者联系管理员!", false); //return JsonHandler.ManageMessage("提交成功", true); } catch (Exception ex) { LogHelper.Error(ex.ToString()); return JsonHandler.ManageMessage("提交失败,请稍后重试或者联系管理员!", false); } } [HttpGet] public ActionResult Use(int orderId) { var order = _order.Get(p => p.ORDERID == orderId); var customerId = _customerQ.getResCustomerByResId(order.RESID).CUSTOMERID; string[] resids = _customerQ.GetAllResidByCustomerId(customerId); var orderDepositList = _orderDepoist.GetList(p => resids.Contains(p.RESID) && p.AUDITSTATUS == 1 && p.ISUSE == 0); ViewBag.OrderDepositList = orderDepositList; return View(); } [HttpPost] public JsonResult Use(UseOrderDepositDto dto) { if (!string.IsNullOrWhiteSpace(dto.deposit)) { var url = cache_BL.GetValue_Parameter(Parameter.Core_ZxdService_OrderDeposit_Use); var json = sHelper.createSignEncodingStr(dto.ToJson(), SecurityHelper.OrderClientIdKey); string retmsg = Utility.PostData(url + "?" + json, Encoding.UTF8); //retmsg = sHelper.decyptData(SecurityHelper.OrderClientIdKey, retmsg); var retmessage = WebHelper.JsonHelper.JsonDivertToObj(retmsg); if (retmessage.result) { var arr = dto.deposit.Split(','); foreach (var item in arr) { var id = decimal.Parse(item); var info = _orderDepoist.Get(p => p.ID == id); if (info != null) { info.ISUSE = 1; info.ORDERID = dto.orderid; _orderDepoist.Update(info); } var orderPay2 = _orderPay.Get(p => p.ORDERID == id); if (orderPay2 != null) { orderPay2.ORDERID = dto.orderid; _orderPay.Update(orderPay2); } var order = _order.Get(p => p.ORDERID == dto.orderid); if (order != null) { var arrivalPayList = _orderPay.GetList(p => p.ORDERID == dto.orderid && p.AUDITSTATUS == 1); var payDate = arrivalPayList.OrderByDescending(p => p.PAYDATE).First().PAYDATE; order.ARRIVALPAY = arrivalPayList.Sum(p => p.PAYPRICE); order.ARRIVALTIME = payDate; order.FINALPAY = order.ARRIVALPAY; if (order.ARRIVALPAY >= order.NEEDPAY) { order.ORDERSTATUS = "200"; order.ORDERSTATUSNAME = "已支付"; } else { order.ORDERSTATUS = "190"; order.ORDERSTATUSNAME = "已提交支付"; } _order.Update(order); } } return Json(new { result = true }, JsonRequestBehavior.AllowGet); } else { return Json(new { result = false }, JsonRequestBehavior.AllowGet); } } return Json(new { result = false }, JsonRequestBehavior.AllowGet); } [HttpGet] public ActionResult Use2(int orderId) { var order = _order.Get(p => p.ORDERID == orderId); //var customerId = _customerQ.getResCustomerByResId(order.RESID).CUSTOMERID; //string[] resids = _customerQ.GetAllResidByCustomerId(customerId); //var orderDepositList = _orderDepoist.GetList(p => resids.Contains(p.RESID) && p.AUDITSTATUS == 1 && p.ISUSE == 0); //ViewBag.OrderDepositList = orderDepositList; var ret = _orderDepoist.GetCoreDepositLastPay(new LastPriceReqDto() { resid = order.RESID, channel = int.Parse(Utility.GetSettingOrNullByKey("Channel")) }); ViewBag.CorePayInfo = ret; ViewBag.OrderNedPay = ((order.NEEDPAY ?? 0) - (order.ARRIVALPAY ?? 0)); return View(); } [HttpPost] public JsonResult Use2(int orderId, decimal usePrice) { try { var order = _order.Get(p => p.ORDERID == orderId); if (usePrice > ((order.NEEDPAY ?? 0) - (order.ARRIVALPAY ?? 0))) { return Json(new retMsg { result = false, retcode = 500, retmsg = "使用的金额不能超过订单应付金额!" }, JsonRequestBehavior.AllowGet); } var usePayList = new List() { new OrderuseDto() { orderid = orderId, needpay = order.NEEDPAY.Value } }; var ret = _orderDepoist.Use(new PayUseDto() { resid = order.RESID, depprice = usePrice, orderuselist = usePayList, channel = int.Parse(Utility.GetSettingOrNullByKey("Channel")) }); return Json(ret, JsonRequestBehavior.AllowGet); } catch (Exception ex) { LogHelper.Error(ex); } return Json(new { result = false }, JsonRequestBehavior.AllowGet); } [HttpGet] public ActionResult Pay(string orderId, string resid) { var orderArr = orderId.Split(',').Select(decimal.Parse); var order = _order.GetList(p => orderArr.Contains(p.ORDERID)); var needpay = order.Sum(p => p.NEEDPAY); var arrivalpay = order.Sum(p => p.ARRIVALPAY); ViewBag.needpay = needpay; ViewBag.arrivalpay = arrivalpay; //var customerId = _customerQ.getResCustomerByResId(resid).CUSTOMERID; //string[] resids = _customerQ.GetAllResidByCustomerId(customerId); //var orderDepositList = _orderDepoist.GetList(p => resids.Contains(p.RESID) && p.AUDITSTATUS == 1); //var deppay = orderDepositList.Sum(p => p.LASTPRICE); decimal? deppay = 0; var ret = _orderDepoist.GetCoreDepositLastPay(new LastPriceReqDto() { resid = resid, channel = int.Parse(Utility.GetSettingOrNullByKey("Channel")) }); if (ret.result) { deppay = ret.retmsg.lastprice; } ViewBag.alldeppay = deppay; var diffpay = needpay - (arrivalpay ?? 0) - (deppay ?? 0); if (diffpay < 0) { //需付款金额小于0,说明钱超出了,只需要使用一部分 deppay += diffpay; } //LogHelper.Info("diffpay:" + diffpay.ToString()); //LogHelper.Info("deppay:" + deppay.ToString()); var justpay = needpay - (arrivalpay ?? 0) - (deppay ?? 0); //LogHelper.Info("justpay:" + justpay.ToString()); ViewBag.deppay = deppay; ViewBag.justpay = justpay; return View(); } [HttpPost] public JsonResult Pay(PayDto dto, string orderId) { try { var deptcode = string.Empty; dto.paytypename = GetPayTypeName(dto.paytype); var orderArr = orderId.Split(',').Select(decimal.Parse); var order = _order.GetList(p => orderArr.Contains(p.ORDERID)); if (!order.Any()) { return Json(new retMsg { result = false, retcode = 100 }, JsonRequestBehavior.AllowGet); } foreach (var item in order) { if (dto.orderuselist == null) dto.orderuselist = new List(); dto.orderuselist.Add(new OrderuseDto() { orderid = Convert.ToInt32(item.ORDERID), needpay = item.NEEDPAY.Value }); deptcode = item.DEPTCODE; } var paylist = new List(); if (!string.IsNullOrEmpty(dto.payno)) { paylist.Add(new PayInfoDto() { //id = dto.id, resid = dto.resid, paytype = dto.paytype, paytypename = dto.paytypename, paydate = dto.paydate, payprice = dto.payprice, payname = dto.payname, remark = dto.remark, payno = dto.payno, isuse = dto.isuse, companycode = Utility.GetSettingOrNullByKey("DataClientCode"), tradeno = dto.tradeno, creator = dto.creator, creatorname = dto.creatorname }); } if (dto.depprice > 0) { var dto1 = new PayUseDto { resid = dto.resid, depprice = dto.depprice, orderuselist = dto.orderuselist, channel = int.Parse(Utility.GetSettingOrNullByKey("Channel")) }; var ret1 = _orderDepoist.Use(dto1);//使用订金 if (!ret1.result)//使用订金失败 { return Json(new { result = false, retcode = 500, msgretmsg = "余额使用失败!" }, JsonRequestBehavior.AllowGet); } } if (paylist.Count() == 0) { return Json(new { result = true, retcode = 200 }, JsonRequestBehavior.AllowGet); } var dto2 = new PayDto2 { orderuselist = dto.orderuselist, resid = dto.resid, //depprice = dto.depprice, deptcode = deptcode, paylist = paylist,//需要添加的支付记录 }; var ret2 = _orderDepoist.Pay2(dto2);//然后提交金额 if (!ret2.result) { return Json(new { result = true, retcode = 500, msgretmsg = "余额使用成功,支付流水提交失败!" }, JsonRequestBehavior.AllowGet); } return Json(new { result = true, retcode = 200 }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { LogHelper.Error(ex); } return Json(new { result = false }, JsonRequestBehavior.AllowGet); } [HttpGet] public ActionResult Refund(int id) { //var deposit = _orderDepoist.Get(p => p.ID == id); OrderPayListReqDto dto = new OrderPayListReqDto() { id = id, channel = int.Parse(Utility.GetSettingOrNullByKey("Channel")) }; Pager pager = new Pager() { page = 1, rows = int.MaxValue }; var ret = _orderDepoist.GetCoreDepositList(pager, dto); decimal refprice = 0; if (ret.result) { refprice = ret.infolist.FirstOrDefault().lastprice ?? 0; } //if (deposit.LASTPRICE.HasValue) //{ // refprice = deposit.LASTPRICE.Value; //} var model = new OrderRefundDto { orderid = id, refundprice = refprice }; return View(model); } [HttpPost] public JsonResult Refund(OrderRefundDto dto) { try { if (!ModelState.IsValid) { return JsonHandler.ManageMessage("参数有误,请确认!", false); } if (dto.refundprice <= 0) { return JsonHandler.ManageMessage("退款金额不能低于0", false); } var url = cache_BL.GetValue_Parameter(Parameter.Core_ZxdService_OrderRefund); HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; request.Method = "POST"; //request.ContentType = "application/x-www-form-urlencoded"; // request.ContentType = "application/json"; if (Request.Files.Count > 0) { var file = Request.Files[0]; var fileExt = Path.GetExtension(file.FileName); var fileName = Path.Combine("att", Guid.NewGuid().ToString() + Path.GetExtension(file.FileName)); dto.att = Path.Combine("UploadFile", fileName); } //dto.companycode = companyCode; dto.companycode = Utility.GetSettingOrNullByKey("DataClientCode"); var jiami = sHelper.encyptData("UPWEBSITE", dto.ToJson()); var content = HttpUtility.UrlEncode(jiami); var sing = HttpUtility.UrlEncode(sHelper.signData("UPWEBSITE", jiami)); request.Headers.Add("content", content); request.Headers.Add("clientid", "UPWEBSITE"); request.Headers.Add("sign", sing); //如果需要POST数据 if (Request.Files.Count > 0) { var fileStream = Request.Files[0].InputStream; byte[] data = null; byte[] buffer = new byte[16 * 1024]; using (MemoryStream ms = new MemoryStream()) { int read; while ((read = fileStream.Read(buffer, 0, buffer.Length)) > 0) { ms.Write(buffer, 0, read); } data = ms.ToArray(); } using (Stream stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } } else { //没有参数的时候必须加上这句,这个是HTTP POST要求必须带参数,不然就需要说明长度是0 request.ContentLength = 0; } using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); string result = reader.ReadToEnd(); LogHelper.Info(result); var retmsg = sHelper.decyptData(SecurityHelper.OrderClientIdKey, result); var retmessage = WebHelper.JsonHelper.JsonDivertToObj(retmsg); if (retmessage.result) { try { var deptcode = string.Empty; var depo = _orderDepoist.Get(p => p.ID == dto.orderid); if (depo != null) { deptcode = depo.DEPTCODE; } var orderRefund = new WX_SZZYORDERREFUND() { ID = new SEQUENCES_BL().Seq_base_get(), SID = decimal.Parse(retmessage.retmsg), ORDERID = dto.orderid, REFUNDPRICE = dto.refundprice, ACCOUNT = dto.account, USERNAME = dto.username, REFUNDTYPE = dto.refundtype, REFUNDTYPENAME = string.Empty, REFUNDDATE = dto.refunddate, REMARK = dto.remark, ATT = dto.att, CTIME = DateTime.Now, ISDELETE = 0, CREATOR = Eid, CREATORNAME = UserName, ISACTURALREFUND = dto.isacturalrefund, DEPTCODE = deptcode }; _orderRefund.Add(orderRefund); } catch (Exception xx) { LogHelper.Error("提交总部成功,但本地提交异常,请重新提交:" + xx.ToString()); return JsonHandler.ManageMessage("提交总部成功,但本地提交异常,请重新提交", false); } return JsonHandler.ManageMessage("提交成功", true); } else return JsonHandler.ManageMessage("提交失败,请稍后重试或者联系管理员!", false); } } catch (Exception ex) { LogHelper.Error(ex.ToString()); return JsonHandler.ManageMessage("提交失败,请稍后重试或者联系管理员!", false); } } public ActionResult Export(OrderPayListReqDto dto) { dto.channel = int.Parse(Utility.GetSettingOrNullByKey("Channel")); var ret = _orderDepoist.GetCoreDepositList(new Pager { page = 1, rows = int.MaxValue }, dto); string checkedFilds = PageRequest.GetQueryString("checkedFilds").Replace("[]", ""); string checkedTitles = PageRequest.GetQueryString("checkedTitles"); if (ret.result) { return File(ExcelHelper.ExportListModelToExcel(ret.infolist, "订金列表", 10000, checkedFilds, checkedTitles, DataFormart), "application/ms-excel", PageRequest.GetDlownLoadName("订金列表.xls")); } else { return Json(new { message = "数据获取错误!" }, JsonRequestBehavior.AllowGet); } } public FileResult GetQRCode(int id) { var webPath = "~/UploadFile/PayQRCode/"; var okPath = webPath + "ok.png"; var gqPath = webPath + "gq.png"; //byte[] bytes = QRCodeHelper.Create(url); var payInfo = _orderDepoist.Get(p => p.ID == id); if (payInfo.AUDITSTATUS == 1) { return File(okPath, @"image/jpeg"); } if (!string.IsNullOrEmpty(payInfo.QRCODE) && payInfo.QRCODETIME > DateTime.Now) { return File(payInfo.QRCODE, @"image/jpeg"); } else if (!string.IsNullOrEmpty(payInfo.QRCODE) && payInfo.QRCODETIME <= DateTime.Now) { return File(gqPath, @"image/jpeg"); } var bytes = GenQRCode(id); return File(bytes, @"image/jpeg"); } [HttpPost] public JsonResult Gen(int id) { var ret = GenQRCode(id); if (ret == null) { return Json(new { result = false }, JsonRequestBehavior.AllowGet); } return Json(new { result = true }, JsonRequestBehavior.AllowGet); } [Inject] public ICACHE_Q _CacheQ { get; set; } private byte[] GenQRCode(int id) { try { var webPath = "~/UploadFile/PayQRCode/"; var dicPath = Server.MapPath(webPath); var fileName = Guid.NewGuid() + ".jpg"; var webFilePaht = webPath + fileName; var filePath = dicPath + fileName; var payInfo = _orderDepoist.Get(p => p.ID == id); LogHelper.Info("payInfo.TRADENO:" + payInfo.TRADENO); var url = string.Empty; LogHelper.Info("url:" + url); var paytype = string.Empty; if (payInfo.PAYTYPE == 1) { paytype = "ali"; var alpayId = cache_BL.GetValue_Parameter("alpayId"); if (string.IsNullOrEmpty(alpayId)) { return null; } var client = new DefaultAopClient(AliPayConfig.gatewayUrl, AliPayConfig.app_id(alpayId), AliPayConfig.private_key(alpayId), "json", "1.0", AliPayConfig.sign_type); var request = new AlipayTradePrecreateRequest(); request.SetNotifyUrl(AliPayConfig.notify_url); request.BizContent = "{" + "\"out_trade_no\":\"" + payInfo.TRADENO + "\"," + "\"total_amount\":" + payInfo.PAYPRICE + "," + "\"subject\":\"订金\"," + "\"enable_pay_channels\":\"balance,bankPay,debitCardExpress,creditCard,creditCardExpress,creditCardCartoon\"" + " }"; LogHelper.Info("aliPayRqeust:" + request.ToJson()); var response = client.Execute(request); LogHelper.Info("aliPayUrl:" + response.ToJson()); url = response.QrCode; } else { paytype = "wx"; var mchId = cache_BL.GetValue_Parameter("mchId"); if (string.IsNullOrEmpty(mchId)) { return null; } //url = _nativePay.GetPayQRCode("1", payInfo.TRADENO, "订金", (double)payInfo.PAYPRICE * 100, mchId);//老的方式,弃用 string myurl = _CacheQ.GetValue_Parameter(Parameter.uppay_h5url);// "https://yigohouse.51vip.biz/unifiedpay/wxpay/${dgAccessCode}/${payData}/i"; myurl = myurl.Replace("${dgAccessCode}", ConfigurationManager.AppSettings["wx_pay_interface_account"]); var time = DateTimeTool.ConvertDateTimeInt(DateTime.Now.AddHours(2));//两个小时候过期 var option = new { description = "订金", out_trade_no = payInfo.TRADENO, time_expire = time, total_amount = payInfo.PAYPRICE * 100, currency = "CNY", pay_source = Convert.ToInt32(ConfigurationManager.AppSettings["wx_pay_currypay_source"]) }; var payData = sHelper.encyptDataNew(Utility.ObjectToJson(option), ConfigurationManager.AppSettings["wx_pay_interface_accesskey"], ConfigurationManager.AppSettings["wx_pay_interface_iv"]); var xx = System.Net.WebUtility.UrlEncode(payData); myurl = myurl.Replace("${payData}", xx); url = myurl; LogHelper.Info("wxPayUrl:" + url); } var bytes = QRCodeHelper.GetQrCode(payInfo.PAYNAME, "¥" + payInfo.PAYPRICE.ToString(), "", filePath, url, paytype); payInfo.QRCODE = webFilePaht; payInfo.QRCODETIME = DateTime.Now.AddHours(2); //_orderPay.Update(payInfo); _orderDepoist.Update(payInfo); return bytes; } catch (Exception ex) { LogHelper.Error(ex); return null; } } private string DataFormart(string key, object value) { string formartValue = string.Empty; switch (key) { case "auditstatus": formartValue = (value != null && value.ToString() == "1") ? "已审核" : "未审核"; break; case "ISUSE": formartValue = value.ToString() == "0" ? "未使用" : (value.ToString() == "1" ? "已使用" : (value.ToString() == "2" ? "已退款" : "已开通")); break; //case "ACTION": // formartValue = string.Empty; // break; default: formartValue = string.Format("{0}", value); break; } return formartValue; } public class WX_SZZYORDERDEPOSIT_EXPORT { public decimal ID { get; set; } public string RESID { get; set; } public decimal PAYTYPE { get; set; } public string PAYTYPENAME { get; set; } public DateTime? PAYDATE { get; set; } public decimal PAYPRICE { get; set; } public string PAYNAME { get; set; } public string REMARK { get; set; } public decimal? AUDITSTATUS { get; set; } public decimal? AUDITOR { get; set; } public string AUDITORNAME { get; set; } public DateTime? AUDITTIME { get; set; } public DateTime? CTIME { get; set; } public string PAYNO { get; set; } public decimal ISUSE { get; set; } public string COMPANYCODE { get; set; } public decimal? ORDERID { get; set; } public DateTime? USETIME { get; set; } } private string GetPayTypeName(decimal typeId) { var name = "未知"; switch (int.Parse(typeId.ToString())) { case 1: name = "支付宝"; break; case 3: name = "银行转账"; break; case 5: name = "微信支付"; break; } return name; } private class WX_SZZYORDERDEPOSITVIEW { public decimal ID { get; set; } public string RESID { get; set; } public decimal PAYTYPE { get; set; } public string PAYTYPENAME { get; set; } public DateTime? PAYDATE { get; set; } public decimal PAYPRICE { get; set; } public string PAYNAME { get; set; } public string REMARK { get; set; } public decimal? AUDITSTATUS { get; set; } public decimal? AUDITOR { get; set; } public string AUDITORNAME { get; set; } public DateTime? AUDITTIME { get; set; } public DateTime? CTIME { get; set; } public string PAYNO { get; set; } public decimal ISUSE { get; set; } public string COMPANYCODE { get; set; } public decimal? ORDERID { get; set; } public DateTime? USETIME { get; set; } public string REJECTREMARK { get; set; } public decimal? LASTPRICE { get; set; } } } }