private ConstructionPlanMonthDetail GetCommonProperty(ConstructionPlanMonth item, int month,
                                                              ConstructionPlanImportCommon cpic, AllQuery all, DateTime dtNow, string planDate, ref DataTable dt, ref DataTable dtChart)
        {
            ConstructionPlanMonthDetail c = new ConstructionPlanMonthDetail();

            #region 通用属性
            c.Line         = cpic.Line;
            c.Month        = month;
            c.WorkType     = 112;//默认委外维护
            c.WorkTypeName = all.workType.Where(a => a.ID == c.WorkType).FirstOrDefault().Name;
            c.EqpType      = item.Code;
            c.EqpTypeName  = item.EqpTypeName;
            c.Location     = item.Location;
            c.LocationBy   = item.LocationBy;
            c.LocationName = all.locations.Where(a => a.LocationBy == c.LocationBy && a.ID == c.Location).FirstOrDefault().Name;
            c.Department   = cpic.Department;
            c.Team         = item.Team;
            c.TeamName     = all.team.Where(a => a.ID == c.Team).FirstOrDefault().Name;
            c.PMType       = (int)GetPMTypeByFrequency(item.Frequency, true);
            c.PMTypeName   = all.pmType.Where(a => a.ID == c.PMType).FirstOrDefault().Name;
            c.PMCycle      = item.Cycle;
            c.PMFrequency  = item.Frequency * 12;
            c.Unit         = item.Unit;
            c.PlanQuantity = item.Quantity;
            c.RealQuantity = item.Quantity;
            c.Query        = cpic.ID;
            c.PlanDate     = planDate;
            c.UpdateTime   = dtNow;
            c.UpdateBy     = _userID;

            InsertRow(ref dt, c);
            InsertRow(ref dtChart, c, cpic.Year);
            #endregion
            return(c);
        }
        private MaintenanceList GetMList(ConstructionPlanMonthDetail detail, DateTime dt)
        {
            MaintenanceList ret = new MaintenanceList();

            ret.CreatedBy   = _userID;
            ret.CreatedTime = dt;
            ret.Status      = (int)PMStatus.Init;
            ret.Team        = detail.Team;
            ret.UpdatedBy   = _userID;
            ret.UpdatedTime = dt;
            return(ret);
        }
        private void InsertRow(ref DataTable dt, ConstructionPlanMonthDetail c, int year = 0)
        {
            DataRow dr = dt.NewRow();

            dr[0]  = c.Month;
            dr[1]  = c.Line;
            dr[2]  = c.WorkType;
            dr[3]  = c.EqpType;
            dr[4]  = c.EqpTypeName;
            dr[5]  = c.Location;
            dr[6]  = c.LocationBy;
            dr[7]  = c.Department;
            dr[8]  = c.Team;
            dr[9]  = c.PMType;
            dr[10] = c.PMCycle;
            dr[11] = c.PMFrequency;
            dr[12] = c.Unit;
            dr[13] = c.PlanQuantity;
            dr[14] = c.PlanDate;
            dr[15] = c.RealQuantity;
            dr[16] = c.RealDate;
            dr[17] = c.WorkingOrder;
            dr[18] = c.OrderStatus;
            dr[19] = c.Remark;
            dr[20] = c.Query;
            dr[21] = c.UpdateTime;
            dr[22] = c.UpdateBy;
            if (year != 0)
            {
                dr[23] = year;
                if (c.PlanDate.IndexOf('-') > -1)
                {
                    dr[24] = 0;
                    dr[11] = 31;
                }
                else
                {
                    dr[24] = c.PlanDate.Substring(8);
                    dr[11] = 1;
                }
            }
            else
            {
                dr[23] = c.IsAssigned;
            }
            dt.Rows.Add(dr);
        }
        public async Task <ApiResult> Update(ConstructionPlanMonthDetail obj)
        {
            ApiResult ret = new ApiResult();

            try
            {
                obj.UpdateBy   = _userID;
                obj.UpdateTime = DateTime.Now;
                ret.data       = await _repo.Update(obj);
            }
            catch (Exception ex)
            {
                ret.code = Code.Failure;
                ret.msg  = ex.Message;
            }
            return(ret);
        }
        public ActionResult Update(ConstructionPlanMonthDetail obj)
        {
            var resp = _service.Update(obj);

            return(Ok(resp.Result));
        }
        public async Task <ApiResult> Create(int query)
        {
            ApiResult ret = new ApiResult();
            List <ConstructionPlanMonthDetail> month = new List <ConstructionPlanMonthDetail>();
            DataTable dt      = GetColumnName(false);
            DataTable dtChart = GetColumnName(true);
            DateTime  dtNow   = DateTime.Now;
            // 每天工作时间统计,年表中的任务分配给时间做少的一天
            List <List <int> > dayMinInMonth = new List <List <int> >();

            for (int i = 0; i < 12; i++)
            {
                List <int> tmp = new List <int>();
                for (int j = 0; j < 31; j++)
                {
                    tmp.Add(0);
                }
                dayMinInMonth.Add(tmp);
            }
            try
            {
                List <ConstructionPlanMonth> cpms = await _importRepo.ListMonthByQuery(query);

                List <ConstructionPlanYear> cpys = await _importRepo.ListYearByQuery(query);

                ConstructionPlanImportCommon cpic = await _importRepo.GetByID(query);

                AllQuery all = new AllQuery();
                //all.eqpTypes = await _importRepo.ListAllEqpTypes();
                all.locations = await _importRepo.ListAllLocations();

                all.team = await _importRepo.ListAllOrgByType(OrgType.Team);

                all.workType = await _importRepo.ListDictionarysByParent(MSS.Platform.Workflow.WebApi.Model.Common.WORK_TYPE);

                all.pmType = await _importRepo.ListDictionarysByParent(MSS.Platform.Workflow.WebApi.Model.Common.PM_TYPE);

                int year  = cpic.Year;
                int index = 0;
                // 12月份循环
                for (int i = 1; i < 13; i++)
                {
                    int j = 0;
                    // 处理月表
                    foreach (var item in cpms)
                    {
                        string m = "." + i.ToString("D2");
                        if (item.Frequency % 31 == 0)
                        {
                            string d        = "." + MSS.Platform.Workflow.WebApi.Model.Common.GetLastDay(i, year);
                            string planDate = year + m + ".01-" + year + m + d;
                            ConstructionPlanMonthDetail c = GetCommonProperty(item, i, cpic, all, dtNow, planDate, ref dt, ref dtChart);
                            //dt.Rows[j+index][14] = c.PlanDate;
                            month.Add(c);
                        }
                        else
                        {
                            List <int> day     = dayMinInMonth[i - 1];
                            List <int> allDate = GetDay(item, ref day);
                            foreach (var date in allDate)
                            {
                                string planDate = year + m + "." + date.ToString("D2");
                                ConstructionPlanMonthDetail c = GetCommonProperty(item, i, cpic, all, dtNow, planDate, ref dt, ref dtChart);
                                //dt.Rows[j+index][14] = c.PlanDate;
                                month.Add(c);
                            }
                        }
                        j++;
                    }
                    index += j;
                }
                // 处理年表
                foreach (var item in cpys)
                {
                    int        j        = 0;
                    List <int> allMonth = GetMonth(item);
                    foreach (var m in allMonth)
                    {
                        int min = dayMinInMonth[m - 1].Min();
                        int day = dayMinInMonth[m - 1].IndexOf(min);
                        dayMinInMonth[m - 1][day] += item.Once;
                        string planDate = year + "." + m.ToString("D2") + "." + (day + 1).ToString("D2");
                        ConstructionPlanMonthDetail c = GetCommonProperty(item, m, cpic, all, dtNow, planDate, ref dt, ref dtChart);
                        //dt.Rows[index+j][14] = c.PlanDate;
                        month.Add(c);
                        j++;
                    }
                    index += j;
                }
                //自动创建检修表单
                //List<MaintenanceList> mls = GetMLists(month, cpic.Year, dtNow);
                // 创建的数据存入数据,按时间排序?
                using (TransactionScope scope = new TransactionScope())
                {
                    _importRepo.BulkLoad(dt);
                    _importRepo.BulkLoad(dtChart);
                    await _importRepo.UpdateCommonStatus(query, _userID);

                    scope.Complete();
                }
                // 创建的数据按照月份拆分后,按照时间排序后,分页
                List <List <ConstructionPlanMonthDetail> > months = new List <List <ConstructionPlanMonthDetail> >();
                List <object> retList = new List <object>();
                for (int i = 0; i < 12; i++)
                {
                    months.Add(new List <ConstructionPlanMonthDetail>());
                }
                foreach (var item in month)
                {
                    months[item.Month - 1].Add(item);
                }
                foreach (var item in months)
                {
                    retList.Add(new { rows = item.OrderBy(a => a.PlanDate).Take(10), total = item.Count });
                }
                ret.data = retList;
            }
            catch (Exception ex)
            {
                ret.code = Code.Failure;
                ret.msg  = ex.Message;
            }
            return(ret);
        }