/// <summary>
        /// 申领模具
        /// </summary>
        /// <param name="moldUseType">模具使用类型</param>
        /// <param name="moldNR">模具号</param>
        /// <param name="applicantNR">申请员工工号</param>
        /// <param name="operatorNR">操作员工工号</param>
        /// <param name="workstationNR">操作台号</param>
        /// <returns>申请信息</returns>
        public Message ApplyMold(MoldUseType moldUseType, string moldNR, string applicantNR, string operatorNR, string workstationNR)
        {
            try
            {
                using (IUnitOfWork unitwork = MSSqlHelper.DataContext())
                {
                    IWorkstationRepository workstationRep = new WorkstationRepository(unitwork);
                    IMoldRepository moldRep = new MoldRepository(unitwork);
                    Mold mold = moldRep.GetById(moldNR);
                    // check mold is available for apply
                    if (mold.State == MoldStateType.NotReturned)
                        return new Message() { MsgType = MsgType.Warn, Content = "模具处于不可借状态!" };

                    // check workstaition reach the max mold apply number
                    if (workstationRep.OverAppliedMold(workstationNR) == false && Settings.Default.AllowOverApply == false)
                        return new Message() { MsgType = MsgType.Warn, Content = "申领已到达上限!" };

                    IPositionRepository positionRep = new PositionRepository(unitwork);
                    Position position = positionRep.GetByFacilictyNR(moldNR);

                    //set value of storage record
                    IStorageRecordRepository recordRep = new StorageRecordRepository(unitwork);
                    StorageRecord storageRecord = new StorageRecord();
                    storageRecord.StorageRecordNR = GuidUtil.GenerateGUID();
                    storageRecord.PositionId = position.PositionID;
                    storageRecord.Source = position.PositionNR;
                    storageRecord.Destination = workstationNR;
                    storageRecord.OperatorId = operatorNR;
                    storageRecord.ApplicantId = applicantNR;
                    storageRecord.Quantity = 1;
                    storageRecord.Date = DateTime.Now;
                    storageRecord.TargetNR = moldNR;
                    storageRecord.RecordType = (StorageRecordType)moldUseType;

                    // add new storage record
                    recordRep.Add(storageRecord);

                    // update mold last apply storage record nr
                    IMoldLastRecordRepository lastRecordRep = new MoldLastRecordRepository(unitwork);
                    MoldLastRecord lastRecord = lastRecordRep.GetByMoldNR(moldNR);
                    lastRecord.StorageRecordNR = storageRecord.StorageRecordNR;

                    // update mold state
                    mold = moldRep.GetById(storageRecord.TargetNR);
                    mold.State = MoldStateType.NotReturned;

                    // update the workstation current mold count
                    Workstation workstation = workstationRep.GetById(storageRecord.Destination);
                    workstation.CurrentMoldCount++;

                    unitwork.Submit();
                    return new Message() { MsgType = MsgType.OK, Content = "申领成功" };
                }
            }
            catch (Exception ex)
            {
                LogUtil.log.Error(ex.ToString());
                return new Message() { MsgType = MsgType.Error, Content = "请核实所填数据的准确性" };
            }
        }
 /// <summary>
 /// 根据工作台号判断工作台是否存在
 /// </summary>
 /// <param name="stationId">工作台号</param>
 /// <returns>判断结果</returns>
 public bool WorkstationExist(string stationId)
 {
     using (IUnitOfWork unitwork = MSSqlHelper.DataContext())
     {
         IWorkstationRepository workRep = new WorkstationRepository(unitwork);
         return workRep.Exist(stationId);
     }
 }
        /// <summary>
        /// 归还模具
        /// </summary>
        /// <param name="moldNR">模具号</param>
        /// <param name="applicantNR">申请员工工号</param>
        /// <param name="operatorNR">操作员工工号</param>
        /// <param name="remark">备注</param>
        /// <param name="moldState">模具状态</param>
        /// <returns>归还信息</returns>
        public Message ReturnMold(string moldNR, string applicantNR, string operatorNR, string remark, MoldReturnStateType moldState)
        {
            try
            {
                using (IUnitOfWork unitwork = MSSqlHelper.DataContext())
                {
                    IMoldRepository moldRep = new MoldRepository(unitwork);
                    Mold mold = moldRep.GetById(moldNR);

                    if (mold.State != MoldStateType.NotReturned)
                        return new Message() {MsgType= MsgType.Warn, Content = "模具已归还!" };

                    StorageRecord storageRecord = new StorageRecord();

                    //set value of storage record
                    IPositionRepository positionRep = new PositionRepository(unitwork);
                    //Position position = positionRep.GetByFacilictyNR(moldNR);
                    Position position = positionRep.GetPartPoolPosition(Settings.Default.MoldPoolPosiNr);
                    storageRecord.PositionId = position.PositionID;
                    storageRecord.StorageRecordNR = GuidUtil.GenerateGUID();
                    storageRecord.Source = moldRep.GetMoldCurrPosiByMoldNR(moldNR);
                    storageRecord.Destination = position.PositionNR;
                    storageRecord.OperatorId = operatorNR;
                    storageRecord.ApplicantId = applicantNR;
                    storageRecord.Date = DateTime.Now;
                    storageRecord.Quantity = 1;
                    storageRecord.TargetNR = moldNR;
                    storageRecord.Remark = remark;
                    storageRecord.RecordType = StorageRecordType.Return;

                    // add new storage record
                    IStorageRecordRepository recordRep = new StorageRecordRepository(unitwork);
                    recordRep.Add(storageRecord);

                    // update mold last apply storage record nr
                    IMoldLastRecordRepository lastRecordRep = new MoldLastRecordRepository(unitwork);
                    MoldLastRecord lastRecord = lastRecordRep.GetByMoldNR(moldNR);
                    lastRecord.StorageRecordNR = storageRecord.StorageRecordNR;

                    // update mold state
                    mold = moldRep.GetById(storageRecord.TargetNR);
                    mold.State =(MoldStateType)moldState;

                    // update workstation mold count
                    IWorkstationRepository workstationRep = new WorkstationRepository(unitwork);
                    Workstation workstation = workstationRep.GetById(storageRecord.Source);
                    if(workstation!=null)
                      workstation.CurrentMoldCount--;

                    unitwork.Submit();
                    return new Message() { MsgType = MsgType.OK, Content = "归还成功" };
                }
            }
            catch (Exception ex)
            {
                  LogUtil.log.Error(ex.ToString());
                return new Message() { MsgType = MsgType.Error, Content = ex.Message };
            }
        }
        /// <summary>
        /// 模具移动工作台
        /// </summary>
        /// <param name="moldNR">模具号</param>
        /// <param name="operatorNR">操作员工号</param>
        /// <param name="targetWStationNR">目标工作台号</param>
        /// <returns>移动信息</returns> 
        public Message MoldMoveWorkStation(string moldNR, string operatorNR, string targetWStationNR)
        {
            try
            {
                using (IUnitOfWork unitwork = MSSqlHelper.DataContext())
                {
                    IWorkstationRepository workstationRep = new WorkstationRepository(unitwork);
                    IMoldRepository moldRep = new MoldRepository(unitwork);
                    IEmployeeRepository empRep = new EmployeeRepository(unitwork);

                    Mold mold = moldRep.GetById(moldNR);

                    if (!empRep.Exist(operatorNR))
                        return new Message() { MsgType = MsgType.Warn, Content = "操作员不存在!" };
                    if(mold==null)
                        return new Message() { MsgType = MsgType.Warn, Content = "模具不存在!" };
                    Workstation tworkstation=workstationRep.GetById(targetWStationNR);
                    if (tworkstation == null)
                      return new Message() { MsgType = MsgType.Warn, Content = "目标工作台不存在!" };

                      // check mold is available for move
                    if (mold.State != MoldStateType.NotReturned)
                        return new Message() { MsgType = MsgType.Warn, Content = "模具未被借用,请先借用!" };

                    MoldView moldview = moldRep.GetMoldViewByMoldNR(moldNR);

                    string currentWorkPosi = moldview.StorageRecordNR == null ? string.Empty : moldRep.GetMoldCurrPosiByRecordNR((Guid)moldview.StorageRecordNR);

                 //   if(workstationRep.GetById(currentWorkPosi)==null)
                  //      return new Message() { MsgType = MsgType.Warn, Content = "模具正在使用的工作台号已经被修改,请先归还此模具再做后续操作!" };

                    if (currentWorkPosi.Equals(targetWStationNR))
                        return new Message() { MsgType = MsgType.Warn, Content = "模具已经在此工作台,不可重复移动!" };

                    // check workstaition reach the max mold apply number
                    if (workstationRep.OverAppliedMold(targetWStationNR) == false && Settings.Default.AllowOverApply == false)
                        return new Message() { MsgType = MsgType.Warn, Content = "目标工作台已经到达模具使用上限!" };

                    IPositionRepository positionRep = new PositionRepository(unitwork);
                    Position position = positionRep.GetByFacilictyNR(moldNR);

                    //set value of storage record
                    IStorageRecordRepository recordRep = new StorageRecordRepository(unitwork);
                    StorageRecord storageRecord = new StorageRecord();
                    storageRecord.StorageRecordNR = GuidUtil.GenerateGUID();
                    storageRecord.PositionId = position.PositionID;
                    storageRecord.Source = currentWorkPosi;
                    storageRecord.Destination = targetWStationNR;
                    storageRecord.OperatorId = operatorNR;
                    storageRecord.Quantity = 1;
                    storageRecord.Date = DateTime.Now;
                    storageRecord.TargetNR = moldNR;
                    storageRecord.RecordType = StorageRecordType.MoveWStation;

                    // add new storage record
                    recordRep.Add(storageRecord);

                    // update mold last apply storage record nr
                    IMoldLastRecordRepository lastRecordRep = new MoldLastRecordRepository(unitwork);
                    MoldLastRecord lastRecord = lastRecordRep.GetByMoldNR(moldNR);
                    lastRecord.StorageRecordNR = storageRecord.StorageRecordNR;

                    // update the workstation current mold count
                    //Workstation tworkstation = workstationRep.GetById(storageRecord.Destination);
                    //if(tworkstation!=null)
                      tworkstation.CurrentMoldCount++;

                    Workstation sworkstation = workstationRep.GetById(storageRecord.Source);
                    if(sworkstation!=null)
                       sworkstation.CurrentMoldCount--;

                    unitwork.Submit();
                    return new Message() { MsgType = MsgType.OK, Content = "移动工作台成功!" };
                }
            }
            catch (Exception ex)
            {
                LogUtil.log.Error(ex.ToString());
                return new Message() { MsgType = MsgType.Error, Content = "请核实所填数据的准确性" };
            }
        }