Ejemplo n.º 1
0
        public CompleteOutput Execute(CompleteInput input)
        {
            var output = new CompleteOutput();

            // 読み込み対象ファイルの拡張子によって処理を変える
            var ext = Path.GetExtension(input.FilePath);

            var taskItems = null as OpenFileOutput.TaskItem[];

            if (ext.Equals(".csv"))
            {
                // 全レコード変換
                taskItems = this.csvReadService.Read(input.FilePath).ToArray();
            }
            else if (ext.Equals(".xlsx"))
            {
                // 全レコード変換
                taskItems = this.xlsxReadService.Read(input.FilePath).ToArray();
            }
            output.TaskItems = taskItems;
            output.Tasks     = ConvertTaskEntity(taskItems).ToArray();
            output.Processes = ConvertProcessEntity(taskItems).ToArray();
            output.Functions = ConvertFunctionEntity(taskItems).ToArray();
            output.Members   = ConvertMemberEntity(taskItems).ToArray();

            return(output);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Wbs(作業)を上書き
        /// </summary>
        /// <param name="appContext"></param>
        /// <param name="output"></param>
        public void OverriteWbs(AppContext appContext, CompleteOutput output)
        {
            // タスクを全削除
            appContext.Tasks.Clear();
            taskIdGenerator.SetCurrentIndex(1);

            var tasks = output.TaskItems.Zip(output.Tasks, (a, b) => new { Item = a, Entity = b });

            // タスクのIDを振り直し
            foreach (var task in tasks)
            {
                var procId   = appContext.Processes.FirstOrDefault(x => x.ProcessName.Equals(task.Item.Process))?.ProcessCd;
                var funcId   = appContext.Functions.FirstOrDefault(x => x.FunctionName.Equals(task.Item.Function))?.FunctionCd;
                var memberId = appContext.Members.FirstOrDefault(x => x.MemberName.Equals(task.Item.Member))?.MemberCd;
                var entity   = task.Entity;

                entity.TaskCd         = taskIdGenerator.CreateNewId();
                entity.ProcessCd      = procId;
                entity.FunctionCd     = funcId;
                entity.AssignMemberCd = memberId;
            }

            // データ更新
            appContext.Tasks.AddRange(output.Tasks);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// プロジェクト設定(工程と機能)を上書き
        /// </summary>
        /// <param name="appContext"></param>
        /// <param name="output"></param>
        public void OverwritePrjSettings(AppContext appContext, CompleteOutput output)
        {
            // 工程と機能を削除
            appContext.Processes.Clear();
            appContext.Functions.Clear();
            procIdGenerator.SetCurrentIndex(1);
            funcIdGenerator.SetCurrentIndex(1);

            // タスクのIDをnullで初期化
            foreach (var task in appContext.Tasks)
            {
                task.ProcessCd  = null;
                task.FunctionCd = null;
            }

            // 工程と機能のIDを振り直し
            foreach (var proc in output.Processes)
            {
                proc.ProcessCd = this.procIdGenerator.CreateNewId();
            }
            foreach (var func in output.Functions)
            {
                func.FunctionCd = this.funcIdGenerator.CreateNewId();
            }

            // データ更新
            appContext.Processes.AddRange(output.Processes);
            appContext.Functions.AddRange(output.Functions);
        }
Ejemplo n.º 4
0
 private void FaultEntryProcess(CompleteInput input, WorkOrderBill bill, CompleteOutput output)
 {
     if (input.Faults != null)
     {
         foreach (var fault in input.Faults)
         {
             var fe = bill.FaultEntry.FirstOrDefault(x => x.FaultId == fault.FaultId);
             if (fe == null)
             {
                 //新增分录
                 fe          = new WorkOrderFaultEntry();
                 fe.ParentId = bill.Id;
                 fe.FaultId  = fault.FaultId;
                 //fe.FaultReasonId = fault.FaultReasonId;
                 //fe.FaultMeasureId = fault.FaultMeasureId;
                 _workOrderFaultEntryRepository.Insert(fe);
             }
         }
     }
     for (int i = bill.FaultEntry.Count - 1; i >= 0; i--)
     {
         var entry      = bill.FaultEntry.ElementAt(i);
         var entryInput = input.Faults.FirstOrDefault(x => x.FaultId == entry.FaultId);
         if (entryInput != null)
         {
             //修改
             entry.FaultId = entryInput.FaultId;
         }
         else
         {
             if (input.Faults == null)
             {
                 //删除分录
                 _workOrderFaultEntryRepository.Delete(entry.Id);
                 bill.FaultEntry.Remove(entry);
                 i--;
             }
             else
             {
                 if (entryInput == null)
                 {
                     //删除分录
                     _workOrderFaultEntryRepository.Delete(entry.Id);
                     bill.FaultEntry.Remove(entry);
                     i--;
                 }
             }
         }
     }
 }
Ejemplo n.º 5
0
        /// <summary>
        /// プロジェクト設定(工程と機能)を追加
        /// </summary>
        /// <param name="appContext"></param>
        /// <param name="output"></param>
        public void AddPrjSettings(AppContext appContext, CompleteOutput output)
        {
            // 名前に重複がある場合は削除
            var addProcs = output.Processes.ToList();

            foreach (var proc in appContext.Processes)
            {
                var exists = addProcs.FirstOrDefault(x => x.ProcessName.Equals(proc.ProcessName));
                if (exists != null)
                {
                    addProcs.Remove(exists);
                }
            }
            var addFuncs = output.Functions.ToList();

            foreach (var func in appContext.Functions)
            {
                var exists = addFuncs.FirstOrDefault(x => x.FunctionName.Equals(func.FunctionName));
                if (exists != null)
                {
                    addFuncs.Remove(exists);
                }
            }

            //// IDを振り直し
            //foreach (var proc in addProcs)
            //{
            //    proc.ProcessCd = this.procIdGenerator.CreateNewId();
            //}
            //foreach (var func in addFuncs)
            //{
            //    func.FunctionCd = this.funcIdGenerator.CreateNewId();
            //}

            // データ更新
            foreach (var proc in addProcs)
            {
                var replace = appContext.Processes.FirstOrDefault(x => string.IsNullOrEmpty(x.ProcessName));
                replace.ProcessName = proc.ProcessName;
            }
            //appContext.Processes.AddRange(addProcs);
            foreach (var func in addFuncs)
            {
                var replace = appContext.Functions.FirstOrDefault(x => string.IsNullOrEmpty(x.FunctionName));
                replace.FunctionName = func.FunctionName;
            }
            //appContext.Functions.AddRange(addFuncs);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// WBS(作業)を追加
        /// </summary>
        /// <param name="appContext"></param>
        /// <param name="output"></param>
        public void AddWbs(AppContext appContext, CompleteOutput output)
        {
            // 名前に重複がある場合は削除
            var addTasks = output.TaskItems.Zip(output.Tasks, (a, b) => new { Item = a, Entity = b }).ToList();

            foreach (var task in appContext.Tasks)
            {
                var exists = addTasks.FirstOrDefault(x => x.Item.TaskName.Equals(task.TaskName));
                if (exists != null)
                {
                    addTasks.Remove(exists);
                }
            }

            // IDを振り直し
            foreach (var task in addTasks)
            {
                task.Entity.TaskCd = this.taskIdGenerator.CreateNewId();
                // 工程と紐づけ
                var proc = this.appContext.Processes.FirstOrDefault(x => x.ProcessName.Equals(task.Item.Process));
                if (proc != null)
                {
                    task.Entity.ProcessCd = proc.ProcessCd;
                }
                // 機能と紐づけ
                var func = this.appContext.Functions.FirstOrDefault(x => x.FunctionName.Equals(task.Item.Function));
                if (func != null)
                {
                    task.Entity.FunctionCd = func.FunctionCd;
                }
                // 要員と紐づけ
                var member = this.appContext.Members.FirstOrDefault(x => x.MemberName.Equals(task.Item.Member));
                if (member != null)
                {
                    task.Entity.AssignMemberCd = member.MemberCd;
                }
            }

            // データ更新
            appContext.Tasks.AddRange(addTasks.Select(x => x.Entity));
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 要員を上書き
        /// </summary>
        /// <param name="appContext"></param>
        /// <param name="output"></param>
        public void OverwriteMembers(AppContext appContext, CompleteOutput output)
        {
            // 要員を削除
            appContext.Members.Clear();
            memberIdGenerator.SetCurrentIndex(1);

            // タスクのIDをnullで初期化
            foreach (var task in appContext.Tasks)
            {
                task.AssignMemberCd = null;
            }

            // メンバーのIDを振り直し
            foreach (var member in output.Members)
            {
                member.MemberCd = this.procIdGenerator.CreateNewId();
            }

            // データ更新
            appContext.Members.AddRange(output.Members);
        }
Ejemplo n.º 8
0
        private void PhotoProcess(CompleteInput input, WorkOrderBill bill, CompleteOutput output)
        {
            if (input.Photos != null)
            {
                foreach (var photo in input.Photos)
                {
                    var newPhoto = bill.Photos.FirstOrDefault(x => x.FilePath == photo.FilePath);
                    if (newPhoto == null)
                    {
                        //新增分录
                        newPhoto          = new WorkOrderPhoto();
                        newPhoto.Bill     = bill;
                        newPhoto.FilePath = photo.FilePath;
                        _workOrderPhotoRepository.Insert(newPhoto);
                    }
                }
            }
            //删除照片
            for (int i = bill.Photos.Count - 1; i >= 0; i--)
            {
                WorkOrderPhoto photo = bill.Photos.ElementAt(i);

                if (input.Photos == null)
                {
                    //删除分录
                    _workOrderPhotoRepository.Delete(photo);
                    i--;
                }
                else
                {
                    var photoInput = input.Photos.FirstOrDefault(x => x.FilePath == photo.FilePath);
                    if (photoInput == null)
                    {
                        //删除分录
                        _workOrderPhotoRepository.Delete(photo);
                        i--;
                    }
                }
            }
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 要員を追加
        /// </summary>
        /// <param name="appContext"></param>
        /// <param name="output"></param>
        public void AddMembers(AppContext appContext, CompleteOutput output)
        {
            // 名前に重複がある場合は削除
            var addMembers = output.Members.ToList();

            foreach (var member in appContext.Members)
            {
                var exists = addMembers.FirstOrDefault(x => x.MemberName.Equals(member.MemberName));
                if (exists != null)
                {
                    addMembers.Remove(exists);
                }
            }

            // IDを振り直し
            foreach (var member in addMembers)
            {
                member.MemberCd = this.memberIdGenerator.CreateNewId();
            }

            // データ更新
            appContext.Members.AddRange(addMembers);
        }
Ejemplo n.º 10
0
        private void AccessoryEntryProcess(CompleteInput input, WorkOrderBill bill, CompleteOutput output)
        {
            if (input.Accessories != null)
            {
                //新增
                foreach (var accessory in input.Accessories)
                {
                    var entry = bill.AccessoryEntry.FirstOrDefault(x => x.AccessoryId == accessory.AccessoryId);
                    if (entry == null)
                    {
                        entry             = new WorkOrderAccessoryEntry();
                        entry.AccessoryId = accessory.AccessoryId;
                        entry.Count       = accessory.Count;
                        entry.NewSerials  = entry.OldSerials;
                        entry.BillId      = bill.Id;
                        Accessory accessoryEntity = _accessoryRepository.Get(accessory.AccessoryId);
                        _workOrderAccessoryEntryRepository.Insert(entry);
                        int currentCount = _inventoryDomainService.GetAccessoryCountByUser(bill.AssignedPerson, accessoryEntity);
                        if (currentCount >= entry.Count)
                        {
                            //扣减库存
                            _inventoryDomainService.UpdateStaffInventory(bill.AssignedPerson, entry.Accessory, entry.Count * (-1));
                        }
                        else
                        {
                            //库存不足
                            output.Successed = false;
                            string msg = string.Format("配件【{0}】持有量不足,缺少{1}{2}\r\n", entry.Accessory.Name, entry.Count - currentCount, entry.Accessory.Unit);
                            output.Error = output.Error + msg;
                        }
                    }
                }
            }
            //删除分录
            for (int i = bill.AccessoryEntry.Count - 1; i >= 0; i--)
            {
                WorkOrderAccessoryEntry accessoryEntry = bill.AccessoryEntry.ElementAt(i);


                if (input.Accessories == null)
                {
                    //增加配件持有数量
                    _inventoryDomainService.UpdateStaffInventory(bill.AssignedPerson, accessoryEntry.Accessory, accessoryEntry.Count);
                    //删除分录
                    _workOrderAccessoryEntryRepository.Delete(accessoryEntry);


                    i--;
                }
                else
                {
                    var entryInput = input.Accessories.FirstOrDefault(x => x.AccessoryId == accessoryEntry.AccessoryId);
                    if (entryInput == null)
                    {
                        //增加配件持有数量
                        _inventoryDomainService.UpdateStaffInventory(bill.AssignedPerson, accessoryEntry.Accessory, accessoryEntry.Count);
                        //删除分录
                        _workOrderAccessoryEntryRepository.Delete(accessoryEntry);


                        i--;
                    }
                    else
                    {
                        //增加配件持有数量
                        _inventoryDomainService.UpdateStaffInventory(bill.AssignedPerson, accessoryEntry.Accessory, accessoryEntry.Count);

                        //检查库存量
                        int currentCount = _inventoryDomainService.GetAccessoryCountByUser(bill.AssignedPerson, accessoryEntry.Accessory);
                        if (currentCount >= entryInput.Count)
                        {
                            //更新分录
                            accessoryEntry.Count      = entryInput.Count;
                            accessoryEntry.NewSerials = entryInput.NewSerials;
                            accessoryEntry.OldSerials = entryInput.OldSerials;
                            //扣减
                            _inventoryDomainService.UpdateStaffInventory(bill.AssignedPerson, accessoryEntry.Accessory, accessoryEntry.Count * (-1));
                        }
                        else
                        {
                            //库存不足
                            output.Successed = false;
                            string msg = string.Format("配件【{0}】持有量不足,缺少{1} {2}\r\n", accessoryEntry.Accessory.Name, accessoryEntry.Count - currentCount, accessoryEntry.Accessory.Unit);
                            output.Error = output.Error + msg;
                        }
                        //i--;
                    }
                }
            }
        }
Ejemplo n.º 11
0
        /// <summary>
        /// 完工回单
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public void Complete(CompleteInput input)
        {
            CompleteOutput output = new CompleteOutput()
            {
                Successed = true
            };

            var bill    = _workOrderManager.Get(input.BillId);
            var archive = _equipmentArchiveAppService.GetArchiveBySerialNo(bill.SerialNo);

            if (bill.ServiceType.Equals(ServiceType.Install))
            {
                if (archive != null)
                {
                    throw new UserFriendlyException("序列号已存在");
                }
            }
            else
            {
                if (archive == null)
                {
                    throw new UserFriendlyException("序列号不存在");
                }
            }

            //记录回单活动
            if (bill.BillStatus == BillStatus.Dispatch)
            {
                var user           = AsyncHelper.RunSync(() => UserManager.GetUserByIdAsync(UserManager.AbpSession.UserId.Value));
                var reportActivity = new Activity()
                {
                    Bill = bill, Operater = user, Name = "回单", Log = string.Format("服务人员【{0}】已将问题处理完毕。", user.Name)
                };
                _workOrderManager.AddActivity(reportActivity);
            }
            //回单基本信息
            bill.SerialNo       = input.SerialNo;
            bill.Office         = input.Office;
            bill.OfficeMobile   = input.OfficeMobile;
            bill.OfficePerson   = input.OfficePerson;
            bill.OfficePosition = input.OfficePosition;
            bill.OfficeTel      = input.OfficeTel;
            bill.Warrenty       = input.Warrenty;
            bill.ServiceTime    = input.ServiceTime;
            bill.Dealfa         = input.Dealfa;
            bill.Faultap        = input.Faultap;

            //处理图片
            PhotoProcess(input, bill, output);

            //完工
            _workOrderManager.Complete(bill);
            if (!output.Successed)
            {
                throw new UserFriendlyException(output.Error);
            }
            if (!string.IsNullOrEmpty(bill.YUNMsg))
            {
                //云办公已办
                string bootURL   = ConfigurationManager.AppSettings["bootURL"];
                string pubKey    = ConfigurationManager.AppSettings["pubKey"];
                string no        = ConfigurationManager.AppSettings["no"];
                string pub       = ConfigurationManager.AppSettings["pub"];
                string time      = DateTime.Now.CurrentTimeMillis().ToString();
                string nonce     = Guid.NewGuid().ToString();
                string appID     = ConfigurationManager.AppSettings["appID"];     //轻应用注册到云之家时生成
                string appSecret = ConfigurationManager.AppSettings["appSecret"]; //轻应用注册到云之家时生成
                string yunxt     = ConfigurationManager.AppSettings["yunxt"];
                YUNAPI.YUNXT = yunxt;
                string pubtoken = YUNAPI.CreatePubToken(no, pub, pubKey, nonce, time);
                var    message  = new
                {
                    no         = no,
                    pub        = pub,
                    time       = time,
                    nonce      = nonce,
                    pubtoken   = pubtoken,
                    todoMsgIds = bill.YUNMsg,
                    todoStatus = YUNAPI.TODOSTAUS_DONE,
                    account    = bill.AssignedPerson.UserName
                };
                try {
                    AsyncHelper.RunSync(() => YUNAPI.ChangeTodoMsgStatus(JsonConvert.SerializeObject(message)));
                }
                catch
                {
                }
            }
        }
Ejemplo n.º 12
0
        /// <summary>
        /// 読み込み内容をAppContextに反映する
        /// </summary>
        /// <param name="appContext"></param>
        /// <param name="importType"></param>
        /// <param name="isImportToPrjSettings"></param>
        /// <param name="isImportToWbs"></param>
        /// <param name="output"></param>
        private void UpdateContext(AppContext appContext, ImportTypes importType, bool isImportToPrjSettings, bool isImportToMembers, bool isImportToWbs, CompleteOutput output)
        {
            // インポート種別と取り込み先により適用メソッドを選択
            var applyRoutine = GetRoutine(importType, isImportToPrjSettings, isImportToMembers, isImportToWbs);

            // 適用処理を実行
            applyRoutine.Invoke(appContext, output);
        }