Пример #1
0
        public CustomJsonResult ReturnPosMachine(int operater, MerchantPosMachine pMerchantPosMachine)
        {
            CustomJsonResult result = new CustomJsonResult();

            //todo 什么条件允许注销
            var merchantPosMachine = CurrentDb.MerchantPosMachine.Where(m => m.Id == pMerchantPosMachine.Id).FirstOrDefault();

            if (merchantPosMachine != null)
            {
                return(new CustomJsonResult(ResultType.Failure, "找不到要注销的POS机"));
            }

            if (merchantPosMachine.Status == Enumeration.MerchantPosMachineStatus.Normal || merchantPosMachine.Status == Enumeration.MerchantPosMachineStatus.Rentdue)
            {
                return(new CustomJsonResult(ResultType.Failure, "该POS的状态不允许注销"));
            }


            //posMachine.CreateTime = this.DateTime;
            //posMachine.Creator = operater;
            //posMachine.IsUse = false;
            //CurrentDb.PosMachine.Add(posMachine);
            //CurrentDb.SaveChanges();

            return(new CustomJsonResult(ResultType.Success, "登记成功"));
        }
        public CustomJsonResult Run()
        {
            CustomJsonResult result = new CustomJsonResult();


            int operater = 0;

            using (TransactionScope ts = new TransactionScope())
            {
                var posMachines = CurrentDb.PosMachine.Where(m => m.IsUse == false).ToList();

                Log.InfoFormat("准备生成商户账号{0}个", posMachines.Count());

                for (int i = 0; i < posMachines.Count; i++)
                {
                    var sysClientUser = new SysClientUser();
                    sysClientUser.UserName          = Guid.NewGuid().ToString().Replace("-", "");
                    sysClientUser.PasswordHash      = PassWordHelper.HashPassword("888888");
                    sysClientUser.SecurityStamp     = Guid.NewGuid().ToString();
                    sysClientUser.RegisterTime      = this.DateTime;
                    sysClientUser.CreateTime        = this.DateTime;
                    sysClientUser.Creator           = operater;
                    sysClientUser.ClientAccountType = Enumeration.ClientAccountType.MasterAccount;
                    sysClientUser.Status            = Enumeration.UserStatus.Normal;

                    CurrentDb.SysClientUser.Add(sysClientUser);
                    CurrentDb.SaveChanges();

                    var clientCode = CurrentDb.SysClientCode.Where(m => m.Id == sysClientUser.Id).FirstOrDefault();
                    if (clientCode == null)
                    {
                        Log.WarnFormat("生成商户账号{0}个", i + 1);
                        throw new Exception("客户代码已经用完,请马上生成客户代码");
                    }

                    sysClientUser.ClientCode = clientCode.Code;
                    sysClientUser.UserName   = clientCode.Code;

                    var merchant = new Merchant();
                    merchant.ClientCode = clientCode.Code;
                    merchant.UserId     = sysClientUser.Id;
                    merchant.CreateTime = this.DateTime;
                    merchant.Creator    = operater;
                    merchant.Status     = Enumeration.MerchantStatus.WaitFill;
                    CurrentDb.Merchant.Add(merchant);
                    CurrentDb.SaveChanges();

                    sysClientUser.MerchantId = merchant.Id;


                    posMachines[i].IsUse          = true;
                    posMachines[i].LastUpdateTime = this.DateTime;
                    posMachines[i].Mender         = operater;
                    CurrentDb.SaveChanges();

                    var bankCard = new BankCard();
                    bankCard.MerchantId = merchant.Id;
                    bankCard.UserId     = merchant.UserId;
                    bankCard.CreateTime = this.DateTime;
                    bankCard.Creator    = operater;
                    CurrentDb.BankCard.Add(bankCard);
                    CurrentDb.SaveChanges();

                    var merchantPosMachine = new MerchantPosMachine();
                    merchantPosMachine.PosMachineId = posMachines[i].Id;
                    merchantPosMachine.BankCardId   = bankCard.Id;
                    merchantPosMachine.UserId       = sysClientUser.Id;
                    merchantPosMachine.MerchantId   = merchant.Id;
                    merchantPosMachine.Status       = Enumeration.MerchantPosMachineStatus.NoActive;
                    merchantPosMachine.CreateTime   = this.DateTime;
                    merchantPosMachine.Creator      = operater;
                    merchantPosMachine.Deposit      = posMachines[i].Deposit;
                    merchantPosMachine.Rent         = posMachines[i].Rent;
                    CurrentDb.MerchantPosMachine.Add(merchantPosMachine);
                    CurrentDb.SaveChanges();

                    var fund = new Fund();
                    fund.UserId     = sysClientUser.Id;
                    fund.Arrearage  = 0;
                    fund.Balance    = 0;
                    fund.CreateTime = this.DateTime;
                    fund.Creator    = operater;
                    fund.MerchantId = merchant.Id;
                    CurrentDb.Fund.Add(fund);
                    CurrentDb.SaveChanges();



                    var orderToDepositRent = new OrderToDepositRent();
                    orderToDepositRent.MerchantId   = merchant.Id;
                    orderToDepositRent.PosMachineId = posMachines[i].Id;
                    orderToDepositRent.UserId       = sysClientUser.Id;
                    orderToDepositRent.CreateTime   = this.DateTime;
                    orderToDepositRent.Creator      = 0;
                    orderToDepositRent.SubmitTime   = this.DateTime;
                    orderToDepositRent.ProductType  = Enumeration.ProductType.PosMachineDepositRent;
                    orderToDepositRent.ProductName  = Enumeration.ProductType.PosMachineDepositRent.GetCnName();
                    orderToDepositRent.ProductId    = (int)Enumeration.ProductType.PosMachineDepositRent;

                    orderToDepositRent.Deposit = posMachines[i].Deposit;

                    CalculateRent calculateRent = new CalculateRent(merchantPosMachine.Rent);

                    orderToDepositRent.RentMonths  = 3;
                    orderToDepositRent.MonthlyRent = calculateRent.MonthlyRent;
                    orderToDepositRent.RentVersion = calculateRent.Version;
                    orderToDepositRent.RentTotal   = calculateRent.GetRent(orderToDepositRent.RentMonths);

                    orderToDepositRent.Price = posMachines[i].Deposit + orderToDepositRent.RentTotal;

                    orderToDepositRent.Status = Enumeration.OrderStatus.WaitPay;
                    CurrentDb.OrderToDepositRent.Add(orderToDepositRent);
                    CurrentDb.SaveChanges();
                    orderToDepositRent.Sn = Sn.Build(SnType.DepositRent, orderToDepositRent.Id);


                    CurrentDb.SaveChanges();

                    Log.InfoFormat("生成商户账号:{0},对应POS机DeviceId:{1}", clientCode.Code, posMachines[i].DeviceId);
                }

                ts.Complete();

                Log.InfoFormat("生成商户账号{0}个", posMachines.Count());
            }

            return(result);
        }
Пример #3
0
        public CustomJsonResult Confirm(int operater, PayConfirmModel model)
        {
            CustomJsonResult result = new CustomJsonResult();

            using (TransactionScope ts = new TransactionScope())
            {
                YiBanShiPayOrder   yOrder             = new YiBanShiPayOrder();
                YiBanShiOrderInfo  yOrderInfo         = new YiBanShiOrderInfo();
                MerchantPosMachine merchantPosMachine = null;
                CalculateRent      calculateRent      = null;
                YbsMerchantModel   ybs_mer            = null;
                switch (model.ProductType)
                {
                case Enumeration.ProductType.InsureForCarForInsure:
                case Enumeration.ProductType.InsureForCarForRenewal:

                    #region  投保和续保
                    var orderToCarInsure = CurrentDb.OrderToCarInsure.Where(m => m.Sn == model.OrderSn).FirstOrDefault();

                    var payCarInsureConfirmParams = Newtonsoft.Json.JsonConvert.DeserializeObject <PayCarInsureConfirmParams>(model.Params.ToString());


                    var orderToCarInsureOfferCompany = CurrentDb.OrderToCarInsureOfferCompany.Where(m => m.Id == payCarInsureConfirmParams.OfferId).FirstOrDefault();

                    orderToCarInsure.InsuranceCompanyId   = orderToCarInsureOfferCompany.InsuranceCompanyId;
                    orderToCarInsure.InsureImgUrl         = orderToCarInsureOfferCompany.InsureImgUrl;
                    orderToCarInsure.InsuranceCompanyName = orderToCarInsureOfferCompany.InsuranceCompanyName;
                    orderToCarInsure.InsuranceOrderId     = orderToCarInsureOfferCompany.InsuranceOrderId;
                    orderToCarInsure.CommercialPrice      = orderToCarInsureOfferCompany.CommercialPrice == null ? 0 : orderToCarInsureOfferCompany.CommercialPrice.Value;
                    orderToCarInsure.TravelTaxPrice       = orderToCarInsureOfferCompany.TravelTaxPrice == null ? 0 : orderToCarInsureOfferCompany.TravelTaxPrice.Value;
                    orderToCarInsure.CompulsoryPrice      = orderToCarInsureOfferCompany.CompulsoryPrice == null ? 0 : orderToCarInsureOfferCompany.CompulsoryPrice.Value;

                    orderToCarInsure.ShippingAddress = payCarInsureConfirmParams.ShippingAddress;
                    orderToCarInsure.Price           = orderToCarInsureOfferCompany.InsureTotalPrice.Value;

                    CurrentDb.SaveChanges();

                    var insuranceCompany = CurrentDb.InsuranceCompany.Where(m => m.Id == orderToCarInsureOfferCompany.InsuranceCompanyId).FirstOrDefault();


                    yOrder.prodcut   = orderToCarInsure.ProductName;
                    yOrder.transName = "消费";
                    yOrder.amount    = orderToCarInsure.Price.ToF2Price().Replace(".", "").PadLeft(12, '0');

                    yOrder.confirmField.Add(new OrderField("订单编号", orderToCarInsure.Sn.NullToEmpty()));
                    yOrder.confirmField.Add(new OrderField("保险公司", orderToCarInsure.InsuranceCompanyName.NullToEmpty()));
                    yOrder.confirmField.Add(new OrderField("车主姓名", orderToCarInsure.CarOwner.NullToEmpty()));
                    yOrder.confirmField.Add(new OrderField("车牌号码", orderToCarInsure.CarPlateNo.NullToEmpty()));
                    yOrder.confirmField.Add(new OrderField("支付金额", string.Format("{0}元", orderToCarInsure.Price.ToF2Price())));


                    yOrderInfo.order_no           = orderToCarInsure.Sn.NullToEmpty();
                    yOrderInfo.insurance_company  = orderToCarInsure.InsuranceCompanyName.NullToEmpty();
                    yOrderInfo.insurance_type     = "";
                    yOrderInfo.customer_id_type   = "01";
                    yOrderInfo.customer_id        = orderToCarInsure.CarOwnerIdNumber.NullToEmpty();
                    yOrderInfo.customer_sex       = "";
                    yOrderInfo.customer_name      = orderToCarInsure.CarOwner.NullToEmpty();
                    yOrderInfo.customer_mobile_no = "";
                    yOrderInfo.customer_birthdate = "";
                    yOrderInfo.insurance_order_no = orderToCarInsure.InsuranceOrderId.NullToEmpty();
                    yOrderInfo.car_type           = orderToCarInsure.CarVechicheType.NullToEmpty();
                    yOrderInfo.car_license        = orderToCarInsure.CarPlateNo.NullToEmpty();
                    yOrderInfo.car_frame_no       = "";
                    yOrderInfo.payer_id_type      = "";
                    yOrderInfo.payer_id           = "";
                    yOrderInfo.payer_name         = "";
                    yOrderInfo.payer_mobile_no    = "";
                    yOrderInfo.payer_address      = "";


                    ybs_mer = BizFactory.Ybs.GetCarInsureMerchantInfo(insuranceCompany.Id, insuranceCompany.YBS_MerchantId, insuranceCompany.YBS_MerchantCode);

                    yOrderInfo.ybs_mer_code = ybs_mer.ybs_mer_code;
                    yOrderInfo.merchant_id  = ybs_mer.merchant_id;

                    yOrderInfo.merchant_name = "";
                    yOrderInfo.phone_no      = "";
                    yOrderInfo.cashier_id    = "";
                    yOrderInfo.teller_id     = "45567";//暂定

                    yOrder.orderInfo = yOrderInfo;


                    result = new CustomJsonResult(ResultType.Success, ResultCode.Success, "确认成功", yOrder);
                    #endregion

                    break;

                case Enumeration.ProductType.InsureForCarForClaim:

                    #region 理赔
                    var orderToCarClaim = CurrentDb.OrderToCarClaim.Where(m => m.Sn == model.OrderSn).FirstOrDefault();


                    yOrder.prodcut   = orderToCarClaim.ProductName;
                    yOrder.transName = "消费";

                    yOrder.amount = orderToCarClaim.Price.ToF2Price().Replace(".", "").PadLeft(12, '0');

                    yOrder.confirmField.Add(new OrderField("订单编号", orderToCarClaim.Sn.NullToEmpty()));
                    yOrder.confirmField.Add(new OrderField("保险公司", orderToCarClaim.InsuranceCompanyName));
                    yOrder.confirmField.Add(new OrderField("车牌号码", orderToCarClaim.CarPlateNo));
                    yOrder.confirmField.Add(new OrderField("支付金额", string.Format("{0}元", orderToCarClaim.Price.NullToEmpty())));


                    yOrderInfo.order_no           = orderToCarClaim.Sn;
                    yOrderInfo.customer_id_type   = "";
                    yOrderInfo.customer_id        = "";
                    yOrderInfo.customer_sex       = "";
                    yOrderInfo.customer_name      = "";
                    yOrderInfo.customer_mobile_no = "";
                    yOrderInfo.customer_birthdate = "";
                    yOrderInfo.payer_id_type      = "";
                    yOrderInfo.payer_id           = "";
                    yOrderInfo.payer_name         = "";
                    yOrderInfo.payer_mobile_no    = "";
                    yOrderInfo.payer_address      = "";



                    ybs_mer = BizFactory.Ybs.GetCarClaimMerchantInfo();
                    yOrderInfo.ybs_mer_code = ybs_mer.ybs_mer_code;
                    yOrderInfo.merchant_id  = ybs_mer.merchant_id;



                    yOrderInfo.merchant_name = "";
                    yOrderInfo.phone_no      = "";
                    yOrderInfo.cashier_id    = "";
                    yOrderInfo.teller_id     = "";

                    yOrder.orderInfo = yOrderInfo;

                    result = new CustomJsonResult(ResultType.Success, ResultCode.Success, "确认成功", yOrder);
                    #endregion

                    break;

                case Enumeration.ProductType.PosMachineDepositRent:

                    #region 押金租金


                    var payDepositRentParams = Newtonsoft.Json.JsonConvert.DeserializeObject <PayDepositRentConfirmParams>(model.Params.ToString());

                    var orderToDepositRent = CurrentDb.OrderToDepositRent.Where(m => m.Sn == model.OrderSn).FirstOrDefault();

                    merchantPosMachine = CurrentDb.MerchantPosMachine.Where(m => m.MerchantId == orderToDepositRent.MerchantId && m.PosMachineId == orderToDepositRent.PosMachineId).FirstOrDefault();

                    calculateRent = new CalculateRent(merchantPosMachine.Rent);

                    orderToDepositRent.MonthlyRent = calculateRent.MonthlyRent;
                    orderToDepositRent.RentMonths  = payDepositRentParams.RentMonths;
                    orderToDepositRent.RentTotal   = calculateRent.GetRent(payDepositRentParams.RentMonths);
                    orderToDepositRent.RentVersion = calculateRent.Version;


                    orderToDepositRent.Price       = orderToDepositRent.Deposit + orderToDepositRent.RentTotal;
                    orderToDepositRent.RentDueDate = this.DateTime.AddMonths(payDepositRentParams.RentMonths);

                    yOrder.prodcut   = orderToDepositRent.ProductName;
                    yOrder.transName = "消费";
                    yOrder.amount    = orderToDepositRent.Price.ToF2Price().Replace(".", "").PadLeft(12, '0');

                    yOrder.confirmField.Add(new OrderField("订单编号", orderToDepositRent.Sn.NullToEmpty()));
                    yOrder.confirmField.Add(new OrderField("押金", string.Format("{0}元", orderToDepositRent.Deposit.ToF2Price())));
                    yOrder.confirmField.Add(new OrderField("租金", string.Format("{0}元", orderToDepositRent.RentTotal.ToF2Price())));
                    yOrder.confirmField.Add(new OrderField("到期时间", orderToDepositRent.RentDueDate.ToUnifiedFormatDate()));
                    yOrder.confirmField.Add(new OrderField("支付金额", string.Format("{0}元", orderToDepositRent.Price.NullToEmpty())));


                    yOrderInfo.order_no           = orderToDepositRent.Sn;
                    yOrderInfo.customer_id_type   = "";
                    yOrderInfo.customer_id        = "";
                    yOrderInfo.customer_sex       = "";
                    yOrderInfo.customer_name      = "";
                    yOrderInfo.customer_mobile_no = "";
                    yOrderInfo.customer_birthdate = "";
                    yOrderInfo.payer_id_type      = "";
                    yOrderInfo.payer_id           = "";
                    yOrderInfo.payer_name         = "";
                    yOrderInfo.payer_mobile_no    = "";
                    yOrderInfo.payer_address      = "";

                    ybs_mer = BizFactory.Ybs.GetDepositRentMerchantInfo();
                    yOrderInfo.ybs_mer_code = ybs_mer.ybs_mer_code;
                    yOrderInfo.merchant_id  = ybs_mer.merchant_id;


                    yOrderInfo.merchant_name = "";
                    yOrderInfo.phone_no      = "";
                    yOrderInfo.cashier_id    = "";
                    yOrderInfo.teller_id     = "";

                    yOrder.orderInfo = yOrderInfo;

                    result = new CustomJsonResult(ResultType.Success, ResultCode.Success, "确认成功", yOrder);
                    #endregion

                    break;

                case Enumeration.ProductType.PosMachineRent:

                    #region 租金

                    var orderToRent = CurrentDb.OrderToDepositRent.Where(m => m.Sn == model.OrderSn).FirstOrDefault();

                    var payRentParams = Newtonsoft.Json.JsonConvert.DeserializeObject <PayDepositRentConfirmParams>(model.Params.ToString());

                    merchantPosMachine = CurrentDb.MerchantPosMachine.Where(m => m.MerchantId == orderToRent.MerchantId && m.PosMachineId == orderToRent.PosMachineId).FirstOrDefault();

                    calculateRent = new CalculateRent(merchantPosMachine.Rent);

                    orderToRent.MonthlyRent = calculateRent.MonthlyRent;
                    orderToRent.RentMonths  = payRentParams.RentMonths;
                    orderToRent.RentTotal   = calculateRent.GetRent(payRentParams.RentMonths);
                    orderToRent.RentVersion = calculateRent.Version;
                    orderToRent.Price       = orderToRent.Deposit + orderToRent.RentTotal;
                    orderToRent.RentDueDate = merchantPosMachine.RentDueDate.Value.AddMonths(payRentParams.RentMonths);

                    yOrderInfo.order_no = orderToRent.Sn;
                    yOrder.transName    = "消费";
                    yOrder.amount       = orderToRent.Price.ToF2Price().Replace(".", "").PadLeft(12, '0');

                    yOrder.confirmField.Add(new OrderField("订单编号", orderToRent.Sn.NullToEmpty()));
                    yOrder.confirmField.Add(new OrderField("租金", string.Format("{0}元", orderToRent.RentTotal.ToF2Price())));
                    yOrder.confirmField.Add(new OrderField("续期", string.Format("{0}个月", payRentParams.RentMonths)));
                    yOrder.confirmField.Add(new OrderField("到期时间", orderToRent.RentDueDate.ToUnifiedFormatDate()));
                    yOrder.confirmField.Add(new OrderField("支付金额", string.Format("{0}元", orderToRent.Price.NullToEmpty())));


                    yOrderInfo.order_no           = orderToRent.Sn;
                    yOrderInfo.customer_id_type   = "";
                    yOrderInfo.customer_id        = "";
                    yOrderInfo.customer_sex       = "";
                    yOrderInfo.customer_name      = "";
                    yOrderInfo.customer_mobile_no = "";
                    yOrderInfo.customer_birthdate = "";
                    yOrderInfo.payer_id_type      = "";
                    yOrderInfo.payer_id           = "";
                    yOrderInfo.payer_name         = "";
                    yOrderInfo.payer_mobile_no    = "";
                    yOrderInfo.payer_address      = "";

                    ybs_mer = BizFactory.Ybs.GetDepositRentMerchantInfo();
                    yOrderInfo.ybs_mer_code = ybs_mer.ybs_mer_code;
                    yOrderInfo.merchant_id  = ybs_mer.merchant_id;


                    yOrderInfo.merchant_name = "";
                    yOrderInfo.phone_no      = "";
                    yOrderInfo.cashier_id    = "";
                    yOrderInfo.teller_id     = "";

                    yOrder.orderInfo = yOrderInfo;

                    result = new CustomJsonResult(ResultType.Success, ResultCode.Success, "确认成功", yOrder);
                    #endregion

                    break;
                }

                CurrentDb.SaveChanges();
                ts.Complete();
            }

            return(result);
        }
Пример #4
0
        public CustomJsonResult OpenAccount(int operater, Merchant merchant, MerchantPosMachine merchantPosMachine, BankCard bankCard)
        {
            CustomJsonResult result = new CustomJsonResult();

            using (TransactionScope ts = new TransactionScope())
            {
                var sysClientUser = new SysClientUser();
                sysClientUser.UserName          = Guid.NewGuid().ToString().Replace("-", "");
                sysClientUser.PasswordHash      = PassWordHelper.HashPassword("888888");
                sysClientUser.SecurityStamp     = Guid.NewGuid().ToString();
                sysClientUser.RegisterTime      = this.DateTime;
                sysClientUser.CreateTime        = this.DateTime;
                sysClientUser.Creator           = operater;
                sysClientUser.ClientAccountType = Enumeration.ClientAccountType.MasterAccount;
                sysClientUser.Status            = Enumeration.UserStatus.Normal;

                CurrentDb.SysClientUser.Add(sysClientUser);
                CurrentDb.SaveChanges();

                var clientCode = CurrentDb.SysClientCode.Where(m => m.Id == sysClientUser.Id).FirstOrDefault();
                if (clientCode == null)
                {
                    return(new CustomJsonResult(ResultType.Failure, "开户失败,原因获取不到商户代码 "));
                }

                sysClientUser.ClientCode = clientCode.Code;
                sysClientUser.UserName   = clientCode.Code;

                merchant.ClientCode = clientCode.Code;
                merchant.UserId     = sysClientUser.Id;

                if (string.IsNullOrEmpty(merchant.Area))
                {
                    merchant.Area     = null;
                    merchant.AreaCode = null;
                }


                merchant.CreateTime = this.DateTime;
                merchant.Creator    = operater;
                merchant.Status     = Enumeration.MerchantStatus.WaitFill;
                CurrentDb.Merchant.Add(merchant);
                CurrentDb.SaveChanges();

                sysClientUser.MerchantId = merchant.Id;


                var posMachine = CurrentDb.PosMachine.Where(m => m.Id == merchantPosMachine.PosMachineId).FirstOrDefault();
                if (posMachine == null)
                {
                    return(new CustomJsonResult(ResultType.Failure, "开户失败,找不到POS机"));
                }

                if (posMachine.IsUse)
                {
                    return(new CustomJsonResult(ResultType.Failure, "开户失败,POS机已经被使用"));
                }

                posMachine.IsUse          = true;
                posMachine.LastUpdateTime = this.DateTime;
                posMachine.Mender         = operater;
                CurrentDb.SaveChanges();

                bankCard.MerchantId = merchant.Id;
                bankCard.UserId     = merchant.UserId;
                bankCard.CreateTime = this.DateTime;
                bankCard.Creator    = operater;
                CurrentDb.BankCard.Add(bankCard);
                CurrentDb.SaveChanges();

                merchantPosMachine.BankCardId = bankCard.Id;
                merchantPosMachine.UserId     = sysClientUser.Id;
                merchantPosMachine.MerchantId = merchant.Id;
                merchantPosMachine.Status     = Enumeration.MerchantPosMachineStatus.NoActive;
                merchantPosMachine.CreateTime = this.DateTime;
                merchantPosMachine.Creator    = operater;
                merchantPosMachine.Deposit    = posMachine.Deposit;
                merchantPosMachine.Rent       = posMachine.Rent;
                CurrentDb.MerchantPosMachine.Add(merchantPosMachine);


                Fund fund = new Fund();
                fund.UserId     = sysClientUser.Id;
                fund.Arrearage  = 0;
                fund.Balance    = 0;
                fund.CreateTime = this.DateTime;
                fund.Creator    = operater;
                fund.MerchantId = merchant.Id;
                CurrentDb.Fund.Add(fund);

                //暂定在这里开启
                BizFactory.BizProcessesAudit.Add(operater, Enumeration.BizProcessesAuditType.MerchantAudit, merchant.Id, Enumeration.MerchantAuditStatus.WaitPrimaryAudit, "");


                CurrentDb.SaveChanges();
                ts.Complete();

                result = new CustomJsonResult(ResultType.Success, "开户成功");
            }

            return(result);
        }
        public CustomJsonResult CreateAccount(int operater, string token, string validCode, string userName, string password, string deviceId)
        {
            CustomJsonResult result = new CustomJsonResult();

            using (TransactionScope ts = new TransactionScope())
            {
                var code = CurrentDb.SysSmsSendHistory.Where(m => m.Token == token && m.ValidCode == validCode && m.IsUse == false && m.ExpireTime >= DateTime.Now).FirstOrDefault();
                if (code == null)
                {
                    return(new CustomJsonResult(ResultType.Failure, "验证码错误"));
                }

                code.IsUse = true;

                var isExists = CurrentDb.SysUser.Where(m => m.UserName == userName).FirstOrDefault();

                if (isExists != null)
                {
                    return(new CustomJsonResult(ResultType.Failure, "账号已经存在"));
                }

                var sysClientUser = new SysClientUser();
                sysClientUser.UserName          = userName;
                sysClientUser.PhoneNumber       = userName;
                sysClientUser.PasswordHash      = PassWordHelper.HashPassword(password);
                sysClientUser.SecurityStamp     = Guid.NewGuid().ToString();
                sysClientUser.RegisterTime      = this.DateTime;
                sysClientUser.CreateTime        = this.DateTime;
                sysClientUser.Creator           = operater;
                sysClientUser.ClientAccountType = Enumeration.ClientAccountType.MasterAccount;
                sysClientUser.Status            = Enumeration.UserStatus.Normal;
                sysClientUser.Type = Enumeration.UserType.Client;

                CurrentDb.SysClientUser.Add(sysClientUser);
                CurrentDb.SaveChanges();

                var clientCode = CurrentDb.SysClientCode.Where(m => m.Id == sysClientUser.Id).FirstOrDefault();

                var merchant = new Merchant();
                merchant.ClientCode = clientCode.Code;
                merchant.UserId     = sysClientUser.Id;
                merchant.CreateTime = this.DateTime;
                merchant.Creator    = operater;
                merchant.Status     = Enumeration.MerchantStatus.WaitFill;
                CurrentDb.Merchant.Add(merchant);
                CurrentDb.SaveChanges();

                sysClientUser.ClientCode = clientCode.Code;
                sysClientUser.MerchantId = merchant.Id;

                var posMachine = CurrentDb.PosMachine.Where(m => m.DeviceId == deviceId).FirstOrDefault();

                if (posMachine == null)
                {
                    return(new CustomJsonResult(ResultType.Failure, "POS机未登记,请联系客服"));

                    //posMachine = new PosMachine();
                    //posMachine.DeviceId = deviceId;
                    //posMachine.Creator = operater;
                    //posMachine.CreateTime = this.DateTime;
                    //CurrentDb.PosMachine.Add(posMachine);
                    //CurrentDb.SaveChanges();
                }
                else
                {
                    if (posMachine.IsUse)
                    {
                        return(new CustomJsonResult(ResultType.Failure, "POS机已被注册"));
                    }

                    if (posMachine.SalesmanId == null)
                    {
                        return(new CustomJsonResult(ResultType.Failure, "POS机未出库,请联系客服"));
                    }

                    posMachine.IsUse          = false;
                    posMachine.Mender         = operater;
                    posMachine.LastUpdateTime = this.DateTime;
                    CurrentDb.SaveChanges();
                }

                var bankCard = new BankCard();
                bankCard.MerchantId = merchant.Id;
                bankCard.UserId     = merchant.UserId;
                bankCard.CreateTime = this.DateTime;
                bankCard.Creator    = operater;
                CurrentDb.BankCard.Add(bankCard);
                CurrentDb.SaveChanges();

                CalculateServiceFee calculateServiceFee = new CalculateServiceFee();

                var merchantPosMachine = new MerchantPosMachine();
                merchantPosMachine.BankCardId       = bankCard.Id;
                merchantPosMachine.UserId           = sysClientUser.Id;
                merchantPosMachine.MerchantId       = merchant.Id;
                merchantPosMachine.PosMachineId     = posMachine.Id;
                merchantPosMachine.Deposit          = calculateServiceFee.Deposit;
                merchantPosMachine.MobileTrafficFee = calculateServiceFee.MobileTrafficFee;
                merchantPosMachine.Status           = Enumeration.MerchantPosMachineStatus.NoActive;
                merchantPosMachine.CreateTime       = this.DateTime;
                merchantPosMachine.Creator          = operater;
                CurrentDb.MerchantPosMachine.Add(merchantPosMachine);
                CurrentDb.SaveChanges();

                var orderToServiceFee = new OrderToServiceFee();
                orderToServiceFee.MerchantId       = merchant.Id;
                orderToServiceFee.PosMachineId     = posMachine.Id;
                orderToServiceFee.UserId           = sysClientUser.Id;
                orderToServiceFee.SubmitTime       = this.DateTime;
                orderToServiceFee.Type             = Enumeration.OrderType.PosMachineServiceFee;
                orderToServiceFee.TypeName         = Enumeration.OrderType.PosMachineServiceFee.GetCnName();
                orderToServiceFee.Deposit          = calculateServiceFee.Deposit;
                orderToServiceFee.MobileTrafficFee = calculateServiceFee.MobileTrafficFee;
                orderToServiceFee.PriceVersion     = calculateServiceFee.Version;
                orderToServiceFee.Price            = calculateServiceFee.Deposit + calculateServiceFee.MobileTrafficFee;
                orderToServiceFee.Status           = Enumeration.OrderStatus.WaitPay;
                orderToServiceFee.CreateTime       = this.DateTime;
                orderToServiceFee.Creator          = operater;
                CurrentDb.OrderToServiceFee.Add(orderToServiceFee);
                CurrentDb.SaveChanges();

                SnModel snModel = Sn.Build(SnType.OrderToServiceFee, orderToServiceFee.Id);
                orderToServiceFee.Sn = snModel.Sn;
                orderToServiceFee.TradeSnByWechat = snModel.TradeSnByWechat;
                orderToServiceFee.TradeSnByAlipay = snModel.TradeSnByAlipay;



                var sysItemCacheUpdateTime = new SysItemCacheUpdateTime();

                sysItemCacheUpdateTime.Name           = sysClientUser.UserName;
                sysItemCacheUpdateTime.Type           = Enumeration.SysItemCacheType.User;
                sysItemCacheUpdateTime.ReferenceId    = sysClientUser.Id;
                sysItemCacheUpdateTime.Creator        = operater;
                sysItemCacheUpdateTime.CreateTime     = this.DateTime;
                sysItemCacheUpdateTime.Mender         = operater;
                sysItemCacheUpdateTime.LastUpdateTime = this.DateTime;

                CurrentDb.SysItemCacheUpdateTime.Add(sysItemCacheUpdateTime);
                CurrentDb.SaveChanges();


                var fund = new Fund();

                fund.UserId     = sysClientUser.Id;
                fund.MerchantId = merchant.Id;
                fund.Balance    = 0;
                fund.Creator    = operater;
                fund.CreateTime = this.DateTime;
                CurrentDb.Fund.Add(fund);
                CurrentDb.SaveChanges();


                var lllegalQueryScore = new LllegalQueryScore();
                lllegalQueryScore.UserId     = sysClientUser.Id;
                lllegalQueryScore.MerchantId = merchant.Id;
                lllegalQueryScore.Score      = 50;
                lllegalQueryScore.Creator    = operater;
                lllegalQueryScore.CreateTime = this.DateTime;
                CurrentDb.LllegalQueryScore.Add(lllegalQueryScore);
                CurrentDb.SaveChanges();


                var lllegalQueryScoreTrans = new LllegalQueryScoreTrans();
                lllegalQueryScoreTrans.UserId      = sysClientUser.Id;
                lllegalQueryScoreTrans.ChangeScore = lllegalQueryScore.Score;
                lllegalQueryScoreTrans.Score       = lllegalQueryScore.Score;
                lllegalQueryScoreTrans.Type        = Enumeration.LllegalQueryScoreTransType.IncreaseByInit;
                lllegalQueryScoreTrans.Description = string.Format("初始违章查询积分:{0}", lllegalQueryScore.Score);
                lllegalQueryScoreTrans.Creator     = operater;
                lllegalQueryScoreTrans.CreateTime  = this.DateTime;
                CurrentDb.LllegalQueryScoreTrans.Add(lllegalQueryScoreTrans);
                CurrentDb.SaveChanges();
                lllegalQueryScoreTrans.Sn = Sn.Build(SnType.LllegalQueryScoreTrans, lllegalQueryScoreTrans.Id).Sn;
                CurrentDb.SaveChanges();


                ts.Complete();

                result = new CustomJsonResult(ResultType.Success, "注册成功");
            }

            return(result);
        }