/// <summary> /// 计算商品返积分,一般展示商品详情的时候用 /// </summary> /// <param name="productId"></param> /// <param name="rebateRate"></param> /// <returns></returns> public decimal CalcProductRebateScore(string productId, decimal rebateRate, int count = 1, bool isGetInt = false) { BLLMall bllMall = new BLLMall(); var productInfo = bllMall.GetProduct(productId); return(CalcProductRebateScore(productInfo, rebateRate, count, isGetInt)); }
/// <summary> /// 商品打开统计及计数 /// </summary> /// <param name="messageInfo"></param> /// <param name="ramark"></param> /// <param name="errMsg"></param> public void ShopDetailOpenStatistics(MessageInfo messageInfo, out string ramark, out string errMsg) { Console.WriteLine("正在处理商品打开统计及计数"); ramark = ""; errMsg = ""; BLLMall bllMall = new BLLMall(); var msgBody = JsonConvert.DeserializeObject <Model.MQ.ShopDetailOpenStatistics>(messageInfo.Msg); var detailInfo = msgBody.GetMonitorEventDetailsInfo(); detailInfo.MonitorPlanID = msgBody.ProductId; bllMall.Add(detailInfo); //改成手动更新商品表 ////随机机率去更新,不用每次都去更新商品详情 //var rand = new Random().Next(0, 100); //if (rand > 10 && rand < 50 && rand % 2 == 0) //{ // //随机更新商品详情的访问统计 // Console.WriteLine("随机更新商品详情的访问统计"); // int uvCount = bllMall.GetCount<MonitorEventDetailsInfo>(" EventUserID ", string.Format(" MonitorPlanID={0} ", msgBody.ProductId)); // int ipCount = bllMall.GetCount<MonitorEventDetailsInfo>(" SourceIP ", string.Format(" MonitorPlanID={0} ", msgBody.ProductId)); // int pv = bllMall.GetCount<MonitorEventDetailsInfo>(string.Format(" MonitorPlanID={0} ", msgBody.ProductId)); // bllMall.Update(new WXMallProductInfo(), string.Format(" PV={2},UV={0},IP={1} ", uvCount, ipCount, pv), string.Format(" PID='{0}' ", msgBody.ProductId)); //} Console.WriteLine("商品打开统计及计数处理完毕"); }
/// <summary> /// 计算商品获得的积分 /// </summary> /// <param name="product"></param> /// <param name="rebateRate"></param> /// <param name="count"></param> /// <param name="isGetInt"></param> /// <returns></returns> public decimal CalcProductRebateScore(WXMallProductInfo product, decimal rebateRate, int count = 1, bool isGetInt = false) { BLLMall bllMall = new BLLMall(); decimal addScore = 0; //如果是特卖中 则不返积分 if (product.IsPromotionProduct == 1) { var productSkuList = bllMall.GetProductSkuList(int.Parse(product.PID));//源SKU foreach (var item in productSkuList) { if (bllMall.IsPromotionTime(item)) { return(0); } } } decimal price = product.Price - product.BasePrice; if (price < 0) { price = 0; } addScore = rebateRate * price * count; if (isGetInt) { addScore = RebateScoreGetInt(addScore); } return(addScore); }
/// <summary> /// 根据本地订单映射出驿氪订单 /// </summary> /// <param name="orderSrc"></param> /// <returns></returns> public Entity.OrderInfo GeiMappingOrderInfo(ZentCloud.BLLJIMP.Model.WXMallOrderInfo orderSrc) { BLLMall bllMall = new BLLMall(); Entity.OrderInfo order = new Entity.OrderInfo(); order.ShopCode = CurrEfastShopId.ToString(); order.Code = orderSrc.OrderID; order.OrderTime = orderSrc.InsertDate.ToString(); order.TotalQty = orderSrc.ProductCount; order.TotalMoney = 0;// (double)orderSrc.TotalAmount; order.IsPayed = orderSrc.PaymentStatus == 1; order.PayAmount = (double)orderSrc.TotalAmount; var userInfo = new BLLUser().GetUserInfo(orderSrc.OrderUserID); order.BuyerCode = userInfo.Ex2; order.OrderStatus = GetOrderStatusCode(orderSrc.Status); order.StatusTime = DateTime.Now.ToString(); order.SellerId = orderSrc.SellerId; order.DataOrigin = 1; order.PayTime = DateTime.Now.ToString(); order.ExpressFee = (double)orderSrc.Transport_Fee; order.RecvAddress = orderSrc.Address; order.RecvCity = orderSrc.ReceiverCity; order.RecvConsignee = orderSrc.Consignee; order.RecvCounty = orderSrc.ReceiverDist; order.RecvMobile = orderSrc.Phone; order.RecvProvince = orderSrc.ReceiverProvince; List <ZentCloud.BLLJIMP.Model.WXMallOrderDetailsInfo> detailList = bllMall.GetOrderDetailsList(orderSrc.OrderID); List <Entity.OrderDetail> dtls = new List <Entity.OrderDetail>(); int saleProdQty = 0; foreach (var item in detailList) { Entity.OrderDetail dtl = new Entity.OrderDetail(); saleProdQty++; dtl.BarCode = bllMall.GetEfastBarcode(item.SkuId.Value); dtl.PriceOriginal = (double)item.OrderPrice; dtl.PriceSell = (double)item.OrderPrice; dtl.Quantity = item.TotalCount; dtl.Amount = dtl.PriceSell * dtl.Quantity; dtl.IsGift = false; order.TotalMoney += dtl.Amount; dtls.Add(dtl); } order.Dtls = dtls; return(order); }
/// <summary> /// 计算每一个sku获得的积分 /// </summary> /// <param name="skuId"></param> /// <param name="rebateRate"></param> /// <param name="payRate"> /// 实付比例, /// 在需要均摊计算的时候用到 /// </param> /// <param name="count">数量</param> /// <param name="isGetInt"> /// 是否取整 /// 如果多件商品计算获得积分,在最终总分里面做取整处理 /// </param> /// <returns></returns> public decimal CalcProductSkuRebateScore(int skuId, decimal rebateRate, decimal?payRate = null, int count = 1, bool isGetInt = false) { BLLMall bllMall = new BLLMall(); BLLDistribution bllDist = new BLLDistribution(); decimal addScore = 0; var skuInfo = bllMall.GetProductSku(skuId); //判断如果是特卖中的商品则不给返积分 if (bllMall.IsPromotionTime(skuInfo)) { return(0); } var price = bllMall.GetSkuPrice(skuInfo); if (skuInfo.BasePrice <= 0) { var productInfo = bllMall.GetProduct(skuInfo.ProductId); skuInfo.BasePrice = productInfo.BasePrice; } price = price - skuInfo.BasePrice; if (payRate != null) { price = price * payRate.Value; } if (price < 0) { price = 0; } //全额获得的积分=售价*参与返积分的比例*积分返利比例 -- 已废除 //按价格比例获得的积分=均摊价*参与返积分的比例*积分返利比例 -- 已废除 //addScore = (int)(rebateRate * (productInfo.RebateScoreRate * 0.01M) * skuPrice * count); //获得的积分=实际售价(如果非全额则需要计算均摊差价:售价-基础价)* 返积分比例 * 数量 addScore = rebateRate * price * count; if (isGetInt) { addScore = RebateScoreGetInt(addScore); } return(addScore); }
/// <summary> /// 订单上传 /// </summary> /// <param name="orderSrc"></param> /// <param name="saleType"></param> /// <returns></returns> public Entity.ReqBase OrderUpload(ZentCloud.BLLJIMP.Model.WXMallOrderInfo orderSrc, string saleType = "S") { Entity.ReqBase result = new Entity.ReqBase(); BLLMall bllMall = new BLLMall(); List <Entity.OrderInfo> orderList = new List <Entity.OrderInfo>(); Entity.OrderInfo order = GeiMappingOrderInfo(orderSrc); orderList.Add(order); result = GetCommand <Entity.ReqBase>(JsonConvert.SerializeObject(orderList), APIUrl + "api/morder/ordadd", "post"); return(result); }
///// <summary> ///// 生成外部订单号 ///// </summary> ///// <returns></returns> //private string CreateOutOrderId(string orderId) //{ // if (orderId.Length > 10) // { // orderId = orderId.Substring(0, 10); // } // return string.Format("{0}_{1}", DateTime.Now.ToString("yyyyMMddhhmmss"), orderId.PadLeft(10, '0')); //} ///// <summary> ///// 生成签名 ///// </summary> ///// <param name="appId"></param> ///// <param name="timeStamp"></param> ///// <param name="appkey"></param> ///// <returns></returns> //public string CreateSign(string appId, string timeStamp, string appkey) //{ // string sign = ZentCloud.Common.SHA1.SHA1_Encrypt(string.Format("appid={0}&appkey={1}×tamp={2}", appId, appkey, timeStamp)).ToUpper(); // return sign; //} protected void Button1_Click(object sender, EventArgs e) { BLLMall bllMall = new BLLMall(); /// <summary> /// Efast /// </summary> Open.EfastSDK.Client efastClient = new Open.EfastSDK.Client(); ProductSku skuInfo = bllMall.Get <ProductSku>(string.Format("SkuSN='{0}'", txtOrderId.Text)); if (skuInfo == null) { txtOrderId.Text = string.Format("条码不存在"); return; } var eFastSku = efastClient.GetSkuStock(9, skuInfo.OutBarCode); if (eFastSku != null) { if (eFastSku.sl != skuInfo.Stock) { skuInfo.Stock = eFastSku.sl; if (ZentCloud.ZCBLLEngine.BLLBase.ExecuteSql(string.Format("update ZCJ_ProductSku set Stock={0} where SkuId={1}", skuInfo.Stock, skuInfo.SkuId)) >= 0) { txtOrderId.Text = string.Format("同步成功,条码:{0}库存:{1}", skuInfo.OutBarCode, skuInfo.Stock); } } else { txtOrderId.Text = string.Format("库存一致,跳过 条码:{0}库存:{1}", skuInfo.OutBarCode, skuInfo.Stock); } } else { txtOrderId.Text = "未查到"; } }
/// <summary> /// 审核通过打款 /// </summary> /// <param name="autoId">记录Id</param> /// <param name="userId">操作人账号</param> /// <param name="msg">提示信息</param> /// <returns></returns> public bool Pass(int autoId, string userId, out string msg) { msg = ""; var record = Get(autoId); if (record.Status == 1) { msg = "该记录已打款"; return(false); } switch (record.Type) { #region 分销提现 case "DistributionWithdraw": //分销提现 BLLDistribution bllDis = new BLLDistribution(); List <WithdrawCash> list = new List <WithdrawCash>(); WithdrawCash model = Get <WithdrawCash>(string.Format("TranId='{0}'", record.TranId)); if (model == null) { msg = "该记录已标记为失败"; return(false); } list.Add(model); if (!bllDis.UpdateWithrawCashStatus(list, 2, out msg)) { return(false); } break; #endregion #region 商城退款 case "MallRefund": //退款 BLLMall bllMall = new BLLMall(); WXMallRefund refund = bllMall.Get <WXMallRefund>(string.Format("RefundId='{0}'", record.TranId)); switch (refund.Status) { case 2: msg = "未同意退款"; return(false); case 5: msg = "未收到货拒绝退款"; return(false); case 7: msg = "退款申请关闭"; return(false); default: break; } if (!bllMall.Refund(refund.OrderDetailId, out msg)) { return(false); } break; #endregion default: msg = "未定义的类型"; return(false); } record.UpdateTime = DateTime.Now; record.Status = 1; record.OperaUserId = userId; if (Update(record)) { return(true); } return(false); }
/// <summary> /// 计算订单可以返多少积分 /// </summary> /// <param name="orderInfo"></param> /// <returns></returns> public decimal CalcOrderRebateScore(WXMallOrderInfo orderInfo) { BLLMall bllMall = new BLLMall(); decimal addScore = 0; //取出全部sku和数量,相加获取得到的总积分 //判断当前是否只能全额支付才返积分 //如果可以不全额,且实付跟应付不一致,则每个商品按照均摊价格去计算积分 var websiteInfo = GetWebsiteInfoModelFromDataBase(orderInfo.WebsiteOwner); if (websiteInfo.IsRebateScoreMustAllCash == 1 && !orderInfo.IsAllCash) { //如果没有使用优惠券、积分、余额抵扣则为全额付款 return(0); } var detalList = bllMall.GetOrderDetailsList(orderInfo.OrderID); var rebateRate = GetUserRebateScoreRate(orderInfo.OrderUserID, orderInfo.WebsiteOwner); if (rebateRate > 0 && orderInfo.TotalAmount > 0) { foreach (var item in detalList) { decimal payRate = 1;//实付比例 if (!orderInfo.IsAllCash) { // 没有全额付款,计算返积分均摊价 // 均摊价=单个商品价格/所有商品价格*(实付-运费)- 已废弃 //item.OrderPrice = item.OrderPrice.Value / orderInfo.Product_Fee * (orderInfo.TotalAmount - orderInfo.Transport_Fee); /* 积分均摊价 * * 实付价格比例=商品实付/商品应付(不算邮费) * * 单个sku应算积分差价比例=单个sku积分差价(一件)/积分差价总和(总件数) * * 差价总额=每个sku的积分差价*数量 加起来 * * 单个sku积分差价(无均摊)= 单个sku应算积分差价比例 * 差价总额 * * 单个sku积分均摊价 = 实付价格比例 * 单个sku积分差价 * = 商品实付/商品应付(不算邮费) * 差价总额 * 单个sku应算积分差价比例 * * -------------------------------------------------------------------------------------- * * * 单个sku积分均摊价 = 实付价格比例 * 单个sku积分差价 * * */ payRate = (orderInfo.TotalAmount - orderInfo.Transport_Fee) / orderInfo.Product_Fee; } addScore += CalcProductSkuRebateScore(item.SkuId.Value, rebateRate, payRate, item.TotalCount); } } addScore = RebateScoreGetInt(addScore); return(addScore); }
/// <summary> /// 冻结积分结算 /// </summary> /// <param name="orderInfo"></param> /// <returns></returns> public bool SettlementOrderLockScore(WXMallOrderInfo orderInfo, out string msg) { BLLMall bllMall = new BLLMall(); BLLWebsiteDomainInfo bllWebsiteDomain = new BLLWebsiteDomainInfo(); BLLWeixin bllWeixin = new BLLWeixin(); msg = ""; var lockModel = GetLockScoreByOrder(orderInfo.OrderID); int addScore = (int)lockModel.Score; if (addScore > 0) { UserInfo orderUserInfo = bllUser.GetUserInfo(orderInfo.OrderUserID, orderInfo.WebsiteOwner); if (orderUserInfo == null) { return(false); } WebsiteInfo websiteInfo = bllMall.Get <WebsiteInfo>(string.Format(" WebsiteOwner='{0}'", orderInfo.WebsiteOwner)); ZentCloud.ZCBLLEngine.BLLTransaction tran = new ZentCloud.ZCBLLEngine.BLLTransaction(); try { UserScoreDetailsInfo scoreRecord = new UserScoreDetailsInfo(); scoreRecord.AddTime = DateTime.Now; scoreRecord.Score = addScore; scoreRecord.TotalScore = orderUserInfo.TotalScore; scoreRecord.ScoreType = "OrderSuccess"; scoreRecord.UserID = orderInfo.OrderUserID; scoreRecord.AddNote = "微商城-交易成功获得积分"; scoreRecord.WebSiteOwner = orderInfo.WebsiteOwner; scoreRecord.RelationID = orderInfo.OrderID; if (!bllMall.Add(scoreRecord, tran)) { tran.Rollback(); return(false); } if (bllUser.Update(orderUserInfo, string.Format(" TotalScore+={0},HistoryTotalScore+={0}", addScore), string.Format(" AutoID={0}", orderUserInfo.AutoID), tran) <= 0) { tran.Rollback(); return(false); } #region 宏巍加积分 if (websiteInfo.IsUnionHongware == 1) { Open.HongWareSDK.Client hongWareClient = new Open.HongWareSDK.Client(orderInfo.WebsiteOwner); var hongWareMemberInfo = hongWareClient.GetMemberInfo(orderUserInfo.WXOpenId); if (hongWareMemberInfo.member != null) { if (!hongWareClient.UpdateMemberScore(hongWareMemberInfo.member.mobile, orderUserInfo.WXOpenId, addScore)) { tran.Rollback(); return(false); } } } #endregion //积分解冻 if (!string.IsNullOrWhiteSpace(lockModel.Memo)) { lockModel.Memo += ";交易成功获得积分解冻"; } else { lockModel.Memo = "交易成功获得积分解冻"; } if (Update( new ScoreLockInfo(), string.Format(" Memo+='{0}',LockStatus=1,UnLockTime=GETDATE() ", lockModel.Memo), string.Format(" ForeignkeyId='{0}' AND LockType = 1 ", orderInfo.OrderID), tran ) > 0) { #region 微信通知 try { string url = string.Format("http://{0}/customize/shop/?v=1.0&ngroute=/myscores#/myscores", bllWebsiteDomain.GetWebsiteDoMain(orderInfo.WebsiteOwner)); bllWeixin.SendTemplateMessageNotifyCommTask(orderUserInfo.WXOpenId, "您有一笔积分已经到账", string.Format("积分:{0}分", (int)lockModel.Score), url, "", "", "", orderInfo.WebsiteOwner); } catch { } #endregion } else { msg = string.Format("处理即将到账积分失败!订单号:{0}", orderInfo.OrderID); tran.Rollback(); return(false); } } catch (Exception ex) { msg = ex.Message; tran.Rollback(); return(false); } tran.Commit(); } return(true); }
/// <summary> /// 前台发放的储值卡可用状态 /// </summary> /// <param name="card">储值卡主卡</param> /// <param name="record">发放的储值卡</param> /// <param name="curUser">当前登录用户</param> /// <param name="fromUser">发放用户</param> /// <param name="toUser">转赠用户</param> /// <param name="isGive">是否转赠</param> /// <returns> /// 可用状态 /// 0可用 /// 1已使用 /// 2已过期 /// 10待接收转赠 (接口判断查看人构造) /// 11已转赠 (接口判断查看人构造) /// 12已转赠他人(接口判断查看人构造) /// 9已停用 (接口判断查看人构造) /// 99非法状态 (未知) /// </returns> public int GetUseStatus(StoredValueCard card, StoredValueCardRecord record, UserInfo curUser, UserInfo fromUser, UserInfo toUser, bool isGive) { BLLMall bllMall = new BLLMall(); int useStatus = 99; //正常 if (card.Status == 1) { useStatus = 9; //已停用 } else if (record.Status == 0) { if (curUser.AutoID == fromUser.AutoID) { useStatus = 0; //已转赠 } else if (isGive) { useStatus = 10; //待接收转赠 } } else if (record.Status == 1) { if (curUser.AutoID == toUser.AutoID) { useStatus = 0; //正常 } else if (curUser.AutoID == fromUser.AutoID) { useStatus = 11; //已转赠 } else { useStatus = 12; //已转赠它人 } } else if (record.Status == 9) { if (curUser.AutoID == fromUser.AutoID && toUser != null) { useStatus = 11; //已转赠 } else { useStatus = 1; //已使用 } // 储值卡有余额还可转赠 decimal canUseAmount = string.IsNullOrEmpty(record.ToUserId) ? bllMall.GetStoreValueCardCanUseAmount(record.AutoId.ToString(), record.UserId) : bllMall.GetStoreValueCardCanUseAmount(record.AutoId.ToString(), record.UserId); if (canUseAmount > 0) { useStatus = 0; if (isGive) { useStatus = 10; } } // 储值卡有余额还可转赠 } if (useStatus == 0 && record.ValidTo.HasValue && record.ValidTo.Value < DateTime.Now) { useStatus = 2; } return(useStatus); }