mh_jy_safe/APT.MicroApi/APT.SC.WebApi/Controllers/Api/DMController/DevicePurchaseController.cs

375 lines
20 KiB
C#
Raw Normal View History

2025-08-25 09:56:57 +08:00
using APT.BaseData.Domain.Entities;
using APT.BaseData.Domain.Entities.FM;
using APT.BaseData.Domain.Enums;
using APT.BaseData.Domain.Enums.PF;
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.DM;
using APT.MS.Domain.Entities.FO;
using APT.MS.Domain.Entities.SC.DM;
using APT.MS.Domain.Entities.SC.PR;
using APT.MS.Domain.Enums;
using APT.Utility;
using Autofac.Core;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
namespace APT.SC.WebApi.Controllers.Api.DMController
{
/// <summary>
/// 设备设施库采购记录
/// </summary>
[Route("api/DM/DMDevicePurchase")]
public partial class DevicePurchaseController : AuthorizeApiController<T_DM_DEVICE_PURCHASE>
{
IPFCodeRuleService CodeRuleService { get; set; }
IFMNotificationTaskService NotificationTaskService { get; set; }
IFMFlowPermitService MFlowPermitService { get; set; }
IPFApproveCallBackService ApproveCallBackService { get; set; }
/// <summary>
/// 设备设施采购
/// </summary>
/// <param name="notificationTaskService"></param>
public DevicePurchaseController(IPFCodeRuleService codeRuleService, IFMNotificationTaskService notificationTaskService, IFMFlowPermitService mFlowPermitService, IPFApproveCallBackService approveCallBackService)
{
CodeRuleService = codeRuleService;
NotificationTaskService = notificationTaskService;
MFlowPermitService = mFlowPermitService;
ApproveCallBackService = approveCallBackService;
}
/// <summary>
/// 新增/编辑
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost, Route("FullUpdateUser")]
public JsonActionResult<bool> FullUpdateUser([FromBody] T_DM_DEVICE_PURCHASE entity)
{
return SafeExecute(() =>
{
if (string.IsNullOrEmpty(entity.CODE))
entity.CODE = DateTime.Now.Year.ToString().PadLeft(4, '0') + DateTime.Now.Month.ToString().PadLeft(2, '0') + DateTime.Now.Day.ToString().PadLeft(2, '0') + new Random().Next().ToString();
var details = entity.Nav_Details;
entity.Nav_Details = null;
var loginUserId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
if (entity.TaskID != Guid.Empty)
{
var currTask = GetEntity<T_FM_NOTIFICATION_TASK>(t => t.ID == entity.TaskID);
if (currTask != null)
{
loginUserId = currTask.USER_ID;
}
}
List<T_DM_DEVICE_PURCHASE_DETAIL_FILE> fileList = new List<T_DM_DEVICE_PURCHASE_DETAIL_FILE>();
List<T_DM_DEVICE_PURCHASE_DETAIL_RECEIPT_FILE> receiptFileList = new List<T_DM_DEVICE_PURCHASE_DETAIL_RECEIPT_FILE>();
List<Guid> deletefileList = new List<Guid>();
List<Guid> deleteReceiptFileList = new List<Guid>();
List<Guid> deleteDetailList = new List<Guid>();
T_FM_NOTIFICATION_TASK task = null;
if (details != null && details.Any())
{
var userManageIds= details.Select(t=>t.MANAGE_USER_ID).Distinct().ToList();
var users = this.GetEntities<T_FM_USER>(t => userManageIds.Contains(t.ID) && t.ENABLE_STATUS == 0, new BaseFilter(entity.ORG_ID),"Nav_Person");
deleteDetailList = details.Select(t => t.ID).ToList();
var files = this.GetEntities<T_DM_DEVICE_PURCHASE_DETAIL_FILE>(t => deleteDetailList.Contains(t.DEVICE_PURCHASE_DETAIL_ID), new BaseFilter(entity.ORG_ID)).ToList();
deletefileList = files.Select(t => t.ID).ToList();
var receiptFiles = this.GetEntities<T_DM_DEVICE_PURCHASE_DETAIL_RECEIPT_FILE>(t => deleteDetailList.Contains(t.DEVICE_PURCHASE_DETAIL_ID), new BaseFilter(entity.ORG_ID)).ToList();
deleteReceiptFileList = receiptFiles.Select(t => t.ID).ToList();
details.ForEach(t =>
{
t.ORG_ID = entity.ORG_ID; t.DEVICE_PURCHASE_ID = entity.ID; t.USER_ID = loginUserId;
if (t.Nav_Files != null && t.Nav_Files.Any())
{
t.Nav_Files.ForEach(m =>
{
m.ORG_ID = entity.ORG_ID; m.DEVICE_PURCHASE_DETAIL_ID = t.ID;
//deletefileList.Add(m.ID);
fileList.Add(m);
});
t.Nav_Files = null;
}
if (t.Nav_ReceiptFiles != null && t.Nav_ReceiptFiles.Any())
{
t.Nav_ReceiptFiles.ForEach(m =>
{
m.ORG_ID = entity.ORG_ID; m.DEVICE_PURCHASE_DETAIL_ID = t.ID;
//deleteReceiptFileList.Add(m.ID);
receiptFileList.Add(m);
});
t.Nav_ReceiptFiles = null;
}
if (t.MANAGE_USER_ID != null)
{
t.DEPARTMENT_ID = users.FirstOrDefault(u => u.ID == t.MANAGE_USER_ID)?.DEPARTMENT_ID;
t.POST_ID = users.FirstOrDefault(u => u.ID == t.MANAGE_USER_ID)?.Nav_Person?.POST_ID;
}
});
}
if (entity.PUBLISH != null && entity.PUBLISH.Equals("SaveAndNotify"))
{
var model = this.GetEntity<T_DM_DEVICE_PURCHASE>(entity.ID, "Nav_Details");
//待所有设备都填写完后再提交审批
var qty = (model != null && model.Nav_Details.Any()) ? model.Nav_Details.Where(t => t.DEAL_STATUS == 0).Count() : 0;
if (qty <= 1)
{
details.ForEach(t =>
{
t.DEAL_STATUS = 1;
});
entity.STATUS = PFStandardStatus.Approving;
//取审批流水码
var sysFilter = new SystemCodeFilter();
sysFilter.CodeType = (int)PFCodeRuleType.;
sysFilter.Count = 1;
sysFilter.OrgId = entity.ORG_ID;
var codes = CodeRuleService.NewGenSerial(sysFilter);
var serialCode = codes.Split(new char[] { ',' });
MFlowPermitService.InsertApprove(serialCode[0], "DM036", "", entity.ID, "DM036_SHOWPRINT", entity.TaskID, true, () =>
{
if (deletefileList != null && deletefileList.Any())
this.BantchDeleteEntityNoCommit<T_DM_DEVICE_PURCHASE_DETAIL_FILE>(deletefileList);
if (deleteReceiptFileList != null && deleteReceiptFileList.Any())
this.BantchDeleteEntityNoCommit<T_DM_DEVICE_PURCHASE_DETAIL_RECEIPT_FILE>(deleteReceiptFileList);
if (entity != null)
this.UpdateEntityNoCommit(entity);
if (details != null && details.Any())
this.BantchSaveEntityNoCommit(details);
if (fileList != null && fileList.Any())
this.BantchSaveEntityNoCommit(fileList);
if (receiptFileList != null && receiptFileList.Any())
this.BantchSaveEntityNoCommit(receiptFileList);
}, null, null, null, null, null, "DM036_SHOWPRINT", null, "设备设施申购表采购信息待审批", FMTASKTYPE.JobSite);
return true;
}
else
{
if (entity.TaskID != Guid.Empty)
{
task = NotificationTaskService.GetTaskFinishModel(entity.TaskID);
task.SOURCE_FORMCODE = "DM036_SHOWPRINT";
}
details.ForEach(t =>
{
t.DEAL_STATUS = 1;
});
}
}
UnifiedCommit(() =>
{
if (entity != null)
this.UpdateEntityNoCommit(entity);
if (deletefileList != null && deletefileList.Any())
this.BantchDeleteEntityNoCommit<T_DM_DEVICE_PURCHASE_DETAIL_FILE>(deletefileList);
if (deleteReceiptFileList != null && deleteReceiptFileList.Any())
this.BantchDeleteEntityNoCommit<T_DM_DEVICE_PURCHASE_DETAIL_RECEIPT_FILE>(deleteReceiptFileList);
if (details != null && details.Any())
this.BantchSaveEntityNoCommit(details);
if (fileList != null && fileList.Any())
this.BantchSaveEntityNoCommit(fileList);
if (receiptFileList != null && receiptFileList.Any())
this.BantchSaveEntityNoCommit(receiptFileList);
if (task != null)
this.UpdateEntityNoCommit(task);
});
return true;
});
}
/// <summary>
/// 采购专员获取
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
[HttpPost, Route("GetUserEdit")]
public JsonActionResult<T_DM_DEVICE_PURCHASE> GetUserEdit([FromBody] KeywordFilter filter)
{
return SafeExecute(() => {
var id = filter.FilterGroup.Rules.FirstOrDefault(t => t.Field == "ID").Value.ToString();
if (string.IsNullOrEmpty(id))
this.ThrowError("030017");
var result = this.GetEntity<T_DM_DEVICE_PURCHASE>(id, new string[] { "Nav_User", "Nav_Department","Nav_Details","Nav_Details.Nav_Type",
"Nav_Details.Nav_Device","Nav_Details.Nav_Files","Nav_Details.Nav_Files.Nav_ImgFile","Nav_Details.Nav_ReceiptFiles",
"Nav_Details.Nav_ManageUser","Nav_Details.Nav_ReceiptFiles.Nav_ImgFile","Nav_Details.Nav_Department","Nav_Details.Nav_Post",
"Nav_Details.Nav_Category"});
if (result != null && result.Nav_Details != null)
{
var loginUserId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
result.Nav_Details = result.Nav_Details.Where(t => t.USER_ID == loginUserId).ToList();
}
return result;
});
}
/// <summary>
/// 部门级负责人审阅
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost, Route("IdentityUpdate")]
public JsonActionResult<bool> IdentityUpdate([FromBody] T_DM_DEVICE_PURCHASE model)
{
return SafeExecute(() =>
{
var entity = this.GetEntity<T_DM_DEVICE_PURCHASE>(model.ID, "Nav_Details.Nav_Files", "Nav_Details.Nav_ReceiptFiles");
entity.STATUS = PFStandardStatus.Archived;
var users = this.GetEntities<T_FM_USER>(t => t.ENABLE_STATUS == 0, new BaseFilter(entity.ORG_ID), "Nav_Person");
List<T_FM_NOTIFICATION_TASK> sendNotices = new List<T_FM_NOTIFICATION_TASK>();
T_DM_DEVICE_APPLY apply = null;
List<T_DM_DEVICE_APPLY_DETAIL> detailList = new List<T_DM_DEVICE_APPLY_DETAIL>();
//发给申购人一张申领表
if (entity.USER_ID != null)
{
apply = new T_DM_DEVICE_APPLY();
apply.USER_ID = entity.USER_ID;
apply.DEPARTMENT_ID = entity.DEPARTMENT_ID;
apply.ORG_ID = entity.ORG_ID;
apply.CODE = entity.CODE;
apply.STATUS = PFStandardStatus.Draft;
apply.DEVICE_PURCHASE_ID = entity.ID;
apply.MineType = entity.MineType;
var DMUser = users.FirstOrDefault(t => t.ID == entity.USER_ID);
if (DMUser != null)
{
var sendNotice = NotificationTaskService.InsertUserNoticeTaskModel("设备设施申领表", apply.ID, entity.ORG_ID, DMUser.ID, DMUser.NAME, DateTime.Now,
DateTime.Now.AddDays(1), (int)FMNoticeTypeEnum., "DM014");
sendNotices.Add(sendNotice);
}
}
List<T_DM_DEVICE_BASE> deviceList = new List<T_DM_DEVICE_BASE>();
List<T_DM_DEVICE_BASE_FILE> fileList = new List<T_DM_DEVICE_BASE_FILE>();
List<T_DM_DEVICE_BASE_RECEIPT_FILE> receiptFileList = new List<T_DM_DEVICE_BASE_RECEIPT_FILE>();
var deviceIds = entity.Nav_Details.Select(t => t.DEVICE_ID).Distinct().ToList();
var devices = this.GetEntities<T_DM_DEVICE>(t => deviceIds.Contains(t.ID), new BaseFilter(entity.ORG_ID));
var date = DateTime.Now.Year.ToString().PadLeft(4, '0') + DateTime.Now.Month.ToString().PadLeft(2, '0') + DateTime.Now.Day.ToString().PadLeft(2, '0');
//写入设备设施库
foreach (var item in entity.Nav_Details)
{
if (item.QTY <= 0)
throw new Exception("设备数量必须大于或等于1");
for (var i = 0; i < item.QTY; i++)
{
//var user = users.FirstOrDefault(u => u.ID == item.MANAGE_USER_ID);
var device = new T_DM_DEVICE_BASE();
device.ID = Guid.NewGuid();
device.CODE = date + new Random().Next().ToString();
//int num = i + 1;
device.ORG_ID = entity.ORG_ID;
device.NAME = devices.FirstOrDefault(t => t.ID == item.DEVICE_ID)?.NAME;
string nameHead = DataHelper.MkPinyinString(device.NAME);
device.MACHINE_CODE = nameHead + DateTime.Now.ToString("yyyyMMdd") + new Random().Next().ToString("D6");
device.CATEGORY_ID = item.CATEGORY_ID;
device.TYPE_ID = item.TYPE_ID;
device.IS_EMERGENCY = item.IS_EMERGENCY;
device.PARAMETER = item.PARAMETER;
device.DEVICE_TYPE = item.DEVICE_TYPE;
device.DEVICE_ID = item.DEVICE_ID;
device.SPEC = item.SPEC;
device.UNIT = item.UNIT;
device.QTY = 1;
device.PURCHASE_DATE = item.PURCHASE_DATE;
device.ACCEPT_DATE = item.ACCEPT_DATE;
//device.PURPOSE = item.use;
device.POSITION = item.POSITION;
device.USER_ID = item.MANAGE_USER_ID;
device.DEPARTMENT_ID = item.DEPARTMENT_ID;
device.USER_POST_ID = item.POST_ID;
device.MineType = entity.MineType;
device.DEVICE_STATUS = DMDeviceStatusEnum.;
//device.USE_USER_ID = item.USER_ID;
//device.USE_DEPARTMENT_ID = item.DEPARTMENT_ID;
//device.USE_USER_POST_ID = item.USE_USER_POST_ID;
device.IS_SEND = 1;
device.DEVICE_PURCHASE_ID = item.DEVICE_PURCHASE_ID;
deviceList.Add(device);
if (item.Nav_Files != null && item.Nav_Files.Any())
{
item.Nav_Files.ForEach(t =>
{
T_DM_DEVICE_BASE_FILE file = new T_DM_DEVICE_BASE_FILE();
file.ORG_ID = entity.ORG_ID; file.DEVICE_BASE_ID = device.ID;
file.IMG_FILE_ID = t.IMG_FILE_ID;
fileList.Add(file);
});
}
if (item.Nav_ReceiptFiles != null && item.Nav_ReceiptFiles.Any())
{
item.Nav_ReceiptFiles.ForEach(t =>
{
T_DM_DEVICE_BASE_RECEIPT_FILE file = new T_DM_DEVICE_BASE_RECEIPT_FILE();
file.ORG_ID = entity.ORG_ID; file.DEVICE_BASE_ID = device.ID;
file.IMG_FILE_ID = t.IMG_FILE_ID;
receiptFileList.Add(file);
});
}
if (apply != null)
{
T_DM_DEVICE_APPLY_DETAIL newdata = new T_DM_DEVICE_APPLY_DETAIL();
newdata.DEVICE_APPLY_ID = apply.ID;
newdata.DEVICE_BASE_ID = device.ID;
newdata.ORG_ID = device.ORG_ID;
newdata.SPEC = device.SPEC;
newdata.QTY = device.QTY;
newdata.UNIT = device.UNIT;
detailList.Add(newdata);
}
}
}
UnifiedCommit(() =>
{
if (sendNotices != null && sendNotices.Count > 0)
BantchSaveEntityNoCommit(sendNotices);
if (apply != null)
this.UpdateEntityNoCommit(apply);
if (detailList != null && detailList.Any())
BantchSaveEntityNoCommit(detailList);
if (deviceList != null && deviceList.Any())
BantchSaveEntityNoCommit(deviceList);
if (fileList != null && fileList.Any())
BantchSaveEntityNoCommit(fileList);
if (receiptFileList != null && receiptFileList.Any())
BantchSaveEntityNoCommit(receiptFileList);
});
return true;
});
}
/// <summary>
/// 回调函数
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost, Route("BackUpdateNew")]
public JsonActionResult<bool> BackUpdateNew([FromBody] T_PF_APPROVE entity)
{
return SafeExecute(() =>
{
return ApproveCallBackService.CallBackNew("DM/DMDevicePurchase/BackUpdateNew", entity);
});
}
/// <summary>
/// 排序分页查询数据
/// </summary>
/// <param name="pageFilter">分页过滤实体</param>
/// <returns></returns>
[HttpPost, Route("PostOrderPaged")]
public PagedActionResult<T_FM_USER_POST> PostOrderPaged([FromBody] KeywordPageFilter pageFilter)
{
var result = new PagedActionResult<T_FM_USER_POST>();
var filter = pageFilter.FilterGroup.Rules.FirstOrDefault(t => t.Field == "DEPARTMENT_ID");
if (filter != null && !string.IsNullOrEmpty(filter.Value.ToString()))
{
var users = this.GetEntities<T_FM_USER>(t => t.DEPARTMENT_ID == Guid.Parse(filter.Value.ToString()) && t.ENABLE_STATUS == 0 && t.Nav_Person!=null,new BaseFilter(pageFilter.OrgId), "Nav_Person");
var postIds = users.Select(t => t.Nav_Person.POST_ID).Distinct().ToList();
pageFilter.FilterGroup.Rules.Remove(filter);
result = this.GetOrderPageEntities<T_FM_USER_POST>(t => postIds.Contains(t.ID), pageFilter);
}
else
{
result = this.GetOrderPageEntities<T_FM_USER_POST>(null, pageFilter);
}
return result;
}
}
}