mh_custom/wtmProject/Areas/_Admin/Controllers/WTM_CUSTOMController.cs
2026-01-06 10:55:05 +08:00

331 lines
14 KiB
C#

using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using WalkingTec.Mvvm.Core;
using WalkingTec.Mvvm.Core.Extensions;
using WalkingTec.Mvvm.Mvc;
using wtmProject.ViewModel._Admin.WTM_CUSTOMVMs;
using wtmProject.Model;
using wtmProject.ViewModel._Admin.WTM_BUSINESSVMs;
using wtmProject.ViewModel._Admin.WTM_VISIT_PLANVMs;
using wtmProject.ViewModel._Admin.FrameworkOutRecordVMs;
using BootstrapBlazor.Components;
using wtmProject.ViewModel._Admin.WTM_CONTRACTVMs;
using EFCore.BulkExtensions;
using Elsa.Models;
using System.Reflection.Emit;
namespace wtmProject.Controllers
{
[Area("_Admin")]
[AuthorizeJwtWithCookie]
[ActionDescription("客户维护")]
[ApiController]
[Route("api/WTM_CUSTOM")]
[AllRights]
public partial class WTM_CUSTOMController : BaseApiController
{
[ActionDescription("Sys.Search")]
[HttpPost("Search")]
public IActionResult Search(WTM_CUSTOMSearcher searcher)
{
if (ModelState.IsValid)
{
var vm = Wtm.CreateVM<WTM_CUSTOMListVM>();
vm.Searcher = searcher;
return Content(vm.GetJson(enumToString: false));
}
else
{
return BadRequest(ModelState.GetErrorJson());
}
}
[ActionDescription("Sys.Get")]
[HttpGet("{id}")]
public WTM_CUSTOMVM Get(string id)
{
var vm = Wtm.CreateVM<WTM_CUSTOMVM>(id);
return vm;
}
[ActionDescription("Sys.Create")]
[HttpPost("Add")]
public IActionResult Add(WTM_CUSTOMVM vm)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState.GetErrorJson());
}
else
{
var vmOld = DC.Set<WTM_CUSTOM>().FirstOrDefault(t => t.CustomAllName == vm.Entity.CustomAllName);
if (vmOld != null)
{
Dictionary<string, string> Form = new Dictionary<string, string>();
List<string> Message = new List<string>() { "请勿重复添加,该客户已存在" };
ErrorObj error = new ErrorObj();
error.Form = Form;
error.Message = Message;
return BadRequest(error);
}
else
{
vm.DoAdd();
if (!ModelState.IsValid)
{
return BadRequest(ModelState.GetErrorJson());
}
else
{
return Ok(vm.Entity);
}
}
}
}
[ActionDescription("Sys.Edit")]
[HttpPut("Edit")]
public IActionResult Edit(WTM_CUSTOMVM vm)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState.GetErrorJson());
}
else
{
vm.DoEdit(false);
if (!ModelState.IsValid)
{
return BadRequest(ModelState.GetErrorJson());
}
else
{
var contracts = DC.Set<WTM_CONTRACT>().Where(x => x.CustomId == vm.Entity.ID).ToList();
if (contracts.Any())
{
foreach (var contract in contracts)
{
contract.AreaId = vm.Entity.AreaId;
DC.Set<WTM_CONTRACT>().Update(contract);
}
}
var billings = DC.Set<WTM_BILLING_LIST>().Where(x => x.CustomId == vm.Entity.ID).ToList();
if (billings.Any())
{
foreach (var billing in billings)
{
billing.AreaId = vm.Entity.AreaId;
DC.Set<WTM_BILLING_LIST>().Update(billing);
}
}
DC.SaveChanges();
return Ok(vm.Entity);
}
}
}
[HttpPost("BatchDelete")]
[ActionDescription("Sys.Delete")]
public IActionResult BatchDelete(string[] ids)
{
var vm = Wtm.CreateVM<WTM_CUSTOMBatchVM>();
if (ids != null && ids.Count() > 0)
{
vm.Ids = ids;
}
else
{
return Ok();
}
if (!ModelState.IsValid || !vm.DoBatchDelete())
{
return BadRequest(ModelState.GetErrorJson());
}
else
{
return Ok(ids.Count());
}
}
[ActionDescription("Sys.Export")]
[HttpPost("ExportExcel")]
public IActionResult ExportExcel(WTM_CUSTOMSearcher searcher)
{
var vm = Wtm.CreateVM<WTM_CUSTOMListVM>();
vm.Searcher = searcher;
vm.SearcherMode = ListVMSearchModeEnum.Export;
return vm.GetExportData();
}
[ActionDescription("Sys.CheckExport")]
[HttpPost("ExportExcelByIds")]
public IActionResult ExportExcelByIds(string[] ids)
{
var vm = Wtm.CreateVM<WTM_CUSTOMListVM>();
if (ids != null && ids.Count() > 0)
{
vm.Ids = new List<string>(ids);
vm.SearcherMode = ListVMSearchModeEnum.CheckExport;
}
return vm.GetExportData();
}
[ActionDescription("Sys.DownloadTemplate")]
[HttpGet("GetExcelTemplate")]
public IActionResult GetExcelTemplate()
{
var vm = Wtm.CreateVM<WTM_CUSTOMImportVM>();
var qs = new Dictionary<string, string>();
foreach (var item in Request.Query.Keys)
{
qs.Add(item, Request.Query[item]);
}
vm.SetParms(qs);
var data = vm.GenerateTemplate(out string fileName);
return File(data, "application/vnd.ms-excel", fileName);
}
[ActionDescription("Sys.Import")]
[HttpPost("Import")]
public ActionResult Import(WTM_CUSTOMImportVM vm)
{
if (vm!=null && (vm.ErrorListVM.EntityList.Count > 0 || !vm.BatchSaveData()))
{
return BadRequest(vm.GetErrorJson());
}
else
{
return Ok(vm?.EntityList?.Count ?? 0);
}
}
[HttpGet("GetWTM_AREAs")]
public ActionResult GetWTM_AREAs()
{
var userAreas = DC.Set<WTM_USER_AREA>().Where(t => t.UserCode == Wtm.LoginUserInfo.ITCode).Select(m => m.AreaCode).ToList();
return Ok(DC.Set<WTM_AREA>().Where(x => userAreas.Contains(x.AreaCode)).GetSelectListItems(Wtm, x => x.AreaName, null, false, false));
}
[HttpGet("GetName")]
public WTM_CUSTOM GetName(string name)
{
var vm = DC.Set<WTM_CUSTOM>().FirstOrDefault(t => t.CustomAllName == name);
if (vm == null)
{
return null;
}
return vm;
}
[HttpGet("GetNameList")]
public string GetNameList(string name)
{
string result = "";
var vm = DC.Set<WTM_CUSTOM>().Where(t => t.CustomAllName.Contains(name)).Select(m=>m.CustomAllName).Distinct().ToList();
if (vm != null && vm.Any())
{
result = string.Join(";", vm);
}
return result;
}
[HttpGet("GetCustomInfo")]
public ActionResult GetCustomInfo(string name)
{
var temp = new WTM_CUSTOM_Temp() { CustomInfo = new WTM_CUSTOM(), VisitRecord = new List<WTM_VISIT_PLAN_View>(), BusinessInfo=new List<WTM_BUSINESS_View>(), ContractInfo = new List<WTM_CONTRACT_View>() };
if (!string.IsNullOrEmpty(name))
{
var id=new Guid(name);
var vm = DC.Set<WTM_CUSTOM>().Where(o => o.ID == id).FirstOrDefault();
if (vm != null)
{
temp.CustomInfo = vm;
//客户联系人子表
var persons = DC.Set<WTM_CUSTOM_PERSON>().Where(o => o.CustomId == vm.ID).ToList();
temp.CustomInfo.CustomPerson = persons;
//拜访计划
var plans = DC.Set<WTM_VISIT_PLAN>().Where(o => o.CustomId == vm.ID).ToList();
var planIds = plans.Select(m => m.ID).ToList();
//拜访计划协同资源
var planUsers = DC.Set<WTM_VISIT_PLAN_USER>().Where(o => planIds.Contains((Guid)o.VisitPlanId)).ToList();
var users = DC.Set<FrameworkUser>().ToList();
planUsers.ForEach(item =>
{
item.User = users.FirstOrDefault(o => o.ID == item.UserId);
});
//拜访计划附件
var planFiles = DC.Set<WTM_VISIT_PLAN_FILE>().Where(o => planIds.Contains((Guid)o.VisitPlanId)).ToList();
var dc = Wtm.CreateDC(cskey: null);
planFiles.ForEach(item =>
{
item.File = dc.Set<FileAttachment>().CheckID(item.FileId).FirstOrDefault();
});
//拜访计划
temp.VisitRecord = plans.Select(item => new WTM_VISIT_PLAN_View {
Name_view = item.MarkManage?.Name,
VisitStartTime = item.VisitStartTime,
VisitEndTime = item.VisitEndTime,
CustomAllName_view = item.Custom?.CustomAllName,
PersonName_view = item.VisitObject?.PersonName,
VisitTarget = item.VisitTarget == null ? null : item.VisitTarget.Replace("\n", ""),
Files = planFiles.Where(o => o.VisitPlanId == item.ID).ToList(),
VisitPersons = string.Join(",", planUsers.Where(o => o.VisitPlanId == item.ID).Select(v => v.User?.Name).ToList()),
}).ToList();
//商机维护
var business = DC.Set<WTM_BUSINESS>().Where(o => o.CustomId == vm.ID).ToList();
var projects = DC.Set<WTM_PROJECT>();
temp.BusinessInfo = business.Select(item => new WTM_BUSINESS_View
{
ID = item.ID,
CustomAllName_view = item.Custom?.CustomAllName,
PersonName_view = item.VisitObject?.PersonName,
BusinessName = item.BusinessName,
ProjectName_view = projects.FirstOrDefault(t=>t.ID == item.ProjectId)?.ProjectName,
BusinessStatus = item.BusinessStatus,
UpdateTime = item.UpdateTime,
UpdateBy = item.UpdateBy,
}).ToList();
//合同管理
var contracts = DC.Set<WTM_CONTRACT>().Where(o => o.CustomId == vm.ID).ToList();
var contractIds = contracts.Select(t => t.ID).ToList();
var billList = DC.Set<WTM_BILLING_LIST>().Where(o => contractIds.Contains((Guid)o.ContractId)).ToList();
temp.ContractInfo = contracts.Select(item => new WTM_CONTRACT_View
{
ID = item.ID,
ContractCode = item.ContractCode,
ContractName = item.ContractName,
ContractAmount = item.ContractAmount,
ProjectName_view = projects.FirstOrDefault(t => t.ID == item.ProjectId)?.ProjectName,
RefundAmount = billList.Where(u => u.ContractId == item.ID).Sum(p => p.BillingAmount).ToString(),
RefundCount = billList.Where(u => u.ContractId == item.ID).Count().ToString() + "/" + (item.ContractCycle==null?0:(int)item.ContractCycle + 1),
Name_view2 = item.ProjectManage?.Name,
Name_view = item.MarkManage?.Name,
}).ToList();
}
else
{
temp.CustomInfo = new WTM_CUSTOM();
var persons = new List<WTM_CUSTOM_PERSON>();
temp.CustomInfo.CustomPerson = persons;
temp.VisitRecord = new List<WTM_VISIT_PLAN_View>();
temp.BusinessInfo = new List<WTM_BUSINESS_View>();
temp.ContractInfo = new List<WTM_CONTRACT_View>();
}
}
else
{
temp.CustomInfo = new WTM_CUSTOM();
var persons = new List<WTM_CUSTOM_PERSON>();
temp.CustomInfo.CustomPerson = persons;
temp.VisitRecord = new List<WTM_VISIT_PLAN_View>();
temp.BusinessInfo = new List<WTM_BUSINESS_View>();
temp.ContractInfo = new List<WTM_CONTRACT_View>();
}
return Ok(temp);
}
}
}