public BaseResponse <ServiceOrderModel> SaveOrder(ServiceOrderModel request)
        {
            var response     = new BaseResponse <ServiceOrderModel>();
            var responseData = new List <ServiceOrderModel>();
            var serviceItemCategoryRepository     = unitOfWork.GetRepository <DC_ServiceItemCategory>();
            var serviceOrderRepository            = unitOfWork.GetRepository <DC_ServiceOrder>();
            var serOrdSerItRepository             = unitOfWork.GetRepository <DC_SerOrdSerIt>();
            var serviceItemRepository             = unitOfWork.GetRepository <DC_ServiceItem>();
            var residentServicePlanItemRepository = unitOfWork.GetRepository <DC_ResidentServicePlanItem>();
            var orderCItemRepository = unitOfWork.GetRepository <DC_OrderCItem>();

            int?servicePlantItemID = null;

            unitOfWork.BeginTransaction();
            //套餐预约时,需扣除套餐内次数
            if (request.OrderType == Enum.GetName(typeof(OrderType), OrderType.Group))
            {
                var nowDate         = DateTime.Now;
                var servicePlanItem = new DC_ResidentServicePlanItem();
                if (request.ResidentServicePlanItemID.HasValue)
                {
                    var servicePlanRepository = from a in unitOfWork.GetRepository <DC_ResidentServicePlan>().dbSet.Where(a => a.ResidentID == request.ResidentID && a.SStartDate <= nowDate && a.SEndDate >= nowDate)
                                                join b in unitOfWork.GetRepository <DC_ResidentServicePlanItem>().dbSet.Where(a => a.RestTimes > 0 && a.ResidentServicePlanItemID == request.ResidentServicePlanItemID) on a.ResidentServicePlanID equals b.ResidentServicePlanID
                                                select b;
                    servicePlanItem = servicePlanRepository.FirstOrDefault();
                }
                else
                {
                    var servicePlanRepository = from a in unitOfWork.GetRepository <DC_ResidentServicePlan>().dbSet.Where(a => a.ResidentID == request.ResidentID && a.SStartDate <= nowDate && a.SEndDate >= nowDate)
                                                join b in unitOfWork.GetRepository <DC_ResidentServicePlanItem>().dbSet.Where(a => a.RestTimes > 0 && a.ServiceItemID == request.ServiceItemID) on a.ResidentServicePlanID equals b.ResidentServicePlanID
                                                select b;
                    servicePlanItem = servicePlanRepository.FirstOrDefault();
                }

                if (servicePlanItem != null)
                {
                    servicePlantItemID         = servicePlanItem.ResidentServicePlanItemID;
                    servicePlanItem.RestTimes -= 1;
                    residentServicePlanItemRepository.Update(servicePlanItem);
                }
                else
                {
                    response.IsSuccess     = false;
                    response.ResultMessage = "该项目的套餐内服务次数已经用完。";
                    return(response);
                }
            }

            var serviceOrder = serviceOrderRepository.dbSet.FirstOrDefault((q) => q.ServiceOrderID == request.ServiceOrderID);

            if (serviceOrder == null)
            {
                serviceOrder = Mapper.DynamicMap <DC_ServiceOrder>(request);
                serviceOrder.ServiceOrderID = int.Parse(base.GeneratePrimaryKeyValue(EnumCodeKey.ServiceOrder));
                if (String.IsNullOrEmpty(serviceOrder.SONo))
                {
                    serviceOrder.SONo = base.GeneratePrimaryKeyValue(EnumCodeKey.ServiceOrderCode);
                }
                serviceOrder.PaymentStatus = Enum.GetName(typeof(PaymentStatus), PaymentStatus.Unpaid);
                serviceOrder.OrderStatus   = Enum.GetName(typeof(OrderStatus), OrderStatus.Wait);
                if (request.OrderType == Enum.GetName(typeof(OrderType), OrderType.Group))
                {
                    serviceOrder.ResidentServicePlanItemID = servicePlantItemID;
                }
                serviceOrder.CreatedTime  = DateTime.Now;
                serviceOrder.ModifiedTime = DateTime.Now;
                serviceOrderRepository.Insert(serviceOrder);
            }
            else
            {
                Mapper.DynamicMap(request, serviceOrder);
                serviceOrder.ModifiedTime = DateTime.Now;
                serviceOrderRepository.Update(serviceOrder);
            }

            if (request.ServiceOrderID == 0)
            {
                if (request.OrderType == Enum.GetName(typeof(OrderType), OrderType.Commodity))
                {
                    if (request.CommodityItems != null)
                    {
                        request.CommodityItems.ForEach(a =>
                        {
                            var orderCItem            = Mapper.DynamicMap <DC_OrderCItem>(a);
                            orderCItem.ServiceOrderID = serviceOrder.ServiceOrderID;
                            orderCItem.CreatedTime    = DateTime.Now;
                            orderCItem.ModifiedTime   = DateTime.Now;
                            orderCItemRepository.Insert(orderCItem);
                        });
                    }
                }
                else
                {
                    var serviceItem = serviceItemRepository.Get(request.ServiceItemID);
                    if (serviceItem != null)
                    {
                        var serOrdSerIt = Mapper.DynamicMap <DC_SerOrdSerIt>(serviceItem);
                        serOrdSerIt.ServiceOrderID = serviceOrder.ServiceOrderID;
                        serOrdSerIt.CreatedTime    = DateTime.Now;
                        serOrdSerIt.ModifiedTime   = DateTime.Now;
                        serOrdSerItRepository.Insert(serOrdSerIt);
                    }
                    else
                    {
                        response.IsSuccess     = false;
                        response.ResultMessage = "该项目不存在。";
                        return(response);
                    }
                }
            }

            unitOfWork.Commit();
            response.Data = Mapper.DynamicMap <ServiceOrderModel>(serviceOrder);

            return(response);
        }
        public BaseResponse SaveResidentServicePlan(ServiceGroupOrderModel request)
        {
            BaseResponse         response                          = new BaseResponse();
            var                  depositRepository                 = unitOfWork.GetRepository <DC_Deposit>();
            var                  serviceGroupRepository            = unitOfWork.GetRepository <DC_ServiceGroup>();
            var                  serviceOrderRepository            = unitOfWork.GetRepository <DC_ServiceOrder>();
            var                  residentServicePlanRepository     = unitOfWork.GetRepository <DC_ResidentServicePlan>();
            var                  residentServicePlanItemRepository = unitOfWork.GetRepository <DC_ResidentServicePlanItem>();
            var                  feeDetailRepository               = unitOfWork.GetRepository <DC_FeeDetail>();
            IServiceGroupService grpService                        = KM.Common.IOCContainer.Instance.Resolve <IServiceGroupService>();

            var serviceGroup = grpService.GetServiceGroup(request.ServiceGroupID);

            var deposit = depositRepository.dbSet.FirstOrDefault(it => it.ResidentID == request.ResidentID);

            if (serviceGroup.Data.SumPrice > 0)
            {
                if (deposit != null)
                {
                    var remainingMoney = deposit.Amount - deposit.TotalConSpeMonth;
                    if (serviceGroup.Data.SumPrice > remainingMoney)
                    {
                        response.IsSuccess = false;
                    }
                }
                else
                {
                    response.IsSuccess = false;
                }
            }

            if (!response.IsSuccess)
            {
                response.ResultMessage = "账户期初余额不足,请充值后完成操作";
                return(response);
            }

            unitOfWork.BeginTransaction();
            // 扣钱
            if (serviceGroup.Data.SumPrice > 0)
            {
                deposit.TotalConSpeMonth = deposit.TotalConSpeMonth + serviceGroup.Data.SumPrice;
                depositRepository.Update(deposit);
            }

            if (serviceGroup.Data != null && serviceGroup.Data.GroupItems != null)
            {
                var residentServicePlan = new DC_ResidentServicePlan();
                residentServicePlan.ResidentID     = request.ResidentID;
                residentServicePlan.ServiceGroupID = serviceGroup.Data.ServiceGroupID;
                residentServicePlan.SGNo           = serviceGroup.Data.SGNo;
                residentServicePlan.SGName         = serviceGroup.Data.SGName;
                residentServicePlan.SumPrice       = serviceGroup.Data.SumPrice;
                residentServicePlan.Remark         = serviceGroup.Data.Remark;
                residentServicePlan.Description    = serviceGroup.Data.Description;
                residentServicePlan.SStartDate     = DateTime.Now;
                if (serviceGroup.Data.ExpiryDate.HasValue)
                {
                    if (serviceGroup.Data.ExpiryUnit == Enum.GetName(typeof(EnumPeriod), EnumPeriod.Day))
                    {
                        residentServicePlan.SEndDate = DateTime.Now.AddDays(serviceGroup.Data.ExpiryDate.Value);
                    }
                    else
                    {
                        residentServicePlan.SEndDate = DateTime.Now.AddMonths(serviceGroup.Data.ExpiryDate.Value);
                    }
                }
                else
                {
                    residentServicePlan.SEndDate = DateTime.Now.AddMonths(1200);
                }
                residentServicePlan.CreatedTime  = DateTime.Now;
                residentServicePlan.ModifiedTime = DateTime.Now;
                serviceGroup.Data.GroupItems.ForEach(it => {
                    var residentServicePlanItem           = new DC_ResidentServicePlanItem();
                    residentServicePlanItem.ServiceItemID = it.ServiceItemID;
                    residentServicePlanItem.SINo          = it.SINo;
                    residentServicePlanItem.SIName        = it.SIName;
                    residentServicePlanItem.SIType        = it.SIType;
                    residentServicePlanItem.ServiceTimes  = it.ServiceTimes.Value;
                    residentServicePlanItem.RestTimes     = it.ServiceTimes.Value;
                    residentServicePlanItem.Remark        = it.Remark;
                    residentServicePlanItem.CreatedTime   = DateTime.Now;
                    residentServicePlanItem.ModifiedTime  = DateTime.Now;
                    residentServicePlan.DC_ResidentServicePlanItem.Add(residentServicePlanItem);
                });

                residentServicePlanRepository.Insert(residentServicePlan);

                var feeDetail = new DC_FeeDetail();
                feeDetail.FeeNo      = base.GenerateCode(EnumCodeKey.FeeDetailCode, EnumCodeRule.YearMonthDay, "F", 6, serviceGroup.Data.OrganizationID);
                feeDetail.FeeName    = serviceGroup.Data.SGName;
                feeDetail.TotalPrice = -serviceGroup.Data.SumPrice;
                feeDetail.FeeDate    = DateTime.Now;
                feeDetail.ResidentID = request.ResidentID;
                feeDetailRepository.Insert(feeDetail);
            }
            unitOfWork.Commit();
            return(response);
        }