using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using MadRunFabric.Common;
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Logging;
using DistributionApi.IRepositories;
using Api.SignToken;
using System.Security.Claims;
using MadRunFabric.Model;
using System.Text.RegularExpressions;
using Microsoft.Extensions.Configuration;
namespace DistributionApi.Controllers
{
///
/// 配送物品管理
///
[Authorize]
[ApiVersion("6.0")]
[Route("api/[controller]")]
[Produces("application/json")]
public class DistriGoodsController : BaseController
{
private readonly ILogger _logger;
private readonly IConfiguration _configuration;
private readonly ISys_User_AccountRepository _sys_user_accountRepository;
private readonly ISignTokenService _signTokenService;
private readonly IDistri_GoodsRepository _distri_goodsrepository;
private readonly IDistri_Goods_TypeRepository _distri_goods_typerepository;
public DistriGoodsController(
ILogger logger,
IConfiguration configuration,
ISys_User_AccountRepository sys_user_accountRepository,
ISignTokenService signTokenService,
IDistri_GoodsRepository distri_goodsrepository,
IDistri_Goods_TypeRepository distri_goods_typerepository
)
{
_logger = logger;
_configuration = configuration;
_sys_user_accountRepository = sys_user_accountRepository;
_signTokenService = signTokenService;
_distri_goodsrepository = distri_goodsrepository;
_distri_goods_typerepository = distri_goods_typerepository;
}
///
/// 获取配送物品列表分页 by page
///
///
///
///
///
///
///
[HttpGet("getlistbypage")]
public async Task GetListByPageAsync(string keyword, string projectid, string kindid, int pageindex = 1, int pagesize = 10)
{
string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
//var userstr = _signTokenService.GetUserInfoAsync(usercode).Result;
//var userinfo = userstr.ToJObject()["data"].ToString().ToObject();
string allprojectrole = _configuration["allprojectrole"];
var userinfos = _sys_user_accountRepository.GetUserInfo(usercode, allprojectrole);
var userinfo = JsonHelper.JsonToEntity(userinfos.ToJson());
List kindids = new List();
if (!string.IsNullOrEmpty(kindid))
{
//获取物品分类id list
var listGoodType = (await _distri_goods_typerepository.Get(x => x.isdelete == 0)); //.ToList();
if (!string.IsNullOrEmpty(projectid))
listGoodType = listGoodType.Where(x => x.projectid == projectid); //.ToList();
kindids = GetGoodsTypeIds(listGoodType.ToList(), kindid);
}
//获取数据
int recordCount = 0;
var result = _distri_goodsrepository.GetListsByPage(keyword, projectid, userinfo, kindids, pageindex, pagesize, out recordCount);
var obj = new
{
rows = result.ToList(),
total = recordCount
};
return Success("获取成功", obj);
}
///
/// 获取配送物品列表 - 下拉
///
///
///
/// 物品分类
///
[HttpGet("getlist")]
public async Task GetListAsync(string keyword, string projectid,string kindid)
{
string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
var userstr = _signTokenService.GetUserInfoAsync(usercode).Result;
var userinfo = userstr.ToJObject()["data"].ToString().ToObject();
//获取物品分类id list
var listGoodType = (await _distri_goods_typerepository.Get(x => x.projectid == projectid)).ToList();
List kindids = GetGoodsTypeIds(listGoodType, kindid);
//获取数据
var result = _distri_goodsrepository.GetLists(keyword, projectid, userinfo, kindids);
return Success("获取成功", result.ToList());
}
///
/// 获取配送物品详情
///
[HttpGet("getsingle")]
public IActionResult GetSingleAsync(string id)
{
var model = _distri_goodsrepository.GetDetails(id);
return Success("获取成功", model);
}
///
/// 添加配送物品
///
[HttpPost("add")]
public async Task AddAsync(string projectid, string kindid, string buildingid, string floorid, string goodsname, int typeid, bool isremind, string remark, int sortnum)
{
string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
#region 判断验证
if (string.IsNullOrEmpty(projectid))
return Error("请选择项目");
if (string.IsNullOrWhiteSpace(kindid))
return Error("请选择物品种类");
if (typeid == 0)
return Error("请选择紧急程度");
#endregion
var model = new Distri_Goods();
#region model 添加配送物品对象
model.projectid = projectid;
model.kindid = kindid;
model.typeid = typeid;
model.goodsname = string.IsNullOrEmpty(goodsname) ? "" : Regex.Replace(goodsname, @"\s", "");
model.isremind = isremind;
model.remark = string.IsNullOrEmpty(remark) ? "" : Regex.Replace(remark, @"\s", "");
model.buildingid = buildingid;
model.floorid = floorid;
model.sortnum = sortnum;
model.createtby = usercode;
#endregion
bool bl = await _distri_goodsrepository.Add(model);
if (bl)
{
return Success("保存成功");
}
else
return Error("保存失败");
}
///
/// 修改配送物品
///
[HttpPost("update")]
public async Task UpdateAsync(string id, string projectid, string kindid, string buildingid, string floorid, string goodsname, int typeid, bool isremind, string remark, int sortnum)
{
string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
var model = (await _distri_goodsrepository.GetSingle(p => p.id == id));
if (model != null)
{
#region 判断验证
if (string.IsNullOrEmpty(projectid))
return Error("请选择项目");
if (string.IsNullOrWhiteSpace(kindid))
return Error("请选择物品种类");
if (typeid == 0)
return Error("请选择紧急程度");
#endregion
#region model 添加配送物品对象
model.projectid = projectid;
model.kindid = kindid;
model.typeid = typeid;
model.goodsname = string.IsNullOrEmpty(goodsname) ? "" : Regex.Replace(goodsname, @"\s", "");
model.isremind = isremind;
model.remark = string.IsNullOrEmpty(remark) ? "" : Regex.Replace(remark, @"\s", "");
model.buildingid = buildingid;
model.floorid = floorid;
model.sortnum = sortnum;
model.createtby = usercode;
#endregion
bool b = await _distri_goodsrepository.UpdateOne(model);
if (b)
{
return Success("保存成功");
}
else
return Error("保存失败");
}
return Error("操作失败");
}
///
/// 删除配送物品
///
///
///
[HttpPost("delete")]
public async Task DeleteAsync(string[] ids)
{
string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
//使用逻辑删除
var res = 0;
if (ids != null && ids.Length > 0)
{
foreach (var id in ids)
{
var model = await _distri_goodsrepository.GetSingle(id);
model.isdelete = 1;
model.deleteby = usercode;
model.deletetime = DateTime.Now;
if (await _distri_goodsrepository.UpdateOne(model))
{
res += 1;
}
}
if (res == ids.Length)
return Success("删除成功");
else if (res > 0 && res < ids.Length)
return Error("部分删除失败");
else
return Error("删除失败");
}
else
return Error("请选择要删除的记录");
}
#region 方法
///
/// 获取物品分类id list - 递归
///
///
///
///
List listIds = new List();
public List GetGoodsTypeIds(List list, string kindid)
{
string kindid_init = kindid;
var lists = list.Where(x => x.parent_id == kindid).ToList();
if (lists != null && lists.Count > 0)
{
//有多级子级
foreach (var item in lists)
{
if (item != null)
{
string id = item.id;
listIds.Add(item.id);
GetGoodsTypeIds(list, id);
}
}
}
else {
listIds.Add(kindid_init);
}
return listIds;
}
#endregion
}
}