public Dictionary <string, object> Add([FromBody] WaterAndElectricity waterAndE)
 {
     if (waterAndE.OwnerId == 0)
     {
         result["code"] = "failed";
         message.Add("必须选择一个业主");
     }
     else if (waterAndE.Quantity < waterAndE.LastQuantity)
     {
         result["code"] = "failed";
         message.Add("本月表量不能小于上月表量");
     }
     else
     {
         waterAndE.UserId       = user.UserId;
         waterAndE.OprationName = user.UserName;
         waterAndE.CreateTime   = Ricky.Common.NowDate;
         if (waterAndE.Status == 1)
         {
             waterAndE.PayTime = waterAndE.CreateTime;
             Owner owner = db.Owners.FirstOrDefault(w => w.OwnerId == waterAndE.OwnerId);
             waterAndE.PayerName = string.IsNullOrEmpty(owner.CheckInName) ? owner.OwnerName : owner.CheckInName;
         }
         db.WaterAndElectricities.Add(waterAndE);
         db.SaveChanges();
     }
     result["message"] = message;
     return(result);
 }
        public Dictionary <string, object> PreQuantity([FromBody] SearchModel model)
        {
            DateTime            startDate = DateTime.Parse(model.SearchDate.Value.AddMonths(-1).ToString("yyyy-MM") + "-01");
            DateTime            endDate   = startDate.AddMonths(1);
            WaterAndElectricity waterAndE = db.WaterAndElectricities.FirstOrDefault(w => w.OwnerId == model.FkId && w.FeeType == model.type && w.FeeDate >= startDate && w.FeeDate <endDate && w.Status> -1);

            if (waterAndE != null)
            {
                result["LastQuantity"] = waterAndE.Quantity;
            }
            else
            {
                result["LastQuantity"] = null;
            }
            return(result);
        }
 public Dictionary <string, object> Modify([FromBody] WaterAndElectricity waterAndE)
 {
     if (waterAndE.Quantity < waterAndE.LastQuantity)
     {
         result["code"] = "failed";
         message.Add("本月表量不能小于上月表量");
     }
     else
     {
         WaterAndElectricity newWaterAndE = db.WaterAndElectricities.FirstOrDefault(w => w.FeeId == waterAndE.FeeId);
         if (newWaterAndE.Status > -1)
         {
             newWaterAndE.ConfigId  = waterAndE.ConfigId;
             newWaterAndE.ReceiptNo = waterAndE.ReceiptNo;
             newWaterAndE.VoucherNo = waterAndE.VoucherNo;
             newWaterAndE.PayWay    = waterAndE.PayWay;
             newWaterAndE.Remark    = waterAndE.Remark;
             if (newWaterAndE.Status == 0)
             {
                 newWaterAndE.FeeDate      = waterAndE.FeeDate;
                 newWaterAndE.Quantity     = waterAndE.Quantity;
                 newWaterAndE.LastQuantity = waterAndE.LastQuantity;
                 newWaterAndE.Amount       = waterAndE.Amount;
             }
             if (newWaterAndE.Status == 0 && waterAndE.Status == 1)
             {
                 newWaterAndE.OprationName = user.UserName;
                 newWaterAndE.PayTime      = Ricky.Common.NowDate;
                 newWaterAndE.Status       = waterAndE.Status;
                 Owner owner = db.Owners.FirstOrDefault(w => w.OwnerId == newWaterAndE.OwnerId);
                 newWaterAndE.PayerName = string.IsNullOrEmpty(owner.CheckInName) ? owner.OwnerName : owner.CheckInName;
             }
             db.SaveChanges();
         }
         else
         {
             result["code"] = "failed";
             message.Add("此单已作废");
         }
     }
     result["message"] = message;
     return(result);
 }
        public Dictionary <string, object> Delete(int id)
        {
            WaterAndElectricity waterAndE = db.WaterAndElectricities.FirstOrDefault(w => w.FeeId == id);

            if (waterAndE.Status > -1)
            {
                if (waterAndE.Status == 1)
                {
                    waterAndE.PayTime = null;
                }
                waterAndE.Status = -1;
                db.SaveChanges();
            }
            else
            {
                result["code"] = "failed";
                message.Add("此单已作废");
            }
            result["message"] = message;
            return(result);
        }
        public async Task <HttpResponseMessage> Import()
        {
            if (!Request.Content.IsMimeMultipartContent())
            {
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }
            MultipartMemoryStreamProvider provider = await Request.Content.ReadAsMultipartAsync();

            HttpContent content = provider.Contents.First();
            Stream      stream  = await content.ReadAsStreamAsync();

            string    fileName = content.Headers.ContentDisposition.FileName.Trim('"');
            DataTable dt       = Excel.ExcelToDataTable(fileName, stream);

            dt.Columns.Add("导入状态");
            dt.Columns.Add("导入备注");
            foreach (DataRow dr in dt.Rows)
            {
                string EstateName = dr[0].ToString();
                if (!string.IsNullOrEmpty(EstateName))
                {
                    Estate estate = db.Estates.FirstOrDefault(w => w.EstateName == EstateName);
                    if (estate != null)
                    {
                        string HouseNo = dr[1].ToString();
                        House  house   = db.Houses.FirstOrDefault(w => w.EstateId == estate.EstateId && w.HouseNo == HouseNo);
                        if (house != null)
                        {
                            Owner owner = db.Owners.FirstOrDefault(w => w.HouseId == house.HouseId);
                            if (owner != null)
                            {
                                try
                                {
                                    WaterAndElectricity waterE = new WaterAndElectricity();
                                    waterE.OwnerId   = owner.OwnerId;
                                    waterE.PayerName = owner.CheckInName;
                                    waterE.UnitPrice = decimal.Parse(dr[5].ToString());
                                    waterE.FeeName   = dr[2].ToString();
                                    waterE.FeeType   = waterE.FeeName.Equals("水费") ? "water" : waterE.FeeName.Equals("电费") ? "electricity" : "";
                                    if (!string.IsNullOrEmpty(waterE.FeeType))
                                    {
                                        CostConfig config = db.CostConfigs.FirstOrDefault(w => w.EstateId == estate.EstateId && w.ConfigType == waterE.FeeType && w.UnitPrice == waterE.UnitPrice);
                                        if (config != null)
                                        {
                                            waterE.ConfigId = config.ConfigId;
                                        }
                                        waterE.CreateTime = DateTime.Now;
                                        DateTime PayTime = DateTime.MinValue;
                                        if (DateTime.TryParse(dr[3].ToString(), out PayTime))
                                        {
                                            waterE.PayTime = PayTime;
                                        }
                                        DateTime FeeDate = DateTime.MinValue;
                                        if (DateTime.TryParse(dr[4].ToString(), out PayTime))
                                        {
                                            waterE.FeeDate = PayTime;
                                        }
                                        waterE.UnitName     = dr[6].ToString();
                                        waterE.LastQuantity = double.Parse(dr[7].ToString());
                                        waterE.Quantity     = double.Parse(dr[8].ToString());
                                        waterE.Amount       = decimal.Parse(dr[9].ToString());
                                        waterE.ReceiptNo    = dr[10].ToString();
                                        waterE.VoucherNo    = dr[11].ToString();
                                        waterE.OprationName = dr[12].ToString();
                                        waterE.PayWay       = dr[13].ToString();
                                        waterE.Remark       = dr[14].ToString();
                                        waterE.Status       = dr[15].ToString().Equals("是") ? 1 : 0;
                                        if (db.WaterAndElectricities.Count(w => w.OwnerId == owner.OwnerId && w.LastQuantity == waterE.LastQuantity && w.Quantity == waterE.Quantity && w.FeeDate == waterE.FeeDate) == 0)
                                        {
                                            db.WaterAndElectricities.Add(waterE);
                                            db.SaveChanges();
                                            dr[16] = "成功";
                                            dr[17] = "新增";
                                        }
                                        else
                                        {
                                            WaterAndElectricity newWateE = db.WaterAndElectricities.First(w => w.OwnerId == owner.OwnerId && w.LastQuantity == waterE.LastQuantity && w.Quantity == waterE.Quantity && w.FeeDate == waterE.FeeDate);
                                            Ricky.ObjectCopy.Copy <WaterAndElectricity>(waterE, newWateE, new string[] { "FeeId", "PayerName", "UserId" });
                                            db.SaveChanges();
                                            dr[16] = "成功";
                                            dr[17] = "修改";
                                        }
                                    }
                                    else
                                    {
                                        dr[16] = "失败";
                                        dr[17] = "无法识别费用类型";
                                    }
                                }
                                catch (Exception e)
                                {
                                    dr[16] = "失败";
                                    dr[17] = e.Message;
                                }
                            }
                            else
                            {
                                dr[16] = "失败";
                                dr[17] = "没有找到业主";
                            }
                        }
                        else
                        {
                            dr[16] = "失败";
                            dr[17] = "沒有找到此房产";
                        }
                    }
                    else
                    {
                        dr[16] = "失败";
                        dr[17] = "沒有找到此小区";
                    }
                }
                else
                {
                    dr[16] = "失败";
                    dr[17] = "缺少所属小区名称";
                }
            }
            string fileSaveLocation = HttpContext.Current.Server.MapPath("~/upload/water-electricity");

            if (!Directory.Exists(fileSaveLocation))
            {
                Directory.CreateDirectory(fileSaveLocation);
            }
            string Name         = fileName.Substring(0, fileName.LastIndexOf('.'));
            Excel  excel        = new Excel(dt);
            string saveFileName = string.Format("{1}{2}.xlsx", fileSaveLocation, Name, DateTime.Now.ToString("yyyyMMddHHmmssfff"));

            excel.Save(fileSaveLocation + "\\" + saveFileName);
            return(Request.CreateResponse(HttpStatusCode.OK, new { Status = 1, filename = saveFileName }));
        }