using DS.Module.Core;
using DS.Module.DjyServiceStatus;
using DS.Module.ExcelModule;
using DS.Module.ExcelModule.Model;
using DS.Module.PrintModule;
using DS.Module.SqlSugar;
using DS.Module.UserModule;
using DS.WMS.Core.Code.Interface;
using DS.WMS.Core.Op.Interface;
using DS.WMS.Core.TaskPlat.Entity;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
namespace DS.WMS.OpApi.Controllers
{
///
/// 大简云服务项目服务 模块
///
public class DjyServiceStatusController : ApiController
{
private readonly IDjyServiceStatusService _invokeService;
private readonly IServiceProvider serviceProvider;
private readonly IUser user;
private readonly ISaasDbService saasDbService;
private readonly ISeaExportCommonService _seaComService;
///
/// 构造函数
///
public DjyServiceStatusController(IDjyServiceStatusService invokeService,
IServiceProvider serviceProvider,
IUser user,
ISaasDbService saasDbService)
{
_invokeService = invokeService;
this.serviceProvider = serviceProvider;
this.user = user;
this.saasDbService = saasDbService;
this._seaComService = serviceProvider.GetRequiredService();
}
///
/// 保存服务项目
///
///
/// 返回回执
[HttpPost]
[Route("SaveServiceProject")]
public async Task SaveServiceProject([FromBody] EmbedServiceProjectDto req)
{
return await _invokeService.SaveServiceProject(req);
}
///
/// 取消服务项目
///
///
/// 返回回执
[HttpPost]
[Route("CancelServiceProject")]
public async Task CancelServiceProject([FromBody] EmbedServiceProjectDto req)
{
return await _invokeService.CancelServiceProject(req);
}
///
/// 获取服务项目列表
///
///
/// 返回回执
[HttpPost]
[Route("GetServiceProjectList")]
public async Task GetServiceProjectList([FromBody] EmbedQueryServiceProjectWithStatus req)
{
return await _invokeService.GetServiceProjectList(req);
}
///
/// 获取服务项目下的状态列表
///
///
/// 返回回执
[HttpPost]
[Route("GetServiceStatusList")]
public async Task GetServiceStatusList([FromBody] EmbedQueryServiceProjectWithStatus req)
{
var result = await _invokeService.GetServiceStatusList(req);
if (result?.data != null
&& ((JObject)result.data)["ext"] is JArray extArray
&& extArray.Count > 0
&& long.TryParse(req.BusinessId, out long businessId))
{
var tenantDb = saasDbService.GetBizDbScopeById(user.TenantId);
var skuCodeList = extArray.Select(x => x["statusSKUCode"]?.ToString()).Distinct().ToList();
if (skuCodeList.Count > 0)
{
var allotDataList = await tenantDb.Queryable()
.Where(x => x.BusinessId == businessId && skuCodeList.Contains(x.GoodStatusCode))
.OrderBy(x => x.Id)
.Select(x => new { x.GoodStatusCode, x.UserName, x.StatusName, x.StatusTime })
.ToListAsync();
foreach (JToken item in extArray)
{
var skuCode = item["statusSKUCode"]?.ToString();
if (skuCode != null)
{
var allotData = allotDataList.Where(x => x.GoodStatusCode == skuCode).ToList();
if (allotData.Count > 0)
{
item["allotUserList"] = JArray.FromObject(allotData);
}
}
}
}
}
return result;
}
///
/// 保存服务状态
///
///
/// 返回回执
[HttpPost]
[Route("SaveServiceStatus")]
public async Task SaveServiceStatus([FromBody] EmbedServiceProjectStatusDto req)
{
if (req.StatusCodes[0].StatusCode.Contains("BG")|| req.StatusCodes[0].StatusCode.Contains("YPC")|| req.StatusCodes[0].StatusCode.Contains("YDC") || req.StatusCodes[0].StatusCode.Contains("YFVGM") )
{
_seaComService.UpdateSeaExportTag(long.Parse(req.businessId), req.StatusCodes[0].StatusCode,true);
}
return await _invokeService.SaveServiceStatus(req);
}
///
/// 取消服务状态
///
///
/// 返回回执
[HttpPost]
[Route("CancelServiceStatus")]
public async Task CancelServiceStatus([FromBody] EmbedServiceProjectStatusDto req)
{
if (req.StatusCodes[0].StatusCode.Contains("BG") || req.StatusCodes[0].StatusCode.Contains("YPC") || req.StatusCodes[0].StatusCode.Contains("YDC") || req.StatusCodes[0].StatusCode.Contains("YFVGM"))
{
_seaComService.UpdateSeaExportTag(long.Parse(req.businessId), req.StatusCodes[0].StatusCode, false);
}
return await _invokeService.CancelServiceStatus(req);
}
///
/// 获取可用的服务项目字典列表
///
/// 是否重新加载缓存
///
[HttpGet]
[Route("GetEnableProjectDictTreeList")]
public async Task GetEnableProjectDictTreeList([FromQuery] bool isAvoidCache = false)
{
return await _invokeService.GetEnableProjectDictTreeList(isAvoidCache);
}
}
}