using CRM.Core.DTO; using CRM.Core.DTO.Ord; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using WX.CRM.BLL.Base; using WX.CRM.BLL.Util; using WX.CRM.Common; using WX.CRM.IBLL.Util; using WX.CRM.IBLL.Wx; using WX.CRM.Model.Entity; namespace WX.CRM.BLL.Wx { public class WX_SZZYORDERDEPOSIT_BL : DbContextRepository, IWX_SZZYORDERDEPOSIT { public ICACHE_Q _chache = new CACHE_BL(); public ISecurityHelper _sHelper = new SecurityHelper(); public void Add(OrderDepositDto dto) { var model = new WX_SZZYORDERDEPOSIT() { ID = dto.id, RESID = dto.resid, PAYTYPE = dto.paytype, PAYTYPENAME = dto.paytypename, PAYDATE = dto.paydate, PAYPRICE = dto.payprice, PAYNAME = dto.payname, REMARK = dto.remark, AUDITSTATUS = 0, CTIME = DateTime.Now, PAYNO = string.IsNullOrEmpty(dto.payno) ? string.Empty : dto.payno.Trim(), TRADENO = dto.tradeno }; using (var db = new crmContext()) { using (var trans = db.Database.BeginTransaction()) { try { if (!string.IsNullOrEmpty(dto.orderid)) { var idsArr = dto.orderid.Split(','); foreach (var arr in idsArr) { var orderid = Convert.ToInt32(arr[0]); var order = db.WX_SZZYORDER.FirstOrDefault(p => p.ORDERID == orderid); var pay = new WX_SZZYORDERPAY { ID = new SEQUENCES_BL().Seq_base_get(), ORDERID = orderid, NEEDPAY = order != null ? order.NEEDPAY.Value : 0, PAYTYPE = dto.paytype, PAYTYPENAME = dto.paytypename, PAYDATE = dto.paydate, PAYPRICE = dto.payprice, PAYNAME = dto.payname, REMARK = dto.remark, PAYNO = dto.payno, TRADENO = dto.tradeno }; if (dto.creator.HasValue) { pay.CREATOR = dto.creator.Value; } if (!string.IsNullOrEmpty(dto.creatorname)) { pay.CREATORNAME = dto.creatorname; } pay.DEPOSITID = model.ID; db.WX_SZZYORDERPAY.Add(pay); } } db.WX_SZZYORDERDEPOSIT.Add(model); db.SaveChanges(); trans.Commit(); } catch (Exception ex) { LogHelper.Error(ex); trans.Rollback(); } } } } //public retMsg Pay(PayDto dto) //{ // //int? channel = 0; // decimal usepriceall = 0; // decimal lastpriceall = 0; // var msg1 = new retMsg(); // LogHelper.Info("dto:" + dto.ToJson()); // var url = _chache.GetValue_Parameter("Core_PayService_OrderPay"); // var para = _sHelper.createSignEncodingStr(dto.ToJson(), SecurityHelper.OrderClientIdKey); // LogHelper.Info("url:" + url + "?" + para); // var rep = Utility.PostData(url + "?" + para, Encoding.UTF8); // var retmsg = JsonConvert.DeserializeObject(rep); // LogHelper.Info("retmsg:" + retmsg.ToJson()); // if (retmsg.result) // { // if (dto.depprice.HasValue && dto.depprice.Value > 0) // { // //如果有使用已经确认的金额,直接使用 // msg1 = Use(new PayUseDto() { resid = dto.resid, depprice = dto.depprice.Value, orderuselist = dto.orderuselist }); // } // if (!string.IsNullOrEmpty(dto.payno)) // { // //使用了流水号的场景 // using (var db = new crmContext()) // { // using (var trans = db.Database.BeginTransaction()) // { // try // { // //查看是否已经有确认到账记录 // var depost = db.WX_SZZYORDERDEPOSIT.FirstOrDefault(p => p.PAYNO == dto.payno && p.AUDITSTATUS == 1); // var depositId = 0; // if (depost == null) // { // depositId = Convert.ToInt32(retmsg.retmsg); // lastpriceall = dto.payprice; // } // else // { // depositId = Convert.ToInt32(depost.ID); // //如果已经存在说明已经使用过了,那要重新计算使用金额跟剩余金额 // usepriceall = depost.USEPRICE ?? 0; // lastpriceall = depost.LASTPRICE ?? 0; // } // foreach (var item in dto.orderuselist) // { // if (lastpriceall <= 0) // { // //如果剩余金额小于等于0,说明已经没钱支付了,不执行下面的操作 // continue; // } // var order = db.WX_SZZYORDER.FirstOrDefault(p => p.ORDERID == item.orderid); // if (order == null) // throw new Exception("参数错误,未能找到订单!"); // else // { // if (order.ORDERSTATUS == "180" || order.ORDERSTATUS == "190" || order.ORDERSTATUS == "195") // { // order.ORDERSTATUS = "190"; // order.ORDERSTATUSNAME = "已提交支付"; // //channel = order.CHANNEL; // } // else // { // //已经是支付状态,说明已经给够钱了,不需要再支付了 // LogHelper.Info(order.ORDERID.ToString() + "支付金额已经够了,不需要再支付了!"); // continue; // //return new retMsg { result = false, retcode = 100, retmsg = order.ORDERID.ToString() + "支付金额已经够了,不需要再支付了!" }; // } // } // //订单剩余使用金额=订单金额-已支付金额 // //如果第一笔支付,那已支付金额为0 // //当前需要付款的金额 // var curPay = order.NEEDPAY.Value - (order.ARRIVALPAY ?? 0); // decimal usePrice = 0; // if (lastpriceall >= curPay) // { // //剩余金额大于等于当前需要付款的金额,剩余金额足够支付 // usePrice = curPay; // } // else // { // //剩余金额不够支付,剩余金额全部支付 // usePrice = lastpriceall; // } // //使用金额加上当前支付的金额 // usepriceall += usePrice; // //剩余金额降掉当前支付的金额 // lastpriceall -= usePrice; // var pay = new WX_SZZYORDERPAY // { // ID = new SEQUENCES_BL().Seq_base_get(), // ORDERID = item.orderid, // NEEDPAY = item.needpay, // PAYTYPE = dto.paytype, // PAYTYPENAME = dto.paytypename, // PAYDATE = dto.paydate, // PAYPRICE = usePrice, // PAYNAME = dto.payname, // REMARK = dto.remark, // CTIME = DateTime.Now, // PAYNO = dto.payno, // SID = null, // TRADENO = dto.tradeno, // ISDELETE = 0, // CREATOR = dto.creator, // CREATORNAME = dto.creatorname, // DEPOSITID = depositId // }; // db.WX_SZZYORDERPAY.Add(pay); // } // if (depost == null) // { // depost = new WX_SZZYORDERDEPOSIT // { // ID = depositId, // 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 = dto.companycode, // TRADENO = dto.tradeno, // CREATOR = dto.creator, // CREATORNAME = dto.creatorname, // USEPRICE = usepriceall, // LASTPRICE = lastpriceall // }; // db.WX_SZZYORDERDEPOSIT.Add(depost); // } // else // { // depost.USEPRICE = usepriceall; // depost.LASTPRICE = lastpriceall; // } // db.SaveChanges(); // trans.Commit(); // if (dto.depprice.HasValue && dto.depprice.Value > 0) // { // if (msg1.result) // { // return new retMsg { result = true, retcode = 200 }; // } // else if (!msg1.result) // { // return new retMsg { result = false, retcode = 300 }; // } // } // return new retMsg { result = true, retcode = 200 }; // } // catch (Exception ex) // { // LogHelper.Error(ex); // trans.Rollback(); // if (dto.depprice.HasValue && dto.depprice.Value > 0 && msg1.result) // { // return new retMsg { result = false, retcode = 400 }; // } // return new retMsg { result = false, retcode = 500 }; // } // } // } // } // else // { // return msg1; // } // } // else // { // return new retMsg { result = false, retcode = 500 }; // } //} /// /// 本地不在计算 /// /// /// public retMsg> Pay2(PayDto2 dto) { //int? channel = 0; //var msg1 = new retMsg>(); LogHelper.Info("PayDto2:" + dto.ToJson()); var url = _chache.GetValue_Parameter("Core_PayService_OrderPay"); var para = _sHelper.createSignEncodingStr(dto.ToJson(), SecurityHelper.OrderClientIdKey); LogHelper.Info("url:" + url + "?" + para); var rep = Utility.PostData(url + "?" + para, Encoding.UTF8); var retmsg = JsonConvert.DeserializeObject>>(rep); LogHelper.Info("retmsg:" + retmsg.ToJson()); if (retmsg.result) { //if (dto.depprice.HasValue && dto.depprice.Value > 0) //{ // //如果有使用已经确认的金额,直接使用 // msg1 = Use(new PayUseDto() { resid = dto.resid, depprice = dto.depprice.Value, orderuselist = dto.orderuselist }); //} if (dto.paylist.Any()) { //使用了流水号的场景 using (var db = new crmContext()) { using (var trans = db.Database.BeginTransaction()) { try { foreach (var payinfo in dto.paylist) { decimal usepriceall = 0; decimal lastpriceall = 0; //查看是否已经有确认到账记录 var depost = db.WX_SZZYORDERDEPOSIT.FirstOrDefault(p => p.PAYNO == payinfo.payno && p.AUDITSTATUS == 1 && p.PAYNO != null); var depositId = 0; if (depost == null) { var depositinfiList = retmsg.retmsg; depositId = depositinfiList.Find(p => p.payno == payinfo.payno).id; lastpriceall = payinfo.payprice; } else { depositId = Convert.ToInt32(depost.ID); //如果已经存在说明已经使用过了,那要重新计算使用金额跟剩余金额 usepriceall = depost.USEPRICE ?? 0; lastpriceall = depost.LASTPRICE ?? 0; } foreach (var item in dto.orderuselist) { if (lastpriceall <= 0) { //如果剩余金额小于等于0,说明已经没钱支付了,不执行下面的操作 continue; } var order = db.WX_SZZYORDER.FirstOrDefault(p => p.ORDERID == item.orderid); if (order == null) throw new Exception("参数错误,未能找到订单!"); else { //如果已经支付过,赋值到当前临时记录的到账金额 if (order.ARRIVALPAY.HasValue) item.arrivalpay = order.ARRIVALPAY.Value; if (order.ORDERSTATUS == "180" || order.ORDERSTATUS == "190" || order.ORDERSTATUS == "195") { order.ORDERSTATUS = "190"; order.ORDERSTATUSNAME = "已提交支付"; //channel = order.CHANNEL; } else { //已经是支付状态,说明已经给够钱了,不需要再支付了 LogHelper.Info(order.ORDERID.ToString() + "支付金额已经够了,不需要再支付了!"); continue; //return new retMsg { result = false, retcode = 100, retmsg = order.ORDERID.ToString() + "支付金额已经够了,不需要再支付了!" }; } } #region 弃用,不在座席端计算金额 ////如果订单金额跟到账金额相等,说明这个订单已经付够钱了 //if (item.arrivalpay == item.needpay) //{ // continue; //} ////订单剩余使用金额=订单金额-已支付金额 ////如果第一笔支付,那已支付金额为0 ////当前需要付款的金额 //var curPay = order.NEEDPAY.Value - (order.ARRIVALPAY ?? 0); //decimal usePrice = 0; //if (lastpriceall >= curPay) //{ // //剩余金额大于等于当前需要付款的金额,剩余金额足够支付 // usePrice = curPay; //} //else //{ // //剩余金额不够支付,剩余金额全部支付 // usePrice = lastpriceall; //} //if (depost != null) //{ // //使用金额加上当前支付的金额 // usepriceall += usePrice; // //剩余金额降掉当前支付的金额 // lastpriceall -= usePrice; //} //var pay = new WX_SZZYORDERPAY //{ // ID = new SEQUENCES_BL().Seq_base_get(), // ORDERID = item.orderid, // NEEDPAY = item.needpay, // PAYTYPE = payinfo.paytype, // PAYTYPENAME = payinfo.paytypename, // PAYDATE = payinfo.paydate, // PAYPRICE = usePrice, // PAYNAME = payinfo.payname, // REMARK = payinfo.remark, // CTIME = DateTime.Now, // PAYNO = payinfo.payno, // SID = null, // TRADENO = payinfo.tradeno, // ISDELETE = 0, // CREATOR = payinfo.creator, // CREATORNAME = payinfo.creatorname, // DEPOSITID = depositId //}; //db.WX_SZZYORDERPAY.Add(pay); //item.arrivalpay += usePrice; #endregion } if (depost == null) { depost = new WX_SZZYORDERDEPOSIT { ID = depositId, RESID = payinfo.resid, PAYTYPE = payinfo.paytype, PAYTYPENAME = payinfo.paytypename, PAYDATE = payinfo.paydate, PAYPRICE = payinfo.payprice, PAYNAME = payinfo.payname, REMARK = payinfo.remark, PAYNO = payinfo.payno, ISUSE = payinfo.isuse, COMPANYCODE = payinfo.companycode, TRADENO = payinfo.tradeno, CREATOR = payinfo.creator, CREATORNAME = payinfo.creatorname, USEPRICE = usepriceall, LASTPRICE = lastpriceall, DEPTCODE = dto.deptcode }; db.WX_SZZYORDERDEPOSIT.Add(depost); } else { depost.USEPRICE = usepriceall; depost.LASTPRICE = lastpriceall; } } db.SaveChanges(); trans.Commit(); //if (dto.depprice.HasValue && dto.depprice.Value > 0) //{ // if (msg1.result) // { // return new retMsg> { result = true, retcode = 200 }; // } // else if (!msg1.result) // { // return new retMsg> { result = false, retcode = 300 }; // } //} return retmsg; } catch (Exception ex) { LogHelper.Error(ex); trans.Rollback(); //if (dto.depprice.HasValue && dto.depprice.Value > 0 && msg1.result) //{ // return new retMsg> { result = false, retcode = 400 }; //} return new retMsg> { result = false, retcode = 500 }; } } } } else { //return msg1; return new retMsg> { result = false, retcode = 100 }; } } else { return new retMsg> { result = false, retcode = 500, retmsg = null }; } } public retMsg> Use(PayUseDto dto) { //int? channel = 0; var url = _chache.GetValue_Parameter("Core_PayService_OrderPayUse"); var para = _sHelper.createSignEncodingStr(dto.ToJson(), SecurityHelper.OrderClientIdKey); LogHelper.Info("payuseurl:" + url + "?" + para); var rep = Utility.PostData(url + "?" + para, Encoding.UTF8); LogHelper.Info("payuse:" + rep); var retmsg = JsonConvert.DeserializeObject>>(rep); return retmsg; #region 废弃代码,坐席端不在计算金额 //if (retmsg.result) //{ // using (var db = new crmContext()) // { // //找到客户可用的流水列表 // var deposits = db.WX_SZZYORDERDEPOSIT.Where(p => p.AUDITSTATUS == 1 && p.RESID == dto.resid && p.LASTPRICE > 0).ToList(); // if (!deposits.Any()) // throw new Exception("找不到可用的流水!"); // using (var trans = db.Database.BeginTransaction()) // { // try // { // var ddeppriceLJ = dto.depprice;//需要使用的金额 // foreach (var item in dto.orderuselist) // { // var order = db.WX_SZZYORDER.FirstOrDefault(p => p.ORDERID == item.orderid); // if (order == null) // throw new Exception("参数错误,未能找到订单!"); // else // { // if (order.ORDERSTATUS == "180" || order.ORDERSTATUS == "190" || order.ORDERSTATUS == "195") // { // //订单剩余使用金额=订单金额-已支付金额 // //如果第一笔支付,那已支付金额为0 // //当前需要付款的金额 // var curPay = order.NEEDPAY.Value - (order.ARRIVALPAY ?? 0); // if (ddeppriceLJ >= curPay) // { // order.ORDERSTATUS = "200"; // order.ORDERSTATUSNAME = "已支付"; // } // else // { // curPay = ddeppriceLJ.Value;//剩余的使用金额还没有需要支付的多,那么需要取使用的钱来计算 // order.ORDERSTATUS = "190"; // order.ORDERSTATUSNAME = "已提交支付"; // } // //channel = order.CHANNEL; // var xdDeposits = deposits.Where(p => p.LASTPRICE == curPay); // if (xdDeposits.Any()) // { // //找到刚好支付的金额,就使用该流水号,多个取第一个 // var xx = xdDeposits.OrderBy(p => p.CTIME).First(); // var xdDeposit = db.WX_SZZYORDERDEPOSIT.FirstOrDefault(m => m.ID == xx.ID); // var pay = new WX_SZZYORDERPAY // { // ID = new SEQUENCES_BL().Seq_base_get(), // ORDERID = item.orderid, // NEEDPAY = item.needpay, // PAYTYPE = xdDeposit.PAYTYPE, // PAYTYPENAME = xdDeposit.PAYTYPENAME, // PAYDATE = xdDeposit.PAYDATE, // PAYPRICE = curPay, // PAYNAME = xdDeposit.PAYNAME, // REMARK = xdDeposit.REMARK, // CTIME = DateTime.Now, // PAYNO = xdDeposit.PAYNO, // SID = null, // TRADENO = xdDeposit.TRADENO, // ISDELETE = 0, // CREATOR = xdDeposit.CREATOR, // CREATORNAME = xdDeposit.CREATORNAME, // DEPOSITID = xdDeposit.ID, // AUDITSTATUS = 1, // AUDITOR = xdDeposit.AUDITOR, // AUDITORNAME = xdDeposit.AUDITORNAME, // AUDITTIME = DateTime.Now // }; // db.WX_SZZYORDERPAY.Add(pay); // if (xdDeposit.USEPRICE.HasValue) // xdDeposit.USEPRICE += curPay; // else // xdDeposit.USEPRICE = curPay; // xdDeposit.LASTPRICE -= curPay; // if (order.ARRIVALPAY.HasValue) // { // order.ARRIVALPAY += curPay; // } // else // { // order.ARRIVALPAY = curPay; // } // order.ARRIVALTIME = xdDeposit.PAYDATE; // } // else // { // //没找到刚好够支付的金额,并且剩余金额大于需要付款金额,使用第一个能用的流水号 // var dyDeposits = deposits.Where(p => p.LASTPRICE > curPay); // if (dyDeposits.Any()) // { // var xx = dyDeposits.OrderBy(p => p.CTIME).First(); // var dyDeposit = db.WX_SZZYORDERDEPOSIT.FirstOrDefault(m => m.ID == xx.ID); // var pay = new WX_SZZYORDERPAY // { // ID = new SEQUENCES_BL().Seq_base_get(), // ORDERID = item.orderid, // NEEDPAY = item.needpay, // PAYTYPE = dyDeposit.PAYTYPE, // PAYTYPENAME = dyDeposit.PAYTYPENAME, // PAYDATE = dyDeposit.PAYDATE, // PAYPRICE = curPay, // PAYNAME = dyDeposit.PAYNAME, // REMARK = dyDeposit.REMARK, // CTIME = DateTime.Now, // PAYNO = dyDeposit.PAYNO, // SID = null, // TRADENO = dyDeposit.TRADENO, // ISDELETE = 0, // CREATOR = dyDeposit.CREATOR, // CREATORNAME = dyDeposit.CREATORNAME, // DEPOSITID = dyDeposit.ID, // AUDITSTATUS = 1, // AUDITOR = dyDeposit.AUDITOR, // AUDITORNAME = dyDeposit.AUDITORNAME, // AUDITTIME = DateTime.Now // }; // db.WX_SZZYORDERPAY.Add(pay); // if (dyDeposit.USEPRICE.HasValue) // dyDeposit.USEPRICE += curPay; // else // dyDeposit.USEPRICE = curPay; // dyDeposit.LASTPRICE -= curPay; // if (order.ARRIVALPAY.HasValue) // { // order.ARRIVALPAY += curPay; // } // else // { // order.ARRIVALPAY = curPay; // } // order.ARRIVALTIME = dyDeposit.PAYDATE; // } // else // { // //var sPirce = price; // //没收到能一笔支付的,那就按提交时间使用流水号 // foreach (var xx in deposits.OrderBy(p => p.CTIME)) // { // var dep = db.WX_SZZYORDERDEPOSIT.FirstOrDefault(m => m.ID == xx.ID); // if (dep.LASTPRICE <= 0) // { // continue; // } // if (order.ARRIVALPAY == order.NEEDPAY) // { // break; // } // decimal usePrice = 0; // if (curPay >= dep.LASTPRICE.Value) // { // //使用金额大于等于当前需要付款的金额,使用金额足够支付 // if (ddeppriceLJ < dep.LASTPRICE.Value) // { // usePrice = ddeppriceLJ.Value; // } // else // { // usePrice = dep.LASTPRICE.Value; // } // } // else // { // //使用金额不够支付,使用金额全部支付 // usePrice = curPay; // } // if (usePrice <= 0) // { // continue;//没有可用金额,不需要进行下一步 // } // var pay = new WX_SZZYORDERPAY // { // ID = new SEQUENCES_BL().Seq_base_get(), // ORDERID = item.orderid, // NEEDPAY = item.needpay, // PAYTYPE = dep.PAYTYPE, // PAYTYPENAME = dep.PAYTYPENAME, // PAYDATE = dep.PAYDATE, // PAYPRICE = usePrice, // PAYNAME = dep.PAYNAME, // REMARK = dep.REMARK, // CTIME = DateTime.Now, // PAYNO = dep.PAYNO, // SID = null, // TRADENO = dep.TRADENO, // ISDELETE = 0, // CREATOR = dep.CREATOR, // CREATORNAME = dep.CREATORNAME, // DEPOSITID = dep.ID, // AUDITSTATUS = 1, // AUDITOR = dep.AUDITOR, // AUDITORNAME = dep.AUDITORNAME, // AUDITTIME = DateTime.Now // }; // db.WX_SZZYORDERPAY.Add(pay); // if (dep.USEPRICE.HasValue) // dep.USEPRICE += usePrice; // else // dep.USEPRICE = usePrice; // dep.LASTPRICE -= usePrice; // dto.depprice -= usePrice;//要使用掉的金额-已使用金额 // if (order.ARRIVALPAY.HasValue) // { // order.ARRIVALPAY += usePrice; // } // else // { // order.ARRIVALPAY = usePrice; // } // order.ARRIVALTIME = dep.PAYDATE; // } // } // } // ddeppriceLJ -= curPay; // } // else // { // //已经是支付状态,说明已经给够钱了,不需要再支付了 // LogHelper.Info(order.ORDERID.ToString() + "支付金额已经够了,不需要再支付了!"); // continue; // //return new retMsg { result = false, retcode = 100, retmsg = order.ORDERID.ToString() + "支付金额已经够了,不需要再支付了!" }; // } // } // db.SaveChanges(); // } // db.SaveChanges(); // trans.Commit(); // return new retMsg> { result = true, retcode = 200, retmsg = null }; // } // catch (Exception ex) // { // LogHelper.Error(ex); // trans.Rollback(); // return new retMsg> { result = false, retcode = 500, retmsg = null }; // } // } // } //} //return new retMsg> { result = false, retcode = 500, retmsg = null }; #endregion } /// /// 应该弃用 /// /// /// public retMsg Audit(WX_SZZYORDERDEPOSIT deposit) { using (var db = new crmContext()) { using (var trans = db.Database.BeginTransaction()) { try { var orderpays = db.WX_SZZYORDERPAY.Where(p => p.DEPOSITID == deposit.ID && p.ISDELETE == 0); if (orderpays != null && orderpays.Any()) { foreach (var item in orderpays) { item.AUDITSTATUS = 1; item.AUDITOR = deposit.AUDITOR; item.AUDITORNAME = deposit.AUDITORNAME; item.AUDITTIME = deposit.AUDITTIME; db.SaveChanges(); } } decimal useprice = 0; if (orderpays != null && orderpays.Any()) useprice = orderpays.Sum(p => p.PAYPRICE); if (!deposit.AUDITTIME.HasValue) { deposit.AUDITTIME = DateTime.Now; } deposit.USEPRICE += useprice; deposit.LASTPRICE -= useprice; var entry = db.Entry(deposit); db.Set().Attach(deposit); entry.State = System.Data.Entity.EntityState.Modified; if (orderpays != null && orderpays.Any()) { var orderids = orderpays.Select(p => p.ORDERID).Distinct().ToList(); foreach (var orderid in orderids) { //单个订单的支付信息 var orderpayList = db.WX_SZZYORDERPAY.Where(p => p.ORDERID == orderid && p.ISDELETE == 0 && p.AUDITSTATUS == 1); var arrivalPay = orderpayList.Sum(p => p.PAYPRICE); var payDate = orderpayList.OrderByDescending(p => p.PAYDATE).First().PAYDATE; var oid = Convert.ToDecimal(orderid); var order = db.WX_SZZYORDER.FirstOrDefault(p => p.ORDERID == oid); if (order != null) { if (arrivalPay >= order.NEEDPAY) { order.ORDERSTATUS = "200"; order.ORDERSTATUSNAME = "已支付"; } else { order.ORDERSTATUS = "190"; order.ORDERSTATUSNAME = "已提交支付"; } order.ARRIVALPAY = arrivalPay; order.ARRIVALTIME = payDate; } } } db.SaveChanges(); trans.Commit(); return new retMsg { result = true, retcode = 200 }; } catch (Exception ex) { LogHelper.Error(ex); trans.Rollback(); return new retMsg { result = false, retcode = 500 }; } } } } /// /// 应该弃用 /// /// /// public retMsg Reject(WX_SZZYORDERDEPOSIT deposit) { using (var db = new crmContext()) { using (var trans = db.Database.BeginTransaction()) { try { //重置使用金额,剩余金额 deposit.USEPRICE = 0; deposit.LASTPRICE = deposit.PAYPRICE; var entry = db.Entry(deposit); db.Set().Attach(deposit); entry.State = System.Data.Entity.EntityState.Modified; var orderids = new List(); //驳回的时候,所有使用的金额都要删除 var orderpays = db.WX_SZZYORDERPAY.Where(p => p.DEPOSITID == deposit.ID && p.ISDELETE == 0 && p.AUDITSTATUS == 1); foreach (var item in orderpays) { item.AUDITSTATUS = 0; item.ISDELETE = 1; orderids.Add(item.ORDERID); } //旧的方式的订金也要删除 var oldorderpays = db.WX_SZZYORDERPAY.Where(p => p.ORDERID == deposit.ID && p.ISDELETE == 0 && p.AUDITSTATUS == 1); foreach (var item in oldorderpays) { item.AUDITSTATUS = 0; item.ISDELETE = 1; if (!item.DEPOSITID.HasValue) { //旧数据如果订金ID为空,更新数据 item.DEPOSITID = deposit.ID; } orderids.Add(item.ORDERID); } db.SaveChanges(); var ids = orderids.Distinct(); if (ids.Any()) { foreach (var orderid in ids) { //重新获取订单使用的金额数据 var orderpayList = db.WX_SZZYORDERPAY.Where(p => p.ORDERID == orderid && p.ISDELETE == 0 && p.AUDITSTATUS == 1); decimal arrivalPay = 0; if (orderpayList != null && orderpayList.Count() > 0) arrivalPay = orderpayList.Sum(p => p.PAYPRICE); var oid = Convert.ToDecimal(orderid); var order = db.WX_SZZYORDER.FirstOrDefault(p => p.ORDERID == oid); if (order != null) { if (arrivalPay >= order.NEEDPAY) { order.ORDERSTATUS = "200"; order.ORDERSTATUSNAME = "已支付"; } else if (arrivalPay > 0) { order.ORDERSTATUS = "190"; order.ORDERSTATUSNAME = "已提交支付"; } else { order.ORDERSTATUS = "180"; order.ORDERSTATUSNAME = "新订单"; } if (arrivalPay > 0) { var payDate = orderpayList.OrderByDescending(p => p.PAYDATE).First().PAYDATE; order.ARRIVALPAY = arrivalPay; order.ARRIVALTIME = payDate; } else { order.ARRIVALPAY = null; order.ARRIVALTIME = null; } } } } db.SaveChanges(); trans.Commit(); return new retMsg { result = true, retcode = 200 }; } catch (Exception ex) { LogHelper.Error(ex); trans.Rollback(); return new retMsg { result = false, retcode = 500 }; } } } } /// /// 订单列表=》取消到账(订单改成新订单,订金取消使用) /// /// /// public retMsg OrderCancel(decimal orderId) { using (var db = new crmContext()) { using (var trans = db.Database.BeginTransaction()) { try { var order = db.WX_SZZYORDER.FirstOrDefault(m => m.ORDERID == orderId); //如果已经开通过,提示不能操作 //if (order.ORDERSTATUS == "220") //{ // return new retMsg { result = false, retcode = 220 }; //} LogHelper.Info("订单取消到账:" + orderId); var Alloldorderpays = db.WX_SZZYORDERPAY.Where(p => p.ORDERID == orderId && p.ISDELETE == 0 && p.AUDITSTATUS == 1); foreach (var pay in Alloldorderpays) { if (pay.DEPOSITID.HasValue)//pay表有订金字段,那么需要退定金操作 { var orderDeposit = db.WX_SZZYORDERDEPOSIT.FirstOrDefault(p => p.ID == pay.DEPOSITID); if (orderDeposit != null) { //已经驳回,不需要在进行处理 if (orderDeposit.AUDITSTATUS == -1) { return new retMsg() { result = false, retcode = 300, retmsg = "exists" }; } orderDeposit.USEPRICE = orderDeposit.USEPRICE - pay.PAYPRICE;//使用金额计算 orderDeposit.LASTPRICE = orderDeposit.LASTPRICE + pay.PAYPRICE;//加回之前的金额 pay.AUDITSTATUS = 0;//pay表需要将数据删除 pay.ISDELETE = 1;//pay表需要将数据删除 var orderids = new List(); //需要将使用了的订金金额加回去 //var log = new Wx_SzzyOrderPayUseLog(orderDeposit.resid, orderDeposit.orderid, orderDeposit.id, orderDeposit.paytype, orderDeposit.paytypename, orderDeposit.payno, pay.payprice, DateTime.Now, pay.channel.Value, 3); //db.Wx_SzzyOrderPayUseLog.Add(log); //推送订金状态到坐席 //Common.EventBus.EventBus.Instance.Publish(new DepositRejectEvent(orderDeposit.id, orderDeposit.auditstatus, "", userId, userName, orderDeposit.channel.Value)); //return new retMsg() { result = true, retcode = 200, retmsg = "success" }; } } else { //如果找不到订金,那么可能是老订单,需要直接改变支付的状态 pay.AUDITSTATUS = 0; pay.ISDELETE = 1; } } order.ORDERSTATUS = "180"; order.ORDERSTATUSNAME = "新订单"; order.ARRIVALPAY = null; order.ARRIVALTIME = null; db.SaveChanges(); trans.Commit(); //Common.EventBus.EventBus.Instance.Publish(new ReSetOrderEvent(orderId, order.CHANNEL));//推送取消订单 return new retMsg() { result = true, retcode = 200, retmsg = "success" }; } catch (Exception ex) { LogHelper.Error(ex); trans.Rollback(); return new retMsg { result = false, retcode = 500 }; } } } } public retMsg Delete(decimal id) { using (var db = new crmContext()) { using (var trans = db.Database.BeginTransaction()) { try { var deposit = db.WX_SZZYORDERDEPOSIT.FirstOrDefault(p => p.ID == id); if (deposit != null) { deposit.AUDITSTATUS = 0; deposit.ISDELETE = 1; deposit.USEPRICE = 0; deposit.LASTPRICE = deposit.PAYPRICE;//将金额返回 var orderids = new List(); //驳回的时候,所有使用的金额都要删除 var orderpays = db.WX_SZZYORDERPAY.Where(p => p.DEPOSITID == deposit.ID && p.ISDELETE == 0 && p.AUDITSTATUS == 1); foreach (var item in orderpays) { item.AUDITSTATUS = 0; item.ISDELETE = 1; orderids.Add(item.ORDERID); } //旧的方式的订金也要删除 var oldorderpays = db.WX_SZZYORDERPAY.Where(p => p.ORDERID == deposit.ID && p.ISDELETE == 0 && p.AUDITSTATUS == 1); foreach (var item in oldorderpays) { item.AUDITSTATUS = 0; item.ISDELETE = 1; orderids.Add(item.ORDERID); } db.SaveChanges(); var ids = orderids.Distinct(); if (ids.Any()) { foreach (var orderid in ids) { //重新获取订单使用的金额数据 var orderpayList = db.WX_SZZYORDERPAY.Where(p => p.ORDERID == orderid && p.ISDELETE == 0 && p.AUDITSTATUS == 1); //var arrivalPay = orderpayList.Sum(p => p.PAYPRICE); decimal arrivalPay = 0; if (orderpayList != null && orderpayList.Count() > 0) arrivalPay = orderpayList.Sum(p => p.PAYPRICE); var oid = Convert.ToDecimal(orderid); var order = db.WX_SZZYORDER.FirstOrDefault(p => p.ORDERID == oid); if (order != null) { if (arrivalPay >= order.NEEDPAY) { order.ORDERSTATUS = "200"; order.ORDERSTATUSNAME = "已支付"; } else if (arrivalPay > 0) { order.ORDERSTATUS = "190"; order.ORDERSTATUSNAME = "已提交支付"; } else { order.ORDERSTATUS = "180"; order.ORDERSTATUSNAME = "新订单"; } if (arrivalPay > 0) { var payDate = orderpayList.OrderByDescending(p => p.PAYDATE).First().PAYDATE; order.ARRIVALPAY = arrivalPay; order.ARRIVALTIME = payDate; } else { order.ARRIVALPAY = null; order.ARRIVALTIME = null; } } } } db.SaveChanges(); trans.Commit(); } return new retMsg { result = true, retcode = 200 }; } catch (Exception ex) { LogHelper.Error(ex); trans.Rollback(); return new retMsg { result = false, retcode = 500 }; } } } } /// /// 订金数据中心点获取 /// /// /// /// public retMsg GetCoreDepositList(Pager pager, OrderPayListReqDto dto) { try { dto.laypage = new LaypageDto() { count = pager.totalRows, limit = pager.rows, order = pager.order, page = pager.page, sort = pager.sort }; var url = _chache.GetValue_Parameter("Core_PayService_OrderPayListGet");//获取订金列表 var para = _sHelper.createSignEncodingStr(dto.ToJson(), SecurityHelper.OrderClientIdKey); LogHelper.Info("DepositGet:" + url + "?" + para); var rep = Utility.PostData(url + "?" + para, Encoding.UTF8); //LogHelper.Info("DepositGetRsp:" + rep); var retmsg = JsonConvert.DeserializeObject>(rep); return retmsg; } catch (Exception e) { LogHelper.Error(e.ToString()); return new retMsg() { result = false, retcode = 500, retmsg = null }; } } /// /// 订单流水使用数据 中心点获取 /// /// /// /// public retMsg GetCorePayList(Pager pager, OrderPayUseListReqDto dto) { try { dto.laypage = new LaypageDto() { count = pager.totalRows, limit = pager.rows, order = pager.order, page = pager.page, sort = pager.sort }; var url = _chache.GetValue_Parameter("Core_PayService_OrderPayUseListGet");//获取订金列表 var para = _sHelper.createSignEncodingStr(dto.ToJson(), SecurityHelper.OrderClientIdKey); LogHelper.Info("PayListGet:" + url + "?" + para); var rep = Utility.PostData(url + "?" + para, Encoding.UTF8); //LogHelper.Info("DepositGetRsp:" + rep); var retmsg = JsonConvert.DeserializeObject>(rep); return retmsg; } catch (Exception e) { LogHelper.Error(e.ToString()); return new retMsg() { result = false, retcode = 500, retmsg = null }; } } public retMsg GetCoreDepositLastPay(LastPriceReqDto dto) { try { var url = _chache.GetValue_Parameter("Core_PayService_OrderPayLastpriceGet");//获取订金列表 var para = _sHelper.createSignEncodingStr(dto.ToJson(), SecurityHelper.OrderClientIdKey); LogHelper.Info("DepositLastPay:" + url + "?" + para); var rep = Utility.PostData(url + "?" + para, Encoding.UTF8); LogHelper.Info("DepositLastPayRsp:" + rep); var retmsg = JsonConvert.DeserializeObject>(rep); return retmsg; } catch (Exception e) { LogHelper.Error(e.ToString()); return new retMsg() { result = false, retcode = 500, retmsg = null }; } } } }