public Result DeleteSpotCheckDevice([FromBody] SpotCheckDeviceBindPlan spotCheckDeviceBindPlan)
        {
            ServerConfig.ApiDb.Execute(
                "UPDATE `spot_check_device_bind` SET `MarkedDateTime`= @MarkedDateTime, `MarkedDelete`= @MarkedDelete WHERE `DeviceId` = @DeviceId AND `PlanId` = @PlanId;",
                spotCheckDeviceBindPlan.DeviceList.Select(x => new
            {
                MarkedDateTime = DateTime.Now,
                MarkedDelete   = true,
                DeviceId       = x,
                PlanId         = spotCheckDeviceBindPlan.PlanId
            }));

            ServerConfig.ApiDb.Execute(
                "UPDATE `spot_check_device` SET `MarkedDateTime`= @MarkedDateTime, `MarkedDelete`= @MarkedDelete WHERE `DeviceId` = @DeviceId AND `PlanId` = @PlanId;",
                spotCheckDeviceBindPlan.DeviceList.Select(x => new
            {
                MarkedDateTime = DateTime.Now,
                MarkedDelete   = true,
                DeviceId       = x,
                PlanId         = spotCheckDeviceBindPlan.PlanId
            }));

            return(Result.GenError <Result>(Error.Success));
        }
        public Result PostSpotCheckDevice([FromBody] SpotCheckDeviceBindPlan spotCheckDeviceBindPlan)
        {
            var cnt =
                ServerConfig.ApiDb.Query <int>("SELECT COUNT(1) FROM `spot_check_plan` WHERE Id = @PlanId AND `MarkedDelete` = 0;", new { spotCheckDeviceBindPlan.PlanId }).FirstOrDefault();

            if (cnt == 0)
            {
                return(Result.GenError <Result>(Error.SpotCheckPlanNotExist));
            }

            var checkDeviceBinds =
                ServerConfig.ApiDb.Query <SpotCheckDeviceBind>("SELECT * FROM `spot_check_device_bind` WHERE PlanId = @PlanId AND MarkedDelete = 0;", new { spotCheckDeviceBindPlan.PlanId });
            var createUserId   = Request.GetIdentityInformation();
            var markedDateTime = DateTime.Now;

            #region 更新
            var oldDevice = spotCheckDeviceBindPlan.DeviceList.Where(x => checkDeviceBinds.Any(y => y.DeviceId == x && y.PlanId == spotCheckDeviceBindPlan.PlanId));
            if (oldDevice.Any())
            {
                var data = ServerConfig.ApiDb.Query <SpotCheckDevice>("SELECT * FROM `spot_check_device` WHERE MarkedDelete = 0 AND PlanId = @PlanId AND DeviceId IN @oldDevice;",
                                                                      new { spotCheckDeviceBindPlan.PlanId, oldDevice });
                foreach (var spotCheckDevice in spotCheckDeviceBindPlan.SpotCheckDevices)
                {
                    var a = data.Where(x => x.ItemId == spotCheckDevice.ItemId).ToList();
                    foreach (var d in a)
                    {
                        if (d != null && d.SurveyorId != spotCheckDevice.SurveyorId)
                        {
                            d.SurveyorId     = spotCheckDevice.SurveyorId;
                            d.MarkedDateTime = markedDateTime;
                        }
                    }
                }

                ServerConfig.ApiDb.Execute("UPDATE spot_check_device SET `MarkedDateTime` = @MarkedDateTime, `MarkedDelete` = @MarkedDelete, `DeviceId` = @DeviceId, `ItemId` = @ItemId, " +
                                           "`PlanId` = @PlanId, `SurveyorId` = @SurveyorId, `PlannedTime` = @PlannedTime WHERE `Id` = @Id;", data);
            }

            #endregion

            #region 添加
            var newDevice = spotCheckDeviceBindPlan.DeviceList.Where(x => checkDeviceBinds.All(y => !(y.DeviceId == x && y.PlanId == spotCheckDeviceBindPlan.PlanId)));
            if (newDevice.Any())
            {
                ServerConfig.ApiDb.Execute("INSERT INTO spot_check_device_bind (`CreateUserId`, `MarkedDateTime`, `DeviceId`, `PlanId`) " +
                                           "VALUES (@CreateUserId, @MarkedDateTime, @DeviceId, @PlanId);", newDevice.Select(x => new SpotCheckDeviceBind
                {
                    CreateUserId   = createUserId,
                    MarkedDateTime = markedDateTime,
                    DeviceId       = x,
                    PlanId         = spotCheckDeviceBindPlan.PlanId
                }));

                var items = ServerConfig.ApiDb.Query <SpotCheckItem>(
                    "SELECT * FROM `spot_check_item` WHERE PlanId = @PlanId AND `MarkedDelete` = 0 AND `Enable` = 1;", new { spotCheckDeviceBindPlan.PlanId });

                var addList = new List <SpotCheckDevice>();
                foreach (var device in newDevice)
                {
                    foreach (var item in items)
                    {
                        var time = default(DateTime);
                        switch (item.Interval)
                        {
                        case IntervalEnum.Day:
                            time = markedDateTime.Date.AddDays(item.Day).AddMonths(item.Month).AddHours(item.NormalHour);
                            break;

                        case IntervalEnum.Week:
                            time = markedDateTime.Date.AddDays(item.Week * 7).AddHours(item.WeekHour);
                            break;
                        }
                        addList.Add(new SpotCheckDevice
                        {
                            CreateUserId   = createUserId,
                            MarkedDateTime = markedDateTime,
                            DeviceId       = device,
                            ItemId         = item.Id,
                            PlanId         = item.PlanId,
                            SurveyorId     = spotCheckDeviceBindPlan.SpotCheckDevices.FirstOrDefault(x => x.ItemId == item.Id)?.SurveyorId ?? 0,
                            PlannedTime    = time
                        });
                    }
                }
                ServerConfig.ApiDb.Execute("INSERT INTO spot_check_device (`CreateUserId`, `MarkedDateTime`, `DeviceId`, `ItemId`, `PlanId`, `SurveyorId`, `PlannedTime`) " +
                                           "VALUES (@CreateUserId, @MarkedDateTime, @DeviceId, @ItemId, @PlanId, @SurveyorId, @PlannedTime);", addList);
            }
            #endregion
            return(Result.GenError <Result>(Error.Success));
        }