/// <summary> /// 申购场景 /// </summary> public class SubscribeContext : IContext {
private SubscribeUser _user; private SubscribeFund _fund; private decimal _amount;
public SubscribeContext( SubscribeUser user ,SubscribeFund fund , decimal amount ) { this._user = user; this._fund = fund; this._amount = amount; }
public ActionResponse Interact() { ActionResponse response = new ActionResponse(); //验证基金是否存在 if (this._fund.NotExists) { return new FailureResponse( MessageResourceManager.GetMessage("ERR_NOT_EXISTS_FUND").Code , MessageResourceManager.GetMessage("ERR_NOT_EXISTS_FUND").Text ); } //封闭式、创新型封闭式、理财产品、QDII和首发基金不允许购买 if (this._fund.CannotSubscribe) { return new FailureResponse( MessageResourceManager.GetMessage("ERR_CAN_NOT_BUY_FUND").Code , MessageResourceManager.GetMessage("ERR_CAN_NOT_BUY_FUND").Text ); } //验证基金是否处于封闭期或暂停申购 if (this._fund.SubscribeClosed) { return new FailureResponse( MessageResourceManager.GetMessage("ERR_SUBSCRIBE_CLOSED_FUND").Code , MessageResourceManager.GetMessage("ERR_SUBSCRIBE_CLOSED_FUND").Text ); } //验证选手是否允许购买此基金 if (this._user.CannotBuyFund(this._fund.Value)) { return new FailureResponse( MessageResourceManager.GetMessage("ERR_CAN_NOT_BUY_THIS_FUND_USER").Code , MessageResourceManager.GetMessage("ERR_CAN_NOT_BUY_THIS_FUND_USER").Text ); } //验证选手帐户余额是否不足 if (this._user.InsufficientBalance(this._amount)) { return new FailureResponse( MessageResourceManager.GetMessage("ERR_INSUFFICIENT_BALANCE").Code , MessageResourceManager.GetMessage("ERR_INSUFFICIENT_BALANCE").Text ); } //验证交易金额 SubscribeAmountValidationContext subscribeAmountValidationContext = new SubscribeAmountValidationContext(this._amount); SubscribeAmountValidator subscribeAmountValidator = ValidatorFactory.CreateSubscribeAmountValidator(subscribeAmountValidationContext); ValidationResult amountValidationResult = subscribeAmountValidator.Validate(); if (amountValidationResult.InValid) { return new FailureResponse( amountValidationResult.StatusCode , amountValidationResult.StatusText ); } //验证资产配置 AssetValidationContext assetValidationContext = new AssetValidationContext( new SubscribeUser() , this._fund , this._amount ); AssetValidator assetValidator = ValidatorFactory.CreateAssetValidator(assetValidationContext); ValidationResult assetValidationResult = assetValidator.Validate(); if (assetValidationResult.InValid) { return new FailureResponse( assetValidationResult.StatusCode , assetValidationResult.StatusText ); } //创建订单的持久化操作,此处略... return response; } }
|