/// <summary> /// 修改数据 /// </summary> /// <param name="model">实体</param> /// <returns>影响行数</returns> public int Update(FnStockRecord model) { return(DBContext.Update(StrTableName, model) .AutoMap(x => x.SysNo) .Where(x => x.SysNo) .Execute()); }
/// <summary> /// 获取销售股权交易日志列表 /// </summary> /// <param name="nowStockAmount">当前股权金额</param> /// <param name="buyStockRecord">购买方股权记录</param> /// <param name="saleStockRecordList">销售股权记录列表</param> /// <returns>销售股权交易日志列表</returns> public List <FnTradeLog> GetSaleStockTradeLog(decimal nowStockAmount, FnStockRecord buyStockRecord, List <FnStockRecord> saleStockRecordList) { var tradeLogList = new List <FnTradeLog>(); foreach (var item in saleStockRecordList) { //销售方交易记录 tradeLogList.Add(new FnTradeLog() { SourceType = TradeLogEnum.SourceTypeEnum.股权记录.GetHashCode(), SourceSysNo = item.SysNo, OutOperatorType = OperatorTypeEnum.会员.GetHashCode(), OutOperatorSysNo = item.OperatorSysNo, InOperatorType = buyStockRecord.OperatorType, InOperatorSysNo = buyStockRecord.OperatorSysNo, TradeAmount = item.TradedStockNum * item.CurrentStockAmount, CurrentStockAmount = item.CurrentStockAmount, Remarks = string.Format("卖家卖出{0}股", item.TradedStockNum), CreatedDate = DateTime.Now }); //购买方交易记录 tradeLogList.Add(new FnTradeLog() { SourceType = TradeLogEnum.SourceTypeEnum.股权记录.GetHashCode(), SourceSysNo = buyStockRecord.SysNo, OutOperatorType = OperatorTypeEnum.会员.GetHashCode(), OutOperatorSysNo = item.OperatorSysNo, InOperatorType = buyStockRecord.OperatorType, InOperatorSysNo = buyStockRecord.OperatorSysNo, TradeAmount = item.TradedStockNum * nowStockAmount, CurrentStockAmount = nowStockAmount, Remarks = string.Format("买家买入{0}股", item.TradedStockNum), CreatedDate = DateTime.Now }); } var surplusTradedStockNum = buyStockRecord.TradedStockNum - saleStockRecordList.Sum(p => p.TradedStockNum); if (surplusTradedStockNum > 0) { //购买方交易记录 tradeLogList.Add(new FnTradeLog() { SourceType = TradeLogEnum.SourceTypeEnum.股权记录.GetHashCode(), SourceSysNo = buyStockRecord.SysNo, OutOperatorType = OperatorTypeEnum.管理员.GetHashCode(), OutOperatorSysNo = 0, InOperatorType = buyStockRecord.OperatorType, InOperatorSysNo = buyStockRecord.OperatorSysNo, TradeAmount = surplusTradedStockNum * nowStockAmount, CurrentStockAmount = nowStockAmount, Remarks = string.Format("买家系统买入{0}股", surplusTradedStockNum), CreatedDate = DateTime.Now }); } return(tradeLogList); }
/// <summary> /// 更新取消股权销售 /// </summary> /// <param name="model">实体</param> /// <returns>影响行数</returns> public int UpdateCancelSaleStock(FnStockRecord model) { return(DBContext.Sql(string.Format("update {0} set StockNum=StockNum-@StockNum,Status=@Status,Remarks=CONCAT(Remarks,@Remarks) where SysNo=@SysNo", StrTableName)) .Parameter("StockNum", model.StockNum) .Parameter("Status", model.Status) .Parameter("Remarks", model.Remarks) .Parameter("SysNo", model.SysNo) .Execute()); }
/// <summary> /// 获取需更新股权挂售记录 /// </summary> /// <param name="buyCustomerSysNo">购买会员编码</param> /// <param name="getStockNum">购买股权数</param> /// <param name="nowStockAmount">当前股权金额</param> /// <returns>需更新股权挂售记录列表</returns> public List <FnStockRecord> GetUpdateHangSaleStock(int buyCustomerSysNo, int getStockNum, decimal nowStockAmount) { var stockRecordList = new List <FnStockRecord>(); //获取未处理的挂售股权 var saleStockRecordList = Using <IFnStockRecord>().GetList(new StockRecordRequest() { Type = StockRecordEnum.TypeEnum.股权挂售.GetHashCode(), StatusList = new List <int>() { StockRecordEnum.StatusEnum.待处理.GetHashCode(), StockRecordEnum.StatusEnum.部分处理.GetHashCode() } }).OrderBy(p => p.CreatedDate); //进行挂售的股权处理 foreach (var item in saleStockRecordList) { FnStockRecord stockRecord; if (getStockNum <= 0) { break; } if (getStockNum >= item.StockNum) { stockRecord = new FnStockRecord() { SysNo = item.SysNo, OperatorSysNo = item.OperatorSysNo, TradedStockNum = item.StockNum - item.TradedStockNum, CurrentStockAmount = item.CurrentStockAmount, Status = StockRecordEnum.StatusEnum.已处理.GetHashCode(), Remarks = string.Format("买入方[{0}]以当前股权价格:{1},股权数:{2}买入;", buyCustomerSysNo, nowStockAmount, item.StockNum - item.TradedStockNum) }; getStockNum -= item.StockNum; } else { stockRecord = new FnStockRecord() { SysNo = item.SysNo, OperatorSysNo = item.OperatorSysNo, TradedStockNum = getStockNum, CurrentStockAmount = item.CurrentStockAmount, Status = StockRecordEnum.StatusEnum.部分处理.GetHashCode(), Remarks = string.Format("买入方[{0}]以当前股权价格:{1},股权数:{2}买入部分;", buyCustomerSysNo, nowStockAmount, getStockNum) }; getStockNum = 0; } stockRecordList.Add(stockRecord); } return(stockRecordList); }
/// <summary> /// 修改数据 /// </summary> /// <param name="model">实体</param> /// <returns>影响行数</returns> public JResult Update(FnStockRecord model) { var result = new JResult(); try { var row = Using <IFnStockRecord>().Update(model); if (row <= 0) { throw new Exception("修改数据失败"); } result.Status = true; } catch (Exception ex) { result.Message = ex.Message; } return(result); }
/// <summary> /// 新增数据 /// </summary> /// <param name="model">实体</param> /// <returns>系统编号</returns> public JResult <int> Insert(FnStockRecord model) { var result = new JResult <int>(); try { var row = Using <IFnStockRecord>().Insert(model); if (row <= 0) { throw new Exception("添加数据失败"); } result.Status = true; result.Data = row; } catch (Exception ex) { result.Message = ex.Message; } return(result); }
/// <summary> /// 平台购股权 /// </summary> /// <param name="userSysNo">用户编号</param> /// <returns>JResult</returns> public JResult PlatformBuyStock(int userSysNo) { var result = new JResult(); try { var codeList = Using <IBsCode>().GetListByTypeList(new List <int>() { CodeEnum.CodeTypeEnum.股权价格.GetHashCode(), CodeEnum.CodeTypeEnum.购股手续费率.GetHashCode(), }); //固定数据 var stockPrice = Convert.ToDecimal(codeList.First(p => p.Type == CodeEnum.CodeTypeEnum.股权价格.GetHashCode()).Value); var rate = Convert.ToDecimal(codeList.First(p => p.Type == CodeEnum.CodeTypeEnum.购股手续费率.GetHashCode()).Value); var stockRecordList = GetUpdateHangSaleStock(userSysNo, int.MaxValue, stockPrice); if (!stockRecordList.Any()) { throw new Exception("无挂售信息"); } var getStockNum = stockRecordList.Sum(p => p.TradedStockNum); var saleAmountList = GetSaleAmount(rate, stockRecordList); //购买方股权记录 var buyStockRecord = new FnStockRecord() { Type = StockRecordEnum.TypeEnum.股权申购.GetHashCode(), OperatorType = OperatorTypeEnum.管理员.GetHashCode(), OperatorSysNo = userSysNo, StockNum = getStockNum, TradedStockNum = getStockNum, CurrentStockAmount = stockPrice, Status = StockRecordEnum.StatusEnum.已处理.GetHashCode(), Remarks = "管理员进行平台收购", CreatedDate = DateTime.Now }; var changeStockAccountList = GetSaleStockAccount(new List <FnStockAccount>(), stockRecordList); using (var tran = new TransactionScope()) { try { if (Using <ICrCustomer>().BatchUpdate(saleAmountList) <= 0) { throw new Exception("金额写入失败"); } //更新股权账户 if (Using <IFnStockAccount>().BatchUpdateSaleStockNum(changeStockAccountList) <= 0) { throw new Exception("更新股权账户失败"); } //新增申购用户股权记录 buyStockRecord.SysNo = Using <IFnStockRecord>().Insert(buyStockRecord); if (buyStockRecord.SysNo <= 0) { throw new Exception("新增股权记录失败"); } //更新挂售用户股权记录 if (Using <IFnStockRecord>().BatchUpdateSaleRecord(stockRecordList) <= 0) { throw new Exception("更新销售股权记录失败"); } //获取交易日志 var tradeLogList = GetSaleStockTradeLog(stockPrice, buyStockRecord, stockRecordList); if (Using <IFnTradeLog>().BatchInsert(tradeLogList) <= 0) { throw new Exception("新增交易日志失败"); } result.Status = true; tran.Complete(); } catch (Exception ex) { tran.Dispose(); throw ex; } } } catch (Exception exx) { result.Message = exx.Message; } return(result); }
/// <summary> /// 申购股权 /// </summary> /// <param name="buyCustomerSysNo">申购会员编号</param> /// <returns>申购结果</returns> public JResult ApplyBuyStock(int buyCustomerSysNo) { var result = new JResult(); try { var codeList = Using <IBsCode>().GetListByTypeList(new List <int>() { CodeEnum.CodeTypeEnum.股权价格.GetHashCode(), CodeEnum.CodeTypeEnum.固定购股金额.GetHashCode(), CodeEnum.CodeTypeEnum.股权增值金额.GetHashCode(), CodeEnum.CodeTypeEnum.购股有效金额.GetHashCode(), CodeEnum.CodeTypeEnum.购股手续费率.GetHashCode(), }); //固定数据 var stockPrice = Convert.ToDecimal(codeList.First(p => p.Type == CodeEnum.CodeTypeEnum.股权价格.GetHashCode()).Value); var fixedStockAmount = Convert.ToDecimal(codeList.First(p => p.Type == CodeEnum.CodeTypeEnum.固定购股金额.GetHashCode()).Value); var addStockPoolAmount = Convert.ToDecimal(codeList.First(p => p.Type == CodeEnum.CodeTypeEnum.股权增值金额.GetHashCode()).Value); var usefulStockAmount = Convert.ToDecimal(codeList.First(p => p.Type == CodeEnum.CodeTypeEnum.购股有效金额.GetHashCode()).Value); var rate = Convert.ToDecimal(codeList.First(p => p.Type == CodeEnum.CodeTypeEnum.购股手续费率.GetHashCode()).Value); //获取用户信息 var customer = Using <ICrCustomer>().Get(buyCustomerSysNo); if (customer == null) { throw new Exception("用户信息不存在"); } if (customer.UpgradeFundAmount < fixedStockAmount) { result.StatusCode = ErrorEnum.余额不足.GetHashCode().ToString(CultureInfo.InvariantCulture); throw new Exception(string.Format("用户升级基金{0}余额不足,请充值", customer.UpgradeFundAmount)); } //用户资金变动列表 var batchRequestList = new List <CustomerExtBatchRequest>(); //用户股权账户变动列表 var batchStockAccountList = new List <FnStockAccount>(); //实际可获股权数 var getStockNum = Convert.ToInt32(usefulStockAmount / stockPrice); //用户购买金额从升级基金扣除 batchRequestList.Add(new CustomerExtBatchRequest() { CustomerSysNo = buyCustomerSysNo, UpgradeFundAmount = -fixedStockAmount }); //用户获取的股权数 batchStockAccountList.Add(new FnStockAccount() { CustomerSysNo = buyCustomerSysNo, StockNum = getStockNum }); //销售股权记录 var saleStockRecordList = GetUpdateHangSaleStock(buyCustomerSysNo, getStockNum, stockPrice); //购买方股权记录 var buyStockRecord = new FnStockRecord() { Type = StockRecordEnum.TypeEnum.股权申购.GetHashCode(), OperatorType = OperatorTypeEnum.会员.GetHashCode(), OperatorSysNo = buyCustomerSysNo, StockNum = getStockNum, TradedStockNum = getStockNum, CurrentStockAmount = stockPrice, Status = StockRecordEnum.StatusEnum.已处理.GetHashCode(), Remarks = string.Format("当前股权价格:{0}", stockPrice), CreatedDate = DateTime.Now }; //新增股权池金额 var newAddStockPoolAmount = decimal.Round(Convert.ToDecimal(0), 8); //获取新增股权池数 var newAddStockPoolNum = getStockNum - saleStockRecordList.Sum(p => p.TradedStockNum); if (newAddStockPoolNum > 0) { if (newAddStockPoolNum == getStockNum) { newAddStockPoolAmount = addStockPoolAmount; } else { var stockAmount = decimal.Round(addStockPoolAmount / getStockNum, 8); newAddStockPoolAmount = decimal.Round(newAddStockPoolNum * stockAmount, 8); } } //销售用户销售金额 batchRequestList.AddRange(GetSaleAmount(rate, saleStockRecordList)); //用户股权账户变动列表 batchStockAccountList = GetSaleStockAccount(batchStockAccountList, saleStockRecordList); using (var tran = new TransactionScope()) { try { if (Using <ICrCustomer>().BatchUpdate(batchRequestList) <= 0) { throw new Exception("金额写入失败"); } //更新股权账户 if (Using <IFnStockAccount>().BatchUpdateSaleStockNum(batchStockAccountList) <= 0) { throw new Exception("更新股权账户失败"); } //新增申购用户股权记录 buyStockRecord.SysNo = Using <IFnStockRecord>().Insert(buyStockRecord); if (buyStockRecord.SysNo <= 0) { throw new Exception("新增股权记录失败"); } //更新挂售用户股权记录 if (saleStockRecordList.Any() && Using <IFnStockRecord>().BatchUpdateSaleRecord(saleStockRecordList) <= 0) { throw new Exception("更新销售股权记录失败"); } //获取交易日志 var tradeLogList = GetSaleStockTradeLog(stockPrice, buyStockRecord, saleStockRecordList); if (Using <IFnTradeLog>().BatchInsert(tradeLogList) <= 0) { throw new Exception("新增交易日志失败"); } //股东见点奖励 var seeBonusResult = SeeBonusPoints(buyCustomerSysNo); if (!seeBonusResult.Status) { throw new Exception(seeBonusResult.Message); } //股权池变动更新 var changeStockPool = ChangeStock(newAddStockPoolNum, newAddStockPoolAmount); if (!changeStockPool.Status) { throw new Exception(changeStockPool.Message); } result.Status = true; tran.Complete(); } catch (Exception ex) { tran.Dispose(); throw ex; } } } catch (Exception exx) { result.Message = exx.Message; } return(result); }
/// <summary> /// 新增数据 /// </summary> /// <param name="model">实体</param> /// <returns>系统编号</returns> public int Insert(FnStockRecord model) { return(DBContext.Insert(StrTableName, model) .AutoMap(x => x.SysNo) .ExecuteReturnLastId <int>("SysNo")); }