Esempio n. 1
0
        //public IList<IdleState_ism_Info> GetPrepareItems(IdleState_ism_Info cond)
        //{
        //    try
        //    {
        //        return SpareStatussDA.FindEntities<IdleState_ism_Info>(cond);
        //    }
        //    catch
        //    {
        //        return null;
        //    }
        //}
        //public Model.General.ReturnValueInfo Update(SpareStatus_sst_Info entity)
        //{
        //    entity.sst_dLastDate = DateTime.Now;
        //    entity.sst_lSync = false;
        //    return SpareStatussDA.Update(entity);
        //}
        //public IList<SpareStatus_sst_Info> Search(Guid shiftInfoID)
        //{
        //    return SpareStatussDA.Search(shiftInfoID);
        //}
        public void BeginIdle(string machineNO, Guid shiftInfoID)
        {
            try
            {
                using (DBContext uow = DBContext.Begin())
                {

                    SpareStatus_sst_Info info = uow.CurrentSession.QueryOver<SpareStatus_sst_Info>().And(d => d.sst_cMachineNO == machineNO && d.sst_iSIFOID == shiftInfoID)
                    .And(d => d.sst_dEndTime == null).Take(1).SingleOrDefault();
                    if (info == null)
                    {
                        info = new SpareStatus_sst_Info();
                        info.sst_RecordID = Guid.NewGuid();
                        info.sst_iSIFOID = shiftInfoID;
                        info.sst_dBeginTime = DateTime.Now;
                        info.sst_dAddDate = DateTime.Now;
                        info.sst_cMachineNO = machineNO;
                        IdleState_ism_Info ism = uow.CurrentSession.QueryOver<IdleState_ism_Info>().And(d => d.ism_lIsBuildin && d.ism_lIsAtive).Take(1).SingleOrDefault();
                        if (ism != null)
                        {

                            info.sst_cStatusName = ism.ism_cStateName;
                            info.sst_StatusID = ism.ism_RecordID;
                        }
                        uow.CurrentSession.Save(info);
                    }

                }
            }
            catch (Exception ex)
            {
                Common.General.BLLoger.Error(ex);

            }
        }
Esempio n. 2
0
        //public bool ChangetShift(string machineID, ref ShiftProjList_spl_Info shiftProject)
        //{
        //    try
        //    {
        //        mLog.Debug("執行轉班邏輯");
        //        ShiftProjList_spl_Info newSpl = null;
        //        ShiftProjList_spl_Info oldSpl = shiftProject;
        //        using (Transaction uow = Transaction.Begin())
        //        {
        //            mLog.Debug("更新班次內工程 ShiftProjList_spl_Info");
        //            oldSpl.spl_dLastDate = DateTime.Now;
        //            oldSpl.spl_dEndTime = oldSpl.ShiftInfo.sifo_dEndTime;
        //            oldSpl.spl_lSync = false;
        //            uow.CurrentSession.Update(oldSpl);
        //            #region
        //            ShiftInfo_sifo_Info nextShift = null;
        //            var query = uow.CurrentSession.QueryOver<ShiftInfo_sifo_Info>();
        //            query.And(d => d.sifo_dBeginTime >= DateTime.Now);
        //            query.And(d => d.sifo_cMachineNO == machineID).OrderBy(d => d.sifo_dBeginTime);
        //            IList<ShiftInfo_sifo_Info> list = query.List<ShiftInfo_sifo_Info>();
        //            if (list.Count > 0)
        //            {
        //                nextShift = list[0];
        //            }
        //            else
        //            {
        //                //todo:creat new shift
        //            }
        //            mLog.Debug("創建新的班次內工程 ShiftProjList_spl_Info");
        //            newSpl = new ShiftProjList_spl_Info();
        //            newSpl.spl_RecordID = Guid.NewGuid();
        //            newSpl.spl_SIFOID = nextShift.sifo_RecordID;
        //            newSpl.spl_PPJID = oldSpl.spl_PPJID;
        //            newSpl.spl_dBeginTime = nextShift.sifo_dBeginTime.Value;
        //            newSpl.spl_dProdBegin = nextShift.sifo_dBeginTime.Value;
        //            newSpl.spl_dAddDate = DateTime.Now;
        //            newSpl.spl_iBeginQTY = oldSpl.PrintProject.ppj_iCountProdNum;
        //            newSpl.spl_iBeginQTY = shiftProject.spl_iEndQTY;
        //            uow.CurrentSession.Save(newSpl);
        //            uow.CurrentSession.Flush();
        //            newSpl.PrintProject = oldSpl.PrintProject;
        //            newSpl.ShiftInfo = nextShift;
        //            shiftProject = newSpl;
        //            #endregion
        //            #region 結束工程停機記錄
        //            ProjectStopRecord_psrd_Info psrd = uow.CurrentSession.QueryOver<ProjectStopRecord_psrd_Info>().And(d => d.psrd_SPLID == oldSpl.spl_RecordID).And(d => d.psrd_dEndTime == null).Take(1).SingleOrDefault();
        //            if (psrd != null)
        //            {
        //                psrd.psrd_dEndTime = oldSpl.ShiftInfo.sifo_dEndTime;
        //                psrd.psrd_dLastDate = DateTime.Now;
        //                psrd.psrd_lSync = false;
        //                uow.CurrentSession.Update(psrd);
        //                mLog.Debug("創建跨班次停機記錄 ProjectStopRecord_psrd_Info");
        //                ProjectStopRecord_psrd_Info nextPsrd = new ProjectStopRecord_psrd_Info();
        //                nextPsrd.psrd_RecordID = Guid.NewGuid();
        //                nextPsrd.psrd_dBeginTime = nextShift.sifo_dBeginTime.Value;
        //                nextPsrd.psrd_dAddDate = DateTime.Now;
        //                nextPsrd.psrd_PPJID = newSpl.spl_PPJID;
        //                nextPsrd.psrd_SPLID = newSpl.spl_RecordID;
        //                nextPsrd.psrd_cTypeID = CustEnum.RecordType.NORMAL.ToString();
        //                uow.CurrentSession.Save(nextPsrd);
        //            }
        //            #endregion
        //            #region 結束幾臺空閒狀態
        //            SpareStatus_ssts_Info ssts = uow.CurrentSession.QueryOver<SpareStatus_ssts_Info>().And(d => d.sst_cMachineNO == machineID)
        //        .And(d => d.sst_iSIFOID == oldSpl.spl_SIFOID).And(d => d.sst_dEndTime == null).Take(1).SingleOrDefault();
        //            if (ssts != null)
        //            {
        //                ssts.sst_dEndTime = oldSpl.ShiftInfo.sifo_dEndTime;
        //                ssts.sst_dLastDate = DateTime.Now;
        //                ssts.sst_lSync = false;
        //                uow.CurrentSession.Update(ssts);
        //                mLog.Debug("創建跨班次空閒記錄 SpareStatus_ssts_Info");
        //                SpareStatus_ssts_Info nextSsts = new SpareStatus_ssts_Info();
        //                nextSsts.sst_cMachineNO = machineID;
        //                nextSsts.sst_dBeginTime = nextShift.sifo_dBeginTime.Value;
        //                nextSsts.sst_iSIFOID = nextShift.sifo_RecordID;
        //                nextSsts.sst_dAddDate = DateTime.Now;
        //                uow.CurrentSession.Save(nextSsts);
        //            }
        //            #endregion
        //        }
        //        return true;
        //    }
        //    catch (Exception ex)
        //    {
        //        mLog.Error(ex);
        //    }
        //    return false;
        //}
        public bool ChangeShift(string machineID, ShiftInfo_sifo_Info currentShift, ShiftInfo_sifo_Info nextShift, ScheduleProjList_swl_Info scheduleProject, PrintProject_ppj_Info printProject, ShiftProjList_spl_Info shiftProject)
        {
            mLog.Info("班次轉換新邏輯");

            try
            {
                if (currentShift == null)
                {
                    throw new Exception("當前班次對象不能為空");
                }
                if (nextShift == null)
                {
                    throw new Exception("下一班次對象不能為空");
                }
                using (DBContext uow = DBContext.Begin())
                {
                    try
                    {

                        if (printProject != null && shiftProject != null && shiftProject.spl_RecordID != Guid.Empty)
                        {
                            PrintProject_ppj_Info currentProject = printProject;
                            ShiftProjList_spl_Info currentShiftProject = shiftProject;

                            #region 更新班次內工程
                            mLog.Debug("更新班次內工程 ShiftProjList_spl_Info");
                            currentShiftProject.spl_dLastDate = DateTime.Now;
                            currentShiftProject.spl_dEndTime = currentShift.sifo_dEndTime;
                            currentShiftProject.spl_lSync = false;

                            //就餐時間
                            #region 準備時間計算

                            if (currentShiftProject.spl_dProdBegin.HasValue)//沒有結束準備
                            {
                                currentShiftProject.spl_iPrepairTime = TimeCalculater.ShiftProjectActualPrepairTime(uow, currentShiftProject);
                                currentProject.ppj_iActualPrepairTime += currentShiftProject.spl_iPrepairTime;
                            }

                            #endregion

                            #region  正常生產時間
                            currentShiftProject.spl_iProdSumTime = TimeCalculater.ShiftProjectProdTime(uow, currentShiftProject);
                            #endregion

                            uow.CurrentSession.Update(currentShiftProject);

                            #endregion

                            #region 創建新的班次內工程

                            mLog.Debug("創建新的班次內工程 ShiftProjList_spl_Info");
                            ShiftProjList_spl_Info newSpl = new ShiftProjList_spl_Info();
                            newSpl.spl_RecordID = Guid.NewGuid();
                            newSpl.spl_SIFOID = nextShift.sifo_RecordID;
                            newSpl.spl_PPJID = currentShiftProject.spl_PPJID;
                            newSpl.spl_dBeginTime = nextShift.sifo_dBeginTime.Value;
                            newSpl.spl_dAddDate = DateTime.Now;
                            newSpl.spl_iBeginQTY = currentShiftProject.spl_iEndQTY;
                            newSpl.spl_iEndQTY = currentShiftProject.spl_iEndQTY;
                            if (currentShiftProject.spl_dProdBegin != null)
                            {
                                newSpl.spl_dProdBegin = nextShift.sifo_dBeginTime.Value;
                            }
                            else
                            {
                                newSpl.spl_dProdBegin = null;
                            }

                            uow.CurrentSession.Save(newSpl);

                            #endregion

                            #region 結束工程停機記錄

                            ProjectStopRecord_psrd_Info psrd = uow.CurrentSession.QueryOver<ProjectStopRecord_psrd_Info>()
                                .And(d => d.psrd_SPLID == currentShiftProject.spl_RecordID)
                                .And(d => d.psrd_dEndTime == null).Take(1).SingleOrDefault();

                            if (psrd != null)
                            {
                                psrd.psrd_dEndTime = currentShift.sifo_dEndTime;
                                psrd.psrd_dLastDate = DateTime.Now;
                                psrd.psrd_lSync = false;
                                psrd.psrd_iActualStopTime = TimeCalculater.ProjectStopRecordActualTime(uow, psrd);
                                uow.CurrentSession.Update(psrd);

                                mLog.Debug("更新跨更的班次內工程的停機時間");
                                currentShiftProject.spl_iStopTime += psrd.psrd_iActualStopTime;

                                uow.CurrentSession.Update(currentShiftProject);

                                currentProject.ppj_iStopTime += psrd.psrd_iActualStopTime;
                                currentProject.ppj_iStopTimes++;
                                uow.CurrentSession.Update(currentProject);

                                //mLog.Debug("創建跨班次停機記錄 ProjectStopRecord_psrd_Info");
                                //ProjectStopRecord_psrd_Info nextPsrd = new ProjectStopRecord_psrd_Info();
                                //nextPsrd.psrd_RecordID = Guid.NewGuid();
                                //nextPsrd.psrd_dBeginTime = nextShift.sifo_dBeginTime.Value;
                                //nextPsrd.psrd_dAddDate = DateTime.Now;
                                //nextPsrd.psrd_PPJID = newSpl.spl_PPJID;
                                //nextPsrd.psrd_SPLID = newSpl.spl_RecordID;
                                //nextPsrd.psrd_cTypeID = CustEnum.RecordType.NORMAL.ToString();
                                //uow.CurrentSession.Save(nextPsrd);

                                //newSpl.spl_iStopTimes++;
                                //uow.CurrentSession.Update(newSpl);

                            }

                            #endregion
                        }

                        #region 結束機台空閒狀態

                        SpareStatus_sst_Info ssts = uow.CurrentSession.QueryOver<SpareStatus_sst_Info>().And(d => d.sst_cMachineNO == machineID)
                    .And(d => d.sst_iSIFOID == currentShift.sifo_RecordID).And(d => d.sst_dEndTime == null).Take(1).SingleOrDefault();
                        if (ssts != null)
                        {
                            IdleState_ism_Info ism = null;
                            if (ssts.sst_StatusID == Guid.Empty)
                            {
                                ism = uow.CurrentSession.QueryOver<IdleState_ism_Info>().And(d => d.ism_lIsBuildin && d.ism_lIsAtive).Take(1).SingleOrDefault();
                                if (ism != null)
                                {

                                    ssts.sst_cStatusName = ism.ism_cStateName;
                                    ssts.sst_StatusID = ism.ism_RecordID;
                                }
                            }
                            ssts.sst_dEndTime = currentShift.sifo_dEndTime;
                            ssts.sst_dLastDate = DateTime.Now;
                            ssts.sst_lSync = false;
                            uow.CurrentSession.Update(ssts);

                            mLog.Debug("創建跨班次空閒記錄 SpareStatus_ssts_Info");
                            SpareStatus_sst_Info nextSsts = new SpareStatus_sst_Info();
                            nextSsts.sst_RecordID = Guid.NewGuid();
                            nextSsts.sst_cMachineNO = machineID;
                            nextSsts.sst_dBeginTime = nextShift.sifo_dBeginTime.Value;
                            nextSsts.sst_iSIFOID = nextShift.sifo_RecordID;
                            nextSsts.sst_dAddDate = DateTime.Now;

                            if (ism != null)
                            {
                                nextSsts.sst_cStatusName = ism.ism_cStateName;
                                nextSsts.sst_StatusID = ism.ism_RecordID;
                            }

                            uow.CurrentSession.Save(nextSsts);

                        }

                        #endregion

                    }
                    catch (Exception)
                    {
                        uow.CanCommit = false;
                        throw;
                    }
                }
                return true;
            }
            catch (Exception ex)
            {
                string message = "班次轉換新邏輯,machineID=" + machineID + "\r\n";
                message += "PrintProject_ppj_Info=" + Common.Util.JsonUtil.JsonSerializer<PrintProject_ppj_Info>(printProject) + "\r\n";
                message += "ShiftProjList_spl_Info=" + Common.Util.JsonUtil.JsonSerializer<ShiftProjList_spl_Info>(shiftProject) + "\r\n";
                Common.Util.MessageUtil.SendDevMail(message, ex);
                mLog.Error(ex);
                return false;
                // throw;
            }
        }
Esempio n. 3
0
        public ReturnValueInfo FinishProject(ScheduleProjList_swl_Info project, PrintProject_ppj_Info projectDetail, ShiftProjList_spl_Info shiftProject)
        {
            //DateTime start = DateTime.Now;
            ReturnValueInfo result = new ReturnValueInfo();

            try
            {
                using (DBContext uow = DBContext.Begin())
                {
                    try
                    {

                        DateTime dealTime = DateTime.Now;

                        #region 更新前一個停機記錄的結束時間

                        var stopRec = uow.CurrentSession.QueryOver<ProjectStopRecord_psrd_Info>();
                        stopRec.And(d => d.psrd_dEndTime == null).And(d => d.psrd_SPLID == shiftProject.spl_RecordID).OrderBy(d => d.psrd_dBeginTime).Desc();
                        ProjectStopRecord_psrd_Info psrd = stopRec.Take(1).SingleOrDefault();
                        if (psrd != null)
                        {
                            psrd.psrd_dLastDate = dealTime;
                            psrd.psrd_dEndTime = dealTime;
                            psrd.psrd_iActualStopTime = TimeCalculater.ProjectStopRecordActualTime(uow, psrd);

                            uow.CurrentSession.Update(psrd);

                            projectDetail.ppj_iStopTime += psrd.psrd_iActualStopTime;
                            shiftProject.spl_iStopTime += psrd.psrd_iActualStopTime;

                        }
                        #endregion

                        #region 更新班次內工程

                        /// 更新班次內工程結束時間
                        if (project.swl_cProjStatus == CustEnum.ProjectStatus.PREPARE.ToString() || project.swl_cProjStatus == CustEnum.ProjectStatus.PREPARE_OT.ToString())
                        {
                            shiftProject.spl_dProdBegin = dealTime;
                        }
                        shiftProject.spl_dEndTime = shiftProject.spl_dLastDate = dealTime;

                        /// 準備時間計算
                        int totalPrepare = (int)(shiftProject.spl_dProdBegin.Value - shiftProject.spl_dBeginTime).TotalSeconds;
                        shiftProject.spl_iPrepairTime = totalPrepare;

                        /// 計算生產時間
                        shiftProject.spl_iProdSumTime = TimeCalculater.ShiftProjectProdTime(uow, shiftProject);
                        uow.CurrentSession.Update(shiftProject);
                        #endregion

                        #region PPJ

                        if (project.swl_cProjStatus == CustEnum.ProjectStatus.PREPARE.ToString() || project.swl_cProjStatus == CustEnum.ProjectStatus.PREPARE_OT.ToString())
                        {
                            projectDetail.ppj_dProdBeginTime = dealTime;
                        }
                        projectDetail.ppj_dProdEndTime = dealTime;

                        ///計算生產時間
                        projectDetail.ppj_iProdSumTime = TimeCalculater.PrintProjectProdTime(uow, projectDetail);
                        uow.CurrentSession.Update(projectDetail);
                        #endregion

                        #region SWL
                        project.swl_iCompletedQty += projectDetail.ppj_iActualProdNum;
                        project.swl_cProjStatus = CustEnum.ProjectStatus.FINISH.ToString();
                        project.swl_dLastDate = dealTime;
                        project.swl_iIsByModify = true;

                        uow.CurrentSession.Update(project);
                        #endregion

                        #region  班次進入空閒狀態
                        SpareStatus_sst_Info info_new = new SpareStatus_sst_Info();
                        info_new.sst_RecordID = Guid.NewGuid();
                        info_new.sst_iSIFOID = shiftProject.spl_SIFOID;
                        info_new.sst_dBeginTime = dealTime;
                        info_new.sst_dAddDate = dealTime;
                        info_new.sst_cMachineNO = project.swl_cMachineNO;

                        IdleState_ism_Info ism = uow.CurrentSession.QueryOver<IdleState_ism_Info>().And(d => d.ism_lIsBuildin && d.ism_lIsAtive).Take(1).SingleOrDefault();
                        if (ism != null)
                        {
                            info_new.sst_cStatusName = ism.ism_cStateName;
                            info_new.sst_StatusID = ism.ism_RecordID;
                        }

                        uow.CurrentSession.Save(info_new);
                        #endregion

                        result.boolValue = true;
                    }
                    catch (Exception)
                    {
                        uow.CanCommit = false;
                        throw;

                    }
                }
            }
            catch (Exception ex)
            {

                string message = "結束工程出錯,machineID=" + project.swl_cMachineNO;
                message += "ScheduleProjList_swl_Info=" + Common.Util.JsonUtil.JsonSerializer<ScheduleProjList_swl_Info>(project);
                message += "PrintProject_ppj_Info=" + Common.Util.JsonUtil.JsonSerializer<PrintProject_ppj_Info>(projectDetail);
                message += "ShiftProjList_spl_Info=" + Common.Util.JsonUtil.JsonSerializer<ShiftProjList_spl_Info>(shiftProject);
                Common.Util.MessageUtil.SendDevMail(message, ex);

                result.messageText = ex.Message;
                result.boolValue = false;
                throw new Exception(Resource.B0023 + ex.Message);
            }

            // DateTime end = DateTime.Now;
            // Common.General.BLLoger.Debug("結束工程,耗時" + (end - start).Milliseconds.ToString());

            return result;
        }
Esempio n. 4
0
        public ReturnValueInfo StopProject(ProjectStopRec_psr_Info stopRecord, ShiftProjList_spl_Info spl)
        {
            // DateTime start = DateTime.Now;
            ReturnValueInfo result = new ReturnValueInfo();

            if (stopRecord == null || stopRecord.Project == null)
            {
                result.boolValue = false;
                result.messageText = "工程為空。";

            }
            else
            {

                try
                {

                    using (DBContext uow = DBContext.Begin())
                    {
                        try
                        {
                            DateTime dealTime = DateTime.Now;

                            #region 更新印刷工程記錄為無效的
                            if (stopRecord.PrintProject == null)
                            {
                                throw new Exception("不能抽起工程,工程數據信息缺失,請聯繫開發人員!");
                            }
                            else
                            {
                                stopRecord.PrintProject.ppj_lActiveRecord = false;
                                if (stopRecord.Project.swl_cProjStatus == CustEnum.ProjectStatus.PREPARE.ToString() || stopRecord.Project.swl_cProjStatus == CustEnum.ProjectStatus.PREPARE_OT.ToString())
                                {
                                    stopRecord.PrintProject.ppj_dProdBeginTime = dealTime;
                                }
                                stopRecord.PrintProject.ppj_dProdEndTime = dealTime;
                                stopRecord.PrintProject.ppj_dLastDate = dealTime;

                                var dinnerQuery = uow.CurrentSession.QueryOver<DinnerRecord_dnr_Info>().And(d => d.dsm_swlID == stopRecord.Project.swl_RecordID);
                                dinnerQuery.And(d => d.dsm_ppjID == stopRecord.PrintProject.ppj_RecordID);
                                int dinnerTime = (int)dinnerQuery.And(d => d.dnr_DSMID != Guid.Empty).List().Sum(d => (d.dnr_dEndTime.Value - d.dnr_dBeginTime.Value).TotalSeconds);

                                stopRecord.PrintProject.ppj_iProdSumTime = stopRecord.PrintProject.ppj_iProjRunTime - stopRecord.PrintProject.ppj_iActualPrepairTime - stopRecord.PrintProject.ppj_iStopTime - dinnerTime;

                                uow.CurrentSession.Update(stopRecord.PrintProject);
                            }
                            #endregion

                            #region 更新班次內工程結束時間

                            if (spl != null)
                            {
                                if (stopRecord.Project.swl_cProjStatus == CustEnum.ProjectStatus.PREPARE.ToString() || stopRecord.Project.swl_cProjStatus == CustEnum.ProjectStatus.PREPARE_OT.ToString())
                                {
                                    spl.spl_dProdBegin = dealTime;
                                }
                                spl.spl_dEndTime = dealTime;

                                #region 準備時間計算
                                int totalPrepare = (int)(spl.spl_dProdBegin.Value - spl.spl_dBeginTime).TotalSeconds;
                                spl.spl_iPrepairTime = totalPrepare;
                                #endregion

                                //計算正常生產時間,需優化
                                var dinnerQuery = uow.CurrentSession.QueryOver<DinnerRecord_dnr_Info>().And(d => d.dsm_swlID == stopRecord.Project.swl_RecordID);
                                dinnerQuery.And(d => d.dsm_ppjID == stopRecord.PrintProject.ppj_RecordID);
                                dinnerQuery.And(d => d.dsm_splID == spl.spl_RecordID);
                                int dinnerTime = (int)dinnerQuery.And(d => d.dnr_DSMID != Guid.Empty).List().Sum(d => (d.dnr_dEndTime.Value - d.dnr_dBeginTime.Value).TotalSeconds);
                                spl.spl_iProdSumTime = spl.spl_iRunTime - spl.spl_iPrepairTime - spl.spl_iStopTime - dinnerTime;

                                var query_psrd = uow.CurrentSession.QueryOver<ProjectStopRecord_psrd_Info>();
                                query_psrd.And(d => d.psrd_dEndTime == null);
                                query_psrd.And(d => d.psrd_cTypeID == CustEnum.RecordType.NORMAL.ToString());
                                query_psrd.And(d => d.psrd_SPLID == spl.spl_RecordID);

                                ProjectStopRecord_psrd_Info psrd = query_psrd.Take(1).SingleOrDefault();
                                if (psrd != null)
                                {
                                    psrd.psrd_dEndTime = dealTime;
                                    psrd.psrd_dLastDate = dealTime;
                                    psrd.psrd_iActualStopTime = TimeCalculater.ProjectStopRecordActualTime(uow, psrd);
                                    uow.CurrentSession.Update(psrd);

                                    stopRecord.PrintProject.ppj_iStopTime += psrd.psrd_iActualStopTime;
                                    stopRecord.PrintProject.ppj_iStopTimes += 1;
                                    uow.CurrentSession.Update(stopRecord.PrintProject);

                                    spl.spl_iStopTime += psrd.psrd_iActualStopTime;
                                    spl.spl_iStopTimes += 1;

                                }
                                uow.CurrentSession.Update(spl);
                            }

                            #endregion

                            #region 保存抽起的記錄
                            stopRecord.psr_SWLID = stopRecord.Project.swl_RecordID;
                            stopRecord.psr_cRecordID = Guid.NewGuid();
                            stopRecord.psr_dAddDate = dealTime;
                            stopRecord.psr_lSync = false;
                            uow.CurrentSession.Save(stopRecord);
                            #endregion

                            #region 將印刷工程的生產順序排到最後

                            //int max_PrintOrder = 1;
                            //ScheduleProjList_swl_Info max_swl = uow.CurrentSession.QueryOver<ScheduleProjList_swl_Info>().OrderBy(d => d.swl_iPrintOrder).Desc().Take(1).SingleOrDefault();
                            //if (max_swl != null)
                            //{
                            //    max_PrintOrder = max_swl.swl_iPrintOrder;
                            //}

                            //ScheduleProjList_swl_Info swl = uow.CurrentSession.Get<ScheduleProjList_swl_Info>(data.Project.swl_RecordID);
                            //swl.swl_iPrintOrder = max_PrintOrder + 1;
                            //uow.CurrentSession.Update(swl);
                            #endregion

                            #region  班次進入空閒狀態
                            SpareStatus_sst_Info info_new = new SpareStatus_sst_Info();
                            info_new.sst_RecordID = Guid.NewGuid();
                            info_new.sst_iSIFOID = spl.spl_SIFOID;
                            info_new.sst_dBeginTime = dealTime;
                            info_new.sst_dAddDate = dealTime;
                            info_new.sst_cMachineNO = stopRecord.Project.swl_cMachineNO;
                            IdleState_ism_Info ism = uow.CurrentSession.QueryOver<IdleState_ism_Info>().And(d => d.ism_lIsBuildin && d.ism_lIsAtive).Take(1).SingleOrDefault();
                            if (ism != null)
                            {
                                info_new.sst_cStatusName = ism.ism_cStateName;
                                info_new.sst_StatusID = ism.ism_RecordID;
                            }
                            uow.CurrentSession.Save(info_new);
                            #endregion

                            #region 更新工程狀態為抽起
                            stopRecord.Project.swl_iIsByModify = true;
                            stopRecord.Project.swl_iCompletedQty += stopRecord.PrintProject.ppj_iActualProdNum;
                            stopRecord.Project.swl_cProjStatus = CustEnum.ToString(CustEnum.ProjectStatus.STOP);
                            stopRecord.Project.swl_dLastDate = dealTime;
                            uow.CurrentSession.Update(stopRecord.Project);
                            #endregion

                            result.boolValue = true;
                        }
                        catch (Exception)
                        {
                            uow.CanCommit = false;
                            throw;
                        }

                    }

                    result.boolValue = true;

                }
                catch (Exception ex)
                {

                    string message = "抽起工程出現錯誤,machineID=" + stopRecord.Project.swl_cMachineNO;
                    message += "ScheduleProjList_swl_Info=" + Common.Util.JsonUtil.JsonSerializer<ScheduleProjList_swl_Info>(stopRecord.Project);
                    message += "PrintProject_ppj_Info=" + Common.Util.JsonUtil.JsonSerializer<PrintProject_ppj_Info>(stopRecord.PrintProject);
                    message += "ShiftProjList_spl_Info=" + Common.Util.JsonUtil.JsonSerializer<ShiftProjList_spl_Info>(spl);
                    Common.Util.MessageUtil.SendDevMail(message, ex);

                    result.boolValue = false;
                    result.messageText = Resource.B0017 + ":" + ex.Message;
                    Common.General.BLLoger.Error(result.messageText);
                }

            }
            // DateTime end = DateTime.Now;
            // Common.General.BLLoger.Debug("抽起工程,耗時" + (end - start).Milliseconds.ToString());

            return result;
        }