302 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			302 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using APT.BaseData.Domain.Entities;
 | 
						|
using APT.BaseData.Domain.Entities.FM;
 | 
						|
using APT.BaseData.Domain.Enums;
 | 
						|
using APT.BaseData.Domain.IServices;
 | 
						|
using APT.BaseData.Domain.IServices.FM;
 | 
						|
using APT.BaseData.Services.Services.FM;
 | 
						|
using APT.Infrastructure.Core;
 | 
						|
using APT.MS.Domain.Entities.FO;
 | 
						|
using APT.MS.Domain.Enums;
 | 
						|
using APT.Utility;
 | 
						|
using Microsoft.AspNetCore.Mvc;
 | 
						|
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.DirectoryServices.ActiveDirectory;
 | 
						|
using System.Linq;
 | 
						|
using System.Threading.Tasks;
 | 
						|
namespace APT.FO.WebApi.Controllers.Api.FO
 | 
						|
{
 | 
						|
    [Route("api/FO/FOChangeShiftRecord")]
 | 
						|
    public class ChangeShiftRecordController : AuthorizeApiController<T_FO_CHANGE_SHIFT_RECORD>
 | 
						|
    {
 | 
						|
        IFMNotificationTaskService NotificationTaskService { get; set; }
 | 
						|
        IPFCodeRuleService CodeRuleService { get; set; }
 | 
						|
        IFMDepartmentService DepartmentService { get; set; }
 | 
						|
 | 
						|
        public ChangeShiftRecordController(IPFCodeRuleService codeRuleService, IFMNotificationTaskService notificationTaskService, IFMDepartmentService departmentService)
 | 
						|
        {
 | 
						|
            NotificationTaskService = notificationTaskService;
 | 
						|
            CodeRuleService = codeRuleService;
 | 
						|
            DepartmentService = departmentService;
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// 保存并通知
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="id"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        [HttpPost, Route("SaveAndNotice")]
 | 
						|
        public JsonActionResult<bool> SaveAndNotice([FromBody] T_FO_CHANGE_SHIFT_RECORD entity)
 | 
						|
        {
 | 
						|
            return SafeExecute(() =>
 | 
						|
            {
 | 
						|
                var updateRecord = GetEntity<T_FO_CHANGE_SHIFT_RECORD>(entity.ID);
 | 
						|
                if (string.IsNullOrEmpty(entity.ADDRESS))
 | 
						|
                {
 | 
						|
                    throw new Exception("请填写交接地点!");
 | 
						|
                }
 | 
						|
                var userID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
 | 
						|
                if (updateRecord.SHIFT_STATUS != (int)FOChangeShiftStatusEnum.待处理)
 | 
						|
                {
 | 
						|
                    var changeUser = GetEntity<T_FO_CHANGE_SHIFT_RECORD_PRE_USER>(t => t.CHANGE_SHIFT_RECORD_ID == entity.ID && t.USER_ID == userID);
 | 
						|
                    if (changeUser != null && changeUser.USER_SHIFT_STATUS == 1)
 | 
						|
                    {
 | 
						|
                        T_FM_NOTIFICATION_TASK finishNotice = null;
 | 
						|
                        var task = GetEntity<T_FM_NOTIFICATION_TASK>(entity.TaskID);
 | 
						|
                        finishNotice = NotificationTaskService.FOGetTaskFinishModel(entity.TaskID, entity.ID, "FO013_SHOWPRINT");
 | 
						|
                        UpdateEntity(finishNotice);
 | 
						|
                    }
 | 
						|
                    var afterUser = GetEntity<T_FO_CHANGE_SHIFT_RECORD_AFTER_USER>(t => t.CHANGE_SHIFT_RECORD_ID == entity.ID && t.USER_ID == userID);
 | 
						|
                    if (afterUser != null && afterUser.USER_SHIFT_STATUS == 1)
 | 
						|
                    {
 | 
						|
                        T_FM_NOTIFICATION_TASK finishNotice = null;
 | 
						|
                        var task = GetEntity<T_FM_NOTIFICATION_TASK>(entity.TaskID);
 | 
						|
                        finishNotice = NotificationTaskService.FOGetTaskFinishModel(entity.TaskID, entity.ID, "FO013_SHOWPRINT");
 | 
						|
                        UpdateEntity(finishNotice);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                var taskEndTime = DateTime.Now.AddHours(24);
 | 
						|
                var endTime = entity.CHANGE_SHIFT_TIME.AddHours(4);
 | 
						|
                if (entity.TaskID != null && entity.TaskID != Guid.Empty)
 | 
						|
                {
 | 
						|
                    var currTask = GetEntity<T_FM_NOTIFICATION_TASK>(t=>t.ID== entity.TaskID);
 | 
						|
                    if (currTask != null)
 | 
						|
                    {
 | 
						|
                        userID = currTask.USER_ID;
 | 
						|
                        taskEndTime = currTask.TASK_ENDDT;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                if (DateTime.Now > taskEndTime)
 | 
						|
                {
 | 
						|
                    endTime = DateTime.Now.AddHours(24);
 | 
						|
                }
 | 
						|
                var afterUsersTemp = entity.Nav_AfterUsers.ToList();
 | 
						|
                var afterUsers = entity.Nav_AfterUsers.Where(t=>t.IS_DELETED==false);
 | 
						|
                if (afterUsers.Count() == 0)
 | 
						|
                {
 | 
						|
                    throw new Exception("请选择接班人员!");
 | 
						|
                }
 | 
						|
                entity.Nav_PreUsers = null;
 | 
						|
                entity.Nav_AfterUsers = null;
 | 
						|
                entity.Nav_Files = null;
 | 
						|
                entity.EDITOR_ID = userID;
 | 
						|
                if (entity.LAST_CLASS_RECORD_STATUS == FORunRecordStatusEnum.完整)
 | 
						|
                {
 | 
						|
                    entity.LAST_CLASS_RECORD_QUESTION = "无";
 | 
						|
                }
 | 
						|
                if (entity.LAST_CLASS_FINISH_STATUS == FOJobFinishEnum.完成)
 | 
						|
                {
 | 
						|
                    entity.LAST_CLASS_FINISH_QUESTION = "无";
 | 
						|
                }
 | 
						|
                var currpreUsers = afterUsers.FirstOrDefault(t => t.USER_ID == userID && t.USER_SHIFT_STATUS == (int)FOUserShiftStatusEnum.待处理);
 | 
						|
                if (currpreUsers != null)
 | 
						|
                {
 | 
						|
                    currpreUsers.USER_SHIFT_STATUS = (int)FOUserShiftStatusEnum.已处理;
 | 
						|
                    T_FM_NOTIFICATION_TASK finishNotice = NotificationTaskService.FOGetTaskFinishModel(entity.TaskID, entity.ID, "FO013_SHOWPRINT");
 | 
						|
                    var count = afterUsers.Count(t => t.USER_SHIFT_STATUS == 0);
 | 
						|
                    List<T_FM_NOTIFICATION_TASK> updateTasks = null;
 | 
						|
                    if (count == 0)
 | 
						|
                    {
 | 
						|
                        entity.SHIFT_STATUS = (int)FOChangeShiftStatusEnum.归档;
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        entity.SHIFT_STATUS = (int)FOChangeShiftStatusEnum.接班中;
 | 
						|
                        updateTasks = GetEntities<T_FM_NOTIFICATION_TASK>(t => t.SOURCE_DATA_ID == entity.ID && t.USER_ID != userID && t.NOTICE_STATUS == (int)FMNoticeStatusEnum.未处理, new BaseFilter(entity.ORG_ID)).ToList();
 | 
						|
                        foreach (var task in updateTasks)
 | 
						|
                        {
 | 
						|
                            task.NOTICE_TITLE = task.NOTICE_TITLE + "确认";
 | 
						|
                            task.SOURCE_FORMCODE = "FO013_SHOWPRINT";
 | 
						|
                            task.TASK_ENDDT = DateTime.Now > task.TASK_ENDDT ? endTime : task.TASK_ENDDT;
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    UnifiedCommit(() =>
 | 
						|
                    {
 | 
						|
                        UpdateEntityNoCommit(currpreUsers);
 | 
						|
                        UpdateEntityNoCommit(entity);
 | 
						|
                        if (finishNotice != null)
 | 
						|
                            UpdateEntityNoCommit(finishNotice);
 | 
						|
                        if (updateTasks != null && updateTasks.Any())
 | 
						|
                            BantchUpdateEntityNoCommit(updateTasks);
 | 
						|
                    });
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    var noticeTitles = new List<string>();
 | 
						|
                    var noticeUserIds = new List<Guid>();
 | 
						|
                    var noticeUserNames = new List<string>();
 | 
						|
                    var noticeDataIds = new List<Guid>();
 | 
						|
                    entity.SHIFT_STATUS = (int)FOChangeShiftStatusEnum.接班中;
 | 
						|
                    foreach (var user in afterUsers)
 | 
						|
                    {
 | 
						|
                        noticeTitles.Add(updateRecord.NAME);
 | 
						|
                        noticeDataIds.Add(updateRecord.ID);
 | 
						|
                        noticeUserIds.Add(user.USER_ID);
 | 
						|
                        noticeUserNames.Add(user.Nav_User.NAME);
 | 
						|
                        user.Nav_User = null;
 | 
						|
                    }
 | 
						|
                    var sendChangeNotices = NotificationTaskService.InsertUserNoticeTaskModels(noticeTitles, noticeDataIds, updateRecord.ORG_ID, noticeUserIds, noticeUserNames, DateTime.Now, endTime, 1, "FO012");
 | 
						|
                    T_FM_NOTIFICATION_TASK finishNotice = NotificationTaskService.FOGetTaskFinishModel(entity.TaskID, entity.ID, "FO013_SHOWPRINT");
 | 
						|
                    UnifiedCommit(() =>
 | 
						|
                    {
 | 
						|
                        if (sendChangeNotices != null && sendChangeNotices.Any())
 | 
						|
                        {
 | 
						|
                            BantchAddEntityNoCommit(sendChangeNotices);
 | 
						|
                        }
 | 
						|
                        UpdateEntityNoCommit(entity);
 | 
						|
                        if (finishNotice != null)
 | 
						|
                            UpdateEntityNoCommit(finishNotice);
 | 
						|
                        if (afterUsersTemp != null && afterUsersTemp.Any())
 | 
						|
                        {
 | 
						|
                            BantchSaveEntityNoCommit(afterUsersTemp);
 | 
						|
                        }
 | 
						|
                    });
 | 
						|
                }
 | 
						|
                return true;
 | 
						|
            });
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 同意
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="id"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        [HttpPost, Route("PersonalAgree")]
 | 
						|
        public JsonActionResult<bool> PersonalAgree([FromBody] T_FO_CHANGE_SHIFT_RECORD param)
 | 
						|
        {
 | 
						|
            return SafeExecute<bool>(() =>
 | 
						|
            {
 | 
						|
                var userID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
 | 
						|
                if (param.TaskID != null && param.TaskID != Guid.Empty)
 | 
						|
                {
 | 
						|
                    var currTask = GetEntity<T_FM_NOTIFICATION_TASK>(t => t.ID == param.TaskID);
 | 
						|
                    if (currTask != null)
 | 
						|
                    {
 | 
						|
                        userID = currTask.USER_ID;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                var orgID = APT.Infrastructure.Api.AppContext.CurrentSession.OrgId;
 | 
						|
                T_FO_CHANGE_SHIFT_RECORD entity = null;
 | 
						|
                var baseFilter = new BaseFilter(orgID);
 | 
						|
                var afterUsers = GetEntities<T_FO_CHANGE_SHIFT_RECORD_AFTER_USER>(t => t.CHANGE_SHIFT_RECORD_ID == param.ID, new BaseFilter(orgID));
 | 
						|
                var currpreUser = afterUsers.FirstOrDefault(t => t.USER_ID == userID);
 | 
						|
                if (currpreUser != null)
 | 
						|
                {
 | 
						|
                    currpreUser.USER_SHIFT_STATUS = (int)FOUserShiftStatusEnum.已处理;
 | 
						|
                    var todoCount = afterUsers.Count(t => t.USER_SHIFT_STATUS == 0);
 | 
						|
                    if (todoCount == 0)
 | 
						|
                    {
 | 
						|
                        entity = GetEntity<T_FO_CHANGE_SHIFT_RECORD>(param.ID);
 | 
						|
                        if (entity != null)
 | 
						|
                        {
 | 
						|
                            entity.SHIFT_STATUS = (int)FOChangeShiftStatusEnum.归档;
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    NotificationTaskService.NotificationTaskFinish(param.TaskID, () =>
 | 
						|
                    {
 | 
						|
                        if (entity != null)
 | 
						|
                            UpdateEntityNoCommit(entity, "SHIFT_STATUS");
 | 
						|
                        UpdateEntityNoCommit(currpreUser, "USER_SHIFT_STATUS");
 | 
						|
                    });
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    var finishTask = NotificationTaskService.FOGetTaskFinishModel(param.TaskID,param.ID,"FO013_SHOWPRINT");
 | 
						|
                    UpdateEntity(finishTask);
 | 
						|
                }
 | 
						|
                return true;
 | 
						|
            });
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// 排序分页查询数据
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="pageFilter">分页过滤实体</param>
 | 
						|
        /// <returns></returns>
 | 
						|
        [HttpPost, Route("OrderPaged")]
 | 
						|
        public PagedActionResult<T_FO_CHANGE_SHIFT_RECORD> OrderPaged([FromBody] KeywordPageFilter pageFilter)
 | 
						|
        {
 | 
						|
            var result = new PagedActionResult<T_FO_CHANGE_SHIFT_RECORD>();
 | 
						|
            var loginUserId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
 | 
						|
            var users = this.GetEntities<T_FM_USER>(t => t.ENABLE_STATUS == 0,new BaseFilter(pageFilter.OrgId), "Nav_ApproveRole");
 | 
						|
            var admiId = users.FirstOrDefault(t => t.CODE.Contains("admin") && t.ENABLE_STATUS == 0)?.ID;
 | 
						|
            var currDep = APT.Infrastructure.Api.AppContext.CurrentSession.DepartmentID.Value;
 | 
						|
            var tempDeps = GetEntities<T_FM_DEPARTMENT>(t=>t.ENABLE_STATUS == 0,new BaseFilter(pageFilter.OrgId));
 | 
						|
            var tempDep = tempDeps.FirstOrDefault(t=>t.ID == currDep);
 | 
						|
            pageFilter.IgnoreDataRule = true;
 | 
						|
            pageFilter.Include.Add("Nav_PreUsers");
 | 
						|
            pageFilter.Include.Add("Nav_AfterUsers");
 | 
						|
            pageFilter.Include.Add("Nav_Team");
 | 
						|
            pageFilter.Limit = 10;
 | 
						|
            if (tempDep!=null&& tempDep.DEPARTMENT_TYPE == (int)FMDepartmentType.Class)
 | 
						|
            {
 | 
						|
                currDep = (Guid)tempDep.PARENT_ID;
 | 
						|
            }
 | 
						|
            var AHDepartment = users.FirstOrDefault(t => t.Nav_ApproveRole != null && (t.Nav_ApproveRole.NAME == "安环部负责人" || t.Nav_ApproveRole.NAME == "安环部安全员")).DEPARTMENT_ID;
 | 
						|
            if (loginUserId == null || loginUserId == admiId || currDep == AHDepartment)
 | 
						|
            {
 | 
						|
                result = this.GetOrderPageEntities<T_FO_CHANGE_SHIFT_RECORD>(null, pageFilter);
 | 
						|
            }
 | 
						|
            else if (tempDep != null && (tempDep.NAME.Contains("安环科") || tempDep.NAME.Contains("安全环保")) && tempDep.PARENT_ID != null)
 | 
						|
            {
 | 
						|
                List<Guid> departmentId = new List<Guid>();
 | 
						|
                departmentId.Add((Guid)tempDep.PARENT_ID);
 | 
						|
                List<Guid> departmentIds = new List<Guid>() { (Guid)tempDep.PARENT_ID };
 | 
						|
                DepartmentService.GetDepartmentIds(pageFilter.OrgId.Value, departmentId, ref departmentIds);
 | 
						|
                if (departmentIds != null && departmentIds.Any())
 | 
						|
                {
 | 
						|
                    result = this.GetOrderPageEntities<T_FO_CHANGE_SHIFT_RECORD>(t => t.Nav_Team != null && departmentIds.Contains((Guid)t.Nav_Team.DEPARTMENT_ID), pageFilter);
 | 
						|
                }
 | 
						|
                else
 | 
						|
                    result.Data = null;
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                var loginDepartmentId = this.GetEntity<T_FM_USER>(t => t.ID == loginUserId && t.ENABLE_STATUS == 0)?.DEPARTMENT_ID;
 | 
						|
                List<Guid> departmentId = new List<Guid>();
 | 
						|
                departmentId.Add((Guid)loginDepartmentId);
 | 
						|
                List<Guid> departmentIds = new List<Guid>() { (Guid)loginDepartmentId };
 | 
						|
                DepartmentService.GetDepartmentIds(pageFilter.OrgId.Value, departmentId, ref departmentIds);
 | 
						|
                if (departmentIds != null && departmentIds.Any())
 | 
						|
                {
 | 
						|
                    result = this.GetOrderPageEntities<T_FO_CHANGE_SHIFT_RECORD>(t => t.Nav_Team!=null && departmentIds.Contains((Guid)t.Nav_Team.DEPARTMENT_ID), pageFilter);
 | 
						|
                }
 | 
						|
                else
 | 
						|
                    result.Data = null;
 | 
						|
            }
 | 
						|
            if (result.Data.Any())
 | 
						|
            {
 | 
						|
                foreach (var entity in result.Data)
 | 
						|
                {
 | 
						|
                    if (entity.Nav_PreUsers != null && entity.Nav_PreUsers.Any())
 | 
						|
                    {
 | 
						|
                        var userTemp = entity.Nav_PreUsers.Select(t => t.USER_ID).ToList();
 | 
						|
                        var userList = users.Where(t => userTemp.Contains(t.ID)).Select(m=>m.NAME).ToList();
 | 
						|
                        entity.CURRENT_USER = string.Join(",", userList);
 | 
						|
                    }
 | 
						|
                    if (entity.Nav_AfterUsers != null && entity.Nav_AfterUsers.Any())
 | 
						|
                    {
 | 
						|
                        var user = users.FirstOrDefault(t=>t.ID ==  entity.Nav_AfterUsers.FirstOrDefault().USER_ID);
 | 
						|
                        if (user != null)
 | 
						|
                        {
 | 
						|
                            entity.CHANGE_DEPART = tempDeps.FirstOrDefault(t => t.ID == user.DEPARTMENT_ID)?.NAME;
 | 
						|
                            var userTemp = entity.Nav_AfterUsers.Select(t => t.USER_ID).ToList();
 | 
						|
                            var userList = users.Where(t => userTemp.Contains(t.ID)).Select(m => m.NAME).ToList();
 | 
						|
                            entity.CHANGE_USER = string.Join(",", userList);
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
            return result;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |